diff -Nrcpad gcc-3.4.3/boehm-gc/.cvsignore gcc-4.0.0/boehm-gc/.cvsignore
*** gcc-3.4.3/boehm-gc/.cvsignore	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/.cvsignore	Tue Jun 15 07:42:06 2004
***************
*** 0 ****
--- 1 ----
+ autom4te.cache
diff -Nrcpad gcc-3.4.3/boehm-gc/BCC_MAKEFILE gcc-4.0.0/boehm-gc/BCC_MAKEFILE
*** gcc-3.4.3/boehm-gc/BCC_MAKEFILE	Mon Jul 28 04:18:19 2003
--- gcc-4.0.0/boehm-gc/BCC_MAKEFILE	Fri Aug 13 23:05:28 2004
*************** link=	 $(bcbin)\ilink32
*** 16,22 ****
  cflags=  -O2 -R -v- -vi -H -H=gc.csm -I$(bcinclude);$(gcinclude1);$(gcinclude2) -L$(bclib) \
  	 -w-pro -w-aus -w-par -w-ccc -w-rch -a4 -D__STDC__=0
  #defines= -DSILENT
! defines= -DSMALL_CONFIG -DSILENT -DALL_INTERIOR_POINTERS -DUSE_GENERIC -DNO_GETENV -DJAVA_FINALIZATION -DGC_OPERATOR_NEW_ARRAY
  
  .c.obj:
  	$(cc) @&&|
--- 16,22 ----
  cflags=  -O2 -R -v- -vi -H -H=gc.csm -I$(bcinclude);$(gcinclude1);$(gcinclude2) -L$(bclib) \
  	 -w-pro -w-aus -w-par -w-ccc -w-rch -a4 -D__STDC__=0
  #defines= -DSILENT
! defines= -DSILENT -DALL_INTERIOR_POINTERS -DUSE_GENERIC -DNO_GETENV -DJAVA_FINALIZATION -DGC_OPERATOR_NEW_ARRAY
  
  .c.obj:
  	$(cc) @&&|
diff -Nrcpad gcc-3.4.3/boehm-gc/ChangeLog gcc-4.0.0/boehm-gc/ChangeLog
*** gcc-3.4.3/boehm-gc/ChangeLog	Fri Nov  5 03:33:12 2004
--- gcc-4.0.0/boehm-gc/ChangeLog	Thu Apr 21 05:17:16 2005
***************
*** 1,33 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-04-21  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR target/14326
! 	Backport from mainline:
  
  	* include/private/gcconfig.h (PREFETCH): Use __builtin_prefetch
  	for gcc >= 3.0.
  	(PREFETCH_FOR_WRITE): Likewise.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
! 2004-02-22  Matthias Klose  <doko@debian.org>
  
  	* config.guess: Update from version 2002-01-10 to 2004-02-16.
  	* config.sub: Update from version 2002-01-02 to 2004-02-16.
  
  2004-01-20  Andrew Haley  <aph@redhat.com>
  
  	* include/private/gcconfig.h (USE_MMAP): Define for all Linux.
--- 1,321 ----
! 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.
  
! 2005-02-26  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* dyn_load.c: On NetBSD, include machine/elf_machdep.h and define
! 	ELFSIZE in terms of ARCH_ELFSIZE (back-ported from gc7.0alpha1).
! 
! 2005-02-15  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR libgcj/19823
! 	* configure.host: Set gc_use_mmap on *-linux*.
! 	* configure.ac: Define USE_MMAP if gc_use_mmap is set.
! 	* include/private/gc_priv.h: Include gc_config.h.
! 	* configure, include/gc_config.h.in: Rebuilt.
! 
! 2005-02-07  Hans Boehm  <Hans.Boehm@hp.com>
! 
! 	* allchblk.c (GC_allochblk_nth): Dont overlook available space if
! 	  GC disabled, correctly convert GC_finalizer_mem_freed to byte,
! 	  total_size to words.
! 	* dyn_load.c (win32 GC_register_dynamic_libraries): Consider only
! 	  MEM_IMAGE regions.
! 	* mach_dep.c (GC_with_callee_saves_pushed): separate into new function,
! 	  and indent appropriately.
! 	* mark_rts.c (GC_approx_sp): Access stack.
! 	* pthread_stop_world.c: (GC_suspend_handler): Explicitly push
! 	  callee-saves registers when appropriate.
! 	  (GC_stop_world): Handle EINTR from sem_wait (sync with Mono GC).
! 
! 2005-01-01  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* configure.ac (AC_CONFIG_HEADERS): Build both include/gc_config.h 
! 	and include/gc_ext_config.h.
! 	* include/gc_ext_config.h: New file. Define only THREAD_LOCAL_ALLOC.
! 	* include/gc.h: Undef PACKAGE_* before including gc_config.h.
! 
! 2004-12-13  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate.
! 
! 2004-11-29  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR libgcj/18699
! 	Revert patches of 2004-11-26 and 2004-11-27.
! 
! 2004-11-29  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate for libtool change.
! 
! 2004-11-27  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* include/gc_config.h.in: Add comment. Define only THREAD_LOCAL_ALLOC.
! 
! 2004-11-26  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	Fix "PACKAGE_NAME redefined" errors.
! 	* configure.ac (AC_CONFIG_HEADERS): Build both include/config.h 
! 	and include/gc_config.h.
! 	* configure: Regenerated.
! 	* include/gc_config.h.in: No longer auto-generated. Define only the
! 	macros needed by libjava.
! 	* include/config.h.in: Generated by autoheader.
! 	* include/gc.h: Include config.h, not gc_config.h.
! 
! 2004-11-25  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate for libtool reversion.
! 
! 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate for libtool change.
! 
! 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	* configure.ac (machdep): Use sparc_mach_dep.lo on
! 	sparc64-sun-solaris2.* too.
! 	(Solaris gcc optimization fix): Disable on sparc*-sun-solaris2.*.
! 	* configure: Regenerate.
! 
! 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR target/18444
! 	* configure.ac (threading): Accept 'posix95'.
! 	* configure: Regenerate.
! 
! 2004-11-04  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am: Define ACLOCAL_AMFLAGS.
! 	* configure.ac: Remove redundant sinclude.
! 	* acinclude.m4: Delete file.
! 	* aclocal.m4: Regenerate.
! 	* Makefile.in, include/Makefile.in: Regenerate.
! 	* configure: Regenerate.
! 
! 2004-10-19  Ulrich Weigand  <uweigand@de.ibm.com>
! 
! 	* include/private/gc_priv.h (GC_generic_malloc_words_small_inner):
! 	Add prototype.
! 
! 2004-10-13  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
! 
! 	* include/private/gcconfig.h: Add m32r-linux target.
! 
! 2004-09-27  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure.ac: Update all AC_DEFINEs to newer style.
! 	* configure: Regenerate.
! 	* include/gc_config.h.in: Regenerate.
! 
! 2004-08-27  Hans Boehm  <Hans.Boehm@hp.com>
! 
! 	* backgraph.c, gc_priv.h (GC_traverse_back_graph,
! 	GC_print_back_graph_stats): split GC_traverse_back_graph.
! 	* backgraph.c: Dynamically grow in_progress_space.
! 	* finalize.c (GC_notify_or_invoke_finalizers): also call
! 	GC_print_back_graph_stats.
! 	* alloc.c, finalize.c, gc_priv.h (GC_generate_random_backtrace_no_gc,
! 	GC_print_back_height): Move delarations to header file.
! 	* configure.ac: rename --enable-full-debug to --enable-gc-debug.
! 	* configure: Regenerate.
! 	
! 2004-08-23  Hans Boehm  <Hans.Boehm@hp.com>
! 
! 	* aix_irix_threads.c: Move _THREADS checks after gc_priv.h include.
! 	* backgraph.c, include/private/gc_pmark.h: Always include gc.h.
! 
! 2004-08-23  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* win32_threads.c: Move GC_WIN32_THREADS check after gc_priv.h include.
! 	Reported by Danny Smith.
! 
! 2004-08-21  Danny Smith  <dannysmith@users.sourceforge.net>
! 
! 	* misc.c (GC_init): Replace lhs cast with rhs cast.
! 
! 2004-08-16  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* specific.c: Check GC_LINUX_THREADS before including 
! 	private/specific.h. From Richard Earnshaw.
! 
! 2004-08-16  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* aclocal.m4: Remove obsolete construct for old automake.
! 	* acinclude.m4: Regenerate with aclocal 1.9.1.
! 	* configure.ac:  Remove duplicate AC_WITH calls.  Replace
! 	AC_CANONICAL_SYSTEM with AC_CANONICAL_HOST, AC_CANONICAL_TARGET.
! 	Replace _GCC_TOPLEV_NONCANONICAL calls with ACX_NONCANONICAL_TARGET.
! 	Remove now-redundant subst of target_noncanonical.  Remove
! 	now-gratuitous m4 quoting around $.  Replace AM_PROG_LIBTOOL with
! 	AC_PROG_LIBTOOL and remove second, redundant AC_PROG_LIBTOOL.
! 	Use slightly more modern form of AC_INIT.
! 	* configure: Rebuild with autoconf 2.59.
! 	* Makefile.in, include/Makefile.in: Rebuild with automake 1.9.1.
! 
! 2004-08-16  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* solaris_threads.c: Remove ifdef around #include "private/gc_priv.h"
! 	since they're not known at this time.
! 	* solaris_pthreads.c: Likewise.
! 
! 2004-08-15  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	PR target/14931
! 	* powerpc_darwin_mach_dep.s (_GC_push_regs): Change to new stub style.
! 
! 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* configure.ac (gc_cflags): Add -Iinclude.
! 	(AC_CONFIG_HEADERS): New. Configure gc_config.h header.
! 	Don't write DEFS to boehm-cflags file.
! 	* configure: Rebuilt.
! 	* gcj_mlc.c: Check #ifdef GC_GCJ_SUPPORT after including headers.
! 	* specific.c: Check #ifdef GC_LINUX_THREADS after including headers.
! 	* include/gc_config_macros.h: Remove backward-compatibility 
! 	redefinitions of GC_ names.
! 	* include/gc.h: Include <gc_config.h>.
! 
! 2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	Import Boehm GC version 6.3.
! 
! 2004-08-12  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* include/Makefile.in: Regenerate
! 
! 2004-07-06  Andrew Pinski  <apinski@apple.com>
! 
! 	* os-dep.c (GC_task_self): Declare as static
! 	and remove the second declaration.
! 
! 2004-06-20  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* Makefile.am: Add rule for .S files to fix bootstrap on
! 	solaris and alpha.
! 	* Makefile.in: Regenerate.
! 
! 2004-06-16  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* boehm-gc/configure.ac: New name of configure.in.
! 	Remove useless multilib stuff.  Change uses of
! 	INCLUDES and CXXINCLUDES to AM_CPPFLAGS.
! 	* boehm-gc/configure.in: New name of configure.in.
! 	* boehm-gc/Makefile.am: Update for automake 1.8.5.
! 	* boehm-gc/acinclude.m4: Include ../config/acx.m4.
! 	* boehm-gc/aclocal.m4: Regenerate.
! 	* boehm-gc/configure: Regenerate.
! 	* boehm-gc/Makefile.in: Regenerate.
! 
! 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* .cvsignore: New file.
! 
! 2004-04-25  Andreas Jaeger  <aj@suse.de>
! 
!         * mark.c (GC_mark_from): Use pointer as prefetch argument.
! 
! 2004-04-06  H.J. Lu  <hongjiu.lu@intel.com>
  
  	* include/private/gcconfig.h (PREFETCH): Use __builtin_prefetch
  	for gcc >= 3.0.
  	(PREFETCH_FOR_WRITE): Likewise.
  
! 2004-03-10  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* configure.ac: Bump AC_PREREQ to 2.59.
! 	* configure: Regenerate.
! 	* config.in: Regenerate.
  
! 2004-02-26  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* ltconfig, ltmain.sh: Remove unused files.
! 	* configure.in: Remove bogus extra early invocation of
! 	AC_CONFIG_AUX_DIR.
! 	* configure: Regenerate.
! 	* mkinstalldirs, install-sh, config.sub, config.guess:
! 	Remove (now) unused files.
! 	* Makefile.in: Regenerate (losing references to vanished
! 	files).
! 
! 	* configure.in: Add CCAS, CCASFLAGS for future automakes.
! 	* configure, Makefile.in, include/Makefile.in: Regenerate.
! 
! 	* Makefile.am: Remove bogus duplicate setting of AM_CFLAGS.
! 	* Makefile.in: Regenerate.
! 
! 	* configure.in: Remove bogus duplicate invocation of
! 	AM_MAINTAINER_MODE.  Remove obsolete comment.
! 	* configure: Regenerate.
! 
! 	* acinclude.m4: Remove GC_CONFIGURE macro; move contents
! 	to configure.in.
! 	* aclocal.m4: Regenerate.
! 	* configure.in: Receive contents of GC_CONFIGURE macro.
! 	* configure: Regenerate.
! 
! 	* configure.in: Remove more obsolete, bogus code.
! 	* configure: Regenerate.
! 
! 	* acinclude.m4: Remove obsolete and bogus constructs.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regnerate.
! 
! 2004-02-23  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* acinclude.m4: De-precious CC and CXX so that the right flags
! 	are passed down to multilibs.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regenerate.
! 
! 2004-02-22  Zack Weinberg <zack@codesourcery.com>
! 	    Nathanael Nerode <neroden@twcny.rr.com>
! 	    Alexandre Oliva <aoliva@redhat.com>
! 
! 	* config.sub, config.guess: Replace with forwarding scripts
! 	which invoke the master copies in the top level.
! 
! 2004-02-23  Nathanael Nerode  <neroden@gcc.gnu.org>
! 
! 	* acinclude.m4: Remove old no-executables workaround;
! 	add new no-executables workaround.
! 	* aclocal.m4: Regenerate.
! 	* configure.in: Change prereqs to autoconf 2.57.
! 	* configure: Regenerate with autoconf 2.57.
! 
! 	* configure.in: Use NCN_TARGET_NONCANONICAL and friends.
! 	* configure: Regenerate.
! 	* Makefile.am: Use target_noncanonical variable from configure.
! 	* Makefile.in: Regenerate.
! 	* include/Makefile.in: Regenerate.
! 
! 2004-02-20  Andrew Cagney  <cagney@redhat.com>
  
  	* config.guess: Update from version 2002-01-10 to 2004-02-16.
  	* config.sub: Update from version 2002-01-02 to 2004-02-16.
  
+ 2004-02-19  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* acinclude.m4: Remove bogus duplicate call to AC_CANONICAL_BUILD.
+ 	* aclocal.m4: Rebuild.
+ 	* configure: Regenerate.
+ 
+ 	* acinclude.m4: Move certain code to configure.in.
+ 	* configure.in: Receive code from acinclude.m4.
+ 	* aclocal.m4: Rebuild.
+ 	* configure: Regenerate.
+ 
+ 	* Makefile.direct, alloc.c: Resync to upstream 6.3 alpha 1.
+ 
  2004-01-20  Andrew Haley  <aph@redhat.com>
  
  	* include/private/gcconfig.h (USE_MMAP): Define for all Linux.
***************
*** 39,51 ****
  	* configure.in (NO_EXECUTE_PERMISSION): Remove global declaration;
  	add for ia64; remove for MIPS.
  	* configure: Regnerated.
! 	
  2004-01-14  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* configure.in: Add in AC_PREREQ(2.13)
  
  2004-01-07  Dave Jones <davej@redhat.com>
!  
  	* malloc.c (GC_generic_malloc): Correct initialization typo.
  	* mallocx.c (GC_generic_malloc_ignore_off_page): Ditto.
  
--- 327,339 ----
  	* configure.in (NO_EXECUTE_PERMISSION): Remove global declaration;
  	add for ia64; remove for MIPS.
  	* configure: Regnerated.
! 
  2004-01-14  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* configure.in: Add in AC_PREREQ(2.13)
  
  2004-01-07  Dave Jones <davej@redhat.com>
! 
  	* malloc.c (GC_generic_malloc): Correct initialization typo.
  	* mallocx.c (GC_generic_malloc_ignore_off_page): Ditto.
  
***************
*** 108,114 ****
  2003-07-31  Danny Smith  <dannysmith@users.sourceforge.net>
  
  	* include/gc.h (GC_CreateThread): Declare with WINAPI
! 	attribute. 
  	* win32_threads.c (GC_CreateThread): Make definitions consistent
  	with declaration.  Cast &thread_table[i].handle to PHANDLE
  	in call to DuplicateHandle
--- 396,402 ----
  2003-07-31  Danny Smith  <dannysmith@users.sourceforge.net>
  
  	* include/gc.h (GC_CreateThread): Declare with WINAPI
! 	attribute.
  	* win32_threads.c (GC_CreateThread): Make definitions consistent
  	with declaration.  Cast &thread_table[i].handle to PHANDLE
  	in call to DuplicateHandle
***************
*** 116,124 ****
  
  2003-07-30  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* dyn_load.c: Define __private_extern__ to match Apple's system 
  	header.
!  
  2003-07-28  Loren J. Rittle  <ljrittle@acm.org>
  
  	* os_dep.c: Remove redundancy introduced in last merge.
--- 404,412 ----
  
  2003-07-30  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* dyn_load.c: Define __private_extern__ to match Apple's system
  	header.
! 
  2003-07-28  Loren J. Rittle  <ljrittle@acm.org>
  
  	* os_dep.c: Remove redundancy introduced in last merge.
***************
*** 193,204 ****
  	* include/private/specific.h: Likewise.
  	* tests/test.c: Likewise.
  	* tests/test_cpp.cc: Likewise.
! 	
  	* configure: Rebuild.
  	* Makefile.in: Rebuild.
! 	
  	* mips_sgi_mach_dep.s: Add.
! 	
  	* alpha_mach_dep.s: Remove.
  	* irix_threads.c: Remove.
  	* linux_threads.c: Remove.
--- 481,492 ----
  	* include/private/specific.h: Likewise.
  	* tests/test.c: Likewise.
  	* tests/test_cpp.cc: Likewise.
! 
  	* configure: Rebuild.
  	* Makefile.in: Rebuild.
! 
  	* mips_sgi_mach_dep.s: Add.
! 
  	* alpha_mach_dep.s: Remove.
  	* irix_threads.c: Remove.
  	* linux_threads.c: Remove.
***************
*** 320,326 ****
  
  2002-08-23  Adam Megacz <adam@xwt.org>
  
!         * win32_threads.cc: Removed extraneous ABORT()
  
  2002-09-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
--- 608,614 ----
  
  2002-08-23  Adam Megacz <adam@xwt.org>
  
! 	* win32_threads.cc: Removed extraneous ABORT()
  
  2002-09-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
***************
*** 343,351 ****
  	Linux/mips.
  
  2002-06-28  Hans Boehm <Hans_Boehm@hp.com>
!             Jonathan Clark
  
!         * win32_threads.c (GC_push_all_stacks): Tolerate bad sp.
  
  2002-06-09  H.J. Lu  (hjl@gnu.org)
  
--- 631,639 ----
  	Linux/mips.
  
  2002-06-28  Hans Boehm <Hans_Boehm@hp.com>
! 	    Jonathan Clark
  
! 	* win32_threads.c (GC_push_all_stacks): Tolerate bad sp.
  
  2002-06-09  H.J. Lu  (hjl@gnu.org)
  
*************** Sun May 19 11:32:03 2002  Mark P Mitchel
*** 438,444 ****
  2002-03-30  Krister Walfridsson  <cato@df.lth.se>
  
  	* include/private/gcconfig.h: define DYNAMIC_LOADING for ELF
!         NetBSD/i386.
  
  2002-03-29  Hans Boehm  <Hans_Boehm@hp.com>
  
--- 726,732 ----
  2002-03-30  Krister Walfridsson  <cato@df.lth.se>
  
  	* include/private/gcconfig.h: define DYNAMIC_LOADING for ELF
! 	NetBSD/i386.
  
  2002-03-29  Hans Boehm  <Hans_Boehm@hp.com>
  
*************** Sun May 19 11:32:03 2002  Mark P Mitchel
*** 488,501 ****
  
  2002-03-12  Adam Megacz  <adam@xwt.org>
  
!         * dyn_load.c: Renamed GC_win32s to GC_no_win32_dlls.
!         * misc.c: Renamed GC_is_win32s() to GC_no_win32_dlls
!         * os_dep.c: Renamed GC_win32s to GC_no_win32_dlls and
!         statically initialized it to TRUE if compiling with GCC.
!         * win32_threads.c (thread_start): We no longer use SEH if
!         compiling with GCC.
!         * mark.c (GC_mark_some): We no longer use SEH if
!         compiling with GCC.
  
  2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
--- 776,789 ----
  
  2002-03-12  Adam Megacz  <adam@xwt.org>
  
! 	* dyn_load.c: Renamed GC_win32s to GC_no_win32_dlls.
! 	* misc.c: Renamed GC_is_win32s() to GC_no_win32_dlls
! 	* os_dep.c: Renamed GC_win32s to GC_no_win32_dlls and
! 	statically initialized it to TRUE if compiling with GCC.
! 	* win32_threads.c (thread_start): We no longer use SEH if
! 	compiling with GCC.
! 	* mark.c (GC_mark_some): We no longer use SEH if
! 	compiling with GCC.
  
  2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
*************** Sun May 19 11:32:03 2002  Mark P Mitchel
*** 890,896 ****
  
  2000-06-19  Andrew Haley  <aph@cygnus.com>
  
!         * os_dep.c (read): Pass two dummy args to syscall().
  
  2000-05-11  Bryce McKinlay  <bryce@albatross.co.nz>
  
--- 1178,1184 ----
  
  2000-06-19  Andrew Haley  <aph@cygnus.com>
  
! 	* os_dep.c (read): Pass two dummy args to syscall().
  
  2000-05-11  Bryce McKinlay  <bryce@albatross.co.nz>
  
*************** Sun May 19 11:32:03 2002  Mark P Mitchel
*** 900,906 ****
  2000-05-07  Bryce McKinlay  <bryce@albatross.co.nz>
  
  	Imported version 5.0alpha7.
!         * acinclude.m4: Update version to 5.0a7.
  
  2000-04-26  Jakub Jelinek  <jakub@redhat.com>
  
--- 1188,1194 ----
  2000-05-07  Bryce McKinlay  <bryce@albatross.co.nz>
  
  	Imported version 5.0alpha7.
! 	* acinclude.m4: Update version to 5.0a7.
  
  2000-04-26  Jakub Jelinek  <jakub@redhat.com>
  
*************** Fri Jan 28 17:13:20 2000  Anthony Green 
*** 956,962 ****
  
  1999-12-19  Jeff Sturm  <jsturm@sigma6.com>
  
!         * gcconfig.h: Define DATASTART for Alpha Linux.
  
  1999-12-19  Anthony Green  <green@cygnus.com>
  
--- 1244,1250 ----
  
  1999-12-19  Jeff Sturm  <jsturm@sigma6.com>
  
! 	* gcconfig.h: Define DATASTART for Alpha Linux.
  
  1999-12-19  Anthony Green  <green@cygnus.com>
  
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.am gcc-4.0.0/boehm-gc/Makefile.am
*** gcc-3.4.3/boehm-gc/Makefile.am	Mon Jul 28 04:18:19 2003
--- gcc-4.0.0/boehm-gc/Makefile.am	Fri Nov  5 01:51:48 2004
***************
*** 4,21 ****
  ## files that should be in the distribution are not mentioned in this
  ## Makefile.am.
  
! AUTOMAKE_OPTIONS = cygnus
  
  SUBDIRS = include
  
- # Multilib support variables.
- MULTISRCTOP =
- MULTIBUILDTOP =
- MULTIDIRS =
- MULTISUBDIR =
- MULTIDO = true
- MULTICLEAN = true
- 
  noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
  
  if POWERPC_DARWIN
--- 4,14 ----
  ## files that should be in the distribution are not mentioned in this
  ## Makefile.am.
  
! AUTOMAKE_OPTIONS = cygnus subdir-objects
! ACLOCAL_AMFLAGS = -I .. -I ../config
  
  SUBDIRS = include
  
  noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
  
  if POWERPC_DARWIN
*************** backgraph.c win32_threads.c \
*** 33,47 ****
  pthread_support.c pthread_stop_world.c darwin_stop_world.c \
  $(asm_libgc_sources)
  
! EXTRA_GC_SOURCES = alpha_mach_dep.S \
  mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_darwin_mach_dep.s \
  rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \
  sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s
  
  libgcjgc_la_SOURCES = $(GC_SOURCES)
  libgcjgc_convenience_la_SOURCES = $(GC_SOURCES)
- EXTRA_libgcjgc_la_SOURCES = $(EXTRA_GC_SOURCES)
- EXTRA_libgcjgc_convenience_la_SOURCES = $(EXTRA_GC_SOURCES)
  
  # Include THREADLIBS here to ensure that the correct versions of
  # linuxthread semaphore functions get linked:
--- 26,38 ----
  pthread_support.c pthread_stop_world.c darwin_stop_world.c \
  $(asm_libgc_sources)
  
! EXTRA_DIST = alpha_mach_dep.S \
  mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_darwin_mach_dep.s \
  rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \
  sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s
  
  libgcjgc_la_SOURCES = $(GC_SOURCES)
  libgcjgc_convenience_la_SOURCES = $(GC_SOURCES)
  
  # Include THREADLIBS here to ensure that the correct versions of
  # linuxthread semaphore functions get linked:
*************** AM_CXXFLAGS = @GC_CFLAGS@
*** 56,95 ****
  AM_CFLAGS = @GC_CFLAGS@
  
  check_PROGRAMS = gctest
! # The following hack produces a warning from automake, but we need it in order 
! # to build a file from a subdirectory. FIXME.
! test.o:	tests/test.c
! 	$(COMPILE) -c $(srcdir)/tests/test.c
! # 	Using $< in the above seems to fail with the HP/UX on Itanium make.
! 
! gctest_OBJECTS = test.o
  gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS)
  gctest_LDFLAGS = -shared-libgcc
  TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
  TESTS = gctest
  
- ## FIXME: relies on internal code generated by automake.
- all_objs = @addobjs@ $(libgcjgc_la_OBJECTS)
- $(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \
- include/private/gc_hdrs.h include/gc.h include/gc_gcj.h \
- include/gc_pthread_redirects.h include/gc_config_macros.h \
- include/gc_mark.h @addincludes@
- 
  ## FIXME: we shouldn't have to do this, but automake forces us to.
  .s.lo:
  ## We use -Wp,-P to strip #line directives.  Irix `as' chokes on
  ## these.
  	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
  
  ## We have our own definition of LTCOMPILE because we want to use our
  ## CFLAGS, not those passed in from the top level make.
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) \
! 	$(AM_CPPFLAGS) $(CPPFLAGS) \
  	$(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) 
  LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@
  
- AM_CFLAGS = @GC_CFLAGS@
- 
  # 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.
--- 47,72 ----
  AM_CFLAGS = @GC_CFLAGS@
  
  check_PROGRAMS = gctest
! gctest_SOURCES = tests/test.c
  gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS)
  gctest_LDFLAGS = -shared-libgcc
  TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
  TESTS = gctest
  
  ## FIXME: we shouldn't have to do this, but automake forces us to.
  .s.lo:
  ## We use -Wp,-P to strip #line directives.  Irix `as' chokes on
  ## these.
  	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
+ .S.lo:
+ 	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
  
  ## We have our own definition of LTCOMPILE because we want to use our
  ## CFLAGS, not those passed in from the top level make.
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) \
  	$(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) 
  LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@
  
  # 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.
*************** AM_MAKEFLAGS = \
*** 133,160 ****
  
  CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
  
- # Multilib support.
- .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
- 	maintainer-clean-multi
- 
- all-am: all-multi
- install-am: install-multi
- mostlyclean-am: mostlyclean-multi
- clean-am: clean-multi
- distclean-am: distclean-multi
- maintainer-clean-am: maintainer-clean-multi
- 
- all-multi:
- 	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
- install-multi:
- 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
- mostlyclean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean
- clean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean
- distclean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
- maintainer-clean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
- 
  MAKEOVERRIDES=
--- 110,113 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.direct gcc-4.0.0/boehm-gc/Makefile.direct
*** gcc-3.4.3/boehm-gc/Makefile.direct	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/Makefile.direct	Fri Aug 13 23:05:28 2004
***************
*** 10,22 ****
  #	 c++ interface to gc.a
  # cord/de - builds dumb editor based on cords.
  ABI_FLAG= 
  CC=cc $(ABI_FLAG)
  CXX=g++ $(ABI_FLAG)
! AS=as $(ABI_FLAG)
  #  The above doesn't work with gas, which doesn't run cpp.
  #  Define AS as `gcc -c -x assembler-with-cpp' instead.
- #  Under Irix 6, you will have to specify the ABI (-o32, -n32, or -64)
- #  if you use something other than the default ABI on your machine.
  
  # Redefining srcdir allows object code for the nonPCR version of the collector
  # to be generated in different directories.
--- 10,29 ----
  #	 c++ interface to gc.a
  # cord/de - builds dumb editor based on cords.
  ABI_FLAG= 
+ # ABI_FLAG should be the cc flag that specifies the ABI.  On most
+ # platforms this will be the empty string.  Possible values:
+ # +DD64 for 64-bit executable on HP/UX.
+ # -n32, -n64, -o32 for SGI/MIPS ABIs.
+ 
+ AS_ABI_FLAG=$(ABI_FLAG)
+ # ABI flag for assembler.  On HP/UX this is +A64 for 64 bit
+ # executables.
+ 
  CC=cc $(ABI_FLAG)
  CXX=g++ $(ABI_FLAG)
! AS=as $(AS_ABI_FLAG)
  #  The above doesn't work with gas, which doesn't run cpp.
  #  Define AS as `gcc -c -x assembler-with-cpp' instead.
  
  # Redefining srcdir allows object code for the nonPCR version of the collector
  # to be generated in different directories.
*************** CFLAGS= -O -I$(srcdir)/include -DATOMIC_
*** 29,35 ****
  # -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC
  # To build the parallel collector in a static library on HP/UX,
  # add to the above:
! # -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -DUSE_HPUX_TLS -D_POSIX_C_SOURCE=199506L
  # To build the thread-safe collector on Tru64, add to the above:
  # -pthread -DGC_OSF1_THREADS
  
--- 36,42 ----
  # -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC
  # To build the parallel collector in a static library on HP/UX,
  # add to the above:
! # -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -D_POSIX_C_SOURCE=199506L
  # To build the thread-safe collector on Tru64, add to the above:
  # -pthread -DGC_OSF1_THREADS
  
*************** HOSTCFLAGS=$(CFLAGS)
*** 57,63 ****
  #   gc.h before performing thr_ or dl* or GC_ operations.)
  #   Must also define -D_REENTRANT.
  # -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads.
! #   Define SOLARIS_THREADS as well.
  # -DGC_IRIX_THREADS enables support for Irix pthreads.  See README.irix.
  # -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads.
  #   Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp.
--- 64,70 ----
  #   gc.h before performing thr_ or dl* or GC_ operations.)
  #   Must also define -D_REENTRANT.
  # -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads.
! #   (Internally this define GC_SOLARIS_THREADS as well.)
  # -DGC_IRIX_THREADS enables support for Irix pthreads.  See README.irix.
  # -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads.
  #   Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp.
*************** HOSTCFLAGS=$(CFLAGS)
*** 175,181 ****
  #   this facility is only used in a few places.  It is intended primarily
  #   for debugging of the garbage collector itself, but could also
  # -DDBG_HDRS_ALL Make sure that all objects have debug headers.  Increases
! #   the reliability (from 99.9999% to 100%) of some of the debugging
  #   code (especially KEEP_BACK_PTRS).  Makes -DSHORT_DBG_HDRS possible.
  #   Assumes that all client allocation is done through debugging
  #   allocators.
--- 182,188 ----
  #   this facility is only used in a few places.  It is intended primarily
  #   for debugging of the garbage collector itself, but could also
  # -DDBG_HDRS_ALL Make sure that all objects have debug headers.  Increases
! #   the reliability (from 99.9999% to 100% mod. bugs) of some of the debugging
  #   code (especially KEEP_BACK_PTRS).  Makes -DSHORT_DBG_HDRS possible.
  #   Assumes that all client allocation is done through debugging
  #   allocators.
*************** HOSTCFLAGS=$(CFLAGS)
*** 228,233 ****
--- 235,244 ----
  #   in a way that usually does not involve acquisition of a global lock.
  #   Currently requires -DGC_LINUX_THREADS, but should be easy to port to
  #   other pthreads environments.  Recommended for multiprocessors.
+ # -DUSE_COMPILER_TLS causes thread local allocation to use compiler-supported
+ #   "__thread" thread-local variables.  This is the default in HP/UX.  It
+ #   may help performance on recent Linux installations.  (It failed for
+ #   me on RedHat 8, but appears to work on RedHat 9.)
  # -DPARALLEL_MARK allows the marker to run in multiple threads.  Recommended
  #   for multiprocessors.  Currently requires Linux on X86 or IA64, though
  #   support for other Posix platforms should be fairly easy to add,
*************** DOC_FILES= README.QUICK doc/README.Mac d
*** 309,322 ****
  	doc/README.environment doc/tree.html doc/gcdescr.html \
  	doc/README.autoconf doc/README.macros doc/README.ews4800 \
  	doc/README.DGUX386 doc/README.arm.cross doc/leak.html \
! 	doc/scale.html doc/gcinterface.html doc/README.darwin
  
  TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \
! 	tests/leak_test.c tests/thread_leak_test.c
  
  GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \
  		 libtool.m4 install-sh configure.host Makefile.in \
! 		 ltconfig aclocal.m4 config.sub config.guess \
  		 include/Makefile.am include/Makefile.in \
  		 doc/Makefile.am doc/Makefile.in \
  		 ltmain.sh mkinstalldirs depcomp missing
--- 320,334 ----
  	doc/README.environment doc/tree.html doc/gcdescr.html \
  	doc/README.autoconf doc/README.macros doc/README.ews4800 \
  	doc/README.DGUX386 doc/README.arm.cross doc/leak.html \
! 	doc/scale.html doc/gcinterface.html doc/README.darwin \
! 	doc/simple_example.html
  
  TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \
! 	tests/leak_test.c tests/thread_leak_test.c tests/middle.c
  
  GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \
  		 libtool.m4 install-sh configure.host Makefile.in \
! 		 aclocal.m4 config.sub config.guess \
  		 include/Makefile.am include/Makefile.in \
  		 doc/Makefile.am doc/Makefile.in \
  		 ltmain.sh mkinstalldirs depcomp missing
*************** GNU_BUILD_FILES= configure.in Makefile.a
*** 324,330 ****
  OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \
  		 BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \
  		 PCR-Makefile SMakefile.amiga Makefile.DLLs \
! 		 digimars.mak Makefile.direct
  #	Makefile and Makefile.direct are copies of each other.
  
  OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \
--- 336,342 ----
  OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \
  		 BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \
  		 PCR-Makefile SMakefile.amiga Makefile.DLLs \
! 		 digimars.mak Makefile.direct NT_STATIC_THREADS_MAKEFILE
  #	Makefile and Makefile.direct are copies of each other.
  
  OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \
*************** SPECIALCFLAGS = -I$(srcdir)/include
*** 356,371 ****
  
  all: gc.a gctest
  
! BSD-pkg-all: bsd-libgc.a
  
  bsd-libgc.a:
  	$(MAKE) CFLAGS="$(CFLAGS)" clean c++-t
  	mv gc.a bsd-libgc.a
  
  BSD-pkg-install: BSD-pkg-all
  	${CP} bsd-libgc.a libgc.a
  	${INSTALL_DATA} libgc.a ${PREFIX}/lib
  	${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include
  
  pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \
  include/private/gc_locks.h include/gc.h include/private/gcconfig.h \
--- 368,390 ----
  
  all: gc.a gctest
  
! LEAKFLAGS=$(CFLAGS) -DFIND_LEAK
! 
! BSD-pkg-all: bsd-libgc.a bsd-libleak.a
  
  bsd-libgc.a:
  	$(MAKE) CFLAGS="$(CFLAGS)" clean c++-t
  	mv gc.a bsd-libgc.a
  
+ bsd-libleak.a:
+ 	$(MAKE) -f Makefile.direct CFLAGS="$(LEAKFLAGS)" clean c++-nt
+ 	mv gc.a bsd-libleak.a
+ 
  BSD-pkg-install: BSD-pkg-all
  	${CP} bsd-libgc.a libgc.a
  	${INSTALL_DATA} libgc.a ${PREFIX}/lib
  	${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include
+ 	${INSTALL_MAN} doc/gc.man ${PREFIX}/man/man3/gc.3
  
  pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \
  include/private/gc_locks.h include/gc.h include/private/gcconfig.h \
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.dist gcc-4.0.0/boehm-gc/Makefile.dist
*** gcc-3.4.3/boehm-gc/Makefile.dist	Fri Aug 17 18:30:44 2001
--- gcc-4.0.0/boehm-gc/Makefile.dist	Fri Aug 13 23:05:28 2004
***************
*** 1,4 ****
! # This is the original manually generated Makefile.  It may stil be used
  # to build the collector.
  #
  # Primary targets:
--- 1,4 ----
! # This is the original manually generated Makefile.  It may still be used
  # to build the collector.
  #
  # Primary targets:
***************
*** 10,22 ****
  #	 c++ interface to gc.a
  # cord/de - builds dumb editor based on cords.
  ABI_FLAG= 
  CC=cc $(ABI_FLAG)
  CXX=g++ $(ABI_FLAG)
! AS=as $(ABI_FLAG)
  #  The above doesn't work with gas, which doesn't run cpp.
  #  Define AS as `gcc -c -x assembler-with-cpp' instead.
- #  Under Irix 6, you will have to specify the ABI (-o32, -n32, or -64)
- #  if you use something other than the default ABI on your machine.
  
  # Redefining srcdir allows object code for the nonPCR version of the collector
  # to be generated in different directories.
--- 10,29 ----
  #	 c++ interface to gc.a
  # cord/de - builds dumb editor based on cords.
  ABI_FLAG= 
+ # ABI_FLAG should be the cc flag that specifies the ABI.  On most
+ # platforms this will be the empty string.  Possible values:
+ # +DD64 for 64-bit executable on HP/UX.
+ # -n32, -n64, -o32 for SGI/MIPS ABIs.
+ 
+ AS_ABI_FLAG=$(ABI_FLAG)
+ # ABI flag for assembler.  On HP/UX this is +A64 for 64 bit
+ # executables.
+ 
  CC=cc $(ABI_FLAG)
  CXX=g++ $(ABI_FLAG)
! AS=as $(AS_ABI_FLAG)
  #  The above doesn't work with gas, which doesn't run cpp.
  #  Define AS as `gcc -c -x assembler-with-cpp' instead.
  
  # Redefining srcdir allows object code for the nonPCR version of the collector
  # to be generated in different directories.
*************** CFLAGS= -O -I$(srcdir)/include -DATOMIC_
*** 27,34 ****
  
  # To build the parallel collector on Linux, add to the above:
  # -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC
! # To build the parallel collector n a static library on HP/UX, add to the above:
! # -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -DUSE_HPUX_TLS -D_POSIX_C_SOURCE=199506L
  
  # HOSTCC and HOSTCFLAGS are used to build executables that will be run as
  # part of the build process, i.e. on the build machine.  These will usually
--- 34,44 ----
  
  # To build the parallel collector on Linux, add to the above:
  # -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC
! # To build the parallel collector in a static library on HP/UX,
! # add to the above:
! # -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -D_POSIX_C_SOURCE=199506L
! # To build the thread-safe collector on Tru64, add to the above:
! # -pthread -DGC_OSF1_THREADS
  
  # HOSTCC and HOSTCFLAGS are used to build executables that will be run as
  # part of the build process, i.e. on the build machine.  These will usually
*************** HOSTCFLAGS=$(CFLAGS)
*** 54,65 ****
  #   gc.h before performing thr_ or dl* or GC_ operations.)
  #   Must also define -D_REENTRANT.
  # -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads.
! #   Define SOLARIS_THREADS as well.
  # -DGC_IRIX_THREADS enables support for Irix pthreads.  See README.irix.
  # -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads.
  #   Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp.
  # -DGC_LINUX_THREADS enables support for Xavier Leroy's Linux threads.
  #   see README.linux.  -D_REENTRANT may also be required.
  # -DALL_INTERIOR_POINTERS allows all pointers to the interior
  #   of objects to be recognized.  (See gc_priv.h for consequences.)
  #   Alternatively, GC_all_interior_pointers can be set at process
--- 64,85 ----
  #   gc.h before performing thr_ or dl* or GC_ operations.)
  #   Must also define -D_REENTRANT.
  # -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads.
! #   (Internally this define GC_SOLARIS_THREADS as well.)
  # -DGC_IRIX_THREADS enables support for Irix pthreads.  See README.irix.
  # -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads.
  #   Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp.
  # -DGC_LINUX_THREADS enables support for Xavier Leroy's Linux threads.
  #   see README.linux.  -D_REENTRANT may also be required.
+ # -DGC_OSF1_THREADS enables support for Tru64 pthreads.  Untested.
+ # -DGC_FREEBSD_THREADS enables support for FreeBSD pthreads.  Untested.
+ #   Appeared to run into some underlying thread problems.
+ # -DGC_DARWIN_THREADS enables support for Mac OS X pthreads.  Untested.
+ # -DGC_DGUX386_THREADS enables support for DB/UX on I386 threads.
+ #   See README.DGUX386.
+ # -DGC_WIN32_THREADS enables support for win32 threads.  That makes sense
+ #   for this Makefile only under Cygwin.
+ # -DGC_THREADS should set the appropriate one of the above macros.
+ #   It assumes pthreads for Solaris.
  # -DALL_INTERIOR_POINTERS allows all pointers to the interior
  #   of objects to be recognized.  (See gc_priv.h for consequences.)
  #   Alternatively, GC_all_interior_pointers can be set at process
*************** HOSTCFLAGS=$(CFLAGS)
*** 88,113 ****
  #   code from the heap.  Currently this only affects the incremental
  #   collector on UNIX machines.  It may greatly improve its performance,
  #   since this may avoid some expensive cache synchronization.
! # -DOPERATOR_NEW_ARRAY declares that the C++ compiler supports the
! #   new syntax "operator new[]" for allocating and deleting arrays.
  #   See gc_cpp.h for details.  No effect on the C part of the collector.
! #   This is defined implicitly in a few environments.
! # -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be defined
! #   as aliases for X, GC_realloc, and GC_free, respectively.
! #   Calloc is redefined in terms of the new malloc.  X should
  #   be either GC_malloc or GC_malloc_uncollectable, or
  #   GC_debug_malloc_replacement.  (The latter invokes GC_debug_malloc
  #   with dummy source location information, but still results in
! #   properly remembered call stacks on Linux/X86 and Solaris/SPARC.)
  #   The former is occasionally useful for working around leaks in code
  #   you don't want to (or can't) look at.  It may not work for
  #   existing code, but it often does.  Neither works on all platforms,
  #   since some ports use malloc or calloc to obtain system memory.
! #   (Probably works for UNIX, and win32.)
  # -DREDIRECT_REALLOC=X causes GC_realloc to be redirected to X.
  #   The canonical use is -DREDIRECT_REALLOC=GC_debug_realloc_replacement,
  #   together with -DREDIRECT_MALLOC=GC_debug_malloc_replacement to
  #   generate leak reports with call stacks for both malloc and realloc.
  # -DIGNORE_FREE turns calls to free into a noop.  Only useful with
  #   -DREDIRECT_MALLOC.
  # -DNO_DEBUGGING removes GC_dump and the debugging routines it calls.
--- 108,141 ----
  #   code from the heap.  Currently this only affects the incremental
  #   collector on UNIX machines.  It may greatly improve its performance,
  #   since this may avoid some expensive cache synchronization.
! # -DGC_NO_OPERATOR_NEW_ARRAY declares that the C++ compiler does not support
! #   the  new syntax "operator new[]" for allocating and deleting arrays.
  #   See gc_cpp.h for details.  No effect on the C part of the collector.
! #   This is defined implicitly in a few environments.  Must also be defined
! #   by clients that use gc_cpp.h.
! # -DREDIRECT_MALLOC=X causes malloc to be defined as alias for X.
! #   Unless the following macros are defined, realloc is also redirected
! #   to GC_realloc, and free is redirected to GC_free.
! #   Calloc and strdup are redefined in terms of the new malloc.  X should
  #   be either GC_malloc or GC_malloc_uncollectable, or
  #   GC_debug_malloc_replacement.  (The latter invokes GC_debug_malloc
  #   with dummy source location information, but still results in
! #   properly remembered call stacks on Linux/X86 and Solaris/SPARC.
! #   It requires that the following two macros also be used.)
  #   The former is occasionally useful for working around leaks in code
  #   you don't want to (or can't) look at.  It may not work for
  #   existing code, but it often does.  Neither works on all platforms,
  #   since some ports use malloc or calloc to obtain system memory.
! #   (Probably works for UNIX, and win32.)  If you build with DBG_HDRS_ALL,
! #   you should only use GC_debug_malloc_replacement as a malloc
! #   replacement.
  # -DREDIRECT_REALLOC=X causes GC_realloc to be redirected to X.
  #   The canonical use is -DREDIRECT_REALLOC=GC_debug_realloc_replacement,
  #   together with -DREDIRECT_MALLOC=GC_debug_malloc_replacement to
  #   generate leak reports with call stacks for both malloc and realloc.
+ #   This also requires the following:
+ # -DREDIRECT_FREE=X causes free to be redirected to X.  The
+ #   canonical use is -DREDIRECT_FREE=GC_debug_free.
  # -DIGNORE_FREE turns calls to free into a noop.  Only useful with
  #   -DREDIRECT_MALLOC.
  # -DNO_DEBUGGING removes GC_dump and the debugging routines it calls.
*************** HOSTCFLAGS=$(CFLAGS)
*** 135,142 ****
  #   Works for Solaris and Irix.
  # -DUSE_MUNMAP causes memory to be returned to the OS under the right
  #   circumstances.  This currently disables VM-based incremental collection.
! #   This is currently experimental, and works only under some Unix and
! #   Linux versions.
  # -DMMAP_STACKS (for Solaris threads) Use mmap from /dev/zero rather than
  #   GC_scratch_alloc() to get stack memory.
  # -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever
--- 163,170 ----
  #   Works for Solaris and Irix.
  # -DUSE_MUNMAP causes memory to be returned to the OS under the right
  #   circumstances.  This currently disables VM-based incremental collection.
! #   This is currently experimental, and works only under some Unix,
! #   Linux and Windows versions.
  # -DMMAP_STACKS (for Solaris threads) Use mmap from /dev/zero rather than
  #   GC_scratch_alloc() to get stack memory.
  # -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever
*************** HOSTCFLAGS=$(CFLAGS)
*** 154,160 ****
  #   this facility is only used in a few places.  It is intended primarily
  #   for debugging of the garbage collector itself, but could also
  # -DDBG_HDRS_ALL Make sure that all objects have debug headers.  Increases
! #   the reliability (from 99.9999% to 100%) of some of the debugging
  #   code (especially KEEP_BACK_PTRS).  Makes -DSHORT_DBG_HDRS possible.
  #   Assumes that all client allocation is done through debugging
  #   allocators.
--- 182,188 ----
  #   this facility is only used in a few places.  It is intended primarily
  #   for debugging of the garbage collector itself, but could also
  # -DDBG_HDRS_ALL Make sure that all objects have debug headers.  Increases
! #   the reliability (from 99.9999% to 100% mod. bugs) of some of the debugging
  #   code (especially KEEP_BACK_PTRS).  Makes -DSHORT_DBG_HDRS possible.
  #   Assumes that all client allocation is done through debugging
  #   allocators.
*************** HOSTCFLAGS=$(CFLAGS)
*** 172,179 ****
  #   allocated through the debugging interface.  Affects the amount of
  #   information generated in leak reports.  Only matters on platforms
  #   on which we can quickly generate call stacks, currently Linux/(X86 & SPARC)
! #   and Solaris/SPARC.  Turns on call chain saving on X86.  On X86, client
  #   code should NOT be compiled with -fomit-frame-pointer.
  # -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly
  #   altered stubborn objects, at substantial performance cost.
  #   Use only for debugging of the incremental collector.
--- 200,211 ----
  #   allocated through the debugging interface.  Affects the amount of
  #   information generated in leak reports.  Only matters on platforms
  #   on which we can quickly generate call stacks, currently Linux/(X86 & SPARC)
! #   and Solaris/SPARC and platforms that provide execinfo.h.
! #   Default is zero.  On X86, client
  #   code should NOT be compiled with -fomit-frame-pointer.
+ # -DSAVE_CALL_NARGS=<n> Set the number of functions arguments to be
+ #   saved with each call frame.  Default is zero.  Ignored if we
+ #   don't know how to retrieve arguments on the platform.
  # -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly
  #   altered stubborn objects, at substantial performance cost.
  #   Use only for debugging of the incremental collector.
*************** HOSTCFLAGS=$(CFLAGS)
*** 190,197 ****
  #   15% or so.
  # -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style
  #   prefetch instructions.  Same restrictions as USE_I686_PREFETCH.
! #   UNTESTED!!
! # -DGC_USE_LD_WRAP in combination with the gld flags listed in README.linux
  #   causes the collector some system and pthread calls in a more transparent
  #   fashion than the usual macro-based approach.  Requires GNU ld, and
  #   currently probably works only with Linux.
--- 222,232 ----
  #   15% or so.
  # -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style
  #   prefetch instructions.  Same restrictions as USE_I686_PREFETCH.
! #   Minimally tested.  Didn't appear to be an obvious win on a K6-2/500.
! # -DUSE_PPC_PREFETCH causes the collector to issue PowerPC style
! #   prefetch instructions.  No effect except on PowerPC OS X platforms.
! #   Performance impact untested.
! # -DGC_USE_LD_WRAP in combination with the old flags listed in README.linux
  #   causes the collector some system and pthread calls in a more transparent
  #   fashion than the usual macro-based approach.  Requires GNU ld, and
  #   currently probably works only with Linux.
*************** HOSTCFLAGS=$(CFLAGS)
*** 200,205 ****
--- 235,244 ----
  #   in a way that usually does not involve acquisition of a global lock.
  #   Currently requires -DGC_LINUX_THREADS, but should be easy to port to
  #   other pthreads environments.  Recommended for multiprocessors.
+ # -DUSE_COMPILER_TLS causes thread local allocation to use compiler-supported
+ #   "__thread" thread-local variables.  This is the default in HP/UX.  It
+ #   may help performance on recent Linux installations.  (It failed for
+ #   me on RedHat 8, but appears to work on RedHat 9.)
  # -DPARALLEL_MARK allows the marker to run in multiple threads.  Recommended
  #   for multiprocessors.  Currently requires Linux on X86 or IA64, though
  #   support for other Posix platforms should be fairly easy to add,
*************** HOSTCFLAGS=$(CFLAGS)
*** 208,216 ****
--- 247,281 ----
  #   These may otherwise alter its configuration, or turn off GC altogether.
  #   I don't know of a reason to disable this, except possibly if the
  #   resulting process runs as a privileged user?
+ # -DUSE_GLOBAL_ALLOC.  Win32 only.  Use GlobalAlloc instead of
+ #   VirtualAlloc to allocate the heap.  May be needed to work around
+ #   a Windows NT/2000 issue.  Incompatible with USE_MUNMAP.
+ #   See README.win32 for details.
+ # -DMAKE_BACK_GRAPH. Enable GC_PRINT_BACK_HEIGHT environment variable.
+ #   See README.environment for details.  Experimental. Limited platform
+ #   support.  Implies DBG_HDRS_ALL.  All allocation should be done using
+ #   the debug interface.
  # -DSTUBBORN_ALLOC allows allocation of "hard to change" objects, and thus
  #   makes incremental collection easier.  Was enabled by default until 6.0.
  #   Rarely used, to my knowledge.
+ # -DHANDLE_FORK attempts to make GC_malloc() work in a child process fork()ed
+ #   from a multithreaded parent.  Currently only supported by pthread_support.c.
+ #   (Similar code should work on Solaris or Irix, but it hasn't been tried.)
+ # -DTEST_WITH_SYSTEM_MALLOC causes gctest to allocate (and leak) large chunks
+ #   of memory with the standard system malloc.  This will cause the root
+ #   set and collected heap to grow significantly if malloced memory is
+ #   somehow getting traced by the collector.  This has no impact on the
+ #   generated library; it only affects the test.
+ # -DPOINTER_MASK=0x... causes candidate pointers to be ANDed with the
+ #   given mask before being considered.  If either this or the following
+ #   macro is defined, it will be assumed that all pointers stored in
+ #   the heap need to be processed this way.  Stack and register pointers
+ #   will be considered both with and without processing.
+ #   These macros are normally needed only to support systems that use
+ #   high-order pointer tags. EXPERIMENTAL.
+ # -DPOINTER_SHIFT=n causes the collector to left shift candidate pointers
+ #   by the indicated amount before trying to interpret them.  Applied
+ #   after POINTER_MASK. EXPERIMENTAL.  See also the preceding macro.
  #
  
  CXXFLAGS= $(CFLAGS) 
*************** AR= ar
*** 218,267 ****
  RANLIB= ranlib
  
  
! OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o gc_dlopen.o
  
! CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c gc_dlopen.c
  
  CORD_SRCS=  cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC
  
  CORD_OBJS=  cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o
  
! SRCS= $(CSRCS) mips_sgi_mach_dep.s rs6000_mach_dep.s alpha_mach_dep.s \
!     sparc_mach_dep.s include/gc.h include/gc_typed.h \
      include/private/gc_hdrs.h include/private/gc_priv.h \
      include/private/gcconfig.h include/private/gc_pmark.h \
      include/gc_inl.h include/gc_inline.h include/gc_mark.h \
      threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \
!     include/weakpointer.h include/private/gc_locks.h \
      gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \
!     include/new_gc_alloc.h include/javaxfc.h sparc_sunos4_mach_dep.s \
!     sparc_netbsd_mach_dep.s \
      include/private/solaris_threads.h include/gc_backptr.h \
      hpux_test_and_clear.s include/gc_gcj.h \
      include/gc_local_alloc.h include/private/dbg_mlc.h \
!     include/private/specific.h powerpc_macosx_mach_dep.s \
      include/leak_detector.h include/gc_amiga_redirects.h \
!     include/gc_pthread_redirects.h $(CORD_SRCS)
  
  DOC_FILES= README.QUICK doc/README.Mac doc/README.MacOSX doc/README.OS2 \
! 	doc/README.amiga doc/README.cords doc/README.debugging \
  	doc/README.dj doc/README.hp doc/README.linux doc/README.rs6000 \
  	doc/README.sgi doc/README.solaris2 doc/README.uts \
  	doc/README.win32 doc/barrett_diagram doc/README \
          doc/README.contributors doc/README.changes doc/gc.man \
! 	doc/README.environment
  
  TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \
! 	tests/leak_test.c tests/thread_leak_test.c
! OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \
!            setjmp_t.c SMakefile.amiga configure.in Makefile.am \
!            callprocs pc_excludes \
!            MacProjects.sit.hqx MacOS.c EMX_MAKEFILE \
             Mac_files/datastart.c Mac_files/dataend.c \
             Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \
             add_gc_prefix.c gc_cpp.cpp \
! 	   win32_threads.c NT_THREADS_MAKEFILE gc.mak Makefile.dj \
! 	   version.h Makefile.DLLs WCC_MAKEFILE AmigaOS.c $(TESTS)
  
  CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \
  	$(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h
--- 283,351 ----
  RANLIB= ranlib
  
  
! OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o aix_irix_threads.o pthread_support.o pthread_stop_world.o darwin_stop_world.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o gc_dlopen.o backgraph.o win32_threads.o
  
! CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c aix_irix_threads.c pthread_support.c pthread_stop_world.c darwin_stop_world.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c gc_dlopen.c backgraph.c win32_threads.c
  
  CORD_SRCS=  cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC
  
  CORD_OBJS=  cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o
  
! SRCS= $(CSRCS) mips_sgi_mach_dep.s rs6000_mach_dep.s alpha_mach_dep.S \
!     sparc_mach_dep.S include/gc.h include/gc_typed.h \
      include/private/gc_hdrs.h include/private/gc_priv.h \
      include/private/gcconfig.h include/private/gc_pmark.h \
      include/gc_inl.h include/gc_inline.h include/gc_mark.h \
      threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \
!     gcname.c include/weakpointer.h include/private/gc_locks.h \
      gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \
!     include/new_gc_alloc.h include/gc_allocator.h \
!     include/javaxfc.h sparc_sunos4_mach_dep.s sparc_netbsd_mach_dep.s \
      include/private/solaris_threads.h include/gc_backptr.h \
      hpux_test_and_clear.s include/gc_gcj.h \
      include/gc_local_alloc.h include/private/dbg_mlc.h \
!     include/private/specific.h powerpc_darwin_mach_dep.s \
      include/leak_detector.h include/gc_amiga_redirects.h \
!     include/gc_pthread_redirects.h ia64_save_regs_in_stack.s \
!     include/gc_config_macros.h include/private/pthread_support.h \
!     include/private/pthread_stop_world.h include/private/darwin_semaphore.h \
!     include/private/darwin_stop_world.h $(CORD_SRCS)
  
  DOC_FILES= README.QUICK doc/README.Mac doc/README.MacOSX doc/README.OS2 \
! 	doc/README.amiga doc/README.cords doc/debugging.html \
  	doc/README.dj doc/README.hp doc/README.linux doc/README.rs6000 \
  	doc/README.sgi doc/README.solaris2 doc/README.uts \
  	doc/README.win32 doc/barrett_diagram doc/README \
          doc/README.contributors doc/README.changes doc/gc.man \
! 	doc/README.environment doc/tree.html doc/gcdescr.html \
! 	doc/README.autoconf doc/README.macros doc/README.ews4800 \
! 	doc/README.DGUX386 doc/README.arm.cross doc/leak.html \
! 	doc/scale.html doc/gcinterface.html doc/README.darwin \
! 	doc/simple_example.html
  
  TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \
! 	tests/leak_test.c tests/thread_leak_test.c tests/middle.c
! 
! GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \
! 		 libtool.m4 install-sh configure.host Makefile.in \
! 		 aclocal.m4 config.sub config.guess \
! 		 include/Makefile.am include/Makefile.in \
! 		 doc/Makefile.am doc/Makefile.in \
! 		 ltmain.sh mkinstalldirs depcomp missing
! 
! OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \
! 		 BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \
! 		 PCR-Makefile SMakefile.amiga Makefile.DLLs \
! 		 digimars.mak Makefile.direct NT_STATIC_THREADS_MAKEFILE
! #	Makefile and Makefile.direct are copies of each other.
! 
! OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \
!            MacProjects.sit.hqx MacOS.c \
             Mac_files/datastart.c Mac_files/dataend.c \
             Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \
             add_gc_prefix.c gc_cpp.cpp \
! 	   version.h AmigaOS.c \
! 	   $(TESTS) $(GNU_BUILD_FILES) $(OTHER_MAKEFILES)
  
  CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \
  	$(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h
*************** SPECIALCFLAGS = -I$(srcdir)/include
*** 284,299 ****
  
  all: gc.a gctest
  
! BSD-pkg-all: bsd-libgc.a
  
  bsd-libgc.a:
  	$(MAKE) CFLAGS="$(CFLAGS)" clean c++-t
  	mv gc.a bsd-libgc.a
  
  BSD-pkg-install: BSD-pkg-all
  	${CP} bsd-libgc.a libgc.a
  	${INSTALL_DATA} libgc.a ${PREFIX}/lib
  	${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include
  
  pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \
  include/private/gc_locks.h include/gc.h include/private/gcconfig.h \
--- 368,390 ----
  
  all: gc.a gctest
  
! LEAKFLAGS=$(CFLAGS) -DFIND_LEAK
! 
! BSD-pkg-all: bsd-libgc.a bsd-libleak.a
  
  bsd-libgc.a:
  	$(MAKE) CFLAGS="$(CFLAGS)" clean c++-t
  	mv gc.a bsd-libgc.a
  
+ bsd-libleak.a:
+ 	$(MAKE) -f Makefile.direct CFLAGS="$(LEAKFLAGS)" clean c++-nt
+ 	mv gc.a bsd-libleak.a
+ 
  BSD-pkg-install: BSD-pkg-all
  	${CP} bsd-libgc.a libgc.a
  	${INSTALL_DATA} libgc.a ${PREFIX}/lib
  	${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include
+ 	${INSTALL_MAN} doc/gc.man ${PREFIX}/man/man3/gc.3
  
  pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \
  include/private/gc_locks.h include/gc.h include/private/gcconfig.h \
*************** mach_dep.o $(SRCS)
*** 304,319 ****
  $(OBJS) tests/test.o dyn_load.o dyn_load_sunos53.o: \
      $(srcdir)/include/private/gc_priv.h \
      $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \
!     $(srcdir)/include/gc.h \
      $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \
!     Makefile
  # The dependency on Makefile is needed.  Changing
  # options such as -DSILENT affects the size of GC_arrays,
  # invalidating all .o files that rely on gc_priv.h
  
  mark.o typd_mlc.o finalize.o ptr_chck.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h
  
! specific.o linux_threads.o: $(srcdir)/include/private/specific.h
  
  solaris_threads.o solaris_pthreads.o: $(srcdir)/include/private/solaris_threads.h
  
--- 395,410 ----
  $(OBJS) tests/test.o dyn_load.o dyn_load_sunos53.o: \
      $(srcdir)/include/private/gc_priv.h \
      $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \
!     $(srcdir)/include/gc.h $(srcdir)/include/gc_pthread_redirects.h \
      $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \
!     $(srcdir)/include/gc_config_macros.h Makefile
  # The dependency on Makefile is needed.  Changing
  # options such as -DSILENT affects the size of GC_arrays,
  # invalidating all .o files that rely on gc_priv.h
  
  mark.o typd_mlc.o finalize.o ptr_chck.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h
  
! specific.o pthread_support.o: $(srcdir)/include/private/specific.h
  
  solaris_threads.o solaris_pthreads.o: $(srcdir)/include/private/solaris_threads.h
  
*************** liblinuxgc.so: $(OBJS) dyn_load.o
*** 408,428 ****
  # 	gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo
  #	touch liblinuxgc.so
  
! mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s $(srcdir)/mips_ultrix_mach_dep.s \
!             $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_macosx_mach_dep.s $(UTILS)
  	rm -f mach_dep.o
! 	./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.s
  	./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s
  	./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s
! 	./if_mach RS6000 "" $(AS) -o mach_dep.o $(srcdir)/rs6000_mach_dep.s
! 	./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s
! #	./if_mach ALPHA "" $(AS) -o mach_dep.o $(srcdir)/alpha_mach_dep.s
! #	alpha_mach_dep.s assumes that pointers are not saved in fp registers.
! #	Gcc on a 21264 can spill pointers to fp registers.  Oops.
! 	./if_mach SPARC SUNOS5 $(AS) -o mach_dep.o $(srcdir)/sparc_mach_dep.s
  	./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s
  	./if_mach SPARC OPENBSD $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s
  	./if_mach SPARC NETBSD $(AS) -o mach_dep.o $(srcdir)/sparc_netbsd_mach_dep.s
  	./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
  
  mark_rts.o: $(srcdir)/mark_rts.c $(UTILS)
--- 499,523 ----
  # 	gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo
  #	touch liblinuxgc.so
  
! mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s \
! 	    $(srcdir)/mips_ultrix_mach_dep.s \
!             $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_darwin_mach_dep.s \
! 	    $(srcdir)/sparc_mach_dep.S $(srcdir)/sparc_sunos4_mach_dep.s \
! 	    $(srcdir)/ia64_save_regs_in_stack.s \
! 	    $(srcdir)/sparc_netbsd_mach_dep.s $(UTILS)
  	rm -f mach_dep.o
! 	./if_mach MIPS IRIX5 $(CC) -c -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.s
  	./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s
  	./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s
! 	./if_mach POWERPC DARWIN $(AS) -o mach_dep.o $(srcdir)/powerpc_darwin_mach_dep.s
! 	./if_mach ALPHA LINUX $(CC) -c -o mach_dep.o $(srcdir)/alpha_mach_dep.S
! 	./if_mach SPARC SUNOS5 $(CC) -c -o mach_dep.o $(srcdir)/sparc_mach_dep.S
  	./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s
  	./if_mach SPARC OPENBSD $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s
  	./if_mach SPARC NETBSD $(AS) -o mach_dep.o $(srcdir)/sparc_netbsd_mach_dep.s
+ 	./if_mach IA64 "" as $(AS_ABI_FLAG) -o ia64_save_regs_in_stack.o $(srcdir)/ia64_save_regs_in_stack.s
+ 	./if_mach IA64 "" $(CC) -c -o mach_dep1.o $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
+ 	./if_mach IA64 "" ld -r -o mach_dep.o mach_dep1.o ia64_save_regs_in_stack.o
  	./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
  
  mark_rts.o: $(srcdir)/mark_rts.c $(UTILS)
*************** cord/de: $(srcdir)/cord/de.c cord/cordbs
*** 462,468 ****
  	./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -lucb `./threadlibs`
  	./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld `./threadlibs`
  	./if_mach RS6000 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses
! 	./if_mach POWERPC MACOSX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a
  	./if_mach I386 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
  	./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
  	./if_mach IA64 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
--- 557,563 ----
  	./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -lucb `./threadlibs`
  	./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld `./threadlibs`
  	./if_mach RS6000 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses
! 	./if_mach POWERPC DARWIN $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a
  	./if_mach I386 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
  	./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
  	./if_mach IA64 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs`
*************** if_not_there: $(srcdir)/if_not_there.c
*** 481,487 ****
  clean: 
  	rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \
  	      setjmp_test  mon.out gmon.out a.out core if_not_there if_mach \
! 	      threadlibs $(CORD_OBJS) cord/cordtest cord/de
  	-rm -f *~
  
  gctest: tests/test.o gc.a $(UTILS)
--- 576,582 ----
  clean: 
  	rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \
  	      setjmp_test  mon.out gmon.out a.out core if_not_there if_mach \
! 	      threadlibs $(CORD_OBJS) cord/cordtest cord/de 
  	-rm -f *~
  
  gctest: tests/test.o gc.a $(UTILS)
*************** KandRtest: setjmp_test gctest
*** 505,516 ****
  	./setjmp_test
  	./gctest
  
! add_gc_prefix: add_gc_prefix.c
  	$(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c
  
! gc.tar: $(SRCS) $(DOC_FILES) $(OTHER_FILES) add_gc_prefix
  	./add_gc_prefix $(SRCS) $(DOC_FILES) $(OTHER_FILES) > /tmp/gc.tar-files
  	tar cvfh gc.tar `cat /tmp/gc.tar-files`
  
  pc_gc.tar: $(SRCS) $(OTHER_FILES)
  	tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES)
--- 600,621 ----
  	./setjmp_test
  	./gctest
  
! add_gc_prefix: $(srcdir)/add_gc_prefix.c $(srcdir)/version.h
  	$(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c
  
! gcname: $(srcdir)/gcname.c $(srcdir)/version.h
! 	$(CC) -o gcname $(srcdir)/gcname.c
! 
! gc.tar: $(SRCS) $(DOC_FILES) $(OTHER_FILES) add_gc_prefix gcname
! 	cp Makefile Makefile.old
! 	cp Makefile.direct Makefile
! 	rm -f `./gcname`
! 	ln -s . `./gcname`
  	./add_gc_prefix $(SRCS) $(DOC_FILES) $(OTHER_FILES) > /tmp/gc.tar-files
  	tar cvfh gc.tar `cat /tmp/gc.tar-files`
+ 	cp gc.tar `./gcname`.tar
+ 	gzip `./gcname`.tar
+ 	rm `./gcname`
  
  pc_gc.tar: $(SRCS) $(OTHER_FILES)
  	tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES)
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.dj gcc-4.0.0/boehm-gc/Makefile.dj
*** gcc-3.4.3/boehm-gc/Makefile.dj	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/Makefile.dj	Fri Aug 13 23:05:28 2004
*************** EXE_SUFFIX=.exe
*** 29,35 ****
  srcdir= .
  VPATH= $(srcdir)
  
! CFLAGS= -O -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXECUTE_PERMISSION -DSILENT
  
  # Setjmp_test may yield overly optimistic results when compiled
  # without optimization.
--- 29,35 ----
  srcdir= .
  VPATH= $(srcdir)
  
! CFLAGS= -gstabs+ -O2 -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXECUTE_PERMISSION -DSILENT
  
  # Setjmp_test may yield overly optimistic results when compiled
  # without optimization.
*************** AR= ar
*** 157,165 ****
  RANLIB= ranlib
  
  
! OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o hpux_irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o
  
! CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c hpux_irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c
  
  CORD_SRCS=  cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC cord/SCOPTIONS.amiga cord/SMakefile.amiga
  
--- 157,165 ----
  RANLIB= ranlib
  
  
! OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o
  
! CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c
  
  CORD_SRCS=  cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC cord/SCOPTIONS.amiga cord/SMakefile.amiga
  
*************** SRCS= $(CSRCS) mips_sgi_mach_dep.S rs600
*** 181,187 ****
      include/leak_detector.h $(CORD_SRCS)
  
  OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \
!            README test.c test_cpp.cc setjmp_t.c SMakefile.amiga \
             SCoptions.amiga README.amiga README.win32 cord/README \
  	   README.rs6000 README.QUICK callprocs pc_excludes \
             barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \
--- 181,187 ----
      include/leak_detector.h $(CORD_SRCS)
  
  OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \
!            README tests/test.c test_cpp.cc setjmp_t.c SMakefile.amiga \
             SCoptions.amiga README.amiga README.win32 cord/README \
  	   README.rs6000 README.QUICK callprocs pc_excludes \
             barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \
*************** CURSES= -lcurses -ltermlib
*** 206,212 ****
  # the SHELL environment variable.
  SHELL= /bin/sh
  
! SPECIALCFLAGS = 
  # Alternative flags to the C compiler for mach_dep.c.
  # Mach_dep.c often doesn't like optimization, and it's
  # not time-critical anyway.
--- 206,212 ----
  # the SHELL environment variable.
  SHELL= /bin/sh
  
! SPECIALCFLAGS = -I$(srcdir)/include
  # Alternative flags to the C compiler for mach_dep.c.
  # Mach_dep.c often doesn't like optimization, and it's
  # not time-critical anyway.
*************** $(OBJS) test.o dyn_load.o dyn_load_sunos
*** 224,230 ****
  # options such as -DSILENT affects the size of GC_arrays,
  # invalidating all .o files that rely on gc_priv.h
  
! mark.o typd_mlc.o finalize.o: $(srcdir)/gc_mark.h
  
  base_lib gc.a: $(OBJS) dyn_load.o $(UTILS)
  	echo > base_lib
--- 224,230 ----
  # options such as -DSILENT affects the size of GC_arrays,
  # invalidating all .o files that rely on gc_priv.h
  
! mark.o typd_mlc.o finalize.o: $(srcdir)/include/gc_mark.h
  
  base_lib gc.a: $(OBJS) dyn_load.o $(UTILS)
  	echo > base_lib
*************** clean: 
*** 366,376 ****
  	rm -f threadlibs$(EXE_SUFFIX) cord/cordtest$(EXE_SUFFIX)
  	-rm -f *~
  
! gctest$(EXE_SUFFIX): test.o gc.a if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX)
  	rm -f gctest gctest$(EXE_SUFFIX)
! 	./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest  test.o gc.a -lucb
! 	./if_mach HP_PA "" $(CC) $(CFLAGS) -o gctest  test.o gc.a -ldld
! 	./if_not_there gctest$(EXE_SUFFIX) $(CC) $(CFLAGS) -o gctest$(EXE_SUFFIX) test.o gc.a
  	rm -f gctest
  
  # If an optimized setjmp_test generates a segmentation fault,
--- 366,376 ----
  	rm -f threadlibs$(EXE_SUFFIX) cord/cordtest$(EXE_SUFFIX)
  	-rm -f *~
  
! gctest$(EXE_SUFFIX): tests/test.o gc.a if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX)
  	rm -f gctest gctest$(EXE_SUFFIX)
! 	./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest  tests/test.o gc.a -lucb
! 	./if_mach HP_PA "" $(CC) $(CFLAGS) -o gctest  tests/test.o gc.a -ldld
! 	./if_not_there gctest$(EXE_SUFFIX) $(CC) $(CFLAGS) -o gctest$(EXE_SUFFIX) tests/test.o gc.a
  	rm -f gctest
  
  # If an optimized setjmp_test generates a segmentation fault,
*************** gc.tar.Z: gc.tar
*** 407,414 ****
  gc.tar.gz: gc.tar
  	gzip gc.tar
  
! lint: $(CSRCS) test.c
! 	lint -DLINT $(CSRCS) test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall"
  
  # BTL: added to test shared library version of collector.
  # Currently works only under SunOS5.  Requires GC_INIT call from statically
--- 407,414 ----
  gc.tar.gz: gc.tar
  	gzip gc.tar
  
! lint: $(CSRCS) tests/test.c
! 	lint -DLINT $(CSRCS) tests/test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall"
  
  # BTL: added to test shared library version of collector.
  # Currently works only under SunOS5.  Requires GC_INIT call from statically
*************** ABSDIR = `pwd`
*** 417,424 ****
  gctest_dyn_link: test.o libgc.so
  	$(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread
  
! test_dll.o: test.c libgc_globals.h
! 	$(CC) $(CFLAGS) -DGC_USE_DLL -c test.c -o test_dll.o
  
  test_dll: test_dll.o libgc_dll.a libgc.dll
  	$(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll
--- 417,424 ----
  gctest_dyn_link: test.o libgc.so
  	$(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread
  
! test_dll.o: tests/test.c libgc_globals.h
! 	$(CC) $(CFLAGS) -DGC_USE_DLL -c tests/test.c -o test_dll.o
  
  test_dll: test_dll.o libgc_dll.a libgc.dll
  	$(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll
diff -Nrcpad gcc-3.4.3/boehm-gc/Makefile.in gcc-4.0.0/boehm-gc/Makefile.in
*** gcc-3.4.3/boehm-gc/Makefile.in	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/boehm-gc/Makefile.in	Thu Apr 21 07:04:10 2005
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999, 2001 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.
--- 1,8 ----
! # 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.
***************
*** 10,122 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
  
! SHELL = @SHELL@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = .
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AR = @AR@
  AS = @AS@
  CC = @CC@
  CFLAGS = @CFLAGS@
  CPP = @CPP@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
  CXXFLAGS = @CXXFLAGS@
! CXXINCLUDES = @CXXINCLUDES@
! DLLTOOL = @DLLTOOL@
  EXEEXT = @EXEEXT@
  EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@
- GCJ = @GCJ@
- GCJFLAGS = @GCJFLAGS@
  GC_CFLAGS = @GC_CFLAGS@
! INCLUDES = @INCLUDES@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
  MY_CFLAGS = @MY_CFLAGS@
- OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  RANLIB = @RANLIB@
  STRIP = @STRIP@
  THREADLIBS = @THREADLIBS@
  VERSION = @VERSION@
  addincludes = @addincludes@
  addlibs = @addlibs@
  addobjs = @addobjs@
  addtests = @addtests@
! gc_basedir = @gc_basedir@
  mkinstalldirs = @mkinstalldirs@
  target_all = @target_all@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
! 
! AUTOMAKE_OPTIONS = cygnus
! 
  SUBDIRS = include
- 
- # Multilib support variables.
- MULTISRCTOP = 
- MULTIBUILDTOP = 
- MULTIDIRS = 
- MULTISUBDIR = 
- MULTIDO = true
- MULTICLEAN = true
- 
  noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
- @POWERPC_DARWIN_TRUE@asm_libgc_sources = @POWERPC_DARWIN_TRUE@powerpc_darwin_mach_dep.s
  @POWERPC_DARWIN_FALSE@asm_libgc_sources = 
! 
  GC_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \
  dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c aix_irix_threads.c \
  malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \
--- 12,259 ----
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
+ @SET_MAKE@
  
! SOURCES = $(libgcjgc_la_SOURCES) $(libgcjgc_convenience_la_SOURCES) $(gctest_SOURCES)
  
  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@
+ check_PROGRAMS = gctest$(EXEEXT)
+ DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub \
+ 	ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ 	$(top_srcdir)/configure $(am__configure_deps) \
+ 	$(srcdir)/../mkinstalldirs $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../ltmain.sh $(srcdir)/../config.guess \
+ 	$(srcdir)/../config.sub
+ subdir = .
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.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 \
+  configure.lineno configure.status.lineno
+ CONFIG_HEADER = $(top_builddir)/include/gc_config.h \
+ 	$(top_builddir)/include/gc_ext_config.h
+ CONFIG_CLEAN_FILES =
+ LTLIBRARIES = $(noinst_LTLIBRARIES)
+ am__DEPENDENCIES_1 =
+ @POWERPC_DARWIN_TRUE@am__objects_1 = powerpc_darwin_mach_dep.lo
+ am__objects_2 = allchblk.lo alloc.lo blacklst.lo checksums.lo \
+ 	dbg_mlc.lo dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \
+ 	headers.lo aix_irix_threads.lo malloc.lo mallocx.lo mark.lo \
+ 	mark_rts.lo misc.lo new_hblk.lo obj_map.lo os_dep.lo \
+ 	pcr_interface.lo ptr_chck.lo real_malloc.lo reclaim.lo \
+ 	solaris_pthreads.lo solaris_threads.lo specific.lo stubborn.lo \
+ 	typd_mlc.lo backgraph.lo win32_threads.lo pthread_support.lo \
+ 	pthread_stop_world.lo darwin_stop_world.lo $(am__objects_1)
+ am_libgcjgc_la_OBJECTS = $(am__objects_2)
+ libgcjgc_la_OBJECTS = $(am_libgcjgc_la_OBJECTS)
+ am_libgcjgc_convenience_la_OBJECTS = $(am__objects_2)
+ libgcjgc_convenience_la_OBJECTS =  \
+ 	$(am_libgcjgc_convenience_la_OBJECTS)
+ am__dirstamp = $(am__leading_dot)dirstamp
+ am_gctest_OBJECTS = tests/test.$(OBJEXT)
+ gctest_OBJECTS = $(am_gctest_OBJECTS)
+ gctest_DEPENDENCIES = ./libgcjgc.la $(am__DEPENDENCIES_1) \
+ 	$(am__DEPENDENCIES_1)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include
+ depcomp =
+ am__depfiles_maybe =
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+ CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
+ LTCCASCOMPILE = $(LIBTOOL) --mode=compile $(CCAS) $(AM_CCASFLAGS) \
+ 	$(CCASFLAGS)
+ SOURCES = $(libgcjgc_la_SOURCES) $(libgcjgc_convenience_la_SOURCES) \
+ 	$(gctest_SOURCES)
+ MULTISRCTOP = 
+ MULTIBUILDTOP = 
+ MULTIDIRS = 
+ MULTISUBDIR = 
+ MULTIDO = true
+ MULTICLEAN = true
+ 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)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AM_CPPFLAGS = @AM_CPPFLAGS@
  AR = @AR@
  AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
  CC = @CC@
+ CCAS = @CCAS@
+ CCASFLAGS = @CCASFLAGS@
+ CCDEPMODE = @CCDEPMODE@
  CFLAGS = @CFLAGS@
+ CPLUSPLUS_FALSE = @CPLUSPLUS_FALSE@
+ CPLUSPLUS_TRUE = @CPLUSPLUS_TRUE@
  CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
  CXXFLAGS = @CXXFLAGS@
! CYGPATH_W = @CYGPATH_W@
! DEFS = @DEFS@
! DEPDIR = @DEPDIR@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXEEXT = @EXEEXT@
  EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@
  GC_CFLAGS = @GC_CFLAGS@
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
! LIBOBJS = @LIBOBJS@
! LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
  MY_CFLAGS = @MY_CFLAGS@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+ POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
  RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
  STRIP = @STRIP@
  THREADLIBS = @THREADLIBS@
  VERSION = @VERSION@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
  addincludes = @addincludes@
  addlibs = @addlibs@
  addobjs = @addobjs@
  addtests = @addtests@
! 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@
! exec_prefix = @exec_prefix@
! 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@
  mkinstalldirs = @mkinstalldirs@
+ multi_basedir = @multi_basedir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
  target_all = @target_all@
+ target_cpu = @target_cpu@
+ target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
! AUTOMAKE_OPTIONS = cygnus subdir-objects
! ACLOCAL_AMFLAGS = -I .. -I ../config
  SUBDIRS = include
  noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
  @POWERPC_DARWIN_FALSE@asm_libgc_sources = 
! @POWERPC_DARWIN_TRUE@asm_libgc_sources = powerpc_darwin_mach_dep.s
  GC_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \
  dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c aix_irix_threads.c \
  malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \
*************** backgraph.c win32_threads.c \
*** 126,169 ****
  pthread_support.c pthread_stop_world.c darwin_stop_world.c \
  $(asm_libgc_sources)
  
! 
! EXTRA_GC_SOURCES = alpha_mach_dep.S \
  mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_darwin_mach_dep.s \
  rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \
  sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s
  
- 
  libgcjgc_la_SOURCES = $(GC_SOURCES)
  libgcjgc_convenience_la_SOURCES = $(GC_SOURCES)
- EXTRA_libgcjgc_la_SOURCES = $(EXTRA_GC_SOURCES)
- EXTRA_libgcjgc_convenience_la_SOURCES = $(EXTRA_GC_SOURCES)
  
  # Include THREADLIBS here to ensure that the correct versions of
  # linuxthread semaphore functions get linked:
  libgcjgc_la_LIBADD = @addobjs@ $(THREADLIBS)
  libgcjgc_la_DEPENDENCIES = @addobjs@
  libgcjgc_la_LDFLAGS = -version-info 1:1:0 -rpath $(toolexeclibdir)
- 
  libgcjgc_convenience_la_LIBADD = @addobjs@
  libgcjgc_convenience_la_DEPENDENCIES = @addobjs@
- 
  AM_CXXFLAGS = @GC_CFLAGS@
- 
  AM_CFLAGS = @GC_CFLAGS@
! 
! check_PROGRAMS = gctest
! # 	Using $< in the above seems to fail with the HP/UX on Itanium make.
! 
! gctest_OBJECTS = test.o
  gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS)
  gctest_LDFLAGS = -shared-libgcc
  TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
  TESTS = gctest
! 
! all_objs = @addobjs@ $(libgcjgc_la_OBJECTS)
! 
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) \
! 	$(AM_CPPFLAGS) $(CPPFLAGS) \
  	$(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) 
  
  LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@
--- 263,291 ----
  pthread_support.c pthread_stop_world.c darwin_stop_world.c \
  $(asm_libgc_sources)
  
! EXTRA_DIST = alpha_mach_dep.S \
  mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_darwin_mach_dep.s \
  rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \
  sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s
  
  libgcjgc_la_SOURCES = $(GC_SOURCES)
  libgcjgc_convenience_la_SOURCES = $(GC_SOURCES)
  
  # Include THREADLIBS here to ensure that the correct versions of
  # linuxthread semaphore functions get linked:
  libgcjgc_la_LIBADD = @addobjs@ $(THREADLIBS)
  libgcjgc_la_DEPENDENCIES = @addobjs@
  libgcjgc_la_LDFLAGS = -version-info 1:1:0 -rpath $(toolexeclibdir)
  libgcjgc_convenience_la_LIBADD = @addobjs@
  libgcjgc_convenience_la_DEPENDENCIES = @addobjs@
  AM_CXXFLAGS = @GC_CFLAGS@
  AM_CFLAGS = @GC_CFLAGS@
! gctest_SOURCES = tests/test.c
  gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS)
  gctest_LDFLAGS = -shared-libgcc
  TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
  TESTS = gctest
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) \
  	$(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) 
  
  LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@
*************** AM_MAKEFLAGS = \
*** 209,345 ****
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
- 
  CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
- 
  MAKEOVERRIDES = 
! ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! CONFIG_CLEAN_FILES = 
! LTLIBRARIES =  $(noinst_LTLIBRARIES)
! 
! 
! DEFS = @DEFS@ -I. -I$(srcdir) 
! CPPFLAGS = @CPPFLAGS@
! LDFLAGS = @LDFLAGS@
! LIBS = @LIBS@
! @POWERPC_DARWIN_FALSE@libgcjgc_la_OBJECTS =  allchblk.lo alloc.lo \
! @POWERPC_DARWIN_FALSE@blacklst.lo checksums.lo dbg_mlc.lo dyn_load.lo \
! @POWERPC_DARWIN_FALSE@finalize.lo gc_dlopen.lo gcj_mlc.lo headers.lo \
! @POWERPC_DARWIN_FALSE@aix_irix_threads.lo malloc.lo mallocx.lo mark.lo \
! @POWERPC_DARWIN_FALSE@mark_rts.lo misc.lo new_hblk.lo obj_map.lo \
! @POWERPC_DARWIN_FALSE@os_dep.lo pcr_interface.lo ptr_chck.lo \
! @POWERPC_DARWIN_FALSE@real_malloc.lo reclaim.lo solaris_pthreads.lo \
! @POWERPC_DARWIN_FALSE@solaris_threads.lo specific.lo stubborn.lo \
! @POWERPC_DARWIN_FALSE@typd_mlc.lo backgraph.lo win32_threads.lo \
! @POWERPC_DARWIN_FALSE@pthread_support.lo pthread_stop_world.lo \
! @POWERPC_DARWIN_FALSE@darwin_stop_world.lo
! @POWERPC_DARWIN_TRUE@libgcjgc_la_OBJECTS =  allchblk.lo alloc.lo \
! @POWERPC_DARWIN_TRUE@blacklst.lo checksums.lo dbg_mlc.lo dyn_load.lo \
! @POWERPC_DARWIN_TRUE@finalize.lo gc_dlopen.lo gcj_mlc.lo headers.lo \
! @POWERPC_DARWIN_TRUE@aix_irix_threads.lo malloc.lo mallocx.lo mark.lo \
! @POWERPC_DARWIN_TRUE@mark_rts.lo misc.lo new_hblk.lo obj_map.lo \
! @POWERPC_DARWIN_TRUE@os_dep.lo pcr_interface.lo ptr_chck.lo \
! @POWERPC_DARWIN_TRUE@real_malloc.lo reclaim.lo solaris_pthreads.lo \
! @POWERPC_DARWIN_TRUE@solaris_threads.lo specific.lo stubborn.lo \
! @POWERPC_DARWIN_TRUE@typd_mlc.lo backgraph.lo win32_threads.lo \
! @POWERPC_DARWIN_TRUE@pthread_support.lo pthread_stop_world.lo \
! @POWERPC_DARWIN_TRUE@darwin_stop_world.lo powerpc_darwin_mach_dep.lo
! libgcjgc_convenience_la_LDFLAGS = 
! @POWERPC_DARWIN_FALSE@libgcjgc_convenience_la_OBJECTS =  allchblk.lo \
! @POWERPC_DARWIN_FALSE@alloc.lo blacklst.lo checksums.lo dbg_mlc.lo \
! @POWERPC_DARWIN_FALSE@dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \
! @POWERPC_DARWIN_FALSE@headers.lo aix_irix_threads.lo malloc.lo \
! @POWERPC_DARWIN_FALSE@mallocx.lo mark.lo mark_rts.lo misc.lo \
! @POWERPC_DARWIN_FALSE@new_hblk.lo obj_map.lo os_dep.lo pcr_interface.lo \
! @POWERPC_DARWIN_FALSE@ptr_chck.lo real_malloc.lo reclaim.lo \
! @POWERPC_DARWIN_FALSE@solaris_pthreads.lo solaris_threads.lo \
! @POWERPC_DARWIN_FALSE@specific.lo stubborn.lo typd_mlc.lo backgraph.lo \
! @POWERPC_DARWIN_FALSE@win32_threads.lo pthread_support.lo \
! @POWERPC_DARWIN_FALSE@pthread_stop_world.lo darwin_stop_world.lo
! @POWERPC_DARWIN_TRUE@libgcjgc_convenience_la_OBJECTS =  allchblk.lo \
! @POWERPC_DARWIN_TRUE@alloc.lo blacklst.lo checksums.lo dbg_mlc.lo \
! @POWERPC_DARWIN_TRUE@dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \
! @POWERPC_DARWIN_TRUE@headers.lo aix_irix_threads.lo malloc.lo \
! @POWERPC_DARWIN_TRUE@mallocx.lo mark.lo mark_rts.lo misc.lo new_hblk.lo \
! @POWERPC_DARWIN_TRUE@obj_map.lo os_dep.lo pcr_interface.lo ptr_chck.lo \
! @POWERPC_DARWIN_TRUE@real_malloc.lo reclaim.lo solaris_pthreads.lo \
! @POWERPC_DARWIN_TRUE@solaris_threads.lo specific.lo stubborn.lo \
! @POWERPC_DARWIN_TRUE@typd_mlc.lo backgraph.lo win32_threads.lo \
! @POWERPC_DARWIN_TRUE@pthread_support.lo pthread_stop_world.lo \
! @POWERPC_DARWIN_TRUE@darwin_stop_world.lo powerpc_darwin_mach_dep.lo
! check_PROGRAMS =  gctest$(EXEEXT)
! gctest_DEPENDENCIES =  ./libgcjgc.la
! COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
! CCLD = $(CC)
! DIST_COMMON =  ChangeLog Makefile.am Makefile.in acinclude.m4 aclocal.m4 \
! config.guess config.sub configure configure.in install-sh ltconfig \
! ltmain.sh mkinstalldirs
! 
! 
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
! 
! TAR = gtar
! GZIP_ENV = --best
! SOURCES = $(libgcjgc_la_SOURCES) $(EXTRA_libgcjgc_la_SOURCES) $(libgcjgc_convenience_la_SOURCES) $(EXTRA_libgcjgc_convenience_la_SOURCES)
! OBJECTS = $(libgcjgc_la_OBJECTS) $(libgcjgc_convenience_la_OBJECTS)
  
- all: all-redirect
  .SUFFIXES:
  .SUFFIXES: .S .c .lo .o .obj .s
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
! 
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
! 
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in  acinclude.m4
! 	cd $(srcdir) && $(ACLOCAL)
  
! config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
  	$(SHELL) ./config.status --recheck
- $(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
- 	cd $(srcdir) && $(AUTOCONF)
  
! mostlyclean-noinstLTLIBRARIES:
  
  clean-noinstLTLIBRARIES:
  	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
  
! distclean-noinstLTLIBRARIES:
! 
! maintainer-clean-noinstLTLIBRARIES:
! 
! .c.o:
! 	$(COMPILE) -c $<
! 
! # FIXME: We should only use cygpath when building on Windows,
! # and only if it is available.
! .c.obj:
! 	$(COMPILE) -c `cygpath -w $<`
! 
! .s.o:
! 	$(COMPILE) -c $<
! 
! .S.o:
! 	$(COMPILE) -c $<
  
  mostlyclean-compile:
- 	-rm -f *.o core *.core
  	-rm -f *.$(OBJEXT)
! 
! clean-compile:
  
  distclean-compile:
  	-rm -f *.tab.c
  
! maintainer-clean-compile:
  
  .c.lo:
! 	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
  
! .S.lo:
! 	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
  
  mostlyclean-libtool:
  	-rm -f *.lo
--- 331,424 ----
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
  CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
  MAKEOVERRIDES = 
! all: all-recursive
  
  .SUFFIXES:
  .SUFFIXES: .S .c .lo .o .obj .s
! 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) --foreign '; \
! 	      cd $(srcdir) && $(AUTOMAKE) --foreign  \
! 		&& exit 0; \
! 	      exit 1;; \
! 	  esac; \
! 	done; \
! 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  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)
  
  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
+ libgcjgc.la: $(libgcjgc_la_OBJECTS) $(libgcjgc_la_DEPENDENCIES) 
+ 	$(LINK)  $(libgcjgc_la_LDFLAGS) $(libgcjgc_la_OBJECTS) $(libgcjgc_la_LIBADD) $(LIBS)
+ libgcjgc_convenience.la: $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_DEPENDENCIES) 
+ 	$(LINK)  $(libgcjgc_convenience_la_LDFLAGS) $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_LIBADD) $(LIBS)
  
! clean-checkPROGRAMS:
! 	@list='$(check_PROGRAMS)'; for p in $$list; do \
! 	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
! 	  echo " rm -f $$p $$f"; \
! 	  rm -f $$p $$f ; \
! 	done
! tests/$(am__dirstamp):
! 	@$(mkdir_p) tests
! 	@: > tests/$(am__dirstamp)
! tests/test.$(OBJEXT): tests/$(am__dirstamp)
! gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES) 
! 	@rm -f gctest$(EXEEXT)
! 	$(LINK) $(gctest_LDFLAGS) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS)
  
  mostlyclean-compile:
  	-rm -f *.$(OBJEXT)
! 	-rm -f tests/test.$(OBJEXT)
  
  distclean-compile:
  	-rm -f *.tab.c
  
! .c.o:
! 	$(COMPILE) -c -o $@ $<
! 
! .c.obj:
! 	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
  
  .c.lo:
! 	$(LTCOMPILE) -c -o $@ $<
  
! .s.o:
! 	$(CCASCOMPILE) -c $<
! 
! .s.obj:
! 	$(CCASCOMPILE) -c `$(CYGPATH_W) '$<'`
  
  mostlyclean-libtool:
  	-rm -f *.lo
*************** clean-libtool:
*** 348,374 ****
  	-rm -rf .libs _libs
  
  distclean-libtool:
  
! maintainer-clean-libtool:
! 
! libgcjgc.la: $(libgcjgc_la_OBJECTS) $(libgcjgc_la_DEPENDENCIES)
! 	$(LINK)  $(libgcjgc_la_LDFLAGS) $(libgcjgc_la_OBJECTS) $(libgcjgc_la_LIBADD) $(LIBS)
! 
! libgcjgc_convenience.la: $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_DEPENDENCIES)
! 	$(LINK)  $(libgcjgc_convenience_la_LDFLAGS) $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_LIBADD) $(LIBS)
! 
! mostlyclean-checkPROGRAMS:
! 
! clean-checkPROGRAMS:
! 	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
! 
! distclean-checkPROGRAMS:
! 
! maintainer-clean-checkPROGRAMS:
  
! gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES)
! 	@rm -f gctest$(EXEEXT)
! 	$(LINK) $(gctest_LDFLAGS) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS)
  
  # This directory's subdirectories are mostly independent; you can cd
  # into them and run `make' without going through this Makefile.
--- 427,451 ----
  	-rm -rf .libs _libs
  
  distclean-libtool:
+ 	-rm -f libtool
  
! # GNU Make needs to see an explicit $(MAKE) variable in the command it
! # runs to enable its job server during parallel builds.  Hence the
! # comments below.
! all-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE)
! install-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE)
  
! mostlyclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE)
! clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE)
! distclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE)
! maintainer-clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean # $(MAKE)
! uninstall-info-am:
  
  # This directory's subdirectories are mostly independent; you can cd
  # into them and run `make' without going through this Makefile.
*************** gctest$(EXEEXT): $(gctest_OBJECTS) $(gct
*** 376,388 ****
  # (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.
! 
! @SET_MAKE@
! 
! all-recursive install-data-recursive install-exec-recursive \
! installdirs-recursive install-recursive uninstall-recursive install-info-recursive \
! check-recursive installcheck-recursive info-recursive dvi-recursive:
! 	@set fnord $(MAKEFLAGS); amf=$$2; \
  	dot_seen=no; \
  	target=`echo $@ | sed s/-recursive//`; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
--- 453,460 ----
  # (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 \
*************** check-recursive installcheck-recursive i
*** 402,414 ****
  
  mostlyclean-recursive clean-recursive distclean-recursive \
  maintainer-clean-recursive:
! 	@set fnord $(MAKEFLAGS); amf=$$2; \
  	dot_seen=no; \
! 	rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
! 	  rev="$$subdir $$rev"; \
! 	  test "$$subdir" != "." || dot_seen=yes; \
  	done; \
! 	test "$$dot_seen" = "no" && rev=". $$rev"; \
  	target=`echo $@ | sed s/-recursive//`; \
  	for subdir in $$rev; do \
  	  echo "Making $$target in $$subdir"; \
--- 474,491 ----
  
  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"; \
*************** tags-recursive:
*** 424,672 ****
  	list='$(SUBDIRS)'; for subdir in $$list; do \
  	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
  	done
  
! tags: TAGS
! 
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
  
! TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
!    if test "$$subdir" = .; then :; else \
! 	    test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
!    fi; \
  	done; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(PACKAGE)-$(VERSION)
! top_distdir = $(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
! 	-rm -rf $(distdir)
! 	GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
! 	mkdir $(distdir)/=build
! 	mkdir $(distdir)/=inst
! 	dc_install_base=`cd $(distdir)/=inst && pwd`; \
! 	cd $(distdir)/=build \
! 	  && ../configure --srcdir=.. --prefix=$$dc_install_base \
! 	  && $(MAKE) $(AM_MAKEFLAGS) \
! 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
! 	  && $(MAKE) $(AM_MAKEFLAGS) check \
! 	  && $(MAKE) $(AM_MAKEFLAGS) install \
! 	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
! 	  && $(MAKE) $(AM_MAKEFLAGS) dist
! 	-rm -rf $(distdir)
! 	@banner="$(distdir).tar.gz is ready for distribution"; \
! 	dashes=`echo "$$banner" | sed s/./=/g`; \
! 	echo "$$dashes"; \
! 	echo "$$banner"; \
! 	echo "$$dashes"
! dist: distdir
! 	-chmod -R a+r $(distdir)
! 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
! 	-rm -rf $(distdir)
! dist-all: distdir
! 	-chmod -R a+r $(distdir)
! 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
! 	-rm -rf $(distdir)
! distdir: $(DISTFILES)
! 	-rm -rf $(distdir)
! 	mkdir $(distdir)
! 	-chmod 777 $(distdir)
! 	@for file in $(DISTFILES); do \
! 	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
! 	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
  	  else \
! 	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
  	  fi; \
! 	done
! 	for subdir in $(SUBDIRS); do \
! 	  if test "$$subdir" = .; then :; else \
! 	    test -d $(distdir)/$$subdir \
! 	    || mkdir $(distdir)/$$subdir \
! 	    || exit 1; \
! 	    chmod 777 $(distdir)/$$subdir; \
! 	    (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
! 	      || exit 1; \
  	  fi; \
! 	done
! check-TESTS: $(TESTS)
! 	@failed=0; all=0; \
! 	srcdir=$(srcdir); export srcdir; \
! 	for tst in $(TESTS); do \
! 	  if test -f $$tst; then dir=.; \
! 	  else dir="$(srcdir)"; fi; \
! 	  if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \
! 	    all=`expr $$all + 1`; \
! 	    echo "PASS: $$tst"; \
! 	  elif test $$? -ne 77; then \
! 	    all=`expr $$all + 1`; \
! 	    failed=`expr $$failed + 1`; \
! 	    echo "FAIL: $$tst"; \
  	  fi; \
! 	done; \
! 	if test "$$failed" -eq 0; then \
! 	  banner="All $$all tests passed"; \
! 	else \
! 	  banner="$$failed of $$all tests failed"; \
! 	fi; \
! 	dashes=`echo "$$banner" | sed s/./=/g`; \
! 	echo "$$dashes"; \
! 	echo "$$banner"; \
! 	echo "$$dashes"; \
! 	test "$$failed" -eq 0
! info-am:
! info: info-recursive
! dvi-am:
! dvi: dvi-recursive
  check-am: $(check_PROGRAMS)
  	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
  check: check-recursive
! installcheck-am:
! installcheck: installcheck-recursive
! install-info-am: 
! install-info: install-info-recursive
! install-exec-am:
  install-exec: install-exec-recursive
- 
- install-data-am:
  install-data: install-data-recursive
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-recursive
- uninstall-am:
- uninstall: uninstall-recursive
- all-am: Makefile $(LTLIBRARIES)
- all-redirect: all-recursive
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs: installdirs-recursive
- installdirs-am:
- 
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-noinstLTLIBRARIES mostlyclean-compile \
! 		mostlyclean-libtool mostlyclean-checkPROGRAMS \
! 		mostlyclean-tags mostlyclean-generic
  
! mostlyclean: mostlyclean-recursive
  
! clean-am:  clean-noinstLTLIBRARIES clean-compile clean-libtool \
! 		clean-checkPROGRAMS clean-tags clean-generic \
! 		mostlyclean-am
  
! clean: clean-recursive
  
! distclean-am:  distclean-noinstLTLIBRARIES distclean-compile \
! 		distclean-libtool distclean-checkPROGRAMS \
! 		distclean-tags distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-recursive
! 	-rm -f config.status
  
! maintainer-clean-am:  maintainer-clean-noinstLTLIBRARIES \
! 		maintainer-clean-compile maintainer-clean-libtool \
! 		maintainer-clean-checkPROGRAMS maintainer-clean-tags \
! 		maintainer-clean-generic distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
! maintainer-clean: maintainer-clean-recursive
! 	-rm -f config.status
  
! .PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \
! clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \
! mostlyclean-compile distclean-compile clean-compile \
! maintainer-clean-compile mostlyclean-libtool distclean-libtool \
! clean-libtool maintainer-clean-libtool mostlyclean-checkPROGRAMS \
! distclean-checkPROGRAMS clean-checkPROGRAMS \
! maintainer-clean-checkPROGRAMS install-data-recursive \
! uninstall-data-recursive install-exec-recursive \
! uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
! all-recursive check-recursive installcheck-recursive info-recursive \
! dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
! maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
! distclean-tags clean-tags maintainer-clean-tags distdir check-TESTS \
! info-am info dvi-am dvi check check-am installcheck-am installcheck \
! install-info-am install-info install-exec-am install-exec \
! install-data-am install-data install-am install uninstall-am uninstall \
! all-redirect all-am all installdirs-am installdirs mostlyclean-generic \
! distclean-generic clean-generic maintainer-clean-generic clean \
! mostlyclean distclean maintainer-clean
  
! # The following hack produces a warning from automake, but we need it in order 
! # to build a file from a subdirectory. FIXME.
! test.o:	tests/test.c
! 	$(COMPILE) -c $(srcdir)/tests/test.c
! $(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \
! include/private/gc_hdrs.h include/gc.h include/gc_gcj.h \
! include/gc_pthread_redirects.h include/gc_config_macros.h \
! include/gc_mark.h @addincludes@
  
! .s.lo:
! 	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
  
! # Multilib support.
! .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
! 	maintainer-clean-multi
  
! all-am: all-multi
! install-am: install-multi
! mostlyclean-am: mostlyclean-multi
! clean-am: clean-multi
! distclean-am: distclean-multi
! maintainer-clean-am: maintainer-clean-multi
  
! all-multi:
! 	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
! install-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
! mostlyclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean
! clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean
! distclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
! maintainer-clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
  
  # 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:
--- 501,751 ----
  	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
  
! check-TESTS: $(TESTS)
! 	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
! 	srcdir=$(srcdir); export srcdir; \
! 	list='$(TESTS)'; \
! 	if test -n "$$list"; then \
! 	  for tst in $$list; do \
! 	    if test -f ./$$tst; then dir=./; \
! 	    elif test -f $$tst; then dir=; \
! 	    else dir="$(srcdir)/"; fi; \
! 	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
! 	      all=`expr $$all + 1`; \
! 	      case " $(XFAIL_TESTS) " in \
! 	      *" $$tst "*) \
! 		xpass=`expr $$xpass + 1`; \
! 		failed=`expr $$failed + 1`; \
! 		echo "XPASS: $$tst"; \
! 	      ;; \
! 	      *) \
! 		echo "PASS: $$tst"; \
! 	      ;; \
! 	      esac; \
! 	    elif test $$? -ne 77; then \
! 	      all=`expr $$all + 1`; \
! 	      case " $(XFAIL_TESTS) " in \
! 	      *" $$tst "*) \
! 		xfail=`expr $$xfail + 1`; \
! 		echo "XFAIL: $$tst"; \
! 	      ;; \
! 	      *) \
! 		failed=`expr $$failed + 1`; \
! 		echo "FAIL: $$tst"; \
! 	      ;; \
! 	      esac; \
! 	    else \
! 	      skip=`expr $$skip + 1`; \
! 	      echo "SKIP: $$tst"; \
! 	    fi; \
! 	  done; \
! 	  if test "$$failed" -eq 0; then \
! 	    if test "$$xfail" -eq 0; then \
! 	      banner="All $$all tests passed"; \
! 	    else \
! 	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
! 	    fi; \
  	  else \
! 	    if test "$$xpass" -eq 0; then \
! 	      banner="$$failed of $$all tests failed"; \
! 	    else \
! 	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
! 	    fi; \
  	  fi; \
! 	  dashes="$$banner"; \
! 	  skipped=""; \
! 	  if test "$$skip" -ne 0; then \
! 	    skipped="($$skip tests were not run)"; \
! 	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
! 	      dashes="$$skipped"; \
  	  fi; \
! 	  report=""; \
! 	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
! 	    report="Please report to $(PACKAGE_BUGREPORT)"; \
! 	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
! 	      dashes="$$report"; \
  	  fi; \
! 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
! 	  echo "$$dashes"; \
! 	  echo "$$banner"; \
! 	  test -z "$$skipped" || echo "$$skipped"; \
! 	  test -z "$$report" || echo "$$report"; \
! 	  echo "$$dashes"; \
! 	  test "$$failed" -eq 0; \
! 	else :; fi
  check-am: $(check_PROGRAMS)
  	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
  check: check-recursive
! all-am: Makefile $(LTLIBRARIES) all-multi
! 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)
! 	-rm -f tests/$(am__dirstamp)
  
  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-multi clean-recursive
  
! clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
! 	clean-noinstLTLIBRARIES mostlyclean-am
  
! distclean: distclean-multi distclean-recursive
! 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
! 	-rm -f Makefile
! distclean-am: clean-am distclean-compile 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-multi
  
! install-info: install-info-recursive
  
! install-man:
  
! installcheck-am:
  
! maintainer-clean: maintainer-clean-multi 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-multi mostlyclean-recursive
! 
! mostlyclean-am: mostlyclean-compile mostlyclean-generic \
! 	mostlyclean-libtool
! 
! pdf: pdf-recursive
! 
! pdf-am:
! 
! ps: ps-recursive
  
+ ps-am:
+ 
+ uninstall-am:
+ 
+ uninstall-info: uninstall-info-recursive
+ 
+ .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-multi \
+ 	am--refresh check check-TESTS check-am clean \
+ 	clean-checkPROGRAMS clean-generic clean-libtool clean-multi \
+ 	clean-noinstLTLIBRARIES clean-recursive ctags ctags-recursive \
+ 	distclean distclean-compile distclean-generic \
+ 	distclean-libtool distclean-multi distclean-recursive \
+ 	distclean-tags 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-multi install-strip installcheck installcheck-am \
+ 	installdirs installdirs-am maintainer-clean \
+ 	maintainer-clean-generic maintainer-clean-multi \
+ 	maintainer-clean-recursive mostlyclean mostlyclean-compile \
+ 	mostlyclean-generic mostlyclean-libtool mostlyclean-multi \
+ 	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ 	uninstall uninstall-am uninstall-info-am
+ 
+ 
+ .s.lo:
+ 	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
+ .S.lo:
+ 	$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
  # 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-3.4.3/boehm-gc/NT_MAKEFILE gcc-4.0.0/boehm-gc/NT_MAKEFILE
*** gcc-3.4.3/boehm-gc/NT_MAKEFILE	Fri Aug 17 18:30:45 2001
--- gcc-4.0.0/boehm-gc/NT_MAKEFILE	Fri Aug 13 23:05:29 2004
***************
*** 2,8 ****
  # DLLs are included in the root set under NT, but not under win32S.
  # Use "nmake nodebug=1 all" for optimized versions of library, gctest and editor.
  
! CPU= i386
  !include <ntwin32.mak>
  
  OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gc_cpp.obj mallocx.obj
--- 2,9 ----
  # DLLs are included in the root set under NT, but not under win32S.
  # Use "nmake nodebug=1 all" for optimized versions of library, gctest and editor.
  
! MY_CPU=X86
! CPU=$(MY_CPU)
  !include <ntwin32.mak>
  
  OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gc_cpp.obj mallocx.obj
*************** OBJS= alloc.obj reclaim.obj allchblk.obj
*** 10,19 ****
  all: gctest.exe cord\de.exe test_cpp.exe
  
  .c.obj:
! 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL $*.c /Fo$*.obj
  
  .cpp.obj:
! 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL $*.CPP /Fo$*.obj
  
  $(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h include\private\gc_locks.h include\private\gc_pmark.h include\gc_mark.h
  
--- 11,20 ----
  all: gctest.exe cord\de.exe test_cpp.exe
  
  .c.obj:
! 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL -DGC_BUILD $*.c /Fo$*.obj
  
  .cpp.obj:
! 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL -DGC_BUILD $*.CPP /Fo$*.obj
  
  $(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h include\private\gc_locks.h include\private\gc_pmark.h include\gc_mark.h
  
*************** gctest.exe: tests\test.obj gc.lib
*** 30,36 ****
  #	mapsympe -n -o gctest.sym gctest.exe
  
  cord\de_win.rbj: cord\de_win.res
! 	cvtres -$(CPU) cord\de_win.res -o cord\de_win.rbj
  
  cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h
  
--- 31,37 ----
  #	mapsympe -n -o gctest.sym gctest.exe
  
  cord\de_win.rbj: cord\de_win.res
! 	cvtres /MACHINE:$(MY_CPU) /OUT:cord\de_win.rbj cord\de_win.res
  
  cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h
  
diff -Nrcpad gcc-3.4.3/boehm-gc/NT_STATIC_THREADS_MAKEFILE gcc-4.0.0/boehm-gc/NT_STATIC_THREADS_MAKEFILE
*** gcc-3.4.3/boehm-gc/NT_STATIC_THREADS_MAKEFILE	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/NT_STATIC_THREADS_MAKEFILE	Thu Aug 12 21:14:24 2004
***************
*** 0 ****
--- 1,60 ----
+ # Makefile for Windows NT.  Assumes Microsoft compiler.
+ # DLLs are included in the root set under NT, but not under win32S.
+ # Use "nmake nodebug=1 all" for optimized versions of library, gctest and editor.
+ 
+ MY_CPU=X86
+ CPU=$(MY_CPU)
+ !include <ntwin32.mak>
+ 
+ OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gc_cpp.obj mallocx.obj win32_threads.obj
+ 
+ all: gctest.exe cord\de.exe test_cpp.exe
+ 
+ .c.obj:
+ 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL -DGC_WIN32_THREADS $*.c /Fo$*.obj
+ 
+ .cpp.obj:
+ 	$(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL $*.CPP -DGC_WIN32_THREADS /Fo$*.obj
+ 
+ $(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h include\private\gc_locks.h include\private\gc_pmark.h include\gc_mark.h
+ 
+ gc.lib: $(OBJS)
+ 	lib /MACHINE:i386 /out:gc.lib $(OBJS)
+ # The original NT SDK used lib32 instead of lib
+ 
+ gctest.exe: tests\test.obj gc.lib
+ #	The following works for win32 debugging.  For win32s debugging use debugtype:coff
+ #	and add mapsympe line.
+ #  This produces a "GUI" applications that opens no windows and writes to the log file
+ #  "gc.log".  This is done to make the result runnable under win32s.
+ 	$(link) -debug:full -debugtype:cv $(guiflags) -stack:131072 -out:$*.exe tests\test.obj $(guilibs) gc.lib
+ #	mapsympe -n -o gctest.sym gctest.exe
+ 
+ cord\de_win.rbj: cord\de_win.res
+ 	cvtres /MACHINE:$(MY_CPU) /OUT:cord\de_win.rbj cord\de_win.res
+ 
+ cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h
+ 
+ cord\de_win.res: cord\de_win.rc cord\de_win.h cord\de_cmds.h
+ 	$(rc) $(rcvars) -r -fo cord\de_win.res $(cvars) cord\de_win.rc
+ 
+ # Cord/de is a real win32 gui application.
+ cord\de.exe: cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib
+ 	$(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:cord\de.exe  cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib $(guilibs)
+ 
+ gc_cpp.obj: include\gc_cpp.h include\gc.h
+ 
+ gc_cpp.cpp: gc_cpp.cc
+ 	copy gc_cpp.cc gc_cpp.cpp
+ 
+ test_cpp.cpp: tests\test_cpp.cc
+ 	copy tests\test_cpp.cc test_cpp.cpp
+ 
+ # This generates the C++ test executable.  The executable expects
+ # a single numeric argument, which is the number of iterations.
+ # The output appears in the file "gc.log".
+ test_cpp.exe: test_cpp.obj include\gc_cpp.h include\gc.h gc.lib
+ 	$(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:test_cpp.exe test_cpp.obj gc.lib $(guilibs)
+ 
+ 
+ 
diff -Nrcpad gcc-3.4.3/boehm-gc/acinclude.m4 gcc-4.0.0/boehm-gc/acinclude.m4
*** gcc-3.4.3/boehm-gc/acinclude.m4	Thu May 16 17:41:54 2002
--- gcc-4.0.0/boehm-gc/acinclude.m4	Thu Jan  1 00:00:00 1970
***************
*** 1,191 ****
- # Copyright (c) 1999-2001, 2002 by Red Hat, Inc. All rights reserved.
- # 
- # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- # 
- # Permission is hereby granted to use or copy this program
- # for any purpose,  provided the above notices are retained on all copies.
- # Permission to modify the code and to distribute modified code is granted,
- # provided the above notices are retained, and a notice that the code was
- # modified is included with the above copyright notice.
- #
- # Original author: Tom Tromey
- 
- # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
- # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
- # are probably using a cross compiler, which will not be able to fully
- # link an executable.  This should really be fixed in autoconf
- # itself.
- 
- AC_DEFUN(GC_CONFIGURE,
- [
- dnl Default to --enable-multilib
- AC_ARG_ENABLE(multilib,
- [  --enable-multilib       build many library versions (default)],
- [case "${enableval}" in
-   yes) multilib=yes ;;
-   no)  multilib=no ;;
-   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
-  esac], [multilib=yes])dnl
- 
- dnl We may get other options which we don't document:
- dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
- 
- dnl I needed to add the -n test to allow configuration in src directory - HB
- if test "[$]{srcdir}" = "."; then
-   if test "[$]{with_target_subdir}" != "." -a -n "[$]{with_target_subdir}"; then
-     gc_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
-   else
-     gc_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
-   fi
- else
-   gc_basedir="[$]{srcdir}/$1"
- fi
- AC_SUBST(gc_basedir)
- AC_CONFIG_AUX_DIR($gc_basedir/..)
- if :; then :; else
-   # This overrides the previous occurrence for automake, but not for
-   # autoconf, which is exactly what we want.
-   AC_CONFIG_AUX_DIR(..)
- fi
- 
- AC_CANONICAL_SYSTEM
- 
- # This works around an automake problem.
- mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
- AC_SUBST(mkinstalldirs)
- 
- AM_INIT_AUTOMAKE(gc, 6.1a1, no-define)
- 
- # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
- # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
- # are probably using a cross compiler, which will not be able to fully
- # link an executable.  This should really be fixed in autoconf
- # itself.
- 
- AC_DEFUN(LIB_AC_PROG_CC,
- [AC_BEFORE([$0], [AC_PROG_CPP])dnl
- dnl Fool anybody using AC_PROG_CC.
- AC_PROVIDE([AC_PROG_CC])
- AC_CHECK_PROG(CC, gcc, gcc)
- if test -z "$CC"; then
-   AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
-   test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
- fi
- 
- AC_PROG_CC_GNU
- 
- if test $ac_cv_prog_gcc = yes; then
-   GCC=yes
- dnl Check whether -g works, even if CFLAGS is set, in case the package
- dnl plays around with CFLAGS (such as to build both debugging and
- dnl normal versions of a library), tasteless as that idea is.
-   ac_test_CFLAGS="${CFLAGS+set}"
-   ac_save_CFLAGS="$CFLAGS"
-   CFLAGS=
-   AC_PROG_CC_G
-   if test "$ac_test_CFLAGS" = set; then
-     CFLAGS="$ac_save_CFLAGS"
-   elif test $ac_cv_prog_cc_g = yes; then
-     CFLAGS="-g -O2"
-   else
-     CFLAGS="-O2"
-   fi
- else
-   GCC=
-   test "${CFLAGS+set}" = set || CFLAGS="-g"
- fi
- ])
- 
- LIB_AC_PROG_CC
- 
- # Likewise for AC_PROG_CXX.
- AC_DEFUN(LIB_AC_PROG_CXX,
- [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
- dnl Fool anybody using AC_PROG_CXX.
- AC_PROVIDE([AC_PROG_CXX])
- AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
- test -z "$CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
- 
- AC_PROG_CXX_GNU
- 
- if test $ac_cv_prog_gxx = yes; then
-   GXX=yes
- dnl Check whether -g works, even if CXXFLAGS is set, in case the package
- dnl plays around with CXXFLAGS (such as to build both debugging and
- dnl normal versions of a library), tasteless as that idea is.
-   ac_test_CXXFLAGS="${CXXFLAGS+set}"
-   ac_save_CXXFLAGS="$CXXFLAGS"
-   CXXFLAGS=
-   AC_PROG_CXX_G
-   if test "$ac_test_CXXFLAGS" = set; then
-     CXXFLAGS="$ac_save_CXXFLAGS"
-   elif test $ac_cv_prog_cxx_g = yes; then
-     CXXFLAGS="-g -O2"
-   else
-     CXXFLAGS="-O2"
-   fi
- else
-   GXX=
-   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
- fi
- ])
- 
- LIB_AC_PROG_CXX
- 
- # AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD).  If we don't
- # run it explicitly here, it will be run implicitly before
- # NEWLIB_CONFIGURE, which doesn't work because that means that it will
- # be run before AC_CANONICAL_HOST.
- AC_CANONICAL_BUILD
- 
- AC_CHECK_TOOL(AS, as)
- AC_CHECK_TOOL(AR, ar)
- AC_CHECK_TOOL(RANLIB, ranlib, :)
- 
- AC_PROG_INSTALL
- 
- AM_MAINTAINER_MODE
- 
- # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
- # at least currently, we never actually build a program, so we never
- # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
- # fails, because we are probably configuring with a cross compiler
- # which can't create executables.  So we include AC_EXEEXT to keep
- # automake happy, but we don't execute it, since we don't care about
- # the result.
- if false; then
-   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
-   # to nothing, so nothing would remain between `then' and `fi' if it
-   # were not for the `:' below.
-   :
-   AC_EXEEXT
- fi
- 
- . [$]{srcdir}/configure.host
- 
- case [$]{gc_basedir} in
- /* | [A-Za-z]:[/\\]*) gc_flagbasedir=[$]{gc_basedir} ;;
- *) gc_flagbasedir='[$](top_builddir)/'[$]{gc_basedir} ;;
- esac
- 
- gc_cflags="[$]{gc_cflags} -I"'[$](top_builddir)'"/$1/targ-include -I[$]{gc_flagbasedir}/libc/include"
- case "${host}" in
-   *-*-cygwin32*)
-     gc_cflags="[$]{gc_cflags} -I[$]{gc_flagbasedir}/../winsup/include"
-     ;;
- esac
- 
- dnl gc_cflags="[$]{gc_cflags} -fno-builtin"
- 
- GC_CFLAGS=${gc_cflags}
- AC_SUBST(GC_CFLAGS)
- ]))
- 
- ))))
- 
- sinclude(../libtool.m4)
- dnl The line below arranges for aclocal not to bring a definition of
- dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
- dnl to add a definition of LIBTOOL to Makefile.in.
- ifelse(yes,no,[AC_DEFUN([AM_PROG_LIBTOOL],[AC_SUBST(LIBTOOL)])])
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/aclocal.m4 gcc-4.0.0/boehm-gc/aclocal.m4
*** gcc-3.4.3/boehm-gc/aclocal.m4	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/boehm-gc/aclocal.m4	Thu Apr 21 07:04:10 2005
***************
*** 1,262 ****
! dnl aclocal.m4 generated automatically by aclocal 1.4
  
! dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
! dnl This file is free software; the Free Software Foundation
! dnl gives unlimited permission to copy and/or distribute it,
! dnl with or without modifications, as long as this notice is preserved.
  
! dnl This program is distributed in the hope that it will be useful,
! dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
! dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
! dnl PARTICULAR PURPOSE.
  
! # Copyright (c) 1999-2001, 2002 by Red Hat, Inc. All rights reserved.
! # 
! # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
! # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
! # 
! # Permission is hereby granted to use or copy this program
! # for any purpose,  provided the above notices are retained on all copies.
! # Permission to modify the code and to distribute modified code is granted,
! # provided the above notices are retained, and a notice that the code was
! # modified is included with the above copyright notice.
  #
! # Original author: Tom Tromey
  
! # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
! # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
! # are probably using a cross compiler, which will not be able to fully
! # link an executable.  This should really be fixed in autoconf
! # itself.
  
! AC_DEFUN(GC_CONFIGURE,
! [
! dnl Default to --enable-multilib
! AC_ARG_ENABLE(multilib,
! [  --enable-multilib       build many library versions (default)],
! [case "${enableval}" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
!  esac], [multilib=yes])dnl
  
! dnl We may get other options which we don't document:
! dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
  
! dnl I needed to add the -n test to allow configuration in src directory - HB
! if test "[$]{srcdir}" = "."; then
!   if test "[$]{with_target_subdir}" != "." -a -n "[$]{with_target_subdir}"; then
!     gc_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
!   else
!     gc_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
    fi
  else
!   gc_basedir="[$]{srcdir}/$1"
  fi
! AC_SUBST(gc_basedir)
! AC_CONFIG_AUX_DIR($gc_basedir/..)
! if :; then :; else
!   # This overrides the previous occurrence for automake, but not for
!   # autoconf, which is exactly what we want.
!   AC_CONFIG_AUX_DIR(..)
  fi
  
! AC_CANONICAL_SYSTEM
  
! # This works around an automake problem.
! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
! AC_SUBST(mkinstalldirs)
  
! AM_INIT_AUTOMAKE(gc, 6.0, no-define)
  
! # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
! # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
! # are probably using a cross compiler, which will not be able to fully
! # link an executable.  This should really be fixed in autoconf
! # itself.
  
! AC_DEFUN(LIB_AC_PROG_CC,
! [AC_BEFORE([$0], [AC_PROG_CPP])dnl
! dnl Fool anybody using AC_PROG_CC.
! AC_PROVIDE([AC_PROG_CC])
! AC_CHECK_PROG(CC, gcc, gcc)
! if test -z "$CC"; then
!   AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
!   test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
! fi
  
! AC_PROG_CC_GNU
  
! if test $ac_cv_prog_gcc = yes; then
!   GCC=yes
! dnl Check whether -g works, even if CFLAGS is set, in case the package
! dnl plays around with CFLAGS (such as to build both debugging and
! dnl normal versions of a library), tasteless as that idea is.
!   ac_test_CFLAGS="${CFLAGS+set}"
!   ac_save_CFLAGS="$CFLAGS"
!   CFLAGS=
!   AC_PROG_CC_G
!   if test "$ac_test_CFLAGS" = set; then
!     CFLAGS="$ac_save_CFLAGS"
!   elif test $ac_cv_prog_cc_g = yes; then
!     CFLAGS="-g -O2"
    else
!     CFLAGS="-O2"
    fi
! else
!   GCC=
!   test "${CFLAGS+set}" = set || CFLAGS="-g"
! fi
  ])
  
! LIB_AC_PROG_CC
  
! # Likewise for AC_PROG_CXX.
! AC_DEFUN(LIB_AC_PROG_CXX,
! [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
! dnl Fool anybody using AC_PROG_CXX.
! AC_PROVIDE([AC_PROG_CXX])
! AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
! test -z "$CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
  
! AC_PROG_CXX_GNU
  
! if test $ac_cv_prog_gxx = yes; then
!   GXX=yes
! dnl Check whether -g works, even if CXXFLAGS is set, in case the package
! dnl plays around with CXXFLAGS (such as to build both debugging and
! dnl normal versions of a library), tasteless as that idea is.
!   ac_test_CXXFLAGS="${CXXFLAGS+set}"
!   ac_save_CXXFLAGS="$CXXFLAGS"
!   CXXFLAGS=
!   AC_PROG_CXX_G
!   if test "$ac_test_CXXFLAGS" = set; then
!     CXXFLAGS="$ac_save_CXXFLAGS"
!   elif test $ac_cv_prog_cxx_g = yes; then
!     CXXFLAGS="-g -O2"
    else
!     CXXFLAGS="-O2"
    fi
  else
!   GXX=
!   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
  fi
  ])
  
! LIB_AC_PROG_CXX
  
! # AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD).  If we don't
! # run it explicitly here, it will be run implicitly before
! # NEWLIB_CONFIGURE, which doesn't work because that means that it will
! # be run before AC_CANONICAL_HOST.
! AC_CANONICAL_BUILD
  
! AC_CHECK_TOOL(AS, as)
! AC_CHECK_TOOL(AR, ar)
! AC_CHECK_TOOL(RANLIB, ranlib, :)
  
! AC_PROG_INSTALL
  
! AM_MAINTAINER_MODE
  
! # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
! # at least currently, we never actually build a program, so we never
! # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
! # fails, because we are probably configuring with a cross compiler
! # which can't create executables.  So we include AC_EXEEXT to keep
! # automake happy, but we don't execute it, since we don't care about
! # the result.
! if false; then
!   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
!   # to nothing, so nothing would remain between `then' and `fi' if it
!   # were not for the `:' below.
!   :
!   AC_EXEEXT
  fi
  
! . [$]{srcdir}/configure.host
  
- case [$]{gc_basedir} in
- /* | [A-Za-z]:[/\\]*) gc_flagbasedir=[$]{gc_basedir} ;;
- *) gc_flagbasedir='[$](top_builddir)/'[$]{gc_basedir} ;;
- esac
  
! gc_cflags="[$]{gc_cflags} -I"'[$](top_builddir)'"/$1/targ-include -I[$]{gc_flagbasedir}/libc/include"
! case "${host}" in
!   *-*-cygwin32*)
!     gc_cflags="[$]{gc_cflags} -I[$]{gc_flagbasedir}/../winsup/include"
!     ;;
! esac
  
! dnl gc_cflags="[$]{gc_cflags} -fno-builtin"
  
! GC_CFLAGS=${gc_cflags}
! AC_SUBST(GC_CFLAGS)
! ]))
  
! ))))
  
! sinclude(../libtool.m4)
! dnl The line below arranges for aclocal not to bring a definition of
! dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
! dnl to add a definition of LIBTOOL to Makefile.in.
! ifelse(yes,no,[AC_DEFUN([AM_PROG_LIBTOOL],[AC_SUBST(LIBTOOL)])])
  
! # Do all the work for Automake.  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.
  
- # serial 1
  
! dnl Usage:
! dnl AM_INIT_AUTOMAKE(package,version, [no-define])
  
! AC_DEFUN(AM_INIT_AUTOMAKE,
! [AC_REQUIRE([AC_PROG_INSTALL])
! PACKAGE=[$1]
! AC_SUBST(PACKAGE)
! VERSION=[$2]
! AC_SUBST(VERSION)
! 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
! ifelse([$3],,
! AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
! AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
! AC_REQUIRE([AM_SANITY_CHECK])
! AC_REQUIRE([AC_ARG_PROGRAM])
! dnl FIXME This is truly gross.
! missing_dir=`cd $ac_aux_dir && pwd`
! AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
! AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
! AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
! AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
! AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
! AC_REQUIRE([AC_PROG_MAKE_SET])])
  
  #
  # Check to make sure that the build environment is sane.
  #
  
! AC_DEFUN(AM_SANITY_CHECK,
  [AC_MSG_CHECKING([whether build environment is sane])
  # Just in case
  sleep 1
! echo timestamp > conftestfile
  # 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 conftestfile 2> /dev/null`
!    if test "[$]*" = "X"; then
        # -L didn't work.
!       set X `ls -t $srcdir/configure conftestfile`
     fi
!    if test "[$]*" != "X $srcdir/configure conftestfile" \
!       && test "[$]*" != "X conftestfile $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
--- 1,1005 ----
! # 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
  ])
  
! # serial 2
  
! # AM_PROG_CC_C_O
! # --------------
! # Like AC_PROG_CC_C_O, but changed for automake.
  
! # Copyright (C) 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.
! 
! AC_DEFUN([AM_PROG_CC_C_O],
! [AC_REQUIRE([AC_PROG_CC_C_O])dnl
! AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
! # FIXME: we rely on the cache variable name because
! # there is no other way.
! set dummy $CC
! ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
! if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
!    # Losing compiler, so override with the script.
!    # FIXME: It is wrong to rewrite CC.
!    # But if we don't then we get into trouble of one sort or another.
!    # A longer-term fix would be to have automake use am__CC in this case,
!    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
!    CC="$am_aux_dir/compile $CC"
  fi
+ ])
  
! #  -*- 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])])
! 
! # Copyright (C) 1998, 1999, 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 4
! 
! # AM_ENABLE_MULTILIB([MAKEFILE], [REL-TO-TOP-SRCDIR])
! # ---------------------------------------------------
! # Add --enable-multilib to configure.
! AC_DEFUN([AM_ENABLE_MULTILIB],
! [# Default to --enable-multilib
! AC_ARG_ENABLE(multilib,
! [  --enable-multilib       build many library versions (default)],
! [case "$enableval" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
!  esac],
! 	      [multilib=yes])
! 
! # We may get other options which we leave undocumented:
! # --with-target-subdir, --with-multisrctop, --with-multisubdir
! # See config-ml.in if you want the gory details.
! 
! if test "$srcdir" = "."; then
!   if test "$with_target_subdir" != "."; then
!     multi_basedir="$srcdir/$with_multisrctop../$2"
!   else
!     multi_basedir="$srcdir/$with_multisrctop$2"
!   fi
! else
!   multi_basedir="$srcdir/$2"
! fi
! AC_SUBST(multi_basedir)
! 
! AC_OUTPUT_COMMANDS([
! # Only add multilib support code if we just rebuilt the top-level
! # Makefile.
! case " $CONFIG_FILES " in
!  *" ]m4_default([$1],Makefile)[ "*)
!    ac_file=]m4_default([$1],Makefile)[ . ${multi_basedir}/config-ml.in
!    ;;
! esac],
! 		   [
! srcdir="$srcdir"
! host="$host"
! target="$target"
! with_multisubdir="$with_multisubdir"
! with_multisrctop="$with_multisrctop"
! with_target_subdir="$with_target_subdir"
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! multi_basedir="$multi_basedir"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! CC="$CC"])])dnl
! 
! # 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])])
  
  #
  # 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
*************** if (
*** 266,272 ****
  alias in your environment])
     fi
  
!    test "[$]2" = conftestfile
     )
  then
     # Ok.
--- 1009,1015 ----
  alias in your environment])
     fi
  
!    test "$[2]" = conftest.file
     )
  then
     # Ok.
*************** else
*** 275,329 ****
     AC_MSG_ERROR([newly created file is older than distributed files!
  Check your system clock])
  fi
- rm -f conftest*
  AC_MSG_RESULT(yes)])
  
! dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
! dnl The program must properly implement --version.
! AC_DEFUN(AM_MISSING_PROG,
! [AC_MSG_CHECKING(for working $2)
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if ($2 --version) < /dev/null > /dev/null 2>&1; then
!    $1=$2
!    AC_MSG_RESULT(found)
! else
!    $1="$3/missing $2"
!    AC_MSG_RESULT(missing)
  fi
! AC_SUBST($1)])
  
! # Add --enable-maintainer-mode option to configure.
! # From Jim Meyering
  
  # serial 1
  
- 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
- ]
- )
  
! # Define a conditional.
  
! AC_DEFUN(AM_CONDITIONAL,
! [AC_SUBST($1_TRUE)
! AC_SUBST($1_FALSE)
! if $2; then
!   $1_TRUE=
!   $1_FALSE='#'
! else
!   $1_TRUE='#'
!   $1_FALSE=
! fi])
  
--- 1018,1172 ----
     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([../config/acx.m4])
+ m4_include([../config/no-executables.m4])
+ m4_include([../libtool.m4])
diff -Nrcpad gcc-3.4.3/boehm-gc/aix_irix_threads.c gcc-4.0.0/boehm-gc/aix_irix_threads.c
*** gcc-3.4.3/boehm-gc/aix_irix_threads.c	Mon Jul 28 03:46:08 2003
--- gcc-4.0.0/boehm-gc/aix_irix_threads.c	Mon Aug 23 21:40:17 2004
***************
*** 26,34 ****
   * as a base instead.
   */
  
  # if defined(GC_IRIX_THREADS) || defined(GC_AIX_THREADS)
  
- # include "private/gc_priv.h"
  # include <pthread.h>
  # include <assert.h>
  # include <semaphore.h>
--- 26,35 ----
   * as a base instead.
   */
  
+ # include "private/gc_priv.h"
+ 
  # if defined(GC_IRIX_THREADS) || defined(GC_AIX_THREADS)
  
  # include <pthread.h>
  # include <assert.h>
  # include <semaphore.h>
*************** void GC_thr_init()
*** 422,433 ****
      struct sigaction act;
  
      if (GC_thr_initialized) return;
- #if 0
-     /* unfortunately, GC_init_inner calls us without the lock, so
-      * this assertion is not always true. */
-     /* Why doesn't GC_init_inner hold the lock? - HB		*/
      GC_ASSERT(I_HOLD_LOCK());
- #endif
      GC_thr_initialized = TRUE;
  #ifndef GC_AIX_THREADS
      (void) sigaction(SIG_SUSPEND, 0, &act);
--- 423,429 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/allchblk.c gcc-4.0.0/boehm-gc/allchblk.c
*** gcc-3.4.3/boehm-gc/allchblk.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/allchblk.c	Wed Feb  9 21:33:01 2005
*************** void GC_print_hblkfreelist()
*** 111,117 ****
      for (i = 0; i <= N_HBLK_FLS; ++i) {
        h = GC_hblkfreelist[i];
  #     ifdef USE_MUNMAP
!         if (0 != h) GC_printf1("Free list %ld (Total size %ld):\n",
  		               (unsigned long)i);
  #     else
          if (0 != h) GC_printf2("Free list %ld (Total size %ld):\n",
--- 111,117 ----
      for (i = 0; i <= N_HBLK_FLS; ++i) {
        h = GC_hblkfreelist[i];
  #     ifdef USE_MUNMAP
!         if (0 != h) GC_printf1("Free list %ld:\n",
  		               (unsigned long)i);
  #     else
          if (0 != h) GC_printf2("Free list %ld (Total size %ld):\n",
*************** void GC_print_hblkfreelist()
*** 133,142 ****
          h = hhdr -> hb_next;
        }
      }
!     if (total_free != GC_large_free_bytes) {
  	GC_printf1("GC_large_free_bytes = %lu (INCONSISTENT!!)\n",
  		   (unsigned long) GC_large_free_bytes);
!     }
      GC_printf1("Total of %lu bytes on free list\n", (unsigned long)total_free);
  }
  
--- 133,144 ----
          h = hhdr -> hb_next;
        }
      }
! #   ifndef USE_MUNMAP
!       if (total_free != GC_large_free_bytes) {
  	GC_printf1("GC_large_free_bytes = %lu (INCONSISTENT!!)\n",
  		   (unsigned long) GC_large_free_bytes);
!       }
! #   endif
      GC_printf1("Total of %lu bytes on free list\n", (unsigned long)total_free);
  }
  
*************** void GC_dump_regions()
*** 181,187 ****
  	    hhdr = HDR(p);
  	    GC_printf1("\t0x%lx ", (unsigned long)p);
  	    if (IS_FORWARDING_ADDR_OR_NIL(hhdr)) {
! 		GC_printf1("Missing header!!\n", hhdr);
  		p += HBLKSIZE;
  		continue;
  	    }
--- 183,189 ----
  	    hhdr = HDR(p);
  	    GC_printf1("\t0x%lx ", (unsigned long)p);
  	    if (IS_FORWARDING_ADDR_OR_NIL(hhdr)) {
! 		GC_printf1("Missing header!!(%ld)\n", hhdr);
  		p += HBLKSIZE;
  		continue;
  	    }
*************** void GC_unmap_old(void)
*** 375,383 ****
  	if (!IS_MAPPED(hhdr)) continue;
  	threshold = (unsigned short)(GC_gc_no - UNMAP_THRESHOLD);
  	last_rec = hhdr -> hb_last_reclaimed;
! 	if (last_rec > GC_gc_no
! 	    || last_rec < threshold && threshold < GC_gc_no
! 				       /* not recently wrapped */) {
            sz = hhdr -> hb_sz;
  	  GC_unmap((ptr_t)h, sz);
  	  hhdr -> hb_flags |= WAS_UNMAPPED;
--- 377,384 ----
  	if (!IS_MAPPED(hhdr)) continue;
  	threshold = (unsigned short)(GC_gc_no - UNMAP_THRESHOLD);
  	last_rec = hhdr -> hb_last_reclaimed;
! 	if ((last_rec > GC_gc_no || last_rec < threshold)
! 	    && threshold < GC_gc_no /* not recently wrapped */) {
            sz = hhdr -> hb_sz;
  	  GC_unmap((ptr_t)h, sz);
  	  hhdr -> hb_flags |= WAS_UNMAPPED;
*************** void GC_merge_unmapped(void)
*** 422,427 ****
--- 423,429 ----
  	      } else {
  		GC_remap((ptr_t)h, size);
  		hhdr -> hb_flags &= ~WAS_UNMAPPED;
+ 		hhdr -> hb_last_reclaimed = nexthdr -> hb_last_reclaimed;
  	      }
  	    } else {
  	      /* Unmap any gap in the middle */
*************** int index;
*** 468,474 ****
      if (total_size == bytes) return h;
      rest = (struct hblk *)((word)h + bytes);
      rest_hdr = GC_install_header(rest);
!     if (0 == rest_hdr) return(0);
      rest_hdr -> hb_sz = total_size - bytes;
      rest_hdr -> hb_flags = 0;
  #   ifdef GC_ASSERTIONS
--- 470,480 ----
      if (total_size == bytes) return h;
      rest = (struct hblk *)((word)h + bytes);
      rest_hdr = GC_install_header(rest);
!     if (0 == rest_hdr) {
! 	/* This may be very bad news ... */
! 	WARN("Header allocation failed: Dropping block.\n", 0);
! 	return(0);
!     }
      rest_hdr -> hb_sz = total_size - bytes;
      rest_hdr -> hb_flags = 0;
  #   ifdef GC_ASSERTIONS
*************** int n;
*** 584,591 ****
  	    GET_HDR(hbp, hhdr);
  	    size_avail = hhdr->hb_sz;
  	    if (size_avail < size_needed) continue;
! 	    if (!GC_use_entire_heap
! 		&& size_avail != size_needed
  		&& USED_HEAP_SIZE >= GC_requested_heapsize
  		&& !TRUE_INCREMENTAL && GC_should_collect()) {
  #		ifdef USE_MUNMAP
--- 590,598 ----
  	    GET_HDR(hbp, hhdr);
  	    size_avail = hhdr->hb_sz;
  	    if (size_avail < size_needed) continue;
! 	    if (size_avail != size_needed
! 		&& !GC_use_entire_heap
! 		&& !GC_dont_gc
  		&& USED_HEAP_SIZE >= GC_requested_heapsize
  		&& !TRUE_INCREMENTAL && GC_should_collect()) {
  #		ifdef USE_MUNMAP
*************** int n;
*** 602,608 ****
  		    /* If we are deallocating lots of memory from	*/
  		    /* finalizers, fail and collect sooner rather	*/
  		    /* than later.					*/
! 		    if (GC_finalizer_mem_freed > (GC_heapsize >> 4))  {
  		      continue;
  		    }
  #		endif /* !USE_MUNMAP */
--- 609,616 ----
  		    /* If we are deallocating lots of memory from	*/
  		    /* finalizers, fail and collect sooner rather	*/
  		    /* than later.					*/
! 		    if (WORDS_TO_BYTES(GC_finalizer_mem_freed)
! 			> (GC_heapsize >> 4))  {
  		      continue;
  		    }
  #		endif /* !USE_MUNMAP */
*************** int n;
*** 692,698 ****
  	              struct hblk * h;
  		      struct hblk * prev = hhdr -> hb_prev;
  	              
! 		      GC_words_wasted += total_size;
  		      GC_large_free_bytes -= total_size;
  		      GC_remove_from_fl(hhdr, n);
  	              for (h = hbp; h < limit; h++) {
--- 700,706 ----
  	              struct hblk * h;
  		      struct hblk * prev = hhdr -> hb_prev;
  	              
! 		      GC_words_wasted += BYTES_TO_WORDS(total_size);
  		      GC_large_free_bytes -= total_size;
  		      GC_remove_from_fl(hhdr, n);
  	              for (h = hbp; h < limit; h++) {
*************** signed_word size;
*** 784,789 ****
--- 792,800 ----
      size = HBLKSIZE * OBJ_SZ_TO_BLOCKS(size);
      GC_remove_counts(hbp, (word)size);
      hhdr->hb_sz = size;
+ #   ifdef USE_MUNMAP
+       hhdr -> hb_last_reclaimed = GC_gc_no;
+ #   endif
      
      /* Check for duplicate deallocation in the easy case */
        if (HBLK_IS_FREE(hhdr)) {
*************** signed_word size;
*** 809,819 ****
--- 820,836 ----
  	if (IS_MAPPED(prevhdr)) {
  	  GC_remove_from_fl(prevhdr, FL_UNKNOWN);
  	  prevhdr -> hb_sz += hhdr -> hb_sz;
+ #	  ifdef USE_MUNMAP
+ 	    prevhdr -> hb_last_reclaimed = GC_gc_no;
+ #	  endif
  	  GC_remove_header(hbp);
  	  hbp = prev;
  	  hhdr = prevhdr;
  	}
        }
+     /* FIXME: It is not clear we really always want to do these merges	*/
+     /* with -DUSE_MUNMAP, since it updates ages and hence prevents	*/
+     /* unmapping. 							*/
  
      GC_large_free_bytes += size;
      GC_add_to_fl(hbp, hhdr);    
diff -Nrcpad gcc-3.4.3/boehm-gc/alloc.c gcc-4.0.0/boehm-gc/alloc.c
*** gcc-3.4.3/boehm-gc/alloc.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/alloc.c	Sat Aug 28 00:41:39 2004
*************** word GC_free_space_divisor = 3;
*** 104,111 ****
  extern GC_bool GC_collection_in_progress();
  		/* Collection is in progress, or was abandoned.	*/
  
- extern GC_bool GC_print_back_height;
- 
  int GC_never_stop_func GC_PROTO((void)) { return(0); }
  
  unsigned long GC_time_limit = TIME_LIMIT;
--- 104,109 ----
*************** int GC_n_attempts = 0;		/* Number of att
*** 126,132 ****
      unsigned long time_diff;
      
      if ((count++ & 3) != 0) return(0);
- #ifndef NO_CLOCK
      GET_TIME(current_time);
      time_diff = MS_TIME_DIFF(current_time,GC_start_time);
      if (time_diff >= GC_time_limit) {
--- 124,129 ----
*************** int GC_n_attempts = 0;		/* Number of att
*** 134,145 ****
  	  if (GC_print_stats) {
  	    GC_printf0("Abandoning stopped marking after ");
  	    GC_printf1("%lu msecs", (unsigned long)time_diff);
! 	    GC_printf1("(attempt %d)\n", (unsigned long) GC_n_attempts);
  	  }
  #	endif
      	return(1);
      }
- #endif
      return(0);
    }
  #endif /* !SMALL_CONFIG */
--- 131,141 ----
  	  if (GC_print_stats) {
  	    GC_printf0("Abandoning stopped marking after ");
  	    GC_printf1("%lu msecs", (unsigned long)time_diff);
! 	    GC_printf1("(attempt %ld)\n", (unsigned long) GC_n_attempts);
  	  }
  #	endif
      	return(1);
      }
      return(0);
    }
  #endif /* !SMALL_CONFIG */
*************** void GC_clear_a_few_frames()
*** 230,239 ****
      for (i = 0; i < NWORDS; i++) frames[i] = 0;
  }
  
  /* Have we allocated enough to amortize a collection? */
  GC_bool GC_should_collect()
  {
!     return(GC_adj_words_allocd() >= min_words_allocd());
  }
  
  
--- 226,240 ----
      for (i = 0; i < NWORDS; i++) frames[i] = 0;
  }
  
+ /* Heap size at which we need a collection to avoid expanding past	*/
+ /* limits used by blacklisting.						*/
+ static word GC_collect_at_heapsize = (word)(-1);
+ 
  /* Have we allocated enough to amortize a collection? */
  GC_bool GC_should_collect()
  {
!     return(GC_adj_words_allocd() >= min_words_allocd()
! 	   || GC_heapsize >= GC_collect_at_heapsize);
  }
  
  
*************** word n;
*** 926,950 ****
  #	endif
        }
  #   endif
!     expansion_slop = 8 * WORDS_TO_BYTES(min_words_allocd());
!     if (5 * HBLKSIZE * MAXHINCR > expansion_slop) {
!         expansion_slop = 5 * HBLKSIZE * MAXHINCR;
!     }
      if (GC_last_heap_addr == 0 && !((word)space & SIGNB)
          || GC_last_heap_addr != 0 && GC_last_heap_addr < (ptr_t)space) {
          /* Assume the heap is growing up */
          GC_greatest_plausible_heap_addr =
!             GC_max(GC_greatest_plausible_heap_addr,
!                    (ptr_t)space + bytes + expansion_slop);
      } else {
          /* Heap is growing down */
          GC_least_plausible_heap_addr =
!             GC_min(GC_least_plausible_heap_addr,
!                    (ptr_t)space - expansion_slop);
      }
      GC_prev_heap_addr = GC_last_heap_addr;
      GC_last_heap_addr = (ptr_t)space;
      GC_add_to_heap(space, bytes);
      return(TRUE);
  }
  
--- 927,963 ----
  #	endif
        }
  #   endif
!     expansion_slop = WORDS_TO_BYTES(min_words_allocd()) + 4*MAXHINCR*HBLKSIZE;
      if (GC_last_heap_addr == 0 && !((word)space & SIGNB)
          || GC_last_heap_addr != 0 && GC_last_heap_addr < (ptr_t)space) {
          /* Assume the heap is growing up */
          GC_greatest_plausible_heap_addr =
!             (GC_PTR)GC_max((ptr_t)GC_greatest_plausible_heap_addr,
!                            (ptr_t)space + bytes + expansion_slop);
      } else {
          /* Heap is growing down */
          GC_least_plausible_heap_addr =
!             (GC_PTR)GC_min((ptr_t)GC_least_plausible_heap_addr,
!                            (ptr_t)space - expansion_slop);
      }
+ #   if defined(LARGE_CONFIG)
+       if (((ptr_t)GC_greatest_plausible_heap_addr <= (ptr_t)space + bytes
+            || (ptr_t)GC_least_plausible_heap_addr >= (ptr_t)space)
+ 	  && GC_heapsize > 0) {
+ 	/* GC_add_to_heap will fix this, but ... */
+ 	WARN("Too close to address space limit: blacklisting ineffective\n", 0);
+       }
+ #   endif
      GC_prev_heap_addr = GC_last_heap_addr;
      GC_last_heap_addr = (ptr_t)space;
      GC_add_to_heap(space, bytes);
+     /* Force GC before we are likely to allocate past expansion_slop */
+       GC_collect_at_heapsize =
+ 	  GC_heapsize + expansion_slop - 2*MAXHINCR*HBLKSIZE;
+ #     if defined(LARGE_CONFIG)
+         if (GC_collect_at_heapsize < GC_heapsize /* wrapped */)
+ 	  GC_collect_at_heapsize = (word)(-1);
+ #     endif
      return(TRUE);
  }
  
diff -Nrcpad gcc-3.4.3/boehm-gc/backgraph.c gcc-4.0.0/boehm-gc/backgraph.c
*** gcc-3.4.3/boehm-gc/backgraph.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/backgraph.c	Sat Aug 28 00:41:40 2004
***************
*** 24,29 ****
--- 24,31 ----
   * a growing space leak.
   */
  
+ #include "gc.h"	/* For configuration information. */
+ 
  #ifdef MAKE_BACK_GRAPH
  
  #define MAX_IN	10	/* Maximum in-degree we handle directly */
*************** static back_edges * new_back_edges(void)
*** 85,91 ****
  {
    if (0 == back_edge_space) {
      back_edge_space = (back_edges *)
! 	    		sbrk(MAX_BACK_EDGE_STRUCTS*sizeof(back_edges));
    }
    if (0 != avail_back_edges) {
      back_edges * result = avail_back_edges;
--- 87,93 ----
  {
    if (0 == back_edge_space) {
      back_edge_space = (back_edges *)
! 	    		GET_MEM(MAX_BACK_EDGE_STRUCTS*sizeof(back_edges));
    }
    if (0 != avail_back_edges) {
      back_edges * result = avail_back_edges;
*************** static void deallocate_back_edges(back_e
*** 113,129 ****
  /* Table of objects that are currently on the depth-first search	*/
  /* stack.  Only objects with in-degree one are in this table.		*/
  /* Other objects are identified using HEIGHT_IN_PROGRESS.		*/
! /* This data structure NEEDS IMPROVEMENT.				*/
! #define MAX_IN_PROGRESS 10000
  static ptr_t * in_progress_space = 0;
! static int n_in_progress = 0;
  
  static void push_in_progress(ptr_t p)
  {
    if (in_progress_space == 0)
!       in_progress_space = sbrk(MAX_IN_PROGRESS * sizeof(ptr_t));
!   if (n_in_progress == MAX_IN_PROGRESS)
!       ABORT("Exceeded MAX_IN_PROGRESS");
    in_progress_space[n_in_progress++] = p;
  }
  
--- 115,145 ----
  /* Table of objects that are currently on the depth-first search	*/
  /* stack.  Only objects with in-degree one are in this table.		*/
  /* Other objects are identified using HEIGHT_IN_PROGRESS.		*/
! /* FIXME: This data structure NEEDS IMPROVEMENT.			*/
! #define INITIAL_IN_PROGRESS 10000
  static ptr_t * in_progress_space = 0;
! static size_t in_progress_size = 0;
! static size_t n_in_progress = 0;
  
  static void push_in_progress(ptr_t p)
  {
+   if (n_in_progress >= in_progress_size) 
+     if (in_progress_size == 0) {
+       in_progress_size = INITIAL_IN_PROGRESS;
+       in_progress_space = (ptr_t *)GET_MEM(in_progress_size * sizeof(ptr_t));
+     } else {
+       ptr_t * new_in_progress_space;
+       in_progress_size *= 2;
+       new_in_progress_space = (ptr_t *)
+ 	      			GET_MEM(in_progress_size * sizeof(ptr_t));
+       BCOPY(in_progress_space, new_in_progress_space,
+ 	    n_in_progress * sizeof(ptr_t));
+       in_progress_space = new_in_progress_space;
+       /* FIXME: This just drops the old space.	*/
+     }
    if (in_progress_space == 0)
!       ABORT("MAKE_BACK_GRAPH: Out of in-progress space: "
! 	    "Huge linear data structure?");
    in_progress_space[n_in_progress++] = p;
  }
  
*************** static void add_back_edges(ptr_t p, word
*** 318,325 ****
    }
  }
  
! /* Rebuild the reprentation of the backward reachability graph.	*/
! /* Does not examine mark bits.  Can be called before GC.	*/
  void GC_build_back_graph(void)
  {
    GC_apply_to_each_object(add_back_edges);
--- 334,341 ----
    }
  }
  
! /* Rebuild the representation of the backward reachability graph.	*/
! /* Does not examine mark bits.  Can be called before GC.		*/
  void GC_build_back_graph(void)
  {
    GC_apply_to_each_object(add_back_edges);
*************** static void update_max_height(ptr_t p, w
*** 424,438 ****
    }
  }
  
  void GC_traverse_back_graph(void)
  {
-   static word max_max_height = 0;
    GC_max_height = 0;
    GC_apply_to_each_object(update_max_height);
    GC_printf2("Maximum backwards height of reachable objects at GC %lu is %ld\n",
  	     (unsigned long) GC_gc_no, GC_max_height);
!   if (GC_max_height > max_max_height) {
!     max_max_height = GC_max_height;
      GC_printf0("The following unreachable object is last in a longest chain "
  	       "of unreachable objects:\n");
      GC_print_heap_obj(GC_deepest_obj);
--- 440,459 ----
    }
  }
  
+ word GC_max_max_height = 0;
+ 
  void GC_traverse_back_graph(void)
  {
    GC_max_height = 0;
    GC_apply_to_each_object(update_max_height);
+ }
+ 
+ void GC_print_back_graph_stats(void)
+ {
    GC_printf2("Maximum backwards height of reachable objects at GC %lu is %ld\n",
  	     (unsigned long) GC_gc_no, GC_max_height);
!   if (GC_max_height > GC_max_max_height) {
!     GC_max_max_height = GC_max_height;
      GC_printf0("The following unreachable object is last in a longest chain "
  	       "of unreachable objects:\n");
      GC_print_heap_obj(GC_deepest_obj);
diff -Nrcpad gcc-3.4.3/boehm-gc/checksums.c gcc-4.0.0/boehm-gc/checksums.c
*** gcc-3.4.3/boehm-gc/checksums.c	Fri Aug 17 18:30:45 2001
--- gcc-4.0.0/boehm-gc/checksums.c	Fri Aug 13 23:05:29 2004
***************
*** 13,26 ****
  /* Boehm, March 29, 1995 12:51 pm PST */
  # ifdef CHECKSUMS
  
! # include "gc_priv.h"
  
  /* This is debugging code intended to verify the results of dirty bit	*/
  /* computations. Works only in a single threaded environment.		*/
  /* We assume that stubborn objects are changed only when they are 	*/
  /* enabled for writing.  (Certain kinds of writing are actually		*/
  /* safe under other conditions.)					*/
! # define NSUMS 2000
  
  # define OFFSET 0x10000
  
--- 13,26 ----
  /* Boehm, March 29, 1995 12:51 pm PST */
  # ifdef CHECKSUMS
  
! # include "private/gc_priv.h"
  
  /* This is debugging code intended to verify the results of dirty bit	*/
  /* computations. Works only in a single threaded environment.		*/
  /* We assume that stubborn objects are changed only when they are 	*/
  /* enabled for writing.  (Certain kinds of writing are actually		*/
  /* safe under other conditions.)					*/
! # define NSUMS 10000
  
  # define OFFSET 0x10000
  
*************** typedef struct {
*** 29,35 ****
  	word old_sum;
  	word new_sum;
  	struct hblk * block;	/* Block to which this refers + OFFSET  */
! 				/* to hide it from colector.		*/
  } page_entry;
  
  page_entry GC_sums [NSUMS];
--- 29,35 ----
  	word old_sum;
  	word new_sum;
  	struct hblk * block;	/* Block to which this refers + OFFSET  */
! 				/* to hide it from collector.		*/
  } page_entry;
  
  page_entry GC_sums [NSUMS];
*************** int index;
*** 76,87 ****
  {
      page_entry *pe = GC_sums + index;
      register hdr * hhdr = HDR(h);
      
      if (pe -> block != 0 && pe -> block != h + OFFSET) ABORT("goofed");
      pe -> old_sum = pe -> new_sum;
      pe -> new_sum = GC_checksum(h);
  #   if !defined(MSWIN32) && !defined(MSWINCE)
!         if (pe -> new_sum != 0 && !GC_page_was_ever_dirty(h)) {
              GC_printf1("GC_page_was_ever_dirty(0x%lx) is wrong\n",
          	       (unsigned long)h);
          }
--- 76,88 ----
  {
      page_entry *pe = GC_sums + index;
      register hdr * hhdr = HDR(h);
+     struct hblk *b;
      
      if (pe -> block != 0 && pe -> block != h + OFFSET) ABORT("goofed");
      pe -> old_sum = pe -> new_sum;
      pe -> new_sum = GC_checksum(h);
  #   if !defined(MSWIN32) && !defined(MSWINCE)
!         if (pe -> new_sum != 0x80000000 && !GC_page_was_ever_dirty(h)) {
              GC_printf1("GC_page_was_ever_dirty(0x%lx) is wrong\n",
          	       (unsigned long)h);
          }
*************** int index;
*** 91,103 ****
      } else {
      	GC_n_clean++;
      }
!     if (pe -> new_valid && pe -> old_sum != pe -> new_sum) {
      	if (!GC_page_was_dirty(h) || !GC_page_was_ever_dirty(h)) {
      	    /* Set breakpoint here */GC_n_dirty_errors++;
      	}
  #	ifdef STUBBORN_ALLOC
!     	  if (!IS_FORWARDING_ADDR_OR_NIL(hhdr)
!     	    && hhdr -> hb_map != GC_invalid_map
      	    && hhdr -> hb_obj_kind == STUBBORN
      	    && !GC_page_was_changed(h)
      	    && !GC_on_free_list(h)) {
--- 92,110 ----
      } else {
      	GC_n_clean++;
      }
!     b = h;
!     while (IS_FORWARDING_ADDR_OR_NIL(hhdr) && hhdr != 0) {
! 	b -= (word)hhdr;
! 	hhdr = HDR(b);
!     }
!     if (pe -> new_valid
! 	&& hhdr != 0 && hhdr -> hb_descr != 0 /* may contain pointers */
! 	&& pe -> old_sum != pe -> new_sum) {
      	if (!GC_page_was_dirty(h) || !GC_page_was_ever_dirty(h)) {
      	    /* Set breakpoint here */GC_n_dirty_errors++;
      	}
  #	ifdef STUBBORN_ALLOC
!     	  if ( hhdr -> hb_map != GC_invalid_map
      	    && hhdr -> hb_obj_kind == STUBBORN
      	    && !GC_page_was_changed(h)
      	    && !GC_on_free_list(h)) {
*************** word dummy;
*** 120,145 ****
     register hdr * hhdr = HDR(h);
     register bytes = WORDS_TO_BYTES(hhdr -> hb_sz);
     
!    bytes += HDR_BYTES + HBLKSIZE-1;
     bytes &= ~(HBLKSIZE-1);
     GC_bytes_in_used_blocks += bytes;
  }
  
  void GC_check_blocks()
  {
!     word bytes_in_free_blocks = 0;
!     struct hblk * h = GC_hblkfreelist;
!     hdr * hhdr = HDR(h);
!     word sz;
      
      GC_bytes_in_used_blocks = 0;
      GC_apply_to_all_blocks(GC_add_block, (word)0);
-     while (h != 0) {
-         sz = hhdr -> hb_sz;
-         bytes_in_free_blocks += sz;
-         h = hhdr -> hb_next;
-         hhdr = HDR(h);
-     }
      GC_printf2("GC_bytes_in_used_blocks = %ld, bytes_in_free_blocks = %ld ",
      		GC_bytes_in_used_blocks, bytes_in_free_blocks);
      GC_printf1("GC_heapsize = %ld\n", GC_heapsize);
--- 127,143 ----
     register hdr * hhdr = HDR(h);
     register bytes = WORDS_TO_BYTES(hhdr -> hb_sz);
     
!    bytes += HBLKSIZE-1;
     bytes &= ~(HBLKSIZE-1);
     GC_bytes_in_used_blocks += bytes;
  }
  
  void GC_check_blocks()
  {
!     word bytes_in_free_blocks = GC_large_free_bytes;
      
      GC_bytes_in_used_blocks = 0;
      GC_apply_to_all_blocks(GC_add_block, (word)0);
      GC_printf2("GC_bytes_in_used_blocks = %ld, bytes_in_free_blocks = %ld ",
      		GC_bytes_in_used_blocks, bytes_in_free_blocks);
      GC_printf1("GC_heapsize = %ld\n", GC_heapsize);
diff -Nrcpad gcc-3.4.3/boehm-gc/config.guess gcc-4.0.0/boehm-gc/config.guess
*** gcc-3.4.3/boehm-gc/config.guess	Sun Feb 22 14:43:48 2004
--- gcc-4.0.0/boehm-gc/config.guess	Thu Jan  1 00:00:00 1970
***************
*** 1,1450 ****
- #! /bin/sh
- # Attempt to guess a canonical system name.
- #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
- 
- timestamp='2004-02-16'
- 
- # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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
- 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 0 ;;
-     --version | -v )
-        echo "$version" ; exit 0 ;;
-     --help | --h* | -h )
-        echo "$usage"; exit 0 ;;
-     -- )     # 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 ;'
- 
- # 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 0 ;;
-     amd64:OpenBSD:*:*)
- 	echo x86_64-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     amiga:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     arc:OpenBSD:*:*)
- 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     cats:OpenBSD:*:*)
- 	echo arm-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     hp300:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     mac68k:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     macppc:OpenBSD:*:*)
- 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     mvme68k:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     mvme88k:OpenBSD:*:*)
- 	echo m88k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     mvmeppc:OpenBSD:*:*)
- 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     pegasos:OpenBSD:*:*)
- 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     pmax:OpenBSD:*:*)
- 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     sgi:OpenBSD:*:*)
- 	echo mipseb-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     sun3:OpenBSD:*:*)
- 	echo m68k-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     wgrisc:OpenBSD:*:*)
- 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     *:OpenBSD:*:*)
- 	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     *:ekkoBSD:*:*)
- 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- 	exit 0 ;;
-     macppc:MirBSD:*:*)
- 	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     *:MirBSD:*:*)
- 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- 	exit 0 ;;
-     alpha:OSF1:*:*)
- 	if test $UNAME_RELEASE = "V4.0"; then
- 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- 	fi
- 	# 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 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/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- 	exit 0 ;;
-     Alpha*:OpenVMS:*:*)
- 	echo alpha-hp-vms
- 	exit 0 ;;
-     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 0 ;;
-     21064:Windows_NT:50:3)
- 	echo alpha-dec-winnt3.5
- 	exit 0 ;;
-     Amiga*:UNIX_System_V:4.0:*)
- 	echo m68k-unknown-sysv4
- 	exit 0;;
-     *:[Aa]miga[Oo][Ss]:*:*)
- 	echo ${UNAME_MACHINE}-unknown-amigaos
- 	exit 0 ;;
-     *:[Mm]orph[Oo][Ss]:*:*)
- 	echo ${UNAME_MACHINE}-unknown-morphos
- 	exit 0 ;;
-     *:OS/390:*:*)
- 	echo i370-ibm-openedition
- 	exit 0 ;;
-     *:OS400:*:*)
-         echo powerpc-ibm-os400
- 	exit 0 ;;
-     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- 	echo arm-acorn-riscix${UNAME_RELEASE}
- 	exit 0;;
-     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- 	echo hppa1.1-hitachi-hiuxmpp
- 	exit 0;;
-     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 0 ;;
-     NILE*:*:*:dcosx)
- 	echo pyramid-pyramid-svr4
- 	exit 0 ;;
-     DRS?6000:unix:4.0:6*)
- 	echo sparc-icl-nx6
- 	exit 0 ;;
-     DRS?6000:UNIX_SV:4.2*:7*)
- 	case `/usr/bin/uname -p` in
- 	    sparc) echo sparc-icl-nx7 && exit 0 ;;
- 	esac ;;
-     sun4H:SunOS:5.*:*)
- 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit 0 ;;
-     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit 0 ;;
-     i86pc:SunOS:5.*:*)
- 	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit 0 ;;
-     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 0 ;;
-     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 0 ;;
-     sun3*:SunOS:*:*)
- 	echo m68k-sun-sunos${UNAME_RELEASE}
- 	exit 0 ;;
-     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 0 ;;
-     aushp:SunOS:*:*)
- 	echo sparc-auspex-sunos${UNAME_RELEASE}
- 	exit 0 ;;
-     # 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 0 ;;
-     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- 	echo m68k-atari-mint${UNAME_RELEASE}
-         exit 0 ;;
-     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-         echo m68k-atari-mint${UNAME_RELEASE}
- 	exit 0 ;;
-     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-         echo m68k-milan-mint${UNAME_RELEASE}
-         exit 0 ;;
-     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-         echo m68k-hades-mint${UNAME_RELEASE}
-         exit 0 ;;
-     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-         echo m68k-unknown-mint${UNAME_RELEASE}
-         exit 0 ;;
-     m68k:machten:*:*)
- 	echo m68k-apple-machten${UNAME_RELEASE}
- 	exit 0 ;;
-     powerpc:machten:*:*)
- 	echo powerpc-apple-machten${UNAME_RELEASE}
- 	exit 0 ;;
-     RISC*:Mach:*:*)
- 	echo mips-dec-mach_bsd4.3
- 	exit 0 ;;
-     RISC*:ULTRIX:*:*)
- 	echo mips-dec-ultrix${UNAME_RELEASE}
- 	exit 0 ;;
-     VAX*:ULTRIX*:*:*)
- 	echo vax-dec-ultrix${UNAME_RELEASE}
- 	exit 0 ;;
-     2020:CLIX:*:* | 2430:CLIX:*:*)
- 	echo clipper-intergraph-clix${UNAME_RELEASE}
- 	exit 0 ;;
-     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 \
- 	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- 	  && exit 0
- 	echo mips-mips-riscos${UNAME_RELEASE}
- 	exit 0 ;;
-     Motorola:PowerMAX_OS:*:*)
- 	echo powerpc-motorola-powermax
- 	exit 0 ;;
-     Motorola:*:4.3:PL8-*)
- 	echo powerpc-harris-powermax
- 	exit 0 ;;
-     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- 	echo powerpc-harris-powermax
- 	exit 0 ;;
-     Night_Hawk:Power_UNIX:*:*)
- 	echo powerpc-harris-powerunix
- 	exit 0 ;;
-     m88k:CX/UX:7*:*)
- 	echo m88k-harris-cxux7
- 	exit 0 ;;
-     m88k:*:4*:R4*)
- 	echo m88k-motorola-sysv4
- 	exit 0 ;;
-     m88k:*:3*:R3*)
- 	echo m88k-motorola-sysv3
- 	exit 0 ;;
-     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 0 ;;
-     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
- 	echo m88k-dolphin-sysv3
- 	exit 0 ;;
-     M88*:*:R3*:*)
- 	# Delta 88k system running SVR3
- 	echo m88k-motorola-sysv3
- 	exit 0 ;;
-     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- 	echo m88k-tektronix-sysv3
- 	exit 0 ;;
-     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- 	echo m68k-tektronix-bsd
- 	exit 0 ;;
-     *:IRIX*:*:*)
- 	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- 	exit 0 ;;
-     ????????: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 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-     i*86:AIX:*:*)
- 	echo i386-ibm-aix
- 	exit 0 ;;
-     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 0 ;;
-     *: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
- 		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
- 		echo rs6000-ibm-aix3.2.5
- 	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 0 ;;
-     *: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 0 ;;
-     *:AIX:*:*)
- 	echo rs6000-ibm-aix
- 	exit 0 ;;
-     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- 	echo romp-ibm-bsd4.4
- 	exit 0 ;;
-     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
- 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
- 	exit 0 ;;                           # report: romp-ibm BSD 4.3
-     *:BOSX:*:*)
- 	echo rs6000-bull-bosx
- 	exit 0 ;;
-     DPX/2?00:B.O.S.:*:*)
- 	echo m68k-bull-sysv3
- 	exit 0 ;;
-     9000/[34]??:4.3bsd:1.*:*)
- 	echo m68k-hp-bsd
- 	exit 0 ;;
-     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- 	echo m68k-hp-bsd4.4
- 	exit 0 ;;
-     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
- 	    # avoid double evaluation of $set_cc_for_build
- 	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
- 	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
- 	    then
- 		HP_ARCH="hppa2.0w"
- 	    else
- 		HP_ARCH="hppa64"
- 	    fi
- 	fi
- 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- 	exit 0 ;;
-     ia64:HP-UX:*:*)
- 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- 	echo ia64-hp-hpux${HPUX_REV}
- 	exit 0 ;;
-     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 && $dummy && exit 0
- 	echo unknown-hitachi-hiuxwe2
- 	exit 0 ;;
-     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- 	echo hppa1.1-hp-bsd
- 	exit 0 ;;
-     9000/8??:4.3bsd:*:*)
- 	echo hppa1.0-hp-bsd
- 	exit 0 ;;
-     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- 	echo hppa1.0-hp-mpeix
- 	exit 0 ;;
-     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- 	echo hppa1.1-hp-osf
- 	exit 0 ;;
-     hp8??:OSF1:*:*)
- 	echo hppa1.0-hp-osf
- 	exit 0 ;;
-     i*86:OSF1:*:*)
- 	if [ -x /usr/sbin/sysversion ] ; then
- 	    echo ${UNAME_MACHINE}-unknown-osf1mk
- 	else
- 	    echo ${UNAME_MACHINE}-unknown-osf1
- 	fi
- 	exit 0 ;;
-     parisc*:Lites*:*:*)
- 	echo hppa1.1-hp-lites
- 	exit 0 ;;
-     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- 	echo c1-convex-bsd
-         exit 0 ;;
-     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- 	if getsysinfo -f scalar_acc
- 	then echo c32-convex-bsd
- 	else echo c2-convex-bsd
- 	fi
-         exit 0 ;;
-     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- 	echo c34-convex-bsd
-         exit 0 ;;
-     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- 	echo c38-convex-bsd
-         exit 0 ;;
-     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- 	echo c4-convex-bsd
-         exit 0 ;;
-     CRAY*Y-MP:*:*:*)
- 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     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 0 ;;
-     CRAY*TS:*:*:*)
- 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     CRAY*T3E:*:*:*)
- 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     CRAY*SV1:*:*:*)
- 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     *:UNICOS/mp:*:*)
- 	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit 0 ;;
-     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 0 ;;
-     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 0 ;;
-     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- 	exit 0 ;;
-     sparc*:BSD/OS:*:*)
- 	echo sparc-unknown-bsdi${UNAME_RELEASE}
- 	exit 0 ;;
-     *:BSD/OS:*:*)
- 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- 	exit 0 ;;
-     *:FreeBSD:*:*)
- 	# Determine whether the default compiler uses glibc.
- 	eval $set_cc_for_build
- 	sed 's/^	//' << EOF >$dummy.c
- 	#include <features.h>
- 	#if __GLIBC__ >= 2
- 	LIBC=gnu
- 	#else
- 	LIBC=
- 	#endif
- EOF
- 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- 	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
- 	# FreeBSD's kernel, but not the complete OS.
- 	case ${LIBC} in gnu) kernel_only='k' ;; esac
- 	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
- 	exit 0 ;;
-     i*:CYGWIN*:*)
- 	echo ${UNAME_MACHINE}-pc-cygwin
- 	exit 0 ;;
-     i*:MINGW*:*)
- 	echo ${UNAME_MACHINE}-pc-mingw32
- 	exit 0 ;;
-     i*:PW*:*)
- 	echo ${UNAME_MACHINE}-pc-pw32
- 	exit 0 ;;
-     x86:Interix*:[34]*)
- 	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- 	exit 0 ;;
-     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- 	echo i${UNAME_MACHINE}-pc-mks
- 	exit 0 ;;
-     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 0 ;;
-     i*:UWIN*:*)
- 	echo ${UNAME_MACHINE}-pc-uwin
- 	exit 0 ;;
-     p*:CYGWIN*:*)
- 	echo powerpcle-unknown-cygwin
- 	exit 0 ;;
-     prep*:SunOS:5.*:*)
- 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit 0 ;;
-     *:GNU:*:*)
- 	# the GNU system
- 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- 	exit 0 ;;
-     *: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 0 ;;
-     i*86:Minix:*:*)
- 	echo ${UNAME_MACHINE}-pc-minix
- 	exit 0 ;;
-     arm*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     cris:Linux:*:*)
- 	echo cris-axis-linux-gnu
- 	exit 0 ;;
-     ia64:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     m68*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     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 0
- 	;;
-     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 0
- 	;;
-     ppc:Linux:*:*)
- 	echo powerpc-unknown-linux-gnu
- 	exit 0 ;;
-     ppc64:Linux:*:*)
- 	echo powerpc64-unknown-linux-gnu
- 	exit 0 ;;
-     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 0 ;;
-     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 0 ;;
-     parisc64:Linux:*:* | hppa64:Linux:*:*)
- 	echo hppa64-unknown-linux-gnu
- 	exit 0 ;;
-     s390:Linux:*:* | s390x:Linux:*:*)
- 	echo ${UNAME_MACHINE}-ibm-linux
- 	exit 0 ;;
-     sh64*:Linux:*:*)
-     	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     sh*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     sparc:Linux:*:* | sparc64:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-gnu
- 	exit 0 ;;
-     x86_64:Linux:*:*)
- 	echo x86_64-unknown-linux-gnu
- 	exit 0 ;;
-     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 0 ;;
- 	  coff-i386)
- 		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- 		exit 0 ;;
- 	  "")
- 		# 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 0 ;;
- 	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 0
- 	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- 	;;
-     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 0 ;;
-     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 0 ;;
-     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 0 ;;
-     i*86:XTS-300:*:STOP)
- 	echo ${UNAME_MACHINE}-unknown-stop
- 	exit 0 ;;
-     i*86:atheos:*:*)
- 	echo ${UNAME_MACHINE}-unknown-atheos
- 	exit 0 ;;
- 	i*86:syllable:*:*)
- 	echo ${UNAME_MACHINE}-pc-syllable
- 	exit 0 ;;
-     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- 	echo i386-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     i*86:*DOS:*:*)
- 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
- 	exit 0 ;;
-     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 0 ;;
-     i*86:*:5:[78]*)
- 	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 0 ;;
-     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 0 ;;
-     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 0 ;;
-     Intel:Mach:3*:*)
- 	echo i386-pc-mach3
- 	exit 0 ;;
-     paragon:*:*:*)
- 	echo i860-intel-osf1
- 	exit 0 ;;
-     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 0 ;;
-     mini*:CTIX:SYS*5:*)
- 	# "miniframe"
- 	echo m68010-convergent-sysv
- 	exit 0 ;;
-     mc68k:UNIX:SYSTEM5:3.51m)
- 	echo m68k-convergent-sysv
- 	exit 0 ;;
-     M680?0:D-NIX:5.3:*)
- 	echo m68k-diab-dnix
- 	exit 0 ;;
-     M68*:*:R3V[567]*:*)
- 	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-     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)
- 	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 0
- 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- 	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
-     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-           && echo i486-ncr-sysv4 && exit 0 ;;
-     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- 	echo m68k-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     mc68030:UNIX_System_V:4.*:*)
- 	echo m68k-atari-sysv4
- 	exit 0 ;;
-     TSUNAMI:LynxOS:2.*:*)
- 	echo sparc-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     rs6000:LynxOS:2.*:*)
- 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
- 	exit 0 ;;
-     SM[BE]S:UNIX_SV:*:*)
- 	echo mips-dde-sysv${UNAME_RELEASE}
- 	exit 0 ;;
-     RM*:ReliantUNIX-*:*:*)
- 	echo mips-sni-sysv4
- 	exit 0 ;;
-     RM*:SINIX-*:*:*)
- 	echo mips-sni-sysv4
- 	exit 0 ;;
-     *: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 0 ;;
-     PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                       # says <Richard.M.Bartel@ccMail.Census.GOV>
-         echo i586-unisys-sysv4
-         exit 0 ;;
-     *:UNIX_System_V:4*:FTX*)
- 	# From Gerald Hewes <hewes@openmarket.com>.
- 	# How about differentiating between stratus architectures? -djm
- 	echo hppa1.1-stratus-sysv4
- 	exit 0 ;;
-     *:*:*:FTX*)
- 	# From seanf@swdc.stratus.com.
- 	echo i860-stratus-sysv4
- 	exit 0 ;;
-     *:VOS:*:*)
- 	# From Paul.Green@stratus.com.
- 	echo hppa1.1-stratus-vos
- 	exit 0 ;;
-     mc68*:A/UX:*:*)
- 	echo m68k-apple-aux${UNAME_RELEASE}
- 	exit 0 ;;
-     news*:NEWS-OS:6*:*)
- 	echo mips-sony-newsos6
- 	exit 0 ;;
-     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 0 ;;
-     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
- 	echo powerpc-be-beos
- 	exit 0 ;;
-     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
- 	echo powerpc-apple-beos
- 	exit 0 ;;
-     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
- 	echo i586-pc-beos
- 	exit 0 ;;
-     SX-4:SUPER-UX:*:*)
- 	echo sx4-nec-superux${UNAME_RELEASE}
- 	exit 0 ;;
-     SX-5:SUPER-UX:*:*)
- 	echo sx5-nec-superux${UNAME_RELEASE}
- 	exit 0 ;;
-     SX-6:SUPER-UX:*:*)
- 	echo sx6-nec-superux${UNAME_RELEASE}
- 	exit 0 ;;
-     Power*:Rhapsody:*:*)
- 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
- 	exit 0 ;;
-     *:Rhapsody:*:*)
- 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- 	exit 0 ;;
-     *:Darwin:*:*)
- 	case `uname -p` in
- 	    *86) UNAME_PROCESSOR=i686 ;;
- 	    powerpc) UNAME_PROCESSOR=powerpc ;;
- 	esac
- 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- 	exit 0 ;;
-     *: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 0 ;;
-     *:QNX:*:4*)
- 	echo i386-pc-qnx
- 	exit 0 ;;
-     NSR-?:NONSTOP_KERNEL:*:*)
- 	echo nsr-tandem-nsk${UNAME_RELEASE}
- 	exit 0 ;;
-     *:NonStop-UX:*:*)
- 	echo mips-compaq-nonstopux
- 	exit 0 ;;
-     BS2000:POSIX*:*:*)
- 	echo bs2000-siemens-sysv
- 	exit 0 ;;
-     DS/*:UNIX_System_V:*:*)
- 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- 	exit 0 ;;
-     *: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 0 ;;
-     *:TOPS-10:*:*)
- 	echo pdp10-unknown-tops10
- 	exit 0 ;;
-     *:TENEX:*:*)
- 	echo pdp10-unknown-tenex
- 	exit 0 ;;
-     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- 	echo pdp10-dec-tops20
- 	exit 0 ;;
-     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- 	echo pdp10-xkl-tops20
- 	exit 0 ;;
-     *:TOPS-20:*:*)
- 	echo pdp10-unknown-tops20
- 	exit 0 ;;
-     *:ITS:*:*)
- 	echo pdp10-unknown-its
- 	exit 0 ;;
-     SEI:*:*:SEIUX)
-         echo mips-sei-seiux${UNAME_RELEASE}
- 	exit 0 ;;
-     *:DragonFly:*:*)
- 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- 	exit 0 ;;
- 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"); 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 && $dummy && exit 0
- 
- # Apollos put the system type in the environment.
- 
- test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
- 
- # 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 0 ;;
-     c2*)
- 	if getsysinfo -f scalar_acc
- 	then echo c32-convex-bsd
- 	else echo c2-convex-bsd
- 	fi
- 	exit 0 ;;
-     c34*)
- 	echo c34-convex-bsd
- 	exit 0 ;;
-     c38*)
- 	echo c38-convex-bsd
- 	exit 0 ;;
-     c4*)
- 	echo c4-convex-bsd
- 	exit 0 ;;
-     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
- 
-     ftp://ftp.gnu.org/pub/gnu/config/
- 
- 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:
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/config.sub gcc-4.0.0/boehm-gc/config.sub
*** gcc-3.4.3/boehm-gc/config.sub	Sun Feb 22 14:43:48 2004
--- gcc-4.0.0/boehm-gc/config.sub	Thu Jan  1 00:00:00 1970
***************
*** 1,1545 ****
- #! /bin/sh
- # Configuration validation subroutine script.
- #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
- 
- timestamp='2004-02-16'
- 
- # 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., 59 Temple Place - Suite 330,
- # Boston, MA 02111-1307, 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
- 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 0 ;;
-     --version | -v )
-        echo "$version" ; exit 0 ;;
-     --help | --h* | -h )
-        echo "$usage"; exit 0 ;;
-     -- )     # 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 0;;
- 
-     * )
-        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)
- 		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 \
- 	| 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 | m68000 | m68k | m88k | mcore \
- 	| mips | mipsbe | mipseb | mipsel | mipsle \
- 	| mips16 \
- 	| mips64 | mips64el \
- 	| mips64vr | mips64vrel \
- 	| mips64orion | mips64orionel \
- 	| mips64vr4100 | mips64vr4100el \
- 	| mips64vr4300 | mips64vr4300el \
- 	| mips64vr5000 | mips64vr5000el \
- 	| mipsisa32 | mipsisa32el \
- 	| mipsisa32r2 | mipsisa32r2el \
- 	| mipsisa64 | mipsisa64el \
- 	| mipsisa64r2 | mipsisa64r2el \
- 	| mipsisa64sb1 | mipsisa64sb1el \
- 	| mipsisa64sr71k | mipsisa64sr71kel \
- 	| mipstx39 | mipstx39el \
- 	| mn10200 | mn10300 \
- 	| msp430 \
- 	| ns16k | ns32k \
- 	| openrisc | or32 \
- 	| pdp10 | pdp11 | pj | pjl \
- 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- 	| pyramid \
- 	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- 	| sh64 | sh64le \
- 	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
- 	| strongarm \
- 	| tahoe | thumb | tic4x | tic80 | tron \
- 	| v850 | v850e \
- 	| we32k \
- 	| x86 | xscale | xstormy16 | xtensa \
- 	| z8k)
- 		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-* \
- 	| bs2000-* \
- 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- 	| clipper-* | 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-* \
- 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- 	| m88110-* | m88k-* | mcore-* \
- 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- 	| mips16-* \
- 	| mips64-* | mips64el-* \
- 	| mips64vr-* | mips64vrel-* \
- 	| mips64orion-* | mips64orionel-* \
- 	| mips64vr4100-* | mips64vr4100el-* \
- 	| mips64vr4300-* | mips64vr4300el-* \
- 	| mips64vr5000-* | mips64vr5000el-* \
- 	| mipsisa32-* | mipsisa32el-* \
- 	| mipsisa32r2-* | mipsisa32r2el-* \
- 	| mipsisa64-* | mipsisa64el-* \
- 	| mipsisa64r2-* | mipsisa64r2el-* \
- 	| mipsisa64sb1-* | mipsisa64sb1el-* \
- 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
- 	| mipstx39-* | mipstx39el-* \
- 	| msp430-* \
- 	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
- 	| orion-* \
- 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- 	| pyramid-* \
- 	| romp-* | rs6000-* \
- 	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
- 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- 	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
- 	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- 	| tahoe-* | thumb-* \
- 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- 	| tron-* \
- 	| v850-* | v850e-* | vax-* \
- 	| we32k-* \
- 	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
- 	| xtensa-* \
- 	| ymp-* \
- 	| z8k-*)
- 		;;
- 	# 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
- 		;;
- 	cr16c)
- 		basic_machine=cr16c-unknown
- 		os=-elf
- 		;;
- 	crds | unos)
- 		basic_machine=m68k-crds
- 		;;
- 	cris | cris-* | etrax*)
- 		basic_machine=cris-axis
- 		;;
- 	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
- 		;;
- 	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
- 		;;
- 	mmix*)
- 		basic_machine=mmix-knuth
- 		os=-mmixware
- 		;;
- 	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
- 		;;
- 	nv1)
- 		basic_machine=nv1-cray
- 		os=-unicosmp
- 		;;
- 	nsr-tandem)
- 		basic_machine=nsr-tandem
- 		;;
- 	op50n-* | op60c-*)
- 		basic_machine=hppa1.1-oki
- 		os=-proelf
- 		;;
- 	or32 | or32-*)
- 		basic_machine=or32-unknown
- 		os=-coff
- 		;;
- 	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
- 		;;
- 	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
- 		;;
- 	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
- 		;;
- 	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
- 		basic_machine=sh-unknown
- 		;;
- 	sh64)
- 		basic_machine=sh64-unknown
- 		;;
- 	sparc | 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*)
- 	# 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* \
- 	      | -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
- 		;;
- 	-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
- 		;;
- 	*-ibm)
- 		os=-aix
- 		;;
- 	*-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 0
- 
- # Local variables:
- # eval: (add-hook 'write-file-hooks 'time-stamp)
- # time-stamp-start: "timestamp='"
- # time-stamp-format: "%:y-%02m-%02d"
- # time-stamp-end: "'"
- # End:
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/configure gcc-4.0.0/boehm-gc/configure
*** gcc-3.4.3/boehm-gc/configure	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/boehm-gc/configure	Thu Apr 21 07:04:10 2005
***************
*** 1,64 ****
  #! /bin/sh
- 
  # Guess values for system-dependent variables and create Makefiles.
! # Generated automatically using autoconf version 2.13 
! # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  #
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
  
! # Defaults:
! ac_help=
  ac_default_prefix=/usr/local
! # Any additions from configure.in:
! ac_help="$ac_help
!   --enable-multilib       build many library versions (default)"
! ac_help="$ac_help
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer"
! ac_help="$ac_help
!   --enable-shared[=PKGS]  build shared libraries [default=yes]"
! ac_help="$ac_help
!   --enable-static[=PKGS]  build static libraries [default=yes]"
! ac_help="$ac_help
!   --enable-fast-install[=PKGS]  optimize for fast installation [default=yes]"
! ac_help="$ac_help
!   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]"
! ac_help="$ac_help
!   --disable-libtool-lock  avoid locking (might break parallel builds)"
! ac_help="$ac_help
!   --with-pic              try to use only PIC/non-PIC objects [default=use both]"
! ac_help="$ac_help
!   --with-target-subdir=SUBDIR
!                           configuring with a cross compiler"
! ac_help="$ac_help
!   --with-cross-host=HOST  configuring with a cross compiler"
! ac_help="$ac_help
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer"
! ac_help="$ac_help
!   --enable-parallel-mark	parallelize marking and free list construction"
! ac_help="$ac_help
!   --with-ecos             enable runtime eCos target support"
! ac_help="$ac_help
!   --enable-shared[=PKGS]  build shared libraries [default=yes]"
! ac_help="$ac_help
!   --with-target-subdir=SUBDIR
!                           configuring with a cross compiler"
! ac_help="$ac_help
!   --with-cross-host=HOST  configuring with a cross compiler"
! ac_help="$ac_help
!   --enable-full-debug	include full support for pointer backtracing etc."
  
  # Initialize some variables set by options.
  # The variables have the same names as the options, with
  # dashes changed to underlines.
! build=NONE
! cache_file=./config.cache
  exec_prefix=NONE
- host=NONE
  no_create=
- nonopt=NONE
  no_recursion=
  prefix=NONE
  program_prefix=NONE
--- 1,325 ----
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # 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.
+ ## --------------------- ##
+ ## 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=
! PACKAGE_TARNAME=
! PACKAGE_VERSION=
! PACKAGE_STRING=
! PACKAGE_BUGREPORT=
! 
! ac_unique_file="gcj_mlc.c"
! # 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 multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical mkinstalldirs 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 CXX ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CFLAGS CXXFLAGS CCAS CCASFLAGS AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GC_CFLAGS LN_S LIBTOOL CXXCPP CPPFLAGS THREADLIBS POWERPC_DARWIN_TRUE POWERPC_DARWIN_FALSE EXTRA_TEST_LIBS target_all CPLUSPLUS_TRUE CPLUSPLUS_FALSE AM_CPPFLAGS addobjs addincludes addlibs addtests CPP EGREP MY_CFLAGS toolexecdir toolexeclibdir 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_transform_name=s,x,x,
*** 67,76 ****
  silent=
  site=
  srcdir=
- target=NONE
  verbose=
  x_includes=NONE
  x_libraries=NONE
  bindir='${exec_prefix}/bin'
  sbindir='${exec_prefix}/sbin'
  libexecdir='${exec_prefix}/libexec'
--- 328,342 ----
  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'
*************** oldincludedir='/usr/include'
*** 84,100 ****
  infodir='${prefix}/info'
  mandir='${prefix}/man'
  
- # Initialize some other variables.
- subdirs=
- MFLAGS= MAKEFLAGS=
- SHELL=${CONFIG_SHELL-/bin/sh}
- # Maximum number of lines to put in a shell here document.
- ac_max_here_lines=12
- 
  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"
--- 350,358 ----
*************** do
*** 102,160 ****
      continue
    fi
  
!   case "$ac_option" in
!   -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
!   *) ac_optarg= ;;
!   esac
  
    # 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 ;;
    -build=* | --build=* | --buil=* | --bui=* | --bu=*)
!     build="$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" ;;
  
    -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
      ac_prev=datadir ;;
    -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
    | --da=*)
!     datadir="$ac_optarg" ;;
  
    -disable-* | --disable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     eval "enable_${ac_feature}=no" ;;
  
    -enable-* | --enable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) 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- \
--- 360,418 ----
      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- \
*************** do
*** 163,257 ****
    -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)
!     # 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 << EOF
! Usage: configure [options] [host]
! Options: [defaults in brackets after descriptions]
! Configuration:
!   --cache-file=FILE       cache test results in FILE
!   --help                  print this message
!   --no-create             do not create output files
!   --quiet, --silent       do not print \`checking...' messages
!   --version               print the version of autoconf that created configure
! Directory and file names:
!   --prefix=PREFIX         install architecture-independent files in PREFIX
!                           [$ac_default_prefix]
!   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
!                           [same as prefix]
!   --bindir=DIR            user executables in DIR [EPREFIX/bin]
!   --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
!   --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
!   --datadir=DIR           read-only architecture-independent data in DIR
!                           [PREFIX/share]
!   --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
!   --sharedstatedir=DIR    modifiable architecture-independent data in DIR
!                           [PREFIX/com]
!   --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
!   --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
!   --includedir=DIR        C header files in DIR [PREFIX/include]
!   --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
!   --infodir=DIR           info documentation in DIR [PREFIX/info]
!   --mandir=DIR            man documentation in DIR [PREFIX/man]
!   --srcdir=DIR            find the sources in DIR [configure dir or ..]
!   --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
! EOF
!     cat << EOF
! Host type:
!   --build=BUILD           configure for building on BUILD [BUILD=HOST]
!   --host=HOST             configure for HOST [guessed]
!   --target=TARGET         configure for TARGET [TARGET=HOST]
! Features and packages:
!   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
!   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
!   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
!   --x-includes=DIR        X include files are in DIR
!   --x-libraries=DIR       X library files are in DIR
! EOF
!     if test -n "$ac_help"; then
!       echo "--enable and --with options recognized:$ac_help"
!     fi
!     exit 0 ;;
  
    -host | --host | --hos | --ho)
!     ac_prev=host ;;
    -host=* | --host=* | --hos=* | --ho=*)
!     host="$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 \
--- 421,467 ----
    -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 \
*************** EOF
*** 260,278 ****
    -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)
      no_create=yes ;;
  
    -no-recursion | --no-recursion | --no-recursio | --no-recursi \
--- 470,488 ----
    -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 \
*************** EOF
*** 286,311 ****
    -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 \
--- 496,521 ----
    -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 \
*************** EOF
*** 322,328 ****
    | --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)
--- 532,538 ----
    | --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)
*************** EOF
*** 332,338 ****
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir="$ac_optarg" ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
--- 542,548 ----
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir=$ac_optarg ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
*************** EOF
*** 343,400 ****
    | --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 ;;
    -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
!     target="$ac_optarg" ;;
  
    -v | -verbose | --verbose | --verbos | --verbo | --verb)
      verbose=yes ;;
  
!   -version | --version | --versio | --versi | --vers)
!     echo "configure generated by autoconf version 2.13"
!     exit 0 ;;
  
    -with-* | --with-*)
!     ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
      ac_package=`echo $ac_package| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) ac_optarg=yes ;;
      esac
!     eval "with_${ac_package}='$ac_optarg'" ;;
  
    -without-* | --without-*)
!     ac_package=`echo $ac_option|sed -e 's/-*without-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
!     ac_package=`echo $ac_package| sed 's/-/_/g'`
!     eval "with_${ac_package}=no" ;;
  
    --x)
      # Obsolete; use --with-x.
--- 553,609 ----
    | --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.
*************** EOF
*** 405,503 ****
      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 "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
      ;;
  
    *)
!     if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
!       echo "configure: warning: $ac_option: invalid host type" 1>&2
!     fi
!     if test "x$nonopt" != xNONE; then
!       { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
!     fi
!     nonopt="$ac_option"
      ;;
  
    esac
  done
  
  if test -n "$ac_prev"; then
!   { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
! fi
! 
! trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
! 
! # File descriptor usage:
! # 0 standard input
! # 1 file creation
! # 2 errors and warnings
! # 3 some systems may open it to /dev/tty
! # 4 used on the Kubota Titan
! # 6 checking for... messages and results
! # 5 compiler messages saved in config.log
! if test "$silent" = yes; then
!   exec 6>/dev/null
! else
!   exec 6>&1
  fi
- exec 5>./config.log
  
! echo "\
! This file contains any messages produced by compilers while
! running configure, to aid debugging if configure makes a mistake.
! " 1>&5
  
! # Strip out --no-create and --no-recursion so they do not pile up.
! # Also quote any args containing shell metacharacters.
! ac_configure_args=
! for ac_arg
  do
!   case "$ac_arg" in
!   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
!   | --no-cr | --no-c) ;;
!   -no-recursion | --no-recursion | --no-recursio | --no-recursi \
!   | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
!   *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
!   ac_configure_args="$ac_configure_args '$ac_arg'" ;;
!   *) ac_configure_args="$ac_configure_args $ac_arg" ;;
    esac
  done
  
! # NLS nuisances.
! # Only set these to C if already set.  These must not be set unconditionally
! # because not all systems understand e.g. LANG=C (notably SCO).
! # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
! # Non-C LC_CTYPE values break the ctype check.
! if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
! if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
! if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
! if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  
! # 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
  
- # A filename unique to this package, relative to the directory that
- # configure is in, which we can look for to find out if srcdir is correct.
- ac_unique_file=gcj_mlc.c
  
  # 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_prog=$0
!   ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
!   test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
    srcdir=$ac_confdir
    if test ! -r $srcdir/$ac_unique_file; then
      srcdir=..
--- 614,723 ----
      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=..
*************** else
*** 507,519 ****
  fi
  if test ! -r $srcdir/$ac_unique_file; then
    if test "$ac_srcdir_defaulted" = yes; then
!     { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
    else
!     { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
    fi
  fi
! srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
  
  # Prefer explicitly selected file to automatically selected ones.
  if test -z "$CONFIG_SITE"; then
    if test "x$prefix" != xNONE; then
--- 727,1210 ----
  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_CXXCPP_set=${CXXCPP+set}
! ac_env_CXXCPP_value=$CXXCPP
! ac_cv_env_CXXCPP_set=${CXXCPP+set}
! ac_cv_env_CXXCPP_value=$CXXCPP
! 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
! 
! #
! # 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 this package 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
+ 
+ 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
+ 
+   cat <<\_ACEOF
+ 
+ Optional Features:
+   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+   --enable-multilib       build many library versions (default)
+   --disable-dependency-tracking  speeds up one-time build
+   --enable-dependency-tracking   do not reject slow dependency extractors
+   --enable-maintainer-mode  enable make rules and dependencies not useful
+ 			  (and sometimes confusing) to the casual installer
+   --enable-shared=PKGS  build shared libraries default=yes
+   --enable-static=PKGS  build static libraries default=yes
+   --enable-fast-install=PKGS  optimize for fast installation default=yes
+   --disable-libtool-lock  avoid locking (might break parallel builds)
+   --enable-parallel-mark	parallelize marking and free list construction
+   --enable-gc-debug	include full support for pointer backtracing etc.
+ 
+ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+   --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-target-subdir=SUBDIR
+                           configuring with a cross compiler
+   --with-cross-host=HOST  configuring with a cross compiler
+   --with-ecos             enable runtime eCos target support
+ 
+ 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>
+   CXX         C++ compiler command
+   CXXFLAGS    C++ compiler flags
+   CXXCPP      C++ preprocessor
+   CPP         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.
+ 
+ _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
+ 
+ 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 $as_me, 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
*************** if test -z "$CONFIG_SITE"; then
*** 524,562 ****
  fi
  for ac_site_file in $CONFIG_SITE; do
    if test -r "$ac_site_file"; then
!     echo "loading site script $ac_site_file"
      . "$ac_site_file"
    fi
  done
  
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
- ac_exeext=
- ac_objext=o
- if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-     ac_n= ac_c='
- ' ac_t='	'
-   else
-     ac_n=-n ac_c= ac_t=
-   fi
- else
-   ac_n= ac_c='\c' ac_t=
- fi
  
  
  
--- 1215,1317 ----
  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
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
  
  
  
  
*************** fi
*** 566,573 ****
  # exported.
  ORIGINAL_LD_FOR_MULTILIBS=$LD
  
  ac_aux_dir=
! for ac_dir in . $srcdir/.; do
    if test -f $ac_dir/install-sh; then
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install-sh -c"
--- 1321,1361 ----
  # exported.
  ORIGINAL_LD_FOR_MULTILIBS=$LD
  
+ # Default to --enable-multilib
+ # Check whether --enable-multilib or --disable-multilib was given.
+ if test "${enable_multilib+set}" = set; then
+   enableval="$enable_multilib"
+   case "$enableval" in
+   yes) multilib=yes ;;
+   no)  multilib=no ;;
+   *)   { { echo "$as_me:$LINENO: error: bad value $enableval for multilib option" >&5
+ echo "$as_me: error: bad value $enableval for multilib option" >&2;}
+    { (exit 1); exit 1; }; } ;;
+  esac
+ else
+   multilib=yes
+ fi;
+ 
+ # We may get other options which we leave undocumented:
+ # --with-target-subdir, --with-multisrctop, --with-multisubdir
+ # See config-ml.in if you want the gory details.
+ 
+ if test "$srcdir" = "."; then
+   if test "$with_target_subdir" != "."; then
+     multi_basedir="$srcdir/$with_multisrctop../.."
+   else
+     multi_basedir="$srcdir/$with_multisrctop.."
+   fi
+ else
+   multi_basedir="$srcdir/.."
+ fi
+ 
+ 
+           ac_config_commands="$ac_config_commands default-1"
+ 
+ 
  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"
*************** for ac_dir in . $srcdir/.; do
*** 576,591 ****
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install.sh -c"
      break
    fi
  done
  if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in . $srcdir/." 1>&2; exit 1; }
  fi
! ac_config_guess=$ac_aux_dir/config.guess
! ac_config_sub=$ac_aux_dir/config.sub
! ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  
  
  # 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:
--- 1364,1491 ----
      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}-
+ 
+ # Get the 'noncanonical' system names.
+  case ${build_alias} in
+   "") build_noncanonical=${build} ;;
+   *) build_noncanonical=${build_alias} ;;
+ esac
  
+  case ${host_alias} in
+   "") host_noncanonical=${build_noncanonical} ;;
+   *) host_noncanonical=${host_alias} ;;
+ esac
+ 
+  case ${target_alias} in
+   "") target_noncanonical=${host_noncanonical} ;;
+   *) target_noncanonical=${target_alias} ;;
+ esac
+ 
+ 
+ 
+ 
+ # This works around an automake problem.
+ mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
+ 
+ 
+ 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:
*************** ac_configure=$ac_aux_dir/configure # Thi
*** 593,1436 ****
  # SunOS /usr/etc/install
  # IRIX /sbin/install
  # AIX /bin/install
  # 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"
  # ./install, which can be erroneously created by make from ./install.sh.
! echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:602: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
! if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
!   for ac_dir in $PATH; do
!     # Account for people who put trailing slashes in PATH elements.
!     case "$ac_dir/" in
!     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
!         if test -f $ac_dir/$ac_prog; then
  	  if test $ac_prog = install &&
!             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
  	    # AIX install.  It has an incompatible calling convention.
  	    :
  	  else
! 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
! 	    break 2
  	  fi
  	fi
        done
!       ;;
!     esac
!   done
!   IFS="$ac_save_IFS"
  
  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 "$ac_t""$INSTALL" 1>&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_PROGRAM}'
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
! echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
! echo "configure:655: checking whether build environment is sane" >&5
  # Just in case
  sleep 1
! echo timestamp > conftestfile
  # 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 conftestfile 2> /dev/null`
     if test "$*" = "X"; then
        # -L didn't work.
!       set X `ls -t $srcdir/configure conftestfile`
     fi
!    if test "$*" != "X $srcdir/configure conftestfile" \
!       && test "$*" != "X conftestfile $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 "configure: error: ls -t appears to fail.  Make sure there is not a broken
! alias in your environment" 1>&2; exit 1; }
     fi
  
!    test "$2" = conftestfile
     )
  then
     # Ok.
     :
  else
!    { echo "configure: error: newly created file is older than distributed files!
! Check your system clock" 1>&2; exit 1; }
! fi
! rm -f conftest*
! echo "$ac_t""yes" 1>&6
! if test "$program_transform_name" = s,x,x,; then
!   program_transform_name=
! else
!   # Double any \ or $.  echo might interpret backslashes.
!   cat <<\EOF_SED > conftestsed
! s,\\,\\\\,g; s,\$,$$,g
! EOF_SED
!   program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
!   rm -f conftestsed
  fi
  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"
  
! # sed with no file args requires a program.
! test "$program_transform_name" = "" && program_transform_name="s,x,x,"
  
! echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
! echo "configure:712: checking whether ${MAKE-make} sets \${MAKE}" >&5
! set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftestmake <<\EOF
  all:
! 	@echo 'ac_maketemp="${MAKE}"'
! EOF
  # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
! eval `${MAKE-make} -f conftestmake 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 conftestmake
  fi
  if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    SET_MAKE=
  else
!   echo "$ac_t""no" 1>&6
    SET_MAKE="MAKE=${MAKE-make}"
  fi
  
! if test $host != $build; then
!   ac_tool_prefix=${host_alias}-
  else
!   ac_tool_prefix=
  fi
  
! echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
! echo "configure:745: checking for Cygwin environment" >&5
! if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 750 "configure"
! #include "confdefs.h"
  
! int main() {
  
! #ifndef __CYGWIN__
! #define __CYGWIN__ __CYGWIN32__
! #endif
! return __CYGWIN__;
! ; return 0; }
! EOF
! if { (eval echo configure:761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   ac_cv_cygwin=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_cygwin=no
  fi
! rm -f conftest*
! rm -f conftest*
  fi
  
! echo "$ac_t""$ac_cv_cygwin" 1>&6
! CYGWIN=
! test "$ac_cv_cygwin" = yes && CYGWIN=yes
! echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
! echo "configure:778: checking for mingw32 environment" >&5
! if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 783 "configure"
! #include "confdefs.h"
  
! int main() {
! return __MINGW32__;
! ; return 0; }
! EOF
! if { (eval echo configure:790: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   ac_cv_mingw32=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_mingw32=no
  fi
! rm -f conftest*
! rm -f conftest*
  fi
  
! echo "$ac_t""$ac_cv_mingw32" 1>&6
! MINGW32=
! test "$ac_cv_mingw32" = yes && MINGW32=yes
  
! # Check whether --enable-multilib or --disable-multilib was given.
! if test "${enable_multilib+set}" = set; then
!   enableval="$enable_multilib"
!   case "${enableval}" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   { echo "configure: error: bad value ${enableval} for multilib option" 1>&2; exit 1; } ;;
!  esac
  else
!   multilib=yes
  fi
  
  
! if test "${srcdir}" = "."; then
!   if test "${with_target_subdir}" != "." -a -n "${with_target_subdir}"; then
!     gc_basedir="${srcdir}/${with_multisrctop}../."
!   else
!     gc_basedir="${srcdir}/${with_multisrctop}."
    fi
  else
!   gc_basedir="${srcdir}/."
  fi
  
! ac_aux_dir=
! for ac_dir in $gc_basedir/.. $srcdir/$gc_basedir/..; 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
    fi
  done
! if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in $gc_basedir/.. $srcdir/$gc_basedir/.." 1>&2; exit 1; }
  fi
- ac_config_guess=$ac_aux_dir/config.guess
- ac_config_sub=$ac_aux_dir/config.sub
- ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  
! if :; then :; else
!   # This overrides the previous occurrence for automake, but not for
!   # autoconf, which is exactly what we want.
!   ac_aux_dir=
! for ac_dir in .. $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
    fi
  done
! if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in .. $srcdir/.." 1>&2; exit 1; }
  fi
- ac_config_guess=$ac_aux_dir/config.guess
- ac_config_sub=$ac_aux_dir/config.sub
- ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  
  fi
  
  
! # Do some error checking and defaulting for the host and target type.
! # The inputs are:
! #    configure --host=HOST --target=TARGET --build=BUILD NONOPT
! #
! # The rules are:
! # 1. You are not allowed to specify --host, --target, and nonopt at the
! #    same time.
! # 2. Host defaults to nonopt.
! # 3. If nonopt is not specified, then host defaults to the current host,
! #    as determined by config.guess.
! # 4. Target and build default to nonopt.
! # 5. If nonopt is not specified, then target and build default to host.
  
! # The aliases save the names the user supplied, while $host etc.
! # will get canonicalized.
! case $host---$target---$nonopt in
! NONE---*---* | *---NONE---* | *---*---NONE) ;;
! *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
! esac
  
  
! # Make sure we can run config.sub.
! if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
! else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
  fi
  
! echo $ac_n "checking host system type""... $ac_c" 1>&6
! echo "configure:901: checking host system type" >&5
  
- host_alias=$host
- case "$host_alias" in
- NONE)
-   case $nonopt in
-   NONE)
-     if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
-     else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
-     fi ;;
-   *) host_alias=$nonopt ;;
-   esac ;;
- esac
  
! host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
! host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$host" 1>&6
  
! echo $ac_n "checking target system type""... $ac_c" 1>&6
! echo "configure:922: checking target system type" >&5
  
! target_alias=$target
! case "$target_alias" in
! NONE)
!   case $nonopt in
!   NONE) target_alias=$host_alias ;;
!   *) target_alias=$nonopt ;;
!   esac ;;
! esac
  
! target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
! target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$target" 1>&6
  
! echo $ac_n "checking build system type""... $ac_c" 1>&6
! echo "configure:940: checking build system type" >&5
  
! build_alias=$build
! case "$build_alias" in
! NONE)
!   case $nonopt in
!   NONE) build_alias=$host_alias ;;
!   *) build_alias=$nonopt ;;
!   esac ;;
! esac
  
! build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
! build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$build" 1>&6
  
! test "$host_alias" != "$target_alias" &&
!   test "$program_prefix$program_suffix$program_transform_name" = \
!     NONENONEs,x,x, &&
!   program_prefix=${target_alias}-
  
  
! # This works around an automake problem.
! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
  
  
  
! PACKAGE=gc
  
! VERSION=6.0
  
! if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
!   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
  fi
  
  
  
! missing_dir=`cd $ac_aux_dir && pwd`
! echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
! echo "configure:980: checking for working aclocal" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (aclocal --version) < /dev/null > /dev/null 2>&1; then
!    ACLOCAL=aclocal
!    echo "$ac_t""found" 1>&6
  else
!    ACLOCAL="$missing_dir/missing aclocal"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
! echo "configure:993: checking for working autoconf" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoconf --version) < /dev/null > /dev/null 2>&1; then
!    AUTOCONF=autoconf
!    echo "$ac_t""found" 1>&6
  else
!    AUTOCONF="$missing_dir/missing autoconf"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working automake""... $ac_c" 1>&6
! echo "configure:1006: checking for working automake" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (automake --version) < /dev/null > /dev/null 2>&1; then
!    AUTOMAKE=automake
!    echo "$ac_t""found" 1>&6
  else
!    AUTOMAKE="$missing_dir/missing automake"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
! echo "configure:1019: checking for working autoheader" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoheader --version) < /dev/null > /dev/null 2>&1; then
!    AUTOHEADER=autoheader
!    echo "$ac_t""found" 1>&6
  else
!    AUTOHEADER="$missing_dir/missing autoheader"
!    echo "$ac_t""missing" 1>&6
  fi
  
- echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
- echo "configure:1032: checking for working makeinfo" >&5
- # Run test in a subshell; some versions of sh will print an error if
- # an executable is not found, even if stderr is redirected.
- # Redirect stdin to placate older versions of autoconf.  Sigh.
- if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
-    MAKEINFO=makeinfo
-    echo "$ac_t""found" 1>&6
  else
!    MAKEINFO="$missing_dir/missing makeinfo"
!    echo "$ac_t""missing" 1>&6
  fi
  
  
  
! # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
! # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
! # are probably using a cross compiler, which will not be able to fully
! # link an executable.  This should really be fixed in autoconf
! # itself.
  
  
  
  
! # Extract the first word of "gcc", so it can be a program name with args.
! set dummy gcc; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1058: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CC="gcc"
!       break
      fi
    done
!   IFS="$ac_save_ifs"
  fi
  fi
! CC="$ac_cv_prog_CC"
! if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1088: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_prog_rejected=no
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
!         ac_prog_rejected=yes
! 	continue
!       fi
!       ac_cv_prog_CC="cc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
! 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 $# -gt 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
!     set dummy "$ac_dir/$ac_word" "$@"
!     shift
!     ac_cv_prog_CC="$@"
    fi
  fi
  fi
! fi
! CC="$ac_cv_prog_CC"
! if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
!   test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  fi
! 
! echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
! echo "configure:1137: checking whether we are using GNU C" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.c <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
!   ac_cv_prog_gcc=yes
  else
!   ac_cv_prog_gcc=no
  fi
  fi
  
! echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  
! if test $ac_cv_prog_gcc = yes; then
!   GCC=yes
!   ac_test_CFLAGS="${CFLAGS+set}"
!   ac_save_CFLAGS="$CFLAGS"
!   CFLAGS=
!   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
! echo "configure:1161: checking whether ${CC-cc} accepts -g" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   echo 'void f(){}' > conftest.c
! if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
!   ac_cv_prog_cc_g=yes
  else
!   ac_cv_prog_cc_g=no
  fi
! rm -f conftest*
  
  fi
  
! echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
!   if test "$ac_test_CFLAGS" = set; then
!     CFLAGS="$ac_save_CFLAGS"
!   elif test $ac_cv_prog_cc_g = yes; then
!     CFLAGS="-g -O2"
    else
!     CFLAGS="-O2"
    fi
  else
!   GCC=
!   test "${CFLAGS+set}" = set || CFLAGS="-g"
  fi
  
  
! # Likewise for AC_PROG_CXX.
  
  
  
! for ac_prog in $CCC c++ g++ gcc CC cxx cc++
! 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1198: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CXX"; then
!   ac_cv_prog_CXX="$CXX" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CXX="$ac_prog"
!       break
      fi
    done
!   IFS="$ac_save_ifs"
  fi
  fi
! CXX="$ac_cv_prog_CXX"
! if test -n "$CXX"; then
!   echo "$ac_t""$CXX" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
- test -n "$CXX" && break
- done
- test -n "$CXX" || CXX="gcc"
  
- test -z "$CXX" && { echo "configure: error: no acceptable c++ found in \$PATH" 1>&2; exit 1; }
  
! echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
! echo "configure:1231: checking whether we are using GNU C++" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   cat > conftest.C <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
! if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
!   ac_cv_prog_gxx=yes
  else
!   ac_cv_prog_gxx=no
! fi
  fi
  
! echo "$ac_t""$ac_cv_prog_gxx" 1>&6
  
! if test $ac_cv_prog_gxx = yes; then
!   GXX=yes
!   ac_test_CXXFLAGS="${CXXFLAGS+set}"
!   ac_save_CXXFLAGS="$CXXFLAGS"
!   CXXFLAGS=
!   echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
! echo "configure:1255: checking whether ${CXX-g++} accepts -g" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   echo 'void f(){}' > conftest.cc
! if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
!   ac_cv_prog_cxx_g=yes
  else
!   ac_cv_prog_cxx_g=no
  fi
  rm -f conftest*
  
  fi
! 
! echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
!   if test "$ac_test_CXXFLAGS" = set; then
!     CXXFLAGS="$ac_save_CXXFLAGS"
!   elif test $ac_cv_prog_cxx_g = yes; then
!     CXXFLAGS="-g -O2"
!   else
!     CXXFLAGS="-O2"
!   fi
  else
!   GXX=
!   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
  fi
  
  
- # AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD).  If we don't
- # run it explicitly here, it will be run implicitly before
- # NEWLIB_CONFIGURE, which doesn't work because that means that it will
- # be run before AC_CANONICAL_HOST.
- echo $ac_n "checking build system type""... $ac_c" 1>&6
- echo "configure:1288: checking build system type" >&5
  
- build_alias=$build
- case "$build_alias" in
- NONE)
-   case $nonopt in
-   NONE) build_alias=$host_alias ;;
-   *) build_alias=$nonopt ;;
-   esac ;;
- esac
  
- build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
- build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
- build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
- build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
- echo "$ac_t""$build" 1>&6
  
  
! # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
  set dummy ${ac_tool_prefix}as; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1309: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$AS"; then
    ac_cv_prog_AS="$AS" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_AS="${ac_tool_prefix}as"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_AS" && ac_cv_prog_AS="as"
  fi
  fi
! AS="$ac_cv_prog_AS"
  if test -n "$AS"; then
!   echo "$ac_t""$AS" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  
  
! # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1341: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$AR"; then
    ac_cv_prog_AR="$AR" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_AR="${ac_tool_prefix}ar"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
  fi
  fi
! AR="$ac_cv_prog_AR"
  if test -n "$AR"; then
!   echo "$ac_t""$AR" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1373: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
  if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_RANLIB"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1405: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$RANLIB"; then
!   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
! if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   RANLIB=":"
! fi
  fi
  
  
--- 1493,3856 ----
  # 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=gc
!  VERSION=6.3
! 
! 
! # 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"}
! 
! am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
! 
! 
! 
! 
! 
! 
! # The autoconf 2.5x version of the no-executables hack.
! 
! 
! # Yak.  We must force CC and CXX to /not/ be precious variables; otherwise
! # the wrong, non-multilib-adjusted value will be used in multilibs.
! # As a side effect, we have to subst CFLAGS and CXXFLAGS ourselves.
! 
! 
! 
! 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
! # FIXME: Cleanup?
! 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
!   gcc_no_link=no
! else
!   gcc_no_link=yes
! fi
  
! if test x$gcc_no_link = xyes; then
!   # Setting cross_compile will disable run tests; it will
!   # also disable AC_CHECK_FILE but that's generally
!   # correct if we can't link.
!   cross_compiling=yes
!   EXEEXT=
! 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
! 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
  fi
+ 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
+ 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
! 
! 
! 
! 
! 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=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
  
  
  
! 
! if test "x$CC" != xcc; then
!   echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
! echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6
  else
!   echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
! echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6
  fi
+ set dummy $CC; ac_cc=`echo $2 |
+ 		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+ if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+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
! # Make sure it works both with $CC and with simple cc.
! # We do the test twice because some compilers refuse to overwrite an
! # existing .o file with -o, though they will create one.
! ac_try='$CC -c conftest.$ac_ext -o conftest.$ac_objext >&5'
! if { (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); } &&
!    test -f 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 ac_cv_prog_cc_${ac_cc}_c_o=yes
!   if test "x$CC" != xcc; then
!     # Test first that cc exists at all.
!     if { ac_try='cc -c conftest.$ac_ext >&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
!       ac_try='cc -c conftest.$ac_ext -o conftest.$ac_objext >&5'
!       if { (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); } &&
! 	 test -f 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
! 	# cc works too.
! 	:
!       else
! 	# cc exists but doesn't like -o.
! 	eval ac_cv_prog_cc_${ac_cc}_c_o=no
!       fi
!     fi
!   fi
  else
!   eval ac_cv_prog_cc_${ac_cc}_c_o=no
  fi
  rm -f conftest*
  
  fi
! if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then
!   echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
! 
! cat >>confdefs.h <<\_ACEOF
! #define NO_MINUS_C_MINUS_O 1
! _ACEOF
! 
  fi
  
+ # FIXME: we rely on the cache variable name because
+ # there is no other way.
+ set dummy $CC
+ ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+ if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+    # Losing compiler, so override with the script.
+    # FIXME: It is wrong to rewrite CC.
+    # But if we don't then we get into trouble of one sort or another.
+    # A longer-term fix would be to have automake use am__CC in this case,
+    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+    CC="$am_aux_dir/compile $CC"
+ fi
  
  
  
  
  
! # Newer automakes demand CCAS and CCASFLAGS.
! : ${CCAS='$(CC)'}
! : ${CCASFLAGS='$(CFLAGS)'}
! 
! 
! 
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
  set dummy ${ac_tool_prefix}as; 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_AS+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$AS"; then
    ac_cv_prog_AS="$AS" # 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_AS="${ac_tool_prefix}as"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! AS=$ac_cv_prog_AS
  if test -n "$AS"; then
!   echo "$as_me:$LINENO: result: $AS" >&5
! echo "${ECHO_T}$AS" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+ fi
+ if test -z "$ac_cv_prog_AS"; then
+   ac_ct_AS=$AS
+   # Extract the first word of "as", so it can be a program name with args.
+ set dummy as; 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_AS+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_AS"; then
+   ac_cv_prog_ac_ct_AS="$ac_ct_AS" # 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_AS="as"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
  
+ fi
+ fi
+ ac_ct_AS=$ac_cv_prog_ac_ct_AS
+ if test -n "$ac_ct_AS"; then
+   echo "$as_me:$LINENO: result: $ac_ct_AS" >&5
+ echo "${ECHO_T}$ac_ct_AS" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
  
!   AS=$ac_ct_AS
! else
!   AS="$ac_cv_prog_AS"
! fi
! 
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; 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_AR+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$AR"; then
    ac_cv_prog_AR="$AR" # 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_AR="${ac_tool_prefix}ar"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! AR=$ac_cv_prog_AR
  if test -n "$AR"; then
!   echo "$as_me:$LINENO: result: $AR" >&5
! echo "${ECHO_T}$AR" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+ fi
+ if test -z "$ac_cv_prog_AR"; then
+   ac_ct_AR=$AR
+   # Extract the first word of "ar", so it can be a program name with args.
+ set dummy ar; 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_AR+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_AR"; then
+   ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="ar"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
  
+ fi
+ fi
+ ac_ct_AR=$ac_cv_prog_ac_ct_AR
+ if test -n "$ac_ct_AR"; then
+   echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+ echo "${ECHO_T}$ac_ct_AR" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
  
!   AR=$ac_ct_AR
! else
!   AR="$ac_cv_prog_AR"
! fi
! 
! 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
  
  
*************** fi
*** 1441,1516 ****
  # SunOS /usr/etc/install
  # IRIX /sbin/install
  # AIX /bin/install
  # 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"
  # ./install, which can be erroneously created by make from ./install.sh.
! echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:1450: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
! if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
!   for ac_dir in $PATH; do
!     # Account for people who put trailing slashes in PATH elements.
!     case "$ac_dir/" in
!     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
!         if test -f $ac_dir/$ac_prog; then
  	  if test $ac_prog = install &&
!             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
  	    # AIX install.  It has an incompatible calling convention.
  	    :
  	  else
! 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
! 	    break 2
  	  fi
  	fi
        done
!       ;;
!     esac
!   done
!   IFS="$ac_save_IFS"
  
  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 "$ac_t""$INSTALL" 1>&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_PROGRAM}'
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
  
! echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
! echo "configure:1504: checking whether to enable maintainer-specific portions of Makefiles" >&5
      # 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 "$ac_t""$USE_MAINTAINER_MODE" 1>&6
-   
  
  if test $USE_MAINTAINER_MODE = yes; then
    MAINTAINER_MODE_TRUE=
--- 3861,3951 ----
  # 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 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=
*************** else
*** 1519,1574 ****
    MAINTAINER_MODE_TRUE='#'
    MAINTAINER_MODE_FALSE=
  fi
-   MAINT=$MAINTAINER_MODE_TRUE
-   
- 
- 
- # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
- # at least currently, we never actually build a program, so we never
- # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
- # fails, because we are probably configuring with a cross compiler
- # which can't create executables.  So we include AC_EXEEXT to keep
- # automake happy, but we don't execute it, since we don't care about
- # the result.
- if false; then
-   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
-   # to nothing, so nothing would remain between `then' and `fi' if it
-   # were not for the `:' below.
-   :
-   
  
! echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
! echo "configure:1542: checking for executable suffix" >&5
! if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
!   ac_cv_exeext=.exe
! else
!   rm -f conftest*
!   echo 'int main () { return 0; }' > conftest.$ac_ext
!   ac_cv_exeext=
!   if { (eval echo configure:1552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
!     for file in conftest.*; do
!       case $file in
!       *.c | *.o | *.obj) ;;
!       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
!       esac
!     done
!   else
!     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
!   fi
!   rm -f conftest*
!   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
! fi
! fi
  
- EXEEXT=""
- test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
- echo "$ac_t""${ac_cv_exeext}" 1>&6
- ac_exeext=$EXEEXT
  
- fi
  
  . ${srcdir}/configure.host
  
--- 3954,3963 ----
    MAINTAINER_MODE_TRUE='#'
    MAINTAINER_MODE_FALSE=
  fi
  
!   MAINT=$MAINTAINER_MODE_TRUE
  
  
  
  . ${srcdir}/configure.host
  
*************** case ${gc_basedir} in
*** 1577,1583 ****
  *) gc_flagbasedir='$(top_builddir)/'${gc_basedir} ;;
  esac
  
! gc_cflags="${gc_cflags} -I"'$(top_builddir)'"/./targ-include -I${gc_flagbasedir}/libc/include"
  case "${host}" in
    *-*-cygwin32*)
      gc_cflags="${gc_cflags} -I${gc_flagbasedir}/../winsup/include"
--- 3966,3972 ----
  *) gc_flagbasedir='$(top_builddir)/'${gc_basedir} ;;
  esac
  
! gc_cflags="${gc_cflags} -Iinclude -I"'$(top_builddir)'"/./targ-include -I${gc_flagbasedir}/libc/include"
  case "${host}" in
    *-*-cygwin32*)
      gc_cflags="${gc_cflags} -I${gc_flagbasedir}/../winsup/include"
*************** esac
*** 1588,1594 ****
  GC_CFLAGS=${gc_cflags}
  
  
- 
  # Check whether --enable-shared or --disable-shared was given.
  if test "${enable_shared+set}" = set; then
    enableval="$enable_shared"
--- 3977,3982 ----
*************** no) enable_shared=no ;;
*** 1610,1617 ****
  esac
  else
    enable_shared=yes
! fi
! 
  # Check whether --enable-static or --disable-static was given.
  if test "${enable_static+set}" = set; then
    enableval="$enable_static"
--- 3998,4004 ----
  esac
  else
    enable_shared=yes
! fi;
  # Check whether --enable-static or --disable-static was given.
  if test "${enable_static+set}" = set; then
    enableval="$enable_static"
*************** no) enable_static=no ;;
*** 1633,1640 ****
  esac
  else
    enable_static=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"
--- 4020,4026 ----
  esac
  else
    enable_static=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"
*************** no) enable_fast_install=no ;;
*** 1656,1662 ****
  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
--- 4042,4048 ----
  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
*************** if test "${with_gnu_ld+set}" = set; then
*** 1664,1676 ****
    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 $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
! echo "configure:1674: checking for ld used by GCC" >&5
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
--- 4050,4061 ----
    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
*************** echo "configure:1674: checking for ld us
*** 1699,1712 ****
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
!   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
! echo "configure:1704: checking for GNU ld" >&5
  else
!   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
! echo "configure:1707: checking for non-GNU ld" >&5
  fi
! if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
--- 4084,4097 ----
      ;;
    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-:}"
*************** fi
*** 1732,1746 ****
  
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
!   echo "$ac_t""$LD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
! test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
! echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
! echo "configure:1742: checking if the linker ($LD) is GNU ld" >&5
! if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&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
--- 4117,4135 ----
  
  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
*************** else
*** 1749,1775 ****
    lt_cv_prog_gnu_ld=no
  fi
  fi
! 
! echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6
  with_gnu_ld=$lt_cv_prog_gnu_ld
  
  
! echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
! echo "configure:1759: checking for $LD option to reload object files" >&5
! if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_ld_reload_flag='-r'
  fi
! 
! echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  
! echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
! echo "configure:1771: checking for BSD-compatible nm" >&5
! if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$NM"; then
    # Let the user override the test.
--- 4138,4164 ----
    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.
*************** fi
*** 1802,1834 ****
  fi
  
  NM="$lt_cv_path_NM"
! echo "$ac_t""$NM" 1>&6
  
! echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
! echo "configure:1809: checking whether ln -s works" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   rm -f conftestdata
! if ln -s X conftestdata 2>/dev/null
! then
!   rm -f conftestdata
!   ac_cv_prog_LN_S="ln -s"
! else
!   ac_cv_prog_LN_S=ln
! fi
! fi
! LN_S="$ac_cv_prog_LN_S"
! if test "$ac_cv_prog_LN_S" = "ln -s"; then
!   echo "$ac_t""yes" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
! echo "configure:1830: checking how to recognise dependant libraries" >&5
! if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
--- 4191,4214 ----
  fi
  
  NM="$lt_cv_path_NM"
! echo "$as_me:$LINENO: result: $NM" >&5
! echo "${ECHO_T}$NM" >&6
  
! 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
  
! 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=
*************** darwin* | rhapsody*)
*** 1879,1885 ****
    lt_cv_deplibs_check_method=pass_all
    ;;
  
! freebsd* )
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
--- 4259,4265 ----
    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 )
*************** irix5* | irix6*)
*** 1937,1953 ****
  
  # This must be Linux ELF.
  linux-gnu*)
!   case $host_cpu in
!   alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
!     lt_cv_deplibs_check_method=pass_all ;;
!   *)
!     # glibc up to 2.1.1 does not perform some relocations on ARM
!     lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
!   esac
!   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
! netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
    else
--- 4317,4326 ----
  
  # 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
*************** sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
*** 1995,2028 ****
  esac
  
  fi
! 
! echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  
- echo $ac_n "checking for object suffix""... $ac_c" 1>&6
- echo "configure:2005: checking for object suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   rm -f conftest*
- echo 'int i = 1;' > conftest.$ac_ext
- if { (eval echo configure:2011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   for ac_file in conftest.*; do
-     case $ac_file in
-     *.c) ;;
-     *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;;
-     esac
-   done
- else
-   { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; }
- fi
- rm -f conftest*
- fi
  
! echo "$ac_t""$ac_cv_objext" 1>&6
! OBJEXT=$ac_cv_objext
! ac_objext=$ac_cv_objext
  
  # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
  
--- 4368,4381 ----
  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!
  
*************** ac_objext=$ac_cv_objext
*** 2030,2039 ****
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
!     echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
! echo "configure:2035: checking for ${ac_tool_prefix}file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 4383,4392 ----
  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
    /*)
*************** fi
*** 2085,2101 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
!     echo $ac_n "checking for file""... $ac_c" 1>&6
! echo "configure:2097: checking for file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 4438,4456 ----
  
  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
    /*)
*************** fi
*** 2147,2155 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
    else
--- 4502,4512 ----
  
  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
*************** fi
*** 2161,2298 ****
    ;;
  esac
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2168: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
  if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_RANLIB"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2200: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$RANLIB"; then
!   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
! if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   RANLIB=":"
! fi
  fi
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2235: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$STRIP"; then
    ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="${ac_tool_prefix}strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
  if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_STRIP"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "strip", so it can be a program name with args.
  set dummy strip; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2267: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$STRIP"; then
!   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
! if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   STRIP=":"
! fi
  fi
  
  
--- 4518,4681 ----
    ;;
  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
  
  
*************** test "$lt_cv_prog_gnu_ld" = yes && libto
*** 2308,2327 ****
  # 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"
  
--- 4691,4709 ----
  # 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"
  
*************** test x"$pic_mode" = xno && libtool_flags
*** 2330,2337 ****
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 2334 "configure"' > conftest.$ac_ext
!   if { (eval echo configure:2335: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     if test "$lt_cv_prog_gnu_ld" = yes; then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
--- 4712,4723 ----
  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=$?
!   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*)
*************** case $host in
*** 2364,2370 ****
  ia64-*-hpux*)
    # Find out which ABI we are using.
    echo 'int i;' > conftest.$ac_ext
!   if { (eval echo configure:2368: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *ELF-32*)
        HPUX_IA64_MODE="32"
--- 4750,4760 ----
  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"
*************** ia64-*-hpux*)
*** 2380,2386 ****
  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 configure:2384: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *32-bit*)
        case $host in
--- 4770,4780 ----
  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*|ppc*-*linux*|powerpc*-*li
*** 2423,2469 ****
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
!   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
! echo "configure:2428: checking whether the C compiler needs -belf" >&5
! if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
!      cat > conftest.$ac_ext <<EOF
! #line 2441 "configure"
! #include "confdefs.h"
  
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:2448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    lt_cv_cc_needs_belf=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   lt_cv_cc_needs_belf=no
  fi
! rm -f conftest*
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
  fi
! 
! echo "$ac_t""$lt_cv_cc_needs_belf" 1>&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"
--- 4817,4895 ----
    # 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
  
!      if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
*************** echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
*** 2473,2571 ****
  
  esac
  
- echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
- echo "configure:2478: checking how to run the C++ preprocessor" >&5
- if test -z "$CXXCPP"; then
- if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_ext=C
- # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
- ac_cpp='$CXXCPP $CPPFLAGS'
- ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
- ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
- cross_compiling=$ac_cv_prog_cxx_cross
-   CXXCPP="${CXX-g++} -E"
-   cat > conftest.$ac_ext <<EOF
- #line 2491 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
- { (eval echo configure:2496: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
- else
-   echo "$ac_err" >&5
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   CXXCPP=/lib/cpp
- fi
- rm -f conftest*
-   ac_cv_prog_CXXCPP="$CXXCPP"
- ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
- ac_cpp='$CPP $CPPFLAGS'
- ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
- ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
- cross_compiling=$ac_cv_prog_cc_cross
- fi
- fi
- CXXCPP="$ac_cv_prog_CXXCPP"
- echo "$ac_t""$CXXCPP" 1>&6
- 
  
  # Save cache, so that ltconfig can load it
! cat > confcache <<\EOF
  # 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.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # 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 \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     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" \
--- 4899,4961 ----
  
  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" \
*************** objext="$OBJEXT" exeext="$EXEEXT" reload
*** 2575,2589 ****
  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 "configure: error: libtool configure failed" 1>&2; exit 1; }
  
  # Reload cache, that may have been modified by ltconfig
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  
--- 4965,4990 ----
  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
  
  
*************** LIBTOOL='$(SHELL) $(top_builddir)/libtoo
*** 2597,2602 ****
--- 4998,5233 ----
  # clobbered by the next message.
  exec 5>>./config.log
  
+ 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"
*************** deplibs_check_method="$deplibs_check_met
*** 2611,2617 ****
  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 "configure: error: libtool tag configuration failed" 1>&2; exit 1; }
  CC="$lt_save_CC"
  CFLAGS="$lt_save_CFLAGS"
  
--- 5242,5250 ----
  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"
  
*************** CFLAGS="$lt_save_CFLAGS"
*** 2619,2924 ****
  # clobbered by the next message.
  exec 5>>./config.log
  
-   
  
-   
- 	 
- 	 
  
- # Check whether --with-target-subdir or --without-target-subdir was given.
- if test "${with_target_subdir+set}" = set; then
-   withval="$with_target_subdir"
-   :
- fi
  
- # Check whether --with-cross-host or --without-cross-host was given.
- if test "${with_cross_host+set}" = set; then
-   withval="$with_cross_host"
-   :
- fi
  
  
- echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
- echo "configure:2643: checking whether to enable maintainer-specific portions of Makefiles" >&5
-     # 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 "$ac_t""$USE_MAINTAINER_MODE" 1>&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
-   
  
! # automake wants to see AC_EXEEXT.  But we don't need it.  And having
! # it is actually a problem, because the compiler we're passed can't
! # necessarily do a full link.  So we fool automake here.
! if false; then
!   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
!   # to nothing, so nothing would remain between `then' and `fi' if it
!   # were not for the `:' below.
!   :
!   
  
! echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
! echo "configure:2676: checking for executable suffix" >&5
! if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
!   ac_cv_exeext=.exe
! else
!   rm -f conftest*
!   echo 'int main () { return 0; }' > conftest.$ac_ext
!   ac_cv_exeext=
!   if { (eval echo configure:2686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
!     for file in conftest.*; do
!       case $file in
!       *.c | *.o | *.obj) ;;
!       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
!       esac
!     done
!   else
!     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
!   fi
!   rm -f conftest*
!   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
! fi
! fi
  
! EXEEXT=""
! test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
! echo "$ac_t""${ac_cv_exeext}" 1>&6
! ac_exeext=$EXEEXT
  
! fi
  
! echo $ac_n "checking for thread model used by GCC""... $ac_c" 1>&6
! echo "configure:2709: checking for thread model used by GCC" >&5
  THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
  if test -z "$THREADS"; then
     THREADS=no
  fi
! echo "$ac_t""$THREADS" 1>&6
  
  # Check whether --enable-parallel-mark or --disable-parallel-mark was given.
  if test "${enable_parallel_mark+set}" = set; then
    enableval="$enable_parallel_mark"
    case "$THREADS" in
        no | none | single)
! 	{ echo "configure: error: Parallel mark requires --enable-threads=x spec" 1>&2; exit 1; }
  	;;
      esac
  
! fi
! 
  
! INCLUDES="-I`cd $srcdir && ${PWDCMD-pwd}`/include"
  THREADLIBS=
  case "$THREADS" in
   no | none | single)
      THREADS=none
      ;;
!  posix | pthreads)
      THREADS=posix
      THREADLIBS=-lpthread
      case "$host" in
       x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
! 	cat >> confdefs.h <<\EOF
  #define GC_LINUX_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
          if test "${enable_parallel_mark}" = yes; then
! 	  cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
  	fi
! 	cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
  	;;
       *-*-linux*)
! 	cat >> confdefs.h <<\EOF
  #define GC_LINUX_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
  	;;
       *-*-aix*)
! 	cat >> confdefs.h <<\EOF
  #define GC_AIX_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
  	;;
       *-*-hpux*)
! 	echo "configure: warning: "Only HP/UX 11 threads are supported."" 1>&2
! 	cat >> confdefs.h <<\EOF
  #define GC_HPUX_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define _POSIX_C_SOURCE 199506L
! EOF
  
  	if test "${enable_parallel_mark}" = yes; then
! 	  cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
  	fi
! 	cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
  	THREADLIBS="-lpthread -lrt"
  	;;
       *-*-freebsd*)
! 	echo "configure: warning: "FreeBSD does not yet fully support threads with Boehm GC."" 1>&2
! 	cat >> confdefs.h <<\EOF
  #define GC_FREEBSD_THREADS 1
! EOF
  
! 	INCLUDES="$INCLUDES -pthread"
  	THREADLIBS=-pthread
        	;;
       *-*-solaris*)
! 	cat >> confdefs.h <<\EOF
  #define GC_SOLARIS_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define GC_SOLARIS_PTHREADS 1
! EOF
  
  	;;
       *-*-irix*)
! 	cat >> confdefs.h <<\EOF
  #define GC_IRIX_THREADS 1
! EOF
  
  	;;
       *-*-cygwin*)
! 	cat >> confdefs.h <<\EOF
  #define GC_WIN32_THREADS 1
! EOF
  
  	;;
       *-*-darwin*)
! 	cat >> confdefs.h <<\EOF
  #define GC_DARWIN_THREADS 1
! EOF
  
! 	cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
  	if test "${enable_parallel_mark}" = yes; then
! 	  cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
  	fi
  	;;
       *-*-osf*)
! 	cat >> confdefs.h <<\EOF
  #define GC_OSF1_THREADS 1
! EOF
  
          if test "${enable_parallel_mark}" = yes; then
! 	  cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
! 	  cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
  	  # May want to enable it in other cases, too.
  	  # Measurements havent yet been done.
  	fi
! 	INCLUDES="$INCLUDES -pthread"
  	THREADLIBS="-lpthread -lrt"
  	;;
      esac
      ;;
   win32)
!     cat >> confdefs.h <<\EOF
  #define GC_WIN32_THREADS 1
! EOF
  
              ;;
   dgux386)
      THREADS=dgux386
! echo "$ac_t""$THREADLIBS" 1>&6
      # Use pthread GCC  switch
      THREADLIBS=-pthread
      if test "${enable_parallel_mark}" = yes; then
!         cat >> confdefs.h <<\EOF
  #define PARALLEL_MARK 1
! EOF
  
      fi
!     cat >> confdefs.h <<\EOF
  #define THREAD_LOCAL_ALLOC 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define GC_DGUX386_THREADS 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define DGUX_THREADS 1
! EOF
  
      # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
!     INCLUDES="-pthread $INCLUDES"
      ;;
   aix)
      THREADS=posix
      THREADLIBS=-lpthread
!     cat >> confdefs.h <<\EOF
  #define GC_AIX_THREADS 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
      ;;
   decosf1 | irix | mach | os2 | solaris | dce | vxworks)
!     { echo "configure: error: thread package $THREADS not yet supported" 1>&2; exit 1; }
      ;;
   *)
!     { echo "configure: error: $THREADS is an unknown thread package" 1>&2; exit 1; }
      ;;
  esac
  
  
! case "$host" in 
     powerpc-*-darwin*)
        powerpc_darwin=true
        ;;
--- 5252,5516 ----
  # clobbered by the next message.
  exec 5>>./config.log
  
  
  
  
  
  
  
  
! # Check whether --with-target-subdir or --without-target-subdir was given.
! if test "${with_target_subdir+set}" = set; then
!   withval="$with_target_subdir"
  
! fi;
  
! # Check whether --with-cross-host or --without-cross-host was given.
! if test "${with_cross_host+set}" = set; then
!   withval="$with_cross_host"
  
! fi;
  
! echo "$as_me:$LINENO: checking for thread model used by GCC" >&5
! echo $ECHO_N "checking for thread model used by GCC... $ECHO_C" >&6
  THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
  if test -z "$THREADS"; then
     THREADS=no
  fi
! echo "$as_me:$LINENO: result: $THREADS" >&5
! echo "${ECHO_T}$THREADS" >&6
  
  # Check whether --enable-parallel-mark or --disable-parallel-mark was given.
  if test "${enable_parallel_mark+set}" = set; then
    enableval="$enable_parallel_mark"
    case "$THREADS" in
        no | none | single)
! 	{ { echo "$as_me:$LINENO: error: Parallel mark requires --enable-threads=x spec" >&5
! echo "$as_me: error: Parallel mark requires --enable-threads=x spec" >&2;}
!    { (exit 1); exit 1; }; }
  	;;
      esac
  
! fi;
  
! AM_CPPFLAGS="-I`cd $srcdir && ${PWDCMD-pwd}`/include"
  THREADLIBS=
  case "$THREADS" in
   no | none | single)
      THREADS=none
      ;;
!  posix | posix95 | pthreads)
      THREADS=posix
      THREADLIBS=-lpthread
      case "$host" in
       x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_LINUX_THREADS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
          if test "${enable_parallel_mark}" = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
  	fi
! 
! cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
  	;;
       *-*-linux*)
! 	cat >>confdefs.h <<\_ACEOF
  #define GC_LINUX_THREADS 1
! _ACEOF
  
! 	cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
  	;;
       *-*-aix*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_AIX_THREADS 1
! _ACEOF
  
! 	cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
  	;;
       *-*-hpux*)
! 	{ echo "$as_me:$LINENO: WARNING: \"Only HP/UX 11 threads are supported.\"" >&5
! echo "$as_me: WARNING: \"Only HP/UX 11 threads are supported.\"" >&2;}
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_HPUX_THREADS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define _POSIX_C_SOURCE 199506L
! _ACEOF
  
  	if test "${enable_parallel_mark}" = yes; then
! 	  cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
  	fi
! 	cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
  	THREADLIBS="-lpthread -lrt"
  	;;
       *-*-freebsd*)
! 	{ echo "$as_me:$LINENO: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&5
! echo "$as_me: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&2;}
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_FREEBSD_THREADS 1
! _ACEOF
  
! 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
  	THREADLIBS=-pthread
        	;;
       *-*-solaris*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_SOLARIS_THREADS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_SOLARIS_PTHREADS 1
! _ACEOF
  
  	;;
       *-*-irix*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_IRIX_THREADS 1
! _ACEOF
  
  	;;
       *-*-cygwin*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_WIN32_THREADS 1
! _ACEOF
  
  	;;
       *-*-darwin*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_DARWIN_THREADS 1
! _ACEOF
  
! 	cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
  	if test "${enable_parallel_mark}" = yes; then
! 	  cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
  	fi
  	;;
       *-*-osf*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_OSF1_THREADS 1
! _ACEOF
  
          if test "${enable_parallel_mark}" = yes; then
! 	  cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
! 	  cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
  	  # May want to enable it in other cases, too.
  	  # Measurements havent yet been done.
  	fi
! 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
  	THREADLIBS="-lpthread -lrt"
  	;;
      esac
      ;;
   win32)
!     cat >>confdefs.h <<\_ACEOF
  #define GC_WIN32_THREADS 1
! _ACEOF
  
              ;;
   dgux386)
      THREADS=dgux386
! echo "$as_me:$LINENO: result: $THREADLIBS" >&5
! echo "${ECHO_T}$THREADLIBS" >&6
      # Use pthread GCC  switch
      THREADLIBS=-pthread
      if test "${enable_parallel_mark}" = yes; then
!         cat >>confdefs.h <<\_ACEOF
  #define PARALLEL_MARK 1
! _ACEOF
  
      fi
!     cat >>confdefs.h <<\_ACEOF
  #define THREAD_LOCAL_ALLOC 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_DGUX386_THREADS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define DGUX_THREADS 1
! _ACEOF
  
      # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
!     AM_CPPFLAGS="-pthread $AM_CPPFLAGS"
      ;;
   aix)
      THREADS=posix
      THREADLIBS=-lpthread
!     cat >>confdefs.h <<\_ACEOF
  #define GC_AIX_THREADS 1
! _ACEOF
  
!     cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
      ;;
   decosf1 | irix | mach | os2 | solaris | dce | vxworks)
!     { { echo "$as_me:$LINENO: error: thread package $THREADS not yet supported" >&5
! echo "$as_me: error: thread package $THREADS not yet supported" >&2;}
!    { (exit 1); exit 1; }; }
      ;;
   *)
!     { { echo "$as_me:$LINENO: error: $THREADS is an unknown thread package" >&5
! echo "$as_me: error: $THREADS is an unknown thread package" >&2;}
!    { (exit 1); exit 1; }; }
      ;;
  esac
  
  
! case "$host" in
     powerpc-*-darwin*)
        powerpc_darwin=true
        ;;
*************** else
*** 2933,2981 ****
    POWERPC_DARWIN_FALSE=
  fi
  
  # We never want libdl on darwin. It is a fake libdl that just ends up making
  # dyld calls anyway
  case "$host" in
    *-*-darwin*) ;;
!   *) 
!     echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
! echo "configure:2943: checking for dlopen in -ldl" >&5
! ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-ldl  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 2951 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char dlopen();
! 
! int main() {
! dlopen()
! ; return 0; }
! EOF
! if { (eval echo configure:2962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
      ;;
--- 5525,5607 ----
    POWERPC_DARWIN_FALSE=
  fi
  
+ 
  # We never want libdl on darwin. It is a fake libdl that just ends up making
  # dyld calls anyway
  case "$host" in
    *-*-darwin*) ;;
!   *)
!     echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
! echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
! if test "${ac_cv_lib_dl_dlopen+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 dlopen ();
! int
! main ()
! {
! dlopen ();
!   ;
!   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_dl_dlopen=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
! echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
! if test $ac_cv_lib_dl_dlopen = yes; then
    EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl"
  fi
  
      ;;
*************** esac
*** 2986,3015 ****
  target_all=libgcjgc.la
  
  
- 
  TARGET_ECOS="no"
  # Check whether --with-ecos or --without-ecos was given.
  if test "${with_ecos+set}" = set; then
    withval="$with_ecos"
    TARGET_ECOS="$with_ecos"
  
! fi
! 
  
  addobjs=
  addlibs=
  addincludes=
  addtests=
- CXXINCLUDES=
  case "$TARGET_ECOS" in
     no)
        ;;
     *)
!       cat >> confdefs.h <<\EOF
  #define ECOS 1
! EOF
  
!       CXXINCLUDES="-I${TARGET_ECOS}/include"
        addobjs="$addobjs ecos.lo"
        ;;
  esac
--- 5612,5640 ----
  target_all=libgcjgc.la
  
  
  TARGET_ECOS="no"
+ 
  # Check whether --with-ecos or --without-ecos was given.
  if test "${with_ecos+set}" = set; then
    withval="$with_ecos"
    TARGET_ECOS="$with_ecos"
  
! fi;
  
  addobjs=
  addlibs=
  addincludes=
  addtests=
  case "$TARGET_ECOS" in
     no)
        ;;
     *)
! 
! cat >>confdefs.h <<\_ACEOF
  #define ECOS 1
! _ACEOF
  
!       AM_CPPFLAGS="${AM_CPPFLAGS} -I${TARGET_ECOS}/include"
        addobjs="$addobjs ecos.lo"
        ;;
  esac
*************** fi
*** 3036,3043 ****
  
  # Configuration of shared libraries
  #
! echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6
! echo "configure:3041: checking whether to build shared libraries" >&5
  # Check whether --enable-shared or --disable-shared was given.
  if test "${enable_shared+set}" = set; then
    enableval="$enable_shared"
--- 5661,5668 ----
  
  # Configuration of shared libraries
  #
! echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
! echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
  # Check whether --enable-shared or --disable-shared was given.
  if test "${enable_shared+set}" = set; then
    enableval="$enable_shared"
*************** no) enable_shared=no ;;
*** 3059,3074 ****
  esac
  else
    enable_shared=yes
! fi
! 
  
  case "$host" in
   alpha-*-openbsd*)
       enable_shared=no
!      echo "$ac_t""no" 1>&6
       ;;
   *)
!      echo "$ac_t""yes" 1>&6
       ;;
  esac
  
--- 5684,5700 ----
  esac
  else
    enable_shared=yes
! fi;
  
  case "$host" in
   alpha-*-openbsd*)
       enable_shared=no
!      echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
       ;;
   *)
!      echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
       ;;
  esac
  
*************** esac
*** 3076,3113 ****
  #
  # We don't set NO_EXECUTE_PERMISSION by default because gcj (and
  # anything else that creates trampolines in gc-allocated memory)
! # always needs exec permission.  The exception to this is IA-64 and
  # some variations of Power PC, where trampolines don't contain
  # executable code.
  #
! echo $ac_n "checking which machine-dependent code should be used""... $ac_c" 1>&6
! echo "configure:3085: checking which machine-dependent code should be used" >&5 
  machdep=
  case "$host" in
   alpha*-*-openbsd*)
      machdep="alpha_mach_dep.lo"
      if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
!        echo "configure: warning: OpenBSD/Alpha without dlopen(). Shared library support is disabled" 1>&2
      fi
      ;;
   alpha*-*-linux*)
      machdep="alpha_mach_dep.lo"
      ;;
   i?86-*-solaris2.[89] | i?86-*-solaris2.1?)
!     cat >> confdefs.h <<\EOF
  #define SOLARIS25_PROC_VDB_BUG_FIXED 1
! EOF
  
      ;;
   mipstx39-*-elf*)
      machdep="mips_ultrix_mach_dep.lo"
!     cat >> confdefs.h <<\EOF
  #define STACKBASE __stackbase
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define DATASTART_IS_ETEXT 1
! EOF
  
      ;;
   mips-dec-ultrix*)
--- 5702,5743 ----
  #
  # We don't set NO_EXECUTE_PERMISSION by default because gcj (and
  # anything else that creates trampolines in gc-allocated memory)
! # always needs exec permission.  The exceptions to this are IA-64 and
  # some variations of Power PC, where trampolines don't contain
  # executable code.
  #
! echo "$as_me:$LINENO: checking which machine-dependent code should be used" >&5
! echo $ECHO_N "checking which machine-dependent code should be used... $ECHO_C" >&6
  machdep=
  case "$host" in
   alpha*-*-openbsd*)
      machdep="alpha_mach_dep.lo"
      if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
!        { echo "$as_me:$LINENO: WARNING: OpenBSD/Alpha without dlopen(). Shared library support is disabled" >&5
! echo "$as_me: WARNING: OpenBSD/Alpha without dlopen(). Shared library support is disabled" >&2;}
      fi
      ;;
   alpha*-*-linux*)
      machdep="alpha_mach_dep.lo"
      ;;
   i?86-*-solaris2.[89] | i?86-*-solaris2.1?)
! 
! cat >>confdefs.h <<\_ACEOF
  #define SOLARIS25_PROC_VDB_BUG_FIXED 1
! _ACEOF
  
      ;;
   mipstx39-*-elf*)
      machdep="mips_ultrix_mach_dep.lo"
! 
! cat >>confdefs.h <<\_ACEOF
  #define STACKBASE __stackbase
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define DATASTART_IS_ETEXT 1
! _ACEOF
  
      ;;
   mips-dec-ultrix*)
*************** EOF
*** 3115,3122 ****
      ;;
   mips-nec-sysv*|mips-unknown-sysv*)
      ;;
!  mips*-*-linux*) 
!     ;; 
   mips-*-*)
      machdep="mips_sgi_mach_dep.lo"
      ;;
--- 5745,5752 ----
      ;;
   mips-nec-sysv*|mips-unknown-sysv*)
      ;;
!  mips*-*-linux*)
!     ;;
   mips-*-*)
      machdep="mips_sgi_mach_dep.lo"
      ;;
*************** EOF
*** 3125,3148 ****
      ;;
   sparc-sun-solaris2.3)
      machdep="sparc_mach_dep.lo"
!     cat >> confdefs.h <<\EOF
  #define SUNOS53_SHARED_LIB 1
! EOF
  
      ;;
!  sparc-sun-solaris2.*)
      machdep="sparc_mach_dep.lo"
      ;;
   ia64-*-*)
!     cat >> confdefs.h <<\EOF
  #define NO_EXECUTE_PERMISSION 1
! EOF
  
      machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
      ;;
  esac
  if test x"$machdep" = x; then
! echo "$ac_t""$machdep" 1>&6
     machdep="mach_dep.lo"
  fi
  addobjs="$addobjs $machdep"
--- 5755,5781 ----
      ;;
   sparc-sun-solaris2.3)
      machdep="sparc_mach_dep.lo"
! 
! cat >>confdefs.h <<\_ACEOF
  #define SUNOS53_SHARED_LIB 1
! _ACEOF
  
      ;;
!  sparc*-sun-solaris2.*)
      machdep="sparc_mach_dep.lo"
      ;;
   ia64-*-*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define NO_EXECUTE_PERMISSION 1
! _ACEOF
  
      machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
      ;;
  esac
  if test x"$machdep" = x; then
! echo "$as_me:$LINENO: result: $machdep" >&5
! echo "${ECHO_T}$machdep" >&6
     machdep="mach_dep.lo"
  fi
  addobjs="$addobjs $machdep"
*************** addobjs="$addobjs $machdep"
*** 3151,3358 ****
  
  
  
-   
- 
-   
- 	 
- 	 
- 
  #
  # Check for AViiON Machines running DGUX
  #
! echo $ac_n "checking if host is AViiON running DGUX""... $ac_c" 1>&6
! echo "configure:3165: checking if host is AViiON running DGUX" >&5
  ac_is_dgux=no
! echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
! echo "configure:3168: checking how to run the C preprocessor" >&5
  # On Suns, sometimes $CPP names a directory.
  if test -n "$CPP" && test -d "$CPP"; then
    CPP=
  fi
  if test -z "$CPP"; then
! if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     # This must be in double quotes, not single quotes, because CPP may get
!   # substituted into the Makefile and "${CC-cc}" will confuse make.
!   CPP="${CC-cc} -E"
    # On the NeXT, cc -E runs the code through the compiler's parser,
!   # not just through cpp.
!   cat > conftest.$ac_ext <<EOF
! #line 3183 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -E -traditional-cpp"
!   cat > conftest.$ac_ext <<EOF
! #line 3200 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
    :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -nologo -E"
!   cat > conftest.$ac_ext <<EOF
! #line 3217 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP=/lib/cpp
  fi
! rm -f conftest*
  fi
! rm -f conftest*
  fi
! rm -f conftest*
!   ac_cv_prog_CPP="$CPP"
  fi
!   CPP="$ac_cv_prog_CPP"
  else
!   ac_cv_prog_CPP="$CPP"
  fi
! echo "$ac_t""$CPP" 1>&6
! 
! ac_safe=`echo "sys/dg_sys_info.h" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for sys/dg_sys_info.h""... $ac_c" 1>&6
! echo "configure:3249: checking for sys/dg_sys_info.h" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3254 "configure"
! #include "confdefs.h"
! #include <sys/dg_sys_info.h>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3259: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
! rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   ac_is_dgux=yes;
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  
! echo "$ac_t""$ac_is_dgux" 1>&6 
!     ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
! if test $ac_is_dgux = yes; then
!     if test "$enable_full_debug" = "yes"; then
!       CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
!       CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
!     else
!       CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
!       CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
      fi
-     
-     
  fi
  
! # Check whether --with-target-subdir or --without-target-subdir was given.
! if test "${with_target_subdir+set}" = set; then
!   withval="$with_target_subdir"
    :
  fi
  
! # Check whether --with-cross-host or --without-cross-host was given.
! if test "${with_cross_host+set}" = set; then
!   withval="$with_cross_host"
    :
  fi
  
  
! # automake wants to see AC_EXEEXT.  But we don't need it.  And having
! # it is actually a problem, because the compiler we're passed can't
! # necessarily do a full link.  So we fool automake here.
! if false; then
!   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
!   # to nothing, so nothing would remain between `then' and `fi' if it
!   # were not for the `:' below.
    :
!   
  
! echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
! echo "configure:3319: checking for executable suffix" >&5
! if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
!   ac_cv_exeext=.exe
  else
!   rm -f conftest*
!   echo 'int main () { return 0; }' > conftest.$ac_ext
!   ac_cv_exeext=
!   if { (eval echo configure:3329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
!     for file in conftest.*; do
!       case $file in
!       *.c | *.o | *.obj) ;;
!       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
!       esac
!     done
    else
!     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
    fi
!   rm -f conftest*
!   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
  fi
  fi
  
- EXEEXT=""
- test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
- echo "$ac_t""${ac_cv_exeext}" 1>&6
- ac_exeext=$EXEEXT
  
  fi
  
! echo $ac_n "checking whether Solaris gcc optimization fix is necessary""... $ac_c" 1>&6
! echo "configure:3352: checking whether Solaris gcc optimization fix is necessary" >&5
  case "$host" in
!  sparc-sun-solaris2*|*aix*)
      if test "$GCC" = yes; then
!        echo "$ac_t""yes" 1>&6
         new_CFLAGS=
         for i in $CFLAGS; do
  	  case "$i" in
--- 5784,6448 ----
  
  
  
  #
  # Check for AViiON Machines running DGUX
  #
! echo "$as_me:$LINENO: checking if host is AViiON running DGUX" >&5
! echo $ECHO_N "checking if host is AViiON running DGUX... $ECHO_C" >&6
  ac_is_dgux=no
! 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
! 
! 
! if test "${ac_cv_header_sys_dg_sys_info_h+set}" = set; then
!   echo "$as_me:$LINENO: checking for sys/dg_sys_info.h" >&5
! echo $ECHO_N "checking for sys/dg_sys_info.h... $ECHO_C" >&6
! if test "${ac_cv_header_sys_dg_sys_info_h+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! fi
! echo "$as_me:$LINENO: result: $ac_cv_header_sys_dg_sys_info_h" >&5
! echo "${ECHO_T}$ac_cv_header_sys_dg_sys_info_h" >&6
! else
!   # Is the header compilable?
! echo "$as_me:$LINENO: checking sys/dg_sys_info.h usability" >&5
! echo $ECHO_N "checking sys/dg_sys_info.h 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 <sys/dg_sys_info.h>
! _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 sys/dg_sys_info.h presence" >&5
! echo $ECHO_N "checking sys/dg_sys_info.h 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 <sys/dg_sys_info.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
!   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: sys/dg_sys_info.h: accepted by the compiler, rejected by the preprocessor!" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: proceeding with the compiler's result" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: proceeding with the compiler's result" >&2;}
+     ac_header_preproc=yes
+     ;;
+   no:yes:* )
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: present but cannot be compiled" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: present but cannot be compiled" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h:     check for missing prerequisite headers?" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h:     check for missing prerequisite headers?" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: see the Autoconf documentation" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: see the Autoconf documentation" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h:     section \"Present But Cannot Be Compiled\"" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&2;}
+     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: sys/dg_sys_info.h: in the future, the compiler will take precedence" >&2;}
+     (
+       cat <<\_ASBOX
+ ## ------------------------------------------ ##
+ ## Report this to the AC_PACKAGE_NAME lists.  ##
+ ## ------------------------------------------ ##
+ _ASBOX
+     ) |
+       sed "s/^/$as_me: WARNING:     /" >&2
+     ;;
+ esac
+ echo "$as_me:$LINENO: checking for sys/dg_sys_info.h" >&5
+ echo $ECHO_N "checking for sys/dg_sys_info.h... $ECHO_C" >&6
+ if test "${ac_cv_header_sys_dg_sys_info_h+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   ac_cv_header_sys_dg_sys_info_h=$ac_header_preproc
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_header_sys_dg_sys_info_h" >&5
+ echo "${ECHO_T}$ac_cv_header_sys_dg_sys_info_h" >&6
+ 
+ fi
+ if test $ac_cv_header_sys_dg_sys_info_h = yes; then
+   ac_is_dgux=yes;
+ fi
+ 
+ 
+ 
+ echo "$as_me:$LINENO: result: $ac_is_dgux" >&5
+ echo "${ECHO_T}$ac_is_dgux" >&6
+     ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
+ if test $ac_is_dgux = yes; then
+     if test "$enable_full_debug" = "yes"; then
+       CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+       CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+     else
+       CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+       CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+     fi
  
  
  fi
  
! echo "$as_me:$LINENO: checking whether Solaris gcc optimization fix is necessary" >&5
! echo $ECHO_N "checking whether Solaris gcc optimization fix is necessary... $ECHO_C" >&6
  case "$host" in
!  *aix*)
      if test "$GCC" = yes; then
!        echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
         new_CFLAGS=
         for i in $CFLAGS; do
  	  case "$i" in
*************** case "$host" in
*** 3365,3464 ****
         done
         CFLAGS="$new_CFLAGS"
      else
!        echo "$ac_t""no" 1>&6
      fi
      ;;
!  *) echo "$ac_t""no" 1>&6 ;;
  esac
  
  MY_CFLAGS="$CFLAGS"
  
  
! cat >> confdefs.h <<\EOF
  #define SILENT 1
! EOF
  
! cat >> confdefs.h <<\EOF
  #define NO_SIGNALS 1
! EOF
  
! cat >> confdefs.h <<\EOF
  #define ALL_INTERIOR_POINTERS 1
! EOF
  
  
! cat >> confdefs.h <<\EOF
  #define JAVA_FINALIZATION 1
! EOF
  
! cat >> confdefs.h <<\EOF
  #define GC_GCJ_SUPPORT 1
! EOF
  
! cat >> confdefs.h <<\EOF
  #define ATOMIC_UNCOLLECTABLE 1
! EOF
  
  
  if test -n "${with_cross_host}"; then
!    cat >> confdefs.h <<\EOF
  #define NO_SIGSET 1
! EOF
  
!    cat >> confdefs.h <<\EOF
  #define NO_DEBUGGING 1
! EOF
  
  fi
  
! # Check whether --enable-full-debug or --disable-full-debug was given.
! if test "${enable_full_debug+set}" = set; then
!   enableval="$enable_full_debug"
!    if test "$enable_full_debug" = "yes"; then
!     echo "configure: warning: "Must define GC_DEBUG and use debug alloc. in clients."" 1>&2
!     cat >> confdefs.h <<\EOF
  #define KEEP_BACK_PTRS 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define DBG_HDRS_ALL 1
! EOF
  
      case $host in
        ia64-*-linux* )
! 	cat >> confdefs.h <<\EOF
  #define MAKE_BACK_GRAPH 1
! EOF
  
        ;;
        x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
! 	cat >> confdefs.h <<\EOF
  #define MAKE_BACK_GRAPH 1
! EOF
  
! 	echo "configure: warning: "Client must not use -fomit-frame-pointer."" 1>&2
! 	cat >> confdefs.h <<\EOF
  #define SAVE_CALL_COUNT 8
! EOF
  
        ;;
        i345686-*-dgux*)
! 	cat >> confdefs.h <<\EOF
  #define MAKE_BACK_GRAPH 1
! EOF
  
        ;;
!     esac 
    fi
! fi
  
  
  if test -n "$with_cross_host" &&
     test x"$with_cross_host" != x"no"; then
!   toolexecdir='$(exec_prefix)/$(target_alias)'
    toolexeclibdir='$(toolexecdir)/lib'
  else
!   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
    toolexeclibdir='$(libdir)'
  fi
  multi_os_directory=`$CC -print-multi-os-directory`
--- 6455,6577 ----
         done
         CFLAGS="$new_CFLAGS"
      else
!        echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
      fi
      ;;
!  *) echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6 ;;
  esac
  
  MY_CFLAGS="$CFLAGS"
  
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define SILENT 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define NO_SIGNALS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define ALL_INTERIOR_POINTERS 1
! _ACEOF
  
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define JAVA_FINALIZATION 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define GC_GCJ_SUPPORT 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define ATOMIC_UNCOLLECTABLE 1
! _ACEOF
  
  
  if test -n "${with_cross_host}"; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define NO_SIGSET 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define NO_DEBUGGING 1
! _ACEOF
  
  fi
  
! # Check whether --enable-gc-debug or --disable-gc-debug was given.
! if test "${enable_gc_debug+set}" = set; then
!   enableval="$enable_gc_debug"
!    if test "$enable_gc_debug" = "yes"; then
!     { echo "$as_me:$LINENO: WARNING: \"Must define GC_DEBUG and use debug alloc. in clients.\"" >&5
! echo "$as_me: WARNING: \"Must define GC_DEBUG and use debug alloc. in clients.\"" >&2;}
! 
! cat >>confdefs.h <<\_ACEOF
  #define KEEP_BACK_PTRS 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define DBG_HDRS_ALL 1
! _ACEOF
  
      case $host in
        ia64-*-linux* )
! 
! cat >>confdefs.h <<\_ACEOF
  #define MAKE_BACK_GRAPH 1
! _ACEOF
  
        ;;
        x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
! 	cat >>confdefs.h <<\_ACEOF
  #define MAKE_BACK_GRAPH 1
! _ACEOF
  
! 	{ echo "$as_me:$LINENO: WARNING: \"Client must not use -fomit-frame-pointer.\"" >&5
! echo "$as_me: WARNING: \"Client must not use -fomit-frame-pointer.\"" >&2;}
! 
! cat >>confdefs.h <<\_ACEOF
  #define SAVE_CALL_COUNT 8
! _ACEOF
  
        ;;
        i345686-*-dgux*)
! 	cat >>confdefs.h <<\_ACEOF
  #define MAKE_BACK_GRAPH 1
! _ACEOF
  
        ;;
!     esac
    fi
! fi;
  
+ if test "${gc_use_mmap}" = "yes"; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define USE_MMAP 1
+ _ACEOF
+ 
+ fi
  
  if test -n "$with_cross_host" &&
     test x"$with_cross_host" != x"no"; then
!   toolexecdir='$(exec_prefix)/$(target_noncanonical)'
    toolexeclibdir='$(toolexecdir)/lib'
  else
!   toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
    toolexeclibdir='$(libdir)'
  fi
  multi_os_directory=`$CC -print-multi-os-directory`
*************** else
*** 3475,3811 ****
    multilib_arg=
  fi
  
! trap '' 1 2 15
! cat > confcache <<\EOF
  # 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.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # 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 \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     echo "updating cache $cache_file"
!     cat confcache > $cache_file
    else
      echo "not updating unwritable cache $cache_file"
    fi
  fi
  rm -f confcache
  
- trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
- 
  test "x$prefix" = xNONE && prefix=$ac_default_prefix
  # Let make expand exec_prefix.
  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  
! # Any assignment to VPATH causes Sun make to only execute
! # the first set of double-colon rules, so remove it if not needed.
! # If there is a colon in the path, we need to keep it.
  if test "x$srcdir" = x.; then
!   ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  fi
  
! trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
  
! # Transform confdefs.h into DEFS.
! # Protect against shell expansion while executing Makefile rules.
! # Protect against Makefile macro expansion.
! cat > conftest.defs <<\EOF
! s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
! s%[ 	`~#$^&*(){}\\|;'"<>?]%\\&%g
! s%\[%\\&%g
! s%\]%\\&%g
! s%\$%$$%g
! EOF
! DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
! rm -f conftest.defs
  
  
- # Without the "./", some shells look in PATH for config.status.
- : ${CONFIG_STATUS=./config.status}
  
! echo creating $CONFIG_STATUS
! rm -f $CONFIG_STATUS
! cat > $CONFIG_STATUS <<EOF
! #! /bin/sh
! # Generated automatically by configure.
  # Run this file to recreate the current configuration.
- # This directory was configured as follows,
- # on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
- #
- # $0 $ac_configure_args
- #
  # Compiler output produced by configure, useful for debugging
! # configure, is in ./config.log if it exists.
  
! ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
! for ac_option
  do
!   case "\$ac_option" in
    -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
!     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
!   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
!     echo "$CONFIG_STATUS generated by autoconf version 2.13"
!     exit 0 ;;
!   -help | --help | --hel | --he | --h)
!     echo "\$ac_cs_usage"; exit 0 ;;
!   *) echo "\$ac_cs_usage"; exit 1 ;;
    esac
  done
  
! ac_given_srcdir=$srcdir
! ac_given_INSTALL="$INSTALL"
  
! trap 'rm -fr `echo "Makefile include/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
! EOF
! cat >> $CONFIG_STATUS <<EOF
  
! # Protect against being on the right side of a sed subst in config.status.
! sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
!  s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
! $ac_vpsub
! $extrasub
! s%@SHELL@%$SHELL%g
! s%@CFLAGS@%$CFLAGS%g
! s%@CPPFLAGS@%$CPPFLAGS%g
! s%@CXXFLAGS@%$CXXFLAGS%g
! s%@FFLAGS@%$FFLAGS%g
! s%@DEFS@%$DEFS%g
! s%@LDFLAGS@%$LDFLAGS%g
! s%@LIBS@%$LIBS%g
! s%@exec_prefix@%$exec_prefix%g
! s%@prefix@%$prefix%g
! s%@program_transform_name@%$program_transform_name%g
! s%@bindir@%$bindir%g
! s%@sbindir@%$sbindir%g
! s%@libexecdir@%$libexecdir%g
! s%@datadir@%$datadir%g
! s%@sysconfdir@%$sysconfdir%g
! s%@sharedstatedir@%$sharedstatedir%g
! s%@localstatedir@%$localstatedir%g
! s%@libdir@%$libdir%g
! s%@includedir@%$includedir%g
! s%@oldincludedir@%$oldincludedir%g
! s%@infodir@%$infodir%g
! s%@mandir@%$mandir%g
! s%@gc_basedir@%$gc_basedir%g
! s%@host@%$host%g
! s%@host_alias@%$host_alias%g
! s%@host_cpu@%$host_cpu%g
! s%@host_vendor@%$host_vendor%g
! s%@host_os@%$host_os%g
! s%@target@%$target%g
! s%@target_alias@%$target_alias%g
! s%@target_cpu@%$target_cpu%g
! s%@target_vendor@%$target_vendor%g
! s%@target_os@%$target_os%g
! s%@build@%$build%g
! s%@build_alias@%$build_alias%g
! s%@build_cpu@%$build_cpu%g
! s%@build_vendor@%$build_vendor%g
! s%@build_os@%$build_os%g
! s%@mkinstalldirs@%$mkinstalldirs%g
! s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
! s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
! s%@INSTALL_DATA@%$INSTALL_DATA%g
! s%@PACKAGE@%$PACKAGE%g
! s%@VERSION@%$VERSION%g
! s%@ACLOCAL@%$ACLOCAL%g
! s%@AUTOCONF@%$AUTOCONF%g
! s%@AUTOMAKE@%$AUTOMAKE%g
! s%@AUTOHEADER@%$AUTOHEADER%g
! s%@MAKEINFO@%$MAKEINFO%g
! s%@SET_MAKE@%$SET_MAKE%g
! s%@CC@%$CC%g
! s%@CXX@%$CXX%g
! s%@AS@%$AS%g
! s%@AR@%$AR%g
! s%@RANLIB@%$RANLIB%g
! s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
! s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
! s%@MAINT@%$MAINT%g
! s%@EXEEXT@%$EXEEXT%g
! s%@GC_CFLAGS@%$GC_CFLAGS%g
! s%@LN_S@%$LN_S%g
! s%@OBJEXT@%$OBJEXT%g
! s%@STRIP@%$STRIP%g
! s%@LIBTOOL@%$LIBTOOL%g
! s%@CXXCPP@%$CXXCPP%g
! s%@THREADLIBS@%$THREADLIBS%g
! s%@POWERPC_DARWIN_TRUE@%$POWERPC_DARWIN_TRUE%g
! s%@POWERPC_DARWIN_FALSE@%$POWERPC_DARWIN_FALSE%g
! s%@EXTRA_TEST_LIBS@%$EXTRA_TEST_LIBS%g
! s%@target_all@%$target_all%g
! s%@CPLUSPLUS_TRUE@%$CPLUSPLUS_TRUE%g
! s%@CPLUSPLUS_FALSE@%$CPLUSPLUS_FALSE%g
! s%@INCLUDES@%$INCLUDES%g
! s%@CXXINCLUDES@%$CXXINCLUDES%g
! s%@addobjs@%$addobjs%g
! s%@addincludes@%$addincludes%g
! s%@addlibs@%$addlibs%g
! s%@addtests@%$addtests%g
! s%@CPP@%$CPP%g
! s%@MY_CFLAGS@%$MY_CFLAGS%g
! s%@toolexecdir@%$toolexecdir%g
! s%@toolexeclibdir@%$toolexeclibdir%g
  
  CEOF
- EOF
  
! cat >> $CONFIG_STATUS <<\EOF
  
! # 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_cmds=90 # Maximum number of lines to put in a sed script.
! ac_file=1 # Number of current file.
! ac_beg=1 # First line for current file.
! ac_end=$ac_max_sed_cmds # 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" conftest.subs > conftest.s$ac_file
!   else
!     sed "${ac_end}q" conftest.subs > conftest.s$ac_file
    fi
!   if test ! -s conftest.s$ac_file; then
!     ac_more_lines=false
!     rm -f conftest.s$ac_file
    else
!     if test -z "$ac_sed_cmds"; then
!       ac_sed_cmds="sed -f conftest.s$ac_file"
      else
!       ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
!     fi
!     ac_file=`expr $ac_file + 1`
!     ac_beg=$ac_end
!     ac_end=`expr $ac_end + $ac_max_sed_cmds`
    fi
  done
! if test -z "$ac_sed_cmds"; then
!   ac_sed_cmds=cat
! fi
! EOF
  
! cat >> $CONFIG_STATUS <<EOF
  
! CONFIG_FILES=\${CONFIG_FILES-"Makefile include/Makefile"}
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
!   case "$ac_file" in
!   *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
!        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
!   *) ac_file_in="${ac_file}.in" ;;
    esac
  
!   # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  
!   # Remove last slash and all that follows it.  Not all systems have dirname.
!   ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
!   if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
!     # The file is in a subdirectory.
!     test ! -d "$ac_dir" && mkdir "$ac_dir"
!     ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
!     # A "../" for each directory in $ac_dir_suffix.
!     ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
    else
!     ac_dir_suffix= ac_dots=
    fi
  
!   case "$ac_given_srcdir" in
!   .)  srcdir=.
!       if test -z "$ac_dots"; then top_srcdir=.
!       else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
!   /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
!   *) # Relative path.
!     srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
!     top_srcdir="$ac_dots$ac_given_srcdir" ;;
    esac
  
!   case "$ac_given_INSTALL" in
!   [/$]*) INSTALL="$ac_given_INSTALL" ;;
!   *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
!   esac
  
!   echo creating "$ac_file"
!   rm -f "$ac_file"
!   configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
!   case "$ac_file" in
!   *Makefile*) ac_comsub="1i\\
! # $configure_input" ;;
!   *) ac_comsub= ;;
!   esac
  
!   ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
!   sed -e "$ac_comsub
! s%@configure_input@%$configure_input%g
! s%@srcdir@%$srcdir%g
! s%@top_srcdir@%$top_srcdir%g
! s%@INSTALL@%$INSTALL%g
! " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
! fi; done
! rm -f conftest.s*
  
! EOF
! cat >> $CONFIG_STATUS <<EOF
! srcdir=${srcdir}
! host=${host}
! target=${target}
! with_multisubdir=${with_multisubdir}
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! gc_basedir=${gc_basedir}
! CC="${CC}"
! ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
! DEFS="$DEFS"
! INCLUDES="$INCLUDES"
  
! EOF
! cat >> $CONFIG_STATUS <<\EOF
  
- echo "$INCLUDES $DEFS" > boehm-cflags
  
! if test -n "$CONFIG_FILES"; then
!   LD="${ORIGINAL_LD_FOR_MULTILIBS}"
!   ac_file=Makefile . ${gc_basedir}/../config-ml.in
! fi
! exit 0
! EOF
  chmod +x $CONFIG_STATUS
! rm -fr confdefs* $ac_clean_files
! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  
--- 6588,8089 ----
    multilib_arg=
  fi
  
!                     ac_config_headers="$ac_config_headers include/gc_config.h include/gc_ext_config.h"
! 
! 
!                     ac_config_files="$ac_config_files Makefile include/Makefile"
! 
! 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 "${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 "${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 "${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 "${POWERPC_DARWIN_TRUE}" && test -z "${POWERPC_DARWIN_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"POWERPC_DARWIN\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"POWERPC_DARWIN\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${CPLUSPLUS_TRUE}" && test -z "${CPLUSPLUS_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"CPLUSPLUS\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"CPLUSPLUS\" 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 $as_me, 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 commands:
! $config_commands
! 
! Report bugs to <bug-autoconf@gnu.org>."
! _ACEOF
! 
! cat >>$CONFIG_STATUS <<_ACEOF
! ac_cs_version="\\
! config.status
! 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.
+ #
+ 
+ 
+ srcdir="$srcdir"
+ host="$host"
+ target="$target"
+ with_multisubdir="$with_multisubdir"
+ with_multisrctop="$with_multisrctop"
+ with_target_subdir="$with_target_subdir"
+ ac_configure_args="${multilib_arg} ${ac_configure_args}"
+ multi_basedir="$multi_basedir"
+ CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ CC="$CC"
+ 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" ;;
+   "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+   "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+   "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+   "include/gc_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/gc_config.h" ;;
+   "include/gc_ext_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/gc_ext_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_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,@multi_basedir@,$multi_basedir,;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,@target_noncanonical@,$target_noncanonical,;t t
+ s,@mkinstalldirs@,$mkinstalldirs,;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,@CC@,$CC,;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,@CXX@,$CXX,;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,@CFLAGS@,$CFLAGS,;t t
+ s,@CXXFLAGS@,$CXXFLAGS,;t t
+ s,@CCAS@,$CCAS,;t t
+ s,@CCASFLAGS@,$CCASFLAGS,;t t
+ s,@AS@,$AS,;t t
+ s,@ac_ct_AS@,$ac_ct_AS,;t t
+ s,@AR@,$AR,;t t
+ s,@ac_ct_AR@,$ac_ct_AR,;t t
+ s,@RANLIB@,$RANLIB,;t t
+ s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;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,@GC_CFLAGS@,$GC_CFLAGS,;t t
+ s,@LN_S@,$LN_S,;t t
+ s,@LIBTOOL@,$LIBTOOL,;t t
+ s,@CXXCPP@,$CXXCPP,;t t
+ s,@CPPFLAGS@,$CPPFLAGS,;t t
+ s,@THREADLIBS@,$THREADLIBS,;t t
+ s,@POWERPC_DARWIN_TRUE@,$POWERPC_DARWIN_TRUE,;t t
+ s,@POWERPC_DARWIN_FALSE@,$POWERPC_DARWIN_FALSE,;t t
+ s,@EXTRA_TEST_LIBS@,$EXTRA_TEST_LIBS,;t t
+ s,@target_all@,$target_all,;t t
+ s,@CPLUSPLUS_TRUE@,$CPLUSPLUS_TRUE,;t t
+ s,@CPLUSPLUS_FALSE@,$CPLUSPLUS_FALSE,;t t
+ s,@AM_CPPFLAGS@,$AM_CPPFLAGS,;t t
+ s,@addobjs@,$addobjs,;t t
+ s,@addincludes@,$addincludes,;t t
+ s,@addlibs@,$addlibs,;t t
+ s,@addtests@,$addtests,;t t
+ s,@CPP@,$CPP,;t t
+ s,@EGREP@,$EGREP,;t t
+ s,@MY_CFLAGS@,$MY_CFLAGS,;t t
+ s,@toolexecdir@,$toolexecdir,;t t
+ s,@toolexeclibdir@,$toolexeclibdir,;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_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
!     default-1 )
! # Only add multilib support code if we just rebuilt the top-level
! # Makefile.
! case " $CONFIG_FILES " in
!  *" Makefile "*)
!    ac_file=Makefile . ${multi_basedir}/config-ml.in
!    ;;
! esac ;;
!     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
!  ;;
!   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-3.4.3/boehm-gc/configure.ac gcc-4.0.0/boehm-gc/configure.ac
*** gcc-3.4.3/boehm-gc/configure.ac	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/configure.ac	Wed Feb 16 04:10:41 2005
***************
*** 0 ****
--- 1,478 ----
+ # Copyright (c) 1999, 2000, 2001, 2002, 2003 by Red Hat, Inc. All rights reserved.
+ # Copyright 2004 Nathanael Nerode
+ # 
+ # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ # 
+ # Permission is hereby granted to use or copy this program
+ # for any purpose,  provided the above notices are retained on all copies.
+ # Permission to modify the code and to distribute modified code is granted,
+ # provided the above notices are retained, and a notice that the code was
+ # modified is included with the above copyright notice.
+ #
+ # Original author: Tom Tromey
+ # Modified by Nathanael Nerode
+ 
+ dnl Process this file with autoconf to produce configure.
+ 
+ AC_PREREQ(2.59)
+ AC_INIT
+ AC_CONFIG_SRCDIR(gcj_mlc.c)
+ # This works around the fact that libtool configuration may change LD
+ # for this particular configuration, but some shells, instead of
+ # keeping the changes in LD private, export them just because LD is
+ # exported.
+ ORIGINAL_LD_FOR_MULTILIBS=$LD
+ 
+ AM_ENABLE_MULTILIB(, ..)
+ 
+ AC_CANONICAL_HOST
+ AC_CANONICAL_TARGET
+ 
+ # Get the 'noncanonical' system names.
+ ACX_NONCANONICAL_TARGET
+ 
+ # This works around an automake problem.
+ mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
+ AC_SUBST(mkinstalldirs)
+ 
+ AM_INIT_AUTOMAKE(gc, 6.3, no-define)
+ 
+ # The autoconf 2.5x version of the no-executables hack.
+ GCC_NO_EXECUTABLES
+ 
+ # Yak.  We must force CC and CXX to /not/ be precious variables; otherwise
+ # the wrong, non-multilib-adjusted value will be used in multilibs.
+ # As a side effect, we have to subst CFLAGS and CXXFLAGS ourselves.
+ 
+ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
+ m4_define([_AC_ARG_VAR_PRECIOUS],[])
+ AC_PROG_CC
+ AC_PROG_CXX
+ m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+ 
+ AM_PROG_CC_C_O
+ 
+ AC_SUBST(CFLAGS)
+ AC_SUBST(CXXFLAGS)
+ 
+ # Newer automakes demand CCAS and CCASFLAGS.
+ : ${CCAS='$(CC)'}
+ : ${CCASFLAGS='$(CFLAGS)'}
+ AC_SUBST(CCAS)
+ AC_SUBST(CCASFLAGS)
+ 
+ AC_CHECK_TOOL(AS, as)
+ AC_CHECK_TOOL(AR, ar)
+ AC_CHECK_TOOL(RANLIB, ranlib, :)
+ 
+ AC_PROG_INSTALL
+ 
+ AM_MAINTAINER_MODE
+ 
+ . ${srcdir}/configure.host
+ 
+ case ${gc_basedir} in
+ /* | [A-Za-z]:[/\\]*) gc_flagbasedir=${gc_basedir} ;;
+ *) gc_flagbasedir='$(top_builddir)/'${gc_basedir} ;;
+ esac
+ 
+ gc_cflags="${gc_cflags} -Iinclude -I"'$(top_builddir)'"/./targ-include -I${gc_flagbasedir}/libc/include"
+ case "${host}" in
+   *-*-cygwin32*)
+     gc_cflags="${gc_cflags} -I${gc_flagbasedir}/../winsup/include"
+     ;;
+ esac
+ 
+ dnl gc_cflags="${gc_cflags} -fno-builtin"
+ 
+ GC_CFLAGS=${gc_cflags}
+ AC_SUBST(GC_CFLAGS)
+ 
+ AC_PROG_LIBTOOL
+ 
+ dnl We use these options to decide which functions to include.
+ AC_ARG_WITH(target-subdir,
+ [  --with-target-subdir=SUBDIR
+                           configuring with a cross compiler])
+ AC_ARG_WITH(cross-host,
+ [  --with-cross-host=HOST  configuring with a cross compiler])
+ 
+ AC_MSG_CHECKING([for thread model used by GCC])
+ THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
+ if test -z "$THREADS"; then
+    THREADS=no
+ fi
+ AC_MSG_RESULT([$THREADS])
+ 
+ AC_ARG_ENABLE(parallel-mark,
+ [  --enable-parallel-mark	parallelize marking and free list construction],
+    [case "$THREADS" in
+       no | none | single)
+ 	AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec])
+ 	;;
+     esac]
+ )
+ 
+ AM_CPPFLAGS="-I`cd $srcdir && ${PWDCMD-pwd}`/include"
+ THREADLIBS=
+ case "$THREADS" in
+  no | none | single)
+     THREADS=none
+     ;;
+  posix | posix95 | pthreads)
+     THREADS=posix
+     THREADLIBS=-lpthread
+     case "$host" in
+      x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
+ 	AC_DEFINE(GC_LINUX_THREADS,1,[support for Xavier Leroy's Linux threads])
+ 	AC_DEFINE(_REENTRANT,1,[Use reentrant code])
+         if test "${enable_parallel_mark}" = yes; then
+ 	  AC_DEFINE(PARALLEL_MARK,1,[allow the marker to run in multiple threads])
+ 	fi
+ 	AC_DEFINE(THREAD_LOCAL_ALLOC,1,[define GC_local_malloc() & GC_local_malloc_atomic()])
+ 	;;
+      *-*-linux*)
+ 	AC_DEFINE(GC_LINUX_THREADS,1)
+ 	AC_DEFINE(_REENTRANT,1)
+ 	;;
+      *-*-aix*)
+ 	AC_DEFINE(GC_AIX_THREADS,1,[support AIX threads])
+ 	AC_DEFINE(_REENTRANT,1)
+ 	;;
+      *-*-hpux*)
+ 	AC_MSG_WARN("Only HP/UX 11 threads are supported.")
+ 	AC_DEFINE(GC_HPUX_THREADS,1,[enables support for HP/UX 11 pthreads])
+ 	AC_DEFINE(_POSIX_C_SOURCE,199506L,[POSIX version of C Source])
+ 	if test "${enable_parallel_mark}" = yes; then
+ 	  AC_DEFINE(PARALLEL_MARK,1)
+ 	fi
+ 	AC_DEFINE(THREAD_LOCAL_ALLOC,1)
+ 	THREADLIBS="-lpthread -lrt"
+ 	;;
+      *-*-freebsd*)
+ 	AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.")
+ 	AC_DEFINE(GC_FREEBSD_THREADS,1,[support FreeBSD threads])
+ 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
+ 	THREADLIBS=-pthread
+       	;;
+      *-*-solaris*)
+ 	AC_DEFINE(GC_SOLARIS_THREADS,1,[support for Solaris (thr_) threads])
+ 	AC_DEFINE(GC_SOLARIS_PTHREADS,1,[support for Solaris pthreads])
+ 	;;
+      *-*-irix*)
+ 	AC_DEFINE(GC_IRIX_THREADS,1,[support for Irix pthreads])
+ 	;;
+      *-*-cygwin*)
+ 	AC_DEFINE(GC_WIN32_THREADS,1,[support for win32 threads])
+ 	;;
+      *-*-darwin*)
+ 	AC_DEFINE(GC_DARWIN_THREADS,1,[support for Mac OS X pthreads])
+ 	AC_DEFINE(THREAD_LOCAL_ALLOC,1)
+ 	if test "${enable_parallel_mark}" = yes; then
+ 	  AC_DEFINE(PARALLEL_MARK,1)
+ 	fi
+ 	;;
+      *-*-osf*)
+ 	AC_DEFINE(GC_OSF1_THREADS,1,[support for Tru64 pthreads])
+         if test "${enable_parallel_mark}" = yes; then
+ 	  AC_DEFINE(PARALLEL_MARK,1)
+ 	  AC_DEFINE(THREAD_LOCAL_ALLOC,1)
+ 	  # May want to enable it in other cases, too.
+ 	  # Measurements havent yet been done.
+ 	fi
+ 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
+ 	THREADLIBS="-lpthread -lrt"
+ 	;;
+     esac
+     ;;
+  win32)
+     AC_DEFINE(GC_WIN32_THREADS,1)
+     dnl Old wine getenv may not return NULL for missing entry.
+     dnl Define EMPTY_GETENV_RESULTS here to work around the bug.
+     ;;
+  dgux386)
+     THREADS=dgux386
+ AC_MSG_RESULT($THREADLIBS)
+     # Use pthread GCC  switch
+     THREADLIBS=-pthread
+     if test "${enable_parallel_mark}" = yes; then
+         AC_DEFINE(PARALLEL_MARK,1)
+     fi
+     AC_DEFINE(THREAD_LOCAL_ALLOC,1)
+     AC_DEFINE(GC_DGUX386_THREADS,1,[support for DB/UX on I386 threads])
+     AC_DEFINE(DGUX_THREADS,1,[No description])
+     # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
+     AM_CPPFLAGS="-pthread $AM_CPPFLAGS"
+     ;;
+  aix)
+     THREADS=posix
+     THREADLIBS=-lpthread
+     AC_DEFINE(GC_AIX_THREADS,1)
+     AC_DEFINE(_REENTRANT,1)
+     ;;
+  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
+     AC_MSG_ERROR(thread package $THREADS not yet supported)
+     ;;
+  *)
+     AC_MSG_ERROR($THREADS is an unknown thread package)
+     ;;
+ esac
+ AC_SUBST(THREADLIBS)
+ 
+ case "$host" in
+    powerpc-*-darwin*)
+       powerpc_darwin=true
+       ;;
+ esac
+ AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue)
+ 
+ # We never want libdl on darwin. It is a fake libdl that just ends up making
+ # dyld calls anyway
+ case "$host" in
+   *-*-darwin*) ;;
+   *)
+     AC_CHECK_LIB(dl, dlopen, EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl")
+     ;;
+ esac
+ 
+ AC_SUBST(EXTRA_TEST_LIBS)
+ 
+ target_all=libgcjgc.la
+ AC_SUBST(target_all)
+ 
+ dnl If the target is an eCos system, use the appropriate eCos
+ dnl I/O routines.
+ dnl FIXME: this should not be a local option but a global target
+ dnl system; at present there is no eCos target.
+ TARGET_ECOS="no"
+ AC_ARG_WITH(ecos,
+ [  --with-ecos             enable runtime eCos target support],
+ TARGET_ECOS="$with_ecos"
+ )
+ 
+ addobjs=
+ addlibs=
+ addincludes=
+ addtests=
+ case "$TARGET_ECOS" in
+    no)
+       ;;
+    *)
+       AC_DEFINE(ECOS,1,[Target is ECOS])
+       AM_CPPFLAGS="${AM_CPPFLAGS} -I${TARGET_ECOS}/include"
+       addobjs="$addobjs ecos.lo"
+       ;;
+ esac
+ 
+ if test "${enable_cplusplus}" = yes; then
+       addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h"
+       addtests="$addtests test_cpp"
+ fi
+ 
+ AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes)
+ 
+ AC_SUBST(CXX)
+ 
+ AC_SUBST(AM_CPPFLAGS)
+ 
+ # Configuration of shared libraries
+ #
+ AC_MSG_CHECKING(whether to build shared libraries)
+ AC_ENABLE_SHARED
+ 
+ case "$host" in
+  alpha-*-openbsd*)
+      enable_shared=no
+      AC_MSG_RESULT(no)
+      ;;
+  *)
+      AC_MSG_RESULT(yes)
+      ;;
+ esac
+ 
+ # Configuration of machine-dependent code
+ #
+ # We don't set NO_EXECUTE_PERMISSION by default because gcj (and
+ # anything else that creates trampolines in gc-allocated memory)
+ # always needs exec permission.  The exceptions to this are IA-64 and
+ # some variations of Power PC, where trampolines don't contain
+ # executable code.
+ #
+ AC_MSG_CHECKING(which machine-dependent code should be used)
+ machdep=
+ case "$host" in
+  alpha*-*-openbsd*)
+     machdep="alpha_mach_dep.lo"
+     if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
+        AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled)
+     fi
+     ;;
+  alpha*-*-linux*)
+     machdep="alpha_mach_dep.lo"
+     ;;
+  i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?)
+     AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED,1,[PROC_VDB in Solaris 2.5 gives wrong values for dirty bits])
+     ;;
+  mipstx39-*-elf*)
+     machdep="mips_ultrix_mach_dep.lo"
+     AC_DEFINE(STACKBASE, __stackbase,[No description])
+     AC_DEFINE(DATASTART_IS_ETEXT,1,[No description])
+     ;;
+  mips-dec-ultrix*)
+     machdep="mips_ultrix_mach-dep.lo"
+     ;;
+  mips-nec-sysv*|mips-unknown-sysv*)
+     ;;
+  mips*-*-linux*)
+     ;;
+  mips-*-*)
+     machdep="mips_sgi_mach_dep.lo"
+     ;;
+  sparc-*-netbsd*)
+     machdep="sparc_netbsd_mach_dep.lo"
+     ;;
+  sparc-sun-solaris2.3)
+     machdep="sparc_mach_dep.lo"
+     AC_DEFINE(SUNOS53_SHARED_LIB,1,[Avoid Solaris 5.3 dynamic library bug])
+     ;;
+  sparc*-sun-solaris2.*)
+     machdep="sparc_mach_dep.lo"
+     ;;
+  ia64-*-*)
+     AC_DEFINE(NO_EXECUTE_PERMISSION,1,[cause some or all of the heap to not have execute permission])
+     machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
+     ;;
+ esac
+ if test x"$machdep" = x; then
+ AC_MSG_RESULT($machdep)
+    machdep="mach_dep.lo"
+ fi
+ addobjs="$addobjs $machdep"
+ AC_SUBST(addobjs)
+ AC_SUBST(addincludes)
+ AC_SUBST(addlibs)
+ AC_SUBST(addtests)
+ 
+ #
+ # Check for AViiON Machines running DGUX
+ #
+ AC_MSG_CHECKING(if host is AViiON running DGUX)
+ ac_is_dgux=no
+ AC_CHECK_HEADER(sys/dg_sys_info.h,
+ [ac_is_dgux=yes;])
+ 
+ AC_MSG_RESULT($ac_is_dgux)
+     ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
+ if test $ac_is_dgux = yes; then
+     if test "$enable_full_debug" = "yes"; then
+       CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+       CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+     else
+       CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+       CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+     fi
+     AC_SUBST(CFLAGS)
+     AC_SUBST(CXXFLAGS)
+ fi
+ 
+ dnl As of 4.13a2, the collector will not properly work on Solaris when
+ dnl built with gcc and -O.  So we remove -O in the appropriate case.
+ dnl Not needed anymore on Solaris.
+ AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary)
+ case "$host" in
+  *aix*)
+     if test "$GCC" = yes; then
+        AC_MSG_RESULT(yes)
+        new_CFLAGS=
+        for i in $CFLAGS; do
+ 	  case "$i" in
+ 	   -O*)
+ 	      ;;
+ 	   *)
+ 	      new_CFLAGS="$new_CFLAGS $i"
+ 	      ;;
+ 	  esac
+        done
+        CFLAGS="$new_CFLAGS"
+     else
+        AC_MSG_RESULT(no)
+     fi
+     ;;
+  *) AC_MSG_RESULT(no) ;;
+ esac
+ 
+ dnl We need to override the top-level CFLAGS.  This is how we do it.
+ MY_CFLAGS="$CFLAGS"
+ AC_SUBST(MY_CFLAGS)
+ 
+ dnl Include defines that have become de facto standard.
+ dnl ALL_INTERIOR_POINTERS can be overridden in startup code.
+ AC_DEFINE(SILENT,1,[disables statistics printing])
+ AC_DEFINE(NO_SIGNALS,1,[does not disable signals])
+ AC_DEFINE(ALL_INTERIOR_POINTERS,1,[allows all pointers to the interior of objects to be recognized])
+ 
+ dnl By default, make the library as general as possible.
+ AC_DEFINE(JAVA_FINALIZATION,1,[make it somewhat safer to finalize objects out of order])
+ AC_DEFINE(GC_GCJ_SUPPORT,1,[include support for gcj])
+ AC_DEFINE(ATOMIC_UNCOLLECTABLE,1,[include code for GC_malloc_atomic_uncollectable])
+ 
+ dnl This is something of a hack.  When cross-compiling we turn off
+ dnl some functionality. These is only correct when targetting an
+ dnl embedded system.  FIXME.
+ if test -n "${with_cross_host}"; then
+    AC_DEFINE(NO_SIGSET,1,[use empty GC_disable_signals and GC_enable_signals])
+    AC_DEFINE(NO_DEBUGGING,1,[removes GC_dump])
+ fi
+ 
+ AC_ARG_ENABLE(gc-debug,
+ [  --enable-gc-debug	include full support for pointer backtracing etc.],
+ [ if test "$enable_gc_debug" = "yes"; then
+     AC_MSG_WARN("Must define GC_DEBUG and use debug alloc. in clients.")
+     AC_DEFINE(KEEP_BACK_PTRS,1,[Add code to save back pointers])
+     AC_DEFINE(DBG_HDRS_ALL,1,[Make sure that all objects have debug headers])
+     case $host in
+       ia64-*-linux* )
+ 	AC_DEFINE(MAKE_BACK_GRAPH,1,[Enable GC_PRINT_BACK_HEIGHT environment variable])
+       ;;
+       x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
+ 	AC_DEFINE(MAKE_BACK_GRAPH,1)
+ 	AC_MSG_WARN("Client must not use -fomit-frame-pointer.")
+ 	AC_DEFINE(SAVE_CALL_COUNT, 8, [number of call frames saved with objects allocated through the debugging interface])
+       ;;
+       i[3456]86-*-dgux*)
+ 	AC_DEFINE(MAKE_BACK_GRAPH,1)
+       ;;
+     esac 
+   fi])
+ 
+ if test "${gc_use_mmap}" = "yes"; then
+   AC_DEFINE(USE_MMAP, 1, [use MMAP instead of sbrk to get new memory])
+ fi
+ 
+ if test -n "$with_cross_host" &&
+    test x"$with_cross_host" != x"no"; then
+   toolexecdir='$(exec_prefix)/$(target_noncanonical)'
+   toolexeclibdir='$(toolexecdir)/lib'
+ else
+   toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
+   toolexeclibdir='$(libdir)'
+ fi
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+   .) ;; # Avoid trailing /.
+   *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
+ esac
+ AC_SUBST(toolexecdir)
+ AC_SUBST(toolexeclibdir)
+ 
+ if test "${multilib}" = "yes"; then
+   multilib_arg="--enable-multilib"
+ else
+   multilib_arg=
+ fi
+ 
+ AC_CONFIG_HEADERS([include/gc_config.h include/gc_ext_config.h])
+ 
+ AC_CONFIG_FILES(Makefile include/Makefile)
+ AC_OUTPUT
diff -Nrcpad gcc-3.4.3/boehm-gc/configure.host gcc-4.0.0/boehm-gc/configure.host
*** gcc-3.4.3/boehm-gc/configure.host	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/configure.host	Wed Feb 16 04:10:41 2005
***************
*** 18,25 ****
--- 18,28 ----
  
  # It sets the following shell variables:
  #   gc_cflags	Special CFLAGS to use when building
+ #   gc_use_mmap  Set to "yes" on platforms where mmap should be used instead
+ #		 of sbrk. This will define USE_MMAP.
  
  gc_cflags=""
+ gc_use_mmap=
  
  # We should set -fexceptions if we are using gcc and might be used
  # inside something like gcj.  This is the zeroth approximation:
*************** else
*** 37,42 ****
--- 40,51 ----
      esac
  fi
  
+ case "${host}" in
+   *-linux*)
+     gc_use_mmap=yes
+     ;;
+ esac
+ 
  case "${target_optspace}:${host}" in
    yes:*)
      gc_cflags="${gc_cflags} -Os"
diff -Nrcpad gcc-3.4.3/boehm-gc/configure.in gcc-4.0.0/boehm-gc/configure.in
*** gcc-3.4.3/boehm-gc/configure.in	Tue Jan 20 15:15:48 2004
--- gcc-4.0.0/boehm-gc/configure.in	Thu Jan  1 00:00:00 1970
***************
*** 1,463 ****
- # Copyright (c) 1999, 2000, 2001, 2002, 2003 by Red Hat, Inc. All rights reserved.
- # 
- # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- # 
- # Permission is hereby granted to use or copy this program
- # for any purpose,  provided the above notices are retained on all copies.
- # Permission to modify the code and to distribute modified code is granted,
- # provided the above notices are retained, and a notice that the code was
- # modified is included with the above copyright notice.
- #
- # Original author: Tom Tromey
- 
- dnl Process this file with autoconf to produce configure.
- 
- AC_PREREQ(2.13)
- AC_INIT(gcj_mlc.c)
- 
- # This works around the fact that libtool configuration may change LD
- # for this particular configuration, but some shells, instead of
- # keeping the changes in LD private, export them just because LD is
- # exported.
- ORIGINAL_LD_FOR_MULTILIBS=$LD
- 
- dnl Can't be done in GC_CONFIGURE because that confuses automake. 
- AC_CONFIG_AUX_DIR(.)
- 
- GC_CONFIGURE(.)
- 
- AM_PROG_LIBTOOL
- 
- dnl We use these options to decide which functions to include.
- AC_ARG_WITH(target-subdir,
- [  --with-target-subdir=SUBDIR
-                           configuring with a cross compiler])
- AC_ARG_WITH(cross-host,
- [  --with-cross-host=HOST  configuring with a cross compiler])
- 
- AM_MAINTAINER_MODE
- # automake wants to see AC_EXEEXT.  But we don't need it.  And having
- # it is actually a problem, because the compiler we're passed can't
- # necessarily do a full link.  So we fool automake here.
- if false; then
-   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
-   # to nothing, so nothing would remain between `then' and `fi' if it
-   # were not for the `:' below.
-   :
-   AC_EXEEXT
- fi
- 
- AC_MSG_CHECKING([for thread model used by GCC])
- THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
- if test -z "$THREADS"; then
-    THREADS=no
- fi
- AC_MSG_RESULT([$THREADS])
- 
- AC_ARG_ENABLE(parallel-mark,
- [  --enable-parallel-mark	parallelize marking and free list construction],
-    [case "$THREADS" in
-       no | none | single)
- 	AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec])
- 	;;
-     esac]
- )
- 
- INCLUDES="-I`cd $srcdir && ${PWDCMD-pwd}`/include"
- THREADLIBS=
- case "$THREADS" in
-  no | none | single)
-     THREADS=none
-     ;;
-  posix | pthreads)
-     THREADS=posix
-     THREADLIBS=-lpthread
-     case "$host" in
-      x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
- 	AC_DEFINE(GC_LINUX_THREADS)
- 	AC_DEFINE(_REENTRANT)
-         if test "${enable_parallel_mark}" = yes; then
- 	  AC_DEFINE(PARALLEL_MARK)
- 	fi
- 	AC_DEFINE(THREAD_LOCAL_ALLOC)
- 	;;
-      *-*-linux*)
- 	AC_DEFINE(GC_LINUX_THREADS)
- 	AC_DEFINE(_REENTRANT)
- 	;;
-      *-*-aix*)
- 	AC_DEFINE(GC_AIX_THREADS)
- 	AC_DEFINE(_REENTRANT)
- 	;;
-      *-*-hpux*)
- 	AC_MSG_WARN("Only HP/UX 11 threads are supported.")
- 	AC_DEFINE(GC_HPUX_THREADS)
- 	AC_DEFINE(_POSIX_C_SOURCE,199506L)
- 	if test "${enable_parallel_mark}" = yes; then
- 	  AC_DEFINE(PARALLEL_MARK)
- 	fi
- 	AC_DEFINE(THREAD_LOCAL_ALLOC)
- 	THREADLIBS="-lpthread -lrt"
- 	;;
-      *-*-freebsd*)
- 	AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.")
- 	AC_DEFINE(GC_FREEBSD_THREADS)
- 	INCLUDES="$INCLUDES -pthread"
- 	THREADLIBS=-pthread
-       	;;
-      *-*-solaris*)
- 	AC_DEFINE(GC_SOLARIS_THREADS)
- 	AC_DEFINE(GC_SOLARIS_PTHREADS)
- 	;;
-      *-*-irix*)
- 	AC_DEFINE(GC_IRIX_THREADS)
- 	;;
-      *-*-cygwin*)
- 	AC_DEFINE(GC_WIN32_THREADS)
- 	;;
-      *-*-darwin*)
- 	AC_DEFINE(GC_DARWIN_THREADS)
- 	AC_DEFINE(THREAD_LOCAL_ALLOC)
- 	if test "${enable_parallel_mark}" = yes; then
- 	  AC_DEFINE(PARALLEL_MARK)
- 	fi
- 	;;
-      *-*-osf*)
- 	AC_DEFINE(GC_OSF1_THREADS)
-         if test "${enable_parallel_mark}" = yes; then
- 	  AC_DEFINE(PARALLEL_MARK)
- 	  AC_DEFINE(THREAD_LOCAL_ALLOC)
- 	  # May want to enable it in other cases, too.
- 	  # Measurements havent yet been done.
- 	fi
- 	INCLUDES="$INCLUDES -pthread"
- 	THREADLIBS="-lpthread -lrt"
- 	;;
-     esac
-     ;;
-  win32)
-     AC_DEFINE(GC_WIN32_THREADS)
-     dnl Old wine getenv may not return NULL for missing entry.
-     dnl Define EMPTY_GETENV_RESULTS here to work around the bug.
-     ;;
-  dgux386)
-     THREADS=dgux386
- AC_MSG_RESULT($THREADLIBS)
-     # Use pthread GCC  switch
-     THREADLIBS=-pthread
-     if test "${enable_parallel_mark}" = yes; then
-         AC_DEFINE(PARALLEL_MARK)
-     fi
-     AC_DEFINE(THREAD_LOCAL_ALLOC)
-     AC_DEFINE(GC_DGUX386_THREADS)
-     AC_DEFINE(DGUX_THREADS)
-     # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
-     INCLUDES="-pthread $INCLUDES"
-     ;;
-  aix)
-     THREADS=posix
-     THREADLIBS=-lpthread
-     AC_DEFINE(GC_AIX_THREADS)
-     AC_DEFINE(_REENTRANT)
-     ;;
-  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
-     AC_MSG_ERROR(thread package $THREADS not yet supported)
-     ;;
-  *)
-     AC_MSG_ERROR($THREADS is an unknown thread package)
-     ;;
- esac
- AC_SUBST(THREADLIBS)
- 
- case "$host" in 
-    powerpc-*-darwin*)
-       powerpc_darwin=true
-       ;;
- esac
- AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue)
- 
- # We never want libdl on darwin. It is a fake libdl that just ends up making
- # dyld calls anyway
- case "$host" in
-   *-*-darwin*) ;;
-   *) 
-     AC_CHECK_LIB(dl, dlopen, EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl")
-     ;;
- esac
- 
- AC_SUBST(EXTRA_TEST_LIBS)
- 
- target_all=libgcjgc.la
- AC_SUBST(target_all)
- AC_SUBST(target_alias)
- 
- dnl If the target is an eCos system, use the appropriate eCos
- dnl I/O routines.
- dnl FIXME: this should not be a local option but a global target
- dnl system; at present there is no eCos target.
- TARGET_ECOS="no"
- AC_ARG_WITH(ecos,
- [  --with-ecos             enable runtime eCos target support],
- TARGET_ECOS="$with_ecos"
- )
- 
- addobjs=
- addlibs=
- addincludes=
- addtests=
- CXXINCLUDES=
- case "$TARGET_ECOS" in
-    no)
-       ;;
-    *)
-       AC_DEFINE(ECOS)
-       CXXINCLUDES="-I${TARGET_ECOS}/include"
-       addobjs="$addobjs ecos.lo"
-       ;;
- esac
- 
- if test "${enable_cplusplus}" = yes; then
-       addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h"
-       addtests="$addtests test_cpp"
- fi
- 
- AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes)
- 
- AC_SUBST(CXX)
- 
- AC_SUBST(INCLUDES)
- AC_SUBST(CXXINCLUDES)
- 
- # Configuration of shared libraries
- #
- AC_MSG_CHECKING(whether to build shared libraries)
- AC_ENABLE_SHARED
- 
- case "$host" in
-  alpha-*-openbsd*)
-      enable_shared=no
-      AC_MSG_RESULT(no)
-      ;;
-  *)
-      AC_MSG_RESULT(yes)
-      ;;
- esac
- 
- # Configuration of machine-dependent code
- #
- # We don't set NO_EXECUTE_PERMISSION by default because gcj (and
- # anything else that creates trampolines in gc-allocated memory)
- # always needs exec permission.  The exceptions to this are IA-64 and
- # some variations of Power PC, where trampolines don't contain
- # executable code.
- #
- AC_MSG_CHECKING(which machine-dependent code should be used) 
- machdep=
- case "$host" in
-  alpha*-*-openbsd*)
-     machdep="alpha_mach_dep.lo"
-     if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
-        AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled)
-     fi
-     ;;
-  alpha*-*-linux*)
-     machdep="alpha_mach_dep.lo"
-     ;;
-  i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?)
-     AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED)
-     ;;
-  mipstx39-*-elf*)
-     machdep="mips_ultrix_mach_dep.lo"
-     AC_DEFINE(STACKBASE, __stackbase)
-     AC_DEFINE(DATASTART_IS_ETEXT)
-     ;;
-  mips-dec-ultrix*)
-     machdep="mips_ultrix_mach-dep.lo"
-     ;;
-  mips-nec-sysv*|mips-unknown-sysv*)
-     ;;
-  mips*-*-linux*) 
-     ;; 
-  mips-*-*)
-     machdep="mips_sgi_mach_dep.lo"
-     ;;
-  sparc-*-netbsd*)
-     machdep="sparc_netbsd_mach_dep.lo"
-     ;;
-  sparc-sun-solaris2.3)
-     machdep="sparc_mach_dep.lo"
-     AC_DEFINE(SUNOS53_SHARED_LIB)
-     ;;
-  sparc-sun-solaris2.*)
-     machdep="sparc_mach_dep.lo"
-     ;;
-  ia64-*-*)
-     AC_DEFINE(NO_EXECUTE_PERMISSION)
-     machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
-     ;;
- esac
- if test x"$machdep" = x; then
- AC_MSG_RESULT($machdep)
-    machdep="mach_dep.lo"
- fi
- addobjs="$addobjs $machdep"
- AC_SUBST(addobjs)
- AC_SUBST(addincludes)
- AC_SUBST(addlibs)
- AC_SUBST(addtests)
- 
- AC_PROG_LIBTOOL
- 
- #
- # Check for AViiON Machines running DGUX
- #
- AC_MSG_CHECKING(if host is AViiON running DGUX)
- ac_is_dgux=no
- AC_CHECK_HEADER(sys/dg_sys_info.h,
- [ac_is_dgux=yes;])
- 
- AC_MSG_RESULT($ac_is_dgux) 
-     ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
- if test $ac_is_dgux = yes; then
-     if test "$enable_full_debug" = "yes"; then
-       CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
-       CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
-     else
-       CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
-       CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
-     fi
-     AC_SUBST(CFLAGS)
-     AC_SUBST(CXXFLAGS)
- fi
- 
- dnl We use these options to decide which functions to include.
- AC_ARG_WITH(target-subdir,
- [  --with-target-subdir=SUBDIR
-                           configuring with a cross compiler])
- AC_ARG_WITH(cross-host,
- [  --with-cross-host=HOST  configuring with a cross compiler])
- 
- # automake wants to see AC_EXEEXT.  But we don't need it.  And having
- # it is actually a problem, because the compiler we're passed can't
- # necessarily do a full link.  So we fool automake here.
- if false; then
-   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
-   # to nothing, so nothing would remain between `then' and `fi' if it
-   # were not for the `:' below.
-   :
-   AC_EXEEXT
- fi
- 
- dnl As of 4.13a2, the collector will not properly work on Solaris when
- dnl built with gcc and -O.  So we remove -O in the appropriate case.
- dnl
- AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary)
- case "$host" in
-  sparc-sun-solaris2*|*aix*)
-     if test "$GCC" = yes; then
-        AC_MSG_RESULT(yes)
-        new_CFLAGS=
-        for i in $CFLAGS; do
- 	  case "$i" in
- 	   -O*)
- 	      ;;
- 	   *)
- 	      new_CFLAGS="$new_CFLAGS $i"
- 	      ;;
- 	  esac
-        done
-        CFLAGS="$new_CFLAGS"
-     else
-        AC_MSG_RESULT(no)
-     fi
-     ;;
-  *) AC_MSG_RESULT(no) ;;
- esac
- 
- dnl We need to override the top-level CFLAGS.  This is how we do it.
- MY_CFLAGS="$CFLAGS"
- AC_SUBST(MY_CFLAGS)
- 
- dnl Include defines that have become de facto standard.
- dnl ALL_INTERIOR_POINTERS can be overridden in startup code.
- AC_DEFINE(SILENT)
- AC_DEFINE(NO_SIGNALS)
- AC_DEFINE(ALL_INTERIOR_POINTERS)
- 
- dnl By default, make the library as general as possible.
- AC_DEFINE(JAVA_FINALIZATION)
- AC_DEFINE(GC_GCJ_SUPPORT)
- AC_DEFINE(ATOMIC_UNCOLLECTABLE)
- 
- dnl This is something of a hack.  When cross-compiling we turn off
- dnl some functionality. These is only correct when targetting an
- dnl embedded system.  FIXME.
- if test -n "${with_cross_host}"; then
-    AC_DEFINE(NO_SIGSET)
-    AC_DEFINE(NO_DEBUGGING)
- fi
- 
- AC_ARG_ENABLE(full-debug,
- [  --enable-full-debug	include full support for pointer backtracing etc.],
- [ if test "$enable_full_debug" = "yes"; then
-     AC_MSG_WARN("Must define GC_DEBUG and use debug alloc. in clients.")
-     AC_DEFINE(KEEP_BACK_PTRS)
-     AC_DEFINE(DBG_HDRS_ALL)
-     case $host in
-       ia64-*-linux* )
- 	AC_DEFINE(MAKE_BACK_GRAPH)
-       ;;
-       x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
- 	AC_DEFINE(MAKE_BACK_GRAPH)
- 	AC_MSG_WARN("Client must not use -fomit-frame-pointer.")
- 	AC_DEFINE(SAVE_CALL_COUNT, 8)
-       ;;
-       i[3456]86-*-dgux*)
- 	AC_DEFINE(MAKE_BACK_GRAPH)
-       ;;
-     esac ]
-   fi)
- 
- if test -n "$with_cross_host" &&
-    test x"$with_cross_host" != x"no"; then
-   toolexecdir='$(exec_prefix)/$(target_alias)'
-   toolexeclibdir='$(toolexecdir)/lib'
- else
-   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
-   toolexeclibdir='$(libdir)'
- fi
- multi_os_directory=`$CC -print-multi-os-directory`
- case $multi_os_directory in
-   .) ;; # Avoid trailing /.
-   *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
- esac
- AC_SUBST(toolexecdir)
- AC_SUBST(toolexeclibdir)
- 
- if test "${multilib}" = "yes"; then
-   multilib_arg="--enable-multilib"
- else
-   multilib_arg=
- fi
- 
- AC_OUTPUT(Makefile include/Makefile, [
- dnl Put all the -I and -D options in a file.
- echo "$INCLUDES $DEFS" > boehm-cflags
- 
- if test -n "$CONFIG_FILES"; then
-   LD="${ORIGINAL_LD_FOR_MULTILIBS}"
-   ac_file=Makefile . ${gc_basedir}/../config-ml.in
- fi],
- srcdir=${srcdir}
- host=${host}
- target=${target}
- with_multisubdir=${with_multisubdir}
- ac_configure_args="${multilib_arg} ${ac_configure_args}"
- CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- gc_basedir=${gc_basedir}
- CC="${CC}"
- ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
- DEFS="$DEFS"
- INCLUDES="$INCLUDES"
- )
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/cord/cordprnt.c gcc-4.0.0/boehm-gc/cord/cordprnt.c
*** gcc-3.4.3/boehm-gc/cord/cordprnt.c	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/cord/cordprnt.c	Fri Aug 13 23:05:31 2004
*************** int CORD_vsprintf(CORD * out, CORD forma
*** 261,267 ****
  #		    ifdef __va_copy
                        __va_copy(vsprintf_args, args);
  #		    else
! #		      if defined(__GNUC__) /* and probably in other cases */
                          va_copy(vsprintf_args, args);
  #		      else
  			vsprintf_args = args;
--- 261,267 ----
  #		    ifdef __va_copy
                        __va_copy(vsprintf_args, args);
  #		    else
! #		      if defined(__GNUC__) && !defined(__DJGPP__) /* and probably in other cases */
                          va_copy(vsprintf_args, args);
  #		      else
  			vsprintf_args = args;
diff -Nrcpad gcc-3.4.3/boehm-gc/cord/cordtest.c gcc-4.0.0/boehm-gc/cord/cordtest.c
*** gcc-3.4.3/boehm-gc/cord/cordtest.c	Fri Aug 17 18:30:48 2001
--- gcc-4.0.0/boehm-gc/cord/cordtest.c	Fri Aug 13 23:05:31 2004
***************
*** 11,16 ****
--- 11,17 ----
   * modified is included with the above copyright notice.
   */
  /* Boehm, August 24, 1994 11:58 am PDT */
+ # include "gc.h"	/* For GC_INIT() only */
  # include "cord.h"
  # include <string.h>
  # include <stdio.h>
*************** void test_basics()
*** 116,122 ****
  
  void test_extras()
  {
! #   if defined(__OS2__)
  #	define FNAME1 "tmp1"
  #	define FNAME2 "tmp2"
  #   elif defined(AMIGA)
--- 117,123 ----
  
  void test_extras()
  {
! #   if defined(__OS2__) || defined(__DJGPP__)
  #	define FNAME1 "tmp1"
  #	define FNAME2 "tmp2"
  #   elif defined(AMIGA)
*************** void test_extras()
*** 162,167 ****
--- 163,172 ----
          x = CORD_cat(x,x);
      }
      if ((f = fopen(FNAME2, "w")) == 0) ABORT("2nd open failed");
+ #   ifdef __DJGPP__
+       /* FIXME: DJGPP workaround.  Why does this help? */
+       if (fflush(f) != 0) ABORT("fflush failed");
+ #   endif
      if (CORD_put(x,f) == EOF) ABORT("CORD_put failed");
      if (fclose(f) == EOF) ABORT("fclose failed");
      w = CORD_from_file(f2 = fopen(FNAME2, "rb"));
*************** main()
*** 221,226 ****
--- 226,232 ----
  #   ifdef THINK_C
          printf("cordtest:\n");
  #   endif
+     GC_INIT();
      test_basics();
      test_extras();
      test_printf();
diff -Nrcpad gcc-3.4.3/boehm-gc/cord/cordxtra.c gcc-4.0.0/boehm-gc/cord/cordxtra.c
*** gcc-3.4.3/boehm-gc/cord/cordxtra.c	Fri Aug 17 18:30:48 2001
--- gcc-4.0.0/boehm-gc/cord/cordxtra.c	Fri Aug 13 23:05:31 2004
*************** size_t CORD_str(CORD x, size_t start, CO
*** 385,393 ****
          mask <<= 8;
          mask |= 0xff;
          s_buf <<= 8;
!         s_buf |= s_start[i];
          x_buf <<= 8;
!         x_buf |= CORD_pos_fetch(xpos);
          CORD_next(xpos);
      }
      for (match_pos = start; ; match_pos++) {
--- 385,393 ----
          mask <<= 8;
          mask |= 0xff;
          s_buf <<= 8;
!         s_buf |= (unsigned char)s_start[i];
          x_buf <<= 8;
!         x_buf |= (unsigned char)CORD_pos_fetch(xpos);
          CORD_next(xpos);
      }
      for (match_pos = start; ; match_pos++) {
*************** size_t CORD_str(CORD x, size_t start, CO
*** 402,408 ****
  	    return(CORD_NOT_FOUND);
  	}
      	x_buf <<= 8;
!         x_buf |= CORD_pos_fetch(xpos);
          CORD_next(xpos);
      }
  }
--- 402,408 ----
  	    return(CORD_NOT_FOUND);
  	}
      	x_buf <<= 8;
!         x_buf |= (unsigned char)CORD_pos_fetch(xpos);
          CORD_next(xpos);
      }
  }
diff -Nrcpad gcc-3.4.3/boehm-gc/cord/de.c gcc-4.0.0/boehm-gc/cord/de.c
*** gcc-3.4.3/boehm-gc/cord/de.c	Fri Aug 17 18:30:48 2001
--- gcc-4.0.0/boehm-gc/cord/de.c	Fri Aug 13 23:05:31 2004
*************** char ** argv;
*** 569,577 ****
  #if defined(MACINTOSH)
  	console_options.title = "\pDumb Editor";
  	cshow(stdout);
- 	GC_init();
  	argc = ccommand(&argv);
  #endif
      
      if (argc != 2) goto usage;
      arg_file_name = argv[1];
--- 569,577 ----
  #if defined(MACINTOSH)
  	console_options.title = "\pDumb Editor";
  	cshow(stdout);
  	argc = ccommand(&argv);
  #endif
+     GC_INIT();
      
      if (argc != 2) goto usage;
      arg_file_name = argv[1];
diff -Nrcpad gcc-3.4.3/boehm-gc/darwin_stop_world.c gcc-4.0.0/boehm-gc/darwin_stop_world.c
*** gcc-3.4.3/boehm-gc/darwin_stop_world.c	Mon Jul 28 03:46:09 2003
--- gcc-4.0.0/boehm-gc/darwin_stop_world.c	Fri Aug 13 23:05:29 2004
***************
*** 2,9 ****
  
  # if defined(GC_DARWIN_THREADS)
  
- #define DEBUG_THREADS 0
- 
  /* From "Inside Mac OS X - Mach-O Runtime Architecture" published by Apple
     Page 49:
     "The space beneath the stack pointer, where a new stack frame would normally
--- 2,7 ----
***************
*** 16,116 ****
  */
  #define PPC_RED_ZONE_SIZE 224
  
  void GC_push_all_stacks() {
      int i;
      kern_return_t r;
!     GC_thread p;
!     pthread_t me;
      ptr_t lo, hi;
! #	if defined(POWERPC)
!         ppc_thread_state_t state;
! #	else
! #		error FIXME for non-ppc OS X
! #	endif
!     mach_msg_type_number_t thread_state_count = MACHINE_THREAD_STATE_COUNT;
!     
!     me = pthread_self();
      if (!GC_thr_initialized) GC_thr_init();
      
!     for(i=0;i<THREAD_TABLE_SZ;i++) {
!         for(p=GC_threads[i];p!=0;p=p->next) {
!             if(p -> flags & FINISHED) continue;
!             if(pthread_equal(p->id,me)) {
!                 lo = GC_approx_sp();
!             } else {
!                 /* Get the thread state (registers, etc) */
!                 r = thread_get_state(
!                     p->stop_info.mach_thread,
!                     MACHINE_THREAD_STATE,
!                     (natural_t*)&state,
!                     &thread_state_count);
!                 if(r != KERN_SUCCESS) ABORT("thread_get_state failed");
!     
!                 #ifdef POWERPC
!                     lo = (void*)(state.r1 - PPC_RED_ZONE_SIZE);
!                     
!                     GC_push_one(state.r0); 
!                     GC_push_one(state.r2); 
!                     GC_push_one(state.r3); 
!                     GC_push_one(state.r4); 
!                     GC_push_one(state.r5); 
!                     GC_push_one(state.r6); 
!                     GC_push_one(state.r7); 
!                     GC_push_one(state.r8); 
!                     GC_push_one(state.r9); 
!                     GC_push_one(state.r10); 
!                     GC_push_one(state.r11); 
!                     GC_push_one(state.r12); 
!                     GC_push_one(state.r13); 
!                     GC_push_one(state.r14); 
!                     GC_push_one(state.r15); 
!                     GC_push_one(state.r16); 
!                     GC_push_one(state.r17); 
!                     GC_push_one(state.r18); 
!                     GC_push_one(state.r19); 
!                     GC_push_one(state.r20); 
!                     GC_push_one(state.r21); 
!                     GC_push_one(state.r22); 
!                     GC_push_one(state.r23); 
!                     GC_push_one(state.r24); 
!                     GC_push_one(state.r25); 
!                     GC_push_one(state.r26); 
!                     GC_push_one(state.r27); 
!                     GC_push_one(state.r28); 
!                     GC_push_one(state.r29); 
!                     GC_push_one(state.r30); 
!                     GC_push_one(state.r31);
!                 #else
!                 #	error FIXME for non-PPC darwin
!                 #endif /* !POWERPC */
!             } /* p != me */
!             if(p->flags & MAIN_THREAD)
!                 hi = GC_stackbottom;
!             else
!                 hi = p->stack_end;
!             #if DEBUG_THREADS
!                 GC_printf3("Darwin: Stack for thread 0x%lx = [%lx,%lx)\n",
!                     (unsigned long) p -> id,
!                     (unsigned long) lo,
!                     (unsigned long) hi
!                 );
!             #endif
!             GC_push_all_stack(lo,hi);
!         } /* for(p=GC_threads[i]...) */
!     } /* for(i=0;i<THREAD_TABLE_SZ...) */
  }
  
  /* Caller holds allocation lock.	*/
  void GC_stop_world()
  {
!     int i;
      GC_thread p;
!     pthread_t my_thread = pthread_self();
      kern_return_t kern_result;
      
!     #if DEBUG_THREADS
!     GC_printf1("Stopping the world from 0x%lx\n", pthread_self());
!     #endif
         
      /* Make sure all free list construction has stopped before we start. */
      /* No new construction can start, since free list construction is	*/
--- 14,271 ----
  */
  #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;
+ 
+ 
+ unsigned int FindTopOfStack(unsigned int stack_start) {
+   StackFrame	*frame;
+   
+   if (stack_start == 0) {
+     __asm__ volatile("lwz	%0,0(r1)" : "=r" (frame));
+   } else {
+     frame = (StackFrame *)stack_start;
+   }
+ 
+ # ifdef DEBUG_THREADS
+     /* GC_printf1("FindTopOfStack start at sp = %p\n", frame); */
+ # endif
+   do {
+     if (frame->savedSP == NULL) break;
+     		/* if there are no more stack frames, stop */
+ 
+     frame = (StackFrame*)frame->savedSP;
+ 
+     /* we do these next two checks after going to the next frame
+        because the LR for the first stack frame in the loop
+        is not set up on purpose, so we shouldn't check it. */
+     if ((frame->savedLR & ~3) == 0) break; /* if the next LR is bogus, stop */
+     if ((~(frame->savedLR) & ~3) == 0) break; /* ditto */
+   } while (1); 
+ 
+ # ifdef DEBUG_THREADS
+     /* GC_printf1("FindTopOfStack finish at sp = %p\n", frame); */
+ # endif
+ 
+   return (unsigned int)frame;
+ }	
+ 
  void GC_push_all_stacks() {
      int i;
      kern_return_t r;
!     mach_port_t me;
      ptr_t lo, hi;
!     thread_act_array_t act_list = 0;
!     mach_msg_type_number_t listcount = 0;
! 
!     me = mach_thread_self();
      if (!GC_thr_initialized) GC_thr_init();
      
!     r = task_threads(current_task(), &act_list, &listcount);
!     if(r != KERN_SUCCESS) ABORT("task_threads failed");
!     for(i = 0; i < listcount; i++) {
!       thread_act_t thread = act_list[i];
!       if (thread == me) {
! 	lo = GC_approx_sp();
! 	hi = (ptr_t)FindTopOfStack(0);
!       } else {
! #      ifdef POWERPC
! 	ppc_thread_state_t info;
! 	mach_msg_type_number_t outCount = THREAD_STATE_MAX;
! 	r = thread_get_state(thread, MACHINE_THREAD_STATE,
! 			     (natural_t *)&info, &outCount);
! 	if(r != KERN_SUCCESS) ABORT("task_get_state failed");
! 
! 	lo = (void*)(info.r1 - PPC_RED_ZONE_SIZE);
! 	hi = (ptr_t)FindTopOfStack(info.r1);
! 
! 	GC_push_one(info.r0); 
! 	GC_push_one(info.r2); 
! 	GC_push_one(info.r3); 
! 	GC_push_one(info.r4); 
! 	GC_push_one(info.r5); 
! 	GC_push_one(info.r6); 
! 	GC_push_one(info.r7); 
! 	GC_push_one(info.r8); 
! 	GC_push_one(info.r9); 
! 	GC_push_one(info.r10); 
! 	GC_push_one(info.r11); 
! 	GC_push_one(info.r12); 
! 	GC_push_one(info.r13); 
! 	GC_push_one(info.r14); 
! 	GC_push_one(info.r15); 
! 	GC_push_one(info.r16); 
! 	GC_push_one(info.r17); 
! 	GC_push_one(info.r18); 
! 	GC_push_one(info.r19); 
! 	GC_push_one(info.r20); 
! 	GC_push_one(info.r21); 
! 	GC_push_one(info.r22); 
! 	GC_push_one(info.r23); 
! 	GC_push_one(info.r24); 
! 	GC_push_one(info.r25); 
! 	GC_push_one(info.r26); 
! 	GC_push_one(info.r27); 
! 	GC_push_one(info.r28); 
! 	GC_push_one(info.r29); 
! 	GC_push_one(info.r30); 
! 	GC_push_one(info.r31);
! #      else
! 	/* FIXME: Remove after testing:	*/
! 	WARN("This is completely untested and likely will not work\n", 0);
! 	i386_thread_state_t info;
! 	mach_msg_type_number_t outCount = THREAD_STATE_MAX;
! 	r = thread_get_state(thread, MACHINE_THREAD_STATE,
! 			     (natural_t *)&info, &outCount);
! 	if(r != KERN_SUCCESS) ABORT("task_get_state failed");
! 
! 	lo = (void*)info.esp;
! 	hi = (ptr_t)FindTopOfStack(info.esp);
! 
! 	GC_push_one(info.eax); 
! 	GC_push_one(info.ebx); 
! 	GC_push_one(info.ecx); 
! 	GC_push_one(info.edx); 
! 	GC_push_one(info.edi); 
! 	GC_push_one(info.esi); 
! 	/* GC_push_one(info.ebp);  */
! 	/* GC_push_one(info.esp);  */
! 	GC_push_one(info.ss); 
! 	GC_push_one(info.eip); 
! 	GC_push_one(info.cs); 
! 	GC_push_one(info.ds); 
! 	GC_push_one(info.es); 
! 	GC_push_one(info.fs); 
! 	GC_push_one(info.gs); 
! #      endif /* !POWERPC */
!       }
! #     if DEBUG_THREADS
!        GC_printf3("Darwin: Stack for thread 0x%lx = [%lx,%lx)\n",
! 		  (unsigned long) thread,
! 		  (unsigned long) lo,
! 		  (unsigned long) hi
! 		 );
! #     endif
!       GC_push_all_stack(lo, hi); 
!     } /* for(p=GC_threads[i]...) */
  }
  
+ static mach_port_t GC_mach_handler_thread;
+ static int GC_use_mach_handler_thread = 0;
+ 
+ static struct GC_mach_thread GC_mach_threads[THREAD_TABLE_SZ];
+ static int GC_mach_threads_count;
+ 
+ void GC_stop_init() {
+   int i;
+ 
+   for (i = 0; i < THREAD_TABLE_SZ; i++) {
+     GC_mach_threads[i].thread = 0;
+     GC_mach_threads[i].already_suspended = 0;
+   }
+   GC_mach_threads_count = 0;
+ }
+ 
+ /* returns true if there's a thread in act_list that wasn't in old_list */
+ int GC_suspend_thread_list(thread_act_array_t act_list, int count, 
+ 			   thread_act_array_t old_list, int old_count) {
+   mach_port_t my_thread = mach_thread_self();
+   int i, j;
+ 
+   int changed = 0;
+ 
+   for(i = 0; i < count; i++) {
+     thread_act_t thread = act_list[i];
+ #   if DEBUG_THREADS 
+       GC_printf1("Attempting to suspend thread %p\n", thread);
+ #   endif
+     /* find the current thread in the old list */
+     int found = 0;
+     for(j = 0; j < old_count; j++) {
+       thread_act_t old_thread = old_list[j];
+       if (old_thread == thread) {
+ 	found = 1;
+ 	break;
+       }
+     }
+     if (!found) {
+       /* add it to the GC_mach_threads list */
+       GC_mach_threads[GC_mach_threads_count].thread = thread;
+       /* default is not suspended */
+       GC_mach_threads[GC_mach_threads_count].already_suspended = 0;
+       changed = 1;
+     }      
+ 
+     if (thread != my_thread &&
+ 	(!GC_use_mach_handler_thread
+ 	 || (GC_use_mach_handler_thread
+ 	     && GC_mach_handler_thread != thread))) {
+       struct thread_basic_info info;
+       mach_msg_type_number_t outCount = THREAD_INFO_MAX;
+       kern_return_t kern_result = thread_info(thread, THREAD_BASIC_INFO,
+ 				(thread_info_t)&info, &outCount);
+       if(kern_result != KERN_SUCCESS) {
+ 	/* the thread may have quit since the thread_threads () call 
+ 	 * we mark already_suspended so it's not dealt with anymore later
+ 	 */
+         if (!found) {
+ 	  GC_mach_threads[GC_mach_threads_count].already_suspended = TRUE;
+     	  GC_mach_threads_count++;
+ 	}
+ 	continue;
+       }
+ #     if DEBUG_THREADS
+         GC_printf2("Thread state for 0x%lx = %d\n", thread, info.run_state);
+ #     endif
+       if (!found) {
+ 	GC_mach_threads[GC_mach_threads_count].already_suspended = info.suspend_count;
+       }
+       if (info.suspend_count) continue;
+       
+ #     if DEBUG_THREADS
+         GC_printf1("Suspending 0x%lx\n", thread);
+ #     endif
+       /* Suspend the thread */
+       kern_result = thread_suspend(thread);
+       if(kern_result != KERN_SUCCESS) {
+ 	/* the thread may have quit since the thread_threads () call 
+ 	 * we mark already_suspended so it's not dealt with anymore later
+ 	 */
+         if (!found) {
+ 	  GC_mach_threads[GC_mach_threads_count].already_suspended = TRUE;
+     	  GC_mach_threads_count++;
+ 	}
+ 	continue;
+       }
+     } 
+     if (!found) GC_mach_threads_count++;
+   }
+   return changed;
+ }
+ 
+ 
  /* Caller holds allocation lock.	*/
  void GC_stop_world()
  {
!   int i, changes;
      GC_thread p;
!     mach_port_t my_thread = mach_thread_self();
      kern_return_t kern_result;
+     thread_act_array_t act_list, prev_list;
+     mach_msg_type_number_t listcount, prevcount;
      
! #   if DEBUG_THREADS
!       GC_printf1("Stopping the world from 0x%lx\n", mach_thread_self());
! #   endif
! 
!     /* clear out the mach threads list table */
!     GC_stop_init(); 
         
      /* Make sure all free list construction has stopped before we start. */
      /* No new construction can start, since free list construction is	*/
*************** void GC_stop_world()
*** 122,164 ****
        /* We should have previously waited for it to become zero. */
  #   endif /* PARALLEL_MARK */
  
!     for (i = 0; i < THREAD_TABLE_SZ; i++) {
!         for (p = GC_threads[i]; p != 0; p = p -> next) {
!             if (p -> id == my_thread) continue;
!             if (p -> flags & FINISHED) continue;
!             if (p -> thread_blocked) /* Will wait */ continue;
!             
!             #if DEBUG_THREADS
!             GC_printf1("Suspending thread 0x%lx\n", p -> id);
!             #endif
!             
!             /* Suspend the thread */
!             kern_result = thread_suspend(p->stop_info.mach_thread);
!             if(kern_result != KERN_SUCCESS) ABORT("thread_suspend failed");
!             
!             /* This is only needed if we are modifying the threads 
!                state. thread_abort_safely should also be used
!                if this code is ever added in again.
!                
!                kern_result = thread_abort(p->stop_info.mach_thread);
!                if(kern_result != KERN_SUCCESS)
!                    ABORT("thread_abort failed (%ul)",kern_result);
!             */
!         }
!     }
!     
  #   ifdef MPROTECT_VDB
!     if(GC_incremental) {
          extern void GC_mprotect_stop();
          GC_mprotect_stop();
!     }
  #   endif
      
  #   ifdef PARALLEL_MARK
        GC_release_mark_lock();
  #   endif
      #if DEBUG_THREADS
!       GC_printf1("World stopped from 0x%lx\n", pthread_self());
      #endif
  }
  
--- 277,316 ----
        /* We should have previously waited for it to become zero. */
  #   endif /* PARALLEL_MARK */
  
!       /* Loop stopping threads until you have gone over the whole list
! 	 twice without a new one appearing. thread_create() won't
! 	 return (and thus the thread stop) until the new thread
! 	 exists, so there is no window whereby you could stop a
! 	 thread, recognise it is stopped, but then have a new thread
! 	 it created before stopping show up later.
!       */
!       
!       changes = 1;
!       prev_list = NULL;
!       prevcount = 0;
!       do {
! 	int result;
! 	kern_result = task_threads(current_task(), &act_list, &listcount);
! 	result = GC_suspend_thread_list(act_list, listcount,
! 					prev_list, prevcount);
! 	changes = result;
! 	prev_list = act_list;
! 	prevcount = listcount;
!       } while (changes);
!       
!  
  #   ifdef MPROTECT_VDB
!       if(GC_incremental) {
          extern void GC_mprotect_stop();
          GC_mprotect_stop();
!       }
  #   endif
      
  #   ifdef PARALLEL_MARK
        GC_release_mark_lock();
  #   endif
      #if DEBUG_THREADS
!       GC_printf1("World stopped from 0x%lx\n", my_thread);
      #endif
  }
  
*************** void GC_stop_world()
*** 166,209 ****
  /* the world stopped.							*/
  void GC_start_world()
  {
!     pthread_t my_thread = pthread_self();
!     int i;
!     GC_thread p;
!     kern_return_t kern_result;
! 
  #   if DEBUG_THREADS
        GC_printf0("World starting\n");
  #   endif
  
  #   ifdef MPROTECT_VDB
!     if(GC_incremental) {
          extern void GC_mprotect_resume();
          GC_mprotect_resume();
!     }
  #   endif
  
!     for (i = 0; i < THREAD_TABLE_SZ; i++) {
!         for (p = GC_threads[i]; p != 0; p = p -> next) {
!             if (p -> id == my_thread) continue;
!             if (p -> flags & FINISHED) continue;
!             if (p -> thread_blocked) continue;
!     
!             #if DEBUG_THREADS
!             GC_printf1("Resuming 0x%lx\n", p -> id);
!             #endif
!             
!             /* Resume the thread */
!             kern_result = thread_resume(p->stop_info.mach_thread);
!             if(kern_result != KERN_SUCCESS) ABORT("thread_resume failed");
!         }
      }
!     #if DEBUG_THREADS
!       GC_printf0("World started\n");
!     #endif
  }
  
! void GC_stop_init() {
! 
  }
  
  #endif
--- 318,380 ----
  /* the world stopped.							*/
  void GC_start_world()
  {
!   mach_port_t my_thread = mach_thread_self();
!   int i, j;
!   GC_thread p;
!   kern_return_t kern_result;
!   thread_act_array_t act_list;
!   mach_msg_type_number_t listcount;
!   
  #   if DEBUG_THREADS
        GC_printf0("World starting\n");
  #   endif
  
  #   ifdef MPROTECT_VDB
!       if(GC_incremental) {
          extern void GC_mprotect_resume();
          GC_mprotect_resume();
!       }
  #   endif
  
!     kern_result = task_threads(current_task(), &act_list, &listcount);
!     for(i = 0; i < listcount; i++) {
!       thread_act_t thread = act_list[i];
!       if (thread != my_thread &&
! 	  (!GC_use_mach_handler_thread ||
! 	   (GC_use_mach_handler_thread && GC_mach_handler_thread != thread))) {
! 	for(j = 0; j < GC_mach_threads_count; j++) {
! 	  if (thread == GC_mach_threads[j].thread) {
! 	    if (GC_mach_threads[j].already_suspended) {
! #             if DEBUG_THREADS
! 	        GC_printf1("Not resuming already suspended thread %p\n", thread);
! #             endif
! 	      continue;
! 	    }
! 	    struct thread_basic_info info;
! 	    mach_msg_type_number_t outCount = THREAD_INFO_MAX;
! 	    kern_result = thread_info(thread, THREAD_BASIC_INFO,
! 				      (thread_info_t)&info, &outCount);
! 	    if(kern_result != KERN_SUCCESS) ABORT("thread_info failed");
! #           if DEBUG_THREADS
! 	      GC_printf2("Thread state for 0x%lx = %d\n", thread,
! 			 info.run_state);
! 	      GC_printf1("Resuming 0x%lx\n", thread);
! #           endif
! 	    /* Resume the thread */
! 	    kern_result = thread_resume(thread);
! 	    if(kern_result != KERN_SUCCESS) ABORT("thread_resume failed");
! 	  } 
! 	}
!       }
      }
! #   if DEBUG_THREADS
!      GC_printf0("World started\n");
! #   endif
  }
  
! void GC_darwin_register_mach_handler_thread(mach_port_t thread) {
!   GC_mach_handler_thread = thread;
!   GC_use_mach_handler_thread = 1;
  }
  
  #endif
diff -Nrcpad gcc-3.4.3/boehm-gc/dbg_mlc.c gcc-4.0.0/boehm-gc/dbg_mlc.c
*** gcc-3.4.3/boehm-gc/dbg_mlc.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/dbg_mlc.c	Fri Aug 13 23:05:29 2004
***************
*** 2,8 ****
   * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
   * Copyright (c) 1991-1995 by Xerox Corporation.  All rights reserved.
   * Copyright (c) 1997 by Silicon Graphics.  All rights reserved.
!  * Copyright (c) 1999-2000 by Hewlett-Packard Company.  All rights reserved.
   *
   * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
   * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
--- 2,8 ----
   * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
   * Copyright (c) 1991-1995 by Xerox Corporation.  All rights reserved.
   * Copyright (c) 1997 by Silicon Graphics.  All rights reserved.
!  * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
   *
   * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
   * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
*************** ptr_t p;
*** 195,207 ****
  		 (unsigned long)i);
        switch(source) {
  	case GC_REFD_FROM_ROOT:
! 	  GC_err_printf1("root at 0x%lx\n", (unsigned long)base);
  	  goto out;
  	case GC_REFD_FROM_REG:
! 	  GC_err_printf0("root in register\n");
  	  goto out;
  	case GC_FINALIZER_REFD:
! 	  GC_err_printf0("list of finalizable objects\n");
  	  goto out;
  	case GC_REFD_FROM_HEAP:
  	  GC_err_printf1("offset %ld in object:\n", (unsigned long)offset);
--- 195,207 ----
  		 (unsigned long)i);
        switch(source) {
  	case GC_REFD_FROM_ROOT:
! 	  GC_err_printf1("root at 0x%lx\n\n", (unsigned long)base);
  	  goto out;
  	case GC_REFD_FROM_REG:
! 	  GC_err_printf0("root in register\n\n");
  	  goto out;
  	case GC_FINALIZER_REFD:
! 	  GC_err_printf0("list of finalizable objects\n\n");
  	  goto out;
  	case GC_REFD_FROM_HEAP:
  	  GC_err_printf1("offset %ld in object:\n", (unsigned long)offset);
*************** ptr_t p;
*** 217,231 ****
  
    /* Force a garbage collection and generate a backtrace from a	*/
    /* random heap address.					*/
!   void GC_generate_random_backtrace(void)
    {
      void * current;
-     GC_gcollect();
      current = GC_generate_random_valid_address();
!     GC_printf1("Chose address 0x%lx in object\n", (unsigned long)current);
      GC_print_backtrace(current);
    }
      
  #endif /* KEEP_BACK_PTRS */
  
  # define CROSSES_HBLK(p, sz) \
--- 217,236 ----
  
    /* Force a garbage collection and generate a backtrace from a	*/
    /* random heap address.					*/
!   void GC_generate_random_backtrace_no_gc(void)
    {
      void * current;
      current = GC_generate_random_valid_address();
!     GC_printf1("\n****Chose address 0x%lx in object\n", (unsigned long)current);
      GC_print_backtrace(current);
    }
      
+   void GC_generate_random_backtrace(void)
+   {
+     GC_gcollect();
+     GC_generate_random_backtrace_no_gc();
+   }
+     
  #endif /* KEEP_BACK_PTRS */
  
  # define CROSSES_HBLK(p, sz) \
*************** register oh * ohdr;
*** 325,330 ****
--- 330,387 ----
  }
  #endif /* !SHORT_DBG_HDRS */
  
+ static GC_describe_type_fn GC_describe_type_fns[MAXOBJKINDS] = {0};
+ 
+ void GC_register_describe_type_fn(kind, fn)
+ int kind;
+ GC_describe_type_fn fn;
+ {
+   GC_describe_type_fns[kind] = fn;
+ }
+ 
+ /* Print a type description for the object whose client-visible address	*/
+ /* is p.								*/
+ void GC_print_type(p)
+ ptr_t p;
+ {
+     hdr * hhdr = GC_find_header(p);
+     char buffer[GC_TYPE_DESCR_LEN + 1];
+     int kind = hhdr -> hb_obj_kind;
+ 
+     if (0 != GC_describe_type_fns[kind] && GC_is_marked(GC_base(p))) {
+ 	/* This should preclude free list objects except with	*/
+ 	/* thread-local allocation.				*/
+ 	buffer[GC_TYPE_DESCR_LEN] = 0;
+ 	(GC_describe_type_fns[kind])(p, buffer);
+ 	GC_ASSERT(buffer[GC_TYPE_DESCR_LEN] == 0);
+ 	GC_err_puts(buffer);
+     } else {
+ 	switch(kind) {
+ 	  case PTRFREE:
+ 	    GC_err_puts("PTRFREE");
+ 	    break;
+ 	  case NORMAL:
+ 	    GC_err_puts("NORMAL");
+ 	    break;
+ 	  case UNCOLLECTABLE:
+ 	    GC_err_puts("UNCOLLECTABLE");
+ 	    break;
+ #	  ifdef ATOMIC_UNCOLLECTABLE
+ 	    case AUNCOLLECTABLE:
+ 	      GC_err_puts("ATOMIC UNCOLLECTABLE");
+ 	      break;
+ #	  endif
+ 	  case STUBBORN:
+ 	    GC_err_puts("STUBBORN");
+ 	    break;
+ 	  default:
+ 	    GC_err_printf2("kind %ld, descr 0x%lx", kind, hhdr -> hb_descr);
+ 	}
+     }
+ }
+ 
+     
+ 
  void GC_print_obj(p)
  ptr_t p;
  {
*************** ptr_t p;
*** 334,344 ****
      GC_err_printf1("0x%lx (", ((unsigned long)ohdr + sizeof(oh)));
      GC_err_puts(ohdr -> oh_string);
  #   ifdef SHORT_DBG_HDRS
!       GC_err_printf1(":%ld)\n", (unsigned long)(ohdr -> oh_int));
  #   else
!       GC_err_printf2(":%ld, sz=%ld)\n", (unsigned long)(ohdr -> oh_int),
            			        (unsigned long)(ohdr -> oh_sz));
  #   endif
      PRINT_CALL_CHAIN(ohdr);
  }
  
--- 391,403 ----
      GC_err_printf1("0x%lx (", ((unsigned long)ohdr + sizeof(oh)));
      GC_err_puts(ohdr -> oh_string);
  #   ifdef SHORT_DBG_HDRS
!       GC_err_printf1(":%ld, ", (unsigned long)(ohdr -> oh_int));
  #   else
!       GC_err_printf2(":%ld, sz=%ld, ", (unsigned long)(ohdr -> oh_int),
            			        (unsigned long)(ohdr -> oh_sz));
  #   endif
+     GC_print_type((ptr_t)(ohdr + 1));
+     GC_err_puts(")\n");
      PRINT_CALL_CHAIN(ohdr);
  }
  
*************** void GC_start_debugging()
*** 403,408 ****
--- 462,469 ----
      GC_register_displacement((word)sizeof(oh));
  }
  
+ size_t GC_debug_header_size = sizeof(oh);
+ 
  # if defined(__STDC__) || defined(__cplusplus)
      void GC_debug_register_displacement(GC_word offset)
  # else
*************** GC_PTR p;
*** 757,763 ****
  		    uncollectable = TRUE;
  	    }
  #	endif
! 	if (uncollectable) GC_free(base);
      } /* !GC_find_leak */
  }
  
--- 818,832 ----
  		    uncollectable = TRUE;
  	    }
  #	endif
! 	if (uncollectable) {
! 	    GC_free(base);
! 	} else {
! 	    size_t i;
! 	    size_t obj_sz = hhdr -> hb_sz - BYTES_TO_WORDS(sizeof(oh));
! 
! 	    for (i = 0; i < obj_sz; ++i) ((word *)p)[i] = 0xdeadbeef;
! 	    GC_ASSERT((word *)p + i == (word *)base + hhdr -> hb_sz);
! 	}
      } /* !GC_find_leak */
  }
  
*************** GC_PTR *ocd;
*** 1013,1019 ****
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base || (ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	    "GC_debug_register_finalizer called with non-base-pointer 0x%lx\n",
  	    obj);
--- 1082,1089 ----
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base) return;
!     if ((ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	    "GC_debug_register_finalizer called with non-base-pointer 0x%lx\n",
  	    obj);
*************** GC_PTR *ocd;
*** 1045,1051 ****
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base || (ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	  "GC_debug_register_finalizer_no_order called with non-base-pointer 0x%lx\n",
  	  obj);
--- 1115,1122 ----
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base) return;
!     if ((ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	  "GC_debug_register_finalizer_no_order called with non-base-pointer 0x%lx\n",
  	  obj);
*************** GC_PTR *ocd;
*** 1078,1084 ****
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base || (ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	    "GC_debug_register_finalizer_ignore_self called with non-base-pointer 0x%lx\n",
  	    obj);
--- 1149,1156 ----
      GC_finalization_proc my_old_fn;
      GC_PTR my_old_cd;
      ptr_t base = GC_base(obj);
!     if (0 == base) return;
!     if ((ptr_t)obj - base != sizeof(oh)) {
          GC_err_printf1(
  	    "GC_debug_register_finalizer_ignore_self called with non-base-pointer 0x%lx\n",
  	    obj);
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README gcc-4.0.0/boehm-gc/doc/README
*** gcc-3.4.3/boehm-gc/doc/README	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README	Fri Aug 13 23:05:31 2004
***************
*** 1,7 ****
  Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers
  Copyright (c) 1991-1996 by Xerox Corporation.  All rights reserved.
  Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
! Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved.
  
  The file linux_threads.c is also
  Copyright (c) 1998 by Fergus Henderson.  All rights reserved.
--- 1,7 ----
  Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers
  Copyright (c) 1991-1996 by Xerox Corporation.  All rights reserved.
  Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
! Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
  
  The file linux_threads.c is also
  Copyright (c) 1998 by Fergus Henderson.  All rights reserved.
*************** are GPL'ed, but with an exception that s
*** 28,34 ****
  collector.  (If you are concerned about such things, I recommend you look
  at the notice in config.guess or ltmain.sh.)
  
! This is version 6.3alpha1 of a conservative garbage collector for C and C++.
  
  You might find a more recent version of this at
  
--- 28,34 ----
  collector.  (If you are concerned about such things, I recommend you look
  at the notice in config.guess or ltmain.sh.)
  
! This is version 6.3 of a conservative garbage collector for C and C++.
  
  You might find a more recent version of this at
  
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.changes gcc-4.0.0/boehm-gc/doc/README.changes
*** gcc-3.4.3/boehm-gc/doc/README.changes	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README.changes	Fri Aug 13 23:05:32 2004
*************** Since 6.2alpha4:
*** 1836,1842 ****
     libgccpp.
  
  Since 6.2alpha5:
!  - There was extra underscore in the name of GC_save_registers_in_stack
     for NetBSD/SPARC.  (Thanks to Jaap Boender for the patch.)
   - Integrated Brian Alliet's patch for Darwin.  This restructured the
     linuxthreads/pthreads support to separate generic pthreads support
--- 1836,1842 ----
     libgccpp.
  
  Since 6.2alpha5:
!  - There was an extra underscore in the name of GC_save_registers_in_stack
     for NetBSD/SPARC.  (Thanks to Jaap Boender for the patch.)
   - Integrated Brian Alliet's patch for Darwin.  This restructured the
     linuxthreads/pthreads support to separate generic pthreads support
*************** Since 6.2:
*** 1894,1900 ****
--- 1894,2112 ----
     (Thanks to Roger Sayle for the patch.)
   - Applied more AIX threads patches from Scott Ananian.
  
+ Since 6.3alpha1:
+  - Reenabled I_HOLD_LOCK assertion in aix_irix_threads.h.
+  - Put back the WINABI qualifier for GC_CreateThread.  (Thanks to
+    Danny Smith for the patch.  6.3alpha1 had the qualifier in one place
+    but not elsewhere, which was clearly wrong.)
+  - Sometimes explicitly define __private_extern__ before DARWIN dyld.h
+    include.  (Thanks to Andreas Tobker for postting the patch.)
+  - Included signal.h from pthread_support.c.  Removed GC_looping_handler,
+    which was dead code.
+  - GC_find_start was misdeclared by gc_pmark.h if PRINT_BLACK_LIST was
+    defined.  (Thanks to Glauco Masotti for testing and reporting this.)
+    Changed GC_find_start to never just return 0.  According to its
+    comment it doesn't, and it's unclear that's correct.
+  - GC_alloc_large had several largely compensating bugs in the
+    computation of GC_words_wasted.  (It was confused about bytes vs.
+    words in two places.)
+  - Integrated Slava Sysoltev's patch to support more recent versions of
+    the Intel compiler on IA64/Linux.
+  - Changed win32 spinlock initialization to conditionally set a spin count.
+    (Emmanual Stumpf pointed out that enabling this makes a large performance
+    difference on win32 multiprocessors.)  Also cleaned up the win32 spinlock
+    initialization code a bit.
+  - Fixed thread support for HP/UX/IA64.  The register backing store base for
+    the main thread was sometimes not set correctly.  (Thanks to Laurent
+    Morichetti.)
+  - Added -DEMPTY_GETENV_RESULTS flag to work around Wine problem.
+  - Declare GC_stack_alloc and GC_stack_free in solaris_threads.h to
+    avoid 64-bit size mismatches.  (Thanks to Bernie Solomon.)
+  - Fixed GC_generic_push_regs to avoid a potential and very unfortunate
+    tail call optimization.  This could lead to prematurely reclaimed
+    objects on configurations that used the generic routine and the new
+    build infrastructure (which potentially optimizes mach_dep.c).
+    This was a serious bug, but it's unclear whether it has resulted in
+    any real failures.
+  - Fixed CORD_str to deal with signed characters.  (Thanks to Alexandr
+    Petrosian for noticing the problem and supplying the patch.)
+  - Merged a couple of NOSYS/ECOS tests into os_dep.c from gcj.  (Thanks
+    to Anthony Green.)
+  - Partially merged a win32 patch from Ben Hutchings, and substantially
+    revised other parts of win32_threads.c.  It had several problems.
+    Under MinGW with a statically linked library, the main thread was
+    not registered.  Cygwin detached threads leaked thread descriptors.
+    There were several race conditions.  For now, unfortunately the
+    static threads limit remains, though we increased it, and made table
+    traversal cost depend on the actual thread count.
+    There is also still some code duplication with pthread_support.c.
+    (Thread descriptors did become much smaller, since Ben Hutchings
+    removed the thread context from them.)
+  - Integrated a Solaris configure.in patch from Rainer Orth.
+  - Added GC_IGNORE_FB and associated warning to very partially address
+    the issue of the collector treating a mapped frame buffer as part
+    of the root set.  (Thanks to David Peroutka for providing some
+    insight.  More would be helpful.  Is there anything that can be used
+    to at least partially identify such memory segments?)
+    
+ Since 6.3alpha2:
+  - Removed -DSMALL_CONFIG from BCC_MAKEFILE.
+  - Changed macros to test for an ARM processor (Patch from Richard Earnshaw.)
+  - Mostly applied a DJGPP patch from Doug Kaufman.  Especially Makefile.dj
+    had suffered from serious bit rot.
+  - Rewrote GC_apply_to_maps, eliminating an off-by-one subscript error,
+    and a call to alloca (for lcc compatibility).
+  - Changed USE_MUNMAP behavior on posixy platforms to immediately remap
+    the memory with PROT_NONE instead of unmapping it.  The latter risks
+    an intervening mmap grabbing the address space out from underneath us.
+    Updated this code to reflect a cleaner patch from Ulrich Drepper.
+  - Replaced _T with _Tp in new_gc_alloc.h to avoid a MACOS X conflict.
+    (Patch from Andrew Begel.)
+  - Dynamically choose whether or not lock should spin on win32.  (Thanks
+    to Maurizio Vairani for the patch.)  This may be a significant performance
+    improvement for win32.
+  - Fix Makefile.direct to actually include NT_STATIC_THREADS_MAKEFILE
+    in the distribution.  (Again thanks to Maurizio Vairani.)
+  - Maybe_install_looping_handler() was accidentally exported, violating
+    our name space convention.
+  - Made os_dep.c use sigsetjmp and SA_NODEFER for NetBSD.  (Thanks to
+    Christian Limpach.)  (I generalized the patch to use sigsetjmp on all
+    UNIX_LIKE platforms, admittedly a slightly risky move.  But it may avoid
+    similar problems on some other platforms. I also cleaned up the defn
+    of UNIX_LIKE a bit. - Hans)
+  - Integrated Andrew Begel's Darwin threads patch, adjusted according to
+    some of Fergus Hendersons's comments.  (Patch didn't apply cleanly,
+    errors are possible.)
+  - Added another test or two for the Intel 8.0 compiler to avoid
+    confusing it with gcc.  The single-threaded collector should now build
+    with icc, at least on ia64. 
+ 
+ Since 6.3alpha3:
+  - USE_MMAP was broken by confusion in the code dealing with USE_MMAP_ANON.
+    (This was pointed out, and fixes were suggested by several other people.)
+  - Darwin supprt was broken in alpha3 as a result of my misintegration of
+    Andrew Begel's patches.  Fixed with another patch from Andrew Begel.
+  - A new sanity check in pthread_stop_world.c:GC_push_all_stacks() was
+    overly aggressive.  We may collect from an unregistered thread during
+    thread creation.  Fixed by explicitly checking for that case.  (Added
+    GC_in_thread_creation.)
+ 
+ Since 6.3alpha4:
+  - Fix & vs && typo in GC_generic_malloc and
+    GC_generic_malloc_ignore_off_page.  (Propagated from the gcc tree.)
+  - Removed SA_NODEFER hack from NetBSD and Solaris write-protect handler.
+    (According to Christian Limpach, the NetBSD problem is fixed.
+    Presumably so is the Solaris 2.3 problem.)
+  - Removed placement delete from gc_cpp.h for the SGI compiler.
+    (Thanks to Simon Gornall for the patch.)
+  - Changed semantics of the GC_IGNORE_FB environment variable, based 
+    on experimentation by Nicolas Cannasse pointing out that the old
+    interpretation was useless.  We still need help in identifying win32
+    graphics memory mappings.  The current "solution" is a hack.
+  - Removed "MAKEOVERRIDES =" from Makefile.am and thus Makefile.in.
+    It probably made more sense in the gcc context.
+  - Explicitly ensure that NEED_FIND_LIMIT is defined for {Open,Net}BSD/ELF.
+  - Replaced USE_HPUX_TLS macro by USE_COMPILER_TLS, since gcc often
+    supports the same extension on various platforms.
+  - Added some basic (completely untested) defines for win64, in support
+    of future work.
+  - Declared GC_jmp_buf in os_dep.s as JMP_BUF instead of jmp_buf, fixing
+    a memory overwrite bug on Solaris and perhaps other platforms.
+  - Added 0 != __libc_stack_end test to GC_linux_stack_base.  (Thanks to Jakub
+    Jelinek, both for the patch, and for explaining the problem to me.)
+    Otherwise "prelink"ing could cause the collector to fail.
+  - Changed default thread local storage implementation to USE_PTHREAD_SPECIFIC
+    for HP/UX with gcc.  The compiler-based implementation appears to work
+    only with the vendor compiler.
+  - Export GC_debug_header_size and GC_USR_PTR_FROM_BASE from gc_mark.h,
+    making client mark code cleaner and less dependent on GC version.
+  - Export several new procedures and GC_generic_malloc from gc_mark.h
+    to support user-defined kinds.  Use the new procedures to replace existing
+    code in gcj_mlc.c and typd_mlc.c.
+  - Added support for GC_BACKTRACES.
+  - Fixed a remaining problem in CORD_str with signed characters.  (Thanks
+    to Alexandr Petrosian for the patch.)
+  - Removed supposedly redundant, but very buggy, definitions of finalizer
+    macros from javaxfc.h.  Fortunately this file probably has no users.
+    The correct declarations were already in gc.h.
+  - Also need to set GC_in_thread_creation while waiting for GC during
+    thread termination, since it is also possible to collect from an
+    unregistered thread in that case.
+  - Define NO_GETENV for Windows CE, since getenv doesn't appear to exist.
+    + some other minor WinCE fixes. (Thanks to Alain Novak.)
+  - Added GC_register_describe_type_fn.
+  - Arrange for debugging finalizer registration to ignore non-heap
+    registrations, since the regular version of the routine also behaves
+    that way.
+  - GC_gcj_malloc and friends need to check for finalizers waiting to be run.
+    One of the more obscure allocation routines with missing a LOCK() call.
+  - Fixed cvtres invocations in NT_MAKEFILE and NT_STATIC_THREADS_MAKEFILE
+    to work with VS.NET.
+  - Cleaned up GC_INIT calls in test.  Updated gc.man to encourage GC_INIT
+    use in portable code.
+  - Taught the GC to use libunwind if --enable-full-debug is specified on
+    IA64 and libunwind is present.
+  - The USE_MUNMAP code could get confused about the age of a block and
+    prematurely unmap it.  GC_unmap_old had a bug related to wrapping of
+    GC_gc_no.  GC_freehblk and GC_merge_unmapped didn't maintain
+    hb_last_reclaimed reasonably when blocks were merged.  The code was
+    fixed to reflect original intent, but that may not always be an
+    improvement.  See todo list item.
+ 
+ Since 6.3alpha5:
+  - Define USE_GENERIC_PUSH_REGS for NetBSD/M68K.
+  - Fixed the X86_64 PREFETCH macros to correctly handle ia32e (which uses
+    different prefetch instructions from AMD64).  (Thanks to H.J. Lu.)
+  - GC_config_macros.h did not correctly define GC_WIN32_THREADS from
+    GC_THREADS. 
+  - Added simple_example.html.
+  - Merged Andrew Gray's patch to correctly restore signal handlers on
+    FreeBSD.
+  - Merged a patch from Andreas Jaeger to deal with prefetch-related warnings
+    on x86-64.  Added some other casts so that the PREFETCH macros
+    always get a ptr_t argument.  Removed some casts inthe PREFETCH
+    implementations.
+  - At Jesse Jones suggestion: Added a header guard for gc_allocator.h
+    and changed GC_debug_free to clobber contents of deallocated object.
+  - The signal masking code in pthread_stop_world.c contained some errors.
+    In particular SIGSEGV was masked in the handler, in spite of the fact that
+    it wrote to the heap.  This could lead to an uncaught SIGSEGV, which
+    apparently became much more likely in Linux 2.6.  Also fixed some
+    typos, and reduced code duplication in the same area.
+  - Remove ltconfig, clean up configure messages for DGUX (thanks to
+    Adrian Bunk for the patches).
+  - Integrated NetBSD/OpenBSD patches from Marc Recht and Matthias Drochner.
+ 
+ Since gc6.3alpha6:
+  - Compile test_cpp.cc with CXXCOMPILE instead of COMPILE.
+  - Very large allocations could cause a collector hang.  Correct
+    calculation of GC_collect_at_heapsize.
+  - GC_print_hblkfreelist printed some bogus results if USE_MUNMAP
+    was defined.
+  - The generic GC_THREADS macro didn't work correctly on Solaris,
+    since the implementation failed to include gc_config_macros.h
+    before deciding whether or not to compile the rest of the file.
+  - Threadlibs.c failed to expand the generic GC_THREADS macro.
+  - Correct MacOSX thread stop code. (Thanks to Dick Porter.)
+  - SMALL_OBJ definition was off by one.  This could cause crashes
+    at startup.  (Thanks to Zoltan Varga for narrowing this down to
+    a trivial test case.)
+  - Integrate Paolo Molara's patch to deal with a race in the Darwin
+    thread stopping code.
+  - Changed X86_64 implementation to use SA_SIGINFO in the MPROTECT_VDB
+    implementation.  The old approach appears to have been broken by
+    recent kernels.
+  - Add GC_ATTR_UNUSED to eliminate a warning in gc_allocator.h.  (Thanks
+    to Andrew Begel.)
+  - Fix GC_task_self declaration in os_dep.c.  (Thanks to Andrew Pinski.)
+  - Increase INITIAL_BUF_SZ in os_dep.c for Solaris /proc reads.
+   
  To do:
+  - The USE_MUNMAP code should really use a separate data structure
+    indexed by physical page to keep track of time since last use of
+    a page.  Using hblk headers means we lose track of ages when
+    blocks are merged, and we can't unmap pages that have been allocated and
+    dropped by the blacklisting code.  I suspect both of these matter.
   - A dynamic libgc.so references dlopen unconditionally, but doesn't link
     against libdl.
   - GC_proc_fd for Solaris is not correctly updated in response to a
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.darwin gcc-4.0.0/boehm-gc/doc/README.darwin
*** gcc-3.4.3/boehm-gc/doc/README.darwin	Mon Jul 28 03:46:20 2003
--- gcc-4.0.0/boehm-gc/doc/README.darwin	Fri Aug 13 23:05:32 2004
***************
*** 1,5 ****
! Darwin/MacOSX Support - July 22, 2003
! ====================================
  
  Important Usage Notes
  =====================
--- 1,5 ----
! Darwin/MacOSX Support - December 16, 2003
! =========================================
  
  Important Usage Notes
  =====================
*************** run and perhaps called GC_malloc(), crea
*** 15,21 ****
  for each library to call GC_init():
  
  #include <gc/gc.h>
! void my_library_init() { GC_init(); }
  
  Compile this code into a my_library_init.o, and link it into your
  dylib. When you link the dylib, pass the -init argument with
--- 15,21 ----
  for each library to call GC_init():
  
  #include <gc/gc.h>
! extern "C" void my_library_init() { GC_init(); }
  
  Compile this code into a my_library_init.o, and link it into your
  dylib. When you link the dylib, pass the -init argument with
*************** work reliably with workarounds for a few
*** 34,39 ****
--- 34,45 ----
  these workaround may not work correctly in all cases. There may also
  be additional problems that I have not found. 
  
+ Thread-local GC allocation will not work with threads that are not
+ created using the GC-provided override of pthread_create(). Threads
+ created without the GC-provided pthread_create() do not have the
+ necessary data structures in the GC to store this data. 
+ 
+ 
  Implementation Information
  ==========================
  Darwin/MacOSX support is nearly complete. Thread support is reliable on 
*************** Darwin versions (MacOSX 10.1). Shared li
*** 42,52 ****
  added and the gc can be run from a shared library. There is currently only
  support for Darwin/PPC although adding x86 support should be trivial.
  
! Thread support is implemented in terms of mach thread_suspend and 
  thread_resume calls. These provide a very clean interface to thread
  suspension. This implementation doesn't rely on pthread_kill so the
! code works on Darwin < 6.0 (MacOSX 10.1). All the code to stop the
! world is located in darwin_stop_world.c.
  
  The original incremental collector support unfortunatelly no longer works
  on recent Darwin versions. It also relied on some undocumented kernel
--- 48,74 ----
  added and the gc can be run from a shared library. There is currently only
  support for Darwin/PPC although adding x86 support should be trivial.
  
! Thread support is implemented in terms of mach thread_suspend and
  thread_resume calls. These provide a very clean interface to thread
  suspension. This implementation doesn't rely on pthread_kill so the
! code works on Darwin < 6.0 (MacOSX 10.1). All the code to stop and
! start the world is located in darwin_stop_world.c.
! 
! Since not all uses of the GC enable clients to override pthread_create()
! before threads have been created, the code for stopping the world has
! been rewritten to look for threads using Mach kernel calls. Each
! thread identified in this way is suspended and resumed as above. In
! addition, since Mach kernel threads do not contain pointers to their
! stacks, a stack-walking function has been written to find the stack
! limits. Given an initial stack pointer (for the current thread, a
! pointer to a stack-allocated local variable will do; for a non-active
! thread, we grab the value of register 1 (on PowerPC)), it
! will walk the PPC Mach-O-ABI compliant stack chain until it reaches the
! top of the stack. This appears to work correctly for GCC-compiled C,
! C++, Objective-C, and Objective-C++ code, as well as for Java
! programs that use JNI. If you run code that does not follow the stack
! layout or stack pointer conventions laid out in the PPC Mach-O ABI,
! then this will likely crash the garbage collector. 
  
  The original incremental collector support unfortunatelly no longer works
  on recent Darwin versions. It also relied on some undocumented kernel
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.environment gcc-4.0.0/boehm-gc/doc/README.environment
*** gcc-3.4.3/boehm-gc/doc/README.environment	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README.environment	Fri Aug 13 23:05:32 2004
***************
*** 1,6 ****
  The garbage collector looks at a number of environment variables which are
  then used to affect its operation.  These are examined only on Un*x-like
! platforms.
  
  GC_INITIAL_HEAP_SIZE=<bytes> -	Initial heap size in bytes.  May speed up
  				process start-up.
--- 1,6 ----
  The garbage collector looks at a number of environment variables which are
  then used to affect its operation.  These are examined only on Un*x-like
! platforms and win32.
  
  GC_INITIAL_HEAP_SIZE=<bytes> -	Initial heap size in bytes.  May speed up
  				process start-up.
*************** GC_DUMP_REGULARLY - Generate a GC debugg
*** 26,31 ****
--- 26,39 ----
  		    if you have a bug to report, but please include only the
  		    last complete dump.
  
+ GC_BACKTRACES=<n> - Generate n random backtraces (for heap profiling) after
+ 		    each GC.  Collector must have been built with
+ 		    KEEP_BACK_PTRS.  This won't generate useful output unless
+ 		    most objects in the heap were allocated through debug
+ 		    allocators.  This is intended to be only a statistical
+ 		    sample;  individual traces may be erroneous due to
+ 		    concurrent heap mutation.
+ 
  GC_PRINT_ADDRESS_MAP - Linux only.  Dump /proc/self/maps, i.e. various address
  		       maps for the process, to stderr on every GC.  Useful for
  		       mapping root addresses to source for deciphering leak
*************** GC_RETRY_SIGNALS, GC_NO_RETRY_SIGNALS - 
*** 86,91 ****
--- 94,121 ----
  		     was turned into a runtime flag to enable last-minute
  		     work-arounds.
  
+ GC_IGNORE_FB[=<n>] -  (Win32 only.) Try to avoid treating a mapped
+ 		frame buffer as part of the root set.  Certain (higher end?)
+ 		graphics cards seems to result in the graphics memory mapped
+ 		into the user address space as writable memory.
+ 		Unfortunately, there seems to be no systematic way to
+ 		identify such memory.  Setting the environment variable to n
+ 		causes the collector to ignore mappings longer than n MB.
+ 		The default value of n is currently 15.  (This should cover
+ 		a 16 MB graphics card, since the mapping appears to be slightly
+ 		shorter than all of graphics memory.  It will fail if a dll
+ 		writes pointers to collectable objects into a data segment
+ 		whose length is >= 15MB.  Empirically that's rare, but
+ 		certainly possible.)  WARNING: Security sensitive applications
+ 		should probably disable this feature by setting
+ 		GC_disallow_ignore_fb, or by building with -DNO_GETENV,
+ 		since small values could force collection of reachable
+ 		objects, which is conceivably a	(difficult to exploit)
+ 		security hole.  GC_IGNORE_FB values less than 3 MB
+ 		are never honored, eliminating this risk for most,
+ 		but not all, applications.  This feature is likely to disappear
+ 		if/when we find a less disgusting "solution".
+ 
  The following turn on runtime flags that are also program settable.  Checked
  only during initialization.  We expect that they will usually be set through
  other means, but this may help with debugging and testing:
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.macros gcc-4.0.0/boehm-gc/doc/README.macros
*** gcc-3.4.3/boehm-gc/doc/README.macros	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README.macros	Fri Aug 13 23:05:32 2004
*************** SRC_M3		Set if the collector is being bu
*** 85,89 ****
--- 85,94 ----
  		It's there primarily incase someone wants to port to a similar
  		system.
  
+ USE_COMPILER_TLS  Assume the existence of __thread-style thread-local
+ 		storage.  Set automatically for thread-local allocation with
+ 		the HP/UX vendor compiler.  Usable with gcc on sufficiently
+ 		up-to-date ELF platforms.
+ 
  
  
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/README.win32 gcc-4.0.0/boehm-gc/doc/README.win32
*** gcc-3.4.3/boehm-gc/doc/README.win32	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/README.win32	Fri Aug 13 23:05:32 2004
***************
*** 1,34 ****
! The collector has at various times been compiled under Windows 95 & NT,
! with the original Microsoft SDK, with Visual C++ 2.0, 4.0, and 6, with
! the GNU win32 environment, with Borland 4.5,  with Watcom C, and recently
  with the Digital Mars compiler.  It is likely that some of these have been
  broken in the meantime.  Patches are appreciated.
  
! It runs under both win32s and win32, but with different semantics.
! Under win32, all writable pages outside of the heaps and stack are
! scanned for roots.  Thus the collector sees pointers in DLL data
! segments.  Under win32s, only the main data segment is scanned.
! (The main data segment should always be scanned.  Under some
! versions of win32s, other regions may also be scanned.)
! Thus all accessible objects should be accessible from local variables
! or variables in the main data segment.  Alternatively, other data
! segments (e.g. in DLLs) may be registered with the collector by
! calling GC_init() and then GC_register_root_section(a), where
! a is the address of some variable inside the data segment.  (Duplicate
! registrations are ignored, but not terribly quickly.)
! 
! (There are two reasons for this.  We didn't want to see many 16:16
! pointers.  And the VirtualQuery call has different semantics under
! the two systems, and under different versions of win32s.)
! 
! Win32 applications compiled with some flavor of gcc currently behave
! like win32s applications, in that dynamic library data segments are
! not scanned.  (Gcc does not directly support Microsoft's "structured
! exception handling".  It turns out that use of this feature is
! unavoidable if you scan arbitrary memory segments obtained from
! VirtualQuery.)
! 
! The collector test program "gctest" is linked as a GUI application,
  but does not open any windows.  Its output appears in the file
  "gc.log".  It may be started from the file manager.  The hour glass
  cursor may appear as long as it's running.  If it is started from the
--- 1,11 ----
! The collector has at various times been compiled under Windows 95 & later, NT,
! and XP, with the original Microsoft SDK, with Visual C++ 2.0, 4.0, and 6, with
! the GNU win32 tools, with Borland 4.5,  with Watcom C, and recently
  with the Digital Mars compiler.  It is likely that some of these have been
  broken in the meantime.  Patches are appreciated.
  
! For historical reasons,
! the collector test program "gctest" is linked as a GUI application,
  but does not open any windows.  Its output appears in the file
  "gc.log".  It may be started from the file manager.  The hour glass
  cursor may appear as long as it's running.  If it is started from the
*************** This is currently incompatible with -DUS
*** 60,70 ****
--- 37,59 ----
  Clark for tracking this down.  There's some chance this may be fixed
  in 6.1alpha4, since we now separate heap sections with an unused page.)
  
+ Microsoft Tools
+ ---------------
  For Microsoft development tools, rename NT_MAKEFILE as
  MAKEFILE.  (Make sure that the CPU environment variable is defined
  to be i386.)  In order to use the gc_cpp.h C++ interface, all
  client code should include gc_cpp.h.
  
+ For historical reasons,
+ the collector test program "gctest" is linked as a GUI application,
+ but does not open any windows.  Its output appears in the file
+ "gc.log".  It may be started from the file manager.  The hour glass
+ cursor may appear as long as it's running.  If it is started from the
+ command line, it will usually run in the background.  Wait a few
+ minutes (a few seconds on a modern machine) before you check the output.
+ You should see either a failure indication or a "Collector appears to
+ work" message.
+ 
  If you would prefer a VC++.NET project file, ask boehm@acm.org.  One has
  been contributed, but it seems to contain some absolute paths etc., so
  it can presumably only be a starting point, and is not in the standard
*************** Clients may need to define GC_NOT_DLL be
*** 75,87 ****
  collector was built as a static library (as it normally is in the
  absence of thread support).
  
  For GNU-win32, use the regular makefile, possibly after uncommenting
  the line "include Makefile.DLLs".  The latter should be necessary only
! if you want to package the collector as a DLL.  The GNU-win32 port is
  believed to work only for b18, not b19, probably due to linker changes
  in b19.  This is probably fixable with a different definition of
  DATASTART and DATAEND in gcconfig.h.
  
  For Borland tools, use BCC_MAKEFILE.  Note that
  Borland's compiler defaults to 1 byte alignment in structures (-a1),
  whereas Visual C++ appears to default to 8 byte alignment (/Zp8).
--- 64,85 ----
  collector was built as a static library (as it normally is in the
  absence of thread support).
  
+ GNU Tools
+ ---------
  For GNU-win32, use the regular makefile, possibly after uncommenting
  the line "include Makefile.DLLs".  The latter should be necessary only
! if you want to package the collector as a DLL.
! [Is the following sentence obsolete? -HB] The GNU-win32 port is
  believed to work only for b18, not b19, probably due to linker changes
  in b19.  This is probably fixable with a different definition of
  DATASTART and DATAEND in gcconfig.h.
  
+ The collector should also be buildable under Cygwin with either the
+ old standard Makefile, or with the "configure;make" machinery.
+ 
+ Borland Tools
+ -------------
+ [Rarely tested.]
  For Borland tools, use BCC_MAKEFILE.  Note that
  Borland's compiler defaults to 1 byte alignment in structures (-a1),
  whereas Visual C++ appears to default to 8 byte alignment (/Zp8).
*************** version, change the line near the top.  
*** 97,102 ****
--- 95,102 ----
  require the assembler.  If you do have the assembler, I recommend
  removing the -DUSE_GENERIC.
  
+ Incremental Collection
+ ----------------------
  There is some support for incremental collection.  This is
  currently pretty simple-minded.  Pages are protected.  Protection
  faults are caught by a handler installed at the bottom of the handler
*************** is called.)
*** 112,118 ****
  
  Note that incremental collection is disabled with -DSMALL_CONFIG.
  
! James Clark has contributed the necessary code to support win32 threads.
  Use NT_THREADS_MAKEFILE (a.k.a gc.mak) instead of NT_MAKEFILE
  to build this version.  Note that this requires some files whose names
  are more than 8 + 3 characters long.  Thus you should unpack the tar file
--- 112,122 ----
  
  Note that incremental collection is disabled with -DSMALL_CONFIG.
  
! Threads
! -------
! 
! James Clark has contributed the necessary code to support win32 threads
! with the collector in a DLL.
  Use NT_THREADS_MAKEFILE (a.k.a gc.mak) instead of NT_MAKEFILE
  to build this version.  Note that this requires some files whose names
  are more than 8 + 3 characters long.  Thus you should unpack the tar file
*************** This version relies on the collector res
*** 128,139 ****
  
  This version currently supports incremental collection only if it is
  enabled before any additional threads are created.
- Version 4.13 attempts to fix some of the earlier problems, but there
- may be other issues.  If you need solid support for win32 threads, you
- might check with Geodesic Systems.  Their collector must be licensed,
- but they have invested far more time in win32-specific issues.
  
! Hans
  
  Ivan V. Demakov's README for the Watcom port:
  
--- 132,162 ----
  
  This version currently supports incremental collection only if it is
  enabled before any additional threads are created.
  
! Since 6.3alpha2, threads are also better supported in static library builds
! with Microsoft tools (use NT_STATIC_THREADS_MAKEFILE) and with the GNU
! tools.  In all cases,the collector must be built with GC_WIN32_THREADS
! defined, even if the Cygwin pthreads interface is used.
! (NT_STATIC_THREADS_MAKEFILE does this implicitly.  Under Cygwin,
! ./configure --enable-threads=posix defines GC_WIN32_THREADS.)  Threads must be
! created with GC_CreateThread.  This can be accomplished by
! including gc.h and then calling CreateThread, which is redefined
! by gc.h.
! 
! For the statically linked versions, it is required that GC_init()
! be called before other GC calls, since there seems to be no implicit way
! to initialize the allocation lock.  The easiest way to ensure this in
! portable code is to call GC_INIT() from the main executable (not
! a dynamic library) before calling any other GC_ routines.
! 
! We strongly advise against using the TerminateThread() win32 API call,
! especially with the garbage collector.  Any use is likely to provoke a
! crash in the GC, since it makes it impossible for the collector to
! correctly track threads.
! 
! 
! Watcom compiler
! ---------------
  
  Ivan V. Demakov's README for the Watcom port:
  
*************** important, otherwise resulting programs 
*** 167,170 ****
--- 190,215 ----
  
  Ivan Demakov (email: ivan@tgrad.nsk.su)
  
+ Win32S
+ ------
+ 
+ [The following is probably obsolete.  The win32s support is still in the
+ collector, but I doubt anyone cares, or has tested it recently.]
+ 
+ The collector runs under both win32s and win32, but with different semantics.
+ Under win32, all writable pages outside of the heaps and stack are
+ scanned for roots.  Thus the collector sees pointers in DLL data
+ segments.  Under win32s, only the main data segment is scanned.
+ (The main data segment should always be scanned.  Under some
+ versions of win32s, other regions may also be scanned.)
+ Thus all accessible objects should be accessible from local variables
+ or variables in the main data segment.  Alternatively, other data
+ segments (e.g. in DLLs) may be registered with the collector by
+ calling GC_init() and then GC_register_root_section(a), where
+ a is the address of some variable inside the data segment.  (Duplicate
+ registrations are ignored, but not terribly quickly.)
+ 
+ (There are two reasons for this.  We didn't want to see many 16:16
+ pointers.  And the VirtualQuery call has different semantics under
+ the two systems, and under different versions of win32s.)
  
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/debugging.html gcc-4.0.0/boehm-gc/doc/debugging.html
*** gcc-3.4.3/boehm-gc/doc/debugging.html	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/debugging.html	Fri Aug 13 23:05:32 2004
*************** The garbage collector generates warning 
*** 47,52 ****
--- 47,56 ----
  <PRE>
  Needed to allocate blacklisted block at 0x...
  </pre>
+ or
+ <PRE>
+ Repeated allocation of very large block ...
+ </pre>
  when it needs to allocate a block at a location that it knows to be
  referenced by a false pointer.  These false pointers can be either permanent
  (<I>e.g.</i> a static integer variable that never changes) or temporary.
*************** is commonly caused by data structures th
*** 123,129 ****
  but were not cleared, or by caches growing without bounds.
  <LI> Pointer misidentification.  The garbage collector is interpreting
  integers or other data as pointers and retaining the "referenced"
! objects.
  <LI> Heap fragmentation.  This should never result in unbounded growth,
  but it may account for larger heaps.  This is most commonly caused
  by allocation of large objects.  On some platforms it can be reduced
--- 127,134 ----
  but were not cleared, or by caches growing without bounds.
  <LI> Pointer misidentification.  The garbage collector is interpreting
  integers or other data as pointers and retaining the "referenced"
! objects.  A common symptom is that GC_dump() shows much of the heap
! as black-listed.
  <LI> Heap fragmentation.  This should never result in unbounded growth,
  but it may account for larger heaps.  This is most commonly caused
  by allocation of large objects.  On some platforms it can be reduced
*************** primitives is <TT>gc_typed.h</tt>, or se
*** 180,185 ****
--- 185,196 ----
  <LI> Consider using <TT>GC_malloc_ignore_off_page()</tt>
  to allocate large objects.  (See <TT>gc.h</tt> and above for details.
  Large means &gt; 100K in most environments.)
+ <LI> If your heap size is larger than 100MB or so, build the collector with
+ -DLARGE_CONFIG.  This allows the collector to keep more precise black-list
+ information.
+ <LI> If you are using heaps close to, or larger than, a gigabyte on a 32-bit
+ machine, you may want to consider moving to a platform with 64-bit pointers.
+ This is very likely to resolve any false pointer issues.
  </ol>
  <H2>Prematurely Reclaimed Objects</h2>
  The usual symptom of this is a segmentation fault, or an obviously overwritten
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/gc.man gcc-4.0.0/boehm-gc/doc/gc.man
*** gcc-3.4.3/boehm-gc/doc/gc.man	Fri Aug 17 18:30:49 2001
--- gcc-4.0.0/boehm-gc/doc/gc.man	Fri Aug 13 23:05:32 2004
***************
*** 1,12 ****
! .TH GC_MALLOC 1L "12 February 1996"
  .SH NAME
  GC_malloc, GC_malloc_atomic, GC_free, GC_realloc, GC_enable_incremental, GC_register_finalizer, GC_malloc_ignore_off_page, GC_malloc_atomic_ignore_off_page, GC_set_warn_proc \- Garbage collecting malloc replacement
  .SH SYNOPSIS
  #include "gc.h"
  .br
! # define malloc(n) GC_malloc(n)
  .br
! ... malloc(...) ...
  .br
  .sp
  cc ... gc.a
--- 1,14 ----
! .TH GC_MALLOC 1L "2 October 2003"
  .SH NAME
  GC_malloc, GC_malloc_atomic, GC_free, GC_realloc, GC_enable_incremental, GC_register_finalizer, GC_malloc_ignore_off_page, GC_malloc_atomic_ignore_off_page, GC_set_warn_proc \- Garbage collecting malloc replacement
  .SH SYNOPSIS
  #include "gc.h"
  .br
! void * GC_malloc(size_t size);
  .br
! void GC_free(void *ptr);
! .br
! void * GC_realloc(void *ptr, size_t size);
  .br
  .sp
  cc ... gc.a
*************** will attempt to reclaim inaccessible spa
*** 23,28 ****
--- 25,35 ----
  GC_malloc
  or friends.
  .LP
+ In most cases it is preferable to call the macros GC_MALLOC, GC_FREE, etc.
+ instead of calling GC_malloc and friends directly.  This allows debugging
+ versions of the routines to be substituted by defining GC_DEBUG before
+ including gc.h.
+ .LP
  See the documentation in the include file gc_cpp.h for an alternate, C++ specific interface to the garbage collector.
  .LP
  Unlike the standard implementations of malloc,
*************** It is also possible to use the collector
*** 56,64 ****
  .LP
  The collector may, on rare occasion produce warning messages.  On UNIX machines these appear on stderr.  Warning messages can be filtered, redirected, or ignored with
  .I
! GC_set_warn_proc.
  This is recommended for production code.  See gc.h for details.
  .LP
  Debugging versions of many of the above routines are provided as macros.  Their names are identical to the above, but consist of all capital letters.  If GC_DEBUG is defined before gc.h is included, these routines do additional checking, and allow the leak detecting version of the collector to produce slightly more useful output.  Without GC_DEBUG defined, they behave exactly like the lower-case versions.
  .LP
  On some machines, collection will be performed incrementally after a call to
--- 63,78 ----
  .LP
  The collector may, on rare occasion produce warning messages.  On UNIX machines these appear on stderr.  Warning messages can be filtered, redirected, or ignored with
  .I
! GC_set_warn_proc
  This is recommended for production code.  See gc.h for details.
  .LP
+ Fully portable code should call
+ .I
+ GC_INIT
+ from the main program before making any other GC calls.
+ On most platforms this does nothing and the collector is initialized on first use.
+ On a few platforms explicit initialization is necessary.  And it can never hurt. 
+ .LP
  Debugging versions of many of the above routines are provided as macros.  Their names are identical to the above, but consist of all capital letters.  If GC_DEBUG is defined before gc.h is included, these routines do additional checking, and allow the leak detecting version of the collector to produce slightly more useful output.  Without GC_DEBUG defined, they behave exactly like the lower-case versions.
  .LP
  On some machines, collection will be performed incrementally after a call to
*************** Other facilities not discussed here incl
*** 71,80 ****
  .SH "SEE ALSO"
  The README and gc.h files in the distribution.  More detailed definitions of the functions exported by the collector are given there.  (The above list is not complete.)
  .LP
  Boehm, H., and M. Weiser, "Garbage Collection in an Uncooperative Environment",
  \fISoftware Practice & Experience\fP, September 1988, pp. 807-820.
  .LP
  The malloc(3) man page.
  .LP
  .SH AUTHOR
! Hans-J. Boehm (boehm@parc.xerox.com).  Some of the code was written by others, most notably Alan Demers.
--- 85,97 ----
  .SH "SEE ALSO"
  The README and gc.h files in the distribution.  More detailed definitions of the functions exported by the collector are given there.  (The above list is not complete.)
  .LP
+ The web site at http://www.hpl.hp.com/personal/Hans_Boehm/gc .
+ .LP
  Boehm, H., and M. Weiser, "Garbage Collection in an Uncooperative Environment",
  \fISoftware Practice & Experience\fP, September 1988, pp. 807-820.
  .LP
  The malloc(3) man page.
  .LP
  .SH AUTHOR
! Hans-J. Boehm (Hans.Boehm@hp.com).
! Some of the code was written by others, most notably Alan Demers.
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/gcdescr.html gcc-4.0.0/boehm-gc/doc/gcdescr.html
*** gcc-3.4.3/boehm-gc/doc/gcdescr.html	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/doc/gcdescr.html	Fri Aug 13 23:05:32 2004
***************
*** 4,10 ****
      <AUTHOR> Hans-J. Boehm, HP Labs (Much of this was written at SGI)</author>
  </HEAD>
  <BODY>
! <H1> <I>This is under construction</i> </h1>
  <H1> Conservative GC Algorithmic Overview </h1>
  <P>
  This is a description of the algorithms and data structures used in our
--- 4,10 ----
      <AUTHOR> Hans-J. Boehm, HP Labs (Much of this was written at SGI)</author>
  </HEAD>
  <BODY>
! <H1> <I>This is under construction, and may always be.</i> </h1>
  <H1> Conservative GC Algorithmic Overview </h1>
  <P>
  This is a description of the algorithms and data structures used in our
*************** We assume the default finalization model
*** 27,46 ****
  is very localized.
  <H2> Introduction </h2>
  The garbage collector uses a modified mark-sweep algorithm.  Conceptually
! it operates roughly in four phases:
  
  <OL>
  
  <LI>
! <I>Preparation</i> Clear all mark bits, indicating that all objects
  are potentially unreachable.
  
  <LI>
  <I>Mark phase</i> Marks all objects that can be reachable via chains of
! pointers from variables.  Normally the collector has no real information
  about the location of pointer variables in the heap, so it
  views all static data areas, stacks and registers as potentially containing
! containing pointers.  Any bit patterns that represent addresses inside
  heap objects managed by the collector are viewed as pointers.
  Unless the client program has made heap object layout information
  available to the collector, any heap objects found to be reachable from
--- 27,48 ----
  is very localized.
  <H2> Introduction </h2>
  The garbage collector uses a modified mark-sweep algorithm.  Conceptually
! it operates roughly in four phases, which are performed occasionally
! as part of a memory allocation:
  
  <OL>
  
  <LI>
! <I>Preparation</i> Each object has an associated mark bit.
! Clear all mark bits, indicating that all objects
  are potentially unreachable.
  
  <LI>
  <I>Mark phase</i> Marks all objects that can be reachable via chains of
! pointers from variables.  Often the collector has no real information
  about the location of pointer variables in the heap, so it
  views all static data areas, stacks and registers as potentially containing
! pointers.  Any bit patterns that represent addresses inside
  heap objects managed by the collector are viewed as pointers.
  Unless the client program has made heap object layout information
  available to the collector, any heap objects found to be reachable from
*************** others are not.  Some may have per-objec
*** 87,94 ****
  determine pointer locations.  Or a specific kind may correspond
  to one specific object layout.  Two built-in kinds are uncollectable.
  One (<TT>STUBBORN</tt>) is immutable without special precautions.
! In spite of that, it is very likely that most applications currently
  use at most two kinds: <TT>NORMAL</tt> and <TT>PTRFREE</tt> objects.
  <P>
  The collector uses a two level allocator.  A large block is defined to
  be one larger than half of <TT>HBLKSIZE</tt>, which is a power of 2,
--- 89,100 ----
  determine pointer locations.  Or a specific kind may correspond
  to one specific object layout.  Two built-in kinds are uncollectable.
  One (<TT>STUBBORN</tt>) is immutable without special precautions.
! In spite of that, it is very likely that most C clients of the
! collector currently
  use at most two kinds: <TT>NORMAL</tt> and <TT>PTRFREE</tt> objects.
+ The <A HREF="http://gcc.gnu.org/java">gcj</a> runtime also makes
+ heavy use of a kind (allocated with GC_gcj_malloc) that stores
+ type information at a known offset in method tables.
  <P>
  The collector uses a two level allocator.  A large block is defined to
  be one larger than half of <TT>HBLKSIZE</tt>, which is a power of 2,
*************** for a single pool of physical memory.
*** 175,180 ****
--- 181,212 ----
  
  <H2>Mark phase</h2>
  
+ At each collection, the collector marks all objects that are
+ possibly reachable from pointer variables.  Since it cannot generally
+ tell where pointer variables are located, it scans the following
+ <I>root segments</i> for pointers:
+ <UL>
+ <LI>The registers.  Depending on the architecture, this may be done using
+ assembly code, or by calling a <TT>setjmp</tt>-like function which saves
+ register contents on the stack.
+ <LI>The stack(s).  In the case of a single-threaded application,
+ on most platforms this
+ is done by scanning the memory between (an approximation of) the current
+ stack pointer and <TT>GC_stackbottom</tt>.  (For Itanium, the register stack
+ scanned separately.)  The <TT>GC_stackbottom</tt> variable is set in
+ a highly platform-specific way depending on the appropriate configuration
+ information in <TT>gcconfig.h</tt>.  Note that the currently active
+ stack needs to be scanned carefully, since callee-save registers of
+ client code may appear inside collector stack frames, which may
+ change during the mark process.  This is addressed by scanning
+ some sections of the stack "eagerly", effectively capturing a snapshot
+ at one point in time.
+ <LI>Static data region(s).  In the simplest case, this is the region
+ between <TT>DATASTART</tt> and <TT>DATAEND</tt>, as defined in
+ <TT>gcconfig.h</tt>.  However, in most cases, this will also involve
+ static data regions associated with dynamic libraries.  These are
+ identified by the mostly platform-specific code in <TT>dyn_load.c</tt>.
+ </ul> 
  The marker maintains an explicit stack of memory regions that are known
  to be accessible, but that have not yet been searched for contained pointers.
  Each stack entry contains the starting address of the block to be scanned,
*************** as well as a descriptor of the block.  I
*** 182,189 ****
  available for the block, then the descriptor is simply a length.
  (For other possibilities, see <TT>gc_mark.h</tt>.)
  <P>
! At the beginning of the mark phase, all root segments are pushed on the
! stack by <TT>GC_push_roots</tt>.  If <TT>ALL_INTERIOR_PTRS</tt> is not
  defined, then stack roots require special treatment.  In this case, the
  normal marking code ignores interior pointers, but <TT>GC_push_all_stack</tt>
  explicitly checks for interior pointers and pushes descriptors for target
--- 214,224 ----
  available for the block, then the descriptor is simply a length.
  (For other possibilities, see <TT>gc_mark.h</tt>.)
  <P>
! At the beginning of the mark phase, all root segments
! (as described above) are pushed on the
! stack by <TT>GC_push_roots</tt>.  (Registers and eagerly processed
! stack sections are processed by pushing the referenced objects instead
! of the stack section itself.)  If <TT>ALL_INTERIOR_PTRS</tt> is not
  defined, then stack roots require special treatment.  In this case, the
  normal marking code ignores interior pointers, but <TT>GC_push_all_stack</tt>
  explicitly checks for interior pointers and pushes descriptors for target
*************** if there is low demand for small pointer
*** 479,486 ****
  We support several different threading models.  Unfortunately Pthreads,
  the only reasonably well standardized thread model, supports too narrow
  an interface for conservative garbage collection.  There appears to be
! no completely portable way to allow the collector to coexist with various Pthreads
! implementations.  Hence we currently support only a few of the more
  common Pthreads implementations.
  <P>
  In particular, it is very difficult for the collector to stop all other
--- 514,522 ----
  We support several different threading models.  Unfortunately Pthreads,
  the only reasonably well standardized thread model, supports too narrow
  an interface for conservative garbage collection.  There appears to be
! no completely portable way to allow the collector
! to coexist with various Pthreads
! implementations.  Hence we currently support only the more
  common Pthreads implementations.
  <P>
  In particular, it is very difficult for the collector to stop all other
*************** accomplished with <TT># define</tt>'s in
*** 510,515 ****
--- 546,555 ----
  (really <TT>gc_pthread_redirects.h</tt>), or optionally
  by using ld's function call wrapping mechanism under Linux.
  <P>
+ Recent versions of the collector support several facilites to enhance
+ the processor-scalability and thread performance of the collector.
+ These are discussed in more detail <A HREF="scale.html">here</a>.
+ <P>
  Comments are appreciated.  Please send mail to
  <A HREF="mailto:boehm@acm.org"><TT>boehm@acm.org</tt></a> or
  <A HREF="mailto:Hans.Boehm@hp.com"><TT>Hans.Boehm@hp.com</tt></a>
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/gcinterface.html gcc-4.0.0/boehm-gc/doc/gcinterface.html
*** gcc-3.4.3/boehm-gc/doc/gcinterface.html	Mon Jul 28 03:46:20 2003
--- gcc-4.0.0/boehm-gc/doc/gcinterface.html	Fri Aug 13 23:05:32 2004
***************
*** 5,35 ****
  <BODY>
  <H1>C Interface</h1>
  On many platforms, a single-threaded garbage collector library can be built
! to act as a plug-in malloc replacement.  (Build with -DREDIRECT_MALLOC=GC_malloc
! -DIGNORE_FREE.)  This is often the best way to deal with third-party libraries
! which leak or prematurely free objects.  -DREDIRECT_MALLOC is intended
  primarily as an easy way to adapt old code, not for new development.
  <P>
  New code should use the interface discussed below.
  <P>
  Code must be linked against the GC library.  On most UNIX platforms,
! this will be gc.a.
  <P>
  The following describes the standard C interface to the garbage collector.
  It is not a complete definition of the interface.  It describes only the
  most commonly used functionality, approximately in decreasing order of
! frequency of use.  The description assumes an ANSI C compiler.
  The full interface is described in
  <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>
  or <TT>gc.h</tt> in the distribution.
  <P>
! Clients should include gc.h.
  <P>
  In the case of multithreaded code,
! gc.h should be included after the threads header file, and
! after defining the appropriate GC_XXXX_THREADS macro.
! (For 6.2alpha4 and later, simply defining GC_THREADS should suffice.)
! Gc.h must be included
  in files that use either GC or threads primitives, since threads primitives
  will be redefined to cooperate with the GC on many platforms.
  <DL>
--- 5,37 ----
  <BODY>
  <H1>C Interface</h1>
  On many platforms, a single-threaded garbage collector library can be built
! to act as a plug-in malloc replacement.
! (Build with <TT>-DREDIRECT_MALLOC=GC_malloc -DIGNORE_FREE</tt>.)
! This is often the best way to deal with third-party libraries
! which leak or prematurely free objects.  <TT>-DREDIRECT_MALLOC</tt> is intended
  primarily as an easy way to adapt old code, not for new development.
  <P>
  New code should use the interface discussed below.
  <P>
  Code must be linked against the GC library.  On most UNIX platforms,
! depending on how the collector is built, this will be <TT>gc.a</tt>
! or <TT>libgc.{a,so}</tt>.
  <P>
  The following describes the standard C interface to the garbage collector.
  It is not a complete definition of the interface.  It describes only the
  most commonly used functionality, approximately in decreasing order of
! frequency of use.
  The full interface is described in
  <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>
  or <TT>gc.h</tt> in the distribution.
  <P>
! Clients should include <TT>gc.h</tt>.
  <P>
  In the case of multithreaded code,
! <TT>gc.h</tt> should be included after the threads header file, and
! after defining the appropriate <TT>GC_</tt><I>XXXX</i><TT>_THREADS</tt> macro.
! (For 6.2alpha4 and later, simply defining <TT>GC_THREADS</tt> should suffice.)
! The header file <TT>gc.h</tt> must be included
  in files that use either GC or threads primitives, since threads primitives
  will be redefined to cooperate with the GC on many platforms.
  <DL>
*************** Allocates and clears <I>nbytes</i> of st
*** 39,47 ****
  Requires (amortized) time proportional to <I>nbytes</i>.
  The resulting object will be automatically deallocated when unreferenced.
  References from objects allocated with the system malloc are usually not
! considered by the collector.  (See GC_MALLOC_UNCOLLECTABLE, however.)
! GC_MALLOC is a macro which invokes GC_malloc by default or, if GC_DEBUG
! is defined before gc.h is included, a debugging version that checks
  occasionally for overwrite errors, and the like.
  <DT> <B>void * GC_MALLOC_ATOMIC(size_t <I>nbytes</i>)</b>
  <DD>
--- 41,50 ----
  Requires (amortized) time proportional to <I>nbytes</i>.
  The resulting object will be automatically deallocated when unreferenced.
  References from objects allocated with the system malloc are usually not
! considered by the collector.  (See <TT>GC_MALLOC_UNCOLLECTABLE</tt>, however.)
! <TT>GC_MALLOC</tt> is a macro which invokes <TT>GC_malloc</tt> by default or,
! if <TT>GC_DEBUG</tt>
! is defined before <TT>gc.h</tt> is included, a debugging version that checks
  occasionally for overwrite errors, and the like.
  <DT> <B>void * GC_MALLOC_ATOMIC(size_t <I>nbytes</i>)</b>
  <DD>
*************** collector using the interface in
*** 57,116 ****
  <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_typedh.txt">gc_typed.h</a> in the distribution.
  <DT> <B>void * GC_MALLOC_UNCOLLECTABLE(size_t <I>nbytes</i>)</b>
  <DD>
! Identical to GC_MALLOC, except that the resulting object is not automatically
  deallocated.  Unlike the system-provided malloc, the collector does
  scan the object for pointers to garbage-collectable memory, even if the
  block itself does not appear to be reachable.  (Objects allocated in this way
  are effectively treated as roots by the collector.)
! <DT> <B> void * GC_REALLOC(void *old, size_t new_size) </b>
  <DD>
  Allocate a new object of the indicated size and copy (a prefix of) the
  old object into the new object.  The old object is reused in place if
! convenient.  If the original object was allocated with GC_malloc_atomic,
  the new object is subject to the same constraints.  If it was allocated
  as an uncollectable object, then the new object is uncollectable, and
  the old object (if different) is deallocated.
! (Use GC_REALLOC with GC_MALLOC, etc.)
! <DT> <B> void GC_FREE(void *dead) </b>
  <DD>
  Explicitly deallocate an object.  Typically not useful for small
! collectable objects.  (Use GC_FREE with GC_MALLOC, etc.)
  <DT> <B> void * GC_MALLOC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
  <DD>
  <DT> <B> void * GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
  <DD>
! Analogous to GC_MALLOC and GC_MALLOC_ATOMIC, except that the client
  guarantees that as long
  as the resulting object is of use, a pointer is maintained to someplace
  inside the first 512 bytes of the object.  This pointer should be declared
  volatile to avoid interference from compiler optimizations.
  (Other nonvolatile pointers to the object may exist as well.)
  This is the
! preferred way to allocate objects that are likely to be > 100KBytes in size.
  It greatly reduces the risk that such objects will be accidentally retained
  when they are no longer needed.  Thus space usage may be significantly reduced.
  <DT> <B> void GC_gcollect(void) </b>
  <DD>
  Explicitly force a garbage collection.
  <DT> <B> void GC_enable_incremental(void) </b>
  <DD>
  Cause the garbage collector to perform a small amount of work
! every few invocations of GC_malloc or the like, instead of performing
  an entire collection at once.  This is likely to increase total
  running time.  It will improve response on a platform that either has
! suitable support in the garbage collector (Irix and most other Unix
  versions, win32 if the collector was suitably built) or if "stubborn"
! allocation is used (see <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>).
  On many platforms this interacts poorly with system calls 
  that write to the garbage collected heap.
! <DT> <B> GC_warn_proc GC_set_warn_proc(GC_warn_proc p) </b>
  <DD>
  Replace the default procedure used by the collector to print warnings.
  The collector
  may otherwise write to sterr, most commonly because GC_malloc was used
  in a situation in which GC_malloc_ignore_off_page would have been more
  appropriate.  See <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a> for details.
! <DT> <B> void GC_register_finalizer(...) </b>
  <DD>
  Register a function to be called when an object becomes inaccessible.
  This is often useful as a backup method for releasing system resources
--- 60,129 ----
  <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_typedh.txt">gc_typed.h</a> in the distribution.
  <DT> <B>void * GC_MALLOC_UNCOLLECTABLE(size_t <I>nbytes</i>)</b>
  <DD>
! Identical to <TT>GC_MALLOC</tt>,
! except that the resulting object is not automatically
  deallocated.  Unlike the system-provided malloc, the collector does
  scan the object for pointers to garbage-collectable memory, even if the
  block itself does not appear to be reachable.  (Objects allocated in this way
  are effectively treated as roots by the collector.)
! <DT> <B> void * GC_REALLOC(void *<I>old</i>, size_t <I>new_size</i>) </b>
  <DD>
  Allocate a new object of the indicated size and copy (a prefix of) the
  old object into the new object.  The old object is reused in place if
! convenient.  If the original object was allocated with
! <TT>GC_MALLOC_ATOMIC</tt>,
  the new object is subject to the same constraints.  If it was allocated
  as an uncollectable object, then the new object is uncollectable, and
  the old object (if different) is deallocated.
! <DT> <B> void GC_FREE(void *<I>dead</i>) </b>
  <DD>
  Explicitly deallocate an object.  Typically not useful for small
! collectable objects.
  <DT> <B> void * GC_MALLOC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
  <DD>
  <DT> <B> void * GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
  <DD>
! Analogous to <TT>GC_MALLOC</tt> and <TT>GC_MALLOC_ATOMIC</tt>,
! except that the client
  guarantees that as long
  as the resulting object is of use, a pointer is maintained to someplace
  inside the first 512 bytes of the object.  This pointer should be declared
  volatile to avoid interference from compiler optimizations.
  (Other nonvolatile pointers to the object may exist as well.)
  This is the
! preferred way to allocate objects that are likely to be &gt; 100KBytes in size.
  It greatly reduces the risk that such objects will be accidentally retained
  when they are no longer needed.  Thus space usage may be significantly reduced.
+ <DT> <B> void GC_INIT(void) </b>
+ <DD>
+ On some platforms, it is necessary to invoke this
+ <I>from the main executable, not from a dynamic library,</i> before
+ the initial invocation of a GC routine.  It is recommended that this be done
+ in portable code, though we try to ensure that it expands to a no-op
+ on as many platforms as possible.
  <DT> <B> void GC_gcollect(void) </b>
  <DD>
  Explicitly force a garbage collection.
  <DT> <B> void GC_enable_incremental(void) </b>
  <DD>
  Cause the garbage collector to perform a small amount of work
! every few invocations of <TT>GC_MALLOC</tt> or the like, instead of performing
  an entire collection at once.  This is likely to increase total
  running time.  It will improve response on a platform that either has
! suitable support in the garbage collector (Linux and most Unix
  versions, win32 if the collector was suitably built) or if "stubborn"
! allocation is used (see
! <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>).
  On many platforms this interacts poorly with system calls 
  that write to the garbage collected heap.
! <DT> <B> GC_warn_proc GC_set_warn_proc(GC_warn_proc <I>p</i>) </b>
  <DD>
  Replace the default procedure used by the collector to print warnings.
  The collector
  may otherwise write to sterr, most commonly because GC_malloc was used
  in a situation in which GC_malloc_ignore_off_page would have been more
  appropriate.  See <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a> for details.
! <DT> <B> void GC_REGISTER_FINALIZER(...) </b>
  <DD>
  Register a function to be called when an object becomes inaccessible.
  This is often useful as a backup method for releasing system resources
*************** See <A HREF="http://www.hpl.hp.com/perso
*** 123,129 ****
  of the design.
  <P>
  Note that an object may become inaccessible before client code is done
! operating on its fields.  Suitable synchronization is usually required.
  See <A HREF="http://portal.acm.org/citation.cfm?doid=604131.604153">here</a>
  or <A HREF="http://www.hpl.hp.com/techreports/2002/HPL-2002-335.html">here</a>
  for details.
--- 136,143 ----
  of the design.
  <P>
  Note that an object may become inaccessible before client code is done
! operating on objects referenced by its fields.
! Suitable synchronization is usually required.
  See <A HREF="http://portal.acm.org/citation.cfm?doid=604131.604153">here</a>
  or <A HREF="http://www.hpl.hp.com/techreports/2002/HPL-2002-335.html">here</a>
  for details.
*************** for details.
*** 131,143 ****
  <P>
  If you are concerned with multiprocessor performance and scalability,
  you should consider enabling and using thread local allocation (<I>e.g.</i>
! GC_LOCAL_MALLOC, see <TT>gc_local_alloc.h</tt>.  If your platform
  supports it, you should build the collector with parallel marking support
! (-DPARALLEL_MARK, or --enable-parallel-mark).
  <P>
  If the collector is used in an environment in which pointer location
  information for heap objects is easily available, this can be passed on
! to the colllector using the interfaces in either <TT>gc_typed.h</tt>
  or <TT>gc_gcj.h</tt>.
  <P>
  The collector distribution also includes a <B>string package</b> that takes
--- 145,157 ----
  <P>
  If you are concerned with multiprocessor performance and scalability,
  you should consider enabling and using thread local allocation (<I>e.g.</i>
! <TT>GC_LOCAL_MALLOC</tt>, see <TT>gc_local_alloc.h</tt>.  If your platform
  supports it, you should build the collector with parallel marking support
! (<TT>-DPARALLEL_MARK</tt>, or <TT>--enable-parallel-mark</tt>).
  <P>
  If the collector is used in an environment in which pointer location
  information for heap objects is easily available, this can be passed on
! to the collector using the interfaces in either <TT>gc_typed.h</tt>
  or <TT>gc_gcj.h</tt>.
  <P>
  The collector distribution also includes a <B>string package</b> that takes
*************** advantage of the collector.  For details
*** 145,151 ****
  <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/cordh.txt">cord.h</a>
  
  <H1>C++ Interface</h1>
! There are three distinct ways to use the collector from C++:
  <DL>
  <DT> <B> STL allocators </b>
  <DD>
--- 159,189 ----
  <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/cordh.txt">cord.h</a>
  
  <H1>C++ Interface</h1>
! Usage of the collector from C++ is complicated by the fact that there
! are many "standard" ways to allocate memory in C++.  The default ::new
! operator, default malloc, and default STL allocators allocate memory
! that is not garbage collected, and is not normally "traced" by the
! collector.  This means that any pointers in memory allocated by these
! default allocators will not be seen by the collector.  Garbage-collectable
! memory referenced only by pointers stored in such default-allocated
! objects is likely to be reclaimed prematurely by the collector.
! <P>
! It is the programmers responsibility to ensure that garbage-collectable
! memory is referenced by pointers stored in one of
! <UL>
! <LI> Program variables
! <LI> Garbage-collected objects
! <LI> Uncollected but "traceable" objects
! </ul>
! "Traceable" objects are not necessarily reclaimed by the collector,
! but are scanned for pointers to collectable objects.
! They are allocated by <TT>GC_MALLOC_UNCOLLECTABLE</tt>, as described
! above, and through some interfaces described below.
! <P>
! The easiest way to ensure that collectable objects are properly referenced
! is to allocate only collectable objects.  This requires that every
! allocation go through one of the following interfaces, each one of
! which replaces a standard C++ allocation mechanism:
  <DL>
  <DT> <B> STL allocators </b>
  <DD>
*************** multiple threads, but are faster.
*** 170,176 ****
  For an example, click <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_alloc_exC.txt">here</a>.
  <P>
  Recent versions of the collector also include a more standard-conforming
! allocator implemention in <TT>gc_allocator.h</tt>.  It defines
  <UL>
  <LI> traceable_allocator
  <LI> gc_allocator
--- 208,214 ----
  For an example, click <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_alloc_exC.txt">here</a>.
  <P>
  Recent versions of the collector also include a more standard-conforming
! allocator implementation in <TT>gc_allocator.h</tt>.  It defines
  <UL>
  <LI> traceable_allocator
  <LI> gc_allocator
*************** Again the former allocates uncollectable
*** 179,187 ****
  This should work with any fully standard-conforming C++ compiler.
  <DT> <B> Class inheritance based interface </b>
  <DD>
! Users may include gc_cpp.h and then cause members of certain classes to
! be allocated in garbage collectable memory by inheriting from class gc.
  For details see <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_cpph.txt">gc_cpp.h</a>.
  <DT> <B> C interface </b>
  <DD>
  It is also possible to use the C interface from 
--- 217,231 ----
  This should work with any fully standard-conforming C++ compiler.
  <DT> <B> Class inheritance based interface </b>
  <DD>
! Users may include gc_cpp.h and then cause members of classes to
! be allocated in garbage collectable memory by having those classes
! inherit from class gc.
  For details see <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_cpph.txt">gc_cpp.h</a>.
+ <P>
+ Linking against libgccpp in addition to the gc library overrides
+ ::new (and friends) to allocate traceable memory but uncollectable
+ memory, making it safe to refer to collectable objects from the resulting
+ memory.
  <DT> <B> C interface </b>
  <DD>
  It is also possible to use the C interface from 
*************** It is also possible to use the C interfa
*** 189,202 ****
  On platforms which use malloc to implement ::new, it should usually be possible
  to use a version of the collector that has been compiled as a malloc
  replacement.  It is also possible to replace ::new and other allocation
! functions suitably.
  <P>
  Note that user-implemented small-block allocation often works poorly with
  an underlying garbage-collected large block allocator, since the collector
  has to view all objects accessible from the user's free list as reachable.
! This is likely to cause problems if GC_malloc is used with something like
  the original HP version of STL.
! This approach works with the SGI versions of the STL only if the
  <TT>malloc_alloc</tt> allocator is used.
  </dl>
  </body>
--- 233,247 ----
  On platforms which use malloc to implement ::new, it should usually be possible
  to use a version of the collector that has been compiled as a malloc
  replacement.  It is also possible to replace ::new and other allocation
! functions suitably, as is done by libgccpp.
  <P>
  Note that user-implemented small-block allocation often works poorly with
  an underlying garbage-collected large block allocator, since the collector
  has to view all objects accessible from the user's free list as reachable.
! This is likely to cause problems if <TT>GC_MALLOC</tt>
! is used with something like
  the original HP version of STL.
! This approach works well with the SGI versions of the STL only if the
  <TT>malloc_alloc</tt> allocator is used.
  </dl>
  </body>
diff -Nrcpad gcc-3.4.3/boehm-gc/doc/simple_example.html gcc-4.0.0/boehm-gc/doc/simple_example.html
*** gcc-3.4.3/boehm-gc/doc/simple_example.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/doc/simple_example.html	Thu Aug 12 21:14:29 2004
***************
*** 0 ****
--- 1,202 ----
+ <HTML>
+ <HEAD>
+ <TITLE>Using the Garbage Collector: A simple example</title>
+ </head>
+ <BODY>
+ <H1>Using the Garbage Collector: A simple example</h1>
+ The following consists of step-by-step instructions for building and
+ using the collector.  We'll assume a Linux/gcc platform and
+ a single-threaded application.  <FONT COLOR=green>The green
+ text contains information about other platforms or scenarios.
+ It can be skipped, especially on first reading</font>.
+ <H2>Building the collector</h2>
+ If you haven't already so, unpack the collector and enter
+ the newly created directory with
+ <PRE>
+ tar xvfz gc<version>.tar.gz
+ cd gc<version>
+ </pre>
+ <P>
+ You can configure, build, and install the collector in a private
+ directory, say /home/xyz/gc, with the following commands:
+ <PRE>
+ ./configure --prefix=/home/xyz/gc --disable-threads
+ make
+ make check
+ make install
+ </pre>
+ Here the "<TT>make check</tt>" command is optional, but highly recommended.
+ It runs a basic correctness test which usually takes well under a minute.
+ <FONT COLOR=green>
+ <H3>Other platforms</h3>
+ On non-Unix, non-Linux platforms, the collector is usually built by copying
+ the appropriate makefile (see the platform-specific README in doc/README.xxx
+ in the distribution) to the file "Makefile" (overwriting the copy of
+ Makefile.direct that was originally there), and then typing "make"
+ (or "nmake" or ...).  This builds the library in the source tree.  You may
+ want to move it and the files in the include directory to a more convenient
+ place.
+ <P>
+ If you use a makefile that does not require running a configure script,
+ you should first look at the makefile, and adjust any options that are
+ documented there.
+ <P>
+ If your platform provides a "make" utility, that is generally preferred
+ to platform- and compiler- dependent "project" files.  (At least that is the
+ strong preference of the would-be maintainer of those project files.)
+ <H3>Threads</h3>
+ If you need thread support, configure the collector with
+ <PRE>
+ --enable-threads=posix --enable-thread-local-alloc --enable-parallel-mark
+ </pre>
+ instead of
+ <TT>--disable-threads</tt>
+ If your target is a real old-fashioned uniprocessor (no "hyperthreading",
+ etc.) you will want to omit <TT>--enable-parallel-mark</tt>.
+ <H3>C++</h3>
+ You will need to include the C++ support, which unfortunately tends to
+ be among the least portable parts of the collector, since it seems
+ to rely on some corner cases of the language.  On Linux, it
+ suffices to add <TT>--enable-cplusplus</tt> to the configure options.
+ </font>
+ <H2>Writing the program</h2>
+ You will need a
+ <PRE>
+ #include "gc.h"
+ </pre>
+ at the beginning of every file that allocates memory through the
+ garbage collector.  Call <TT>GC_MALLOC</tt> wherever you would
+ have call <TT>malloc</tt>.  This initializes memory to zero like
+ <TT>calloc</tt>; there is no need to explicitly clear the
+ result.
+ <P>
+ If you know that an object will not contain pointers to the
+ garbage-collected heap, and you don't need it to be initialized,
+ call <TT>GC_MALLOC_ATOMIC</tt> instead.
+ <P>
+ A function <TT>GC_FREE</tt> is provided but need not be called.
+ For very small objects, your program will probably perform better if
+ you do not call it, and let the collector do its job.
+ <P>
+ A <TT>GC_REALLOC</tt> function behaves like the C library <TT>realloc</tt>.
+ It allocates uninitialized pointer-free memory if the original
+ object was allocated that way.
+ <P>
+ The following program <TT>loop.c</tt> is a trivial example:
+ <PRE>
+ #include "gc.h"
+ #include &lt;assert.h&gt;
+ #include &lt;stdio.h&gt;
+ 
+ int main()
+ {
+   int i;
+ 
+   GC_INIT();	/* Optional on Linux/X86; see below.  */
+   for (i = 0; i < 10000000; ++i)
+    {
+      int **p = (int **) GC_MALLOC(sizeof(int *));
+      int *q = (int *) GC_MALLOC_ATOMIC(sizeof(int));
+      assert(*p == 0);
+      *p = (int *) GC_REALLOC(q, 2 * sizeof(int));
+      if (i % 100000 == 0)
+        printf("Heap size = %d\n", GC_get_heap_size());
+    }
+   return 0;
+ }
+ </pre>
+ <FONT COLOR=green>
+ <H3>Interaction with the system malloc</h3>
+ It is usually best not to mix garbage-collected allocation with the system
+ <TT>malloc-free</tt>.  If you do, you need to be careful not to store
+ pointers to the garbage-collected heap in memory allocated with the system
+ <TT>malloc</tt>.
+ <H3>Other Platforms</h3>
+ On some other platforms it is necessary to call <TT>GC_INIT()</tt> from the main program,
+ which is presumed to be part of the main executable, not a dynamic library.
+ This can never hurt, and is thus generally good practice.
+ 
+ <H3>Threads</h3>
+ For a multithreaded program some more rules apply:
+ <UL>
+ <LI>
+ Files that either allocate through the GC <I>or make thread-related calls</i>
+ should first define the macro <TT>GC_THREADS</tt>, and then
+ include <TT>"gc.h"</tt>.  On some platforms this will redefine some
+ threads primitives, e.g. to let the collector keep track of thread creation.
+ <LI>
+ To take advantage of fast thread-local allocation, use the following instead
+ of including <TT>gc.h</tt>:
+ <PRE>
+ #define GC_REDIRECT_TO_LOCAL
+ #include "gc_local_alloc.h"
+ </pre>
+ This will cause GC_MALLOC and GC_MALLOC_ATOMIC to keep per-thread allocation
+ caches, and greatly reduce the number of lock acquisitions during allocation.
+ </ul>
+ 
+ <H3>C++</h3>
+ In the case of C++, you need to be especially careful not to store pointers
+ to the garbage-collected heap in areas that are not traced by the collector.
+ The collector includes some <A HREF="gcinterface.html">alternate interfaces</a>
+ to make that easier.
+ 
+ <H3>Debugging</h3>
+ Additional debug checks can be performed by defining <TT>GC_DEBUG</tt> before
+ including <TT>gc.h</tt>.  Additional options are available if the collector
+ is also built with <TT>--enable-full_debug</tt> and all allocations are
+ performed with <TT>GC_DEBUG</tt> defined.
+ 
+ <H3>What if I can't rewrite/recompile my program?</h3>
+ You may be able to build the collector with <TT>--enable-redirect-malloc</tt>
+ and set the <TT>LD_PRELOAD</tt> environment variable to point to the resulting
+ library, thus replacing the standard <TT>malloc</tt> with its garbage-collected
+ counterpart.  This is rather platform dependent.  See the
+ <A HREF="leak.html">leak detection documentation</a> for some more details.
+ 
+ </font>
+ 
+ <H2>Compiling and linking</h2>
+ 
+ The above application <TT>loop.c</tt> test program can be compiled and linked
+ with
+ 
+ <PRE>
+ cc -I/home/xyz/gc/include loop.c /home/xyz/gc/lib/libgc.a -o loop
+ </pre>
+ 
+ The <TT>-I</tt> option directs the compiler to the right include
+ directory.  In this case, we list the static library
+ directly on the compile line; the dynamic library could have been
+ used instead, provided we arranged for the dynamic loader to find
+ it, e.g. by setting <TT>LD_LIBRARY_PATH</tt>.
+ 
+ <FONT COLOR=green>
+ 
+ <H3>Threads</h3>
+ 
+ On pthread platforms, you will of course also have to link with
+ <TT>-lpthread</tt>,
+ and compile with any thread-safety options required by your compiler.
+ On some platforms, you may also need to link with <TT>-ldl</tt>
+ or <TT>-lrt</tt>.
+ Looking at threadlibs.c in the GC build directory
+ should give you the appropriate
+ list if a plain <TT>-lpthread</tt> doesn't work.
+ 
+ </font>
+ 
+ <H2>Running the executable</h2>
+ 
+ The executable can of course be run normally, e.g. by typing
+ 
+ <PRE>
+ ./loop
+ </pre>
+ 
+ The operation of the collector is affected by a number of environment variables.
+ For example, setting <TT>GC_PRINT_STATS</tt> produces some
+ GC statistics on stdout.
+ See <TT>README.environment</tt> in the distribution for details.
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/boehm-gc/dyn_load.c gcc-4.0.0/boehm-gc/dyn_load.c
*** gcc-3.4.3/boehm-gc/dyn_load.c	Wed Jul 30 17:42:28 2003
--- gcc-4.0.0/boehm-gc/dyn_load.c	Sat Feb 26 15:42:11 2005
***************
*** 80,85 ****
--- 80,90 ----
  #   define l_name	lm_name
  #endif
  
+ #if defined(NETBSD)
+ #   include <machine/elf_machdep.h>
+ #   define ELFSIZE ARCH_ELFSIZE
+ #endif
+ 
  #if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \
      (defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \
      (defined(NETBSD) && defined(__ELF__)) || defined(HURD)
***************
*** 91,100 ****
  /* Newer versions of GNU/Linux define this macro.  We
   * define it similarly for any ELF systems that don't.  */
  #  ifndef ElfW
! #    if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32
! #      define ElfW(type) Elf32_##type
  #    else
! #      define ElfW(type) Elf64_##type
  #    endif
  #  endif
  
--- 96,113 ----
  /* Newer versions of GNU/Linux define this macro.  We
   * define it similarly for any ELF systems that don't.  */
  #  ifndef ElfW
! #    ifdef __NetBSD__
! #      if ELFSIZE == 32
! #        define ElfW(type) Elf32_##type
! #      else
! #        define ElfW(type) Elf64_##type
! #      endif
  #    else
! #      if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32
! #        define ElfW(type) Elf32_##type
! #      else
! #        define ElfW(type) Elf64_##type
! #      endif
  #    endif
  #  endif
  
*************** extern void * GC_roots_present();
*** 552,557 ****
--- 565,571 ----
  	/* The type is a lie, since the real type doesn't make sense here, */
  	/* and we only test for NULL.					   */
  
+ 
  /* We use /proc to track down all parts of the address space that are	*/
  /* mapped by the process, and throw out regions we know we shouldn't	*/
  /* worry about.  This may also work under other SVR4 variants.		*/
*************** void GC_register_dynamic_libraries()
*** 726,731 ****
--- 740,833 ----
    
  # define HAVE_REGISTER_MAIN_STATIC_DATA
  
+   /* The frame buffer testing code is dead in this version.	*/
+   /* We leave it here temporarily in case the switch to just 	*/
+   /* testing for MEM_IMAGE sections causes un expected 		*/
+   /* problems.							*/
+   GC_bool GC_warn_fb = TRUE;	/* Warn about traced likely 	*/
+   				/* graphics memory.		*/
+   GC_bool GC_disallow_ignore_fb = FALSE;
+   int GC_ignore_fb_mb;	/* Ignore mappings bigger than the 	*/
+   			/* specified number of MB.		*/
+   GC_bool GC_ignore_fb = FALSE; /* Enable frame buffer 	*/
+   				/* checking.		*/
+   
+   /* Issue warning if tracing apparent framebuffer. 		*/
+   /* This limits us to one warning, and it's a back door to	*/
+   /* disable that.						*/
+  
+   /* Should [start, start+len) be treated as a frame buffer	*/
+   /* and ignored?						*/
+   /* Unfortunately, we currently have no real way to tell	*/
+   /* automatically, and rely largely on user input.		*/
+   /* FIXME: If we had more data on this phenomenon (e.g.	*/
+   /* is start aligned to a MB multiple?) we should be able to	*/
+   /* do better.							*/
+   /* Based on a very limited sample, it appears that:		*/
+   /* 	- Frame buffer mappings appear as mappings of length	*/
+   /* 	  2**n MB - 192K.  (We guess the 192K can vary a bit.)	*/
+   /*	- Have a stating address at best 64K aligned.		*/
+   /* I'd love more information about the mapping, since I	*/
+   /* can't reproduce the problem.				*/
+   static GC_bool is_frame_buffer(ptr_t start, size_t len)
+   {
+     static GC_bool initialized = FALSE;
+ #   define MB (1024*1024)
+ #   define DEFAULT_FB_MB 15
+ #   define MIN_FB_MB 3
+ 
+     if (GC_disallow_ignore_fb) return FALSE;
+     if (!initialized) {
+       char * ignore_fb_string =  GETENV("GC_IGNORE_FB");
+ 
+       if (0 != ignore_fb_string) {
+ 	while (*ignore_fb_string == ' ' || *ignore_fb_string == '\t')
+ 	  ++ignore_fb_string;
+ 	if (*ignore_fb_string == '\0') {
+ 	  GC_ignore_fb_mb = DEFAULT_FB_MB;
+ 	} else {
+ 	  GC_ignore_fb_mb = atoi(ignore_fb_string);
+ 	  if (GC_ignore_fb_mb < MIN_FB_MB) {
+ 	    WARN("Bad GC_IGNORE_FB value.  Using %ld\n", DEFAULT_FB_MB);
+ 	    GC_ignore_fb_mb = DEFAULT_FB_MB;
+ 	  }
+ 	}
+ 	GC_ignore_fb = TRUE;
+       } else {
+ 	GC_ignore_fb_mb = DEFAULT_FB_MB;  /* For warning */
+       }
+       initialized = TRUE;
+     }
+     if (len >= ((size_t)GC_ignore_fb_mb << 20)) {
+       if (GC_ignore_fb) {
+ 	return TRUE;
+       } else {
+ 	if (GC_warn_fb) {
+ 	  WARN("Possible frame buffer mapping at 0x%lx: \n"
+ 	       "\tConsider setting GC_IGNORE_FB to improve performance.\n",
+ 	       start);
+ 	  GC_warn_fb = FALSE;
+ 	}
+ 	return FALSE;
+       }
+     } else {
+       return FALSE;
+     }
+   }
+ 
+ # ifdef DEBUG_VIRTUALQUERY
+   void GC_dump_meminfo(MEMORY_BASIC_INFORMATION *buf)
+   {
+     GC_printf4("BaseAddress = %lx, AllocationBase = %lx, RegionSize = %lx(%lu)\n",
+ 	       buf -> BaseAddress, buf -> AllocationBase, buf -> RegionSize,
+ 	       buf -> RegionSize);
+     GC_printf4("\tAllocationProtect = %lx, State = %lx, Protect = %lx, "
+ 	       "Type = %lx\n",
+ 	       buf -> AllocationProtect, buf -> State, buf -> Protect,
+ 	       buf -> Type);
+   }
+ # endif /* DEBUG_VIRTUALQUERY */
+ 
    void GC_register_dynamic_libraries()
    {
      MEMORY_BASIC_INFORMATION buf;
*************** void GC_register_dynamic_libraries()
*** 762,768 ****
  	    if (buf.State == MEM_COMMIT
  		&& (protect == PAGE_EXECUTE_READWRITE
  		    || protect == PAGE_READWRITE)
! 		&& !GC_is_heap_base(buf.AllocationBase)) {
  		if ((char *)p != limit) {
  		    GC_cond_add_roots(base, limit);
  		    base = p;
--- 864,878 ----
  	    if (buf.State == MEM_COMMIT
  		&& (protect == PAGE_EXECUTE_READWRITE
  		    || protect == PAGE_READWRITE)
! 		&& !GC_is_heap_base(buf.AllocationBase)
! 		/* This used to check for
! 		 * !is_frame_buffer(p, buf.RegionSize, buf.Type)
! 		 * instead of just checking for MEM_IMAGE.
! 		 * If something breaks, change it back. */
! 		&& buf.Type == MEM_IMAGE) {
! #	        ifdef DEBUG_VIRTUALQUERY
! 	          GC_dump_meminfo(&buf);
! #	        endif
  		if ((char *)p != limit) {
  		    GC_cond_add_roots(base, limit);
  		    base = p;
*************** void GC_register_dynamic_libraries()
*** 980,991 ****
  
  #ifdef DARWIN
  
  #ifndef __private_extern__
! #define __private_extern__ extern
! #include <mach-o/dyld.h>
! #undef __private_extern__
  #else
! #include <mach-o/dyld.h>
  #endif
  #include <mach-o/getsect.h>
  
--- 1090,1102 ----
  
  #ifdef DARWIN
  
+ /* __private_extern__ hack required for pre-3.4 gcc versions.	*/
  #ifndef __private_extern__
! # define __private_extern__ extern
! # include <mach-o/dyld.h>
! # undef __private_extern__
  #else
! # include <mach-o/dyld.h>
  #endif
  #include <mach-o/getsect.h>
  
diff -Nrcpad gcc-3.4.3/boehm-gc/finalize.c gcc-4.0.0/boehm-gc/finalize.c
*** gcc-3.4.3/boehm-gc/finalize.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/finalize.c	Sat Aug 28 00:41:40 2004
*************** static GC_word last_finalizer_notificati
*** 809,814 ****
--- 809,844 ----
  
  void GC_notify_or_invoke_finalizers GC_PROTO((void))
  {
+     /* This is a convenient place to generate backtraces if appropriate, */
+     /* since that code is not callable with the allocation lock.	 */
+ #   if defined(KEEP_BACK_PTRS) || defined(MAKE_BACK_GRAPH)
+       static word last_back_trace_gc_no = 1;	/* Skip first one. */
+ 
+       if (GC_gc_no > last_back_trace_gc_no) {
+ 	word i;
+ 
+ #	ifdef KEEP_BACK_PTRS
+ 	  LOCK();
+ 	  /* Stops when GC_gc_no wraps; that's OK.	*/
+ 	  last_back_trace_gc_no = (word)(-1);  /* disable others. */
+ 	  for (i = 0; i < GC_backtraces; ++i) {
+ 	      /* FIXME: This tolerates concurrent heap mutation,	*/
+ 	      /* which may cause occasional mysterious results.		*/
+ 	      /* We need to release the GC lock, since GC_print_callers	*/
+ 	      /* acquires it.  It probably shouldn't.			*/
+ 	      UNLOCK();
+ 	      GC_generate_random_backtrace_no_gc();
+ 	      LOCK();
+ 	  }
+ 	  last_back_trace_gc_no = GC_gc_no;
+ 	  UNLOCK();
+ #	endif
+ #       ifdef MAKE_BACK_GRAPH
+ 	  if (GC_print_back_height)
+             GC_print_back_graph_stats();
+ #	endif
+       }
+ #   endif
      if (GC_finalize_now == 0) return;
      if (!GC_finalize_on_demand) {
  	(void) GC_invoke_finalizers();
diff -Nrcpad gcc-3.4.3/boehm-gc/gcj_mlc.c gcc-4.0.0/boehm-gc/gcj_mlc.c
*** gcc-3.4.3/boehm-gc/gcj_mlc.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/gcj_mlc.c	Fri Aug 13 23:05:30 2004
***************
*** 14,21 ****
   */
  /* Boehm, July 31, 1995 5:02 pm PDT */
  
- #ifdef GC_GCJ_SUPPORT
- 
  /*
   * This is an allocator interface tuned for gcj (the GNU static
   * java compiler).
--- 14,19 ----
***************
*** 40,45 ****
--- 38,45 ----
  #include "gc_gcj.h"
  #include "private/dbg_mlc.h"
  
+ #ifdef GC_GCJ_SUPPORT
+ 
  GC_bool GC_gcj_malloc_initialized = FALSE;
  
  int GC_gcj_kind;	/* Object kind for objects with descriptors     */
*************** void GC_init_gcj_malloc(int mp_index, vo
*** 72,117 ****
          GC_printf0("Gcj-style type information is disabled!\n");
        }
  #   endif
      GC_mark_procs[mp_index] = (GC_mark_proc)mp;
      if (mp_index >= GC_n_mark_procs) ABORT("GC_init_gcj_malloc: bad index");
      /* Set up object kind gcj-style indirect descriptor. */
!       GC_gcjobjfreelist = (ptr_t *)
!           GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
!       if (GC_gcjobjfreelist == 0) ABORT("Couldn't allocate GC_gcjobjfreelist");
!       BZERO(GC_gcjobjfreelist, (MAXOBJSZ+1)*sizeof(ptr_t));
!       GC_gcj_kind = GC_n_kinds++;
!       GC_obj_kinds[GC_gcj_kind].ok_freelist = GC_gcjobjfreelist;
!       GC_obj_kinds[GC_gcj_kind].ok_reclaim_list = 0;
        if (ignore_gcj_info) {
  	/* Use a simple length-based descriptor, thus forcing a fully	*/
  	/* conservative scan.						*/
!         GC_obj_kinds[GC_gcj_kind].ok_descriptor = (0 | GC_DS_LENGTH);
!         GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = TRUE;
        } else {
! 	GC_obj_kinds[GC_gcj_kind].ok_descriptor =
!     	  (((word)(-MARK_DESCR_OFFSET - GC_INDIR_PER_OBJ_BIAS))
! 	   | GC_DS_PER_OBJECT);
!         GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = FALSE;
        }
-       GC_obj_kinds[GC_gcj_kind].ok_init = TRUE;
      /* Set up object kind for objects that require mark proc call.	*/
-       GC_gcjdebugobjfreelist = (ptr_t *)
-           GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
-       if (GC_gcjdebugobjfreelist == 0)
- 	  ABORT("Couldn't allocate GC_gcjdebugobjfreelist");
-       BZERO(GC_gcjdebugobjfreelist, (MAXOBJSZ+1)*sizeof(ptr_t));
-       GC_gcj_debug_kind = GC_n_kinds++;
-       GC_obj_kinds[GC_gcj_debug_kind].ok_freelist = GC_gcjdebugobjfreelist;
-       GC_obj_kinds[GC_gcj_debug_kind].ok_reclaim_list = 0;
        if (ignore_gcj_info) {
!         GC_obj_kinds[GC_gcj_kind].ok_descriptor = (0 | GC_DS_LENGTH);
!         GC_obj_kinds[GC_gcj_kind].ok_relocate_descr = TRUE;
        } else {
!         GC_obj_kinds[GC_gcj_debug_kind].ok_descriptor =
!     	  GC_MAKE_PROC(mp_index, 1 /* allocated with debug info */);
!         GC_obj_kinds[GC_gcj_debug_kind].ok_relocate_descr = FALSE;
        }
-       GC_obj_kinds[GC_gcj_debug_kind].ok_init = TRUE;
      UNLOCK();
      ENABLE_SIGNALS();
  }
--- 72,107 ----
          GC_printf0("Gcj-style type information is disabled!\n");
        }
  #   endif
+     GC_ASSERT(GC_mark_procs[mp_index] == (GC_mark_proc)0); /* unused */
      GC_mark_procs[mp_index] = (GC_mark_proc)mp;
      if (mp_index >= GC_n_mark_procs) ABORT("GC_init_gcj_malloc: bad index");
      /* Set up object kind gcj-style indirect descriptor. */
!       GC_gcjobjfreelist = (ptr_t *)GC_new_free_list_inner();
        if (ignore_gcj_info) {
  	/* Use a simple length-based descriptor, thus forcing a fully	*/
  	/* conservative scan.						*/
! 	GC_gcj_kind = GC_new_kind_inner((void **)GC_gcjobjfreelist,
! 					(0 | GC_DS_LENGTH),
! 				        TRUE, TRUE);
        } else {
! 	GC_gcj_kind = GC_new_kind_inner(
! 			(void **)GC_gcjobjfreelist,
! 			(((word)(-MARK_DESCR_OFFSET - GC_INDIR_PER_OBJ_BIAS))
! 	   		 | GC_DS_PER_OBJECT),
! 			FALSE, TRUE);
        }
      /* Set up object kind for objects that require mark proc call.	*/
        if (ignore_gcj_info) {
! 	GC_gcj_debug_kind = GC_gcj_kind;
!         GC_gcjdebugobjfreelist = GC_gcjobjfreelist;
        } else {
!         GC_gcjdebugobjfreelist = (ptr_t *)GC_new_free_list_inner();
! 	GC_gcj_debug_kind = GC_new_kind_inner(
! 				(void **)GC_gcjdebugobjfreelist,
! 				GC_MAKE_PROC(mp_index,
! 				     	     1 /* allocated with debug info */),
! 				FALSE, TRUE);
        }
      UNLOCK();
      ENABLE_SIGNALS();
  }
*************** ptr_t GC_clear_stack();
*** 124,129 ****
--- 114,138 ----
  #define GENERAL_MALLOC_IOP(lb,k) \
      (GC_PTR)GC_clear_stack(GC_generic_malloc_inner_ignore_off_page(lb, k))
  
+ /* We need a mechanism to release the lock and invoke finalizers.	*/
+ /* We don't really have an opportunity to do this on a rarely executed	*/
+ /* path on which the lock is not held.  Thus we check at a 		*/
+ /* rarely executed point at which it is safe to release the lock.	*/
+ /* We do this even where we could just call GC_INVOKE_FINALIZERS,	*/
+ /* since it's probably cheaper and certainly more uniform.		*/
+ /* FIXME - Consider doing the same elsewhere?				*/
+ static void maybe_finalize()
+ {
+    static int last_finalized_no = 0;
+ 
+    if (GC_gc_no == last_finalized_no) return;
+    if (!GC_is_initialized) return;
+    UNLOCK();
+    GC_INVOKE_FINALIZERS();
+    last_finalized_no = GC_gc_no;
+    LOCK();
+ }
+ 
  /* Allocate an object, clear it, and store the pointer to the	*/
  /* type structure (vtable in gcj).				*/
  /* This adds a byte at the end of the object if GC_malloc would.*/
*************** DCL_LOCK_STATE;
*** 143,149 ****
  	opp = &(GC_gcjobjfreelist[lw]);
  	LOCK();
  	op = *opp;
!         if( EXPECT(op == 0, 0)) {
              op = (ptr_t)GENERAL_MALLOC((word)lb, GC_gcj_kind);
  	    if (0 == op) {
  		UNLOCK();
--- 152,159 ----
  	opp = &(GC_gcjobjfreelist[lw]);
  	LOCK();
  	op = *opp;
!         if(EXPECT(op == 0, 0)) {
! 	    maybe_finalize();
              op = (ptr_t)GENERAL_MALLOC((word)lb, GC_gcj_kind);
  	    if (0 == op) {
  		UNLOCK();
*************** DCL_LOCK_STATE;
*** 161,166 ****
--- 171,177 ----
  	UNLOCK();
      } else {
  	LOCK();
+ 	maybe_finalize();
  	op = (ptr_t)GENERAL_MALLOC((word)lb, GC_gcj_kind);
  	if (0 == op) {
  	    UNLOCK();
*************** GC_PTR GC_debug_gcj_malloc(size_t lb, vo
*** 179,188 ****
  {
      GC_PTR result;
  
!     /* We clone the code from GC_debug_gcj_malloc, so that we 	*/
!     /* dont end up with extra frames on the stack, which could	*/
      /* confuse the backtrace.					*/
      LOCK();
      result = GC_generic_malloc_inner(lb + DEBUG_BYTES, GC_gcj_debug_kind);
      if (result == 0) {
  	UNLOCK();
--- 190,199 ----
  {
      GC_PTR result;
  
!     /* We're careful to avoid extra calls, which could		 */
      /* confuse the backtrace.					*/
      LOCK();
+     maybe_finalize();
      result = GC_generic_malloc_inner(lb + DEBUG_BYTES, GC_gcj_debug_kind);
      if (result == 0) {
  	UNLOCK();
*************** DCL_LOCK_STATE;
*** 215,220 ****
--- 226,232 ----
      LOCK();
      op = *opp;
      if( EXPECT(op == 0, 0) ) {
+ 	maybe_finalize();
          op = (ptr_t)GC_clear_stack(
  		GC_generic_malloc_words_small_inner(lw, GC_gcj_kind));
  	if (0 == op) {
*************** void * GC_debug_gcj_fast_malloc(size_t l
*** 242,247 ****
--- 254,260 ----
      /* dont end up with extra frames on the stack, which could	*/
      /* confuse the backtrace.					*/
      LOCK();
+     maybe_finalize();
      result = GC_generic_malloc_inner(lb + DEBUG_BYTES, GC_gcj_debug_kind);
      if (result == 0) {
  	UNLOCK();
*************** DCL_LOCK_STATE;
*** 278,283 ****
--- 291,297 ----
  	opp = &(GC_gcjobjfreelist[lw]);
  	LOCK();
          if( (op = *opp) == 0 ) {
+ 	    maybe_finalize();
              op = (ptr_t)GENERAL_MALLOC_IOP(lb, GC_gcj_kind);
  #	    ifdef MERGE_SIZES
  		lw = GC_size_map[lb];	/* May have been uninitialized.	*/
*************** DCL_LOCK_STATE;
*** 289,294 ****
--- 303,310 ----
  	*(void **)op = ptr_to_struct_containing_descr;
  	UNLOCK();
      } else {
+ 	LOCK();
+ 	maybe_finalize();
          op = (ptr_t)GENERAL_MALLOC_IOP(lb, GC_gcj_kind);
          if (0 != op) {
            *(void **)op = ptr_to_struct_containing_descr;
diff -Nrcpad gcc-3.4.3/boehm-gc/headers.c gcc-4.0.0/boehm-gc/headers.c
*** gcc-3.4.3/boehm-gc/headers.c	Fri Aug 17 18:30:45 2001
--- gcc-4.0.0/boehm-gc/headers.c	Fri Aug 13 23:05:30 2004
*************** register struct hblk * h;
*** 206,212 ****
  {
      hdr * result;
      
!     if (!get_index((word) h)) return(FALSE);
      result = alloc_hdr();
      SET_HDR(h, result);
  #   ifdef USE_MUNMAP
--- 206,212 ----
  {
      hdr * result;
      
!     if (!get_index((word) h)) return(0);
      result = alloc_hdr();
      SET_HDR(h, result);
  #   ifdef USE_MUNMAP
diff -Nrcpad gcc-3.4.3/boehm-gc/if_not_there.c gcc-4.0.0/boehm-gc/if_not_there.c
*** gcc-3.4.3/boehm-gc/if_not_there.c	Fri Aug 17 18:30:45 2001
--- gcc-4.0.0/boehm-gc/if_not_there.c	Fri Aug 13 23:05:30 2004
***************
*** 4,9 ****
--- 4,12 ----
  # include <stdio.h>
  # include <stdlib.h>
  # include <unistd.h>
+ #ifdef __DJGPP__
+ #include <dirent.h>
+ #endif /* __DJGPP__ */
  
  int main(argc, argv, envp)
  int argc;
*************** char ** argv;
*** 11,22 ****
--- 14,34 ----
  char ** envp;
  {
      FILE * f;
+ #ifdef __DJGPP__
+     DIR * d;
+ #endif /* __DJGPP__ */
      if (argc < 3) goto Usage;
      if ((f = fopen(argv[1], "rb")) != 0
          || (f = fopen(argv[1], "r")) != 0) {
          fclose(f);
          return(0);
      }
+ #ifdef __DJGPP__
+     if ((d = opendir(argv[1])) != 0) {
+ 	    closedir(d);
+ 	    return(0);
+     }
+ #endif
      printf("^^^^Starting command^^^^\n");
      fflush(stdout);
      execvp(argv[2], argv+2);
diff -Nrcpad gcc-3.4.3/boehm-gc/include/Makefile.in gcc-4.0.0/boehm-gc/include/Makefile.in
*** gcc-3.4.3/boehm-gc/include/Makefile.in	Mon Jul 28 04:18:22 2003
--- gcc-4.0.0/boehm-gc/include/Makefile.in	Tue Mar  1 23:28:07 2005
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999, 2001 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.
--- 1,8 ----
! # 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.
***************
*** 10,240 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! 
! SHELL = @SHELL@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = ..
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AR = @AR@
  AS = @AS@
  CC = @CC@
  CFLAGS = @CFLAGS@
  CPP = @CPP@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
  CXXFLAGS = @CXXFLAGS@
! CXXINCLUDES = @CXXINCLUDES@
! DLLTOOL = @DLLTOOL@
  EXEEXT = @EXEEXT@
  EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@
- GCJ = @GCJ@
- GCJFLAGS = @GCJFLAGS@
  GC_CFLAGS = @GC_CFLAGS@
! INCLUDES = @INCLUDES@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
  MY_CFLAGS = @MY_CFLAGS@
- OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  RANLIB = @RANLIB@
  STRIP = @STRIP@
  THREADLIBS = @THREADLIBS@
  VERSION = @VERSION@
  addincludes = @addincludes@
  addlibs = @addlibs@
  addobjs = @addobjs@
  addtests = @addtests@
! gc_basedir = @gc_basedir@
  mkinstalldirs = @mkinstalldirs@
  target_all = @target_all@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
- 
  AUTOMAKE_OPTIONS = foreign
- 
  noinst_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \
    gc_pthread_redirects.h gc_cpp.h
  
! CONFIG_CLEAN_FILES = 
! HEADERS =  $(noinst_HEADERS)
  
! DIST_COMMON =  Makefile.am Makefile.in
  
  
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
  
! TAR = gtar
! GZIP_ENV = --best
! all: all-redirect
! .SUFFIXES:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --cygnus include/Makefile
  
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
  
  
! tags: TAGS
  
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
  
! TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
! 
! subdir = include
  
  distdir: $(DISTFILES)
! 	@for file in $(DISTFILES); do \
! 	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
  	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
  	  else \
  	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
  	  fi; \
  	done
! info-am:
! info: info-am
! dvi-am:
! dvi: dvi-am
! check-am:
  check: check-am
! installcheck-am:
! installcheck: installcheck-am
! install-info-am: 
! install-info: install-info-am
! install-exec-am:
  install-exec: install-exec-am
- 
- install-data-am:
  install-data: install-data-am
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-am
- uninstall-am:
- uninstall: uninstall-am
- all-am: Makefile $(HEADERS)
- all-redirect: all-am
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs:
- 
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-tags mostlyclean-generic
  
! mostlyclean: mostlyclean-am
  
! clean-am:  clean-tags clean-generic mostlyclean-am
  
! clean: clean-am
  
! distclean-am:  distclean-tags distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-am
  
! maintainer-clean-am:  maintainer-clean-tags maintainer-clean-generic \
! 		distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
  maintainer-clean: maintainer-clean-am
  
! .PHONY: tags mostlyclean-tags distclean-tags clean-tags \
! maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \
! installcheck-am installcheck install-info-am install-info \
! install-exec-am install-exec install-data-am install-data install-am \
! install uninstall-am uninstall all-redirect all-am all installdirs \
! mostlyclean-generic distclean-generic clean-generic \
! maintainer-clean-generic clean mostlyclean distclean maintainer-clean
  
  
  # 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.
--- 12,416 ----
  # 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 = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ 	$(srcdir)/Makefile.in $(srcdir)/gc_config.h.in \
+ 	$(srcdir)/gc_ext_config.h.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.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)
+ CONFIG_HEADER = gc_config.h gc_ext_config.h
+ CONFIG_CLEAN_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ HEADERS = $(noinst_HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AM_CPPFLAGS = @AM_CPPFLAGS@
  AR = @AR@
  AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
  CC = @CC@
+ CCAS = @CCAS@
+ CCASFLAGS = @CCASFLAGS@
+ CCDEPMODE = @CCDEPMODE@
  CFLAGS = @CFLAGS@
+ CPLUSPLUS_FALSE = @CPLUSPLUS_FALSE@
+ CPLUSPLUS_TRUE = @CPLUSPLUS_TRUE@
  CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
  CXXFLAGS = @CXXFLAGS@
! CYGPATH_W = @CYGPATH_W@
! DEFS = @DEFS@
! DEPDIR = @DEPDIR@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXEEXT = @EXEEXT@
  EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@
  GC_CFLAGS = @GC_CFLAGS@
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
! LIBOBJS = @LIBOBJS@
! LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
  MY_CFLAGS = @MY_CFLAGS@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+ POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
  RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
  STRIP = @STRIP@
  THREADLIBS = @THREADLIBS@
  VERSION = @VERSION@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_RANLIB = @ac_ct_RANLIB@
+ ac_ct_STRIP = @ac_ct_STRIP@
  addincludes = @addincludes@
  addlibs = @addlibs@
  addobjs = @addobjs@
  addtests = @addtests@
! 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@
! exec_prefix = @exec_prefix@
! 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@
  mkinstalldirs = @mkinstalldirs@
+ multi_basedir = @multi_basedir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
  target_all = @target_all@
+ target_cpu = @target_cpu@
+ target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  AUTOMAKE_OPTIONS = foreign
  noinst_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \
    gc_pthread_redirects.h gc_cpp.h
  
! all: gc_config.h gc_ext_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) --foreign  include/Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  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
  
! gc_config.h: stamp-h1
! 	@if test ! -f $@; then \
! 	  rm -f stamp-h1; \
! 	  $(MAKE) stamp-h1; \
! 	else :; fi
  
! stamp-h1: $(srcdir)/gc_config.h.in $(top_builddir)/config.status
! 	@rm -f stamp-h1
! 	cd $(top_builddir) && $(SHELL) ./config.status include/gc_config.h
! $(srcdir)/gc_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
! 	cd $(top_srcdir) && $(AUTOHEADER)
! 	rm -f stamp-h1
! 	touch $@
  
+ gc_ext_config.h: stamp-h2
+ 	@if test ! -f $@; then \
+ 	  rm -f stamp-h2; \
+ 	  $(MAKE) stamp-h2; \
+ 	else :; fi
  
! stamp-h2: $(srcdir)/gc_ext_config.h.in $(top_builddir)/config.status
! 	@rm -f stamp-h2
! 	cd $(top_builddir) && $(SHELL) ./config.status include/gc_ext_config.h
  
! distclean-hdr:
! 	-rm -f gc_config.h stamp-h1 gc_ext_config.h stamp-h2
! 
! mostlyclean-libtool:
! 	-rm -f *.lo
! 
! clean-libtool:
! 	-rm -rf .libs _libs
! 
! distclean-libtool:
! 	-rm -f libtool
! uninstall-info-am:
! 
! 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:  $(HEADERS) $(SOURCES) gc_config.h.in gc_ext_config.h.in $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) gc_config.h.in gc_ext_config.h.in $(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:  $(HEADERS) $(SOURCES) gc_config.h.in gc_ext_config.h.in $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
! 	tags=; \
! 	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) gc_config.h.in gc_ext_config.h.in $(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
! check-am: all-am
  check: check-am
! all-am: Makefile $(HEADERS) gc_config.h gc_ext_config.h
! 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-hdr \
! 	distclean-libtool distclean-tags
  
! 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: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ 	clean-libtool ctags distclean distclean-generic distclean-hdr \
+ 	distclean-libtool 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 maintainer-clean \
+ 	maintainer-clean-generic mostlyclean mostlyclean-generic \
+ 	mostlyclean-libtool pdf pdf-am ps ps-am tags 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.
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc.h gcc-4.0.0/boehm-gc/include/gc.h
*** gcc-3.4.3/boehm-gc/include/gc.h	Thu Jul 31 04:52:36 2003
--- gcc-4.0.0/boehm-gc/include/gc.h	Sun Jan  2 03:35:57 2005
***************
*** 30,35 ****
--- 30,58 ----
  
  # define _GC_H
  
+ /* 
+  * As this header includes gc_config.h, preprocessor conflicts can occur with 
+  * clients that include their own autoconf headers. The following #undef's 
+  * work around some likely conflicts.
+  */
+ 
+ # ifdef PACKAGE_NAME
+ #   undef PACKAGE_NAME
+ # endif
+ # ifdef PACKAGE_BUGREPORT
+ #  undef PACKAGE_BUGREPORT
+ # endif
+ # ifdef PACKAGE_STRING
+ #  undef PACKAGE_STRING
+ # endif
+ # ifdef PACKAGE_TARNAME
+ #  undef PACKAGE_TARNAME
+ # endif
+ # ifdef PACKAGE_VERSION
+ #  undef PACKAGE_VERSION
+ # endif
+ 
+ # include <gc_config.h>
  # include "gc_config_macros.h"
  
  # if defined(__STDC__) || defined(__cplusplus)
***************
*** 52,62 ****
  /* even semi-portably.  The following is probably no better/worse 	*/
  /* than almost anything else.						*/
  /* The ANSI standard suggests that size_t and ptr_diff_t might be 	*/
! /* better choices.  But those appear to have incorrect definitions	*/
! /* on may systems.  Notably "typedef int size_t" seems to be both	*/
! /* frequent and WRONG.							*/
! typedef unsigned long GC_word;
! typedef long GC_signed_word;
  
  /* Public read-only variables */
  
--- 75,92 ----
  /* even semi-portably.  The following is probably no better/worse 	*/
  /* than almost anything else.						*/
  /* The ANSI standard suggests that size_t and ptr_diff_t might be 	*/
! /* better choices.  But those had incorrect definitions on some older	*/
! /* systems.  Notably "typedef int size_t" is WRONG.			*/
! #ifndef _WIN64
!   typedef unsigned long GC_word;
!   typedef long GC_signed_word;
! #else
!   /* Win64 isn't really supported yet, but this is the first step. And	*/
!   /* it might cause error messages to show up in more plausible places.	*/
!   /* This needs basetsd.h, which is included by windows.h.	 	*/
!   typedef ULONG_PTR GC_word;
!   typedef LONG_PTR GC_word;
! #endif
  
  /* Public read-only variables */
  
*************** GC_API unsigned long GC_time_limit;
*** 247,252 ****
--- 277,283 ----
   * allocation, since unlike the regular allocation routines, GC_local_malloc
   * is not self-initializing.  If you use GC_local_malloc you should arrange
   * to call this somehow (e.g. from a constructor) before doing any allocation.
+  * For win32 threads, it needs to be called explicitly.
   */
  GC_API void GC_init GC_PROTO((void));
  
*************** GC_API GC_PTR GC_malloc_atomic_ignore_of
*** 470,483 ****
  # include <features.h>
  # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
       && !defined(__ia64__)
! #   define GC_HAVE_BUILTIN_BACKTRACE
! #   define GC_CAN_SAVE_CALL_STACKS
  # endif
  # if defined(__i386__) || defined(__x86_64__)
  #   define GC_CAN_SAVE_CALL_STACKS
  # endif
  #endif
  
  #if defined(__sparc__)
  #   define GC_CAN_SAVE_CALL_STACKS
  #endif
--- 501,519 ----
  # include <features.h>
  # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
       && !defined(__ia64__)
! #   ifndef GC_HAVE_BUILTIN_BACKTRACE
! #     define GC_HAVE_BUILTIN_BACKTRACE
! #   endif
  # endif
  # if defined(__i386__) || defined(__x86_64__)
  #   define GC_CAN_SAVE_CALL_STACKS
  # endif
  #endif
  
+ #if defined(GC_HAVE_BUILTIN_BACKTRACE) && !defined(GC_CAN_SAVE_CALL_STACKS)
+ # define GC_CAN_SAVE_CALL_STACKS
+ #endif
+ 
  #if defined(__sparc__)
  #   define GC_CAN_SAVE_CALL_STACKS
  #endif
*************** GC_API GC_PTR GC_debug_realloc_replaceme
*** 604,610 ****
  
  /* Finalization.  Some of these primitives are grossly unsafe.		*/
  /* The idea is to make them both cheap, and sufficient to build		*/
! /* a safer layer, closer to PCedar finalization.			*/
  /* The interface represents my conclusions from a long discussion	*/
  /* with Alan Demers, Dan Greene, Carl Hauser, Barry Hayes, 		*/
  /* Christian Jacobi, and Russ Atkinson.  It's not perfect, and		*/
--- 640,646 ----
  
  /* Finalization.  Some of these primitives are grossly unsafe.		*/
  /* The idea is to make them both cheap, and sufficient to build		*/
! /* a safer layer, closer to Modula-3, Java, or PCedar finalization.	*/
  /* The interface represents my conclusions from a long discussion	*/
  /* with Alan Demers, Dan Greene, Carl Hauser, Barry Hayes, 		*/
  /* Christian Jacobi, and Russ Atkinson.  It's not perfect, and		*/
*************** GC_API GC_PTR GC_call_with_alloc_lock
*** 774,779 ****
--- 810,816 ----
  
  /* The following routines are primarily intended for use with a 	*/
  /* preprocessor which inserts calls to check C pointer arithmetic.	*/
+ /* They indicate failure by invoking the corresponding _print_proc.	*/
  
  /* Check that p and q point to the same object.  		*/
  /* Fail conspicuously if they don't.				*/
*************** GC_API GC_PTR GC_is_valid_displacement G
*** 851,857 ****
  #   define GC_PTR_STORE(p, q) *((p) = (q))
  #endif
  
! /* Fynctions called to report pointer checking errors */
  GC_API void (*GC_same_obj_print_proc) GC_PROTO((GC_PTR p, GC_PTR q));
  
  GC_API void (*GC_is_valid_displacement_print_proc)
--- 888,894 ----
  #   define GC_PTR_STORE(p, q) *((p) = (q))
  #endif
  
! /* Functions called to report pointer checking errors */
  GC_API void (*GC_same_obj_print_proc) GC_PROTO((GC_PTR p, GC_PTR q));
  
  GC_API void (*GC_is_valid_displacement_print_proc)
*************** extern void GC_thr_init();	/* Needed for
*** 919,931 ****
  
  #endif /* defined(GC_WIN32_THREADS)  && !cygwin */
  
! /*
!  * If you are planning on putting
!  * the collector in a SunOS 5 dynamic library, you need to call GC_INIT()
!  * from the statically loaded program section.
!  * This circumvents a Solaris 2.X (X<=4) linker bug.
!  */
! #if defined(sparc) || defined(__sparc)
  #   define GC_INIT() { extern end, etext; \
  		       GC_noop(&end, &etext); }
  #else
--- 956,974 ----
  
  #endif /* defined(GC_WIN32_THREADS)  && !cygwin */
  
!  /*
!   * Fully portable code should call GC_INIT() from the main program
!   * before making any other GC_ calls.  On most platforms this is a
!   * no-op and the collector self-initializes.  But a number of platforms
!   * make that too hard.
!   */
! #if (defined(sparc) || defined(__sparc)) && defined(sun)
!     /*
!      * If you are planning on putting
!      * the collector in a SunOS 5 dynamic library, you need to call GC_INIT()
!      * from the statically loaded program section.
!      * This circumvents a Solaris 2.X (X<=4) linker bug.
!      */
  #   define GC_INIT() { extern end, etext; \
  		       GC_noop(&end, &etext); }
  #else
*************** extern void GC_thr_init();	/* Needed for
*** 936,948 ****
       */
  #   define GC_INIT() { GC_add_roots(DATASTART, DATAEND); }
  # else
! #  if defined(__APPLE__) && defined(__MACH__)
  #   define GC_INIT() { GC_init(); }
  #  else
  #   define GC_INIT()
! #  endif
! # endif
! #endif
  
  #if !defined(_WIN32_WCE) \
      && ((defined(_MSDOS) || defined(_MSC_VER)) && (_M_IX86 >= 300) \
--- 979,991 ----
       */
  #   define GC_INIT() { GC_add_roots(DATASTART, DATAEND); }
  # else
! #  if defined(__APPLE__) && defined(__MACH__) || defined(GC_WIN32_THREADS)
  #   define GC_INIT() { GC_init(); }
  #  else
  #   define GC_INIT()
! #  endif /* !__MACH && !GC_WIN32_THREADS */
! # endif /* !AIX && !cygwin */
! #endif /* !sparc */
  
  #if !defined(_WIN32_WCE) \
      && ((defined(_MSDOS) || defined(_MSC_VER)) && (_M_IX86 >= 300) \
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_allocator.h gcc-4.0.0/boehm-gc/include/gc_allocator.h
*** gcc-3.4.3/boehm-gc/include/gc_allocator.h	Mon Jul 28 03:46:17 2003
--- gcc-4.0.0/boehm-gc/include/gc_allocator.h	Fri Aug 13 23:05:32 2004
***************
*** 35,41 ****
   * library, which itself was derived from the SGI STL implementation.
   */
  
! #include "gc.h" 	// For size_t
  
  /* First some helpers to allow us to dispatch on whether or not a type
   * is known to be pointerfree.
--- 35,51 ----
   * library, which itself was derived from the SGI STL implementation.
   */
  
! #ifndef GC_ALLOCATOR_H
! 
! #define GC_ALLOCATOR_H
! 
! #include "gc.h"
! 
! #if defined(__GNUC__)
! #  define GC_ATTR_UNUSED __attribute__((unused))
! #else
! #  define GC_ATTR_UNUSED
! #endif
  
  /* First some helpers to allow us to dispatch on whether or not a type
   * is known to be pointerfree.
*************** public:
*** 118,124 ****
    }
  
    // __p is not permitted to be a null pointer.
!   void deallocate(pointer __p, size_type GC_n)
      { GC_FREE(__p); }
  
    size_type max_size() const throw()
--- 128,134 ----
    }
  
    // __p is not permitted to be a null pointer.
!   void deallocate(pointer __p, size_type GC_ATTR_UNUSED GC_n)
      { GC_FREE(__p); }
  
    size_type max_size() const throw()
*************** public:
*** 194,200 ****
    }
  
    // __p is not permitted to be a null pointer.
!   void deallocate(pointer __p, size_type GC_n)
      { GC_FREE(__p); }
  
    size_type max_size() const throw()
--- 204,210 ----
    }
  
    // __p is not permitted to be a null pointer.
!   void deallocate(pointer __p, size_type GC_ATTR_UNUSED GC_n)
      { GC_FREE(__p); }
  
    size_type max_size() const throw()
*************** inline bool operator!=(const traceable_a
*** 230,232 ****
--- 240,243 ----
    return false;
  }
  
+ #endif /* GC_ALLOCATOR_H */
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_config.h.in gcc-4.0.0/boehm-gc/include/gc_config.h.in
*** gcc-3.4.3/boehm-gc/include/gc_config.h.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/include/gc_config.h.in	Wed Feb 16 04:10:42 2005
***************
*** 0 ****
--- 1,155 ----
+ /* include/gc_config.h.in.  Generated from configure.ac by autoheader.  */
+ 
+ /* allows all pointers to the interior of objects to be recognized */
+ #undef ALL_INTERIOR_POINTERS
+ 
+ /* include code for GC_malloc_atomic_uncollectable */
+ #undef ATOMIC_UNCOLLECTABLE
+ 
+ /* No description */
+ #undef DATASTART_IS_ETEXT
+ 
+ /* Make sure that all objects have debug headers */
+ #undef DBG_HDRS_ALL
+ 
+ /* No description */
+ #undef DGUX_THREADS
+ 
+ /* Target is ECOS */
+ #undef ECOS
+ 
+ /* support AIX threads */
+ #undef GC_AIX_THREADS
+ 
+ /* support for Mac OS X pthreads */
+ #undef GC_DARWIN_THREADS
+ 
+ /* support for DB/UX on I386 threads */
+ #undef GC_DGUX386_THREADS
+ 
+ /* support FreeBSD threads */
+ #undef GC_FREEBSD_THREADS
+ 
+ /* include support for gcj */
+ #undef GC_GCJ_SUPPORT
+ 
+ /* enables support for HP/UX 11 pthreads */
+ #undef GC_HPUX_THREADS
+ 
+ /* support for Irix pthreads */
+ #undef GC_IRIX_THREADS
+ 
+ /* support for Xavier Leroy's Linux threads */
+ #undef GC_LINUX_THREADS
+ 
+ /* support for Tru64 pthreads */
+ #undef GC_OSF1_THREADS
+ 
+ /* support for Solaris pthreads */
+ #undef GC_SOLARIS_PTHREADS
+ 
+ /* support for Solaris (thr_) threads */
+ #undef GC_SOLARIS_THREADS
+ 
+ /* support for win32 threads */
+ #undef GC_WIN32_THREADS
+ 
+ /* Define to 1 if you have the <inttypes.h> header file. */
+ #undef HAVE_INTTYPES_H
+ 
+ /* Define to 1 if you have the <memory.h> header file. */
+ #undef HAVE_MEMORY_H
+ 
+ /* 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 <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 you have the <sys/stat.h> header file. */
+ #undef HAVE_SYS_STAT_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 <unistd.h> header file. */
+ #undef HAVE_UNISTD_H
+ 
+ /* make it somewhat safer to finalize objects out of order */
+ #undef JAVA_FINALIZATION
+ 
+ /* Add code to save back pointers */
+ #undef KEEP_BACK_PTRS
+ 
+ /* Enable GC_PRINT_BACK_HEIGHT environment variable */
+ #undef MAKE_BACK_GRAPH
+ 
+ /* removes GC_dump */
+ #undef NO_DEBUGGING
+ 
+ /* cause some or all of the heap to not have execute permission */
+ #undef NO_EXECUTE_PERMISSION
+ 
+ /* Define to 1 if your C compiler doesn't accept -c and -o together. */
+ #undef NO_MINUS_C_MINUS_O
+ 
+ /* does not disable signals */
+ #undef NO_SIGNALS
+ 
+ /* use empty GC_disable_signals and GC_enable_signals */
+ #undef NO_SIGSET
+ 
+ /* 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
+ 
+ /* allow the marker to run in multiple threads */
+ #undef PARALLEL_MARK
+ 
+ /* number of call frames saved with objects allocated through the debugging
+    interface */
+ #undef SAVE_CALL_COUNT
+ 
+ /* disables statistics printing */
+ #undef SILENT
+ 
+ /* PROC_VDB in Solaris 2.5 gives wrong values for dirty bits */
+ #undef SOLARIS25_PROC_VDB_BUG_FIXED
+ 
+ /* No description */
+ #undef STACKBASE
+ 
+ /* Define to 1 if you have the ANSI C header files. */
+ #undef STDC_HEADERS
+ 
+ /* Avoid Solaris 5.3 dynamic library bug */
+ #undef SUNOS53_SHARED_LIB
+ 
+ /* define GC_local_malloc() & GC_local_malloc_atomic() */
+ #undef THREAD_LOCAL_ALLOC
+ 
+ /* use MMAP instead of sbrk to get new memory */
+ #undef USE_MMAP
+ 
+ /* POSIX version of C Source */
+ #undef _POSIX_C_SOURCE
+ 
+ /* Use reentrant code */
+ #undef _REENTRANT
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_config_macros.h gcc-4.0.0/boehm-gc/include/gc_config_macros.h
*** gcc-3.4.3/boehm-gc/include/gc_config_macros.h	Mon Jul 28 03:46:17 2003
--- gcc-4.0.0/boehm-gc/include/gc_config_macros.h	Fri Aug 13 23:05:32 2004
***************
*** 1,43 ****
  /*
   * This should never be included directly.  It is included only from gc.h.
   * We separate it only to make gc.h more suitable as documentation.
-  * 
-  * Some tests for old macros.  These violate our namespace rules and will
-  * disappear shortly.  Use the GC_ names.
   */
- #if defined(SOLARIS_THREADS) || defined(_SOLARIS_THREADS)
- # define GC_SOLARIS_THREADS
- #endif
- #if defined(_SOLARIS_PTHREADS)
- # define GC_SOLARIS_PTHREADS
- #endif
- #if defined(IRIX_THREADS)
- # define GC_IRIX_THREADS
- #endif
- #if defined(DGUX_THREADS)
- # if !defined(GC_DGUX386_THREADS)
- #  define GC_DGUX386_THREADS
- # endif
- #endif
- #if defined(AIX_THREADS)
- # define GC_AIX_THREADS
- #endif
- #if defined(HPUX_THREADS)
- # define GC_HPUX_THREADS
- #endif
- #if defined(OSF1_THREADS)
- # define GC_OSF1_THREADS
- #endif
- #if defined(LINUX_THREADS)
- # define GC_LINUX_THREADS
- #endif
- #if defined(WIN32_THREADS)
- # define GC_WIN32_THREADS
- #endif
- #if defined(USE_LD_WRAP)
- # define GC_USE_LD_WRAP
- #endif
- 
  #if !defined(_REENTRANT) && (defined(GC_SOLARIS_THREADS) \
  		             || defined(GC_SOLARIS_PTHREADS) \
  			     || defined(GC_HPUX_THREADS) \
--- 1,7 ----
***************
*** 97,103 ****
  # endif
  #endif /* GC_THREADS */
  
! #if defined(GC_THREADS) && !defined(GC_PTHREADS) && defined(MSWIN32)
  # define GC_WIN32_THREADS
  #endif
  
--- 61,70 ----
  # endif
  #endif /* GC_THREADS */
  
! #if defined(GC_THREADS) && !defined(GC_PTHREADS) && \
!     (defined(_WIN32) || defined(_MSC_VER) || defined(__CYGWIN__) \
!      || defined(__MINGW32__) || defined(__BORLANDC__) \
!      || defined(_WIN32_WCE))
  # define GC_WIN32_THREADS
  #endif
  
***************
*** 106,113 ****
  #endif
  
  # define __GC
! # include <stddef.h>
! # ifdef _WIN32_WCE
  /* Yet more kluges for WinCE */
  #   include <stdlib.h>		/* size_t is defined here */
      typedef long ptrdiff_t;	/* ptrdiff_t is not defined */
--- 73,81 ----
  #endif
  
  # define __GC
! # ifndef _WIN32_WCE
! #   include <stddef.h>
! # else /* ! _WIN32_WCE */
  /* Yet more kluges for WinCE */
  #   include <stdlib.h>		/* size_t is defined here */
      typedef long ptrdiff_t;	/* ptrdiff_t is not defined */
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_cpp.h gcc-4.0.0/boehm-gc/include/gc_cpp.h
*** gcc-3.4.3/boehm-gc/include/gc_cpp.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/gc_cpp.h	Fri Aug 13 23:05:32 2004
*************** by UseGC.  GC is an alias for UseGC, unl
*** 152,157 ****
--- 152,162 ----
  #   define GC_OPERATOR_NEW_ARRAY
  #endif
  
+ #if    ! defined ( __BORLANDC__ )  /* Confuses the Borland compiler. */ \
+     && ! defined ( __sgi )
+ #  define GC_PLACEMENT_DELETE
+ #endif
+ 
  enum GCPlacement {UseGC,
  #ifndef GC_NAME_CONFLICT
  		  GC=UseGC,
*************** class gc {public:
*** 165,171 ****
      	/* Must be redefined here, since the other overloadings	*/
      	/* hide the global definition.				*/
      inline void operator delete( void* obj );
! #   ifndef __BORLANDC__  /* Confuses the Borland compiler. */
        inline void operator delete( void*, void* );
  #   endif
  
--- 170,176 ----
      	/* Must be redefined here, since the other overloadings	*/
      	/* hide the global definition.				*/
      inline void operator delete( void* obj );
! #   ifdef GC_PLACEMENT_DELETE  
        inline void operator delete( void*, void* );
  #   endif
  
*************** class gc {public:
*** 174,180 ****
      inline void* operator new[]( size_t size, GCPlacement gcp );
      inline void* operator new[]( size_t size, void *p );
      inline void operator delete[]( void* obj );
! #   ifndef __BORLANDC__
        inline void gc::operator delete[]( void*, void* );
  #   endif
  #endif /* GC_OPERATOR_NEW_ARRAY */
--- 179,185 ----
      inline void* operator new[]( size_t size, GCPlacement gcp );
      inline void* operator new[]( size_t size, void *p );
      inline void operator delete[]( void* obj );
! #   ifdef GC_PLACEMENT_DELETE
        inline void gc::operator delete[]( void*, void* );
  #   endif
  #endif /* GC_OPERATOR_NEW_ARRAY */
*************** inline void* gc::operator new( size_t si
*** 282,288 ****
  inline void gc::operator delete( void* obj ) {
      GC_FREE( obj );}
      
! #ifndef __BORLANDC__
    inline void gc::operator delete( void*, void* ) {}
  #endif
  
--- 287,293 ----
  inline void gc::operator delete( void* obj ) {
      GC_FREE( obj );}
      
! #ifdef GC_PLACEMENT_DELETE
    inline void gc::operator delete( void*, void* ) {}
  #endif
  
*************** inline void* gc::operator new[]( size_t 
*** 300,306 ****
  inline void gc::operator delete[]( void* obj ) {
      gc::operator delete( obj );}
  
! #ifndef __BORLANDC__
    inline void gc::operator delete[]( void*, void* ) {}
  #endif
      
--- 305,311 ----
  inline void gc::operator delete[]( void* obj ) {
      gc::operator delete( obj );}
  
! #ifdef GC_PLACEMENT_DELETE
    inline void gc::operator delete[]( void*, void* ) {}
  #endif
      
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_ext_config.h.in gcc-4.0.0/boehm-gc/include/gc_ext_config.h.in
*** gcc-3.4.3/boehm-gc/include/gc_ext_config.h.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/include/gc_ext_config.h.in	Sun Jan  2 03:35:57 2005
***************
*** 0 ****
--- 1,5 ----
+ /* include/gc_ext_config.h.in.  This contains definitions needed by
+ external clients that do not want to include the full gc.h.  Currently this
+ is used by libjava/include/boehm-gc.h. */
+ 
+ #undef THREAD_LOCAL_ALLOC
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_gcj.h gcc-4.0.0/boehm-gc/include/gc_gcj.h
*** gcc-3.4.3/boehm-gc/include/gc_gcj.h	Tue Oct 16 09:01:38 2001
--- gcc-4.0.0/boehm-gc/include/gc_gcj.h	Fri Aug 13 23:05:32 2004
***************
*** 53,59 ****
  /* respectively for the allocated objects.  Mark_proc will be 		*/
  /* used to build the descriptor for objects allocated through the	*/
  /* debugging interface.  The mark_proc will be invoked on all such 	*/
! /* objects with an "environment" value of 1.  The client may chose	*/
  /* to use the same mark_proc for some of its generated mark descriptors.*/
  /* In that case, it should use a different "environment" value to	*/
  /* detect the presence or absence of the debug header.			*/
--- 53,59 ----
  /* respectively for the allocated objects.  Mark_proc will be 		*/
  /* used to build the descriptor for objects allocated through the	*/
  /* debugging interface.  The mark_proc will be invoked on all such 	*/
! /* objects with an "environment" value of 1.  The client may choose	*/
  /* to use the same mark_proc for some of its generated mark descriptors.*/
  /* In that case, it should use a different "environment" value to	*/
  /* detect the presence or absence of the debug header.			*/
*************** extern void * GC_debug_gcj_fast_malloc(s
*** 88,93 ****
--- 88,104 ----
  extern void * GC_gcj_malloc_ignore_off_page(size_t lb,
  				void * ptr_to_struct_containing_descr);
  
+ /* The kind numbers of normal and debug gcj objects.		*/
+ /* Useful only for debug support, we hope.			*/
+ extern int GC_gcj_kind;
+ 
+ extern int GC_gcj_debug_kind;
+ 
+ # if defined(GC_LOCAL_ALLOC_H) && defined(GC_REDIRECT_TO_LOCAL)
+     --> gc_local_alloc.h should be included after this.  Otherwise
+     --> we undo the redirection.
+ # endif
+ 
  # ifdef GC_DEBUG
  #   define GC_GCJ_MALLOC(s,d) GC_debug_gcj_malloc(s,d,GC_EXTRAS)
  #   define GC_GCJ_FAST_MALLOC(s,d) GC_debug_gcj_fast_malloc(s,d,GC_EXTRAS)
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_local_alloc.h gcc-4.0.0/boehm-gc/include/gc_local_alloc.h
*** gcc-3.4.3/boehm-gc/include/gc_local_alloc.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/gc_local_alloc.h	Fri Aug 13 23:05:32 2004
*************** GC_PTR GC_local_malloc_atomic(size_t byt
*** 61,66 ****
--- 61,67 ----
  #endif
  
  # ifdef GC_DEBUG
+     /* We don't really use local allocation in this case.	*/
  #   define GC_LOCAL_MALLOC(s) GC_debug_malloc(s,GC_EXTRAS)
  #   define GC_LOCAL_MALLOC_ATOMIC(s) GC_debug_malloc_atomic(s,GC_EXTRAS)
  #   ifdef GC_GCJ_SUPPORT
diff -Nrcpad gcc-3.4.3/boehm-gc/include/gc_mark.h gcc-4.0.0/boehm-gc/include/gc_mark.h
*** gcc-3.4.3/boehm-gc/include/gc_mark.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/gc_mark.h	Fri Aug 13 23:05:32 2004
***************
*** 19,28 ****
   * This interface should not be used by normal C or C++ clients.
   * It will be useful to runtimes for other languages.
   * 
!  * Note that this file is not "namespace-clean", i.e. it introduces names
!  * not prefixed with GC_, which may collide with the client's names.  It
!  * should be included only in those few places that directly provide
!  * information to the collector.
   */
  #ifndef GC_MARK_H
  # define GC_MARK_H
--- 19,26 ----
   * This interface should not be used by normal C or C++ clients.
   * It will be useful to runtimes for other languages.
   * 
!  * This is an experts-only interface!  There are many ways to break the
!  * collector in subtle ways by using this functionality.
   */
  #ifndef GC_MARK_H
  # define GC_MARK_H
*************** struct GC_ms_entry *GC_mark_and_push
*** 143,147 ****
--- 141,203 ----
  	  GC_mark_and_push(obj, msp, lim, src) : \
  	  msp)
  
+ extern size_t GC_debug_header_size;
+        /* The size of the header added to objects allocated through    */
+        /* the GC_debug routines.                                       */
+        /* Defined as a variable so that client mark procedures don't   */
+        /* need to be recompiled for collector version changes.         */
+ #define GC_USR_PTR_FROM_BASE(p) ((GC_PTR)((char *)(p) + GC_debug_header_size))
+ 
+ /* And some routines to support creation of new "kinds", e.g. with	*/
+ /* custom mark procedures, by language runtimes.			*/
+ /* The _inner versions assume the caller holds the allocation lock.	*/
+ 
+ /* Return a new free list array.	*/
+ void ** GC_new_free_list GC_PROTO((void));
+ void ** GC_new_free_list_inner GC_PROTO((void));
+ 
+ /* Return a new kind, as specified. */
+ int GC_new_kind GC_PROTO((void **free_list, GC_word mark_descriptor_template,
+ 		          int add_size_to_descriptor, int clear_new_objects));
+ 		/* The last two parameters must be zero or one. */
+ int GC_new_kind_inner GC_PROTO((void **free_list,
+ 				GC_word mark_descriptor_template,
+ 		                int add_size_to_descriptor,
+ 				int clear_new_objects));
+ 
+ /* Return a new mark procedure identifier, suitable for use as	*/
+ /* the first argument in GC_MAKE_PROC.				*/
+ int GC_new_proc GC_PROTO((GC_mark_proc));
+ int GC_new_proc_inner GC_PROTO((GC_mark_proc));
+ 
+ /* Allocate an object of a given kind.  Note that in multithreaded	*/
+ /* contexts, this is usually unsafe for kinds that have the descriptor	*/
+ /* in the object itself, since there is otherwise a window in which	*/
+ /* the descriptor is not correct.  Even in the single-threaded case,	*/
+ /* we need to be sure that cleared objects on a free list don't		*/
+ /* cause a GC crash if they are accidentally traced.			*/
+ /* ptr_t */char * GC_generic_malloc GC_PROTO((GC_word lb, int k));
+ 
+ /* FIXME - Should return void *, but that requires other changes.	*/
+ 
+ typedef void (*GC_describe_type_fn) GC_PROTO((void *p, char *out_buf));
+ 				/* A procedure which			*/
+ 				/* produces a human-readable 		*/
+ 				/* description of the "type" of object	*/
+ 				/* p into the buffer out_buf of length	*/
+ 				/* GC_TYPE_DESCR_LEN.  This is used by	*/
+ 				/* the debug support when printing 	*/
+ 				/* objects.				*/ 
+ 				/* These functions should be as robust	*/
+ 				/* as possible, though we do avoid 	*/
+ 				/* invoking them on objects on the 	*/
+ 				/* global free list.			*/
+ #	define GC_TYPE_DESCR_LEN 40
+ 
+ void GC_register_describe_type_fn GC_PROTO((int kind, GC_describe_type_fn knd));
+ 				/* Register a describe_type function	*/
+ 				/* to be used when printing objects	*/
+ 				/* of a particular kind.		*/
+ 
  #endif  /* GC_MARK_H */
  
diff -Nrcpad gcc-3.4.3/boehm-gc/include/javaxfc.h gcc-4.0.0/boehm-gc/include/javaxfc.h
*** gcc-3.4.3/boehm-gc/include/javaxfc.h	Fri Aug 17 18:30:50 2001
--- gcc-4.0.0/boehm-gc/include/javaxfc.h	Fri Aug 13 23:05:33 2004
***************
*** 18,41 ****
   */
  void GC_finalize_all();
  
- /*
-  * A version of GC_register_finalizer that allows the object to be
-  * finalized before the objects it references.  This is again error
-  * prone, in that it makes it easy to accidentally reference finalized
-  * objects.  Again, recommended only for JVM implementors.
-  */
- void GC_register_finalizer_no_order(GC_PTR obj,
- 			       GC_finalization_proc fn, GC_PTR cd,
- 			       GC_finalization_proc *ofn, GC_PTR * ocd);
- 
- void GC_debug_register_finalizer_no_order(GC_PTR obj,
- 			       GC_finalization_proc fn, GC_PTR cd,
- 			       GC_finalization_proc *ofn, GC_PTR * ocd);
  
- #ifdef GC_DEBUG
- #   define GC_REGISTER_FINALIZER(p, f, d, of, od) \
- 	GC_debug_register_finalizer_no_order(p, f, d, of, od)
- #else
- #   define GC_REGISTER_FINALIZER(p, f, d, of, od) \
- 	GC_register_finalizer_no_order(p, f, d, of, od)
- #endif
--- 18,21 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/include/new_gc_alloc.h gcc-4.0.0/boehm-gc/include/new_gc_alloc.h
*** gcc-3.4.3/boehm-gc/include/new_gc_alloc.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/new_gc_alloc.h	Fri Aug 13 23:05:33 2004
*************** __STL_END_NAMESPACE
*** 393,404 ****
  
  __STL_BEGIN_NAMESPACE
  
! template <class _T>
! struct _Alloc_traits<_T, gc_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_T, gc_alloc > _Alloc_type;
!   typedef __allocator<_T, gc_alloc > allocator_type;
  };
  
  inline bool operator==(const gc_alloc&,
--- 393,404 ----
  
  __STL_BEGIN_NAMESPACE
  
! template <class _Tp>
! struct _Alloc_traits<_Tp, gc_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_Tp, gc_alloc > _Alloc_type;
!   typedef __allocator<_Tp, gc_alloc > allocator_type;
  };
  
  inline bool operator==(const gc_alloc&,
*************** inline bool operator!=(const gc_alloc&,
*** 413,424 ****
    return false;
  }
  
! template <class _T>
! struct _Alloc_traits<_T, single_client_gc_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_T, single_client_gc_alloc > _Alloc_type;
!   typedef __allocator<_T, single_client_gc_alloc > allocator_type;
  };
  
  inline bool operator==(const single_client_gc_alloc&,
--- 413,424 ----
    return false;
  }
  
! template <class _Tp>
! struct _Alloc_traits<_Tp, single_client_gc_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_Tp, single_client_gc_alloc > _Alloc_type;
!   typedef __allocator<_Tp, single_client_gc_alloc > allocator_type;
  };
  
  inline bool operator==(const single_client_gc_alloc&,
*************** inline bool operator!=(const single_clie
*** 433,444 ****
    return false;
  }
  
! template <class _T>
! struct _Alloc_traits<_T, traceable_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_T, traceable_alloc > _Alloc_type;
!   typedef __allocator<_T, traceable_alloc > allocator_type;
  };
  
  inline bool operator==(const traceable_alloc&,
--- 433,444 ----
    return false;
  }
  
! template <class _Tp>
! struct _Alloc_traits<_Tp, traceable_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_Tp, traceable_alloc > _Alloc_type;
!   typedef __allocator<_Tp, traceable_alloc > allocator_type;
  };
  
  inline bool operator==(const traceable_alloc&,
*************** inline bool operator!=(const traceable_a
*** 453,464 ****
    return false;
  }
  
! template <class _T>
! struct _Alloc_traits<_T, single_client_traceable_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_T, single_client_traceable_alloc > _Alloc_type;
!   typedef __allocator<_T, single_client_traceable_alloc > allocator_type;
  };
  
  inline bool operator==(const single_client_traceable_alloc&,
--- 453,464 ----
    return false;
  }
  
! template <class _Tp>
! struct _Alloc_traits<_Tp, single_client_traceable_alloc >
  {
    static const bool _S_instanceless = true;
!   typedef simple_alloc<_Tp, single_client_traceable_alloc > _Alloc_type;
!   typedef __allocator<_Tp, single_client_traceable_alloc > allocator_type;
  };
  
  inline bool operator==(const single_client_traceable_alloc&,
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/darwin_stop_world.h gcc-4.0.0/boehm-gc/include/private/darwin_stop_world.h
*** gcc-3.4.3/boehm-gc/include/private/darwin_stop_world.h	Mon Jul 28 03:46:18 2003
--- gcc-4.0.0/boehm-gc/include/private/darwin_stop_world.h	Fri Aug 13 23:05:33 2004
*************** struct thread_stop_info {
*** 12,15 ****
--- 12,22 ----
      mach_port_t mach_thread;
  };
  
+ struct GC_mach_thread {
+   thread_act_t thread;
+   int already_suspended;
+ };
+ 
+ void GC_darwin_register_mach_handler_thread(mach_port_t thread);
+ 
  #endif
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/dbg_mlc.h gcc-4.0.0/boehm-gc/include/private/dbg_mlc.h
*** gcc-3.4.3/boehm-gc/include/private/dbg_mlc.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/private/dbg_mlc.h	Fri Aug 13 23:05:33 2004
*************** typedef struct {
*** 123,129 ****
  #   define UNCOLLECTABLE_DEBUG_BYTES (sizeof (oh) + sizeof (word))
  #   define DEBUG_BYTES (UNCOLLECTABLE_DEBUG_BYTES - EXTRA_BYTES)
  #endif
- #define USR_PTR_FROM_BASE(p) ((ptr_t)(p) + sizeof(oh))
  
  /* Round bytes to words without adding extra byte at end.	*/
  #define SIMPLE_ROUNDED_UP_WORDS(n) BYTES_TO_WORDS((n) + WORDS_TO_BYTES(1) - 1)
--- 123,128 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/gc_pmark.h gcc-4.0.0/boehm-gc/include/private/gc_pmark.h
*** gcc-3.4.3/boehm-gc/include/private/gc_pmark.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/private/gc_pmark.h	Mon Aug 23 21:40:17 2004
***************
*** 25,30 ****
--- 25,32 ----
  #ifndef GC_PMARK_H
  # define GC_PMARK_H
  
+ # include "gc.h"	/* For configuration */
+ 
  # if defined(KEEP_BACK_PTRS) || defined(PRINT_BLACK_LIST)
  #   include "dbg_mlc.h"
  # endif
*************** extern mse * GC_mark_stack;
*** 135,146 ****
  /* Return a pointer to within 1st page of object.  	*/
  /* Set *new_hdr_p to corr. hdr.				*/
  #ifdef __STDC__
! # ifdef PRINT_BLACK_LIST
!     ptr_t GC_find_start(ptr_t current, hdr *hhdr, hdr **new_hdr_p,
! 		    	word source);
! # else
!     ptr_t GC_find_start(ptr_t current, hdr *hhdr, hdr **new_hdr_p);
! # endif
  #else
    ptr_t GC_find_start();
  #endif
--- 137,143 ----
  /* Return a pointer to within 1st page of object.  	*/
  /* Set *new_hdr_p to corr. hdr.				*/
  #ifdef __STDC__
!   ptr_t GC_find_start(ptr_t current, hdr *hhdr, hdr **new_hdr_p);
  #else
    ptr_t GC_find_start();
  #endif
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/gc_priv.h gcc-4.0.0/boehm-gc/include/private/gc_priv.h
*** gcc-3.4.3/boehm-gc/include/private/gc_priv.h	Fri Oct  3 18:43:06 2003
--- gcc-4.0.0/boehm-gc/include/private/gc_priv.h	Wed Feb 16 04:10:42 2005
***************
*** 19,24 ****
--- 19,28 ----
  # ifndef GC_PRIVATE_H
  # define GC_PRIVATE_H
  
+ /* Autoconf definitions. */
+ /* FIXME: This should really be included directly from each .c file. */
+ #include <gc_config.h>
+ 
  #if defined(mips) && defined(SYSTYPE_BSD) && defined(sony_news)
      /* sony RISC NEWS, NEWSOS 4 */
  #   define BSD_TIME
*************** extern GC_warn_proc GC_current_warn_proc
*** 550,556 ****
  
  #define CPP_MAXOBJBYTES (CPP_HBLKSIZE/2)
  #define MAXOBJBYTES ((word)CPP_MAXOBJBYTES)
! #define CPP_MAXOBJSZ    BYTES_TO_WORDS(CPP_HBLKSIZE/2)
  #define MAXOBJSZ ((word)CPP_MAXOBJSZ)
  		
  # define divHBLKSZ(n) ((n) >> LOG_HBLKSIZE)
--- 554,560 ----
  
  #define CPP_MAXOBJBYTES (CPP_HBLKSIZE/2)
  #define MAXOBJBYTES ((word)CPP_MAXOBJBYTES)
! #define CPP_MAXOBJSZ    BYTES_TO_WORDS(CPP_MAXOBJBYTES)
  #define MAXOBJSZ ((word)CPP_MAXOBJSZ)
  		
  # define divHBLKSZ(n) ((n) >> LOG_HBLKSIZE)
*************** extern GC_warn_proc GC_current_warn_proc
*** 578,584 ****
  # else
  #       define ALIGNED_WORDS(n) ROUNDED_UP_WORDS(n)
  # endif
! # define SMALL_OBJ(bytes) ((bytes) < (MAXOBJBYTES - EXTRA_BYTES))
  # define ADD_SLOP(bytes) ((bytes) + EXTRA_BYTES)
  # ifndef MIN_WORDS
      /* MIN_WORDS is the size of the smallest allocated object.	*/
--- 582,588 ----
  # else
  #       define ALIGNED_WORDS(n) ROUNDED_UP_WORDS(n)
  # endif
! # define SMALL_OBJ(bytes) ((bytes) <= (MAXOBJBYTES - EXTRA_BYTES))
  # define ADD_SLOP(bytes) ((bytes) + EXTRA_BYTES)
  # ifndef MIN_WORDS
      /* MIN_WORDS is the size of the smallest allocated object.	*/
*************** extern GC_warn_proc GC_current_warn_proc
*** 615,620 ****
--- 619,628 ----
  #     define LOG_PHT_ENTRIES  16 /* Collisions are likely if heap grows	*/
  				 /* to more than 64K hblks >= 256MB.	*/
  				 /* Each hash table occupies 8K bytes.  */
+ 				 /* Even for somewhat smaller heaps, 	*/
+ 				 /* say half that, collisions may be an	*/
+ 				 /* issue because we blacklist 		*/
+ 				 /* addresses outside the heap.		*/
  #   endif
  # endif
  # define PHT_ENTRIES ((word)1 << LOG_PHT_ENTRIES)
*************** struct _GC_arrays {
*** 934,944 ****
    	char _valid_offsets[VALID_OFFSET_SZ];
  				/* GC_valid_offsets[i] == TRUE ==> i 	*/
  				/* is registered as a displacement.	*/
- #	define OFFSET_VALID(displ) \
- 	  (GC_all_interior_pointers || GC_valid_offsets[displ])
    	char _modws_valid_offsets[sizeof(word)];
  				/* GC_valid_offsets[i] ==>		  */
  				/* GC_modws_valid_offsets[i%sizeof(word)] */
  # ifdef STUBBORN_ALLOC
      page_hash_table _changed_pages;
          /* Stubborn object pages that were changes since last call to	*/
--- 942,952 ----
    	char _valid_offsets[VALID_OFFSET_SZ];
  				/* GC_valid_offsets[i] == TRUE ==> i 	*/
  				/* is registered as a displacement.	*/
    	char _modws_valid_offsets[sizeof(word)];
  				/* GC_valid_offsets[i] ==>		  */
  				/* GC_modws_valid_offsets[i%sizeof(word)] */
+ #   define OFFSET_VALID(displ) \
+ 	  (GC_all_interior_pointers || GC_valid_offsets[displ])
  # ifdef STUBBORN_ALLOC
      page_hash_table _changed_pages;
          /* Stubborn object pages that were changes since last call to	*/
*************** struct _GC_arrays {
*** 966,972 ****
  #   endif
  # else
  #   ifdef SMALL_CONFIG
! #     define MAX_HEAP_SECTS 128		/* Roughly 1GB			*/
  #   else
  #     define MAX_HEAP_SECTS 384		/* Roughly 3GB			*/
  #   endif
--- 974,980 ----
  #   endif
  # else
  #   ifdef SMALL_CONFIG
! #     define MAX_HEAP_SECTS 128		/* Roughly 256MB (128*2048*1K)	*/
  #   else
  #     define MAX_HEAP_SECTS 384		/* Roughly 3GB			*/
  #   endif
*************** GC_bool GC_is_tmp_root GC_PROTO((ptr_t p
*** 1436,1441 ****
--- 1444,1450 ----
  # endif
  void GC_register_dynamic_libraries GC_PROTO((void));
    		/* Add dynamic library data sections to the root set. */
+ 
  GC_bool GC_register_main_static_data GC_PROTO((void));
  		/* We need to register the main data segment.  Returns	*/
  		/* TRUE unless this is done implicitly as part of	*/
*************** void GC_collect_a_little_inner GC_PROTO(
*** 1610,1616 ****
    				/* collection work, if appropriate.	*/
    				/* A unit is an amount appropriate for  */
    				/* HBLKSIZE bytes of allocation.	*/
! ptr_t GC_generic_malloc GC_PROTO((word lb, int k));
    				/* Allocate an object of the given	*/
    				/* kind.  By default, there are only	*/
    				/* a few kinds: composite(pointerfree), */
--- 1619,1625 ----
    				/* collection work, if appropriate.	*/
    				/* A unit is an amount appropriate for  */
    				/* HBLKSIZE bytes of allocation.	*/
! /* ptr_t GC_generic_malloc GC_PROTO((word lb, int k)); */
    				/* Allocate an object of the given	*/
    				/* kind.  By default, there are only	*/
    				/* a few kinds: composite(pointerfree), */
*************** ptr_t GC_generic_malloc GC_PROTO((word l
*** 1620,1631 ****
--- 1629,1645 ----
  				/* internals to add more, e.g. to	*/
  				/* communicate object layout info	*/
  				/* to the collector.			*/
+ 				/* The actual decl is in gc_mark.h.	*/
  ptr_t GC_generic_malloc_ignore_off_page GC_PROTO((size_t b, int k));
    				/* As above, but pointers past the 	*/
    				/* first page of the resulting object	*/
    				/* are ignored.				*/
  ptr_t GC_generic_malloc_inner GC_PROTO((word lb, int k));
    				/* Ditto, but I already hold lock, etc.	*/
+ ptr_t GC_generic_malloc_words_small_inner GC_PROTO((word lw, int k));
+ 				/* Analogous to the above, but assumes	*/
+ 				/* a small object size, and bypasses	*/
+ 				/* MERGE_SIZES mechanism.		*/
  ptr_t GC_generic_malloc_words_small GC_PROTO((size_t lw, int k));
    				/* As above, but size in units of words */
    				/* Bypasses MERGE_SIZES.  Assumes	*/
*************** extern GC_bool GC_print_stats;	/* Produc
*** 1717,1722 ****
--- 1731,1747 ----
  # define COND_DUMP
  #endif
  
+ #ifdef KEEP_BACK_PTRS
+   extern long GC_backtraces;
+   void GC_generate_random_backtrace_no_gc(void);
+ #endif
+ 
+ extern GC_bool GC_print_back_height;
+ 
+ #ifdef MAKE_BACK_GRAPH
+   void GC_print_back_graph_stats(void);
+ #endif
+ 
  /* Macros used for collector internal allocation.	*/
  /* These assume the collector lock is held.		*/
  #ifdef DBG_HDRS_ALL
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/gcconfig.h gcc-4.0.0/boehm-gc/include/private/gcconfig.h
*** gcc-3.4.3/boehm-gc/include/private/gcconfig.h	Wed Apr 21 15:17:48 2004
--- gcc-4.0.0/boehm-gc/include/private/gcconfig.h	Tue Apr 12 19:48:42 2005
***************
*** 2,8 ****
   * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
   * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
   * Copyright (c) 1996 by Silicon Graphics.  All rights reserved.
!  * Copyright (c) 2000 by Hewlett-Packard Company.  All rights reserved.
   *
   * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
   * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
--- 2,8 ----
   * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
   * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
   * Copyright (c) 1996 by Silicon Graphics.  All rights reserved.
!  * Copyright (c) 2000-2004 Hewlett-Packard Development Company, L.P.
   *
   * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
   * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
***************
*** 249,254 ****
--- 249,258 ----
  #    define SH
  #    define mach_type_known
  # endif
+ # if defined(LINUX) && defined(__m32r__)
+ #    define M32R
+ #    define mach_type_known
+ # endif
  # if defined(__alpha) || defined(__alpha__)
  #   define ALPHA
  #   if !defined(LINUX) && !defined(NETBSD) && !defined(OPENBSD) && !defined(FREEBSD)
***************
*** 307,312 ****
--- 311,320 ----
  #   define I386
  #   define mach_type_known
  # endif
+ # if defined(__NetBSD__) && defined(__x86_64__)
+ #    define X86_64
+ #    define mach_type_known
+ # endif
  # if defined(bsdi) && (defined(i386) || defined(__i386__))
  #    define I386
  #    define BSDI
***************
*** 347,352 ****
--- 355,365 ----
  #     define MSWIN32	/* or Win32s */
  #     define mach_type_known
  #   endif
+ #   if defined(_MSC_VER) && defined(_M_IA64)
+ #     define IA64
+ #     define MSWIN32	/* Really win64, but we don't treat 64-bit 	*/
+ 			/* variants as a differnt platform.		*/
+ #   endif
  # endif
  # if defined(__DJGPP__)
  #   define I386
***************
*** 588,594 ****
   * USE_GENERIC_PUSH_REGS the preferred approach for marking from registers.
   */
  # if defined(__GNUC__) && ((__GNUC__ >= 3) || \
! 			   (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
  #   define HAVE_BUILTIN_UNWIND_INIT
  # endif
  
--- 601,608 ----
   * USE_GENERIC_PUSH_REGS the preferred approach for marking from registers.
   */
  # if defined(__GNUC__) && ((__GNUC__ >= 3) || \
! 			   (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)) \
! 		       && !defined(__INTEL_COMPILER)
  #   define HAVE_BUILTIN_UNWIND_INIT
  # endif
  
***************
*** 599,606 ****
  #   ifdef OPENBSD
  #	define OS_TYPE "OPENBSD"
  #	define HEURISTIC2
! 	extern char etext[];
! #	define DATASTART ((ptr_t)(etext))
  #   endif
  #   ifdef NETBSD
  #	define OS_TYPE "NETBSD"
--- 613,626 ----
  #   ifdef OPENBSD
  #	define OS_TYPE "OPENBSD"
  #	define HEURISTIC2
! #	ifdef __ELF__
! #	  define DATASTART GC_data_start
! #	  define DYNAMIC_LOADING
! #	else
! 	  extern char etext[];
! #	  define DATASTART ((ptr_t)(etext))
! #       endif
! #       define USE_GENERIC_PUSH_REGS
  #   endif
  #   ifdef NETBSD
  #	define OS_TYPE "NETBSD"
***************
*** 612,624 ****
  	  extern char etext[];
  #	  define DATASTART ((ptr_t)(etext))
  #       endif
  #   endif
  #   ifdef LINUX
  #       define OS_TYPE "LINUX"
  #       define STACKBOTTOM ((ptr_t)0xf0000000)
- #	define USE_MMAP
  #       define USE_GENERIC_PUSH_REGS
! 		/* We never got around to the assembly version. */
  /* #       define MPROTECT_VDB - Reported to not work  9/17/01 */
  #       ifdef __ELF__
  #            define DYNAMIC_LOADING
--- 632,645 ----
  	  extern char etext[];
  #	  define DATASTART ((ptr_t)(etext))
  #       endif
+ #	define USE_GENERIC_PUSH_REGS
  #   endif
  #   ifdef LINUX
  #       define OS_TYPE "LINUX"
  #       define STACKBOTTOM ((ptr_t)0xf0000000)
  #       define USE_GENERIC_PUSH_REGS
! #	     define USE_MMAP
! 	      /* We never got around to the assembly version. */
  /* #       define MPROTECT_VDB - Reported to not work  9/17/01 */
  #       ifdef __ELF__
  #            define DYNAMIC_LOADING
***************
*** 925,934 ****
  
  # ifdef I386
  #   define MACH_TYPE "I386"
! #   define ALIGNMENT 4	/* Appears to hold for all "32 bit" compilers	*/
  			/* except Borland.  The -a4 option fixes 	*/
  			/* Borland.					*/
                          /* Ivan Demakov: For Watcom the option is -zp4. */
  #   ifndef SMALL_CONFIG
  #     define ALIGN_DOUBLE /* Not strictly necessary, but may give speed   */
  			  /* improvement on Pentiums.			  */
--- 946,962 ----
  
  # ifdef I386
  #   define MACH_TYPE "I386"
! #   if defined(__LP64__) || defined(_WIN64)
! #     define CPP_WORDSZ 64
! #     define ALIGNMENT 8
! #   else
! #     define CPP_WORDSZ 32
! #     define ALIGNMENT 4
! 			/* Appears to hold for all "32 bit" compilers	*/
  			/* except Borland.  The -a4 option fixes 	*/
  			/* Borland.					*/
                          /* Ivan Demakov: For Watcom the option is -zp4. */
+ #   endif
  #   ifndef SMALL_CONFIG
  #     define ALIGN_DOUBLE /* Not strictly necessary, but may give speed   */
  			  /* improvement on Pentiums.			  */
***************
*** 1042,1048 ****
  	    /* possibly because Linux threads is itself a malloc client */
  	    /* and can't deal with the signals.				*/
  #	endif
! #	define HEAP_START 0x1000
  		/* This encourages mmap to give us low addresses,	*/
  		/* thus allowing the heap to grow to ~3GB		*/
  #       ifdef __ELF__
--- 1070,1076 ----
  	    /* possibly because Linux threads is itself a malloc client */
  	    /* and can't deal with the signals.				*/
  #	endif
! #	define HEAP_START (ptr_t)0x1000
  		/* This encourages mmap to give us low addresses,	*/
  		/* thus allowing the heap to grow to ~3GB		*/
  #       ifdef __ELF__
***************
*** 1073,1078 ****
--- 1101,1108 ----
  #            define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
  #       endif
  #	ifdef USE_I686_PREFETCH
+ 	  /* FIXME: Thus should use __builtin_prefetch, but we'll leave that	*/
+ 	  /* for the next rtelease.						*/
  #	  define PREFETCH(x) \
  	    __asm__ __volatile__ ("	prefetchnta	%0": : "m"(*(char *)(x)))
  	    /* Empirically prefetcht0 is much more effective at reducing	*/
***************
*** 1514,1520 ****
  #   endif
  #   ifdef LINUX
  #       define OS_TYPE "LINUX"
! #       define STACKBOTTOM ((ptr_t) 0x120000000)
  #       ifdef __ELF__
  #	  define SEARCH_FOR_DATA_START
  #         define DYNAMIC_LOADING
--- 1544,1550 ----
  #   endif
  #   ifdef LINUX
  #       define OS_TYPE "LINUX"
! #       define LINUX_STACKBOTTOM
  #       ifdef __ELF__
  #	  define SEARCH_FOR_DATA_START
  #         define DYNAMIC_LOADING
***************
*** 1562,1567 ****
--- 1592,1598 ----
      	/* first putenv call.						*/
  	extern char ** environ;
  #       define STACKBOTTOM ((ptr_t)environ)
+ #       define HPUX_STACKBOTTOM
  #       define DYNAMIC_LOADING
  #       include <unistd.h>
  #       define GETPAGESIZE() sysconf(_SC_PAGE_SIZE)
***************
*** 1571,1579 ****
  	/* address minus one page.					*/
  #	define BACKING_STORE_DISPLACEMENT 0x1000000
  #	define BACKING_STORE_ALIGNMENT 0x1000
! #       define BACKING_STORE_BASE \
! 	  (ptr_t)(((word)GC_stackbottom - BACKING_STORE_DISPLACEMENT - 1) \
! 			& ~(BACKING_STORE_ALIGNMENT - 1))
  #   endif
  #   ifdef LINUX
  #   	define CPP_WORDSZ 64
--- 1602,1610 ----
  	/* address minus one page.					*/
  #	define BACKING_STORE_DISPLACEMENT 0x1000000
  #	define BACKING_STORE_ALIGNMENT 0x1000
! 	extern ptr_t GC_register_stackbottom;
! #	define BACKING_STORE_BASE GC_register_stackbottom
! 	/* Known to be wrong for recent HP/UX versions!!!	*/
  #   endif
  #   ifdef LINUX
  #   	define CPP_WORDSZ 64
***************
*** 1591,1598 ****
  	/* constants:						*/
  #       define BACKING_STORE_ALIGNMENT 0x100000
  #       define BACKING_STORE_DISPLACEMENT 0x80000000
! 	extern char * GC_register_stackbottom;
! #	define BACKING_STORE_BASE ((ptr_t)GC_register_stackbottom)
  #	define SEARCH_FOR_DATA_START
  #	ifdef __GNUC__
  #         define DYNAMIC_LOADING
--- 1622,1629 ----
  	/* constants:						*/
  #       define BACKING_STORE_ALIGNMENT 0x100000
  #       define BACKING_STORE_DISPLACEMENT 0x80000000
! 	extern ptr_t GC_register_stackbottom;
! #	define BACKING_STORE_BASE GC_register_stackbottom
  #	define SEARCH_FOR_DATA_START
  #	ifdef __GNUC__
  #         define DYNAMIC_LOADING
***************
*** 1606,1619 ****
  	extern int _end[];
  #	define DATAEND (_end)
  #       ifdef __GNUC__
! #	  define PREFETCH(x) \
! 	    __asm__ ("	lfetch	[%0]": : "r"((void *)(x)))
! #	  define PREFETCH_FOR_WRITE(x) \
! 	    __asm__ ("	lfetch.excl	[%0]": : "r"((void *)(x)))
! #	  define CLEAR_DOUBLE(x) \
! 	    __asm__ ("	stf.spill	[%0]=f0": : "r"((void *)(x)))
  #       endif
  #   endif
  # endif
  
  # ifdef M88K
--- 1637,1673 ----
  	extern int _end[];
  #	define DATAEND (_end)
  #       ifdef __GNUC__
! #	  ifndef __INTEL_COMPILER
! #	    define PREFETCH(x) \
! 	      __asm__ ("	lfetch	[%0]": : "r"(x))
! #	    define PREFETCH_FOR_WRITE(x) \
! 	      __asm__ ("	lfetch.excl	[%0]": : "r"(x))
! #	    define CLEAR_DOUBLE(x) \
! 	      __asm__ ("	stf.spill	[%0]=f0": : "r"((void *)(x)))
! #	  else
! #           include <ia64intrin.h>
! #	    define PREFETCH(x) \
! 	      __lfetch(__lfhint_none, (x))
! #	    define PREFETCH_FOR_WRITE(x) \
! 	      __lfetch(__lfhint_nta,  (x))
! #	    define CLEAR_DOUBLE(x) \
! 	      __stf_spill((void *)(x), 0)
! #	  endif // __INTEL_COMPILER
  #       endif
  #   endif
+ #   ifdef MSWIN32
+       /* FIXME: This is a very partial guess.  There is no port, yet.	*/
+ #     define OS_TYPE "MSWIN32"
+ 		/* STACKBOTTOM and DATASTART are handled specially in 	*/
+ 		/* os_dep.c.						*/
+ #     define DATAEND  /* not needed */
+ #     if defined(_WIN64)
+ #       define CPP_WORDSZ 64
+ #     else
+ #       define CPP_WORDSZ 32   /* Is this possible?	*/
+ #     endif
+ #     define ALIGNMENT 8
+ #   endif
  # endif
  
  # ifdef M88K
***************
*** 1768,1773 ****
--- 1822,1844 ----
  #   define DATAEND /* not needed */
  # endif
  
+ # ifdef M32R
+ #   define CPP_WORDSZ 32
+ #   define MACH_TYPE "M32R"
+ #   define ALIGNMENT 4
+ #   ifdef LINUX
+ #     define OS_TYPE "LINUX"
+ #     define LINUX_STACKBOTTOM
+ #     undef STACK_GRAN
+ #     define STACK_GRAN 0x10000000
+ #     define USE_GENERIC_PUSH_REGS
+ #     define DYNAMIC_LOADING
+ #     define SEARCH_FOR_DATA_START
+       extern int _end[];
+ #     define DATAEND (_end)
+ #   endif
+ # endif
+ 
  # ifdef X86_64
  #   define MACH_TYPE "X86_64"
  #   define ALIGNMENT 8
***************
*** 1801,1813 ****
  	     extern int etext[];
  #            define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
  #       endif
! #	if defined(__GNUC__) && __GNUC__ >= 3
! #	    define PREFETCH(x) __builtin_prefetch ((x), 0, 0)
! #	    define PREFETCH_FOR_WRITE(x) __builtin_prefetch ((x), 1)
  #	endif
  #   endif
  # endif
  
  #if defined(LINUX) && defined(REDIRECT_MALLOC)
      /* Rld appears to allocate some memory with its own allocator, and	*/
      /* some through malloc, which might be redirected.  To make this	*/
--- 1872,1899 ----
  	     extern int etext[];
  #            define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
  #       endif
! #       if defined(__GNUC__) && __GNUC >= 3
! #	    define PREFETCH(x) __builtin_prefetch((x), 0, 0)
! #	    define PREFETCH_FOR_WRITE(x) __builtin_prefetch((x), 1)
  #	endif
  #   endif
+ #   ifdef NETBSD
+ #	define OS_TYPE "NETBSD"
+ #	ifdef __ELF__
+ #	    define DYNAMIC_LOADING
+ #	endif
+ #	define HEURISTIC2
+ 	extern char etext[];
+ #	define SEARCH_FOR_DATA_START
+ #   endif
  # endif
  
+ #if defined(LINUX) && defined(USE_MMAP)
+     /* The kernel may do a somewhat better job merging mappings etc.	*/
+     /* with anonymous mappings.						*/
+ #   define USE_MMAP_ANON
+ #endif
+ 
  #if defined(LINUX) && defined(REDIRECT_MALLOC)
      /* Rld appears to allocate some memory with its own allocator, and	*/
      /* some through malloc, which might be redirected.  To make this	*/
***************
*** 1862,1870 ****
  #   define SUNOS5SIGS
  # endif
  
! # if defined(SVR4) || defined(LINUX) || defined(IRIX) || defined(HPUX) \
  	    || defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \
! 	    || defined(DGUX) || defined(BSD) \
  	    || defined(_AIX) || defined(DARWIN) || defined(OSF1)
  #   define UNIX_LIKE   /* Basic Unix-like system calls work.	*/
  # endif
--- 1948,1960 ----
  #   define SUNOS5SIGS
  # endif
  
! # if defined(FREEBSD) && (__FreeBSD__ >= 4)
! #   define SUNOS5SIGS
! # endif
! 
! # if defined(SVR4) || defined(LINUX) || defined(IRIX5) || defined(HPUX) \
  	    || defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \
! 	    || defined(DGUX) || defined(BSD) || defined(SUNOS4) \
  	    || defined(_AIX) || defined(DARWIN) || defined(OSF1)
  #   define UNIX_LIKE   /* Basic Unix-like system calls work.	*/
  # endif
***************
*** 1980,1985 ****
--- 2070,2079 ----
  #	define USE_GENERIC_PUSH_REGS
  # endif
  
+ # if defined(MSWINCE)
+ #   define NO_GETENV
+ # endif
+ 
  # if defined(SPARC)
  #   define ASM_CLEAR_CODE	/* Stack clearing is crucial, and we 	*/
  				/* include assembly code to do it well.	*/
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/pthread_support.h gcc-4.0.0/boehm-gc/include/private/pthread_support.h
*** gcc-3.4.3/boehm-gc/include/private/pthread_support.h	Mon Jul 28 03:46:18 2003
--- gcc-4.0.0/boehm-gc/include/private/pthread_support.h	Fri Aug 13 23:05:35 2004
*************** GC_thread GC_lookup_thread(pthread_t id)
*** 93,97 ****
--- 93,102 ----
  
  void GC_stop_init();
  
+ extern GC_bool GC_in_thread_creation;
+ 	/* We may currently be in thread creation or destruction.	*/
+ 	/* Only set to TRUE while allocation lock is held.		*/
+ 	/* When set, it is OK to run GC from unknown thread.		*/
+ 
  #endif /* GC_PTHREADS && !GC_SOLARIS_THREADS.... etc */
  #endif /* GC_PTHREAD_SUPPORT_H */
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/solaris_threads.h gcc-4.0.0/boehm-gc/include/private/solaris_threads.h
*** gcc-3.4.3/boehm-gc/include/private/solaris_threads.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/private/solaris_threads.h	Fri Aug 13 23:05:35 2004
***************
*** 30,35 ****
--- 30,37 ----
    extern size_t GC_min_stack_sz;
    extern size_t GC_page_sz;
    extern void GC_thr_init(void);
+   extern ptr_t GC_stack_alloc(size_t * stack_size);
+   extern void GC_stack_free(ptr_t stack, size_t size);
  
  # endif /* GC_SOLARIS_THREADS */
  
diff -Nrcpad gcc-3.4.3/boehm-gc/include/private/specific.h gcc-4.0.0/boehm-gc/include/private/specific.h
*** gcc-3.4.3/boehm-gc/include/private/specific.h	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/include/private/specific.h	Fri Aug 13 23:05:35 2004
*************** static __inline__ void * PREFIXED(getspe
*** 85,91 ****
      unsigned hash_val = CACHE_HASH(qtid);
      tse * volatile * entry_ptr = key -> cache + hash_val;
      tse * entry = *entry_ptr;   /* Must be loaded only once.	*/
!    if (EXPECT(entry -> qtid == qtid, 1)) {
        GC_ASSERT(entry -> thread == pthread_self());
        return entry -> value;
      }
--- 85,91 ----
      unsigned hash_val = CACHE_HASH(qtid);
      tse * volatile * entry_ptr = key -> cache + hash_val;
      tse * entry = *entry_ptr;   /* Must be loaded only once.	*/
!     if (EXPECT(entry -> qtid == qtid, 1)) {
        GC_ASSERT(entry -> thread == pthread_self());
        return entry -> value;
      }
diff -Nrcpad gcc-3.4.3/boehm-gc/install-sh gcc-4.0.0/boehm-gc/install-sh
*** gcc-3.4.3/boehm-gc/install-sh	Fri Aug 17 18:39:16 2001
--- gcc-4.0.0/boehm-gc/install-sh	Thu Jan  1 00:00:00 1970
***************
*** 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
- 	true
- fi
- 
- if [ x"$dir_arg" != x ]; then
- 	dst=$src
- 	src=""
- 	
- 	if [ -d $dst ]; then
- 		instcmd=:
- 		chmodcmd=""
- 	else
- 		instcmd=mkdir
- 	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 -o -d $src ]
- 	then
- 		true
- 	else
- 		echo "install:  $src does not exist"
- 		exit 1
- 	fi
- 	
- 	if [ x"$dst" = x ]
- 	then
- 		echo "install:	no destination specified"
- 		exit 1
- 	else
- 		true
- 	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
- 		true
- 	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
- 		true
- 	fi
- 
- 	pathcomp="${pathcomp}/"
- done
- fi
- 
- if [ x"$dir_arg" != x ]
- then
- 	$doit $instcmd $dst &&
- 
- 	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- 	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- 	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- 	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; 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
- 		true
- 	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 true;fi &&
- 	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- 	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- 	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
- 
- # Now rename the file to the real destination.
- 
- 	$doit $rmcmd -f $dstdir/$dstfile &&
- 	$doit $mvcmd $dsttmp $dstdir/$dstfile 
- 
- fi &&
- 
- 
- exit 0
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/libtool.m4 gcc-4.0.0/boehm-gc/libtool.m4
*** gcc-3.4.3/boehm-gc/libtool.m4	Fri Aug 17 18:39:16 2001
--- gcc-4.0.0/boehm-gc/libtool.m4	Thu Jan  1 00:00:00 1970
***************
*** 1,435 ****
- ## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*-
- ## Copyright (C) 1996-1999 Free Software Foundation, Inc.
- ## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
- ##
- ## 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 02111-1307, 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.
- 
- # serial 40 AC_PROG_LIBTOOL
- AC_DEFUN(AC_PROG_LIBTOOL,
- [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
- 
- # Save cache, so that ltconfig can load it
- AC_CACHE_SAVE
- 
- # Actually configure libtool.  ac_aux_dir is where install-sh is found.
- CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
- LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
- LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
- DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
- ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
- $libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
- || AC_MSG_ERROR([libtool configure failed])
- 
- # Reload cache, that may have been modified by ltconfig
- AC_CACHE_LOAD
- 
- # This can be used to rebuild libtool when needed
- LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
- 
- # Always use our own libtool.
- LIBTOOL='$(SHELL) $(top_builddir)/libtool'
- AC_SUBST(LIBTOOL)dnl
- 
- # Redirect the config.log output again, so that the ltconfig log is not
- # clobbered by the next message.
- exec 5>>./config.log
- ])
- 
- AC_DEFUN(AC_LIBTOOL_SETUP,
- [AC_PREREQ(2.13)dnl
- AC_REQUIRE([AC_ENABLE_SHARED])dnl
- AC_REQUIRE([AC_ENABLE_STATIC])dnl
- AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
- AC_REQUIRE([AC_CANONICAL_BUILD])dnl
- AC_REQUIRE([AC_PROG_RANLIB])dnl
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_PROG_LD])dnl
- AC_REQUIRE([AC_PROG_NM])dnl
- AC_REQUIRE([AC_PROG_LN_S])dnl
- dnl
- 
- case "$target" in
- NONE) lt_target="$host" ;;
- *) lt_target="$target" ;;
- esac
- 
- # Check for any special flags to pass to ltconfig.
- #
- # the following will cause an existing older ltconfig to fail, so
- # we ignore this at the expense of the cache file... Checking this 
- # will just take longer ... bummer!
- #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 "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
- test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
- ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
- [libtool_flags="$libtool_flags --enable-dlopen"])
- ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
- [libtool_flags="$libtool_flags --enable-win32-dll"])
- AC_ARG_ENABLE(libtool-lock,
-   [  --disable-libtool-lock  avoid locking (might break parallel builds)])
- test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
- test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
- 
- # Some flags need to be propagated to the compiler or linker for good
- # libtool support.
- case "$lt_target" in
- *-*-irix6*)
-   # Find out which ABI we are using.
-   echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-   if AC_TRY_EVAL(ac_compile); then
-     case "`/usr/bin/file conftest.o`" in
-     *32-bit*)
-       LD="${LD-ld} -32"
-       ;;
-     *N32*)
-       LD="${LD-ld} -n32"
-       ;;
-     *64-bit*)
-       LD="${LD-ld} -64"
-       ;;
-     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"
-   AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-     [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])])
-   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
-   ;;
- 
- ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
- [*-*-cygwin* | *-*-mingw*)
-   AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-   AC_CHECK_TOOL(AS, as, false)
-   AC_CHECK_TOOL(OBJDUMP, objdump, false)
-   ;;
- ])
- esac
- ])
- 
- # AC_LIBTOOL_DLOPEN - enable checks for dlopen support
- AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
- 
- # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
- AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
- 
- # AC_ENABLE_SHARED - implement the --enable-shared flag
- # Usage: AC_ENABLE_SHARED[(DEFAULT)]
- #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
- #   `yes'.
- AC_DEFUN(AC_ENABLE_SHARED, [dnl
- define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
- AC_ARG_ENABLE(shared,
- changequote(<<, >>)dnl
- <<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
- changequote([, ])dnl
- [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],
- enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
- ])
- 
- # AC_DISABLE_SHARED - set the default shared flag to --disable-shared
- AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_ENABLE_SHARED(no)])
- 
- # AC_ENABLE_STATIC - implement the --enable-static flag
- # Usage: AC_ENABLE_STATIC[(DEFAULT)]
- #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
- #   `yes'.
- AC_DEFUN(AC_ENABLE_STATIC, [dnl
- define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
- AC_ARG_ENABLE(static,
- changequote(<<, >>)dnl
- <<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
- changequote([, ])dnl
- [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],
- enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
- ])
- 
- # AC_DISABLE_STATIC - set the default static flag to --disable-static
- AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_ENABLE_STATIC(no)])
- 
- 
- # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
- # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
- #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
- #   `yes'.
- AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
- define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
- AC_ARG_ENABLE(fast-install,
- changequote(<<, >>)dnl
- <<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
- changequote([, ])dnl
- [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],
- enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
- ])
- 
- # AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
- AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_ENABLE_FAST_INSTALL(no)])
- 
- # AC_PROG_LD - find the path to the GNU or non-GNU linker
- AC_DEFUN(AC_PROG_LD,
- [AC_ARG_WITH(gnu-ld,
- [  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
- test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
- AC_REQUIRE([AC_CANONICAL_BUILD])dnl
- ac_prog=ld
- if test "$ac_cv_prog_gcc" = yes; then
-   # Check if gcc -print-prog-name=ld gives a path.
-   AC_MSG_CHECKING([for ld used by GCC])
-   ac_prog=`($CC -print-prog-name=ld) 2>&5`
-   case "$ac_prog" in
-     # Accept absolute paths.
- changequote(,)dnl
-     [\\/]* | [A-Za-z]:[\\/]*)
-       re_direlt='/[^/][^/]*/\.\./'
- changequote([,])dnl
-       # 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
-   AC_MSG_CHECKING([for GNU ld])
- else
-   AC_MSG_CHECKING([for non-GNU ld])
- fi
- AC_CACHE_VAL(ac_cv_path_LD,
- [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
-       ac_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 "$ac_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
-   ac_cv_path_LD="$LD" # Let the user override the test with a path.
- fi])
- LD="$ac_cv_path_LD"
- if test -n "$LD"; then
-   AC_MSG_RESULT($LD)
- else
-   AC_MSG_RESULT(no)
- fi
- test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
- AC_PROG_LD_GNU
- ])
- 
- AC_DEFUN(AC_PROG_LD_GNU,
- [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
- [# 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
-   ac_cv_prog_gnu_ld=yes
- else
-   ac_cv_prog_gnu_ld=no
- fi])
- ])
- 
- # AC_PROG_NM - find the path to a BSD-compatible name lister
- AC_DEFUN(AC_PROG_NM,
- [AC_MSG_CHECKING([for BSD-compatible nm])
- AC_CACHE_VAL(ac_cv_path_NM,
- [if test -n "$NM"; then
-   # Let the user override the test.
-   ac_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=.
-     if test -f $ac_dir/nm || test -f $ac_dir/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
-       if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- 	ac_cv_path_NM="$ac_dir/nm -B"
- 	break
-       elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- 	ac_cv_path_NM="$ac_dir/nm -p"
- 	break
-       else
- 	ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/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 "$ac_cv_path_NM" && ac_cv_path_NM=nm
- fi])
- NM="$ac_cv_path_NM"
- AC_MSG_RESULT([$NM])
- ])
- 
- # AC_CHECK_LIBM - check for math library
- AC_DEFUN(AC_CHECK_LIBM,
- [AC_REQUIRE([AC_CANONICAL_HOST])dnl
- LIBM=
- case "$lt_target" in
- *-*-beos* | *-*-cygwin*)
-   # These system don't have libm
-   ;;
- *-ncr-sysv4.3*)
-   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-   AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
-   ;;
- *)
-   AC_CHECK_LIB(m, main, LIBM="-lm")
-   ;;
- esac
- ])
- 
- # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
- # the libltdl convenience library, adds --enable-ltdl-convenience to
- # the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
- # is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
- # to be `${top_builddir}/libltdl'.  Make sure you start DIR with
- # '${top_builddir}/' (note the single quotes!) if your package is not
- # flat, and, if you're not using automake, define top_builddir as
- # appropriate in the Makefiles.
- AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-   case "$enable_ltdl_convenience" in
-   no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
-   "") enable_ltdl_convenience=yes
-       ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
-   esac
-   LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
-   INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
- ])
- 
- # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
- # the libltdl installable library, and adds --enable-ltdl-install to
- # the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
- # is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
- # to be `${top_builddir}/libltdl'.  Make sure you start DIR with
- # '${top_builddir}/' (note the single quotes!) if your package is not
- # flat, and, if you're not using automake, define top_builddir as
- # appropriate in the Makefiles.
- # In the future, this macro may have to be called after AC_PROG_LIBTOOL.
- AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-   AC_CHECK_LIB(ltdl, main,
-   [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
-   [if test x"$enable_ltdl_install" = xno; then
-      AC_MSG_WARN([libltdl not installed, but installation disabled])
-    else
-      enable_ltdl_install=yes
-    fi
-   ])
-   if test x"$enable_ltdl_install" = x"yes"; then
-     ac_configure_args="$ac_configure_args --enable-ltdl-install"
-     LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
-     INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
-   else
-     ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
-     LIBLTDL="-lltdl"
-     INCLTDL=
-   fi
- ])
- 
- dnl old names
- AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl
- AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl
- AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl
- AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
- AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
- AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
- AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
- 
- dnl This is just to silence aclocal about the macro not being used
- ifelse([AC_DISABLE_FAST_INSTALL])dnl
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/ltconfig gcc-4.0.0/boehm-gc/ltconfig
*** gcc-3.4.3/boehm-gc/ltconfig	Wed Nov 20 15:59:06 2002
--- gcc-4.0.0/boehm-gc/ltconfig	Thu Jan  1 00:00:00 1970
***************
*** 1,3078 ****
- #! /bin/sh
- 
- # ltconfig - Create a system-specific libtool.
- # Copyright (C) 1996-1999 Free Software Foundation, Inc.
- # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
- #
- # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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.
- 
- # A lot of this script is taken from autoconf-2.10.
- 
- # Check that we are running under the correct shell.
- SHELL=${CONFIG_SHELL-/bin/sh}
- echo=echo
- if test "X$1" = X--no-reexec; then
-   # Discard the --no-reexec flag, and continue.
-   shift
- elif test "X$1" = X--fallback-echo; then
-   # Avoid inline document here, it may be left over
-   :
- elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-   # Yippee, $echo works!
-   :
- else
-   # Restart under the correct shell.
-   exec "$SHELL" "$0" --no-reexec ${1+"$@"}
- fi
- 
- if test "X$1" = X--fallback-echo; then
-   # used as fallback echo
-   shift
-   cat <<EOF
- $*
- EOF
-   exit 0
- fi
- 
- # Find the correct PATH separator.  Usually this is `:', but
- # DJGPP uses `;' like DOS.
- if test "X${PATH_SEPARATOR+set}" != Xset; then
-   UNAME=${UNAME-`uname 2>/dev/null`}
-   case X$UNAME in
-     *-DOS) PATH_SEPARATOR=';' ;;
-     *)     PATH_SEPARATOR=':' ;;
-   esac
- fi
- 
- # The HP-UX ksh and POSIX shell print the target directory to stdout
- # if CDPATH is set.
- if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
- 
- if test "X${echo_test_string+set}" != Xset; then
-   # find a string as large as possible, as long as the shell can cope with it
-   for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-     # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-     if (echo_test_string="`eval $cmd`") 2>/dev/null &&
-        echo_test_string="`eval $cmd`" &&
-        (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
-       break
-     fi
-   done
- fi
- 
- if test "X`($echo '\t') 2>/dev/null`" != 'X\t' ||
-    test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
-   # The Solaris, AIX, and Digital Unix default echo programs unquote
-   # backslashes.  This makes it impossible to quote backslashes using
-   #   echo "$something" | sed 's/\\/\\\\/g'
-   #
-   # So, first we look for a working echo in the user's PATH.
- 
-   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-   for dir in $PATH /usr/ucb; do
-     if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-        test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-        test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-       echo="$dir/echo"
-       break
-     fi
-   done
-   IFS="$save_ifs"
- 
-   if test "X$echo" = Xecho; then
-     # We didn't find a better echo, so look for alternatives.
-     if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-        test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-       # This shell has a builtin print -r that does the trick.
-       echo='print -r'
-     elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- 	 test "X$CONFIG_SHELL" != X/bin/ksh; then
-       # If we have ksh, try running ltconfig again with it.
-       ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
-       export ORIGINAL_CONFIG_SHELL
-       CONFIG_SHELL=/bin/ksh
-       export CONFIG_SHELL
-       exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
-     else
-       # Try using printf.
-       echo='printf "%s\n"'
-       if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- 	 test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- 	# Cool, printf works
- 	:
-       elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
- 	   test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- 	CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
- 	export CONFIG_SHELL
- 	SHELL="$CONFIG_SHELL"
- 	export SHELL
- 	echo="$CONFIG_SHELL $0 --fallback-echo"
-       elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
- 	   test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- 	echo="$CONFIG_SHELL $0 --fallback-echo"
-       else
- 	# maybe with a smaller string...
- 	prev=:
- 
- 	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
- 	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
- 	    break
- 	  fi
- 	  prev="$cmd"
- 	done
- 
- 	if test "$prev" != 'sed 50q "$0"'; then
- 	  echo_test_string=`eval $prev`
- 	  export echo_test_string
- 	  exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"}
- 	else
- 	  # Oops.  We lost completely, so just stick with echo.
- 	  echo=echo
- 	fi
-       fi
-     fi
-   fi
- fi
- 
- # Sed substitution that helps us do robust quoting.  It backslashifies
- # metacharacters that are still active within double-quoted strings.
- Xsed='sed -e s/^X//'
- sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
- 
- # Same as above, but do not quote variable references.
- double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
- 
- # Sed substitution to delay expansion of an escaped shell variable in a
- # double_quote_subst'ed string.
- delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
- 
- # The name of this program.
- progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
- 
- # Constants:
- PROGRAM=ltconfig
- PACKAGE=libtool
- VERSION=1.3.4
- TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
- ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
- ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
- rm="rm -f"
- 
- help="Try \`$progname --help' for more information."
- 
- # Global variables:
- default_ofile=libtool
- can_build_shared=yes
- enable_shared=yes
- # All known linkers require a `.a' archive for static linking (except M$VC,
- # which needs '.lib').
- enable_static=yes
- enable_fast_install=yes
- enable_dlopen=unknown
- enable_win32_dll=no
- ltmain=
- silent=
- srcdir=
- ac_config_guess=
- ac_config_sub=
- host=
- nonopt=
- ofile="$default_ofile"
- verify_host=yes
- with_gcc=no
- with_gnu_ld=no
- need_locks=yes
- ac_ext=c
- objext=o
- libext=a
- exeext=
- cache_file=
- 
- old_AR="$AR"
- old_CC="$CC"
- old_CFLAGS="$CFLAGS"
- old_CPPFLAGS="$CPPFLAGS"
- old_LDFLAGS="$LDFLAGS"
- old_LD="$LD"
- old_LN_S="$LN_S"
- old_LIBS="$LIBS"
- old_NM="$NM"
- old_RANLIB="$RANLIB"
- old_DLLTOOL="$DLLTOOL"
- old_OBJDUMP="$OBJDUMP"
- old_AS="$AS"
- 
- # Parse the command line options.
- args=
- prev=
- for option
- do
-   case "$option" in
-   -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-   *) optarg= ;;
-   esac
- 
-   # If the previous option needs an argument, assign it.
-   if test -n "$prev"; then
-     eval "$prev=\$option"
-     prev=
-     continue
-   fi
- 
-   case "$option" in
-   --help) cat <<EOM
- Usage: $progname [OPTION]... [HOST [LTMAIN]]
- 
- Generate a system-specific libtool script.
- 
-     --debug                enable verbose shell tracing
-     --disable-shared       do not build shared libraries
-     --disable-static       do not build static libraries
-     --disable-fast-install do not optimize for fast installation
-     --enable-dlopen        enable dlopen support
-     --enable-win32-dll     enable building dlls on win32 hosts
-     --help                 display this help and exit
-     --no-verify            do not verify that HOST is a valid host type
- -o, --output=FILE          specify the output file [default=$default_ofile]
-     --quiet                same as \`--silent'
-     --silent               do not print informational messages
-     --srcdir=DIR           find \`config.guess' in DIR
-     --version              output version information and exit
-     --with-gcc             assume that the GNU C compiler will be used
-     --with-gnu-ld          assume that the C compiler uses the GNU linker
-     --disable-lock         disable file locking
-     --cache-file=FILE      configure cache file
- 
- LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
- that provides basic libtool functionality.
- 
- HOST is the canonical host system name [default=guessed].
- EOM
-   exit 0
-   ;;
- 
-   --debug)
-     echo "$progname: enabling shell trace mode"
-     set -x
-     ;;
- 
-   --disable-shared) enable_shared=no ;;
- 
-   --disable-static) enable_static=no ;;
- 
-   --disable-fast-install) enable_fast_install=no ;;
- 
-   --enable-dlopen) enable_dlopen=yes ;;
- 
-   --enable-win32-dll) enable_win32_dll=yes ;;
- 
-   --quiet | --silent) silent=yes ;;
- 
-   --srcdir) prev=srcdir ;;
-   --srcdir=*) srcdir="$optarg" ;;
- 
-   --no-verify) verify_host=no ;;
- 
-   --output | -o) prev=ofile ;;
-   --output=*) ofile="$optarg" ;;
- 
-   --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
- 
-   --with-gcc) with_gcc=yes ;;
-   --with-gnu-ld) with_gnu_ld=yes ;;
- 
-   --disable-lock) need_locks=no ;;
- 
-   --cache-file=*) cache_file="$optarg" ;;
- 
-   -*)
-     echo "$progname: unrecognized option \`$option'" 1>&2
-     echo "$help" 1>&2
-     exit 1
-     ;;
- 
-   *)
-     if test -z "$ltmain"; then
-       ltmain="$option"
-     elif test -z "$host"; then
- # This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
- #      if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
- #        echo "$progname: warning \`$option' is not a valid host type" 1>&2
- #      fi
-       host="$option"
-     else
-       echo "$progname: too many arguments" 1>&2
-       echo "$help" 1>&2
-       exit 1
-     fi ;;
-   esac
- done
- 
- if test -z "$ltmain"; then
-   echo "$progname: you must specify a LTMAIN file" 1>&2
-   echo "$help" 1>&2
-   exit 1
- fi
- 
- if test ! -f "$ltmain"; then
-   echo "$progname: \`$ltmain' does not exist" 1>&2
-   echo "$help" 1>&2
-   exit 1
- fi
- 
- # Quote any args containing shell metacharacters.
- ltconfig_args=
- for arg
- do
-   case "$arg" in
-   *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
-   ltconfig_args="$ltconfig_args '$arg'" ;;
-   *) ltconfig_args="$ltconfig_args $arg" ;;
-   esac
- done
- 
- # A relevant subset of AC_INIT.
- 
- # File descriptor usage:
- # 0 standard input
- # 1 file creation
- # 2 errors and warnings
- # 3 some systems may open it to /dev/tty
- # 4 used on the Kubota Titan
- # 5 compiler messages saved in config.log
- # 6 checking for... messages and results
- if test "$silent" = yes; then
-   exec 6>/dev/null
- else
-   exec 6>&1
- fi
- exec 5>>./config.log
- 
- # NLS nuisances.
- # Only set LANG and LC_ALL to C if already set.
- # These must not be set unconditionally because not all systems understand
- # e.g. LANG=C (notably SCO).
- if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
- if test "X${LANG+set}"   = Xset; then LANG=C;   export LANG;   fi
- 
- if test -n "$cache_file" && test -r "$cache_file"; then
-   echo "loading cache $cache_file within ltconfig"
-   . $cache_file
- fi
- 
- if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-     ac_n= ac_c='
- ' ac_t='	'
-   else
-     ac_n=-n ac_c= ac_t=
-   fi
- else
-   ac_n= ac_c='\c' ac_t=
- fi
- 
- if test -z "$srcdir"; then
-   # Assume the source directory is the same one as the path to LTMAIN.
-   srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
-   test "$srcdir" = "$ltmain" && srcdir=.
- fi
- 
- trap "$rm conftest*; exit 1" 1 2 15
- if test "$verify_host" = yes; then
-   # Check for config.guess and config.sub.
-   ac_aux_dir=
-   for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-     if test -f $ac_dir/config.guess; then
-       ac_aux_dir=$ac_dir
-       break
-     fi
-   done
-   if test -z "$ac_aux_dir"; then
-     echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
-     echo "$help" 1>&2
-     exit 1
-   fi
-   ac_config_guess=$ac_aux_dir/config.guess
-   ac_config_sub=$ac_aux_dir/config.sub
- 
-   # Make sure we can run config.sub.
-   if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
-   else
-     echo "$progname: cannot run $ac_config_sub" 1>&2
-     echo "$help" 1>&2
-     exit 1
-   fi
- 
-   echo $ac_n "checking host system type""... $ac_c" 1>&6
- 
-   host_alias=$host
-   case "$host_alias" in
-   "")
-     if host_alias=`$SHELL $ac_config_guess`; then :
-     else
-       echo "$progname: cannot guess host type; you must specify one" 1>&2
-       echo "$help" 1>&2
-       exit 1
-     fi ;;
-   esac
-   host=`$SHELL $ac_config_sub $host_alias`
-   echo "$ac_t$host" 1>&6
- 
-   # Make sure the host verified.
-   test -z "$host" && exit 1
- 
- elif test -z "$host"; then
-   echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
-   echo "$help" 1>&2
-   exit 1
- else
-   host_alias=$host
- fi
- 
- # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
- case "$host_os" in
- linux-gnu*) ;;
- linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
- esac
- 
- host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
- host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
- host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
- 
- case "$host_os" in
- aix3*)
-   # AIX sometimes has problems with the GCC collect2 program.  For some
-   # reason, if we set the COLLECT_NAMES environment variable, the problems
-   # vanish in a puff of smoke.
-   if test "X${COLLECT_NAMES+set}" != Xset; then
-     COLLECT_NAMES=
-     export COLLECT_NAMES
-   fi
-   ;;
- esac
- 
- # Determine commands to create old-style static archives.
- old_archive_cmds='$AR cru $oldlib$oldobjs'
- old_postinstall_cmds='chmod 644 $oldlib'
- old_postuninstall_cmds=
- 
- # Set a sane default for `AR'.
- test -z "$AR" && AR=ar
- 
- # Set a sane default for `OBJDUMP'.
- test -z "$OBJDUMP" && OBJDUMP=objdump
- 
- # If RANLIB is not set, then run the test.
- if test "${RANLIB+set}" != "set"; then
-   result=no
- 
-   echo $ac_n "checking for ranlib... $ac_c" 1>&6
-   IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-   for dir in $PATH; do
-     test -z "$dir" && dir=.
-     if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
-       RANLIB="ranlib"
-       result="ranlib"
-       break
-     fi
-   done
-   IFS="$save_ifs"
- 
-   echo "$ac_t$result" 1>&6
- fi
- 
- if test -n "$RANLIB"; then
-   old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-   old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
- fi
- 
- # Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
- test -z "$DLLTOOL" && DLLTOOL=dlltool
- test -z "$OBJDUMP" && OBJDUMP=objdump
- test -z "$AS" && AS=as
- 
- # Check to see if we are using GCC.
- if test "$with_gcc" != yes || test -z "$CC"; then
-   # If CC is not set, then try to find GCC or a usable CC.
-   if test -z "$CC"; then
-     echo $ac_n "checking for gcc... $ac_c" 1>&6
-     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-     for dir in $PATH; do
-       test -z "$dir" && dir=.
-       if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
- 	CC="gcc"
- 	break
-       fi
-     done
-     IFS="$save_ifs"
- 
-     if test -n "$CC"; then
-       echo "$ac_t$CC" 1>&6
-     else
-       echo "$ac_t"no 1>&6
-     fi
-   fi
- 
-   # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
-   if test -z "$CC"; then
-     echo $ac_n "checking for cc... $ac_c" 1>&6
-     IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-     cc_rejected=no
-     for dir in $PATH; do
-       test -z "$dir" && dir=.
-       if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
- 	if test "$dir/cc" = "/usr/ucb/cc"; then
- 	  cc_rejected=yes
- 	  continue
- 	fi
- 	CC="cc"
- 	break
-       fi
-     done
-     IFS="$save_ifs"
-     if test $cc_rejected = yes; then
-       # We found a bogon in the path, so make sure we never use it.
-       set dummy $CC
-       shift
-       if test $# -gt 0; then
- 	# We chose a different compiler from the bogus one.
- 	# However, it has the same name, so the bogon will be chosen
- 	# first if we set CC to just the name; use the full file name.
- 	shift
- 	set dummy "$dir/cc" "$@"
- 	shift
- 	CC="$@"
-       fi
-     fi
- 
-     if test -n "$CC"; then
-       echo "$ac_t$CC" 1>&6
-     else
-       echo "$ac_t"no 1>&6
-     fi
- 
-     if test -z "$CC"; then
-       echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
-       exit 1
-     fi
-   fi
- 
-   # Now see if the compiler is really GCC.
-   with_gcc=no
-   echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
-   echo "$progname:581: checking whether we are using GNU C" >&5
- 
-   $rm conftest.c
-   cat > conftest.c <<EOF
- #ifdef __GNUC__
-   yes;
- #endif
- EOF
-   if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-     with_gcc=yes
-   fi
-   $rm conftest.c
-   echo "$ac_t$with_gcc" 1>&6
- fi
- 
- # Allow CC to be a program name with arguments.
- set dummy $CC
- compiler="$2"
- 
- echo $ac_n "checking for object suffix... $ac_c" 1>&6
- $rm conftest*
- echo 'int i = 1;' > conftest.c
- echo "$progname:603: checking for object suffix" >& 5
- if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
-   # Append any warnings to the config.log.
-   cat conftest.err 1>&5
- 
-   for ac_file in conftest.*; do
-     case $ac_file in
-     *.c) ;;
-     *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
-     esac
-   done
- else
-   cat conftest.err 1>&5
-   echo "$progname: failed program was:" >&5
-   cat conftest.c >&5
- fi
- $rm conftest*
- echo "$ac_t$objext" 1>&6
- 
- echo $ac_n "checking for executable suffix... $ac_c" 1>&6
- if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_cv_exeext="no"
-   $rm conftest*
-   echo 'main () { return 0; }' > conftest.c
-   echo "$progname:629: checking for executable suffix" >& 5
-   if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
-     # Append any warnings to the config.log.
-     cat conftest.err 1>&5
- 
-     for ac_file in conftest.*; do
-       case $ac_file in
-       *.c | *.err | *.$objext ) ;;
-       *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
-       esac
-     done
-   else
-     cat conftest.err 1>&5
-     echo "$progname: failed program was:" >&5
-     cat conftest.c >&5
-   fi
-   $rm conftest*
- fi
- if test "X$ac_cv_exeext" = Xno; then
-   exeext=""
- else
-   exeext="$ac_cv_exeext"
- fi
- echo "$ac_t$ac_cv_exeext" 1>&6
- 
- echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
- pic_flag=
- special_shlib_compile_flags=
- wl=
- link_static_flag=
- no_builtin_flag=
- 
- if test "$with_gcc" = yes; then
-   wl='-Wl,'
-   link_static_flag='-static'
- 
-   case "$host_os" in
-   beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
-     # PIC is the default for these OSes.
-     ;;
-   aix*)
-     # Below there is a dirty hack to force normal static linking with -ldl
-     # The problem is because libdl dynamically linked with both libc and
-     # libC (AIX C++ library), which obviously doesn't included in libraries
-     # list by gcc. This cause undefined symbols with -static flags.
-     # This hack allows C programs to be linked with "-static -ldl", but
-     # we not sure about C++ programs.
-     link_static_flag="$link_static_flag ${wl}-lC"
-     ;;
-   cygwin* | mingw* | os2*)
-     # We can build DLLs from non-PIC.
-     ;;
-   amigaos*)
-     # FIXME: we need at least 68020 code to build shared libraries, but
-     # adding the `-m68020' flag to GCC prevents building anything better,
-     # like `-m68040'.
-     pic_flag='-m68020 -resident32 -malways-restore-a4'
-     ;;
-   sysv4*MP*)
-     if test -d /usr/nec; then
-        pic_flag=-Kconform_pic
-     fi
-     ;;
-   *)
-     pic_flag='-fPIC'
-     ;;
-   esac
- else
-   # PORTME Check for PIC flags for the system compiler.
-   case "$host_os" in
-   aix3* | aix4*)
-     # All AIX code is PIC.
-     link_static_flag='-bnso -bI:/lib/syscalls.exp'
-     ;;
- 
-   hpux9* | hpux10* | hpux11*)
-     # Is there a better link_static_flag that works with the bundled CC?
-     wl='-Wl,'
-     link_static_flag="${wl}-a ${wl}archive"
-     pic_flag='+Z'
-     ;;
- 
-   irix5* | irix6*)
-     wl='-Wl,'
-     link_static_flag='-non_shared'
-     # PIC (with -KPIC) is the default.
-     ;;
- 
-   cygwin* | mingw* | os2*)
-     # We can build DLLs from non-PIC.
-     ;;
- 
-   osf3* | osf4* | osf5*)
-     # All OSF/1 code is PIC.
-     wl='-Wl,'
-     link_static_flag='-non_shared'
-     ;;
- 
-   sco3.2v5*)
-     pic_flag='-Kpic'
-     link_static_flag='-dn'
-     special_shlib_compile_flags='-belf'
-     ;;
- 
-   solaris*)
-     pic_flag='-KPIC'
-     link_static_flag='-Bstatic'
-     wl='-Wl,'
-     ;;
- 
-   sunos4*)
-     pic_flag='-PIC'
-     link_static_flag='-Bstatic'
-     wl='-Qoption ld '
-     ;;
- 
-   sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-     pic_flag='-KPIC'
-     link_static_flag='-Bstatic'
-     wl='-Wl,'
-     ;;
- 
-   uts4*)
-     pic_flag='-pic'
-     link_static_flag='-Bstatic'
-     ;;
-   sysv4*MP*)
-     if test -d /usr/nec ;then
-       pic_flag='-Kconform_pic'
-       link_static_flag='-Bstatic'
-     fi
-     ;;
-   *)
-     can_build_shared=no
-     ;;
-   esac
- fi
- 
- if test -n "$pic_flag"; then
-   echo "$ac_t$pic_flag" 1>&6
- 
-   # Check to make sure the pic_flag actually works.
-   echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
-   $rm conftest*
-   echo "int some_variable = 0;" > conftest.c
-   save_CFLAGS="$CFLAGS"
-   CFLAGS="$CFLAGS $pic_flag -DPIC"
-   echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
-   if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
-     # Append any warnings to the config.log.
-     cat conftest.err 1>&5
-     
-     case "$host_os" in
-     hpux9* | hpux10* | hpux11*)
-       # On HP-UX, both CC and GCC only warn that PIC is supported... then they
-       # create non-PIC objects.  So, if there were any warnings, we assume that
-       # PIC is not supported.
-       if test -s conftest.err; then
- 	echo "$ac_t"no 1>&6
- 	can_build_shared=no
- 	pic_flag=
-       else
- 	echo "$ac_t"yes 1>&6
- 	pic_flag=" $pic_flag"
-       fi
-       ;;
-     *)
-       echo "$ac_t"yes 1>&6
-       pic_flag=" $pic_flag"
-       ;;
-     esac
-   else
-     # Append any errors to the config.log.
-     cat conftest.err 1>&5
-     can_build_shared=no
-     pic_flag=
-     echo "$ac_t"no 1>&6
-   fi
-   CFLAGS="$save_CFLAGS"
-   $rm conftest*
- else
-   echo "$ac_t"none 1>&6
- fi
- 
- # Check to see if options -o and -c are simultaneously supported by compiler
- echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- $rm conftest*
- echo "int some_variable = 0;" > conftest.c
- mkdir out
- # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
- # that will create temporary files in the current directory regardless of
- # the output directory.  Thus, making CWD read-only will cause this test
- # to fail, enabling locking or at least warning the user not to do parallel
- # builds.
- chmod -w .
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -o out/conftest2.o"
- echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
- if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
- 
-   # The compiler can only warn and ignore the option if not recognized
-   # So say no if there are warnings
-     if test -s out/conftest.err; then
-       echo "$ac_t"no 1>&6
-       compiler_c_o=no
-     else
-       echo "$ac_t"yes 1>&6
-       compiler_c_o=yes
-     fi
- else
-   # Append any errors to the config.log.
-   cat out/conftest.err 1>&5
-   compiler_c_o=no
-   echo "$ac_t"no 1>&6
- fi
- CFLAGS="$save_CFLAGS"
- chmod u+w .
- $rm conftest* out/*
- rmdir out
- cd ..
- rmdir conftest
- $rm -r conftest 2>/dev/null
- 
- if test x"$compiler_c_o" = x"yes"; then
-   # Check to see if we can write to a .lo
-   echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6
-   $rm conftest*
-   echo "int some_variable = 0;" > conftest.c
-   save_CFLAGS="$CFLAGS"
-   CFLAGS="$CFLAGS -c -o conftest.lo"
-   echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
- if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
- 
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-       if test -s conftest.err; then
- 	echo "$ac_t"no 1>&6
- 	compiler_o_lo=no
-       else
- 	echo "$ac_t"yes 1>&6
- 	compiler_o_lo=yes
-       fi
-   else
-     # Append any errors to the config.log.
-     cat conftest.err 1>&5
-     compiler_o_lo=no
-     echo "$ac_t"no 1>&6
-   fi
-   CFLAGS="$save_CFLAGS"
-   $rm conftest*
- else
-   compiler_o_lo=no
- fi
- 
- # Check to see if we can do hard links to lock some files if needed
- hard_links="nottested"
- if test "$compiler_c_o" = no && test "$need_locks" != no; then
-   # do not overwrite the value of need_locks provided by the user
-   echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
-   hard_links=yes
-   $rm conftest*
-   ln conftest.a conftest.b 2>/dev/null && hard_links=no
-   touch conftest.a
-   ln conftest.a conftest.b 2>&5 || hard_links=no
-   ln conftest.a conftest.b 2>/dev/null && hard_links=no
-   echo "$ac_t$hard_links" 1>&6
-   $rm conftest*
-   if test "$hard_links" = no; then
-     echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
-     need_locks=warn
-   fi
- else
-   need_locks=no
- fi
- 
- if test "$with_gcc" = yes; then
-   # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
-   echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
-   $rm conftest*
-   echo "int some_variable = 0;" > conftest.c
-   save_CFLAGS="$CFLAGS"
-   CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
-   echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-   if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
- 
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-       if test -s conftest.err; then
- 	echo "$ac_t"no 1>&6
- 	compiler_rtti_exceptions=no
-       else
- 	echo "$ac_t"yes 1>&6
- 	compiler_rtti_exceptions=yes
-       fi
-   else
-     # Append any errors to the config.log.
-     cat conftest.err 1>&5
-     compiler_rtti_exceptions=no
-     echo "$ac_t"no 1>&6
-   fi
-   CFLAGS="$save_CFLAGS"
-   $rm conftest*
- 
-   if test "$compiler_rtti_exceptions" = "yes"; then
-     no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
-   else
-     no_builtin_flag=' -fno-builtin'
-   fi
-   
- fi
- 
- # Check for any special shared library compilation flags.
- if test -n "$special_shlib_compile_flags"; then
-   echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
-   if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$special_shlib_compile_flags[ 	]" >/dev/null; then :
-   else
-     echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
-     can_build_shared=no
-   fi
- fi
- 
- echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
- $rm conftest*
- echo 'main(){return(0);}' > conftest.c
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
- if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-   echo "$ac_t$link_static_flag" 1>&6
- else
-   echo "$ac_t"none 1>&6
-   link_static_flag=
- fi
- LDFLAGS="$save_LDFLAGS"
- $rm conftest*
- 
- if test -z "$LN_S"; then
-   # Check to see if we can use ln -s, or we need hard links.
-   echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
-   $rm conftest.dat
-   if ln -s X conftest.dat 2>/dev/null; then
-     $rm conftest.dat
-     LN_S="ln -s"
-   else
-     LN_S=ln
-   fi
-   if test "$LN_S" = "ln -s"; then
-     echo "$ac_t"yes 1>&6
-   else
-     echo "$ac_t"no 1>&6
-   fi
- fi
- 
- # Make sure LD is an absolute path.
- if test -z "$LD"; then
-   ac_prog=ld
-   if test "$with_gcc" = yes; then
-     # Check if gcc -print-prog-name=ld gives a path.
-     echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
-     echo "$progname:991: checking for ld used by GCC" >&5
-     ac_prog=`($CC -print-prog-name=ld) 2>&5`
-     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 are not 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 $ac_n "checking for GNU ld... $ac_c" 1>&6
-     echo "$progname:1015: checking for GNU ld" >&5
-   else
-     echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-     echo "$progname:1018: checking for non-GNU ld" >&5
-   fi
- 
-   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
- 	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 "$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"
-   fi
- 
-   if test -n "$LD"; then
-     echo "$ac_t$LD" 1>&6
-   else
-     echo "$ac_t"no 1>&6
-   fi
- 
-   if test -z "$LD"; then
-     echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
-     exit 1
-   fi
- fi
- 
- # Check to see if it really is or is not GNU ld.
- echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
- # 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
-   with_gnu_ld=yes
- else
-   with_gnu_ld=no
- fi
- echo "$ac_t$with_gnu_ld" 1>&6
- 
- # See if the linker supports building shared libraries.
- echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
- 
- allow_undefined_flag=
- no_undefined_flag=
- need_lib_prefix=unknown
- need_version=unknown
- # when you set need_version to no, make sure it does not cause -set_version
- # flags to be left without arguments
- archive_cmds=
- archive_expsym_cmds=
- old_archive_from_new_cmds=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
- thread_safe_flag_spec=
- hardcode_libdir_flag_spec=
- hardcode_libdir_separator=
- hardcode_direct=no
- hardcode_minus_L=no
- hardcode_shlibpath_var=unsupported
- runpath_var=
- always_export_symbols=no
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms=
- # exclude_expsyms can be an egrep regular expression of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced.  Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- 
- case "$host_os" in
- cygwin* | mingw*)
-   # FIXME: the MSVC++ port hasn't been tested in a loooong time
-   # When not using gcc, we currently assume that we are using
-   # Microsoft Visual C++.
-   if test "$with_gcc" != yes; then
-     with_gnu_ld=no
-   fi
-   ;;
- 
- esac
- 
- ld_shlibs=yes
- if test "$with_gnu_ld" = yes; then
-   # If archive_cmds runs LD, not CC, wlarc should be empty
-   wlarc='${wl}'
- 
-   # See if GNU ld supports shared libraries.
-   case "$host_os" in
-   aix3* | aix4*)
-     # On AIX, the GNU linker is very broken
-     ld_shlibs=no
-     cat <<EOF 1>&2
- 
- *** Warning: the GNU linker, at least up to release 2.9.1, is reported
- *** to be unable to reliably create shared libraries on AIX.
- *** Therefore, libtool is disabling shared libraries support.  If you
- *** really care for shared libraries, you may want to modify your PATH
- *** so that a non-GNU linker is found, and then restart.
- 
- EOF
-     ;;
- 
-   amigaos*)
-     archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_minus_L=yes
- 
-     # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-     # that the semantics of dynamic libraries on AmigaOS, at least up
-     # to version 4, is to share data among multiple programs linked
-     # with the same dynamic library.  Since this doesn't match the
-     # behavior of shared libraries on other platforms, we can use
-     # them.
-     ld_shlibs=no
-     ;;
- 
-   beos*)
-     if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-       allow_undefined_flag=unsupported
-       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-       # support --undefined.  This deserves some investigation.  FIXME
-       archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-     else
-       ld_shlibs=no
-     fi
-     ;;
- 
-   cygwin* | mingw*)
-     # hardcode_libdir_flag_spec is actually meaningless, as there is
-     # no search path for DLLs.
-     hardcode_libdir_flag_spec='-L$libdir'
-     allow_undefined_flag=unsupported
-     always_export_symbols=yes
- 
-     # Extract the symbol export list from an `--export-all' def file,
-     # then regenerate the def file from the symbol export list, so that
-     # the compiled dll only exports the symbol export list.
-     export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-       test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-       $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def  $objdir/$soname-ltdll.$objext $libobjs $convenience~
-       sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
- 
-     archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
-       _lt_hint=1;
-       for symbol in `cat $export_symbols`; do
- 	echo "	\$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
- 	_lt_hint=`expr 1 + \$_lt_hint`;
-       done~
-       test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-       test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-       $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-       $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-       $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-       $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-       $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
- 
-       old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' 
-     ;;
- 
-   netbsd*)
-     if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-     else
-       archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
-       # can we support soname and/or expsyms with a.out? -oliva
-     fi
-     ;;
- 
-   solaris* | sysv5*)
-     if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
-       ld_shlibs=no
-       cat <<EOF 1>&2
- 
- *** Warning: The releases 2.8.* of the GNU linker cannot reliably
- *** create shared libraries on Solaris systems.  Therefore, libtool
- *** is disabling shared libraries support.  We urge you to upgrade GNU
- *** binutils to release 2.9.1 or newer.  Another option is to modify
- *** your PATH or compiler configuration so that the native linker is
- *** used, and then restart.
- 
- EOF
-     elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-     else
-       ld_shlibs=no
-     fi
-     ;;      
- 
-   sunos4*)
-     archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts'
-     wlarc=
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   *)
-     if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-     else
-       ld_shlibs=no
-     fi
-     ;;
-   esac
- 
-   if test "$ld_shlibs" = yes; then
-     runpath_var=LD_RUN_PATH
-     hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
-     export_dynamic_flag_spec='${wl}--export-dynamic'
-     case $host_os in
-     cygwin* | mingw*)
-       # dlltool doesn't understand --whole-archive et. al.
-       whole_archive_flag_spec=
-       ;;
-     *)
-       # ancient GNU ld didn't support --whole-archive et. al.
-       if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
-         whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-       else
-         whole_archive_flag_spec=
-       fi
-       ;;
-     esac
-   fi
- else
-   # PORTME fill in a description of your system's linker (not GNU ld)
-   case "$host_os" in
-   aix3*)
-     allow_undefined_flag=unsupported
-     always_export_symbols=yes
-     archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
-     # Note: this linker hardcodes the directories in LIBPATH if there
-     # are no directories specified by -L.
-     hardcode_minus_L=yes
-     if test "$with_gcc" = yes && test -z "$link_static_flag"; then
-       # Neither direct hardcoding nor static linking is supported with a
-       # broken collect2.
-       hardcode_direct=unsupported
-     fi
-     ;;
- 
-   aix4*)
-     hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
-     hardcode_libdir_separator=':'
-     if test "$with_gcc" = yes; then
-       collect2name=`${CC} -print-prog-name=collect2`
-       if test -f "$collect2name" && \
- 	 strings "$collect2name" | grep resolve_lib_name >/dev/null
-       then
- 	# We have reworked collect2
- 	hardcode_direct=yes
-       else
- 	# We have old collect2
- 	hardcode_direct=unsupported
- 	# It fails to find uninstalled libraries when the uninstalled
- 	# path is not listed in the libpath.  Setting hardcode_minus_L
- 	# to unsupported forces relinking
- 	hardcode_minus_L=yes
- 	hardcode_libdir_flag_spec='-L$libdir'
- 	hardcode_libdir_separator=
-       fi
-       shared_flag='-shared'
-     else
-       shared_flag='${wl}-bM:SRE'
-       hardcode_direct=yes
-     fi
-     allow_undefined_flag=' ${wl}-berok'
-     archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
-     archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
-     case "$host_os" in aix4.[01]|aix4.[01].*)
-       # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
-       always_export_symbols=yes ;;
-     esac
-    ;;
- 
-   amigaos*)
-     archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_minus_L=yes
-     # see comment about different semantics on the GNU ld section
-     ld_shlibs=no
-     ;;
- 
-   cygwin* | mingw*)
-     # When not using gcc, we currently assume that we are using
-     # Microsoft Visual C++.
-     # hardcode_libdir_flag_spec is actually meaningless, as there is
-     # no search path for DLLs.
-     hardcode_libdir_flag_spec=' '
-     allow_undefined_flag=unsupported
-     # Tell ltmain to make .lib files, not .a files.
-     libext=lib
-     # FIXME: Setting linknames here is a bad hack.
-     archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-     # The linker will automatically build a .lib file if we build a DLL.
-     old_archive_from_new_cmds='true'
-     # FIXME: Should let the user specify the lib program.
-     old_archive_cmds='lib /OUT:$oldlib$oldobjs'
-     fix_srcfile_path='`cygpath -w $srcfile`'
-     ;;
- 
-   freebsd1*)
-     ld_shlibs=no
-     ;;
- 
-   # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-   # support.  Future versions do this automatically, but an explicit c++rt0.o
-   # does not break anything, and helps significantly (at the cost of a little
-   # extra space).
-   freebsd2.2*)
-     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o'
-     hardcode_libdir_flag_spec='-R$libdir'
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-   freebsd2*)
-     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-     hardcode_direct=yes
-     hardcode_minus_L=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-   freebsd*)
-     archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-R$libdir'
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   hpux9* | hpux10* | hpux11*)
-     case "$host_os" in
-     hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
-     *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
-     esac
-     hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-     hardcode_libdir_separator=:
-     hardcode_direct=yes
-     hardcode_minus_L=yes # Not in the search PATH, but as the default
- 			 # location of the library.
-     export_dynamic_flag_spec='${wl}-E'
-     ;;
- 
-   irix5* | irix6*)
-     if test "$with_gcc" = yes; then
-       archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-     else
-       archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-     fi
-     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-     hardcode_libdir_separator=:
-     ;;
- 
-   netbsd*)
-     if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'  # a.out
-     else
-       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts'      # ELF
-     fi
-     hardcode_libdir_flag_spec='${wl}-R$libdir'
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   openbsd*)
-     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-R$libdir'
-     hardcode_direct=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   os2*)
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_minus_L=yes
-     allow_undefined_flag=unsupported
-     archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
-     old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
-     ;;
- 
-   osf3*)
-     if test "$with_gcc" = yes; then
-       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-     else
-       allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-     fi
-     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-     hardcode_libdir_separator=:
-     ;;
- 
-   osf4* | osf5*)  # As osf3* with the addition of the -msym flag
-     if test "$with_gcc" = yes; then
-       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-     else
-       allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-     fi
-     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-     hardcode_libdir_separator=:
-     ;;
- 
-   sco3.2v5*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     hardcode_shlibpath_var=no
-     runpath_var=LD_RUN_PATH
-     hardcode_runpath_var=yes
-     ;;
- 
-   solaris*)
-     no_undefined_flag=' -z text'
-     # $CC -shared without GNU ld will not create a library from C++
-     # object files and a static libstdc++, better avoid it by now
-     archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-     archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- 		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-     hardcode_libdir_flag_spec='-R$libdir'
-     hardcode_shlibpath_var=no
-     case "$host_os" in
-     solaris2.[0-5] | solaris2.[0-5].*) ;;
-     *) # Supported since Solaris 2.6 (maybe 2.5.1?)
-       whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
-     esac
-     ;;
- 
-   sunos4*)
-     archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_direct=yes
-     hardcode_minus_L=yes
-     hardcode_shlibpath_var=no
-     ;;
- 
-   sysv4)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     runpath_var='LD_RUN_PATH'
-     hardcode_shlibpath_var=no
-     hardcode_direct=no #Motorola manual says yes, but my tests say they lie 
-     ;;  
- 
-   sysv4.3*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     hardcode_shlibpath_var=no
-     export_dynamic_flag_spec='-Bexport'
-     ;;
- 
-   sysv5*)
-     no_undefined_flag=' -z text'
-     # $CC -shared without GNU ld will not create a library from C++
-     # object files and a static libstdc++, better avoid it by now
-     archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-     archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- 		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-     hardcode_libdir_flag_spec=
-     hardcode_shlibpath_var=no
-     runpath_var='LD_RUN_PATH'
-     ;;
- 
-   uts4*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_shlibpath_var=no
-     ;;
- 
-   dgux*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     hardcode_libdir_flag_spec='-L$libdir'
-     hardcode_shlibpath_var=no
-     ;;
- 
-   sysv4*MP*)
-     if test -d /usr/nec; then
-       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-       hardcode_shlibpath_var=no
-       runpath_var=LD_RUN_PATH
-       hardcode_runpath_var=yes
-       ld_shlibs=yes
-     fi
-     ;;
- 
-   sysv4.2uw2*)
-     archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts'
-     hardcode_direct=yes
-     hardcode_minus_L=no
-     hardcode_shlibpath_var=no
-     hardcode_runpath_var=yes
-     runpath_var=LD_RUN_PATH
-     ;;
- 
-   unixware7*)
-     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-     runpath_var='LD_RUN_PATH'
-     hardcode_shlibpath_var=no
-     ;;
- 
-   *)
-     ld_shlibs=no
-     ;;
-   esac
- fi
- echo "$ac_t$ld_shlibs" 1>&6
- test "$ld_shlibs" = no && can_build_shared=no
- 
- if test -z "$NM"; then
-   echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
-   case "$NM" in
-   [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
-   *)
-     IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-     for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
-       test -z "$ac_dir" && ac_dir=.
-       if test -f $ac_dir/nm || test -f $ac_dir/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
- 	if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- 	  NM="$ac_dir/nm -B"
- 	  break
- 	elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- 	  NM="$ac_dir/nm -p"
- 	  break
- 	else
- 	  NM=${NM="$ac_dir/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 "$NM" && NM=nm
-     ;;
-   esac
-   echo "$ac_t$NM" 1>&6
- fi
- 
- # Check for command to grab the raw symbol name followed by C symbol from nm.
- echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
- 
- # These are sane defaults that work on at least a few old systems.
- # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
- 
- # Character class describing NM global symbol codes.
- symcode='[BCDEGRST]'
- 
- # Regexp to match symbols that can be accessed directly from C.
- sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
- 
- # Transform the above into a raw symbol and a C symbol.
- symxfrm='\1 \2\3 \3'
- 
- # Transform an extracted symbol line into a proper C declaration
- global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
- 
- # Define system-specific variables.
- case "$host_os" in
- aix*)
-   symcode='[BCDT]'
-   ;;
- cygwin* | mingw*)
-   symcode='[ABCDGISTW]'
-   ;;
- hpux*) # Its linker distinguishes data from code symbols
-   global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
-   ;;
- irix*)
-   symcode='[BCDEGRST]'
-   ;;
- solaris*)
-   symcode='[BDT]'
-   ;;
- sysv4)
-   symcode='[DFNSTU]'
-   ;;
- esac
- 
- # If we're using GNU nm, then use its standard symbol codes.
- if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
-   symcode='[ABCDGISTW]'
- fi
- 
- # Try without a prefix undercore, then with it.
- for ac_symprfx in "" "_"; do
- 
-   # Write the raw and C identifiers.
-   global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode\)[ 	][ 	]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
- 
-   # Check to see that the pipe works correctly.
-   pipe_works=no
-   $rm conftest*
-   cat > conftest.c <<EOF
- #ifdef __cplusplus
- extern "C" {
- #endif
- char nm_test_var;
- void nm_test_func(){}
- #ifdef __cplusplus
- }
- #endif
- main(){nm_test_var='a';nm_test_func();return(0);}
- EOF
- 
-   echo "$progname:1635: checking if global_symbol_pipe works" >&5
-   if { (eval echo $progname:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
-     # Now try to grab the symbols.
-     nlist=conftest.nm
-     if { echo "$progname:1639: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
- 
-       # Try sorting and uniquifying the output.
-       if sort "$nlist" | uniq > "$nlist"T; then
- 	mv -f "$nlist"T "$nlist"
-       else
- 	rm -f "$nlist"T
-       fi
- 
-       # Make sure that we snagged all the symbols we need.
-       if egrep ' nm_test_var$' "$nlist" >/dev/null; then
- 	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
- 	  cat <<EOF > conftest.c
- #ifdef __cplusplus
- extern "C" {
- #endif
- 
- EOF
- 	  # Now generate the symbol file.
- 	  eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
- 
- 	  cat <<EOF >> conftest.c
- #if defined (__STDC__) && __STDC__
- # define lt_ptr_t void *
- #else
- # define lt_ptr_t char *
- # define const
- #endif
- 
- /* The mapping between symbol names and symbols. */
- const struct {
-   const char *name;
-   lt_ptr_t address;
- }
- lt_preloaded_symbols[] =
- {
- EOF
- 	  sed 's/^. \(.*\) \(.*\)$/  {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
- 	  cat <<\EOF >> conftest.c
-   {0, (lt_ptr_t) 0}
- };
- 
- #ifdef __cplusplus
- }
- #endif
- EOF
- 	  # Now try linking the two files.
- 	  mv conftest.$objext conftstm.$objext
- 	  save_LIBS="$LIBS"
- 	  save_CFLAGS="$CFLAGS"
- 	  LIBS="conftstm.$objext"
- 	  CFLAGS="$CFLAGS$no_builtin_flag"
- 	  if { (eval echo $progname:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- 	    pipe_works=yes
- 	  else
- 	    echo "$progname: failed program was:" >&5
- 	    cat conftest.c >&5
- 	  fi
- 	  LIBS="$save_LIBS"
- 	else
- 	  echo "cannot find nm_test_func in $nlist" >&5
- 	fi
-       else
- 	echo "cannot find nm_test_var in $nlist" >&5
-       fi
-     else
-       echo "cannot run $global_symbol_pipe" >&5
-     fi
-   else
-     echo "$progname: failed program was:" >&5
-     cat conftest.c >&5
-   fi
-   $rm conftest* conftst*
- 
-   # Do not use the global_symbol_pipe unless it works.
-   if test "$pipe_works" = yes; then
-     break
-   else
-     global_symbol_pipe=
-   fi
- done
- if test "$pipe_works" = yes; then
-   echo "${ac_t}ok" 1>&6
- else
-   echo "${ac_t}failed" 1>&6
- fi
- 
- if test -z "$global_symbol_pipe"; then
-   global_symbol_to_cdecl=
- fi
- 
- # Check hardcoding attributes.
- echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
- hardcode_action=
- if test -n "$hardcode_libdir_flag_spec" || \
-    test -n "$runpath_var"; then
- 
-   # We can hardcode non-existant directories.
-   if test "$hardcode_direct" != no &&
-      # If the only mechanism to avoid hardcoding is shlibpath_var, we
-      # have to relink, otherwise we might link with an installed library
-      # when we should be linking with a yet-to-be-installed one
-      ## test "$hardcode_shlibpath_var" != no &&
-      test "$hardcode_minus_L" != no; then
-     # Linking always hardcodes the temporary library directory.
-     hardcode_action=relink
-   else
-     # We can link without hardcoding, and we can hardcode nonexisting dirs.
-     hardcode_action=immediate
-   fi
- else
-   # We cannot hardcode anything, or else we can only hardcode existing
-   # directories.
-   hardcode_action=unsupported
- fi
- echo "$ac_t$hardcode_action" 1>&6
- 
- 
- reload_flag=
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
- # PORTME Some linkers may need a different reload flag.
- reload_flag='-r'
- echo "$ac_t$reload_flag" 1>&6
- test -n "$reload_flag" && reload_flag=" $reload_flag"
- 
- # PORTME Fill in your ld.so characteristics
- library_names_spec=
- libname_spec='lib$name'
- soname_spec=
- postinstall_cmds=
- postuninstall_cmds=
- finish_cmds=
- finish_eval=
- shlibpath_var=
- shlibpath_overrides_runpath=unknown
- version_type=none
- dynamic_linker="$host_os ld.so"
- sys_lib_dlsearch_path_spec="/lib /usr/lib"
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
- file_magic_cmd=
- file_magic_test_file=
- 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.
- echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
- case "$host_os" in
- aix3*)
-   version_type=linux
-   library_names_spec='${libname}${release}.so$versuffix $libname.a'
-   shlibpath_var=LIBPATH
- 
-   # AIX has no versioning support, so we append a major version to the name.
-   soname_spec='${libname}${release}.so$major'
-   ;;
- 
- aix4*)
-   version_type=linux
-   # AIX has no versioning support, so currently we can not hardcode correct
-   # soname into executable. Probably we can add versioning support to
-   # collect2, so additional links can be useful in future.
-   # We preserve .a as extension for shared libraries though AIX4.2
-   # and later linker supports .so
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
-   shlibpath_var=LIBPATH
-   deplibs_check_method=pass_all
-   ;;
- 
- amigaos*)
-   library_names_spec='$libname.ixlibrary $libname.a'
-   # Create ${libname}_ixlibrary.a entries in /sys/libs.
-   finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
-   ;;
- 
- beos*)
-   library_names_spec='${libname}.so'
-   dynamic_linker="$host_os ld.so"
-   shlibpath_var=LIBRARY_PATH
-   deplibs_check_method=pass_all
-   lt_cv_dlopen="load_add_on"
-   lt_cv_dlopen_libs=
-   lt_cv_dlopen_self=yes
-   ;;
- 
- bsdi4*)
-   version_type=linux
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-   shlibpath_var=LD_LIBRARY_PATH
-   deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=/shlib/libc.so
-   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-   sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-   export_dynamic_flag_spec=-rdynamic
-   # the default ld.so.conf also contains /usr/contrib/lib and
-   # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-   # libtool to hard-code these into programs
-   ;;
- 
- cygwin* | mingw*)
-   version_type=windows
-   need_version=no
-   need_lib_prefix=no
-   if test "$with_gcc" = yes; then
-     library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
-   else
-     library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
-   fi
-   dynamic_linker='Win32 ld.exe'
-   deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-   file_magic_cmd='${OBJDUMP} -f'
-   # FIXME: first we should search . and the directory the executable is in
-   shlibpath_var=PATH
-   lt_cv_dlopen="LoadLibrary"
-   lt_cv_dlopen_libs=
-   ;;
- 
- freebsd1*)
-   dynamic_linker=no
-   ;;
-   
- freebsd*)
-   objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-   version_type=freebsd-$objformat
-   case "$version_type" in
-     freebsd-elf*)
-       deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
-       file_magic_cmd=/usr/bin/file
-       file_magic_test_file=`echo /usr/lib/libc.so*`
-       library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
-       need_version=no
-       need_lib_prefix=no
-       ;;
-     freebsd-*)
-       deplibs_check_method=unknown
-       library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
-       need_version=yes
-       ;;
-   esac
-   shlibpath_var=LD_LIBRARY_PATH
-   case "$host_os" in
-   freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*)
-     shlibpath_overrides_runpath=yes
-     ;;
-   *) # from 3.2 on
-     shlibpath_overrides_runpath=no
-     ;;
-   esac
-   ;;
- 
- gnu*)
-   version_type=linux
-   need_lib_prefix=no
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- hpux9* | hpux10* | hpux11*)
-   # Give a soname corresponding to the major version so that dld.sl refuses to
-   # link against other versions.
-   dynamic_linker="$host_os dld.sl"
-   version_type=sunos
-   need_lib_prefix=no
-   need_version=no
-   shlibpath_var=SHLIB_PATH
-   shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-   library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
-   soname_spec='${libname}${release}.sl$major'
-   # HP-UX runs *really* slowly unless shared libraries are mode 555.
-   postinstall_cmds='chmod 555 $lib'
-   ;;
- 
- irix5* | irix6*)
-   version_type=irix
-   need_lib_prefix=no
-   need_version=no
-   soname_spec='${libname}${release}.so.$major'
-   library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so'
-   case "$host_os" in
-   irix5*)
-     libsuff= shlibsuff=
-     # this will be overridden with pass_all, but let us keep it just in case
-     deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
-     ;;
-   *)
-     case "$LD" in # libtool.m4 will add one of these switches to LD
-     *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
-     *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
-     *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
-     *) libsuff= shlibsuff= libmagic=never-match;;
-     esac
-     ;;
-   esac
-   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-   shlibpath_overrides_runpath=no
-   sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-   sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=`echo /lib${libsuff}/libc.so*`
-   deplibs_check_method='pass_all'
-   ;;
- 
- # No shared lib support for Linux oldld, aout, or coff.
- linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
-   dynamic_linker=no
-   ;;
- 
- # This must be Linux ELF.
- linux-gnu*)
-   version_type=linux
-   need_lib_prefix=no
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-   shlibpath_var=LD_LIBRARY_PATH
-   shlibpath_overrides_runpath=no
-   deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
- 
-   if test -f /lib/ld.so.1; then
-     dynamic_linker='GNU ld.so'
-   else
-     # Only the GNU ld.so supports shared libraries on MkLinux.
-     case "$host_cpu" in
-     powerpc*) dynamic_linker=no ;;
-     *) dynamic_linker='Linux ld.so' ;;
-     esac
-   fi
-   ;;
- 
- netbsd*)
-   version_type=sunos
-   if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-     library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-     dynamic_linker='NetBSD (a.out) ld.so'
-   else
-     library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
-     soname_spec='${libname}${release}.so$major'
-     dynamic_linker='NetBSD ld.elf_so'
-   fi
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- openbsd*)
-   version_type=sunos
-   if test "$with_gnu_ld" = yes; then
-     need_lib_prefix=no
-     need_version=no
-   fi
-   library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-   finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- os2*)
-   libname_spec='$name'
-   need_lib_prefix=no
-   library_names_spec='$libname.dll $libname.a'
-   dynamic_linker='OS/2 ld.exe'
-   shlibpath_var=LIBPATH
-   ;;
- 
- osf3* | osf4* | osf5*)
-   version_type=osf
-   need_version=no
-   soname_spec='${libname}${release}.so$major'
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   shlibpath_var=LD_LIBRARY_PATH
-   # this will be overridden with pass_all, but let us keep it just in case
-   deplibs_check_method='file_magic COFF format alpha shared library'
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=/shlib/libc.so
-   deplibs_check_method='pass_all'
-   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-   ;;
- 
- sco3.2v5*)
-   version_type=osf
-   soname_spec='${libname}${release}.so$major'
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- solaris*)
-   version_type=linux
-   need_lib_prefix=no
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   shlibpath_overrides_runpath=yes
-   # ldd complains unless libraries are executable
-   postinstall_cmds='chmod +x $lib'
-   deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
-   file_magic_cmd=/usr/bin/file
-   file_magic_test_file=/lib/libc.so
-   ;;
- 
- sunos4*)
-   version_type=sunos
-   library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-   shlibpath_var=LD_LIBRARY_PATH
-   shlibpath_overrides_runpath=yes
-   if test "$with_gnu_ld" = yes; then
-     need_lib_prefix=no
-   fi
-   need_version=yes
-   ;;
- 
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-   version_type=linux
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   case "$host_vendor" in
-     ncr)
-       deplibs_check_method='pass_all'
-       ;;
-     motorola)
-       need_lib_prefix=no
-       need_version=no
-       shlibpath_overrides_runpath=no
-       sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-       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]'
-       file_magic_cmd=/usr/bin/file
-       file_magic_test_file=`echo /usr/lib/libc.so*`
-       ;;
-   esac
-   ;;
- 
- uts4*)
-   version_type=linux
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- dgux*)
-   version_type=linux
-   need_lib_prefix=no
-   need_version=no
-   library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-   soname_spec='${libname}${release}.so$major'
-   shlibpath_var=LD_LIBRARY_PATH
-   ;;
- 
- sysv4*MP*)
-   if test -d /usr/nec ;then
-     version_type=linux
-     library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
-     soname_spec='$libname.so.$major'
-     shlibpath_var=LD_LIBRARY_PATH
-   fi
-   ;;
- 
- *)
-   dynamic_linker=no
-   ;;
- esac
- echo "$ac_t$dynamic_linker" 1>&6
- test "$dynamic_linker" = no && can_build_shared=no
- 
- # Report the final consequences.
- echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
- 
- # Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
- # configure.in, otherwise build static only libraries.
- case "$host_os" in
- cygwin* | mingw* | os2*)
-   if test x$can_build_shared = xyes; then
-     test x$enable_win32_dll = xno && can_build_shared=no
-     echo "checking if package supports dlls... $can_build_shared" 1>&6
-   fi
- ;;
- esac
- 
- if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
-   case "$deplibs_check_method" in
-   "file_magic "*)
-     file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
-     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
- 
- echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
- test "$can_build_shared" = "no" && enable_shared=no
- 
- # On AIX, shared libraries and static libraries use the same namespace, and
- # are all built from PIC.
- case "$host_os" in
- aix3*)
-   test "$enable_shared" = yes && enable_static=no
-   if test -n "$RANLIB"; then
-     archive_cmds="$archive_cmds~\$RANLIB \$lib"
-     postinstall_cmds='$RANLIB $lib'
-   fi
-   ;;
- 
- aix4*)
-   test "$enable_shared" = yes && enable_static=no
-   ;;
- esac
- 
- echo "$ac_t$enable_shared" 1>&6
- 
- # Make sure either enable_shared or enable_static is yes.
- test "$enable_shared" = yes || enable_static=yes
- 
- echo "checking whether to build static libraries... $enable_static" 1>&6
- 
- if test "$hardcode_action" = relink; then
-   # Fast installation is not supported
-   enable_fast_install=no
- elif test "$shlibpath_overrides_runpath" = yes ||
-      test "$enable_shared" = no; then
-   # Fast installation is not necessary
-   enable_fast_install=needless
- fi
- 
- echo $ac_n "checking for objdir... $ac_c" 1>&6
- rm -f .libs 2>/dev/null
- mkdir .libs 2>/dev/null
- if test -d .libs; then
-   objdir=.libs
- else
-   # MS-DOS does not allow filenames that begin with a dot.
-   objdir=_libs
- fi
- rmdir .libs 2>/dev/null
- echo "$ac_t$objdir" 1>&6
- 
- if test "x$enable_dlopen" != xyes; then
-   enable_dlopen=unknown
-   enable_dlopen_self=unknown
-   enable_dlopen_self_static=unknown
- else
- if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
-   lt_cv_dlopen=no lt_cv_dlopen_libs=
- echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
- echo "$progname:2212: checking for dlopen in -ldl" >&5
- ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_save_LIBS="$LIBS"
- LIBS="-ldl  $LIBS"
- cat > conftest.$ac_ext <<EOF
- #line 2220 "ltconfig"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char dlopen();
- 
- int main() {
- dlopen()
- ; return 0; }
- EOF
- if { (eval echo $progname:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=no"
- fi
- rm -f conftest*
- LIBS="$ac_save_LIBS"
- 
- fi
- if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for dlopen""... $ac_c" 1>&6
- echo "$progname:2252: checking for dlopen" >&5
- if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 2257 "ltconfig"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char dlopen(); below.  */
- #include <assert.h>
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char dlopen();
- 
- int main() {
- 
- /* 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_dlopen) || defined (__stub___dlopen)
- choke me
- #else
- dlopen();
- #endif
- 
- ; return 0; }
- EOF
- if { (eval echo $progname:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_dlopen=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_func_dlopen=no"
- fi
- rm -f conftest*
- fi
- if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="dlopen"
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
- echo "$progname:2299: checking for dld_link in -ldld" >&5
- ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_save_LIBS="$LIBS"
- LIBS="-ldld  $LIBS"
- cat > conftest.$ac_ext <<EOF
- #line 2307 "ltconfig"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char dld_link();
- 
- int main() {
- dld_link()
- ; return 0; }
- EOF
- if { (eval echo $progname:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=no"
- fi
- rm -f conftest*
- LIBS="$ac_save_LIBS"
- 
- fi
- if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for shl_load""... $ac_c" 1>&6
- echo "$progname:2339: checking for shl_load" >&5
- if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 2344 "ltconfig"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char shl_load(); below.  */
- #include <assert.h>
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char shl_load();
- 
- int main() {
- 
- /* 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_shl_load) || defined (__stub___shl_load)
- choke me
- #else
- shl_load();
- #endif
- 
- ; return 0; }
- EOF
- if { (eval echo $progname:2369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_shl_load=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_func_shl_load=no"
- fi
- rm -f conftest*
- fi
- 
- if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="shl_load"
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
- echo "$progname:2387: checking for shl_load in -ldld" >&5
- ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_save_LIBS="$LIBS"
- LIBS="-ldld  $LIBS"
- cat > conftest.$ac_ext <<EOF
- #line 2395 "ltconfig"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-     builtin and then its argument prototype would still apply.  */
- #ifdef __cplusplus
- extern "C"
- #endif
- char shl_load();
- 
- int main() {
- shl_load()
- ; return 0; }
- EOF
- if { (eval echo $progname:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=no"
- fi
- rm -f conftest*
- LIBS="$ac_save_LIBS"
- 
- fi
- if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
- else
-   echo "$ac_t""no" 1>&6
- fi
- 
- 
- fi
- 
-     
- fi
- 
-   
- fi
- 
- 
- fi
- 
- fi
- 
-   if test "x$lt_cv_dlopen" != xno; then
-     enable_dlopen=yes
-   fi
- 
-   case "$lt_cv_dlopen" in
-   dlopen)
- for ac_hdr in dlfcn.h; do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
- echo "$progname:2452: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 2457 "ltconfig"
- #include <$ac_hdr>
- int fnord = 0;
- EOF
- ac_try="$ac_compile >/dev/null 2>conftest.out"
- { (eval echo $progname:2462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-   eval "ac_cv_header_$ac_safe=yes"
- else
-   echo "$ac_err" >&5
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_header_$ac_safe=no"
- fi
- rm -f conftest*
- fi
- if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
- else
-   echo "$ac_t""no" 1>&6
- fi
- done
- 
-     if test "x$ac_cv_header_dlfcn_h" = xyes; then
-       CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-     fi
-     eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-     LIBS="$lt_cv_dlopen_libs $LIBS"
- 
-   echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
- echo "$progname:2490: checking whether a program can dlopen itself" >&5
- if test "${lt_cv_dlopen_self+set}" = set; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   if test "$cross_compiling" = yes; then
-     lt_cv_dlopen_self=cross
-   else
-     cat > conftest.c <<EOF
- #line 2498 "ltconfig"
- 
- #if HAVE_DLFCN_H
- #include <dlfcn.h>
- #endif
- 
- #include <stdio.h>
- 
- #ifdef RTLD_GLOBAL
- # define LTDL_GLOBAL	RTLD_GLOBAL
- #else
- # ifdef DL_GLOBAL
- #  define LTDL_GLOBAL	DL_GLOBAL
- # else
- #  define LTDL_GLOBAL	0
- # endif
- #endif
- 
- /* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-    find out it does not work in some platform. */
- #ifndef LTDL_LAZY_OR_NOW
- # ifdef RTLD_LAZY
- #  define LTDL_LAZY_OR_NOW	RTLD_LAZY
- # else
- #  ifdef DL_LAZY
- #   define LTDL_LAZY_OR_NOW	DL_LAZY
- #  else
- #   ifdef RTLD_NOW
- #    define LTDL_LAZY_OR_NOW	RTLD_NOW
- #   else
- #    ifdef DL_NOW
- #     define LTDL_LAZY_OR_NOW	DL_NOW
- #    else
- #     define LTDL_LAZY_OR_NOW	0
- #    endif
- #   endif
- #  endif
- # endif
- #endif
- 
- fnord() { int i=42;}
- main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-     if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- 	       if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
- 
- EOF
- if { (eval echo $progname:2544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
- then
-   lt_cv_dlopen_self=yes
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -fr conftest*
-   lt_cv_dlopen_self=no
- fi
- rm -fr conftest*
- fi
- 
- fi
- 
- echo "$ac_t""$lt_cv_dlopen_self" 1>&6
- 
-   if test "$lt_cv_dlopen_self" = yes; then
-     LDFLAGS="$LDFLAGS $link_static_flag"
-   echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
- echo "$progname:2563: checking whether a statically linked program can dlopen itself" >&5
- if test "${lt_cv_dlopen_self_static+set}" = set; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   if test "$cross_compiling" = yes; then
-     lt_cv_dlopen_self_static=cross
-   else
-     cat > conftest.c <<EOF
- #line 2571 "ltconfig"
- 
- #if HAVE_DLFCN_H
- #include <dlfcn.h>
- #endif
- 
- #include <stdio.h>
- 
- #ifdef RTLD_GLOBAL
- # define LTDL_GLOBAL	RTLD_GLOBAL
- #else
- # ifdef DL_GLOBAL
- #  define LTDL_GLOBAL	DL_GLOBAL
- # else
- #  define LTDL_GLOBAL	0
- # endif
- #endif
- 
- /* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-    find out it does not work in some platform. */
- #ifndef LTDL_LAZY_OR_NOW
- # ifdef RTLD_LAZY
- #  define LTDL_LAZY_OR_NOW	RTLD_LAZY
- # else
- #  ifdef DL_LAZY
- #   define LTDL_LAZY_OR_NOW	DL_LAZY
- #  else
- #   ifdef RTLD_NOW
- #    define LTDL_LAZY_OR_NOW	RTLD_NOW
- #   else
- #    ifdef DL_NOW
- #     define LTDL_LAZY_OR_NOW	DL_NOW
- #    else
- #     define LTDL_LAZY_OR_NOW	0
- #    endif
- #   endif
- #  endif
- # endif
- #endif
- 
- fnord() { int i=42;}
- main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-     if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
-     if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
- 
- EOF
- if { (eval echo $progname:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
- then
-   lt_cv_dlopen_self_static=yes
- else
-   echo "$progname: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -fr conftest*
-   lt_cv_dlopen_self_static=no
- fi
- rm -fr conftest*
- fi
- 
- fi
- 
- echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
- fi
-     ;;
-   esac
- 
-   case "$lt_cv_dlopen_self" in
-   yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-   *) enable_dlopen_self=unknown ;;
-   esac
- 
-   case "$lt_cv_dlopen_self_static" in
-   yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-   *) enable_dlopen_self_static=unknown ;;
-   esac
- fi
- 
- # Copy echo and quote the copy, instead of the original, because it is
- # used later.
- ltecho="$echo"
- if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-    ltecho="$CONFIG_SHELL \$0 --fallback-echo"
- fi
- LTSHELL="$SHELL"
- 
- LTCONFIG_VERSION="$VERSION"
- 
- # Only quote variables if we're using ltmain.sh.
- case "$ltmain" in
- *.sh)
-   # Now quote all the things that may contain metacharacters.
-   for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
-     old_LD old_LDFLAGS old_LIBS \
-     old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
-     AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
-     reload_flag reload_cmds wl \
-     pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
-     thread_safe_flag_spec whole_archive_flag_spec libname_spec \
-     library_names_spec soname_spec \
-     RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
-     old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \
-     file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \
-     finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
-     hardcode_libdir_flag_spec hardcode_libdir_separator  \
-     sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-     compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
- 
-     case "$var" in
-     reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
-     old_postinstall_cmds | old_postuninstall_cmds | \
-     export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
-     postinstall_cmds | postuninstall_cmds | \
-     finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-       # Double-quote double-evaled strings.
-       eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-       ;;
-     *)
-       eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-       ;;
-     esac
-   done
- 
-   case "$ltecho" in
-   *'\$0 --fallback-echo"')
-     ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-     ;;
-   esac
- 
-   trap "$rm \"$ofile\"; exit 1" 1 2 15
-   echo "creating $ofile"
-   $rm "$ofile"
-   cat <<EOF > "$ofile"
- #! $SHELL
- 
- # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
- # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
- # NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
- #
- # Copyright (C) 1996-1999 Free Software Foundation, Inc.
- # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
- #
- # 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 02111-1307, 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.
- 
- # Sed that helps us avoid accidentally triggering echo(1) options like -n.
- Xsed="sed -e s/^X//"
- 
- # The HP-UX ksh and POSIX shell print the target directory to stdout
- # if CDPATH is set.
- if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
- 
- ### BEGIN LIBTOOL CONFIG
- EOF
-   cfgfile="$ofile"
-   ;;
- 
- *)
-   # Double-quote the variables that need it (for aesthetics).
-   for var in old_CC old_CFLAGS old_CPPFLAGS \
-     old_LD old_LDFLAGS old_LIBS \
-     old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
-     eval "$var=\\\"\$var\\\""
-   done
- 
-   # Just create a config file.
-   cfgfile="$ofile.cfg"
-   trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-   echo "creating $cfgfile"
-   $rm "$cfgfile"
-   cat <<EOF > "$cfgfile"
- # `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
- # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
- EOF
-   ;;
- esac
- 
- cat <<EOF >> "$cfgfile"
- # Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
- #
- # CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
- # LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
- # NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
- # DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
- #   $0$ltconfig_args
- #
- # Compiler and other test output produced by $progname, useful for
- # debugging $progname, is in ./config.log if it exists.
- 
- # The version of $progname that generated this script.
- LTCONFIG_VERSION=$LTCONFIG_VERSION
- 
- # Shell to use when invoking shell scripts.
- SHELL=$LTSHELL
- 
- # Whether or not to build shared libraries.
- build_libtool_libs=$enable_shared
- 
- # Whether or not to build static libraries.
- build_old_libs=$enable_static
- 
- # Whether or not to optimize for fast installation.
- fast_install=$enable_fast_install
- 
- # The host system.
- host_alias=$host_alias
- host=$host
- 
- # An echo program that does not interpret backslashes.
- echo=$ltecho
- 
- # The archiver.
- AR=$AR
- 
- # The default C compiler.
- CC=$CC
- 
- # The linker used to build libraries.
- LD=$LD
- 
- # Whether we need hard or soft links.
- LN_S=$LN_S
- 
- # A BSD-compatible nm program.
- NM=$NM
- 
- # Used on cygwin: DLL creation program.
- DLLTOOL="$DLLTOOL"
- 
- # Used on cygwin: object dumper.
- OBJDUMP="$OBJDUMP"
- 
- # Used on cygwin: assembler.
- AS="$AS"
- 
- # The name of the directory that contains temporary libtool files.
- objdir=$objdir
- 
- # How to create reloadable object files.
- reload_flag=$reload_flag
- reload_cmds=$reload_cmds
- 
- # How to pass a linker flag through the compiler.
- wl=$wl
- 
- # Object file suffix (normally "o").
- objext="$objext"
- 
- # Old archive suffix (normally "a").
- libext="$libext"
- 
- # Executable file suffix (normally "").
- exeext="$exeext"
- 
- # Additional compiler flags for building library objects.
- pic_flag=$pic_flag
- 
- # Does compiler simultaneously support -c and -o options?
- compiler_c_o=$compiler_c_o
- 
- # Can we write directly to a .lo ?
- compiler_o_lo=$compiler_o_lo
- 
- # Must we lock files when doing compilation ?
- need_locks=$need_locks
- 
- # Do we need the lib prefix for modules?
- need_lib_prefix=$need_lib_prefix
- 
- # Do we need a version for libraries?
- need_version=$need_version
- 
- # Whether dlopen is supported.
- dlopen=$enable_dlopen
- 
- # Whether dlopen of programs is supported.
- dlopen_self=$enable_dlopen_self
- 
- # Whether dlopen of statically linked programs is supported.
- dlopen_self_static=$enable_dlopen_self_static
- 
- # Compiler flag to prevent dynamic linking.
- link_static_flag=$link_static_flag
- 
- # Compiler flag to turn off builtin functions.
- no_builtin_flag=$no_builtin_flag
- 
- # Compiler flag to allow reflexive dlopens.
- export_dynamic_flag_spec=$export_dynamic_flag_spec
- 
- # Compiler flag to generate shared objects directly from archives.
- whole_archive_flag_spec=$whole_archive_flag_spec
- 
- # Compiler flag to generate thread-safe objects.
- thread_safe_flag_spec=$thread_safe_flag_spec
- 
- # Library versioning type.
- version_type=$version_type
- 
- # Format of library name prefix.
- libname_spec=$libname_spec
- 
- # List of archive names.  First name is the real one, the rest are links.
- # The last name is the one that the linker finds with -lNAME.
- library_names_spec=$library_names_spec
- 
- # The coded name of the library, if different from the real name.
- soname_spec=$soname_spec
- 
- # Commands used to build and install an old-style archive.
- RANLIB=$RANLIB
- old_archive_cmds=$old_archive_cmds
- old_postinstall_cmds=$old_postinstall_cmds
- old_postuninstall_cmds=$old_postuninstall_cmds
- 
- # Create an old-style archive from a shared archive.
- old_archive_from_new_cmds=$old_archive_from_new_cmds
- 
- # Commands used to build and install a shared archive.
- archive_cmds=$archive_cmds
- archive_expsym_cmds=$archive_expsym_cmds
- postinstall_cmds=$postinstall_cmds
- postuninstall_cmds=$postuninstall_cmds
- 
- # Method to check whether dependent libraries are shared objects.
- deplibs_check_method=$deplibs_check_method
- 
- # Command to use when deplibs_check_method == file_magic.
- file_magic_cmd=$file_magic_cmd
- 
- # Flag that allows shared libraries with undefined symbols to be built.
- allow_undefined_flag=$allow_undefined_flag
- 
- # Flag that forces no undefined symbols.
- no_undefined_flag=$no_undefined_flag
- 
- # Commands used to finish a libtool library installation in a directory.
- finish_cmds=$finish_cmds
- 
- # Same as above, but a single script fragment to be evaled but not shown.
- finish_eval=$finish_eval
- 
- # Take the output of nm and produce a listing of raw symbols and C names.
- global_symbol_pipe=$global_symbol_pipe
- 
- # Transform the output of nm in a proper C declaration
- global_symbol_to_cdecl=$global_symbol_to_cdecl
- 
- # This is the shared library runtime path variable.
- runpath_var=$runpath_var
- 
- # This is the shared library path variable.
- shlibpath_var=$shlibpath_var
- 
- # Is shlibpath searched before the hard-coded library search path?
- shlibpath_overrides_runpath=$shlibpath_overrides_runpath
- 
- # How to hardcode a shared library path into an executable.
- hardcode_action=$hardcode_action
- 
- # Flag to hardcode \$libdir into a binary during linking.
- # This must work even if \$libdir does not exist.
- hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
- 
- # Whether we need a single -rpath flag with a separated argument.
- hardcode_libdir_separator=$hardcode_libdir_separator
- 
- # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
- # resulting binary.
- hardcode_direct=$hardcode_direct
- 
- # Set to yes if using the -LDIR flag during linking hardcodes DIR into the
- # resulting binary.
- hardcode_minus_L=$hardcode_minus_L
- 
- # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
- # the resulting binary.
- hardcode_shlibpath_var=$hardcode_shlibpath_var
- 
- # Compile-time system search path for libraries
- sys_lib_search_path_spec=$sys_lib_search_path_spec
- 
- # Run-time system search path for libraries
- sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
- 
- # Fix the shell variable \$srcfile for the compiler.
- fix_srcfile_path="$fix_srcfile_path"
- 
- # Set to yes if exported symbols are required.
- always_export_symbols=$always_export_symbols
- 
- # The commands to list exported symbols.
- export_symbols_cmds=$export_symbols_cmds
- 
- # Symbols that should not be listed in the preloaded symbols.
- exclude_expsyms=$exclude_expsyms
- 
- # Symbols that must always be exported.
- include_expsyms=$include_expsyms
- 
- EOF
- 
- case "$ltmain" in
- *.sh)
-   echo '### END LIBTOOL CONFIG' >> "$ofile"
-   echo >> "$ofile"
-   case "$host_os" in
-   aix3*)
-     cat <<\EOF >> "$ofile"
- 
- # AIX sometimes has problems with the GCC collect2 program.  For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
-   COLLECT_NAMES=
-   export COLLECT_NAMES
- fi
- EOF
-     ;;
-   esac
- 
-   # Append the ltmain.sh script.
-   sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
-   # We use sed instead of cat because bash on DJGPP gets confused if
-   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-   # text mode, it properly converts lines to CR/LF.  This bash problem
-   # is reportedly fixed, but why not run on old versions too?
- 
-   chmod +x "$ofile"
-   ;;
- 
- *)
-   # Compile the libtool program.
-   echo "FIXME: would compile $ltmain"
-   ;;
- esac
- 
- test -n "$cache_file" || exit 0
- 
- # AC_CACHE_SAVE
- trap '' 1 2 15
- cat > confcache <<\EOF
- # 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.  It is not useful on other systems.
- # If it contains results you don't want to keep, you may remove or edit it.
- #
- # By default, configure uses ./config.cache as the cache file,
- # creating it if it does not exist already.  You can give configure
- # the --cache-file=FILE option to use a different cache file; that is
- # what configure does when it calls configure scripts in
- # subdirectories, so they share the cache.
- # Giving --cache-file=/dev/null disables caching, for debugging configure.
- # config.status only pays attention to the cache file if you give it the
- # --recheck option to rerun configure.
- #
- EOF
- # 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 \
-       -e "s/'/'\\\\''/g" \
-       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
-     ;;
-   *)
-     # `set' quotes correctly as required by POSIX, so do not add quotes.
-     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
-     ;;
-   esac >> confcache
- if cmp -s $cache_file confcache; then
-   :
- else
-   if test -w $cache_file; then
-     echo "updating cache $cache_file"
-     cat confcache > $cache_file
-   else
-     echo "not updating unwritable cache $cache_file"
-   fi
- fi
- rm -f confcache
- 
- exit 0
- 
- # Local Variables:
- # mode:shell-script
- # sh-indentation:2
- # End:
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/ltmain.sh gcc-4.0.0/boehm-gc/ltmain.sh
*** gcc-3.4.3/boehm-gc/ltmain.sh	Wed Nov 20 15:59:07 2002
--- gcc-4.0.0/boehm-gc/ltmain.sh	Thu Jan  1 00:00:00 1970
***************
*** 1,4012 ****
- # ltmain.sh - Provide generalized library-building support services.
- # NOTE: Changing this file will not affect anything until you rerun ltconfig.
- #
- # Copyright (C) 1996-1999 Free Software Foundation, Inc.
- # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
- #
- # 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 02111-1307, 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.
- 
- # Check that we have a working $echo.
- if test "X$1" = X--no-reexec; then
-   # Discard the --no-reexec flag, and continue.
-   shift
- elif test "X$1" = X--fallback-echo; then
-   # Avoid inline document here, it may be left over
-   :
- elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-   # Yippee, $echo works!
-   :
- else
-   # Restart under the correct shell, and then maybe $echo will work.
-   exec $SHELL "$0" --no-reexec ${1+"$@"}
- fi
- 
- if test "X$1" = X--fallback-echo; then
-   # used as fallback echo
-   shift
-   cat <<EOF
- $*
- EOF
-   exit 0
- fi
- 
- # The name of this program.
- progname=`$echo "$0" | sed 's%^.*/%%'`
- modename="$progname"
- 
- # Constants.
- PROGRAM=ltmain.sh
- PACKAGE=libtool
- VERSION=1.3.4
- TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
- 
- default_mode=
- help="Try \`$progname --help' for more information."
- magic="%%%MAGIC variable%%%"
- mkdir="mkdir"
- mv="mv -f"
- rm="rm -f"
- 
- # Sed substitution that helps us do robust quoting.  It backslashifies
- # metacharacters that are still active within double-quoted strings.
- Xsed='sed -e 1s/^X//'
- sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
- SP2NL='tr \040 \012'
- NL2SP='tr \015\012 \040\040'
- 
- # NLS nuisances.
- # Only set LANG and LC_ALL to C if already set.
- # These must not be set unconditionally because not all systems understand
- # e.g. LANG=C (notably SCO).
- # We save the old values to restore during execute mode.
- if test "${LC_ALL+set}" = set; then
-   save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
- fi
- if test "${LANG+set}" = set; then
-   save_LANG="$LANG"; LANG=C; export LANG
- fi
- 
- if test "$LTCONFIG_VERSION" != "$VERSION"; then
-   echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
-   echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-   exit 1
- fi
- 
- if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-   echo "$modename: not configured to build any kind of library" 1>&2
-   echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-   exit 1
- fi
- 
- # Global variables.
- mode=$default_mode
- nonopt=
- prev=
- prevopt=
- run=
- show="$echo"
- show_help=
- execute_dlfiles=
- lo2o="s/\\.lo\$/.${objext}/"
- o2lo="s/\\.${objext}\$/.lo/"
- 
- # Parse our command line options once, thoroughly.
- while test $# -gt 0
- do
-   arg="$1"
-   shift
- 
-   case "$arg" in
-   -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
-   *) optarg= ;;
-   esac
- 
-   # If the previous option needs an argument, assign it.
-   if test -n "$prev"; then
-     case "$prev" in
-     execute_dlfiles)
-       eval "$prev=\"\$$prev \$arg\""
-       ;;
-     *)
-       eval "$prev=\$arg"
-       ;;
-     esac
- 
-     prev=
-     prevopt=
-     continue
-   fi
- 
-   # Have we seen a non-optional argument yet?
-   case "$arg" in
-   --help)
-     show_help=yes
-     ;;
- 
-   --version)
-     echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
-     exit 0
-     ;;
- 
-   --config)
-     sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
-     exit 0
-     ;;
- 
-   --debug)
-     echo "$progname: enabling shell trace mode"
-     set -x
-     ;;
- 
-   --dry-run | -n)
-     run=:
-     ;;
- 
-   --features)
-     echo "host: $host"
-     if test "$build_libtool_libs" = yes; then
-       echo "enable shared libraries"
-     else
-       echo "disable shared libraries"
-     fi
-     if test "$build_old_libs" = yes; then
-       echo "enable static libraries"
-     else
-       echo "disable static libraries"
-     fi
-     exit 0
-     ;;
- 
-   --finish) mode="finish" ;;
- 
-   --mode) prevopt="--mode" prev=mode ;;
-   --mode=*) mode="$optarg" ;;
- 
-   --quiet | --silent)
-     show=:
-     ;;
- 
-   -dlopen)
-     prevopt="-dlopen"
-     prev=execute_dlfiles
-     ;;
- 
-   -*)
-     $echo "$modename: unrecognized option \`$arg'" 1>&2
-     $echo "$help" 1>&2
-     exit 1
-     ;;
- 
-   *)
-     nonopt="$arg"
-     break
-     ;;
-   esac
- done
- 
- if test -n "$prevopt"; then
-   $echo "$modename: option \`$prevopt' requires an argument" 1>&2
-   $echo "$help" 1>&2
-   exit 1
- fi
- 
- if test -z "$show_help"; then
- 
-   # Infer the operation mode.
-   if test -z "$mode"; then
-     case "$nonopt" in
-     *cc | *++ | gcc* | *-gcc*)
-       mode=link
-       for arg
-       do
- 	case "$arg" in
- 	-c)
- 	   mode=compile
- 	   break
- 	   ;;
- 	esac
-       done
-       ;;
-     *db | *dbx | *strace | *truss)
-       mode=execute
-       ;;
-     *install*|cp|mv)
-       mode=install
-       ;;
-     *rm)
-       mode=uninstall
-       ;;
-     *)
-       # If we have no mode, but dlfiles were specified, then do execute mode.
-       test -n "$execute_dlfiles" && mode=execute
- 
-       # Just use the default operation mode.
-       if test -z "$mode"; then
- 	if test -n "$nonopt"; then
- 	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- 	else
- 	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- 	fi
-       fi
-       ;;
-     esac
-   fi
- 
-   # Only execute mode is allowed to have -dlopen flags.
-   if test -n "$execute_dlfiles" && test "$mode" != execute; then
-     $echo "$modename: unrecognized option \`-dlopen'" 1>&2
-     $echo "$help" 1>&2
-     exit 1
-   fi
- 
-   # Change the help message to a mode-specific one.
-   generic_help="$help"
-   help="Try \`$modename --help --mode=$mode' for more information."
- 
-   # These modes are in order of execution frequency so that they run quickly.
-   case "$mode" in
-   # libtool compile mode
-   compile)
-     modename="$modename: compile"
-     # Get the compilation command and the source file.
-     base_compile=
-     lastarg=
-     srcfile="$nonopt"
-     suppress_output=
- 
-     user_target=no
-     for arg
-     do
-       # Accept any command-line options.
-       case "$arg" in
-       -o)
- 	if test "$user_target" != "no"; then
- 	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- 	  exit 1
- 	fi
- 	user_target=next
- 	;;
- 
-       -static)
- 	build_old_libs=yes
- 	continue
- 	;;
-       esac
- 
-       case "$user_target" in
-       next)
- 	# The next one is the -o target name
- 	user_target=yes
- 	continue
- 	;;
-       yes)
- 	# We got the output file
- 	user_target=set
- 	libobj="$arg"
- 	continue
- 	;;
-       esac
- 
-       # Accept the current argument as the source file.
-       lastarg="$srcfile"
-       srcfile="$arg"
- 
-       # Aesthetically quote the previous argument.
- 
-       # Backslashify any backslashes, double quotes, and dollar signs.
-       # These are the only characters that are still specially
-       # interpreted inside of double-quoted scrings.
-       lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
- 
-       # Double-quote args containing other shell metacharacters.
-       # Many Bourne shells cannot handle close brackets correctly in scan
-       # sets, so we specify it separately.
-       case "$lastarg" in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	lastarg="\"$lastarg\""
- 	;;
-       esac
- 
-       # Add the previous argument to base_compile.
-       if test -z "$base_compile"; then
- 	base_compile="$lastarg"
-       else
- 	base_compile="$base_compile $lastarg"
-       fi
-     done
- 
-     case "$user_target" in
-     set)
-       ;;
-     no)
-       # Get the name of the library object.
-       libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
-       ;;
-     *)
-       $echo "$modename: you must specify a target with \`-o'" 1>&2
-       exit 1
-       ;;
-     esac
- 
-     # Recognize several different file suffixes.
-     # If the user specifies -o file.o, it is replaced with file.lo
-     xform='[cCFSfmso]'
-     case "$libobj" in
-     *.ada) xform=ada ;;
-     *.adb) xform=adb ;;
-     *.ads) xform=ads ;;
-     *.asm) xform=asm ;;
-     *.c++) xform=c++ ;;
-     *.cc) xform=cc ;;
-     *.cpp) xform=cpp ;;
-     *.cxx) xform=cxx ;;
-     *.f90) xform=f90 ;;
-     *.for) xform=for ;;
-     esac
- 
-     libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
- 
-     case "$libobj" in
-     *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
-     *)
-       $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
-       exit 1
-       ;;
-     esac
- 
-     if test -z "$base_compile"; then
-       $echo "$modename: you must specify a compilation command" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     # Delete any leftover library objects.
-     if test "$build_old_libs" = yes; then
-       removelist="$obj $libobj"
-     else
-       removelist="$libobj"
-     fi
- 
-     $run $rm $removelist
-     trap "$run $rm $removelist; exit 1" 1 2 15
- 
-     # Calculate the filename of the output object if compiler does
-     # not support -o with -c
-     if test "$compiler_c_o" = no; then
-       output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
-       lockfile="$output_obj.lock"
-       removelist="$removelist $output_obj $lockfile"
-       trap "$run $rm $removelist; exit 1" 1 2 15
-     else
-       need_locks=no
-       lockfile=
-     fi
- 
-     # Lock this critical section if it is needed
-     # We use this script file to make the link, it avoids creating a new file
-     if test "$need_locks" = yes; then
-       until ln "$0" "$lockfile" 2>/dev/null; do
- 	$show "Waiting for $lockfile to be removed"
- 	sleep 2
-       done
-     elif test "$need_locks" = warn; then
-       if test -f "$lockfile"; then
- 	echo "\
- *** ERROR, $lockfile exists and contains:
- `cat $lockfile 2>/dev/null`
- 
- This indicates that another process is trying to use the same
- temporary object file, and libtool could not work around it because
- your compiler does not support \`-c' and \`-o' together.  If you
- repeat this compilation, it may succeed, by chance, but you had better
- avoid parallel builds (make -j) in this platform, or get a better
- compiler."
- 
- 	$run $rm $removelist
- 	exit 1
-       fi
-       echo $srcfile > "$lockfile"
-     fi
- 
-     if test -n "$fix_srcfile_path"; then
-       eval srcfile=\"$fix_srcfile_path\"
-     fi
- 
-     # Only build a PIC object if we are building libtool libraries.
-     if test "$build_libtool_libs" = yes; then
-       # Without this assignment, base_compile gets emptied.
-       fbsd_hideous_sh_bug=$base_compile
- 
-       # All platforms use -DPIC, to notify preprocessed assembler code.
-       command="$base_compile $srcfile $pic_flag -DPIC"
-       if test "$build_old_libs" = yes; then
- 	lo_libobj="$libobj"
- 	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- 	if test "X$dir" = "X$libobj"; then
- 	  dir="$objdir"
- 	else
- 	  dir="$dir/$objdir"
- 	fi
- 	libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
- 
- 	if test -d "$dir"; then
- 	  $show "$rm $libobj"
- 	  $run $rm $libobj
- 	else
- 	  $show "$mkdir $dir"
- 	  $run $mkdir $dir
- 	  status=$?
- 	  if test $status -ne 0 && test ! -d $dir; then
- 	    exit $status
- 	  fi
- 	fi
-       fi
-       if test "$compiler_o_lo" = yes; then
- 	output_obj="$libobj"
- 	command="$command -o $output_obj"
-       elif test "$compiler_c_o" = yes; then
- 	output_obj="$obj"
- 	command="$command -o $output_obj"
-       fi
- 
-       $run $rm "$output_obj"
-       $show "$command"
-       if $run eval "$command"; then :
-       else
- 	test -n "$output_obj" && $run $rm $removelist
- 	exit 1
-       fi
- 
-       if test "$need_locks" = warn &&
- 	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- 	echo "\
- *** ERROR, $lockfile contains:
- `cat $lockfile 2>/dev/null`
- 
- but it should contain:
- $srcfile
- 
- This indicates that another process is trying to use the same
- temporary object file, and libtool could not work around it because
- your compiler does not support \`-c' and \`-o' together.  If you
- repeat this compilation, it may succeed, by chance, but you had better
- avoid parallel builds (make -j) in this platform, or get a better
- compiler."
- 
- 	$run $rm $removelist
- 	exit 1
-       fi
- 
-       # Just move the object if needed, then go on to compile the next one
-       if test x"$output_obj" != x"$libobj"; then
- 	$show "$mv $output_obj $libobj"
- 	if $run $mv $output_obj $libobj; then :
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
-       fi
- 
-       # If we have no pic_flag, then copy the object into place and finish.
-       if test -z "$pic_flag" && test "$build_old_libs" = yes; then
- 	# Rename the .lo from within objdir to obj
- 	if test -f $obj; then
- 	  $show $rm $obj
- 	  $run $rm $obj
- 	fi
- 
- 	$show "$mv $libobj $obj"
- 	if $run $mv $libobj $obj; then :
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
- 
- 	xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- 	if test "X$xdir" = "X$obj"; then
- 	  xdir="."
- 	else
- 	  xdir="$xdir"
- 	fi
- 	baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
- 	libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- 	# Now arrange that obj and lo_libobj become the same file
- 	$show "(cd $xdir && $LN_S $baseobj $libobj)"
- 	if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
- 	  exit 0
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
-       fi
- 
-       # Allow error messages only from the first compilation.
-       suppress_output=' >/dev/null 2>&1'
-     fi
- 
-     # Only build a position-dependent object if we build old libraries.
-     if test "$build_old_libs" = yes; then
-       command="$base_compile $srcfile"
-       if test "$compiler_c_o" = yes; then
- 	command="$command -o $obj"
- 	output_obj="$obj"
-       fi
- 
-       # Suppress compiler output if we already did a PIC compilation.
-       command="$command$suppress_output"
-       $run $rm "$output_obj"
-       $show "$command"
-       if $run eval "$command"; then :
-       else
- 	$run $rm $removelist
- 	exit 1
-       fi
- 
-       if test "$need_locks" = warn &&
- 	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- 	echo "\
- *** ERROR, $lockfile contains:
- `cat $lockfile 2>/dev/null`
- 
- but it should contain:
- $srcfile
- 
- This indicates that another process is trying to use the same
- temporary object file, and libtool could not work around it because
- your compiler does not support \`-c' and \`-o' together.  If you
- repeat this compilation, it may succeed, by chance, but you had better
- avoid parallel builds (make -j) in this platform, or get a better
- compiler."
- 
- 	$run $rm $removelist
- 	exit 1
-       fi
- 
-       # Just move the object if needed
-       if test x"$output_obj" != x"$obj"; then
- 	$show "$mv $output_obj $obj"
- 	if $run $mv $output_obj $obj; then :
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
-       fi
- 
-       # Create an invalid libtool object if no PIC, so that we do not
-       # accidentally link it into a program.
-       if test "$build_libtool_libs" != yes; then
- 	$show "echo timestamp > $libobj"
- 	$run eval "echo timestamp > \$libobj" || exit $?
-       else
- 	# Move the .lo from within objdir
- 	$show "$mv $libobj $lo_libobj"
- 	if $run $mv $libobj $lo_libobj; then :
- 	else
- 	  error=$?
- 	  $run $rm $removelist
- 	  exit $error
- 	fi
-       fi
-     fi
- 
-     # Unlock the critical section if it was locked
-     if test "$need_locks" != no; then
-       $rm "$lockfile"
-     fi
- 
-     exit 0
-     ;;
- 
-   # libtool link mode
-   link)
-     modename="$modename: link"
-     case "$host" in
-     *-*-cygwin* | *-*-mingw* | *-*-os2*)
-       # It is impossible to link a dll without this setting, and
-       # we shouldn't force the makefile maintainer to figure out
-       # which system we are compiling for in order to pass an extra
-       # flag for every libtool invokation.
-       # allow_undefined=no
- 
-       # FIXME: Unfortunately, there are problems with the above when trying
-       # to make a dll which has undefined symbols, in which case not
-       # even a static library is built.  For now, we need to specify
-       # -no-undefined on the libtool link line when we can be certain
-       # that all symbols are satisfied, otherwise we get a static library.
-       allow_undefined=yes
- 
-       # This is a source program that is used to create dlls on Windows
-       # Don't remove nor modify the starting and closing comments
- # /* ltdll.c starts here */
- # #define WIN32_LEAN_AND_MEAN
- # #include <windows.h>
- # #undef WIN32_LEAN_AND_MEAN
- # #include <stdio.h>
- #
- # #ifndef __CYGWIN__
- # #  ifdef __CYGWIN32__
- # #    define __CYGWIN__ __CYGWIN32__
- # #  endif
- # #endif
- #
- # #ifdef __cplusplus
- # extern "C" {
- # #endif
- # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
- # #ifdef __cplusplus
- # }
- # #endif
- #
- # #ifdef __CYGWIN__
- # #include <cygwin/cygwin_dll.h>
- # DECLARE_CYGWIN_DLL( DllMain );
- # #endif
- # HINSTANCE __hDllInstance_base;
- #
- # BOOL APIENTRY
- # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
- # {
- #   __hDllInstance_base = hInst;
- #   return TRUE;
- # }
- # /* ltdll.c ends here */
-       # This is a source program that is used to create import libraries
-       # on Windows for dlls which lack them. Don't remove nor modify the
-       # starting and closing comments
- # /* impgen.c starts here */
- # /*   Copyright (C) 1999 Free Software Foundation, Inc.
- # 
- #  This file is part of GNU libtool.
- # 
- #  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 02111-1307, USA.
- #  */
- # 
- #  #include <stdio.h>		/* for printf() */
- #  #include <unistd.h>		/* for open(), lseek(), read() */
- #  #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
- #  #include <string.h>		/* for strdup() */
- # 
- #  static unsigned int
- #  pe_get16 (fd, offset)
- #       int fd;
- #       int offset;
- #  {
- #    unsigned char b[2];
- #    lseek (fd, offset, SEEK_SET);
- #    read (fd, b, 2);
- #    return b[0] + (b[1]<<8);
- #  }
- # 
- #  static unsigned int
- #  pe_get32 (fd, offset)
- #      int fd;
- #      int offset;
- #  {
- #    unsigned char b[4];
- #    lseek (fd, offset, SEEK_SET);
- #    read (fd, b, 4);
- #    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
- #  }
- # 
- #  static unsigned int
- #  pe_as32 (ptr)
- #       void *ptr;
- #  {
- #    unsigned char *b = ptr;
- #    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
- #  }
- # 
- #  int
- #  main (argc, argv)
- #      int argc;
- #      char *argv[];
- #  {
- #      int dll;
- #      unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
- #      unsigned long export_rva, export_size, nsections, secptr, expptr;
- #      unsigned long name_rvas, nexp;
- #      unsigned char *expdata, *erva;
- #      char *filename, *dll_name;
- # 
- #      filename = argv[1];
- # 
- #      dll = open(filename, O_RDONLY|O_BINARY);
- #      if (!dll)
- #  	return 1;
- # 
- #      dll_name = filename;
- #    
- #      for (i=0; filename[i]; i++)
- #  	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
- #  	    dll_name = filename + i +1;
- # 
- #      pe_header_offset = pe_get32 (dll, 0x3c);
- #      opthdr_ofs = pe_header_offset + 4 + 20;
- #      num_entries = pe_get32 (dll, opthdr_ofs + 92);
- # 
- #      if (num_entries < 1) /* no exports */
- #  	return 1;
- # 
- #      export_rva = pe_get32 (dll, opthdr_ofs + 96);
- #      export_size = pe_get32 (dll, opthdr_ofs + 100);
- #      nsections = pe_get16 (dll, pe_header_offset + 4 +2);
- #      secptr = (pe_header_offset + 4 + 20 +
- #  	      pe_get16 (dll, pe_header_offset + 4 + 16));
- # 
- #      expptr = 0;
- #      for (i = 0; i < nsections; i++)
- #      {
- #  	char sname[8];
- #  	unsigned long secptr1 = secptr + 40 * i;
- #  	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
- #  	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
- #  	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
- #  	lseek(dll, secptr1, SEEK_SET);
- #  	read(dll, sname, 8);
- #  	if (vaddr <= export_rva && vaddr+vsize > export_rva)
- #  	{
- #  	    expptr = fptr + (export_rva - vaddr);
- #  	    if (export_rva + export_size > vaddr + vsize)
- #  		export_size = vsize - (export_rva - vaddr);
- #  	    break;
- #  	}
- #      }
- # 
- #      expdata = (unsigned char*)malloc(export_size);
- #      lseek (dll, expptr, SEEK_SET);
- #      read (dll, expdata, export_size);
- #      erva = expdata - export_rva;
- # 
- #      nexp = pe_as32 (expdata+24);
- #      name_rvas = pe_as32 (expdata+32);
- # 
- #      printf ("EXPORTS\n");
- #      for (i = 0; i<nexp; i++)
- #      {
- #  	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
- #  	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
- #      }
- # 
- #      return 0;
- #  }
- # /* impgen.c ends here */
-       ;;
-     *)
-       allow_undefined=yes
-       ;;
-     esac
-     compile_command="$nonopt"
-     finalize_command="$nonopt"
- 
-     compile_rpath=
-     finalize_rpath=
-     compile_shlibpath=
-     finalize_shlibpath=
-     convenience=
-     old_convenience=
-     deplibs=
-     linkopts=
- 
-     if test -n "$shlibpath_var"; then
-       # get the directories listed in $shlibpath_var
-       eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
-     else
-       lib_search_path=
-     fi
-     # now prepend the system-specific ones
-     eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
-     eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-     
-     avoid_version=no
-     dlfiles=
-     dlprefiles=
-     dlself=no
-     export_dynamic=no
-     export_symbols=
-     export_symbols_regex=
-     generated=
-     libobjs=
-     link_against_libtool_libs=
-     ltlibs=
-     module=no
-     objs=
-     prefer_static_libs=no
-     preload=no
-     prev=
-     prevarg=
-     release=
-     rpath=
-     xrpath=
-     perm_rpath=
-     temp_rpath=
-     thread_safe=no
-     vinfo=
- 
-     # We need to know -static, to get the right output filenames.
-     for arg
-     do
-       case "$arg" in
-       -all-static | -static)
- 	if test "X$arg" = "X-all-static"; then
- 	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- 	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
- 	  fi
- 	  if test -n "$link_static_flag"; then
- 	    dlopen_self=$dlopen_self_static
- 	  fi
- 	else
- 	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
- 	    dlopen_self=$dlopen_self_static
- 	  fi
- 	fi
- 	build_libtool_libs=no
- 	build_old_libs=yes
- 	prefer_static_libs=yes
- 	break
- 	;;
-       esac
-     done
- 
-     # See if our shared archives depend on static archives.
-     test -n "$old_archive_from_new_cmds" && build_old_libs=yes
- 
-     # Go through the arguments, transforming them on the way.
-     while test $# -gt 0; do
-       arg="$1"
-       shift
- 
-       # If the previous option needs an argument, assign it.
-       if test -n "$prev"; then
- 	case "$prev" in
- 	output)
- 	  compile_command="$compile_command @OUTPUT@"
- 	  finalize_command="$finalize_command @OUTPUT@"
- 	  ;;
- 	esac
- 
- 	case "$prev" in
- 	dlfiles|dlprefiles)
- 	  if test "$preload" = no; then
- 	    # Add the symbol object into the linking commands.
- 	    compile_command="$compile_command @SYMFILE@"
- 	    finalize_command="$finalize_command @SYMFILE@"
- 	    preload=yes
- 	  fi
- 	  case "$arg" in
- 	  *.la | *.lo) ;;  # We handle these cases below.
- 	  force)
- 	    if test "$dlself" = no; then
- 	      dlself=needless
- 	      export_dynamic=yes
- 	    fi
- 	    prev=
- 	    continue
- 	    ;;
- 	  self)
- 	    if test "$prev" = dlprefiles; then
- 	      dlself=yes
- 	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
- 	      dlself=yes
- 	    else
- 	      dlself=needless
- 	      export_dynamic=yes
- 	    fi
- 	    prev=
- 	    continue
- 	    ;;
- 	  *)
- 	    if test "$prev" = dlfiles; then
- 	      dlfiles="$dlfiles $arg"
- 	    else
- 	      dlprefiles="$dlprefiles $arg"
- 	    fi
- 	    prev=
- 	    ;;
- 	  esac
- 	  ;;
- 	expsyms)
- 	  export_symbols="$arg"
- 	  if test ! -f "$arg"; then
- 	    $echo "$modename: symbol file \`$arg' does not exist"
- 	    exit 1
- 	  fi
- 	  prev=
- 	  continue
- 	  ;;
- 	expsyms_regex)
- 	  export_symbols_regex="$arg"
- 	  prev=
- 	  continue
- 	  ;;
- 	release)
- 	  release="-$arg"
- 	  prev=
- 	  continue
- 	  ;;
- 	rpath | xrpath)
- 	  # We need an absolute path.
- 	  case "$arg" in
- 	  [\\/]* | [A-Za-z]:[\\/]*) ;;
- 	  *)
- 	    $echo "$modename: only absolute run-paths are allowed" 1>&2
- 	    exit 1
- 	    ;;
- 	  esac
- 	  if test "$prev" = rpath; then
- 	    case "$rpath " in
- 	    *" $arg "*) ;;
- 	    *) rpath="$rpath $arg" ;;
- 	    esac
- 	  else
- 	    case "$xrpath " in
- 	    *" $arg "*) ;;
- 	    *) xrpath="$xrpath $arg" ;;
- 	    esac
- 	  fi
- 	  prev=
- 	  continue
- 	  ;;
- 	*)
- 	  eval "$prev=\"\$arg\""
- 	  prev=
- 	  continue
- 	  ;;
- 	esac
-       fi
- 
-       prevarg="$arg"
- 
-       case "$arg" in
-       -all-static)
- 	if test -n "$link_static_flag"; then
- 	  compile_command="$compile_command $link_static_flag"
- 	  finalize_command="$finalize_command $link_static_flag"
- 	fi
- 	continue
- 	;;
- 
-       -allow-undefined)
- 	# FIXME: remove this flag sometime in the future.
- 	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
- 	continue
- 	;;
- 
-       -avoid-version)
- 	avoid_version=yes
- 	continue
- 	;;
- 
-       -dlopen)
- 	prev=dlfiles
- 	continue
- 	;;
- 
-       -dlpreopen)
- 	prev=dlprefiles
- 	continue
- 	;;
- 
-       -export-dynamic)
- 	export_dynamic=yes
- 	continue
- 	;;
- 
-       -export-symbols | -export-symbols-regex)
- 	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- 	  $echo "$modename: not more than one -exported-symbols argument allowed"
- 	  exit 1
- 	fi
- 	if test "X$arg" = "X-export-symbols"; then
- 	  prev=expsyms
- 	else
- 	  prev=expsyms_regex
- 	fi
- 	continue
- 	;;
- 
-       -L*)
- 	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
- 	# We need an absolute path.
- 	case "$dir" in
- 	[\\/]* | [A-Za-z]:[\\/]*) ;;
- 	*)
- 	  absdir=`cd "$dir" && pwd`
- 	  if test -z "$absdir"; then
- 	    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- 	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- 	    absdir="$dir"
- 	  fi
- 	  dir="$absdir"
- 	  ;;
- 	esac
- 	case " $deplibs " in
- 	*" $arg "*) ;;
- 	*) deplibs="$deplibs $arg";;
- 	esac
- 	case " $lib_search_path " in
- 	*" $dir "*) ;;
- 	*) lib_search_path="$lib_search_path $dir";;
- 	esac
- 	case "$host" in
- 	*-*-cygwin* | *-*-mingw* | *-*-os2*)
- 	  dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- 	  case ":$dllsearchpath:" in
- 	  ::) dllsearchpath="$dllsearchdir";;
- 	  *":$dllsearchdir:"*) ;;
- 	  *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
- 	  esac
- 	  ;;
- 	esac
- 	;;
- 
-       -l*)
- 	if test "$arg" = "-lc"; then
- 	  case "$host" in
- 	  *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- 	    # These systems don't actually have c library (as such)
- 	    continue
- 	    ;;
- 	  esac
- 	elif test "$arg" = "-lm"; then
- 	  case "$host" in
- 	  *-*-cygwin* | *-*-beos*)
- 	    # These systems don't actually have math library (as such)
- 	    continue
- 	    ;;
- 	  esac
- 	fi
- 	deplibs="$deplibs $arg"
- 	;;
- 
-       -module)
- 	module=yes
- 	continue
- 	;;
- 
-       -no-undefined)
- 	allow_undefined=no
- 	continue
- 	;;
- 
-       -o) prev=output ;;
- 
-       -release)
- 	prev=release
- 	continue
- 	;;
- 
-       -rpath)
- 	prev=rpath
- 	continue
- 	;;
- 
-       -R)
- 	prev=xrpath
- 	continue
- 	;;
- 
-       -R*)
- 	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
- 	# We need an absolute path.
- 	case "$dir" in
- 	[\\/]* | [A-Za-z]:[\\/]*) ;;
- 	*)
- 	  $echo "$modename: only absolute run-paths are allowed" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 	case "$xrpath " in
- 	*" $dir "*) ;;
- 	*) xrpath="$xrpath $dir" ;;
- 	esac
- 	continue
- 	;;
- 
-       -static)
- 	# If we have no pic_flag, then this is the same as -all-static.
- 	if test -z "$pic_flag" && test -n "$link_static_flag"; then
- 	  compile_command="$compile_command $link_static_flag"
- 	  finalize_command="$finalize_command $link_static_flag"
- 	fi
- 	continue
- 	;;
- 
-       -thread-safe)
- 	thread_safe=yes
- 	continue
- 	;;
- 
-       -version-info)
- 	prev=vinfo
- 	continue
- 	;;
- 
-       # Some other compiler flag.
-       -* | +*)
- 	# Unknown arguments in both finalize_command and compile_command need
- 	# to be aesthetically quoted because they are evaled later.
- 	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- 	case "$arg" in
- 	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	  arg="\"$arg\""
- 	  ;;
- 	esac
- 	;;
- 
-       *.o | *.obj | *.a | *.lib)
- 	# A standard object.
- 	objs="$objs $arg"
- 	;;
- 
-       *.lo)
- 	# A library object.
- 	if test "$prev" = dlfiles; then
- 	  dlfiles="$dlfiles $arg"
- 	  if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
- 	    prev=
- 	    continue
- 	  else
- 	    # If libtool objects are unsupported, then we need to preload.
- 	    prev=dlprefiles
- 	  fi
- 	fi
- 
- 	if test "$prev" = dlprefiles; then
- 	  # Preload the old-style object.
- 	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
- 	  prev=
- 	fi
- 	libobjs="$libobjs $arg"
- 	;;
- 
-       *.la)
- 	# A libtool-controlled library.
- 
- 	dlname=
- 	libdir=
- 	library_names=
- 	old_library=
- 
- 	# Check to see that this really is a libtool archive.
- 	if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- 	else
- 	  $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
- 	  exit 1
- 	fi
- 
- 	# If the library was installed with an old release of libtool,
- 	# it will not redefine variable installed.
- 	installed=yes
- 
- 	# Read the .la file
- 	# If there is no directory component, then add one.
- 	case "$arg" in
- 	*/* | *\\*) . $arg ;;
- 	*) . ./$arg ;;
- 	esac
- 
- 	# Get the name of the library we link against.
- 	linklib=
- 	for l in $old_library $library_names; do
- 	  linklib="$l"
- 	done
- 
- 	if test -z "$linklib"; then
- 	  $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
- 	  exit 1
- 	fi
- 
- 	# Find the relevant object directory and library name.
- 	name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
- 
- 	if test "X$installed" = Xyes; then
- 	  dir="$libdir"
- 	else
- 	  dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- 	  if test "X$dir" = "X$arg"; then
- 	    dir="$objdir"
- 	  else
- 	    dir="$dir/$objdir"
- 	  fi
- 	fi
- 
- 	if test -n "$dependency_libs"; then
- 	  # Extract -R and -L from dependency_libs
- 	  temp_deplibs=
- 	  for deplib in $dependency_libs; do
- 	    case "$deplib" in
- 	    -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
- 		 case " $rpath $xrpath " in
- 		 *" $temp_xrpath "*) ;;
- 		 *) xrpath="$xrpath $temp_xrpath";;
- 		 esac;;
- 	    -L*) case "$compile_command $temp_deplibs " in
- 		 *" $deplib "*) ;;
- 		 *) temp_deplibs="$temp_deplibs $deplib";;
- 		 esac
- 		 temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- 		 case " $lib_search_path " in
- 		 *" $temp_dir "*) ;;
- 		 *) lib_search_path="$lib_search_path $temp_dir";;
- 		 esac
- 		 ;;
- 	    *) temp_deplibs="$temp_deplibs $deplib";;
- 	    esac
- 	  done
- 	  dependency_libs="$temp_deplibs"
- 	fi
- 
- 	if test -z "$libdir"; then
- 	  # It is a libtool convenience library, so add in its objects.
- 	  convenience="$convenience $dir/$old_library"
- 	  old_convenience="$old_convenience $dir/$old_library"
- 	  deplibs="$deplibs$dependency_libs"
- 	  compile_command="$compile_command $dir/$old_library$dependency_libs"
- 	  finalize_command="$finalize_command $dir/$old_library$dependency_libs"
- 	  continue
- 	fi
- 
- 	# This library was specified with -dlopen.
- 	if test "$prev" = dlfiles; then
- 	  dlfiles="$dlfiles $arg"
- 	  if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
- 	    # If there is no dlname, no dlopen support or we're linking statically,
- 	    # we need to preload.
- 	    prev=dlprefiles
- 	  else
- 	    # We should not create a dependency on this library, but we
- 	    # may need any libraries it requires.
- 	    compile_command="$compile_command$dependency_libs"
- 	    finalize_command="$finalize_command$dependency_libs"
- 	    prev=
- 	    continue
- 	  fi
- 	fi
- 
- 	# The library was specified with -dlpreopen.
- 	if test "$prev" = dlprefiles; then
- 	  # Prefer using a static library (so that no silly _DYNAMIC symbols
- 	  # are required to link).
- 	  if test -n "$old_library"; then
- 	    dlprefiles="$dlprefiles $dir/$old_library"
- 	  else
- 	    dlprefiles="$dlprefiles $dir/$linklib"
- 	  fi
- 	  prev=
- 	fi
- 
- 	if test -n "$library_names" &&
- 	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- 	  link_against_libtool_libs="$link_against_libtool_libs $arg"
- 	  if test -n "$shlibpath_var"; then
- 	    # Make sure the rpath contains only unique directories.
- 	    case "$temp_rpath " in
- 	    *" $dir "*) ;;
- 	    *) temp_rpath="$temp_rpath $dir" ;;
- 	    esac
- 	  fi
- 
- 	  # We need an absolute path.
- 	  case "$dir" in
- 	  [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- 	  *)
- 	    absdir=`cd "$dir" && pwd`
- 	    if test -z "$absdir"; then
- 	      $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- 	      $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- 	      absdir="$dir"
- 	    fi
- 	    ;;
- 	  esac
- 	  
- 	  # This is the magic to use -rpath.
- 	  # Skip directories that are in the system default run-time
- 	  # search path, unless they have been requested with -R.
- 	  case " $sys_lib_dlsearch_path " in
- 	  *" $absdir "*) ;;
- 	  *)
- 	    case "$compile_rpath " in
- 	    *" $absdir "*) ;;
- 	    *) compile_rpath="$compile_rpath $absdir" 
- 	    esac
- 	    ;;
- 	  esac
- 
- 	  case " $sys_lib_dlsearch_path " in
- 	  *" $libdir "*) ;;
- 	  *)
- 	    case "$finalize_rpath " in
- 	    *" $libdir "*) ;;
- 	    *) finalize_rpath="$finalize_rpath $libdir"
- 	    esac
- 	    ;;
- 	  esac
- 
- 	  lib_linked=yes
- 	  case "$hardcode_action" in
- 	  immediate | unsupported)
- 	    if test "$hardcode_direct" = no; then
- 	      compile_command="$compile_command $dir/$linklib"
- 	      deplibs="$deplibs $dir/$linklib"
- 	      case "$host" in
- 	      *-*-cygwin* | *-*-mingw* | *-*-os2*)
- 		dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- 		if test -n "$dllsearchpath"; then
- 		  dllsearchpath="$dllsearchpath:$dllsearchdir"
- 		else
- 		  dllsearchpath="$dllsearchdir"
- 		fi
- 		;;
- 	      esac
- 	    elif test "$hardcode_minus_L" = no; then
- 	      case "$host" in
- 	      *-*-sunos*)
- 		compile_shlibpath="$compile_shlibpath$dir:"
- 		;;
- 	      esac
- 	      case "$compile_command " in
- 	      *" -L$dir "*) ;;
- 	      *) compile_command="$compile_command -L$dir";;
- 	      esac
- 	      compile_command="$compile_command -l$name"
- 	      deplibs="$deplibs -L$dir -l$name"
- 	    elif test "$hardcode_shlibpath_var" = no; then
- 	      case ":$compile_shlibpath:" in
- 	      *":$dir:"*) ;;
- 	      *) compile_shlibpath="$compile_shlibpath$dir:";;
- 	      esac
- 	      compile_command="$compile_command -l$name"
- 	      deplibs="$deplibs -l$name"
- 	    else
- 	      lib_linked=no
- 	    fi
- 	    ;;
- 
- 	  relink)
- 	    if test "$hardcode_direct" = yes; then
- 	      compile_command="$compile_command $absdir/$linklib"
- 	      deplibs="$deplibs $absdir/$linklib"
- 	    elif test "$hardcode_minus_L" = yes; then
- 	      case "$compile_command " in
- 	      *" -L$absdir "*) ;;
- 	      *) compile_command="$compile_command -L$absdir";;
- 	      esac
- 	      compile_command="$compile_command -l$name"
- 	      deplibs="$deplibs -L$absdir -l$name"
- 	    elif test "$hardcode_shlibpath_var" = yes; then
- 	      case ":$compile_shlibpath:" in
- 	      *":$absdir:"*) ;;
- 	      *) compile_shlibpath="$compile_shlibpath$absdir:";;
- 	      esac
- 	      compile_command="$compile_command -l$name"
- 	      deplibs="$deplibs -l$name"
- 	    else
- 	      lib_linked=no
- 	    fi
- 	    ;;
- 
- 	  *)
- 	    lib_linked=no
- 	    ;;
- 	  esac
- 
- 	  if test "$lib_linked" != yes; then
- 	    $echo "$modename: configuration error: unsupported hardcode properties"
- 	    exit 1
- 	  fi
- 
- 	  # Finalize command for both is simple: just hardcode it.
- 	  if test "$hardcode_direct" = yes; then
- 	    finalize_command="$finalize_command $libdir/$linklib"
- 	  elif test "$hardcode_minus_L" = yes; then
- 	    case "$finalize_command " in
- 	    *" -L$libdir "*) ;;
- 	    *) finalize_command="$finalize_command -L$libdir";;
- 	    esac
- 	    finalize_command="$finalize_command -l$name"
- 	  elif test "$hardcode_shlibpath_var" = yes; then
- 	    case ":$finalize_shlibpath:" in
- 	    *":$libdir:"*) ;;
- 	    *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
- 	    esac
- 	    finalize_command="$finalize_command -l$name"
- 	  else
- 	    # We cannot seem to hardcode it, guess we'll fake it.
- 	    case "$finalize_command " in
- 	    *" -L$dir "*) ;;
- 	    *) finalize_command="$finalize_command -L$libdir";;
- 	    esac
- 	    finalize_command="$finalize_command -l$name"
- 	  fi
- 	else
- 	  # Transform directly to old archives if we don't build new libraries.
- 	  if test -n "$pic_flag" && test -z "$old_library"; then
- 	    $echo "$modename: cannot find static library for \`$arg'" 1>&2
- 	    exit 1
- 	  fi
- 
- 	  # Here we assume that one of hardcode_direct or hardcode_minus_L
- 	  # is not unsupported.  This is valid on all known static and
- 	  # shared platforms.
- 	  if test "$hardcode_direct" != unsupported; then
- 	    test -n "$old_library" && linklib="$old_library"
- 	    compile_command="$compile_command $dir/$linklib"
- 	    finalize_command="$finalize_command $dir/$linklib"
- 	  else
- 	    case "$compile_command " in
- 	    *" -L$dir "*) ;;
- 	    *) compile_command="$compile_command -L$dir";;
- 	    esac
- 	    compile_command="$compile_command -l$name"
- 	    case "$finalize_command " in
- 	    *" -L$dir "*) ;;
- 	    *) finalize_command="$finalize_command -L$dir";;
- 	    esac
- 	    finalize_command="$finalize_command -l$name"
- 	  fi
- 	fi
- 
- 	# Add in any libraries that this one depends upon.
- 	compile_command="$compile_command$dependency_libs"
- 	finalize_command="$finalize_command$dependency_libs"
- 	continue
- 	;;
- 
-       # Some other compiler argument.
-       *)
- 	# Unknown arguments in both finalize_command and compile_command need
- 	# to be aesthetically quoted because they are evaled later.
- 	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- 	case "$arg" in
- 	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	  arg="\"$arg\""
- 	  ;;
- 	esac
- 	;;
-       esac
- 
-       # Now actually substitute the argument into the commands.
-       if test -n "$arg"; then
- 	compile_command="$compile_command $arg"
- 	finalize_command="$finalize_command $arg"
-       fi
-     done
- 
-     if test -n "$prev"; then
-       $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-       eval arg=\"$export_dynamic_flag_spec\"
-       compile_command="$compile_command $arg"
-       finalize_command="$finalize_command $arg"
-     fi
- 
-     oldlibs=
-     # calculate the name of the file, without its directory
-     outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-     libobjs_save="$libobjs"
- 
-     case "$output" in
-     "")
-       $echo "$modename: you must specify an output file" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-       ;;
- 
-     *.a | *.lib)
-       if test -n "$link_against_libtool_libs"; then
- 	$echo "$modename: error: cannot link libtool libraries into archives" 1>&2
- 	exit 1
-       fi
- 
-       if test -n "$deplibs"; then
- 	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
-       fi
- 
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- 	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$rpath"; then
- 	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$xrpath"; then
- 	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$vinfo"; then
- 	$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$release"; then
- 	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
-       fi
- 
-       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- 	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
-       fi
- 
-       # Now set the variables for building old libraries.
-       build_libtool_libs=no
-       oldlibs="$output"
-       ;;
- 
-     *.la)
-       # Make sure we only generate libraries of the form `libNAME.la'.
-       case "$outputname" in
-       lib*)
- 	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
- 	eval libname=\"$libname_spec\"
- 	;;
-       *)
- 	if test "$module" = no; then
- 	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	fi
- 	if test "$need_lib_prefix" != no; then
- 	  # Add the "lib" prefix for modules if required
- 	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- 	  eval libname=\"$libname_spec\"
- 	else
- 	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- 	fi
- 	;;
-       esac
- 
-       output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-       if test "X$output_objdir" = "X$output"; then
- 	output_objdir="$objdir"
-       else
- 	output_objdir="$output_objdir/$objdir"
-       fi
- 
-       if test -n "$objs"; then
- 	$echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
- 	exit 1
-       fi
- 
-       # How the heck are we supposed to write a wrapper for a shared library?
-       if test -n "$link_against_libtool_libs"; then
- 	 $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
- 	 exit 1
-       fi
- 
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- 	$echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
-       fi
- 
-       set dummy $rpath
-       if test $# -gt 2; then
- 	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
-       fi
-       install_libdir="$2"
- 
-       oldlibs=
-       if test -z "$rpath"; then
- 	if test "$build_libtool_libs" = yes; then
- 	  # Building a libtool convenience library.
- 	  libext=al
- 	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
- 	  build_libtool_libs=convenience
- 	  build_old_libs=yes
- 	fi
- 	dependency_libs="$deplibs"
- 
- 	if test -n "$vinfo"; then
- 	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
- 	fi
- 
- 	if test -n "$release"; then
- 	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
- 	fi
-       else
- 
- 	# Parse the version information argument.
- 	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=':'
- 	set dummy $vinfo 0 0 0
- 	IFS="$save_ifs"
- 
- 	if test -n "$8"; then
- 	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	fi
- 
- 	current="$2"
- 	revision="$3"
- 	age="$4"
- 
- 	# Check that each of the things are valid numbers.
- 	case "$current" in
- 	0 | [1-9] | [1-9][0-9]*) ;;
- 	*)
- 	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
- 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	case "$revision" in
- 	0 | [1-9] | [1-9][0-9]*) ;;
- 	*)
- 	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
- 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	case "$age" in
- 	0 | [1-9] | [1-9][0-9]*) ;;
- 	*)
- 	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
- 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	if test $age -gt $current; then
- 	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- 	  exit 1
- 	fi
- 
- 	# Calculate the version variables.
- 	major=
- 	versuffix=
- 	verstring=
- 	case "$version_type" in
- 	none) ;;
- 
- 	irix)
- 	  major=`expr $current - $age + 1`
- 	  versuffix="$major.$revision"
- 	  verstring="sgi$major.$revision"
- 
- 	  # Add in all the interfaces that we are compatible with.
- 	  loop=$revision
- 	  while test $loop != 0; do
- 	    iface=`expr $revision - $loop`
- 	    loop=`expr $loop - 1`
- 	    verstring="sgi$major.$iface:$verstring"
- 	  done
- 	  ;;
- 
- 	linux)
- 	  major=.`expr $current - $age`
- 	  versuffix="$major.$age.$revision"
- 	  ;;
- 
- 	osf)
- 	  major=.`expr $current - $age`
- 	  versuffix=".$current.$age.$revision"
- 	  verstring="$current.$age.$revision"
- 
- 	  # Add in all the interfaces that we are compatible with.
- 	  loop=$age
- 	  while test $loop != 0; do
- 	    iface=`expr $current - $loop`
- 	    loop=`expr $loop - 1`
- 	    verstring="$verstring:${iface}.0"
- 	  done
- 
- 	  # Make executables depend on our current version.
- 	  verstring="$verstring:${current}.0"
- 	  ;;
- 
- 	sunos)
- 	  major=".$current"
- 	  versuffix=".$current.$revision"
- 	  ;;
- 
- 	freebsd-aout)
- 	  major=".$current"
- 	  versuffix=".$current.$revision";
- 	  ;;
- 
- 	freebsd-elf)
- 	  major=".$current"
- 	  versuffix=".$current";
- 	  ;;
- 
- 	windows)
- 	  # Like Linux, but with '-' rather than '.', since we only
- 	  # want one extension on Windows 95.
- 	  major=`expr $current - $age`
- 	  versuffix="-$major-$age-$revision"
- 	  ;;
- 
- 	*)
- 	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
- 	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	# Clear the version info if we defaulted, and they specified a release.
- 	if test -z "$vinfo" && test -n "$release"; then
- 	  major=
- 	  verstring="0.0"
- 	  if test "$need_version" = no; then
- 	    versuffix=
- 	  else
- 	    versuffix=".0.0"
- 	  fi
- 	fi
- 
- 	# Remove version info from name if versioning should be avoided
- 	if test "$avoid_version" = yes && test "$need_version" = no; then
- 	  major=
- 	  versuffix=
- 	  verstring=""
- 	fi
- 	
- 	# Check to see if the archive will have undefined symbols.
- 	if test "$allow_undefined" = yes; then
- 	  if test "$allow_undefined_flag" = unsupported; then
- 	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
- 	    build_libtool_libs=no
- 	    build_old_libs=yes
- 	  fi
- 	else
- 	  # Don't allow undefined symbols.
- 	  allow_undefined_flag="$no_undefined_flag"
- 	fi
- 
- 	dependency_libs="$deplibs"
- 	case "$host" in
- 	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- 	  # these systems don't actually have a c library (as such)!
- 	  ;;
- 	*)
- 	  # Add libc to deplibs on all other systems.
- 	  deplibs="$deplibs -lc"
- 	  ;;
- 	esac
-       fi
- 
-       # Create the output directory, or remove our outputs if we need to.
-       if test -d $output_objdir; then
- 	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
- 	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
-       else
- 	$show "$mkdir $output_objdir"
- 	$run $mkdir $output_objdir
- 	status=$?
- 	if test $status -ne 0 && test ! -d $output_objdir; then
- 	  exit $status
- 	fi
-       fi
- 
-       # Now set the variables for building old libraries.
-       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- 	oldlibs="$oldlibs $output_objdir/$libname.$libext"
- 
- 	# Transform .lo files to .o files.
- 	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
-       fi
- 
-       if test "$build_libtool_libs" = yes; then
- 	# Transform deplibs into only deplibs that can be linked in shared.
- 	name_save=$name
- 	libname_save=$libname
- 	release_save=$release
- 	versuffix_save=$versuffix
- 	major_save=$major
- 	# I'm not sure if I'm treating the release correctly.  I think
- 	# release should show up in the -l (ie -lgmp5) so we don't want to
- 	# add it in twice.  Is that correct?
- 	release=""
- 	versuffix=""
- 	major=""
- 	newdeplibs=
- 	droppeddeps=no
- 	case "$deplibs_check_method" in
- 	pass_all)
- 	  # Don't check for shared/static.  Everything works.
- 	  # This might be a little naive.  We might want to check
- 	  # whether the library exists or not.  But this is on
- 	  # osf3 & osf4 and I'm not really sure... Just
- 	  # implementing what was already the behaviour.
- 	  newdeplibs=$deplibs
- 	  ;;
- 	test_compile)
- 	  # This code stresses the "libraries are programs" paradigm to its
- 	  # limits. Maybe even breaks it.  We compile a program, linking it
- 	  # against the deplibs as a proxy for the library.  Then we can check
- 	  # whether they linked in statically or dynamically with ldd.
- 	  $rm conftest.c
- 	  cat > conftest.c <<EOF
- 	  int main() { return 0; }
- EOF
- 	  $rm conftest
- 	  $CC -o conftest conftest.c $deplibs
- 	  if test $? -eq 0 ; then
- 	    ldd_output=`ldd conftest`
- 	    for i in $deplibs; do
- 	      name="`expr $i : '-l\(.*\)'`"
- 	      # If $name is empty we are operating on a -L argument.
- 	      if test "$name" != "" ; then
- 		libname=`eval \\$echo \"$libname_spec\"`
- 		deplib_matches=`eval \\$echo \"$library_names_spec\"`
- 		set dummy $deplib_matches
- 		deplib_match=$2
- 		if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- 		  newdeplibs="$newdeplibs $i"
- 		else
- 		  droppeddeps=yes
- 		  echo
- 		  echo "*** Warning: This library needs some functionality provided by $i."
- 		  echo "*** I have the capability to make that library automatically link in when"
- 		  echo "*** you link to this library.  But I can only do this if you have a"
- 		  echo "*** shared version of the library, which you do not appear to have."
- 		fi
- 	      else
- 		newdeplibs="$newdeplibs $i"
- 	      fi
- 	    done
- 	  else
- 	    # Error occured in the first compile.  Let's try to salvage the situation:
- 	    # Compile a seperate program for each library.
- 	    for i in $deplibs; do
- 	      name="`expr $i : '-l\(.*\)'`"
- 	     # If $name is empty we are operating on a -L argument.
- 	      if test "$name" != "" ; then
- 		$rm conftest
- 		$CC -o conftest conftest.c $i
- 		# Did it work?
- 		if test $? -eq 0 ; then
- 		  ldd_output=`ldd conftest`
- 		  libname=`eval \\$echo \"$libname_spec\"`
- 		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
- 		  set dummy $deplib_matches
- 		  deplib_match=$2
- 		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- 		    newdeplibs="$newdeplibs $i"
- 		  else
- 		    droppeddeps=yes
- 		    echo
- 		    echo "*** Warning: This library needs some functionality provided by $i."
- 		    echo "*** I have the capability to make that library automatically link in when"
- 		    echo "*** you link to this library.  But I can only do this if you have a"
- 		    echo "*** shared version of the library, which you do not appear to have."
- 		  fi
- 		else
- 		  droppeddeps=yes
- 		  echo
- 		  echo "*** Warning!  Library $i is needed by this library but I was not able to"
- 		  echo "***  make it link in!  You will probably need to install it or some"
- 		  echo "*** library that it depends on before this library will be fully"
- 		  echo "*** functional.  Installing it before continuing would be even better."
- 		fi
- 	      else
- 		newdeplibs="$newdeplibs $i"
- 	      fi
- 	    done
- 	  fi
- 	  ;;
- 	file_magic*)
- 	  set dummy $deplibs_check_method
- 	  file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
- 	  for a_deplib in $deplibs; do
- 	    name="`expr $a_deplib : '-l\(.*\)'`"
- 	    # If $name is empty we are operating on a -L argument.
- 	    if test "$name" != "" ; then
- 	      libname=`eval \\$echo \"$libname_spec\"`
- 	      for i in $lib_search_path; do
- 		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- 		    for potent_lib in $potential_libs; do
- 		      # Follow soft links.
- 		      if ls -lLd "$potent_lib" 2>/dev/null \
- 			 | grep " -> " >/dev/null; then
- 			continue 
- 		      fi
- 		      # The statement above tries to avoid entering an
- 		      # endless loop below, in case of cyclic links.
- 		      # We might still enter an endless loop, since a link
- 		      # loop can be closed while we follow links,
- 		      # but so what?
- 		      potlib="$potent_lib"
- 		      while test -h "$potlib" 2>/dev/null; do
- 			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
- 			case "$potliblink" in
- 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- 			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
- 			esac
- 		      done
- 		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- 			 | sed 10q \
- 			 | egrep "$file_magic_regex" > /dev/null; then
- 			newdeplibs="$newdeplibs $a_deplib"
- 			a_deplib=""
- 			break 2
- 		      fi
- 		    done
- 	      done
- 	      if test -n "$a_deplib" ; then
- 		droppeddeps=yes
- 		echo
- 		echo "*** Warning: This library needs some functionality provided by $a_deplib."
- 		echo "*** I have the capability to make that library automatically link in when"
- 		echo "*** you link to this library.  But I can only do this if you have a"
- 		echo "*** shared version of the library, which you do not appear to have."
- 	      fi
- 	    else
- 	      # Add a -L argument.
- 	      newdeplibs="$newdeplibs $a_deplib"
- 	    fi
- 	  done # Gone through all deplibs.
- 	  ;;
- 	none | unknown | *)
- 	  newdeplibs=""
- 	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- 	       -e 's/ -[LR][^ ]*//g' -e 's/[ 	]//g' |
- 	     grep . >/dev/null; then
- 	    echo
- 	    if test "X$deplibs_check_method" = "Xnone"; then
- 	      echo "*** Warning: inter-library dependencies are not supported in this platform."
- 	    else
- 	      echo "*** Warning: inter-library dependencies are not known to be supported."
- 	    fi
- 	    echo "*** All declared inter-library dependencies are being dropped."
- 	    droppeddeps=yes
- 	  fi
- 	  ;;
- 	esac
- 	versuffix=$versuffix_save
- 	major=$major_save
- 	release=$release_save
- 	libname=$libname_save
- 	name=$name_save
- 
- 	if test "$droppeddeps" = yes; then
- 	  if test "$module" = yes; then
- 	    echo
- 	    echo "*** Warning: libtool could not satisfy all declared inter-library"
- 	    echo "*** dependencies of module $libname.  Therefore, libtool will create"
- 	    echo "*** a static module, that should work as long as the dlopening"
- 	    echo "*** application is linked with the -dlopen flag."
- 	    if test -z "$global_symbol_pipe"; then
- 	      echo
- 	      echo "*** However, this would only work if libtool was able to extract symbol"
- 	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- 	      echo "*** not find such a program.  So, this module is probably useless."
- 	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
- 	    fi
- 	    if test "$build_old_libs" = no; then
- 	      oldlibs="$output_objdir/$libname.$libext"
- 	      build_libtool_libs=module
- 	      build_old_libs=yes
- 	    else
- 	      build_libtool_libs=no
- 	    fi
- 	  else
- 	    echo "*** The inter-library dependencies that have been dropped here will be"
- 	    echo "*** automatically added whenever a program is linked with this library"
- 	    echo "*** or is declared to -dlopen it."
- 	  fi
- 	fi
- 	# Done checking deplibs!
- 	deplibs=$newdeplibs
-       fi
- 
-       # All the library-specific variables (install_libdir is set above).
-       library_names=
-       old_library=
-       dlname=
-       
-       # Test again, we may have decided not to build it any more
-       if test "$build_libtool_libs" = yes; then
- 	# Get the real and link names of the library.
- 	eval library_names=\"$library_names_spec\"
- 	set dummy $library_names
- 	realname="$2"
- 	shift; shift
- 
- 	if test -n "$soname_spec"; then
- 	  eval soname=\"$soname_spec\"
- 	else
- 	  soname="$realname"
- 	fi
- 
- 	lib="$output_objdir/$realname"
- 	for link
- 	do
- 	  linknames="$linknames $link"
- 	done
- 
- 	# Ensure that we have .o objects for linkers which dislike .lo
- 	# (e.g. aix) in case we are running --disable-static
- 	for obj in $libobjs; do
- 	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- 	  if test "X$xdir" = "X$obj"; then
- 	    xdir="."
- 	  else
- 	    xdir="$xdir"
- 	  fi
- 	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- 	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- 	  if test ! -f $xdir/$oldobj; then
- 	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
- 	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
- 	  fi
- 	done
- 
- 	# Use standard objects if they are pic
- 	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- 
- 	# Prepare the list of exported symbols
- 	if test -z "$export_symbols"; then
- 	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- 	    $show "generating symbol list for \`$libname.la'"
- 	    export_symbols="$output_objdir/$libname.exp"
- 	    $run $rm $export_symbols
- 	    eval cmds=\"$export_symbols_cmds\"
- 	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	    for cmd in $cmds; do
- 	      IFS="$save_ifs"
- 	      $show "$cmd"
- 	      $run eval "$cmd" || exit $?
- 	    done
- 	    IFS="$save_ifs"
- 	    if test -n "$export_symbols_regex"; then
- 	      $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- 	      $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- 	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
- 	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
- 	    fi
- 	  fi
- 	fi
- 
- 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
- 	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
- 	fi
- 
- 	if test -n "$convenience"; then
- 	  if test -n "$whole_archive_flag_spec"; then
- 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- 	  else
- 	    gentop="$output_objdir/${outputname}x"
- 	    $show "${rm}r $gentop"
- 	    $run ${rm}r "$gentop"
- 	    $show "mkdir $gentop"
- 	    $run mkdir "$gentop"
- 	    status=$?
- 	    if test $status -ne 0 && test ! -d "$gentop"; then
- 	      exit $status
- 	    fi
- 	    generated="$generated $gentop"
- 
- 	    for xlib in $convenience; do
- 	      # Extract the objects.
- 	      case "$xlib" in
- 	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- 	      *) xabs=`pwd`"/$xlib" ;;
- 	      esac
- 	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- 	      xdir="$gentop/$xlib"
- 
- 	      $show "${rm}r $xdir"
- 	      $run ${rm}r "$xdir"
- 	      $show "mkdir $xdir"
- 	      $run mkdir "$xdir"
- 	      status=$?
- 	      if test $status -ne 0 && test ! -d "$xdir"; then
- 		exit $status
- 	      fi
- 	      $show "(cd $xdir && $AR x $xabs)"
- 	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
- 
- 	      libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- 	    done
- 	  fi
- 	fi
- 
- 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- 	  eval flag=\"$thread_safe_flag_spec\"
- 	  linkopts="$linkopts $flag"
- 	fi
- 
- 	# Do each of the archive commands.
- 	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- 	  eval cmds=\"$archive_expsym_cmds\"
- 	else
- 	  eval cmds=\"$archive_cmds\"
- 	fi
- 	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	for cmd in $cmds; do
- 	  IFS="$save_ifs"
- 	  $show "$cmd"
- 	  $run eval "$cmd" || exit $?
- 	done
- 	IFS="$save_ifs"
- 
- 	# Create links to the real library.
- 	for linkname in $linknames; do
- 	  if test "$realname" != "$linkname"; then
- 	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
- 	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
- 	  fi
- 	done
- 
- 	# If -module or -export-dynamic was specified, set the dlname.
- 	if test "$module" = yes || test "$export_dynamic" = yes; then
- 	  # On all known operating systems, these are identical.
- 	  dlname="$soname"
- 	fi
-       fi
-       ;;
- 
-     *.lo | *.o | *.obj)
-       if test -n "$link_against_libtool_libs"; then
- 	$echo "$modename: error: cannot link libtool libraries into objects" 1>&2
- 	exit 1
-       fi
- 
-       if test -n "$deplibs"; then
- 	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
-       fi
- 
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- 	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
-       fi
- 
-       if test -n "$rpath"; then
- 	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
-       fi
- 
-       if test -n "$xrpath"; then
- 	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
-       fi
- 
-       if test -n "$vinfo"; then
- 	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
-       fi
- 
-       if test -n "$release"; then
- 	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
-       fi
- 
-       case "$output" in
-       *.lo)
- 	if test -n "$objs"; then
- 	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
- 	  exit 1
- 	fi
- 	libobj="$output"
- 	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
- 	;;
-       *)
- 	libobj=
- 	obj="$output"
- 	;;
-       esac
- 
-       # Delete the old objects.
-       $run $rm $obj $libobj
- 
-       # Objects from convenience libraries.  This assumes
-       # single-version convenience libraries.  Whenever we create
-       # different ones for PIC/non-PIC, this we'll have to duplicate
-       # the extraction.
-       reload_conv_objs=
-       gentop=
-       # reload_cmds runs $LD directly, so let us get rid of
-       # -Wl from whole_archive_flag_spec
-       wl= 
- 
-       if test -n "$convenience"; then
- 	if test -n "$whole_archive_flag_spec"; then
- 	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
- 	else
- 	  gentop="$output_objdir/${obj}x"
- 	  $show "${rm}r $gentop"
- 	  $run ${rm}r "$gentop"
- 	  $show "mkdir $gentop"
- 	  $run mkdir "$gentop"
- 	  status=$?
- 	  if test $status -ne 0 && test ! -d "$gentop"; then
- 	    exit $status
- 	  fi
- 	  generated="$generated $gentop"
- 
- 	  for xlib in $convenience; do
- 	    # Extract the objects.
- 	    case "$xlib" in
- 	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- 	    *) xabs=`pwd`"/$xlib" ;;
- 	    esac
- 	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- 	    xdir="$gentop/$xlib"
- 
- 	    $show "${rm}r $xdir"
- 	    $run ${rm}r "$xdir"
- 	    $show "mkdir $xdir"
- 	    $run mkdir "$xdir"
- 	    status=$?
- 	    if test $status -ne 0 && test ! -d "$xdir"; then
- 	      exit $status
- 	    fi
- 	    $show "(cd $xdir && $AR x $xabs)"
- 	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
- 
- 	    reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- 	  done
- 	fi
-       fi
- 
-       # Create the old-style object.
-       reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
- 
-       output="$obj"
-       eval cmds=\"$reload_cmds\"
-       IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
- 	IFS="$save_ifs"
- 	$show "$cmd"
- 	$run eval "$cmd" || exit $?
-       done
-       IFS="$save_ifs"
- 
-       # Exit if we aren't doing a library object file.
-       if test -z "$libobj"; then
- 	if test -n "$gentop"; then
- 	  $show "${rm}r $gentop"
- 	  $run ${rm}r $gentop
- 	fi
- 
- 	exit 0
-       fi
- 
-       if test "$build_libtool_libs" != yes; then
- 	if test -n "$gentop"; then
- 	  $show "${rm}r $gentop"
- 	  $run ${rm}r $gentop
- 	fi
- 
- 	# Create an invalid libtool object if no PIC, so that we don't
- 	# accidentally link it into a program.
- 	$show "echo timestamp > $libobj"
- 	$run eval "echo timestamp > $libobj" || exit $?
- 	exit 0
-       fi
- 
-       if test -n "$pic_flag"; then
- 	# Only do commands if we really have different PIC objects.
- 	reload_objs="$libobjs $reload_conv_objs"
- 	output="$libobj"
- 	eval cmds=\"$reload_cmds\"
- 	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	for cmd in $cmds; do
- 	  IFS="$save_ifs"
- 	  $show "$cmd"
- 	  $run eval "$cmd" || exit $?
- 	done
- 	IFS="$save_ifs"
-       else
- 	# Just create a symlink.
- 	$show $rm $libobj
- 	$run $rm $libobj
- 	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- 	if test "X$xdir" = "X$libobj"; then
- 	  xdir="."
- 	else
- 	  xdir="$xdir"
- 	fi
- 	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
- 	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- 	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
- 	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
-       fi
- 
-       if test -n "$gentop"; then
- 	$show "${rm}r $gentop"
- 	$run ${rm}r $gentop
-       fi
- 
-       exit 0
-       ;;
- 
-     # Anything else should be a program.
-     *)
-       if test -n "$vinfo"; then
- 	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
-       fi
- 
-       if test -n "$release"; then
- 	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
-       fi
- 
-       if test "$preload" = yes; then
- 	if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
- 	   test "$dlopen_self_static" = unknown; then
- 	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- 	fi 
-       fi
-     
-       if test -n "$rpath$xrpath"; then
- 	# If the user specified any rpath flags, then add them.
- 	for libdir in $rpath $xrpath; do
- 	  # This is the magic to use -rpath.
- 	  case "$compile_rpath " in
- 	  *" $libdir "*) ;;
- 	  *) compile_rpath="$compile_rpath $libdir" ;;
- 	  esac
- 	  case "$finalize_rpath " in
- 	  *" $libdir "*) ;;
- 	  *) finalize_rpath="$finalize_rpath $libdir" ;;
- 	  esac
- 	done
-       fi
- 
-       # Now hardcode the library paths
-       rpath=
-       hardcode_libdirs=
-       for libdir in $compile_rpath $finalize_rpath; do
- 	if test -n "$hardcode_libdir_flag_spec"; then
- 	  if test -n "$hardcode_libdir_separator"; then
- 	    if test -z "$hardcode_libdirs"; then
- 	      hardcode_libdirs="$libdir"
- 	    else
- 	      # Just accumulate the unique libdirs.
- 	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
- 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- 		;;
- 	      *)
- 		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- 		;;
- 	      esac
- 	    fi
- 	  else
- 	    eval flag=\"$hardcode_libdir_flag_spec\"
- 	    rpath="$rpath $flag"
- 	  fi
- 	elif test -n "$runpath_var"; then
- 	  case "$perm_rpath " in
- 	  *" $libdir "*) ;;
- 	  *) perm_rpath="$perm_rpath $libdir" ;;
- 	  esac
- 	fi
-       done
-       # Substitute the hardcoded libdirs into the rpath.
-       if test -n "$hardcode_libdir_separator" &&
- 	 test -n "$hardcode_libdirs"; then
- 	libdir="$hardcode_libdirs"
- 	eval rpath=\" $hardcode_libdir_flag_spec\"
-       fi
-       compile_rpath="$rpath"
- 
-       rpath=
-       hardcode_libdirs=
-       for libdir in $finalize_rpath; do
- 	if test -n "$hardcode_libdir_flag_spec"; then
- 	  if test -n "$hardcode_libdir_separator"; then
- 	    if test -z "$hardcode_libdirs"; then
- 	      hardcode_libdirs="$libdir"
- 	    else
- 	      # Just accumulate the unique libdirs.
- 	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
- 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- 		;;
- 	      *)
- 		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- 		;;
- 	      esac
- 	    fi
- 	  else
- 	    eval flag=\"$hardcode_libdir_flag_spec\"
- 	    rpath="$rpath $flag"
- 	  fi
- 	elif test -n "$runpath_var"; then
- 	  case "$finalize_perm_rpath " in
- 	  *" $libdir "*) ;;
- 	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
- 	  esac
- 	fi
-       done
-       # Substitute the hardcoded libdirs into the rpath.
-       if test -n "$hardcode_libdir_separator" &&
- 	 test -n "$hardcode_libdirs"; then
- 	libdir="$hardcode_libdirs"
- 	eval rpath=\" $hardcode_libdir_flag_spec\"
-       fi
-       finalize_rpath="$rpath"
- 
-       output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-       if test "X$output_objdir" = "X$output"; then
- 	output_objdir="$objdir"
-       else
- 	output_objdir="$output_objdir/$objdir"
-       fi
- 
-       # Create the binary in the object directory, then wrap it.
-       if test ! -d $output_objdir; then
- 	$show "$mkdir $output_objdir"
- 	$run $mkdir $output_objdir
- 	status=$?
- 	if test $status -ne 0 && test ! -d $output_objdir; then
- 	  exit $status
- 	fi
-       fi
- 
-       if test -n "$libobjs" && test "$build_old_libs" = yes; then
- 	# Transform all the library objects into standard objects.
- 	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- 	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-       fi
- 
-       dlsyms=
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- 	if test -n "$NM" && test -n "$global_symbol_pipe"; then
- 	  dlsyms="${outputname}S.c"
- 	else
- 	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
- 	fi
-       fi
- 
-       if test -n "$dlsyms"; then
- 	case "$dlsyms" in
- 	"") ;;
- 	*.c)
- 	  # Discover the nlist of each of the dlfiles.
- 	  nlist="$output_objdir/${outputname}.nm"
- 
- 	  $show "$rm $nlist ${nlist}S ${nlist}T"
- 	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
- 
- 	  # Parse the name list into a source file.
- 	  $show "creating $output_objdir/$dlsyms"
- 
- 	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
- /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
- /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
- 
- #ifdef __cplusplus
- extern \"C\" {
- #endif
- 
- /* Prevent the only kind of declaration conflicts we can make. */
- #define lt_preloaded_symbols some_other_symbol
- 
- /* External symbol declarations for the compiler. */\
- "
- 
- 	  if test "$dlself" = yes; then
- 	    $show "generating symbol list for \`$output'"
- 
- 	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
- 
- 	    # Add our own program objects to the symbol list.
- 	    progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- 	    for arg in $progfiles; do
- 	      $show "extracting global C symbols from \`$arg'"
- 	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- 	    done
- 
- 	    if test -n "$exclude_expsyms"; then
- 	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- 	      $run eval '$mv "$nlist"T "$nlist"'
- 	    fi
- 	    
- 	    if test -n "$export_symbols_regex"; then
- 	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- 	      $run eval '$mv "$nlist"T "$nlist"'
- 	    fi
- 
- 	    # Prepare the list of exported symbols
- 	    if test -z "$export_symbols"; then
- 	      export_symbols="$output_objdir/$output.exp"
- 	      $run $rm $export_symbols
- 	      $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- 	    else
- 	      $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
- 	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
- 	      $run eval 'mv "$nlist"T "$nlist"'
- 	    fi
- 	  fi
- 
- 	  for arg in $dlprefiles; do
- 	    $show "extracting global C symbols from \`$arg'"
- 	    name=`echo "$arg" | sed -e 's%^.*/%%'`
- 	    $run eval 'echo ": $name " >> "$nlist"'
- 	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- 	  done
- 
- 	  if test -z "$run"; then
- 	    # Make sure we have at least an empty file.
- 	    test -f "$nlist" || : > "$nlist"
- 
- 	    if test -n "$exclude_expsyms"; then
- 	      egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- 	      $mv "$nlist"T "$nlist"
- 	    fi
- 
- 	    # Try sorting and uniquifying the output.
- 	    if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
- 	      :
- 	    else
- 	      grep -v "^: " < "$nlist" > "$nlist"S
- 	    fi
- 
- 	    if test -f "$nlist"S; then
- 	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
- 	    else
- 	      echo '/* NONE */' >> "$output_objdir/$dlsyms"
- 	    fi
- 
- 	    $echo >> "$output_objdir/$dlsyms" "\
- 
- #undef lt_preloaded_symbols
- 
- #if defined (__STDC__) && __STDC__
- # define lt_ptr_t void *
- #else
- # define lt_ptr_t char *
- # define const
- #endif
- 
- /* The mapping between symbol names and symbols. */
- const struct {
-   const char *name;
-   lt_ptr_t address;
- }
- lt_preloaded_symbols[] =
- {\
- "
- 
- 	    sed -n -e 's/^: \([^ ]*\) $/  {\"\1\", (lt_ptr_t) 0},/p' \
- 		-e 's/^. \([^ ]*\) \([^ ]*\)$/  {"\2", (lt_ptr_t) \&\2},/p' \
- 		  < "$nlist" >> "$output_objdir/$dlsyms"
- 
- 	    $echo >> "$output_objdir/$dlsyms" "\
-   {0, (lt_ptr_t) 0}
- };
- 
- /* This works around a problem in FreeBSD linker */
- #ifdef FREEBSD_WORKAROUND
- static const void *lt_preloaded_setup() {
-   return lt_preloaded_symbols;
- }
- #endif
- 
- #ifdef __cplusplus
- }
- #endif\
- "
- 	  fi
- 
- 	  pic_flag_for_symtable=
- 	  case "$host" in
- 	  # compiling the symbol table file with pic_flag works around
- 	  # a FreeBSD bug that causes programs to crash when -lm is
- 	  # linked before any other PIC object.  But we must not use
- 	  # pic_flag when linking with -static.  The problem exists in
- 	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- 	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- 	    case "$compile_command " in
- 	    *" -static "*) ;;
- 	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
- 	    esac;;
- 	  *-*-hpux*)
- 	    case "$compile_command " in
- 	    *" -static "*) ;;
- 	    *) pic_flag_for_symtable=" $pic_flag -DPIC";;
- 	    esac
- 	  esac
- 
- 	  # Now compile the dynamic symbol file.
- 	  $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- 	  $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
- 
- 	  # Clean up the generated files.
- 	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
- 	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
- 
- 	  # Transform the symbol file into the correct name.
- 	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- 	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- 	  ;;
- 	*)
- 	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
-       else
- 	# We keep going just in case the user didn't refer to
- 	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
- 	# really was required.
- 
- 	# Nullify the symbol file.
- 	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- 	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
-       fi
- 
-       if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
- 	# Replace the output file specification.
- 	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- 	link_command="$compile_command$compile_rpath"
- 
- 	# We have no uninstalled library dependencies, so finalize right now.
- 	$show "$link_command"
- 	$run eval "$link_command"
- 	status=$?
- 	
- 	# Delete the generated files.
- 	if test -n "$dlsyms"; then
- 	  $show "$rm $output_objdir/${outputname}S.${objext}"
- 	  $run $rm "$output_objdir/${outputname}S.${objext}"
- 	fi
- 
- 	exit $status
-       fi
- 
-       if test -n "$shlibpath_var"; then
- 	# We should set the shlibpath_var
- 	rpath=
- 	for dir in $temp_rpath; do
- 	  case "$dir" in
- 	  [\\/]* | [A-Za-z]:[\\/]*)
- 	    # Absolute path.
- 	    rpath="$rpath$dir:"
- 	    ;;
- 	  *)
- 	    # Relative path: add a thisdir entry.
- 	    rpath="$rpath\$thisdir/$dir:"
- 	    ;;
- 	  esac
- 	done
- 	temp_rpath="$rpath"
-       fi
- 
-       if test -n "$compile_shlibpath$finalize_shlibpath"; then
- 	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
-       fi
-       if test -n "$finalize_shlibpath"; then
- 	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
-       fi
- 
-       compile_var=
-       finalize_var=
-       if test -n "$runpath_var"; then
- 	if test -n "$perm_rpath"; then
- 	  # We should set the runpath_var.
- 	  rpath=
- 	  for dir in $perm_rpath; do
- 	    rpath="$rpath$dir:"
- 	  done
- 	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- 	fi
- 	if test -n "$finalize_perm_rpath"; then
- 	  # We should set the runpath_var.
- 	  rpath=
- 	  for dir in $finalize_perm_rpath; do
- 	    rpath="$rpath$dir:"
- 	  done
- 	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- 	fi
-       fi
- 
-       if test "$hardcode_action" = relink; then
- 	# Fast installation is not supported
- 	link_command="$compile_var$compile_command$compile_rpath"
- 	relink_command="$finalize_var$finalize_command$finalize_rpath"
- 	
- 	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
- 	$echo "$modename: \`$output' will be relinked during installation" 1>&2
-       else
- 	if test "$fast_install" != no; then
- 	  link_command="$finalize_var$compile_command$finalize_rpath"
- 	  if test "$fast_install" = yes; then
- 	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
- 	  else
- 	    # fast_install is set to needless
- 	    relink_command=
- 	  fi
- 	else
- 	  link_command="$compile_var$compile_command$compile_rpath"
- 	  relink_command="$finalize_var$finalize_command$finalize_rpath"
- 	fi
-       fi
- 
-       # Replace the output file specification.
-       link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-       
-       # Delete the old output files.
-       $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
- 
-       $show "$link_command"
-       $run eval "$link_command" || exit $?
- 
-       # Now create the wrapper script.
-       $show "creating $output"
- 
-       # Quote the relink command for shipping.
-       if test -n "$relink_command"; then
- 	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-       fi
- 
-       # Quote $echo for shipping.
-       if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
- 	case "$0" in
- 	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
- 	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
- 	esac
- 	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
-       else
- 	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
-       fi
- 
-       # Only actually do things if our run command is non-null.
-       if test -z "$run"; then
- 	# win32 will think the script is a binary if it has
- 	# a .exe suffix, so we strip it off here.
- 	case $output in
- 	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
- 	esac
- 	$rm $output
- 	trap "$rm $output; exit 1" 1 2 15
- 
- 	$echo > $output "\
- #! $SHELL
- 
- # $output - temporary wrapper script for $objdir/$outputname
- # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
- #
- # The $output program cannot be directly executed until all the libtool
- # libraries that it depends on are installed.
- #
- # This wrapper script should never be moved out of the build directory.
- # If it is, it will not operate correctly.
- 
- # Sed substitution that helps us do robust quoting.  It backslashifies
- # metacharacters that are still active within double-quoted strings.
- Xsed='sed -e 1s/^X//'
- sed_quote_subst='$sed_quote_subst'
- 
- # The HP-UX ksh and POSIX shell print the target directory to stdout
- # if CDPATH is set.
- if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
- 
- relink_command=\"$relink_command\"
- 
- # This environment variable determines our operation mode.
- if test \"\$libtool_install_magic\" = \"$magic\"; then
-   # install mode needs the following variable:
-   link_against_libtool_libs='$link_against_libtool_libs'
- else
-   # When we are sourced in execute mode, \$file and \$echo are already set.
-   if test \"\$libtool_execute_magic\" != \"$magic\"; then
-     echo=\"$qecho\"
-     file=\"\$0\"
-     # Make sure echo works.
-     if test \"X\$1\" = X--no-reexec; then
-       # Discard the --no-reexec flag, and continue.
-       shift
-     elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
-       # Yippee, \$echo works!
-       :
-     else
-       # Restart under the correct shell, and then maybe \$echo will work.
-       exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-     fi
-   fi\
- "
- 	$echo >> $output "\
- 
-   # Find the directory that this script lives in.
-   thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
-   test \"x\$thisdir\" = \"x\$file\" && thisdir=.
- 
-   # Follow symbolic links until we get to the real thisdir.
-   file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
-   while test -n \"\$file\"; do
-     destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
- 
-     # If there was a directory component, then change thisdir.
-     if test \"x\$destdir\" != \"x\$file\"; then
-       case \"\$destdir\" in
-       [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
-       *) thisdir=\"\$thisdir/\$destdir\" ;;
-       esac
-     fi
- 
-     file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-     file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
-   done
- 
-   # Try to get the absolute directory name.
-   absdir=\`cd \"\$thisdir\" && pwd\`
-   test -n \"\$absdir\" && thisdir=\"\$absdir\"
- "
- 
- 	if test "$fast_install" = yes; then
- 	  echo >> $output "\
-   program=lt-'$outputname'
-   progdir=\"\$thisdir/$objdir\"
-   
-   if test ! -f \"\$progdir/\$program\" || \\
-      { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
-        test \"X\$file\" != \"X\$progdir/\$program\"; }; then
- 
-     file=\"\$\$-\$program\"
- 
-     if test ! -d \"\$progdir\"; then
-       $mkdir \"\$progdir\"
-     else
-       $rm \"\$progdir/\$file\"
-     fi"
- 
- 	  echo >> $output "\
- 
-     # relink executable if necessary
-     if test -n \"\$relink_command\"; then
-       if (cd \"\$thisdir\" && eval \$relink_command); then :
-       else
- 	$rm \"\$progdir/\$file\"
- 	exit 1
-       fi
-     fi
- 
-     $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-     { $rm \"\$progdir/\$program\";
-       $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-     $rm \"\$progdir/\$file\"
-   fi"
- 	else
- 	  echo >> $output "\
-   program='$outputname'
-   progdir=\"\$thisdir/$objdir\"
- "
- 	fi
- 
- 	echo >> $output "\
- 
-   if test -f \"\$progdir/\$program\"; then"
- 
- 	# Export our shlibpath_var if we have one.
- 	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- 	  $echo >> $output "\
-     # Add our own library path to $shlibpath_var
-     $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
- 
-     # Some systems cannot cope with colon-terminated $shlibpath_var
-     # The second colon is a workaround for a bug in BeOS R4 sed
-     $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
- 
-     export $shlibpath_var
- "
- 	fi
- 
- 	# fixup the dll searchpath if we need to.
- 	if test -n "$dllsearchpath"; then
- 	  $echo >> $output "\
-     # Add the dll search path components to the executable PATH
-     PATH=$dllsearchpath:\$PATH
- "
- 	fi
- 
- 	$echo >> $output "\
-     if test \"\$libtool_execute_magic\" != \"$magic\"; then
-       # Run the actual program with our arguments.
- "
- 	case $host in
- 	*-*-cygwin* | *-*-mingw | *-*-os2*)
- 	  # win32 systems need to use the prog path for dll
- 	  # lookup to work
- 	  $echo >> $output "\
-       exec \$progdir\\\\\$program \${1+\"\$@\"}
- "
- 	  ;;
- 	*)
- 	  $echo >> $output "\
-       # Export the path to the program.
-       PATH=\"\$progdir:\$PATH\"
-       export PATH
- 
-       exec \$program \${1+\"\$@\"}
- "
- 	  ;;
- 	esac
- 	$echo >> $output "\
-       \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
-       exit 1
-     fi
-   else
-     # The program doesn't exist.
-     \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
-     \$echo \"This script is just a wrapper for \$program.\" 1>&2
-     echo \"See the $PACKAGE documentation for more information.\" 1>&2
-     exit 1
-   fi
- fi\
- "
- 	chmod +x $output
-       fi
-       exit 0
-       ;;
-     esac
- 
-     # See if we need to build an old-fashioned archive.
-     for oldlib in $oldlibs; do
- 
-       if test "$build_libtool_libs" = convenience; then
- 	oldobjs="$libobjs_save"
- 	addlibs="$convenience"
- 	build_libtool_libs=no
-       else
- 	if test "$build_libtool_libs" = module; then
- 	  oldobjs="$libobjs_save"
- 	  build_libtool_libs=no
- 	else
- 	  oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
- 	fi
- 	addlibs="$old_convenience"
-       fi
- 
-       if test -n "$addlibs"; then
- 	gentop="$output_objdir/${outputname}x"
- 	$show "${rm}r $gentop"
- 	$run ${rm}r "$gentop"
- 	$show "mkdir $gentop"
- 	$run mkdir "$gentop"
- 	status=$?
- 	if test $status -ne 0 && test ! -d "$gentop"; then
- 	  exit $status
- 	fi
- 	generated="$generated $gentop"
- 	  
- 	# Add in members from convenience archives.
- 	for xlib in $addlibs; do
- 	  # Extract the objects.
- 	  case "$xlib" in
- 	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- 	  *) xabs=`pwd`"/$xlib" ;;
- 	  esac
- 	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- 	  xdir="$gentop/$xlib"
- 
- 	  $show "${rm}r $xdir"
- 	  $run ${rm}r "$xdir"
- 	  $show "mkdir $xdir"
- 	  $run mkdir "$xdir"
- 	  status=$?
- 	  if test $status -ne 0 && test ! -d "$xdir"; then
- 	    exit $status
- 	  fi
- 	  $show "(cd $xdir && $AR x $xabs)"
- 	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
- 
- 	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
- 	done
-       fi
- 
-       # Do each command in the archive commands.
-       if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- 	eval cmds=\"$old_archive_from_new_cmds\"
-       else
- 	# Ensure that we have .o objects in place in case we decided
- 	# not to build a shared library, and have fallen back to building
- 	# static libs even though --disable-static was passed!
- 	for oldobj in $oldobjs; do
- 	  if test ! -f $oldobj; then
- 	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
- 	    if test "X$xdir" = "X$oldobj"; then
- 	      xdir="."
- 	    else
- 	      xdir="$xdir"
- 	    fi
- 	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
- 	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- 	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
- 	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
- 	  fi
- 	done
- 
- 	eval cmds=\"$old_archive_cmds\"
-       fi
-       IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
- 	IFS="$save_ifs"
- 	$show "$cmd"
- 	$run eval "$cmd" || exit $?
-       done
-       IFS="$save_ifs"
-     done
- 
-     if test -n "$generated"; then
-       $show "${rm}r$generated"
-       $run ${rm}r$generated
-     fi
- 
-     # Now create the libtool archive.
-     case "$output" in
-     *.la)
-       old_library=
-       test "$build_old_libs" = yes && old_library="$libname.$libext"
-       $show "creating $output"
- 
-       if test -n "$xrpath"; then
- 	temp_xrpath=
- 	for libdir in $xrpath; do
- 	  temp_xrpath="$temp_xrpath -R$libdir"
- 	done
- 	dependency_libs="$temp_xrpath $dependency_libs"
-       fi
- 
-       # Only create the output if not a dry run.
-       if test -z "$run"; then
- 	for installed in no yes; do
- 	  if test "$installed" = yes; then
- 	    if test -z "$install_libdir"; then
- 	      break
- 	    fi
- 	    output="$output_objdir/$outputname"i
- 	  fi
- 	  $rm $output
- 	  $echo > $output "\
- # $outputname - a libtool library file
- # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
- #
- # Please DO NOT delete this file!
- # It is necessary for linking the library.
- 
- # The name that we can dlopen(3).
- dlname='$dlname'
- 
- # Names of this library.
- library_names='$library_names'
- 
- # The name of the static archive.
- old_library='$old_library'
- 
- # Libraries that this one depends upon.
- dependency_libs='$dependency_libs'
- 
- # Version information for $libname.
- current=$current
- age=$age
- revision=$revision
- 
- # Is this an already installed library?
- installed=$installed
- 
- # Directory that this library needs to be installed in:
- libdir='$install_libdir'\
- "
- 	done
-       fi
- 
-       # Do a symbolic link so that the libtool archive can be found in
-       # LD_LIBRARY_PATH before the program is installed.
-       $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
-       $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
-       ;;
-     esac
-     exit 0
-     ;;
- 
-   # libtool install mode
-   install)
-     modename="$modename: install"
- 
-     # There may be an optional sh(1) argument at the beginning of
-     # install_prog (especially on Windows NT).
-     if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then
-       # Aesthetically quote it.
-       arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
-       case "$arg" in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	arg="\"$arg\""
- 	;;
-       esac
-       install_prog="$arg "
-       arg="$1"
-       shift
-     else
-       install_prog=
-       arg="$nonopt"
-     fi
- 
-     # The real first argument should be the name of the installation program.
-     # Aesthetically quote it.
-     arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-     case "$arg" in
-     *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-       arg="\"$arg\""
-       ;;
-     esac
-     install_prog="$install_prog$arg"
- 
-     # We need to accept at least all the BSD install flags.
-     dest=
-     files=
-     opts=
-     prev=
-     install_type=
-     isdir=no
-     stripme=
-     for arg
-     do
-       if test -n "$dest"; then
- 	files="$files $dest"
- 	dest="$arg"
- 	continue
-       fi
- 
-       case "$arg" in
-       -d) isdir=yes ;;
-       -f) prev="-f" ;;
-       -g) prev="-g" ;;
-       -m) prev="-m" ;;
-       -o) prev="-o" ;;
-       -s)
- 	stripme=" -s"
- 	continue
- 	;;
-       -*) ;;
- 
-       *)
- 	# If the previous option needed an argument, then skip it.
- 	if test -n "$prev"; then
- 	  prev=
- 	else
- 	  dest="$arg"
- 	  continue
- 	fi
- 	;;
-       esac
- 
-       # Aesthetically quote the argument.
-       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-       case "$arg" in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
- 	arg="\"$arg\""
- 	;;
-       esac
-       install_prog="$install_prog $arg"
-     done
- 
-     if test -z "$install_prog"; then
-       $echo "$modename: you must specify an install program" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     if test -n "$prev"; then
-       $echo "$modename: the \`$prev' option requires an argument" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     if test -z "$files"; then
-       if test -z "$dest"; then
- 	$echo "$modename: no file or destination specified" 1>&2
-       else
- 	$echo "$modename: you must specify a destination" 1>&2
-       fi
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     # Strip any trailing slash from the destination.
-     dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
- 
-     # Check to see that the destination is a directory.
-     test -d "$dest" && isdir=yes
-     if test "$isdir" = yes; then
-       destdir="$dest"
-       destname=
-     else
-       destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$destdir" = "X$dest" && destdir=.
-       destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
- 
-       # Not a directory, so check to see that there is only one file specified.
-       set dummy $files
-       if test $# -gt 2; then
- 	$echo "$modename: \`$dest' is not a directory" 1>&2
- 	$echo "$help" 1>&2
- 	exit 1
-       fi
-     fi
-     case "$destdir" in
-     [\\/]* | [A-Za-z]:[\\/]*) ;;
-     *)
-       for file in $files; do
- 	case "$file" in
- 	*.lo) ;;
- 	*)
- 	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
-       done
-       ;;
-     esac
- 
-     # This variable tells wrapper scripts just to set variables rather
-     # than running their programs.
-     libtool_install_magic="$magic"
- 
-     staticlibs=
-     future_libdirs=
-     current_libdirs=
-     for file in $files; do
- 
-       # Do each installation.
-       case "$file" in
-       *.a | *.lib)
- 	# Do the static libraries later.
- 	staticlibs="$staticlibs $file"
- 	;;
- 
-       *.la)
- 	# Check to see that this really is a libtool archive.
- 	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- 	else
- 	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	fi
- 
- 	library_names=
- 	old_library=
- 	# If there is no directory component, then add one.
- 	case "$file" in
- 	*/* | *\\*) . $file ;;
- 	*) . ./$file ;;
- 	esac
- 
- 	# Add the libdir to current_libdirs if it is the destination.
- 	if test "X$destdir" = "X$libdir"; then
- 	  case "$current_libdirs " in
- 	  *" $libdir "*) ;;
- 	  *) current_libdirs="$current_libdirs $libdir" ;;
- 	  esac
- 	else
- 	  # Note the libdir as a future libdir.
- 	  case "$future_libdirs " in
- 	  *" $libdir "*) ;;
- 	  *) future_libdirs="$future_libdirs $libdir" ;;
- 	  esac
- 	fi
- 
- 	dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
- 	test "X$dir" = "X$file/" && dir=
- 	dir="$dir$objdir"
- 
- 	# See the names of the shared library.
- 	set dummy $library_names
- 	if test -n "$2"; then
- 	  realname="$2"
- 	  shift
- 	  shift
- 
- 	  # Install the shared library and build the symlinks.
- 	  $show "$install_prog $dir/$realname $destdir/$realname"
- 	  $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
- 
- 	  if test $# -gt 0; then
- 	    # Delete the old symlinks, and create new ones.
- 	    for linkname
- 	    do
- 	      if test "$linkname" != "$realname"; then
- 		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- 		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- 	      fi
- 	    done
- 	  fi
- 
- 	  # Do each command in the postinstall commands.
- 	  lib="$destdir/$realname"
- 	  eval cmds=\"$postinstall_cmds\"
- 	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	  for cmd in $cmds; do
- 	    IFS="$save_ifs"
- 	    $show "$cmd"
- 	    $run eval "$cmd" || exit $?
- 	  done
- 	  IFS="$save_ifs"
- 	fi
- 
- 	# Install the pseudo-library for information purposes.
- 	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 	instname="$dir/$name"i
- 	$show "$install_prog $instname $destdir/$name"
- 	$run eval "$install_prog $instname $destdir/$name" || exit $?
- 
- 	# Maybe install the static library, too.
- 	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- 	;;
- 
-       *.lo)
- 	# Install (i.e. copy) a libtool object.
- 
- 	# Figure out destination file name, if it wasn't already specified.
- 	if test -n "$destname"; then
- 	  destfile="$destdir/$destname"
- 	else
- 	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 	  destfile="$destdir/$destfile"
- 	fi
- 
- 	# Deduce the name of the destination old-style object file.
- 	case "$destfile" in
- 	*.lo)
- 	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
- 	  ;;
- 	*.o | *.obj)
- 	  staticdest="$destfile"
- 	  destfile=
- 	  ;;
- 	*)
- 	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	  ;;
- 	esac
- 
- 	# Install the libtool object if requested.
- 	if test -n "$destfile"; then
- 	  $show "$install_prog $file $destfile"
- 	  $run eval "$install_prog $file $destfile" || exit $?
- 	fi
- 
- 	# Install the old object if enabled.
- 	if test "$build_old_libs" = yes; then
- 	  # Deduce the name of the old-style object file.
- 	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
- 
- 	  $show "$install_prog $staticobj $staticdest"
- 	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
- 	fi
- 	exit 0
- 	;;
- 
-       *)
- 	# Figure out destination file name, if it wasn't already specified.
- 	if test -n "$destname"; then
- 	  destfile="$destdir/$destname"
- 	else
- 	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 	  destfile="$destdir/$destfile"
- 	fi
- 
- 	# Do a test to see if this is really a libtool program.
- 	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- 	  link_against_libtool_libs=
- 	  relink_command=
- 
- 	  # If there is no directory component, then add one.
- 	  case "$file" in
- 	  */* | *\\*) . $file ;;
- 	  *) . ./$file ;;
- 	  esac
- 
- 	  # Check the variables that should have been set.
- 	  if test -z "$link_against_libtool_libs"; then
- 	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
- 	    exit 1
- 	  fi
- 
- 	  finalize=yes
- 	  for lib in $link_against_libtool_libs; do
- 	    # Check to see that each library is installed.
- 	    libdir=
- 	    if test -f "$lib"; then
- 	      # If there is no directory component, then add one.
- 	      case "$lib" in
- 	      */* | *\\*) . $lib ;;
- 	      *) . ./$lib ;;
- 	      esac
- 	    fi
- 	    libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
- 	    if test -n "$libdir" && test ! -f "$libfile"; then
- 	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- 	      finalize=no
- 	    fi
- 	  done
- 
- 	  outputname=
- 	  if test "$fast_install" = no && test -n "$relink_command"; then
- 	    if test "$finalize" = yes && test -z "$run"; then
- 	      tmpdir="/tmp"
- 	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
- 	      tmpdir="$tmpdir/libtool-$$"
- 	      if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
- 	      else
- 		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
- 		continue
- 	      fi
- 	      outputname="$tmpdir/$file"
- 	      # Replace the output file specification.
- 	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
- 
- 	      $show "$relink_command"
- 	      if $run eval "$relink_command"; then :
- 	      else
- 		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- 		${rm}r "$tmpdir"
- 		continue
- 	      fi
- 	      file="$outputname"
- 	    else
- 	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
- 	    fi
- 	  else
- 	    # Install the binary that we compiled earlier.
- 	    file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- 	  fi
- 	fi
- 
- 	$show "$install_prog$stripme $file $destfile"
- 	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
- 	test -n "$outputname" && ${rm}r "$tmpdir"
- 	;;
-       esac
-     done
- 
-     for file in $staticlibs; do
-       name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 
-       # Set up the ranlib parameters.
-       oldlib="$destdir/$name"
- 
-       $show "$install_prog $file $oldlib"
-       $run eval "$install_prog \$file \$oldlib" || exit $?
- 
-       # Do each command in the postinstall commands.
-       eval cmds=\"$old_postinstall_cmds\"
-       IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
- 	IFS="$save_ifs"
- 	$show "$cmd"
- 	$run eval "$cmd" || exit $?
-       done
-       IFS="$save_ifs"
-     done
- 
-     if test -n "$future_libdirs"; then
-       $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
-     fi
- 
-     if test -n "$current_libdirs"; then
-       # Maybe just do a dry run.
-       test -n "$run" && current_libdirs=" -n$current_libdirs"
-       exec $SHELL $0 --finish$current_libdirs
-       exit 1
-     fi
- 
-     exit 0
-     ;;
- 
-   # libtool finish mode
-   finish)
-     modename="$modename: finish"
-     libdirs="$nonopt"
-     admincmds=
- 
-     if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-       for dir
-       do
- 	libdirs="$libdirs $dir"
-       done
- 
-       for libdir in $libdirs; do
- 	if test -n "$finish_cmds"; then
- 	  # Do each command in the finish commands.
- 	  eval cmds=\"$finish_cmds\"
- 	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	  for cmd in $cmds; do
- 	    IFS="$save_ifs"
- 	    $show "$cmd"
- 	    $run eval "$cmd" || admincmds="$admincmds
-        $cmd"
- 	  done
- 	  IFS="$save_ifs"
- 	fi
- 	if test -n "$finish_eval"; then
- 	  # Do the single finish_eval.
- 	  eval cmds=\"$finish_eval\"
- 	  $run eval "$cmds" || admincmds="$admincmds
-        $cmds"
- 	fi
-       done
-     fi
- 
-     # Exit here if they wanted silent mode.
-     test "$show" = : && exit 0
- 
-     echo "----------------------------------------------------------------------"
-     echo "Libraries have been installed in:"
-     for libdir in $libdirs; do
-       echo "   $libdir"
-     done
-     echo
-     echo "If you ever happen to want to link against installed libraries"
-     echo "in a given directory, LIBDIR, you must either use libtool, and"
-     echo "specify the full pathname of the library, or use \`-LLIBDIR'"
-     echo "flag during linking and do at least one of the following:"
-     if test -n "$shlibpath_var"; then
-       echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-       echo "     during execution"
-     fi
-     if test -n "$runpath_var"; then
-       echo "   - add LIBDIR to the \`$runpath_var' environment variable"
-       echo "     during linking"
-     fi
-     if test -n "$hardcode_libdir_flag_spec"; then
-       libdir=LIBDIR
-       eval flag=\"$hardcode_libdir_flag_spec\"
- 
-       echo "   - use the \`$flag' linker flag"
-     fi
-     if test -n "$admincmds"; then
-       echo "   - have your system administrator run these commands:$admincmds"
-     fi
-     if test -f /etc/ld.so.conf; then
-       echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-     fi
-     echo
-     echo "See any operating system documentation about shared libraries for"
-     echo "more information, such as the ld(1) and ld.so(8) manual pages."
-     echo "----------------------------------------------------------------------"
-     exit 0
-     ;;
- 
-   # libtool execute mode
-   execute)
-     modename="$modename: execute"
- 
-     # The first argument is the command name.
-     cmd="$nonopt"
-     if test -z "$cmd"; then
-       $echo "$modename: you must specify a COMMAND" 1>&2
-       $echo "$help"
-       exit 1
-     fi
- 
-     # Handle -dlopen flags immediately.
-     for file in $execute_dlfiles; do
-       if test ! -f "$file"; then
- 	$echo "$modename: \`$file' is not a file" 1>&2
- 	$echo "$help" 1>&2
- 	exit 1
-       fi
- 
-       dir=
-       case "$file" in
-       *.la)
- 	# Check to see that this really is a libtool archive.
- 	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- 	else
- 	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- 	  $echo "$help" 1>&2
- 	  exit 1
- 	fi
- 
- 	# Read the libtool library.
- 	dlname=
- 	library_names=
- 
- 	# If there is no directory component, then add one.
- 	case "$file" in
- 	*/* | *\\*) . $file ;;
- 	*) . ./$file ;;
- 	esac
- 
- 	# Skip this library if it cannot be dlopened.
- 	if test -z "$dlname"; then
- 	  # Warn if it was a shared library.
- 	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
- 	  continue
- 	fi
- 
- 	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- 	test "X$dir" = "X$file" && dir=.
- 
- 	if test -f "$dir/$objdir/$dlname"; then
- 	  dir="$dir/$objdir"
- 	else
- 	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- 	  exit 1
- 	fi
- 	;;
- 
-       *.lo)
- 	# Just add the directory containing the .lo file.
- 	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- 	test "X$dir" = "X$file" && dir=.
- 	;;
- 
-       *)
- 	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
- 	continue
- 	;;
-       esac
- 
-       # Get the absolute pathname.
-       absdir=`cd "$dir" && pwd`
-       test -n "$absdir" && dir="$absdir"
- 
-       # Now add the directory to shlibpath_var.
-       if eval "test -z \"\$$shlibpath_var\""; then
- 	eval "$shlibpath_var=\"\$dir\""
-       else
- 	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
-       fi
-     done
- 
-     # This variable tells wrapper scripts just to set shlibpath_var
-     # rather than running their programs.
-     libtool_execute_magic="$magic"
- 
-     # Check if any of the arguments is a wrapper script.
-     args=
-     for file
-     do
-       case "$file" in
-       -*) ;;
-       *)
- 	# Do a test to see if this is really a libtool program.
- 	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- 	  # If there is no directory component, then add one.
- 	  case "$file" in
- 	  */* | *\\*) . $file ;;
- 	  *) . ./$file ;;
- 	  esac
- 
- 	  # Transform arg to wrapped name.
- 	  file="$progdir/$program"
- 	fi
- 	;;
-       esac
-       # Quote arguments (to preserve shell metacharacters).
-       file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
-       args="$args \"$file\""
-     done
- 
-     if test -z "$run"; then
-       if test -n "$shlibpath_var"; then
-         # Export the shlibpath_var.
-         eval "export $shlibpath_var"
-       fi
- 
-       # Restore saved enviroment variables
-       if test "${save_LC_ALL+set}" = set; then
- 	LC_ALL="$save_LC_ALL"; export LC_ALL
-       fi
-       if test "${save_LANG+set}" = set; then
- 	LANG="$save_LANG"; export LANG
-       fi
- 
-       # Now actually exec the command.
-       eval "exec \$cmd$args"
- 
-       $echo "$modename: cannot exec \$cmd$args"
-       exit 1
-     else
-       # Display what would be done.
-       if test -n "$shlibpath_var"; then
-         eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
-         $echo "export $shlibpath_var"
-       fi
-       $echo "$cmd$args"
-       exit 0
-     fi
-     ;;
- 
-   # libtool uninstall mode
-   uninstall)
-     modename="$modename: uninstall"
-     rm="$nonopt"
-     files=
- 
-     for arg
-     do
-       case "$arg" in
-       -*) rm="$rm $arg" ;;
-       *) files="$files $arg" ;;
-       esac
-     done
- 
-     if test -z "$rm"; then
-       $echo "$modename: you must specify an RM program" 1>&2
-       $echo "$help" 1>&2
-       exit 1
-     fi
- 
-     for file in $files; do
-       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$dir" = "X$file" && dir=.
-       name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- 
-       rmfiles="$file"
- 
-       case "$name" in
-       *.la)
- 	# Possibly a libtool archive, so verify it.
- 	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- 	  . $dir/$name
- 
- 	  # Delete the libtool libraries and symlinks.
- 	  for n in $library_names; do
- 	    rmfiles="$rmfiles $dir/$n"
- 	  done
- 	  test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
- 
- 	  $show "$rm $rmfiles"
- 	  $run $rm $rmfiles
- 
- 	  if test -n "$library_names"; then
- 	    # Do each command in the postuninstall commands.
- 	    eval cmds=\"$postuninstall_cmds\"
- 	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	    for cmd in $cmds; do
- 	      IFS="$save_ifs"
- 	      $show "$cmd"
- 	      $run eval "$cmd"
- 	    done
- 	    IFS="$save_ifs"
- 	  fi
- 
- 	  if test -n "$old_library"; then
- 	    # Do each command in the old_postuninstall commands.
- 	    eval cmds=\"$old_postuninstall_cmds\"
- 	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
- 	    for cmd in $cmds; do
- 	      IFS="$save_ifs"
- 	      $show "$cmd"
- 	      $run eval "$cmd"
- 	    done
- 	    IFS="$save_ifs"
- 	  fi
- 
- 	  # FIXME: should reinstall the best remaining shared library.
- 	fi
- 	;;
- 
-       *.lo)
- 	if test "$build_old_libs" = yes; then
- 	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
- 	  rmfiles="$rmfiles $dir/$oldobj"
- 	fi
- 	$show "$rm $rmfiles"
- 	$run $rm $rmfiles
- 	;;
- 
-       *)
- 	$show "$rm $rmfiles"
- 	$run $rm $rmfiles
- 	;;
-       esac
-     done
-     exit 0
-     ;;
- 
-   "")
-     $echo "$modename: you must specify a MODE" 1>&2
-     $echo "$generic_help" 1>&2
-     exit 1
-     ;;
-   esac
- 
-   $echo "$modename: invalid operation mode \`$mode'" 1>&2
-   $echo "$generic_help" 1>&2
-   exit 1
- fi # test -z "$show_help"
- 
- # We need to display help for each of the modes.
- case "$mode" in
- "") $echo \
- "Usage: $modename [OPTION]... [MODE-ARG]...
- 
- Provide generalized library-building support services.
- 
-     --config          show all configuration variables
-     --debug           enable verbose shell tracing
- -n, --dry-run         display commands without modifying any files
-     --features        display basic configuration information and exit
-     --finish          same as \`--mode=finish'
-     --help            display this help message and exit
-     --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
-     --quiet           same as \`--silent'
-     --silent          don't print informational messages
-     --version         print version information
- 
- MODE must be one of the following:
- 
-       compile         compile a source file into a libtool object
-       execute         automatically set library path, then run a program
-       finish          complete the installation of libtool libraries
-       install         install libraries or executables
-       link            create a library or an executable
-       uninstall       remove libraries from an installed directory
- 
- MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
- a more detailed description of MODE."
-   exit 0
-   ;;
- 
- compile)
-   $echo \
- "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
- 
- Compile a source file into a libtool library object.
- 
- This mode accepts the following additional options:
- 
-   -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
-   -static           always build a \`.o' file suitable for static linking
- 
- COMPILE-COMMAND is a command to be used in creating a \`standard' object file
- from the given SOURCEFILE.
- 
- The output file name is determined by removing the directory component from
- SOURCEFILE, then substituting the C source code suffix \`.c' with the
- library object suffix, \`.lo'."
-   ;;
- 
- execute)
-   $echo \
- "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
- 
- Automatically set library path, then run a program.
- 
- This mode accepts the following additional options:
- 
-   -dlopen FILE      add the directory containing FILE to the library path
- 
- This mode sets the library path environment variable according to \`-dlopen'
- flags.
- 
- If any of the ARGS are libtool executable wrappers, then they are translated
- into their corresponding uninstalled binary, and any of their required library
- directories are added to the library path.
- 
- Then, COMMAND is executed, with ARGS as arguments."
-   ;;
- 
- finish)
-   $echo \
- "Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
- 
- Complete the installation of libtool libraries.
- 
- Each LIBDIR is a directory that contains libtool libraries.
- 
- The commands that this mode executes may require superuser privileges.  Use
- the \`--dry-run' option if you just want to see what would be executed."
-   ;;
- 
- install)
-   $echo \
- "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
- 
- Install executables or libraries.
- 
- INSTALL-COMMAND is the installation command.  The first component should be
- either the \`install' or \`cp' program.
- 
- The rest of the components are interpreted as arguments to that command (only
- BSD-compatible install options are recognized)."
-   ;;
- 
- link)
-   $echo \
- "Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
- 
- Link object files or libraries together to form another library, or to
- create an executable program.
- 
- LINK-COMMAND is a command using the C compiler that you would use to create
- a program from several object files.
- 
- The following components of LINK-COMMAND are treated specially:
- 
-   -all-static       do not do any dynamic linking at all
-   -avoid-version    do not add a version suffix if possible
-   -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
-   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
-   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-   -export-symbols SYMFILE
- 		    try to export only the symbols listed in SYMFILE
-   -export-symbols-regex REGEX
- 		    try to export only the symbols matching REGEX
-   -LLIBDIR          search LIBDIR for required installed libraries
-   -lNAME            OUTPUT-FILE requires the installed library libNAME
-   -module           build a library that can dlopened
-   -no-undefined     declare that a library does not refer to external symbols
-   -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
-   -release RELEASE  specify package release information
-   -rpath LIBDIR     the created library will eventually be installed in LIBDIR
-   -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
-   -static           do not do any dynamic linking of libtool libraries
-   -version-info CURRENT[:REVISION[:AGE]]
- 		    specify library version info [each variable defaults to 0]
- 
- All other options (arguments beginning with \`-') are ignored.
- 
- Every other argument is treated as a filename.  Files ending in \`.la' are
- treated as uninstalled libtool libraries, other files are standard or library
- object files.
- 
- If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
- only library objects (\`.lo' files) may be specified, and \`-rpath' is
- required, except when creating a convenience library.
- 
- If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
- using \`ar' and \`ranlib', or on Windows using \`lib'.
- 
- If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
- is created, otherwise an executable program is created."
-   ;;
- 
- uninstall)
-   $echo \
- "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
- 
- Remove libraries from an installation directory.
- 
- RM is the name of the program to use to delete files associated with each FILE
- (typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
- to RM.
- 
- If FILE is a libtool library, all the files associated with it are deleted.
- Otherwise, only FILE itself is deleted using RM."
-   ;;
- 
- *)
-   $echo "$modename: invalid operation mode \`$mode'" 1>&2
-   $echo "$help" 1>&2
-   exit 1
-   ;;
- esac
- 
- echo
- $echo "Try \`$modename --help' for more information about other modes."
- 
- exit 0
- 
- # Local Variables:
- # mode:shell-script
- # sh-indentation:2
- # End:
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/mach_dep.c gcc-4.0.0/boehm-gc/mach_dep.c
*** gcc-3.4.3/boehm-gc/mach_dep.c	Fri Oct  3 18:43:06 2003
--- gcc-4.0.0/boehm-gc/mach_dep.c	Wed Feb  9 21:33:02 2005
*************** void GC_push_regs()
*** 400,460 ****
  }
  #endif /* !USE_GENERIC_PUSH_REGS && !USE_ASM_PUSH_REGS */
  
  #if defined(USE_GENERIC_PUSH_REGS)
  void GC_generic_push_regs(cold_gc_frame)
  ptr_t cold_gc_frame;
  {
! 	{
! 	    word dummy;
! 
! #	    ifdef HAVE_BUILTIN_UNWIND_INIT
! 	      /* This was suggested by Richard Henderson as the way to	*/
! 	      /* force callee-save registers and register windows onto	*/
! 	      /* the stack.						*/
! 	      __builtin_unwind_init();
! #	    else /* !HAVE_BUILTIN_UNWIND_INIT */
! 	      /* Generic code                          */
! 	      /* The idea is due to Parag Patel at HP. */
! 	      /* We're not sure whether he would like  */
! 	      /* to be he acknowledged for it or not.  */
! 	      jmp_buf regs;
! 	      register word * i = (word *) regs;
! 	      register ptr_t lim = (ptr_t)(regs) + (sizeof regs);
! 
! 	      /* Setjmp doesn't always clear all of the buffer.		*/
! 	      /* That tends to preserve garbage.  Clear it.   		*/
! 		for (; (char *)i < lim; i++) {
! 		    *i = 0;
! 		}
! #	      if defined(POWERPC) || defined(MSWIN32) || defined(MSWINCE) \
!                 || defined(UTS4) || defined(LINUX) || defined(EWS4800)
! 		  (void) setjmp(regs);
! #	      else
! 	          (void) _setjmp(regs);
! #	      endif
! #	    endif /* !HAVE_BUILTIN_UNWIND_INIT */
! #           if (defined(SPARC) && !defined(HAVE_BUILTIN_UNWIND_INIT)) \
! 		|| defined(IA64)
! 	      /* On a register window machine, we need to save register	*/
! 	      /* contents on the stack for this to work.  The setjmp	*/
! 	      /* is probably not needed on SPARC, since pointers are	*/
! 	      /* only stored in windowed or scratch registers.  It is	*/
! 	      /* needed on IA64, since some non-windowed registers are	*/
! 	      /* preserved.						*/
! 	      {
! 	        GC_save_regs_ret_val = GC_save_regs_in_stack();
! 		/* On IA64 gcc, could use __builtin_ia64_flushrs() and	*/
! 		/* __builtin_ia64_flushrs().  The latter will be done	*/
! 		/* implicitly by __builtin_unwind_init() for gcc3.0.1	*/
! 		/* and later.						*/
! 	      }
! #           endif
! 	    GC_push_current_stack(cold_gc_frame);
! 	    /* Strongly discourage the compiler from treating the above	*/
! 	    /* as a tail-call, since that would pop the register 	*/
! 	    /* contents before we get a chance to look at them.		*/
! 	    GC_noop1((word)(&dummy));
! 	}
  }
  #endif /* USE_GENERIC_PUSH_REGS */
  
--- 400,478 ----
  }
  #endif /* !USE_GENERIC_PUSH_REGS && !USE_ASM_PUSH_REGS */
  
+ void GC_with_callee_saves_pushed(fn, arg)
+ void (*fn)();
+ ptr_t arg;
+ {
+     word dummy;
+ 
+ #   if defined(USE_GENERIC_PUSH_REGS)
+ #     ifdef HAVE_BUILTIN_UNWIND_INIT
+         /* This was suggested by Richard Henderson as the way to	*/
+         /* force callee-save registers and register windows onto	*/
+         /* the stack.						*/
+         __builtin_unwind_init();
+ #     else /* !HAVE_BUILTIN_UNWIND_INIT */
+         /* Generic code                          */
+         /* The idea is due to Parag Patel at HP. */
+         /* We're not sure whether he would like  */
+         /* to be he acknowledged for it or not.  */
+         jmp_buf regs;
+         register word * i = (word *) regs;
+         register ptr_t lim = (ptr_t)(regs) + (sizeof regs);
+   
+         /* Setjmp doesn't always clear all of the buffer.		*/
+         /* That tends to preserve garbage.  Clear it.   		*/
+   	for (; (char *)i < lim; i++) {
+   	    *i = 0;
+   	}
+ #       if defined(POWERPC) || defined(MSWIN32) || defined(MSWINCE) \
+                   || defined(UTS4) || defined(LINUX) || defined(EWS4800)
+   	  (void) setjmp(regs);
+ #       else
+             (void) _setjmp(regs);
+   	  /* We don't want to mess with signals. According to	*/
+   	  /* SUSV3, setjmp() may or may not save signal mask.	*/
+   	  /* _setjmp won't, but is less portable.		*/
+ #       endif
+ #     endif /* !HAVE_BUILTIN_UNWIND_INIT */
+ #   elif defined(PTHREADS) && !defined(MSWIN32) /* !USE_GENERIC_PUSH_REGS */
+       /* We may still need this to save thread contexts.	*/
+       /* This should probably be used in all Posix/non-gcc	*/
+       /* settings.  We defer that change to minimize risk.	*/
+       ucontext_t ctxt;
+       getcontext(&ctxt);
+ #   else  /* Shouldn't be needed */
+       ABORT("Unexpected call to GC_with_callee_saves_pushed");
+ #   endif
+ #   if (defined(SPARC) && !defined(HAVE_BUILTIN_UNWIND_INIT)) \
+ 	|| defined(IA64)
+       /* On a register window machine, we need to save register	*/
+       /* contents on the stack for this to work.  The setjmp	*/
+       /* is probably not needed on SPARC, since pointers are	*/
+       /* only stored in windowed or scratch registers.  It is	*/
+       /* needed on IA64, since some non-windowed registers are	*/
+       /* preserved.						*/
+       {
+         GC_save_regs_ret_val = GC_save_regs_in_stack();
+ 	/* On IA64 gcc, could use __builtin_ia64_flushrs() and	*/
+ 	/* __builtin_ia64_flushrs().  The latter will be done	*/
+ 	/* implicitly by __builtin_unwind_init() for gcc3.0.1	*/
+ 	/* and later.						*/
+       }
+ #   endif
+     fn(arg);
+     /* Strongly discourage the compiler from treating the above	*/
+     /* as a tail-call, since that would pop the register 	*/
+     /* contents before we get a chance to look at them.		*/
+     GC_noop1((word)(&dummy));
+ }
+ 
  #if defined(USE_GENERIC_PUSH_REGS)
  void GC_generic_push_regs(cold_gc_frame)
  ptr_t cold_gc_frame;
  {
!     GC_with_callee_saves_pushed(GC_push_current_stack, cold_gc_frame);
  }
  #endif /* USE_GENERIC_PUSH_REGS */
  
diff -Nrcpad gcc-3.4.3/boehm-gc/malloc.c gcc-4.0.0/boehm-gc/malloc.c
*** gcc-3.4.3/boehm-gc/malloc.c	Wed Jan  7 21:47:35 2004
--- gcc-4.0.0/boehm-gc/malloc.c	Fri Aug 13 23:05:30 2004
*************** register struct obj_kind * kind;
*** 36,41 ****
--- 36,42 ----
  /* Allocate a large block of size lw words.	*/
  /* The block is not cleared.			*/
  /* Flags is 0 or IGNORE_OFF_PAGE.		*/
+ /* We hold the allocation lock.			*/
  ptr_t GC_alloc_large(lw, k, flags)
  word lw;
  int k;
*************** unsigned flags;
*** 62,81 ****
      if (h == 0) {
  	result = 0;
      } else {
! 	int total_bytes = BYTES_TO_WORDS(n_blocks * HBLKSIZE);
  	if (n_blocks > 1) {
! 	    GC_large_allocd_bytes += n_blocks * HBLKSIZE;
  	    if (GC_large_allocd_bytes > GC_max_large_allocd_bytes)
  	        GC_max_large_allocd_bytes = GC_large_allocd_bytes;
  	}
  	result = (ptr_t) (h -> hb_body);
! 	GC_words_wasted += total_bytes - lw;
      }
      return result;
  }
  
  
  /* Allocate a large block of size lb bytes.  Clear if appropriate.	*/
  ptr_t GC_alloc_large_and_clear(lw, k, flags)
  word lw;
  int k;
--- 63,83 ----
      if (h == 0) {
  	result = 0;
      } else {
! 	int total_bytes = n_blocks * HBLKSIZE;
  	if (n_blocks > 1) {
! 	    GC_large_allocd_bytes += total_bytes;
  	    if (GC_large_allocd_bytes > GC_max_large_allocd_bytes)
  	        GC_max_large_allocd_bytes = GC_large_allocd_bytes;
  	}
  	result = (ptr_t) (h -> hb_body);
! 	GC_words_wasted += BYTES_TO_WORDS(total_bytes) - lw;
      }
      return result;
  }
  
  
  /* Allocate a large block of size lb bytes.  Clear if appropriate.	*/
+ /* We hold the allocation lock.						*/
  ptr_t GC_alloc_large_and_clear(lw, k, flags)
  word lw;
  int k;
*************** DCL_LOCK_STATE;
*** 311,316 ****
--- 313,331 ----
  }
  
  # ifdef REDIRECT_MALLOC
+ 
+ /* Avoid unnecessary nested procedure calls here, by #defining some	*/
+ /* malloc replacements.  Otherwise we end up saving a 			*/
+ /* meaningless return address in the object.  It also speeds things up,	*/
+ /* but it is admittedly quite ugly.					*/
+ # ifdef GC_ADD_CALLER
+ #   define RA GC_RETURN_ADDR,
+ # else
+ #   define RA
+ # endif
+ # define GC_debug_malloc_replacement(lb) \
+ 	GC_debug_malloc(lb, RA "unknown", 0)
+ 
  # ifdef __STDC__
      GC_PTR malloc(size_t lb)
  # else
*************** DCL_LOCK_STATE;
*** 363,368 ****
--- 378,385 ----
   /* and thus the right thing will happen even without overriding it.	 */
   /* This seems to be true on most Linux systems.			 */
  
+ #undef GC_debug_malloc_replacement
+ 
  # endif /* REDIRECT_MALLOC */
  
  /* Explicitly deallocate an object p.				*/
diff -Nrcpad gcc-3.4.3/boehm-gc/mallocx.c gcc-4.0.0/boehm-gc/mallocx.c
*** gcc-3.4.3/boehm-gc/mallocx.c	Wed Jan  7 21:47:35 2004
--- gcc-4.0.0/boehm-gc/mallocx.c	Fri Aug 13 23:05:30 2004
*************** int obj_kind;
*** 147,152 ****
--- 147,162 ----
  # endif
  
  # ifdef REDIRECT_REALLOC
+ 
+ /* As with malloc, avoid two levels of extra calls here.	*/
+ # ifdef GC_ADD_CALLER
+ #   define RA GC_RETURN_ADDR,
+ # else
+ #   define RA
+ # endif
+ # define GC_debug_realloc_replacement(p, lb) \
+ 	GC_debug_realloc(p, lb, RA "unknown", 0)
+ 
  # ifdef __STDC__
      GC_PTR realloc(GC_PTR p, size_t lb)
  # else
*************** int obj_kind;
*** 157,162 ****
--- 167,174 ----
    {
      return(REDIRECT_REALLOC(p, lb));
    }
+ 
+ # undef GC_debug_realloc_replacement
  # endif /* REDIRECT_REALLOC */
  
  
diff -Nrcpad gcc-3.4.3/boehm-gc/mark.c gcc-4.0.0/boehm-gc/mark.c
*** gcc-3.4.3/boehm-gc/mark.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/mark.c	Fri Aug 13 23:05:30 2004
*************** register hdr *hhdr, **new_hdr_p;
*** 558,565 ****
  	      current = current - HBLKSIZE*(word)hhdr;
  	      hhdr = HDR(current);
  	    } while(IS_FORWARDING_ADDR_OR_NIL(hhdr));
! 	    /* current points to the start of the large object */
! 	    if (hhdr -> hb_flags & IGNORE_OFF_PAGE) return(0);
  	    if ((word *)orig - (word *)current
  	         >= (ptrdiff_t)(hhdr->hb_sz)) {
  	        /* Pointer past the end of the block */
--- 558,565 ----
  	      current = current - HBLKSIZE*(word)hhdr;
  	      hhdr = HDR(current);
  	    } while(IS_FORWARDING_ADDR_OR_NIL(hhdr));
! 	    /* current points to near the start of the large object */
! 	    if (hhdr -> hb_flags & IGNORE_OFF_PAGE) return(orig);
  	    if ((word *)orig - (word *)current
  	         >= (ptrdiff_t)(hhdr->hb_sz)) {
  	        /* Pointer past the end of the block */
*************** mse * mark_stack_limit;
*** 684,690 ****
                current = *current_p;
  	      FIXUP_POINTER(current);
  	      if ((ptr_t)current >= least_ha && (ptr_t)current < greatest_ha) {
! 		PREFETCH(current);
                  HC_PUSH_CONTENTS((ptr_t)current, mark_stack_top,
  			      mark_stack_limit, current_p, exit1);
  	      }
--- 684,690 ----
                current = *current_p;
  	      FIXUP_POINTER(current);
  	      if ((ptr_t)current >= least_ha && (ptr_t)current < greatest_ha) {
! 		PREFETCH((ptr_t)current);
                  HC_PUSH_CONTENTS((ptr_t)current, mark_stack_top,
  			      mark_stack_limit, current_p, exit1);
  	      }
*************** mse * mark_stack_limit;
*** 760,766 ****
  	  FIXUP_POINTER(deferred);
  	  limit = (word *)((char *)limit - ALIGNMENT);
  	  if ((ptr_t)deferred >= least_ha && (ptr_t)deferred <  greatest_ha) {
! 	    PREFETCH(deferred);
  	    break;
  	  }
  	  if (current_p > limit) goto next_object;
--- 760,766 ----
  	  FIXUP_POINTER(deferred);
  	  limit = (word *)((char *)limit - ALIGNMENT);
  	  if ((ptr_t)deferred >= least_ha && (ptr_t)deferred <  greatest_ha) {
! 	    PREFETCH((ptr_t)deferred);
  	    break;
  	  }
  	  if (current_p > limit) goto next_object;
*************** mse * mark_stack_limit;
*** 770,776 ****
  	  FIXUP_POINTER(deferred);
  	  limit = (word *)((char *)limit - ALIGNMENT);
  	  if ((ptr_t)deferred >= least_ha && (ptr_t)deferred <  greatest_ha) {
! 	    PREFETCH(deferred);
  	    break;
  	  }
  	  if (current_p > limit) goto next_object;
--- 770,776 ----
  	  FIXUP_POINTER(deferred);
  	  limit = (word *)((char *)limit - ALIGNMENT);
  	  if ((ptr_t)deferred >= least_ha && (ptr_t)deferred <  greatest_ha) {
! 	    PREFETCH((ptr_t)deferred);
  	    break;
  	  }
  	  if (current_p > limit) goto next_object;
*************** mse * mark_stack_limit;
*** 787,793 ****
          if ((ptr_t)current >= least_ha && (ptr_t)current <  greatest_ha) {
    	  /* Prefetch the contents of the object we just pushed.  It's	*/
    	  /* likely we will need them soon.				*/
!   	  PREFETCH(current);
            HC_PUSH_CONTENTS((ptr_t)current, mark_stack_top,
    		           mark_stack_limit, current_p, exit2);
          }
--- 787,793 ----
          if ((ptr_t)current >= least_ha && (ptr_t)current <  greatest_ha) {
    	  /* Prefetch the contents of the object we just pushed.  It's	*/
    	  /* likely we will need them soon.				*/
!   	  PREFETCH((ptr_t)current);
            HC_PUSH_CONTENTS((ptr_t)current, mark_stack_top,
    		           mark_stack_limit, current_p, exit2);
          }
*************** register hdr * hhdr;
*** 1739,1745 ****
  {
      register int sz = hhdr -> hb_sz;
      
!     if (sz < MAXOBJSZ) {
           return(GC_page_was_dirty(h));
      } else {
      	 register ptr_t p = (ptr_t)h;
--- 1739,1745 ----
  {
      register int sz = hhdr -> hb_sz;
      
!     if (sz <= MAXOBJSZ) {
           return(GC_page_was_dirty(h));
      } else {
      	 register ptr_t p = (ptr_t)h;
diff -Nrcpad gcc-3.4.3/boehm-gc/mark_rts.c gcc-4.0.0/boehm-gc/mark_rts.c
*** gcc-3.4.3/boehm-gc/mark_rts.c	Mon Jul 28 04:18:20 2003
--- gcc-4.0.0/boehm-gc/mark_rts.c	Wed Feb  9 21:33:02 2005
*************** ptr_t p;
*** 368,375 ****
  
  ptr_t GC_approx_sp()
  {
!     word dummy;
  
  #   ifdef _MSC_VER
  #     pragma warning(disable:4172)
  #   endif
--- 368,378 ----
  
  ptr_t GC_approx_sp()
  {
!     VOLATILE word dummy;
  
+     dummy = 42;	/* Force stack to grow if necessary.	Otherwise the	*/
+     		/* later accesses might cause the kernel to think we're	*/
+     		/* doing something wrong.				*/
  #   ifdef _MSC_VER
  #     pragma warning(disable:4172)
  #   endif
diff -Nrcpad gcc-3.4.3/boehm-gc/misc.c gcc-4.0.0/boehm-gc/misc.c
*** gcc-3.4.3/boehm-gc/misc.c	Fri Oct  3 18:43:06 2003
--- gcc-4.0.0/boehm-gc/misc.c	Sat Aug 21 07:49:17 2004
*************** GC_bool GC_print_back_height = 0;
*** 116,121 ****
--- 116,126 ----
    GC_bool GC_dump_regularly = 0;  /* Generate regular debugging dumps. */
  #endif
  
+ #ifdef KEEP_BACK_PTRS
+   long GC_backtraces = 0;	/* Number of random backtraces to 	*/
+   				/* generate for each GC.		*/
+ #endif
+ 
  #ifdef FIND_LEAK
    int GC_find_leak = 1;
  #else
*************** void GC_init()
*** 470,476 ****
      DISABLE_SIGNALS();
  
  #if defined(GC_WIN32_THREADS) && !defined(GC_PTHREADS)
!     if (!GC_is_initialized) InitializeCriticalSection(&GC_allocate_ml);
  #endif /* MSWIN32 */
  
      LOCK();
--- 475,492 ----
      DISABLE_SIGNALS();
  
  #if defined(GC_WIN32_THREADS) && !defined(GC_PTHREADS)
!     if (!GC_is_initialized) {
!       BOOL (WINAPI *pfn) (LPCRITICAL_SECTION, DWORD) = NULL;
!       HMODULE hK32 = GetModuleHandle("kernel32.dll");
!       if (hK32)
! 	  pfn = (BOOL (WINAPI *) (LPCRITICAL_SECTION, DWORD))
! 		GetProcAddress (hK32,
! 				"InitializeCriticalSectionAndSpinCount");
!       if (pfn)
!           pfn(&GC_allocate_ml, 4000);
!       else
! 	  InitializeCriticalSection (&GC_allocate_ml);
!     }
  #endif /* MSWIN32 */
  
      LOCK();
*************** int sig;
*** 537,543 ****
  
  static GC_bool installed_looping_handler = FALSE;
  
! void maybe_install_looping_handler()
  {
      /* Install looping handler before the write fault handler, so we	*/
      /* handle write faults correctly.					*/
--- 553,559 ----
  
  static GC_bool installed_looping_handler = FALSE;
  
! static void maybe_install_looping_handler()
  {
      /* Install looping handler before the write fault handler, so we	*/
      /* handle write faults correctly.					*/
*************** void GC_init_inner()
*** 575,580 ****
--- 591,605 ----
          GC_dump_regularly = 1;
        }
  #   endif
+ #   ifdef KEEP_BACK_PTRS
+       {
+         char * backtraces_string = GETENV("GC_BACKTRACES");
+         if (0 != backtraces_string) {
+           GC_backtraces = atol(backtraces_string);
+ 	  if (backtraces_string[0] == '\0') GC_backtraces = 1;
+         }
+       }
+ #   endif
      if (0 != GETENV("GC_FIND_LEAK")) {
        GC_find_leak = 1;
  #     ifdef __STDC__
*************** void GC_init_inner()
*** 650,663 ****
  	|| defined(GC_SOLARIS_THREADS)
        if (GC_stackbottom == 0) {
  	GC_stackbottom = GC_get_stack_base();
! #       if defined(LINUX) && defined(IA64)
  	  GC_register_stackbottom = GC_get_register_stack_base();
  #       endif
        } else {
! #       if defined(LINUX) && defined(IA64)
  	  if (GC_register_stackbottom == 0) {
  	    WARN("GC_register_stackbottom should be set with GC_stackbottom", 0);
! 	    /* The following is likely to fail, since we rely on 	*/
  	    /* alignment properties that may not hold with a user set	*/
  	    /* GC_stackbottom.						*/
  	    GC_register_stackbottom = GC_get_register_stack_base();
--- 675,688 ----
  	|| defined(GC_SOLARIS_THREADS)
        if (GC_stackbottom == 0) {
  	GC_stackbottom = GC_get_stack_base();
! #       if (defined(LINUX) || defined(HPUX)) && defined(IA64)
  	  GC_register_stackbottom = GC_get_register_stack_base();
  #       endif
        } else {
! #       if (defined(LINUX) || defined(HPUX)) && defined(IA64)
  	  if (GC_register_stackbottom == 0) {
  	    WARN("GC_register_stackbottom should be set with GC_stackbottom", 0);
! 	    /* The following may fail, since we may rely on	 	*/
  	    /* alignment properties that may not hold with a user set	*/
  	    /* GC_stackbottom.						*/
  	    GC_register_stackbottom = GC_get_register_stack_base();
*************** void GC_init_inner()
*** 754,760 ****
        }
  #   endif /* !SMALL_CONFIG */
      COND_DUMP;
!     /* Get black list set up and/or incrmental GC started */
        if (!GC_dont_precollect || GC_incremental) GC_gcollect_inner();
      GC_is_initialized = TRUE;
  #   ifdef STUBBORN_ALLOC
--- 779,785 ----
        }
  #   endif /* !SMALL_CONFIG */
      COND_DUMP;
!     /* Get black list set up and/or incremental GC started */
        if (!GC_dont_precollect || GC_incremental) GC_gcollect_inner();
      GC_is_initialized = TRUE;
  #   ifdef STUBBORN_ALLOC
*************** GC_CONST char * msg;
*** 1031,1037 ****
  {
  #   if defined(MSWIN32)
        (void) MessageBoxA(NULL, msg, "Fatal error in gc", MB_ICONERROR|MB_OK);
-       DebugBreak();
  #   else
        GC_err_printf1("%s\n", msg);
  #   endif
--- 1056,1061 ----
*************** GC_CONST char * msg;
*** 1042,1048 ****
  	    /* about threads.						*/
  	    for(;;) {}
      }
! #   ifdef MSWIN32
  	DebugBreak();
  #   else
          (void) abort();
--- 1066,1072 ----
  	    /* about threads.						*/
  	    for(;;) {}
      }
! #   if defined(MSWIN32) || defined(MSWINCE)
  	DebugBreak();
  #   else
          (void) abort();
*************** void GC_disable()
*** 1064,1069 ****
--- 1088,1162 ----
      UNLOCK();
  }
  
+ /* Helper procedures for new kind creation.	*/
+ void ** GC_new_free_list_inner()
+ {
+     void *result = GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
+     if (result == 0) ABORT("Failed to allocate freelist for new kind");
+     BZERO(result, (MAXOBJSZ+1)*sizeof(ptr_t));
+     return result;
+ }
+ 
+ void ** GC_new_free_list()
+ {
+     void *result;
+     LOCK(); DISABLE_SIGNALS();
+     result = GC_new_free_list_inner();
+     UNLOCK(); ENABLE_SIGNALS();
+     return result;
+ }
+ 
+ int GC_new_kind_inner(fl, descr, adjust, clear)
+ void **fl;
+ GC_word descr;
+ int adjust;
+ int clear;
+ {
+     int result = GC_n_kinds++;
+ 
+     if (GC_n_kinds > MAXOBJKINDS) ABORT("Too many kinds");
+     GC_obj_kinds[result].ok_freelist = (ptr_t *)fl;
+     GC_obj_kinds[result].ok_reclaim_list = 0;
+     GC_obj_kinds[result].ok_descriptor = descr;
+     GC_obj_kinds[result].ok_relocate_descr = adjust;
+     GC_obj_kinds[result].ok_init = clear;
+     return result;
+ }
+ 
+ int GC_new_kind(fl, descr, adjust, clear)
+ void **fl;
+ GC_word descr;
+ int adjust;
+ int clear;
+ {
+     int result;
+     LOCK(); DISABLE_SIGNALS();
+     result = GC_new_kind_inner(fl, descr, adjust, clear);
+     UNLOCK(); ENABLE_SIGNALS();
+     return result;
+ }
+ 
+ int GC_new_proc_inner(proc)
+ GC_mark_proc proc;
+ {
+     int result = GC_n_mark_procs++;
+ 
+     if (GC_n_mark_procs > MAX_MARK_PROCS) ABORT("Too many mark procedures");
+     GC_mark_procs[result] = proc;
+     return result;
+ }
+ 
+ int GC_new_proc(proc)
+ GC_mark_proc proc;
+ {
+     int result;
+     LOCK(); DISABLE_SIGNALS();
+     result = GC_new_proc_inner(proc);
+     UNLOCK(); ENABLE_SIGNALS();
+     return result;
+ }
+ 
+ 
  #if !defined(NO_DEBUGGING)
  
  void GC_dump()
diff -Nrcpad gcc-3.4.3/boehm-gc/mkinstalldirs gcc-4.0.0/boehm-gc/mkinstalldirs
*** gcc-3.4.3/boehm-gc/mkinstalldirs	Fri Aug 17 18:39:16 2001
--- gcc-4.0.0/boehm-gc/mkinstalldirs	Thu Jan  1 00:00:00 1970
***************
*** 1,36 ****
- #! /bin/sh
- # mkinstalldirs --- make directory hierarchy
- # Author: Noah Friedman <friedman@prep.ai.mit.edu>
- # Created: 1993-05-16
- # Last modified: 1994-03-25
- # Public domain
- 
- errstatus=0
- 
- for file in ${1+"$@"} ; do 
-    set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
-    shift
- 
-    pathcomp=
-    for d in ${1+"$@"} ; do
-      pathcomp="$pathcomp$d"
-      case "$pathcomp" in
-        -* ) pathcomp=./$pathcomp ;;
-      esac
- 
-      if test ! -d "$pathcomp"; then
-         echo "mkdir $pathcomp" 1>&2
-         mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
-      fi
- 
-      if test ! -d "$pathcomp"; then
- 	errstatus=$lasterr
-      fi
- 
-      pathcomp="$pathcomp/"
-    done
- done
- 
- exit $errstatus
- 
- # mkinstalldirs ends here
--- 0 ----
diff -Nrcpad gcc-3.4.3/boehm-gc/new_hblk.c gcc-4.0.0/boehm-gc/new_hblk.c
*** gcc-3.4.3/boehm-gc/new_hblk.c	Tue Oct 16 09:01:35 2001
--- gcc-4.0.0/boehm-gc/new_hblk.c	Fri Aug 13 23:05:30 2004
*************** ptr_t ofl;
*** 104,110 ****
      p[3] = 0;
      p += 4;
      for (; p < lim; p += 4) {
! 	PREFETCH_FOR_WRITE(p+64);
          p[0] = (word)(p-4);
          p[1] = 0;
  	CLEAR_DOUBLE(p+2);
--- 104,110 ----
      p[3] = 0;
      p += 4;
      for (; p < lim; p += 4) {
! 	PREFETCH_FOR_WRITE((ptr_t)(p+64));
          p[0] = (word)(p-4);
          p[1] = 0;
  	CLEAR_DOUBLE(p+2);
*************** ptr_t ofl;
*** 142,148 ****
      p[4] = (word)p;
      p += 8;
      for (; p < lim; p += 8) {
! 	PREFETCH_FOR_WRITE(p+64);
          p[0] = (word)(p-4);
          p[4] = (word)p;
      };
--- 142,148 ----
      p[4] = (word)p;
      p += 8;
      for (; p < lim; p += 8) {
! 	PREFETCH_FOR_WRITE((ptr_t)(p+64));
          p[0] = (word)(p-4);
          p[4] = (word)p;
      };
*************** ptr_t list;
*** 171,180 ****
    /* If we were more serious about it, these should go inside	*/
    /* the loops.  But write prefetches usually don't seem to	*/
    /* matter much.						*/
!     PREFETCH_FOR_WRITE((char *)h);
!     PREFETCH_FOR_WRITE((char *)h + 128);
!     PREFETCH_FOR_WRITE((char *)h + 256);
!     PREFETCH_FOR_WRITE((char *)h + 378);
    /* Handle small objects sizes more efficiently.  For larger objects 	*/
    /* the difference is less significant.				*/
  #  ifndef SMALL_CONFIG
--- 171,180 ----
    /* If we were more serious about it, these should go inside	*/
    /* the loops.  But write prefetches usually don't seem to	*/
    /* matter much.						*/
!     PREFETCH_FOR_WRITE((ptr_t)h);
!     PREFETCH_FOR_WRITE((ptr_t)h + 128);
!     PREFETCH_FOR_WRITE((ptr_t)h + 256);
!     PREFETCH_FOR_WRITE((ptr_t)h + 378);
    /* Handle small objects sizes more efficiently.  For larger objects 	*/
    /* the difference is less significant.				*/
  #  ifndef SMALL_CONFIG
diff -Nrcpad gcc-3.4.3/boehm-gc/os_dep.c gcc-4.0.0/boehm-gc/os_dep.c
*** gcc-3.4.3/boehm-gc/os_dep.c	Mon Sep 22 16:00:23 2003
--- gcc-4.0.0/boehm-gc/os_dep.c	Fri Aug 13 23:05:30 2004
***************
*** 87,92 ****
--- 87,98 ----
  #  endif
  #endif
  
+ #if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__) \
+     && !defined(NEED_FIND_LIMIT)
+    /* Used by GC_init_netbsd_elf() below.	*/
+ #  define NEED_FIND_LIMIT
+ #endif
+ 
  #ifdef NEED_FIND_LIMIT
  #   include <setjmp.h>
  #endif
***************
*** 111,135 ****
  # include <sys/uio.h>
  # include <malloc.h>   /* for locking */
  #endif
! #ifdef USE_MMAP
  # include <sys/types.h>
  # include <sys/mman.h>
  # include <sys/stat.h>
  #endif
  
  #ifdef UNIX_LIKE
  # include <fcntl.h>
! #endif
! 
! #if defined(SUNOS5SIGS) || defined (HURD) || defined(LINUX)
! # ifdef SUNOS5SIGS
  #  include <sys/siginfo.h>
  # endif
! # undef setjmp
! # undef longjmp
! # define setjmp(env) sigsetjmp(env, 1)
! # define longjmp(env, val) siglongjmp(env, val)
! # define jmp_buf sigjmp_buf
  #endif
  
  #ifdef DARWIN
--- 117,146 ----
  # include <sys/uio.h>
  # include <malloc.h>   /* for locking */
  #endif
! #if defined(USE_MMAP) || defined(USE_MUNMAP)
! # ifndef USE_MMAP
!     --> USE_MUNMAP requires USE_MMAP
! # endif
  # include <sys/types.h>
  # include <sys/mman.h>
  # include <sys/stat.h>
+ # include <errno.h>
  #endif
  
  #ifdef UNIX_LIKE
  # include <fcntl.h>
! # if defined(SUNOS5SIGS) && !defined(FREEBSD)
  #  include <sys/siginfo.h>
  # endif
!   /* Define SETJMP and friends to be the version that restores	*/
!   /* the signal mask.						*/
! # define SETJMP(env) sigsetjmp(env, 1)
! # define LONGJMP(env, val) siglongjmp(env, val)
! # define JMP_BUF sigjmp_buf
! #else
! # define SETJMP(env) setjmp(env)
! # define LONGJMP(env, val) longjmp(env, val)
! # define JMP_BUF jmp_buf
  #endif
  
  #ifdef DARWIN
*************** ssize_t GC_repeat_read(int fd, char *buf
*** 183,227 ****
  /*
   * Apply fn to a buffer containing the contents of /proc/self/maps.
   * Return the result of fn or, if we failed, 0.
   */
  
  word GC_apply_to_maps(word (*fn)(char *))
  {
      int f;
      int result;
!     int maps_size;
!     char maps_temp[32768];
!     char *maps_buf;
  
!     /* Read /proc/self/maps	*/
!         /* Note that we may not allocate, and thus can't use stdio.	*/
!         f = open("/proc/self/maps", O_RDONLY);
!         if (-1 == f) return 0;
! 	/* stat() doesn't work for /proc/self/maps, so we have to
! 	   read it to find out how large it is... */
! 	maps_size = 0;
  	do {
! 	    result = GC_repeat_read(f, maps_temp, sizeof(maps_temp));
! 	    if (result <= 0) return 0;
! 	    maps_size += result;
! 	} while (result == sizeof(maps_temp));
! 
! 	if (maps_size > sizeof(maps_temp)) {
! 	    /* If larger than our buffer, close and re-read it. */
! 	    close(f);
  	    f = open("/proc/self/maps", O_RDONLY);
  	    if (-1 == f) return 0;
! 	    maps_buf = alloca(maps_size);
! 	    if (NULL == maps_buf) return 0;
! 	    result = GC_repeat_read(f, maps_buf, maps_size);
! 	    if (result <= 0) return 0;
! 	} else {
! 	    /* Otherwise use the fixed size buffer */
! 	    maps_buf = maps_temp;
! 	}
! 
! 	close(f);
!         maps_buf[result] = '\0';
  	
      /* Apply fn to result. */
  	return fn(maps_buf);
--- 194,234 ----
  /*
   * Apply fn to a buffer containing the contents of /proc/self/maps.
   * Return the result of fn or, if we failed, 0.
+  * We currently do nothing to /proc/self/maps other than simply read
+  * it.  This code could be simplified if we could determine its size
+  * ahead of time.
   */
  
  word GC_apply_to_maps(word (*fn)(char *))
  {
      int f;
      int result;
!     size_t maps_size = 4000;  /* Initial guess. 	*/
!     static char init_buf[1];
!     static char *maps_buf = init_buf;
!     static size_t maps_buf_sz = 1;
  
!     /* Read /proc/self/maps, growing maps_buf as necessary.	*/
!         /* Note that we may not allocate conventionally, and	*/
!         /* thus can't use stdio.				*/
  	do {
! 	    if (maps_size >= maps_buf_sz) {
! 	      /* Grow only by powers of 2, since we leak "too small" buffers. */
! 	      while (maps_size >= maps_buf_sz) maps_buf_sz *= 2;
! 	      maps_buf = GC_scratch_alloc(maps_buf_sz);
! 	      if (maps_buf == 0) return 0;
! 	    }
  	    f = open("/proc/self/maps", O_RDONLY);
  	    if (-1 == f) return 0;
! 	    maps_size = 0;
! 	    do {
! 	        result = GC_repeat_read(f, maps_buf, maps_buf_sz-1);
! 	        if (result <= 0) return 0;
! 	        maps_size += result;
! 	    } while (result == maps_buf_sz-1);
! 	    close(f);
! 	} while (maps_size >= maps_buf_sz);
!         maps_buf[maps_size] = '\0';
  	
      /* Apply fn to result. */
  	return fn(maps_buf);
*************** char *GC_parse_map_entry(char *buf_ptr, 
*** 352,358 ****
  # endif /* ECOS_GC_MEMORY_SIZE */
  
  // setjmp() function, as described in ANSI para 7.6.1.1
! #define setjmp( __env__ )  hal_setjmp( __env__ )
  
  // FIXME: This is a simple way of allocating memory which is
  // compatible with ECOS early releases.  Later releases use a more
--- 359,366 ----
  # endif /* ECOS_GC_MEMORY_SIZE */
  
  // setjmp() function, as described in ANSI para 7.6.1.1
! #undef SETJMP
! #define SETJMP( __env__ )  hal_setjmp( __env__ )
  
  // FIXME: This is a simple way of allocating memory which is
  // compatible with ECOS early releases.  Later releases use a more
*************** ptr_t GC_get_stack_base()
*** 688,696 ****
  	typedef void (*handler)();
  #   endif
  
! #   if defined(SUNOS5SIGS) || defined(IRIX5) || defined(OSF1) || defined(HURD)
  	static struct sigaction old_segv_act;
! #	if defined(_sigargs) /* !Irix6.x */ || defined(HPUX) || defined(HURD)
  	    static struct sigaction old_bus_act;
  #	endif
  #   else
--- 696,706 ----
  	typedef void (*handler)();
  #   endif
  
! #   if defined(SUNOS5SIGS) || defined(IRIX5) || defined(OSF1) \
!     || defined(HURD) || defined(NETBSD)
  	static struct sigaction old_segv_act;
! #	if defined(_sigargs) /* !Irix6.x */ || defined(HPUX) \
! 	|| defined(HURD) || defined(NETBSD)
  	    static struct sigaction old_bus_act;
  #	endif
  #   else
*************** ptr_t GC_get_stack_base()
*** 704,724 ****
        handler h;
  #   endif
      {
! #     if defined(SUNOS5SIGS) || defined(IRIX5)  \
!         || defined(OSF1) || defined(HURD)
  	  struct sigaction	act;
  
  	  act.sa_handler	= h;
! #	  ifdef SUNOS5SIGS
              act.sa_flags          = SA_RESTART | SA_NODEFER;
  #         else
              act.sa_flags          = SA_RESTART;
  #	  endif
-           /* The presence of SA_NODEFER represents yet another gross    */
-           /* hack.  Under Solaris 2.3, siglongjmp doesn't appear to     */
-           /* interact correctly with -lthread.  We hide the confusion   */
-           /* by making sure that signal handling doesn't affect the     */
-           /* signal mask.                                               */
  
  	  (void) sigemptyset(&act.sa_mask);
  #	  ifdef GC_IRIX_THREADS
--- 714,730 ----
        handler h;
  #   endif
      {
! #	if defined(SUNOS5SIGS) || defined(IRIX5)  \
!         || defined(OSF1) || defined(HURD) || defined(NETBSD)
  	  struct sigaction	act;
  
  	  act.sa_handler	= h;
! #	  if 0 /* Was necessary for Solaris 2.3 and very temporary 	*/
! 	       /* NetBSD bugs.						*/
              act.sa_flags          = SA_RESTART | SA_NODEFER;
  #         else
              act.sa_flags          = SA_RESTART;
  #	  endif
  
  	  (void) sigemptyset(&act.sa_mask);
  #	  ifdef GC_IRIX_THREADS
*************** ptr_t GC_get_stack_base()
*** 729,735 ****
  #	  else
  	        (void) sigaction(SIGSEGV, &act, &old_segv_act);
  #		if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \
! 		   || defined(HPUX) || defined(HURD)
  		    /* Under Irix 5.x or HP/UX, we may get SIGBUS.	*/
  		    /* Pthreads doesn't exist under Irix 5.x, so we	*/
  		    /* don't have to worry in the threads case.		*/
--- 735,741 ----
  #	  else
  	        (void) sigaction(SIGSEGV, &act, &old_segv_act);
  #		if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \
! 		   || defined(HPUX) || defined(HURD) || defined(NETBSD)
  		    /* Under Irix 5.x or HP/UX, we may get SIGBUS.	*/
  		    /* Pthreads doesn't exist under Irix 5.x, so we	*/
  		    /* don't have to worry in the threads case.		*/
*************** ptr_t GC_get_stack_base()
*** 748,760 ****
  # ifdef NEED_FIND_LIMIT
    /* Some tools to implement HEURISTIC2	*/
  #   define MIN_PAGE_SIZE 256	/* Smallest conceivable page size, bytes */
!     /* static */ jmp_buf GC_jmp_buf;
      
      /*ARGSUSED*/
      void GC_fault_handler(sig)
      int sig;
      {
!         longjmp(GC_jmp_buf, 1);
      }
  
      void GC_setup_temporary_fault_handler()
--- 754,766 ----
  # ifdef NEED_FIND_LIMIT
    /* Some tools to implement HEURISTIC2	*/
  #   define MIN_PAGE_SIZE 256	/* Smallest conceivable page size, bytes */
!     /* static */ JMP_BUF GC_jmp_buf;
      
      /*ARGSUSED*/
      void GC_fault_handler(sig)
      int sig;
      {
!         LONGJMP(GC_jmp_buf, 1);
      }
  
      void GC_setup_temporary_fault_handler()
*************** ptr_t GC_get_stack_base()
*** 764,782 ****
      
      void GC_reset_fault_handler()
      {
! #     if defined(SUNOS5SIGS) || defined(IRIX5) \
! 	 || defined(OSF1) || defined(HURD)
! 	(void) sigaction(SIGSEGV, &old_segv_act, 0);
! #	if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \
! 	   || defined(HPUX) || defined(HURD)
! 	    (void) sigaction(SIGBUS, &old_bus_act, 0);
! #	endif
! #      else
! 	(void) signal(SIGSEGV, old_segv_handler);
! #	ifdef SIGBUS
! 	  (void) signal(SIGBUS, old_bus_handler);
! #	endif
! #     endif
      }
  
      /* Return the first nonaddressible location > p (up) or 	*/
--- 770,788 ----
      
      void GC_reset_fault_handler()
      {
! #       if defined(SUNOS5SIGS) || defined(IRIX5) \
! 	   || defined(OSF1) || defined(HURD) || defined(NETBSD)
! 	  (void) sigaction(SIGSEGV, &old_segv_act, 0);
! #	  if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \
! 	     || defined(HPUX) || defined(HURD) || defined(NETBSD)
! 	      (void) sigaction(SIGBUS, &old_bus_act, 0);
! #	  endif
! #       else
!   	  (void) signal(SIGSEGV, old_segv_handler);
! #	  ifdef SIGBUS
! 	    (void) signal(SIGBUS, old_bus_handler);
! #	  endif
! #       endif
      }
  
      /* Return the first nonaddressible location > p (up) or 	*/
*************** ptr_t GC_get_stack_base()
*** 786,816 ****
      ptr_t p;
      GC_bool up;
      {
!       static VOLATILE ptr_t result;
!   		/* Needs to be static, since otherwise it may not be	*/
!   		/* preserved across the longjmp.  Can safely be 	*/
!   		/* static since it's only called once, with the		*/
!   		/* allocation lock held.				*/
  
  
!       GC_setup_temporary_fault_handler();
!       if (setjmp(GC_jmp_buf) == 0) {
! 	result = (ptr_t)(((word)(p))
! 			 & ~(MIN_PAGE_SIZE-1));
! 	for (;;) {
! 	  if (up) {
! 	    result += MIN_PAGE_SIZE;
! 	  } else {
! 	    result -= MIN_PAGE_SIZE;
! 	  }
! 	  GC_noop1((word)(*result));
  	}
!       }
!       GC_reset_fault_handler();
!       if (!up) {
! 	result += MIN_PAGE_SIZE;
!       }
!       return(result);
      }
  # endif
  
--- 792,822 ----
      ptr_t p;
      GC_bool up;
      {
!         static VOLATILE ptr_t result;
!     		/* Needs to be static, since otherwise it may not be	*/
!     		/* preserved across the longjmp.  Can safely be 	*/
!     		/* static since it's only called once, with the		*/
!     		/* allocation lock held.				*/
  
  
! 	GC_setup_temporary_fault_handler();
! 	if (SETJMP(GC_jmp_buf) == 0) {
! 	    result = (ptr_t)(((word)(p))
! 			      & ~(MIN_PAGE_SIZE-1));
! 	    for (;;) {
!  	        if (up) {
! 		    result += MIN_PAGE_SIZE;
!  	        } else {
! 		    result -= MIN_PAGE_SIZE;
!  	        }
! 		GC_noop1((word)(*result));
! 	    }
  	}
! 	GC_reset_fault_handler();
!  	if (!up) {
! 	    result += MIN_PAGE_SIZE;
!  	}
! 	return(result);
      }
  # endif
  
*************** ptr_t GC_get_stack_base()
*** 821,826 ****
--- 827,855 ----
    }
  #endif
  
+ #ifdef HPUX_STACKBOTTOM
+ 
+ #include <sys/param.h>
+ #include <sys/pstat.h>
+ 
+   ptr_t GC_get_register_stack_base(void)
+   {
+     struct pst_vm_status vm_status;
+ 
+     int i = 0;
+     while (pstat_getprocvm(&vm_status, sizeof(vm_status), 0, i++) == 1) {
+       if (vm_status.pst_type == PS_RSESTACK) {
+         return (ptr_t) vm_status.pst_vaddr;
+       }
+     }
+ 
+     /* old way to get the register stackbottom */
+     return (ptr_t)(((word)GC_stackbottom - BACKING_STORE_DISPLACEMENT - 1)
+                    & ~(BACKING_STORE_ALIGNMENT - 1));
+   }
+ 
+ #endif /* HPUX_STACK_BOTTOM */
+ 
  #ifdef LINUX_STACKBOTTOM
  
  #include <sys/types.h>
*************** ptr_t GC_get_stack_base()
*** 903,909 ****
      size_t i, buf_offset = 0;
  
      /* First try the easy way.  This should work for glibc 2.2	*/
!       if (0 != &__libc_stack_end) {
  #       ifdef IA64
  	  /* Some versions of glibc set the address 16 bytes too	*/
  	  /* low while the initialization code is running.		*/
--- 932,942 ----
      size_t i, buf_offset = 0;
  
      /* First try the easy way.  This should work for glibc 2.2	*/
!     /* This fails in a prelinked ("prelink" command) executable */
!     /* since the correct value of __libc_stack_end never	*/
!     /* becomes visible to us.  The second test works around 	*/
!     /* this.							*/  
!       if (0 != &__libc_stack_end && 0 != __libc_stack_end ) {
  #       ifdef IA64
  	  /* Some versions of glibc set the address 16 bytes too	*/
  	  /* low while the initialization code is running.		*/
*************** int * etext_addr;
*** 1328,1334 ****
      /* max_page_size to &etext if &etext is at a page boundary	*/
      
      GC_setup_temporary_fault_handler();
!     if (setjmp(GC_jmp_buf) == 0) {
      	/* Try writing to the address.	*/
      	*result = *result;
          GC_reset_fault_handler();
--- 1361,1367 ----
      /* max_page_size to &etext if &etext is at a page boundary	*/
      
      GC_setup_temporary_fault_handler();
!     if (SETJMP(GC_jmp_buf) == 0) {
      	/* Try writing to the address.	*/
      	*result = *result;
          GC_reset_fault_handler();
*************** int * etext_addr;
*** 1362,1368 ****
  			      & ~((word)max_page_size - 1);
      VOLATILE ptr_t result = (ptr_t)text_end;
      GC_setup_temporary_fault_handler();
!     if (setjmp(GC_jmp_buf) == 0) {
  	/* Try reading at the address.				*/
  	/* This should happen before there is another thread.	*/
  	for (; next_page < (word)(DATAEND); next_page += (word)max_page_size)
--- 1395,1401 ----
  			      & ~((word)max_page_size - 1);
      VOLATILE ptr_t result = (ptr_t)text_end;
      GC_setup_temporary_fault_handler();
!     if (SETJMP(GC_jmp_buf) == 0) {
  	/* Try reading at the address.				*/
  	/* This should happen before there is another thread.	*/
  	for (; next_page < (word)(DATAEND); next_page += (word)max_page_size)
*************** word bytes;
*** 1497,1504 ****
  
  #else  /* Not RS6000 */
  
! #if defined(USE_MMAP)
! /* Tested only under Linux, IRIX5 and Solaris 2 */
  
  #ifdef USE_MMAP_FIXED
  #   define GC_MMAP_FLAGS MAP_FIXED | MAP_PRIVATE
--- 1530,1536 ----
  
  #else  /* Not RS6000 */
  
! #if defined(USE_MMAP) || defined(USE_MUNMAP)
  
  #ifdef USE_MMAP_FIXED
  #   define GC_MMAP_FLAGS MAP_FIXED | MAP_PRIVATE
*************** word bytes;
*** 1508,1513 ****
--- 1540,1562 ----
  #   define GC_MMAP_FLAGS MAP_PRIVATE
  #endif
  
+ #ifdef USE_MMAP_ANON
+ # define zero_fd -1
+ # if defined(MAP_ANONYMOUS)
+ #   define OPT_MAP_ANON MAP_ANONYMOUS
+ # else
+ #   define OPT_MAP_ANON MAP_ANON
+ # endif
+ #else
+   static int zero_fd;
+ # define OPT_MAP_ANON 0
+ #endif 
+ 
+ #endif /* defined(USE_MMAP) || defined(USE_MUNMAP) */
+ 
+ #if defined(USE_MMAP)
+ /* Tested only under Linux, IRIX5 and Solaris 2 */
+ 
  #ifndef HEAP_START
  #   define HEAP_START 0
  #endif
*************** word bytes;
*** 1520,1542 ****
  
  #   ifndef USE_MMAP_ANON
        static GC_bool initialized = FALSE;
-       static int fd;
  
        if (!initialized) {
! 	  fd = open("/dev/zero", O_RDONLY);
! 	  fcntl(fd, F_SETFD, FD_CLOEXEC);
  	  initialized = TRUE;
        }
  #   endif
  
      if (bytes & (GC_page_size -1)) ABORT("Bad GET_MEM arg");
! #   ifdef USE_MMAP_ANON
!       result = mmap(last_addr, bytes, PROT_READ | PROT_WRITE | OPT_PROT_EXEC,
! 		    GC_MMAP_FLAGS | MAP_ANON, -1, 0/* offset */);
! #   else
!       result = mmap(last_addr, bytes, PROT_READ | PROT_WRITE | OPT_PROT_EXEC,
! 		    GC_MMAP_FLAGS, fd, 0/* offset */);
! #   endif
      if (result == MAP_FAILED) return(0);
      last_addr = (ptr_t)result + bytes + GC_page_size - 1;
      last_addr = (ptr_t)((word)last_addr & ~(GC_page_size - 1));
--- 1569,1585 ----
  
  #   ifndef USE_MMAP_ANON
        static GC_bool initialized = FALSE;
  
        if (!initialized) {
! 	  zero_fd = open("/dev/zero", O_RDONLY);
! 	  fcntl(zero_fd, F_SETFD, FD_CLOEXEC);
  	  initialized = TRUE;
        }
  #   endif
  
      if (bytes & (GC_page_size -1)) ABORT("Bad GET_MEM arg");
!     result = mmap(last_addr, bytes, PROT_READ | PROT_WRITE | OPT_PROT_EXEC,
! 		  GC_MMAP_FLAGS | OPT_MAP_ANON, zero_fd, 0/* offset */);
      if (result == MAP_FAILED) return(0);
      last_addr = (ptr_t)result + bytes + GC_page_size - 1;
      last_addr = (ptr_t)((word)last_addr & ~(GC_page_size - 1));
*************** void GC_unmap(ptr_t start, word bytes)
*** 1794,1800 ****
  	  len -= free_len;
        }
  #   else
!       if (munmap(start_addr, len) != 0) ABORT("munmap failed");
        GC_unmapped_bytes += len;
  #   endif
  }
--- 1837,1851 ----
  	  len -= free_len;
        }
  #   else
!       /* We immediately remap it to prevent an intervening mmap from	*/
!       /* accidentally grabbing the same address space.			*/
!       {
! 	void * result;
!         result = mmap(start_addr, len, PROT_NONE,
! 		      MAP_PRIVATE | MAP_FIXED | OPT_MAP_ANON,
! 		      zero_fd, 0/* offset */);
!         if (result != (void *)start_addr) ABORT("mmap(...PROT_NONE...) failed");
!       }
        GC_unmapped_bytes += len;
  #   endif
  }
*************** void GC_unmap(ptr_t start, word bytes)
*** 1802,1814 ****
  
  void GC_remap(ptr_t start, word bytes)
  {
-     static int zero_descr = -1;
      ptr_t start_addr = GC_unmap_start(start, bytes);
      ptr_t end_addr = GC_unmap_end(start, bytes);
      word len = end_addr - start_addr;
-     ptr_t result;
  
  #   if defined(MSWIN32) || defined(MSWINCE)
        if (0 == start_addr) return;
        while (len != 0) {
            MEMORY_BASIC_INFORMATION mem_info;
--- 1853,1865 ----
  
  void GC_remap(ptr_t start, word bytes)
  {
      ptr_t start_addr = GC_unmap_start(start, bytes);
      ptr_t end_addr = GC_unmap_end(start, bytes);
      word len = end_addr - start_addr;
  
  #   if defined(MSWIN32) || defined(MSWINCE)
+       ptr_t result;
+ 
        if (0 == start_addr) return;
        while (len != 0) {
            MEMORY_BASIC_INFORMATION mem_info;
*************** void GC_remap(ptr_t start, word bytes)
*** 1828,1840 ****
  	  len -= alloc_len;
        }
  #   else
!       if (-1 == zero_descr) zero_descr = open("/dev/zero", O_RDWR);
!       fcntl(zero_descr, F_SETFD, FD_CLOEXEC);
        if (0 == start_addr) return;
!       result = mmap(start_addr, len, PROT_READ | PROT_WRITE | OPT_PROT_EXEC,
! 		    MAP_FIXED | MAP_PRIVATE, zero_descr, 0);
!       if (result != start_addr) {
! 	  ABORT("mmap remapping failed");
        }
        GC_unmapped_bytes -= len;
  #   endif
--- 1879,1895 ----
  	  len -= alloc_len;
        }
  #   else
!       /* It was already remapped with PROT_NONE. */
!       int result; 
! 
        if (0 == start_addr) return;
!       result = mprotect(start_addr, len,
! 		        PROT_READ | PROT_WRITE | OPT_PROT_EXEC);
!       if (result != 0) {
! 	  GC_err_printf3(
! 		"Mprotect failed at 0x%lx (length %ld) with errno %ld\n",
! 	        start_addr, len, errno);
! 	  ABORT("Mprotect remapping failed");
        }
        GC_unmapped_bytes -= len;
  #   endif
*************** GC_bool is_ptrfree;
*** 2137,2143 ****
      /* Using vm_protect (mach syscall) over mprotect (BSD syscall) seems to
         decrease the likelihood of some of the problems described below. */
      #include <mach/vm_map.h>
!     extern mach_port_t GC_task_self;
      #define PROTECT(addr,len) \
          if(vm_protect(GC_task_self,(vm_address_t)(addr),(vm_size_t)(len), \
                  FALSE,VM_PROT_READ) != KERN_SUCCESS) { \
--- 2192,2198 ----
      /* Using vm_protect (mach syscall) over mprotect (BSD syscall) seems to
         decrease the likelihood of some of the problems described below. */
      #include <mach/vm_map.h>
!     static mach_port_t GC_task_self;
      #define PROTECT(addr,len) \
          if(vm_protect(GC_task_self,(vm_address_t)(addr),(vm_size_t)(len), \
                  FALSE,VM_PROT_READ) != KERN_SUCCESS) { \
*************** GC_bool is_ptrfree;
*** 2170,2178 ****
  # endif /* !DARWIN */
  # endif /* MSWIN32 || MSWINCE || DARWIN */
  
! #if defined(SUNOS4) || defined(FREEBSD)
      typedef void (* SIG_PF)();
! #endif /* SUNOS4 || FREEBSD */
  
  #if defined(SUNOS5SIGS) || defined(OSF1) || defined(LINUX) \
      || defined(HURD)
--- 2225,2233 ----
  # endif /* !DARWIN */
  # endif /* MSWIN32 || MSWINCE || DARWIN */
  
! #if defined(SUNOS4) || (defined(FREEBSD) && !defined(SUNOS5SIGS))
      typedef void (* SIG_PF)();
! #endif /* SUNOS4 || (FREEBSD && !SUNOS5SIGS) */
  
  #if defined(SUNOS5SIGS) || defined(OSF1) || defined(LINUX) \
      || defined(HURD)
*************** GC_bool is_ptrfree;
*** 2199,2211 ****
  #endif /* IRIX5 || OSF1 || HURD */
  
  #if defined(SUNOS5SIGS)
! # ifdef HPUX
! #   define SIGINFO __siginfo
  # else
! #   define SIGINFO siginfo
  # endif
  # ifdef __STDC__
!     typedef void (* REAL_SIG_PF)(int, struct SIGINFO *, void *);
  # else
      typedef void (* REAL_SIG_PF)();
  # endif
--- 2254,2266 ----
  #endif /* IRIX5 || OSF1 || HURD */
  
  #if defined(SUNOS5SIGS)
! # if defined(HPUX) || defined(FREEBSD)
! #   define SIGINFO_T siginfo_t
  # else
! #   define SIGINFO_T struct siginfo
  # endif
  # ifdef __STDC__
!     typedef void (* REAL_SIG_PF)(int, SIGINFO_T *, void *);
  # else
      typedef void (* REAL_SIG_PF)();
  # endif
*************** GC_bool is_ptrfree;
*** 2225,2232 ****
  #   if defined(ALPHA) || defined(M68K)
        typedef void (* REAL_SIG_PF)(int, int, s_c *);
  #   else
! #     if defined(IA64) || defined(HP_PA)
          typedef void (* REAL_SIG_PF)(int, siginfo_t *, s_c *);
  #     else
          typedef void (* REAL_SIG_PF)(int, s_c);
  #     endif
--- 2280,2290 ----
  #   if defined(ALPHA) || defined(M68K)
        typedef void (* REAL_SIG_PF)(int, int, s_c *);
  #   else
! #     if defined(IA64) || defined(HP_PA) || defined(X86_64)
          typedef void (* REAL_SIG_PF)(int, siginfo_t *, s_c *);
+ 	/* FIXME:						  */
+ 	/* According to SUSV3, the last argument should have type */
+ 	/* void * or ucontext_t *				  */
  #     else
          typedef void (* REAL_SIG_PF)(int, s_c);
  #     endif
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2301,2307 ****
  
  /*ARGSUSED*/
  #if !defined(DARWIN)
! # if defined (SUNOS4) || defined(FREEBSD)
      void GC_write_fault_handler(sig, code, scp, addr)
      int sig, code;
      struct sigcontext *scp;
--- 2359,2365 ----
  
  /*ARGSUSED*/
  #if !defined(DARWIN)
! # if defined (SUNOS4) || (defined(FREEBSD) && !defined(SUNOS5SIGS))
      void GC_write_fault_handler(sig, code, scp, addr)
      int sig, code;
      struct sigcontext *scp;
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2316,2322 ****
  #     define SIG_OK (sig == SIGBUS)
  #     define CODE_OK (code == BUS_PAGE_FAULT)
  #   endif
! # endif /* SUNOS4 || FREEBSD */
  
  # if defined(IRIX5) || defined(OSF1) || defined(HURD)
  #   include <errno.h>
--- 2374,2380 ----
  #     define SIG_OK (sig == SIGBUS)
  #     define CODE_OK (code == BUS_PAGE_FAULT)
  #   endif
! # endif /* SUNOS4 || (FREEBSD && !SUNOS5SIGS) */
  
  # if defined(IRIX5) || defined(OSF1) || defined(HURD)
  #   include <errno.h>
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2339,2345 ****
  #   if defined(ALPHA) || defined(M68K)
        void GC_write_fault_handler(int sig, int code, s_c * sc)
  #   else
! #     if defined(IA64) || defined(HP_PA)
          void GC_write_fault_handler(int sig, siginfo_t * si, s_c * scp)
  #     else
  #       if defined(ARM32)
--- 2397,2403 ----
  #   if defined(ALPHA) || defined(M68K)
        void GC_write_fault_handler(int sig, int code, s_c * sc)
  #   else
! #     if defined(IA64) || defined(HP_PA) || defined(X86_64)
          void GC_write_fault_handler(int sig, siginfo_t * si, s_c * scp)
  #     else
  #       if defined(ARM32)
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2358,2368 ****
  
  # if defined(SUNOS5SIGS)
  #  ifdef __STDC__
!     void GC_write_fault_handler(int sig, struct SIGINFO *scp, void * context)
  #  else
      void GC_write_fault_handler(sig, scp, context)
      int sig;
!     struct SIGINFO *scp;
      void * context;
  #  endif
  #   ifdef HPUX
--- 2416,2426 ----
  
  # if defined(SUNOS5SIGS)
  #  ifdef __STDC__
!     void GC_write_fault_handler(int sig, SIGINFO_T *scp, void * context)
  #  else
      void GC_write_fault_handler(sig, scp, context)
      int sig;
!     SIGINFO_T *scp;
      void * context;
  #  endif
  #   ifdef HPUX
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2373,2381 ****
  		     || (scp -> si_code == SEGV_UNKNOWN) \
  		     || (scp -> si_code == BUS_OBJERR)
  #   else
! #     define SIG_OK (sig == SIGSEGV)
! #     define CODE_OK (scp -> si_code == SEGV_ACCERR)
! #   endif
  # endif /* SUNOS5SIGS */
  
  # if defined(MSWIN32) || defined(MSWINCE)
--- 2431,2444 ----
  		     || (scp -> si_code == SEGV_UNKNOWN) \
  		     || (scp -> si_code == BUS_OBJERR)
  #   else
! #     ifdef FREEBSD
! #       define SIG_OK (sig == SIGBUS)
! #       define CODE_OK (scp -> si_code == BUS_PAGE_FAULT)
! #     else
! #       define SIG_OK (sig == SIGSEGV)
! #       define CODE_OK (scp -> si_code == SEGV_ACCERR)
! #     endif
! #   endif    
  # endif /* SUNOS5SIGS */
  
  # if defined(MSWIN32) || defined(MSWINCE)
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2400,2406 ****
  	char * addr = (char *) (scp -> si_addr);
  #   endif
  #   ifdef LINUX
! #     if defined(I386) || defined (X86_64)
  	char * addr = (char *) (sc.cr2);
  #     else
  #	if defined(M68K)
--- 2463,2469 ----
  	char * addr = (char *) (scp -> si_addr);
  #   endif
  #   ifdef LINUX
! #     if defined(I386)
  	char * addr = (char *) (sc.cr2);
  #     else
  #	if defined(M68K)
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2435,2441 ****
  #	  ifdef ALPHA
              char * addr = get_fault_addr(sc);
  #	  else
! #	    if defined(IA64) || defined(HP_PA)
  	      char * addr = si -> si_addr;
  	      /* I believe this is claimed to work on all platforms for	*/
  	      /* Linux 2.3.47 and later.  Hopefully we don't have to	*/
--- 2498,2504 ----
  #	  ifdef ALPHA
              char * addr = get_fault_addr(sc);
  #	  else
! #	    if defined(IA64) || defined(HP_PA) || defined(X86_64)
  	      char * addr = si -> si_addr;
  	      /* I believe this is claimed to work on all platforms for	*/
  	      /* Linux 2.3.47 and later.  Hopefully we don't have to	*/
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2478,2483 ****
--- 2541,2550 ----
  	    in_allocd_block = (HDR(addr) != 0);
  #	endif
          if (!in_allocd_block) {
+ 	    /* FIXME - We should make sure that we invoke the	*/
+ 	    /* old handler with the appropriate calling 	*/
+ 	    /* sequence, which often depends on SA_SIGINFO.	*/
+ 
  	    /* Heap blocks now begin and end on page boundaries */
              SIG_PF old_handler;
              
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2494,2504 ****
  		    return(EXCEPTION_CONTINUE_SEARCH);
  #		endif
              } else {
! #		if defined (SUNOS4) || defined(FREEBSD)
  		    (*old_handler) (sig, code, scp, addr);
  		    return;
  #		endif
  #		if defined (SUNOS5SIGS)
  		    (*(REAL_SIG_PF)old_handler) (sig, scp, context);
  		    return;
  #		endif
--- 2561,2577 ----
  		    return(EXCEPTION_CONTINUE_SEARCH);
  #		endif
              } else {
! #		if defined (SUNOS4) \
!                     || (defined(FREEBSD) && !defined(SUNOS5SIGS))
  		    (*old_handler) (sig, code, scp, addr);
  		    return;
  #		endif
  #		if defined (SUNOS5SIGS)
+                     /*
+                      * FIXME: For FreeBSD, this code should check if the 
+                      * old signal handler used the traditional BSD style and
+                      * if so call it using that style.
+                      */
  		    (*(REAL_SIG_PF)old_handler) (sig, scp, context);
  		    return;
  #		endif
*************** SIG_PF GC_old_segv_handler;	/* Also old 
*** 2506,2512 ****
  #		    if defined(ALPHA) || defined(M68K)
  		        (*(REAL_SIG_PF)old_handler) (sig, code, sc);
  #		    else 
! #		      if defined(IA64) || defined(HP_PA)
  		        (*(REAL_SIG_PF)old_handler) (sig, si, scp);
  #		      else
  		        (*(REAL_SIG_PF)old_handler) (sig, sc);
--- 2579,2585 ----
  #		    if defined(ALPHA) || defined(M68K)
  		        (*(REAL_SIG_PF)old_handler) (sig, code, sc);
  #		    else 
! #		      if defined(IA64) || defined(HP_PA) || defined(X86_64)
  		        (*(REAL_SIG_PF)old_handler) (sig, si, scp);
  #		      else
  		        (*(REAL_SIG_PF)old_handler) (sig, sc);
*************** void GC_dirty_init()
*** 2600,2606 ****
        struct sigaction	act, oldact;
        /* We should probably specify SA_SIGINFO for Linux, and handle 	*/
        /* the different architectures more uniformly.			*/
! #     if defined(IRIX5) || defined(LINUX) || defined(OSF1) || defined(HURD)
      	act.sa_flags	= SA_RESTART;
          act.sa_handler  = (SIG_PF)GC_write_fault_handler;
  #     else
--- 2673,2680 ----
        struct sigaction	act, oldact;
        /* We should probably specify SA_SIGINFO for Linux, and handle 	*/
        /* the different architectures more uniformly.			*/
! #     if defined(IRIX5) || defined(LINUX) && !defined(X86_64) \
! 	 || defined(OSF1) || defined(HURD)
      	act.sa_flags	= SA_RESTART;
          act.sa_handler  = (SIG_PF)GC_write_fault_handler;
  #     else
*************** void GC_dirty_init()
*** 2623,2629 ****
          GC_err_printf0("Page size not multiple of HBLKSIZE\n");
          ABORT("Page size not multiple of HBLKSIZE");
      }
! #   if defined(SUNOS4) || defined(FREEBSD)
        GC_old_bus_handler = signal(SIGBUS, GC_write_fault_handler);
        if (GC_old_bus_handler == SIG_IGN) {
          GC_err_printf0("Previously ignored bus error!?");
--- 2697,2703 ----
          GC_err_printf0("Page size not multiple of HBLKSIZE\n");
          ABORT("Page size not multiple of HBLKSIZE");
      }
! #   if defined(SUNOS4) || (defined(FREEBSD) && !defined(SUNOS5SIGS))
        GC_old_bus_handler = signal(SIGBUS, GC_write_fault_handler);
        if (GC_old_bus_handler == SIG_IGN) {
          GC_err_printf0("Previously ignored bus error!?");
*************** void GC_dirty_init()
*** 2647,2659 ****
  #	endif
        }
  #   endif
! #   if defined(SUNOS5SIGS) || defined(IRIX5) || defined(LINUX) \
!        || defined(OSF1) || defined(HURD)
        /* SUNOS5SIGS includes HPUX */
  #     if defined(GC_IRIX_THREADS)
        	sigaction(SIGSEGV, 0, &oldact);
        	sigaction(SIGSEGV, &act, 0);
! #     else
  	{
  	  int res = sigaction(SIGSEGV, &act, &oldact);
  	  if (res != 0) ABORT("Sigaction failed");
--- 2721,2733 ----
  #	endif
        }
  #   endif
! #   if (defined(SUNOS5SIGS) && !defined(FREEBSD)) || defined(IRIX5) \
!        || defined(LINUX) || defined(OSF1) || defined(HURD)
        /* SUNOS5SIGS includes HPUX */
  #     if defined(GC_IRIX_THREADS)
        	sigaction(SIGSEGV, 0, &oldact);
        	sigaction(SIGSEGV, &act, 0);
! #     else 
  	{
  	  int res = sigaction(SIGSEGV, &act, &oldact);
  	  if (res != 0) ABORT("Sigaction failed");
*************** void GC_dirty_init()
*** 2679,2686 ****
  	  GC_err_printf0("Replaced other SIGSEGV handler\n");
  #       endif
        }
! #   endif
! #   if defined(HPUX) || defined(LINUX) || defined(HURD)
        sigaction(SIGBUS, &act, &oldact);
        GC_old_bus_handler = oldact.sa_handler;
        if (GC_old_bus_handler == SIG_IGN) {
--- 2753,2761 ----
  	  GC_err_printf0("Replaced other SIGSEGV handler\n");
  #       endif
        }
! #   endif /* (SUNOS5SIGS && !FREEBSD) || IRIX5 || LINUX || OSF1 || HURD */
! #   if defined(HPUX) || defined(LINUX) || defined(HURD) \
!       || (defined(FREEBSD) && defined(SUNOS5SIGS))
        sigaction(SIGBUS, &act, &oldact);
        GC_old_bus_handler = oldact.sa_handler;
        if (GC_old_bus_handler == SIG_IGN) {
*************** void GC_dirty_init()
*** 2692,2698 ****
  	  GC_err_printf0("Replaced other SIGBUS handler\n");
  #       endif
        }
! #   endif /* HPUX || LINUX || HURD */
  #   if defined(MSWIN32)
        GC_old_segv_handler = SetUnhandledExceptionFilter(GC_write_fault_handler);
        if (GC_old_segv_handler != NULL) {
--- 2767,2773 ----
  	  GC_err_printf0("Replaced other SIGBUS handler\n");
  #       endif
        }
! #   endif /* HPUX || LINUX || HURD || (FREEBSD && SUNOS5SIGS) */
  #   if defined(MSWIN32)
        GC_old_segv_handler = SetUnhandledExceptionFilter(GC_write_fault_handler);
        if (GC_old_segv_handler != NULL) {
*************** word n;
*** 2977,2983 ****
  #include <sys/procfs.h>
  #include <sys/stat.h>
  
! #define INITIAL_BUF_SZ 4096
  word GC_proc_buf_size = INITIAL_BUF_SZ;
  char *GC_proc_buf;
  
--- 3052,3058 ----
  #include <sys/procfs.h>
  #include <sys/stat.h>
  
! #define INITIAL_BUF_SZ 16384
  word GC_proc_buf_size = INITIAL_BUF_SZ;
  char *GC_proc_buf;
  
*************** int dummy;
*** 3091,3097 ****
                  GC_proc_buf = bufp = new_buf;
                  GC_proc_buf_size = new_size;
              }
!             if (syscall(SYS_read, GC_proc_fd, bufp, GC_proc_buf_size) <= 0) {
                  WARN("Insufficient space for /proc read\n", 0);
                  /* Punt:	*/
          	memset(GC_grungy_pages, 0xff, sizeof (page_hash_table));
--- 3166,3172 ----
                  GC_proc_buf = bufp = new_buf;
                  GC_proc_buf_size = new_size;
              }
!             if (READ(GC_proc_fd, bufp, GC_proc_buf_size) <= 0) {
                  WARN("Insufficient space for /proc read\n", 0);
                  /* Punt:	*/
          	memset(GC_grungy_pages, 0xff, sizeof (page_hash_table));
*************** extern kern_return_t exception_raise_sta
*** 3312,3319 ****
  
  #define MAX_EXCEPTION_PORTS 16
  
- static mach_port_t GC_task_self;
- 
  static struct {
      mach_msg_type_number_t count;
      exception_mask_t      masks[MAX_EXCEPTION_PORTS];
--- 3387,3392 ----
*************** static void *GC_mprotect_thread(void *ar
*** 3431,3436 ****
--- 3504,3511 ----
      } msg;
  
      mach_msg_id_t id;
+ 
+     GC_darwin_register_mach_handler_thread(mach_thread_self());
      
      for(;;) {
          r = mach_msg(
*************** kern_return_t catch_exception_raise_stat
*** 3888,3900 ****
  
  #endif /* NEED_CALLINFO */
  
  #ifdef SAVE_CALL_CHAIN
  
  #if NARGS == 0 && NFRAMES % 2 == 0 /* No padding */ \
      && defined(GC_HAVE_BUILTIN_BACKTRACE)
  
- #include <execinfo.h>
- 
  void GC_save_callers (info) 
  struct callinfo info[NFRAMES];
  {
--- 3963,3977 ----
  
  #endif /* NEED_CALLINFO */
  
+ #if defined(GC_HAVE_BUILTIN_BACKTRACE)
+ # include <execinfo.h>
+ #endif
+ 
  #ifdef SAVE_CALL_CHAIN
  
  #if NARGS == 0 && NFRAMES % 2 == 0 /* No padding */ \
      && defined(GC_HAVE_BUILTIN_BACKTRACE)
  
  void GC_save_callers (info) 
  struct callinfo info[NFRAMES];
  {
*************** struct callinfo info[NFRAMES];
*** 3970,3975 ****
--- 4047,4054 ----
      static int reentry_count = 0;
      GC_bool stop = FALSE;
  
+     /* FIXME: This should probably use a different lock, so that we	*/
+     /* become callable with or without the allocation lock.		*/
      LOCK();
        ++reentry_count;
      UNLOCK();
*************** struct callinfo info[NFRAMES];
*** 4004,4010 ****
  #	  ifdef LINUX
  	    FILE *pipe;
  #	  endif
! #	  if defined(GC_HAVE_BUILTIN_BACKTRACE)
  	    char **sym_name =
  	      backtrace_symbols((void **)(&(info[i].ci_pc)), 1);
  	    char *name = sym_name[0];
--- 4083,4090 ----
  #	  ifdef LINUX
  	    FILE *pipe;
  #	  endif
! #	  if defined(GC_HAVE_BUILTIN_BACKTRACE) \
! 	     && !defined(GC_BACKTRACE_SYMBOLS_BROKEN)
  	    char **sym_name =
  	      backtrace_symbols((void **)(&(info[i].ci_pc)), 1);
  	    char *name = sym_name[0];
*************** struct callinfo info[NFRAMES];
*** 4023,4028 ****
--- 4103,4111 ----
  #		define RESULT_SZ 200
  		static char result_buf[RESULT_SZ];
  		size_t result_len;
+ 		char *old_preload;
+ #		define PRELOAD_SZ 200
+     		char preload_buf[PRELOAD_SZ];
  		static GC_bool found_exe_name = FALSE;
  		static GC_bool will_fail = FALSE;
  		int ret_code;
*************** struct callinfo info[NFRAMES];
*** 4044,4050 ****
--- 4127,4146 ----
  		/* isn't time critical.					*/
  		sprintf(cmd_buf, "/usr/bin/addr2line -f -e %s 0x%lx", exe_name,
  				 (unsigned long)info[i].ci_pc);
+ 		old_preload = getenv ("LD_PRELOAD");
+ 	        if (0 != old_preload) {
+ 		  if (strlen (old_preload) >= PRELOAD_SZ) {
+ 		    will_fail = TRUE;
+ 		    goto out;
+ 		  }
+ 		  strcpy (preload_buf, old_preload);
+ 		  unsetenv ("LD_PRELOAD");
+ 	        }
  		pipe = popen(cmd_buf, "r");
+ 		if (0 != old_preload
+ 		    && 0 != setenv ("LD_PRELOAD", preload_buf, 0)) {
+ 		  WARN("Failed to reset LD_PRELOAD\n", 0);
+       		}
  		if (pipe == NULL
  		    || (result_len = fread(result_buf, 1, RESULT_SZ - 1, pipe))
  		       == 0) {
*************** struct callinfo info[NFRAMES];
*** 4081,4087 ****
  	    }
  #	  endif /* LINUX */
  	  GC_err_printf1("\t\t%s\n", name);
! #	  if defined(GC_HAVE_BUILTIN_BACKTRACE)
  	    free(sym_name);  /* May call GC_free; that's OK */
  #         endif
  	}
--- 4177,4184 ----
  	    }
  #	  endif /* LINUX */
  	  GC_err_printf1("\t\t%s\n", name);
! #	  if defined(GC_HAVE_BUILTIN_BACKTRACE) \
! 	     && !defined(GC_BACKTRACE_SYMBOLS_BROKEN)
  	    free(sym_name);  /* May call GC_free; that's OK */
  #         endif
  	}
diff -Nrcpad gcc-3.4.3/boehm-gc/powerpc_darwin_mach_dep.s gcc-4.0.0/boehm-gc/powerpc_darwin_mach_dep.s
*** gcc-3.4.3/boehm-gc/powerpc_darwin_mach_dep.s	Mon Jul 28 03:46:10 2003
--- gcc-4.0.0/boehm-gc/powerpc_darwin_mach_dep.s	Sun Aug 15 21:32:11 2004
*************** _GC_push_regs:
*** 64,70 ****
  ; PIC stuff, generated by GCC
  
  .data
! .picsymbol_stub
  L_GC_push_one$stub:
  	.indirect_symbol _GC_push_one
  	mflr r0
--- 64,71 ----
  ; PIC stuff, generated by GCC
  
  .data
! .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
! 	.align 2
  L_GC_push_one$stub:
  	.indirect_symbol _GC_push_one
  	mflr r0
*************** L0$_GC_push_one:
*** 73,81 ****
  	mflr r11
  	addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
  	mtlr r0
! 	lwz r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11)
  	mtctr r12
- 	addi r11,r11,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
  	bctr
  .data
  .lazy_symbol_pointer
--- 74,81 ----
  	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
diff -Nrcpad gcc-3.4.3/boehm-gc/pthread_stop_world.c gcc-4.0.0/boehm-gc/pthread_stop_world.c
*** gcc-3.4.3/boehm-gc/pthread_stop_world.c	Mon Jul 28 03:46:09 2003
--- gcc-4.0.0/boehm-gc/pthread_stop_world.c	Wed Feb  9 21:33:02 2005
*************** void GC_print_sig_mask()
*** 39,44 ****
--- 39,72 ----
  
  #endif
  
+ /* Remove the signals that we want to allow in thread stopping 	*/
+ /* handler from a set.						*/
+ void GC_remove_allowed_signals(sigset_t *set)
+ {
+ #   ifdef NO_SIGNALS
+       if (sigdelset(set, SIGINT) != 0
+ 	  || sigdelset(set, SIGQUIT) != 0
+ 	  || sigdelset(set, SIGABRT) != 0
+ 	  || sigdelset(set, SIGTERM) != 0) {
+         ABORT("sigdelset() failed");
+       }
+ #   endif
+ 
+ #   ifdef MPROTECT_VDB
+       /* Handlers write to the thread structure, which is in the heap,	*/
+       /* and hence can trigger a protection fault.			*/
+       if (sigdelset(set, SIGSEGV) != 0
+ #	  ifdef SIGBUS
+ 	    || sigdelset(set, SIGBUS) != 0
+ # 	  endif
+ 	  ) {
+         ABORT("sigdelset() failed");
+       }
+ #   endif
+ }
+ 
+ static sigset_t suspend_handler_mask;
+ 
  word GC_stop_count;	/* Incremented at the beginning of GC_stop_world. */
  
  #ifdef GC_OSF1_THREADS
*************** word GC_stop_count;	/* Incremented at th
*** 73,84 ****
  
  sem_t GC_suspend_ack_sem;
  
  void GC_suspend_handler(int sig)
  {
      int dummy;
      pthread_t my_thread = pthread_self();
      GC_thread me;
-     sigset_t mask;
  #   ifdef PARALLEL_MARK
  	word my_mark_no = GC_mark_no;
  	/* Marker can't proceed until we acknowledge.  Thus this is	*/
--- 101,131 ----
  
  sem_t GC_suspend_ack_sem;
  
+ void GC_suspend_handler_inner(ptr_t sig_arg);
+ 
+ #if defined(IA64) || defined(HP_PA)
+ extern void GC_with_callee_saves_pushed();
+ 
  void GC_suspend_handler(int sig)
  {
+   GC_with_callee_saves_pushed(GC_suspend_handler_inner, (ptr_t)(word)sig);
+ }
+ 
+ #else
+ /* We believe that in all other cases the full context is already	*/
+ /* in the signal handler frame.						*/
+ void GC_suspend_handler(int sig)
+ {
+   GC_suspend_handler_inner((ptr_t)(word)sig);
+ }
+ #endif
+ 
+ void GC_suspend_handler_inner(ptr_t sig_arg)
+ {
+     int sig = (int)(word)sig_arg;
      int dummy;
      pthread_t my_thread = pthread_self();
      GC_thread me;
  #   ifdef PARALLEL_MARK
  	word my_mark_no = GC_mark_no;
  	/* Marker can't proceed until we acknowledge.  Thus this is	*/
*************** void GC_suspend_handler(int sig)
*** 125,141 ****
      /* this thread a SIG_THR_RESTART signal.			*/
      /* SIG_THR_RESTART should be masked at this point.  Thus there	*/
      /* is no race.						*/
-     if (sigfillset(&mask) != 0) ABORT("sigfillset() failed");
-     if (sigdelset(&mask, SIG_THR_RESTART) != 0) ABORT("sigdelset() failed");
- #   ifdef NO_SIGNALS
-       if (sigdelset(&mask, SIGINT) != 0) ABORT("sigdelset() failed");
-       if (sigdelset(&mask, SIGQUIT) != 0) ABORT("sigdelset() failed");
-       if (sigdelset(&mask, SIGTERM) != 0) ABORT("sigdelset() failed");
-       if (sigdelset(&mask, SIGABRT) != 0) ABORT("sigdelset() failed");
- #   endif
      do {
  	    me->stop_info.signal = 0;
! 	    sigsuspend(&mask);             /* Wait for signal */
      } while (me->stop_info.signal != SIG_THR_RESTART);
      /* If the RESTART signal gets lost, we can still lose.  That should be  */
      /* less likely than losing the SUSPEND signal, since we don't do much   */
--- 172,180 ----
      /* this thread a SIG_THR_RESTART signal.			*/
      /* SIG_THR_RESTART should be masked at this point.  Thus there	*/
      /* is no race.						*/
      do {
  	    me->stop_info.signal = 0;
! 	    sigsuspend(&suspend_handler_mask);        /* Wait for signal */
      } while (me->stop_info.signal != SIG_THR_RESTART);
      /* If the RESTART signal gets lost, we can still lose.  That should be  */
      /* less likely than losing the SUSPEND signal, since we don't do much   */
*************** void GC_restart_handler(int sig)
*** 186,191 ****
--- 225,231 ----
  /* world is stopped.  Should not fail if it isn't.			*/
  void GC_push_all_stacks()
  {
+     GC_bool found_me = FALSE;
      int i;
      GC_thread p;
      ptr_t lo, hi;
*************** void GC_push_all_stacks()
*** 206,211 ****
--- 246,252 ----
  #  	    else
   	        lo = GC_approx_sp();
  #           endif
+ 	    found_me = TRUE;
  	    IF_IA64(bs_hi = (ptr_t)GC_save_regs_in_stack();)
  	} else {
  	    lo = p -> stop_info.stack_ptr;
*************** void GC_push_all_stacks()
*** 232,237 ****
--- 273,283 ----
            GC_push_all_stack(lo, hi);
  #	endif
  #	ifdef IA64
+ #         if DEBUG_THREADS
+             GC_printf3("Reg stack for thread 0x%lx = [%lx,%lx)\n",
+     	        (unsigned long) p -> id,
+ 		(unsigned long) bs_lo, (unsigned long) bs_hi);
+ #	  endif
            if (pthread_equal(p -> id, me)) {
  	    GC_push_all_eager(bs_lo, bs_hi);
  	  } else {
*************** void GC_push_all_stacks()
*** 240,245 ****
--- 286,293 ----
  #	endif
        }
      }
+     if (!found_me && !GC_in_thread_creation)
+       ABORT("Collecting from unknown thread.");
  }
  
  /* There seems to be a very rare thread stopping problem.  To help us  */
*************** void GC_stop_world()
*** 341,349 ****
  	  }
        }
      for (i = 0; i < n_live_threads; i++) {
! 	  if (0 != (code = sem_wait(&GC_suspend_ack_sem))) {
  	      GC_err_printf1("Sem_wait returned %ld\n", (unsigned long)code);
  	      ABORT("sem_wait for handler failed");
  	  }
      }
  #   ifdef PARALLEL_MARK
--- 389,399 ----
  	  }
        }
      for (i = 0; i < n_live_threads; i++) {
! 	  while (0 != (code = sem_wait(&GC_suspend_ack_sem))) {
! 	    if (errno != EINTR) {
  	      GC_err_printf1("Sem_wait returned %ld\n", (unsigned long)code);
  	      ABORT("sem_wait for handler failed");
+ 	    }
  	  }
      }
  #   ifdef PARALLEL_MARK
*************** void GC_stop_init() {
*** 408,423 ****
      if (sigfillset(&act.sa_mask) != 0) {
      	ABORT("sigfillset() failed");
      }
! #   ifdef NO_SIGNALS
!       if (sigdelset(&act.sa_mask, SIGINT) != 0
! 	  || sigdelset(&act.sa_mask, SIGQUIT != 0)
! 	  || sigdelset(&act.sa_mask, SIGABRT != 0)
! 	  || sigdelset(&act.sa_mask, SIGTERM != 0)) {
!         ABORT("sigdelset() failed");
!       }
! #   endif
! 
!     /* SIG_THR_RESTART is unmasked by the handler when necessary. 	*/
      act.sa_handler = GC_suspend_handler;
      if (sigaction(SIG_SUSPEND, &act, NULL) != 0) {
      	ABORT("Cannot set SIG_SUSPEND handler");
--- 458,466 ----
      if (sigfillset(&act.sa_mask) != 0) {
      	ABORT("sigfillset() failed");
      }
!     GC_remove_allowed_signals(&act.sa_mask);
!     /* SIG_THR_RESTART is set in the resulting mask.		*/
!     /* It is unmasked by the handler when necessary. 		*/
      act.sa_handler = GC_suspend_handler;
      if (sigaction(SIG_SUSPEND, &act, NULL) != 0) {
      	ABORT("Cannot set SIG_SUSPEND handler");
*************** void GC_stop_init() {
*** 428,433 ****
--- 471,482 ----
      	ABORT("Cannot set SIG_THR_RESTART handler");
      }
  
+     /* Inititialize suspend_handler_mask. It excludes SIG_THR_RESTART. */
+       if (sigfillset(&suspend_handler_mask) != 0) ABORT("sigfillset() failed");
+       GC_remove_allowed_signals(&suspend_handler_mask);
+       if (sigdelset(&suspend_handler_mask, SIG_THR_RESTART) != 0)
+ 	  ABORT("sigdelset() failed");
+ 
      /* Check for GC_RETRY_SIGNALS.	*/
        if (0 != GETENV("GC_RETRY_SIGNALS")) {
  	  GC_retry_signals = TRUE;
diff -Nrcpad gcc-3.4.3/boehm-gc/pthread_support.c gcc-4.0.0/boehm-gc/pthread_support.c
*** gcc-3.4.3/boehm-gc/pthread_support.c	Mon Jul 28 03:46:09 2003
--- gcc-4.0.0/boehm-gc/pthread_support.c	Fri Aug 13 23:05:30 2004
***************
*** 47,52 ****
--- 47,53 ----
  /*#define DEBUG_THREADS 1*/
  /*#define GC_ASSERTIONS*/
  
+ # include "gc.h"
  # include "private/pthread_support.h"
  
  # if defined(GC_PTHREADS) && !defined(GC_SOLARIS_THREADS) \
***************
*** 54,61 ****
       && !defined(GC_AIX_THREADS)
  
  # if defined(GC_HPUX_THREADS) && !defined(USE_PTHREAD_SPECIFIC) \
!      && !defined(USE_HPUX_TLS)
! #   define USE_HPUX_TLS
  # endif
  
  # if (defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) || \
--- 55,71 ----
       && !defined(GC_AIX_THREADS)
  
  # if defined(GC_HPUX_THREADS) && !defined(USE_PTHREAD_SPECIFIC) \
!      && !defined(USE_COMPILER_TLS)
! #   ifdef __GNUC__
! #     define USE_PTHREAD_SPECIFIC
!       /* Empirically, as of gcc 3.3, USE_COMPILER_TLS doesn't work.	*/
! #   else
! #     define USE_COMPILER_TLS
! #   endif
! # endif
! 
! # if defined USE_HPUX_TLS
!     --> Macro replaced by USE_COMPILER_TLS
  # endif
  
  # if (defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) || \
***************
*** 72,78 ****
  # endif
  
  # ifdef THREAD_LOCAL_ALLOC
! #   if !defined(USE_PTHREAD_SPECIFIC) && !defined(USE_HPUX_TLS)
  #     include "private/specific.h"
  #   endif
  #   if defined(USE_PTHREAD_SPECIFIC)
--- 82,88 ----
  # endif
  
  # ifdef THREAD_LOCAL_ALLOC
! #   if !defined(USE_PTHREAD_SPECIFIC) && !defined(USE_COMPILER_TLS)
  #     include "private/specific.h"
  #   endif
  #   if defined(USE_PTHREAD_SPECIFIC)
***************
*** 81,87 ****
  #     define GC_key_create pthread_key_create
        typedef pthread_key_t GC_key_t;
  #   endif
! #   if defined(USE_HPUX_TLS)
  #     define GC_getspecific(x) (x)
  #     define GC_setspecific(key, v) ((key) = (v), 0)
  #     define GC_key_create(key, d) 0
--- 91,97 ----
  #     define GC_key_create pthread_key_create
        typedef pthread_key_t GC_key_t;
  #   endif
! #   if defined(USE_COMPILER_TLS)
  #     define GC_getspecific(x) (x)
  #     define GC_setspecific(key, v) ((key) = (v), 0)
  #     define GC_key_create(key, d) 0
***************
*** 99,104 ****
--- 109,115 ----
  # include <sys/types.h>
  # include <sys/stat.h>
  # include <fcntl.h>
+ # include <signal.h>
  
  #if defined(GC_DARWIN_THREADS)
  # include "private/darwin_semaphore.h"
*************** void GC_init_parallel();
*** 158,164 ****
  
  /* We don't really support thread-local allocation with DBG_HDRS_ALL */
  
! #ifdef USE_HPUX_TLS
    __thread
  #endif
  GC_key_t GC_thread_key;
--- 169,175 ----
  
  /* We don't really support thread-local allocation with DBG_HDRS_ALL */
  
! #ifdef USE_COMPILER_TLS
    __thread
  #endif
  GC_key_t GC_thread_key;
*************** static __inline__ void start_mark_thread
*** 500,518 ****
  
  #endif /* !PARALLEL_MARK */
  
- /* Defining INSTALL_LOOPING_SEGV_HANDLER causes SIGSEGV and SIGBUS to 	*/
- /* result in an infinite loop in a signal handler.  This can be very	*/
- /* useful for debugging, since (as of RH7) gdb still seems to have	*/
- /* serious problems with threads.					*/
- #ifdef INSTALL_LOOPING_SEGV_HANDLER
- void GC_looping_handler(int sig)
- {
-     GC_printf3("Signal %ld in thread %lx, pid %ld\n",
- 	       sig, pthread_self(), getpid());
-     for (;;);
- }
- #endif
- 
  GC_bool GC_thr_initialized = FALSE;
  
  volatile GC_thread GC_threads[THREAD_TABLE_SZ];
--- 511,516 ----
*************** void GC_delete_gc_thread(pthread_t id, G
*** 622,628 ****
      GC_INTERNAL_FREE(p);
  }
  
! /* Return a GC_thread corresponding to a given thread_t.	*/
  /* Returns 0 if it's not there.					*/
  /* Caller holds  allocation lock or otherwise inhibits 		*/
  /* updates.							*/
--- 620,626 ----
      GC_INTERNAL_FREE(p);
  }
  
! /* Return a GC_thread corresponding to a given pthread_t.	*/
  /* Returns 0 if it's not there.					*/
  /* Caller holds  allocation lock or otherwise inhibits 		*/
  /* updates.							*/
*************** void GC_wait_for_gc_completion(GC_bool w
*** 747,753 ****
--- 745,753 ----
  	while (GC_incremental && GC_collection_in_progress()
  	       && (wait_for_all || old_gc_no == GC_gc_no)) {
  	    ENTER_GC();
+ 	    GC_in_thread_creation = TRUE;
              GC_collect_a_little_inner(1);
+ 	    GC_in_thread_creation = FALSE;
  	    EXIT_GC();
  	    UNLOCK();
  	    sched_yield();
*************** void GC_thread_exit_proc(void *arg)
*** 1055,1063 ****
  	me -> flags |= FINISHED;
      }
  #   if defined(THREAD_LOCAL_ALLOC) && !defined(USE_PTHREAD_SPECIFIC) \
!        && !defined(USE_HPUX_TLS) && !defined(DBG_HDRS_ALL)
        GC_remove_specific(GC_thread_key);
  #   endif
      GC_wait_for_gc_completion(FALSE);
      UNLOCK();
  }
--- 1055,1064 ----
  	me -> flags |= FINISHED;
      }
  #   if defined(THREAD_LOCAL_ALLOC) && !defined(USE_PTHREAD_SPECIFIC) \
!        && !defined(USE_COMPILER_TLS) && !defined(DBG_HDRS_ALL)
        GC_remove_specific(GC_thread_key);
  #   endif
+     /* The following may run the GC from "nonexistent" thread.	*/
      GC_wait_for_gc_completion(FALSE);
      UNLOCK();
  }
*************** WRAP_FUNC(pthread_detach)(pthread_t thre
*** 1115,1120 ****
--- 1116,1123 ----
      return result;
  }
  
+ GC_bool GC_in_thread_creation = FALSE;
+ 
  void * GC_start_routine(void * arg)
  {
      int dummy;
*************** void * GC_start_routine(void * arg)
*** 1132,1138 ****
--- 1135,1143 ----
          GC_printf1("sp = 0x%lx\n", (long) &arg);
  #   endif
      LOCK();
+     GC_in_thread_creation = TRUE;
      me = GC_new_thread(my_pthread);
+     GC_in_thread_creation = FALSE;
  #ifdef GC_DARWIN_THREADS
      me -> stop_info.mach_thread = mach_thread_self();
  #else
*************** WRAP_FUNC(pthread_create)(pthread_t *new
*** 1301,1312 ****
  void GC_pause()
  {
      int i;
! #	ifndef __GNUC__
!         volatile word dummy = 0;
! #	endif
  
      for (i = 0; i < 10; ++i) { 
! #     ifdef __GNUC__
          __asm__ __volatile__ (" " : : : "memory");
  #     else
  	/* Something that's unlikely to be optimized away. */
--- 1306,1317 ----
  void GC_pause()
  {
      int i;
! #   if !defined(__GNUC__) || defined(__INTEL_COMPILER)
!       volatile word dummy = 0;
! #   endif
  
      for (i = 0; i < 10; ++i) { 
! #     if defined(__GNUC__) && !defined(__INTEL_COMPILER)
          __asm__ __volatile__ (" " : : : "memory");
  #     else
  	/* Something that's unlikely to be optimized away. */
*************** void GC_pause()
*** 1315,1321 ****
      }
  }
      
! #define SPIN_MAX 1024	/* Maximum number of calls to GC_pause before	*/
  			/* give up.					*/
  
  VOLATILE GC_bool GC_collecting = 0;
--- 1320,1326 ----
      }
  }
      
! #define SPIN_MAX 128	/* Maximum number of calls to GC_pause before	*/
  			/* give up.					*/
  
  VOLATILE GC_bool GC_collecting = 0;
*************** VOLATILE GC_bool GC_collecting = 0;
*** 1340,1358 ****
  /* yield by calling pthread_mutex_lock(); it never makes sense to	*/
  /* explicitly sleep.							*/
  
  void GC_generic_lock(pthread_mutex_t * lock)
  {
  #ifndef NO_PTHREAD_TRYLOCK
      unsigned pause_length = 1;
      unsigned i;
      
!     if (0 == pthread_mutex_trylock(lock)) return;
      for (; pause_length <= SPIN_MAX; pause_length <<= 1) {
  	for (i = 0; i < pause_length; ++i) {
  	    GC_pause();
  	}
          switch(pthread_mutex_trylock(lock)) {
  	    case 0:
  		return;
  	    case EBUSY:
  		break;
--- 1345,1378 ----
  /* yield by calling pthread_mutex_lock(); it never makes sense to	*/
  /* explicitly sleep.							*/
  
+ #define LOCK_STATS
+ #ifdef LOCK_STATS
+   unsigned long GC_spin_count = 0;
+   unsigned long GC_block_count = 0;
+   unsigned long GC_unlocked_count = 0;
+ #endif
+ 
  void GC_generic_lock(pthread_mutex_t * lock)
  {
  #ifndef NO_PTHREAD_TRYLOCK
      unsigned pause_length = 1;
      unsigned i;
      
!     if (0 == pthread_mutex_trylock(lock)) {
! #       ifdef LOCK_STATS
! 	    ++GC_unlocked_count;
! #       endif
! 	return;
!     }
      for (; pause_length <= SPIN_MAX; pause_length <<= 1) {
  	for (i = 0; i < pause_length; ++i) {
  	    GC_pause();
  	}
          switch(pthread_mutex_trylock(lock)) {
  	    case 0:
+ #		ifdef LOCK_STATS
+ 		    ++GC_spin_count;
+ #		endif
  		return;
  	    case EBUSY:
  		break;
*************** void GC_generic_lock(pthread_mutex_t * l
*** 1361,1366 ****
--- 1381,1389 ----
          }
      }
  #endif /* !NO_PTHREAD_TRYLOCK */
+ #   ifdef LOCK_STATS
+ 	++GC_block_count;
+ #   endif
      pthread_mutex_lock(lock);
  }
  
diff -Nrcpad gcc-3.4.3/boehm-gc/solaris_pthreads.c gcc-4.0.0/boehm-gc/solaris_pthreads.c
*** gcc-3.4.3/boehm-gc/solaris_pthreads.c	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/solaris_pthreads.c	Mon Aug 16 16:32:26 2004
***************
*** 16,23 ****
   * Modified by Peter C. for Solaris Posix Threads.
   */
  
  # if defined(GC_SOLARIS_PTHREADS)
- # include "private/gc_priv.h"
  # include <pthread.h>
  # include <thread.h>
  # include <signal.h>
--- 16,24 ----
   * Modified by Peter C. for Solaris Posix Threads.
   */
  
+ #include "private/gc_priv.h"
+ 
  # if defined(GC_SOLARIS_PTHREADS)
  # include <pthread.h>
  # include <thread.h>
  # include <signal.h>
diff -Nrcpad gcc-3.4.3/boehm-gc/solaris_threads.c gcc-4.0.0/boehm-gc/solaris_threads.c
*** gcc-3.4.3/boehm-gc/solaris_threads.c	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/solaris_threads.c	Mon Aug 16 16:32:26 2004
***************
*** 16,24 ****
   */
  /* Boehm, September 14, 1994 4:44 pm PDT */
  
! # if defined(GC_SOLARIS_THREADS) || defined(GC_SOLARIS_PTHREADS)
  
! # include "private/gc_priv.h"
  # include "private/solaris_threads.h"
  # include <thread.h>
  # include <synch.h>
--- 16,24 ----
   */
  /* Boehm, September 14, 1994 4:44 pm PDT */
  
! #include "private/gc_priv.h"
  
! # if defined(GC_SOLARIS_THREADS) || defined(GC_SOLARIS_PTHREADS)
  # include "private/solaris_threads.h"
  # include <thread.h>
  # include <synch.h>
*************** void GC_thr_init(void)
*** 786,791 ****
--- 786,792 ----
  {
      GC_thread t;
      thread_t tid;
+     int ret;
  
      if (GC_thr_initialized)
  	    return;
*************** void GC_thr_init(void)
*** 803,811 ****
        t = GC_new_thread(thr_self());
        t -> stack_size = 0;
        t -> flags = DETACHED | CLIENT_OWNS_STACK;
!     if (thr_create(0 /* stack */, 0 /* stack_size */, GC_thr_daemon,
!     		   0 /* arg */, THR_DETACHED | THR_DAEMON,
!     		   &tid /* thread_id */) != 0) {
      	ABORT("Cant fork daemon");
      }
      thr_setprio(tid, 126);
--- 804,814 ----
        t = GC_new_thread(thr_self());
        t -> stack_size = 0;
        t -> flags = DETACHED | CLIENT_OWNS_STACK;
!     ret = thr_create(0 /* stack */, 0 /* stack_size */, GC_thr_daemon,
!     		     0 /* arg */, THR_DETACHED | THR_DAEMON,
!     		     &tid /* thread_id */);
!     if (ret != 0) {
! 	GC_err_printf1("Thr_create returned %ld\n", ret);
      	ABORT("Cant fork daemon");
      }
      thr_setprio(tid, 126);
diff -Nrcpad gcc-3.4.3/boehm-gc/specific.c gcc-4.0.0/boehm-gc/specific.c
*** gcc-3.4.3/boehm-gc/specific.c	Fri Mar 29 22:52:13 2002
--- gcc-4.0.0/boehm-gc/specific.c	Mon Aug 16 23:06:46 2004
***************
*** 11,19 ****
   * modified is included with the above copyright notice.
   */
  
  #if defined(GC_LINUX_THREADS)
  
- #include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */
  #include "private/specific.h"
  
  static tse invalid_tse = {INVALID_QTID, 0, 0, INVALID_THREADID};
--- 11,20 ----
   * modified is included with the above copyright notice.
   */
  
+ #include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */
+ 
  #if defined(GC_LINUX_THREADS)
  
  #include "private/specific.h"
  
  static tse invalid_tse = {INVALID_QTID, 0, 0, INVALID_THREADID};
diff -Nrcpad gcc-3.4.3/boehm-gc/tests/middle.c gcc-4.0.0/boehm-gc/tests/middle.c
*** gcc-3.4.3/boehm-gc/tests/middle.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/boehm-gc/tests/middle.c	Thu Aug 12 21:14:30 2004
***************
*** 0 ****
--- 1,25 ----
+ /*
+  * Test at the boundary between small and large objects.
+  * Inspired by a test case from Zoltan Varga.
+  */
+ #include <gc.h>
+ #include <stdio.h>
+ 
+ int main ()
+ {
+         int i;
+ 
+         GC_all_interior_pointers = 0;
+ 
+         for (i = 0; i < 20000; ++i) {
+                 GC_malloc_atomic (4096);
+                 GC_malloc (4096);
+ 	}
+         for (i = 0; i < 20000; ++i) {
+                 GC_malloc_atomic (2048);
+                 GC_malloc (2048);
+ 	}
+ 	printf("Final heap size is %ld\n", GC_get_heap_size());
+ 	return 0;
+ }
+ 
diff -Nrcpad gcc-3.4.3/boehm-gc/tests/test.c gcc-4.0.0/boehm-gc/tests/test.c
*** gcc-3.4.3/boehm-gc/tests/test.c	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/tests/test.c	Fri Aug 13 23:05:35 2004
*************** sexpr y;
*** 208,214 ****
  #ifdef GC_GCJ_SUPPORT
  
  #include "gc_mark.h"
- #include "private/dbg_mlc.h"  /* For USR_PTR_FROM_BASE */
  #include "gc_gcj.h"
  
  /* The following struct emulates the vtable in gcj.	*/
--- 208,213 ----
*************** struct GC_ms_entry * fake_gcj_mark_proc(
*** 233,239 ****
      sexpr x;
      if (1 == env) {
  	/* Object allocated with debug allocator.	*/
! 	addr = (word *)USR_PTR_FROM_BASE(addr);
      }
      x = (sexpr)(addr + 1); /* Skip the vtable pointer. */
      mark_stack_ptr = GC_MARK_AND_PUSH(
--- 232,238 ----
      sexpr x;
      if (1 == env) {
  	/* Object allocated with debug allocator.	*/
! 	addr = (word *)GC_USR_PTR_FROM_BASE(addr);
      }
      x = (sexpr)(addr + 1); /* Skip the vtable pointer. */
      mark_stack_ptr = GC_MARK_AND_PUSH(
*************** void run_one_test()
*** 1256,1264 ****
  	FAIL;
        }
        if (!TEST_FAIL_COUNT(1)) {
! #	if!(defined(RS6000) || defined(POWERPC) || defined(IA64))
  	  /* ON RS6000s function pointers point to a descriptor in the	*/
  	  /* data segment, so there should have been no failures.	*/
      	  (void)GC_printf0("GC_is_visible produced wrong failure indication\n");
      	  FAIL;
  #	endif
--- 1255,1265 ----
  	FAIL;
        }
        if (!TEST_FAIL_COUNT(1)) {
! #	if!(defined(RS6000) || defined(POWERPC) || defined(IA64)) || defined(M68K)
  	  /* ON RS6000s function pointers point to a descriptor in the	*/
  	  /* data segment, so there should have been no failures.	*/
+ 	  /* The same applies to IA64.  Something similar seems to	*/
+ 	  /* be going on with NetBSD/M68K.				*/
      	  (void)GC_printf0("GC_is_visible produced wrong failure indication\n");
      	  FAIL;
  #	endif
*************** void SetMinimumStack(long minSize)
*** 1486,1495 ****
  #   endif
      n_tests = 0;
      
- #if defined(__APPLE__) && defined(__MACH__)
- 	GC_INIT();
- #endif
-     
  #   if defined(DJGPP)
  	/* No good way to determine stack base from library; do it */
  	/* manually on this platform.				   */
--- 1487,1492 ----
*************** void SetMinimumStack(long minSize)
*** 1501,1507 ****
  	/* Cheat and let stdio initialize toolbox for us.	*/
  	printf("Testing GC Macintosh port.\n");
  #   endif
!     GC_INIT();	/* Only needed if gc is dynamic library.	*/
      (void) GC_set_warn_proc(warn_proc);
  #   if (defined(MPROTECT_VDB) || defined(PROC_VDB)) \
            && !defined(MAKE_BACK_GRAPH)
--- 1498,1504 ----
  	/* Cheat and let stdio initialize toolbox for us.	*/
  	printf("Testing GC Macintosh port.\n");
  #   endif
!     GC_INIT();	/* Only needed on a few platforms.	*/
      (void) GC_set_warn_proc(warn_proc);
  #   if (defined(MPROTECT_VDB) || defined(PROC_VDB)) \
            && !defined(MAKE_BACK_GRAPH)
*************** main()
*** 1794,1802 ****
            (void)GC_printf0("pthread_default_stacksize_np failed.\n");
  	}
  #   endif	/* GC_HPUX_THREADS */
! # 	if defined(__APPLE__) && defined(__MACH__)
! 		GC_INIT();
! #	endif
  
      pthread_attr_init(&attr);
  #   if defined(GC_IRIX_THREADS) || defined(GC_FREEBSD_THREADS) \
--- 1791,1797 ----
            (void)GC_printf0("pthread_default_stacksize_np failed.\n");
  	}
  #   endif	/* GC_HPUX_THREADS */
!     GC_INIT();
  
      pthread_attr_init(&attr);
  #   if defined(GC_IRIX_THREADS) || defined(GC_FREEBSD_THREADS) \
diff -Nrcpad gcc-3.4.3/boehm-gc/tests/test_cpp.cc gcc-4.0.0/boehm-gc/tests/test_cpp.cc
*** gcc-3.4.3/boehm-gc/tests/test_cpp.cc	Mon Jul 28 04:18:23 2003
--- gcc-4.0.0/boehm-gc/tests/test_cpp.cc	Fri Aug 13 23:05:36 2004
*************** int APIENTRY WinMain(
*** 192,198 ****
  # endif
  #endif
  
!    GC_init();
  
  #  if defined(MACOS)                        // MacOS
      char* argv_[] = {"test_cpp", "10"};     //   doesn't
--- 192,198 ----
  # endif
  #endif
  
!    GC_INIT();
  
  #  if defined(MACOS)                        // MacOS
      char* argv_[] = {"test_cpp", "10"};     //   doesn't
diff -Nrcpad gcc-3.4.3/boehm-gc/tests/trace_test.c gcc-4.0.0/boehm-gc/tests/trace_test.c
*** gcc-3.4.3/boehm-gc/tests/trace_test.c	Fri Aug 17 18:30:51 2001
--- gcc-4.0.0/boehm-gc/tests/trace_test.c	Fri Aug 13 23:05:36 2004
*************** struct treenode {
*** 10,15 ****
--- 10,16 ----
  struct treenode * mktree(int i) {
    struct treenode * r = GC_MALLOC(sizeof(struct treenode));
    if (0 == i) return 0;
+   if (1 == i) r = GC_MALLOC_ATOMIC(sizeof(struct treenode));
    r -> x = mktree(i-1);
    r -> y = mktree(i-1);
    return r;
diff -Nrcpad gcc-3.4.3/boehm-gc/threadlibs.c gcc-4.0.0/boehm-gc/threadlibs.c
*** gcc-3.4.3/boehm-gc/threadlibs.c	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/threadlibs.c	Fri Aug 13 23:05:30 2004
***************
*** 1,3 ****
--- 1,4 ----
+ # include "gc_config_macros.h"
  # include "private/gcconfig.h"
  # include <stdio.h>
  
diff -Nrcpad gcc-3.4.3/boehm-gc/typd_mlc.c gcc-4.0.0/boehm-gc/typd_mlc.c
*** gcc-3.4.3/boehm-gc/typd_mlc.c	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/typd_mlc.c	Fri Aug 13 23:05:30 2004
*************** mse * GC_array_mark_proc GC_PROTO((regis
*** 348,355 ****
  				   mse * mark_stack_limit,
  				   word env));
  
- GC_descr GC_generic_array_descr;
- 
  /* Caller does not hold allocation lock. */
  void GC_init_explicit_typing()
  {
--- 348,353 ----
*************** void GC_init_explicit_typing()
*** 370,416 ****
      }
      GC_explicit_typing_initialized = TRUE;
      /* Set up object kind with simple indirect descriptor. */
!       GC_eobjfreelist = (ptr_t *)
!           GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
!       if (GC_eobjfreelist == 0) ABORT("Couldn't allocate GC_eobjfreelist");
!       BZERO(GC_eobjfreelist, (MAXOBJSZ+1)*sizeof(ptr_t));
!       GC_explicit_kind = GC_n_kinds++;
!       GC_obj_kinds[GC_explicit_kind].ok_freelist = GC_eobjfreelist;
!       GC_obj_kinds[GC_explicit_kind].ok_reclaim_list = 0;
!       GC_obj_kinds[GC_explicit_kind].ok_descriptor =
!     		(((word)WORDS_TO_BYTES(-1)) | GC_DS_PER_OBJECT);
!       GC_obj_kinds[GC_explicit_kind].ok_relocate_descr = TRUE;
!       GC_obj_kinds[GC_explicit_kind].ok_init = TRUE;
      		/* Descriptors are in the last word of the object. */
!       GC_typed_mark_proc_index = GC_n_mark_procs;
!       GC_mark_procs[GC_typed_mark_proc_index] = GC_typed_mark_proc;
!       GC_n_mark_procs++;
!         /* Moving this up breaks DEC AXP compiler.      */
      /* Set up object kind with array descriptor. */
!       GC_arobjfreelist = (ptr_t *)
!           GC_INTERNAL_MALLOC((MAXOBJSZ+1)*sizeof(ptr_t), PTRFREE);
!       if (GC_arobjfreelist == 0) ABORT("Couldn't allocate GC_arobjfreelist");
!       BZERO(GC_arobjfreelist, (MAXOBJSZ+1)*sizeof(ptr_t));
!       if (GC_n_mark_procs >= MAX_MARK_PROCS)
!       		ABORT("No slot for array mark proc");
!       GC_array_mark_proc_index = GC_n_mark_procs++;
!       if (GC_n_kinds >= MAXOBJKINDS)
!       		ABORT("No kind available for array objects");
!       GC_array_kind = GC_n_kinds++;
!       GC_obj_kinds[GC_array_kind].ok_freelist = GC_arobjfreelist;
!       GC_obj_kinds[GC_array_kind].ok_reclaim_list = 0;
!       GC_obj_kinds[GC_array_kind].ok_descriptor =
!     		GC_MAKE_PROC(GC_array_mark_proc_index, 0);;
!       GC_obj_kinds[GC_array_kind].ok_relocate_descr = FALSE;
!       GC_obj_kinds[GC_array_kind].ok_init = TRUE;
!     		/* Descriptors are in the last word of the object. */
!             GC_mark_procs[GC_array_mark_proc_index] = GC_array_mark_proc;
        for (i = 0; i < WORDSZ/2; i++) {
            GC_descr d = (((word)(-1)) >> (WORDSZ - i)) << (WORDSZ - i);
            d |= GC_DS_BITMAP;
            GC_bm_table[i] = d;
        }
-       GC_generic_array_descr = GC_MAKE_PROC(GC_array_mark_proc_index, 0); 
      UNLOCK();
      ENABLE_SIGNALS();
  }
--- 368,392 ----
      }
      GC_explicit_typing_initialized = TRUE;
      /* Set up object kind with simple indirect descriptor. */
!       GC_eobjfreelist = (ptr_t *)GC_new_free_list_inner();
!       GC_explicit_kind = GC_new_kind_inner(
! 		      	    (void **)GC_eobjfreelist,
! 		      	    (((word)WORDS_TO_BYTES(-1)) | GC_DS_PER_OBJECT),
! 			    TRUE, TRUE);
      		/* Descriptors are in the last word of the object. */
!       GC_typed_mark_proc_index = GC_new_proc_inner(GC_typed_mark_proc);
      /* Set up object kind with array descriptor. */
!       GC_arobjfreelist = (ptr_t *)GC_new_free_list_inner();
!       GC_array_mark_proc_index = GC_new_proc_inner(GC_array_mark_proc);
!       GC_array_kind = GC_new_kind_inner(
! 		      	    (void **)GC_arobjfreelist,
! 			    GC_MAKE_PROC(GC_array_mark_proc_index, 0),
! 			    FALSE, TRUE);
        for (i = 0; i < WORDSZ/2; i++) {
            GC_descr d = (((word)(-1)) >> (WORDSZ - i)) << (WORDSZ - i);
            d |= GC_DS_BITMAP;
            GC_bm_table[i] = d;
        }
      UNLOCK();
      ENABLE_SIGNALS();
  }
diff -Nrcpad gcc-3.4.3/boehm-gc/version.h gcc-4.0.0/boehm-gc/version.h
*** gcc-3.4.3/boehm-gc/version.h	Mon Jul 28 04:18:21 2003
--- gcc-4.0.0/boehm-gc/version.h	Fri Aug 13 23:05:30 2004
***************
*** 3,9 ****
  /* it to keep the old-style build process working.		*/
  #define GC_TMP_VERSION_MAJOR 6
  #define GC_TMP_VERSION_MINOR 3
! #define GC_TMP_ALPHA_VERSION 1
  
  #ifndef GC_NOT_ALPHA
  #   define GC_NOT_ALPHA 0xff
--- 3,9 ----
  /* it to keep the old-style build process working.		*/
  #define GC_TMP_VERSION_MAJOR 6
  #define GC_TMP_VERSION_MINOR 3
! #define GC_TMP_ALPHA_VERSION GC_NOT_ALPHA
  
  #ifndef GC_NOT_ALPHA
  #   define GC_NOT_ALPHA 0xff
***************
*** 14,20 ****
       GC_TMP_VERSION_MINOR != GC_VERSION_MINOR || \
       defined(GC_ALPHA_VERSION) != (GC_TMP_ALPHA_VERSION != GC_NOT_ALPHA) || \
       defined(GC_ALPHA_VERSION) && GC_TMP_ALPHA_VERSION != GC_ALPHA_VERSION
! #   error Inconsistent version info.  Check version.h and configure.in.
  # endif
  #else
  # define GC_VERSION_MAJOR GC_TMP_VERSION_MAJOR
--- 14,20 ----
       GC_TMP_VERSION_MINOR != GC_VERSION_MINOR || \
       defined(GC_ALPHA_VERSION) != (GC_TMP_ALPHA_VERSION != GC_NOT_ALPHA) || \
       defined(GC_ALPHA_VERSION) && GC_TMP_ALPHA_VERSION != GC_ALPHA_VERSION
! #   error Inconsistent version info.  Check README, version.h, and configure.in.
  # endif
  #else
  # define GC_VERSION_MAJOR GC_TMP_VERSION_MAJOR
diff -Nrcpad gcc-3.4.3/boehm-gc/win32_threads.c gcc-4.0.0/boehm-gc/win32_threads.c
*** gcc-3.4.3/boehm-gc/win32_threads.c	Fri Oct  3 18:43:06 2003
--- gcc-4.0.0/boehm-gc/win32_threads.c	Mon Aug 23 15:07:00 2004
***************
*** 1,6 ****
  #if defined(GC_WIN32_THREADS) 
  
- #include "private/gc_priv.h"
  #include <windows.h>
  
  #ifdef CYGWIN32
--- 1,7 ----
+ #include "private/gc_priv.h"
+ 
  #if defined(GC_WIN32_THREADS) 
  
  #include <windows.h>
  
  #ifdef CYGWIN32
*************** static GC_thread GC_new_thread(void) {
*** 130,136 ****
  	ABORT("DuplicateHandle failed");
    }
    thread_table[i].stack_base = GC_get_stack_base();
!   /* Up until this point, GC_psuh_all_stacks considers this thread	*/
    /* invalid.								*/
    if (thread_table[i].stack_base == NULL) 
      ABORT("Failed to find stack base in GC_new_thread");
--- 131,137 ----
  	ABORT("DuplicateHandle failed");
    }
    thread_table[i].stack_base = GC_get_stack_base();
!   /* Up until this point, GC_push_all_stacks considers this thread	*/
    /* invalid.								*/
    if (thread_table[i].stack_base == NULL) 
      ABORT("Failed to find stack base in GC_new_thread");
diff -Nrcpad gcc-3.4.3/fastjar/.cvsignore gcc-4.0.0/fastjar/.cvsignore
*** gcc-3.4.3/fastjar/.cvsignore	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fastjar/.cvsignore	Tue Jun 15 07:36:33 2004
***************
*** 0 ****
--- 1 ----
+ autom4te.cache
diff -Nrcpad gcc-3.4.3/fastjar/ChangeLog gcc-4.0.0/fastjar/ChangeLog
*** gcc-3.4.3/fastjar/ChangeLog	Fri Nov  5 03:33:27 2004
--- gcc-4.0.0/fastjar/ChangeLog	Thu Apr 21 05:17:29 2005
***************
*** 1,12 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-07  Kelley Cook  <kcook@gcc.gnu.org>
  
  	PR other/15194
  	* configure.ac: Add check for long long.
--- 1,113 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
  
! 	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.
! 	* configure, aclocal.m4, Makefile.in: Regenerate.
  
! 2004-11-15  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am: Remove -no-dependencies.
! 	* Makefile.in: Regenerate.
! 
! 2004-11-13  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am: Define ACLOCAL_AMFLAGS.
! 	* acinclude.m4: Remove unnecessary sinclude.
! 	* aclocal.m4, Makefile.in, configure: Regenerate (autoreconf 1.9.3).
! 
! 2004-09-23  Tom Tromey  <tromey@redhat.com>
! 
! 	* jartool.c (extract_jar): Unconditionally read extra data in the
! 	entry header; don't read it after the file contents.
! 
! 2004-08-11  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	PR bootstrap/16164
! 	* Makefile.am: Force fastjar.info to be built in build directory.
! 	* Makefile.in: Regenerate.
! 
! 2004-07-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	* Makefile.am: Rename jar binary to fastjar.
! 	* Makefile.in: Regenerate.
! 	* fastjar.texi: Rename references to jar binary with fastjar.
! 
! 2004-07-19  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* jartool.c (main): Ensure that only one of ftruncate and _chsize
! 	is used.
! 
! 2004-07-11  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	PR 16472
! 	* configure.ac: Check for ftruncate() and _chsize().
! 	* jartool.c (main): Use _chsize if ftruncate not available.
! 	* configure, config.h.in: Rebuilt.
! 
! 2004-07-09  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* jartool.c (find_entry, looks_like_dir): Remove inline spec.
! 
! 2004-07-07  Matthias Klose  <doko@debian.org>
! 
! 	* Makefile.am (jar_CPPFLAGS): Add AM_CPPFLAGS.
! 	* Makefile.in: Regenerate.
! 
! 2004-07-06  Matthias Klose  <doko@debian.org>
! 
! 	* 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>
! 
! 	* Makefile.am: Silence two automake warnings.
! 	* Makefile.in: Regenerate.
! 
! 2004-06-25  Kelley Cook  <kcook@gcc.gnu.org>
  
  	PR other/15194
  	* configure.ac: Add check for long long.
***************
*** 14,26 ****
  	* configure: Regenerate
  	* config.h.in: Regenerate.
  
! 2004-07-01  Release Manager
! 
! 	* GCC 3.4.1 released.
! 
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
  2004-04-12  Kelley Cook  <kcook@gcc.gnu.org>
  
--- 115,127 ----
  	* configure: Regenerate
  	* config.h.in: Regenerate.
  
! 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* acinclude.m4: Quote first argument of AC_DEFUNs.
! 	* aclocal.m4: Regenerate with automake 1.8.
! 	* Makefile.in: Likewise.
! 	* configure: Regenerate.
! 	* .cvsignore: New file.
  
  2004-04-12  Kelley Cook  <kcook@gcc.gnu.org>
  
***************
*** 30,35 ****
--- 131,145 ----
  	* configure: Regenerate.
  	* Makefile.in Regenerate.
  
+ 2004-03-10  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.ac: Bump AC_PREREQ to 2.59.
+ 	* configure: Regenerate.
+ 
+ 2004-03-09  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* configure: Regenerate for config/accross.m4 correction.
+ 
  2004-01-09  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* configure.in: Rename file to ...
diff -Nrcpad gcc-3.4.3/fastjar/Makefile.am gcc-4.0.0/fastjar/Makefile.am
*** gcc-3.4.3/fastjar/Makefile.am	Wed Apr 14 23:49:37 2004
--- gcc-4.0.0/fastjar/Makefile.am	Mon Nov 15 23:50:05 2004
***************
*** 1,7 ****
  # Process this with automake to create Makefile.in
  
! ## We definitely don't want dependency tracking when using automake 1.4.
! AUTOMAKE_OPTIONS = no-dependencies
  
  # 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
--- 1,6 ----
  # 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
*************** AM_MAKEFLAGS = \
*** 41,55 ****
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! INCLUDES = -I. -I$(top_srcdir) $(ZINCS) -I$(top_srcdir)/../include
  
  LIBIBERTY = ../libiberty/libiberty.a
  
! bin_PROGRAMS = jar grepjar
! jar_SOURCES = jartool.c dostime.c compress.c pushback.c jartool.h \
! zipfile.h dostime.h compress.h pushback.h
! jar_LDADD = $(ZLIBS) $(LIBIBERTY)
! jar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
  
  grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \
  zipfile.h dostime.h compress.h pushback.h
--- 40,55 ----
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! AM_CPPFLAGS = -I. -I$(top_srcdir) $(ZINCS) -I$(top_srcdir)/../include
  
  LIBIBERTY = ../libiberty/libiberty.a
  
! bin_PROGRAMS = fastjar grepjar
! fastjar_SOURCES = jartool.c dostime.c compress.c pushback.c shift.c jartool.h \
! zipfile.h dostime.h compress.h pushback.h shift.h
! fastjar_LDADD = $(ZLIBS) $(LIBIBERTY)
! fastjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
! fastjar_CPPFLAGS = $(AM_CPPFLAGS) -DWITH_SHIFT_DOWN
  
  grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \
  zipfile.h dostime.h compress.h pushback.h
*************** info_TEXINFOS = fastjar.texi
*** 64,84 ****
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
  	../gcc/doc/include/gpl.texi
! man_MANS = jar.1 grepjar.1
  EXTRA_DIST = $(man_MANS)
  
  TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
  POD2MAN = pod2man --center="GNU" --release="gcc-@gcc_version@"
  
! %.1: %.pod
  	-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
  		mv -f $(@).T$$$$ $@) || \
  		(rm -f $(@).T$$$$ && exit 1)
  
! .INTERMEDIATE: jar.pod grepjar.pod
  
! jar.pod: $(srcdir)/fastjar.texi
! 	-$(TEXI2POD) -D jar $< > $@
  
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
--- 64,84 ----
  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$$$$ && \
  		mv -f $(@).T$$$$ $@) || \
  		(rm -f $(@).T$$$$ && exit 1)
  
! .INTERMEDIATE: fastjar.pod grepjar.pod
  
! fastjar.pod: $(srcdir)/fastjar.texi
! 	-$(TEXI2POD) -D fastjar $< > $@
  
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
*************** endif
*** 96,108 ****
  
  all-local: $(STAMP_GENINSRC) 
  
! stamp-geninsrc: jar.1 grepjar.1 fastjar.info
! 	-cp -p $(top_builddir)/jar.1 $(srcdir)/jar.1
  	-cp -p $(top_builddir)/grepjar.1 $(srcdir)/grepjar.1
  	-cp -p $(top_builddir)/fastjar.info $(srcdir)/fastjar.info
  	touch $@
  
! CLEANFILES = stamp-geninsrc
! MAINTAINERCLEANFILES = $(srcdir)/jar.1 \
                         $(srcdir)/grepjar.1 \
                         $(srcdir)/fastjar.info
--- 96,108 ----
  
  all-local: $(STAMP_GENINSRC) 
  
! stamp-geninsrc: fastjar.1 grepjar.1 fastjar.info
! 	-cp -p $(top_builddir)/fastjar.1 $(srcdir)/fastjar.1
  	-cp -p $(top_builddir)/grepjar.1 $(srcdir)/grepjar.1
  	-cp -p $(top_builddir)/fastjar.info $(srcdir)/fastjar.info
  	touch $@
  
! CLEANFILES = stamp-geninsrc fastjar.info
! MAINTAINERCLEANFILES = $(srcdir)/fastjar.1 \
                         $(srcdir)/grepjar.1 \
                         $(srcdir)/fastjar.info
diff -Nrcpad gcc-3.4.3/fastjar/Makefile.in gcc-4.0.0/fastjar/Makefile.in
*** gcc-3.4.3/fastjar/Makefile.in	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/fastjar/Makefile.in	Thu Apr 21 07:04:10 2005
***************
*** 1,8 ****
! # Makefile.in generated by automake 1.7.9 from Makefile.am.
  # @configure_input@
  
! # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
! # 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.
--- 1,8 ----
! # 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.
***************
*** 16,21 ****
--- 16,23 ----
  
  # Process this with automake to create Makefile.in
  
+ SOURCES = $(fastjar_SOURCES) $(grepjar_SOURCES)
+ 
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
*************** pkgdatadir = $(datadir)/@PACKAGE@
*** 23,29 ****
  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
--- 25,30 ----
*************** POST_INSTALL = :
*** 37,42 ****
--- 38,113 ----
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
+ bin_PROGRAMS = fastjar$(EXEEXT) grepjar$(EXEEXT)
+ subdir = .
+ DIST_COMMON = README $(am__configure_deps) $(fastjar_TEXINFOS) \
+ 	$(srcdir)/../compile $(srcdir)/../depcomp \
+ 	$(srcdir)/../install-sh $(srcdir)/../missing \
+ 	$(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
+ 	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ 	$(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 \
+  configure.lineno configure.status.lineno
+ mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+ CONFIG_HEADER = config.h
+ CONFIG_CLEAN_FILES = install-defs.sh
+ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \
+ 	"$(DESTDIR)$(man1dir)"
+ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ PROGRAMS = $(bin_PROGRAMS)
+ am_fastjar_OBJECTS = fastjar-jartool.$(OBJEXT) \
+ 	fastjar-dostime.$(OBJEXT) fastjar-compress.$(OBJEXT) \
+ 	fastjar-pushback.$(OBJEXT) fastjar-shift.$(OBJEXT)
+ fastjar_OBJECTS = $(am_fastjar_OBJECTS)
+ am__DEPENDENCIES_1 =
+ am__DEPENDENCIES_2 = ../libiberty/libiberty.a
+ am_grepjar_OBJECTS = jargrep.$(OBJEXT) dostime.$(OBJEXT) \
+ 	compress.$(OBJEXT) pushback.$(OBJEXT)
+ grepjar_OBJECTS = $(am_grepjar_OBJECTS)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
+ depcomp = $(SHELL) $(top_srcdir)/../depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+ LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+ SOURCES = $(fastjar_SOURCES) $(grepjar_SOURCES)
+ DIST_SOURCES = $(fastjar_SOURCES) $(grepjar_SOURCES)
+ INFO_DEPS = fastjar.info
+ am__TEXINFO_TEX_DIR = $(srcdir)/../gcc/doc/include
+ DVIS = fastjar.dvi
+ PDFS = fastjar.pdf
+ PSS = fastjar.ps
+ HTMLS = fastjar.html
+ TEXINFOS = fastjar.texi
+ TEXI2DVI = texi2dvi
+ TEXI2PDF = $(TEXI2DVI) --pdf --batch
+ MAKEINFOHTML = $(MAKEINFO) --html
+ AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+ DVIPS = dvips
+ man1dir = $(mandir)/man1
+ NROFF = nroff
+ MANS = $(man_MANS)
+ 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@
*************** am__fastdepCC_TRUE = @am__fastdepCC_TRUE
*** 97,108 ****
--- 168,183 ----
  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_alias = @build_alias@
  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@
*************** libdir = @libdir@
*** 111,116 ****
--- 186,192 ----
  libexecdir = @libexecdir@
  localstatedir = @localstatedir@
  mandir = @mandir@
+ mkdir_p = @mkdir_p@
  oldincludedir = @oldincludedir@
  prefix = @prefix@
  program_transform_name = @program_transform_name@
*************** sbindir = @sbindir@
*** 118,125 ****
  sharedstatedir = @sharedstatedir@
  sysconfdir = @sysconfdir@
  target_alias = @target_alias@
! 
! AUTOMAKE_OPTIONS = no-dependencies
  
  # 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
--- 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
*************** AM_MAKEFLAGS = \
*** 159,271 ****
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! 
! INCLUDES = -I. -I$(top_srcdir) $(ZINCS) -I$(top_srcdir)/../include
! 
  LIBIBERTY = ../libiberty/libiberty.a
  
! bin_PROGRAMS = jar grepjar
! jar_SOURCES = jartool.c dostime.c compress.c pushback.c jartool.h \
! zipfile.h dostime.h compress.h pushback.h
! 
! jar_LDADD = $(ZLIBS) $(LIBIBERTY)
! jar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
! 
  grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \
  zipfile.h dostime.h compress.h pushback.h
  
  grepjar_LDADD = $(ZLIBS) $(LIBIBERTY)
  grepjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
- 
  AM_CFLAGS = @fastjar_warn_cflags@
  AM_MAKEINFOFLAGS = -I $(srcdir)/../gcc/doc/include
- 
  TEXINFO_TEX = ../gcc/doc/include/texinfo.tex
  info_TEXINFOS = fastjar.texi
  fastjar_TEXINFOS = \
  	../gcc/doc/include/gcc-common.texi \
  	../gcc/doc/include/gpl.texi
  
! man_MANS = jar.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
  # The following commands allow us to release tarballs with the man pages
  # and info documentation prebuilt.  This feature is enabled via 
  # --enable-generated-files-in-srcdir in the configure script.
  @GENINSRC_TRUE@STAMP_GENINSRC = stamp-geninsrc
! 
! CLEANFILES = stamp-geninsrc
! MAINTAINERCLEANFILES = $(srcdir)/jar.1 \
                         $(srcdir)/grepjar.1 \
                         $(srcdir)/fastjar.info
  
- subdir = .
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
- mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
- CONFIG_HEADER = config.h
- CONFIG_CLEAN_FILES = install-defs.sh
- bin_PROGRAMS = jar$(EXEEXT) grepjar$(EXEEXT)
- PROGRAMS = $(bin_PROGRAMS)
- 
- am_grepjar_OBJECTS = jargrep.$(OBJEXT) dostime.$(OBJEXT) \
- 	compress.$(OBJEXT) pushback.$(OBJEXT)
- grepjar_OBJECTS = $(am_grepjar_OBJECTS)
- grepjar_LDFLAGS =
- am_jar_OBJECTS = jartool.$(OBJEXT) dostime.$(OBJEXT) compress.$(OBJEXT) \
- 	pushback.$(OBJEXT)
- jar_OBJECTS = $(am_jar_OBJECTS)
- jar_LDFLAGS =
- 
- DEFAULT_INCLUDES =  -I. -I$(srcdir) -I.
- depcomp =
- am__depfiles_maybe =
- COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
- CCLD = $(CC)
- LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
- DIST_SOURCES = $(grepjar_SOURCES) $(jar_SOURCES)
- am__TEXINFO_TEX_DIR = $(srcdir)/../gcc/doc/include
- INFO_DEPS = fastjar.info
- DVIS = fastjar.dvi
- PDFS = fastjar.pdf
- PSS = fastjar.ps
- TEXINFOS = fastjar.texi
- 
- NROFF = nroff
- MANS = $(man_MANS)
- DIST_COMMON = README $(fastjar_TEXINFOS) $(srcdir)/Makefile.in \
- 	$(srcdir)/configure ../install-sh ../missing ../mkinstalldirs \
- 	AUTHORS COPYING ChangeLog INSTALL Makefile.am NEWS acinclude.m4 \
- 	aclocal.m4 config.h.in configure configure.ac \
- 	install-defs.sh.in
- SOURCES = $(grepjar_SOURCES) $(jar_SOURCES)
- 
  all: config.h
  	$(MAKE) $(AM_MAKEFLAGS) all-am
  
  .SUFFIXES:
! .SUFFIXES: .c .dvi .info .o .obj .pdf .ps .texi
! 
! am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
!  configure.lineno
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
  	cd $(top_srcdir) && \
  	  $(AUTOMAKE) --gnu  Makefile
! Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
! 	cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
  
! $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
  	$(SHELL) ./config.status --recheck
- $(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
- 	cd $(srcdir) && $(AUTOCONF)
  
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.ac acinclude.m4
  	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
  
  config.h: stamp-h1
--- 234,313 ----
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! AM_CPPFLAGS = -I. -I$(top_srcdir) $(ZINCS) -I$(top_srcdir)/../include
  LIBIBERTY = ../libiberty/libiberty.a
+ fastjar_SOURCES = jartool.c dostime.c compress.c pushback.c shift.c jartool.h \
+ zipfile.h dostime.h compress.h pushback.h shift.h
  
! fastjar_LDADD = $(ZLIBS) $(LIBIBERTY)
! fastjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
! fastjar_CPPFLAGS = $(AM_CPPFLAGS) -DWITH_SHIFT_DOWN
  grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \
  zipfile.h dostime.h compress.h pushback.h
  
  grepjar_LDADD = $(ZLIBS) $(LIBIBERTY)
  grepjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY)
  AM_CFLAGS = @fastjar_warn_cflags@
  AM_MAKEINFOFLAGS = -I $(srcdir)/../gcc/doc/include
  TEXINFO_TEX = ../gcc/doc/include/texinfo.tex
  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
  # The following commands allow us to release tarballs with the man pages
  # and info documentation prebuilt.  This feature is enabled via 
  # --enable-generated-files-in-srcdir in the configure script.
  @GENINSRC_TRUE@STAMP_GENINSRC = stamp-geninsrc
! CLEANFILES = stamp-geninsrc fastjar.info
! MAINTAINERCLEANFILES = $(srcdir)/fastjar.1 \
                         $(srcdir)/grepjar.1 \
                         $(srcdir)/fastjar.info
  
  all: config.h
  	$(MAKE) $(AM_MAKEFLAGS) all-am
  
  .SUFFIXES:
! .SUFFIXES: .1 .c .dvi .o .obj .pod .ps
! 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)
  
  config.h: stamp-h1
*************** config.h: stamp-h1
*** 277,302 ****
  stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
  	@rm -f stamp-h1
  	cd $(top_builddir) && $(SHELL) ./config.status config.h
! 
! $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
  	cd $(top_srcdir) && $(AUTOHEADER)
! 	touch $(srcdir)/config.h.in
  
  distclean-hdr:
  	-rm -f config.h stamp-h1
! install-defs.sh: $(top_builddir)/config.status install-defs.sh.in
  	cd $(top_builddir) && $(SHELL) ./config.status $@
- binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
  install-binPROGRAMS: $(bin_PROGRAMS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(bindir)
  	@list='$(bin_PROGRAMS)'; for p in $$list; do \
  	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
  	  if test -f $$p \
  	  ; then \
  	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
! 	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
! 	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
  	  else :; fi; \
  	done
  
--- 319,343 ----
  stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
  	@rm -f stamp-h1
  	cd $(top_builddir) && $(SHELL) ./config.status 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
! install-defs.sh: $(top_builddir)/config.status $(srcdir)/install-defs.sh.in
  	cd $(top_builddir) && $(SHELL) ./config.status $@
  install-binPROGRAMS: $(bin_PROGRAMS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
  	@list='$(bin_PROGRAMS)'; for p in $$list; do \
  	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
  	  if test -f $$p \
  	  ; then \
  	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
! 	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
! 	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
  	  else :; fi; \
  	done
  
*************** uninstall-binPROGRAMS:
*** 304,355 ****
  	@$(NORMAL_UNINSTALL)
  	@list='$(bin_PROGRAMS)'; for p in $$list; do \
  	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
! 	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
! 	  rm -f $(DESTDIR)$(bindir)/$$f; \
  	done
  
  clean-binPROGRAMS:
  	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
  grepjar$(EXEEXT): $(grepjar_OBJECTS) $(grepjar_DEPENDENCIES) 
  	@rm -f grepjar$(EXEEXT)
  	$(LINK) $(grepjar_LDFLAGS) $(grepjar_OBJECTS) $(grepjar_LDADD) $(LIBS)
- jar$(EXEEXT): $(jar_OBJECTS) $(jar_DEPENDENCIES) 
- 	@rm -f jar$(EXEEXT)
- 	$(LINK) $(jar_LDFLAGS) $(jar_OBJECTS) $(jar_LDADD) $(LIBS)
  
  mostlyclean-compile:
! 	-rm -f *.$(OBJEXT) core *.core
  
  distclean-compile:
  	-rm -f *.tab.c
  
  .c.o:
! 	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
  
  .c.obj:
! 	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
  
! .texi.info:
! 	@rm -f $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]
! 	$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
! 	 -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
  
! .texi.dvi:
  	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
  	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
! 	$(TEXI2DVI) `test -f '$<' || echo '$(srcdir)/'`$<
  
! .texi.pdf:
  	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
  	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
! 	$(TEXI2PDF) `test -f '$<' || echo '$(srcdir)/'`$<
! fastjar.info: fastjar.texi $(fastjar_TEXINFOS)
! fastjar.dvi: fastjar.texi $(fastjar_TEXINFOS)
! fastjar.pdf: fastjar.texi $(fastjar_TEXINFOS)
! TEXI2DVI = texi2dvi
  
! TEXI2PDF = $(TEXI2DVI) --pdf --batch
! DVIPS = dvips
  .dvi.ps:
  	$(DVIPS) -o $@ $<
  
--- 345,502 ----
  	@$(NORMAL_UNINSTALL)
  	@list='$(bin_PROGRAMS)'; for p in $$list; do \
  	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
! 	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
  	done
  
  clean-binPROGRAMS:
  	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+ fastjar$(EXEEXT): $(fastjar_OBJECTS) $(fastjar_DEPENDENCIES) 
+ 	@rm -f fastjar$(EXEEXT)
+ 	$(LINK) $(fastjar_LDFLAGS) $(fastjar_OBJECTS) $(fastjar_LDADD) $(LIBS)
  grepjar$(EXEEXT): $(grepjar_OBJECTS) $(grepjar_DEPENDENCIES) 
  	@rm -f grepjar$(EXEEXT)
  	$(LINK) $(grepjar_LDFLAGS) $(grepjar_OBJECTS) $(grepjar_LDADD) $(LIBS)
  
  mostlyclean-compile:
! 	-rm -f *.$(OBJEXT)
  
  distclean-compile:
  	-rm -f *.tab.c
  
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dostime.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-compress.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-dostime.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-jartool.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-pushback.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastjar-shift.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jargrep.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pushback.Po@am__quote@
+ 
  .c.o:
! @am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(COMPILE) -c $<
  
  .c.obj:
! @am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
  
! fastjar-jartool.o: jartool.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-jartool.o -MD -MP -MF "$(DEPDIR)/fastjar-jartool.Tpo" -c -o fastjar-jartool.o `test -f 'jartool.c' || echo '$(srcdir)/'`jartool.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-jartool.Tpo" "$(DEPDIR)/fastjar-jartool.Po"; else rm -f "$(DEPDIR)/fastjar-jartool.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jartool.c' object='fastjar-jartool.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-jartool.o `test -f 'jartool.c' || echo '$(srcdir)/'`jartool.c
  
! fastjar-jartool.obj: jartool.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-jartool.obj -MD -MP -MF "$(DEPDIR)/fastjar-jartool.Tpo" -c -o fastjar-jartool.obj `if test -f 'jartool.c'; then $(CYGPATH_W) 'jartool.c'; else $(CYGPATH_W) '$(srcdir)/jartool.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-jartool.Tpo" "$(DEPDIR)/fastjar-jartool.Po"; else rm -f "$(DEPDIR)/fastjar-jartool.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jartool.c' object='fastjar-jartool.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-jartool.obj `if test -f 'jartool.c'; then $(CYGPATH_W) 'jartool.c'; else $(CYGPATH_W) '$(srcdir)/jartool.c'; fi`
! 
! fastjar-dostime.o: dostime.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-dostime.o -MD -MP -MF "$(DEPDIR)/fastjar-dostime.Tpo" -c -o fastjar-dostime.o `test -f 'dostime.c' || echo '$(srcdir)/'`dostime.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-dostime.Tpo" "$(DEPDIR)/fastjar-dostime.Po"; else rm -f "$(DEPDIR)/fastjar-dostime.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dostime.c' object='fastjar-dostime.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-dostime.o `test -f 'dostime.c' || echo '$(srcdir)/'`dostime.c
! 
! fastjar-dostime.obj: dostime.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-dostime.obj -MD -MP -MF "$(DEPDIR)/fastjar-dostime.Tpo" -c -o fastjar-dostime.obj `if test -f 'dostime.c'; then $(CYGPATH_W) 'dostime.c'; else $(CYGPATH_W) '$(srcdir)/dostime.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-dostime.Tpo" "$(DEPDIR)/fastjar-dostime.Po"; else rm -f "$(DEPDIR)/fastjar-dostime.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dostime.c' object='fastjar-dostime.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-dostime.obj `if test -f 'dostime.c'; then $(CYGPATH_W) 'dostime.c'; else $(CYGPATH_W) '$(srcdir)/dostime.c'; fi`
! 
! fastjar-compress.o: compress.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-compress.o -MD -MP -MF "$(DEPDIR)/fastjar-compress.Tpo" -c -o fastjar-compress.o `test -f 'compress.c' || echo '$(srcdir)/'`compress.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-compress.Tpo" "$(DEPDIR)/fastjar-compress.Po"; else rm -f "$(DEPDIR)/fastjar-compress.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='compress.c' object='fastjar-compress.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-compress.o `test -f 'compress.c' || echo '$(srcdir)/'`compress.c
! 
! fastjar-compress.obj: compress.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-compress.obj -MD -MP -MF "$(DEPDIR)/fastjar-compress.Tpo" -c -o fastjar-compress.obj `if test -f 'compress.c'; then $(CYGPATH_W) 'compress.c'; else $(CYGPATH_W) '$(srcdir)/compress.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-compress.Tpo" "$(DEPDIR)/fastjar-compress.Po"; else rm -f "$(DEPDIR)/fastjar-compress.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='compress.c' object='fastjar-compress.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-compress.obj `if test -f 'compress.c'; then $(CYGPATH_W) 'compress.c'; else $(CYGPATH_W) '$(srcdir)/compress.c'; fi`
! 
! fastjar-pushback.o: pushback.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-pushback.o -MD -MP -MF "$(DEPDIR)/fastjar-pushback.Tpo" -c -o fastjar-pushback.o `test -f 'pushback.c' || echo '$(srcdir)/'`pushback.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-pushback.Tpo" "$(DEPDIR)/fastjar-pushback.Po"; else rm -f "$(DEPDIR)/fastjar-pushback.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pushback.c' object='fastjar-pushback.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-pushback.o `test -f 'pushback.c' || echo '$(srcdir)/'`pushback.c
! 
! fastjar-pushback.obj: pushback.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-pushback.obj -MD -MP -MF "$(DEPDIR)/fastjar-pushback.Tpo" -c -o fastjar-pushback.obj `if test -f 'pushback.c'; then $(CYGPATH_W) 'pushback.c'; else $(CYGPATH_W) '$(srcdir)/pushback.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-pushback.Tpo" "$(DEPDIR)/fastjar-pushback.Po"; else rm -f "$(DEPDIR)/fastjar-pushback.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pushback.c' object='fastjar-pushback.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-pushback.obj `if test -f 'pushback.c'; then $(CYGPATH_W) 'pushback.c'; else $(CYGPATH_W) '$(srcdir)/pushback.c'; fi`
! 
! fastjar-shift.o: shift.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-shift.o -MD -MP -MF "$(DEPDIR)/fastjar-shift.Tpo" -c -o fastjar-shift.o `test -f 'shift.c' || echo '$(srcdir)/'`shift.c; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-shift.Tpo" "$(DEPDIR)/fastjar-shift.Po"; else rm -f "$(DEPDIR)/fastjar-shift.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='shift.c' object='fastjar-shift.o' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-shift.o `test -f 'shift.c' || echo '$(srcdir)/'`shift.c
! 
! fastjar-shift.obj: shift.c
! @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fastjar-shift.obj -MD -MP -MF "$(DEPDIR)/fastjar-shift.Tpo" -c -o fastjar-shift.obj `if test -f 'shift.c'; then $(CYGPATH_W) 'shift.c'; else $(CYGPATH_W) '$(srcdir)/shift.c'; fi`; \
! @am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fastjar-shift.Tpo" "$(DEPDIR)/fastjar-shift.Po"; else rm -f "$(DEPDIR)/fastjar-shift.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='shift.c' object='fastjar-shift.obj' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastjar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastjar-shift.obj `if test -f 'shift.c'; then $(CYGPATH_W) 'shift.c'; else $(CYGPATH_W) '$(srcdir)/shift.c'; fi`
! 
! fastjar.info: fastjar.texi $(fastjar_TEXINFOS)
! 	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
! 	rm -rf $$backupdir && mkdir $$backupdir && \
! 	for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
! 	  if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
! 	done; \
! 	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
! 	 -o $@ `test -f 'fastjar.texi' || echo '$(srcdir)/'`fastjar.texi; \
! 	then \
! 	  rc=0; \
! 	else \
! 	  rc=$$?; \
! 	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
! 	fi; \
! 	rm -rf $$backupdir; exit $$rc
! 
! fastjar.dvi: fastjar.texi $(fastjar_TEXINFOS) 
  	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
  	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
! 	$(TEXI2DVI) -o $@ `test -f 'fastjar.texi' || echo '$(srcdir)/'`fastjar.texi
  
! fastjar.pdf: fastjar.texi $(fastjar_TEXINFOS) 
  	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
  	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
! 	$(TEXI2PDF) -o $@ `test -f 'fastjar.texi' || echo '$(srcdir)/'`fastjar.texi
  
! fastjar.html: fastjar.texi $(fastjar_TEXINFOS) 
! 	rm -rf $(@:.html=.htp)
! 	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
! 	 -o $(@:.html=.htp) `test -f 'fastjar.texi' || echo '$(srcdir)/'`fastjar.texi; \
! 	then \
! 	  rm -rf $@; \
! 	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
! 	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
! 	else \
! 	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
! 	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
! 	  exit 1; \
! 	fi
  .dvi.ps:
  	$(DVIPS) -o $@ $<
  
*************** uninstall-info-am:
*** 360,367 ****
  	  list='$(INFO_DEPS)'; \
  	  for file in $$list; do \
  	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
! 	    echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile"; \
! 	    install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile; \
  	  done; \
  	else :; fi
  	@$(NORMAL_UNINSTALL)
--- 507,514 ----
  	  list='$(INFO_DEPS)'; \
  	  for file in $$list; do \
  	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
! 	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
! 	    install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
  	  done; \
  	else :; fi
  	@$(NORMAL_UNINSTALL)
*************** uninstall-info-am:
*** 369,383 ****
  	for file in $$list; do \
  	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
  	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
! 	  (if cd $(DESTDIR)$(infodir); then \
  	     echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \
  	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
  	   else :; fi); \
  	done
  
  dist-info: $(INFO_DEPS)
  	list='$(INFO_DEPS)'; \
  	for base in $$list; do \
  	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
  	  for file in $$d/$$base*; do \
  	    relfile=`expr "$$file" : "$$d/\(.*\)"`; \
--- 516,534 ----
  	for file in $$list; do \
  	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
  	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
! 	  (if cd "$(DESTDIR)$(infodir)"; then \
  	     echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \
  	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
  	   else :; fi); \
  	done
  
  dist-info: $(INFO_DEPS)
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	list='$(INFO_DEPS)'; \
  	for base in $$list; do \
+ 	  case $$base in \
+ 	    $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ 	  esac; \
  	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
  	  for file in $$d/$$base*; do \
  	    relfile=`expr "$$file" : "$$d/\(.*\)"`; \
*************** dist-info: $(INFO_DEPS)
*** 387,396 ****
  	done
  
  mostlyclean-aminfo:
! 	-rm -f fastjar.aux fastjar.cp fastjar.cps fastjar.fn fastjar.fns fastjar.ky \
  	  fastjar.kys fastjar.log fastjar.pg fastjar.pgs fastjar.tmp \
  	  fastjar.toc fastjar.tp fastjar.tps fastjar.vr fastjar.vrs \
! 	  fastjar.dvi fastjar.pdf fastjar.ps
  
  maintainer-clean-aminfo:
  	@list='$(INFO_DEPS)'; for i in $$list; do \
--- 538,547 ----
  	done
  
  mostlyclean-aminfo:
! 	-rm -rf fastjar.aux fastjar.cp fastjar.cps fastjar.fn fastjar.fns fastjar.ky \
  	  fastjar.kys fastjar.log fastjar.pg fastjar.pgs fastjar.tmp \
  	  fastjar.toc fastjar.tp fastjar.tps fastjar.vr fastjar.vrs \
! 	  fastjar.dvi fastjar.pdf fastjar.ps fastjar.html
  
  maintainer-clean-aminfo:
  	@list='$(INFO_DEPS)'; for i in $$list; do \
*************** maintainer-clean-aminfo:
*** 398,408 ****
  	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
  	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
  	done
- 
- man1dir = $(mandir)/man1
  install-man1: $(man1_MANS) $(man_MANS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(man1dir)
  	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
  	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
  	for i in $$l2; do \
--- 549,557 ----
  	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
  	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
  	done
  install-man1: $(man1_MANS) $(man_MANS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
  	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
  	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
  	for i in $$l2; do \
*************** install-man1: $(man1_MANS) $(man_MANS)
*** 421,428 ****
  	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
  	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
  	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
! 	  echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
! 	  $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
  	done
  uninstall-man1:
  	@$(NORMAL_UNINSTALL)
--- 570,577 ----
  	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
  	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
  	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
! 	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
! 	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
  	done
  uninstall-man1:
  	@$(NORMAL_UNINSTALL)
*************** uninstall-man1:
*** 442,459 ****
  	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
  	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
  	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
! 	  echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
! 	  rm -f $(DESTDIR)$(man1dir)/$$inst; \
  	done
  
- ETAGS = etags
- ETAGSFLAGS =
- 
- CTAGS = ctags
- CTAGSFLAGS =
- 
- tags: TAGS
- 
  ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
  	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
  	unique=`for i in $$list; do \
--- 591,600 ----
  	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
  	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
  	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
! 	  echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
! 	  rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
  	done
  
  ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
  	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
  	unique=`for i in $$list; do \
*************** ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS
*** 462,467 ****
--- 603,609 ----
  	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
  	mkid -fID $$unique
+ tags: TAGS
  
  TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
  		$(TAGS_FILES) $(LISP)
*************** TAGS:  $(HEADERS) $(SOURCES) config.h.in
*** 473,482 ****
  	  done | \
  	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)$$tags$$unique" \
! 	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
! 	     $$tags $$unique
! 
  ctags: CTAGS
  CTAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
  		$(TAGS_FILES) $(LISP)
--- 615,625 ----
  	  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:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
  		$(TAGS_FILES) $(LISP)
*************** GTAGS:
*** 499,522 ****
  
  distclean-tags:
  	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
- 
- top_distdir = .
- distdir = $(PACKAGE)-$(VERSION)
- 
- am__remove_distdir = \
-   { test ! -d $(distdir) \
-     || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-          && rm -fr $(distdir); }; }
- 
- GZIP_ENV = --best
- distuninstallcheck_listfiles = find . -type f -print
- distcleancheck_listfiles = find . -type f -print
  
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
! 	$(mkinstalldirs) $(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 \
--- 642,652 ----
  
  distclean-tags:
  	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
  
  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 \
*************** distdir: $(DISTFILES)
*** 528,534 ****
  	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  	    dir="/$$dir"; \
! 	    $(mkinstalldirs) "$(distdir)$$dir"; \
  	  else \
  	    dir=''; \
  	  fi; \
--- 658,664 ----
  	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  	    dir="/$$dir"; \
! 	    $(mkdir_p) "$(distdir)$$dir"; \
  	  else \
  	    dir=''; \
  	  fi; \
*************** distdir: $(DISTFILES)
*** 552,570 ****
  	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
  	|| chmod -R a+r $(distdir)
  dist-gzip: distdir
! 	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
  	$(am__remove_distdir)
  
  dist dist-all: distdir
! 	$(AMTAR) chof - $(distdir) | 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
! 	$(am__remove_distdir)
! 	GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
  	chmod -R a-w $(distdir); chmod a+w $(distdir)
  	mkdir $(distdir)/_build
  	mkdir $(distdir)/_inst
--- 682,727 ----
  	  ! -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
*************** distcheck: dist
*** 584,602 ****
  	        distuninstallcheck \
  	  && chmod -R a-w "$$dc_install_base" \
  	  && ({ \
! 	       (cd ../.. && $(mkinstalldirs) "$$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-gzip \
! 	  && rm -f $(distdir).tar.gz \
  	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
  	$(am__remove_distdir)
! 	@echo "$(distdir).tar.gz is ready for distribution" | \
! 	  sed 'h;s/./=/g;p;x;p;x'
  distuninstallcheck:
  	@cd $(distuninstallcheck_dir) \
  	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
--- 741,760 ----
  	        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 \
*************** distcleancheck: distclean
*** 618,626 ****
  check-am: all-am
  check: check-am
  all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(MANS) config.h all-local
- 
  installdirs:
! 	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(infodir) $(DESTDIR)$(man1dir)
  install: install-am
  install-exec: install-exec-am
  install-data: install-data-am
--- 776,785 ----
  check-am: all-am
  check: check-am
  all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(MANS) config.h all-local
  installdirs:
! 	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \
! 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
! 	done
  install: install-am
  install-exec: install-exec-am
  install-data: install-data-am
*************** clean-generic:
*** 641,647 ****
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  distclean-generic:
! 	-rm -f $(CONFIG_CLEAN_FILES)
  
  maintainer-clean-generic:
  	@echo "This command is intended for maintainers to use"
--- 800,806 ----
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  distclean-generic:
! 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
  
  maintainer-clean-generic:
  	@echo "This command is intended for maintainers to use"
*************** clean-am: clean-binPROGRAMS clean-generi
*** 653,666 ****
  
  distclean: distclean-am
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -f Makefile
! distclean-am: clean-am distclean-compile distclean-generic distclean-hdr \
! 	distclean-tags
  
  dvi: dvi-am
  
  dvi-am: $(DVIS)
  
  info: info-am
  
  info-am: $(INFO_DEPS)
--- 812,830 ----
  
  distclean: distclean-am
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ 	-rm -rf ./$(DEPDIR)
  	-rm -f Makefile
! distclean-am: clean-am distclean-compile distclean-generic \
! 	distclean-hdr distclean-tags
  
  dvi: dvi-am
  
  dvi-am: $(DVIS)
  
+ html: html-am
+ 
+ html-am: $(HTMLS)
+ 
  info: info-am
  
  info-am: $(INFO_DEPS)
*************** install-info: install-info-am
*** 673,689 ****
  
  install-info-am: $(INFO_DEPS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(infodir)
! 	@list='$(INFO_DEPS)'; \
  	for file in $$list; do \
  	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
  	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
  	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
                         $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
  	    if test -f $$ifile; then \
  	      relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
! 	      echo " $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile"; \
! 	      $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile; \
  	    else : ; fi; \
  	  done; \
  	done
--- 837,857 ----
  
  install-info-am: $(INFO_DEPS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)"
! 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
! 	list='$(INFO_DEPS)'; \
  	for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	  esac; \
  	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
  	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
  	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
                         $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
  	    if test -f $$ifile; then \
  	      relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
! 	      echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
! 	      $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
  	    else : ; fi; \
  	  done; \
  	done
*************** install-info-am: $(INFO_DEPS)
*** 693,700 ****
  	  list='$(INFO_DEPS)'; \
  	  for file in $$list; do \
  	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
! 	    echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile";\
! 	    install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile || :;\
  	  done; \
  	else : ; fi
  install-man: install-man1
--- 861,868 ----
  	  list='$(INFO_DEPS)'; \
  	  for file in $$list; do \
  	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
! 	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
! 	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
  	  done; \
  	else : ; fi
  install-man: install-man1
*************** installcheck-am:
*** 704,709 ****
--- 872,878 ----
  maintainer-clean: maintainer-clean-am
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -rf $(top_srcdir)/autom4te.cache
+ 	-rm -rf ./$(DEPDIR)
  	-rm -f Makefile
  maintainer-clean-am: distclean-am maintainer-clean-aminfo \
  	maintainer-clean-generic
*************** uninstall-am: uninstall-binPROGRAMS unin
*** 725,739 ****
  
  uninstall-man: uninstall-man1
  
! .PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
! 	clean-binPROGRAMS clean-generic ctags dist dist-all dist-gzip \
! 	dist-info distcheck distclean distclean-compile \
! 	distclean-generic distclean-hdr distclean-tags distcleancheck \
! 	distdir distuninstallcheck dvi dvi-am info info-am install \
! 	install-am install-binPROGRAMS install-data install-data-am \
! 	install-exec install-exec-am install-info install-info-am \
! 	install-man install-man1 install-strip installcheck \
! 	installcheck-am installdirs maintainer-clean \
  	maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
  	mostlyclean-aminfo mostlyclean-compile mostlyclean-generic pdf \
  	pdf-am ps ps-am tags uninstall uninstall-am \
--- 894,909 ----
  
  uninstall-man: uninstall-man1
  
! .PHONY: CTAGS GTAGS all all-am all-local am--refresh check check-am \
! 	clean clean-binPROGRAMS clean-generic ctags dist dist-all \
! 	dist-bzip2 dist-gzip dist-info dist-shar dist-tarZ dist-zip \
! 	distcheck distclean distclean-compile distclean-generic \
! 	distclean-hdr distclean-tags distcleancheck distdir \
! 	distuninstallcheck dvi dvi-am html html-am info info-am \
! 	install install-am install-binPROGRAMS install-data \
! 	install-data-am install-exec install-exec-am install-info \
! 	install-info-am install-man install-man1 install-strip \
! 	installcheck installcheck-am installdirs maintainer-clean \
  	maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
  	mostlyclean-aminfo mostlyclean-compile mostlyclean-generic pdf \
  	pdf-am ps ps-am tags uninstall uninstall-am \
*************** uninstall-man: uninstall-man1
*** 741,763 ****
  	uninstall-man1
  
  
! %.1: %.pod
  	-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
  		mv -f $(@).T$$$$ $@) || \
  		(rm -f $(@).T$$$$ && exit 1)
  
! .INTERMEDIATE: jar.pod grepjar.pod
  
! jar.pod: $(srcdir)/fastjar.texi
! 	-$(TEXI2POD) -D jar $< > $@
  
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
  
  all-local: $(STAMP_GENINSRC) 
  
! stamp-geninsrc: jar.1 grepjar.1 fastjar.info
! 	-cp -p $(top_builddir)/jar.1 $(srcdir)/jar.1
  	-cp -p $(top_builddir)/grepjar.1 $(srcdir)/grepjar.1
  	-cp -p $(top_builddir)/fastjar.info $(srcdir)/fastjar.info
  	touch $@
--- 911,933 ----
  	uninstall-man1
  
  
! .pod.1:
  	-($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
  		mv -f $(@).T$$$$ $@) || \
  		(rm -f $(@).T$$$$ && exit 1)
  
! .INTERMEDIATE: fastjar.pod grepjar.pod
  
! fastjar.pod: $(srcdir)/fastjar.texi
! 	-$(TEXI2POD) -D fastjar $< > $@
  
  grepjar.pod: $(srcdir)/fastjar.texi
  	-$(TEXI2POD) -D grepjar $< > $@
  
  all-local: $(STAMP_GENINSRC) 
  
! stamp-geninsrc: fastjar.1 grepjar.1 fastjar.info
! 	-cp -p $(top_builddir)/fastjar.1 $(srcdir)/fastjar.1
  	-cp -p $(top_builddir)/grepjar.1 $(srcdir)/grepjar.1
  	-cp -p $(top_builddir)/fastjar.info $(srcdir)/fastjar.info
  	touch $@
diff -Nrcpad gcc-3.4.3/fastjar/acinclude.m4 gcc-4.0.0/fastjar/acinclude.m4
*** gcc-3.4.3/fastjar/acinclude.m4	Mon Dec 16 18:18:45 2002
--- gcc-4.0.0/fastjar/acinclude.m4	Sat Nov 13 16:38:04 2004
***************
*** 1,8 ****
- sinclude(../config/accross.m4)
- 
  dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
  dnl of the usual 2.
! AC_DEFUN(gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG,
  [AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg,
  [AC_TRY_COMPILE([
  #include <sys/types.h>
--- 1,6 ----
  dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
  dnl of the usual 2.
! AC_DEFUN([gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG],
  [AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg,
  [AC_TRY_COMPILE([
  #include <sys/types.h>
diff -Nrcpad gcc-3.4.3/fastjar/aclocal.m4 gcc-4.0.0/fastjar/aclocal.m4
*** gcc-3.4.3/fastjar/aclocal.m4	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/fastjar/aclocal.m4	Thu Apr 21 07:04:10 2005
***************
*** 1,6 ****
! # generated automatically by aclocal 1.7.9 -*- Autoconf -*-
  
! # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
  # Free Software Foundation, Inc.
  # This file is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
--- 1,6 ----
! # 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,
***************
*** 11,166 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! sinclude(../config/accross.m4)
! 
! dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
! dnl of the usual 2.
! AC_DEFUN(gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG,
! [AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg,
! [AC_TRY_COMPILE([
! #include <sys/types.h>
! #ifdef HAVE_SYS_STAT_H
! # include <sys/stat.h>
! #endif
! #ifdef HAVE_UNISTD_H
! # include <unistd.h>
! #endif
! #ifdef HAVE_DIRECT_H
! # include <direct.h>
! #endif], [mkdir ("foo", 0);],
!          gcc_cv_mkdir_takes_one_arg=no, gcc_cv_mkdir_takes_one_arg=yes)])
! if test $gcc_cv_mkdir_takes_one_arg = yes ; then
!    AC_DEFINE(MKDIR_TAKES_ONE_ARG, 1, [Define if host mkdir takes a
! single argument.])
! fi
! ])
! 
! # 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
! # 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 10
! 
! AC_PREREQ([2.54])
! 
! # Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
! # the ones we care about.
! m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
! 
! # 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_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_MISSING_PROG(AMTAR, tar)
! AM_PROG_INSTALL_SH
! AM_PROG_INSTALL_STRIP
! # 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([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])
! 
! # Copyright 2002  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
--- 11,19 ----
  # 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
*************** echo "timestamp for $1" >`AS_DIRNAME([$1
*** 180,351 ****
  # ----------------------------
  # 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.7"])
  
  # 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.7.9])])
! 
! # Helper functions for option handling.                    -*- Autoconf -*-
! 
! # Copyright 2001, 2002  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])])
! 
! #
! # Check to make sure that the build environment is sane.
! #
! 
! # Copyright 1996, 1997, 2000, 2001 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)])
! 
! #  -*- Autoconf -*-
! 
! 
! # Copyright 1997, 1999, 2000, 2001 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_AUX_DIR_EXPAND
  
! # Copyright 2001 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
--- 33,50 ----
  # ----------------------------
  # 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
*************** fi
*** 400,480 ****
  # absolute PATH.  The drawback is that using absolute paths prevent a
  # configured tree to be moved without reconfiguration.
  
! # Rely on autoconf to set up CDPATH properly.
! AC_PREREQ([2.50])
! 
! AC_DEFUN([AM_AUX_DIR_EXPAND], [
  # expand $ac_aux_dir to an absolute path
  am_aux_dir=`cd $ac_aux_dir && pwd`
  ])
  
! # AM_PROG_INSTALL_SH
! # ------------------
! # Define $install_sh.
! 
! # Copyright 2001 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)])
! 
! # AM_PROG_INSTALL_STRIP
! 
! # Copyright 2001 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])])
  
! #                                                          -*- 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
--- 99,114 ----
  # 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
*************** AC_SUBST([INSTALL_STRIP_PROGRAM])])
*** 491,514 ****
  # 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])])
  
! # serial 5						-*- Autoconf -*-
  
! # Copyright (C) 1999, 2000, 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
--- 125,158 ----
  # 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
*************** AC_CACHE_CHECK([dependency style of $dep
*** 592,598 ****
      : > sub/conftest.c
      for i in 1 2 3 4 5 6; do
        echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       : > sub/conftst$i.h
      done
      echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  
--- 236,244 ----
      : > 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
  
*************** AC_CACHE_CHECK([dependency style of $dep
*** 620,628 ****
         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
!       # (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored.
!       if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
          am_cv_$1_dependencies_compiler_type=$depmode
          break
        fi
--- 266,279 ----
         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
*************** AC_SUBST([DEPDIR], ["${am__leading_dot}d
*** 656,663 ****
  # ------------
  AC_DEFUN([AM_DEP_TRACK],
  [AC_ARG_ENABLE(dependency-tracking,
! [  --disable-dependency-tracking Speeds up one-time builds
!   --enable-dependency-tracking  Do not reject slow dependency extractors])
  if test "x$enable_dependency_tracking" != xno; then
    am_depcomp="$ac_aux_dir/depcomp"
    AMDEPBACKSLASH='\'
--- 307,314 ----
  # ------------
  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='\'
*************** AC_SUBST([AMDEPBACKSLASH])
*** 668,674 ****
  
  # Generate code to set up dependency tracking.   -*- Autoconf -*-
  
! # Copyright 1999, 2000, 2001, 2002 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
--- 319,326 ----
  
  # 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
*************** AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS
*** 704,730 ****
    else
      continue
    fi
!   grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
!   # Extract the definition of DEP_FILES from the Makefile without
!   # running `make'.
!   DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
    test -z "$DEPDIR" && continue
    # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n -e '/^U = / s///p' < "$mf"`
!   test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
!   # 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 -e '
!     /^DEP_FILES = .*\\\\$/ {
!       s/^DEP_FILES = //
!       :loop
! 	s/\\\\$//
! 	p
! 	n
! 	/\\\\$/ b loop
!       p
!     }
!     /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
         sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
--- 356,376 ----
    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
*************** AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS]
*** 750,755 ****
--- 396,649 ----
       [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
  ])
  
+ # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+ 
+ # 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 7
+ 
+ # AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+ 
+ # 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.
*************** AC_MSG_RESULT([$_am_result])
*** 813,821 ****
  rm -f confinc confmf
  ])
  
! # AM_CONDITIONAL                                              -*- Autoconf -*-
  
! # Copyright 1997, 2000, 2001 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
--- 707,716 ----
  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
*************** rm -f confinc confmf
*** 832,865 ****
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! # serial 5
  
! AC_PREREQ(2.52)
  
! # AM_CONDITIONAL(NAME, SHELL-CONDITION)
! # -------------------------------------
! # Define a conditional.
! AC_DEFUN([AM_CONDITIONAL],
! [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])])
  
! # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
  
! # Copyright 1996, 1997, 2000, 2001 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
--- 727,763 ----
  # 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
*************** fi])])
*** 876,892 ****
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! AC_PREREQ([2.52])
  
! # serial 6
  
! # AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
! AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
  
! # Add --enable-maintainer-mode option to configure.
! # From Jim Meyering
  
! # Copyright 1996, 1998, 2000, 2001, 2002  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
--- 774,881 ----
  # 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])])
! 
! #
! # 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
*************** AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_
*** 903,924 ****
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! # serial 2
  
! 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])
  
--- 892,1087 ----
  # 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([../config/accross.m4])
+ m4_include([../config/gcc-version.m4])
+ m4_include([acinclude.m4])
diff -Nrcpad gcc-3.4.3/fastjar/compress.c gcc-4.0.0/fastjar/compress.c
*** gcc-3.4.3/fastjar/compress.c	Thu Jan  3 04:57:56 2002
--- gcc-4.0.0/fastjar/compress.c	Tue Jul  6 21:40:08 2004
***************
*** 74,79 ****
--- 74,80 ----
  /*
    compress.c - code for handling deflation
    Copyright (C) 1999  Bryan Burns
+   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
***************
*** 109,116 ****
--- 110,121 ----
  #include "jartool.h"
  #include "pushback.h"
  #include "compress.h"
+ #include "shift.h"
+ 
+ int write_data (int, void *, size_t, struct zipentry *);
  
  extern int seekable;
+ extern off_t end_of_entries;
  
  static z_stream zs;
  
*************** void init_compression(){
*** 133,139 ****
    }
  }
  
! int compress_file(int in_fd, int out_fd, struct zipentry *ze){
    Bytef in_buff[RDSZ];
    Bytef out_buff[RDSZ];
    unsigned int rdamt, wramt;
--- 138,173 ----
    }
  }
  
! int
! write_data (int fd, void *buf, size_t len, struct zipentry *ze)
! {
! #ifdef WITH_SHIFT_DOWN
!   struct zipentry *next = NULL;
!   off_t here = lseek (fd, 0, SEEK_CUR);
!   /*
!    * If we are updating and there is not enough space before the next
!    * entry, expand the file.
!    */
!   if (ze)
!     {
!       next = ze->next_entry;
!       if (next && here + len >= next->offset)
! 	{
! 	  if (shift_down (fd, next->offset, (here + len) - next->offset, next))
! 	    {
! 	      perror ("can't expand file");
! 	      exit (1);
! 	    }
! 	}
!     }
! #endif /* WITH_SHIFT_DOWN */
! 
!   return write (fd, buf, len);
! }
! 
! int compress_file(int in_fd, int out_fd, struct zipentry *ze,
! 		  struct zipentry *existing)
! {
    Bytef in_buff[RDSZ];
    Bytef out_buff[RDSZ];
    unsigned int rdamt, wramt;
*************** int compress_file(int in_fd, int out_fd,
*** 183,192 ****
      /* If the output buffer is full, dump it to disk */
      if(zs.avail_out == 0){
  
!       if(write(out_fd, out_buff, RDSZ) != RDSZ){
!         perror("write");
!         exit(1);
!       }
  
        /* clear the output buffer */
        zs.next_out = out_buff;
--- 217,227 ----
      /* If the output buffer is full, dump it to disk */
      if(zs.avail_out == 0){
  
!       if (write_data (out_fd, out_buff, RDSZ, existing) != RDSZ)
! 	{
! 	  perror("write");
! 	  exit(1);
! 	}
  
        /* clear the output buffer */
        zs.next_out = out_buff;
*************** int compress_file(int in_fd, int out_fd,
*** 201,210 ****
  
      wramt = RDSZ - zs.avail_out;
  
!     if(write(out_fd, out_buff, wramt) != (int)wramt){
!       perror("write");
!       exit(1);
!     }
      /* clear the output buffer */
      zs.next_out = out_buff;
      zs.avail_out = (uInt)RDSZ;
--- 236,246 ----
  
      wramt = RDSZ - zs.avail_out;
  
!     if (write_data (out_fd, out_buff, wramt, existing) != (int)wramt)
!       {
! 	perror("write");
! 	exit(1);
!       }
      /* clear the output buffer */
      zs.next_out = out_buff;
      zs.avail_out = (uInt)RDSZ;
*************** int compress_file(int in_fd, int out_fd,
*** 215,224 ****
    while(deflate(&zs, Z_FINISH) == Z_OK){
      wramt = RDSZ - zs.avail_out;
  
!     if(write(out_fd, out_buff, wramt) != (int)wramt){
!       perror("write");
!       exit(1);
!     }
  
      zs.next_out = out_buff;
      zs.avail_out = (uInt)RDSZ;
--- 251,261 ----
    while(deflate(&zs, Z_FINISH) == Z_OK){
      wramt = RDSZ - zs.avail_out;
  
!     if (write_data (out_fd, out_buff, wramt, existing) != (int)wramt)
!       {
! 	perror("write");
! 	exit(1);
!       }
  
      zs.next_out = out_buff;
      zs.avail_out = (uInt)RDSZ;
*************** int compress_file(int in_fd, int out_fd,
*** 228,237 ****
    if(zs.avail_out != RDSZ){
      wramt = RDSZ - zs.avail_out;
  
!     if(write(out_fd, out_buff, wramt) != (int)wramt){
!       perror("write");
!       exit(1);
!     }
    }
  
    /* update fastjar's entry information */
--- 265,275 ----
    if(zs.avail_out != RDSZ){
      wramt = RDSZ - zs.avail_out;
  
!     if (write_data (out_fd, out_buff, wramt, existing) != (int)wramt)
!       {
! 	perror("write");
! 	exit(1);
!       }
    }
  
    /* update fastjar's entry information */
diff -Nrcpad gcc-3.4.3/fastjar/compress.h gcc-4.0.0/fastjar/compress.h
*** gcc-3.4.3/fastjar/compress.h	Thu Dec 14 18:45:35 2000
--- gcc-4.0.0/fastjar/compress.h	Tue Jul  6 21:40:08 2004
***************
*** 46,52 ****
  void init_compression(void);
  
  /* Compresses the file specified by in_fd and appends it to out_fd */
! int compress_file(int in_fd, int out_fd, struct zipentry *ze);
  
  /* Frees memory used by compression function */
  void end_compression(void);
--- 46,52 ----
  void init_compression(void);
  
  /* Compresses the file specified by in_fd and appends it to out_fd */
! int compress_file(int, int, struct zipentry *, struct zipentry *);
  
  /* Frees memory used by compression function */
  void end_compression(void);
diff -Nrcpad gcc-3.4.3/fastjar/config.h.in gcc-4.0.0/fastjar/config.h.in
*** gcc-3.4.3/fastjar/config.h.in	Wed Jul  7 03:16:27 2004
--- gcc-4.0.0/fastjar/config.h.in	Mon Jul 19 20:08:20 2004
***************
*** 10,15 ****
--- 10,18 ----
  /* Define to 1 if you have the <fcntl.h> header file. */
  #undef HAVE_FCNTL_H
  
+ /* Define to 1 if you have the `ftruncate' function. */
+ #undef HAVE_FTRUNCATE
+ 
  /* Define to 1 if you have the <inttypes.h> header file. */
  #undef HAVE_INTTYPES_H
  
***************
*** 57,62 ****
--- 60,68 ----
  /* Define to 1 if you have the <unistd.h> header file. */
  #undef HAVE_UNISTD_H
  
+ /* 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
diff -Nrcpad gcc-3.4.3/fastjar/configure gcc-4.0.0/fastjar/configure
*** gcc-3.4.3/fastjar/configure	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/fastjar/configure	Thu Apr 21 07:04:10 2005
***************
*** 1,9 ****
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # Generated by GNU Autoconf 2.57.
  #
! # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
! # Free Software Foundation, Inc.
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
  ## --------------------- ##
--- 1,8 ----
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # 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.
  ## --------------------- ##
*************** if test -n "${ZSH_VERSION+set}" && (emul
*** 20,28 ****
  elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
    set -o posix
  fi
  
  # Support unset when possible.
! if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
    as_unset=unset
  else
    as_unset=false
--- 19,28 ----
  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
*************** for as_var in \
*** 41,47 ****
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
    LC_TELEPHONE LC_TIME
  do
!   if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
      eval $as_var=C; export $as_var
    else
      $as_unset $as_var
--- 41,47 ----
    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
*************** rm -f conf$$ conf$$.exe conf$$.file
*** 218,233 ****
  if mkdir -p . 2>/dev/null; then
    as_mkdir_p=:
  else
    as_mkdir_p=false
  fi
  
  as_executable_p="test -f"
  
  # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  
  
  # IFS
--- 218,234 ----
  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
*************** ac_includes_default="\
*** 308,314 ****
  # 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 AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot 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 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 gcc_version_trigger gcc_version_full gcc_version LIBOBJS LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
*************** done
*** 667,673 ****
  
  # 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
--- 668,674 ----
  
  # 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
*************** if test -z "$srcdir"; then
*** 707,716 ****
    # 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; }
--- 708,717 ----
    # 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; }
*************** _ACEOF
*** 802,810 ****
    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
--- 803,811 ----
    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
*************** if test -n "$ac_init_help"; then
*** 844,853 ****
  Optional Features:
    --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
    --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --disable-dependency-tracking Speeds up one-time builds
!   --enable-dependency-tracking  Do not reject slow dependency extractors
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer
    --enable-generated-files-in-srcdir
                            put copies of generated files in source dir
                            intended for creating source tarballs for users
--- 845,854 ----
  Optional Features:
    --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
    --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --disable-dependency-tracking  speeds up one-time build
!   --enable-dependency-tracking   do not reject slow dependency extractors
!   --enable-maintainer-mode  enable make rules and dependencies not useful
! 			  (and sometimes confusing) to the casual installer
    --enable-generated-files-in-srcdir
                            put copies of generated files in source dir
                            intended for creating source tarballs for users
*************** case $srcdir in
*** 903,914 ****
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
! # absolute.
! ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
! ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
! ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
! ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  
      cd $ac_dir
      # Check for guested configure; otherwise get Cygnus style configure.
--- 904,948 ----
      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.
*************** ac_abs_top_srcdir=`cd "$ac_dir" && cd $a
*** 919,925 ****
        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
--- 953,959 ----
        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
*************** test -n "$ac_init_help" && exit 0
*** 933,940 ****
  if $ac_init_version; then
    cat <<\_ACEOF
  
! Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
! Free Software Foundation, Inc.
  This configure script is free software; the Free Software Foundation
  gives unlimited permission to copy, distribute and modify it.
  _ACEOF
--- 967,973 ----
  if $ac_init_version; then
    cat <<\_ACEOF
  
! 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
*************** This file contains any messages produced
*** 946,952 ****
  running configure, to aid debugging if configure makes a mistake.
  
  It was created by $as_me, which was
! generated by GNU Autoconf 2.57.  Invocation command line was
  
    $ $0 $@
  
--- 979,985 ----
  running configure, to aid debugging if configure makes a mistake.
  
  It was created by $as_me, which was
! generated by GNU Autoconf 2.59.  Invocation command line was
  
    $ $0 $@
  
*************** do
*** 1023,1041 ****
      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.
--- 1056,1074 ----
      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.
*************** _ASBOX
*** 1069,1080 ****
      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;
  }
--- 1102,1113 ----
      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;
  }
*************** _ASBOX
*** 1103,1109 ****
        for ac_var in $ac_subst_files
        do
  	eval ac_val=$`echo $ac_var`
!         echo "$ac_var='"'"'$ac_val'"'"'"
        done | sort
        echo
      fi
--- 1136,1142 ----
        for ac_var in $ac_subst_files
        do
  	eval ac_val=$`echo $ac_var`
! 	echo "$ac_var='"'"'$ac_val'"'"'"
        done | sort
        echo
      fi
*************** _ASBOX
*** 1122,1128 ****
        echo "$as_me: caught signal $ac_signal"
      echo "$as_me: exit $exit_status"
    } >&5
!   rm -f core core.* *.core &&
    rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
      exit $exit_status
       ' 0
--- 1155,1161 ----
        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
*************** fi
*** 1202,1208 ****
  # 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"
--- 1235,1241 ----
  # 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"
*************** echo "$as_me: error: \`$ac_var' was not 
*** 1219,1231 ****
      ,);;
      *)
        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.
--- 1252,1264 ----
      ,);;
      *)
        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.
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 1273,1279 ****
  
  
  
! am__api_version="1.7"
  ac_aux_dir=
  for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
    if test -f $ac_dir/install-sh; then
--- 1306,1312 ----
  
  
  
! am__api_version="1.9"
  ac_aux_dir=
  for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
    if test -f $ac_dir/install-sh; then
*************** ac_configure="$SHELL $ac_aux_dir/configu
*** 1310,1315 ****
--- 1343,1349 ----
  # 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
*************** do
*** 1326,1331 ****
--- 1360,1366 ----
  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.
*************** case $as_dir/ in
*** 1333,1352 ****
      # 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
      ;;
--- 1368,1387 ----
      # 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
      ;;
*************** _ACEOF
*** 1434,1440 ****
  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`
  
--- 1469,1474 ----
*************** else
*** 1448,1453 ****
--- 1482,1520 ----
  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.
*************** done
*** 1490,1496 ****
  
  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
--- 1557,1563 ----
  
  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
*************** else
*** 1526,1532 ****
  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
--- 1593,1599 ----
  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
*************** AUTOHEADER=${AUTOHEADER-"${am_missing_ru
*** 1574,1582 ****
  
  MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
  
- 
- AMTAR=${AMTAR-"${am_missing_run}tar"}
- 
  install_sh=${install_sh-"$am_aux_dir/install-sh"}
  
  # Installed binaries are usually stripped using `strip' when the user
--- 1641,1646 ----
*************** INSTALL_STRIP_PROGRAM="\${SHELL} \$(inst
*** 1669,1674 ****
--- 1733,1745 ----
  
  # 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"}
+ 
+ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+ 
+ 
  
  
  
*************** ac_compiler=`set X $ac_compile; echo $2`
*** 2011,2017 ****
    (exit $ac_status); }
  
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2082,2087 ----
*************** ac_clean_files="$ac_clean_files a.out a.
*** 2031,2038 ****
  # 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" >&5
! echo $ECHO_N "checking for C compiler default output... $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
--- 2101,2108 ----
  # 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
*************** do
*** 2052,2074 ****
    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
--- 2122,2144 ----
    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
*************** for ac_file in conftest.exe conftest con
*** 2142,2149 ****
    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
--- 2212,2219 ----
    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
*************** if test "${ac_cv_objext+set}" = set; the
*** 2168,2174 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2238,2243 ----
*************** if test "${ac_cv_c_compiler_gnu+set}" = 
*** 2219,2225 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2288,2293 ----
*************** main ()
*** 2239,2249 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2307,2327 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 2256,2262 ****
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  ac_cv_c_compiler_gnu=$ac_compiler_gnu
  
  fi
--- 2334,2340 ----
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  ac_cv_c_compiler_gnu=$ac_compiler_gnu
  
  fi
*************** if test "${ac_cv_prog_cc_g+set}" = set; 
*** 2272,2278 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2350,2355 ----
*************** main ()
*** 2289,2299 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2366,2386 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 2306,2312 ****
  
  ac_cv_prog_cc_g=no
  fi
! rm -f 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
--- 2393,2399 ----
  
  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
*************** else
*** 2333,2339 ****
    ac_cv_prog_cc_stdc=no
  ac_save_CC=$CC
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2420,2425 ----
*************** static char *f (char * (*g) (char **, in
*** 2361,2366 ****
--- 2447,2462 ----
    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);};
*************** do
*** 2387,2397 ****
    CC="$ac_save_CC $ac_arg"
    rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2483,2503 ----
    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=$?
*************** else
*** 2404,2410 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext
  done
  rm -f conftest.$ac_ext conftest.$ac_objext
  CC=$ac_save_CC
--- 2510,2516 ----
  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
*************** cat >conftest.$ac_ext <<_ACEOF
*** 2432,2450 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { 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 \
!    ''\
!    '#include <stdlib.h>' \
     '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 ();' \
--- 2538,2565 ----
  _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 ();' \
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 2452,2465 ****
     'void exit (int);'
  do
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
- #include <stdlib.h>
  $ac_declaration
  int
  main ()
  {
--- 2567,2579 ----
     '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);
*** 2470,2480 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2584,2604 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 2487,2495 ****
  
  continue
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2611,2618 ----
  
  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
*************** exit (42);
*** 2506,2516 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2629,2649 ----
  _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=$?
*************** else
*** 2522,2528 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  done
  rm -f conftest*
  if test -n "$ac_declaration"; then
--- 2655,2661 ----
  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
*************** else
*** 2536,2542 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 2669,2675 ----
  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'
*************** else
*** 2649,2655 ****
      : > sub/conftest.c
      for i in 1 2 3 4 5 6; do
        echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       : > sub/conftst$i.h
      done
      echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  
--- 2782,2790 ----
      : > 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
  
*************** else
*** 2677,2685 ****
         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
!       # (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored.
!       if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
          am_cv_CC_dependencies_compiler_type=$depmode
          break
        fi
--- 2812,2825 ----
         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
*** 2721,2726 ****
--- 2861,2867 ----
  # 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
*************** do
*** 2737,2742 ****
--- 2878,2884 ----
  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.
*************** case $as_dir/ in
*** 2744,2763 ****
      # 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
      ;;
--- 2886,2905 ----
      # 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
      ;;
*************** if eval "test \"\${$as_ac_Header+set}\" 
*** 2998,3004 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3140,3145 ----
*************** return 0;
*** 3018,3028 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3159,3179 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3035,3041 ****
  
  eval "$as_ac_Header=no"
  fi
! rm -f 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
--- 3186,3192 ----
  
  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
*************** else
*** 3058,3064 ****
    ac_func_search_save_LIBS=$LIBS
  ac_cv_search_opendir=no
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3209,3214 ----
*************** opendir ();
*** 3082,3092 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3232,3252 ----
  _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=$?
*************** else
*** 3098,3109 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in dir; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3258,3269 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in dir; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** opendir ();
*** 3127,3137 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3287,3307 ----
  _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=$?
*************** else
*** 3144,3150 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
--- 3314,3321 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
*************** else
*** 3165,3171 ****
    ac_func_search_save_LIBS=$LIBS
  ac_cv_search_opendir=no
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3336,3341 ----
*************** opendir ();
*** 3189,3199 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3359,3379 ----
  _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=$?
*************** else
*** 3205,3216 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in x; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3385,3396 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in x; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** opendir ();
*** 3234,3244 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3414,3434 ----
  _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=$?
*************** else
*** 3251,3257 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
--- 3441,3448 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
*************** do
*** 3293,3299 ****
    # 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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3484,3489 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 3304,3310 ****
  #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
--- 3494,3500 ----
  #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
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3316,3321 ****
--- 3506,3512 ----
    (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
*************** rm -f conftest.err conftest.$ac_ext
*** 3336,3342 ****
    # OK, works on sane cases.  Now check whether non-existent headers
    # can be detected and how.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3527,3532 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3354,3359 ****
--- 3544,3550 ----
    (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
*************** do
*** 3400,3406 ****
    # 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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3591,3596 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 3411,3417 ****
  #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
--- 3601,3607 ----
  #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
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3423,3428 ****
--- 3613,3619 ----
    (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
*************** rm -f conftest.err conftest.$ac_ext
*** 3443,3449 ****
    # OK, works on sane cases.  Now check whether non-existent headers
    # can be detected and how.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3634,3639 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3461,3466 ****
--- 3651,3657 ----
    (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
*************** if test "${ac_cv_header_stdc+set}" = set
*** 3521,3527 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3712,3717 ----
*************** main ()
*** 3542,3552 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3732,3752 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3559,3570 ****
  
  ac_cv_header_stdc=no
  fi
! rm -f 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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3759,3769 ----
  
  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
*************** fi
*** 3586,3592 ****
  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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3785,3790 ----
*************** if test $ac_cv_header_stdc = yes; then
*** 3611,3617 ****
    :
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3809,3814 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 3623,3631 ****
  # 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
  
--- 3820,3828 ----
  # 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
  
*************** main ()
*** 3636,3642 ****
    int i;
    for (i = 0; i < 256; i++)
      if (XOR (islower (i), ISLOWER (i))
!         || toupper (i) != TOUPPER (i))
        exit(2);
    exit (0);
  }
--- 3833,3839 ----
    int i;
    for (i = 0; i < 256; i++)
      if (XOR (islower (i), ISLOWER (i))
! 	|| toupper (i) != TOUPPER (i))
        exit(2);
    exit (0);
  }
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3661,3667 ****
  ( exit $ac_status )
  ac_cv_header_stdc=no
  fi
! rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
  fi
--- 3858,3864 ----
  ( 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
*************** if test "${ac_cv_struct_tm+set}" = set; 
*** 3681,3687 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3878,3883 ----
*************** struct tm *tp; tp->tm_sec;
*** 3700,3710 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3896,3916 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3717,3723 ****
  
  ac_cv_struct_tm=sys/time.h
  fi
! rm -f 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
--- 3923,3929 ----
  
  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
*************** fi
*** 3740,3746 ****
  
  
  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
--- 3946,3952 ----
  
  
  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
*************** if eval "test \"\${$as_ac_Header+set}\" 
*** 3749,3755 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3955,3960 ----
*************** $ac_includes_default
*** 3761,3771 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3966,3986 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3778,3784 ****
  
  eval "$as_ac_Header=no"
  fi
! rm -f 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
--- 3993,3999 ----
  
  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
*************** else
*** 3813,3819 ****
  echo "$as_me:$LINENO: checking $ac_header usability" >&5
  echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4028,4033 ----
*************** $ac_includes_default
*** 3824,3834 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4038,4058 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3841,3847 ****
  
  ac_header_compiler=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  echo "${ECHO_T}$ac_header_compiler" >&6
  
--- 4065,4071 ----
  
  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
  
*************** echo "${ECHO_T}$ac_header_compiler" >&6
*** 3849,3855 ****
  echo "$as_me:$LINENO: checking $ac_header presence" >&5
  echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4073,4078 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 3867,3872 ****
--- 4090,4096 ----
    (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
*************** echo "$as_me:$LINENO: result: $ac_header
*** 3886,3918 ****
  echo "${ECHO_T}$ac_header_preproc" >&6
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc 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 preprocessor's result" >&5
! echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
!     (
!       cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
! _ASBOX
!     ) |
!       sed "s/^/$as_me: WARNING:     /" >&2
      ;;
!   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: proceeding with the preprocessor's result" >&5
  echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
      (
        cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
--- 4110,4141 ----
  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 the AC_PACKAGE_NAME lists.  ##
! ## ------------------------------------------ ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
*************** echo $ECHO_N "checking for $ac_header...
*** 3923,3929 ****
  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
--- 4146,4152 ----
  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
*** 3939,3951 ****
  done
  
  
  echo "$as_me:$LINENO: checking for off_t" >&5
  echo $ECHO_N "checking for off_t... $ECHO_C" >&6
  if test "${ac_cv_type_off_t+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4162,4277 ----
  done
  
  
+ 
+ 
+ for ac_func in ftruncate _chsize
+ 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 for off_t" >&5
  echo $ECHO_N "checking for off_t... $ECHO_C" >&6
  if test "${ac_cv_type_off_t+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
*************** if (sizeof (off_t))
*** 3965,3975 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4291,4311 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3982,3988 ****
  
  ac_cv_type_off_t=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
  echo "${ECHO_T}$ac_cv_type_off_t" >&6
--- 4318,4324 ----
  
  ac_cv_type_off_t=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
  echo "${ECHO_T}$ac_cv_type_off_t" >&6
*************** if test "${ac_cv_struct_tm+set}" = set; 
*** 4002,4008 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4338,4343 ----
*************** struct tm *tp; tp->tm_sec;
*** 4021,4031 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4356,4376 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4038,4044 ****
  
  ac_cv_struct_tm=sys/time.h
  fi
! rm -f 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
--- 4383,4389 ----
  
  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 "${gcc_cv_mkdir_takes_one_arg+se
*** 4058,4064 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4403,4408 ----
*************** mkdir ("foo", 0);
*** 4085,4095 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4429,4449 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4102,4108 ****
  
  gcc_cv_mkdir_takes_one_arg=yes
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $gcc_cv_mkdir_takes_one_arg" >&5
  echo "${ECHO_T}$gcc_cv_mkdir_takes_one_arg" >&6
--- 4456,4462 ----
  
  gcc_cv_mkdir_takes_one_arg=yes
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $gcc_cv_mkdir_takes_one_arg" >&5
  echo "${ECHO_T}$gcc_cv_mkdir_takes_one_arg" >&6
*************** if test "${ac_cv_sizeof_char+set}" = set
*** 4122,4128 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4476,4481 ----
*************** switch (0) case 0: case (sizeof (char) =
*** 4142,4152 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4495,4515 ----
  _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=$?
*************** else
*** 4158,4164 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_char != x ; then break; fi
  done
  
--- 4521,4527 ----
  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
  
*************** if test "${ac_cv_sizeof_short+set}" = se
*** 4184,4190 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4547,4552 ----
*************** switch (0) case 0: case (sizeof (short) 
*** 4204,4214 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4566,4586 ----
  _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=$?
*************** else
*** 4220,4226 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_short != x ; then break; fi
  done
  
--- 4592,4598 ----
  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
  
*************** if test "${ac_cv_sizeof_int+set}" = set;
*** 4246,4252 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4618,4623 ----
*************** switch (0) case 0: case (sizeof (int) ==
*** 4266,4276 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4637,4657 ----
  _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=$?
*************** else
*** 4282,4288 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_int != x ; then break; fi
  done
  
--- 4663,4669 ----
  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
  
*************** if test "${ac_cv_sizeof_long+set}" = set
*** 4308,4314 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4689,4694 ----
*************** switch (0) case 0: case (sizeof (long) =
*** 4328,4338 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4708,4728 ----
  _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=$?
*************** else
*** 4344,4350 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_long != x ; then break; fi
  done
  
--- 4734,4740 ----
  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
  
*************** if test "${ac_cv_type_long_long+set}" = 
*** 4369,4375 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4759,4764 ----
*************** if (sizeof (long long))
*** 4389,4399 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4778,4798 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4406,4412 ****
  
  ac_cv_type_long_long=no
  fi
! rm -f 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
--- 4805,4811 ----
  
  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
*************** if test "${ac_cv_sizeof_long_long+set}" 
*** 4423,4429 ****
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4822,4827 ----
*************** switch (0) case 0: case (sizeof (long lo
*** 4443,4453 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4841,4861 ----
  _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=$?
*************** else
*** 4459,4465 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    if test x$ac_cv_sizeof_long_long != x ; then break; fi
  done
  
--- 4867,4873 ----
  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
  
*************** else
*** 4489,4495 ****
    ac_cv_c_bigendian=unknown
  # See if sys/param.h defines the BYTE_ORDER macro.
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4897,4902 ----
*************** main ()
*** 4510,4520 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4917,4937 ----
  _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=$?
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4522,4528 ****
    (exit $ac_status); }; }; then
    # It does; now see whether it defined to BIG_ENDIAN or not.
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4939,4944 ----
*************** main ()
*** 4543,4553 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4959,4979 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4560,4578 ****
  
  ac_cv_c_bigendian=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  else
    echo "$as_me: failed program was:" >&5
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f 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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4986,5003 ----
  
  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
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4609,4615 ****
  ( exit $ac_status )
  ac_cv_c_bigendian=yes
  fi
! rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
  fi
--- 5034,5040 ----
  ( 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
*************** else
*** 4695,4701 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-lz  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5120,5125 ----
*************** deflate ();
*** 4719,4729 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 5143,5163 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4736,4742 ****
  
  ac_cv_lib_z_deflate=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_z_deflate" >&5
--- 5170,5177 ----
  
  ac_cv_lib_z_deflate=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_z_deflate" >&5
*************** else
*** 4791,4806 ****
  fi
  
  
! # Get the version trigger filename from the toplevel
  if test "${with_gcc_version_trigger+set}" = set; then
!    gcc_version_trigger=$with_gcc_version_trigger
  else
!    gcc_version_trigger=${srcdir}/version.c
  fi
- gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*"\([^"]*\)".*/\1/'`
  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
--- 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
*************** _ACEOF
*** 4830,4842 ****
        # `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;
  } |
--- 5272,5284 ----
        # `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;
  } |
*************** test "x$exec_prefix" = xNONE && exec_pre
*** 4866,4878 ****
  # 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
  
--- 5308,5320 ----
  # 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
  
*************** ac_ltlibobjs=
*** 4883,4889 ****
  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'
--- 5325,5331 ----
  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'
*************** if test -n "${ZSH_VERSION+set}" && (emul
*** 4955,4963 ****
  elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
    set -o posix
  fi
  
  # Support unset when possible.
! if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
    as_unset=unset
  else
    as_unset=false
--- 5397,5406 ----
  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
*************** for as_var in \
*** 4976,4982 ****
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
    LC_TELEPHONE LC_TIME
  do
!   if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
      eval $as_var=C; export $as_var
    else
      $as_unset $as_var
--- 5419,5425 ----
    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
*************** rm -f conf$$ conf$$.exe conf$$.file
*** 5155,5170 ****
  if mkdir -p . 2>/dev/null; then
    as_mkdir_p=:
  else
    as_mkdir_p=false
  fi
  
  as_executable_p="test -f"
  
  # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  
  
  # IFS
--- 5598,5614 ----
  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
*************** _ASBOX
*** 5191,5197 ****
  cat >&5 <<_CSEOF
  
  This file was extended by $as_me, which was
! generated by GNU Autoconf 2.57.  Invocation command line was
  
    CONFIG_FILES    = $CONFIG_FILES
    CONFIG_HEADERS  = $CONFIG_HEADERS
--- 5635,5641 ----
  cat >&5 <<_CSEOF
  
  This file was extended by $as_me, which was
! generated by GNU Autoconf 2.59.  Invocation command line was
  
    CONFIG_FILES    = $CONFIG_FILES
    CONFIG_HEADERS  = $CONFIG_HEADERS
*************** Usage: $0 [OPTIONS] [FILE]...
*** 5235,5243 ****
    -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
--- 5679,5687 ----
    -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
*************** _ACEOF
*** 5254,5264 ****
  cat >>$CONFIG_STATUS <<_ACEOF
  ac_cs_version="\\
  config.status
! configured by $0, generated by GNU Autoconf 2.57,
    with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  
! Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
! 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
--- 5698,5707 ----
  cat >>$CONFIG_STATUS <<_ACEOF
  ac_cs_version="\\
  config.status
! 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
*************** s,@AUTOCONF@,$AUTOCONF,;t t
*** 5464,5477 ****
  s,@AUTOMAKE@,$AUTOMAKE,;t t
  s,@AUTOHEADER@,$AUTOHEADER,;t t
  s,@MAKEINFO@,$MAKEINFO,;t t
- s,@AMTAR@,$AMTAR,;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,@AWK@,$AWK,;t t
  s,@SET_MAKE@,$SET_MAKE,;t t
  s,@am__leading_dot@,$am__leading_dot,;t t
  s,@CC@,$CC,;t t
  s,@CFLAGS@,$CFLAGS,;t t
  s,@LDFLAGS@,$LDFLAGS,;t t
--- 5907,5923 ----
  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,@CC@,$CC,;t t
  s,@CFLAGS@,$CFLAGS,;t t
  s,@LDFLAGS@,$LDFLAGS,;t t
*************** s,@ZDEPS@,$ZDEPS,;t t
*** 5502,5507 ****
--- 5948,5955 ----
  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
*************** _ACEOF
*** 5534,5542 ****
        (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
--- 5982,5990 ----
        (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
*************** for ac_file in : $CONFIG_FILES; do test 
*** 5554,5574 ****
    # 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; }
--- 6002,6022 ----
    # 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; }
*************** echo X"$ac_file" |
*** 5584,5593 ****
        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; }
--- 6032,6041 ----
        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; }
*************** case $srcdir in
*** 5625,5636 ****
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
! # absolute.
! ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
! ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
! ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
! ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  
  
    case $INSTALL in
--- 6073,6117 ----
      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
*************** echo "$as_me: creating $ac_file" >&6;}
*** 5652,5658 ****
      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.
--- 6133,6139 ----
      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.
*************** echo "$as_me: creating $ac_file" >&6;}
*** 5661,5684 ****
        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
--- 6142,6165 ----
        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
*** 5720,5731 ****
  # 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'
--- 6201,6212 ----
  # 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 tes
*** 5734,5744 ****
    # 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
  
--- 6215,6225 ----
    # 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
  
*************** echo "$as_me: creating $ac_file" >&6;}
*** 5752,5779 ****
        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; }
    # Remove the trailing spaces.
!   sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
  
  _ACEOF
  
--- 6233,6261 ----
        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
  
*************** s/[\\&,]/\\&/g
*** 5796,5804 ****
  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
--- 6278,6286 ----
  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
*************** rm -f confdef2sed.sed
*** 5812,5824 ****
  # 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
--- 6294,6306 ----
  # 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
*************** do
*** 5827,5833 ****
    # 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
--- 6309,6315 ----
    # 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
*************** do
*** 5854,5860 ****
    # 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
--- 6336,6342 ----
    # 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
*************** echo "$as_me: $ac_file is unchanged" >&6
*** 5888,5897 ****
      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; }
--- 6370,6379 ----
      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; }
*************** echo X"$ac_file" |
*** 5907,5916 ****
        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; }
--- 6389,6398 ----
        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; }
*************** for _am_header in $config_headers :; do
*** 5942,5951 ****
  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; }
--- 6424,6433 ----
  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; }
*************** for ac_file in : $CONFIG_COMMANDS; do te
*** 5964,5979 ****
    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'`
    ac_builddir=.
  
  if test "$ac_dir" != .; then
--- 6446,6486 ----
    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
*************** case $srcdir in
*** 5999,6010 ****
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
! # absolute.
! ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
! ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
! ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
! ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  
  
    { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
--- 6506,6550 ----
      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 command
*** 6022,6031 ****
    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; }
--- 6562,6571 ----
    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; }
*************** echo X"$mf" |
*** 6035,6070 ****
    else
      continue
    fi
!   grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
!   # Extract the definition of DEP_FILES from the Makefile without
!   # running `make'.
!   DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
    test -z "$DEPDIR" && continue
    # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n -e '/^U = / s///p' < "$mf"`
!   test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
!   # 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 -e '
!     /^DEP_FILES = .*\\\\$/ {
!       s/^DEP_FILES = //
!       :loop
! 	s/\\\\$//
! 	p
! 	n
! 	/\\\\$/ b loop
!       p
!     }
!     /^DEP_FILES = / s/^DEP_FILES = //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; }
--- 6575,6604 ----
    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; }
*************** echo X"$file" |
*** 6080,6089 ****
        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; }
--- 6614,6623 ----
        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; }
diff -Nrcpad gcc-3.4.3/fastjar/configure.ac gcc-4.0.0/fastjar/configure.ac
*** gcc-3.4.3/fastjar/configure.ac	Wed Jul  7 03:16:28 2004
--- gcc-4.0.0/fastjar/configure.ac	Thu Dec  2 11:03:21 2004
***************
*** 1,5 ****
  dnl Process this file with autoconf to produce a configure script.
! AC_PREREQ(2.57)
  AC_INIT(jartool.h)
  AM_INIT_AUTOMAKE(fastjar, 0.92-gcc)
  AM_CONFIG_HEADER(config.h)
--- 1,5 ----
  dnl Process this file with autoconf to produce a configure script.
! AC_PREREQ(2.59)
  AC_INIT(jartool.h)
  AM_INIT_AUTOMAKE(fastjar, 0.92-gcc)
  AM_CONFIG_HEADER(config.h)
*************** AC_HEADER_STDC
*** 27,32 ****
--- 27,34 ----
  AC_STRUCT_TM
  AC_CHECK_HEADERS(fcntl.h unistd.h sys/param.h stdlib.h limits.h)
  
+ AC_CHECK_FUNCS(ftruncate _chsize)
+ 
  dnl Checks for typedefs, structures, and compiler characteristics.
  AC_TYPE_OFF_T
  AC_STRUCT_TM
*************** AC_MSG_CHECKING([whether to place genera
*** 87,102 ****
  AC_MSG_RESULT($generated_files_in_srcdir)
  AM_CONDITIONAL(GENINSRC, test x$generated_files_in_srcdir = xyes)
  
! # Get the version trigger filename from the toplevel
! if test "${with_gcc_version_trigger+set}" = set; then
!    gcc_version_trigger=$with_gcc_version_trigger
! else
!    gcc_version_trigger=${srcdir}/version.c
! fi
! changequote(,)dnl
! gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*"\([^"]*\)".*/\1/'`
! gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
! changequote([,])dnl
! AC_SUBST(gcc_version)
  
  AC_OUTPUT(Makefile install-defs.sh)
--- 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)
diff -Nrcpad gcc-3.4.3/fastjar/fastjar.1 gcc-4.0.0/fastjar/fastjar.1
*** gcc-3.4.3/fastjar/fastjar.1	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fastjar/fastjar.1	Thu Apr 21 07:33:11 2005
***************
*** 0 ****
--- 1,214 ----
+ .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
+ .\"
+ .\" Standard preamble:
+ .\" ========================================================================
+ .de Sh \" Subsection heading
+ .br
+ .if t .Sp
+ .ne 5
+ .PP
+ \fB\\$1\fR
+ .PP
+ ..
+ .de Sp \" Vertical space (when we can't use .PP)
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Vb \" Begin verbatim text
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve \" End verbatim text
+ .ft R
+ .fi
+ ..
+ .\" Set up some character translations and predefined strings.  \*(-- will
+ .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+ .\" double quote, and \*(R" will give a right double quote.  | will give a
+ .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+ .\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+ .\" expand to `' in nroff, nothing in troff, for use with C<>.
+ .tr \(*W-|\(bv\*(Tr
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .ie n \{\
+ .    ds -- \(*W-
+ .    ds PI pi
+ .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+ .    ds L" ""
+ .    ds R" ""
+ .    ds C` ""
+ .    ds C' ""
+ 'br\}
+ .el\{\
+ .    ds -- \|\(em\|
+ .    ds PI \(*p
+ .    ds L" ``
+ .    ds R" ''
+ 'br\}
+ .\"
+ .\" If the F register is turned on, we'll generate index entries on stderr for
+ .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+ .\" entries marked with X<> in POD.  Of course, you'll have to process the
+ .\" output yourself in some meaningful fashion.
+ .if \nF \{\
+ .    de IX
+ .    tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ .    nr % 0
+ .    rr F
+ .\}
+ .\"
+ .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+ .\" way too many mistakes in technical documents.
+ .hy 0
+ .if n .na
+ .\"
+ .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+ .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+ .    \" fudge factors for nroff and troff
+ .if n \{\
+ .    ds #H 0
+ .    ds #V .8m
+ .    ds #F .3m
+ .    ds #[ \f1
+ .    ds #] \fP
+ .\}
+ .if t \{\
+ .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ .    ds #V .6m
+ .    ds #F 0
+ .    ds #[ \&
+ .    ds #] \&
+ .\}
+ .    \" simple accents for nroff and troff
+ .if n \{\
+ .    ds ' \&
+ .    ds ` \&
+ .    ds ^ \&
+ .    ds , \&
+ .    ds ~ ~
+ .    ds /
+ .\}
+ .if t \{\
+ .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ .\}
+ .    \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ .    \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ .    \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ .    ds : e
+ .    ds 8 ss
+ .    ds o a
+ .    ds d- d\h'-1'\(ga
+ .    ds D- D\h'-1'\(hy
+ .    ds th \o'bp'
+ .    ds Th \o'LP'
+ .    ds ae ae
+ .    ds Ae AE
+ .\}
+ .rm #[ #] #H #V #F C
+ .\" ========================================================================
+ .\"
+ .IX Title "FASTJAR 1"
+ .TH FASTJAR 1 "2005-04-21" "gcc-4.0.0" "GNU"
+ .SH "NAME"
+ fastjar \- archive tool for Java archives
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ fastjar \fB\-ctxu\fR [\fB\s-1OPTIONS\s0\fR] [\fIjar-file\fR] [\fImanifest-file\fR] [\fB\-C\fR \fIdir\fR] \fIfiles\fR...
+ .SH "DESCRIPTION"
+ .IX Header "DESCRIPTION"
+ \&\f(CW\*(C`fastjar\*(C'\fR is an implementation of Sun's jar utility that comes with
+ the \s-1JDK\s0, written entirely in C, and runs in a fraction of the time while
+ being feature compatible.
+ .PP
+ If any file is a directory then it is processed recursively.  The
+ manifest file name and the archive file name needs to be specified in
+ the same order the \fB\-m\fR and \fB\-f\fR flags are specified.
+ .SH "OPTIONS"
+ .IX Header "OPTIONS"
+ Exactly one of the following actions must be specified:
+ .IP "\fB\-c\fR" 4
+ .IX Item "-c"
+ Create new archive.
+ .IP "\fB\-t\fR" 4
+ .IX Item "-t"
+ List table of contents for archive.
+ .IP "\fB\-x\fR" 4
+ .IX Item "-x"
+ Extract named (or all) files from archive.
+ .IP "\fB\-u\fR" 4
+ .IX Item "-u"
+ Update existing archive.
+ .PP
+ The following parameters are optional:
+ .IP "\fB\-@\fR" 4
+ .IX Item "-@"
+ Read the names of the files to add to the archive from stdin.  This
+ option is supported only in combination with \fB\-c\fR or \fB\-u\fR.
+ Non standard option added in the \s-1GCC\s0 version.
+ .IP "\fB\-C\fR \fIdirectory\fR" 4
+ .IX Item "-C directory"
+ Change to the \fIdirectory\fR and include the following file.
+ .IP "\fB\-E\fR" 4
+ .IX Item "-E"
+ Prevent fastjar from reading the content of a directory when specifying
+ one (and instead relying on the provided list of files to populate the
+ archive with regard to the directory entry). Non standard option added
+ in the \s-1GCC\s0 version.
+ .IP "\fB\-M\fR" 4
+ .IX Item "-M"
+ Do not create a manifest file for the entries.
+ .IP "\fB\-0\fR" 4
+ .IX Item "-0"
+ Store only; use no \s-1ZIP\s0 compression.
+ .IP "\fB\-V\fR" 4
+ .IX Item "-V"
+ .PD 0
+ .IP "\fB\-\-version\fR" 4
+ .IX Item "--version"
+ .PD
+ Display version information.
+ .IP "\fB\-f\fR \fIarchive\fR" 4
+ .IX Item "-f archive"
+ Specify archive file name.
+ .IP "\fB\-m\fR \fImanifest\fR" 4
+ .IX Item "-m manifest"
+ Include manifest information from specified \fImanifest\fR file.
+ .IP "\fB\-v\fR" 4
+ .IX Item "-v"
+ Generate verbose output on standard output.
+ .PP
+ All remaining options are considered to be names of files.
+ .SH "SEE ALSO"
+ .IX Header "SEE ALSO"
+ \&\fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgrepjar\fR\|(1)
+ and the Info entry for \fIgcj\fR.
+ .SH "COPYRIGHT"
+ .IX Header "COPYRIGHT"
+ Copyright (C) 2002 Matthias Klose
+ .PP
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the \s-1GNU\s0 General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version. A copy of the license is included in the
+ man page \fIgpl\fR\|(7).
diff -Nrcpad gcc-3.4.3/fastjar/fastjar.info gcc-4.0.0/fastjar/fastjar.info
*** gcc-3.4.3/fastjar/fastjar.info	Fri Nov  5 04:35:36 2004
--- gcc-4.0.0/fastjar/fastjar.info	Thu Apr 21 07:33:09 2005
***************
*** 1,5 ****
  This is fastjar.info, produced by makeinfo version 4.7 from
! /home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/fastjar/fastjar.texi.
  
  INFO-DIR-SECTION Programming
  START-INFO-DIR-ENTRY
--- 1,5 ----
  This is fastjar.info, produced by makeinfo version 4.7 from
! /scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/fastjar/fastjar.texi.
  
  INFO-DIR-SECTION Programming
  START-INFO-DIR-ENTRY
*************** END-INFO-DIR-ENTRY
*** 8,14 ****
  
  INFO-DIR-SECTION Individual utilities
  START-INFO-DIR-ENTRY
! * jar: (fastjar)Invoking jar.
                              An archive tool for Java archives
  * grepjar: (fastjar)Invoking grepjar.
                              Search files in a jar file for a pattern
--- 8,14 ----
  
  INFO-DIR-SECTION Individual utilities
  START-INFO-DIR-ENTRY
! * fastjar: (fastjar)Invoking fastjar.
                              An archive tool for Java archives
  * grepjar: (fastjar)Invoking grepjar.
                              Search files in a jar file for a pattern
*************** later version. A copy of the license is 
*** 23,46 ****
  entitled "GNU General Public License".
  
  
! File: fastjar.info,  Node: Top,  Next: Invoking jar,  Up: (dir)
  
  Introduction
  ************
  
! This manual describes how to use `jar' and `grepjar'.
  
  * Menu:
  
! * Invoking jar::	Options supported by `jar'
  * Invoking grepjar::    Options supported by `grepjar'
  * Copying::		The GNU General Public License
  
  
! File: fastjar.info,  Node: Invoking jar,  Next: Invoking grepjar,  Prev: Top,  Up: Top
  
! 1 Invoking jar
! **************
  
  `fastjar' is an implementation of Sun's jar utility that comes with the
  JDK, written entirely in C, and runs in a fraction of the time while
--- 23,46 ----
  entitled "GNU General Public License".
  
  
! File: fastjar.info,  Node: Top,  Next: Invoking fastjar,  Up: (dir)
  
  Introduction
  ************
  
! This manual describes how to use `fastjar' and `grepjar'.
  
  * Menu:
  
! * Invoking fastjar::	Options supported by `fastjar'
  * Invoking grepjar::    Options supported by `grepjar'
  * Copying::		The GNU General Public License
  
  
! File: fastjar.info,  Node: Invoking fastjar,  Next: Invoking grepjar,  Prev: Top,  Up: Top
  
! 1 Invoking fastjar
! ******************
  
  `fastjar' is an implementation of Sun's jar utility that comes with the
  JDK, written entirely in C, and runs in a fraction of the time while
*************** the same order the `-m' and `-f' flags a
*** 62,69 ****
       Extract named (or all) files from archive.
  
  `-u'
!      Update existing archive. This option is disabled due to bugs
!      (currently fails with exit status 1 and does nothing).
  
  
     The following parameters are optional:
--- 62,68 ----
       Extract named (or all) files from archive.
  
  `-u'
!      Update existing archive.
  
  
     The following parameters are optional:
*************** the same order the `-m' and `-f' flags a
*** 105,111 ****
     All remaining options are considered to be names of files.
  
  
! File: fastjar.info,  Node: Invoking grepjar,  Next: Copying,  Prev: Invoking jar,  Up: Top
  
  2 Invoking grepjar
  ******************
--- 104,110 ----
     All remaining options are considered to be names of files.
  
  
! File: fastjar.info,  Node: Invoking grepjar,  Next: Copying,  Prev: Invoking fastjar,  Up: Top
  
  2 Invoking grepjar
  ******************
*************** GNU Library General Public License inste
*** 503,511 ****
  
  
  Tag Table:
! Node: Top873
! Node: Invoking jar1175
! Node: Invoking grepjar2959
! Node: Copying3566
  
  End Tag Table
--- 502,510 ----
  
  
  Tag Table:
! Node: Top889
! Node: Invoking fastjar1207
! Node: Invoking grepjar2907
! Node: Copying3518
  
  End Tag Table
diff -Nrcpad gcc-3.4.3/fastjar/fastjar.texi gcc-4.0.0/fastjar/fastjar.texi
*** gcc-3.4.3/fastjar/fastjar.texi	Wed Aug 13 21:04:12 2003
--- gcc-4.0.0/fastjar/fastjar.texi	Fri Jul 23 23:34:13 2004
***************
*** 24,30 ****
  
  @dircategory Individual utilities
  @direntry
! * jar: (fastjar)Invoking jar.
                              An archive tool for Java archives
  * grepjar: (fastjar)Invoking grepjar.
                              Search files in a jar file for a pattern
--- 24,30 ----
  
  @dircategory Individual utilities
  @direntry
! * fastjar: (fastjar)Invoking fastjar.
                              An archive tool for Java archives
  * grepjar: (fastjar)Invoking grepjar.
                              Search files in a jar file for a pattern
*************** section entitled ``GNU General Public Li
*** 74,93 ****
  @node Top
  @top Introduction
  
! This manual describes how to use @command{jar} and @command{grepjar}.
  
  @menu
! * Invoking jar::	Options supported by @command{jar}
  * Invoking grepjar::    Options supported by @command{grepjar}
  * Copying::		The GNU General Public License
  @end menu
  
! @node Invoking jar
! @chapter Invoking jar
  
! @c man title jar archive tool for Java archives
  
! @c man begin DESCRIPTION jar
  
  @code{fastjar} is an implementation of Sun's jar utility that comes with
  the JDK, written entirely in C, and runs in a fraction of the time while
--- 74,93 ----
  @node Top
  @top Introduction
  
! This manual describes how to use @command{fastjar} and @command{grepjar}.
  
  @menu
! * Invoking fastjar::	Options supported by @command{fastjar}
  * Invoking grepjar::    Options supported by @command{grepjar}
  * Copying::		The GNU General Public License
  @end menu
  
! @node Invoking fastjar
! @chapter Invoking fastjar
  
! @c man title fastjar archive tool for Java archives
  
! @c man begin DESCRIPTION fastjar
  
  @code{fastjar} is an implementation of Sun's jar utility that comes with
  the JDK, written entirely in C, and runs in a fraction of the time while
*************** the same order the @option{-m} and @opti
*** 100,115 ****
  @c man end
  
  @ignore
! @c man begin SYNOPSIS jar
! jar @option{-ctxu} [@option{OPTIONS}] [@var{jar-file}] [@var{manifest-file}] [@option{-C} @var{dir}] @var{files}@dots{}
  @c man end
! @c man begin SEEALSO jar
  gcj(1), gij(1), grepjar(1)
  and the Info entry for @file{gcj}.
  @c man end
  @end ignore
  
! @c man begin OPTIONS jar
  
  Exactly one of the following actions must be specified:
  
--- 100,115 ----
  @c man end
  
  @ignore
! @c man begin SYNOPSIS fastjar
! fastjar @option{-ctxu} [@option{OPTIONS}] [@var{jar-file}] [@var{manifest-file}] [@option{-C} @var{dir}] @var{files}@dots{}
  @c man end
! @c man begin SEEALSO fastjar
  gcj(1), gij(1), grepjar(1)
  and the Info entry for @file{gcj}.
  @c man end
  @end ignore
  
! @c man begin OPTIONS fastjar
  
  Exactly one of the following actions must be specified:
  
*************** List table of contents for archive.
*** 125,132 ****
  Extract named (or all) files from archive.
  
  @item -u
! Update existing archive. This option is disabled due to bugs (currently
! fails with exit status 1 and does nothing).
  
  @end table
  
--- 125,131 ----
  Extract named (or all) files from archive.
  
  @item -u
! Update existing archive.
  
  @end table
  
*************** a pattern.
*** 190,196 ****
  grepjar [@option{-bcinsw}] @option{-e} @var{PATTERN} | @var{PATTERN} @var{files}@dots{}
  @c man end
  @c man begin SEEALSO grepjar
! jar(1), gcj(1), gij(1), gfdl(7) and the Info entry for @file{gcj}.
  @c man end
  @end ignore
  
--- 189,195 ----
  grepjar [@option{-bcinsw}] @option{-e} @var{PATTERN} | @var{PATTERN} @var{files}@dots{}
  @c man end
  @c man begin SEEALSO grepjar
! fastjar(1), gcj(1), gij(1), gfdl(7) and the Info entry for @file{gcj}.
  @c man end
  @end ignore
  
diff -Nrcpad gcc-3.4.3/fastjar/grepjar.1 gcc-4.0.0/fastjar/grepjar.1
*** gcc-3.4.3/fastjar/grepjar.1	Fri Nov  5 04:35:38 2004
--- gcc-4.0.0/fastjar/grepjar.1	Thu Apr 21 07:33:11 2005
***************
*** 129,135 ****
  .\" ========================================================================
  .\"
  .IX Title "GREPJAR 1"
! .TH GREPJAR 1 "2004-11-05" "gcc-3.4.3" "GNU"
  .SH "NAME"
  grepjar \- search files in a jar file for a pattern
  .SH "SYNOPSIS"
--- 129,135 ----
  .\" ========================================================================
  .\"
  .IX Title "GREPJAR 1"
! .TH GREPJAR 1 "2005-04-21" "gcc-4.0.0" "GNU"
  .SH "NAME"
  grepjar \- search files in a jar file for a pattern
  .SH "SYNOPSIS"
*************** Print help, then exit.
*** 174,180 ****
  Print version number, then exit.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIjar\fR\|(1), \fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgfdl\fR\|(7) and the Info entry for \fIgcj\fR.
  .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (C) 2002 Matthias Klose
--- 174,180 ----
  Print version number, then exit.
  .SH "SEE ALSO"
  .IX Header "SEE ALSO"
! \&\fIfastjar\fR\|(1), \fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgfdl\fR\|(7) and the Info entry for \fIgcj\fR.
  .SH "COPYRIGHT"
  .IX Header "COPYRIGHT"
  Copyright (C) 2002 Matthias Klose
diff -Nrcpad gcc-3.4.3/fastjar/jar.1 gcc-4.0.0/fastjar/jar.1
*** gcc-3.4.3/fastjar/jar.1	Fri Nov  5 04:35:38 2004
--- gcc-4.0.0/fastjar/jar.1	Thu Jan  1 00:00:00 1970
***************
*** 1,215 ****
- .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
- .\"
- .\" Standard preamble:
- .\" ========================================================================
- .de Sh \" Subsection heading
- .br
- .if t .Sp
- .ne 5
- .PP
- \fB\\$1\fR
- .PP
- ..
- .de Sp \" Vertical space (when we can't use .PP)
- .if t .sp .5v
- .if n .sp
- ..
- .de Vb \" Begin verbatim text
- .ft CW
- .nf
- .ne \\$1
- ..
- .de Ve \" End verbatim text
- .ft R
- .fi
- ..
- .\" Set up some character translations and predefined strings.  \*(-- will
- .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
- .\" double quote, and \*(R" will give a right double quote.  | will give a
- .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
- .\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
- .\" expand to `' in nroff, nothing in troff, for use with C<>.
- .tr \(*W-|\(bv\*(Tr
- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
- .ie n \{\
- .    ds -- \(*W-
- .    ds PI pi
- .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
- .    ds L" ""
- .    ds R" ""
- .    ds C` ""
- .    ds C' ""
- 'br\}
- .el\{\
- .    ds -- \|\(em\|
- .    ds PI \(*p
- .    ds L" ``
- .    ds R" ''
- 'br\}
- .\"
- .\" If the F register is turned on, we'll generate index entries on stderr for
- .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
- .\" entries marked with X<> in POD.  Of course, you'll have to process the
- .\" output yourself in some meaningful fashion.
- .if \nF \{\
- .    de IX
- .    tm Index:\\$1\t\\n%\t"\\$2"
- ..
- .    nr % 0
- .    rr F
- .\}
- .\"
- .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
- .\" way too many mistakes in technical documents.
- .hy 0
- .if n .na
- .\"
- .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
- .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
- .    \" fudge factors for nroff and troff
- .if n \{\
- .    ds #H 0
- .    ds #V .8m
- .    ds #F .3m
- .    ds #[ \f1
- .    ds #] \fP
- .\}
- .if t \{\
- .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
- .    ds #V .6m
- .    ds #F 0
- .    ds #[ \&
- .    ds #] \&
- .\}
- .    \" simple accents for nroff and troff
- .if n \{\
- .    ds ' \&
- .    ds ` \&
- .    ds ^ \&
- .    ds , \&
- .    ds ~ ~
- .    ds /
- .\}
- .if t \{\
- .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
- .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
- .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
- .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
- .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
- .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
- .\}
- .    \" troff and (daisy-wheel) nroff accents
- .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
- .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
- .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
- .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
- .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
- .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
- .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
- .ds ae a\h'-(\w'a'u*4/10)'e
- .ds Ae A\h'-(\w'A'u*4/10)'E
- .    \" corrections for vroff
- .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
- .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
- .    \" for low resolution devices (crt and lpr)
- .if \n(.H>23 .if \n(.V>19 \
- \{\
- .    ds : e
- .    ds 8 ss
- .    ds o a
- .    ds d- d\h'-1'\(ga
- .    ds D- D\h'-1'\(hy
- .    ds th \o'bp'
- .    ds Th \o'LP'
- .    ds ae ae
- .    ds Ae AE
- .\}
- .rm #[ #] #H #V #F C
- .\" ========================================================================
- .\"
- .IX Title "JAR 1"
- .TH JAR 1 "2004-11-05" "gcc-3.4.3" "GNU"
- .SH "NAME"
- jar \- archive tool for Java archives
- .SH "SYNOPSIS"
- .IX Header "SYNOPSIS"
- jar \fB\-ctxu\fR [\fB\s-1OPTIONS\s0\fR] [\fIjar-file\fR] [\fImanifest-file\fR] [\fB\-C\fR \fIdir\fR] \fIfiles\fR...
- .SH "DESCRIPTION"
- .IX Header "DESCRIPTION"
- \&\f(CW\*(C`fastjar\*(C'\fR is an implementation of Sun's jar utility that comes with
- the \s-1JDK\s0, written entirely in C, and runs in a fraction of the time while
- being feature compatible.
- .PP
- If any file is a directory then it is processed recursively.  The
- manifest file name and the archive file name needs to be specified in
- the same order the \fB\-m\fR and \fB\-f\fR flags are specified.
- .SH "OPTIONS"
- .IX Header "OPTIONS"
- Exactly one of the following actions must be specified:
- .IP "\fB\-c\fR" 4
- .IX Item "-c"
- Create new archive.
- .IP "\fB\-t\fR" 4
- .IX Item "-t"
- List table of contents for archive.
- .IP "\fB\-x\fR" 4
- .IX Item "-x"
- Extract named (or all) files from archive.
- .IP "\fB\-u\fR" 4
- .IX Item "-u"
- Update existing archive. This option is disabled due to bugs (currently
- fails with exit status 1 and does nothing).
- .PP
- The following parameters are optional:
- .IP "\fB\-@\fR" 4
- .IX Item "-@"
- Read the names of the files to add to the archive from stdin.  This
- option is supported only in combination with \fB\-c\fR or \fB\-u\fR.
- Non standard option added in the \s-1GCC\s0 version.
- .IP "\fB\-C\fR \fIdirectory\fR" 4
- .IX Item "-C directory"
- Change to the \fIdirectory\fR and include the following file.
- .IP "\fB\-E\fR" 4
- .IX Item "-E"
- Prevent fastjar from reading the content of a directory when specifying
- one (and instead relying on the provided list of files to populate the
- archive with regard to the directory entry). Non standard option added
- in the \s-1GCC\s0 version.
- .IP "\fB\-M\fR" 4
- .IX Item "-M"
- Do not create a manifest file for the entries.
- .IP "\fB\-0\fR" 4
- .IX Item "-0"
- Store only; use no \s-1ZIP\s0 compression.
- .IP "\fB\-V\fR" 4
- .IX Item "-V"
- .PD 0
- .IP "\fB\-\-version\fR" 4
- .IX Item "--version"
- .PD
- Display version information.
- .IP "\fB\-f\fR \fIarchive\fR" 4
- .IX Item "-f archive"
- Specify archive file name.
- .IP "\fB\-m\fR \fImanifest\fR" 4
- .IX Item "-m manifest"
- Include manifest information from specified \fImanifest\fR file.
- .IP "\fB\-v\fR" 4
- .IX Item "-v"
- Generate verbose output on standard output.
- .PP
- All remaining options are considered to be names of files.
- .SH "SEE ALSO"
- .IX Header "SEE ALSO"
- \&\fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgrepjar\fR\|(1)
- and the Info entry for \fIgcj\fR.
- .SH "COPYRIGHT"
- .IX Header "COPYRIGHT"
- Copyright (C) 2002 Matthias Klose
- .PP
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the \s-1GNU\s0 General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version. A copy of the license is included in the
- man page \fIgpl\fR\|(7).
--- 0 ----
diff -Nrcpad gcc-3.4.3/fastjar/jartool.c gcc-4.0.0/fastjar/jartool.c
*** gcc-3.4.3/fastjar/jartool.c	Wed Jan  7 18:46:04 2004
--- gcc-4.0.0/fastjar/jartool.c	Thu Sep 23 23:40:33 2004
***************
*** 1,6 ****
  /*
    jartool.c - main functions for fastjar utility
!   Copyright (C) 2002 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  Free Software Foundation
    Copyright (C) 1999, 2000, 2001  Bryan Burns
    
    This program is free software; you can redistribute it and/or
***************
*** 238,243 ****
--- 238,244 ----
  #include "dostime.h"
  #include "pushback.h"
  #include "compress.h"
+ #include "shift.h"
  
  /* Some systems have mkdir that takes a single argument.  */
  #ifdef MKDIR_TAKES_ONE_ARG
*************** void init_headers(void);
*** 273,287 ****
  int consume(pb_file *, int);
  int list_jar(int, char**, int);
  int extract_jar(int, char**, int);
! int add_file_to_jar(int, int, const char*, struct stat*);
! int add_to_jar(int, const char*);
! int add_to_jar_with_dir(int, const char*, const char*);
  int create_central_header(int);
! int make_manifest(int, const char*);
  static void init_args(char **, int);
  static char *get_next_arg (void);
  static char *jt_strdup (char*);
  static void expand_options (int *argcp, char ***argvp);
  
  /* global variables */
  ub1 file_header[30];
--- 274,291 ----
  int consume(pb_file *, int);
  int list_jar(int, char**, int);
  int extract_jar(int, char**, int);
! int add_file_to_jar(int, int, const char*, struct stat*, int);
! int add_to_jar(int, const char*, int);
! int add_to_jar_with_dir(int, const char*, const char*, int);
  int create_central_header(int);
! int make_manifest(int, const char*, int);
! int read_entries (int);
  static void init_args(char **, int);
  static char *get_next_arg (void);
  static char *jt_strdup (char*);
  static void expand_options (int *argcp, char ***argvp);
+ static struct zipentry *find_entry (const char *);
+ static int looks_like_dir (const char *);
  
  /* global variables */
  ub1 file_header[30];
*************** zipentry *ziptail; /* tail of the linked
*** 305,310 ****
--- 309,320 ----
  
  int number_of_entries; /* number of entries in the linked list */
  
+ /* What we go by. */
+ const char *progname;
+ 
+ /* The offset of the end of the last zip entry. */
+ ub4 end_of_entries;
+ 
  /* This is used to mark options with no short value.  */
  #define LONG_OPT(Num)  ((Num) + 128)
  
*************** int main(int argc, char **argv){
*** 340,345 ****
--- 350,357 ----
    int new_argc;
    char **new_argv;
  
+   progname = argv[0];
+ 
    do_compress = TRUE;
    verbose = FALSE;
    
*************** int main(int argc, char **argv){
*** 418,432 ****
    new_argv[new_argc] = NULL;
  
    if(action == ACTION_NONE){
!     fprintf(stderr, "One of options -{ctxu} must be specified.\n");
      usage(argv[0]);
    }
  
-   if(action == ACTION_UPDATE){
-     fprintf(stderr, "%s: `-u' mode unimplemented.\n", argv[0]);
-     exit(1);
-   }
- 
    /* Verify unsupported combinations and warn of the use of non
       standard features */
    if(verbose && use_explicit_list_only)
--- 430,440 ----
    new_argv[new_argc] = NULL;
  
    if(action == ACTION_NONE){
!     fprintf(stderr, "%s: one of options -{ctxu} must be specified.\n",
! 	    progname);
      usage(argv[0]);
    }
  
    /* Verify unsupported combinations and warn of the use of non
       standard features */
    if(verbose && use_explicit_list_only)
*************** int main(int argc, char **argv){
*** 435,441 ****
      fprintf (stderr, "Warning: using non standard '-@' option\n");
    if(read_names_from_stdin
        && (action != ACTION_CREATE && action != ACTION_UPDATE)){
!       fprintf(stderr, "Option '-@' is supported only with '-c' or '-u'.\n");
        usage(argv[0]);
    }
  
--- 443,450 ----
      fprintf (stderr, "Warning: using non standard '-@' option\n");
    if(read_names_from_stdin
        && (action != ACTION_CREATE && action != ACTION_UPDATE)){
!       fprintf(stderr, "%s: option '-@' is supported only with '-c' or '-u'.\n",
! 	      progname);
        usage(argv[0]);
    }
  
*************** int main(int argc, char **argv){
*** 445,452 ****
        jarfd = open(jarfile, O_CREAT | O_BINARY | O_WRONLY | O_TRUNC, 0666);
  
        if(jarfd < 0){
!         fprintf(stderr, "Error opening %s for writing!\n", jarfile);
!         perror(jarfile);
          exit(1);
        }
        
--- 454,461 ----
        jarfd = open(jarfile, O_CREAT | O_BINARY | O_WRONLY | O_TRUNC, 0666);
  
        if(jarfd < 0){
!         fprintf(stderr, "%s: error opening %s for writing: %s\n", progname,
! 		jarfile, strerror (errno));
          exit(1);
        }
        
*************** int main(int argc, char **argv){
*** 470,477 ****
        jarfd = open(jarfile, O_RDONLY | O_BINARY);
  
        if(jarfd < 0){
!         fprintf(stderr, "Error opening %s for reading!\n", jarfile);
!         perror(jarfile);
          exit(1);
        }
  
--- 479,486 ----
        jarfd = open(jarfile, O_RDONLY | O_BINARY);
  
        if(jarfd < 0){
!         fprintf(stderr, "%s: error opening %s for reading: %s\n", progname,
! 		jarfile, strerror (errno));
          exit(1);
        }
  
*************** int main(int argc, char **argv){
*** 484,511 ****
      }
    }
  
    if(action == ACTION_CREATE || action == ACTION_UPDATE){
      const char *arg;
      init_headers();
  
-    if((action == ACTION_UPDATE) && jarfile) {
-       if((jarfd = open(jarfile, O_RDWR | O_BINARY)) < 0) {
- 	fprintf(stderr, "Error opening %s for reading!\n", jarfile);
-         perror(jarfile);
-         exit(1);
-       }
-     }
- 
      if(do_compress)
        init_compression();
!   
  
      /* Add the META-INF/ directory and the manifest */
      if(manifest && mfile)
!       make_manifest(jarfd, mfile);
!     else if(manifest)
!       make_manifest(jarfd, NULL);
!     
      init_args (new_argv, 0);
      /* now we add the files to the archive */
      while ((arg = get_next_arg ())){
--- 493,543 ----
      }
    }
  
+   if (action == ACTION_UPDATE)
+     {
+       if (!jarfile)
+ 	{
+ 	  fprintf (stderr, "%s: `-u' mode requires a file name\n",
+ 		   argv[0]);
+ 	  exit (1);
+ 	}
+ 
+       if ((jarfd = open (jarfile, O_RDWR | O_BINARY)) < 0)
+ 	{
+ 	  fprintf (stderr, "Error opening %s for reading!\n", jarfile);
+ 	  perror (jarfile);
+ 	  exit (1);
+ 	}
+ 
+       /* Assert that jarfd is seekable. */
+       if (lseek (jarfd, 0, SEEK_CUR) == -1)
+ 	{
+ 	  fprintf (stderr, "%s: %s is not seekable\n", argv[0], jarfile);
+ 	  exit (1);
+ 	}
+ 
+       seekable = TRUE;
+     }
+ 
    if(action == ACTION_CREATE || action == ACTION_UPDATE){
      const char *arg;
      init_headers();
  
      if(do_compress)
        init_compression();
! 
!     if (action == ACTION_UPDATE)
!       {
! 	if (read_entries (jarfd))
! 	  exit (1);
!       }
  
      /* Add the META-INF/ directory and the manifest */
      if(manifest && mfile)
!       make_manifest(jarfd, mfile, action == ACTION_UPDATE);
!     else if(manifest && action == ACTION_CREATE)
!       make_manifest(jarfd, NULL, FALSE);
! 
      init_args (new_argv, 0);
      /* now we add the files to the archive */
      while ((arg = get_next_arg ())){
*************** int main(int argc, char **argv){
*** 514,530 ****
  	const char *dir_to_change = get_next_arg ();
  	const char *file_to_add = get_next_arg ();
          if (!dir_to_change || !file_to_add) {
!           fprintf(stderr, "Error: missing argument for -C.\n");
!           exit(1);
!         }
! 	if (add_to_jar_with_dir(jarfd, dir_to_change, file_to_add)) {
!           fprintf(stderr,
!                  "Error adding %s (in directory %s) to jar archive!\n",
!                  file_to_add, dir_to_change);
            exit(1);
          }
        } else {
!         if(add_to_jar(jarfd, arg)){
            fprintf(stderr, "Error adding %s to jar archive!\n", arg);
            exit(1);
          }
--- 546,564 ----
  	const char *dir_to_change = get_next_arg ();
  	const char *file_to_add = get_next_arg ();
          if (!dir_to_change || !file_to_add) {
!           fprintf(stderr, "%s: error: missing argument for -C.\n", progname);
            exit(1);
          }
+ 	if (add_to_jar_with_dir(jarfd, dir_to_change, file_to_add,
+ 				action == ACTION_UPDATE))
+ 	  {
+ 	    fprintf(stderr,
+ 		    "Error adding %s (in directory %s) to jar archive!\n",
+ 		    file_to_add, dir_to_change);
+ 	    exit(1);
+ 	  }
        } else {
!         if(add_to_jar(jarfd, arg, action == ACTION_UPDATE)){
            fprintf(stderr, "Error adding %s to jar archive!\n", arg);
            exit(1);
          }
*************** int main(int argc, char **argv){
*** 533,543 ****
      /* de-initialize the compression DS */
      if(do_compress)
        end_compression();
      
      create_central_header(jarfd);
!     
!     if (close(jarfd) != 0) {
!       fprintf(stderr, "Error closing jar archive!\n");
      }
    } else if(action == ACTION_LIST){
      list_jar(jarfd, &new_argv[0], new_argc);
--- 567,593 ----
      /* de-initialize the compression DS */
      if(do_compress)
        end_compression();
+ 
+     if (action == ACTION_UPDATE)
+       lseek (jarfd, end_of_entries, SEEK_SET);
      
      create_central_header(jarfd);
! 
! #if ! (HAVE_FTRUNCATE || HAVE__CHSIZE)
!   #error neither ftruncate() or _chsize() available
! #endif
!     /* Check if the file shrunk when we updated it. */
!     if (action == ACTION_UPDATE)
! #if HAVE_FTRUNCATE
!       ftruncate (jarfd, lseek (jarfd, 0, SEEK_CUR));
! #else
!       _chsize (jarfd, lseek (jarfd, 0, SEEK_CUR));
! #endif
! 
!     if (jarfd != STDIN_FILENO && close(jarfd) != 0) {
!       fprintf(stderr, "%s: error closing jar archive: %s\n",
! 	      progname, strerror (errno));
!       exit (1);
      }
    } else if(action == ACTION_LIST){
      list_jar(jarfd, &new_argv[0], new_argc);
*************** void add_entry(struct zipentry *ze){
*** 688,694 ****
    number_of_entries++;
  }
  
! int make_manifest(int jfd, const char *mf_name){
    time_t current_time;
    int nlen;   /* length of file name */
    int mod_time; /* file modification time */
--- 738,912 ----
    number_of_entries++;
  }
  
! static struct zipentry *
! find_entry (const char *fname)
! {
!   struct zipentry *ze;
! 
!   for (ze = ziptail; ze; ze = ze->next_entry)
!     {
!       if (!strcmp (ze->filename, fname))
! 	return ze;
!     }
!   return NULL;
! }
! 
! 
! static int
! looks_like_dir (const char *fname)
! {
!   struct zipentry *ze;
!   size_t len = strlen (fname);
! 
!   for (ze = ziptail; ze; ze = ze->next_entry)
!     {
!       if (strlen (ze->filename) > len
! 	  && !strncmp (fname, ze->filename, len)
! 	  && ze->filename[len] == '/')
! 	return 1;
!     }
!   return 0;
! }
! 
! 
! /*
!  * Read the zip entries of an existing file, building `ziplist' as we go.
!  */
! int read_entries (int fd)
! {
!   struct zipentry *ze;
!   ub1 intbuf[4];
!   ub1 header[46];
!   ub2 len;
!   ub2 count, i;
!   off_t offset;
! 
!   if (lseek (fd, -22, SEEK_END) == -1)
!     {
!       fprintf (stderr, "%s: %s: can't seek file\n", progname, jarfile);
!       return 1;
!     }
! 
!   if (read (fd, intbuf, 4) < 4)
!     {
!       perror (progname);
!       return 1;
!     }
!   /* Is there a zipfile comment? */
!   while (UNPACK_UB4(intbuf, 0) != 0x06054b50)
!     {
!       if (lseek (fd, -5, SEEK_CUR) == -1 ||
! 	  read (fd, intbuf, 4) != 4)
! 	{
! 	  fprintf (stderr, "%s: can't find end of central directory: %s\n",
! 		   progname, strerror (errno));
! 	  return 1;
! 	}
!     }
! 
!   /* Skip disk numbers. */
!   if (lseek (fd, 6, SEEK_CUR) == -1)
!     {
!       perror (progname);
!       return 1;
!     }
! 
!   /* Number of entries in the central directory. */
!   if (read (fd, intbuf, 2) != 2)
!     {
!       perror (progname);
!       return 1;
!     }
!   count = UNPACK_UB2(intbuf, 0);
! 
!   if (lseek (fd, 4, SEEK_CUR) == -1)
!     {
!       perror (progname);
!       return 1;
!     }
! 
!   /* Offset where the central directory begins. */
!   if (read (fd, intbuf, 4) != 4)
!     {
!       perror (progname);
!       return 1;
!     }
!   offset = UNPACK_UB4(intbuf, 0);
!   end_of_entries = offset;
! 
!   if (lseek (fd, offset, SEEK_SET) != offset)
!     {
!       perror (progname);
!       return 1;
!     }
! 
!   if (read (fd, header, 46) != 46)
!     {
!       fprintf (stderr, "%s: %s: unexpected end of file\n",
! 	       progname, jarfile);
!       return 1;
!     }
! 
!   for (i = 0; i < count; i++)
!     {
!       if (UNPACK_UB4(header, 0) != 0x02014b50)
! 	{
! 	  fprintf (stderr, "%s: can't find central directory header\n",
! 		   progname);
! 	  return 1;
! 	}
!       ze = (struct zipentry *) malloc (sizeof (struct zipentry));
!       if (!ze)
! 	{
! 	  perror (progname);
! 	  return 1;
! 	}
!       memset (ze, 0, sizeof (struct zipentry));
!       ze->flags = UNPACK_UB2(header, CEN_FLAGS);
!       ze->mod_time = UNPACK_UB2(header, CEN_MODTIME);
!       ze->mod_date = UNPACK_UB2(header, CEN_MODDATE);
!       ze->crc = UNPACK_UB4(header, CEN_CRC);
!       ze->usize = UNPACK_UB4(header, CEN_USIZE);
!       ze->csize = UNPACK_UB4(header, CEN_CSIZE);
!       ze->offset = UNPACK_UB4(header, CEN_OFFSET);
!       ze->compressed = (header[CEN_COMP] || header[CEN_COMP+1]);
!       len = UNPACK_UB2(header, CEN_FNLEN);
!       ze->filename = (char *) malloc ((len+1) * sizeof (char));
!       if (!ze->filename)
! 	{
! 	  perror (progname);
! 	  return 1;
! 	}
!       if (read (fd, ze->filename, len) != len)
! 	{
! 	  fprintf (stderr, "%s: %s: unexpected end of file\n",
! 		   progname, jarfile);
! 	  return 1;
! 	}
!       len = UNPACK_UB4(header, CEN_EFLEN);
!       len += UNPACK_UB4(header, CEN_COMLEN);
!       if (lseek (fd, len, SEEK_CUR) == -1)
! 	{
! 	  perror (progname);
! 	  return 1;
! 	}
!       add_entry (ze);
!       if (i < count - 1)
! 	{
! 	  if (read (fd, header, 46) != 46)
! 	    {
! 	      fprintf (stderr, "%s: %s: unexpected end of file\n",
! 		       progname, jarfile);
! 	      return 1;
! 	    }
! 	}
!     }
! 
!   lseek (fd, 0, SEEK_SET);
!   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 */
*************** int make_manifest(int jfd, const char *m
*** 812,818 ****
        exit(1);
      }
  
!     if(add_file_to_jar(jfd, mfd, "META-INF/MANIFEST.MF", &statbuf)){
        perror("error writing to jar");
        exit(1);
      }
--- 1030,1036 ----
        exit(1);
      }
  
!     if(add_file_to_jar(jfd, mfd, "META-INF/MANIFEST.MF", &statbuf, updating)){
        perror("error writing to jar");
        exit(1);
      }
*************** int make_manifest(int jfd, const char *m
*** 823,831 ****
  }
  
  /* Implements -C by wrapping add_to_jar.  new_dir is the directory 
!    to switch to. */
  int 
! add_to_jar_with_dir (int fd, const char* new_dir, const char* file)
  {
    int retval;
    char old_dir[MAXPATHLEN]; 
--- 1041,1056 ----
  }
  
  /* Implements -C by wrapping add_to_jar.  new_dir is the directory 
!    to switch to.
! 
!    `updating', if nonzero, will indicate that we are updating an
!    existing file, and will need to take special care. If set, we will
!    also expect that the linked list of zip entries will be filled in
!    with the jar file's current contents.
!  */
  int 
! add_to_jar_with_dir (int fd, const char* new_dir, const char* file,
! 		     const int updating)
  {
    int retval;
    char old_dir[MAXPATHLEN]; 
*************** add_to_jar_with_dir (int fd, const char*
*** 837,843 ****
      perror(new_dir);
      return 1;
    }
!   retval=add_to_jar(fd, file);
    if (chdir(old_dir) == -1) {
      perror(old_dir);
      return 1;
--- 1062,1068 ----
      perror(new_dir);
      return 1;
    }
!   retval=add_to_jar(fd, file, updating);
    if (chdir(old_dir) == -1) {
      perror(old_dir);
      return 1;
*************** add_to_jar_with_dir (int fd, const char*
*** 846,856 ****
  }
  
  int 
! add_to_jar (int fd, const char *file) {
    struct stat statbuf;
    DIR *dir;
    struct dirent *de;
    zipentry *ze;
    int stat_return;
  
    /* This is a quick compatibility fix -- Simon Weijgers <simon@weijgers.com> 
--- 1071,1083 ----
  }
  
  int 
! add_to_jar (int fd, const char *file, const int updating)
! {
    struct stat statbuf;
    DIR *dir;
    struct dirent *de;
    zipentry *ze;
+   zipentry *existing = NULL;
    int stat_return;
  
    /* This is a quick compatibility fix -- Simon Weijgers <simon@weijgers.com> 
*************** add_to_jar (int fd, const char *file) {
*** 917,925 ****
      PACK_UB2(file_header, LOC_FNLEN, nlen);
      PACK_UB4(file_header, LOC_MODTIME, mod_time);
  
-     if(verbose)
-       printf("adding: %s (in=%d) (out=%d) (stored 0%%)\n", fullname, 0, 0);
- 
      ze = (zipentry*)malloc(sizeof(zipentry));
      if(ze == NULL){
        perror("malloc");
--- 1144,1149 ----
*************** add_to_jar (int fd, const char *file) {
*** 936,945 ****
      ze->mod_date = (ub2)((mod_time & 0xffff0000) >> 16);
      ze->compressed = FALSE;
  
!     add_entry(ze);
  
!     write(fd, file_header, 30);
!     write(fd, fullname, nlen);
  
      while(!use_explicit_list_only && (de = readdir(dir)) != NULL){
        if(de->d_name[0] == '.')
--- 1160,1195 ----
      ze->mod_date = (ub2)((mod_time & 0xffff0000) >> 16);
      ze->compressed = FALSE;
  
!     if (updating)
!       {
! 	if ((existing = find_entry (ze->filename)) != NULL)
! 	  {
! 	    if (existing->usize != 0)
! 	      {
! 		/* XXX overwriting non-directory with directory? */
! 		fprintf (stderr, "%s: %s: can't overwrite non-directory with directory\n",
! 			 progname, fullname);
! 		return 1;
! 	      }
! 	  }
! 	if (lseek (fd, end_of_entries, SEEK_SET) == -1)
! 	  {
! 	    fprintf (stderr, "%s %d\n", __FILE__, __LINE__);
! 	    perror ("lseek");
! 	    return 1;
! 	  }
!       }
  
!     if (!existing)
!       {
! 	add_entry (ze);
! 	write (fd, file_header, 30);
! 	write (fd, fullname, nlen);
! 	end_of_entries = lseek (fd, 0, SEEK_CUR);
! 
! 	if (verbose)
! 	  printf ("adding: %s (in=%d) (out=%d) (stored 0%%)\n", fullname, 0, 0);
!       }
  
      while(!use_explicit_list_only && (de = readdir(dir)) != NULL){
        if(de->d_name[0] == '.')
*************** add_to_jar (int fd, const char *file) {
*** 953,959 ****
  
        strcpy(t_ptr, de->d_name);
  
!       if (add_to_jar(fd, fullname)) {
          fprintf(stderr, "Error adding file to jar!\n");
          return 1;
        }
--- 1203,1209 ----
  
        strcpy(t_ptr, de->d_name);
  
!       if (add_to_jar(fd, fullname, updating)) {
          fprintf(stderr, "Error adding file to jar!\n");
          return 1;
        }
*************** add_to_jar (int fd, const char *file) {
*** 971,977 ****
        return 1;
      }
      
!     if(add_file_to_jar(fd, add_fd, file, &statbuf)){
        fprintf(stderr, "Error adding file to jar!\n");
        return 1;
      }
--- 1221,1227 ----
        return 1;
      }
      
!     if(add_file_to_jar(fd, add_fd, file, &statbuf, updating)){
        fprintf(stderr, "Error adding file to jar!\n");
        return 1;
      }
*************** add_to_jar (int fd, const char *file) {
*** 982,989 ****
    return 0;
  }
  
! int add_file_to_jar(int jfd, int ffd, const char *fname, struct stat *statbuf){
! 
    unsigned short file_name_length;
    unsigned long mod_time;
    ub1 rd_buff[RDSZ];
--- 1232,1240 ----
    return 0;
  }
  
! int add_file_to_jar(int jfd, int ffd, const char *fname, struct stat *statbuf,
! 		    const int updating)
! {
    unsigned short file_name_length;
    unsigned long mod_time;
    ub1 rd_buff[RDSZ];
*************** int add_file_to_jar(int jfd, int ffd, co
*** 991,996 ****
--- 1242,1259 ----
    off_t offset = 0;
    int rdamt;
    struct zipentry *ze;
+   struct zipentry *existing = NULL;
+ 
+   if (updating)
+     {
+       existing = find_entry (fname);
+       if (existing && looks_like_dir (fname))
+ 	{
+ 	  fprintf (stderr, "%s: %s is a directory in the archive\n",
+ 		   progname, fname);
+ 	  return 1;
+ 	}
+     }
  
    mod_time = unix2dostime(&(statbuf->st_mtime));
    file_name_length = strlen(fname);
*************** int add_file_to_jar(int jfd, int ffd, co
*** 1045,1057 ****
  
    ze->csize = statbuf->st_size;
    ze->usize = ze->csize;
!   ze->offset = lseek(jfd, 0, SEEK_CUR);
    if(do_compress)
      ze->compressed = TRUE;
    else
      ze->compressed = FALSE;
!   
!   add_entry(ze);
    
    /* Write the local header */
    write(jfd, file_header, 30);
--- 1308,1336 ----
  
    ze->csize = statbuf->st_size;
    ze->usize = ze->csize;
! 
!   if (existing)
!     ze->offset = existing->offset;
!   else if (updating)
!     ze->offset = end_of_entries;
!   else
!     ze->offset = lseek(jfd, 0, SEEK_CUR);
! 
    if(do_compress)
      ze->compressed = TRUE;
    else
      ze->compressed = FALSE;
! 
!   if (!existing)
!     add_entry(ze);
!   if (updating && lseek (jfd, ze->offset, SEEK_SET) < 0)
!     {
!       perror ("lseek");
!       return 1;
!     }
! 
!   /* We can safely write the header here, since it will be the same size
!      as before */
    
    /* Write the local header */
    write(jfd, file_header, 30);
*************** int add_file_to_jar(int jfd, int ffd, co
*** 1061,1074 ****
  
  
    if(verbose){
!     printf("adding: %s ", fname);
      fflush(stdout);
    }
   
    if(do_compress){
      /* compress the file */
!     compress_file(ffd, jfd, ze);
    } else {
      /* Write the contents of the file (uncompressed) to the zip file */
      /* calculate the CRC as we go along */
      ze->crc = crc32(0L, Z_NULL, 0); 
--- 1340,1370 ----
  
  
    if(verbose){
!     if (existing)
!       printf ("updating: %s ", fname);
!     else
!       printf("adding: %s ", fname);
      fflush(stdout);
    }
   
    if(do_compress){
      /* compress the file */
!     compress_file(ffd, jfd, ze, existing);
    } else {
+     /* If we are not writing the last entry, make space for it. */
+     if (existing && existing->next_entry)
+       {
+ 	if (ze->usize > existing->usize)
+ 	  {
+ 	    if (shift_down (jfd, existing->next_entry->offset,
+ 			    ze->usize - existing->usize, existing->next_entry))
+ 	      {
+ 		fprintf (stderr, "%s: %s\n", progname, strerror (errno));
+ 		return 1;
+ 	      }
+ 	  }
+       }
+ 
      /* Write the contents of the file (uncompressed) to the zip file */
      /* calculate the CRC as we go along */
      ze->crc = crc32(0L, Z_NULL, 0); 
*************** int add_file_to_jar(int jfd, int ffd, co
*** 1112,1123 ****
--- 1408,1449 ----
      /* Sun's jar tool will only allow a data descriptor if the entry is
         compressed, but we'll save 16 bytes/entry if we only use it when
         we can't seek back on the file */
+     /* Technically, you CAN'T have a data descriptor unless the data
+        part has an obvious end, which DEFLATED does. Otherwise, there
+        would not be any way to determine where the data descriptor is.
+        Store an uncompressed file that ends with 0x504b0708, and see.
+        -- csm */
      
      if(write(jfd, data_descriptor, 16) != 16){
        perror("write");
        return 0;
      }
    }
+ 
+   if (existing)
+     {
+       int dd = (existing->flags & (1 << 3)) ? 12 : 0;
+       if (existing->next_entry && ze->csize < existing->csize + dd)
+ 	{
+ 	  if (shift_up (jfd, existing->next_entry->offset,
+ 			existing->csize + dd - ze->csize,
+ 			existing->next_entry))
+ 	    {
+ 	      perror (progname);
+ 	      return 1;
+ 	    }
+ 	}
+       /* Replace the existing entry data with this entry's. */
+       existing->csize = ze->csize;
+       existing->usize = ze->usize;
+       existing->crc = ze->crc;
+       existing->mod_time = ze->mod_time;
+       existing->mod_date = ze->mod_date;
+       free (ze->filename);
+       free (ze);
+     }
+   else if (updating)
+     end_of_entries = lseek (jfd, 0, SEEK_CUR);
    
    if(verbose)
      printf("(in=%d) (out=%d) (%s %d%%)\n", 
*************** int extract_jar(int fd, char **files, in
*** 1479,1486 ****
        exit(1);
      }
  
      if(method == 8 || flags & 0x0008){
-         consume(&pbf, eflen);
        
        inflate_file(&pbf, f_fd, &ze);
      } else {
--- 1805,1814 ----
        exit(1);
      }
  
+     if (eflen > 0)
+       consume(&pbf, eflen);
+ 
      if(method == 8 || flags & 0x0008){
        
        inflate_file(&pbf, f_fd, &ze);
      } else {
*************** int extract_jar(int fd, char **files, in
*** 1513,1520 ****
          printf("%d bytes written\n", out_a);
  #endif
        }
- 
-         consume(&pbf, eflen);
      }
  
      /* if there is a data descriptor left, compare the CRC */
--- 1841,1846 ----
*************** void version ()
*** 1890,1896 ****
  {
    printf("jar (%s) %s\n\n", PACKAGE, VERSION);
    printf("Copyright 1999, 2000, 2001  Bryan Burns\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");
--- 2216,2222 ----
  {
    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");
diff -Nrcpad gcc-3.4.3/fastjar/jartool.h gcc-4.0.0/fastjar/jartool.h
*** gcc-3.4.3/fastjar/jartool.h	Wed Jul  7 03:16:28 2004
--- gcc-4.0.0/fastjar/jartool.h	Tue Jul  6 21:40:08 2004
***************
*** 52,57 ****
--- 52,61 ----
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   */
  
+ #ifndef __FASTJAR_JARTOOL_H__
+ #define __FASTJAR_JARTOOL_H__
+ 
+ #include <sys/types.h>
  #include "config.h"
  
  #define ACTION_NONE 0
*************** struct zipentry {
*** 104,112 ****
--- 108,119 ----
    ub4 usize;
    ub4 offset;
    ub1 compressed;
+   ub2 flags;
    char *filename;
    
    struct zipentry *next_entry;
  };
  
  typedef struct zipentry zipentry;
+ 
+ #endif /* __FASTJAR_JARTOOL_H__ */
diff -Nrcpad gcc-3.4.3/fastjar/shift.c gcc-4.0.0/fastjar/shift.c
*** gcc-3.4.3/fastjar/shift.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fastjar/shift.c	Tue Jul  6 21:40:08 2004
***************
*** 0 ****
--- 1,166 ----
+ /* shift.c -- utilities to move regions of data in a file.
+    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 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 02111-1307,
+ USA.  */
+ 
+ 
+ #include <sys/types.h>
+ #include <unistd.h>
+ #include <stdio.h>
+ #include "jartool.h"
+ #include "shift.h"
+ 
+ #define BUFFER_SIZE 1024
+ 
+ #define MIN(a, b) ((a) < (b) ? (a) : (b))
+ 
+ /*
+  * Shift the contents of a file up by `amount' bytes, starting at `begin'.
+  * The file is not truncated, data from `amount' to `begin - amount' is
+  * overwritten. The current file pointer of `fd' is preserved. Note that
+  * this might be past the new "end" of the file.
+  *
+  * If this function is passed a `struct zipentry', then all `offset'
+  * fields from that entry down the list that are greater than or equal
+  * to `begin' will be decreased by `amount'.
+  * 
+  * fd     - The file descriptor.
+  * begin  - The offset of the first byte that should be shifted.
+  * amount - The number of bytes to shift by.
+  * ze     - A pointer into a list of zip entries that should be updated
+  *          to reflect the modified offset.
+  */
+ int
+ shift_up (int fd, off_t begin, off_t amount, struct zipentry *ze)
+ {
+   extern off_t end_of_entries;
+   int len, moved = 0;
+   ub1 buffer[BUFFER_SIZE];
+   off_t where, end, save;
+ 
+   if (amount <= 0)
+     return 0;
+ 
+   if ((save = lseek (fd, 0, SEEK_CUR)) == -1)
+     return 1;
+   if ((end = lseek (fd, 0, SEEK_END)) == -1)
+     return 1;
+   if (end < begin)
+     return 0;
+ 
+   where = begin;
+ 
+   do
+     {
+       if (lseek (fd, where, SEEK_SET) < 0)
+ 	return 1;
+       if ((len = read (fd, buffer, BUFFER_SIZE)) < 0)
+ 	return 1;
+       if (len == 0)
+ 	break;
+       if (lseek (fd, where - amount, SEEK_SET) < 0)
+ 	return 1;
+       if (write (fd, buffer, len) < 0)
+ 	return 1;
+       where += len;
+     }
+   while (where < end);
+ 
+   for (; ze; ze = ze->next_entry)
+     {
+       if (ze->offset >= begin)
+ 	{
+ 	  ze->offset -= amount;
+ 	  moved = 1;
+ 	}
+     }
+   if (moved)
+     end_of_entries -= amount;
+ 
+   if (lseek (fd, save, SEEK_SET) == -1)
+     return 1;
+   return 0;
+ }
+ 
+ /*
+  * Shift the contents of this file down by `amount' bytes, extending the
+  * end of file, starting at `begin'. This function will preserve the
+  * current file pointer of `fd'. Naturally, this function will fail if
+  * `fd' is not seekable.
+  *
+  * If this function is passed a `struct zipentry', then all `offset'
+  * fields from that entry down the list that are greater than or equal
+  * to `begin' will be increased by `amount'.
+  *
+  * fd     - The file descriptor.
+  * begin  - The offset of the first byte that should be shifted.
+  * amount - The number of bytes to shift by.
+  * ze     - A pointer into a list of zip entries that should be updated
+  *          to reflect the modified offset.
+  */
+ int
+ shift_down (int fd, off_t begin, off_t amount, struct zipentry *ze)
+ {
+   extern off_t end_of_entries;
+   int off, len, moved = 0;
+   ub1 buffer[BUFFER_SIZE];
+   off_t where, save;
+ 
+   if (amount <= 0)
+     return 0;
+ 
+   if ((save = lseek (fd, 0, SEEK_CUR)) == -1)
+     return 1;
+   if ((where = lseek (fd, 0, SEEK_END)) == -1)
+     return 1;
+   if (where < begin)
+     return 0;
+   off = (where - begin) % BUFFER_SIZE;
+   if (off == 0)
+     where -= BUFFER_SIZE;
+   else
+     where -= off;
+ 
+   do
+     {
+       if (lseek (fd, where, SEEK_SET) < 0)
+ 	return 1;
+       if ((len = read (fd, buffer, BUFFER_SIZE)) < 0)
+ 	return 1;
+       if (lseek (fd, where + amount, SEEK_SET) < 0)
+ 	return 1;
+       if (write (fd, buffer, len) < 0)
+ 	return 1;
+       where -= BUFFER_SIZE;
+     }
+   while (where >= begin);
+ 
+   for (; ze; ze = ze->next_entry)
+     {
+       if (ze->offset >= begin)
+ 	{
+ 	  ze->offset += amount;
+ 	  moved = 1;
+ 	}
+     }
+   if (moved)
+     end_of_entries += amount;
+ 
+   if (lseek (fd, save, SEEK_SET) == -1)
+     return 1;
+ 
+   return 0;
+ }
diff -Nrcpad gcc-3.4.3/fastjar/shift.h gcc-4.0.0/fastjar/shift.h
*** gcc-3.4.3/fastjar/shift.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/fastjar/shift.h	Tue Jul  6 21:40:08 2004
***************
*** 0 ****
--- 1,29 ----
+ /* shift.h -- utilities to move regions of data in a file.
+    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 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 02111-1307,
+ USA.  */
+ 
+ 
+ #ifndef __FASTJAR_SHIFT_H__
+ #define __FASTJAR_SHIFT_H__
+ 
+ #include <sys/types.h>
+ #include "jartool.h"
+ 
+ int shift_down (int, off_t, off_t, struct zipentry *);
+ int shift_up (int, off_t, off_t, struct zipentry *);
+ 
+ #endif /* __FASTJAR_SHIFT_H__ */
diff -Nrcpad gcc-3.4.3/fastjar/zipfile.h gcc-4.0.0/fastjar/zipfile.h
*** gcc-3.4.3/fastjar/zipfile.h	Sat Dec  9 03:08:23 2000
--- gcc-4.0.0/fastjar/zipfile.h	Tue Jul  6 21:40:08 2004
***************
*** 47,52 ****
--- 47,53 ----
  #define LOC_FNLEN   26 /* filename length */
  #define LOC_EFLEN   28 /* extra-field length */
  
+ #define CEN_FLAGS    8
  #define CEN_COMP    10 /* compression method */
  #define CEN_MODTIME 12
  #define CEN_MODDATE 14
diff -Nrcpad gcc-3.4.3/gcc/java/ChangeLog gcc-4.0.0/gcc/java/ChangeLog
*** gcc-3.4.3/gcc/java/ChangeLog	Fri Nov  5 03:34:01 2004
--- gcc-4.0.0/gcc/java/ChangeLog	Thu Apr 21 05:18:47 2005
***************
*** 1,72 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-05-20  H.J. Lu  <hongjiu.lu@intel.com>
  
! 	PR java/14315
! 	Backport from mainline:
  
! 	2004-03-23  Tom Tromey  <tromey@redhat.com>
  
! 	* jcf-write.c (make_class_file_name): Don't report if mkdir
! 	failed with EEXIST.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
! 2004-04-12  Michael Chastain  <mec.gnu@mindspring.com>
  
! 	PR bootstrap/14893:
  	* Make-lang.in (java.install-man): Install from either build
  	tree or source tree, whichever has the file first.
  
  2004-03-23  Tom Tromey  <tromey@redhat.com>
  
  	* gcj.texi (Extensions): Document GCJ_PROPERTIES.
  
! 2004-03-06  Roger Sayle  <roger@eyesopen.com>
  
  	* jcf-parse.c (java_parse_file): Handle the case that input_filename
  	is NULL.
  
  2004-02-26  Andrew Haley  <aph@redhat.com>
  
  	* parse.y (check_interface_throws_clauses): Check for
  	!METHOD_INVISIBLE (iface_method).
  	* class.c (layout_class_methods): Check for CLASS_INTERFACE as
  	well as CLASS_ABSTRACT.
- 	
- 2004-02-22  Matthias Klose  <doko@debian.org>
  
! 	Taken from mainline:
  
! 	2004-02-13  Geoffrey Keating  <geoffk@apple.com>
  
  	* Make-lang.in: Install man pages under the same names
  	(possibly transformed) as the program they document.
  
! 	2004-02-16  Geoffrey Keating  <geoffk@apple.com>
  
! 	* Make-lang.in (java.install-man): Add extra dependencies.
  
! 2004-02-07  Kazu Hirata  <kazu@cs.umass.edu>
  
! 	* typeck.c: Update copyright.
  
  2004-02-05  Kelley Cook  <kcook@gcc.gnu.org>
  
  	Make-lang.in (po-generated):  Delete.
  
  2004-01-30  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Make-lang.in (doc/gcj.dvi): Use $(abs_docdir).
--- 1,2495 ----
! 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>
  
! 	* gcj.texi (Invoking gij): Add descriptions of new -X options.
! 	Mention recognized-and-ignored compatibility options.
! 	(Memory allocation): Add descriptions of JvMalloc, JvRealloc and
! 	JvFree.
! 	(About CNI): Add Memory allocation section.
  
! 2005-04-01  Tom Tromey  <tromey@redhat.com>
  
! 	* decl.c (java_init_decl_processing): Fix types of
! 	_Jv_MonitorEnter, _Jv_MonitorExit, _Jv_AllocObject,
! 	_Jv_AllocObjectNoFinalizer, _Jv_Throw, _Jv_NewPrimArray,
! 	_Jv_JNI_PopSystemFrame, _Jv_divI, _Jv_remI, _Jv_divJ, _Jv_remJ.
  
! 2005-03-24  Anthony Green  <green@redhat.com>
  
! 	* gcj.texi (Invoking gcj-dbtool): Document new LIBDIR option to
! 	'gcj-dbtool -p'.
  
! 2005-03-18  Andrew Haley  <aph@redhat.com>
  
! 	PR java/20522
! 	* decl.c (update_aliases): Don't update variables that are about
! 	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
! 	can_widen_reference_to if the C++ ABI is in use.
! 	(vfy_get_interface_count, vfy_get_interface): Remove unused functions.
! 	* verify-impl.c (debug_print, make_utf8_const, init_type, copy_type,
! 	type_isresolved, init_state, set_pc, state_get_pc,
! 	_Jv_BytecodeVerifier): Clean up unused and disabled functions.
! 	(verify_fail): Report the current PC from the verifier context.
! 	(free_state): Remove #if 0 block to enable this function.
! 	(free_verifier_context): Call free_state on state_list iterator
! 	values before freeing them.
! 	* expr.c (pop_type_0): Pop correct type for error message when stack
! 	contains a multi-word type.
! 
! 2005-03-07  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	* expr.c (build_java_array_length_access): Remove !flag_new_verifier
! 	for known NULL array length access.
! 
! 2005-03-07  Tom Tromey  <tromey@redhat.com>
! 
! 	* gcj.texi (Invoking gcj-dbtool): Document '-f'.
! 
! 2005-03-04  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/18362
! 	* class.c (set_method_index): Don't set method_index if it is
! 	NULL_TREE.
! 	(layout_class_method): Don't complain about "non-static method foo
! 	overrides static method" in the case of indirect dispatch.
! 
! 2005-02-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
! 
! 	PR libgcj/16923
! 	* gcj.texi (Invocation): Add descriptions of JvVMInitArgs and
! 	JvVMOption.
! 
! 2005-02-22  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/20056:
! 	* verify-impl.c (EITHER): New define.
! 	(types_compatible): Handle it.
! 	(check_field_constant): Use it.
! 
! 2005-02-18  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/20056:
! 	* verify-impl.c (types_equal): Fixed test.
! 
! 	PR java/20056:
! 	* verify-glue.c (vfy_class_has_field): New function.
! 	* verify.h (vfy_class_has_field): Declare.
! 	* verify-impl.c (check_field_constant): Added 'putfield'
! 	argument.
! 	(verify_instructions_0): Updated.
! 	(types_equal): New function.
! 
! 2005-02-14  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/19921:
! 	* jcf-write.c (generate_bytecode_insns) <CALL_EXPR>: Note the
! 	stack effect of multianewarray.
! 
! 2005-02-14  Andrew Haley  <aph@redhat.com>
! 
! 	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,
! 	parse-scan.y: Update copyright.
! 
! 2005-02-11  Per Bothner  <per@bothner.com>
! 
! 	PR java/15543
! 	* parse-scan.y (input_location): Remove variable.
! 	(main_input_filename): New - replaces input_filename, which isn't
! 	settable if USE_MAPPED_LOCATION.
! 	* lex.c (java_init_lex): Wrap some more places in #ifndef JC1-LITE,
! 	so we don't reference input_location or wfl_operator in that case.
! 	* jv-scan.c (expand_location): Remove - no longer used.
! 	(main): Set main_input_filename rather than input_filename.
! 
! 2005-02-09  Richard Henderson  <rth@redhat.com>
! 
! 	* builtins.c (initialize_builtins): Call build_common_builtin_nodes.
! 	* decl.c (java_init_decl_processing): Initialize const_ptr_type_node.
! 
! 2005-02-08  Marcin Dalecki  <martin@dalecki.de>
! 
! 	* expr.c (add_type_assertion): Use the proper enumeration type,
! 	since this is what htab_find_slot() is expecting.
! 
! 2005-02-06  Joseph S. Myers  <joseph@codesourcery.com>
! 
! 	* gcj.texi: Update copyright dates.
! 
! 2005-02-02  Tom Tromey  <tromey@redhat.com>
! 
! 	* gcj.texi (libgcj Runtime Properties): Default library_control
! 	to 'cache'.
! 
! 2005-02-02  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	PR java/15543
! 	* parse-scan.y (formal_parameter): Use $2 (type) instead of $$
! 	(modifiers) when square brackets are present in a declaration for
! 	a final paramter.
! 	* jv-scan.c (main): Set input_filename and input_line.
! 
! 2005-02-01  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/19742:
! 	* gjavah.c (get_field_name): Don't override name for JNI header.
! 
! 2005-02-01  Roger Sayle  <roger@eyesopen.com>
! 
! 	* jcf-write.c (generate_bytecode_insns): Implement RSHIFT_EXPR
! 	of unsigned types using iushr and lushr JVM bytecodes.
! 
! 2005-02-01  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	PR java/19738
! 	* gjavah.c (jni_print_float): Do not emit floating-point
! 	initialiser for a static final field.
! 	(jni_print_double): Likewise.
! 
! 2005-02-01  Mark Mitchell  <mark@codesourcery.com>
! 
! 	Revert:
! 	2005-01-31  Mark Mitchell  <mark@codesourcery.com>
! 	* gjavah.c (print_field_info): Mark static data members of
! 	floating-point type with "__extension__".
! 
! 2005-01-31  Mark Mitchell  <mark@codesourcery.com>
! 
! 	* gjavah.c (print_field_info): Mark static data members of
! 	floating-point type with "__extension__".
! 
! 2005-02-01  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	PR java/9157
! 	* parse.y (build_string_concatenation): Remove redundant if.
! 	(patch_conditional_expr): Attempt to patch_string() the condition
! 	of a ?: as well, in addition to its other operands.
! 
! 2005-01-25  Tom Tromey  <tromey@redhat.com>
! 
! 	* Make-lang.in (java/java-tree-inline.o): Removed.
! 
! 2005-01-25  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	PR java/19070
! 	* parse.y (patch_binop): Allow comparisons against NULL only
! 	if the other operand is of a reference type.
! 
! 2005-01-24  Tom Tromey  <tromey@redhat.com>
! 
! 	* java-tree.h (gcj_abi_version): Declare.
! 	* class.c (make_class_data): Push gcj_abi_version into "next"
! 	field.  Renamed field.
! 	* decl.c (gcj_abi_version): New global.
! 	(parse_version): New function.
! 	(java_init_decl_processing): Call it.  Renamed 'next' field.
! 	Include version.h.
! 	(GCJ_BINARYCOMPAT_ADDITION): New define.
! 
! 2005-01-24  Roger Sayle  <roger@eyesopen.com>
! 
! 	PR java/19295
! 	* jcf-write.c (generate_bytecode_insns): Conversions between
! 	integer types of the same precision shouldn't generate widening
! 	or narrowing conversion bytecodes.
! 
! 2005-01-22  Kazu Hirata  <kazu@cs.umass.edu>
! 
! 	* java-except.h, java-tree.h: Remove unused prototypes.
! 
! 2005-01-20  Andrew Pinski  <pinskia@gcc.gnu.org>
! 
! 	PR java/18091:
! 	* jcf-write.c (perform_relocations): Don't call memcpy if source
! 	and destination are the same.
! 
! 2005-01-17  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify-impl.c (get_short): Sign extend.
! 	(get_int): Likewise.
! 
! 2005-01-12  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	* expr.c (build_jni_stub): Replace mistaken use of TYPE_SIZE_UNIT
! 	with TYPE_SIZE.
! 
! 2005-01-10  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	* verify.c: Revert to the version before the BC-ABI merge.
! 
! 2005-01-10  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	PR java/19277
! 	* check-init.c (check_init): Take care of references that do not
! 	have an explicit final variable declaration (e.g. array length
! 	access) for pre/post in/de-crement operators.
! 
! 2005-01-08  Mark Wielaard  <mark@klomp.org>
! 
! 	* parse.y (process_imports): Allocate (and free) original_name only
! 	when not already defined.
! 	* jcf-parse.c (read_class): Free results of find_class() and
! 	lrealpath().
! 	(java_parse_file): Keep pointer to head of file_list and free when
! 	done. Free result of lrealpath().
! 
! 2005-01-05  Tom Tromey  <tromey@redhat.com>
! 
! 	* gcj.texi (Standard Properties): java.ext.dirs is now used.
! 
! 2004-12-20  Andrew Haley  <aph@redhat.com>
! 
! 	* typeck.c: Use fold_convert for ints and booleans.
! 
! 2004-12-17  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/18931
! 	* typeck.c (convert): Use a CONVERT_EXPR when converting to
! 	BOOLEAN_TYPE or CHAR_TYPE.
! 	(convert_to_boolean, convert_to_char) : Remove.
! 	* 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
! 	* class.c (emit_register_classes): Use TARGET_USE_JCR_SECTION.
! 	Update comment.
! 
! 2004-12-07  Andrew Haley  <aph@redhat.com>
! 
! 	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.
! 	(java.uninstall): Likewise.
! 	(java.maintainer-clean): Likewise.
! 	(.INTERMEDIATE): Likewise.
! 	(java.install-man): Likewise.
! 	(gcj-dbtool.pod): New target.
! 	* gcj.texi (Code Generation): Document -findirect-dispatch.
! 	(libgcj Runtime Properties): Document
! 	gnu.gcj.precompiled.db.path.
! 	(Top): Link to "Invoking gcj-dbtool".
! 
! 2004-12-06  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/14853:
! 	* java-tree.h (extract_field_decl): Declare.
! 	* parse.y (extract_field_decl): Renamed from
! 	strip_out_static_field_access_decl.  No longer static.
! 	* check-init.c (get_variable_decl): Unwrap COMPOUND_EXPRs.
! 
! 2004-12-03  Tom Tromey  <tromey@redhat.com>
! 
! 	* lang.c (flag_new_verifier): Define.
! 	(java_post_options): Set flag_new_verifier if indirect dispatch
! 	is being used.
! 	* lang.opt (fnew-verifier): Removed.
! 
! 2004-12-03  Tom Tromey  <tromey@redhat.com>
! 
! 	PR bootstrap/14614:
! 	* Make-lang.in (java.install-common): Only install transformed
! 	gcjh if gcj-cross exists.
! 
! 2004-12-03  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/18812
! 	* except.c (link_handler): Patch 'outer' field of siblings of the
! 	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.
! 
! 2004-12-02  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/16675:
! 	* parse.y (craft_constructor): Special case null_pointer_node.
! 
! 2004-12-02  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/18741:
! 	* java-gimplify.c (java_gimplify_expr): Don't call
! 	SET_EXPR_LOCATION unless wrapped tree is an expression.
! 
! 2004-11-27  Per Bothner  <per@bothner.com>
! 
! 	* jcf-parse.c (set_source_filename):  Improvement to Andrew's fix:
! 	Fix fencepost error in 'i', which got executed one too many times.
! 	Also, fold memcpy into explicit loop, as originally intended.
! 	Also, free temporary 'buf' which otherwise leaks.
! 
! 2004-11-27  Per Bothner  <per@bothner.com>
! 
! 	* expr.c (build_expr_wfl): Only declare last_file and last_filenode
! 	local static variables if not USE_MAPPED_LOCATION.
! 
! 2004-11-27  Kazu Hirata  <kazu@cs.umass.edu>
! 
! 	* class.c, decl.c, expr.c: Fix comment typos.
! 
! 2004-11-26  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	PR java/18305
! 	* decl.c (end_java_method): Call
! 	attach_init_test_initialization_flags on all the init_decls.
! 	* parse.y (attach_init_test_initialization_flags): Move to ...
! 	* expr.c (attach_init_test_initialization_flags): here and
! 	support BIND_EXPR also.
! 	* java-tree.h (attach_init_test_initialization_flags): Prototype.
! 	* jcf-parse.c (parse_class_file): Don't disable class init
! 	optimization.
! 
! 2004-11-25  Joseph S. Myers  <joseph@codesourcery.com>
! 
! 	* gjavah.c, jcf-dump.c, jv-scan.c, jvspec.c: Avoid ` as left quote
! 	in diagnostics.
! 
! 2004-11-24  Richard Henderson  <rth@redhat.com>
! 
! 	* verify-glue.c (vfy_init_name, vfy_clinit_name, vfy_object_type,
! 	vfy_string_type, vfy_throwable_type): Use ANSI declaration form.
! 
! 2004-11-24  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify.c (defer_merging): Don't use C++-style comment.
! 	* verify.h (java_opcode): Added java_opcode_end.
! 	* class.c (build_class_ref): Remove C++ comment and old FIXME.
! 
! 	* verify-impl.c (vfy_push_type): Removed bogus "return".
! 	(initialize_stack): Use vfy_alloc and vfy_free.
! 	(verify_instructions_0): Likewise.
! 
! 	* Merged gcj-abi-2-dev-branch to trunk.
! 
! 2004-11-24  Andrew Haley  <aph@redhat.com>
! 
! 	* jcf-parse.c (parse_class_file): Set file_start_location.
! 
! 2004-11-10  Tom Tromey  <tromey@redhat.com>
! 
! 	* class.c (make_field_value): Don't call build_static_field_ref.
! 	(build_static_field_ref): Don't emit direct references when using
! 	indirect dispatch.
! 
! 	* gcj.texi (Invoking gij): Document -verbose.  Put -verbose and
! 	-verbose:class into man page synopsis.
! 
! 2004-11-09  Tom Tromey  <tromey@redhat.com>
! 
! 	* expr.c (build_java_arraystore_check): Still generate check if
! 	element type is itself an array.
! 
! 2004-11-08  Tom Tromey  <tromey@redhat.com>
! 
! 	* java-tree.h (soft_check_assignment_node): Removed.
! 	(enum java_tree_index): Removed JTI_SOFT_CHECK_ASSIGNMENT_NODE.
! 	* decl.c (java_init_decl_processing): Don't initialize
! 	soft_check_assignment_node.
! 
! 2004-11-05  Tom Tromey  <tromey@redhat.com>
! 
! 	* class.c (layout_class_methods): Don't add Miranda methods when
! 	using indirect dispatch.
! 
! 2004-11-05  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* class.c (make_class_data): Call emit_assertion_table to set the
! 	'assertion_table' field.
! 	(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'.
! 	* expr.c (type_assertion_eq): Compare 'assertion_code' field.
! 	(type_assertion_hash): Include 'assertion_code' in hash.
! 	(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.
! 	(ASSERTION_TYPES_COMPATIBLE, ASSERTION_IS_INSTANTIABLE): New. Type
! 	assertion code definitions.
! 	(struct type_assertion): Add assertion_code. Rename 'source_type' and
! 	'target_type' to 'op1' and 'op2'.
! 	(add_type_assertion): Declare.
! 	(lang_printable_name_wls): Remove unused definition.
! 	* verify-glue.c: (vfy_is_assignable_from): New. Call add_type_assertion
! 	to emit runtime assertion.
! 	(vfy_note_stack_type): Clean up non-C90 declarations.
! 	(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.
! 
! 2004-11-04  Tom Tromey  <tromey@redhat.com>
! 
! 	* class.c (build_static_field_ref): Reverted previous patch.
! 
! 	* class.c (build_static_field_ref): Don't emit direct references
! 	when using indirect dispatch.
! 
! 2004-11-03  Tom Tromey  <tromey@redhat.com>
! 
! 	* expr.c (expand_java_arrayload): Set lhs_type_node.
! 	(expand_java_arraystore): Set rhs_type_node.
! 
! 2004-11-02  Tom Tromey  <tromey@redhat.com>
! 
! 	* jcf-parse.c (compute_class_name): Use filename length from zip
! 	directory, not strlen.
! 
! 	* expr.c (expand_invoke): Mark new interface methods as abstract.
! 
! 2004-11-01  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify-impl.c (push_jump): Removed check for uninitialized
! 	objects.
! 	(push_exception_jump): Likewise.
! 	(handle_ret_insn): Likewise.
! 	(handle_jsr_insn): Likewise.
! 	(state_check_no_uninitialized_objects): Removed.
! 
! 	* decl.c (check_local_unnamed_variable): Recognize
! 	promoted-to-int parameters when using the new verifier.
! 	* expr.c (expand_java_arraystore): Explicitly request array type
! 	when using new verifier.
! 	(expand_java_arrayload): Likewise.
! 	(invoke_build_dtable): Don't pass object_type_node as
! 	expression argument to build_java_indirect_ref.
! 	(build_java_check_indexed_type): Do nothing.
! 	(build_java_arraystore_check): Handle case where array doesn't
! 	have array type.
! 	(build_java_array_length_access): Likewise.
! 	(expand_invoke): Handle case where interface overrides a method
! 	from Object.
! 	(pop_type_0): Always succeed for reference types.
! 	(process_jvm_instruction): Don't pop a value in a dead
! 	exception handler.
! 	(pop_arguments): Convert arguments to correct types.
! 
! 2004-10-29  Andrew Haley  <aph@redhat.com>
! 
! 	* jcf-parse.c (give_name_to_class): Remove line that was
! 	incorrectly merged.
! 
! 2004-10-29  Andrew Haley  <aph@redhat.com>
! 
! 	* jcf-parse.c (set_source_filename): Add code to build new sfname.
! 
! 2004-10-20  Andrew Haley  <aph@redhat.com>
! 
! 	* decl.c (end_java_method): Don't expand if flag_syntax_only.
! 
! 2004-10-26  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify.h (vfy_notify_verified): Removed.
! 	* verify-glue.c (vfy_notify_verified): Removed.
! 
! 2004-10-26  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify-impl.c (debug_print_state): Declare `i' before code.
! 	(merge_types): Modify `t' when it is null_type.
! 
! 2004-10-26  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify-impl.c (type_print): Renamed from print.  Now static and
! 	takes an argument.
! 	(debug_print_state): Use type_print.
! 
! 2004-10-25  Tom Tromey  <tromey@redhat.com>
! 
! 	* expr.c (build_invokeinterface): Compute correct offset for
! 	index into interface methods.
! 
! 2004-10-20  Tom Tromey  <tromey@redhat.com>
! 
! 	* java-tree.h (verify_jvm_instructions_new): Declare.
! 
! 	* jvspec.c (jvgenmain_spec): Remove -fnew-verifier from cc1
! 	command line.
! 
! 	* verify-impl.c (verify_instructions): Correctly handle wide
! 	types on the stack.
! 	* verify-glue.c (vfy_get_class_name): Use DECL_NAME.
! 	(vfy_get_component_type): Strip pointer types.
! 	(vfy_find_class): Use get_type_from_signature.  Strip pointer
! 	types.
! 	Include java-except.h.
! 
! 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>
! 
! 	* verify-impl.c (merge_refs): Compare reference against iterator,
! 	not ref2.
! 
! 	* verify-glue.c (vfy_tag): Mask off resolved flag.
! 
! 2004-10-19  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify-impl.c (verify_instructions): Call vfy_note_local_type.
! 	(init_state_with_stack): Initialize `this_type' in state.
! 	(verify_method): Use debug_print.
! 	* verify-glue.c (vfy_is_primitive): Removed debugging print.
! 	(vfy_note_stack_depth): Reverted last patch.
! 	(vfy_note_stack_type): Note pointer to Object, not Object.
! 	(vfy_note_local_type): Likewise.
! 
! 	* verify.h (vfy_note_instruction_seen): Declare.
! 	* verify-glue.c (verify_jvm_instructions_new): Set
! 	BCODE_EXCEPTION_TARGET on target instruction.
! 	(vfy_note_instruction_seen): New function.
! 	* verify-impl.c (FLAG_INSN_SEEN): New define.
! 	(verify_instructions_0): Set flag on instruction.  Save state for
! 	PC=0 later.
! 	(verify_instructions): Call vfy_note_instruction_seen.
! 
! 	* verify-glue.c (vfy_note_stack_depth): Fix off-by-one error.
! 	(verify_jvm_instructions_new): Call method_init_exceptions,
! 	add_handler, and handle_nested_ranges.
! 	* verify-impl.c (verify_method): Return 1 on success.
! 	(verify_instructions_0): Save the state at PC=0.
! 
! 	* verify-impl.c (init_type_from_class): Set is_resolved and
! 	ref_next on new ref_intersection.
! 	(init_type_from_string): Likewise.
! 
! 2004-10-15  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* expr.c (expand_bytecode): Use verify_jvm_instructions_new
! 	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.
! 	(types_compatible): For the BC-ABI, always consider reference types
! 	compatible.
! 	(check_class_constant): Use vfr->current_class.
! 	(check_constant): Likewise.
! 	(check_wide_constant): Likewise.
! 	(check_field_constant): Check for 'L' at start of type name.
! 	(get_one_type): Return pointer instead of type. Set type result in
! 	caller via passed type pointer.
! 	(compute_argument_types): Update to use new get_one_type arguments.
! 	(compute_return_type): Likewise.
! 	(make_verifier_context): New. Allocate and initialize 'vfr'.
! 	(free_verifier_context): New. Free 'vfr' and its contents.
! 	(verify_method): Remove ATTRIBUTE_UNUSED. Call make_verifier_context
! 	and free_verifier_context.
! 
! 2004-10-15  Tom Tromey  <tromey@redhat.com>
! 
! 	* verify-glue.c (vfy_note_local_type): Mark argument as unused.
! 	* verify.h (vfy_fail): Fixed formatting.
! 
! 	* verify-impl.c (vfr): Fixed comment formatting.
! 	(collapse_type): New function.
! 	(verify_instructions): Notify compiler about type map.
! 	* verify.h (vfy_note_stack_depth): Updated.
! 	(vfy_note_stack_type): Likewise.
! 	(vfy_note_local_type): Likewise.
! 	(vfy_unsuitable_type, vfy_return_address_type, vfy_null_type):
! 	Declare.
! 	* verify-glue.c (vfy_note_stack_depth): Correctly size type
! 	state.  Added `method' argument.
! 	(vfy_note_stack_type): Renamed from vfy_note_type.  Added `method'
! 	argument.
! 	(vfy_note_local_type): New function.
! 	(vfy_unsuitable_type): Likewise.
! 	(vfy_return_address_type): Likewise.
! 	(vfy_null_type): Likewise.
! 
! 	* verify.h (VFY_IN_GCC): Removed.
! 	(VFY_WANT_TYPEMAP): Removed.
! 	* verify-impl.c (verify_instructions_0): Removed useless "\".
! 	(struct state) <next>: Uncomment.
! 
! 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>
! 
! 	* Make-lang.in (verify.o): Re-enabled this target.
! 	* verify-glue.c (vfy_get_interface_count): Add ATTRIBUTE_UNUSED.
! 	(vfy_get_interface): Likewise.
! 	(verify_jvm_instructions_new): Renamed from verify_jvm_instructions.
! 	* verify.h (verify_jvm_instructions_new): Declare.
! 	* verify-impl.c (free_state): Temporarily comment out unused
! 	function.
! 
! 2004-10-06  Tom Tromey  <tromey@redhat.com>
! 
! 	* java-tree.h (JV_STATE_READ): New enum value.
! 
! 2004-10-06  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* verify.h: New file.
! 
! 2004-10-05  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* verify-impl.c, verify-glue.c, verify.h: New files.
! 	* Make-lang.in: Add rules for verify-impl.o and verify-glue.o.
! 
! 2004-09-24  Andrew Haley  <aph@redhat.com>
! 
! 	* decl.c (check_local_unnamed_variable): Always use the PARM_DECL
! 	for a slot if it's of pointer type.
! 
! 2004-09-14  Tom Tromey  <tromey@redhat.com>
! 
! 	* class.c (make_class_data): Correctly initialize "state" field.
! 	Initialize "engine" field.
! 	* decl.c (java_init_decl_processing): Add "engine" field.
! 
! 2004-09-10  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/12760
! 	* expr.c (build_invokeinterface): Use fast method for interface
! 	dispatch.
! 	* java-tree.h (enum java_tree_index): Add JTI_ITABLE_TYPE,
! 	JTI_ITABLE_PTR_TYPE.
! 	(struct lang_type): Add  itable_methods, itable_decl, itable_syms_decl.
! 	(emit_symbol_table): Add new arg, element_size.
! 	* decl.c (java_init_decl_processing): Initialize Class.itable.
! 	* class.c (GEN_TABLE): New macro.
! 	(gen_indirect_dispatch_tables): Use it.  Add itable.
! 	(make_class_data): Add new arg for emit_symbol_table().
! 	Emit itable.
! 	(add_miranda_methods): Make sure search_class has been parsed.
! 	(emit_symbol_table): Add new arg, element_size.
! 
! 2004-09-06  Andrew Haley  <aph@redhat.com>
! 
! 	* verify.c (merge_types): Return Object for all merges of
! 	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.
! 
! 	* lang.c (java_post_options): Force flag_verify_invocations if
! 	we're not using indirect dispatch.
! 
! 	* expr.c (pop_type_0): Move test for interfaces before call to
! 	can_widen_reference_to().
! 	(build_signature_for_libgcj): Remove generation of canonical array
! 	type.
! 	(add_type_assertion): Canonicalize both arrays.
! 	Don't assert that type X can be assigned to Object.
! 	Don't assert that type X an be assigned to type X.
! 	Don't assert that Object can be assigned to type X.
! 	(can_widen_reference_to): Warn whenever we generate an assertion.
! 	(process_jvm_instruction): Use throwable_type_node for the type of
! 	an exception class.
! 
! 2004-09-01  Andrew Haley  <aph@redhat.com>
! 
! 	* decl.c (java_init_decl_processing): Change
! 	verify_identifier_node to "__verify".
! 	* expr.c (add_type_assertion): Use verify_identifier_node for name.
! 	* java-tree.h (verify_identifier_node): Change to "__verify".
! 
! 	* expr.c (build_signature_for_libgcj): New function.
! 	(add_type_assertion): Use it to construct signatures for
! 	source_type and target_type.
! 
! 2004-08-27  Andrew Haley  <aph@redhat.com>
! 
! 	* java-tree.h (enum java_tree_index): Add JTI_VERIFY_IDENTIFIER_NODE.
! 	(verify_identifier_node): New.
! 	(TYPE_VERIFY_METHOD): New.
! 	(struct type_assertion): New type.
! 	* expr.c (type_assertion_eq): New function.
! 	(type_assertion_hash): New function.
! 	(add_type_assertion): New function.
! 	(can_widen_reference_to): Call add_type_assertion().
! 	* decl.c (java_init_decl_processing): Add verify_identifier_node.
! 	* class.c (make_class_data): Initialize TYPE_VERIFY_METHOD (type).
! 	(finish_class): Output TYPE_VERIFY_METHOD (type).
! 
! 	* decl.c (end_java_method): Nullify unused fields.
! 
! 2004-08-17  Andrew Haley  <aph@redhat.com>
! 
! 	* verify.c (defer_merging): Quieten.
! 	* jcf-parse.c (load_class): Only try to open a class file if it's
! 	java.lang.Object or if it's part of the current compilation.
! 	Check that the class we just tried to load is the class we just
! 	loaded.  Quieten.
! 	(java_parse_file): Set flag_verify_invocations off if we're
! 	compiling from .class.
! 	(parse_zip_file_entries): Abort if we try to read a dummy class.
! 	* expr.c (can_widen_reference_to): Quieten.
! 	(build_invokevirtual): Abort if we try to invokevirtual an
! 	interface.
! 	(expand_invoke): Don't build a non-interface call to an interface.
! 	(build_instanceof): Don't do premature optimization if
! 	flag_verify_invocations is not set.
! 	* class.c (set_super_info): Disable code that inherits TYPE_DUMMY
! 	from superclass.
! 	(build_static_field_ref): Add correct type conversion for
! 	field_address.
! 	(add_miranda_methods): Disable generation of Miranda methods for
! 	dummy classes.
! 	(layout_class_method): Don't complain about non-static method
! 	overrides static method with dummy classes.
! 
! 2004-08-13  Tom Tromey  <tromey@redhat.com>
! 
! 	* class.c (build_static_field_ref): Re-enable atable lookups for
! 	static fields.
! 
! 	* parse.y (strip_out_static_field_access_decl): Indentation fix.
! 
! 2004-08-11  Tom Tromey  <tromey@redhat.com>
! 
! 	* gcj.texi (libgcj Runtime Properties): Document new properties.
! 
! 2004-08-06  Andrew Haley  <aph@redhat.com>
! 
! 	* jcf-parse.c (load_class): Check that we really have loaded the
! 	class we're looking for.
! 
! 2004-07-19  Andrew Haley  <aph@redhat.com>
! 
! 	* verify.c (verify_jvm_instructions): Comment change only.
! 
! 	* typeck.c (build_java_array_type): Add size field to array name.
! 
! 	* java-tree.h (LOCAL_SLOT_P): New.
! 	(update_aliases): Add PC argument.
! 	(pushdecl_function_level): New function.
! 
! 	* java-gimplify.c (java_gimplify_expr): Handle VAR_DECL,
! 	MODIFY_EXPR, and SAVE_EXPR.
! 	(java_gimplify_modify_expr): New function.
! 
! 	* expr.c (push_type_0): Call find_stack_slot() to create temporary.
! 	(expand_iinc): Pass PC to update_aliases().
! 	(STORE_INTERNAL): Likewise.
! 	(process_jvm_instruction): Likewise.
! 
! 	* decl.c (base_decl_map): New variable.
! 	(uniq): New variable.
! 	(update_aliases): Rewrite with more thorough checking.
! 	(debug_variable_p): New function.
! 	(push_jvm_slot): Don't initialize local variable.  Don't pushdecl.
! 	(check_local_named_variable): Delete whole function.
! 	(initialize_local_variable): New function.
! 	(check_local_unnamed_variable): Add checks and comments.
! 	(find_local_variable): Rewrite.
! 	(java_replace_reference): New function.
! 	(function_binding_level): New variable.
! 	(pushdecl_function_level): New function.
! 	(maybe_pushlevels): Set DECL_LOCAL_END_PC.
! 	(maybe_pushlevels): Call pushdecl() on each of the new decls.
! 	(start_java_method): Reset uniq.  Create base_decl_map.  Set
! 	function_binding_level.
! 	(end_java_method): Null unused fields to save memory.
! 
! 2004-06-29  Andrew Haley  <aph@redhat.com>
! 
! 	* except.c (expand_start_java_handler): Push a new binding level.
! 	Don't build a TRY_CATCH_EXPR now, we'll do it later.  Call
! 	register_exception_range() to register where we'll do it.
! 	(expand_end_java_handler): Remove old bogus code.  Replace with
! 	new logic that simply builds TRY_CATCH_EXPRs and inserts them at
! 	the top of the expression we're curently building.
! 	(maybe_end_try): Delete.
! 	* decl.c (binding_level.exception_range): New field.
! 	(clear_binding_level): Add field exception_range.  Reformat.
! 	(poplevel): Call expand_end_java_handler().
! 	(poplevel): Call java_add_stmt only if functionbody is false.
! 	(maybe_poplevels): Don't call maybe_end_try() from here.
! 	(end_java_method): Clear no longer used trees in function decl.
! 	(register_exception_range): New function.
! 	* java-tree.h (register_exception_range, struct eh_range): Declare.
! 
! 2004-06-22  Andrew Haley  <aph@redhat.com>
! 
! 	* class.c (gen_indirect_dispatch_tables): Set the DECL_OWNER of
! 	the otable.
! 	* check-init.c (get_variable_decl): Teach check-init about
! 	FIELD_DECLs addressed via the otable.
! 	* jcf-parse.c (load_class): Check CLASS_LOADED_P, not
! 	CLASS_PARSED_P.
! 
! 2004-05-28  Andrew Haley  <aph@redhat.com>
! 
! 	* jcf-parse.c (load_class): Don't try to read a class that we've
! 	already read.
! 
! 	* expr.c (build_invokeinterface): Use the old-fashioned way of
! 	doing indirect dispatch: look up interfaces by name.
! 	* java-tree.h (enum java_tree_index): Add
! 	JTI_SOFT_LOOKUPINTERFACEMETHODBYNAME_NODE
! 	* decl.c (java_init_decl_processing): Add
! 	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
! 	dispatch, even if a method is final.
! 
! 2004-05-25  Andrew Haley  <aph@redhat.com>
! 
! 	* 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>
! 
! 	* Merged with HEAD as of 20040514. Diff against
! 	gcj-abi-2-merge-20040514.
! 
! 2004-04-16  Andrew Haley  <aph@redhat.com>
! 
! 	* verify.c (check_pending_block): Disable subroutine checks.
! 	(defer_merging): New function.
! 	(merge_types): If types are dummy, use defer_merging to combine them.
! 	(verify_jvm_instructions): If invocation is invokeinterface and
! 	target is dummy, assume target really is an interface.
! 
! 	* parse.y (patch_invoke): Break out call to java_create_object.
! 
! 	* lang.c (flag_verify_invocations): New.
! 
! 	* jcf-parse.c (load_class): If we've already failed to load a
! 	class, don't try again.
! 	(load_class): If we can't find a .class file, don't fail, but emit
! 	a warning.
! 	(parse_class_file): Don't act on dummy methods.
! 
! 	* java-tree.h (flag_verify_invocations): New.
! 	(TYPE_DUMMY): New.
! 	(lang_type.dummy_class): New field.
! 	(java_create_object): New function.
! 	(METHOD_DUMMY): New.
! 
! 	* expr.c (build_field_ref): Widen field offset.
! 	(pop_type_0): If the type in stack_type_map is a TREE_LIST, check
! 	that each of its elements is compatible with the one we're
! 	popping.
! 	(pop_type_0): Issue a warning to say that we need to generate a
! 	runtime check.
! 	(java_create_object): New function.
! 	(build_field_ref): Only generate hard refs if we're not using
! 	indirect dispatch.
! 	(expand_java_field_op): If we're using !verify_invocations and we
! 	see a missing field, generate a decl for it.
! 
! 	(expand_invoke): If a class doesn't have the method we seek and
! 	we're using !flag_verify_invocations, generate a decl for the
! 	method now.
! 
! 	(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
! 	generate a runtime check.
! 
! 	* class.c (set_super_info): Inherit TYPE_DUMMY from sureclass.
! 	(make_method_value): Also use index for interfaces.
! 	(make_class_data): Skip dummy field for inherited data.
! 	Don't build method array for dummy methods.
! 	Set size_in_byte to -1 when using inirect dispatch
! 	Don't build a hard class ref if we don't have a hard ref to our
! 	superclass, or if we're using inirect dispatch.
! 	Null out dispatch tables.
! 
! 	(layout_class_method): Don't complain about non-static method
! 	overrides static method is method is artificial.
! 
! 	(build_static_field_ref): Disable atable references to static
! 	fields for the time being.
! 
! 	(layout_class_methods): Check for CLASS_INTERFACE as
! 	well as CLASS_ABSTRACT.
! 
! 2004-11-24  Steven Bosscher  <stevenb@suse.de>
! 
! 	* class.c (make_class_data): Don't check flag_inline_functions.
! 	* lang.c (flag_really_inline): Remove unused flag.
! 	(java_handle_option): Don't set it here.  Remove special handling
! 	of flag_inline_functions for Java.
! 	(java_init): Don't set flag_inline_trees here.  Already done...
! 	(java_post_options): ...here.  Don't clear flag_inline_functions.
! 
! 2004-11-24  Steven Bosscher  <stevenb@suse.de>
! 
! 	* java-gimplify.c (java_gimplify_labeled_block_expr): New function.
! 	(java_gimplify_exit_block_expr): New function.
! 	(java_gimplify_expr): Use them to gimplify EXIT_BLOCK_EXPR and
! 	LABELED_BLOCK_EXPR.
! 	* java-tree.def (LABELED_BLOCK_EXPR): Moved from tree.def.
! 	(EXIT_BLOCK_EXPR): Likewise.
! 	* java-tree.h (LABELED_BLOCK_LABEL): Moved from tree.h.
! 	(LABELED_BLOCK_BODY): Likewise.
! 	(EXIT_BLOCK_LABELED_BLOCK): Likewise.
! 	* jcf-write.c (generate_bytecode_insns): Don't handle the unused
! 	EXIT_BLOCK_RETURN operand.  Use EXIT_BLOCK_LABELED_BLOCK instead of
! 	TREE_OPERAND.
! 	* lang.c (java_tree_inlining_walk_subtrees): Handle EXIT_BLOCK_EXPR.
! 	(java_dump_tree): Use LABELED_BLOCK_LABEL, LABELED_BLOCK_BODY, and
! 	EXIT_BLOCK_LABELED_BLOCK instead of TREE_OPERAND.  Don't handle the
! 	second operand of EXIT_BLOCK_EXPR.
! 	* parse.y (find_expr_with_wfl): Use LABELED_BLOCK_BODY instead of
! 	TREE_OPERAND.
! 	(build_bc_statement): Use build1 to build EXIT_BLOCK_EXPR nodes.
! 
! 2004-11-23  Ben Elliston  <bje@au.ibm.com>
! 
! 	* xref.h (xref_flag_value): Remove.
! 	(xref_set_data, xref_get_data): Likewise.
! 	(xref_set_current_fp): Likewise.
! 	(XREF_NONE): Likewise.
! 	(XREF_GET_DATA): Likewise.
! 	* xref.c (xref_flag_value): Remove.
! 	(xref_set_data, xref_get_data): Likewise.
! 	(xref_set_current_fp): Likewise.
! 
! 2004-11-23  Ben Elliston  <bje@au.ibm.com>
! 
! 	* gjavah.c (output_directory): Make static.
! 	(temp_directory): Likewise.
! 	
! 2004-11-15  Tom Tromey  <tromey@redhat.com>
! 
! 	* decl.c (instn_ptr_type_node): Removed.
! 	(lineNumbers_ptr_type_node): Removed.
! 	(jint_type): Removed.
! 	(jint_ptr_type): Removed.
! 
! 2004-11-09  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	PR java/15576
! 	* check-init.c (check_init): Ignore DECL_EXPR.
! 	* expr.c (always_initialize_class_p): Reenable.
! 	(build_class_init): Use a variable to store the decl.  Also use
! 	boolean_false_node instead of integer_zero_node.
! 	* parse.y (attach_init_test_initialization_flags): Add a decl_expr
! 	to the block.
! 
! 2004-11-08  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/16843:
! 	* gjavah.c (HANDLE_END_FIELD): Call print_field_info when
! 	generating a JNI header.
! 	(print_field_info): Handle JNI headers.
! 	(jni_print_float): Likewise.
! 	(jni_print_double): Likewise.
! 
! 2004-11-08  Andrew Pinski  <pinskia@physics.uc.edu>
! 
! 	* 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.
! 
! 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.
! 
! 2004-10-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	PR java/17265
! 	* class.c (make_local_function_alias): Revert 2004-08-18 change.
! 	(make_method_value): Likewise.
! 
! 2004-10-21  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/18091:
! 	* jcf-parse.c (set_source_filename): Add code to build new sfname.
! 
! 2004-10-20  Andrew Haley  <aph@redhat.com>
! 
! 	* decl.c (end_java_method): Don't expand if flag_syntax_only.
! 	Remove duplicated code block.
! 
! 2004-10-18  Steven Bosscher  <stevenb@suse.de>
! 
! 	* Make-lang.in (java/parse.o-warn, java/parse-scan.o-warn):
! 	New rules to work around old Bison warnings.
! 
! 2004-10-17  Steven Bosscher  <stevenb@suse.de>
! 
! 	* class.c (ident_subst): Always alloca buffer.
! 	* java-opcodes.h (LAST_AND_UNUSED_JAVA_OPCODE): Add this dummy
! 	opcode after including javaop.def.
! 	* jcf-dump.c (CHECK_PC_IN_RANGE): Return 0 from the arm of the
! 	conditional expression that exits, to avoid warnings.
! 	* verify.c (CHECK_PC_IN_RANGE): Mark the __GNUC__ definition as
! 	a user of an extension.
! 	* win32-host.c: Move check down to have non-empty file when
! 	WIN32 is not defined.
! 
! 	* Make-lang.in (java-warn): Add STRICT_WARN.
! 	(java/jcf-io.o-warn): Don't have Werror for this file.
! 	* jcf-io.c (caching_stat): Add FIXME for non-POSIX scandir use.
! 
! 2004-10-16  Hans-Peter Nilsson  <hp@bitrange.com>
! 
! 	* expr.c (expr_add_location): Move declaration to before all
! 	statements.
! 	* parse.y (java_expand_classes): Ditto.
! 	* lex.c (java_peek_unicode): Ditto.
! 
! 2004-10-16  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	* check-init.c: Use %<, %> and %q for quoting in diagnostics,
! 	if possible, else convert `foo' to 'foo'.
! 	* class.c: Likewise.
! 	* decl.c: Likewise.
! 	* expr.c: Likewise.
! 	* jcf-io.c: Likewise.
! 	* jcf-parse.c: Likewise.
! 	* lang.c: Likewise.
! 	* lex.c: Likewise.
! 	* parse.h: Likewise.
! 
! 2004-10-16  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	* parse.y (parse_warning_context): Remove ATTRIBUTE_PRINTF_2 and
! 	rename parameter 'msg' to 'msgid' in function declaration.
! 	(issue_warning_error_from_context): Likewise.
! 	(yyerror): Rename parameter 'msg' to 'msgid'.
! 	(all over): Use new quoting style for diagnostics.
! 
! 2004-10-15  Kazu Hirata  <kazu@cs.umass.edu>
! 
! 	* boehm.c, builtins.c, java-except.h, jcf-io.c, jcf-path.c,
! 	jcf.h, lang-specs.h, lex.c, lex.h, resource.c, win32-host.c:
! 	Update copyright.
! 
! 2004-10-14  Matt Austern  <austern@apple.com>
! 
! 	* 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:
! 	* lang.opt (--extdirs): Document.
! 	* jvspec.c (lang_specific_driver): Recognize -encoding and
! 	-extdirs.
! 
! 2004-10-06  Ulrich Weigand  <uweigand@de.ibm.com>
! 
! 	* parse.y (issue_warning_error_from_context): Use va_list *
! 	instead of va_list parameter.
! 	(parse_error_context): Update call.
! 	(parse_warning_context): Likewise.
! 
! 2004-10-05  Zack Weinberg  <zack@codesourcery.com>
! 
! 	* parse.y, parse-scan.y: Add list of diagnostic messages to
! 	insulate translation template from version of yacc/bison used
! 	to compile the grammar.
! 
! 2004-10-05  Ranjit Mathew  <rmathew@hotmail.com>
! 
! 	Prepare for %q, %< and %> in diagnostic message strings.
! 	* java-tree.h (parse_error_context): remove ATTRIBUTE_PRINTF_2.
! 	Name second parameter 'msgid'.
! 	* parse.y: Additionally include pretty-print.h and diagnostic.h.
! 	(issue_warning_error_from_context): Use pretty-printer functions
! 	instead of vsprintf for constructing formatted messages. Rename
! 	parameter 'msg' to 'msgid'.
! 	(parse_error_context): Rename parameter 'msg' to 'msgid'.
! 	(parse_warning_context): Likewise.
! 
! 2004-10-05  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/17779
! 	* jcf-parse.c (parse_zip_file_entries): If a class has a
! 	superclass and a TYPE_SIZE of zero, lay it out.
! 
! 2004-09-30  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/17733
! 	* jcf-parse.c (compute_class_name): Rewrite.
! 
! 2004-10-01  Jan Hubicka  <jh@suse.cz>
! 
! 	* java.c (java_expand_body): Update call of tree_rest_of_compilation.
! 
! 2004-10-01  Kazu Hirata  <kazu@cs.umass.edu>
! 
! 	* lex.c: Fix a comment typo.
! 
! 2004-10-01  Kazu Hirata  <kazu@cs.umass.edu>
! 
! 	* java-tree.h: Fix a comment typo.
! 
! 2004-09-30  Per Bothner  <per@bothner.com>
! 
! 	Simplify lexer.  Implement --enable-mapped-location support.
! 	* jcf-parse.c (parse_class_file):  Use linemap_line_start.
! 	(parse_source_file_1): Pass filename as extra parameter, so we can call
! 	linemap_add and set input_location here, rather than in both callers.
! 	(read_class): Pass copied filename to parse_source_file_1.
! 	Don't initialize wfl_operator - only needed for source compilation.
! 	(read_class, jcf_parse):  Call linemap_add with LC_LEAVE.
! 	* lex.h:  Remove a bunch of debugging macros.
! 	* lex.h (struct_java_line, struct java_error):  Remove types.
! 	(JAVA_COLUMN_DELTA):  Remove - use java_lexer.next_colums instead.
! 	(struct java_lc_s):  Remove prev_col field.
! 	(struct java_lexer):  New fields next_unicode, next_columns, and
! 	avail_unicode.  New position field, and maybe token_start field.
! 	Don't need hit_eof field - use next_unicode == -1 instead.
! 	(JAVA_INTEGERAL_RANGE_ERROR):  Rename to JAVA_RANGE_ERROR.
! 	(JAVA_RANGE_ERROR, JAVA_FLOAT_ANGE_ERROR):  Update accordingly.
! 	* parse.h:  Various changes for USE_MAPPED_LOCATION.
! 	(EXPR_WFL_EMIT_LINE_NOTE): XXX
! 	(BUILD_EXPR_WFL, EXPR_WFL_ADD_COL): Remove no-longer-used macros.
! 	(struct parser_ctxt):  New file_start_location field.
! 	Remove p_line, c_line fields since we no longer save lines.
! 	Remove elc, lineno, and current_jcf fields - no longer used.
! 	* parse.y:  Updates for USE_MAPPED_LOCATION and new lexer.
! 	Don't use EXPR_WFL_ADD_COL since that isn't trivial with
! 	source_location and is probably not needed anymore anyway.
! 	Use new expr_add_Location function.
! 	(SET_EXPR_LOCATION_FROM_TOKEN):  New convenience macro.
! 	(java_pop_parser_context):  Minor cleanup.
! 	(java_parser_context_save_global, java_parser_context_restore_global,
! 	java_pop_parser_context):  Save/restore input_location as a unit.
! 	(issue_warning_error_from_context):  If USE_MAPPED_LOCATION take
! 	a source_location instead of a wfl context node.
! 	(check_class_interface_creation):  input_filename is not addressable.
! 	(create_artificial_method):  Calling java_parser_context_save_global
! 	and java_parser_context_restore_global is overkill.  Instead,
! 	temporarily set input_location from class decl.
! 	(java_layout_seen_class_methods): Set input_location from method decl.
! 	(fix_constructors): Make more robust if no EXPR_WITH_FILE_LOCATION.
! 	(finish_loop_body):  Likewise.
! 	* lex.c: Updates for USE_MAPPED_LOCATION.  Use build_unknwon_wfl.
! 	(java_sprint_unicode):  Take a character, not index in line.
! 	(java_sneak_uncode):  Replaced by java_peek_unicode.
! 	(java_unget_unicode):  No longer used.
! 	(java_allocate_new_line. java_store_unicode):  Removed, since we
! 	no longer remember "lines".
! 	(java_new_lexer):  Update for new data structures.
! 	(java_read_char):  Move unget_value checking to java_read_unicode.
! 	(java_get_unicode, java_peek_unicode, java_next_unicode): New more
! 	efficient functions that are used directly when lexing.
! 	(java_read_unicode_collapsing_terminators):  No longer needed.
! 	(java_parse_end_comment, java_parse_escape_sequence, do_java_lex):
! 	Re-organize to use java_peek_unicode to avoid java_unget_unicode.
! 	(java_parse_escape_sequence):  Rewrite to be simpler / more efficient.
! 	(do_java_lex):  Lots of movings around to avoid java_unget_unicode,
! 	combine switch branches, and test for common token kinds earlier.
! 	(java_lex_error):  Rewrite.
! 	* jv-scan.c (expand_location): New function, copied from tree.c.
! 	(main): Set ctxp->filename instead of setting input_filename directly.
! 
! 2004-09-30  Per Bothner  <per@bothner.com>
! 
! 	More cleanup for --enable-mapped-location.
! 	* class.c (push_class):  If USE_MAPPED_LOCATION don't set
! 	input_location here.  Instead do it in give_name_to_class.
! 	(build_class_ref):  Set DECL_ARTIFICIAL, for the sake of dwarf2out.
! 	* expr.c (expand_byte_code): Call linemap_line_start.
! 	* expr.c (build_expr_wfl):  If USE_MAPPED_LOCATION, change final
! 	parameters to a source_location.  Don't need EXPR_WFL_FILENAME_NODE.
! 	(expr_add_location):  New function, if USE_MAPPED_LOCATION.
! 	* class.c (maybe_layout_super_class):  Adjust build_expr_wfl call
! 	to USE_MAPPED_LOCATION case.
! 
! 	* java-tree.h (JAVA_FILE_P, ZIP_FILE_P):  Remove unused macros.
! 	* jcf-parse.c (java_parse_file): Don't set input_filename.
! 	Use IS_A_COMMAND_LINE_FILENAME_P to check for duplicate filenames.
! 	Create a list of TRANSLATION_UNIT_DECL.
! 	(current_file_list):  Is now a TRANSLATION_UNIT_DECL chain.  The
! 	reason is so we can set a DECL_SOURCE_LOCATION for each file.
! 	(java_parse_file):  Don't set unused ZIP_FILE_P, JAVA_FILE_P..
! 	Create line-map LC_ENTER/LC_LEAVE entries for archive itself.
! 	(file_start_location):  New static.
! 	(set_source_filename):  Avoid extra access to input_filename macro.
! 	Concatenate new name with class's package prefix.
! 	(set_source_filename, give_name_to_class): Update.
! 	(give_name_to_class):  Set class's "line 0" input_location here.
! 	(parse_class_file):  Set input_location as a unit.
! 
! 	* jcf-parse.c (load_class): Sanity test if missing inner class file.
! 
! 2004-09-29  Per Bothner  <per@bothner.com>
! 
! 	* java-tree.h:  Redefine some macros and add some declaration
! 	to handle the USE_MAPPED_LOCATION case.
! 	* parse.h (EXPR_WFL_QUALIFICATION):  Use operand 1, not 2.
! 	* java-tree.h (EXPR_WFL_FILENAME_NODE):  Use operand 2, not 1.
! 	* java-tree.def (EXPR_WITH_FILE_LOCATION): Only need two operands in
! 	USE_MAPPED_LOCATION case, since EXPR_WFL_FILENAME_NODE is gone.
! 
! 	* check-init.c (check_init): Handle USE_MAPPED_LOCATION case.
! 	* decl.c (finish_method, java_add_stmt): Likewise.
! 	* java-gimplify.c (java-gimplify.c):  Likewise.
! 	* jcf-write.c (generate_bytecode_insns):  Likewise.
! 	* lang.c (java_post_options): Likewise - call linemap_add.
! 
! 2004-09-29  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/17007
! 	* parse.y (patch_binop): Don't mess with the TREE_SIDE_EFFECTS of the
! 	result of TRUNC_MOD_EXPR.
! 	(patch_unaryop): Likewise for CONVERT_EXPR, which may throw.
! 	* decl.c (java_init_decl_processing): Mark
! 	soft_lookupinterfacemethod_node and soft_instanceof_node pure.
! 
! 2004-09-28  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/15710:
! 	* class.c (add_miranda_methods): Load superinterface if not
! 	already loaded.
! 
! 2004-09-28  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/17586
! 	* jcf-parse.c (load_class): Don't try to read a class that we've
! 	already read.
! 
! 2004-09-28  Andrew Haley  <aph@redhat.com>
! 
! 	* jcf-parse.c (load_class): Back out previous broken patch.
! 
! 2004-09-28  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/17586
! 	* jcf-parse.c (load_class): Don't try to read a class that we've
! 	already read.
! 	Check that we really did read the right class.
! 
! 2004-09-25  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/17500:
! 	* parse.y (create_artificial_method): Use add_method_1.
! 
! 2004-09-25  Kazu Hirata  <kazu@cs.umass.edu>
! 
! 	* expr.c, jcf-dump.c, parse-scan.y, parse.y: Fix
! 	comment typos.
! 	* gcj.texi: Fix typos.
! 
! 2004-09-24  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/15656:
! 	* parse.y (class_instance_creation_expression): Set `$$' to NULL
! 	in error parts of rule.
! 	(unary_expression): Don't call error_if_numeric_overflow when $1
! 	is NULL.
! 
! 2004-09-24  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/16789:
! 	* parse.y (resolve_qualified_expression_name): Set
! 	CAN_COMPLETE_NORMALLY on first call when chaining static calls.
! 	* expr.c (force_evaluation_order): Check for empty argument list
! 	after stripping COMPOUND_EXPR.
! 
! 2004-09-23  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/16927:
! 	* parse.y (java_complete_lhs): Call patch_string() on Operand 1 of
! 	COND_EXPRs.
! 
! 2004-09-23  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/17329:
! 	* java-gimplify.c (java_gimplify_expr) <SAVE_EXPR>: Ignore case
! 	where operand is null.
! 
! 2004-09-23  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/17380:
! 	* parse.y (not_accessible_p): Allow access to protected members
! 	even when class is not static.
! 
! 2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Make-lang.in: Revert the gcc-none.o change.
! 
! 2004-09-22  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* parse.y (patch_anonymous_class): VEC_space returns true if there
! 	is space.
! 
! 2004-09-21  Matt Austern  <austern@apple.com>
! 
! 	Fix bootstrap.
! 	* gjavah.c (free_method_name_list): Fix function definition so
! 	it's a proper C prototype.
! 
! 2004-09-21  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/17575:
! 	* gjavah.c (free_method_name_list): New method.
! 	(main): Call it.
! 
! 2004-09-17  Jeffrey D. Oldham  <oldham@codesourcery.com>
! 	    Zack Weinberg  <zack@codesourcery.com>
! 
! 	* java-tree.def: Use tree_code_class enumeration constants
! 	instead of code letters.
! 	* java-gimplify.c, jcf-write.c, lang.c, parse.y: Update for
! 	new tree-class enumeration constants.
! 
! 2004-09-13  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/17216:
! 	* class.c (layout_class_method): Put synthetic methods into the
! 	vtable.
! 
! 2004-09-11  Andrew Pinski  <apinski@apple.com>
! 
! 	* Make-lang.in (java/ggc-none.c): Change dependency
! 	for ggc.h into $(GGC_H).
! 
! 2004-09-11  Mohan Embar  <gnustuff@thisiscool.com>
! 
! 	* Make-lang.in (java/win32-host.o): Add dependency on
! 	coretypes.h.
! 	* win32-host.c: Add includes for coretypes.h, jcf.h
! 
! 2004-09-11  Mohan Embar  <gnustuff@thisiscool.com>
! 
! 	* Make-lang.in (GCJH_OBJS): Change dependency from
! 	ggc-none.o to java/ggc-none.o
! 	(JCFDUMP_OBJS): Likewise.
! 	(java/ggc-none.o): New target.
! 
! 2004-08-25  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* boehm.c (get_boehm_type_descriptor):  Adjust build_int_cst calls.
! 	* class.c (build_utf8_ref, build_static_field_ref,
! 	make_field_value, make_method_value, get_dispatch_table,
! 	make_class_data, emit_symbol_table, emit_catch_table): Likewise.
! 	* constants.c (get_tag_node, build_ref_from_constant_pool,
! 	build_constants_constructor): Likewise.
! 	* decl.c (java_init_decl_processing): Likewise.
! 	* expr.c (build_java_array_length_access, build_newarray,
! 	expand_java_multianewarray, expand_java_pushc, expand_iinc,
! 	build_java_binop, build_field_ref, expand_java_add_case,
! 	expand_java_call, build_known_method_ref, build_invokevirtual,
! 	build_invokeinterface, build_jni_stub): Likewise.
! 	* java-gimplify.c (java_gimplify_new_array_init): Likewise.
! 	* jcf-parse.c (get_constant): Likewise.
! 	* lex.c (do_java_lex): Likewise.
! 	* parse.y (patch_binop, patch_unaryop, patch_cast,
! 	build_newarray_node, patch_newarray): Likewise.
! 	* resource.c (compile_resource_data): Likewise.
! 	* typeck.c (build_prim_array_type): Likewise.
! 
! 2004-08-24  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* decl.c (java_init_decl_processing): Adjust
! 	initialize_sizetypes call.
! 
! 2004-08-23  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* jv-scan.c (fancy_abort): Add.
! 
! 2004-08-20  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* expr.c (build_java_arrayaccess): Use convert to change
! 	len's type.
! 
! 2004-08-19  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* class.c (make_local_function_alias): Allocate extra space for 'L'
! 	in name buffer. Reported by Thomas Neumann.
! 
! 2004-08-19  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* parse.h (JAVA_RADIX10_FLAG): Rename to ...
! 	(JAVA_NOT_RADIX10_FLAG): ... here.  Invert meaning.
! 	* lex.c (do_java_lex): Adjust.
! 	(error_if_numeric_overflow): Likewise.
! 
! 2004-08-18  Andrew Pinski  <apinski@apple.com>
! 
! 	* class.c (make_local_function_alias): Only make a new decl if we
! 	support alias attribute on all decls.
! 
! 2004-08-18  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* class.c (make_local_function_alias): New function. Create local
! 	alias for public method DECL.
! 	(make_method_value): Use make_local_function_alias.
! 	* parse.y (craft_constructor): Don't special-case anonymous classes.
! 	Always set ctor_name to init_identifier_node.
! 	(lookup_method_invoke): Call layout_class_method when creating
! 	anonymous class constructor.
! 
! 2004-08-18  Richard Henderson  <rth@redhat.com>
! 
! 	* java-gimplify.c (java_gimplify_expr): Move '2' handling into
! 	default case.  Treat '<' similarly.  Update for
! 	is_gimple_formal_tmp_var name change.
! 
! 2004-08-17  Andrew Haley  <aph@redhat.com>
! 
! 	* lang.c (lang_printable_name): Obey verbose flag.
! 	* parse.y (constructor_circularity_msg): Set VERBOSE arg for
! 	lang_printable_name().
! 	(verify_constructor_circularity, get_printable_method_name,
! 	check_abstract_method_definitions, java_check_regular_methods,
! 	java_check_abstract_methods, check_inner_class_access,
! 	fix_constructors, patch_method_invocation, patch_return):
! 	Likewise.
! 	* expr.c (pop_type_0): Likewise.
! 
! 	* java-tree.h (lang_printable_name_wls): Delete.
! 
! 2004-08-16  Tom Tromey  <tromey@redhat.com>
! 
! 	PR java/8473:
! 	* parse.y (primary): Changed for initialized and uninitialized
! 	array creations.
! 	(array_access): Handle array_creation_initialized.
! 	(array_creation_expression): Split into
! 	array_creation_initialized and array_creation_uninitialized.
! 
! 2004-08-16  Andrew Haley  <aph@redhat.com>
! 
! 	* jcf-write.c (find_constant_index): Canonicalize NaNs when
! 	generating bytecode.
! 
! 2004-08-16  Elliot Lee <sopwith@redhat.com>
! 
! 	PR java/9677
! 	* jcf-parse.c (java_parse_file): Handle filenames with embedded
! 	spaces, and quoted filelists.
! 
! 2004-08-15  Nathan Sidwell  <nathan@codesourcery.com>
! 
! 	* boehm.c (get_boehm_type_descriptor): Use build_int_cst.
! 	* class.c (build_utf8_ref, build_static_field_ref,
! 	make_field_value, make_method_value, get_dispatch_table,
! 	make_class_data, emit_symbol_table, emit_catch_table): Likewise.
! 	* constants.c (get_tag_node,  build_ref_from_constant_pool,
! 	build_constants_constructor): Likewise.
! 	* decl.c (java_init_decl_processing): Likewise.
! 	* expr.c (build_java_array_length_access, build_newarray,
! 	expand_java_multianewarray, expand_java_pushc, expand_iinc,
! 	build_java_binop, build_field_ref, expand_java_add_case,
! 	expand_java_call, build_known_method_ref, build_invokevirtual,
! 	build_invokeinterface, build_jni_stub): Likewise.
! 	* java-gimplify.c (java_gimplify_new_array_init): Likewise.
! 	* jcf-parse.c (get_constant): Likewise.
! 	* lex.c (do_java_lex): Likewise.
! 	* parse.y (patch_binop, patch_unaryop, patch_cast,
! 	build_null_of_type, patch_newarray): Likewise.
! 	* resource.c (compile_resource_data): Likewise.
! 	* typeck.c (build_prim_array_type): Likewise.
! 
! 2004-08-10  Bryce McKinlay  <mckinlay@redhat.com>
! 
! 	* java-gimplify.c (java_gimplify_new_array_init): Use create_tmp_var.
! 	Don't create BLOCK here or call java_gimplify_block.
! 
! 2004-08-09  H.J. Lu  <hongjiu.lu@intel.com>
! 
! 	* java-tree.h (flag_deprecated): Removed.
! 	* lang.opt (Wdeprecated): Use existing Var(warn_deprecated).
! 	* parse.y (check_deprecation): Check warn_deprecated instead of
! 	flag_deprecated.
! 
! 2004-08-06  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* lang.c (flag_emit_class_files, flag_filelist_file, flag_redundant,
! 	flag_use_divide_subroutine, flag_use_boehm_gc, flag_store_check,
! 	flag_hash_synchronization, flag_assert, flag_jni, flag_newer,
! 	flag_check_references, flag_extraneous_semicolon, flag_deprecated,
! 	flag_force_classes_archive_check, flag_optimize_sci,
! 	flag_indirect_dispatch): Remove explicit declarations.
! 	* lang.opt: Add implicit declare/define/assign.  Remove obsolete
! 	final comment.
! 
! 2004-08-05  Michael Chastain  <mec.gnu@mindspring.com>
! 
! 	PR bootstrap/14893
  	* Make-lang.in (java.install-man): Install from either build
  	tree or source tree, whichever has the file first.
  
+ 2004-08-05  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* jcf-parse.c (get_constant): Adjust force_fit_type call.
+ 	* lex.h (SET_LVAL_NODE_TYPE): Remove.
+ 	* lex.c (java_perform_atof): Use SET_LVAL_NODE directly.
+ 	(do_java_lex): Likewise. Adjust force_fit_type call.
+ 
+ 2004-08-04  Roger Sayle  <roger@eyesopen.com>
+ 	    Andrew Haley  <aph@redhat.com>
+ 
+ 	* typeck.c (convert_ieee_real_to_integer): Call fold on the range
+ 	checking trees as they're being built.
+ 	(convert): Call convert_ieee_real_to_integer if we're
+ 	converting a constant, even if we're writing a class file.
+ 
+ 2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR java/16701
+ 	* parse.y (fold_constant_for_init): Call resolve_field_access with
+ 	correct current_class context.
+ 
+ 2004-08-01  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* decl.c (update_aliases, initialize_local_variable): Replace calls
+ 	to build with calls to buildN.
+ 	* java-gimplify.c (java_gimplify_modify_expr): Likewise.
+ 	* java-tree.h (BUILD_MONITOR_ENTER, BUILD_MONITOR_EXIT): Likewise.
+ 	* parse.h (BUILD_THROW): Likewise.
+ 	* parse.y (switch_expression, synchronized_statement,
+ 	catch_clause_parameter, array_creation_expression,
+ 	conditional_expression, make_qualified_name,
+ 	resolve_qualified_expression_name, patch_method_invocation,
+ 	patch_invoke, build_method_invocation, build_new_invocation,
+ 	build_assignment, patch_assignment, build_binop, patch_binop,
+ 	build_string_concatenation, build_incdec, patch_unaryop,
+ 	patch_cast, build_array_ref, build_newarray_node, patch_newarray,
+ 	patch_return, build_if_else_statement, build_labeled_block,
+ 	build_new_loop, build_loop_body, build_bc_statement,
+ 	build_assertion, encapsulate_with_try_catch, build_try_statement,
+ 	build_try_finally_statement, patch_synchronized_statement,
+ 	emit_test_initialization): Likewise, replace build with buildN.
+ 
+ 2004-07-28  Eric Christopher  <echristo@redhat.com>
+ 
+ 	* lang.c (LANG_HOOKS_UNSAFE_FOR_REEVAL): Delete.
+ 	(java_unsafe_for_reeval): Ditto.
+ 
+ 2004-07-26    <hp@bitrange.com>
+ 
+ 	* parse.y (build_super_invocation): Adjust declaration order to
+ 	avoid declaration after statement.
+ 
+ 2004-07-25  Bernardo Innocenti  <bernie@develer.com>
+ 
+ 	* decl.c: Rename all identifiers named `class' to `cl'.
+ 
+ 2004-07-25  Richard Henderson  <rth@redhat.com>
+ 
+ 	* decl.c (build_result_decl): Set DECL_ARTIFICIAL and DECL_IGNORED_P.
+ 
+ 2004-07-23  Mike Stump  <mrs@apple.com>
+ 
+ 	* boehm.c (set_bit): Improve type safety wrt unsignedness.
+ 	* gjavah.c (throwable_p, decode_signature_piece,
+ 	print_full_cxx_name, print_include, add_namelet, add_class_decl,
+ 	process_file): Likewise.
+ 	* jcf-dump.c (main): Likewise.
+ 	* jcf-io.c (read_zip_member): Likewise.
+ 	* jcf-parse.c (HANDLE_CONSTANT_Utf8, get_constant,
+ 	give_name_to_class, get_class_constant): Likewise.
+ 	* jcf-write.c (find_constant_wide, push_long_const,
+ 	generate_classfile): Likewise.
+ 	* lex.c (java_new_lexer, java_read_char, cxx_keyword_p): Likewise.
+ 	* parse.y (read_import_dir): Likewise.
+ 	* typeck.c (parse_signature_type): Likewise.
+ 	* verify.c (verify_jvm_instructions): Likewise.
+ 	* zextract.c (find_zip_file_start, read_zip_archive): Likewise.
+ 
+ 2004-07-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* Make-lang.in: Replace rmic and rmiregistry references with
+ 	grmic and grmiregistry.
+ 	* gcj.texi: Likewise.
+ 
+ 2004-07-20  Andrew Haley  <aph@redhat.com>
+ 
+ 	PR java/16431.
+ 	* verify.c (verify_jvm_instructions): Comment change only.
+ 
+ 	* typeck.c (build_java_array_type): Add size field to array name.
+ 
+ 	* java-tree.h (LOCAL_SLOT_P): New.
+ 	(update_aliases): Add PC argument.
+ 	(pushdecl_function_level): New function.
+ 
+ 	* java-gimplify.c (java_gimplify_expr): Handle VAR_DECL,
+ 	MODIFY_EXPR, and SAVE_EXPR.
+ 	(java_gimplify_modify_expr): New function.
+ 
+ 	* expr.c (push_type_0): Call find_stack_slot() to create temporary.
+ 	(expand_iinc): Pass PC to update_aliases().
+ 	(STORE_INTERNAL): Likewise.
+ 	(process_jvm_instruction): Likewise.
+ 
+ 	* decl.c (base_decl_map): New variable.
+ 	(uniq): New variable.
+ 	(update_aliases): Rewrite with more thorough checking.
+ 	(debug_variable_p): New function.
+ 	(push_jvm_slot): Don't initialize local variable.  Don't pushdecl.
+ 	(check_local_named_variable): Delete whole function.
+ 	(initialize_local_variable): New function.
+ 	(check_local_unnamed_variable): Add checks and comments.
+ 	(find_local_variable): Rewrite.
+ 	(java_replace_reference): New function.
+ 	(function_binding_level): New variable.
+ 	(pushdecl_function_level): New function.
+ 	(maybe_pushlevels): Set DECL_LOCAL_END_PC.
+ 	(maybe_pushlevels): Call pushdecl() on each of the new decls.
+ 	(start_java_method): Reset uniq.  Create base_decl_map.  Set
+ 	function_binding_level.
+ 	(end_java_method): Null unused fields to save memory.
+ 
+ 2004-07-20  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* class.c (add_interface_do): Remove.
+ 	(set_super_info, interface_of_p, maybe_add_interface,
+ 	add_interface, make_class_data, layout_class,
+ 	add_miranda_methods): Adjust BINFO accessors and addition.
+ 	* expr.c (can_widen_reference_to, lookup_field): Adjust BINFO
+ 	accessors.
+ 	* jcf-write.c (generate_classfile): Likewise.
+ 	* parse.y (patch_anonymous_class, check_inner_circular_reference,
+ 	check_circular_reference, java_complete_class,
+ 	check_abstract_method_definitions,
+ 	java_check_abstract_method_definitions,
+ 	check_interface_throws_clauses, java_check_abstract_methods,
+ 	lookup_java_interface_method2,
+ 	find_applicable_accessible_methods_list): Adjust BINFO accessors
+ 	and addition.
+ 	* typeck.c (find_method_in_interfaces): Adjust BINFO accessors.
+ 
+ 2004-07-18  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (max_builtin, min_builtin,
+ 	java_build_function_call_expr): Replace calls to build with buildN.
+ 	* class.c (build_class_ref, build_static_field_ref,
+ 	get_dispatch_table, make_class_data, layout_class_method): Likewise.
+ 	* constants.c (build_ref_from_constant_pool): Likewise.
+ 	* decl.c (update_aliases, push_jvm_slot, poplevel, finish_method,
+ 	add_stmt_to_compound): Likewise.
+ 	* except.c (build_exception_object_ref, expand_end_java_handler):
+ 	Likewise.
+ 	* java-gimplify.c (java_gimplify_case_expr,
+ 	java_gimplify_default_expr, java_gimplify_block,
+ 	java_gimplify_new_array_init, java_gimplify_try_expr): Likewise.
+ 	* jcf-write.c (generate_bytecode_insns): Likewise.
+ 	* typeck.c (convert_ieee_real_to_integer): Likewise.
+ 
+ 2004-07-17  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* java-tree.h (builtin_function): Declare.
+ 
+ 2004-07-16  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* parse.y (java_complete_expand_methods, java_expand_classes): Don't
+ 	abuse restore_line_number_status.
+ 
+ 2004-07-15  Frank Ch. Eigler  <fche@redhat.com>
+ 
+ 	g++/15861
+ 	* jcf-parse.c (java_emit_static_constructor): Specify default
+ 	priority.
+ 
+ 2004-07-13  Per Bothner  <per@bothner.com>
+ 
+ 	* java-tree.h (all_class_filename):  Remove useless macro.
+ 	(enum java_tree_index):  Remove JTI_ALL_CLASS_FILENAME constant.
+ 	(BUILD_FILENAME_IDENTIFIER_NODE):  Remove useless macro.
+ 	* parse.y (java_parser_context_restore_global):  Replace
+ 	BUILD_FILENAME_IDENTIFIER_NODE by plain get_identifier.
+ 	* jcf-parse.c (read_class, java_parse_file):  Likewise.
+ 
+ 2004-07-12  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR java/16474
+ 	gjavah.c (print_field_info): Emit constant only if field is static.
+ 
+ 2004-07-11  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* expr.c (java_truthvalue_conversion, flush_quick_stack,
+ 	java_stack_swap, java_stack_dup, build_java_athrow, build_java_jsr,
+ 	build_java_ret, build_java_throw_out_of_bounds_exception,
+ 	build_java_array_length_access, java_check_reference,
+ 	build_java_arrayaccess, build_java_arraystore_check, build_newarray,
+ 	build_anewarray, expand_java_multianewarray, expand_java_arraystore,
+ 	expand_java_arrayload, build_java_monitor, expand_java_return,
+ 	expand_load_internal, expand_java_NEW, build_get_class,
+ 	build_instanceof, expand_java_CHECKCAST, expand_iinc,
+ 	build_java_soft_divmod, build_java_binop, build_field_ref,
+ 	expand_compare, expand_java_goto, expand_java_switch,
+ 	expand_java_add_case, build_class_init, build_known_method_ref,
+ 	invoke_build_dtable, build_invokevirtual, build_invokeinterface,
+ 	expand_invoke, build_jni_stub, expand_java_field_op,
+ 	java_expand_expr, expand_byte_code, STORE_INTERNAL,
+ 	force_evaluation_order, emit_init_test_initialization): Convert
+ 	calls to "build" into calls to the prefered "buildN" functions.
+ 
+ 2004-07-11  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* java-tree.h (set_block): Remove.
+ 	* lang.c (java_clear_binding_stack): New.
+ 	(LANG_HOOKS_CLEAR_BINDING_STACK): Define.
+ 	* decl.c (struct binding_level): Remove this_block.
+ 	(clear_binding_level): Likewise.
+ 	(poplevel): Don't handle this_block.
+ 	(set_block): Remove.
+ 
+ 2004-07-10  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* class.c (common_enclosing_context_p): Remove statement with no
+ 	side-effects.
+ 
+ 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR java/8618
+ 	* parse.y (create_anonymous_class): Remove 'location' argument. Use
+ 	the WFL from TYPE_NAME to get line number for the decl. Fix comment.
+ 	(craft_constructor): Inherit access flags for implicit constructor
+ 	from the enclosing class.
+ 	(create_class): Fix comment typo.
+ 	(resolve_qualified_expression_name): Pass type of qualifier to
+ 	not_accessible_p, not the type in which target field was found.
+ 	(not_accessible_p): Handle inner classes. Expand protected
+ 	qualifier-subtype check to enclosing instances, but don't apply this
+ 	check to static members. Allow protected access to inner classes
+ 	of a subtype. Allow private access within common enclosing context.
+ 	(build_super_invocation): Get WFL line number info from current
+ 	class decl.
+ 	(build_incomplete_class_ref): Update for new create_anonymous_class
+ 	signature.
+ 	* parse.h (INNER_ENCLOSING_SCOPE_CHECK): Use
+ 	common_enclosing_instance_p.
+ 	* class.c (common_enclosing_context_p): New. Determine if types
+ 	share a common enclosing context, even across static contexts.
+ 	(common_enclosing_instance_p): Renamed from
+ 	common_enclosing_context_p. Determines if types share a common
+ 	non-static enclosing instance.
+ 	* java-tree.h (common_enclosing_instance_p): Declare.
+ 	* jcf-write.c (get_method_access_flags): New. Surpress private flag
+ 	for inner class constructors.
+ 	(generate_classfile): Use get_method_access_flags.
+ 
+ 2004-07-09  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* class.c (interface_of_p): Check for null TYPE_BINFO.
+ 
+ 2004-07-09  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* class.c (make_class): Do not create binfo here.
+ 	(set_super_info): Create it here.
+ 	* java-tree.h (CLASS_HAS_SUPER): Cope with lack of a binfo.
+ 
+ 2004-07-08  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (case_identity, get_primitive_array_vtable,
+ 	java_expand_expr, emit_init_test_initialization): Remove.
+ 	* java-tree.h (java_expand_expr): Remove.
+ 	* lang.c (LANG_HOOKS_EXPAND_EXPR): Remove.
+ 
+ 2004-07-07  Per Bothner  <per@bothner.com>
+ 
+ 	* class.c (build_static_field_ref):  Add a NOP_EXPR; otherwise we
+ 	get internal error due to mismatched types.
+ 
+ 	* gcj.texi (Invoking gij):  Document new -verbose:class flag.
+ 
+ 	* gcj.texi (Linking):   New node.  Document -lgij usage.
+ 
+ 2004-07-07  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* java-tree.h (CLASSTYPE_SPUER): Adjust BINFO macros.
+ 	(TYPE_NVIRTUALS, TYPE_VTABLE): Likewise.
+ 	* java/class.c (set_super_info, class_depth, interface_of_p,
+ 	maybe_add_interface, add_interface, make_class_data,
+ 	layout_class, add_miranda_methods): Adjust BINFO macros.
+ 	* expr.c (can_widen_reference_to, lookup_field): Likewise.
+ 	* jcf-write.c (generate_classfile): Likewise.
+ 	* parse.y (patch_anonymous_class,
+ 	check_inner_circular_reference, check_circular_reference,
+ 	java_complete_class, check_abstract_method_definitions,
+ 	java_check_abstract_method_definitions,
+ 	check_interface_throws_clauses, java_check_abstract_methods,
+ 	lookup_java_interface_method2,
+ 	find_applicable_accessible_methods_list): Likewise.
+ 	* typeck.c (find_method_in_interface): Likewise.
+ 	* verify.c (merge_types): Likewise.
+ 
+ 2004-07-06  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* java-tree.h (CLASS_HAS_SUPER_FLAG): Use BINFO_FLAG_1.
+ 	* class.c (add_interface_do): Use BINFO_VIRTUAL_P.
+ 
+ 2004-07-05  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+ 	* class.c (make_class): Use make_tree_binfo.
+ 	(set_super_info, add_interface_do): Likewise.
+ 	* java-tree.h (CLASS_HAS_SUPER_FLAG): Expect a BINFO.
+ 
+ 2004-07-04  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* verify.c: Correct array element access formatting thinko.
+ 
+ 2004-07-04  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* verify.c: Insert a short blurb at the start referring to the JVMS.
+ 	(merge_type_state): Remove redundant nested if statement.
+ 	(verify_jvm_instructions): Ensure current_subr is initialised to
+ 	NULL_TREE.
+ 	Minor formatting fixes all over the place.
+ 
+ 2004-07-02  Richard Henderson  <rth@redhat.com>
+ 
+ 	* jcf-write.c (generate_bytecode_insns <case SAVE_EXPR>): Rewrite.
+ 
+ 2004-07-01  Richard Henderson  <rth@redhat.com>
+ 
+ 	* class.c (registerClass_libfunc): Remove.
+ 	(init_class_processing): Don't set it.
+ 	(emit_register_classes): Take list_p parameter.  Fill it in
+ 	with _Jv_RegisterClass calls.
+ 	* decl.c (java_init_decl_processing): Don't call
+ 	init_resource_processing.
+ 	* jcf-parse.c (java_emit_static_constructor): New.
+ 	(java_parse_file): Call it.
+ 	* resource.c (registerResource_libfunc): Remove.
+ 	(init_resource_processing): Remove.
+ 	(write_resource_constructor): Take list_p parameter.  Fill it in
+ 	with _Jv_RegisterResource calls.
+ 	* java-tree.h: Update prototypes.
+ 
+ 2004-06-29  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR java/1262
+ 	* class.c (layout_class_method): Do not override package-private
+ 	method if its in a different package.
+ 	(split_qualified_name): Move here from parse.y. Rename from
+ 	breakdown_qualified. Add comment.
+ 	(in_same_package): Move here from parse.y. Add comment.
+ 	* java-tree.h (break_down_qualified, in_same_package): Declare.
+ 	(in_same_package): Likewise.
+ 	* parse.y (breakdown_qualified, in_same_package): Moved to class.c.
+ 	Callers updated.
+ 
+ 2004-06-29  Andrew Haley  <aph@redhat.com>
+ 
+ 	* except.c (expand_start_java_handler): Push a new binding level.
+ 	Don't build a TRY_CATCH_EXPR now, we'll do it later.  Call
+ 	register_exception_range() to register where we'll do it.
+ 	(expand_end_java_handler): Remove old bogus code.  Replace with
+ 	new logic that simply builds TRY_CATCH_EXPRs and inserts them at
+ 	the top of the expression we're curently building.
+ 	(maybe_end_try): Delete.
+ 	* decl.c (binding_level.exception_range): New field.
+ 	(clear_binding_level): Add field exception_range.  Reformat.
+ 	(poplevel): Call expand_end_java_handler().
+ 	(poplevel): Call java_add_stmt only if functionbody is false.
+ 	(maybe_poplevels): Don't call maybe_end_try() from here.
+ 	(end_java_method): Clear no longer used trees in function decl.
+ 	(register_exception_range): New function.
+ 	* java-tree.h (register_exception_range, struct eh_range): Declare.
+ 
+ 2004-06-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* jcf-write.c (get_classfile_modifiers): Formatting fixes.
+ 
+ 2004-06-27  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Formatting fixes.
+ 	* expr.c (class_has_finalize_method): Fix method name indentation.
+ 	(expand_java_call): Remove K&R style parameter declaration.
+ 	(expand_invoke): Fix statement indentation.
+ 	(expand_java_field_op): Likewise.
+ 	* parse-scan.y: Fix typo.
+ 	(reset_report): Fix method name indentation.
+ 	* parse.y (unresolved_type_p, build_expr_block): Remove extra blank
+ 	line. Fix typos.
+ 	* verify.c (verify_jvm_instructions): Document parameters, insert
+ 	page break.
+ 	* lang.c (lang_init_source): Fix method name indentation.
+ 	* class.c (common_enclosing_context_p): Likewise.
+ 	(emit_symbol_table): Fix parameter list indentation.
+ 	* decl.c (add_stmt_to_compound, java_add_stmt): Remove K&R style
+ 	parameter declaration.
+ 	* constants.c: Fix copyright notice indentation.
+ 	* typeck.c (find_method_in_superclasses): Fix parameter list
+ 	indentation.
+ 	(find_method_in_interfaces): Likewise.
+ 	* zextract.c (makelong): Fix method name indentation.
+ 
+ 2004-06-26  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR java/15715.
+ 	* parse.y (create_interface): Set correct access modifiers for
+ 	interfaces.
+ 	* jcf-write.c (get_classfile_modifiers): New function.
+ 	(generate_classfile): Use get_classfile_modifiers, not
+ 	get_access_flags.
+ 
+ 2004-06-26  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* parse.y (register_incomplete_type): Set JDEP_ENCLOSING for "super"
+ 	dependency to current parser context, not NULL_TREE, for top-level
+ 	classes.
+ 	(jdep_resolve_class): Enable member access check for all inner
+ 	class dependencies.
+ 
+ 2004-06-26  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* parse.y (qualify_and_find): Pass type decl, not identifier, to
+ 	load_class.
+ 
+ 2004-06-26  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	PR java/15734
+ 	* expr.c (expand_java_field_op): Ensure that target class for static
+ 	field access has been loaded.
+ 
+ 2004-06-26  Bryce McKinlay  <mckinlay@redhat.com>
+ 	    Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	PR java/1207, java/16178
+ 	* jcf-parse.c (load_class): Return immediately if passed a type decl
+ 	where CLASS_FROM_SOURCE_P is set. Remove FIXME.
+ 	* parse.y (do_resolve_class): Remove checks for CLASS_FROM_SOURCE_P
+ 	before calling load_class.
+ 	(qualify_and_find): Likewise.
+ 	(find_in_imports_on_demand): Likewise.
+ 	(find_applicable_accessible_methods_list): Likewise.
+ 
+ 2004-06-24  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* parse.y (java_layout_seen_class_methods): Don't call load_class
+ 	on class defined by source parser.
+ 
+ 2004-06-23  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* parse.y (set_nested_class_simple_name_value): Removed.
+ 	(java_complete_expand_class): Remove calls to
+ 	set_nested_class_simple_name_value.
+ 
+ 2004-06-22  Andrew Haley  <aph@redhat.com>
+ 	    Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Fixes PR java/16113.
+ 	* decl.c (force_poplevels): Remove call to expand_end_bindings.
+ 
+ 2004-06-22  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* parse.y (create_class): Correct diagnostic message about
+ 	java.lang.Object extending anything else.
+ 
+ 2004-06-21  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* class.c (build_class_ref): Add new operand for COMPONENT_REF.
+ 	(build_static_field_ref): Likewise and add new operands for ARRAY_REF.
+ 	* constants.c (build_ref_from_constant_pool): Likewise.
+ 	* expr.c (build_java_array_length_access): Likewise.
+ 	(build_get_class, build_field_ref, build_known_method_ref): Likewise.
+ 	(invoke_build_dtable, build_invokevirtual): Likewise.
+ 	(build_invokeinterface, java_expand_expr): Likewise.
+ 	(emit_init_test_initialization): Likewise.
+ 	* java-gimplify.c (java_gimplify_new_array_init): Likewise.
+ 	* parse.y (make_qualifed_name, build_array_ref): Likewise.
+ 
+ 2004-06-21  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java-gimplify.c (java_gimplify_block): set TREE_USED on the new
+ 	block.
+ 
+ 2004-06-21  Joseph S. Myers  <jsm@polyomino.org.uk>
+ 
+ 	* jcf.h (struct JCF): Change java_source, right_zip and finished
+ 	to unsigned int.
+ 	* lex.h (struct java_lexer): Change hit_eof, read_anything,
+ 	byte_swap and use_fallback to unsigned int.
+ 	* parse.h (struct _jdep): Change flag0 to unsigned int.
+ 
+ 2004-06-17  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Fixes PR java/13948
+ 	* parse.y (java_layout_seen_class_methods): Ensure class is loaded
+ 	before trying to lay out its methods.
+ 	* jcf-parse.c (read_class): Track parsed files using canonical paths
+ 	obtained via lrealpath from libiberty.
+ 	(java_parse_file): Likewise.
+ 	(parse_source_file_1): Rename formal parameter to reflect its
+ 	modified purpose. Minor formatting fix.
+ 
+ 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* class.c (emit_register_classes): Make the function uninlinable,
+ 	do not set current_function_cannot_inline.
+ 	* resource.c (write_resource_constructor): Do not reset
+ 	flag_inline_functions around rest_of_compilation.
+ 
+ 2004-06-08  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR java/15769
+ 	* expr.c (java_truthvalue_conversion): Handle
+ 	UNEQ_EXPR, UNLE_EXPR, UNGE_EXPR, UNLT_EXPR, UNGT_EXPR,
+ 	ORDERED_EXPR, and UNORDERED_EXPR as comparison operators,
+ 	i.e. return the expression.
+ 
+ 2004-06-03 Mark G. Adams  <mark.g.adams@sympatico.ca>
+ 
+ 	* gjavah.c: Include version.h
+ 
+ 2004-05-31  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* jcf-write.c (generate_bytecode_conditional): Correct handling
+ 	of unordered conditionals. Add comment.
+ 
+ 2004-05-29  Ranjit Mathew  <rmathew@hotmail.com>
+ 	    Per Bothner  <per@bothner.com>
+ 
+ 	* java-tree.h (DECL_LOCAL_FINAL_IUD): New macro to test if a
+ 	local variable was initialised upon declaration.
+ 	* parse.y (declare_local_variables): Set DECL_LOCAL_FINAL_IUD if
+ 	variable was final and initialised upon declaration.
+ 	* check-init.c (check_final_reassigned): Give error only if a blank
+ 	final is not definitely unassigned or if an initialised final is
+ 	reassigned.
+ 	(check_bool_init): Respect JLS2 16.1.7 requirements for boolean
+ 	assignment expressions. Remove case MODIFY_EXPR, label do_default.
+ 	(check_init): Perform initialised-variable-removing-optimisation
+ 	only on non-final local variables.
+ 
+ 2004-05-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* jcf-write.c (generate_bytecode_conditional): Handle binops
+ 	UNLT_EXPR, UNLE_EXPR, UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR,
+ 	and LTGT_EXPR.
+ 	(generate_bytecode_insns): Likewise.
+ 
+ 2004-05-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* check-init.c (check_init): Handle binops UNLT_EXPR, UNLE_EXPR,
+     	UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR, and LTGT_EXPR.
+ 
+ 2004-05-28  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* gcj.texi (Object allocation): Remove _Jv_AllocBytes.
+ 	(Mixing with C++): Document JvAllocBytes and RawDataManaged.
+ 
+ 2004-05-26  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* decl.c (struct binding_level): Add GTY marker. Compile
+ 	binding_depth unconditionally.
+ 	(current_binding_level, free_binding_level, global_binding_level):
+ 	Likewise.
+ 	(clear_binding_level): Unconditionally set binding_depth.
+ 	(make_binding_level): Use ggc_alloc_cleared, not xmalloc.
+ 
+ 2004-05-26  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* lex.c (java_new_lexer): Set 'encoding'.
+ 	(java_read_char): Improve error message for unrecognized characters.
+ 	* lex.h (struct java_lexer): New field 'encoding'.
+ 
+ 2004-05-23  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Make-lang.in: Link in $(LIBCPP) instead of mkdeps.o.
+ 
+ 2004-05-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gjavah.c (print_stub_or_jni): Mark functions only JNIEXPORT, not
+ 	extern.
+ 
+ 2004-05-19  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* typeck.c: Remove non-printable character 160.
+ 
+ 2004-05-17  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* check-init.c: Correct minor typos.
+ 
+ 2004-05-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* Make-lang.in, expr.c, java-gimplify.c: Rename
+ 	tree-simple.[ch] to tree-gimple.[ch].
+ 
+ 2004-05-14  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java-gimplify.c (java_gimplify_expr): Correct minor typos.
+ 
+ 2004-05-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	Merge from tree-ssa-20020619-branch.  See
+ 	ChangeLog.tree-ssa for details.
+ 
+ 	* Make-lang.in, builtins.c, check-init.c, class.c,
+ 	constants.c, decl.c, except.c, expr.c, java-except.h,
+ 	java-tree.def, java-tree.h, jcf-parse.c, jcf-write.c,
+ 	lang.c, lang.opt, parse.y, resource.c: Merged.
+ 	* java-gimplify.c: New file.
+ 
+ 2004-05-10  Andrew Haley  <aph@redhat.com>
+ 
+ 	* parse.y (create_class): Set TYPE_VFIELD.
+ 	* decl.c (java_init_decl_processing): Likewise.
+ 
+ 	* expr.c (build_invokevirtual): Remove DECL_VINDEX offset adjustment.
+ 	* class.c (make_method_value): Replace DECL_VINDEX with call to
+ 	get_method_index().
+ 	(get_dispatch_vector): Likewise.
+ 	(layout_class_method): Likewise.
+ 	Replace set of DECL_VINDEX with call to set_method_index().
+ 	(set_method_index): New function.
+ 	(get_method_index): New function.
+ 	* java-tree.h (set_method_index): New function decl.
+ 	(get_method_index): New function decl.
+ 
+ 2004-05-10  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* parse.y (check_pkg_class_access): Add new argument
+ 	and use it when cl is NULL to call lookup_cl on it.
+ 	(parser_check_super_interface): Do not call lookup_cl.
+ 	Pass this_decl to check_pkg_class_access and NULL
+ 	instead of lookup_cl.
+ 	(parser_check_super): Update for change in
+ 	check_pkg_class_access.
+ 	(do_resolve_class): Likewise.
+ 	(process_imports): Likewise.
+ 	(find_in_imports_on_demand): Likewise.
+ 	(resolve_qualified_expression_name): Likewise.
+ 
+ 2004-05-06  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Fixes PR java/9685, PR java/15073
+ 	* parse.y (accessibility_string): New method.
+ 	(not_accessible_field_error): Use accessibility_string()
+ 	instead of java_accstring_lookup().
+ 	(resolve_qualified_expression_name): Check with
+ 	check_pkg_class_access() before allowing access using
+ 	qualified names.
+ 	Fix comment typo.
+ 	Use check_pkg_class_access() instead of not_accessible_p()
+ 	for unqualified types.
+ 	(not_accessible_p): Use DECL_CONTEXT (member) instead of
+ 	REFERENCE for package-private access checking.
+ 	(patch_method_invocation): Use accessibility_string() instead
+ 	of java_accstring_lookup().
+ 
+ 2004-04-30  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Fixes PR java/15133
+ 	* gjavah.c (struct method_name): Add member is_native.
+ 	(overloaded_jni_method_exists_p): Match candidate method only if
+ 	it is native.
+ 	(print_method_info): Initialise is_native flag from the method's
+ 	access flags.
+ 
+ 2004-04-30  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* builtins.c (java_builtins): Add acos, asin, ceil and floor.
+ 	(initialize_builtins): Likewise, define acos, asin, ceil and floor.
+ 
+ 2004-04-22  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* resource.c (write_resource_constructor): Guard call to possibly
+ 	NULL targetm.asm_out.constructor with targetm.have_ctors_dtors.
+ 
+ 2004-04-19  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* class.c (make_class_data): Add new field aux_info.
+ 	* decl.c (java_init_decl_processing): Push type and decl for
+ 	`aux_info'.
+ 
+ 2004-04-15  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* expr.c (expand_java_NEW): Don't use size argument for
+ 	_Jv_AllocObject calls.
+ 	* parse.y (patch_invoke): Likewise.
+ 
+ 2004-04-12  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* expr.c (build_invokeinterface): Remove unused variables to
+ 	fix warnings.
+ 
+ 2004-04-12  Bryce McKinlay  <mckinlay@redhat.com>
+ 
+ 	* class.c (get_interface_method_index): New function. Return dispatch
+ 	index for interface method.
+ 	(make_method_value): For interface methods, set index field to
+ 	iface dispatch index, not DECL_VINDEX.
+ 	* expr.c (build_invokeinterface): Use get_interface_method_index.
+ 
+ 2004-03-31  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	* jcf-write.c (generate_bytecode_insns): Use TYPE_UNSIGNED.
+ 
+ 2004-03-31  Andrew Haley  <aph@redhat.com>
+ 
+ 	PR java/14104
+ 	* jcf-io.c (opendir_in_zip): Tidy up error handling.
+ 
+ 2004-03-30  Zack Weinberg  <zack@codesourcery.com>
+ 
+ 	* builtins.c, expr.c, jcf.h, parse.h: Use new shorter
+ 	form of GTY markers.
+ 
+ 2004-03-25  Marcus Meissner  <meissner@suse.de>
+ 
+ 	PR java/14689:
+ 	* jcf-path.c (jcf_path_extdirs_arg): Add missing closedir.
+ 
+ 2004-03-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR java/14315:
+ 	* jcf-write.c (make_class_file_name): Don't report if mkdir
+ 	failed with EEXIST.
+ 
  2004-03-23  Tom Tromey  <tromey@redhat.com>
  
  	* gcj.texi (Extensions): Document GCJ_PROPERTIES.
  
! 2004-03-20  Kazu Hirata  <kazu@cs.umass.edu>
! 
! 	* class.c, gjavah.c, lang.c: Fix comment typos.
! 	* gcj.texi: Fix typos.
! 
! 2004-03-19  Per Bothner  <per@bothner.com>
! 
! 	* gcj.texi (Code Generation):  Document new flags and assert defaults.
! 
! 	* class.c (assume_compiled_node_struct):  Rename type to
! 	class_flag_node_struct, as it is now also used for enable_assertions.
! 	Rename assume_compiled_node typedef.  Rename excludep field to value.
! 	(find_assume_compiled_node):  Rename function to find_class_flag_node.
! 	Minor optimization - avoid needless strlen.
! 	(add_assume_compiled):  Some tweaking and optimization.
! 	Rename and generalize to add_class_flag takem an extra parameter.
! 	(add_assume_compled):  New just calls add_class_flag.
! 	(add_enable_assert, enable_assertions):  New functions.
! 	(enable_assert_tree):  New static.
! 	* java-tree.h (add_enable_assert, enable_assertions): New declarations.
! 	* lang.opt (fenable-assertions, fenable-assertions=,
! 	fdisable-assertions, fdisable-assertions=):  New options.
! 	* lang.c (java_handle_option):  Handle new options.
! 	* parse.y (build_incomplete_class_ref):  Handle class$ in an inner
! 	class in an interface - create helper class nested in outer interface.
! 	(build_assertion):  Short-circuit if enable_assertions is false.
! 
! 2004-03-18  Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
! 
! 	* java-tree.h: Changes throughout to add checking to macros
! 	and numerous whitespace changes.
! 	(VAR_OR_FIELD_CHECK): New macro.
! 	* jcf-write.c (get_access_flags): Use FIELD_PUBLIC, METHOD_PUBLIC,
! 	FIELD_FINAL, and METHOD_FINAL instead of CLASS_PUBLIC and CLASS_FINAL.
! 
! 2004-03-16  Per Bothner  <per@bothner.com>
! 
! 	* jcf-jump.c (options):  New --print-constants option.
! 	* gcj.texi (Invoking jcf-dump):  Document --print-constants.
! 
! 	* jcf-dump.c (flag_print_constant_pool):  Default to off.
! 	(print_constant_terse_with_index):  New helper function.
! 	(various places):  Check flag_print_constant_pool where missing.
! 	(main):  If verbose set flag_print_constant_pool.
! 	(HANDLE_INNERCLASSES_ATTRIBUTE):  Null inner class name is anonymous.
! 
! 2004-03-15  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/14581
! 	* parse.y (java_complete_lhs): Check that final variable has an
! 	initializer.
! 
! 2004-03-12  Andrew Haley  <aph@redhat.com>
! 
! 	PR java/14551
! 	* typeck.c (convert): Clear TREE_OVERFLOW after an integer
! 	conversion.
! 
! 2004-02-29  Roger Sayle  <roger@eyesopen.com>
  
  	* jcf-parse.c (java_parse_file): Handle the case that input_filename
  	is NULL.
  
+ 2004-02-27  Per Bothner  <per@bothner.com>
+ 
+ 	* parse.y (build_assertion):  Re-do 02-25 change following Jeff Sturm
+ 	suggestion:  Use build_incomplete_class_ref.
+ 	This fixes PR java/13508, java/11714.
+ 
+ 2004-02-27  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* java/parse.h: Update copyright.
+ 
  2004-02-26  Andrew Haley  <aph@redhat.com>
  
+ 	PR java/14231:
  	* parse.y (check_interface_throws_clauses): Check for
  	!METHOD_INVISIBLE (iface_method).
  	* class.c (layout_class_methods): Check for CLASS_INTERFACE as
  	well as CLASS_ABSTRACT.
  
! 2004-02-25  Per Bothner  <per@bothner.com>
  
! 	* parse.y (build_assertion):  If we're in an inner class, create the
! 	class$ helper routine in the outer class.
! 
! 2004-02-19  Richard Henderson  <rth@redhat.com>
! 
! 	* parse.y (switch_label): Use make_node for DEFAULT_EXPR.
! 
! 2004-02-16  Geoffrey Keating  <geoffk@apple.com>
! 
! 	* Make-lang.in (java.install-man): Add extra dependencies.
! 
! 2004-02-13  Geoffrey Keating  <geoffk@apple.com>
  
  	* Make-lang.in: Install man pages under the same names
  	(possibly transformed) as the program they document.
  
! 2004-02-10  Joseph S. Myers  <jsm@polyomino.org.uk>
  
! 	* gjavah.c: Include "intl.h".
! 	(error): New function.
! 	(main): Call gcc_init_libintl.
! 	(get_field_name, throwable_p, print_c_decl, print_full_cxx_name,
! 	print_stub_or_jni, process_file, main): Use error rather than
! 	fprintf.
! 	(print_method_info, usage, help, version, main): Mark strings for
! 	translation with _.  Avoid splitting up sentences.  Send
! 	information messages to stdout.
! 	* jcf-dump.c: Include "intl.h".
! 	(main): Call gcc_init_libintl.
! 	(process_class, usage, help, version, main, CHECK_PC_IN_RANGE):
! 	Mark error, usage and version messages for translation with _.
! 	Avoid splitting up sentences.
! 	* jv-scan.c: Include "intl.h".
! 	(fatal_error, warning): Change parameter s to msgid.  Translate
! 	messages.
! 	(main): Call gcc_init_libintl.
! 	(usage, help, version): Mark error, usage and version messages for
! 	translation with _.  Avoid splitting up sentences.
! 	* jvgenmain.c: Include "intl.h".
! 	(main): Call gcc_init_libintl.
! 	(usage, main): Mark error messages for translation with _.
! 	* Make-lang.in (GCJH_OBJS, JVSCAN_OBJS, JCFDUMP_OBJS,
! 	JVGENMAIN_OBJS): Add intl.o.
! 	(java/jcf-dump.o, java/gjavah.o, java/jv-scan.o,
! 	java/jvgenmain.o): Update dependencies.
  
! 2004-02-08  Per Bothner  <per@bothner.com>
  
! 	* parse.y (resolve_qualified_expression_name):  In case of inaccessible
! 	class don't use not_accessible_field_error, which can get confused.
  
  2004-02-05  Kelley Cook  <kcook@gcc.gnu.org>
  
  	Make-lang.in (po-generated):  Delete.
  
+ 2004-02-05  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* Make-lang.in (java/decl.o, java/expr.o, java/parse.o):
+ 	Depend on target.h.
+ 	* decl.c: Include target.h.
+ 	(start_java_method): Replace PROMOTE_PROTOTYPES with
+ 	targetm.calls.promote_prototypes.
+ 	* expr.c: Include target.h.
+ 	(pop_arguments): Replace PROMOTE_PROTOTYPES with
+ 	targetm.calls.promote_prototypes.
+ 	* parse.y: Include target.h.
+ 	(start_complete_expand_method): Replace PROMOTE_PROTOTYPES
+ 	with targetm.calls.promote_prototypes.
+ 
+ 2004-02-04  Kazu Hirata  <kazu@cs.umass.edu>
+ 
+ 	* typeck.c: Update copyright.
+ 
+ 2004-02-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* decl.c (java_init_decl_processing): Remove duplicate
+ 	gnu/gcj/RawData.
+ 
  2004-01-30  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Make-lang.in (doc/gcj.dvi): Use $(abs_docdir).
***************
*** 86,98 ****
  	* parse.y (check_interface_throws_clauses): Make sure class_decl
  	has been loaded.
  
  2004-01-20  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Make-lang.in: Replace $(docdir) with doc.
  	(java.info, java.srcinfo, java.man, java.srcman): New rules.
  	(java.install-man): Revamp rule.
  
! 2004-01-19  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Make-lang.in (JAVA_INSTALL_NAME, JAVA_TARGET_INSTALL_NAME,
  	GCJH_TARGET_INSTALL_NAME): Define via a immediate $(shell)
--- 2509,2527 ----
  	* parse.y (check_interface_throws_clauses): Make sure class_decl
  	has been loaded.
  
+ 2004-01-22  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	PR java/13733
+ 	* parse.y (patch_assignment): Don't modify lhs_type for
+ 	reference assignments.
+ 
  2004-01-20  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Make-lang.in: Replace $(docdir) with doc.
  	(java.info, java.srcinfo, java.man, java.srcman): New rules.
  	(java.install-man): Revamp rule.
  
! 2004-01-20  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* Make-lang.in (JAVA_INSTALL_NAME, JAVA_TARGET_INSTALL_NAME,
  	GCJH_TARGET_INSTALL_NAME): Define via a immediate $(shell)
***************
*** 14272,14278 ****
  	java.lang.Object.
  	(register_fields): Field initialization is now a MODIFY_EXPR
  	node. Chain initialization code to the matching lists (according
! 	the the field declaration modifiers).
  	(maybe_generate_clinit): New function.
  	(method_header): Don't set method's DECL_NAME to a WFL when adding
  	methods to java.lang.Object.
--- 16701,16707 ----
  	java.lang.Object.
  	(register_fields): Field initialization is now a MODIFY_EXPR
  	node. Chain initialization code to the matching lists (according
! 	to the field declaration modifiers).
  	(maybe_generate_clinit): New function.
  	(method_header): Don't set method's DECL_NAME to a WFL when adding
  	methods to java.lang.Object.
diff -Nrcpad gcc-3.4.3/gcc/java/ChangeLog.tree-ssa gcc-4.0.0/gcc/java/ChangeLog.tree-ssa
*** gcc-3.4.3/gcc/java/ChangeLog.tree-ssa	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/java/ChangeLog.tree-ssa	Thu May 13 06:40:33 2004
***************
*** 0 ****
--- 1,360 ----
+ 2004-05-10  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java-gimplify.c (java_gimplify_expr): Copy the LHS of a binary
+ 	expression into a temporary variable.
+ 
+ 	(java_gimplify_new_array_init): Set the DECL_CONTEXT of array and
+ 	tmp to current_function_decl.
+ 	
+ 2004-04-13  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* expr.c (build_expr_wfl): Don't check type nodes for
+ 	side effects.
+ 
+ 2004-04-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* decl.c (java_expand_stmt): Remove.
+ 	* lang.c (LANG_HOOKS_RTL_EXPAND_STMT): Remove.
+ 
+ 2004-02-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* java-gimplify.c (java_gimplify_new_array_init): Remove extra
+ 	argument building BLOCK.
+ 
+ 2004-02-19  Steven Bosscher  <stevenb@suse.de>
+ 
+ 	* decl.c (poplevel): Don't output nested inline functions.
+ 
+ 2004-02-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* builtins.c (java_build_function_call_expr): Add static chain
+ 	operand to call_expr.
+ 
+ 2004-01-29  Richard Henderson  <rth@redhat.com>
+ 
+         PR java/12906
+         * decl.c (maybe_pushlevels): Careful with TREE_CHAIN when
+         registering decls with push_jvm_slot.
+ 
+ 2003-12-10  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* parse.y (resolve_field_access): Remove superfluous
+ 	initialization of decl.
+ 
+ 2003-12-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* lang.c (java_post_options): Don't ever use rtl inlining.
+ 
+ 2003-12-06  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* parse.y (resolve_field_access): Initialize decl.
+ 
+ 2003-11-31  Richard Henderson  <rth@redhat.com>
+ 
+ 	* lang.c (java_start_inlining): Remove.
+ 	(LANG_HOOKS_TREE_INLINING_START_INLINING): Remove.
+ 
+ 2003-11-31  Richard Henderson  <rth@redhat.com>
+ 
+         * jcf-parse.c (java_parse_file): Finalize cgraph after emitting
+         class tables.
+ 
+ 2003-11-24  Richard Henderson  <rth@redhat.com>
+ 
+ 	* Make-lang.in (parse.o): Remove -Wno-error.
+ 
+ 2003-11-20  Richard Henderson <rth@redhat.com>
+ 
+ 	* constants.c (build_constant_data_ref): Lay out the array type.
+ 
+ 2003-11-20  Richard Henderson <rth@redhat.com>
+ 
+ 	* class.c (build_indirect_class_ref): Use convert.
+ 	* constants.c (build_constant_data_ref): Fix type on the decl
+ 	and return that directly.
+ 	(build_constants_constructor): Remove kruft to match.
+ 	(build_ref_from_constant_pool): Use ARRAY_REF.
+ 	* expr.c (build_java_indirect_ref): Use convert.
+ 	(build_known_method_ref): Likewise.
+ 	* parse.y (patch_string_cst): Likewise.
+ 
+ 	* class.c (finish_class): Kill code to output_inline_function.
+ 
+ 2003-11-12  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR optimization/12547
+ 	* lang.c (java_tree_inlining_walk_subtrees): Restore.
+ 	(LANG_HOOKS_TREE_INLINING_WALK_SUBTREES): Restore.
+ 
+ 2003-11-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* java-gimplify.c (java_gimplify_expr): Use annotate_with_locus
+ 	instead of annotate_all_with_locus.
+ 
+ 2003-11-10  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c: Use append_to_statement_list instead of add_tree.
+ 
+ 2003-10-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* java-gimplify.c (cleanup_compound_expr): Remove.
+ 	(cleanup_try_finally_expr): Remove.
+ 	(java_gimplify_expr): Don't call them.
+ 	(java_gimplify_case_expr): Use create_artificial_label.
+ 	(java_gimplify_default_expr): Likewise.
+ 
+ 2003-10-30  Richard Henderson  <rth@redhat.com>
+ 
+ 	* expr.c (expand_java_switch, expand_java_add_case): New.
+ 	(LOOKUP_SWITCH, TABLE_SWITCH): Use them.
+ 
+ 2003-10-23  Richard Henderson  <rth@redhat.com>
+ 
+ 	* java-gimplify.c (java_gimplify_expr): Return gimplify_status.
+ 
+ 2003-10-14  Richard Henderson  <rth@redhat.com>
+ 
+ 	* decl.c (finish_method): Set cfun->function_end_locus.
+ 	* java-gimplify.c (java_gimplify_expr): Set input_location
+ 	for EXPR_WITH_FILE_LOCATION.  Use annotate_all_with_locus.
+ 	* parse.h (DECL_SOURCE_LINE_MERGE): Remove.
+ 	(DECL_SOURCE_LINE_FIRST, DECL_SOURCE_LINE_LAST): Remove.
+ 	* parse.y (missing_return_error): Use DECL_FUNCTION_LAST_LINE.
+ 	(finish_method_declaration): Likewise.
+ 	(start_artificial_method_body): Likewise.
+ 	(lookup_cl): Use DECL_SOURCE_LINE.
+ 	(start_complete_expand_method): Likewise.
+ 	(java_complete_lhs): Fix IS_EXPR_CODE_CLASS check.
+ 
+ 2003-10-13  Richard Henderson  <rth@redhat.com>
+ 
+ 	* decl.c (java_add_stmt): Use annotate_with_locus.
+ 
+ 2003-10-13  Richard Henderson  <rth@redhat.com>
+ 
+         * expr.c (build_java_jsr): Don't emit LABEL_EXPR or
+         load_type_state here.
+ 
+ 2003-10-12  Richard Henderson  <rth@redhat.com>
+ 
+ 	* class.c (build_utf8_ref, get_dispatch_table): Set TREE_INVARIANT.
+ 	(make_class_data, build_symbol_entry, emit_symbol_table): Likewise.
+ 	* decl.c (java_init_decl_processing): Likewise.
+ 	* except.c (prepare_eh_table_type): Likewise.
+ 	* parse.y (patch_assignment, patch_binop): Likewise.
+ 	(patch_string_cst, patch_new_array_init): Likewise.
+ 	* resource.c (compile_resource_data): Likewise.
+ 
+ 2003-10-08  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* decl.c (cgraph.h): Include.
+ 	(tree-inline.h, tree-dump.h, tree-flow.h): Remove includes.
+ 	(complete_start_java_method): Remove.
+ 	(start_java_method): Combine with complete_start_java_method.
+ 	Remove dead code.
+ 	(end_java_method): Don't patch or expand tree.
+ 	Use finish_method.
+ 	(finish_method): New function.
+ 	(java_expand_body): Use tree_rest_of_compilation.
+ 	(java_expand_stmt): New function.
+ 
+ 	* java-gimplify.c (tree-dump.h): Include.
+ 	(java_genericize): New function.
+ 	(dump_java_tree): Declare.  New function.
+ 
+ 	* java-tree.h (start_complete_expand_method): Remove declaration.
+ 	(complete_start_java_method): Remove declaration.
+ 	(finish_method, java_expand_stmt, java_genericize): Declare.
+ 
+ 	* lang.c (LANG_HOOKS_RTL_EXPAND_STMT): Define.
+ 
+ 	* parse.y (tree-inline.h, tree-dump.h, tree-flow.h,
+ 	cgraph.h): Remove includes.
+ 	(start_complete_expand_method): Declare.
+ 	(source_end_java_method): Don't expand tree.  Use finish_method.
+ 	Reset current_function_decl.
+ 	(java_expand_method_bodies): Don't patch tree for class
+ 	initialization or method synchronization.
+ 
+ 2003-10-01  Richard Henderson  <rth@redhat.com>
+ 
+         * decl.c (end_java_method): Invoke remove_useless_stmts_and_vars
+         and lower_eh_constructs.
+         * parse.y (source_end_java_method): Likewise.
+ 
+ 2003-09-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	* decl.c, jcf-parse.c, jcf-write.c, parse.h, parse.y, resource.c:
+ 	Revert from TREE_LOCUS to DECL_SOURCE_LOCATION.
+ 	
+ 2003-09-18  Richard Henderson  <rth@redhat.com>
+ 
+         * lang.c (java_estimate_num_insns): Take an expr, not a decl.
+ 
+ 2003-08-12  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* java-gimplify.c (java_gimplify_block): If the body is a
+ 	NULL_TREE, return an empty statement.
+ 
+ 2003-08-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	* parse.y (source_end_java_method): Support
+ 	!keep_function_tree_in_gimple_form.
+ 	Do TDI_generic dump.
+ 
+ 2003-07-31  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java-tree.h: (add_stmt_to_compound): New function.
+ 	(java_add_stmt): New function.
+ 	(java_add_local_var): New function.
+ 	(get_stmts): New function.
+ 	* java-gimplify.c (java_gimplify_block): Allow for null body.
+ 	* except.c (link_handler): Set h->stmt.
+ 	(expand_start_java_handler): Build a TRY_CATCH_EXPR for this
+ 	range;  don't expand_eh_region_start.
+ 	(expand_end_java_handler): Rewrite.
+ 	* java-except.h (stmt): New field.
+ 	* expr.c (flush_quick_stack): Replace expand_assignment with
+ 	java_add_stmt.
+ 	(java_stack_dup): Replace emit_move_insn with java_add_stmt.
+ 	(build_java_athrow): Replace expand_expr_stmt with java_add_stmt.
+ 	(build_java_jsr): Replace emit_jump with java_add_stmt (build (GOTO_EXPR))
+ 	(build_java_ret): Replace expand_computed_goto with 
+ 	java_add_stmt (build (GOTO_EXPR))
+ 	(expand_java_arraystore): Replace expand_assignment with
+ 	java_add_stmt.
+ 	(expand_java_return): Replace expand_return with 
+ 	java_add_stmt (build (RETURN_EXPR))
+ 	(expand_load_internal): Remove layout_decl, DECL_REGISTER,
+ 	expand_decl, and expand_decl_init.  Instead, add the local
+ 	variable and a MODIFY_EXPR to the current tree.
+ 	(expand_iinc): Replace expand_assignment with
+ 	java_add_stmt.
+ 	(expand_compare): Replace expand_cond with
+ 	java_add_stmt(build (COND_EXPR))
+ 	(expand_java_goto): Replace expand_goto with 
+ 	java_add_stmt (build (GOTO_EXPR))
+ 	(expand_invoke): Replace expand_expr_stmt with java_add_stmt.
+ 	(build_jni_stub): Generate a BIND_EXPR to hold the block we've
+ 	created.  Don't distinguish between source and byte compiler.
+ 	(expand_java_field_op):  Replace expand_assignment with
+ 	java_add_stmt.
+ 	(java_expand_expr): Abort.  No-one should call this function any
+ 	more.
+ 	(expand_byte_code): Replace expand_label with 
+ 	java_add_stmt (build (LABEL_EXPR))
+ 	(process_jvm_instruction): Replace build (JAVA_EXC_OBJ_EXPR) with
+ 	build_exception_object_ref.  Replace expand_assignment with
+ 	java_add_stmt.
+ 	* except.c (link_handler): Null stmt field.
+ 	(expand_start_java_handler): Don't expand_eh_region_start.
+ 	Instead, generate a TRY_CATCH_EXPR and insert it into the tree
+ 	we're building.
+ 	(expand_end_java_handler): Don't expand_start_all_catch.  Instead,
+ 	build a TRY_FINALLY_EXPR and wrap the catch block with it.
+ 	Don't expand_end_all_catch.
+ 	* decl.c (push_jvm_slot): Call pushdecl().
+ 	(find_local_variable): Give symbolic names to unnamed local
+ 	variables.
+ 	(struct binding_level: stmts): New field.
+ 	(poplevel): If any statements have been generated at this level,
+ 	create a BIND_EXPR to hold them and copy the variables to it.  If
+ 	we are at the outermost level, save this BIND_EXPR in the
+ 	DECL_SAVED_TREE of this function.
+ 	(maybe_pushlevels): Don't expand_start_bindings.
+ 	(maybe_poplevels): Don't expand_end_bindings.
+ 	(complete_start_java_method): Reorganize static initialization and
+ 	synchronization logic for source compiler.  Remove pushlevel and
+ 	expand_start_bindings for byte compiler.
+ 	(end_java_method): Don't expand_end_bindings.  Add static
+ 	initialization and synchronization logic for byte compiler.
+ 	Set cfun->x_whole_function_mode_p.
+ 	Call gimplify_function_tree and optimize_function_tree and
+ 	expand_expr_stmt.
+ 	(add_stmt_to_compound): New.
+ 	(java_add_stmt): New.
+ 	(java_add_local_var): New.
+ 	(get_stmts): New.
+ 	* parse.y (add_stmt_to_compound): Remove.
+ 	* jcf-parse.c (parse_class_file): Don't call expand_expr_stmt for
+ 	a native method -- we'll do that later.
+ 
+ 2003-07-27  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* expr.c (build_expr_wfl): Convert remaining K&R prototypes
+ 	to ISO C90.
+ 
+ 2003-06-28  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* java-gimplify.c (java_gimplify_block): Rebuild BLOCK_SUBBLOCKS.
+ 	* lang.c (flag_disable_gimple): Remove initialization.
+ 
+ 2003-06-23  Jeff Law  <law@redhat.com>
+ 
+ 	* Make-lang.in (java-gimplify.o): Add dependencies.
+ 
+ 2003-06-22  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* parse.y (source_end_java_method): Don't attempt to inline
+ 	or optimize trees if flag_disable_gimple.
+ 
+ 	* Make-lang.in (JAVA_OBJS): Remove java-tree-inline.o.
+ 
+ 2003-06-21  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* Make-lang.in (JAVA_OBJS): Add java-gimplify.o.
+ 
+ 	* decl.c (java_init_decl_processing): Initialize size_type_node.
+ 	(complete_start_java_method): Update DECL_SAVED_TREE.
+ 	(dump_function): Remove.
+ 	(java_optimize_inline): Remove.
+ 
+ 	* expr.c (always_initialize_class_p): Initialize to 1.
+ 	(build_instanceof): Build proper boolean condition.
+ 	(build_class_init): Set DECL_INITIAL for init_test_decl.
+ 	(force_evaluation_order): Don't save_expr a void expr node.
+ 
+ 	* java-gimplify.c: New file.
+ 
+ 	* java-tree.h (java_gimplify_expr): Declare.
+ 
+ 	* lang.c (java_tree_inlining_walk_subtrees): Remove declaration.
+ 	(flag_optimize_sci): Initialize to 0.
+ 	(LANG_HOOKS_TREE_INLINING_WALK_SUBTREES): Remove define.
+ 	(LANG_HOOKS_SIMPLIFY_EXPR): Add define.
+ 	(java_tree_inlining_walk_subtrees): Remove function.
+ 	(java_init): Set flag_disable_gimple to 1.
+ 
+ 	* parse.y (source_end_java_method): Set cfun->x_whole_function_mode_p.
+ 	Gimplify.  Optimize tree before expanding.  Update comments.
+ 	(java_expand_method_bodies): Always save DECL_SAVED_TREE.
+ 	(patch_invoke): Don't save_expr force_evaluation_order result.
+ 	(patch_assignment): Use simpler compound expression.
+ 	(patch_if_else_statement): Don't optimize constant condition nodes.
+ 
+ 2003-03-02  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* class.c: Replace DECL_SOURCE_FILE with TREE_FILENAME and
+ 	DECL_SOURCE_LINE with TREE_LINENO everywhere.
+ 
+ 2003-02-03  Diego Novillo  <dnovillo@redhat.com>
+ 
+ 	* parse.y (qualify_ambiguous_name): Initialize variable 'decl'.
+ 
+ 2003-01-15  Jeff Law <law@redhat.com>
+ 
+ 	* class.c: Use TREE_FILENAME and TREE_LINENO to extract file/line
+ 	information from tree nodes.  Use annotate_with_file_line to
+ 	annotate tree nodes with file/line information.
+ 	* decl.c, jcf-parse.c, jcf-write.c, parse.h: Likewise.
+ 	* parse.y: Likewise.
+ 	* expr.c (java_expand_expr): Handle EXPR_WITH_FILE_LOCATION nodes.
+ 	(build_expr_wfl): New function.
+ 	* java-tree.def (EXPR_WITH_FILE_LOCATION): New node.
+ 	* java-tree.h (EXPR_WFL_*): New macros.
+ 	(build_expr_wfl): Declare.
+ 
+ Local Variables:
+ mode: change-log
+ change-log-default-name: "ChangeLog.tree-ssa"
+ End:
diff -Nrcpad gcc-3.4.3/gcc/java/Make-lang.in gcc-4.0.0/gcc/java/Make-lang.in
*** gcc-3.4.3/gcc/java/Make-lang.in	Wed Apr 14 19:45:18 2004
--- gcc-4.0.0/gcc/java/Make-lang.in	Sat Mar 12 02:16:28 2005
***************
*** 1,7 ****
  # Top level -*- makefile -*- fragment for the GNU compiler for the Java(TM)
  # language.
! #   Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004
! #   Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
--- 1,6 ----
  # Top level -*- makefile -*- fragment for the GNU compiler for the Java(TM)
  # language.
! #   Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
*************** gt-java-builtins.h gtype-java.h gt-java-
*** 103,128 ****
  # 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/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-tree-inline.o mkdeps.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 mkdeps.o errors.o ggc-none.o
  
! JVSCAN_OBJS = java/parse-scan.o java/jv-scan.o version.o
  
  JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \
! 		java/win32-host.o java/zextract.o errors.o version.o mkdeps.o ggc-none.o
  
! JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o
  
- # Use loose warnings for this front end.
- java-warn = $(WERROR)
  # String length warnings
  jvspec.o-warn = -Wno-error
  
  jc1$(exeext): $(JAVA_OBJS) $(BACKEND) $(LIBDEPS)
  	rm -f $@
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
--- 102,134 ----
  # 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 \
!   intl.o
  
! JVSCAN_OBJS = java/parse-scan.o java/jv-scan.o version.o intl.o
  
  JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \
! 		java/win32-host.o java/zextract.o errors.o version.o ggc-none.o intl.o
  
! JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o intl.o
! 
! # Use strict warnings for this front end.
! java-warn = $(STRICT_WARN)
  
  # String length warnings
  jvspec.o-warn = -Wno-error
  
+ # Bison-1.75 output often yields (harmless) -Wtraditional warnings
+ java/parse-scan.o-warn = -Wno-error
+ java/parse.o-warn = -Wno-error
+ 
  jc1$(exeext): $(JAVA_OBJS) $(BACKEND) $(LIBDEPS)
  	rm -f $@
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
*************** jc1$(exeext): $(JAVA_OBJS) $(BACKEND) $(
*** 130,136 ****
  
  gcjh$(exeext): $(GCJH_OBJS) $(LIBDEPS)
  	rm -f $@
! 	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GCJH_OBJS) $(ZLIB) $(LIBS)
  
  jv-scan$(exeext): $(JVSCAN_OBJS) $(LIBDEPS)
  	rm -f $@
--- 136,142 ----
  
  gcjh$(exeext): $(GCJH_OBJS) $(LIBDEPS)
  	rm -f $@
! 	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GCJH_OBJS) $(CPPLIBS) $(ZLIB) $(LIBS)
  
  jv-scan$(exeext): $(JVSCAN_OBJS) $(LIBDEPS)
  	rm -f $@
*************** jv-scan$(exeext): $(JVSCAN_OBJS) $(LIBDE
*** 139,145 ****
  jcf-dump$(exeext): $(JCFDUMP_OBJS) $(LIBDEPS)
  	rm -f $@
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(JCFDUMP_OBJS) \
! 		$(ZLIB) $(LDEXP_LIB) $(LIBS)
  
  jvgenmain$(exeext): $(JVGENMAIN_OBJS) $(LIBDEPS)
  	rm -f $@
--- 145,151 ----
  jcf-dump$(exeext): $(JCFDUMP_OBJS) $(LIBDEPS)
  	rm -f $@
  	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(JCFDUMP_OBJS) \
! 		$(CPPLIBS) $(ZLIB) $(LDEXP_LIB) $(LIBS)
  
  jvgenmain$(exeext): $(JVGENMAIN_OBJS) $(LIBDEPS)
  	rm -f $@
*************** java.srcinfo: doc/gcj.info
*** 166,173 ****
  	-cp -p $^ $(srcdir)/doc
  
  dvi:: doc/gcj.dvi
  JAVA_MANFILES = doc/gcj.1 doc/gcjh.1 doc/jv-scan.1 doc/jcf-dump.1 doc/gij.1 \
!                 doc/jv-convert.1 doc/rmic.1 doc/rmiregistry.1
  
  java.man: $(JAVA_MANFILES)
  
--- 172,181 ----
  	-cp -p $^ $(srcdir)/doc
  
  dvi:: doc/gcj.dvi
+ html:: $(htmldir)/java/index.html
  JAVA_MANFILES = doc/gcj.1 doc/gcjh.1 doc/jv-scan.1 doc/jcf-dump.1 doc/gij.1 \
!                 doc/jv-convert.1 doc/grmic.1 doc/grmiregistry.1 \
! 		doc/gcj-dbtool.1
  
  java.man: $(JAVA_MANFILES)
  
*************** java.install-common: installdirs
*** 207,213 ****
  	    rm -f $(DESTDIR)$(bindir)/$$tool_transformed_name$(exeext); \
  	    $(INSTALL_PROGRAM) $$tool$(exeext) $(DESTDIR)$(bindir)/$$tool_transformed_name$(exeext); \
  	    chmod a+x $(DESTDIR)$(bindir)/$$tool_transformed_name$(exeext); \
! 	    if [ $$tool = gcjh ]; then \
  	      rm -f $(DESTDIR)$(bindir)/$(GCJH_TARGET_INSTALL_NAME)$(exeext); \
  	      ( cd $(DESTDIR)$(bindir) && \
  	        $(LN) $$tool_transformed_name$(exeext) $(GCJH_TARGET_INSTALL_NAME)$(exeext) ); \
--- 215,223 ----
  	    rm -f $(DESTDIR)$(bindir)/$$tool_transformed_name$(exeext); \
  	    $(INSTALL_PROGRAM) $$tool$(exeext) $(DESTDIR)$(bindir)/$$tool_transformed_name$(exeext); \
  	    chmod a+x $(DESTDIR)$(bindir)/$$tool_transformed_name$(exeext); \
! 	    if [ -f $(GCJ)-cross$(exeext) ]; then \
! 	      true; \
! 	    elif [ $$tool = gcjh ]; then \
  	      rm -f $(DESTDIR)$(bindir)/$(GCJH_TARGET_INSTALL_NAME)$(exeext); \
  	      ( cd $(DESTDIR)$(bindir) && \
  	        $(LN) $$tool_transformed_name$(exeext) $(GCJH_TARGET_INSTALL_NAME)$(exeext) ); \
*************** java.uninstall:
*** 225,230 ****
--- 235,241 ----
  	-rm -rf $(DESTDIR)$(man1dir)/jcf-dump$(man1ext)
  	-rm -rf $(DESTDIR)$(man1dir)/gij$(man1ext)
  	-rm -rf $(DESTDIR)$(man1dir)/jv-convert$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/gcj-dbtool$(man1ext)
  
  install-info:: $(DESTDIR)$(infodir)/gcj.info
  
*************** java.maintainer-clean:
*** 247,254 ****
  	-rm -f $(docobjdir)/jv-scan.1 $(docobjdir)/jcf-dump.1
  	-rm -f $(docobjdir)/gij.1
  	-rm -f $(docobjdir)/jv-convert.1
! 	-rm -f $(docobjdir)/rmic.1
! 	-rm -f $(docobjdir)/rmiregistry.1
  #
  # Stage hooks:
  # The main makefile has already created stage?/java.
--- 258,266 ----
  	-rm -f $(docobjdir)/jv-scan.1 $(docobjdir)/jcf-dump.1
  	-rm -f $(docobjdir)/gij.1
  	-rm -f $(docobjdir)/jv-convert.1
! 	-rm -f $(docobjdir)/grmic.1
! 	-rm -f $(docobjdir)/grmiregistry.1
! 	-rm -f $(docobjdir)/gcj-dbtool.1
  #
  # Stage hooks:
  # The main makefile has already created stage?/java.
*************** JAVA_LEX_C = java/lex.c java/keyword.h j
*** 273,281 ****
  
  java/jcf-dump.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(JAVA_TREE_H) \
    java/jcf-dump.c java/jcf-reader.c java/jcf.h java/javaop.h java/javaop.def \
!   version.h $(GGC_H)
  java/gjavah.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(JAVA_TREE_H) \
!   java/gjavah.c java/jcf-reader.c java/jcf.h java/javaop.h version.h $(GGC_H)
  java/boehm.o: java/boehm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(TREE_H) $(JAVA_TREE_H) java/parse.h toplev.h
  java/buffer.o: java/buffer.c $(CONFIG_H) java/buffer.h $(SYSTEM_H) coretypes.h \
--- 285,294 ----
  
  java/jcf-dump.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(JAVA_TREE_H) \
    java/jcf-dump.c java/jcf-reader.c java/jcf.h java/javaop.h java/javaop.def \
!   version.h $(GGC_H) intl.h
  java/gjavah.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(JAVA_TREE_H) \
!   java/gjavah.c java/jcf-reader.c java/jcf.h java/javaop.h version.h $(GGC_H) \
!   intl.h
  java/boehm.o: java/boehm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(TREE_H) $(JAVA_TREE_H) java/parse.h toplev.h
  java/buffer.o: java/buffer.c $(CONFIG_H) java/buffer.h $(SYSTEM_H) coretypes.h \
*************** java/constants.o: java/constants.c $(CON
*** 291,304 ****
    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
  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/expr.o: java/expr.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h real.h \
    $(RTL_H) $(EXPR_H) java/javaop.h java/java-opcodes.h except.h \
    java/java-except.h java/java-except.h java/parse.h toplev.h \
!   $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) gt-java-expr.h
  java/jcf-depend.o: java/jcf-depend.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
    $(TM_H) java/jcf.h
  java/jcf-parse.o: java/jcf-parse.c $(CONFIG_H) $(JAVA_TREE_H) flags.h \
--- 304,318 ----
    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 
  java/expr.o: java/expr.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h real.h \
    $(RTL_H) $(EXPR_H) java/javaop.h java/java-opcodes.h except.h \
    java/java-except.h java/java-except.h java/parse.h toplev.h \
!   $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) gt-java-expr.h target.h
  java/jcf-depend.o: java/jcf-depend.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
    $(TM_H) java/jcf.h
  java/jcf-parse.o: java/jcf-parse.c $(CONFIG_H) $(JAVA_TREE_H) flags.h \
*************** java/jcf-write.o: java/jcf-write.c $(CON
*** 308,316 ****
    $(RTL_H) java/java-opcodes.h java/parse.h java/buffer.h $(SYSTEM_H) \
    coretypes.h $(TM_H) toplev.h $(GGC_H) gt-java-jcf-write.h $(TM_P_H)
  java/jv-scan.o: java/jv-scan.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!   version.h
  java/jvgenmain.o: java/jvgenmain.c $(CONFIG_H) $(JAVA_TREE_H) $(SYSTEM_H) \
!   coretypes.h $(TM_H)
  java/lang.o: java/lang.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h input.h \
    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
--- 322,330 ----
    $(RTL_H) java/java-opcodes.h java/parse.h java/buffer.h $(SYSTEM_H) \
    coretypes.h $(TM_H) toplev.h $(GGC_H) gt-java-jcf-write.h $(TM_P_H)
  java/jv-scan.o: java/jv-scan.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
!   version.h intl.h
  java/jvgenmain.o: java/jvgenmain.c $(CONFIG_H) $(JAVA_TREE_H) $(SYSTEM_H) \
!   coretypes.h $(TM_H) intl.h
  java/lang.o: java/lang.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h input.h \
    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/resource.o: java/resource.c $(CONFI
*** 323,341 ****
    $(TARGET_H) function.h gt-java-resource.h expr.h
  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) 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/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/parse-scan.o: java/parse-scan.c $(CONFIG_H) $(SYSTEM_H) \
    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
  
  # jcf-io.o needs $(ZLIBINC) added to cflags.
  java/jcf-io.o: java/jcf-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
--- 337,362 ----
    $(TARGET_H) function.h gt-java-resource.h expr.h
  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) \
+   coretypes.h $(TM_H) $(JAVA_TREE_H) tree-gimple.h toplev.h
+ 
  java/parse-scan.o: java/parse-scan.c $(CONFIG_H) $(SYSTEM_H) \
    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) \
*************** java/jcf-path.o: java/jcf-path.c $(CONFI
*** 351,379 ****
  	  -DDEFAULT_TARGET_VERSION=\"$(version)\" \
  	  $(srcdir)/java/jcf-path.c $(OUTPUT_OPTION)
  
! # jcf-tree-inline.o needs a -D.
! java/java-tree-inline.o: tree-inline.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
!   $(TM_H) $(TREE_H) $(RTL_H) expr.h flags.h params.h input.h insn-config.h \
!   $(INTEGRATE_H) $(VARRAY_H) $(HASHTAB_H) $(SPLAY_TREE_H) toplev.h \
!   langhooks.h $(C_COMMON_H) $(srcdir)/tree-inline.h
! 	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
! 	-DINLINER_FOR_JAVA=1 \
! 	$(srcdir)/tree-inline.c -o $@
  
  # Documentation
! doc/gcj.info: java/gcj.texi $(docdir)/include/fdl.texi \
!   $(docdir)/include/gpl.texi $(docdir)/include/gcc-common.texi
  	if test "x$(BUILD_INFO)" = xinfo; then \
  	  rm -f doc/gcj.info*; \
  	  $(MAKEINFO) $(MAKEINFOFLAGS) -I $(docdir)/include -o $@ $<; \
  	else true; fi
  
! doc/gcj.dvi: java/gcj.texi $(docdir)/include/fdl.texi \
! 	 $(docdir)/include/gpl.texi $(docdir)/include/gcc-common.texi
  	$(TEXI2DVI) -I $(abs_docdir)/include -o $@ $<
  
  .INTERMEDIATE: gcj.pod gcjh.pod jv-scan.pod jcf-dump.pod gij.pod \
!   jv-convert.pod rmic.pod rmiregistry.pod
  
  gcj.pod: java/gcj.texi
  	-$(TEXI2POD) -D gcj < $< > $@
--- 372,397 ----
  	  -DDEFAULT_TARGET_VERSION=\"$(version)\" \
  	  $(srcdir)/java/jcf-path.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)
  	if test "x$(BUILD_INFO)" = xinfo; then \
  	  rm -f doc/gcj.info*; \
  	  $(MAKEINFO) $(MAKEINFOFLAGS) -I $(docdir)/include -o $@ $<; \
  	else true; fi
  
! doc/gcj.dvi: $(TEXI_JAVA_FILES)
  	$(TEXI2DVI) -I $(abs_docdir)/include -o $@ $<
  
+ $(htmldir)/java/index.html: $(TEXI_JAVA_FILES)
+ 	$(mkinstalldirs) $(@D)
+ 	rm -f $(@D)/*
+ 	$(TEXI2HTML) -I $(docdir)/include -I $(srcdir)/java -o $(@D) $<
+ 
  .INTERMEDIATE: gcj.pod gcjh.pod jv-scan.pod jcf-dump.pod gij.pod \
!   jv-convert.pod grmic.pod grmiregistry.pod gcj-dbtool.pod
  
  gcj.pod: java/gcj.texi
  	-$(TEXI2POD) -D gcj < $< > $@
*************** gij.pod: java/gcj.texi
*** 387,404 ****
  	-$(TEXI2POD) -D gij < $< > $@
  jv-convert.pod: java/gcj.texi
  	-$(TEXI2POD) -D jv-convert < $< > $@
! rmic.pod: java/gcj.texi
! 	-$(TEXI2POD) -D rmic < $< > $@
! rmiregistry.pod: java/gcj.texi
! 	-$(TEXI2POD) -D rmiregistry < $< > $@
  
  # Install the man pages.
  java.install-man: installdirs \
                    $(DESTDIR)$(man1dir)/$(JAVA_INSTALL_NAME)$(man1ext) \
  		  $(JAVA_TARGET_INDEPENDENT_BIN_TOOLS:%=doc/%.1) \
! 		  doc/gij.1 doc/jv-convert.1 doc/rmic.1 doc/rmiregistry.1
  	for tool in $(JAVA_TARGET_INDEPENDENT_BIN_TOOLS) \
! 		gij jv-convert rmic rmiregistry ; do \
  	  tool_transformed_name=`echo $$tool|sed '$(program_transform_name)'`; \
  	  man_name=$(DESTDIR)$(man1dir)/$${tool_transformed_name}$(man1ext); \
  	  rm -f $$man_name ; \
--- 405,425 ----
  	-$(TEXI2POD) -D gij < $< > $@
  jv-convert.pod: java/gcj.texi
  	-$(TEXI2POD) -D jv-convert < $< > $@
! grmic.pod: java/gcj.texi
! 	-$(TEXI2POD) -D grmic < $< > $@
! grmiregistry.pod: java/gcj.texi
! 	-$(TEXI2POD) -D grmiregistry < $< > $@
! gcj-dbtool.pod: java/gcj.texi
! 	-$(TEXI2POD) -D gcj-dbtool < $< > $@
  
  # Install the man pages.
  java.install-man: installdirs \
                    $(DESTDIR)$(man1dir)/$(JAVA_INSTALL_NAME)$(man1ext) \
  		  $(JAVA_TARGET_INDEPENDENT_BIN_TOOLS:%=doc/%.1) \
! 		  doc/gij.1 doc/jv-convert.1 doc/grmic.1 doc/grmiregistry.1 \
! 		  doc/gcj-dbtool.1
  	for tool in $(JAVA_TARGET_INDEPENDENT_BIN_TOOLS) \
! 		gij jv-convert grmic grmiregistry gcj-dbtool ; do \
  	  tool_transformed_name=`echo $$tool|sed '$(program_transform_name)'`; \
  	  man_name=$(DESTDIR)$(man1dir)/$${tool_transformed_name}$(man1ext); \
  	  rm -f $$man_name ; \
*************** java.install-man: installdirs \
*** 406,411 ****
--- 427,433 ----
  	    if test -f $$source_name; then \
  	      $(INSTALL_DATA) $$source_name $$man_name; \
  	      break; \
+ 	      else : ; \
  	    fi; \
  	  done ; \
  	  chmod a-x $$man_name ; \
diff -Nrcpad gcc-3.4.3/gcc/java/boehm.c gcc-4.0.0/gcc/java/boehm.c
*** gcc-3.4.3/gcc/java/boehm.c	Sun Jan 12 02:14:55 2003
--- gcc-4.0.0/gcc/java/boehm.c	Fri Oct 15 14:55:00 2004
***************
*** 1,5 ****
  /* Functions related to the Boehm garbage collector.
!    Copyright (C) 2000, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Functions related to the Boehm garbage collector.
!    Copyright (C) 2000, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** static void
*** 46,52 ****
  set_bit (unsigned HOST_WIDE_INT *low, unsigned HOST_WIDE_INT *high,
  	 unsigned int n)
  {
!   HOST_WIDE_INT *which;
  
    if (n >= HOST_BITS_PER_WIDE_INT)
      {
--- 46,52 ----
  set_bit (unsigned HOST_WIDE_INT *low, unsigned HOST_WIDE_INT *high,
  	 unsigned int n)
  {
!   unsigned HOST_WIDE_INT *which;
  
    if (n >= HOST_BITS_PER_WIDE_INT)
      {
*************** set_bit (unsigned HOST_WIDE_INT *low, un
*** 56,62 ****
    else
      which = low;
  
!   *which |= (HOST_WIDE_INT) 1 << n;
  }
  
  /* Recursively mark reference fields.  */
--- 56,62 ----
    else
      which = low;
  
!   *which |= (unsigned HOST_WIDE_INT) 1 << n;
  }
  
  /* Recursively mark reference fields.  */
*************** get_boehm_type_descriptor (tree type)
*** 146,157 ****
    HOST_WIDE_INT last_view_index = -1;
    int pointer_after_end = 0;
    unsigned HOST_WIDE_INT low = 0, high = 0;
!   tree field, value;
  
    /* If the GC wasn't requested, just use a null pointer.  */
    if (! flag_use_boehm_gc)
      return null_pointer_node;
  
    /* If we have a type of unknown size, use a proc.  */
    if (int_size_in_bytes (type) == -1)
      goto procedure_object_descriptor;
--- 146,158 ----
    HOST_WIDE_INT last_view_index = -1;
    int pointer_after_end = 0;
    unsigned HOST_WIDE_INT low = 0, high = 0;
!   tree field, value, value_type;
  
    /* If the GC wasn't requested, just use a null pointer.  */
    if (! flag_use_boehm_gc)
      return null_pointer_node;
  
+   value_type = java_type_for_mode (ptr_mode, 1);
    /* If we have a type of unknown size, use a proc.  */
    if (int_size_in_bytes (type) == -1)
      goto procedure_object_descriptor;
*************** get_boehm_type_descriptor (tree type)
*** 205,217 ****
  	  last_set_index >>= 1;
  	  ++count;
  	}
!       value = build_int_2 (low, high);
      }
    else if (! pointer_after_end)
      {
        /* Bottom two bits for bitmap mark type are 01.  */
        set_bit (&low, &high, 0);
!       value = build_int_2 (low, high);
      }
    else
      {
--- 206,218 ----
  	  last_set_index >>= 1;
  	  ++count;
  	}
!       value = build_int_cst_wide (value_type, low, high);
      }
    else if (! pointer_after_end)
      {
        /* Bottom two bits for bitmap mark type are 01.  */
        set_bit (&low, &high, 0);
!       value = build_int_cst_wide (value_type, low, high);
      }
    else
      {
*************** get_boehm_type_descriptor (tree type)
*** 222,230 ****
  	    | DS_PROC)
  	 Here DS_PROC == 2.  */
      procedure_object_descriptor:
!       value = build_int_2 (2, 0);
      }
  
-   TREE_TYPE (value) = java_type_for_mode (ptr_mode, 1);
    return value;
  }
--- 223,230 ----
  	    | DS_PROC)
  	 Here DS_PROC == 2.  */
      procedure_object_descriptor:
!       value = build_int_cst (value_type, 2);
      }
  
    return value;
  }
diff -Nrcpad gcc-3.4.3/gcc/java/builtins.c gcc-4.0.0/gcc/java/builtins.c
*** gcc-3.4.3/gcc/java/builtins.c	Sun Oct  5 02:52:33 2003
--- gcc-4.0.0/gcc/java/builtins.c	Sat Feb 12 15:21:13 2005
***************
*** 1,5 ****
  /* Built-in and inline functions for gcj
!    Copyright (C) 2001, 2003
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Built-in and inline functions for gcj
!    Copyright (C) 2001, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** struct builtin_record GTY(())
*** 65,71 ****
  {
    union string_or_tree GTY ((desc ("1"))) class_name;
    union string_or_tree GTY ((desc ("1"))) method_name;
!   builtin_creator_function * GTY((skip (""))) creator;
    enum built_in_function builtin_code;
  };
  
--- 65,71 ----
  {
    union string_or_tree GTY ((desc ("1"))) class_name;
    union string_or_tree GTY ((desc ("1"))) method_name;
!   builtin_creator_function * GTY((skip)) creator;
    enum built_in_function builtin_code;
  };
  
*************** static GTY(()) struct builtin_record jav
*** 74,83 ****
--- 74,87 ----
    { { "java.lang.Math" }, { "min" }, min_builtin, 0 },
    { { "java.lang.Math" }, { "max" }, max_builtin, 0 },
    { { "java.lang.Math" }, { "abs" }, abs_builtin, 0 },
+   { { "java.lang.Math" }, { "acos" }, NULL, BUILT_IN_ACOS },
+   { { "java.lang.Math" }, { "asin" }, NULL, BUILT_IN_ASIN },
    { { "java.lang.Math" }, { "atan" }, NULL, BUILT_IN_ATAN },
    { { "java.lang.Math" }, { "atan2" }, NULL, BUILT_IN_ATAN2 },
+   { { "java.lang.Math" }, { "ceil" }, NULL, BUILT_IN_CEIL },
    { { "java.lang.Math" }, { "cos" }, NULL, BUILT_IN_COS },
    { { "java.lang.Math" }, { "exp" }, NULL, BUILT_IN_EXP },
+   { { "java.lang.Math" }, { "floor" }, NULL, BUILT_IN_FLOOR },
    { { "java.lang.Math" }, { "log" }, NULL, BUILT_IN_LOG },
    { { "java.lang.Math" }, { "pow" }, NULL, BUILT_IN_POW },
    { { "java.lang.Math" }, { "sin" }, NULL, BUILT_IN_SIN },
*************** static GTY(()) struct builtin_record jav
*** 92,108 ****
  static tree
  max_builtin (tree method_return_type, tree method_arguments)
  {
!   return fold (build (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 (build (MIN_EXPR, method_return_type,
! 		      TREE_VALUE (method_arguments),
! 		      TREE_VALUE (TREE_CHAIN (method_arguments))));
  }
  
  static tree
--- 96,112 ----
  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
*************** java_build_function_call_expr (tree fn, 
*** 119,126 ****
    tree call_expr;
  
    call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
!   call_expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
! 		     call_expr, arglist);
    TREE_SIDE_EFFECTS (call_expr) = 1;
    return fold (call_expr);
  }
--- 123,130 ----
    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_builtin (enum built_in_function v
*** 140,146 ****
    DECL_EXTERNAL (decl) = 1;
    TREE_PUBLIC (decl) = 1;
    SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
!   make_decl_rtl (decl, NULL);
    pushdecl (decl);
    DECL_BUILT_IN_CLASS (decl) = BUILT_IN_NORMAL;
    DECL_FUNCTION_CODE (decl) = val;
--- 144,150 ----
    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;
*************** initialize_builtins (void)
*** 186,199 ****
--- 190,211 ----
    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",
*************** initialize_builtins (void)
*** 204,209 ****
--- 216,223 ----
  		  double_ftype_double, "_ZN4java4lang4Math4sqrtEd");
    define_builtin (BUILT_IN_TAN, "__builtin_tan",
  		  double_ftype_double, "_ZN4java4lang4Math3tanEd");
+ 
+   build_common_builtin_nodes ();
  }
  
  /* If the call matches a builtin, return the
diff -Nrcpad gcc-3.4.3/gcc/java/check-init.c gcc-4.0.0/gcc/java/check-init.c
*** gcc-3.4.3/gcc/java/check-init.c	Sun Sep 28 22:18:32 2003
--- gcc-4.0.0/gcc/java/check-init.c	Mon Jan 10 18:01:04 2005
***************
*** 1,5 ****
  /* Code to test for "definitive [un]assignment".
!    Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,6 ----
  /* Code to test for "definitive [un]assignment".
!    Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation,
!    Inc.
  
  This file is part of GCC.
  
*************** static void check_final_reassigned (tree
*** 164,169 ****
--- 165,175 ----
  static tree
  get_variable_decl (tree exp)
  {
+   /* A static field can be wrapped in a COMPOUND_EXPR where the first
+      argument initializes the class.  */
+   if (TREE_CODE (exp) == COMPOUND_EXPR)
+     exp = extract_field_decl (exp);
+ 
    if (TREE_CODE (exp) == VAR_DECL)
      {
        if (! TREE_STATIC (exp) ||  FIELD_FINAL (exp))
*************** get_variable_decl (tree exp)
*** 191,205 ****
  	    return op1;
  	}
      }
    return NULL_TREE;
  }
  
  static void
  final_assign_error (tree name)
  {
!   static const char format[]
!     = "can't reassign a value to the final variable '%s'";
!   parse_error_context (wfl, format, IDENTIFIER_POINTER (name));
  }
  
  static void
--- 197,255 ----
  	    return op1;
  	}
      }
+   else if (TREE_CODE (exp) == INDIRECT_REF)
+     {
+       /* For indirect dispatch, look for an expression of the form 
+       (indirect_ref (+ (array_ref otable <N>) this)).  
+       FIXME: it would probably be better to generate a JAVA_FIELD_REF
+       expression that gets converted to OTABLE access at
+       gimplification time.  */
+       exp = TREE_OPERAND (exp, 0);
+       if (TREE_CODE (exp) == PLUS_EXPR)
+ 	{
+ 	  tree op0 = TREE_OPERAND (exp, 0);
+ 	  STRIP_NOPS (op0);
+ 	  if (TREE_CODE (op0) == ARRAY_REF)
+ 	    {
+ 	      tree table = TREE_OPERAND (op0, 0);
+ 	      if (TREE_CODE (table) == VAR_DECL
+ 		  && DECL_LANG_SPECIFIC (table)
+ 		  && DECL_OWNER (table) 
+ 		  && TYPE_OTABLE_DECL (DECL_OWNER (table)) == table)
+ 		{
+ 		  HOST_WIDE_INT index 
+ 		    = TREE_INT_CST_LOW (TREE_OPERAND (op0, 1));
+ 		  tree otable_methods 
+ 		    = TYPE_OTABLE_METHODS (DECL_OWNER (table));
+ 		  tree element;
+ 		  for (element = otable_methods; 
+ 		       element; 
+ 		       element = TREE_CHAIN (element))
+ 		    {
+ 		      if (index == 1)
+ 			{
+ 			  tree purpose = TREE_PURPOSE (element);
+ 			  if (TREE_CODE (purpose) == FIELD_DECL)
+ 			    return purpose;
+ 			  else
+ 			    return NULL_TREE;
+ 			}
+ 		      --index;
+ 		    }
+ 		}
+ 	    }
+ 	}
+     }
+ 
    return NULL_TREE;
  }
  
  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
*************** check_final_reassigned (tree decl, words
*** 210,216 ****
       assigned must be reported as errors */
    if (DECL_FINAL (decl) && index != -2
        && (index < loop_current_locals /* I.e. -1, or outside current loop. */
! 	  || ! UNASSIGNED_P (before, index)))
      {
        final_assign_error (DECL_NAME (decl));
      }
--- 260,267 ----
       assigned must be reported as errors */
    if (DECL_FINAL (decl) && index != -2
        && (index < loop_current_locals /* I.e. -1, or outside current loop. */
!           || (DECL_LOCAL_FINAL_IUD (decl) ? ASSIGNED_P (before, index)
!               : ! UNASSIGNED_P (before, index))))
      {
        final_assign_error (DECL_NAME (decl));
      }
*************** check_bool_init (tree exp, words before,
*** 337,363 ****
      case TRUTH_NOT_EXPR:
        check_bool_init (TREE_OPERAND (exp, 0), before, when_true, when_false);
        return;
-     case MODIFY_EXPR:
-       {
- 	tree tmp = TREE_OPERAND (exp, 0);
- 	if ((tmp = get_variable_decl (tmp)) != NULL_TREE)
- 	  {
- 	    int index;
- 	    check_bool_init (TREE_OPERAND (exp, 1), before,
- 			     when_false, when_true);
- 	    check_final_reassigned (tmp, before);
- 	    index = DECL_BIT_INDEX (tmp);
- 	    if (index >= 0)
- 	      {
- 		SET_ASSIGNED (when_false, index);
- 		SET_ASSIGNED (when_true, index);
- 		CLEAR_UNASSIGNED (when_false, index);
- 		CLEAR_UNASSIGNED (when_true, index);
- 	      }
- 	    break;
- 	  }
-       }
-       goto do_default;
  
      case BIT_AND_EXPR:
      case BIT_IOR_EXPR:
--- 388,393 ----
*************** check_bool_init (tree exp, words before,
*** 390,397 ****
  	  COPY (when_true, before);
  	}
        break;
      default:
-     do_default:
        check_init (exp, before);
        COPY (when_false, before);
        COPY (when_true, before);
--- 420,427 ----
  	  COPY (when_true, before);
  	}
        break;
+ 
      default:
        check_init (exp, before);
        COPY (when_false, before);
        COPY (when_true, before);
*************** check_init (tree exp, words before)
*** 486,492 ****
  	      && index >= 0 && ! ASSIGNED_P (before, index))
  	    {
  	      parse_error_context 
! 		(wfl, "Variable `%s' may not have been initialized",
  		 IDENTIFIER_POINTER (DECL_NAME (exp)));
  	      /* Suppress further errors. */
  	      DECL_BIT_INDEX (exp) = -2;
--- 516,522 ----
  	      && 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;
*************** check_init (tree exp, words before)
*** 502,508 ****
  	  if (index >= 0 && ! ASSIGNED_P (before, index))
  	    {
  	      parse_error_context 
! 		(wfl, "variable '%s' may not have been initialized",
  		 IDENTIFIER_POINTER (DECL_NAME (tmp)));
  	      /* Suppress further errors. */
  	      DECL_BIT_INDEX (tmp) = -2;
--- 532,538 ----
  	  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;
*************** check_init (tree exp, words before)
*** 531,536 ****
--- 561,567 ----
  	     definitely assigned when once we checked the whole
  	     function. */
  	  if (! STATIC_CLASS_INIT_OPT_P () /* FIXME */
+ 	      && ! DECL_FINAL (tmp)
  	      && index >= start_current_locals
  	      && index == num_current_locals - 1)
  	    {
*************** check_init (tree exp, words before)
*** 770,776 ****
        break;
  
      case NOP_EXPR:
!       if (exp == empty_stmt_node)
  	break;
        /* ... else fall through ... */
      case UNARY_PLUS_EXPR:
--- 801,807 ----
        break;
  
      case NOP_EXPR:
!       if (IS_EMPTY_STMT (exp))
  	break;
        /* ... else fall through ... */
      case UNARY_PLUS_EXPR:
*************** check_init (tree exp, words before)
*** 802,808 ****
      case POSTINCREMENT_EXPR:
        tmp = get_variable_decl (TREE_OPERAND (exp, 0));
        if (tmp != NULL_TREE && DECL_FINAL (tmp))
! 	final_assign_error (DECL_NAME (tmp));      
  
        /* Avoid needless recursion.  */
        exp = TREE_OPERAND (exp, 0);
--- 833,846 ----
      case POSTINCREMENT_EXPR:
        tmp = get_variable_decl (TREE_OPERAND (exp, 0));
        if (tmp != NULL_TREE && DECL_FINAL (tmp))
! 	final_assign_error (DECL_NAME (tmp));
!       else if (TREE_CODE (tmp = TREE_OPERAND (exp, 0)) == COMPONENT_REF)
!         {
!           /* Take care of array length accesses too.  */
!           tree decl = TREE_OPERAND (tmp, 1);
!           if (DECL_FINAL (decl))
!             final_assign_error (DECL_NAME (decl));
!         }
  
        /* Avoid needless recursion.  */
        exp = TREE_OPERAND (exp, 0);
*************** check_init (tree exp, words before)
*** 846,851 ****
--- 884,895 ----
      case FLOOR_MOD_EXPR:
      case ROUND_MOD_EXPR:
      case EXACT_DIV_EXPR:
+     case UNLT_EXPR:
+     case UNLE_EXPR:
+     case UNGT_EXPR:
+     case UNGE_EXPR:
+     case UNEQ_EXPR:
+     case LTGT_EXPR:
      binop:
        check_init (TREE_OPERAND (exp, 0), before);
        /* Avoid needless recursion, especially for COMPOUND_EXPR. */
*************** check_init (tree exp, words before)
*** 857,862 ****
--- 901,907 ----
      case INTEGER_CST:
      case REAL_CST:
      case STRING_CST:
+     case DECL_EXPR:
      case JAVA_EXC_OBJ_EXPR:
        break;
  
*************** check_init (tree exp, words before)
*** 889,899 ****
  	location_t saved_location = input_location;
  	tree saved_wfl = wfl;
  	tree body = EXPR_WFL_NODE (exp);
! 	if (body == empty_stmt_node)
  	  break;
  	wfl = exp;
  	input_filename = EXPR_WFL_FILENAME (exp);
  	input_line = EXPR_WFL_LINENO (exp);
  	check_init (body, before);
  	input_location = saved_location;
  	wfl = saved_wfl;
--- 934,948 ----
  	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
  	input_filename = EXPR_WFL_FILENAME (exp);
  	input_line = EXPR_WFL_LINENO (exp);
+ #endif
  	check_init (body, before);
  	input_location = saved_location;
  	wfl = saved_wfl;
*************** check_for_initialization (tree body, tre
*** 974,980 ****
  	      if (index >= 0 && ! ASSIGNED_P (before, index))
  		{
  		  if (! is_finit_method)
! 		    error ("%Jfinal field '%D' may not have been initialized",
                             decl, decl);
  		}
  	      else if (is_finit_method)
--- 1023,1029 ----
  	      if (index >= 0 && ! ASSIGNED_P (before, index))
  		{
  		  if (! is_finit_method)
! 		    error ("%Jfinal field %qD may not have been initialized",
                             decl, decl);
  		}
  	      else if (is_finit_method)
diff -Nrcpad gcc-3.4.3/gcc/java/class.c gcc-4.0.0/gcc/java/class.c
*** gcc-3.4.3/gcc/java/class.c	Thu Feb 26 14:12:20 2004
--- gcc-4.0.0/gcc/java/class.c	Fri Mar  4 15:32:43 2005
***************
*** 1,5 ****
  /* Functions related to building classes and their related objects.
!    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 classes and their related objects.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** The Free Software Foundation is independ
*** 43,48 ****
--- 43,50 ----
  #include "stdio.h"
  #include "target.h"
  #include "except.h"
+ #include "cgraph.h"
+ #include "tree-iterator.h"
  
  /* DOS brain-damage */
  #ifndef O_BINARY
*************** static tree make_field_value (tree);
*** 56,68 ****
  static tree get_dispatch_vector (tree);
  static tree get_dispatch_table (tree, tree);
  static int supers_all_compiled (tree type);
- static void add_interface_do (tree, tree, int);
  static tree maybe_layout_super_class (tree, tree);
  static void add_miranda_methods (tree, tree);
  static int assume_compiled (const char *);
  static tree build_symbol_entry (tree);
! 
! static GTY(()) rtx registerClass_libfunc;
  
  struct obstack temporary_obstack;
  
--- 58,68 ----
  static tree get_dispatch_vector (tree);
  static tree get_dispatch_table (tree, tree);
  static int supers_all_compiled (tree type);
  static tree maybe_layout_super_class (tree, tree);
  static void add_miranda_methods (tree, tree);
  static int assume_compiled (const char *);
  static tree build_symbol_entry (tree);
! static tree emit_assertion_table (tree);
  
  struct obstack temporary_obstack;
  
*************** struct obstack temporary_obstack;
*** 70,99 ****
     it can assume certain classes have been compiled down to native
     code or not.  The compiler options -fassume-compiled= and
     -fno-assume-compiled= are used to create a tree of
!    assume_compiled_node objects.  This tree is queried to determine if
     a class is assume to be compiled or not.  Each node in the tree
     represents either a package or a specific class.  */
  
! typedef struct assume_compiled_node_struct
  {
    /* The class or package name.  */
    const char *ident;
  
    /* Nonzero if this represents an exclusion.  */
!   int excludep;
  
    /* Pointers to other nodes in the tree.  */
!   struct assume_compiled_node_struct *parent;
!   struct assume_compiled_node_struct *sibling;
!   struct assume_compiled_node_struct *child;
! } assume_compiled_node;
  
! static assume_compiled_node *find_assume_compiled_node (assume_compiled_node *,
! 							const char *);
  
  /* This is the root of the include/exclude tree.  */
  
! static assume_compiled_node *assume_compiled_tree;
  
  static GTY(()) tree class_roots[5];
  #define registered_class class_roots[0]
--- 70,101 ----
     it can assume certain classes have been compiled down to native
     code or not.  The compiler options -fassume-compiled= and
     -fno-assume-compiled= are used to create a tree of
!    class_flag_node objects.  This tree is queried to determine if
     a class is assume to be compiled or not.  Each node in the tree
     represents either a package or a specific class.  */
  
! typedef struct class_flag_node_struct
  {
    /* The class or package name.  */
    const char *ident;
  
    /* Nonzero if this represents an exclusion.  */
!   int value;
  
    /* Pointers to other nodes in the tree.  */
!   struct class_flag_node_struct *parent;
!   struct class_flag_node_struct *sibling;
!   struct class_flag_node_struct *child;
! } class_flag_node;
  
! static class_flag_node *find_class_flag_node (class_flag_node *, const char *);
! static void add_class_flag (class_flag_node **, const char *, int);
  
  /* This is the root of the include/exclude tree.  */
  
! static class_flag_node *assume_compiled_tree;
! 
! static class_flag_node *enable_assert_tree;
  
  static GTY(()) tree class_roots[5];
  #define registered_class class_roots[0]
*************** static GTY(()) tree class_roots[5];
*** 103,113 ****
  #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.  Return NULL if an
!    appropriate node does not exist.  */
  
! static assume_compiled_node *
! find_assume_compiled_node (assume_compiled_node *node, const char *ident)
  {
    while (node)
      {
--- 105,115 ----
  #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).
!    Return NULL if an appropriate node does not exist.  */
  
! static class_flag_node *
! find_class_flag_node (class_flag_node *node, const char *ident)
  {
    while (node)
      {
*************** find_assume_compiled_node (assume_compil
*** 120,133 ****
  
        if (node_ident_length == 0
  	  || (strncmp (ident, node->ident, node_ident_length) == 0
! 	      && (strlen (ident) == node_ident_length
  		  || ident[node_ident_length] == '.')))
  	{
  	  /* We've found a match, however, there might be a more
               specific match.  */
  
! 	  assume_compiled_node *found = find_assume_compiled_node (node->child,
! 								   ident);
  	  if (found)
  	    return found;
  	  else
--- 122,134 ----
  
        if (node_ident_length == 0
  	  || (strncmp (ident, node->ident, node_ident_length) == 0
! 	      && (ident[node_ident_length] == '\0'
  		  || ident[node_ident_length] == '.')))
  	{
  	  /* We've found a match, however, there might be a more
               specific match.  */
  
! 	  class_flag_node *found = find_class_flag_node (node->child, ident);
  	  if (found)
  	    return found;
  	  else
*************** find_assume_compiled_node (assume_compil
*** 142,195 ****
    return NULL;
  }
  
- /* Add a new IDENT to the include/exclude tree.  It's an exclusion
-    if EXCLUDEP is nonzero.  */
- 
  void
! add_assume_compiled (const char *ident, int excludep)
  {
!   int len;
!   assume_compiled_node *parent;
!   assume_compiled_node *node = xmalloc (sizeof (assume_compiled_node));
! 
!   node->ident = xstrdup (ident);
!   node->excludep = excludep;
!   node->child = NULL;
  
    /* Create the root of the tree if it doesn't exist yet.  */
  
!   if (NULL == assume_compiled_tree)
      {
!       assume_compiled_tree = xmalloc (sizeof (assume_compiled_node));
!       assume_compiled_tree->ident = "";
!       assume_compiled_tree->excludep = 0;
!       assume_compiled_tree->sibling = NULL;
!       assume_compiled_tree->child = NULL;
!       assume_compiled_tree->parent = NULL;
      }
  
    /* Calling the function with the empty string means we're setting
!      excludep for the root of the hierarchy.  */
  
    if (0 == ident[0])
      {
!       assume_compiled_tree->excludep = excludep;
        return;
      }
  
    /* Find the parent node for this new node.  PARENT will either be a
       class or a package name.  Adjust PARENT accordingly.  */
  
!   parent = find_assume_compiled_node (assume_compiled_tree, ident);
!   len = strlen (parent->ident);
!   if (parent->ident[len] && parent->ident[len] != '.')
!     parent = parent->parent;
  
!   /* Insert NODE into the tree.  */
  
!   node->parent = parent;
!   node->sibling = parent->child;
!   parent->child = node;
  }
  
  /* Returns nonzero if IDENT is the name of a class that the compiler
--- 143,219 ----
    return NULL;
  }
  
  void
! add_class_flag (class_flag_node **rootp, const char *ident, int value)
  {
!   class_flag_node *root = *rootp;
!   class_flag_node *parent, *node;
  
    /* Create the root of the tree if it doesn't exist yet.  */
  
!   if (NULL == root)
      {
!       root = xmalloc (sizeof (class_flag_node));
!       root->ident = "";
!       root->value = 0;
!       root->sibling = NULL;
!       root->child = NULL;
!       root->parent = NULL;
!       *rootp = root;
      }
  
    /* Calling the function with the empty string means we're setting
!      value for the root of the hierarchy.  */
  
    if (0 == ident[0])
      {
!       root->value = value;
        return;
      }
  
    /* Find the parent node for this new node.  PARENT will either be a
       class or a package name.  Adjust PARENT accordingly.  */
  
!   parent = find_class_flag_node (root, ident);
!   if (strcmp (ident, parent->ident) == 0)
!     parent->value = value;
!   else
!     {
!       /* Insert new node into the tree.  */
!       node = xmalloc (sizeof (class_flag_node));
  
!       node->ident = xstrdup (ident);
!       node->value = value;
!       node->child = NULL;
  
!       node->parent = parent;
!       node->sibling = parent->child;
!       parent->child = node;
!     }
! }
! 
! /* Add a new IDENT to the include/exclude tree.  It's an exclusion
!    if EXCLUDEP is nonzero.  */
! 
! void
! add_assume_compiled (const char *ident, int excludep)
! {
!   add_class_flag (&assume_compiled_tree, ident, excludep);
! }
! 
! /* The default value returned by enable_assertions. */
! 
! #define DEFAULT_ENABLE_ASSERT (flag_emit_class_files || optimize == 0)
! 
! /* Enter IDENT (a class or package name) into the enable-assertions table.
!    VALUE is true to enable and false to disable. */
! 
! void
! add_enable_assert (const char *ident, int value)
! {
!   if (enable_assert_tree == NULL)
!     add_class_flag (&enable_assert_tree, "", DEFAULT_ENABLE_ASSERT);
!   add_class_flag (&enable_assert_tree, ident, value);
  }
  
  /* Returns nonzero if IDENT is the name of a class that the compiler
*************** add_assume_compiled (const char *ident, 
*** 198,217 ****
  static int
  assume_compiled (const char *ident)
  {
!   assume_compiled_node *i;
    int result;
    
    if (NULL == assume_compiled_tree)
      return 1;
  
!   i = find_assume_compiled_node (assume_compiled_tree,
! 				 ident);
  
!   result = ! i->excludep;
    
    return (result);
  }
  
  /* Return an IDENTIFIER_NODE the same as (OLD_NAME, OLD_LENGTH).
     except that characters matching OLD_CHAR are substituted by NEW_CHAR.
     Also, PREFIX is prepended, and SUFFIX is appended. */
--- 222,260 ----
  static int
  assume_compiled (const char *ident)
  {
!   class_flag_node *i;
    int result;
    
    if (NULL == assume_compiled_tree)
      return 1;
  
!   i = find_class_flag_node (assume_compiled_tree, ident);
  
!   result = ! i->value;
    
    return (result);
  }
  
+ /* Return true if we should generate code to check assertions within KLASS. */
+ 
+ bool
+ enable_assertions (tree klass)
+ {
+   /* Check if command-line specifies whether we should check assertions. */
+ 
+   if (klass != NULL_TREE && DECL_NAME (klass) && enable_assert_tree != NULL)
+     {
+       const char *ident = IDENTIFIER_POINTER (DECL_NAME (klass));
+       class_flag_node *node
+ 	= find_class_flag_node (enable_assert_tree, ident);
+       return node->value;
+     }
+ 
+   /* The default is to enable assertions if generating class files,
+      or not optimizing. */
+   return DEFAULT_ENABLE_ASSERT;
+ }
+ 
  /* Return an IDENTIFIER_NODE the same as (OLD_NAME, OLD_LENGTH).
     except that characters matching OLD_CHAR are substituted by NEW_CHAR.
     Also, PREFIX is prepended, and SUFFIX is appended. */
*************** ident_subst (const char* old_name,
*** 227,237 ****
    int prefix_len = strlen (prefix);
    int suffix_len = strlen (suffix);
    int i = prefix_len + old_length + suffix_len + 1;
- #ifdef __GNUC__
-   char buffer[i];
- #else
    char *buffer = alloca (i);
! #endif
    strcpy (buffer, prefix);
    for (i = 0; i < old_length; i++)
      {
--- 270,277 ----
    int prefix_len = strlen (prefix);
    int suffix_len = strlen (suffix);
    int i = prefix_len + old_length + suffix_len + 1;
    char *buffer = alloca (i);
! 
    strcpy (buffer, prefix);
    for (i = 0; i < old_length; i++)
      {
*************** make_class (void)
*** 276,282 ****
  {
    tree type;
    type = make_node (RECORD_TYPE);
-   TYPE_BINFO (type) = make_tree_vec (BINFO_ELTS);
    MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC (type);
  
    return type;
--- 316,321 ----
*************** unmangle_classname (const char *name, in
*** 305,312 ****
    return to_return;
  }
  
  
! /* Given a class, create the DECLs for all its associated indirect dispatch tables.  */
  void
  gen_indirect_dispatch_tables (tree type)
  {
--- 344,380 ----
    return to_return;
  }
  
+ #define GEN_TABLE(TABLE, NAME, TABLE_TYPE, TYPE)			\
+ do									\
+ {									\
+   const char *typename = IDENTIFIER_POINTER (mangled_classname ("", TYPE)); \
+   char *buf = alloca (strlen (typename) + strlen (#NAME "_syms_") + 1);	\
+   tree decl;								\
+ 									\
+   sprintf (buf, #NAME "_%s", typename);					\
+   TYPE_## TABLE ##_DECL (type) = decl =					\
+     build_decl (VAR_DECL, get_identifier (buf), TABLE_TYPE);		\
+   DECL_EXTERNAL (decl) = 1;						\
+   TREE_STATIC (decl) = 1;						\
+   TREE_READONLY (decl) = 1;						\
+   TREE_CONSTANT (decl) = 1;						\
+   DECL_IGNORED_P (decl) = 1;						\
+   /* Mark the table as belonging to this class.  */			\
+   pushdecl (decl);							\
+   MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);				\
+   DECL_OWNER (decl) = TYPE;						\
+   sprintf (buf, #NAME "_syms_%s", typename);				\
+   TYPE_## TABLE ##_SYMS_DECL (TYPE) =					\
+     build_decl (VAR_DECL, get_identifier (buf), symbols_array_type);	\
+   TREE_STATIC (TYPE_## TABLE ##_SYMS_DECL (TYPE)) = 1;			\
+   TREE_CONSTANT (TYPE_## TABLE ##_SYMS_DECL (TYPE)) = 1;		\
+   DECL_IGNORED_P (TYPE_## TABLE ##_SYMS_DECL (TYPE)) = 1;		\
+   pushdecl (TYPE_## TABLE ##_SYMS_DECL (TYPE));				\
+ }									\
+ while (0)
  
! /* Given a class, create the DECLs for all its associated indirect
!    dispatch tables.  */
  void
  gen_indirect_dispatch_tables (tree type)
  {
*************** gen_indirect_dispatch_tables (tree type)
*** 334,396 ****
  
    if (flag_indirect_dispatch)
      {
!       {
! 	char *buf = alloca (strlen (typename) + strlen ("_otable_syms_") + 1);
! 
! 	sprintf (buf, "_otable_%s", typename);
! 	TYPE_OTABLE_DECL (type) = 
! 	  build_decl (VAR_DECL, get_identifier (buf), otable_type);
! 	DECL_EXTERNAL (TYPE_OTABLE_DECL (type)) = 1;
! 	TREE_STATIC (TYPE_OTABLE_DECL (type)) = 1;
! 	TREE_READONLY (TYPE_OTABLE_DECL (type)) = 1;
! 	TREE_CONSTANT (TYPE_OTABLE_DECL (type)) = 1;
! 	DECL_IGNORED_P (TYPE_OTABLE_DECL (type)) = 1;
! 	pushdecl (TYPE_OTABLE_DECL (type));  
! 	sprintf (buf, "_otable_syms_%s", typename);
! 	TYPE_OTABLE_SYMS_DECL (type) = 
! 	  build_decl (VAR_DECL, get_identifier (buf), symbols_array_type);
! 	TREE_STATIC (TYPE_OTABLE_SYMS_DECL (type)) = 1;
! 	TREE_CONSTANT (TYPE_OTABLE_SYMS_DECL (type)) = 1;
! 	DECL_IGNORED_P(TYPE_OTABLE_SYMS_DECL (type)) = 1;
! 	pushdecl (TYPE_OTABLE_SYMS_DECL (type));
!       }
! 
!       {
! 	char *buf = alloca (strlen (typename) + strlen ("_atable_syms_") + 1);
! 	tree decl;
! 
! 	sprintf (buf, "_atable_%s", typename);
! 	TYPE_ATABLE_DECL (type) = decl =
! 	  build_decl (VAR_DECL, get_identifier (buf), atable_type);
! 	DECL_EXTERNAL (decl) = 1;
! 	TREE_STATIC (decl) = 1;
! 	TREE_READONLY (decl) = 1;
! 	TREE_CONSTANT (decl) = 1;
! 	DECL_IGNORED_P (decl) = 1;
! 	/* Mark the atable as belonging to this class.  */
! 	pushdecl (decl);  
! 	MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
! 	DECL_OWNER (decl) = type;
! 	sprintf (buf, "_atable_syms_%s", typename);
! 	TYPE_ATABLE_SYMS_DECL (type) = 
! 	  build_decl (VAR_DECL, get_identifier (buf), symbols_array_type);
! 	TREE_STATIC (TYPE_ATABLE_SYMS_DECL (type)) = 1;
! 	TREE_CONSTANT (TYPE_ATABLE_SYMS_DECL (type)) = 1;
! 	DECL_IGNORED_P (TYPE_ATABLE_SYMS_DECL (type)) = 1;
! 	pushdecl (TYPE_ATABLE_SYMS_DECL (type));
!       }
      }
  }
  
  tree
  push_class (tree class_type, tree class_name)
  {
    tree decl, signature;
    location_t saved_loc = input_location;
    tree source_name = identifier_subst (class_name, "", '.', '/', ".java");
-   CLASS_P (class_type) = 1;
    input_filename = IDENTIFIER_POINTER (source_name);
    input_line = 0;
    decl = build_decl (TYPE_DECL, class_name, class_type);
  
    /* dbxout needs a DECL_SIZE if in gstabs mode */
--- 402,426 ----
  
    if (flag_indirect_dispatch)
      {
!       GEN_TABLE (ATABLE, _atable, atable_type, type);
!       GEN_TABLE (OTABLE, _otable, otable_type, type);
!       GEN_TABLE (ITABLE, _itable, itable_type, type);
      }
  }
  
+ #undef GEN_TABLE
+ 
  tree
  push_class (tree class_type, tree class_name)
  {
    tree decl, signature;
    location_t saved_loc = input_location;
+ #ifndef USE_MAPPED_LOCATION
    tree source_name = identifier_subst (class_name, "", '.', '/', ".java");
    input_filename = IDENTIFIER_POINTER (source_name);
    input_line = 0;
+ #endif
+   CLASS_P (class_type) = 1;
    decl = build_decl (TYPE_DECL, class_name, class_type);
  
    /* dbxout needs a DECL_SIZE if in gstabs mode */
*************** set_super_info (int access_flags, tree t
*** 430,447 ****
  {
    int total_supers = interfaces_count;
    tree class_decl = TYPE_NAME (this_class);
    if (super_class)
      total_supers++;
  
!   TYPE_BINFO_BASETYPES (this_class) = make_tree_vec (total_supers);
    if (super_class)
      {
!       tree super_binfo = make_tree_vec (BINFO_ELTS);
        BINFO_TYPE (super_binfo) = super_class;
        BINFO_OFFSET (super_binfo) = integer_zero_node;
!       TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (this_class)), 0)
! 	= super_binfo;
!       CLASS_HAS_SUPER (this_class) = 1;
      }
  
    set_class_decl_access_flags (access_flags, class_decl);
--- 460,478 ----
  {
    int total_supers = interfaces_count;
    tree class_decl = TYPE_NAME (this_class);
+   
    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)
      {
!       tree super_binfo = make_tree_binfo (0);
        BINFO_TYPE (super_binfo) = super_class;
        BINFO_OFFSET (super_binfo) = integer_zero_node;
!       BINFO_BASE_APPEND (TYPE_BINFO (this_class), super_binfo);
!       CLASS_HAS_SUPER_FLAG (TYPE_BINFO (this_class)) = 1;
      }
  
    set_class_decl_access_flags (access_flags, class_decl);
*************** class_depth (tree clas)
*** 475,481 ****
    while (clas != object_type_node)
      {
        depth++;
!       clas = TYPE_BINFO_BASETYPE (clas, 0);
      }
    return depth;
  }
--- 506,512 ----
    while (clas != object_type_node)
      {
        depth++;
!       clas = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (clas), 0));
      }
    return depth;
  }
*************** class_depth (tree clas)
*** 485,509 ****
  int
  interface_of_p (tree type1, tree type2)
  {
!   int n, i;
!   tree basetype_vec;
  
!   if (!(basetype_vec = TYPE_BINFO_BASETYPES (type2)))
      return 0;
!   n = TREE_VEC_LENGTH (basetype_vec);
!   for (i = 0; i < n; i++)
!     {
!       tree vec_elt = TREE_VEC_ELT (basetype_vec, i);
!       if (vec_elt && BINFO_TYPE (vec_elt) == type1)
! 	return 1;
!     }
!   for (i = 0; i < n; i++)
!     {
!       tree vec_elt = TREE_VEC_ELT (basetype_vec, i);
!       if (vec_elt && BINFO_TYPE (vec_elt) 
! 	  && interface_of_p (type1, BINFO_TYPE (vec_elt)))
! 	return 1;
!     }
    return 0;
  }
  
--- 516,538 ----
  int
  interface_of_p (tree type1, tree type2)
  {
!   int i;
!   tree binfo, base_binfo;
  
!   if (! TYPE_BINFO (type2))
      return 0;
! 
!   for (binfo = TYPE_BINFO (type2), i = 0;
!        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
!     if (BINFO_TYPE (base_binfo) == type1)
!       return 1;
!   
!   for (binfo = TYPE_BINFO (type2), i = 0;
!        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++) /*  */
!     if (BINFO_TYPE (base_binfo)
! 	&& interface_of_p (type1, BINFO_TYPE (base_binfo)))
!       return 1;
!   
    return 0;
  }
  
*************** enclosing_context_p (tree type1, tree ty
*** 541,550 ****
    return 0;
  }
  
- /* Return 1 iff there exists a common enclosing context between TYPE1
-    and TYPE2.  */
  
! int common_enclosing_context_p (tree type1, tree type2)
  {
    if (!PURE_INNER_CLASS_TYPE_P (type1) || !PURE_INNER_CLASS_TYPE_P (type2))
      return 0;
--- 570,605 ----
    return 0;
  }
  
  
! /* Return 1 iff TYPE1 and TYPE2 share a common enclosing class, regardless of
!    nesting level.  */
! 
! int
! common_enclosing_context_p (tree type1, tree type2)
! {
!   while (type1)
!     {
!       tree current;
!       for (current = type2; current;
! 	   current = (INNER_CLASS_TYPE_P (current) ?
! 		      TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current))) : 
! 		      NULL_TREE))
! 	if (type1 == current)
! 	  return 1;
! 
!       if (INNER_CLASS_TYPE_P (type1))
!         type1 = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type1)));
!       else
!         break;
!     }
!   return 0;
! }
! 
! /* Return 1 iff there exists a common enclosing "this" between TYPE1
!    and TYPE2, without crossing any static context.  */
! 
! int
! common_enclosing_instance_p (tree type1, tree type2)
  {
    if (!PURE_INNER_CLASS_TYPE_P (type1) || !PURE_INNER_CLASS_TYPE_P (type2))
      return 0;
*************** int common_enclosing_context_p (tree typ
*** 564,580 ****
    return 0;
  }
  
- static void
- add_interface_do (tree basetype_vec, tree interface_class, int i)
- {
-   tree interface_binfo = make_tree_vec (BINFO_ELTS);
-   BINFO_TYPE (interface_binfo) = interface_class;
-   BINFO_OFFSET (interface_binfo) = integer_zero_node;
-   BINFO_VPTR_FIELD (interface_binfo) = integer_zero_node;
-   TREE_VIA_VIRTUAL (interface_binfo) = 1;
-   TREE_VEC_ELT (basetype_vec, i) = interface_binfo;
- }
- 
  /* Add INTERFACE_CLASS to THIS_CLASS iff INTERFACE_CLASS can't be
     found in THIS_CLASS. Returns NULL_TREE upon success, INTERFACE_CLASS
     if attempt is made to add it twice. */
--- 619,624 ----
*************** add_interface_do (tree basetype_vec, tre
*** 582,603 ****
  tree
  maybe_add_interface (tree this_class, tree interface_class)
  {
!   tree basetype_vec = TYPE_BINFO_BASETYPES (this_class);
    int i;
!   int n = TREE_VEC_LENGTH (basetype_vec);
!   for (i = 0; ; i++)
!     {
!       if (i >= n)
! 	{
! 	  error ("internal error - too many interface type");
! 	  return NULL_TREE;
! 	}
!       else if (TREE_VEC_ELT (basetype_vec, i) == NULL_TREE)
! 	break;
!       else if (BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i)) == interface_class)
! 	return interface_class;
!     } 
!   add_interface_do (basetype_vec, interface_class, i);
    return NULL_TREE;
  }
  
--- 626,639 ----
  tree
  maybe_add_interface (tree this_class, tree interface_class)
  {
!   tree binfo, base_binfo;
    int i;
! 
!   for (binfo = TYPE_BINFO (this_class), i = 0;
!        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
!     if (BINFO_TYPE (base_binfo) == interface_class)
!       return interface_class;
!   add_interface (this_class, interface_class);
    return NULL_TREE;
  }
  
*************** maybe_add_interface (tree this_class, tr
*** 606,625 ****
  void
  add_interface (tree this_class, tree interface_class)
  {
!   tree basetype_vec = TYPE_BINFO_BASETYPES (this_class);
!   int i;
!   int n = TREE_VEC_LENGTH (basetype_vec);
!   for (i = 0; ; i++)
!     {
!       if (i >= n)
! 	{
! 	  error ("internal error - too many interface type");
! 	  return;
! 	}
!       else if (TREE_VEC_ELT (basetype_vec, i) == NULL_TREE)
! 	break;
!     }
!   add_interface_do (basetype_vec, interface_class, i);
  }
  
  #if 0
--- 642,655 ----
  void
  add_interface (tree this_class, tree interface_class)
  {
!   tree interface_binfo = make_tree_binfo (0);
!   
!   BINFO_TYPE (interface_binfo) = interface_class;
!   BINFO_OFFSET (interface_binfo) = integer_zero_node;
!   BINFO_VPTR_FIELD (interface_binfo) = integer_zero_node;
!   BINFO_VIRTUAL_P (interface_binfo) = 1;
!   
!   BINFO_BASE_APPEND (TYPE_BINFO (this_class), interface_binfo);
  }
  
  #if 0
*************** build_utf8_ref (tree name)
*** 839,851 ****
    FINISH_RECORD (ctype);
    START_RECORD_CONSTRUCTOR (cinit, ctype);
    name_hash = hashUtf8String (name_ptr, name_len) & 0xFFFF;
!   PUSH_FIELD_VALUE (cinit, "hash", build_int_2 (name_hash, 0));
!   PUSH_FIELD_VALUE (cinit, "length", build_int_2 (name_len, 0));
    string = build_string (name_len, name_ptr);
    TREE_TYPE (string) = str_type;
    PUSH_FIELD_VALUE (cinit, "data", string);
    FINISH_RECORD_CONSTRUCTOR (cinit);
    TREE_CONSTANT (cinit) = 1;
  
    /* Generate a unique-enough identifier.  */
    sprintf(buf, "_Utf%d", ++utf8_count);
--- 869,882 ----
    FINISH_RECORD (ctype);
    START_RECORD_CONSTRUCTOR (cinit, ctype);
    name_hash = hashUtf8String (name_ptr, name_len) & 0xFFFF;
!   PUSH_FIELD_VALUE (cinit, "hash", build_int_cst (NULL_TREE, name_hash));
!   PUSH_FIELD_VALUE (cinit, "length", build_int_cst (NULL_TREE, name_len));
    string = build_string (name_len, name_ptr);
    TREE_TYPE (string) = str_type;
    PUSH_FIELD_VALUE (cinit, "data", string);
    FINISH_RECORD_CONSTRUCTOR (cinit);
    TREE_CONSTANT (cinit) = 1;
+   TREE_INVARIANT (cinit) = 1;
  
    /* Generate a unique-enough identifier.  */
    sprintf(buf, "_Utf%d", ++utf8_count);
*************** build_utf8_ref (tree name)
*** 878,886 ****
    TREE_CHAIN (decl) = utf8_decl_list;
    layout_decl (decl, 0);
    pushdecl (decl);
!   rest_of_decl_compilation (decl, (char*) 0, global_bindings_p (), 0);
    utf8_decl_list = decl;
!   make_decl_rtl (decl, (char*) 0);
    ref = build1 (ADDR_EXPR, utf8const_ptr_type, decl);
    IDENTIFIER_UTF8_REF (name) = ref;
    return ref;
--- 909,917 ----
    TREE_CHAIN (decl) = utf8_decl_list;
    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;
*************** build_indirect_class_ref (tree type)
*** 896,903 ****
    tree cl;
    index = alloc_class_constant (type);
    cl = build_ref_from_constant_pool (index); 
!   TREE_TYPE (cl) = promote_type (class_ptr_type);
!   return cl;
  }
  
  /* Build a reference to the class TYPE.
--- 927,933 ----
    tree cl;
    index = alloc_class_constant (type);
    cl = build_ref_from_constant_pool (index); 
!   return convert (promote_type (class_ptr_type), cl);
  }
  
  /* Build a reference to the class TYPE.
*************** build_class_ref (tree type)
*** 913,925 ****
        if (TREE_CODE (type) == POINTER_TYPE)
  	type = TREE_TYPE (type);
  
-       /* FIXME: we really want an indirect reference to our
- 	 superclass.  However, libgcj assumes that a superclass
- 	 pointer always points directly to a class.  As a workaround
- 	 we always emit this hard superclass reference.  */
        if  (flag_indirect_dispatch
  	   && type != output_class
- 	   && type != CLASSTYPE_SUPER (output_class)
  	   && TREE_CODE (type) == RECORD_TYPE)
  	return build_indirect_class_ref (type);
  
--- 943,950 ----
*************** build_class_ref (tree type)
*** 944,950 ****
  	      SET_DECL_ASSEMBLER_NAME (decl, 
  				       java_mangle_class_field
  				       (&temporary_obstack, type));
! 	      make_decl_rtl (decl, NULL);
  	      pushdecl_top_level (decl);
  	    }
  	}
--- 969,975 ----
  	      SET_DECL_ASSEMBLER_NAME (decl, 
  				       java_mangle_class_field
  				       (&temporary_obstack, type));
! 	      make_decl_rtl (decl);
  	      pushdecl_top_level (decl);
  	    }
  	}
*************** build_class_ref (tree type)
*** 978,985 ****
  		abort ();
  
  	      prim_class = lookup_class (get_identifier (prim_class_name));
! 	      return build (COMPONENT_REF, NULL_TREE,
! 			    prim_class, TYPE_identifier_node);
  	    }
  	  decl_name = TYPE_NAME (type);
  	  if (TREE_CODE (decl_name) == TYPE_DECL)
--- 1003,1010 ----
  		abort ();
  
  	      prim_class = lookup_class (get_identifier (prim_class_name));
! 	      return build3 (COMPONENT_REF, NULL_TREE,
! 			     prim_class, TYPE_identifier_node, NULL_TREE);
  	    }
  	  decl_name = TYPE_NAME (type);
  	  if (TREE_CODE (decl_name) == TYPE_DECL)
*************** build_class_ref (tree type)
*** 996,1002 ****
  	      TREE_STATIC (decl) = 1;
  	      TREE_PUBLIC (decl) = 1;
  	      DECL_EXTERNAL (decl) = 1;
! 	      make_decl_rtl (decl, NULL);
  	      pushdecl_top_level (decl);
  	    }
  	}
--- 1021,1028 ----
  	      TREE_STATIC (decl) = 1;
  	      TREE_PUBLIC (decl) = 1;
  	      DECL_EXTERNAL (decl) = 1;
! 	      DECL_ARTIFICIAL (decl) = 1;
! 	      make_decl_rtl (decl);
  	      pushdecl_top_level (decl);
  	    }
  	}
*************** build_static_field_ref (tree fdecl)
*** 1021,1028 ****
       However, currently sometimes gcj is too eager and will end up
       returning the field itself, leading to an incorrect external
       reference being generated.  */
!   if ((is_compiled 
!        && (! flag_indirect_dispatch || current_class == fclass))
        || (FIELD_FINAL (fdecl) && DECL_INITIAL (fdecl) != NULL_TREE
  	  && (JSTRING_TYPE_P (TREE_TYPE (fdecl))
  	      || JNUMERIC_TYPE_P (TREE_TYPE (fdecl)))
--- 1047,1053 ----
       However, currently sometimes gcj is too eager and will end up
       returning the field itself, leading to an incorrect external
       reference being generated.  */
!   if ((is_compiled && !flag_indirect_dispatch)
        || (FIELD_FINAL (fdecl) && DECL_INITIAL (fdecl) != NULL_TREE
  	  && (JSTRING_TYPE_P (TREE_TYPE (fdecl))
  	      || JNUMERIC_TYPE_P (TREE_TYPE (fdecl)))
*************** build_static_field_ref (tree fdecl)
*** 1032,1038 ****
  	{
  	  if (is_compiled == 1)
  	    DECL_EXTERNAL (fdecl) = 1;
! 	  make_decl_rtl (fdecl, NULL);
  	}
        return fdecl;
      }
--- 1057,1063 ----
  	{
  	  if (is_compiled == 1)
  	    DECL_EXTERNAL (fdecl) = 1;
! 	  make_decl_rtl (fdecl);
  	}
        return fdecl;
      }
*************** build_static_field_ref (tree fdecl)
*** 1040,1063 ****
    if (flag_indirect_dispatch)
      {
        tree table_index 
! 	= build_int_2 (get_symbol_table_index 
! 		       (fdecl, &TYPE_ATABLE_METHODS (output_class)), 0);
        tree field_address
! 	= build (ARRAY_REF, build_pointer_type (TREE_TYPE (fdecl)), 
! 		 TYPE_ATABLE_DECL (output_class), table_index);
        return fold (build1 (INDIRECT_REF, TREE_TYPE (fdecl), 
  			   field_address));
      }
    else  
      {
        /* Compile as:
!        * *(FTYPE*)build_class_ref(FCLASS)->fields[INDEX].info.addr */
        tree ref = build_class_ref (fclass);
        tree fld;
        int field_index = 0;
        ref = build1 (INDIRECT_REF, class_type_node, ref);
!       ref = build (COMPONENT_REF, field_ptr_type_node, ref,
! 		   lookup_field (&class_type_node, fields_ident));
  
        for (fld = TYPE_FIELDS (fclass); ; fld = TREE_CHAIN (fld))
  	{
--- 1065,1093 ----
    if (flag_indirect_dispatch)
      {
        tree table_index 
! 	= build_int_cst (NULL_TREE, get_symbol_table_index 
! 			 (fdecl, &TYPE_ATABLE_METHODS (output_class)));
        tree field_address
! 	= build4 (ARRAY_REF, 
! 		  TREE_TYPE (TREE_TYPE (TYPE_ATABLE_DECL (output_class))), 
! 		  TYPE_ATABLE_DECL (output_class), table_index,
! 		  NULL_TREE, NULL_TREE);
!       field_address = convert (build_pointer_type (TREE_TYPE (fdecl)),
! 			       field_address);
        return fold (build1 (INDIRECT_REF, TREE_TYPE (fdecl), 
  			   field_address));
      }
    else  
      {
        /* Compile as:
!        *(FTYPE*)build_class_ref(FCLASS)->fields[INDEX].info.addr */
        tree ref = build_class_ref (fclass);
        tree fld;
        int field_index = 0;
        ref = build1 (INDIRECT_REF, class_type_node, ref);
!       ref = build3 (COMPONENT_REF, field_ptr_type_node, ref,
! 		    lookup_field (&class_type_node, fields_ident),
! 		    NULL_TREE);
  
        for (fld = TYPE_FIELDS (fclass); ; fld = TREE_CHAIN (fld))
  	{
*************** build_static_field_ref (tree fdecl)
*** 1070,1082 ****
  	    field_index++;
  	}
        field_index *= int_size_in_bytes (field_type_node);
!       ref = fold (build (PLUS_EXPR, field_ptr_type_node,
! 			 ref, build_int_2 (field_index, 0)));
        ref = build1 (INDIRECT_REF, field_type_node, ref);
!       ref = build (COMPONENT_REF, field_info_union_node,
! 		   ref, lookup_field (&field_type_node, info_ident));
!       ref = build (COMPONENT_REF, ptr_type_node,
! 		   ref, TREE_CHAIN (TYPE_FIELDS (field_info_union_node)));
        return fold (build1 (INDIRECT_REF, TREE_TYPE(fdecl), ref));
      }
  }
--- 1100,1115 ----
  	    field_index++;
  	}
        field_index *= int_size_in_bytes (field_type_node);
!       ref = fold (build2 (PLUS_EXPR, field_ptr_type_node,
! 			  ref, build_int_cst (NULL_TREE, field_index)));
        ref = build1 (INDIRECT_REF, field_type_node, ref);
!       ref = build3 (COMPONENT_REF, field_info_union_node,
! 		    ref, lookup_field (&field_type_node, info_ident), 
! 		    NULL_TREE);
!       ref = build3 (COMPONENT_REF, ptr_type_node,
! 		    ref, TREE_CHAIN (TYPE_FIELDS (field_info_union_node)),
! 		    NULL_TREE);
!       ref = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (fdecl)), ref);
        return fold (build1 (INDIRECT_REF, TREE_TYPE(fdecl), ref));
      }
  }
*************** get_access_flags_from_decl (tree decl)
*** 1152,1157 ****
--- 1185,1239 ----
    abort ();
  }
  
+ static GTY (()) int alias_labelno = 0;
+ 
+ /* Create a private alias for METHOD. Using this alias instead of the method
+    decl ensures that ncode entries in the method table point to the real function 
+    at runtime, not a PLT entry.  */
+ 
+ static tree
+ make_local_function_alias (tree method)
+ {
+ #ifdef ASM_OUTPUT_DEF
+   tree alias;
+   
+   const char *method_name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (method));
+   char *name = alloca (strlen (method_name) + 2);
+   char *buf = alloca (strlen (method_name) + 128);
+ 
+   /* Only create aliases for local functions.  */
+   if (DECL_EXTERNAL (method))
+     return method;
+     
+   /* Prefix method_name with 'L' for the alias label.  */
+   *name = 'L';
+   strcpy (name + 1, method_name);
+ 
+   ASM_GENERATE_INTERNAL_LABEL (buf, name, alias_labelno++);  
+   alias = build_decl (FUNCTION_DECL, get_identifier (buf),
+ 		      TREE_TYPE (method));
+   DECL_CONTEXT (alias) = NULL;
+   TREE_READONLY (alias) = TREE_READONLY (method);
+   TREE_THIS_VOLATILE (alias) = TREE_THIS_VOLATILE (method);
+   TREE_PUBLIC (alias) = 0;
+   DECL_EXTERNAL (alias) = 0;
+   DECL_ARTIFICIAL (alias) = 1;
+   DECL_INLINE (alias) = 0;
+   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));
+   return alias;
+ #else
+   return method;
+ #endif
+ }
+ 
+ /** Make reflection data (_Jv_Field) for field FDECL. */
+ 
  static tree
  make_field_value (tree fdecl)
  {
*************** make_field_value (tree fdecl)
*** 1178,1184 ****
    if (! resolved)
      flags |= 0x8000 /* FIELD_UNRESOLVED_FLAG */;
  
!   PUSH_FIELD_VALUE (finit, "accflags", build_int_2 (flags, 0));
    PUSH_FIELD_VALUE (finit, "bsize", TYPE_SIZE_UNIT (TREE_TYPE (fdecl)));
  
    PUSH_FIELD_VALUE
--- 1260,1266 ----
    if (! resolved)
      flags |= 0x8000 /* FIELD_UNRESOLVED_FLAG */;
  
!   PUSH_FIELD_VALUE (finit, "accflags", build_int_cst (NULL_TREE, flags));
    PUSH_FIELD_VALUE (finit, "bsize", TYPE_SIZE_UNIT (TREE_TYPE (fdecl)));
  
    PUSH_FIELD_VALUE
*************** make_field_value (tree fdecl)
*** 1189,1201 ****
  	      ? TREE_CHAIN (TYPE_FIELDS (field_info_union_node))
  	      : TYPE_FIELDS (field_info_union_node)),
  	     (FIELD_STATIC (fdecl)
! 	      ? build_address_of (build_static_field_ref (fdecl))
  	      : byte_position (fdecl)))));
  
    FINISH_RECORD_CONSTRUCTOR (finit);
    return finit;
  }
  
  static tree
  make_method_value (tree mdecl)
  {
--- 1271,1285 ----
  	      ? TREE_CHAIN (TYPE_FIELDS (field_info_union_node))
  	      : TYPE_FIELDS (field_info_union_node)),
  	     (FIELD_STATIC (fdecl)
! 	      ? build_address_of (fdecl)
  	      : byte_position (fdecl)))));
  
    FINISH_RECORD_CONSTRUCTOR (finit);
    return finit;
  }
  
+ /** Make reflection data (_Jv_Method) for method MDECL. */
+ 
  static tree
  make_method_value (tree mdecl)
  {
*************** make_method_value (tree mdecl)
*** 1203,1219 ****
    tree minit;
    tree index;
    tree code;
  #define ACC_TRANSLATED          0x4000
    int accflags = get_access_flags_from_decl (mdecl) | ACC_TRANSLATED;
  
!   if (!flag_indirect_dispatch && DECL_VINDEX (mdecl) != NULL_TREE)
!     index = DECL_VINDEX (mdecl);
    else
      index = integer_minus_one_node;
  
    code = null_pointer_node;
    if (DECL_RTL_SET_P (mdecl))
!     code = build1 (ADDR_EXPR, nativecode_ptr_type_node, mdecl);
    START_RECORD_CONSTRUCTOR (minit, method_type_node);
    PUSH_FIELD_VALUE (minit, "name",
  		    build_utf8_ref (DECL_CONSTRUCTOR_P (mdecl) ?
--- 1287,1310 ----
    tree minit;
    tree index;
    tree code;
+   tree class_decl;
  #define ACC_TRANSLATED          0x4000
    int accflags = get_access_flags_from_decl (mdecl) | ACC_TRANSLATED;
  
!   class_decl = DECL_CONTEXT (mdecl);
!   /* For interfaces, the index field contains the dispatch index. */
!   if (CLASS_INTERFACE (TYPE_NAME (class_decl)))
!     index = build_int_cst (NULL_TREE,
! 			   get_interface_method_index (mdecl, class_decl));
!   else if (!flag_indirect_dispatch && get_method_index (mdecl) != NULL_TREE)
!     index = get_method_index (mdecl);
    else
      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);
    PUSH_FIELD_VALUE (minit, "name",
  		    build_utf8_ref (DECL_CONSTRUCTOR_P (mdecl) ?
*************** make_method_value (tree mdecl)
*** 1227,1233 ****
  			(IDENTIFIER_POINTER(signature),
  			 IDENTIFIER_LENGTH(signature)))));
    }
!   PUSH_FIELD_VALUE (minit, "accflags", build_int_2 (accflags, 0));
    PUSH_FIELD_VALUE (minit, "index", index);
    PUSH_FIELD_VALUE (minit, "ncode", code);
  
--- 1318,1324 ----
  			(IDENTIFIER_POINTER(signature),
  			 IDENTIFIER_LENGTH(signature)))));
    }
!   PUSH_FIELD_VALUE (minit, "accflags", build_int_cst (NULL_TREE, accflags));
    PUSH_FIELD_VALUE (minit, "index", index);
    PUSH_FIELD_VALUE (minit, "ncode", code);
  
*************** make_method_value (tree mdecl)
*** 1260,1266 ****
  	TREE_STATIC (array) = 1;
  	DECL_ARTIFICIAL (array) = 1;
  	DECL_IGNORED_P (array) = 1;
! 	rest_of_decl_compilation (array, (char*) 0, 1, 0);
  
  	table = build1 (ADDR_EXPR, ptr_type_node, array);
        }
--- 1351,1357 ----
  	TREE_STATIC (array) = 1;
  	DECL_ARTIFICIAL (array) = 1;
  	DECL_IGNORED_P (array) = 1;
! 	rest_of_decl_compilation (array, 1, 0);
  
  	table = build1 (ADDR_EXPR, ptr_type_node, array);
        }
*************** get_dispatch_vector (tree type)
*** 1295,1304 ****
  
        for (method = TYPE_METHODS (type);  method != NULL_TREE;
  	   method = TREE_CHAIN (method))
! 	if (DECL_VINDEX (method) != NULL_TREE
! 	    && host_integerp (DECL_VINDEX (method), 0))
! 	  TREE_VEC_ELT (vtable, tree_low_cst (DECL_VINDEX (method), 0))
! 	    = method;
      }
  
    return vtable;
--- 1386,1397 ----
  
        for (method = TYPE_METHODS (type);  method != NULL_TREE;
  	   method = TREE_CHAIN (method))
! 	{
! 	  tree method_index = get_method_index (method);
! 	  if (method_index != NULL_TREE
! 	      && host_integerp (method_index, 0))
! 	    TREE_VEC_ELT (vtable, tree_low_cst (method_index, 0)) = method;
! 	}
      }
  
    return vtable;
*************** get_dispatch_table (tree type, tree this
*** 1332,1345 ****
        else
  	{
  	  if (!DECL_RTL_SET_P (method))
! 	    make_decl_rtl (method, NULL);
  
  	  if (TARGET_VTABLE_USES_DESCRIPTORS)
  	    for (j = 0; j < TARGET_VTABLE_USES_DESCRIPTORS; ++j)
  	      {
! 		tree fdesc = build (FDESC_EXPR, nativecode_ptr_type_node, 
! 				    method, build_int_2 (j, 0));
  		TREE_CONSTANT (fdesc) = 1;
  	        list = tree_cons (NULL_TREE, fdesc, list);
  	      }
  	  else
--- 1425,1439 ----
        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)
  	      {
! 		tree fdesc = build2 (FDESC_EXPR, nativecode_ptr_type_node, 
! 				     method, build_int_cst (NULL_TREE, j));
  		TREE_CONSTANT (fdesc) = 1;
+ 		TREE_INVARIANT (fdesc) = 1;
  	        list = tree_cons (NULL_TREE, fdesc, list);
  	      }
  	  else
*************** get_dispatch_table (tree type, tree this
*** 1377,1382 ****
--- 1471,1517 ----
  						   arraysize), list);
  }
  
+ 
+ /* Set the method_index for a method decl.  */
+ void
+ set_method_index (tree decl, tree method_index)
+ {
+   if (method_index != NULL_TREE)
+     {
+       /* method_index is null if we're using indirect dispatch.  */
+       method_index = fold (convert (sizetype, method_index));
+ 
+       if (TARGET_VTABLE_USES_DESCRIPTORS)
+ 	/* Add one to skip bogus descriptor for class and GC descriptor. */
+ 	method_index = size_binop (PLUS_EXPR, method_index, size_int (1));
+       else
+ 	/* Add 1 to skip "class" field of dtable, and 1 to skip GC
+ 	   descriptor.  */
+ 	method_index = size_binop (PLUS_EXPR, method_index, size_int (2));
+     }
+ 
+   DECL_VINDEX (decl) = method_index;
+ }
+ 
+ /* Get the method_index for a method decl.  */
+ tree
+ get_method_index (tree decl)
+ {
+   tree method_index = DECL_VINDEX (decl);
+ 
+   if (! method_index)
+     return NULL;
+ 
+   if (TARGET_VTABLE_USES_DESCRIPTORS)
+     /* Sub one to skip bogus descriptor for class and GC descriptor. */
+     method_index = size_binop (MINUS_EXPR, method_index, size_int (1));
+   else
+     /* Sub 1 to skip "class" field of dtable, and 1 to skip GC descriptor.  */
+     method_index = size_binop (MINUS_EXPR, method_index, size_int (2));
+ 
+   return method_index;
+ }
+ 
  static int
  supers_all_compiled (tree type)
  {
*************** make_class_data (tree type)
*** 1414,1427 ****
    tree type_decl = TYPE_NAME (type);
    /** Offset from start of virtual function table declaration
        to where objects actually point at, following new g++ ABI. */
!   tree dtable_start_offset = build_int_2 (2 * POINTER_SIZE / BITS_PER_UNIT, 0);
  
    this_class_addr = build_class_ref (type);
    decl = TREE_OPERAND (this_class_addr, 0);
  
    /* Build Field array. */
    field = TYPE_FIELDS (type);
!   if (DECL_NAME (field) == NULL_TREE)
      field = TREE_CHAIN (field);  /* Skip dummy field for inherited data. */
    for ( ;  field != NULL_TREE;  field = TREE_CHAIN (field))
      {
--- 1549,1565 ----
    tree type_decl = TYPE_NAME (type);
    /** Offset from start of virtual function table declaration
        to where objects actually point at, following new g++ ABI. */
!   tree dtable_start_offset = build_int_cst (NULL_TREE,
! 					    2 * POINTER_SIZE / BITS_PER_UNIT);
  
    this_class_addr = build_class_ref (type);
    decl = TREE_OPERAND (this_class_addr, 0);
  
    /* Build Field array. */
    field = TYPE_FIELDS (type);
!   while (field && DECL_ARTIFICIAL (field))
!     field = TREE_CHAIN (field);  /* Skip dummy fields.  */
!   if (field && DECL_NAME (field) == NULL_TREE)
      field = TREE_CHAIN (field);  /* Skip dummy field for inherited data. */
    for ( ;  field != NULL_TREE;  field = TREE_CHAIN (field))
      {
*************** make_class_data (tree type)
*** 1438,1444 ****
  	      if (initial != NULL_TREE
  		  && TREE_TYPE (initial) == string_ptr_type_node)
  		DECL_INITIAL (field) = NULL_TREE;
! 	      rest_of_decl_compilation (field, (char*) 0, 1, 1);
  	      DECL_INITIAL (field) = initial;
  	    }
  	  else
--- 1576,1582 ----
  	      if (initial != NULL_TREE
  		  && TREE_TYPE (initial) == string_ptr_type_node)
  		DECL_INITIAL (field) = NULL_TREE;
! 	      rest_of_decl_compilation (field, 1, 1);
  	      DECL_INITIAL (field) = initial;
  	    }
  	  else
*************** make_class_data (tree type)
*** 1462,1468 ****
        TREE_STATIC (fields_decl) = 1;
        DECL_ARTIFICIAL (fields_decl) = 1;
        DECL_IGNORED_P (fields_decl) = 1;
!       rest_of_decl_compilation (fields_decl, (char*) 0, 1, 0);
      }
    else
      fields_decl = NULL_TREE;
--- 1600,1606 ----
        TREE_STATIC (fields_decl) = 1;
        DECL_ARTIFICIAL (fields_decl) = 1;
        DECL_IGNORED_P (fields_decl) = 1;
!       rest_of_decl_compilation (fields_decl, 1, 0);
      }
    else
      fields_decl = NULL_TREE;
*************** make_class_data (tree type)
*** 1474,1480 ****
        tree init;
        if (METHOD_PRIVATE (method)
  	  && ! flag_keep_inline_functions
! 	  && (flag_inline_functions || optimize))
  	continue;
        init = make_method_value (method);
        method_count++;
--- 1612,1623 ----
        tree init;
        if (METHOD_PRIVATE (method)
  	  && ! flag_keep_inline_functions
! 	  && optimize)
! 	continue;
!       /* Even if we have a decl, we don't necessarily have the code.
! 	 This can happen if we inherit a method from a superclass for
! 	 which we don't have a .class file.  */
!       if (METHOD_DUMMY (method))
  	continue;
        init = make_method_value (method);
        method_count++;
*************** make_class_data (tree type)
*** 1488,1494 ****
    TREE_STATIC (methods_decl) = 1;
    DECL_ARTIFICIAL (methods_decl) = 1;
    DECL_IGNORED_P (methods_decl) = 1;
!   rest_of_decl_compilation (methods_decl, (char*) 0, 1, 0);
  
    if (supers_all_compiled (type) && ! CLASS_INTERFACE (type_decl)
        && !flag_indirect_dispatch)
--- 1631,1637 ----
    TREE_STATIC (methods_decl) = 1;
    DECL_ARTIFICIAL (methods_decl) = 1;
    DECL_IGNORED_P (methods_decl) = 1;
!   rest_of_decl_compilation (methods_decl, 1, 0);
  
    if (supers_all_compiled (type) && ! CLASS_INTERFACE (type_decl)
        && !flag_indirect_dispatch)
*************** make_class_data (tree type)
*** 1500,1506 ****
        DECL_ARTIFICIAL (dtable_decl) = 1;
        DECL_IGNORED_P (dtable_decl) = 1;
        TREE_PUBLIC (dtable_decl) = 1;
!       rest_of_decl_compilation (dtable_decl, (char*) 0, 1, 0);
        if (type == class_type_node)
  	class_dtable_decl = dtable_decl;
      }
--- 1643,1649 ----
        DECL_ARTIFICIAL (dtable_decl) = 1;
        DECL_IGNORED_P (dtable_decl) = 1;
        TREE_PUBLIC (dtable_decl) = 1;
!       rest_of_decl_compilation (dtable_decl, 1, 0);
        if (type == class_type_node)
  	class_dtable_decl = dtable_decl;
      }
*************** make_class_data (tree type)
*** 1513,1540 ****
        DECL_IGNORED_P (class_dtable_decl) = 1;
        if (is_compiled_class (class_type_node) != 2)
  	DECL_EXTERNAL (class_dtable_decl) = 1;
!       rest_of_decl_compilation (class_dtable_decl, (char*) 0, 1, 0);
      }
  
    super = CLASSTYPE_SUPER (type);
    if (super == NULL_TREE)
      super = null_pointer_node;
!   else if (/* FIXME: we should also test for (!
! 	      flag_indirect_dispatch) here, but libgcj can't cope with
! 	      a symbolic reference a superclass in the class data.  */
! 	   assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl)))
  	   && assume_compiled (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (super)))))
      super = build_class_ref (super);
    else
      {
        int super_index = alloc_class_constant (super);
!       super = build_int_2 (super_index, 0);
!       TREE_TYPE (super) = ptr_type_node;
      }
  
    /* Build and emit the array of implemented interfaces. */
    if (type != object_type_node)
!       interface_len = TREE_VEC_LENGTH (TYPE_BINFO_BASETYPES (type)) - 1;
    if (interface_len > 0)
      {
        tree init = NULL_TREE;
--- 1656,1681 ----
        DECL_IGNORED_P (class_dtable_decl) = 1;
        if (is_compiled_class (class_type_node) != 2)
  	DECL_EXTERNAL (class_dtable_decl) = 1;
!       rest_of_decl_compilation (class_dtable_decl, 1, 0);
      }
  
    super = CLASSTYPE_SUPER (type);
    if (super == NULL_TREE)
      super = null_pointer_node;
!   else if (! flag_indirect_dispatch
! 	   && assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl)))
  	   && assume_compiled (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (super)))))
      super = build_class_ref (super);
    else
      {
        int super_index = alloc_class_constant (super);
!       super = build_int_cst (ptr_type_node, super_index);
      }
  
    /* Build and emit the array of implemented interfaces. */
    if (type != object_type_node)
!     interface_len = BINFO_N_BASE_BINFOS (TYPE_BINFO (type)) - 1;
!   
    if (interface_len > 0)
      {
        tree init = NULL_TREE;
*************** make_class_data (tree type)
*** 1544,1552 ****
  	= build_prim_array_type (class_ptr_type, interface_len);
        idecl = build_decl (VAR_DECL, mangled_classname ("_IF_", type),
  			  interface_array_type);
        for (i = interface_len;  i > 0; i--)
  	{
! 	  tree child = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (type), i);
  	  tree iclass = BINFO_TYPE (child);
  	  tree index;
  	  if (! flag_indirect_dispatch
--- 1685,1694 ----
  	= build_prim_array_type (class_ptr_type, interface_len);
        idecl = build_decl (VAR_DECL, mangled_classname ("_IF_", type),
  			  interface_array_type);
+       
        for (i = interface_len;  i > 0; i--)
  	{
! 	  tree child = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
  	  tree iclass = BINFO_TYPE (child);
  	  tree index;
  	  if (! flag_indirect_dispatch
*************** make_class_data (tree type)
*** 1556,1563 ****
  	  else
  	    {
  	      int int_index = alloc_class_constant (iclass);
! 	      index = build_int_2 (int_index, 0);
! 	      TREE_TYPE (index) = ptr_type_node;
  	    }
  	  init = tree_cons (NULL_TREE, index, init); 
  	}
--- 1698,1704 ----
  	  else
  	    {
  	      int int_index = alloc_class_constant (iclass);
! 	      index = build_int_cst (ptr_type_node, int_index);
  	    }
  	  init = tree_cons (NULL_TREE, index, init); 
  	}
*************** make_class_data (tree type)
*** 1566,1572 ****
        DECL_ARTIFICIAL (idecl) = 1;
        DECL_IGNORED_P (idecl) = 1;
        interfaces = build1 (ADDR_EXPR, ptr_type_node, idecl);
!       rest_of_decl_compilation (idecl,  (char*) 0, 1, 0);
      }
  
    constant_pool_constructor = build_constants_constructor ();
--- 1707,1713 ----
        DECL_ARTIFICIAL (idecl) = 1;
        DECL_IGNORED_P (idecl) = 1;
        interfaces = build1 (ADDR_EXPR, ptr_type_node, idecl);
!       rest_of_decl_compilation (idecl, 1, 0);
      }
  
    constant_pool_constructor = build_constants_constructor ();
*************** make_class_data (tree type)
*** 1577,1614 ****
  	= emit_symbol_table 
  	(DECL_NAME (TYPE_OTABLE_DECL (type)), 
  	 TYPE_OTABLE_DECL (type), TYPE_OTABLE_METHODS (type), 
! 	 TYPE_OTABLE_SYMS_DECL (type), integer_type_node);
         
        TYPE_ATABLE_DECL (type) 
  	= emit_symbol_table 
  	(DECL_NAME (TYPE_ATABLE_DECL (type)), 
  	 TYPE_ATABLE_DECL (type), TYPE_ATABLE_METHODS (type), 
! 	 TYPE_ATABLE_SYMS_DECL (type), ptr_type_node);
      }
    
    TYPE_CTABLE_DECL (type) = emit_catch_table (type);
  
    START_RECORD_CONSTRUCTOR (temp, object_type_node);
    PUSH_FIELD_VALUE (temp, "vtable",
! 		    build (PLUS_EXPR, dtable_ptr_type,
! 			   build1 (ADDR_EXPR, dtable_ptr_type, class_dtable_decl),
! 			   dtable_start_offset));
    if (! flag_hash_synchronization)
      PUSH_FIELD_VALUE (temp, "sync_info", null_pointer_node);
    FINISH_RECORD_CONSTRUCTOR (temp);
    START_RECORD_CONSTRUCTOR (cons, class_type_node);
    PUSH_SUPER_VALUE (cons, temp);
!   PUSH_FIELD_VALUE (cons, "next", null_pointer_node);
    PUSH_FIELD_VALUE (cons, "name", build_utf8_ref (DECL_NAME (type_decl)));
    PUSH_FIELD_VALUE (cons, "accflags",
! 		    build_int_2 (get_access_flags_from_decl (type_decl), 0));
  
    PUSH_FIELD_VALUE (cons, "superclass", 
  		    CLASS_INTERFACE (type_decl) ? null_pointer_node : super);
    PUSH_FIELD_VALUE (cons, "constants", constant_pool_constructor);
    PUSH_FIELD_VALUE (cons, "methods",
  		    build1 (ADDR_EXPR, method_ptr_type_node, methods_decl));
!   PUSH_FIELD_VALUE (cons, "method_count",  build_int_2 (method_count, 0));
  
    if (flag_indirect_dispatch)
      PUSH_FIELD_VALUE (cons, "vtable_method_count", integer_minus_one_node);
--- 1718,1764 ----
  	= emit_symbol_table 
  	(DECL_NAME (TYPE_OTABLE_DECL (type)), 
  	 TYPE_OTABLE_DECL (type), TYPE_OTABLE_METHODS (type), 
! 	 TYPE_OTABLE_SYMS_DECL (type), integer_type_node, 1);
         
        TYPE_ATABLE_DECL (type) 
  	= emit_symbol_table 
  	(DECL_NAME (TYPE_ATABLE_DECL (type)), 
  	 TYPE_ATABLE_DECL (type), TYPE_ATABLE_METHODS (type), 
! 	 TYPE_ATABLE_SYMS_DECL (type), ptr_type_node, 1);
!        
!       TYPE_ITABLE_DECL (type) 
! 	= emit_symbol_table 
! 	(DECL_NAME (TYPE_ITABLE_DECL (type)), 
! 	 TYPE_ITABLE_DECL (type), TYPE_ITABLE_METHODS (type), 
! 	 TYPE_ITABLE_SYMS_DECL (type), ptr_type_node, 2);
      }
    
    TYPE_CTABLE_DECL (type) = emit_catch_table (type);
  
    START_RECORD_CONSTRUCTOR (temp, object_type_node);
    PUSH_FIELD_VALUE (temp, "vtable",
! 		    build2 (PLUS_EXPR, dtable_ptr_type,
! 			    build1 (ADDR_EXPR, dtable_ptr_type,
! 				    class_dtable_decl),
! 			    dtable_start_offset));
    if (! flag_hash_synchronization)
      PUSH_FIELD_VALUE (temp, "sync_info", null_pointer_node);
    FINISH_RECORD_CONSTRUCTOR (temp);
    START_RECORD_CONSTRUCTOR (cons, class_type_node);
    PUSH_SUPER_VALUE (cons, temp);
!   PUSH_FIELD_VALUE (cons, "next_or_version", gcj_abi_version);
    PUSH_FIELD_VALUE (cons, "name", build_utf8_ref (DECL_NAME (type_decl)));
    PUSH_FIELD_VALUE (cons, "accflags",
! 		    build_int_cst (NULL_TREE,
! 				   get_access_flags_from_decl (type_decl)));
  
    PUSH_FIELD_VALUE (cons, "superclass", 
  		    CLASS_INTERFACE (type_decl) ? null_pointer_node : super);
    PUSH_FIELD_VALUE (cons, "constants", constant_pool_constructor);
    PUSH_FIELD_VALUE (cons, "methods",
  		    build1 (ADDR_EXPR, method_ptr_type_node, methods_decl));
!   PUSH_FIELD_VALUE (cons, "method_count",
! 		    build_int_cst (NULL_TREE, method_count));
  
    if (flag_indirect_dispatch)
      PUSH_FIELD_VALUE (cons, "vtable_method_count", integer_minus_one_node);
*************** make_class_data (tree type)
*** 1618,1636 ****
    PUSH_FIELD_VALUE (cons, "fields",
  		    fields_decl == NULL_TREE ? null_pointer_node
  		    : build1 (ADDR_EXPR, field_ptr_type_node, fields_decl));
!   PUSH_FIELD_VALUE (cons, "size_in_bytes", size_in_bytes (type));
!   PUSH_FIELD_VALUE (cons, "field_count", build_int_2 (field_count, 0));
    PUSH_FIELD_VALUE (cons, "static_field_count",
! 		    build_int_2 (static_field_count, 0));
  
    if (flag_indirect_dispatch)
      PUSH_FIELD_VALUE (cons, "vtable", null_pointer_node);
    else
      PUSH_FIELD_VALUE (cons, "vtable",
  		      dtable_decl == NULL_TREE ? null_pointer_node
! 		      : build (PLUS_EXPR, dtable_ptr_type,
! 			       build1 (ADDR_EXPR, dtable_ptr_type, dtable_decl),
! 			       dtable_start_offset));
    if (TYPE_OTABLE_METHODS (type) == NULL_TREE)
      {
        PUSH_FIELD_VALUE (cons, "otable", null_pointer_node);
--- 1768,1793 ----
    PUSH_FIELD_VALUE (cons, "fields",
  		    fields_decl == NULL_TREE ? null_pointer_node
  		    : build1 (ADDR_EXPR, field_ptr_type_node, fields_decl));
!   /* If we're using the binary compatibility ABI we don't know the
!      size until load time.  */
!   PUSH_FIELD_VALUE (cons, "size_in_bytes", 
! 		    (flag_indirect_dispatch 
! 		     ? integer_minus_one_node 
! 		     : size_in_bytes (type)));
!   PUSH_FIELD_VALUE (cons, "field_count", 
! 		    build_int_cst (NULL_TREE, field_count));
    PUSH_FIELD_VALUE (cons, "static_field_count",
! 		    build_int_cst (NULL_TREE, static_field_count));
  
    if (flag_indirect_dispatch)
      PUSH_FIELD_VALUE (cons, "vtable", null_pointer_node);
    else
      PUSH_FIELD_VALUE (cons, "vtable",
  		      dtable_decl == NULL_TREE ? null_pointer_node
! 		      : build2 (PLUS_EXPR, dtable_ptr_type,
! 				build1 (ADDR_EXPR, dtable_ptr_type,
! 					dtable_decl),
! 				dtable_start_offset));
    if (TYPE_OTABLE_METHODS (type) == NULL_TREE)
      {
        PUSH_FIELD_VALUE (cons, "otable", null_pointer_node);
*************** make_class_data (tree type)
*** 1644,1650 ****
  			build1 (ADDR_EXPR, symbols_array_ptr_type,
  				TYPE_OTABLE_SYMS_DECL (type)));
        TREE_CONSTANT (TYPE_OTABLE_DECL (type)) = 1;
!     } 
    if (TYPE_ATABLE_METHODS(type) == NULL_TREE)
      {
        PUSH_FIELD_VALUE (cons, "atable", null_pointer_node);
--- 1801,1808 ----
  			build1 (ADDR_EXPR, symbols_array_ptr_type,
  				TYPE_OTABLE_SYMS_DECL (type)));
        TREE_CONSTANT (TYPE_OTABLE_DECL (type)) = 1;
!       TREE_INVARIANT (TYPE_OTABLE_DECL (type)) = 1;
!     }
    if (TYPE_ATABLE_METHODS(type) == NULL_TREE)
      {
        PUSH_FIELD_VALUE (cons, "atable", null_pointer_node);
*************** make_class_data (tree type)
*** 1658,1671 ****
  			build1 (ADDR_EXPR, symbols_array_ptr_type,
  				TYPE_ATABLE_SYMS_DECL (type)));
        TREE_CONSTANT (TYPE_ATABLE_DECL (type)) = 1;
      }
   
    PUSH_FIELD_VALUE (cons, "catch_classes",
  		    build1 (ADDR_EXPR, ptr_type_node, TYPE_CTABLE_DECL (type))); 
    PUSH_FIELD_VALUE (cons, "interfaces", interfaces);
    PUSH_FIELD_VALUE (cons, "loader", null_pointer_node);
!   PUSH_FIELD_VALUE (cons, "interface_count", build_int_2 (interface_len, 0));
!   PUSH_FIELD_VALUE (cons, "state", integer_zero_node);
  
    PUSH_FIELD_VALUE (cons, "thread", null_pointer_node);
    PUSH_FIELD_VALUE (cons, "depth", integer_zero_node);
--- 1816,1852 ----
  			build1 (ADDR_EXPR, symbols_array_ptr_type,
  				TYPE_ATABLE_SYMS_DECL (type)));
        TREE_CONSTANT (TYPE_ATABLE_DECL (type)) = 1;
+       TREE_INVARIANT (TYPE_ATABLE_DECL (type)) = 1;
+     }
+    if (TYPE_ITABLE_METHODS(type) == NULL_TREE)
+     {
+       PUSH_FIELD_VALUE (cons, "itable", null_pointer_node);
+       PUSH_FIELD_VALUE (cons, "itable_syms", null_pointer_node);
+     }
+   else
+     {
+       PUSH_FIELD_VALUE (cons, "itable",
+ 			build1 (ADDR_EXPR, itable_ptr_type, TYPE_ITABLE_DECL (type)));
+       PUSH_FIELD_VALUE (cons, "itable_syms",
+ 			build1 (ADDR_EXPR, symbols_array_ptr_type,
+ 				TYPE_ITABLE_SYMS_DECL (type)));
+       TREE_CONSTANT (TYPE_ITABLE_DECL (type)) = 1;
+       TREE_INVARIANT (TYPE_ITABLE_DECL (type)) = 1;
      }
   
    PUSH_FIELD_VALUE (cons, "catch_classes",
  		    build1 (ADDR_EXPR, ptr_type_node, TYPE_CTABLE_DECL (type))); 
    PUSH_FIELD_VALUE (cons, "interfaces", interfaces);
    PUSH_FIELD_VALUE (cons, "loader", null_pointer_node);
!   PUSH_FIELD_VALUE (cons, "interface_count",
! 		    build_int_cst (NULL_TREE, interface_len));
!   PUSH_FIELD_VALUE 
!     (cons, "state",
!      convert (byte_type_node,
! 	      build_int_cst (NULL_TREE,
! 			     flag_indirect_dispatch
! 			     ? JV_STATE_PRELOADING
! 			     : JV_STATE_COMPILED)));
  
    PUSH_FIELD_VALUE (cons, "thread", null_pointer_node);
    PUSH_FIELD_VALUE (cons, "depth", integer_zero_node);
*************** make_class_data (tree type)
*** 1673,1680 ****
--- 1854,1876 ----
    PUSH_FIELD_VALUE (cons, "idt", null_pointer_node);
    PUSH_FIELD_VALUE (cons, "arrayclass", null_pointer_node);
    PUSH_FIELD_VALUE (cons, "protectionDomain", null_pointer_node);
+ 
+   {
+     tree assertion_table_ref;
+     if (TYPE_ASSERTIONS (type) == NULL)
+       assertion_table_ref = null_pointer_node;
+     else
+       assertion_table_ref = build1 (ADDR_EXPR, 
+ 				    build_pointer_type (assertion_table_type),
+ 				    emit_assertion_table (type));
+     
+     PUSH_FIELD_VALUE (cons, "assertion_table", assertion_table_ref);
+   }
+ 
    PUSH_FIELD_VALUE (cons, "hack_signers", null_pointer_node);
    PUSH_FIELD_VALUE (cons, "chain", null_pointer_node);
+   PUSH_FIELD_VALUE (cons, "aux_info", null_pointer_node);
+   PUSH_FIELD_VALUE (cons, "engine", null_pointer_node);
  
    FINISH_RECORD_CONSTRUCTOR (cons);
  
*************** make_class_data (tree type)
*** 1684,1724 ****
    if (flag_hash_synchronization && POINTER_SIZE < 64)
      DECL_ALIGN (decl) = 64; 
    
!   rest_of_decl_compilation (decl, (char*) 0, 1, 0);
  }
  
  void
  finish_class (void)
  {
!   tree method;
!   tree type_methods = TYPE_METHODS (current_class);
!   int saw_native_method = 0;
! 
!   /* Find out if we have any native methods.  We use this information
!      later.  */
!   for (method = type_methods;
!        method != NULL_TREE;
!        method = TREE_CHAIN (method))
!     {
!       if (METHOD_NATIVE (method))
! 	{
! 	  saw_native_method = 1;
! 	  break;
! 	}
!     }
! 
!   /* Emit deferred inline methods. */  
!   for (method = type_methods; method != NULL_TREE; )
      {
!       if (! TREE_ASM_WRITTEN (method) && DECL_SAVED_INSNS (method) != 0)
! 	{
! 	  output_inline_function (method);
! 	  /* Scan the list again to see if there are any earlier
! 	     methods to emit. */
! 	  method = type_methods;
! 	  continue;
! 	}
!       method = TREE_CHAIN (method);
      }
  
    java_expand_catch_classes (current_class);
--- 1880,1904 ----
    if (flag_hash_synchronization && POINTER_SIZE < 64)
      DECL_ALIGN (decl) = 64; 
    
!   rest_of_decl_compilation (decl, 1, 0);
!   
!   TYPE_OTABLE_DECL (type) = NULL_TREE;
!   TYPE_ATABLE_DECL (type) = NULL_TREE;
!   TYPE_CTABLE_DECL (type) = NULL_TREE;
  }
  
  void
  finish_class (void)
  {
!   if (TYPE_VERIFY_METHOD (output_class))
      {
!       tree verify_method = TYPE_VERIFY_METHOD (output_class);
!       DECL_SAVED_TREE (verify_method) 
! 	= add_stmt_to_compound (DECL_SAVED_TREE (verify_method), void_type_node,
! 				build (RETURN_EXPR, void_type_node, NULL));
!       java_genericize (verify_method);
!       cgraph_finalize_function (verify_method, false);
!       TYPE_ASSERTIONS (current_class) = NULL;
      }
  
    java_expand_catch_classes (current_class);
*************** finish_class (void)
*** 1726,1732 ****
    current_function_decl = NULL_TREE;
    make_class_data (current_class);
    register_class ();
!   rest_of_decl_compilation (TYPE_NAME (current_class), (char*) 0, 1, 0);
  }
  
  /* Return 2 if CLASS is compiled by this compilation job;
--- 1906,1912 ----
    current_function_decl = NULL_TREE;
    make_class_data (current_class);
    register_class ();
!   rest_of_decl_compilation (TYPE_NAME (current_class), 1, 0);
  }
  
  /* Return 2 if CLASS is compiled by this compilation job;
*************** maybe_layout_super_class (tree super_cla
*** 1879,1887 ****
--- 2059,2072 ----
  	  if (this_class)
  	    {
  	      tree this_decl = TYPE_NAME (this_class);
+ #ifdef USE_MAPPED_LOCATION
+ 	      this_wrap = build_expr_wfl (this_class,
+ 					  DECL_SOURCE_LOCATION (this_decl));
+ #else
  	      this_wrap = build_expr_wfl (this_class,
  					  DECL_SOURCE_FILE (this_decl),
  					  DECL_SOURCE_LINE (this_decl), 0);
+ #endif
  	    }
  	  super_class = do_resolve_class (NULL_TREE, /* FIXME? */
  					  super_class, NULL_TREE, this_wrap);
*************** layout_class (tree this_class)
*** 1909,1915 ****
        char *report;
        tree current;
  
!       sprintf (buffer, " with `%s'",
  	       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (this_class))));
        obstack_grow (&temporary_obstack, buffer, strlen (buffer));
  
--- 2094,2100 ----
        char *report;
        tree current;
  
!       sprintf (buffer, " with '%s'",
  	       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (this_class))));
        obstack_grow (&temporary_obstack, buffer, strlen (buffer));
  
*************** layout_class (tree this_class)
*** 1917,1923 ****
  	   current = TREE_CHAIN (current))
  	{
  	  tree decl = TYPE_NAME (TREE_PURPOSE (current));
! 	  sprintf (buffer, "\n  which inherits from `%s' (%s:%d)",
  		   IDENTIFIER_POINTER (DECL_NAME (decl)),
  		   DECL_SOURCE_FILE (decl),
  		   DECL_SOURCE_LINE (decl));
--- 2102,2108 ----
  	   current = TREE_CHAIN (current))
  	{
  	  tree decl = TYPE_NAME (TREE_PURPOSE (current));
! 	  sprintf (buffer, "\n  which inherits from '%s' (%s:%d)",
  		   IDENTIFIER_POINTER (DECL_NAME (decl)),
  		   DECL_SOURCE_FILE (decl),
  		   DECL_SOURCE_LINE (decl));
*************** layout_class (tree this_class)
*** 1967,1983 ****
       of this itself.  */
    if (!CLASS_FROM_SOURCE_P (this_class))
      {
!       tree basetype_vec = TYPE_BINFO_BASETYPES (this_class);
! 
!       if (basetype_vec)
  	{
! 	  int n = TREE_VEC_LENGTH (basetype_vec) - 1;
! 	  int i;
! 	  for (i = n; i > 0; i--)
  	    {
! 	      tree vec_elt = TREE_VEC_ELT (basetype_vec, i);
! 	      tree super_interface = BINFO_TYPE (vec_elt);
! 
  	      tree maybe_super_interface 
  		= maybe_layout_super_class (super_interface, NULL_TREE);
  	      if (maybe_super_interface == NULL
--- 2152,2164 ----
       of this itself.  */
    if (!CLASS_FROM_SOURCE_P (this_class))
      {
!       int i;
!             if (TYPE_BINFO (this_class))
  	{
! 	  for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (this_class)) - 1; i > 0; i--)
  	    {
! 	      tree binfo = BINFO_BASE_BINFO (TYPE_BINFO (this_class), i);
! 	      tree super_interface = BINFO_TYPE (binfo);
  	      tree maybe_super_interface 
  		= maybe_layout_super_class (super_interface, NULL_TREE);
  	      if (maybe_super_interface == NULL
*************** layout_class (tree this_class)
*** 2003,2019 ****
  static void
  add_miranda_methods (tree base_class, tree search_class)
  {
!   tree basetype_vec = TYPE_BINFO_BASETYPES (search_class);
!   int i, n = TREE_VEC_LENGTH (basetype_vec);
!   for (i = 1; i < n; ++i)
      {
        tree method_decl;
!       tree elt = TREE_VEC_ELT (basetype_vec, i);
!       if (elt == NULL_TREE)
! 	break;
!       elt = BINFO_TYPE (elt);
  
        /* Ensure that interface methods are seen in declared order.  */
        layout_class_methods (elt);
  
        /* All base classes will have been laid out at this point, so the order 
--- 2184,2209 ----
  static void
  add_miranda_methods (tree base_class, tree search_class)
  {
!   int i;
!   tree binfo, base_binfo;
! 
!   if (!CLASS_PARSED_P (search_class))
!     load_class (search_class, 1);
!   
!   for (binfo = TYPE_BINFO (search_class), i = 1;
!        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
      {
        tree method_decl;
!       tree elt = BINFO_TYPE (base_binfo);
! 
!       /* FIXME: This is totally bogus.  We should not be handling
! 	 Miranda methods at all if we're using the BC ABI.  */
!       if (TYPE_DUMMY (elt))
! 	continue;
  
        /* Ensure that interface methods are seen in declared order.  */
+       if (!CLASS_LOADED_P (elt))
+ 	load_class (elt, 1);
        layout_class_methods (elt);
  
        /* All base classes will have been laid out at this point, so the order 
*************** layout_class_methods (tree this_class)
*** 2071,2077 ****
      dtable_count = integer_zero_node;
  
    type_name = TYPE_NAME (this_class);
!   if (CLASS_ABSTRACT (type_name) || CLASS_INTERFACE (type_name))
      {
        /* An abstract class can have methods which are declared only in
  	 an implemented interface.  These are called "Miranda
--- 2261,2268 ----
      dtable_count = integer_zero_node;
  
    type_name = TYPE_NAME (this_class);
!   if (!flag_indirect_dispatch
!       && (CLASS_ABSTRACT (type_name) || CLASS_INTERFACE (type_name)))
      {
        /* An abstract class can have methods which are declared only in
  	 an implemented interface.  These are called "Miranda
*************** layout_class_methods (tree this_class)
*** 2090,2095 ****
--- 2281,2303 ----
    TYPE_NVIRTUALS (this_class) = dtable_count;
  }
  
+ /* Return the index of METHOD in INTERFACE.  This index begins at 1 and is used as an
+    argument for _Jv_LookupInterfaceMethodIdx(). */
+ int
+ get_interface_method_index (tree method, tree interface)
+ {
+   tree meth;
+   int i = 1;
+ 
+   for (meth = TYPE_METHODS (interface); ; meth = TREE_CHAIN (meth), i++)
+     {
+       if (meth == method)
+ 	return i;
+       if (meth == NULL_TREE)
+ 	abort ();
+     }
+ }
+ 
  /* Lay METHOD_DECL out, returning a possibly new value of
     DTABLE_COUNT. Also mangle the method's name. */
  
*************** layout_class_method (tree this_class, tr
*** 2113,2119 ****
    if (! METHOD_ABSTRACT (method_decl) 
        || (CLASS_INTERFACE (TYPE_NAME (this_class)) 
  	  && (DECL_CLINIT_P (method_decl))))
!     make_decl_rtl (method_decl, NULL);
  
    if (ID_INIT_P (method_name))
      {
--- 2321,2327 ----
    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))
      {
*************** layout_class_method (tree this_class, tr
*** 2127,2154 ****
        DECL_CONSTRUCTOR_P (method_decl) = 1;
        build_java_argument_signature (TREE_TYPE (method_decl));
      }
!   else if (! METHOD_STATIC (method_decl) && !DECL_ARTIFICIAL (method_decl))
      {
        tree method_sig =
  	build_java_argument_signature (TREE_TYPE (method_decl));
        tree super_method = lookup_argument_method (super_class, method_name,
  						  method_sig);
!       if (super_method != NULL_TREE && ! METHOD_PRIVATE (super_method))
  	{
! 	  DECL_VINDEX (method_decl) = DECL_VINDEX (super_method);
! 	  if (DECL_VINDEX (method_decl) == NULL_TREE 
! 	      && !CLASS_FROM_SOURCE_P (this_class))
  	    error ("%Jnon-static method '%D' overrides static method",
                     method_decl, method_decl);
  	}
!       else if (! METHOD_FINAL (method_decl)
! 	       && ! METHOD_PRIVATE (method_decl)
! 	       && ! CLASS_FINAL (TYPE_NAME (this_class))
  	       && dtable_count)
  	{
! 	  DECL_VINDEX (method_decl) = dtable_count;
! 	  dtable_count = fold (build (PLUS_EXPR, integer_type_node,
! 				      dtable_count, integer_one_node));
  	}
      }
  
--- 2335,2389 ----
        DECL_CONSTRUCTOR_P (method_decl) = 1;
        build_java_argument_signature (TREE_TYPE (method_decl));
      }
!   else if (! METHOD_STATIC (method_decl))
      {
        tree method_sig =
  	build_java_argument_signature (TREE_TYPE (method_decl));
+       bool method_override = false;
        tree super_method = lookup_argument_method (super_class, method_name,
  						  method_sig);
!       if (super_method != NULL_TREE
! 	  && ! METHOD_DUMMY (super_method))
!         {
! 	  method_override = true;
! 	  if (! METHOD_PUBLIC (super_method) && 
! 	      ! METHOD_PROTECTED (super_method))
! 	    {
! 	      /* Don't override private method, or default-access method in 
! 		 another package.  */
! 	      if (METHOD_PRIVATE (super_method) ||
! 		  ! in_same_package (TYPE_NAME (this_class), 
! 				     TYPE_NAME (super_class)))
! 		method_override = false;
! 	   }
! 	}
!       if (method_override)
  	{
! 	  tree method_index = get_method_index (super_method);
! 	  set_method_index (method_decl, method_index);
! 	  if (method_index == NULL_TREE 
! 	      && ! 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)
! 		   || METHOD_PRIVATE (method_decl)))
! 	{
! 	  /* We don't generate vtable entries for final Object
! 	     methods.  This is simply to save space, since every
! 	     object would otherwise have to define them.  */
! 	}
!       else if (! METHOD_PRIVATE (method_decl)
  	       && dtable_count)
  	{
! 	  /* 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));
  	}
      }
  
*************** register_class (void)
*** 2177,2194 ****
  /* Emit something to register classes at start-up time.
  
     The preferred mechanism is through the .jcr section, which contain
!    a list of pointers to classes which get registered during
!    constructor invocation time.  The fallback mechanism is to generate
!    a `constructor' function which calls _Jv_RegisterClass for each
!    class in this file.  */
  
  void
! emit_register_classes (void)
  {
!   /* ??? This isn't quite the correct test.  We also have to know
!      that the target is using gcc's crtbegin/crtend objects rather
!      than the ones that come with the operating system.  */
!   if (SUPPORTS_WEAK && targetm.have_named_sections)
      {
  #ifdef JCR_SECTION_NAME
        tree t;
--- 2412,2435 ----
  /* Emit something to register classes at start-up time.
  
     The preferred mechanism is through the .jcr section, which contain
!    a list of pointers to classes which get registered during constructor
!    invocation time.
! 
!    The fallback mechanism is to add statements to *LIST_P to call
!    _Jv_RegisterClass for each class in this file.  These statements will
!    be added to a static constructor function for this translation unit.  */
  
  void
! emit_register_classes (tree *list_p)
  {
!   if (registered_class == NULL)
!     return;
! 
!   /* TARGET_USE_JCR_SECTION defaults to 1 if SUPPORTS_WEAK and
!      TARGET_ASM_NAMED_SECTION, else 0.  Some targets meet those conditions
!      but lack suitable crtbegin/end objects or linker support.  These
!      targets can overide the default in tm.h to use the fallback mechanism.  */
!   if (TARGET_USE_JCR_SECTION)
      {
  #ifdef JCR_SECTION_NAME
        tree t;
*************** emit_register_classes (void)
*** 2198,2252 ****
  	assemble_integer (XEXP (DECL_RTL (t), 0),
  			  POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
  #else
        abort ();
  #endif
      }
    else
      {
!       extern tree get_file_function_name (int);
!       tree init_name = get_file_function_name ('I');
!       tree init_type = build_function_type (void_type_node, end_params_node);
!       tree init_decl;
!       tree t;
!       location_t saved_loc = input_location;
!       
!       init_decl = build_decl (FUNCTION_DECL, init_name, init_type);
!       SET_DECL_ASSEMBLER_NAME (init_decl, init_name);
!       DECL_SOURCE_LINE (init_decl) = 0;
!       TREE_STATIC (init_decl) = 1;
!       current_function_decl = init_decl;
!       DECL_RESULT (init_decl) = build_decl (RESULT_DECL, NULL_TREE,
! 					    void_type_node);
! 
!       /* It can be a static function as long as collect2 does not have
!          to scan the object file to find its ctor/dtor routine.  */
!       TREE_PUBLIC (init_decl) = ! targetm.have_ctors_dtors;
! 
!       /* Suppress spurious warnings.  */
!       TREE_USED (init_decl) = 1;
! 
!       pushlevel (0);
!       make_decl_rtl (init_decl, NULL);
!       init_function_start (init_decl);
!       expand_function_start (init_decl, 0);
! 
!       /* Do not allow the function to be deferred.  */
!       current_function_cannot_inline
! 	= "static constructors and destructors cannot be inlined";
  
!       for ( t = registered_class; t; t = TREE_CHAIN (t))
! 	emit_library_call (registerClass_libfunc, 0, VOIDmode, 1,
! 			   XEXP (DECL_RTL (t), 0), Pmode);
!       input_location = DECL_SOURCE_LOCATION (init_decl);
!       expand_function_end ();
!       poplevel (1, 0, 1);
!       rest_of_compilation (init_decl);
!       current_function_decl = NULL_TREE;
  
!       if (targetm.have_ctors_dtors)
! 	(* targetm.asm_out.constructor) (XEXP (DECL_RTL (init_decl), 0),
! 					 DEFAULT_INIT_PRIORITY);
!       input_location = saved_loc;
      }
  }
  
--- 2439,2466 ----
  	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);
!       TREE_PUBLIC (t) = 1;
!       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);
! 	  t = build_function_call_expr (register_class_fn, t);
! 	  append_to_statement_list (t, list_p);
! 	}
      }
  }
  
*************** static tree
*** 2256,2275 ****
  build_symbol_entry (tree decl)
  {
    tree clname, name, signature, sym;
-   
    clname = build_utf8_ref (DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))));
!   name = build_utf8_ref (DECL_NAME (decl));
    signature = build_java_signature (TREE_TYPE (decl));
    signature = build_utf8_ref (unmangle_classname 
  			      (IDENTIFIER_POINTER (signature),
  			       IDENTIFIER_LENGTH (signature)));
! 
    START_RECORD_CONSTRUCTOR (sym, symbol_type);
    PUSH_FIELD_VALUE (sym, "clname", clname);
    PUSH_FIELD_VALUE (sym, "name", name);
    PUSH_FIELD_VALUE (sym, "signature", signature);
    FINISH_RECORD_CONSTRUCTOR (sym);
    TREE_CONSTANT (sym) = 1;
  
    return sym;
  } 
--- 2470,2496 ----
  build_symbol_entry (tree decl)
  {
    tree clname, name, signature, sym;
    clname = build_utf8_ref (DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))));
!   /* ???  Constructors are given the name foo.foo all the way through
!      the compiler, but in the method table they're all renamed
!      foo.<init>.  So, we have to do the same here unless we want an
!      unresolved reference at runtime.  */
!   name = build_utf8_ref ((TREE_CODE (decl) == FUNCTION_DECL 
! 			  && DECL_CONSTRUCTOR_P (decl))
! 			 ? init_identifier_node
! 			 : DECL_NAME (decl));
    signature = build_java_signature (TREE_TYPE (decl));
    signature = build_utf8_ref (unmangle_classname 
  			      (IDENTIFIER_POINTER (signature),
  			       IDENTIFIER_LENGTH (signature)));
!       
    START_RECORD_CONSTRUCTOR (sym, symbol_type);
    PUSH_FIELD_VALUE (sym, "clname", clname);
    PUSH_FIELD_VALUE (sym, "name", name);
    PUSH_FIELD_VALUE (sym, "signature", signature);
    FINISH_RECORD_CONSTRUCTOR (sym);
    TREE_CONSTANT (sym) = 1;
+   TREE_INVARIANT (sym) = 1;
  
    return sym;
  } 
*************** build_symbol_entry (tree decl)
*** 2277,2284 ****
  /* Emit a symbol table: used by -findirect-dispatch.  */
  
  tree
! emit_symbol_table (tree name, tree the_table, tree decl_list, tree the_syms_decl, 
! 			  tree the_array_element_type)
  {
    tree method_list, method, table, list, null_symbol;
    tree table_size, the_array_type;
--- 2498,2506 ----
  /* Emit a symbol table: used by -findirect-dispatch.  */
  
  tree
! emit_symbol_table (tree name, tree the_table, tree decl_list,
!                    tree the_syms_decl, tree the_array_element_type,
! 		   int element_size)
  {
    tree method_list, method, table, list, null_symbol;
    tree table_size, the_array_type;
*************** emit_symbol_table (tree name, tree the_t
*** 2308,2313 ****
--- 2530,2536 ----
    PUSH_FIELD_VALUE (null_symbol, "signature", null_pointer_node);
    FINISH_RECORD_CONSTRUCTOR (null_symbol);
    TREE_CONSTANT (null_symbol) = 1;  
+   TREE_INVARIANT (null_symbol) = 1;  
    list = tree_cons (NULL_TREE, null_symbol, list);
  
    /* Put the list in the right order and make it a constructor. */
*************** emit_symbol_table (tree name, tree the_t
*** 2318,2340 ****
    DECL_INITIAL (the_syms_decl) = table;
    DECL_ARTIFICIAL (the_syms_decl) = 1;
    DECL_IGNORED_P (the_syms_decl) = 1;
!   rest_of_decl_compilation (the_syms_decl, NULL, 1, 0);
    
    /* Now that its size is known, redefine the table as an
       uninitialized static array of INDEX + 1 elements. The extra entry
       is used by the runtime to track whether the table has been
       initialized. */
!   table_size = build_index_type (build_int_2 (index, 0));
    the_array_type = build_array_type (the_array_element_type, table_size);
    the_table = build_decl (VAR_DECL, name, the_array_type);
    TREE_STATIC (the_table) = 1;
    TREE_READONLY (the_table) = 1;  
!   rest_of_decl_compilation (the_table, NULL, 1, 0);
  
    return the_table;
  }
  
! /* make an entry for the catch_classes list.  */
  tree
  make_catch_class_record (tree catch_class, tree classname)
  {
--- 2541,2564 ----
    DECL_INITIAL (the_syms_decl) = table;
    DECL_ARTIFICIAL (the_syms_decl) = 1;
    DECL_IGNORED_P (the_syms_decl) = 1;
!   rest_of_decl_compilation (the_syms_decl, 1, 0);
    
    /* Now that its size is known, redefine the table as an
       uninitialized static array of INDEX + 1 elements. The extra entry
       is used by the runtime to track whether the table has been
       initialized. */
!   table_size 
!     = build_index_type (build_int_cst (NULL_TREE, index * element_size + 1));
    the_array_type = build_array_type (the_array_element_type, table_size);
    the_table = build_decl (VAR_DECL, name, the_array_type);
    TREE_STATIC (the_table) = 1;
    TREE_READONLY (the_table) = 1;  
!   rest_of_decl_compilation (the_table, 1, 0);
  
    return the_table;
  }
  
! /* Make an entry for the catch_classes list.  */
  tree
  make_catch_class_record (tree catch_class, tree classname)
  {
*************** emit_catch_table (tree this_class)
*** 2363,2371 ****
      tree_cons (NULL,
  	       make_catch_class_record (null_pointer_node, null_pointer_node),
  	       TYPE_CATCH_CLASSES (this_class));
!   table_size = 
!     build_index_type (build_int_2 
! 		      (list_length (TYPE_CATCH_CLASSES (this_class)), 0));
    array_type 
      = build_array_type (TREE_TYPE (TREE_TYPE (TYPE_CTABLE_DECL (this_class))),
  			table_size);
--- 2587,2595 ----
      tree_cons (NULL,
  	       make_catch_class_record (null_pointer_node, null_pointer_node),
  	       TYPE_CATCH_CLASSES (this_class));
!   table_size = build_index_type
!     (build_int_cst (NULL_TREE,
! 		    list_length (TYPE_CATCH_CLASSES (this_class))));
    array_type 
      = build_array_type (TREE_TYPE (TREE_TYPE (TYPE_CTABLE_DECL (this_class))),
  			table_size);
*************** emit_catch_table (tree this_class)
*** 2376,2392 ****
    TREE_STATIC (table) = 1;
    TREE_READONLY (table) = 1;  
    DECL_IGNORED_P (table) = 1;
!   rest_of_decl_compilation (table, NULL, 1, 0);
    return table;
  }
!  
  
  void
  init_class_processing (void)
  {
-   registerClass_libfunc = gen_rtx_SYMBOL_REF (Pmode, "_Jv_RegisterClass");
    fields_ident = get_identifier ("fields");
    info_ident = get_identifier ("info");
    gcc_obstack_init (&temporary_obstack);
  }
  
--- 2600,2704 ----
    TREE_STATIC (table) = 1;
    TREE_READONLY (table) = 1;  
    DECL_IGNORED_P (table) = 1;
!   rest_of_decl_compilation (table, 1, 0);
    return table;
  }
! 
! /* Given a type, return the signature used by
!    _Jv_FindClassFromSignature() in libgcj.  This isn't exactly the
!    same as build_java_signature() because we want the canonical array
!    type.  */
! 
! static tree
! build_signature_for_libgcj (tree type)
! {
!   tree sig, ref;
! 
!   sig = build_java_signature (type);
!   ref = build_utf8_ref (unmangle_classname (IDENTIFIER_POINTER (sig),
! 					    IDENTIFIER_LENGTH (sig)));
!   return ref;
! }
! 
! /* Add an entry to the type assertion table. Callback used during hashtable
!    traversal.  */
! 
! static int
! add_assertion_table_entry (void **htab_entry, void *ptr)
! {
!   tree entry;
!   tree code_val, op1_utf8, op2_utf8;
!   tree *list = (tree *) ptr;
!   type_assertion *as = (type_assertion *) *htab_entry;
! 
!   code_val = build_int_cst (NULL_TREE, as->assertion_code);
! 
!   if (as->op1 == NULL_TREE)
!     op1_utf8 = null_pointer_node;
!   else
!     op1_utf8 = build_signature_for_libgcj (as->op1);
! 
!   if (as->op2 == NULL_TREE)
!     op2_utf8 = null_pointer_node;
!   else
!     op2_utf8 = build_signature_for_libgcj (as->op2);
!   
!   START_RECORD_CONSTRUCTOR (entry, assertion_entry_type);
!   PUSH_FIELD_VALUE (entry, "assertion_code", code_val);
!   PUSH_FIELD_VALUE (entry, "op1", op1_utf8);
!   PUSH_FIELD_VALUE (entry, "op2", op2_utf8);
!   FINISH_RECORD_CONSTRUCTOR (entry);
!   
!   *list = tree_cons (NULL_TREE, entry, *list);
!   return true;
! }
! 
! /* Generate the type assertion table for CLASS, and return its DECL.  */
! 
! static tree
! emit_assertion_table (tree class)
! {
!   tree null_entry, ctor, table_decl;
!   tree list = NULL_TREE;
!   htab_t assertions_htab = TYPE_ASSERTIONS (class);
! 
!   /* Iterate through the hash table.  */
!   htab_traverse (assertions_htab, add_assertion_table_entry, &list);
! 
!   /* Finish with a null entry.  */
!   START_RECORD_CONSTRUCTOR (null_entry, assertion_entry_type);
!   PUSH_FIELD_VALUE (null_entry, "assertion_code", integer_zero_node);
!   PUSH_FIELD_VALUE (null_entry, "op1", null_pointer_node);
!   PUSH_FIELD_VALUE (null_entry, "op2", null_pointer_node);
!   FINISH_RECORD_CONSTRUCTOR (null_entry);
!   
!   list = tree_cons (NULL_TREE, null_entry, list);
!   
!   /* 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);
! 
!   TREE_STATIC (table_decl) = 1;
!   TREE_READONLY (table_decl) = 1;
!   TREE_CONSTANT (table_decl) = 1;
!   DECL_IGNORED_P (table_decl) = 1;
! 
!   DECL_INITIAL (table_decl) = ctor;
!   DECL_ARTIFICIAL (table_decl) = 1;
!   rest_of_decl_compilation (table_decl, 1, 0);
! 
!   return table_decl;
! }
  
  void
  init_class_processing (void)
  {
    fields_ident = get_identifier ("fields");
    info_ident = get_identifier ("info");
+ 
    gcc_obstack_init (&temporary_obstack);
  }
  
*************** java_treetreehash_create (size_t size, i
*** 2454,2457 ****
--- 2766,2828 ----
  			      java_treetreehash_compare, free, xcalloc, free);
  }
  
+ /* Break down qualified IDENTIFIER into package and class-name components.
+    For example, given SOURCE "pkg.foo.Bar", LEFT will be set to
+    "pkg.foo", and RIGHT to "Bar". */
+ 
+ int
+ split_qualified_name (tree *left, tree *right, tree source)
+ {
+   char *p, *base;
+   int l = IDENTIFIER_LENGTH (source);
+ 
+   base = alloca (l + 1);
+   memcpy (base, IDENTIFIER_POINTER (source), l + 1);
+ 
+   /* Breakdown NAME into REMAINDER . IDENTIFIER.  */
+   p = base + l - 1;
+   while (*p != '.' && p != base)
+     p--;
+ 
+   /* We didn't find a '.'. Return an error.  */
+   if (p == base)
+     return 1;
+ 
+   *p = '\0';
+   if (right)
+     *right = get_identifier (p+1);
+   *left = get_identifier (base);
+ 
+   return 0;
+ }
+ 
+ /* Given two classes (TYPE_DECL) or class names (IDENTIFIER), return TRUE 
+    if the classes are from the same package. */
+ 
+ int
+ in_same_package (tree name1, tree name2)
+ {
+   tree tmp;
+   tree pkg1;
+   tree pkg2;
+ 
+   if (TREE_CODE (name1) == TYPE_DECL)
+     name1 = DECL_NAME (name1);
+   if (TREE_CODE (name2) == TYPE_DECL)
+     name2 = DECL_NAME (name2);
+ 
+   if (QUALIFIED_P (name1) != QUALIFIED_P (name2))
+     /* One in empty package. */
+     return 0;
+ 
+   if (QUALIFIED_P (name1) == 0 && QUALIFIED_P (name2) == 0)
+     /* Both in empty package. */
+     return 1;
+ 
+   split_qualified_name (&pkg1, &tmp, name1);
+   split_qualified_name (&pkg2, &tmp, name2);
+ 
+   return (pkg1 == pkg2);
+ }
+ 
  #include "gt-java-class.h"
diff -Nrcpad gcc-3.4.3/gcc/java/constants.c gcc-4.0.0/gcc/java/constants.c
*** gcc-3.4.3/gcc/java/constants.c	Fri Jan  9 17:08:43 2004
--- gcc-4.0.0/gcc/java/constants.c	Wed Aug 25 09:52:50 2004
***************
*** 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,6 ----
  /* 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.
  
*************** static GTY(()) tree tag_nodes[13];
*** 320,329 ****
  static tree
  get_tag_node (int tag)
  {
!   /* A Cache for build_int_2 (CONSTANT_XXX, 0). */
  
    if (tag_nodes[tag] == NULL_TREE)
!     tag_nodes[tag] = build_int_2 (tag, 0);
    return tag_nodes[tag];
  }
  
--- 321,330 ----
  static tree
  get_tag_node (int tag)
  {
!   /* A Cache for build_int_cst (CONSTANT_XXX, 0). */
  
    if (tag_nodes[tag] == NULL_TREE)
!     tag_nodes[tag] = build_int_cst (NULL_TREE, tag);
    return tag_nodes[tag];
  }
  
*************** alloc_class_constant (tree clas)
*** 386,414 ****
  				IDENTIFIER_LENGTH(class_name))));
  }
  
! /* Return a reference to the data array of the current constant pool. */
  
  static tree
  build_constant_data_ref (void)
  {
!   tree cpool_data_ref = NULL_TREE;
! 
!   if (TYPE_CPOOL_DATA_REF (output_class))
!     cpool_data_ref = TYPE_CPOOL_DATA_REF (output_class);
  
!   if (cpool_data_ref == NULL_TREE)
      {
!       tree decl;
        tree decl_name = mangled_classname ("_CD_", output_class);
!       decl = build_decl (VAR_DECL, decl_name,
! 			 build_array_type (ptr_type_node,
! 					   one_elt_array_domain_type));
        TREE_STATIC (decl) = 1;
!       make_decl_rtl (decl, NULL);
!       TYPE_CPOOL_DATA_REF (output_class) = cpool_data_ref
! 	= build1 (ADDR_EXPR, ptr_type_node, decl);
      }
!   return cpool_data_ref;
  }
  
  /* Get the pointer value at the INDEX'th element of the constant pool. */
--- 387,421 ----
  				IDENTIFIER_LENGTH(class_name))));
  }
  
! /* Return the decl of the data array of the current constant pool. */
  
  static tree
  build_constant_data_ref (void)
  {
!   tree decl = TYPE_CPOOL_DATA_REF (output_class);
  
!   if (decl == NULL_TREE)
      {
!       tree type;
        tree decl_name = mangled_classname ("_CD_", output_class);
! 
!       /* Build a type with unspecified bounds.  The will make sure
! 	 that targets do the right thing with whatever size we end
! 	 up with at the end.  Using bounds that are too small risks
! 	 assuming the data is in the small data section.  */
!       type = build_array_type (ptr_type_node, NULL_TREE);
! 
!       /* We need to lay out the type ourselves, since build_array_type
! 	 thinks the type is incomplete.  */
!       layout_type (type);
! 
!       decl = build_decl (VAR_DECL, decl_name, type);
        TREE_STATIC (decl) = 1;
!       make_decl_rtl (decl);
!       TYPE_CPOOL_DATA_REF (output_class) = decl;
      }
! 
!   return decl;
  }
  
  /* Get the pointer value at the INDEX'th element of the constant pool. */
*************** build_constant_data_ref (void)
*** 416,426 ****
  tree
  build_ref_from_constant_pool (int index)
  {
!   tree t = build_constant_data_ref ();
!   index *= int_size_in_bytes (ptr_type_node);
!   t = fold (build (PLUS_EXPR, ptr_type_node,
!                               t, build_int_2 (index, 0)));
!   return build1 (INDIRECT_REF, ptr_type_node, t);
  }
  
  /* Build an initializer for the constants field of the current constant pool.
--- 423,432 ----
  tree
  build_ref_from_constant_pool (int index)
  {
!   tree d = build_constant_data_ref ();
!   tree i = build_int_cst (NULL_TREE, index);
!   return build4 (ARRAY_REF, TREE_TYPE (TREE_TYPE (d)), d, i,
! 		 NULL_TREE, NULL_TREE);
  }
  
  /* Build an initializer for the constants field of the current constant pool.
*************** build_constants_constructor (void)
*** 446,468 ****
      }
    if (outgoing_cpool->count > 0)
      {
-       tree index_type;
        tree data_decl, tags_decl, tags_type;
!       tree max_index = build_int_2 (outgoing_cpool->count - 1, 0);
!       TREE_TYPE (max_index) = sizetype;
!       index_type = build_index_type (max_index);
  
        /* Add dummy 0'th element of constant pool. */
        tags_list = tree_cons (NULL_TREE, get_tag_node (0), tags_list);
        data_list = tree_cons (NULL_TREE, null_pointer_node, data_list);
    
!       data_decl = TREE_OPERAND (build_constant_data_ref (), 0);
        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, (char *) 0, 1, 0);
        data_value = build_address_of (data_decl);
  
        tags_type = build_array_type (unsigned_byte_type_node, index_type);
--- 452,472 ----
      }
    if (outgoing_cpool->count > 0)
      {
        tree data_decl, tags_decl, tags_type;
!       tree max_index = build_int_cst (sizetype, outgoing_cpool->count - 1);
!       tree index_type = build_index_type (max_index);
  
        /* Add dummy 0'th element of constant pool. */
        tags_list = tree_cons (NULL_TREE, get_tag_node (0), tags_list);
        data_list = tree_cons (NULL_TREE, null_pointer_node, data_list);
    
!       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);
        data_value = build_address_of (data_decl);
  
        tags_type = build_array_type (unsigned_byte_type_node, index_type);
*************** build_constants_constructor (void)
*** 471,477 ****
  			      tags_type);
        TREE_STATIC (tags_decl) = 1;
        DECL_INITIAL (tags_decl) = build_constructor (tags_type, tags_list);
!       rest_of_decl_compilation (tags_decl, (char*) 0, 1, 0);
        tags_value = build_address_of (tags_decl);
      }
    else
--- 475,481 ----
  			      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);
      }
    else
*************** build_constants_constructor (void)
*** 480,486 ****
        tags_value = null_pointer_node;
      }
    START_RECORD_CONSTRUCTOR (cons, constants_type_node);
!   PUSH_FIELD_VALUE (cons, "size", build_int_2 (outgoing_cpool->count, 0));
    PUSH_FIELD_VALUE (cons, "tags", tags_value);
    PUSH_FIELD_VALUE (cons, "data", data_value);
    FINISH_RECORD_CONSTRUCTOR (cons);
--- 484,491 ----
        tags_value = null_pointer_node;
      }
    START_RECORD_CONSTRUCTOR (cons, constants_type_node);
!   PUSH_FIELD_VALUE (cons, "size",
! 		    build_int_cst (NULL_TREE, outgoing_cpool->count));
    PUSH_FIELD_VALUE (cons, "tags", tags_value);
    PUSH_FIELD_VALUE (cons, "data", data_value);
    FINISH_RECORD_CONSTRUCTOR (cons);
diff -Nrcpad gcc-3.4.3/gcc/java/convert.h gcc-4.0.0/gcc/java/convert.h
*** gcc-3.4.3/gcc/java/convert.h	Thu Jan  9 23:16:50 2003
--- gcc-4.0.0/gcc/java/convert.h	Fri Dec 17 15:09:10 2004
*************** Boston, MA 02111-1307, USA.  */
*** 20,27 ****
  
  /* Written by Jeffrey Hsu <hsu@cygnus.com> */
  
- extern tree convert_to_boolean (tree, tree);
- extern tree convert_to_char (tree, tree);
  extern tree convert_to_integer (tree type, tree expr);
  extern tree convert_to_real (tree type, tree expr);
  extern tree convert_to_pointer (tree type, tree expr);
--- 20,25 ----
diff -Nrcpad gcc-3.4.3/gcc/java/decl.c gcc-4.0.0/gcc/java/decl.c
*** gcc-3.4.3/gcc/java/decl.c	Fri Jan 16 17:11:08 2004
--- gcc-4.0.0/gcc/java/decl.c	Fri Apr  1 18:48:20 2005
***************
*** 1,6 ****
  /* Process declarations and variables for 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 ----
  /* Process declarations and variables for 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.
*************** The Free Software Foundation is independ
*** 44,50 ****
--- 44,53 ----
  #include "java-except.h"
  #include "ggc.h"
  #include "timevar.h"
+ #include "cgraph.h"
  #include "tree-inline.h"
+ #include "target.h"
+ #include "version.h"
  
  #if defined (DEBUG_JAVA_BINDING_LEVELS)
  extern void indent (void);
*************** static tree lookup_name_current_level (t
*** 55,62 ****
  static tree push_promoted_type (const char *, tree);
  static struct binding_level *make_binding_level (void);
  static tree create_primitive_vtable (const char *);
- static tree check_local_named_variable (tree, tree, int, int *);
  static tree check_local_unnamed_variable (tree, tree, tree);
  
  /* Name of the Cloneable class.  */
  tree java_lang_cloneable_identifier_node;
--- 58,71 ----
  static tree push_promoted_type (const char *, tree);
  static struct binding_level *make_binding_level (void);
  static tree create_primitive_vtable (const char *);
  static tree check_local_unnamed_variable (tree, tree, tree);
+ static void parse_version (void);
+ 
+ /* Used when computing the ABI version.  */
+ #define GCJ_BINARYCOMPAT_ADDITION 5
+ 
+ /* The ABI version number.  */
+ tree gcj_abi_version;
  
  /* Name of the Cloneable class.  */
  tree java_lang_cloneable_identifier_node;
*************** tree java_io_serializable_identifier_nod
*** 74,87 ****
  
  static GTY(()) tree decl_map;
  
  /* A list of local variables VAR_DECLs for this method that we have seen
     debug information, but we have not reached their starting (byte) PC yet. */
  
  static GTY(()) tree pending_local_decls;
  
- /* Push a local variable or stack slot into the decl_map,
-    and assign it an rtl. */
- 
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
  int binding_depth = 0;
  int is_class_level = 0;
--- 83,102 ----
  
  static GTY(()) tree decl_map;
  
+ /* The base_decl_map is contains one variable of ptr_type: this is
+    used to contain every variable of reference type that is ever
+    stored in a local variable slot.  */
+ 
+ static GTY(()) tree base_decl_map;
+ 
+ /* An index used to make temporary identifiers unique.  */
+ static int uniq;
+ 
  /* A list of local variables VAR_DECLs for this method that we have seen
     debug information, but we have not reached their starting (byte) PC yet. */
  
  static GTY(()) tree pending_local_decls;
  
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
  int binding_depth = 0;
  int is_class_level = 0;
*************** int current_pc;
*** 90,132 ****
  void
  indent (void)
  {
!   unsigned i;
  
    for (i = 0; i < binding_depth*2; i++)
      putc (' ', stderr);
  }
  #endif /* defined(DEBUG_JAVA_BINDING_LEVELS) */
  
! static tree
! push_jvm_slot (int index, tree decl)
  {
!   struct rtx_def *rtl = NULL;
!   tree type = TREE_TYPE (decl);
    tree tmp;
  
!   DECL_CONTEXT (decl) = current_function_decl;
!   layout_decl (decl, 0);
  
!   /* See if we have an appropriate rtl (i.e. same mode) at this index.
!      If so, we must use it. */ 
!   tmp = TREE_VEC_ELT (decl_map, index);
!   while (tmp != NULL_TREE)
!     {
!       if (TYPE_MODE (type) == TYPE_MODE (TREE_TYPE (tmp))
! 	  && ! LOCAL_VAR_OUT_OF_SCOPE_P (tmp))
! 	rtl = DECL_RTL_IF_SET (tmp);
!       if (rtl != NULL)
! 	break;
!      tmp = DECL_LOCAL_SLOT_CHAIN (tmp);
!     }
!   if (rtl != NULL)
!     SET_DECL_RTL (decl, rtl);
!   else
      {
!       if (index >= DECL_MAX_LOCALS (current_function_decl))
! 	DECL_REGISTER (decl) = 1;
!       expand_decl (decl);
      }
  
    /* Now link the decl into the decl_map. */
    if (DECL_LANG_SPECIFIC (decl) == NULL)
--- 105,179 ----
  void
  indent (void)
  {
!   int i;
  
    for (i = 0; i < binding_depth*2; i++)
      putc (' ', stderr);
  }
  #endif /* defined(DEBUG_JAVA_BINDING_LEVELS) */
  
! /* True if decl is a named local variable, i.e. if it is an alias
!    that's used only for debugging purposes.  */
! 
! static bool
! debug_variable_p (tree decl)
  {
!   if (TREE_CODE (decl) == PARM_DECL)
!     return false;
! 
!   if (LOCAL_SLOT_P (decl))
!     return false;
! 
!   return true;
! }
!  
! /* Copy the value in decl into every live alias in the same local
!    variable slot.  Some of these will be dead stores removed by the
!    optimizer.  */
! 
! void 
! update_aliases (tree decl, int index, int pc)
! {
!   tree decl_type = TREE_TYPE (decl);
    tree tmp;
  
!   if (debug_variable_p (decl))
!     abort ();
  
!   for (tmp = TREE_VEC_ELT (decl_map, index); 
!        tmp != NULL_TREE; 
!        tmp = DECL_LOCAL_SLOT_CHAIN (tmp))
      {
!       tree tmp_type = TREE_TYPE (tmp);
!       if (tmp != decl
! 	  && LOCAL_SLOT_P (tmp) == 0
! 	  && (pc == -1
! 	      || (pc >= DECL_LOCAL_START_PC (tmp)
! 		  && pc < DECL_LOCAL_END_PC (tmp)))
! 	  /* This test is < (rather than <=) because there's no point
! 	     updating an alias that's about to die at the end of this
! 	     instruction.  */
! 	  && (tmp_type == decl_type
! 	      || (INTEGRAL_TYPE_P (tmp_type)
! 		  && INTEGRAL_TYPE_P (decl_type)
! 		  && TYPE_PRECISION (decl_type) <= 32
! 		  && TYPE_PRECISION (tmp_type) <= 32)
! 	      || (TREE_CODE (tmp_type) == POINTER_TYPE
! 		  && TREE_CODE (decl_type) == POINTER_TYPE)))
! 	{
! 	  tree src = build1 (NOP_EXPR, tmp_type, decl);
! 	  if (LOCAL_VAR_OUT_OF_SCOPE_P (tmp))
! 	    abort ();
! 	  java_add_stmt (build2 (MODIFY_EXPR, tmp_type, tmp, src));
! 	}
      }
+ }
+ 
+ static tree
+ push_jvm_slot (int index, tree decl)
+ {
+   DECL_CONTEXT (decl) = current_function_decl;
+   layout_decl (decl, 0);
  
    /* Now link the decl into the decl_map. */
    if (DECL_LANG_SPECIFIC (decl) == NULL)
*************** push_jvm_slot (int index, tree decl)
*** 138,166 ****
      }
    DECL_LOCAL_SLOT_CHAIN (decl) = TREE_VEC_ELT (decl_map, index);
    TREE_VEC_ELT (decl_map, index) = decl;
    return decl;
  }
  
! /* Find out if 'decl' passed in fits the defined PC location better than
!    'best'.  Return decl if it does, return best if it doesn't.  If decl
!    is returned, then updated is set to true.  */
  
! static tree
! check_local_named_variable (tree best, tree decl, int pc, int *updated)
  {
!   if (pc >= DECL_LOCAL_START_PC (decl)
!       && pc < DECL_LOCAL_END_PC (decl))
      {
!       if (best == NULL_TREE
! 	  || (DECL_LOCAL_START_PC (decl) > DECL_LOCAL_START_PC (best)
! 	      && DECL_LOCAL_END_PC (decl) < DECL_LOCAL_END_PC (best)))
          {
! 	  *updated = 1;
! 	  return decl;
  	}
      }
    
!   return best;
  }
  
  /* Find the best declaration based upon type.  If 'decl' fits 'type' better
--- 185,238 ----
      }
    DECL_LOCAL_SLOT_CHAIN (decl) = TREE_VEC_ELT (decl_map, index);
    TREE_VEC_ELT (decl_map, index) = decl;
+ 
    return decl;
  }
  
! /*  At the point of its creation a local variable decl inherits
!     whatever is already in the same slot.  In the case of a local
!     variable that is declared but unused, we won't find anything.  */
  
! static void
! initialize_local_variable (tree decl, int index)
  {
!   tree decl_type = TREE_TYPE (decl);
!   if (TREE_CODE (decl_type) == POINTER_TYPE)
      {
!       tree tmp = TREE_VEC_ELT (base_decl_map, index);
! 
!       if (tmp)
          {
! 	  /* At the point of its creation this decl inherits whatever
! 	     is in the slot.  */
! 	  tree src = build1 (NOP_EXPR, decl_type, tmp);
! 	  java_add_stmt (build2 (MODIFY_EXPR, decl_type, decl, src));	
  	}
      }
+   else
+     {
+       tree tmp;
    
!       for (tmp = TREE_VEC_ELT (decl_map, index); 
! 	   tmp != NULL_TREE; 
! 	   tmp = DECL_LOCAL_SLOT_CHAIN (tmp))
! 	{
! 	  tree tmp_type = TREE_TYPE (tmp);
! 	  if (tmp != decl
! 	      && ! debug_variable_p (tmp)
! 	      && (tmp_type == decl_type
! 		  || (INTEGRAL_TYPE_P (tmp_type)
! 		      && INTEGRAL_TYPE_P (decl_type)
! 		      && TYPE_PRECISION (decl_type) <= 32
! 		      && TYPE_PRECISION (tmp_type) <= 32
! 		      && TYPE_PRECISION (tmp_type)
! 			 >= TYPE_PRECISION (decl_type))))
! 	    {
! 	      java_add_stmt (build2 (MODIFY_EXPR, decl_type, decl, tmp));	
! 	      return;
! 	    }
! 	}  
!     }
  }
  
  /* Find the best declaration based upon type.  If 'decl' fits 'type' better
*************** check_local_named_variable (tree best, t
*** 169,188 ****
  static tree
  check_local_unnamed_variable (tree best, tree decl, tree type)
  {
!     if (TREE_TYPE (decl) == type
! 	|| (TREE_CODE (TREE_TYPE (decl)) == TREE_CODE (type)
! 	    && TYPE_PRECISION (TREE_TYPE (decl)) <= 32
! 	    && TYPE_PRECISION (type) <= 32
! 	    && TREE_CODE (type) != POINTER_TYPE)
! 	|| (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE
! 	    && type == ptr_type_node))
!       {
! 	if (best == NULL_TREE
! 	    || (TREE_TYPE (decl) == type && TREE_TYPE (best) != type))
! 	  return decl;
!       }
  
!     return best;
  }
  
  
--- 241,286 ----
  static tree
  check_local_unnamed_variable (tree best, tree decl, tree type)
  {
!   tree decl_type = TREE_TYPE (decl);
!   
!   if (LOCAL_VAR_OUT_OF_SCOPE_P (decl))
!     abort ();
  
!   /* Use the same decl for all integer types <= 32 bits.  This is
!      necessary because sometimes a value is stored as (for example)
!      boolean but loaded as int.  */
!   if (decl_type == type
!       || (INTEGRAL_TYPE_P (decl_type)
! 	  && INTEGRAL_TYPE_P (type)
! 	  && TYPE_PRECISION (decl_type) <= 32
! 	  && TYPE_PRECISION (type) <= 32
! 	  && TYPE_PRECISION (decl_type) >= TYPE_PRECISION (type))      
!       /*  ptr_type_node is used for null pointers, which are
! 	  assignment compatible with everything.  */
!       || (TREE_CODE (decl_type) == POINTER_TYPE
! 	  && type == ptr_type_node)
!       /* Whenever anyone wants to use a slot that is initially
! 	 occupied by a PARM_DECL of pointer type they must get that
! 	 decl, even if they asked for a pointer to a different type.
! 	 However, if someone wants a scalar variable in a slot that
! 	 initially held a pointer arg -- or vice versa -- we create a
! 	 new VAR_DECL.  
! 
!       	 ???: As long as verification is correct, this will be a
! 	 compatible type.  But maybe we should create a dummy variable
! 	 and replace all references to it with the DECL and a
! 	 NOP_EXPR.  
!       */
!       || (TREE_CODE (decl_type) == POINTER_TYPE
! 	  && TREE_CODE (decl) == PARM_DECL
! 	  && TREE_CODE (type) == POINTER_TYPE))
!     {
!       if (best == NULL_TREE
! 	  || (decl_type == type && TREE_TYPE (best) != type))
! 	return decl;
!     }
! 
!   return best;
  }
  
  
*************** check_local_unnamed_variable (tree best,
*** 191,236 ****
     If there is no existing matching decl, allocate one.  */
  
  tree
! find_local_variable (int index, tree type, int pc)
  {
!   tree decl = TREE_VEC_ELT (decl_map, index);
!   tree best = NULL_TREE;
!   int found_scoped_var = 0;
  
!   /* Scan through every declaration that has been created in this slot. */
!   while (decl != NULL_TREE)
      {
!        /* Variables created in give_name_to_locals() have a name and have
!  	 a specified scope, so we can handle them specifically.  We want
!  	 to use the specific decls created for those so they are assigned
!  	 the right variables in the debugging information. */
!       if (DECL_NAME (decl) != NULL_TREE)
! 	{
! 	  /* This is a variable we have a name for, so it has a scope
! 	     supplied in the class file.  But it only matters when we
! 	     actually have a PC to use.  If pc<0, then we are asking
! 	     for a stack slot and this decl won't be one of those. */
!  	  if (pc >= 0)
!  	    best = check_local_named_variable (best, decl, pc,
!  					       &found_scoped_var);
!  	}
!       /* We scan for type information unless we found a variable in the
! 	 proper scope already. */
!       else if (!found_scoped_var)
!  	{
!  	  /* If we don't have scoping information for a variable, we use
!  	     a different method to look it up. */
!  	  best = check_local_unnamed_variable (best, decl, type);
!  	}
  
!       decl = DECL_LOCAL_SLOT_CHAIN (decl);
      }
  
!   if (best != NULL_TREE)
!     return best;
  
!   /* If we don't find a match, create one with the type passed in. */
!   return push_jvm_slot (index, build_decl (VAR_DECL, NULL_TREE, type));
  }
  
  
--- 289,401 ----
     If there is no existing matching decl, allocate one.  */
  
  tree
! find_local_variable (int index, tree type, int pc ATTRIBUTE_UNUSED)
  {
!   tree tmp = TREE_VEC_ELT (decl_map, index);
!   tree decl = NULL_TREE;
  
!   /* Scan through every declaration that has been created in this
!      slot.  We're only looking for variables that correspond to local
!      index declarations and PARM_DECLs, not named variables: such
!      local variables are used only for debugging information.  */
!   while (tmp != NULL_TREE)
      {
!       if (! debug_variable_p (tmp))
! 	decl = check_local_unnamed_variable (decl, tmp, type);
!       tmp = DECL_LOCAL_SLOT_CHAIN (tmp);
!     }
  
!   /* gcj has a function called promote_type(), which is used by both
!      the bytecode compiler and the source compiler.  Unfortunately,
!      the type systems for the Java VM and the Java language are not
!      the same: a boolean in the VM promotes to an int, not to a wide
!      boolean.  If our caller wants something to hold a boolean, that
!      had better be an int, because that slot might be re-used
!      later in integer context.  */
!   if (TREE_CODE (type) == BOOLEAN_TYPE)
!     type = integer_type_node;
! 
!   /* If we don't find a match, create one with the type passed in.
!      The name of the variable is #n#m, which n is the variable index
!      in the local variable area and m is a dummy identifier for
!      uniqueness -- multiple variables may share the same local
!      variable index.  We don't call pushdecl() to push pointer types
!      into a binding expr because they'll all be replaced by a single
!      variable that is used for every reference in that local variable
!      slot.  */
!   if (! decl)
!     {
!       char buf[64];
!       tree name;
!       sprintf (buf, "#slot#%d#%d", index, uniq++);
!       name = get_identifier (buf);
!       decl = build_decl (VAR_DECL, name, type);
!       DECL_IGNORED_P (decl) = 1;
!       DECL_ARTIFICIAL (decl) = 1;
!       decl = push_jvm_slot (index, decl);
!       LOCAL_SLOT_P (decl) = 1;
! 
!       if (TREE_CODE (type) != POINTER_TYPE)
! 	pushdecl_function_level (decl);
      }
  
!   /* As well as creating a local variable that matches the type, we
!      also create a base variable (of ptr_type) that will hold all its
!      aliases.  */
!   if (TREE_CODE (type) == POINTER_TYPE
!       && ! TREE_VEC_ELT (base_decl_map, index))
!     {
!       char buf[64];
!       tree name;
!       tree base_decl;
!       sprintf (buf, "#ref#%d#%d", index, uniq++);
!       name = get_identifier (buf);
!       base_decl
! 	= TREE_VEC_ELT (base_decl_map, index)
! 	= build_decl (VAR_DECL, name, ptr_type_node);
!       pushdecl_function_level (base_decl);
!       DECL_IGNORED_P (base_decl) = 1;
!       DECL_ARTIFICIAL (base_decl) = 1;
!     }
  
!   return decl;
! }
! 
! /* Called during gimplification for every variable.  If the variable
!    is a temporary of pointer type, replace it with a common variable
!    thath is used to hold all pointer types that are ever stored in
!    that slot.  Set WANT_LVALUE if you want a variable that is to be
!    written to.  */
! 
! tree 
! java_replace_reference (tree var_decl, bool want_lvalue)
! {
!   tree decl_type;
! 
!   if (! base_decl_map)
!     return var_decl;
! 
!   decl_type = TREE_TYPE (var_decl);
! 
!   if (TREE_CODE (decl_type) == POINTER_TYPE)
!     {
!       if (DECL_LANG_SPECIFIC (var_decl)
! 	  && LOCAL_SLOT_P (var_decl))
! 	{
! 	  int index = DECL_LOCAL_SLOT_NUMBER (var_decl);
! 	  tree base_decl = TREE_VEC_ELT (base_decl_map, index); 
! 
! 	  if (! base_decl)
! 	    abort ();
! 
! 	  if (! want_lvalue)
! 	    base_decl = build1 (NOP_EXPR, decl_type, base_decl);
! 
! 	  return base_decl;
! 	}
!     }
! 
!   return var_decl;
  }
  
  
*************** find_stack_slot (int index, tree type)
*** 243,249 ****
  			      type, -1);
  }
  
! struct binding_level
    {
      /* A chain of _DECL nodes for all variables, constants, functions,
       * and typedef types.  These are in the reverse of the order supplied.
--- 408,414 ----
  			      type, -1);
  }
  
! struct binding_level GTY(())
    {
      /* A chain of _DECL nodes for all variables, constants, functions,
       * and typedef types.  These are in the reverse of the order supplied.
*************** struct binding_level
*** 261,270 ****
         that were entered and exited one level down.  */
      tree blocks;
  
-     /* The BLOCK node for this level, if one has been preallocated.
-        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
-     tree this_block;
- 
      /* The binding level which this one is contained in (inherits from).  */
      struct binding_level *level_chain;
  
--- 426,431 ----
*************** struct binding_level
*** 273,299 ****
      /* The bytecode PC that marks the start of this level. */
      int start_pc;
  
! #if defined(DEBUG_JAVA_BINDING_LEVELS)
!     /* Binding depth at which this level began.  */
      unsigned binding_depth;
- #endif /* defined(DEBUG_JAVA_BINDING_LEVELS) */
    };
  
  #define NULL_BINDING_LEVEL (struct binding_level *) NULL
  
  /* The binding level currently in effect.  */
  
! static struct binding_level *current_binding_level;
  
  /* A chain of binding_level structures awaiting reuse.  */
  
! static struct binding_level *free_binding_level;
  
  /* The outermost binding level, for names of file scope.
     This is created when the compiler is started and exists
     through the entire run.  */
  
! static struct binding_level *global_binding_level;
  
  /* A PC value bigger than any PC value we may ever may encounter. */
  
--- 434,469 ----
      /* The bytecode PC that marks the start of this level. */
      int start_pc;
  
!     /* The statements in this binding level.  */
!     tree stmts;
! 
!     /* An exception range associated with this binding level.  */
!     struct eh_range * GTY((skip (""))) exception_range;
! 
!     /* Binding depth at which this level began.  Used only for debugging.  */
      unsigned binding_depth;
    };
  
  #define NULL_BINDING_LEVEL (struct binding_level *) NULL
  
  /* The binding level currently in effect.  */
  
! static GTY(()) struct binding_level *current_binding_level;
  
  /* A chain of binding_level structures awaiting reuse.  */
  
! static GTY(()) struct binding_level *free_binding_level;
  
  /* The outermost binding level, for names of file scope.
     This is created when the compiler is started and exists
     through the entire run.  */
  
! static GTY(()) struct binding_level *global_binding_level;
! 
! /* The binding level that holds variables declared at the outermost
!    level within a function body.  */
! 
! static struct binding_level *function_binding_level;
  
  /* A PC value bigger than any PC value we may ever may encounter. */
  
*************** static struct binding_level *global_bind
*** 302,309 ****
  /* Binding level structures are initialized by copying this one.  */
  
  static const struct binding_level clear_binding_level
!   = {NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE,
!        NULL_BINDING_LEVEL, LARGEST_PC, 0};
  
  #if 0
  /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
--- 472,488 ----
  /* Binding level structures are initialized by copying this one.  */
  
  static const struct binding_level clear_binding_level
! = {
!     NULL_TREE, /* names */
!     NULL_TREE, /* shadowed */
!     NULL_TREE, /* blocks */
!     NULL_BINDING_LEVEL, /* level_chain */
!     LARGEST_PC, /* end_pc */
!     0, /* start_pc */
!     NULL, /* stmts */
!     NULL, /* exception_range */
!     0, /* binding_depth */
!   };
  
  #if 0
  /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
*************** tree
*** 356,373 ****
  builtin_function (const char *name,
  		  tree type,
  		  int function_code,
! 		  enum built_in_class class,
  		  const char *library_name,
! 		  tree attrs ATTRIBUTE_UNUSED)
  {
    tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
    DECL_EXTERNAL (decl) = 1;
    TREE_PUBLIC (decl) = 1;
    if (library_name)
      SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
!   make_decl_rtl (decl, NULL);
    pushdecl (decl);
!   DECL_BUILT_IN_CLASS (decl) = class;
    DECL_FUNCTION_CODE (decl) = function_code;
    return decl;
  }
--- 535,552 ----
  builtin_function (const char *name,
  		  tree type,
  		  int function_code,
! 		  enum built_in_class cl,
  		  const char *library_name,
! 		  tree ARG_UNUSED (attrs))
  {
    tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
    DECL_EXTERNAL (decl) = 1;
    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;
    return decl;
  }
*************** do_nothing (tree t)
*** 391,396 ****
--- 570,618 ----
    return t;
  }
  
+ /* Parse the version string and compute the ABI version number.  */
+ static void
+ parse_version (void)
+ {
+   const char *p = version_string;
+   unsigned int major = 0, minor = 0;
+   unsigned int abi_version;
+ 
+   /* Skip leading junk.  */
+   while (*p && !ISDIGIT (*p))
+     ++p;
+   gcc_assert (*p);
+ 
+   /* Extract major version.  */
+   while (ISDIGIT (*p))
+     {
+       major = major * 10 + *p - '0';
+       ++p;
+     }
+ 
+   gcc_assert (*p == '.' && ISDIGIT (p[1]));
+   ++p;
+ 
+   /* Extract minor version.  */
+   while (ISDIGIT (*p))
+     {
+       minor = minor * 10 + *p - '0';
+       ++p;
+     }
+ 
+   /* 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;
+   /* It is helpful to distinguish BC ABI from ordinary ABI at this
+      level, since at some point we will recognize a variety of BC ABIs
+      (objects generated by different version of gcj), but will
+      probably always require strict matching for ordinary ABI.  */
+   if (flag_indirect_dispatch)
+     abi_version += GCJ_BINARYCOMPAT_ADDITION;
+ 
+   gcj_abi_version = build_int_cstu (ptr_type_node, abi_version);
+ }
  
  void
  java_init_decl_processing (void)
*************** java_init_decl_processing (void)
*** 400,406 ****
    tree t;
  
    init_class_processing ();
-   init_resource_processing ();
  
    current_function_decl = NULL;
    current_binding_level = NULL_BINDING_LEVEL;
--- 622,627 ----
*************** java_init_decl_processing (void)
*** 414,420 ****
    TREE_TYPE (error_mark_node) = error_mark_node;
  
    /* Create sizetype first - needed for other types. */
!   initialize_sizetypes ();
  
    byte_type_node = make_signed_type (8);
    pushdecl (build_decl (TYPE_DECL, get_identifier ("byte"), byte_type_node));
--- 635,641 ----
    TREE_TYPE (error_mark_node) = error_mark_node;
  
    /* Create sizetype first - needed for other types. */
!   initialize_sizetypes (false);
  
    byte_type_node = make_signed_type (8);
    pushdecl (build_decl (TYPE_DECL, get_identifier ("byte"), byte_type_node));
*************** java_init_decl_processing (void)
*** 438,466 ****
    pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned long"),
  			unsigned_long_type_node));
  
!   set_sizetype (make_unsigned_type (POINTER_SIZE));
  
    /* Define these next since types below may used them.  */
    integer_type_node = java_type_for_size (INT_TYPE_SIZE, 0);
!   integer_zero_node = build_int_2 (0, 0);
!   integer_one_node = build_int_2 (1, 0);
!   integer_two_node = build_int_2 (2, 0);
!   integer_four_node = build_int_2 (4, 0);
!   integer_minus_one_node = build_int_2 (-1, -1);
  
    /* A few values used for range checking in the lexer.  */
!   decimal_int_max = build_int_2 (0x80000000, 0);
!   TREE_TYPE (decimal_int_max) = unsigned_int_type_node;
  #if HOST_BITS_PER_WIDE_INT == 64
!   decimal_long_max = build_int_2 (0x8000000000000000LL, 0);
! #else
! #if HOST_BITS_PER_WIDE_INT == 32
!   decimal_long_max = build_int_2 (0, 0x80000000);
  #else
   #error "unsupported size"
  #endif
- #endif
-   TREE_TYPE (decimal_long_max) = unsigned_long_type_node;
  
    size_zero_node = size_int (0);
    size_one_node = size_int (1);
--- 659,688 ----
    pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned long"),
  			unsigned_long_type_node));
  
!   /* This is not a java type, however tree-dfa requires a definition for
!      size_type_node.  */
!   size_type_node = make_unsigned_type (POINTER_SIZE);
!   set_sizetype (size_type_node);
  
    /* Define these next since types below may used them.  */
    integer_type_node = java_type_for_size (INT_TYPE_SIZE, 0);
!   integer_zero_node = build_int_cst (NULL_TREE, 0);
!   integer_one_node = build_int_cst (NULL_TREE, 1);
!   integer_two_node = build_int_cst (NULL_TREE, 2);
!   integer_four_node = build_int_cst (NULL_TREE, 4);
!   integer_minus_one_node = build_int_cst (NULL_TREE, -1);
  
    /* A few values used for range checking in the lexer.  */
!   decimal_int_max = build_int_cstu (unsigned_int_type_node, 0x80000000);
  #if HOST_BITS_PER_WIDE_INT == 64
!   decimal_long_max = build_int_cstu (unsigned_long_type_node,
! 				     0x8000000000000000LL);
! #elif HOST_BITS_PER_WIDE_INT == 32
!   decimal_long_max = build_int_cst_wide (unsigned_long_type_node,
! 					 0, 0x80000000);
  #else
   #error "unsupported size"
  #endif
  
    size_zero_node = size_int (0);
    size_one_node = size_int (1);
*************** java_init_decl_processing (void)
*** 468,490 ****
    bitsize_one_node = bitsize_int (1);
    bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
  
!   long_zero_node = build_int_2 (0, 0);
!   TREE_TYPE (long_zero_node) = long_type_node;
  
    void_type_node = make_node (VOID_TYPE);
    pushdecl (build_decl (TYPE_DECL, get_identifier ("void"), void_type_node));
    layout_type (void_type_node);	/* Uses size_zero_node */
    ptr_type_node = build_pointer_type (void_type_node);
    t = make_node (VOID_TYPE);
    layout_type (t); /* Uses size_zero_node */
    return_address_type_node = build_pointer_type (t);
  
!   null_pointer_node = build_int_2 (0, 0);
!   TREE_TYPE (null_pointer_node) = ptr_type_node;
! 
!   /* Used by the parser to represent empty statements and blocks. */
!   empty_stmt_node = build1 (NOP_EXPR, void_type_node, size_zero_node);
!   CAN_COMPLETE_NORMALLY (empty_stmt_node) = 1;
  
  #if 0
    /* Make a type to be the domain of a few array types
--- 690,710 ----
    bitsize_one_node = bitsize_int (1);
    bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
  
!   long_zero_node = build_int_cst (long_type_node, 0);
  
    void_type_node = make_node (VOID_TYPE);
    pushdecl (build_decl (TYPE_DECL, get_identifier ("void"), void_type_node));
    layout_type (void_type_node);	/* Uses size_zero_node */
+ 
    ptr_type_node = build_pointer_type (void_type_node);
+   const_ptr_type_node
+     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
+ 
    t = make_node (VOID_TYPE);
    layout_type (t); /* Uses size_zero_node */
    return_address_type_node = build_pointer_type (t);
  
!   null_pointer_node = build_int_cst (ptr_type_node, 0);
  
  #if 0
    /* Make a type to be the domain of a few array types
*************** java_init_decl_processing (void)
*** 553,558 ****
--- 773,783 ----
    TYPE_NONALIASED_COMPONENT (atable_type) = 1;
    atable_ptr_type = build_pointer_type (atable_type);
  
+   itable_type = build_array_type (ptr_type_node, 
+ 				  one_elt_array_domain_type);
+   TYPE_NONALIASED_COMPONENT (itable_type) = 1;
+   itable_ptr_type = build_pointer_type (itable_type);
+ 
    symbol_type = make_node (RECORD_TYPE);
    PUSH_FIELD (symbol_type, field, "clname", utf8const_ptr_type);
    PUSH_FIELD (symbol_type, field, "name", utf8const_ptr_type);
*************** java_init_decl_processing (void)
*** 563,568 ****
--- 788,802 ----
  					 one_elt_array_domain_type);
    symbols_array_ptr_type = build_pointer_type (symbols_array_type);
  
+   assertion_entry_type = make_node (RECORD_TYPE);
+   PUSH_FIELD (assertion_entry_type, field, "assertion_code", integer_type_node);
+   PUSH_FIELD (assertion_entry_type, field, "op1", utf8const_ptr_type);
+   PUSH_FIELD (assertion_entry_type, field, "op2", utf8const_ptr_type);
+   FINISH_RECORD (assertion_entry_type);
+   
+   assertion_table_type = build_array_type (assertion_entry_type,
+                                            one_elt_array_domain_type);
+ 
    /* As you're adding items here, please update the code right after
       this section, so that the filename containing the source code of
       the pre-defined class gets registered correctly. */
*************** java_init_decl_processing (void)
*** 592,598 ****
    add_predefined_file (get_identifier ("java/lang/Exception.java"));
    add_predefined_file (get_identifier ("java/lang/ClassNotFoundException.java"));
    add_predefined_file (get_identifier ("java/lang/NoClassDefFoundError.java"));
-   add_predefined_file (get_identifier ("gnu/gcj/RawData.java"));
  
    methodtable_type = make_node (RECORD_TYPE);
    layout_type (methodtable_type);
--- 826,831 ----
*************** java_init_decl_processing (void)
*** 638,643 ****
--- 871,879 ----
    otable_ptr_type = build_pointer_type (otable_type);
  
    PUSH_FIELD (object_type_node, field, "vtable", dtable_ptr_type);
+   DECL_FCONTEXT (field) = object_type_node;
+   TYPE_VFIELD (object_type_node) = field;
+ 
    /* This isn't exactly true, but it is what we have in the source.
       There is an unresolved issue here, which is whether the vtable
       should be marked by the GC.  */
*************** java_init_decl_processing (void)
*** 657,663 ****
    set_super_info (0, string_type_node, object_type_node, 0);
    class_ptr_type = build_pointer_type (class_type_node);
  
!   PUSH_FIELD (class_type_node, field, "next", class_ptr_type);
    PUSH_FIELD (class_type_node, field, "name", utf8const_ptr_type);
    PUSH_FIELD (class_type_node, field, "accflags", access_flags_type_node);
    PUSH_FIELD (class_type_node, field, "superclass", class_ptr_type);
--- 893,899 ----
    set_super_info (0, string_type_node, object_type_node, 0);
    class_ptr_type = build_pointer_type (class_type_node);
  
!   PUSH_FIELD (class_type_node, field, "next_or_version", class_ptr_type);
    PUSH_FIELD (class_type_node, field, "name", utf8const_ptr_type);
    PUSH_FIELD (class_type_node, field, "accflags", access_flags_type_node);
    PUSH_FIELD (class_type_node, field, "superclass", class_ptr_type);
*************** java_init_decl_processing (void)
*** 676,681 ****
--- 912,920 ----
    PUSH_FIELD (class_type_node, field, "atable", atable_ptr_type);
    PUSH_FIELD (class_type_node, field, "atable_syms", 
    	      symbols_array_ptr_type);
+   PUSH_FIELD (class_type_node, field, "itable", itable_ptr_type);
+   PUSH_FIELD (class_type_node, field, "itable_syms", 
+   	      symbols_array_ptr_type);
    PUSH_FIELD (class_type_node, field, "catch_classes", ptr_type_node);
    PUSH_FIELD (class_type_node, field, "interfaces",
  	      build_pointer_type (class_ptr_type));
*************** java_init_decl_processing (void)
*** 688,695 ****
--- 927,937 ----
    PUSH_FIELD (class_type_node, field, "idt", ptr_type_node);  
    PUSH_FIELD (class_type_node, field, "arrayclass", ptr_type_node);  
    PUSH_FIELD (class_type_node, field, "protectionDomain", ptr_type_node);
+   PUSH_FIELD (class_type_node, field, "assertion_table", ptr_type_node);
    PUSH_FIELD (class_type_node, field, "hack_signers", ptr_type_node);
    PUSH_FIELD (class_type_node, field, "chain", ptr_type_node);
+   PUSH_FIELD (class_type_node, field, "aux_info", ptr_type_node);
+   PUSH_FIELD (class_type_node, field, "engine", ptr_type_node);
    for (t = TYPE_FIELDS (class_type_node);  t != NULL_TREE;  t = TREE_CHAIN (t))
      FIELD_PRIVATE (t) = 1;
    push_super_field (class_type_node, object_type_node);
*************** java_init_decl_processing (void)
*** 721,729 ****
    FINISH_RECORD (dtable_type);
    build_decl (TYPE_DECL, get_identifier ("dispatchTable"), dtable_type);
  
- #define jint_type int_type_node
- #define jint_ptr_type ptr_type_node
- 
    jexception_type = make_node (RECORD_TYPE);
    PUSH_FIELD (jexception_type, field, "start_pc", ptr_type_node);
    PUSH_FIELD (jexception_type, field, "end_pc", ptr_type_node);
--- 963,968 ----
*************** java_init_decl_processing (void)
*** 742,751 ****
    PUSH_FIELD (lineNumbers_type, field, "length", unsigned_int_type_node);
    FINISH_RECORD (lineNumbers_type);
  
- #define instn_ptr_type_node ptr_type_node	/* XXX JH */
- 
- #define lineNumbers_ptr_type_node build_pointer_type(lineNumbers_type)
- 
    PUSH_FIELD (method_type_node, field, "name", utf8const_ptr_type);
    PUSH_FIELD (method_type_node, field, "signature", utf8const_ptr_type);
    PUSH_FIELD (method_type_node, field, "accflags", access_flags_type_node);
--- 981,986 ----
*************** java_init_decl_processing (void)
*** 757,764 ****
  
    endlink = end_params_node = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
  
!   t = tree_cons (NULL_TREE, class_ptr_type,
! 		 tree_cons (NULL_TREE, int_type_node, endlink));
    alloc_object_node = builtin_function ("_Jv_AllocObject",
  					build_function_type (ptr_type_node, t),
  					0, NOT_BUILT_IN, NULL, NULL_TREE);
--- 992,998 ----
  
    endlink = end_params_node = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
  
!   t = tree_cons (NULL_TREE, class_ptr_type, endlink);
    alloc_object_node = builtin_function ("_Jv_AllocObject",
  					build_function_type (ptr_type_node, t),
  					0, NOT_BUILT_IN, NULL, NULL_TREE);
*************** java_init_decl_processing (void)
*** 776,806 ****
  					  0, NOT_BUILT_IN, NULL, NULL_TREE);
  
    throw_node = builtin_function ("_Jv_Throw",
! 				 build_function_type (ptr_type_node, t),
  				 0, NOT_BUILT_IN, NULL, NULL_TREE);
    /* Mark throw_nodes as `noreturn' functions with side effects.  */
    TREE_THIS_VOLATILE (throw_node) = 1;
    TREE_SIDE_EFFECTS (throw_node) = 1;
  
!   t = build_function_type (int_type_node, endlink);
    soft_monitorenter_node 
      = builtin_function ("_Jv_MonitorEnter", t, 0, NOT_BUILT_IN,
  			NULL, NULL_TREE);
    soft_monitorexit_node 
      = builtin_function ("_Jv_MonitorExit", 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_newarray_node
        = builtin_function ("_Jv_NewPrimArray",
! 			  build_function_type(ptr_type_node, t),
  			  0, NOT_BUILT_IN, NULL, NULL_TREE);
    DECL_IS_MALLOC (soft_newarray_node) = 1;
  
    t = tree_cons (NULL_TREE, int_type_node,
  		 tree_cons (NULL_TREE, class_ptr_type,
! 			    tree_cons (NULL_TREE, object_ptr_type_node, endlink)));
    soft_anewarray_node
        = builtin_function ("_Jv_NewObjectArray",
  			  build_function_type (ptr_type_node, t),
--- 1010,1042 ----
  					  0, NOT_BUILT_IN, NULL, NULL_TREE);
  
    throw_node = builtin_function ("_Jv_Throw",
! 				 build_function_type (void_type_node, t),
  				 0, NOT_BUILT_IN, NULL, NULL_TREE);
    /* Mark throw_nodes as `noreturn' functions with side effects.  */
    TREE_THIS_VOLATILE (throw_node) = 1;
    TREE_SIDE_EFFECTS (throw_node) = 1;
  
!   t = build_function_type (void_type_node, tree_cons (NULL_TREE, ptr_type_node,
! 						      endlink));
    soft_monitorenter_node 
      = builtin_function ("_Jv_MonitorEnter", t, 0, NOT_BUILT_IN,
  			NULL, NULL_TREE);
    soft_monitorexit_node 
      = builtin_function ("_Jv_MonitorExit", t, 0, NOT_BUILT_IN,
  			NULL, NULL_TREE);
! 
!   t = tree_cons (NULL_TREE, ptr_type_node, 
  		 tree_cons (NULL_TREE, int_type_node, endlink));
    soft_newarray_node
        = builtin_function ("_Jv_NewPrimArray",
! 			  build_function_type (ptr_type_node, t),
  			  0, NOT_BUILT_IN, NULL, NULL_TREE);
    DECL_IS_MALLOC (soft_newarray_node) = 1;
  
    t = tree_cons (NULL_TREE, int_type_node,
  		 tree_cons (NULL_TREE, class_ptr_type,
! 			    tree_cons (NULL_TREE, object_ptr_type_node,
! 				       endlink)));
    soft_anewarray_node
        = builtin_function ("_Jv_NewObjectArray",
  			  build_function_type (ptr_type_node, t),
*************** java_init_decl_processing (void)
*** 848,853 ****
--- 1084,1090 ----
      = builtin_function ("_Jv_IsInstanceOf",
  			build_function_type (boolean_type_node, t),
  			0, NOT_BUILT_IN, NULL, NULL_TREE);
+   DECL_IS_PURE (soft_instanceof_node) = 1;
    t = tree_cons (NULL_TREE, object_ptr_type_node,
  		 tree_cons (NULL_TREE, object_ptr_type_node, endlink));
    soft_checkarraystore_node
*************** java_init_decl_processing (void)
*** 861,867 ****
      = builtin_function ("_Jv_LookupInterfaceMethodIdx",
  			build_function_type (ptr_type_node, t),
  			0, NOT_BUILT_IN, NULL, NULL_TREE);
! 
    t = tree_cons (NULL_TREE, object_ptr_type_node,
  		 tree_cons (NULL_TREE, ptr_type_node,
  			    tree_cons (NULL_TREE, ptr_type_node, 
--- 1098,1111 ----
      = builtin_function ("_Jv_LookupInterfaceMethodIdx",
  			build_function_type (ptr_type_node, t),
  			0, NOT_BUILT_IN, NULL, NULL_TREE);
!   DECL_IS_PURE (soft_lookupinterfacemethod_node) = 1;
!   t = tree_cons (NULL_TREE, ptr_type_node,
! 		 tree_cons (NULL_TREE, ptr_type_node,
! 			    tree_cons (NULL_TREE, ptr_type_node, endlink)));
!   soft_lookupinterfacemethodbyname_node 
!     = builtin_function ("_Jv_LookupInterfaceMethod",
! 			build_function_type (ptr_type_node, t),
! 			0, NOT_BUILT_IN, NULL, NULL_TREE);
    t = tree_cons (NULL_TREE, object_ptr_type_node,
  		 tree_cons (NULL_TREE, ptr_type_node,
  			    tree_cons (NULL_TREE, ptr_type_node, 
*************** java_init_decl_processing (void)
*** 878,886 ****
  			0, NOT_BUILT_IN, NULL, NULL_TREE);
    soft_jnipopsystemframe_node
      = builtin_function ("_Jv_JNI_PopSystemFrame",
! 			build_function_type (ptr_type_node, t),
  			0, NOT_BUILT_IN, NULL, NULL_TREE);
  
    soft_idiv_node
      = builtin_function ("_Jv_divI",
  			build_function_type (int_type_node, t),
--- 1122,1132 ----
  			0, NOT_BUILT_IN, NULL, NULL_TREE);
    soft_jnipopsystemframe_node
      = builtin_function ("_Jv_JNI_PopSystemFrame",
! 			build_function_type (void_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
      = builtin_function ("_Jv_divI",
  			build_function_type (int_type_node, t),
*************** java_init_decl_processing (void)
*** 891,896 ****
--- 1137,1144 ----
  			build_function_type (int_type_node, t),
  			0, NOT_BUILT_IN, NULL, NULL_TREE);
  
+   t = tree_cons (NULL_TREE, long_type_node,
+ 		 tree_cons (NULL_TREE, long_type_node, endlink));
    soft_ldiv_node
      = builtin_function ("_Jv_divJ",
  			build_function_type (long_type_node, t),
*************** java_init_decl_processing (void)
*** 915,920 ****
--- 1163,1170 ----
  #if 0
    soft_fmodf_node = built_in_decls[BUILT_IN_FMODF];
  #endif
+ 
+   parse_version ();
  }
  
  
*************** pushdecl (tree x)
*** 1056,1065 ****
  	      && chain_member (oldlocal, current_binding_level->level_chain->names))
  	    {
  	      if (TREE_CODE (oldlocal) == PARM_DECL)
! 		pedwarn ("declaration of `%s' shadows a parameter",
  			 IDENTIFIER_POINTER (name));
  	      else
! 		pedwarn ("declaration of `%s' shadows a symbol from the parameter list",
  			 IDENTIFIER_POINTER (name));
  	    }
  
--- 1306,1315 ----
  	      && chain_member (oldlocal, current_binding_level->level_chain->names))
  	    {
  	      if (TREE_CODE (oldlocal) == PARM_DECL)
! 		pedwarn ("declaration of %qs shadows a parameter",
  			 IDENTIFIER_POINTER (name));
  	      else
! 		pedwarn ("declaration of %qs shadows a symbol from the parameter list",
  			 IDENTIFIER_POINTER (name));
  	    }
  
*************** pushdecl (tree x)
*** 1081,1092 ****
  		   but there is no way to tell it's not a definition.  */
  		;
  	      else if (oldlocal != 0 && TREE_CODE (oldlocal) == PARM_DECL)
! 		warnstring = "declaration of `%s' shadows a parameter";
  	      else if (oldlocal != 0)
! 		warnstring = "declaration of `%s' shadows previous local";
  	      else if (IDENTIFIER_GLOBAL_VALUE (name) != 0
  		       && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node)
! 		warnstring = "declaration of `%s' shadows global declaration";
  
  	      if (warnstring)
  		warning (warnstring, IDENTIFIER_POINTER (name));
--- 1331,1342 ----
  		   but there is no way to tell it's not a definition.  */
  		;
  	      else if (oldlocal != 0 && TREE_CODE (oldlocal) == PARM_DECL)
! 		warnstring = "declaration of %qs shadows a parameter";
  	      else if (oldlocal != 0)
! 		warnstring = "declaration of %qs shadows previous local";
  	      else if (IDENTIFIER_GLOBAL_VALUE (name) != 0
  		       && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node)
! 		warnstring = "declaration of %qs shadows global declaration";
  
  	      if (warnstring)
  		warning (warnstring, IDENTIFIER_POINTER (name));
*************** pushdecl_top_level (tree x)
*** 1128,1133 ****
--- 1378,1397 ----
    return t;
  }
  
+ /* Like pushdecl, only it places X in FUNCTION_BINDING_LEVEL, if appropriate.  */
+ 
+ tree
+ pushdecl_function_level (tree x)
+ {
+   tree t;
+   struct binding_level *b = current_binding_level;
+ 
+   current_binding_level = function_binding_level;
+   t = pushdecl (x);
+   current_binding_level = b;
+   return t;
+ }
+ 
  /* Nonzero if we are currently in the global binding level.  */
  
  int
*************** static struct binding_level *
*** 1153,1159 ****
  make_binding_level (void)
  {
    /* NOSTRICT */
!   return xmalloc (sizeof (struct binding_level));
  }
  
  void
--- 1417,1423 ----
  make_binding_level (void)
  {
    /* NOSTRICT */
!   return ggc_alloc_cleared (sizeof (struct binding_level));
  }
  
  void
*************** pushlevel (int unused ATTRIBUTE_UNUSED)
*** 1190,1196 ****
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
    newlevel->binding_depth = binding_depth;
    indent ();
!   fprintf (stderr, "push %s level 0x%08x pc %d\n",
  	   (is_class_level) ? "class" : "block", newlevel, current_pc);
    is_class_level = 0;
    binding_depth++;
--- 1454,1460 ----
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
    newlevel->binding_depth = binding_depth;
    indent ();
!   fprintf (stderr, "push %s level %p pc %d\n",
  	   (is_class_level) ? "class" : "block", newlevel, current_pc);
    is_class_level = 0;
    binding_depth++;
*************** poplevel (int keep, int reverse, int fun
*** 1222,1239 ****
    tree subblocks = current_binding_level->blocks;
    tree block = 0;
    tree decl;
!   int block_previously_created;
!     {
  
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
    binding_depth--;
    indent ();
    if (current_binding_level->end_pc != LARGEST_PC)
!     fprintf (stderr, "pop  %s level 0x%08x pc %d (end pc %d)\n",
  	     (is_class_level) ? "class" : "block", current_binding_level, current_pc,
  	     current_binding_level->end_pc);
    else
!     fprintf (stderr, "pop  %s level 0x%08x pc %d\n",
  	     (is_class_level) ? "class" : "block", current_binding_level, current_pc);
  #if 0
    if (is_class_level != (current_binding_level == class_binding_level))
--- 1486,1502 ----
    tree subblocks = current_binding_level->blocks;
    tree block = 0;
    tree decl;
!   tree bind = 0;
  
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
    binding_depth--;
    indent ();
    if (current_binding_level->end_pc != LARGEST_PC)
!     fprintf (stderr, "pop  %s level %p pc %d (end pc %d)\n",
  	     (is_class_level) ? "class" : "block", current_binding_level, current_pc,
  	     current_binding_level->end_pc);
    else
!     fprintf (stderr, "pop  %s level %p pc %d\n",
  	     (is_class_level) ? "class" : "block", current_binding_level, current_pc);
  #if 0
    if (is_class_level != (current_binding_level == class_binding_level))
*************** poplevel (int keep, int reverse, int fun
*** 1255,1307 ****
    else
      decls = current_binding_level->names;
  
-   /* Output any nested inline functions within this block
-      if they weren't already output.  */
- 
    for (decl = decls; decl; decl = TREE_CHAIN (decl))
!     if (TREE_CODE (decl) == FUNCTION_DECL
! 	&& ! TREE_ASM_WRITTEN (decl)
! 	&& DECL_INITIAL (decl) != 0
! 	&& TREE_ADDRESSABLE (decl))
!       {
! 	  /* If this decl was copied from a file-scope decl on account
! 	     of a block-scope extern decl, propagate TREE_ADDRESSABLE
! 	     to the file-scope decl.
! 	     
! 	     DECL_ABSTRACT_ORIGIN can be set to itself if
! 	     warn_return_type is true, since then the decl goes
! 	     through save_for_inline_copying.  */
! 	if (DECL_ABSTRACT_ORIGIN (decl) != 0
! 	    && DECL_ABSTRACT_ORIGIN (decl) != decl)
! 	  TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
! 	else
! 	  {
! 	    push_function_context ();
! 	    output_inline_function (decl);
! 	    pop_function_context ();
! 	  }
!       }
!       else if (TREE_CODE (decl) == VAR_DECL
! 	       && DECL_LANG_SPECIFIC (decl) != NULL
! 	       && DECL_LOCAL_SLOT_NUMBER (decl))
! 	LOCAL_VAR_OUT_OF_SCOPE_P (decl) = 1;
!     }
  
    /* If there were any declarations in that level,
       or if this level is a function body,
       create a BLOCK to record them for the life of this function.  */
  
    block = 0;
!   block_previously_created = (current_binding_level->this_block != 0);
!   if (block_previously_created)
!     block = current_binding_level->this_block;
!   else if (keep || functionbody)
!     block = make_node (BLOCK);
    if (block != 0)
      {
!       BLOCK_VARS (block) = decls;
        BLOCK_SUBBLOCKS (block) = subblocks;
!     }
  
    /* In each subblock, record that this is its superior.  */
  
--- 1518,1586 ----
    else
      decls = current_binding_level->names;
  
    for (decl = decls; decl; decl = TREE_CHAIN (decl))
!     if (TREE_CODE (decl) == VAR_DECL
! 	&& DECL_LANG_SPECIFIC (decl) != NULL
! 	&& DECL_LOCAL_SLOT_NUMBER (decl))
!       LOCAL_VAR_OUT_OF_SCOPE_P (decl) = 1;
  
    /* If there were any declarations in that level,
       or if this level is a function body,
       create a BLOCK to record them for the life of this function.  */
  
    block = 0;
!   if (keep || functionbody)
!     {
!       block = make_node (BLOCK);
!       TREE_TYPE (block) = void_type_node;
!     }
! 
!   if (current_binding_level->exception_range)
!     expand_end_java_handler (current_binding_level->exception_range);
! 
    if (block != 0)
      {
!       /* If any statements have been generated at this level, create a
! 	 BIND_EXPR to hold them and copy the variables to it.  This
! 	 only applies to the bytecode compiler.  */
!       if (current_binding_level->stmts)
! 	{
! 	  tree decl = decls;
! 	  tree *var = &BLOCK_VARS (block);
! 
! 	  /* Copy decls from names list, ignoring labels.  */
! 	  while (decl)
! 	    {
! 	      tree next = TREE_CHAIN (decl);
! 	      if (TREE_CODE (decl) != LABEL_DECL)
! 		{
! 		  *var = decl;
! 		  var = &TREE_CHAIN (decl);
! 		}
! 	      decl = next;
! 	    }
! 	  *var = NULL;
! 	    
! 	  bind = build3 (BIND_EXPR, TREE_TYPE (block), BLOCK_VARS (block), 
! 			 BLOCK_EXPR_BODY (block), block);
! 	  BIND_EXPR_BODY (bind) = current_binding_level->stmts;
! 	  
! 	  if (BIND_EXPR_BODY (bind)
! 	      && TREE_SIDE_EFFECTS (BIND_EXPR_BODY (bind)))
! 	    TREE_SIDE_EFFECTS (bind) = 1;
! 	  
! 	  /* FIXME: gimplifier brain damage.  */
! 	  if (BIND_EXPR_BODY (bind) == NULL)
! 	    BIND_EXPR_BODY (bind) = build_java_empty_stmt ();
! 
! 	  current_binding_level->stmts = NULL;
! 	}
!       else
! 	{
! 	  BLOCK_VARS (block) = decls;
! 	}
        BLOCK_SUBBLOCKS (block) = subblocks;
!     }	
  
    /* In each subblock, record that this is its superior.  */
  
*************** poplevel (int keep, int reverse, int fun
*** 1386,1421 ****
  
    /* Dispose of the block that we just made inside some higher level.  */
    if (functionbody)
-     DECL_INITIAL (current_function_decl) = block;
-   else if (block)
      {
!       if (!block_previously_created)
!         current_binding_level->blocks
!           = chainon (current_binding_level->blocks, block);
      }
!   /* If we did not make a block for the level just exited,
!      any blocks made for inner levels
!      (since they cannot be recorded as subblocks in that level)
!      must be carried forward so they will later become subblocks
!      of something else.  */
!   else if (subblocks)
!     current_binding_level->blocks
!       = chainon (current_binding_level->blocks, subblocks);
! 
!   /* Set the TYPE_CONTEXTs for all of the tagged types belonging to this
!      binding contour so that they point to the appropriate construct, i.e.
!      either to the current FUNCTION_DECL node, or else to the BLOCK node
!      we just constructed.
  
!      Note that for tagged types whose scope is just the formal parameter
!      list for some function type specification, we can't properly set
!      their TYPE_CONTEXTs here, because we don't have a pointer to the
!      appropriate FUNCTION_TYPE node readily available to us.  For those
!      cases, the TYPE_CONTEXTs of the relevant tagged type nodes get set
!      in `grokdeclarator' as soon as we have created the FUNCTION_TYPE
!      node which will represent the "scope" for these "parameter list local"
!      tagged types.
!   */
  
    if (block)
      TREE_USED (block) = 1;
--- 1665,1693 ----
  
    /* Dispose of the block that we just made inside some higher level.  */
    if (functionbody)
      {
!       DECL_INITIAL (current_function_decl) = block;
!       DECL_SAVED_TREE (current_function_decl) = bind;
      }
!   else 
!     {
!       if (block)
! 	{
! 	  current_binding_level->blocks
! 	    = chainon (current_binding_level->blocks, block);
! 	}
!       /* If we did not make a block for the level just exited,
! 	 any blocks made for inner levels
! 	 (since they cannot be recorded as subblocks in that level)
! 	 must be carried forward so they will later become subblocks
! 	 of something else.  */
!       else if (subblocks)
! 	current_binding_level->blocks
! 	  = chainon (current_binding_level->blocks, subblocks);
  
!       if (bind)
! 	java_add_stmt (bind);
!     }
  
    if (block)
      TREE_USED (block) = 1;
*************** maybe_pushlevels (int pc)
*** 1433,1439 ****
  	 DECL_LOCAL_START_PC (pending_local_decls) <= pc)
      {
        tree *ptr = &pending_local_decls;
!       tree decl = *ptr;
        int end_pc = DECL_LOCAL_END_PC (decl);
  
        while (*ptr != NULL_TREE
--- 1705,1711 ----
  	 DECL_LOCAL_START_PC (pending_local_decls) <= pc)
      {
        tree *ptr = &pending_local_decls;
!       tree decl = *ptr, next;
        int end_pc = DECL_LOCAL_END_PC (decl);
  
        while (*ptr != NULL_TREE
*************** maybe_pushlevels (int pc)
*** 1443,1463 ****
        pending_local_decls = *ptr;
        *ptr = NULL_TREE;
  
!       /* Force non-nested range to be nested in current range. */
        if (end_pc > current_binding_level->end_pc)
! 	end_pc = current_binding_level->end_pc;
  
        maybe_start_try (pc, end_pc);
        
        pushlevel (1);
-       expand_start_bindings (0);
  
        current_binding_level->end_pc = end_pc;
        current_binding_level->start_pc = pc;      
!       current_binding_level->names = decl;
!       for ( ; decl != NULL_TREE;  decl = TREE_CHAIN (decl))
  	{
  	  push_jvm_slot (DECL_LOCAL_SLOT_NUMBER (decl), decl);
  	}
      }      
  
--- 1715,1741 ----
        pending_local_decls = *ptr;
        *ptr = NULL_TREE;
  
!       /* Force non-nested range to be nested in current range by
! 	 truncating variable lifetimes. */
        if (end_pc > current_binding_level->end_pc)
! 	{
! 	  end_pc = current_binding_level->end_pc;
! 	  DECL_LOCAL_END_PC (decl) = end_pc;
! 	}
  
        maybe_start_try (pc, end_pc);
        
        pushlevel (1);
  
        current_binding_level->end_pc = end_pc;
        current_binding_level->start_pc = pc;      
!       current_binding_level->names = NULL;
!       for ( ; decl != NULL_TREE; decl = next)
  	{
+ 	  next = TREE_CHAIN (decl);
  	  push_jvm_slot (DECL_LOCAL_SLOT_NUMBER (decl), decl);
+ 	  pushdecl (decl);
+ 	  initialize_local_variable (decl, DECL_LOCAL_SLOT_NUMBER (decl));
  	}
      }      
  
*************** maybe_poplevels (int pc)
*** 1471,1483 ****
    current_pc = pc;
  #endif
  
    while (current_binding_level->end_pc <= pc)
!     {
!       expand_end_bindings (getdecls (), 1, 0);
!       maybe_end_try (current_binding_level->start_pc, pc);
!       poplevel (1, 0, 0);
!     }
!   maybe_end_try (0, pc);
  }
  
  /* Terminate any binding which began during the range beginning at
--- 1749,1762 ----
    current_pc = pc;
  #endif
  
+   /* FIXME: I'm pretty sure that this is wrong.  Variable scopes are
+      inclusive, so a variable is live if pc == end_pc.  Here, we
+      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);
  }
  
  /* Terminate any binding which began during the range beginning at
*************** force_poplevels (int start_pc)
*** 1494,1500 ****
  	warning ("%JIn %D: overlapped variable and exception ranges at %d",
                   current_function_decl, current_function_decl,
  		 current_binding_level->start_pc);
-       expand_end_bindings (getdecls (), 1, 0);
        poplevel (1, 0, 0);
      }
  }
--- 1773,1778 ----
*************** insert_block (tree block)
*** 1511,1529 ****
      = chainon (current_binding_level->blocks, block);
  }
  
- /* Set the BLOCK node for the innermost scope
-    (the one we are currently in).  */
- 
- void
- set_block (tree block)
- {
-   current_binding_level->this_block = block;
-   current_binding_level->names = chainon (current_binding_level->names,
- 					  BLOCK_VARS (block));
-   current_binding_level->blocks = chainon (current_binding_level->blocks,
- 					   BLOCK_SUBBLOCKS (block));
- }
- 
  /* integrate_decl_tree calls this function. */
  
  void
--- 1789,1794 ----
*************** give_name_to_locals (JCF *jcf)
*** 1579,1585 ****
  	  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);
  	    }
  
--- 1844,1850 ----
  	  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);
  	    }
  
*************** build_result_decl (tree fndecl)
*** 1651,1656 ****
--- 1916,1923 ----
  	  && TYPE_PRECISION (restype) < TYPE_PRECISION (integer_type_node))
  	restype = integer_type_node;
        result = build_decl (RESULT_DECL, NULL_TREE, restype);
+       DECL_ARTIFICIAL (result) = 1;
+       DECL_IGNORED_P (result) = 1;
        DECL_CONTEXT (result) = fndecl;
        DECL_RESULT (fndecl) = result;
      }
*************** build_result_decl (tree fndecl)
*** 1658,1745 ****
  }
  
  void
- complete_start_java_method (tree fndecl)
- {
-   if (! flag_emit_class_files)
-     {
-       /* Initialize the RTL code for the function.  */
-       init_function_start (fndecl);
- 
-       /* Set up parameters and prepare for return, for the function.  */
-       expand_function_start (fndecl, 0);
-     }
- 
- #if 0
-       /* If this fcn was already referenced via a block-scope `extern' decl (or
-          an implicit decl), propagate certain information about the usage. */
-       if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (current_function_decl)))
-         TREE_ADDRESSABLE (current_function_decl) = 1;
- 
- #endif
- 
-   if (METHOD_STATIC (fndecl) && ! METHOD_PRIVATE (fndecl)
-       && ! flag_emit_class_files
-       && ! DECL_CLINIT_P (fndecl)
-       && ! CLASS_INTERFACE (TYPE_NAME (current_class)))
-     {
-       tree clas = DECL_CONTEXT (fndecl);
-       tree init = build (CALL_EXPR, void_type_node,
- 			 build_address_of (soft_initclass_node),
- 			 build_tree_list (NULL_TREE, build_class_ref (clas)),
- 			 NULL_TREE);
-       TREE_SIDE_EFFECTS (init) = 1;
-       expand_expr_stmt (init);
-     }
- 
-   /* Push local variables. Function compiled from source code are
-      using a different local variables management, and for them,
-      pushlevel shouldn't be called from here.  */
-   if (!CLASS_FROM_SOURCE_P (DECL_CONTEXT (fndecl)))
-     {
-       pushlevel (2);
-       if (! flag_emit_class_files)
- 	expand_start_bindings (1);
-     }
- 
-   if (METHOD_SYNCHRONIZED (fndecl) && ! flag_emit_class_files)
-     {
-       /* Wrap function body with a monitorenter plus monitorexit cleanup. */
-       tree enter, exit, lock;
-       if (METHOD_STATIC (fndecl))
- 	lock = build_class_ref (DECL_CONTEXT (fndecl));
-       else
- 	lock = DECL_ARGUMENTS (fndecl);
-       BUILD_MONITOR_ENTER (enter, lock);
-       BUILD_MONITOR_EXIT (exit, lock);
-       if (!CLASS_FROM_SOURCE_P (DECL_CONTEXT (fndecl)))
- 	{
- 	  expand_expr_stmt (enter);
- 	  expand_decl_cleanup (NULL_TREE, exit);
- 	}
-       else
- 	{
- 	  tree function_body = DECL_FUNCTION_BODY (fndecl);
- 	  tree body = BLOCK_EXPR_BODY (function_body);
- 	  lock = build (COMPOUND_EXPR, void_type_node,
- 			enter,
- 			build (TRY_FINALLY_EXPR, void_type_node, body, exit));
- 	  TREE_SIDE_EFFECTS (lock) = 1;
- 	  BLOCK_EXPR_BODY (function_body) = lock;
- 	}
-     }
- }
- 
- void
  start_java_method (tree fndecl)
  {
    tree tem, *ptr;
    int i;
  
    current_function_decl = fndecl;
    announce_function (fndecl);
  
    i = DECL_MAX_LOCALS(fndecl) + DECL_MAX_STACK(fndecl);
    decl_map = make_tree_vec (i);
    type_map = xrealloc (type_map, i * sizeof (tree));
  
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
--- 1925,1943 ----
  }
  
  void
  start_java_method (tree fndecl)
  {
    tree tem, *ptr;
    int i;
  
+   uniq = 0;
+ 
    current_function_decl = fndecl;
    announce_function (fndecl);
  
    i = DECL_MAX_LOCALS(fndecl) + DECL_MAX_STACK(fndecl);
    decl_map = make_tree_vec (i);
+   base_decl_map = make_tree_vec (i);
    type_map = xrealloc (type_map, i * sizeof (tree));
  
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
*************** start_java_method (tree fndecl)
*** 1759,1765 ****
  
        parm_decl = build_decl (PARM_DECL, parm_name, parm_type);
        DECL_CONTEXT (parm_decl) = fndecl;
!       if (PROMOTE_PROTOTYPES
  	  && TYPE_PRECISION (parm_type) < TYPE_PRECISION (integer_type_node)
  	  && INTEGRAL_TYPE_P (parm_type))
  	parm_type = integer_type_node;
--- 1957,1963 ----
  
        parm_decl = build_decl (PARM_DECL, parm_name, parm_type);
        DECL_CONTEXT (parm_decl) = fndecl;
!       if (targetm.calls.promote_prototypes (parm_type)
  	  && TYPE_PRECISION (parm_type) < TYPE_PRECISION (integer_type_node)
  	  && INTEGRAL_TYPE_P (parm_type))
  	parm_type = integer_type_node;
*************** start_java_method (tree fndecl)
*** 1785,1791 ****
      type_map[i++] = NULL_TREE;
  
    build_result_decl (fndecl);
!   complete_start_java_method (fndecl);
  }
  
  void
--- 1983,1993 ----
      type_map[i++] = NULL_TREE;
  
    build_result_decl (fndecl);
! 
!   /* Push local variables.  */
!   pushlevel (2);
! 
!   function_binding_level = current_binding_level;
  }
  
  void
*************** end_java_method (void)
*** 1793,1799 ****
  {
    tree fndecl = current_function_decl;
  
-   expand_end_bindings (getdecls (), 1, 0);
    /* pop out of function */
    poplevel (1, 1, 0);
  
--- 1995,2000 ----
*************** end_java_method (void)
*** 1801,1865 ****
    poplevel (1, 0, 1);
  
    BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
  
!   /* Generate rtl for function exit.  */
!   expand_function_end ();
! 
!   /* Run the optimizers and output assembler code for this function. */
!   rest_of_compilation (fndecl);
  
    current_function_decl = NULL_TREE;
  }
  
! /* Expand a function's body.  */
  
  void
! java_expand_body (tree fndecl)
  {
!   location_t saved_location = input_location;
! 
!   current_function_decl = fndecl;
!   input_location = DECL_SOURCE_LOCATION (fndecl);
!   output_class = current_class = DECL_CONTEXT (fndecl);
! 
!   timevar_push (TV_EXPAND);
! 
!   /* Prepare the function for tree completion.  */
!   start_complete_expand_method (fndecl);
  
!   if (! flag_emit_class_files && ! flag_emit_xref)
      {
!       /* Initialize the RTL code for the function.  */
!       init_function_start (fndecl);
! 
!       /* Set up parameters and prepare for return, for the function.  */
!       expand_function_start (fndecl, 0);
! 
!       /* Generate the RTL for this function.  */
!       expand_expr_stmt_value (DECL_SAVED_TREE (fndecl), 0, 1);
      }
  
!   /* Pop out of its parameters.  */
!   pushdecl_force_head (DECL_ARGUMENTS (fndecl));
!   poplevel (1, 0, 1);
!   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
! 
!   if (! flag_emit_class_files && ! flag_emit_xref)
      {
!       /* Generate RTL for function exit.  */
!       input_line = DECL_FUNCTION_LAST_LINE (fndecl);
!       expand_function_end ();
! 
!       /* Run the optimizers and output the assembler code
! 	 for this function.  */
!       rest_of_compilation (fndecl);
      }
  
!   timevar_pop (TV_EXPAND);
  
!   input_location = saved_location;
  
!   current_function_decl = NULL_TREE;
  }
  
  /* We pessimistically marked all methods and fields external until we
--- 2002,2095 ----
    poplevel (1, 0, 1);
  
    BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
+   
+   if (DECL_SAVED_TREE (fndecl))
+     {
+       tree fbody, block_body;
+       /* Before we check initialization, attached all class initialization
+ 	 variable to the block_body */
+       fbody = DECL_SAVED_TREE (fndecl);
+       block_body = BIND_EXPR_BODY (fbody);
+       htab_traverse (DECL_FUNCTION_INIT_TEST_TABLE (fndecl),
+ 		     attach_init_test_initialization_flags, block_body);
+     }
  
!   flag_unit_at_a_time = 0;
!   finish_method (fndecl);
  
+   if (! flag_unit_at_a_time)
+     {
+       /* Nulling these fields when we no longer need them saves
+ 	 memory.  */
+       DECL_SAVED_TREE (fndecl) = NULL;
+       DECL_STRUCT_FUNCTION (fndecl) = NULL;
+       DECL_INITIAL (fndecl) = NULL_TREE;
+     }
    current_function_decl = NULL_TREE;
  }
  
! /* Prepare a method for expansion.  */
  
  void
! finish_method (tree fndecl)
  {
!   tree *tp = &DECL_SAVED_TREE (fndecl);
  
!   /* Wrap body of synchronized methods in a monitorenter,
!      plus monitorexit cleanup.  */
!   if (METHOD_SYNCHRONIZED (fndecl))
      {
!       tree enter, exit, lock;
!       if (METHOD_STATIC (fndecl))
! 	lock = build_class_ref (DECL_CONTEXT (fndecl));
!       else
! 	lock = DECL_ARGUMENTS (fndecl);
!       BUILD_MONITOR_ENTER (enter, lock);
!       BUILD_MONITOR_EXIT (exit, lock);
!       *tp = build2 (COMPOUND_EXPR, void_type_node, enter,
! 		    build2 (TRY_FINALLY_EXPR, void_type_node, *tp, exit));
      }
  
!   /* 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))))
      {
!       tree clas = DECL_CONTEXT (fndecl);
!       tree init = build3 (CALL_EXPR, void_type_node,
! 			  build_address_of (soft_initclass_node),
! 			  build_tree_list (NULL_TREE, build_class_ref (clas)),
! 			  NULL_TREE);
!       *tp = build2 (COMPOUND_EXPR, TREE_TYPE (*tp), init, *tp);
      }
  
!   /* Convert function tree to GENERIC prior to inlining.  */
!   java_genericize (fndecl);
  
!   /* Store the end of the function, so that we get good line number
!      info for the epilogue.  */
!   if (DECL_STRUCT_FUNCTION (fndecl))
!     cfun = DECL_STRUCT_FUNCTION (fndecl);
!   else
!     allocate_struct_function (fndecl);
! #ifdef USE_MAPPED_LOCATION
!   cfun->function_end_locus = DECL_FUNCTION_LAST_LINE (fndecl);
! #else
!   cfun->function_end_locus.file = DECL_SOURCE_FILE (fndecl);
!   cfun->function_end_locus.line = DECL_FUNCTION_LAST_LINE (fndecl);
! #endif
  
!   /* Defer inlining and expansion to the cgraph optimizers.  */
!   cgraph_finalize_function (fndecl, false);
! }
! 
! /* Optimize and expand a function's entire body.  */
! 
! void
! java_expand_body (tree fndecl)
! {
!   tree_rest_of_compilation (fndecl);
  }
  
  /* We pessimistically marked all methods and fields external until we
*************** java_mark_decl_local (tree decl)
*** 1874,1880 ****
    /* If we've already constructed DECL_RTL, give encode_section_info
       a second chance, now that we've changed the flags.  */
    if (DECL_RTL_SET_P (decl))
!     make_decl_rtl (decl, NULL);
  }
  
  void
--- 2104,2110 ----
    /* If we've already constructed DECL_RTL, give encode_section_info
       a second chance, now that we've changed the flags.  */
    if (DECL_RTL_SET_P (decl))
!     make_decl_rtl (decl);
  }
  
  void
*************** java_mark_class_local (tree class)
*** 1891,1894 ****
--- 2121,2194 ----
        java_mark_decl_local (t);
  }
  
+ /* Add a statement to a compound_expr.  */
+ 
+ tree
+ add_stmt_to_compound (tree existing, tree type, tree stmt)
+ {
+   if (!stmt)
+     return existing;
+   else if (existing)
+     {
+       tree expr = build2 (COMPOUND_EXPR, type, existing, stmt);
+       TREE_SIDE_EFFECTS (expr) = TREE_SIDE_EFFECTS (existing)
+ 				 | TREE_SIDE_EFFECTS (stmt);
+       return expr;
+     }
+   else
+     return stmt;
+ }
+ 
+ /* Add a statement to the compound_expr currently being
+    constructed.  */
+ 
+ tree
+ java_add_stmt (tree stmt)
+ {
+   if (input_filename)
+     SET_EXPR_LOCATION (stmt, input_location);
+   
+   return current_binding_level->stmts 
+     = add_stmt_to_compound (current_binding_level->stmts, 
+ 			    TREE_TYPE (stmt), stmt);
+ }
+ 
+ /* Add a variable to the current scope.  */
+ 
+ tree
+ java_add_local_var (tree decl)
+ {
+   tree *vars = &current_binding_level->names;
+   tree next = *vars;
+   TREE_CHAIN (decl) = next;
+   *vars = decl;
+   DECL_CONTEXT (decl) = current_function_decl;
+   MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
+   return decl;
+ }
+ 
+ /* Return a pointer to the compound_expr currently being
+    constructed.  */
+ 
+ tree *
+ get_stmts (void)
+ {
+   return &current_binding_level->stmts;
+ }
+ 
+ /* Register an exception range as belonging to the current binding
+    level.  There may only be one: if there are more, we'll create more
+    binding levels.  However, each range can have multiple handlers,
+    and these are expanded when we call expand_end_java_handler().  */
+ 
+ void
+ register_exception_range (struct eh_range *range, int pc, int end_pc)
+ {
+   if (current_binding_level->exception_range)
+     abort ();
+   current_binding_level->exception_range = range;
+   current_binding_level->end_pc = end_pc;
+   current_binding_level->start_pc = pc;      
+ }
+ 
  #include "gt-java-decl.h"
diff -Nrcpad gcc-3.4.3/gcc/java/except.c gcc-4.0.0/gcc/java/except.c
*** gcc-3.4.3/gcc/java/except.c	Fri Jan  9 17:08:43 2004
--- gcc-4.0.0/gcc/java/except.c	Fri Dec  3 18:11:21 2004
*************** The Free Software Foundation is independ
*** 40,46 ****
  #include "toplev.h"
  
  static void expand_start_java_handler (struct eh_range *);
- static void expand_end_java_handler (struct eh_range *);
  static struct eh_range *find_handler_in_range (int, struct eh_range *,
  					       struct eh_range *);
  static void link_handler (struct eh_range *, struct eh_range *);
--- 40,45 ----
*************** link_handler (struct eh_range *range, st
*** 139,150 ****
        range->next_sibling = NULL;
        range->first_child = outer;
        {
  	struct eh_range **pr = &(outer->outer->first_child);
  	while (*pr != outer)
  	  pr = &(*pr)->next_sibling;
  	*pr = range;
        }
-       outer->outer = range;
        return;
      }
  
--- 138,155 ----
        range->next_sibling = NULL;
        range->first_child = outer;
        {
+ 	struct eh_range *p = outer;
  	struct eh_range **pr = &(outer->outer->first_child);
  	while (*pr != outer)
  	  pr = &(*pr)->next_sibling;
  	*pr = range;
+ 
+ 	while (p)
+ 	  {
+ 	    p->outer = range;
+ 	    p = p->next_sibling;
+ 	  }
        }
        return;
      }
  
*************** link_handler (struct eh_range *range, st
*** 170,175 ****
--- 175,181 ----
  				     TREE_VALUE (range->handlers));
        h->next_sibling = NULL;
        h->expanded = 0;
+       h->stmt = NULL;
        /* Restart both from the top to avoid having to make this
  	 function smart about reentrancy.  */
        link_handler (h, &whole_range);
*************** add_handler (int start_pc, int end_pc, t
*** 287,292 ****
--- 293,299 ----
    h->handlers = build_tree_list (type, handler);
    h->next_sibling = NULL;
    h->expanded = 0;
+   h->stmt = NULL;
  
    if (prev == NULL)
      whole_range.first_child = h;
*************** add_handler (int start_pc, int end_pc, t
*** 294,300 ****
      prev->next_sibling = h;
  }
  
- 
  /* if there are any handlers for this range, issue start of region */
  static void
  expand_start_java_handler (struct eh_range *range)
--- 301,306 ----
*************** expand_start_java_handler (struct eh_ran
*** 304,311 ****
    fprintf (stderr, "expand start handler pc %d --> %d\n",
  	   current_pc, range->end_pc);
  #endif /* defined(DEBUG_JAVA_BINDING_LEVELS) */
    range->expanded = 1;
-   expand_eh_region_start ();
  }
  
  tree
--- 310,318 ----
    fprintf (stderr, "expand start handler pc %d --> %d\n",
  	   current_pc, range->end_pc);
  #endif /* defined(DEBUG_JAVA_BINDING_LEVELS) */
+   pushlevel (0);
+   register_exception_range (range,  range->start_pc, range->end_pc);
    range->expanded = 1;
  }
  
  tree
*************** prepare_eh_table_type (tree type)
*** 348,354 ****
        DECL_INITIAL (decl) = build_class_ref (type);
        layout_decl (decl, 0);
        pushdecl (decl);
!       exp = build1 (ADDR_EXPR, ptr_type_node, decl);
      }
    else
      {
--- 355,361 ----
        DECL_INITIAL (decl) = build_class_ref (type);
        layout_decl (decl, 0);
        pushdecl (decl);
!       exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (decl)), decl);
      }
    else
      {
*************** prepare_eh_table_type (tree type)
*** 370,375 ****
--- 377,384 ----
  		   TYPE_CATCH_CLASSES (output_class));
      }
  
+   exp = convert (ptr_type_node, exp);
+ 
    *slot = tree_cons (type, exp, NULL_TREE);
  
    return exp;
*************** static int
*** 379,386 ****
  expand_catch_class (void **entry, void *x ATTRIBUTE_UNUSED)
  {
    struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
!   tree decl = TREE_OPERAND (TREE_VALUE ((tree)ite->value), 0);
!   rest_of_decl_compilation (decl, (char*) 0, global_bindings_p (), 0);
    return true;
  }
    
--- 388,398 ----
  expand_catch_class (void **entry, void *x ATTRIBUTE_UNUSED)
  {
    struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
!   tree addr = TREE_VALUE ((tree)ite->value);
!   tree decl;
!   STRIP_NOPS (addr);
!   decl = TREE_OPERAND (addr, 0);
!   rest_of_decl_compilation (decl, global_bindings_p (), 0);
    return true;
  }
    
*************** build_exception_object_ref (tree type)
*** 406,414 ****
  
    /* Java only passes object via pointer and doesn't require adjusting.
       The java object is immediately before the generic exception header.  */
!   obj = build (EXC_PTR_EXPR, build_pointer_type (type));
!   obj = build (MINUS_EXPR, TREE_TYPE (obj), obj,
! 	       TYPE_SIZE_UNIT (TREE_TYPE (obj)));
    obj = build1 (INDIRECT_REF, type, obj);
  
    return obj;
--- 418,426 ----
  
    /* Java only passes object via pointer and doesn't require adjusting.
       The java object is immediately before the generic exception header.  */
!   obj = build0 (EXC_PTR_EXPR, build_pointer_type (type));
!   obj = build2 (MINUS_EXPR, TREE_TYPE (obj), obj,
! 		TYPE_SIZE_UNIT (TREE_TYPE (obj)));
    obj = build1 (INDIRECT_REF, type, obj);
  
    return obj;
*************** build_exception_object_ref (tree type)
*** 416,427 ****
  
  /* If there are any handlers for this range, isssue end of range,
     and then all handler blocks */
! static void
  expand_end_java_handler (struct eh_range *range)
  {  
    tree handler = range->handlers;
!   force_poplevels (range->start_pc);
!   expand_start_all_catch ();
    for ( ; handler != NULL_TREE; handler = TREE_CHAIN (handler))
      {
        /* For bytecode we treat exceptions a little unusually.  A
--- 428,438 ----
  
  /* If there are any handlers for this range, isssue end of range,
     and then all handler blocks */
! void
  expand_end_java_handler (struct eh_range *range)
  {  
    tree handler = range->handlers;
! 
    for ( ; handler != NULL_TREE; handler = TREE_CHAIN (handler))
      {
        /* For bytecode we treat exceptions a little unusually.  A
*************** expand_end_java_handler (struct eh_range
*** 433,444 ****
        tree type = TREE_PURPOSE (handler);
        if (type == NULL)
  	type = throwable_type_node;
  
!       expand_start_catch (prepare_eh_table_type (type));
!       expand_goto (TREE_VALUE (handler));
!       expand_end_catch ();
      }
-   expand_end_all_catch ();
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
    indent ();
    fprintf (stderr, "expand end handler pc %d <-- %d\n",
--- 444,460 ----
        tree type = TREE_PURPOSE (handler);
        if (type == NULL)
  	type = throwable_type_node;
+       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;
!       }
      }
  #if defined(DEBUG_JAVA_BINDING_LEVELS)
    indent ();
    fprintf (stderr, "expand end handler pc %d <-- %d\n",
*************** maybe_start_try (int start_pc, int end_p
*** 481,499 ****
    check_start_handlers (range, start_pc);
  }
  
- /* Emit any end-of-try-range ending at end_pc and starting before
-    start_pc. */
- 
- void
- maybe_end_try (int start_pc, int end_pc)
- {
-   if (! doing_eh (1))
-     return;
- 
-   while (current_range != NULL_EH_RANGE && current_range->end_pc <= end_pc
- 	 && current_range->start_pc >= start_pc)
-     {
-       expand_end_java_handler (current_range);
-       current_range = current_range->outer;
-     }
- }
--- 497,499 ----
diff -Nrcpad gcc-3.4.3/gcc/java/expr.c gcc-4.0.0/gcc/java/expr.c
*** gcc-3.4.3/gcc/java/expr.c	Fri Jan 30 01:31:32 2004
--- gcc-4.0.0/gcc/java/expr.c	Thu Mar 17 15:33:30 2005
***************
*** 1,5 ****
  /* Process expressions for 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,5 ----
  /* Process expressions for 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.
*************** The Free Software Foundation is independ
*** 43,48 ****
--- 43,50 ----
  #include "toplev.h"
  #include "except.h"
  #include "ggc.h"
+ #include "tree-gimple.h"
+ #include "target.h"
  
  static void flush_quick_stack (void);
  static void push_value (tree);
*************** static void expand_compare (enum tree_co
*** 70,75 ****
--- 72,79 ----
  static void expand_test (enum tree_code, tree, int);
  static void expand_cond (enum tree_code, tree, int);
  static void expand_java_goto (int);
+ static tree expand_java_switch (tree, int);
+ static void expand_java_add_case (tree, int, int);
  #if 0
  static void expand_java_call (int, int);
  static void expand_java_ret (tree); 
*************** static void java_push_constant_from_pool
*** 81,89 ****
  static void java_stack_pop (int); 
  static tree build_java_throw_out_of_bounds_exception (tree); 
  static tree build_java_check_indexed_type (tree, tree); 
- static tree case_identity (tree, tree); 
  static unsigned char peek_opcode_at_pc (struct JCF *, int, int);
! static int emit_init_test_initialization (void **entry, void * ptr);
  
  static GTY(()) tree operand_type[59];
  
--- 85,92 ----
  static void java_stack_pop (int); 
  static tree build_java_throw_out_of_bounds_exception (tree); 
  static tree build_java_check_indexed_type (tree, tree); 
  static unsigned char peek_opcode_at_pc (struct JCF *, int, int);
! static void promote_arguments (void);
  
  static GTY(()) tree operand_type[59];
  
*************** tree dtable_ident = NULL_TREE;
*** 93,99 ****
  
  /* Set to nonzero value in order to emit class initialization code
     before static field references.  */
! int always_initialize_class_p;
  
  /* We store the stack state in two places:
     Within a basic block, we use the quick_stack, which is a
--- 96,102 ----
  
  /* Set to nonzero value in order to emit class initialization code
     before static field references.  */
! int always_initialize_class_p = 0;
  
  /* We store the stack state in two places:
     Within a basic block, we use the quick_stack, which is a
*************** int always_initialize_class_p;
*** 107,113 ****
  
     If a variable is on the quick stack, it means the value of variable
     when the quick stack was last flushed.  Conceptually, flush_quick_stack
!    saves all the the quick_stack elements in parallel.  However, that is
     complicated, so it actually saves them (i.e. copies each stack value
     to is home virtual register) from low indexes.  This allows a quick_stack
     element at index i (counting from the bottom of stack the) to references
--- 110,116 ----
  
     If a variable is on the quick stack, it means the value of variable
     when the quick stack was last flushed.  Conceptually, flush_quick_stack
!    saves all the quick_stack elements in parallel.  However, that is
     complicated, so it actually saves them (i.e. copies each stack value
     to is home virtual register) from low indexes.  This allows a quick_stack
     element at index i (counting from the bottom of stack the) to references
*************** int always_initialize_class_p;
*** 125,131 ****
  static GTY(()) tree quick_stack;
  
  /* A free-list of unused permanent TREE_LIST nodes.  */
! static GTY((deletable (""))) tree tree_list_free_list;
  
  /* The stack pointer of the Java virtual machine.
     This does include the size of the quick_stack. */
--- 128,134 ----
  static GTY(()) tree quick_stack;
  
  /* A free-list of unused permanent TREE_LIST nodes.  */
! static GTY((deletable)) tree tree_list_free_list;
  
  /* The stack pointer of the Java virtual machine.
     This does include the size of the quick_stack. */
*************** java_truthvalue_conversion (tree expr)
*** 155,166 ****
  
    switch (TREE_CODE (expr))
      {
!     case EQ_EXPR:
!     case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
      case TRUTH_ANDIF_EXPR:
      case TRUTH_ORIF_EXPR:
      case TRUTH_AND_EXPR:
      case TRUTH_OR_EXPR:
      case ERROR_MARK:
        return expr;
  
--- 158,173 ----
  
    switch (TREE_CODE (expr))
      {
!     case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
!     case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
!     case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
!     case ORDERED_EXPR: case UNORDERED_EXPR:
      case TRUTH_ANDIF_EXPR:
      case TRUTH_ORIF_EXPR:
      case TRUTH_AND_EXPR:
      case TRUTH_OR_EXPR:
+     case TRUTH_XOR_EXPR:
+     case TRUTH_NOT_EXPR:
      case ERROR_MARK:
        return expr;
  
*************** java_truthvalue_conversion (tree expr)
*** 179,187 ****
  
      case COND_EXPR:
        /* Distribute the conversion into the arms of a COND_EXPR.  */
!       return fold (build (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.  */
--- 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.  */
*************** java_truthvalue_conversion (tree expr)
*** 191,197 ****
        /* fall through to default */
  
      default:
!       return fold (build (NE_EXPR, boolean_type_node, expr, boolean_false_node));
      }
  }
  
--- 199,206 ----
        /* fall through to default */
  
      default:
!       return fold (build2 (NE_EXPR, boolean_type_node,
! 			   expr, boolean_false_node));
      }
  }
  
*************** flush_quick_stack (void)
*** 230,236 ****
  
        decl = find_stack_slot (stack_index, type);
        if (decl != node)
! 	  expand_assignment (decl, node, 0);
        stack_index += 1 + TYPE_IS_WIDE (type);
      }
  }
--- 239,245 ----
  
        decl = find_stack_slot (stack_index, type);
        if (decl != node)
! 	java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (node), decl, node));
        stack_index += 1 + TYPE_IS_WIDE (type);
      }
  }
*************** push_type_0 (tree type)
*** 246,251 ****
--- 255,263 ----
    n_words = 1 + TYPE_IS_WIDE (type);
    if (stack_pointer + n_words > DECL_MAX_STACK (current_function_decl))
      return 0;
+   /* Allocate decl for this variable now, so we get a temporary that
+      survives the whole method. */
+   find_stack_slot (stack_pointer, type);
    stack_type_map[stack_pointer++] = type;
    n_words--;
    while (--n_words >= 0)
*************** pop_type_0 (tree type, char **messagep)
*** 312,339 ****
    t = stack_type_map[--stack_pointer];
    if (type == NULL_TREE || t == type)
      return t;
    if (INTEGRAL_TYPE_P (type) && INTEGRAL_TYPE_P (t)
        && TYPE_PRECISION (type) <= 32 && TYPE_PRECISION (t) <= 32)
!       return t;
    if (TREE_CODE (type) == POINTER_TYPE && TREE_CODE (t) == POINTER_TYPE)
      {
!       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;
!       else if (can_widen_reference_to (t, type))
! 	return t;
!       /* 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;
      }
  
    /* lang_printable_name uses a static buffer, so we must save the result
       from calling it the first time.  */
    {
      char *temp = xstrdup (lang_printable_name (type, 0));
      *messagep = concat ("expected type '", temp,
  			"' but stack contains '", lang_printable_name (t, 0),
  			"'", NULL);
--- 324,392 ----
    t = stack_type_map[--stack_pointer];
    if (type == NULL_TREE || t == type)
      return t;
+   if (TREE_CODE (t) == TREE_LIST)
+     {      
+       do
+ 	{
+ 	  tree tt = TREE_PURPOSE (t);
+ 	  if (! can_widen_reference_to (tt, type))
+ 	    {
+ 	      t = tt;
+ 	      goto fail;
+ 	    }
+ 	  t = TREE_CHAIN (t);
+ 	}
+       while (t);
+       return t;
+     }
    if (INTEGRAL_TYPE_P (type) && INTEGRAL_TYPE_P (t)
        && TYPE_PRECISION (type) <= 32 && TYPE_PRECISION (t) <= 32)
!     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;
      }
  
    /* lang_printable_name uses a static buffer, so we must save the result
       from calling it the first time.  */
+  fail:
    {
      char *temp = xstrdup (lang_printable_name (type, 0));
+     /* If the stack contains a multi-word type, keep popping the stack until 
+        the real type is found.  */
+     while (t == void_type_node)
+       t = stack_type_map[--stack_pointer];
      *messagep = concat ("expected type '", temp,
  			"' but stack contains '", lang_printable_name (t, 0),
  			"'", NULL);
*************** pop_type (tree type)
*** 359,365 ****
    return type;
  }
  
! /* Return 1f if SOURCE_TYPE can be safely widened to TARGET_TYPE.
     Handles array types and interfaces.  */
  
  int
--- 412,480 ----
    return type;
  }
  
! 
! /* Return true if two type assertions are equal.  */
! 
! static int
! type_assertion_eq (const void * k1_p, const void * k2_p)
! {
!   type_assertion k1 = *(type_assertion *)k1_p;
!   type_assertion k2 = *(type_assertion *)k2_p;
!   return (k1.assertion_code == k2.assertion_code
!           && k1.op1 == k2.op1
! 	  && k1.op2 == k2.op2);
! }
! 
! /* Hash a type assertion.  */
! 
! static hashval_t
! type_assertion_hash (const void *p)
! {
!   const type_assertion *k_p = p;
!   hashval_t hash = iterative_hash (&k_p->assertion_code, sizeof
! 				   k_p->assertion_code, 0);
!   hash = iterative_hash (&k_p->op1, sizeof k_p->op1, hash);
!   return iterative_hash (&k_p->op2, sizeof k_p->op2, hash);
! }
! 
! /* Add an entry to the type assertion table for the given class.  
!    CLASS is the class for which this assertion will be evaluated by the 
!    runtime during loading/initialization.
!    ASSERTION_CODE is the 'opcode' or type of this assertion: see java-tree.h.
!    OP1 and OP2 are the operands. The tree type of these arguments may be
!    specific to each assertion_code. */
! 
! void
! add_type_assertion (tree class, int assertion_code, tree op1, tree op2)
! {
!   htab_t assertions_htab;
!   type_assertion as;
!   void **as_pp;
! 
!   assertions_htab = TYPE_ASSERTIONS (class);
!   if (assertions_htab == NULL)
!     {
!       assertions_htab = htab_create_ggc (7, type_assertion_hash, 
! 					 type_assertion_eq, NULL);
!       TYPE_ASSERTIONS (current_class) = assertions_htab;
!     }
! 
!   as.assertion_code = assertion_code;
!   as.op1 = op1;
!   as.op2 = op2;
! 
!   as_pp = htab_find_slot (assertions_htab, &as, INSERT);
! 
!   /* Don't add the same assertion twice.  */
!   if (*as_pp)
!     return;
! 
!   *as_pp = ggc_alloc (sizeof (type_assertion));
!   **(type_assertion **)as_pp = as;
! }
! 
! 
! /* Return 1 if SOURCE_TYPE can be safely widened to TARGET_TYPE.
     Handles array types and interfaces.  */
  
  int
*************** can_widen_reference_to (tree source_type
*** 376,381 ****
--- 491,518 ----
  
    if (source_type == target_type)
      return 1;
+ 
+   /* FIXME: This is very pessimistic, in that it checks everything,
+      even if we already know that the types are compatible.  If we're
+      to support full Java class loader semantics, we need this.
+      However, we could do something more optimal.  */
+   if (! flag_verify_invocations)
+     {
+       add_type_assertion (current_class, JV_ASSERT_TYPES_COMPATIBLE, 
+ 			  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.  */
+       return 1;
+     }
+ 
+   if (TYPE_DUMMY (source_type) || TYPE_DUMMY (target_type))
+     {
+       return 1;
+     }
    else
      {
        if (TYPE_ARRAY_P (source_type) || TYPE_ARRAY_P (target_type))
*************** can_widen_reference_to (tree source_type
*** 409,415 ****
  	  int source_depth = class_depth (source_type);
  	  int target_depth = class_depth (target_type);
  
! 	  /* class_depth can return a negative depth if an error occurred */
  	  if (source_depth < 0 || target_depth < 0)
  	    return 0;
  
--- 546,561 ----
  	  int source_depth = class_depth (source_type);
  	  int target_depth = class_depth (target_type);
  
! 	  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;
! 	    }
! 
!  	  /* class_depth can return a negative depth if an error occurred */
  	  if (source_depth < 0 || target_depth < 0)
  	    return 0;
  
*************** can_widen_reference_to (tree source_type
*** 417,437 ****
  	    {
  	      /* target_type is OK if source_type or source_type ancestors
  		 implement target_type. We handle multiple sub-interfaces  */
  
! 	      tree basetype_vec = TYPE_BINFO_BASETYPES (source_type);
! 	      int n = TREE_VEC_LENGTH (basetype_vec), i;
! 	      for (i=0 ; i < n; i++)
! 	        if (can_widen_reference_to 
! 		    (TREE_TYPE (TREE_VEC_ELT (basetype_vec, i)),
! 		     target_type))
  		  return 1;
! 	      if (n == 0)
  		return 0;
  	    }
  
  	  for ( ; source_depth > target_depth;  source_depth--) 
  	    {
! 	      source_type = TYPE_BINFO_BASETYPE (source_type, 0); 
  	    }
  	  return source_type == target_type;
  	}
--- 563,585 ----
  	    {
  	      /* target_type is OK if source_type or source_type ancestors
  		 implement target_type. We handle multiple sub-interfaces  */
+ 	      tree binfo, base_binfo;
+ 	      int i;
  
! 	      for (binfo = TYPE_BINFO (source_type), i = 0;
! 		   BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
! 	        if (can_widen_reference_to
! 		    (BINFO_TYPE (base_binfo), target_type))
  		  return 1;
! 	      
! 	      if (!i)
  		return 0;
  	    }
  
  	  for ( ; source_depth > target_depth;  source_depth--) 
  	    {
! 	      source_type
! 		= BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (source_type), 0));
  	    }
  	  return source_type == target_type;
  	}
*************** static void
*** 488,494 ****
  java_stack_swap (void)
  {
    tree type1, type2;
!   rtx temp;
    tree decl1, decl2;
  
    if (stack_pointer < 2
--- 636,642 ----
  java_stack_swap (void)
  {
    tree type1, type2;
!   tree temp;
    tree decl1, decl2;
  
    if (stack_pointer < 2
*************** java_stack_swap (void)
*** 502,511 ****
    flush_quick_stack ();
    decl1 = find_stack_slot (stack_pointer - 1, type1);
    decl2 = find_stack_slot (stack_pointer - 2, type2);
!   temp = copy_to_reg (DECL_RTL (decl1));
!   emit_move_insn (DECL_RTL (find_stack_slot (stack_pointer - 1, type2)), 
! 		  DECL_RTL (decl2));
!   emit_move_insn (DECL_RTL (find_stack_slot (stack_pointer - 2, type1)), temp);
    stack_type_map[stack_pointer - 1] = type2;
    stack_type_map[stack_pointer - 2] = type1;
  }
--- 650,664 ----
    flush_quick_stack ();
    decl1 = find_stack_slot (stack_pointer - 1, type1);
    decl2 = find_stack_slot (stack_pointer - 2, type2);
!   temp = build_decl (VAR_DECL, NULL_TREE, type1);
!   java_add_local_var (temp);
!   java_add_stmt (build2 (MODIFY_EXPR, type1, temp, decl1));
!   java_add_stmt (build2 (MODIFY_EXPR, type2, 
! 			 find_stack_slot (stack_pointer - 1, type2),
! 			 decl2));
!   java_add_stmt (build2 (MODIFY_EXPR, type1, 
! 			 find_stack_slot (stack_pointer - 2, type1),
! 			 temp));
    stack_type_map[stack_pointer - 1] = type2;
    stack_type_map[stack_pointer - 2] = type1;
  }
*************** java_stack_dup (int size, int offset)
*** 549,555 ****
  	{
  	  tree src_decl = find_stack_slot (src_index, type);
  	  tree dst_decl = find_stack_slot (dst_index, type);
! 	  emit_move_insn (DECL_RTL (dst_decl), DECL_RTL (src_decl));
  	  stack_type_map[dst_index] = type;
  	}
      }
--- 702,710 ----
  	{
  	  tree src_decl = find_stack_slot (src_index, type);
  	  tree dst_decl = find_stack_slot (dst_index, type);
! 
! 	  java_add_stmt 
! 	    (build2 (MODIFY_EXPR, TREE_TYPE (dst_decl), dst_decl, src_decl));
  	  stack_type_map[dst_index] = type;
  	}
      }
*************** build_java_athrow (tree node)
*** 563,575 ****
  {
    tree call;
  
!   call = build (CALL_EXPR,
! 		void_type_node,
! 		build_address_of (throw_node),
! 		build_tree_list (NULL_TREE, node),
! 		NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
!   expand_expr_stmt (call);
    java_stack_pop (stack_pointer);
  }
  
--- 718,730 ----
  {
    tree call;
  
!   call = build3 (CALL_EXPR,
! 		 void_type_node,
! 		 build_address_of (throw_node),
! 		 build_tree_list (NULL_TREE, node),
! 		 NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
!   java_add_stmt (call);
    java_stack_pop (stack_pointer);
  }
  
*************** build_java_jsr (int target_pc, int retur
*** 583,598 ****
    tree ret_label = fold (build1 (ADDR_EXPR, return_address_type_node, ret));
    push_value (ret_label);
    flush_quick_stack ();
!   emit_jump (label_rtx (where));
!   expand_label (ret);
!   if (instruction_bits [return_pc] & BCODE_VERIFIED)
!     load_type_state (ret);
  }
  
  static void
  build_java_ret (tree location)
  {
!   expand_computed_goto (location);
  }
   
  /* Implementation of operations on array: new, load, store, length */
--- 738,754 ----
    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));
! 
!   /* Do not need to emit the label here.  We noted the existence of the
!      label as a jump target in note_instructions; we'll emit the label
!      for real at the beginning of the expand_byte_code loop.  */
  }
  
  static void
  build_java_ret (tree location)
  {
!   java_add_stmt (build1 (GOTO_EXPR, void_type_node, location));
  }
   
  /* Implementation of operations on array: new, load, store, length */
*************** encode_newarray_type (tree type)
*** 645,653 ****
  static tree
  build_java_throw_out_of_bounds_exception (tree index)
  {
!   tree node = build (CALL_EXPR, int_type_node,
! 		     build_address_of (soft_badarrayindex_node), 
! 		     build_tree_list (NULL_TREE, index), NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;	/* Allows expansion within ANDIF */
    return (node);
  }
--- 801,809 ----
  static tree
  build_java_throw_out_of_bounds_exception (tree index)
  {
!   tree node = build3 (CALL_EXPR, int_type_node,
! 		      build_address_of (soft_badarrayindex_node), 
! 		      build_tree_list (NULL_TREE, index), NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;	/* Allows expansion within ANDIF */
    return (node);
  }
*************** build_java_array_length_access (tree nod
*** 662,687 ****
    tree array_type = TREE_TYPE (type);
    HOST_WIDE_INT length;
  
-   /* JVM spec: If the arrayref is null, the arraylength instruction
-      throws a NullPointerException.  The only way we could get a node
-      of type ptr_type_node at this point is `aconst_null; arraylength'
-      or something equivalent.  */
-   if (type == ptr_type_node)
-     return build (CALL_EXPR, int_type_node, 
- 		  build_address_of (soft_nullpointer_node),
- 		  NULL_TREE, NULL_TREE);
- 
    if (!is_array_type_p (type))
!     abort ();
  
    length = java_array_type_length (type);
    if (length >= 0)
!     return build_int_2 (length, 0);
  
!   node = build (COMPONENT_REF, int_type_node,
! 		build_java_indirect_ref (array_type, node,
! 					 flag_check_references),
! 		lookup_field (&array_type, get_identifier ("length")));
    IS_ARRAY_LENGTH_ACCESS (node) = 1;
    return node;
  }
--- 818,840 ----
    tree array_type = TREE_TYPE (type);
    HOST_WIDE_INT length;
  
    if (!is_array_type_p (type))
!     {
!       /* With the new verifier, we will see an ordinary pointer type
! 	 here.  In this case, we just use an arbitrary array type.  */
!       array_type = build_java_array_type (object_ptr_type_node, -1);
!       type = promote_type (array_type);
!     }
  
    length = java_array_type_length (type);
    if (length >= 0)
!     return build_int_cst (NULL_TREE, length);
  
!   node = build3 (COMPONENT_REF, int_type_node,
! 		 build_java_indirect_ref (array_type, node,
! 					  flag_check_references),
! 		 lookup_field (&array_type, get_identifier ("length")),
! 		 NULL_TREE);
    IS_ARRAY_LENGTH_ACCESS (node) = 1;
    return node;
  }
*************** java_check_reference (tree expr, int che
*** 696,707 ****
    if (!flag_syntax_only && check)
      {
        expr = save_expr (expr);
!       expr = build (COND_EXPR, TREE_TYPE (expr),
! 		    build (EQ_EXPR, boolean_type_node, expr, null_pointer_node),
! 		    build (CALL_EXPR, void_type_node, 
! 			   build_address_of (soft_nullpointer_node),
! 			   NULL_TREE, NULL_TREE),
! 		    expr);
      }
  
    return expr;
--- 849,861 ----
    if (!flag_syntax_only && check)
      {
        expr = save_expr (expr);
!       expr = build3 (COND_EXPR, TREE_TYPE (expr),
! 		     build2 (EQ_EXPR, boolean_type_node,
! 			     expr, null_pointer_node),
! 		     build3 (CALL_EXPR, void_type_node, 
! 			     build_address_of (soft_nullpointer_node),
! 			     NULL_TREE, NULL_TREE),
! 		     expr);
      }
  
    return expr;
*************** java_check_reference (tree expr, int che
*** 712,718 ****
  tree
  build_java_indirect_ref (tree type, tree expr, int check)
  {
!   return build1 (INDIRECT_REF, type, java_check_reference (expr, check));
  }
  
  /* Implement array indexing (either as l-value or r-value).
--- 866,875 ----
  tree
  build_java_indirect_ref (tree type, tree expr, int check)
  {
!   tree t;
!   t = java_check_reference (expr, check);
!   t = convert (build_pointer_type (type), t);
!   return build1 (INDIRECT_REF, type, t);
  }
  
  /* Implement array indexing (either as l-value or r-value).
*************** build_java_arrayaccess (tree array, tree
*** 728,733 ****
--- 885,897 ----
    tree ref;
    tree array_type = TREE_TYPE (TREE_TYPE (array));
  
+   if (!is_array_type_p (TREE_TYPE (array)))
+     {
+       /* With the new verifier, we will see an ordinary pointer type
+ 	 here.  In this case, we just use the correct array type.  */
+       array_type = build_java_array_type (type, -1);
+     }
+ 
    if (flag_bounds_check)
      {
        /* Generate:
*************** build_java_arrayaccess (tree array, tree
*** 736,750 ****
         * Note this is equivalent to and more efficient than:
         * INDEX < 0 || INDEX >= LEN && throw ... */
        tree test;
!       tree len = build_java_array_length_access (array);
!       TREE_TYPE (len) = unsigned_int_type_node;
!       test = fold (build (GE_EXPR, boolean_type_node, 
! 			       convert (unsigned_int_type_node, index),
! 			       len));
        if (! integer_zerop (test))
  	{
! 	  throw = build (TRUTH_ANDIF_EXPR, int_type_node, test,
! 			 build_java_throw_out_of_bounds_exception (index));
  	  /* allows expansion within COMPOUND */
  	  TREE_SIDE_EFFECTS( throw ) = 1;
  	}
--- 900,914 ----
         * Note this is equivalent to and more efficient than:
         * INDEX < 0 || INDEX >= LEN && throw ... */
        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_throw_out_of_bounds_exception (index));
  	  /* allows expansion within COMPOUND */
  	  TREE_SIDE_EFFECTS( throw ) = 1;
  	}
*************** build_java_arrayaccess (tree array, tree
*** 753,768 ****
    /* If checking bounds, wrap the index expr with a COMPOUND_EXPR in order
       to have the bounds check evaluated first. */
    if (throw != NULL_TREE)
!     index = build (COMPOUND_EXPR, int_type_node, throw, index);
   
    data_field = lookup_field (&array_type, get_identifier ("data"));
  
!   ref = build (COMPONENT_REF, TREE_TYPE (data_field),    
! 	       build_java_indirect_ref (array_type, array, 
! 					flag_check_references),
! 	       data_field);
    
!   node = build (ARRAY_REF, type, ref, index);
    return node;
  }
  
--- 917,932 ----
    /* If checking bounds, wrap the index expr with a COMPOUND_EXPR in order
       to have the bounds check evaluated first. */
    if (throw != NULL_TREE)
!     index = build2 (COMPOUND_EXPR, int_type_node, throw, index);
   
    data_field = lookup_field (&array_type, get_identifier ("data"));
  
!   ref = build3 (COMPONENT_REF, TREE_TYPE (data_field),    
! 		build_java_indirect_ref (array_type, array, 
! 					 flag_check_references),
! 		data_field, NULL_TREE);
    
!   node = build4 (ARRAY_REF, type, ref, index, NULL_TREE, NULL_TREE);
    return node;
  }
  
*************** build_java_arraystore_check (tree array,
*** 777,787 ****
    tree array_type_p = TREE_TYPE (array);
    tree object_type = TYPE_NAME (TREE_TYPE (TREE_TYPE (object)));
  
!   if (! is_array_type_p (array_type_p))
!     abort ();
  
!   /* Get the TYPE_DECL for ARRAY's element type. */
!   element_type = TYPE_NAME (TREE_TYPE (TREE_TYPE (TREE_TYPE (array_type_p))));
  
    if (TREE_CODE (element_type) != TYPE_DECL   
        || TREE_CODE (object_type) != TYPE_DECL)
--- 941,961 ----
    tree array_type_p = TREE_TYPE (array);
    tree object_type = TYPE_NAME (TREE_TYPE (TREE_TYPE (object)));
  
!   if (! flag_verify_invocations)
!     {
!       /* With the new verifier, we don't track precise types.  FIXME:
! 	 performance regression here.  */
!       element_type = TYPE_NAME (object_type_node);
!     }
!   else
!     {
!       if (! is_array_type_p (array_type_p))
! 	abort ();
  
!       /* Get the TYPE_DECL for ARRAY's element type. */
!       element_type
! 	= TYPE_NAME (TREE_TYPE (TREE_TYPE (TREE_TYPE (array_type_p))));
!     }
  
    if (TREE_CODE (element_type) != TYPE_DECL   
        || TREE_CODE (object_type) != TYPE_DECL)
*************** build_java_arraystore_check (tree array,
*** 790,802 ****
    if (!flag_store_check)
      return build1 (NOP_EXPR, array_type_p, array);
  
!   /* No check is needed if the element type is final or is itself an array.  
!      Also check that element_type matches object_type, since in the bytecode 
!      compilation case element_type may be the actual element type of the array
!      rather than its declared type. */
    if (element_type == object_type
!       && (TYPE_ARRAY_P (TREE_TYPE (element_type))
! 	  || CLASS_FINAL (element_type)))
      return build1 (NOP_EXPR, array_type_p, array);
    
    /* OBJECT might be wrapped by a SAVE_EXPR. */
--- 964,977 ----
    if (!flag_store_check)
      return build1 (NOP_EXPR, array_type_p, array);
  
!   /* No check is needed if the element type is final.  Also check that
!      element_type matches object_type, since in the bytecode
!      compilation case element_type may be the actual element type of
!      the array rather than its declared type.  However, if we're doing
!      indirect dispatch, we can't do the `final' optimization.  */
    if (element_type == object_type
!       && ! flag_indirect_dispatch
!       && CLASS_FINAL (element_type))
      return build1 (NOP_EXPR, array_type_p, array);
    
    /* OBJECT might be wrapped by a SAVE_EXPR. */
*************** build_java_arraystore_check (tree array,
*** 824,834 ****
      }
  
    /* Build an invocation of _Jv_CheckArrayStore */
!   check = build (CALL_EXPR, void_type_node,
! 		 build_address_of (soft_checkarraystore_node),
! 		 tree_cons (NULL_TREE, array,
! 		 	    build_tree_list (NULL_TREE, object)),
! 		 NULL_TREE);
    TREE_SIDE_EFFECTS (check) = 1;
  
    return check;
--- 999,1009 ----
      }
  
    /* Build an invocation of _Jv_CheckArrayStore */
!   check = build3 (CALL_EXPR, void_type_node,
! 		  build_address_of (soft_checkarraystore_node),
! 		  tree_cons (NULL_TREE, array,
! 			     build_tree_list (NULL_TREE, object)),
! 		  NULL_TREE);
    TREE_SIDE_EFFECTS (check) = 1;
  
    return check;
*************** build_java_arraystore_check (tree array,
*** 838,861 ****
     ARRAY_NODE. This function is used to retrieve something less vague than
     a pointer type when indexing the first dimension of something like [[<t>.
     May return a corrected type, if necessary, otherwise INDEXED_TYPE is
!    return unchanged.
!    As a side effect, it also makes sure that ARRAY_NODE is an array.  */
  
  static tree
  build_java_check_indexed_type (tree array_node, tree indexed_type)
  {
    tree elt_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 )
--- 1013,1042 ----
     ARRAY_NODE. This function is used to retrieve something less vague than
     a pointer type when indexing the first dimension of something like [[<t>.
     May return a corrected type, if necessary, otherwise INDEXED_TYPE is
!    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 )
*************** build_newarray (int atype_value, tree le
*** 883,898 ****
       and save the runtime some work. However, the bytecode generator
       expects to find the type_code int here. */
    if (flag_emit_class_files)
!     type_arg = build_int_2 (atype_value, 0);
    else
      type_arg = build_class_ref (prim_type);
  
!   return build (CALL_EXPR, promote_type (type),
! 		build_address_of (soft_newarray_node),
! 		tree_cons (NULL_TREE, 
! 			   type_arg,
! 			   build_tree_list (NULL_TREE, length)),
! 		NULL_TREE);
  }
  
  /* Generates anewarray from a given CLASS_TYPE. Gets from the stack the size
--- 1064,1079 ----
       and save the runtime some work. However, the bytecode generator
       expects to find the type_code int here. */
    if (flag_emit_class_files)
!     type_arg = build_int_cst (NULL_TREE, atype_value);
    else
      type_arg = build_class_ref (prim_type);
  
!   return build3 (CALL_EXPR, promote_type (type),
! 		 build_address_of (soft_newarray_node),
! 		 tree_cons (NULL_TREE, 
! 			    type_arg,
! 			    build_tree_list (NULL_TREE, length)),
! 		 NULL_TREE);
  }
  
  /* Generates anewarray from a given CLASS_TYPE. Gets from the stack the size
*************** build_anewarray (tree class_type, tree l
*** 906,918 ****
  			     host_integerp (length, 0)
  			     ? tree_low_cst (length, 0) : -1);
  
!   return build (CALL_EXPR, promote_type (type),
! 		build_address_of (soft_anewarray_node),
! 		tree_cons (NULL_TREE, length,
! 			   tree_cons (NULL_TREE, build_class_ref (class_type),
! 				      build_tree_list (NULL_TREE,
! 						       null_pointer_node))),
! 		NULL_TREE);
  }
  
  /* Return a node the evaluates 'new TYPE[LENGTH]'. */
--- 1087,1099 ----
  			     host_integerp (length, 0)
  			     ? tree_low_cst (length, 0) : -1);
  
!   return build3 (CALL_EXPR, promote_type (type),
! 		 build_address_of (soft_anewarray_node),
! 		 tree_cons (NULL_TREE, length,
! 			    tree_cons (NULL_TREE, build_class_ref (class_type),
! 				       build_tree_list (NULL_TREE,
! 							null_pointer_node))),
! 		 NULL_TREE);
  }
  
  /* Return a node the evaluates 'new TYPE[LENGTH]'. */
*************** expand_java_multianewarray (tree class_t
*** 939,951 ****
    for( i = 0; i < ndim; i++ )
      args = tree_cons (NULL_TREE, pop_value (int_type_node), args);
  
!   push_value (build (CALL_EXPR,
! 		     promote_type (class_type),
! 		     build_address_of (soft_multianewarray_node),
! 		     tree_cons (NULL_TREE, build_class_ref (class_type),
! 				tree_cons (NULL_TREE, 
! 					   build_int_2 (ndim, 0), args )),
! 		     NULL_TREE));
  }
  
  /*  ARRAY[INDEX] <- RHS. build_java_check_indexed_type makes sure that
--- 1120,1133 ----
    for( i = 0; i < ndim; i++ )
      args = tree_cons (NULL_TREE, pop_value (int_type_node), args);
  
!   push_value (build3 (CALL_EXPR,
! 		      promote_type (class_type),
! 		      build_address_of (soft_multianewarray_node),
! 		      tree_cons (NULL_TREE, build_class_ref (class_type),
! 				 tree_cons (NULL_TREE, 
! 					    build_int_cst (NULL_TREE, ndim),
! 					    args)),
! 		      NULL_TREE));
  }
  
  /*  ARRAY[INDEX] <- RHS. build_java_check_indexed_type makes sure that
*************** expand_java_arraystore (tree rhs_type_no
*** 965,971 ****
  				 && TYPE_PRECISION (rhs_type_node) <= 32) ? 
  				 int_type_node : rhs_type_node);
    tree index = pop_value (int_type_node);
!   tree array = pop_value (ptr_type_node);
  
    rhs_type_node    = build_java_check_indexed_type (array, rhs_type_node);
  
--- 1147,1171 ----
  				 && TYPE_PRECISION (rhs_type_node) <= 32) ? 
  				 int_type_node : rhs_type_node);
    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);
  
*************** expand_java_arraystore (tree rhs_type_no
*** 977,989 ****
    if (TREE_CODE (rhs_type_node) == POINTER_TYPE)
      {
        tree check = build_java_arraystore_check (array, rhs_node);
!       expand_expr_stmt (check);
      }
    
!   expand_assignment (build_java_arrayaccess (array,
! 					     rhs_type_node,
! 					     index),
! 		     rhs_node, 0);
  }
  
  /* Expand the evaluation of ARRAY[INDEX]. build_java_check_indexed_type makes 
--- 1177,1187 ----
    if (TREE_CODE (rhs_type_node) == POINTER_TYPE)
      {
        tree check = build_java_arraystore_check (array, rhs_node);
!       java_add_stmt (check);
      }
    
!   array = build_java_arrayaccess (array, rhs_type_node, index);
!   java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (array), array, rhs_node));  
  }
  
  /* Expand the evaluation of ARRAY[INDEX]. build_java_check_indexed_type makes 
*************** expand_java_arraystore (tree rhs_type_no
*** 994,1022 ****
  */
  
  static void
! expand_java_arrayload (tree lhs_type_node )
  {
    tree load_node;
    tree index_node = pop_value (int_type_node);
!   tree array_node = pop_value (ptr_type_node);
  
!   index_node = save_expr (index_node);
!   array_node = save_expr (array_node);
!   
!   if (TREE_TYPE (array_node) == ptr_type_node)
!     /* The only way we could get a node of type ptr_type_node at this
!        point is `aconst_null; arraylength' or something equivalent, so
!        unconditionally throw NullPointerException.  */    
!     load_node = build (CALL_EXPR, lhs_type_node, 
! 		       build_address_of (soft_nullpointer_node),
! 		       NULL_TREE, NULL_TREE);
!   else
      {
!       lhs_type_node = build_java_check_indexed_type (array_node, lhs_type_node);
!       load_node = build_java_arrayaccess (array_node,
! 					  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);
--- 1192,1230 ----
  */
  
  static void
! expand_java_arrayload (tree lhs_type_node)
  {
    tree load_node;
    tree index_node = pop_value (int_type_node);
!   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);
+ 
+   lhs_type_node = build_java_check_indexed_type (array_node,
+ 						 lhs_type_node);
+   load_node = build_java_arrayaccess (array_node,
+ 				      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_java_array_length (void)
*** 1040,1050 ****
  static tree
  build_java_monitor (tree call, tree object)
  {
!   return (build (CALL_EXPR,
  		 void_type_node,
  		 build_address_of (call),
  		 build_tree_list (NULL_TREE, object),
! 		 NULL_TREE));
  }
  
  /* Emit code for one of the PUSHC instructions. */
--- 1248,1258 ----
  static tree
  build_java_monitor (tree call, tree object)
  {
!   return build3 (CALL_EXPR,
  		 void_type_node,
  		 build_address_of (call),
  		 build_tree_list (NULL_TREE, object),
! 		 NULL_TREE);
  }
  
  /* Emit code for one of the PUSHC instructions. */
*************** expand_java_pushc (int ival, tree type)
*** 1056,1065 ****
    if (type == ptr_type_node && ival == 0)
      value = null_pointer_node;
    else if (type == int_type_node || type == long_type_node)
!     {
!       value = build_int_2 (ival, ival < 0 ? -1 : 0);
!       TREE_TYPE (value) = type;
!     }
    else if (type == float_type_node || type == double_type_node)
      {
        REAL_VALUE_TYPE x;
--- 1264,1270 ----
    if (type == ptr_type_node && ival == 0)
      value = null_pointer_node;
    else if (type == int_type_node || type == long_type_node)
!     value = build_int_cst (type, ival);
    else if (type == float_type_node || type == double_type_node)
      {
        REAL_VALUE_TYPE x;
*************** static void
*** 1076,1087 ****
  expand_java_return (tree type)
  {
    if (type == void_type_node)
!     expand_null_return ();
    else
      {
        tree retval = pop_value (type);
        tree res = DECL_RESULT (current_function_decl);
!       retval = build (MODIFY_EXPR, TREE_TYPE (res), res, retval);
  
        /* Handle the situation where the native integer type is smaller
  	 than the JVM integer. It can happen for many cross compilers.
--- 1281,1292 ----
  expand_java_return (tree type)
  {
    if (type == void_type_node)
!     java_add_stmt (build1 (RETURN_EXPR, void_type_node, NULL));   
    else
      {
        tree retval = pop_value (type);
        tree res = DECL_RESULT (current_function_decl);
!       retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, retval);
  
        /* Handle the situation where the native integer type is smaller
  	 than the JVM integer. It can happen for many cross compilers.
*************** expand_java_return (tree type)
*** 1093,1099 ****
  	retval = build1(NOP_EXPR, TREE_TYPE(res), retval);
        
        TREE_SIDE_EFFECTS (retval) = 1;
!       expand_return (retval);
      }
  }
  
--- 1298,1304 ----
  	retval = build1(NOP_EXPR, TREE_TYPE(res), retval);
        
        TREE_SIDE_EFFECTS (retval) = 1;
!       java_add_stmt (build1 (RETURN_EXPR, TREE_TYPE (retval), retval));
      }
  }
  
*************** expand_load_internal (int index, tree ty
*** 1110,1122 ****
       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);
!   DECL_CONTEXT (copy) = current_function_decl;
!   layout_decl (copy, 0);
!   DECL_REGISTER (copy) = 1;
!   expand_decl (copy);
!   MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (copy);
!   DECL_INITIAL (copy) = var;
!   expand_decl_init (copy);
    push_value (copy);
  }
  
--- 1315,1326 ----
       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);
!   java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (var), copy, var));
!   
    push_value (copy);
  }
  
*************** build_address_of (tree value)
*** 1126,1132 ****
    return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (value)), value);
  }
  
! bool class_has_finalize_method (tree type)
  {
    tree super = CLASSTYPE_SUPER (type);
  
--- 1330,1337 ----
    return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (value)), value);
  }
  
! bool
! class_has_finalize_method (tree type)
  {
    tree super = CLASSTYPE_SUPER (type);
  
*************** bool class_has_finalize_method (tree typ
*** 1137,1142 ****
--- 1342,1360 ----
      return HAS_FINALIZER_P (type) || class_has_finalize_method (super);
  }
  
+ tree
+ java_create_object (tree type)
+ {
+   tree alloc_node = (class_has_finalize_method (type) 
+ 		     ? alloc_object_node
+ 		     : alloc_no_finalizer_node);
+   
+   return build (CALL_EXPR, promote_type (type),
+ 		build_address_of (alloc_node),
+ 		build_tree_list (NULL_TREE, build_class_ref (type)),
+ 		NULL_TREE);
+ }
+ 
  static void
  expand_java_NEW (tree type)
  {
*************** expand_java_NEW (tree type)
*** 1147,1158 ****
    if (! CLASS_LOADED_P (type))
      load_class (type, 1);
    safe_layout_class (type);
!   push_value (build (CALL_EXPR, promote_type (type),
! 		     build_address_of (alloc_node),
! 		     tree_cons (NULL_TREE, build_class_ref (type),
! 				build_tree_list (NULL_TREE,
! 						 size_in_bytes (type))),
! 		     NULL_TREE));
  }
  
  /* This returns an expression which will extract the class of an
--- 1365,1374 ----
    if (! CLASS_LOADED_P (type))
      load_class (type, 1);
    safe_layout_class (type);
!   push_value (build3 (CALL_EXPR, promote_type (type),
! 		      build_address_of (alloc_node),
! 		      build_tree_list (NULL_TREE, build_class_ref (type)),
! 		      NULL_TREE));
  }
  
  /* This returns an expression which will extract the class of an
*************** build_get_class (tree value)
*** 1164,1176 ****
    tree class_field = lookup_field (&dtable_type, get_identifier ("class"));
    tree vtable_field = lookup_field (&object_type_node,
  				    get_identifier ("vtable"));
!   return build (COMPONENT_REF, class_ptr_type,
! 		build1 (INDIRECT_REF, dtable_type,
! 			build (COMPONENT_REF, dtable_ptr_type,
! 			       build_java_indirect_ref (object_type_node, value,
! 							flag_check_references),
! 			       vtable_field)),
! 		class_field);
  }
  
  /* This builds the tree representation of the `instanceof' operator.
--- 1380,1392 ----
    tree class_field = lookup_field (&dtable_type, get_identifier ("class"));
    tree vtable_field = lookup_field (&object_type_node,
  				    get_identifier ("vtable"));
!   tree tmp = build3 (COMPONENT_REF, dtable_ptr_type,
! 		     build_java_indirect_ref (object_type_node, value,
! 					      flag_check_references),
! 		     vtable_field, NULL_TREE);
!   return build3 (COMPONENT_REF, class_ptr_type,
! 		 build1 (INDIRECT_REF, dtable_type, tmp),
! 		 class_field, NULL_TREE);
  }
  
  /* This builds the tree representation of the `instanceof' operator.
*************** build_instanceof (tree value, tree type)
*** 1202,1210 ****
        /* Anything except `null' is an instance of Object.  Likewise,
  	 if the object is known to be an instance of the class, then
  	 we only need to check for `null'.  */
!       expr = build (NE_EXPR, itype, value, null_pointer_node);
      }
!   else if (! TYPE_ARRAY_P (type)
  	   && ! TYPE_ARRAY_P (valtype)
  	   && DECL_P (klass) && DECL_P (valclass)
  	   && ! CLASS_INTERFACE (valclass)
--- 1418,1427 ----
        /* Anything except `null' is an instance of Object.  Likewise,
  	 if the object is known to be an instance of the class, then
  	 we only need to check for `null'.  */
!       expr = build2 (NE_EXPR, itype, value, null_pointer_node);
      }
!   else if (flag_verify_invocations
! 	   && ! TYPE_ARRAY_P (type)
  	   && ! TYPE_ARRAY_P (valtype)
  	   && DECL_P (klass) && DECL_P (valclass)
  	   && ! CLASS_INTERFACE (valclass)
*************** build_instanceof (tree value, tree type)
*** 1220,1240 ****
    else if (DECL_P (klass) && CLASS_FINAL (klass))
      {
        tree save = save_expr (value);
!       expr = build (COND_EXPR, itype,
! 		    save,
! 		    build (EQ_EXPR, itype,
! 			   build_get_class (save),
! 			   build_class_ref (type)),
! 		    boolean_false_node);
      }
    else
      {
!       expr = build (CALL_EXPR, itype,
! 		    build_address_of (soft_instanceof_node),
! 		    tree_cons (NULL_TREE, value,
! 			       build_tree_list (NULL_TREE,
! 						build_class_ref (type))),
! 		    NULL_TREE);
      }
    TREE_SIDE_EFFECTS (expr) = TREE_SIDE_EFFECTS (value);
    return expr;
--- 1437,1458 ----
    else if (DECL_P (klass) && CLASS_FINAL (klass))
      {
        tree save = save_expr (value);
!       expr = build3 (COND_EXPR, itype,
! 		     build2 (NE_EXPR, boolean_type_node,
! 			     save, null_pointer_node),
! 		     build2 (EQ_EXPR, itype,
! 			     build_get_class (save),
! 			     build_class_ref (type)),
! 		     boolean_false_node);
      }
    else
      {
!       expr = build3 (CALL_EXPR, itype,
! 		     build_address_of (soft_instanceof_node),
! 		     tree_cons (NULL_TREE, value,
! 				build_tree_list (NULL_TREE,
! 						 build_class_ref (type))),
! 		     NULL_TREE);
      }
    TREE_SIDE_EFFECTS (expr) = TREE_SIDE_EFFECTS (value);
    return expr;
*************** static void
*** 1252,1279 ****
  expand_java_CHECKCAST (tree type)
  {
    tree value = pop_value (ptr_type_node);
!   value = build (CALL_EXPR, promote_type (type),
! 		 build_address_of (soft_checkcast_node),
! 		 tree_cons (NULL_TREE, build_class_ref (type),
! 			    build_tree_list (NULL_TREE, value)),
! 		 NULL_TREE);
    push_value (value);
  }
  
  static void
  expand_iinc (unsigned int local_var_index, int ival, int pc)
  {
!     tree local_var, res;
!     tree constant_value;
  
!     flush_quick_stack ();
!     local_var = find_local_variable (local_var_index, int_type_node, pc);
!     constant_value = build_int_2 (ival, ival < 0 ? -1 : 0);
!     res = fold (build (PLUS_EXPR, int_type_node, local_var, constant_value));
!     expand_assignment (local_var, res, 0);
  }
  
!       
  tree
  build_java_soft_divmod (enum tree_code op, tree type, tree op1, tree op2)
  {
--- 1470,1498 ----
  expand_java_CHECKCAST (tree type)
  {
    tree value = pop_value (ptr_type_node);
!   value = build3 (CALL_EXPR, promote_type (type),
! 		  build_address_of (soft_checkcast_node),
! 		  tree_cons (NULL_TREE, build_class_ref (type),
! 			     build_tree_list (NULL_TREE, value)),
! 		  NULL_TREE);
    push_value (value);
  }
  
  static void
  expand_iinc (unsigned int local_var_index, int ival, int pc)
  {
!   tree local_var, res;
!   tree constant_value;
  
!   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);
  }
  
! 
  tree
  build_java_soft_divmod (enum tree_code op, tree type, tree op1, tree op2)
  {
*************** build_java_soft_divmod (enum tree_code o
*** 1313,1323 ****
    if (! call)
      abort ();
  		  
!   call = build (CALL_EXPR, type,
! 		build_address_of (call),
! 		tree_cons (NULL_TREE, arg1,
! 			   build_tree_list (NULL_TREE, arg2)),
! 		NULL_TREE);
  	  
    return call;
  }
--- 1532,1542 ----
    if (! call)
      abort ();
  		  
!   call = build3 (CALL_EXPR, type,
! 		 build_address_of (call),
! 		 tree_cons (NULL_TREE, arg1,
! 			    build_tree_list (NULL_TREE, arg2)),
! 		 NULL_TREE);
  	  
    return call;
  }
*************** build_java_binop (enum tree_code op, tre
*** 1337,1373 ****
        }
      case LSHIFT_EXPR:
      case RSHIFT_EXPR:
!       mask = build_int_2 (TYPE_PRECISION (TREE_TYPE (arg1)) - 1, 0);
!       arg2 = fold (build (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 ( build (op == COMPARE_L_EXPR ? GT_EXPR : LT_EXPR,
  				    boolean_type_node, arg1, arg2));
! 	tree ifexp2 = fold ( build (EQ_EXPR, boolean_type_node, arg1, arg2));
! 	tree second_compare = fold (build (COND_EXPR, int_type_node,
! 					   ifexp2, integer_zero_node,
! 					   op == COMPARE_L_EXPR
! 					   ? integer_minus_one_node
! 					   : integer_one_node));
! 	return fold (build (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 ( build (LT_EXPR, boolean_type_node, arg1, arg2));
! 	tree ifexp2 = fold ( build (GT_EXPR, boolean_type_node, arg1, arg2));
! 	tree second_compare = fold ( build (COND_EXPR, int_type_node,
  					    ifexp2, integer_one_node,
  					    integer_zero_node));
! 	return fold (build (COND_EXPR, int_type_node,
! 			    ifexp1, integer_minus_one_node, second_compare));
        }      
      case TRUNC_DIV_EXPR:
      case TRUNC_MOD_EXPR:
--- 1556,1593 ----
        }
      case LSHIFT_EXPR:
      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
*** 1380,1390 ****
  	      arg1 = convert (double_type_node, arg1);
  	      arg2 = convert (double_type_node, arg2);
  	    }
! 	  call = build (CALL_EXPR, double_type_node,
! 			build_address_of (soft_fmod_node),
! 			tree_cons (NULL_TREE, arg1,
! 				   build_tree_list (NULL_TREE, arg2)),
! 			NULL_TREE);
  	  if (type != double_type_node)
  	    call = convert (type, call);
  	  return call;
--- 1600,1610 ----
  	      arg1 = convert (double_type_node, arg1);
  	      arg2 = convert (double_type_node, arg2);
  	    }
! 	  call = build3 (CALL_EXPR, double_type_node,
! 			 build_address_of (soft_fmod_node),
! 			 tree_cons (NULL_TREE, arg1,
! 				    build_tree_list (NULL_TREE, arg2)),
! 			 NULL_TREE);
  	  if (type != double_type_node)
  	    call = convert (type, call);
  	  return call;
*************** build_java_binop (enum tree_code op, tre
*** 1398,1404 ****
        break;
      default:  ;
      }
!   return fold (build (op, type, arg1, arg2));
  }
  
  static void
--- 1618,1624 ----
        break;
      default:  ;
      }
!   return fold (build2 (op, type, arg1, arg2));
  }
  
  static void
*************** lookup_field (tree *typep, tree name)
*** 1441,1461 ****
      }
    do
      {
!       tree field, basetype_vec;
        tree save_field;
!       int n, i;
  
        for (field = TYPE_FIELDS (*typep); field; field = TREE_CHAIN (field))
  	if (DECL_NAME (field) == name)
  	  return field;
  
        /* Process implemented interfaces. */
-       basetype_vec = TYPE_BINFO_BASETYPES (*typep);
-       n = TREE_VEC_LENGTH (basetype_vec);
        save_field = NULL_TREE;
!       for (i = 0; i < n; i++)
  	{
! 	  tree t = BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i));
  	  if ((field = lookup_field (&t, name)))
  	    {
  	      if (save_field == field)
--- 1661,1680 ----
      }
    do
      {
!       tree field, binfo, base_binfo;
        tree save_field;
!       int i;
  
        for (field = TYPE_FIELDS (*typep); field; field = TREE_CHAIN (field))
  	if (DECL_NAME (field) == name)
  	  return field;
  
        /* Process implemented interfaces. */
        save_field = NULL_TREE;
!       for (binfo = TYPE_BINFO (*typep), i = 0;
! 	   BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
  	{
! 	  tree t = BINFO_TYPE (base_binfo);
  	  if ((field = lookup_field (&t, name)))
  	    {
  	      if (save_field == field)
*************** lookup_field (tree *typep, tree name)
*** 1466,1472 ****
  		{
  		  tree i1 = DECL_CONTEXT (save_field);
  		  tree i2 = DECL_CONTEXT (field);
! 		  error ("reference `%s' is ambiguous: appears in interface `%s' and interface `%s'",
  			 IDENTIFIER_POINTER (name),
  			 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (i1))),
  			 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (i2))));
--- 1685,1691 ----
  		{
  		  tree i1 = DECL_CONTEXT (save_field);
  		  tree i2 = DECL_CONTEXT (field);
! 		  error ("reference %qs is ambiguous: appears in interface %qs and interface %qs",
  			 IDENTIFIER_POINTER (name),
  			 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (i1))),
  			 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (i2))));
*************** build_field_ref (tree self_value, tree s
*** 1494,1500 ****
    tree field_decl = lookup_field (&base_class, name);
    if (field_decl == NULL_TREE)
      {
!       error ("field `%s' not found", IDENTIFIER_POINTER (name));
        return error_mark_node;
      }
    if (self_value == NULL_TREE)
--- 1713,1719 ----
    tree field_decl = lookup_field (&base_class, name);
    if (field_decl == NULL_TREE)
      {
!       error ("field %qs not found", IDENTIFIER_POINTER (name));
        return error_mark_node;
      }
    if (self_value == NULL_TREE)
*************** build_field_ref (tree self_value, tree s
*** 1510,1541 ****
        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_indirect_dispatch
! 	  && output_class != self_class)
! 	/* FIXME: output_class != self_class is not exactly the right
! 	   test.  What we really want to know is whether self_class is
! 	   in the same translation unit as output_class.  If it is,
! 	   we can make a direct reference.  */
  	{
! 	  tree otable_index =
! 	    build_int_2 (get_symbol_table_index 
! 			 (field_decl, &TYPE_OTABLE_METHODS (output_class)), 0);
! 	  tree field_offset = 
! 	    build (ARRAY_REF, integer_type_node, TYPE_OTABLE_DECL (output_class), 
! 		   otable_index);
  	  tree address;
  	  field_offset = fold (convert (sizetype, field_offset));
  	  address 
! 	    = fold (build (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 (build (COMPONENT_REF, TREE_TYPE (field_decl),
! 			  self_value, field_decl));
      }
  }
  
--- 1729,1763 ----
        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 
! 			     (field_decl, &TYPE_OTABLE_METHODS (output_class)));
! 	  tree field_offset
! 	    = build4 (ARRAY_REF, integer_type_node,
! 		      TYPE_OTABLE_DECL (output_class), otable_index,
! 		      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));
      }
  }
  
*************** lookup_label (int pc)
*** 1553,1559 ****
        /* The type of the address of a label is return_address_type_node. */
        tree decl = create_label_decl (name);
        LABEL_PC (decl) = pc;
-       label_rtx (decl);
        return pushdecl (decl);
      }
  }
--- 1775,1780 ----
*************** expand_compare (enum tree_code condition
*** 1600,1609 ****
  		int target_pc)
  {
    tree target = lookup_label (target_pc);
!   tree cond = fold (build (condition, boolean_type_node, value1, value2));
!   expand_start_cond (java_truthvalue_conversion (cond), 0);
!   expand_goto (target);
!   expand_end_cond ();
  }
  
  /* Emit code for a TEST-type opcode. */
--- 1821,1831 ----
  		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), 
! 	     build_java_empty_stmt ()));
  }
  
  /* Emit code for a TEST-type opcode. */
*************** expand_java_goto (int target_pc)
*** 1637,1668 ****
  {
    tree target_label = lookup_label (target_pc);
    flush_quick_stack ();
!   expand_goto (target_label);
  }
  
! #if 0
! static void
! expand_java_call (int target_pc, int return_address)
!      int target_pc, return_address;
  {
!   tree target_label = lookup_label (target_pc);
!   tree value = build_int_2 (return_address, return_address < 0 ? -1 : 0);
!   push_value (value);
    flush_quick_stack ();
!   expand_goto (target_label);
  }
  
  static void
! expand_java_ret (tree return_address ATTRIBUTE_UNUSED)
  {
!   warning ("ret instruction not implemented");
! #if 0
!   tree target_label = lookup_label (target_pc);
!   flush_quick_stack ();
!   expand_goto (target_label);
! #endif
  }
- #endif
  
  static tree
  pop_arguments (tree arg_types)
--- 1859,1901 ----
  {
    tree target_label = lookup_label (target_pc);
    flush_quick_stack ();
!   java_add_stmt (build1 (GOTO_EXPR, void_type_node, target_label));
  }
  
! static tree
! expand_java_switch (tree selector, int default_pc)
  {
!   tree switch_expr, x;
! 
    flush_quick_stack ();
!   switch_expr = build3 (SWITCH_EXPR, TREE_TYPE (selector), selector,
! 			NULL_TREE, NULL_TREE);
!   java_add_stmt (switch_expr);
! 
!   x = build3 (CASE_LABEL_EXPR, void_type_node, NULL_TREE, NULL_TREE,
! 	      create_artificial_label ());
!   append_to_statement_list (x, &SWITCH_BODY (switch_expr));
! 
!   x = build1 (GOTO_EXPR, void_type_node, lookup_label (default_pc));
!   append_to_statement_list (x, &SWITCH_BODY (switch_expr));
! 
!   return switch_expr;
  }
  
  static void
! expand_java_add_case (tree switch_expr, int match, int target_pc)
  {
!   tree value, x;
! 
!   value = build_int_cst (TREE_TYPE (switch_expr), match);
!   
!   x = build3 (CASE_LABEL_EXPR, void_type_node, value, NULL_TREE,
! 	      create_artificial_label ());
!   append_to_statement_list (x, &SWITCH_BODY (switch_expr));
! 
!   x = build1 (GOTO_EXPR, void_type_node, lookup_label (target_pc));
!   append_to_statement_list (x, &SWITCH_BODY (switch_expr));
  }
  
  static tree
  pop_arguments (tree arg_types)
*************** pop_arguments (tree arg_types)
*** 1674,1688 ****
        tree tail = pop_arguments (TREE_CHAIN (arg_types));
        tree type = TREE_VALUE (arg_types);
        tree arg = pop_value (type);
!       if (PROMOTE_PROTOTYPES
! 	  && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)
! 	  && INTEGRAL_TYPE_P (type))
  	arg = convert (integer_type_node, arg);
        return tree_cons (NULL_TREE, arg, tail);
      }
    abort ();
  }
  
  /* Build an expression to initialize the class CLAS.
     if EXPR is non-NULL, returns an expression to first call the initializer
     (if it is needed) and then calls EXPR. */
--- 1907,1962 ----
        tree tail = pop_arguments (TREE_CHAIN (arg_types));
        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)
! 	       && INTEGRAL_TYPE_P (type))
  	arg = convert (integer_type_node, arg);
        return tree_cons (NULL_TREE, arg, tail);
      }
    abort ();
  }
  
+ /* Attach to PTR (a block) the declaration found in ENTRY. */
+ 
+ int
+ attach_init_test_initialization_flags (void **entry, void *ptr)
+ {
+   tree block = (tree)ptr;
+   struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
+ 
+   if (block != error_mark_node)
+     {
+       if (TREE_CODE (block) == BIND_EXPR)
+         {
+ 	  tree body = BIND_EXPR_BODY (block);
+ 	  TREE_CHAIN (ite->value) = BIND_EXPR_VARS (block);
+ 	  BIND_EXPR_VARS (block) = ite->value;
+ 	  body = build2 (COMPOUND_EXPR, void_type_node,
+ 			 build1 (DECL_EXPR, void_type_node, ite->value), body);
+ 	  BIND_EXPR_BODY (block) = body;
+ 	}
+       else
+ 	{
+ 	  tree body = BLOCK_SUBBLOCKS (block);
+ 	  TREE_CHAIN (ite->value) = BLOCK_EXPR_DECLS (block);
+ 	  BLOCK_EXPR_DECLS (block) = ite->value;
+ 	  body = build2 (COMPOUND_EXPR, void_type_node,
+ 			 build1 (DECL_EXPR, void_type_node, ite->value), body);
+ 	  BLOCK_SUBBLOCKS (block) = body;
+         }
+       
+     }
+   return true;
+ }
+ 
  /* Build an expression to initialize the class CLAS.
     if EXPR is non-NULL, returns an expression to first call the initializer
     (if it is needed) and then calls EXPR. */
*************** build_class_init (tree clas, tree expr)
*** 1703,1717 ****
  
    if (always_initialize_class_p)
      {
!       init = build (CALL_EXPR, void_type_node,
! 		    build_address_of (soft_initclass_node),
! 		    build_tree_list (NULL_TREE, build_class_ref (clas)),
! 		    NULL_TREE);
        TREE_SIDE_EFFECTS (init) = 1;
      }
    else
      {
        tree *init_test_decl;
        init_test_decl = java_treetreehash_new
  	(DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), clas);
  
--- 1977,1992 ----
  
    if (always_initialize_class_p)
      {
!       init = build3 (CALL_EXPR, void_type_node,
! 		     build_address_of (soft_initclass_node),
! 		     build_tree_list (NULL_TREE, build_class_ref (clas)),
! 		     NULL_TREE);
        TREE_SIDE_EFFECTS (init) = 1;
      }
    else
      {
        tree *init_test_decl;
+       tree decl;
        init_test_decl = java_treetreehash_new
  	(DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), clas);
  
*************** build_class_init (tree clas, tree expr)
*** 1719,1757 ****
  	{
  	  /* Build a declaration and mark it as a flag used to track
  	     static class initializations. */
! 	  *init_test_decl = build_decl (VAR_DECL, NULL_TREE,
! 				       boolean_type_node);
! 	  MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (*init_test_decl);
! 	  LOCAL_CLASS_INITIALIZATION_FLAG (*init_test_decl) = 1;
! 	  DECL_CONTEXT (*init_test_decl) = current_function_decl;
! 	  DECL_FUNCTION_INIT_TEST_CLASS (*init_test_decl) = clas;
  	  /* Tell the check-init code to ignore this decl when not
               optimizing class initialization. */
  	  if (!STATIC_CLASS_INIT_OPT_P ())
! 	    DECL_BIT_INDEX(*init_test_decl) = -1;
  	  /* Don't emit any symbolic debugging info for this decl.  */
! 	  DECL_IGNORED_P (*init_test_decl) = 1;
  	}
  
!       init = build (CALL_EXPR, void_type_node,
! 		    build_address_of (soft_initclass_node),
! 		    build_tree_list (NULL_TREE, build_class_ref (clas)),
! 		    NULL_TREE);
        TREE_SIDE_EFFECTS (init) = 1;
!       init = build (COND_EXPR, void_type_node,
! 		    build (EQ_EXPR, boolean_type_node, 
! 			   *init_test_decl, boolean_false_node),
! 		    init, integer_zero_node);
        TREE_SIDE_EFFECTS (init) = 1;
!       init = build (COMPOUND_EXPR, TREE_TYPE (expr), init, 
! 		    build (MODIFY_EXPR, boolean_type_node,
! 			   *init_test_decl, boolean_true_node));
        TREE_SIDE_EFFECTS (init) = 1;
      }
  
    if (expr != NULL_TREE)
      {
!       expr = build (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
        TREE_SIDE_EFFECTS (expr) = 1;
        return expr;
      }
--- 1994,2034 ----
  	{
  	  /* Build a declaration and mark it as a flag used to track
  	     static class initializations. */
! 	  decl = build_decl (VAR_DECL, NULL_TREE,
! 			     boolean_type_node);
! 	  MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
! 	  LOCAL_CLASS_INITIALIZATION_FLAG (decl) = 1;
! 	  DECL_CONTEXT (decl) = current_function_decl;
! 	  DECL_FUNCTION_INIT_TEST_CLASS (decl) = clas;
  	  /* Tell the check-init code to ignore this decl when not
               optimizing class initialization. */
  	  if (!STATIC_CLASS_INIT_OPT_P ())
! 	    DECL_BIT_INDEX (decl) = -1;
! 	  DECL_INITIAL (decl) = boolean_false_node;
  	  /* Don't emit any symbolic debugging info for this decl.  */
! 	  DECL_IGNORED_P (decl) = 1;	  
! 	  *init_test_decl = decl;
  	}
  
!       init = build3 (CALL_EXPR, void_type_node,
! 		     build_address_of (soft_initclass_node),
! 		     build_tree_list (NULL_TREE, build_class_ref (clas)),
! 		     NULL_TREE);
        TREE_SIDE_EFFECTS (init) = 1;
!       init = build3 (COND_EXPR, void_type_node,
! 		     build2 (EQ_EXPR, boolean_type_node, 
! 			     *init_test_decl, boolean_false_node),
! 		     init, integer_zero_node);
        TREE_SIDE_EFFECTS (init) = 1;
!       init = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, 
! 		     build2 (MODIFY_EXPR, boolean_type_node,
! 			     *init_test_decl, boolean_true_node));
        TREE_SIDE_EFFECTS (init) = 1;
      }
  
    if (expr != NULL_TREE)
      {
!       expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
        TREE_SIDE_EFFECTS (expr) = 1;
        return expr;
      }
*************** build_known_method_ref (tree method, tre
*** 1766,1786 ****
    tree func;
    if (is_compiled_class (self_type))
      {
!       if (!flag_indirect_dispatch
! 	  || (!TREE_PUBLIC (method) && DECL_CONTEXT (method)))
  	{
! 	  make_decl_rtl (method, NULL);
! 	  func = build1 (ADDR_EXPR, method_ptr_type_node, method);
  	}
        else
  	{
! 	  tree table_index = 
! 	    build_int_2 (get_symbol_table_index 
! 			 (method, &TYPE_ATABLE_METHODS (output_class)), 0);
! 	  func = 
! 	    build (ARRAY_REF,  method_ptr_type_node, 
! 		   TYPE_ATABLE_DECL (output_class), table_index);
  	}
      }
    else
      {
--- 2043,2071 ----
    tree func;
    if (is_compiled_class (self_type))
      {
!       /* With indirect dispatch we have to use indirect calls for all
! 	 publicly visible methods or gcc will use PLT indirections
! 	 to reach them.  We also have to use indirect dispatch for all
! 	 external methods.  */
!       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);
  	}
        else
  	{
! 	  tree table_index
! 	    = build_int_cst (NULL_TREE, get_symbol_table_index 
! 			     (method, &TYPE_ATABLE_METHODS (output_class)));
! 	  func 
! 	    = build4 (ARRAY_REF,  
! 		      TREE_TYPE (TREE_TYPE (TYPE_ATABLE_DECL (output_class))),
! 		      TYPE_ATABLE_DECL (output_class), table_index,
! 		      NULL_TREE, NULL_TREE);
  	}
+       func = convert (method_ptr_type_node, func);
      }
    else
      {
*************** build_known_method_ref (tree method, tre
*** 1804,1811 ****
  	ncode_ident = get_identifier ("ncode");
        if (methods_ident == NULL_TREE)
  	methods_ident = get_identifier ("methods");
!       ref = build (COMPONENT_REF, method_ptr_type_node, ref,
! 		   lookup_field (&class_type_node, methods_ident));
        for (meth = TYPE_METHODS (self_type);
  	   ; meth = TREE_CHAIN (meth))
  	{
--- 2089,2097 ----
  	ncode_ident = get_identifier ("ncode");
        if (methods_ident == NULL_TREE)
  	methods_ident = get_identifier ("methods");
!       ref = build3 (COMPONENT_REF, method_ptr_type_node, ref,
! 		    lookup_field (&class_type_node, methods_ident),
! 		    NULL_TREE);
        for (meth = TYPE_METHODS (self_type);
  	   ; meth = TREE_CHAIN (meth))
  	{
*************** build_known_method_ref (tree method, tre
*** 1817,1828 ****
  	  method_index++;
  	}
        method_index *= int_size_in_bytes (method_type_node);
!       ref = fold (build (PLUS_EXPR, method_ptr_type_node,
! 			 ref, build_int_2 (method_index, 0)));
        ref = build1 (INDIRECT_REF, method_type_node, ref);
!       func = build (COMPONENT_REF, nativecode_ptr_type_node,
! 		    ref,
! 		    lookup_field (&method_type_node, ncode_ident));
      }
    return func;
  }
--- 2103,2114 ----
  	  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),
! 		     NULL_TREE);
      }
    return func;
  }
*************** invoke_build_dtable (int is_invoke_inter
*** 1838,1860 ****
       argument is an array then get the dispatch table of the class
       Object rather than the one from the objectref.  */
    objectref = (is_invoke_interface 
! 	       && is_array_type_p (TREE_TYPE (TREE_VALUE (arg_list))) ?
! 	       object_type_node : TREE_VALUE (arg_list));
!   
    if (dtable_ident == NULL_TREE)
      dtable_ident = get_identifier ("vtable");
    dtable = build_java_indirect_ref (object_type_node, objectref, 
  				    flag_check_references);
!   dtable = build (COMPONENT_REF, dtable_ptr_type, dtable,
! 		  lookup_field (&object_type_node, dtable_ident));
  
    return dtable;
  }
  
  /* Determine the index in SYMBOL_TABLE for a reference to the decl
     T. If this decl has not been seen before, it will be added to the
!    otable_methods. If it has, the existing table slot will be
!    reused. */
  
  int
  get_symbol_table_index (tree t, tree *symbol_table)
--- 2124,2146 ----
       argument is an array then get the dispatch table of the class
       Object rather than the one from the objectref.  */
    objectref = (is_invoke_interface 
! 	       && is_array_type_p (TREE_TYPE (TREE_VALUE (arg_list)))
! 	       ? build_class_ref (object_type_node) : TREE_VALUE (arg_list));
! 
    if (dtable_ident == NULL_TREE)
      dtable_ident = get_identifier ("vtable");
    dtable = build_java_indirect_ref (object_type_node, objectref, 
  				    flag_check_references);
!   dtable = build3 (COMPONENT_REF, dtable_ptr_type, dtable,
! 		   lookup_field (&object_type_node, dtable_ident), NULL_TREE);
  
    return dtable;
  }
  
  /* Determine the index in SYMBOL_TABLE for a reference to the decl
     T. If this decl has not been seen before, it will be added to the
!    [oa]table_methods. If it has, the existing table slot will be
!    reused.  */
  
  int
  get_symbol_table_index (tree t, tree *symbol_table)
*************** get_symbol_table_index (tree t, tree *sy
*** 1874,1880 ****
      {
        tree value = TREE_VALUE (method_list);
        if (value == t)
!         return i;
        i++;
        if (TREE_CHAIN (method_list) == NULL_TREE)
          break;
--- 2160,2166 ----
      {
        tree value = TREE_VALUE (method_list);
        if (value == t)
! 	return i;
        i++;
        if (TREE_CHAIN (method_list) == NULL_TREE)
          break;
*************** build_invokevirtual (tree dtable, tree m
*** 1897,1930 ****
  
    if (flag_indirect_dispatch)
      {
        otable_index 
! 	= build_int_2 (get_symbol_table_index 
! 		       (method, &TYPE_OTABLE_METHODS (output_class)), 0);
!       method_index = build (ARRAY_REF, integer_type_node, 
! 			    TYPE_OTABLE_DECL (output_class), 
! 			    otable_index);
      }
    else
      {
!       method_index = convert (sizetype, DECL_VINDEX (method));
! 
!       if (TARGET_VTABLE_USES_DESCRIPTORS)
! 	/* Add one to skip bogus descriptor for class and GC descriptor. */
! 	method_index = size_binop (PLUS_EXPR, method_index, size_int (1));
!       else
! 	/* Add 1 to skip "class" field of dtable, and 1 to skip GC descriptor.  */
! 	method_index = size_binop (PLUS_EXPR, method_index, size_int (2));
! 
        method_index = size_binop (MULT_EXPR, method_index,
  				 TYPE_SIZE_UNIT (nativecode_ptr_ptr_type_node));
- 
        if (TARGET_VTABLE_USES_DESCRIPTORS)
  	method_index = size_binop (MULT_EXPR, method_index,
  				   size_int (TARGET_VTABLE_USES_DESCRIPTORS));
      }
  
!   func = fold (build (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);
--- 2183,2214 ----
  
    if (flag_indirect_dispatch)
      {
+       if (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))))
+ 	abort ();
+ 
        otable_index 
! 	= build_int_cst (NULL_TREE, get_symbol_table_index 
! 			 (method, &TYPE_OTABLE_METHODS (output_class)));
!       method_index = build4 (ARRAY_REF, integer_type_node, 
! 			     TYPE_OTABLE_DECL (output_class), 
! 			     otable_index, NULL_TREE, NULL_TREE);
      }
    else
      {
!       /* We fetch the DECL_VINDEX field directly here, rather than
! 	 using get_method_index().  DECL_VINDEX is the true offset
! 	 from the vtable base to a method, regrdless of any extra
! 	 words inserted at the start of the vtable.  */
!       method_index = DECL_VINDEX (method);
        method_index = size_binop (MULT_EXPR, method_index,
  				 TYPE_SIZE_UNIT (nativecode_ptr_ptr_type_node));
        if (TARGET_VTABLE_USES_DESCRIPTORS)
  	method_index = size_binop (MULT_EXPR, method_index,
  				   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);
*************** build_invokeinterface (tree dtable, tree
*** 1941,1961 ****
    tree lookup_arg;
    tree interface;
    tree idx;
-   tree meth;
-   tree otable_index;
-   int i;
  
!   /* We expand invokeinterface here.  _Jv_LookupInterfaceMethod() will
!      ensure that the selected method exists, is public and not
!      abstract nor static.  */
  	    
    if (class_ident == NULL_TREE)
      class_ident = get_identifier ("class");
  
    dtable = build_java_indirect_ref (dtable_type, dtable,
  				    flag_check_references);
!   dtable = build (COMPONENT_REF, class_ptr_type, dtable,
! 		  lookup_field (&dtable_type, class_ident));
  
    interface = DECL_CONTEXT (method);
    if (! CLASS_INTERFACE (TYPE_NAME (interface)))
--- 2225,2240 ----
    tree lookup_arg;
    tree interface;
    tree idx;
  
!   /* We expand invokeinterface here.  */
  	    
    if (class_ident == NULL_TREE)
      class_ident = get_identifier ("class");
  
    dtable = build_java_indirect_ref (dtable_type, dtable,
  				    flag_check_references);
!   dtable = build3 (COMPONENT_REF, class_ptr_type, dtable,
! 		   lookup_field (&dtable_type, class_ident), NULL_TREE);
  
    interface = DECL_CONTEXT (method);
    if (! CLASS_INTERFACE (TYPE_NAME (interface)))
*************** build_invokeinterface (tree dtable, tree
*** 1964,2012 ****
    
    if (flag_indirect_dispatch)
      {
!       otable_index =
! 	build_int_2 (get_symbol_table_index 
! 		     (method, &TYPE_OTABLE_METHODS (output_class)), 0);
!       idx = 
! 	build (ARRAY_REF, integer_type_node, TYPE_OTABLE_DECL (output_class),
! 	       otable_index);
      }
    else
      {
!       i = 1;
!       for (meth = TYPE_METHODS (interface); ; meth = TREE_CHAIN (meth), i++)
! 	{
! 	  if (meth == method)
!             {
! 	      idx = build_int_2 (i, 0);
! 	      break;
! 	    }
! 	  if (meth == NULL_TREE)
! 	    abort ();
! 	}
      }
- 
-   lookup_arg = tree_cons (NULL_TREE, dtable,
-                           tree_cons (NULL_TREE, build_class_ref (interface),
- 			             build_tree_list (NULL_TREE, idx)));
  				     			  
!   return build (CALL_EXPR, ptr_type_node, 
! 		build_address_of (soft_lookupinterfacemethod_node),
! 		lookup_arg, NULL_TREE);
  }
    
  /* Expand one of the invoke_* opcodes.
!    OCPODE is the specific opcode.
     METHOD_REF_INDEX is an index into the constant pool.
     NARGS is the number of arguments, or -1 if not specified. */
  
  static void
  expand_invoke (int opcode, int method_ref_index, int nargs ATTRIBUTE_UNUSED)
  {
!   tree method_signature = COMPONENT_REF_SIGNATURE(&current_jcf->cpool, method_ref_index);
!   tree method_name = COMPONENT_REF_NAME (&current_jcf->cpool, method_ref_index);
!   tree self_type = get_class_constant
!     (current_jcf, COMPONENT_REF_CLASS_INDEX(&current_jcf->cpool, method_ref_index));
    const char *const self_name
      = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (self_type)));
    tree call, func, method, arg_list, method_type;
--- 2243,2298 ----
    
    if (flag_indirect_dispatch)
      {
!       int itable_index 
! 	= 2 * (get_symbol_table_index 
! 	       (method, &TYPE_ITABLE_METHODS (output_class)));
!       interface 
! 	= build4 (ARRAY_REF, 
! 		 TREE_TYPE (TREE_TYPE (TYPE_ITABLE_DECL (output_class))),
! 		 TYPE_ITABLE_DECL (output_class), 
! 		  build_int_cst (NULL_TREE, itable_index-1),
! 		  NULL_TREE, NULL_TREE);
!       idx 
! 	= build4 (ARRAY_REF, 
! 		 TREE_TYPE (TREE_TYPE (TYPE_ITABLE_DECL (output_class))),
! 		 TYPE_ITABLE_DECL (output_class), 
! 		  build_int_cst (NULL_TREE, itable_index),
! 		  NULL_TREE, NULL_TREE);
!       interface = convert (class_ptr_type, interface);
!       idx = convert (integer_type_node, idx);
      }
    else
      {
!       idx = build_int_cst (NULL_TREE, 
! 			   get_interface_method_index (method, interface));
!       interface = build_class_ref (interface);
      }
  				     			  
!   lookup_arg = tree_cons (NULL_TREE, dtable,
! 			  tree_cons (NULL_TREE, interface,
! 				     build_tree_list (NULL_TREE, idx)));
! 
!   return build3 (CALL_EXPR, ptr_type_node, 
! 		 build_address_of (soft_lookupinterfacemethod_node),
! 		 lookup_arg, NULL_TREE);
  }
    
  /* Expand one of the invoke_* opcodes.
!    OPCODE is the specific opcode.
     METHOD_REF_INDEX is an index into the constant pool.
     NARGS is the number of arguments, or -1 if not specified. */
  
  static void
  expand_invoke (int opcode, int method_ref_index, int nargs ATTRIBUTE_UNUSED)
  {
!   tree method_signature
!     = COMPONENT_REF_SIGNATURE(&current_jcf->cpool, method_ref_index);
!   tree method_name = COMPONENT_REF_NAME (&current_jcf->cpool,
! 					 method_ref_index);
!   tree self_type
!     = get_class_constant (current_jcf,
!                           COMPONENT_REF_CLASS_INDEX(&current_jcf->cpool,
!                           method_ref_index));
    const char *const self_name
      = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (self_type)));
    tree call, func, method, arg_list, method_type;
*************** expand_invoke (int opcode, int method_re
*** 2025,2062 ****
      method = lookup_java_constructor (self_type, method_signature);
    else
      method = lookup_java_method (self_type, method_name, method_signature);
    if (method == NULL_TREE)
      {
!       error ("class '%s' has no method named '%s' matching signature '%s'",
! 	     self_name,
! 	     IDENTIFIER_POINTER (method_name),
! 	     IDENTIFIER_POINTER (method_signature));
!     }
!   /* Invoke static can't invoke static/abstract method */
!   else if (opcode == OPCODE_invokestatic)
!     {
!       if (!METHOD_STATIC (method))
  	{
! 	  error ("invokestatic on non static method");
! 	  method = NULL_TREE;
  	}
!       else if (METHOD_ABSTRACT (method))
  	{
! 	  error ("invokestatic on abstract method");
! 	  method = NULL_TREE;
  	}
      }
!   else
      {
!       if (METHOD_STATIC (method))
  	{
! 	  error ("invoke[non-static] on static method");
! 	  method = NULL_TREE;
  	}
      }
  
    if (method == NULL_TREE)
      {
        method_type = get_type_from_signature (method_signature);
        pop_arguments (TYPE_ARG_TYPES (method_type));
        if (opcode != OPCODE_invokestatic) 
--- 2311,2392 ----
      method = lookup_java_constructor (self_type, method_signature);
    else
      method = lookup_java_method (self_type, method_name, method_signature);
+ 
+   /* We've found a method in an interface, but this isn't an interface
+      call.  */
+   if (opcode != OPCODE_invokeinterface
+       && method
+       && (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method)))))
+     method = NULL_TREE;
+ 
+   /* We've found a non-interface method but we are making an
+      interface call.  This can happen if the interface overrides a
+      method in Object.  */
+   if (! flag_verify_invocations
+       && opcode == OPCODE_invokeinterface
+       && method
+       && ! CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))))
+     method = NULL_TREE;
+ 
    if (method == NULL_TREE)
      {
!       if (flag_verify_invocations || ! flag_indirect_dispatch)
  	{
! 	  error ("class '%s' has no method named '%s' matching signature '%s'",
! 		 self_name,
! 		 IDENTIFIER_POINTER (method_name),
! 		 IDENTIFIER_POINTER (method_signature));
  	}
!       else
  	{
! 	  int flags = ACC_PUBLIC;
! 	  if (opcode == OPCODE_invokestatic)
! 	    flags |= ACC_STATIC;
! 	  if (opcode == OPCODE_invokeinterface)
! 	    {
! 	      flags |= ACC_INTERFACE | ACC_ABSTRACT;
! 	      CLASS_INTERFACE (TYPE_NAME (self_type)) = 1;
! 	    }
! 	  method = add_method (self_type, flags, method_name,
! 			       method_signature);
! 	  DECL_ARTIFICIAL (method) = 1;
! 	  METHOD_DUMMY (method) = 1;
! 	  layout_class_method (self_type, NULL,
! 			       method, NULL);
  	}
      }
! 
!   /* Invoke static can't invoke static/abstract method */
!   if (method != NULL_TREE)
      {
!       if (opcode == OPCODE_invokestatic)
  	{
! 	  if (!METHOD_STATIC (method))
! 	    {
! 	      error ("invokestatic on non static method");
! 	      method = NULL_TREE;
! 	    }
! 	  else if (METHOD_ABSTRACT (method))
! 	    {
! 	      error ("invokestatic on abstract method");
! 	      method = NULL_TREE;
! 	    }
! 	}
!       else
! 	{
! 	  if (METHOD_STATIC (method))
! 	    {
! 	      error ("invoke[non-static] on static method");
! 	      method = NULL_TREE;
! 	    }
  	}
      }
  
    if (method == NULL_TREE)
      {
+       /* If we got here, we emitted an error message above.  So we
+ 	 just pop the arguments, push a properly-typed zero, and
+ 	 continue.  */
        method_type = get_type_from_signature (method_signature);
        pop_arguments (TYPE_ARG_TYPES (method_type));
        if (opcode != OPCODE_invokestatic) 
*************** expand_invoke (int opcode, int method_re
*** 2104,2123 ****
        else
  	func = build_invokeinterface (dtable, method);
      }
!   func = build1 (NOP_EXPR, build_pointer_type (method_type), func);
  
!   call = build (CALL_EXPR, TREE_TYPE (method_type), func, arg_list, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    call = check_for_builtin (method, call);
  
    if (check != NULL_TREE)
      {
!       call = build (COMPOUND_EXPR, TREE_TYPE (call), check, call);
        TREE_SIDE_EFFECTS (call) = 1;
      }
  
    if (TREE_CODE (TREE_TYPE (method_type)) == VOID_TYPE)
!     expand_expr_stmt (call);
    else
      {
        push_value (call);
--- 2434,2458 ----
        else
  	func = build_invokeinterface (dtable, method);
      }
!       
!   if (TREE_CODE (func) == ADDR_EXPR)
!     TREE_TYPE (func) = build_pointer_type (method_type);
!   else
!     func = build1 (NOP_EXPR, build_pointer_type (method_type), func);
  
!   call = build3 (CALL_EXPR, TREE_TYPE (method_type),
! 		 func, arg_list, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    call = check_for_builtin (method, call);
  
    if (check != NULL_TREE)
      {
!       call = build2 (COMPOUND_EXPR, TREE_TYPE (call), check, call);
        TREE_SIDE_EFFECTS (call) = 1;
      }
  
    if (TREE_CODE (TREE_TYPE (method_type)) == VOID_TYPE)
!     java_add_stmt (call);
    else
      {
        push_value (call);
*************** build_jni_stub (tree method)
*** 2136,2141 ****
--- 2471,2477 ----
    tree env_var, res_var = NULL_TREE, block;
    tree method_args, res_type;
    tree meth_var;
+   tree bind;
  
    int args_size = 0;
  
*************** build_jni_stub (tree method)
*** 2169,2177 ****
    DECL_INITIAL (meth_var) = null_pointer_node;
    TREE_USED (meth_var) = 1;
    chainon (env_var, meth_var);
!   layout_decl (meth_var, 0);
!   make_decl_rtl (meth_var, NULL);
!   rest_of_decl_compilation (meth_var, NULL, 0, 0);
  
    /* One strange way that the front ends are different is that they
       store arguments differently.  */
--- 2505,2511 ----
    DECL_INITIAL (meth_var) = null_pointer_node;
    TREE_USED (meth_var) = 1;
    chainon (env_var, meth_var);
!   build_result_decl (method);
  
    /* One strange way that the front ends are different is that they
       store arguments differently.  */
*************** build_jni_stub (tree method)
*** 2188,2198 ****
      TREE_TYPE (block) = TREE_TYPE (TREE_TYPE (method));
  
    /* Compute the local `env' by calling _Jv_GetJNIEnvNewFrame.  */
!   body = build (MODIFY_EXPR, ptr_type_node, env_var,
! 		build (CALL_EXPR, ptr_type_node,
! 		       build_address_of (soft_getjnienvnewframe_node),
! 		       build_tree_list (NULL_TREE, klass),
! 		       NULL_TREE));
    CAN_COMPLETE_NORMALLY (body) = 1;
  
    /* All the arguments to this method become arguments to the
--- 2522,2532 ----
      TREE_TYPE (block) = TREE_TYPE (TREE_TYPE (method));
  
    /* Compute the local `env' by calling _Jv_GetJNIEnvNewFrame.  */
!   body = build2 (MODIFY_EXPR, ptr_type_node, env_var,
! 		 build3 (CALL_EXPR, ptr_type_node,
! 			 build_address_of (soft_getjnienvnewframe_node),
! 			 build_tree_list (NULL_TREE, klass),
! 			 NULL_TREE));
    CAN_COMPLETE_NORMALLY (body) = 1;
  
    /* All the arguments to this method become arguments to the
*************** build_jni_stub (tree method)
*** 2201,2207 ****
    args = NULL_TREE;
    for (tem = method_args; tem != NULL_TREE; tem = TREE_CHAIN (tem))
      {
!       int arg_bits = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (tem)));
  #ifdef PARM_BOUNDARY
        arg_bits = (((arg_bits + PARM_BOUNDARY - 1) / PARM_BOUNDARY)
                    * PARM_BOUNDARY);
--- 2535,2541 ----
    args = NULL_TREE;
    for (tem = method_args; tem != NULL_TREE; tem = TREE_CHAIN (tem))
      {
!       int arg_bits = TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (tem)));
  #ifdef PARM_BOUNDARY
        arg_bits = (((arg_bits + PARM_BOUNDARY - 1) / PARM_BOUNDARY)
                    * PARM_BOUNDARY);
*************** build_jni_stub (tree method)
*** 2231,2237 ****
    /* We call _Jv_LookupJNIMethod to find the actual underlying
       function pointer.  _Jv_LookupJNIMethod will throw the appropriate
       exception if this function is not found at runtime.  */
!   tem = build_tree_list (NULL_TREE, build_int_2 (args_size, 0));
    method_sig = build_java_signature (TREE_TYPE (method));
    lookup_arg = tree_cons (NULL_TREE,
                            build_utf8_ref (unmangle_classname
--- 2565,2571 ----
    /* We call _Jv_LookupJNIMethod to find the actual underlying
       function pointer.  _Jv_LookupJNIMethod will throw the appropriate
       exception if this function is not found at runtime.  */
!   tem = build_tree_list (NULL_TREE, build_int_cst (NULL_TREE, args_size));
    method_sig = build_java_signature (TREE_TYPE (method));
    lookup_arg = tree_cons (NULL_TREE,
                            build_utf8_ref (unmangle_classname
*************** build_jni_stub (tree method)
*** 2251,2325 ****
  
    jni_func_type = build_pointer_type (tem);
  
!   jnifunc = build (COND_EXPR, ptr_type_node,
! 		   meth_var, meth_var,
! 		   build (MODIFY_EXPR, ptr_type_node,
! 			  meth_var,
! 			  build (CALL_EXPR, ptr_type_node,
! 				 build_address_of (soft_lookupjnimethod_node),
! 				 lookup_arg, NULL_TREE)));
  
    /* Now we make the actual JNI call via the resulting function
       pointer.    */
!   call = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (method)),
! 		build1 (NOP_EXPR, jni_func_type, jnifunc),
! 		args, NULL_TREE);
  
    /* 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 = build (MODIFY_EXPR, TREE_TYPE (TREE_TYPE (method)),
! 		  res_var, call);
  
    TREE_SIDE_EFFECTS (call) = 1;
    CAN_COMPLETE_NORMALLY (call) = 1;
  
!   body = build (COMPOUND_EXPR, void_type_node, body, call);
    TREE_SIDE_EFFECTS (body) = 1;
  
    /* Now free the environment we allocated.  */
!   call = build (CALL_EXPR, ptr_type_node,
! 		build_address_of (soft_jnipopsystemframe_node),
! 		build_tree_list (NULL_TREE, env_var),
! 		NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    CAN_COMPLETE_NORMALLY (call) = 1;
!   body = build (COMPOUND_EXPR, void_type_node, body, call);
    TREE_SIDE_EFFECTS (body) = 1;
  
!   /* Finally, do the return.  When compiling from source we rely on
!      patch_return to patch the return value -- because DECL_RESULT is
!      not set at the time this function is called.  */
!   if (from_class)
!     {
!       res_type = void_type_node;
!       if (res_var != NULL_TREE)
! 	{
! 	  tree drt;
! 	  if (! DECL_RESULT (method))
! 	    abort ();
! 	  /* Make sure we copy the result variable to the actual
! 	     result.  We use the type of the DECL_RESULT because it
! 	     might be different from the return type of the function:
! 	     it might be promoted.  */
! 	  drt = TREE_TYPE (DECL_RESULT (method));
! 	  if (drt != TREE_TYPE (res_var))
! 	    res_var = build1 (CONVERT_EXPR, drt, res_var);
! 	  res_var = build (MODIFY_EXPR, drt, DECL_RESULT (method), res_var);
! 	  TREE_SIDE_EFFECTS (res_var) = 1;
! 	}
!     }
!   else
      {
!       /* This is necessary to get patch_return to run.  */
!       res_type = NULL_TREE;
      }
-   body = build (COMPOUND_EXPR, void_type_node, body,
- 		build1 (RETURN_EXPR, res_type, res_var));
-   TREE_SIDE_EFFECTS (body) = 1;
  
!   BLOCK_EXPR_BODY (block) = body;
!   return block;
  }
  
  /* Expand an operation to extract from or store into a field.
--- 2585,2651 ----
  
    jni_func_type = build_pointer_type (tem);
  
!   jnifunc = build3 (COND_EXPR, ptr_type_node,
! 		    meth_var, meth_var,
! 		    build2 (MODIFY_EXPR, ptr_type_node, meth_var,
! 			    build3 (CALL_EXPR, ptr_type_node,
! 				    build_address_of
! 				      (soft_lookupjnimethod_node),
! 				    lookup_arg, NULL_TREE)));
  
    /* Now we make the actual JNI call via the resulting function
       pointer.    */
!   call = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (method)),
! 		 build1 (NOP_EXPR, jni_func_type, jnifunc),
! 		 args, NULL_TREE);
  
    /* 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;
  
!   body = build2 (COMPOUND_EXPR, void_type_node, body, call);
    TREE_SIDE_EFFECTS (body) = 1;
  
    /* Now free the environment we allocated.  */
!   call = build3 (CALL_EXPR, ptr_type_node,
! 		 build_address_of (soft_jnipopsystemframe_node),
! 		 build_tree_list (NULL_TREE, env_var),
! 		 NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    CAN_COMPLETE_NORMALLY (call) = 1;
!   body = build2 (COMPOUND_EXPR, void_type_node, body, call);
    TREE_SIDE_EFFECTS (body) = 1;
  
!   /* Finally, do the return.  */
!   res_type = void_type_node;
!   if (res_var != NULL_TREE)
      {
!       tree drt;
!       if (! DECL_RESULT (method))
! 	abort ();
!       /* Make sure we copy the result variable to the actual
! 	 result.  We use the type of the DECL_RESULT because it
! 	 might be different from the return type of the function:
! 	 it might be promoted.  */
!       drt = TREE_TYPE (DECL_RESULT (method));
!       if (drt != TREE_TYPE (res_var))
! 	res_var = build1 (CONVERT_EXPR, drt, res_var);
!       res_var = build2 (MODIFY_EXPR, drt, DECL_RESULT (method), res_var);
!       TREE_SIDE_EFFECTS (res_var) = 1;
      }
  
!   body = build2 (COMPOUND_EXPR, void_type_node, body,
! 		 build1 (RETURN_EXPR, res_type, res_var));
!   TREE_SIDE_EFFECTS (body) = 1;
!   
!   bind = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (block), 
! 		 body, block);
!   return bind;
  }
  
  /* Expand an operation to extract from or store into a field.
*************** build_jni_stub (tree method)
*** 2330,2340 ****
  static void
  expand_java_field_op (int is_static, int is_putting, int field_ref_index)
  {
!   tree self_type = 
!       get_class_constant (current_jcf, 
! 			  COMPONENT_REF_CLASS_INDEX (&current_jcf->cpool, 
! 						     field_ref_index));
!   const char *self_name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (self_type)));
    tree field_name = COMPONENT_REF_NAME (&current_jcf->cpool, field_ref_index);
    tree field_signature = COMPONENT_REF_SIGNATURE (&current_jcf->cpool, 
  						  field_ref_index);
--- 2656,2667 ----
  static void
  expand_java_field_op (int is_static, int is_putting, int field_ref_index)
  {
!   tree self_type
!     = get_class_constant (current_jcf,
!                           COMPONENT_REF_CLASS_INDEX (&current_jcf->cpool,
!                           field_ref_index));
!   const char *self_name
!     = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (self_type)));
    tree field_name = COMPONENT_REF_NAME (&current_jcf->cpool, field_ref_index);
    tree field_signature = COMPONENT_REF_SIGNATURE (&current_jcf->cpool, 
  						  field_ref_index);
*************** expand_java_field_op (int is_static, int
*** 2342,2357 ****
    tree new_value = is_putting ? pop_value (field_type) : NULL_TREE;
    tree field_ref;
    int is_error = 0;
!   tree field_decl = lookup_field (&self_type, field_name);
    if (field_decl == error_mark_node)
      {
        is_error = 1;
      }
    else if (field_decl == NULL_TREE)
      {
!       error ("missing field '%s' in '%s'",
! 	     IDENTIFIER_POINTER (field_name), self_name);
!       is_error = 1;
      }
    else if (build_java_signature (TREE_TYPE (field_decl)) != field_signature)
      {
--- 2669,2703 ----
    tree new_value = is_putting ? pop_value (field_type) : NULL_TREE;
    tree field_ref;
    int is_error = 0;
!   tree original_self_type = self_type;
!   tree field_decl;
!   
!   if (! CLASS_LOADED_P (self_type))
!     load_class (self_type, 1);  
!   field_decl = lookup_field (&self_type, field_name);
    if (field_decl == error_mark_node)
      {
        is_error = 1;
      }
    else if (field_decl == NULL_TREE)
      {
!       if (! flag_verify_invocations)
! 	{
! 	  int flags = ACC_PUBLIC;
! 	  if (is_static)
! 	    flags |= ACC_STATIC;
! 	  self_type = original_self_type;
! 	  field_decl = add_field (original_self_type, field_name,
! 				  field_type, flags); 
! 	  DECL_ARTIFICIAL (field_decl) = 1;
! 	  DECL_IGNORED_P (field_decl) = 1;
! 	}
!       else
! 	{      
! 	  error ("missing field '%s' in '%s'",
! 		 IDENTIFIER_POINTER (field_name), self_name);
! 	  is_error = 1;
!       }
      }
    else if (build_java_signature (TREE_TYPE (field_decl)) != field_signature)
      {
*************** expand_java_field_op (int is_static, int
*** 2378,2389 ****
  	{
  	  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 `%D' not in "
!                          "class initializer", field_decl, field_decl);
  	    }
  	  else
  	    {
--- 2724,2736 ----
  	{
  	  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
  	    {
*************** expand_java_field_op (int is_static, int
*** 2394,2400 ****
  			 field_decl, field_decl);
  	    }
  	}
!       expand_assignment (field_ref, new_value, 0);
      }
    else
      push_value (field_ref);
--- 2741,2748 ----
  			 field_decl, field_decl);
  	    }
  	}
!       java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (field_ref),
! 			     field_ref, new_value));
      }
    else
      push_value (field_ref);
*************** load_type_state (tree label)
*** 2411,2642 ****
      type_map [i] = TREE_VEC_ELT (vec, i);
  }
  
- /* Do the expansion of a Java switch. With Gcc, switches are front-end
-    dependent things, but they rely on gcc routines. This function is
-    placed here because it uses things defined locally in parse.y. */
- 
- static tree
- case_identity (tree t __attribute__ ((__unused__)), tree v)
- {
-   return v;
- }
- 
- /* Return the name of the vtable for an array of a given primitive
-    type.  */
- static tree
- get_primitive_array_vtable (tree elt)
- {
-   tree r;
-   if (elt == boolean_type_node)
-     r = boolean_array_vtable;
-   else if (elt == byte_type_node)
-     r = byte_array_vtable;
-   else if (elt == char_type_node)
-     r = char_array_vtable;
-   else if (elt == short_type_node)
-     r = short_array_vtable;
-   else if (elt == int_type_node)
-     r = int_array_vtable;
-   else if (elt == long_type_node)
-     r = long_array_vtable;
-   else if (elt == float_type_node)
-     r = float_array_vtable;
-   else if (elt == double_type_node)
-     r = double_array_vtable;
-   else
-     abort ();
-   return build_address_of (r);
- }
- 
- struct rtx_def *
- java_expand_expr (tree exp, rtx target, enum machine_mode tmode,
- 		  int modifier /* Actually an enum expand_modifier. */,
- 		  rtx *alt_rtl ATTRIBUTE_UNUSED)
- {
-   tree current;
- 
-   switch (TREE_CODE (exp))
-     {
-     case NEW_ARRAY_INIT:
-       {
- 	rtx tmp;
- 	tree array_type = TREE_TYPE (TREE_TYPE (exp));
- 	tree element_type = TYPE_ARRAY_ELEMENT (array_type);
- 	tree data_fld = TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (array_type)));
- 	HOST_WIDE_INT ilength = java_array_type_length (array_type);
- 	tree length = build_int_2 (ilength, 0);
- 	tree init = TREE_OPERAND (exp, 0);
- 	tree array_decl;
- 
- 	/* See if we can generate the array statically.  */
- 	if (TREE_CONSTANT (init) && TREE_STATIC (exp)
- 	    && JPRIMITIVE_TYPE_P (element_type))
- 	  {
- 	    tree temp, value, init_decl;
- 	    struct rtx_def *r;
- 	    START_RECORD_CONSTRUCTOR (temp, object_type_node);
- 	    PUSH_FIELD_VALUE (temp, "vtable",
- 			      get_primitive_array_vtable (element_type));
- 	    if (! flag_hash_synchronization)
- 	      PUSH_FIELD_VALUE (temp, "sync_info", null_pointer_node);
- 	    FINISH_RECORD_CONSTRUCTOR (temp);
- 	    START_RECORD_CONSTRUCTOR (value, array_type);
- 	    PUSH_SUPER_VALUE (value, temp);
- 	    PUSH_FIELD_VALUE (value, "length", length);
- 	    PUSH_FIELD_VALUE (value, "data", init);
- 	    FINISH_RECORD_CONSTRUCTOR (value);
- 
- 	    init_decl = build_decl (VAR_DECL, generate_name (), array_type);
- 	    pushdecl_top_level (init_decl);
- 	    TREE_STATIC (init_decl) = 1;
- 	    DECL_INITIAL (init_decl) = value;
- 	    DECL_IGNORED_P (init_decl) = 1;
- 	    TREE_READONLY (init_decl) = 1;
- 	    /* Hash synchronization requires at least 64-bit alignment. */
- 	    if (flag_hash_synchronization && POINTER_SIZE < 64)
- 	      DECL_ALIGN (init_decl) = 64;
- 	    rest_of_decl_compilation (init_decl, NULL, 1, 0);
- 	    TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (init_decl)) = 1;
- 	    init = build1 (ADDR_EXPR, TREE_TYPE (exp), init_decl);
- 	    r = expand_expr (init, target, tmode, modifier);
- 	    return r;
- 	  }
- 
- 	array_decl = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE (exp));
- 	expand_decl (array_decl);
- 	tmp = expand_assignment (array_decl,
- 				 build_new_array (element_type, length),
- 				 1);
- 	if (TREE_CONSTANT (init)
- 	    && ilength >= 10 && JPRIMITIVE_TYPE_P (element_type))
- 	  {
- 	    tree init_decl;
- 	    init_decl = build_decl (VAR_DECL, generate_name (),
- 				    TREE_TYPE (init));
- 	    pushdecl_top_level (init_decl);
- 	    TREE_STATIC (init_decl) = 1;
- 	    DECL_INITIAL (init_decl) = init;
- 	    DECL_IGNORED_P (init_decl) = 1;
- 	    TREE_READONLY (init_decl) = 1;
- 	    rest_of_decl_compilation (init_decl, NULL, 1, 0);
- 	    TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (init_decl)) = 1;
- 	    init = init_decl;
- 	  }
- 	expand_assignment (build (COMPONENT_REF, TREE_TYPE (data_fld),
- 				  build_java_indirect_ref (array_type, 
- 					  array_decl, flag_check_references), 
- 				  data_fld), init, 0);
- 	return tmp;
-       }
-     case BLOCK:
-       if (BLOCK_EXPR_BODY (exp))
- 	{
- 	  tree local;
- 	  rtx last;
- 	  tree body = BLOCK_EXPR_BODY (exp);
- 	  /* Set to 1 or more when we found a static class
-              initialization flag. */
- 	  int found_class_initialization_flag = 0;
- 
- 	  pushlevel (2);	/* 2 and above */
- 	  expand_start_bindings (0);
- 	  local = BLOCK_EXPR_DECLS (exp);
- 	  while (local)
- 	    {
- 	      tree next = TREE_CHAIN (local);
- 	      found_class_initialization_flag +=
- 		LOCAL_CLASS_INITIALIZATION_FLAG_P (local);
- 	      layout_decl (local, 0);
- 	      expand_decl (pushdecl (local));
- 	      local = next;
- 	    }
- 
- 	  /* Emit initialization code for test flags if we saw one. */
- 	  if (! always_initialize_class_p 
- 	      && current_function_decl
- 	      && found_class_initialization_flag)
- 	    htab_traverse 
- 	      (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl),
- 	       emit_init_test_initialization, NULL);
- 
- 	  /* Avoid deep recursion for long block.  */
- 	  while (TREE_CODE (body) == COMPOUND_EXPR)
- 	    {
- 	      expand_expr (TREE_OPERAND (body, 0), const0_rtx, VOIDmode, 0);
- 	      emit_queue ();
- 	      body = TREE_OPERAND (body, 1);
- 	    }
-   	  last = expand_expr (body, NULL_RTX, VOIDmode, 0);
- 	  emit_queue ();
- 	  expand_end_bindings (getdecls (), 1, 0);
- 	  poplevel (1, 1, 0);
- 	  return last;
- 	}
-       return const0_rtx;
- 
-     case CASE_EXPR:
-       {
- 	tree duplicate;
- 	if (pushcase (TREE_OPERAND (exp, 0), case_identity,
- 		      build_decl (LABEL_DECL, NULL_TREE, NULL_TREE), 
- 		      &duplicate) == 2)
- 	  {
- 	    EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (exp);
- 	    parse_error_context
- 	      (wfl_operator, "Duplicate case label: `%s'",
- 	       print_int_node (TREE_OPERAND (exp, 0)));
- 	  }
- 	return const0_rtx;
-       }
- 
-     case DEFAULT_EXPR:
-       pushcase (NULL_TREE, 0, 
- 		build_decl (LABEL_DECL, NULL_TREE, NULL_TREE), NULL);
-       return const0_rtx;
- 
-     case SWITCH_EXPR:
-       expand_start_case (0, TREE_OPERAND (exp, 0), int_type_node, "switch");
-       expand_expr_stmt (TREE_OPERAND (exp, 1));
-       expand_end_case (TREE_OPERAND (exp, 0));
-       return const0_rtx;
- 
-     case TRY_EXPR:
-       /* We expand a try[-catch] block */
- 
-       /* Expand the try block */
-       expand_eh_region_start ();
-       expand_expr_stmt (TREE_OPERAND (exp, 0));
-       expand_start_all_catch ();
- 
-       /* Expand all catch clauses (EH handlers) */
-       for (current = TREE_OPERAND (exp, 1); current; 
- 	   current = TREE_CHAIN (current))
- 	{
- 	  tree catch = TREE_OPERAND (current, 0);
- 	  tree decl = BLOCK_EXPR_DECLS (catch);
- 	  tree type = (decl ? TREE_TYPE (TREE_TYPE (decl)) : NULL_TREE);
- 
- 	  expand_start_catch (prepare_eh_table_type (type));
- 	  expand_expr_stmt (TREE_OPERAND (current, 0));
- 	  expand_end_catch ();
- 	}
-       expand_end_all_catch ();
-       return const0_rtx;
- 
-     case JAVA_EXC_OBJ_EXPR:
-       return expand_expr (build_exception_object_ref (TREE_TYPE (exp)),
- 			  target, tmode, modifier);
- 
-     case LABEL_EXPR:
-       /* Used only by expanded inline functions.  */
-       expand_label (TREE_OPERAND (exp, 0));
-       return const0_rtx;
- 
-     default:
-       internal_error ("can't expand %s", tree_code_name [TREE_CODE (exp)]);
-     }
- }
- 
  /* Go over METHOD's bytecode and note instruction starts in
     instruction_bits[].  */
  
--- 2759,2764 ----
*************** expand_byte_code (JCF *jcf, tree method)
*** 2814,2823 ****
  	}
      }  
  
!   if (! verify_jvm_instructions (jcf, byte_ops, length))
!     return;
  
!   /* Translate bytecodes to rtl instructions. */
    linenumber_pointer = linenumber_table;
    for (PC = 0; PC < length;)
      {
--- 2936,2955 ----
  	}
      }  
  
!   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 ();
! 
!   /* Translate bytecodes.  */
    linenumber_pointer = linenumber_table;
    for (PC = 0; PC < length;)
      {
*************** expand_byte_code (JCF *jcf, tree method)
*** 2826,2832 ****
  	  tree label = lookup_label (PC);
            flush_quick_stack ();
  	  if ((instruction_bits [PC] & BCODE_TARGET) != 0)
! 	    expand_label (label);
  	  if (LABEL_VERIFIED (label) || PC == 0)
  	    load_type_state (label);
  	}
--- 2958,2964 ----
  	  tree label = lookup_label (PC);
            flush_quick_stack ();
  	  if ((instruction_bits [PC] & BCODE_TARGET) != 0)
! 	    java_add_stmt (build1 (LABEL_EXPR, void_type_node, label));
  	  if (LABEL_VERIFIED (label) || PC == 0)
  	    load_type_state (label);
  	}
*************** expand_byte_code (JCF *jcf, tree method)
*** 2873,2880 ****
  	      linenumber_pointer += 4;
  	      if (pc == PC)
  		{
! 		  input_line = GET_u2 (linenumber_pointer - 2);
! 		  emit_line_note (input_location);
  		  if (!(instruction_bits[PC] & BCODE_HAS_MULTI_LINENUMBERS))
  		    break;
  		}
--- 3005,3016 ----
  	      linenumber_pointer += 4;
  	      if (pc == PC)
  		{
! 		  int line = GET_u2 (linenumber_pointer - 2);
! #ifdef USE_MAPPED_LOCATION
! 		  input_location = linemap_line_start (&line_table, line, 1);
! #else
! 		  input_location.line = line;
! #endif
  		  if (!(instruction_bits[PC] & BCODE_HAS_MULTI_LINENUMBERS))
  		    break;
  		}
*************** java_push_constant_from_pool (JCF *jcf, 
*** 2904,2910 ****
        name = get_name_constant (jcf, JPOOL_USHORT1 (jcf, index));
        index = alloc_name_constant (CONSTANT_String, name);
        c = build_ref_from_constant_pool (index);
!       TREE_TYPE (c) = promote_type (string_type_node);
      }
    else
      c = get_constant (jcf, index);
--- 3040,3046 ----
        name = get_name_constant (jcf, JPOOL_USHORT1 (jcf, index));
        index = alloc_name_constant (CONSTANT_String, name);
        c = build_ref_from_constant_pool (index);
!       c = convert (promote_type (string_type_node), c);
      }
    else
      c = get_constant (jcf, index);
*************** process_jvm_instruction (int PC, const u
*** 2922,2929 ****
       replace the top of the stack with the thrown object reference */
    if (instruction_bits [PC] & BCODE_EXCEPTION_TARGET)
      {
!       tree type = pop_type (ptr_type_node);
!       push_value (build (JAVA_EXC_OBJ_EXPR, type));
      }
  
    switch (byte_ops[PC++])
--- 3058,3071 ----
       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));
! 	}
      }
  
    switch (byte_ops[PC++])
*************** process_jvm_instruction (int PC, const u
*** 2938,2944 ****
    {									\
      int saw_index = 0;							\
      int index     = OPERAND_VALUE;					\
!     build_java_ret (find_local_variable (index, ptr_type_node, oldpc));	\
    }
  
  #define JSR(OPERAND_TYPE, OPERAND_VALUE) \
--- 3080,3087 ----
    {									\
      int saw_index = 0;							\
      int index     = OPERAND_VALUE;					\
!     build_java_ret							\
!       (find_local_variable (index, return_address_type_node, oldpc));	\
    }
  
  #define JSR(OPERAND_TYPE, OPERAND_VALUE) \
*************** process_jvm_instruction (int PC, const u
*** 3025,3070 ****
  #define LOOKUP_SWITCH \
    { jint default_offset = IMMEDIATE_s4;  jint npairs = IMMEDIATE_s4; \
      tree selector = pop_value (INT_type_node); \
!     tree duplicate, label; \
!     tree type = TREE_TYPE (selector); \
!     flush_quick_stack (); \
!     expand_start_case (0, selector, type, "switch statement");\
      while (--npairs >= 0) \
        { \
  	jint match = IMMEDIATE_s4; jint offset = IMMEDIATE_s4; \
! 	tree value = build_int_2 (match, match < 0 ? -1 : 0); \
! 	TREE_TYPE (value) = type; \
! 	label =  build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); \
! 	pushcase (value, convert, label, &duplicate); \
! 	expand_java_goto (oldpc + offset); \
        } \
-     label =  build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); \
-     pushcase (NULL_TREE, 0, label, &duplicate); \
-     expand_java_goto (oldpc + default_offset); \
-     expand_end_case (selector); \
    }
  
  #define TABLE_SWITCH \
    { jint default_offset = IMMEDIATE_s4; \
      jint low = IMMEDIATE_s4; jint high = IMMEDIATE_s4; \
      tree selector = pop_value (INT_type_node); \
!     tree duplicate, label; \
!     tree type = TREE_TYPE (selector); \
!     flush_quick_stack (); \
!     expand_start_case (0, selector, type, "switch statement");\
      for (; low <= high; low++) \
        { \
          jint offset = IMMEDIATE_s4; \
!         tree value = build_int_2 (low, low < 0 ? -1 : 0); \
!         TREE_TYPE (value) = type; \
!         label =  build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); \
!         pushcase (value, convert, label, &duplicate); \
!         expand_java_goto (oldpc + offset); \
        } \
-     label =  build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); \
-     pushcase (NULL_TREE, 0, label, &duplicate); \
-     expand_java_goto (oldpc + default_offset); \
-     expand_end_case (selector); \
    }
  
  #define INVOKE(MAYBE_STATIC, IS_INTERFACE) \
--- 3168,3191 ----
  #define LOOKUP_SWITCH \
    { jint default_offset = IMMEDIATE_s4;  jint npairs = IMMEDIATE_s4; \
      tree selector = pop_value (INT_type_node); \
!     tree switch_expr = expand_java_switch (selector, oldpc + default_offset); \
      while (--npairs >= 0) \
        { \
  	jint match = IMMEDIATE_s4; jint offset = IMMEDIATE_s4; \
! 	expand_java_add_case (switch_expr, match, oldpc + offset); \
        } \
    }
  
  #define TABLE_SWITCH \
    { jint default_offset = IMMEDIATE_s4; \
      jint low = IMMEDIATE_s4; jint high = IMMEDIATE_s4; \
      tree selector = pop_value (INT_type_node); \
!     tree switch_expr = expand_java_switch (selector, oldpc + default_offset); \
      for (; low <= high; low++) \
        { \
          jint offset = IMMEDIATE_s4; \
! 	expand_java_add_case (switch_expr, low, oldpc + offset); \
        } \
    }
  
  #define INVOKE(MAYBE_STATIC, IS_INTERFACE) \
*************** process_jvm_instruction (int PC, const u
*** 3129,3144 ****
  
  /* internal macro added for use by the WIDE case 
     Added TREE_TYPE (decl) assignment, apbianco  */
! #define STORE_INTERNAL(OPTYPE, OPVALUE)			\
!   {							\
!     tree decl, value;					\
!     int var = OPVALUE;					\
!     tree type = OPTYPE;					\
!     value = pop_value (type);				\
!     type = TREE_TYPE (value);				\
!     decl = find_local_variable (var, type, oldpc);	\
!     set_local_type (var, type );			\
!     expand_assignment (decl, value, 0);			\
    }
  
  #define STORE(OPERAND_TYPE, OPERAND_VALUE) \
--- 3250,3266 ----
  
  /* internal macro added for use by the WIDE case 
     Added TREE_TYPE (decl) assignment, apbianco  */
! #define STORE_INTERNAL(OPTYPE, OPVALUE)				\
!   {								\
!     tree decl, value;						\
!     int index = OPVALUE;					\
!     tree type = OPTYPE;						\
!     value = pop_value (type);					\
!     type = TREE_TYPE (value);					\
!     decl = find_local_variable (index, type, oldpc);		\
!     set_local_type (index, type);				\
!     java_add_stmt (build2 (MODIFY_EXPR, type, decl, value));	\
!     update_aliases (decl, index, PC);				\
    }
  
  #define STORE(OPERAND_TYPE, OPERAND_VALUE) \
*************** process_jvm_instruction (int PC, const u
*** 3161,3167 ****
      flush_quick_stack ();			\
      c = build_java_monitor (call, o);		\
      TREE_SIDE_EFFECTS (c) = 1;			\
!     expand_expr_stmt (c);			\
    }
  
  #define SPECIAL_IINC(IGNORED) \
--- 3283,3289 ----
      flush_quick_stack ();			\
      c = build_java_monitor (call, o);		\
      TREE_SIDE_EFFECTS (c) = 1;			\
!     java_add_stmt (c);				\
    }
  
  #define SPECIAL_IINC(IGNORED) \
*************** force_evaluation_order (tree node)
*** 3377,3385 ****
      {
        tree arg, cmp;
  
-       if (!TREE_OPERAND (node, 1))
- 	return node;
- 
        arg = node;
        
        /* Position arg properly, account for wrapped around ctors. */
--- 3499,3504 ----
*************** force_evaluation_order (tree node)
*** 3388,3394 ****
        
        arg = TREE_OPERAND (arg, 1);
        
!       /* Not having a list of argument here is an error. */ 
        if (TREE_CODE (arg) != TREE_LIST)
          abort ();
  
--- 3507,3517 ----
        
        arg = TREE_OPERAND (arg, 1);
        
!       /* An empty argument list is ok, just ignore it.  */
!       if (!arg)
! 	return node;
! 
!       /* Not having a list of arguments here is an error. */ 
        if (TREE_CODE (arg) != TREE_LIST)
          abort ();
  
*************** force_evaluation_order (tree node)
*** 3397,3403 ****
  	{
  	  tree saved = save_expr (force_evaluation_order (TREE_VALUE (arg)));
  	  cmp = (cmp == NULL_TREE ? saved :
! 		 build (COMPOUND_EXPR, void_type_node, cmp, saved));
  	  TREE_VALUE (arg) = saved;
  	}
        
--- 3520,3526 ----
  	{
  	  tree saved = save_expr (force_evaluation_order (TREE_VALUE (arg)));
  	  cmp = (cmp == NULL_TREE ? saved :
! 		 build2 (COMPOUND_EXPR, void_type_node, cmp, saved));
  	  TREE_VALUE (arg) = saved;
  	}
        
*************** force_evaluation_order (tree node)
*** 3406,3412 ****
  
        if (cmp)
  	{
! 	  cmp = save_expr (build (COMPOUND_EXPR, TREE_TYPE (node), cmp, node));
  	  CAN_COMPLETE_NORMALLY (cmp) = CAN_COMPLETE_NORMALLY (node);
  	  TREE_SIDE_EFFECTS (cmp) = 1;
  	  node = cmp;
--- 3529,3537 ----
  
        if (cmp)
  	{
! 	  cmp = build2 (COMPOUND_EXPR, TREE_TYPE (node), cmp, node);
! 	  if (TREE_TYPE (cmp) != void_type_node)
! 	    cmp = save_expr (cmp);
  	  CAN_COMPLETE_NORMALLY (cmp) = CAN_COMPLETE_NORMALLY (node);
  	  TREE_SIDE_EFFECTS (cmp) = 1;
  	  node = cmp;
*************** force_evaluation_order (tree node)
*** 3415,3451 ****
    return node;
  }
  
! /* Called for every element in DECL_FUNCTION_INIT_TEST_TABLE of a
!    method in order to emit initialization code for each test flag.  */
  
! static int
! emit_init_test_initialization (void **entry, void *x ATTRIBUTE_UNUSED)
  {
!   struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
!   tree klass = build_class_ref (ite->key);
!   tree rhs;
  
!   /* If the DECL_INITIAL of the test flag is set to true, it
!      means that the class is already initialized the time it
!      is in use. */
!   if (DECL_INITIAL (ite->value) == boolean_true_node)
!     rhs = boolean_true_node;
!   /* Otherwise, we initialize the class init check variable by looking
!      at the `state' field of the class to see if it is already
!      initialized.  This makes things a bit faster if the class is
!      already initialized, which should be the common case.  */
!   else
!     rhs = build (GE_EXPR, boolean_type_node,
! 		 build (COMPONENT_REF, byte_type_node,
! 			build1 (INDIRECT_REF, class_type_node, klass),
! 			lookup_field (&class_type_node,
! 				      get_identifier ("state"))),
! 		 build_int_2 (JV_STATE_DONE, 0));
  
!   expand_expr_stmt (build (MODIFY_EXPR, boolean_type_node, 
! 			   ite->value, rhs));
!   return true;
  }
  
! #include "gt-java-expr.h"
  
--- 3540,3658 ----
    return node;
  }
  
! /* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
!    location where an expression or an identifier were encountered. It
!    is necessary for languages where the frontend parser will handle
!    recursively more than one file (Java is one of them).  */
  
! tree
! build_expr_wfl (tree node,
! #ifdef USE_MAPPED_LOCATION
! 		source_location location
! #else
! 		const char *file, int line, int col
! #endif
! )
  {
!   tree wfl;
  
! #ifdef USE_MAPPED_LOCATION
!   wfl = make_node (EXPR_WITH_FILE_LOCATION);
!   SET_EXPR_LOCATION (wfl, location);
! #else
!   static const char *last_file = 0;
!   static tree last_filenode = NULL_TREE;
  
!   wfl = make_node (EXPR_WITH_FILE_LOCATION);
! 
!   EXPR_WFL_SET_LINECOL (wfl, line, col);
!   if (file != last_file)
!     {
!       last_file = file;
!       last_filenode = file ? get_identifier (file) : NULL_TREE;
!     }
!   EXPR_WFL_FILENAME_NODE (wfl) = last_filenode;
! #endif
!   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);
!     }
! 
!   return wfl;
  }
  
! #ifdef USE_MAPPED_LOCATION
! tree
! expr_add_location (tree node, source_location location, bool statement)
! {
!   tree wfl;
! #if 0
!   /* FIXME. This optimization causes failures in code that expects an
!      EXPR_WITH_FILE_LOCATION.  E.g. in resolve_qualified_expression_name. */
!   if (node && ! (statement && flag_emit_class_files))
!     {
!       source_location node_loc = EXPR_LOCATION (node);
!       if (node_loc == location || location == UNKNOWN_LOCATION)
! 	return node;
!       if (node_loc == UNKNOWN_LOCATION
! 	  && IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (node))))
! 	{
! 	  SET_EXPR_LOCATION (node, location);
! 	  return node;
! 	}
!     }
! #endif
!   wfl = make_node (EXPR_WITH_FILE_LOCATION);
!   SET_EXPR_LOCATION (wfl, location);
!   EXPR_WFL_NODE (wfl) = node;
!   if (statement && debug_info_level != DINFO_LEVEL_NONE)
!     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);
!     }
! 
!   return wfl;
! }
! #endif
! 
! /* Build a node to represent empty statements and blocks. */
  
+ tree
+ build_java_empty_stmt (void)
+ {
+   tree t = build_empty_stmt ();
+   CAN_COMPLETE_NORMALLY (t) = 1;
+   return t;
+ }
+ 
+ /* Promote all args of integral type before generating any code.  */
+ 
+ static void
+ promote_arguments (void)
+ {
+   int i;
+   tree arg;
+   for (arg = DECL_ARGUMENTS (current_function_decl), i = 0;
+        arg != NULL_TREE;  arg = TREE_CHAIN (arg), i++)
+     {
+       tree arg_type = TREE_TYPE (arg);
+       if (INTEGRAL_TYPE_P (arg_type)
+ 	  && TYPE_PRECISION (arg_type) < 32)
+ 	{
+ 	  tree copy = find_local_variable (i, integer_type_node, -1);
+ 	  java_add_stmt (build2 (MODIFY_EXPR, integer_type_node,
+ 				 copy,
+ 				 fold_convert (integer_type_node, arg)));
+ 	}
+       if (TYPE_IS_WIDE (arg_type))
+ 	i++;
+     }
+ }
+ 
+ #include "gt-java-expr.h"
diff -Nrcpad gcc-3.4.3/gcc/java/gcj.texi gcc-4.0.0/gcc/java/gcj.texi
*** gcc-3.4.3/gcc/java/gcj.texi	Tue Mar 23 17:48:38 2004
--- gcc-4.0.0/gcc/java/gcj.texi	Thu Apr  7 15:45:56 2005
***************
*** 10,16 ****
  @c the word ``Java'.
  
  @c When this manual is copyrighted.
! @set copyrights-gcj 2001, 2002
  
  @c Versions
  @set which-gcj GCC-@value{version-GCC}
--- 10,16 ----
  @c the word ``Java'.
  
  @c When this manual is copyrighted.
! @set copyrights-gcj 2001, 2002, 2003, 2004, 2005
  
  @c Versions
  @set which-gcj GCC-@value{version-GCC}
*************** man page gfdl(7).
*** 64,74 ****
  * jcf-dump: (gcj)Invoking jcf-dump.
                              Print information about Java class files
  * gij: (gcj)Invoking gij.   GNU interpreter for Java bytecode
  * jv-convert: (gcj)Invoking jv-convert.
                              Convert file from one encoding to another
! * rmic: (gcj)Invoking rmic.
                              Generate stubs for Remote Method Invocation.
! * rmiregistry: (gcj)Invoking rmiregistry.
                              The remote object registry.
  @end direntry
  @end format
--- 64,76 ----
  * jcf-dump: (gcj)Invoking jcf-dump.
                              Print information about Java class files
  * gij: (gcj)Invoking gij.   GNU interpreter for Java bytecode
+ * gcj-dbtool: (gcj)Invoking gcj-dbtool.
+                             Tool for manipulating class file databases.
  * jv-convert: (gcj)Invoking jv-convert.
                              Convert file from one encoding to another
! * grmic: (gcj)Invoking grmic.
                              Generate stubs for Remote Method Invocation.
! * grmiregistry: (gcj)Invoking grmiregistry.
                              The remote object registry.
  @end direntry
  @end format
*************** files and object files, and it can read 
*** 112,120 ****
  * Invoking jv-scan::    Print information about source files
  * Invoking jcf-dump::   Print information about class files
  * Invoking gij::	Interpreting Java bytecodes
  * Invoking jv-convert:: Converting from one encoding to another
! * Invoking rmic::        Generate stubs for Remote Method Invocation.
! * Invoking rmiregistry:: The remote object registry.
  * About CNI::           Description of the Compiled Native Interface
  * System properties::   Modifying runtime behavior of the libgcj library
  * Resources::		Where to look for more information
--- 114,123 ----
  * Invoking jv-scan::    Print information about source files
  * Invoking jcf-dump::   Print information about class files
  * Invoking gij::	Interpreting Java bytecodes
+ * Invoking gcj-dbtool:: Tool for manipulating class file databases.
  * Invoking jv-convert:: Converting from one encoding to another
! * Invoking grmic::      Generate stubs for Remote Method Invocation.
! * Invoking grmiregistry:: The remote object registry.
  * About CNI::           Description of the Compiled Native Interface
  * System properties::   Modifying runtime behavior of the libgcj library
  * Resources::		Where to look for more information
*************** options specific to @command{gcj}.
*** 161,166 ****
--- 164,170 ----
  * Input Options::		How gcj finds files
  * Encodings::                   Options controlling source file encoding
  * Warnings::			Options controlling warnings specific to gcj
+ * Linking::			Options for making an executable
  * Code Generation::		Options controlling the output of gcj
  * Configure-time Options::	Options you won't use
  @end menu
*************** Java bytecode files.
*** 184,190 ****
  An archive containing one or more @code{.class} files, all of
  which are compiled.  The archive may be compressed.  Files in
  an archive which don't end with @samp{.class} are treated as
! resource files; they are copmiled into the resulting object file
  as @samp{core:} URLs.
  @item @@@var{file}
  A file containing a whitespace-separated list of input file names.
--- 188,194 ----
  An archive containing one or more @code{.class} files, all of
  which are compiled.  The archive may be compressed.  Files in
  an archive which don't end with @samp{.class} are treated as
! resource files; they are compiled into the resulting object file
  as @samp{core:} URLs.
  @item @@@var{file}
  A file containing a whitespace-separated list of input file names.
*************** This is the same as @code{-Wredundant-mo
*** 353,373 ****
  @end table
  
  
! @node Code Generation
! @section Code Generation
  
! In addition to the many @command{gcc} options controlling code generation,
! @command{gcj} has several options specific to itself.
  
  @table @gcctabopt
  @item --main=@var{CLASSNAME}
  This option is used when linking to specify the name of the class whose
  @code{main} method should be invoked when the resulting executable is
! run.  @footnote{The linker by default looks for a global function named
! @code{main}.  Since Java does not have global functions, and a
! collection of Java classes may have more than one class with a
! @code{main} method, you need to let the linker know which of those
! @code{main} methods it should invoke when starting the application.}
  
  @item -D@var{name}[=@var{value}]
  This option can only be used with @code{--main}.  It defines a system
--- 357,401 ----
  @end table
  
  
! @node Linking
! @section Linking
  
! To turn a Java application into an executable program,
! you need to link it with the needed libraries, just as for C or C++.
! The linker by default looks for a global function named @code{main}.
! Since Java does not have global functions, and a
! collection of Java classes may have more than one class with a
! @code{main} method, you need to let the linker know which of those
! @code{main} methods it should invoke when starting the application.
! You can do that in any of these ways:
! 
! @itemize @bullet
! @item
! Specify the class containing the desired @code{main} method
! when you link the application, using the @code{--main} flag,
! described below.
! @item
! Link the Java package(s) into a shared library (dll) rather than an
! executable.  Then invoke the application using the @code{gij} program,
! making sure that @code{gij} can find the libraries it needs.
! @item
! Link the Java packages(s) with the flag @code{-lgij}, which links
! in the @code{main} routine from the @code{gij} command.
! This allows you to select the class whose @code{main} method you
! want to run when you run the application.  You can also use
! other @code{gij} flags, such as @code{-D} flags to set properties.
! Using the @code{-lgij} library (rather than the @code{gij} program
! of the previous mechanism) has some advantages: it is compatible with
! static linking, and does not require configuring or installing libraries.
! @end itemize
! 
! These @code{gij} options relate to linking an executable:
  
  @table @gcctabopt
  @item --main=@var{CLASSNAME}
  This option is used when linking to specify the name of the class whose
  @code{main} method should be invoked when the resulting executable is
! run.
  
  @item -D@var{name}[=@var{value}]
  This option can only be used with @code{--main}.  It defines a system
*************** specified then it defaults to the empty 
*** 376,381 ****
--- 404,424 ----
  are initialized at the program's startup and can be retrieved at runtime
  using the @code{java.lang.System.getProperty} method.
  
+ @item -lgij
+ Create an application whose command-line processing is that
+ of the @code{gij} command.
+ 
+ This option is an alternative to using @code{--main}; you cannot use both.
+ @end table
+ 
+ @node Code Generation
+ @section Code Generation
+ 
+ In addition to the many @command{gcc} options controlling code generation,
+ @command{gcj} has several options specific to itself.
+ 
+ @table @gcctabopt
+ 
  @item -C
  This option is used to tell @command{gcj} to generate bytecode
  (@file{.class} files) rather than object code.
*************** to initialize static classes upon their 
*** 431,436 ****
--- 474,517 ----
  isn't carried out if @code{-C} was specified.) When compiling to native
  code, @code{-fno-optimize-static-class-initialization} will turn this
  optimization off, regardless of the optimization level in use.
+ 
+ @item --disable-assertions[=@var{class-or-package}]
+ Don't include code for checking assertions in the compiled code.
+ If @code{=@var{class-or-package}} is missing disables assertion code
+ generation for all classes, unless overridden by a more
+ specific @code{--enable-assertions} flag.
+ If @var{class-or-package} is a class name, only disables generating
+ assertion checks within the named class or its inner classes.
+ If @var{class-or-package} is a package name, disables generating
+ assertion checks within the named package or a subpackage.
+ 
+ By default, assertions are enabled when generating class files
+ or when not optimizing, and disabled when generating optimized binaries.
+ 
+ @item --enable-assertions[=@var{class-or-package}]
+ Generates code to check assertions.  The option is perhaps misnamed,
+ as you still need to turn on assertion checking at run-time,
+ and we don't support any easy way to do that.
+ So this flag isn't very useful yet, except to partially override
+ @code{--disable-assertions}.
+ 
+ @item -findirect-dispatch
+ @command{gcj} has a special binary compatibility ABI, which is enabled
+ by the @code{-findirect-dispatch} option.  In this mode, the code
+ generated by @command{gcj} honors the binary compatibility guarantees
+ in the Java Language Specification, and the resulting object files do
+ not need to be directly linked against their dependencies.  Instead,
+ all dependencies are looked up at runtime.  This allows free mixing of
+ interpreted and compiled code.
+ 
+ Note that, at present, @code{-findirect-dispatch} can only be used
+ when compiling @file{.class} files.  It will not work when compiling
+ from source.  CNI also does not yet work with the binary compatibility
+ ABI.  These restrictions will be lifted in some future release.
+ 
+ However, if you compile CNI code with the standard ABI, you can call
+ it from code built with the binary compatibility ABI.
+ 
  @end table
  
  
*************** or file name.
*** 772,777 ****
--- 853,862 ----
  @item -c
  Disassemble method bodies.  By default method bodies are not printed.
  
+ @item --print-constants
+ Print the constant pool.  When printing a reference to a constant
+ also print its index in the constant pool.
+ 
  @item --javap
  Generate output in @code{javap} format.  The implementation of this
  feature is very incomplete.
*************** Print version number, then exit.
*** 790,795 ****
--- 875,881 ----
  
  @item -v, --verbose
  Print extra information while running.
+ Implies @code{--print-constants}.
  @end table
  
  @c man end
*************** gij [@option{-jar}] [@option{OPTION}] @d
*** 807,813 ****
    [@option{-cp} @var{path}] [@option{-classpath} @var{path}]
    [@option{-D}@var{name}[=@var{value}]@dots{}]
    [@option{-ms=}@var{number}] [@option{-mx=}@var{number}]
!   [@option{-X@var{argument}]
    [@option{--showversion}] [@option{--version}] [@option{--help}][@option{-?}]
  @c man end
  @c man begin SEEALSO gij
--- 893,899 ----
    [@option{-cp} @var{path}] [@option{-classpath} @var{path}]
    [@option{-D}@var{name}[=@var{value}]@dots{}]
    [@option{-ms=}@var{number}] [@option{-mx=}@var{number}]
!   [@option{-X@var{argument}}] [@option{-verbose}] [@option{-verbose:class}]
    [@option{--showversion}] [@option{--version}] [@option{--help}][@option{-?}]
  @c man end
  @c man begin SEEALSO gij
*************** be retrieved at runtime using the @code{
*** 863,878 ****
  method.
  
  @item -ms=@var{number}
! This sets the initial heap size.
  
  @item -mx=@var{number}
! This sets the maximum heap size.
  
  @item -X
  @itemx -X@var{argument}
  Supplying @code{-X} by itself will cause @code{gij} to list all the
! supported @code{-X} options.  Currently there are none.  Unrecognized
! @code{-X} options are ignored, for compatibility with other runtimes.
  
  @item -jar
  This indicates that the name passed to @code{gij} should be interpreted
--- 949,974 ----
  method.
  
  @item -ms=@var{number}
! Equivalent to @code{-Xms}.
  
  @item -mx=@var{number}
! Equivalent to @code{-Xmx}.
  
  @item -X
  @itemx -X@var{argument}
  Supplying @code{-X} by itself will cause @code{gij} to list all the
! supported @code{-X} options.  Currently these options are supported:
! 
! @table @gcctabopt
! @item -Xms@var{size}
! Set the initial heap size.
! 
! @item -Xmx@var{size}
! Set the maximum heap size.
! @end table
! 
! Unrecognized @code{-X} options are ignored, for compatibility with
! other runtimes.
  
  @item -jar
  This indicates that the name passed to @code{gij} should be interpreted
*************** Print help, then exit.
*** 885,892 ****
--- 981,1092 ----
  @item --showversion
  Print version number and continue.
  
+ @item --fullversion
+ Print detailed version information, then exit.
+ 
  @item --version
  Print version number, then exit.
+ 
+ @item -verbose
+ @itemx -verbose:class
+ Each time a class is initialized, print a short message on standard error.
+ @end table
+ 
+ @code{gij} also recognizes and ignores the following options, for
+ compatibility with existing application launch scripts:
+ @code{-client}, @code{-server}, @code{-hotspot}, @code{-jrockit},
+ @code{-agentlib}, @code{-agentpath}, @code{-debug}, @code{-d32},
+ @code{-d64}, @code{-javaagent} and @code{-noclassgc}.
+ 
+ @c man end
+ 
+ @node Invoking gcj-dbtool
+ @chapter Invoking gcj-dbtool.
+ 
+ @c man title gcj-dbtool Manipulate class file mapping databases for libgcj
+ 
+ @ignore
+ @c man begin SYNOPSIS gcj-dbtool
+ gcj-dbtool @option{OPTION} @var{DBFILE} [@option{MORE}] @dots{}
+ 
+ gcj-dbtool [@option{-0}] [@option{-}] [@option{-n}] [@option{-a}] [@option{-f}]
+   [@option{-t}] [@option{-l}] [@option{-p} [@var{LIBDIR}]]
+   [@option{-v}] [@option{-m}] [@option{--version}] [@option{--help}]
+ 
+ @c man end
+ @c man begin SEEALSO gij
+ gcc(1), gcj(1), gcjh(1), jv-scan(1), jcf-dump(1), gfdl(7),
+ and the Info entries for @file{gcj} and @file{gcc}.
+ @c man end
+ @end ignore
+ 
+ @c man begin DESCRIPTION gcj-dbtool
+ 
+ @code{gcj-dbtool} is a tool for creating and manipulating class file
+ mapping databases.  @code{libgcj} can use these databases to find a
+ shared library corresponding to the bytecode representation of a
+ class.  This functionality is useful for ahead-of-time compilation of
+ a program that has no knowledge of @code{gcj}.
+ 
+ @code{gcj-dbtool} works best if all the jar files added to it are
+ compiled using @code{-findirect-dispatch}.
+ 
+ Note that @code{gcj-dbtool} is currently available as ``preview
+ technology''.  We believe it is a reasonable way to allow
+ application-transparent ahead-of-time compilation, but this is an
+ unexplored area.  We welcome your comments.
+ 
+ @c man end
+ 
+ @c man begin OPTIONS gcj-dbtool
+ 
+ @table @gcctabopt
+ @item -n @var{DBFILE} [@var{SIZE}]
+ This creates a new database.  Currently, databases cannot be resized;
+ you can choose a larger initial size if desired.  The default size is
+ 32,749.
+ 
+ @item -a @var{DBFILE} @var{JARFILE} @var{LIB}
+ @itemx -f @var{DBFILE} @var{JARFILE} @var{LIB}
+ This adds a jar file to the database.  For each class file in the jar,
+ a cryptographic signature of the bytecode representation of the class
+ is recorded in the database.  At runtime, a class is looked up by its
+ signature and the compiled form of the class is looked for in the
+ corresponding shared library.  The @option{-a} option will verify
+ that @var{LIB} exists before adding it to the database; @option{-f}
+ skips this check.
+ 
+ @item [@option{-}][@option{-0}] -m @var{DBFILE} @var{DBFILE},[@var{DBFILE}]
+ Merge a number of databases.  The output database overwrites any
+ existing database.  To add databases into an existing database,
+ include the destination in the list of sources.
+ 
+ If @option{-} or @option{-0} are used, the list of files to read is
+ taken from standard input instead of the command line.  For
+ @option{-0}, Input filenames are terminated by a null character
+ instead of by whitespace.  Useful when arguments might contain white
+ space.  The GNU find -print0 option produces input suitable for this
+ mode.
+ 
+ @item -t @var{DBFILE}
+ Test a database.
+ 
+ @item -l @var{DBFILE}
+ List the contents of a database.
+ 
+ @item -p
+ Print the name of the default database.  If there is no default
+ database, this prints a blank line.  If @var{LIBDIR} is specified, use
+ it instead of the default library directory component of the database
+ name.
+ 
+ @item --help
+ Print a help message, then exit.
+ 
+ @item --version
+ @itemx -v
+ Print version information, then exit.
+ 
  @end table
  
  @c man end
*************** Print version information, then exit.
*** 950,962 ****
  
  @c man end
  
! @node Invoking rmic
! @chapter Invoking rmic
  
! @c man title rmic Generate stubs for Remote Method Invocation
  
! @c man begin SYNOPSIS rmic
! @command{rmic} [@option{OPTION}] @dots{} @var{class} @dots{}
  @ignore
    [@option{-keep}]
    [@option{-keepgenerated}]
--- 1150,1162 ----
  
  @c man end
  
! @node Invoking grmic
! @chapter Invoking grmic
  
! @c man title grmic Generate stubs for Remote Method Invocation
  
! @c man begin SYNOPSIS grmic
! @command{grmic} [@option{OPTION}] @dots{} @var{class} @dots{}
  @ignore
    [@option{-keep}]
    [@option{-keepgenerated}]
*************** Print version information, then exit.
*** 971,986 ****
  @end ignore
  @c man end
  
! @c man begin DESCRIPTION rmic
  
! @command{rmic} is a utility included with @code{libgcj} which generates
  stubs for remote objects.
  
  @c FIXME: Add real information here.
  @c This really isn't much more than the --help output.
  
  Note that this program isn't yet fully compatible with the JDK
! @command{rmic}.  Some options, such as @option{-classpath}, are
  recognized but currently ignored.  We have left these options
  undocumented for now.
  
--- 1171,1186 ----
  @end ignore
  @c man end
  
! @c man begin DESCRIPTION grmic
  
! @command{grmic} is a utility included with @code{libgcj} which generates
  stubs for remote objects.
  
  @c FIXME: Add real information here.
  @c This really isn't much more than the --help output.
  
  Note that this program isn't yet fully compatible with the JDK
! @command{grmic}.  Some options, such as @option{-classpath}, are
  recognized but currently ignored.  We have left these options
  undocumented for now.
  
*************** instance, @option{--help} is accepted.
*** 989,1019 ****
  
  @c man end
  
! @c man begin OPTIONS rmic
  
  @table @gcctabopt
  @item -keep
  @itemx -keepgenerated
! By default, @command{rmic} deletes intermediate files.  Either of these
  options causes it not to delete such files.
  
  @item -v1.1
! Cause @command{rmic} to create stubs and skeletons for the 1.1
  protocol version.
  
  @item -vcompat
! Cause @command{rmic} to create stubs and skeletons compatible with both
  the 1.1 and 1.2 protocol versions.  This is the default.
  
  @item -v1.2
! Cause @command{rmic} to create stubs and skeletons for the 1.2
  protocol version.
  
  @item -nocompile
  Don't compile the generated files.
  
  @item -verbose
! Print information about what @command{rmic} is doing.
  
  @item -d @var{directory}
  Put output files in @var{directory}.  By default the files are put in
--- 1189,1219 ----
  
  @c man end
  
! @c man begin OPTIONS grmic
  
  @table @gcctabopt
  @item -keep
  @itemx -keepgenerated
! By default, @command{grmic} deletes intermediate files.  Either of these
  options causes it not to delete such files.
  
  @item -v1.1
! Cause @command{grmic} to create stubs and skeletons for the 1.1
  protocol version.
  
  @item -vcompat
! Cause @command{grmic} to create stubs and skeletons compatible with both
  the 1.1 and 1.2 protocol versions.  This is the default.
  
  @item -v1.2
! Cause @command{grmic} to create stubs and skeletons for the 1.2
  protocol version.
  
  @item -nocompile
  Don't compile the generated files.
  
  @item -verbose
! Print information about what @command{grmic} is doing.
  
  @item -d @var{directory}
  Put output files in @var{directory}.  By default the files are put in
*************** Print version information, then exit.
*** 1029,1050 ****
  @c man end
  
  
! @node Invoking rmiregistry
! @chapter Invoking rmiregistry
  
! @c man title rmiregistry Remote object registry
  
! @c man begin SYNOPSIS rmiregistry
! @command{rmic} [@option{OPTION}] @dots{} [@var{port}]
  @ignore
    [@option{--help}]
    [@option{--version}]
  @end ignore
  @c man end
  
! @c man begin DESCRIPTION rmiregistry
  
! @command{rmiregistry} starts a remote object registry on the current
  host.  If no port number is specified, then port 1099 is used.
  
  @c FIXME: Add real information here.
--- 1229,1250 ----
  @c man end
  
  
! @node Invoking grmiregistry
! @chapter Invoking grmiregistry
  
! @c man title grmiregistry Remote object registry
  
! @c man begin SYNOPSIS grmiregistry
! @command{grmic} [@option{OPTION}] @dots{} [@var{port}]
  @ignore
    [@option{--help}]
    [@option{--version}]
  @end ignore
  @c man end
  
! @c man begin DESCRIPTION grmiregistry
  
! @command{grmiregistry} starts a remote object registry on the current
  host.  If no port number is specified, then port 1099 is used.
  
  @c FIXME: Add real information here.
*************** host.  If no port number is specified, t
*** 1052,1058 ****
  
  @c man end
  
! @c man begin OPTIONS rmiregistry
  
  @table @gcctabopt
  @item --help
--- 1252,1258 ----
  
  @c man end
  
! @c man begin OPTIONS grmiregistry
  
  @table @gcctabopt
  @item --help
*************** alternative to the standard JNI (Java Na
*** 1081,1086 ****
--- 1281,1287 ----
  * Objects and Classes::         C++ and Java classes.
  * Class Initialization::        How objects are initialized.
  * Object allocation::           How to create Java objects in C++.
+ * Memory allocation::           How to allocate and free memory.
  * Arrays::                      Dealing with Java arrays in C++.
  * Methods::                     Java methods in C++.
  * Strings::                     Information about Java Strings.
*************** macros start with the @code{Jv} prefix, 
*** 1145,1153 ****
  @code{JvNewObjectArray}.  This convention is used to avoid conflicts
  with other libraries.  Internal functions in CNI start with the prefix
  @code{_Jv_}.  You should not call these; if you find a need to, let us
! know and we will try to come up with an alternate solution.  (This
! manual lists @code{_Jv_AllocBytes} as an example; CNI should instead
! provide a @code{JvAllocBytes} function.)
  
  
  @subsection Limitations
--- 1346,1352 ----
  @code{JvNewObjectArray}.  This convention is used to avoid conflicts
  with other libraries.  Internal functions in CNI start with the prefix
  @code{_Jv_}.  You should not call these; if you find a need to, let us
! know and we will try to come up with an alternate solution.
  
  
  @subsection Limitations
*************** using standard C++ overload resolution r
*** 1462,1472 ****
  java::util::Hashtable *ht = new java::util::Hashtable(120);
  @end example
  
! @deftypefun void* _Jv_AllocBytes (jsize @var{size})
! Allocates @var{size} bytes from the heap.  The memory is not scanned
! by the garbage collector but it freed if no references to it are discovered.
  @end deftypefun
  
  
  @node Arrays
  @section Arrays
--- 1661,1687 ----
  java::util::Hashtable *ht = new java::util::Hashtable(120);
  @end example
  
! 
! @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:
! 
! @deftypefun void* JvMalloc (jsize @var{size})
! Calls malloc.  Throws @code{java.lang.OutOfMemoryError} if allocation
! fails.
  @end deftypefun
  
+ @deftypefun void* JvRealloc (void* @var{ptr}, jsize @var{size})
+ Calls realloc.  Throws @code{java.lang.OutOfMemoryError} if
+ reallocation fails.
+ @end deftypefun
+ 
+ @deftypefun void JvFree (void* @var{ptr})
+ Calls free.
+ @end deftypefun
  
  @node Arrays
  @section Arrays
*************** jint
*** 1758,1768 ****
  @}
  @end example
  
! But this restriction can cause a problem so @acronym{CNI} includes the
  @code{gnu.gcj.RawData} class.  The @code{RawData} class is a
  @dfn{non-scanned reference} type.  In other words variables declared
  of type @code{RawData} can contain any data and are not checked by the
! compiler in any way.
  
  This means that you can put C/C++ data structures (including classes)
  in your @acronym{CNI} classes, as long as you use the appropriate cast.
--- 1973,1985 ----
  @}
  @end example
  
! @subsection RawData
! 
! The above restriction can be problematic, so @acronym{CNI} includes the
  @code{gnu.gcj.RawData} class.  The @code{RawData} class is a
  @dfn{non-scanned reference} type.  In other words variables declared
  of type @code{RawData} can contain any data and are not checked by the
! compiler or memory manager in any way.
  
  This means that you can put C/C++ data structures (including classes)
  in your @acronym{CNI} classes, as long as you use the appropriate cast.
*************** void
*** 1800,1805 ****
--- 2017,2059 ----
  @end example
  
  
+ @subsection RawDataManaged
+ 
+ @code{gnu.gcj.RawDataManaged} is another type used to indicate special data used 
+ by native code. Unlike the @code{RawData} type, fields declared as 
+ @code{RawDataManaged} will be "marked" by the memory manager and 
+ considered for garbage collection.  
+ 
+ Native data which is allocated using CNI's @code{JvAllocBytes()}
+ function and stored in a @code{RawDataManaged} will be automatically 
+ freed when the Java object it is associated with becomes unreachable.
+ 
+ @subsection Native memory allocation
+ 
+ @deftypefun void* JvAllocBytes (jsize @var{size})
+ Allocates @var{size} bytes from the heap.  The memory returned is zeroed.
+ This memory is not scanned for pointers by the garbage collector, but will 
+ be freed if no references to it are discovered.
+ 
+ This function can be useful if you need to associate some native data with a
+ Java object. Using a CNI's special @code{RawDataManaged} type, native data 
+ allocated with @code{JvAllocBytes} will be automatically freed when the Java 
+ object itself becomes unreachable.
+ @end deftypefun
+ 
+ @subsection Posix signals
+ 
+ On Posix based systems the @code{libgcj} library uses several signals
+ internally.  @acronym{CNI} code should not attempt to use the same
+ signals as doing so may cause @code{libgcj} and/or the @acronym{CNI}
+ code to fail.
+ 
+ SIGSEGV is used on many systems to generate
+ @code{NullPointerExceptions}.  SIGCHLD is used internally by
+ @code{Runtime.exec()}.  Several other signals (that vary from platform to
+ platform) can be used by the memory manager and by
+ @code{Thread.interrupt()}.
+ 
  @node Exception Handling
  @section Exception Handling
  
*************** CNI permits C++ applications to make cal
*** 1919,1925 ****
  allowing Java code to call into C++. Several functions, known as the 
  @dfn{invocation API}, are provided to support this.
  
! @deftypefun jint JvCreateJavaVM (void* @var{vm_args})
  Initializes the Java runtime. This function performs essential initialization
  of the threads interface, garbage collector, exception handling and other key
  aspects of the runtime. It must be called once by an application with
--- 2173,2180 ----
  allowing Java code to call into C++. Several functions, known as the 
  @dfn{invocation API}, are provided to support this.
  
! @deftypefun jint JvCreateJavaVM (JvVMInitArgs* @var{vm_args})
! 
  Initializes the Java runtime. This function performs essential initialization
  of the threads interface, garbage collector, exception handling and other key
  aspects of the runtime. It must be called once by an application with
*************** It is safe, but not recommended, to call
*** 1928,1938 ****
  once provided it is only called from a single thread.
  The @var{vmargs} parameter can be used to specify initialization parameters 
  for the Java runtime. It may be @code{NULL}.
- This function returns @code{0} upon success, or @code{-1} if the runtime is
- already initialized.
  
! @emph{Note:} In GCJ 3.1, the @code{vm_args} parameter is ignored. It may be 
! used in a future release.
  @end deftypefun
  
  @deftypefun java::lang::Thread* JvAttachCurrentThread (jstring @var{name}, java::lang::ThreadGroup* @var{group})
--- 2183,2222 ----
  once provided it is only called from a single thread.
  The @var{vmargs} parameter can be used to specify initialization parameters 
  for the Java runtime. It may be @code{NULL}.
  
! JvVMInitArgs represents a list of virtual machine initialization
! arguments. @code{JvCreateJavaVM()} ignores the version field.
! 
! @example
! typedef struct JvVMOption
! @{
!   // a VM initialization option
!   char* optionString;
!   // extra information associated with this option
!   void* extraInfo;
! @} JvVMOption;
! 
! typedef struct JvVMInitArgs
! @{
!   // for compatibility with JavaVMInitArgs
!   jint version;
! 
!   // number of VM initialization options
!   jint nOptions;
! 
!   // an array of VM initialization options
!   JvVMOption* options;
! 
!   // true if the option parser should ignore unrecognized options
!   jboolean ignoreUnrecognized;
! @} JvVMInitArgs;
! @end example
! 
! @code{JvCreateJavaVM()} returns @code{0} upon success, or @code{-1} if
! the runtime is already initialized.
! 
! @emph{Note:} In GCJ 3.1, the @code{vm_args} parameter is ignored. It
! is recognized and used as of release 4.0.
  @end deftypefun
  
  @deftypefun java::lang::Thread* JvAttachCurrentThread (jstring @var{name}, java::lang::ThreadGroup* @var{group})
*************** Currently not used in @code{libgcj}.
*** 2119,2125 ****
  
  @item java.ext.dirs
  Directories containing jar files with extra libraries.  Will be used when
! resolving classes.  Currently not used in @code{libgcj}.
  
  @item java.protocol.handler.pkgs
  A @samp{|} separated list of package names that is used to find classes that
--- 2403,2409 ----
  
  @item java.ext.dirs
  Directories containing jar files with extra libraries.  Will be used when
! resolving classes.
  
  @item java.protocol.handler.pkgs
  A @samp{|} separated list of package names that is used to find classes that
*************** the runtime is unable to do it through @
*** 2278,2288 ****
  
  @item gnu.gcj.runtime.VMClassLoader.library_control
  This controls how shared libraries are automatically loaded by the
! built-in class loader.  By default, or if this property is set to
! @samp{full}, a full search is done for each requested class.  If this
! property is set to @samp{cache}, then any failed lookups are cached
! and not tried again.  If this property is set to @samp{never}, then
! lookups are never done.  For more information, @xref{Extensions}.
  
  @end table
  
--- 2562,2606 ----
  
  @item gnu.gcj.runtime.VMClassLoader.library_control
  This controls how shared libraries are automatically loaded by the
! built-in class loader.  If this property is set to @samp{full}, a full
! search is done for each requested class.  If this property is set to
! @samp{cache} (the default), then any failed lookups are cached and not
! tried again.  If this property is set to @samp{never}, then lookups
! are never done.  For more information, @xref{Extensions}.
! 
! @item gnu.gcj.runtime.endorsed.dirs
! This is like the standard @code{java.endorsed.dirs}, property, but
! specifies some extra directories which are searched after the standard
! endorsed directories.  This is primarily useful for telling
! @code{libgcj} about additional libraries which are ordinarily
! incorporated into the JDK, and which should be loaded by the bootstrap
! class loader, but which are not yet part of @code{libgcj} itself for
! some reason.
! 
! @item gnu.gcj.jit.compiler
! @c FIXME we should probably have a whole node on this...
! This is the full path to @command{gcj} executable which should be
! used to compile classes just-in-time when
! @code{ClassLoader.defineClass} is called.  If not set, @command{gcj}
! will not be invoked by the runtime; this can also be controlled via
! @code{Compiler.disable}.
! 
! @item gnu.gcj.jit.options
! This is a space-separated string of options which should be passed to
! @command{gcj} when in JIT mode.  If not set, a sensible default is
! chosen.
! 
! @item gnu.gcj.jit.cachedir
! This is the directory where cached shared library files are
! stored.  If not set, JIT compilation is disabled.  This should never
! be set to a directory that is writable by any other user.
! 
! @item gnu.gcj.precompiled.db.path
! This is a sequence of file names, each referring to a file created by
! @command{gcj-dbtool}.  These files will be used by @code{libgcj} to
! find shared libraries corresponding to classes that are loaded from
! bytecode.  @code{libgcj} often has a built-in default database; it
! can be queried using @code{gcj-dbtool -p}.
  
  @end table
  
diff -Nrcpad gcc-3.4.3/gcc/java/gjavah.c gcc-4.0.0/gcc/java/gjavah.c
*** gcc-3.4.3/gcc/java/gjavah.c	Sat Dec 20 15:38:27 2003
--- gcc-4.0.0/gcc/java/gjavah.c	Wed Feb  2 00:44:08 2005
***************
*** 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
  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
  Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** The Free Software Foundation is independ
*** 35,45 ****
--- 35,47 ----
  
  #include "jcf.h"
  #include "tree.h"
+ #include "version.h"
  #include "javaop.h"
  #include "java-tree.h"
  #include "java-opcodes.h"
  #include "ggc.h"
  #include "hashtab.h"
+ #include "intl.h"
  
  #include <getopt.h>
  
*************** int flag_jni = 0;
*** 59,68 ****
  int flag_newer = 1;
  
  /* Directory to place resulting files in. Set by -d option. */
! const char *output_directory = "";
  
  /* Directory to place temporary file.  Set by -td option.  Currently unused. */
! const char *temp_directory = "/tmp";
  
  /* Number of friend functions we have to declare.  */
  static int friend_count;
--- 61,70 ----
  int flag_newer = 1;
  
  /* Directory to place resulting files in. Set by -d option. */
! static const char *output_directory = "";
  
  /* Directory to place temporary file.  Set by -td option.  Currently unused. */
! static const char *temp_directory = "/tmp";
  
  /* Number of friend functions we have to declare.  */
  static int friend_count;
*************** static JCF_u2 last_access;
*** 110,115 ****
--- 112,120 ----
  #define METHOD_IS_NATIVE(Method) \
     ((Method) & ACC_NATIVE)
  
+ #define METHOD_IS_PRIVATE(Class, Method) \
+   (((Method) & ACC_PRIVATE) != 0)
+ 
  /* We keep a linked list of all method names we have seen.  This lets
     us determine if a method name and a field name are in conflict.  */
  struct method_name
*************** struct method_name
*** 118,123 ****
--- 123,129 ----
    int length;
    unsigned char *signature;
    int sig_length;
+   int is_native;
    struct method_name *next;
  };
  
*************** static const unsigned char *
*** 150,155 ****
--- 156,162 ----
    decode_signature_piece (FILE *, const unsigned char *,
  			  const unsigned char *, int *);
  static void print_class_decls (FILE *, JCF *, int);
+ static void error (const char *msgid, ...);
  static void usage (void) ATTRIBUTE_NORETURN;
  static void help (void) ATTRIBUTE_NORETURN;
  static void version (void) ATTRIBUTE_NORETURN;
*************** static int method_pass;
*** 183,189 ****
  #define HANDLE_END_FIELD()						      \
    if (field_pass)							      \
      {									      \
!       if (out && ! stubs && ! flag_jni)					      \
  	print_field_info (out, jcf, current_field_name,			      \
  			  current_field_signature,			      \
   			  current_field_flags);				      \
--- 190,196 ----
  #define HANDLE_END_FIELD()						      \
    if (field_pass)							      \
      {									      \
!       if (out && ! stubs)						      \
  	print_field_info (out, jcf, current_field_name,			      \
  			  current_field_signature,			      \
   			  current_field_flags);				      \
*************** static int decompiled = 0;
*** 251,256 ****
--- 258,278 ----
  
  #include "jcf-reader.c"
  
+ /* Print an error message and set found_error.  */
+ static void
+ error (const char *msgid, ...)
+ {
+   va_list ap;
+ 
+   va_start (ap, msgid);
+ 
+   fprintf (stderr, "gcjh: ");
+   vfprintf (stderr, _(msgid), ap);
+   va_end (ap);
+   fprintf (stderr, "\n");
+   found_error = 1;
+ }
+ 
  /* Print a single-precision float, suitable for parsing by g++.  */
  static void
  jni_print_float (FILE *stream, jfloat f)
*************** jni_print_float (FILE *stream, jfloat f)
*** 259,279 ****
       work in data initializers.  FIXME.  */
    if (JFLOAT_FINITE (f))
      {
!       fputs (" = ", stream);
!       if (f.negative)
! 	putc ('-', stream);
!       if (f.exponent)
! 	fprintf (stream, "0x1.%.6xp%+df",
! 		 ((unsigned int)f.mantissa) << 1,
! 		 f.exponent - JFLOAT_EXP_BIAS);
!       else
! 	/* Exponent of 0x01 is -125; exponent of 0x00 is *also* -125,
! 	   because the implicit leading 1 bit is no longer present.  */
! 	fprintf (stream, "0x0.%.6xp%+df",
! 		 ((unsigned int)f.mantissa) << 1,
! 		 f.exponent + 1 - JFLOAT_EXP_BIAS);
      }
!   fputs (";\n", stream);
  }
  
  /* Print a double-precision float, suitable for parsing by g++.  */
--- 281,305 ----
       work in data initializers.  FIXME.  */
    if (JFLOAT_FINITE (f))
      {
!       if (flag_jni)
!         {
!           fputs (" ", out);
!           if (f.negative)
!             putc ('-', stream);
!           if (f.exponent)
!             fprintf (stream, "0x1.%.6xp%+df",
!                      ((unsigned int)f.mantissa) << 1,
!                      f.exponent - JFLOAT_EXP_BIAS);
!           else
!             /* Exponent of 0x01 is -125; exponent of 0x00 is *also* -125,
!                because the implicit leading 1 bit is no longer present.  */
!             fprintf (stream, "0x0.%.6xp%+df",
!                      ((unsigned int)f.mantissa) << 1,
!                      f.exponent + 1 - JFLOAT_EXP_BIAS);
!         }
      }
!   if (! flag_jni)
!     fputs (";\n", stream);
  }
  
  /* Print a double-precision float, suitable for parsing by g++.  */
*************** jni_print_double (FILE *stream, jdouble 
*** 284,304 ****
       work in data initializers.  FIXME.  */
    if (JDOUBLE_FINITE (f))
      {
!       fputs (" = ", stream);
!       if (f.negative)
! 	putc ('-', stream);
!       if (f.exponent)
! 	fprintf (stream, "0x1.%.5x%.8xp%+d",
! 		 f.mantissa0, f.mantissa1,
! 		 f.exponent - JDOUBLE_EXP_BIAS);
!       else
! 	/* Exponent of 0x001 is -1022; exponent of 0x000 is *also* -1022,
! 	   because the implicit leading 1 bit is no longer present.  */
! 	fprintf (stream, "0x0.%.5x%.8xp%+d",
! 		 f.mantissa0, f.mantissa1,
! 		 f.exponent + 1 - JDOUBLE_EXP_BIAS);
      }
!   fputs (";\n", stream);
  }
  
  /* Print a character, appropriately mangled for JNI.  */
--- 310,333 ----
       work in data initializers.  FIXME.  */
    if (JDOUBLE_FINITE (f))
      {
!       if (flag_jni)
!         {
!           fputs (" ", out);
!           if (f.negative)
!             putc ('-', stream);
!           if (f.exponent)
!             fprintf (stream, "0x1.%.5x%.8xp%+d",
!                      f.mantissa0, f.mantissa1,
!                      f.exponent - JDOUBLE_EXP_BIAS);
!           else
!             /* Exponent of 0x001 is -1022; exponent of 0x000 is *also* -1022,
!                because the implicit leading 1 bit is no longer present.  */
!             fprintf (stream, "0x0.%.5x%.8xp%+d",
!                      f.mantissa0, f.mantissa1,
!                      f.exponent + 1 - JDOUBLE_EXP_BIAS);
!         }
      }
!   fputs (flag_jni ? "\n" : ";\n", stream);
  }
  
  /* Print a character, appropriately mangled for JNI.  */
*************** name_is_method_p (const unsigned char *n
*** 617,623 ****
    return 0;
  }
  
! /* If there is already a method named NAME, whose signature is not
     SIGNATURE, then return true.  Otherwise return false.  */
  static int
  overloaded_jni_method_exists_p (const unsigned char *name, int length,
--- 646,668 ----
    return 0;
  }
  
! /* Free the method name list.  */
! static void
! free_method_name_list (void)
! {
!   struct method_name *p = method_name_list;
!   while (p != NULL)
!     {
!       struct method_name *next = p->next;
!       free (p->name);
!       free (p->signature);
!       free (p);
!       p = next;
!     }
!   method_name_list = NULL;
! }
! 
! /* If there is already a native method named NAME, whose signature is not
     SIGNATURE, then return true.  Otherwise return false.  */
  static int
  overloaded_jni_method_exists_p (const unsigned char *name, int length,
*************** overloaded_jni_method_exists_p (const un
*** 627,633 ****
  
    for (p = method_name_list; p != NULL; p = p->next)
      {
!       if (p->length == length
  	  && ! memcmp (p->name, name, length)
  	  && (p->sig_length != sig_length
  	      || memcmp (p->signature, signature, sig_length)))
--- 672,679 ----
  
    for (p = method_name_list; p != NULL; p = p->next)
      {
!       if (p->is_native
!           && p->length == length
  	  && ! memcmp (p->name, name, length)
  	  && (p->sig_length != sig_length
  	      || memcmp (p->signature, signature, sig_length)))
*************** get_field_name (JCF *jcf, int name_index
*** 652,659 ****
  	 trouble.  */
        if ((flags & ACC_STATIC))
  	{
! 	  fprintf (stderr, "static field has same name as method\n");
! 	  found_error = 1;
  	  return NULL;
  	}
  
--- 698,704 ----
  	 trouble.  */
        if ((flags & ACC_STATIC))
  	{
! 	  error ("static field has same name as method");
  	  return NULL;
  	}
  
*************** get_field_name (JCF *jcf, int name_index
*** 661,666 ****
--- 706,713 ----
        memcpy (override, name, length);
        strcpy (override + length, "__");
      }
+   else if (flag_jni)
+     override = NULL;
    else
      override = cxx_keyword_subst (name, length);
  
*************** print_field_info (FILE *stream, JCF* jcf
*** 690,696 ****
  {
    char *override = NULL;
  
!   generate_access (stream, flags);
    if (JPOOL_TAG (jcf, name_index) != CONSTANT_Utf8)
      {
        fprintf (stream, "<not a UTF8 constant>");
--- 737,744 ----
  {
    char *override = NULL;
  
!   if (! flag_jni)
!     generate_access (stream, flags);
    if (JPOOL_TAG (jcf, name_index) != CONSTANT_Utf8)
      {
        fprintf (stream, "<not a UTF8 constant>");
*************** print_field_info (FILE *stream, JCF* jcf
*** 698,710 ****
        return;
      }
  
!   fputs ("  ", out);
!   if ((flags & ACC_STATIC))
!     fputs ("static ", out);
  
!   if ((flags & ACC_FINAL))
      {
!       if (current_field_value > 0)
  	{
  	  char buffer[25];
  	  int done = 1;
--- 746,785 ----
        return;
      }
  
!   if (flag_jni)
!     {
!       /* For JNI we only want to print real constants.  */
!       int val;
!       if (! (flags & ACC_STATIC)
! 	  || ! (flags & ACC_FINAL)
! 	  || current_field_value <= 0)
! 	return;
!       val = JPOOL_TAG (jcf, current_field_value);
!       if (val != CONSTANT_Integer && val != CONSTANT_Long
! 	  && val != CONSTANT_Float && val != CONSTANT_Double)
! 	return;
!     }
!   else
!     {
!       /* Initial indentation.  */
!       fputs ("  ", stream);
!     }
  
!   if ((flags & ACC_STATIC))
      {
!       if (flag_jni)
! 	{
! 	  print_cxx_classname (stream, "#undef ", jcf, jcf->this_class, 1);
! 	  fputs ("_", stream);
! 	  print_field_name (stream, jcf, name_index, 0);
! 	  fputs ("\n", stream);
! 	  print_cxx_classname (stream, "#define ", jcf, jcf->this_class, 1);
! 	  fputs ("_", stream);
! 	}
!       else
! 	fputs ("static ", stream);
! 
!       if ((flags & ACC_FINAL) && current_field_value > 0)
  	{
  	  char buffer[25];
  	  int done = 1;
*************** print_field_info (FILE *stream, JCF* jcf
*** 715,723 ****
  	      {
  		jint num;
  		int most_negative = 0;
! 		fputs ("const jint ", out);
! 		print_field_name (out, jcf, name_index, 0);
! 		fputs (" = ", out);
  		num = JPOOL_INT (jcf, current_field_value);
  		/* We single out the most negative number to print
  		   specially.  This avoids later warnings from g++.  */
--- 790,799 ----
  	      {
  		jint num;
  		int most_negative = 0;
! 		if (! flag_jni)
! 		  fputs ("const jint ", stream);
! 		print_field_name (stream, jcf, name_index, 0);
! 		fputs (flag_jni ? " " : " = ", stream);
  		num = JPOOL_INT (jcf, current_field_value);
  		/* We single out the most negative number to print
  		   specially.  This avoids later warnings from g++.  */
*************** print_field_info (FILE *stream, JCF* jcf
*** 727,742 ****
  		    ++num;
  		  }
  		format_int (buffer, (jlong) num, 10);
! 		fprintf (out, "%sL%s;\n", buffer, most_negative ? " - 1" : "");
  	      }
  	      break;
  	    case CONSTANT_Long:
  	      {
  		jlong num;
  		int most_negative = 0;
! 		fputs ("const jlong ", out);
! 		print_field_name (out, jcf, name_index, 0);
! 		fputs (" = ", out);
  		num = JPOOL_LONG (jcf, current_field_value);
  		/* We single out the most negative number to print
                     specially..  This avoids later warnings from g++.  */
--- 803,821 ----
  		    ++num;
  		  }
  		format_int (buffer, (jlong) num, 10);
! 		fprintf (stream, "%sL%s%s\n", buffer,
! 			 most_negative ? " - 1" : "",
! 			 flag_jni ? "" : ";");
  	      }
  	      break;
  	    case CONSTANT_Long:
  	      {
  		jlong num;
  		int most_negative = 0;
! 		if (! flag_jni)
! 		  fputs ("const jlong ", stream);
! 		print_field_name (stream, jcf, name_index, 0);
! 		fputs (flag_jni ? " " : " = ", stream);
  		num = JPOOL_LONG (jcf, current_field_value);
  		/* We single out the most negative number to print
                     specially..  This avoids later warnings from g++.  */
*************** print_field_info (FILE *stream, JCF* jcf
*** 746,768 ****
  		    ++num;
  		  }
  		format_int (buffer, num, 10);
! 		fprintf (out, "%sLL%s;\n", buffer, most_negative ? " - 1" :"");
  	      }
  	      break;
  	    case CONSTANT_Float:
  	      {
  		jfloat fnum = JPOOL_FLOAT (jcf, current_field_value);
! 		fputs ("const jfloat ", out);
! 		print_field_name (out, jcf, name_index, 0);
! 		jni_print_float (out, fnum);
  	      }
  	      break;
  	    case CONSTANT_Double:
  	      {
  		jdouble dnum = JPOOL_DOUBLE (jcf, current_field_value);
! 		fputs ("const jdouble ", out);
! 		print_field_name (out, jcf, name_index, 0);
! 		jni_print_double (out, dnum);
  	      }
  	      break;
  	    default:
--- 825,851 ----
  		    ++num;
  		  }
  		format_int (buffer, num, 10);
! 		fprintf (stream, "%sLL%s%s\n", buffer,
! 			 most_negative ? " - 1" :"",
! 			 flag_jni ? "" : ";");
  	      }
  	      break;
  	    case CONSTANT_Float:
  	      {
  		jfloat fnum = JPOOL_FLOAT (jcf, current_field_value);
! 		if (! flag_jni)
! 		  fputs ("const jfloat ", stream);
! 		print_field_name (stream, jcf, name_index, 0);
! 		jni_print_float (stream, fnum);
  	      }
  	      break;
  	    case CONSTANT_Double:
  	      {
  		jdouble dnum = JPOOL_DOUBLE (jcf, current_field_value);
! 		if (! flag_jni)
! 		  fputs ("const jdouble ", stream);
! 		print_field_name (stream, jcf, name_index, 0);
! 		jni_print_double (stream, dnum);
  	      }
  	      break;
  	    default:
*************** print_field_info (FILE *stream, JCF* jcf
*** 777,785 ****
  	}
      }
  
    override = get_field_name (jcf, name_index, flags);
!   print_c_decl (out, jcf, name_index, sig_index, 0, override, flags);
!   fputs (";\n", out);
  
    if (override)
      free (override);
--- 860,869 ----
  	}
      }
  
+   /* assert (! flag_jni);  */
    override = get_field_name (jcf, name_index, flags);
!   print_c_decl (stream, jcf, name_index, sig_index, 0, override, flags);
!   fputs (";\n", stream);
  
    if (override)
      free (override);
*************** print_method_info (FILE *stream, JCF* jc
*** 812,820 ****
  	{
  	  /* FIXME: i18n bug here.  Order of prints should not be
  	     fixed.  */
! 	  fprintf (stderr, "ignored method `");
  	  jcf_print_utf8 (stderr, str, length);
! 	  fprintf (stderr, "' marked virtual\n");
  	  found_error = 1;
  	  return;
  	}
--- 896,904 ----
  	{
  	  /* FIXME: i18n bug here.  Order of prints should not be
  	     fixed.  */
! 	  fprintf (stderr, _("ignored method '"));
  	  jcf_print_utf8 (stderr, str, length);
! 	  fprintf (stderr, _("' marked virtual\n"));
  	  found_error = 1;
  	  return;
  	}
*************** print_method_info (FILE *stream, JCF* jc
*** 835,840 ****
--- 919,925 ----
        nn->next = method_name_list;
        nn->sig_length = JPOOL_UTF_LENGTH (jcf, sig_index);
        nn->signature = xmalloc (nn->sig_length);
+       nn->is_native = METHOD_IS_NATIVE (flags);
        memcpy (nn->signature, JPOOL_UTF_DATA (jcf, sig_index),
  	      nn->sig_length);
        method_name_list = nn;
*************** print_method_info (FILE *stream, JCF* jc
*** 863,869 ****
        fputs ("  ", out);
        if ((flags & ACC_STATIC))
  	fputs ("static ", out);
!       else if (! METHOD_IS_FINAL (jcf->access_flags, flags))
  	{
  	  /* Don't print `virtual' if we have a constructor.  */
  	  if (! is_init)
--- 948,954 ----
        fputs ("  ", out);
        if ((flags & ACC_STATIC))
  	fputs ("static ", out);
!       else if (! METHOD_IS_PRIVATE (jcf->access_flags, flags))
  	{
  	  /* Don't print `virtual' if we have a constructor.  */
  	  if (! is_init)
*************** throwable_p (const unsigned char *clname
*** 1125,1135 ****
  				    (htab_del) free);
  
        /* Make sure the root classes show up in the tables.  */
!       str = xstrdup ("java.lang.Throwable");
        slot = htab_find_slot (throw_hash, str, INSERT);
        *slot = str;
  
!       str = xstrdup ("java.lang.Object");
        slot = htab_find_slot (non_throw_hash, str, INSERT);
        *slot = str;
  
--- 1210,1220 ----
  				    (htab_del) free);
  
        /* Make sure the root classes show up in the tables.  */
!       str = (unsigned char *) xstrdup ("java.lang.Throwable");
        slot = htab_find_slot (throw_hash, str, INSERT);
        *slot = str;
  
!       str = (unsigned char *) xstrdup ("java.lang.Object");
        slot = htab_find_slot (non_throw_hash, str, INSERT);
        *slot = str;
  
*************** throwable_p (const unsigned char *clname
*** 1156,1176 ****
        void **slot;
        unsigned char *super, *tmp;
        int super_length = -1;
!       const char *classfile_name = find_class (current, strlen (current),
  					       &jcf, 0);
  
        if (! classfile_name)
  	{
! 	  fprintf (stderr, "couldn't find class %s\n", current);
! 	  found_error = 1;
  	  return 0;
  	}
        if (jcf_parse_preamble (&jcf) != 0
  	  || jcf_parse_constant_pool (&jcf) != 0
  	  || verify_constant_pool (&jcf) > 0)
  	{
! 	  fprintf (stderr, "parse error while reading %s\n", classfile_name);
! 	  found_error = 1;
  	  return 0;
  	}
        jcf_parse_class (&jcf);
--- 1241,1259 ----
        void **slot;
        unsigned char *super, *tmp;
        int super_length = -1;
!       const char *classfile_name = find_class ((char *) current, strlen ((const char *) current),
  					       &jcf, 0);
  
        if (! classfile_name)
  	{
! 	  error ("couldn't find class %s", current);
  	  return 0;
  	}
        if (jcf_parse_preamble (&jcf) != 0
  	  || jcf_parse_constant_pool (&jcf) != 0
  	  || verify_constant_pool (&jcf) > 0)
  	{
! 	  error ("parse error while reading %s", classfile_name);
  	  return 0;
  	}
        jcf_parse_class (&jcf);
*************** decode_signature_piece (FILE *stream, co
*** 1304,1313 ****
        if (flag_jni)
  	{
  	  /* We know about certain types and special-case their names.  */
! 	  if (! strncmp (signature, "Ljava/lang/String;",
  			 sizeof ("Ljava/lang/String;") -1))
  	    ctype = "jstring";
! 	  else if (! strncmp (signature, "Ljava/lang/Class;",
  			      sizeof ("Ljava/lang/Class;") - 1))
  	    ctype = "jclass";
  	  /* Skip leading 'L' for throwable_p call.  */
--- 1387,1396 ----
        if (flag_jni)
  	{
  	  /* We know about certain types and special-case their names.  */
! 	  if (! strncmp ((const char *) signature, "Ljava/lang/String;",
  			 sizeof ("Ljava/lang/String;") -1))
  	    ctype = "jstring";
! 	  else if (! strncmp ((const char *) signature, "Ljava/lang/Class;",
  			      sizeof ("Ljava/lang/Class;") - 1))
  	    ctype = "jclass";
  	  /* Skip leading 'L' for throwable_p call.  */
*************** print_c_decl (FILE* stream, JCF* jcf, in
*** 1396,1409 ****
  	  next = decode_signature_piece (stream, str, limit, &need_space);
  	  if (! next)
  	    {
! 	      fprintf (stderr, "unparseable signature: `%s'\n", str0);
! 	      found_error = 1;
  	      return;
  	    }
  	}
  
        /* Force the alignment of the first data member.  This is
! 	 because the "new" C++ ABI changed the alignemnt of non-POD
  	 classes.  gcj, however, still uses the "old" alignment.  */
        if (is_first_data_member && ! (flags & ACC_STATIC) && ! is_method)
  	{
--- 1479,1491 ----
  	  next = decode_signature_piece (stream, str, limit, &need_space);
  	  if (! next)
  	    {
! 	      error ("unparseable signature: '%s'", str0);
  	      return;
  	    }
  	}
  
        /* Force the alignment of the first data member.  This is
! 	 because the "new" C++ ABI changed the alignment of non-POD
  	 classes.  gcj, however, still uses the "old" alignment.  */
        if (is_first_data_member && ! (flags & ACC_STATIC) && ! is_method)
  	{
*************** print_full_cxx_name (FILE* stream, JCF* 
*** 1453,1459 ****
        int sig_len = JPOOL_UTF_LENGTH (jcf, signature_index);
        if (overloaded_jni_method_exists_p (JPOOL_UTF_DATA (jcf, name_index),
  					  JPOOL_UTF_LENGTH (jcf, name_index),
! 					  signature, sig_len))
  	{
  	  /* If this method is overloaded by another native method,
  	     then include the argument information in the mangled
--- 1535,1541 ----
        int sig_len = JPOOL_UTF_LENGTH (jcf, signature_index);
        if (overloaded_jni_method_exists_p (JPOOL_UTF_DATA (jcf, name_index),
  					  JPOOL_UTF_LENGTH (jcf, name_index),
! 					  (const char *) signature, sig_len))
  	{
  	  /* If this method is overloaded by another native method,
  	     then include the argument information in the mangled
*************** print_full_cxx_name (FILE* stream, JCF* 
*** 1499,1506 ****
  	  next = decode_signature_piece (stream, str, limit, &need_space);
  	  if (! next)
  	    {
! 	      fprintf (stderr, "unparseable signature: `%s'\n", str0);
! 	      found_error = 1;
  	      return;
  	    }
  	  
--- 1581,1587 ----
  	  next = decode_signature_piece (stream, str, limit, &need_space);
  	  if (! next)
  	    {
! 	      error ("unparseable signature: '%s'", str0);
  	      return;
  	    }
  	  
*************** print_stub_or_jni (FILE* stream, JCF* jc
*** 1552,1558 ****
  	return;
  
        if (flag_jni && ! stubs)
! 	fputs ("extern JNIEXPORT ", stream);
  
        /* If printing a method, skip to the return signature and print
  	 that first.  However, there is no return value if this is a
--- 1633,1639 ----
  	return;
  
        if (flag_jni && ! stubs)
! 	fputs ("JNIEXPORT ", stream);
  
        /* If printing a method, skip to the return signature and print
  	 that first.  However, there is no return value if this is a
*************** print_stub_or_jni (FILE* stream, JCF* jc
*** 1575,1582 ****
  	  next = decode_signature_piece (stream, str, limit, &need_space);
  	  if (! next)
  	    {
! 	      fprintf (stderr, "unparseable signature: `%s'\n", str0);
! 	      found_error = 1;
  	      return;
  	    }
  	}
--- 1656,1662 ----
  	  next = decode_signature_piece (stream, str, limit, &need_space);
  	  if (! next)
  	    {
! 	      error ("unparseable signature: '%s'", str0);
  	      return;
  	    }
  	}
*************** print_include (FILE *out, const unsigned
*** 1729,1747 ****
      return;
  
    if (len == -1)
!     len = strlen (utf8);
  
    for (incl = all_includes; incl; incl = incl->next)
      {
        /* We check the length because we might have a proper prefix.  */
        if (len == (int) strlen (incl->name)
! 	  && ! strncmp (incl->name, utf8, len))
  	return;
      }
  
    incl = xmalloc (sizeof (struct include));
    incl->name = xmalloc (len + 1);
!   strncpy (incl->name, utf8, len);
    incl->name[len] = '\0';
    incl->next = all_includes;
    all_includes = incl;
--- 1809,1827 ----
      return;
  
    if (len == -1)
!     len = strlen ((const char *) utf8);
  
    for (incl = all_includes; incl; incl = incl->next)
      {
        /* We check the length because we might have a proper prefix.  */
        if (len == (int) strlen (incl->name)
! 	  && ! strncmp (incl->name, (const char *) utf8, len))
  	return;
      }
  
    incl = xmalloc (sizeof (struct include));
    incl->name = xmalloc (len + 1);
!   strncpy (incl->name, (const char *) utf8, len);
    incl->name[len] = '\0';
    incl->next = all_includes;
    all_includes = incl;
*************** add_namelet (const unsigned char *name, 
*** 1800,1810 ****
  #define JAVAIO "java/io/"
  #define JAVAUTIL "java/util/"
        if ((name_limit - name >= (int) sizeof (JAVALANG) - 1
! 	   && ! strncmp (name, JAVALANG, sizeof (JAVALANG) - 1))
  	  || (name_limit - name >= (int) sizeof (JAVAUTIL) - 1
! 	      && ! strncmp (name, JAVAUTIL, sizeof (JAVAUTIL) - 1))
  	  || (name_limit - name >= (int) sizeof (JAVAIO) - 1
! 	      && ! strncmp (name, JAVAIO, sizeof (JAVAIO) - 1)))
  	return;
      }
  
--- 1880,1890 ----
  #define JAVAIO "java/io/"
  #define JAVAUTIL "java/util/"
        if ((name_limit - name >= (int) sizeof (JAVALANG) - 1
! 	   && ! strncmp ((const char *) name, JAVALANG, sizeof (JAVALANG) - 1))
  	  || (name_limit - name >= (int) sizeof (JAVAUTIL) - 1
! 	      && ! strncmp ((const char *) name, JAVAUTIL, sizeof (JAVAUTIL) - 1))
  	  || (name_limit - name >= (int) sizeof (JAVAIO) - 1
! 	      && ! strncmp ((const char *) name, JAVAIO, sizeof (JAVAIO) - 1)))
  	return;
      }
  
*************** add_namelet (const unsigned char *name, 
*** 1816,1822 ****
      {
        /* We check the length because we might have a proper prefix.  */
        if ((int) strlen (np->name) == p - name &&
! 	  ! strncmp (name, np->name, p - name))
  	{
  	  n = np;
  	  break;
--- 1896,1902 ----
      {
        /* We check the length because we might have a proper prefix.  */
        if ((int) strlen (np->name) == p - name &&
! 	  ! strncmp ((const char *) name, np->name, p - name))
  	{
  	  n = np;
  	  break;
*************** add_namelet (const unsigned char *name, 
*** 1827,1833 ****
      {
        n = xmalloc (sizeof (struct namelet));
        n->name = xmalloc (p - name + 1);
!       strncpy (n->name, name, p - name);
        n->name[p - name] = '\0';
        n->is_class = (p == name_limit);
        n->subnamelets = NULL;
--- 1907,1913 ----
      {
        n = xmalloc (sizeof (struct namelet));
        n->name = xmalloc (p - name + 1);
!       strncpy (n->name, (const char *) name, p - name);
        n->name[p - name] = '\0';
        n->is_class = (p == name_limit);
        n->subnamelets = NULL;
*************** add_class_decl (FILE *out, JCF *jcf, JCF
*** 1909,1915 ****
        /* If we see an array, then we include the array header.  */
        if (s[i] == '[')
  	{
! 	  print_include (out, "gcj/array", -1);
  	  continue;
  	}
  
--- 1989,1995 ----
        /* If we see an array, then we include the array header.  */
        if (s[i] == '[')
  	{
! 	  print_include (out, (const unsigned char *) "gcj/array", -1);
  	  continue;
  	}
  
*************** process_file (JCF *jcf, FILE *out)
*** 1966,1973 ****
  
    if (jcf_parse_preamble (jcf) != 0)
      {
!       fprintf (stderr, "Not a valid Java .class file.\n");
!       found_error = 1;
        return;
      }
  
--- 2046,2052 ----
  
    if (jcf_parse_preamble (jcf) != 0)
      {
!       error ("Not a valid Java .class file.");
        return;
      }
  
*************** process_file (JCF *jcf, FILE *out)
*** 1975,1989 ****
    code = jcf_parse_constant_pool (jcf);
    if (code != 0)
      {
!       fprintf (stderr, "error while parsing constant pool\n");
!       found_error = 1;
        return;
      }
    code = verify_constant_pool (jcf);
    if (code > 0)
      {
!       fprintf (stderr, "error in constant pool entry #%d\n", code);
!       found_error = 1;
        return;
      }
  
--- 2054,2066 ----
    code = jcf_parse_constant_pool (jcf);
    if (code != 0)
      {
!       error ("error while parsing constant pool");
        return;
      }
    code = verify_constant_pool (jcf);
    if (code > 0)
      {
!       error ("error in constant pool entry #%d", code);
        return;
      }
  
*************** process_file (JCF *jcf, FILE *out)
*** 2083,2095 ****
  	  for (i = 0; i < len; ++i)
  	    name[i] = jcf->classname[i] == '.' ? '/' : jcf->classname[i];
  	  name[i] = '\0';
! 	  print_include (out, name, len);
  	  free (name);
  
  	  if (! flag_jni)
  	    {
! 	      print_include (out, "gcj/cni", -1);
! 	      print_include (out, "java/lang/UnsupportedOperationException",
  			     -1);
  	    }
  	}
--- 2160,2172 ----
  	  for (i = 0; i < len; ++i)
  	    name[i] = jcf->classname[i] == '.' ? '/' : jcf->classname[i];
  	  name[i] = '\0';
! 	  print_include (out, (const unsigned char *) name, len);
  	  free (name);
  
  	  if (! flag_jni)
  	    {
! 	      print_include (out, (const unsigned char *) "gcj/cni", -1);
! 	      print_include (out, (const unsigned char *) "java/lang/UnsupportedOperationException",
  			     -1);
  	    }
  	}
*************** process_file (JCF *jcf, FILE *out)
*** 2126,2133 ****
  	  if (! print_cxx_classname (out, "class ", jcf,
  				     jcf->this_class, 0))
  	    {
! 	      fprintf (stderr, "class is of array type\n");
! 	      found_error = 1;
  	      return;
  	    }
  	  if (jcf->super_class)
--- 2203,2209 ----
  	  if (! print_cxx_classname (out, "class ", jcf,
  				     jcf->this_class, 0))
  	    {
! 	      error ("class is of array type\n");
  	      return;
  	    }
  	  if (jcf->super_class)
*************** process_file (JCF *jcf, FILE *out)
*** 2135,2142 ****
  	      if (! print_cxx_classname (out, " : public ", 
  					 jcf, jcf->super_class, 1))
  		{
! 		  fprintf (stderr, "base class is of array type\n");
! 		  found_error = 1;
  		  return;
  		}
  	    }
--- 2211,2217 ----
  	      if (! print_cxx_classname (out, " : public ", 
  					 jcf, jcf->super_class, 1))
  		{
! 		  error ("base class is of array type");
  		  return;
  		}
  	    }
*************** static const struct option options[] =
*** 2252,2296 ****
  static void
  usage (void)
  {
!   fprintf (stderr, "Try `gcjh --help' for more information.\n");
    exit (1);
  }
  
  static void
  help (void)
  {
!   printf ("Usage: gcjh [OPTION]... CLASS...\n\n");
!   printf ("Generate C++ header files from .class files\n\n");
!   printf ("  -stubs                  Generate an implementation stub file\n");
!   printf ("  -jni                    Generate a JNI header or stub\n");
    printf ("\n");
!   printf ("  -add TEXT               Insert TEXT into class body\n");
!   printf ("  -append TEXT            Insert TEXT after class declaration\n");
!   printf ("  -friend TEXT            Insert TEXT as `friend' declaration\n");
!   printf ("  -prepend TEXT           Insert TEXT before start of class\n");
    printf ("\n");
!   printf ("  --classpath PATH        Set path to find .class files\n");
!   printf ("  -IDIR                   Append directory to class path\n");
!   printf ("  --bootclasspath PATH    Override built-in class path\n");
!   printf ("  --extdirs PATH          Set extensions directory path\n");
!   printf ("  -d DIRECTORY            Set output directory name\n");
!   printf ("  -o FILE                 Set output file name\n");
!   printf ("  -td DIRECTORY           Set temporary directory name\n");
    printf ("\n");
!   printf ("  --help                  Print this help, then exit\n");
!   printf ("  --version               Print version number, then exit\n");
!   printf ("  -v, --verbose           Print extra information while running\n");
    printf ("\n");
!   printf ("  -M                      Print all dependencies to stdout;\n");
!   printf ("                             suppress ordinary output\n");
!   printf ("  -MM                     Print non-system dependencies to stdout;\n");
!   printf ("                             suppress ordinary output\n");
!   printf ("  -MD                     Print all dependencies to stdout\n");
!   printf ("  -MMD                    Print non-system dependencies to stdout\n");
    /* We omit -MG until it is implemented.  */
    printf ("\n");
!   printf ("For bug reporting instructions, please see:\n");
!   printf ("%s.\n", bug_report_url);
    exit (0);
  }
  
--- 2327,2371 ----
  static void
  usage (void)
  {
!   fprintf (stderr, _("Try 'gcjh --help' for more information.\n"));
    exit (1);
  }
  
  static void
  help (void)
  {
!   printf (_("Usage: gcjh [OPTION]... CLASS...\n\n"));
!   printf (_("Generate C++ header files from .class files\n\n"));
!   printf (_("  -stubs                  Generate an implementation stub file\n"));
!   printf (_("  -jni                    Generate a JNI header or stub\n"));
    printf ("\n");
!   printf (_("  -add TEXT               Insert TEXT into class body\n"));
!   printf (_("  -append TEXT            Insert TEXT after class declaration\n"));
!   printf (_("  -friend TEXT            Insert TEXT as 'friend' declaration\n"));
!   printf (_("  -prepend TEXT           Insert TEXT before start of class\n"));
    printf ("\n");
!   printf (_("  --classpath PATH        Set path to find .class files\n"));
!   printf (_("  -IDIR                   Append directory to class path\n"));
!   printf (_("  --bootclasspath PATH    Override built-in class path\n"));
!   printf (_("  --extdirs PATH          Set extensions directory path\n"));
!   printf (_("  -d DIRECTORY            Set output directory name\n"));
!   printf (_("  -o FILE                 Set output file name\n"));
!   printf (_("  -td DIRECTORY           Set temporary directory name\n"));
    printf ("\n");
!   printf (_("  --help                  Print this help, then exit\n"));
!   printf (_("  --version               Print version number, then exit\n"));
!   printf (_("  -v, --verbose           Print extra information while running\n"));
    printf ("\n");
!   printf (_("  -M                      Print all dependencies to stdout;\n"
! 	    "                             suppress ordinary output\n"));
!   printf (_("  -MM                     Print non-system dependencies to stdout;\n"
! 	    "                             suppress ordinary output\n"));
!   printf (_("  -MD                     Print all dependencies to stdout\n"));
!   printf (_("  -MMD                    Print non-system dependencies to stdout\n"));
    /* We omit -MG until it is implemented.  */
    printf ("\n");
!   printf (_("For bug reporting instructions, please see:\n"
! 	    "%s.\n"), bug_report_url);
    exit (0);
  }
  
*************** static void
*** 2298,2306 ****
  version (void)
  {
    printf ("gcjh (GCC) %s\n\n", version_string);
!   printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n");
!   printf ("This is free software; see the source for copying conditions.  There is NO\n");
!   printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n");
    exit (0);
  }
  
--- 2373,2381 ----
  version (void)
  {
    printf ("gcjh (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);
  }
  
*************** main (int argc, char** argv)
*** 2313,2321 ****
    int emit_dependencies = 0, suppress_output = 0;
    int opt;
  
    if (argc <= 1)
      {
!       fprintf (stderr, "gcjh: no classes specified\n");
        usage ();
      }
  
--- 2388,2398 ----
    int emit_dependencies = 0, suppress_output = 0;
    int opt;
  
+   gcc_init_libintl ();
+ 
    if (argc <= 1)
      {
!       error ("no classes specified");
        usage ();
      }
  
*************** main (int argc, char** argv)
*** 2408,2414 ****
  	  break;
  
  	case OPT_MG:
! 	  fprintf (stderr, "gcjh: `-MG' option is unimplemented\n");
  	  exit (1);
  
  	case OPT_MD:
--- 2485,2491 ----
  	  break;
  
  	case OPT_MG:
! 	  error ("'-MG' option is unimplemented");
  	  exit (1);
  
  	case OPT_MD:
*************** main (int argc, char** argv)
*** 2429,2435 ****
  
    if (optind == argc)
      {
!       fprintf (stderr, "gcjh: no classes specified\n");
        usage ();
      }
  
--- 2506,2512 ----
  
    if (optind == argc)
      {
!       error ("no classes specified");
        usage ();
      }
  
*************** main (int argc, char** argv)
*** 2437,2443 ****
  
    if (output_file && emit_dependencies)
      {
!       fprintf (stderr, "gcjh: can't specify both -o and -MD\n");
        exit (1);
      }
  
--- 2514,2520 ----
  
    if (output_file && emit_dependencies)
      {
!       error ("can't specify both -o and -MD");
        exit (1);
      }
  
*************** main (int argc, char** argv)
*** 2448,2464 ****
        const char *classfile_name;
  
        if (verbose)
! 	fprintf (stderr, "Processing %s\n", classname);
        if (! output_file)
  	jcf_dependency_reset ();
        classfile_name = find_class (classname, strlen (classname), &jcf, 0);
        if (classfile_name == NULL)
  	{
! 	  fprintf (stderr, "%s: no such class\n", classname);
  	  exit (1);
  	}
        if (verbose)
! 	fprintf (stderr, "Found in %s\n", classfile_name);
        if (output_file)
  	{
  	  if (strcmp (output_file, "-") == 0)
--- 2525,2541 ----
        const char *classfile_name;
  
        if (verbose)
! 	printf (_("Processing %s\n"), classname);
        if (! output_file)
  	jcf_dependency_reset ();
        classfile_name = find_class (classname, strlen (classname), &jcf, 0);
        if (classfile_name == NULL)
  	{
! 	  error ("%s: no such class", classname);
  	  exit (1);
  	}
        if (verbose)
! 	printf (_("Found in %s\n"), classfile_name);
        if (output_file)
  	{
  	  if (strcmp (output_file, "-") == 0)
*************** main (int argc, char** argv)
*** 2519,2524 ****
--- 2596,2602 ----
  		}
  	    }
  	}
+       free_method_name_list ();
        process_file (&jcf, out);
        JCF_FINISH (&jcf);
        if (current_output_file != output_file)
diff -Nrcpad gcc-3.4.3/gcc/java/java-except.h gcc-4.0.0/gcc/java/java-except.h
*** gcc-3.4.3/gcc/java/java-except.h	Sat Jan 18 22:15:51 2003
--- gcc-4.0.0/gcc/java/java-except.h	Sat Feb 12 15:21:14 2005
***************
*** 1,6 ****
  /* Definitions for exception handling for use by the GNU compiler
     for the Java(TM) language compiler.
!    Copyright (C) 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,7 ----
  /* Definitions for exception handling for use by the GNU compiler
     for the Java(TM) language compiler.
!    Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004, 2005
!    Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** struct eh_range
*** 50,55 ****
--- 51,61 ----
  
      /* True if this range has already been expanded. */
      int expanded;
+ 
+     /* The TRY_CATCH_EXPR for this EH range.  */
+     tree stmt;
+ 
+     tree handler;
    };
  
  /* A dummy range that represents the entire method. */
*************** extern struct eh_range whole_range;
*** 59,67 ****
  
  extern struct eh_range * find_handler (int);
  extern void method_init_exceptions (void);
- extern void emit_handlers (void);
  extern void maybe_start_try (int, int);
- extern void maybe_end_try (int, int);
  extern void add_handler (int, int, tree, tree);
  extern void handle_nested_ranges (void);
! extern void expand_resume_after_catch (void);
--- 65,71 ----
  
  extern struct eh_range * find_handler (int);
  extern void method_init_exceptions (void);
  extern void maybe_start_try (int, int);
  extern void add_handler (int, int, tree, tree);
  extern void handle_nested_ranges (void);
! extern void expand_end_java_handler (struct eh_range *);
diff -Nrcpad gcc-3.4.3/gcc/java/java-gimplify.c gcc-4.0.0/gcc/java/java-gimplify.c
*** gcc-3.4.3/gcc/java/java-gimplify.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/java/java-gimplify.c	Thu Dec  2 16:37:41 2004
***************
*** 0 ****
--- 1,367 ----
+ /* Java(TM) language-specific gimplification routines.
+    Copyright (C) 2003, 2004 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.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "tree.h"
+ #include "java-tree.h"
+ #include "tree-dump.h"
+ #include "tree-gimple.h"
+ #include "toplev.h"
+ 
+ static tree java_gimplify_labeled_block_expr (tree);
+ static tree java_gimplify_exit_block_expr (tree);
+ static tree java_gimplify_case_expr (tree);
+ static tree java_gimplify_default_expr (tree);
+ static tree java_gimplify_block (tree);
+ static tree java_gimplify_new_array_init (tree);
+ static tree java_gimplify_try_expr (tree);
+ static tree java_gimplify_modify_expr (tree);
+ 
+ static void dump_java_tree (enum tree_dump_index, tree);
+ 
+ /* Convert a Java tree to GENERIC.  */
+ 
+ void
+ java_genericize (tree fndecl)
+ {
+   dump_java_tree (TDI_original, fndecl);
+ 
+   /* Genericize with the gimplifier.  */
+   gimplify_function_tree (fndecl);
+ 
+   dump_function (TDI_generic, fndecl);
+ }
+ 
+ /* Gimplify a Java tree.  */
+ 
+ int
+ java_gimplify_expr (tree *expr_p, tree *pre_p ATTRIBUTE_UNUSED,
+ 		    tree *post_p ATTRIBUTE_UNUSED)
+ {
+   enum tree_code code = TREE_CODE (*expr_p);
+ 
+   switch (code)
+     {
+     case BLOCK:
+       *expr_p = java_gimplify_block (*expr_p);
+       break;
+ 
+     case EXPR_WITH_FILE_LOCATION:
+ #ifdef USE_MAPPED_LOCATION
+       input_location = EXPR_LOCATION (*expr_p);
+ #else
+       input_location.file = EXPR_WFL_FILENAME (*expr_p);
+       input_location.line = EXPR_WFL_LINENO (*expr_p);
+ #endif
+       *expr_p = EXPR_WFL_NODE (*expr_p);
+       if (EXPR_P (*expr_p))
+ 	SET_EXPR_LOCATION (*expr_p, input_location);
+       break;
+ 
+     case LABELED_BLOCK_EXPR:
+       *expr_p = java_gimplify_labeled_block_expr (*expr_p);
+       break;
+ 
+     case EXIT_BLOCK_EXPR:
+       *expr_p = java_gimplify_exit_block_expr (*expr_p);
+       break;
+ 
+     case CASE_EXPR:
+       *expr_p = java_gimplify_case_expr (*expr_p);
+       break;
+ 
+     case DEFAULT_EXPR:
+       *expr_p = java_gimplify_default_expr (*expr_p);
+       break;
+ 
+     case NEW_ARRAY_INIT:
+       *expr_p = java_gimplify_new_array_init (*expr_p);
+       break;
+ 
+     case TRY_EXPR:
+       *expr_p = java_gimplify_try_expr (*expr_p);
+       break;
+ 
+     case JAVA_CATCH_EXPR:
+       *expr_p = TREE_OPERAND (*expr_p, 0);
+       break;
+ 
+     case JAVA_EXC_OBJ_EXPR:
+       *expr_p = build_exception_object_ref (TREE_TYPE (*expr_p));
+       break;
+ 
+     case VAR_DECL:
+       *expr_p = java_replace_reference (*expr_p, /* want_lvalue */ false);
+       return GS_UNHANDLED;
+ 
+     case MODIFY_EXPR:
+       *expr_p = java_gimplify_modify_expr (*expr_p);
+       return GS_UNHANDLED;
+ 
+     case SAVE_EXPR:
+       /* Note that we can see <save_expr NULL> if the save_expr was
+ 	 already handled by gimplify_save_expr.  */
+       if (TREE_OPERAND (*expr_p, 0) != NULL_TREE
+ 	  && TREE_CODE (TREE_OPERAND (*expr_p, 0)) == VAR_DECL)
+ 	TREE_OPERAND (*expr_p, 0) 
+ 	  = java_replace_reference (TREE_OPERAND (*expr_p, 0), 
+ 			       /* want_lvalue */ false);
+       return GS_UNHANDLED;
+ 
+     /* These should already be lowered before we get here.  */
+     case URSHIFT_EXPR:
+     case COMPARE_EXPR:
+     case COMPARE_L_EXPR:
+     case COMPARE_G_EXPR:
+     case UNARY_PLUS_EXPR:
+     case NEW_ARRAY_EXPR:
+     case NEW_ANONYMOUS_ARRAY_EXPR:
+     case NEW_CLASS_EXPR:
+     case THIS_EXPR:
+     case SYNCHRONIZED_EXPR:
+     case CONDITIONAL_EXPR:
+     case INSTANCEOF_EXPR:
+     case CLASS_LITERAL:
+       abort ();
+ 
+     default:
+       /* Java insists on strict left-to-right evaluation of expressions.
+ 	 A problem may arise if a variable used in the LHS of a binary
+ 	 operation is altered by an assignment to that value in the RHS
+ 	 before we've performed the operation.  So, we always copy every
+ 	 LHS to a temporary variable.  
+ 
+ 	 FIXME: Are there any other cases where we should do this?
+ 	 Parameter lists, maybe?  Or perhaps that's unnecessary because
+ 	 the front end already generates SAVE_EXPRs.  */
+ 
+       if (TREE_CODE_CLASS (code) == tcc_binary
+ 	  || TREE_CODE_CLASS (code) == tcc_comparison)
+ 	{
+ 	  enum gimplify_status stat 
+ 	    = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p,
+ 			     is_gimple_formal_tmp_var, fb_rvalue);
+ 	  if (stat == GS_ERROR)
+ 	    return stat;
+ 	}
+ 
+       return GS_UNHANDLED;
+     }
+ 
+   return GS_OK;
+ }
+ 
+ /* Gimplify a LABELED_BLOCK_EXPR into a LABEL_EXPR following
+    a (possibly empty) body.  */
+ 
+ static tree
+ java_gimplify_labeled_block_expr (tree expr)
+ {
+   tree body = LABELED_BLOCK_BODY (expr);
+   tree label = LABELED_BLOCK_LABEL (expr);
+   tree t;
+ 
+   DECL_CONTEXT (label) = current_function_decl;
+   t = build (LABEL_EXPR, void_type_node, label);
+   if (body != NULL_TREE)
+     t = build (COMPOUND_EXPR, void_type_node, body, t);
+   return t;
+ }
+ 
+ /* Gimplify a EXIT_BLOCK_EXPR into a GOTO_EXPR.  */
+ 
+ static tree
+ java_gimplify_exit_block_expr (tree expr)
+ {
+   tree labeled_block = EXIT_BLOCK_LABELED_BLOCK (expr);
+   tree label;
+ 
+   /* First operand must be a LABELED_BLOCK_EXPR, which should
+      already be lowered (or partially lowered) when we get here.  */
+   gcc_assert (TREE_CODE (labeled_block) == LABELED_BLOCK_EXPR);
+ 
+   label = LABELED_BLOCK_LABEL (labeled_block);
+   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)
+       && TREE_CODE (lhs_type) == POINTER_TYPE)
+     {
+       tree new_lhs = java_replace_reference (lhs, /* want_lvalue */ true);
+       tree new_rhs = build1 (NOP_EXPR, TREE_TYPE (new_lhs), rhs);
+       modify_expr = build2 (MODIFY_EXPR, TREE_TYPE (new_lhs),
+ 			    new_lhs, new_rhs);
+       modify_expr = build1 (NOP_EXPR, lhs_type, modify_expr);
+     }
+   
+   return modify_expr;
+ }
+ 
+     
+ static tree
+ java_gimplify_case_expr (tree expr)
+ {
+   tree label = create_artificial_label ();
+   return build3 (CASE_LABEL_EXPR, void_type_node,
+ 		 TREE_OPERAND (expr, 0), NULL_TREE, label);
+ }
+ 
+ static tree
+ java_gimplify_default_expr (tree expr ATTRIBUTE_UNUSED)
+ {
+   tree label = create_artificial_label ();
+   return build3 (CASE_LABEL_EXPR, void_type_node, NULL_TREE, NULL_TREE, label);
+ }
+ 
+ /* Gimplify BLOCK into a BIND_EXPR.  */
+ 
+ static tree
+ java_gimplify_block (tree java_block)
+ {
+   tree decls = BLOCK_VARS (java_block);
+   tree body = BLOCK_EXPR_BODY (java_block);
+   tree outer = gimple_current_bind_expr ();
+   tree block;
+ 
+   /* Don't bother with empty blocks.  */
+   if (! body)
+     return build_empty_stmt ();
+ 
+   if (IS_EMPTY_STMT (body))
+     return body;
+ 
+   /* Make a proper block.  Java blocks are unsuitable for BIND_EXPR
+      because they use BLOCK_SUBBLOCKS for another purpose.  */
+   block = make_node (BLOCK);
+   BLOCK_VARS (block) = decls;
+ 
+   /* The TREE_USED flag on a block determines whether the debug ouput
+      routines generate info for the variables in that block.  */
+   TREE_USED (block) = 1;
+ 
+   if (outer != NULL_TREE)
+     {
+       outer = BIND_EXPR_BLOCK (outer);
+       BLOCK_SUBBLOCKS (outer) = chainon (BLOCK_SUBBLOCKS (outer), block);
+     }
+ 
+   return build3 (BIND_EXPR, TREE_TYPE (java_block), decls, body, block);
+ }
+ 
+ /* Gimplify a NEW_ARRAY_INIT node into array/element assignments.  */
+ 
+ static tree
+ java_gimplify_new_array_init (tree exp)
+ {
+   tree array_type = TREE_TYPE (TREE_TYPE (exp));
+   tree data_field = lookup_field (&array_type, get_identifier ("data"));
+   tree element_type = TYPE_ARRAY_ELEMENT (array_type);
+   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");
+   tree body = build2 (MODIFY_EXPR, array_ptr_type, tmp,
+ 		      build_new_array (element_type, length));
+ 
+   int index = 0;
+ 
+   /* FIXME: try to allocate array statically?  */
+   while (values != NULL_TREE)
+     {
+       /* FIXME: Should use build_java_arrayaccess here, but avoid
+ 	 bounds checking.  */
+       tree lhs = build3 (COMPONENT_REF, TREE_TYPE (data_field),    
+ 			 build_java_indirect_ref (array_type, tmp, 0),
+ 			 data_field, NULL_TREE);
+       tree assignment = build2 (MODIFY_EXPR, element_type,
+ 				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);
+ }
+ 
+ static tree
+ java_gimplify_try_expr (tree try_expr)
+ {
+   tree body = TREE_OPERAND (try_expr, 0);
+   tree handler = TREE_OPERAND (try_expr, 1);
+   tree catch = NULL_TREE;
+ 
+   /* Build a CATCH_EXPR for each handler.  */
+   while (handler)
+     {
+       tree java_catch = TREE_OPERAND (handler, 0);
+       tree catch_type = TREE_TYPE (TREE_TYPE (BLOCK_EXPR_DECLS (java_catch)));
+       tree expr = build2 (CATCH_EXPR, void_type_node,
+ 			  prepare_eh_table_type (catch_type),
+ 			  handler);
+       if (catch)
+ 	catch = build2 (COMPOUND_EXPR, void_type_node, catch, expr);
+       else
+ 	catch = expr;
+       handler = TREE_CHAIN (handler);
+     }
+   return build2 (TRY_CATCH_EXPR, void_type_node, body, catch);
+ }
+ 
+ /* Dump a tree of some kind.  This is a convenience wrapper for the
+    dump_* functions in tree-dump.c.  */
+ static void
+ dump_java_tree (enum tree_dump_index phase, tree t)
+ {
+   FILE *stream;
+   int flags;
+ 
+   stream = dump_begin (phase, &flags);
+   flags |= TDF_SLIM;
+   if (stream)
+     {
+       dump_node (t, flags, stream);
+       dump_end (phase, stream);
+     }
+ }
diff -Nrcpad gcc-3.4.3/gcc/java/java-opcodes.h gcc-4.0.0/gcc/java/java-opcodes.h
*** gcc-3.4.3/gcc/java/java-opcodes.h	Wed Dec 16 21:20:04 1998
--- gcc-4.0.0/gcc/java/java-opcodes.h	Sun Oct 17 22:51:35 2004
*************** enum java_opcode {
*** 2,5 ****
--- 2,6 ----
  #define JAVAOP(NAME, CODE, KIND, TYPE, VALUE) OPCODE_##NAME = CODE,
  #include "javaop.def"
  #undef JAVAOP
+ LAST_AND_UNUSED_JAVA_OPCODE
  };
diff -Nrcpad gcc-3.4.3/gcc/java/java-tree.def gcc-4.0.0/gcc/java/java-tree.def
*** gcc-3.4.3/gcc/java/java-tree.def	Fri Aug 17 21:07:07 2001
--- gcc-4.0.0/gcc/java/java-tree.def	Wed Nov 24 11:41:38 2004
***************
*** 1,33 ****
  /* Shift right, logical. */
  
! DEFTREECODE (URSHIFT_EXPR, "urshift_expr", '2', 2)
  
  /* Return -1, 0, 1 depending on whether the first argument is
     less, equal, or greater to the second argument. */
! DEFTREECODE (COMPARE_EXPR, "compare_expr", '2', 2)
  
  /* Same as COMPARE_EXPR, but if either value is NaN, the result is -1. */
! DEFTREECODE (COMPARE_L_EXPR, "compare_l_expr", '2', 2)
  /* Same as COMPARE_EXPR, but if either value is NaN, the result is 1. */
! DEFTREECODE (COMPARE_G_EXPR, "compare_g_expr", '2', 2)
  
  /* Unary plus. Operand 0 is the expression the unary plus is applied
     to */
! DEFTREECODE (UNARY_PLUS_EXPR, "unary_plus_expr", '1', 1)
  
  /* New array creation expression.
     Operand 0 is the array base type.
     Operand 1 is the list of dimension expressions. 
     Operand 2 is the number of other dimensions of unspecified range.
     Once patched, the node will bear the type of the created array.  */
! DEFTREECODE (NEW_ARRAY_EXPR, "new_array_expr", 'e', 3)
  
  /* New anonymous array creation expression.
     Operand 0 is the base type of the anonymous array.
     Operand 1 is the signature of the dimensions this array contains.
     Operand 2 is the anonymous array initializer.
     Once patched, the node will bear the type of the created array.  */
! DEFTREECODE (NEW_ANONYMOUS_ARRAY_EXPR, "new_anonymous_array", 'e', 3)
  
  /* New class creation expression.
     Operand 0 is the name of the class to be created
--- 1,34 ----
  /* Shift right, logical. */
  
! DEFTREECODE (URSHIFT_EXPR, "urshift_expr", tcc_binary, 2)
  
  /* Return -1, 0, 1 depending on whether the first argument is
     less, equal, or greater to the second argument. */
! DEFTREECODE (COMPARE_EXPR, "compare_expr", tcc_binary, 2)
  
  /* Same as COMPARE_EXPR, but if either value is NaN, the result is -1. */
! DEFTREECODE (COMPARE_L_EXPR, "compare_l_expr", tcc_binary, 2)
  /* Same as COMPARE_EXPR, but if either value is NaN, the result is 1. */
! DEFTREECODE (COMPARE_G_EXPR, "compare_g_expr", tcc_binary, 2)
  
  /* Unary plus. Operand 0 is the expression the unary plus is applied
     to */
! DEFTREECODE (UNARY_PLUS_EXPR, "unary_plus_expr", tcc_unary, 1)
  
  /* New array creation expression.
     Operand 0 is the array base type.
     Operand 1 is the list of dimension expressions. 
     Operand 2 is the number of other dimensions of unspecified range.
     Once patched, the node will bear the type of the created array.  */
! DEFTREECODE (NEW_ARRAY_EXPR, "new_array_expr", tcc_expression, 3)
  
  /* New anonymous array creation expression.
     Operand 0 is the base type of the anonymous array.
     Operand 1 is the signature of the dimensions this array contains.
     Operand 2 is the anonymous array initializer.
     Once patched, the node will bear the type of the created array.  */
! DEFTREECODE (NEW_ANONYMOUS_ARRAY_EXPR, "new_anonymous_array",
! 	     tcc_expression, 3)
  
  /* New class creation expression.
     Operand 0 is the name of the class to be created
*************** DEFTREECODE (NEW_ANONYMOUS_ARRAY_EXPR, "
*** 35,95 ****
     There is no operand 2.  That slot is used for the
     CALL_EXPR_RTL macro (see preexpand_calls).
     The type should be the one of the created class.  */
! DEFTREECODE (NEW_CLASS_EXPR, "new_class_expr", 'e', 3)
  
  /* Defines `this' as an expression.  */
! DEFTREECODE (THIS_EXPR, "this", '1', 0)
  
  /* Case statement expression.
     Operand 1 is the case value.  */
! DEFTREECODE (CASE_EXPR, "case", 'e', 1)
  
  /* Default statement expression. */
! DEFTREECODE (DEFAULT_EXPR, "default", 'e', 0)
  
  /* Try expression
     Operand 0 is the tried block,
     Operand 1 contains chained catch nodes. */
! DEFTREECODE (TRY_EXPR, "try-catch", 'e', 2)
  
  /* Catch clause.
     Operand 0 is the catch clause block, which contains the declaration of
     the catch clause parameter.  */
! DEFTREECODE (CATCH_EXPR, "catch", '1', 1)
  
  /* Synchronized statement.
     Operand 0 is the expression on which we wish to synchronize,
     Operand 1 is the synchronized expression block.  */
! DEFTREECODE (SYNCHRONIZED_EXPR, "synchronized", 'e', 2)
  
  /* Throw statement.
     Operand 0 is the throw expression.  */
! DEFTREECODE (THROW_EXPR, "throw", '1', 1)
  
  /* Conditional operator.
     Operand 0 is the condition expression
     Operand 1 is the then-value
     Operand 2 is the else-value.  */
! DEFTREECODE (CONDITIONAL_EXPR, "?:", 'e', 3)
  
  /* instanceof operator.
     Operand 0 is the expression that is getting tested
     Operand 1 is the class used for the test.  */
! DEFTREECODE (INSTANCEOF_EXPR, "instanceof", 'e', 2)
  
  /* Array initializers.
     Operand 0 is the (sub) array target to initialize, left to NULL_TREE
     when the node is created.
     Operand 1 is a CONSTRUCTOR node.  */
! DEFTREECODE (NEW_ARRAY_INIT, "new_array_init", '1', 1)
  
  /* Class literal.
     Operand 0 is the name of the class we're trying to build a
     reference from.  */
! DEFTREECODE (CLASS_LITERAL, "class_literal", '1', 1)
  
  /* The Java object within the exception object from the runtime.  */
! DEFTREECODE (JAVA_EXC_OBJ_EXPR, "java_exc_obj_expr", 'e', 0)
  
  /*
  Local variables:
--- 36,117 ----
     There is no operand 2.  That slot is used for the
     CALL_EXPR_RTL macro (see preexpand_calls).
     The type should be the one of the created class.  */
! DEFTREECODE (NEW_CLASS_EXPR, "new_class_expr", tcc_expression, 3)
  
  /* Defines `this' as an expression.  */
! DEFTREECODE (THIS_EXPR, "this", tcc_unary, 0)
! 
! /* A labeled block. Operand 0 is the label that will be generated to
!    mark the end of the block.  Operand 1 is the labeled block body.  */
! DEFTREECODE (LABELED_BLOCK_EXPR, "labeled_block_expr", tcc_expression, 2)
! 
! /* Exit a labeled block, possibly returning a value.  Operand 0 is a
!    LABELED_BLOCK_EXPR to exit.  */
! DEFTREECODE (EXIT_BLOCK_EXPR, "exit_block_expr", tcc_statement, 1)
  
  /* Case statement expression.
     Operand 1 is the case value.  */
! DEFTREECODE (CASE_EXPR, "case", tcc_expression, 1)
  
  /* Default statement expression. */
! DEFTREECODE (DEFAULT_EXPR, "default", tcc_expression, 0)
  
  /* Try expression
     Operand 0 is the tried block,
     Operand 1 contains chained catch nodes. */
! DEFTREECODE (TRY_EXPR, "try-catch", tcc_expression, 2)
  
  /* Catch clause.
     Operand 0 is the catch clause block, which contains the declaration of
     the catch clause parameter.  */
! DEFTREECODE (JAVA_CATCH_EXPR, "catch", tcc_unary, 1)
  
  /* Synchronized statement.
     Operand 0 is the expression on which we wish to synchronize,
     Operand 1 is the synchronized expression block.  */
! DEFTREECODE (SYNCHRONIZED_EXPR, "synchronized", tcc_expression, 2)
  
  /* Throw statement.
     Operand 0 is the throw expression.  */
! DEFTREECODE (THROW_EXPR, "throw", tcc_unary, 1)
  
  /* Conditional operator.
     Operand 0 is the condition expression
     Operand 1 is the then-value
     Operand 2 is the else-value.  */
! DEFTREECODE (CONDITIONAL_EXPR, "?:", tcc_expression, 3)
  
  /* instanceof operator.
     Operand 0 is the expression that is getting tested
     Operand 1 is the class used for the test.  */
! DEFTREECODE (INSTANCEOF_EXPR, "instanceof", tcc_expression, 2)
  
  /* Array initializers.
     Operand 0 is the (sub) array target to initialize, left to NULL_TREE
     when the node is created.
     Operand 1 is a CONSTRUCTOR node.  */
! DEFTREECODE (NEW_ARRAY_INIT, "new_array_init", tcc_unary, 1)
  
  /* Class literal.
     Operand 0 is the name of the class we're trying to build a
     reference from.  */
! DEFTREECODE (CLASS_LITERAL, "class_literal", tcc_unary, 1)
  
  /* The Java object within the exception object from the runtime.  */
! DEFTREECODE (JAVA_EXC_OBJ_EXPR, "java_exc_obj_expr", tcc_expression, 0)
! 
! /* Annotates a tree node (usually an expression) with source location
!    information: a file name (EXPR_WFL_FILENAME);  a line number
!    (EXPR_WFL_LINENO); and column number (EXPR_WFL_COLNO).  It is
!    expanded as the contained node (EXPR_WFL_NODE);  a line note should
!    be emitted first if EXPR_WFL_EMIT_LINE_NOTE.  */
! #ifdef USE_MAPPED_LOCATION
! DEFTREECODE (EXPR_WITH_FILE_LOCATION, "expr_with_file_location",
! 	     tcc_expression, 2)
! #else
! DEFTREECODE (EXPR_WITH_FILE_LOCATION, "expr_with_file_location",
! 	     tcc_expression, 3)
! #endif
  
  /*
  Local variables:
diff -Nrcpad gcc-3.4.3/gcc/java/java-tree.h gcc-4.0.0/gcc/java/java-tree.h
*** gcc-3.4.3/gcc/java/java-tree.h	Fri Jan 16 17:11:08 2004
--- gcc-4.0.0/gcc/java/java-tree.h	Mon Jan 24 19:07:06 2005
***************
*** 1,6 ****
  /* Definitions for parsing and type checking for the GNU compiler for
     the Java(TM) language.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,6 ----
  /* Definitions for parsing and type checking 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.
*************** struct JCF;
*** 48,69 ****
        SUPPRESS_UNREACHABLE_ERROR (for other _EXPR nodes)
        ANONYMOUS_CLASS_P (in RECORD_TYPE)
        ARG_FINAL_P (in TREE_LIST)
!    1: CLASS_HAS_SUPER_FLAG (in TREE_VEC).
!       IS_A_CLASSFILE_NAME (in IDENTIFIER_NODE)
        COMPOUND_ASSIGN_P (in EXPR (binop_*))
        LOCAL_CLASS_P (in RECORD_TYPE)
        BLOCK_IS_IMPLICIT (in BLOCK)
-       JAVA_FILE_P (in TREE_LIST in current_file_list)
     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) 
!       CLASS_FILE_P (in TREE_LIST in current_file_list)
     3: IS_AN_IMPORT_ON_DEMAND_P (in IDENTIFIER_NODE)
        RESOLVE_PACKAGE_NAME_P (in EXPR_WITH_FILE_LOCATION)
        SWITCH_HAS_DEFAULT (in SWITCH_EXPR)
-       ZIP_FILE_P (in TREE_LIST in current_file_list)
        HAS_FINALIZER (in RECORD_TYPE)
     4: IS_A_COMMAND_LINE_FILENAME_P (in IDENTIFIER_NODE)
        RESOLVE_TYPE_NAME_P (in EXPR_WITH_FILE_LOCATION)
--- 48,66 ----
        SUPPRESS_UNREACHABLE_ERROR (for other _EXPR nodes)
        ANONYMOUS_CLASS_P (in RECORD_TYPE)
        ARG_FINAL_P (in TREE_LIST)
!    1: IS_A_CLASSFILE_NAME (in IDENTIFIER_NODE)
        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) 
!       CLASS_FILE_P (in a TRANSLATION_UNIT_DECL in current_file_list)
     3: IS_AN_IMPORT_ON_DEMAND_P (in IDENTIFIER_NODE)
        RESOLVE_PACKAGE_NAME_P (in EXPR_WITH_FILE_LOCATION)
        SWITCH_HAS_DEFAULT (in SWITCH_EXPR)
        HAS_FINALIZER (in RECORD_TYPE)
     4: IS_A_COMMAND_LINE_FILENAME_P (in IDENTIFIER_NODE)
        RESOLVE_TYPE_NAME_P (in EXPR_WITH_FILE_LOCATION)
*************** struct JCF;
*** 117,130 ****
        FIELD_THISN (in FIELD_DECL)
  */
  
  /* True if the class whose TYPE_BINFO this is has a superclass.
     (True of all classes except Object.) */
! #define CLASS_HAS_SUPER_FLAG(BINFO) TREE_LANG_FLAG_1(BINFO)
! #define CLASS_HAS_SUPER(TYPE) CLASS_HAS_SUPER_FLAG (TYPE_BINFO (TYPE))
  
  /* Return the supertype of class TYPE, or NULL_TREE is it has none. */
! #define CLASSTYPE_SUPER(TYPE) (CLASS_HAS_SUPER (TYPE) ? \
!   BINFO_TYPE (TREE_VEC_ELT (TYPE_BINFO_BASETYPES (TYPE), 0)) : NULL_TREE)
  
  /* True if the class we are compiling is a .java source file;
     false if it is a .class bytecode file. */
--- 114,132 ----
        FIELD_THISN (in FIELD_DECL)
  */
  
+ #define VAR_OR_FIELD_CHECK(DECL) \
+   TREE_CHECK3 (DECL, FIELD_DECL, VAR_DECL, PARM_DECL)
+ 
  /* True if the class whose TYPE_BINFO this is has a superclass.
     (True of all classes except Object.) */
! #define CLASS_HAS_SUPER_FLAG(BINFO) BINFO_FLAG_1 (BINFO)
! #define CLASS_HAS_SUPER(TYPE) \
!   (TYPE_BINFO (TYPE) && CLASS_HAS_SUPER_FLAG (TYPE_BINFO (TYPE)))
  
  /* Return the supertype of class TYPE, or NULL_TREE is it has none. */
! #define CLASSTYPE_SUPER(TYPE) (CLASS_HAS_SUPER (TYPE) \
!   ? BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (TYPE), 0)) \
!   : NULL_TREE)
  
  /* True if the class we are compiling is a .java source file;
     false if it is a .class bytecode file. */
*************** extern int compiling_from_source;
*** 149,157 ****
  #define all_class_list \
    java_global_trees[JTI_ALL_CLASS_LIST]
  
- /* List of all class filenames seen so far.  */
- #define all_class_filename java_global_trees [JTI_ALL_CLASS_FILENAME]
- 
  /* List of virtual decls referred to by this translation unit, used to
     generate virtual method offset symbol table.  */
  
--- 151,156 ----
*************** extern int flag_jni;
*** 179,187 ****
  
  extern int flag_extraneous_semicolon;
  
- /* When nonzero, report use of deprecated classes, methods, or fields.  */
- extern int flag_deprecated;
- 
  /* When nonzero, always check for a non gcj generated classes archive.  */
  
  extern int flag_force_classes_archive_check;
--- 178,183 ----
*************** extern int flag_indirect_dispatch;
*** 231,236 ****
--- 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;
  
*************** extern GTY(()) struct JCF * current_jcf;
*** 241,246 ****
--- 240,247 ----
     before static field references.  */
  extern int always_initialize_class_p;
  
+ extern int flag_verify_invocations;
+ 
  typedef struct CPool constant_pool;
  
  #define CONSTANT_ResolvedFlag 16
*************** typedef struct CPool constant_pool;
*** 273,278 ****
--- 274,280 ----
  
  extern GTY(()) tree java_lang_cloneable_identifier_node;
  extern GTY(()) tree java_io_serializable_identifier_node;
+ extern GTY(()) tree gcj_abi_version;
  
  enum java_tree_index
  {
*************** enum java_tree_index
*** 346,352 ****
    JTI_DOUBLE_ZERO_NODE,
    JTI_INTEGER_TWO_NODE,
    JTI_INTEGER_FOUR_NODE,
-   JTI_EMPTY_STMT_NODE,
  
    JTI_METHODTABLE_TYPE,
    JTI_METHODTABLE_PTR_TYPE,
--- 348,353 ----
*************** enum java_tree_index
*** 372,380 ****
--- 373,385 ----
    JTI_OTABLE_PTR_TYPE,
    JTI_ATABLE_TYPE,
    JTI_ATABLE_PTR_TYPE,
+   JTI_ITABLE_TYPE,
+   JTI_ITABLE_PTR_TYPE,
    JTI_SYMBOL_TYPE,
    JTI_SYMBOLS_ARRAY_TYPE,
    JTI_SYMBOLS_ARRAY_PTR_TYPE,
+   JTI_ASSERTION_ENTRY_TYPE,
+   JTI_ASSERTION_TABLE_TYPE,
  
    JTI_END_PARAMS_NODE,
  
*************** enum java_tree_index
*** 393,398 ****
--- 398,404 ----
    JTI_SOFT_MONITORENTER_NODE,
    JTI_SOFT_MONITOREXIT_NODE,
    JTI_SOFT_LOOKUPINTERFACEMETHOD_NODE,
+   JTI_SOFT_LOOKUPINTERFACEMETHODBYNAME_NODE,
    JTI_SOFT_LOOKUPJNIMETHOD_NODE,
    JTI_SOFT_GETJNIENVNEWFRAME_NODE,
    JTI_SOFT_JNIPOPSYSTEMFRAME_NODE,
*************** enum java_tree_index
*** 412,418 ****
    JTI_CURRENT_CLASS,
    JTI_OUTPUT_CLASS,
    JTI_ALL_CLASS_LIST,
-   JTI_ALL_CLASS_FILENAME,
  
    JTI_PREDEF_FILENAMES,
  
--- 418,423 ----
*************** extern GTY(()) tree java_global_trees[JT
*** 559,566 ****
    java_global_trees[JTI_INTEGER_TWO_NODE]
  #define integer_four_node \
    java_global_trees[JTI_INTEGER_FOUR_NODE]
- #define empty_stmt_node \
-   java_global_trees[JTI_EMPTY_STMT_NODE]
  
  /* The type for struct methodtable. */
  #define methodtable_type \
--- 564,569 ----
*************** extern GTY(()) tree java_global_trees[JT
*** 605,622 ****
    java_global_trees[JTI_OTABLE_TYPE]
  #define atable_type \
    java_global_trees[JTI_ATABLE_TYPE]
  #define otable_ptr_type \
    java_global_trees[JTI_OTABLE_PTR_TYPE]
  #define atable_ptr_type \
    java_global_trees[JTI_ATABLE_PTR_TYPE]
  #define symbol_type \
    java_global_trees[JTI_SYMBOL_TYPE]
  #define symbols_array_type \
    java_global_trees[JTI_SYMBOLS_ARRAY_TYPE]
  #define symbols_array_ptr_type \
!   java_global_trees[JTI_SYMBOLS_ARRAY_PTR_TYPE]
! #define class_refs_decl \
!   Jjava_global_trees[TI_CLASS_REFS_DECL]
  
  #define end_params_node \
    java_global_trees[JTI_END_PARAMS_NODE]
--- 608,631 ----
    java_global_trees[JTI_OTABLE_TYPE]
  #define atable_type \
    java_global_trees[JTI_ATABLE_TYPE]
+ #define itable_type \
+   java_global_trees[JTI_ITABLE_TYPE]
  #define otable_ptr_type \
    java_global_trees[JTI_OTABLE_PTR_TYPE]
  #define atable_ptr_type \
    java_global_trees[JTI_ATABLE_PTR_TYPE]
+ #define itable_ptr_type \
+   java_global_trees[JTI_ITABLE_PTR_TYPE]
  #define symbol_type \
    java_global_trees[JTI_SYMBOL_TYPE]
  #define symbols_array_type \
    java_global_trees[JTI_SYMBOLS_ARRAY_TYPE]
  #define symbols_array_ptr_type \
!   java_global_trees[JTI_SYMBOLS_ARRAY_PTR_TYPE]  
! #define assertion_entry_type \
!   java_global_trees[JTI_ASSERTION_ENTRY_TYPE]
! #define assertion_table_type \
!   java_global_trees[JTI_ASSERTION_TABLE_TYPE]
  
  #define end_params_node \
    java_global_trees[JTI_END_PARAMS_NODE]
*************** extern GTY(()) tree java_global_trees[JT
*** 652,657 ****
--- 661,668 ----
    java_global_trees[JTI_SOFT_MONITOREXIT_NODE]
  #define soft_lookupinterfacemethod_node \
    java_global_trees[JTI_SOFT_LOOKUPINTERFACEMETHOD_NODE]
+ #define soft_lookupinterfacemethodbyname_node \
+   java_global_trees[JTI_SOFT_LOOKUPINTERFACEMETHODBYNAME_NODE]
  #define soft_lookupjnimethod_node \
    java_global_trees[JTI_SOFT_LOOKUPJNIMETHOD_NODE]
  #define soft_getjnienvnewframe_node \
*************** union lang_tree_node 
*** 762,768 ****
  /* Number of local variable slots needed for the arguments of this function. */
  #define DECL_ARG_SLOT_COUNT(DECL) \
    (DECL_LANG_SPECIFIC(DECL)->u.f.arg_slot_count)
! /* Line number of end of function. */
  #define DECL_FUNCTION_LAST_LINE(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.last_line)
  /* Information on declaration location */
  #define DECL_FUNCTION_WFL(DECL)  (DECL_LANG_SPECIFIC(DECL)->u.f.wfl)
--- 773,779 ----
  /* Number of local variable slots needed for the arguments of this function. */
  #define DECL_ARG_SLOT_COUNT(DECL) \
    (DECL_LANG_SPECIFIC(DECL)->u.f.arg_slot_count)
! /* Source location of end of function. */
  #define DECL_FUNCTION_LAST_LINE(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.last_line)
  /* Information on declaration location */
  #define DECL_FUNCTION_WFL(DECL)  (DECL_LANG_SPECIFIC(DECL)->u.f.wfl)
*************** union lang_tree_node 
*** 822,882 ****
    (DECL_LANG_SPECIFIC(DECL)->u.f.init_calls_this)
  
  /* True when DECL (a field) is Synthetic.  */
! #define FIELD_SYNTHETIC(DECL) DECL_LANG_FLAG_2 (DECL)
  
  /* True when DECL aliases an outer context local variable.  */
! #define FIELD_LOCAL_ALIAS(DECL) DECL_LANG_FLAG_6 (DECL)
  
  /* True when DECL, which aliases an outer context local variable is
     used by the inner classe */
! #define FIELD_LOCAL_ALIAS_USED(DECL) DECL_LANG_FLAG_7 (DECL)
  
  /* True when DECL is a this$<n> field. Note that
     FIELD_LOCAL_ALIAS_USED can be differentiated when tested against
     FIELD_LOCAL_ALIAS.  */
! #define FIELD_THISN(DECL) DECL_LANG_FLAG_7 (DECL)
  
  /* In a LABEL_DECL, a TREE_VEC that saves the type_map at that point. */
! #define LABEL_TYPE_STATE(NODE) (DECL_INITIAL (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(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) ((NODE)->decl.u2.i)
  
  /* Used during verification to mark the label has "changed". (See JVM Spec). */
! #define LABEL_CHANGED(NODE) DECL_LANG_FLAG_6(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(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(NODE)
  
  /* In a LABEL_DECL, if LABEL_IN_SUBR(NODE), points to start of subroutine. */
! #define LABEL_SUBR_START(NODE) DECL_ABSTRACT_ORIGIN(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,
--- 833,895 ----
    (DECL_LANG_SPECIFIC(DECL)->u.f.init_calls_this)
  
  /* True when DECL (a field) is Synthetic.  */
! #define FIELD_SYNTHETIC(DECL) DECL_LANG_FLAG_2 (VAR_OR_FIELD_CHECK (DECL))
  
  /* True when DECL aliases an outer context local variable.  */
! #define FIELD_LOCAL_ALIAS(DECL) DECL_LANG_FLAG_6 (VAR_OR_FIELD_CHECK (DECL))
  
  /* True when DECL, which aliases an outer context local variable is
     used by the inner classe */
! #define FIELD_LOCAL_ALIAS_USED(DECL) DECL_LANG_FLAG_7 (VAR_OR_FIELD_CHECK (DECL))
  
  /* True when DECL is a this$<n> field. Note that
     FIELD_LOCAL_ALIAS_USED can be differentiated when tested against
     FIELD_LOCAL_ALIAS.  */
! #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,
*************** union lang_tree_node 
*** 885,920 ****
  
  /* The slot number for this local variable. */
  #define DECL_LOCAL_SLOT_NUMBER(NODE) \
!   (DECL_LANG_SPECIFIC(NODE)->u.v.slot_number)
  /* The start (bytecode) pc for the valid range of this local variable. */
! #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(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 variable was initialized upon its declaration,
!    or (if a field) in an initializer.  Set after definite assignment. */
! #define DECL_FIELD_FINAL_IUD(NODE) \
!   (DECL_LANG_SPECIFIC(NODE)->u.v.final_iud)
  /* The original WFL of a final variable. */
! #define DECL_FIELD_FINAL_WFL(NODE) \
!   (DECL_LANG_SPECIFIC(NODE)->u.v.wfl)
  /* The class that's the owner of a dynamic binding table.  */
! #define DECL_OWNER(NODE) \
!   (DECL_LANG_SPECIFIC(NODE)->u.v.owner)
  /* True if NODE is a local variable final. */
  #define LOCAL_FINAL_P(NODE) (DECL_LANG_SPECIFIC (NODE) && DECL_FINAL (NODE))
  /* True if NODE is a final field. */
  #define FINAL_VARIABLE_P(NODE) (FIELD_FINAL (NODE) && !FIELD_STATIC (NODE))
  /* True if NODE is a class final field. */
--- 898,929 ----
  
  /* The slot number for this local variable. */
  #define DECL_LOCAL_SLOT_NUMBER(NODE) \
!   (DECL_LANG_SPECIFIC (NODE)->u.v.slot_number)
  /* The start (bytecode) pc for the valid range of this local variable. */
! #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)
  /* The original WFL of a final variable. */
! #define DECL_FIELD_FINAL_WFL(NODE)  (DECL_LANG_SPECIFIC(NODE)->u.v.wfl)
  /* The class that's the owner of a dynamic binding table.  */
! #define DECL_OWNER(NODE)            (DECL_LANG_SPECIFIC(NODE)->u.v.owner)
  /* True if NODE is a local variable final. */
  #define LOCAL_FINAL_P(NODE) (DECL_LANG_SPECIFIC (NODE) && DECL_FINAL (NODE))
+ /* True if a final local variable was initialized upon its declaration.  */
+ #define DECL_LOCAL_FINAL_IUD(NODE)  (DECL_LANG_SPECIFIC (NODE)->u.v.final_iud)
  /* True if NODE is a final field. */
  #define FINAL_VARIABLE_P(NODE) (FIELD_FINAL (NODE) && !FIELD_STATIC (NODE))
  /* True if NODE is a class final field. */
*************** union lang_tree_node 
*** 923,935 ****
  /* True if NODE is a class initialization flag. This macro accesses
     the flag to read or set it.  */
  #define LOCAL_CLASS_INITIALIZATION_FLAG(NODE) \
!     (DECL_LANG_SPECIFIC(NODE)->u.v.cif)
  /* True if NODE is a class initialization flag. */
  #define LOCAL_CLASS_INITIALIZATION_FLAG_P(NODE) \
      (DECL_LANG_SPECIFIC (NODE) && LOCAL_CLASS_INITIALIZATION_FLAG(NODE))
  /* True if NODE is a variable that is out of scope.  */
  #define LOCAL_VAR_OUT_OF_SCOPE_P(NODE) \
!     (DECL_LANG_SPECIFIC(NODE)->u.v.freed)
  /* Create a DECL_LANG_SPECIFIC if necessary. */
  #define MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC(T)			\
    if (DECL_LANG_SPECIFIC (T) == NULL)				\
--- 932,946 ----
  /* True if NODE is a class initialization flag. This macro accesses
     the flag to read or set it.  */
  #define LOCAL_CLASS_INITIALIZATION_FLAG(NODE) \
!     (DECL_LANG_SPECIFIC (NODE)->u.v.cif)
  /* True if NODE is a class initialization flag. */
  #define LOCAL_CLASS_INITIALIZATION_FLAG_P(NODE) \
      (DECL_LANG_SPECIFIC (NODE) && LOCAL_CLASS_INITIALIZATION_FLAG(NODE))
  /* True if NODE is a variable that is out of scope.  */
  #define LOCAL_VAR_OUT_OF_SCOPE_P(NODE) \
!     (DECL_LANG_SPECIFIC (NODE)->u.v.freed)
! #define LOCAL_SLOT_P(NODE) \
!     (DECL_LANG_SPECIFIC (NODE)->u.v.local_slot)
  /* 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 
*** 946,956 ****
         && TREE_CODE (TREE_TYPE (NODE)) != POINTER_TYPE) \
     || TREE_CODE (NODE) == REAL_CST)
  
! /* For a local VAR_DECL, holds the index into a words bitstring 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) (DECL_CHECK (DECL)->decl.pointer_alias_set)
  
  /* DECL_LANG_SPECIFIC for FUNCTION_DECLs. */
  struct lang_decl_func GTY(())
--- 957,967 ----
         && TREE_CODE (TREE_TYPE (NODE)) != POINTER_TYPE) \
     || TREE_CODE (NODE) == REAL_CST)
  
! /* For a local VAR_DECL or PARM_DECL, holds the index into a words bitstring
!    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(())
*************** struct lang_decl_func GTY(())
*** 964,970 ****
    int max_locals;
    int max_stack;
    int arg_slot_count;
!   int last_line; 		/* End line number for a function decl */
    tree wfl;			/* Information on the original location */
    tree throws_list;		/* Exception specified by `throws' */
    tree function_decl_body;	/* Hold all function's statements */
--- 975,983 ----
    int max_locals;
    int max_stack;
    int arg_slot_count;
!   /* A temporary lie for the sake of ggc.  Actually, last_line is
!      only a source_location if USE_MAPPED_LOCATION.  FIXME.  */
!   source_location last_line;	/* End line number for a function decl */
    tree wfl;			/* Information on the original location */
    tree throws_list;		/* Exception specified by `throws' */
    tree function_decl_body;	/* Hold all function's statements */
*************** struct lang_decl_func GTY(())
*** 990,995 ****
--- 1003,1009 ----
    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(())
*************** struct treetreehash_entry GTY(())
*** 998,1003 ****
--- 1012,1033 ----
    tree value;
  };
  
+ /* These represent the possible assertion_code's that can be emitted in the
+    type assertion table.  */
+ enum
+ {
+   JV_ASSERT_END_OF_TABLE = 0,     /* Last entry in table.  */
+   JV_ASSERT_TYPES_COMPATIBLE = 1, /* Operand A is assignable to Operand B.  */
+   JV_ASSERT_IS_INSTANTIABLE = 2   /* Operand A is an instantiable class.  */
+ };
+ 
+ typedef struct type_assertion GTY(())
+ {
+   int assertion_code; /* 'opcode' for the type of this assertion. */
+   tree op1;           /* First operand. */
+   tree op2;           /* Second operand. */
+ } type_assertion;
+ 
  extern tree java_treetreehash_find (htab_t, tree);
  extern tree * java_treetreehash_new (htab_t, tree);
  extern htab_t java_treetreehash_create (size_t size, int ggc);
*************** struct lang_decl_var GTY(())
*** 1015,1084 ****
    tree owner;
    unsigned int final_iud : 1;	/* Final initialized upon declaration */
    unsigned int cif : 1;		/* True: decl is a class initialization flag */
!   unsigned int freed;		/* Decl is no longer in scope.  */
  };
  
  /* This is what 'lang_decl' really points to.  */
  
! enum lang_decl_desc {
!   LANG_DECL_FUNC,
!   LANG_DECL_VAR
! };
  
  struct lang_decl GTY(())
  {
    enum lang_decl_desc desc;
!   union lang_decl_u {
!     struct lang_decl_func GTY ((tag ("LANG_DECL_FUNC"))) f;
!     struct lang_decl_var GTY ((tag ("LANG_DECL_VAR"))) v;
!   } GTY ((desc ("%0.desc"))) u;
  };
  
  /* Macro to access fields in `struct lang_type'.  */
  
! #define TYPE_SIGNATURE(T) (TYPE_LANG_SPECIFIC(T)->signature)
! #define TYPE_JCF(T) (TYPE_LANG_SPECIFIC(T)->jcf)
! #define TYPE_CPOOL(T) (TYPE_LANG_SPECIFIC(T)->cpool)
! #define TYPE_CPOOL_DATA_REF(T) (TYPE_LANG_SPECIFIC(T)->cpool_data_ref)
! #define MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC(T)				 \
!   if (TYPE_LANG_SPECIFIC ((T)) == NULL)					 \
!     {									 \
!       TYPE_LANG_SPECIFIC ((T)) 					 	 \
!         = ggc_alloc_cleared (sizeof (struct lang_type));		 \
!     }
  
! #define TYPE_FINIT_STMT_LIST(T)  (TYPE_LANG_SPECIFIC(T)->finit_stmt_list)
! #define TYPE_CLINIT_STMT_LIST(T) (TYPE_LANG_SPECIFIC(T)->clinit_stmt_list)
! #define TYPE_II_STMT_LIST(T)     (TYPE_LANG_SPECIFIC(T)->ii_block)
  /* The decl of the synthetic method `class$' used to handle `.class'
     for non primitive types when compiling to bytecode. */
- #define TYPE_DOT_CLASS(T)        (TYPE_LANG_SPECIFIC(T)->dot_class)
- #define TYPE_PACKAGE_LIST(T)     (TYPE_LANG_SPECIFIC(T)->package_list)
- #define TYPE_IMPORT_LIST(T)      (TYPE_LANG_SPECIFIC(T)->import_list)
- #define TYPE_IMPORT_DEMAND_LIST(T) (TYPE_LANG_SPECIFIC(T)->import_demand_list)
- #define TYPE_PRIVATE_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->pic)
- #define TYPE_PROTECTED_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->poic)
- #define TYPE_STRICTFP(T) (TYPE_LANG_SPECIFIC(T)->strictfp)
- #define TYPE_USES_ASSERTIONS(T) (TYPE_LANG_SPECIFIC(T)->assertions)
  
! #define TYPE_ATABLE_METHODS(T)   (TYPE_LANG_SPECIFIC(T)->atable_methods)
! #define TYPE_ATABLE_SYMS_DECL(T) (TYPE_LANG_SPECIFIC(T)->atable_syms_decl)
! #define TYPE_ATABLE_DECL(T)      (TYPE_LANG_SPECIFIC(T)->atable_decl)
  
! #define TYPE_OTABLE_METHODS(T)   (TYPE_LANG_SPECIFIC(T)->otable_methods)
! #define TYPE_OTABLE_SYMS_DECL(T) (TYPE_LANG_SPECIFIC(T)->otable_syms_decl)
! #define TYPE_OTABLE_DECL(T)      (TYPE_LANG_SPECIFIC(T)->otable_decl)
  
! #define TYPE_CTABLE_DECL(T)      (TYPE_LANG_SPECIFIC(T)->ctable_decl)
! #define TYPE_CATCH_CLASSES(T)    (TYPE_LANG_SPECIFIC(T)->catch_classes)
  
! #define TYPE_TO_RUNTIME_MAP(T)   (TYPE_LANG_SPECIFIC(T)->type_to_runtime_map)
  
  struct lang_type GTY(())
  {
    tree signature;
!   struct JCF * jcf;
!   struct CPool * cpool;
    tree cpool_data_ref;		/* Cached */
    tree finit_stmt_list;		/* List of statements finit$ will use */
    tree clinit_stmt_list;	/* List of statements <clinit> will use  */
--- 1045,1120 ----
    tree owner;
    unsigned int final_iud : 1;	/* Final initialized upon declaration */
    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.  */
  };
  
  /* This is what 'lang_decl' really points to.  */
  
! enum lang_decl_desc {LANG_DECL_FUNC, LANG_DECL_VAR};
  
  struct lang_decl GTY(())
  {
    enum lang_decl_desc desc;
!   union lang_decl_u
!     {
!       struct lang_decl_func GTY ((tag ("LANG_DECL_FUNC"))) f;
!       struct lang_decl_var GTY ((tag ("LANG_DECL_VAR"))) v;
!     } GTY ((desc ("%0.desc"))) u;
  };
  
  /* Macro to access fields in `struct lang_type'.  */
  
! #define TYPE_SIGNATURE(T)	(TYPE_LANG_SPECIFIC (T)->signature)
! #define TYPE_JCF(T)		(TYPE_LANG_SPECIFIC (T)->jcf)
! #define TYPE_CPOOL(T)		(TYPE_LANG_SPECIFIC (T)->cpool)
! #define TYPE_CPOOL_DATA_REF(T)	(TYPE_LANG_SPECIFIC (T)->cpool_data_ref)
! #define MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC(T) \
!   if (TYPE_LANG_SPECIFIC ((T)) == NULL)		\
!      TYPE_LANG_SPECIFIC ((T))			\
!      = ggc_alloc_cleared (sizeof (struct lang_type));
  
! #define TYPE_FINIT_STMT_LIST(T)  (TYPE_LANG_SPECIFIC (T)->finit_stmt_list)
! #define TYPE_CLINIT_STMT_LIST(T) (TYPE_LANG_SPECIFIC (T)->clinit_stmt_list)
! #define TYPE_II_STMT_LIST(T)     (TYPE_LANG_SPECIFIC (T)->ii_block)
  /* The decl of the synthetic method `class$' used to handle `.class'
     for non primitive types when compiling to bytecode. */
  
! #define TYPE_DUMMY(T)		(TYPE_LANG_SPECIFIC(T)->dummy_class)
  
! #define TYPE_DOT_CLASS(T)        (TYPE_LANG_SPECIFIC (T)->dot_class)
! #define TYPE_PACKAGE_LIST(T)     (TYPE_LANG_SPECIFIC (T)->package_list)
! #define TYPE_IMPORT_LIST(T)      (TYPE_LANG_SPECIFIC (T)->import_list)
! #define TYPE_IMPORT_DEMAND_LIST(T) (TYPE_LANG_SPECIFIC (T)->import_demand_list)
! #define TYPE_PRIVATE_INNER_CLASS(T) (TYPE_LANG_SPECIFIC (T)->pic)
! #define TYPE_PROTECTED_INNER_CLASS(T) (TYPE_LANG_SPECIFIC (T)->poic)
! #define TYPE_STRICTFP(T) (TYPE_LANG_SPECIFIC (T)->strictfp)
! #define TYPE_USES_ASSERTIONS(T) (TYPE_LANG_SPECIFIC (T)->assertions)
  
! #define TYPE_ATABLE_METHODS(T)   (TYPE_LANG_SPECIFIC (T)->atable_methods)
! #define TYPE_ATABLE_SYMS_DECL(T) (TYPE_LANG_SPECIFIC (T)->atable_syms_decl)
! #define TYPE_ATABLE_DECL(T)      (TYPE_LANG_SPECIFIC (T)->atable_decl)
  
! #define TYPE_OTABLE_METHODS(T)   (TYPE_LANG_SPECIFIC (T)->otable_methods)
! #define TYPE_OTABLE_SYMS_DECL(T) (TYPE_LANG_SPECIFIC (T)->otable_syms_decl)
! #define TYPE_OTABLE_DECL(T)      (TYPE_LANG_SPECIFIC (T)->otable_decl)
! 
! #define TYPE_ITABLE_METHODS(T)   (TYPE_LANG_SPECIFIC (T)->itable_methods)
! #define TYPE_ITABLE_SYMS_DECL(T) (TYPE_LANG_SPECIFIC (T)->itable_syms_decl)
! #define TYPE_ITABLE_DECL(T)      (TYPE_LANG_SPECIFIC (T)->itable_decl)
! 
! #define TYPE_CTABLE_DECL(T)      (TYPE_LANG_SPECIFIC (T)->ctable_decl)
! #define TYPE_CATCH_CLASSES(T)    (TYPE_LANG_SPECIFIC (T)->catch_classes)
! #define TYPE_VERIFY_METHOD(T)    (TYPE_LANG_SPECIFIC (T)->verify_method)
! 
! #define TYPE_TO_RUNTIME_MAP(T)   (TYPE_LANG_SPECIFIC (T)->type_to_runtime_map)
! #define TYPE_ASSERTIONS(T)   	 (TYPE_LANG_SPECIFIC (T)->type_assertions)
  
  struct lang_type GTY(())
  {
    tree signature;
!   struct JCF *jcf;
!   struct CPool *cpool;
    tree cpool_data_ref;		/* Cached */
    tree finit_stmt_list;		/* List of statements finit$ will use */
    tree clinit_stmt_list;	/* List of statements <clinit> will use  */
*************** struct lang_type GTY(())
*** 1091,1114 ****
    tree import_list;		/* Imported types, in the CU of this class */
    tree import_demand_list;	/* Imported types, in the CU of this class */
  
!   tree otable_methods;          /* List of static decls referred to by this class.  */
    tree otable_decl;		/* The static address table.  */
    tree otable_syms_decl;
  
!   tree atable_methods;          /* List of static decls referred to by this class.  */
    tree atable_decl;		/* The static address table.  */
    tree atable_syms_decl;
  
!   tree ctable_decl;             /* The table of classes for the runtime type matcher.  */
    tree catch_classes;
  
    htab_t GTY ((param_is (struct treetreehash_entry))) type_to_runtime_map;   
!                                 /* The mapping of classes to exception region markers.  */
  
    unsigned pic:1;		/* Private Inner Class. */
    unsigned poic:1;		/* Protected Inner Class. */
    unsigned strictfp:1;		/* `strictfp' class.  */
    unsigned assertions:1;	/* Any method uses `assert'.  */
  };
  
  #define JCF_u4 unsigned long
--- 1127,1167 ----
    tree import_list;		/* Imported types, in the CU of this class */
    tree import_demand_list;	/* Imported types, in the CU of this class */
  
!   tree otable_methods;          /* List of static decls referred to by this
! 				   class.  */
    tree otable_decl;		/* The static address table.  */
    tree otable_syms_decl;
  
!   tree atable_methods;          /* List of static decls referred to by this
! 				   class.  */
    tree atable_decl;		/* The static address table.  */
    tree atable_syms_decl;
  
!   tree itable_methods;          /* List of interfaces methods referred
! 				   to by this class.  */
!   tree itable_decl;		/* The interfaces table.  */
!   tree itable_syms_decl;
! 
!   tree ctable_decl;             /* The table of classes for the runtime
! 				   type matcher.  */
    tree catch_classes;
  
+   tree verify_method;		/* The verify method for this class.
+ 				   Used in split verification.  */
+ 
    htab_t GTY ((param_is (struct treetreehash_entry))) type_to_runtime_map;   
!                                 /* The mapping of classes to exception region
! 				   markers.  */
! 
!   htab_t GTY ((param_is (struct type_assertion))) type_assertions;
! 				/* Table of type assertions to be evaluated 
!   				   by the runtime when this class is loaded. */
  
    unsigned pic:1;		/* Private Inner Class. */
    unsigned poic:1;		/* Protected Inner Class. */
    unsigned strictfp:1;		/* `strictfp' class.  */
    unsigned assertions:1;	/* Any method uses `assert'.  */
+   unsigned dummy_class:1;		/* Not a real class, just a placeholder.  */
  };
  
  #define JCF_u4 unsigned long
*************** struct lang_type GTY(())
*** 1119,1124 ****
--- 1172,1180 ----
  #define SEARCH_SUPER          2
  #define SEARCH_VISIBLE        4
  
+ /* Defined in java-except.h  */
+ struct eh_range;
+ 
  extern void java_parse_file (int);
  extern bool java_mark_addressable (tree);
  extern tree java_type_for_mode (enum machine_mode, int);
*************** extern tree java_signed_type (tree);
*** 1128,1133 ****
--- 1184,1191 ----
  extern tree java_signed_or_unsigned_type (int, tree);
  extern tree java_truthvalue_conversion (tree);
  extern void add_assume_compiled (const char *, int);
+ extern void add_enable_assert (const char *, int);
+ extern bool enable_assertions (tree);
  extern tree lookup_class (tree);
  extern tree lookup_java_constructor (tree, tree);
  extern tree lookup_java_method (tree, tree, tree);
*************** extern tree unmangle_classname (const ch
*** 1148,1153 ****
--- 1206,1212 ----
  extern tree parse_signature_string (const unsigned char *, int);
  extern tree get_type_from_signature (tree);
  extern void layout_class (tree);
+ extern int get_interface_method_index (tree, tree);
  extern tree layout_class_method (tree, tree, tree, tree);
  extern void layout_class_methods (tree);
  extern tree build_class_ref (tree);
*************** extern tree build_internal_class_name (t
*** 1156,1170 ****
  extern tree build_constants_constructor (void);
  extern tree build_ref_from_constant_pool (int);
  extern tree build_utf8_ref (tree);
! extern tree ident_subst (const char*, int, const char*, int, int, const char*);
! extern tree identifier_subst (const tree, const char *, int, int, const char *);
  extern int global_bindings_p (void);
- extern int kept_level_p (void);
  extern tree getdecls (void);
  extern void pushlevel (int);
  extern tree poplevel (int,int, int);
  extern void insert_block (tree);
- extern void set_block (tree);
  extern tree pushdecl (tree);
  extern void java_init_decl_processing (void);
  extern void java_dup_lang_specific_decl (tree);
--- 1215,1229 ----
  extern tree build_constants_constructor (void);
  extern tree build_ref_from_constant_pool (int);
  extern tree build_utf8_ref (tree);
! extern tree ident_subst (const char *, int, const char *, int, int,
! 			 const char *);
! extern tree identifier_subst (const tree, const char *, int, int,
! 			      const char *);
  extern int global_bindings_p (void);
  extern tree getdecls (void);
  extern void pushlevel (int);
  extern tree poplevel (int,int, int);
  extern void insert_block (tree);
  extern tree pushdecl (tree);
  extern void java_init_decl_processing (void);
  extern void java_dup_lang_specific_decl (tree);
*************** extern void set_java_signature (tree, tr
*** 1174,1189 ****
  extern tree build_static_field_ref (tree);
  extern tree build_address_of (tree);
  extern tree find_local_variable (int index, tree type, int pc);
  extern tree find_stack_slot (int index, tree type);
  extern tree build_prim_array_type (tree, HOST_WIDE_INT);
  extern tree build_java_array_type (tree, HOST_WIDE_INT);
  extern int is_compiled_class (tree);
! extern tree mangled_classname (const char*, tree);
  extern tree lookup_label (int);
! extern tree pop_type_0 (tree, char**);
  extern tree pop_type (tree);
  extern tree decode_newarray_type (int);
! extern tree lookup_field (tree*, tree);
  extern int is_array_type_p (tree);
  extern HOST_WIDE_INT java_array_type_length (tree);
  extern int read_class (tree);
--- 1233,1249 ----
  extern tree build_static_field_ref (tree);
  extern tree build_address_of (tree);
  extern tree find_local_variable (int index, tree type, int pc);
+ extern void update_aliases (tree decl, int index, int pc);
  extern tree find_stack_slot (int index, tree type);
  extern tree build_prim_array_type (tree, HOST_WIDE_INT);
  extern tree build_java_array_type (tree, HOST_WIDE_INT);
  extern int is_compiled_class (tree);
! extern tree mangled_classname (const char *, tree);
  extern tree lookup_label (int);
! extern tree pop_type_0 (tree, char **);
  extern tree pop_type (tree);
  extern tree decode_newarray_type (int);
! extern tree lookup_field (tree *, tree);
  extern int is_array_type_p (tree);
  extern HOST_WIDE_INT java_array_type_length (tree);
  extern int read_class (tree);
*************** extern void initialize_builtins (void);
*** 1195,1200 ****
--- 1255,1261 ----
  extern tree lookup_name (tree);
  extern tree build_known_method_ref (tree, tree, tree, tree, tree);
  extern tree build_class_init (tree, tree);
+ extern int attach_init_test_initialization_flags (void **, void *);
  extern tree build_invokevirtual (tree, tree);
  extern tree build_invokeinterface (tree, tree);
  extern tree build_jni_stub (tree);
*************** extern tree build_newarray (int, tree);
*** 1210,1216 ****
  extern tree build_anewarray (tree, tree);
  extern tree build_new_array (tree, tree);
  extern tree build_java_array_length_access (tree);
- extern tree build_java_arraynull_check (tree, tree, tree);
  extern tree build_java_indirect_ref (tree, tree, int);
  extern tree java_check_reference (tree, int);
  extern tree build_get_class (tree);
--- 1271,1276 ----
*************** extern int get_access_flags_from_decl (t
*** 1230,1261 ****
  extern int interface_of_p (tree, tree);
  extern int inherits_from_p (tree, tree);
  extern int common_enclosing_context_p (tree, tree);
  extern int enclosing_context_p (tree, tree);
- extern void complete_start_java_method (tree);
  extern tree build_result_decl (tree);
! extern void emit_handlers (void);
  extern void make_class_data (tree);
  extern void register_class (void);
  extern int alloc_name_constant (int, tree);
! extern void emit_register_classes (void);
! extern tree emit_symbol_table (tree, tree, tree, tree, tree);
  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 *, ...)
!   ATTRIBUTE_PRINTF_2;
  extern void finish_class (void);
  extern void java_layout_seen_class_methods (void);
  extern void check_for_initialization (tree, tree);
  
  extern tree pushdecl_top_level (tree);
  extern int alloc_class_constant (tree);
  extern void init_expr_processing (void);
  extern void push_super_field (tree, tree);
  extern void init_class_processing (void);
  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 void maybe_pushlevels (int);
  extern void maybe_poplevels (int);
  extern void force_poplevels (int);
--- 1290,1326 ----
  extern int interface_of_p (tree, tree);
  extern int inherits_from_p (tree, tree);
  extern int common_enclosing_context_p (tree, tree);
+ extern int common_enclosing_instance_p (tree, tree);
  extern int enclosing_context_p (tree, tree);
  extern tree build_result_decl (tree);
! 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 void emit_register_classes (tree *);
! extern tree emit_symbol_table (tree, tree, tree, tree, tree, int);
  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 *msgid, ...);
  extern void finish_class (void);
  extern void java_layout_seen_class_methods (void);
  extern void check_for_initialization (tree, tree);
  
  extern tree pushdecl_top_level (tree);
+ extern tree pushdecl_function_level (tree);
+ extern tree java_replace_reference (tree, bool);
  extern int alloc_class_constant (tree);
  extern void init_expr_processing (void);
  extern void push_super_field (tree, tree);
  extern void init_class_processing (void);
+ 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);
  extern void maybe_poplevels (int);
  extern void force_poplevels (int);
*************** extern void push_type (tree);
*** 1268,1273 ****
--- 1333,1339 ----
  extern void load_type_state (tree);
  extern void add_interface (tree, tree);
  extern tree force_evaluation_order (tree);
+ extern tree java_create_object (tree);
  extern int verify_constant_pool (struct JCF *);
  extern void start_java_method (tree);
  extern void end_java_method (void);
*************** extern void jcf_trim_old_input (struct J
*** 1297,1303 ****
  #ifdef BUFSIZ
  extern void jcf_print_utf8 (FILE *, const unsigned char *, int);
  extern void jcf_print_char (FILE *, int);
! extern void jcf_print_utf8_replace (FILE *, const unsigned char *, int, int, int);
  extern const char* open_class (const char *, struct JCF *, int, const char *);
  #endif
  extern void java_debug_context (void);
--- 1363,1370 ----
  #ifdef BUFSIZ
  extern void jcf_print_utf8 (FILE *, const unsigned char *, int);
  extern void jcf_print_char (FILE *, int);
! extern void jcf_print_utf8_replace (FILE *, const unsigned char *, int,
! 				    int, int);
  extern const char* open_class (const char *, struct JCF *, int, const char *);
  #endif
  extern void java_debug_context (void);
*************** extern void init_src_parse (void);
*** 1312,1320 ****
  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_class_field_from_string (struct obstack *, char *);
  extern tree java_mangle_vtable (struct obstack *, tree);
- extern const char *lang_printable_name_wls (tree, int);
  extern void append_gpp_mangled_name (const char *, int);
  
  extern void add_predefined_file (tree);
--- 1379,1385 ----
*************** extern tree decl_constant_value (tree);
*** 1324,1341 ****
  
  extern void java_mark_class_local (tree);
  
- #if defined(RTX_CODE) && defined (HAVE_MACHINE_MODES)
- struct rtx_def * java_expand_expr (tree, rtx, enum machine_mode, int, rtx *); 
- #endif
  extern void java_inlining_merge_static_initializers (tree, void *);
  extern void java_inlining_map_static_initializers (tree, void *);
  
  extern void compile_resource_data (const char *name, const char *buffer, int);
  extern void compile_resource_file (const char *, const char *);
! extern void write_resource_constructor (void);
! extern void init_resource_processing (void);
  
! extern void start_complete_expand_method (tree);
  extern void java_expand_body (tree);
  
  extern int get_symbol_table_index (tree, tree *);
--- 1389,1408 ----
  
  extern void java_mark_class_local (tree);
  
  extern void java_inlining_merge_static_initializers (tree, void *);
  extern void java_inlining_map_static_initializers (tree, void *);
  
  extern void compile_resource_data (const char *name, const char *buffer, int);
  extern void compile_resource_file (const char *, const char *);
! extern void write_resource_constructor (tree *);
! extern tree build_java_empty_stmt (void);
! extern tree add_stmt_to_compound (tree, tree, tree);
! extern tree java_add_stmt (tree);
! extern tree java_add_local_var (tree decl);
! extern tree *get_stmts (void);
! extern void register_exception_range(struct eh_range *, int, int);
  
! extern void finish_method (tree);
  extern void java_expand_body (tree);
  
  extern int get_symbol_table_index (tree, tree *);
*************** extern tree make_catch_class_record (tre
*** 1344,1372 ****
  extern tree emit_catch_table (tree);
  
  extern void gen_indirect_dispatch_tables (tree type);
  
  #define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL)
  
  /* Access flags etc for a method (a FUNCTION_DECL): */
  
! #define METHOD_PUBLIC(DECL) DECL_LANG_FLAG_1 (DECL)
! #define METHOD_PRIVATE(DECL) TREE_PRIVATE (DECL)
! #define METHOD_PROTECTED(DECL) TREE_PROTECTED (DECL)
! #define METHOD_STATIC(DECL) DECL_LANG_FLAG_2 (DECL)
! #define METHOD_FINAL(DECL) DECL_FINAL (DECL)
! #define METHOD_SYNCHRONIZED(DECL) DECL_LANG_FLAG_4 (DECL)
! #define METHOD_NATIVE(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.native)
! #define METHOD_ABSTRACT(DECL) DECL_LANG_FLAG_5 (DECL)
! #define METHOD_STRICTFP(DECL) (DECL_LANG_SPECIFIC (DECL)->u.f.strictfp)
! #define METHOD_INVISIBLE(DECL) (DECL_LANG_SPECIFIC (DECL)->u.f.invisible)
  
- #define JAVA_FILE_P(NODE) TREE_LANG_FLAG_2 (NODE)
  #define CLASS_FILE_P(NODE) TREE_LANG_FLAG_3 (NODE)
- #define ZIP_FILE_P(NODE) TREE_LANG_FLAG_4 (NODE)
  
  /* Other predicates on method decls  */
  
! #define DECL_CONSTRUCTOR_P(DECL) DECL_LANG_FLAG_7(DECL)
  
  #define DECL_INIT_P(DECL)   (ID_INIT_P (DECL_NAME (DECL)))
  #define DECL_FINIT_P(DECL)  (ID_FINIT_P (DECL_NAME (DECL)))
--- 1411,1447 ----
  extern tree emit_catch_table (tree);
  
  extern void gen_indirect_dispatch_tables (tree type);
+ extern int split_qualified_name (tree *left, tree *right, tree source);
+ extern int in_same_package (tree, tree);
+ 
+ extern tree builtin_function (const char *, tree, int, enum built_in_class,
+ 			      const char *, tree);
  
  #define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL)
  
  /* Access flags etc for a method (a FUNCTION_DECL): */
  
! #define METHOD_DUMMY(DECL) (DECL_LANG_SPECIFIC (DECL)->u.f.dummy)
! 
! #define METHOD_PUBLIC(DECL) DECL_LANG_FLAG_1 (FUNCTION_DECL_CHECK (DECL))
! #define METHOD_PRIVATE(DECL) TREE_PRIVATE (FUNCTION_DECL_CHECK (DECL))
! #define METHOD_PROTECTED(DECL) TREE_PROTECTED (FUNCTION_DECL_CHECK (DECL))
! #define METHOD_STATIC(DECL) DECL_LANG_FLAG_2 (FUNCTION_DECL_CHECK (DECL))
! #define METHOD_FINAL(DECL) DECL_FINAL (FUNCTION_DECL_CHECK (DECL))
! #define METHOD_SYNCHRONIZED(DECL) DECL_LANG_FLAG_4 (FUNCTION_DECL_CHECK (DECL))
! #define METHOD_NATIVE(DECL) \
!   (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.f.native)
! #define METHOD_ABSTRACT(DECL) DECL_LANG_FLAG_5 (FUNCTION_DECL_CHECK (DECL))
! #define METHOD_STRICTFP(DECL) \
!   (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.f.strictfp)
! #define METHOD_INVISIBLE(DECL) \
!   (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.f.invisible)
  
  #define CLASS_FILE_P(NODE) TREE_LANG_FLAG_3 (NODE)
  
  /* Other predicates on method decls  */
  
! #define DECL_CONSTRUCTOR_P(DECL) DECL_LANG_FLAG_7 (FUNCTION_DECL_CHECK (DECL))
  
  #define DECL_INIT_P(DECL)   (ID_INIT_P (DECL_NAME (DECL)))
  #define DECL_FINIT_P(DECL)  (ID_FINIT_P (DECL_NAME (DECL)))
*************** extern void gen_indirect_dispatch_tables
*** 1381,1407 ****
  #define ID_CLASSDOLLAR_P(ID) ((ID) == classdollar_identifier_node)
  #define ID_INSTINIT_P(ID) ((ID) == instinit_identifier_node)
  
! /* Access flags etc for a variable/field (a FIELD_DECL): */
  
! #define FIELD_PRIVATE(DECL) TREE_PRIVATE (DECL)
! #define FIELD_PROTECTED(DECL) TREE_PROTECTED (DECL)
! #define FIELD_PUBLIC(DECL) DECL_LANG_FLAG_1 (DECL)
! #define FIELD_STATIC(DECL) TREE_STATIC (DECL)
! #define FIELD_FINAL(DECL) DECL_FINAL (DECL)
! #define FIELD_VOLATILE(DECL) DECL_LANG_FLAG_4 (DECL)
! #define FIELD_TRANSIENT(DECL) DECL_LANG_FLAG_5 (DECL)
  
  /* Access flags etc for a class (a TYPE_DECL): */
  
! #define CLASS_PUBLIC(DECL) DECL_LANG_FLAG_1 (DECL)
! #define CLASS_FINAL(DECL) DECL_FINAL (DECL)
! #define CLASS_INTERFACE(DECL) DECL_LANG_FLAG_4 (DECL)
! #define CLASS_ABSTRACT(DECL) DECL_LANG_FLAG_5 (DECL)
! #define CLASS_SUPER(DECL) DECL_LANG_FLAG_6 (DECL)
! #define CLASS_STATIC(DECL) DECL_LANG_FLAG_7 (DECL)
! #define CLASS_PRIVATE(DECL) (TYPE_PRIVATE_INNER_CLASS (TREE_TYPE (DECL)))
! #define CLASS_PROTECTED(DECL) (TYPE_PROTECTED_INNER_CLASS (TREE_TYPE (DECL)))
! #define CLASS_STRICTFP(DECL) (TYPE_STRICTFP (TREE_TYPE (DECL)))
  #define CLASS_USES_ASSERTIONS(DECL) (TYPE_USES_ASSERTIONS (TREE_TYPE (DECL)))
  
  /* @deprecated marker flag on methods, fields and classes */
--- 1456,1482 ----
  #define ID_CLASSDOLLAR_P(ID) ((ID) == classdollar_identifier_node)
  #define ID_INSTINIT_P(ID) ((ID) == instinit_identifier_node)
  
! /* Access flags etc for variable/field (FIELD_DECL, VAR_DECL, or PARM_DECL): */
  
! #define FIELD_PRIVATE(DECL)	TREE_PRIVATE (VAR_OR_FIELD_CHECK (DECL))
! #define FIELD_PROTECTED(DECL)	TREE_PROTECTED (VAR_OR_FIELD_CHECK (DECL))
! #define FIELD_PUBLIC(DECL)	DECL_LANG_FLAG_1 (VAR_OR_FIELD_CHECK (DECL))
! #define FIELD_STATIC(DECL)	TREE_STATIC (VAR_OR_FIELD_CHECK (DECL))
! #define FIELD_FINAL(DECL)	DECL_FINAL (VAR_OR_FIELD_CHECK (DECL))
! #define FIELD_VOLATILE(DECL)	DECL_LANG_FLAG_4 (VAR_OR_FIELD_CHECK (DECL))
! #define FIELD_TRANSIENT(DECL)	DECL_LANG_FLAG_5 (VAR_OR_FIELD_CHECK (DECL))
  
  /* Access flags etc for a class (a TYPE_DECL): */
  
! #define CLASS_PUBLIC(DECL)	DECL_LANG_FLAG_1 (TYPE_DECL_CHECK (DECL))
! #define CLASS_FINAL(DECL)	DECL_FINAL (TYPE_DECL_CHECK (DECL))
! #define CLASS_INTERFACE(DECL)	DECL_LANG_FLAG_4 (TYPE_DECL_CHECK (DECL))
! #define CLASS_ABSTRACT(DECL)	DECL_LANG_FLAG_5 (TYPE_DECL_CHECK (DECL))
! #define CLASS_SUPER(DECL)	DECL_LANG_FLAG_6 (TYPE_DECL_CHECK (DECL))
! #define CLASS_STATIC(DECL)	DECL_LANG_FLAG_7 (TYPE_DECL_CHECK (DECL))
! #define CLASS_PRIVATE(DECL)	(TYPE_PRIVATE_INNER_CLASS (TREE_TYPE (DECL)))
! #define CLASS_PROTECTED(DECL)	(TYPE_PROTECTED_INNER_CLASS (TREE_TYPE (DECL)))
! #define CLASS_STRICTFP(DECL)	(TYPE_STRICTFP (TREE_TYPE (DECL)))
  #define CLASS_USES_ASSERTIONS(DECL) (TYPE_USES_ASSERTIONS (TREE_TYPE (DECL)))
  
  /* @deprecated marker flag on methods, fields and classes */
*************** extern void gen_indirect_dispatch_tables
*** 1412,1424 ****
  #define DECL_DEPRECATED(DECL) DECL_LANG_FLAG_0 (DECL)
  
  /* The number of virtual methods in this class's dispatch table.
!  Does not include initial two dummy entries (one points to the
!  Class object, and the other is for G++ -fvtable-thunks compatibility). */
! #define TYPE_NVIRTUALS(TYPE) TYPE_BINFO_VIRTUALS (TYPE)
  
  /* A TREE_VEC (indexed by DECL_VINDEX) containing this class's
     virtual methods. */
! #define TYPE_VTABLE(TYPE) TYPE_BINFO_VTABLE(TYPE)
  
  /* Use CLASS_LOADED_P? FIXME */
  #define CLASS_COMPLETE_P(DECL) DECL_LANG_FLAG_2 (DECL) 
--- 1487,1499 ----
  #define DECL_DEPRECATED(DECL) DECL_LANG_FLAG_0 (DECL)
  
  /* The number of virtual methods in this class's dispatch table.
!    Does not include initial two dummy entries (one points to the
!    Class object, and the other is for G++ -fvtable-thunks compatibility). */
! #define TYPE_NVIRTUALS(TYPE) BINFO_VIRTUALS (TYPE_BINFO (TYPE))
  
  /* A TREE_VEC (indexed by DECL_VINDEX) containing this class's
     virtual methods. */
! #define TYPE_VTABLE(TYPE) BINFO_VTABLE(TYPE_BINFO (TYPE))
  
  /* Use CLASS_LOADED_P? FIXME */
  #define CLASS_COMPLETE_P(DECL) DECL_LANG_FLAG_2 (DECL) 
*************** extern int linenumber_count;
*** 1482,1488 ****
  extern tree *type_map;
  
  /* Map a stack index to the type currently in that slot. */
! #define stack_type_map (type_map+DECL_MAX_LOCALS(current_function_decl))
  
  /* True iff TYPE takes two variable/stack slots. */
  #define TYPE_IS_WIDE(TYPE) \
--- 1557,1563 ----
  extern tree *type_map;
  
  /* Map a stack index to the type currently in that slot. */
! #define stack_type_map (type_map + DECL_MAX_LOCALS (current_function_decl))
  
  /* True iff TYPE takes two variable/stack slots. */
  #define TYPE_IS_WIDE(TYPE) \
*************** extern tree *type_map;
*** 1498,1508 ****
  #define IS_ARRAY_LENGTH_ACCESS(NODE) TREE_LANG_FLAG_4 (NODE)
  
  /* If FUNCTION_TYPE or METHOD_TYPE: cache for build_java_argument_signature. */
! #define TYPE_ARGUMENT_SIGNATURE(TYPE) TYPE_VFIELD(TYPE)
  
  /* Given an array type, give the type of the elements. */
  /* FIXME this use of TREE_TYPE conflicts with something or other. */
! #define TYPE_ARRAY_ELEMENT(ATYPE) TREE_TYPE(ATYPE)
  
  /* True if class TYPE has been loaded (i.e. parsed plus laid out).
     (The check for CLASS_PARSED_P is needed because of Object and Class.) */
--- 1573,1584 ----
  #define IS_ARRAY_LENGTH_ACCESS(NODE) TREE_LANG_FLAG_4 (NODE)
  
  /* If FUNCTION_TYPE or METHOD_TYPE: cache for build_java_argument_signature. */
! #define TYPE_ARGUMENT_SIGNATURE(TYPE) \
!   (TREE_CHECK2 (TYPE, FUNCTION_TYPE, METHOD_TYPE)->type.minval)
  
  /* Given an array type, give the type of the elements. */
  /* FIXME this use of TREE_TYPE conflicts with something or other. */
! #define TYPE_ARRAY_ELEMENT(ATYPE) TREE_TYPE (ATYPE)
  
  /* True if class TYPE has been loaded (i.e. parsed plus laid out).
     (The check for CLASS_PARSED_P is needed because of Object and Class.) */
*************** extern tree *type_map;
*** 1519,1526 ****
  #define CLASS_P(TYPE) TYPE_LANG_FLAG_4 (TYPE)
  
  /* True if class TYPE was requested (on command line) to be compiled.*/
! #define CLASS_FROM_CURRENTLY_COMPILED_P(TYPE) \
!   TYPE_LANG_FLAG_5 (TYPE)
  
  /* True if class TYPE is currently being laid out. Helps in detection
     of inheritance cycle occurring as a side effect of performing the
--- 1595,1601 ----
  #define CLASS_P(TYPE) TYPE_LANG_FLAG_4 (TYPE)
  
  /* True if class TYPE was requested (on command line) to be compiled.*/
! #define CLASS_FROM_CURRENTLY_COMPILED_P(TYPE) TYPE_LANG_FLAG_5 (TYPE)
  
  /* True if class TYPE is currently being laid out. Helps in detection
     of inheritance cycle occurring as a side effect of performing the
*************** extern tree *type_map;
*** 1552,1566 ****
  #define COMPOUND_ASSIGN_P(EXPR) TREE_LANG_FLAG_1 (EXPR)
  
  /* True if a SWITCH_EXPR has a DEFAULT_EXPR. */
! #define SWITCH_HAS_DEFAULT(NODE) TREE_LANG_FLAG_3 (NODE)
  
  /* True if EXPR (a WFL in that case) was created after the
     reduction of PRIMARY . XXX */
! #define PRIMARY_P(EXPR) TREE_LANG_FLAG_2 (EXPR)
  
  /* True if EXPR (a MODIFY_EXPR in that case) is the result of variable
     initialization during its declaration */
! #define MODIFY_EXPR_FROM_INITIALIZATION_P(EXPR) TREE_LANG_FLAG_2 (EXPR)
  
  /* True if EXPR (a TREE_TYPE denoting a class type) has its methods
     already checked (for redefinitions, etc, see java_check_regular_methods.) */
--- 1627,1642 ----
  #define COMPOUND_ASSIGN_P(EXPR) TREE_LANG_FLAG_1 (EXPR)
  
  /* True if a SWITCH_EXPR has a DEFAULT_EXPR. */
! #define SWITCH_HAS_DEFAULT(NODE) TREE_LANG_FLAG_3 (SWITCH_EXPR_CHECK (NODE))
  
  /* True if EXPR (a WFL in that case) was created after the
     reduction of PRIMARY . XXX */
! #define PRIMARY_P(EXPR) TREE_LANG_FLAG_2 (EXPR_CHECK (EXPR))
  
  /* True if EXPR (a MODIFY_EXPR in that case) is the result of variable
     initialization during its declaration */
! #define MODIFY_EXPR_FROM_INITIALIZATION_P(EXPR) \
!   TREE_LANG_FLAG_2 (MODIFY_EXPR_CHECK (EXPR))
  
  /* True if EXPR (a TREE_TYPE denoting a class type) has its methods
     already checked (for redefinitions, etc, see java_check_regular_methods.) */
*************** extern tree *type_map;
*** 1571,1599 ****
  #define HAS_FINALIZER_P(EXPR) TREE_LANG_FLAG_3 (EXPR)
  
  /* True if EXPR (a LOOP_EXPR in that case) is part of a for statement */
! #define FOR_LOOP_P(EXPR) TREE_LANG_FLAG_0 (EXPR)
  
  /* True if NODE (a RECORD_TYPE in that case) is an anonymous class.  */
! #define ANONYMOUS_CLASS_P(NODE) TREE_LANG_FLAG_0 (NODE)
  
  /* True if NODE (a RECORD_TYPE in that case) is a block local class.  */
! #define LOCAL_CLASS_P(NODE) TREE_LANG_FLAG_1 (NODE)
  
  /* True if NODE (a TREE_LIST) hold a pair of argument name/type
     declared with the final modifier */
! #define ARG_FINAL_P(NODE) TREE_LANG_FLAG_0 (NODE)
  
  /* True if NODE (some kind of EXPR, but not a WFL) should not give an
     error if it is found to be unreachable.  This can only be applied
     to those EXPRs which can be used as the update expression of a
     `for' loop.  In particular it can't be set on a LOOP_EXPR.  */
! #define SUPPRESS_UNREACHABLE_ERROR(NODE) TREE_LANG_FLAG_0 (NODE)
  
  /* True if EXPR (a WFL in that case) resolves into a package name */
! #define RESOLVE_PACKAGE_NAME_P(WFL) TREE_LANG_FLAG_3 (WFL)
  
  /* True if EXPR (a WFL in that case) resolves into a type name */
! #define RESOLVE_TYPE_NAME_P(WFL) TREE_LANG_FLAG_4 (WFL)
  
  /* True if STMT (a WFL in that case) holds a BREAK statement */
  #define IS_BREAK_STMT_P(WFL) TREE_LANG_FLAG_5 (WFL)
--- 1647,1675 ----
  #define HAS_FINALIZER_P(EXPR) TREE_LANG_FLAG_3 (EXPR)
  
  /* True if EXPR (a LOOP_EXPR in that case) is part of a for statement */
! #define FOR_LOOP_P(EXPR) TREE_LANG_FLAG_0 (EXPR_CHECK (EXPR))
  
  /* True if NODE (a RECORD_TYPE in that case) is an anonymous class.  */
! #define ANONYMOUS_CLASS_P(NODE) TREE_LANG_FLAG_0 (RECORD_TYPE_CHECK (NODE))
  
  /* True if NODE (a RECORD_TYPE in that case) is a block local class.  */
! #define LOCAL_CLASS_P(NODE) TREE_LANG_FLAG_1 (RECORD_TYPE_CHECK (NODE))
  
  /* True if NODE (a TREE_LIST) hold a pair of argument name/type
     declared with the final modifier */
! #define ARG_FINAL_P(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
  
  /* True if NODE (some kind of EXPR, but not a WFL) should not give an
     error if it is found to be unreachable.  This can only be applied
     to those EXPRs which can be used as the update expression of a
     `for' loop.  In particular it can't be set on a LOOP_EXPR.  */
! #define SUPPRESS_UNREACHABLE_ERROR(NODE) TREE_LANG_FLAG_0 (EXPR_CHECK (NODE))
  
  /* True if EXPR (a WFL in that case) resolves into a package name */
! #define RESOLVE_PACKAGE_NAME_P(WFL) TREE_LANG_FLAG_3 (EXPR_CHECK (WFL))
  
  /* True if EXPR (a WFL in that case) resolves into a type name */
! #define RESOLVE_TYPE_NAME_P(WFL) TREE_LANG_FLAG_4 (EXPR_CHECK (WFL))
  
  /* True if STMT (a WFL in that case) holds a BREAK statement */
  #define IS_BREAK_STMT_P(WFL) TREE_LANG_FLAG_5 (WFL)
*************** extern tree *type_map;
*** 1603,1626 ****
  
  /* True if EXPR (a SAVE_EXPR in that case) had its content already
     checked for (un)initialized local variables.  */
! #define IS_INIT_CHECKED(EXPR) TREE_LANG_FLAG_5 (EXPR)
  
  /* If set in CALL_EXPR, the receiver is 'super'. */
! #define CALL_USING_SUPER(EXPR) TREE_LANG_FLAG_4 (EXPR)
  
  /* 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(NODE)
  
! /* Non null if NODE belongs to an inner class TYPE_DECL node.
     Verifies that NODE as the attributes of a decl.  */
  #define INNER_CLASS_DECL_P(NODE) (TYPE_NAME (TREE_TYPE (NODE)) == NODE	\
  				  && DECL_CONTEXT (NODE))
  
! /* Non null 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))
--- 1679,1703 ----
  
  /* True if EXPR (a SAVE_EXPR in that case) had its content already
     checked for (un)initialized local variables.  */
! #define IS_INIT_CHECKED(EXPR) TREE_LANG_FLAG_5 (SAVE_EXPR_CHECK (EXPR))
  
  /* If set in CALL_EXPR, the receiver is 'super'. */
! #define CALL_USING_SUPER(EXPR) TREE_LANG_FLAG_4 (EXPR_CHECK (EXPR))
  
  /* 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.
     Verifies that NODE as the attributes of a decl.  */
  #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))
*************** extern tree *type_map;
*** 1630,1636 ****
  #define PURE_INNER_CLASS_DECL_P(NODE) \
    (INNER_CLASS_DECL_P (NODE) && !CLASS_STATIC (NODE))
  
! /* Non null if NODE belongs to an inner class RECORD_TYPE node. Checks
     that TYPE_NAME bears a decl. An array type wouldn't.  */
  #define INNER_CLASS_TYPE_P(NODE) (TREE_CODE (TYPE_NAME (NODE)) == TYPE_DECL \
  				  && DECL_CONTEXT (TYPE_NAME (NODE)))
--- 1707,1713 ----
  #define PURE_INNER_CLASS_DECL_P(NODE) \
    (INNER_CLASS_DECL_P (NODE) && !CLASS_STATIC (NODE))
  
! /* True if NODE belongs to an inner class RECORD_TYPE node. Checks
     that TYPE_NAME bears a decl. An array type wouldn't.  */
  #define INNER_CLASS_TYPE_P(NODE) (TREE_CODE (TYPE_NAME (NODE)) == TYPE_DECL \
  				  && DECL_CONTEXT (TYPE_NAME (NODE)))
*************** extern tree *type_map;
*** 1643,1649 ****
  #define PURE_INNER_CLASS_TYPE_P(NODE) \
    (INNER_CLASS_TYPE_P (NODE) && !CLASS_STATIC (TYPE_NAME (NODE)))
  
! /* Non null if NODE (a TYPE_DECL or a RECORD_TYPE) is an inner class.  */
  #define INNER_CLASS_P(NODE) (TREE_CODE (NODE) == TYPE_DECL ? 		      \
  			     INNER_CLASS_DECL_P (NODE) :		      \
  			     (TREE_CODE (NODE) == RECORD_TYPE ? 	      \
--- 1720,1726 ----
  #define PURE_INNER_CLASS_TYPE_P(NODE) \
    (INNER_CLASS_TYPE_P (NODE) && !CLASS_STATIC (TYPE_NAME (NODE)))
  
! /* True if NODE (a TYPE_DECL or a RECORD_TYPE) is an inner class.  */
  #define INNER_CLASS_P(NODE) (TREE_CODE (NODE) == TYPE_DECL ? 		      \
  			     INNER_CLASS_DECL_P (NODE) :		      \
  			     (TREE_CODE (NODE) == RECORD_TYPE ? 	      \
*************** extern tree *type_map;
*** 1652,1668 ****
  
  /* On a TYPE_DECL, hold the list of inner classes defined within the
     scope of TYPE_DECL.  */
! #define DECL_INNER_CLASS_LIST(NODE) DECL_INITIAL (NODE)
! 
! /* Build a IDENTIFIER_NODE for a file name we're considering. Since
!    all_class_filename is a registered root, putting this identifier
!    in a TREE_LIST it holds keeps this node alive.  */
! #define BUILD_FILENAME_IDENTIFIER_NODE(F, S)		\
!   if (!((F) = maybe_get_identifier ((S))))		\
!     {							\
!       (F) = get_identifier ((S));			\
!       tree_cons ((F), NULL_TREE, all_class_filename);	\
!     }
  
  /* Add a FIELD_DECL to RECORD_TYPE RTYPE.
     The field has name NAME (a char*), and type FTYPE.
--- 1729,1735 ----
  
  /* On a TYPE_DECL, hold the list of inner classes defined within the
     scope of TYPE_DECL.  */
! #define DECL_INNER_CLASS_LIST(NODE) DECL_INITIAL (TYPE_DECL_CHECK (NODE))
  
  /* Add a FIELD_DECL to RECORD_TYPE RTYPE.
     The field has name NAME (a char*), and type FTYPE.
*************** extern tree *type_map;
*** 1673,1719 ****
     if compiling java.lang.Object or java.lang.Class. */
  
  #define PUSH_FIELD(RTYPE, FIELD, NAME, FTYPE) \
! { tree tmp_field = build_decl (FIELD_DECL, get_identifier(NAME), FTYPE); \
!   if (TYPE_FIELDS (RTYPE) == NULL_TREE) TYPE_FIELDS (RTYPE) = tmp_field; \
!   else TREE_CHAIN(FIELD) = tmp_field; \
!   DECL_CONTEXT (tmp_field) = RTYPE; \
!   DECL_ARTIFICIAL (tmp_field) = 1; \
!   FIELD = tmp_field; }
  
  #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)		\
--- 1740,1792 ----
     if compiling java.lang.Object or java.lang.Class. */
  
  #define PUSH_FIELD(RTYPE, FIELD, NAME, FTYPE) \
! { tree _field = build_decl (FIELD_DECL, get_identifier ((NAME)), (FTYPE)); \
!   if (TYPE_FIELDS (RTYPE) == NULL_TREE)	\
!     TYPE_FIELDS (RTYPE) = _field; 	\
!   else					\
!     TREE_CHAIN(FIELD) = _field;		\
!   DECL_CONTEXT (_field) = (RTYPE);	\
!   DECL_ARTIFICIAL (_field) = 1;		\
!   FIELD = _field; }
  
  #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)		\
*************** while (0)
*** 1731,1761 ****
     && EXPR_WFL_NODE (TREE_OPERAND (NODE, 0)) == super_identifier_node)
  
  /* Using a FINALLY_EXPR node */
! #define FINALLY_EXPR_LABEL(NODE) TREE_OPERAND ((NODE), 0)
! #define FINALLY_EXPR_BLOCK(NODE) TREE_OPERAND ((NODE), 1)
  
  #define BLOCK_EXPR_DECLS(NODE)  BLOCK_VARS(NODE)
  #define BLOCK_EXPR_BODY(NODE)   BLOCK_SUBBLOCKS(NODE)
  /* True for an implicit block surrounding declaration not at start of {...}. */
! #define BLOCK_IS_IMPLICIT(NODE) TREE_LANG_FLAG_1 (NODE)
  #define BLOCK_EMPTY_P(NODE) \
    (TREE_CODE (NODE) == BLOCK && BLOCK_EXPR_BODY (NODE) == empty_stmt_node)
  
! #define BUILD_MONITOR_ENTER(WHERE, ARG)				\
!   {								\
!     (WHERE) = build (CALL_EXPR, int_type_node,			\
! 		     build_address_of (soft_monitorenter_node),	\
! 		     build_tree_list (NULL_TREE, (ARG)), 	\
! 		     NULL_TREE);				\
!     TREE_SIDE_EFFECTS (WHERE) = 1;				\
    }
  
  #define BUILD_MONITOR_EXIT(WHERE, ARG)				\
    {								\
!     (WHERE) = build (CALL_EXPR, int_type_node,			\
! 		     build_address_of (soft_monitorexit_node),	\
! 		     build_tree_list (NULL_TREE, (ARG)),	\
! 		     NULL_TREE);				\
      TREE_SIDE_EFFECTS (WHERE) = 1;				\
    }
  
--- 1804,1835 ----
     && EXPR_WFL_NODE (TREE_OPERAND (NODE, 0)) == super_identifier_node)
  
  /* Using a FINALLY_EXPR node */
! #define FINALLY_EXPR_LABEL(NODE) TREE_OPERAND (FINALLY_EXPR_CHECK (NODE), 0)
! #define FINALLY_EXPR_BLOCK(NODE) TREE_OPERAND (FINALLY_EXPR_CHECK (NODE), 1)
  
  #define BLOCK_EXPR_DECLS(NODE)  BLOCK_VARS(NODE)
  #define BLOCK_EXPR_BODY(NODE)   BLOCK_SUBBLOCKS(NODE)
+ 
  /* True for an implicit block surrounding declaration not at start of {...}. */
! #define BLOCK_IS_IMPLICIT(NODE) TREE_LANG_FLAG_1 (BLOCK_CHECK (NODE))
  #define BLOCK_EMPTY_P(NODE) \
    (TREE_CODE (NODE) == BLOCK && BLOCK_EXPR_BODY (NODE) == empty_stmt_node)
  
! #define BUILD_MONITOR_ENTER(WHERE, ARG)					\
!   {									\
!     (WHERE) = build3 (CALL_EXPR, int_type_node,				\
! 		      build_address_of (soft_monitorenter_node),	\
! 		      build_tree_list (NULL_TREE, (ARG)),	 	\
! 		      NULL_TREE);					\
!     TREE_SIDE_EFFECTS (WHERE) = 1;					\
    }
  
  #define BUILD_MONITOR_EXIT(WHERE, ARG)				\
    {								\
!     (WHERE) = build3 (CALL_EXPR, int_type_node,			\
! 		      build_address_of (soft_monitorexit_node),	\
! 		      build_tree_list (NULL_TREE, (ARG)),	\
! 		      NULL_TREE);				\
      TREE_SIDE_EFFECTS (WHERE) = 1;				\
    }
  
*************** enum
*** 1786,1792 ****
  
    JV_STATE_PRELOADING = 1,	/* Can do _Jv_FindClass.  */
    JV_STATE_LOADING = 3,		/* Has super installed.  */
!   JV_STATE_LOADED = 5,		/* Is complete.  */
  
    JV_STATE_COMPILED = 6,	/* This was a compiled class.  */
  
--- 1860,1867 ----
  
    JV_STATE_PRELOADING = 1,	/* Can do _Jv_FindClass.  */
    JV_STATE_LOADING = 3,		/* Has super installed.  */
!   JV_STATE_READ = 4,		/* Has been completely defined.  */
!   JV_STATE_LOADED = 5,		/* Has Miranda methods defined.  */
  
    JV_STATE_COMPILED = 6,	/* This was a compiled class.  */
  
*************** enum
*** 1797,1804 ****
    JV_STATE_ERROR = 12,
  
    JV_STATE_DONE = 14		/* Must be last.  */
- 
  };
  
  #undef DEBUG_JAVA_BINDING_LEVELS
  #endif /* ! GCC_JAVA_TREE_H */
--- 1872,1924 ----
    JV_STATE_ERROR = 12,
  
    JV_STATE_DONE = 14		/* Must be last.  */
  };
  
  #undef DEBUG_JAVA_BINDING_LEVELS
+ 
+ /* In a LABELED_BLOCK_EXPR node.  */
+ #define LABELED_BLOCK_LABEL(NODE) \
+   TREE_OPERAND_CHECK_CODE (NODE, LABELED_BLOCK_EXPR, 0)
+ #define LABELED_BLOCK_BODY(NODE) \
+   TREE_OPERAND_CHECK_CODE (NODE, LABELED_BLOCK_EXPR, 1)
+ 
+ /* In an EXIT_BLOCK_EXPR node.  */
+ #define EXIT_BLOCK_LABELED_BLOCK(NODE) \
+   TREE_OPERAND_CHECK_CODE (NODE, EXIT_BLOCK_EXPR, 0)
+ 
+ /* In an EXPR_WITH_FILE_LOCATION node.  */
+ #define EXPR_WFL_EMIT_LINE_NOTE(NODE) \
+   (EXPR_WITH_FILE_LOCATION_CHECK (NODE)->common.public_flag)
+ #undef EXPR_WFL_NODE
+ #define EXPR_WFL_NODE(NODE) \
+   TREE_OPERAND (EXPR_WITH_FILE_LOCATION_CHECK (NODE), 0)
+ #ifdef USE_MAPPED_LOCATION
+ #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)
+ #define EXPR_WFL_LINENO(NODE) (EXPR_WFL_LINECOL (NODE) >> 12)
+ #define EXPR_WFL_COLNO(NODE) (EXPR_WFL_LINECOL (NODE) & 0xfff)
+ #undef EXPR_WFL_FILENAME_NODE
+ #define EXPR_WFL_FILENAME_NODE(NODE) \
+   TREE_OPERAND (EXPR_WITH_FILE_LOCATION_CHECK (NODE), 2)
+ #define EXPR_WFL_FILENAME(NODE) \
+   IDENTIFIER_POINTER (EXPR_WFL_FILENAME_NODE (NODE))
+ /* ??? Java uses this in all expressions.  */
+ #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);
+ 
  #endif /* ! GCC_JAVA_TREE_H */
diff -Nrcpad gcc-3.4.3/gcc/java/jcf-dump.c gcc-4.0.0/gcc/java/jcf-dump.c
*** gcc-3.4.3/gcc/java/jcf-dump.c	Sat Dec 20 15:38:27 2003
--- gcc-4.0.0/gcc/java/jcf-dump.c	Thu Nov 25 11:13:38 2004
***************
*** 1,7 ****
  /* 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
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,7 ----
  /* 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.
*************** The Free Software Foundation is independ
*** 54,59 ****
--- 54,60 ----
  #include "coretypes.h"
  #include "tm.h"
  #include "ggc.h"
+ #include "intl.h"
  
  #include "jcf.h"
  #include "tree.h"
*************** int verbose = 0;
*** 73,79 ****
  
  int flag_disassemble_methods = 0;
  int flag_print_class_info = 1;
! int flag_print_constant_pool = 1;
  int flag_print_fields = 1;
  int flag_print_methods = 1;
  int flag_print_attributes = 1;
--- 74,80 ----
  
  int flag_disassemble_methods = 0;
  int flag_print_class_info = 1;
! int flag_print_constant_pool = 0;
  int flag_print_fields = 1;
  int flag_print_methods = 1;
  int flag_print_attributes = 1;
*************** int this_class_index = 0;
*** 90,96 ****
  
  int class_access_flags = 0;
  
! /* Print in format similar to javap.  VERY IMCOMPLETE. */
  int flag_javap_compatible = 0;
  
  static void print_access_flags (FILE *, uint16, char);
--- 91,97 ----
  
  int class_access_flags = 0;
  
! /* Print in format similar to javap.  VERY INCOMPLETE. */
  int flag_javap_compatible = 0;
  
  static void print_access_flags (FILE *, uint16, char);
*************** utf8_equal_string (JCF *jcf, int index, 
*** 151,159 ****
        print_access_flags (out, ACCESS_FLAGS, 'c'); \
        fputc ('\n', out); \
        fprintf (out, "This class: "); \
!       if (flag_print_constant_pool) \
!         fprintf (out, "%d=", THIS); \
!       print_constant_terse (out, jcf, THIS, CONSTANT_Class); \
        if (flag_print_constant_pool || SUPER != 0) \
          fprintf (out, ", super: "); \
        if (flag_print_constant_pool) \
--- 152,158 ----
        print_access_flags (out, ACCESS_FLAGS, 'c'); \
        fputc ('\n', out); \
        fprintf (out, "This class: "); \
!       print_constant_terse_with_index (out, jcf, THIS, CONSTANT_Class); \
        if (flag_print_constant_pool || SUPER != 0) \
          fprintf (out, ", super: "); \
        if (flag_print_constant_pool) \
*************** utf8_equal_string (JCF *jcf, int index, 
*** 172,179 ****
  
  #define HANDLE_CLASS_INTERFACE(INDEX) \
    if (flag_print_class_info) \
!     { fprintf (out, "- Implements: %d=", INDEX); \
!       print_constant_terse (out, jcf, INDEX, CONSTANT_Class); \
        fputc ('\n', out); }
  
  #define HANDLE_START_FIELDS(FIELDS_COUNT) \
--- 171,178 ----
  
  #define HANDLE_CLASS_INTERFACE(INDEX) \
    if (flag_print_class_info) \
!     { fprintf (out, "- Implements: "); \
!       print_constant_terse_with_index (out, jcf, INDEX, CONSTANT_Class); \
        fputc ('\n', out); }
  
  #define HANDLE_START_FIELDS(FIELDS_COUNT) \
*************** utf8_equal_string (JCF *jcf, int index, 
*** 286,294 ****
      int name_index = JCF_readu2 (jcf); \
      int signature_index = JCF_readu2 (jcf); \
      int slot = JCF_readu2 (jcf); \
!     fprintf (out, "  slot#%d: name: %d=", slot, name_index); \
      print_name (out, jcf, name_index); \
!     fprintf (out, ", type: %d=", signature_index); \
      print_signature (out, jcf, signature_index, 0); \
      fprintf (out, " (pc: %d length: %d)\n", start_pc, length); }}
  
--- 285,297 ----
      int name_index = JCF_readu2 (jcf); \
      int signature_index = JCF_readu2 (jcf); \
      int slot = JCF_readu2 (jcf); \
!     fprintf (out, "  slot#%d: name: ", slot); \
!     if (flag_print_constant_pool) \
!       fprintf (out, "%d=", name_index); \
      print_name (out, jcf, name_index); \
!     fprintf (out, ", type: "); \
!     if (flag_print_constant_pool) \
!       fprintf (out, "%d=", signature_index); \
      print_signature (out, jcf, signature_index, 0); \
      fprintf (out, " (pc: %d length: %d)\n", start_pc, length); }}
  
*************** utf8_equal_string (JCF *jcf, int index, 
*** 316,334 ****
  									    \
        if (flag_print_class_info)					    \
  	{								    \
! 	  fprintf (out, "\n  class: ");					    \
! 	  if (flag_print_constant_pool)					    \
! 	    fprintf (out, "%d=", inner_class_info_index);		    \
! 	  print_constant_terse (out, jcf,				    \
  				inner_class_info_index, CONSTANT_Class);    \
! 	  fprintf (out, " (%d=", inner_name_index);			    \
! 	  print_constant_terse (out, jcf, inner_name_index, CONSTANT_Utf8); \
! 	  fprintf (out, "), access flags: 0x%x", inner_class_access_flags); \
  	  print_access_flags (out, inner_class_access_flags, 'c');	    \
  	  fprintf (out, ", outer class: ");				    \
! 	  if (flag_print_constant_pool)					    \
! 	    fprintf (out, "%d=", outer_class_info_index);		    \
! 	  print_constant_terse (out, jcf,				    \
  				outer_class_info_index, CONSTANT_Class);    \
  	}								    \
      }									    \
--- 319,340 ----
  									    \
        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)			    \
! 	    {								    \
! 	      fprintf (out, " (");					    \
! 	      print_constant_terse_with_index (out, jcf, inner_name_index,  \
! 					       CONSTANT_Utf8);		    \
! 	      fputc (')', out);						    \
! 	    }								    \
! 	  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);    \
  	}								    \
      }									    \
*************** utf8_equal_string (JCF *jcf, int index, 
*** 349,360 ****
  static void
  print_constant_ref (FILE *stream, JCF *jcf, int index)
  {
-   fprintf (stream, "#%d=<", index);
    if (index <= 0 || index >= JPOOL_SIZE(jcf))
!     fprintf (stream, "out of range");
    else
!     print_constant (stream, jcf, index, 1);
!   fprintf (stream, ">");
  }
  
  /* Print the access flags given by FLAGS.
--- 355,370 ----
  static void
  print_constant_ref (FILE *stream, JCF *jcf, int index)
  {
    if (index <= 0 || index >= JPOOL_SIZE(jcf))
!     fprintf (stream, "<out of range>");
    else
!     {
!       if (flag_print_constant_pool)
! 	fprintf (stream, "#%d=", index);
!       fputc ('<', stream);
!       print_constant (stream, jcf, index, 1);
!       fputc ('>', stream);
!     }
  }
  
  /* Print the access flags given by FLAGS.
*************** print_constant_terse (FILE *out, JCF *jc
*** 413,418 ****
--- 423,436 ----
      print_constant (out, jcf, index, 0);
  }
  
+ static void
+ print_constant_terse_with_index (FILE *out, JCF *jcf, int index, int expected)
+ {
+   if (flag_print_constant_pool)
+     fprintf (out, "%d=", index);
+   print_constant_terse (out, jcf, index, expected);
+ }
+ 
  /* Print the constant at INDEX in JCF's constant pool.
     If verbosity==0, print very tersely (no extraneous text).
     If verbosity==1, prefix the type of the constant.
*************** print_exception_table (JCF *jcf, const u
*** 774,788 ****
  	  int end_pc = GET_u2 (ptr+2);
  	  int handler_pc = GET_u2 (ptr+4);
  	  int catch_type = GET_u2 (ptr+6);
! 	  fprintf (out, "  start: %d, end: %d, handler: %d, type: %d",
! 		   start_pc, end_pc, handler_pc, catch_type);
  	  if (catch_type == 0)
! 	    fputs (" /* finally */", out);
  	  else
! 	    {
! 	      fputc('=', out);
! 	      print_constant_terse (out, jcf, catch_type, CONSTANT_Class);
! 	    }
  	  fputc ('\n', out);
  	}
      }
--- 792,804 ----
  	  int end_pc = GET_u2 (ptr+2);
  	  int handler_pc = GET_u2 (ptr+4);
  	  int catch_type = GET_u2 (ptr+6);
! 	  fprintf (out, "  start: %d, end: %d, handler: %d, type: ",
! 		   start_pc, end_pc, handler_pc);
  	  if (catch_type == 0)
! 	    fputs ("0 /* finally */", out);
  	  else
! 	    print_constant_terse_with_index (out, jcf,
! 					     catch_type, CONSTANT_Class);
  	  fputc ('\n', out);
  	}
      }
*************** process_class (JCF *jcf)
*** 795,813 ****
  {
    int code;
    if (jcf_parse_preamble (jcf) != 0)
!     fprintf (stderr, "Not a valid Java .class file.\n");    
  
    /* Parse and possibly print constant pool */
    code = jcf_parse_constant_pool (jcf);
    if (code != 0)
      {
!       fprintf (stderr, "error while parsing constant pool\n");
        exit (FATAL_EXIT_CODE);
      }
    code = verify_constant_pool (jcf);
    if (code > 0)
      {
!       fprintf (stderr, "error in constant pool entry #%d\n", code);
        exit (FATAL_EXIT_CODE);
      }
    if (flag_print_constant_pool)
--- 811,829 ----
  {
    int code;
    if (jcf_parse_preamble (jcf) != 0)
!     fprintf (stderr, _("Not a valid Java .class file.\n"));    
  
    /* Parse and possibly print constant pool */
    code = jcf_parse_constant_pool (jcf);
    if (code != 0)
      {
!       fprintf (stderr, _("error while parsing constant pool\n"));
        exit (FATAL_EXIT_CODE);
      }
    code = verify_constant_pool (jcf);
    if (code > 0)
      {
!       fprintf (stderr, _("error in constant pool entry #%d\n"), code);
        exit (FATAL_EXIT_CODE);
      }
    if (flag_print_constant_pool)
*************** process_class (JCF *jcf)
*** 817,835 ****
    code = jcf_parse_fields (jcf);
    if (code != 0)
      {
!       fprintf (stderr, "error while parsing fields\n");
        exit (FATAL_EXIT_CODE);
      }
    code = jcf_parse_methods (jcf);
    if (code != 0)
      {
!       fprintf (stderr, "error while parsing methods\n");
        exit (FATAL_EXIT_CODE);
      }
    code = jcf_parse_final_attributes (jcf);
    if (code != 0)
      {
!       fprintf (stderr, "error while parsing final attributes\n");
        exit (FATAL_EXIT_CODE);
      }
    jcf->filename = NULL;
--- 833,851 ----
    code = jcf_parse_fields (jcf);
    if (code != 0)
      {
!       fprintf (stderr, _("error while parsing fields\n"));
        exit (FATAL_EXIT_CODE);
      }
    code = jcf_parse_methods (jcf);
    if (code != 0)
      {
!       fprintf (stderr, _("error while parsing methods\n"));
        exit (FATAL_EXIT_CODE);
      }
    code = jcf_parse_final_attributes (jcf);
    if (code != 0)
      {
!       fprintf (stderr, _("error while parsing final attributes\n"));
        exit (FATAL_EXIT_CODE);
      }
    jcf->filename = NULL;
*************** static const struct option options[] =
*** 858,894 ****
    { "verbose",       no_argument,       NULL, 'v' },
    { "version",       no_argument,       NULL, OPT_VERSION },
    { "javap",         no_argument,       NULL, OPT_JAVAP },
!   { "print-main",    no_argument,      &flag_print_main, 1 },
    { NULL,            no_argument,       NULL, 0 }
  };
  
  static void
  usage (void)
  {
!   fprintf (stderr, "Try `jcf-dump --help' for more information.\n");
    exit (1);
  }
  
  static void
  help (void)
  {
!   printf ("Usage: jcf-dump [OPTION]... CLASS...\n\n");
!   printf ("Display contents of a class file in readable form.\n\n");
!   printf ("  -c                      Disassemble method bodies\n");
!   printf ("  --javap                 Generate output in `javap' format\n");
    printf ("\n");
!   printf ("  --classpath PATH        Set path to find .class files\n");
!   printf ("  -IDIR                   Append directory to class path\n");
!   printf ("  --bootclasspath PATH    Override built-in class path\n");
!   printf ("  --extdirs PATH          Set extensions directory path\n");
!   printf ("  -o FILE                 Set output file name\n");
    printf ("\n");
!   printf ("  --help                  Print this help, then exit\n");
!   printf ("  --version               Print version number, then exit\n");
!   printf ("  -v, --verbose           Print extra information while running\n");
    printf ("\n");
!   printf ("For bug reporting instructions, please see:\n");
!   printf ("%s.\n", bug_report_url);
    exit (0);
  }
  
--- 874,911 ----
    { "verbose",       no_argument,       NULL, 'v' },
    { "version",       no_argument,       NULL, OPT_VERSION },
    { "javap",         no_argument,       NULL, OPT_JAVAP },
!   { "print-main",    no_argument,       &flag_print_main, 1 },
!   { "print-constants", no_argument,     &flag_print_constant_pool, 1 },
    { NULL,            no_argument,       NULL, 0 }
  };
  
  static void
  usage (void)
  {
!   fprintf (stderr, _("Try 'jcf-dump --help' for more information.\n"));
    exit (1);
  }
  
  static void
  help (void)
  {
!   printf (_("Usage: jcf-dump [OPTION]... CLASS...\n\n"));
!   printf (_("Display contents of a class file in readable form.\n\n"));
!   printf (_("  -c                      Disassemble method bodies\n"));
!   printf (_("  --javap                 Generate output in 'javap' format\n"));
    printf ("\n");
!   printf (_("  --classpath PATH        Set path to find .class files\n"));
!   printf (_("  -IDIR                   Append directory to class path\n"));
!   printf (_("  --bootclasspath PATH    Override built-in class path\n"));
!   printf (_("  --extdirs PATH          Set extensions directory path\n"));
!   printf (_("  -o FILE                 Set output file name\n"));
    printf ("\n");
!   printf (_("  --help                  Print this help, then exit\n"));
!   printf (_("  --version               Print version number, then exit\n"));
!   printf (_("  -v, --verbose           Print extra information while running\n"));
    printf ("\n");
!   printf (_("For bug reporting instructions, please see:\n"
! 	    "%s.\n"), bug_report_url);
    exit (0);
  }
  
*************** static void
*** 896,904 ****
  version (void)
  {
    printf ("jcf-dump (GCC) %s\n\n", version_string);
!   printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n");
!   printf ("This is free software; see the source for copying conditions.  There is NO\n");
!   printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n");
    exit (0);
  }
  
--- 913,921 ----
  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);
  }
  
*************** main (int argc, char** argv)
*** 908,916 ****
    JCF jcf[1];
    int argi, opt;
  
    if (argc <= 1)
      {
!       fprintf (stderr, "jcf-dump: no classes specified\n");
        usage ();
      }
  
--- 925,935 ----
    JCF jcf[1];
    int argi, opt;
  
+   gcc_init_libintl ();
+ 
    if (argc <= 1)
      {
!       fprintf (stderr, _("jcf-dump: no classes specified\n"));
        usage ();
      }
  
*************** main (int argc, char** argv)
*** 973,981 ****
  	}
      }
  
    if (optind == argc)
      {
!       fprintf (stderr, "jcf-dump: no classes specified\n");
        usage ();
      }
  
--- 992,1003 ----
  	}
      }
  
+   if (verbose && ! flag_javap_compatible)
+     flag_print_constant_pool = 1;
+ 
    if (optind == argc)
      {
!       fprintf (stderr, _("jcf-dump: no classes specified\n"));
        usage ();
      }
  
*************** main (int argc, char** argv)
*** 995,1001 ****
        out = fopen (output_file, "w");
        if (! out)
  	{
! 	  fprintf (stderr, "Cannot open '%s' for output.\n", output_file);
  	  return FATAL_EXIT_CODE;
  	}
      }
--- 1017,1023 ----
        out = fopen (output_file, "w");
        if (! out)
  	{
! 	  fprintf (stderr, _("Cannot open '%s' for output.\n"), output_file);
  	  return FATAL_EXIT_CODE;
  	}
      }
*************** main (int argc, char** argv)
*** 1041,1047 ****
  		    break;  /* got to central directory */
  		  if (magic != 0x04034b50) /* ZIPMAGIC (little-endian) */
  		    {
! 		      fprintf (stderr, "bad format of .zip/.jar archive\n");
  		      return FATAL_EXIT_CODE;
  		    }
  		  JCF_FILL (jcf, 26);
--- 1063,1069 ----
  		    break;  /* got to central directory */
  		  if (magic != 0x04034b50) /* ZIPMAGIC (little-endian) */
  		    {
! 		      fprintf (stderr, _("bad format of .zip/.jar archive\n"));
  		      return FATAL_EXIT_CODE;
  		    }
  		  JCF_FILL (jcf, 26);
*************** main (int argc, char** argv)
*** 1058,1064 ****
  		  if (jcf->read_end - jcf->read_ptr < total_length)
  		    jcf_trim_old_input (jcf);
  		  JCF_FILL (jcf, total_length);
! 		  filename = jcf->read_ptr;
  		  JCF_SKIP (jcf, filename_length);
  		  JCF_SKIP (jcf, extra_length);
  		  if (filename_length > 0
--- 1080,1086 ----
  		  if (jcf->read_end - jcf->read_ptr < total_length)
  		    jcf_trim_old_input (jcf);
  		  JCF_FILL (jcf, total_length);
! 		  filename = (const char *) jcf->read_ptr;
  		  JCF_SKIP (jcf, filename_length);
  		  JCF_SKIP (jcf, extra_length);
  		  if (filename_length > 0
*************** disassemble_method (JCF* jcf, const unsi
*** 1159,1165 ****
  #define VAR_INDEX_2 (saw_index = 1, IMMEDIATE_u2)
  
  #define CHECK_PC_IN_RANGE(PC) (PC < 0 || PC > len ? \
!   (fprintf(stderr, "Bad byte codes.\n"), exit(-1)) : 1)
  
  /* Print out operand (if not implied by the opcode) for PUSCH opcodes.
     These all push a constant onto the opcode stack. */
--- 1181,1187 ----
  #define VAR_INDEX_2 (saw_index = 1, IMMEDIATE_u2)
  
  #define CHECK_PC_IN_RANGE(PC) (PC < 0 || PC > len ? \
!   (fprintf(stderr, _("Bad byte codes.\n")), exit(-1), 0) : 1)
  
  /* Print out operand (if not implied by the opcode) for PUSCH opcodes.
     These all push a constant onto the opcode stack. */
diff -Nrcpad gcc-3.4.3/gcc/java/jcf-io.c gcc-4.0.0/gcc/java/jcf-io.c
*** gcc-3.4.3/gcc/java/jcf-io.c	Sat Dec 20 15:38:27 2003
--- gcc-4.0.0/gcc/java/jcf-io.c	Sat Mar 12 02:16:28 2005
***************
*** 1,5 ****
  /* Utility routines for finding and reading Java(TM) .class files.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003
     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
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** opendir_in_zip (const char *zipfile, int
*** 120,126 ****
    zipf->next = SeenZipFiles;
    zipf->name = (char*)(zipf+1);
    strcpy (zipf->name, zipfile);
-   SeenZipFiles = zipf;
    fd = open (zipfile, O_RDONLY | O_BINARY);
    zipf->fd = fd;
    if (fd < 0)
--- 120,125 ----
*************** opendir_in_zip (const char *zipfile, int
*** 140,145 ****
--- 139,146 ----
        if (read_zip_archive (zipf) != 0)
  	return NULL;
      }
+ 
+   SeenZipFiles = zipf;  
    return zipf;
  }
  
*************** read_zip_member (JCF *jcf,  ZipDirectory
*** 214,220 ****
        jcf->read_ptr = jcf->buffer;
        jcf->read_end = jcf->buffer_end;
        buffer = ALLOC (zipd->size);
!       d_stream.next_in = buffer;
        d_stream.avail_in = zipd->size;
        if (lseek (zipf->fd, zipd->filestart, 0) < 0
  	  || read (zipf->fd, buffer, zipd->size) != (long) zipd->size)
--- 215,221 ----
        jcf->read_ptr = jcf->buffer;
        jcf->read_end = jcf->buffer_end;
        buffer = ALLOC (zipd->size);
!       d_stream.next_in = (unsigned char *) buffer;
        d_stream.avail_in = zipd->size;
        if (lseek (zipf->fd, zipd->filestart, 0) < 0
  	  || read (zipf->fd, buffer, zipd->size) != (long) zipd->size)
*************** caching_stat (char *filename, struct sta
*** 375,384 ****
  	 particular, the type of the function pointer passed as the
  	 third argument sometimes takes a "const struct dirent *"
  	 parameter, and sometimes just a "struct dirent *".  We cast
! 	 to (void *) so that either way it is quietly accepted.  */
!       dent->num_files = scandir (filename, &dent->files, 
! 				 (void *) java_or_class_file, 
! 				 alphasort);
        *slot = dent;
      }
    else
--- 376,386 ----
  	 particular, the type of the function pointer passed as the
  	 third argument sometimes takes a "const struct dirent *"
  	 parameter, and sometimes just a "struct dirent *".  We cast
! 	 to (void *) and use __extension__ so that either way it is
! 	 quietly accepted.  FIXME: scandir is not in POSIX.  */
!       dent->num_files = __extension__ scandir (filename, &dent->files, 
! 					       (void *) java_or_class_file, 
! 					       alphasort);
        *slot = dent;
      }
    else
*************** find_class (const char *classname, int c
*** 531,537 ****
    if (! java && ! class && java_buf.st_mtime > class_buf.st_mtime)
      {
        if (flag_newer)
! 	warning ("source file for class `%s' is newer than its matching class file.  Source file `%s' used instead", classname, java_buffer);
        class = -1;
      }
  
--- 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;
      }
  
diff -Nrcpad gcc-3.4.3/gcc/java/jcf-parse.c gcc-4.0.0/gcc/java/jcf-parse.c
*** gcc-3.4.3/gcc/java/jcf-parse.c	Sat Mar  6 15:36:16 2004
--- gcc-4.0.0/gcc/java/jcf-parse.c	Sat Feb 12 15:21:14 2005
***************
*** 1,5 ****
  /* Parser for Java(TM) .class files.
!    Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Parser for Java(TM) .class files.
!    Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** The Free Software Foundation is independ
*** 64,70 ****
      text = (JCF)->read_ptr; \
      save = text[LENGTH]; \
      text[LENGTH] = 0; \
!     (JCF)->cpool.data[INDEX].t = get_identifier (text); \
      text[LENGTH] = save; \
      JCF_SKIP (JCF, LENGTH); } while (0)
  
--- 64,70 ----
      text = (JCF)->read_ptr; \
      save = text[LENGTH]; \
      text[LENGTH] = 0; \
!     (JCF)->cpool.data[INDEX].t = get_identifier ((const char *) text); \
      text[LENGTH] = save; \
      JCF_SKIP (JCF, LENGTH); } while (0)
  
*************** static GTY(()) tree parse_roots[3];
*** 80,88 ****
  /* The METHOD_DECL for the current method.  */
  #define current_method parse_roots[1]
  
! /* A list of file names.  */
  #define current_file_list parse_roots[2]
  
  /* The Java archive that provides main_class;  the main input file. */
  static GTY(()) struct JCF * main_jcf;
  
--- 80,91 ----
  /* The METHOD_DECL for the current method.  */
  #define current_method parse_roots[1]
  
! /* A list of TRANSLATION_UNIT_DECLs for the files to be compiled.  */
  #define current_file_list parse_roots[2]
  
+ /* Line 0 in current file, if compiling from bytecode. */
+ static location_t file_start_location;
+ 
  /* The Java archive that provides main_class;  the main input file. */
  static GTY(()) struct JCF * main_jcf;
  
*************** static char *compute_class_name (struct 
*** 95,101 ****
  static int classify_zip_file (struct ZipDirectory *zdir);
  static void parse_zip_file_entries (void);
  static void process_zip_dir (FILE *);
! static void parse_source_file_1 (tree, FILE *);
  static void parse_source_file_2 (void);
  static void parse_source_file_3 (void);
  static void parse_class_file (void);
--- 98,104 ----
  static int classify_zip_file (struct ZipDirectory *zdir);
  static void parse_zip_file_entries (void);
  static void process_zip_dir (FILE *);
! static void parse_source_file_1 (tree, const char *, FILE *);
  static void parse_source_file_2 (void);
  static void parse_source_file_3 (void);
  static void parse_class_file (void);
*************** set_source_filename (JCF *jcf, int index
*** 128,148 ****
  {
    tree sfname_id = get_name_constant (jcf, index);
    const char *sfname = IDENTIFIER_POINTER (sfname_id);
!   if (input_filename != NULL)
      {
!       int old_len = strlen (input_filename);
!       int new_len = IDENTIFIER_LENGTH (sfname_id);
        /* Use the current input_filename (derived from the class name)
  	 if it has a directory prefix, but otherwise matches sfname. */
        if (old_len > new_len
! 	  && strcmp (sfname, input_filename + old_len - new_len) == 0
! 	  && (input_filename[old_len - new_len - 1] == '/'
! 	      || input_filename[old_len - new_len - 1] == '\\'))
  	return;
      }
    input_filename = sfname;
!   DECL_SOURCE_FILE (TYPE_NAME (current_class)) = sfname;
!   if (current_class == main_class) main_input_filename = input_filename;
  }
  
  #define HANDLE_SOURCEFILE(INDEX) set_source_filename (jcf, INDEX)
--- 131,184 ----
  {
    tree sfname_id = get_name_constant (jcf, index);
    const char *sfname = IDENTIFIER_POINTER (sfname_id);
!   const char *old_filename = input_filename;
!   int new_len = IDENTIFIER_LENGTH (sfname_id);
!   if (old_filename != NULL)
      {
!       int old_len = strlen (old_filename);
        /* Use the current input_filename (derived from the class name)
  	 if it has a directory prefix, but otherwise matches sfname. */
        if (old_len > new_len
! 	  && 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)
+     {
+       const char *class_name
+ 	= IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)));
+       char *dot = strrchr (class_name, '.');
+       if (dot != NULL)
+ 	{
+ 	  /* Length of prefix, not counting final dot. */
+ 	  int i = dot - class_name;
+ 	  /* Concatenate current package prefix with new sfname. */
+ 	  char *buf = xmalloc (i + new_len + 2); /* Space for '.' and '\0'. */
+ 	  strcpy (buf + i + 1, sfname);
+ 	  /* Copy package from class_name, replacing '.' by DIR_SEPARATOR.
+ 	     Note we start at the end with the final package dot. */
+ 	  for (; i >= 0;  i--)
+ 	    {
+ 	      char c = class_name[i];
+ 	      if (c == '.')
+ 		c = DIR_SEPARATOR;
+ 	      buf[i] = c;
+ 	    }
+ 	  sfname_id = get_identifier (buf);
+ 	  free (buf);
+ 	  sfname = IDENTIFIER_POINTER (sfname_id);
+ 	}
+     }
+       
+ #ifdef USE_MAPPED_LOCATION
+   line_table.maps[line_table.used-1].to_file = sfname;
+ #else
    input_filename = sfname;
!   DECL_SOURCE_LOCATION (TYPE_NAME (current_class)) = input_location;
!   file_start_location = input_location;
! #endif
!   if (current_class == main_class) main_input_filename = sfname;
  }
  
  #define HANDLE_SOURCEFILE(INDEX) set_source_filename (jcf, INDEX)
*************** get_constant (JCF *jcf, int index)
*** 266,285 ****
      case CONSTANT_Integer:
        {
  	jint num = JPOOL_INT(jcf, index);
! 	value = build_int_2 (num, num < 0 ? -1 : 0);
! 	TREE_TYPE (value) = int_type_node;
  	break;
        }
      case CONSTANT_Long:
        {
  	unsigned HOST_WIDE_INT num = JPOOL_UINT (jcf, index);
! 	HOST_WIDE_INT lo, hi;
  	lshift_double (num, 0, 32, 64, &lo, &hi, 0);
  	num = JPOOL_UINT (jcf, index+1);
  	add_double (lo, hi, num, 0, &lo, &hi);
! 	value = build_int_2 (lo, hi);
! 	TREE_TYPE (value) = long_type_node;
! 	force_fit_type (value, 0);
  	break;
        }
  
--- 302,321 ----
      case CONSTANT_Integer:
        {
  	jint num = JPOOL_INT(jcf, index);
! 	value = build_int_cst (int_type_node, num);
  	break;
        }
      case CONSTANT_Long:
        {
  	unsigned HOST_WIDE_INT num = JPOOL_UINT (jcf, index);
! 	unsigned HOST_WIDE_INT lo;
! 	HOST_WIDE_INT hi;
! 	
  	lshift_double (num, 0, 32, 64, &lo, &hi, 0);
  	num = JPOOL_UINT (jcf, index+1);
  	add_double (lo, hi, num, 0, &lo, &hi);
! 	value = build_int_cst_wide (long_type_node, lo, hi);
! 	value = force_fit_type (value, 0, false, false);
  	break;
        }
  
*************** give_name_to_class (JCF *jcf, int i)
*** 411,423 ****
        tree this_class;
        int j = JPOOL_USHORT1 (jcf, i);
        /* verify_constant_pool confirmed that j is a CONSTANT_Utf8. */
!       tree class_name = unmangle_classname (JPOOL_UTF_DATA (jcf, j),
  					    JPOOL_UTF_LENGTH (jcf, j));
        this_class = lookup_class (class_name);
!       input_filename = DECL_SOURCE_FILE (TYPE_NAME (this_class));
!       input_line = 0;
        if (main_input_filename == NULL && jcf == main_jcf)
  	main_input_filename = input_filename;
  
        jcf->cpool.data[i].t = this_class;
        JPOOL_TAG (jcf, i) = CONSTANT_ResolvedClass;
--- 447,471 ----
        tree this_class;
        int j = JPOOL_USHORT1 (jcf, i);
        /* verify_constant_pool confirmed that j is a CONSTANT_Utf8. */
!       tree class_name = unmangle_classname ((const char *) JPOOL_UTF_DATA (jcf, j),
  					    JPOOL_UTF_LENGTH (jcf, j));
        this_class = lookup_class (class_name);
! #ifdef USE_MAPPED_LOCATION
!       {
!       tree source_name = identifier_subst (class_name, "", '.', '/', ".java");
!       const char *sfname = IDENTIFIER_POINTER (source_name);
!       linemap_add (&line_table, LC_ENTER, false, sfname, 0);
!       input_location = linemap_line_start (&line_table, 0, 1);
!       file_start_location = input_location;
!       DECL_SOURCE_LOCATION (TYPE_NAME (this_class)) = input_location;
!       if (main_input_filename == NULL && jcf == main_jcf)
! 	main_input_filename = sfname;
!       }
! #else
!       input_location = DECL_SOURCE_LOCATION (TYPE_NAME (this_class));
        if (main_input_filename == NULL && jcf == main_jcf)
  	main_input_filename = input_filename;
+ #endif
  
        jcf->cpool.data[i].t = this_class;
        JPOOL_TAG (jcf, i) = CONSTANT_ResolvedClass;
*************** get_class_constant (JCF *jcf, int i)
*** 439,449 ****
      {
        int name_index = JPOOL_USHORT1 (jcf, i);
        /* verify_constant_pool confirmed that name_index is a CONSTANT_Utf8. */
!       const char *name = JPOOL_UTF_DATA (jcf, name_index);
        int nlength = JPOOL_UTF_LENGTH (jcf, name_index);
  
        if (name[0] == '[')  /* Handle array "classes". */
! 	  type = TREE_TYPE (parse_signature_string (name, nlength));
        else
          { 
            tree cname = unmangle_classname (name, nlength);
--- 487,497 ----
      {
        int name_index = JPOOL_USHORT1 (jcf, i);
        /* verify_constant_pool confirmed that name_index is a CONSTANT_Utf8. */
!       const char *name = (const char *) JPOOL_UTF_DATA (jcf, name_index);
        int nlength = JPOOL_UTF_LENGTH (jcf, name_index);
  
        if (name[0] == '[')  /* Handle array "classes". */
! 	  type = TREE_TYPE (parse_signature_string ((const unsigned char *) name, nlength));
        else
          { 
            tree cname = unmangle_classname (name, nlength);
*************** read_class (tree name)
*** 482,492 ****
  
    if (jcf == NULL)
      {
        this_jcf.zipd = NULL;
        jcf = &this_jcf;
!       if (find_class (IDENTIFIER_POINTER (name), IDENTIFIER_LENGTH (name),
! 		      &this_jcf, 1) == 0)
  	return 0;
      }
  
    current_jcf = jcf;
--- 530,546 ----
  
    if (jcf == NULL)
      {
+       const char* path_name;
        this_jcf.zipd = NULL;
        jcf = &this_jcf;
!       
!       path_name = find_class (IDENTIFIER_POINTER (name),
! 			      IDENTIFIER_LENGTH (name),
! 			      &this_jcf, 1);
!       if (path_name == 0)
  	return 0;
+       else
+ 	free((char *) path_name);
      }
  
    current_jcf = jcf;
*************** read_class (tree name)
*** 494,522 ****
    if (current_jcf->java_source)
      {
        const char *filename = current_jcf->filename;
!       tree file;
        FILE *finput;
        int generate;
  
        java_parser_context_save_global ();
        java_push_parser_context ();
!       BUILD_FILENAME_IDENTIFIER_NODE (file, filename);
!       generate = IS_A_COMMAND_LINE_FILENAME_P (file);
!       if (wfl_operator == NULL_TREE)
! 	wfl_operator = build_expr_wfl (NULL_TREE, NULL, 0, 0);
!       EXPR_WFL_FILENAME_NODE (wfl_operator) = file;
!       input_filename = ggc_strdup (filename);
        output_class = current_class = NULL_TREE;
        current_function_decl = NULL_TREE;
!       if (!HAS_BEEN_ALREADY_PARSED_P (file))
  	{
! 	  if (!(finput = fopen (input_filename, "r")))
! 	    fatal_error ("can't reopen %s: %m", input_filename);
! 	  parse_source_file_1 (file, finput);
  	  parse_source_file_2 ();
  	  parse_source_file_3 ();
  	  if (fclose (finput))
  	    fatal_error ("can't close %s: %m", input_filename);
  	}
        JCF_FINISH (current_jcf);
        java_pop_parser_context (generate);
--- 548,585 ----
    if (current_jcf->java_source)
      {
        const char *filename = current_jcf->filename;
!       char *real_path;
!       tree given_file, real_file;
        FILE *finput;
        int generate;
  
        java_parser_context_save_global ();
        java_push_parser_context ();
! 
!       given_file = get_identifier (filename);
!       filename = IDENTIFIER_POINTER (given_file);
!       real_path = lrealpath (filename);
!       real_file = get_identifier (real_path);
!       free (real_path);
! 
!       generate = IS_A_COMMAND_LINE_FILENAME_P (given_file);
        output_class = current_class = NULL_TREE;
        current_function_decl = NULL_TREE;
! 
!       if (! HAS_BEEN_ALREADY_PARSED_P (real_file))
  	{
! 	  if (! (finput = fopen (filename, "r")))
! 	    fatal_error ("can't reopen %s: %m", filename);
! 
! 	  parse_source_file_1 (real_file, filename, finput);
  	  parse_source_file_2 ();
  	  parse_source_file_3 ();
+ 
  	  if (fclose (finput))
  	    fatal_error ("can't close %s: %m", input_filename);
+ #ifdef USE_MAPPED_LOCATION
+ 	  linemap_add (&line_table, LC_LEAVE, false, NULL, 0);
+ #endif
  	}
        JCF_FINISH (current_jcf);
        java_pop_parser_context (generate);
*************** read_class (tree name)
*** 529,535 ****
  	  java_parser_context_save_global ();
  	  java_push_parser_context ();
  	  output_class = current_class = class;
! 	  input_filename = current_jcf->filename;
  	  if (JCF_SEEN_IN_ZIP (current_jcf))
  	    read_zip_member(current_jcf,
  			    current_jcf->zipd, current_jcf->zipd->zipf);
--- 592,598 ----
  	  java_parser_context_save_global ();
  	  java_push_parser_context ();
  	  output_class = current_class = class;
! 	  ctxp->save_location = input_location;
  	  if (JCF_SEEN_IN_ZIP (current_jcf))
  	    read_zip_member(current_jcf,
  			    current_jcf->zipd, current_jcf->zipd->zipf);
*************** read_class (tree name)
*** 556,570 ****
  /* Load CLASS_OR_NAME. CLASS_OR_NAME can be a mere identifier if
     called from the parser, otherwise it's a RECORD_TYPE node. If
     VERBOSE is 1, print error message on failure to load a class. */
- 
- /* Replace calls to load_class by having callers call read_class directly
-    - and then perhaps rename read_class to load_class.  FIXME */
- 
  void
  load_class (tree class_or_name, int verbose)
  {
    tree name, saved;
!   int class_loaded;
  
    /* class_or_name can be the name of the class we want to load */
    if (TREE_CODE (class_or_name) == IDENTIFIER_NODE)
--- 619,636 ----
  /* Load CLASS_OR_NAME. CLASS_OR_NAME can be a mere identifier if
     called from the parser, otherwise it's a RECORD_TYPE node. If
     VERBOSE is 1, print error message on failure to load a class. */
  void
  load_class (tree class_or_name, int verbose)
  {
    tree name, saved;
!   int class_loaded = 0;
!   tree class_decl = NULL_TREE;
!   bool is_compiled_class = false;
! 
!   /* We've already failed, don't try again.  */
!   if (TREE_CODE (class_or_name) == RECORD_TYPE
!       && TYPE_DUMMY (class_or_name))
!     return;
  
    /* class_or_name can be the name of the class we want to load */
    if (TREE_CODE (class_or_name) == IDENTIFIER_NODE)
*************** load_class (tree class_or_name, int verb
*** 577,607 ****
    else
      name = DECL_NAME (TYPE_NAME (class_or_name));
  
    saved = name;
!   while (1)
      {
!       char *separator;
  
!       if ((class_loaded = read_class (name)))
! 	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), '.')))
  	{
! 	  int c = *separator;
! 	  *separator = '\0';
! 	  name = get_identifier (IDENTIFIER_POINTER (name));
! 	  *separator = c;
  	}
-       /* Otherwise, we failed, we bail. */
-       else
- 	break;
      }
- 
-   if (!class_loaded && verbose)
-     error ("cannot find file for class %s", IDENTIFIER_POINTER (saved));
  }
  
  /* Parse the .class file JCF. */
--- 643,735 ----
    else
      name = DECL_NAME (TYPE_NAME (class_or_name));
  
+   class_decl = IDENTIFIER_CLASS_VALUE (name);
+   if (class_decl != NULL_TREE)
+     {
+       tree type = TREE_TYPE (class_decl);
+       is_compiled_class
+ 	= ((TYPE_JCF (type) && JCF_SEEN_IN_ZIP (TYPE_JCF (type)))
+ 	   || CLASS_FROM_CURRENTLY_COMPILED_P (type));
+     }
+ 
+   /* If the class is from source code, then it must already be loaded.  */
+   class_decl = IDENTIFIER_CLASS_VALUE (name);
+   if (class_decl && CLASS_FROM_SOURCE_P (TREE_TYPE (class_decl)))
+     return;
+ 
    saved = name;
!   
!   /* If flag_verify_invocations is unset, we don't try to load a class
!      unless we're looking for Object (which is fixed by the ABI) or
!      it's a class that we're going to compile.  */
!   if (flag_verify_invocations
!       || class_or_name == object_type_node
!       || is_compiled_class
!       || TREE_CODE (class_or_name) == IDENTIFIER_NODE)
      {
!       while (1)
! 	{
! 	  char *separator;
  
! 	  /* We've already loaded it.  */
! 	  if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE)
! 	    {
! 	      tree tmp_decl = IDENTIFIER_CLASS_VALUE (name);
! 	      if (CLASS_PARSED_P (TREE_TYPE (tmp_decl)))
! 		break;
! 	    }
! 	
! 	  if (read_class (name))
! 	    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), '.')))
! 	    {
! 	      int c = *separator;
! 	      *separator = '\0';
! 	      name = get_identifier (IDENTIFIER_POINTER (name));
! 	      *separator = c;
! 	    }
! 	  /* Otherwise, we failed, we bail. */
! 	  else
! 	    break;
! 	}
! 
!       {
! 	/* have we found the class we're looking for?  */
! 	tree type_decl = IDENTIFIER_CLASS_VALUE (saved);
! 	tree type = type_decl ? TREE_TYPE (type_decl) : NULL;
! 	class_loaded = type && CLASS_PARSED_P (type);
!       }	      
!     }
!   
!   if (!class_loaded)
!     {
!       if (flag_verify_invocations || ! flag_indirect_dispatch
! 	  || flag_emit_class_files)
  	{
! 	  if (verbose)
! 	    error ("cannot find file for class %s", IDENTIFIER_POINTER (saved));
! 	}
!       else if (verbose)
! 	{
! 	  /* 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)
! 	    {
! 	      set_super_info (0, class_or_name, object_type_node, 0);
! 	      TYPE_DUMMY (class_or_name) = 1;
! 	      /* We won't be able to output any debug info for this class.  */
! 	      DECL_IGNORED_P (TYPE_NAME (class_or_name)) = 1;
! 	    }
  	}
      }
  }
  
  /* Parse the .class file JCF. */
*************** jcf_parse (JCF* jcf)
*** 655,660 ****
--- 783,791 ----
    code = jcf_parse_final_attributes (jcf);
    if (code != 0)
      fatal_error ("error while parsing final attributes");
+ #ifdef USE_MAPPED_LOCATION
+   linemap_add (&line_table, LC_LEAVE, false, NULL, 0);
+ #endif
  
    /* The fields of class_type_node are already in correct order. */
    if (current_class != class_type_node && current_class != object_type_node)
*************** jcf_parse (JCF* jcf)
*** 668,674 ****
  	 -fforce-classes-archive-check was specified. */
        if (!jcf->right_zip
  	  && (!flag_emit_class_files || flag_force_classes_archive_check))
! 	fatal_error ("the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute.  This generally means that your classpath is incorrectly set.  Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath", jcf->filename);
      }
    else
      all_class_list = tree_cons (NULL_TREE,
--- 799,805 ----
  	 -fforce-classes-archive-check was specified. */
        if (!jcf->right_zip
  	  && (!flag_emit_class_files || flag_force_classes_archive_check))
! 	fatal_error ("the %<java.lang.Object%> that was found in %qs didn't have the special zero-length %<gnu.gcj.gcj-compiled%> attribute.  This generally means that your classpath is incorrectly set.  Use %<info gcj \"Input Options\"%> to see the info page describing how to set the classpath", jcf->filename);
      }
    else
      all_class_list = tree_cons (NULL_TREE,
*************** parse_class_file (void)
*** 699,712 ****
  
    java_layout_seen_class_methods ();
  
!   input_filename = DECL_SOURCE_FILE (TYPE_NAME (current_class));
!   input_line = 0;
    (*debug_hooks->start_source_file) (input_line, input_filename);
  
-   /* Currently we always have to emit calls to _Jv_InitClass when
-      compiling from class files.  */
-   always_initialize_class_p = 1;
- 
    gen_indirect_dispatch_tables (current_class);
  
    java_mark_class_local (current_class);
--- 830,839 ----
  
    java_layout_seen_class_methods ();
  
!   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (current_class));
!   file_start_location = input_location;
    (*debug_hooks->start_source_file) (input_line, input_filename);
  
    gen_indirect_dispatch_tables (current_class);
  
    java_mark_class_local (current_class);
*************** parse_class_file (void)
*** 716,722 ****
      {
        JCF *jcf = current_jcf;
  
!       if (METHOD_ABSTRACT (method))
  	continue;
  
        if (METHOD_NATIVE (method))
--- 843,849 ----
      {
        JCF *jcf = current_jcf;
  
!       if (METHOD_ABSTRACT (method) || METHOD_DUMMY (method))
  	continue;
  
        if (METHOD_NATIVE (method))
*************** parse_class_file (void)
*** 738,744 ****
  	  DECL_MAX_LOCALS (method) = decl_max_locals;
  	  start_java_method (method);
  	  give_name_to_locals (jcf);
! 	  expand_expr_stmt (build_jni_stub (method));
  	  end_java_method ();
  	  continue;
  	}
--- 865,871 ----
  	  DECL_MAX_LOCALS (method) = decl_max_locals;
  	  start_java_method (method);
  	  give_name_to_locals (jcf);
! 	  *get_stmts () = build_jni_stub (method);
  	  end_java_method ();
  	  continue;
  	}
*************** parse_class_file (void)
*** 750,759 ****
  	  continue;
  	}
  
!       input_line = 0;
        if (DECL_LINENUMBERS_OFFSET (method))
  	{
  	  int i;
  	  unsigned char *ptr;
  	  JCF_SEEK (jcf, DECL_LINENUMBERS_OFFSET (method));
  	  linenumber_count = i = JCF_readu2 (jcf);
--- 877,887 ----
  	  continue;
  	}
  
!       input_location = file_start_location;
        if (DECL_LINENUMBERS_OFFSET (method))
  	{
  	  int i;
+ 	  int min_line = 0;
  	  unsigned char *ptr;
  	  JCF_SEEK (jcf, DECL_LINENUMBERS_OFFSET (method));
  	  linenumber_count = i = JCF_readu2 (jcf);
*************** parse_class_file (void)
*** 762,772 ****
  	  for (ptr += 2; --i >= 0; ptr += 4)
  	    {
  	      int line = GET_u2 (ptr);
! 	      /* Set initial lineno lineno to smallest linenumber.
  	       * Needs to be set before init_function_start. */
! 	      if (input_line == 0 || line < input_line)
! 		input_line = line;
! 	    }  
  	}
        else
  	{
--- 890,907 ----
  	  for (ptr += 2; --i >= 0; ptr += 4)
  	    {
  	      int line = GET_u2 (ptr);
! 	      /* Set initial input_line to smallest linenumber.
  	       * Needs to be set before init_function_start. */
! 	      if (min_line == 0 || line < min_line)
! 		min_line = line;
! 	    }
! #ifdef USE_MAPPED_LOCATION
! 	  if (min_line != 0)
! 	    input_location = linemap_line_start (&line_table, min_line, 1);
! #else
! 	  if (min_line != 0)
! 	    input_line = min_line;
! #endif
  	}
        else
  	{
*************** parse_class_file (void)
*** 780,786 ****
  
        give_name_to_locals (jcf);
  
!       /* Actually generate code. */
        expand_byte_code (jcf, method);
  
        end_java_method ();
--- 915,921 ----
  
        give_name_to_locals (jcf);
  
!       /* Convert bytecode to trees.  */
        expand_byte_code (jcf, method);
  
        end_java_method ();
*************** parse_class_file (void)
*** 791,810 ****
  
    finish_class ();
  
!   (*debug_hooks->end_source_file) (save_location.line);
    input_location = save_location;
  }
  
  /* Parse a source file, as pointed by the current value of INPUT_FILENAME. */
  
  static void
! parse_source_file_1 (tree file, FILE *finput)
  {
    int save_error_count = java_error_count;
-   /* Mark the file as parsed */
-   HAS_BEEN_ALREADY_PARSED_P (file) = 1;
  
!   jcf_dependency_add_file (input_filename, 0);
  
    lang_init_source (1);		    /* Error msgs have no method prototypes */
  
--- 926,944 ----
  
    finish_class ();
  
!   (*debug_hooks->end_source_file) (LOCATION_LINE (save_location));
    input_location = save_location;
  }
  
  /* Parse a source file, as pointed by the current value of INPUT_FILENAME. */
  
  static void
! parse_source_file_1 (tree real_file, const char *filename, FILE *finput)
  {
    int save_error_count = java_error_count;
  
!   /* Mark the file as parsed.  */
!   HAS_BEEN_ALREADY_PARSED_P (real_file) = 1;
  
    lang_init_source (1);		    /* Error msgs have no method prototypes */
  
*************** parse_source_file_1 (tree file, FILE *fi
*** 819,824 ****
--- 953,970 ----
    if (current_encoding == NULL || *current_encoding == '\0')
      current_encoding = DEFAULT_ENCODING;
  
+ #ifdef USE_MAPPED_LOCATION
+   linemap_add (&line_table, LC_ENTER, false, filename, 0);
+   input_location = linemap_line_start (&line_table, 0, 125);
+ #else
+   input_filename = filename;
+   input_line = 0;
+ #endif
+   ctxp->file_start_location = input_location;
+   ctxp->filename = filename;
+ 
+   jcf_dependency_add_file (input_filename, 0);
+ 
    /* Initialize the parser */
    java_init_lex (finput, current_encoding);
    java_parse_abort_on_error ();
*************** static void
*** 833,838 ****
--- 979,985 ----
  parse_source_file_2 (void)
  {
    int save_error_count = java_error_count;
+   flag_verify_invocations = true;
    java_complete_class ();	    /* Parse unsatisfied class decl. */
    java_parse_abort_on_error ();
  }
*************** predefined_filename_p (tree node)
*** 867,884 ****
    return 0;
  }
  
  void
  java_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
  {
    int filename_count = 0;
!   char *list, *next;
    tree node;
    FILE *finput = NULL;
! 
    if (flag_filelist_file)
      {
        int avail = 2000;
!       finput = fopen (input_filename, "r");
        if (finput == NULL)
  	fatal_error ("can't open %s: %m", input_filename);
        list = xmalloc(avail);
--- 1014,1048 ----
    return 0;
  }
  
+ /* Generate a function that does all static initialization for this 
+    translation unit.  */
+ 
+ static void
+ java_emit_static_constructor (void)
+ {
+   tree body = NULL;
+ 
+   emit_register_classes (&body);
+   write_resource_constructor (&body);
+ 
+   if (body)
+     cgraph_build_static_cdtor ('I', body, DEFAULT_INIT_PRIORITY);
+ }
+ 
  void
  java_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
  {
    int filename_count = 0;
!   location_t save_location = input_location;
!   char *file_list = NULL, *list, *next;
    tree node;
    FILE *finput = NULL;
!   int in_quotes = 0;
!  
    if (flag_filelist_file)
      {
        int avail = 2000;
!       finput = fopen (main_input_filename, "r");
        if (finput == NULL)
  	fatal_error ("can't open %s: %m", input_filename);
        list = xmalloc(avail);
*************** java_parse_file (int set_yydebug ATTRIBU
*** 908,924 ****
  	}
        fclose (finput);
        finput = NULL;
      }
    else
!     list = input_filename ? xstrdup (input_filename) : 0;
  
    while (list)
      {
        for (next = list; ; )
  	{
  	  char ch = *next;
! 	  if (ch == '\n' || ch == '\r' || ch == '\t' || ch == ' '
! 	      || ch == '&' /* FIXME */)
  	    {
  	      if (next == list)
  		{
--- 1072,1090 ----
  	}
        fclose (finput);
        finput = NULL;
+       file_list = list;
      }
    else
!     list = (char *) main_input_filename;
  
    while (list)
      {
        for (next = list; ; )
  	{
  	  char ch = *next;
! 	  if (flag_filelist_file && ! in_quotes
! 	      && (ch == '\n' || ch == '\r' || ch == '\t' || ch == ' '
! 		  || ch == '&') /* FIXME */)
  	    {
  	      if (next == list)
  		{
*************** java_parse_file (int set_yydebug ATTRIBU
*** 932,937 ****
--- 1098,1112 ----
  		  break;
  		}
  	    }
+ 	  if (flag_filelist_file && ch == '"')
+ 	    {
+ 	      in_quotes = ! in_quotes;
+ 	      *next++ = '\0';
+ 	      if (in_quotes) 
+ 		list = next;
+ 	      else 
+ 		break;
+ 	    }
  	  if (ch == '\0')
  	    {
  	      next = NULL;
*************** java_parse_file (int set_yydebug ATTRIBU
*** 942,997 ****
  
        if (list[0]) 
  	{
! 	  char *value;
! 	  tree id;
! 	  int twice = 0;
! 
! 	  int len = strlen (list);
! 
! 	  obstack_grow0 (&temporary_obstack, list, len);
! 	  value = obstack_finish (&temporary_obstack);
  
  	  filename_count++;
  
! 	  /* Exclude file that we see twice on the command line. For
! 	     all files except {Class,Error,Object,RuntimeException,String,
! 	     Throwable}.java we can rely on maybe_get_identifier. For
! 	     these files, we need to do a linear search of
! 	     current_file_list. This search happens only for these
! 	     files, presumably only when we're recompiling libgcj. */
  	     
! 	  if ((id = maybe_get_identifier (value)))
! 	    {
! 	      if (predefined_filename_p (id))
! 		{
! 		  tree c;
! 		  for (c = current_file_list; c; c = TREE_CHAIN (c))
! 		    if (TREE_VALUE (c) == id)
! 		      twice = 1;
! 		}
! 	      else
! 		twice = 1;
! 	    }
! 
! 	  if (twice)
  	    {
  	      location_t warn_loc;
! 	      warn_loc.file = value;
  	      warn_loc.line = 0;
  	      warning ("%Hsource file seen twice on command line and "
  		       "will be compiled only once", &warn_loc);
  	    }
  	  else
  	    {
! 	      BUILD_FILENAME_IDENTIFIER_NODE (node, value);
  	      IS_A_COMMAND_LINE_FILENAME_P (node) = 1;
- 	      current_file_list = tree_cons (NULL_TREE, node, 
- 					     current_file_list);
  	    }
  	}
        list = next;
      }
  
    if (filename_count == 0)
      warning ("no input file specified");
  
--- 1117,1156 ----
  
        if (list[0]) 
  	{
! 	  node = get_identifier (list);
  
  	  filename_count++;
  
! 	  /* 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);
! 	      TREE_CHAIN (file_decl) = current_file_list;
! 	      current_file_list = file_decl;
  	      IS_A_COMMAND_LINE_FILENAME_P (node) = 1;
  	    }
  	}
        list = next;
      }
  
+   if (file_list != NULL)
+     free (file_list);
+ 
    if (filename_count == 0)
      warning ("no input file specified");
  
*************** java_parse_file (int set_yydebug ATTRIBU
*** 1002,1011 ****
        /* Only one resource file may be compiled at a time.  */
        assert (TREE_CHAIN (current_file_list) == NULL);
  
!       resource_filename = IDENTIFIER_POINTER (TREE_VALUE (current_file_list));
        compile_resource_file (resource_name, resource_filename);
  
!       return;
      }
  
    current_jcf = main_jcf;
--- 1161,1170 ----
        /* Only one resource file may be compiled at a time.  */
        assert (TREE_CHAIN (current_file_list) == NULL);
  
!       resource_filename = IDENTIFIER_POINTER (DECL_NAME (current_file_list));
        compile_resource_file (resource_name, resource_filename);
  
!       goto finish;
      }
  
    current_jcf = main_jcf;
*************** java_parse_file (int set_yydebug ATTRIBU
*** 1013,1038 ****
    for (node = current_file_list; node; node = TREE_CHAIN (node))
      {
        unsigned char magic_string[4];
        uint32 magic = 0;
!       tree name = TREE_VALUE (node);
  
        /* Skip already parsed files */
!       if (HAS_BEEN_ALREADY_PARSED_P (name))
  	continue;
!       
        /* Close previous descriptor, if any */
        if (finput && fclose (finput))
  	fatal_error ("can't close input file %s: %m", main_input_filename);
        
!       finput = fopen (IDENTIFIER_POINTER (name), "rb");
        if (finput == NULL)
! 	fatal_error ("can't open %s: %m", IDENTIFIER_POINTER (name));
  
  #ifdef IO_BUFFER_SIZE
        setvbuf (finput, xmalloc (IO_BUFFER_SIZE),
  	       _IOFBF, IO_BUFFER_SIZE);
  #endif
-       input_filename = IDENTIFIER_POINTER (name);
  
        /* Figure what kind of file we're dealing with */
        if (fread (magic_string, 1, 4, finput) == 4)
--- 1172,1202 ----
    for (node = current_file_list; node; node = TREE_CHAIN (node))
      {
        unsigned char magic_string[4];
+       char *real_path;
        uint32 magic = 0;
!       tree name = DECL_NAME (node);
!       tree real_file;
!       const char *filename = IDENTIFIER_POINTER (name);
  
        /* Skip already parsed files */
!       real_path = lrealpath (filename);
!       real_file = get_identifier (real_path);
!       free (real_path);
!       if (HAS_BEEN_ALREADY_PARSED_P (real_file))
  	continue;
! 
        /* Close previous descriptor, if any */
        if (finput && fclose (finput))
  	fatal_error ("can't close input file %s: %m", main_input_filename);
        
!       finput = fopen (filename, "rb");
        if (finput == NULL)
! 	fatal_error ("can't open %s: %m", filename);
  
  #ifdef IO_BUFFER_SIZE
        setvbuf (finput, xmalloc (IO_BUFFER_SIZE),
  	       _IOFBF, IO_BUFFER_SIZE);
  #endif
  
        /* Figure what kind of file we're dealing with */
        if (fread (magic_string, 1, 4, finput) == 4)
*************** java_parse_file (int set_yydebug ATTRIBU
*** 1048,1069 ****
  	  current_jcf->read_state = finput;
  	  current_jcf->filbuf = jcf_filbuf_from_stdio;
  	  jcf_parse (current_jcf);
  	  TYPE_JCF (current_class) = current_jcf;
  	  CLASS_FROM_CURRENTLY_COMPILED_P (current_class) = 1;
! 	  TREE_PURPOSE (node) = current_class;
  	}
        else if (magic == (JCF_u4)ZIPMAGIC)
  	{
- 	  ZIP_FILE_P (node) = 1;
  	  main_jcf = ggc_alloc (sizeof (JCF));
  	  JCF_ZERO (main_jcf);
  	  main_jcf->read_state = finput;
  	  main_jcf->filbuf = jcf_filbuf_from_stdio;
! 	  if (open_in_zip (main_jcf, input_filename, NULL, 0) <  0)
! 	    fatal_error ("bad zip/jar file %s", IDENTIFIER_POINTER (name));
  	  localToFile = SeenZipFiles;
  	  /* Register all the classes defined there.  */
  	  process_zip_dir (main_jcf->read_state);
  	  parse_zip_file_entries ();
  	  /*
  	  for (each entry)
--- 1212,1240 ----
  	  current_jcf->read_state = finput;
  	  current_jcf->filbuf = jcf_filbuf_from_stdio;
  	  jcf_parse (current_jcf);
+ 	  DECL_SOURCE_LOCATION (node) = file_start_location;
  	  TYPE_JCF (current_class) = current_jcf;
  	  CLASS_FROM_CURRENTLY_COMPILED_P (current_class) = 1;
! 	  TREE_TYPE (node) = current_class;
  	}
        else if (magic == (JCF_u4)ZIPMAGIC)
  	{
  	  main_jcf = ggc_alloc (sizeof (JCF));
  	  JCF_ZERO (main_jcf);
  	  main_jcf->read_state = finput;
  	  main_jcf->filbuf = jcf_filbuf_from_stdio;
! #ifdef USE_MAPPED_LOCATION
! 	  linemap_add (&line_table, LC_ENTER, false, filename, 0);
! 	  input_location = linemap_line_start (&line_table, 0, 1);
! #endif
! 	  if (open_in_zip (main_jcf, filename, NULL, 0) <  0)
! 	    fatal_error ("bad zip/jar file %s", filename);
  	  localToFile = SeenZipFiles;
  	  /* Register all the classes defined there.  */
  	  process_zip_dir (main_jcf->read_state);
+ #ifdef USE_MAPPED_LOCATION
+ 	  linemap_add (&line_table, LC_LEAVE, false, NULL, 0);
+ #endif
  	  parse_zip_file_entries ();
  	  /*
  	  for (each entry)
*************** java_parse_file (int set_yydebug ATTRIBU
*** 1072,1104 ****
  	}
        else
  	{
- 	  JAVA_FILE_P (node) = 1;
  	  java_push_parser_context ();
  	  java_parser_context_save_global ();
! 	  parse_source_file_1 (name, finput);
  	  java_parser_context_restore_global ();
  	  java_pop_parser_context (1);
  	}
      }
  
    for (ctxp = ctxp_for_generation;  ctxp;  ctxp = ctxp->next)
      {
!       input_filename = ctxp->filename;
        parse_source_file_2 ();
      }
  
    for (ctxp = ctxp_for_generation; ctxp; ctxp = ctxp->next)
      {
!       input_filename = ctxp->filename;
        parse_source_file_3 ();
      }
  
    for (node = current_file_list; node; node = TREE_CHAIN (node))
      {
!       input_filename = IDENTIFIER_POINTER (TREE_VALUE (node));
        if (CLASS_FILE_P (node))
  	{
! 	  output_class = current_class = TREE_PURPOSE (node);
  	  current_jcf = TYPE_JCF (current_class);
  	  layout_class (current_class);
  	  load_inner_classes (current_class);
--- 1243,1283 ----
  	}
        else
  	{
  	  java_push_parser_context ();
  	  java_parser_context_save_global ();
! 
! 	  parse_source_file_1 (real_file, filename, finput);
  	  java_parser_context_restore_global ();
  	  java_pop_parser_context (1);
+ #ifdef USE_MAPPED_LOCATION
+ 	  linemap_add (&line_table, LC_LEAVE, false, NULL, 0);
+ #endif
  	}
      }
  
    for (ctxp = ctxp_for_generation;  ctxp;  ctxp = ctxp->next)
      {
!       input_location = ctxp->file_start_location;
        parse_source_file_2 ();
      }
  
    for (ctxp = ctxp_for_generation; ctxp; ctxp = ctxp->next)
      {
!       input_location = ctxp->file_start_location;
        parse_source_file_3 ();
      }
  
    for (node = current_file_list; node; node = TREE_CHAIN (node))
      {
!       input_location = DECL_SOURCE_LOCATION (node);
        if (CLASS_FILE_P (node))
  	{
! 	  /* FIXME: These two flags really should be independent.  We
! 	     should be able to compile fully binary compatible, but
! 	     with flag_verify_invocations on.  */
! 	  flag_verify_invocations = ! flag_indirect_dispatch;
! 	  output_class = current_class = TREE_TYPE (node);
! 
  	  current_jcf = TYPE_JCF (current_class);
  	  layout_class (current_class);
  	  load_inner_classes (current_class);
*************** java_parse_file (int set_yydebug ATTRIBU
*** 1106,1128 ****
  	  JCF_FINISH (current_jcf);
  	}
      }
!   input_filename = main_input_filename;
  
    java_expand_classes ();
!   if (!java_report_errors () && !flag_syntax_only)
!     {
!       /* Optimize and expand all classes compiled from source.  */
!       cgraph_finalize_compilation_unit ();
!       cgraph_optimize ();
!       java_finish_classes ();
  
!       /* Emit the .jcf section.  */
!       emit_register_classes ();
!     }
  
!   write_resource_constructor ();
  }
  
  /* Return the name of the class corresponding to the name of the file
     in this zip entry.  The result is newly allocated using ALLOC.  */
  static char *
--- 1285,1310 ----
  	  JCF_FINISH (current_jcf);
  	}
      }
!   input_location = save_location;
  
    java_expand_classes ();
!   if (java_report_errors () || flag_syntax_only)
!     return;
!     
!   /* Expand all classes compiled from source.  */
!   java_finish_classes ();
  
!  finish:
!   /* Arrange for any necessary initialization to happen.  */
!   java_emit_static_constructor ();
  
!   /* Only finalize the compilation unit after we've told cgraph which
!      functions have their addresses stored.  */
!   cgraph_finalize_compilation_unit ();
!   cgraph_optimize ();
  }
  
+ 
  /* Return the name of the class corresponding to the name of the file
     in this zip entry.  The result is newly allocated using ALLOC.  */
  static char *
*************** compute_class_name (struct ZipDirectory 
*** 1130,1142 ****
  {
    char *class_name_in_zip_dir = ZIPDIR_FILENAME (zdir);
    char *class_name;
!   int j;
  
-   class_name = ALLOC (zdir->filename_length + 1 - 6);
-   strncpy (class_name, class_name_in_zip_dir, zdir->filename_length - 6);
-   class_name [zdir->filename_length - 6] = '\0';
-   for (j = 0; class_name[j]; ++j)
-     class_name[j] = class_name[j] == '/' ? '.' : class_name[j];
    return class_name;
  }
  
--- 1312,1335 ----
  {
    char *class_name_in_zip_dir = ZIPDIR_FILENAME (zdir);
    char *class_name;
!   int i;
!   int filename_length = zdir->filename_length;
! 
!   while (filename_length > 2 && strncmp (class_name_in_zip_dir, "./", 2) == 0)
!     {
!       class_name_in_zip_dir += 2;
!       filename_length -= 2;
!     }
! 
!   filename_length -= strlen (".class");
!   class_name = ALLOC (filename_length + 1);
!   memcpy (class_name, class_name_in_zip_dir, filename_length);
!   class_name [filename_length] = '\0';
! 
!   for (i = 0; i < filename_length; i++)
!     if (class_name[i] == '/')
!       class_name[i] = '.';
  
    return class_name;
  }
  
*************** parse_zip_file_entries (void)
*** 1190,1195 ****
--- 1383,1408 ----
  	    current_jcf = TYPE_JCF (class);
  	    output_class = current_class = class;
  
+ 	    if (TYPE_DUMMY (class))
+ 	      {
+ 		/* This is a dummy class, and now we're compiling it
+ 		   for real.  */
+ 		abort ();
+ 	      }
+ 
+ 	    /* This is for a corner case where we have a superclass
+ 	       but no superclass fields.  
+ 
+ 	       This can happen if we earlier failed to lay out this
+ 	       class because its superclass was still in the process
+ 	       of being laid out; this occurs when we have recursive
+ 	       class dependencies via inner classes.  Setting
+ 	       TYPE_SIZE to null here causes CLASS_LOADED_P to return
+ 	       false, so layout_class() will be called again.  */
+ 	    if (TYPE_SIZE (class) && CLASSTYPE_SUPER (class)
+ 		&& integer_zerop (TYPE_SIZE (class)))
+ 	      TYPE_SIZE (class) = NULL_TREE;
+ 
  	    if (! CLASS_LOADED_P (class))
  	      {
  		if (! CLASS_PARSED_P (class))
*************** parse_zip_file_entries (void)
*** 1203,1209 ****
  
  	    if (TYPE_SIZE (current_class) != error_mark_node)
  	      {
- 		input_filename = current_jcf->filename;
  		parse_class_file ();
  		FREE (current_jcf->buffer); /* No longer necessary */
  		/* Note: there is a way to free this buffer right after a
--- 1416,1421 ----
diff -Nrcpad gcc-3.4.3/gcc/java/jcf-path.c gcc-4.0.0/gcc/java/jcf-path.c
*** gcc-3.4.3/gcc/java/jcf-path.c	Thu Jul  3 04:24:01 2003
--- gcc-4.0.0/gcc/java/jcf-path.c	Fri Oct 15 14:55:00 2004
***************
*** 1,5 ****
  /* Handle CLASSPATH, -classpath, and path searching.
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Handle CLASSPATH, -classpath, and path searching.
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** jcf_path_extdirs_arg (const char *cp)
*** 371,376 ****
--- 371,378 ----
  			add_entry (&extensions, name, 0);
  		      }
  		  }
+ 		if (dirp)
+ 		  closedir (dirp);
  	      }
  
  	      if (! *endp)
diff -Nrcpad gcc-3.4.3/gcc/java/jcf-write.c gcc-4.0.0/gcc/java/jcf-write.c
*** gcc-3.4.3/gcc/java/jcf-write.c	Thu May 20 16:06:13 2004
--- gcc-4.0.0/gcc/java/jcf-write.c	Mon Feb 14 20:04:36 2005
***************
*** 1,5 ****
  /* Write out a Java(TM) class file.
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Write out a Java(TM) class file.
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** static void perform_relocations (struct 
*** 304,309 ****
--- 304,310 ----
  static void init_jcf_state (struct jcf_partial *, struct obstack *);
  static void init_jcf_method (struct jcf_partial *, tree);
  static void release_jcf_state (struct jcf_partial *);
+ static int get_classfile_modifiers (tree class);
  static struct chunk * generate_classfile (tree, struct jcf_partial *);
  static struct jcf_handler *alloc_handler (struct jcf_block *,
  					  struct jcf_block *,
*************** get_access_flags (tree decl)
*** 633,642 ****
  {
    int flags = 0;
    int isfield = TREE_CODE (decl) == FIELD_DECL || TREE_CODE (decl) == VAR_DECL;
!   if (CLASS_PUBLIC (decl))  /* same as FIELD_PUBLIC and METHOD_PUBLIC */
!     flags |= ACC_PUBLIC;
!   if (CLASS_FINAL (decl))  /* same as FIELD_FINAL and METHOD_FINAL */
!     flags |= ACC_FINAL;
    if (isfield || TREE_CODE (decl) == FUNCTION_DECL)
      {
        if (TREE_PROTECTED (decl))
--- 634,640 ----
  {
    int flags = 0;
    int isfield = TREE_CODE (decl) == FIELD_DECL || TREE_CODE (decl) == VAR_DECL;
! 
    if (isfield || TREE_CODE (decl) == FUNCTION_DECL)
      {
        if (TREE_PROTECTED (decl))
*************** get_access_flags (tree decl)
*** 646,651 ****
--- 644,653 ----
      }
    else if (TREE_CODE (decl) == TYPE_DECL)
      {
+       if (CLASS_PUBLIC (decl))
+ 	flags |= ACC_PUBLIC;
+       if (CLASS_FINAL (decl))
+ 	flags |= ACC_FINAL;
        if (CLASS_SUPER (decl))
  	flags |= ACC_SUPER;
        if (CLASS_ABSTRACT (decl))
*************** get_access_flags (tree decl)
*** 669,674 ****
--- 671,680 ----
  
    if (TREE_CODE (decl) == FUNCTION_DECL)
      {
+       if (METHOD_PUBLIC (decl))
+ 	flags |= ACC_PUBLIC;
+       if (METHOD_FINAL (decl))
+ 	flags |= ACC_FINAL;
        if (METHOD_NATIVE (decl))
  	flags |= ACC_NATIVE;
        if (METHOD_STATIC (decl))
*************** get_access_flags (tree decl)
*** 682,687 ****
--- 688,697 ----
      }
    if (isfield)
      {
+       if (FIELD_PUBLIC (decl))
+ 	flags |= ACC_PUBLIC;
+       if (FIELD_FINAL (decl))
+ 	flags |= ACC_FINAL;
        if (FIELD_STATIC (decl))
  	flags |= ACC_STATIC;
        if (FIELD_VOLATILE (decl))
*************** static int
*** 762,768 ****
  find_constant_wide (HOST_WIDE_INT lo, HOST_WIDE_INT hi,
  		    struct jcf_partial *state)
  {
!   HOST_WIDE_INT w1, w2;
    lshift_double (lo, hi, -32, 64, &w1, &w2, 1);
    return find_constant2 (&state->cpool, CONSTANT_Long,
  			 (jword)(w1 & 0xFFFFFFFF), (jword)(lo & 0xFFFFFFFF));
--- 772,779 ----
  find_constant_wide (HOST_WIDE_INT lo, HOST_WIDE_INT hi,
  		    struct jcf_partial *state)
  {
!   unsigned HOST_WIDE_INT w1;
!   HOST_WIDE_INT w2;
    lshift_double (lo, hi, -32, 64, &w1, &w2, 1);
    return find_constant2 (&state->cpool, CONSTANT_Long,
  			 (jword)(w1 & 0xFFFFFFFF), (jword)(lo & 0xFFFFFFFF));
*************** find_constant_index (tree value, struct 
*** 787,792 ****
--- 798,816 ----
      {
        long words[2];
  
+       /* IEEE NaN can have many values, but the Java VM spec defines a
+ 	 canonical NaN.  */      
+       if (flag_emit_class_files
+ 	  && REAL_VALUE_ISNAN (TREE_REAL_CST (value)))
+ 	{
+ 	  if (TYPE_PRECISION (TREE_TYPE (value)) == 32)
+  	    return find_constant1 (&state->cpool, CONSTANT_Float,
+  				   0x7fc00000);
+ 	  else
+  	    return find_constant2 (&state->cpool, CONSTANT_Double,
+  				   0x7ff80000, 0x00000000);
+ 	}	    
+       
        real_to_target (words, &TREE_REAL_CST (value),
  		      TYPE_MODE (TREE_TYPE (value)));
        words[0] &= 0xffffffff;
*************** find_constant_index (tree value, struct 
*** 812,818 ****
  static void
  push_long_const (HOST_WIDE_INT lo, HOST_WIDE_INT hi, struct jcf_partial *state)
  {
!   HOST_WIDE_INT highpart, dummy;
    jint lowpart = WORD_TO_INT (lo);
  
    rshift_double (lo, hi, 32, 64, &highpart, &dummy, 1);
--- 836,843 ----
  static void
  push_long_const (HOST_WIDE_INT lo, HOST_WIDE_INT hi, struct jcf_partial *state)
  {
!   unsigned HOST_WIDE_INT highpart;
!   HOST_WIDE_INT dummy;
    jint lowpart = WORD_TO_INT (lo);
  
    rshift_double (lo, hi, 32, 64, &highpart, &dummy, 1);
*************** push_long_const (HOST_WIDE_INT lo, HOST_
*** 823,829 ****
        OP1(OPCODE_lconst_0 + lowpart);
      }
    else if ((highpart == 0 && lowpart > 0 && lowpart < 32768) 
! 	   || (highpart == -1 && lowpart < 0 && lowpart >= -32768))
        {
          push_int_const (lowpart, state);
          RESERVE (1);
--- 848,855 ----
        OP1(OPCODE_lconst_0 + lowpart);
      }
    else if ((highpart == 0 && lowpart > 0 && lowpart < 32768) 
! 	   || (highpart == (unsigned HOST_WIDE_INT)-1
! 	       && lowpart < 0 && lowpart >= -32768))
        {
          push_int_const (lowpart, state);
          RESERVE (1);
*************** generate_bytecode_conditional (tree exp,
*** 1084,1089 ****
--- 1110,1117 ----
    tree exp0, exp1, type;
    int save_SP = state->code_SP;
    enum java_opcode op, negop;
+   bool unordered = 0;
+   
    switch (TREE_CODE (exp))
      {
      case INTEGER_CST:
*************** generate_bytecode_conditional (tree exp,
*** 1155,1179 ****
--- 1183,1237 ----
  	  emit_goto (false_label, state);
  	}
        break;
+ 
+     case UNEQ_EXPR:
+       unordered = 1;
      case EQ_EXPR:
        op = OPCODE_if_icmpeq;
        goto compare;
+ 
+     case LTGT_EXPR:
+       unordered = 1;
      case NE_EXPR:
        op = OPCODE_if_icmpne;
        goto compare;
+ 
+     case UNLE_EXPR:
+       unordered = 1;
      case GT_EXPR:
        op = OPCODE_if_icmpgt;
        goto compare;
+ 
+     case UNGE_EXPR:
+       unordered = 1;
      case LT_EXPR:
        op = OPCODE_if_icmplt;
        goto compare;
+ 
+     case UNLT_EXPR:
+       unordered = 1;
      case GE_EXPR:
        op = OPCODE_if_icmpge;
        goto compare;
+ 
+     case UNGT_EXPR:
+       unordered = 1;
      case LE_EXPR:
        op = OPCODE_if_icmple;
        goto compare;
+ 
      compare:
+       if (unordered)
+         {
+ 	  /* UNLT_EXPR(a, b) means 'a < b || unordered(a, b)'.  This is 
+ 	  the same as the Java source expression '!(a >= b)', so handle 
+ 	  it that way.  */
+ 	  struct jcf_block *tmp = true_label;
+ 	  true_label = false_label;
+ 	  false_label = tmp;
+           true_branch_first = !true_branch_first;
+ 	}
+ 	
        exp0 = TREE_OPERAND (exp, 0);
        exp1 = TREE_OPERAND (exp, 1);
        type = TREE_TYPE (exp0);
*************** generate_bytecode_insns (tree exp, int t
*** 1419,1428 ****
        {
  	location_t saved_location = input_location;
  	tree body = EXPR_WFL_NODE (exp);
! 	if (body == empty_stmt_node)
  	  break;
  	input_filename = EXPR_WFL_FILENAME (exp);
  	input_line = EXPR_WFL_LINENO (exp);
  	if (EXPR_WFL_EMIT_LINE_NOTE (exp) && input_line > 0
  	    && debug_info_level > DINFO_LEVEL_NONE)
  	  put_linenumber (input_line, state);
--- 1477,1490 ----
        {
  	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
  	input_filename = EXPR_WFL_FILENAME (exp);
  	input_line = EXPR_WFL_LINENO (exp);
+ #endif
  	if (EXPR_WFL_EMIT_LINE_NOTE (exp) && input_line > 0
  	    && debug_info_level > DINFO_LEVEL_NONE)
  	  put_linenumber (input_line, state);
*************** generate_bytecode_insns (tree exp, int t
*** 1540,1545 ****
--- 1602,1613 ----
      case LT_EXPR:
      case GE_EXPR:
      case LE_EXPR:
+     case UNLT_EXPR:
+     case UNLE_EXPR:
+     case UNGT_EXPR:
+     case UNGE_EXPR:
+     case UNEQ_EXPR:
+     case LTGT_EXPR:
        {
  	struct jcf_block *then_label = gen_jcf_label (state);
  	struct jcf_block *else_label = gen_jcf_label (state);
*************** generate_bytecode_insns (tree exp, int t
*** 1764,1770 ****
      case RETURN_EXPR:
        exp = TREE_OPERAND (exp, 0);
        if (exp == NULL_TREE)
! 	exp = empty_stmt_node;
        else if (TREE_CODE (exp) != MODIFY_EXPR) 
  	abort ();
        else
--- 1832,1838 ----
      case RETURN_EXPR:
        exp = TREE_OPERAND (exp, 0);
        if (exp == NULL_TREE)
! 	exp = build_java_empty_stmt ();
        else if (TREE_CODE (exp) != MODIFY_EXPR) 
  	abort ();
        else
*************** generate_bytecode_insns (tree exp, int t
*** 1830,1837 ****
      case EXIT_BLOCK_EXPR:
        {
  	struct jcf_block *label = state->labeled_blocks;
! 	if (TREE_OPERAND (exp, 1) != NULL) goto notimpl;
! 	while (label->u.labeled_block != TREE_OPERAND (exp, 0))
  	  label = label->next;
  	call_cleanups (label, state);
  	emit_goto (label, state);
--- 1898,1904 ----
      case EXIT_BLOCK_EXPR:
        {
  	struct jcf_block *label = state->labeled_blocks;
! 	while (label->u.labeled_block != EXIT_BLOCK_LABELED_BLOCK (exp))
  	  label = label->next;
  	call_cleanups (label, state);
  	emit_goto (label, state);
*************** generate_bytecode_insns (tree exp, int t
*** 1972,1979 ****
  	/* If the rhs is a binary expression and the left operand is
  	   `==' to the lhs then we have an OP= expression.  In this
  	   case we must do some special processing.  */
! 	if (TREE_CODE_CLASS (TREE_CODE (rhs)) == '2'
! 	    && lhs == TREE_OPERAND (rhs, 0))
  	  {
  	    if (TREE_CODE (lhs) == COMPONENT_REF)
  	      {
--- 2039,2045 ----
  	/* If the rhs is a binary expression and the left operand is
  	   `==' to the lhs then we have an OP= expression.  In this
  	   case we must do some special processing.  */
! 	if (BINARY_CLASS_P (rhs) && lhs == TREE_OPERAND (rhs, 0))
  	  {
  	    if (TREE_CODE (lhs) == COMPONENT_REF)
  	      {
*************** generate_bytecode_insns (tree exp, int t
*** 2019,2026 ****
  
  	    /* This function correctly handles the case where the LHS
  	       of a binary expression is NULL_TREE.  */
! 	    rhs = build (TREE_CODE (rhs), TREE_TYPE (rhs),
! 			 NULL_TREE, TREE_OPERAND (rhs, 1));
  	  }
  
  	generate_bytecode_insns (rhs, STACK_TARGET, state);
--- 2085,2092 ----
  
  	    /* This function correctly handles the case where the LHS
  	       of a binary expression is NULL_TREE.  */
! 	    rhs = build2 (TREE_CODE (rhs), TREE_TYPE (rhs),
! 			  NULL_TREE, TREE_OPERAND (rhs, 1));
  	  }
  
  	generate_bytecode_insns (rhs, STACK_TARGET, state);
*************** generate_bytecode_insns (tree exp, int t
*** 2080,2086 ****
        jopcode = OPCODE_irem;
        goto binop;
      case LSHIFT_EXPR:   jopcode = OPCODE_ishl;   goto binop;
!     case RSHIFT_EXPR:   jopcode = OPCODE_ishr;   goto binop;
      case URSHIFT_EXPR:  jopcode = OPCODE_iushr;  goto binop;
      case TRUTH_AND_EXPR:
      case BIT_AND_EXPR:  jopcode = OPCODE_iand;   goto binop;
--- 2146,2154 ----
        jopcode = OPCODE_irem;
        goto binop;
      case LSHIFT_EXPR:   jopcode = OPCODE_ishl;   goto binop;
!     case RSHIFT_EXPR:
!       jopcode = TYPE_UNSIGNED (type) ? OPCODE_iushr : OPCODE_ishr;
!       goto binop;
      case URSHIFT_EXPR:  jopcode = OPCODE_iushr;  goto binop;
      case TRUTH_AND_EXPR:
      case BIT_AND_EXPR:  jopcode = OPCODE_iand;   goto binop;
*************** generate_bytecode_insns (tree exp, int t
*** 2149,2183 ****
        }
        break;
      case SAVE_EXPR:
!       /* Because the state associated with a SAVE_EXPR tree node must
! 	 be a RTL expression, we use it to store the DECL_LOCAL_INDEX
! 	 of a temporary variable in a CONST_INT.  */
!       if (! SAVE_EXPR_RTL (exp))
  	{
  	  tree type = TREE_TYPE (exp);
  	  tree decl = build_decl (VAR_DECL, NULL_TREE, type);
! 	  generate_bytecode_insns (TREE_OPERAND (exp, 0),
! 				   STACK_TARGET, state);
  	  localvar_alloc (decl, state);
! 	  SAVE_EXPR_RTL (exp) = GEN_INT (DECL_LOCAL_INDEX (decl));
  	  emit_dup (TYPE_IS_WIDE (type) ? 2 : 1, 0, state);
  	  emit_store (decl, state);
  	}
        else
  	{
- 	  /* The following code avoids creating a temporary DECL just
- 	     to pass to emit_load.  This code could be factored with
- 	     the similar implementation in emit_load_or_store.  */
  	  tree type = TREE_TYPE (exp);
! 	  int kind = adjust_typed_op (type, 4);
! 	  int index = (int) INTVAL (SAVE_EXPR_RTL (exp));
! 	  if (index <= 3)
! 	    {
! 	      RESERVE (1);  /* [ilfda]load_[0123]  */
! 	      OP1 (OPCODE_iload + 5 + 4*kind + index);
! 	    }
! 	  else  /* [ilfda]load  */
! 	    maybe_wide (OPCODE_iload + kind, index, state);
  	  NOTE_PUSH (TYPE_IS_WIDE (type) ? 2 : 1);
  	}
        break;
--- 2217,2240 ----
        }
        break;
      case SAVE_EXPR:
!       /* The first time through, the argument of the SAVE_EXPR will be
! 	 something complex.  Evaluate it, and replace the argument with
! 	 a VAR_DECL that holds the result.  */
!       arg = TREE_OPERAND (exp, 0);
!       if (TREE_CODE (arg) != VAR_DECL || DECL_NAME (arg))
  	{
  	  tree type = TREE_TYPE (exp);
  	  tree decl = build_decl (VAR_DECL, NULL_TREE, type);
! 	  generate_bytecode_insns (arg, STACK_TARGET, state);
  	  localvar_alloc (decl, state);
! 	  TREE_OPERAND (exp, 0) = decl;
  	  emit_dup (TYPE_IS_WIDE (type) ? 2 : 1, 0, state);
  	  emit_store (decl, state);
  	}
        else
  	{
  	  tree type = TREE_TYPE (exp);
! 	  emit_load (arg, state);
  	  NOTE_PUSH (TYPE_IS_WIDE (type) ? 2 : 1);
  	}
        break;
*************** generate_bytecode_insns (tree exp, int t
*** 2205,2244 ****
  	  }
  	else /* Convert numeric types. */
  	  {
! 	    int wide_src = TYPE_PRECISION (src_type) > 32;
! 	    int wide_dst = TYPE_PRECISION (dst_type) > 32;
! 	    NOTE_POP (1 + wide_src);
! 	    RESERVE (1);
  	    if (TREE_CODE (dst_type) == REAL_TYPE)
  	      {
  		if (TREE_CODE (src_type) == REAL_TYPE)
  		  OP1 (wide_dst ? OPCODE_f2d : OPCODE_d2f);
! 		else if (TYPE_PRECISION (src_type) == 64)
  		  OP1 (OPCODE_l2f + wide_dst);
  		else
  		  OP1 (OPCODE_i2f + wide_dst);
  	      }
! 	    else /* Convert to integral type. */
  	      {
  		if (TREE_CODE (src_type) == REAL_TYPE)
  		  OP1 (OPCODE_f2i + wide_dst + 3 * wide_src);
  		else if (wide_dst)
  		  OP1 (OPCODE_i2l);
  		else if (wide_src)
  		  OP1 (OPCODE_l2i);
! 		if (TYPE_PRECISION (dst_type) < 32)
  		  {
  		    RESERVE (1);
  		    /* Already converted to int, if needed. */
! 		    if (TYPE_PRECISION (dst_type) <= 8)
  		      OP1 (OPCODE_i2b);
! 		    else if (TREE_UNSIGNED (dst_type))
  		      OP1 (OPCODE_i2c);
  		    else
  		      OP1 (OPCODE_i2s);
  		  }
  	      }
- 	    NOTE_PUSH (1 + wide_dst);
  	  }
        }
        break;
--- 2262,2309 ----
  	  }
  	else /* Convert numeric types. */
  	  {
! 	    int src_prec = TYPE_PRECISION (src_type);
! 	    int dst_prec = TYPE_PRECISION (dst_type);
! 	    int wide_src = src_prec > 32;
! 	    int wide_dst = dst_prec > 32;
  	    if (TREE_CODE (dst_type) == REAL_TYPE)
  	      {
+ 		NOTE_POP (1 + wide_src);
+ 		RESERVE (1);
  		if (TREE_CODE (src_type) == REAL_TYPE)
  		  OP1 (wide_dst ? OPCODE_f2d : OPCODE_d2f);
! 		else if (src_prec == 64)
  		  OP1 (OPCODE_l2f + wide_dst);
  		else
  		  OP1 (OPCODE_i2f + wide_dst);
+ 		NOTE_PUSH (1 + wide_dst);
  	      }
! 	    /* Convert to integral type (but ignore non-widening
! 	       and non-narrowing integer type conversions).  */
! 	    else if (TREE_CODE (src_type) == REAL_TYPE
! 		     || src_prec != dst_prec)
  	      {
+ 		NOTE_POP (1 + wide_src);
+ 		RESERVE (1);
  		if (TREE_CODE (src_type) == REAL_TYPE)
  		  OP1 (OPCODE_f2i + wide_dst + 3 * wide_src);
  		else if (wide_dst)
  		  OP1 (OPCODE_i2l);
  		else if (wide_src)
  		  OP1 (OPCODE_l2i);
! 		if (dst_prec < 32)
  		  {
  		    RESERVE (1);
  		    /* Already converted to int, if needed. */
! 		    if (dst_prec <= 8)
  		      OP1 (OPCODE_i2b);
! 		    else if (TYPE_UNSIGNED (dst_type))
  		      OP1 (OPCODE_i2c);
  		    else
  		      OP1 (OPCODE_i2s);
  		  }
+ 		NOTE_PUSH (1 + wide_dst);
  	      }
  	  }
        }
        break;
*************** generate_bytecode_insns (tree exp, int t
*** 2453,2461 ****
  	tree x;
  	if (TREE_SIDE_EFFECTS (op0) || TREE_SIDE_EFFECTS (op1))
  	  abort ();
! 	x = build (COND_EXPR, TREE_TYPE (exp), 
! 		   build (code, boolean_type_node, op0, op1), 
! 		   op0, op1);	  
  	generate_bytecode_insns (x, target, state);
  	break;
        }					     
--- 2518,2526 ----
  	tree x;
  	if (TREE_SIDE_EFFECTS (op0) || TREE_SIDE_EFFECTS (op1))
  	  abort ();
! 	x = build3 (COND_EXPR, TREE_TYPE (exp), 
! 		    build2 (code, boolean_type_node, op0, op1), 
! 		    op0, op1);	  
  	generate_bytecode_insns (x, target, state);
  	break;
        }					     
*************** generate_bytecode_insns (tree exp, int t
*** 2507,2512 ****
--- 2572,2578 ----
  	    OP1 (OPCODE_multianewarray);
  	    OP2 (index);
  	    OP1 (ndims);
+ 	    NOTE_POP (ndims - 1);
  	    break;
  	  }
  	else if (f == soft_anewarray_node)
*************** generate_bytecode_insns (tree exp, int t
*** 2597,2603 ****
  	  }
        }
        /* fall through */
-     notimpl:
      default:
        error("internal error in generate_bytecode_insn - tree code not implemented: %s",
  	    tree_code_name [(int) TREE_CODE (exp)]);
--- 2663,2668 ----
*************** perform_relocations (struct jcf_partial 
*** 2740,2746 ****
  	  int n = (old_ptr - old_buffer) - start;
  	  new_ptr -= n;
  	  old_ptr -= n;
! 	  if (n > 0)
  	    memcpy (new_ptr, old_ptr, n);
  	  if (old_ptr == old_buffer)
  	    break;
--- 2805,2813 ----
  	  int n = (old_ptr - old_buffer) - start;
  	  new_ptr -= n;
  	  old_ptr -= n;
! 	  /* Don't "copy" bytes in place, this causes valgrind
! 	     warnings.  */
! 	  if (n > 0 && new_ptr != old_ptr)
  	    memcpy (new_ptr, old_ptr, n);
  	  if (old_ptr == old_buffer)
  	    break;
*************** release_jcf_state (struct jcf_partial *s
*** 2839,2844 ****
--- 2906,2954 ----
    obstack_free (state->chunk_obstack, state->first);
  }
  
+ /* Get the access flags (modifiers) of a class (TYPE_DECL) to be used in the
+    access_flags field of the class file header.  */
+ 
+ static int
+ get_classfile_modifiers (tree class)
+ {
+   /* These are the flags which are valid class file modifiers. 
+      See JVMS2 S4.1.  */
+   int valid_toplevel_class_flags = (ACC_PUBLIC | ACC_FINAL | ACC_SUPER | 
+ 				    ACC_INTERFACE | ACC_ABSTRACT);
+   int flags = get_access_flags (class);
+ 
+   /* ACC_SUPER should always be set, except for interfaces.  */
+   if (! (flags & ACC_INTERFACE))
+     flags |= ACC_SUPER;
+    
+   /* A protected member class becomes public at the top level. */
+   if (flags & ACC_PROTECTED)
+     flags |= ACC_PUBLIC;
+  
+   /* Filter out flags that are not valid for a class or interface in the 
+      top-level access_flags field.  */
+   flags &= valid_toplevel_class_flags;
+ 
+   return flags;
+ }
+ 
+ /* Get the access flags (modifiers) for a method to be used in the class 
+    file.  */
+ 
+ static int
+ get_method_access_flags (tree decl)
+ {
+   int flags = get_access_flags (decl);
+ 
+   /* Promote "private" inner-class constructors to package-private.  */
+   if (DECL_CONSTRUCTOR_P (decl)
+       && INNER_CLASS_DECL_P (TYPE_NAME (DECL_CONTEXT (decl))))
+     flags &= ~(ACC_PRIVATE);
+ 
+   return flags;
+ }
+ 
  /* Generate and return a list of chunks containing the class CLAS
     in the .class file representation.  The list can be written to a
     .class file using write_chunks.  Allocate chunks from obstack WORK. */
*************** generate_classfile (tree clas, struct jc
*** 2849,2864 ****
  {
    struct chunk *cpool_chunk;
    const char *source_file, *s;
!   char *ptr;
    int i;
!   char *fields_count_ptr;
    int fields_count = 0;
!   char *methods_count_ptr;
    int methods_count = 0;
    tree part;
    int total_supers
!     = clas == object_type_node ? 0
!     : TREE_VEC_LENGTH (TYPE_BINFO_BASETYPES (clas));
    
    ptr = append_chunk (NULL, 8, state);
    PUT4 (0xCafeBabe);  /* Magic number */
--- 2959,2973 ----
  {
    struct chunk *cpool_chunk;
    const char *source_file, *s;
!   unsigned char *ptr;
    int i;
!   unsigned char *fields_count_ptr;
    int fields_count = 0;
!   unsigned char *methods_count_ptr;
    int methods_count = 0;
    tree part;
    int total_supers
!     = clas == object_type_node ? 0 : BINFO_N_BASE_BINFOS (TYPE_BINFO (clas));
    
    ptr = append_chunk (NULL, 8, state);
    PUT4 (0xCafeBabe);  /* Magic number */
*************** generate_classfile (tree clas, struct jc
*** 2874,2882 ****
    else
      i = 8 + 2 * total_supers;
    ptr = append_chunk (NULL, i, state);
!   i = get_access_flags (TYPE_NAME (clas));
!   if (! (i & ACC_INTERFACE))
!     i |= ACC_SUPER;
    PUT2 (i); /* access_flags */
    i = find_class_constant (&state->cpool, clas);  PUT2 (i);  /* this_class */
    if (clas == object_type_node)
--- 2983,2989 ----
    else
      i = 8 + 2 * total_supers;
    ptr = append_chunk (NULL, i, state);
!   i = get_classfile_modifiers (TYPE_NAME (clas));  
    PUT2 (i); /* access_flags */
    i = find_class_constant (&state->cpool, clas);  PUT2 (i);  /* this_class */
    if (clas == object_type_node)
*************** generate_classfile (tree clas, struct jc
*** 2886,2900 ****
      }
    else
      {
!       tree basetypes = TYPE_BINFO_BASETYPES (clas);
!       tree base = BINFO_TYPE (TREE_VEC_ELT (basetypes, 0));
!       int j = find_class_constant (&state->cpool, base);
        PUT2 (j);  /* super_class */
        PUT2 (total_supers - 1);  /* interfaces_count */
!       for (i = 1;  i < total_supers;  i++)
  	{
! 	  base = BINFO_TYPE (TREE_VEC_ELT (basetypes, i));
! 	  j = find_class_constant (&state->cpool, base);
  	  PUT2 (j);
  	}
      }
--- 2993,3007 ----
      }
    else
      {
!       tree binfo = TYPE_BINFO (clas);
!       tree base_binfo = BINFO_BASE_BINFO (binfo, 0);
!       int j = find_class_constant (&state->cpool, BINFO_TYPE (base_binfo));
!       
        PUT2 (j);  /* super_class */
        PUT2 (total_supers - 1);  /* interfaces_count */
!       for (i = 1; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
  	{
! 	  j = find_class_constant (&state->cpool, BINFO_TYPE (base_binfo));
  	  PUT2 (j);
  	}
      }
*************** generate_classfile (tree clas, struct jc
*** 2973,2979 ****
  
        current_function_decl = part;
        ptr = append_chunk (NULL, 8, state);
!       i = get_access_flags (part);  PUT2 (i);
        i = find_utf8_constant (&state->cpool, name);  PUT2 (i);
        i = find_utf8_constant (&state->cpool, build_java_signature (type));
        PUT2 (i);
--- 3080,3086 ----
  
        current_function_decl = part;
        ptr = append_chunk (NULL, 8, state);
!       i = get_method_access_flags (part);  PUT2 (i);
        i = find_utf8_constant (&state->cpool, name);  PUT2 (i);
        i = find_utf8_constant (&state->cpool, build_java_signature (type));
        PUT2 (i);
*************** generate_classfile (tree clas, struct jc
*** 3002,3008 ****
  	  int code_attributes_count = 0;
  	  static tree Code_node = NULL_TREE;
  	  tree t;
! 	  char *attr_len_ptr;
  	  struct jcf_handler *handler;
  	  if (Code_node == NULL_TREE)
  	    Code_node = get_identifier ("Code");
--- 3109,3115 ----
  	  int code_attributes_count = 0;
  	  static tree Code_node = NULL_TREE;
  	  tree t;
! 	  unsigned char *attr_len_ptr;
  	  struct jcf_handler *handler;
  	  if (Code_node == NULL_TREE)
  	    Code_node = get_identifier ("Code");
diff -Nrcpad gcc-3.4.3/gcc/java/jcf.h gcc-4.0.0/gcc/java/jcf.h
*** gcc-3.4.3/gcc/java/jcf.h	Sun Oct  5 02:52:33 2003
--- gcc-4.0.0/gcc/java/jcf.h	Fri Oct 15 14:55:00 2004
***************
*** 1,5 ****
  /* Utility macros to read Java(TM) .class files and byte codes.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Utility macros to read Java(TM) .class files and byte codes.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** struct ZipDirectory;
*** 102,120 ****
  /* JCF encapsulates the state of reading a Java Class File. */
  
  typedef struct JCF GTY(()) {
!   unsigned char * GTY ((skip (""))) buffer;
!   unsigned char * GTY ((skip (""))) buffer_end;
!   unsigned char * GTY ((skip (""))) read_ptr;
!   unsigned char * GTY ((skip (""))) read_end;
!   int java_source : 1;
!   int right_zip : 1;
!   int finished : 1;
    jcf_filbuf_t filbuf;
!   PTR GTY ((skip (""))) read_state;
    const char *filename;
    const char *classname;
    /* Directory entry where it was found.  */
!   struct ZipDirectory * GTY ((skip (""))) zipd;
    JCF_u2 access_flags;
    JCF_u2 this_class;
    JCF_u2 super_class;
--- 102,120 ----
  /* JCF encapsulates the state of reading a Java Class File. */
  
  typedef struct JCF GTY(()) {
!   unsigned char * GTY ((skip)) buffer;
!   unsigned char * GTY ((skip)) buffer_end;
!   unsigned char * GTY ((skip)) read_ptr;
!   unsigned char * GTY ((skip)) read_end;
!   unsigned int java_source : 1;
!   unsigned int right_zip : 1;
!   unsigned int finished : 1;
    jcf_filbuf_t filbuf;
!   PTR GTY ((skip)) read_state;
    const char *filename;
    const char *classname;
    /* Directory entry where it was found.  */
!   struct ZipDirectory * GTY ((skip)) zipd;
    JCF_u2 access_flags;
    JCF_u2 this_class;
    JCF_u2 super_class;
diff -Nrcpad gcc-3.4.3/gcc/java/jv-scan.c gcc-4.0.0/gcc/java/jv-scan.c
*** gcc-3.4.3/gcc/java/jv-scan.c	Sun May  4 14:05:15 2003
--- gcc-4.0.0/gcc/java/jv-scan.c	Sat Feb 12 15:21:14 2005
***************
*** 1,5 ****
  /* Main for jv-scan
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
     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
     Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
*************** Boston, MA 02111-1307, USA.  */
*** 24,29 ****
--- 24,30 ----
  #include "system.h"
  #include "coretypes.h"
  #include "tm.h"
+ #include "intl.h"
  
  #include "obstack.h"		/* We use obstacks in lex.c */
  
*************** Boston, MA 02111-1307, USA.  */
*** 39,47 ****
  
  #include <getopt.h>
  
! extern void fatal_error (const char *s, ...)
       ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
! void warning (const char *s, ...) ATTRIBUTE_PRINTF_1;
  void report (void);
  
  static void usage (void) ATTRIBUTE_NORETURN;
--- 40,48 ----
  
  #include <getopt.h>
  
! extern void fatal_error (const char *msgid, ...)
       ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
! void warning (const char *msgid, ...) ATTRIBUTE_PRINTF_1;
  void report (void);
  
  static void usage (void) ATTRIBUTE_NORETURN;
*************** FILE *finput, *out;
*** 58,63 ****
--- 59,66 ----
  /* Executable name.  */
  char *exec_name;
  
+ struct line_maps line_table;
+ 
  /* Flags matching command line options.  */
  int flag_find_main = 0;
  int flag_dump_class = 0;
*************** static const struct option options[] =
*** 93,120 ****
  static void
  usage (void)
  {
!   fprintf (stderr, "Try `jv-scan --help' for more information.\n");
    exit (1);
  }
  
  static void
  help (void)
  {
!   printf ("Usage: jv-scan [OPTION]... FILE...\n\n");
!   printf ("Print useful information read from Java source files.\n\n");
!   printf ("  --no-assert             Don't recognize the assert keyword\n");
!   printf ("  --complexity            Print cyclomatic complexity of input file\n");
!   printf ("  --encoding NAME         Specify encoding of input file\n");
!   printf ("  --print-main            Print name of class containing `main'\n");
!   printf ("  --list-class            List all classes defined in file\n");
!   printf ("  --list-filename         Print input filename when listing class names\n");
!   printf ("  -o FILE                 Set output file name\n");
    printf ("\n");
!   printf ("  --help                  Print this help, then exit\n");
!   printf ("  --version               Print version number, then exit\n");
    printf ("\n");
!   printf ("For bug reporting instructions, please see:\n");
!   printf ("%s.\n", bug_report_url);
    exit (0);
  }
  
--- 96,123 ----
  static void
  usage (void)
  {
!   fprintf (stderr, _("Try 'jv-scan --help' for more information.\n"));
    exit (1);
  }
  
  static void
  help (void)
  {
!   printf (_("Usage: jv-scan [OPTION]... FILE...\n\n"));
!   printf (_("Print useful information read from Java source files.\n\n"));
!   printf (_("  --no-assert             Don't recognize the assert keyword\n"));
!   printf (_("  --complexity            Print cyclomatic complexity of input file\n"));
!   printf (_("  --encoding NAME         Specify encoding of input file\n"));
!   printf (_("  --print-main            Print name of class containing 'main'\n"));
!   printf (_("  --list-class            List all classes defined in file\n"));
!   printf (_("  --list-filename         Print input filename when listing class names\n"));
!   printf (_("  -o FILE                 Set output file name\n"));
    printf ("\n");
!   printf (_("  --help                  Print this help, then exit\n"));
!   printf (_("  --version               Print version number, then exit\n"));
    printf ("\n");
!   printf (_("For bug reporting instructions, please see:\n"
! 	    "%s.\n"), bug_report_url);
    exit (0);
  }
  
*************** static void
*** 122,130 ****
  version (void)
  {
    printf ("jv-scan (GCC) %s\n\n", version_string);
!   printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n");
!   printf ("This is free software; see the source for copying conditions.  There is NO\n");
!   printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n");
    exit (0);
  }
  
--- 125,133 ----
  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);
  }
  
*************** main (int argc, char **argv)
*** 143,148 ****
--- 146,153 ----
    /* Default for output */
    out = stdout;
  
+   gcc_init_libintl ();
+ 
    /* Process options first.  We use getopt_long and not
       getopt_long_only because we only support `--' long options here.  */
    while ((opt = getopt_long (argc, argv, "o:", options, NULL)) != -1)
*************** main (int argc, char **argv)
*** 182,191 ****
    /* Check on bad usage */
    if (flag_find_main + flag_dump_class + flag_complexity > 1)
      fatal_error
!       ("only one of `--print-main', `--list-class', and `--complexity' allowed");
  
    if (output_file && !(out = fopen (output_file, "w")))
!     fatal_error ("can't open output file `%s'", output_file);
  
    ft = ftell (out);
  
--- 187,196 ----
    /* Check on bad usage */
    if (flag_find_main + flag_dump_class + flag_complexity > 1)
      fatal_error
!       ("only one of '--print-main', '--list-class', and '--complexity' allowed");
  
    if (output_file && !(out = fopen (output_file, "w")))
!     fatal_error ("can't open output file '%s'", output_file);
  
    ft = ftell (out);
  
*************** main (int argc, char **argv)
*** 195,202 ****
    for ( i = optind; i < argc; i++ )
      if (argv [i])
        {
! 	input_filename = argv [i];
! 	if ( (finput = fopen (argv [i], "r")) )
  	  {
  	    /* There's no point in trying to find the current encoding
  	       unless we are going to do something intelligent with it
--- 200,207 ----
    for ( i = optind; i < argc; i++ )
      if (argv [i])
        {
! 	char *filename = argv[i];
! 	if ( (finput = fopen (filename, "r")) )
  	  {
  	    /* There's no point in trying to find the current encoding
  	       unless we are going to do something intelligent with it
*************** main (int argc, char **argv)
*** 209,215 ****
--- 214,222 ----
  	    if (encoding == NULL || *encoding == '\0')
  	      encoding = DEFAULT_ENCODING;
  
+             main_input_filename = filename;
  	    java_init_lex (finput, encoding);
+ 	    ctxp->filename = filename;
  	    yyparse ();
  	    report ();
  	    if (ftell (out) != ft)
*************** main (int argc, char **argv)
*** 219,225 ****
  	    reset_report ();
  	  }
  	else
! 	  fatal_error ("file not found `%s'", argv [i]);
        }
  
    /* Flush and close */
--- 226,232 ----
  	    reset_report ();
  	  }
  	else
! 	  fatal_error ("file not found '%s'", argv [i]);
        }
  
    /* Flush and close */
*************** main (int argc, char **argv)
*** 237,260 ****
     functions */
  
  void
! fatal_error (const char *s, ...)
  {
    va_list ap;
!   va_start (ap, s);
!   fprintf (stderr, "%s: error: ", exec_name);
!   vfprintf (stderr, s, ap);
    fputc ('\n', stderr);
    va_end (ap);
    exit (1);
  }
  
  void
! warning (const char *s, ...)
  {
    va_list ap;
!   va_start (ap, s);
!   fprintf (stderr, "%s: warning: ", exec_name);
!   vfprintf (stderr, s, ap);
    fputc ('\n', stderr);
    va_end (ap);
  }
--- 244,273 ----
     functions */
  
  void
! fatal_error (const char *msgid, ...)
  {
    va_list ap;
!   va_start (ap, msgid);
!   fprintf (stderr, _("%s: error: "), exec_name);
!   vfprintf (stderr, _(msgid), ap);
    fputc ('\n', stderr);
    va_end (ap);
    exit (1);
  }
  
  void
! warning (const char *msgid, ...)
  {
    va_list ap;
!   va_start (ap, msgid);
!   fprintf (stderr, _("%s: warning: "), exec_name);
!   vfprintf (stderr, _(msgid), ap);
    fputc ('\n', stderr);
    va_end (ap);
  }
+ 
+ void
+ fancy_abort (const char *file, int line, const char *func)
+ {
+   fatal_error ("abort in %s, at %s:%d", func, file, line);
+ }
diff -Nrcpad gcc-3.4.3/gcc/java/jvgenmain.c gcc-4.0.0/gcc/java/jvgenmain.c
*** gcc-3.4.3/gcc/java/jvgenmain.c	Sun Apr  6 21:44:09 2003
--- gcc-4.0.0/gcc/java/jvgenmain.c	Tue Feb 10 19:12:34 2004
***************
*** 1,5 ****
  /* Program to generate "main" a Java(TM) class containing a main method.
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
     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
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** The Free Software Foundation is independ
*** 33,38 ****
--- 33,39 ----
  #include "jcf.h"
  #include "tree.h"
  #include "java-tree.h"
+ #include "intl.h"
  
  static char * do_mangle_classname (const char *string);
  
*************** static void usage (const char *) ATTRIBU
*** 44,50 ****
  static void
  usage (const char *name)
  {
!   fprintf (stderr, "Usage: %s [OPTIONS]... CLASSNAMEmain [OUTFILE]\n", name);
    exit (1);
  }
  
--- 45,52 ----
  static void
  usage (const char *name)
  {
!   fprintf (stderr, _("Usage: %s [OPTIONS]... CLASSNAMEmain [OUTFILE]\n"),
! 	   name);
    exit (1);
  }
  
*************** main (int argc, char **argv)
*** 56,61 ****
--- 58,65 ----
    const char *mangled_classname;
    int i, last_arg;
  
+   gcc_init_libintl ();
+ 
    if (argc < 2)
      usage (argv[0]);
  
*************** main (int argc, char **argv)
*** 91,97 ****
        stream = fopen (outfile, "w");
        if (stream == NULL)
  	{
! 	  fprintf (stderr, "%s: Cannot open output file: %s\n",
  		   argv[0], outfile);
  	  exit (1);
  	}
--- 95,101 ----
        stream = fopen (outfile, "w");
        if (stream == NULL)
  	{
! 	  fprintf (stderr, _("%s: Cannot open output file: %s\n"),
  		   argv[0], outfile);
  	  exit (1);
  	}
*************** main (int argc, char **argv)
*** 128,134 ****
    fprintf (stream, "}\n");
    if (stream != stdout && fclose (stream) != 0)
      {
!       fprintf (stderr, "%s: Failed to close output file %s\n",
  	       argv[0], argv[2]);
        exit (1);
      }
--- 132,138 ----
    fprintf (stream, "}\n");
    if (stream != stdout && fclose (stream) != 0)
      {
!       fprintf (stderr, _("%s: Failed to close output file %s\n"),
  	       argv[0], argv[2]);
        exit (1);
      }
diff -Nrcpad gcc-3.4.3/gcc/java/jvspec.c gcc-4.0.0/gcc/java/jvspec.c
*** gcc-3.4.3/gcc/java/jvspec.c	Sun Oct  5 02:52:33 2003
--- gcc-4.0.0/gcc/java/jvspec.c	Thu Nov 25 11:13:38 2004
***************
*** 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
     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
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** static const char jvgenmain_spec[] =
*** 68,74 ****
  		   %<fcompile-resource* %<fassert %<fno-assert \
  		   %<femit-class-file %<femit-class-files %<fencoding*\
  		   %<fuse-boehm-gc %<fhash-synchronization %<fjni\
! 		   %<findirect-dispatch \
  		   %<fno-store-check %<foutput-class-dir\
  		   %<fclasspath* %<fCLASSPATH* %<fbootclasspath*\
  		   %<fextdirs*\
--- 68,74 ----
  		   %<fcompile-resource* %<fassert %<fno-assert \
  		   %<femit-class-file %<femit-class-files %<fencoding*\
  		   %<fuse-boehm-gc %<fhash-synchronization %<fjni\
! 		   %<findirect-dispatch %<fnew-verifier\
  		   %<fno-store-check %<foutput-class-dir\
  		   %<fclasspath* %<fCLASSPATH* %<fbootclasspath*\
  		   %<fextdirs*\
*************** lang_specific_driver (int *in_argc, cons
*** 324,332 ****
  		saw_o = 1;
  	      quote = argv[i];
  	    }
! 	  else if (strcmp(argv[i], "-classpath") == 0
! 		   || strcmp(argv[i], "-bootclasspath") == 0
! 		   || strcmp(argv[i], "-CLASSPATH") == 0)
  	    {
  	      quote = argv[i];
  	      added -= 1;
--- 324,334 ----
  		saw_o = 1;
  	      quote = argv[i];
  	    }
! 	  else if (strcmp (argv[i], "-classpath") == 0
! 		   || strcmp (argv[i], "-bootclasspath") == 0
! 		   || strcmp (argv[i], "-CLASSPATH") == 0
! 		   || strcmp (argv[i], "-encoding") == 0
! 		   || strcmp (argv[i], "-extdirs") == 0)
  	    {
  	      quote = argv[i];
  	      added -= 1;
*************** lang_specific_driver (int *in_argc, cons
*** 412,424 ****
      }
  
    if (quote)
!     fatal ("argument to `%s' missing\n", quote);
  
    if (saw_D && ! main_class_name)
!     fatal ("can't specify `-D' without `--main'\n");
  
    if (main_class_name && ! verify_class_name (main_class_name))
!     fatal ("`%s' is not a valid class name", main_class_name);
  
    num_args = argc + added;
    if (saw_resource)
--- 414,426 ----
      }
  
    if (quote)
!     fatal ("argument to '%s' missing\n", quote);
  
    if (saw_D && ! main_class_name)
!     fatal ("can't specify '-D' without '--main'\n");
  
    if (main_class_name && ! verify_class_name (main_class_name))
!     fatal ("'%s' is not a valid class name", main_class_name);
  
    num_args = argc + added;
    if (saw_resource)
*************** lang_specific_driver (int *in_argc, cons
*** 507,513 ****
  
        if (strcmp (argv[i], "-classpath") == 0
  	  || strcmp (argv[i], "-bootclasspath") == 0
! 	  || strcmp (argv[i], "-CLASSPATH") == 0)
  	{
  	  arglist[j] = concat ("-f", argv[i]+1, "=", argv[i+1], NULL);
  	  i++;
--- 509,517 ----
  
        if (strcmp (argv[i], "-classpath") == 0
  	  || strcmp (argv[i], "-bootclasspath") == 0
! 	  || strcmp (argv[i], "-CLASSPATH") == 0
! 	  || strcmp (argv[i], "-encoding") == 0
! 	  || strcmp (argv[i], "-extdirs") == 0)
  	{
  	  arglist[j] = concat ("-f", argv[i]+1, "=", argv[i+1], NULL);
  	  i++;
*************** lang_specific_driver (int *in_argc, cons
*** 527,533 ****
        if (strncmp (argv[i], "-fmain=", 7) == 0)
  	{
  	  if (! will_link)
! 	    fatal ("cannot specify `main' class when not linking");
  	  --j;
  	  continue;
  	}
--- 531,537 ----
        if (strncmp (argv[i], "-fmain=", 7) == 0)
  	{
  	  if (! will_link)
! 	    fatal ("cannot specify 'main' class when not linking");
  	  --j;
  	  continue;
  	}
diff -Nrcpad gcc-3.4.3/gcc/java/lang-specs.h gcc-4.0.0/gcc/java/lang-specs.h
*** gcc-3.4.3/gcc/java/lang-specs.h	Sat Jun 14 22:25:50 2003
--- gcc-4.0.0/gcc/java/lang-specs.h	Fri Oct 15 14:55:00 2004
***************
*** 1,5 ****
  /* Definitions for specs for the GNU compiler for the Java(TM) language.
!    Copyright (C) 1996, 1998, 1999, 2000, 2001, 2003
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,5 ----
  /* Definitions for specs for the GNU compiler for the Java(TM) language.
!    Copyright (C) 1996, 1998, 1999, 2000, 2001, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** The Free Software Foundation is independ
*** 26,35 ****
  /* This is the contribution to the `default_compilers' array in gcc.c for
     Java.  */
  
!   {".java",   "@java" , 0},
!   {".class",  "@java" , 0},
!   {".zip",    "@java" , 0},
!   {".jar",    "@java" , 0},
    {"@java",
     "%{fjni:%{femit-class-files:%e-fjni and -femit-class-files are incompatible}}\
      %{fjni:%{femit-class-file:%e-fjni and -femit-class-file are incompatible}}\
--- 26,35 ----
  /* This is the contribution to the `default_compilers' array in gcc.c for
     Java.  */
  
!   {".java",   "@java" , 0, 0, 0},
!   {".class",  "@java" , 0, 0, 0},
!   {".zip",    "@java" , 0, 0, 0},
!   {".jar",    "@java" , 0, 0, 0},
    {"@java",
     "%{fjni:%{femit-class-files:%e-fjni and -femit-class-files are incompatible}}\
      %{fjni:%{femit-class-file:%e-fjni and -femit-class-file are incompatible}}\
*************** The Free Software Foundation is independ
*** 37,41 ****
      %{femit-class-files:%{!fsyntax-only:%e-femit-class-file should used along with -fsyntax-only}}\
      %{!E:jc1 %i %(jc1) %(cc1_options) %{+e*} %{I*}\
               %{MD:-MD_} %{MMD:-MMD_} %{M} %{MM} %{MA} %{MT*} %{MF*}\
!              %{!fsyntax-only:%(invoke_as)}}", 0},
  
--- 37,41 ----
      %{femit-class-files:%{!fsyntax-only:%e-femit-class-file should used along with -fsyntax-only}}\
      %{!E:jc1 %i %(jc1) %(cc1_options) %{+e*} %{I*}\
               %{MD:-MD_} %{MMD:-MMD_} %{M} %{MM} %{MA} %{MT*} %{MF*}\
!              %{!fsyntax-only:%(invoke_as)}}", 0, 0, 0},
  
diff -Nrcpad gcc-3.4.3/gcc/java/lang.c gcc-4.0.0/gcc/java/lang.c
*** gcc-3.4.3/gcc/java/lang.c	Tue Jan 13 23:14:04 2004
--- gcc-4.0.0/gcc/java/lang.c	Fri Dec  3 19:43:51 2004
*************** GNU General Public License for more deta
*** 17,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.
--- 17,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.
*************** static void put_decl_string (const char 
*** 58,74 ****
  static void put_decl_node (tree);
  static void java_print_error_function (diagnostic_context *, const char *);
  static tree java_tree_inlining_walk_subtrees (tree *, int *, walk_tree_fn,
! 					      void *, void *);
! static int java_unsafe_for_reeval (tree);
  static int merge_init_test_initialization (void * *, void *);
  static int inline_init_test_initialization (void * *, void *);
  static bool java_can_use_bit_fields_p (void);
  static bool java_dump_tree (void *, tree);
  static void dump_compound_expr (dump_info_p, tree);
  static bool java_decl_ok_for_sibcall (tree);
- static int java_estimate_num_insns (tree);
- static int java_start_inlining (tree);
  static tree java_get_callee_fndecl (tree);
  
  #ifndef TARGET_OBJECT_SUFFIX
  # define TARGET_OBJECT_SUFFIX ".o"
--- 58,72 ----
  static void put_decl_node (tree);
  static void java_print_error_function (diagnostic_context *, const char *);
  static tree java_tree_inlining_walk_subtrees (tree *, int *, walk_tree_fn,
! 					      void *, struct pointer_set_t *);
  static int merge_init_test_initialization (void * *, void *);
  static int inline_init_test_initialization (void * *, void *);
  static bool java_can_use_bit_fields_p (void);
  static bool java_dump_tree (void *, tree);
  static void dump_compound_expr (dump_info_p, tree);
  static bool java_decl_ok_for_sibcall (tree);
  static tree java_get_callee_fndecl (tree);
+ static void java_clear_binding_stack (void);
  
  #ifndef TARGET_OBJECT_SUFFIX
  # define TARGET_OBJECT_SUFFIX ".o"
*************** static tree java_get_callee_fndecl (tree
*** 80,88 ****
  
  #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
  
! const char tree_code_type[] = {
  #include "tree.def"
!   'x',
  #include "java-tree.def"
  };
  #undef DEFTREECODE
--- 78,86 ----
  
  #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
  
! const enum tree_code_class tree_code_type[] = {
  #include "tree.def"
!   tcc_exceptional,
  #include "java-tree.def"
  };
  #undef DEFTREECODE
*************** int compiling_from_source;
*** 119,130 ****
  
  const char *resource_name;
  
- int flag_emit_class_files = 0;
- 
- /* Nonzero if input file is a file with a list of filenames to compile. */
- 
- int flag_filelist_file = 0;
- 
  /* When nonzero, we emit xref strings. Values of the flag for xref
     backends are defined in xref_flag_table, xref.c.  */
  
--- 117,122 ----
*************** int flag_emit_xref = 0;
*** 133,195 ****
  /* When nonzero, -Wall was turned on.  */
  int flag_wall = 0;
  
- /* When nonzero, check for redundant modifier uses.  */
- int flag_redundant = 0;
- 
- /* When nonzero, call a library routine to do integer divisions. */
- int flag_use_divide_subroutine = 1;
- 
- /* When nonzero, generate code for the Boehm GC.  */
- int flag_use_boehm_gc = 0;
- 
- /* When nonzero, assume the runtime uses a hash table to map an
-    object to its synchronization structure.  */
- int flag_hash_synchronization;
- 
- /* When nonzero, permit the use of the assert keyword.  */
- int flag_assert = 1;
- 
- /* When nonzero, assume all native functions are implemented with
-    JNI, not CNI.  */
- int flag_jni = 0;
- 
- /* When nonzero, warn when source file is newer than matching class
-    file.  */
- int flag_newer = 1;
- 
- /* When nonzero, generate checks for references to NULL.  */
- int flag_check_references = 0;
- 
  /* The encoding of the source file.  */
  const char *current_encoding = NULL;
  
- /* When nonzero, report the now deprecated empty statements.  */
- int flag_extraneous_semicolon;
- 
  /* When nonzero, report use of deprecated classes, methods, or fields.  */
  int flag_deprecated = 1;
  
- /* When nonzero, always check for a non gcj generated classes archive.  */
- int flag_force_classes_archive_check;
- 
  /* When zero, don't optimize static class initialization. This flag shouldn't
     be tested alone, use STATIC_CLASS_INITIALIZATION_OPTIMIZATION_P instead.  */
! int flag_optimize_sci = 1;
  
! /* When nonzero, use offset tables for virtual method calls
!    in order to improve binary compatibility. */
! int flag_indirect_dispatch = 0;
  
! /* When zero, don't generate runtime array store checks. */
! int flag_store_check = 1;
  
  /* When nonzero, print extra version information.  */
  static int v_flag = 0;
  
- /* Set nonzero if the user specified -finline-functions on the command
-    line.  */
- int flag_really_inline = 0;
- 
  JCF *current_jcf;
  
  /* Variable controlling how dependency tracking is enabled in
--- 125,150 ----
  /* When nonzero, -Wall was turned on.  */
  int flag_wall = 0;
  
  /* The encoding of the source file.  */
  const char *current_encoding = NULL;
  
  /* When nonzero, report use of deprecated classes, methods, or fields.  */
  int flag_deprecated = 1;
  
  /* When zero, don't optimize static class initialization. This flag shouldn't
     be tested alone, use STATIC_CLASS_INITIALIZATION_OPTIMIZATION_P instead.  */
! /* FIXME: Make this work with gimplify.  */
! /* int flag_optimize_sci = 0;  */
  
! /* 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;
  
  JCF *current_jcf;
  
  /* Variable controlling how dependency tracking is enabled in
*************** struct language_function GTY(())
*** 221,232 ****
  #define LANG_HOOKS_POST_OPTIONS java_post_options
  #undef LANG_HOOKS_PARSE_FILE
  #define LANG_HOOKS_PARSE_FILE java_parse_file
- #undef LANG_HOOKS_UNSAFE_FOR_REEVAL
- #define LANG_HOOKS_UNSAFE_FOR_REEVAL java_unsafe_for_reeval
  #undef LANG_HOOKS_MARK_ADDRESSABLE
  #define LANG_HOOKS_MARK_ADDRESSABLE java_mark_addressable
- #undef LANG_HOOKS_EXPAND_EXPR
- #define LANG_HOOKS_EXPAND_EXPR java_expand_expr
  #undef LANG_HOOKS_TRUTHVALUE_CONVERSION
  #define LANG_HOOKS_TRUTHVALUE_CONVERSION java_truthvalue_conversion
  #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL
--- 176,183 ----
*************** struct language_function GTY(())
*** 249,266 ****
  #undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
  #define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE java_signed_or_unsigned_type
  
- #undef LANG_HOOKS_TREE_INLINING_WALK_SUBTREES
- #define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES java_tree_inlining_walk_subtrees
- 
- #undef LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS
- #define LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS java_estimate_num_insns
- 
- #undef LANG_HOOKS_TREE_INLINING_START_INLINING
- #define LANG_HOOKS_TREE_INLINING_START_INLINING java_start_inlining
- 
  #undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN
  #define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN java_dump_tree
  
  #undef LANG_HOOKS_DECL_OK_FOR_SIBCALL
  #define LANG_HOOKS_DECL_OK_FOR_SIBCALL java_decl_ok_for_sibcall
  
--- 200,214 ----
  #undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
  #define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE java_signed_or_unsigned_type
  
  #undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN
  #define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN java_dump_tree
  
+ #undef LANG_HOOKS_GIMPLIFY_EXPR
+ #define LANG_HOOKS_GIMPLIFY_EXPR java_gimplify_expr
+ 
+ #undef LANG_HOOKS_TREE_INLINING_WALK_SUBTREES
+ #define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES java_tree_inlining_walk_subtrees
+ 
  #undef LANG_HOOKS_DECL_OK_FOR_SIBCALL
  #define LANG_HOOKS_DECL_OK_FOR_SIBCALL java_decl_ok_for_sibcall
  
*************** struct language_function GTY(())
*** 270,275 ****
--- 218,226 ----
  #undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION
  #define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION java_expand_body
  
+ #undef LANG_HOOKS_CLEAR_BINDING_STACK
+ #define LANG_HOOKS_CLEAR_BINDING_STACK java_clear_binding_stack
+ 
  /* Each front end provides its own.  */
  const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
  
*************** java_handle_option (size_t scode, const 
*** 284,292 ****
  
    switch (code)
      {
-     default:
-       abort();
- 
      case OPT_I:
        jcf_path_include_arg (arg);
        break;
--- 235,240 ----
*************** java_handle_option (size_t scode, const 
*** 334,357 ****
        set_Wunused (value);
        break;
  
!     case OPT_Wdeprecated:
!       flag_deprecated = value;
!       break;
! 
!     case OPT_Wextraneous_semicolon:
!       flag_extraneous_semicolon = value;
        break;
  
!     case OPT_Wout_of_date:
!       flag_newer = value;
        break;
  
!     case OPT_Wredundant_modifiers:
!       flag_redundant = value;
        break;
  
!     case OPT_fassert:
!       flag_assert = value;
        break;
  
      case OPT_fassume_compiled_:
--- 282,301 ----
        set_Wunused (value);
        break;
  
!     case OPT_fenable_assertions_:
!       add_enable_assert (arg, value);
        break;
  
!     case OPT_fenable_assertions:
!       add_enable_assert ("", value);
        break;
  
!     case OPT_fdisable_assertions_:
!       add_enable_assert (arg, !value);
        break;
  
!     case OPT_fdisable_assertions:
!       add_enable_assert ("", !value);
        break;
  
      case OPT_fassume_compiled_:
*************** java_handle_option (size_t scode, const 
*** 366,375 ****
        jcf_path_bootclasspath_arg (arg);
        break;
  
-     case OPT_fcheck_references:
-       flag_check_references = value;
-       break;
- 
      case OPT_fclasspath_:
      case OPT_fCLASSPATH_:
        jcf_path_classpath_arg (arg);
--- 310,315 ----
*************** java_handle_option (size_t scode, const 
*** 384,394 ****
  	return 0;
        break;
  
-     case OPT_femit_class_file:
-     case OPT_femit_class_files:
-       flag_emit_class_files = value;
-       break;
- 
      case OPT_fencoding_:
        current_encoding = arg;
        break;
--- 324,329 ----
*************** java_handle_option (size_t scode, const 
*** 397,450 ****
        jcf_path_extdirs_arg (arg);
        break;
  
-     case OPT_ffilelist_file:
-       flag_filelist_file = value;
-       break;
- 
-     case OPT_fforce_classes_archive_check:
-       flag_force_classes_archive_check = value;
-       break;
- 
-     case OPT_fhash_synchronization:
-       flag_hash_synchronization = value;
-       break;
- 
-     case OPT_findirect_dispatch:
-       flag_indirect_dispatch = value;
-       break;
- 
-     case OPT_finline_functions:
-       flag_inline_functions = value;
-       flag_really_inline = value;
-       break;
- 
-     case OPT_fjni:
-       flag_jni = value;
-       break;
- 
-     case OPT_foptimize_static_class_initialization:
-       flag_optimize_sci = value;
-       break;
- 
      case OPT_foutput_class_dir_:
        jcf_write_base_directory = arg;
        break;
  
-     case OPT_fstore_check:
-       flag_store_check = value;
-       break;
- 
-     case OPT_fuse_boehm_gc:
-       flag_use_boehm_gc = value;
-       break;
- 
-     case OPT_fuse_divide_subroutine:
-       flag_use_divide_subroutine = value;
-       break;
- 
      case OPT_version:
        v_flag = 1;
        break;
      }
  
    return 1;
--- 332,349 ----
        jcf_path_extdirs_arg (arg);
        break;
  
      case OPT_foutput_class_dir_:
        jcf_write_base_directory = arg;
        break;
  
      case OPT_version:
        v_flag = 1;
        break;
+       
+     default:
+       if (cl_options[code].flags & CL_Java)
+ 	break;
+       abort();
      }
  
    return 1;
*************** java_init (void)
*** 461,469 ****
    flag_minimal_debug = 0;
  #endif
  
-   if (flag_inline_functions)
-     flag_inline_trees = 1;
- 
    /* FIXME: Indirect dispatch isn't yet compatible with static class
       init optimization.  */
    if (flag_indirect_dispatch)
--- 360,365 ----
*************** put_decl_node (tree node)
*** 536,543 ****
        node = TREE_TYPE (node);
        was_pointer = 1;
      }
!   if (TREE_CODE_CLASS (TREE_CODE (node)) == 'd'
!       && DECL_NAME (node) != NULL_TREE)
      {
        if (TREE_CODE (node) == FUNCTION_DECL)
  	{
--- 432,438 ----
        node = TREE_TYPE (node);
        was_pointer = 1;
      }
!   if (DECL_P (node) && DECL_NAME (node) != NULL_TREE)
      {
        if (TREE_CODE (node) == FUNCTION_DECL)
  	{
*************** put_decl_node (tree node)
*** 570,577 ****
        else
  	put_decl_node (DECL_NAME (node));
      }
!   else if (TREE_CODE_CLASS (TREE_CODE (node)) == 't'
!       && TYPE_NAME (node) != NULL_TREE)
      {
        if (TREE_CODE (node) == RECORD_TYPE && TYPE_ARRAY_P (node))
  	{
--- 465,471 ----
        else
  	put_decl_node (DECL_NAME (node));
      }
!   else if (TYPE_P (node) && TYPE_NAME (node) != NULL_TREE)
      {
        if (TREE_CODE (node) == RECORD_TYPE && TYPE_ARRAY_P (node))
  	{
*************** put_decl_node (tree node)
*** 603,626 ****
     which is also called directly by java_print_error_function. */
  
  const char *
! lang_printable_name (tree decl, int v  __attribute__ ((__unused__)))
  {
    decl_bufpos = 0;
!   put_decl_node (decl);
!   put_decl_string ("", 1);
!   return decl_buf;
! }
! 
! /* Does the same thing that lang_printable_name, but add a leading
!    space to the DECL name string -- With Leading Space.  */
! 
! const char *
! lang_printable_name_wls (tree decl, int v  __attribute__ ((__unused__)))
! {
!   decl_bufpos = 1;
!   put_decl_node (decl);
    put_decl_string ("", 1);
-   decl_buf [0] = ' ';
    return decl_buf;
  }
  
--- 497,510 ----
     which is also called directly by java_print_error_function. */
  
  const char *
! lang_printable_name (tree decl, int v)
  {
    decl_bufpos = 0;
!   if (v == 0 && TREE_CODE (decl) == FUNCTION_DECL)
!     put_decl_node (DECL_NAME (decl));
!   else
!     put_decl_node (decl);
    put_decl_string ("", 1);
    return decl_buf;
  }
  
*************** java_print_error_function (diagnostic_co
*** 644,650 ****
  	fprintf (stderr, "%s: ", file);
  
        last_error_function_context = DECL_CONTEXT (current_function_decl);
!       fprintf (stderr, "In class `%s':\n",
  	       lang_printable_name (last_error_function_context, 0));
      }
    if (last_error_function != current_function_decl)
--- 528,534 ----
  	fprintf (stderr, "%s: ", file);
  
        last_error_function_context = DECL_CONTEXT (current_function_decl);
!       fprintf (stderr, "In class '%s':\n",
  	       lang_printable_name (last_error_function_context, 0));
      }
    if (last_error_function != current_function_decl)
*************** java_print_error_function (diagnostic_co
*** 657,664 ****
        else
  	{
  	  const char *name = lang_printable_name (current_function_decl, 2);
! 	  fprintf (stderr, "In %s `%s':\n",
! 		   (DECL_CONSTRUCTOR_P (current_function_decl) ? "constructor" 
  		    : "method"),
  		   name);
  	}
--- 541,548 ----
        else
  	{
  	  const char *name = lang_printable_name (current_function_decl, 2);
! 	  fprintf (stderr, "In %s '%s':\n",
! 		   (DECL_CONSTRUCTOR_P (current_function_decl) ? "constructor"
  		    : "method"),
  		   name);
  	}
*************** java_print_error_function (diagnostic_co
*** 675,681 ****
     2, function prototypes are fully resolved and can be printed when
     reporting errors.  */
  
! void lang_init_source (int level)
  {
    inhibit_error_function_printing = (level == 1);
  }
--- 559,566 ----
     2, function prototypes are fully resolved and can be printed when
     reporting errors.  */
  
! void
! lang_init_source (int level)
  {
    inhibit_error_function_printing = (level == 1);
  }
*************** java_post_options (const char **pfilenam
*** 716,732 ****
  {
    const char *filename = *pfilename;
  
!  /* Use tree inlining if possible.  Function instrumentation is only
!      done in the RTL level, so we disable tree inlining.  */
!   if (! flag_instrument_function_entry_exit)
      {
!       if (!flag_no_inline)
! 	flag_no_inline = 1;
!       if (flag_inline_functions)
! 	{
! 	  flag_inline_trees = 2;
! 	  flag_inline_functions = 0;
! 	}
      }
  
    /* Open input file.  */
--- 601,621 ----
  {
    const char *filename = *pfilename;
  
!   /* Use tree inlining.  */
!   if (!flag_no_inline)
!     flag_no_inline = 1;
!   if (flag_inline_functions)
!     flag_inline_trees = 2;
! 
!   /* An absolute requirement: if we're not using indirect dispatch, we
!      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.  */
*************** java_post_options (const char **pfilenam
*** 789,794 ****
--- 678,687 ----
  	    }
  	}
      }
+ #ifdef USE_MAPPED_LOCATION
+   linemap_add (&line_table, LC_ENTER, false, filename, 0);
+   linemap_add (&line_table, LC_RENAME, false, "<built-in>", 0);
+ #endif
  
    /* Initialize the compiler back end.  */
    return false;
*************** java_tree_inlining_walk_subtrees (tree *
*** 823,829 ****
  				  int *subtrees ATTRIBUTE_UNUSED,
  				  walk_tree_fn func ATTRIBUTE_UNUSED,
  				  void *data ATTRIBUTE_UNUSED,
! 				  void *htab ATTRIBUTE_UNUSED)
  {
    enum tree_code code;
    tree result;
--- 716,722 ----
  				  int *subtrees ATTRIBUTE_UNUSED,
  				  walk_tree_fn func ATTRIBUTE_UNUSED,
  				  void *data ATTRIBUTE_UNUSED,
! 				  struct pointer_set_t *pset ATTRIBUTE_UNUSED)
  {
    enum tree_code code;
    tree result;
*************** java_tree_inlining_walk_subtrees (tree *
*** 831,837 ****
  #define WALK_SUBTREE(NODE)				\
    do							\
      {							\
!       result = walk_tree (&(NODE), func, data, htab);	\
        if (result)					\
  	return result;					\
      }							\
--- 724,730 ----
  #define WALK_SUBTREE(NODE)				\
    do							\
      {							\
!       result = walk_tree (&(NODE), func, data, pset);	\
        if (result)					\
  	return result;					\
      }							\
*************** java_tree_inlining_walk_subtrees (tree *
*** 848,892 ****
        WALK_SUBTREE (BLOCK_EXPR_BODY (t));
        return NULL_TREE;
  
!     default:
        return NULL_TREE;
-     }
- 
-   #undef WALK_SUBTREE
- }
- 
- /* Called from unsafe_for_reeval.  */
- static int
- java_unsafe_for_reeval (tree t)
- {
-   switch (TREE_CODE (t))
-     {
-     case BLOCK:
-       /* Our expander tries to expand the variables twice.  Boom.  */
-       if (BLOCK_EXPR_DECLS (t) != NULL)
- 	return 2;
-       return unsafe_for_reeval (BLOCK_EXPR_BODY (t));
  
      default:
!       break;
      }
  
!   return -1;
  }
  
  /* Every call to a static constructor has an associated boolean
     variable which is in the outermost scope of the calling method.
     This variable is used to avoid multiple calls to the static
!    constructor for each class.  
  
     It looks something like this:
  
     foo ()
     {
        boolean dummy = OtherClass.is_initialized;
!   
       ...
!   
       if (! dummy)
         OtherClass.initialize();
  
--- 741,770 ----
        WALK_SUBTREE (BLOCK_EXPR_BODY (t));
        return NULL_TREE;
  
!     case EXIT_BLOCK_EXPR:
!       *subtrees = 0;
        return NULL_TREE;
  
      default:
!       return NULL_TREE;
      }
  
!   #undef WALK_SUBTREE
  }
  
  /* Every call to a static constructor has an associated boolean
     variable which is in the outermost scope of the calling method.
     This variable is used to avoid multiple calls to the static
!    constructor for each class.
  
     It looks something like this:
  
     foo ()
     {
        boolean dummy = OtherClass.is_initialized;
! 
       ...
! 
       if (! dummy)
         OtherClass.initialize();
  
*************** merge_init_test_initialization (void **e
*** 909,915 ****
    splay_tree decl_map = (splay_tree)x;
    splay_tree_node n;
    tree *init_test_decl;
!   
    /* See if we have remapped this declaration.  If we haven't there's
       a bug in the inliner.  */
    n = splay_tree_lookup (decl_map, (splay_tree_key) ite->value);
--- 787,793 ----
    splay_tree decl_map = (splay_tree)x;
    splay_tree_node n;
    tree *init_test_decl;
! 
    /* See if we have remapped this declaration.  If we haven't there's
       a bug in the inliner.  */
    n = splay_tree_lookup (decl_map, (splay_tree_key) ite->value);
*************** merge_init_test_initialization (void **e
*** 924,941 ****
    if (!*init_test_decl)
      *init_test_decl = (tree)n->value;
  
!   /* This fixes a weird case.  
  
    The front end assumes that once we have called a method that
    initializes some class, we can assume the class is initialized.  It
    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 initalization has already been done,
    because the DECL_INITIAL of the init_test_decl is set.
!   
    To fix this we remove the DECL_INITIAL (in the caller scope) of all
    the init_test_decls corresponding to classes initialized by the
    inlined method.  This makes the caller no longer assume that the
--- 802,819 ----
    if (!*init_test_decl)
      *init_test_decl = (tree)n->value;
  
!   /* This fixes a weird case.
  
    The front end assumes that once we have called a method that
    initializes some class, we can assume the class is initialized.  It
    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.
! 
    To fix this we remove the DECL_INITIAL (in the caller scope) of all
    the init_test_decls corresponding to classes initialized by the
    inlined method.  This makes the caller no longer assume that the
*************** merge_init_test_initialization (void **e
*** 951,957 ****
  void
  java_inlining_merge_static_initializers (tree fn, void *decl_map)
  {
!   htab_traverse 
      (DECL_FUNCTION_INIT_TEST_TABLE (fn),
       merge_init_test_initialization, decl_map);
  }
--- 829,835 ----
  void
  java_inlining_merge_static_initializers (tree fn, void *decl_map)
  {
!   htab_traverse
      (DECL_FUNCTION_INIT_TEST_TABLE (fn),
       merge_init_test_initialization, decl_map);
  }
*************** inline_init_test_initialization (void **
*** 967,974 ****
  {
    struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
    splay_tree decl_map = (splay_tree)x;
!   
!   tree h = java_treetreehash_find 
      (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), ite->key);
    if (! h)
      return true;
--- 845,852 ----
  {
    struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
    splay_tree decl_map = (splay_tree)x;
! 
!   tree h = java_treetreehash_find
      (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), ite->key);
    if (! h)
      return true;
*************** inline_init_test_initialization (void **
*** 986,992 ****
  void
  java_inlining_map_static_initializers (tree fn, void *decl_map)
  {
!   htab_traverse 
      (DECL_FUNCTION_INIT_TEST_TABLE (fn),
       inline_init_test_initialization, decl_map);
  }
--- 864,870 ----
  void
  java_inlining_map_static_initializers (tree fn, void *decl_map)
  {
!   htab_traverse
      (DECL_FUNCTION_INIT_TEST_TABLE (fn),
       inline_init_test_initialization, decl_map);
  }
*************** dump_compound_expr (dump_info_p di, tree
*** 1018,1024 ****
  	}
      }
  }
!   
  static bool
  java_dump_tree (void *dump_info, tree t)
  {
--- 896,902 ----
  	}
      }
  }
! 
  static bool
  java_dump_tree (void *dump_info, tree t)
  {
*************** java_dump_tree (void *dump_info, tree t)
*** 1057,1069 ****
        return true;
  
      case LABELED_BLOCK_EXPR:
!       dump_child ("label", TREE_OPERAND (t, 0));
!       dump_child ("block", TREE_OPERAND (t, 1));
        return true;
  
      case EXIT_BLOCK_EXPR:
!       dump_child ("block", TREE_OPERAND (t, 0));
!       dump_child ("val", TREE_OPERAND (t, 1));
        return true;
  
      case BLOCK:
--- 935,946 ----
        return true;
  
      case LABELED_BLOCK_EXPR:
!       dump_child ("label", LABELED_BLOCK_LABEL (t));
!       dump_child ("block", LABELED_BLOCK_BODY (t));
        return true;
  
      case EXIT_BLOCK_EXPR:
!       dump_child ("block", EXIT_BLOCK_LABELED_BLOCK (t));
        return true;
  
      case BLOCK:
*************** java_dump_tree (void *dump_info, tree t)
*** 1076,1082 ****
  	      dump_child ("var", local);
  	      local = next;
  	    }
! 	  
  	  {
  	    tree block = BLOCK_EXPR_BODY (t);
  	    dump_child ("body", block);
--- 953,959 ----
  	      dump_child ("var", local);
  	      local = next;
  	    }
! 
  	  {
  	    tree block = BLOCK_EXPR_BODY (t);
  	    dump_child ("body", block);
*************** java_dump_tree (void *dump_info, tree t)
*** 1084,1090 ****
  	  }
  	}
        return true;
!       
      case COMPOUND_EXPR:
        if (!dump_flag (di, TDF_SLIM, t))
  	return false;
--- 961,967 ----
  	  }
  	}
        return true;
! 
      case COMPOUND_EXPR:
        if (!dump_flag (di, TDF_SLIM, t))
  	return false;
*************** java_decl_ok_for_sibcall (tree decl)
*** 1108,1229 ****
    return decl != NULL && DECL_CONTEXT (decl) == output_class;
  }
  
- /* Used by estimate_num_insns.  Estimate number of instructions seen
-    by given statement.  */
- static tree
- java_estimate_num_insns_1 (tree *tp, int *walk_subtrees, void *data)
- {
-   int *count = data;
-   tree x = *tp;
- 
-   if (TYPE_P (x) || DECL_P (x))
-     {
-       *walk_subtrees = 0;
-       return NULL;
-     }
-   /* Assume that constants and references counts nothing.  These should
-      be majorized by amount of operations among them we count later
-      and are common target of CSE and similar optimizations.  */
-   if (TREE_CODE_CLASS (TREE_CODE (x)) == 'c'
-       || TREE_CODE_CLASS (TREE_CODE (x)) == 'r')
-     return NULL;
-   switch (TREE_CODE (x))
-     { 
-     /* Recognize assignments of large structures and constructors of
-        big arrays.  */
-     case MODIFY_EXPR:
-     case CONSTRUCTOR:
-       {
- 	HOST_WIDE_INT size;
- 
- 	size = int_size_in_bytes (TREE_TYPE (x));
- 
- 	if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO)
- 	  *count += 10;
- 	else
- 	  *count += ((size + MOVE_MAX_PIECES - 1) / MOVE_MAX_PIECES);
-       }
-       break;
-     /* Few special cases of expensive operations.  This is usefull
-        to avoid inlining on functions having too many of these.  */
-     case TRUNC_DIV_EXPR:
-     case CEIL_DIV_EXPR:
-     case FLOOR_DIV_EXPR:
-     case ROUND_DIV_EXPR:
-     case TRUNC_MOD_EXPR:
-     case CEIL_MOD_EXPR:
-     case FLOOR_MOD_EXPR:
-     case ROUND_MOD_EXPR:
-     case RDIV_EXPR:
-     case CALL_EXPR:
- 
-     case NEW_ARRAY_EXPR:
-     case NEW_ANONYMOUS_ARRAY_EXPR:
-     case NEW_CLASS_EXPR:
-       *count += 10;
-       break;
-     /* Various containers that will produce no code themselves.  */
-     case INIT_EXPR:
-     case TARGET_EXPR:
-     case BIND_EXPR:
-     case BLOCK:
-     case TREE_LIST:
-     case TREE_VEC:
-     case IDENTIFIER_NODE:
-     case PLACEHOLDER_EXPR:
-     case WITH_CLEANUP_EXPR:
-     case CLEANUP_POINT_EXPR:
-     case NOP_EXPR:
-     case VIEW_CONVERT_EXPR:
-     case SAVE_EXPR:
-     case UNSAVE_EXPR:
-     case COMPLEX_EXPR:
-     case REALPART_EXPR:
-     case IMAGPART_EXPR:
-     case TRY_CATCH_EXPR:
-     case TRY_FINALLY_EXPR:
-     case LABEL_EXPR:
-     case EXIT_EXPR:
-     case LABELED_BLOCK_EXPR:
-     case EXIT_BLOCK_EXPR:
-     case EXPR_WITH_FILE_LOCATION:
-     case UNARY_PLUS_EXPR:
-     case THIS_EXPR:
-     case DEFAULT_EXPR:
-     case TRY_EXPR:
- 
-       break;
-     case CLASS_LITERAL:
-       *walk_subtrees = 0;
-       break;
-     default:
-       (*count)++;
-     }
-   return NULL;
- }
- 
- /*  Estimate number of instructions that will be created by expanding the body.  */
- static int
- java_estimate_num_insns (tree decl)
- {
-   int num = 0;
-   walk_tree_without_duplicates (&DECL_SAVED_TREE (decl),
- 				java_estimate_num_insns_1, &num);
-   return num;
- }
- 
- /* Start inlining fn.  Called by the tree inliner via
-    lang_hooks.tree_inlining.cannot_inline_tree_fn.  */
- 
- static int
- java_start_inlining (tree fn)
- {
-   /* A java function's body doesn't have a BLOCK structure suitable
-      for debug output until it is expanded.  Prevent inlining functions
-      that are not yet expanded.  */
-   return TREE_ASM_WRITTEN (fn) ? 1 : 0;
- }
- 
  /* Given a call_expr, try to figure out what its target might be.  In
     the case of an indirection via the atable, search for the decl.  If
     the decl is external, we return NULL.  If we don't, the optimizer
--- 985,990 ----
*************** java_get_callee_fndecl (tree call_expr)
*** 1236,1241 ****
--- 997,1006 ----
  
    HOST_WIDE_INT index;
  
+   /* FIXME: This is disabled because we end up passing calls through
+      the PLT, and we do NOT want to do that.  */
+   return NULL;
+ 
    if (TREE_CODE (call_expr) != CALL_EXPR)
      return NULL;
    method = TREE_OPERAND (call_expr, 0);
*************** java_get_callee_fndecl (tree call_expr)
*** 1244,1256 ****
      return NULL;
    table = TREE_OPERAND (method, 0);
    if (! DECL_LANG_SPECIFIC(table)
!       || !DECL_OWNER (table) 
        || TYPE_ATABLE_DECL (DECL_OWNER (table)) != table)
      return NULL;
  
    atable_methods = TYPE_ATABLE_METHODS (DECL_OWNER (table));
    index = TREE_INT_CST_LOW (TREE_OPERAND (method, 1));
!   
    /* FIXME: Replace this for loop with a hash table lookup.  */
    for (element = atable_methods; element; element = TREE_CHAIN (element))
      {
--- 1009,1021 ----
      return NULL;
    table = TREE_OPERAND (method, 0);
    if (! DECL_LANG_SPECIFIC(table)
!       || !DECL_OWNER (table)
        || TYPE_ATABLE_DECL (DECL_OWNER (table)) != table)
      return NULL;
  
    atable_methods = TYPE_ATABLE_METHODS (DECL_OWNER (table));
    index = TREE_INT_CST_LOW (TREE_OPERAND (method, 1));
! 
    /* FIXME: Replace this for loop with a hash table lookup.  */
    for (element = atable_methods; element; element = TREE_CHAIN (element))
      {
*************** java_get_callee_fndecl (tree call_expr)
*** 1269,1272 ****
--- 1034,1046 ----
    return NULL;
  }
  
+ 
+ /* Clear the binding stack.  */
+ static void
+ java_clear_binding_stack (void)
+ {
+   while (!global_bindings_p ())
+     poplevel (0, 0, 0);
+ }
+ 
  #include "gt-java-lang.h"
diff -Nrcpad gcc-3.4.3/gcc/java/lang.opt gcc-4.0.0/gcc/java/lang.opt
*** gcc-3.4.3/gcc/java/lang.opt	Sat Jul 19 08:13:58 2003
--- gcc-4.0.0/gcc/java/lang.opt	Fri Dec  3 19:43:52 2004
*************** Java
*** 62,80 ****
  ; Documented for C
  
  Wdeprecated
! Java
! Warn if deprecated class, method, or field is used
  
  Wextraneous-semicolon
! Java
  Warn if deprecated empty statements are found
  
  Wout-of-date
! Java
  Warn if .class files are out of date
  
  Wredundant-modifiers
! Java
  Warn if modifiers are specified when not necessary
  
  fCLASSPATH=
--- 62,80 ----
  ; Documented for C
  
  Wdeprecated
! Java Var(warn_deprecated) VarExists
! Warn if a deprecated compiler feature, class, method, or field is used
  
  Wextraneous-semicolon
! Java Var(flag_extraneous_semicolon)
  Warn if deprecated empty statements are found
  
  Wout-of-date
! Java Var(flag_newer) Init(1)
  Warn if .class files are out of date
  
  Wredundant-modifiers
! Java Var(flag_redundant)
  Warn if modifiers are specified when not necessary
  
  fCLASSPATH=
*************** Java JoinedOrMissing RejectNegative
*** 82,88 ****
  --CLASSPATH	Deprecated; use --classpath instead
  
  fassert
! Java
  
  fassume-compiled
  Java
--- 82,89 ----
  --CLASSPATH	Deprecated; use --classpath instead
  
  fassert
! Java Var(flag_assert) Init(1)
! Permit the use of the assert keyword
  
  fassume-compiled
  Java
*************** Java
*** 90,101 ****
  fassume-compiled=
  Java JoinedOrMissing
  
  fbootclasspath=
  Java JoinedOrMissing RejectNegative
  --bootclasspath=<path>	Replace system path
  
  fcheck-references
! Java
  
  fclasspath=
  Java JoinedOrMissing RejectNegative
--- 91,115 ----
  fassume-compiled=
  Java JoinedOrMissing
  
+ fenable-assertions
+ Java
+ 
+ fenable-assertions=
+ Java JoinedOrMissing
+ 
+ fdisable-assertions
+ Java
+ 
+ fdisable-assertions=
+ Java JoinedOrMissing
+ 
  fbootclasspath=
  Java JoinedOrMissing RejectNegative
  --bootclasspath=<path>	Replace system path
  
  fcheck-references
! Java Var(flag_check_references)
! Generate checks for references to NULL
  
  fclasspath=
  Java JoinedOrMissing RejectNegative
*************** Java JoinedOrMissing RejectNegative
*** 104,117 ****
  fcompile-resource=
  Java Joined RejectNegative
  
- fdump-
- Java Joined RejectNegative
- 
  femit-class-file
! Java
  
  femit-class-files
! Java
  
  fencoding=
  Java Joined RejectNegative
--- 118,130 ----
  fcompile-resource=
  Java Joined RejectNegative
  
  femit-class-file
! Java Var(flag_emit_class_files) VarExists
! Output a class file
  
  femit-class-files
! Java Var(flag_emit_class_files)
! Alias for -femit-class-file
  
  fencoding=
  Java Joined RejectNegative
*************** Java Joined RejectNegative
*** 119,164 ****
  
  fextdirs=
  Java Joined RejectNegative
  
  ffilelist-file
! Java
  
  fforce-classes-archive-check
! Java
  Always check for non gcj generated classes archives
  
  fhash-synchronization
! Java
  
  findirect-dispatch
! Java
  Use offset tables for virtual method calls
  
  finline-functions
  Java
  
  fjni
! Java
  Assume native functions are implemented using JNI
  
  foptimize-static-class-initialization
! Java
  Enable optimization of static class initialization code
  
  foutput-class-dir=
  Java Joined RejectNegative
  
  fstore-check
! Java
  Enable assignability checks for stores into object arrays
  
  fuse-boehm-gc
! Java
  
  fuse-divide-subroutine
! Java
  
  version
  Java
- 
- ; This comment is to ensure we retain the blank line above.
--- 132,180 ----
  
  fextdirs=
  Java Joined RejectNegative
+ --extdirs=<path>	Set the extension directory path
  
  ffilelist-file
! Java Var(flag_filelist_file)
! Input file is a file with a list of filenames to compile
  
  fforce-classes-archive-check
! Java Var(flag_force_classes_archive_check)
  Always check for non gcj generated classes archives
  
  fhash-synchronization
! Java Var(flag_hash_synchronization)
! Assume the runtime uses a hash table to map an object to its synchronization structure
  
  findirect-dispatch
! Java Var(flag_indirect_dispatch)
  Use offset tables for virtual method calls
  
  finline-functions
  Java
  
  fjni
! Java Var(flag_jni)
  Assume native functions are implemented using JNI
  
  foptimize-static-class-initialization
! Java Var(flag_optimize_sci)
  Enable optimization of static class initialization code
  
  foutput-class-dir=
  Java Joined RejectNegative
  
  fstore-check
! Java Var(flag_store_check) Init(1)
  Enable assignability checks for stores into object arrays
  
  fuse-boehm-gc
! Java Var(flag_use_boehm_gc)
! Generate code for the Boehm GC
  
  fuse-divide-subroutine
! Java Var(flag_use_divide_subroutine) Init(1)
! Call a library routine to do integer divisions
  
  version
  Java
diff -Nrcpad gcc-3.4.3/gcc/java/lex.c gcc-4.0.0/gcc/java/lex.c
*** gcc-3.4.3/gcc/java/lex.c	Wed Oct 22 18:00:06 2003
--- gcc-4.0.0/gcc/java/lex.c	Sat Feb 12 15:21:14 2005
***************
*** 1,5 ****
  /* Language lexer for the GNU compiler for the Java(TM) language.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
--- 1,5 ----
  /* Language lexer 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)
  
*************** The Free Software Foundation is independ
*** 43,49 ****
  #endif
  
  /* Function declarations.  */
! static char *java_sprint_unicode (struct java_line *, int);
  static void java_unicode_2_utf8 (unicode_t);
  static void java_lex_error (const char *, int);
  #ifndef JC1_LITE
--- 43,49 ----
  #endif
  
  /* Function declarations.  */
! static char *java_sprint_unicode (int);
  static void java_unicode_2_utf8 (unicode_t);
  static void java_lex_error (const char *, int);
  #ifndef JC1_LITE
*************** static int java_lex (YYSTYPE *);
*** 52,72 ****
  static int java_is_eol (FILE *, int);
  static tree build_wfl_node (tree);
  #endif
- static void java_store_unicode (struct java_line *, unicode_t, int);
  static int java_parse_escape_sequence (void);
  static int java_start_char_p (unicode_t);
  static int java_part_char_p (unicode_t);
  static int java_space_char_p (unicode_t);
  static void java_parse_doc_section (int);
  static void java_parse_end_comment (int);
  static int java_get_unicode (void);
  static int java_read_unicode (java_lexer *, int *);
- static int java_read_unicode_collapsing_terminators (java_lexer *, int *);
- static void java_store_unicode (struct java_line *, unicode_t, int);
- static int java_read_char (java_lexer *);
- static void java_allocate_new_line (void);
- static void java_unget_unicode (void);
- static unicode_t java_sneak_unicode (void);
  #ifndef JC1_LITE
  static int utf8_cmp (const unsigned char *, int, const char *);
  #endif
--- 52,68 ----
  static int java_is_eol (FILE *, int);
  static tree build_wfl_node (tree);
  #endif
  static int java_parse_escape_sequence (void);
  static int java_start_char_p (unicode_t);
  static int java_part_char_p (unicode_t);
  static int java_space_char_p (unicode_t);
  static void java_parse_doc_section (int);
  static void java_parse_end_comment (int);
+ static int java_read_char (java_lexer *);
  static int java_get_unicode (void);
+ static int java_peek_unicode (void);
+ static void java_next_unicode (void);
  static int java_read_unicode (java_lexer *, int *);
  #ifndef JC1_LITE
  static int utf8_cmp (const unsigned char *, int, const char *);
  #endif
*************** java_init_lex (FILE *finput, const char 
*** 102,109 ****
  
    if (!java_lang_imported)
      {
!       tree node = build_tree_list 
! 	(build_expr_wfl (java_lang_id, NULL, 0, 0), NULL_TREE);
        read_import_dir (TREE_PURPOSE (node));
        TREE_CHAIN (node) = ctxp->import_demand_list;
        ctxp->import_demand_list = node;
--- 98,105 ----
  
    if (!java_lang_imported)
      {
!       tree node = build_tree_list (build_unknown_wfl (java_lang_id),
! 				   NULL_TREE);
        read_import_dir (TREE_PURPOSE (node));
        TREE_CHAIN (node) = ctxp->import_demand_list;
        ctxp->import_demand_list = node;
*************** java_init_lex (FILE *finput, const char 
*** 111,221 ****
      }
  
    if (!wfl_operator)
!     wfl_operator = build_expr_wfl (NULL_TREE, ctxp->filename, 0, 0);
    if (!label_id)
      label_id = get_identifier ("$L");
    if (!wfl_append) 
!     wfl_append = build_expr_wfl (get_identifier ("append"), NULL, 0, 0);
    if (!wfl_string_buffer)
      wfl_string_buffer = 
!       build_expr_wfl (get_identifier (flag_emit_class_files
  				      ? "java.lang.StringBuffer"
! 				      : "gnu.gcj.runtime.StringBuffer"),
! 		      NULL, 0, 0);
    if (!wfl_to_string)
!     wfl_to_string = build_expr_wfl (get_identifier ("toString"), NULL, 0, 0);
  
    CPC_INITIALIZER_LIST (ctxp) = CPC_STATIC_INITIALIZER_LIST (ctxp) =
      CPC_INSTANCE_INITIALIZER_LIST (ctxp) = NULL_TREE;
  
    memset (ctxp->modifier_ctx, 0, sizeof (ctxp->modifier_ctx));
-   current_jcf = ggc_alloc_cleared (sizeof (JCF));
    ctxp->current_parsed_class = NULL;
    ctxp->package = NULL_TREE;
  #endif
  
!   ctxp->filename = input_filename;
!   ctxp->lineno = input_line = 0;
!   ctxp->p_line = NULL;
!   ctxp->c_line = NULL;
    ctxp->java_error_flag = 0;
    ctxp->lexer = java_new_lexer (finput, encoding);
  }
  
  static char *
! java_sprint_unicode (struct java_line *line, int i)
  {
    static char buffer [10];
!   if (line->unicode_escape_p [i] || line->line [i] > 128)
!     sprintf (buffer, "\\u%04x", line->line [i]);
    else
      {
!       buffer [0] = line->line [i];
        buffer [1] = '\0';
      }
    return buffer;
  }
  
- static unicode_t
- java_sneak_unicode (void)
- {
-   return (ctxp->c_line->line [ctxp->c_line->current]);
- }
- 
- static void
- java_unget_unicode (void)
- {
-   if (!ctxp->c_line->current)
-     /* Can't unget unicode.  */
-     abort ();
- 
-   ctxp->c_line->current--;
-   ctxp->c_line->char_col -= JAVA_COLUMN_DELTA (0);
- }
- 
- static void
- java_allocate_new_line (void)
- {
-   unicode_t ahead = (ctxp->c_line ? ctxp->c_line->ahead[0] : '\0');
-   char ahead_escape_p = (ctxp->c_line ? 
- 			 ctxp->c_line->unicode_escape_ahead_p : 0);
- 
-   if (ctxp->c_line && !ctxp->c_line->white_space_only)
-     {
-       if (ctxp->p_line)
- 	{
- 	  free (ctxp->p_line->unicode_escape_p);
- 	  free (ctxp->p_line->line);
- 	  free (ctxp->p_line);
- 	}
-       ctxp->p_line = ctxp->c_line;
-       ctxp->c_line = NULL;		/* Reallocated.  */
-     }
- 
-   if (!ctxp->c_line)
-     {
-       ctxp->c_line = xmalloc (sizeof (struct java_line));
-       ctxp->c_line->max = JAVA_LINE_MAX;
-       ctxp->c_line->line = xmalloc (sizeof (unicode_t)*ctxp->c_line->max);
-       ctxp->c_line->unicode_escape_p = 
- 	xmalloc (sizeof (char)*ctxp->c_line->max);
-       ctxp->c_line->white_space_only = 0;
-     }
- 
-   ctxp->c_line->line [0] = ctxp->c_line->size = 0;
-   ctxp->c_line->char_col = ctxp->c_line->current = 0;
-   if (ahead)
-     {
-       ctxp->c_line->line [ctxp->c_line->size] = ahead;
-       ctxp->c_line->unicode_escape_p [ctxp->c_line->size] = ahead_escape_p;
-       ctxp->c_line->size++;
-     }
-   ctxp->c_line->ahead [0] = 0;
-   ctxp->c_line->unicode_escape_ahead_p = 0;
-   ctxp->c_line->lineno = ++input_line;
-   ctxp->c_line->white_space_only = 1;
- }
- 
  /* Create a new lexer object.  */
  
  java_lexer *
--- 107,162 ----
      }
  
    if (!wfl_operator)
!     {
! #ifndef JC1_LITE
! #ifdef USE_MAPPED_LOCATION
!       wfl_operator = build_expr_wfl (NULL_TREE, input_location);
! #else
!       wfl_operator = build_expr_wfl (NULL_TREE, ctxp->filename, 0, 0);
! #endif
! #endif
!     }
    if (!label_id)
      label_id = get_identifier ("$L");
    if (!wfl_append) 
!     wfl_append = build_unknown_wfl (get_identifier ("append"));
    if (!wfl_string_buffer)
      wfl_string_buffer = 
!       build_unknown_wfl (get_identifier (flag_emit_class_files
  				      ? "java.lang.StringBuffer"
! 					 : "gnu.gcj.runtime.StringBuffer"));
    if (!wfl_to_string)
!     wfl_to_string = build_unknown_wfl (get_identifier ("toString"));
  
    CPC_INITIALIZER_LIST (ctxp) = CPC_STATIC_INITIALIZER_LIST (ctxp) =
      CPC_INSTANCE_INITIALIZER_LIST (ctxp) = NULL_TREE;
  
    memset (ctxp->modifier_ctx, 0, sizeof (ctxp->modifier_ctx));
    ctxp->current_parsed_class = NULL;
    ctxp->package = NULL_TREE;
  #endif
  
! #ifndef JC1_LITE
!   ctxp->save_location = input_location;
! #endif
    ctxp->java_error_flag = 0;
    ctxp->lexer = java_new_lexer (finput, encoding);
  }
  
  static char *
! java_sprint_unicode (int c)
  {
    static char buffer [10];
!   if (c < ' ' || c >= 127)
!     sprintf (buffer, "\\u%04x", c);
    else
      {
!       buffer [0] = c;
        buffer [1] = '\0';
      }
    return buffer;
  }
  
  /* Create a new lexer object.  */
  
  java_lexer *
*************** java_new_lexer (FILE *finput, const char
*** 227,233 ****
    lex->finput = finput;
    lex->bs_count = 0;
    lex->unget_value = 0;
!   lex->hit_eof = 0;
  
  #ifdef HAVE_ICONV
    lex->handle = iconv_open ("UCS-2", encoding);
--- 168,187 ----
    lex->finput = finput;
    lex->bs_count = 0;
    lex->unget_value = 0;
!   lex->next_unicode = 0;
!   lex->avail_unicode = 0;
!   lex->next_columns = 1;
!   lex->encoding = encoding;
!   lex->position.line = 1;
!   lex->position.col = 1;
! #ifndef JC1_LITE
! #ifdef USE_MAPPED_LOCATION
!       input_location
! 	= linemap_line_start (&line_table, 1, 120);
! #else
!       input_line = 1;
! #endif
! #endif
  
  #ifdef HAVE_ICONV
    lex->handle = iconv_open ("UCS-2", encoding);
*************** java_new_lexer (FILE *finput, const char
*** 263,269 ****
  	      in[1] = 0xbb;
  	      in[2] = 0xbf;
  
! 	      inp = in;
  	      inc = 3;
  	      outp = (char *) &result;
  	      outc = 2;
--- 217,223 ----
  	      in[1] = 0xbb;
  	      in[2] = 0xbf;
  
! 	      inp = (char *) in;
  	      inc = 3;
  	      outp = (char *) &result;
  	      outc = 2;
*************** java_new_lexer (FILE *finput, const char
*** 295,306 ****
  	enc_error = 1;
  #ifdef HAVE_ICONV
        else
! 	lex->use_fallback = 1;
  #endif /* HAVE_ICONV */
      }
  
    if (enc_error)
!     fatal_error ("unknown encoding: `%s'\nThis might mean that your locale's encoding is not supported\nby your system's iconv(3) implementation.  If you aren't trying\nto use a particular encoding for your input file, try the\n`--encoding=UTF-8' option", encoding);
  
    return lex;
  }
--- 249,263 ----
  	enc_error = 1;
  #ifdef HAVE_ICONV
        else
!         {
! 	  lex->use_fallback = 1;
! 	  lex->encoding = "UTF-8";
! 	}
  #endif /* HAVE_ICONV */
      }
  
    if (enc_error)
!     fatal_error ("unknown encoding: %qs\nThis might mean that your locale's encoding is not supported\nby your system's iconv(3) implementation.  If you aren't trying\nto use a particular encoding for your input file, try the\n%<--encoding=UTF-8%> option", encoding);
  
    return lex;
  }
*************** java_destroy_lexer (java_lexer *lex)
*** 318,330 ****
  static int
  java_read_char (java_lexer *lex)
  {
-   if (lex->unget_value)
-     {
-       unicode_t r = lex->unget_value;
-       lex->unget_value = 0;
-       return r;
-     }
- 
  #ifdef HAVE_ICONV
    if (! lex->use_fallback)
      {
--- 275,280 ----
*************** java_read_char (java_lexer *lex)
*** 373,379 ****
  	      in_save = inbytesleft;
  	      out_save = out_count;
  	      inp = &lex->buffer[lex->first];
! 	      outp = &lex->out_buffer[lex->out_last];
  	      ir = iconv (lex->handle, (ICONV_CONST char **) &inp,
  			  &inbytesleft, &outp, &out_count);
  
--- 323,329 ----
  	      in_save = inbytesleft;
  	      out_save = out_count;
  	      inp = &lex->buffer[lex->first];
! 	      outp = (char *) &lex->out_buffer[lex->out_last];
  	      ir = iconv (lex->handle, (ICONV_CONST char **) &inp,
  			  &inbytesleft, &outp, &out_count);
  
*************** java_read_char (java_lexer *lex)
*** 430,437 ****
  		  else
  		    {
  		      /* A more serious error.  */
! 		      java_lex_error ("unrecognized character in input stream",
! 				      0);
  		      return UEOF;
  		    }
  		}
--- 380,390 ----
  		  else
  		    {
  		      /* A more serious error.  */
! 		      char buffer[128];
! 		      sprintf (buffer,
! 			       "Unrecognized character for encoding '%s'", 
! 		               lex->encoding);
! 		      java_lex_error (buffer, 0);
  		      return UEOF;
  		    }
  		}
*************** java_read_char (java_lexer *lex)
*** 506,531 ****
    return UEOF;
  }
  
- static void
- java_store_unicode (struct java_line *l, unicode_t c, int unicode_escape_p)
- {
-   if (l->size == l->max)
-     {
-       l->max += JAVA_LINE_MAX;
-       l->line = xrealloc (l->line, sizeof (unicode_t)*l->max);
-       l->unicode_escape_p = xrealloc (l->unicode_escape_p, 
- 				      sizeof (char)*l->max);
-     }
-   l->line [l->size] = c;
-   l->unicode_escape_p [l->size++] = unicode_escape_p;
- }
- 
  static int
  java_read_unicode (java_lexer *lex, int *unicode_escape_p)
  {
    int c;
  
!   c = java_read_char (lex);
    *unicode_escape_p = 0;
  
    if (c != '\\')
--- 459,477 ----
    return UEOF;
  }
  
  static int
  java_read_unicode (java_lexer *lex, int *unicode_escape_p)
  {
    int c;
  
!   if (lex->unget_value)
!     {
!       c = lex->unget_value;
!       lex->unget_value = 0;
!     }
!   else
!     c = java_read_char (lex);
! 
    *unicode_escape_p = 0;
  
    if (c != '\\')
*************** java_read_unicode (java_lexer *lex, int 
*** 582,652 ****
    return (unicode_t) '\\';
  }
  
  static int
! java_read_unicode_collapsing_terminators (java_lexer *lex,
! 					  int *unicode_escape_p)
  {
!   int c = java_read_unicode (lex, unicode_escape_p);
  
!   if (c == '\r')
      {
!       /* We have to read ahead to see if we got \r\n.  In that case we
! 	 return a single line terminator.  */
        int dummy;
!       c = java_read_unicode (lex, &dummy);
!       if (c != '\n' && c != UEOF)
! 	lex->unget_value = c;
        /* In either case we must return a newline.  */
!       c = '\n';
      }
  
!   return c;
! }
  
! static int
! java_get_unicode (void)
! {
!   /* It's time to read a line when...  */
!   if (!ctxp->c_line || ctxp->c_line->current == ctxp->c_line->size)
      {
!       int c;
!       int found_chars = 0;
  
!       if (ctxp->lexer->hit_eof)
! 	return UEOF;
  
!       java_allocate_new_line ();
!       if (ctxp->c_line->line[0] != '\n')
! 	{
! 	  for (;;)
! 	    {
! 	      int unicode_escape_p;
! 	      c = java_read_unicode_collapsing_terminators (ctxp->lexer,
! 							    &unicode_escape_p);
! 	      if (c != UEOF)
! 		{
! 		  found_chars = 1;
! 		  java_store_unicode (ctxp->c_line, c, unicode_escape_p);
! 		  if (ctxp->c_line->white_space_only 
! 		      && !JAVA_WHITE_SPACE_P (c)
! 		      && c != '\n')
! 		    ctxp->c_line->white_space_only = 0;
! 		}
! 	      if ((c == '\n') || (c == UEOF))
! 		break;
! 	    }
  
! 	  if (c == UEOF && ! found_chars)
! 	    {
! 	      ctxp->lexer->hit_eof = 1;
! 	      return UEOF;
! 	    }
! 	}
      }
!   ctxp->c_line->char_col += JAVA_COLUMN_DELTA (0);
!   JAVA_LEX_CHAR (ctxp->c_line->line [ctxp->c_line->current]);
!   return ctxp->c_line->line [ctxp->c_line->current++];
  }
  
  /* Parse the end of a C style comment.
   * C is the first character following the '/' and '*'.  */
--- 528,638 ----
    return (unicode_t) '\\';
  }
  
+ /* Get the next Unicode character (post-Unicode-escape-handling).
+    Move the current position to just after returned character. */
+ 
  static int
! java_get_unicode (void)
  {
!   int next = java_peek_unicode ();
!   java_next_unicode ();
!   return next;
! }
  
! /* Return the next Unicode character (post-Unicode-escape-handling).
!    Do not move the current position, which remains just before
!    the returned character. */
! 
! static int
! java_peek_unicode (void)
! {
!   int unicode_escape_p;
!   java_lexer *lex = ctxp->lexer;
!   int next;
! 
!   if (lex->avail_unicode)
!     return lex->next_unicode;
! 
!   next = java_read_unicode (lex, &unicode_escape_p);
! 
!   if (next == '\r')
      {
!       /* We have to read ahead to see if we got \r\n.
! 	 In that case we return a single line terminator.  */
        int dummy;
!       next = java_read_unicode (lex, &dummy);
!       if (next != '\n' && next != UEOF)
! 	lex->unget_value = next;
        /* In either case we must return a newline.  */
!       next = '\n';
      }
  
!   lex->next_unicode = next;
!   lex->avail_unicode = 1;
  
!   if (next == UEOF)
      {
!       lex->next_columns = 0;
!       return next;
!     }
  
!   if (next == '\n')
!     {
!       lex->next_columns = 1 - lex->position.col;
!     }
!   else if (next == '\t')
!     {
!       int cur_col = lex->position.col;
!       lex->next_columns = ((cur_col + 7) & ~7) + 1 - cur_col;
!       
!     }
!   else
!     {
!       lex->next_columns = 1;
!     }
!   if (unicode_escape_p)
!     lex->next_columns = 6;
!   return next;
! }
  
! /* Move forward one Unicode character (post-Unicode-escape-handling).
!    Only allowed after java_peek_unicode.  The combination java_peek_unicode
!    followed by java_next_unicode is equivalent to java_get_unicode.  */
  
! static void java_next_unicode (void)
! {
!   struct java_lexer *lex = ctxp->lexer;
!   lex->position.col += lex->next_columns;
!   if (lex->next_unicode == '\n')
!     {
!       lex->position.line++; 
! #ifndef JC1_LITE
! #ifdef USE_MAPPED_LOCATION
!       input_location
! 	= linemap_line_start (&line_table, lex->position.line, 120);
! #else
!       input_line = lex->position.line;
! #endif
! #endif
      }
!   lex->avail_unicode = 0;
! }
! 
! #if 0
! /* The inverse of java_next_unicode.
!    Not currently used, but could be if it would be cleaner or faster.
!    java_peek_unicode == java_get_unicode + java_unget_unicode.
!    java_get_unicode == java_peek_unicode + java_next_unicode.
! */
! static void java_unget_unicode ()
! {
!   struct java_lexer *lex = ctxp->lexer;
!   if (lex->avail_unicode)
!     fatal_error ("internal error - bad unget");
!   lex->avail_unicode = 1;
!   lex->position.col -= lex->next_columns;
  }
+ #endif
  
  /* Parse the end of a C style comment.
   * C is the first character following the '/' and '*'.  */
*************** java_parse_end_comment (int c)
*** 661,675 ****
  	  java_lex_error ("Comment not terminated at end of input", 0);
  	  return;
  	case '*':
! 	  switch (c = java_get_unicode ())
  	    {
  	    case UEOF:
  	      java_lex_error ("Comment not terminated at end of input", 0);
  	      return;
  	    case '/':
  	      return;
  	    case '*':	/* Reparse only '*'.  */
! 	      java_unget_unicode ();
  	    }
  	}
      }
--- 647,662 ----
  	  java_lex_error ("Comment not terminated at end of input", 0);
  	  return;
  	case '*':
! 	  switch (c = java_peek_unicode ())
  	    {
  	    case UEOF:
  	      java_lex_error ("Comment not terminated at end of input", 0);
  	      return;
  	    case '/':
+ 	      java_next_unicode ();
  	      return;
  	    case '*':	/* Reparse only '*'.  */
! 	      ;
  	    }
  	}
      }
*************** java_space_char_p (unicode_t c)
*** 825,831 ****
  static int
  java_parse_escape_sequence (void)
  {
-   unicode_t char_lit;
    int c;
  
    switch (c = java_get_unicode ())
--- 812,817 ----
*************** java_parse_escape_sequence (void)
*** 849,881 ****
      case '0': case '1': case '2': case '3': case '4':
      case '5': case '6': case '7':
        {
! 	int octal_escape[3];
! 	int octal_escape_index = 0;
! 	int max = 3;
! 	int i, shift;
  
! 	for (; octal_escape_index < max && RANGE (c, '0', '7');
! 	     c = java_get_unicode ())
  	  {
! 	    if (octal_escape_index == 0 && c > '3')
! 	      {
! 		/* According to the grammar, `\477' has a well-defined
! 		   meaning -- it is `\47' followed by `7'.  */
! 		--max;
! 	      }
! 	    octal_escape [octal_escape_index++] = c;
  	  }
- 
- 	java_unget_unicode ();
- 
- 	for (char_lit=0, i = 0, shift = 3*(octal_escape_index-1);
- 	     i < octal_escape_index; i++, shift -= 3)
- 	  char_lit |= (octal_escape [i] - '0') << shift;
  
  	return char_lit;
        }
      default:
!       java_lex_error ("Invalid character in escape sequence", 0);
        return JAVA_CHAR_ERROR;
      }
  }
--- 835,865 ----
      case '0': case '1': case '2': case '3': case '4':
      case '5': case '6': case '7':
        {
! 	int more = 3;
! 	unicode_t char_lit = 0;
  
! 	if (c > '3')
  	  {
! 	    /* According to the grammar, `\477' has a well-defined
! 	       meaning -- it is `\47' followed by `7'.  */
! 	    --more;
! 	  }
! 	char_lit = 0;
! 	for (;;)
! 	  {
! 	    char_lit = 8 * char_lit + c - '0';
! 	    if (--more == 0)
! 	      break;
! 	    c = java_peek_unicode ();
! 	    if (! RANGE (c, '0', '7'))
! 	      break;
! 	    java_next_unicode ();
  	  }
  
  	return char_lit;
        }
      default:
!       java_lex_error ("Invalid character in escape sequence", -1);
        return JAVA_CHAR_ERROR;
      }
  }
*************** java_perform_atof (YYSTYPE *java_lval, c
*** 925,938 ****
  	}
        if (! really_zero)
  	{
! 	  int i = ctxp->c_line->current;
! 	  ctxp->c_line->current = number_beginning;
  	  java_lex_error ("Floating point literal underflow", 0);
! 	  ctxp->c_line->current = i;
  	}
      }
  
!   SET_LVAL_NODE_TYPE (build_real (type, value), type);
  }
  #endif
  
--- 909,922 ----
  	}
        if (! really_zero)
  	{
! 	  int save_col = ctxp->lexer->position.col;
! 	  ctxp->lexer->position.col = number_beginning;
  	  java_lex_error ("Floating point literal underflow", 0);
! 	  ctxp->lexer->position.col = save_col;
  	}
      }
  
!   SET_LVAL_NODE (build_real (type, value));
  }
  #endif
  
*************** do_java_lex (YYSTYPE *java_lval)
*** 946,1034 ****
  #endif
  {
    int c;
-   unicode_t first_unicode;
-   int ascii_index, all_ascii;
    char *string;
  
    /* Translation of the Unicode escape in the raw stream of Unicode
       characters. Takes care of line terminator.  */
   step1:
    /* Skip white spaces: SP, TAB and FF or ULT.  */ 
!   for (c = java_get_unicode ();
!        c == '\n' || JAVA_WHITE_SPACE_P (c); c = java_get_unicode ())
!     if (c == '\n')
!       {
! 	ctxp->elc.line = ctxp->c_line->lineno;
! 	ctxp->elc.col  = ctxp->c_line->char_col-2;
!       }
! 
!   ctxp->elc.col = (ctxp->elc.col < 0 ? 0 : ctxp->elc.col);
! 
!   if (c == 0x1a)		/* CTRL-Z.  */
      {
!       if ((c = java_get_unicode ()) == UEOF)
! 	return 0;		/* Ok here.  */
!       else
! 	java_unget_unicode ();	/* Caught later, at the end of the
!                                    function.  */
      }
    /* Handle EOF here.  */
    if (c == UEOF)	/* Should probably do something here...  */
      return 0;
  
!   /* Take care of eventual comments.  */
!   if (c == '/')
!     {
!       switch (c = java_get_unicode ())
! 	{
! 	case '/':
! 	  for (;;)
! 	    {
! 	      c = java_get_unicode ();
! 	      if (c == UEOF)
! 		{
! 		  /* It is ok to end a `//' comment with EOF, unless
! 		     we're being pedantic.  */
! 		  if (pedantic)
! 		    java_lex_error ("Comment not terminated at end of input",
! 				    0);
! 		  return 0;
! 		}
! 	      if (c == '\n')	/* ULT */
! 		goto step1;
! 	    }
! 	  break;
! 
! 	case '*':
! 	  if ((c = java_get_unicode ()) == '*')
! 	    {
! 	      c = java_get_unicode ();
! 	      if (c == '/')
! 		{
! 		  /* Empty documentation comment.  We have to reset
! 		     the deprecation marker as only the most recent
! 		     doc comment applies.  */
! 		  ctxp->deprecated = 0;
! 		}
! 	      else
! 		java_parse_doc_section (c);
! 	    }
! 	  else
! 	    java_parse_end_comment ((c = java_get_unicode ()));
! 	  goto step1;
! 	  break;
! 	default:
! 	  java_unget_unicode ();
! 	  c = '/';
! 	  break;
! 	}
!     }
! 
!   ctxp->elc.line = ctxp->c_line->lineno;
!   ctxp->elc.prev_col = ctxp->elc.col;
!   ctxp->elc.col = ctxp->c_line->char_col - JAVA_COLUMN_DELTA (-1);
!   if (ctxp->elc.col < 0)
!     abort ();
  
    /* Numeric literals.  */
    if (JAVA_ASCII_DIGIT (c) || (c == '.'))
--- 930,961 ----
  #endif
  {
    int c;
    char *string;
  
    /* Translation of the Unicode escape in the raw stream of Unicode
       characters. Takes care of line terminator.  */
   step1:
    /* Skip white spaces: SP, TAB and FF or ULT.  */ 
!   for (;;)
      {
!       c = java_peek_unicode ();
!       if (c != '\n' && ! JAVA_WHITE_SPACE_P (c))
! 	break;
!       java_next_unicode ();
      }
+ 
    /* Handle EOF here.  */
    if (c == UEOF)	/* Should probably do something here...  */
      return 0;
  
! #ifndef JC1_LITE
! #ifdef USE_MAPPED_LOCATION
!   LINEMAP_POSITION_FOR_COLUMN (input_location, &line_table,
! 			       ctxp->lexer->position.col);
! #else
!   ctxp->lexer->token_start = ctxp->lexer->position;
! #endif
! #endif
  
    /* Numeric literals.  */
    if (JAVA_ASCII_DIGIT (c) || (c == '.'))
*************** do_java_lex (YYSTYPE *java_lval)
*** 1040,1101 ****
        /* 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 = 0;
        int  i;
  #ifndef JC1_LITE
!       int  number_beginning = ctxp->c_line->current;
        tree value;
  #endif
!       
!       /* We might have a . separator instead of a FP like .[0-9]*.  */
!       if (c == '.')
! 	{
! 	  unicode_t peep = java_sneak_unicode ();
! 
! 	  if (!JAVA_ASCII_DIGIT (peep))
! 	    {
! 	      JAVA_LEX_SEP('.');
! 	      BUILD_OPERATOR (DOT_TK);
! 	    }
! 	}
! 
        for (i = 0; i < TOTAL_PARTS; i++)
  	parts [i] = 0;
  
        if (c == '0')
  	{
! 	  c = java_get_unicode ();
  	  if (c == 'x' || c == 'X')
  	    {
  	      radix = 16;
! 	      c = java_get_unicode ();
  	    }
  	  else if (JAVA_ASCII_DIGIT (c))
! 	    radix = 8;
  	  else if (c == '.' || c == 'e' || c =='E')
  	    {
! 	      /* Push the '.', 'e', or 'E' back and prepare for a FP
! 		 parsing...  */
! 	      java_unget_unicode ();
! 	      c = '0';
  	    }
  	  else
  	    {
  	      /* We have a zero literal: 0, 0{l,L}, 0{f,F}, 0{d,D}.  */
- 	      JAVA_LEX_LIT ("0", 10);
                switch (c)
  		{		
  		case 'L': case 'l':
  		  SET_LVAL_NODE (long_zero_node);
  		  return (INT_LIT_TK);
  		case 'f': case 'F':
  		  SET_LVAL_NODE (float_zero_node);
  		  return (FP_LIT_TK);
  		case 'd': case 'D':
  		  SET_LVAL_NODE (double_zero_node);
  		  return (FP_LIT_TK);
  		default:
- 		  java_unget_unicode ();
  		  SET_LVAL_NODE (integer_zero_node);
  		  return (INT_LIT_TK);
  		}
--- 967,1020 ----
        /* 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;
  #ifndef JC1_LITE
!       int  number_beginning = ctxp->lexer->position.col;
        tree value;
  #endif
!      
        for (i = 0; i < TOTAL_PARTS; i++)
  	parts [i] = 0;
  
        if (c == '0')
  	{
! 	  java_next_unicode ();
! 	  c = java_peek_unicode ();
  	  if (c == 'x' || c == 'X')
  	    {
  	      radix = 16;
! 	      java_next_unicode ();
! 	      c = java_peek_unicode ();
  	    }
  	  else if (JAVA_ASCII_DIGIT (c))
! 	    {
! 	      literal_token [literal_index++] = '0';
! 	      radix = 8;
! 	    }
  	  else if (c == '.' || c == 'e' || c =='E')
  	    {
! 	      literal_token [literal_index++] = '0';
! 	      /* Handle C during floating-point parsing.  */
  	    }
  	  else
  	    {
  	      /* We have a zero literal: 0, 0{l,L}, 0{f,F}, 0{d,D}.  */
                switch (c)
  		{		
  		case 'L': case 'l':
+ 		  java_next_unicode ();
  		  SET_LVAL_NODE (long_zero_node);
  		  return (INT_LIT_TK);
  		case 'f': case 'F':
+ 		  java_next_unicode ();
  		  SET_LVAL_NODE (float_zero_node);
  		  return (FP_LIT_TK);
  		case 'd': case 'D':
+ 		  java_next_unicode ();
  		  SET_LVAL_NODE (double_zero_node);
  		  return (FP_LIT_TK);
  		default:
  		  SET_LVAL_NODE (integer_zero_node);
  		  return (INT_LIT_TK);
  		}
*************** do_java_lex (YYSTYPE *java_lval)
*** 1103,1110 ****
  	}
        /* 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,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.  */
*************** do_java_lex (YYSTYPE *java_lval)
*** 1115,1122 ****
  	  if (radix == 16)
  	    found_hex_digits = 1;
            /* Remember when we find an invalid octal digit.  */
!           else if (radix == 8 && !JAVA_ASCII_OCTDIGIT (c))
!             found_non_octal_digits = 1;
  
  	  literal_token [literal_index++] = c;
  	  /* This section of code if borrowed from gcc/c-lex.c.  */
--- 1033,1040 ----
  	  if (radix == 16)
  	    found_hex_digits = 1;
            /* Remember when we find an invalid octal digit.  */
!           else if (radix == 8 && numeric >= 8 && found_non_octal_digits < 0)
! 	    found_non_octal_digits = literal_index;
  
  	  literal_token [literal_index++] = c;
  	  /* This section of code if borrowed from gcc/c-lex.c.  */
*************** do_java_lex (YYSTYPE *java_lval)
*** 1134,1146 ****
  	  if (parts [TOTAL_PARTS-1] != 0)
  	    overflow = 1;
  	  /* End borrowed section.  */
! 	  c = java_get_unicode ();
  	}
  
        /* If we have something from the FP char set but not a digit, parse
  	 a FP literal.  */
        if (JAVA_ASCII_FPCHAR (c) && !JAVA_ASCII_DIGIT (c))
  	{
  	  int stage = 0;
  	  int seen_digit = (literal_index ? 1 : 0);
  	  int seen_exponent = 0;
--- 1052,1071 ----
  	  if (parts [TOTAL_PARTS-1] != 0)
  	    overflow = 1;
  	  /* End borrowed section.  */
! 	  java_next_unicode ();
! 	  c = java_peek_unicode ();
  	}
  
        /* If we have something from the FP char set but not a digit, parse
  	 a FP literal.  */
        if (JAVA_ASCII_FPCHAR (c) && !JAVA_ASCII_DIGIT (c))
  	{
+ 	  /* stage==0: seen digits only
+ 	   * stage==1: seen '.'
+ 	   * stage==2: seen 'e' or 'E'.
+ 	   * stage==3: seen '+' or '-' after 'e' or 'E'.
+ 	   * stage==4: seen type suffix ('f'/'F'/'d'/'D')
+ 	   */
  	  int stage = 0;
  	  int seen_digit = (literal_index ? 1 : 0);
  	  int seen_exponent = 0;
*************** do_java_lex (YYSTYPE *java_lval)
*** 1161,1167 ****
  		    {
  		      stage = 1;
  		      literal_token [literal_index++ ] = c;
! 		      c = java_get_unicode ();
  		    }
  		  else
  		    java_lex_error ("Invalid character in FP literal", 0);
--- 1086,1095 ----
  		    {
  		      stage = 1;
  		      literal_token [literal_index++ ] = c;
! 		      java_next_unicode ();
! 		      c = java_peek_unicode ();
! 		      if (literal_index == 1 && !JAVA_ASCII_DIGIT (c))
! 			BUILD_OPERATOR (DOT_TK);
  		    }
  		  else
  		    java_lex_error ("Invalid character in FP literal", 0);
*************** do_java_lex (YYSTYPE *java_lval)
*** 1179,1185 ****
  		      seen_exponent = 1;
  		      stage = 2;
  		      literal_token [literal_index++] = c;
! 		      c = java_get_unicode ();
  		    }
  		  else
  		    java_lex_error ("Invalid character in FP literal", 0);
--- 1107,1114 ----
  		      seen_exponent = 1;
  		      stage = 2;
  		      literal_token [literal_index++] = c;
! 		      java_next_unicode ();
! 		      c = java_peek_unicode ();
  		    }
  		  else
  		    java_lex_error ("Invalid character in FP literal", 0);
*************** do_java_lex (YYSTYPE *java_lval)
*** 1194,1200 ****
  		{
  		  stage = 3;
  		  literal_token [literal_index++] = c;
! 		  c = java_get_unicode ();
  		}
  
  	      if ((stage == 0 && JAVA_ASCII_FPCHAR (c)) ||
--- 1123,1130 ----
  		{
  		  stage = 3;
  		  literal_token [literal_index++] = c;
! 		  java_next_unicode ();
! 		  c = java_peek_unicode ();
  		}
  
  	      if ((stage == 0 && JAVA_ASCII_FPCHAR (c)) ||
*************** do_java_lex (YYSTYPE *java_lval)
*** 1207,1218 ****
                    if (stage == 2)
                      stage = 3;
  		  literal_token [literal_index++ ] = c;
! 		  c = java_get_unicode ();
  		}
  	      else
  		{
! 		  if (stage != 4) /* Don't push back fF/dD.  */
! 		    java_unget_unicode ();
  		  
  		  /* An exponent (if any) must have seen a digit.  */
  		  if (seen_exponent && !seen_digit)
--- 1137,1149 ----
                    if (stage == 2)
                      stage = 3;
  		  literal_token [literal_index++ ] = c;
! 		  java_next_unicode ();
! 		  c = java_peek_unicode ();
  		}
  	      else
  		{
! 		  if (stage == 4) /* Don't push back fF/dD.  */
! 		    java_next_unicode ();
  		  
  		  /* An exponent (if any) must have seen a digit.  */
  		  if (seen_exponent && !seen_digit)
*************** do_java_lex (YYSTYPE *java_lval)
*** 1220,1226 ****
                        ("Invalid FP literal, exponent must have digit", 0);
  
  		  literal_token [literal_index] = '\0';
- 		  JAVA_LEX_LIT (literal_token, radix);
  
  #ifndef JC1_LITE
  		  java_perform_atof (java_lval, literal_token,
--- 1151,1156 ----
*************** do_java_lex (YYSTYPE *java_lval)
*** 1235,1251 ****
        if (radix == 16 && ! found_hex_digits)
  	java_lex_error
  	  ("0x must be followed by at least one hexadecimal digit", 0);
!       else if (radix == 8 && found_non_octal_digits)
! 	java_lex_error ("Octal literal contains digit out of range", 0);
        else if (c == 'L' || c == 'l')
! 	long_suffix = 1;
!       else
! 	java_unget_unicode ();
  
- #ifdef JAVA_LEX_DEBUG
-       literal_token [literal_index] = '\0'; /* So JAVA_LEX_LIT is safe.  */
-       JAVA_LEX_LIT (literal_token, radix);
- #endif
        /* This section of code is borrowed from gcc/c-lex.c.  */
        if (!overflow)
  	{
--- 1165,1183 ----
        if (radix == 16 && ! found_hex_digits)
  	java_lex_error
  	  ("0x must be followed by at least one hexadecimal digit", 0);
!       else if (radix == 8 && found_non_octal_digits >= 0)
! 	{
! 	  int back = literal_index - found_non_octal_digits;
! 	  ctxp->lexer->position.col -= back;
! 	  java_lex_error ("Octal literal contains digit out of range", 0);
! 	  ctxp->lexer->position.col += back;
! 	}
        else if (c == 'L' || c == 'l')
! 	{
! 	  java_next_unicode ();
! 	  long_suffix = 1;
! 	}
  
        /* This section of code is borrowed from gcc/c-lex.c.  */
        if (!overflow)
  	{
*************** do_java_lex (YYSTYPE *java_lval)
*** 1269,1279 ****
  
  #ifndef JC1_LITE
        /* Range checking.  */
-       value = build_int_2 (low, high);
        /* Temporarily set type to unsigned.  */
!       SET_LVAL_NODE_TYPE (value, (long_suffix
  				  ? unsigned_long_type_node
! 				  : unsigned_int_type_node));
  
        /* For base 10 numbers, only values up to the highest value
  	 (plus one) can be written.  For instance, only ints up to
--- 1201,1211 ----
  
  #ifndef JC1_LITE
        /* Range checking.  */
        /* Temporarily set type to unsigned.  */
!       value = build_int_cst_wide (long_suffix
  				  ? unsigned_long_type_node
! 				  : unsigned_int_type_node, low, high);
!       SET_LVAL_NODE (value);
  
        /* For base 10 numbers, only values up to the highest value
  	 (plus one) can be written.  For instance, only ints up to
*************** do_java_lex (YYSTYPE *java_lval)
*** 1287,1312 ****
  					   value)))
  	{
  	  if (long_suffix)
! 	    JAVA_INTEGRAL_RANGE_ERROR ("Numeric overflow for `long' literal");
  	  else
! 	    JAVA_INTEGRAL_RANGE_ERROR ("Numeric overflow for `int' literal");
  	}
  
        /* Sign extend the value.  */
!       SET_LVAL_NODE_TYPE (value, (long_suffix ? long_type_node : int_type_node));
!       force_fit_type (value, 0);
!       JAVA_RADIX10_FLAG (value) = radix == 10;
! #else
!       SET_LVAL_NODE_TYPE (build_int_2 (low, high),
! 			  long_suffix ? long_type_node : int_type_node);
  #endif
        return INT_LIT_TK;
      }
  
    /* Character literals.  */
    if (c == '\'')
      {
        int char_lit;
        if ((c = java_get_unicode ()) == '\\')
  	char_lit = java_parse_escape_sequence ();
        else
--- 1219,1356 ----
  					   value)))
  	{
  	  if (long_suffix)
! 	    JAVA_RANGE_ERROR ("Numeric overflow for 'long' literal");
  	  else
! 	    JAVA_RANGE_ERROR ("Numeric overflow for 'int' literal");
  	}
  
        /* Sign extend the value.  */
!       value = build_int_cst_wide (long_suffix ? long_type_node : int_type_node,
! 				  low, high);
!       value = force_fit_type (value, 0, false, false);
! 
!       if (radix != 10)
! 	{
! 	  value = copy_node (value);
! 	  JAVA_NOT_RADIX10_FLAG (value) = 1;
! 	}
!       
!       SET_LVAL_NODE (value);
  #endif
        return INT_LIT_TK;
      }
  
+   /* We may have an ID here.  */
+   if (JAVA_START_CHAR_P (c))
+     {
+       int ascii_index = 0, all_ascii = 1;
+ 
+       /* Keyword, boolean literal or null literal.  */
+       while (c != UEOF && JAVA_PART_CHAR_P (c))
+ 	{
+ 	  java_unicode_2_utf8 (c);
+ 	  if (c >= 128)
+ 	    all_ascii = 0;
+ 	  java_next_unicode ();
+ 	  ascii_index++;
+ 	  c = java_peek_unicode ();
+ 	}
+ 
+       obstack_1grow (&temporary_obstack, '\0');
+       string = obstack_finish (&temporary_obstack);
+ 
+       /* If we have something all ascii, we consider a keyword, a boolean
+ 	 literal, a null literal or an all ASCII identifier.  Otherwise,
+ 	 this is an identifier (possibly not respecting formation rule).  */
+       if (all_ascii)
+ 	{
+ 	  const struct java_keyword *kw;
+ 	  if ((kw=java_keyword (string, ascii_index)))
+ 	    {
+ 	      switch (kw->token)
+ 		{
+ 		case PUBLIC_TK:       case PROTECTED_TK: case STATIC_TK:
+ 		case ABSTRACT_TK:     case FINAL_TK:     case NATIVE_TK:
+ 		case SYNCHRONIZED_TK: case TRANSIENT_TK: case VOLATILE_TK:
+ 		case PRIVATE_TK:      case STRICT_TK:
+ 		  SET_MODIFIER_CTX (kw->token);
+ 		  return MODIFIER_TK;
+ 		case FLOAT_TK:
+ 		  SET_LVAL_NODE (float_type_node);
+ 		  return FP_TK;
+ 		case DOUBLE_TK:
+ 		  SET_LVAL_NODE (double_type_node);
+ 		  return FP_TK;
+ 		case BOOLEAN_TK:
+ 		  SET_LVAL_NODE (boolean_type_node);
+ 		  return BOOLEAN_TK;
+ 		case BYTE_TK:
+ 		  SET_LVAL_NODE (byte_type_node);
+ 		  return INTEGRAL_TK;
+ 		case SHORT_TK:
+ 		  SET_LVAL_NODE (short_type_node);
+ 		  return INTEGRAL_TK;
+ 		case INT_TK:
+ 		  SET_LVAL_NODE (int_type_node);
+ 		  return INTEGRAL_TK;
+ 		case LONG_TK:
+ 		  SET_LVAL_NODE (long_type_node);
+ 		  return INTEGRAL_TK;
+ 		case CHAR_TK:
+ 		  SET_LVAL_NODE (char_type_node);
+ 		  return INTEGRAL_TK;
+ 
+ 		  /* Keyword based literals.  */
+ 		case TRUE_TK:
+ 		case FALSE_TK:
+ 		  SET_LVAL_NODE ((kw->token == TRUE_TK ? 
+ 				  boolean_true_node : boolean_false_node));
+ 		  return BOOL_LIT_TK;
+ 		case NULL_TK:
+ 		  SET_LVAL_NODE (null_pointer_node);
+ 		  return NULL_TK;
+ 
+ 		case ASSERT_TK:
+ 		  if (flag_assert)
+ 		    {
+ 		      BUILD_OPERATOR (kw->token);
+ 		      return kw->token;
+ 		    }
+ 		  else
+ 		    break;
+ 
+ 		  /* Some keyword we want to retain information on the location
+ 		     they where found.  */
+ 		case CASE_TK:
+ 		case DEFAULT_TK:
+ 		case SUPER_TK:
+ 		case THIS_TK:
+ 		case RETURN_TK:
+ 		case BREAK_TK:
+ 		case CONTINUE_TK:
+ 		case TRY_TK:
+ 		case CATCH_TK:
+ 		case THROW_TK:
+ 		case INSTANCEOF_TK:
+ 		  BUILD_OPERATOR (kw->token);
+ 
+ 		default:
+ 		  return kw->token;
+ 		}
+ 	    }
+ 	}
+ 
+       java_lval->node = BUILD_ID_WFL (GET_IDENTIFIER (string));
+       return ID_TK;
+     }
+ 
+   java_next_unicode ();
+ 
    /* Character literals.  */
    if (c == '\'')
      {
        int char_lit;
+       
        if ((c = java_get_unicode ()) == '\\')
  	char_lit = java_parse_escape_sequence ();
        else
*************** do_java_lex (YYSTYPE *java_lval)
*** 1326,1345 ****
        if (char_lit == JAVA_CHAR_ERROR)
          char_lit = 0;		/* We silently convert it to zero.  */
  
!       JAVA_LEX_CHAR_LIT (char_lit);
!       SET_LVAL_NODE_TYPE (build_int_2 (char_lit, 0), char_type_node);
        return CHAR_LIT_TK;
      }
  
    /* String literals.  */
    if (c == '"')
      {
!       int no_error;
        char *string;
  
!       for (no_error = 1, c = java_get_unicode (); 
! 	   c != UEOF && c != '"' && c != '\n'; c = java_get_unicode ())
  	{
  	  if (c == '\\')
  	    c = java_parse_escape_sequence ();
  	  if (c == JAVA_CHAR_ERROR)
--- 1370,1396 ----
        if (char_lit == JAVA_CHAR_ERROR)
          char_lit = 0;		/* We silently convert it to zero.  */
  
!       SET_LVAL_NODE (build_int_cst (char_type_node, char_lit));
        return CHAR_LIT_TK;
      }
  
    /* String literals.  */
    if (c == '"')
      {
!       int no_error = 1;
        char *string;
  
!       for (;;)
  	{
+ 	  c = java_peek_unicode ();
+ 	  if (c == '\n' || c == UEOF) /* ULT.  */
+ 	    {
+ 	      java_lex_error ("String not terminated at end of line", 0);
+ 	      break;
+ 	    }
+ 	  java_next_unicode ();
+ 	  if (c == '"')
+ 	    break;
  	  if (c == '\\')
  	    c = java_parse_escape_sequence ();
  	  if (c == JAVA_CHAR_ERROR)
*************** do_java_lex (YYSTYPE *java_lval)
*** 1349,1360 ****
  	    }
  	  java_unicode_2_utf8 (c);
  	}
-       if (c == '\n' || c == UEOF) /* ULT.  */
- 	{
- 	  input_line--;	/* Refer to the line where the terminator was seen.  */
- 	  java_lex_error ("String not terminated at end of line", 0);
- 	  input_line++;
- 	}
  
        obstack_1grow (&temporary_obstack, '\0');
        string = obstack_finish (&temporary_obstack);
--- 1400,1405 ----
*************** do_java_lex (YYSTYPE *java_lval)
*** 1369,1419 ****
        return STRING_LIT_TK;
      }
  
-   /* Separator.  */
    switch (c)
      {
      case '(':
-       JAVA_LEX_SEP (c);
        BUILD_OPERATOR (OP_TK);
      case ')':
-       JAVA_LEX_SEP (c);
        return CP_TK;
      case '{':
!       JAVA_LEX_SEP (c);
        if (ctxp->ccb_indent == 1)
  	ctxp->first_ccb_indent1 = input_line;
        ctxp->ccb_indent++;
!       BUILD_OPERATOR (OCB_TK);
      case '}':
-       JAVA_LEX_SEP (c);
        ctxp->ccb_indent--;
        if (ctxp->ccb_indent == 1)
          ctxp->last_ccb_indent1 = input_line;
!       BUILD_OPERATOR (CCB_TK);
      case '[':
-       JAVA_LEX_SEP (c);
        BUILD_OPERATOR (OSB_TK);
      case ']':
-       JAVA_LEX_SEP (c);
        return CSB_TK;
      case ';':
-       JAVA_LEX_SEP (c);
        return SC_TK;
      case ',':
-       JAVA_LEX_SEP (c);
        return C_TK;
      case '.':
-       JAVA_LEX_SEP (c);
        BUILD_OPERATOR (DOT_TK);
-       /*      return DOT_TK; */
-     }
  
!   /* Operators.  */
!   switch (c)
!     {
      case '=':
!       if ((c = java_get_unicode ()) == '=')
  	{
  	  BUILD_OPERATOR (EQ_TK);
  	}
        else
--- 1414,1521 ----
        return STRING_LIT_TK;
      }
  
    switch (c)
      {
+     case '/':
+       /* Check for comment.  */
+       switch (c = java_peek_unicode ())
+ 	{
+ 	case '/':
+ 	  java_next_unicode ();
+ 	  for (;;)
+ 	    {
+ 	      c = java_get_unicode ();
+ 	      if (c == UEOF)
+ 		{
+ 		  /* It is ok to end a `//' comment with EOF, unless
+ 		     we're being pedantic.  */
+ 		  if (pedantic)
+ 		    java_lex_error ("Comment not terminated at end of input",
+ 				    0);
+ 		  return 0;
+ 		}
+ 	      if (c == '\n')	/* ULT */
+ 		goto step1;
+ 	    }
+ 	  break;
+ 
+ 	case '*':
+ 	  java_next_unicode ();
+ 	  if ((c = java_get_unicode ()) == '*')
+ 	    {
+ 	      c = java_get_unicode ();
+ 	      if (c == '/')
+ 		{
+ 		  /* Empty documentation comment.  We have to reset
+ 		     the deprecation marker as only the most recent
+ 		     doc comment applies.  */
+ 		  ctxp->deprecated = 0;
+ 		}
+ 	      else
+ 		java_parse_doc_section (c);
+ 	    }
+ 	  else
+ 	    java_parse_end_comment ((c = java_get_unicode ()));
+ 	  goto step1;
+ 	  break;
+ 
+ 	case '=':
+ 	  java_next_unicode ();
+ 	  BUILD_OPERATOR2 (DIV_ASSIGN_TK);
+ 
+ 	default:
+ 	  BUILD_OPERATOR (DIV_TK);
+ 	}
+ 
      case '(':
        BUILD_OPERATOR (OP_TK);
      case ')':
        return CP_TK;
      case '{':
! #ifndef JC1_LITE
!       java_lval->operator.token = OCB_TK;
!       java_lval->operator.location = BUILD_LOCATION();
! #ifdef USE_MAPPED_LOCATION
!       if (ctxp->ccb_indent == 1)
! 	ctxp->first_ccb_indent1 = input_location;
! #else
        if (ctxp->ccb_indent == 1)
  	ctxp->first_ccb_indent1 = input_line;
+ #endif
+ #endif
        ctxp->ccb_indent++;
!       return OCB_TK;
      case '}':
        ctxp->ccb_indent--;
+ #ifndef JC1_LITE
+       java_lval->operator.token = CCB_TK;
+       java_lval->operator.location = BUILD_LOCATION();
+ #ifdef USE_MAPPED_LOCATION
+       if (ctxp->ccb_indent == 1)
+         ctxp->last_ccb_indent1 = input_location;
+ #else
        if (ctxp->ccb_indent == 1)
          ctxp->last_ccb_indent1 = input_line;
! #endif
! #endif
!       return CCB_TK;
      case '[':
        BUILD_OPERATOR (OSB_TK);
      case ']':
        return CSB_TK;
      case ';':
        return SC_TK;
      case ',':
        return C_TK;
      case '.':
        BUILD_OPERATOR (DOT_TK);
  
!       /* Operators.  */
      case '=':
!       c = java_peek_unicode ();
!       if (c == '=')
  	{
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR (EQ_TK);
  	}
        else
*************** do_java_lex (YYSTYPE *java_lval)
*** 1422,1704 ****
  	     variable_declarator: rule, it has to be seen as '=' as opposed
  	     to being seen as an ordinary assignment operator in
  	     assignment_operators: rule.  */
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (ASSIGN_TK);
  	}
        
      case '>':
!       switch ((c = java_get_unicode ()))
  	{
  	case '=':
  	  BUILD_OPERATOR (GTE_TK);
  	case '>':
! 	  switch ((c = java_get_unicode ()))
  	    {
  	    case '>':
! 	      if ((c = java_get_unicode ()) == '=')
  		{
  		  BUILD_OPERATOR2 (ZRS_ASSIGN_TK);
  		}
  	      else
  		{
- 		  java_unget_unicode ();
  		  BUILD_OPERATOR (ZRS_TK);
  		}
  	    case '=':
  	      BUILD_OPERATOR2 (SRS_ASSIGN_TK);
  	    default:
- 	      java_unget_unicode ();
  	      BUILD_OPERATOR (SRS_TK);
  	    }
  	default:
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (GT_TK);
  	}
  	
      case '<':
!       switch ((c = java_get_unicode ()))
  	{
  	case '=':
  	  BUILD_OPERATOR (LTE_TK);
  	case '<':
! 	  if ((c = java_get_unicode ()) == '=')
  	    {
  	      BUILD_OPERATOR2 (LS_ASSIGN_TK);
  	    }
  	  else
  	    {
- 	      java_unget_unicode ();
  	      BUILD_OPERATOR (LS_TK);
  	    }
  	default:
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (LT_TK);
  	}
  
      case '&':
!       switch ((c = java_get_unicode ()))
  	{
  	case '&':
  	  BUILD_OPERATOR (BOOL_AND_TK);
  	case '=':
  	  BUILD_OPERATOR2 (AND_ASSIGN_TK);
  	default:
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (AND_TK);
  	}
  
      case '|':
!       switch ((c = java_get_unicode ()))
  	{
  	case '|':
  	  BUILD_OPERATOR (BOOL_OR_TK);
  	case '=':
  	  BUILD_OPERATOR2 (OR_ASSIGN_TK);
  	default:
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (OR_TK);
  	}
  
      case '+':
!       switch ((c = java_get_unicode ()))
  	{
  	case '+':
  	  BUILD_OPERATOR (INCR_TK);
  	case '=':
  	  BUILD_OPERATOR2 (PLUS_ASSIGN_TK);
  	default:
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (PLUS_TK);
  	}
  
      case '-':
!       switch ((c = java_get_unicode ()))
  	{
  	case '-':
  	  BUILD_OPERATOR (DECR_TK);
  	case '=':
  	  BUILD_OPERATOR2 (MINUS_ASSIGN_TK);
  	default:
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (MINUS_TK);
  	}
  
      case '*':
!       if ((c = java_get_unicode ()) == '=')
  	{
  	  BUILD_OPERATOR2 (MULT_ASSIGN_TK);
  	}
        else
  	{
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (MULT_TK);
  	}
  
-     case '/':
-       if ((c = java_get_unicode ()) == '=')
- 	{
- 	  BUILD_OPERATOR2 (DIV_ASSIGN_TK);
- 	}
-       else
- 	{
- 	  java_unget_unicode ();
- 	  BUILD_OPERATOR (DIV_TK);
- 	}
- 
      case '^':
!       if ((c = java_get_unicode ()) == '=')
  	{
  	  BUILD_OPERATOR2 (XOR_ASSIGN_TK);
  	}
        else
  	{
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (XOR_TK);
  	}
  
      case '%':
!       if ((c = java_get_unicode ()) == '=')
  	{
  	  BUILD_OPERATOR2 (REM_ASSIGN_TK);
  	}
        else
  	{
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (REM_TK);
  	}
  
      case '!':
!       if ((c = java_get_unicode()) == '=')
  	{
  	  BUILD_OPERATOR (NEQ_TK);
  	}
        else
  	{
- 	  java_unget_unicode ();
  	  BUILD_OPERATOR (NEG_TK);
  	}
  	  
      case '?':
-       JAVA_LEX_OP ("?");
        BUILD_OPERATOR (REL_QM_TK);
      case ':':
-       JAVA_LEX_OP (":");
        BUILD_OPERATOR (REL_CL_TK);
      case '~':
        BUILD_OPERATOR (NOT_TK);
      }
    
!   /* Keyword, boolean literal or null literal.  */
!   for (first_unicode = c, all_ascii = 1, ascii_index = 0; 
!        c != UEOF && JAVA_PART_CHAR_P (c); c = java_get_unicode ())
!     {
!       java_unicode_2_utf8 (c);
!       if (all_ascii && c >= 128)
!         all_ascii = 0;
!       ascii_index++;
!     }
! 
!   obstack_1grow (&temporary_obstack, '\0');
!   string = obstack_finish (&temporary_obstack);
!   if (c != UEOF)
!     java_unget_unicode ();
! 
!   /* If we have something all ascii, we consider a keyword, a boolean
!      literal, a null literal or an all ASCII identifier.  Otherwise,
!      this is an identifier (possibly not respecting formation rule).  */
!   if (all_ascii)
!     {
!       const struct java_keyword *kw;
!       if ((kw=java_keyword (string, ascii_index)))
! 	{
! 	  JAVA_LEX_KW (string);
! 	  switch (kw->token)
! 	    {
! 	    case PUBLIC_TK:       case PROTECTED_TK: case STATIC_TK:
! 	    case ABSTRACT_TK:     case FINAL_TK:     case NATIVE_TK:
! 	    case SYNCHRONIZED_TK: case TRANSIENT_TK: case VOLATILE_TK:
! 	    case PRIVATE_TK:      case STRICT_TK:
! 	      SET_MODIFIER_CTX (kw->token);
! 	      return MODIFIER_TK;
! 	    case FLOAT_TK:
! 	      SET_LVAL_NODE (float_type_node);
! 	      return FP_TK;
! 	    case DOUBLE_TK:
! 	      SET_LVAL_NODE (double_type_node);
! 	      return FP_TK;
! 	    case BOOLEAN_TK:
! 	      SET_LVAL_NODE (boolean_type_node);
! 	      return BOOLEAN_TK;
! 	    case BYTE_TK:
! 	      SET_LVAL_NODE (byte_type_node);
! 	      return INTEGRAL_TK;
! 	    case SHORT_TK:
! 	      SET_LVAL_NODE (short_type_node);
! 	      return INTEGRAL_TK;
! 	    case INT_TK:
! 	      SET_LVAL_NODE (int_type_node);
! 	      return INTEGRAL_TK;
! 	    case LONG_TK:
! 	      SET_LVAL_NODE (long_type_node);
! 	      return INTEGRAL_TK;
! 	    case CHAR_TK:
! 	      SET_LVAL_NODE (char_type_node);
! 	      return INTEGRAL_TK;
! 
! 	      /* Keyword based literals.  */
! 	    case TRUE_TK:
! 	    case FALSE_TK:
! 	      SET_LVAL_NODE ((kw->token == TRUE_TK ? 
! 			      boolean_true_node : boolean_false_node));
! 	      return BOOL_LIT_TK;
! 	    case NULL_TK:
! 	      SET_LVAL_NODE (null_pointer_node);
! 	      return NULL_TK;
! 
! 	    case ASSERT_TK:
! 	      if (flag_assert)
! 		{
! 		  BUILD_OPERATOR (kw->token);
! 		  return kw->token;
! 		}
! 	      else
! 		break;
! 
! 	      /* Some keyword we want to retain information on the location
! 		 they where found.  */
! 	    case CASE_TK:
! 	    case DEFAULT_TK:
! 	    case SUPER_TK:
! 	    case THIS_TK:
! 	    case RETURN_TK:
! 	    case BREAK_TK:
! 	    case CONTINUE_TK:
! 	    case TRY_TK:
! 	    case CATCH_TK:
! 	    case THROW_TK:
! 	    case INSTANCEOF_TK:
! 	      BUILD_OPERATOR (kw->token);
! 
! 	    default:
! 	      return kw->token;
! 	    }
! 	}
!     }
!   
!   /* We may have an ID here.  */
!   if (JAVA_START_CHAR_P (first_unicode))
      {
!       JAVA_LEX_ID (string);
!       java_lval->node = BUILD_ID_WFL (GET_IDENTIFIER (string));
!       return ID_TK;
      }
  
    /* Everything else is an invalid character in the input.  */
    {
      char lex_error_buffer [128];
!     sprintf (lex_error_buffer, "Invalid character `%s' in input", 
! 	     java_sprint_unicode (ctxp->c_line, ctxp->c_line->current));
!     java_lex_error (lex_error_buffer, 1);
    }
    return 0;
  }
--- 1524,1701 ----
  	     variable_declarator: rule, it has to be seen as '=' as opposed
  	     to being seen as an ordinary assignment operator in
  	     assignment_operators: rule.  */
  	  BUILD_OPERATOR (ASSIGN_TK);
  	}
        
      case '>':
!       switch ((c = java_peek_unicode ()))
  	{
  	case '=':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR (GTE_TK);
  	case '>':
! 	  java_next_unicode ();
! 	  switch ((c = java_peek_unicode ()))
  	    {
  	    case '>':
! 	      java_next_unicode ();
! 	      c = java_peek_unicode ();
! 	      if (c == '=')
  		{
+ 		  java_next_unicode ();
  		  BUILD_OPERATOR2 (ZRS_ASSIGN_TK);
  		}
  	      else
  		{
  		  BUILD_OPERATOR (ZRS_TK);
  		}
  	    case '=':
+ 	      java_next_unicode ();
  	      BUILD_OPERATOR2 (SRS_ASSIGN_TK);
  	    default:
  	      BUILD_OPERATOR (SRS_TK);
  	    }
  	default:
  	  BUILD_OPERATOR (GT_TK);
  	}
  	
      case '<':
!       switch ((c = java_peek_unicode ()))
  	{
  	case '=':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR (LTE_TK);
  	case '<':
! 	  java_next_unicode ();
! 	  if ((c = java_peek_unicode ()) == '=')
  	    {
+ 	      java_next_unicode ();
  	      BUILD_OPERATOR2 (LS_ASSIGN_TK);
  	    }
  	  else
  	    {
  	      BUILD_OPERATOR (LS_TK);
  	    }
  	default:
  	  BUILD_OPERATOR (LT_TK);
  	}
  
      case '&':
!       switch ((c = java_peek_unicode ()))
  	{
  	case '&':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR (BOOL_AND_TK);
  	case '=':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR2 (AND_ASSIGN_TK);
  	default:
  	  BUILD_OPERATOR (AND_TK);
  	}
  
      case '|':
!       switch ((c = java_peek_unicode ()))
  	{
  	case '|':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR (BOOL_OR_TK);
  	case '=':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR2 (OR_ASSIGN_TK);
  	default:
  	  BUILD_OPERATOR (OR_TK);
  	}
  
      case '+':
!       switch ((c = java_peek_unicode ()))
  	{
  	case '+':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR (INCR_TK);
  	case '=':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR2 (PLUS_ASSIGN_TK);
  	default:
  	  BUILD_OPERATOR (PLUS_TK);
  	}
  
      case '-':
!       switch ((c = java_peek_unicode ()))
  	{
  	case '-':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR (DECR_TK);
  	case '=':
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR2 (MINUS_ASSIGN_TK);
  	default:
  	  BUILD_OPERATOR (MINUS_TK);
  	}
  
      case '*':
!       if ((c = java_peek_unicode ()) == '=')
  	{
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR2 (MULT_ASSIGN_TK);
  	}
        else
  	{
  	  BUILD_OPERATOR (MULT_TK);
  	}
  
      case '^':
!       if ((c = java_peek_unicode ()) == '=')
  	{
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR2 (XOR_ASSIGN_TK);
  	}
        else
  	{
  	  BUILD_OPERATOR (XOR_TK);
  	}
  
      case '%':
!       if ((c = java_peek_unicode ()) == '=')
  	{
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR2 (REM_ASSIGN_TK);
  	}
        else
  	{
  	  BUILD_OPERATOR (REM_TK);
  	}
  
      case '!':
!       if ((c = java_peek_unicode()) == '=')
  	{
+ 	  java_next_unicode ();
  	  BUILD_OPERATOR (NEQ_TK);
  	}
        else
  	{
  	  BUILD_OPERATOR (NEG_TK);
  	}
  	  
      case '?':
        BUILD_OPERATOR (REL_QM_TK);
      case ':':
        BUILD_OPERATOR (REL_CL_TK);
      case '~':
        BUILD_OPERATOR (NOT_TK);
      }
    
!   if (c == 0x1a)		/* CTRL-Z.  */
      {
!       if ((c = java_peek_unicode ()) == UEOF)
! 	return 0;		/* Ok here.  */
      }
  
    /* Everything else is an invalid character in the input.  */
    {
      char lex_error_buffer [128];
!     sprintf (lex_error_buffer, "Invalid character '%s' in input", 
! 	     java_sprint_unicode (c));
!     java_lex_error (lex_error_buffer, -1);
    }
    return 0;
  }
*************** static void
*** 1725,1737 ****
  error_if_numeric_overflow (tree value)
  {
    if (TREE_CODE (value) == INTEGER_CST
!       && JAVA_RADIX10_FLAG (value)
        && tree_int_cst_sgn (value) < 0)
      {
        if (TREE_TYPE (value) == long_type_node)
! 	java_lex_error ("Numeric overflow for `long' literal", 0);
        else
! 	java_lex_error ("Numeric overflow for `int' literal", 0);
      }
  }
  
--- 1722,1734 ----
  error_if_numeric_overflow (tree value)
  {
    if (TREE_CODE (value) == INTEGER_CST
!       && !JAVA_NOT_RADIX10_FLAG (value)
        && tree_int_cst_sgn (value) < 0)
      {
        if (TREE_TYPE (value) == long_type_node)
! 	java_lex_error ("Numeric overflow for 'long' literal", 0);
        else
! 	java_lex_error ("Numeric overflow for 'int' literal", 0);
      }
  }
  
*************** java_unicode_2_utf8 (unicode_t unicode)
*** 1764,1770 ****
  static tree
  build_wfl_node (tree node)
  {
!   node = build_expr_wfl (node, ctxp->filename, ctxp->elc.line, ctxp->elc.col);
    /* Prevent java_complete_lhs from short-circuiting node (if constant).  */
    TREE_TYPE (node) = NULL_TREE;
    return node;
--- 1761,1773 ----
  static tree
  build_wfl_node (tree node)
  {
! #ifdef USE_MAPPED_LOCATION
!   node = build_expr_wfl (node, input_location);
! #else
!   node = build_expr_wfl (node, ctxp->filename,
! 			 ctxp->lexer->token_start.line,
! 			 ctxp->lexer->token_start.col);
! #endif
    /* Prevent java_complete_lhs from short-circuiting node (if constant).  */
    TREE_TYPE (node) = NULL_TREE;
    return node;
*************** static void
*** 1775,1787 ****
  java_lex_error (const char *msg ATTRIBUTE_UNUSED, int forward ATTRIBUTE_UNUSED)
  {
  #ifndef JC1_LITE
!   ctxp->elc.line = ctxp->c_line->lineno;
!   ctxp->elc.col = ctxp->c_line->char_col-1+forward;
  
    /* Might be caught in the middle of some error report.  */
    ctxp->java_error_flag = 0;
    java_error (NULL);
    java_error (msg);
  #endif
  }
  
--- 1778,1805 ----
  java_lex_error (const char *msg ATTRIBUTE_UNUSED, int forward ATTRIBUTE_UNUSED)
  {
  #ifndef JC1_LITE
!   int col = (ctxp->lexer->position.col
! 	     + forward * ctxp->lexer->next_columns);
! #if USE_MAPPED_LOCATION
!   source_location save_location = input_location;
!   LINEMAP_POSITION_FOR_COLUMN (input_location, &line_table, col);
!   
!   /* Might be caught in the middle of some error report.  */
!   ctxp->java_error_flag = 0;
!   java_error (NULL);
!   java_error (msg);
!   input_location = save_location;
! #else
!   java_lc save = ctxp->lexer->token_start;
!   ctxp->lexer->token_start.line = ctxp->lexer->position.line;
!   ctxp->lexer->token_start.col = col;
  
    /* Might be caught in the middle of some error report.  */
    ctxp->java_error_flag = 0;
    java_error (NULL);
    java_error (msg);
+   ctxp->lexer->token_start = save;
+ #endif
  #endif
  }
  
*************** java_get_line_col (const char *filename 
*** 1867,1877 ****
  
    /* Place the '^' a the right position.  */
    base = obstack_base (&temporary_obstack);
!   for (ccol = 1; ccol <= col+3; ccol++)
      {
        /* Compute \t when reaching first_non_space.  */
        char c = (first_non_space ?
! 		(base [ccol-1] == '\t' ? '\t' : ' ') : ' ');
        obstack_1grow (&temporary_obstack, c);
      }
    obstack_grow0 (&temporary_obstack, "^", 1);
--- 1885,1895 ----
  
    /* Place the '^' a the right position.  */
    base = obstack_base (&temporary_obstack);
!   for (col += 2, ccol = 0; ccol < col; ccol++)
      {
        /* Compute \t when reaching first_non_space.  */
        char c = (first_non_space ?
! 		(base [ccol] == '\t' ? '\t' : ' ') : ' ');
        obstack_1grow (&temporary_obstack, c);
      }
    obstack_grow0 (&temporary_obstack, "^", 1);
*************** cxx_keyword_p (const char *name, int len
*** 2024,2030 ****
      {
        int kwl = strlen (cxx_keywords[mid]);
        int min_length = kwl > length ? length : kwl;
!       int r = utf8_cmp (name, min_length, cxx_keywords[mid]);
  
        if (r == 0)
  	{
--- 2042,2048 ----
      {
        int kwl = strlen (cxx_keywords[mid]);
        int min_length = kwl > length ? length : kwl;
!       int r = utf8_cmp ((const unsigned char *) name, min_length, cxx_keywords[mid]);
  
        if (r == 0)
  	{
diff -Nrcpad gcc-3.4.3/gcc/java/lex.h gcc-4.0.0/gcc/java/lex.h
*** gcc-3.4.3/gcc/java/lex.h	Wed Dec  3 16:48:20 2003
--- gcc-4.0.0/gcc/java/lex.h	Sat Nov  6 08:50:30 2004
***************
*** 1,5 ****
  /* Language lexer definitions for the GNU compiler for the Java(TM) language.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
--- 1,5 ----
  /* Language lexer 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)
  
*************** extern FILE *finput;
*** 35,106 ****
  /* A Unicode character, as read from the input file  */
  typedef unsigned short unicode_t;
  
! #if defined HAVE_ICONV_H && defined HAVE_ICONV
  #include <iconv.h>
  #endif /* HAVE_ICONV */
  
  /* Default encoding to use if no encoding is specified.  */
  #define DEFAULT_ENCODING "UTF-8"
  
- /* Debug macro to print-out what we match  */
- #ifdef JAVA_LEX_DEBUG
- #ifdef JAVA_LEX_DEBUG_CHAR
- #define JAVA_LEX_CHAR(c)      printf ("java_lex:%d: char '%c'.%d\n", 	\
- 				      lineno, (c < 128 ? c : '.'), c);
- #else
- #define JAVA_LEX_CHAR(c)
- #endif
- #define JAVA_LEX_KW(c)        printf ("java_lex:%d: keyword: '%s'\n", lineno,c)
- #define JAVA_LEX_ID(s)        printf ("java_lex:%d: ID: '%s'\n",	\
- 				      lineno,				\
- 				      (all_ascii ? s : "<U>"))
- #define JAVA_LEX_LIT(s, r)    printf ("java_lex:%d: literal '%s'_%d\n",	\
- 				      lineno, s, r)
- #define JAVA_LEX_CHAR_LIT(s)  printf ("java_lex:%d: literal '%d'\n", lineno, s)
- #define JAVA_LEX_STR_LIT(s)   {						 \
- 				 int i;					 \
- 				 printf ("java_lex:%d: literal '%s'\n",  \
- 					 lineno, s);			 \
- 			       }
- #define JAVA_LEX_SEP(c)       printf ("java_lex:%d: separator '%c'\n",lineno,c)
- #define JAVA_LEX_OP(c)        printf ("java_lex:%d: operator '%s'\n", lineno,c)
- #else
- #define JAVA_LEX_CHAR(c)
- #define JAVA_LEX_KW(c)
- #define JAVA_LEX_ID(s)
- #define JAVA_LEX_LIT(s,r)
- #define JAVA_LEX_CHAR_LIT(s)
- #define JAVA_LEX_STR_LIT(s)
- #define JAVA_LEX_SEP(c)
- #define JAVA_LEX_OP(s)
- #endif
- 
- /* Line information containers  */
- struct java_line {
-   unicode_t *line;		/* The line's unicode */
-   char      *unicode_escape_p;	/* The matching char was a unicode escape */
-   unicode_t ahead[1];		/* Character ahead */
-   char unicode_escape_ahead_p;	/* Character ahead is a unicode escape */
-   int max;			/* buffer's max size */
-   int size;			/* number of unicodes */
-   int current;			/* Current position, unicode based */
-   int char_col;			/* Current position, input char based */
-   int lineno;			/* Its line number */
-   int white_space_only;		/* If it contains only white spaces */
- };
- #define JAVA_COLUMN_DELTA(p)						\
-   (ctxp->c_line->unicode_escape_p [ctxp->c_line->current+(p)] ? 6 : 	\
-    (ctxp->c_line->line [ctxp->c_line->current+(p)] == '\t' ? 8 : 1))
- 
- struct java_error {
-   struct java_line *line;
-   int error;
- };
- 
  typedef struct java_lc_s GTY(()) {
!   int line;
!   int prev_col;
!   int col;
  } java_lc;
  
  struct java_lexer
--- 35,54 ----
  /* A Unicode character, as read from the input file  */
  typedef unsigned short unicode_t;
  
! #ifndef HAVE_ICONV_H
! #undef HAVE_ICONV
! #endif
! 
! #if defined HAVE_ICONV
  #include <iconv.h>
  #endif /* HAVE_ICONV */
  
  /* Default encoding to use if no encoding is specified.  */
  #define DEFAULT_ENCODING "UTF-8"
  
  typedef struct java_lc_s GTY(()) {
!   int line;		/* line number (1-based) */
!   int col;		/* column number number (1-based) */
  } java_lc;
  
  struct java_lexer
*************** struct java_lexer
*** 111,132 ****
    /* Number of consecutive backslashes we've read.  */
    int bs_count;
  
!   /* If nonzero, a value that was pushed back.  */
    unicode_t unget_value;
  
!   /* If nonzero, we've hit EOF.  Used only by java_get_unicode().  */
!   int hit_eof : 1;
  
  #ifdef HAVE_ICONV
    /* Nonzero if we've read any bytes.  We only recognize the
       byte-order-marker (BOM) as the first word.  */
!   int read_anything : 1;
  
    /* Nonzero if we have to byte swap.  */
!   int byte_swap : 1;
  
    /* Nonzero if we're using the fallback decoder.  */
!   int use_fallback : 1;
  
    /* The handle for the iconv converter we're using.  */
    iconv_t handle;
--- 59,101 ----
    /* Number of consecutive backslashes we've read.  */
    int bs_count;
  
!   /* Next available Unicode character.
!    * This is post-Unicode-escape-processing. -1 if EOF. */
!   int next_unicode;
! 
!   /* True if next_unicode is next available character, or EOF. */
!   bool avail_unicode;
! 
!   /* Number of source columns of the previous Unicode character (next_unicode).
!      If next_unicode==-2, then this is the number of columns of the previous
!      Unicode character (most recent result of java_{get,peek}_unicode). */
!   int next_columns;
! 
!   /* If nonzero, a value that was pushed back.  This is a unicode character,
!      but (unlike next_unicode) is pre-'\uXXXX'-processing.  It is also used
!      when a '\r' is *not* followed by a '\n'. */
    unicode_t unget_value;
  
!   /* Name of the character encoding we're using.  */
!   const char *encoding;
! 
!   /* Current source position. */
!   java_lc position;
! 
! #ifndef USE_MAPPED_LOCATION
!   java_lc token_start;		     /* Error's line column info */
! #endif
  
  #ifdef HAVE_ICONV
    /* Nonzero if we've read any bytes.  We only recognize the
       byte-order-marker (BOM) as the first word.  */
!   unsigned int read_anything : 1;
  
    /* Nonzero if we have to byte swap.  */
!   unsigned int byte_swap : 1;
  
    /* Nonzero if we're using the fallback decoder.  */
!   unsigned int use_fallback : 1;
  
    /* The handle for the iconv converter we're using.  */
    iconv_t handle;
*************** extern void java_destroy_lexer (java_lex
*** 165,171 ****
  #define JAVA_LINE_MAX 80
  
  /* Build a location compound integer */
! #define BUILD_LOCATION() ((ctxp->elc.line << 12) | (ctxp->elc.col & 0xfff))
  
  /* Those macros are defined differently if we compile jc1-lite
     (JC1_LITE defined) or jc1.  */
--- 134,145 ----
  #define JAVA_LINE_MAX 80
  
  /* Build a location compound integer */
! #ifdef USE_MAPPED_LOCATION
! #define BUILD_LOCATION() input_location
! #else
! #define BUILD_LOCATION() ((ctxp->lexer->token_start.line << 12) \
! 			  | (ctxp->lexer->token_start.col & 0xfff))
! #endif
  
  /* Those macros are defined differently if we compile jc1-lite
     (JC1_LITE defined) or jc1.  */
*************** extern void java_destroy_lexer (java_lex
*** 185,194 ****
  #define BUILD_OPERATOR(TOKEN)	return TOKEN
  #define BUILD_OPERATOR2(TOKEN)	return ASSIGN_ANY_TK
  #define SET_LVAL_NODE(NODE)
- #define SET_LVAL_NODE_TYPE(NODE, TYPE)
  #define BUILD_ID_WFL(EXP) (EXP)
  #define JAVA_FLOAT_RANGE_ERROR(S) {}
! #define JAVA_INTEGRAL_RANGE_ERROR(S) do { } while (0)
  
  #else
  
--- 159,167 ----
  #define BUILD_OPERATOR(TOKEN)	return TOKEN
  #define BUILD_OPERATOR2(TOKEN)	return ASSIGN_ANY_TK
  #define SET_LVAL_NODE(NODE)
  #define BUILD_ID_WFL(EXP) (EXP)
  #define JAVA_FLOAT_RANGE_ERROR(S) {}
! #define JAVA_RANGE_ERROR(S) do { } while (0)
  
  #else
  
*************** extern void java_destroy_lexer (java_lex
*** 222,250 ****
    }
  /* Set java_lval->node and TREE_TYPE(java_lval->node) in macros */
  #define SET_LVAL_NODE(NODE) java_lval->node = (NODE)
- #define SET_LVAL_NODE_TYPE(NODE,TYPE)		\
-   {						\
-     java_lval->node = (NODE);			\
-     TREE_TYPE (java_lval->node) = (TYPE);	\
-   }
  /* Wrap identifier around a wfl */
  #define BUILD_ID_WFL(EXP) build_wfl_node ((EXP))
  /* Special ways to report error on numeric literals  */
! #define JAVA_FLOAT_RANGE_ERROR(m)					  \
!   {									  \
!     char msg [1024];							  \
!     int i = ctxp->c_line->current;					  \
!     ctxp->c_line->current = number_beginning;				  \
!     sprintf (msg, "Floating point literal exceeds range of `%s'", (m)); \
!     java_lex_error (msg, 0);						  \
!     ctxp->c_line->current = i;						  \
    }
! #define JAVA_INTEGRAL_RANGE_ERROR(m)		\
!   do {						\
!     int i = ctxp->c_line->current;		\
!     ctxp->c_line->current = number_beginning;	\
!     java_lex_error (m, 0);			\
!     ctxp->c_line->current = i;			\
    } while (0)
  
  #endif /* Definitions for jc1 compilation only */
--- 195,216 ----
    }
  /* Set java_lval->node and TREE_TYPE(java_lval->node) in macros */
  #define SET_LVAL_NODE(NODE) java_lval->node = (NODE)
  /* Wrap identifier around a wfl */
  #define BUILD_ID_WFL(EXP) build_wfl_node ((EXP))
  /* Special ways to report error on numeric literals  */
! #define JAVA_FLOAT_RANGE_ERROR(m)					\
!   {									\
!     char *msg = xmalloc (100 + strlen (m));				\
!     sprintf (msg, "Floating point literal exceeds range of `%s'", (m));	\
!     JAVA_RANGE_ERROR(msg);						\
!     free (msg);								\
    }
! #define JAVA_RANGE_ERROR(msg)						\
!   do {									\
!     int save_col = ctxp->lexer->position.col;				\
!     ctxp->lexer->position.col = number_beginning;			\
!     java_lex_error (msg, 0);						\
!     ctxp->lexer->position.col = save_col;				\
    } while (0)
  
  #endif /* Definitions for jc1 compilation only */
diff -Nrcpad gcc-3.4.3/gcc/java/parse-scan.c gcc-4.0.0/gcc/java/parse-scan.c
*** gcc-3.4.3/gcc/java/parse-scan.c	Fri Nov  5 04:18:06 2004
--- gcc-4.0.0/gcc/java/parse-scan.c	Thu Apr 21 07:09:45 2005
***************
*** 1,4 ****
! /* A Bison parser, made from /home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y
     by GNU bison 1.35.  */
  
  #define YYBISON 1  /* Identify Bison output.  */
--- 1,4 ----
! /* A Bison parser, made from /scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y
     by GNU bison 1.35.  */
  
  #define YYBISON 1  /* Identify Bison output.  */
***************
*** 113,119 ****
  # define	BOOL_LIT_TK	364
  # define	NULL_TK	365
  
! #line 37 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  
  #define JC1_LITE
  
--- 113,119 ----
  # define	BOOL_LIT_TK	364
  # define	NULL_TK	365
  
! #line 38 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  
  #define JC1_LITE
  
***************
*** 121,135 ****
  #include "system.h"
  #include "coretypes.h"
  #include "tm.h"
- #include "input.h"
  #include "obstack.h"
  #include "toplev.h"
  
  extern FILE *finput, *out;
   
! /* Current position in real source file.  */
! 
! location_t input_location;
  
  /* Obstack for the lexer.  */
  struct obstack temporary_obstack;
--- 121,132 ----
  #include "system.h"
  #include "coretypes.h"
  #include "tm.h"
  #include "obstack.h"
  #include "toplev.h"
  
  extern FILE *finput, *out;
   
!  const char *main_input_filename;
  
  /* Obstack for the lexer.  */
  struct obstack temporary_obstack;
*************** void report (void); 
*** 206,212 ****
  #include "lex.h"
  #include "parse.h"
  
! #line 130 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  #ifndef YYSTYPE
  typedef union {
    char *node;
--- 203,209 ----
  #include "lex.h"
  #include "parse.h"
  
! #line 128 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  #ifndef YYSTYPE
  typedef union {
    char *node;
*************** typedef union {
*** 216,222 ****
  # define YYSTYPE yystype
  # define YYSTYPE_IS_TRIVIAL 1
  #endif
! #line 136 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  
  extern int flag_assert;
  
--- 213,219 ----
  # define YYSTYPE yystype
  # define YYSTYPE_IS_TRIVIAL 1
  #endif
! #line 134 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  
  extern int flag_assert;
  
*************** static const short yyrhs[] =
*** 442,483 ****
  /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
  static const short yyrline[] =
  {
!        0,   209,   214,   216,   217,   218,   219,   220,   224,   226,
!      229,   235,   240,   247,   249,   252,   256,   260,   264,   270,
!      278,   280,   283,   287,   294,   299,   300,   301,   302,   303,
!      304,   305,   306,   309,   311,   314,   316,   319,   324,   326,
!      329,   333,   337,   339,   340,   346,   355,   366,   366,   373,
!      373,   378,   379,   382,   383,   386,   389,   393,   396,   400,
!      402,   405,   407,   408,   409,   412,   414,   415,   416,   417,
!      421,   424,   428,   431,   434,   436,   439,   442,   446,   448,
!      452,   452,   459,   462,   463,   465,   472,   479,   485,   488,
!      490,   496,   512,   528,   529,   532,   535,   539,   541,   545,
!      549,   559,   561,   564,   566,   572,   575,   579,   581,   582,
!      583,   587,   589,   592,   594,   598,   600,   605,   605,   609,
!      609,   612,   612,   615,   615,   620,   622,   625,   628,   632,
!      634,   637,   639,   640,   641,   644,   648,   653,   655,   656,
!      657,   660,   662,   666,   668,   671,   673,   676,   678,   679,
!      682,   686,   689,   693,   695,   696,   697,   698,   699,   702,
!      704,   705,   706,   707,   710,   712,   713,   714,   715,   716,
!      717,   718,   719,   720,   721,   722,   725,   729,   734,   738,
!      744,   748,   750,   751,   752,   753,   754,   755,   758,   762,
!      767,   772,   776,   778,   779,   780,   783,   785,   788,   793,
!      795,   798,   800,   803,   807,   811,   815,   819,   824,   826,
!      829,   831,   834,   838,   841,   842,   843,   846,   847,   850,
!      852,   855,   857,   862,   864,   867,   869,   872,   876,   878,
!      879,   881,   884,   886,   889,   894,   896,   897,   900,   902,
!      905,   909,   914,   916,   919,   921,   922,   923,   924,   925,
!      926,   927,   931,   935,   938,   940,   942,   946,   948,   949,
!      950,   951,   952,   953,   956,   956,   960,   960,   965,   968,
!      971,   973,   974,   977,   979,   980,   981,   984,   985,   988,
!      990,   993,   997,  1000,  1004,  1006,  1012,  1015,  1017,  1018,
!     1019,  1020,  1023,  1026,  1029,  1031,  1033,  1034,  1037,  1041,
!     1045,  1047,  1048,  1049,  1050,  1053,  1057,  1061,  1063,  1064,
!     1065,  1068,  1070,  1071,  1072,  1075,  1077,  1078,  1079,  1082,
!     1084,  1085,  1088,  1090,  1091,  1092,  1095,  1097,  1098,  1099,
!     1100,  1101,  1104,  1106,  1107,  1110,  1112,  1115,  1117,  1120,
!     1122,  1125,  1127,  1131,  1133,  1137,  1139,  1143,  1145,  1148,
!     1152,  1155,  1156,  1159,  1161,  1164,  1168
  };
  #endif
  
--- 439,480 ----
  /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
  static const short yyrline[] =
  {
!        0,   207,   212,   214,   215,   216,   217,   218,   222,   224,
!      227,   233,   238,   245,   247,   250,   254,   258,   262,   268,
!      276,   278,   281,   285,   292,   297,   298,   299,   300,   301,
!      302,   303,   304,   307,   309,   312,   314,   317,   322,   324,
!      327,   331,   335,   337,   338,   344,   353,   364,   364,   371,
!      371,   376,   377,   380,   381,   384,   387,   391,   394,   398,
!      400,   403,   405,   406,   407,   410,   412,   413,   414,   415,
!      419,   422,   426,   429,   432,   434,   437,   440,   444,   446,
!      450,   450,   457,   460,   461,   463,   470,   477,   483,   486,
!      488,   494,   510,   526,   527,   530,   533,   537,   539,   543,
!      547,   557,   559,   562,   564,   570,   573,   577,   579,   580,
!      581,   585,   587,   590,   592,   596,   598,   603,   603,   607,
!      607,   610,   610,   613,   613,   618,   620,   623,   626,   630,
!      632,   635,   637,   638,   639,   642,   646,   651,   653,   654,
!      655,   658,   660,   664,   666,   669,   671,   674,   676,   677,
!      680,   684,   687,   691,   693,   694,   695,   696,   697,   700,
!      702,   703,   704,   705,   708,   710,   711,   712,   713,   714,
!      715,   716,   717,   718,   719,   720,   723,   727,   732,   736,
!      742,   746,   748,   749,   750,   751,   752,   753,   756,   760,
!      765,   770,   774,   776,   777,   778,   781,   783,   786,   791,
!      793,   796,   798,   801,   805,   809,   813,   817,   822,   824,
!      827,   829,   832,   836,   839,   840,   841,   844,   845,   848,
!      850,   853,   855,   860,   862,   865,   867,   870,   874,   876,
!      877,   879,   882,   884,   887,   892,   894,   895,   898,   900,
!      903,   907,   912,   914,   917,   919,   920,   921,   922,   923,
!      924,   925,   929,   933,   936,   938,   940,   944,   946,   947,
!      948,   949,   950,   951,   954,   954,   958,   958,   963,   966,
!      969,   971,   972,   975,   977,   978,   979,   982,   983,   986,
!      988,   991,   995,   998,  1002,  1004,  1010,  1013,  1015,  1016,
!     1017,  1018,  1021,  1024,  1027,  1029,  1031,  1032,  1035,  1039,
!     1043,  1045,  1046,  1047,  1048,  1051,  1055,  1059,  1061,  1062,
!     1063,  1066,  1068,  1069,  1070,  1073,  1075,  1076,  1077,  1080,
!     1082,  1083,  1086,  1088,  1089,  1090,  1093,  1095,  1096,  1097,
!     1098,  1099,  1102,  1104,  1105,  1108,  1110,  1113,  1115,  1118,
!     1120,  1123,  1125,  1129,  1131,  1135,  1137,  1141,  1143,  1146,
!     1150,  1153,  1154,  1157,  1159,  1162,  1166
  };
  #endif
  
*************** yyreduce:
*** 2199,2250 ****
    switch (yyn) {
  
  case 10:
! #line 231 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  {
  		  /* use preset global here. FIXME */
  		  yyval.node = xstrdup ("int");
  		;
      break;}
  case 11:
! #line 236 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  {
  		  /* use preset global here. FIXME */
  		  yyval.node = xstrdup ("double");
  		;
      break;}
  case 12:
! #line 241 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  {
  		  /* use preset global here. FIXME */
  		  yyval.node = xstrdup ("boolean");
  		;
      break;}
  case 18:
! #line 266 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  {
  	          while (bracket_count-- > 0) 
  		    yyval.node = concat ("[", yyvsp[-1].node, NULL);
  		;
      break;}
  case 19:
! #line 271 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  {
  	          while (bracket_count-- > 0) 
  		    yyval.node = concat ("[", yyvsp[-1].node, NULL);
  		;
      break;}
  case 23:
! #line 289 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { 
  		  yyval.node = concat (yyvsp[-2].node, ".", yyvsp[0].node, NULL);
  		;
      break;}
  case 37:
! #line 321 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { package_name = yyvsp[-1].node; ;
      break;}
  case 45:
! #line 348 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { 
  		  if (yyvsp[0].value == PUBLIC_TK)
  		    modifier_value++;
--- 2196,2247 ----
    switch (yyn) {
  
  case 10:
! #line 229 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  {
  		  /* use preset global here. FIXME */
  		  yyval.node = xstrdup ("int");
  		;
      break;}
  case 11:
! #line 234 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  {
  		  /* use preset global here. FIXME */
  		  yyval.node = xstrdup ("double");
  		;
      break;}
  case 12:
! #line 239 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  {
  		  /* use preset global here. FIXME */
  		  yyval.node = xstrdup ("boolean");
  		;
      break;}
  case 18:
! #line 264 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  {
  	          while (bracket_count-- > 0) 
  		    yyval.node = concat ("[", yyvsp[-1].node, NULL);
  		;
      break;}
  case 19:
! #line 269 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  {
  	          while (bracket_count-- > 0) 
  		    yyval.node = concat ("[", yyvsp[-1].node, NULL);
  		;
      break;}
  case 23:
! #line 287 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { 
  		  yyval.node = concat (yyvsp[-2].node, ".", yyvsp[0].node, NULL);
  		;
      break;}
  case 37:
! #line 319 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { package_name = yyvsp[-1].node; ;
      break;}
  case 45:
! #line 346 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { 
  		  if (yyvsp[0].value == PUBLIC_TK)
  		    modifier_value++;
*************** case 45:
*** 2254,2260 ****
  		;
      break;}
  case 46:
! #line 356 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { 
  		  if (yyvsp[0].value == PUBLIC_TK)
  		    modifier_value++;
--- 2251,2257 ----
  		;
      break;}
  case 46:
! #line 354 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { 
  		  if (yyvsp[0].value == PUBLIC_TK)
  		    modifier_value++;
*************** case 46:
*** 2264,2336 ****
  		;
      break;}
  case 47:
! #line 368 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { 
  		  report_class_declaration(yyvsp[-2].node);
  		  modifier_value = 0;
                  ;
      break;}
  case 49:
! #line 374 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { report_class_declaration(yyvsp[-2].node); ;
      break;}
  case 55:
! #line 388 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 56:
! #line 390 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 57:
! #line 395 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { pop_class_context (); ;
      break;}
  case 58:
! #line 397 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { pop_class_context (); ;
      break;}
  case 70:
! #line 423 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 71:
! #line 425 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 76:
! #line 441 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { bracket_count = 0; USE_ABSORBER; ;
      break;}
  case 77:
! #line 443 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++bracket_count; ;
      break;}
  case 80:
! #line 454 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++method_depth; ;
      break;}
  case 81:
! #line 456 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { --method_depth; ;
      break;}
  case 82:
! #line 461 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 84:
! #line 464 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 85:
! #line 466 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { 
                    report_main_declaration (yyvsp[-1].declarator);
  		  modifier_value = 0;
  		;
      break;}
  case 86:
! #line 474 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { 
  		  struct method_declarator *d;
  		  NEW_METHOD_DECLARATOR (d, yyvsp[-2].node, NULL);
--- 2261,2333 ----
  		;
      break;}
  case 47:
! #line 366 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { 
  		  report_class_declaration(yyvsp[-2].node);
  		  modifier_value = 0;
                  ;
      break;}
  case 49:
! #line 372 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { report_class_declaration(yyvsp[-2].node); ;
      break;}
  case 55:
! #line 386 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 56:
! #line 388 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 57:
! #line 393 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { pop_class_context (); ;
      break;}
  case 58:
! #line 395 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { pop_class_context (); ;
      break;}
  case 70:
! #line 421 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 71:
! #line 423 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 76:
! #line 439 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { bracket_count = 0; USE_ABSORBER; ;
      break;}
  case 77:
! #line 441 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++bracket_count; ;
      break;}
  case 80:
! #line 452 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++method_depth; ;
      break;}
  case 81:
! #line 454 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { --method_depth; ;
      break;}
  case 82:
! #line 459 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 84:
! #line 462 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 85:
! #line 464 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { 
                    report_main_declaration (yyvsp[-1].declarator);
  		  modifier_value = 0;
  		;
      break;}
  case 86:
! #line 472 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { 
  		  struct method_declarator *d;
  		  NEW_METHOD_DECLARATOR (d, yyvsp[-2].node, NULL);
*************** case 86:
*** 2338,2344 ****
  		;
      break;}
  case 87:
! #line 480 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { 
  		  struct method_declarator *d;
  		  NEW_METHOD_DECLARATOR (d, yyvsp[-3].node, yyvsp[-1].node);
--- 2335,2341 ----
  		;
      break;}
  case 87:
! #line 478 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { 
  		  struct method_declarator *d;
  		  NEW_METHOD_DECLARATOR (d, yyvsp[-3].node, yyvsp[-1].node);
*************** case 87:
*** 2346,2358 ****
  		;
      break;}
  case 90:
! #line 491 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  {
  		  yyval.node = concat (yyvsp[-2].node, ",", yyvsp[0].node, NULL);
  		;
      break;}
  case 91:
! #line 498 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { 
  		  USE_ABSORBER;
  		  if (bracket_count)
--- 2343,2355 ----
  		;
      break;}
  case 90:
! #line 489 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  {
  		  yyval.node = concat (yyvsp[-2].node, ",", yyvsp[0].node, NULL);
  		;
      break;}
  case 91:
! #line 496 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { 
  		  USE_ABSORBER;
  		  if (bracket_count)
*************** case 91:
*** 2369,2383 ****
  		;
      break;}
  case 92:
! #line 513 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  {
  		  if (bracket_count)
  		    {
  		      int i;
! 		      char *n = xmalloc (bracket_count + 1 + strlen (yyval.node));
  		      for (i = 0; i < bracket_count; ++i)
  			n[i] = '[';
! 		      strcpy (n + bracket_count, yyval.node);
  		      yyval.node = n;
  		    }
  		  else
--- 2366,2380 ----
  		;
      break;}
  case 92:
! #line 511 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  {
  		  if (bracket_count)
  		    {
  		      int i;
! 		      char *n = xmalloc (bracket_count + 1 + strlen (yyvsp[-1].node));
  		      for (i = 0; i < bracket_count; ++i)
  			n[i] = '[';
! 		      strcpy (n + bracket_count, yyvsp[-1].node);
  		      yyval.node = n;
  		    }
  		  else
*************** case 92:
*** 2385,2603 ****
  		;
      break;}
  case 95:
! #line 534 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 96:
! #line 536 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 100:
! #line 551 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 102:
! #line 562 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 104:
! #line 567 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 105:
! #line 574 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 106:
! #line 576 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 113:
! #line 593 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 114:
! #line 595 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 117:
! #line 607 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { report_class_declaration (yyvsp[0].node); modifier_value = 0; ;
      break;}
  case 119:
! #line 610 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { report_class_declaration (yyvsp[0].node); modifier_value = 0; ;
      break;}
  case 121:
! #line 613 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { report_class_declaration (yyvsp[-1].node); modifier_value = 0; ;
      break;}
  case 123:
! #line 616 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { report_class_declaration (yyvsp[-1].node); modifier_value = 0; ;
      break;}
  case 127:
! #line 627 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { pop_class_context (); ;
      break;}
  case 128:
! #line 629 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { pop_class_context (); ;
      break;}
  case 151:
! #line 688 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 152:
! #line 690 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 177:
! #line 731 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 188:
! #line 759 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 189:
! #line 764 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 190:
! #line 769 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 198:
! #line 789 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 203:
! #line 804 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 207:
! #line 821 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 213:
! #line 839 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 224:
! #line 864 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 227:
! #line 873 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 230:
! #line 880 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 231:
! #line 882 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 234:
! #line 891 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 240:
! #line 906 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 241:
! #line 910 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 252:
! #line 932 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 253:
! #line 937 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 254:
! #line 939 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 255:
! #line 941 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 256:
! #line 943 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 264:
! #line 958 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { report_class_declaration (anonymous_context); ;
      break;}
  case 266:
! #line 961 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { report_class_declaration (anonymous_context); ;
      break;}
  case 268:
! #line 967 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 282:
! #line 999 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { bracket_count = 1; ;
      break;}
  case 283:
! #line 1001 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { bracket_count++; ;
      break;}
  case 286:
! #line 1014 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ++complexity; ;
      break;}
  case 287:
! #line 1016 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ++complexity; ;
      break;}
  case 288:
! #line 1017 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 289:
! #line 1018 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 290:
! #line 1019 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 291:
! #line 1020 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 292:
! #line 1025 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 295:
! #line 1032 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 342:
! #line 1128 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 344:
! #line 1134 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 346:
! #line 1140 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 350:
! #line 1154 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  }
--- 2382,2600 ----
  		;
      break;}
  case 95:
! #line 532 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 96:
! #line 534 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 100:
! #line 549 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 102:
! #line 560 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 104:
! #line 565 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 105:
! #line 572 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 106:
! #line 574 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 113:
! #line 591 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 114:
! #line 593 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 117:
! #line 605 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { report_class_declaration (yyvsp[0].node); modifier_value = 0; ;
      break;}
  case 119:
! #line 608 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { report_class_declaration (yyvsp[0].node); modifier_value = 0; ;
      break;}
  case 121:
! #line 611 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { report_class_declaration (yyvsp[-1].node); modifier_value = 0; ;
      break;}
  case 123:
! #line 614 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { report_class_declaration (yyvsp[-1].node); modifier_value = 0; ;
      break;}
  case 127:
! #line 625 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { pop_class_context (); ;
      break;}
  case 128:
! #line 627 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { pop_class_context (); ;
      break;}
  case 151:
! #line 686 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 152:
! #line 688 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { modifier_value = 0; ;
      break;}
  case 177:
! #line 729 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 188:
! #line 757 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 189:
! #line 762 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 190:
! #line 767 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 198:
! #line 787 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 203:
! #line 802 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 207:
! #line 819 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 213:
! #line 837 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 224:
! #line 862 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 227:
! #line 871 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 230:
! #line 878 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 231:
! #line 880 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 234:
! #line 889 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 240:
! #line 904 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 241:
! #line 908 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 252:
! #line 930 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 253:
! #line 935 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 254:
! #line 937 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 255:
! #line 939 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 256:
! #line 941 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 264:
! #line 956 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { report_class_declaration (anonymous_context); ;
      break;}
  case 266:
! #line 959 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { report_class_declaration (anonymous_context); ;
      break;}
  case 268:
! #line 965 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 282:
! #line 997 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { bracket_count = 1; ;
      break;}
  case 283:
! #line 999 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { bracket_count++; ;
      break;}
  case 286:
! #line 1012 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ++complexity; ;
      break;}
  case 287:
! #line 1014 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ++complexity; ;
      break;}
  case 288:
! #line 1015 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 289:
! #line 1016 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 290:
! #line 1017 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 291:
! #line 1018 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 292:
! #line 1023 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 295:
! #line 1030 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  case 342:
! #line 1126 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 344:
! #line 1132 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 346:
! #line 1138 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { ++complexity; ;
      break;}
  case 350:
! #line 1152 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  { USE_ABSORBER; ;
      break;}
  }
*************** yyreturn:
*** 2833,2839 ****
  #endif
    return yyresult;
  }
! #line 1172 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse-scan.y"
  
  
  /* Create a new parser context */
--- 2830,2836 ----
  #endif
    return yyresult;
  }
! #line 1170 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse-scan.y"
  
  
  /* Create a new parser context */
*************** report_class_declaration (const char * n
*** 2959,2965 ****
        if (!previous_output)
  	{
  	  if (flag_list_filename)
! 	    fprintf (out, "%s: ", input_filename);
  	  previous_output = 1;
  	}
  
--- 2956,2962 ----
        if (!previous_output)
  	{
  	  if (flag_list_filename)
! 	    fprintf (out, "%s: ", main_input_filename);
  	  previous_output = 1;
  	}
  
*************** report (void)
*** 3004,3015 ****
  {
    extern int flag_complexity;
    if (flag_complexity)
!     fprintf (out, "%s %d\n", input_filename, complexity);
  }
  
  /* Reset global status used by the report functions.  */
  
! void reset_report (void)
  {
    previous_output = 0;
    package_name = NULL;
--- 3001,3013 ----
  {
    extern int flag_complexity;
    if (flag_complexity)
!     fprintf (out, "%s %d\n", main_input_filename, complexity);
  }
  
  /* Reset global status used by the report functions.  */
  
! void
! reset_report (void)
  {
    previous_output = 0;
    package_name = NULL;
*************** void reset_report (void)
*** 3020,3025 ****
  void
  yyerror (const char *msg ATTRIBUTE_UNUSED)
  {
!   fprintf (stderr, "%s: %d: %s\n", input_filename, input_line, msg);
    exit (1);
  }
--- 3018,3040 ----
  void
  yyerror (const char *msg ATTRIBUTE_UNUSED)
  {
!   fprintf (stderr, "%s: %s\n", main_input_filename, msg);
    exit (1);
  }
+ 
+ #ifdef __XGETTEXT__
+ /* Depending on the version of Bison used to compile this grammar,
+    it may issue generic diagnostics spelled "syntax error" or
+    "parse error".  To prevent this from changing the translation
+    template randomly, we list all the variants of this particular
+    diagnostic here.  Translators: there is no fine distinction
+    between diagnostics with "syntax error" in them, and diagnostics
+    with "parse error" in them.  It's okay to give them both the same
+    translation.  */
+ const char d1[] = N_("syntax error");
+ const char d2[] = N_("parse error");
+ const char d3[] = N_("syntax error; also virtual memory exhausted");
+ const char d4[] = N_("parse error; also virtual memory exhausted");
+ const char d5[] = N_("syntax error: cannot back up");
+ const char d6[] = N_("parse error: cannot back up");
+ #endif
diff -Nrcpad gcc-3.4.3/gcc/java/parse-scan.y gcc-4.0.0/gcc/java/parse-scan.y
*** gcc-3.4.3/gcc/java/parse-scan.y	Wed Oct 22 18:00:06 2003
--- gcc-4.0.0/gcc/java/parse-scan.y	Sat Feb 12 15:21:14 2005
***************
*** 1,5 ****
  /* Parser grammar for quick source code scan of Java(TM) language programs.
!    Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
  This file is part of GCC.
--- 1,6 ----
  /* Parser grammar for quick source code scan of Java(TM) language programs.
!    Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
!    Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
  This file is part of GCC.
*************** definitions and other extensions.  */
*** 41,55 ****
  #include "system.h"
  #include "coretypes.h"
  #include "tm.h"
- #include "input.h"
  #include "obstack.h"
  #include "toplev.h"
  
  extern FILE *finput, *out;
   
! /* Current position in real source file.  */
! 
! location_t input_location;
  
  /* Obstack for the lexer.  */
  struct obstack temporary_obstack;
--- 42,53 ----
  #include "system.h"
  #include "coretypes.h"
  #include "tm.h"
  #include "obstack.h"
  #include "toplev.h"
  
  extern FILE *finput, *out;
   
!  const char *main_input_filename;
  
  /* Obstack for the lexer.  */
  struct obstack temporary_obstack;
*************** formal_parameter:
*** 514,523 ****
  		  if (bracket_count)
  		    {
  		      int i;
! 		      char *n = xmalloc (bracket_count + 1 + strlen ($$));
  		      for (i = 0; i < bracket_count; ++i)
  			n[i] = '[';
! 		      strcpy (n + bracket_count, $$);
  		      $$ = n;
  		    }
  		  else
--- 512,521 ----
  		  if (bracket_count)
  		    {
  		      int i;
! 		      char *n = xmalloc (bracket_count + 1 + strlen ($2));
  		      for (i = 0; i < bracket_count; ++i)
  			n[i] = '[';
! 		      strcpy (n + bracket_count, $2);
  		      $$ = n;
  		    }
  		  else
*************** static:				/* Test lval.sub_token here *
*** 553,560 ****
  
  /* 19.8.5 Productions from 8.6: Constructor Declarations  */
  /* NOTE FOR FURTHER WORK ON CONSTRUCTORS:
!    - If a forbidded modifier is found, the the error is either the use of
!      a forbidded modifier for a constructor OR bogus attempt to declare a
       method without having specified the return type. FIXME */
  constructor_declaration:
  	constructor_declarator throws constructor_body
--- 551,558 ----
  
  /* 19.8.5 Productions from 8.6: Constructor Declarations  */
  /* NOTE FOR FURTHER WORK ON CONSTRUCTORS:
!    - If a forbidden modifier is found, the error is either the use of
!      a forbidden modifier for a constructor OR bogus attempt to declare a
       method without having specified the return type. FIXME */
  constructor_declaration:
  	constructor_declarator throws constructor_body
*************** primary_no_new_array:
*** 926,932 ****
  |	array_access
  |	type_literals
          /* Added, JDK1.1 inner classes. Documentation is wrong
!            refering to a 'ClassName' (class_name) rule that doesn't
             exist. Used name instead.  */
  |	name DOT_TK THIS_TK
  		{ USE_ABSORBER; }
--- 924,930 ----
  |	array_access
  |	type_literals
          /* Added, JDK1.1 inner classes. Documentation is wrong
!            referring to a 'ClassName' (class_name) rule that doesn't
             exist. Used name instead.  */
  |	name DOT_TK THIS_TK
  		{ USE_ABSORBER; }
*************** report_class_declaration (const char * n
*** 1294,1300 ****
        if (!previous_output)
  	{
  	  if (flag_list_filename)
! 	    fprintf (out, "%s: ", input_filename);
  	  previous_output = 1;
  	}
  
--- 1292,1298 ----
        if (!previous_output)
  	{
  	  if (flag_list_filename)
! 	    fprintf (out, "%s: ", main_input_filename);
  	  previous_output = 1;
  	}
  
*************** report (void)
*** 1339,1350 ****
  {
    extern int flag_complexity;
    if (flag_complexity)
!     fprintf (out, "%s %d\n", input_filename, complexity);
  }
  
  /* Reset global status used by the report functions.  */
  
! void reset_report (void)
  {
    previous_output = 0;
    package_name = NULL;
--- 1337,1349 ----
  {
    extern int flag_complexity;
    if (flag_complexity)
!     fprintf (out, "%s %d\n", main_input_filename, complexity);
  }
  
  /* Reset global status used by the report functions.  */
  
! void
! reset_report (void)
  {
    previous_output = 0;
    package_name = NULL;
*************** void reset_report (void)
*** 1355,1360 ****
  void
  yyerror (const char *msg ATTRIBUTE_UNUSED)
  {
!   fprintf (stderr, "%s: %d: %s\n", input_filename, input_line, msg);
    exit (1);
  }
--- 1354,1376 ----
  void
  yyerror (const char *msg ATTRIBUTE_UNUSED)
  {
!   fprintf (stderr, "%s: %s\n", main_input_filename, msg);
    exit (1);
  }
+ 
+ #ifdef __XGETTEXT__
+ /* Depending on the version of Bison used to compile this grammar,
+    it may issue generic diagnostics spelled "syntax error" or
+    "parse error".  To prevent this from changing the translation
+    template randomly, we list all the variants of this particular
+    diagnostic here.  Translators: there is no fine distinction
+    between diagnostics with "syntax error" in them, and diagnostics
+    with "parse error" in them.  It's okay to give them both the same
+    translation.  */
+ const char d1[] = N_("syntax error");
+ const char d2[] = N_("parse error");
+ const char d3[] = N_("syntax error; also virtual memory exhausted");
+ const char d4[] = N_("parse error; also virtual memory exhausted");
+ const char d5[] = N_("syntax error: cannot back up");
+ const char d6[] = N_("parse error: cannot back up");
+ #endif
diff -Nrcpad gcc-3.4.3/gcc/java/parse.c gcc-4.0.0/gcc/java/parse.c
*** gcc-3.4.3/gcc/java/parse.c	Fri Nov  5 04:18:06 2004
--- gcc-4.0.0/gcc/java/parse.c	Thu Apr 21 07:09:45 2005
***************
*** 1,4 ****
! /* A Bison parser, made from /home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y
     by GNU bison 1.35.  */
  
  #define YYBISON 1  /* Identify Bison output.  */
--- 1,4 ----
! /* A Bison parser, made from /scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y
     by GNU bison 1.35.  */
  
  #define YYBISON 1  /* Identify Bison output.  */
***************
*** 120,126 ****
  # define	BOOL_LIT_TK	364
  # define	NULL_TK	365
  
! #line 49 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  
  #include "config.h"
  #include "system.h"
--- 120,126 ----
  # define	BOOL_LIT_TK	364
  # define	NULL_TK	365
  
! #line 49 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  
  #include "config.h"
  #include "system.h"
***************
*** 132,137 ****
--- 132,139 ----
  #include "real.h"
  #include "obstack.h"
  #include "toplev.h"
+ #include "pretty-print.h"
+ #include "diagnostic.h"
  #include "flags.h"
  #include "java-tree.h"
  #include "jcf.h"
***************
*** 147,155 ****
--- 149,159 ----
  #include "debug.h"
  #include "tree-inline.h"
  #include "cgraph.h"
+ #include "target.h"
  
  /* Local function prototypes */
  static char *java_accstring_lookup (int);
+ static const char *accessibility_string (int);
  static void  classitf_redefinition_error (const char *,tree, tree, tree);
  static void  variable_redefinition_error (tree, tree, tree, int);
  static tree  create_class (int, tree, tree, tree);
*************** static tree lookup_java_method2 (tree, t
*** 168,177 ****
  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 *msg, ...)
!   ATTRIBUTE_PRINTF_2;
! static void issue_warning_error_from_context (tree, const char *msg, va_list)
!   ATTRIBUTE_PRINTF (2, 0);
  static void parse_ctor_invocation_error (void);
  static tree parse_jdk1_1_error (const char *);
  static void complete_class_report_errors (jdep *);
--- 172,185 ----
  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 *msgid, ...);
! #ifdef USE_MAPPED_LOCATION
! static void issue_warning_error_from_context
!   (source_location, const char *msgid, va_list *);
! #else
! static void issue_warning_error_from_context
!   (tree, const char *msgid, va_list *);
! #endif
  static void parse_ctor_invocation_error (void);
  static tree parse_jdk1_1_error (const char *);
  static void complete_class_report_errors (jdep *);
*************** static void read_import_dir (tree);
*** 180,186 ****
  static int find_in_imports_on_demand (tree, tree);
  static void find_in_imports (tree, tree);
  static void check_inner_class_access (tree, tree, tree);
! static int check_pkg_class_access (tree, tree, bool);
  static void register_package (tree);
  static tree resolve_package (tree, tree *, tree *);
  static tree resolve_class (tree, tree, tree, tree);
--- 188,194 ----
  static int find_in_imports_on_demand (tree, tree);
  static void find_in_imports (tree, tree);
  static void check_inner_class_access (tree, tree, tree);
! static int check_pkg_class_access (tree, tree, bool, tree);
  static void register_package (tree);
  static tree resolve_package (tree, tree *, tree *);
  static tree resolve_class (tree, tree, tree, tree);
*************** static tree resolve_expression_name (tre
*** 195,202 ****
  static tree maybe_create_class_interface_decl (tree, tree, tree, tree);
  static int check_class_interface_creation (int, int, tree, tree, tree, tree);
  static tree patch_method_invocation (tree, tree, tree, int, int *, tree *);
- static int breakdown_qualified (tree *, tree *, tree);
- static int in_same_package (tree, tree);
  static tree resolve_and_layout (tree, tree);
  static tree qualify_and_find (tree, tree, tree);
  static tree resolve_no_layout (tree, tree);
--- 203,208 ----
*************** static tree java_complete_tree (tree);
*** 217,222 ****
--- 223,229 ----
  static tree maybe_generate_pre_expand_clinit (tree);
  static int analyze_clinit_body (tree, tree);
  static int maybe_yank_clinit (tree);
+ static void start_complete_expand_method (tree);
  static void java_complete_expand_method (tree);
  static void java_expand_method_bodies (tree);
  static int  unresolved_type_p (tree, tree *);
*************** static int build_type_name_from_array_na
*** 249,255 ****
--- 256,266 ----
  static tree build_array_from_name (tree, tree, tree, tree *);
  static tree build_array_ref (int, tree, tree);
  static tree patch_array_ref (tree);
+ #ifdef USE_MAPPED_LOCATION
+ static tree make_qualified_name (tree, tree, source_location);
+ #else
  static tree make_qualified_name (tree, tree, int);
+ #endif
  static tree merge_qualified_name (tree, tree);
  static tree make_qualified_primary (tree, tree, int);
  static int resolve_qualified_expression_name (tree, tree *, tree *, tree *);
*************** static void check_deprecation (tree, tre
*** 270,276 ****
  static int class_in_current_package (tree);
  static tree build_if_else_statement (int, tree, tree, tree);
  static tree patch_if_else_statement (tree);
- static tree add_stmt_to_compound (tree, tree, tree);
  static tree add_stmt_to_block (tree, tree, tree);
  static tree patch_exit_expr (tree);
  static tree build_labeled_block (int, tree);
--- 281,286 ----
*************** static tree build_string_concatenation (
*** 289,301 ****
--- 299,319 ----
  static tree patch_string_cst (tree);
  static tree patch_string (tree);
  static tree encapsulate_with_try_catch (int, tree, tree, tree);
+ #ifdef USE_MAPPED_LOCATION
+ static tree build_assertion (source_location, tree, tree);
+ #else
  static tree build_assertion (int, tree, tree);
+ #endif
  static tree build_try_statement (int, tree, tree);
  static tree build_try_finally_statement (int, tree, tree);
  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 tree maybe_build_array_element_wf
*** 334,340 ****
  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 tree strip_out_static_field_access_decl (tree);
  static jdeplist *reverse_jdep_list (struct parser_ctxt *);
  static void static_ref_err (tree, tree, tree);
  static void parser_add_interface (tree, tree, tree);
--- 352,357 ----
*************** static int pop_current_osb (struct parse
*** 369,375 ****
  
  static tree maybe_make_nested_class_name (tree);
  static int make_nested_class_name (tree);
- static void set_nested_class_simple_name_value (tree, int);
  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);
--- 386,391 ----
*************** static int outer_field_expanded_access_p
*** 396,402 ****
  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 (int, tree);
  static void patch_anonymous_class (tree, tree, tree);
  static void add_inner_class_fields (tree, tree);
  
--- 412,418 ----
  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);
  static void patch_anonymous_class (tree, tree, tree);
  static void add_inner_class_fields (tree, tree);
  
*************** static tree build_dot_class_method_invoc
*** 405,411 ****
  static void create_new_parser_context (int);
  static tree maybe_build_class_init_for_field (tree, tree);
  
- static int attach_init_test_initialization_flags (void **, void *);
  static int emit_test_initialization (void **, void *);
  
  static char *string_convert_int_cst (tree);
--- 421,426 ----
*************** static GTY(()) tree src_parse_roots[1];
*** 513,533 ****
  } while (0)
  
  
! #line 442 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  #ifndef YYSTYPE
  typedef union {
    tree node;
    int sub_token;
    struct {
      int token;
      int location;
    } operator;
    int value;
  } yystype;
  # define YYSTYPE yystype
  # define YYSTYPE_IS_TRIVIAL 1
  #endif
! #line 452 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  
  #include "lex.c"
  #ifndef YYDEBUG
--- 528,560 ----
  } while (0)
  
  
! #line 457 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  #ifndef YYSTYPE
  typedef union {
    tree node;
    int sub_token;
    struct {
      int token;
+ #ifdef USE_MAPPED_LOCATION
+     source_location location;
+ #else
      int location;
+ #endif
    } operator;
    int value;
  } yystype;
  # define YYSTYPE yystype
  # define YYSTYPE_IS_TRIVIAL 1
  #endif
! #line 471 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! 
! #ifdef USE_MAPPED_LOCATION
! #define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \
!   SET_EXPR_LOCATION(EXPR, (TOKEN).location)
! #else
! #define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \
!   (EXPR_WFL_LINECOL (EXPR) = (TOKEN).location)
! #endif
  
  #include "lex.c"
  #ifndef YYDEBUG
*************** typedef union {
*** 536,547 ****
  
  
  
! #define	YYFINAL		785
  #define	YYFLAG		-32768
  #define	YYNTBASE	112
  
  /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
! #define YYTRANSLATE(x) ((unsigned)(x) <= 365 ? yytranslate[x] : 275)
  
  /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
  static const char yytranslate[] =
--- 563,574 ----
  
  
  
! #define	YYFINAL		791
  #define	YYFLAG		-32768
  #define	YYNTBASE	112
  
  /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
! #define YYTRANSLATE(x) ((unsigned)(x) <= 365 ? yytranslate[x] : 276)
  
  /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
  static const char yytranslate[] =
*************** static const short yyprhs[] =
*** 622,651 ****
       998,  1002,  1006,  1009,  1013,  1019,  1023,  1026,  1030,  1036,
      1042,  1045,  1050,  1054,  1056,  1060,  1064,  1069,  1072,  1074,
      1077,  1080,  1085,  1088,  1092,  1097,  1100,  1103,  1105,  1107,
!     1109,  1111,  1115,  1117,  1119,  1121,  1123,  1125,  1129,  1133,
!     1137,  1141,  1145,  1149,  1153,  1157,  1161,  1167,  1172,  1174,
!     1179,  1185,  1191,  1198,  1202,  1206,  1211,  1217,  1220,  1224,
!     1225,  1233,  1234,  1241,  1245,  1249,  1251,  1255,  1259,  1263,
!     1267,  1272,  1277,  1282,  1287,  1291,  1295,  1297,  1300,  1304,
!     1308,  1311,  1314,  1318,  1322,  1326,  1330,  1333,  1337,  1342,
!     1348,  1355,  1361,  1368,  1373,  1378,  1383,  1388,  1392,  1397,
!     1401,  1406,  1408,  1410,  1412,  1414,  1417,  1420,  1422,  1424,
!     1427,  1429,  1432,  1434,  1437,  1440,  1443,  1446,  1449,  1452,
!     1454,  1457,  1460,  1462,  1465,  1468,  1474,  1479,  1484,  1490,
!     1495,  1498,  1504,  1509,  1515,  1517,  1521,  1525,  1529,  1533,
!     1537,  1541,  1543,  1547,  1551,  1555,  1559,  1561,  1565,  1569,
!     1573,  1577,  1581,  1585,  1587,  1591,  1595,  1599,  1603,  1607,
!     1611,  1615,  1619,  1623,  1627,  1629,  1633,  1637,  1641,  1645,
!     1647,  1651,  1655,  1657,  1661,  1665,  1667,  1671,  1675,  1677,
!     1681,  1685,  1687,  1691,  1695,  1697,  1703,  1708,  1712,  1718,
!     1720,  1722,  1726,  1730,  1732,  1734,  1736,  1738,  1740,  1742
  };
  static const short yyrhs[] =
  {
       125,     0,   106,     0,   107,     0,   110,     0,   105,     0,
       104,     0,   111,     0,   115,     0,   116,     0,    84,     0,
        87,     0,    51,     0,   117,     0,   120,     0,   121,     0,
!      117,     0,   117,     0,   115,   245,     0,   121,   245,     0,
       122,     0,   123,     0,   124,     0,   121,   103,   124,     0,
        88,     0,     0,   128,     0,   126,     0,   127,     0,   128,
       126,     0,   128,   127,     0,   126,   127,     0,   128,   126,
--- 649,679 ----
       998,  1002,  1006,  1009,  1013,  1019,  1023,  1026,  1030,  1036,
      1042,  1045,  1050,  1054,  1056,  1060,  1064,  1069,  1072,  1074,
      1077,  1080,  1085,  1088,  1092,  1097,  1100,  1103,  1105,  1107,
!     1109,  1111,  1113,  1117,  1119,  1121,  1123,  1125,  1127,  1131,
!     1135,  1139,  1143,  1147,  1151,  1155,  1159,  1163,  1169,  1174,
!     1176,  1181,  1187,  1193,  1200,  1204,  1208,  1213,  1219,  1222,
!     1226,  1227,  1235,  1236,  1243,  1247,  1251,  1253,  1257,  1261,
!     1265,  1269,  1274,  1279,  1283,  1287,  1292,  1297,  1301,  1305,
!     1307,  1310,  1314,  1318,  1321,  1324,  1328,  1332,  1336,  1340,
!     1343,  1347,  1352,  1358,  1365,  1371,  1378,  1383,  1388,  1393,
!     1398,  1403,  1407,  1412,  1416,  1421,  1425,  1430,  1432,  1434,
!     1436,  1438,  1441,  1444,  1446,  1448,  1451,  1453,  1456,  1458,
!     1461,  1464,  1467,  1470,  1473,  1476,  1478,  1481,  1484,  1486,
!     1489,  1492,  1498,  1503,  1508,  1514,  1519,  1522,  1528,  1533,
!     1539,  1541,  1545,  1549,  1553,  1557,  1561,  1565,  1567,  1571,
!     1575,  1579,  1583,  1585,  1589,  1593,  1597,  1601,  1605,  1609,
!     1611,  1615,  1619,  1623,  1627,  1631,  1635,  1639,  1643,  1647,
!     1651,  1653,  1657,  1661,  1665,  1669,  1671,  1675,  1679,  1681,
!     1685,  1689,  1691,  1695,  1699,  1701,  1705,  1709,  1711,  1715,
!     1719,  1721,  1727,  1732,  1736,  1742,  1744,  1746,  1750,  1754,
!     1756,  1758,  1760,  1762,  1764,  1766
  };
  static const short yyrhs[] =
  {
       125,     0,   106,     0,   107,     0,   110,     0,   105,     0,
       104,     0,   111,     0,   115,     0,   116,     0,    84,     0,
        87,     0,    51,     0,   117,     0,   120,     0,   121,     0,
!      117,     0,   117,     0,   115,   246,     0,   121,   246,     0,
       122,     0,   123,     0,   124,     0,   121,   103,   124,     0,
        88,     0,     0,   128,     0,   126,     0,   127,     0,   128,
       126,     0,   128,   127,     0,   126,   127,     0,   128,   126,
*************** static const short yyrhs[] =
*** 670,676 ****
       147,    94,   148,     0,   147,    94,     1,     0,   147,    94,
       148,     1,     0,   124,     0,   147,    99,   100,     0,   124,
         1,     0,   147,    99,     1,     0,   147,   100,     1,     0,
!      273,     0,   180,     0,     0,   151,   150,   158,     0,   151,
         1,     0,   114,   152,   156,     0,    60,   152,   156,     0,
       133,   114,   152,   156,     0,   133,    60,   152,   156,     0,
       114,     1,     0,   133,   114,     1,     0,    60,     1,     0,
--- 698,704 ----
       147,    94,   148,     0,   147,    94,     1,     0,   147,    94,
       148,     1,     0,   124,     0,   147,    99,   100,     0,   124,
         1,     0,   147,    99,     1,     0,   147,   100,     1,     0,
!      274,     0,   180,     0,     0,   151,   150,   158,     0,   151,
         1,     0,   114,   152,   156,     0,    60,   152,   156,     0,
       133,   114,   152,   156,     0,   133,    60,   152,   156,     0,
       114,     1,     0,   133,   114,     1,     0,    60,     1,     0,
*************** static const short yyrhs[] =
*** 715,739 ****
        66,     1,     0,   121,   103,    66,    95,     1,     0,   121,
       103,    66,    95,   241,     1,     0,   121,   103,    66,    95,
       241,    96,     1,     0,   121,   103,    66,    95,    96,     1,
!        0,   270,     0,   254,     0,   255,     0,   250,     0,   251,
!        0,   247,     0,   236,     0,    49,    95,   273,    96,   189,
         0,    49,     1,     0,    49,    95,     1,     0,    49,    95,
!      273,     1,     0,    49,    95,   273,    96,   190,    57,   189,
!        0,    49,    95,   273,    96,   190,    57,   190,     0,     0,
!      203,   202,   204,     0,    69,    95,   273,    96,     0,    69,
!        1,     0,    69,    95,     1,     0,    69,    95,   273,    96,
         1,     0,    97,    98,     0,    97,   207,    98,     0,    97,
       205,    98,     0,    97,   205,   207,    98,     0,   206,     0,
       205,   206,     0,   207,   185,     0,   208,     0,   207,   208,
!        0,    63,   274,    90,     0,    48,    90,     0,    63,     1,
!        0,    63,   274,     1,     0,    48,     1,     0,    67,    95,
!      273,    96,     0,   209,   189,     0,    67,     1,     0,    67,
!       95,     1,     0,    67,    95,   273,     1,     0,   209,   190,
!        0,    52,     0,   212,   189,    67,    95,   273,    96,   101,
!        0,   217,   101,   273,   101,   219,    96,   189,     0,   217,
       101,   101,   219,    96,   189,     0,   217,   101,     1,     0,
!      217,   101,   273,   101,     1,     0,   217,   101,   101,     1,
!        0,   217,   101,   273,   101,   219,    96,   190,     0,   217,
       101,   101,   219,    96,   190,     0,    72,    95,     0,    72,
         1,     0,    72,    95,     1,     0,   216,   218,     0,     0,
       220,     0,   188,     0,   220,     1,     0,     0,   220,     0,
--- 743,767 ----
        66,     1,     0,   121,   103,    66,    95,     1,     0,   121,
       103,    66,    95,   241,     1,     0,   121,   103,    66,    95,
       241,    96,     1,     0,   121,   103,    66,    95,    96,     1,
!        0,   271,     0,   255,     0,   256,     0,   251,     0,   252,
!        0,   248,     0,   236,     0,    49,    95,   274,    96,   189,
         0,    49,     1,     0,    49,    95,     1,     0,    49,    95,
!      274,     1,     0,    49,    95,   274,    96,   190,    57,   189,
!        0,    49,    95,   274,    96,   190,    57,   190,     0,     0,
!      203,   202,   204,     0,    69,    95,   274,    96,     0,    69,
!        1,     0,    69,    95,     1,     0,    69,    95,   274,    96,
         1,     0,    97,    98,     0,    97,   207,    98,     0,    97,
       205,    98,     0,    97,   205,   207,    98,     0,   206,     0,
       205,   206,     0,   207,   185,     0,   208,     0,   207,   208,
!        0,    63,   275,    90,     0,    48,    90,     0,    63,     1,
!        0,    63,   275,     1,     0,    48,     1,     0,    67,    95,
!      274,    96,     0,   209,   189,     0,    67,     1,     0,    67,
!       95,     1,     0,    67,    95,   274,     1,     0,   209,   190,
!        0,    52,     0,   212,   189,    67,    95,   274,    96,   101,
!        0,   217,   101,   274,   101,   219,    96,   189,     0,   217,
       101,   101,   219,    96,   189,     0,   217,   101,     1,     0,
!      217,   101,   274,   101,     1,     0,   217,   101,   101,     1,
!        0,   217,   101,   274,   101,   219,    96,   190,     0,   217,
       101,   101,   219,    96,   190,     0,    72,    95,     0,    72,
         1,     0,    72,    95,     1,     0,   216,   218,     0,     0,
       220,     0,   188,     0,   220,     1,     0,     0,   220,     0,
*************** static const short yyrhs[] =
*** 741,822 ****
        55,   101,     0,    55,   124,   101,     0,    55,     1,     0,
        55,   124,     1,     0,    74,   101,     0,    74,   124,   101,
         0,    74,     1,     0,    74,   124,     1,     0,    59,   101,
!        0,    59,   273,   101,     0,    59,     1,     0,    59,   273,
!        1,     0,    50,   273,   101,     0,    50,     1,     0,    50,
!      273,     1,     0,    78,   273,    90,   273,   101,     0,    78,
!      273,   101,     0,    78,     1,     0,    78,   273,     1,     0,
!      227,    95,   273,    96,   182,     0,   227,    95,   273,    96,
         1,     0,   227,     1,     0,   227,    95,     1,    96,     0,
       227,    95,     1,     0,   133,     0,    71,   182,   229,     0,
        71,   182,   232,     0,    71,   182,   229,   232,     0,    71,
         1,     0,   230,     0,   229,   230,     0,   231,   182,     0,
        61,    95,   154,    96,     0,    61,     1,     0,    61,    95,
         1,     0,    61,    95,     1,    96,     0,    65,   182,     0,
!       65,     1,     0,   234,     0,   242,     0,   113,     0,    77,
!        0,    95,   273,    96,     0,   236,     0,   246,     0,   247,
!        0,   248,     0,   235,     0,   121,   103,    77,     0,    95,
!      273,     1,     0,   121,   103,     1,     0,   115,   103,     1,
!        0,    60,   103,     1,     0,   121,   103,    68,     0,   120,
!      103,    68,     0,   115,   103,    68,     0,    60,   103,    68,
!        0,    73,   118,    95,   241,    96,     0,    73,   118,    95,
!       96,     0,   237,     0,   240,   124,    95,    96,     0,   240,
!      124,    95,    96,   140,     0,   240,   124,    95,   241,    96,
!        0,   240,   124,    95,   241,    96,   140,     0,    73,     1,
!      101,     0,    73,   118,     1,     0,    73,   118,    95,     1,
!        0,    73,   118,    95,   241,     1,     0,   240,     1,     0,
!      240,   124,     1,     0,     0,    73,   118,    95,   241,    96,
!      238,   140,     0,     0,    73,   118,    95,    96,   239,   140,
!        0,   121,   103,    73,     0,   233,   103,    73,     0,   273,
!        0,   241,   102,   273,     0,   241,   102,     1,     0,    73,
!      115,   243,     0,    73,   117,   243,     0,    73,   115,   243,
!      245,     0,    73,   117,   243,   245,     0,    73,   117,   245,
!      180,     0,    73,   115,   245,   180,     0,    73,     1,   100,
!        0,    73,     1,    99,     0,   244,     0,   243,   244,     0,
!       99,   273,   100,     0,    99,   273,     1,     0,    99,     1,
!        0,    99,   100,     0,   245,    99,   100,     0,   245,    99,
         1,     0,   233,   103,   124,     0,    66,   103,   124,     0,
        66,     1,     0,   121,    95,    96,     0,   121,    95,   241,
        96,     0,   233,   103,   124,    95,    96,     0,   233,   103,
       124,    95,   241,    96,     0,    66,   103,   124,    95,    96,
         0,    66,   103,   124,    95,   241,    96,     0,    66,   103,
         1,    96,     0,    66,   103,     1,   103,     0,   121,    99,
!      273,   100,     0,   234,    99,   273,   100,     0,   121,    99,
!        1,     0,   121,    99,   273,     1,     0,   234,    99,     1,
!        0,   234,    99,   273,     1,     0,   233,     0,   121,     0,
!      250,     0,   251,     0,   249,    47,     0,   249,    46,     0,
!      254,     0,   255,     0,     3,   253,     0,   256,     0,     3,
!        1,     0,   252,     0,     4,   252,     0,     4,     1,     0,
!       47,   253,     0,    47,     1,     0,    46,   253,     0,    46,
!        1,     0,   249,     0,    91,   253,     0,    92,   253,     0,
!      257,     0,    91,     1,     0,    92,     1,     0,    95,   115,
!      245,    96,   253,     0,    95,   115,    96,   253,     0,    95,
!      273,    96,   256,     0,    95,   121,   245,    96,   256,     0,
!       95,   115,    99,     1,     0,    95,     1,     0,    95,   115,
!      245,    96,     1,     0,    95,   115,    96,     1,     0,    95,
!      121,   245,    96,     1,     0,   253,     0,   258,     5,   253,
!        0,   258,     6,   253,     0,   258,     7,   253,     0,   258,
!        5,     1,     0,   258,     6,     1,     0,   258,     7,     1,
!        0,   258,     0,   259,     3,   258,     0,   259,     4,   258,
!        0,   259,     3,     1,     0,   259,     4,     1,     0,   259,
!        0,   260,     8,   259,     0,   260,     9,   259,     0,   260,
!       10,   259,     0,   260,     8,     1,     0,   260,     9,     1,
!        0,   260,    10,     1,     0,   260,     0,   261,    20,   260,
!        0,   261,    18,   260,     0,   261,    21,   260,     0,   261,
!       19,   260,     0,   261,    58,   116,     0,   261,    20,     1,
!        0,   261,    18,     1,     0,   261,    21,     1,     0,   261,
!       19,     1,     0,   261,    58,     1,     0,   261,     0,   262,
!       16,   261,     0,   262,    17,   261,     0,   262,    16,     1,
!        0,   262,    17,     1,     0,   262,     0,   263,    11,   262,
!        0,   263,    11,     1,     0,   263,     0,   264,    12,   263,
!        0,   264,    12,     1,     0,   264,     0,   265,    13,   264,
!        0,   265,    13,     1,     0,   265,     0,   266,    14,   265,
!        0,   266,    14,     1,     0,   266,     0,   267,    15,   266,
!        0,   267,    15,     1,     0,   267,     0,   267,    89,   273,
!       90,   268,     0,   267,    89,    90,     1,     0,   267,    89,
!        1,     0,   267,    89,   273,    90,     1,     0,   268,     0,
!      270,     0,   271,   272,   269,     0,   271,   272,     1,     0,
!      121,     0,   246,     0,   248,     0,    93,     0,    94,     0,
!      269,     0,   273,     0
  };
  
  #endif
--- 769,852 ----
        55,   101,     0,    55,   124,   101,     0,    55,     1,     0,
        55,   124,     1,     0,    74,   101,     0,    74,   124,   101,
         0,    74,     1,     0,    74,   124,     1,     0,    59,   101,
!        0,    59,   274,   101,     0,    59,     1,     0,    59,   274,
!        1,     0,    50,   274,   101,     0,    50,     1,     0,    50,
!      274,     1,     0,    78,   274,    90,   274,   101,     0,    78,
!      274,   101,     0,    78,     1,     0,    78,   274,     1,     0,
!      227,    95,   274,    96,   182,     0,   227,    95,   274,    96,
         1,     0,   227,     1,     0,   227,    95,     1,    96,     0,
       227,    95,     1,     0,   133,     0,    71,   182,   229,     0,
        71,   182,   232,     0,    71,   182,   229,   232,     0,    71,
         1,     0,   230,     0,   229,   230,     0,   231,   182,     0,
        61,    95,   154,    96,     0,    61,     1,     0,    61,    95,
         1,     0,    61,    95,     1,    96,     0,    65,   182,     0,
!       65,     1,     0,   234,     0,   242,     0,   243,     0,   113,
!        0,    77,     0,    95,   274,    96,     0,   236,     0,   247,
!        0,   248,     0,   249,     0,   235,     0,   121,   103,    77,
!        0,    95,   274,     1,     0,   121,   103,     1,     0,   115,
!      103,     1,     0,    60,   103,     1,     0,   121,   103,    68,
!        0,   120,   103,    68,     0,   115,   103,    68,     0,    60,
!      103,    68,     0,    73,   118,    95,   241,    96,     0,    73,
!      118,    95,    96,     0,   237,     0,   240,   124,    95,    96,
!        0,   240,   124,    95,    96,   140,     0,   240,   124,    95,
!      241,    96,     0,   240,   124,    95,   241,    96,   140,     0,
!       73,     1,   101,     0,    73,   118,     1,     0,    73,   118,
!       95,     1,     0,    73,   118,    95,   241,     1,     0,   240,
!        1,     0,   240,   124,     1,     0,     0,    73,   118,    95,
!      241,    96,   238,   140,     0,     0,    73,   118,    95,    96,
!      239,   140,     0,   121,   103,    73,     0,   233,   103,    73,
!        0,   274,     0,   241,   102,   274,     0,   241,   102,     1,
!        0,    73,   115,   244,     0,    73,   117,   244,     0,    73,
!      115,   244,   246,     0,    73,   117,   244,   246,     0,    73,
!        1,   100,     0,    73,     1,    99,     0,    73,   117,   246,
!      180,     0,    73,   115,   246,   180,     0,    73,     1,   100,
!        0,    73,     1,    99,     0,   245,     0,   244,   245,     0,
!       99,   274,   100,     0,    99,   274,     1,     0,    99,     1,
!        0,    99,   100,     0,   246,    99,   100,     0,   246,    99,
         1,     0,   233,   103,   124,     0,    66,   103,   124,     0,
        66,     1,     0,   121,    95,    96,     0,   121,    95,   241,
        96,     0,   233,   103,   124,    95,    96,     0,   233,   103,
       124,    95,   241,    96,     0,    66,   103,   124,    95,    96,
         0,    66,   103,   124,    95,   241,    96,     0,    66,   103,
         1,    96,     0,    66,   103,     1,   103,     0,   121,    99,
!      274,   100,     0,   234,    99,   274,   100,     0,   243,    99,
!      274,   100,     0,   121,    99,     1,     0,   121,    99,   274,
!        1,     0,   234,    99,     1,     0,   234,    99,   274,     1,
!        0,   243,    99,     1,     0,   243,    99,   274,     1,     0,
!      233,     0,   121,     0,   251,     0,   252,     0,   250,    47,
!        0,   250,    46,     0,   255,     0,   256,     0,     3,   254,
!        0,   257,     0,     3,     1,     0,   253,     0,     4,   253,
!        0,     4,     1,     0,    47,   254,     0,    47,     1,     0,
!       46,   254,     0,    46,     1,     0,   250,     0,    91,   254,
!        0,    92,   254,     0,   258,     0,    91,     1,     0,    92,
!        1,     0,    95,   115,   246,    96,   254,     0,    95,   115,
!       96,   254,     0,    95,   274,    96,   257,     0,    95,   121,
!      246,    96,   257,     0,    95,   115,    99,     1,     0,    95,
!        1,     0,    95,   115,   246,    96,     1,     0,    95,   115,
!       96,     1,     0,    95,   121,   246,    96,     1,     0,   254,
!        0,   259,     5,   254,     0,   259,     6,   254,     0,   259,
!        7,   254,     0,   259,     5,     1,     0,   259,     6,     1,
!        0,   259,     7,     1,     0,   259,     0,   260,     3,   259,
!        0,   260,     4,   259,     0,   260,     3,     1,     0,   260,
!        4,     1,     0,   260,     0,   261,     8,   260,     0,   261,
!        9,   260,     0,   261,    10,   260,     0,   261,     8,     1,
!        0,   261,     9,     1,     0,   261,    10,     1,     0,   261,
!        0,   262,    20,   261,     0,   262,    18,   261,     0,   262,
!       21,   261,     0,   262,    19,   261,     0,   262,    58,   116,
!        0,   262,    20,     1,     0,   262,    18,     1,     0,   262,
!       21,     1,     0,   262,    19,     1,     0,   262,    58,     1,
!        0,   262,     0,   263,    16,   262,     0,   263,    17,   262,
!        0,   263,    16,     1,     0,   263,    17,     1,     0,   263,
!        0,   264,    11,   263,     0,   264,    11,     1,     0,   264,
!        0,   265,    12,   264,     0,   265,    12,     1,     0,   265,
!        0,   266,    13,   265,     0,   266,    13,     1,     0,   266,
!        0,   267,    14,   266,     0,   267,    14,     1,     0,   267,
!        0,   268,    15,   267,     0,   268,    15,     1,     0,   268,
!        0,   268,    89,   274,    90,   269,     0,   268,    89,    90,
!        1,     0,   268,    89,     1,     0,   268,    89,   274,    90,
!        1,     0,   269,     0,   271,     0,   272,   273,   270,     0,
!      272,   273,     1,     0,   121,     0,   247,     0,   249,     0,
!       93,     0,    94,     0,   270,     0,   274,     0
  };
  
  #endif
*************** static const short yyrhs[] =
*** 825,881 ****
  /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
  static const short yyrline[] =
  {
!        0,   603,   608,   610,   611,   612,   613,   614,   618,   620,
!      623,   625,   626,   629,   631,   634,   638,   642,   646,   655,
!      666,   668,   671,   675,   680,   685,   687,   688,   689,   690,
!      691,   692,   693,   696,   701,   707,   709,   712,   718,   720,
!      724,   726,   729,   756,   758,   762,   781,   783,   787,   790,
!      792,   793,   803,   808,   823,   823,   828,   828,   832,   834,
!      836,   841,   845,   847,   849,   851,   855,   857,   859,   866,
!      872,   877,   881,   890,   900,   902,   905,   907,   908,   909,
!      919,   921,   922,   924,   926,   930,   933,   943,   946,   948,
!      952,   955,   962,   968,   976,   978,   980,   982,   987,   991,
!      993,   997,   997,  1009,  1013,  1016,  1018,  1020,  1022,  1027,
!     1032,  1037,  1042,  1049,  1055,  1057,  1066,  1068,  1072,  1077,
!     1082,  1086,  1091,  1096,  1101,  1108,  1118,  1120,  1122,  1126,
!     1129,  1131,  1135,  1137,  1141,  1150,  1166,  1166,  1176,  1179,
!     1183,  1189,  1193,  1202,  1204,  1206,  1210,  1215,  1222,  1230,
!     1232,  1236,  1243,  1253,  1253,  1258,  1258,  1262,  1262,  1266,
!     1266,  1270,  1272,  1276,  1282,  1287,  1289,  1293,  1296,  1300,
!     1302,  1305,  1307,  1308,  1310,  1314,  1318,  1324,  1329,  1332,
!     1334,  1336,  1340,  1346,  1350,  1355,  1358,  1362,  1367,  1381,
!     1383,  1386,  1388,  1390,  1397,  1401,  1404,  1408,  1410,  1411,
!     1412,  1413,  1414,  1418,  1420,  1421,  1422,  1423,  1427,  1429,
!     1430,  1431,  1432,  1433,  1434,  1435,  1436,  1437,  1438,  1439,
!     1442,  1460,  1471,  1474,  1478,  1485,  1495,  1500,  1505,  1510,
!     1512,  1517,  1519,  1524,  1526,  1528,  1530,  1532,  1536,  1538,
!     1539,  1540,  1541,  1542,  1543,  1546,  1552,  1554,  1556,  1560,
!     1565,  1570,  1570,  1586,  1592,  1594,  1596,  1603,  1606,  1608,
!     1610,  1614,  1616,  1619,  1623,  1625,  1628,  1635,  1641,  1643,
!     1645,  1649,  1657,  1660,  1662,  1664,  1668,  1673,  1682,  1687,
!     1694,  1701,  1703,  1705,  1709,  1712,  1721,  1728,  1730,  1734,
!     1747,  1749,  1755,  1761,  1765,  1767,  1771,  1774,  1776,  1780,
!     1783,  1785,  1787,  1791,  1794,  1796,  1798,  1802,  1805,  1807,
!     1809,  1813,  1819,  1821,  1825,  1830,  1834,  1836,  1840,  1847,
!     1849,  1851,  1853,  1857,  1869,  1872,  1874,  1879,  1883,  1885,
!     1892,  1901,  1927,  1929,  1934,  1938,  1941,  1946,  1948,  1951,
!     1953,  1955,  1957,  1958,  1959,  1960,  1961,  1965,  1970,  1972,
!     1974,  1976,  1980,  1983,  1985,  1987,  1994,  1997,  1999,  2003,
!     2009,  2010,  2016,  2017,  2019,  2021,  2023,  2025,  2027,  2036,
!     2036,  2070,  2070,  2087,  2090,  2094,  2100,  2105,  2109,  2112,
!     2114,  2116,  2120,  2131,  2140,  2142,  2146,  2149,  2153,  2164,
!     2166,  2174,  2201,  2203,  2207,  2212,  2218,  2222,  2225,  2227,
!     2238,  2249,  2254,  2263,  2265,  2269,  2272,  2274,  2279,  2284,
!     2289,  2296,  2298,  2299,  2300,  2303,  2308,  2313,  2315,  2316,
!     2318,  2319,  2323,  2329,  2331,  2335,  2338,  2342,  2345,  2349,
!     2351,  2353,  2355,  2356,  2358,  2362,  2371,  2373,  2375,  2389,
!     2391,  2396,  2398,  2400,  2404,  2406,  2411,  2416,  2421,  2423,
!     2425,  2429,  2431,  2436,  2441,  2443,  2447,  2449,  2454,  2459,
!     2464,  2466,  2468,  2472,  2474,  2479,  2484,  2489,  2494,  2496,
!     2498,  2500,  2502,  2504,  2508,  2510,  2515,  2520,  2522,  2526,
!     2528,  2533,  2537,  2539,  2544,  2548,  2550,  2555,  2559,  2561,
!     2566,  2570,  2572,  2577,  2581,  2583,  2588,  2594,  2596,  2600,
!     2602,  2605,  2608,  2615,  2617,  2618,  2621,  2623,  2626,  2630
  };
  #endif
  
--- 855,912 ----
  /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
  static const short yyrline[] =
  {
!        0,   630,   635,   637,   638,   639,   640,   641,   645,   647,
!      650,   652,   653,   656,   658,   661,   665,   669,   673,   682,
!      693,   695,   698,   702,   707,   712,   714,   715,   716,   717,
!      718,   719,   720,   723,   728,   734,   736,   739,   745,   747,
!      751,   753,   756,   783,   785,   789,   808,   810,   814,   817,
!      819,   820,   830,   835,   850,   850,   855,   855,   859,   861,
!      863,   868,   872,   874,   876,   878,   882,   884,   886,   893,
!      899,   904,   908,   916,   925,   927,   930,   932,   933,   934,
!      944,   946,   947,   949,   951,   955,   958,   968,   971,   973,
!      977,   980,   987,   993,  1001,  1003,  1005,  1007,  1012,  1016,
!     1018,  1022,  1022,  1034,  1038,  1041,  1043,  1045,  1047,  1052,
!     1057,  1062,  1067,  1074,  1080,  1082,  1091,  1093,  1097,  1102,
!     1107,  1111,  1116,  1121,  1126,  1133,  1143,  1145,  1147,  1151,
!     1154,  1156,  1160,  1162,  1166,  1175,  1191,  1191,  1201,  1204,
!     1208,  1214,  1218,  1227,  1229,  1231,  1235,  1240,  1247,  1255,
!     1257,  1261,  1268,  1278,  1278,  1283,  1283,  1287,  1287,  1291,
!     1291,  1295,  1297,  1301,  1307,  1312,  1314,  1318,  1321,  1325,
!     1327,  1330,  1332,  1333,  1335,  1339,  1343,  1349,  1354,  1357,
!     1359,  1361,  1365,  1371,  1375,  1380,  1383,  1387,  1392,  1405,
!     1407,  1410,  1412,  1414,  1421,  1425,  1428,  1432,  1434,  1435,
!     1436,  1437,  1438,  1442,  1444,  1445,  1446,  1447,  1451,  1453,
!     1454,  1455,  1456,  1457,  1458,  1459,  1460,  1461,  1462,  1463,
!     1466,  1488,  1499,  1502,  1506,  1513,  1527,  1532,  1537,  1542,
!     1544,  1549,  1551,  1556,  1558,  1560,  1562,  1564,  1568,  1570,
!     1571,  1572,  1573,  1574,  1575,  1578,  1584,  1586,  1588,  1592,
!     1597,  1602,  1602,  1618,  1625,  1627,  1629,  1636,  1639,  1641,
!     1643,  1647,  1649,  1652,  1656,  1658,  1661,  1668,  1674,  1676,
!     1678,  1682,  1690,  1693,  1695,  1697,  1701,  1706,  1715,  1720,
!     1727,  1734,  1736,  1738,  1742,  1745,  1754,  1761,  1763,  1767,
!     1780,  1782,  1788,  1794,  1798,  1800,  1804,  1807,  1809,  1813,
!     1816,  1818,  1820,  1824,  1827,  1829,  1831,  1835,  1838,  1840,
!     1842,  1846,  1852,  1854,  1858,  1863,  1867,  1869,  1873,  1880,
!     1882,  1884,  1886,  1890,  1902,  1905,  1907,  1912,  1916,  1918,
!     1925,  1934,  1960,  1962,  1967,  1971,  1974,  1979,  1981,  1982,
!     1985,  1987,  1989,  1991,  1992,  1993,  1994,  1995,  1999,  2004,
!     2006,  2008,  2010,  2014,  2017,  2019,  2021,  2028,  2031,  2033,
!     2037,  2043,  2044,  2050,  2051,  2053,  2055,  2057,  2059,  2066,
!     2075,  2075,  2109,  2109,  2126,  2129,  2133,  2139,  2144,  2148,
!     2151,  2153,  2155,  2157,  2159,  2163,  2177,  2186,  2188,  2192,
!     2195,  2199,  2210,  2212,  2220,  2247,  2249,  2253,  2258,  2264,
!     2268,  2271,  2273,  2284,  2295,  2300,  2309,  2311,  2315,  2318,
!     2320,  2322,  2327,  2332,  2337,  2342,  2347,  2354,  2356,  2357,
!     2358,  2361,  2366,  2371,  2373,  2374,  2376,  2377,  2381,  2388,
!     2390,  2394,  2397,  2401,  2404,  2408,  2410,  2412,  2414,  2415,
!     2417,  2421,  2430,  2432,  2434,  2448,  2450,  2455,  2457,  2459,
!     2463,  2465,  2470,  2475,  2480,  2482,  2484,  2488,  2490,  2495,
!     2500,  2502,  2506,  2508,  2513,  2518,  2523,  2525,  2527,  2531,
!     2533,  2538,  2543,  2548,  2553,  2555,  2557,  2559,  2561,  2563,
!     2567,  2569,  2574,  2579,  2581,  2585,  2587,  2592,  2596,  2598,
!     2603,  2607,  2609,  2614,  2618,  2620,  2625,  2629,  2631,  2636,
!     2640,  2642,  2647,  2653,  2655,  2659,  2661,  2664,  2667,  2674,
!     2676,  2677,  2680,  2682,  2685,  2689
  };
  #endif
  
*************** static const char *const yytname[] =
*** 946,954 ****
    "finally", "primary", "primary_no_new_array", "type_literals", 
    "class_instance_creation_expression", "anonymous_class_creation", "@10", 
    "@11", "something_dot_new", "argument_list", 
!   "array_creation_expression", "dim_exprs", "dim_expr", "dims", 
!   "field_access", "method_invocation", "array_access", 
!   "postfix_expression", "post_increment_expression", 
    "post_decrement_expression", "trap_overflow_corner_case", 
    "unary_expression", "pre_increment_expression", 
    "pre_decrement_expression", "unary_expression_not_plus_minus", 
--- 977,985 ----
    "finally", "primary", "primary_no_new_array", "type_literals", 
    "class_instance_creation_expression", "anonymous_class_creation", "@10", 
    "@11", "something_dot_new", "argument_list", 
!   "array_creation_uninitialized", "array_creation_initialized", 
!   "dim_exprs", "dim_expr", "dims", "field_access", "method_invocation", 
!   "array_access", "postfix_expression", "post_increment_expression", 
    "post_decrement_expression", "trap_overflow_corner_case", 
    "unary_expression", "pre_increment_expression", 
    "pre_decrement_expression", "unary_expression_not_plus_minus", 
*************** static const short yyr1[] =
*** 998,1021 ****
       221,   221,   221,   222,   222,   222,   222,   223,   223,   223,
       223,   224,   224,   224,   225,   225,   225,   225,   226,   226,
       226,   226,   226,   227,   228,   228,   228,   228,   229,   229,
!      230,   231,   231,   231,   231,   232,   232,   233,   233,   234,
       234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
!      234,   234,   235,   235,   235,   235,   236,   236,   236,   236,
!      236,   236,   236,   236,   236,   236,   236,   236,   236,   238,
!      237,   239,   237,   240,   240,   241,   241,   241,   242,   242,
!      242,   242,   242,   242,   242,   242,   243,   243,   244,   244,
       244,   245,   245,   245,   246,   246,   246,   247,   247,   247,
!      247,   247,   247,   247,   247,   248,   248,   248,   248,   248,
!      248,   249,   249,   249,   249,   250,   251,   252,   252,   252,
!      252,   252,   253,   253,   253,   254,   254,   255,   255,   256,
!      256,   256,   256,   256,   256,   257,   257,   257,   257,   257,
!      257,   257,   257,   257,   258,   258,   258,   258,   258,   258,
!      258,   259,   259,   259,   259,   259,   260,   260,   260,   260,
!      260,   260,   260,   261,   261,   261,   261,   261,   261,   261,
!      261,   261,   261,   261,   262,   262,   262,   262,   262,   263,
!      263,   263,   264,   264,   264,   265,   265,   265,   266,   266,
!      266,   267,   267,   267,   268,   268,   268,   268,   268,   269,
!      269,   270,   270,   271,   271,   271,   272,   272,   273,   274
  };
  
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
--- 1029,1053 ----
       221,   221,   221,   222,   222,   222,   222,   223,   223,   223,
       223,   224,   224,   224,   225,   225,   225,   225,   226,   226,
       226,   226,   226,   227,   228,   228,   228,   228,   229,   229,
!      230,   231,   231,   231,   231,   232,   232,   233,   233,   233,
       234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
!      234,   234,   234,   235,   235,   235,   235,   236,   236,   236,
!      236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
!      238,   237,   239,   237,   240,   240,   241,   241,   241,   242,
!      242,   242,   242,   242,   242,   243,   243,   243,   243,   244,
       244,   245,   245,   245,   246,   246,   246,   247,   247,   247,
!      248,   248,   248,   248,   248,   248,   248,   248,   249,   249,
!      249,   249,   249,   249,   249,   249,   249,   250,   250,   250,
!      250,   251,   252,   253,   253,   253,   253,   253,   254,   254,
!      254,   255,   255,   256,   256,   257,   257,   257,   257,   257,
!      257,   258,   258,   258,   258,   258,   258,   258,   258,   258,
!      259,   259,   259,   259,   259,   259,   259,   260,   260,   260,
!      260,   260,   261,   261,   261,   261,   261,   261,   261,   262,
!      262,   262,   262,   262,   262,   262,   262,   262,   262,   262,
!      263,   263,   263,   263,   263,   264,   264,   264,   265,   265,
!      265,   266,   266,   266,   267,   267,   267,   268,   268,   268,
!      269,   269,   269,   269,   269,   270,   270,   271,   271,   272,
!      272,   272,   273,   273,   274,   275
  };
  
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
*************** static const short yyr2[] =
*** 1055,1077 ****
         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,     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,     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,     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[S] -- default rule to reduce with in state S when YYTABLE
--- 1087,1110 ----
         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[S] -- default rule to reduce with in state S when YYTABLE
*************** static const short yydefact[] =
*** 1093,2450 ****
       110,     0,   126,   108,     0,     0,    87,    90,   126,     0,
        18,    19,   112,     0,     0,   177,   176,   168,   170,     0,
         0,    57,   160,     0,     0,     0,     0,   105,    96,    85,
!        0,     0,     0,     0,   104,   391,     0,   111,   126,   109,
         0,   126,    71,    70,   187,    72,    20,     0,    82,     0,
        74,    76,    80,    81,     0,    77,     0,    78,   136,   126,
        83,    79,     0,    84,    55,   116,   113,     0,   125,     0,
       118,     0,   128,   129,   127,   117,   115,    89,     0,    88,
!       92,     0,     0,     0,     0,     0,     0,     0,   340,     0,
!        0,     0,     0,     6,     5,     2,     3,     4,     7,   339,
!        0,     0,   412,     0,   100,   411,   337,   346,   342,   358,
!        0,   338,   343,   344,   345,   429,   413,   414,   422,   444,
!      417,   418,   420,   432,   451,   456,   463,   474,   479,   482,
!      485,   488,   491,   494,   499,   508,   500,     0,    99,    97,
!       95,    98,   393,   392,   107,    86,   106,     0,   126,    73,
!       75,   103,     0,   134,     0,   138,     0,     0,     0,   277,
!        0,     0,     0,     0,     0,     0,     0,     0,   340,     0,
!        0,   188,     0,     8,    14,   412,     0,   125,   193,     0,
!        0,   208,   185,     0,   189,   191,     0,   192,   197,   209,
!        0,   198,   210,     0,   199,   200,   211,   251,     0,   201,
!        0,   212,   202,   290,     0,   213,   214,   215,   217,   219,
!      216,     0,   218,   244,   243,     0,   241,   242,   239,   240,
!      238,   123,   121,   114,     0,     0,     0,   421,   412,   343,
!      345,   419,   424,   423,   428,   427,   426,   425,     0,   396,
!        0,     0,     0,    16,     0,   433,   430,   434,   431,   440,
!        0,   412,     0,   178,     0,   182,     0,     0,     0,     0,
!        0,     0,    93,     0,     0,   367,     0,   416,   415,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!      506,   507,     0,   140,     0,   139,   133,   102,   132,   137,
!        0,   227,   228,   226,   246,     0,   312,     0,   301,   299,
!        0,   309,   307,     0,   273,     0,   254,     0,   327,     0,
!      287,     0,   305,   303,     0,   316,     0,     0,   195,     0,
!      223,   221,     0,     0,   186,   190,   194,   412,   323,   222,
!      225,     0,   272,     0,   412,   292,   296,   289,     0,     0,
!      320,     0,   120,   119,   124,   122,   131,   130,   351,   355,
!        0,   395,   385,   384,   363,     0,   378,   386,     0,   379,
!        0,   364,     0,     0,     0,    18,    19,   348,   341,   179,
!      180,     0,   350,   354,   353,   397,     0,   375,   407,     0,
!      349,   352,   373,   347,   374,   394,   409,     0,   368,     0,
!      448,   445,   449,   446,   450,   447,   454,   452,   455,   453,
!      460,   457,   461,   458,   462,   459,   470,   465,   472,   467,
!      469,   464,   471,   466,   473,     0,   468,   477,   475,   478,
!      476,   481,   480,   484,   483,   487,   486,   490,   489,   493,
!      492,   497,     0,     0,   502,   501,   141,   412,   142,     0,
!        0,   146,     0,   247,     0,   313,   311,   302,   300,   310,
!      308,   274,     0,   255,     0,     0,     0,   324,   328,     0,
!      325,   288,   306,   304,   317,     0,   315,   341,     0,   196,
!      229,     0,     0,     0,   252,     0,   293,     0,   281,     0,
!        0,   322,     0,   403,   404,     0,   390,     0,   387,   380,
!      383,   381,   382,   365,   357,     0,   442,   436,   439,     0,
!        0,   437,   184,   181,   183,   398,     0,   408,   405,     0,
!      410,   406,   359,     0,   496,     0,     0,   143,     0,     0,
!      144,   248,     0,   275,   271,     0,   332,     0,   336,   335,
!      329,   326,   330,     0,   233,     0,   230,   231,     0,     0,
!        0,   257,     0,   261,     0,   264,     0,   298,   297,   283,
!        0,   295,     0,   321,     0,   401,     0,   389,   388,     0,
!      366,   356,   441,   435,   443,   438,   377,   376,   399,     0,
!      360,   361,   498,   495,     0,   145,     0,     0,     0,   245,
!        0,   197,     0,   204,   205,     0,   206,   207,     0,   256,
!      333,     0,   314,   234,     0,     0,   232,   270,   267,   268,
!      509,     0,   259,   262,     0,   258,     0,   265,     0,     0,
!      282,     0,   319,   318,   402,   372,     0,   400,   362,     0,
!      147,     0,     0,     0,   224,   276,     0,   334,   331,   237,
!      235,     0,   269,   266,   260,     0,   280,     0,   370,     0,
!        0,   148,     0,   249,     0,     0,   236,   278,   279,   150,
!        0,     0,     0,     0,   149,     0,     0,     0,     0,   285,
!        0,   250,   284,     0,     0,     0
  };
  
  static const short yydefgoto[] =
  {
!      783,   209,   282,   210,    86,    87,    69,    61,   211,   212,
        23,    24,    25,     8,     9,    10,    11,    12,    13,    14,
!       15,   448,   288,   133,   106,    48,    71,   105,   131,   159,
!      160,   161,    92,   115,   116,   117,   213,   163,   262,    93,
!      112,   179,   180,   289,   137,   184,   407,   165,   166,   167,
!      264,   168,   169,   409,   558,   559,   290,    18,    44,    73,
!       66,   108,    45,    64,    95,    96,    97,    98,   214,   366,
!      291,   172,   561,   726,   294,   295,   296,   297,   700,   298,
!      299,   300,   301,   703,   302,   303,   304,   305,   704,   306,
!      451,   307,   594,   662,   663,   664,   665,   308,   309,   706,
!      310,   311,   312,   707,   313,   314,   457,   670,   671,   315,
!      316,   317,   318,   319,   320,   321,   322,   577,   578,   579,
!      580,   215,   216,   217,   218,   219,   736,   679,   220,   496,
!      221,   476,   477,   121,   222,   223,   224,   225,   226,   227,
       228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
       238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
!      402,   497,   721
  };
  
  static const short yypact[] =
  {
!      756,-32768,-32768,   269,   -45,   482,   498,-32768,-32768,   874,
!      408,   945,-32768,-32768,-32768,-32768,   556,-32768,-32768,-32768,
!   -32768,-32768,    17,-32768,-32768,-32768,   191,-32768,   307,-32768,
!       34,   426,-32768,-32768,   965,   433,-32768,   -45,   511,-32768,
!   -32768,   476,-32768,   516,   -22,   -13,-32768,   522,    43,-32768,
!   -32768,   -45,   592,   411,-32768,   350,-32768,    29,-32768,-32768,
!   -32768,-32768,   118,  1118,-32768,   532,   -22,-32768,-32768,   186,
!      557,-32768,-32768,   -22,   -13,-32768,    43,-32768,-32768,-32768,
!      562,-32768,-32768,-32768,   564,   144,-32768,-32768,-32768,   210,
!      992,-32768,-32768,    41,-32768,  1255,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,   250,   276,-32768,   -22,-32768,
!   -32768,   245,   475,-32768,   224,   612,-32768,   691,   475,   266,
!      373,   373,-32768,   575,   576,-32768,-32768,-32768,-32768,   595,
!     1045,-32768,-32768,   276,   674,   597,    93,-32768,-32768,-32768,
!      601,  2142,   103,   400,-32768,-32768,   227,-32768,   475,-32768,
!      680,   475,-32768,-32768,-32768,-32768,   389,   794,-32768,  1186,
!   -32768,-32768,-32768,-32768,    16,-32768,   347,-32768,-32768,   450,
!   -32768,-32768,  1862,-32768,-32768,-32768,-32768,   606,   490,   202,
!   -32768,   776,-32768,-32768,   428,-32768,-32768,-32768,   243,-32768,
!   -32768,  2850,  5088,  2902,  2968,   531,    26,   496,-32768,  3020,
!     3086,  3138,  5285,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
!      321,   570,   727,    82,-32768,   619,   441,-32768,-32768,-32768,
!      618,-32768,   572,-32768,   723,   804,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,   797,   837,  1055,   659,   853,   670,
!      716,   731,   733,    21,-32768,-32768,-32768,   810,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,   890,   450,-32768,
!   -32768,-32768,   460,-32768,   347,-32768,   751,   280,  3204,-32768,
!      214,  2194,    11,   371,   401,   225,   416,   260,   665,  3256,
!     5587,-32768,   -45,   321,   570,   937,   548,   448,-32768,   776,
!      668,-32768,-32768,  1862,-32768,-32768,   673,-32768,-32768,-32768,
!     1931,-32768,-32768,   709,-32768,-32768,-32768,-32768,  1931,-32768,
!     1931,-32768,-32768,  1406,   712,-32768,-32768,-32768,-32768,-32768,
!   -32768,   418,-32768,   689,   706,   804,   865,   908,-32768,-32768,
!   -32768,-32768,   858,-32768,   658,   624,   627,-32768,   135,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   430,-32768,
!      632,   987,   730,   730,   420,-32768,-32768,-32768,-32768,-32768,
!      271,   727,   171,-32768,   671,-32768,   555,   485,   765,  5351,
!     2260,   710,-32768,   -19,  3322,-32768,   429,-32768,-32768,  3374,
!     3440,  3492,  3558,  3610,  3676,  3728,  3794,  3846,  3912,  3964,
!     4030,   900,  4082,  4148,  4200,  4266,  4318,  4384,  4436,  2312,
!   -32768,-32768,  4502,-32768,   479,-32768,-32768,-32768,-32768,-32768,
!     1862,-32768,-32768,-32768,-32768,  4554,-32768,    56,-32768,-32768,
!       72,-32768,-32768,    76,-32768,  4620,-32768,  4672,-32768,   635,
!   -32768,  5140,-32768,-32768,   107,-32768,    78,   340,   717,   661,
!   -32768,-32768,   -45,  2378,-32768,-32768,-32768,   795,   490,-32768,
!   -32768,   746,-32768,   779,  1042,-32768,-32768,-32768,    84,  2430,
!   -32768,  4738,-32768,-32768,-32768,   858,-32768,-32768,-32768,-32768,
!      -32,   764,-32768,-32768,-32768,  2496,   730,-32768,   197,   730,
!      197,-32768,  2548,  4790,   228,     3,   507,-32768,  5629,-32768,
!   -32768,  2076,-32768,-32768,-32768,-32768,   519,-32768,-32768,   230,
!   -32768,-32768,-32768,-32768,-32768,   770,-32768,   247,-32768,  5403,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,   797,-32768,   797,
!   -32768,   837,-32768,   837,-32768,   837,-32768,  1055,-32768,  1055,
!   -32768,  1055,-32768,  1055,-32768,   144,-32768,-32768,   659,-32768,
!      659,-32768,   853,-32768,   670,-32768,   716,-32768,   731,-32768,
!      733,-32768,   866,   783,-32768,-32768,-32768,  1101,-32768,  1862,
!      782,-32768,  1862,-32768,   345,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,   349,-32768,   788,   437,   235,   635,-32768,   347,
!   -32768,-32768,-32768,-32768,-32768,  5587,-32768,-32768,   447,   717,
!   -32768,   878,    48,     0,-32768,   792,-32768,  5233,-32768,  5165,
!      796,   812,   818,-32768,-32768,  5469,-32768,   264,-32768,   373,
!   -32768,   373,-32768,-32768,   819,   108,-32768,-32768,-32768,  4856,
!     1241,-32768,-32768,-32768,-32768,-32768,  4908,-32768,-32768,  5521,
!   -32768,-32768,   276,   527,-32768,  4974,   860,-32768,  1862,  2614,
!   -32768,-32768,  1998,-32768,-32768,   261,-32768,  1005,-32768,-32768,
!   -32768,-32768,-32768,   820,-32768,  2666,-32768,-32768,   892,    25,
!     5026,-32768,     2,-32768,  1612,-32768,  5587,-32768,-32768,-32768,
!      828,   825,  5208,-32768,   265,-32768,   553,-32768,-32768,   276,
!   -32768,   832,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   590,
!   -32768,   276,-32768,-32768,   455,-32768,   123,   139,   472,-32768,
!      881,   887,  1998,-32768,-32768,  1998,-32768,-32768,   830,-32768,
!      867,   876,-32768,-32768,   972,   154,-32768,-32768,-32768,-32768,
!   -32768,   273,-32768,-32768,  1686,-32768,  1793,-32768,   880,  1931,
!   -32768,   883,-32768,-32768,-32768,-32768,   276,-32768,-32768,  2732,
!   -32768,   158,  4554,  1931,-32768,-32768,  2784,-32768,-32768,-32768,
!   -32768,   981,-32768,-32768,-32768,   882,-32768,  1931,-32768,   175,
!      162,-32768,   355,-32768,  5165,   884,-32768,-32768,-32768,-32768,
!      211,  1998,   893,  5208,-32768,   934,  1998,   896,  1998,-32768,
!     1998,-32768,-32768,   998,  1000,-32768
  };
  
  static const short yypgoto[] =
  {
!   -32768,-32768,   -62,   -56,   613,    23,  -113,   -24,   333,    -3,
!      -77,-32768,   129,-32768,   994,   755,-32768,    47,-32768,-32768,
!      720,   112,   510,-32768,-32768,   953,   936,-32768,  -125,-32768,
!      856,-32768,   152,  -122,   877,  -154,  -188,-32768,-32768,   396,
!      -33,   766,  -330,  -129,   -93,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,   863,-32768,    38,-32768,   628,   302,-32768,-32768,
!   -32768,-32768,   969,   506,-32768,   939,-32768,-32768,   253,-32768,
!     -114,   777,  -157,  -159,  -283,-32768,   729,  -289,   248,  -531,
!      578,  -503,-32768,-32768,-32768,  -304,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,   367,   382,  -617,  -491,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,  -442,-32768,  -611,   734,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   474,-32768,
!      481,-32768,-32768,-32768,   142,-32768,-32768,-32768,-32768,  -423,
!   -32768,   700,   219,   -61,  1214,   238,  1238,   397,   486,   515,
!      875,  -162,   639,   762,  -482,-32768,   586,   763,   728,   568,
!      677,   678,   672,   681,   683,-32768,   449,   692,   798,-32768,
!   -32768,   257,-32768
  };
  
  
! #define	YYLAST		5740
  
  
  static const short yytable[] =
  {
!       22,    84,   150,    30,   463,   181,   621,    85,   174,   456,
!      445,   449,   349,   293,   365,   292,   171,   261,    39,   452,
!      592,   453,   183,   332,   120,   144,   717,   349,   124,   341,
!       77,   345,   347,    84,    85,    49,   398,   356,   358,    85,
!       62,   100,   125,    21,    62,   171,   104,   727,   659,   657,
!      659,   118,   263,   156,   504,   254,    32,   565,   256,   615,
!       89,   731,    62,   660,   603,   660,    60,    62,    84,    21,
!       68,   604,   177,   567,    85,    63,   265,   569,    85,   584,
!      156,    32,   156,   372,   354,   596,   633,    89,    60,    65,
!      148,   151,    89,    60,   185,   124,    70,    84,   661,   619,
!      722,    85,   146,    85,   249,   153,  -152,   727,   582,   680,
!      399,   701,    16,  -101,   350,   718,   283,  -101,    40,   335,
!       41,    16,    16,    16,   656,    85,    62,    89,   181,   350,
!       78,    89,    62,    26,    28,    50,   444,    51,   685,   702,
!      657,   352,   126,    16,   658,   360,    16,    16,   408,   120,
!      626,   705,    60,   772,    89,   750,    89,   566,    68,   716,
!      438,   429,   777,   750,    16,   405,    53,    55,   585,   285,
!       58,   701,   487,   568,   701,    90,   749,   570,    89,   586,
!       58,   465,   676,   -91,   -91,  -291,   597,   102,   338,   338,
!      338,   338,    42,   186,    62,   177,   338,   338,   361,   702,
!      708,    85,   702,   250,   681,   181,   689,    90,   583,   111,
!      626,   705,   766,   114,   705,   418,   697,   511,   513,   515,
!      353,    51,   120,   467,   740,   138,   428,   442,   252,   618,
!      369,   627,   715,    85,   370,   741,   648,   283,   371,   -63,
!      701,   626,   157,   119,   138,   701,   178,   701,   630,   701,
!      751,   562,   111,   114,    89,    43,   626,   283,   770,   761,
!      708,   432,   709,   708,   626,   677,   732,   488,   702,   188,
!       20,   157,   177,   702,   752,   702,   769,   702,    85,   445,
!      705,   414,   162,   -63,   287,   705,    89,   705,  -153,   705,
!      285,   478,   480,   668,   202,   456,   146,   447,   333,   485,
!      486,   286,    21,   624,   334,   447,   188,   447,    46,   119,
!      454,   162,   774,    51,   323,   419,   760,   711,   -94,   134,
!      589,   617,   154,   -94,   -94,   -94,   -94,   253,   145,   708,
!      628,    89,   154,    62,   708,   535,   708,   -94,   708,   -94,
!      134,   487,   -94,   -94,   -94,   -94,   641,   631,    21,   376,
!      643,    75,   129,   699,   283,   445,   641,    21,  -253,    68,
!      -62,   433,   154,   753,   678,    94,   145,   483,   456,   178,
!      484,    47,   424,   130,   367,   415,   338,   338,   338,   338,
!      338,   338,   338,   338,   338,   338,   338,   338,    89,   338,
!      338,   338,   338,   338,   338,   338,    88,    94,   248,   420,
!      638,   251,   426,   -62,   -62,   287,   434,   557,   -28,     1,
!      324,   188,    72,   449,    47,   609,   452,   430,   611,   460,
!      119,   481,   286,    88,   367,   178,   -31,     1,    88,   286,
!      508,   468,   170,   -30,     1,   323,   587,   286,   646,   286,
!      756,   642,   323,   445,   154,   644,   178,   -62,   654,  -323,
!      323,   771,   323,     2,   763,   323,   654,   683,   362,   248,
!      456,   170,   649,    88,   188,   652,   425,    88,   768,   456,
!        4,     2,   146,   414,   120,    43,     5,    56,     2,   471,
!      338,    57,   699,    27,   257,   338,   492,   756,     4,   763,
!       88,   768,    88,    36,     5,     4,   427,   351,   469,    29,
!       58,     5,   505,   283,   135,   284,   283,   690,  -155,     7,
!       17,   431,    54,   461,    88,   482,    38,    59,   181,    17,
!       17,    17,   287,    67,   509,   417,   164,     7,   423,   135,
!      336,   324,   647,    99,     7,    36,   436,   437,   324,   286,
!      374,    17,   655,  -323,    17,    17,   324,    79,   324,   440,
!      739,   324,   323,   493,   735,   164,   285,   154,   103,   285,
!      733,   406,    17,   110,    21,   113,   738,   742,    58,   325,
!       21,   188,   101,    91,   136,   556,   147,   149,    19,   107,
!       81,   334,   283,    82,    21,   177,    21,    19,    19,    19,
!       88,    85,   -32,     1,   -22,   -22,   152,   637,   182,    21,
!      640,    36,   187,   620,    21,    91,   146,   331,   283,    19,
!       21,   758,    19,    19,   132,   625,   338,   338,    37,   375,
!       21,   626,    88,   691,    38,   464,   284,   499,   466,   626,
!       19,   507,   338,   470,   348,   285,   -22,     2,   441,   447,
!      158,   -22,   -22,   -22,    89,    21,   284,   -22,   324,   734,
!       21,   -22,    21,   490,     4,   626,   553,   491,   326,   462,
!        5,   285,   500,    21,    21,  -504,  -504,    88,   283,   158,
!      283,   287,   564,   368,   287,   175,   695,   387,   388,   389,
!      390,   394,   572,    21,   574,    21,   737,   327,   286,    21,
!      325,   286,   626,     7,    21,   608,   575,   325,   608,   447,
!      576,   323,   447,     2,   323,   325,    21,   325,   173,    79,
!      325,   500,    21,   139,   140,    21,   600,   391,   602,     2,
!       21,   285,   373,   285,    88,    79,   447,   588,   395,   501,
!       33,   610,   607,   612,   502,  -342,  -342,   173,   503,   323,
!      447,   323,    81,   284,   396,    82,    21,   397,   248,    21,
!      287,    33,  -344,  -344,   447,    33,   -25,     1,    81,   178,
!     -151,    82,    21,   443,    31,    58,    35,   286,   447,   489,
!      176,   286,    33,   447,   446,   447,   287,   447,   501,   326,
!      323,   255,   140,   502,   323,   141,   326,   503,  -342,    52,
!      142,   143,  -342,   286,   326,   122,   326,   324,    21,   326,
!      324,     2,   379,   380,   381,  -344,   323,   325,   327,  -344,
!      450,   328,     3,   459,   323,   327,  -505,  -505,     4,   140,
!     -503,  -503,   369,   327,     5,   327,   370,    79,   327,   475,
!      371,   286,     6,   494,   286,   324,   287,   324,   287,    36,
!      382,   383,   653,   593,   323,    79,   595,   323,   411,   412,
!      377,   378,   413,   286,   123,   286,    37,     7,   286,   605,
!       81,   500,    38,    82,    21,   629,   323,   634,   323,   392,
!      393,   323,   286,   635,   -27,     1,   324,   639,    81,   656,
!      324,    82,    21,   687,   645,   323,   286,   666,  -503,  -503,
!      369,  -135,   284,   716,   370,   284,   326,   672,   439,   323,
!      286,   534,   324,   400,   401,   286,   323,   286,   673,   286,
!      324,  -413,  -413,   323,   674,   323,  -371,   720,   323,     2,
!      323,   712,   323,   728,   729,   327,   694,   597,   501,  -369,
!        3,   746,   328,   502,   329,     2,     4,   503,   743,   328,
!      324,    79,     5,   324,  -203,   -26,     1,   328,    21,   328,
!      744,    79,   328,   745,  -414,  -414,   325,   142,   143,   325,
!      538,   540,   324,   747,   324,   -29,     1,   324,   517,   519,
!      330,   284,   748,   749,    81,     7,   755,    82,    21,   757,
!       88,   324,   766,   767,    81,   773,   403,    82,    21,   776,
!        2,   778,   780,   122,   325,   324,   325,   284,   784,   762,
!      785,     3,   324,   765,   536,    34,   710,     4,    76,   324,
!        2,   324,   109,     5,   324,   260,   324,   189,   324,   775,
!      258,     3,    74,   404,   779,   -15,   781,     4,   782,   723,
!     -503,  -503,   369,     5,   128,   325,   370,    36,   560,   325,
!      439,   410,   455,    79,   724,   326,     7,   458,   326,   328,
!        2,   650,   123,   479,    37,   329,    79,   284,   651,   284,
!       38,   325,   329,   384,   385,   386,     7,   343,   546,   325,
!      329,   542,   329,   544,   327,   329,    81,   327,   548,    82,
!       21,   550,     0,   326,   693,   326,   472,   473,   474,    81,
!        2,   330,    82,    21,   555,     0,    79,     0,   330,   325,
!        0,     0,   325,     0,     0,    80,   330,     4,   330,     0,
!        0,   330,   327,     5,   327,   527,   529,   531,   533,     0,
!        0,   325,     0,   325,   326,     0,   325,     0,   326,    81,
!      -15,     0,    82,    21,     0,  -503,  -503,   369,     0,     0,
!      325,   370,   154,   155,     0,   371,     7,   521,   523,   525,
!      326,     0,     0,   327,   325,     0,     0,   327,   326,     0,
!        0,   325,     0,     2,     0,     0,     0,     0,   325,    79,
!      325,     0,   329,   325,     0,   325,     0,   325,    80,   327,
!        4,     0,     0,     0,     0,     0,     5,   327,   326,   -15,
!        0,   326,     0,     0,  -503,  -503,   369,     0,   328,     0,
!      370,   328,    81,     0,   636,    82,    21,     0,   330,     0,
!      326,     0,   326,     0,     0,   326,    83,   327,     0,     0,
!      327,     0,     0,     0,     0,     0,     0,     0,     0,   326,
!        0,     2,     0,     0,     0,     0,   328,    79,   328,   327,
!        0,   327,   684,   326,   327,     0,    80,     0,     4,     0,
!      326,     0,     0,     0,     5,     0,     0,   326,   327,   326,
!        0,     0,   326,     0,   326,     0,   326,     0,     0,     0,
!       81,     0,   327,    82,    21,     0,     0,   328,     0,   327,
!        0,   328,     0,   154,   259,     0,   327,     7,   327,     0,
!        0,   327,    79,   327,     0,   327,     0,     0,     0,     0,
!        2,   195,     0,   328,     0,     0,    79,   196,     0,     0,
!        0,   328,     0,     0,   197,    80,     0,     4,   198,     0,
!        0,   329,     0,     5,   329,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,    81,
!        0,   328,    82,    21,   328,   203,   204,   205,   206,     0,
!        0,   207,   208,   127,     0,     0,     0,   330,     0,   329,
!      330,   329,     0,   328,     0,   328,     0,     0,   328,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,   330,   328,   330,     0,     0,
!      329,     0,     0,   328,   329,   339,   339,   339,   339,     0,
!      328,     0,   328,   339,   339,   328,     0,   328,     0,   328,
!        0,     0,     0,     0,     0,     0,   329,     0,     0,   340,
!      340,   340,   340,     0,   329,     0,   330,   340,   340,     0,
!      330,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     2,   193,   194,     0,     0,     0,    79,     0,     0,
!        0,     0,   330,     0,   329,     0,   195,   329,     0,     0,
!      330,     0,   196,     0,     0,     0,     0,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,   329,     0,   329,     0,
!       81,   329,     0,    82,    21,     0,     0,     0,     0,     0,
!      330,   280,     0,   330,     0,   329,     0,     0,     0,     0,
!      203,   204,   205,   206,     0,     0,   207,   208,     0,   329,
!        0,     0,   330,     0,   330,     0,   329,   330,     0,     0,
!        0,     0,     0,   329,     0,   329,     0,     0,   329,     0,
!      329,   330,   329,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,   330,     0,     0,     0,     0,
!        0,     0,   330,     0,     0,     0,     0,     0,     0,   330,
!        0,   330,     0,     0,   330,     0,   330,     0,   330,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,   339,   339,   339,   339,   339,   339,   339,
!      339,   339,   339,   339,   339,     0,   339,   339,   339,   339,
!      339,   339,   339,   266,     0,     0,     0,   340,   340,   340,
!      340,   340,   340,   340,   340,   340,   340,   340,   340,     0,
!      340,   340,   340,   340,   340,   340,   340,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     2,   193,   194,
!      659,   267,   268,    79,   269,     0,     0,   270,     0,     0,
!        0,   271,   195,     0,     0,   660,     0,     0,   272,   273,
!        5,   274,     0,   275,   276,   197,   277,   266,     0,   278,
!      279,     0,     0,     0,     0,     0,    81,   339,     0,    82,
!       21,     0,   339,     0,     0,     0,     0,   280,     0,   154,
!      725,     0,     0,     7,     0,     0,   203,   204,   205,   206,
!        0,   340,   207,   208,     0,     0,   340,     0,     0,     0,
!        0,     2,   193,   194,   659,   267,   268,    79,   269,     0,
!        0,   270,     0,     0,     0,   271,   195,     0,     0,   660,
!        0,     0,   272,   273,     5,   274,     0,   275,   276,   197,
!      277,     0,     0,   278,   279,     0,     0,     0,     0,     0,
        81,     0,     0,    82,    21,     0,     0,     0,     0,     0,
!        0,   280,     0,   154,   754,     0,     0,     7,     0,     0,
!      203,   204,   205,   206,   266,     0,   207,   208,     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,     0,     0,   339,   339,     0,     0,     0,     2,   193,
!      194,  -263,   267,   268,    79,   269,     0,     0,   270,   339,
!        0,     0,   271,   195,     0,     0,  -263,   340,   340,   272,
!      273,     5,   274,   266,   275,   276,   197,   277,     0,     0,
!      278,   279,     0,   340,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,     0,     0,     0,     0,   280,     0,
!      154,  -263,     0,     0,     7,     0,     0,   203,   204,   205,
!      206,     0,     0,   207,   208,     0,     0,     2,   193,   194,
!        0,   267,   268,    79,   269,     0,     0,   270,     0,     0,
!        0,   271,   195,     0,     0,     0,     0,     0,   272,   273,
!        5,   274,   266,   275,   276,   197,   277,     0,     0,   278,
!      279,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,     0,     0,     0,     0,   280,     0,   154,
!      281,     0,     0,     7,     0,     0,   203,   204,   205,   206,
!        0,     0,   207,   208,     0,     0,     2,   193,   194,     0,
!      267,   268,    79,   269,     0,     0,   270,     0,     0,     0,
!      271,   195,     0,     0,     0,     0,     0,   272,   273,   266,
!      274,     0,   275,   276,   197,   277,     0,     0,   278,   279,
         0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,     0,     0,     0,     0,   280,     0,   154,     0,
!        0,     0,     7,     0,     0,   203,   204,   205,   206,     0,
!        0,   207,   208,     2,   193,   194,     0,   698,   268,    79,
!      269,     0,     0,   270,     0,     0,     0,   271,   195,     0,
!        0,     0,     0,     0,   272,   273,     0,   274,     0,   275,
!      276,   197,   277,     0,     0,   278,   279,   622,     0,   191,
!      192,     0,    81,     0,     0,    82,    21,     0,     0,     0,
!        0,     0,     0,   280,     0,   154,     0,     0,     0,     7,
!        0,     0,   203,   204,   205,   206,     0,     0,   207,   208,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,   193,   194,     0,     0,     0,    79,     0,     0,
!        0,     0,     0,     0,     0,     0,   195,     0,     0,     0,
!        0,     0,   196,   190,     0,   191,   192,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,   202,   623,     0,     0,     0,     0,     0,
!      203,   204,   205,   206,     0,     0,   207,   208,   193,   194,
!        0,     0,     0,    79,     0,   421,     0,   191,   192,     0,
!        0,     0,   195,     0,     0,     0,     0,     0,   196,     0,
!        0,     0,     0,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,     0,   202,
!      193,   194,     0,     0,     0,    79,   203,   204,   205,   206,
!        0,     0,   207,   208,   195,     0,     0,     0,     0,     0,
!      196,   498,     0,   191,   192,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!        0,     0,     0,     0,     0,   422,     0,     0,   203,   204,
!      205,   206,     0,     0,   207,   208,   193,   194,     0,     0,
!        0,    79,     0,   551,     0,   191,   192,     0,     0,     0,
!      195,     0,     0,     0,     0,     0,   196,     0,     0,     0,
!        0,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,   193,   194,
!      145,     0,     0,    79,   203,   204,   205,   206,     0,     0,
!      207,   208,   195,     0,     0,     0,     0,     0,   196,   590,
!        0,   191,   192,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,   552,   199,   200,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,     0,     0,   203,   204,   205,   206,
!        0,     0,   207,   208,   193,   194,     0,     0,     0,    79,
!        0,   598,     0,   191,   192,     0,     0,     0,   195,     0,
!        0,     0,     0,     0,   196,     0,     0,     0,     0,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,   591,     0,   193,   194,     0,     0,
!        0,    79,   203,   204,   205,   206,     0,     0,   207,   208,
!      195,     0,     0,     0,     0,     0,   196,   606,     0,   191,
!      192,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,     0,     0,
!        0,   599,     0,     0,   203,   204,   205,   206,     0,     0,
!      207,   208,   193,   194,     0,     0,     0,    79,     0,   613,
!        0,   191,   192,     0,     0,     0,   195,     0,     0,     0,
!        0,     0,   196,     0,     0,     0,     0,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,     0,   193,   194,   145,     0,     0,    79,
!      203,   204,   205,   206,     0,     0,   207,   208,   195,     0,
!        0,     0,     0,     0,   196,   590,     0,   191,   192,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,   614,     0,     0,     0,     0,     0,
!        0,     0,   203,   204,   205,   206,     0,     0,   207,   208,
!      193,   194,     0,     0,     0,    79,     0,   713,     0,   191,
!      192,     0,     0,     0,   195,     0,     0,     0,     0,     0,
!      196,     0,     0,     0,     0,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!      696,     0,   193,   194,     0,     0,     0,    79,   203,   204,
!      205,   206,     0,     0,   207,   208,   195,     0,     0,     0,
!        0,     0,   196,   713,     0,   191,   192,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,   714,     0,     0,     0,     0,     0,     0,     0,
!      203,   204,   205,   206,     0,     0,   207,   208,   193,   194,
!        0,     0,     0,    79,     0,   598,     0,   191,   192,     0,
!        0,     0,   195,     0,     0,     0,     0,     0,   196,     0,
!        0,     0,     0,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,   759,     0,
!      193,   194,     0,     0,     0,    79,   203,   204,   205,   206,
!        0,     0,   207,   208,   195,     0,     0,     0,     0,     0,
!      196,   337,     0,   191,   192,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!        0,     0,     0,     0,     0,   764,     0,     0,   203,   204,
!      205,   206,     0,     0,   207,   208,   193,   194,     0,     0,
!        0,    79,     0,   344,     0,   191,   192,     0,     0,     0,
!      195,     0,     0,     0,     0,     0,   196,     0,     0,     0,
!        0,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,   193,   194,
!        0,     0,     0,    79,   203,   204,   205,   206,     0,     0,
!      207,   208,   195,     0,     0,     0,     0,     0,   196,   346,
!        0,   191,   192,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,     0,     0,   203,   204,   205,   206,
!        0,     0,   207,   208,   193,   194,     0,     0,     0,    79,
!        0,   355,     0,   191,   192,     0,     0,     0,   195,     0,
!        0,     0,     0,     0,   196,     0,     0,     0,     0,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,     0,   193,   194,     0,     0,
!        0,    79,   203,   204,   205,   206,     0,     0,   207,   208,
!      195,     0,     0,     0,     0,     0,   196,   357,     0,   191,
!      192,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,     0,     0,   203,   204,   205,   206,     0,     0,
!      207,   208,   193,   194,     0,     0,     0,    79,     0,   359,
!        0,   191,   192,     0,     0,     0,   195,     0,     0,     0,
!        0,     0,   196,     0,     0,     0,     0,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,     0,   193,   194,     0,     0,     0,    79,
!      203,   204,   205,   206,     0,     0,   207,   208,   195,     0,
!        0,     0,     0,     0,   196,   416,     0,   191,   192,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!        0,     0,   203,   204,   205,   206,     0,     0,   207,   208,
!      193,   194,     0,     0,     0,    79,     0,   435,     0,   191,
!      192,     0,     0,     0,   195,     0,     0,     0,     0,     0,
!      196,     0,     0,     0,     0,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!        0,     0,   193,   194,     0,     0,     0,    79,   203,   204,
!      205,   206,     0,     0,   207,   208,   195,     0,     0,     0,
!        0,     0,   196,   506,     0,   191,   192,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,     0,     0,
!      203,   204,   205,   206,     0,     0,   207,   208,   193,   194,
!        0,     0,     0,    79,     0,   510,     0,   191,   192,     0,
!        0,     0,   195,     0,     0,     0,     0,     0,   196,     0,
!        0,     0,     0,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,     0,     0,
!      193,   194,     0,     0,     0,    79,   203,   204,   205,   206,
!        0,     0,   207,   208,   195,     0,     0,     0,     0,     0,
!      196,   512,     0,   191,   192,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,     0,     0,   203,   204,
!      205,   206,     0,     0,   207,   208,   193,   194,     0,     0,
!        0,    79,     0,   514,     0,   191,   192,     0,     0,     0,
!      195,     0,     0,     0,     0,     0,   196,     0,     0,     0,
!        0,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,   193,   194,
!        0,     0,     0,    79,   203,   204,   205,   206,     0,     0,
!      207,   208,   195,     0,     0,     0,     0,     0,   196,   516,
!        0,   191,   192,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,     0,     0,   203,   204,   205,   206,
!        0,     0,   207,   208,   193,   194,     0,     0,     0,    79,
!        0,   518,     0,   191,   192,     0,     0,     0,   195,     0,
!        0,     0,     0,     0,   196,     0,     0,     0,     0,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,     0,   193,   194,     0,     0,
!        0,    79,   203,   204,   205,   206,     0,     0,   207,   208,
!      195,     0,     0,     0,     0,     0,   196,   520,     0,   191,
!      192,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,     0,     0,   203,   204,   205,   206,     0,     0,
!      207,   208,   193,   194,     0,     0,     0,    79,     0,   522,
!        0,   191,   192,     0,     0,     0,   195,     0,     0,     0,
!        0,     0,   196,     0,     0,     0,     0,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,     0,   193,   194,     0,     0,     0,    79,
!      203,   204,   205,   206,     0,     0,   207,   208,   195,     0,
!        0,     0,     0,     0,   196,   524,     0,   191,   192,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!        0,     0,   203,   204,   205,   206,     0,     0,   207,   208,
!      193,   194,     0,     0,     0,    79,     0,   526,     0,   191,
!      192,     0,     0,     0,   195,     0,     0,     0,     0,     0,
!      196,     0,     0,     0,     0,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!        0,     0,   193,   194,     0,     0,     0,    79,   203,   204,
!      205,   206,     0,     0,   207,   208,   195,     0,     0,     0,
!        0,     0,   196,   528,     0,   191,   192,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,     0,     0,
!      203,   204,   205,   206,     0,     0,   207,   208,   193,   194,
!        0,     0,     0,    79,     0,   530,     0,   191,   192,     0,
!        0,     0,   195,     0,     0,     0,     0,     0,   196,     0,
!        0,     0,     0,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,     0,     0,
!      193,   194,     0,     0,     0,    79,   203,   204,   205,   206,
!        0,     0,   207,   208,   195,     0,     0,     0,     0,     0,
!      196,   532,     0,   191,   192,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,     0,     0,   203,   204,
!      205,   206,     0,     0,   207,   208,   193,   194,     0,     0,
!        0,    79,     0,   537,     0,   191,   192,     0,     0,     0,
!      195,     0,     0,     0,     0,     0,   196,     0,     0,     0,
!        0,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,   193,   194,
!        0,     0,     0,    79,   203,   204,   205,   206,     0,     0,
!      207,   208,   195,     0,     0,     0,     0,     0,   196,   539,
!        0,   191,   192,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,     0,     0,   203,   204,   205,   206,
!        0,     0,   207,   208,   193,   194,     0,     0,     0,    79,
!        0,   541,     0,   191,   192,     0,     0,     0,   195,     0,
!        0,     0,     0,     0,   196,     0,     0,     0,     0,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,     0,   193,   194,     0,     0,
!        0,    79,   203,   204,   205,   206,     0,     0,   207,   208,
!      195,     0,     0,     0,     0,     0,   196,   543,     0,   191,
!      192,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,     0,     0,   203,   204,   205,   206,     0,     0,
!      207,   208,   193,   194,     0,     0,     0,    79,     0,   545,
!        0,   191,   192,     0,     0,     0,   195,     0,     0,     0,
!        0,     0,   196,     0,     0,     0,     0,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,     0,   193,   194,     0,     0,     0,    79,
!      203,   204,   205,   206,     0,     0,   207,   208,   195,     0,
!        0,     0,     0,     0,   196,   547,     0,   191,   192,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!        0,     0,   203,   204,   205,   206,     0,     0,   207,   208,
!      193,   194,     0,     0,     0,    79,     0,   549,     0,   191,
!      192,     0,     0,     0,   195,     0,     0,     0,     0,     0,
!      196,     0,     0,     0,     0,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!        0,     0,   193,   194,     0,     0,     0,    79,   203,   204,
!      205,   206,     0,     0,   207,   208,   195,     0,     0,     0,
!        0,     0,   196,   554,     0,   191,   192,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,     0,     0,
!      203,   204,   205,   206,     0,     0,   207,   208,   193,   194,
!        0,     0,     0,    79,     0,   563,     0,   191,   192,     0,
!        0,     0,   195,     0,     0,     0,     0,     0,   196,     0,
!        0,     0,     0,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,     0,     0,
!      193,   194,     0,     0,     0,    79,   203,   204,   205,   206,
!        0,     0,   207,   208,   195,     0,     0,     0,     0,     0,
!      196,   571,     0,   191,   192,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!        0,     0,     0,     0,     0,     0,     0,     0,   203,   204,
!      205,   206,     0,     0,   207,   208,   193,   194,     0,     0,
!        0,    79,     0,   573,     0,   191,   192,     0,     0,     0,
!      195,     0,     0,     0,     0,     0,   196,     0,     0,     0,
!        0,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,   193,   194,
!        0,     0,     0,    79,   203,   204,   205,   206,     0,     0,
!      207,   208,   195,     0,     0,     0,     0,     0,   196,   601,
!        0,   191,   192,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,     0,     0,
!        0,     0,     0,     0,     0,     0,   203,   204,   205,   206,
!        0,     0,   207,   208,   193,   194,     0,     0,     0,    79,
!        0,   616,     0,   191,   192,     0,     0,     0,   195,     0,
!        0,     0,     0,     0,   196,     0,     0,     0,     0,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,     0,   193,   194,     0,     0,
!        0,    79,   203,   204,   205,   206,     0,     0,   207,   208,
!      195,     0,     0,     0,     0,     0,   196,   682,     0,   191,
!      192,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     0,     0,     0,
!        0,     0,     0,     0,   203,   204,   205,   206,     0,     0,
!      207,   208,   193,   194,     0,     0,     0,    79,     0,   686,
!        0,   191,   192,     0,     0,     0,   195,     0,     0,     0,
!        0,     0,   196,     0,     0,     0,     0,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,     0,   193,   194,     0,     0,     0,    79,
!      203,   204,   205,   206,     0,     0,   207,   208,   195,     0,
!        0,     0,     0,     0,   196,   692,     0,   191,   192,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,     0,     0,     0,     0,     0,
!        0,     0,   203,   204,   205,   206,     0,     0,   207,   208,
!      193,   194,     0,     0,     0,    79,     0,   719,     0,   191,
!      192,     0,     0,     0,   195,     0,     0,     0,     0,     0,
!      196,     0,     0,     0,     0,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!        0,     0,   193,   194,     0,     0,     0,    79,   203,   204,
!      205,   206,     0,     0,   207,   208,   195,     0,     0,   342,
!        0,   191,   196,     0,     0,     0,     0,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,     0,     0,     0,     0,     0,     0,     0,     0,
!      203,   204,   205,   206,   193,   194,   207,   208,     0,    79,
!        0,   581,     0,     0,     0,     0,     0,     0,   195,     0,
!        0,     0,     0,     0,   196,     0,     0,     0,     0,     0,
!        0,   197,     0,     0,     0,   198,   669,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,  -286,  -286,  -286,     0,     0,
!        0,  -286,   203,   204,   205,   206,     0,     0,   207,   208,
!     -286,     0,     0,     0,     0,     0,  -286,     0,     0,   730,
!        0,   193,   194,  -286,     0,     0,    79,  -286,     0,     0,
!        0,     0,     0,     0,  -286,   195,     0,  -286,  -286,     0,
!        0,   196,     0,     0,   667,  -286,     0,     0,   197,     0,
!        0,  -286,   198,     0,  -286,  -286,  -286,  -286,     0,    81,
!     -286,  -286,    82,    21,   193,   194,     0,     0,     0,    79,
!      280,  -294,     0,     0,     0,     0,     0,     0,   195,   203,
!      204,   205,   206,     0,   196,   207,   208,     0,     0,   193,
!      194,   197,     0,     0,    79,   198,     0,     0,   191,   192,
!        0,     0,    81,   195,     0,    82,    21,     0,     0,   196,
!        0,     0,     0,   280,  -294,     0,   197,     0,     0,     0,
!      198,     0,   203,   204,   205,   206,     0,    81,   207,   208,
!       82,    21,     0,     0,     0,     0,     0,     0,   280,     0,
         0,   193,   194,     0,     0,     0,    79,   203,   204,   205,
       206,     0,     0,   207,   208,   195,     0,     0,     0,     0,
!        0,   196,     0,     0,   191,   192,     0,     0,   197,     0,
         0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
         0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,   202,   363,     0,     0,     0,   364,     0,   203,
       204,   205,   206,     0,     0,   207,   208,   193,   194,     0,
!        0,     0,    79,     0,     0,     0,   191,   192,     0,     0,
         0,   195,     0,     0,     0,     0,     0,   196,     0,     0,
         0,     0,     0,     0,   197,     0,     0,     0,   198,     0,
         0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,   495,     0,   193,
       194,     0,     0,     0,    79,   203,   204,   205,   206,     0,
         0,   207,   208,   195,     0,     0,     0,     0,     0,   196,
!        0,     0,   191,   192,     0,     0,   197,     0,     0,     0,
       198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,   632,
         0,     0,     0,     0,     0,     0,     0,   203,   204,   205,
       206,     0,     0,   207,   208,   193,   194,     0,     0,     0,
!       79,     0,     0,     0,   191,   192,     0,     0,     0,   195,
         0,     0,     0,     0,     0,   196,     0,     0,     0,     0,
         0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
         0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,   675,     0,   193,   194,     0,
         0,     0,    79,   203,   204,   205,   206,     0,     0,   207,
!      208,   195,     0,     0,     0,     0,     0,   196,     0,     0,
       191,   192,     0,     0,   197,     0,     0,     0,   198,     0,
         0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,   688,     0,     0,
         0,     0,     0,     0,     0,   203,   204,   205,   206,     0,
         0,   207,   208,   193,   194,     0,     0,     0,    79,     0,
!        0,     0,     0,     0,     0,     0,     0,   195,     0,     0,
         0,     0,     0,   196,     0,     0,     0,     0,     0,     0,
       197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
         0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!       79,     0,   201,     0,     0,     0,     0,     0,     0,   195,
!        0,   203,   204,   205,   206,   196,     0,   207,   208,     0,
         0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
         0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
       199,   200,     0,     0,   201,     0,     0,     0,     0,     0,
         0,     0,     0,   203,   204,   205,   206,     0,     0,   207,
!      208
  };
  
  static const short yycheck[] =
  {
!        3,    63,   124,     6,   334,   134,   488,    63,   133,   313,
!      293,   300,     1,   172,   202,   172,   130,     1,     1,   308,
!      443,   310,   135,   177,    85,   118,     1,     1,    90,   191,
!        1,   193,   194,    95,    90,     1,    15,   199,   200,    95,
!       43,    65,     1,    88,    47,   159,    70,   664,    48,     1,
!       48,    84,   166,   130,    73,   148,     9,     1,   151,   482,
!       63,   672,    65,    63,    96,    63,    43,    70,   130,    88,
!       47,   103,   134,     1,   130,    97,   169,     1,   134,     1,
!      157,    34,   159,     1,   197,     1,   509,    90,    65,   102,
!      123,   124,    95,    70,     1,   157,    53,   159,    98,    96,
!       98,   157,    99,   159,     1,   129,    95,   724,     1,     1,
!       89,   642,     0,    97,   103,    90,   172,   101,   101,   181,
!      103,     9,    10,    11,     1,   181,   129,   130,   257,   103,
!      101,   134,   135,     4,     5,   101,   293,   103,   620,   642,
!        1,   197,   101,    31,    96,   201,    34,    35,   262,   210,
!      102,   642,   129,   764,   157,     1,   159,   101,   135,     1,
!      282,   275,   773,     1,    52,   258,    37,    38,    90,   172,
!       41,   702,     1,   101,   705,    63,     1,   101,   181,   101,
!       51,   335,   605,   101,   102,   101,   102,     1,   191,   192,
!      193,   194,     1,   100,   197,   257,   199,   200,   201,   702,
!      642,   257,   705,   100,    96,   334,   629,    95,   101,    80,
!      102,   702,     1,    84,   705,     1,   639,   379,   380,   381,
!      197,   103,   283,   336,   101,     1,     1,   289,     1,     1,
!       95,     1,   655,   289,    99,    96,     1,   293,   103,    53,
!      771,   102,   130,    99,     1,   776,   134,   778,     1,   780,
!       96,   410,   123,   124,   257,    64,   102,   313,    96,   101,
!      702,     1,     1,   705,   102,     1,     1,    96,   771,   140,
!        1,   159,   334,   776,     1,   778,   101,   780,   334,   562,
!      771,     1,   130,    97,   172,   776,   289,   778,    97,   780,
!      293,   352,   353,   597,    97,   599,    99,   300,    96,   360,
!      361,   172,    88,   491,   102,   308,   177,   310,     1,    99,
!      313,   159,   101,   103,   172,   101,   739,   647,    94,    95,
!      442,   483,    97,    99,   100,   101,   102,   100,   100,   771,
!      100,   334,    97,   336,   776,   391,   778,    94,   780,    96,
!       95,     1,    99,   100,   101,   102,     1,   100,    88,   220,
!        1,     1,   102,   642,   410,   638,     1,    88,    97,   336,
!       53,   101,    97,    90,   100,    63,   100,    96,   672,   257,
!       99,    64,     1,    97,   103,    95,   379,   380,   381,   382,
       383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
!      393,   394,   395,   396,   397,   398,    63,    95,   141,   270,
!      559,     1,     1,    53,    97,   293,   277,   410,     0,     1,
!      172,   282,     1,   702,    64,   476,   705,     1,   479,     1,
!       99,     1,   293,    90,   103,   313,     0,     1,    95,   300,
!        1,     1,   130,     0,     1,   293,    96,   308,     1,   310,
!      729,    96,   300,   726,    97,    96,   334,    97,     1,     1,
!      308,    96,   310,    45,   743,   313,     1,   619,   201,   202,
!      764,   159,   576,   130,   335,   579,    95,   134,   757,   773,
!       62,    45,    99,     1,   535,    64,    68,     1,    45,   350,
!      483,     5,   771,     1,    95,   488,     1,   776,    62,   778,
!      157,   780,   159,    45,    68,    62,    95,     1,    68,     1,
!      371,    68,   373,   559,    54,   172,   562,   632,    97,   101,
!        0,    95,     1,    95,   181,    95,    68,     1,   647,     9,
!       10,    11,   410,     1,    95,   268,   130,   101,   271,    54,
!      102,   293,    95,     1,   101,    45,   279,   280,   300,   410,
!       99,    31,    95,    95,    34,    35,   308,    51,   310,     1,
!       95,   313,   410,    68,   679,   159,   559,    97,     1,   562,
!      674,   101,    52,     1,    88,     1,   691,    95,   439,   172,
!       88,   442,    66,    63,    99,    96,     1,     1,     0,    73,
!       84,   102,   638,    87,    88,   647,    88,     9,    10,    11,
!      257,   647,     0,     1,    46,    47,     1,   559,     1,    88,
!      562,    45,     1,    96,    88,    95,    99,     1,   664,    31,
!       88,   736,    34,    35,   108,    96,   619,   620,    62,     1,
!       88,   102,   289,    96,    68,     1,   293,   370,     1,   102,
!       52,   374,   635,     1,   103,   638,    88,    45,    90,   642,
!      130,    93,    94,    95,   647,    88,   313,    99,   410,    96,
!       88,   103,    88,    98,    62,   102,   399,   102,   172,     1,
!       68,   664,     1,    88,    88,    93,    94,   334,   724,   159,
!      726,   559,   415,   103,   562,     1,   638,    18,    19,    20,
!       21,    11,   425,    88,   427,    88,    96,   172,   559,    88,
!      293,   562,   102,   101,    88,   476,    61,   300,   479,   702,
!       65,   559,   705,    45,   562,   308,    88,   310,   130,    51,
!      313,     1,    88,   101,   102,    88,   459,    58,   461,    45,
!       88,   724,   103,   726,   391,    51,   729,    66,    12,    68,
!       10,   478,   475,   480,    73,    46,    47,   159,    77,   597,
!      743,   599,    84,   410,    13,    87,    88,    14,   491,    88,
!      638,    31,    46,    47,   757,    35,     0,     1,    84,   647,
!       95,    87,    88,    95,     9,   636,    11,   638,   771,    98,
!       96,   642,    52,   776,   101,   778,   664,   780,    68,   293,
!      638,   101,   102,    73,   642,    94,   300,    77,    99,    34,
!       99,   100,   103,   664,   308,     1,   310,   559,    88,   313,
!      562,    45,     5,     6,     7,    99,   664,   410,   293,   103,
!      101,   172,    56,   101,   672,   300,    93,    94,    62,   102,
!       93,    94,    95,   308,    68,   310,    99,    51,   313,    99,
!      103,   702,    76,    68,   705,   597,   724,   599,   726,    45,
!        3,     4,   585,    97,   702,    51,    67,   705,    97,    98,
!       46,    47,   101,   724,    60,   726,    62,   101,   729,    95,
!       84,     1,    68,    87,    88,    95,   724,     1,   726,    16,
!       17,   729,   743,    90,     0,     1,   638,    95,    84,     1,
!      642,    87,    88,   626,    96,   743,   757,    95,    93,    94,
!       95,    97,   559,     1,    99,   562,   410,   101,   103,   757,
!      771,     1,   664,    93,    94,   776,   764,   778,    96,   780,
!      672,    46,    47,   771,    96,   773,    97,   660,   776,    45,
!      778,   101,   780,   666,    96,   410,    66,   102,    68,    97,
!       56,   101,   293,    73,   172,    45,    62,    77,    57,   300,
!      702,    51,    68,   705,    57,     0,     1,   308,    88,   310,
!      702,    51,   313,   705,    46,    47,   559,    99,   100,   562,
!      392,   393,   724,    96,   726,     0,     1,   729,   382,   383,
!      172,   638,    96,     1,    84,   101,    96,    87,    88,    96,
!      647,   743,     1,   101,    84,   101,    96,    87,    88,    96,
!       45,    57,    96,     1,   597,   757,   599,   664,     0,   742,
!        0,    56,   764,   746,   391,    11,     1,    62,    55,   771,
!       45,   773,    76,    68,   776,   159,   778,   140,   780,   771,
!      157,    56,    53,   257,   776,    88,   778,    62,   780,   662,
!       93,    94,    95,    68,    95,   638,    99,    45,   410,   642,
!      103,   264,   313,    51,   662,   559,   101,   313,   562,   410,
!       45,   577,    60,   353,    62,   293,    51,   724,   577,   726,
!       68,   664,   300,     8,     9,    10,   101,   192,   396,   672,
!      308,   394,   310,   395,   559,   313,    84,   562,   397,    87,
!       88,   398,    -1,   597,   635,   599,    99,   100,   101,    84,
!       45,   293,    87,    88,   402,    -1,    51,    -1,   300,   702,
!       -1,    -1,   705,    -1,    -1,    60,   308,    62,   310,    -1,
!       -1,   313,   597,    68,   599,   387,   388,   389,   390,    -1,
!       -1,   724,    -1,   726,   638,    -1,   729,    -1,   642,    84,
!       88,    -1,    87,    88,    -1,    93,    94,    95,    -1,    -1,
!      743,    99,    97,    98,    -1,   103,   101,   384,   385,   386,
!      664,    -1,    -1,   638,   757,    -1,    -1,   642,   672,    -1,
!       -1,   764,    -1,    45,    -1,    -1,    -1,    -1,   771,    51,
!      773,    -1,   410,   776,    -1,   778,    -1,   780,    60,   664,
!       62,    -1,    -1,    -1,    -1,    -1,    68,   672,   702,    88,
!       -1,   705,    -1,    -1,    93,    94,    95,    -1,   559,    -1,
!       99,   562,    84,    -1,   103,    87,    88,    -1,   410,    -1,
!      724,    -1,   726,    -1,    -1,   729,    98,   702,    -1,    -1,
!      705,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   743,
!       -1,    45,    -1,    -1,    -1,    -1,   597,    51,   599,   724,
!       -1,   726,     1,   757,   729,    -1,    60,    -1,    62,    -1,
!      764,    -1,    -1,    -1,    68,    -1,    -1,   771,   743,   773,
!       -1,    -1,   776,    -1,   778,    -1,   780,    -1,    -1,    -1,
!       84,    -1,   757,    87,    88,    -1,    -1,   638,    -1,   764,
!       -1,   642,    -1,    97,    98,    -1,   771,   101,   773,    -1,
!       -1,   776,    51,   778,    -1,   780,    -1,    -1,    -1,    -1,
!       45,    60,    -1,   664,    -1,    -1,    51,    66,    -1,    -1,
!       -1,   672,    -1,    -1,    73,    60,    -1,    62,    77,    -1,
!       -1,   559,    -1,    68,   562,    84,    -1,    -1,    87,    88,
!       -1,    -1,    91,    92,    -1,    -1,    95,    -1,    -1,    84,
!       -1,   702,    87,    88,   705,   104,   105,   106,   107,    -1,
!       -1,   110,   111,    98,    -1,    -1,    -1,   559,    -1,   597,
!      562,   599,    -1,   724,    -1,   726,    -1,    -1,   729,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,   743,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,   597,   757,   599,    -1,    -1,
!      638,    -1,    -1,   764,   642,   191,   192,   193,   194,    -1,
!      771,    -1,   773,   199,   200,   776,    -1,   778,    -1,   780,
!       -1,    -1,    -1,    -1,    -1,    -1,   664,    -1,    -1,   191,
!      192,   193,   194,    -1,   672,    -1,   638,   199,   200,    -1,
!      642,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    45,    46,    47,    -1,    -1,    -1,    51,    -1,    -1,
!       -1,    -1,   664,    -1,   702,    -1,    60,   705,    -1,    -1,
!      672,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
!       -1,    -1,    -1,    77,    -1,    -1,   724,    -1,   726,    -1,
!       84,   729,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
!      702,    95,    -1,   705,    -1,   743,    -1,    -1,    -1,    -1,
!      104,   105,   106,   107,    -1,    -1,   110,   111,    -1,   757,
!       -1,    -1,   724,    -1,   726,    -1,   764,   729,    -1,    -1,
!       -1,    -1,    -1,   771,    -1,   773,    -1,    -1,   776,    -1,
!      778,   743,   780,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,   757,    -1,    -1,    -1,    -1,
!       -1,    -1,   764,    -1,    -1,    -1,    -1,    -1,    -1,   771,
!       -1,   773,    -1,    -1,   776,    -1,   778,    -1,   780,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,   379,   380,   381,   382,   383,   384,   385,
!      386,   387,   388,   389,   390,    -1,   392,   393,   394,   395,
!      396,   397,   398,     1,    -1,    -1,    -1,   379,   380,   381,
!      382,   383,   384,   385,   386,   387,   388,   389,   390,    -1,
!      392,   393,   394,   395,   396,   397,   398,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -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,   483,    -1,    87,
!       88,    -1,   488,    -1,    -1,    -1,    -1,    95,    -1,    97,
!       98,    -1,    -1,   101,    -1,    -1,   104,   105,   106,   107,
!       -1,   483,   110,   111,    -1,    -1,   488,    -1,    -1,    -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,
!       -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,    -1,    -1,
!       -1,    -1,    -1,   619,   620,    -1,    -1,    -1,    45,    46,
!       47,    48,    49,    50,    51,    52,    -1,    -1,    55,   635,
!       -1,    -1,    59,    60,    -1,    -1,    63,   619,   620,    66,
!       67,    68,    69,     1,    71,    72,    73,    74,    -1,    -1,
!       77,    78,    -1,   635,    -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,    -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,     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,    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,     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,
!       51,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    60,
!       -1,   104,   105,   106,   107,    66,    -1,   110,   111,    -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
  };
  #define YYPURE 1
  
--- 1126,2477 ----
       110,     0,   126,   108,     0,     0,    87,    90,   126,     0,
        18,    19,   112,     0,     0,   177,   176,   168,   170,     0,
         0,    57,   160,     0,     0,     0,     0,   105,    96,    85,
!        0,     0,     0,     0,   104,   394,     0,   111,   126,   109,
         0,   126,    71,    70,   187,    72,    20,     0,    82,     0,
        74,    76,    80,    81,     0,    77,     0,    78,   136,   126,
        83,    79,     0,    84,    55,   116,   113,     0,   125,     0,
       118,     0,   128,   129,   127,   117,   115,    89,     0,    88,
!       92,     0,     0,     0,     0,     0,     0,     0,   341,     0,
!        0,     0,     0,     6,     5,     2,     3,     4,     7,   340,
!        0,     0,   418,     0,   100,   417,   337,   347,   343,   359,
!        0,   338,   339,   344,   345,   346,   435,   419,   420,   428,
!      450,   423,   424,   426,   438,   457,   462,   469,   480,   485,
!      488,   491,   494,   497,   500,   505,   514,   506,     0,    99,
!       97,    95,    98,   396,   395,   107,    86,   106,     0,   126,
!       73,    75,   103,     0,   134,     0,   138,     0,     0,     0,
!      277,     0,     0,     0,     0,     0,     0,     0,     0,   341,
!        0,     0,   188,     0,     8,    14,   418,     0,   125,   193,
!        0,     0,   208,   185,     0,   189,   191,     0,   192,   197,
!      209,     0,   198,   210,     0,   199,   200,   211,   251,     0,
!      201,     0,   212,   202,   290,     0,   213,   214,   215,   217,
!      219,   216,     0,   218,   244,   243,     0,   241,   242,   239,
!      240,   238,   123,   121,   114,     0,     0,     0,   427,   418,
!      344,   346,   425,   430,   429,   434,   433,   432,   431,     0,
!      399,     0,     0,     0,    16,     0,   439,   436,   440,   437,
!      446,     0,   418,     0,   178,     0,   182,     0,     0,     0,
!        0,     0,     0,    93,     0,     0,   368,     0,     0,   422,
!      421,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,   512,   513,     0,   140,     0,   139,   133,   102,
!      132,   137,     0,   227,   228,   226,   246,     0,   312,     0,
!      301,   299,     0,   309,   307,     0,   273,     0,   254,     0,
!      327,     0,   287,     0,   305,   303,     0,   316,     0,     0,
!      195,     0,   223,   221,     0,     0,   186,   190,   194,   418,
!      323,   222,   225,     0,   272,     0,   418,   292,   296,   289,
!        0,     0,   320,     0,   120,   119,   124,   122,   131,   130,
!      352,   356,     0,   398,   384,   383,   364,     0,   379,   389,
!        0,   380,     0,   365,     0,     0,     0,    18,    19,   349,
!      342,   179,   180,     0,   351,   355,   354,   400,     0,   376,
!      411,     0,   350,   353,   374,   348,   375,   397,   413,     0,
!      369,     0,   415,     0,   454,   451,   455,   452,   456,   453,
!      460,   458,   461,   459,   466,   463,   467,   464,   468,   465,
!      476,   471,   478,   473,   475,   470,   477,   472,   479,     0,
!      474,   483,   481,   484,   482,   487,   486,   490,   489,   493,
!      492,   496,   495,   499,   498,   503,     0,     0,   508,   507,
!      141,   418,   142,     0,     0,   146,     0,   247,     0,   313,
!      311,   302,   300,   310,   308,   274,     0,   255,     0,     0,
!        0,   324,   328,     0,   325,   288,   306,   304,   317,     0,
!      315,   342,     0,   196,   229,     0,     0,     0,   252,     0,
!      293,     0,   281,     0,     0,   322,     0,   406,   407,     0,
!      393,     0,   390,   381,   386,   382,   385,   366,   358,     0,
!      448,   442,   445,     0,     0,   443,   184,   181,   183,   401,
!        0,   412,   408,     0,   414,   409,   360,     0,   416,   410,
!      502,     0,     0,   143,     0,     0,   144,   248,     0,   275,
!      271,     0,   332,     0,   336,   335,   329,   326,   330,     0,
!      233,     0,   230,   231,     0,     0,     0,   257,     0,   261,
!        0,   264,     0,   298,   297,   283,     0,   295,     0,   321,
!        0,   404,     0,   392,   391,     0,   367,   357,   447,   441,
!      449,   444,   378,   377,   402,     0,   361,   362,   504,   501,
!        0,   145,     0,     0,     0,   245,     0,   197,     0,   204,
!      205,     0,   206,   207,     0,   256,   333,     0,   314,   234,
!        0,     0,   232,   270,   267,   268,   515,     0,   259,   262,
!        0,   258,     0,   265,     0,     0,   282,     0,   319,   318,
!      405,   373,     0,   403,   363,     0,   147,     0,     0,     0,
!      224,   276,     0,   334,   331,   237,   235,     0,   269,   266,
!      260,     0,   280,     0,   371,     0,     0,   148,     0,   249,
!        0,     0,   236,   278,   279,   150,     0,     0,     0,     0,
!      149,     0,     0,     0,     0,   285,     0,   250,   284,     0,
!        0,     0
  };
  
  static const short yydefgoto[] =
  {
!      789,   209,   283,   210,    86,    87,    69,    61,   211,   212,
        23,    24,    25,     8,     9,    10,    11,    12,    13,    14,
!       15,   450,   289,   133,   106,    48,    71,   105,   131,   159,
!      160,   161,    92,   115,   116,   117,   213,   163,   263,    93,
!      112,   179,   180,   290,   137,   184,   409,   165,   166,   167,
!      265,   168,   169,   411,   562,   563,   291,    18,    44,    73,
!       66,   108,    45,    64,    95,    96,    97,    98,   214,   367,
!      292,   172,   565,   732,   295,   296,   297,   298,   706,   299,
!      300,   301,   302,   709,   303,   304,   305,   306,   710,   307,
!      453,   308,   598,   668,   669,   670,   671,   309,   310,   712,
!      311,   312,   313,   713,   314,   315,   459,   676,   677,   316,
!      317,   318,   319,   320,   321,   322,   323,   581,   582,   583,
!      584,   215,   216,   217,   218,   219,   742,   685,   220,   498,
!      221,   222,   478,   479,   121,   223,   224,   225,   226,   227,
       228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
       238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
!      248,   404,   499,   727
  };
  
  static const short yypact[] =
  {
!      686,-32768,-32768,   470,   -20,   473,   484,-32768,-32768,   369,
!      449,   668,-32768,-32768,-32768,-32768,   458,-32768,-32768,-32768,
!   -32768,-32768,    18,-32768,-32768,-32768,   357,-32768,   259,-32768,
!       54,   590,-32768,-32768,   716,   617,-32768,   -20,   491,-32768,
!   -32768,   271,-32768,   506,    -8,     3,-32768,   523,   177,-32768,
!   -32768,   -20,   689,   375,-32768,   260,-32768,    29,-32768,-32768,
!   -32768,-32768,   138,  1342,-32768,   536,    -8,-32768,-32768,   264,
!      541,-32768,-32768,    -8,     3,-32768,   177,-32768,-32768,-32768,
!      546,-32768,-32768,-32768,   548,   174,-32768,-32768,-32768,   528,
!      988,-32768,-32768,   133,-32768,  1392,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,   220,   230,-32768,    -8,-32768,
!   -32768,   349,   -15,-32768,   317,   -43,-32768,   772,   -15,   335,
!      240,   240,-32768,   605,   608,-32768,-32768,-32768,-32768,   621,
!     1050,-32768,-32768,   230,   886,   631,    46,-32768,-32768,-32768,
!      632,  2057,    51,   455,-32768,-32768,    77,-32768,   -15,-32768,
!      398,   -15,-32768,-32768,-32768,-32768,   373,   888,-32768,  1253,
!   -32768,-32768,-32768,-32768,    70,-32768,   392,-32768,-32768,   485,
!   -32768,-32768,  1777,-32768,-32768,-32768,-32768,   662,   507,   340,
!   -32768,   760,-32768,-32768,   502,-32768,-32768,-32768,   482,-32768,
!   -32768,  2765,  1189,  2817,  2883,   477,    26,   483,-32768,  2935,
!     3001,  3053,  5238,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
!      612,   516,  1101,    60,-32768,   527,   544,-32768,-32768,-32768,
!      676,-32768,   593,   499,-32768,   566,   466,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,   954,   667,  1019,  1022,   777,
!      629,   737,   743,   761,    33,-32768,-32768,-32768,   610,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   906,   485,
!   -32768,-32768,-32768,   694,-32768,   392,-32768,   793,   258,  3119,
!   -32768,    85,  2109,    30,   270,   309,   251,   318,   162,   738,
!     3171,  5540,-32768,   -20,   612,   516,   966,   554,   446,-32768,
!      760,   765,-32768,-32768,  1777,-32768,-32768,   695,-32768,-32768,
!   -32768,  1846,-32768,-32768,   749,-32768,-32768,-32768,-32768,  1846,
!   -32768,  1846,-32768,-32768,  5592,   762,-32768,-32768,-32768,-32768,
!   -32768,-32768,   337,-32768,   850,   931,   466,   784,   854,-32768,
!   -32768,-32768,-32768,   806,-32768,   758,   677,   682,-32768,   726,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    40,
!   -32768,   701,   982,   678,   678,   402,-32768,-32768,-32768,-32768,
!   -32768,   705,  1101,    17,-32768,   785,-32768,   755,    48,   802,
!     5304,  2175,   751,-32768,   437,  3237,-32768,   427,  3289,-32768,
!   -32768,  3355,  3407,  3473,  3525,  3591,  3643,  3709,  3761,  3827,
!     3879,  3945,  3997,   835,  4063,  4115,  4181,  4233,  4299,  4351,
!     4417,  2227,-32768,-32768,  4469,-32768,   419,-32768,-32768,-32768,
!   -32768,-32768,  1777,-32768,-32768,-32768,-32768,  4535,-32768,   134,
!   -32768,-32768,   143,-32768,-32768,   191,-32768,  4587,-32768,  4653,
!   -32768,   823,-32768,  5059,-32768,-32768,   208,-32768,   137,   247,
!      773,   588,-32768,-32768,   -20,  2293,-32768,-32768,-32768,  1138,
!      507,-32768,-32768,   795,-32768,   831,  1014,-32768,-32768,-32768,
!       63,  2345,-32768,  4705,-32768,-32768,-32768,   806,-32768,-32768,
!   -32768,-32768,   198,   808,   809,   811,-32768,  2411,   678,-32768,
!      626,   678,   626,-32768,  2463,  4771,   102,   194,   311,-32768,
!     1076,-32768,-32768,  1991,-32768,-32768,-32768,-32768,   431,-32768,
!   -32768,   106,-32768,-32768,-32768,-32768,-32768,   825,-32768,   186,
!   -32768,  5356,-32768,   241,-32768,-32768,-32768,-32768,-32768,-32768,
!   -32768,   954,-32768,   954,-32768,   667,-32768,   667,-32768,   667,
!   -32768,  1019,-32768,  1019,-32768,  1019,-32768,  1019,-32768,   174,
!   -32768,-32768,  1022,-32768,  1022,-32768,   777,-32768,   629,-32768,
!      737,-32768,   743,-32768,   761,-32768,   934,   848,-32768,-32768,
!   -32768,  1036,-32768,  1777,   849,-32768,  1777,-32768,   278,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,   302,-32768,   851,   451,
!      252,   823,-32768,   392,-32768,-32768,-32768,-32768,-32768,  5540,
!   -32768,-32768,   474,   773,-32768,   953,    64,   603,-32768,   860,
!   -32768,  5152,-32768,  5084,   862,   869,   871,-32768,-32768,  5422,
!   -32768,   244,-32768,   240,-32768,   240,-32768,-32768,   874,    78,
!   -32768,-32768,-32768,  4823,  5195,-32768,-32768,-32768,-32768,-32768,
!     4889,-32768,-32768,  5474,-32768,-32768,   230,   586,-32768,-32768,
!   -32768,  4941,   739,-32768,  1777,  2529,-32768,-32768,  1913,-32768,
!   -32768,   265,-32768,   781,-32768,-32768,-32768,-32768,-32768,   867,
!   -32768,  2581,-32768,-32768,   978,   261,  5007,-32768,   775,-32768,
!     1554,-32768,  5540,-32768,-32768,-32768,   884,   889,  5127,-32768,
!      269,-32768,   598,-32768,-32768,   230,-32768,   890,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,   671,-32768,   230,-32768,-32768,
!      478,-32768,   213,    97,   480,-32768,   929,   938,  1913,-32768,
!   -32768,  1913,-32768,-32768,   898,-32768,   904,   907,-32768,-32768,
!     1004,   108,-32768,-32768,-32768,-32768,-32768,   330,-32768,-32768,
!     1629,-32768,  1698,-32768,   910,  1846,-32768,   912,-32768,-32768,
!   -32768,-32768,   230,-32768,-32768,  2647,-32768,   225,  4535,  1846,
!   -32768,-32768,  2699,-32768,-32768,-32768,-32768,  1008,-32768,-32768,
!   -32768,   913,-32768,  1846,-32768,   228,   111,-32768,   400,-32768,
!     5084,   914,-32768,-32768,-32768,-32768,   239,  1913,   927,  5127,
!   -32768,   967,  1913,   935,  1913,-32768,  1913,-32768,-32768,  1032,
!     1052,-32768
  };
  
  static const short yypgoto[] =
  {
!   -32768,-32768,   -39,   -58,   660,    23,  -112,   359,   -57,    -3,
!      -77,-32768,   144,-32768,  1044,   688,-32768,   266,-32768,-32768,
!       59,    11,   467,-32768,-32768,  1002,   986,-32768,  -132,-32768,
!      905,-32768,   -55,  -111,   930,  -160,  -186,-32768,-32768,   124,
!      -27,   815,  -325,  -130,    -1,-32768,-32768,-32768,-32768,-32768,
!   -32768,-32768,   917,-32768,  -281,-32768,   666,   304,-32768,-32768,
!   -32768,-32768,  1026,   655,-32768,   972,-32768,-32768,   257,-32768,
!     -123,   820,  -158,  -163,  -292,-32768,   776,   150,   235,  -409,
!      212,  -246,-32768,-32768,-32768,  -306,-32768,-32768,-32768,-32768,
!   -32768,-32768,-32768,-32768,   421,   426,  -620,  -218,-32768,-32768,
!   -32768,-32768,-32768,-32768,-32768,  -179,-32768,  -595,   783,-32768,
!   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   524,-32768,
!      534,-32768,-32768,-32768,    36,-32768,-32768,-32768,-32768,  -430,
!   -32768,-32768,   750,    73,   -73,  1177,   132,  1197,   234,   314,
!      444,   919,  -165,   540,   687,  -465,-32768,   556,   733,   646,
!      530,   720,   728,   725,   727,   732,-32768,   487,   729,   757,
!   -32768,-32768,   885,-32768
  };
  
  
! #define	YYLAST		5703
  
  
  static const short yytable[] =
  {
!       22,   174,   447,    30,   181,    85,    88,   171,   458,   294,
!      465,    16,   120,   150,   293,   596,   366,   333,   489,    39,
!       16,    16,    16,   183,    84,   625,   342,   350,   346,   348,
!       77,   350,    85,    88,   357,   359,   171,    85,    88,   135,
!       62,   470,    16,   264,    62,    16,    16,   185,   400,   494,
!      733,   124,   250,   156,   619,    49,    84,   118,   139,   140,
!       89,   373,    62,    16,   600,   663,    60,    62,    21,    33,
!       68,   262,    85,    88,    90,   162,    85,    88,   253,   686,
!      156,   637,   156,   737,   136,   355,   420,    89,    60,    63,
!       33,    84,    89,    60,    33,   177,   148,   151,   663,    85,
!       88,    85,    88,   622,   162,    65,    90,   631,   471,   756,
!      733,    33,   756,   490,   284,   285,   495,   144,   124,    40,
!       84,    41,   401,    85,    88,  -152,    62,    89,   181,   351,
!       78,    89,    62,   351,   125,   569,   446,   120,   588,   353,
!      410,   157,   336,   361,   571,   178,   186,   255,    26,    28,
!      257,   251,    60,   431,    89,    50,    89,    51,    68,   691,
!      664,   -91,   -91,   434,  -291,   601,   630,  -101,   266,   286,
!      157,  -101,   440,    21,   687,   778,   467,   254,    89,   682,
!      630,    53,    55,   288,   783,    58,   421,   634,   339,   339,
!      339,   339,   573,   747,    62,    58,   339,   339,   362,   630,
!       85,    88,   145,   695,   757,   181,   632,   776,   324,   586,
!      630,   120,    19,   630,   662,   703,   515,   517,   519,   177,
!      354,    19,    19,    19,   111,   469,   722,   589,   114,   755,
!       70,   721,    85,    88,   126,   570,   284,   285,   590,   707,
!      772,    51,   638,    19,   572,   683,    19,    19,   489,   566,
!       21,   444,   430,   654,   164,    89,   284,   285,   407,   416,
!       46,    75,   723,   435,    19,   102,   715,   111,   114,   178,
!      738,   426,    56,   119,   447,    32,    57,    85,    88,   647,
!      480,   482,   643,   164,   188,   646,   635,    89,   487,   488,
!      623,   286,   574,   146,   607,   674,   177,   458,   449,   707,
!       32,   608,   707,   649,   325,   288,   449,   628,   449,   587,
!      428,   456,   -62,   -62,   746,   766,   287,   -63,   138,   432,
!      621,   188,   129,    47,    47,   178,   767,   130,   717,   775,
!      324,   758,    89,   593,    62,   539,    88,   324,   462,   146,
!      780,   639,   173,   591,   684,   324,   178,   324,   154,   154,
!      324,   724,   447,   417,   284,   285,   -62,   -62,    42,    21,
!       68,   -63,  -253,   701,   377,   427,   154,    94,   707,   -27,
!        1,   173,   458,   707,   648,   707,    72,   707,   339,   339,
!      339,   339,   339,   339,   339,   339,   339,   339,   339,   339,
!       89,   339,   339,   339,   339,   339,   339,   339,   650,    94,
!      644,   647,   708,   483,   429,   613,   326,   624,   615,   561,
!      146,   -94,   134,   433,     2,   422,   -94,   -94,   -94,   -94,
!      759,    43,   436,   288,   100,     3,   325,   188,   510,   104,
!      711,     4,   463,   325,   170,   145,   334,     5,   287,    43,
!      447,   325,   335,   325,   134,   287,   325,  -323,   324,   -28,
!        1,   451,   652,   287,  -153,   287,   252,   655,   689,   454,
!      658,   455,   708,   170,   458,   708,   120,    17,   258,   714,
!        7,    20,  -155,   458,    27,   660,    17,    17,    17,   660,
!      188,   416,   339,   138,   352,    29,   327,   339,   153,   154,
!      711,    36,    54,   711,     2,   473,   777,   484,    17,   256,
!      140,    17,    17,    36,   696,   284,   285,    59,   284,   285,
!      506,     4,   379,   380,    38,   560,    58,     5,   507,    17,
!       37,   335,   511,   181,    67,    21,    38,   629,   326,   714,
!       91,   708,   714,   630,    79,   326,   708,    99,   708,   135,
!      708,  -323,   103,   326,   325,   326,   653,   110,   326,   113,
!        7,   612,    36,   741,   612,   442,   287,   739,    21,   711,
!      286,    21,    91,   286,   711,   744,   711,    81,   711,   661,
!       82,    21,    21,   745,   288,   748,   -94,   288,   -94,    21,
!      349,   -94,   -94,   -94,   -94,    58,   284,   285,   188,   502,
!      -31,     1,  -510,  -510,    21,    85,    88,   158,   714,   324,
!      -22,   -22,   324,   714,   337,   714,   147,   714,   327,   149,
!      764,    21,   284,   285,   177,   327,   328,   -30,     1,   369,
!      339,   339,   152,   327,    21,   327,   158,   119,   327,    21,
!      374,    51,   182,   187,    21,     2,    21,   324,   339,   324,
!      396,   286,   -22,   375,   443,   449,   326,   -22,   -22,   -22,
!       89,   665,     4,   -22,   592,   288,   503,   -22,     5,  -511,
!     -511,   504,     2,   332,   178,   505,   666,   286,   -26,     1,
!      384,   385,   284,   285,   284,   285,    21,   376,   466,     4,
!      324,   288,   697,   468,   324,     5,   -25,     1,   630,   -32,
!        1,     7,   378,    21,   740,   325,    21,    31,   325,    35,
!      630,   667,   472,   402,   403,   449,   324,   287,   449,    21,
!      287,   119,   329,     2,   324,   368,   -29,     1,     7,    21,
!       21,   101,    52,   202,     3,   146,   327,   286,   107,   286,
!        4,     2,   449,   325,     2,   325,     5,   614,   328,   616,
!      502,   288,     3,   288,   324,   328,   449,   324,     4,   397,
!       21,     4,   502,   328,     5,   328,   398,     5,   328,   464,
!      449,     2,     6,   132,    21,    21,   324,   743,   324,     7,
!       21,   324,     3,   630,   449,   399,   325,   477,     4,   449,
!      325,   449,   716,   449,     5,   324,    58,     7,   287,    21,
!        7,   154,   287,   394,   395,   408,   448,   326,   705,   324,
!      326,   485,   325,     2,   486,   700,   324,   503,   368,    79,
!      325,    79,   504,   324,   287,   324,   505,     7,   324,   503,
!      324,   370,   324,   665,   504,   371,     2,    21,   505,   372,
!     -419,  -419,    79,  -151,   329,   326,   538,   326,   666,    21,
!      325,   329,    81,   325,    81,    82,    21,    82,    21,   329,
!      452,   329,   287,   492,   329,   287,   328,   493,   451,   330,
!      445,   454,   325,   461,   325,    81,   141,   325,    82,    21,
!      496,   142,   143,   728,   287,   140,   287,   327,   326,   287,
!      327,   325,   326,   491,   579,   762,    79,   175,   580,   122,
!      413,   414,   597,   287,   415,   325,  -343,  -343,   599,   769,
!     -420,  -420,   325,   609,   326,   142,   143,   287,  -388,   325,
!     -387,   325,   326,   774,   325,   327,   325,   327,   325,    81,
!      633,   287,    82,    21,   542,   544,   287,   705,   287,   331,
!      287,     2,   762,    36,   769,   640,   774,    79,   641,    79,
!      521,   523,   326,   750,   645,   326,   751,   651,   123,  -343,
!       37,     2,   329,  -343,   662,   672,    38,    79,   327,   381,
!      382,   383,   327,   678,   326,   679,   326,   680,   718,   326,
!       81,  -372,    81,    82,    21,    82,    21,  -345,  -345,   722,
!      735,   330,   176,   326,   327,  -135,   749,  -370,   330,   122,
!       81,   601,   327,    82,    21,  -203,   330,   326,   330,   752,
!      753,   330,   405,   754,   326,   755,   761,   328,   763,   772,
!      328,   326,   781,   326,   773,   779,   326,   785,   326,   787,
!      326,   788,   327,   782,   784,   327,   249,   386,   387,   388,
!     -345,   786,   790,    36,  -345,   531,   533,   535,   537,    79,
!      389,   390,   391,   392,   327,   328,   327,   328,   123,   327,
!       37,   331,   791,   540,   -15,    34,    38,    76,   331,  -509,
!     -509,   370,   109,   327,   261,   371,   331,   128,   331,   441,
!      189,   331,    81,   406,   259,    82,    21,   327,   564,    74,
!      393,   474,   475,   476,   327,   412,   363,   249,   328,   729,
!      457,   327,   328,   327,   730,     2,   327,   460,   327,   330,
!      327,    79,   -15,   329,   481,   656,   329,  -509,  -509,   370,
!       80,   344,     4,   371,   328,   657,   546,   372,     5,   525,
!      527,   529,   328,   550,   -15,   548,   552,    79,   699,  -509,
!     -509,   370,   554,   559,    81,   371,   195,    82,    21,   642,
!        0,   329,   196,   329,     0,     0,     0,   154,   155,   197,
!        0,     7,   328,   198,   419,   328,     0,   425,     0,     0,
!       81,     0,     0,    82,    21,   438,   439,   199,   200,   331,
!        0,   201,     0,     0,   328,     0,   328,     0,     0,   328,
!      203,   204,   205,   206,   329,     0,   207,   208,   329,     0,
!      343,     0,   191,   328,  -509,  -509,   370,     0,     0,     0,
!      371,     0,     0,     0,   372,     0,     0,   328,     0,     0,
!      329,     0,     0,     0,   328,     0,     0,     0,   329,     0,
!        0,   328,     0,   328,     0,     0,   328,     0,   328,     0,
!      328,  -509,  -509,   370,     0,   193,   194,   371,     0,     0,
!       79,   441,     0,     0,     0,     0,     0,     0,   329,   195,
!      330,   329,     0,   330,     0,   196,   501,     0,     0,     0,
!      509,     0,   197,   513,     0,     0,   198,     0,     0,     0,
!      329,     0,   329,    81,     0,   329,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,     0,   557,     0,   330,   329,
!      330,     0,     0,   203,   204,   205,   206,     0,     2,   207,
!      208,     0,   568,   329,    79,     0,     0,     0,     0,     0,
!      329,     0,   576,    80,   578,     4,     0,   329,     0,   329,
!      331,     5,   329,   331,   329,     0,   329,     0,     0,     0,
!        0,   330,     0,     0,     0,   330,     0,    81,     0,     0,
!       82,    21,     0,     0,     0,     0,   604,     0,   606,     0,
!      154,   260,     0,     0,     7,     0,     0,   330,   331,     0,
!      331,     0,   611,     0,     0,   330,     0,     0,   340,   340,
!      340,   340,     0,     0,     0,     0,   340,   340,   249,     0,
!        0,     0,     0,     0,     0,     0,     0,     2,   341,   341,
!      341,   341,     0,    79,     0,   330,   341,   341,   330,     0,
!        0,   331,    80,     0,     4,   331,     0,     0,     0,     0,
!        5,     0,     0,     0,     0,     0,     0,   330,     0,   330,
!        0,     0,   330,     0,     0,     0,    81,   331,     0,    82,
!       21,     0,     0,     0,     0,   331,   330,     2,     0,     0,
!       83,     0,     0,    79,     0,     0,     0,     0,     0,     0,
!      330,     0,    80,     0,     4,     0,     0,   330,     0,     0,
!        5,     0,     0,     0,   330,   331,   330,     0,   331,   330,
!        0,   330,     0,   330,   659,     0,    81,     0,     0,    82,
!       21,     0,     0,     0,     0,     0,     0,   331,     0,   331,
!      127,     0,   331,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,   331,     0,     0,     0,
!        0,     0,     0,     0,     0,   693,     0,     0,     0,     0,
!      331,     0,     0,     0,     0,     0,     0,   331,     0,     0,
!        0,     0,     0,     0,   331,     0,   331,     0,     0,   331,
!        0,   331,     0,   331,     0,     0,     0,     0,     0,     0,
!        0,   726,     0,     0,     0,   267,     0,   734,   340,   340,
!      340,   340,   340,   340,   340,   340,   340,   340,   340,   340,
!        0,   340,   340,   340,   340,   340,   340,   340,   341,   341,
!      341,   341,   341,   341,   341,   341,   341,   341,   341,   341,
!        0,   341,   341,   341,   341,   341,   341,   341,     0,     2,
!      193,   194,   665,   268,   269,    79,   270,     0,     0,   271,
!        0,     0,     0,   272,   195,     0,     0,   666,     0,     0,
!      273,   274,     5,   275,     0,   276,   277,   197,   278,     0,
!      267,   279,   280,   768,     0,     0,     0,   771,    81,     0,
!        0,    82,    21,     0,     0,     0,     0,     0,     0,   281,
!        0,   154,   731,     0,     0,     7,     0,     0,   203,   204,
!      205,   206,   340,     0,   207,   208,     0,   340,     0,     0,
!        0,     0,     0,     0,     2,   193,   194,   665,   268,   269,
!       79,   270,   341,     0,   271,     0,     0,   341,   272,   195,
!        0,     0,   666,     0,     0,   273,   274,     5,   275,   267,
!      276,   277,   197,   278,     0,     0,   279,   280,     0,     0,
!        0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!        0,     0,     0,     0,   281,     0,   154,   760,     0,     0,
!        7,     0,     0,   203,   204,   205,   206,     0,     0,   207,
!      208,     0,     0,     2,   193,   194,  -263,   268,   269,    79,
!      270,     0,     0,   271,     0,     0,     0,   272,   195,     0,
!        0,  -263,     0,     0,   273,   274,     5,   275,     0,   276,
!      277,   197,   278,     0,     0,   279,   280,     0,   267,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,     0,
!        0,     0,     0,   281,     0,   154,  -263,     0,     0,     7,
!      340,   340,   203,   204,   205,   206,     0,     0,   207,   208,
!        0,     0,     0,     0,     0,     0,     0,     0,   340,     0,
!      341,   341,     2,   193,   194,     0,   268,   269,    79,   270,
!        0,     0,   271,     0,     0,     0,   272,   195,   341,     0,
!        0,     0,     0,   273,   274,     5,   275,   267,   276,   277,
!      197,   278,     0,     0,   279,   280,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,     0,     0,
!        0,     0,   281,     0,   154,   282,     0,     0,     7,     0,
!        0,   203,   204,   205,   206,     0,     0,   207,   208,     0,
!        0,     2,   193,   194,     0,   268,   269,    79,   270,     0,
!        0,   271,     0,     0,     0,   272,   195,     0,     0,     0,
!        0,     0,   273,   274,   267,   275,     0,   276,   277,   197,
!      278,     0,     0,   279,   280,     0,     0,     0,     0,     0,
        81,     0,     0,    82,    21,     0,     0,     0,     0,     0,
!        0,   281,     0,   154,     0,     0,     0,     7,     0,     0,
!      203,   204,   205,   206,     0,     0,   207,   208,     2,   193,
!      194,     0,   704,   269,    79,   270,     0,     0,   271,     0,
!        0,     0,   272,   195,     0,     0,     0,     0,     0,   273,
!      274,     0,   275,     0,   276,   277,   197,   278,     0,     0,
!      279,   280,   626,     0,   191,   192,     0,    81,     0,     0,
!       82,    21,     0,     0,     0,     0,     0,     0,   281,     0,
!      154,     0,     0,     0,     7,     0,     0,   203,   204,   205,
!      206,     0,     0,   207,   208,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,   193,   194,     0,
!        0,     0,    79,     0,     0,     0,     0,     0,     0,     0,
!        0,   195,     0,     0,     0,     0,     0,   196,   190,     0,
!      191,   192,     0,     0,   197,     0,     0,     0,   198,     0,
         0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,   202,   627,
!        0,     0,     0,     0,     0,   203,   204,   205,   206,     0,
!        0,   207,   208,   193,   194,     0,     0,     0,    79,     0,
!      423,     0,   191,   192,     0,     0,     0,   195,     0,     0,
!        0,     0,     0,   196,     0,     0,     0,     0,     0,     0,
!      197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,     0,   202,   193,   194,     0,     0,     0,
!       79,   203,   204,   205,   206,     0,     0,   207,   208,   195,
!        0,     0,     0,     0,     0,   196,   500,     0,   191,   192,
!        0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,     0,     0,     0,     0,     0,
!      424,     0,     0,   203,   204,   205,   206,     0,     0,   207,
!      208,   193,   194,     0,     0,     0,    79,     0,   555,     0,
!      191,   192,     0,     0,     0,   195,     0,     0,     0,     0,
!        0,   196,     0,     0,     0,     0,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,   193,   194,   145,     0,     0,    79,   203,
!      204,   205,   206,     0,     0,   207,   208,   195,     0,     0,
!        0,     0,     0,   196,   594,     0,   191,   192,     0,     0,
!      197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,   556,   199,   200,
!        0,     0,   201,     0,     0,     0,     0,     0,     0,     0,
!        0,   203,   204,   205,   206,     0,     0,   207,   208,   193,
!      194,     0,     0,     0,    79,     0,   602,     0,   191,   192,
!        0,     0,     0,   195,     0,     0,     0,     0,     0,   196,
!        0,     0,     0,     0,     0,     0,   197,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,   595,
         0,   193,   194,     0,     0,     0,    79,   203,   204,   205,
       206,     0,     0,   207,   208,   195,     0,     0,     0,     0,
!        0,   196,   610,     0,   191,   192,     0,     0,   197,     0,
         0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
         0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,     0,     0,     0,   603,     0,     0,   203,
       204,   205,   206,     0,     0,   207,   208,   193,   194,     0,
!        0,     0,    79,     0,   617,     0,   191,   192,     0,     0,
         0,   195,     0,     0,     0,     0,     0,   196,     0,     0,
         0,     0,     0,     0,   197,     0,     0,     0,   198,     0,
         0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,   193,
!      194,   145,     0,     0,    79,   203,   204,   205,   206,     0,
!        0,   207,   208,   195,     0,     0,     0,     0,     0,   196,
!      594,     0,   191,   192,     0,     0,   197,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,   618,
!        0,     0,     0,     0,     0,     0,     0,   203,   204,   205,
!      206,     0,     0,   207,   208,   193,   194,     0,     0,     0,
!       79,     0,   719,     0,   191,   192,     0,     0,     0,   195,
!        0,     0,     0,     0,     0,   196,     0,     0,     0,     0,
!        0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,   702,     0,   193,   194,     0,
!        0,     0,    79,   203,   204,   205,   206,     0,     0,   207,
!      208,   195,     0,     0,     0,     0,     0,   196,   719,     0,
!      191,   192,     0,     0,   197,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,   720,     0,     0,
!        0,     0,     0,     0,     0,   203,   204,   205,   206,     0,
!        0,   207,   208,   193,   194,     0,     0,     0,    79,     0,
!      602,     0,   191,   192,     0,     0,     0,   195,     0,     0,
!        0,     0,     0,   196,     0,     0,     0,     0,     0,     0,
!      197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,   765,     0,   193,   194,     0,     0,     0,
!       79,   203,   204,   205,   206,     0,     0,   207,   208,   195,
!        0,     0,     0,     0,     0,   196,   338,     0,   191,   192,
!        0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,     0,     0,     0,     0,     0,
!      770,     0,     0,   203,   204,   205,   206,     0,     0,   207,
!      208,   193,   194,     0,     0,     0,    79,     0,   345,     0,
!      191,   192,     0,     0,     0,   195,     0,     0,     0,     0,
!        0,   196,     0,     0,     0,     0,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,   193,   194,     0,     0,     0,    79,   203,
!      204,   205,   206,     0,     0,   207,   208,   195,     0,     0,
!        0,     0,     0,   196,   347,     0,   191,   192,     0,     0,
!      197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,     0,     0,     0,     0,     0,     0,     0,
!        0,   203,   204,   205,   206,     0,     0,   207,   208,   193,
!      194,     0,     0,     0,    79,     0,   356,     0,   191,   192,
!        0,     0,     0,   195,     0,     0,     0,     0,     0,   196,
!        0,     0,     0,     0,     0,     0,   197,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,     0,
!        0,   193,   194,     0,     0,     0,    79,   203,   204,   205,
!      206,     0,     0,   207,   208,   195,     0,     0,     0,     0,
!        0,   196,   358,     0,   191,   192,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,     0,     0,     0,     0,     0,     0,   203,
!      204,   205,   206,     0,     0,   207,   208,   193,   194,     0,
!        0,     0,    79,     0,   360,     0,   191,   192,     0,     0,
!        0,   195,     0,     0,     0,     0,     0,   196,     0,     0,
!        0,     0,     0,     0,   197,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,   193,
       194,     0,     0,     0,    79,   203,   204,   205,   206,     0,
         0,   207,   208,   195,     0,     0,     0,     0,     0,   196,
!      418,     0,   191,   192,     0,     0,   197,     0,     0,     0,
       198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,     0,
         0,     0,     0,     0,     0,     0,     0,   203,   204,   205,
       206,     0,     0,   207,   208,   193,   194,     0,     0,     0,
!       79,     0,   437,     0,   191,   192,     0,     0,     0,   195,
         0,     0,     0,     0,     0,   196,     0,     0,     0,     0,
         0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
         0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,     0,     0,   193,   194,     0,
         0,     0,    79,   203,   204,   205,   206,     0,     0,   207,
!      208,   195,     0,     0,     0,     0,     0,   196,   508,     0,
       191,   192,     0,     0,   197,     0,     0,     0,   198,     0,
         0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,     0,
         0,     0,     0,     0,     0,   203,   204,   205,   206,     0,
         0,   207,   208,   193,   194,     0,     0,     0,    79,     0,
!      512,     0,   191,   192,     0,     0,     0,   195,     0,     0,
         0,     0,     0,   196,     0,     0,     0,     0,     0,     0,
       197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
         0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,     0,     0,   193,   194,     0,     0,     0,
!       79,   203,   204,   205,   206,     0,     0,   207,   208,   195,
!        0,     0,     0,     0,     0,   196,   514,     0,   191,   192,
         0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
         0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
       199,   200,     0,     0,   201,     0,     0,     0,     0,     0,
         0,     0,     0,   203,   204,   205,   206,     0,     0,   207,
!      208,   193,   194,     0,     0,     0,    79,     0,   516,     0,
!      191,   192,     0,     0,     0,   195,     0,     0,     0,     0,
!        0,   196,     0,     0,     0,     0,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,   193,   194,     0,     0,     0,    79,   203,
!      204,   205,   206,     0,     0,   207,   208,   195,     0,     0,
!        0,     0,     0,   196,   518,     0,   191,   192,     0,     0,
!      197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,     0,     0,     0,     0,     0,     0,     0,
!        0,   203,   204,   205,   206,     0,     0,   207,   208,   193,
!      194,     0,     0,     0,    79,     0,   520,     0,   191,   192,
!        0,     0,     0,   195,     0,     0,     0,     0,     0,   196,
!        0,     0,     0,     0,     0,     0,   197,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,     0,
!        0,   193,   194,     0,     0,     0,    79,   203,   204,   205,
!      206,     0,     0,   207,   208,   195,     0,     0,     0,     0,
!        0,   196,   522,     0,   191,   192,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,     0,     0,     0,     0,     0,     0,   203,
!      204,   205,   206,     0,     0,   207,   208,   193,   194,     0,
!        0,     0,    79,     0,   524,     0,   191,   192,     0,     0,
!        0,   195,     0,     0,     0,     0,     0,   196,     0,     0,
!        0,     0,     0,     0,   197,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,   193,
!      194,     0,     0,     0,    79,   203,   204,   205,   206,     0,
!        0,   207,   208,   195,     0,     0,     0,     0,     0,   196,
!      526,     0,   191,   192,     0,     0,   197,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,     0,
!        0,     0,     0,     0,     0,     0,     0,   203,   204,   205,
!      206,     0,     0,   207,   208,   193,   194,     0,     0,     0,
!       79,     0,   528,     0,   191,   192,     0,     0,     0,   195,
!        0,     0,     0,     0,     0,   196,     0,     0,     0,     0,
!        0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,     0,     0,   193,   194,     0,
!        0,     0,    79,   203,   204,   205,   206,     0,     0,   207,
!      208,   195,     0,     0,     0,     0,     0,   196,   530,     0,
!      191,   192,     0,     0,   197,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,     0,
!        0,     0,     0,     0,     0,   203,   204,   205,   206,     0,
!        0,   207,   208,   193,   194,     0,     0,     0,    79,     0,
!      532,     0,   191,   192,     0,     0,     0,   195,     0,     0,
!        0,     0,     0,   196,     0,     0,     0,     0,     0,     0,
!      197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,     0,     0,   193,   194,     0,     0,     0,
!       79,   203,   204,   205,   206,     0,     0,   207,   208,   195,
!        0,     0,     0,     0,     0,   196,   534,     0,   191,   192,
!        0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,     0,     0,     0,     0,     0,
!        0,     0,     0,   203,   204,   205,   206,     0,     0,   207,
!      208,   193,   194,     0,     0,     0,    79,     0,   536,     0,
!      191,   192,     0,     0,     0,   195,     0,     0,     0,     0,
!        0,   196,     0,     0,     0,     0,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,   193,   194,     0,     0,     0,    79,   203,
!      204,   205,   206,     0,     0,   207,   208,   195,     0,     0,
!        0,     0,     0,   196,   541,     0,   191,   192,     0,     0,
!      197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,     0,     0,     0,     0,     0,     0,     0,
!        0,   203,   204,   205,   206,     0,     0,   207,   208,   193,
!      194,     0,     0,     0,    79,     0,   543,     0,   191,   192,
!        0,     0,     0,   195,     0,     0,     0,     0,     0,   196,
!        0,     0,     0,     0,     0,     0,   197,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,     0,
!        0,   193,   194,     0,     0,     0,    79,   203,   204,   205,
!      206,     0,     0,   207,   208,   195,     0,     0,     0,     0,
!        0,   196,   545,     0,   191,   192,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,     0,     0,     0,     0,     0,     0,   203,
!      204,   205,   206,     0,     0,   207,   208,   193,   194,     0,
!        0,     0,    79,     0,   547,     0,   191,   192,     0,     0,
!        0,   195,     0,     0,     0,     0,     0,   196,     0,     0,
!        0,     0,     0,     0,   197,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,   193,
!      194,     0,     0,     0,    79,   203,   204,   205,   206,     0,
!        0,   207,   208,   195,     0,     0,     0,     0,     0,   196,
!      549,     0,   191,   192,     0,     0,   197,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,     0,
!        0,     0,     0,     0,     0,     0,     0,   203,   204,   205,
!      206,     0,     0,   207,   208,   193,   194,     0,     0,     0,
!       79,     0,   551,     0,   191,   192,     0,     0,     0,   195,
!        0,     0,     0,     0,     0,   196,     0,     0,     0,     0,
!        0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,     0,     0,   193,   194,     0,
!        0,     0,    79,   203,   204,   205,   206,     0,     0,   207,
!      208,   195,     0,     0,     0,     0,     0,   196,   553,     0,
!      191,   192,     0,     0,   197,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,     0,
!        0,     0,     0,     0,     0,   203,   204,   205,   206,     0,
!        0,   207,   208,   193,   194,     0,     0,     0,    79,     0,
!      558,     0,   191,   192,     0,     0,     0,   195,     0,     0,
!        0,     0,     0,   196,     0,     0,     0,     0,     0,     0,
!      197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,     0,     0,   193,   194,     0,     0,     0,
!       79,   203,   204,   205,   206,     0,     0,   207,   208,   195,
!        0,     0,     0,     0,     0,   196,   567,     0,   191,   192,
!        0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,     0,     0,     0,     0,     0,
!        0,     0,     0,   203,   204,   205,   206,     0,     0,   207,
!      208,   193,   194,     0,     0,     0,    79,     0,   575,     0,
!      191,   192,     0,     0,     0,   195,     0,     0,     0,     0,
!        0,   196,     0,     0,     0,     0,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,   193,   194,     0,     0,     0,    79,   203,
!      204,   205,   206,     0,     0,   207,   208,   195,     0,     0,
!        0,     0,     0,   196,   577,     0,   191,   192,     0,     0,
!      197,     0,     0,     0,   198,     0,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,     0,     0,     0,     0,     0,     0,     0,
!        0,   203,   204,   205,   206,     0,     0,   207,   208,   193,
!      194,     0,     0,     0,    79,     0,   605,     0,   191,   192,
!        0,     0,     0,   195,     0,     0,     0,     0,     0,   196,
!        0,     0,     0,     0,     0,     0,   197,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,     0,
!        0,   193,   194,     0,     0,     0,    79,   203,   204,   205,
!      206,     0,     0,   207,   208,   195,     0,     0,     0,     0,
!        0,   196,   620,     0,   191,   192,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,     0,     0,   199,   200,     0,     0,
!      201,     0,     0,     0,     0,     0,     0,     0,     0,   203,
!      204,   205,   206,     0,     0,   207,   208,   193,   194,     0,
!        0,     0,    79,     0,   688,     0,   191,   192,     0,     0,
!        0,   195,     0,     0,     0,     0,     0,   196,     0,     0,
!        0,     0,     0,     0,   197,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,   193,
!      194,     0,     0,     0,    79,   203,   204,   205,   206,     0,
!        0,   207,   208,   195,     0,     0,     0,     0,     0,   196,
!      692,     0,   191,   192,     0,     0,   197,     0,     0,     0,
!      198,     0,     0,     0,     0,     0,     0,    81,     0,     0,
!       82,    21,     0,     0,   199,   200,     0,     0,   201,     0,
!        0,     0,     0,     0,     0,     0,     0,   203,   204,   205,
!      206,     0,     0,   207,   208,   193,   194,     0,     0,     0,
!       79,     0,   698,     0,   191,   192,     0,     0,     0,   195,
!        0,     0,     0,     0,     0,   196,     0,     0,     0,     0,
!        0,     0,   197,     0,     0,     0,   198,     0,     0,     0,
!        0,     0,     0,    81,     0,     0,    82,    21,     0,     0,
!      199,   200,     0,     0,   201,     0,     0,   193,   194,     0,
!        0,     0,    79,   203,   204,   205,   206,     0,     0,   207,
!      208,   195,     0,     0,     0,     0,     0,   196,   725,     0,
!      191,   192,     0,     0,   197,     0,     0,     0,   198,     0,
!        0,     0,     0,     0,     0,    81,     0,     0,    82,    21,
!        0,     0,   199,   200,     0,     0,   201,     0,     0,     0,
!        0,     0,     0,     0,     0,   203,   204,   205,   206,     0,
!        0,   207,   208,   193,   194,     0,     0,     0,    79,     0,
!      585,     0,     0,     0,     0,     0,     0,   195,     0,     0,
!        0,     0,     0,   196,     0,     0,     0,     0,     0,     0,
!      197,     0,     0,     0,   198,   675,     0,     0,     0,     0,
!        0,    81,     0,     0,    82,    21,     0,     0,   199,   200,
!        0,     0,   201,     0,  -286,  -286,  -286,     0,     0,     0,
!     -286,   203,   204,   205,   206,     0,     0,   207,   208,  -286,
!        0,     0,     0,     0,     0,  -286,     0,     0,   736,     0,
!      193,   194,  -286,     0,     0,    79,  -286,     0,     0,     0,
!        0,     0,     0,  -286,   195,     0,  -286,  -286,     0,     0,
!      196,     0,     0,   673,  -286,     0,     0,   197,     0,     0,
!     -286,   198,     0,  -286,  -286,  -286,  -286,     0,    81,  -286,
!     -286,    82,    21,   193,   194,     0,     0,     0,    79,   281,
!     -294,     0,     0,     0,     0,     0,     0,   195,   203,   204,
!      205,   206,     0,   196,   207,   208,   690,     0,   193,   194,
!      197,     0,     0,    79,   198,     0,     0,     0,     0,     0,
!        0,    81,   195,     0,    82,    21,     0,     0,   196,     0,
!        0,     0,   281,  -294,     0,   197,     0,     0,     0,   198,
!        0,   203,   204,   205,   206,     0,    81,   207,   208,    82,
!       21,   191,   192,     0,     0,     0,    79,   281,     0,     0,
!        0,     0,     0,     0,     0,   195,   203,   204,   205,   206,
!        0,   196,   207,   208,     0,     0,     0,     0,   197,     0,
!        0,     0,   198,     0,     0,     0,     0,     0,     0,    81,
!        0,     0,    82,    21,   193,   194,   199,   200,     0,    79,
!      201,     0,     0,     0,     0,     0,     0,     0,   195,   203,
!      204,   205,   206,     0,   196,   207,   208,   191,   192,     0,
!        0,   197,     0,     0,     0,   198,     0,     0,     0,     0,
!        0,     0,    81,     0,     0,    82,    21,     0,     0,   199,
!      200,     0,     0,   201,     0,   202,   364,     0,     0,     0,
!      365,     0,   203,   204,   205,   206,     0,     0,   207,   208,
!      193,   194,     0,     0,     0,    79,     0,     0,     0,   191,
!      192,     0,     0,     0,   195,     0,     0,     0,     0,     0,
!      196,     0,     0,     0,     0,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!      497,     0,   193,   194,     0,     0,     0,    79,   203,   204,
!      205,   206,     0,     0,   207,   208,   195,     0,     0,     0,
!        0,     0,   196,     0,     0,   191,   192,     0,     0,   197,
!        0,     0,     0,   198,     0,     0,     0,     0,     0,     0,
!       81,     0,     0,    82,    21,     0,     0,   199,   200,     0,
!        0,   201,   636,     0,     0,     0,     0,     0,     0,     0,
!      203,   204,   205,   206,     0,     0,   207,   208,   193,   194,
!        0,     0,     0,    79,     0,     0,     0,   191,   192,     0,
!        0,     0,   195,     0,     0,     0,     0,     0,   196,     0,
!        0,     0,     0,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,   199,   200,     0,     0,   201,   681,     0,
!      193,   194,     0,     0,     0,    79,   203,   204,   205,   206,
!        0,     0,   207,   208,   195,     0,     0,     0,     0,     0,
!      196,     0,     0,   191,   192,     0,     0,   197,     0,     0,
!        0,   198,     0,     0,     0,     0,     0,     0,    81,     0,
!        0,    82,    21,     0,     0,   199,   200,     0,     0,   201,
!      694,     0,     0,     0,     0,     0,     0,     0,   203,   204,
!      205,   206,     0,     0,   207,   208,   193,   194,     0,     0,
!        0,    79,     0,     0,     0,     0,     0,     0,     0,     0,
!      195,     0,     0,     0,     0,     0,   196,     0,     0,     0,
!        0,     0,     0,   197,     0,     0,     0,   198,     0,     0,
!        0,     0,     0,     0,    81,     0,     0,    82,    21,     0,
!        0,   199,   200,     0,     0,   201,     0,     2,   193,   194,
!        0,     0,     0,    79,   203,   204,   205,   206,     0,     0,
!      207,   208,   195,     0,     0,     0,     0,     0,   196,     0,
!        0,     0,     0,     0,     0,   197,     0,     0,     0,   198,
!        0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
!       21,     0,     0,     0,     0,     0,     0,   281,     0,     0,
!        0,     0,     0,     0,     0,     0,   203,   204,   205,   206,
!        0,     0,   207,   208
  };
  
  static const short yycheck[] =
  {
!        3,   133,   294,     6,   134,    63,    63,   130,   314,   172,
!      335,     0,    85,   124,   172,   445,   202,   177,     1,     1,
!        9,    10,    11,   135,    63,   490,   191,     1,   193,   194,
!        1,     1,    90,    90,   199,   200,   159,    95,    95,    54,
!       43,     1,    31,   166,    47,    34,    35,     1,    15,     1,
!      670,    90,     1,   130,   484,     1,    95,    84,   101,   102,
!       63,     1,    65,    52,     1,     1,    43,    70,    88,    10,
!       47,     1,   130,   130,    63,   130,   134,   134,     1,     1,
!      157,   511,   159,   678,    99,   197,     1,    90,    65,    97,
!       31,   130,    95,    70,    35,   134,   123,   124,     1,   157,
!      157,   159,   159,     1,   159,   102,    95,     1,    68,     1,
!      730,    52,     1,    96,   172,   172,    68,   118,   157,   101,
!      159,   103,    89,   181,   181,    95,   129,   130,   258,   103,
!      101,   134,   135,   103,     1,     1,   294,   210,     1,   197,
!      263,   130,   181,   201,     1,   134,   100,   148,     4,     5,
!      151,   100,   129,   276,   157,   101,   159,   103,   135,   624,
!       96,   101,   102,     1,   101,   102,   102,    97,   169,   172,
!      159,   101,   283,    88,    96,   770,   336,   100,   181,   609,
!      102,    37,    38,   172,   779,    41,   101,     1,   191,   192,
!      193,   194,     1,    96,   197,    51,   199,   200,   201,   102,
!      258,   258,   100,   633,    96,   335,   100,    96,   172,     1,
!      102,   284,     0,   102,     1,   645,   381,   382,   383,   258,
!      197,     9,    10,    11,    80,   337,     1,    90,    84,     1,
!       53,   661,   290,   290,   101,   101,   294,   294,   101,   648,
!        1,   103,     1,    31,   101,     1,    34,    35,     1,   412,
!       88,   290,     1,     1,   130,   258,   314,   314,   259,     1,
!        1,     1,     1,   101,    52,     1,     1,   123,   124,   258,
!        1,     1,     1,    99,   566,     9,     5,   335,   335,     1,
!      353,   354,   563,   159,   140,   566,   100,   290,   361,   362,
!       96,   294,   101,    99,    96,   601,   335,   603,   301,   708,
!       34,   103,   711,     1,   172,   294,   309,   493,   311,   101,
!        1,   314,    53,    53,   101,   745,   172,    53,     1,     1,
!      485,   177,   102,    64,    64,   314,   101,    97,   653,   101,
!      294,     1,   335,   444,   337,   393,   393,   301,     1,    99,
!      101,   100,   130,    96,   100,   309,   335,   311,    97,    97,
!      314,    90,   644,    95,   412,   412,    97,    97,     1,    88,
!      337,    97,    97,   644,   220,    95,    97,    63,   777,     0,
!        1,   159,   678,   782,    96,   784,     1,   786,   381,   382,
       383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
!      393,   394,   395,   396,   397,   398,   399,   400,    96,    95,
!      563,     1,   648,     1,    95,   478,   172,    96,   481,   412,
!       99,    94,    95,    95,    45,   271,    99,   100,   101,   102,
!       90,    64,   278,   412,    65,    56,   294,   283,     1,    70,
!      648,    62,    95,   301,   130,   100,    96,    68,   294,    64,
!      732,   309,   102,   311,    95,   301,   314,     1,   412,     0,
!        1,   301,     1,   309,    97,   311,     1,   580,   623,   309,
!      583,   311,   708,   159,   770,   711,   539,     0,    95,   648,
!      101,     1,    97,   779,     1,     1,     9,    10,    11,     1,
!      336,     1,   485,     1,     1,     1,   172,   490,   129,    97,
!      708,    45,     1,   711,    45,   351,    96,    95,    31,   101,
!      102,    34,    35,    45,   636,   563,   563,     1,   566,   566,
!       73,    62,    46,    47,    68,    96,   372,    68,   374,    52,
!       62,   102,    95,   653,     1,    88,    68,    96,   294,   708,
!       63,   777,   711,   102,    51,   301,   782,     1,   784,    54,
!      786,    95,     1,   309,   412,   311,    95,     1,   314,     1,
!      101,   478,    45,   685,   481,     1,   412,   680,    88,   777,
!      563,    88,    95,   566,   782,   697,   784,    84,   786,    95,
!       87,    88,    88,    95,   563,    95,    94,   566,    96,    88,
!      103,    99,   100,   101,   102,   441,   644,   644,   444,     1,
!        0,     1,    93,    94,    88,   653,   653,   130,   777,   563,
!       46,    47,   566,   782,   102,   784,     1,   786,   294,     1,
!      742,    88,   670,   670,   653,   301,   172,     0,     1,   103,
!      623,   624,     1,   309,    88,   311,   159,    99,   314,    88,
!      103,   103,     1,     1,    88,    45,    88,   601,   641,   603,
!       11,   644,    88,    99,    90,   648,   412,    93,    94,    95,
!      653,    48,    62,    99,    66,   644,    68,   103,    68,    93,
!       94,    73,    45,     1,   653,    77,    63,   670,     0,     1,
!        3,     4,   730,   730,   732,   732,    88,     1,     1,    62,
!      644,   670,    96,     1,   648,    68,     0,     1,   102,     0,
!        1,   101,    99,    88,    96,   563,    88,     9,   566,    11,
!      102,    98,     1,    93,    94,   708,   670,   563,   711,    88,
!      566,    99,   172,    45,   678,   103,     0,     1,   101,    88,
!       88,    66,    34,    97,    56,    99,   412,   730,    73,   732,
!       62,    45,   735,   601,    45,   603,    68,   480,   294,   482,
!        1,   730,    56,   732,   708,   301,   749,   711,    62,    12,
!       88,    62,     1,   309,    68,   311,    13,    68,   314,     1,
!      763,    45,    76,   108,    88,    88,   730,    96,   732,   101,
!       88,   735,    56,   102,   777,    14,   644,    99,    62,   782,
!      648,   784,     1,   786,    68,   749,   642,   101,   644,    88,
!      101,    97,   648,    16,    17,   101,   101,   563,   648,   763,
!      566,    96,   670,    45,    99,    66,   770,    68,   103,    51,
!      678,    51,    73,   777,   670,   779,    77,   101,   782,    68,
!      784,    95,   786,    48,    73,    99,    45,    88,    77,   103,
!       46,    47,    51,    95,   294,   601,     1,   603,    63,    88,
!      708,   301,    84,   711,    84,    87,    88,    87,    88,   309,
!      101,   311,   708,    98,   314,   711,   412,   102,   708,   172,
!       95,   711,   730,   101,   732,    84,    94,   735,    87,    88,
!       68,    99,   100,    98,   730,   102,   732,   563,   644,   735,
!      566,   749,   648,    98,    61,   735,    51,     1,    65,     1,
!       97,    98,    97,   749,   101,   763,    46,    47,    67,   749,
!       46,    47,   770,    95,   670,    99,   100,   763,    99,   777,
!       99,   779,   678,   763,   782,   601,   784,   603,   786,    84,
!       95,   777,    87,    88,   394,   395,   782,   777,   784,   172,
!      786,    45,   782,    45,   784,     1,   786,    51,    90,    51,
!      384,   385,   708,   708,    95,   711,   711,    96,    60,    99,
!       62,    45,   412,   103,     1,    95,    68,    51,   644,     5,
!        6,     7,   648,   101,   730,    96,   732,    96,   101,   735,
!       84,    97,    84,    87,    88,    87,    88,    46,    47,     1,
!       96,   294,    96,   749,   670,    97,    57,    97,   301,     1,
!       84,   102,   678,    87,    88,    57,   309,   763,   311,   101,
!       96,   314,    96,    96,   770,     1,    96,   563,    96,     1,
!      566,   777,   777,   779,   101,   101,   782,   782,   784,   784,
!      786,   786,   708,    96,    57,   711,   141,     8,     9,    10,
!       99,    96,     0,    45,   103,   389,   390,   391,   392,    51,
!       18,    19,    20,    21,   730,   601,   732,   603,    60,   735,
!       62,   294,     0,   393,    88,    11,    68,    55,   301,    93,
!       94,    95,    76,   749,   159,    99,   309,    95,   311,   103,
!      140,   314,    84,   258,   157,    87,    88,   763,   412,    53,
!       58,    99,   100,   101,   770,   265,   201,   202,   644,   668,
!      314,   777,   648,   779,   668,    45,   782,   314,   784,   412,
!      786,    51,    88,   563,   354,   581,   566,    93,    94,    95,
!       60,   192,    62,    99,   670,   581,   396,   103,    68,   386,
!      387,   388,   678,   398,    88,   397,   399,    51,   641,    93,
!       94,    95,   400,   404,    84,    99,    60,    87,    88,   103,
!       -1,   601,    66,   603,    -1,    -1,    -1,    97,    98,    73,
!       -1,   101,   708,    77,   269,   711,    -1,   272,    -1,    -1,
!       84,    -1,    -1,    87,    88,   280,   281,    91,    92,   412,
!       -1,    95,    -1,    -1,   730,    -1,   732,    -1,    -1,   735,
!      104,   105,   106,   107,   644,    -1,   110,   111,   648,    -1,
!        1,    -1,     3,   749,    93,    94,    95,    -1,    -1,    -1,
!       99,    -1,    -1,    -1,   103,    -1,    -1,   763,    -1,    -1,
!      670,    -1,    -1,    -1,   770,    -1,    -1,    -1,   678,    -1,
!       -1,   777,    -1,   779,    -1,    -1,   782,    -1,   784,    -1,
!      786,    93,    94,    95,    -1,    46,    47,    99,    -1,    -1,
!       51,   103,    -1,    -1,    -1,    -1,    -1,    -1,   708,    60,
!      563,   711,    -1,   566,    -1,    66,   371,    -1,    -1,    -1,
!      375,    -1,    73,   378,    -1,    -1,    77,    -1,    -1,    -1,
!      730,    -1,   732,    84,    -1,   735,    87,    88,    -1,    -1,
!       91,    92,    -1,    -1,    95,    -1,   401,    -1,   601,   749,
!      603,    -1,    -1,   104,   105,   106,   107,    -1,    45,   110,
!      111,    -1,   417,   763,    51,    -1,    -1,    -1,    -1,    -1,
!      770,    -1,   427,    60,   429,    62,    -1,   777,    -1,   779,
!      563,    68,   782,   566,   784,    -1,   786,    -1,    -1,    -1,
!       -1,   644,    -1,    -1,    -1,   648,    -1,    84,    -1,    -1,
!       87,    88,    -1,    -1,    -1,    -1,   461,    -1,   463,    -1,
!       97,    98,    -1,    -1,   101,    -1,    -1,   670,   601,    -1,
!      603,    -1,   477,    -1,    -1,   678,    -1,    -1,   191,   192,
!      193,   194,    -1,    -1,    -1,    -1,   199,   200,   493,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,   191,   192,
!      193,   194,    -1,    51,    -1,   708,   199,   200,   711,    -1,
!       -1,   644,    60,    -1,    62,   648,    -1,    -1,    -1,    -1,
!       68,    -1,    -1,    -1,    -1,    -1,    -1,   730,    -1,   732,
!       -1,    -1,   735,    -1,    -1,    -1,    84,   670,    -1,    87,
!       88,    -1,    -1,    -1,    -1,   678,   749,    45,    -1,    -1,
!       98,    -1,    -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,
!      763,    -1,    60,    -1,    62,    -1,    -1,   770,    -1,    -1,
!       68,    -1,    -1,    -1,   777,   708,   779,    -1,   711,   782,
!       -1,   784,    -1,   786,   589,    -1,    84,    -1,    -1,    87,
!       88,    -1,    -1,    -1,    -1,    -1,    -1,   730,    -1,   732,
!       98,    -1,   735,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,    -1,   749,    -1,    -1,    -1,
!       -1,    -1,    -1,    -1,    -1,   630,    -1,    -1,    -1,    -1,
!      763,    -1,    -1,    -1,    -1,    -1,    -1,   770,    -1,    -1,
!       -1,    -1,    -1,    -1,   777,    -1,   779,    -1,    -1,   782,
!       -1,   784,    -1,   786,    -1,    -1,    -1,    -1,    -1,    -1,
!       -1,   666,    -1,    -1,    -1,     1,    -1,   672,   381,   382,
!      383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
!       -1,   394,   395,   396,   397,   398,   399,   400,   381,   382,
!      383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
!       -1,   394,   395,   396,   397,   398,   399,   400,    -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,   748,    -1,    -1,    -1,   752,    84,    -1,
!       -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,    95,
!       -1,    97,    98,    -1,    -1,   101,    -1,    -1,   104,   105,
!      106,   107,   485,    -1,   110,   111,    -1,   490,    -1,    -1,
!       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
!       51,    52,   485,    -1,    55,    -1,    -1,   490,    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,
!      623,   624,   104,   105,   106,   107,    -1,    -1,   110,   111,
!       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   641,    -1,
!      623,   624,    45,    46,    47,    -1,    49,    50,    51,    52,
!       -1,    -1,    55,    -1,    -1,    -1,    59,    60,   641,    -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
  };
  #define YYPURE 1
  
*************** yyreduce:
*** 3156,3166 ****
    switch (yyn) {
  
  case 1:
! #line 604 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {;
      break;}
  case 18:
! #line 648 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  int osb = pop_current_osb (ctxp);
  		  tree t = build_java_array_type ((yyvsp[-1].node), -1);
--- 3183,3193 ----
    switch (yyn) {
  
  case 1:
! #line 631 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {;
      break;}
  case 18:
! #line 675 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  int osb = pop_current_osb (ctxp);
  		  tree t = build_java_array_type ((yyvsp[-1].node), -1);
*************** case 18:
*** 3170,3176 ****
  		;
      break;}
  case 19:
! #line 656 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  int osb = pop_current_osb (ctxp);
  		  tree t = yyvsp[-1].node;
--- 3197,3203 ----
  		;
      break;}
  case 19:
! #line 683 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  int osb = pop_current_osb (ctxp);
  		  tree t = yyvsp[-1].node;
*************** case 19:
*** 3180,3221 ****
  		;
      break;}
  case 23:
! #line 677 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = make_qualified_name (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
      break;}
  case 25:
! #line 686 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = NULL;;
      break;}
  case 33:
! #line 698 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = NULL;
  		;
      break;}
  case 34:
! #line 702 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = NULL;
  		;
      break;}
  case 37:
! #line 714 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->package = EXPR_WFL_NODE (yyvsp[-1].node);
  		  register_package (ctxp->package);
  		;
      break;}
  case 38:
! #line 719 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing name"); RECOVER;;
      break;}
  case 39:
! #line 721 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 42:
! #line 731 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree name = EXPR_WFL_NODE (yyvsp[-1].node), last_name;
  		  int   i = IDENTIFIER_LENGTH (name)-1;
--- 3207,3248 ----
  		;
      break;}
  case 23:
! #line 704 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = make_qualified_name (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
      break;}
  case 25:
! #line 713 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyval.node = NULL;;
      break;}
  case 33:
! #line 725 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.node = NULL;
  		;
      break;}
  case 34:
! #line 729 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.node = NULL;
  		;
      break;}
  case 37:
! #line 741 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->package = EXPR_WFL_NODE (yyvsp[-1].node);
  		  register_package (ctxp->package);
  		;
      break;}
  case 38:
! #line 746 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing name"); RECOVER;;
      break;}
  case 39:
! #line 748 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 42:
! #line 758 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree name = EXPR_WFL_NODE (yyvsp[-1].node), last_name;
  		  int   i = IDENTIFIER_LENGTH (name)-1;
*************** case 42:
*** 3232,3238 ****
  		      tree err = find_name_in_single_imports (last_name);
  		      if (err && err != name)
  			parse_error_context
! 			  (yyvsp[-1].node, "Ambiguous class: `%s' and `%s'",
  			   IDENTIFIER_POINTER (name),
  			   IDENTIFIER_POINTER (err));
  		      else
--- 3259,3265 ----
  		      tree err = find_name_in_single_imports (last_name);
  		      if (err && err != name)
  			parse_error_context
! 			  (yyvsp[-1].node, "Ambiguous class: %qs and %qs",
  			   IDENTIFIER_POINTER (name),
  			   IDENTIFIER_POINTER (err));
  		      else
*************** case 42:
*** 3243,3257 ****
  		;
      break;}
  case 43:
! #line 757 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing name"); RECOVER;;
      break;}
  case 44:
! #line 759 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 45:
! #line 764 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree name = EXPR_WFL_NODE (yyvsp[-3].node);
  		  tree it;
--- 3270,3284 ----
  		;
      break;}
  case 43:
! #line 784 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing name"); RECOVER;;
      break;}
  case 44:
! #line 786 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 45:
! #line 791 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree name = EXPR_WFL_NODE (yyvsp[-3].node);
  		  tree it;
*************** case 45:
*** 3271,3311 ****
  		;
      break;}
  case 46:
! #line 782 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'*' expected"); RECOVER;;
      break;}
  case 47:
! #line 784 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 48:
! #line 789 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { end_class_declaration (0); ;
      break;}
  case 49:
! #line 791 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { end_class_declaration (0); ;
      break;}
  case 51:
! #line 794 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  YYERROR_NOW;
  		  yyerror ("Class or interface declaration expected");
  		;
      break;}
  case 52:
! #line 805 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.value = (1 << yyvsp[0].value);
  		;
      break;}
  case 53:
! #line 809 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  int acc = (1 << yyvsp[0].value);
  		  if (yyval.value & acc)
  		    parse_error_context
! 		      (ctxp->modifier_ctx [yyvsp[0].value], "Modifier `%s' declared twice",
  		       java_accstring_lookup (acc));
  		  else
  		    {
--- 3298,3338 ----
  		;
      break;}
  case 46:
! #line 809 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'*' expected"); RECOVER;;
      break;}
  case 47:
! #line 811 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 48:
! #line 816 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { end_class_declaration (0); ;
      break;}
  case 49:
! #line 818 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { end_class_declaration (0); ;
      break;}
  case 51:
! #line 821 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  YYERROR_NOW;
  		  yyerror ("Class or interface declaration expected");
  		;
      break;}
  case 52:
! #line 832 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.value = (1 << yyvsp[0].value);
  		;
      break;}
  case 53:
! #line 836 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  int acc = (1 << yyvsp[0].value);
  		  if (yyval.value & acc)
  		    parse_error_context
! 		      (ctxp->modifier_ctx [yyvsp[0].value], "Modifier %qs declared twice",
  		       java_accstring_lookup (acc));
  		  else
  		    {
*************** case 53:
*** 3314,3426 ****
  		;
      break;}
  case 54:
! #line 825 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { create_class (yyvsp[-4].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 55:
! #line 827 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {;;
      break;}
  case 56:
! #line 829 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { create_class (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 57:
! #line 831 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {;;
      break;}
  case 58:
! #line 833 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyerror ("Missing class name"); RECOVER; ;
      break;}
  case 59:
! #line 835 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyerror ("Missing class name"); RECOVER; ;
      break;}
  case 60:
! #line 837 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  if (!ctxp->class_err) yyerror ("'{' expected");
  		  DRECOVER(class1);
  		;
      break;}
  case 61:
! #line 842 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER; ;
      break;}
  case 62:
! #line 846 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL; ;
      break;}
  case 63:
! #line 848 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 64:
! #line 850 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'{' expected"); ctxp->class_err=1;;
      break;}
  case 65:
! #line 852 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing super class name"); ctxp->class_err=1;;
      break;}
  case 66:
! #line 856 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 67:
! #line 858 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 68:
! #line 860 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->class_err=1;
  		  yyerror ("Missing interface name");
  		;
      break;}
  case 69:
! #line 868 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->interface_number = 1;
  		  yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
  		;
      break;}
  case 70:
! #line 873 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->interface_number++;
  		  yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
  		;
      break;}
  case 71:
! #line 878 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing interface name"); RECOVER;;
      break;}
  case 72:
! #line 883 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  /* Store the location of the `}' when doing xrefs */
  		  if (flag_emit_xref)
! 		    DECL_END_SOURCE_LINE (GET_CPC ()) =
! 		      EXPR_WFL_ADD_COL (yyvsp[0].operator.location, 1);
  		  yyval.node = GET_CPC ();
  		;
      break;}
  case 73:
! #line 891 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  /* Store the location of the `}' when doing xrefs */
  		  if (flag_emit_xref)
! 		    DECL_END_SOURCE_LINE (GET_CPC ()) =
! 		      EXPR_WFL_ADD_COL (yyvsp[0].operator.location, 1);
  		  yyval.node = GET_CPC ();
  		;
      break;}
  case 79:
! #line 910 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  if (yyvsp[0].node != empty_stmt_node)
  		    {
  		      TREE_CHAIN (yyvsp[0].node) = CPC_INSTANCE_INITIALIZER_STMT (ctxp);
  		      SET_CPC_INSTANCE_INITIALIZER_STMT (ctxp, yyvsp[0].node);
--- 3341,3451 ----
  		;
      break;}
  case 54:
! #line 852 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { create_class (yyvsp[-4].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 55:
! #line 854 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {;;
      break;}
  case 56:
! #line 856 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { create_class (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 57:
! #line 858 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {;;
      break;}
  case 58:
! #line 860 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyerror ("Missing class name"); RECOVER; ;
      break;}
  case 59:
! #line 862 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyerror ("Missing class name"); RECOVER; ;
      break;}
  case 60:
! #line 864 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  if (!ctxp->class_err) yyerror ("'{' expected");
  		  DRECOVER(class1);
  		;
      break;}
  case 61:
! #line 869 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER; ;
      break;}
  case 62:
! #line 873 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL; ;
      break;}
  case 63:
! #line 875 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 64:
! #line 877 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'{' expected"); ctxp->class_err=1;;
      break;}
  case 65:
! #line 879 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing super class name"); ctxp->class_err=1;;
      break;}
  case 66:
! #line 883 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 67:
! #line 885 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 68:
! #line 887 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->class_err=1;
  		  yyerror ("Missing interface name");
  		;
      break;}
  case 69:
! #line 895 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->interface_number = 1;
  		  yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
  		;
      break;}
  case 70:
! #line 900 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->interface_number++;
  		  yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
  		;
      break;}
  case 71:
! #line 905 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing interface name"); RECOVER;;
      break;}
  case 72:
! #line 910 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/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 73:
! #line 917 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/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 79:
! #line 935 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
! 		  if (!IS_EMPTY_STMT (yyvsp[0].node))
  		    {
  		      TREE_CHAIN (yyvsp[0].node) = CPC_INSTANCE_INITIALIZER_STMT (ctxp);
  		      SET_CPC_INSTANCE_INITIALIZER_STMT (ctxp, yyvsp[0].node);
*************** case 79:
*** 3428,3468 ****
  		;
      break;}
  case 82:
! #line 923 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { end_class_declaration (1); ;
      break;}
  case 83:
! #line 925 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { end_class_declaration (1); ;
      break;}
  case 85:
! #line 932 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { register_fields (0, yyvsp[-2].node, yyvsp[-1].node); ;
      break;}
  case 86:
! #line 934 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  check_modifiers
! 		    ("Illegal modifier `%s' for field declaration",
  		     yyvsp[-3].value, FIELD_MODIFIERS);
  		  check_modifiers_consistency (yyvsp[-3].value);
  		  register_fields (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node);
  		;
      break;}
  case 88:
! #line 947 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node); ;
      break;}
  case 89:
! #line 949 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 90:
! #line 954 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE); ;
      break;}
  case 91:
! #line 956 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  if (java_error_count)
  		    yyvsp[0].node = NULL_TREE;
--- 3453,3493 ----
  		;
      break;}
  case 82:
! #line 948 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { end_class_declaration (1); ;
      break;}
  case 83:
! #line 950 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { end_class_declaration (1); ;
      break;}
  case 85:
! #line 957 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { register_fields (0, yyvsp[-2].node, yyvsp[-1].node); ;
      break;}
  case 86:
! #line 959 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  check_modifiers
! 		    ("Illegal modifier %qs for field declaration",
  		     yyvsp[-3].value, FIELD_MODIFIERS);
  		  check_modifiers_consistency (yyvsp[-3].value);
  		  register_fields (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node);
  		;
      break;}
  case 88:
! #line 972 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node); ;
      break;}
  case 89:
! #line 974 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 90:
! #line 979 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE); ;
      break;}
  case 91:
! #line 981 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  if (java_error_count)
  		    yyvsp[0].node = NULL_TREE;
*************** case 91:
*** 3471,3477 ****
  		;
      break;}
  case 92:
! #line 963 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Missing variable initializer");
  		  yyval.node = build_tree_list (yyvsp[-2].node, NULL_TREE);
--- 3496,3502 ----
  		;
      break;}
  case 92:
! #line 988 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Missing variable initializer");
  		  yyval.node = build_tree_list (yyvsp[-2].node, NULL_TREE);
*************** case 92:
*** 3479,3485 ****
  		;
      break;}
  case 93:
! #line 969 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("';' expected");
  		  yyval.node = build_tree_list (yyvsp[-3].node, NULL_TREE);
--- 3504,3510 ----
  		;
      break;}
  case 93:
! #line 994 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("';' expected");
  		  yyval.node = build_tree_list (yyvsp[-3].node, NULL_TREE);
*************** case 93:
*** 3487,3512 ****
  		;
      break;}
  case 95:
! #line 979 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
      break;}
  case 96:
! #line 981 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Invalid declaration"); DRECOVER(vdi);;
      break;}
  case 97:
! #line 983 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("']' expected");
  		  DRECOVER(vdi);
  		;
      break;}
  case 98:
! #line 988 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Unbalanced ']'"); DRECOVER(vdi);;
      break;}
  case 101:
! #line 999 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  current_function_decl = yyvsp[0].node;
  		  if (current_function_decl
--- 3512,3537 ----
  		;
      break;}
  case 95:
! #line 1004 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
      break;}
  case 96:
! #line 1006 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Invalid declaration"); DRECOVER(vdi);;
      break;}
  case 97:
! #line 1008 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("']' expected");
  		  DRECOVER(vdi);
  		;
      break;}
  case 98:
! #line 1013 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Unbalanced ']'"); DRECOVER(vdi);;
      break;}
  case 101:
! #line 1024 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  current_function_decl = yyvsp[0].node;
  		  if (current_function_decl
*************** case 101:
*** 3517,3595 ****
  		;
      break;}
  case 102:
! #line 1008 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { finish_method_declaration (yyvsp[0].node); ;
      break;}
  case 103:
! #line 1010 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;
      break;}
  case 104:
! #line 1015 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = method_header (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 105:
! #line 1017 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = method_header (0, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 106:
! #line 1019 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = method_header (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 107:
! #line 1021 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = method_header (yyvsp[-3].value, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 108:
! #line 1023 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Invalid method declaration, method name required");
  		  RECOVER;
  		;
      break;}
  case 109:
! #line 1028 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Identifier expected");
  		  RECOVER;
  		;
      break;}
  case 110:
! #line 1033 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Identifier expected");
  		  RECOVER;
  		;
      break;}
  case 111:
! #line 1038 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Identifier expected");
  		  RECOVER;
  		;
      break;}
  case 112:
! #line 1043 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Invalid method declaration, return type required");
  		  RECOVER;
  		;
      break;}
  case 113:
! #line 1051 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number = 0;
  		  yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE);
  		;
      break;}
  case 114:
! #line 1056 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
  case 115:
! #line 1058 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  EXPR_WFL_LINECOL (wfl_operator) = yyvsp[-1].operator.location;
  		  TREE_PURPOSE (yyvsp[-2].node) =
  		    build_unresolved_array_type (TREE_PURPOSE (yyvsp[-2].node));
  		  parse_warning_context
--- 3542,3620 ----
  		;
      break;}
  case 102:
! #line 1033 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { finish_method_declaration (yyvsp[0].node); ;
      break;}
  case 103:
! #line 1035 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;
      break;}
  case 104:
! #line 1040 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = method_header (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 105:
! #line 1042 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = method_header (0, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 106:
! #line 1044 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = method_header (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 107:
! #line 1046 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = method_header (yyvsp[-3].value, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 108:
! #line 1048 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Invalid method declaration, method name required");
  		  RECOVER;
  		;
      break;}
  case 109:
! #line 1053 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Identifier expected");
  		  RECOVER;
  		;
      break;}
  case 110:
! #line 1058 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Identifier expected");
  		  RECOVER;
  		;
      break;}
  case 111:
! #line 1063 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Identifier expected");
  		  RECOVER;
  		;
      break;}
  case 112:
! #line 1068 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Invalid method declaration, return type required");
  		  RECOVER;
  		;
      break;}
  case 113:
! #line 1076 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number = 0;
  		  yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE);
  		;
      break;}
  case 114:
! #line 1081 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
  case 115:
! #line 1083 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
! 		  SET_EXPR_LOCATION_FROM_TOKEN (wfl_operator, yyvsp[-1].operator);
  		  TREE_PURPOSE (yyvsp[-2].node) =
  		    build_unresolved_array_type (TREE_PURPOSE (yyvsp[-2].node));
  		  parse_warning_context
*************** case 115:
*** 3598,3693 ****
  		;
      break;}
  case 116:
! #line 1067 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("')' expected"); DRECOVER(method_declarator);;
      break;}
  case 117:
! #line 1069 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("']' expected"); RECOVER;;
      break;}
  case 118:
! #line 1074 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number = 1;
  		;
      break;}
  case 119:
! #line 1078 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number += 1;
  		  yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node);
  		;
      break;}
  case 120:
! #line 1083 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyerror ("Missing formal parameter term"); RECOVER; ;
      break;}
  case 121:
! #line 1088 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
  		;
      break;}
  case 122:
! #line 1092 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
  		  ARG_FINAL_P (yyval.node) = 1;
  		;
      break;}
  case 123:
! #line 1097 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Missing identifier"); RECOVER;
  		  yyval.node = NULL_TREE;
  		;
      break;}
  case 124:
! #line 1102 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Missing identifier"); RECOVER;
  		  yyval.node = NULL_TREE;
  		;
      break;}
  case 125:
! #line 1110 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  check_modifiers ("Illegal modifier `%s'. Only `final' was expected here",
  				   yyvsp[0].value, ACC_FINAL);
  		  if (yyvsp[0].value != ACC_FINAL)
  		    MODIFIER_WFL (FINAL_TK) = build_wfl_node (NULL_TREE);
  		;
      break;}
  case 126:
! #line 1119 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 127:
! #line 1121 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 128:
! #line 1123 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing class type term"); RECOVER;;
      break;}
  case 129:
! #line 1128 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_tree_list (yyvsp[0].node, yyvsp[0].node); ;
      break;}
  case 130:
! #line 1130 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = tree_cons (yyvsp[0].node, yyvsp[0].node, yyvsp[-2].node); ;
      break;}
  case 131:
! #line 1132 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing class type term"); RECOVER;;
      break;}
  case 133:
! #line 1137 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 134:
! #line 1143 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  TREE_CHAIN (yyvsp[0].node) = CPC_STATIC_INITIALIZER_STMT (ctxp);
  		  SET_CPC_STATIC_INITIALIZER_STMT (ctxp, yyvsp[0].node);
--- 3623,3718 ----
  		;
      break;}
  case 116:
! #line 1092 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("')' expected"); DRECOVER(method_declarator);;
      break;}
  case 117:
! #line 1094 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("']' expected"); RECOVER;;
      break;}
  case 118:
! #line 1099 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number = 1;
  		;
      break;}
  case 119:
! #line 1103 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number += 1;
  		  yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node);
  		;
      break;}
  case 120:
! #line 1108 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyerror ("Missing formal parameter term"); RECOVER; ;
      break;}
  case 121:
! #line 1113 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
  		;
      break;}
  case 122:
! #line 1117 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
  		  ARG_FINAL_P (yyval.node) = 1;
  		;
      break;}
  case 123:
! #line 1122 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Missing identifier"); RECOVER;
  		  yyval.node = NULL_TREE;
  		;
      break;}
  case 124:
! #line 1127 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Missing identifier"); RECOVER;
  		  yyval.node = NULL_TREE;
  		;
      break;}
  case 125:
! #line 1135 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
! 		  check_modifiers ("Illegal modifier %qs. Only %<final%> was expected here",
  				   yyvsp[0].value, ACC_FINAL);
  		  if (yyvsp[0].value != ACC_FINAL)
  		    MODIFIER_WFL (FINAL_TK) = build_wfl_node (NULL_TREE);
  		;
      break;}
  case 126:
! #line 1144 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 127:
! #line 1146 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 128:
! #line 1148 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing class type term"); RECOVER;;
      break;}
  case 129:
! #line 1153 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_tree_list (yyvsp[0].node, yyvsp[0].node); ;
      break;}
  case 130:
! #line 1155 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = tree_cons (yyvsp[0].node, yyvsp[0].node, yyvsp[-2].node); ;
      break;}
  case 131:
! #line 1157 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing class type term"); RECOVER;;
      break;}
  case 133:
! #line 1162 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 134:
! #line 1168 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  TREE_CHAIN (yyvsp[0].node) = CPC_STATIC_INITIALIZER_STMT (ctxp);
  		  SET_CPC_STATIC_INITIALIZER_STMT (ctxp, yyvsp[0].node);
*************** case 134:
*** 3695,3764 ****
  		;
      break;}
  case 135:
! #line 1152 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  check_modifiers ("Illegal modifier `%s' for static initializer", yyvsp[0].value, ACC_STATIC);
  		  /* Can't have a static initializer in an innerclass */
  		  if (yyvsp[0].value | ACC_STATIC &&
  		      GET_CPC_LIST () && !TOPLEVEL_CLASS_DECL_P (GET_CPC ()))
  		    parse_error_context
  		      (MODIFIER_WFL (STATIC_TK),
! 		       "Can't define static initializer in class `%s'. Static initializer can only be defined in top-level classes",
  		       IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())));
  		  SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[0].value));
  		;
      break;}
  case 136:
! #line 1168 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  current_function_decl = yyvsp[0].node;
  		  source_start_java_method (current_function_decl);
  		;
      break;}
  case 137:
! #line 1173 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { finish_method_declaration (yyvsp[0].node); ;
      break;}
  case 138:
! #line 1178 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = method_header (0, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 139:
! #line 1180 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = method_header (yyvsp[-2].value, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 140:
! #line 1185 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number = 0;
  		  yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE);
  		;
      break;}
  case 141:
! #line 1190 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
  case 142:
! #line 1198 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  BLOCK_EXPR_BODY (yyvsp[0].node) = empty_stmt_node;
  		  yyval.node = yyvsp[0].node;
  		;
      break;}
  case 143:
! #line 1203 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 144:
! #line 1205 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 145:
! #line 1207 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 147:
! #line 1217 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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);
--- 3720,3789 ----
  		;
      break;}
  case 135:
! #line 1177 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 */
  		  if (yyvsp[0].value | ACC_STATIC &&
  		      GET_CPC_LIST () && !TOPLEVEL_CLASS_DECL_P (GET_CPC ()))
  		    parse_error_context
  		      (MODIFIER_WFL (STATIC_TK),
! 		       "Can't define static initializer in class %qs. Static initializer can only be defined in top-level classes",
  		       IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())));
  		  SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[0].value));
  		;
      break;}
  case 136:
! #line 1193 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  current_function_decl = yyvsp[0].node;
  		  source_start_java_method (current_function_decl);
  		;
      break;}
  case 137:
! #line 1198 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { finish_method_declaration (yyvsp[0].node); ;
      break;}
  case 138:
! #line 1203 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = method_header (0, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 139:
! #line 1205 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = method_header (yyvsp[-2].value, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 140:
! #line 1210 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number = 0;
  		  yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE);
  		;
      break;}
  case 141:
! #line 1215 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
  case 142:
! #line 1223 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
! 		  BLOCK_EXPR_BODY (yyvsp[0].node) = build_java_empty_stmt ();
  		  yyval.node = yyvsp[0].node;
  		;
      break;}
  case 143:
! #line 1228 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 144:
! #line 1230 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 145:
! #line 1232 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 147:
! #line 1242 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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);
*************** case 147:
*** 3766,3772 ****
  		;
      break;}
  case 148:
! #line 1223 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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);
--- 3791,3797 ----
  		;
      break;}
  case 148:
! #line 1248 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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);
*************** case 148:
*** 3774,3978 ****
  		;
      break;}
  case 149:
! #line 1231 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
      break;}
  case 150:
! #line 1233 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
      break;}
  case 151:
! #line 1238 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree wfl = build_wfl_node (this_identifier_node);
! 		  EXPR_WFL_LINECOL (wfl) = yyvsp[0].operator.location;
  		  yyval.node = wfl;
  		;
      break;}
  case 152:
! #line 1244 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree wfl = build_wfl_node (super_identifier_node);
! 		  EXPR_WFL_LINECOL (wfl) = yyvsp[0].operator.location;
  		  yyval.node = wfl;
  		;
      break;}
  case 153:
! #line 1255 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { create_interface (0, yyvsp[0].node, NULL_TREE); ;
      break;}
  case 154:
! #line 1257 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { ; ;
      break;}
  case 155:
! #line 1259 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { create_interface (yyvsp[-2].value, yyvsp[0].node, NULL_TREE); ;
      break;}
  case 156:
! #line 1261 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { ; ;
      break;}
  case 157:
! #line 1263 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { create_interface (0, yyvsp[-1].node, yyvsp[0].node);	;
      break;}
  case 158:
! #line 1265 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { ; ;
      break;}
  case 159:
! #line 1267 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { create_interface (yyvsp[-3].value, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 160:
! #line 1269 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { ; ;
      break;}
  case 161:
! #line 1271 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyerror ("'{' expected"); RECOVER; ;
      break;}
  case 162:
! #line 1273 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyerror ("'{' expected"); RECOVER; ;
      break;}
  case 163:
! #line 1278 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->interface_number = 1;
  		  yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
  		;
      break;}
  case 164:
! #line 1283 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->interface_number++;
  		  yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
  		;
      break;}
  case 165:
! #line 1288 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Invalid interface type"); RECOVER;;
      break;}
  case 166:
! #line 1290 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 167:
! #line 1295 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 168:
! #line 1297 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 173:
! #line 1309 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { end_class_declaration (1); ;
      break;}
  case 174:
! #line 1311 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { end_class_declaration (1); ;
      break;}
  case 176:
! #line 1320 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  check_abstract_method_header (yyvsp[-1].node);
  		  current_function_decl = NULL_TREE; /* FIXME ? */
  		;
      break;}
  case 177:
! #line 1325 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 178:
! #line 1331 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_new_array_init (yyvsp[-1].operator.location, NULL_TREE); ;
      break;}
  case 179:
! #line 1333 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_new_array_init (yyvsp[-2].operator.location, NULL_TREE); ;
      break;}
  case 180:
! #line 1335 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_new_array_init (yyvsp[-2].operator.location, yyvsp[-1].node); ;
      break;}
  case 181:
! #line 1337 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_new_array_init (yyvsp[-3].operator.location, yyvsp[-2].node); ;
      break;}
  case 182:
! #line 1342 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = tree_cons (maybe_build_array_element_wfl (yyvsp[0].node),
  				  yyvsp[0].node, NULL_TREE);
  		;
      break;}
  case 183:
! #line 1347 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = tree_cons (maybe_build_array_element_wfl (yyvsp[0].node), yyvsp[0].node, yyvsp[-2].node);
  		;
      break;}
  case 184:
! #line 1351 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 185:
! #line 1357 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 186:
! #line 1359 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 187:
! #line 1364 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { enter_block (); ;
      break;}
  case 188:
! #line 1369 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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) =
! 		      EXPR_WFL_ADD_COL (yyvsp[0].operator.location, 1);
  		  yyval.node = exit_block ();
  		  if (!BLOCK_SUBBLOCKS (yyval.node))
! 		    BLOCK_SUBBLOCKS (yyval.node) = empty_stmt_node;
  		;
      break;}
  case 192:
! #line 1389 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { java_method_add_stmt (current_function_decl, yyvsp[0].node); ;
      break;}
  case 193:
! #line 1391 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  LOCAL_CLASS_P (TREE_TYPE (GET_CPC ())) = 1;
  		  end_class_declaration (1);
  		;
      break;}
  case 195:
! #line 1403 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { declare_local_variables (0, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 196:
! #line 1405 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { declare_local_variables (yyvsp[-2].value, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 202:
! #line 1415 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = exit_block (); ;
      break;}
  case 207:
! #line 1424 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = exit_block (); ;
      break;}
  case 220:
! #line 1444 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  if (flag_extraneous_semicolon
  		      && ! current_static_block
--- 3799,4002 ----
  		;
      break;}
  case 149:
! #line 1256 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
      break;}
  case 150:
! #line 1258 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
      break;}
  case 151:
! #line 1263 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree wfl = build_wfl_node (this_identifier_node);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (wfl, yyvsp[0].operator);
  		  yyval.node = wfl;
  		;
      break;}
  case 152:
! #line 1269 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree wfl = build_wfl_node (super_identifier_node);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (wfl, yyvsp[0].operator);
  		  yyval.node = wfl;
  		;
      break;}
  case 153:
! #line 1280 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { create_interface (0, yyvsp[0].node, NULL_TREE); ;
      break;}
  case 154:
! #line 1282 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { ; ;
      break;}
  case 155:
! #line 1284 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { create_interface (yyvsp[-2].value, yyvsp[0].node, NULL_TREE); ;
      break;}
  case 156:
! #line 1286 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { ; ;
      break;}
  case 157:
! #line 1288 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { create_interface (0, yyvsp[-1].node, yyvsp[0].node);	;
      break;}
  case 158:
! #line 1290 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { ; ;
      break;}
  case 159:
! #line 1292 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { create_interface (yyvsp[-3].value, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 160:
! #line 1294 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { ; ;
      break;}
  case 161:
! #line 1296 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyerror ("'{' expected"); RECOVER; ;
      break;}
  case 162:
! #line 1298 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyerror ("'{' expected"); RECOVER; ;
      break;}
  case 163:
! #line 1303 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->interface_number = 1;
  		  yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
  		;
      break;}
  case 164:
! #line 1308 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->interface_number++;
  		  yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
  		;
      break;}
  case 165:
! #line 1313 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Invalid interface type"); RECOVER;;
      break;}
  case 166:
! #line 1315 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 167:
! #line 1320 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 168:
! #line 1322 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 173:
! #line 1334 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { end_class_declaration (1); ;
      break;}
  case 174:
! #line 1336 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { end_class_declaration (1); ;
      break;}
  case 176:
! #line 1345 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  check_abstract_method_header (yyvsp[-1].node);
  		  current_function_decl = NULL_TREE; /* FIXME ? */
  		;
      break;}
  case 177:
! #line 1350 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 178:
! #line 1356 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_new_array_init (yyvsp[-1].operator.location, NULL_TREE); ;
      break;}
  case 179:
! #line 1358 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_new_array_init (yyvsp[-2].operator.location, NULL_TREE); ;
      break;}
  case 180:
! #line 1360 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_new_array_init (yyvsp[-2].operator.location, yyvsp[-1].node); ;
      break;}
  case 181:
! #line 1362 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_new_array_init (yyvsp[-3].operator.location, yyvsp[-2].node); ;
      break;}
  case 182:
! #line 1367 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.node = tree_cons (maybe_build_array_element_wfl (yyvsp[0].node),
  				  yyvsp[0].node, NULL_TREE);
  		;
      break;}
  case 183:
! #line 1372 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 184:
! #line 1376 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 185:
! #line 1382 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 186:
! #line 1384 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 187:
! #line 1389 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { enter_block (); ;
      break;}
  case 188:
! #line 1394 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/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 192:
! #line 1413 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { java_method_add_stmt (current_function_decl, yyvsp[0].node); ;
      break;}
  case 193:
! #line 1415 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  LOCAL_CLASS_P (TREE_TYPE (GET_CPC ())) = 1;
  		  end_class_declaration (1);
  		;
      break;}
  case 195:
! #line 1427 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { declare_local_variables (0, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 196:
! #line 1429 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { declare_local_variables (yyvsp[-2].value, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 202:
! #line 1439 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = exit_block (); ;
      break;}
  case 207:
! #line 1448 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = exit_block (); ;
      break;}
  case 220:
! #line 1468 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  if (flag_extraneous_semicolon
  		      && ! current_static_block
*************** case 220:
*** 3982,3995 ****
  			   (DECL_CONTEXT (current_function_decl)))))
  
  		    {
  		      EXPR_WFL_SET_LINECOL (wfl_operator, input_line, -1);
  		      parse_warning_context (wfl_operator, "An empty declaration is a deprecated feature that should not be used");
  		    }
! 		  yyval.node = empty_stmt_node;
  		;
      break;}
  case 221:
! #line 1462 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = build_labeled_block (EXPR_WFL_LINECOL (yyvsp[-1].node),
  					    EXPR_WFL_NODE (yyvsp[-1].node));
--- 4006,4023 ----
  			   (DECL_CONTEXT (current_function_decl)))))
  
  		    {
+ #ifdef USE_MAPPED_LOCATION
+ 		      SET_EXPR_LOCATION (wfl_operator, input_location);
+ #else
  		      EXPR_WFL_SET_LINECOL (wfl_operator, input_line, -1);
+ #endif
  		      parse_warning_context (wfl_operator, "An empty declaration is a deprecated feature that should not be used");
  		    }
! 		  yyval.node = build_java_empty_stmt ();
  		;
      break;}
  case 221:
! #line 1490 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.node = build_labeled_block (EXPR_WFL_LINECOL (yyvsp[-1].node),
  					    EXPR_WFL_NODE (yyvsp[-1].node));
*************** case 221:
*** 3999,4124 ****
  		;
      break;}
  case 222:
! #line 1473 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 223:
! #line 1475 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("':' expected"); RECOVER;;
      break;}
  case 224:
! #line 1480 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 225:
! #line 1487 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  /* We have a statement. Generate a WFL around it so
  		     we can debug it */
  		  yyval.node = build_expr_wfl (yyvsp[-1].node, input_filename, input_line, 0);
  		  /* We know we have a statement, so set the debug
                       info to be eventually generate here. */
- 		  yyval.node = JAVA_MAYBE_GENERATE_DEBUG_INFO (yyval.node);
  		;
      break;}
  case 226:
! #line 1496 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;
      break;}
  case 227:
! #line 1501 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;
      break;}
  case 228:
! #line 1506 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;
      break;}
  case 229:
! #line 1511 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 230:
! #line 1513 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  parse_ctor_invocation_error ();
  		  RECOVER;
  		;
      break;}
  case 231:
! #line 1518 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 232:
! #line 1520 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  parse_ctor_invocation_error ();
  		  RECOVER;
  		;
      break;}
  case 233:
! #line 1525 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 234:
! #line 1527 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 235:
! #line 1529 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 236:
! #line 1531 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 237:
! #line 1533 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 245:
! #line 1548 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = build_if_else_statement (yyvsp[-3].operator.location, yyvsp[-2].node,
  						yyvsp[0].node, NULL_TREE);
  		;
      break;}
  case 246:
! #line 1553 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 247:
! #line 1555 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 248:
! #line 1557 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 249:
! #line 1562 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 250:
! #line 1567 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 1572 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  enter_block ();
  		;
      break;}
  case 252:
! #line 1576 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  /* Make into "proper list" of COMPOUND_EXPRs.
  		     I.e. make the last statement also have its own
--- 4027,4156 ----
  		;
      break;}
  case 222:
! #line 1501 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 223:
! #line 1503 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("':' expected"); RECOVER;;
      break;}
  case 224:
! #line 1508 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 225:
! #line 1515 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  /* We have a statement. Generate a WFL around it so
  		     we can debug it */
+ #ifdef USE_MAPPED_LOCATION
+ 		  yyval.node = expr_add_location (yyvsp[-1].node, input_location, 1);
+ #else
  		  yyval.node = build_expr_wfl (yyvsp[-1].node, input_filename, input_line, 0);
+ 		  JAVA_MAYBE_GENERATE_DEBUG_INFO (yyval.node);
+ #endif
  		  /* We know we have a statement, so set the debug
                       info to be eventually generate here. */
  		;
      break;}
  case 226:
! #line 1528 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;
      break;}
  case 227:
! #line 1533 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;
      break;}
  case 228:
! #line 1538 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  YYNOT_TWICE yyerror ("Invalid expression statement");
  		  DRECOVER (expr_stmt);
  		;
      break;}
  case 229:
! #line 1543 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 230:
! #line 1545 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  parse_ctor_invocation_error ();
  		  RECOVER;
  		;
      break;}
  case 231:
! #line 1550 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 232:
! #line 1552 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  parse_ctor_invocation_error ();
  		  RECOVER;
  		;
      break;}
  case 233:
! #line 1557 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 234:
! #line 1559 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 235:
! #line 1561 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 236:
! #line 1563 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 237:
! #line 1565 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 245:
! #line 1580 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 246:
! #line 1585 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 247:
! #line 1587 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 248:
! #line 1589 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 249:
! #line 1594 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 250:
! #line 1599 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 251:
! #line 1604 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  enter_block ();
  		;
      break;}
  case 252:
! #line 1608 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  /* Make into "proper list" of COMPOUND_EXPRs.
  		     I.e. make the last statement also have its own
*************** case 252:
*** 4129,4278 ****
  		;
      break;}
  case 253:
! #line 1588 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  yyval.node = build (SWITCH_EXPR, NULL_TREE, yyvsp[-1].node, NULL_TREE);
! 		  EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location;
  		;
      break;}
  case 254:
! #line 1593 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 255:
! #line 1595 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;
      break;}
  case 256:
! #line 1597 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'{' expected"); RECOVER;;
      break;}
  case 257:
! #line 1605 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 258:
! #line 1607 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 259:
! #line 1609 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 260:
! #line 1611 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 266:
! #line 1630 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree lab = build1 (CASE_EXPR, NULL_TREE, yyvsp[-1].node);
! 		  EXPR_WFL_LINECOL (lab) = yyvsp[-2].operator.location;
  		  java_method_add_stmt (current_function_decl, lab);
  		;
      break;}
  case 267:
! #line 1636 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  tree lab = build (DEFAULT_EXPR, NULL_TREE, NULL_TREE);
! 		  EXPR_WFL_LINECOL (lab) = yyvsp[-1].operator.location;
  		  java_method_add_stmt (current_function_decl, lab);
  		;
      break;}
  case 268:
! #line 1642 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing or invalid constant expression"); RECOVER;;
      break;}
  case 269:
! #line 1644 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("':' expected"); RECOVER;;
      break;}
  case 270:
! #line 1646 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("':' expected"); RECOVER;;
      break;}
  case 271:
! #line 1651 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 272:
! #line 1659 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
      break;}
  case 273:
! #line 1661 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;
      break;}
  case 274:
! #line 1663 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term and ')' expected"); RECOVER;;
      break;}
  case 275:
! #line 1665 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 276:
! #line 1670 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
      break;}
  case 277:
! #line 1675 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree body = build_loop_body (0, NULL_TREE, 1);
  		  yyval.node = build_new_loop (body);
  		;
      break;}
  case 278:
! #line 1684 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = finish_loop_body (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-5].node, 1); ;
      break;}
  case 279:
! #line 1689 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-4].node)) == 'c')
  		    yyvsp[-4].node = build_wfl_node (yyvsp[-4].node);
  		  yyval.node = finish_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);
  		;
      break;}
  case 280:
! #line 1695 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 */
  		  LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY (yyval.node), 0) =
! 		    empty_stmt_node;
  		;
      break;}
  case 281:
! #line 1702 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Invalid control expression"); RECOVER;;
      break;}
  case 282:
! #line 1704 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Invalid update expression"); RECOVER;;
      break;}
  case 283:
! #line 1706 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Invalid update expression"); RECOVER;;
      break;}
  case 284:
! #line 1711 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 285:
! #line 1713 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 */
  		  LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY (yyval.node), 0) =
! 		    empty_stmt_node;
  		;
      break;}
  case 286:
! #line 1723 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  /* This scope defined for local variable that may be
                       defined within the scope of the for loop */
--- 4161,4311 ----
  		;
      break;}
  case 253:
! #line 1620 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
! 		  yyval.node = build3 (SWITCH_EXPR, NULL_TREE, yyvsp[-1].node,
! 			       NULL_TREE, NULL_TREE);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (yyval.node, yyvsp[-2].operator);
  		;
      break;}
  case 254:
! #line 1626 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 255:
! #line 1628 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;
      break;}
  case 256:
! #line 1630 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'{' expected"); RECOVER;;
      break;}
  case 257:
! #line 1638 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 258:
! #line 1640 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 259:
! #line 1642 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 260:
! #line 1644 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = NULL_TREE; ;
      break;}
  case 266:
! #line 1663 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree lab = build1 (CASE_EXPR, NULL_TREE, yyvsp[-1].node);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (lab, yyvsp[-2].operator);
  		  java_method_add_stmt (current_function_decl, lab);
  		;
      break;}
  case 267:
! #line 1669 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
! 		  tree lab = make_node (DEFAULT_EXPR);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (lab, yyvsp[-1].operator);
  		  java_method_add_stmt (current_function_decl, lab);
  		;
      break;}
  case 268:
! #line 1675 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing or invalid constant expression"); RECOVER;;
      break;}
  case 269:
! #line 1677 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("':' expected"); RECOVER;;
      break;}
  case 270:
! #line 1679 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("':' expected"); RECOVER;;
      break;}
  case 271:
! #line 1684 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 272:
! #line 1692 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
      break;}
  case 273:
! #line 1694 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;
      break;}
  case 274:
! #line 1696 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term and ')' expected"); RECOVER;;
      break;}
  case 275:
! #line 1698 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("')' expected"); RECOVER;;
      break;}
  case 276:
! #line 1703 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
      break;}
  case 277:
! #line 1708 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree body = build_loop_body (0, NULL_TREE, 1);
  		  yyval.node = build_new_loop (body);
  		;
      break;}
  case 278:
! #line 1717 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = finish_loop_body (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-5].node, 1); ;
      break;}
  case 279:
! #line 1722 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
! 		  if (CONSTANT_CLASS_P (yyvsp[-4].node))
  		    yyvsp[-4].node = build_wfl_node (yyvsp[-4].node);
  		  yyval.node = finish_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);
  		;
      break;}
  case 280:
! #line 1728 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 */
  		  LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY (yyval.node), 0) =
! 		    build_java_empty_stmt ();
  		;
      break;}
  case 281:
! #line 1735 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Invalid control expression"); RECOVER;;
      break;}
  case 282:
! #line 1737 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Invalid update expression"); RECOVER;;
      break;}
  case 283:
! #line 1739 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Invalid update expression"); RECOVER;;
      break;}
  case 284:
! #line 1744 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 285:
! #line 1746 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 */
  		  LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY (yyval.node), 0) =
! 		    build_java_empty_stmt ();
  		;
      break;}
  case 286:
! #line 1756 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  /* This scope defined for local variable that may be
                       defined within the scope of the for loop */
*************** case 286:
*** 4280,4294 ****
  		;
      break;}
  case 287:
! #line 1729 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'(' expected"); DRECOVER(for_1);;
      break;}
  case 288:
! #line 1731 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Invalid init statement"); RECOVER;;
      break;}
  case 289:
! #line 1736 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  /* We now declare the loop body. The loop is
                       declared as a for loop. */
--- 4313,4327 ----
  		;
      break;}
  case 287:
! #line 1762 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'(' expected"); DRECOVER(for_1);;
      break;}
  case 288:
! #line 1764 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Invalid init statement"); RECOVER;;
      break;}
  case 289:
! #line 1769 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  /* We now declare the loop body. The loop is
                       declared as a for loop. */
*************** case 289:
*** 4301,4311 ****
  		;
      break;}
  case 290:
! #line 1748 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! { yyval.node = empty_stmt_node; ;
      break;}
  case 291:
! #line 1750 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  /* Init statement recorded within the previously
                       defined block scope */
--- 4334,4344 ----
  		;
      break;}
  case 290:
! #line 1781 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! { yyval.node = build_java_empty_stmt (); ;
      break;}
  case 291:
! #line 1783 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  /* Init statement recorded within the previously
                       defined block scope */
*************** case 291:
*** 4313,4319 ****
  		;
      break;}
  case 292:
! #line 1756 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  /* Local variable are recorded within the previously
  		     defined block scope */
--- 4346,4352 ----
  		;
      break;}
  case 292:
! #line 1789 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  /* Local variable are recorded within the previously
  		     defined block scope */
*************** case 292:
*** 4321,4461 ****
  		;
      break;}
  case 293:
! #line 1762 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); DRECOVER(for_init_1);;
      break;}
  case 294:
! #line 1766 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! {yyval.node = empty_stmt_node;;
      break;}
  case 295:
! #line 1768 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_debugable_stmt (BUILD_LOCATION (), yyvsp[0].node); ;
      break;}
  case 296:
! #line 1773 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = add_stmt_to_compound (NULL_TREE, NULL_TREE, yyvsp[0].node); ;
      break;}
  case 297:
! #line 1775 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = add_stmt_to_compound (yyvsp[-2].node, NULL_TREE, yyvsp[0].node); ;
      break;}
  case 298:
! #line 1777 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 299:
! #line 1782 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 1, NULL_TREE); ;
      break;}
  case 300:
! #line 1784 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 1, yyvsp[-1].node); ;
      break;}
  case 301:
! #line 1786 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 302:
! #line 1788 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 303:
! #line 1793 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 0, NULL_TREE); ;
      break;}
  case 304:
! #line 1795 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 0, yyvsp[-1].node); ;
      break;}
  case 305:
! #line 1797 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 306:
! #line 1799 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 307:
! #line 1804 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_return (yyvsp[-1].operator.location, NULL_TREE); ;
      break;}
  case 308:
! #line 1806 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_return (yyvsp[-2].operator.location, yyvsp[-1].node); ;
      break;}
  case 309:
! #line 1808 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 310:
! #line 1810 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 311:
! #line 1815 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = build1 (THROW_EXPR, NULL_TREE, yyvsp[-1].node);
! 		  EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location;
  		;
      break;}
  case 312:
! #line 1820 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 313:
! #line 1822 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 314:
! #line 1827 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = build_assertion (yyvsp[-4].operator.location, yyvsp[-3].node, yyvsp[-1].node);
  		;
      break;}
  case 315:
! #line 1831 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = build_assertion (yyvsp[-2].operator.location, yyvsp[-1].node, NULL_TREE);
  		;
      break;}
  case 316:
! #line 1835 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 317:
! #line 1837 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 318:
! #line 1842 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  yyval.node = build (SYNCHRONIZED_EXPR, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
  		  EXPR_WFL_LINECOL (yyval.node) =
  		    EXPR_WFL_LINECOL (MODIFIER_WFL (SYNCHRONIZED_TK));
  		;
      break;}
  case 319:
! #line 1848 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'{' expected"); RECOVER;;
      break;}
  case 320:
! #line 1850 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 321:
! #line 1852 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 322:
! #line 1854 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 323:
! #line 1859 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  check_modifiers (
!              "Illegal modifier `%s'. Only `synchronized' was expected here",
  				   yyvsp[0].value, ACC_SYNCHRONIZED);
  		  if (yyvsp[0].value != ACC_SYNCHRONIZED)
  		    MODIFIER_WFL (SYNCHRONIZED_TK) =
--- 4354,4494 ----
  		;
      break;}
  case 293:
! #line 1795 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); DRECOVER(for_init_1);;
      break;}
  case 294:
! #line 1799 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyval.node = build_java_empty_stmt ();;
      break;}
  case 295:
! #line 1801 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_debugable_stmt (BUILD_LOCATION (), yyvsp[0].node); ;
      break;}
  case 296:
! #line 1806 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = add_stmt_to_compound (NULL_TREE, NULL_TREE, yyvsp[0].node); ;
      break;}
  case 297:
! #line 1808 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = add_stmt_to_compound (yyvsp[-2].node, NULL_TREE, yyvsp[0].node); ;
      break;}
  case 298:
! #line 1810 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 299:
! #line 1815 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 1, NULL_TREE); ;
      break;}
  case 300:
! #line 1817 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 1, yyvsp[-1].node); ;
      break;}
  case 301:
! #line 1819 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 302:
! #line 1821 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 303:
! #line 1826 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 0, NULL_TREE); ;
      break;}
  case 304:
! #line 1828 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 0, yyvsp[-1].node); ;
      break;}
  case 305:
! #line 1830 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 306:
! #line 1832 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 307:
! #line 1837 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_return (yyvsp[-1].operator.location, NULL_TREE); ;
      break;}
  case 308:
! #line 1839 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_return (yyvsp[-2].operator.location, yyvsp[-1].node); ;
      break;}
  case 309:
! #line 1841 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 310:
! #line 1843 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 311:
! #line 1848 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 312:
! #line 1853 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 313:
! #line 1855 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 314:
! #line 1860 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.node = build_assertion (yyvsp[-4].operator.location, yyvsp[-3].node, yyvsp[-1].node);
  		;
      break;}
  case 315:
! #line 1864 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.node = build_assertion (yyvsp[-2].operator.location, yyvsp[-1].node, NULL_TREE);
  		;
      break;}
  case 316:
! #line 1868 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 317:
! #line 1870 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("';' expected"); RECOVER;;
      break;}
  case 318:
! #line 1875 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
! 		  yyval.node = build2 (SYNCHRONIZED_EXPR, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
  		  EXPR_WFL_LINECOL (yyval.node) =
  		    EXPR_WFL_LINECOL (MODIFIER_WFL (SYNCHRONIZED_TK));
  		;
      break;}
  case 319:
! #line 1881 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'{' expected"); RECOVER;;
      break;}
  case 320:
! #line 1883 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 321:
! #line 1885 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 322:
! #line 1887 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
  case 323:
! #line 1892 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  check_modifiers (
!              "Illegal modifier %qs. Only %<synchronized%> was expected here",
  				   yyvsp[0].value, ACC_SYNCHRONIZED);
  		  if (yyvsp[0].value != ACC_SYNCHRONIZED)
  		    MODIFIER_WFL (SYNCHRONIZED_TK) =
*************** case 323:
*** 4463,4495 ****
  		;
      break;}
  case 324:
! #line 1871 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 325:
! #line 1873 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_try_finally_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 326:
! #line 1875 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 327:
! #line 1880 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'{' expected"); DRECOVER (try_statement);;
      break;}
  case 329:
! #line 1886 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node;
  		  yyval.node = yyvsp[0].node;
  		;
      break;}
  case 330:
! #line 1894 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  java_method_add_stmt (current_function_decl, yyvsp[0].node);
  		  exit_block ();
--- 4496,4528 ----
  		;
      break;}
  case 324:
! #line 1904 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 325:
! #line 1906 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_try_finally_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ;
      break;}
  case 326:
! #line 1908 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 327:
! #line 1913 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'{' expected"); DRECOVER (try_statement);;
      break;}
  case 329:
! #line 1919 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node;
  		  yyval.node = yyvsp[0].node;
  		;
      break;}
  case 330:
! #line 1927 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  java_method_add_stmt (current_function_decl, yyvsp[0].node);
  		  exit_block ();
*************** case 330:
*** 4497,4503 ****
  		;
      break;}
  case 331:
! #line 1903 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  /* We add a block to define a scope for
  		     formal_parameter (CCBP). The formal parameter is
--- 4530,4536 ----
  		;
      break;}
  case 331:
! #line 1936 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  /* We add a block to define a scope for
  		     formal_parameter (CCBP). The formal parameter is
*************** case 331:
*** 4510,4521 ****
                        ccpb = enter_block ();
                        init = build_assignment
                          (ASSIGN_TK, yyvsp[-2].operator.location, TREE_PURPOSE (yyvsp[-1].node),
!                          build (JAVA_EXC_OBJ_EXPR, ptr_type_node));
                        declare_local_variables (0, TREE_VALUE (yyvsp[-1].node),
                                                 build_tree_list 
  					       (TREE_PURPOSE (yyvsp[-1].node), init));
!                       yyval.node = build1 (CATCH_EXPR, NULL_TREE, ccpb);
!                       EXPR_WFL_LINECOL (yyval.node) = yyvsp[-3].operator.location;
                      }
                    else
                      {
--- 4543,4554 ----
                        ccpb = enter_block ();
                        init = build_assignment
                          (ASSIGN_TK, yyvsp[-2].operator.location, TREE_PURPOSE (yyvsp[-1].node),
!                          build0 (JAVA_EXC_OBJ_EXPR, ptr_type_node));
                        declare_local_variables (0, TREE_VALUE (yyvsp[-1].node),
                                                 build_tree_list 
  					       (TREE_PURPOSE (yyvsp[-1].node), init));
!                       yyval.node = build1 (JAVA_CATCH_EXPR, NULL_TREE, ccpb);
!                       SET_EXPR_LOCATION_FROM_TOKEN (yyval.node, yyvsp[-3].operator);
                      }
                    else
                      {
*************** case 331:
*** 4524,4655 ****
  		;
      break;}
  case 332:
! #line 1928 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER; yyval.node = NULL_TREE;;
      break;}
  case 333:
! #line 1930 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Missing term or ')' expected");
  		  RECOVER; yyval.node = NULL_TREE;
  		;
      break;}
  case 334:
! #line 1935 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER; yyval.node = NULL_TREE;;
      break;}
  case 335:
! #line 1940 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 336:
! #line 1942 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'{' expected"); RECOVER; ;
      break;}
! case 340:
! #line 1954 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_this (yyvsp[0].operator.location); ;
      break;}
! case 341:
! #line 1956 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = yyvsp[-1].node;;
      break;}
! case 347:
! #line 1966 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 348:
- #line 1971 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
- {yyerror ("')' expected"); RECOVER;;
-     break;}
  case 349:
! #line 1973 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! {yyerror ("'class' or 'this' expected" ); RECOVER;;
      break;}
  case 350:
! #line 1975 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! {yyerror ("'class' expected" ); RECOVER;;
      break;}
  case 351:
! #line 1977 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'class' expected" ); RECOVER;;
      break;}
  case 352:
! #line 1982 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! { yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;
      break;}
  case 353:
! #line 1984 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;
      break;}
  case 354:
! #line 1986 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;
      break;}
  case 355:
! #line 1988 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
                     yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location,
                                                     void_type_node);
                  ;
      break;}
! case 356:
! #line 1996 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
! case 357:
! #line 1998 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ;
      break;}
! case 359:
! #line 2004 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree ctor = build_new_invocation (yyvsp[-2].node, NULL_TREE);
  		  yyval.node = make_qualified_primary (yyvsp[-3].node, ctor,
  					       EXPR_WFL_LINECOL (yyvsp[-3].node));
  		;
      break;}
! case 361:
! #line 2011 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree ctor = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node);
  		  yyval.node = make_qualified_primary (yyvsp[-4].node, ctor,
  					       EXPR_WFL_LINECOL (yyvsp[-4].node));
  		;
      break;}
- case 363:
- #line 2018 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
- {yyerror ("'(' expected"); DRECOVER(new_1);;
-     break;}
  case 364:
! #line 2020 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 365:
! #line 2022 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! {yyerror ("')' or term expected"); RECOVER;;
      break;}
  case 366:
! #line 2024 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! {yyerror ("')' expected"); RECOVER;;
      break;}
  case 367:
! #line 2026 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! {YYERROR_NOW; yyerror ("Identifier expected"); RECOVER;;
      break;}
  case 368:
! #line 2028 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! {yyerror ("'(' expected"); RECOVER;;
      break;}
  case 369:
! #line 2038 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! { create_anonymous_class (yyvsp[-4].operator.location, yyvsp[-3].node); ;
      break;}
  case 370:
! #line 2040 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
  		  EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (yyvsp[-5].node);
--- 4557,4693 ----
  		;
      break;}
  case 332:
! #line 1961 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'(' expected"); RECOVER; yyval.node = NULL_TREE;;
      break;}
  case 333:
! #line 1963 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Missing term or ')' expected");
  		  RECOVER; yyval.node = NULL_TREE;
  		;
      break;}
  case 334:
! #line 1968 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER; yyval.node = NULL_TREE;;
      break;}
  case 335:
! #line 1973 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[0].node; ;
      break;}
  case 336:
! #line 1975 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'{' expected"); RECOVER; ;
      break;}
! case 341:
! #line 1988 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_this (yyvsp[0].operator.location); ;
      break;}
! case 342:
! #line 1990 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyval.node = yyvsp[-1].node;;
      break;}
! case 348:
! #line 2000 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 349:
! #line 2005 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyerror ("')' expected"); RECOVER;;
      break;}
  case 350:
! #line 2007 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyerror ("'class' or 'this' expected" ); RECOVER;;
      break;}
  case 351:
! #line 2009 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'class' expected" ); RECOVER;;
      break;}
  case 352:
! #line 2011 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyerror ("'class' expected" ); RECOVER;;
      break;}
  case 353:
! #line 2016 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;
      break;}
  case 354:
! #line 2018 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;
      break;}
  case 355:
! #line 2020 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! { yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;
!     break;}
! case 356:
! #line 2022 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
                     yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location,
                                                     void_type_node);
                  ;
      break;}
! case 357:
! #line 2030 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
! case 358:
! #line 2032 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ;
      break;}
! case 360:
! #line 2038 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree ctor = build_new_invocation (yyvsp[-2].node, NULL_TREE);
  		  yyval.node = make_qualified_primary (yyvsp[-3].node, ctor,
  					       EXPR_WFL_LINECOL (yyvsp[-3].node));
  		;
      break;}
! case 362:
! #line 2045 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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,
  					       EXPR_WFL_LINECOL (yyvsp[-4].node));
  		;
      break;}
  case 364:
! #line 2052 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("'(' expected"); DRECOVER(new_1);;
      break;}
  case 365:
! #line 2054 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("'(' expected"); RECOVER;;
      break;}
  case 366:
! #line 2056 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("')' or term expected"); RECOVER;;
      break;}
  case 367:
! #line 2058 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("')' expected"); RECOVER;;
      break;}
  case 368:
! #line 2060 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {
! 		  yyval.node = NULL_TREE;
! 		  YYERROR_NOW;
! 		  yyerror ("Identifier expected");
! 		  RECOVER;
! 		;
      break;}
  case 369:
! #line 2067 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("'(' expected"); RECOVER;;
      break;}
  case 370:
! #line 2077 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! { create_anonymous_class (yyvsp[-3].node); ;
!     break;}
! case 371:
! #line 2079 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
  		  EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (yyvsp[-5].node);
*************** case 370:
*** 4675,4692 ****
  		     later on in verify_constructor_super.
  
  		     It's during the expansion of a `new' statement
! 		     refering to an anonymous class that a ctor will
  		     be generated for the anonymous class, with the
  		     right arguments. */
  
  		;
      break;}
- case 371:
- #line 2071 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
- { create_anonymous_class (yyvsp[-3].operator.location, yyvsp[-2].node); ;
-     break;}
  case 372:
! #line 2073 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
  		  EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (yyvsp[-4].node);
--- 4713,4730 ----
  		     later on in verify_constructor_super.
  
  		     It's during the expansion of a `new' statement
! 		     referring to an anonymous class that a ctor will
  		     be generated for the anonymous class, with the
  		     right arguments. */
  
  		;
      break;}
  case 372:
! #line 2110 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! { create_anonymous_class (yyvsp[-2].node); ;
!     break;}
! case 373:
! #line 2112 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
  		  EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (yyvsp[-4].node);
*************** case 372:
*** 4700,4749 ****
  		  yyval.node = build_new_invocation (id, NULL_TREE);
  		;
      break;}
- case 373:
- #line 2089 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
- { yyval.node = yyvsp[-2].node; ;
-     break;}
  case 374:
! #line 2091 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = yyvsp[-2].node; ;
      break;}
  case 375:
! #line 2096 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, NULL_TREE);
  		  ctxp->formal_parameter_number = 1;
  		;
      break;}
! case 376:
! #line 2101 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number += 1;
  		  yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node);
  		;
      break;}
- case 377:
- #line 2106 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
- {yyerror ("Missing term"); RECOVER;;
-     break;}
  case 378:
! #line 2111 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
      break;}
  case 379:
! #line 2113 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
      break;}
  case 380:
! #line 2115 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, pop_current_osb (ctxp));;
      break;}
  case 381:
! #line 2117 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, pop_current_osb (ctxp));;
      break;}
  case 382:
! #line 2121 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  char *sig;
  		  int osb = pop_current_osb (ctxp);
--- 4738,4795 ----
  		  yyval.node = build_new_invocation (id, NULL_TREE);
  		;
      break;}
  case 374:
! #line 2128 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = yyvsp[-2].node; ;
      break;}
  case 375:
! #line 2130 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! { yyval.node = yyvsp[-2].node; ;
!     break;}
! case 376:
! #line 2135 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, NULL_TREE);
  		  ctxp->formal_parameter_number = 1;
  		;
      break;}
! case 377:
! #line 2140 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  ctxp->formal_parameter_number += 1;
  		  yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node);
  		;
      break;}
  case 378:
! #line 2145 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyerror ("Missing term"); RECOVER;;
      break;}
  case 379:
! #line 2150 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
      break;}
  case 380:
! #line 2152 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
      break;}
  case 381:
! #line 2154 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, pop_current_osb (ctxp));;
      break;}
  case 382:
! #line 2156 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, pop_current_osb (ctxp));;
!     break;}
! case 383:
! #line 2158 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyerror ("'[' expected"); DRECOVER ("]");;
!     break;}
! case 384:
! #line 2160 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {yyerror ("']' expected"); RECOVER;;
!     break;}
! case 385:
! #line 2167 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  char *sig;
  		  int osb = pop_current_osb (ctxp);
*************** case 382:
*** 4751,4789 ****
  		    obstack_grow (&temporary_obstack, "[]", 2);
  		  obstack_1grow (&temporary_obstack, '\0');
  		  sig = obstack_finish (&temporary_obstack);
! 		  yyval.node = build (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! 			      yyvsp[-2].node, get_identifier (sig), yyvsp[0].node);
  		;
      break;}
! case 383:
! #line 2132 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  int osb = pop_current_osb (ctxp);
  		  tree type = yyvsp[-2].node;
  		  while (osb--)
  		    type = build_java_array_type (type, -1);
! 		  yyval.node = build (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! 			      build_pointer_type (type), NULL_TREE, yyvsp[0].node);
  		;
      break;}
! case 384:
! #line 2141 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("'[' expected"); DRECOVER ("]");;
      break;}
! case 385:
! #line 2143 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("']' expected"); RECOVER;;
      break;}
! case 386:
! #line 2148 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ;
      break;}
! case 387:
! #line 2150 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ;
      break;}
! case 388:
! #line 2155 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  if (JNUMERIC_TYPE_P (TREE_TYPE (yyvsp[-1].node)))
  		    {
--- 4797,4835 ----
  		    obstack_grow (&temporary_obstack, "[]", 2);
  		  obstack_1grow (&temporary_obstack, '\0');
  		  sig = obstack_finish (&temporary_obstack);
! 		  yyval.node = build3 (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! 			       yyvsp[-2].node, get_identifier (sig), yyvsp[0].node);
  		;
      break;}
! case 386:
! #line 2178 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  int osb = pop_current_osb (ctxp);
  		  tree type = yyvsp[-2].node;
  		  while (osb--)
  		    type = build_java_array_type (type, -1);
! 		  yyval.node = build3 (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! 			       build_pointer_type (type), NULL_TREE, yyvsp[0].node);
  		;
      break;}
! case 387:
! #line 2187 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("'[' expected"); DRECOVER ("]");;
      break;}
! case 388:
! #line 2189 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("']' expected"); RECOVER;;
      break;}
! case 389:
! #line 2194 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ;
      break;}
! case 390:
! #line 2196 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ;
      break;}
! case 391:
! #line 2201 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  if (JNUMERIC_TYPE_P (TREE_TYPE (yyvsp[-1].node)))
  		    {
*************** case 388:
*** 4794,4813 ****
  		  yyval.node = yyvsp[-1].node;
  		;
      break;}
! case 389:
! #line 2165 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("']' expected"); RECOVER;;
      break;}
! case 390:
! #line 2167 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Missing term");
  		  yyerror ("']' expected");
  		  RECOVER;
  		;
      break;}
! case 391:
! #line 2176 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  int allocate = 0;
  		  /* If not initialized, allocate memory for the osb
--- 4840,4859 ----
  		  yyval.node = yyvsp[-1].node;
  		;
      break;}
! case 392:
! #line 2211 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("']' expected"); RECOVER;;
      break;}
! case 393:
! #line 2213 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Missing term");
  		  yyerror ("']' expected");
  		  RECOVER;
  		;
      break;}
! case 394:
! #line 2222 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  int allocate = 0;
  		  /* If not initialized, allocate memory for the osb
*************** case 391:
*** 4834,4873 ****
  		  CURRENT_OSB (ctxp) = 1;
  		;
      break;}
! case 392:
! #line 2202 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { CURRENT_OSB (ctxp)++; ;
      break;}
! case 393:
! #line 2204 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyerror ("']' expected"); RECOVER;;
      break;}
! case 394:
! #line 2209 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = make_qualified_primary (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
      break;}
! case 395:
! #line 2213 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree super_wfl = build_wfl_node (super_identifier_node);
! 		  EXPR_WFL_LINECOL (super_wfl) = yyvsp[-2].operator.location;
  		  yyval.node = make_qualified_name (super_wfl, yyvsp[0].node, yyvsp[-1].operator.location);
  		;
      break;}
! case 396:
! #line 2219 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Field expected"); DRECOVER (super_field_acces);;
      break;}
! case 397:
! #line 2224 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ;
      break;}
! case 398:
! #line 2226 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
! case 399:
! #line 2228 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  if (TREE_CODE (yyvsp[-4].node) == THIS_EXPR)
  		    yyval.node = build_this_super_qualified_invocation
--- 4880,4919 ----
  		  CURRENT_OSB (ctxp) = 1;
  		;
      break;}
! case 395:
! #line 2248 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { CURRENT_OSB (ctxp)++; ;
      break;}
! case 396:
! #line 2250 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyerror ("']' expected"); RECOVER;;
      break;}
! case 397:
! #line 2255 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = make_qualified_primary (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
      break;}
! case 398:
! #line 2259 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree super_wfl = build_wfl_node (super_identifier_node);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (super_wfl, yyvsp[-2].operator);
  		  yyval.node = make_qualified_name (super_wfl, yyvsp[0].node, yyvsp[-1].operator.location);
  		;
      break;}
! case 399:
! #line 2265 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Field expected"); DRECOVER (super_field_acces);;
      break;}
! case 400:
! #line 2270 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ;
      break;}
! case 401:
! #line 2272 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
! case 402:
! #line 2274 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  if (TREE_CODE (yyvsp[-4].node) == THIS_EXPR)
  		    yyval.node = build_this_super_qualified_invocation
*************** case 399:
*** 4879,4886 ****
  		    }
  		;
      break;}
! case 400:
! #line 2239 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  if (TREE_CODE (yyvsp[-5].node) == THIS_EXPR)
  		    yyval.node = build_this_super_qualified_invocation
--- 4925,4932 ----
  		    }
  		;
      break;}
! case 403:
! #line 2285 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  if (TREE_CODE (yyvsp[-5].node) == THIS_EXPR)
  		    yyval.node = build_this_super_qualified_invocation
*************** case 400:
*** 4892,5020 ****
  		    }
  		;
      break;}
! case 401:
! #line 2250 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 402:
! #line 2255 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 403:
! #line 2264 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyerror ("'(' expected"); DRECOVER (method_invocation); ;
      break;}
! case 404:
! #line 2266 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyerror ("'(' expected"); DRECOVER (method_invocation); ;
      break;}
! case 405:
! #line 2271 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
! case 406:
! #line 2273 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
! case 407:
! #line 2275 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;
      break;}
! case 408:
! #line 2280 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;
      break;}
! case 409:
! #line 2285 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;
      break;}
! case 410:
! #line 2290 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;
      break;}
  case 415:
! #line 2305 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
! { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
      break;}
  case 416:
! #line 2310 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
      break;}
! case 419:
! #line 2317 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
      break;}
! case 421:
! #line 2320 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 422:
! #line 2325 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  error_if_numeric_overflow (yyvsp[0].node);
  		  yyval.node = yyvsp[0].node;
  		;
      break;}
! case 423:
! #line 2330 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
      break;}
! case 424:
! #line 2332 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 425:
! #line 2337 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
      break;}
! case 426:
! #line 2339 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 427:
! #line 2344 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
      break;}
! case 428:
! #line 2346 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 430:
! #line 2352 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
      break;}
! case 431:
! #line 2354 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
      break;}
! case 433:
! #line 2357 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 434:
! #line 2359 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 435:
! #line 2364 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  tree type = yyvsp[-3].node;
  		  int osb = pop_current_osb (ctxp);
--- 4938,5085 ----
  		    }
  		;
      break;}
! case 404:
! #line 2296 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 405:
! #line 2301 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 406:
! #line 2310 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyerror ("'(' expected"); DRECOVER (method_invocation); ;
      break;}
! case 407:
! #line 2312 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyerror ("'(' expected"); DRECOVER (method_invocation); ;
      break;}
! case 408:
! #line 2317 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
! case 409:
! #line 2319 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
      break;}
! case 410:
! #line 2321 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
!     break;}
! case 411:
! #line 2323 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;
      break;}
! case 412:
! #line 2328 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;
      break;}
! case 413:
! #line 2333 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("Missing term and ']' expected");
  		  DRECOVER(array_access);
  		;
      break;}
! case 414:
! #line 2338 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		;
      break;}
  case 415:
! #line 2343 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {
! 		  yyerror ("Missing term and ']' expected");
! 		  DRECOVER(array_access);
! 		;
      break;}
  case 416:
! #line 2348 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! {
! 		  yyerror ("']' expected");
! 		  DRECOVER(array_access);
! 		;
!     break;}
! case 421:
! #line 2363 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
      break;}
! case 422:
! #line 2368 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
! { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
!     break;}
! case 425:
! #line 2375 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
      break;}
! case 427:
! #line 2378 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 428:
! #line 2383 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
! 		  if (yyvsp[0].node)
! 		    error_if_numeric_overflow (yyvsp[0].node);
  		  yyval.node = yyvsp[0].node;
  		;
      break;}
! case 429:
! #line 2389 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
      break;}
! case 430:
! #line 2391 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 431:
! #line 2396 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
      break;}
! case 432:
! #line 2398 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 433:
! #line 2403 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 2405 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 436:
! #line 2411 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
      break;}
! case 437:
! #line 2413 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
      break;}
! case 439:
! #line 2416 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 440:
! #line 2418 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;
      break;}
! case 441:
! #line 2423 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  tree type = yyvsp[-3].node;
  		  int osb = pop_current_osb (ctxp);
*************** case 435:
*** 5023,5038 ****
  		  yyval.node = build_cast (yyvsp[-4].operator.location, type, yyvsp[0].node);
  		;
      break;}
! case 436:
! #line 2372 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
      break;}
! case 437:
! #line 2374 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
      break;}
! case 438:
! #line 2376 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  const char *ptr;
  		  int osb = pop_current_osb (ctxp);
--- 5088,5103 ----
  		  yyval.node = build_cast (yyvsp[-4].operator.location, type, yyvsp[0].node);
  		;
      break;}
! case 442:
! #line 2431 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
      break;}
! case 443:
! #line 2433 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
      break;}
! case 444:
! #line 2435 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  const char *ptr;
  		  int osb = pop_current_osb (ctxp);
*************** case 438:
*** 5047,5321 ****
  		  yyval.node = build_cast (yyvsp[-4].operator.location, yyvsp[-3].node, yyvsp[0].node);
  		;
      break;}
! case 439:
! #line 2390 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("']' expected, invalid type expression");;
      break;}
! case 440:
! #line 2392 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  	          YYNOT_TWICE yyerror ("Invalid type expression"); RECOVER;
  		  RECOVER;
  		;
      break;}
! case 441:
! #line 2397 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 442:
! #line 2399 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 443:
! #line 2401 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 445:
! #line 2407 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 446:
! #line 2412 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 447:
! #line 2417 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 448:
! #line 2422 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 449:
! #line 2424 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 450:
! #line 2426 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 452:
! #line 2432 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 2437 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 2442 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 455:
! #line 2444 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 457:
! #line 2450 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 458:
! #line 2455 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 459:
! #line 2460 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 2465 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 461:
! #line 2467 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 462:
! #line 2469 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 464:
! #line 2475 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 2480 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 2485 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 2490 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 2495 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_binop (INSTANCEOF_EXPR, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
      break;}
! case 469:
! #line 2497 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 470:
! #line 2499 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 471:
! #line 2501 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 472:
! #line 2503 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 473:
! #line 2505 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Invalid reference type"); RECOVER;;
      break;}
! case 475:
! #line 2511 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 2516 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 477:
! #line 2521 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 478:
! #line 2523 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 480:
! #line 2529 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 481:
! #line 2534 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 483:
! #line 2540 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 2545 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 486:
! #line 2551 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 487:
! #line 2556 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 489:
! #line 2562 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 490:
! #line 2567 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 492:
! #line 2573 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/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 493:
! #line 2578 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 495:
! #line 2584 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
! 		  yyval.node = build (CONDITIONAL_EXPR, NULL_TREE, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);
! 		  EXPR_WFL_LINECOL (yyval.node) = yyvsp[-3].operator.location;
  		;
      break;}
! case 496:
! #line 2589 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  YYERROR_NOW;
  		  yyerror ("Missing term");
  		  DRECOVER (1);
  		;
      break;}
! case 497:
! #line 2595 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); DRECOVER (2);;
      break;}
! case 498:
! #line 2597 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {yyerror ("Missing term"); DRECOVER (3);;
      break;}
! case 501:
! #line 2607 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  { yyval.node = build_assignment (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
      break;}
! case 502:
! #line 2609 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  {
  		  YYNOT_TWICE yyerror ("Missing term");
  		  DRECOVER (assign);
--- 5112,5386 ----
  		  yyval.node = build_cast (yyvsp[-4].operator.location, yyvsp[-3].node, yyvsp[0].node);
  		;
      break;}
! case 445:
! #line 2449 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("']' expected, invalid type expression");;
      break;}
! case 446:
! #line 2451 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  	          YYNOT_TWICE yyerror ("Invalid type expression"); RECOVER;
  		  RECOVER;
  		;
      break;}
! case 447:
! #line 2456 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 448:
! #line 2458 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 449:
! #line 2460 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 451:
! #line 2466 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 452:
! #line 2471 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 453:
! #line 2476 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 2481 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 455:
! #line 2483 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 456:
! #line 2485 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 458:
! #line 2491 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 459:
! #line 2496 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 460:
! #line 2501 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 461:
! #line 2503 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 463:
! #line 2509 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 464:
! #line 2514 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 465:
! #line 2519 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 2524 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 467:
! #line 2526 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 468:
! #line 2528 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 470:
! #line 2534 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 471:
! #line 2539 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 472:
! #line 2544 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 473:
! #line 2549 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 474:
! #line 2554 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  { yyval.node = build_binop (INSTANCEOF_EXPR, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
      break;}
! case 475:
! #line 2556 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 476:
! #line 2558 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 477:
! #line 2560 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 478:
! #line 2562 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 479:
! #line 2564 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Invalid reference type"); RECOVER;;
      break;}
! case 481:
! #line 2570 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 482:
! #line 2575 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 483:
! #line 2580 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 484:
! #line 2582 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 486:
! #line 2588 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 487:
! #line 2593 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 489:
! #line 2599 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 490:
! #line 2604 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 492:
! #line 2610 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 493:
! #line 2615 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 495:
! #line 2621 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 496:
! #line 2626 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 498:
! #line 2632 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 499:
! #line 2637 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); RECOVER;;
      break;}
! case 501:
! #line 2643 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 502:
! #line 2648 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  YYERROR_NOW;
  		  yyerror ("Missing term");
  		  DRECOVER (1);
  		;
      break;}
! case 503:
! #line 2654 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); DRECOVER (2);;
      break;}
! case 504:
! #line 2656 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {yyerror ("Missing term"); DRECOVER (3);;
      break;}
! case 507:
! #line 2666 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.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 508:
! #line 2668 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  {
  		  YYNOT_TWICE yyerror ("Missing term");
  		  DRECOVER (assign);
*************** yyreturn:
*** 5554,5560 ****
  #endif
    return yyresult;
  }
! #line 2634 "/home/mitchell/scratch/gcc-3.4.3/gcc-3.4.3/gcc/java/parse.y"
  
  
  /* Helper function to retrieve an OSB count. Should be used when the
--- 5619,5625 ----
  #endif
    return yyresult;
  }
! #line 2693 "/scratch/mitchell/gcc-releases/gcc-4.0.0/gcc-4.0.0/gcc/java/parse.y"
  
  
  /* Helper function to retrieve an OSB count. Should be used when the
*************** void
*** 5616,5631 ****
  java_pop_parser_context (int generate)
  {
    tree current;
!   struct parser_ctxt *toFree, *next;
  
    if (!ctxp)
      return;
  
-   toFree = ctxp;
    next = ctxp->next;
    if (next)
      {
!       input_line = ctxp->lineno;
        current_class = ctxp->class_type;
      }
  
--- 5681,5695 ----
  java_pop_parser_context (int generate)
  {
    tree current;
!   struct parser_ctxt *next;
  
    if (!ctxp)
      return;
  
    next = ctxp->next;
    if (next)
      {
!       input_location = ctxp->save_location;
        current_class = ctxp->class_type;
      }
  
*************** java_pop_parser_context (int generate)
*** 5638,5656 ****
    for (current = ctxp->import_list; current; current = TREE_CHAIN (current))
      IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P (TREE_VALUE (current)) = 0;
  
-   /* And restore those of the previous context */
-   if ((ctxp = next))		/* Assignment is really meant here */
-     for (current = ctxp->import_list; current; current = TREE_CHAIN (current))
-       IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P (TREE_VALUE (current)) = 1;
- 
    /* If we pushed a context to parse a class intended to be generated,
       we keep it so we can remember the class. What we could actually
       do is to just update a list of class names.  */
    if (generate)
      {
!       toFree->next = ctxp_for_generation;
!       ctxp_for_generation = toFree;
      }
  }
  
  /* Create a parser context for the use of saving some global
--- 5702,5720 ----
    for (current = ctxp->import_list; current; current = TREE_CHAIN (current))
      IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P (TREE_VALUE (current)) = 0;
  
    /* If we pushed a context to parse a class intended to be generated,
       we keep it so we can remember the class. What we could actually
       do is to just update a list of class names.  */
    if (generate)
      {
!       ctxp->next = ctxp_for_generation;
!       ctxp_for_generation = ctxp;
      }
+ 
+   /* And restore those of the previous context */
+   if ((ctxp = next))		/* Assignment is really meant here */
+     for (current = ctxp->import_list; current; current = TREE_CHAIN (current))
+       IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P (TREE_VALUE (current)) = 1;
  }
  
  /* Create a parser context for the use of saving some global
*************** java_parser_context_save_global (void)
*** 5673,5681 ****
        ctxp->saved_data_ctx = 1;
      }
  
!   ctxp->lineno = input_line;
    ctxp->class_type = current_class;
-   ctxp->filename = input_filename;
    ctxp->function_decl = current_function_decl;
    ctxp->saved_data = 1;
  }
--- 5737,5744 ----
        ctxp->saved_data_ctx = 1;
      }
  
!   ctxp->save_location = input_location;
    ctxp->class_type = current_class;
    ctxp->function_decl = current_function_decl;
    ctxp->saved_data = 1;
  }
*************** java_parser_context_save_global (void)
*** 5686,5700 ****
  void
  java_parser_context_restore_global (void)
  {
!   input_line = ctxp->lineno;
    current_class = ctxp->class_type;
-   input_filename = ctxp->filename;
    if (wfl_operator)
!     {
!       tree s;
!       BUILD_FILENAME_IDENTIFIER_NODE (s, input_filename);
!       EXPR_WFL_FILENAME_NODE (wfl_operator) = s;
!     }
    current_function_decl = ctxp->function_decl;
    ctxp->saved_data = 0;
    if (ctxp->saved_data_ctx)
--- 5749,5762 ----
  void
  java_parser_context_restore_global (void)
  {
!   input_location = ctxp->save_location;
    current_class = ctxp->class_type;
    if (wfl_operator)
! #ifdef USE_MAPPED_LOCATION
!     SET_EXPR_LOCATION (wfl_operator, ctxp->save_location);
! #else
!     EXPR_WFL_FILENAME_NODE (wfl_operator) = get_identifier (input_filename);
! #endif
    current_function_decl = ctxp->function_decl;
    ctxp->saved_data = 0;
    if (ctxp->saved_data_ctx)
*************** java_debug_context_do (int tab)
*** 5862,5869 ****
        TAB_CONTEXT (tab);
        fprintf (stderr, "filename: %s\n", copy->filename);
        TAB_CONTEXT (tab);
-       fprintf (stderr, "lineno: %d\n", copy->lineno);
-       TAB_CONTEXT (tab);
        fprintf (stderr, "package: %s\n",
  	       (copy->package ?
  		IDENTIFIER_POINTER (copy->package) : "<none>"));
--- 5924,5929 ----
*************** parse_ctor_invocation_error (void)
*** 5908,5949 ****
  static tree
  parse_jdk1_1_error (const char *msg)
  {
!   sorry (": `%s' JDK1.1(TM) feature", msg);
    java_error_count++;
!   return empty_stmt_node;
  }
  
  static int do_warning = 0;
  
  void
! yyerror (const char *msg)
  {
    static java_lc elc;
!   static int  prev_lineno;
    static const char *prev_msg;
  
-   int save_lineno;
    char *remainder, *code_from_source;
  
!   if (!force_error && prev_lineno == input_line)
      return;
  
    /* Save current error location but report latter, when the context is
       richer.  */
    if (ctxp->java_error_flag == 0)
      {
        ctxp->java_error_flag = 1;
!       elc = ctxp->elc;
        /* Do something to use the previous line if we're reaching the
  	 end of the file... */
  #ifdef VERBOSE_SKELETON
!       printf ("* Error detected (%s)\n", (msg ? msg : "(null)"));
  #endif
        return;
      }
  
    /* Ignore duplicate message on the same line. BTW, this is dubious. FIXME */
!   if (!force_error && msg == prev_msg && prev_lineno == elc.line)
      return;
  
    ctxp->java_error_flag = 0;
--- 5968,6023 ----
  static tree
  parse_jdk1_1_error (const char *msg)
  {
!   sorry (": %qs JDK1.1(TM) feature", msg);
    java_error_count++;
!   return build_java_empty_stmt ();
  }
  
  static int do_warning = 0;
  
  void
! yyerror (const char *msgid)
  {
+ #ifdef USE_MAPPED_LOCATION
+   static source_location elc;
+   expanded_location xloc = expand_location (input_location);
+   int current_line = xloc.line;
+ #else
    static java_lc elc;
!   int save_lineno;
!   int current_line = input_line;
! #endif
!   static int prev_lineno;
    static const char *prev_msg;
  
    char *remainder, *code_from_source;
  
!   if (!force_error && prev_lineno == current_line)
      return;
+ #ifndef USE_MAPPED_LOCATION
+   current_line = ctxp->lexer->token_start.line;
+ #endif
  
    /* Save current error location but report latter, when the context is
       richer.  */
    if (ctxp->java_error_flag == 0)
      {
        ctxp->java_error_flag = 1;
! #ifdef USE_MAPPED_LOCATION
!       elc = input_location;
! #else
!       elc = ctxp->lexer->token_start;
! #endif
        /* Do something to use the previous line if we're reaching the
  	 end of the file... */
  #ifdef VERBOSE_SKELETON
!       printf ("* Error detected (%s)\n", (msgid ? msgid : "(null)"));
  #endif
        return;
      }
  
    /* Ignore duplicate message on the same line. BTW, this is dubious. FIXME */
!   if (!force_error && msgid == prev_msg && prev_lineno == current_line)
      return;
  
    ctxp->java_error_flag = 0;
*************** yyerror (const char *msg)
*** 5952,6031 ****
    else
      java_error_count++;
  
!   if (elc.col == 0 && msg && msg[1] == ';')
!     {
!       elc.col  = ctxp->p_line->char_col-1;
!       elc.line = ctxp->p_line->lineno;
!     }
  
    save_lineno = input_line;
!   prev_lineno = input_line = elc.line;
!   prev_msg = msg;
  
-   code_from_source = java_get_line_col (ctxp->filename, elc.line, elc.col);
    obstack_grow0 (&temporary_obstack,
  		 code_from_source, strlen (code_from_source));
    remainder = obstack_finish (&temporary_obstack);
    if (do_warning)
!     warning ("%s.\n%s", msg, remainder);
    else
!     error ("%s.\n%s", msg, remainder);
  
    /* This allow us to cheaply avoid an extra 'Invalid expression
       statement' error report when errors have been already reported on
       the same line. This occurs when we report an error but don't have
       a synchronization point other than ';', which
       expression_statement is the only one to take care of.  */
!   ctxp->prevent_ese = input_line = save_lineno;
  }
  
  static void
! issue_warning_error_from_context (tree cl, const char *msg, va_list ap)
  {
!   const char *saved, *saved_input_filename;
    char buffer [4096];
!   vsprintf (buffer, msg, ap);
    force_error = 1;
  
!   ctxp->elc.line = EXPR_WFL_LINENO (cl);
!   ctxp->elc.col  = (EXPR_WFL_COLNO (cl) == 0xfff ? -1 :
! 		    (EXPR_WFL_COLNO (cl) == 0xffe ? -2 : EXPR_WFL_COLNO (cl)));
  
    /* We have a CL, that's a good reason for using it if it contains data */
-   saved = ctxp->filename;
    if (TREE_CODE (cl) == EXPR_WITH_FILE_LOCATION && EXPR_WFL_FILENAME_NODE (cl))
      ctxp->filename = EXPR_WFL_FILENAME (cl);
    saved_input_filename = input_filename;
    input_filename = ctxp->filename;
    java_error (NULL);
    java_error (buffer);
    ctxp->filename = saved;
    input_filename = saved_input_filename;
    force_error = 0;
  }
  
! /* Issue an error message at a current source line CL */
  
  void
! parse_error_context (tree cl, const char *msg, ...)
  {
    va_list ap;
!   va_start (ap, msg);
!   issue_warning_error_from_context (cl, msg, ap);
    va_end (ap);
  }
  
! /* Issue a warning at a current source line CL */
  
  static void
! parse_warning_context (tree cl, const char *msg, ...)
  {
    va_list ap;
!   va_start (ap, msg);
  
!   force_error = do_warning = 1;
!   issue_warning_error_from_context (cl, msg, ap);
!   do_warning = force_error = 0;
    va_end (ap);
  }
  
--- 6026,6159 ----
    else
      java_error_count++;
  
! #if 0 /* FIXME */
!   if (elc.col == 0 && msgid && msgid[1] == ';')
!     elc = ctxp->prev_line_end;
! #endif
  
+   prev_msg = msgid;
+ 
+ #ifdef USE_MAPPED_LOCATION
+   prev_lineno = current_line;
+   code_from_source = java_get_line_col (xloc.file, current_line, xloc.column);
+ #else
    save_lineno = input_line;
!   prev_lineno = input_line = current_line;
!   code_from_source = java_get_line_col (input_filename, current_line,
! 					ctxp->lexer->token_start.col);
! #endif
! 
  
    obstack_grow0 (&temporary_obstack,
  		 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);
  
    /* This allow us to cheaply avoid an extra 'Invalid expression
       statement' error report when errors have been already reported on
       the same line. This occurs when we report an error but don't have
       a synchronization point other than ';', which
       expression_statement is the only one to take care of.  */
! #ifndef USE_MAPPED_LOCATION
!   input_line = save_lineno;
! #endif
!   ctxp->prevent_ese = input_line;
  }
  
  static void
! issue_warning_error_from_context (
! #ifdef USE_MAPPED_LOCATION
! 				  source_location cl,
! #else
! 				  tree cl,
! #endif
! 				  const char *msgid, va_list *ap)
  {
! #ifdef USE_MAPPED_LOCATION
!   source_location saved_location = input_location;
!   expanded_location xloc = expand_location (cl);
! #else
!   java_lc save_lc = ctxp->lexer->token_start;
!   const char *saved = ctxp->filename, *saved_input_filename;
! #endif
    char buffer [4096];
!   text_info text;
! 
!   text.err_no = errno;
!   text.args_ptr = ap;
!   text.format_spec = msgid;
!   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);
! 
    force_error = 1;
  
! #ifdef USE_MAPPED_LOCATION
!   if (xloc.file != NULL)
!     {
!       ctxp->filename = xloc.file;
!       input_location = cl;
!     }
! #else
!   ctxp->lexer->token_start.line = EXPR_WFL_LINENO (cl);
!   ctxp->lexer->token_start.col  = (EXPR_WFL_COLNO (cl) == 0xfff ? -1
! 				   : EXPR_WFL_COLNO (cl) == 0xffe ? -2
! 				   : EXPR_WFL_COLNO (cl));
  
    /* We have a CL, that's a good reason for using it if it contains data */
    if (TREE_CODE (cl) == EXPR_WITH_FILE_LOCATION && EXPR_WFL_FILENAME_NODE (cl))
      ctxp->filename = EXPR_WFL_FILENAME (cl);
    saved_input_filename = input_filename;
    input_filename = ctxp->filename;
+ #endif
    java_error (NULL);
    java_error (buffer);
+ #ifdef USE_MAPPED_LOCATION
+   input_location = saved_location;
+ #else
    ctxp->filename = saved;
    input_filename = saved_input_filename;
+   ctxp->lexer->token_start = save_lc;
+ #endif
    force_error = 0;
  }
  
! /* Issue an error message at a current source line CL.
!    FUTURE/FIXME:  change cl to be a source_location. */
  
  void
! parse_error_context (tree cl, const char *msgid, ...)
  {
    va_list ap;
!   va_start (ap, msgid);
! #ifdef USE_MAPPED_LOCATION
!   issue_warning_error_from_context (EXPR_LOCATION (cl), msgid, &ap);
! #else
!   issue_warning_error_from_context (cl, msgid, &ap);
! #endif
    va_end (ap);
  }
  
! /* Issue a warning at a current source line CL.
!    FUTURE/FIXME:  change cl to be a source_location. */
  
  static void
! parse_warning_context (tree cl, const char *msgid, ...)
  {
    va_list ap;
!   va_start (ap, msgid);
  
!   do_warning = 1;
! #ifdef USE_MAPPED_LOCATION
!   issue_warning_error_from_context (EXPR_LOCATION (cl), msgid, &ap);
! #else
!   issue_warning_error_from_context (cl, msgid, &ap);
! #endif
!   do_warning = 0;
    va_end (ap);
  }
  
*************** find_expr_with_wfl (tree node)
*** 6034,6040 ****
  {
    while (node)
      {
!       char code;
        tree to_return;
  
        switch (TREE_CODE (node))
--- 6162,6168 ----
  {
    while (node)
      {
!       enum tree_code_class code;
        tree to_return;
  
        switch (TREE_CODE (node))
*************** find_expr_with_wfl (tree node)
*** 6055,6066 ****
  	  continue;
  
  	case LABELED_BLOCK_EXPR:
! 	  node = TREE_OPERAND (node, 1);
  	  continue;
  
  	default:
  	  code = TREE_CODE_CLASS (TREE_CODE (node));
! 	  if (((code == '1') || (code == '2') || (code == 'e'))
  	      && EXPR_WFL_LINECOL (node))
  	    return node;
  	  return NULL_TREE;
--- 6183,6195 ----
  	  continue;
  
  	case LABELED_BLOCK_EXPR:
! 	  node = LABELED_BLOCK_BODY (node);
  	  continue;
  
  	default:
  	  code = TREE_CODE_CLASS (TREE_CODE (node));
! 	  if (((code == tcc_unary) || (code == tcc_binary)
! 	       || (code == tcc_expression))
  	      && EXPR_WFL_LINECOL (node))
  	    return node;
  	  return NULL_TREE;
*************** find_expr_with_wfl (tree node)
*** 6075,6081 ****
--- 6204,6214 ----
  static void
  missing_return_error (tree method)
  {
+ #ifdef USE_MAPPED_LOCATION
+   SET_EXPR_LOCATION (wfl_operator, DECL_FUNCTION_LAST_LINE (method));
+ #else
    EXPR_WFL_SET_LINECOL (wfl_operator, DECL_FUNCTION_LAST_LINE (method), -2);
+ #endif
    parse_error_context (wfl_operator, "Missing return statement");
  }
  
*************** unreachable_stmt_error (tree node)
*** 6093,6099 ****
--- 6226,6236 ----
  
    if (node)
      {
+ #ifdef USE_MAPPED_LOCATION
+       SET_EXPR_LOCATION (wfl_operator, EXPR_LOCATION (node));
+ #else
        EXPR_WFL_SET_LINECOL (wfl_operator, EXPR_WFL_LINENO (node), -2);
+ #endif
        parse_error_context (wfl_operator, "Unreachable statement");
      }
    else
*************** static int
*** 6104,6111 ****
  not_accessible_field_error (tree wfl, tree decl)
  {
    parse_error_context 
!     (wfl, "Can't access %s field `%s.%s' from `%s'",
!      java_accstring_lookup (get_access_flags_from_decl (decl)),
       GET_TYPE_NAME (DECL_CONTEXT (decl)),
       IDENTIFIER_POINTER (DECL_NAME (decl)),
       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))));
--- 6241,6248 ----
  not_accessible_field_error (tree wfl, tree decl)
  {
    parse_error_context 
!     (wfl, "Can't access %s field %<%s.%s%> from %qs",
!      accessibility_string (get_access_flags_from_decl (decl)),
       GET_TYPE_NAME (DECL_CONTEXT (decl)),
       IDENTIFIER_POINTER (DECL_NAME (decl)),
       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))));
*************** java_accstring_lookup (int flags)
*** 6151,6163 ****
  #undef COPY_RETURN
  }
  
  /* Issuing error messages upon redefinition of classes, interfaces or
     variables. */
  
  static void
  classitf_redefinition_error (const char *context, tree id, tree decl, tree cl)
  {
!   parse_error_context (cl, "%s `%s' already defined in %s:%d",
  		       context, IDENTIFIER_POINTER (id),
  		       DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl));
    /* Here we should point out where its redefined. It's a unicode. FIXME */
--- 6288,6316 ----
  #undef COPY_RETURN
  }
  
+ /* Returns a string denoting the accessibility of a class or a member as
+    indicated by FLAGS.  We need a separate function from
+    java_accstring_lookup, as the latter can return spurious "static", etc.
+    if package-private access is defined (in which case none of the
+    relevant access control bits in FLAGS is set).  */
+ 
+ static const char *
+ accessibility_string (int flags)
+ {
+   if (flags & ACC_PRIVATE) return "private";
+   if (flags & ACC_PROTECTED) return "protected";
+   if (flags & ACC_PUBLIC) return "public";
+ 
+   return "package-private";
+ }
+ 
  /* Issuing error messages upon redefinition of classes, interfaces or
     variables. */
  
  static void
  classitf_redefinition_error (const char *context, tree id, tree decl, tree cl)
  {
!   parse_error_context (cl, "%s %qs already defined in %s:%d",
  		       context, IDENTIFIER_POINTER (id),
  		       DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl));
    /* Here we should point out where its redefined. It's a unicode. FIXME */
*************** variable_redefinition_error (tree contex
*** 6175,6181 ****
      type_name = lang_printable_name (type, 0);
  
    parse_error_context (context,
! 		       "Variable `%s' is already defined in this method and was declared `%s %s' at line %d",
  		       IDENTIFIER_POINTER (name),
  		       type_name, IDENTIFIER_POINTER (name), line);
  }
--- 6328,6334 ----
      type_name = lang_printable_name (type, 0);
  
    parse_error_context (context,
! 		       "Variable %qs is already defined in this method and was declared %<%s %s%> at line %d",
  		       IDENTIFIER_POINTER (name),
  		       type_name, IDENTIFIER_POINTER (name), line);
  }
*************** build_unresolved_array_type (tree type_o
*** 6268,6277 ****
--- 6421,6434 ----
  		 IDENTIFIER_LENGTH (EXPR_WFL_NODE (type_or_wfl)));
    obstack_grow0 (&temporary_obstack, "[]", 2);
    ptr = obstack_finish (&temporary_obstack);
+ #ifdef USE_MAPPED_LOCATION
+   wfl = build_expr_wfl (get_identifier (ptr), EXPR_LOCATION (type_or_wfl));
+ #else
    wfl = build_expr_wfl (get_identifier (ptr),
  			EXPR_WFL_FILENAME (type_or_wfl),
  			EXPR_WFL_LINENO (type_or_wfl),
  			EXPR_WFL_COLNO (type_or_wfl));
+ #endif
    /* Re-install the existing qualifications so that the type can be
       resolved properly. */
    EXPR_WFL_QUALIFICATION (wfl) = EXPR_WFL_QUALIFICATION (type_or_wfl);
*************** static void
*** 6282,6288 ****
  parser_add_interface (tree class_decl, tree interface_decl, tree wfl)
  {
    if (maybe_add_interface (TREE_TYPE (class_decl), TREE_TYPE (interface_decl)))
!     parse_error_context (wfl, "Interface `%s' repeated",
  			 IDENTIFIER_POINTER (DECL_NAME (interface_decl)));
  }
  
--- 6439,6445 ----
  parser_add_interface (tree class_decl, tree interface_decl, tree wfl)
  {
    if (maybe_add_interface (TREE_TYPE (class_decl), TREE_TYPE (interface_decl)))
!     parse_error_context (wfl, "Interface %qs repeated",
  			 IDENTIFIER_POINTER (DECL_NAME (interface_decl)));
  }
  
*************** check_class_interface_creation (int is_i
*** 6312,6318 ****
        && !CPC_INNER_P ())
      {
        parse_error_context
! 	(cl, "%s name `%s' clashes with imported type `%s'",
  	 (is_interface ? "Interface" : "Class"),
  	 IDENTIFIER_POINTER (raw_name), IDENTIFIER_POINTER (node));
        return 1;
--- 6469,6475 ----
        && !CPC_INNER_P ())
      {
        parse_error_context
! 	(cl, "%s name %qs clashes with imported type %qs",
  	 (is_interface ? "Interface" : "Class"),
  	 IDENTIFIER_POINTER (raw_name), IDENTIFIER_POINTER (node));
        return 1;
*************** check_class_interface_creation (int is_i
*** 6331,6349 ****
       when dealing with an inner class */
    if (!CPC_INNER_P () && (flags & ACC_PUBLIC ))
      {
        const char *f;
  
!       for (f = &input_filename [strlen (input_filename)];
! 	   f != input_filename && ! IS_DIR_SEPARATOR (f[0]);
  	   f--)
  	;
!       if (IS_DIR_SEPARATOR (f[0]))
  	f++;
        if (strncmp (IDENTIFIER_POINTER (raw_name),
  		   f , IDENTIFIER_LENGTH (raw_name)) ||
  	  f [IDENTIFIER_LENGTH (raw_name)] != '.')
  	parse_error_context
! 	  (cl, "Public %s `%s' must be defined in a file called `%s.java'",
  			     (is_interface ? "interface" : "class"),
  			     IDENTIFIER_POINTER (qualified_name),
  			     IDENTIFIER_POINTER (raw_name));
--- 6488,6507 ----
       when dealing with an inner class */
    if (!CPC_INNER_P () && (flags & ACC_PUBLIC ))
      {
+       const char *fname = input_filename;
        const char *f;
  
!       for (f = fname + strlen (fname);
! 	   f != fname && ! IS_DIR_SEPARATOR (*f);
  	   f--)
  	;
!       if (IS_DIR_SEPARATOR (*f))
  	f++;
        if (strncmp (IDENTIFIER_POINTER (raw_name),
  		   f , IDENTIFIER_LENGTH (raw_name)) ||
  	  f [IDENTIFIER_LENGTH (raw_name)] != '.')
  	parse_error_context
! 	  (cl, "Public %s %qs must be defined in a file called %<%s.java%>",
  			     (is_interface ? "interface" : "class"),
  			     IDENTIFIER_POINTER (qualified_name),
  			     IDENTIFIER_POINTER (raw_name));
*************** check_class_interface_creation (int is_i
*** 6358,6364 ****
  	 complaining a second time */
        if (CPC_INNER_P () && !TOPLEVEL_CLASS_DECL_P (GET_CPC()))
  	{
! 	  parse_error_context (cl, "Inner class `%s' can't be static. Static classes can only occur in interfaces and top-level classes",
  			       IDENTIFIER_POINTER (qualified_name));
  	  sca = ACC_STATIC;
  	}
--- 6516,6522 ----
  	 complaining a second time */
        if (CPC_INNER_P () && !TOPLEVEL_CLASS_DECL_P (GET_CPC()))
  	{
! 	  parse_error_context (cl, "Inner class %qs can't be static. Static classes can only occur in interfaces and top-level classes",
  			       IDENTIFIER_POINTER (qualified_name));
  	  sca = ACC_STATIC;
  	}
*************** check_class_interface_creation (int is_i
*** 6393,6405 ****
        else
  	uaaf = INTERFACE_MODIFIERS;
  
!       check_modifiers ("Illegal modifier `%s' for interface declaration",
  		       flags, uaaf);
      }
    else
      check_modifiers ((current_function_decl ?
! 		      "Illegal modifier `%s' for local class declaration" :
! 		      "Illegal modifier `%s' for class declaration"),
  		     flags, uaaf|sca|icaf);
    return 0;
  }
--- 6551,6563 ----
        else
  	uaaf = INTERFACE_MODIFIERS;
  
!       check_modifiers ("Illegal modifier %qs for interface declaration",
  		       flags, uaaf);
      }
    else
      check_modifiers ((current_function_decl ?
! 		      "Illegal modifier %qs for local class declaration" :
! 		      "Illegal modifier %qs for class declaration"),
  		     flags, uaaf|sca|icaf);
    return 0;
  }
*************** check_inner_class_redefinition (tree raw
*** 6439,6445 ****
      if (raw_name == GET_CPC_UN_NODE (scope_list))
        {
  	parse_error_context
! 	  (cl, "The class name `%s' is already defined in this scope. An inner class may not have the same simple name as any of its enclosing classes",
  	   IDENTIFIER_POINTER (raw_name));
  	return 1;
        }
--- 6597,6603 ----
      if (raw_name == GET_CPC_UN_NODE (scope_list))
        {
  	parse_error_context
! 	  (cl, "The class name %qs is already defined in this scope. An inner class may not have the same simple name as any of its enclosing classes",
  	   IDENTIFIER_POINTER (raw_name));
  	return 1;
        }
*************** find_as_inner_class (tree enclosing, tre
*** 6535,6541 ****
    else if (cl)
      qual = build_tree_list (cl, NULL_TREE);
    else
!     qual = build_tree_list (build_expr_wfl (name, NULL, 0, 0), NULL_TREE);
  
    if ((to_return = find_as_inner_class_do (qual, enclosing)))
      return to_return;
--- 6693,6699 ----
    else if (cl)
      qual = build_tree_list (cl, NULL_TREE);
    else
!     qual = build_tree_list (build_unknown_wfl (name), NULL_TREE);
  
    if ((to_return = find_as_inner_class_do (qual, enclosing)))
      return to_return;
*************** find_as_inner_class (tree enclosing, tre
*** 6565,6571 ****
      }
    /* Otherwise, create a qual for the other part of the resolution. */
    else
!     qual = build_tree_list (build_expr_wfl (name, NULL, 0, 0), NULL_TREE);
  
    return find_as_inner_class_do (qual, enclosing);
  }
--- 6723,6729 ----
      }
    /* Otherwise, create a qual for the other part of the resolution. */
    else
!     qual = build_tree_list (build_unknown_wfl (name), NULL_TREE);
  
    return find_as_inner_class_do (qual, enclosing);
  }
*************** find_as_inner_class_do (tree qual, tree 
*** 6600,6618 ****
    return (!qual && enclosing ? enclosing : NULL_TREE);
  }
  
- /* Reach all inner classes and tie their unqualified name to a
-    DECL. */
- 
- static void
- set_nested_class_simple_name_value (tree outer, int set)
- {
-   tree l;
- 
-   for (l = DECL_INNER_CLASS_LIST (outer); l; l = TREE_CHAIN (l))
-     IDENTIFIER_GLOBAL_VALUE (TREE_VALUE (l)) = (set ?
- 						TREE_PURPOSE (l) : NULL_TREE);
- }
- 
  static void
  link_nested_class_to_enclosing (void)
  {
--- 6758,6763 ----
*************** maybe_create_class_interface_decl (tree 
*** 6667,6682 ****
--- 6812,6839 ----
      decl = push_class (make_class (), qualified_name);
  
    /* Take care of the file and line business */
+ #ifdef USE_MAPPED_LOCATION
+   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;
+ #ifdef USE_MAPPED_LOCATION
+   {
+     tree tmp = maybe_get_identifier (EXPR_FILENAME (cl));
+     CLASS_FROM_CURRENTLY_COMPILED_P (TREE_TYPE (decl)) =
+       tmp && IS_A_COMMAND_LINE_FILENAME_P (tmp);
+   }
+ #else
    CLASS_FROM_CURRENTLY_COMPILED_P (TREE_TYPE (decl)) =
      IS_A_COMMAND_LINE_FILENAME_P (EXPR_WFL_FILENAME_NODE (cl));
+ #endif
  
    PUSH_CPC (decl, raw_name);
    DECL_CONTEXT (decl) = GET_ENCLOSING_CPC_CONTEXT ();
*************** create_interface (int flags, tree id, tr
*** 6767,6777 ****
    if ((flags & ACC_ABSTRACT) && flag_redundant)
      parse_warning_context
        (MODIFIER_WFL (ABSTRACT_TK),
!        "Redundant use of `abstract' modifier. Interface `%s' is implicitly abstract", IDENTIFIER_POINTER (raw_name));
  
    /* Create a new decl if DECL is NULL, otherwise fix it */
    decl = maybe_create_class_interface_decl (decl, raw_name, q_name, id);
  
    /* Set super info and mark the class a complete */
    set_super_info (ACC_INTERFACE | flags, TREE_TYPE (decl),
  		  object_type_node, ctxp->interface_number);
--- 6924,6941 ----
    if ((flags & ACC_ABSTRACT) && flag_redundant)
      parse_warning_context
        (MODIFIER_WFL (ABSTRACT_TK),
!        "Redundant use of %<abstract%> modifier. Interface %qs is implicitly abstract", IDENTIFIER_POINTER (raw_name));
  
    /* Create a new decl if DECL is NULL, otherwise fix it */
    decl = maybe_create_class_interface_decl (decl, raw_name, q_name, id);
  
+   /* Interfaces are always abstract. */
+   flags |= ACC_ABSTRACT;
+ 
+   /* Inner interfaces are always static.  */
+   if (INNER_CLASS_DECL_P (decl))
+     flags |= ACC_STATIC;
+ 
    /* Set super info and mark the class a complete */
    set_super_info (ACC_INTERFACE | flags, TREE_TYPE (decl),
  		  object_type_node, ctxp->interface_number);
*************** patch_anonymous_class (tree type_decl, t
*** 6798,6813 ****
    /* If it's an interface, implement it */
    if (CLASS_INTERFACE (type_decl))
      {
-       tree s_binfo;
-       int length;
- 
        if (parser_check_super_interface (type_decl, class_decl, wfl))
  	return;
  
!       s_binfo = TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (class)), 0);
!       length = TREE_VEC_LENGTH (TYPE_BINFO_BASETYPES (class))+1;
!       TYPE_BINFO_BASETYPES (class) = make_tree_vec (length);
!       TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (class)), 0) = s_binfo;
        /* And add the interface */
        parser_add_interface (class_decl, type_decl, wfl);
      }
--- 6962,6985 ----
    /* If it's an interface, implement it */
    if (CLASS_INTERFACE (type_decl))
      {
        if (parser_check_super_interface (type_decl, class_decl, wfl))
  	return;
  
!       if (!VEC_space (tree, BINFO_BASE_BINFOS (binfo), 1))
! 	{
! 	   /* Extend the binfo - by reallocating and copying it. */
! 	  tree new_binfo;
! 	  tree base_binfo;
! 	  int i;
! 	  
! 	  new_binfo = make_tree_binfo ((BINFO_N_BASE_BINFOS (binfo) + 1) * 2);
! 	  for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
! 	    BINFO_BASE_APPEND (new_binfo, base_binfo);
! 	  CLASS_HAS_SUPER_FLAG (new_binfo) = CLASS_HAS_SUPER_FLAG (binfo);
! 	  BINFO_VTABLE (new_binfo) = BINFO_VTABLE (binfo);
! 	  TYPE_BINFO (class) = new_binfo;
! 	}
!       
        /* And add the interface */
        parser_add_interface (class_decl, type_decl, wfl);
      }
*************** patch_anonymous_class (tree type_decl, t
*** 6816,6827 ****
      {
        if (parser_check_super (type_decl, class_decl, wfl))
  	return;
!       BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (binfo), 0)) = type;
      }
  }
  
  static tree
! create_anonymous_class (int location, tree type_name)
  {
    char buffer [80];
    tree super = NULL_TREE, itf = NULL_TREE;
--- 6988,7002 ----
      {
        if (parser_check_super (type_decl, class_decl, wfl))
  	return;
!       BINFO_TYPE (BINFO_BASE_BINFO (binfo, 0)) = type;
      }
  }
  
+ /* Create an anonymous class which extends/implements TYPE_NAME, and return
+    its decl.  */
+ 
  static tree
! create_anonymous_class (tree type_name)
  {
    char buffer [80];
    tree super = NULL_TREE, itf = NULL_TREE;
*************** create_anonymous_class (int location, tr
*** 6830,6836 ****
    /* The unqualified name of the anonymous class. It's just a number. */
    sprintf (buffer, "%d", anonymous_class_counter++);
    id = build_wfl_node (get_identifier (buffer));
!   EXPR_WFL_LINECOL (id) = location;
  
    /* We know about the type to extend/implement. We go ahead */
    if ((type_decl = IDENTIFIER_CLASS_VALUE (EXPR_WFL_NODE (type_name))))
--- 7005,7011 ----
    /* The unqualified name of the anonymous class. It's just a number. */
    sprintf (buffer, "%d", anonymous_class_counter++);
    id = build_wfl_node (get_identifier (buffer));
!   EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (type_name);
  
    /* We know about the type to extend/implement. We go ahead */
    if ((type_decl = IDENTIFIER_CLASS_VALUE (EXPR_WFL_NODE (type_name))))
*************** create_class (int flags, tree id, tree s
*** 6904,6910 ****
         - Public classes defined in the correct file */
    if ((flags & ACC_ABSTRACT) && (flags & ACC_FINAL))
      parse_error_context
!       (id, "Class `%s' can't be declared both abstract and final",
         IDENTIFIER_POINTER (raw_name));
  
    /* Create a new decl if DECL is NULL, otherwise fix it */
--- 7079,7085 ----
         - Public classes defined in the correct file */
    if ((flags & ACC_ABSTRACT) && (flags & ACC_FINAL))
      parse_error_context
!       (id, "Class %qs can't be declared both abstract and final",
         IDENTIFIER_POINTER (raw_name));
  
    /* Create a new decl if DECL is NULL, otherwise fix it */
*************** create_class (int flags, tree id, tree s
*** 6913,6922 ****
    /* If SUPER exists, use it, otherwise use Object */
    if (super)
      {
!       /* Can't extend java.lang.Object */
        if (TREE_TYPE (IDENTIFIER_CLASS_VALUE (class_id)) == object_type_node)
  	{
! 	  parse_error_context (id, "Can't extend `java.lang.Object'");
  	  return NULL_TREE;
  	}
  
--- 7088,7097 ----
    /* If SUPER exists, use it, otherwise use Object */
    if (super)
      {
!       /* java.lang.Object can't extend anything.  */
        if (TREE_TYPE (IDENTIFIER_CLASS_VALUE (class_id)) == object_type_node)
  	{
! 	  parse_error_context (id, "%<java.lang.Object%> can't extend anything");
  	  return NULL_TREE;
  	}
  
*************** create_class (int flags, tree id, tree s
*** 6943,6951 ****
    CLASS_COMPLETE_P (decl) = 1;
    add_superinterfaces (decl, interfaces);
  
    /* Add the private this$<n> field, Replicate final locals still in
       scope as private final fields mangled like val$<local_name>.
!      This doesn't not occur for top level (static) inner classes. */
    if (PURE_INNER_CLASS_DECL_P (decl))
      add_inner_class_fields (decl, current_function_decl);
  
--- 7118,7131 ----
    CLASS_COMPLETE_P (decl) = 1;
    add_superinterfaces (decl, interfaces);
  
+   /* TYPE_VFIELD' is a compiler-generated field used to point to
+      virtual function tables.  In gcj, every class has a common base
+      virtual function table in java.lang.object.  */
+   TYPE_VFIELD (TREE_TYPE (decl)) = TYPE_VFIELD (object_type_node);
+ 
    /* 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);
  
*************** duplicate_declaration_error_p (tree new_
*** 7153,7159 ****
  			  IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (decl))) :
  			  lang_printable_name (TREE_TYPE (decl), 1)));
        parse_error_context
! 	(cl , "Duplicate variable declaration: `%s %s' was `%s %s' (%s:%d)",
  	 t1, IDENTIFIER_POINTER (new_field_name),
  	 t2, IDENTIFIER_POINTER (DECL_NAME (decl)),
  	 DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl));
--- 7333,7339 ----
  			  IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (decl))) :
  			  lang_printable_name (TREE_TYPE (decl), 1)));
        parse_error_context
! 	(cl, "Duplicate variable declaration: %<%s %s%> was %<%s %s%> (%s:%d)",
  	 t1, IDENTIFIER_POINTER (new_field_name),
  	 t2, IDENTIFIER_POINTER (DECL_NAME (decl)),
  	 DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl));
*************** register_fields (int flags, tree type, t
*** 7173,7179 ****
  {
    tree current, saved_type;
    tree class_type = NULL_TREE;
!   int saved_lineno = input_line;
    int must_chain = 0;
    tree wfl = NULL_TREE;
  
--- 7353,7359 ----
  {
    tree current, saved_type;
    tree class_type = NULL_TREE;
!   location_t saved_location = input_location;
    int must_chain = 0;
    tree wfl = NULL_TREE;
  
*************** register_fields (int flags, tree type, t
*** 7193,7199 ****
  				 flags, ACC_STATIC, "interface field(s)");
        OBSOLETE_MODIFIER_WARNING (MODIFIER_WFL (FINAL_TK),
  				 flags, ACC_FINAL, "interface field(s)");
!       check_modifiers ("Illegal interface member modifier `%s'", flags,
  		       INTERFACE_FIELD_MODIFIERS);
        flags |= (ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
      }
--- 7373,7379 ----
  				 flags, ACC_STATIC, "interface field(s)");
        OBSOLETE_MODIFIER_WARNING (MODIFIER_WFL (FINAL_TK),
  				 flags, ACC_FINAL, "interface field(s)");
!       check_modifiers ("Illegal interface member modifier %qs", flags,
  		       INTERFACE_FIELD_MODIFIERS);
        flags |= (ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
      }
*************** register_fields (int flags, tree type, t
*** 7217,7223 ****
        if ((flags & ACC_STATIC) && !TOPLEVEL_CLASS_TYPE_P (class_type)
            && !(flags & ACC_FINAL))
  	parse_error_context
!           (cl, "Field `%s' can't be static in inner class `%s' unless it is final",
  	   IDENTIFIER_POINTER (EXPR_WFL_NODE (cl)),
  	   lang_printable_name (class_type, 0));
  
--- 7397,7403 ----
        if ((flags & ACC_STATIC) && !TOPLEVEL_CLASS_TYPE_P (class_type)
            && !(flags & ACC_FINAL))
  	parse_error_context
!           (cl, "Field %qs can't be static in inner class %qs unless it is final",
  	   IDENTIFIER_POINTER (EXPR_WFL_NODE (cl)),
  	   lang_printable_name (class_type, 0));
  
*************** register_fields (int flags, tree type, t
*** 7240,7251 ****
        if (duplicate_declaration_error_p (current_name, real_type, cl))
  	continue;
  
!       /* Set lineno to the line the field was found and create a
           declaration for it. Eventually sets the @deprecated tag flag. */
        if (flag_emit_xref)
  	input_line = EXPR_WFL_LINECOL (cl);
        else
  	input_line = EXPR_WFL_LINENO (cl);
        field_decl = add_field (class_type, current_name, real_type, flags);
        CHECK_DEPRECATED_NO_RESET (field_decl);
  
--- 7420,7435 ----
        if (duplicate_declaration_error_p (current_name, real_type, cl))
  	continue;
  
!       /* Set input_line to the line the field was found and create a
           declaration for it. Eventually sets the @deprecated tag flag. */
+ #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);
  
*************** register_fields (int flags, tree type, t
*** 7307,7313 ****
      }
  
    CLEAR_DEPRECATED;
!   input_line = saved_lineno;
  }
  
  /* Generate finit$, using the list of initialized fields to populate
--- 7491,7497 ----
      }
  
    CLEAR_DEPRECATED;
!   input_location = saved_location;
  }
  
  /* Generate finit$, using the list of initialized fields to populate
*************** method_header (int flags, tree type, tre
*** 7428,7434 ****
    tree meth_name = NULL_TREE;
    tree current, orig_arg, this_class = NULL;
    tree id, meth;
!   int saved_lineno;
    int constructor_ok = 0, must_chain;
    int count;
  
--- 7612,7618 ----
    tree meth_name = NULL_TREE;
    tree current, orig_arg, this_class = NULL;
    tree id, meth;
!   location_t saved_location;
    int constructor_ok = 0, must_chain;
    int count;
  
*************** method_header (int flags, tree type, tre
*** 7458,7478 ****
        if (!CLASS_ABSTRACT (TYPE_NAME (this_class))
  	  && !CLASS_INTERFACE (TYPE_NAME (this_class)))
  	parse_error_context
! 	  (id, "Class `%s' must be declared abstract to define abstract method `%s'",
  	   IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())),
  	   IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
      }
  
    /* A native method can't be strictfp.  */
    if ((flags & ACC_NATIVE) && (flags & ACC_STRICT))
!     parse_error_context (id, "native method `%s' can't be strictfp",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
    /* No such thing as a transient or volatile method.  */
    if ((flags & ACC_TRANSIENT))
!     parse_error_context (id, "method `%s' can't be transient",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
    if ((flags & ACC_VOLATILE))
!     parse_error_context (id, "method `%s' can't be volatile",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
  
    /* Things to be checked when declaring a constructor */
--- 7642,7663 ----
        if (!CLASS_ABSTRACT (TYPE_NAME (this_class))
  	  && !CLASS_INTERFACE (TYPE_NAME (this_class)))
  	parse_error_context
! 	  (id,
!            "Class %qs must be declared abstract to define abstract method %qs",
  	   IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())),
  	   IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
      }
  
    /* A native method can't be strictfp.  */
    if ((flags & ACC_NATIVE) && (flags & ACC_STRICT))
!     parse_error_context (id, "native method %qs can't be strictfp",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
    /* No such thing as a transient or volatile method.  */
    if ((flags & ACC_TRANSIENT))
!     parse_error_context (id, "method %qs can't be transient",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
    if ((flags & ACC_VOLATILE))
!     parse_error_context (id, "method %qs can't be volatile",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
  
    /* Things to be checked when declaring a constructor */
*************** method_header (int flags, tree type, tre
*** 7522,7528 ****
    if ((flags & ACC_STATIC) && !TOPLEVEL_CLASS_TYPE_P (this_class))
      {
        parse_error_context
! 	(id, "Method `%s' can't be static in inner class `%s'. Only members of interfaces and top-level classes can be static",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)),
  	 lang_printable_name (this_class, 0));
      }
--- 7707,7713 ----
    if ((flags & ACC_STATIC) && !TOPLEVEL_CLASS_TYPE_P (this_class))
      {
        parse_error_context
! 	(id, "Method %qs can't be static in inner class %qs. Only members of interfaces and top-level classes can be static",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)),
  	 lang_printable_name (this_class, 0));
      }
*************** method_header (int flags, tree type, tre
*** 7559,7570 ****
    else
      TREE_TYPE (meth) = type;
  
!   saved_lineno = input_line;
    /* When defining an abstract or interface method, the curly
       bracket at level 1 doesn't exist because there is no function
       body */
!   input_line = (ctxp->first_ccb_indent1 ? ctxp->first_ccb_indent1 :
! 	    EXPR_WFL_LINENO (id));
  
    /* Remember the original argument list */
    orig_arg = TYPE_ARG_TYPES (meth);
--- 7744,7760 ----
    else
      TREE_TYPE (meth) = type;
  
!   saved_location = input_location;
    /* When defining an abstract or interface method, the curly
       bracket at level 1 doesn't exist because there is no function
       body */
! #ifdef USE_MAPPED_LOCATION
!   input_location = (ctxp->first_ccb_indent1 ? ctxp->first_ccb_indent1 :
! 		    EXPR_LOCATION (id));
! #else
!   input_line = (ctxp->first_ccb_indent1 ? (int) ctxp->first_ccb_indent1 :
! 		EXPR_WFL_LINENO (id));
! #endif
  
    /* Remember the original argument list */
    orig_arg = TYPE_ARG_TYPES (meth);
*************** method_header (int flags, tree type, tre
*** 7597,7603 ****
    /* Register the parameter number and re-install the current line
       number */
    DECL_MAX_LOCALS (meth) = ctxp->formal_parameter_number+1;
!   input_line = saved_lineno;
  
    /* Register exception specified by the `throws' keyword for
       resolution and set the method decl appropriate field to the list.
--- 7787,7793 ----
    /* Register the parameter number and re-install the current line
       number */
    DECL_MAX_LOCALS (meth) = ctxp->formal_parameter_number+1;
!   input_location = saved_location;
  
    /* Register exception specified by the `throws' keyword for
       resolution and set the method decl appropriate field to the list.
*************** method_header (int flags, tree type, tre
*** 7638,7644 ****
    /* If doing xref, store column and line number information instead
       of the line number only. */
    if (flag_emit_xref)
!     DECL_SOURCE_LINE (meth) = EXPR_WFL_LINECOL (id);
  
    return meth;
  }
--- 7828,7840 ----
    /* 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;
  }
*************** finish_method_declaration (tree method_b
*** 7677,7683 ****
      {
        tree name = DECL_NAME (current_function_decl);
        parse_error_context (DECL_FUNCTION_WFL (current_function_decl),
! 			   "%s method `%s' can't have a body defined",
  			   (METHOD_NATIVE (current_function_decl) ?
  			    "Native" : "Abstract"),
  			   IDENTIFIER_POINTER (name));
--- 7873,7879 ----
      {
        tree name = DECL_NAME (current_function_decl);
        parse_error_context (DECL_FUNCTION_WFL (current_function_decl),
! 			   "%s method %qs can't have a body defined",
  			   (METHOD_NATIVE (current_function_decl) ?
  			    "Native" : "Abstract"),
  			   IDENTIFIER_POINTER (name));
*************** finish_method_declaration (tree method_b
*** 7688,7694 ****
        tree name = DECL_NAME (current_function_decl);
        parse_error_context
  	(DECL_FUNCTION_WFL (current_function_decl),
! 	 "Non native and non abstract method `%s' must have a body defined",
  	 IDENTIFIER_POINTER (name));
        method_body = NULL_TREE;
      }
--- 7884,7890 ----
        tree name = DECL_NAME (current_function_decl);
        parse_error_context
  	(DECL_FUNCTION_WFL (current_function_decl),
! 	 "Non native and non abstract method %qs must have a body defined",
  	 IDENTIFIER_POINTER (name));
        method_body = NULL_TREE;
      }
*************** static char *
*** 7724,7731 ****
  constructor_circularity_msg (tree from, tree to)
  {
    static char string [4096];
!   char *t = xstrdup (lang_printable_name (from, 0));
!   sprintf (string, "`%s' invokes `%s'", t, lang_printable_name (to, 0));
    free (t);
    return string;
  }
--- 7920,7927 ----
  constructor_circularity_msg (tree from, tree to)
  {
    static char string [4096];
!   char *t = xstrdup (lang_printable_name (from, 2));
!   sprintf (string, "'%s' invokes '%s'", t, lang_printable_name (to, 2));
    free (t);
    return string;
  }
*************** verify_constructor_circularity (tree met
*** 7757,7765 ****
  		  java_error_count--;
  		}
  	    }
! 	  t = xstrdup (lang_printable_name (meth, 0));
  	  parse_error_context (TREE_PURPOSE (c),
! 			       "%s: recursive invocation of constructor `%s'",
  			       constructor_circularity_msg (current, meth), t);
  	  free (t);
  	  vcc_list = NULL_TREE;
--- 7953,7961 ----
  		  java_error_count--;
  		}
  	    }
! 	  t = xstrdup (lang_printable_name (meth, 2));
  	  parse_error_context (TREE_PURPOSE (c),
! 			       "%s: recursive invocation of constructor %qs",
  			       constructor_circularity_msg (current, meth), t);
  	  free (t);
  	  vcc_list = NULL_TREE;
*************** check_modifiers_consistency (int flags)
*** 7789,7795 ****
    THIS_MODIFIER_ONLY (flags, ACC_PROTECTED, PROTECTED_TK, acc_count, cl);
    if (acc_count > 1)
      parse_error_context
!       (cl, "Inconsistent member declaration.  At most one of `public', `private', or `protected' may be specified");
  
    acc_count = 0;
    cl = NULL_TREE;
--- 7985,7991 ----
    THIS_MODIFIER_ONLY (flags, ACC_PROTECTED, PROTECTED_TK, acc_count, cl);
    if (acc_count > 1)
      parse_error_context
!       (cl, "Inconsistent member declaration.  At most one of %<public%>, %<private%>, or %<protected%> may be specified");
  
    acc_count = 0;
    cl = NULL_TREE;
*************** check_modifiers_consistency (int flags)
*** 7797,7803 ****
    THIS_MODIFIER_ONLY (flags, ACC_VOLATILE, VOLATILE_TK, acc_count, cl);
    if (acc_count > 1)
      parse_error_context (cl,
! 			 "Inconsistent member declaration.  At most one of `final' or `volatile' may be specified");
  }
  
  /* Check the methode header METH for abstract specifics features */
--- 7993,7999 ----
    THIS_MODIFIER_ONLY (flags, ACC_VOLATILE, VOLATILE_TK, acc_count, cl);
    if (acc_count > 1)
      parse_error_context (cl,
! 			 "Inconsistent member declaration.  At most one of %<final%> or %<volatile%> may be specified");
  }
  
  /* Check the methode header METH for abstract specifics features */
*************** check_abstract_method_header (tree meth)
*** 7814,7820 ****
  			      ACC_PUBLIC, "abstract method",
  			      IDENTIFIER_POINTER (DECL_NAME (meth)));
  
!   check_modifiers ("Illegal modifier `%s' for interface method",
  		  flags, INTERFACE_METHOD_MODIFIERS);
  }
  
--- 8010,8016 ----
  			      ACC_PUBLIC, "abstract method",
  			      IDENTIFIER_POINTER (DECL_NAME (meth)));
  
!   check_modifiers ("Illegal modifier %qs for interface method",
  		  flags, INTERFACE_METHOD_MODIFIERS);
  }
  
*************** method_declarator (tree id, tree list)
*** 7887,7893 ****
  	if (TREE_PURPOSE (already) == name)
  	  {
  	    parse_error_context
! 	      (wfl_name, "Variable `%s' is used more than once in the argument list of method `%s'",
  	       IDENTIFIER_POINTER (name),
  	       IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
  	    break;
--- 8083,8089 ----
  	if (TREE_PURPOSE (already) == name)
  	  {
  	    parse_error_context
! 	      (wfl_name, "Variable %qs is used more than once in the argument list of method %qs",
  	       IDENTIFIER_POINTER (name),
  	       IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
  	    break;
*************** method_declarator (tree id, tree list)
*** 7922,7928 ****
  
  static int
  unresolved_type_p (tree wfl, tree *returned)
- 
  {
    if (TREE_CODE (wfl) == EXPR_WITH_FILE_LOCATION)
      {
--- 8118,8123 ----
*************** parser_check_super_interface (tree super
*** 7972,7978 ****
    if (!CLASS_INTERFACE (super_decl))
      {
        parse_error_context
! 	(this_wfl, "%s `%s' can't implement/extend %s `%s'",
  	 (CLASS_INTERFACE (TYPE_NAME (TREE_TYPE (this_decl))) ?
  	  "Interface" : "Class"),
  	 IDENTIFIER_POINTER (DECL_NAME (this_decl)),
--- 8167,8173 ----
    if (!CLASS_INTERFACE (super_decl))
      {
        parse_error_context
! 	(this_wfl, "%s %qs can't implement/extend %s %qs",
  	 (CLASS_INTERFACE (TYPE_NAME (TREE_TYPE (this_decl))) ?
  	  "Interface" : "Class"),
  	 IDENTIFIER_POINTER (DECL_NAME (this_decl)),
*************** parser_check_super_interface (tree super
*** 7985,7991 ****
       access rules (6.6.1). */
    if (! INNER_CLASS_P (super_type)
        && check_pkg_class_access (DECL_NAME (super_decl),
! 				 lookup_cl (this_decl), true))
      return 1;
  
    SOURCE_FRONTEND_DEBUG (("Completing interface %s with %s",
--- 8180,8186 ----
       access rules (6.6.1). */
    if (! INNER_CLASS_P (super_type)
        && check_pkg_class_access (DECL_NAME (super_decl),
! 				 NULL_TREE, true, this_decl))
      return 1;
  
    SOURCE_FRONTEND_DEBUG (("Completing interface %s with %s",
*************** parser_check_super (tree super_decl, tre
*** 8006,8012 ****
    if (TYPE_ARRAY_P (super_type) || CLASS_INTERFACE (TYPE_NAME (super_type)))
      {
        parse_error_context
! 	(wfl, "Class `%s' can't subclass %s `%s'",
  	 IDENTIFIER_POINTER (DECL_NAME (this_decl)),
  	 (CLASS_INTERFACE (TYPE_NAME (super_type)) ? "interface" : "array"),
  	 IDENTIFIER_POINTER (DECL_NAME (super_decl)));
--- 8201,8207 ----
    if (TYPE_ARRAY_P (super_type) || CLASS_INTERFACE (TYPE_NAME (super_type)))
      {
        parse_error_context
! 	(wfl, "Class %qs can't subclass %s %qs",
  	 IDENTIFIER_POINTER (DECL_NAME (this_decl)),
  	 (CLASS_INTERFACE (TYPE_NAME (super_type)) ? "interface" : "array"),
  	 IDENTIFIER_POINTER (DECL_NAME (super_decl)));
*************** parser_check_super (tree super_decl, tre
*** 8023,8029 ****
    /* Check top-level class scope. Inner classes are subject to member access
       rules (6.6.1). */
    if (! INNER_CLASS_P (super_type)
!       && (check_pkg_class_access (DECL_NAME (super_decl), wfl, true)))
      return 1;
  
    SOURCE_FRONTEND_DEBUG (("Completing class %s with %s",
--- 8218,8224 ----
    /* Check top-level class scope. Inner classes are subject to member access
       rules (6.6.1). */
    if (! INNER_CLASS_P (super_type)
!       && (check_pkg_class_access (DECL_NAME (super_decl), wfl, true, NULL_TREE)))
      return 1;
  
    SOURCE_FRONTEND_DEBUG (("Completing class %s with %s",
*************** register_incomplete_type (int kind, tree
*** 8102,8113 ****
    JDEP_MISC (new) = NULL_TREE;
    /* For some dependencies, set the enclosing class of the current
       class to be the enclosing context */
!   if ((kind == JDEP_INTERFACE  || kind == JDEP_ANONYMOUS)
        && GET_ENCLOSING_CPC ())
      JDEP_ENCLOSING (new) = TREE_VALUE (GET_ENCLOSING_CPC ());
-   else if (kind == JDEP_SUPER)
-     JDEP_ENCLOSING (new) = (GET_ENCLOSING_CPC () ?
- 			    TREE_VALUE (GET_ENCLOSING_CPC ()) : NULL_TREE);
    else
      JDEP_ENCLOSING (new) = GET_CPC ();
    JDEP_GET_PATCH (new) = (tree *)NULL;
--- 8297,8305 ----
    JDEP_MISC (new) = NULL_TREE;
    /* For some dependencies, set the enclosing class of the current
       class to be the enclosing context */
!   if ((kind == JDEP_INTERFACE || kind == JDEP_ANONYMOUS || kind == JDEP_SUPER)
        && GET_ENCLOSING_CPC ())
      JDEP_ENCLOSING (new) = TREE_VALUE (GET_ENCLOSING_CPC ());
    else
      JDEP_ENCLOSING (new) = GET_CPC ();
    JDEP_GET_PATCH (new) = (tree *)NULL;
*************** register_incomplete_type (int kind, tree
*** 8128,8150 ****
  static tree
  check_inner_circular_reference (tree source, tree target)
  {
!   tree basetype_vec = TYPE_BINFO_BASETYPES (source);
    tree ctx, cl;
    int i;
  
!   if (!basetype_vec)
!     return NULL_TREE;
! 
!   for (i = 0; i < TREE_VEC_LENGTH (basetype_vec); i++)
      {
        tree su;
  
        /* We can end up with a NULL_TREE or an incomplete type here if
  	 we encountered previous type resolution errors. It's safe to
  	 simply ignore these cases.  */
!       if (TREE_VEC_ELT (basetype_vec, i) == NULL_TREE)
! 	continue;
!       su = BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i));
        if (INCOMPLETE_TYPE_P (su))
  	continue;
  
--- 8320,8337 ----
  static tree
  check_inner_circular_reference (tree source, tree target)
  {
!   tree base_binfo;
    tree ctx, cl;
    int i;
  
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (source), i, base_binfo); i++)
      {
        tree su;
  
        /* We can end up with a NULL_TREE or an incomplete type here if
  	 we encountered previous type resolution errors. It's safe to
  	 simply ignore these cases.  */
!       su = BINFO_TYPE (base_binfo);
        if (INCOMPLETE_TYPE_P (su))
  	continue;
  
*************** check_inner_circular_reference (tree sou
*** 8174,8183 ****
  static tree
  check_circular_reference (tree type)
  {
!   tree basetype_vec = TYPE_BINFO_BASETYPES (type);
    int i;
  
!   if (!basetype_vec)
      return NULL_TREE;
  
    if (! CLASS_INTERFACE (TYPE_NAME (type)))
--- 8361,8370 ----
  static tree
  check_circular_reference (tree type)
  {
!   tree base_binfo;
    int i;
  
!   if (!BINFO_N_BASE_BINFOS (TYPE_BINFO (type)))
      return NULL_TREE;
  
    if (! CLASS_INTERFACE (TYPE_NAME (type)))
*************** check_circular_reference (tree type)
*** 8187,8198 ****
        return NULL_TREE;
      }
  
!   for (i = 0; i < TREE_VEC_LENGTH (basetype_vec); i++)
      {
!       tree vec_elt = TREE_VEC_ELT (basetype_vec, i);
!       if (vec_elt && BINFO_TYPE (vec_elt) != object_type_node
! 	  && interface_of_p (type, BINFO_TYPE (vec_elt)))
! 	return lookup_cl (TYPE_NAME (BINFO_TYPE (vec_elt)));
      }
    return NULL_TREE;
  }
--- 8374,8384 ----
        return NULL_TREE;
      }
  
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (type), i, base_binfo); i++)
      {
!       if (BINFO_TYPE (base_binfo) != object_type_node
! 	  && interface_of_p (type, BINFO_TYPE (base_binfo)))
! 	return lookup_cl (TYPE_NAME (BINFO_TYPE (base_binfo)));
      }
    return NULL_TREE;
  }
*************** craft_constructor (tree class_decl, tree
*** 8307,8325 ****
  {
    tree class_type = TREE_TYPE (class_decl);
    tree parm = NULL_TREE;
!   int flags = (get_access_flags_from_decl (class_decl) & ACC_PUBLIC ?
! 	       ACC_PUBLIC : 0);
    int i = 0, artificial = 0;
    tree decl, ctor_name;
    char buffer [80];
  
!   /* The constructor name is <init> unless we're dealing with an
!      anonymous class, in which case the name will be fixed after having
!      be expanded. */
!   if (ANONYMOUS_CLASS_P (class_type))
!     ctor_name = DECL_NAME (class_decl);
!   else
!     ctor_name = init_identifier_node;
  
    /* If we're dealing with an inner class constructor, we hide the
       this$<n> decl in the name field of its parameter declaration. */
--- 8493,8506 ----
  {
    tree class_type = TREE_TYPE (class_decl);
    tree parm = NULL_TREE;
!   /* Inherit access flags for the constructor from its enclosing class. */
!   int valid_ctor_flags = ACC_PUBLIC | ACC_PROTECTED | ACC_PRIVATE;
!   int flags = (get_access_flags_from_decl (class_decl) & valid_ctor_flags);
    int i = 0, artificial = 0;
    tree decl, ctor_name;
    char buffer [80];
  
!   ctor_name = init_identifier_node;
  
    /* If we're dealing with an inner class constructor, we hide the
       this$<n> decl in the name field of its parameter declaration. */
*************** craft_constructor (tree class_decl, tree
*** 8339,8344 ****
--- 8520,8529 ----
    /* Then if there are any args to be enforced, enforce them now */
    for (; args && args != end_params_node; args = TREE_CHAIN (args))
      {
+       /* If we see a `void *', we need to change it to Object.  */
+       if (TREE_VALUE (args) == TREE_TYPE (null_pointer_node))
+ 	TREE_VALUE (args) = object_ptr_type_node;
+ 
        sprintf (buffer, "parm%d", i++);
        parm = tree_cons (get_identifier (buffer), TREE_VALUE (args), parm);
      }
*************** java_fix_constructors (void)
*** 8392,8398 ****
  }
  
  /* safe_layout_class just makes sure that we can load a class without
!    disrupting the current_class, input_file, lineno, etc, information
     about the class processed currently.  */
  
  void
--- 8577,8583 ----
  }
  
  /* safe_layout_class just makes sure that we can load a class without
!    disrupting the current_class, input_file, input_line, etc, information
     about the class processed currently.  */
  
  void
*************** jdep_resolve_class (jdep *dep)
*** 8427,8433 ****
  
    if (!decl)
      complete_class_report_errors (dep);
!   else if (PURE_INNER_CLASS_DECL_P (decl))
      {
        tree inner = TREE_TYPE (decl);
        if (! CLASS_LOADED_P (inner))
--- 8612,8618 ----
  
    if (!decl)
      complete_class_report_errors (dep);
!   else if (INNER_CLASS_DECL_P (decl))
      {
        tree inner = TREE_TYPE (decl);
        if (! CLASS_LOADED_P (inner))
*************** java_complete_class (void)
*** 8483,8490 ****
  	      /* Simply patch super */
  	      if (parser_check_super (decl, JDEP_DECL (dep), JDEP_WFL (dep)))
  		continue;
! 	      BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO
! 	        (TREE_TYPE (JDEP_DECL (dep)))), 0)) = TREE_TYPE (decl);
  	      break;
  
  	    case JDEP_FIELD:
--- 8668,8676 ----
  	      /* Simply patch super */
  	      if (parser_check_super (decl, JDEP_DECL (dep), JDEP_WFL (dep)))
  		continue;
! 	      BINFO_TYPE (BINFO_BASE_BINFO
! 			  (TYPE_BINFO (TREE_TYPE (JDEP_DECL (dep))), 0))
! 		= TREE_TYPE (decl);
  	      break;
  
  	    case JDEP_FIELD:
*************** java_complete_class (void)
*** 8499,8505 ****
  		DECL_USER_ALIGN (field_decl) = 0;
  		layout_decl (field_decl, 0);
  		SOURCE_FRONTEND_DEBUG
! 		  (("Completed field/var decl `%s' with `%s'",
  		    IDENTIFIER_POINTER (DECL_NAME (field_decl)),
  		    IDENTIFIER_POINTER (DECL_NAME (decl))));
  		break;
--- 8685,8691 ----
  		DECL_USER_ALIGN (field_decl) = 0;
  		layout_decl (field_decl, 0);
  		SOURCE_FRONTEND_DEBUG
! 		  (("Completed field/var decl '%s' with '%s'",
  		    IDENTIFIER_POINTER (DECL_NAME (field_decl)),
  		    IDENTIFIER_POINTER (DECL_NAME (decl))));
  		break;
*************** java_complete_class (void)
*** 8517,8524 ****
  		      JDEP_APPLY_PATCH (dep, type);
  		      SOURCE_FRONTEND_DEBUG
  			(((JDEP_KIND (dep) == JDEP_METHOD_RETURN ?
! 			   "Completing fct `%s' with ret type `%s'":
! 			   "Completing arg `%s' with type `%s'"),
  			  IDENTIFIER_POINTER (EXPR_WFL_NODE
  					      (JDEP_DECL_WFL (dep))),
  			  IDENTIFIER_POINTER (DECL_NAME (decl))));
--- 8703,8710 ----
  		      JDEP_APPLY_PATCH (dep, type);
  		      SOURCE_FRONTEND_DEBUG
  			(((JDEP_KIND (dep) == JDEP_METHOD_RETURN ?
! 			   "Completing fct '%s' with ret type '%s'":
! 			   "Completing arg '%s' with type '%s'"),
  			  IDENTIFIER_POINTER (EXPR_WFL_NODE
  					      (JDEP_DECL_WFL (dep))),
  			  IDENTIFIER_POINTER (DECL_NAME (decl))));
*************** java_complete_class (void)
*** 8572,8578 ****
  	    case JDEP_EXCEPTION:
  	      JDEP_APPLY_PATCH (dep, TREE_TYPE (decl));
  	      SOURCE_FRONTEND_DEBUG
! 		(("Completing `%s' `throws' argument node",
  		  IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep)))));
  	      break;
  
--- 8758,8764 ----
  	    case JDEP_EXCEPTION:
  	      JDEP_APPLY_PATCH (dep, TREE_TYPE (decl));
  	      SOURCE_FRONTEND_DEBUG
! 		(("Completing '%s' 'throws' argument node",
  		  IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep)))));
  	      break;
  
*************** do_resolve_class (tree enclosing, tree c
*** 8656,8662 ****
  	 class and then treat Id as a member type.  If we can't find Q
  	 as a class then we fall through.  */
        tree q, left, left_type, right;
!       if (breakdown_qualified (&left, &right, TYPE_NAME (class_type)) == 0)
  	{
  	  BUILD_PTR_FROM_NAME (left_type, left);
  	  q = do_resolve_class (enclosing, left_type, decl, cl);
--- 8842,8848 ----
  	 class and then treat Id as a member type.  If we can't find Q
  	 as a class then we fall through.  */
        tree q, left, left_type, right;
!       if (split_qualified_name (&left, &right, TYPE_NAME (class_type)) == 0)
  	{
  	  BUILD_PTR_FROM_NAME (left_type, left);
  	  q = do_resolve_class (enclosing, left_type, decl, cl);
*************** do_resolve_class (tree enclosing, tree c
*** 8711,8718 ****
    /* 2- And check for the type in the current compilation unit */
    if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
      {
!       if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
! 	  !CLASS_FROM_SOURCE_P (TREE_TYPE (new_class_decl)))
  	load_class (TYPE_NAME (class_type), 0);
        return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
      }
--- 8897,8903 ----
    /* 2- And check for the type in the current compilation unit */
    if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
      {
!       if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)))
  	load_class (TYPE_NAME (class_type), 0);
        return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
      }
*************** do_resolve_class (tree enclosing, tree c
*** 8763,8769 ****
       by the caller. */
    if (cl)
      {
!       if (check_pkg_class_access (TYPE_NAME (class_type), cl, true))
          return NULL_TREE;
      }
  
--- 8948,8954 ----
       by the caller. */
    if (cl)
      {
!       if (check_pkg_class_access (TYPE_NAME (class_type), cl, true, NULL_TREE))
          return NULL_TREE;
      }
  
*************** qualify_and_find (tree class_type, tree 
*** 8806,8814 ****
      load_class (new_qualified, 0);
    if ((new_class_decl = IDENTIFIER_CLASS_VALUE (new_qualified)))
      {
!       if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
! 	  !CLASS_FROM_SOURCE_P (TREE_TYPE (new_class_decl)))
! 	load_class (new_qualified, 0);
        TYPE_NAME (class_type) = new_qualified;
        return IDENTIFIER_CLASS_VALUE (new_qualified);
      }
--- 8991,8998 ----
      load_class (new_qualified, 0);
    if ((new_class_decl = IDENTIFIER_CLASS_VALUE (new_qualified)))
      {
!       if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)))
! 	load_class (TREE_TYPE (new_class_decl), 0);
        TYPE_NAME (class_type) = new_qualified;
        return IDENTIFIER_CLASS_VALUE (new_qualified);
      }
*************** complete_class_report_errors (jdep *dep)
*** 8927,8972 ****
      {
      case JDEP_SUPER:
        parse_error_context
! 	(JDEP_WFL (dep), "Superclass `%s' of class `%s' not found",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_FIELD:
        parse_error_context
! 	(JDEP_WFL (dep), "Type `%s' not found in declaration of field `%s'",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_METHOD:		/* Covers arguments */
        parse_error_context
! 	(JDEP_WFL (dep), "Type `%s' not found in the declaration of the argument `%s' of method `%s'",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_DECL_WFL (dep))),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_MISC (dep))));
        break;
      case JDEP_METHOD_RETURN:	/* Covers return type */
        parse_error_context
! 	(JDEP_WFL (dep), "Type `%s' not found in the declaration of the return type of method `%s'",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_DECL_WFL (dep))));
        break;
      case JDEP_INTERFACE:
        parse_error_context
! 	(JDEP_WFL (dep), "Superinterface `%s' of %s `%s' not found",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep))),
  	 (CLASS_OR_INTERFACE (JDEP_DECL (dep), "class", "interface")),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_VARIABLE:
        parse_error_context
! 	(JDEP_WFL (dep), "Type `%s' not found in the declaration of the local variable `%s'",
  	 purify_type_name (IDENTIFIER_POINTER
  			   (EXPR_WFL_NODE (JDEP_WFL (dep)))),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_EXCEPTION:	/* As specified by `throws' */
        parse_error_context
! 	  (JDEP_WFL (dep), "Class `%s' not found in `throws'",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep))));
        break;
      default:
--- 9111,9156 ----
      {
      case JDEP_SUPER:
        parse_error_context
! 	(JDEP_WFL (dep), "Superclass %qs of class %qs not found",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_FIELD:
        parse_error_context
! 	(JDEP_WFL (dep), "Type %qs not found in declaration of field %qs",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_METHOD:		/* Covers arguments */
        parse_error_context
! 	(JDEP_WFL (dep), "Type %qs not found in the declaration of the argument %qs of method %qs",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_DECL_WFL (dep))),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_MISC (dep))));
        break;
      case JDEP_METHOD_RETURN:	/* Covers return type */
        parse_error_context
! 	(JDEP_WFL (dep), "Type %qs not found in the declaration of the return type of method %qs",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_DECL_WFL (dep))));
        break;
      case JDEP_INTERFACE:
        parse_error_context
! 	(JDEP_WFL (dep), "Superinterface %qs of %s %qs not found",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep))),
  	 (CLASS_OR_INTERFACE (JDEP_DECL (dep), "class", "interface")),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_VARIABLE:
        parse_error_context
! 	(JDEP_WFL (dep), "Type %qs not found in the declaration of the local variable %qs",
  	 purify_type_name (IDENTIFIER_POINTER
  			   (EXPR_WFL_NODE (JDEP_WFL (dep)))),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_EXCEPTION:	/* As specified by `throws' */
        parse_error_context
! 	  (JDEP_WFL (dep), "Class %qs not found in %<throws%>",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep))));
        break;
      default:
*************** get_printable_method_name (tree decl)
*** 8992,8998 ****
        DECL_NAME (decl) = DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)));
      }
  
!   to_return = lang_printable_name (decl, 0);
    if (DECL_CONSTRUCTOR_P (decl))
      DECL_NAME (decl) = name;
  
--- 9176,9182 ----
        DECL_NAME (decl) = DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)));
      }
  
!   to_return = lang_printable_name (decl, 2);
    if (DECL_CONSTRUCTOR_P (decl))
      DECL_NAME (decl) = name;
  
*************** check_method_redefinition (tree class, t
*** 9023,9029 ****
  	  && !DECL_ARTIFICIAL (method))
  	{
  	  parse_error_context
! 	    (DECL_FUNCTION_WFL (method), "Duplicate %s declaration `%s'",
  	     (DECL_CONSTRUCTOR_P (redef) ? "constructor" : "method"),
  	     get_printable_method_name (redef));
  	  return 1;
--- 9207,9213 ----
  	  && !DECL_ARTIFICIAL (method))
  	{
  	  parse_error_context
! 	    (DECL_FUNCTION_WFL (method), "Duplicate %s declaration %qs",
  	     (DECL_CONSTRUCTOR_P (redef) ? "constructor" : "method"),
  	     get_printable_method_name (redef));
  	  return 1;
*************** check_abstract_method_definitions (int d
*** 9097,9105 ****
  
  	  parse_error_context
  	    (lookup_cl (class_decl),
! 	     "Class `%s' doesn't define the abstract method `%s %s' from %s `%s'. This method must be defined or %s `%s' must be declared abstract",
  	     IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 	     t, lang_printable_name (method, 0),
  	     (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))) ?
  	      "interface" : "class"),
  	     IDENTIFIER_POINTER (ccn),
--- 9281,9289 ----
  
  	  parse_error_context
  	    (lookup_cl (class_decl),
! 	     "Class %qs doesn't define the abstract method %<%s %s%> from %s %<%s%>. This method must be defined or %s %qs must be declared abstract",
  	     IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 	     t, lang_printable_name (method, 2),
  	     (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))) ?
  	      "interface" : "class"),
  	     IDENTIFIER_POINTER (ccn),
*************** check_abstract_method_definitions (int d
*** 9114,9125 ****
      {
        /* Check for implemented interfaces. */
        int i;
!       tree vector = TYPE_BINFO_BASETYPES (type);
!       for (i = 1; ok && vector && i < TREE_VEC_LENGTH (vector); i++)
! 	{
! 	  tree super = BINFO_TYPE (TREE_VEC_ELT (vector, i));
! 	  ok = check_abstract_method_definitions (1, class_decl, super);
! 	}
      }
  
    return ok;
--- 9298,9310 ----
      {
        /* Check for implemented interfaces. */
        int i;
!       tree base_binfo;
!       
!       for (i = 1;
! 	   ok && BINFO_BASE_ITERATE (TYPE_BINFO (type), i, base_binfo);
! 	   i++)
! 	ok = check_abstract_method_definitions (1, class_decl,
! 						BINFO_TYPE (base_binfo));
      }
  
    return ok;
*************** static void
*** 9132,9138 ****
  java_check_abstract_method_definitions (tree class_decl)
  {
    tree class = TREE_TYPE (class_decl);
!   tree super, vector;
    int i;
  
    if (CLASS_ABSTRACT (class_decl))
--- 9317,9323 ----
  java_check_abstract_method_definitions (tree class_decl)
  {
    tree class = TREE_TYPE (class_decl);
!   tree super, base_binfo;
    int i;
  
    if (CLASS_ABSTRACT (class_decl))
*************** java_check_abstract_method_definitions (
*** 9146,9157 ****
    } while (super != object_type_node);
  
    /* Check for implemented interfaces. */
!   vector = TYPE_BINFO_BASETYPES (class);
!   for (i = 1; i < TREE_VEC_LENGTH (vector); i++)
!     {
!       super = BINFO_TYPE (TREE_VEC_ELT (vector, i));
!       check_abstract_method_definitions (1, class_decl, super);
!     }
  }
  
  /* Check all the types method DECL uses and return 1 if all of them
--- 9331,9338 ----
    } while (super != object_type_node);
  
    /* Check for implemented interfaces. */
!   for (i = 1; BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
!     check_abstract_method_definitions (1, class_decl, BINFO_TYPE (base_binfo));
  }
  
  /* Check all the types method DECL uses and return 1 if all of them
*************** java_check_regular_methods (tree class_d
*** 9256,9262 ****
  	{
  	  if (!inherits_from_p (TREE_VALUE (mthrows), throwable_type_node))
  	    parse_error_context
! 	      (TREE_PURPOSE (mthrows), "Class `%s' in `throws' clause must be a subclass of class `java.lang.Throwable'",
  	       IDENTIFIER_POINTER
  	         (DECL_NAME (TYPE_NAME (TREE_VALUE (mthrows)))));
  	}
--- 9437,9443 ----
  	{
  	  if (!inherits_from_p (TREE_VALUE (mthrows), throwable_type_node))
  	    parse_error_context
! 	      (TREE_PURPOSE (mthrows), "Class %qs in %<throws%> clause must be a subclass of class %<java.lang.Throwable%>",
  	       IDENTIFIER_POINTER
  	         (DECL_NAME (TYPE_NAME (TREE_VALUE (mthrows)))));
  	}
*************** java_check_regular_methods (tree class_d
*** 9279,9286 ****
  	{
  	  char *t = xstrdup (lang_printable_name (class, 0));
  	  parse_error_context
! 	    (method_wfl, "Method `%s' can't be static in inner class `%s'. Only members of interfaces and top-level classes can be static",
! 	     lang_printable_name (method, 0), t);
  	  free (t);
  	}
  
--- 9460,9467 ----
  	{
  	  char *t = xstrdup (lang_printable_name (class, 0));
  	  parse_error_context
! 	    (method_wfl, "Method %qs can't be static in inner class %qs. Only members of interfaces and top-level classes can be static",
! 	     lang_printable_name (method, 2), t);
  	  free (t);
  	}
  
*************** java_check_regular_methods (tree class_d
*** 9300,9308 ****
  	  && !METHOD_PUBLIC (method))
  	{
  	  tree found_decl = TYPE_NAME (DECL_CONTEXT (found));
! 	  parse_error_context (method_wfl, "Class `%s' must override `%s' with a public method in order to implement interface `%s'",
  			       IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 			       lang_printable_name (method, 0),
  			       IDENTIFIER_POINTER (DECL_NAME (found_decl)));
  	}
  
--- 9481,9489 ----
  	  && !METHOD_PUBLIC (method))
  	{
  	  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)));
  	}
  
*************** java_check_regular_methods (tree class_d
*** 9311,9321 ****
        if (TREE_TYPE (TREE_TYPE (found)) != TREE_TYPE (TREE_TYPE (method)))
  	{
  	  char *t = xstrdup
! 	    (lang_printable_name (TREE_TYPE (TREE_TYPE (found)), 0));
  	  parse_error_context
  	    (method_wfl,
! 	     "Method `%s' was defined with return type `%s' in class `%s'",
! 	     lang_printable_name (found, 0), t,
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  free (t);
--- 9492,9502 ----
        if (TREE_TYPE (TREE_TYPE (found)) != TREE_TYPE (TREE_TYPE (method)))
  	{
  	  char *t = xstrdup
! 	    (lang_printable_name (TREE_TYPE (TREE_TYPE (found)), 2));
  	  parse_error_context
  	    (method_wfl,
! 	     "Method %qs was defined with return type %qs in class %qs",
! 	     lang_printable_name (found, 2), t,
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  free (t);
*************** java_check_regular_methods (tree class_d
*** 9331,9339 ****
  	    continue;
  	  parse_error_context
  	    (method_wfl,
! 	     "%s methods can't be overridden. Method `%s' is %s in class `%s'",
  	     (METHOD_FINAL (found) ? "Final" : "Static"),
! 	     lang_printable_name (found, 0),
  	     (METHOD_FINAL (found) ? "final" : "static"),
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
--- 9512,9520 ----
  	    continue;
  	  parse_error_context
  	    (method_wfl,
! 	     "%s methods can't be overridden. Method %qs is %s in class %qs",
  	     (METHOD_FINAL (found) ? "Final" : "Static"),
! 	     lang_printable_name (found, 2),
  	     (METHOD_FINAL (found) ? "final" : "static"),
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
*************** java_check_regular_methods (tree class_d
*** 9345,9352 ****
  	{
  	  parse_error_context
  	    (method_wfl,
! 	     "Instance methods can't be overridden by a static method. Method `%s' is an instance method in class `%s'",
! 	     lang_printable_name (found, 0),
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  continue;
--- 9526,9533 ----
  	{
  	  parse_error_context
  	    (method_wfl,
! 	     "Instance methods can't be overridden by a static method. Method %qs is an instance method in class %qs",
! 	     lang_printable_name (found, 2),
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  continue;
*************** java_check_regular_methods (tree class_d
*** 9368,9374 ****
  	{
  	  parse_error_context
  	    (method_wfl,
! 	     "Methods can't be overridden to be more private. Method `%s' is not %s in class `%s'", lang_printable_name (method, 0),
  	     (METHOD_PUBLIC (method) ? "public" :
  	      (METHOD_PRIVATE (method) ? "private" : "protected")),
  	     IDENTIFIER_POINTER (DECL_NAME
--- 9549,9555 ----
  	{
  	  parse_error_context
  	    (method_wfl,
! 	     "Methods can't be overridden to be more private. Method %qs is not %s in class %qs", lang_printable_name (method, 2),
  	     (METHOD_PUBLIC (method) ? "public" :
  	      (METHOD_PRIVATE (method) ? "private" : "protected")),
  	     IDENTIFIER_POINTER (DECL_NAME
*************** check_interface_throws_clauses (tree che
*** 9409,9416 ****
  {
    for (; class_decl != NULL_TREE; class_decl = CLASSTYPE_SUPER (class_decl))
      {
-       tree bases;
-       int iface_len;
        int i;
  
        if (! CLASS_LOADED_P (class_decl))
--- 9590,9595 ----
*************** check_interface_throws_clauses (tree che
*** 9421,9431 ****
  	    load_class (class_decl, 1);
  	}
  
!       bases = TYPE_BINFO_BASETYPES (class_decl);
!       iface_len = TREE_VEC_LENGTH (bases) - 1;
!       for (i = iface_len; i > 0; --i)
  	{
! 	  tree interface = BINFO_TYPE (TREE_VEC_ELT (bases, i));
  	  tree iface_method;
  
  	  for (iface_method = TYPE_METHODS (interface);
--- 9600,9609 ----
  	    load_class (class_decl, 1);
  	}
  
!       for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (class_decl)) - 1; i > 0; --i)
  	{
! 	  tree interface
! 	    = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (class_decl), i));
  	  tree iface_method;
  
  	  for (iface_method = TYPE_METHODS (interface);
*************** check_throws_clauses (tree method, tree 
*** 9512,9520 ****
        if (!fthrows)
  	{
  	  parse_error_context
! 	    (method_wfl, "Invalid checked exception class `%s' in `throws' clause.  The exception must be a subclass of an exception thrown by `%s' from class `%s'",
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (TREE_VALUE (mthrows)))),
! 	     lang_printable_name (found, 0),
  	     IDENTIFIER_POINTER
  	     (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	}
--- 9690,9698 ----
        if (!fthrows)
  	{
  	  parse_error_context
! 	    (method_wfl, "Invalid checked exception class %qs in %<throws%> clause.  The exception must be a subclass of an exception thrown by %qs from class %qs",
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (TREE_VALUE (mthrows)))),
! 	     lang_printable_name (found, 2),
  	     IDENTIFIER_POINTER
  	     (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	}
*************** check_throws_clauses (tree method, tree 
*** 9525,9533 ****
  static void
  java_check_abstract_methods (tree interface_decl)
  {
!   int i, n;
!   tree method, basetype_vec, found;
    tree interface = TREE_TYPE (interface_decl);
  
    for (method = TYPE_METHODS (interface); method; method = TREE_CHAIN (method))
      {
--- 9703,9712 ----
  static void
  java_check_abstract_methods (tree interface_decl)
  {
!   int i;
!   tree method, found;
    tree interface = TREE_TYPE (interface_decl);
+   tree base_binfo;
  
    for (method = TYPE_METHODS (interface); method; method = TREE_CHAIN (method))
      {
*************** java_check_abstract_methods (tree interf
*** 9540,9550 ****
        if (found)
  	{
  	  char *t;
! 	  t = xstrdup (lang_printable_name (TREE_TYPE (TREE_TYPE (found)), 0));
  	  parse_error_context
  	    (DECL_FUNCTION_WFL (found),
! 	     "Method `%s' was defined with return type `%s' in class `%s'",
! 	     lang_printable_name (found, 0), t,
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  free (t);
--- 9719,9729 ----
        if (found)
  	{
  	  char *t;
! 	  t = xstrdup (lang_printable_name (TREE_TYPE (TREE_TYPE (found)), 2));
  	  parse_error_context
  	    (DECL_FUNCTION_WFL (found),
! 	     "Method %qs was defined with return type %qs in class %qs",
! 	     lang_printable_name (found, 2), t,
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  free (t);
*************** java_check_abstract_methods (tree interf
*** 9553,9568 ****
      }
  
    /* 4- Inherited methods can't differ by their returned types */
!   if (!(basetype_vec = TYPE_BINFO_BASETYPES (interface)))
!     return;
!   n = TREE_VEC_LENGTH (basetype_vec);
!   for (i = 0; i < n; i++)
      {
        tree sub_interface_method, sub_interface;
!       tree vec_elt = TREE_VEC_ELT (basetype_vec, i);
!       if (!vec_elt)
! 	continue;
!       sub_interface = BINFO_TYPE (vec_elt);
        for (sub_interface_method = TYPE_METHODS (sub_interface);
  	   sub_interface_method;
  	   sub_interface_method = TREE_CHAIN (sub_interface_method))
--- 9732,9742 ----
      }
  
    /* 4- Inherited methods can't differ by their returned types */
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (interface), i, base_binfo); i++)
      {
        tree sub_interface_method, sub_interface;
! 
!       sub_interface = BINFO_TYPE (base_binfo);
        for (sub_interface_method = TYPE_METHODS (sub_interface);
  	   sub_interface_method;
  	   sub_interface_method = TREE_CHAIN (sub_interface_method))
*************** java_check_abstract_methods (tree interf
*** 9573,9581 ****
  	    {
  	      parse_error_context
  		(lookup_cl (sub_interface_method),
! 		 "Interface `%s' inherits method `%s' from interface `%s'. This method is redefined with a different return type in interface `%s'",
  		 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (interface))),
! 		 lang_printable_name (found, 0),
  		 IDENTIFIER_POINTER
  		   (DECL_NAME (TYPE_NAME
  			       (DECL_CONTEXT (sub_interface_method)))),
--- 9747,9755 ----
  	    {
  	      parse_error_context
  		(lookup_cl (sub_interface_method),
! 		 "Interface %qs inherits method %qs from interface %qs. This method is redefined with a different return type in interface %qs",
  		 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (interface))),
! 		 lang_printable_name (found, 2),
  		 IDENTIFIER_POINTER
  		   (DECL_NAME (TYPE_NAME
  			       (DECL_CONTEXT (sub_interface_method)))),
*************** java_check_abstract_methods (tree interf
*** 9592,9616 ****
  static tree
  lookup_java_interface_method2 (tree class, tree method_decl)
  {
!   int i, n;
!   tree basetype_vec = TYPE_BINFO_BASETYPES (class), to_return;
! 
!   if (!basetype_vec)
!     return NULL_TREE;
  
!   n = TREE_VEC_LENGTH (basetype_vec);
!   for (i = 0; i < n; i++)
      {
!       tree vec_elt = TREE_VEC_ELT (basetype_vec, i), to_return;
!       if ((BINFO_TYPE (vec_elt) != object_type_node)
  	  && (to_return =
! 	      lookup_java_method2 (BINFO_TYPE (vec_elt), method_decl, 1)))
  	return to_return;
      }
!   for (i = 0; i < n; i++)
      {
        to_return = lookup_java_interface_method2
! 	(BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i)), method_decl);
        if (to_return)
  	return to_return;
      }
--- 9766,9786 ----
  static tree
  lookup_java_interface_method2 (tree class, tree method_decl)
  {
!   int i;
!   tree base_binfo;
!   tree to_return;
  
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
      {
!       if ((BINFO_TYPE (base_binfo) != object_type_node)
  	  && (to_return =
! 	      lookup_java_method2 (BINFO_TYPE (base_binfo), method_decl, 1)))
  	return to_return;
      }
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
      {
        to_return = lookup_java_interface_method2
! 	(BINFO_TYPE (base_binfo), method_decl);
        if (to_return)
  	return to_return;
      }
*************** lookup_java_method2 (tree clas, tree met
*** 9651,9672 ****
  }
  
  /* Return the line that matches DECL line number, and try its best to
!    position the column number. Used during error reports.  */
  
  static GTY(()) tree cl_v;
  static tree
  lookup_cl (tree decl)
  {
    char *line, *found;
  
    if (!decl)
      return NULL_TREE;
  
    if (cl_v == NULL_TREE)
      {
!       cl_v = build_expr_wfl (NULL_TREE, NULL, 0, 0);
      }
  
    EXPR_WFL_FILENAME_NODE (cl_v) = get_identifier (DECL_SOURCE_FILE (decl));
    EXPR_WFL_SET_LINECOL (cl_v, DECL_SOURCE_LINE (decl), -1);
  
--- 9821,9848 ----
  }
  
  /* Return the line that matches DECL line number, and try its best to
!    position the column number. Used during error reports.
!    FUTURE/FIXME: return source_location instead of node. */
  
  static GTY(()) tree cl_v;
  static tree
  lookup_cl (tree decl)
  {
+ #ifndef USE_MAPPED_LOCATION
    char *line, *found;
+ #endif
  
    if (!decl)
      return NULL_TREE;
  
    if (cl_v == NULL_TREE)
      {
!       cl_v = build_unknown_wfl (NULL_TREE);
      }
  
+ #ifdef USE_MAPPED_LOCATION
+   SET_EXPR_LOCATION (cl_v, DECL_SOURCE_LOCATION (decl));
+ #else
    EXPR_WFL_FILENAME_NODE (cl_v) = get_identifier (DECL_SOURCE_FILE (decl));
    EXPR_WFL_SET_LINECOL (cl_v, DECL_SOURCE_LINE (decl), -1);
  
*************** lookup_cl (tree decl)
*** 9677,9682 ****
--- 9853,9859 ----
  		  (const char *)IDENTIFIER_POINTER (DECL_NAME (decl)));
    if (found)
      EXPR_WFL_SET_LINECOL (cl_v, EXPR_WFL_LINENO (cl_v), found - line);
+ #endif
  
    return cl_v;
  }
*************** process_imports (void)
*** 9708,9721 ****
        tree to_be_found = EXPR_WFL_NODE (TREE_PURPOSE (import));
        char *original_name;
  
-       original_name = xmemdup (IDENTIFIER_POINTER (to_be_found),
- 			       IDENTIFIER_LENGTH (to_be_found),
- 			       IDENTIFIER_LENGTH (to_be_found) + 1);
- 
        /* Don't load twice something already defined. */
        if (IDENTIFIER_CLASS_VALUE (to_be_found))
  	continue;
  
        while (1)
  	{
  	  tree left;
--- 9885,9898 ----
        tree to_be_found = EXPR_WFL_NODE (TREE_PURPOSE (import));
        char *original_name;
  
        /* Don't load twice something already defined. */
        if (IDENTIFIER_CLASS_VALUE (to_be_found))
  	continue;
  
+       original_name = xmemdup (IDENTIFIER_POINTER (to_be_found),
+ 			       IDENTIFIER_LENGTH (to_be_found),
+ 			       IDENTIFIER_LENGTH (to_be_found) + 1);
+ 
        while (1)
  	{
  	  tree left;
*************** process_imports (void)
*** 9723,9729 ****
  	  QUALIFIED_P (to_be_found) = 1;
  	  load_class (to_be_found, 0);
  	  error_found =
! 	    check_pkg_class_access (to_be_found, TREE_PURPOSE (import), true);
  
  	  /* We found it, we can bail out */
  	  if (IDENTIFIER_CLASS_VALUE (to_be_found))
--- 9900,9906 ----
  	  QUALIFIED_P (to_be_found) = 1;
  	  load_class (to_be_found, 0);
  	  error_found =
! 	    check_pkg_class_access (to_be_found, TREE_PURPOSE (import), true, NULL_TREE);
  
  	  /* We found it, we can bail out */
  	  if (IDENTIFIER_CLASS_VALUE (to_be_found))
*************** process_imports (void)
*** 9737,9743 ****
  	     inner class.  The only way for us to know is to try again
  	     after having dropped a qualifier. If we can't break it further,
  	     we have an error. */
! 	  if (breakdown_qualified (&left, NULL, to_be_found))
  	    break;
  
  	  to_be_found = left;
--- 9914,9920 ----
  	     inner class.  The only way for us to know is to try again
  	     after having dropped a qualifier. If we can't break it further,
  	     we have an error. */
! 	  if (split_qualified_name (&left, NULL, to_be_found))
  	    break;
  
  	  to_be_found = left;
*************** process_imports (void)
*** 9745,9751 ****
        if (!IDENTIFIER_CLASS_VALUE (to_be_found))
  	{
  	  parse_error_context (TREE_PURPOSE (import),
! 			       "Class or interface `%s' not found in import",
  			       original_name);
  	  error_found = 1;
  	}
--- 9922,9928 ----
        if (!IDENTIFIER_CLASS_VALUE (to_be_found))
  	{
  	  parse_error_context (TREE_PURPOSE (import),
! 			       "Class or interface %qs not found in import",
  			       original_name);
  	  error_found = 1;
  	}
*************** read_import_dir (tree wfl)
*** 9828,9834 ****
  	  buffer_grow (filename, entry_length);
  	  memcpy (filename->data, entry_name, entry_length - 1);
  	  filename->data[entry_length-1] = '\0';
! 	  zipf = opendir_in_zip (filename->data, jcf_path_is_system (entry));
  	  if (zipf == NULL)
  	    error ("malformed .zip archive in CLASSPATH: %s", entry_name);
  	  else
--- 10005,10011 ----
  	  buffer_grow (filename, entry_length);
  	  memcpy (filename->data, entry_name, entry_length - 1);
  	  filename->data[entry_length-1] = '\0';
! 	  zipf = opendir_in_zip ((const char *) filename->data, jcf_path_is_system (entry));
  	  if (zipf == NULL)
  	    error ("malformed .zip archive in CLASSPATH: %s", entry_name);
  	  else
*************** read_import_dir (tree wfl)
*** 9848,9854 ****
  		  int current_entry_len = zipd->filename_length;
  
  		  if (current_entry_len >= BUFFER_LENGTH (filename)
! 		      && strncmp (filename->data, current_entry,
  				  BUFFER_LENGTH (filename)) != 0)
  		    continue;
  		  found |= note_possible_classname (current_entry,
--- 10025,10031 ----
  		  int current_entry_len = zipd->filename_length;
  
  		  if (current_entry_len >= BUFFER_LENGTH (filename)
! 		      && strncmp ((const char *) filename->data, current_entry,
  				  BUFFER_LENGTH (filename)) != 0)
  		    continue;
  		  found |= note_possible_classname (current_entry,
*************** read_import_dir (tree wfl)
*** 9860,9866 ****
  	{
  	  BUFFER_RESET (filename);
  	  buffer_grow (filename, entry_length + package_length + 4);
! 	  strcpy (filename->data, entry_name);
  	  filename->ptr = filename->data + entry_length;
  	  for (k = 0; k < package_length; k++)
  	    {
--- 10037,10043 ----
  	{
  	  BUFFER_RESET (filename);
  	  buffer_grow (filename, entry_length + package_length + 4);
! 	  strcpy ((char *) filename->data, entry_name);
  	  filename->ptr = filename->data + entry_length;
  	  for (k = 0; k < package_length; k++)
  	    {
*************** read_import_dir (tree wfl)
*** 9869,9875 ****
  	    }
  	  *filename->ptr = '\0';
  
! 	  dirp = opendir (filename->data);
  	  if (dirp == NULL)
  	    continue;
  	  *filename->ptr++ = '/';
--- 10046,10052 ----
  	    }
  	  *filename->ptr = '\0';
  
! 	  dirp = opendir ((const char *) filename->data);
  	  if (dirp == NULL)
  	    continue;
  	  *filename->ptr++ = '/';
*************** read_import_dir (tree wfl)
*** 9883,9890 ****
  	      d_name = direntp->d_name;
  	      len = strlen (direntp->d_name);
  	      buffer_grow (filename, len+1);
! 	      strcpy (filename->ptr, d_name);
! 	      found |= note_possible_classname (filename->data + entry_length,
  						package_length+len+1);
  	    }
  	  if (dirp)
--- 10060,10067 ----
  	      d_name = direntp->d_name;
  	      len = strlen (direntp->d_name);
  	      buffer_grow (filename, len+1);
! 	      strcpy ((char *) filename->ptr, d_name);
! 	      found |= note_possible_classname ((const char *) filename->data + entry_length,
  						package_length+len+1);
  	    }
  	  if (dirp)
*************** read_import_dir (tree wfl)
*** 9901,9912 ****
        static int first = 1;
        if (first)
  	{
! 	  error ("Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives", package_name);
  	  java_error_count++;
  	  first = 0;
  	}
        else
! 	parse_error_context (wfl, "Package `%s' not found in import",
  			     package_name);
        current_jcf = saved_jcf;
        return;
--- 10078,10089 ----
        static int first = 1;
        if (first)
  	{
! 	  error ("Can't find default package %qs. Check the CLASSPATH environment variable and the access to the archives", package_name);
  	  java_error_count++;
  	  first = 0;
  	}
        else
! 	parse_error_context (wfl, "Package %qs not found in import",
  			     package_name);
        current_jcf = saved_jcf;
        return;
*************** find_in_imports_on_demand (tree enclosin
*** 9931,9937 ****
  
    for (; import; import = TREE_CHAIN (import))
      {
!       int saved_lineno = input_line;
        int access_check;
        const char *id_name;
        tree decl, type_name_copy;
--- 10108,10114 ----
  
    for (; import; import = TREE_CHAIN (import))
      {
!       location_t saved_location = input_location;
        int access_check;
        const char *id_name;
        tree decl, type_name_copy;
*************** find_in_imports_on_demand (tree enclosin
*** 9948,9956 ****
        if (! (node = maybe_get_identifier (id_name)))
  	continue;
  
!       /* Setup lineno so that it refers to the line of the import (in
  	 case we parse a class file and encounter errors */
        input_line = EXPR_WFL_LINENO (TREE_PURPOSE (import));
  
        type_name_copy = TYPE_NAME (class_type);
        TYPE_NAME (class_type) = node;
--- 10125,10137 ----
        if (! (node = maybe_get_identifier (id_name)))
  	continue;
  
!       /* Setup input_line so that it refers to the line of the import (in
  	 case we parse a class file and encounter errors */
+ #ifdef USE_MAPPED_LOCATION
+       input_location = EXPR_LOCATION (TREE_PURPOSE (import));
+ #else
        input_line = EXPR_WFL_LINENO (TREE_PURPOSE (import));
+ #endif
  
        type_name_copy = TYPE_NAME (class_type);
        TYPE_NAME (class_type) = node;
*************** find_in_imports_on_demand (tree enclosin
*** 9959,9978 ****
        access_check = -1;
        /* If there is no DECL set for the class or if the class isn't
  	 loaded and not seen in source yet, then load */
!       if (!decl || (!CLASS_LOADED_P (TREE_TYPE (decl))
! 		    && !CLASS_FROM_SOURCE_P (TREE_TYPE (decl))))
  	{
  	  load_class (node, 0);
  	  decl = IDENTIFIER_CLASS_VALUE (node);
  	}
        if (decl && ! INNER_CLASS_P (TREE_TYPE (decl)))
  	access_check = check_pkg_class_access (node, TREE_PURPOSE (import),
! 					       false);
        else
  	/* 6.6.1: Inner classes are subject to member access rules. */
  	access_check = 0;
  
!       input_line = saved_lineno;
  
        /* If the loaded class is not accessible or couldn't be loaded,
  	 we restore the original TYPE_NAME and process the next
--- 10140,10158 ----
        access_check = -1;
        /* If there is no DECL set for the class or if the class isn't
  	 loaded and not seen in source yet, then load */
!       if (!decl || ! CLASS_LOADED_P (TREE_TYPE (decl)))
  	{
  	  load_class (node, 0);
  	  decl = IDENTIFIER_CLASS_VALUE (node);
  	}
        if (decl && ! INNER_CLASS_P (TREE_TYPE (decl)))
  	access_check = check_pkg_class_access (node, TREE_PURPOSE (import),
! 					       false, NULL_TREE);
        else
  	/* 6.6.1: Inner classes are subject to member access rules. */
  	access_check = 0;
  
!       input_location = saved_location;
  
        /* If the loaded class is not accessible or couldn't be loaded,
  	 we restore the original TYPE_NAME and process the next
*************** find_in_imports_on_demand (tree enclosin
*** 10000,10006 ****
  	      seen_once++;
  	      parse_error_context
  		(location,
! 		 "Type `%s' also potentially defined in package `%s'",
  		 IDENTIFIER_POINTER (TYPE_NAME (class_type)),
  		 IDENTIFIER_POINTER (package));
  	    }
--- 10180,10186 ----
  	      seen_once++;
  	      parse_error_context
  		(location,
! 		 "Type %qs also potentially defined in package %qs",
  		 IDENTIFIER_POINTER (TYPE_NAME (class_type)),
  		 IDENTIFIER_POINTER (package));
  	    }
*************** check_inner_class_access (tree decl, tre
*** 10147,10162 ****
  
    parse_error_context (cl, "Nested %s %s is %s; cannot be accessed from here",
  		       (CLASS_INTERFACE (decl) ? "interface" : "class"),
! 		       lang_printable_name (decl, 0), access);
  }
  
  /* Accessibility check for top-level classes. If CLASS_NAME is in a
     foreign package, it must be PUBLIC. Return 0 if no access
     violations were found, 1 otherwise. If VERBOSE is true and an error
!    was found, it is reported and accounted for.  */
  
  static int
! check_pkg_class_access (tree class_name, tree cl, bool verbose)
  {
    tree type;
  
--- 10327,10343 ----
  
    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);
  }
  
  /* Accessibility check for top-level classes. If CLASS_NAME is in a
     foreign package, it must be PUBLIC. Return 0 if no access
     violations were found, 1 otherwise. If VERBOSE is true and an error
!    was found, it is reported and accounted for.  If CL is NULL then 
!    look it up with THIS_DECL.  */
  
  static int
! check_pkg_class_access (tree class_name, tree cl, bool verbose, tree this_decl)
  {
    tree type;
  
*************** check_pkg_class_access (tree class_name,
*** 10171,10177 ****
        /* Access to a private class within the same package is
           allowed. */
        tree l, r;
!       breakdown_qualified (&l, &r, class_name);
        if (!QUALIFIED_P (class_name) && !ctxp->package)
  	/* Both in the empty package. */
          return 0;
--- 10352,10358 ----
        /* Access to a private class within the same package is
           allowed. */
        tree l, r;
!       split_qualified_name (&l, &r, class_name);
        if (!QUALIFIED_P (class_name) && !ctxp->package)
  	/* Both in the empty package. */
          return 0;
*************** check_pkg_class_access (tree class_name,
*** 10181,10187 ****
  
        if (verbose)
  	parse_error_context
! 	  (cl, "Can't access %s `%s'. Only public classes and interfaces in other packages can be accessed",
  	   (CLASS_INTERFACE (TYPE_NAME (type)) ? "interface" : "class"),
  	   IDENTIFIER_POINTER (class_name));
        return 1;
--- 10362,10369 ----
  
        if (verbose)
  	parse_error_context
! 	  (cl == NULL ? lookup_cl (this_decl): cl,
!            "Can't access %s %qs. Only public classes and interfaces in other packages can be accessed",
  	   (CLASS_INTERFACE (TYPE_NAME (type)) ? "interface" : "class"),
  	   IDENTIFIER_POINTER (class_name));
        return 1;
*************** declare_local_variables (int modifier, t
*** 10219,10225 ****
  	{
  	  parse_error_context
  	    (ctxp->modifier_ctx [i],
! 	     "Only `final' is allowed as a local variables modifier");
  	  return;
  	}
      }
--- 10401,10407 ----
  	{
  	  parse_error_context
  	    (ctxp->modifier_ctx [i],
! 	     "Only %<final%> is allowed as a local variables modifier");
  	  return;
  	}
      }
*************** declare_local_variables (int modifier, t
*** 10267,10279 ****
--- 10449,10473 ----
  
        /* 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;
  
+       /* Remember it if this is an initialized-upon-declaration final
+          variable.  */
+       if (init && final_p)
+         {
+           DECL_LOCAL_FINAL_IUD (decl) = 1;
+         }
+ 
        /* Add the initialization function to the current function's code */
        if (init)
  	{
*************** create_artificial_method (tree class, in
*** 10359,10372 ****
  			  tree name, tree args)
  {
    tree mdecl;
  
!   java_parser_context_save_global ();
!   input_line = 0;
    mdecl = make_node (FUNCTION_TYPE);
    TREE_TYPE (mdecl) = type;
    TYPE_ARG_TYPES (mdecl) = args;
!   mdecl = add_method (class, flags, name, build_java_signature (mdecl));
!   java_parser_context_restore_global ();
    DECL_ARTIFICIAL (mdecl) = 1;
    return mdecl;
  }
--- 10553,10570 ----
  			  tree name, tree args)
  {
    tree mdecl;
+   location_t save_location = input_location;
  
!   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (class));
    mdecl = make_node (FUNCTION_TYPE);
    TREE_TYPE (mdecl) = type;
    TYPE_ARG_TYPES (mdecl) = args;
!   /* We used to compute the signature of MDECL here and then use
!      add_method(), but that failed because our caller might modify
!      the type of the returned method, which trashes the cache in
!      get_type_from_signature().  */
!   mdecl = add_method_1 (class, flags, name, mdecl);
!   input_location = save_location;
    DECL_ARTIFICIAL (mdecl) = 1;
    return mdecl;
  }
*************** create_artificial_method (tree class, in
*** 10376,10383 ****
--- 10574,10586 ----
  static void
  start_artificial_method_body (tree mdecl)
  {
+ #ifdef USE_MAPPED_LOCATION
+   DECL_SOURCE_LOCATION (mdecl) = ctxp->file_start_location;
+   DECL_FUNCTION_LAST_LINE (mdecl) = ctxp->file_start_location;
+ #else
    DECL_SOURCE_LINE (mdecl) = 1;
    DECL_FUNCTION_LAST_LINE (mdecl) = 1;
+ #endif
    source_start_java_method (mdecl);
    enter_block ();
  }
*************** source_end_java_method (void)
*** 10421,10444 ****
      return;
  
    java_parser_context_save_global ();
    input_line = ctxp->last_ccb_indent1;
  
    /* Turn function bodies with only a NOP expr null, so they don't get
       generated at all and we won't get warnings when using the -W
       -Wall flags. */
!   if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl)) == empty_stmt_node)
      BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl)) = NULL_TREE;
  
!   /* We've generated all the trees for this function, and it has been
!      patched.  Dump it to a file if the user requested it.  */
!   dump_java_tree (TDI_original, fndecl);
! 
!   /* Defer expanding the method until cgraph analysis is complete.  */
!   if (DECL_SAVED_TREE (fndecl))
!     cgraph_finalize_function (fndecl, false);
  
    current_function_decl = NULL_TREE;
    java_parser_context_restore_global ();
  }
  
  /* Record EXPR in the current function block. Complements compound
--- 10624,10649 ----
      return;
  
    java_parser_context_save_global ();
+ #ifdef USE_MAPPED_LOCATION
+   input_location = ctxp->last_ccb_indent1;
+ #else
    input_line = ctxp->last_ccb_indent1;
+ #endif
  
    /* Turn function bodies with only a NOP expr null, so they don't get
       generated at all and we won't get warnings when using the -W
       -Wall flags. */
!   if (IS_EMPTY_STMT (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl))))
      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;
    java_parser_context_restore_global ();
+   current_function_decl = NULL_TREE;
  }
  
  /* Record EXPR in the current function block. Complements compound
*************** add_stmt_to_block (tree b, tree type, tr
*** 10468,10486 ****
    return c;
  }
  
! /* Add STMT to EXISTING if possible, otherwise create a new
!    COMPOUND_EXPR and add STMT to it. */
! 
! static tree
! add_stmt_to_compound (tree existing, tree type, tree stmt)
! {
!   if (existing)
!     return build (COMPOUND_EXPR, type, existing, stmt);
!   else
!     return stmt;
! }
  
! void java_layout_seen_class_methods (void)
  {
    tree previous_list = all_class_list;
    tree end = NULL_TREE;
--- 10673,10682 ----
    return c;
  }
  
! /* Lays out the methods for the classes seen so far.  */
  
! void
! java_layout_seen_class_methods (void)
  {
    tree previous_list = all_class_list;
    tree end = NULL_TREE;
*************** void java_layout_seen_class_methods (voi
*** 10490,10496 ****
      {
        for (current = previous_list;
  	   current != end; current = TREE_CHAIN (current))
! 	layout_class_methods (TREE_TYPE (TREE_VALUE (current)));
  
        if (previous_list != all_class_list)
  	{
--- 10686,10705 ----
      {
        for (current = previous_list;
  	   current != end; current = TREE_CHAIN (current))
!         {
! 	  tree decl = TREE_VALUE (current);
!           tree cls = TREE_TYPE (decl);
! 
! 	  input_location = DECL_SOURCE_LOCATION (decl);
! 
!           if (! CLASS_LOADED_P (cls))
!             load_class (cls, 0);
! 
!           layout_class_methods (cls);
!         }
! 
!       /* Note that new classes might have been added while laying out
!          methods, changing the value of all_class_list.  */
  
        if (previous_list != all_class_list)
  	{
*************** java_complete_expand_class (tree outer)
*** 10605,10612 ****
  {
    tree inner_list;
  
-   set_nested_class_simple_name_value (outer, 1); /* Set */
- 
    /* We need to go after all inner classes and start expanding them,
       starting with most nested ones. We have to do that because nested
       classes might add functions to outer classes */
--- 10814,10819 ----
*************** java_complete_expand_class (tree outer)
*** 10616,10622 ****
      java_complete_expand_class (TREE_PURPOSE (inner_list));
  
    java_complete_expand_methods (outer);
-   set_nested_class_simple_name_value (outer, 0); /* Reset */
  }
  
  /* Expand methods registered in CLASS_DECL. The general idea is that
--- 10823,10828 ----
*************** java_complete_expand_methods (tree class
*** 10653,10673 ****
    /* Now do the constructors */
    for (decl = first_decl ; !java_error_count && decl; decl = TREE_CHAIN (decl))
      {
-       int no_body;
- 
        if (!DECL_CONSTRUCTOR_P (decl))
  	continue;
- 
-       no_body = !DECL_FUNCTION_BODY (decl);
-       /* Don't generate debug info on line zero when expanding a
- 	 generated constructor. */
-       if (no_body)
- 	restore_line_number_status (1);
- 
        java_complete_expand_method (decl);
- 
-       if (no_body)
- 	restore_line_number_status (0);
      }
  
    /* First, do the ordinary methods. */
--- 10859,10867 ----
*************** maybe_generate_pre_expand_clinit (tree c
*** 10752,10758 ****
        /* We build the assignment expression that will initialize the
  	 field to its value. There are strict rules on static
  	 initializers (8.5). FIXME */
!       if (TREE_CODE (stmt) != BLOCK && stmt != empty_stmt_node)
  	stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
        java_method_add_stmt (mdecl, stmt);
      }
--- 10946,10952 ----
        /* We build the assignment expression that will initialize the
  	 field to its value. There are strict rules on static
  	 initializers (8.5). FIXME */
!       if (TREE_CODE (stmt) != BLOCK && !IS_EMPTY_STMT (stmt))
  	stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
        java_method_add_stmt (mdecl, stmt);
      }
*************** maybe_yank_clinit (tree mdecl)
*** 10846,10852 ****
      bbody = BLOCK_EXPR_BODY (bbody);
    else
      return 0;
!   if (bbody && ! flag_emit_class_files && bbody != empty_stmt_node)
      return 0;
  
    type = DECL_CONTEXT (mdecl);
--- 11040,11046 ----
      bbody = BLOCK_EXPR_BODY (bbody);
    else
      return 0;
!   if (bbody && ! flag_emit_class_files && !IS_EMPTY_STMT (bbody))
      return 0;
  
    type = DECL_CONTEXT (mdecl);
*************** maybe_yank_clinit (tree mdecl)
*** 10880,10886 ****
  
    /* Now we analyze the method body and look for something that
       isn't a MODIFY_EXPR */
!   if (bbody != empty_stmt_node && analyze_clinit_body (type, bbody))
      return 0;
  
    /* Get rid of <clinit> in the class' list of methods */
--- 11074,11080 ----
  
    /* 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 */
*************** start_complete_expand_method (tree mdecl
*** 10915,10921 ****
        /* TREE_CHAIN (tem) will change after pushdecl. */
        tree next = TREE_CHAIN (tem);
        tree type = TREE_TYPE (tem);
!       if (PROMOTE_PROTOTYPES
  	  && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)
  	  && INTEGRAL_TYPE_P (type))
  	type = integer_type_node;
--- 11109,11115 ----
        /* TREE_CHAIN (tem) will change after pushdecl. */
        tree next = TREE_CHAIN (tem);
        tree type = TREE_TYPE (tem);
!       if (targetm.calls.promote_prototypes (type)
  	  && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)
  	  && INTEGRAL_TYPE_P (type))
  	type = integer_type_node;
*************** start_complete_expand_method (tree mdecl
*** 10927,10933 ****
        TREE_CHAIN (tem) = next;
      }
    pushdecl_force_head (DECL_ARGUMENTS (mdecl));
!   input_line = DECL_SOURCE_LINE (mdecl);
    build_result_decl (mdecl);
  }
  
--- 11121,11127 ----
        TREE_CHAIN (tem) = next;
      }
    pushdecl_force_head (DECL_ARGUMENTS (mdecl));
!   input_location = DECL_SOURCE_LOCATION (mdecl);
    build_result_decl (mdecl);
  }
  
*************** java_expand_method_bodies (tree class)
*** 11045,11051 ****
    for (decl = TYPE_METHODS (class); decl; decl = TREE_CHAIN (decl))
      {
        tree block;
-       tree body;
  
        if (! DECL_FUNCTION_BODY (decl))
  	continue;
--- 11239,11244 ----
*************** java_expand_method_bodies (tree class)
*** 11054,11070 ****
  
        block = BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (decl));
  
!       if (TREE_CODE (block) != BLOCK)
! 	abort ();
! 
!       /* Save the function body for inlining.  */
        DECL_SAVED_TREE (decl) = block;
  
-       body = BLOCK_EXPR_BODY (block);
- 
-       if (TREE_TYPE (body) == NULL_TREE)
- 	abort ();
- 
        /* It's time to assign the variable flagging static class
  	 initialization based on which classes invoked static methods
  	 are definitely initializing. This should be flagged. */
--- 11247,11255 ----
  
        block = BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (decl));
  
!       /* Save the function body for gimplify and inlining.  */
        DECL_SAVED_TREE (decl) = block;
  
        /* It's time to assign the variable flagging static class
  	 initialization based on which classes invoked static methods
  	 are definitely initializing. This should be flagged. */
*************** java_expand_method_bodies (tree class)
*** 11096,11136 ****
  	    }
  	}
  
!       /* Prepend class initialization to static methods.  */
!       if (METHOD_STATIC (decl) && ! METHOD_PRIVATE (decl)
! 	  && ! flag_emit_class_files
! 	  && ! DECL_CLINIT_P (decl)
! 	  && ! CLASS_INTERFACE (TYPE_NAME (class)))
! 	{
! 	  tree init = build (CALL_EXPR, void_type_node,
! 			     build_address_of (soft_initclass_node),
! 			     build_tree_list (NULL_TREE,
! 					      build_class_ref (class)),
! 			     NULL_TREE);
! 	  TREE_SIDE_EFFECTS (init) = 1;
! 	  body = build (COMPOUND_EXPR, TREE_TYPE (body), init, body);
! 	  BLOCK_EXPR_BODY (block) = body;
! 	}
! 
!       /* Wrap synchronized method bodies in a monitorenter
! 	 plus monitorexit cleanup.  */
!       if (METHOD_SYNCHRONIZED (decl) && ! flag_emit_class_files)
! 	{
! 	  tree enter, exit, lock;
! 	  if (METHOD_STATIC (decl))
! 	    lock = build_class_ref (class);
! 	  else
! 	    lock = DECL_ARGUMENTS (decl);
! 	  BUILD_MONITOR_ENTER (enter, lock);
! 	  BUILD_MONITOR_EXIT (exit, lock);
! 
! 	  body = build (COMPOUND_EXPR, void_type_node,
! 			enter,
! 			build (TRY_FINALLY_EXPR, void_type_node, body, exit));
! 	  BLOCK_EXPR_BODY (block) = body;
! 	}
! 
!       /* Expand the the function body.  */
        source_end_java_method ();
      }
  }
--- 11281,11287 ----
  	    }
  	}
  
!       /* Expand the function body.  */
        source_end_java_method ();
      }
  }
*************** build_thisn_assign (void)
*** 11642,11648 ****
--- 11793,11803 ----
        tree lhs = make_qualified_primary (build_wfl_node (this_identifier_node),
  					 build_wfl_node (thisn), 0);
        tree rhs = build_wfl_node (thisn);
+ #ifdef USE_MAPPED_LOCATION
+       SET_EXPR_LOCATION (lhs, input_location);
+ #else
        EXPR_WFL_SET_LINECOL (lhs, input_line, 0);
+ #endif
        return build_assignment (ASSIGN_TK, EXPR_WFL_LINECOL (lhs), lhs, rhs);
      }
    return NULL_TREE;
*************** static tree
*** 11666,11672 ****
--- 11821,11831 ----
  build_dot_class_method (tree class)
  {
  #define BWF(S) build_wfl_node (get_identifier ((S)))
+ #ifdef USE_MAPPED_LOCATION
+ #define MQN(X,Y) make_qualified_name ((X), (Y), UNKNOWN_LOCATION)
+ #else
  #define MQN(X,Y) make_qualified_name ((X), (Y), 0)
+ #endif
    tree args, tmp, saved_current_function_decl, mdecl, qual_name;
    tree stmt, throw_stmt;
  
*************** build_dot_class_method (tree class)
*** 11704,11711 ****
--- 11863,11875 ----
  
    /* Now onto the catch block. We start by building the expression
       throwing a new exception: throw new NoClassDefFoundError (_.getMessage) */
+ #ifdef USE_MAPPED_LOCATION
+   throw_stmt = make_qualified_name (build_wfl_node (wpv_id),
+ 				    get_message_wfl, UNKNOWN_LOCATION);
+ #else
    throw_stmt = make_qualified_name (build_wfl_node (wpv_id),
  				    get_message_wfl, 0);
+ #endif
    throw_stmt = build_method_invocation (throw_stmt, NULL_TREE);
  
    /* Build new NoClassDefFoundError (_.getMessage) */
*************** static void
*** 11770,11776 ****
  fix_constructors (tree mdecl)
  {
    tree iii;			/* Instance Initializer Invocation */
!   tree body = DECL_FUNCTION_BODY (mdecl);
    tree thisn_assign, compound = NULL_TREE;
    tree class_type = DECL_CONTEXT (mdecl);
  
--- 11934,11940 ----
  fix_constructors (tree mdecl)
  {
    tree iii;			/* Instance Initializer Invocation */
!   tree *bodyp = &DECL_FUNCTION_BODY (mdecl);
    tree thisn_assign, compound = NULL_TREE;
    tree class_type = DECL_CONTEXT (mdecl);
  
*************** fix_constructors (tree mdecl)
*** 11778,11784 ****
      return;
    DECL_FIXED_CONSTRUCTOR_P (mdecl) = 1;
  
!   if (!body)
      {
        /* It is an error for the compiler to generate a default
  	 constructor if the superclass doesn't have a constructor that
--- 11942,11948 ----
      return;
    DECL_FIXED_CONSTRUCTOR_P (mdecl) = 1;
  
!   if (!*bodyp)
      {
        /* It is an error for the compiler to generate a default
  	 constructor if the superclass doesn't have a constructor that
*************** fix_constructors (tree mdecl)
*** 11791,11798 ****
  	  DECL_NAME (mdecl) = DECL_NAME (sclass_decl);
  	  parse_error_context
  	    (lookup_cl (TYPE_NAME (class_type)),
! 	     "No constructor matching `%s' found in class `%s'",
! 	     lang_printable_name (mdecl, 0), n);
  	  DECL_NAME (mdecl) = save;
  	}
  
--- 11955,11962 ----
  	  DECL_NAME (mdecl) = DECL_NAME (sclass_decl);
  	  parse_error_context
  	    (lookup_cl (TYPE_NAME (class_type)),
! 	     "No constructor matching %qs found in class %qs",
! 	     lang_printable_name (mdecl, 2), n);
  	  DECL_NAME (mdecl) = save;
  	}
  
*************** fix_constructors (tree mdecl)
*** 11822,11852 ****
      {
        int found = 0;
        int invokes_this = 0;
!       tree found_call = NULL_TREE;
!       tree main_block = BLOCK_EXPR_BODY (body);
  
!       while (body)
! 	switch (TREE_CODE (body))
! 	  {
! 	  case CALL_EXPR:
! 	    found = CALL_EXPLICIT_CONSTRUCTOR_P (body);
! 	    if (CALL_THIS_CONSTRUCTOR_P (body))
! 	      invokes_this = 1;
! 	    body = NULL_TREE;
! 	    break;
! 	  case COMPOUND_EXPR:
! 	  case EXPR_WITH_FILE_LOCATION:
! 	    found_call = body;
! 	    body = TREE_OPERAND (body, 0);
! 	    break;
! 	  case BLOCK:
! 	    found_call = body;
! 	    body = BLOCK_EXPR_BODY (body);
! 	    break;
! 	  default:
! 	    found = 0;
! 	    body = NULL_TREE;
! 	  }
  
        /* Generate the assignment to this$<n>, if necessary */
        if ((thisn_assign = build_thisn_assign ()))
--- 11986,12015 ----
      {
        int found = 0;
        int invokes_this = 0;
!       tree main_block = BLOCK_EXPR_BODY (*bodyp);
  
!       while (*bodyp)
! 	{
! 	  tree body = *bodyp;
! 	  switch (TREE_CODE (body))
! 	    {
! 	    case CALL_EXPR:
! 	      found = CALL_EXPLICIT_CONSTRUCTOR_P (body);
! 	      if (CALL_THIS_CONSTRUCTOR_P (body))
! 		invokes_this = 1;
! 	      break;
! 	    case COMPOUND_EXPR:
! 	    case EXPR_WITH_FILE_LOCATION:
! 	      bodyp = &TREE_OPERAND (body, 0);
! 	      continue;
! 	    case BLOCK:
! 	      bodyp = &BLOCK_EXPR_BODY (body);
! 	      continue;
! 	    default:
! 	      break;
! 	    }
! 	  break;
! 	}
  
        /* Generate the assignment to this$<n>, if necessary */
        if ((thisn_assign = build_thisn_assign ()))
*************** fix_constructors (tree mdecl)
*** 11860,11868 ****
           instance initializer blocks. */
        else
  	{
! 	  compound = add_stmt_to_compound (compound, NULL_TREE,
! 					   TREE_OPERAND (found_call, 0));
! 	  TREE_OPERAND (found_call, 0) = empty_stmt_node;
  	}
  
        DECL_INIT_CALLS_THIS (mdecl) = invokes_this;
--- 12023,12030 ----
           instance initializer blocks. */
        else
  	{
! 	  compound = add_stmt_to_compound (compound, NULL_TREE, *bodyp);
! 	  *bodyp = build_java_empty_stmt ();
  	}
  
        DECL_INIT_CALLS_THIS (mdecl) = invokes_this;
*************** java_expand_classes (void)
*** 11943,11954 ****
--- 12105,12118 ----
  {
    int save_error_count = 0;
    static struct parser_ctxt *cur_ctxp = NULL;
+   location_t save_location;
  
    java_parse_abort_on_error ();
    if (!(ctxp = ctxp_for_generation))
      return;
    java_layout_classes ();
    java_parse_abort_on_error ();
+   save_location = input_location;
  
    for (cur_ctxp = ctxp_for_generation; cur_ctxp; cur_ctxp = cur_ctxp->next)
      {
*************** java_expand_classes (void)
*** 11962,11973 ****
    for (cur_ctxp = ctxp_for_generation; cur_ctxp; cur_ctxp = cur_ctxp->next)
      {
        ctxp = cur_ctxp;
!       input_filename = ctxp->filename;
        lang_init_source (2);	       /* Error msgs have method prototypes */
        java_complete_expand_classes (); /* Complete and expand classes */
        java_parse_abort_on_error ();
      }
!   input_filename = main_input_filename;
  
    /* Find anonymous classes and expand their constructor. This extra pass is
       necessary because the constructor itself is only generated when the
--- 12126,12137 ----
    for (cur_ctxp = ctxp_for_generation; cur_ctxp; cur_ctxp = cur_ctxp->next)
      {
        ctxp = cur_ctxp;
!       input_location = ctxp->file_start_location;
        lang_init_source (2);	       /* Error msgs have method prototypes */
        java_complete_expand_classes (); /* Complete and expand classes */
        java_parse_abort_on_error ();
      }
!   input_location = save_location;
  
    /* Find anonymous classes and expand their constructor. This extra pass is
       necessary because the constructor itself is only generated when the
*************** java_expand_classes (void)
*** 11986,11994 ****
  		{
  		  if (DECL_CONSTRUCTOR_P (d))
  		    {
- 		      restore_line_number_status (1);
  		      java_complete_expand_method (d);
- 		      restore_line_number_status (0);
  		      break;	/* There is only one constructor. */
  		    }
  		}
--- 12150,12156 ----
*************** java_expand_classes (void)
*** 12010,12020 ****
  	  for (d = TYPE_METHODS (current_class); d; d = TREE_CHAIN (d))
  	    {
  	      if (DECL_RESULT (d) == NULL_TREE)
! 		{
! 		  restore_line_number_status (1);
! 		  java_complete_expand_method (d);
! 		  restore_line_number_status (0);
! 		}
  	    }
  	}
      }
--- 12172,12178 ----
  	  for (d = TYPE_METHODS (current_class); d; d = TREE_CHAIN (d))
  	    {
  	      if (DECL_RESULT (d) == NULL_TREE)
! 		java_complete_expand_method (d);
  	    }
  	}
      }
*************** java_expand_classes (void)
*** 12043,12051 ****
  		      if (DECL_RESULT (d) == NULL_TREE)
  			{
  			  something_changed = 1;
- 			  restore_line_number_status (1);
  			  java_complete_expand_method (d);
- 			  restore_line_number_status (0);
  			}
  		    }
  		}
--- 12201,12207 ----
*************** merge_qualified_name (tree left, tree ri
*** 12187,12197 ****
     inherited from the location information of the `.' operator. */
  
  static tree
! make_qualified_name (tree left, tree right, int location)
  {
  #ifdef USE_COMPONENT_REF
!   tree node = build (COMPONENT_REF, NULL_TREE, left, right);
!   EXPR_WFL_LINECOL (node) = location;
    return node;
  #else
    tree left_id = EXPR_WFL_NODE (left);
--- 12343,12359 ----
     inherited from the location information of the `.' operator. */
  
  static tree
! make_qualified_name (tree left, tree right,
! #ifdef USE_MAPPED_LOCATION
! 		     source_location location
! #else
! 		     int location
! #endif
! 		     )
  {
  #ifdef USE_COMPONENT_REF
!   tree node = build3 (COMPONENT_REF, NULL_TREE, left, right, NULL_TREE);
!   SET_EXPR_LOCATION (node, location);
    return node;
  #else
    tree left_id = EXPR_WFL_NODE (left);
*************** make_qualified_name (tree left, tree rig
*** 12201,12206 ****
--- 12363,12377 ----
    merge = merge_qualified_name (left_id, right_id);
  
    /* Left wasn't qualified and is now qualified */
+ #ifdef USE_MAPPED_LOCATION
+   if (!QUALIFIED_P (left_id))
+     {
+       tree wfl = build_expr_wfl (left_id, EXPR_LOCATION (left));
+       EXPR_WFL_QUALIFICATION (left) = build_tree_list (wfl, NULL_TREE);
+     }
+ 
+   wfl = build_expr_wfl (right_id, location);
+ #else
    if (!QUALIFIED_P (left_id))
      {
        tree wfl = build_expr_wfl (left_id, ctxp->filename, 0, 0);
*************** make_qualified_name (tree left, tree rig
*** 12210,12217 ****
  
    wfl = build_expr_wfl (right_id, ctxp->filename, 0, 0);
    EXPR_WFL_LINECOL (wfl) = location;
    chainon (EXPR_WFL_QUALIFICATION (left), build_tree_list (wfl, NULL_TREE));
- 
    EXPR_WFL_NODE (left) = merge;
    return left;
  #endif
--- 12381,12388 ----
  
    wfl = build_expr_wfl (right_id, ctxp->filename, 0, 0);
    EXPR_WFL_LINECOL (wfl) = location;
+ #endif
    chainon (EXPR_WFL_QUALIFICATION (left), build_tree_list (wfl, NULL_TREE));
    EXPR_WFL_NODE (left) = merge;
    return left;
  #endif
*************** resolve_expression_name (tree id, tree *
*** 12284,12290 ****
  		  && !enclosing_context_p (DECL_CONTEXT (decl), current_class))
  		{
  		  parse_error_context
! 		    (id, "Can't reference `%s' before the superclass constructor has been called", IDENTIFIER_POINTER (name));
  		  return error_mark_node;
  		}
  
--- 12455,12461 ----
  		  && !enclosing_context_p (DECL_CONTEXT (decl), current_class))
  		{
  		  parse_error_context
! 		    (id, "Can't reference %qs before the superclass constructor has been called", IDENTIFIER_POINTER (name));
  		  return error_mark_node;
  		}
  
*************** resolve_expression_name (tree id, tree *
*** 12338,12349 ****
    /* We've got an error here */
    if (INNER_CLASS_TYPE_P (current_class))
      parse_error_context (id,
! 			 "Local variable `%s' can't be accessed from within the inner class `%s' unless it is declared final",
  			 IDENTIFIER_POINTER (name),
  			 IDENTIFIER_POINTER (DECL_NAME
  					     (TYPE_NAME (current_class))));
    else
!     parse_error_context (id, "Undefined variable `%s'",
  			 IDENTIFIER_POINTER (name));
  
    return error_mark_node;
--- 12509,12520 ----
    /* We've got an error here */
    if (INNER_CLASS_TYPE_P (current_class))
      parse_error_context (id,
! 			 "Local variable %qs can't be accessed from within the inner class %qs unless it is declared final",
  			 IDENTIFIER_POINTER (name),
  			 IDENTIFIER_POINTER (DECL_NAME
  					     (TYPE_NAME (current_class))));
    else
!     parse_error_context (id, "Undefined variable %qs",
  			 IDENTIFIER_POINTER (name));
  
    return error_mark_node;
*************** static_ref_err (tree wfl, tree field_id,
*** 12354,12360 ****
  {
    parse_error_context
      (wfl,
!      "Can't make a static reference to nonstatic variable `%s' in class `%s'",
       IDENTIFIER_POINTER (field_id),
       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (class_type))));
  }
--- 12525,12531 ----
  {
    parse_error_context
      (wfl,
!      "Can't make a static reference to nonstatic variable %qs in class %qs",
       IDENTIFIER_POINTER (field_id),
       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (class_type))));
  }
*************** resolve_field_access (tree qual_wfl, tre
*** 12369,12375 ****
  {
    int is_static = 0;
    tree field_ref;
!   tree decl, where_found, type_found;
  
    if (resolve_qualified_expression_name (qual_wfl, &decl,
  					 &where_found, &type_found))
--- 12540,12546 ----
  {
    int is_static = 0;
    tree field_ref;
!   tree decl = NULL_TREE, where_found, type_found;
  
    if (resolve_qualified_expression_name (qual_wfl, &decl,
  					 &where_found, &type_found))
*************** resolve_field_access (tree qual_wfl, tre
*** 12436,12447 ****
    return field_ref;
  }
  
! /* If NODE is an access to f static field, strip out the class
     initialization part and return the field decl, otherwise, return
     NODE. */
  
! static tree
! strip_out_static_field_access_decl (tree node)
  {
    if (TREE_CODE (node) == COMPOUND_EXPR)
      {
--- 12607,12618 ----
    return field_ref;
  }
  
! /* If NODE is an access to a static field, strip out the class
     initialization part and return the field decl, otherwise, return
     NODE. */
  
! tree
! extract_field_decl (tree node)
  {
    if (TREE_CODE (node) == COMPOUND_EXPR)
      {
*************** strip_out_static_field_access_decl (tree
*** 12451,12458 ****
  	   tree call = TREE_OPERAND (op1, 0);
  	   if (TREE_CODE (call) == CALL_EXPR
  	       && TREE_CODE (TREE_OPERAND (call, 0)) == ADDR_EXPR
! 	       && TREE_OPERAND (TREE_OPERAND (call, 0), 0)
! 	       == soft_initclass_node)
  	     return TREE_OPERAND (op1, 1);
  	 }
        else if (JDECL_P (op1))
--- 12622,12629 ----
  	   tree call = TREE_OPERAND (op1, 0);
  	   if (TREE_CODE (call) == CALL_EXPR
  	       && TREE_CODE (TREE_OPERAND (call, 0)) == ADDR_EXPR
! 	       && (TREE_OPERAND (TREE_OPERAND (call, 0), 0)
! 		   == soft_initclass_node))
  	     return TREE_OPERAND (op1, 1);
  	 }
        else if (JDECL_P (op1))
*************** resolve_qualified_expression_name (tree 
*** 12483,12489 ****
--- 12654,12664 ----
      {
        tree qual_wfl = QUAL_WFL (q);
        tree ret_decl;		/* for EH checking */
+ #ifdef USE_MAPPED_LOCATION
+       source_location location;  /* for EH checking */
+ #else
        int location;		/* for EH checking */
+ #endif
  
        /* 15.10.1 Field Access Using a Primary */
        switch (TREE_CODE (qual_wfl))
*************** resolve_qualified_expression_name (tree 
*** 12529,12536 ****
--- 12704,12717 ----
  
  	  if (from_super && TREE_CODE (qual_wfl) == CALL_EXPR)
  	    CALL_USING_SUPER (qual_wfl) = 1;
+ #ifdef USE_MAPPED_LOCATION
+ 	  location = (TREE_CODE (qual_wfl) == CALL_EXPR
+ 		      ? EXPR_LOCATION (TREE_OPERAND (qual_wfl, 0))
+ 		      : UNKNOWN_LOCATION);
+ #else
  	  location = (TREE_CODE (qual_wfl) == CALL_EXPR ?
  		      EXPR_WFL_LINECOL (TREE_OPERAND (qual_wfl, 0)) : 0);
+ #endif
  	  *where_found = patch_method_invocation (qual_wfl, decl, type,
  						  from_super,
  						  &is_static, &ret_decl);
*************** resolve_qualified_expression_name (tree 
*** 12550,12556 ****
  	      && INNER_ENCLOSING_SCOPE_CHECK (type))
  	    {
  	      parse_error_context
! 		(qual_wfl, "No enclosing instance for inner class `%s' is in scope%s",
  		 lang_printable_name (type, 0),
  		 (!current_this ? "" :
  		  "; an explicit one must be provided when creating this inner class"));
--- 12731,12737 ----
  	      && INNER_ENCLOSING_SCOPE_CHECK (type))
  	    {
  	      parse_error_context
! 		(qual_wfl, "No enclosing instance for inner class %qs is in scope%s",
  		 lang_printable_name (type, 0),
  		 (!current_this ? "" :
  		  "; an explicit one must be provided when creating this inner class"));
*************** resolve_qualified_expression_name (tree 
*** 12562,12568 ****
--- 12743,12753 ----
  	     instantiation using a primary qualified by a `new' */
  	  RESTORE_THIS_AND_CURRENT_CLASS;
  
+ #ifdef USE_MAPPED_LOCATION
+ 	  if (location != UNKNOWN_LOCATION)
+ #else
  	  if (location)
+ #endif
  	    {
  	      tree arguments = NULL_TREE;
  	      if (TREE_CODE (qual_wfl) == CALL_EXPR
*************** resolve_qualified_expression_name (tree 
*** 12577,12584 ****
  	     forcoming function's argument. */
  	  if (previous_call_static && is_static)
  	    {
! 	      decl = build (COMPOUND_EXPR, TREE_TYPE (*where_found),
! 			    decl, *where_found);
  	      TREE_SIDE_EFFECTS (decl) = 1;
  	    }
  	  else
--- 12762,12772 ----
  	     forcoming function's argument. */
  	  if (previous_call_static && is_static)
  	    {
! 	      /* We must set CAN_COMPLETE_NORMALLY for the first call
! 		 since it is done nowhere else.  */
! 	      CAN_COMPLETE_NORMALLY (decl) = 1;
! 	      decl = build2 (COMPOUND_EXPR, TREE_TYPE (*where_found),
! 			     decl, *where_found);
  	      TREE_SIDE_EFFECTS (decl) = 1;
  	    }
  	  else
*************** resolve_qualified_expression_name (tree 
*** 12662,12674 ****
  	  if (!current_this)
  	    {
  	      parse_error_context
! 		(wfl, "Keyword `this' used outside allowed context");
  	      return 1;
  	    }
  	  if (ctxp->explicit_constructor_p
  	      && type == current_class)
  	    {
! 	      parse_error_context (wfl, "Can't reference `this' before the superclass constructor has been called");
  	      return 1;
  	    }
  	  /* We have to generate code for intermediate access */
--- 12850,12862 ----
  	  if (!current_this)
  	    {
  	      parse_error_context
! 		(wfl, "Keyword %<this%> used outside allowed context");
  	      return 1;
  	    }
  	  if (ctxp->explicit_constructor_p
  	      && type == current_class)
  	    {
! 	      parse_error_context (wfl, "Can't reference %<this%> before the superclass constructor has been called");
  	      return 1;
  	    }
  	  /* We have to generate code for intermediate access */
*************** resolve_qualified_expression_name (tree 
*** 12684,12690 ****
  	      if (!enclosing_context_p (type, current_class))
  		{
  		  char *p  = xstrdup (lang_printable_name (type, 0));
! 		  parse_error_context (qual_wfl, "Can't use variable `%s.this': type `%s' isn't an outer type of type `%s'",
  				       p, p,
  				       lang_printable_name (current_class, 0));
  		  free (p);
--- 12872,12878 ----
  	      if (!enclosing_context_p (type, current_class))
  		{
  		  char *p  = xstrdup (lang_printable_name (type, 0));
! 		  parse_error_context (qual_wfl, "Can't use variable %<%s.this%>: type %qs isn't an outer type of type %qs",
  				       p, p,
  				       lang_printable_name (current_class, 0));
  		  free (p);
*************** resolve_qualified_expression_name (tree 
*** 12717,12723 ****
  	      || current_class == object_type_node)
  	    {
  	      parse_error_context
! 		(wfl, "Keyword `super' used outside allowed context");
  	      return 1;
  	    }
  	  /* Otherwise, treat SUPER as (SUPER_CLASS)THIS */
--- 12905,12911 ----
  	      || current_class == object_type_node)
  	    {
  	      parse_error_context
! 		(wfl, "Keyword %<super%> used outside allowed context");
  	      return 1;
  	    }
  	  /* Otherwise, treat SUPER as (SUPER_CLASS)THIS */
*************** resolve_qualified_expression_name (tree 
*** 12742,12747 ****
--- 12930,12937 ----
  	      tree list;
  	      *where_found = decl;
  
+ 	      check_pkg_class_access (DECL_NAME (decl), qual_wfl, true, NULL);
+ 
  	      /* We want to be absolutely sure that the class is laid
                   out. We're going to search something inside it. */
  	      *type_found = type = TREE_TYPE (decl);
*************** resolve_qualified_expression_name (tree 
*** 12764,12775 ****
  	      if (from_super || from_cast)
  		parse_error_context
  		  ((from_cast ? qual_wfl : wfl),
! 		   "No variable `%s' defined in class `%s'",
  		   IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		   lang_printable_name (type, 0));
  	      else
  		parse_error_context
! 		  (qual_wfl, "Undefined variable or class name: `%s'",
  		   IDENTIFIER_POINTER (name));
  	      return 1;
  	    }
--- 12954,12965 ----
  	      if (from_super || from_cast)
  		parse_error_context
  		  ((from_cast ? qual_wfl : wfl),
! 		   "No variable %qs defined in class %qs",
  		   IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		   lang_printable_name (type, 0));
  	      else
  		parse_error_context
! 		  (qual_wfl, "Undefined variable or class name: %qs",
  		   IDENTIFIER_POINTER (name));
  	      return 1;
  	    }
*************** resolve_qualified_expression_name (tree 
*** 12782,12799 ****
  	  decl = QUAL_RESOLUTION (q);
  
  	  /* Sneak preview. If next we see a `new', we're facing a
! 	     qualification with resulted in a type being selected
! 	     instead of a field.  Report the error */
  	  if(TREE_CHAIN (q)
  	     && TREE_CODE (TREE_PURPOSE (TREE_CHAIN (q))) == NEW_CLASS_EXPR)
  	    {
! 	      parse_error_context (qual_wfl, "Undefined variable `%s'",
  				   IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  	      return 1;
  	    }
  
! 	  if (not_accessible_p (TREE_TYPE (decl), decl, type, 0))
!  	    return not_accessible_field_error (qual_wfl, decl);
  	  check_deprecation (qual_wfl, decl);
  
  	  type = TREE_TYPE (decl);
--- 12972,12989 ----
  	  decl = QUAL_RESOLUTION (q);
  
  	  /* Sneak preview. If next we see a `new', we're facing a
! 	     qualification which resulted in a type being selected
! 	     instead of a field.  Report the error.  */
  	  if(TREE_CHAIN (q)
  	     && TREE_CODE (TREE_PURPOSE (TREE_CHAIN (q))) == NEW_CLASS_EXPR)
  	    {
! 	      parse_error_context (qual_wfl, "Undefined variable %qs",
  				   IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  	      return 1;
  	    }
  
! 	  check_pkg_class_access (DECL_NAME (decl), qual_wfl, true, NULL);
!           
  	  check_deprecation (qual_wfl, decl);
  
  	  type = TREE_TYPE (decl);
*************** resolve_qualified_expression_name (tree 
*** 12840,12846 ****
  	  else if (TREE_CODE (qual_wfl) == INTEGER_CST)
  	    {
  	      parse_error_context
! 		(wfl, "Can't use type `%s' as a qualifier",
  		 lang_printable_name (TREE_TYPE (qual_wfl), 0));
  	      return 1;
  	    }
--- 13030,13036 ----
  	  else if (TREE_CODE (qual_wfl) == INTEGER_CST)
  	    {
  	      parse_error_context
! 		(wfl, "Can't use type %qs as a qualifier",
  		 lang_printable_name (TREE_TYPE (qual_wfl), 0));
  	      return 1;
  	    }
*************** resolve_qualified_expression_name (tree 
*** 12859,12865 ****
  	      if (!from_type && !JREFERENCE_TYPE_P (type))
  		{
  		  parse_error_context
! 		    (qual_wfl, "Attempt to reference field `%s' in `%s %s'",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		     lang_printable_name (type, 0),
  		     IDENTIFIER_POINTER (DECL_NAME (decl)));
--- 13049,13055 ----
  	      if (!from_type && !JREFERENCE_TYPE_P (type))
  		{
  		  parse_error_context
! 		    (qual_wfl, "Attempt to reference field %qs in %<%s %s%>",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		     lang_printable_name (type, 0),
  		     IDENTIFIER_POINTER (DECL_NAME (decl)));
*************** resolve_qualified_expression_name (tree 
*** 12890,12896 ****
  	      if (field_decl == NULL_TREE)
  		{
  		  parse_error_context
! 		    (qual_wfl, "No variable `%s' defined in type `%s'",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		     GET_TYPE_NAME (type));
  		  return 1;
--- 13080,13086 ----
  	      if (field_decl == NULL_TREE)
  		{
  		  parse_error_context
! 		    (qual_wfl, "No variable %qs defined in type %qs",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		     GET_TYPE_NAME (type));
  		  return 1;
*************** resolve_qualified_expression_name (tree 
*** 12913,12919 ****
  
  	      /* Check on accessibility here */
  	      if (not_accessible_p (current_class, field_decl,
! 				    DECL_CONTEXT (field_decl), from_super))
   		return not_accessible_field_error (qual_wfl,field_decl);    
  	      check_deprecation (qual_wfl, field_decl);
  
--- 13103,13109 ----
  
  	      /* Check on accessibility here */
  	      if (not_accessible_p (current_class, field_decl,
! 				    *type_found, from_super))
   		return not_accessible_field_error (qual_wfl,field_decl);    
  	      check_deprecation (qual_wfl, field_decl);
  
*************** resolve_qualified_expression_name (tree 
*** 12974,12980 ****
  	      && TREE_CODE (TREE_PURPOSE (TREE_CHAIN (q))) == NEW_CLASS_EXPR
  	      && !JREFERENCE_TYPE_P (type))
  	    {
! 	      parse_error_context (qual_wfl, "Attempt to reference field `new' in a `%s'",
  				   lang_printable_name (type, 0));
  	      return 1;
  	    }
--- 13164,13170 ----
  	      && TREE_CODE (TREE_PURPOSE (TREE_CHAIN (q))) == NEW_CLASS_EXPR
  	      && !JREFERENCE_TYPE_P (type))
  	    {
! 	      parse_error_context (qual_wfl, "Attempt to reference field %<new%> in a %qs",
  				   lang_printable_name (type, 0));
  	      return 1;
  	    }
*************** static int
*** 12999,13008 ****
  not_accessible_p (tree reference, tree member, tree where, int from_super)
  {
    int access_flag = get_access_flags_from_decl (member);
! 
!   /* Inner classes are processed by check_inner_class_access */
!   if (INNER_CLASS_TYPE_P (reference))
!     return 0;
  
    /* Access always granted for members declared public */
    if (access_flag & ACC_PUBLIC)
--- 13189,13201 ----
  not_accessible_p (tree reference, tree member, tree where, int from_super)
  {
    int access_flag = get_access_flags_from_decl (member);
!   bool is_static = false;
!  
!   if (TREE_CODE (member) == FIELD_DECL ||
!       TREE_CODE (member) == VAR_DECL)
!     is_static = FIELD_STATIC (member);
!   else
!     is_static = METHOD_STATIC (member);
  
    /* Access always granted for members declared public */
    if (access_flag & ACC_PUBLIC)
*************** not_accessible_p (tree reference, tree m
*** 13021,13046 ****
        if (from_super)
  	return 0;
  
!       /* If where is active, access was made through a
! 	 qualifier. Access is granted if the type of the qualifier is
! 	 or is a sublass of the type the access made from (6.6.2.1.)  */
!       if (where && !inherits_from_p (reference, where))
! 	return 1;
! 
!       /* Otherwise, access is granted if occurring from the class where
! 	 member is declared or a subclass of it. Find the right
! 	 context to perform the check */
!       if (PURE_INNER_CLASS_TYPE_P (reference))
          {
!           while (INNER_CLASS_TYPE_P (reference))
              {
!               if (inherits_from_p (reference, DECL_CONTEXT (member)))
!                 return 0;
!               reference = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (reference)));
!             }
          }
-       if (inherits_from_p (reference, DECL_CONTEXT (member)))
- 	return 0;
        return 1;
      }
  
--- 13214,13247 ----
        if (from_super)
  	return 0;
  
!       /* If WHERE is active, access was made through a qualifier. For 
!          non-static members, access is granted if the type of the qualifier 
! 	 is or is a sublass of the type the access is made from (6.6.2.1.)  */
!       if (where && !is_static)
          {
! 	  while (reference)
              {
! 	      if (inherits_from_p (where, reference))
! 	        return 0;
! 	      if (INNER_CLASS_TYPE_P (reference))
! 		reference = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (reference)));
! 	      else
! 	        break;
! 	    }
! 	  return 1;
! 	}
! 
!       /* Otherwise, access is granted if occurring from within the class
!          where member is declared, or a subclass of it.  */
!       while (reference)
!         {
!           if (inherits_from_p (reference, DECL_CONTEXT (member)))
!             return 0;
! 	  if (INNER_CLASS_TYPE_P (reference))
!             reference = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (reference)));
! 	  else
! 	    break;
          }
        return 1;
      }
  
*************** not_accessible_p (tree reference, tree m
*** 13049,13069 ****
       it for innerclasses too. */
    if (access_flag & ACC_PRIVATE)
      {
!       if (reference == DECL_CONTEXT (member))
! 	return 0;
!       if (enclosing_context_p (reference, DECL_CONTEXT (member)))
  	return 0;
        return 1;
      }
  
!   /* Default access are permitted only when occurring within the
!      package in which the type (REFERENCE) is declared. In other words,
!      REFERENCE is defined in the current package */
!   if (ctxp->package)
!     return !class_in_current_package (reference);
! 
!   /* Otherwise, access is granted */
!   return 0;
  }
  
  /* Test deprecated decl access.  */
--- 13250,13264 ----
       it for innerclasses too. */
    if (access_flag & ACC_PRIVATE)
      {
!       if (reference == DECL_CONTEXT (member) ||
!           common_enclosing_context_p (DECL_CONTEXT (member), reference))
  	return 0;
        return 1;
      }
  
!   /* Default access is permitted only when occurring from within the
!      package in which the context (MEMBER) is declared.  */
!   return !class_in_current_package (DECL_CONTEXT (member));
  }
  
  /* Test deprecated decl access.  */
*************** check_deprecation (tree wfl, tree decl)
*** 13073,13079 ****
    const char *file;
    tree elt;
  
!   if (! flag_deprecated)
      return;
  
    /* We want to look at the element type of arrays here, so we strip
--- 13268,13274 ----
    const char *file;
    tree elt;
  
!   if (! warn_deprecated)
      return;
  
    /* We want to look at the element type of arrays here, so we strip
*************** check_deprecation (tree wfl, tree decl)
*** 13106,13112 ****
  	  the = "field";
  	  break;
  	case TYPE_DECL:
! 	  parse_warning_context (wfl, "The class `%s' has been deprecated",
  				 IDENTIFIER_POINTER (DECL_NAME (decl)));
  	  return;
  	default:
--- 13301,13307 ----
  	  the = "field";
  	  break;
  	case TYPE_DECL:
! 	  parse_warning_context (wfl, "The class %qs has been deprecated",
  				 IDENTIFIER_POINTER (DECL_NAME (decl)));
  	  return;
  	default:
*************** check_deprecation (tree wfl, tree decl)
*** 13116,13122 ****
           whole. */
        if (! CLASS_DEPRECATED (TYPE_NAME (DECL_CONTEXT (decl))))
  	parse_warning_context
! 	  (wfl, "The %s `%s' in class `%s' has been deprecated",
  	   the, lang_printable_name (decl, 0),
  	   IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)))));
      }
--- 13311,13317 ----
           whole. */
        if (! CLASS_DEPRECATED (TYPE_NAME (DECL_CONTEXT (decl))))
  	parse_warning_context
! 	  (wfl, "The %s %qs in class %qs has been deprecated",
  	   the, lang_printable_name (decl, 0),
  	   IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)))));
      }
*************** class_in_current_package (tree class)
*** 13149,13155 ****
      return 1;
  
    /* Compare the left part of the name of CLASS with the package name */
!   breakdown_qualified (&left, NULL, DECL_NAME (TYPE_NAME (class)));
    if (ctxp->package == left)
      {
        cicp_cache = class;
--- 13344,13350 ----
      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;
*************** patch_method_invocation (tree patch, tre
*** 13233,13239 ****
          {
  	  parse_error_context
  	    (identifier_wfl,
! 	     "Can't invoke a method on primitive type `%s'",
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
  	  PATCH_METHOD_RETURN_ERROR ();
  	}
--- 13428,13434 ----
          {
  	  parse_error_context
  	    (identifier_wfl,
! 	     "Can't invoke a method on primitive type %qs",
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
  	  PATCH_METHOD_RETURN_ERROR ();
  	}
*************** patch_method_invocation (tree patch, tre
*** 13248,13264 ****
  	    {
  	      parse_error_context
  		(identifier_wfl,
! 		"Can't make static reference to method `%s' in interface `%s'",
  		 IDENTIFIER_POINTER (identifier),
  		 IDENTIFIER_POINTER (name));
  	      PATCH_METHOD_RETURN_ERROR ();
  	    }
  	  if (list && !METHOD_STATIC (list))
  	    {
! 	      char *fct_name = xstrdup (lang_printable_name (list, 0));
  	      parse_error_context
  		(identifier_wfl,
! 		 "Can't make static reference to method `%s %s' in class `%s'",
  		 lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0),
  		 fct_name, IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
  	      free (fct_name);
--- 13443,13459 ----
  	    {
  	      parse_error_context
  		(identifier_wfl,
! 		"Can't make static reference to method %qs in interface %qs",
  		 IDENTIFIER_POINTER (identifier),
  		 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_invocation (tree patch, tre
*** 13311,13317 ****
  	      if (!class_to_search)
  		{
  		  parse_error_context
! 		    (wfl, "Class `%s' not found in type declaration",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  		  PATCH_METHOD_RETURN_ERROR ();
  		}
--- 13506,13512 ----
  	      if (!class_to_search)
  		{
  		  parse_error_context
! 		    (wfl, "Class %qs not found in type declaration",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  		  PATCH_METHOD_RETURN_ERROR ();
  		}
*************** patch_method_invocation (tree patch, tre
*** 13323,13329 ****
  		  && TREE_CODE (patch) == NEW_CLASS_EXPR)
  		{
  		  parse_error_context
! 		    (wfl, "Class `%s' is an abstract class. It can't be instantiated",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  		  PATCH_METHOD_RETURN_ERROR ();
  		}
--- 13518,13524 ----
  		  && TREE_CODE (patch) == NEW_CLASS_EXPR)
  		{
  		  parse_error_context
! 		    (wfl, "Class %qs is an abstract class. It can't be instantiated",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  		  PATCH_METHOD_RETURN_ERROR ();
  		}
*************** patch_method_invocation (tree patch, tre
*** 13353,13359 ****
  		  if (! INNER_CLASS_TYPE_P (class_to_search))
  		    {
  		      parse_error_context (wfl,
! 					   "No method named `%s' in scope",
  					   IDENTIFIER_POINTER (name));
  		      PATCH_METHOD_RETURN_ERROR ();
  		    }
--- 13548,13554 ----
  		  if (! INNER_CLASS_TYPE_P (class_to_search))
  		    {
  		      parse_error_context (wfl,
! 					   "No method named %qs in scope",
  					   IDENTIFIER_POINTER (name));
  		      PATCH_METHOD_RETURN_ERROR ();
  		    }
*************** patch_method_invocation (tree patch, tre
*** 13391,13397 ****
  	  && !DECL_INIT_P (current_function_decl))
  	{
  	  parse_error_context
! 	    (wfl, "No enclosing instance for inner class `%s' is in scope%s",
  	     lang_printable_name (class_to_search, 0),
  	     (!current_this ? "" :
  	      "; an explicit one must be provided when creating this inner class"));
--- 13586,13592 ----
  	  && !DECL_INIT_P (current_function_decl))
  	{
  	  parse_error_context
! 	    (wfl, "No enclosing instance for inner class %qs is in scope%s",
  	     lang_printable_name (class_to_search, 0),
  	     (!current_this ? "" :
  	      "; an explicit one must be provided when creating this inner class"));
*************** patch_method_invocation (tree patch, tre
*** 13456,13472 ****
      {
        const char *const fct_name = IDENTIFIER_POINTER (DECL_NAME (list));
        const char *const access =
! 	java_accstring_lookup (get_access_flags_from_decl (list));
        const char *const klass =
  	IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (list))));
        const char *const refklass =
  	IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)));
        const char *const what = (DECL_CONSTRUCTOR_P (list)
  				? "constructor" : "method");
-       /* FIXME: WFL yields the wrong message here but I don't know
- 	 what else to use.  */
        parse_error_context (wfl,
! 			   "Can't access %s %s `%s.%s' from `%s'",
  			   access, what, klass, fct_name, refklass);
        PATCH_METHOD_RETURN_ERROR ();
      }
--- 13651,13665 ----
      {
        const char *const fct_name = IDENTIFIER_POINTER (DECL_NAME (list));
        const char *const access =
! 	accessibility_string (get_access_flags_from_decl (list));
        const char *const klass =
  	IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (list))));
        const char *const refklass =
  	IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)));
        const char *const what = (DECL_CONSTRUCTOR_P (list)
  				? "constructor" : "method");
        parse_error_context (wfl,
! 			   "Can't access %s %s %<%s.%s%> from %qs",
  			   access, what, klass, fct_name, refklass);
        PATCH_METHOD_RETURN_ERROR ();
      }
*************** patch_method_invocation (tree patch, tre
*** 13547,13553 ****
        && (!primary || primary == current_this)
        && (TREE_CODE (patch) != NEW_CLASS_EXPR))
      {
!       parse_error_context (wfl, "Can't reference `this' before the superclass constructor has been called");
        PATCH_METHOD_RETURN_ERROR ();
      }
    java_parser_context_restore_global ();
--- 13740,13746 ----
        && (!primary || primary == current_this)
        && (TREE_CODE (patch) != NEW_CLASS_EXPR))
      {
!       parse_error_context (wfl, "Can't reference %<this%> before the superclass constructor has been called");
        PATCH_METHOD_RETURN_ERROR ();
      }
    java_parser_context_restore_global ();
*************** patch_method_invocation (tree patch, tre
*** 13576,13583 ****
  	 initialization statement and build a compound statement along
  	 with the super constructor invocation. */
        CAN_COMPLETE_NORMALLY (patch) = 1;
!       patch = build (COMPOUND_EXPR, void_type_node, patch,
! 		     java_complete_tree (finit_call));
      }
    return patch;
  }
--- 13769,13776 ----
  	 initialization statement and build a compound statement along
  	 with the super constructor invocation. */
        CAN_COMPLETE_NORMALLY (patch) = 1;
!       patch = build2 (COMPOUND_EXPR, void_type_node, patch,
! 		      java_complete_tree (finit_call));
      }
    return patch;
  }
*************** check_for_static_method_reference (tree 
*** 13594,13600 ****
      {
        char *fct_name = xstrdup (lang_printable_name (method, 0));
        parse_error_context
! 	(wfl, "Can't make static reference to method `%s %s' in class `%s'",
  	 lang_printable_name (TREE_TYPE (TREE_TYPE (method)), 0), fct_name,
  	 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (where))));
        free (fct_name);
--- 13787,13793 ----
      {
        char *fct_name = xstrdup (lang_printable_name (method, 0));
        parse_error_context
! 	(wfl, "Can't make static reference to method %<%s %s%> in class %qs",
  	 lang_printable_name (TREE_TYPE (TREE_TYPE (method)), 0), fct_name,
  	 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (where))));
        free (fct_name);
*************** patch_invoke (tree patch, tree method, t
*** 13764,13770 ****
    if (TREE_CODE (original_call) == NEW_CLASS_EXPR)
      {
        tree class = DECL_CONTEXT (method);
!       tree c1, saved_new, size, new;
        tree alloc_node;
  
        if (flag_emit_class_files || flag_emit_xref)
--- 13957,13963 ----
    if (TREE_CODE (original_call) == NEW_CLASS_EXPR)
      {
        tree class = DECL_CONTEXT (method);
!       tree c1, saved_new, new;
        tree alloc_node;
  
        if (flag_emit_class_files || flag_emit_xref)
*************** patch_invoke (tree patch, tree method, t
*** 13774,13795 ****
  	}
        if (!TYPE_SIZE (class))
  	safe_layout_class (class);
-       size = size_in_bytes (class);
        alloc_node =
  	(class_has_finalize_method (class) ? alloc_object_node
  		  			   : alloc_no_finalizer_node);
!       new = build (CALL_EXPR, promote_type (class),
! 		   build_address_of (alloc_node),
! 		   tree_cons (NULL_TREE, build_class_ref (class),
! 			      build_tree_list (NULL_TREE,
! 					       size_in_bytes (class))),
! 		   NULL_TREE);
        saved_new = save_expr (new);
        c1 = build_tree_list (NULL_TREE, saved_new);
        TREE_CHAIN (c1) = TREE_OPERAND (original_call, 1);
        TREE_OPERAND (original_call, 1) = c1;
        TREE_SET_CODE (original_call, CALL_EXPR);
!       patch = build (COMPOUND_EXPR, TREE_TYPE (new), patch, saved_new);
      }
  
    /* If CHECK is set, then we are building a check to see if the object
--- 13967,13985 ----
  	}
        if (!TYPE_SIZE (class))
  	safe_layout_class (class);
        alloc_node =
  	(class_has_finalize_method (class) ? alloc_object_node
  		  			   : alloc_no_finalizer_node);
!       new = build3 (CALL_EXPR, promote_type (class),
! 		    build_address_of (alloc_node),
! 		    build_tree_list (NULL_TREE, build_class_ref (class)),
! 		    NULL_TREE);
        saved_new = save_expr (new);
        c1 = build_tree_list (NULL_TREE, saved_new);
        TREE_CHAIN (c1) = TREE_OPERAND (original_call, 1);
        TREE_OPERAND (original_call, 1) = c1;
        TREE_SET_CODE (original_call, CALL_EXPR);
!       patch = build2 (COMPOUND_EXPR, TREE_TYPE (new), patch, saved_new);
      }
  
    /* If CHECK is set, then we are building a check to see if the object
*************** patch_invoke (tree patch, tree method, t
*** 13799,13806 ****
        /* We have to call force_evaluation_order now because creating a
   	 COMPOUND_EXPR wraps the arg list in a way that makes it
   	 unrecognizable by force_evaluation_order later.  Yuk.  */
!       patch = build (COMPOUND_EXPR, TREE_TYPE (patch), check, 
!  		     force_evaluation_order (patch));
        TREE_SIDE_EFFECTS (patch) = 1;
      }
  
--- 13989,13996 ----
        /* We have to call force_evaluation_order now because creating a
   	 COMPOUND_EXPR wraps the arg list in a way that makes it
   	 unrecognizable by force_evaluation_order later.  Yuk.  */
!       patch = build2 (COMPOUND_EXPR, TREE_TYPE (patch), check, 
! 		      force_evaluation_order (patch));
        TREE_SIDE_EFFECTS (patch) = 1;
      }
  
*************** patch_invoke (tree patch, tree method, t
*** 13819,13834 ****
        /* We have to call force_evaluation_order now because creating a
  	 COMPOUND_EXPR wraps the arg list in a way that makes it
  	 unrecognizable by force_evaluation_order later.  Yuk.  */
!       tree save = save_expr (force_evaluation_order (patch));
        tree type = TREE_TYPE (patch);
  
!       patch = build (COMPOUND_EXPR, type, save, empty_stmt_node);
        list = tree_cons (method, patch,
  			DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl));
  
        DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl) = list;
  
!       patch = build (COMPOUND_EXPR, type, patch, save);
      }
  
    return patch;
--- 14009,14024 ----
        /* We have to call force_evaluation_order now because creating a
  	 COMPOUND_EXPR wraps the arg list in a way that makes it
  	 unrecognizable by force_evaluation_order later.  Yuk.  */
!       tree save = force_evaluation_order (patch);
        tree type = TREE_TYPE (patch);
  
!       patch = build2 (COMPOUND_EXPR, type, save, build_java_empty_stmt ());
        list = tree_cons (method, patch,
  			DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl));
  
        DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl) = list;
  
!       patch = build2 (COMPOUND_EXPR, type, patch, save);
      }
  
    return patch;
*************** invocation_mode (tree method, int super)
*** 13850,13860 ****
    if (DECL_CONSTRUCTOR_P (method))
      return INVOKE_STATIC;
  
!   if (access & ACC_FINAL || access & ACC_PRIVATE)
      return INVOKE_NONVIRTUAL;
  
!   if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method))))
!     return INVOKE_NONVIRTUAL;
  
    if (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))))
      return INVOKE_INTERFACE;
--- 14040,14059 ----
    if (DECL_CONSTRUCTOR_P (method))
      return INVOKE_STATIC;
  
!   if (access & ACC_PRIVATE)
      return INVOKE_NONVIRTUAL;
  
!   /* Binary compatibility: just because it's final today, that doesn't
!      mean it'll be final tomorrow.  */
!   if (! flag_indirect_dispatch  
!       || DECL_CONTEXT (method) == object_type_node)
!     {
!       if (access & ACC_FINAL)
! 	return INVOKE_NONVIRTUAL;
! 
!       if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method))))
! 	return INVOKE_NONVIRTUAL;
!     }
  
    if (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))))
      return INVOKE_INTERFACE;
*************** lookup_method_invoke (int lc, tree cl, t
*** 13892,13903 ****
  
    if (lc && ANONYMOUS_CLASS_P (class))
      {
-       tree saved_current_class;
        tree mdecl = craft_constructor (TYPE_NAME (class), atl);
!       saved_current_class = current_class;
!       current_class = class;
!       fix_constructors (mdecl);
!       current_class = saved_current_class;
      }
  
    /* Find all candidates and then refine the list, searching for the
--- 14091,14100 ----
  
    if (lc && ANONYMOUS_CLASS_P (class))
      {
        tree mdecl = craft_constructor (TYPE_NAME (class), atl);
!       /* The anonymous class may have already been laid out, so make sure
!          the new constructor is laid out here.  */
!       layout_class_method (class, CLASSTYPE_SUPER (class), mdecl, NULL_TREE);
      }
  
    /* Find all candidates and then refine the list, searching for the
*************** lookup_method_invoke (int lc, tree cl, t
*** 13922,13928 ****
  	  if (!cm || not_accessible_p (class, cm, NULL_TREE, 0))
  	    continue;
  	  sprintf
! 	    (string, "  `%s' in `%s'%s",
  	     get_printable_method_name (cm),
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (cm)))),
  	     (TREE_CHAIN (current) ? "\n" : ""));
--- 14119,14125 ----
  	  if (!cm || not_accessible_p (class, cm, NULL_TREE, 0))
  	    continue;
  	  sprintf
! 	    (string, "  '%s' in '%s'%s",
  	     get_printable_method_name (cm),
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (cm)))),
  	     (TREE_CHAIN (current) ? "\n" : ""));
*************** lookup_method_invoke (int lc, tree cl, t
*** 13936,13942 ****
    TYPE_ARG_TYPES (method) = atl;
    signature = build_java_argument_signature (method);
    dup = xstrdup (lang_printable_name (class, 0));
!   parse_error_context (cl, "Can't find %s `%s(%s)' in type `%s'%s",
  		       (lc ? "constructor" : "method"),
  		       (lc ? dup : IDENTIFIER_POINTER (name)),
  		       IDENTIFIER_POINTER (signature), dup,
--- 14133,14139 ----
    TYPE_ARG_TYPES (method) = atl;
    signature = build_java_argument_signature (method);
    dup = xstrdup (lang_printable_name (class, 0));
!   parse_error_context (cl, "Can't find %s %<%s(%s)%> in type %qs%s",
  		       (lc ? "constructor" : "method"),
  		       (lc ? dup : IDENTIFIER_POINTER (name)),
  		       IDENTIFIER_POINTER (signature), dup,
*************** find_applicable_accessible_methods_list 
*** 13955,13960 ****
--- 14152,14159 ----
    static htab_t searched_classes;
    static int search_not_done = 0;
    tree list = NULL_TREE, all_list = NULL_TREE;
+   tree base_binfo;
+   int i;
  
    /* Check the hash table to determine if this class has been searched
       already. */
*************** find_applicable_accessible_methods_list 
*** 13972,13978 ****
    search_not_done++;
    *htab_find_slot (searched_classes, class, INSERT) = class;
  
!   if (!CLASS_LOADED_P (class) && !CLASS_FROM_SOURCE_P (class))
      {
        load_class (class, 1);
        safe_layout_class (class);
--- 14171,14177 ----
    search_not_done++;
    *htab_find_slot (searched_classes, class, INSERT) = class;
  
!   if (!CLASS_LOADED_P (class))
      {
        load_class (class, 1);
        safe_layout_class (class);
*************** find_applicable_accessible_methods_list 
*** 13982,13997 ****
    if (TREE_CODE (TYPE_NAME (class)) == TYPE_DECL
        && CLASS_INTERFACE (TYPE_NAME (class)))
      {
-       int i, n;
-       tree basetype_vec = TYPE_BINFO_BASETYPES (class);
        search_applicable_methods_list (lc, TYPE_METHODS (class),
  				      name, arglist, &list, &all_list);
!       n = TREE_VEC_LENGTH (basetype_vec);
!       for (i = 1; i < n; i++)
  	{
! 	  tree t = BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i));
  	  tree rlist;
! 
  	  rlist = find_applicable_accessible_methods_list (lc,  t, name,
  							   arglist);
  	  list = chainon (rlist, list);
--- 14181,14193 ----
    if (TREE_CODE (TYPE_NAME (class)) == TYPE_DECL
        && CLASS_INTERFACE (TYPE_NAME (class)))
      {
        search_applicable_methods_list (lc, TYPE_METHODS (class),
  				      name, arglist, &list, &all_list);
!       for (i = 1; BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
  	{
! 	  tree t = BINFO_TYPE (base_binfo);
  	  tree rlist;
! 	  
  	  rlist = find_applicable_accessible_methods_list (lc,  t, name,
  							   arglist);
  	  list = chainon (rlist, list);
*************** find_applicable_accessible_methods_list 
*** 14015,14035 ****
  
        /* We must search all interfaces of this class */
        if (!lc)
!       {
! 	tree basetype_vec = TYPE_BINFO_BASETYPES (class);
! 	int n = TREE_VEC_LENGTH (basetype_vec), i;
! 	for (i = 1; i < n; i++)
! 	  {
! 	    tree t = BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i));
! 	    if (t != object_type_node)
! 	      {
! 		tree rlist
! 		  = find_applicable_accessible_methods_list (lc, t,
! 							     name, arglist);
! 		list = chainon (rlist, list);
! 	      }
! 	  }
!       }
  
        /* Search superclass */
        if (!lc && CLASSTYPE_SUPER (class) != NULL_TREE)
--- 14211,14230 ----
  
        /* We must search all interfaces of this class */
        if (!lc)
! 	{
! 	  for (i = 1;
! 	       BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
! 	    {
! 	      tree t = BINFO_TYPE (base_binfo);
! 	      if (t != object_type_node)
! 		{
! 		  tree rlist
! 		    = find_applicable_accessible_methods_list (lc, t,
! 							       name, arglist);
! 		  list = chainon (rlist, list);
! 		}
! 	    }
! 	}
  
        /* Search superclass */
        if (!lc && CLASSTYPE_SUPER (class) != NULL_TREE)
*************** qualify_ambiguous_name (tree id)
*** 14303,14362 ****
      RESOLVE_PACKAGE_NAME_P (id) = 1;
  }
  
- static int
- breakdown_qualified (tree *left, tree *right, tree source)
- {
-   char *p, *base;
-   int l = IDENTIFIER_LENGTH (source);
- 
-   base = alloca (l + 1);
-   memcpy (base, IDENTIFIER_POINTER (source), l + 1);
- 
-   /* Breakdown NAME into REMAINDER . IDENTIFIER.  */
-   p = base + l - 1;
-   while (*p != '.' && p != base)
-     p--;
- 
-   /* We didn't find a '.'. Return an error.  */
-   if (p == base)
-     return 1;
- 
-   *p = '\0';
-   if (right)
-     *right = get_identifier (p+1);
-   *left = get_identifier (base);
- 
-   return 0;
- }
- 
- /* Return TRUE if two classes are from the same package. */
- 
- static int
- in_same_package (tree name1, tree name2)
- {
-   tree tmp;
-   tree pkg1;
-   tree pkg2;
- 
-   if (TREE_CODE (name1) == TYPE_DECL)
-     name1 = DECL_NAME (name1);
-   if (TREE_CODE (name2) == TYPE_DECL)
-     name2 = DECL_NAME (name2);
- 
-   if (QUALIFIED_P (name1) != QUALIFIED_P (name2))
-     /* One in empty package. */
-     return 0;
- 
-   if (QUALIFIED_P (name1) == 0 && QUALIFIED_P (name2) == 0)
-     /* Both in empty package. */
-     return 1;
- 
-   breakdown_qualified (&pkg1, &tmp, name1);
-   breakdown_qualified (&pkg2, &tmp, name2);
- 
-   return (pkg1 == pkg2);
- }
- 
  /* Patch tree nodes in a function body. When a BLOCK is found, push
     local variable decls if present.
     Same as java_complete_lhs, but does resolve static finals to values. */
--- 14498,14503 ----
*************** java_complete_lhs (tree node)
*** 14451,14462 ****
               long blocks. */
  	  ptr = &BLOCK_EXPR_BODY (node);
  	  while (TREE_CODE (*ptr) == COMPOUND_EXPR
! 		 && TREE_OPERAND (*ptr, 1) != empty_stmt_node)
  	    {
  	      tree cur = java_complete_tree (TREE_OPERAND (*ptr, 0));
  	      tree *next = &TREE_OPERAND (*ptr, 1);
  	      TREE_OPERAND (*ptr, 0) = cur;
! 	      if (cur == empty_stmt_node)
  		{
  		  /* Optimization;  makes it easier to detect empty bodies.
  		     Most useful for <clinit> with all-constant initializer. */
--- 14592,14603 ----
               long blocks. */
  	  ptr = &BLOCK_EXPR_BODY (node);
  	  while (TREE_CODE (*ptr) == COMPOUND_EXPR
! 		 && !IS_EMPTY_STMT (TREE_OPERAND (*ptr, 1)))
  	    {
  	      tree cur = java_complete_tree (TREE_OPERAND (*ptr, 0));
  	      tree *next = &TREE_OPERAND (*ptr, 1);
  	      TREE_OPERAND (*ptr, 0) = cur;
! 	      if (IS_EMPTY_STMT (cur))
  		{
  		  /* Optimization;  makes it easier to detect empty bodies.
  		     Most useful for <clinit> with all-constant initializer. */
*************** java_complete_lhs (tree node)
*** 14517,14529 ****
      case TRY_FINALLY_EXPR:
        COMPLETE_CHECK_OP_0 (node);
        COMPLETE_CHECK_OP_1 (node);
!       /* Reduce try/finally nodes with an empty try block.  */
!       if (TREE_OPERAND (node, 0) == empty_stmt_node
! 	  || BLOCK_EMPTY_P (TREE_OPERAND (node, 0)))
  	return TREE_OPERAND (node, 1);
!       /* Likewise for an empty finally block.  */
!       if (TREE_OPERAND (node, 1) == empty_stmt_node
! 	  || BLOCK_EMPTY_P (TREE_OPERAND (node, 1)))
  	return TREE_OPERAND (node, 0);
        CAN_COMPLETE_NORMALLY (node)
  	= (CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0))
--- 14658,14668 ----
      case TRY_FINALLY_EXPR:
        COMPLETE_CHECK_OP_0 (node);
        COMPLETE_CHECK_OP_1 (node);
!       if (IS_EMPTY_STMT (TREE_OPERAND (node, 0)))
! 	/* Reduce try/finally nodes with an empty try block.  */
  	return TREE_OPERAND (node, 1);
!       if (IS_EMPTY_STMT (TREE_OPERAND (node, 1)))
! 	/* Likewise for an empty finally block.  */
  	return TREE_OPERAND (node, 0);
        CAN_COMPLETE_NORMALLY (node)
  	= (CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0))
*************** java_complete_lhs (tree node)
*** 14538,14544 ****
        TREE_TYPE (node) = void_type_node;
        POP_LABELED_BLOCK ();
  
!       if (LABELED_BLOCK_BODY (node) == empty_stmt_node)
  	{
  	  LABELED_BLOCK_BODY (node) = NULL_TREE;
  	  CAN_COMPLETE_NORMALLY (node) = 1;
--- 14677,14683 ----
        TREE_TYPE (node) = void_type_node;
        POP_LABELED_BLOCK ();
  
!       if (IS_EMPTY_STMT (LABELED_BLOCK_BODY (node)))
  	{
  	  LABELED_BLOCK_BODY (node) = NULL_TREE;
  	  CAN_COMPLETE_NORMALLY (node) = 1;
*************** java_complete_lhs (tree node)
*** 14548,14555 ****
        return node;
  
      case EXIT_BLOCK_EXPR:
-       /* We don't complete operand 1, because it's the return value of
-          the EXIT_BLOCK_EXPR which doesn't exist it Java */
        return patch_bc_statement (node);
  
      case CASE_EXPR:
--- 14687,14692 ----
*************** java_complete_lhs (tree node)
*** 14569,14575 ****
  				       TREE_OPERAND (cn, 1));
  	}
        /* Accept final locals too. */
!       else if (TREE_CODE (cn) == VAR_DECL && DECL_FINAL (cn))
  	cn = fold_constant_for_init (DECL_INITIAL (cn), cn);
  
        if (!TREE_CONSTANT (cn) && !flag_emit_xref)
--- 14706,14713 ----
  				       TREE_OPERAND (cn, 1));
  	}
        /* Accept final locals too. */
!       else if (TREE_CODE (cn) == VAR_DECL && DECL_FINAL (cn) 
! 	       && DECL_INITIAL (cn))
  	cn = fold_constant_for_init (DECL_INITIAL (cn), cn);
  
        if (!TREE_CONSTANT (cn) && !flag_emit_xref)
*************** java_complete_lhs (tree node)
*** 14588,14594 ****
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context
  	    (wfl_operator,
! 	     "Incompatible type for case. Can't convert `%s' to `int'",
  	     lang_printable_name (TREE_TYPE (cn), 0));
  	  return error_mark_node;
  	}
--- 14726,14732 ----
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context
  	    (wfl_operator,
! 	     "Incompatible type for case. Can't convert %qs to %<int%>",
  	     lang_printable_name (TREE_TYPE (cn), 0));
  	  return error_mark_node;
  	}
*************** java_complete_lhs (tree node)
*** 14616,14624 ****
        /* Only one default label is allowed per switch statement */
        if (SWITCH_HAS_DEFAULT (nn))
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (wfl_operator,
! 			       "Duplicate case label: `default'");
  	  return error_mark_node;
  	}
        else
--- 14754,14766 ----
        /* Only one default label is allowed per switch statement */
        if (SWITCH_HAS_DEFAULT (nn))
  	{
+ #ifdef USE_MAPPED_LOCATION
+ 	  SET_EXPR_LOCATION (wfl_operator, EXPR_LOCATION (node));
+ #else
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
+ #endif
  	  parse_error_context (wfl_operator,
! 			       "Duplicate case label: %<default%>");
  	  return error_mark_node;
  	}
        else
*************** java_complete_lhs (tree node)
*** 14673,14679 ****
        TREE_OPERAND (node, 1) = java_complete_tree (TREE_OPERAND (node, 1));
        if (TREE_OPERAND (node, 1) == error_mark_node)
  	return error_mark_node;
!       TREE_OPERAND (node, 2) = java_complete_tree (TREE_OPERAND (node, 2));
        if (TREE_OPERAND (node, 2) == error_mark_node)
  	return error_mark_node;
        return patch_if_else_statement (node);
--- 14815,14830 ----
        TREE_OPERAND (node, 1) = java_complete_tree (TREE_OPERAND (node, 1));
        if (TREE_OPERAND (node, 1) == error_mark_node)
  	return error_mark_node;
!       {
! 	/* This is a special case due to build_assertion().  When
! 	   assertions are disabled we build a COND_EXPR in which
! 	   Operand 1 is the body of the assertion.  If that happens to
! 	   be a string concatenation we'll need to patch it here.  */
! 	tree patched = patch_string (TREE_OPERAND (node, 1));
! 	if (patched)
! 	  TREE_OPERAND (node, 1) = patched;
!       }
!      TREE_OPERAND (node, 2) = java_complete_tree (TREE_OPERAND (node, 2));
        if (TREE_OPERAND (node, 2) == error_mark_node)
  	return error_mark_node;
        return patch_if_else_statement (node);
*************** java_complete_lhs (tree node)
*** 14694,14700 ****
        wfl_op2 = TREE_OPERAND (node, 1);
        TREE_OPERAND (node, 0) = nn =
  	java_complete_tree (TREE_OPERAND (node, 0));
!       if (wfl_op2 == empty_stmt_node)
  	CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (nn);
        else
  	{
--- 14845,14851 ----
        wfl_op2 = TREE_OPERAND (node, 1);
        TREE_OPERAND (node, 0) = nn =
  	java_complete_tree (TREE_OPERAND (node, 0));
!       if (IS_EMPTY_STMT (wfl_op2))
  	CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (nn);
        else
  	{
*************** java_complete_lhs (tree node)
*** 14760,14773 ****
        else
  	{
  	  tree body;
! 	  int save_lineno = input_line;
  	  input_line = EXPR_WFL_LINENO (node);
  	  body = java_complete_tree (EXPR_WFL_NODE (node));
! 	  input_line = save_lineno;
  	  EXPR_WFL_NODE (node) = body;
  	  TREE_SIDE_EFFECTS (node) = TREE_SIDE_EFFECTS (body);
  	  CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (body);
! 	  if (body == empty_stmt_node || TREE_CONSTANT (body))
  	    {
  	      /* Makes it easier to constant fold, detect empty bodies. */
  	      return body;
--- 14911,14930 ----
        else
  	{
  	  tree body;
! 	  location_t save_location = input_location;
! #ifdef USE_MAPPED_LOCATION
! 	  input_location = EXPR_LOCATION (node);
! 	  if (input_location == UNKNOWN_LOCATION)
! 	    input_location = save_location;
! #else
  	  input_line = EXPR_WFL_LINENO (node);
+ #endif
  	  body = java_complete_tree (EXPR_WFL_NODE (node));
! 	  input_location = save_location;
  	  EXPR_WFL_NODE (node) = body;
  	  TREE_SIDE_EFFECTS (node) = TREE_SIDE_EFFECTS (body);
  	  CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (body);
! 	  if (IS_EMPTY_STMT (body) || TREE_CONSTANT (body))
  	    {
  	      /* Makes it easier to constant fold, detect empty bodies. */
  	      return body;
*************** java_complete_lhs (tree node)
*** 14803,14811 ****
--- 14960,14972 ----
  	      TREE_VALUE (cn) = dim;
  	      /* Setup the location of the current dimension, for
  		 later error report. */
+ #ifdef USE_MAPPED_LOCATION
+ 	      TREE_PURPOSE (cn) = expr_add_location (NULL_TREE, location, 0);
+ #else
  	      TREE_PURPOSE (cn) =
  		build_expr_wfl (NULL_TREE, input_filename, 0, 0);
  	      EXPR_WFL_LINECOL (TREE_PURPOSE (cn)) = location;
+ #endif
  	    }
  	}
        /* They complete the array creation expression, if no errors
*************** java_complete_lhs (tree node)
*** 14844,14850 ****
--- 15005,15015 ----
  	  int from_super = (EXPR_WFL_NODE (TREE_OPERAND (node, 0)) ==
                             super_identifier_node);
  	  tree arguments;
+ #ifdef USE_MAPPED_LOCATION
+ 	  source_location location = EXPR_LOCATION (node);
+ #else
  	  int location = EXPR_WFL_LINECOL (node);
+ #endif
  
  	  node = patch_method_invocation (node, NULL_TREE, NULL_TREE,
  					  from_super, 0, &decl);
*************** java_complete_lhs (tree node)
*** 14903,14909 ****
  		  else
  		    DECL_INITIAL (nn) = TREE_OPERAND (node, 1);
  		  DECL_FIELD_FINAL_IUD (nn) = 1;
! 		  return empty_stmt_node;
  		}
  	    }
  	  if (! flag_emit_class_files)
--- 15068,15074 ----
  		  else
  		    DECL_INITIAL (nn) = TREE_OPERAND (node, 1);
  		  DECL_FIELD_FINAL_IUD (nn) = 1;
! 		  return build_java_empty_stmt ();
  		}
  	    }
  	  if (! flag_emit_class_files)
*************** java_complete_lhs (tree node)
*** 14943,14949 ****
  	  if (JREFERENCE_TYPE_P (TREE_TYPE (lvalue))
  	      && ! JSTRING_TYPE_P (TREE_TYPE (lvalue)))
  	    parse_error_context (wfl_op2,
! 				 "Incompatible type for `+='. Can't convert `%s' to `java.lang.String'",
  				 lang_printable_name (TREE_TYPE (lvalue), 0));
  
  	  /* 15.25.2.b: Left hand is an array access. FIXME */
--- 15108,15114 ----
  	  if (JREFERENCE_TYPE_P (TREE_TYPE (lvalue))
  	      && ! JSTRING_TYPE_P (TREE_TYPE (lvalue)))
  	    parse_error_context (wfl_op2,
! 				 "Incompatible type for %<+=%>. Can't convert %qs to %<java.lang.String%>",
  				 lang_printable_name (TREE_TYPE (lvalue), 0));
  
  	  /* 15.25.2.b: Left hand is an array access. FIXME */
*************** java_complete_lhs (tree node)
*** 15114,15125 ****
  	  tree field = lookup_field_wrapper (TREE_OPERAND (node, 0), name);
  	  if (field == NULL_TREE)
  	    {
! 	      error ("missing static field `%s'", IDENTIFIER_POINTER (name));
  	      return error_mark_node;
  	    }
  	  if (! FIELD_STATIC (field))
  	    {
! 	      error ("not a static field `%s'", IDENTIFIER_POINTER (name));
  	      return error_mark_node;
  	    }
  	  return field;
--- 15279,15290 ----
  	  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;
*************** java_complete_lhs (tree node)
*** 15134,15140 ****
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (wfl_operator,
! 			       "Keyword `this' used outside allowed context");
  	  TREE_TYPE (node) = error_mark_node;
  	  return error_mark_node;
  	}
--- 15299,15305 ----
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (wfl_operator,
! 			       "Keyword %<this%> used outside allowed context");
  	  TREE_TYPE (node) = error_mark_node;
  	  return error_mark_node;
  	}
*************** java_complete_lhs (tree node)
*** 15142,15148 ****
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context
! 	    (wfl_operator, "Can't reference `this' or `super' before the superclass constructor has been called");
  	  TREE_TYPE (node) = error_mark_node;
  	  return error_mark_node;
  	}
--- 15307,15313 ----
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context
! 	    (wfl_operator, "Can't reference %<this%> or %<super%> before the superclass constructor has been called");
  	  TREE_TYPE (node) = error_mark_node;
  	  return error_mark_node;
  	}
*************** complete_function_arguments (tree node)
*** 15187,15194 ****
  	  flag = 1;
  	  continue;
  	}
!       /* If have a string literal that we haven't transformed yet or a
! 	 crafted string buffer, as a result of use of the the String
  	 `+' operator. Build `parm.toString()' and expand it. */
        if ((temp = patch_string (parm)))
  	parm = temp;
--- 15352,15359 ----
  	  flag = 1;
  	  continue;
  	}
!       /* If we have a string literal that we haven't transformed yet or a
! 	 crafted string buffer, as a result of the use of the String
  	 `+' operator. Build `parm.toString()' and expand it. */
        if ((temp = patch_string (parm)))
  	parm = temp;
*************** build_debugable_stmt (int location, tree
*** 15208,15223 ****
  {
    if (TREE_CODE (stmt) != EXPR_WITH_FILE_LOCATION)
      {
        stmt = build_expr_wfl (stmt, input_filename, 0, 0);
        EXPR_WFL_LINECOL (stmt) = location;
      }
-   JAVA_MAYBE_GENERATE_DEBUG_INFO (stmt);
    return stmt;
  }
  
  static tree
  build_expr_block (tree body, tree decls)
- 
  {
    tree node = make_node (BLOCK);
    BLOCK_EXPR_DECLS (node) = decls;
--- 15373,15391 ----
  {
    if (TREE_CODE (stmt) != EXPR_WITH_FILE_LOCATION)
      {
+ #ifdef USE_MAPPED_LOCATION
+       stmt = expr_add_location (stmt, location, 1);
+ #else
        stmt = build_expr_wfl (stmt, input_filename, 0, 0);
        EXPR_WFL_LINECOL (stmt) = location;
+       JAVA_MAYBE_GENERATE_DEBUG_INFO (stmt);
+ #endif
      }
    return stmt;
  }
  
  static tree
  build_expr_block (tree body, tree decls)
  {
    tree node = make_node (BLOCK);
    BLOCK_EXPR_DECLS (node) = decls;
*************** build_wfl_wrap (tree node, int location)
*** 15340,15364 ****
    if (TREE_CODE (node) == THIS_EXPR)
      node_to_insert = wfl = build_wfl_node (this_identifier_node);
    else
      wfl = build_expr_wfl (NULL_TREE, ctxp->filename, 0, 0);
  
    EXPR_WFL_LINECOL (wfl) = location;
    EXPR_WFL_QUALIFICATION (wfl) = build_tree_list (node_to_insert, NULL_TREE);
    return wfl;
  }
  
! /* Build a super() constructor invocation. Returns empty_stmt_node if
     we're currently dealing with the class java.lang.Object. */
  
  static tree
  build_super_invocation (tree mdecl)
  {
    if (DECL_CONTEXT (mdecl) == object_type_node)
!     return empty_stmt_node;
    else
      {
        tree super_wfl = build_wfl_node (super_identifier_node);
        tree a = NULL_TREE, t;
        /* If we're dealing with an anonymous class, pass the arguments
           of the crafted constructor along. */
        if (ANONYMOUS_CLASS_P (DECL_CONTEXT (mdecl)))
--- 15508,15544 ----
    if (TREE_CODE (node) == THIS_EXPR)
      node_to_insert = wfl = build_wfl_node (this_identifier_node);
    else
+ #ifdef USE_MAPPED_LOCATION
+     wfl = build_unknown_wfl (NULL_TREE);
+ 
+   SET_EXPR_LOCATION (wfl, location);
+ #else
      wfl = build_expr_wfl (NULL_TREE, ctxp->filename, 0, 0);
  
    EXPR_WFL_LINECOL (wfl) = location;
+ #endif
    EXPR_WFL_QUALIFICATION (wfl) = build_tree_list (node_to_insert, NULL_TREE);
    return wfl;
  }
  
! /* Build a super() constructor invocation. Returns an empty statement if
     we're currently dealing with the class java.lang.Object. */
  
  static tree
  build_super_invocation (tree mdecl)
  {
    if (DECL_CONTEXT (mdecl) == object_type_node)
!     return build_java_empty_stmt ();
    else
      {
        tree super_wfl = build_wfl_node (super_identifier_node);
        tree a = NULL_TREE, t;
+ 
+       /* This is called after parsing is done, so the parser context
+          won't be accurate. Set location info from current_class decl. */
+       tree class_wfl = lookup_cl (TYPE_NAME (current_class));
+       EXPR_WFL_LINECOL (super_wfl) = EXPR_WFL_LINECOL (class_wfl);
+ 
        /* If we're dealing with an anonymous class, pass the arguments
           of the crafted constructor along. */
        if (ANONYMOUS_CLASS_P (DECL_CONTEXT (mdecl)))
*************** build_this_super_qualified_invocation (i
*** 15390,15396 ****
  static tree
  build_method_invocation (tree name, tree args)
  {
!   tree call = build (CALL_EXPR, NULL_TREE, name, args, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    EXPR_WFL_LINECOL (call) = EXPR_WFL_LINECOL (name);
    return call;
--- 15570,15576 ----
  static tree
  build_method_invocation (tree name, tree args)
  {
!   tree call = build3 (CALL_EXPR, NULL_TREE, name, args, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    EXPR_WFL_LINECOL (call) = EXPR_WFL_LINECOL (name);
    return call;
*************** build_method_invocation (tree name, tree
*** 15401,15407 ****
  static tree
  build_new_invocation (tree name, tree args)
  {
!   tree call = build (NEW_CLASS_EXPR, NULL_TREE, name, args, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    EXPR_WFL_LINECOL (call) = EXPR_WFL_LINECOL (name);
    return call;
--- 15581,15587 ----
  static tree
  build_new_invocation (tree name, tree args)
  {
!   tree call = build3 (NEW_CLASS_EXPR, NULL_TREE, name, args, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    EXPR_WFL_LINECOL (call) = EXPR_WFL_LINECOL (name);
    return call;
*************** build_assignment (int op, int op_locatio
*** 15421,15427 ****
        rhs = build_binop (BINOP_LOOKUP (op), op_location, lhs, rhs);
        COMPOUND_ASSIGN_P (rhs) = 1;
      }
!   assignment = build (MODIFY_EXPR, NULL_TREE, lhs, rhs);
    TREE_SIDE_EFFECTS (assignment) = 1;
    EXPR_WFL_LINECOL (assignment) = op_location;
    return assignment;
--- 15601,15607 ----
        rhs = build_binop (BINOP_LOOKUP (op), op_location, lhs, rhs);
        COMPOUND_ASSIGN_P (rhs) = 1;
      }
!   assignment = build2 (MODIFY_EXPR, NULL_TREE, lhs, rhs);
    TREE_SIDE_EFFECTS (assignment) = 1;
    EXPR_WFL_LINECOL (assignment) = op_location;
    return assignment;
*************** patch_assignment (tree node, tree wfl_op
*** 15587,15594 ****
    new_rhs = try_builtin_assignconv (wfl_op1, lhs_type, rhs);
  
    /* 5.2 If it failed, try a reference conversion */
!   if (!new_rhs && (new_rhs = try_reference_assignconv (lhs_type, rhs)))
!     lhs_type = promote_type (rhs_type);
  
    /* 15.25.2 If we have a compound assignment, convert RHS into the
       type of the LHS */
--- 15767,15774 ----
    new_rhs = try_builtin_assignconv (wfl_op1, lhs_type, rhs);
  
    /* 5.2 If it failed, try a reference conversion */
!   if (!new_rhs)
!     new_rhs = try_reference_assignconv (lhs_type, rhs);
  
    /* 15.25.2 If we have a compound assignment, convert RHS into the
       type of the LHS */
*************** patch_assignment (tree node, tree wfl_op
*** 15621,15637 ****
  	  if (COMPOUND_ASSIGN_P (TREE_OPERAND (node, 1)))
  	    strcpy (operation, "assignment");
  	  else if (is_return)
! 	    strcpy (operation, "`return'");
  	  else
! 	    strcpy (operation, "`='");
  	}
  
        if (!valid_cast_to_p (rhs_type, lhs_type))
  	parse_error_context
! 	  (wfl, "Incompatible type for %s. Can't convert `%s' to `%s'",
  	   operation, t1, t2);
        else
! 	parse_error_context (wfl, "Incompatible type for %s. Explicit cast needed to convert `%s' to `%s'",
  			     operation, t1, t2);
        free (t1); free (t2);
        error_found = 1;
--- 15801,15817 ----
  	  if (COMPOUND_ASSIGN_P (TREE_OPERAND (node, 1)))
  	    strcpy (operation, "assignment");
  	  else if (is_return)
! 	    strcpy (operation, "'return'");
  	  else
! 	    strcpy (operation, "'='");
  	}
  
        if (!valid_cast_to_p (rhs_type, lhs_type))
  	parse_error_context
! 	  (wfl, "Incompatible type for %s. Can't convert %qs to %qs",
  	   operation, t1, t2);
        else
! 	parse_error_context (wfl, "Incompatible type for %s. Explicit cast needed to convert %qs to %qs",
  			     operation, t1, t2);
        free (t1); free (t2);
        error_found = 1;
*************** patch_assignment (tree node, tree wfl_op
*** 15675,15682 ****
          base = lvalue;
  
        index_expr = TREE_OPERAND (base, 1);
!       TREE_OPERAND (base, 1) = build (COMPOUND_EXPR, TREE_TYPE (index_expr),
! 	  			      store_check, index_expr);
      }
  
    /* Final locals can be used as case values in switch
--- 15855,15862 ----
          base = lvalue;
  
        index_expr = TREE_OPERAND (base, 1);
!       TREE_OPERAND (base, 1) = build2 (COMPOUND_EXPR, TREE_TYPE (index_expr),
! 				       store_check, index_expr);
      }
  
    /* Final locals can be used as case values in switch
*************** patch_assignment (tree node, tree wfl_op
*** 15689,15694 ****
--- 15869,15875 ----
        )
      {
        TREE_CONSTANT (lvalue) = 1;
+       TREE_INVARIANT (lvalue) = 1;
        DECL_INITIAL (lvalue) = new_rhs;
      }
  
*************** patch_assignment (tree node, tree wfl_op
*** 15701,15707 ****
  	case INDIRECT_REF:
  	case COMPONENT_REF:
  	  /* Transform a = foo.bar 
! 	     into a = { int tmp; tmp = foo.bar; tmp; ).   	     
  	     We need to ensure that if a read from memory fails
  	     because of a NullPointerException, a destination variable
  	     will remain unchanged.  An explicit temporary does what
--- 15882,15888 ----
  	case INDIRECT_REF:
  	case COMPONENT_REF:
  	  /* Transform a = foo.bar 
! 	     into a = ({int tmp; tmp = foo.bar;}).
  	     We need to ensure that if a read from memory fails
  	     because of a NullPointerException, a destination variable
  	     will remain unchanged.  An explicit temporary does what
*************** patch_assignment (tree node, tree wfl_op
*** 15716,15727 ****
  				   TREE_TYPE (new_rhs));
  	    tree block = make_node (BLOCK);
  	    tree assignment 
! 	      = build (MODIFY_EXPR, TREE_TYPE (new_rhs), tmp, fold (new_rhs));
  	    DECL_CONTEXT (tmp) = current_function_decl;
  	    TREE_TYPE (block) = TREE_TYPE (new_rhs);
  	    BLOCK_VARS (block) = tmp;
! 	    BLOCK_EXPR_BODY (block) 
! 	      = build (COMPOUND_EXPR, TREE_TYPE (new_rhs), assignment, tmp);
  	    TREE_SIDE_EFFECTS (block) = 1;
  	    new_rhs = block;
  	  }
--- 15897,15907 ----
  				   TREE_TYPE (new_rhs));
  	    tree block = make_node (BLOCK);
  	    tree assignment 
! 	      = build2 (MODIFY_EXPR, TREE_TYPE (new_rhs), tmp, fold (new_rhs));
  	    DECL_CONTEXT (tmp) = current_function_decl;
  	    TREE_TYPE (block) = TREE_TYPE (new_rhs);
  	    BLOCK_VARS (block) = tmp;
! 	    BLOCK_EXPR_BODY (block) = assignment;
  	    TREE_SIDE_EFFECTS (block) = 1;
  	    new_rhs = block;
  	  }
*************** try_builtin_assignconv (tree wfl_op1, tr
*** 15803,15809 ****
          new_rhs = convert (lhs_type, rhs);
        else if (wfl_op1)		/* Might be called with a NULL */
  	parse_warning_context
! 	  (wfl_op1, "Constant expression `%s' too wide for narrowing primitive conversion to `%s'",
  	   print_int_node (rhs), lang_printable_name (lhs_type, 0));
        /* Reported a warning that will turn into an error further
  	 down, so we don't return */
--- 15983,15990 ----
          new_rhs = convert (lhs_type, rhs);
        else if (wfl_op1)		/* Might be called with a NULL */
  	parse_warning_context
! 	  (wfl_op1,
!            "Constant expression %qs too wide for narrowing primitive conversion to %qs",
  	   print_int_node (rhs), lang_printable_name (lhs_type, 0));
        /* Reported a warning that will turn into an error further
  	 down, so we don't return */
*************** valid_method_invocation_conversion_p (tr
*** 16040,16046 ****
  static tree
  build_binop (enum tree_code op, int op_location, tree op1, tree op2)
  {
!   tree binop = build (op, NULL_TREE, op1, op2);
    TREE_SIDE_EFFECTS (binop) = 1;
    /* Store the location of the operator, for better error report. The
       string of the operator will be rebuild based on the OP value. */
--- 16221,16227 ----
  static tree
  build_binop (enum tree_code op, int op_location, tree op1, tree op2)
  {
!   tree binop = build2 (op, NULL_TREE, op1, op2);
    TREE_SIDE_EFFECTS (binop) = 1;
    /* Store the location of the operator, for better error report. The
       string of the operator will be rebuild based on the OP value. */
*************** patch_binop (tree node, tree wfl_op1, tr
*** 16241,16248 ****
  	      (TREE_CODE (op2) == INTEGER_CST &&
  	       ! TREE_INT_CST_LOW (op2)  && ! TREE_INT_CST_HIGH (op2))))
  	{
! 	  parse_warning_context (wfl_operator, "Evaluating this expression will result in an arithmetic exception being thrown");
  	  TREE_CONSTANT (node) = 0;
  	}
  
        /* Change the division operator if necessary */
--- 16422,16432 ----
  	      (TREE_CODE (op2) == INTEGER_CST &&
  	       ! TREE_INT_CST_LOW (op2)  && ! TREE_INT_CST_HIGH (op2))))
  	{
! 	  parse_warning_context
!             (wfl_operator,
!              "Evaluating this expression will result in an arithmetic exception being thrown");
  	  TREE_CONSTANT (node) = 0;
+ 	  TREE_INVARIANT (node) = 0;
  	}
  
        /* Change the division operator if necessary */
*************** patch_binop (tree node, tree wfl_op1, tr
*** 16275,16282 ****
  	{
  	  tree mod = build_java_binop (TRUNC_MOD_EXPR, prom_type, op1, op2);
  	  COMPOUND_ASSIGN_P (mod) = COMPOUND_ASSIGN_P (node);
- 	  TREE_SIDE_EFFECTS (mod)
- 	    = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2);
  	  return mod;
  	}
        break;
--- 16459,16464 ----
*************** patch_binop (tree node, tree wfl_op1, tr
*** 16324,16335 ****
  	    {
  	      if (JNUMERIC_TYPE_P (op2_type))
  		parse_error_context (wfl_operator,
! 				     "Incompatible type for `%s'. Explicit cast needed to convert shift distance from `%s' to integral",
  				     operator_string (node),
  				     lang_printable_name (op2_type, 0));
  	      else
  		parse_error_context (wfl_operator,
! 				     "Incompatible type for `%s'. Can't convert shift distance from `%s' to integral",
  				     operator_string (node),
  				     lang_printable_name (op2_type, 0));
  	    }
--- 16506,16517 ----
  	    {
  	      if (JNUMERIC_TYPE_P (op2_type))
  		parse_error_context (wfl_operator,
! 				     "Incompatible type for %qs. Explicit cast needed to convert shift distance from %qs to integral",
  				     operator_string (node),
  				     lang_printable_name (op2_type, 0));
  	      else
  		parse_error_context (wfl_operator,
! 				     "Incompatible type for %qs. Can't convert shift distance from %qs to integral",
  				     operator_string (node),
  				     lang_printable_name (op2_type, 0));
  	    }
*************** patch_binop (tree node, tree wfl_op1, tr
*** 16354,16364 ****
  
        /* Shift int only up to 0x1f and long up to 0x3f */
        if (prom_type == int_type_node)
! 	op2 = fold (build (BIT_AND_EXPR, int_type_node, op2,
! 			   build_int_2 (0x1f, 0)));
        else
! 	op2 = fold (build (BIT_AND_EXPR, int_type_node, op2,
! 			   build_int_2 (0x3f, 0)));
  
        /* The >>> operator is a >> operating on unsigned quantities */
        if (code == URSHIFT_EXPR && ! flag_emit_class_files)
--- 16536,16546 ----
  
        /* 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)
*************** patch_binop (tree node, tree wfl_op1, tr
*** 16405,16411 ****
  	{
  	  SET_WFL_OPERATOR (wfl_operator, node, wfl_op2);
  	  parse_error_context
! 	    (wfl_operator, "Invalid argument `%s' for `instanceof'",
  	     lang_printable_name (op2_type, 0));
  	  error_found = 1;
  	}
--- 16587,16593 ----
  	{
  	  SET_WFL_OPERATOR (wfl_operator, node, wfl_op2);
  	  parse_error_context
! 	    (wfl_operator, "Invalid argument %qs for %<instanceof%>",
  	     lang_printable_name (op2_type, 0));
  	  error_found = 1;
  	}
*************** patch_binop (tree node, tree wfl_op1, tr
*** 16432,16438 ****
  	  char *t1 = xstrdup (lang_printable_name (op1_type, 0));
  	  SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
  	  parse_error_context
! 	    (wfl_operator, "Impossible for `%s' to be instance of `%s'",
  	     t1, lang_printable_name (op2_type, 0));
  	  free (t1);
  	  error_found = 1;
--- 16614,16620 ----
  	  char *t1 = xstrdup (lang_printable_name (op1_type, 0));
  	  SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
  	  parse_error_context
! 	    (wfl_operator, "Impossible for %qs to be instance of %qs",
  	     t1, lang_printable_name (op2_type, 0));
  	  free (t1);
  	  error_found = 1;
*************** patch_binop (tree node, tree wfl_op1, tr
*** 16546,16552 ****
        /* Types have to be either references or the null type. If
           they're references, it must be possible to convert either
           type to the other by casting conversion. */
!       else if (op1 == null_pointer_node || op2 == null_pointer_node
  	       || (JREFERENCE_TYPE_P (op1_type) && JREFERENCE_TYPE_P (op2_type)
  		   && (valid_ref_assignconv_cast_p (op1_type, op2_type, 1)
  		       || valid_ref_assignconv_cast_p (op2_type,
--- 16728,16736 ----
        /* Types have to be either references or the null type. If
           they're references, it must be possible to convert either
           type to the other by casting conversion. */
!       else if ((op1 == null_pointer_node && op2 == null_pointer_node)
!                || (op1 == null_pointer_node && JREFERENCE_TYPE_P (op2_type))
!                || (JREFERENCE_TYPE_P (op1_type) && op2 == null_pointer_node)
  	       || (JREFERENCE_TYPE_P (op1_type) && JREFERENCE_TYPE_P (op2_type)
  		   && (valid_ref_assignconv_cast_p (op1_type, op2_type, 1)
  		       || valid_ref_assignconv_cast_p (op2_type,
*************** patch_binop (tree node, tree wfl_op1, tr
*** 16561,16567 ****
  	  t1 = xstrdup (lang_printable_name (op1_type, 0));
  	  parse_error_context
  	    (wfl_operator,
! 	     "Incompatible type for `%s'. Can't convert `%s' to `%s'",
  	     operator_string (node), t1,
  	     lang_printable_name (op2_type, 0));
  	  free (t1);
--- 16745,16751 ----
  	  t1 = xstrdup (lang_printable_name (op1_type, 0));
  	  parse_error_context
  	    (wfl_operator,
! 	     "Incompatible type for %qs. Can't convert %qs to %qs",
  	     operator_string (node), t1,
  	     lang_printable_name (op2_type, 0));
  	  free (t1);
*************** build_string_concatenation (tree op1, tr
*** 16731,16737 ****
    int side_effects = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2);
  
    if (flag_emit_xref)
!     return build (PLUS_EXPR, string_type_node, op1, op2);
  
    /* Try to do some static optimization */
    if ((result = string_constant_concatenation (op1, op2)))
--- 16915,16921 ----
    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)))
*************** build_string_concatenation (tree op1, tr
*** 16778,16785 ****
        /* OP1 is no longer the last node holding a crafted StringBuffer */
        IS_CRAFTED_STRING_BUFFER_P (op1) = 0;
        /* Create a node for `{new...,xxx}.append (op2)' */
!       if (op2)
! 	op1 = make_qualified_primary (op1, BUILD_APPEND (op2), 0);
      }
  
    /* Mark the last node holding a crafted StringBuffer */
--- 16962,16968 ----
        /* OP1 is no longer the last node holding a crafted StringBuffer */
        IS_CRAFTED_STRING_BUFFER_P (op1) = 0;
        /* Create a node for `{new...,xxx}.append (op2)' */
!       op1 = make_qualified_primary (op1, BUILD_APPEND (op2), 0);
      }
  
    /* Mark the last node holding a crafted StringBuffer */
*************** patch_string_cst (tree node)
*** 16829,16836 ****
        location = alloc_name_constant (CONSTANT_String, node);
        node = build_ref_from_constant_pool (location);
      }
-   TREE_TYPE (node) = string_ptr_type_node;
    TREE_CONSTANT (node) = 1;
    return node;
  }
  
--- 17012,17026 ----
        location = alloc_name_constant (CONSTANT_String, node);
        node = build_ref_from_constant_pool (location);
      }
    TREE_CONSTANT (node) = 1;
+   TREE_INVARIANT (node) = 1;
+ 
+   /* ??? Guessing that the class file code can't handle casts.  */
+   if (! flag_emit_class_files)
+     node = convert (string_ptr_type_node, node);
+   else
+     TREE_TYPE (node) = string_ptr_type_node;
+ 
    return node;
  }
  
*************** build_incdec (int op_token, int op_locat
*** 16870,16877 ****
        { PREDECREMENT_EXPR, PREINCREMENT_EXPR, },
        { POSTDECREMENT_EXPR, POSTINCREMENT_EXPR, },
      };
!   tree node = build (lookup [is_post_p][(op_token - DECR_TK)],
! 		     NULL_TREE, op1, NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;
    /* Store the location of the operator, for better error report. The
       string of the operator will be rebuild based on the OP value. */
--- 17060,17067 ----
        { PREDECREMENT_EXPR, PREINCREMENT_EXPR, },
        { POSTDECREMENT_EXPR, POSTINCREMENT_EXPR, },
      };
!   tree node = build2 (lookup [is_post_p][(op_token - DECR_TK)],
! 		      NULL_TREE, op1, NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;
    /* Store the location of the operator, for better error report. The
       string of the operator will be rebuild based on the OP value. */
*************** build_incomplete_class_ref (int location
*** 16907,16931 ****
        && !JPRIMITIVE_TYPE_P (class_name)
        && !(TREE_CODE (class_name) == VOID_TYPE))
      {
        tree target_class;
  
!       if (CLASS_INTERFACE (TYPE_NAME (this_class)))
  	{
  	  /* For interfaces, adding a static 'class$' method directly 
  	     is illegal.  So create an inner class to contain the new
  	     method.  Empirically this matches the behavior of javac.  */
! 	  tree t = build_wfl_node (DECL_NAME (TYPE_NAME (object_type_node)));
! 	  tree inner = create_anonymous_class (0, t);
  	  target_class = TREE_TYPE (inner);
  	  end_class_declaration (1);
! 	}
!       else
! 	{
! 	  /* For inner classes, add a 'class$' method to their outermost
! 	     context, creating it if necessary.  */
! 	  while (INNER_CLASS_DECL_P (class_decl))
! 	    class_decl = DECL_CONTEXT (class_decl);
! 	  target_class = TREE_TYPE (class_decl);
  	}
  
        if (TYPE_DOT_CLASS (target_class) == NULL_TREE)
--- 17097,17128 ----
        && !JPRIMITIVE_TYPE_P (class_name)
        && !(TREE_CODE (class_name) == VOID_TYPE))
      {
+       tree cpc_list = GET_CPC_LIST();
+       tree cpc = cpc_list;
        tree target_class;
  
!       /* For inner classes, add a 'class$' method to their outermost
! 	 context, creating it if necessary.  */
!       
!       while (GET_NEXT_ENCLOSING_CPC(cpc))
! 	cpc = GET_NEXT_ENCLOSING_CPC(cpc);
!       class_decl = TREE_VALUE (cpc);
! 
!       target_class = TREE_TYPE (class_decl);
! 
!       if (CLASS_INTERFACE (TYPE_NAME (target_class)))
  	{
  	  /* For interfaces, adding a static 'class$' method directly 
  	     is illegal.  So create an inner class to contain the new
  	     method.  Empirically this matches the behavior of javac.  */
! 	  tree t, inner;
! 	  /* We want the generated inner class inside the outermost class. */
! 	  GET_CPC_LIST() = cpc;
! 	  t = build_wfl_node (DECL_NAME (TYPE_NAME (object_type_node)));
! 	  inner = create_anonymous_class (t);
  	  target_class = TREE_TYPE (inner);
  	  end_class_declaration (1);
! 	  GET_CPC_LIST() = cpc_list;
  	}
  
        if (TYPE_DOT_CLASS (target_class) == NULL_TREE)
*************** patch_unaryop (tree node, tree wfl_op)
*** 16993,16999 ****
      case PREINCREMENT_EXPR:
        /* 15.14.2 Prefix Decrement Operator -- */
      case PREDECREMENT_EXPR:
!       op = decl = strip_out_static_field_access_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. */
--- 17190,17196 ----
      case PREINCREMENT_EXPR:
        /* 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. */
*************** patch_unaryop (tree node, tree wfl_op)
*** 17028,17034 ****
        if (!JNUMERIC_TYPE_P (op_type))
  	{
  	  parse_error_context
! 	    (wfl_op, "Invalid argument type `%s' to `%s'",
  	     lang_printable_name (op_type, 0), operator_string (node));
  	  TREE_TYPE (node) = error_mark_node;
  	  error_found = 1;
--- 17225,17231 ----
        if (!JNUMERIC_TYPE_P (op_type))
  	{
  	  parse_error_context
! 	    (wfl_op, "Invalid argument type %qs to %qs",
  	     lang_printable_name (op_type, 0), operator_string (node));
  	  TREE_TYPE (node) = error_mark_node;
  	  error_found = 1;
*************** patch_unaryop (tree node, tree wfl_op)
*** 17039,17050 ****
  	     both operands, if really necessary */
  	  if (JINTEGRAL_TYPE_P (op_type))
  	    {
! 	      value = build_int_2 (1, 0);
! 	      TREE_TYPE (value) = TREE_TYPE (node) = op_type;
  	    }
  	  else
  	    {
! 	      value = build_int_2 (1, 0);
  	      TREE_TYPE (node) =
  		binary_numeric_promotion (op_type,
  					  TREE_TYPE (value), &op, &value);
--- 17236,17247 ----
  	     both operands, if really necessary */
  	  if (JINTEGRAL_TYPE_P (op_type))
  	    {
! 	      value = build_int_cst (op_type, 1);
! 	      TREE_TYPE (node) = op_type;
  	    }
  	  else
  	    {
! 	      value = build_int_cst (NULL_TREE, 1);
  	      TREE_TYPE (node) =
  		binary_numeric_promotion (op_type,
  					  TREE_TYPE (value), &op, &value);
*************** patch_unaryop (tree node, tree wfl_op)
*** 17054,17061 ****
  	  if (outer_field_flag)
  	    {
  	      /* We re-generate an access to the field */
! 	      value = build (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 */
--- 17251,17258 ----
  	  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 */
*************** patch_unaryop (tree node, tree wfl_op)
*** 17137,17143 ****
        else
  	{
  	  value = fold (value);
- 	  TREE_SIDE_EFFECTS (value) = TREE_SIDE_EFFECTS (op);
  	  return value;
  	}
        break;
--- 17334,17339 ----
*************** resolve_type_during_patch (tree type)
*** 17168,17174 ****
        if (!type_decl)
  	{
  	  parse_error_context (type,
! 			       "Class `%s' not found in type declaration",
  			       IDENTIFIER_POINTER (EXPR_WFL_NODE (type)));
  	  return NULL_TREE;
  	}
--- 17364,17370 ----
        if (!type_decl)
  	{
  	  parse_error_context (type,
! 			       "Class %qs not found in type declaration",
  			       IDENTIFIER_POINTER (EXPR_WFL_NODE (type)));
  	  return NULL_TREE;
  	}
*************** patch_cast (tree node, tree wfl_op)
*** 17250,17265 ****
  	}
  
        /* The cast requires a run-time check */
!       return build (CALL_EXPR, promote_type (cast_type),
! 		    build_address_of (soft_checkcast_node),
! 		    tree_cons (NULL_TREE, build_class_ref (cast_type),
! 			       build_tree_list (NULL_TREE, op)),
! 		    NULL_TREE);
      }
  
    /* Any other casts are proven incorrect at compile time */
    t1 = xstrdup (lang_printable_name (op_type, 0));
!   parse_error_context (wfl_op, "Invalid cast from `%s' to `%s'",
  		       t1, lang_printable_name (cast_type, 0));
    free (t1);
    return error_mark_node;
--- 17446,17461 ----
  	}
  
        /* The cast requires a run-time check */
!       return build3 (CALL_EXPR, promote_type (cast_type),
! 		     build_address_of (soft_checkcast_node),
! 		     tree_cons (NULL_TREE, build_class_ref (cast_type),
! 				build_tree_list (NULL_TREE, op)),
! 		     NULL_TREE);
      }
  
    /* Any other casts are proven incorrect at compile time */
    t1 = xstrdup (lang_printable_name (op_type, 0));
!   parse_error_context (wfl_op, "Invalid cast from %qs to %qs",
  		       t1, lang_printable_name (cast_type, 0));
    free (t1);
    return error_mark_node;
*************** patch_cast (tree node, tree wfl_op)
*** 17270,17277 ****
  static tree
  build_null_of_type (tree type)
  {
!   tree node = build_int_2 (0, 0);
!   TREE_TYPE (node) = promote_type (type);
    return node;
  }
  
--- 17466,17472 ----
  static tree
  build_null_of_type (tree type)
  {
!   tree node = build_int_cst (promote_type (type), 0);
    return node;
  }
  
*************** build_null_of_type (tree type)
*** 17280,17286 ****
  static tree
  build_array_ref (int location, tree array, tree index)
  {
!   tree node = build (ARRAY_REF, NULL_TREE, array, index);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
--- 17475,17482 ----
  static tree
  build_array_ref (int location, tree array, tree index)
  {
!   tree node = build4 (ARRAY_REF, NULL_TREE, array, index,
! 		      NULL_TREE, NULL_TREE);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
*************** patch_array_ref (tree node)
*** 17306,17312 ****
      {
        parse_error_context
  	(wfl_operator,
! 	 "`[]' can only be applied to arrays. It can't be applied to `%s'",
  	 lang_printable_name (array_type, 0));
        TREE_TYPE (node) = error_mark_node;
        error_found = 1;
--- 17502,17508 ----
      {
        parse_error_context
  	(wfl_operator,
! 	 "%<[]%> can only be applied to arrays. It can't be applied to %qs",
  	 lang_printable_name (array_type, 0));
        TREE_TYPE (node) = error_mark_node;
        error_found = 1;
*************** patch_array_ref (tree node)
*** 17319,17329 ****
      {
        if (valid_cast_to_p (index_type, int_type_node))
  	parse_error_context (wfl_operator,
!    "Incompatible type for `[]'. Explicit cast needed to convert `%s' to `int'",
  			     lang_printable_name (index_type, 0));
        else
  	parse_error_context (wfl_operator,
!           "Incompatible type for `[]'. Can't convert `%s' to `int'",
  			     lang_printable_name (index_type, 0));
        TREE_TYPE (node) = error_mark_node;
        error_found = 1;
--- 17515,17525 ----
      {
        if (valid_cast_to_p (index_type, int_type_node))
  	parse_error_context (wfl_operator,
!    "Incompatible type for %<[]%>. Explicit cast needed to convert %qs to %<int%>",
  			     lang_printable_name (index_type, 0));
        else
  	parse_error_context (wfl_operator,
!           "Incompatible type for %<[]%>. Can't convert %qs to %<int%>",
  			     lang_printable_name (index_type, 0));
        TREE_TYPE (node) = error_mark_node;
        error_found = 1;
*************** patch_array_ref (tree node)
*** 17350,17358 ****
  static tree
  build_newarray_node (tree type, tree dims, int extra_dims)
  {
!   tree node =
!     build (NEW_ARRAY_EXPR, NULL_TREE, type, nreverse (dims),
! 	   build_int_2 (extra_dims, 0));
    return node;
  }
  
--- 17546,17554 ----
  static tree
  build_newarray_node (tree type, tree dims, int extra_dims)
  {
!   tree node = build3 (NEW_ARRAY_EXPR, NULL_TREE, type,
! 		      nreverse (dims),
! 		      build_int_cst (NULL_TREE, extra_dims));
    return node;
  }
  
*************** patch_newarray (tree node)
*** 17394,17400 ****
  	{
  	  parse_error_context
  	    (TREE_PURPOSE (cdim),
! 	     "Incompatible type for dimension in array creation expression. %s convert `%s' to `int'",
  	     (valid_cast_to_p (TREE_TYPE (dim), int_type_node) ?
  	      "Explicit cast needed to" : "Can't"),
  	     lang_printable_name (TREE_TYPE (dim), 0));
--- 17590,17596 ----
  	{
  	  parse_error_context
  	    (TREE_PURPOSE (cdim),
! 	     "Incompatible type for dimension in array creation expression. %s convert %qs to %<int%>",
  	     (valid_cast_to_p (TREE_TYPE (dim), int_type_node) ?
  	      "Explicit cast needed to" : "Can't"),
  	     lang_printable_name (TREE_TYPE (dim), 0));
*************** patch_newarray (tree node)
*** 17446,17457 ****
  
    /* Can't reuse what's already written in expr.c because it uses the
       JVM stack representation. Provide a build_multianewarray. FIXME */
!   return build (CALL_EXPR, array_type,
! 		build_address_of (soft_multianewarray_node),
! 		tree_cons (NULL_TREE, build_class_ref (TREE_TYPE (array_type)),
! 			   tree_cons (NULL_TREE,
! 				      build_int_2 (ndims, 0), dims )),
! 		NULL_TREE);
  }
  
  /* 10.6 Array initializer.  */
--- 17642,17655 ----
  
    /* Can't reuse what's already written in expr.c because it uses the
       JVM stack representation. Provide a build_multianewarray. FIXME */
!   return build3 (CALL_EXPR, array_type,
! 		 build_address_of (soft_multianewarray_node),
! 		 tree_cons (NULL_TREE,
! 			    build_class_ref (TREE_TYPE (array_type)),
! 			    tree_cons (NULL_TREE,
! 				       build_int_cst (NULL_TREE, ndims),
! 				       dims)),
! 		 NULL_TREE);
  }
  
  /* 10.6 Array initializer.  */
*************** static tree
*** 17463,17470 ****
  maybe_build_array_element_wfl (tree node)
  {
    if (TREE_CODE (node) != EXPR_WITH_FILE_LOCATION)
!     return build_expr_wfl (NULL_TREE, ctxp->filename,
! 			   ctxp->elc.line, ctxp->elc.prev_col);
    else
      return NULL_TREE;
  }
--- 17661,17678 ----
  maybe_build_array_element_wfl (tree node)
  {
    if (TREE_CODE (node) != EXPR_WITH_FILE_LOCATION)
!     {
!       /* FIXME - old code used "prev_lc.line" and "elc.prev_col */
!       return build_expr_wfl (NULL_TREE,
! #ifdef USE_MAPPED_LOCATION
! 			     input_location
! #else
! 			     ctxp->filename,
! 			     ctxp->lexer->token_start.line,
! 			     ctxp->lexer->token_start.col
! #endif
! 			     );
!     }
    else
      return NULL_TREE;
  }
*************** patch_new_array_init (tree type, tree no
*** 17498,17504 ****
    if (TREE_CODE (type) != POINTER_TYPE || ! TYPE_ARRAY_P (TREE_TYPE (type)))
      {
        parse_error_context (node,
! 			   "Invalid array initializer for non-array type `%s'",
  			   lang_printable_name (type, 1));
        return error_mark_node;
      }
--- 17706,17712 ----
    if (TREE_CODE (type) != POINTER_TYPE || ! TYPE_ARRAY_P (TREE_TYPE (type)))
      {
        parse_error_context (node,
! 			   "Invalid array initializer for non-array type %qs",
  			   lang_printable_name (type, 1));
        return error_mark_node;
      }
*************** patch_new_array_init (tree type, tree no
*** 17541,17547 ****
--- 17749,17757 ----
    TREE_TYPE (init) = TREE_TYPE (TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (type))));
    TREE_TYPE (node) = promote_type (type);
    TREE_CONSTANT (init) = all_constant;
+   TREE_INVARIANT (init) = all_constant;
    TREE_CONSTANT (node) = all_constant;
+   TREE_INVARIANT (node) = all_constant;
    return node;
  }
  
*************** array_constructor_check_entry (tree type
*** 17583,17589 ****
        if (!array_type_string)
  	array_type_string = xstrdup (lang_printable_name (type, 1));
        parse_error_context
! 	(wfl_operator, "Incompatible type for array. %s convert `%s' to `%s'",
  	 msg, lang_printable_name (type_value, 1), array_type_string);
        error_seen = 1;
      }
--- 17793,17799 ----
        if (!array_type_string)
  	array_type_string = xstrdup (lang_printable_name (type, 1));
        parse_error_context
! 	(wfl_operator, "Incompatible type for array. %s convert %qs to %qs",
  	 msg, lang_printable_name (type_value, 1), array_type_string);
        error_seen = 1;
      }
*************** patch_return (tree node)
*** 17652,17676 ****
      {
        if (DECL_INSTINIT_P (current_function_decl))
  	parse_error_context (wfl_operator,
! 			     "`return' inside instance initializer");
  
        else if (DECL_CLINIT_P (current_function_decl))
  	parse_error_context (wfl_operator,
! 			     "`return' inside static initializer");
  
        else if (!DECL_CONSTRUCTOR_P (meth))
  	{
  	  char *t = xstrdup (lang_printable_name (mtype, 0));
  	  parse_error_context (wfl_operator,
! 			       "`return' with%s value from `%s %s'",
  			       (error_found == 1 ? "" : "out"),
! 			       t, lang_printable_name (meth, 0));
  	  free (t);
  	}
        else
  	parse_error_context (wfl_operator,
! 			     "`return' with value from constructor `%s'",
! 			     lang_printable_name (meth, 0));
        return error_mark_node;
      }
  
--- 17862,17886 ----
      {
        if (DECL_INSTINIT_P (current_function_decl))
  	parse_error_context (wfl_operator,
! 			     "%<return%> inside instance initializer");
  
        else if (DECL_CLINIT_P (current_function_decl))
  	parse_error_context (wfl_operator,
! 			     "%<return%> inside static initializer");
  
        else if (!DECL_CONSTRUCTOR_P (meth))
  	{
  	  char *t = xstrdup (lang_printable_name (mtype, 0));
  	  parse_error_context (wfl_operator,
! 			       "%<return%> with%s value from %<%s %s%>",
  			       (error_found == 1 ? "" : "out"),
! 			       t, lang_printable_name (meth, 2));
  	  free (t);
  	}
        else
  	parse_error_context (wfl_operator,
! 			     "%<return%> with value from constructor %qs",
! 			     lang_printable_name (meth, 2));
        return error_mark_node;
      }
  
*************** patch_return (tree node)
*** 17685,17691 ****
        if ((patched = patch_string (exp)))
  	exp = patched;
  
!       modify = build (MODIFY_EXPR, NULL_TREE, DECL_RESULT (meth), exp);
        EXPR_WFL_LINECOL (modify) = EXPR_WFL_LINECOL (node);
        modify = java_complete_tree (modify);
  
--- 17895,17901 ----
        if ((patched = patch_string (exp)))
  	exp = patched;
  
!       modify = build2 (MODIFY_EXPR, NULL_TREE, DECL_RESULT (meth), exp);
        EXPR_WFL_LINECOL (modify) = EXPR_WFL_LINECOL (node);
        modify = java_complete_tree (modify);
  
*************** build_if_else_statement (int location, t
*** 17710,17717 ****
  {
    tree node;
    if (!else_body)
!     else_body = empty_stmt_node;
!   node = build (COND_EXPR, NULL_TREE, expression, if_body, else_body);
    EXPR_WFL_LINECOL (node) = location;
    node = build_debugable_stmt (location, node);
    return node;
--- 17920,17927 ----
  {
    tree node;
    if (!else_body)
!     else_body = build_java_empty_stmt ();
!   node = build3 (COND_EXPR, NULL_TREE, expression, if_body, else_body);
    EXPR_WFL_LINECOL (node) = location;
    node = build_debugable_stmt (location, node);
    return node;
*************** patch_if_else_statement (tree node)
*** 17734,17757 ****
      {
        parse_error_context
  	(wfl_operator,
! 	 "Incompatible type for `if'. Can't convert `%s' to `boolean'",
  	 lang_printable_name (TREE_TYPE (expression), 0));
        return error_mark_node;
      }
  
-   if (TREE_CODE (expression) == INTEGER_CST)
-     {
-       if (integer_zerop (expression))
- 	node = TREE_OPERAND (node, 2);
-       else
- 	node = TREE_OPERAND (node, 1);
-       if (CAN_COMPLETE_NORMALLY (node) != can_complete_normally)
- 	{
- 	  node = build (COMPOUND_EXPR, void_type_node, node, empty_stmt_node);
- 	  CAN_COMPLETE_NORMALLY (node) = can_complete_normally;
- 	}
-       return node;
-     }
    TREE_TYPE (node) = void_type_node;
    TREE_SIDE_EFFECTS (node) = 1;
    CAN_COMPLETE_NORMALLY (node) = can_complete_normally;
--- 17944,17954 ----
      {
        parse_error_context
  	(wfl_operator,
! 	 "Incompatible type for %<if%>. Can't convert %qs to %<boolean%>",
  	 lang_printable_name (TREE_TYPE (expression), 0));
        return error_mark_node;
      }
  
    TREE_TYPE (node) = void_type_node;
    TREE_SIDE_EFFECTS (node) = 1;
    CAN_COMPLETE_NORMALLY (node) = can_complete_normally;
*************** build_labeled_block (int location, tree 
*** 17780,17798 ****
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = location;
  	  parse_error_context (wfl_operator,
!             "Declaration of `%s' shadows a previous label declaration",
  			       IDENTIFIER_POINTER (label));
  	  EXPR_WFL_LINECOL (wfl_operator) =
  	    EXPR_WFL_LINECOL (IDENTIFIER_LOCAL_VALUE (label_name));
  	  parse_error_context (wfl_operator,
!             "This is the location of the previous declaration of label `%s'",
  			       IDENTIFIER_POINTER (label));
  	  java_error_count--;
  	}
      }
  
    label_decl = create_label_decl (label_name);
!   node = build (LABELED_BLOCK_EXPR, NULL_TREE, label_decl, NULL_TREE);
    EXPR_WFL_LINECOL (node) = location;
    TREE_SIDE_EFFECTS (node) = 1;
    return node;
--- 17977,17995 ----
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = location;
  	  parse_error_context (wfl_operator,
!             "Declaration of %qs shadows a previous label declaration",
  			       IDENTIFIER_POINTER (label));
  	  EXPR_WFL_LINECOL (wfl_operator) =
  	    EXPR_WFL_LINECOL (IDENTIFIER_LOCAL_VALUE (label_name));
  	  parse_error_context (wfl_operator,
!             "This is the location of the previous declaration of label %qs",
  			       IDENTIFIER_POINTER (label));
  	  java_error_count--;
  	}
      }
  
    label_decl = create_label_decl (label_name);
!   node = build2 (LABELED_BLOCK_EXPR, NULL_TREE, label_decl, NULL_TREE);
    EXPR_WFL_LINECOL (node) = location;
    TREE_SIDE_EFFECTS (node) = 1;
    return node;
*************** finish_labeled_statement (tree lbe, /* L
*** 17819,17825 ****
  static tree
  build_new_loop (tree loop_body)
  {
!   tree loop =  build (LOOP_EXPR, NULL_TREE, loop_body);
    TREE_SIDE_EFFECTS (loop) = 1;
    PUSH_LOOP (loop);
    return loop;
--- 18016,18022 ----
  static tree
  build_new_loop (tree loop_body)
  {
!   tree loop = build1 (LOOP_EXPR, NULL_TREE, loop_body);
    TREE_SIDE_EFFECTS (loop) = 1;
    PUSH_LOOP (loop);
    return loop;
*************** build_loop_body (int location, tree cond
*** 17850,17856 ****
  {
    tree first, second, body;
  
!   condition = build (EXIT_EXPR, NULL_TREE, condition); /* Force walk */
    EXPR_WFL_LINECOL (condition) = location; /* For accurate error report */
    condition = build_debugable_stmt (location, condition);
    TREE_SIDE_EFFECTS (condition) = 1;
--- 18047,18053 ----
  {
    tree first, second, body;
  
!   condition = build1 (EXIT_EXPR, NULL_TREE, condition); /* Force walk */
    EXPR_WFL_LINECOL (condition) = location; /* For accurate error report */
    condition = build_debugable_stmt (location, condition);
    TREE_SIDE_EFFECTS (condition) = 1;
*************** build_loop_body (int location, tree cond
*** 17858,17866 ****
    body = build_labeled_block (0, continue_identifier_node);
    first = (reversed ? body : condition);
    second = (reversed ? condition : body);
!   return
!     build (COMPOUND_EXPR, NULL_TREE,
! 	   build (COMPOUND_EXPR, NULL_TREE, first, second), empty_stmt_node);
  }
  
  /* Install CONDITION (if any) and loop BODY (using REVERSED to tell
--- 18055,18063 ----
    body = build_labeled_block (0, continue_identifier_node);
    first = (reversed ? body : condition);
    second = (reversed ? condition : body);
!   return build2 (COMPOUND_EXPR, NULL_TREE,
! 		 build2 (COMPOUND_EXPR, NULL_TREE, first, second),
! 		 build_java_empty_stmt ());
  }
  
  /* Install CONDITION (if any) and loop BODY (using REVERSED to tell
*************** finish_loop_body (int location, tree con
*** 17878,17886 ****
        /* We wrapped the EXIT_EXPR around a WFL so we can debug it.
           The real EXIT_EXPR is one operand further. */
        EXPR_WFL_LINECOL (cnode) = location;
!       /* This one is for accurate error reports */
!       EXPR_WFL_LINECOL (TREE_OPERAND (cnode, 0)) = location;
!       TREE_OPERAND (TREE_OPERAND (cnode, 0), 0) = condition;
      }
    LOOP_EXPR_BODY_BODY_EXPR (loop_body, reversed) = body;
    POP_LOOP ();
--- 18075,18087 ----
        /* We wrapped the EXIT_EXPR around a WFL so we can debug it.
           The real EXIT_EXPR is one operand further. */
        EXPR_WFL_LINECOL (cnode) = location;
!       if (TREE_CODE (cnode) == EXPR_WITH_FILE_LOCATION)
! 	{
! 	  cnode = EXPR_WFL_NODE (cnode);
! 	  /* This one is for accurate error reports */
! 	  EXPR_WFL_LINECOL (cnode) = location;
! 	}
!       TREE_OPERAND (cnode, 0) = condition;
      }
    LOOP_EXPR_BODY_BODY_EXPR (loop_body, reversed) = body;
    POP_LOOP ();
*************** finish_for_loop (int location, tree cond
*** 17900,17918 ****
       this because the (current interpretation of the) JLS requires
       that the update expression be considered reachable even if the
       for loop's body doesn't complete normally.  */
!   if (update != NULL_TREE && update != empty_stmt_node)
      {
        tree up2 = update;
        if (TREE_CODE (up2) == EXPR_WITH_FILE_LOCATION)
  	up2 = EXPR_WFL_NODE (up2);
        /* It is possible for the update expression to be an
  	 EXPR_WFL_NODE wrapping nothing.  */
!       if (up2 != NULL_TREE && up2 != empty_stmt_node)
  	{
  	  /* Try to detect constraint violations.  These would be
  	     programming errors somewhere.  */
! 	  if (! IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (up2)))
! 	      || TREE_CODE (up2) == LOOP_EXPR)
  	    abort ();
  	  SUPPRESS_UNREACHABLE_ERROR (up2) = 1;
  	}
--- 18101,18118 ----
       this because the (current interpretation of the) JLS requires
       that the update expression be considered reachable even if the
       for loop's body doesn't complete normally.  */
!   if (update != NULL_TREE && !IS_EMPTY_STMT (update))
      {
        tree up2 = update;
        if (TREE_CODE (up2) == EXPR_WITH_FILE_LOCATION)
  	up2 = EXPR_WFL_NODE (up2);
        /* It is possible for the update expression to be an
  	 EXPR_WFL_NODE wrapping nothing.  */
!       if (up2 != NULL_TREE && !IS_EMPTY_STMT (up2))
  	{
  	  /* Try to detect constraint violations.  These would be
  	     programming errors somewhere.  */
! 	  if (! EXPR_P (up2) || TREE_CODE (up2) == LOOP_EXPR)
  	    abort ();
  	  SUPPRESS_UNREACHABLE_ERROR (up2) = 1;
  	}
*************** build_bc_statement (int location, int is
*** 18008,18015 ****
      }
    /* Unlabeled break/continue will be handled during the
       break/continue patch operation */
!   break_continue
!     = build (EXIT_BLOCK_EXPR, NULL_TREE, label_block_expr, NULL_TREE);
  
    IS_BREAK_STMT_P (break_continue) = is_break;
    TREE_SIDE_EFFECTS (break_continue) = 1;
--- 18208,18214 ----
      }
    /* Unlabeled break/continue will be handled during the
       break/continue patch operation */
!   break_continue = build1 (EXIT_BLOCK_EXPR, NULL_TREE, label_block_expr);
  
    IS_BREAK_STMT_P (break_continue) = is_break;
    TREE_SIDE_EFFECTS (break_continue) = 1;
*************** patch_bc_statement (tree node)
*** 18030,18036 ****
    /* Having an identifier here means that the target is unknown. */
    if (bc_label != NULL_TREE && TREE_CODE (bc_label) == IDENTIFIER_NODE)
      {
!       parse_error_context (wfl_operator, "No label definition found for `%s'",
  			   IDENTIFIER_POINTER (bc_label));
        return error_mark_node;
      }
--- 18229,18235 ----
    /* Having an identifier here means that the target is unknown. */
    if (bc_label != NULL_TREE && TREE_CODE (bc_label) == IDENTIFIER_NODE)
      {
!       parse_error_context (wfl_operator, "No label definition found for %qs",
  			   IDENTIFIER_POINTER (bc_label));
        return error_mark_node;
      }
*************** patch_bc_statement (tree node)
*** 18043,18052 ****
  	    {
  	      if (bc_label == NULL_TREE)
  		parse_error_context (wfl_operator,
! 				     "`continue' must be in loop");
  	      else
  		parse_error_context
! 		  (wfl_operator, "continue label `%s' does not name a loop",
  		   IDENTIFIER_POINTER (bc_label));
  	      return error_mark_node;
  	    }
--- 18242,18251 ----
  	    {
  	      if (bc_label == NULL_TREE)
  		parse_error_context (wfl_operator,
! 				     "%<continue%> must be in loop");
  	      else
  		parse_error_context
! 		  (wfl_operator, "continue label %qs does not name a loop",
  		   IDENTIFIER_POINTER (bc_label));
  	      return error_mark_node;
  	    }
*************** patch_bc_statement (tree node)
*** 18067,18073 ****
  	  if (labeled_block == NULL_TREE)
  	    {
  	      parse_error_context (wfl_operator,
! 				     "`break' must be in loop or switch");
  	      return error_mark_node;
  	    }
  	  target_stmt = LABELED_BLOCK_BODY (labeled_block);
--- 18266,18272 ----
  	  if (labeled_block == NULL_TREE)
  	    {
  	      parse_error_context (wfl_operator,
! 				     "%<break%> must be in loop or switch");
  	      return error_mark_node;
  	    }
  	  target_stmt = LABELED_BLOCK_BODY (labeled_block);
*************** patch_exit_expr (tree node)
*** 18108,18114 ****
      {
        parse_error_context
  	(wfl_operator,
!     "Incompatible type for loop conditional. Can't convert `%s' to `boolean'",
  	 lang_printable_name (TREE_TYPE (expression), 0));
        return error_mark_node;
      }
--- 18307,18313 ----
      {
        parse_error_context
  	(wfl_operator,
!     "Incompatible type for loop conditional. Can't convert %qs to %<boolean%>",
  	 lang_printable_name (TREE_TYPE (expression), 0));
        return error_mark_node;
      }
*************** patch_switch_statement (tree node)
*** 18146,18152 ****
      {
        EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
        parse_error_context (wfl_operator,
! 	  "Incompatible type for `switch'. Can't convert `%s' to `int'",
  			   lang_printable_name (se_type, 0));
        /* This is what java_complete_tree will check */
        TREE_OPERAND (node, 0) = error_mark_node;
--- 18345,18351 ----
      {
        EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
        parse_error_context (wfl_operator,
! 	  "Incompatible type for %<switch%>. Can't convert %qs to %<int%>",
  			   lang_printable_name (se_type, 0));
        /* This is what java_complete_tree will check */
        TREE_OPERAND (node, 0) = error_mark_node;
*************** patch_switch_statement (tree node)
*** 18177,18184 ****
  		= EXPR_WFL_LINECOL (TREE_PURPOSE (iter));
  	      /* The case_label_list is in reverse order, so print the
  		 outer label first.  */
! 	      parse_error_context (wfl_operator, "duplicate case label: `"
! 				   HOST_WIDE_INT_PRINT_DEC "'", subval);
  	      EXPR_WFL_LINECOL (wfl_operator)
  		= EXPR_WFL_LINECOL (TREE_PURPOSE (subiter));
  	      parse_error_context (wfl_operator, "original label is here");
--- 18376,18383 ----
  		= EXPR_WFL_LINECOL (TREE_PURPOSE (iter));
  	      /* The case_label_list is in reverse order, so print the
  		 outer label first.  */
! 	      parse_error_context (wfl_operator, "duplicate case label: %<"
! 				   HOST_WIDE_INT_PRINT_DEC "%>", subval);
  	      EXPR_WFL_LINECOL (wfl_operator)
  		= EXPR_WFL_LINECOL (TREE_PURPOSE (subiter));
  	      parse_error_context (wfl_operator, "original label is here");
*************** patch_switch_statement (tree node)
*** 18209,18219 ****
  /* Build an assertion expression for `assert CONDITION : VALUE'; VALUE
     might be NULL_TREE.  */
  static tree
! build_assertion (int location, tree condition, tree value)
  {
    tree node;
    tree klass = GET_CPC ();
  
    if (! CLASS_USES_ASSERTIONS (klass))
      {
        tree field, classdollar, id, call;
--- 18408,18434 ----
  /* Build an assertion expression for `assert CONDITION : VALUE'; VALUE
     might be NULL_TREE.  */
  static tree
! build_assertion (
! #ifdef USE_MAPPED_LOCATION
! 		 source_location location,
! #else
! 		 int location,
! #endif
! 		 tree condition, tree value)
  {
    tree node;
    tree klass = GET_CPC ();
  
+   if (! enable_assertions (klass))
+     {
+       condition = build2 (TRUTH_ANDIF_EXPR, NULL_TREE,
+ 			  boolean_false_node, condition);
+       if (value == NULL_TREE)
+ 	value = build_java_empty_stmt ();
+       return build_if_else_statement (location, condition,
+ 				      value, NULL_TREE);
+     }
+ 
    if (! CLASS_USES_ASSERTIONS (klass))
      {
        tree field, classdollar, id, call;
*************** build_assertion (int location, tree cond
*** 18226,18238 ****
        MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (field);
        FIELD_SYNTHETIC (field) = 1;
  
!       if (!TYPE_DOT_CLASS (class_type))
! 	build_dot_class_method (class_type);
!       classdollar = build_dot_class_method_invocation (class_type, class_type);
  
        /* Call CLASS.desiredAssertionStatus().  */
        id = build_wfl_node (get_identifier ("desiredAssertionStatus"));
!       call = build (CALL_EXPR, NULL_TREE, id, NULL_TREE, NULL_TREE);
        call = make_qualified_primary (classdollar, call, location);
        TREE_SIDE_EFFECTS (call) = 1;
  
--- 18441,18451 ----
        MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (field);
        FIELD_SYNTHETIC (field) = 1;
  
!       classdollar = build_incomplete_class_ref (location, class_type);
  
        /* Call CLASS.desiredAssertionStatus().  */
        id = build_wfl_node (get_identifier ("desiredAssertionStatus"));
!       call = build3 (CALL_EXPR, NULL_TREE, id, NULL_TREE, NULL_TREE);
        call = make_qualified_primary (classdollar, call, location);
        TREE_SIDE_EFFECTS (call) = 1;
  
*************** build_assertion (int location, tree cond
*** 18244,18250 ****
        DECL_INITIAL (field) = call;
  
        /* Record the initializer in the initializer statement list.  */
!       call = build (MODIFY_EXPR, NULL_TREE, field, call);
        TREE_CHAIN (call) = CPC_STATIC_INITIALIZER_STMT (ctxp);
        SET_CPC_STATIC_INITIALIZER_STMT (ctxp, call);
        MODIFY_EXPR_FROM_INITIALIZATION_P (call) = 1;
--- 18457,18463 ----
        DECL_INITIAL (field) = call;
  
        /* Record the initializer in the initializer statement list.  */
!       call = build2 (MODIFY_EXPR, NULL_TREE, field, call);
        TREE_CHAIN (call) = CPC_STATIC_INITIALIZER_STMT (ctxp);
        SET_CPC_STATIC_INITIALIZER_STMT (ctxp, call);
        MODIFY_EXPR_FROM_INITIALIZATION_P (call) = 1;
*************** build_assertion (int location, tree cond
*** 18261,18267 ****
    node = make_qualified_name (node, build_wfl_node (get_identifier ("AssertionError")),
  			      location);
  
!   node = build (NEW_CLASS_EXPR, NULL_TREE, node, value, NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;
    /* It is too early to use BUILD_THROW.  */
    node = build1 (THROW_EXPR, NULL_TREE, node);
--- 18474,18480 ----
    node = make_qualified_name (node, build_wfl_node (get_identifier ("AssertionError")),
  			      location);
  
!   node = build3 (NEW_CLASS_EXPR, NULL_TREE, node, value, NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;
    /* It is too early to use BUILD_THROW.  */
    node = build1 (THROW_EXPR, NULL_TREE, node);
*************** build_assertion (int location, tree cond
*** 18272,18281 ****
    condition = build1 (TRUTH_NOT_EXPR, NULL_TREE, condition);
    /* Check $assertionsDisabled.  */
    condition
!     = build (TRUTH_ANDIF_EXPR, NULL_TREE,
! 	     build1 (TRUTH_NOT_EXPR, NULL_TREE,
! 		     build_wfl_node (get_identifier ("$assertionsDisabled"))),
! 	     condition);
    node = build_if_else_statement (location, condition, node, NULL_TREE);
    return node;
  }
--- 18485,18494 ----
    condition = build1 (TRUTH_NOT_EXPR, NULL_TREE, condition);
    /* Check $assertionsDisabled.  */
    condition
!     = build2 (TRUTH_ANDIF_EXPR, NULL_TREE,
! 	      build1 (TRUTH_NOT_EXPR, NULL_TREE,
! 		      build_wfl_node (get_identifier ("$assertionsDisabled"))),
! 	      condition);
    node = build_if_else_statement (location, condition, node, NULL_TREE);
    return node;
  }
*************** encapsulate_with_try_catch (int location
*** 18313,18327 ****
    catch_block = build_expr_block (NULL_TREE, catch_clause_param);
  
    /* Initialize the variable and store in the block */
!   catch = build (MODIFY_EXPR, NULL_TREE, catch_clause_param,
! 		 build (JAVA_EXC_OBJ_EXPR, ptr_type_node));
    add_stmt_to_block (catch_block, NULL_TREE, catch);
  
    /* Add the catch statements */
    add_stmt_to_block (catch_block, NULL_TREE, catch_stmts);
  
!   /* Now we can build a CATCH_EXPR */
!   catch_block = build1 (CATCH_EXPR, NULL_TREE, catch_block);
  
    return build_try_statement (location, try_block, catch_block);
  }
--- 18526,18540 ----
    catch_block = build_expr_block (NULL_TREE, catch_clause_param);
  
    /* Initialize the variable and store in the block */
!   catch = build2 (MODIFY_EXPR, NULL_TREE, catch_clause_param,
! 		  build0 (JAVA_EXC_OBJ_EXPR, ptr_type_node));
    add_stmt_to_block (catch_block, NULL_TREE, catch);
  
    /* Add the catch statements */
    add_stmt_to_block (catch_block, NULL_TREE, catch_stmts);
  
!   /* Now we can build a JAVA_CATCH_EXPR */
!   catch_block = build1 (JAVA_CATCH_EXPR, NULL_TREE, catch_block);
  
    return build_try_statement (location, try_block, catch_block);
  }
*************** encapsulate_with_try_catch (int location
*** 18329,18335 ****
  static tree
  build_try_statement (int location, tree try_block, tree catches)
  {
!   tree node = build (TRY_EXPR, NULL_TREE, try_block, catches);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
--- 18542,18548 ----
  static tree
  build_try_statement (int location, tree try_block, tree catches)
  {
!   tree node = build2 (TRY_EXPR, NULL_TREE, try_block, catches);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
*************** build_try_statement (int location, tree 
*** 18337,18343 ****
  static tree
  build_try_finally_statement (int location, tree try_block, tree finally)
  {
!   tree node = build (TRY_FINALLY_EXPR, NULL_TREE, try_block, finally);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
--- 18550,18556 ----
  static tree
  build_try_finally_statement (int location, tree try_block, tree finally)
  {
!   tree node = build2 (TRY_FINALLY_EXPR, NULL_TREE, try_block, finally);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
*************** patch_try_statement (tree node)
*** 18354,18360 ****
    /* Check catch clauses, if any. Every time we find an error, we try
       to process the next catch clause. We process the catch clause before
       the try block so that when processing the try block we can check thrown
!      exceptions againts the caught type list. */
    for (current = catch; current; current = TREE_CHAIN (current))
      {
        tree carg_decl, carg_type;
--- 18567,18573 ----
    /* Check catch clauses, if any. Every time we find an error, we try
       to process the next catch clause. We process the catch clause before
       the try block so that when processing the try block we can check thrown
!      exceptions against the caught type list. */
    for (current = catch; current; current = TREE_CHAIN (current))
      {
        tree carg_decl, carg_type;
*************** patch_try_statement (tree node)
*** 18362,18368 ****
        int unreachable;
  
        /* At this point, the structure of the catch clause is
! 	   CATCH_EXPR		(catch node)
  	     BLOCK	        (with the decl of the parameter)
                 COMPOUND_EXPR
                   MODIFY_EXPR   (assignment of the catch parameter)
--- 18575,18581 ----
        int unreachable;
  
        /* At this point, the structure of the catch clause is
! 	   JAVA_CATCH_EXPR		(catch node)
  	     BLOCK	        (with the decl of the parameter)
                 COMPOUND_EXPR
                   MODIFY_EXPR   (assignment of the catch parameter)
*************** patch_try_statement (tree node)
*** 18384,18390 ****
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (current);
  	  parse_error_context (wfl_operator,
! 			       "Can't catch class `%s'. Catch clause parameter type must be a subclass of class `java.lang.Throwable'",
  			       lang_printable_name (carg_type, 0));
  	  error_found = 1;
  	  continue;
--- 18597,18603 ----
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (current);
  	  parse_error_context (wfl_operator,
! 			       "Can't catch class %qs. Catch clause parameter type must be a subclass of class %<java.lang.Throwable%>",
  			       lang_printable_name (carg_type, 0));
  	  error_found = 1;
  	  continue;
*************** patch_try_statement (tree node)
*** 18408,18414 ****
  	      EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (current);
  	      parse_error_context
  		(wfl_operator,
! 		 "`catch' not reached because of the catch clause at line %d",
  		 EXPR_WFL_LINENO (sub_current));
  	      unreachable = error_found = 1;
  	      break;
--- 18621,18627 ----
  	      EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (current);
  	      parse_error_context
  		(wfl_operator,
! 		 "%<catch%> not reached because of the catch clause at line %d",
  		 EXPR_WFL_LINENO (sub_current));
  	      unreachable = error_found = 1;
  	      break;
*************** patch_synchronized_statement (tree node,
*** 18475,18481 ****
    if (!JREFERENCE_TYPE_P (TREE_TYPE (expr)))
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
!       parse_error_context (wfl_operator, "Incompatible type for `synchronized'. Can't convert `%s' to `java.lang.Object'",
  			   lang_printable_name (TREE_TYPE (expr), 0));
        return error_mark_node;
      }
--- 18688,18694 ----
    if (!JREFERENCE_TYPE_P (TREE_TYPE (expr)))
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
!       parse_error_context (wfl_operator, "Incompatible type for %<synchronized%>. Can't convert %qs to %<java.lang.Object%>",
  			   lang_printable_name (TREE_TYPE (expr), 0));
        return error_mark_node;
      }
*************** patch_synchronized_statement (tree node,
*** 18510,18520 ****
    BUILD_MONITOR_EXIT (exit, expr_decl);
    CAN_COMPLETE_NORMALLY (enter) = 1;
    CAN_COMPLETE_NORMALLY (exit) = 1;
!   assignment = build (MODIFY_EXPR, NULL_TREE, expr_decl, expr);
    TREE_SIDE_EFFECTS (assignment) = 1;
!   node = build (COMPOUND_EXPR, NULL_TREE,
! 		build (COMPOUND_EXPR, NULL_TREE, assignment, enter),
! 		build (TRY_FINALLY_EXPR, NULL_TREE, block, exit));
    node = build_expr_block (node, expr_decl);
  
    return java_complete_tree (node);
--- 18723,18733 ----
    BUILD_MONITOR_EXIT (exit, expr_decl);
    CAN_COMPLETE_NORMALLY (enter) = 1;
    CAN_COMPLETE_NORMALLY (exit) = 1;
!   assignment = build2 (MODIFY_EXPR, NULL_TREE, expr_decl, expr);
    TREE_SIDE_EFFECTS (assignment) = 1;
!   node = build2 (COMPOUND_EXPR, NULL_TREE,
! 		 build2 (COMPOUND_EXPR, NULL_TREE, assignment, enter),
! 		 build2 (TRY_FINALLY_EXPR, NULL_TREE, block, exit));
    node = build_expr_block (node, expr_decl);
  
    return java_complete_tree (node);
*************** patch_throw_statement (tree node, tree w
*** 18534,18540 ****
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
        parse_error_context (wfl_operator,
!     "Can't throw `%s'; it must be a subclass of class `java.lang.Throwable'",
  			   lang_printable_name (type, 0));
        /* If the thrown expression was a reference, we further the
           compile-time check. */
--- 18747,18753 ----
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
        parse_error_context (wfl_operator,
!     "Can't throw %qs; it must be a subclass of class %<java.lang.Throwable%>",
  			   lang_printable_name (type, 0));
        /* If the thrown expression was a reference, we further the
           compile-time check. */
*************** patch_throw_statement (tree node, tree w
*** 18563,18569 ****
  	if (DECL_CONSTRUCTOR_P (current)
  	    && !check_thrown_exceptions_do (TREE_TYPE (expr)))
  	  {
! 	    parse_error_context (wfl_operator, "Checked exception `%s' can't be thrown in instance initializer (not all declared constructor are declaring it in their `throws' clause)",
  				 lang_printable_name (TREE_TYPE (expr), 0));
  	    return error_mark_node;
  	  }
--- 18776,18782 ----
  	if (DECL_CONSTRUCTOR_P (current)
  	    && !check_thrown_exceptions_do (TREE_TYPE (expr)))
  	  {
! 	    parse_error_context (wfl_operator, "Checked exception %qs can't be thrown in instance initializer (not all declared constructor are declaring it in their %<throws%> clause)",
  				 lang_printable_name (TREE_TYPE (expr), 0));
  	    return error_mark_node;
  	  }
*************** patch_throw_statement (tree node, tree w
*** 18584,18590 ****
  	 only if there is something after the list of checked
  	 exception thrown by the current function (if any). */
        if (IN_TRY_BLOCK_P ())
! 	parse_error_context (wfl_operator, "Checked exception `%s' can't be caught by any of the catch clause(s) of the surrounding `try' block",
  			     lang_printable_name (type, 0));
        /* If we have no surrounding try statement and the method doesn't have
  	 any throws, report it now. FIXME */
--- 18797,18803 ----
  	 only if there is something after the list of checked
  	 exception thrown by the current function (if any). */
        if (IN_TRY_BLOCK_P ())
! 	parse_error_context (wfl_operator, "Checked exception %qs can't be caught by any of the catch clause(s) of the surrounding %<try%> block",
  			     lang_printable_name (type, 0));
        /* If we have no surrounding try statement and the method doesn't have
  	 any throws, report it now. FIXME */
*************** patch_throw_statement (tree node, tree w
*** 18597,18613 ****
  	{
  	  if (DECL_CLINIT_P (current_function_decl))
  	    parse_error_context (wfl_operator,
!                    "Checked exception `%s' can't be thrown in initializer",
  				 lang_printable_name (type, 0));
  	  else
  	    parse_error_context (wfl_operator,
!                    "Checked exception `%s' isn't thrown from a `try' block",
  				 lang_printable_name (type, 0));
  	}
        /* Otherwise, the current method doesn't have the appropriate
           throws declaration */
        else
! 	parse_error_context (wfl_operator, "Checked exception `%s' doesn't match any of current method's `throws' declaration(s)",
  			     lang_printable_name (type, 0));
        return error_mark_node;
      }
--- 18810,18826 ----
  	{
  	  if (DECL_CLINIT_P (current_function_decl))
  	    parse_error_context (wfl_operator,
!                    "Checked exception %qs can't be thrown in initializer",
  				 lang_printable_name (type, 0));
  	  else
  	    parse_error_context (wfl_operator,
!                    "Checked exception %qs isn't thrown from a %<try%> block",
  				 lang_printable_name (type, 0));
  	}
        /* Otherwise, the current method doesn't have the appropriate
           throws declaration */
        else
! 	parse_error_context (wfl_operator, "Checked exception %qs doesn't match any of current method's %<throws%> declaration(s)",
  			     lang_printable_name (type, 0));
        return error_mark_node;
      }
*************** patch_throw_statement (tree node, tree w
*** 18625,18631 ****
     effectively caught from where DECL is invoked.  THIS_EXPR is the
     expression that computes `this' for the method call.  */
  static void
! check_thrown_exceptions (int location, tree decl, tree this_expr)
  {
    tree throws;
    int is_array_call = 0;
--- 18838,18851 ----
     effectively caught from where DECL is invoked.  THIS_EXPR is the
     expression that computes `this' for the method call.  */
  static void
! check_thrown_exceptions (
! #ifdef USE_MAPPED_LOCATION
! 			 source_location location,
! #else
! 
! 			 int location,
! #endif
! 			 tree decl, tree this_expr)
  {
    tree throws;
    int is_array_call = 0;
*************** check_thrown_exceptions (int location, t
*** 18648,18662 ****
  	if (is_array_call && DECL_NAME (decl) == get_identifier ("clone"))
  	  continue;
  
  	EXPR_WFL_LINECOL (wfl_operator) = location;
  	if (DECL_FINIT_P (current_function_decl))
  	  parse_error_context
!             (wfl_operator, "Exception `%s' can't be thrown in initializer",
  	     lang_printable_name (TREE_VALUE (throws), 0));
  	else
  	  {
  	    parse_error_context
! 	      (wfl_operator, "Exception `%s' must be caught, or it must be declared in the `throws' clause of `%s'",
  	       lang_printable_name (TREE_VALUE (throws), 0),
  	       (DECL_INIT_P (current_function_decl) ?
  		IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))) :
--- 18868,18886 ----
  	if (is_array_call && DECL_NAME (decl) == get_identifier ("clone"))
  	  continue;
  
+ #ifdef USE_MAPPED_LOCATION
+ 	SET_EXPR_LOCATION (wfl_operator, location);
+ #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
! 	      (wfl_operator, "Exception %qs must be caught, or it must be declared in the %<throws%> clause of %qs",
  	       lang_printable_name (TREE_VALUE (throws), 0),
  	       (DECL_INIT_P (current_function_decl) ?
  		IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))) :
*************** patch_conditional_expr (tree node, tree 
*** 18752,18759 ****
    tree t1, t2, patched;
    int error_found = 0;
  
!   /* Operands of ?: might be StringBuffers crafted as a result of a
!      string concatenation. Obtain a descent operand here.  */
    if ((patched = patch_string (op1)))
      TREE_OPERAND (node, 1) = op1 = patched;
    if ((patched = patch_string (op2)))
--- 18976,18985 ----
    tree t1, t2, patched;
    int error_found = 0;
  
!   /* The condition and operands of ?: might be StringBuffers crafted
!      as a result of a string concatenation.  Obtain decent ones here.  */
!   if ((patched = patch_string (cond)))
!     TREE_OPERAND (node, 0) = cond = patched;
    if ((patched = patch_string (op1)))
      TREE_OPERAND (node, 1) = op1 = patched;
    if ((patched = patch_string (op2)))
*************** patch_conditional_expr (tree node, tree 
*** 18767,18773 ****
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_cond);
        parse_error_context (wfl_operator,
!                "Incompatible type for `?:'. Can't convert `%s' to `boolean'",
  			   lang_printable_name (TREE_TYPE (cond), 0));
        error_found = 1;
      }
--- 18993,18999 ----
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_cond);
        parse_error_context (wfl_operator,
!                "Incompatible type for %<?:%>. Can't convert %qs to %<boolean%>",
  			   lang_printable_name (TREE_TYPE (cond), 0));
        error_found = 1;
      }
*************** patch_conditional_expr (tree node, tree 
*** 18835,18841 ****
        char *t = xstrdup (lang_printable_name (t1, 0));
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
        parse_error_context (wfl_operator,
! 		 "Incompatible type for `?:'. Can't convert `%s' to `%s'",
  			   t, lang_printable_name (t2, 0));
        free (t);
        error_found = 1;
--- 19061,19067 ----
        char *t = xstrdup (lang_printable_name (t1, 0));
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
        parse_error_context (wfl_operator,
! 		 "Incompatible type for %<?:%>. Can't convert %qs to %qs",
  			   t, lang_printable_name (t2, 0));
        free (t);
        error_found = 1;
*************** fold_constant_for_init (tree node, tree 
*** 18991,19006 ****
  	    }
  	  else
  	    {
! 	      /* Install the proper context for the field resolution.
! 		 The prior context is restored once the name is
! 		 properly qualified. */
  	      tree saved_current_class = current_class;
  	      /* Wait until the USE_COMPONENT_REF re-write.  FIXME. */
  	      current_class = DECL_CONTEXT (context);
  	      qualify_ambiguous_name (node);
  	      current_class = saved_current_class;
! 	      if (resolve_field_access (node, &decl, NULL)
! 		  && decl != NULL_TREE)
  		return fold_constant_for_init (decl, decl);
  	      return NULL_TREE;
  	    }
--- 19217,19232 ----
  	    }
  	  else
  	    {
! 	      tree r = NULL_TREE;
! 	      /* Install the proper context for the field resolution.  */
  	      tree saved_current_class = current_class;
  	      /* Wait until the USE_COMPONENT_REF re-write.  FIXME. */
  	      current_class = DECL_CONTEXT (context);
  	      qualify_ambiguous_name (node);
+ 	      r = resolve_field_access (node, &decl, NULL);
+ 	      /* Restore prior context.  */
  	      current_class = saved_current_class;
! 	      if (r != error_mark_node && decl != NULL_TREE)
  		return fold_constant_for_init (decl, decl);
  	      return NULL_TREE;
  	    }
*************** init_src_parse (void)
*** 19054,19075 ****
  /* This section deals with the functions that are called when tables
     recording class initialization information are traversed.  */
  
- /* Attach to PTR (a block) the declaration found in ENTRY. */
- 
- static int
- attach_init_test_initialization_flags (void **entry, void *ptr)
- {
-   tree block = (tree)ptr;
-   struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
- 
-   if (block != error_mark_node)
-     {
-       TREE_CHAIN (ite->value) = BLOCK_EXPR_DECLS (block);
-       BLOCK_EXPR_DECLS (block) = ite->value;
-     }
-   return true;
- }
- 
  /* This function is called for each class that is known definitely
     initialized when a given static method was called. This function
     augments a compound expression (INFO) storing all assignment to
--- 19280,19285 ----
*************** emit_test_initialization (void **entry_p
*** 19119,19125 ****
  
    /* Now simply augment the compound that holds all the assignments
       pertaining to this method invocation. */
!   init = build (MODIFY_EXPR, boolean_type_node, decl, boolean_true_node);
    TREE_SIDE_EFFECTS (init) = 1;
    TREE_VALUE (l) = add_stmt_to_compound (TREE_VALUE (l), void_type_node, init);
    TREE_SIDE_EFFECTS (TREE_VALUE (l)) = 1;
--- 19329,19335 ----
  
    /* Now simply augment the compound that holds all the assignments
       pertaining to this method invocation. */
!   init = build2 (MODIFY_EXPR, boolean_type_node, decl, boolean_true_node);
    TREE_SIDE_EFFECTS (init) = 1;
    TREE_VALUE (l) = add_stmt_to_compound (TREE_VALUE (l), void_type_node, init);
    TREE_SIDE_EFFECTS (TREE_VALUE (l)) = 1;
*************** emit_test_initialization (void **entry_p
*** 19127,19131 ****
--- 19337,19358 ----
    return true;
  }
  
+ #ifdef __XGETTEXT__
+ /* Depending on the version of Bison used to compile this grammar,
+    it may issue generic diagnostics spelled "syntax error" or
+    "parse error".  To prevent this from changing the translation
+    template randomly, we list all the variants of this particular
+    diagnostic here.  Translators: there is no fine distinction
+    between diagnostics with "syntax error" in them, and diagnostics
+    with "parse error" in them.  It's okay to give them both the same
+    translation.  */
+ const char d1[] = N_("syntax error");
+ const char d2[] = N_("parse error");
+ const char d3[] = N_("syntax error; also virtual memory exhausted");
+ const char d4[] = N_("parse error; also virtual memory exhausted");
+ const char d5[] = N_("syntax error: cannot back up");
+ const char d6[] = N_("parse error: cannot back up");
+ #endif
+ 
  #include "gt-java-parse.h"
  #include "gtype-java.h"
diff -Nrcpad gcc-3.4.3/gcc/java/parse.h gcc-4.0.0/gcc/java/parse.h
*** gcc-3.4.3/gcc/java/parse.h	Thu Oct  9 05:44:57 2003
--- gcc-4.0.0/gcc/java/parse.h	Fri Oct 15 18:43:10 2004
***************
*** 1,5 ****
  /* Language parser definitions for the GNU compiler for the Java(TM) language.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
     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
     Free Software Foundation, Inc.
     Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
  
*************** extern tree stabilize_reference (tree);
*** 89,94 ****
--- 89,111 ----
  #define MODIFIER_WFL(M)   (ctxp->modifier_ctx [(M) - PUBLIC_TK])
  
  /* Check on modifiers */
+ #ifdef USE_MAPPED_LOCATION
+ #define THIS_MODIFIER_ONLY(f, m, v, count, l)				\
+   if ((f) & (m))							\
+     {									\
+       tree node = MODIFIER_WFL (v);					\
+       if (!l)								\
+         l = node;							\
+       else								\
+ 	{								\
+ 	  expanded_location lloc = expand_location (EXPR_LOCATION (l));	\
+ 	  expanded_location nloc = expand_location (EXPR_LOCATION (node)); \
+ 	  if (nloc.column > lloc.column || nloc.line > lloc.line)	\
+ 	    l = node;							\
+ 	}								\
+       count++;								\
+     }
+ #else
  #define THIS_MODIFIER_ONLY(f, m, v, count, l)				\
    if ((f) & (m))							\
      {									\
*************** extern tree stabilize_reference (tree);
*** 101,106 ****
--- 118,124 ----
          l = node;							\
        count++;								\
      }
+ #endif
  
  #define ABSTRACT_CHECK(FLAG, V, CL, S)				\
    if ((FLAG) & (V))						\
*************** extern tree stabilize_reference (tree);
*** 140,153 ****
    {                                                                          \
      if (flag_redundant && (cl) && ((flags) & (__modifier)))		     \
        parse_warning_context (cl,                                             \
!      "Discouraged redundant use of `%s' modifier in declaration of %s",      \
  			     java_accstring_lookup (__modifier), arg);       \
    }
  #define OBSOLETE_MODIFIER_WARNING2(cl, flags, __modifier, arg1, arg2)        \
    {                                                                          \
      if (flag_redundant && (cl) && ((flags) & (__modifier)))		     \
        parse_warning_context (cl,                                             \
!      "Discouraged redundant use of `%s' modifier in declaration of %s `%s'", \
  			     java_accstring_lookup (__modifier), arg1, arg2);\
    }
  
--- 158,171 ----
    {                                                                          \
      if (flag_redundant && (cl) && ((flags) & (__modifier)))		     \
        parse_warning_context (cl,                                             \
!      "Discouraged redundant use of %qs modifier in declaration of %s",      \
  			     java_accstring_lookup (__modifier), arg);       \
    }
  #define OBSOLETE_MODIFIER_WARNING2(cl, flags, __modifier, arg1, arg2)        \
    {                                                                          \
      if (flag_redundant && (cl) && ((flags) & (__modifier)))		     \
        parse_warning_context (cl,                                             \
!      "Discouraged redundant use of %qs modifier in declaration of %s %qs", \
  			     java_accstring_lookup (__modifier), arg1, arg2);\
    }
  
*************** extern tree stabilize_reference (tree);
*** 163,173 ****
     && !TREE_TYPE (NODE) 				\
     && TREE_CODE (TYPE_NAME (NODE)) == IDENTIFIER_NODE)
  
  /* Set the EMIT_LINE_NOTE flag of a EXPR_WLF to 1 if debug information
     are requested. Works in the context of a parser rule. */
  #define JAVA_MAYBE_GENERATE_DEBUG_INFO(node)		\
!   (debug_info_level != DINFO_LEVEL_NONE ? 		\
!     EXPR_WFL_EMIT_LINE_NOTE (node) = 1, node : node)
  
  /* Types classification, according to the JLS, section 4.2 */
  #define JFLOAT_TYPE_P(TYPE)      (TYPE && TREE_CODE ((TYPE)) == REAL_TYPE)
--- 181,193 ----
     && !TREE_TYPE (NODE) 				\
     && TREE_CODE (TYPE_NAME (NODE)) == IDENTIFIER_NODE)
  
+ #ifndef USE_MAPPED_LOCATION
  /* Set the EMIT_LINE_NOTE flag of a EXPR_WLF to 1 if debug information
     are requested. Works in the context of a parser rule. */
  #define JAVA_MAYBE_GENERATE_DEBUG_INFO(node)		\
!   do {if (debug_info_level != DINFO_LEVEL_NONE)	\
!       EXPR_WFL_EMIT_LINE_NOTE (node) = 1; } while (0)
! #endif
  
  /* Types classification, according to the JLS, section 4.2 */
  #define JFLOAT_TYPE_P(TYPE)      (TYPE && TREE_CODE ((TYPE)) == REAL_TYPE)
*************** enum {
*** 329,340 ****
  /* Standard error messages */
  #define ERROR_CANT_CONVERT_TO_BOOLEAN(OPERATOR, NODE, TYPE)		\
    parse_error_context ((OPERATOR),					\
!     "Incompatible type for `%s'. Can't convert `%s' to boolean",	\
      operator_string ((NODE)), lang_printable_name ((TYPE),0))
  
  #define ERROR_CANT_CONVERT_TO_NUMERIC(OPERATOR, NODE, TYPE)		\
    parse_error_context ((OPERATOR),					\
!       "Incompatible type for `%s'. Can't convert `%s' to numeric type",	\
        operator_string ((NODE)), lang_printable_name ((TYPE), 0))
  
  #define ERROR_CAST_NEEDED_TO_INTEGRAL(OPERATOR, NODE, TYPE)		\
--- 349,360 ----
  /* Standard error messages */
  #define ERROR_CANT_CONVERT_TO_BOOLEAN(OPERATOR, NODE, TYPE)		\
    parse_error_context ((OPERATOR),					\
!     "Incompatible type for %qs. Can't convert %qs to boolean",	\
      operator_string ((NODE)), lang_printable_name ((TYPE),0))
  
  #define ERROR_CANT_CONVERT_TO_NUMERIC(OPERATOR, NODE, TYPE)		\
    parse_error_context ((OPERATOR),					\
!       "Incompatible type for %qs. Can't convert %qs to numeric type",	\
        operator_string ((NODE)), lang_printable_name ((TYPE), 0))
  
  #define ERROR_CAST_NEEDED_TO_INTEGRAL(OPERATOR, NODE, TYPE)		\
*************** do {									\
*** 342,360 ****
    tree _operator = (OPERATOR), _node = (NODE), _type = (TYPE);		\
    if (JPRIMITIVE_TYPE_P (_type))					\
      parse_error_context (_operator,					\
! "Incompatible type for `%s'. Explicit cast needed to convert `%s' to integral",\
  			 operator_string(_node),			\
  			 lang_printable_name (_type, 0));		\
    else									\
      parse_error_context (_operator,					\
!       "Incompatible type for `%s'. Can't convert `%s' to integral",	\
  			 operator_string(_node),			\
  			 lang_printable_name (_type, 0));		\
  } while (0)
  
  #define ERROR_VARIABLE_NOT_INITIALIZED(WFL, V)			\
    parse_error_context						\
!     ((WFL), "Variable `%s' may not have been initialized",	\
       IDENTIFIER_POINTER (V))
  
  /* Definition for loop handling. This is Java's own definition of a
--- 362,380 ----
    tree _operator = (OPERATOR), _node = (NODE), _type = (TYPE);		\
    if (JPRIMITIVE_TYPE_P (_type))					\
      parse_error_context (_operator,					\
! "Incompatible type for %qs. Explicit cast needed to convert %qs to integral",\
  			 operator_string(_node),			\
  			 lang_printable_name (_type, 0));		\
    else									\
      parse_error_context (_operator,					\
!       "Incompatible type for %qs. Can't convert %qs to integral",	\
  			 operator_string(_node),			\
  			 lang_printable_name (_type, 0));		\
  } while (0)
  
  #define ERROR_VARIABLE_NOT_INITIALIZED(WFL, V)			\
    parse_error_context						\
!     ((WFL), "Variable %qs may not have been initialized",	\
       IDENTIFIER_POINTER (V))
  
  /* Definition for loop handling. This is Java's own definition of a
*************** enum jdep_code {
*** 479,485 ****
  typedef struct _jdep {
    ENUM_BITFIELD(jdep_code) kind : 8; /* Type of patch */
  
!   int  flag0 : 1;		/* Some flags */
    tree decl;			/* Tied decl/or WFL */
    tree solv;			/* What to solve */
    tree wfl;			/* Where thing to resolve where found */
--- 499,505 ----
  typedef struct _jdep {
    ENUM_BITFIELD(jdep_code) kind : 8; /* Type of patch */
  
!   unsigned int  flag0 : 1;	/* Some flags */
    tree decl;			/* Tied decl/or WFL */
    tree solv;			/* What to solve */
    tree wfl;			/* Where thing to resolve where found */
*************** typedef struct jdeplist_s jdeplist;
*** 610,631 ****
  #define GET_CURRENT_BLOCK(F) ((F) ? DECL_FUNCTION_BODY ((F)) :	\
  			     current_static_block)
  
  /* Retrieve line/column from a WFL. */
  #define EXPR_WFL_GET_LINECOL(V,LINE,COL)	\
    {						\
       (LINE) = (V) >> 12;			\
       (COL) = (V) & 0xfff;			\
     }
! /* Add X to the column number information */
! #define EXPR_WFL_ADD_COL(V, X)					\
!   (V) = (((V) & 0xfffff000) | ((((V) & 0xfff) + (X)) & 0xfff))
! 
! /* Build a WFL for expression nodes */
! #define BUILD_EXPR_WFL(NODE, WFL)					\
!   build_expr_wfl ((NODE), input_filename, EXPR_WFL_LINENO ((WFL)), 	\
! 		  EXPR_WFL_COLNO ((WFL)))
  
! #define EXPR_WFL_QUALIFICATION(WFL) TREE_OPERAND ((WFL), 2)
  #define QUAL_WFL(NODE) TREE_PURPOSE (NODE)
  #define QUAL_RESOLUTION(NODE) TREE_VALUE (NODE)
  #define QUAL_DECL_TYPE(NODE) GET_SKIP_TYPE (NODE)
--- 630,645 ----
  #define GET_CURRENT_BLOCK(F) ((F) ? DECL_FUNCTION_BODY ((F)) :	\
  			     current_static_block)
  
+ #ifndef USE_MAPPED_LOCATION
  /* Retrieve line/column from a WFL. */
  #define EXPR_WFL_GET_LINECOL(V,LINE,COL)	\
    {						\
       (LINE) = (V) >> 12;			\
       (COL) = (V) & 0xfff;			\
     }
! #endif
  
! #define EXPR_WFL_QUALIFICATION(WFL) TREE_OPERAND ((WFL), 1)
  #define QUAL_WFL(NODE) TREE_PURPOSE (NODE)
  #define QUAL_RESOLUTION(NODE) TREE_VALUE (NODE)
  #define QUAL_DECL_TYPE(NODE) GET_SKIP_TYPE (NODE)
*************** typedef struct jdeplist_s jdeplist;
*** 664,680 ****
  #define BUILD_THROW(WHERE, WHAT)				\
    {								\
      (WHERE) = 							\
!       build (CALL_EXPR, void_type_node,				\
! 	     build_address_of (throw_node),			\
! 	     build_tree_list (NULL_TREE, (WHAT)), NULL_TREE);	\
      TREE_SIDE_EFFECTS ((WHERE)) = 1;				\
    }
  
  /* Set wfl_operator for the most accurate error location */
  #define SET_WFL_OPERATOR(WHICH, NODE, WFL)		\
    EXPR_WFL_LINECOL (WHICH) =				\
      (TREE_CODE (WFL) == EXPR_WITH_FILE_LOCATION ?	\
       EXPR_WFL_LINECOL (WFL) : EXPR_WFL_LINECOL (NODE))
  
  #define PATCH_METHOD_RETURN_ERROR()		\
    {						\
--- 678,701 ----
  #define BUILD_THROW(WHERE, WHAT)				\
    {								\
      (WHERE) = 							\
!       build3 (CALL_EXPR, void_type_node,			\
! 	      build_address_of (throw_node),			\
! 	      build_tree_list (NULL_TREE, (WHAT)), NULL_TREE);	\
      TREE_SIDE_EFFECTS ((WHERE)) = 1;				\
    }
  
  /* Set wfl_operator for the most accurate error location */
+ #ifdef USE_MAPPED_LOCATION
+ #define SET_WFL_OPERATOR(WHICH, NODE, WFL)		\
+   SET_EXPR_LOCATION (WHICH,				\
+     (TREE_CODE (WFL) == EXPR_WITH_FILE_LOCATION ?	\
+      EXPR_LOCATION (WFL) : EXPR_LOCATION (NODE)))
+ #else
  #define SET_WFL_OPERATOR(WHICH, NODE, WFL)		\
    EXPR_WFL_LINECOL (WHICH) =				\
      (TREE_CODE (WFL) == EXPR_WITH_FILE_LOCATION ?	\
       EXPR_WFL_LINECOL (WFL) : EXPR_WFL_LINECOL (NODE))
+ #endif
  
  #define PATCH_METHOD_RETURN_ERROR()		\
    {						\
*************** typedef struct jdeplist_s jdeplist;
*** 724,746 ****
       
  /* Parser context data structure. */
  struct parser_ctxt GTY(()) {
! 
!   const char *filename;		    /* Current filename */
    struct parser_ctxt *next;
  
!   java_lexer * GTY((skip (""))) lexer; /* Current lexer state */
    char marker_begining;		     /* Marker. Should be a sub-struct */
!   struct java_line * GTY ((skip (""))) p_line; /* Previous line */
!   struct java_line * GTY ((skip (""))) c_line; /* Current line */
!   java_lc elc;			     /* Error's line column info */
!   int ccb_indent;		     /* Keep track of {} indent, lexer */
!   int first_ccb_indent1;	     /* First { at ident level 1 */
!   int last_ccb_indent1;		     /* Last } at ident level 1 */
    int parser_ccb_indent;	     /* Keep track of {} indent, parser */
    int osb_depth;		     /* Current depth of [ in an expression */
    int osb_limit;		     /* Limit of this depth */
!   int * GTY ((skip (""))) osb_number; /* Keep track of ['s */
!   int lineno;			     /* Current lineno */
    char marker_end;		     /* End marker. Should be a sub-struct */
  
    /* The flags section */
--- 745,767 ----
       
  /* Parser context data structure. */
  struct parser_ctxt GTY(()) {
!   const char *filename;		     /* Current filename */
!   location_t file_start_location;
!   location_t save_location;
    struct parser_ctxt *next;
  
!   java_lexer * GTY((skip)) lexer; /* Current lexer state */
    char marker_begining;		     /* Marker. Should be a sub-struct */
!   int ccb_indent;		     /* Number of unmatched { seen. */
!   /* The next two fields are only source_location if USE_MAPPED_LOCATION.
!      Otherwise, they are integer line number, but we can't have #ifdefs
!      in GTY structures. */
!   source_location first_ccb_indent1; /* First { at ident level 1 */
!   source_location last_ccb_indent1;  /* Last } at ident level 1 */
    int parser_ccb_indent;	     /* Keep track of {} indent, parser */
    int osb_depth;		     /* Current depth of [ in an expression */
    int osb_limit;		     /* Limit of this depth */
!   int * GTY ((skip)) osb_number; /* Keep track of ['s */
    char marker_end;		     /* End marker. Should be a sub-struct */
  
    /* The flags section */
*************** struct parser_ctxt GTY(()) {
*** 763,770 ****
    tree class_type;		    /* Current class */
    tree function_decl;	            /* Current function decl, save/restore */
  
-   struct JCF * current_jcf;	    /* CU jcf */
- 
    int prevent_ese;	            /* Prevent expression statement error */
  
    int formal_parameter_number;	    /* Number of parameters found */
--- 784,789 ----
*************** struct parser_ctxt GTY(()) {
*** 774,780 ****
  
    /* These two lists won't survive file traversal */
    tree  class_list;		    /* List of classes in a CU */
!   jdeplist * GTY((skip (""))) classd_list; /* Classe dependencies in a CU */
    
    tree  current_parsed_class;	    /* Class currently parsed */
    tree  current_parsed_class_un;    /* Curr. parsed class unqualified name */
--- 793,799 ----
  
    /* These two lists won't survive file traversal */
    tree  class_list;		    /* List of classes in a CU */
!   jdeplist * GTY((skip)) classd_list; /* Classe dependencies in a CU */
    
    tree  current_parsed_class;	    /* Class currently parsed */
    tree  current_parsed_class_un;    /* Curr. parsed class unqualified name */
*************** struct parser_ctxt GTY(()) {
*** 807,813 ****
     an inner class is pushed. After, use FIXME. */
  #define CPC_INNER_P() GET_CPC_LIST ()
  
! /* Get the currently parsed class DECL_TYPE node.  */
  #define GET_CPC() TREE_VALUE (GET_CPC_LIST ())
  
  /* Get the currently parsed class unqualified IDENTIFIER_NODE.  */
--- 826,832 ----
     an inner class is pushed. After, use FIXME. */
  #define CPC_INNER_P() GET_CPC_LIST ()
  
! /* The TYPE_DECL node of the class currently being parsed.  */
  #define GET_CPC() TREE_VALUE (GET_CPC_LIST ())
  
  /* Get the currently parsed class unqualified IDENTIFIER_NODE.  */
*************** struct parser_ctxt GTY(()) {
*** 842,848 ****
  	    != TYPE_NAME (TREE_TYPE (TREE_TYPE (current_this))))	      \
  	&& !inherits_from_p (TREE_TYPE (TREE_TYPE (current_this)),	      \
  			     TREE_TYPE (DECL_CONTEXT (TYPE_NAME (T))))	      \
!         && !common_enclosing_context_p (TREE_TYPE (TREE_TYPE (current_this)), \
  					(T))                                  \
  	&& INNER_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (current_this)))          \
  	&& !inherits_from_p                                                   \
--- 861,867 ----
  	    != TYPE_NAME (TREE_TYPE (TREE_TYPE (current_this))))	      \
  	&& !inherits_from_p (TREE_TYPE (TREE_TYPE (current_this)),	      \
  			     TREE_TYPE (DECL_CONTEXT (TYPE_NAME (T))))	      \
!         && !common_enclosing_instance_p (TREE_TYPE (TREE_TYPE (current_this)),\
  					(T))                                  \
  	&& INNER_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (current_this)))          \
  	&& !inherits_from_p                                                   \
*************** struct parser_ctxt GTY(()) {
*** 910,918 ****
      TREE_PURPOSE (CPC_INSTANCE_INITIALIZER_LIST (C)) = (S);
  
  /* This is used by the lexer to communicate with the parser.  It is
!    set on an integer constant if the radix is 10, so that the parser
     can correctly diagnose a numeric overflow.  */
! #define JAVA_RADIX10_FLAG(NODE) TREE_LANG_FLAG_0(NODE)
  
  #ifndef JC1_LITE
  void java_complete_class (void);
--- 929,937 ----
      TREE_PURPOSE (CPC_INSTANCE_INITIALIZER_LIST (C)) = (S);
  
  /* This is used by the lexer to communicate with the parser.  It is
!    set on an integer constant if the radix is NOT 10, so that the parser
     can correctly diagnose a numeric overflow.  */
! #define JAVA_NOT_RADIX10_FLAG(NODE) TREE_LANG_FLAG_0(NODE)
  
  #ifndef JC1_LITE
  void java_complete_class (void);
diff -Nrcpad gcc-3.4.3/gcc/java/parse.y gcc-4.0.0/gcc/java/parse.y
*** gcc-3.4.3/gcc/java/parse.y	Thu Feb 26 14:12:19 2004
--- gcc-4.0.0/gcc/java/parse.y	Tue Feb  1 02:36:29 2005
***************
*** 1,6 ****
  /* Source code parsing and tree node generation 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,6 ----
  /* Source code parsing and tree node generation 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)
  
*************** definitions and other extensions.  */
*** 57,62 ****
--- 57,64 ----
  #include "real.h"
  #include "obstack.h"
  #include "toplev.h"
+ #include "pretty-print.h"
+ #include "diagnostic.h"
  #include "flags.h"
  #include "java-tree.h"
  #include "jcf.h"
*************** definitions and other extensions.  */
*** 72,80 ****
--- 74,84 ----
  #include "debug.h"
  #include "tree-inline.h"
  #include "cgraph.h"
+ #include "target.h"
  
  /* Local function prototypes */
  static char *java_accstring_lookup (int);
+ static const char *accessibility_string (int);
  static void  classitf_redefinition_error (const char *,tree, tree, tree);
  static void  variable_redefinition_error (tree, tree, tree, int);
  static tree  create_class (int, tree, tree, tree);
*************** static tree lookup_java_method2 (tree, t
*** 93,102 ****
  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 *msg, ...)
!   ATTRIBUTE_PRINTF_2;
! static void issue_warning_error_from_context (tree, const char *msg, va_list)
!   ATTRIBUTE_PRINTF (2, 0);
  static void parse_ctor_invocation_error (void);
  static tree parse_jdk1_1_error (const char *);
  static void complete_class_report_errors (jdep *);
--- 97,110 ----
  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 *msgid, ...);
! #ifdef USE_MAPPED_LOCATION
! static void issue_warning_error_from_context
!   (source_location, const char *msgid, va_list *);
! #else
! static void issue_warning_error_from_context
!   (tree, const char *msgid, va_list *);
! #endif
  static void parse_ctor_invocation_error (void);
  static tree parse_jdk1_1_error (const char *);
  static void complete_class_report_errors (jdep *);
*************** static void read_import_dir (tree);
*** 105,111 ****
  static int find_in_imports_on_demand (tree, tree);
  static void find_in_imports (tree, tree);
  static void check_inner_class_access (tree, tree, tree);
! static int check_pkg_class_access (tree, tree, bool);
  static void register_package (tree);
  static tree resolve_package (tree, tree *, tree *);
  static tree resolve_class (tree, tree, tree, tree);
--- 113,119 ----
  static int find_in_imports_on_demand (tree, tree);
  static void find_in_imports (tree, tree);
  static void check_inner_class_access (tree, tree, tree);
! static int check_pkg_class_access (tree, tree, bool, tree);
  static void register_package (tree);
  static tree resolve_package (tree, tree *, tree *);
  static tree resolve_class (tree, tree, tree, tree);
*************** static tree resolve_expression_name (tre
*** 120,127 ****
  static tree maybe_create_class_interface_decl (tree, tree, tree, tree);
  static int check_class_interface_creation (int, int, tree, tree, tree, tree);
  static tree patch_method_invocation (tree, tree, tree, int, int *, tree *);
- static int breakdown_qualified (tree *, tree *, tree);
- static int in_same_package (tree, tree);
  static tree resolve_and_layout (tree, tree);
  static tree qualify_and_find (tree, tree, tree);
  static tree resolve_no_layout (tree, tree);
--- 128,133 ----
*************** static tree java_complete_tree (tree);
*** 142,147 ****
--- 148,154 ----
  static tree maybe_generate_pre_expand_clinit (tree);
  static int analyze_clinit_body (tree, tree);
  static int maybe_yank_clinit (tree);
+ static void start_complete_expand_method (tree);
  static void java_complete_expand_method (tree);
  static void java_expand_method_bodies (tree);
  static int  unresolved_type_p (tree, tree *);
*************** static int build_type_name_from_array_na
*** 174,180 ****
--- 181,191 ----
  static tree build_array_from_name (tree, tree, tree, tree *);
  static tree build_array_ref (int, tree, tree);
  static tree patch_array_ref (tree);
+ #ifdef USE_MAPPED_LOCATION
+ static tree make_qualified_name (tree, tree, source_location);
+ #else
  static tree make_qualified_name (tree, tree, int);
+ #endif
  static tree merge_qualified_name (tree, tree);
  static tree make_qualified_primary (tree, tree, int);
  static int resolve_qualified_expression_name (tree, tree *, tree *, tree *);
*************** static void check_deprecation (tree, tre
*** 195,201 ****
  static int class_in_current_package (tree);
  static tree build_if_else_statement (int, tree, tree, tree);
  static tree patch_if_else_statement (tree);
- static tree add_stmt_to_compound (tree, tree, tree);
  static tree add_stmt_to_block (tree, tree, tree);
  static tree patch_exit_expr (tree);
  static tree build_labeled_block (int, tree);
--- 206,211 ----
*************** static tree build_string_concatenation (
*** 214,226 ****
--- 224,244 ----
  static tree patch_string_cst (tree);
  static tree patch_string (tree);
  static tree encapsulate_with_try_catch (int, tree, tree, tree);
+ #ifdef USE_MAPPED_LOCATION
+ static tree build_assertion (source_location, tree, tree);
+ #else
  static tree build_assertion (int, tree, tree);
+ #endif
  static tree build_try_statement (int, tree, tree);
  static tree build_try_finally_statement (int, tree, tree);
  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 tree maybe_build_array_element_wf
*** 259,265 ****
  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 tree strip_out_static_field_access_decl (tree);
  static jdeplist *reverse_jdep_list (struct parser_ctxt *);
  static void static_ref_err (tree, tree, tree);
  static void parser_add_interface (tree, tree, tree);
--- 277,282 ----
*************** static int pop_current_osb (struct parse
*** 294,300 ****
  
  static tree maybe_make_nested_class_name (tree);
  static int make_nested_class_name (tree);
- static void set_nested_class_simple_name_value (tree, int);
  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);
--- 311,316 ----
*************** static int outer_field_expanded_access_p
*** 321,327 ****
  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 (int, tree);
  static void patch_anonymous_class (tree, tree, tree);
  static void add_inner_class_fields (tree, tree);
  
--- 337,343 ----
  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);
  static void patch_anonymous_class (tree, tree, tree);
  static void add_inner_class_fields (tree, tree);
  
*************** static tree build_dot_class_method_invoc
*** 330,336 ****
  static void create_new_parser_context (int);
  static tree maybe_build_class_init_for_field (tree, tree);
  
- static int attach_init_test_initialization_flags (void **, void *);
  static int emit_test_initialization (void **, void *);
  
  static char *string_convert_int_cst (tree);
--- 346,351 ----
*************** static GTY(()) tree src_parse_roots[1];
*** 444,455 ****
--- 459,482 ----
    int sub_token;
    struct {
      int token;
+ #ifdef USE_MAPPED_LOCATION
+     source_location location;
+ #else
      int location;
+ #endif
    } operator;
    int value;
  }
  
  %{
+ #ifdef USE_MAPPED_LOCATION
+ #define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \
+   SET_EXPR_LOCATION(EXPR, (TOKEN).location)
+ #else
+ #define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \
+   (EXPR_WFL_LINECOL (EXPR) = (TOKEN).location)
+ #endif
+ 
  #include "lex.c"
  %}
  
*************** static GTY(()) tree src_parse_roots[1];
*** 544,551 ****
  			if_then_else_statement_nsi while_statement_nsi
  			for_statement_nsi statement_expression_list for_init
  			for_update statement_expression expression_statement
! 			primary_no_new_array expression primary
! 			array_creation_expression array_type
  			class_instance_creation_expression field_access
  			method_invocation array_access something_dot_new
  			argument_list postfix_expression while_expression
--- 571,578 ----
  			if_then_else_statement_nsi while_statement_nsi
  			for_statement_nsi statement_expression_list for_init
  			for_update statement_expression expression_statement
! 			primary_no_new_array expression primary array_type
! 			array_creation_initialized array_creation_uninitialized
  			class_instance_creation_expression field_access
  			method_invocation array_access something_dot_new
  			argument_list postfix_expression while_expression
*************** single_type_import_declaration:
*** 744,750 ****
  		      tree err = find_name_in_single_imports (last_name);
  		      if (err && err != name)
  			parse_error_context
! 			  ($2, "Ambiguous class: `%s' and `%s'",
  			   IDENTIFIER_POINTER (name),
  			   IDENTIFIER_POINTER (err));
  		      else
--- 771,777 ----
  		      tree err = find_name_in_single_imports (last_name);
  		      if (err && err != name)
  			parse_error_context
! 			  ($2, "Ambiguous class: %qs and %qs",
  			   IDENTIFIER_POINTER (name),
  			   IDENTIFIER_POINTER (err));
  		      else
*************** modifiers:
*** 810,816 ****
  		  int acc = (1 << $2);
  		  if ($$ & acc)
  		    parse_error_context
! 		      (ctxp->modifier_ctx [$2], "Modifier `%s' declared twice",
  		       java_accstring_lookup (acc));
  		  else
  		    {
--- 837,843 ----
  		  int acc = (1 << $2);
  		  if ($$ & acc)
  		    parse_error_context
! 		      (ctxp->modifier_ctx [$2], "Modifier %qs declared twice",
  		       java_accstring_lookup (acc));
  		  else
  		    {
*************** class_body:
*** 883,898 ****
  		{
  		  /* Store the location of the `}' when doing xrefs */
  		  if (flag_emit_xref)
! 		    DECL_END_SOURCE_LINE (GET_CPC ()) =
! 		      EXPR_WFL_ADD_COL ($2.location, 1);
  		  $$ = 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 ()) =
! 		      EXPR_WFL_ADD_COL ($3.location, 1);
  		  $$ = GET_CPC ();
  		}
  ;
--- 910,923 ----
  		{
  		  /* 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 ();
  		}
  ;
*************** class_body_declaration:
*** 908,914 ****
  |	constructor_declaration
  |	block			/* Added, JDK1.1, instance initializer */
  		{
! 		  if ($1 != empty_stmt_node)
  		    {
  		      TREE_CHAIN ($1) = CPC_INSTANCE_INITIALIZER_STMT (ctxp);
  		      SET_CPC_INSTANCE_INITIALIZER_STMT (ctxp, $1);
--- 933,939 ----
  |	constructor_declaration
  |	block			/* Added, JDK1.1, instance initializer */
  		{
! 		  if (!IS_EMPTY_STMT ($1))
  		    {
  		      TREE_CHAIN ($1) = CPC_INSTANCE_INITIALIZER_STMT (ctxp);
  		      SET_CPC_INSTANCE_INITIALIZER_STMT (ctxp, $1);
*************** field_declaration:
*** 933,939 ****
  |	modifiers type variable_declarators SC_TK
  		{
  		  check_modifiers
! 		    ("Illegal modifier `%s' for field declaration",
  		     $1, FIELD_MODIFIERS);
  		  check_modifiers_consistency ($1);
  		  register_fields ($1, $2, $3);
--- 958,964 ----
  |	modifiers type variable_declarators SC_TK
  		{
  		  check_modifiers
! 		    ("Illegal modifier %qs for field declaration",
  		     $1, FIELD_MODIFIERS);
  		  check_modifiers_consistency ($1);
  		  register_fields ($1, $2, $3);
*************** method_declarator:
*** 1056,1062 ****
  		{ $$ = method_declarator ($1, $3); }
  |	method_declarator OSB_TK CSB_TK
  		{
! 		  EXPR_WFL_LINECOL (wfl_operator) = $2.location;
  		  TREE_PURPOSE ($1) =
  		    build_unresolved_array_type (TREE_PURPOSE ($1));
  		  parse_warning_context
--- 1081,1087 ----
  		{ $$ = method_declarator ($1, $3); }
  |	method_declarator OSB_TK CSB_TK
  		{
! 		  SET_EXPR_LOCATION_FROM_TOKEN (wfl_operator, $2);
  		  TREE_PURPOSE ($1) =
  		    build_unresolved_array_type (TREE_PURPOSE ($1));
  		  parse_warning_context
*************** formal_parameter:
*** 1108,1114 ****
  final:
  	modifiers
  		{
! 		  check_modifiers ("Illegal modifier `%s'. Only `final' was expected here",
  				   $1, ACC_FINAL);
  		  if ($1 != ACC_FINAL)
  		    MODIFIER_WFL (FINAL_TK) = build_wfl_node (NULL_TREE);
--- 1133,1139 ----
  final:
  	modifiers
  		{
! 		  check_modifiers ("Illegal modifier %qs. Only %<final%> was expected here",
  				   $1, ACC_FINAL);
  		  if ($1 != ACC_FINAL)
  		    MODIFIER_WFL (FINAL_TK) = build_wfl_node (NULL_TREE);
*************** static_initializer:
*** 1150,1162 ****
  static:				/* Test lval.sub_token here */
  	modifiers
  		{
! 		  check_modifiers ("Illegal modifier `%s' for static initializer", $1, ACC_STATIC);
  		  /* Can't have a static initializer in an innerclass */
  		  if ($1 | ACC_STATIC &&
  		      GET_CPC_LIST () && !TOPLEVEL_CLASS_DECL_P (GET_CPC ()))
  		    parse_error_context
  		      (MODIFIER_WFL (STATIC_TK),
! 		       "Can't define static initializer in class `%s'. Static initializer can only be defined in top-level classes",
  		       IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())));
  		  SOURCE_FRONTEND_DEBUG (("Modifiers: %d", $1));
  		}
--- 1175,1187 ----
  static:				/* Test lval.sub_token here */
  	modifiers
  		{
! 		  check_modifiers ("Illegal modifier %qs for static initializer", $1, ACC_STATIC);
  		  /* Can't have a static initializer in an innerclass */
  		  if ($1 | ACC_STATIC &&
  		      GET_CPC_LIST () && !TOPLEVEL_CLASS_DECL_P (GET_CPC ()))
  		    parse_error_context
  		      (MODIFIER_WFL (STATIC_TK),
! 		       "Can't define static initializer in class %qs. Static initializer can only be defined in top-level classes",
  		       IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())));
  		  SOURCE_FRONTEND_DEBUG (("Modifiers: %d", $1));
  		}
*************** constructor_body:
*** 1196,1202 ****
  	   addition (super invocation and field initialization) */
  	block_begin constructor_block_end
  		{
! 		  BLOCK_EXPR_BODY ($2) = empty_stmt_node;
  		  $$ = $2;
  		}
  |	block_begin explicit_constructor_invocation constructor_block_end
--- 1221,1227 ----
  	   addition (super invocation and field initialization) */
  	block_begin constructor_block_end
  		{
! 		  BLOCK_EXPR_BODY ($2) = build_java_empty_stmt ();
  		  $$ = $2;
  		}
  |	block_begin explicit_constructor_invocation constructor_block_end
*************** this_or_super:			/* Added, simplifies er
*** 1237,1249 ****
  	THIS_TK
  		{
  		  tree wfl = build_wfl_node (this_identifier_node);
! 		  EXPR_WFL_LINECOL (wfl) = $1.location;
  		  $$ = wfl;
  		}
  |	SUPER_TK
  		{
  		  tree wfl = build_wfl_node (super_identifier_node);
! 		  EXPR_WFL_LINECOL (wfl) = $1.location;
  		  $$ = wfl;
  		}
  ;
--- 1262,1274 ----
  	THIS_TK
  		{
  		  tree wfl = build_wfl_node (this_identifier_node);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (wfl, $1);
  		  $$ = wfl;
  		}
  |	SUPER_TK
  		{
  		  tree wfl = build_wfl_node (super_identifier_node);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (wfl, $1);
  		  $$ = wfl;
  		}
  ;
*************** block_end:
*** 1370,1380 ****
  		  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) =
! 		      EXPR_WFL_ADD_COL ($1.location, 1);
  		  $$ = exit_block ();
  		  if (!BLOCK_SUBBLOCKS ($$))
! 		    BLOCK_SUBBLOCKS ($$) = empty_stmt_node;
  		}
  ;
  
--- 1395,1404 ----
  		  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 ();
  		}
  ;
  
*************** empty_statement:
*** 1450,1459 ****
  			   (DECL_CONTEXT (current_function_decl)))))
  
  		    {
  		      EXPR_WFL_SET_LINECOL (wfl_operator, input_line, -1);
  		      parse_warning_context (wfl_operator, "An empty declaration is a deprecated feature that should not be used");
  		    }
! 		  $$ = empty_stmt_node;
  		}
  ;
  
--- 1474,1487 ----
  			   (DECL_CONTEXT (current_function_decl)))))
  
  		    {
+ #ifdef USE_MAPPED_LOCATION
+ 		      SET_EXPR_LOCATION (wfl_operator, input_location);
+ #else
  		      EXPR_WFL_SET_LINECOL (wfl_operator, input_line, -1);
+ #endif
  		      parse_warning_context (wfl_operator, "An empty declaration is a deprecated feature that should not be used");
  		    }
! 		  $$ = build_java_empty_stmt ();
  		}
  ;
  
*************** expression_statement:
*** 1487,1496 ****
  		{
  		  /* We have a statement. Generate a WFL around it so
  		     we can debug it */
  		  $$ = build_expr_wfl ($1, input_filename, input_line, 0);
  		  /* We know we have a statement, so set the debug
                       info to be eventually generate here. */
- 		  $$ = JAVA_MAYBE_GENERATE_DEBUG_INFO ($$);
  		}
  |	error SC_TK
  		{
--- 1515,1528 ----
  		{
  		  /* We have a statement. Generate a WFL around it so
  		     we can debug it */
+ #ifdef USE_MAPPED_LOCATION
+ 		  $$ = expr_add_location ($1, input_location, 1);
+ #else
  		  $$ = build_expr_wfl ($1, input_filename, input_line, 0);
+ 		  JAVA_MAYBE_GENERATE_DEBUG_INFO ($$);
+ #endif
  		  /* We know we have a statement, so set the debug
                       info to be eventually generate here. */
  		}
  |	error SC_TK
  		{
*************** switch_statement:
*** 1586,1593 ****
  switch_expression:
  	SWITCH_TK OP_TK expression CP_TK
  		{
! 		  $$ = build (SWITCH_EXPR, NULL_TREE, $3, NULL_TREE);
! 		  EXPR_WFL_LINECOL ($$) = $2.location;
  		}
  |	SWITCH_TK error
  		{yyerror ("'(' expected"); RECOVER;}
--- 1618,1626 ----
  switch_expression:
  	SWITCH_TK OP_TK expression CP_TK
  		{
! 		  $$ = build3 (SWITCH_EXPR, NULL_TREE, $3,
! 			       NULL_TREE, NULL_TREE);
! 		  SET_EXPR_LOCATION_FROM_TOKEN ($$, $2);
  		}
  |	SWITCH_TK error
  		{yyerror ("'(' expected"); RECOVER;}
*************** switch_label:
*** 1629,1641 ****
  	CASE_TK constant_expression REL_CL_TK
  		{
  		  tree lab = build1 (CASE_EXPR, NULL_TREE, $2);
! 		  EXPR_WFL_LINECOL (lab) = $1.location;
  		  java_method_add_stmt (current_function_decl, lab);
  		}
  |	DEFAULT_TK REL_CL_TK
  		{
! 		  tree lab = build (DEFAULT_EXPR, NULL_TREE, NULL_TREE);
! 		  EXPR_WFL_LINECOL (lab) = $1.location;
  		  java_method_add_stmt (current_function_decl, lab);
  		}
  |	CASE_TK error
--- 1662,1674 ----
  	CASE_TK constant_expression REL_CL_TK
  		{
  		  tree lab = build1 (CASE_EXPR, NULL_TREE, $2);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (lab, $1);
  		  java_method_add_stmt (current_function_decl, lab);
  		}
  |	DEFAULT_TK REL_CL_TK
  		{
! 		  tree lab = make_node (DEFAULT_EXPR);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (lab, $1);
  		  java_method_add_stmt (current_function_decl, lab);
  		}
  |	CASE_TK error
*************** do_statement:
*** 1687,1693 ****
  for_statement:
  	for_begin SC_TK expression SC_TK for_update CP_TK statement
  		{
! 		  if (TREE_CODE_CLASS (TREE_CODE ($3)) == 'c')
  		    $3 = build_wfl_node ($3);
  		  $$ = finish_for_loop (EXPR_WFL_LINECOL ($3), $3, $5, $7);
  		}
--- 1720,1726 ----
  for_statement:
  	for_begin SC_TK expression SC_TK for_update CP_TK statement
  		{
! 		  if (CONSTANT_CLASS_P ($3))
  		    $3 = build_wfl_node ($3);
  		  $$ = finish_for_loop (EXPR_WFL_LINECOL ($3), $3, $5, $7);
  		}
*************** for_statement:
*** 1696,1702 ****
  		  $$ = finish_for_loop (0, NULL_TREE, $4, $6);
  		  /* We have not condition, so we get rid of the EXIT_EXPR */
  		  LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY ($$), 0) =
! 		    empty_stmt_node;
  		}
  |	for_begin SC_TK error
  		{yyerror ("Invalid control expression"); RECOVER;}
--- 1729,1735 ----
  		  $$ = finish_for_loop (0, NULL_TREE, $4, $6);
  		  /* We have not condition, so we get rid of the EXIT_EXPR */
  		  LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY ($$), 0) =
! 		    build_java_empty_stmt ();
  		}
  |	for_begin SC_TK error
  		{yyerror ("Invalid control expression"); RECOVER;}
*************** for_statement_nsi:
*** 1714,1720 ****
  		  $$ = finish_for_loop (0, NULL_TREE, $4, $6);
  		  /* We have not condition, so we get rid of the EXIT_EXPR */
  		  LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY ($$), 0) =
! 		    empty_stmt_node;
  		}
  ;
  
--- 1747,1753 ----
  		  $$ = finish_for_loop (0, NULL_TREE, $4, $6);
  		  /* We have not condition, so we get rid of the EXIT_EXPR */
  		  LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY ($$), 0) =
! 		    build_java_empty_stmt ();
  		}
  ;
  
*************** for_begin:
*** 1745,1751 ****
  		}
  ;
  for_init:			/* Can be empty */
! 		{ $$ = empty_stmt_node; }
  |	statement_expression_list
  		{
  		  /* Init statement recorded within the previously
--- 1778,1784 ----
  		}
  ;
  for_init:			/* Can be empty */
! 		{ $$ = build_java_empty_stmt (); }
  |	statement_expression_list
  		{
  		  /* Init statement recorded within the previously
*************** for_init:			/* Can be empty */
*** 1763,1769 ****
  ;
  
  for_update:			/* Can be empty */
! 		{$$ = empty_stmt_node;}
  |	statement_expression_list
  		{ $$ = build_debugable_stmt (BUILD_LOCATION (), $1); }
  ;
--- 1796,1802 ----
  ;
  
  for_update:			/* Can be empty */
! 		{$$ = build_java_empty_stmt ();}
  |	statement_expression_list
  		{ $$ = build_debugable_stmt (BUILD_LOCATION (), $1); }
  ;
*************** throw_statement:
*** 1814,1820 ****
  	THROW_TK expression SC_TK
  		{
  		  $$ = build1 (THROW_EXPR, NULL_TREE, $2);
! 		  EXPR_WFL_LINECOL ($$) = $1.location;
  		}
  |	THROW_TK error
  		{yyerror ("Missing term"); RECOVER;}
--- 1847,1853 ----
  	THROW_TK expression SC_TK
  		{
  		  $$ = build1 (THROW_EXPR, NULL_TREE, $2);
! 		  SET_EXPR_LOCATION_FROM_TOKEN ($$, $1);
  		}
  |	THROW_TK error
  		{yyerror ("Missing term"); RECOVER;}
*************** assert_statement:
*** 1840,1846 ****
  synchronized_statement:
  	synchronized OP_TK expression CP_TK block
  		{
! 		  $$ = build (SYNCHRONIZED_EXPR, NULL_TREE, $3, $5);
  		  EXPR_WFL_LINECOL ($$) =
  		    EXPR_WFL_LINECOL (MODIFIER_WFL (SYNCHRONIZED_TK));
  		}
--- 1873,1879 ----
  synchronized_statement:
  	synchronized OP_TK expression CP_TK block
  		{
! 		  $$ = build2 (SYNCHRONIZED_EXPR, NULL_TREE, $3, $5);
  		  EXPR_WFL_LINECOL ($$) =
  		    EXPR_WFL_LINECOL (MODIFIER_WFL (SYNCHRONIZED_TK));
  		}
*************** synchronized:
*** 1858,1864 ****
  	modifiers
  		{
  		  check_modifiers (
!              "Illegal modifier `%s'. Only `synchronized' was expected here",
  				   $1, ACC_SYNCHRONIZED);
  		  if ($1 != ACC_SYNCHRONIZED)
  		    MODIFIER_WFL (SYNCHRONIZED_TK) =
--- 1891,1897 ----
  	modifiers
  		{
  		  check_modifiers (
!              "Illegal modifier %qs. Only %<synchronized%> was expected here",
  				   $1, ACC_SYNCHRONIZED);
  		  if ($1 != ACC_SYNCHRONIZED)
  		    MODIFIER_WFL (SYNCHRONIZED_TK) =
*************** catch_clause_parameter:
*** 1912,1923 ****
                        ccpb = enter_block ();
                        init = build_assignment
                          (ASSIGN_TK, $2.location, TREE_PURPOSE ($3),
!                          build (JAVA_EXC_OBJ_EXPR, ptr_type_node));
                        declare_local_variables (0, TREE_VALUE ($3),
                                                 build_tree_list 
  					       (TREE_PURPOSE ($3), init));
!                       $$ = build1 (CATCH_EXPR, NULL_TREE, ccpb);
!                       EXPR_WFL_LINECOL ($$) = $1.location;
                      }
                    else
                      {
--- 1945,1956 ----
                        ccpb = enter_block ();
                        init = build_assignment
                          (ASSIGN_TK, $2.location, TREE_PURPOSE ($3),
!                          build0 (JAVA_EXC_OBJ_EXPR, ptr_type_node));
                        declare_local_variables (0, TREE_VALUE ($3),
                                                 build_tree_list 
  					       (TREE_PURPOSE ($3), init));
!                       $$ = build1 (JAVA_CATCH_EXPR, NULL_TREE, ccpb);
!                       SET_EXPR_LOCATION_FROM_TOKEN ($$, $1);
                      }
                    else
                      {
*************** finally:
*** 1945,1951 ****
  /* 19.12 Production from 15: Expressions  */
  primary:
  	primary_no_new_array
! |	array_creation_expression
  ;
  
  primary_no_new_array:
--- 1978,1985 ----
  /* 19.12 Production from 15: Expressions  */
  primary:
  	primary_no_new_array
! |	array_creation_uninitialized
! |	array_creation_initialized
  ;
  
  primary_no_new_array:
*************** primary_no_new_array:
*** 1960,1966 ****
  |	array_access
  |	type_literals
          /* Added, JDK1.1 inner classes. Documentation is wrong
!            refering to a 'ClassName' (class_name) rule that doesn't
             exist. Used name: instead.  */
  |	name DOT_TK THIS_TK
  		{
--- 1994,2000 ----
  |	array_access
  |	type_literals
          /* Added, JDK1.1 inner classes. Documentation is wrong
!            referring to a 'ClassName' (class_name) rule that doesn't
             exist. Used name: instead.  */
  |	name DOT_TK THIS_TK
  		{
*************** class_instance_creation_expression:
*** 2015,2031 ****
  		}
  |	something_dot_new identifier OP_TK argument_list CP_TK class_body
  |	NEW_TK error SC_TK
! 		{yyerror ("'(' expected"); DRECOVER(new_1);}
  |	NEW_TK class_type error
! 		{yyerror ("'(' expected"); RECOVER;}
  |	NEW_TK class_type OP_TK error
! 		{yyerror ("')' or term expected"); RECOVER;}
  |	NEW_TK class_type OP_TK argument_list error
! 		{yyerror ("')' expected"); RECOVER;}
  |	something_dot_new error
! 		{YYERROR_NOW; yyerror ("Identifier expected"); RECOVER;}
  |	something_dot_new identifier error
! 		{yyerror ("'(' expected"); RECOVER;}
  ;
  
  /* Created after JDK1.1 rules originally added to
--- 2049,2070 ----
  		}
  |	something_dot_new identifier OP_TK argument_list CP_TK class_body
  |	NEW_TK error SC_TK
! 		{$$ = NULL_TREE; yyerror ("'(' expected"); DRECOVER(new_1);}
  |	NEW_TK class_type error
! 		{$$ = NULL_TREE; yyerror ("'(' expected"); RECOVER;}
  |	NEW_TK class_type OP_TK error
! 		{$$ = NULL_TREE; yyerror ("')' or term expected"); RECOVER;}
  |	NEW_TK class_type OP_TK argument_list error
! 		{$$ = NULL_TREE; yyerror ("')' expected"); RECOVER;}
  |	something_dot_new error
! 		{
! 		  $$ = NULL_TREE;
! 		  YYERROR_NOW;
! 		  yyerror ("Identifier expected");
! 		  RECOVER;
! 		}
  |	something_dot_new identifier error
! 		{$$ = NULL_TREE; yyerror ("'(' expected"); RECOVER;}
  ;
  
  /* Created after JDK1.1 rules originally added to
*************** class_instance_creation_expression:
*** 2035,2041 ****
  
  anonymous_class_creation:
  	NEW_TK class_type OP_TK argument_list CP_TK
! 		{ create_anonymous_class ($1.location, $2); }
          class_body
  		{
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
--- 2074,2080 ----
  
  anonymous_class_creation:
  	NEW_TK class_type OP_TK argument_list CP_TK
! 		{ create_anonymous_class ($2); }
          class_body
  		{
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
*************** anonymous_class_creation:
*** 2062,2074 ****
  		     later on in verify_constructor_super.
  
  		     It's during the expansion of a `new' statement
! 		     refering to an anonymous class that a ctor will
  		     be generated for the anonymous class, with the
  		     right arguments. */
  
  		}
  |	NEW_TK class_type OP_TK CP_TK
! 		{ create_anonymous_class ($1.location, $2); }
          class_body
  		{
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
--- 2101,2113 ----
  		     later on in verify_constructor_super.
  
  		     It's during the expansion of a `new' statement
! 		     referring to an anonymous class that a ctor will
  		     be generated for the anonymous class, with the
  		     right arguments. */
  
  		}
  |	NEW_TK class_type OP_TK CP_TK
! 		{ create_anonymous_class ($2); }
          class_body
  		{
  		  tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
*************** argument_list:
*** 2106,2112 ****
  		{yyerror ("Missing term"); RECOVER;}
  ;
  
! array_creation_expression:
  	NEW_TK primitive_type dim_exprs
  		{ $$ = build_newarray_node ($2, $3, 0); }
  |	NEW_TK class_or_interface_type dim_exprs
--- 2145,2151 ----
  		{yyerror ("Missing term"); RECOVER;}
  ;
  
! array_creation_uninitialized:
  	NEW_TK primitive_type dim_exprs
  		{ $$ = build_newarray_node ($2, $3, 0); }
  |	NEW_TK class_or_interface_type dim_exprs
*************** array_creation_expression:
*** 2115,2123 ****
  		{ $$ = build_newarray_node ($2, $3, pop_current_osb (ctxp));}
  |	NEW_TK class_or_interface_type dim_exprs dims
  		{ $$ = build_newarray_node ($2, $3, pop_current_osb (ctxp));}
          /* Added, JDK1.1 anonymous array. Initial documentation rule
             modified */
! |	NEW_TK class_or_interface_type dims array_initializer
  		{
  		  char *sig;
  		  int osb = pop_current_osb (ctxp);
--- 2154,2169 ----
  		{ $$ = build_newarray_node ($2, $3, pop_current_osb (ctxp));}
  |	NEW_TK class_or_interface_type dim_exprs dims
  		{ $$ = build_newarray_node ($2, $3, pop_current_osb (ctxp));}
+ |	NEW_TK error CSB_TK
+ 		{yyerror ("'[' expected"); DRECOVER ("]");}
+ |	NEW_TK error OSB_TK
+ 		{yyerror ("']' expected"); RECOVER;}
+ ;
+ 
+ array_creation_initialized:
          /* Added, JDK1.1 anonymous array. Initial documentation rule
             modified */
! 	NEW_TK class_or_interface_type dims array_initializer
  		{
  		  char *sig;
  		  int osb = pop_current_osb (ctxp);
*************** array_creation_expression:
*** 2125,2132 ****
  		    obstack_grow (&temporary_obstack, "[]", 2);
  		  obstack_1grow (&temporary_obstack, '\0');
  		  sig = obstack_finish (&temporary_obstack);
! 		  $$ = build (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! 			      $2, get_identifier (sig), $4);
  		}
  |	NEW_TK primitive_type dims array_initializer
  		{
--- 2171,2178 ----
  		    obstack_grow (&temporary_obstack, "[]", 2);
  		  obstack_1grow (&temporary_obstack, '\0');
  		  sig = obstack_finish (&temporary_obstack);
! 		  $$ = build3 (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! 			       $2, get_identifier (sig), $4);
  		}
  |	NEW_TK primitive_type dims array_initializer
  		{
*************** array_creation_expression:
*** 2134,2141 ****
  		  tree type = $2;
  		  while (osb--)
  		    type = build_java_array_type (type, -1);
! 		  $$ = build (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! 			      build_pointer_type (type), NULL_TREE, $4);
  		}
  |	NEW_TK error CSB_TK
  		{yyerror ("'[' expected"); DRECOVER ("]");}
--- 2180,2187 ----
  		  tree type = $2;
  		  while (osb--)
  		    type = build_java_array_type (type, -1);
! 		  $$ = build3 (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! 			       build_pointer_type (type), NULL_TREE, $4);
  		}
  |	NEW_TK error CSB_TK
  		{yyerror ("'[' expected"); DRECOVER ("]");}
*************** field_access:
*** 2212,2218 ****
  |	SUPER_TK DOT_TK identifier
  		{
  		  tree super_wfl = build_wfl_node (super_identifier_node);
! 		  EXPR_WFL_LINECOL (super_wfl) = $1.location;
  		  $$ = make_qualified_name (super_wfl, $3, $2.location);
  		}
  |	SUPER_TK error
--- 2258,2264 ----
  |	SUPER_TK DOT_TK identifier
  		{
  		  tree super_wfl = build_wfl_node (super_identifier_node);
! 		  SET_EXPR_LOCATION_FROM_TOKEN (super_wfl, $1);
  		  $$ = make_qualified_name (super_wfl, $3, $2.location);
  		}
  |	SUPER_TK error
*************** array_access:
*** 2271,2276 ****
--- 2317,2324 ----
  		{ $$ = build_array_ref ($2.location, $1, $3); }
  |	primary_no_new_array OSB_TK expression CSB_TK
  		{ $$ = build_array_ref ($2.location, $1, $3); }
+ |	array_creation_initialized OSB_TK expression CSB_TK
+ 		{ $$ = build_array_ref ($2.location, $1, $3); }
  |	name OSB_TK error
  		{
  		  yyerror ("Missing term and ']' expected");
*************** array_access:
*** 2291,2296 ****
--- 2339,2354 ----
  		  yyerror ("']' expected");
  		  DRECOVER(array_access);
  		}
+ |	array_creation_initialized OSB_TK error
+ 		{
+ 		  yyerror ("Missing term and ']' expected");
+ 		  DRECOVER(array_access);
+ 		}
+ |	array_creation_initialized OSB_TK expression error
+ 		{
+ 		  yyerror ("']' expected");
+ 		  DRECOVER(array_access);
+ 		}
  ;
  
  postfix_expression:
*************** trap_overflow_corner_case:
*** 2323,2329 ****
  unary_expression:
  	trap_overflow_corner_case
  		{
! 		  error_if_numeric_overflow ($1);
  		  $$ = $1;
  		}
  |	MINUS_TK trap_overflow_corner_case
--- 2381,2388 ----
  unary_expression:
  	trap_overflow_corner_case
  		{
! 		  if ($1)
! 		    error_if_numeric_overflow ($1);
  		  $$ = $1;
  		}
  |	MINUS_TK trap_overflow_corner_case
*************** conditional_expression:		/* Error handli
*** 2582,2589 ****
  	conditional_or_expression
  |	conditional_or_expression REL_QM_TK expression REL_CL_TK conditional_expression
  		{
! 		  $$ = build (CONDITIONAL_EXPR, NULL_TREE, $1, $3, $5);
! 		  EXPR_WFL_LINECOL ($$) = $2.location;
  		}
  |	conditional_or_expression REL_QM_TK REL_CL_TK error
  		{
--- 2641,2648 ----
  	conditional_or_expression
  |	conditional_or_expression REL_QM_TK expression REL_CL_TK conditional_expression
  		{
! 		  $$ = build3 (CONDITIONAL_EXPR, NULL_TREE, $1, $3, $5);
! 		  SET_EXPR_LOCATION_FROM_TOKEN ($$, $2);
  		}
  |	conditional_or_expression REL_QM_TK REL_CL_TK error
  		{
*************** void
*** 2692,2707 ****
  java_pop_parser_context (int generate)
  {
    tree current;
!   struct parser_ctxt *toFree, *next;
  
    if (!ctxp)
      return;
  
-   toFree = ctxp;
    next = ctxp->next;
    if (next)
      {
!       input_line = ctxp->lineno;
        current_class = ctxp->class_type;
      }
  
--- 2751,2765 ----
  java_pop_parser_context (int generate)
  {
    tree current;
!   struct parser_ctxt *next;
  
    if (!ctxp)
      return;
  
    next = ctxp->next;
    if (next)
      {
!       input_location = ctxp->save_location;
        current_class = ctxp->class_type;
      }
  
*************** java_pop_parser_context (int generate)
*** 2714,2732 ****
    for (current = ctxp->import_list; current; current = TREE_CHAIN (current))
      IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P (TREE_VALUE (current)) = 0;
  
-   /* And restore those of the previous context */
-   if ((ctxp = next))		/* Assignment is really meant here */
-     for (current = ctxp->import_list; current; current = TREE_CHAIN (current))
-       IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P (TREE_VALUE (current)) = 1;
- 
    /* If we pushed a context to parse a class intended to be generated,
       we keep it so we can remember the class. What we could actually
       do is to just update a list of class names.  */
    if (generate)
      {
!       toFree->next = ctxp_for_generation;
!       ctxp_for_generation = toFree;
      }
  }
  
  /* Create a parser context for the use of saving some global
--- 2772,2790 ----
    for (current = ctxp->import_list; current; current = TREE_CHAIN (current))
      IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P (TREE_VALUE (current)) = 0;
  
    /* If we pushed a context to parse a class intended to be generated,
       we keep it so we can remember the class. What we could actually
       do is to just update a list of class names.  */
    if (generate)
      {
!       ctxp->next = ctxp_for_generation;
!       ctxp_for_generation = ctxp;
      }
+ 
+   /* And restore those of the previous context */
+   if ((ctxp = next))		/* Assignment is really meant here */
+     for (current = ctxp->import_list; current; current = TREE_CHAIN (current))
+       IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P (TREE_VALUE (current)) = 1;
  }
  
  /* Create a parser context for the use of saving some global
*************** java_parser_context_save_global (void)
*** 2749,2757 ****
        ctxp->saved_data_ctx = 1;
      }
  
!   ctxp->lineno = input_line;
    ctxp->class_type = current_class;
-   ctxp->filename = input_filename;
    ctxp->function_decl = current_function_decl;
    ctxp->saved_data = 1;
  }
--- 2807,2814 ----
        ctxp->saved_data_ctx = 1;
      }
  
!   ctxp->save_location = input_location;
    ctxp->class_type = current_class;
    ctxp->function_decl = current_function_decl;
    ctxp->saved_data = 1;
  }
*************** java_parser_context_save_global (void)
*** 2762,2776 ****
  void
  java_parser_context_restore_global (void)
  {
!   input_line = ctxp->lineno;
    current_class = ctxp->class_type;
-   input_filename = ctxp->filename;
    if (wfl_operator)
!     {
!       tree s;
!       BUILD_FILENAME_IDENTIFIER_NODE (s, input_filename);
!       EXPR_WFL_FILENAME_NODE (wfl_operator) = s;
!     }
    current_function_decl = ctxp->function_decl;
    ctxp->saved_data = 0;
    if (ctxp->saved_data_ctx)
--- 2819,2832 ----
  void
  java_parser_context_restore_global (void)
  {
!   input_location = ctxp->save_location;
    current_class = ctxp->class_type;
    if (wfl_operator)
! #ifdef USE_MAPPED_LOCATION
!     SET_EXPR_LOCATION (wfl_operator, ctxp->save_location);
! #else
!     EXPR_WFL_FILENAME_NODE (wfl_operator) = get_identifier (input_filename);
! #endif
    current_function_decl = ctxp->function_decl;
    ctxp->saved_data = 0;
    if (ctxp->saved_data_ctx)
*************** java_debug_context_do (int tab)
*** 2938,2945 ****
        TAB_CONTEXT (tab);
        fprintf (stderr, "filename: %s\n", copy->filename);
        TAB_CONTEXT (tab);
-       fprintf (stderr, "lineno: %d\n", copy->lineno);
-       TAB_CONTEXT (tab);
        fprintf (stderr, "package: %s\n",
  	       (copy->package ?
  		IDENTIFIER_POINTER (copy->package) : "<none>"));
--- 2994,2999 ----
*************** parse_ctor_invocation_error (void)
*** 2984,3025 ****
  static tree
  parse_jdk1_1_error (const char *msg)
  {
!   sorry (": `%s' JDK1.1(TM) feature", msg);
    java_error_count++;
!   return empty_stmt_node;
  }
  
  static int do_warning = 0;
  
  void
! yyerror (const char *msg)
  {
    static java_lc elc;
!   static int  prev_lineno;
    static const char *prev_msg;
  
-   int save_lineno;
    char *remainder, *code_from_source;
  
!   if (!force_error && prev_lineno == input_line)
      return;
  
    /* Save current error location but report latter, when the context is
       richer.  */
    if (ctxp->java_error_flag == 0)
      {
        ctxp->java_error_flag = 1;
!       elc = ctxp->elc;
        /* Do something to use the previous line if we're reaching the
  	 end of the file... */
  #ifdef VERBOSE_SKELETON
!       printf ("* Error detected (%s)\n", (msg ? msg : "(null)"));
  #endif
        return;
      }
  
    /* Ignore duplicate message on the same line. BTW, this is dubious. FIXME */
!   if (!force_error && msg == prev_msg && prev_lineno == elc.line)
      return;
  
    ctxp->java_error_flag = 0;
--- 3038,3093 ----
  static tree
  parse_jdk1_1_error (const char *msg)
  {
!   sorry (": %qs JDK1.1(TM) feature", msg);
    java_error_count++;
!   return build_java_empty_stmt ();
  }
  
  static int do_warning = 0;
  
  void
! yyerror (const char *msgid)
  {
+ #ifdef USE_MAPPED_LOCATION
+   static source_location elc;
+   expanded_location xloc = expand_location (input_location);
+   int current_line = xloc.line;
+ #else
    static java_lc elc;
!   int save_lineno;
!   int current_line = input_line;
! #endif
!   static int prev_lineno;
    static const char *prev_msg;
  
    char *remainder, *code_from_source;
  
!   if (!force_error && prev_lineno == current_line)
      return;
+ #ifndef USE_MAPPED_LOCATION
+   current_line = ctxp->lexer->token_start.line;
+ #endif
  
    /* Save current error location but report latter, when the context is
       richer.  */
    if (ctxp->java_error_flag == 0)
      {
        ctxp->java_error_flag = 1;
! #ifdef USE_MAPPED_LOCATION
!       elc = input_location;
! #else
!       elc = ctxp->lexer->token_start;
! #endif
        /* Do something to use the previous line if we're reaching the
  	 end of the file... */
  #ifdef VERBOSE_SKELETON
!       printf ("* Error detected (%s)\n", (msgid ? msgid : "(null)"));
  #endif
        return;
      }
  
    /* Ignore duplicate message on the same line. BTW, this is dubious. FIXME */
!   if (!force_error && msgid == prev_msg && prev_lineno == current_line)
      return;
  
    ctxp->java_error_flag = 0;
*************** yyerror (const char *msg)
*** 3028,3107 ****
    else
      java_error_count++;
  
!   if (elc.col == 0 && msg && msg[1] == ';')
!     {
!       elc.col  = ctxp->p_line->char_col-1;
!       elc.line = ctxp->p_line->lineno;
!     }
  
    save_lineno = input_line;
!   prev_lineno = input_line = elc.line;
!   prev_msg = msg;
  
-   code_from_source = java_get_line_col (ctxp->filename, elc.line, elc.col);
    obstack_grow0 (&temporary_obstack,
  		 code_from_source, strlen (code_from_source));
    remainder = obstack_finish (&temporary_obstack);
    if (do_warning)
!     warning ("%s.\n%s", msg, remainder);
    else
!     error ("%s.\n%s", msg, remainder);
  
    /* This allow us to cheaply avoid an extra 'Invalid expression
       statement' error report when errors have been already reported on
       the same line. This occurs when we report an error but don't have
       a synchronization point other than ';', which
       expression_statement is the only one to take care of.  */
!   ctxp->prevent_ese = input_line = save_lineno;
  }
  
  static void
! issue_warning_error_from_context (tree cl, const char *msg, va_list ap)
  {
!   const char *saved, *saved_input_filename;
    char buffer [4096];
!   vsprintf (buffer, msg, ap);
    force_error = 1;
  
!   ctxp->elc.line = EXPR_WFL_LINENO (cl);
!   ctxp->elc.col  = (EXPR_WFL_COLNO (cl) == 0xfff ? -1 :
! 		    (EXPR_WFL_COLNO (cl) == 0xffe ? -2 : EXPR_WFL_COLNO (cl)));
  
    /* We have a CL, that's a good reason for using it if it contains data */
-   saved = ctxp->filename;
    if (TREE_CODE (cl) == EXPR_WITH_FILE_LOCATION && EXPR_WFL_FILENAME_NODE (cl))
      ctxp->filename = EXPR_WFL_FILENAME (cl);
    saved_input_filename = input_filename;
    input_filename = ctxp->filename;
    java_error (NULL);
    java_error (buffer);
    ctxp->filename = saved;
    input_filename = saved_input_filename;
    force_error = 0;
  }
  
! /* Issue an error message at a current source line CL */
  
  void
! parse_error_context (tree cl, const char *msg, ...)
  {
    va_list ap;
!   va_start (ap, msg);
!   issue_warning_error_from_context (cl, msg, ap);
    va_end (ap);
  }
  
! /* Issue a warning at a current source line CL */
  
  static void
! parse_warning_context (tree cl, const char *msg, ...)
  {
    va_list ap;
!   va_start (ap, msg);
  
!   force_error = do_warning = 1;
!   issue_warning_error_from_context (cl, msg, ap);
!   do_warning = force_error = 0;
    va_end (ap);
  }
  
--- 3096,3229 ----
    else
      java_error_count++;
  
! #if 0 /* FIXME */
!   if (elc.col == 0 && msgid && msgid[1] == ';')
!     elc = ctxp->prev_line_end;
! #endif
! 
!   prev_msg = msgid;
  
+ #ifdef USE_MAPPED_LOCATION
+   prev_lineno = current_line;
+   code_from_source = java_get_line_col (xloc.file, current_line, xloc.column);
+ #else
    save_lineno = input_line;
!   prev_lineno = input_line = current_line;
!   code_from_source = java_get_line_col (input_filename, current_line,
! 					ctxp->lexer->token_start.col);
! #endif
! 
  
    obstack_grow0 (&temporary_obstack,
  		 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);
  
    /* This allow us to cheaply avoid an extra 'Invalid expression
       statement' error report when errors have been already reported on
       the same line. This occurs when we report an error but don't have
       a synchronization point other than ';', which
       expression_statement is the only one to take care of.  */
! #ifndef USE_MAPPED_LOCATION
!   input_line = save_lineno;
! #endif
!   ctxp->prevent_ese = input_line;
  }
  
  static void
! issue_warning_error_from_context (
! #ifdef USE_MAPPED_LOCATION
! 				  source_location cl,
! #else
! 				  tree cl,
! #endif
! 				  const char *msgid, va_list *ap)
  {
! #ifdef USE_MAPPED_LOCATION
!   source_location saved_location = input_location;
!   expanded_location xloc = expand_location (cl);
! #else
!   java_lc save_lc = ctxp->lexer->token_start;
!   const char *saved = ctxp->filename, *saved_input_filename;
! #endif
    char buffer [4096];
!   text_info text;
! 
!   text.err_no = errno;
!   text.args_ptr = ap;
!   text.format_spec = msgid;
!   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);
! 
    force_error = 1;
  
! #ifdef USE_MAPPED_LOCATION
!   if (xloc.file != NULL)
!     {
!       ctxp->filename = xloc.file;
!       input_location = cl;
!     }
! #else
!   ctxp->lexer->token_start.line = EXPR_WFL_LINENO (cl);
!   ctxp->lexer->token_start.col  = (EXPR_WFL_COLNO (cl) == 0xfff ? -1
! 				   : EXPR_WFL_COLNO (cl) == 0xffe ? -2
! 				   : EXPR_WFL_COLNO (cl));
  
    /* We have a CL, that's a good reason for using it if it contains data */
    if (TREE_CODE (cl) == EXPR_WITH_FILE_LOCATION && EXPR_WFL_FILENAME_NODE (cl))
      ctxp->filename = EXPR_WFL_FILENAME (cl);
    saved_input_filename = input_filename;
    input_filename = ctxp->filename;
+ #endif
    java_error (NULL);
    java_error (buffer);
+ #ifdef USE_MAPPED_LOCATION
+   input_location = saved_location;
+ #else
    ctxp->filename = saved;
    input_filename = saved_input_filename;
+   ctxp->lexer->token_start = save_lc;
+ #endif
    force_error = 0;
  }
  
! /* Issue an error message at a current source line CL.
!    FUTURE/FIXME:  change cl to be a source_location. */
  
  void
! parse_error_context (tree cl, const char *msgid, ...)
  {
    va_list ap;
!   va_start (ap, msgid);
! #ifdef USE_MAPPED_LOCATION
!   issue_warning_error_from_context (EXPR_LOCATION (cl), msgid, &ap);
! #else
!   issue_warning_error_from_context (cl, msgid, &ap);
! #endif
    va_end (ap);
  }
  
! /* Issue a warning at a current source line CL.
!    FUTURE/FIXME:  change cl to be a source_location. */
  
  static void
! parse_warning_context (tree cl, const char *msgid, ...)
  {
    va_list ap;
!   va_start (ap, msgid);
  
!   do_warning = 1;
! #ifdef USE_MAPPED_LOCATION
!   issue_warning_error_from_context (EXPR_LOCATION (cl), msgid, &ap);
! #else
!   issue_warning_error_from_context (cl, msgid, &ap);
! #endif
!   do_warning = 0;
    va_end (ap);
  }
  
*************** find_expr_with_wfl (tree node)
*** 3110,3116 ****
  {
    while (node)
      {
!       char code;
        tree to_return;
  
        switch (TREE_CODE (node))
--- 3232,3238 ----
  {
    while (node)
      {
!       enum tree_code_class code;
        tree to_return;
  
        switch (TREE_CODE (node))
*************** find_expr_with_wfl (tree node)
*** 3131,3142 ****
  	  continue;
  
  	case LABELED_BLOCK_EXPR:
! 	  node = TREE_OPERAND (node, 1);
  	  continue;
  
  	default:
  	  code = TREE_CODE_CLASS (TREE_CODE (node));
! 	  if (((code == '1') || (code == '2') || (code == 'e'))
  	      && EXPR_WFL_LINECOL (node))
  	    return node;
  	  return NULL_TREE;
--- 3253,3265 ----
  	  continue;
  
  	case LABELED_BLOCK_EXPR:
! 	  node = LABELED_BLOCK_BODY (node);
  	  continue;
  
  	default:
  	  code = TREE_CODE_CLASS (TREE_CODE (node));
! 	  if (((code == tcc_unary) || (code == tcc_binary)
! 	       || (code == tcc_expression))
  	      && EXPR_WFL_LINECOL (node))
  	    return node;
  	  return NULL_TREE;
*************** find_expr_with_wfl (tree node)
*** 3151,3157 ****
--- 3274,3284 ----
  static void
  missing_return_error (tree method)
  {
+ #ifdef USE_MAPPED_LOCATION
+   SET_EXPR_LOCATION (wfl_operator, DECL_FUNCTION_LAST_LINE (method));
+ #else
    EXPR_WFL_SET_LINECOL (wfl_operator, DECL_FUNCTION_LAST_LINE (method), -2);
+ #endif
    parse_error_context (wfl_operator, "Missing return statement");
  }
  
*************** unreachable_stmt_error (tree node)
*** 3169,3175 ****
--- 3296,3306 ----
  
    if (node)
      {
+ #ifdef USE_MAPPED_LOCATION
+       SET_EXPR_LOCATION (wfl_operator, EXPR_LOCATION (node));
+ #else
        EXPR_WFL_SET_LINECOL (wfl_operator, EXPR_WFL_LINENO (node), -2);
+ #endif
        parse_error_context (wfl_operator, "Unreachable statement");
      }
    else
*************** static int
*** 3180,3187 ****
  not_accessible_field_error (tree wfl, tree decl)
  {
    parse_error_context 
!     (wfl, "Can't access %s field `%s.%s' from `%s'",
!      java_accstring_lookup (get_access_flags_from_decl (decl)),
       GET_TYPE_NAME (DECL_CONTEXT (decl)),
       IDENTIFIER_POINTER (DECL_NAME (decl)),
       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))));
--- 3311,3318 ----
  not_accessible_field_error (tree wfl, tree decl)
  {
    parse_error_context 
!     (wfl, "Can't access %s field %<%s.%s%> from %qs",
!      accessibility_string (get_access_flags_from_decl (decl)),
       GET_TYPE_NAME (DECL_CONTEXT (decl)),
       IDENTIFIER_POINTER (DECL_NAME (decl)),
       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))));
*************** java_accstring_lookup (int flags)
*** 3227,3239 ****
  #undef COPY_RETURN
  }
  
  /* Issuing error messages upon redefinition of classes, interfaces or
     variables. */
  
  static void
  classitf_redefinition_error (const char *context, tree id, tree decl, tree cl)
  {
!   parse_error_context (cl, "%s `%s' already defined in %s:%d",
  		       context, IDENTIFIER_POINTER (id),
  		       DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl));
    /* Here we should point out where its redefined. It's a unicode. FIXME */
--- 3358,3386 ----
  #undef COPY_RETURN
  }
  
+ /* Returns a string denoting the accessibility of a class or a member as
+    indicated by FLAGS.  We need a separate function from
+    java_accstring_lookup, as the latter can return spurious "static", etc.
+    if package-private access is defined (in which case none of the
+    relevant access control bits in FLAGS is set).  */
+ 
+ static const char *
+ accessibility_string (int flags)
+ {
+   if (flags & ACC_PRIVATE) return "private";
+   if (flags & ACC_PROTECTED) return "protected";
+   if (flags & ACC_PUBLIC) return "public";
+ 
+   return "package-private";
+ }
+ 
  /* Issuing error messages upon redefinition of classes, interfaces or
     variables. */
  
  static void
  classitf_redefinition_error (const char *context, tree id, tree decl, tree cl)
  {
!   parse_error_context (cl, "%s %qs already defined in %s:%d",
  		       context, IDENTIFIER_POINTER (id),
  		       DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl));
    /* Here we should point out where its redefined. It's a unicode. FIXME */
*************** variable_redefinition_error (tree contex
*** 3251,3257 ****
      type_name = lang_printable_name (type, 0);
  
    parse_error_context (context,
! 		       "Variable `%s' is already defined in this method and was declared `%s %s' at line %d",
  		       IDENTIFIER_POINTER (name),
  		       type_name, IDENTIFIER_POINTER (name), line);
  }
--- 3398,3404 ----
      type_name = lang_printable_name (type, 0);
  
    parse_error_context (context,
! 		       "Variable %qs is already defined in this method and was declared %<%s %s%> at line %d",
  		       IDENTIFIER_POINTER (name),
  		       type_name, IDENTIFIER_POINTER (name), line);
  }
*************** build_unresolved_array_type (tree type_o
*** 3344,3353 ****
--- 3491,3504 ----
  		 IDENTIFIER_LENGTH (EXPR_WFL_NODE (type_or_wfl)));
    obstack_grow0 (&temporary_obstack, "[]", 2);
    ptr = obstack_finish (&temporary_obstack);
+ #ifdef USE_MAPPED_LOCATION
+   wfl = build_expr_wfl (get_identifier (ptr), EXPR_LOCATION (type_or_wfl));
+ #else
    wfl = build_expr_wfl (get_identifier (ptr),
  			EXPR_WFL_FILENAME (type_or_wfl),
  			EXPR_WFL_LINENO (type_or_wfl),
  			EXPR_WFL_COLNO (type_or_wfl));
+ #endif
    /* Re-install the existing qualifications so that the type can be
       resolved properly. */
    EXPR_WFL_QUALIFICATION (wfl) = EXPR_WFL_QUALIFICATION (type_or_wfl);
*************** static void
*** 3358,3364 ****
  parser_add_interface (tree class_decl, tree interface_decl, tree wfl)
  {
    if (maybe_add_interface (TREE_TYPE (class_decl), TREE_TYPE (interface_decl)))
!     parse_error_context (wfl, "Interface `%s' repeated",
  			 IDENTIFIER_POINTER (DECL_NAME (interface_decl)));
  }
  
--- 3509,3515 ----
  parser_add_interface (tree class_decl, tree interface_decl, tree wfl)
  {
    if (maybe_add_interface (TREE_TYPE (class_decl), TREE_TYPE (interface_decl)))
!     parse_error_context (wfl, "Interface %qs repeated",
  			 IDENTIFIER_POINTER (DECL_NAME (interface_decl)));
  }
  
*************** check_class_interface_creation (int is_i
*** 3388,3394 ****
        && !CPC_INNER_P ())
      {
        parse_error_context
! 	(cl, "%s name `%s' clashes with imported type `%s'",
  	 (is_interface ? "Interface" : "Class"),
  	 IDENTIFIER_POINTER (raw_name), IDENTIFIER_POINTER (node));
        return 1;
--- 3539,3545 ----
        && !CPC_INNER_P ())
      {
        parse_error_context
! 	(cl, "%s name %qs clashes with imported type %qs",
  	 (is_interface ? "Interface" : "Class"),
  	 IDENTIFIER_POINTER (raw_name), IDENTIFIER_POINTER (node));
        return 1;
*************** check_class_interface_creation (int is_i
*** 3407,3425 ****
       when dealing with an inner class */
    if (!CPC_INNER_P () && (flags & ACC_PUBLIC ))
      {
        const char *f;
  
!       for (f = &input_filename [strlen (input_filename)];
! 	   f != input_filename && ! IS_DIR_SEPARATOR (f[0]);
  	   f--)
  	;
!       if (IS_DIR_SEPARATOR (f[0]))
  	f++;
        if (strncmp (IDENTIFIER_POINTER (raw_name),
  		   f , IDENTIFIER_LENGTH (raw_name)) ||
  	  f [IDENTIFIER_LENGTH (raw_name)] != '.')
  	parse_error_context
! 	  (cl, "Public %s `%s' must be defined in a file called `%s.java'",
  			     (is_interface ? "interface" : "class"),
  			     IDENTIFIER_POINTER (qualified_name),
  			     IDENTIFIER_POINTER (raw_name));
--- 3558,3577 ----
       when dealing with an inner class */
    if (!CPC_INNER_P () && (flags & ACC_PUBLIC ))
      {
+       const char *fname = input_filename;
        const char *f;
  
!       for (f = fname + strlen (fname);
! 	   f != fname && ! IS_DIR_SEPARATOR (*f);
  	   f--)
  	;
!       if (IS_DIR_SEPARATOR (*f))
  	f++;
        if (strncmp (IDENTIFIER_POINTER (raw_name),
  		   f , IDENTIFIER_LENGTH (raw_name)) ||
  	  f [IDENTIFIER_LENGTH (raw_name)] != '.')
  	parse_error_context
! 	  (cl, "Public %s %qs must be defined in a file called %<%s.java%>",
  			     (is_interface ? "interface" : "class"),
  			     IDENTIFIER_POINTER (qualified_name),
  			     IDENTIFIER_POINTER (raw_name));
*************** check_class_interface_creation (int is_i
*** 3434,3440 ****
  	 complaining a second time */
        if (CPC_INNER_P () && !TOPLEVEL_CLASS_DECL_P (GET_CPC()))
  	{
! 	  parse_error_context (cl, "Inner class `%s' can't be static. Static classes can only occur in interfaces and top-level classes",
  			       IDENTIFIER_POINTER (qualified_name));
  	  sca = ACC_STATIC;
  	}
--- 3586,3592 ----
  	 complaining a second time */
        if (CPC_INNER_P () && !TOPLEVEL_CLASS_DECL_P (GET_CPC()))
  	{
! 	  parse_error_context (cl, "Inner class %qs can't be static. Static classes can only occur in interfaces and top-level classes",
  			       IDENTIFIER_POINTER (qualified_name));
  	  sca = ACC_STATIC;
  	}
*************** check_class_interface_creation (int is_i
*** 3469,3481 ****
        else
  	uaaf = INTERFACE_MODIFIERS;
  
!       check_modifiers ("Illegal modifier `%s' for interface declaration",
  		       flags, uaaf);
      }
    else
      check_modifiers ((current_function_decl ?
! 		      "Illegal modifier `%s' for local class declaration" :
! 		      "Illegal modifier `%s' for class declaration"),
  		     flags, uaaf|sca|icaf);
    return 0;
  }
--- 3621,3633 ----
        else
  	uaaf = INTERFACE_MODIFIERS;
  
!       check_modifiers ("Illegal modifier %qs for interface declaration",
  		       flags, uaaf);
      }
    else
      check_modifiers ((current_function_decl ?
! 		      "Illegal modifier %qs for local class declaration" :
! 		      "Illegal modifier %qs for class declaration"),
  		     flags, uaaf|sca|icaf);
    return 0;
  }
*************** check_inner_class_redefinition (tree raw
*** 3515,3521 ****
      if (raw_name == GET_CPC_UN_NODE (scope_list))
        {
  	parse_error_context
! 	  (cl, "The class name `%s' is already defined in this scope. An inner class may not have the same simple name as any of its enclosing classes",
  	   IDENTIFIER_POINTER (raw_name));
  	return 1;
        }
--- 3667,3673 ----
      if (raw_name == GET_CPC_UN_NODE (scope_list))
        {
  	parse_error_context
! 	  (cl, "The class name %qs is already defined in this scope. An inner class may not have the same simple name as any of its enclosing classes",
  	   IDENTIFIER_POINTER (raw_name));
  	return 1;
        }
*************** find_as_inner_class (tree enclosing, tre
*** 3611,3617 ****
    else if (cl)
      qual = build_tree_list (cl, NULL_TREE);
    else
!     qual = build_tree_list (build_expr_wfl (name, NULL, 0, 0), NULL_TREE);
  
    if ((to_return = find_as_inner_class_do (qual, enclosing)))
      return to_return;
--- 3763,3769 ----
    else if (cl)
      qual = build_tree_list (cl, NULL_TREE);
    else
!     qual = build_tree_list (build_unknown_wfl (name), NULL_TREE);
  
    if ((to_return = find_as_inner_class_do (qual, enclosing)))
      return to_return;
*************** find_as_inner_class (tree enclosing, tre
*** 3641,3647 ****
      }
    /* Otherwise, create a qual for the other part of the resolution. */
    else
!     qual = build_tree_list (build_expr_wfl (name, NULL, 0, 0), NULL_TREE);
  
    return find_as_inner_class_do (qual, enclosing);
  }
--- 3793,3799 ----
      }
    /* Otherwise, create a qual for the other part of the resolution. */
    else
!     qual = build_tree_list (build_unknown_wfl (name), NULL_TREE);
  
    return find_as_inner_class_do (qual, enclosing);
  }
*************** find_as_inner_class_do (tree qual, tree 
*** 3676,3694 ****
    return (!qual && enclosing ? enclosing : NULL_TREE);
  }
  
- /* Reach all inner classes and tie their unqualified name to a
-    DECL. */
- 
- static void
- set_nested_class_simple_name_value (tree outer, int set)
- {
-   tree l;
- 
-   for (l = DECL_INNER_CLASS_LIST (outer); l; l = TREE_CHAIN (l))
-     IDENTIFIER_GLOBAL_VALUE (TREE_VALUE (l)) = (set ?
- 						TREE_PURPOSE (l) : NULL_TREE);
- }
- 
  static void
  link_nested_class_to_enclosing (void)
  {
--- 3828,3833 ----
*************** maybe_create_class_interface_decl (tree 
*** 3743,3758 ****
--- 3882,3909 ----
      decl = push_class (make_class (), qualified_name);
  
    /* Take care of the file and line business */
+ #ifdef USE_MAPPED_LOCATION
+   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;
+ #ifdef USE_MAPPED_LOCATION
+   {
+     tree tmp = maybe_get_identifier (EXPR_FILENAME (cl));
+     CLASS_FROM_CURRENTLY_COMPILED_P (TREE_TYPE (decl)) =
+       tmp && IS_A_COMMAND_LINE_FILENAME_P (tmp);
+   }
+ #else
    CLASS_FROM_CURRENTLY_COMPILED_P (TREE_TYPE (decl)) =
      IS_A_COMMAND_LINE_FILENAME_P (EXPR_WFL_FILENAME_NODE (cl));
+ #endif
  
    PUSH_CPC (decl, raw_name);
    DECL_CONTEXT (decl) = GET_ENCLOSING_CPC_CONTEXT ();
*************** create_interface (int flags, tree id, tr
*** 3843,3853 ****
    if ((flags & ACC_ABSTRACT) && flag_redundant)
      parse_warning_context
        (MODIFIER_WFL (ABSTRACT_TK),
!        "Redundant use of `abstract' modifier. Interface `%s' is implicitly abstract", IDENTIFIER_POINTER (raw_name));
  
    /* Create a new decl if DECL is NULL, otherwise fix it */
    decl = maybe_create_class_interface_decl (decl, raw_name, q_name, id);
  
    /* Set super info and mark the class a complete */
    set_super_info (ACC_INTERFACE | flags, TREE_TYPE (decl),
  		  object_type_node, ctxp->interface_number);
--- 3994,4011 ----
    if ((flags & ACC_ABSTRACT) && flag_redundant)
      parse_warning_context
        (MODIFIER_WFL (ABSTRACT_TK),
!        "Redundant use of %<abstract%> modifier. Interface %qs is implicitly abstract", IDENTIFIER_POINTER (raw_name));
  
    /* Create a new decl if DECL is NULL, otherwise fix it */
    decl = maybe_create_class_interface_decl (decl, raw_name, q_name, id);
  
+   /* Interfaces are always abstract. */
+   flags |= ACC_ABSTRACT;
+ 
+   /* Inner interfaces are always static.  */
+   if (INNER_CLASS_DECL_P (decl))
+     flags |= ACC_STATIC;
+ 
    /* Set super info and mark the class a complete */
    set_super_info (ACC_INTERFACE | flags, TREE_TYPE (decl),
  		  object_type_node, ctxp->interface_number);
*************** patch_anonymous_class (tree type_decl, t
*** 3874,3889 ****
    /* If it's an interface, implement it */
    if (CLASS_INTERFACE (type_decl))
      {
-       tree s_binfo;
-       int length;
- 
        if (parser_check_super_interface (type_decl, class_decl, wfl))
  	return;
  
!       s_binfo = TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (class)), 0);
!       length = TREE_VEC_LENGTH (TYPE_BINFO_BASETYPES (class))+1;
!       TYPE_BINFO_BASETYPES (class) = make_tree_vec (length);
!       TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (class)), 0) = s_binfo;
        /* And add the interface */
        parser_add_interface (class_decl, type_decl, wfl);
      }
--- 4032,4055 ----
    /* If it's an interface, implement it */
    if (CLASS_INTERFACE (type_decl))
      {
        if (parser_check_super_interface (type_decl, class_decl, wfl))
  	return;
  
!       if (!VEC_space (tree, BINFO_BASE_BINFOS (binfo), 1))
! 	{
! 	   /* Extend the binfo - by reallocating and copying it. */
! 	  tree new_binfo;
! 	  tree base_binfo;
! 	  int i;
! 	  
! 	  new_binfo = make_tree_binfo ((BINFO_N_BASE_BINFOS (binfo) + 1) * 2);
! 	  for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
! 	    BINFO_BASE_APPEND (new_binfo, base_binfo);
! 	  CLASS_HAS_SUPER_FLAG (new_binfo) = CLASS_HAS_SUPER_FLAG (binfo);
! 	  BINFO_VTABLE (new_binfo) = BINFO_VTABLE (binfo);
! 	  TYPE_BINFO (class) = new_binfo;
! 	}
!       
        /* And add the interface */
        parser_add_interface (class_decl, type_decl, wfl);
      }
*************** patch_anonymous_class (tree type_decl, t
*** 3892,3903 ****
      {
        if (parser_check_super (type_decl, class_decl, wfl))
  	return;
!       BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (binfo), 0)) = type;
      }
  }
  
  static tree
! create_anonymous_class (int location, tree type_name)
  {
    char buffer [80];
    tree super = NULL_TREE, itf = NULL_TREE;
--- 4058,4072 ----
      {
        if (parser_check_super (type_decl, class_decl, wfl))
  	return;
!       BINFO_TYPE (BINFO_BASE_BINFO (binfo, 0)) = type;
      }
  }
  
+ /* Create an anonymous class which extends/implements TYPE_NAME, and return
+    its decl.  */
+ 
  static tree
! create_anonymous_class (tree type_name)
  {
    char buffer [80];
    tree super = NULL_TREE, itf = NULL_TREE;
*************** create_anonymous_class (int location, tr
*** 3906,3912 ****
    /* The unqualified name of the anonymous class. It's just a number. */
    sprintf (buffer, "%d", anonymous_class_counter++);
    id = build_wfl_node (get_identifier (buffer));
!   EXPR_WFL_LINECOL (id) = location;
  
    /* We know about the type to extend/implement. We go ahead */
    if ((type_decl = IDENTIFIER_CLASS_VALUE (EXPR_WFL_NODE (type_name))))
--- 4075,4081 ----
    /* The unqualified name of the anonymous class. It's just a number. */
    sprintf (buffer, "%d", anonymous_class_counter++);
    id = build_wfl_node (get_identifier (buffer));
!   EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (type_name);
  
    /* We know about the type to extend/implement. We go ahead */
    if ((type_decl = IDENTIFIER_CLASS_VALUE (EXPR_WFL_NODE (type_name))))
*************** create_class (int flags, tree id, tree s
*** 3980,3986 ****
         - Public classes defined in the correct file */
    if ((flags & ACC_ABSTRACT) && (flags & ACC_FINAL))
      parse_error_context
!       (id, "Class `%s' can't be declared both abstract and final",
         IDENTIFIER_POINTER (raw_name));
  
    /* Create a new decl if DECL is NULL, otherwise fix it */
--- 4149,4155 ----
         - Public classes defined in the correct file */
    if ((flags & ACC_ABSTRACT) && (flags & ACC_FINAL))
      parse_error_context
!       (id, "Class %qs can't be declared both abstract and final",
         IDENTIFIER_POINTER (raw_name));
  
    /* Create a new decl if DECL is NULL, otherwise fix it */
*************** create_class (int flags, tree id, tree s
*** 3989,3998 ****
    /* If SUPER exists, use it, otherwise use Object */
    if (super)
      {
!       /* Can't extend java.lang.Object */
        if (TREE_TYPE (IDENTIFIER_CLASS_VALUE (class_id)) == object_type_node)
  	{
! 	  parse_error_context (id, "Can't extend `java.lang.Object'");
  	  return NULL_TREE;
  	}
  
--- 4158,4167 ----
    /* If SUPER exists, use it, otherwise use Object */
    if (super)
      {
!       /* java.lang.Object can't extend anything.  */
        if (TREE_TYPE (IDENTIFIER_CLASS_VALUE (class_id)) == object_type_node)
  	{
! 	  parse_error_context (id, "%<java.lang.Object%> can't extend anything");
  	  return NULL_TREE;
  	}
  
*************** create_class (int flags, tree id, tree s
*** 4019,4027 ****
    CLASS_COMPLETE_P (decl) = 1;
    add_superinterfaces (decl, interfaces);
  
    /* Add the private this$<n> field, Replicate final locals still in
       scope as private final fields mangled like val$<local_name>.
!      This doesn't not occur for top level (static) inner classes. */
    if (PURE_INNER_CLASS_DECL_P (decl))
      add_inner_class_fields (decl, current_function_decl);
  
--- 4188,4201 ----
    CLASS_COMPLETE_P (decl) = 1;
    add_superinterfaces (decl, interfaces);
  
+   /* TYPE_VFIELD' is a compiler-generated field used to point to
+      virtual function tables.  In gcj, every class has a common base
+      virtual function table in java.lang.object.  */
+   TYPE_VFIELD (TREE_TYPE (decl)) = TYPE_VFIELD (object_type_node);
+ 
    /* 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);
  
*************** duplicate_declaration_error_p (tree new_
*** 4229,4235 ****
  			  IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (decl))) :
  			  lang_printable_name (TREE_TYPE (decl), 1)));
        parse_error_context
! 	(cl , "Duplicate variable declaration: `%s %s' was `%s %s' (%s:%d)",
  	 t1, IDENTIFIER_POINTER (new_field_name),
  	 t2, IDENTIFIER_POINTER (DECL_NAME (decl)),
  	 DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl));
--- 4403,4409 ----
  			  IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (decl))) :
  			  lang_printable_name (TREE_TYPE (decl), 1)));
        parse_error_context
! 	(cl, "Duplicate variable declaration: %<%s %s%> was %<%s %s%> (%s:%d)",
  	 t1, IDENTIFIER_POINTER (new_field_name),
  	 t2, IDENTIFIER_POINTER (DECL_NAME (decl)),
  	 DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl));
*************** register_fields (int flags, tree type, t
*** 4249,4255 ****
  {
    tree current, saved_type;
    tree class_type = NULL_TREE;
!   int saved_lineno = input_line;
    int must_chain = 0;
    tree wfl = NULL_TREE;
  
--- 4423,4429 ----
  {
    tree current, saved_type;
    tree class_type = NULL_TREE;
!   location_t saved_location = input_location;
    int must_chain = 0;
    tree wfl = NULL_TREE;
  
*************** register_fields (int flags, tree type, t
*** 4269,4275 ****
  				 flags, ACC_STATIC, "interface field(s)");
        OBSOLETE_MODIFIER_WARNING (MODIFIER_WFL (FINAL_TK),
  				 flags, ACC_FINAL, "interface field(s)");
!       check_modifiers ("Illegal interface member modifier `%s'", flags,
  		       INTERFACE_FIELD_MODIFIERS);
        flags |= (ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
      }
--- 4443,4449 ----
  				 flags, ACC_STATIC, "interface field(s)");
        OBSOLETE_MODIFIER_WARNING (MODIFIER_WFL (FINAL_TK),
  				 flags, ACC_FINAL, "interface field(s)");
!       check_modifiers ("Illegal interface member modifier %qs", flags,
  		       INTERFACE_FIELD_MODIFIERS);
        flags |= (ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
      }
*************** register_fields (int flags, tree type, t
*** 4293,4299 ****
        if ((flags & ACC_STATIC) && !TOPLEVEL_CLASS_TYPE_P (class_type)
            && !(flags & ACC_FINAL))
  	parse_error_context
!           (cl, "Field `%s' can't be static in inner class `%s' unless it is final",
  	   IDENTIFIER_POINTER (EXPR_WFL_NODE (cl)),
  	   lang_printable_name (class_type, 0));
  
--- 4467,4473 ----
        if ((flags & ACC_STATIC) && !TOPLEVEL_CLASS_TYPE_P (class_type)
            && !(flags & ACC_FINAL))
  	parse_error_context
!           (cl, "Field %qs can't be static in inner class %qs unless it is final",
  	   IDENTIFIER_POINTER (EXPR_WFL_NODE (cl)),
  	   lang_printable_name (class_type, 0));
  
*************** register_fields (int flags, tree type, t
*** 4316,4327 ****
        if (duplicate_declaration_error_p (current_name, real_type, cl))
  	continue;
  
!       /* Set lineno to the line the field was found and create a
           declaration for it. Eventually sets the @deprecated tag flag. */
        if (flag_emit_xref)
  	input_line = EXPR_WFL_LINECOL (cl);
        else
  	input_line = EXPR_WFL_LINENO (cl);
        field_decl = add_field (class_type, current_name, real_type, flags);
        CHECK_DEPRECATED_NO_RESET (field_decl);
  
--- 4490,4505 ----
        if (duplicate_declaration_error_p (current_name, real_type, cl))
  	continue;
  
!       /* Set input_line to the line the field was found and create a
           declaration for it. Eventually sets the @deprecated tag flag. */
+ #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);
  
*************** register_fields (int flags, tree type, t
*** 4383,4389 ****
      }
  
    CLEAR_DEPRECATED;
!   input_line = saved_lineno;
  }
  
  /* Generate finit$, using the list of initialized fields to populate
--- 4561,4567 ----
      }
  
    CLEAR_DEPRECATED;
!   input_location = saved_location;
  }
  
  /* Generate finit$, using the list of initialized fields to populate
*************** method_header (int flags, tree type, tre
*** 4504,4510 ****
    tree meth_name = NULL_TREE;
    tree current, orig_arg, this_class = NULL;
    tree id, meth;
!   int saved_lineno;
    int constructor_ok = 0, must_chain;
    int count;
  
--- 4682,4688 ----
    tree meth_name = NULL_TREE;
    tree current, orig_arg, this_class = NULL;
    tree id, meth;
!   location_t saved_location;
    int constructor_ok = 0, must_chain;
    int count;
  
*************** method_header (int flags, tree type, tre
*** 4534,4554 ****
        if (!CLASS_ABSTRACT (TYPE_NAME (this_class))
  	  && !CLASS_INTERFACE (TYPE_NAME (this_class)))
  	parse_error_context
! 	  (id, "Class `%s' must be declared abstract to define abstract method `%s'",
  	   IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())),
  	   IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
      }
  
    /* A native method can't be strictfp.  */
    if ((flags & ACC_NATIVE) && (flags & ACC_STRICT))
!     parse_error_context (id, "native method `%s' can't be strictfp",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
    /* No such thing as a transient or volatile method.  */
    if ((flags & ACC_TRANSIENT))
!     parse_error_context (id, "method `%s' can't be transient",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
    if ((flags & ACC_VOLATILE))
!     parse_error_context (id, "method `%s' can't be volatile",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
  
    /* Things to be checked when declaring a constructor */
--- 4712,4733 ----
        if (!CLASS_ABSTRACT (TYPE_NAME (this_class))
  	  && !CLASS_INTERFACE (TYPE_NAME (this_class)))
  	parse_error_context
! 	  (id,
!            "Class %qs must be declared abstract to define abstract method %qs",
  	   IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())),
  	   IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
      }
  
    /* A native method can't be strictfp.  */
    if ((flags & ACC_NATIVE) && (flags & ACC_STRICT))
!     parse_error_context (id, "native method %qs can't be strictfp",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
    /* No such thing as a transient or volatile method.  */
    if ((flags & ACC_TRANSIENT))
!     parse_error_context (id, "method %qs can't be transient",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
    if ((flags & ACC_VOLATILE))
!     parse_error_context (id, "method %qs can't be volatile",
  			 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
  
    /* Things to be checked when declaring a constructor */
*************** method_header (int flags, tree type, tre
*** 4598,4604 ****
    if ((flags & ACC_STATIC) && !TOPLEVEL_CLASS_TYPE_P (this_class))
      {
        parse_error_context
! 	(id, "Method `%s' can't be static in inner class `%s'. Only members of interfaces and top-level classes can be static",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)),
  	 lang_printable_name (this_class, 0));
      }
--- 4777,4783 ----
    if ((flags & ACC_STATIC) && !TOPLEVEL_CLASS_TYPE_P (this_class))
      {
        parse_error_context
! 	(id, "Method %qs can't be static in inner class %qs. Only members of interfaces and top-level classes can be static",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (id)),
  	 lang_printable_name (this_class, 0));
      }
*************** method_header (int flags, tree type, tre
*** 4635,4646 ****
    else
      TREE_TYPE (meth) = type;
  
!   saved_lineno = input_line;
    /* When defining an abstract or interface method, the curly
       bracket at level 1 doesn't exist because there is no function
       body */
!   input_line = (ctxp->first_ccb_indent1 ? ctxp->first_ccb_indent1 :
! 	    EXPR_WFL_LINENO (id));
  
    /* Remember the original argument list */
    orig_arg = TYPE_ARG_TYPES (meth);
--- 4814,4830 ----
    else
      TREE_TYPE (meth) = type;
  
!   saved_location = input_location;
    /* When defining an abstract or interface method, the curly
       bracket at level 1 doesn't exist because there is no function
       body */
! #ifdef USE_MAPPED_LOCATION
!   input_location = (ctxp->first_ccb_indent1 ? ctxp->first_ccb_indent1 :
! 		    EXPR_LOCATION (id));
! #else
!   input_line = (ctxp->first_ccb_indent1 ? (int) ctxp->first_ccb_indent1 :
! 		EXPR_WFL_LINENO (id));
! #endif
  
    /* Remember the original argument list */
    orig_arg = TYPE_ARG_TYPES (meth);
*************** method_header (int flags, tree type, tre
*** 4673,4679 ****
    /* Register the parameter number and re-install the current line
       number */
    DECL_MAX_LOCALS (meth) = ctxp->formal_parameter_number+1;
!   input_line = saved_lineno;
  
    /* Register exception specified by the `throws' keyword for
       resolution and set the method decl appropriate field to the list.
--- 4857,4863 ----
    /* Register the parameter number and re-install the current line
       number */
    DECL_MAX_LOCALS (meth) = ctxp->formal_parameter_number+1;
!   input_location = saved_location;
  
    /* Register exception specified by the `throws' keyword for
       resolution and set the method decl appropriate field to the list.
*************** method_header (int flags, tree type, tre
*** 4714,4720 ****
    /* If doing xref, store column and line number information instead
       of the line number only. */
    if (flag_emit_xref)
!     DECL_SOURCE_LINE (meth) = EXPR_WFL_LINECOL (id);
  
    return meth;
  }
--- 4898,4910 ----
    /* 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;
  }
*************** finish_method_declaration (tree method_b
*** 4753,4759 ****
      {
        tree name = DECL_NAME (current_function_decl);
        parse_error_context (DECL_FUNCTION_WFL (current_function_decl),
! 			   "%s method `%s' can't have a body defined",
  			   (METHOD_NATIVE (current_function_decl) ?
  			    "Native" : "Abstract"),
  			   IDENTIFIER_POINTER (name));
--- 4943,4949 ----
      {
        tree name = DECL_NAME (current_function_decl);
        parse_error_context (DECL_FUNCTION_WFL (current_function_decl),
! 			   "%s method %qs can't have a body defined",
  			   (METHOD_NATIVE (current_function_decl) ?
  			    "Native" : "Abstract"),
  			   IDENTIFIER_POINTER (name));
*************** finish_method_declaration (tree method_b
*** 4764,4770 ****
        tree name = DECL_NAME (current_function_decl);
        parse_error_context
  	(DECL_FUNCTION_WFL (current_function_decl),
! 	 "Non native and non abstract method `%s' must have a body defined",
  	 IDENTIFIER_POINTER (name));
        method_body = NULL_TREE;
      }
--- 4954,4960 ----
        tree name = DECL_NAME (current_function_decl);
        parse_error_context
  	(DECL_FUNCTION_WFL (current_function_decl),
! 	 "Non native and non abstract method %qs must have a body defined",
  	 IDENTIFIER_POINTER (name));
        method_body = NULL_TREE;
      }
*************** static char *
*** 4800,4807 ****
  constructor_circularity_msg (tree from, tree to)
  {
    static char string [4096];
!   char *t = xstrdup (lang_printable_name (from, 0));
!   sprintf (string, "`%s' invokes `%s'", t, lang_printable_name (to, 0));
    free (t);
    return string;
  }
--- 4990,4997 ----
  constructor_circularity_msg (tree from, tree to)
  {
    static char string [4096];
!   char *t = xstrdup (lang_printable_name (from, 2));
!   sprintf (string, "'%s' invokes '%s'", t, lang_printable_name (to, 2));
    free (t);
    return string;
  }
*************** verify_constructor_circularity (tree met
*** 4833,4841 ****
  		  java_error_count--;
  		}
  	    }
! 	  t = xstrdup (lang_printable_name (meth, 0));
  	  parse_error_context (TREE_PURPOSE (c),
! 			       "%s: recursive invocation of constructor `%s'",
  			       constructor_circularity_msg (current, meth), t);
  	  free (t);
  	  vcc_list = NULL_TREE;
--- 5023,5031 ----
  		  java_error_count--;
  		}
  	    }
! 	  t = xstrdup (lang_printable_name (meth, 2));
  	  parse_error_context (TREE_PURPOSE (c),
! 			       "%s: recursive invocation of constructor %qs",
  			       constructor_circularity_msg (current, meth), t);
  	  free (t);
  	  vcc_list = NULL_TREE;
*************** check_modifiers_consistency (int flags)
*** 4865,4871 ****
    THIS_MODIFIER_ONLY (flags, ACC_PROTECTED, PROTECTED_TK, acc_count, cl);
    if (acc_count > 1)
      parse_error_context
!       (cl, "Inconsistent member declaration.  At most one of `public', `private', or `protected' may be specified");
  
    acc_count = 0;
    cl = NULL_TREE;
--- 5055,5061 ----
    THIS_MODIFIER_ONLY (flags, ACC_PROTECTED, PROTECTED_TK, acc_count, cl);
    if (acc_count > 1)
      parse_error_context
!       (cl, "Inconsistent member declaration.  At most one of %<public%>, %<private%>, or %<protected%> may be specified");
  
    acc_count = 0;
    cl = NULL_TREE;
*************** check_modifiers_consistency (int flags)
*** 4873,4879 ****
    THIS_MODIFIER_ONLY (flags, ACC_VOLATILE, VOLATILE_TK, acc_count, cl);
    if (acc_count > 1)
      parse_error_context (cl,
! 			 "Inconsistent member declaration.  At most one of `final' or `volatile' may be specified");
  }
  
  /* Check the methode header METH for abstract specifics features */
--- 5063,5069 ----
    THIS_MODIFIER_ONLY (flags, ACC_VOLATILE, VOLATILE_TK, acc_count, cl);
    if (acc_count > 1)
      parse_error_context (cl,
! 			 "Inconsistent member declaration.  At most one of %<final%> or %<volatile%> may be specified");
  }
  
  /* Check the methode header METH for abstract specifics features */
*************** check_abstract_method_header (tree meth)
*** 4890,4896 ****
  			      ACC_PUBLIC, "abstract method",
  			      IDENTIFIER_POINTER (DECL_NAME (meth)));
  
!   check_modifiers ("Illegal modifier `%s' for interface method",
  		  flags, INTERFACE_METHOD_MODIFIERS);
  }
  
--- 5080,5086 ----
  			      ACC_PUBLIC, "abstract method",
  			      IDENTIFIER_POINTER (DECL_NAME (meth)));
  
!   check_modifiers ("Illegal modifier %qs for interface method",
  		  flags, INTERFACE_METHOD_MODIFIERS);
  }
  
*************** method_declarator (tree id, tree list)
*** 4963,4969 ****
  	if (TREE_PURPOSE (already) == name)
  	  {
  	    parse_error_context
! 	      (wfl_name, "Variable `%s' is used more than once in the argument list of method `%s'",
  	       IDENTIFIER_POINTER (name),
  	       IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
  	    break;
--- 5153,5159 ----
  	if (TREE_PURPOSE (already) == name)
  	  {
  	    parse_error_context
! 	      (wfl_name, "Variable %qs is used more than once in the argument list of method %qs",
  	       IDENTIFIER_POINTER (name),
  	       IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
  	    break;
*************** method_declarator (tree id, tree list)
*** 4998,5004 ****
  
  static int
  unresolved_type_p (tree wfl, tree *returned)
- 
  {
    if (TREE_CODE (wfl) == EXPR_WITH_FILE_LOCATION)
      {
--- 5188,5193 ----
*************** parser_check_super_interface (tree super
*** 5048,5054 ****
    if (!CLASS_INTERFACE (super_decl))
      {
        parse_error_context
! 	(this_wfl, "%s `%s' can't implement/extend %s `%s'",
  	 (CLASS_INTERFACE (TYPE_NAME (TREE_TYPE (this_decl))) ?
  	  "Interface" : "Class"),
  	 IDENTIFIER_POINTER (DECL_NAME (this_decl)),
--- 5237,5243 ----
    if (!CLASS_INTERFACE (super_decl))
      {
        parse_error_context
! 	(this_wfl, "%s %qs can't implement/extend %s %qs",
  	 (CLASS_INTERFACE (TYPE_NAME (TREE_TYPE (this_decl))) ?
  	  "Interface" : "Class"),
  	 IDENTIFIER_POINTER (DECL_NAME (this_decl)),
*************** parser_check_super_interface (tree super
*** 5061,5067 ****
       access rules (6.6.1). */
    if (! INNER_CLASS_P (super_type)
        && check_pkg_class_access (DECL_NAME (super_decl),
! 				 lookup_cl (this_decl), true))
      return 1;
  
    SOURCE_FRONTEND_DEBUG (("Completing interface %s with %s",
--- 5250,5256 ----
       access rules (6.6.1). */
    if (! INNER_CLASS_P (super_type)
        && check_pkg_class_access (DECL_NAME (super_decl),
! 				 NULL_TREE, true, this_decl))
      return 1;
  
    SOURCE_FRONTEND_DEBUG (("Completing interface %s with %s",
*************** parser_check_super (tree super_decl, tre
*** 5082,5088 ****
    if (TYPE_ARRAY_P (super_type) || CLASS_INTERFACE (TYPE_NAME (super_type)))
      {
        parse_error_context
! 	(wfl, "Class `%s' can't subclass %s `%s'",
  	 IDENTIFIER_POINTER (DECL_NAME (this_decl)),
  	 (CLASS_INTERFACE (TYPE_NAME (super_type)) ? "interface" : "array"),
  	 IDENTIFIER_POINTER (DECL_NAME (super_decl)));
--- 5271,5277 ----
    if (TYPE_ARRAY_P (super_type) || CLASS_INTERFACE (TYPE_NAME (super_type)))
      {
        parse_error_context
! 	(wfl, "Class %qs can't subclass %s %qs",
  	 IDENTIFIER_POINTER (DECL_NAME (this_decl)),
  	 (CLASS_INTERFACE (TYPE_NAME (super_type)) ? "interface" : "array"),
  	 IDENTIFIER_POINTER (DECL_NAME (super_decl)));
*************** parser_check_super (tree super_decl, tre
*** 5099,5105 ****
    /* Check top-level class scope. Inner classes are subject to member access
       rules (6.6.1). */
    if (! INNER_CLASS_P (super_type)
!       && (check_pkg_class_access (DECL_NAME (super_decl), wfl, true)))
      return 1;
  
    SOURCE_FRONTEND_DEBUG (("Completing class %s with %s",
--- 5288,5294 ----
    /* Check top-level class scope. Inner classes are subject to member access
       rules (6.6.1). */
    if (! INNER_CLASS_P (super_type)
!       && (check_pkg_class_access (DECL_NAME (super_decl), wfl, true, NULL_TREE)))
      return 1;
  
    SOURCE_FRONTEND_DEBUG (("Completing class %s with %s",
*************** register_incomplete_type (int kind, tree
*** 5178,5189 ****
    JDEP_MISC (new) = NULL_TREE;
    /* For some dependencies, set the enclosing class of the current
       class to be the enclosing context */
!   if ((kind == JDEP_INTERFACE  || kind == JDEP_ANONYMOUS)
        && GET_ENCLOSING_CPC ())
      JDEP_ENCLOSING (new) = TREE_VALUE (GET_ENCLOSING_CPC ());
-   else if (kind == JDEP_SUPER)
-     JDEP_ENCLOSING (new) = (GET_ENCLOSING_CPC () ?
- 			    TREE_VALUE (GET_ENCLOSING_CPC ()) : NULL_TREE);
    else
      JDEP_ENCLOSING (new) = GET_CPC ();
    JDEP_GET_PATCH (new) = (tree *)NULL;
--- 5367,5375 ----
    JDEP_MISC (new) = NULL_TREE;
    /* For some dependencies, set the enclosing class of the current
       class to be the enclosing context */
!   if ((kind == JDEP_INTERFACE || kind == JDEP_ANONYMOUS || kind == JDEP_SUPER)
        && GET_ENCLOSING_CPC ())
      JDEP_ENCLOSING (new) = TREE_VALUE (GET_ENCLOSING_CPC ());
    else
      JDEP_ENCLOSING (new) = GET_CPC ();
    JDEP_GET_PATCH (new) = (tree *)NULL;
*************** register_incomplete_type (int kind, tree
*** 5204,5226 ****
  static tree
  check_inner_circular_reference (tree source, tree target)
  {
!   tree basetype_vec = TYPE_BINFO_BASETYPES (source);
    tree ctx, cl;
    int i;
  
!   if (!basetype_vec)
!     return NULL_TREE;
! 
!   for (i = 0; i < TREE_VEC_LENGTH (basetype_vec); i++)
      {
        tree su;
  
        /* We can end up with a NULL_TREE or an incomplete type here if
  	 we encountered previous type resolution errors. It's safe to
  	 simply ignore these cases.  */
!       if (TREE_VEC_ELT (basetype_vec, i) == NULL_TREE)
! 	continue;
!       su = BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i));
        if (INCOMPLETE_TYPE_P (su))
  	continue;
  
--- 5390,5407 ----
  static tree
  check_inner_circular_reference (tree source, tree target)
  {
!   tree base_binfo;
    tree ctx, cl;
    int i;
  
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (source), i, base_binfo); i++)
      {
        tree su;
  
        /* We can end up with a NULL_TREE or an incomplete type here if
  	 we encountered previous type resolution errors. It's safe to
  	 simply ignore these cases.  */
!       su = BINFO_TYPE (base_binfo);
        if (INCOMPLETE_TYPE_P (su))
  	continue;
  
*************** check_inner_circular_reference (tree sou
*** 5250,5259 ****
  static tree
  check_circular_reference (tree type)
  {
!   tree basetype_vec = TYPE_BINFO_BASETYPES (type);
    int i;
  
!   if (!basetype_vec)
      return NULL_TREE;
  
    if (! CLASS_INTERFACE (TYPE_NAME (type)))
--- 5431,5440 ----
  static tree
  check_circular_reference (tree type)
  {
!   tree base_binfo;
    int i;
  
!   if (!BINFO_N_BASE_BINFOS (TYPE_BINFO (type)))
      return NULL_TREE;
  
    if (! CLASS_INTERFACE (TYPE_NAME (type)))
*************** check_circular_reference (tree type)
*** 5263,5274 ****
        return NULL_TREE;
      }
  
!   for (i = 0; i < TREE_VEC_LENGTH (basetype_vec); i++)
      {
!       tree vec_elt = TREE_VEC_ELT (basetype_vec, i);
!       if (vec_elt && BINFO_TYPE (vec_elt) != object_type_node
! 	  && interface_of_p (type, BINFO_TYPE (vec_elt)))
! 	return lookup_cl (TYPE_NAME (BINFO_TYPE (vec_elt)));
      }
    return NULL_TREE;
  }
--- 5444,5454 ----
        return NULL_TREE;
      }
  
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (type), i, base_binfo); i++)
      {
!       if (BINFO_TYPE (base_binfo) != object_type_node
! 	  && interface_of_p (type, BINFO_TYPE (base_binfo)))
! 	return lookup_cl (TYPE_NAME (BINFO_TYPE (base_binfo)));
      }
    return NULL_TREE;
  }
*************** craft_constructor (tree class_decl, tree
*** 5383,5401 ****
  {
    tree class_type = TREE_TYPE (class_decl);
    tree parm = NULL_TREE;
!   int flags = (get_access_flags_from_decl (class_decl) & ACC_PUBLIC ?
! 	       ACC_PUBLIC : 0);
    int i = 0, artificial = 0;
    tree decl, ctor_name;
    char buffer [80];
  
!   /* The constructor name is <init> unless we're dealing with an
!      anonymous class, in which case the name will be fixed after having
!      be expanded. */
!   if (ANONYMOUS_CLASS_P (class_type))
!     ctor_name = DECL_NAME (class_decl);
!   else
!     ctor_name = init_identifier_node;
  
    /* If we're dealing with an inner class constructor, we hide the
       this$<n> decl in the name field of its parameter declaration. */
--- 5563,5576 ----
  {
    tree class_type = TREE_TYPE (class_decl);
    tree parm = NULL_TREE;
!   /* Inherit access flags for the constructor from its enclosing class. */
!   int valid_ctor_flags = ACC_PUBLIC | ACC_PROTECTED | ACC_PRIVATE;
!   int flags = (get_access_flags_from_decl (class_decl) & valid_ctor_flags);
    int i = 0, artificial = 0;
    tree decl, ctor_name;
    char buffer [80];
  
!   ctor_name = init_identifier_node;
  
    /* If we're dealing with an inner class constructor, we hide the
       this$<n> decl in the name field of its parameter declaration. */
*************** craft_constructor (tree class_decl, tree
*** 5415,5420 ****
--- 5590,5599 ----
    /* Then if there are any args to be enforced, enforce them now */
    for (; args && args != end_params_node; args = TREE_CHAIN (args))
      {
+       /* If we see a `void *', we need to change it to Object.  */
+       if (TREE_VALUE (args) == TREE_TYPE (null_pointer_node))
+ 	TREE_VALUE (args) = object_ptr_type_node;
+ 
        sprintf (buffer, "parm%d", i++);
        parm = tree_cons (get_identifier (buffer), TREE_VALUE (args), parm);
      }
*************** java_fix_constructors (void)
*** 5468,5474 ****
  }
  
  /* safe_layout_class just makes sure that we can load a class without
!    disrupting the current_class, input_file, lineno, etc, information
     about the class processed currently.  */
  
  void
--- 5647,5653 ----
  }
  
  /* safe_layout_class just makes sure that we can load a class without
!    disrupting the current_class, input_file, input_line, etc, information
     about the class processed currently.  */
  
  void
*************** jdep_resolve_class (jdep *dep)
*** 5503,5509 ****
  
    if (!decl)
      complete_class_report_errors (dep);
!   else if (PURE_INNER_CLASS_DECL_P (decl))
      {
        tree inner = TREE_TYPE (decl);
        if (! CLASS_LOADED_P (inner))
--- 5682,5688 ----
  
    if (!decl)
      complete_class_report_errors (dep);
!   else if (INNER_CLASS_DECL_P (decl))
      {
        tree inner = TREE_TYPE (decl);
        if (! CLASS_LOADED_P (inner))
*************** java_complete_class (void)
*** 5559,5566 ****
  	      /* Simply patch super */
  	      if (parser_check_super (decl, JDEP_DECL (dep), JDEP_WFL (dep)))
  		continue;
! 	      BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO
! 	        (TREE_TYPE (JDEP_DECL (dep)))), 0)) = TREE_TYPE (decl);
  	      break;
  
  	    case JDEP_FIELD:
--- 5738,5746 ----
  	      /* Simply patch super */
  	      if (parser_check_super (decl, JDEP_DECL (dep), JDEP_WFL (dep)))
  		continue;
! 	      BINFO_TYPE (BINFO_BASE_BINFO
! 			  (TYPE_BINFO (TREE_TYPE (JDEP_DECL (dep))), 0))
! 		= TREE_TYPE (decl);
  	      break;
  
  	    case JDEP_FIELD:
*************** java_complete_class (void)
*** 5575,5581 ****
  		DECL_USER_ALIGN (field_decl) = 0;
  		layout_decl (field_decl, 0);
  		SOURCE_FRONTEND_DEBUG
! 		  (("Completed field/var decl `%s' with `%s'",
  		    IDENTIFIER_POINTER (DECL_NAME (field_decl)),
  		    IDENTIFIER_POINTER (DECL_NAME (decl))));
  		break;
--- 5755,5761 ----
  		DECL_USER_ALIGN (field_decl) = 0;
  		layout_decl (field_decl, 0);
  		SOURCE_FRONTEND_DEBUG
! 		  (("Completed field/var decl '%s' with '%s'",
  		    IDENTIFIER_POINTER (DECL_NAME (field_decl)),
  		    IDENTIFIER_POINTER (DECL_NAME (decl))));
  		break;
*************** java_complete_class (void)
*** 5593,5600 ****
  		      JDEP_APPLY_PATCH (dep, type);
  		      SOURCE_FRONTEND_DEBUG
  			(((JDEP_KIND (dep) == JDEP_METHOD_RETURN ?
! 			   "Completing fct `%s' with ret type `%s'":
! 			   "Completing arg `%s' with type `%s'"),
  			  IDENTIFIER_POINTER (EXPR_WFL_NODE
  					      (JDEP_DECL_WFL (dep))),
  			  IDENTIFIER_POINTER (DECL_NAME (decl))));
--- 5773,5780 ----
  		      JDEP_APPLY_PATCH (dep, type);
  		      SOURCE_FRONTEND_DEBUG
  			(((JDEP_KIND (dep) == JDEP_METHOD_RETURN ?
! 			   "Completing fct '%s' with ret type '%s'":
! 			   "Completing arg '%s' with type '%s'"),
  			  IDENTIFIER_POINTER (EXPR_WFL_NODE
  					      (JDEP_DECL_WFL (dep))),
  			  IDENTIFIER_POINTER (DECL_NAME (decl))));
*************** java_complete_class (void)
*** 5648,5654 ****
  	    case JDEP_EXCEPTION:
  	      JDEP_APPLY_PATCH (dep, TREE_TYPE (decl));
  	      SOURCE_FRONTEND_DEBUG
! 		(("Completing `%s' `throws' argument node",
  		  IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep)))));
  	      break;
  
--- 5828,5834 ----
  	    case JDEP_EXCEPTION:
  	      JDEP_APPLY_PATCH (dep, TREE_TYPE (decl));
  	      SOURCE_FRONTEND_DEBUG
! 		(("Completing '%s' 'throws' argument node",
  		  IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep)))));
  	      break;
  
*************** do_resolve_class (tree enclosing, tree c
*** 5732,5738 ****
  	 class and then treat Id as a member type.  If we can't find Q
  	 as a class then we fall through.  */
        tree q, left, left_type, right;
!       if (breakdown_qualified (&left, &right, TYPE_NAME (class_type)) == 0)
  	{
  	  BUILD_PTR_FROM_NAME (left_type, left);
  	  q = do_resolve_class (enclosing, left_type, decl, cl);
--- 5912,5918 ----
  	 class and then treat Id as a member type.  If we can't find Q
  	 as a class then we fall through.  */
        tree q, left, left_type, right;
!       if (split_qualified_name (&left, &right, TYPE_NAME (class_type)) == 0)
  	{
  	  BUILD_PTR_FROM_NAME (left_type, left);
  	  q = do_resolve_class (enclosing, left_type, decl, cl);
*************** do_resolve_class (tree enclosing, tree c
*** 5787,5794 ****
    /* 2- And check for the type in the current compilation unit */
    if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
      {
!       if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
! 	  !CLASS_FROM_SOURCE_P (TREE_TYPE (new_class_decl)))
  	load_class (TYPE_NAME (class_type), 0);
        return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
      }
--- 5967,5973 ----
    /* 2- And check for the type in the current compilation unit */
    if ((new_class_decl = IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type))))
      {
!       if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)))
  	load_class (TYPE_NAME (class_type), 0);
        return IDENTIFIER_CLASS_VALUE (TYPE_NAME (class_type));
      }
*************** do_resolve_class (tree enclosing, tree c
*** 5839,5845 ****
       by the caller. */
    if (cl)
      {
!       if (check_pkg_class_access (TYPE_NAME (class_type), cl, true))
          return NULL_TREE;
      }
  
--- 6018,6024 ----
       by the caller. */
    if (cl)
      {
!       if (check_pkg_class_access (TYPE_NAME (class_type), cl, true, NULL_TREE))
          return NULL_TREE;
      }
  
*************** qualify_and_find (tree class_type, tree 
*** 5882,5890 ****
      load_class (new_qualified, 0);
    if ((new_class_decl = IDENTIFIER_CLASS_VALUE (new_qualified)))
      {
!       if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)) &&
! 	  !CLASS_FROM_SOURCE_P (TREE_TYPE (new_class_decl)))
! 	load_class (new_qualified, 0);
        TYPE_NAME (class_type) = new_qualified;
        return IDENTIFIER_CLASS_VALUE (new_qualified);
      }
--- 6061,6068 ----
      load_class (new_qualified, 0);
    if ((new_class_decl = IDENTIFIER_CLASS_VALUE (new_qualified)))
      {
!       if (!CLASS_LOADED_P (TREE_TYPE (new_class_decl)))
! 	load_class (TREE_TYPE (new_class_decl), 0);
        TYPE_NAME (class_type) = new_qualified;
        return IDENTIFIER_CLASS_VALUE (new_qualified);
      }
*************** complete_class_report_errors (jdep *dep)
*** 6003,6048 ****
      {
      case JDEP_SUPER:
        parse_error_context
! 	(JDEP_WFL (dep), "Superclass `%s' of class `%s' not found",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_FIELD:
        parse_error_context
! 	(JDEP_WFL (dep), "Type `%s' not found in declaration of field `%s'",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_METHOD:		/* Covers arguments */
        parse_error_context
! 	(JDEP_WFL (dep), "Type `%s' not found in the declaration of the argument `%s' of method `%s'",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_DECL_WFL (dep))),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_MISC (dep))));
        break;
      case JDEP_METHOD_RETURN:	/* Covers return type */
        parse_error_context
! 	(JDEP_WFL (dep), "Type `%s' not found in the declaration of the return type of method `%s'",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_DECL_WFL (dep))));
        break;
      case JDEP_INTERFACE:
        parse_error_context
! 	(JDEP_WFL (dep), "Superinterface `%s' of %s `%s' not found",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep))),
  	 (CLASS_OR_INTERFACE (JDEP_DECL (dep), "class", "interface")),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_VARIABLE:
        parse_error_context
! 	(JDEP_WFL (dep), "Type `%s' not found in the declaration of the local variable `%s'",
  	 purify_type_name (IDENTIFIER_POINTER
  			   (EXPR_WFL_NODE (JDEP_WFL (dep)))),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_EXCEPTION:	/* As specified by `throws' */
        parse_error_context
! 	  (JDEP_WFL (dep), "Class `%s' not found in `throws'",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep))));
        break;
      default:
--- 6181,6226 ----
      {
      case JDEP_SUPER:
        parse_error_context
! 	(JDEP_WFL (dep), "Superclass %qs of class %qs not found",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_FIELD:
        parse_error_context
! 	(JDEP_WFL (dep), "Type %qs not found in declaration of field %qs",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_METHOD:		/* Covers arguments */
        parse_error_context
! 	(JDEP_WFL (dep), "Type %qs not found in the declaration of the argument %qs of method %qs",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_DECL_WFL (dep))),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_MISC (dep))));
        break;
      case JDEP_METHOD_RETURN:	/* Covers return type */
        parse_error_context
! 	(JDEP_WFL (dep), "Type %qs not found in the declaration of the return type of method %qs",
  	 purify_type_name (name),
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_DECL_WFL (dep))));
        break;
      case JDEP_INTERFACE:
        parse_error_context
! 	(JDEP_WFL (dep), "Superinterface %qs of %s %qs not found",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep))),
  	 (CLASS_OR_INTERFACE (JDEP_DECL (dep), "class", "interface")),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_VARIABLE:
        parse_error_context
! 	(JDEP_WFL (dep), "Type %qs not found in the declaration of the local variable %qs",
  	 purify_type_name (IDENTIFIER_POINTER
  			   (EXPR_WFL_NODE (JDEP_WFL (dep)))),
  	 IDENTIFIER_POINTER (DECL_NAME (JDEP_DECL (dep))));
        break;
      case JDEP_EXCEPTION:	/* As specified by `throws' */
        parse_error_context
! 	  (JDEP_WFL (dep), "Class %qs not found in %<throws%>",
  	 IDENTIFIER_POINTER (EXPR_WFL_NODE (JDEP_WFL (dep))));
        break;
      default:
*************** get_printable_method_name (tree decl)
*** 6068,6074 ****
        DECL_NAME (decl) = DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)));
      }
  
!   to_return = lang_printable_name (decl, 0);
    if (DECL_CONSTRUCTOR_P (decl))
      DECL_NAME (decl) = name;
  
--- 6246,6252 ----
        DECL_NAME (decl) = DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)));
      }
  
!   to_return = lang_printable_name (decl, 2);
    if (DECL_CONSTRUCTOR_P (decl))
      DECL_NAME (decl) = name;
  
*************** check_method_redefinition (tree class, t
*** 6099,6105 ****
  	  && !DECL_ARTIFICIAL (method))
  	{
  	  parse_error_context
! 	    (DECL_FUNCTION_WFL (method), "Duplicate %s declaration `%s'",
  	     (DECL_CONSTRUCTOR_P (redef) ? "constructor" : "method"),
  	     get_printable_method_name (redef));
  	  return 1;
--- 6277,6283 ----
  	  && !DECL_ARTIFICIAL (method))
  	{
  	  parse_error_context
! 	    (DECL_FUNCTION_WFL (method), "Duplicate %s declaration %qs",
  	     (DECL_CONSTRUCTOR_P (redef) ? "constructor" : "method"),
  	     get_printable_method_name (redef));
  	  return 1;
*************** check_abstract_method_definitions (int d
*** 6173,6181 ****
  
  	  parse_error_context
  	    (lookup_cl (class_decl),
! 	     "Class `%s' doesn't define the abstract method `%s %s' from %s `%s'. This method must be defined or %s `%s' must be declared abstract",
  	     IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 	     t, lang_printable_name (method, 0),
  	     (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))) ?
  	      "interface" : "class"),
  	     IDENTIFIER_POINTER (ccn),
--- 6351,6359 ----
  
  	  parse_error_context
  	    (lookup_cl (class_decl),
! 	     "Class %qs doesn't define the abstract method %<%s %s%> from %s %<%s%>. This method must be defined or %s %qs must be declared abstract",
  	     IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 	     t, lang_printable_name (method, 2),
  	     (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))) ?
  	      "interface" : "class"),
  	     IDENTIFIER_POINTER (ccn),
*************** check_abstract_method_definitions (int d
*** 6190,6201 ****
      {
        /* Check for implemented interfaces. */
        int i;
!       tree vector = TYPE_BINFO_BASETYPES (type);
!       for (i = 1; ok && vector && i < TREE_VEC_LENGTH (vector); i++)
! 	{
! 	  tree super = BINFO_TYPE (TREE_VEC_ELT (vector, i));
! 	  ok = check_abstract_method_definitions (1, class_decl, super);
! 	}
      }
  
    return ok;
--- 6368,6380 ----
      {
        /* Check for implemented interfaces. */
        int i;
!       tree base_binfo;
!       
!       for (i = 1;
! 	   ok && BINFO_BASE_ITERATE (TYPE_BINFO (type), i, base_binfo);
! 	   i++)
! 	ok = check_abstract_method_definitions (1, class_decl,
! 						BINFO_TYPE (base_binfo));
      }
  
    return ok;
*************** static void
*** 6208,6214 ****
  java_check_abstract_method_definitions (tree class_decl)
  {
    tree class = TREE_TYPE (class_decl);
!   tree super, vector;
    int i;
  
    if (CLASS_ABSTRACT (class_decl))
--- 6387,6393 ----
  java_check_abstract_method_definitions (tree class_decl)
  {
    tree class = TREE_TYPE (class_decl);
!   tree super, base_binfo;
    int i;
  
    if (CLASS_ABSTRACT (class_decl))
*************** java_check_abstract_method_definitions (
*** 6222,6233 ****
    } while (super != object_type_node);
  
    /* Check for implemented interfaces. */
!   vector = TYPE_BINFO_BASETYPES (class);
!   for (i = 1; i < TREE_VEC_LENGTH (vector); i++)
!     {
!       super = BINFO_TYPE (TREE_VEC_ELT (vector, i));
!       check_abstract_method_definitions (1, class_decl, super);
!     }
  }
  
  /* Check all the types method DECL uses and return 1 if all of them
--- 6401,6408 ----
    } while (super != object_type_node);
  
    /* Check for implemented interfaces. */
!   for (i = 1; BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
!     check_abstract_method_definitions (1, class_decl, BINFO_TYPE (base_binfo));
  }
  
  /* Check all the types method DECL uses and return 1 if all of them
*************** java_check_regular_methods (tree class_d
*** 6332,6338 ****
  	{
  	  if (!inherits_from_p (TREE_VALUE (mthrows), throwable_type_node))
  	    parse_error_context
! 	      (TREE_PURPOSE (mthrows), "Class `%s' in `throws' clause must be a subclass of class `java.lang.Throwable'",
  	       IDENTIFIER_POINTER
  	         (DECL_NAME (TYPE_NAME (TREE_VALUE (mthrows)))));
  	}
--- 6507,6513 ----
  	{
  	  if (!inherits_from_p (TREE_VALUE (mthrows), throwable_type_node))
  	    parse_error_context
! 	      (TREE_PURPOSE (mthrows), "Class %qs in %<throws%> clause must be a subclass of class %<java.lang.Throwable%>",
  	       IDENTIFIER_POINTER
  	         (DECL_NAME (TYPE_NAME (TREE_VALUE (mthrows)))));
  	}
*************** java_check_regular_methods (tree class_d
*** 6355,6362 ****
  	{
  	  char *t = xstrdup (lang_printable_name (class, 0));
  	  parse_error_context
! 	    (method_wfl, "Method `%s' can't be static in inner class `%s'. Only members of interfaces and top-level classes can be static",
! 	     lang_printable_name (method, 0), t);
  	  free (t);
  	}
  
--- 6530,6537 ----
  	{
  	  char *t = xstrdup (lang_printable_name (class, 0));
  	  parse_error_context
! 	    (method_wfl, "Method %qs can't be static in inner class %qs. Only members of interfaces and top-level classes can be static",
! 	     lang_printable_name (method, 2), t);
  	  free (t);
  	}
  
*************** java_check_regular_methods (tree class_d
*** 6376,6384 ****
  	  && !METHOD_PUBLIC (method))
  	{
  	  tree found_decl = TYPE_NAME (DECL_CONTEXT (found));
! 	  parse_error_context (method_wfl, "Class `%s' must override `%s' with a public method in order to implement interface `%s'",
  			       IDENTIFIER_POINTER (DECL_NAME (class_decl)),
! 			       lang_printable_name (method, 0),
  			       IDENTIFIER_POINTER (DECL_NAME (found_decl)));
  	}
  
--- 6551,6559 ----
  	  && !METHOD_PUBLIC (method))
  	{
  	  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)));
  	}
  
*************** java_check_regular_methods (tree class_d
*** 6387,6397 ****
        if (TREE_TYPE (TREE_TYPE (found)) != TREE_TYPE (TREE_TYPE (method)))
  	{
  	  char *t = xstrdup
! 	    (lang_printable_name (TREE_TYPE (TREE_TYPE (found)), 0));
  	  parse_error_context
  	    (method_wfl,
! 	     "Method `%s' was defined with return type `%s' in class `%s'",
! 	     lang_printable_name (found, 0), t,
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  free (t);
--- 6562,6572 ----
        if (TREE_TYPE (TREE_TYPE (found)) != TREE_TYPE (TREE_TYPE (method)))
  	{
  	  char *t = xstrdup
! 	    (lang_printable_name (TREE_TYPE (TREE_TYPE (found)), 2));
  	  parse_error_context
  	    (method_wfl,
! 	     "Method %qs was defined with return type %qs in class %qs",
! 	     lang_printable_name (found, 2), t,
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  free (t);
*************** java_check_regular_methods (tree class_d
*** 6407,6415 ****
  	    continue;
  	  parse_error_context
  	    (method_wfl,
! 	     "%s methods can't be overridden. Method `%s' is %s in class `%s'",
  	     (METHOD_FINAL (found) ? "Final" : "Static"),
! 	     lang_printable_name (found, 0),
  	     (METHOD_FINAL (found) ? "final" : "static"),
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
--- 6582,6590 ----
  	    continue;
  	  parse_error_context
  	    (method_wfl,
! 	     "%s methods can't be overridden. Method %qs is %s in class %qs",
  	     (METHOD_FINAL (found) ? "Final" : "Static"),
! 	     lang_printable_name (found, 2),
  	     (METHOD_FINAL (found) ? "final" : "static"),
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
*************** java_check_regular_methods (tree class_d
*** 6421,6428 ****
  	{
  	  parse_error_context
  	    (method_wfl,
! 	     "Instance methods can't be overridden by a static method. Method `%s' is an instance method in class `%s'",
! 	     lang_printable_name (found, 0),
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  continue;
--- 6596,6603 ----
  	{
  	  parse_error_context
  	    (method_wfl,
! 	     "Instance methods can't be overridden by a static method. Method %qs is an instance method in class %qs",
! 	     lang_printable_name (found, 2),
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  continue;
*************** java_check_regular_methods (tree class_d
*** 6444,6450 ****
  	{
  	  parse_error_context
  	    (method_wfl,
! 	     "Methods can't be overridden to be more private. Method `%s' is not %s in class `%s'", lang_printable_name (method, 0),
  	     (METHOD_PUBLIC (method) ? "public" :
  	      (METHOD_PRIVATE (method) ? "private" : "protected")),
  	     IDENTIFIER_POINTER (DECL_NAME
--- 6619,6625 ----
  	{
  	  parse_error_context
  	    (method_wfl,
! 	     "Methods can't be overridden to be more private. Method %qs is not %s in class %qs", lang_printable_name (method, 2),
  	     (METHOD_PUBLIC (method) ? "public" :
  	      (METHOD_PRIVATE (method) ? "private" : "protected")),
  	     IDENTIFIER_POINTER (DECL_NAME
*************** check_interface_throws_clauses (tree che
*** 6485,6492 ****
  {
    for (; class_decl != NULL_TREE; class_decl = CLASSTYPE_SUPER (class_decl))
      {
-       tree bases;
-       int iface_len;
        int i;
  
        if (! CLASS_LOADED_P (class_decl))
--- 6660,6665 ----
*************** check_interface_throws_clauses (tree che
*** 6497,6507 ****
  	    load_class (class_decl, 1);
  	}
  
!       bases = TYPE_BINFO_BASETYPES (class_decl);
!       iface_len = TREE_VEC_LENGTH (bases) - 1;
!       for (i = iface_len; i > 0; --i)
  	{
! 	  tree interface = BINFO_TYPE (TREE_VEC_ELT (bases, i));
  	  tree iface_method;
  
  	  for (iface_method = TYPE_METHODS (interface);
--- 6670,6679 ----
  	    load_class (class_decl, 1);
  	}
  
!       for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (class_decl)) - 1; i > 0; --i)
  	{
! 	  tree interface
! 	    = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (class_decl), i));
  	  tree iface_method;
  
  	  for (iface_method = TYPE_METHODS (interface);
*************** check_throws_clauses (tree method, tree 
*** 6588,6596 ****
        if (!fthrows)
  	{
  	  parse_error_context
! 	    (method_wfl, "Invalid checked exception class `%s' in `throws' clause.  The exception must be a subclass of an exception thrown by `%s' from class `%s'",
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (TREE_VALUE (mthrows)))),
! 	     lang_printable_name (found, 0),
  	     IDENTIFIER_POINTER
  	     (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	}
--- 6760,6768 ----
        if (!fthrows)
  	{
  	  parse_error_context
! 	    (method_wfl, "Invalid checked exception class %qs in %<throws%> clause.  The exception must be a subclass of an exception thrown by %qs from class %qs",
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (TREE_VALUE (mthrows)))),
! 	     lang_printable_name (found, 2),
  	     IDENTIFIER_POINTER
  	     (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	}
*************** check_throws_clauses (tree method, tree 
*** 6601,6609 ****
  static void
  java_check_abstract_methods (tree interface_decl)
  {
!   int i, n;
!   tree method, basetype_vec, found;
    tree interface = TREE_TYPE (interface_decl);
  
    for (method = TYPE_METHODS (interface); method; method = TREE_CHAIN (method))
      {
--- 6773,6782 ----
  static void
  java_check_abstract_methods (tree interface_decl)
  {
!   int i;
!   tree method, found;
    tree interface = TREE_TYPE (interface_decl);
+   tree base_binfo;
  
    for (method = TYPE_METHODS (interface); method; method = TREE_CHAIN (method))
      {
*************** java_check_abstract_methods (tree interf
*** 6616,6626 ****
        if (found)
  	{
  	  char *t;
! 	  t = xstrdup (lang_printable_name (TREE_TYPE (TREE_TYPE (found)), 0));
  	  parse_error_context
  	    (DECL_FUNCTION_WFL (found),
! 	     "Method `%s' was defined with return type `%s' in class `%s'",
! 	     lang_printable_name (found, 0), t,
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  free (t);
--- 6789,6799 ----
        if (found)
  	{
  	  char *t;
! 	  t = xstrdup (lang_printable_name (TREE_TYPE (TREE_TYPE (found)), 2));
  	  parse_error_context
  	    (DECL_FUNCTION_WFL (found),
! 	     "Method %qs was defined with return type %qs in class %qs",
! 	     lang_printable_name (found, 2), t,
  	     IDENTIFIER_POINTER
  	       (DECL_NAME (TYPE_NAME (DECL_CONTEXT (found)))));
  	  free (t);
*************** java_check_abstract_methods (tree interf
*** 6629,6644 ****
      }
  
    /* 4- Inherited methods can't differ by their returned types */
!   if (!(basetype_vec = TYPE_BINFO_BASETYPES (interface)))
!     return;
!   n = TREE_VEC_LENGTH (basetype_vec);
!   for (i = 0; i < n; i++)
      {
        tree sub_interface_method, sub_interface;
!       tree vec_elt = TREE_VEC_ELT (basetype_vec, i);
!       if (!vec_elt)
! 	continue;
!       sub_interface = BINFO_TYPE (vec_elt);
        for (sub_interface_method = TYPE_METHODS (sub_interface);
  	   sub_interface_method;
  	   sub_interface_method = TREE_CHAIN (sub_interface_method))
--- 6802,6812 ----
      }
  
    /* 4- Inherited methods can't differ by their returned types */
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (interface), i, base_binfo); i++)
      {
        tree sub_interface_method, sub_interface;
! 
!       sub_interface = BINFO_TYPE (base_binfo);
        for (sub_interface_method = TYPE_METHODS (sub_interface);
  	   sub_interface_method;
  	   sub_interface_method = TREE_CHAIN (sub_interface_method))
*************** java_check_abstract_methods (tree interf
*** 6649,6657 ****
  	    {
  	      parse_error_context
  		(lookup_cl (sub_interface_method),
! 		 "Interface `%s' inherits method `%s' from interface `%s'. This method is redefined with a different return type in interface `%s'",
  		 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (interface))),
! 		 lang_printable_name (found, 0),
  		 IDENTIFIER_POINTER
  		   (DECL_NAME (TYPE_NAME
  			       (DECL_CONTEXT (sub_interface_method)))),
--- 6817,6825 ----
  	    {
  	      parse_error_context
  		(lookup_cl (sub_interface_method),
! 		 "Interface %qs inherits method %qs from interface %qs. This method is redefined with a different return type in interface %qs",
  		 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (interface))),
! 		 lang_printable_name (found, 2),
  		 IDENTIFIER_POINTER
  		   (DECL_NAME (TYPE_NAME
  			       (DECL_CONTEXT (sub_interface_method)))),
*************** java_check_abstract_methods (tree interf
*** 6668,6692 ****
  static tree
  lookup_java_interface_method2 (tree class, tree method_decl)
  {
!   int i, n;
!   tree basetype_vec = TYPE_BINFO_BASETYPES (class), to_return;
! 
!   if (!basetype_vec)
!     return NULL_TREE;
  
!   n = TREE_VEC_LENGTH (basetype_vec);
!   for (i = 0; i < n; i++)
      {
!       tree vec_elt = TREE_VEC_ELT (basetype_vec, i), to_return;
!       if ((BINFO_TYPE (vec_elt) != object_type_node)
  	  && (to_return =
! 	      lookup_java_method2 (BINFO_TYPE (vec_elt), method_decl, 1)))
  	return to_return;
      }
!   for (i = 0; i < n; i++)
      {
        to_return = lookup_java_interface_method2
! 	(BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i)), method_decl);
        if (to_return)
  	return to_return;
      }
--- 6836,6856 ----
  static tree
  lookup_java_interface_method2 (tree class, tree method_decl)
  {
!   int i;
!   tree base_binfo;
!   tree to_return;
  
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
      {
!       if ((BINFO_TYPE (base_binfo) != object_type_node)
  	  && (to_return =
! 	      lookup_java_method2 (BINFO_TYPE (base_binfo), method_decl, 1)))
  	return to_return;
      }
!   for (i = 0; BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
      {
        to_return = lookup_java_interface_method2
! 	(BINFO_TYPE (base_binfo), method_decl);
        if (to_return)
  	return to_return;
      }
*************** lookup_java_method2 (tree clas, tree met
*** 6727,6748 ****
  }
  
  /* Return the line that matches DECL line number, and try its best to
!    position the column number. Used during error reports.  */
  
  static GTY(()) tree cl_v;
  static tree
  lookup_cl (tree decl)
  {
    char *line, *found;
  
    if (!decl)
      return NULL_TREE;
  
    if (cl_v == NULL_TREE)
      {
!       cl_v = build_expr_wfl (NULL_TREE, NULL, 0, 0);
      }
  
    EXPR_WFL_FILENAME_NODE (cl_v) = get_identifier (DECL_SOURCE_FILE (decl));
    EXPR_WFL_SET_LINECOL (cl_v, DECL_SOURCE_LINE (decl), -1);
  
--- 6891,6918 ----
  }
  
  /* Return the line that matches DECL line number, and try its best to
!    position the column number. Used during error reports.
!    FUTURE/FIXME: return source_location instead of node. */
  
  static GTY(()) tree cl_v;
  static tree
  lookup_cl (tree decl)
  {
+ #ifndef USE_MAPPED_LOCATION
    char *line, *found;
+ #endif
  
    if (!decl)
      return NULL_TREE;
  
    if (cl_v == NULL_TREE)
      {
!       cl_v = build_unknown_wfl (NULL_TREE);
      }
  
+ #ifdef USE_MAPPED_LOCATION
+   SET_EXPR_LOCATION (cl_v, DECL_SOURCE_LOCATION (decl));
+ #else
    EXPR_WFL_FILENAME_NODE (cl_v) = get_identifier (DECL_SOURCE_FILE (decl));
    EXPR_WFL_SET_LINECOL (cl_v, DECL_SOURCE_LINE (decl), -1);
  
*************** lookup_cl (tree decl)
*** 6753,6758 ****
--- 6923,6929 ----
  		  (const char *)IDENTIFIER_POINTER (DECL_NAME (decl)));
    if (found)
      EXPR_WFL_SET_LINECOL (cl_v, EXPR_WFL_LINENO (cl_v), found - line);
+ #endif
  
    return cl_v;
  }
*************** process_imports (void)
*** 6784,6797 ****
        tree to_be_found = EXPR_WFL_NODE (TREE_PURPOSE (import));
        char *original_name;
  
-       original_name = xmemdup (IDENTIFIER_POINTER (to_be_found),
- 			       IDENTIFIER_LENGTH (to_be_found),
- 			       IDENTIFIER_LENGTH (to_be_found) + 1);
- 
        /* Don't load twice something already defined. */
        if (IDENTIFIER_CLASS_VALUE (to_be_found))
  	continue;
  
        while (1)
  	{
  	  tree left;
--- 6955,6968 ----
        tree to_be_found = EXPR_WFL_NODE (TREE_PURPOSE (import));
        char *original_name;
  
        /* Don't load twice something already defined. */
        if (IDENTIFIER_CLASS_VALUE (to_be_found))
  	continue;
  
+       original_name = xmemdup (IDENTIFIER_POINTER (to_be_found),
+ 			       IDENTIFIER_LENGTH (to_be_found),
+ 			       IDENTIFIER_LENGTH (to_be_found) + 1);
+ 
        while (1)
  	{
  	  tree left;
*************** process_imports (void)
*** 6799,6805 ****
  	  QUALIFIED_P (to_be_found) = 1;
  	  load_class (to_be_found, 0);
  	  error_found =
! 	    check_pkg_class_access (to_be_found, TREE_PURPOSE (import), true);
  
  	  /* We found it, we can bail out */
  	  if (IDENTIFIER_CLASS_VALUE (to_be_found))
--- 6970,6976 ----
  	  QUALIFIED_P (to_be_found) = 1;
  	  load_class (to_be_found, 0);
  	  error_found =
! 	    check_pkg_class_access (to_be_found, TREE_PURPOSE (import), true, NULL_TREE);
  
  	  /* We found it, we can bail out */
  	  if (IDENTIFIER_CLASS_VALUE (to_be_found))
*************** process_imports (void)
*** 6813,6819 ****
  	     inner class.  The only way for us to know is to try again
  	     after having dropped a qualifier. If we can't break it further,
  	     we have an error. */
! 	  if (breakdown_qualified (&left, NULL, to_be_found))
  	    break;
  
  	  to_be_found = left;
--- 6984,6990 ----
  	     inner class.  The only way for us to know is to try again
  	     after having dropped a qualifier. If we can't break it further,
  	     we have an error. */
! 	  if (split_qualified_name (&left, NULL, to_be_found))
  	    break;
  
  	  to_be_found = left;
*************** process_imports (void)
*** 6821,6827 ****
        if (!IDENTIFIER_CLASS_VALUE (to_be_found))
  	{
  	  parse_error_context (TREE_PURPOSE (import),
! 			       "Class or interface `%s' not found in import",
  			       original_name);
  	  error_found = 1;
  	}
--- 6992,6998 ----
        if (!IDENTIFIER_CLASS_VALUE (to_be_found))
  	{
  	  parse_error_context (TREE_PURPOSE (import),
! 			       "Class or interface %qs not found in import",
  			       original_name);
  	  error_found = 1;
  	}
*************** read_import_dir (tree wfl)
*** 6904,6910 ****
  	  buffer_grow (filename, entry_length);
  	  memcpy (filename->data, entry_name, entry_length - 1);
  	  filename->data[entry_length-1] = '\0';
! 	  zipf = opendir_in_zip (filename->data, jcf_path_is_system (entry));
  	  if (zipf == NULL)
  	    error ("malformed .zip archive in CLASSPATH: %s", entry_name);
  	  else
--- 7075,7081 ----
  	  buffer_grow (filename, entry_length);
  	  memcpy (filename->data, entry_name, entry_length - 1);
  	  filename->data[entry_length-1] = '\0';
! 	  zipf = opendir_in_zip ((const char *) filename->data, jcf_path_is_system (entry));
  	  if (zipf == NULL)
  	    error ("malformed .zip archive in CLASSPATH: %s", entry_name);
  	  else
*************** read_import_dir (tree wfl)
*** 6924,6930 ****
  		  int current_entry_len = zipd->filename_length;
  
  		  if (current_entry_len >= BUFFER_LENGTH (filename)
! 		      && strncmp (filename->data, current_entry,
  				  BUFFER_LENGTH (filename)) != 0)
  		    continue;
  		  found |= note_possible_classname (current_entry,
--- 7095,7101 ----
  		  int current_entry_len = zipd->filename_length;
  
  		  if (current_entry_len >= BUFFER_LENGTH (filename)
! 		      && strncmp ((const char *) filename->data, current_entry,
  				  BUFFER_LENGTH (filename)) != 0)
  		    continue;
  		  found |= note_possible_classname (current_entry,
*************** read_import_dir (tree wfl)
*** 6936,6942 ****
  	{
  	  BUFFER_RESET (filename);
  	  buffer_grow (filename, entry_length + package_length + 4);
! 	  strcpy (filename->data, entry_name);
  	  filename->ptr = filename->data + entry_length;
  	  for (k = 0; k < package_length; k++)
  	    {
--- 7107,7113 ----
  	{
  	  BUFFER_RESET (filename);
  	  buffer_grow (filename, entry_length + package_length + 4);
! 	  strcpy ((char *) filename->data, entry_name);
  	  filename->ptr = filename->data + entry_length;
  	  for (k = 0; k < package_length; k++)
  	    {
*************** read_import_dir (tree wfl)
*** 6945,6951 ****
  	    }
  	  *filename->ptr = '\0';
  
! 	  dirp = opendir (filename->data);
  	  if (dirp == NULL)
  	    continue;
  	  *filename->ptr++ = '/';
--- 7116,7122 ----
  	    }
  	  *filename->ptr = '\0';
  
! 	  dirp = opendir ((const char *) filename->data);
  	  if (dirp == NULL)
  	    continue;
  	  *filename->ptr++ = '/';
*************** read_import_dir (tree wfl)
*** 6959,6966 ****
  	      d_name = direntp->d_name;
  	      len = strlen (direntp->d_name);
  	      buffer_grow (filename, len+1);
! 	      strcpy (filename->ptr, d_name);
! 	      found |= note_possible_classname (filename->data + entry_length,
  						package_length+len+1);
  	    }
  	  if (dirp)
--- 7130,7137 ----
  	      d_name = direntp->d_name;
  	      len = strlen (direntp->d_name);
  	      buffer_grow (filename, len+1);
! 	      strcpy ((char *) filename->ptr, d_name);
! 	      found |= note_possible_classname ((const char *) filename->data + entry_length,
  						package_length+len+1);
  	    }
  	  if (dirp)
*************** read_import_dir (tree wfl)
*** 6977,6988 ****
        static int first = 1;
        if (first)
  	{
! 	  error ("Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives", package_name);
  	  java_error_count++;
  	  first = 0;
  	}
        else
! 	parse_error_context (wfl, "Package `%s' not found in import",
  			     package_name);
        current_jcf = saved_jcf;
        return;
--- 7148,7159 ----
        static int first = 1;
        if (first)
  	{
! 	  error ("Can't find default package %qs. Check the CLASSPATH environment variable and the access to the archives", package_name);
  	  java_error_count++;
  	  first = 0;
  	}
        else
! 	parse_error_context (wfl, "Package %qs not found in import",
  			     package_name);
        current_jcf = saved_jcf;
        return;
*************** find_in_imports_on_demand (tree enclosin
*** 7007,7013 ****
  
    for (; import; import = TREE_CHAIN (import))
      {
!       int saved_lineno = input_line;
        int access_check;
        const char *id_name;
        tree decl, type_name_copy;
--- 7178,7184 ----
  
    for (; import; import = TREE_CHAIN (import))
      {
!       location_t saved_location = input_location;
        int access_check;
        const char *id_name;
        tree decl, type_name_copy;
*************** find_in_imports_on_demand (tree enclosin
*** 7024,7032 ****
        if (! (node = maybe_get_identifier (id_name)))
  	continue;
  
!       /* Setup lineno so that it refers to the line of the import (in
  	 case we parse a class file and encounter errors */
        input_line = EXPR_WFL_LINENO (TREE_PURPOSE (import));
  
        type_name_copy = TYPE_NAME (class_type);
        TYPE_NAME (class_type) = node;
--- 7195,7207 ----
        if (! (node = maybe_get_identifier (id_name)))
  	continue;
  
!       /* Setup input_line so that it refers to the line of the import (in
  	 case we parse a class file and encounter errors */
+ #ifdef USE_MAPPED_LOCATION
+       input_location = EXPR_LOCATION (TREE_PURPOSE (import));
+ #else
        input_line = EXPR_WFL_LINENO (TREE_PURPOSE (import));
+ #endif
  
        type_name_copy = TYPE_NAME (class_type);
        TYPE_NAME (class_type) = node;
*************** find_in_imports_on_demand (tree enclosin
*** 7035,7054 ****
        access_check = -1;
        /* If there is no DECL set for the class or if the class isn't
  	 loaded and not seen in source yet, then load */
!       if (!decl || (!CLASS_LOADED_P (TREE_TYPE (decl))
! 		    && !CLASS_FROM_SOURCE_P (TREE_TYPE (decl))))
  	{
  	  load_class (node, 0);
  	  decl = IDENTIFIER_CLASS_VALUE (node);
  	}
        if (decl && ! INNER_CLASS_P (TREE_TYPE (decl)))
  	access_check = check_pkg_class_access (node, TREE_PURPOSE (import),
! 					       false);
        else
  	/* 6.6.1: Inner classes are subject to member access rules. */
  	access_check = 0;
  
!       input_line = saved_lineno;
  
        /* If the loaded class is not accessible or couldn't be loaded,
  	 we restore the original TYPE_NAME and process the next
--- 7210,7228 ----
        access_check = -1;
        /* If there is no DECL set for the class or if the class isn't
  	 loaded and not seen in source yet, then load */
!       if (!decl || ! CLASS_LOADED_P (TREE_TYPE (decl)))
  	{
  	  load_class (node, 0);
  	  decl = IDENTIFIER_CLASS_VALUE (node);
  	}
        if (decl && ! INNER_CLASS_P (TREE_TYPE (decl)))
  	access_check = check_pkg_class_access (node, TREE_PURPOSE (import),
! 					       false, NULL_TREE);
        else
  	/* 6.6.1: Inner classes are subject to member access rules. */
  	access_check = 0;
  
!       input_location = saved_location;
  
        /* If the loaded class is not accessible or couldn't be loaded,
  	 we restore the original TYPE_NAME and process the next
*************** find_in_imports_on_demand (tree enclosin
*** 7076,7082 ****
  	      seen_once++;
  	      parse_error_context
  		(location,
! 		 "Type `%s' also potentially defined in package `%s'",
  		 IDENTIFIER_POINTER (TYPE_NAME (class_type)),
  		 IDENTIFIER_POINTER (package));
  	    }
--- 7250,7256 ----
  	      seen_once++;
  	      parse_error_context
  		(location,
! 		 "Type %qs also potentially defined in package %qs",
  		 IDENTIFIER_POINTER (TYPE_NAME (class_type)),
  		 IDENTIFIER_POINTER (package));
  	    }
*************** check_inner_class_access (tree decl, tre
*** 7223,7238 ****
  
    parse_error_context (cl, "Nested %s %s is %s; cannot be accessed from here",
  		       (CLASS_INTERFACE (decl) ? "interface" : "class"),
! 		       lang_printable_name (decl, 0), access);
  }
  
  /* Accessibility check for top-level classes. If CLASS_NAME is in a
     foreign package, it must be PUBLIC. Return 0 if no access
     violations were found, 1 otherwise. If VERBOSE is true and an error
!    was found, it is reported and accounted for.  */
  
  static int
! check_pkg_class_access (tree class_name, tree cl, bool verbose)
  {
    tree type;
  
--- 7397,7413 ----
  
    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);
  }
  
  /* Accessibility check for top-level classes. If CLASS_NAME is in a
     foreign package, it must be PUBLIC. Return 0 if no access
     violations were found, 1 otherwise. If VERBOSE is true and an error
!    was found, it is reported and accounted for.  If CL is NULL then 
!    look it up with THIS_DECL.  */
  
  static int
! check_pkg_class_access (tree class_name, tree cl, bool verbose, tree this_decl)
  {
    tree type;
  
*************** check_pkg_class_access (tree class_name,
*** 7247,7253 ****
        /* Access to a private class within the same package is
           allowed. */
        tree l, r;
!       breakdown_qualified (&l, &r, class_name);
        if (!QUALIFIED_P (class_name) && !ctxp->package)
  	/* Both in the empty package. */
          return 0;
--- 7422,7428 ----
        /* Access to a private class within the same package is
           allowed. */
        tree l, r;
!       split_qualified_name (&l, &r, class_name);
        if (!QUALIFIED_P (class_name) && !ctxp->package)
  	/* Both in the empty package. */
          return 0;
*************** check_pkg_class_access (tree class_name,
*** 7257,7263 ****
  
        if (verbose)
  	parse_error_context
! 	  (cl, "Can't access %s `%s'. Only public classes and interfaces in other packages can be accessed",
  	   (CLASS_INTERFACE (TYPE_NAME (type)) ? "interface" : "class"),
  	   IDENTIFIER_POINTER (class_name));
        return 1;
--- 7432,7439 ----
  
        if (verbose)
  	parse_error_context
! 	  (cl == NULL ? lookup_cl (this_decl): cl,
!            "Can't access %s %qs. Only public classes and interfaces in other packages can be accessed",
  	   (CLASS_INTERFACE (TYPE_NAME (type)) ? "interface" : "class"),
  	   IDENTIFIER_POINTER (class_name));
        return 1;
*************** declare_local_variables (int modifier, t
*** 7295,7301 ****
  	{
  	  parse_error_context
  	    (ctxp->modifier_ctx [i],
! 	     "Only `final' is allowed as a local variables modifier");
  	  return;
  	}
      }
--- 7471,7477 ----
  	{
  	  parse_error_context
  	    (ctxp->modifier_ctx [i],
! 	     "Only %<final%> is allowed as a local variables modifier");
  	  return;
  	}
      }
*************** declare_local_variables (int modifier, t
*** 7343,7355 ****
--- 7519,7543 ----
  
        /* 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;
  
+       /* Remember it if this is an initialized-upon-declaration final
+          variable.  */
+       if (init && final_p)
+         {
+           DECL_LOCAL_FINAL_IUD (decl) = 1;
+         }
+ 
        /* Add the initialization function to the current function's code */
        if (init)
  	{
*************** create_artificial_method (tree class, in
*** 7435,7448 ****
  			  tree name, tree args)
  {
    tree mdecl;
  
!   java_parser_context_save_global ();
!   input_line = 0;
    mdecl = make_node (FUNCTION_TYPE);
    TREE_TYPE (mdecl) = type;
    TYPE_ARG_TYPES (mdecl) = args;
!   mdecl = add_method (class, flags, name, build_java_signature (mdecl));
!   java_parser_context_restore_global ();
    DECL_ARTIFICIAL (mdecl) = 1;
    return mdecl;
  }
--- 7623,7640 ----
  			  tree name, tree args)
  {
    tree mdecl;
+   location_t save_location = input_location;
  
!   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (class));
    mdecl = make_node (FUNCTION_TYPE);
    TREE_TYPE (mdecl) = type;
    TYPE_ARG_TYPES (mdecl) = args;
!   /* We used to compute the signature of MDECL here and then use
!      add_method(), but that failed because our caller might modify
!      the type of the returned method, which trashes the cache in
!      get_type_from_signature().  */
!   mdecl = add_method_1 (class, flags, name, mdecl);
!   input_location = save_location;
    DECL_ARTIFICIAL (mdecl) = 1;
    return mdecl;
  }
*************** create_artificial_method (tree class, in
*** 7452,7459 ****
--- 7644,7656 ----
  static void
  start_artificial_method_body (tree mdecl)
  {
+ #ifdef USE_MAPPED_LOCATION
+   DECL_SOURCE_LOCATION (mdecl) = ctxp->file_start_location;
+   DECL_FUNCTION_LAST_LINE (mdecl) = ctxp->file_start_location;
+ #else
    DECL_SOURCE_LINE (mdecl) = 1;
    DECL_FUNCTION_LAST_LINE (mdecl) = 1;
+ #endif
    source_start_java_method (mdecl);
    enter_block ();
  }
*************** source_end_java_method (void)
*** 7497,7520 ****
      return;
  
    java_parser_context_save_global ();
    input_line = ctxp->last_ccb_indent1;
  
    /* Turn function bodies with only a NOP expr null, so they don't get
       generated at all and we won't get warnings when using the -W
       -Wall flags. */
!   if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl)) == empty_stmt_node)
      BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl)) = NULL_TREE;
  
!   /* We've generated all the trees for this function, and it has been
!      patched.  Dump it to a file if the user requested it.  */
!   dump_java_tree (TDI_original, fndecl);
! 
!   /* Defer expanding the method until cgraph analysis is complete.  */
!   if (DECL_SAVED_TREE (fndecl))
!     cgraph_finalize_function (fndecl, false);
  
    current_function_decl = NULL_TREE;
    java_parser_context_restore_global ();
  }
  
  /* Record EXPR in the current function block. Complements compound
--- 7694,7719 ----
      return;
  
    java_parser_context_save_global ();
+ #ifdef USE_MAPPED_LOCATION
+   input_location = ctxp->last_ccb_indent1;
+ #else
    input_line = ctxp->last_ccb_indent1;
+ #endif
  
    /* Turn function bodies with only a NOP expr null, so they don't get
       generated at all and we won't get warnings when using the -W
       -Wall flags. */
!   if (IS_EMPTY_STMT (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl))))
      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;
    java_parser_context_restore_global ();
+   current_function_decl = NULL_TREE;
  }
  
  /* Record EXPR in the current function block. Complements compound
*************** add_stmt_to_block (tree b, tree type, tr
*** 7544,7562 ****
    return c;
  }
  
! /* Add STMT to EXISTING if possible, otherwise create a new
!    COMPOUND_EXPR and add STMT to it. */
! 
! static tree
! add_stmt_to_compound (tree existing, tree type, tree stmt)
! {
!   if (existing)
!     return build (COMPOUND_EXPR, type, existing, stmt);
!   else
!     return stmt;
! }
  
! void java_layout_seen_class_methods (void)
  {
    tree previous_list = all_class_list;
    tree end = NULL_TREE;
--- 7743,7752 ----
    return c;
  }
  
! /* Lays out the methods for the classes seen so far.  */
  
! void
! java_layout_seen_class_methods (void)
  {
    tree previous_list = all_class_list;
    tree end = NULL_TREE;
*************** void java_layout_seen_class_methods (voi
*** 7566,7572 ****
      {
        for (current = previous_list;
  	   current != end; current = TREE_CHAIN (current))
! 	layout_class_methods (TREE_TYPE (TREE_VALUE (current)));
  
        if (previous_list != all_class_list)
  	{
--- 7756,7775 ----
      {
        for (current = previous_list;
  	   current != end; current = TREE_CHAIN (current))
!         {
! 	  tree decl = TREE_VALUE (current);
!           tree cls = TREE_TYPE (decl);
! 
! 	  input_location = DECL_SOURCE_LOCATION (decl);
! 
!           if (! CLASS_LOADED_P (cls))
!             load_class (cls, 0);
! 
!           layout_class_methods (cls);
!         }
! 
!       /* Note that new classes might have been added while laying out
!          methods, changing the value of all_class_list.  */
  
        if (previous_list != all_class_list)
  	{
*************** java_complete_expand_class (tree outer)
*** 7681,7688 ****
  {
    tree inner_list;
  
-   set_nested_class_simple_name_value (outer, 1); /* Set */
- 
    /* We need to go after all inner classes and start expanding them,
       starting with most nested ones. We have to do that because nested
       classes might add functions to outer classes */
--- 7884,7889 ----
*************** java_complete_expand_class (tree outer)
*** 7692,7698 ****
      java_complete_expand_class (TREE_PURPOSE (inner_list));
  
    java_complete_expand_methods (outer);
-   set_nested_class_simple_name_value (outer, 0); /* Reset */
  }
  
  /* Expand methods registered in CLASS_DECL. The general idea is that
--- 7893,7898 ----
*************** java_complete_expand_methods (tree class
*** 7729,7749 ****
    /* Now do the constructors */
    for (decl = first_decl ; !java_error_count && decl; decl = TREE_CHAIN (decl))
      {
-       int no_body;
- 
        if (!DECL_CONSTRUCTOR_P (decl))
  	continue;
- 
-       no_body = !DECL_FUNCTION_BODY (decl);
-       /* Don't generate debug info on line zero when expanding a
- 	 generated constructor. */
-       if (no_body)
- 	restore_line_number_status (1);
- 
        java_complete_expand_method (decl);
- 
-       if (no_body)
- 	restore_line_number_status (0);
      }
  
    /* First, do the ordinary methods. */
--- 7929,7937 ----
*************** maybe_generate_pre_expand_clinit (tree c
*** 7828,7834 ****
        /* We build the assignment expression that will initialize the
  	 field to its value. There are strict rules on static
  	 initializers (8.5). FIXME */
!       if (TREE_CODE (stmt) != BLOCK && stmt != empty_stmt_node)
  	stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
        java_method_add_stmt (mdecl, stmt);
      }
--- 8016,8022 ----
        /* We build the assignment expression that will initialize the
  	 field to its value. There are strict rules on static
  	 initializers (8.5). FIXME */
!       if (TREE_CODE (stmt) != BLOCK && !IS_EMPTY_STMT (stmt))
  	stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
        java_method_add_stmt (mdecl, stmt);
      }
*************** maybe_yank_clinit (tree mdecl)
*** 7922,7928 ****
      bbody = BLOCK_EXPR_BODY (bbody);
    else
      return 0;
!   if (bbody && ! flag_emit_class_files && bbody != empty_stmt_node)
      return 0;
  
    type = DECL_CONTEXT (mdecl);
--- 8110,8116 ----
      bbody = BLOCK_EXPR_BODY (bbody);
    else
      return 0;
!   if (bbody && ! flag_emit_class_files && !IS_EMPTY_STMT (bbody))
      return 0;
  
    type = DECL_CONTEXT (mdecl);
*************** maybe_yank_clinit (tree mdecl)
*** 7956,7962 ****
  
    /* Now we analyze the method body and look for something that
       isn't a MODIFY_EXPR */
!   if (bbody != empty_stmt_node && analyze_clinit_body (type, bbody))
      return 0;
  
    /* Get rid of <clinit> in the class' list of methods */
--- 8144,8150 ----
  
    /* 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 */
*************** start_complete_expand_method (tree mdecl
*** 7991,7997 ****
        /* TREE_CHAIN (tem) will change after pushdecl. */
        tree next = TREE_CHAIN (tem);
        tree type = TREE_TYPE (tem);
!       if (PROMOTE_PROTOTYPES
  	  && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)
  	  && INTEGRAL_TYPE_P (type))
  	type = integer_type_node;
--- 8179,8185 ----
        /* TREE_CHAIN (tem) will change after pushdecl. */
        tree next = TREE_CHAIN (tem);
        tree type = TREE_TYPE (tem);
!       if (targetm.calls.promote_prototypes (type)
  	  && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)
  	  && INTEGRAL_TYPE_P (type))
  	type = integer_type_node;
*************** start_complete_expand_method (tree mdecl
*** 8003,8009 ****
        TREE_CHAIN (tem) = next;
      }
    pushdecl_force_head (DECL_ARGUMENTS (mdecl));
!   input_line = DECL_SOURCE_LINE (mdecl);
    build_result_decl (mdecl);
  }
  
--- 8191,8197 ----
        TREE_CHAIN (tem) = next;
      }
    pushdecl_force_head (DECL_ARGUMENTS (mdecl));
!   input_location = DECL_SOURCE_LOCATION (mdecl);
    build_result_decl (mdecl);
  }
  
*************** java_expand_method_bodies (tree class)
*** 8121,8127 ****
    for (decl = TYPE_METHODS (class); decl; decl = TREE_CHAIN (decl))
      {
        tree block;
-       tree body;
  
        if (! DECL_FUNCTION_BODY (decl))
  	continue;
--- 8309,8314 ----
*************** java_expand_method_bodies (tree class)
*** 8130,8146 ****
  
        block = BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (decl));
  
!       if (TREE_CODE (block) != BLOCK)
! 	abort ();
! 
!       /* Save the function body for inlining.  */
        DECL_SAVED_TREE (decl) = block;
  
-       body = BLOCK_EXPR_BODY (block);
- 
-       if (TREE_TYPE (body) == NULL_TREE)
- 	abort ();
- 
        /* It's time to assign the variable flagging static class
  	 initialization based on which classes invoked static methods
  	 are definitely initializing. This should be flagged. */
--- 8317,8325 ----
  
        block = BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (decl));
  
!       /* Save the function body for gimplify and inlining.  */
        DECL_SAVED_TREE (decl) = block;
  
        /* It's time to assign the variable flagging static class
  	 initialization based on which classes invoked static methods
  	 are definitely initializing. This should be flagged. */
*************** java_expand_method_bodies (tree class)
*** 8172,8212 ****
  	    }
  	}
  
!       /* Prepend class initialization to static methods.  */
!       if (METHOD_STATIC (decl) && ! METHOD_PRIVATE (decl)
! 	  && ! flag_emit_class_files
! 	  && ! DECL_CLINIT_P (decl)
! 	  && ! CLASS_INTERFACE (TYPE_NAME (class)))
! 	{
! 	  tree init = build (CALL_EXPR, void_type_node,
! 			     build_address_of (soft_initclass_node),
! 			     build_tree_list (NULL_TREE,
! 					      build_class_ref (class)),
! 			     NULL_TREE);
! 	  TREE_SIDE_EFFECTS (init) = 1;
! 	  body = build (COMPOUND_EXPR, TREE_TYPE (body), init, body);
! 	  BLOCK_EXPR_BODY (block) = body;
! 	}
! 
!       /* Wrap synchronized method bodies in a monitorenter
! 	 plus monitorexit cleanup.  */
!       if (METHOD_SYNCHRONIZED (decl) && ! flag_emit_class_files)
! 	{
! 	  tree enter, exit, lock;
! 	  if (METHOD_STATIC (decl))
! 	    lock = build_class_ref (class);
! 	  else
! 	    lock = DECL_ARGUMENTS (decl);
! 	  BUILD_MONITOR_ENTER (enter, lock);
! 	  BUILD_MONITOR_EXIT (exit, lock);
! 
! 	  body = build (COMPOUND_EXPR, void_type_node,
! 			enter,
! 			build (TRY_FINALLY_EXPR, void_type_node, body, exit));
! 	  BLOCK_EXPR_BODY (block) = body;
! 	}
! 
!       /* Expand the the function body.  */
        source_end_java_method ();
      }
  }
--- 8351,8357 ----
  	    }
  	}
  
!       /* Expand the function body.  */
        source_end_java_method ();
      }
  }
*************** build_thisn_assign (void)
*** 8718,8724 ****
--- 8863,8873 ----
        tree lhs = make_qualified_primary (build_wfl_node (this_identifier_node),
  					 build_wfl_node (thisn), 0);
        tree rhs = build_wfl_node (thisn);
+ #ifdef USE_MAPPED_LOCATION
+       SET_EXPR_LOCATION (lhs, input_location);
+ #else
        EXPR_WFL_SET_LINECOL (lhs, input_line, 0);
+ #endif
        return build_assignment (ASSIGN_TK, EXPR_WFL_LINECOL (lhs), lhs, rhs);
      }
    return NULL_TREE;
*************** static tree
*** 8742,8748 ****
--- 8891,8901 ----
  build_dot_class_method (tree class)
  {
  #define BWF(S) build_wfl_node (get_identifier ((S)))
+ #ifdef USE_MAPPED_LOCATION
+ #define MQN(X,Y) make_qualified_name ((X), (Y), UNKNOWN_LOCATION)
+ #else
  #define MQN(X,Y) make_qualified_name ((X), (Y), 0)
+ #endif
    tree args, tmp, saved_current_function_decl, mdecl, qual_name;
    tree stmt, throw_stmt;
  
*************** build_dot_class_method (tree class)
*** 8780,8787 ****
--- 8933,8945 ----
  
    /* Now onto the catch block. We start by building the expression
       throwing a new exception: throw new NoClassDefFoundError (_.getMessage) */
+ #ifdef USE_MAPPED_LOCATION
+   throw_stmt = make_qualified_name (build_wfl_node (wpv_id),
+ 				    get_message_wfl, UNKNOWN_LOCATION);
+ #else
    throw_stmt = make_qualified_name (build_wfl_node (wpv_id),
  				    get_message_wfl, 0);
+ #endif
    throw_stmt = build_method_invocation (throw_stmt, NULL_TREE);
  
    /* Build new NoClassDefFoundError (_.getMessage) */
*************** static void
*** 8846,8852 ****
  fix_constructors (tree mdecl)
  {
    tree iii;			/* Instance Initializer Invocation */
!   tree body = DECL_FUNCTION_BODY (mdecl);
    tree thisn_assign, compound = NULL_TREE;
    tree class_type = DECL_CONTEXT (mdecl);
  
--- 9004,9010 ----
  fix_constructors (tree mdecl)
  {
    tree iii;			/* Instance Initializer Invocation */
!   tree *bodyp = &DECL_FUNCTION_BODY (mdecl);
    tree thisn_assign, compound = NULL_TREE;
    tree class_type = DECL_CONTEXT (mdecl);
  
*************** fix_constructors (tree mdecl)
*** 8854,8860 ****
      return;
    DECL_FIXED_CONSTRUCTOR_P (mdecl) = 1;
  
!   if (!body)
      {
        /* It is an error for the compiler to generate a default
  	 constructor if the superclass doesn't have a constructor that
--- 9012,9018 ----
      return;
    DECL_FIXED_CONSTRUCTOR_P (mdecl) = 1;
  
!   if (!*bodyp)
      {
        /* It is an error for the compiler to generate a default
  	 constructor if the superclass doesn't have a constructor that
*************** fix_constructors (tree mdecl)
*** 8867,8874 ****
  	  DECL_NAME (mdecl) = DECL_NAME (sclass_decl);
  	  parse_error_context
  	    (lookup_cl (TYPE_NAME (class_type)),
! 	     "No constructor matching `%s' found in class `%s'",
! 	     lang_printable_name (mdecl, 0), n);
  	  DECL_NAME (mdecl) = save;
  	}
  
--- 9025,9032 ----
  	  DECL_NAME (mdecl) = DECL_NAME (sclass_decl);
  	  parse_error_context
  	    (lookup_cl (TYPE_NAME (class_type)),
! 	     "No constructor matching %qs found in class %qs",
! 	     lang_printable_name (mdecl, 2), n);
  	  DECL_NAME (mdecl) = save;
  	}
  
*************** fix_constructors (tree mdecl)
*** 8898,8928 ****
      {
        int found = 0;
        int invokes_this = 0;
!       tree found_call = NULL_TREE;
!       tree main_block = BLOCK_EXPR_BODY (body);
  
!       while (body)
! 	switch (TREE_CODE (body))
! 	  {
! 	  case CALL_EXPR:
! 	    found = CALL_EXPLICIT_CONSTRUCTOR_P (body);
! 	    if (CALL_THIS_CONSTRUCTOR_P (body))
! 	      invokes_this = 1;
! 	    body = NULL_TREE;
! 	    break;
! 	  case COMPOUND_EXPR:
! 	  case EXPR_WITH_FILE_LOCATION:
! 	    found_call = body;
! 	    body = TREE_OPERAND (body, 0);
! 	    break;
! 	  case BLOCK:
! 	    found_call = body;
! 	    body = BLOCK_EXPR_BODY (body);
! 	    break;
! 	  default:
! 	    found = 0;
! 	    body = NULL_TREE;
! 	  }
  
        /* Generate the assignment to this$<n>, if necessary */
        if ((thisn_assign = build_thisn_assign ()))
--- 9056,9085 ----
      {
        int found = 0;
        int invokes_this = 0;
!       tree main_block = BLOCK_EXPR_BODY (*bodyp);
  
!       while (*bodyp)
! 	{
! 	  tree body = *bodyp;
! 	  switch (TREE_CODE (body))
! 	    {
! 	    case CALL_EXPR:
! 	      found = CALL_EXPLICIT_CONSTRUCTOR_P (body);
! 	      if (CALL_THIS_CONSTRUCTOR_P (body))
! 		invokes_this = 1;
! 	      break;
! 	    case COMPOUND_EXPR:
! 	    case EXPR_WITH_FILE_LOCATION:
! 	      bodyp = &TREE_OPERAND (body, 0);
! 	      continue;
! 	    case BLOCK:
! 	      bodyp = &BLOCK_EXPR_BODY (body);
! 	      continue;
! 	    default:
! 	      break;
! 	    }
! 	  break;
! 	}
  
        /* Generate the assignment to this$<n>, if necessary */
        if ((thisn_assign = build_thisn_assign ()))
*************** fix_constructors (tree mdecl)
*** 8936,8944 ****
           instance initializer blocks. */
        else
  	{
! 	  compound = add_stmt_to_compound (compound, NULL_TREE,
! 					   TREE_OPERAND (found_call, 0));
! 	  TREE_OPERAND (found_call, 0) = empty_stmt_node;
  	}
  
        DECL_INIT_CALLS_THIS (mdecl) = invokes_this;
--- 9093,9100 ----
           instance initializer blocks. */
        else
  	{
! 	  compound = add_stmt_to_compound (compound, NULL_TREE, *bodyp);
! 	  *bodyp = build_java_empty_stmt ();
  	}
  
        DECL_INIT_CALLS_THIS (mdecl) = invokes_this;
*************** java_expand_classes (void)
*** 9019,9030 ****
--- 9175,9188 ----
  {
    int save_error_count = 0;
    static struct parser_ctxt *cur_ctxp = NULL;
+   location_t save_location;
  
    java_parse_abort_on_error ();
    if (!(ctxp = ctxp_for_generation))
      return;
    java_layout_classes ();
    java_parse_abort_on_error ();
+   save_location = input_location;
  
    for (cur_ctxp = ctxp_for_generation; cur_ctxp; cur_ctxp = cur_ctxp->next)
      {
*************** java_expand_classes (void)
*** 9038,9049 ****
    for (cur_ctxp = ctxp_for_generation; cur_ctxp; cur_ctxp = cur_ctxp->next)
      {
        ctxp = cur_ctxp;
!       input_filename = ctxp->filename;
        lang_init_source (2);	       /* Error msgs have method prototypes */
        java_complete_expand_classes (); /* Complete and expand classes */
        java_parse_abort_on_error ();
      }
!   input_filename = main_input_filename;
  
    /* Find anonymous classes and expand their constructor. This extra pass is
       necessary because the constructor itself is only generated when the
--- 9196,9207 ----
    for (cur_ctxp = ctxp_for_generation; cur_ctxp; cur_ctxp = cur_ctxp->next)
      {
        ctxp = cur_ctxp;
!       input_location = ctxp->file_start_location;
        lang_init_source (2);	       /* Error msgs have method prototypes */
        java_complete_expand_classes (); /* Complete and expand classes */
        java_parse_abort_on_error ();
      }
!   input_location = save_location;
  
    /* Find anonymous classes and expand their constructor. This extra pass is
       necessary because the constructor itself is only generated when the
*************** java_expand_classes (void)
*** 9062,9070 ****
  		{
  		  if (DECL_CONSTRUCTOR_P (d))
  		    {
- 		      restore_line_number_status (1);
  		      java_complete_expand_method (d);
- 		      restore_line_number_status (0);
  		      break;	/* There is only one constructor. */
  		    }
  		}
--- 9220,9226 ----
*************** java_expand_classes (void)
*** 9086,9096 ****
  	  for (d = TYPE_METHODS (current_class); d; d = TREE_CHAIN (d))
  	    {
  	      if (DECL_RESULT (d) == NULL_TREE)
! 		{
! 		  restore_line_number_status (1);
! 		  java_complete_expand_method (d);
! 		  restore_line_number_status (0);
! 		}
  	    }
  	}
      }
--- 9242,9248 ----
  	  for (d = TYPE_METHODS (current_class); d; d = TREE_CHAIN (d))
  	    {
  	      if (DECL_RESULT (d) == NULL_TREE)
! 		java_complete_expand_method (d);
  	    }
  	}
      }
*************** java_expand_classes (void)
*** 9119,9127 ****
  		      if (DECL_RESULT (d) == NULL_TREE)
  			{
  			  something_changed = 1;
- 			  restore_line_number_status (1);
  			  java_complete_expand_method (d);
- 			  restore_line_number_status (0);
  			}
  		    }
  		}
--- 9271,9277 ----
*************** merge_qualified_name (tree left, tree ri
*** 9263,9273 ****
     inherited from the location information of the `.' operator. */
  
  static tree
! make_qualified_name (tree left, tree right, int location)
  {
  #ifdef USE_COMPONENT_REF
!   tree node = build (COMPONENT_REF, NULL_TREE, left, right);
!   EXPR_WFL_LINECOL (node) = location;
    return node;
  #else
    tree left_id = EXPR_WFL_NODE (left);
--- 9413,9429 ----
     inherited from the location information of the `.' operator. */
  
  static tree
! make_qualified_name (tree left, tree right,
! #ifdef USE_MAPPED_LOCATION
! 		     source_location location
! #else
! 		     int location
! #endif
! 		     )
  {
  #ifdef USE_COMPONENT_REF
!   tree node = build3 (COMPONENT_REF, NULL_TREE, left, right, NULL_TREE);
!   SET_EXPR_LOCATION (node, location);
    return node;
  #else
    tree left_id = EXPR_WFL_NODE (left);
*************** make_qualified_name (tree left, tree rig
*** 9277,9282 ****
--- 9433,9447 ----
    merge = merge_qualified_name (left_id, right_id);
  
    /* Left wasn't qualified and is now qualified */
+ #ifdef USE_MAPPED_LOCATION
+   if (!QUALIFIED_P (left_id))
+     {
+       tree wfl = build_expr_wfl (left_id, EXPR_LOCATION (left));
+       EXPR_WFL_QUALIFICATION (left) = build_tree_list (wfl, NULL_TREE);
+     }
+ 
+   wfl = build_expr_wfl (right_id, location);
+ #else
    if (!QUALIFIED_P (left_id))
      {
        tree wfl = build_expr_wfl (left_id, ctxp->filename, 0, 0);
*************** make_qualified_name (tree left, tree rig
*** 9286,9293 ****
  
    wfl = build_expr_wfl (right_id, ctxp->filename, 0, 0);
    EXPR_WFL_LINECOL (wfl) = location;
    chainon (EXPR_WFL_QUALIFICATION (left), build_tree_list (wfl, NULL_TREE));
- 
    EXPR_WFL_NODE (left) = merge;
    return left;
  #endif
--- 9451,9458 ----
  
    wfl = build_expr_wfl (right_id, ctxp->filename, 0, 0);
    EXPR_WFL_LINECOL (wfl) = location;
+ #endif
    chainon (EXPR_WFL_QUALIFICATION (left), build_tree_list (wfl, NULL_TREE));
    EXPR_WFL_NODE (left) = merge;
    return left;
  #endif
*************** resolve_expression_name (tree id, tree *
*** 9360,9366 ****
  		  && !enclosing_context_p (DECL_CONTEXT (decl), current_class))
  		{
  		  parse_error_context
! 		    (id, "Can't reference `%s' before the superclass constructor has been called", IDENTIFIER_POINTER (name));
  		  return error_mark_node;
  		}
  
--- 9525,9531 ----
  		  && !enclosing_context_p (DECL_CONTEXT (decl), current_class))
  		{
  		  parse_error_context
! 		    (id, "Can't reference %qs before the superclass constructor has been called", IDENTIFIER_POINTER (name));
  		  return error_mark_node;
  		}
  
*************** resolve_expression_name (tree id, tree *
*** 9414,9425 ****
    /* We've got an error here */
    if (INNER_CLASS_TYPE_P (current_class))
      parse_error_context (id,
! 			 "Local variable `%s' can't be accessed from within the inner class `%s' unless it is declared final",
  			 IDENTIFIER_POINTER (name),
  			 IDENTIFIER_POINTER (DECL_NAME
  					     (TYPE_NAME (current_class))));
    else
!     parse_error_context (id, "Undefined variable `%s'",
  			 IDENTIFIER_POINTER (name));
  
    return error_mark_node;
--- 9579,9590 ----
    /* We've got an error here */
    if (INNER_CLASS_TYPE_P (current_class))
      parse_error_context (id,
! 			 "Local variable %qs can't be accessed from within the inner class %qs unless it is declared final",
  			 IDENTIFIER_POINTER (name),
  			 IDENTIFIER_POINTER (DECL_NAME
  					     (TYPE_NAME (current_class))));
    else
!     parse_error_context (id, "Undefined variable %qs",
  			 IDENTIFIER_POINTER (name));
  
    return error_mark_node;
*************** static_ref_err (tree wfl, tree field_id,
*** 9430,9436 ****
  {
    parse_error_context
      (wfl,
!      "Can't make a static reference to nonstatic variable `%s' in class `%s'",
       IDENTIFIER_POINTER (field_id),
       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (class_type))));
  }
--- 9595,9601 ----
  {
    parse_error_context
      (wfl,
!      "Can't make a static reference to nonstatic variable %qs in class %qs",
       IDENTIFIER_POINTER (field_id),
       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (class_type))));
  }
*************** resolve_field_access (tree qual_wfl, tre
*** 9445,9451 ****
  {
    int is_static = 0;
    tree field_ref;
!   tree decl, where_found, type_found;
  
    if (resolve_qualified_expression_name (qual_wfl, &decl,
  					 &where_found, &type_found))
--- 9610,9616 ----
  {
    int is_static = 0;
    tree field_ref;
!   tree decl = NULL_TREE, where_found, type_found;
  
    if (resolve_qualified_expression_name (qual_wfl, &decl,
  					 &where_found, &type_found))
*************** resolve_field_access (tree qual_wfl, tre
*** 9512,9523 ****
    return field_ref;
  }
  
! /* If NODE is an access to f static field, strip out the class
     initialization part and return the field decl, otherwise, return
     NODE. */
  
! static tree
! strip_out_static_field_access_decl (tree node)
  {
    if (TREE_CODE (node) == COMPOUND_EXPR)
      {
--- 9677,9688 ----
    return field_ref;
  }
  
! /* If NODE is an access to a static field, strip out the class
     initialization part and return the field decl, otherwise, return
     NODE. */
  
! tree
! extract_field_decl (tree node)
  {
    if (TREE_CODE (node) == COMPOUND_EXPR)
      {
*************** strip_out_static_field_access_decl (tree
*** 9527,9534 ****
  	   tree call = TREE_OPERAND (op1, 0);
  	   if (TREE_CODE (call) == CALL_EXPR
  	       && TREE_CODE (TREE_OPERAND (call, 0)) == ADDR_EXPR
! 	       && TREE_OPERAND (TREE_OPERAND (call, 0), 0)
! 	       == soft_initclass_node)
  	     return TREE_OPERAND (op1, 1);
  	 }
        else if (JDECL_P (op1))
--- 9692,9699 ----
  	   tree call = TREE_OPERAND (op1, 0);
  	   if (TREE_CODE (call) == CALL_EXPR
  	       && TREE_CODE (TREE_OPERAND (call, 0)) == ADDR_EXPR
! 	       && (TREE_OPERAND (TREE_OPERAND (call, 0), 0)
! 		   == soft_initclass_node))
  	     return TREE_OPERAND (op1, 1);
  	 }
        else if (JDECL_P (op1))
*************** resolve_qualified_expression_name (tree 
*** 9559,9565 ****
--- 9724,9734 ----
      {
        tree qual_wfl = QUAL_WFL (q);
        tree ret_decl;		/* for EH checking */
+ #ifdef USE_MAPPED_LOCATION
+       source_location location;  /* for EH checking */
+ #else
        int location;		/* for EH checking */
+ #endif
  
        /* 15.10.1 Field Access Using a Primary */
        switch (TREE_CODE (qual_wfl))
*************** resolve_qualified_expression_name (tree 
*** 9605,9612 ****
--- 9774,9787 ----
  
  	  if (from_super && TREE_CODE (qual_wfl) == CALL_EXPR)
  	    CALL_USING_SUPER (qual_wfl) = 1;
+ #ifdef USE_MAPPED_LOCATION
+ 	  location = (TREE_CODE (qual_wfl) == CALL_EXPR
+ 		      ? EXPR_LOCATION (TREE_OPERAND (qual_wfl, 0))
+ 		      : UNKNOWN_LOCATION);
+ #else
  	  location = (TREE_CODE (qual_wfl) == CALL_EXPR ?
  		      EXPR_WFL_LINECOL (TREE_OPERAND (qual_wfl, 0)) : 0);
+ #endif
  	  *where_found = patch_method_invocation (qual_wfl, decl, type,
  						  from_super,
  						  &is_static, &ret_decl);
*************** resolve_qualified_expression_name (tree 
*** 9626,9632 ****
  	      && INNER_ENCLOSING_SCOPE_CHECK (type))
  	    {
  	      parse_error_context
! 		(qual_wfl, "No enclosing instance for inner class `%s' is in scope%s",
  		 lang_printable_name (type, 0),
  		 (!current_this ? "" :
  		  "; an explicit one must be provided when creating this inner class"));
--- 9801,9807 ----
  	      && INNER_ENCLOSING_SCOPE_CHECK (type))
  	    {
  	      parse_error_context
! 		(qual_wfl, "No enclosing instance for inner class %qs is in scope%s",
  		 lang_printable_name (type, 0),
  		 (!current_this ? "" :
  		  "; an explicit one must be provided when creating this inner class"));
*************** resolve_qualified_expression_name (tree 
*** 9638,9644 ****
--- 9813,9823 ----
  	     instantiation using a primary qualified by a `new' */
  	  RESTORE_THIS_AND_CURRENT_CLASS;
  
+ #ifdef USE_MAPPED_LOCATION
+ 	  if (location != UNKNOWN_LOCATION)
+ #else
  	  if (location)
+ #endif
  	    {
  	      tree arguments = NULL_TREE;
  	      if (TREE_CODE (qual_wfl) == CALL_EXPR
*************** resolve_qualified_expression_name (tree 
*** 9653,9660 ****
  	     forcoming function's argument. */
  	  if (previous_call_static && is_static)
  	    {
! 	      decl = build (COMPOUND_EXPR, TREE_TYPE (*where_found),
! 			    decl, *where_found);
  	      TREE_SIDE_EFFECTS (decl) = 1;
  	    }
  	  else
--- 9832,9842 ----
  	     forcoming function's argument. */
  	  if (previous_call_static && is_static)
  	    {
! 	      /* We must set CAN_COMPLETE_NORMALLY for the first call
! 		 since it is done nowhere else.  */
! 	      CAN_COMPLETE_NORMALLY (decl) = 1;
! 	      decl = build2 (COMPOUND_EXPR, TREE_TYPE (*where_found),
! 			     decl, *where_found);
  	      TREE_SIDE_EFFECTS (decl) = 1;
  	    }
  	  else
*************** resolve_qualified_expression_name (tree 
*** 9738,9750 ****
  	  if (!current_this)
  	    {
  	      parse_error_context
! 		(wfl, "Keyword `this' used outside allowed context");
  	      return 1;
  	    }
  	  if (ctxp->explicit_constructor_p
  	      && type == current_class)
  	    {
! 	      parse_error_context (wfl, "Can't reference `this' before the superclass constructor has been called");
  	      return 1;
  	    }
  	  /* We have to generate code for intermediate access */
--- 9920,9932 ----
  	  if (!current_this)
  	    {
  	      parse_error_context
! 		(wfl, "Keyword %<this%> used outside allowed context");
  	      return 1;
  	    }
  	  if (ctxp->explicit_constructor_p
  	      && type == current_class)
  	    {
! 	      parse_error_context (wfl, "Can't reference %<this%> before the superclass constructor has been called");
  	      return 1;
  	    }
  	  /* We have to generate code for intermediate access */
*************** resolve_qualified_expression_name (tree 
*** 9760,9766 ****
  	      if (!enclosing_context_p (type, current_class))
  		{
  		  char *p  = xstrdup (lang_printable_name (type, 0));
! 		  parse_error_context (qual_wfl, "Can't use variable `%s.this': type `%s' isn't an outer type of type `%s'",
  				       p, p,
  				       lang_printable_name (current_class, 0));
  		  free (p);
--- 9942,9948 ----
  	      if (!enclosing_context_p (type, current_class))
  		{
  		  char *p  = xstrdup (lang_printable_name (type, 0));
! 		  parse_error_context (qual_wfl, "Can't use variable %<%s.this%>: type %qs isn't an outer type of type %qs",
  				       p, p,
  				       lang_printable_name (current_class, 0));
  		  free (p);
*************** resolve_qualified_expression_name (tree 
*** 9793,9799 ****
  	      || current_class == object_type_node)
  	    {
  	      parse_error_context
! 		(wfl, "Keyword `super' used outside allowed context");
  	      return 1;
  	    }
  	  /* Otherwise, treat SUPER as (SUPER_CLASS)THIS */
--- 9975,9981 ----
  	      || current_class == object_type_node)
  	    {
  	      parse_error_context
! 		(wfl, "Keyword %<super%> used outside allowed context");
  	      return 1;
  	    }
  	  /* Otherwise, treat SUPER as (SUPER_CLASS)THIS */
*************** resolve_qualified_expression_name (tree 
*** 9818,9823 ****
--- 10000,10007 ----
  	      tree list;
  	      *where_found = decl;
  
+ 	      check_pkg_class_access (DECL_NAME (decl), qual_wfl, true, NULL);
+ 
  	      /* We want to be absolutely sure that the class is laid
                   out. We're going to search something inside it. */
  	      *type_found = type = TREE_TYPE (decl);
*************** resolve_qualified_expression_name (tree 
*** 9840,9851 ****
  	      if (from_super || from_cast)
  		parse_error_context
  		  ((from_cast ? qual_wfl : wfl),
! 		   "No variable `%s' defined in class `%s'",
  		   IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		   lang_printable_name (type, 0));
  	      else
  		parse_error_context
! 		  (qual_wfl, "Undefined variable or class name: `%s'",
  		   IDENTIFIER_POINTER (name));
  	      return 1;
  	    }
--- 10024,10035 ----
  	      if (from_super || from_cast)
  		parse_error_context
  		  ((from_cast ? qual_wfl : wfl),
! 		   "No variable %qs defined in class %qs",
  		   IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		   lang_printable_name (type, 0));
  	      else
  		parse_error_context
! 		  (qual_wfl, "Undefined variable or class name: %qs",
  		   IDENTIFIER_POINTER (name));
  	      return 1;
  	    }
*************** resolve_qualified_expression_name (tree 
*** 9858,9875 ****
  	  decl = QUAL_RESOLUTION (q);
  
  	  /* Sneak preview. If next we see a `new', we're facing a
! 	     qualification with resulted in a type being selected
! 	     instead of a field.  Report the error */
  	  if(TREE_CHAIN (q)
  	     && TREE_CODE (TREE_PURPOSE (TREE_CHAIN (q))) == NEW_CLASS_EXPR)
  	    {
! 	      parse_error_context (qual_wfl, "Undefined variable `%s'",
  				   IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  	      return 1;
  	    }
  
! 	  if (not_accessible_p (TREE_TYPE (decl), decl, type, 0))
!  	    return not_accessible_field_error (qual_wfl, decl);
  	  check_deprecation (qual_wfl, decl);
  
  	  type = TREE_TYPE (decl);
--- 10042,10059 ----
  	  decl = QUAL_RESOLUTION (q);
  
  	  /* Sneak preview. If next we see a `new', we're facing a
! 	     qualification which resulted in a type being selected
! 	     instead of a field.  Report the error.  */
  	  if(TREE_CHAIN (q)
  	     && TREE_CODE (TREE_PURPOSE (TREE_CHAIN (q))) == NEW_CLASS_EXPR)
  	    {
! 	      parse_error_context (qual_wfl, "Undefined variable %qs",
  				   IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  	      return 1;
  	    }
  
! 	  check_pkg_class_access (DECL_NAME (decl), qual_wfl, true, NULL);
!           
  	  check_deprecation (qual_wfl, decl);
  
  	  type = TREE_TYPE (decl);
*************** resolve_qualified_expression_name (tree 
*** 9916,9922 ****
  	  else if (TREE_CODE (qual_wfl) == INTEGER_CST)
  	    {
  	      parse_error_context
! 		(wfl, "Can't use type `%s' as a qualifier",
  		 lang_printable_name (TREE_TYPE (qual_wfl), 0));
  	      return 1;
  	    }
--- 10100,10106 ----
  	  else if (TREE_CODE (qual_wfl) == INTEGER_CST)
  	    {
  	      parse_error_context
! 		(wfl, "Can't use type %qs as a qualifier",
  		 lang_printable_name (TREE_TYPE (qual_wfl), 0));
  	      return 1;
  	    }
*************** resolve_qualified_expression_name (tree 
*** 9935,9941 ****
  	      if (!from_type && !JREFERENCE_TYPE_P (type))
  		{
  		  parse_error_context
! 		    (qual_wfl, "Attempt to reference field `%s' in `%s %s'",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		     lang_printable_name (type, 0),
  		     IDENTIFIER_POINTER (DECL_NAME (decl)));
--- 10119,10125 ----
  	      if (!from_type && !JREFERENCE_TYPE_P (type))
  		{
  		  parse_error_context
! 		    (qual_wfl, "Attempt to reference field %qs in %<%s %s%>",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		     lang_printable_name (type, 0),
  		     IDENTIFIER_POINTER (DECL_NAME (decl)));
*************** resolve_qualified_expression_name (tree 
*** 9966,9972 ****
  	      if (field_decl == NULL_TREE)
  		{
  		  parse_error_context
! 		    (qual_wfl, "No variable `%s' defined in type `%s'",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		     GET_TYPE_NAME (type));
  		  return 1;
--- 10150,10156 ----
  	      if (field_decl == NULL_TREE)
  		{
  		  parse_error_context
! 		    (qual_wfl, "No variable %qs defined in type %qs",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (qual_wfl)),
  		     GET_TYPE_NAME (type));
  		  return 1;
*************** resolve_qualified_expression_name (tree 
*** 9989,9995 ****
  
  	      /* Check on accessibility here */
  	      if (not_accessible_p (current_class, field_decl,
! 				    DECL_CONTEXT (field_decl), from_super))
   		return not_accessible_field_error (qual_wfl,field_decl);    
  	      check_deprecation (qual_wfl, field_decl);
  
--- 10173,10179 ----
  
  	      /* Check on accessibility here */
  	      if (not_accessible_p (current_class, field_decl,
! 				    *type_found, from_super))
   		return not_accessible_field_error (qual_wfl,field_decl);    
  	      check_deprecation (qual_wfl, field_decl);
  
*************** resolve_qualified_expression_name (tree 
*** 10050,10056 ****
  	      && TREE_CODE (TREE_PURPOSE (TREE_CHAIN (q))) == NEW_CLASS_EXPR
  	      && !JREFERENCE_TYPE_P (type))
  	    {
! 	      parse_error_context (qual_wfl, "Attempt to reference field `new' in a `%s'",
  				   lang_printable_name (type, 0));
  	      return 1;
  	    }
--- 10234,10240 ----
  	      && TREE_CODE (TREE_PURPOSE (TREE_CHAIN (q))) == NEW_CLASS_EXPR
  	      && !JREFERENCE_TYPE_P (type))
  	    {
! 	      parse_error_context (qual_wfl, "Attempt to reference field %<new%> in a %qs",
  				   lang_printable_name (type, 0));
  	      return 1;
  	    }
*************** static int
*** 10075,10084 ****
  not_accessible_p (tree reference, tree member, tree where, int from_super)
  {
    int access_flag = get_access_flags_from_decl (member);
! 
!   /* Inner classes are processed by check_inner_class_access */
!   if (INNER_CLASS_TYPE_P (reference))
!     return 0;
  
    /* Access always granted for members declared public */
    if (access_flag & ACC_PUBLIC)
--- 10259,10271 ----
  not_accessible_p (tree reference, tree member, tree where, int from_super)
  {
    int access_flag = get_access_flags_from_decl (member);
!   bool is_static = false;
!  
!   if (TREE_CODE (member) == FIELD_DECL ||
!       TREE_CODE (member) == VAR_DECL)
!     is_static = FIELD_STATIC (member);
!   else
!     is_static = METHOD_STATIC (member);
  
    /* Access always granted for members declared public */
    if (access_flag & ACC_PUBLIC)
*************** not_accessible_p (tree reference, tree m
*** 10097,10122 ****
        if (from_super)
  	return 0;
  
!       /* If where is active, access was made through a
! 	 qualifier. Access is granted if the type of the qualifier is
! 	 or is a sublass of the type the access made from (6.6.2.1.)  */
!       if (where && !inherits_from_p (reference, where))
! 	return 1;
! 
!       /* Otherwise, access is granted if occurring from the class where
! 	 member is declared or a subclass of it. Find the right
! 	 context to perform the check */
!       if (PURE_INNER_CLASS_TYPE_P (reference))
          {
!           while (INNER_CLASS_TYPE_P (reference))
              {
!               if (inherits_from_p (reference, DECL_CONTEXT (member)))
!                 return 0;
!               reference = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (reference)));
!             }
          }
-       if (inherits_from_p (reference, DECL_CONTEXT (member)))
- 	return 0;
        return 1;
      }
  
--- 10284,10317 ----
        if (from_super)
  	return 0;
  
!       /* If WHERE is active, access was made through a qualifier. For 
!          non-static members, access is granted if the type of the qualifier 
! 	 is or is a sublass of the type the access is made from (6.6.2.1.)  */
!       if (where && !is_static)
          {
! 	  while (reference)
              {
! 	      if (inherits_from_p (where, reference))
! 	        return 0;
! 	      if (INNER_CLASS_TYPE_P (reference))
! 		reference = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (reference)));
! 	      else
! 	        break;
! 	    }
! 	  return 1;
! 	}
! 
!       /* Otherwise, access is granted if occurring from within the class
!          where member is declared, or a subclass of it.  */
!       while (reference)
!         {
!           if (inherits_from_p (reference, DECL_CONTEXT (member)))
!             return 0;
! 	  if (INNER_CLASS_TYPE_P (reference))
!             reference = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (reference)));
! 	  else
! 	    break;
          }
        return 1;
      }
  
*************** not_accessible_p (tree reference, tree m
*** 10125,10145 ****
       it for innerclasses too. */
    if (access_flag & ACC_PRIVATE)
      {
!       if (reference == DECL_CONTEXT (member))
! 	return 0;
!       if (enclosing_context_p (reference, DECL_CONTEXT (member)))
  	return 0;
        return 1;
      }
  
!   /* Default access are permitted only when occurring within the
!      package in which the type (REFERENCE) is declared. In other words,
!      REFERENCE is defined in the current package */
!   if (ctxp->package)
!     return !class_in_current_package (reference);
! 
!   /* Otherwise, access is granted */
!   return 0;
  }
  
  /* Test deprecated decl access.  */
--- 10320,10334 ----
       it for innerclasses too. */
    if (access_flag & ACC_PRIVATE)
      {
!       if (reference == DECL_CONTEXT (member) ||
!           common_enclosing_context_p (DECL_CONTEXT (member), reference))
  	return 0;
        return 1;
      }
  
!   /* Default access is permitted only when occurring from within the
!      package in which the context (MEMBER) is declared.  */
!   return !class_in_current_package (DECL_CONTEXT (member));
  }
  
  /* Test deprecated decl access.  */
*************** check_deprecation (tree wfl, tree decl)
*** 10149,10155 ****
    const char *file;
    tree elt;
  
!   if (! flag_deprecated)
      return;
  
    /* We want to look at the element type of arrays here, so we strip
--- 10338,10344 ----
    const char *file;
    tree elt;
  
!   if (! warn_deprecated)
      return;
  
    /* We want to look at the element type of arrays here, so we strip
*************** check_deprecation (tree wfl, tree decl)
*** 10182,10188 ****
  	  the = "field";
  	  break;
  	case TYPE_DECL:
! 	  parse_warning_context (wfl, "The class `%s' has been deprecated",
  				 IDENTIFIER_POINTER (DECL_NAME (decl)));
  	  return;
  	default:
--- 10371,10377 ----
  	  the = "field";
  	  break;
  	case TYPE_DECL:
! 	  parse_warning_context (wfl, "The class %qs has been deprecated",
  				 IDENTIFIER_POINTER (DECL_NAME (decl)));
  	  return;
  	default:
*************** check_deprecation (tree wfl, tree decl)
*** 10192,10198 ****
           whole. */
        if (! CLASS_DEPRECATED (TYPE_NAME (DECL_CONTEXT (decl))))
  	parse_warning_context
! 	  (wfl, "The %s `%s' in class `%s' has been deprecated",
  	   the, lang_printable_name (decl, 0),
  	   IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)))));
      }
--- 10381,10387 ----
           whole. */
        if (! CLASS_DEPRECATED (TYPE_NAME (DECL_CONTEXT (decl))))
  	parse_warning_context
! 	  (wfl, "The %s %qs in class %qs has been deprecated",
  	   the, lang_printable_name (decl, 0),
  	   IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)))));
      }
*************** class_in_current_package (tree class)
*** 10225,10231 ****
      return 1;
  
    /* Compare the left part of the name of CLASS with the package name */
!   breakdown_qualified (&left, NULL, DECL_NAME (TYPE_NAME (class)));
    if (ctxp->package == left)
      {
        cicp_cache = class;
--- 10414,10420 ----
      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;
*************** patch_method_invocation (tree patch, tre
*** 10309,10315 ****
          {
  	  parse_error_context
  	    (identifier_wfl,
! 	     "Can't invoke a method on primitive type `%s'",
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
  	  PATCH_METHOD_RETURN_ERROR ();
  	}
--- 10498,10504 ----
          {
  	  parse_error_context
  	    (identifier_wfl,
! 	     "Can't invoke a method on primitive type %qs",
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
  	  PATCH_METHOD_RETURN_ERROR ();
  	}
*************** patch_method_invocation (tree patch, tre
*** 10324,10340 ****
  	    {
  	      parse_error_context
  		(identifier_wfl,
! 		"Can't make static reference to method `%s' in interface `%s'",
  		 IDENTIFIER_POINTER (identifier),
  		 IDENTIFIER_POINTER (name));
  	      PATCH_METHOD_RETURN_ERROR ();
  	    }
  	  if (list && !METHOD_STATIC (list))
  	    {
! 	      char *fct_name = xstrdup (lang_printable_name (list, 0));
  	      parse_error_context
  		(identifier_wfl,
! 		 "Can't make static reference to method `%s %s' in class `%s'",
  		 lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0),
  		 fct_name, IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
  	      free (fct_name);
--- 10513,10529 ----
  	    {
  	      parse_error_context
  		(identifier_wfl,
! 		"Can't make static reference to method %qs in interface %qs",
  		 IDENTIFIER_POINTER (identifier),
  		 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_invocation (tree patch, tre
*** 10387,10393 ****
  	      if (!class_to_search)
  		{
  		  parse_error_context
! 		    (wfl, "Class `%s' not found in type declaration",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  		  PATCH_METHOD_RETURN_ERROR ();
  		}
--- 10576,10582 ----
  	      if (!class_to_search)
  		{
  		  parse_error_context
! 		    (wfl, "Class %qs not found in type declaration",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  		  PATCH_METHOD_RETURN_ERROR ();
  		}
*************** patch_method_invocation (tree patch, tre
*** 10399,10405 ****
  		  && TREE_CODE (patch) == NEW_CLASS_EXPR)
  		{
  		  parse_error_context
! 		    (wfl, "Class `%s' is an abstract class. It can't be instantiated",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  		  PATCH_METHOD_RETURN_ERROR ();
  		}
--- 10588,10594 ----
  		  && TREE_CODE (patch) == NEW_CLASS_EXPR)
  		{
  		  parse_error_context
! 		    (wfl, "Class %qs is an abstract class. It can't be instantiated",
  		     IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
  		  PATCH_METHOD_RETURN_ERROR ();
  		}
*************** patch_method_invocation (tree patch, tre
*** 10429,10435 ****
  		  if (! INNER_CLASS_TYPE_P (class_to_search))
  		    {
  		      parse_error_context (wfl,
! 					   "No method named `%s' in scope",
  					   IDENTIFIER_POINTER (name));
  		      PATCH_METHOD_RETURN_ERROR ();
  		    }
--- 10618,10624 ----
  		  if (! INNER_CLASS_TYPE_P (class_to_search))
  		    {
  		      parse_error_context (wfl,
! 					   "No method named %qs in scope",
  					   IDENTIFIER_POINTER (name));
  		      PATCH_METHOD_RETURN_ERROR ();
  		    }
*************** patch_method_invocation (tree patch, tre
*** 10467,10473 ****
  	  && !DECL_INIT_P (current_function_decl))
  	{
  	  parse_error_context
! 	    (wfl, "No enclosing instance for inner class `%s' is in scope%s",
  	     lang_printable_name (class_to_search, 0),
  	     (!current_this ? "" :
  	      "; an explicit one must be provided when creating this inner class"));
--- 10656,10662 ----
  	  && !DECL_INIT_P (current_function_decl))
  	{
  	  parse_error_context
! 	    (wfl, "No enclosing instance for inner class %qs is in scope%s",
  	     lang_printable_name (class_to_search, 0),
  	     (!current_this ? "" :
  	      "; an explicit one must be provided when creating this inner class"));
*************** patch_method_invocation (tree patch, tre
*** 10532,10548 ****
      {
        const char *const fct_name = IDENTIFIER_POINTER (DECL_NAME (list));
        const char *const access =
! 	java_accstring_lookup (get_access_flags_from_decl (list));
        const char *const klass =
  	IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (list))));
        const char *const refklass =
  	IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)));
        const char *const what = (DECL_CONSTRUCTOR_P (list)
  				? "constructor" : "method");
-       /* FIXME: WFL yields the wrong message here but I don't know
- 	 what else to use.  */
        parse_error_context (wfl,
! 			   "Can't access %s %s `%s.%s' from `%s'",
  			   access, what, klass, fct_name, refklass);
        PATCH_METHOD_RETURN_ERROR ();
      }
--- 10721,10735 ----
      {
        const char *const fct_name = IDENTIFIER_POINTER (DECL_NAME (list));
        const char *const access =
! 	accessibility_string (get_access_flags_from_decl (list));
        const char *const klass =
  	IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (list))));
        const char *const refklass =
  	IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class)));
        const char *const what = (DECL_CONSTRUCTOR_P (list)
  				? "constructor" : "method");
        parse_error_context (wfl,
! 			   "Can't access %s %s %<%s.%s%> from %qs",
  			   access, what, klass, fct_name, refklass);
        PATCH_METHOD_RETURN_ERROR ();
      }
*************** patch_method_invocation (tree patch, tre
*** 10623,10629 ****
        && (!primary || primary == current_this)
        && (TREE_CODE (patch) != NEW_CLASS_EXPR))
      {
!       parse_error_context (wfl, "Can't reference `this' before the superclass constructor has been called");
        PATCH_METHOD_RETURN_ERROR ();
      }
    java_parser_context_restore_global ();
--- 10810,10816 ----
        && (!primary || primary == current_this)
        && (TREE_CODE (patch) != NEW_CLASS_EXPR))
      {
!       parse_error_context (wfl, "Can't reference %<this%> before the superclass constructor has been called");
        PATCH_METHOD_RETURN_ERROR ();
      }
    java_parser_context_restore_global ();
*************** patch_method_invocation (tree patch, tre
*** 10652,10659 ****
  	 initialization statement and build a compound statement along
  	 with the super constructor invocation. */
        CAN_COMPLETE_NORMALLY (patch) = 1;
!       patch = build (COMPOUND_EXPR, void_type_node, patch,
! 		     java_complete_tree (finit_call));
      }
    return patch;
  }
--- 10839,10846 ----
  	 initialization statement and build a compound statement along
  	 with the super constructor invocation. */
        CAN_COMPLETE_NORMALLY (patch) = 1;
!       patch = build2 (COMPOUND_EXPR, void_type_node, patch,
! 		      java_complete_tree (finit_call));
      }
    return patch;
  }
*************** check_for_static_method_reference (tree 
*** 10670,10676 ****
      {
        char *fct_name = xstrdup (lang_printable_name (method, 0));
        parse_error_context
! 	(wfl, "Can't make static reference to method `%s %s' in class `%s'",
  	 lang_printable_name (TREE_TYPE (TREE_TYPE (method)), 0), fct_name,
  	 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (where))));
        free (fct_name);
--- 10857,10863 ----
      {
        char *fct_name = xstrdup (lang_printable_name (method, 0));
        parse_error_context
! 	(wfl, "Can't make static reference to method %<%s %s%> in class %qs",
  	 lang_printable_name (TREE_TYPE (TREE_TYPE (method)), 0), fct_name,
  	 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (where))));
        free (fct_name);
*************** patch_invoke (tree patch, tree method, t
*** 10840,10846 ****
    if (TREE_CODE (original_call) == NEW_CLASS_EXPR)
      {
        tree class = DECL_CONTEXT (method);
!       tree c1, saved_new, size, new;
        tree alloc_node;
  
        if (flag_emit_class_files || flag_emit_xref)
--- 11027,11033 ----
    if (TREE_CODE (original_call) == NEW_CLASS_EXPR)
      {
        tree class = DECL_CONTEXT (method);
!       tree c1, saved_new, new;
        tree alloc_node;
  
        if (flag_emit_class_files || flag_emit_xref)
*************** patch_invoke (tree patch, tree method, t
*** 10850,10871 ****
  	}
        if (!TYPE_SIZE (class))
  	safe_layout_class (class);
-       size = size_in_bytes (class);
        alloc_node =
  	(class_has_finalize_method (class) ? alloc_object_node
  		  			   : alloc_no_finalizer_node);
!       new = build (CALL_EXPR, promote_type (class),
! 		   build_address_of (alloc_node),
! 		   tree_cons (NULL_TREE, build_class_ref (class),
! 			      build_tree_list (NULL_TREE,
! 					       size_in_bytes (class))),
! 		   NULL_TREE);
        saved_new = save_expr (new);
        c1 = build_tree_list (NULL_TREE, saved_new);
        TREE_CHAIN (c1) = TREE_OPERAND (original_call, 1);
        TREE_OPERAND (original_call, 1) = c1;
        TREE_SET_CODE (original_call, CALL_EXPR);
!       patch = build (COMPOUND_EXPR, TREE_TYPE (new), patch, saved_new);
      }
  
    /* If CHECK is set, then we are building a check to see if the object
--- 11037,11055 ----
  	}
        if (!TYPE_SIZE (class))
  	safe_layout_class (class);
        alloc_node =
  	(class_has_finalize_method (class) ? alloc_object_node
  		  			   : alloc_no_finalizer_node);
!       new = build3 (CALL_EXPR, promote_type (class),
! 		    build_address_of (alloc_node),
! 		    build_tree_list (NULL_TREE, build_class_ref (class)),
! 		    NULL_TREE);
        saved_new = save_expr (new);
        c1 = build_tree_list (NULL_TREE, saved_new);
        TREE_CHAIN (c1) = TREE_OPERAND (original_call, 1);
        TREE_OPERAND (original_call, 1) = c1;
        TREE_SET_CODE (original_call, CALL_EXPR);
!       patch = build2 (COMPOUND_EXPR, TREE_TYPE (new), patch, saved_new);
      }
  
    /* If CHECK is set, then we are building a check to see if the object
*************** patch_invoke (tree patch, tree method, t
*** 10875,10882 ****
        /* We have to call force_evaluation_order now because creating a
   	 COMPOUND_EXPR wraps the arg list in a way that makes it
   	 unrecognizable by force_evaluation_order later.  Yuk.  */
!       patch = build (COMPOUND_EXPR, TREE_TYPE (patch), check, 
!  		     force_evaluation_order (patch));
        TREE_SIDE_EFFECTS (patch) = 1;
      }
  
--- 11059,11066 ----
        /* We have to call force_evaluation_order now because creating a
   	 COMPOUND_EXPR wraps the arg list in a way that makes it
   	 unrecognizable by force_evaluation_order later.  Yuk.  */
!       patch = build2 (COMPOUND_EXPR, TREE_TYPE (patch), check, 
! 		      force_evaluation_order (patch));
        TREE_SIDE_EFFECTS (patch) = 1;
      }
  
*************** patch_invoke (tree patch, tree method, t
*** 10895,10910 ****
        /* We have to call force_evaluation_order now because creating a
  	 COMPOUND_EXPR wraps the arg list in a way that makes it
  	 unrecognizable by force_evaluation_order later.  Yuk.  */
!       tree save = save_expr (force_evaluation_order (patch));
        tree type = TREE_TYPE (patch);
  
!       patch = build (COMPOUND_EXPR, type, save, empty_stmt_node);
        list = tree_cons (method, patch,
  			DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl));
  
        DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl) = list;
  
!       patch = build (COMPOUND_EXPR, type, patch, save);
      }
  
    return patch;
--- 11079,11094 ----
        /* We have to call force_evaluation_order now because creating a
  	 COMPOUND_EXPR wraps the arg list in a way that makes it
  	 unrecognizable by force_evaluation_order later.  Yuk.  */
!       tree save = force_evaluation_order (patch);
        tree type = TREE_TYPE (patch);
  
!       patch = build2 (COMPOUND_EXPR, type, save, build_java_empty_stmt ());
        list = tree_cons (method, patch,
  			DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl));
  
        DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl) = list;
  
!       patch = build2 (COMPOUND_EXPR, type, patch, save);
      }
  
    return patch;
*************** invocation_mode (tree method, int super)
*** 10926,10936 ****
    if (DECL_CONSTRUCTOR_P (method))
      return INVOKE_STATIC;
  
!   if (access & ACC_FINAL || access & ACC_PRIVATE)
      return INVOKE_NONVIRTUAL;
  
!   if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method))))
!     return INVOKE_NONVIRTUAL;
  
    if (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))))
      return INVOKE_INTERFACE;
--- 11110,11129 ----
    if (DECL_CONSTRUCTOR_P (method))
      return INVOKE_STATIC;
  
!   if (access & ACC_PRIVATE)
      return INVOKE_NONVIRTUAL;
  
!   /* Binary compatibility: just because it's final today, that doesn't
!      mean it'll be final tomorrow.  */
!   if (! flag_indirect_dispatch  
!       || DECL_CONTEXT (method) == object_type_node)
!     {
!       if (access & ACC_FINAL)
! 	return INVOKE_NONVIRTUAL;
! 
!       if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method))))
! 	return INVOKE_NONVIRTUAL;
!     }
  
    if (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))))
      return INVOKE_INTERFACE;
*************** lookup_method_invoke (int lc, tree cl, t
*** 10968,10979 ****
  
    if (lc && ANONYMOUS_CLASS_P (class))
      {
-       tree saved_current_class;
        tree mdecl = craft_constructor (TYPE_NAME (class), atl);
!       saved_current_class = current_class;
!       current_class = class;
!       fix_constructors (mdecl);
!       current_class = saved_current_class;
      }
  
    /* Find all candidates and then refine the list, searching for the
--- 11161,11170 ----
  
    if (lc && ANONYMOUS_CLASS_P (class))
      {
        tree mdecl = craft_constructor (TYPE_NAME (class), atl);
!       /* The anonymous class may have already been laid out, so make sure
!          the new constructor is laid out here.  */
!       layout_class_method (class, CLASSTYPE_SUPER (class), mdecl, NULL_TREE);
      }
  
    /* Find all candidates and then refine the list, searching for the
*************** lookup_method_invoke (int lc, tree cl, t
*** 10998,11004 ****
  	  if (!cm || not_accessible_p (class, cm, NULL_TREE, 0))
  	    continue;
  	  sprintf
! 	    (string, "  `%s' in `%s'%s",
  	     get_printable_method_name (cm),
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (cm)))),
  	     (TREE_CHAIN (current) ? "\n" : ""));
--- 11189,11195 ----
  	  if (!cm || not_accessible_p (class, cm, NULL_TREE, 0))
  	    continue;
  	  sprintf
! 	    (string, "  '%s' in '%s'%s",
  	     get_printable_method_name (cm),
  	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (cm)))),
  	     (TREE_CHAIN (current) ? "\n" : ""));
*************** lookup_method_invoke (int lc, tree cl, t
*** 11012,11018 ****
    TYPE_ARG_TYPES (method) = atl;
    signature = build_java_argument_signature (method);
    dup = xstrdup (lang_printable_name (class, 0));
!   parse_error_context (cl, "Can't find %s `%s(%s)' in type `%s'%s",
  		       (lc ? "constructor" : "method"),
  		       (lc ? dup : IDENTIFIER_POINTER (name)),
  		       IDENTIFIER_POINTER (signature), dup,
--- 11203,11209 ----
    TYPE_ARG_TYPES (method) = atl;
    signature = build_java_argument_signature (method);
    dup = xstrdup (lang_printable_name (class, 0));
!   parse_error_context (cl, "Can't find %s %<%s(%s)%> in type %qs%s",
  		       (lc ? "constructor" : "method"),
  		       (lc ? dup : IDENTIFIER_POINTER (name)),
  		       IDENTIFIER_POINTER (signature), dup,
*************** find_applicable_accessible_methods_list 
*** 11031,11036 ****
--- 11222,11229 ----
    static htab_t searched_classes;
    static int search_not_done = 0;
    tree list = NULL_TREE, all_list = NULL_TREE;
+   tree base_binfo;
+   int i;
  
    /* Check the hash table to determine if this class has been searched
       already. */
*************** find_applicable_accessible_methods_list 
*** 11048,11054 ****
    search_not_done++;
    *htab_find_slot (searched_classes, class, INSERT) = class;
  
!   if (!CLASS_LOADED_P (class) && !CLASS_FROM_SOURCE_P (class))
      {
        load_class (class, 1);
        safe_layout_class (class);
--- 11241,11247 ----
    search_not_done++;
    *htab_find_slot (searched_classes, class, INSERT) = class;
  
!   if (!CLASS_LOADED_P (class))
      {
        load_class (class, 1);
        safe_layout_class (class);
*************** find_applicable_accessible_methods_list 
*** 11058,11073 ****
    if (TREE_CODE (TYPE_NAME (class)) == TYPE_DECL
        && CLASS_INTERFACE (TYPE_NAME (class)))
      {
-       int i, n;
-       tree basetype_vec = TYPE_BINFO_BASETYPES (class);
        search_applicable_methods_list (lc, TYPE_METHODS (class),
  				      name, arglist, &list, &all_list);
!       n = TREE_VEC_LENGTH (basetype_vec);
!       for (i = 1; i < n; i++)
  	{
! 	  tree t = BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i));
  	  tree rlist;
! 
  	  rlist = find_applicable_accessible_methods_list (lc,  t, name,
  							   arglist);
  	  list = chainon (rlist, list);
--- 11251,11263 ----
    if (TREE_CODE (TYPE_NAME (class)) == TYPE_DECL
        && CLASS_INTERFACE (TYPE_NAME (class)))
      {
        search_applicable_methods_list (lc, TYPE_METHODS (class),
  				      name, arglist, &list, &all_list);
!       for (i = 1; BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
  	{
! 	  tree t = BINFO_TYPE (base_binfo);
  	  tree rlist;
! 	  
  	  rlist = find_applicable_accessible_methods_list (lc,  t, name,
  							   arglist);
  	  list = chainon (rlist, list);
*************** find_applicable_accessible_methods_list 
*** 11091,11111 ****
  
        /* We must search all interfaces of this class */
        if (!lc)
!       {
! 	tree basetype_vec = TYPE_BINFO_BASETYPES (class);
! 	int n = TREE_VEC_LENGTH (basetype_vec), i;
! 	for (i = 1; i < n; i++)
! 	  {
! 	    tree t = BINFO_TYPE (TREE_VEC_ELT (basetype_vec, i));
! 	    if (t != object_type_node)
! 	      {
! 		tree rlist
! 		  = find_applicable_accessible_methods_list (lc, t,
! 							     name, arglist);
! 		list = chainon (rlist, list);
! 	      }
! 	  }
!       }
  
        /* Search superclass */
        if (!lc && CLASSTYPE_SUPER (class) != NULL_TREE)
--- 11281,11300 ----
  
        /* We must search all interfaces of this class */
        if (!lc)
! 	{
! 	  for (i = 1;
! 	       BINFO_BASE_ITERATE (TYPE_BINFO (class), i, base_binfo); i++)
! 	    {
! 	      tree t = BINFO_TYPE (base_binfo);
! 	      if (t != object_type_node)
! 		{
! 		  tree rlist
! 		    = find_applicable_accessible_methods_list (lc, t,
! 							       name, arglist);
! 		  list = chainon (rlist, list);
! 		}
! 	    }
! 	}
  
        /* Search superclass */
        if (!lc && CLASSTYPE_SUPER (class) != NULL_TREE)
*************** qualify_ambiguous_name (tree id)
*** 11379,11438 ****
      RESOLVE_PACKAGE_NAME_P (id) = 1;
  }
  
- static int
- breakdown_qualified (tree *left, tree *right, tree source)
- {
-   char *p, *base;
-   int l = IDENTIFIER_LENGTH (source);
- 
-   base = alloca (l + 1);
-   memcpy (base, IDENTIFIER_POINTER (source), l + 1);
- 
-   /* Breakdown NAME into REMAINDER . IDENTIFIER.  */
-   p = base + l - 1;
-   while (*p != '.' && p != base)
-     p--;
- 
-   /* We didn't find a '.'. Return an error.  */
-   if (p == base)
-     return 1;
- 
-   *p = '\0';
-   if (right)
-     *right = get_identifier (p+1);
-   *left = get_identifier (base);
- 
-   return 0;
- }
- 
- /* Return TRUE if two classes are from the same package. */
- 
- static int
- in_same_package (tree name1, tree name2)
- {
-   tree tmp;
-   tree pkg1;
-   tree pkg2;
- 
-   if (TREE_CODE (name1) == TYPE_DECL)
-     name1 = DECL_NAME (name1);
-   if (TREE_CODE (name2) == TYPE_DECL)
-     name2 = DECL_NAME (name2);
- 
-   if (QUALIFIED_P (name1) != QUALIFIED_P (name2))
-     /* One in empty package. */
-     return 0;
- 
-   if (QUALIFIED_P (name1) == 0 && QUALIFIED_P (name2) == 0)
-     /* Both in empty package. */
-     return 1;
- 
-   breakdown_qualified (&pkg1, &tmp, name1);
-   breakdown_qualified (&pkg2, &tmp, name2);
- 
-   return (pkg1 == pkg2);
- }
- 
  /* Patch tree nodes in a function body. When a BLOCK is found, push
     local variable decls if present.
     Same as java_complete_lhs, but does resolve static finals to values. */
--- 11568,11573 ----
*************** java_complete_lhs (tree node)
*** 11527,11538 ****
               long blocks. */
  	  ptr = &BLOCK_EXPR_BODY (node);
  	  while (TREE_CODE (*ptr) == COMPOUND_EXPR
! 		 && TREE_OPERAND (*ptr, 1) != empty_stmt_node)
  	    {
  	      tree cur = java_complete_tree (TREE_OPERAND (*ptr, 0));
  	      tree *next = &TREE_OPERAND (*ptr, 1);
  	      TREE_OPERAND (*ptr, 0) = cur;
! 	      if (cur == empty_stmt_node)
  		{
  		  /* Optimization;  makes it easier to detect empty bodies.
  		     Most useful for <clinit> with all-constant initializer. */
--- 11662,11673 ----
               long blocks. */
  	  ptr = &BLOCK_EXPR_BODY (node);
  	  while (TREE_CODE (*ptr) == COMPOUND_EXPR
! 		 && !IS_EMPTY_STMT (TREE_OPERAND (*ptr, 1)))
  	    {
  	      tree cur = java_complete_tree (TREE_OPERAND (*ptr, 0));
  	      tree *next = &TREE_OPERAND (*ptr, 1);
  	      TREE_OPERAND (*ptr, 0) = cur;
! 	      if (IS_EMPTY_STMT (cur))
  		{
  		  /* Optimization;  makes it easier to detect empty bodies.
  		     Most useful for <clinit> with all-constant initializer. */
*************** java_complete_lhs (tree node)
*** 11593,11605 ****
      case TRY_FINALLY_EXPR:
        COMPLETE_CHECK_OP_0 (node);
        COMPLETE_CHECK_OP_1 (node);
!       /* Reduce try/finally nodes with an empty try block.  */
!       if (TREE_OPERAND (node, 0) == empty_stmt_node
! 	  || BLOCK_EMPTY_P (TREE_OPERAND (node, 0)))
  	return TREE_OPERAND (node, 1);
!       /* Likewise for an empty finally block.  */
!       if (TREE_OPERAND (node, 1) == empty_stmt_node
! 	  || BLOCK_EMPTY_P (TREE_OPERAND (node, 1)))
  	return TREE_OPERAND (node, 0);
        CAN_COMPLETE_NORMALLY (node)
  	= (CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0))
--- 11728,11738 ----
      case TRY_FINALLY_EXPR:
        COMPLETE_CHECK_OP_0 (node);
        COMPLETE_CHECK_OP_1 (node);
!       if (IS_EMPTY_STMT (TREE_OPERAND (node, 0)))
! 	/* Reduce try/finally nodes with an empty try block.  */
  	return TREE_OPERAND (node, 1);
!       if (IS_EMPTY_STMT (TREE_OPERAND (node, 1)))
! 	/* Likewise for an empty finally block.  */
  	return TREE_OPERAND (node, 0);
        CAN_COMPLETE_NORMALLY (node)
  	= (CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0))
*************** java_complete_lhs (tree node)
*** 11614,11620 ****
        TREE_TYPE (node) = void_type_node;
        POP_LABELED_BLOCK ();
  
!       if (LABELED_BLOCK_BODY (node) == empty_stmt_node)
  	{
  	  LABELED_BLOCK_BODY (node) = NULL_TREE;
  	  CAN_COMPLETE_NORMALLY (node) = 1;
--- 11747,11753 ----
        TREE_TYPE (node) = void_type_node;
        POP_LABELED_BLOCK ();
  
!       if (IS_EMPTY_STMT (LABELED_BLOCK_BODY (node)))
  	{
  	  LABELED_BLOCK_BODY (node) = NULL_TREE;
  	  CAN_COMPLETE_NORMALLY (node) = 1;
*************** java_complete_lhs (tree node)
*** 11624,11631 ****
        return node;
  
      case EXIT_BLOCK_EXPR:
-       /* We don't complete operand 1, because it's the return value of
-          the EXIT_BLOCK_EXPR which doesn't exist it Java */
        return patch_bc_statement (node);
  
      case CASE_EXPR:
--- 11757,11762 ----
*************** java_complete_lhs (tree node)
*** 11645,11651 ****
  				       TREE_OPERAND (cn, 1));
  	}
        /* Accept final locals too. */
!       else if (TREE_CODE (cn) == VAR_DECL && DECL_FINAL (cn))
  	cn = fold_constant_for_init (DECL_INITIAL (cn), cn);
  
        if (!TREE_CONSTANT (cn) && !flag_emit_xref)
--- 11776,11783 ----
  				       TREE_OPERAND (cn, 1));
  	}
        /* Accept final locals too. */
!       else if (TREE_CODE (cn) == VAR_DECL && DECL_FINAL (cn) 
! 	       && DECL_INITIAL (cn))
  	cn = fold_constant_for_init (DECL_INITIAL (cn), cn);
  
        if (!TREE_CONSTANT (cn) && !flag_emit_xref)
*************** java_complete_lhs (tree node)
*** 11664,11670 ****
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context
  	    (wfl_operator,
! 	     "Incompatible type for case. Can't convert `%s' to `int'",
  	     lang_printable_name (TREE_TYPE (cn), 0));
  	  return error_mark_node;
  	}
--- 11796,11802 ----
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context
  	    (wfl_operator,
! 	     "Incompatible type for case. Can't convert %qs to %<int%>",
  	     lang_printable_name (TREE_TYPE (cn), 0));
  	  return error_mark_node;
  	}
*************** java_complete_lhs (tree node)
*** 11692,11700 ****
        /* Only one default label is allowed per switch statement */
        if (SWITCH_HAS_DEFAULT (nn))
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (wfl_operator,
! 			       "Duplicate case label: `default'");
  	  return error_mark_node;
  	}
        else
--- 11824,11836 ----
        /* Only one default label is allowed per switch statement */
        if (SWITCH_HAS_DEFAULT (nn))
  	{
+ #ifdef USE_MAPPED_LOCATION
+ 	  SET_EXPR_LOCATION (wfl_operator, EXPR_LOCATION (node));
+ #else
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
+ #endif
  	  parse_error_context (wfl_operator,
! 			       "Duplicate case label: %<default%>");
  	  return error_mark_node;
  	}
        else
*************** java_complete_lhs (tree node)
*** 11749,11755 ****
        TREE_OPERAND (node, 1) = java_complete_tree (TREE_OPERAND (node, 1));
        if (TREE_OPERAND (node, 1) == error_mark_node)
  	return error_mark_node;
!       TREE_OPERAND (node, 2) = java_complete_tree (TREE_OPERAND (node, 2));
        if (TREE_OPERAND (node, 2) == error_mark_node)
  	return error_mark_node;
        return patch_if_else_statement (node);
--- 11885,11900 ----
        TREE_OPERAND (node, 1) = java_complete_tree (TREE_OPERAND (node, 1));
        if (TREE_OPERAND (node, 1) == error_mark_node)
  	return error_mark_node;
!       {
! 	/* This is a special case due to build_assertion().  When
! 	   assertions are disabled we build a COND_EXPR in which
! 	   Operand 1 is the body of the assertion.  If that happens to
! 	   be a string concatenation we'll need to patch it here.  */
! 	tree patched = patch_string (TREE_OPERAND (node, 1));
! 	if (patched)
! 	  TREE_OPERAND (node, 1) = patched;
!       }
!      TREE_OPERAND (node, 2) = java_complete_tree (TREE_OPERAND (node, 2));
        if (TREE_OPERAND (node, 2) == error_mark_node)
  	return error_mark_node;
        return patch_if_else_statement (node);
*************** java_complete_lhs (tree node)
*** 11770,11776 ****
        wfl_op2 = TREE_OPERAND (node, 1);
        TREE_OPERAND (node, 0) = nn =
  	java_complete_tree (TREE_OPERAND (node, 0));
!       if (wfl_op2 == empty_stmt_node)
  	CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (nn);
        else
  	{
--- 11915,11921 ----
        wfl_op2 = TREE_OPERAND (node, 1);
        TREE_OPERAND (node, 0) = nn =
  	java_complete_tree (TREE_OPERAND (node, 0));
!       if (IS_EMPTY_STMT (wfl_op2))
  	CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (nn);
        else
  	{
*************** java_complete_lhs (tree node)
*** 11836,11849 ****
        else
  	{
  	  tree body;
! 	  int save_lineno = input_line;
  	  input_line = EXPR_WFL_LINENO (node);
  	  body = java_complete_tree (EXPR_WFL_NODE (node));
! 	  input_line = save_lineno;
  	  EXPR_WFL_NODE (node) = body;
  	  TREE_SIDE_EFFECTS (node) = TREE_SIDE_EFFECTS (body);
  	  CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (body);
! 	  if (body == empty_stmt_node || TREE_CONSTANT (body))
  	    {
  	      /* Makes it easier to constant fold, detect empty bodies. */
  	      return body;
--- 11981,12000 ----
        else
  	{
  	  tree body;
! 	  location_t save_location = input_location;
! #ifdef USE_MAPPED_LOCATION
! 	  input_location = EXPR_LOCATION (node);
! 	  if (input_location == UNKNOWN_LOCATION)
! 	    input_location = save_location;
! #else
  	  input_line = EXPR_WFL_LINENO (node);
+ #endif
  	  body = java_complete_tree (EXPR_WFL_NODE (node));
! 	  input_location = save_location;
  	  EXPR_WFL_NODE (node) = body;
  	  TREE_SIDE_EFFECTS (node) = TREE_SIDE_EFFECTS (body);
  	  CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (body);
! 	  if (IS_EMPTY_STMT (body) || TREE_CONSTANT (body))
  	    {
  	      /* Makes it easier to constant fold, detect empty bodies. */
  	      return body;
*************** java_complete_lhs (tree node)
*** 11879,11887 ****
--- 12030,12042 ----
  	      TREE_VALUE (cn) = dim;
  	      /* Setup the location of the current dimension, for
  		 later error report. */
+ #ifdef USE_MAPPED_LOCATION
+ 	      TREE_PURPOSE (cn) = expr_add_location (NULL_TREE, location, 0);
+ #else
  	      TREE_PURPOSE (cn) =
  		build_expr_wfl (NULL_TREE, input_filename, 0, 0);
  	      EXPR_WFL_LINECOL (TREE_PURPOSE (cn)) = location;
+ #endif
  	    }
  	}
        /* They complete the array creation expression, if no errors
*************** java_complete_lhs (tree node)
*** 11920,11926 ****
--- 12075,12085 ----
  	  int from_super = (EXPR_WFL_NODE (TREE_OPERAND (node, 0)) ==
                             super_identifier_node);
  	  tree arguments;
+ #ifdef USE_MAPPED_LOCATION
+ 	  source_location location = EXPR_LOCATION (node);
+ #else
  	  int location = EXPR_WFL_LINECOL (node);
+ #endif
  
  	  node = patch_method_invocation (node, NULL_TREE, NULL_TREE,
  					  from_super, 0, &decl);
*************** java_complete_lhs (tree node)
*** 11979,11985 ****
  		  else
  		    DECL_INITIAL (nn) = TREE_OPERAND (node, 1);
  		  DECL_FIELD_FINAL_IUD (nn) = 1;
! 		  return empty_stmt_node;
  		}
  	    }
  	  if (! flag_emit_class_files)
--- 12138,12144 ----
  		  else
  		    DECL_INITIAL (nn) = TREE_OPERAND (node, 1);
  		  DECL_FIELD_FINAL_IUD (nn) = 1;
! 		  return build_java_empty_stmt ();
  		}
  	    }
  	  if (! flag_emit_class_files)
*************** java_complete_lhs (tree node)
*** 12019,12025 ****
  	  if (JREFERENCE_TYPE_P (TREE_TYPE (lvalue))
  	      && ! JSTRING_TYPE_P (TREE_TYPE (lvalue)))
  	    parse_error_context (wfl_op2,
! 				 "Incompatible type for `+='. Can't convert `%s' to `java.lang.String'",
  				 lang_printable_name (TREE_TYPE (lvalue), 0));
  
  	  /* 15.25.2.b: Left hand is an array access. FIXME */
--- 12178,12184 ----
  	  if (JREFERENCE_TYPE_P (TREE_TYPE (lvalue))
  	      && ! JSTRING_TYPE_P (TREE_TYPE (lvalue)))
  	    parse_error_context (wfl_op2,
! 				 "Incompatible type for %<+=%>. Can't convert %qs to %<java.lang.String%>",
  				 lang_printable_name (TREE_TYPE (lvalue), 0));
  
  	  /* 15.25.2.b: Left hand is an array access. FIXME */
*************** java_complete_lhs (tree node)
*** 12190,12201 ****
  	  tree field = lookup_field_wrapper (TREE_OPERAND (node, 0), name);
  	  if (field == NULL_TREE)
  	    {
! 	      error ("missing static field `%s'", IDENTIFIER_POINTER (name));
  	      return error_mark_node;
  	    }
  	  if (! FIELD_STATIC (field))
  	    {
! 	      error ("not a static field `%s'", IDENTIFIER_POINTER (name));
  	      return error_mark_node;
  	    }
  	  return field;
--- 12349,12360 ----
  	  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;
*************** java_complete_lhs (tree node)
*** 12210,12216 ****
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (wfl_operator,
! 			       "Keyword `this' used outside allowed context");
  	  TREE_TYPE (node) = error_mark_node;
  	  return error_mark_node;
  	}
--- 12369,12375 ----
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context (wfl_operator,
! 			       "Keyword %<this%> used outside allowed context");
  	  TREE_TYPE (node) = error_mark_node;
  	  return error_mark_node;
  	}
*************** java_complete_lhs (tree node)
*** 12218,12224 ****
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context
! 	    (wfl_operator, "Can't reference `this' or `super' before the superclass constructor has been called");
  	  TREE_TYPE (node) = error_mark_node;
  	  return error_mark_node;
  	}
--- 12377,12383 ----
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
  	  parse_error_context
! 	    (wfl_operator, "Can't reference %<this%> or %<super%> before the superclass constructor has been called");
  	  TREE_TYPE (node) = error_mark_node;
  	  return error_mark_node;
  	}
*************** complete_function_arguments (tree node)
*** 12263,12270 ****
  	  flag = 1;
  	  continue;
  	}
!       /* If have a string literal that we haven't transformed yet or a
! 	 crafted string buffer, as a result of use of the the String
  	 `+' operator. Build `parm.toString()' and expand it. */
        if ((temp = patch_string (parm)))
  	parm = temp;
--- 12422,12429 ----
  	  flag = 1;
  	  continue;
  	}
!       /* If we have a string literal that we haven't transformed yet or a
! 	 crafted string buffer, as a result of the use of the String
  	 `+' operator. Build `parm.toString()' and expand it. */
        if ((temp = patch_string (parm)))
  	parm = temp;
*************** build_debugable_stmt (int location, tree
*** 12284,12299 ****
  {
    if (TREE_CODE (stmt) != EXPR_WITH_FILE_LOCATION)
      {
        stmt = build_expr_wfl (stmt, input_filename, 0, 0);
        EXPR_WFL_LINECOL (stmt) = location;
      }
-   JAVA_MAYBE_GENERATE_DEBUG_INFO (stmt);
    return stmt;
  }
  
  static tree
  build_expr_block (tree body, tree decls)
- 
  {
    tree node = make_node (BLOCK);
    BLOCK_EXPR_DECLS (node) = decls;
--- 12443,12461 ----
  {
    if (TREE_CODE (stmt) != EXPR_WITH_FILE_LOCATION)
      {
+ #ifdef USE_MAPPED_LOCATION
+       stmt = expr_add_location (stmt, location, 1);
+ #else
        stmt = build_expr_wfl (stmt, input_filename, 0, 0);
        EXPR_WFL_LINECOL (stmt) = location;
+       JAVA_MAYBE_GENERATE_DEBUG_INFO (stmt);
+ #endif
      }
    return stmt;
  }
  
  static tree
  build_expr_block (tree body, tree decls)
  {
    tree node = make_node (BLOCK);
    BLOCK_EXPR_DECLS (node) = decls;
*************** build_wfl_wrap (tree node, int location)
*** 12416,12440 ****
    if (TREE_CODE (node) == THIS_EXPR)
      node_to_insert = wfl = build_wfl_node (this_identifier_node);
    else
      wfl = build_expr_wfl (NULL_TREE, ctxp->filename, 0, 0);
  
    EXPR_WFL_LINECOL (wfl) = location;
    EXPR_WFL_QUALIFICATION (wfl) = build_tree_list (node_to_insert, NULL_TREE);
    return wfl;
  }
  
! /* Build a super() constructor invocation. Returns empty_stmt_node if
     we're currently dealing with the class java.lang.Object. */
  
  static tree
  build_super_invocation (tree mdecl)
  {
    if (DECL_CONTEXT (mdecl) == object_type_node)
!     return empty_stmt_node;
    else
      {
        tree super_wfl = build_wfl_node (super_identifier_node);
        tree a = NULL_TREE, t;
        /* If we're dealing with an anonymous class, pass the arguments
           of the crafted constructor along. */
        if (ANONYMOUS_CLASS_P (DECL_CONTEXT (mdecl)))
--- 12578,12614 ----
    if (TREE_CODE (node) == THIS_EXPR)
      node_to_insert = wfl = build_wfl_node (this_identifier_node);
    else
+ #ifdef USE_MAPPED_LOCATION
+     wfl = build_unknown_wfl (NULL_TREE);
+ 
+   SET_EXPR_LOCATION (wfl, location);
+ #else
      wfl = build_expr_wfl (NULL_TREE, ctxp->filename, 0, 0);
  
    EXPR_WFL_LINECOL (wfl) = location;
+ #endif
    EXPR_WFL_QUALIFICATION (wfl) = build_tree_list (node_to_insert, NULL_TREE);
    return wfl;
  }
  
! /* Build a super() constructor invocation. Returns an empty statement if
     we're currently dealing with the class java.lang.Object. */
  
  static tree
  build_super_invocation (tree mdecl)
  {
    if (DECL_CONTEXT (mdecl) == object_type_node)
!     return build_java_empty_stmt ();
    else
      {
        tree super_wfl = build_wfl_node (super_identifier_node);
        tree a = NULL_TREE, t;
+ 
+       /* This is called after parsing is done, so the parser context
+          won't be accurate. Set location info from current_class decl. */
+       tree class_wfl = lookup_cl (TYPE_NAME (current_class));
+       EXPR_WFL_LINECOL (super_wfl) = EXPR_WFL_LINECOL (class_wfl);
+ 
        /* If we're dealing with an anonymous class, pass the arguments
           of the crafted constructor along. */
        if (ANONYMOUS_CLASS_P (DECL_CONTEXT (mdecl)))
*************** build_this_super_qualified_invocation (i
*** 12466,12472 ****
  static tree
  build_method_invocation (tree name, tree args)
  {
!   tree call = build (CALL_EXPR, NULL_TREE, name, args, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    EXPR_WFL_LINECOL (call) = EXPR_WFL_LINECOL (name);
    return call;
--- 12640,12646 ----
  static tree
  build_method_invocation (tree name, tree args)
  {
!   tree call = build3 (CALL_EXPR, NULL_TREE, name, args, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    EXPR_WFL_LINECOL (call) = EXPR_WFL_LINECOL (name);
    return call;
*************** build_method_invocation (tree name, tree
*** 12477,12483 ****
  static tree
  build_new_invocation (tree name, tree args)
  {
!   tree call = build (NEW_CLASS_EXPR, NULL_TREE, name, args, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    EXPR_WFL_LINECOL (call) = EXPR_WFL_LINECOL (name);
    return call;
--- 12651,12657 ----
  static tree
  build_new_invocation (tree name, tree args)
  {
!   tree call = build3 (NEW_CLASS_EXPR, NULL_TREE, name, args, NULL_TREE);
    TREE_SIDE_EFFECTS (call) = 1;
    EXPR_WFL_LINECOL (call) = EXPR_WFL_LINECOL (name);
    return call;
*************** build_assignment (int op, int op_locatio
*** 12497,12503 ****
        rhs = build_binop (BINOP_LOOKUP (op), op_location, lhs, rhs);
        COMPOUND_ASSIGN_P (rhs) = 1;
      }
!   assignment = build (MODIFY_EXPR, NULL_TREE, lhs, rhs);
    TREE_SIDE_EFFECTS (assignment) = 1;
    EXPR_WFL_LINECOL (assignment) = op_location;
    return assignment;
--- 12671,12677 ----
        rhs = build_binop (BINOP_LOOKUP (op), op_location, lhs, rhs);
        COMPOUND_ASSIGN_P (rhs) = 1;
      }
!   assignment = build2 (MODIFY_EXPR, NULL_TREE, lhs, rhs);
    TREE_SIDE_EFFECTS (assignment) = 1;
    EXPR_WFL_LINECOL (assignment) = op_location;
    return assignment;
*************** patch_assignment (tree node, tree wfl_op
*** 12663,12670 ****
    new_rhs = try_builtin_assignconv (wfl_op1, lhs_type, rhs);
  
    /* 5.2 If it failed, try a reference conversion */
!   if (!new_rhs && (new_rhs = try_reference_assignconv (lhs_type, rhs)))
!     lhs_type = promote_type (rhs_type);
  
    /* 15.25.2 If we have a compound assignment, convert RHS into the
       type of the LHS */
--- 12837,12844 ----
    new_rhs = try_builtin_assignconv (wfl_op1, lhs_type, rhs);
  
    /* 5.2 If it failed, try a reference conversion */
!   if (!new_rhs)
!     new_rhs = try_reference_assignconv (lhs_type, rhs);
  
    /* 15.25.2 If we have a compound assignment, convert RHS into the
       type of the LHS */
*************** patch_assignment (tree node, tree wfl_op
*** 12697,12713 ****
  	  if (COMPOUND_ASSIGN_P (TREE_OPERAND (node, 1)))
  	    strcpy (operation, "assignment");
  	  else if (is_return)
! 	    strcpy (operation, "`return'");
  	  else
! 	    strcpy (operation, "`='");
  	}
  
        if (!valid_cast_to_p (rhs_type, lhs_type))
  	parse_error_context
! 	  (wfl, "Incompatible type for %s. Can't convert `%s' to `%s'",
  	   operation, t1, t2);
        else
! 	parse_error_context (wfl, "Incompatible type for %s. Explicit cast needed to convert `%s' to `%s'",
  			     operation, t1, t2);
        free (t1); free (t2);
        error_found = 1;
--- 12871,12887 ----
  	  if (COMPOUND_ASSIGN_P (TREE_OPERAND (node, 1)))
  	    strcpy (operation, "assignment");
  	  else if (is_return)
! 	    strcpy (operation, "'return'");
  	  else
! 	    strcpy (operation, "'='");
  	}
  
        if (!valid_cast_to_p (rhs_type, lhs_type))
  	parse_error_context
! 	  (wfl, "Incompatible type for %s. Can't convert %qs to %qs",
  	   operation, t1, t2);
        else
! 	parse_error_context (wfl, "Incompatible type for %s. Explicit cast needed to convert %qs to %qs",
  			     operation, t1, t2);
        free (t1); free (t2);
        error_found = 1;
*************** patch_assignment (tree node, tree wfl_op
*** 12751,12758 ****
          base = lvalue;
  
        index_expr = TREE_OPERAND (base, 1);
!       TREE_OPERAND (base, 1) = build (COMPOUND_EXPR, TREE_TYPE (index_expr),
! 	  			      store_check, index_expr);
      }
  
    /* Final locals can be used as case values in switch
--- 12925,12932 ----
          base = lvalue;
  
        index_expr = TREE_OPERAND (base, 1);
!       TREE_OPERAND (base, 1) = build2 (COMPOUND_EXPR, TREE_TYPE (index_expr),
! 				       store_check, index_expr);
      }
  
    /* Final locals can be used as case values in switch
*************** patch_assignment (tree node, tree wfl_op
*** 12765,12770 ****
--- 12939,12945 ----
        )
      {
        TREE_CONSTANT (lvalue) = 1;
+       TREE_INVARIANT (lvalue) = 1;
        DECL_INITIAL (lvalue) = new_rhs;
      }
  
*************** patch_assignment (tree node, tree wfl_op
*** 12777,12783 ****
  	case INDIRECT_REF:
  	case COMPONENT_REF:
  	  /* Transform a = foo.bar 
! 	     into a = { int tmp; tmp = foo.bar; tmp; ).   	     
  	     We need to ensure that if a read from memory fails
  	     because of a NullPointerException, a destination variable
  	     will remain unchanged.  An explicit temporary does what
--- 12952,12958 ----
  	case INDIRECT_REF:
  	case COMPONENT_REF:
  	  /* Transform a = foo.bar 
! 	     into a = ({int tmp; tmp = foo.bar;}).
  	     We need to ensure that if a read from memory fails
  	     because of a NullPointerException, a destination variable
  	     will remain unchanged.  An explicit temporary does what
*************** patch_assignment (tree node, tree wfl_op
*** 12792,12803 ****
  				   TREE_TYPE (new_rhs));
  	    tree block = make_node (BLOCK);
  	    tree assignment 
! 	      = build (MODIFY_EXPR, TREE_TYPE (new_rhs), tmp, fold (new_rhs));
  	    DECL_CONTEXT (tmp) = current_function_decl;
  	    TREE_TYPE (block) = TREE_TYPE (new_rhs);
  	    BLOCK_VARS (block) = tmp;
! 	    BLOCK_EXPR_BODY (block) 
! 	      = build (COMPOUND_EXPR, TREE_TYPE (new_rhs), assignment, tmp);
  	    TREE_SIDE_EFFECTS (block) = 1;
  	    new_rhs = block;
  	  }
--- 12967,12977 ----
  				   TREE_TYPE (new_rhs));
  	    tree block = make_node (BLOCK);
  	    tree assignment 
! 	      = build2 (MODIFY_EXPR, TREE_TYPE (new_rhs), tmp, fold (new_rhs));
  	    DECL_CONTEXT (tmp) = current_function_decl;
  	    TREE_TYPE (block) = TREE_TYPE (new_rhs);
  	    BLOCK_VARS (block) = tmp;
! 	    BLOCK_EXPR_BODY (block) = assignment;
  	    TREE_SIDE_EFFECTS (block) = 1;
  	    new_rhs = block;
  	  }
*************** try_builtin_assignconv (tree wfl_op1, tr
*** 12879,12885 ****
          new_rhs = convert (lhs_type, rhs);
        else if (wfl_op1)		/* Might be called with a NULL */
  	parse_warning_context
! 	  (wfl_op1, "Constant expression `%s' too wide for narrowing primitive conversion to `%s'",
  	   print_int_node (rhs), lang_printable_name (lhs_type, 0));
        /* Reported a warning that will turn into an error further
  	 down, so we don't return */
--- 13053,13060 ----
          new_rhs = convert (lhs_type, rhs);
        else if (wfl_op1)		/* Might be called with a NULL */
  	parse_warning_context
! 	  (wfl_op1,
!            "Constant expression %qs too wide for narrowing primitive conversion to %qs",
  	   print_int_node (rhs), lang_printable_name (lhs_type, 0));
        /* Reported a warning that will turn into an error further
  	 down, so we don't return */
*************** valid_method_invocation_conversion_p (tr
*** 13116,13122 ****
  static tree
  build_binop (enum tree_code op, int op_location, tree op1, tree op2)
  {
!   tree binop = build (op, NULL_TREE, op1, op2);
    TREE_SIDE_EFFECTS (binop) = 1;
    /* Store the location of the operator, for better error report. The
       string of the operator will be rebuild based on the OP value. */
--- 13291,13297 ----
  static tree
  build_binop (enum tree_code op, int op_location, tree op1, tree op2)
  {
!   tree binop = build2 (op, NULL_TREE, op1, op2);
    TREE_SIDE_EFFECTS (binop) = 1;
    /* Store the location of the operator, for better error report. The
       string of the operator will be rebuild based on the OP value. */
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13317,13324 ****
  	      (TREE_CODE (op2) == INTEGER_CST &&
  	       ! TREE_INT_CST_LOW (op2)  && ! TREE_INT_CST_HIGH (op2))))
  	{
! 	  parse_warning_context (wfl_operator, "Evaluating this expression will result in an arithmetic exception being thrown");
  	  TREE_CONSTANT (node) = 0;
  	}
  
        /* Change the division operator if necessary */
--- 13492,13502 ----
  	      (TREE_CODE (op2) == INTEGER_CST &&
  	       ! TREE_INT_CST_LOW (op2)  && ! TREE_INT_CST_HIGH (op2))))
  	{
! 	  parse_warning_context
!             (wfl_operator,
!              "Evaluating this expression will result in an arithmetic exception being thrown");
  	  TREE_CONSTANT (node) = 0;
+ 	  TREE_INVARIANT (node) = 0;
  	}
  
        /* Change the division operator if necessary */
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13351,13358 ****
  	{
  	  tree mod = build_java_binop (TRUNC_MOD_EXPR, prom_type, op1, op2);
  	  COMPOUND_ASSIGN_P (mod) = COMPOUND_ASSIGN_P (node);
- 	  TREE_SIDE_EFFECTS (mod)
- 	    = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2);
  	  return mod;
  	}
        break;
--- 13529,13534 ----
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13400,13411 ****
  	    {
  	      if (JNUMERIC_TYPE_P (op2_type))
  		parse_error_context (wfl_operator,
! 				     "Incompatible type for `%s'. Explicit cast needed to convert shift distance from `%s' to integral",
  				     operator_string (node),
  				     lang_printable_name (op2_type, 0));
  	      else
  		parse_error_context (wfl_operator,
! 				     "Incompatible type for `%s'. Can't convert shift distance from `%s' to integral",
  				     operator_string (node),
  				     lang_printable_name (op2_type, 0));
  	    }
--- 13576,13587 ----
  	    {
  	      if (JNUMERIC_TYPE_P (op2_type))
  		parse_error_context (wfl_operator,
! 				     "Incompatible type for %qs. Explicit cast needed to convert shift distance from %qs to integral",
  				     operator_string (node),
  				     lang_printable_name (op2_type, 0));
  	      else
  		parse_error_context (wfl_operator,
! 				     "Incompatible type for %qs. Can't convert shift distance from %qs to integral",
  				     operator_string (node),
  				     lang_printable_name (op2_type, 0));
  	    }
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13430,13440 ****
  
        /* Shift int only up to 0x1f and long up to 0x3f */
        if (prom_type == int_type_node)
! 	op2 = fold (build (BIT_AND_EXPR, int_type_node, op2,
! 			   build_int_2 (0x1f, 0)));
        else
! 	op2 = fold (build (BIT_AND_EXPR, int_type_node, op2,
! 			   build_int_2 (0x3f, 0)));
  
        /* The >>> operator is a >> operating on unsigned quantities */
        if (code == URSHIFT_EXPR && ! flag_emit_class_files)
--- 13606,13616 ----
  
        /* 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)
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13481,13487 ****
  	{
  	  SET_WFL_OPERATOR (wfl_operator, node, wfl_op2);
  	  parse_error_context
! 	    (wfl_operator, "Invalid argument `%s' for `instanceof'",
  	     lang_printable_name (op2_type, 0));
  	  error_found = 1;
  	}
--- 13657,13663 ----
  	{
  	  SET_WFL_OPERATOR (wfl_operator, node, wfl_op2);
  	  parse_error_context
! 	    (wfl_operator, "Invalid argument %qs for %<instanceof%>",
  	     lang_printable_name (op2_type, 0));
  	  error_found = 1;
  	}
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13508,13514 ****
  	  char *t1 = xstrdup (lang_printable_name (op1_type, 0));
  	  SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
  	  parse_error_context
! 	    (wfl_operator, "Impossible for `%s' to be instance of `%s'",
  	     t1, lang_printable_name (op2_type, 0));
  	  free (t1);
  	  error_found = 1;
--- 13684,13690 ----
  	  char *t1 = xstrdup (lang_printable_name (op1_type, 0));
  	  SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
  	  parse_error_context
! 	    (wfl_operator, "Impossible for %qs to be instance of %qs",
  	     t1, lang_printable_name (op2_type, 0));
  	  free (t1);
  	  error_found = 1;
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13622,13628 ****
        /* Types have to be either references or the null type. If
           they're references, it must be possible to convert either
           type to the other by casting conversion. */
!       else if (op1 == null_pointer_node || op2 == null_pointer_node
  	       || (JREFERENCE_TYPE_P (op1_type) && JREFERENCE_TYPE_P (op2_type)
  		   && (valid_ref_assignconv_cast_p (op1_type, op2_type, 1)
  		       || valid_ref_assignconv_cast_p (op2_type,
--- 13798,13806 ----
        /* Types have to be either references or the null type. If
           they're references, it must be possible to convert either
           type to the other by casting conversion. */
!       else if ((op1 == null_pointer_node && op2 == null_pointer_node)
!                || (op1 == null_pointer_node && JREFERENCE_TYPE_P (op2_type))
!                || (JREFERENCE_TYPE_P (op1_type) && op2 == null_pointer_node)
  	       || (JREFERENCE_TYPE_P (op1_type) && JREFERENCE_TYPE_P (op2_type)
  		   && (valid_ref_assignconv_cast_p (op1_type, op2_type, 1)
  		       || valid_ref_assignconv_cast_p (op2_type,
*************** patch_binop (tree node, tree wfl_op1, tr
*** 13637,13643 ****
  	  t1 = xstrdup (lang_printable_name (op1_type, 0));
  	  parse_error_context
  	    (wfl_operator,
! 	     "Incompatible type for `%s'. Can't convert `%s' to `%s'",
  	     operator_string (node), t1,
  	     lang_printable_name (op2_type, 0));
  	  free (t1);
--- 13815,13821 ----
  	  t1 = xstrdup (lang_printable_name (op1_type, 0));
  	  parse_error_context
  	    (wfl_operator,
! 	     "Incompatible type for %qs. Can't convert %qs to %qs",
  	     operator_string (node), t1,
  	     lang_printable_name (op2_type, 0));
  	  free (t1);
*************** build_string_concatenation (tree op1, tr
*** 13807,13813 ****
    int side_effects = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2);
  
    if (flag_emit_xref)
!     return build (PLUS_EXPR, string_type_node, op1, op2);
  
    /* Try to do some static optimization */
    if ((result = string_constant_concatenation (op1, op2)))
--- 13985,13991 ----
    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)))
*************** build_string_concatenation (tree op1, tr
*** 13854,13861 ****
        /* OP1 is no longer the last node holding a crafted StringBuffer */
        IS_CRAFTED_STRING_BUFFER_P (op1) = 0;
        /* Create a node for `{new...,xxx}.append (op2)' */
!       if (op2)
! 	op1 = make_qualified_primary (op1, BUILD_APPEND (op2), 0);
      }
  
    /* Mark the last node holding a crafted StringBuffer */
--- 14032,14038 ----
        /* OP1 is no longer the last node holding a crafted StringBuffer */
        IS_CRAFTED_STRING_BUFFER_P (op1) = 0;
        /* Create a node for `{new...,xxx}.append (op2)' */
!       op1 = make_qualified_primary (op1, BUILD_APPEND (op2), 0);
      }
  
    /* Mark the last node holding a crafted StringBuffer */
*************** patch_string_cst (tree node)
*** 13905,13912 ****
        location = alloc_name_constant (CONSTANT_String, node);
        node = build_ref_from_constant_pool (location);
      }
-   TREE_TYPE (node) = string_ptr_type_node;
    TREE_CONSTANT (node) = 1;
    return node;
  }
  
--- 14082,14096 ----
        location = alloc_name_constant (CONSTANT_String, node);
        node = build_ref_from_constant_pool (location);
      }
    TREE_CONSTANT (node) = 1;
+   TREE_INVARIANT (node) = 1;
+ 
+   /* ??? Guessing that the class file code can't handle casts.  */
+   if (! flag_emit_class_files)
+     node = convert (string_ptr_type_node, node);
+   else
+     TREE_TYPE (node) = string_ptr_type_node;
+ 
    return node;
  }
  
*************** build_incdec (int op_token, int op_locat
*** 13946,13953 ****
        { PREDECREMENT_EXPR, PREINCREMENT_EXPR, },
        { POSTDECREMENT_EXPR, POSTINCREMENT_EXPR, },
      };
!   tree node = build (lookup [is_post_p][(op_token - DECR_TK)],
! 		     NULL_TREE, op1, NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;
    /* Store the location of the operator, for better error report. The
       string of the operator will be rebuild based on the OP value. */
--- 14130,14137 ----
        { PREDECREMENT_EXPR, PREINCREMENT_EXPR, },
        { POSTDECREMENT_EXPR, POSTINCREMENT_EXPR, },
      };
!   tree node = build2 (lookup [is_post_p][(op_token - DECR_TK)],
! 		      NULL_TREE, op1, NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;
    /* Store the location of the operator, for better error report. The
       string of the operator will be rebuild based on the OP value. */
*************** build_incomplete_class_ref (int location
*** 13983,14007 ****
        && !JPRIMITIVE_TYPE_P (class_name)
        && !(TREE_CODE (class_name) == VOID_TYPE))
      {
        tree target_class;
  
!       if (CLASS_INTERFACE (TYPE_NAME (this_class)))
  	{
  	  /* For interfaces, adding a static 'class$' method directly 
  	     is illegal.  So create an inner class to contain the new
  	     method.  Empirically this matches the behavior of javac.  */
! 	  tree t = build_wfl_node (DECL_NAME (TYPE_NAME (object_type_node)));
! 	  tree inner = create_anonymous_class (0, t);
  	  target_class = TREE_TYPE (inner);
  	  end_class_declaration (1);
! 	}
!       else
! 	{
! 	  /* For inner classes, add a 'class$' method to their outermost
! 	     context, creating it if necessary.  */
! 	  while (INNER_CLASS_DECL_P (class_decl))
! 	    class_decl = DECL_CONTEXT (class_decl);
! 	  target_class = TREE_TYPE (class_decl);
  	}
  
        if (TYPE_DOT_CLASS (target_class) == NULL_TREE)
--- 14167,14198 ----
        && !JPRIMITIVE_TYPE_P (class_name)
        && !(TREE_CODE (class_name) == VOID_TYPE))
      {
+       tree cpc_list = GET_CPC_LIST();
+       tree cpc = cpc_list;
        tree target_class;
  
!       /* For inner classes, add a 'class$' method to their outermost
! 	 context, creating it if necessary.  */
!       
!       while (GET_NEXT_ENCLOSING_CPC(cpc))
! 	cpc = GET_NEXT_ENCLOSING_CPC(cpc);
!       class_decl = TREE_VALUE (cpc);
! 
!       target_class = TREE_TYPE (class_decl);
! 
!       if (CLASS_INTERFACE (TYPE_NAME (target_class)))
  	{
  	  /* For interfaces, adding a static 'class$' method directly 
  	     is illegal.  So create an inner class to contain the new
  	     method.  Empirically this matches the behavior of javac.  */
! 	  tree t, inner;
! 	  /* We want the generated inner class inside the outermost class. */
! 	  GET_CPC_LIST() = cpc;
! 	  t = build_wfl_node (DECL_NAME (TYPE_NAME (object_type_node)));
! 	  inner = create_anonymous_class (t);
  	  target_class = TREE_TYPE (inner);
  	  end_class_declaration (1);
! 	  GET_CPC_LIST() = cpc_list;
  	}
  
        if (TYPE_DOT_CLASS (target_class) == NULL_TREE)
*************** patch_unaryop (tree node, tree wfl_op)
*** 14069,14075 ****
      case PREINCREMENT_EXPR:
        /* 15.14.2 Prefix Decrement Operator -- */
      case PREDECREMENT_EXPR:
!       op = decl = strip_out_static_field_access_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. */
--- 14260,14266 ----
      case PREINCREMENT_EXPR:
        /* 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. */
*************** patch_unaryop (tree node, tree wfl_op)
*** 14104,14110 ****
        if (!JNUMERIC_TYPE_P (op_type))
  	{
  	  parse_error_context
! 	    (wfl_op, "Invalid argument type `%s' to `%s'",
  	     lang_printable_name (op_type, 0), operator_string (node));
  	  TREE_TYPE (node) = error_mark_node;
  	  error_found = 1;
--- 14295,14301 ----
        if (!JNUMERIC_TYPE_P (op_type))
  	{
  	  parse_error_context
! 	    (wfl_op, "Invalid argument type %qs to %qs",
  	     lang_printable_name (op_type, 0), operator_string (node));
  	  TREE_TYPE (node) = error_mark_node;
  	  error_found = 1;
*************** patch_unaryop (tree node, tree wfl_op)
*** 14115,14126 ****
  	     both operands, if really necessary */
  	  if (JINTEGRAL_TYPE_P (op_type))
  	    {
! 	      value = build_int_2 (1, 0);
! 	      TREE_TYPE (value) = TREE_TYPE (node) = op_type;
  	    }
  	  else
  	    {
! 	      value = build_int_2 (1, 0);
  	      TREE_TYPE (node) =
  		binary_numeric_promotion (op_type,
  					  TREE_TYPE (value), &op, &value);
--- 14306,14317 ----
  	     both operands, if really necessary */
  	  if (JINTEGRAL_TYPE_P (op_type))
  	    {
! 	      value = build_int_cst (op_type, 1);
! 	      TREE_TYPE (node) = op_type;
  	    }
  	  else
  	    {
! 	      value = build_int_cst (NULL_TREE, 1);
  	      TREE_TYPE (node) =
  		binary_numeric_promotion (op_type,
  					  TREE_TYPE (value), &op, &value);
*************** patch_unaryop (tree node, tree wfl_op)
*** 14130,14137 ****
  	  if (outer_field_flag)
  	    {
  	      /* We re-generate an access to the field */
! 	      value = build (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 */
--- 14321,14328 ----
  	  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 */
*************** patch_unaryop (tree node, tree wfl_op)
*** 14213,14219 ****
        else
  	{
  	  value = fold (value);
- 	  TREE_SIDE_EFFECTS (value) = TREE_SIDE_EFFECTS (op);
  	  return value;
  	}
        break;
--- 14404,14409 ----
*************** resolve_type_during_patch (tree type)
*** 14244,14250 ****
        if (!type_decl)
  	{
  	  parse_error_context (type,
! 			       "Class `%s' not found in type declaration",
  			       IDENTIFIER_POINTER (EXPR_WFL_NODE (type)));
  	  return NULL_TREE;
  	}
--- 14434,14440 ----
        if (!type_decl)
  	{
  	  parse_error_context (type,
! 			       "Class %qs not found in type declaration",
  			       IDENTIFIER_POINTER (EXPR_WFL_NODE (type)));
  	  return NULL_TREE;
  	}
*************** patch_cast (tree node, tree wfl_op)
*** 14326,14341 ****
  	}
  
        /* The cast requires a run-time check */
!       return build (CALL_EXPR, promote_type (cast_type),
! 		    build_address_of (soft_checkcast_node),
! 		    tree_cons (NULL_TREE, build_class_ref (cast_type),
! 			       build_tree_list (NULL_TREE, op)),
! 		    NULL_TREE);
      }
  
    /* Any other casts are proven incorrect at compile time */
    t1 = xstrdup (lang_printable_name (op_type, 0));
!   parse_error_context (wfl_op, "Invalid cast from `%s' to `%s'",
  		       t1, lang_printable_name (cast_type, 0));
    free (t1);
    return error_mark_node;
--- 14516,14531 ----
  	}
  
        /* The cast requires a run-time check */
!       return build3 (CALL_EXPR, promote_type (cast_type),
! 		     build_address_of (soft_checkcast_node),
! 		     tree_cons (NULL_TREE, build_class_ref (cast_type),
! 				build_tree_list (NULL_TREE, op)),
! 		     NULL_TREE);
      }
  
    /* Any other casts are proven incorrect at compile time */
    t1 = xstrdup (lang_printable_name (op_type, 0));
!   parse_error_context (wfl_op, "Invalid cast from %qs to %qs",
  		       t1, lang_printable_name (cast_type, 0));
    free (t1);
    return error_mark_node;
*************** patch_cast (tree node, tree wfl_op)
*** 14346,14353 ****
  static tree
  build_null_of_type (tree type)
  {
!   tree node = build_int_2 (0, 0);
!   TREE_TYPE (node) = promote_type (type);
    return node;
  }
  
--- 14536,14542 ----
  static tree
  build_null_of_type (tree type)
  {
!   tree node = build_int_cst (promote_type (type), 0);
    return node;
  }
  
*************** build_null_of_type (tree type)
*** 14356,14362 ****
  static tree
  build_array_ref (int location, tree array, tree index)
  {
!   tree node = build (ARRAY_REF, NULL_TREE, array, index);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
--- 14545,14552 ----
  static tree
  build_array_ref (int location, tree array, tree index)
  {
!   tree node = build4 (ARRAY_REF, NULL_TREE, array, index,
! 		      NULL_TREE, NULL_TREE);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
*************** patch_array_ref (tree node)
*** 14382,14388 ****
      {
        parse_error_context
  	(wfl_operator,
! 	 "`[]' can only be applied to arrays. It can't be applied to `%s'",
  	 lang_printable_name (array_type, 0));
        TREE_TYPE (node) = error_mark_node;
        error_found = 1;
--- 14572,14578 ----
      {
        parse_error_context
  	(wfl_operator,
! 	 "%<[]%> can only be applied to arrays. It can't be applied to %qs",
  	 lang_printable_name (array_type, 0));
        TREE_TYPE (node) = error_mark_node;
        error_found = 1;
*************** patch_array_ref (tree node)
*** 14395,14405 ****
      {
        if (valid_cast_to_p (index_type, int_type_node))
  	parse_error_context (wfl_operator,
!    "Incompatible type for `[]'. Explicit cast needed to convert `%s' to `int'",
  			     lang_printable_name (index_type, 0));
        else
  	parse_error_context (wfl_operator,
!           "Incompatible type for `[]'. Can't convert `%s' to `int'",
  			     lang_printable_name (index_type, 0));
        TREE_TYPE (node) = error_mark_node;
        error_found = 1;
--- 14585,14595 ----
      {
        if (valid_cast_to_p (index_type, int_type_node))
  	parse_error_context (wfl_operator,
!    "Incompatible type for %<[]%>. Explicit cast needed to convert %qs to %<int%>",
  			     lang_printable_name (index_type, 0));
        else
  	parse_error_context (wfl_operator,
!           "Incompatible type for %<[]%>. Can't convert %qs to %<int%>",
  			     lang_printable_name (index_type, 0));
        TREE_TYPE (node) = error_mark_node;
        error_found = 1;
*************** patch_array_ref (tree node)
*** 14426,14434 ****
  static tree
  build_newarray_node (tree type, tree dims, int extra_dims)
  {
!   tree node =
!     build (NEW_ARRAY_EXPR, NULL_TREE, type, nreverse (dims),
! 	   build_int_2 (extra_dims, 0));
    return node;
  }
  
--- 14616,14624 ----
  static tree
  build_newarray_node (tree type, tree dims, int extra_dims)
  {
!   tree node = build3 (NEW_ARRAY_EXPR, NULL_TREE, type,
! 		      nreverse (dims),
! 		      build_int_cst (NULL_TREE, extra_dims));
    return node;
  }
  
*************** patch_newarray (tree node)
*** 14470,14476 ****
  	{
  	  parse_error_context
  	    (TREE_PURPOSE (cdim),
! 	     "Incompatible type for dimension in array creation expression. %s convert `%s' to `int'",
  	     (valid_cast_to_p (TREE_TYPE (dim), int_type_node) ?
  	      "Explicit cast needed to" : "Can't"),
  	     lang_printable_name (TREE_TYPE (dim), 0));
--- 14660,14666 ----
  	{
  	  parse_error_context
  	    (TREE_PURPOSE (cdim),
! 	     "Incompatible type for dimension in array creation expression. %s convert %qs to %<int%>",
  	     (valid_cast_to_p (TREE_TYPE (dim), int_type_node) ?
  	      "Explicit cast needed to" : "Can't"),
  	     lang_printable_name (TREE_TYPE (dim), 0));
*************** patch_newarray (tree node)
*** 14522,14533 ****
  
    /* Can't reuse what's already written in expr.c because it uses the
       JVM stack representation. Provide a build_multianewarray. FIXME */
!   return build (CALL_EXPR, array_type,
! 		build_address_of (soft_multianewarray_node),
! 		tree_cons (NULL_TREE, build_class_ref (TREE_TYPE (array_type)),
! 			   tree_cons (NULL_TREE,
! 				      build_int_2 (ndims, 0), dims )),
! 		NULL_TREE);
  }
  
  /* 10.6 Array initializer.  */
--- 14712,14725 ----
  
    /* Can't reuse what's already written in expr.c because it uses the
       JVM stack representation. Provide a build_multianewarray. FIXME */
!   return build3 (CALL_EXPR, array_type,
! 		 build_address_of (soft_multianewarray_node),
! 		 tree_cons (NULL_TREE,
! 			    build_class_ref (TREE_TYPE (array_type)),
! 			    tree_cons (NULL_TREE,
! 				       build_int_cst (NULL_TREE, ndims),
! 				       dims)),
! 		 NULL_TREE);
  }
  
  /* 10.6 Array initializer.  */
*************** static tree
*** 14539,14546 ****
  maybe_build_array_element_wfl (tree node)
  {
    if (TREE_CODE (node) != EXPR_WITH_FILE_LOCATION)
!     return build_expr_wfl (NULL_TREE, ctxp->filename,
! 			   ctxp->elc.line, ctxp->elc.prev_col);
    else
      return NULL_TREE;
  }
--- 14731,14748 ----
  maybe_build_array_element_wfl (tree node)
  {
    if (TREE_CODE (node) != EXPR_WITH_FILE_LOCATION)
!     {
!       /* FIXME - old code used "prev_lc.line" and "elc.prev_col */
!       return build_expr_wfl (NULL_TREE,
! #ifdef USE_MAPPED_LOCATION
! 			     input_location
! #else
! 			     ctxp->filename,
! 			     ctxp->lexer->token_start.line,
! 			     ctxp->lexer->token_start.col
! #endif
! 			     );
!     }
    else
      return NULL_TREE;
  }
*************** patch_new_array_init (tree type, tree no
*** 14574,14580 ****
    if (TREE_CODE (type) != POINTER_TYPE || ! TYPE_ARRAY_P (TREE_TYPE (type)))
      {
        parse_error_context (node,
! 			   "Invalid array initializer for non-array type `%s'",
  			   lang_printable_name (type, 1));
        return error_mark_node;
      }
--- 14776,14782 ----
    if (TREE_CODE (type) != POINTER_TYPE || ! TYPE_ARRAY_P (TREE_TYPE (type)))
      {
        parse_error_context (node,
! 			   "Invalid array initializer for non-array type %qs",
  			   lang_printable_name (type, 1));
        return error_mark_node;
      }
*************** patch_new_array_init (tree type, tree no
*** 14617,14623 ****
--- 14819,14827 ----
    TREE_TYPE (init) = TREE_TYPE (TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (type))));
    TREE_TYPE (node) = promote_type (type);
    TREE_CONSTANT (init) = all_constant;
+   TREE_INVARIANT (init) = all_constant;
    TREE_CONSTANT (node) = all_constant;
+   TREE_INVARIANT (node) = all_constant;
    return node;
  }
  
*************** array_constructor_check_entry (tree type
*** 14659,14665 ****
        if (!array_type_string)
  	array_type_string = xstrdup (lang_printable_name (type, 1));
        parse_error_context
! 	(wfl_operator, "Incompatible type for array. %s convert `%s' to `%s'",
  	 msg, lang_printable_name (type_value, 1), array_type_string);
        error_seen = 1;
      }
--- 14863,14869 ----
        if (!array_type_string)
  	array_type_string = xstrdup (lang_printable_name (type, 1));
        parse_error_context
! 	(wfl_operator, "Incompatible type for array. %s convert %qs to %qs",
  	 msg, lang_printable_name (type_value, 1), array_type_string);
        error_seen = 1;
      }
*************** patch_return (tree node)
*** 14728,14752 ****
      {
        if (DECL_INSTINIT_P (current_function_decl))
  	parse_error_context (wfl_operator,
! 			     "`return' inside instance initializer");
  
        else if (DECL_CLINIT_P (current_function_decl))
  	parse_error_context (wfl_operator,
! 			     "`return' inside static initializer");
  
        else if (!DECL_CONSTRUCTOR_P (meth))
  	{
  	  char *t = xstrdup (lang_printable_name (mtype, 0));
  	  parse_error_context (wfl_operator,
! 			       "`return' with%s value from `%s %s'",
  			       (error_found == 1 ? "" : "out"),
! 			       t, lang_printable_name (meth, 0));
  	  free (t);
  	}
        else
  	parse_error_context (wfl_operator,
! 			     "`return' with value from constructor `%s'",
! 			     lang_printable_name (meth, 0));
        return error_mark_node;
      }
  
--- 14932,14956 ----
      {
        if (DECL_INSTINIT_P (current_function_decl))
  	parse_error_context (wfl_operator,
! 			     "%<return%> inside instance initializer");
  
        else if (DECL_CLINIT_P (current_function_decl))
  	parse_error_context (wfl_operator,
! 			     "%<return%> inside static initializer");
  
        else if (!DECL_CONSTRUCTOR_P (meth))
  	{
  	  char *t = xstrdup (lang_printable_name (mtype, 0));
  	  parse_error_context (wfl_operator,
! 			       "%<return%> with%s value from %<%s %s%>",
  			       (error_found == 1 ? "" : "out"),
! 			       t, lang_printable_name (meth, 2));
  	  free (t);
  	}
        else
  	parse_error_context (wfl_operator,
! 			     "%<return%> with value from constructor %qs",
! 			     lang_printable_name (meth, 2));
        return error_mark_node;
      }
  
*************** patch_return (tree node)
*** 14761,14767 ****
        if ((patched = patch_string (exp)))
  	exp = patched;
  
!       modify = build (MODIFY_EXPR, NULL_TREE, DECL_RESULT (meth), exp);
        EXPR_WFL_LINECOL (modify) = EXPR_WFL_LINECOL (node);
        modify = java_complete_tree (modify);
  
--- 14965,14971 ----
        if ((patched = patch_string (exp)))
  	exp = patched;
  
!       modify = build2 (MODIFY_EXPR, NULL_TREE, DECL_RESULT (meth), exp);
        EXPR_WFL_LINECOL (modify) = EXPR_WFL_LINECOL (node);
        modify = java_complete_tree (modify);
  
*************** build_if_else_statement (int location, t
*** 14786,14793 ****
  {
    tree node;
    if (!else_body)
!     else_body = empty_stmt_node;
!   node = build (COND_EXPR, NULL_TREE, expression, if_body, else_body);
    EXPR_WFL_LINECOL (node) = location;
    node = build_debugable_stmt (location, node);
    return node;
--- 14990,14997 ----
  {
    tree node;
    if (!else_body)
!     else_body = build_java_empty_stmt ();
!   node = build3 (COND_EXPR, NULL_TREE, expression, if_body, else_body);
    EXPR_WFL_LINECOL (node) = location;
    node = build_debugable_stmt (location, node);
    return node;
*************** patch_if_else_statement (tree node)
*** 14810,14833 ****
      {
        parse_error_context
  	(wfl_operator,
! 	 "Incompatible type for `if'. Can't convert `%s' to `boolean'",
  	 lang_printable_name (TREE_TYPE (expression), 0));
        return error_mark_node;
      }
  
-   if (TREE_CODE (expression) == INTEGER_CST)
-     {
-       if (integer_zerop (expression))
- 	node = TREE_OPERAND (node, 2);
-       else
- 	node = TREE_OPERAND (node, 1);
-       if (CAN_COMPLETE_NORMALLY (node) != can_complete_normally)
- 	{
- 	  node = build (COMPOUND_EXPR, void_type_node, node, empty_stmt_node);
- 	  CAN_COMPLETE_NORMALLY (node) = can_complete_normally;
- 	}
-       return node;
-     }
    TREE_TYPE (node) = void_type_node;
    TREE_SIDE_EFFECTS (node) = 1;
    CAN_COMPLETE_NORMALLY (node) = can_complete_normally;
--- 15014,15024 ----
      {
        parse_error_context
  	(wfl_operator,
! 	 "Incompatible type for %<if%>. Can't convert %qs to %<boolean%>",
  	 lang_printable_name (TREE_TYPE (expression), 0));
        return error_mark_node;
      }
  
    TREE_TYPE (node) = void_type_node;
    TREE_SIDE_EFFECTS (node) = 1;
    CAN_COMPLETE_NORMALLY (node) = can_complete_normally;
*************** build_labeled_block (int location, tree 
*** 14856,14874 ****
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = location;
  	  parse_error_context (wfl_operator,
!             "Declaration of `%s' shadows a previous label declaration",
  			       IDENTIFIER_POINTER (label));
  	  EXPR_WFL_LINECOL (wfl_operator) =
  	    EXPR_WFL_LINECOL (IDENTIFIER_LOCAL_VALUE (label_name));
  	  parse_error_context (wfl_operator,
!             "This is the location of the previous declaration of label `%s'",
  			       IDENTIFIER_POINTER (label));
  	  java_error_count--;
  	}
      }
  
    label_decl = create_label_decl (label_name);
!   node = build (LABELED_BLOCK_EXPR, NULL_TREE, label_decl, NULL_TREE);
    EXPR_WFL_LINECOL (node) = location;
    TREE_SIDE_EFFECTS (node) = 1;
    return node;
--- 15047,15065 ----
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = location;
  	  parse_error_context (wfl_operator,
!             "Declaration of %qs shadows a previous label declaration",
  			       IDENTIFIER_POINTER (label));
  	  EXPR_WFL_LINECOL (wfl_operator) =
  	    EXPR_WFL_LINECOL (IDENTIFIER_LOCAL_VALUE (label_name));
  	  parse_error_context (wfl_operator,
!             "This is the location of the previous declaration of label %qs",
  			       IDENTIFIER_POINTER (label));
  	  java_error_count--;
  	}
      }
  
    label_decl = create_label_decl (label_name);
!   node = build2 (LABELED_BLOCK_EXPR, NULL_TREE, label_decl, NULL_TREE);
    EXPR_WFL_LINECOL (node) = location;
    TREE_SIDE_EFFECTS (node) = 1;
    return node;
*************** finish_labeled_statement (tree lbe, /* L
*** 14895,14901 ****
  static tree
  build_new_loop (tree loop_body)
  {
!   tree loop =  build (LOOP_EXPR, NULL_TREE, loop_body);
    TREE_SIDE_EFFECTS (loop) = 1;
    PUSH_LOOP (loop);
    return loop;
--- 15086,15092 ----
  static tree
  build_new_loop (tree loop_body)
  {
!   tree loop = build1 (LOOP_EXPR, NULL_TREE, loop_body);
    TREE_SIDE_EFFECTS (loop) = 1;
    PUSH_LOOP (loop);
    return loop;
*************** build_loop_body (int location, tree cond
*** 14926,14932 ****
  {
    tree first, second, body;
  
!   condition = build (EXIT_EXPR, NULL_TREE, condition); /* Force walk */
    EXPR_WFL_LINECOL (condition) = location; /* For accurate error report */
    condition = build_debugable_stmt (location, condition);
    TREE_SIDE_EFFECTS (condition) = 1;
--- 15117,15123 ----
  {
    tree first, second, body;
  
!   condition = build1 (EXIT_EXPR, NULL_TREE, condition); /* Force walk */
    EXPR_WFL_LINECOL (condition) = location; /* For accurate error report */
    condition = build_debugable_stmt (location, condition);
    TREE_SIDE_EFFECTS (condition) = 1;
*************** build_loop_body (int location, tree cond
*** 14934,14942 ****
    body = build_labeled_block (0, continue_identifier_node);
    first = (reversed ? body : condition);
    second = (reversed ? condition : body);
!   return
!     build (COMPOUND_EXPR, NULL_TREE,
! 	   build (COMPOUND_EXPR, NULL_TREE, first, second), empty_stmt_node);
  }
  
  /* Install CONDITION (if any) and loop BODY (using REVERSED to tell
--- 15125,15133 ----
    body = build_labeled_block (0, continue_identifier_node);
    first = (reversed ? body : condition);
    second = (reversed ? condition : body);
!   return build2 (COMPOUND_EXPR, NULL_TREE,
! 		 build2 (COMPOUND_EXPR, NULL_TREE, first, second),
! 		 build_java_empty_stmt ());
  }
  
  /* Install CONDITION (if any) and loop BODY (using REVERSED to tell
*************** finish_loop_body (int location, tree con
*** 14954,14962 ****
        /* We wrapped the EXIT_EXPR around a WFL so we can debug it.
           The real EXIT_EXPR is one operand further. */
        EXPR_WFL_LINECOL (cnode) = location;
!       /* This one is for accurate error reports */
!       EXPR_WFL_LINECOL (TREE_OPERAND (cnode, 0)) = location;
!       TREE_OPERAND (TREE_OPERAND (cnode, 0), 0) = condition;
      }
    LOOP_EXPR_BODY_BODY_EXPR (loop_body, reversed) = body;
    POP_LOOP ();
--- 15145,15157 ----
        /* We wrapped the EXIT_EXPR around a WFL so we can debug it.
           The real EXIT_EXPR is one operand further. */
        EXPR_WFL_LINECOL (cnode) = location;
!       if (TREE_CODE (cnode) == EXPR_WITH_FILE_LOCATION)
! 	{
! 	  cnode = EXPR_WFL_NODE (cnode);
! 	  /* This one is for accurate error reports */
! 	  EXPR_WFL_LINECOL (cnode) = location;
! 	}
!       TREE_OPERAND (cnode, 0) = condition;
      }
    LOOP_EXPR_BODY_BODY_EXPR (loop_body, reversed) = body;
    POP_LOOP ();
*************** finish_for_loop (int location, tree cond
*** 14976,14994 ****
       this because the (current interpretation of the) JLS requires
       that the update expression be considered reachable even if the
       for loop's body doesn't complete normally.  */
!   if (update != NULL_TREE && update != empty_stmt_node)
      {
        tree up2 = update;
        if (TREE_CODE (up2) == EXPR_WITH_FILE_LOCATION)
  	up2 = EXPR_WFL_NODE (up2);
        /* It is possible for the update expression to be an
  	 EXPR_WFL_NODE wrapping nothing.  */
!       if (up2 != NULL_TREE && up2 != empty_stmt_node)
  	{
  	  /* Try to detect constraint violations.  These would be
  	     programming errors somewhere.  */
! 	  if (! IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (up2)))
! 	      || TREE_CODE (up2) == LOOP_EXPR)
  	    abort ();
  	  SUPPRESS_UNREACHABLE_ERROR (up2) = 1;
  	}
--- 15171,15188 ----
       this because the (current interpretation of the) JLS requires
       that the update expression be considered reachable even if the
       for loop's body doesn't complete normally.  */
!   if (update != NULL_TREE && !IS_EMPTY_STMT (update))
      {
        tree up2 = update;
        if (TREE_CODE (up2) == EXPR_WITH_FILE_LOCATION)
  	up2 = EXPR_WFL_NODE (up2);
        /* It is possible for the update expression to be an
  	 EXPR_WFL_NODE wrapping nothing.  */
!       if (up2 != NULL_TREE && !IS_EMPTY_STMT (up2))
  	{
  	  /* Try to detect constraint violations.  These would be
  	     programming errors somewhere.  */
! 	  if (! EXPR_P (up2) || TREE_CODE (up2) == LOOP_EXPR)
  	    abort ();
  	  SUPPRESS_UNREACHABLE_ERROR (up2) = 1;
  	}
*************** build_bc_statement (int location, int is
*** 15084,15091 ****
      }
    /* Unlabeled break/continue will be handled during the
       break/continue patch operation */
!   break_continue
!     = build (EXIT_BLOCK_EXPR, NULL_TREE, label_block_expr, NULL_TREE);
  
    IS_BREAK_STMT_P (break_continue) = is_break;
    TREE_SIDE_EFFECTS (break_continue) = 1;
--- 15278,15284 ----
      }
    /* Unlabeled break/continue will be handled during the
       break/continue patch operation */
!   break_continue = build1 (EXIT_BLOCK_EXPR, NULL_TREE, label_block_expr);
  
    IS_BREAK_STMT_P (break_continue) = is_break;
    TREE_SIDE_EFFECTS (break_continue) = 1;
*************** patch_bc_statement (tree node)
*** 15106,15112 ****
    /* Having an identifier here means that the target is unknown. */
    if (bc_label != NULL_TREE && TREE_CODE (bc_label) == IDENTIFIER_NODE)
      {
!       parse_error_context (wfl_operator, "No label definition found for `%s'",
  			   IDENTIFIER_POINTER (bc_label));
        return error_mark_node;
      }
--- 15299,15305 ----
    /* Having an identifier here means that the target is unknown. */
    if (bc_label != NULL_TREE && TREE_CODE (bc_label) == IDENTIFIER_NODE)
      {
!       parse_error_context (wfl_operator, "No label definition found for %qs",
  			   IDENTIFIER_POINTER (bc_label));
        return error_mark_node;
      }
*************** patch_bc_statement (tree node)
*** 15119,15128 ****
  	    {
  	      if (bc_label == NULL_TREE)
  		parse_error_context (wfl_operator,
! 				     "`continue' must be in loop");
  	      else
  		parse_error_context
! 		  (wfl_operator, "continue label `%s' does not name a loop",
  		   IDENTIFIER_POINTER (bc_label));
  	      return error_mark_node;
  	    }
--- 15312,15321 ----
  	    {
  	      if (bc_label == NULL_TREE)
  		parse_error_context (wfl_operator,
! 				     "%<continue%> must be in loop");
  	      else
  		parse_error_context
! 		  (wfl_operator, "continue label %qs does not name a loop",
  		   IDENTIFIER_POINTER (bc_label));
  	      return error_mark_node;
  	    }
*************** patch_bc_statement (tree node)
*** 15143,15149 ****
  	  if (labeled_block == NULL_TREE)
  	    {
  	      parse_error_context (wfl_operator,
! 				     "`break' must be in loop or switch");
  	      return error_mark_node;
  	    }
  	  target_stmt = LABELED_BLOCK_BODY (labeled_block);
--- 15336,15342 ----
  	  if (labeled_block == NULL_TREE)
  	    {
  	      parse_error_context (wfl_operator,
! 				     "%<break%> must be in loop or switch");
  	      return error_mark_node;
  	    }
  	  target_stmt = LABELED_BLOCK_BODY (labeled_block);
*************** patch_exit_expr (tree node)
*** 15184,15190 ****
      {
        parse_error_context
  	(wfl_operator,
!     "Incompatible type for loop conditional. Can't convert `%s' to `boolean'",
  	 lang_printable_name (TREE_TYPE (expression), 0));
        return error_mark_node;
      }
--- 15377,15383 ----
      {
        parse_error_context
  	(wfl_operator,
!     "Incompatible type for loop conditional. Can't convert %qs to %<boolean%>",
  	 lang_printable_name (TREE_TYPE (expression), 0));
        return error_mark_node;
      }
*************** patch_switch_statement (tree node)
*** 15222,15228 ****
      {
        EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
        parse_error_context (wfl_operator,
! 	  "Incompatible type for `switch'. Can't convert `%s' to `int'",
  			   lang_printable_name (se_type, 0));
        /* This is what java_complete_tree will check */
        TREE_OPERAND (node, 0) = error_mark_node;
--- 15415,15421 ----
      {
        EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
        parse_error_context (wfl_operator,
! 	  "Incompatible type for %<switch%>. Can't convert %qs to %<int%>",
  			   lang_printable_name (se_type, 0));
        /* This is what java_complete_tree will check */
        TREE_OPERAND (node, 0) = error_mark_node;
*************** patch_switch_statement (tree node)
*** 15253,15260 ****
  		= EXPR_WFL_LINECOL (TREE_PURPOSE (iter));
  	      /* The case_label_list is in reverse order, so print the
  		 outer label first.  */
! 	      parse_error_context (wfl_operator, "duplicate case label: `"
! 				   HOST_WIDE_INT_PRINT_DEC "'", subval);
  	      EXPR_WFL_LINECOL (wfl_operator)
  		= EXPR_WFL_LINECOL (TREE_PURPOSE (subiter));
  	      parse_error_context (wfl_operator, "original label is here");
--- 15446,15453 ----
  		= EXPR_WFL_LINECOL (TREE_PURPOSE (iter));
  	      /* The case_label_list is in reverse order, so print the
  		 outer label first.  */
! 	      parse_error_context (wfl_operator, "duplicate case label: %<"
! 				   HOST_WIDE_INT_PRINT_DEC "%>", subval);
  	      EXPR_WFL_LINECOL (wfl_operator)
  		= EXPR_WFL_LINECOL (TREE_PURPOSE (subiter));
  	      parse_error_context (wfl_operator, "original label is here");
*************** patch_switch_statement (tree node)
*** 15285,15295 ****
  /* Build an assertion expression for `assert CONDITION : VALUE'; VALUE
     might be NULL_TREE.  */
  static tree
! build_assertion (int location, tree condition, tree value)
  {
    tree node;
    tree klass = GET_CPC ();
  
    if (! CLASS_USES_ASSERTIONS (klass))
      {
        tree field, classdollar, id, call;
--- 15478,15504 ----
  /* Build an assertion expression for `assert CONDITION : VALUE'; VALUE
     might be NULL_TREE.  */
  static tree
! build_assertion (
! #ifdef USE_MAPPED_LOCATION
! 		 source_location location,
! #else
! 		 int location,
! #endif
! 		 tree condition, tree value)
  {
    tree node;
    tree klass = GET_CPC ();
  
+   if (! enable_assertions (klass))
+     {
+       condition = build2 (TRUTH_ANDIF_EXPR, NULL_TREE,
+ 			  boolean_false_node, condition);
+       if (value == NULL_TREE)
+ 	value = build_java_empty_stmt ();
+       return build_if_else_statement (location, condition,
+ 				      value, NULL_TREE);
+     }
+ 
    if (! CLASS_USES_ASSERTIONS (klass))
      {
        tree field, classdollar, id, call;
*************** build_assertion (int location, tree cond
*** 15302,15314 ****
        MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (field);
        FIELD_SYNTHETIC (field) = 1;
  
!       if (!TYPE_DOT_CLASS (class_type))
! 	build_dot_class_method (class_type);
!       classdollar = build_dot_class_method_invocation (class_type, class_type);
  
        /* Call CLASS.desiredAssertionStatus().  */
        id = build_wfl_node (get_identifier ("desiredAssertionStatus"));
!       call = build (CALL_EXPR, NULL_TREE, id, NULL_TREE, NULL_TREE);
        call = make_qualified_primary (classdollar, call, location);
        TREE_SIDE_EFFECTS (call) = 1;
  
--- 15511,15521 ----
        MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (field);
        FIELD_SYNTHETIC (field) = 1;
  
!       classdollar = build_incomplete_class_ref (location, class_type);
  
        /* Call CLASS.desiredAssertionStatus().  */
        id = build_wfl_node (get_identifier ("desiredAssertionStatus"));
!       call = build3 (CALL_EXPR, NULL_TREE, id, NULL_TREE, NULL_TREE);
        call = make_qualified_primary (classdollar, call, location);
        TREE_SIDE_EFFECTS (call) = 1;
  
*************** build_assertion (int location, tree cond
*** 15320,15326 ****
        DECL_INITIAL (field) = call;
  
        /* Record the initializer in the initializer statement list.  */
!       call = build (MODIFY_EXPR, NULL_TREE, field, call);
        TREE_CHAIN (call) = CPC_STATIC_INITIALIZER_STMT (ctxp);
        SET_CPC_STATIC_INITIALIZER_STMT (ctxp, call);
        MODIFY_EXPR_FROM_INITIALIZATION_P (call) = 1;
--- 15527,15533 ----
        DECL_INITIAL (field) = call;
  
        /* Record the initializer in the initializer statement list.  */
!       call = build2 (MODIFY_EXPR, NULL_TREE, field, call);
        TREE_CHAIN (call) = CPC_STATIC_INITIALIZER_STMT (ctxp);
        SET_CPC_STATIC_INITIALIZER_STMT (ctxp, call);
        MODIFY_EXPR_FROM_INITIALIZATION_P (call) = 1;
*************** build_assertion (int location, tree cond
*** 15337,15343 ****
    node = make_qualified_name (node, build_wfl_node (get_identifier ("AssertionError")),
  			      location);
  
!   node = build (NEW_CLASS_EXPR, NULL_TREE, node, value, NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;
    /* It is too early to use BUILD_THROW.  */
    node = build1 (THROW_EXPR, NULL_TREE, node);
--- 15544,15550 ----
    node = make_qualified_name (node, build_wfl_node (get_identifier ("AssertionError")),
  			      location);
  
!   node = build3 (NEW_CLASS_EXPR, NULL_TREE, node, value, NULL_TREE);
    TREE_SIDE_EFFECTS (node) = 1;
    /* It is too early to use BUILD_THROW.  */
    node = build1 (THROW_EXPR, NULL_TREE, node);
*************** build_assertion (int location, tree cond
*** 15348,15357 ****
    condition = build1 (TRUTH_NOT_EXPR, NULL_TREE, condition);
    /* Check $assertionsDisabled.  */
    condition
!     = build (TRUTH_ANDIF_EXPR, NULL_TREE,
! 	     build1 (TRUTH_NOT_EXPR, NULL_TREE,
! 		     build_wfl_node (get_identifier ("$assertionsDisabled"))),
! 	     condition);
    node = build_if_else_statement (location, condition, node, NULL_TREE);
    return node;
  }
--- 15555,15564 ----
    condition = build1 (TRUTH_NOT_EXPR, NULL_TREE, condition);
    /* Check $assertionsDisabled.  */
    condition
!     = build2 (TRUTH_ANDIF_EXPR, NULL_TREE,
! 	      build1 (TRUTH_NOT_EXPR, NULL_TREE,
! 		      build_wfl_node (get_identifier ("$assertionsDisabled"))),
! 	      condition);
    node = build_if_else_statement (location, condition, node, NULL_TREE);
    return node;
  }
*************** encapsulate_with_try_catch (int location
*** 15389,15403 ****
    catch_block = build_expr_block (NULL_TREE, catch_clause_param);
  
    /* Initialize the variable and store in the block */
!   catch = build (MODIFY_EXPR, NULL_TREE, catch_clause_param,
! 		 build (JAVA_EXC_OBJ_EXPR, ptr_type_node));
    add_stmt_to_block (catch_block, NULL_TREE, catch);
  
    /* Add the catch statements */
    add_stmt_to_block (catch_block, NULL_TREE, catch_stmts);
  
!   /* Now we can build a CATCH_EXPR */
!   catch_block = build1 (CATCH_EXPR, NULL_TREE, catch_block);
  
    return build_try_statement (location, try_block, catch_block);
  }
--- 15596,15610 ----
    catch_block = build_expr_block (NULL_TREE, catch_clause_param);
  
    /* Initialize the variable and store in the block */
!   catch = build2 (MODIFY_EXPR, NULL_TREE, catch_clause_param,
! 		  build0 (JAVA_EXC_OBJ_EXPR, ptr_type_node));
    add_stmt_to_block (catch_block, NULL_TREE, catch);
  
    /* Add the catch statements */
    add_stmt_to_block (catch_block, NULL_TREE, catch_stmts);
  
!   /* Now we can build a JAVA_CATCH_EXPR */
!   catch_block = build1 (JAVA_CATCH_EXPR, NULL_TREE, catch_block);
  
    return build_try_statement (location, try_block, catch_block);
  }
*************** encapsulate_with_try_catch (int location
*** 15405,15411 ****
  static tree
  build_try_statement (int location, tree try_block, tree catches)
  {
!   tree node = build (TRY_EXPR, NULL_TREE, try_block, catches);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
--- 15612,15618 ----
  static tree
  build_try_statement (int location, tree try_block, tree catches)
  {
!   tree node = build2 (TRY_EXPR, NULL_TREE, try_block, catches);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
*************** build_try_statement (int location, tree 
*** 15413,15419 ****
  static tree
  build_try_finally_statement (int location, tree try_block, tree finally)
  {
!   tree node = build (TRY_FINALLY_EXPR, NULL_TREE, try_block, finally);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
--- 15620,15626 ----
  static tree
  build_try_finally_statement (int location, tree try_block, tree finally)
  {
!   tree node = build2 (TRY_FINALLY_EXPR, NULL_TREE, try_block, finally);
    EXPR_WFL_LINECOL (node) = location;
    return node;
  }
*************** patch_try_statement (tree node)
*** 15430,15436 ****
    /* Check catch clauses, if any. Every time we find an error, we try
       to process the next catch clause. We process the catch clause before
       the try block so that when processing the try block we can check thrown
!      exceptions againts the caught type list. */
    for (current = catch; current; current = TREE_CHAIN (current))
      {
        tree carg_decl, carg_type;
--- 15637,15643 ----
    /* Check catch clauses, if any. Every time we find an error, we try
       to process the next catch clause. We process the catch clause before
       the try block so that when processing the try block we can check thrown
!      exceptions against the caught type list. */
    for (current = catch; current; current = TREE_CHAIN (current))
      {
        tree carg_decl, carg_type;
*************** patch_try_statement (tree node)
*** 15438,15444 ****
        int unreachable;
  
        /* At this point, the structure of the catch clause is
! 	   CATCH_EXPR		(catch node)
  	     BLOCK	        (with the decl of the parameter)
                 COMPOUND_EXPR
                   MODIFY_EXPR   (assignment of the catch parameter)
--- 15645,15651 ----
        int unreachable;
  
        /* At this point, the structure of the catch clause is
! 	   JAVA_CATCH_EXPR		(catch node)
  	     BLOCK	        (with the decl of the parameter)
                 COMPOUND_EXPR
                   MODIFY_EXPR   (assignment of the catch parameter)
*************** patch_try_statement (tree node)
*** 15460,15466 ****
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (current);
  	  parse_error_context (wfl_operator,
! 			       "Can't catch class `%s'. Catch clause parameter type must be a subclass of class `java.lang.Throwable'",
  			       lang_printable_name (carg_type, 0));
  	  error_found = 1;
  	  continue;
--- 15667,15673 ----
  	{
  	  EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (current);
  	  parse_error_context (wfl_operator,
! 			       "Can't catch class %qs. Catch clause parameter type must be a subclass of class %<java.lang.Throwable%>",
  			       lang_printable_name (carg_type, 0));
  	  error_found = 1;
  	  continue;
*************** patch_try_statement (tree node)
*** 15484,15490 ****
  	      EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (current);
  	      parse_error_context
  		(wfl_operator,
! 		 "`catch' not reached because of the catch clause at line %d",
  		 EXPR_WFL_LINENO (sub_current));
  	      unreachable = error_found = 1;
  	      break;
--- 15691,15697 ----
  	      EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (current);
  	      parse_error_context
  		(wfl_operator,
! 		 "%<catch%> not reached because of the catch clause at line %d",
  		 EXPR_WFL_LINENO (sub_current));
  	      unreachable = error_found = 1;
  	      break;
*************** patch_synchronized_statement (tree node,
*** 15551,15557 ****
    if (!JREFERENCE_TYPE_P (TREE_TYPE (expr)))
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
!       parse_error_context (wfl_operator, "Incompatible type for `synchronized'. Can't convert `%s' to `java.lang.Object'",
  			   lang_printable_name (TREE_TYPE (expr), 0));
        return error_mark_node;
      }
--- 15758,15764 ----
    if (!JREFERENCE_TYPE_P (TREE_TYPE (expr)))
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
!       parse_error_context (wfl_operator, "Incompatible type for %<synchronized%>. Can't convert %qs to %<java.lang.Object%>",
  			   lang_printable_name (TREE_TYPE (expr), 0));
        return error_mark_node;
      }
*************** patch_synchronized_statement (tree node,
*** 15586,15596 ****
    BUILD_MONITOR_EXIT (exit, expr_decl);
    CAN_COMPLETE_NORMALLY (enter) = 1;
    CAN_COMPLETE_NORMALLY (exit) = 1;
!   assignment = build (MODIFY_EXPR, NULL_TREE, expr_decl, expr);
    TREE_SIDE_EFFECTS (assignment) = 1;
!   node = build (COMPOUND_EXPR, NULL_TREE,
! 		build (COMPOUND_EXPR, NULL_TREE, assignment, enter),
! 		build (TRY_FINALLY_EXPR, NULL_TREE, block, exit));
    node = build_expr_block (node, expr_decl);
  
    return java_complete_tree (node);
--- 15793,15803 ----
    BUILD_MONITOR_EXIT (exit, expr_decl);
    CAN_COMPLETE_NORMALLY (enter) = 1;
    CAN_COMPLETE_NORMALLY (exit) = 1;
!   assignment = build2 (MODIFY_EXPR, NULL_TREE, expr_decl, expr);
    TREE_SIDE_EFFECTS (assignment) = 1;
!   node = build2 (COMPOUND_EXPR, NULL_TREE,
! 		 build2 (COMPOUND_EXPR, NULL_TREE, assignment, enter),
! 		 build2 (TRY_FINALLY_EXPR, NULL_TREE, block, exit));
    node = build_expr_block (node, expr_decl);
  
    return java_complete_tree (node);
*************** patch_throw_statement (tree node, tree w
*** 15610,15616 ****
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
        parse_error_context (wfl_operator,
!     "Can't throw `%s'; it must be a subclass of class `java.lang.Throwable'",
  			   lang_printable_name (type, 0));
        /* If the thrown expression was a reference, we further the
           compile-time check. */
--- 15817,15823 ----
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
        parse_error_context (wfl_operator,
!     "Can't throw %qs; it must be a subclass of class %<java.lang.Throwable%>",
  			   lang_printable_name (type, 0));
        /* If the thrown expression was a reference, we further the
           compile-time check. */
*************** patch_throw_statement (tree node, tree w
*** 15639,15645 ****
  	if (DECL_CONSTRUCTOR_P (current)
  	    && !check_thrown_exceptions_do (TREE_TYPE (expr)))
  	  {
! 	    parse_error_context (wfl_operator, "Checked exception `%s' can't be thrown in instance initializer (not all declared constructor are declaring it in their `throws' clause)",
  				 lang_printable_name (TREE_TYPE (expr), 0));
  	    return error_mark_node;
  	  }
--- 15846,15852 ----
  	if (DECL_CONSTRUCTOR_P (current)
  	    && !check_thrown_exceptions_do (TREE_TYPE (expr)))
  	  {
! 	    parse_error_context (wfl_operator, "Checked exception %qs can't be thrown in instance initializer (not all declared constructor are declaring it in their %<throws%> clause)",
  				 lang_printable_name (TREE_TYPE (expr), 0));
  	    return error_mark_node;
  	  }
*************** patch_throw_statement (tree node, tree w
*** 15660,15666 ****
  	 only if there is something after the list of checked
  	 exception thrown by the current function (if any). */
        if (IN_TRY_BLOCK_P ())
! 	parse_error_context (wfl_operator, "Checked exception `%s' can't be caught by any of the catch clause(s) of the surrounding `try' block",
  			     lang_printable_name (type, 0));
        /* If we have no surrounding try statement and the method doesn't have
  	 any throws, report it now. FIXME */
--- 15867,15873 ----
  	 only if there is something after the list of checked
  	 exception thrown by the current function (if any). */
        if (IN_TRY_BLOCK_P ())
! 	parse_error_context (wfl_operator, "Checked exception %qs can't be caught by any of the catch clause(s) of the surrounding %<try%> block",
  			     lang_printable_name (type, 0));
        /* If we have no surrounding try statement and the method doesn't have
  	 any throws, report it now. FIXME */
*************** patch_throw_statement (tree node, tree w
*** 15673,15689 ****
  	{
  	  if (DECL_CLINIT_P (current_function_decl))
  	    parse_error_context (wfl_operator,
!                    "Checked exception `%s' can't be thrown in initializer",
  				 lang_printable_name (type, 0));
  	  else
  	    parse_error_context (wfl_operator,
!                    "Checked exception `%s' isn't thrown from a `try' block",
  				 lang_printable_name (type, 0));
  	}
        /* Otherwise, the current method doesn't have the appropriate
           throws declaration */
        else
! 	parse_error_context (wfl_operator, "Checked exception `%s' doesn't match any of current method's `throws' declaration(s)",
  			     lang_printable_name (type, 0));
        return error_mark_node;
      }
--- 15880,15896 ----
  	{
  	  if (DECL_CLINIT_P (current_function_decl))
  	    parse_error_context (wfl_operator,
!                    "Checked exception %qs can't be thrown in initializer",
  				 lang_printable_name (type, 0));
  	  else
  	    parse_error_context (wfl_operator,
!                    "Checked exception %qs isn't thrown from a %<try%> block",
  				 lang_printable_name (type, 0));
  	}
        /* Otherwise, the current method doesn't have the appropriate
           throws declaration */
        else
! 	parse_error_context (wfl_operator, "Checked exception %qs doesn't match any of current method's %<throws%> declaration(s)",
  			     lang_printable_name (type, 0));
        return error_mark_node;
      }
*************** patch_throw_statement (tree node, tree w
*** 15701,15707 ****
     effectively caught from where DECL is invoked.  THIS_EXPR is the
     expression that computes `this' for the method call.  */
  static void
! check_thrown_exceptions (int location, tree decl, tree this_expr)
  {
    tree throws;
    int is_array_call = 0;
--- 15908,15921 ----
     effectively caught from where DECL is invoked.  THIS_EXPR is the
     expression that computes `this' for the method call.  */
  static void
! check_thrown_exceptions (
! #ifdef USE_MAPPED_LOCATION
! 			 source_location location,
! #else
! 
! 			 int location,
! #endif
! 			 tree decl, tree this_expr)
  {
    tree throws;
    int is_array_call = 0;
*************** check_thrown_exceptions (int location, t
*** 15724,15738 ****
  	if (is_array_call && DECL_NAME (decl) == get_identifier ("clone"))
  	  continue;
  
  	EXPR_WFL_LINECOL (wfl_operator) = location;
  	if (DECL_FINIT_P (current_function_decl))
  	  parse_error_context
!             (wfl_operator, "Exception `%s' can't be thrown in initializer",
  	     lang_printable_name (TREE_VALUE (throws), 0));
  	else
  	  {
  	    parse_error_context
! 	      (wfl_operator, "Exception `%s' must be caught, or it must be declared in the `throws' clause of `%s'",
  	       lang_printable_name (TREE_VALUE (throws), 0),
  	       (DECL_INIT_P (current_function_decl) ?
  		IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))) :
--- 15938,15956 ----
  	if (is_array_call && DECL_NAME (decl) == get_identifier ("clone"))
  	  continue;
  
+ #ifdef USE_MAPPED_LOCATION
+ 	SET_EXPR_LOCATION (wfl_operator, location);
+ #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
! 	      (wfl_operator, "Exception %qs must be caught, or it must be declared in the %<throws%> clause of %qs",
  	       lang_printable_name (TREE_VALUE (throws), 0),
  	       (DECL_INIT_P (current_function_decl) ?
  		IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))) :
*************** patch_conditional_expr (tree node, tree 
*** 15828,15835 ****
    tree t1, t2, patched;
    int error_found = 0;
  
!   /* Operands of ?: might be StringBuffers crafted as a result of a
!      string concatenation. Obtain a descent operand here.  */
    if ((patched = patch_string (op1)))
      TREE_OPERAND (node, 1) = op1 = patched;
    if ((patched = patch_string (op2)))
--- 16046,16055 ----
    tree t1, t2, patched;
    int error_found = 0;
  
!   /* The condition and operands of ?: might be StringBuffers crafted
!      as a result of a string concatenation.  Obtain decent ones here.  */
!   if ((patched = patch_string (cond)))
!     TREE_OPERAND (node, 0) = cond = patched;
    if ((patched = patch_string (op1)))
      TREE_OPERAND (node, 1) = op1 = patched;
    if ((patched = patch_string (op2)))
*************** patch_conditional_expr (tree node, tree 
*** 15843,15849 ****
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_cond);
        parse_error_context (wfl_operator,
!                "Incompatible type for `?:'. Can't convert `%s' to `boolean'",
  			   lang_printable_name (TREE_TYPE (cond), 0));
        error_found = 1;
      }
--- 16063,16069 ----
      {
        SET_WFL_OPERATOR (wfl_operator, node, wfl_cond);
        parse_error_context (wfl_operator,
!                "Incompatible type for %<?:%>. Can't convert %qs to %<boolean%>",
  			   lang_printable_name (TREE_TYPE (cond), 0));
        error_found = 1;
      }
*************** patch_conditional_expr (tree node, tree 
*** 15911,15917 ****
        char *t = xstrdup (lang_printable_name (t1, 0));
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
        parse_error_context (wfl_operator,
! 		 "Incompatible type for `?:'. Can't convert `%s' to `%s'",
  			   t, lang_printable_name (t2, 0));
        free (t);
        error_found = 1;
--- 16131,16137 ----
        char *t = xstrdup (lang_printable_name (t1, 0));
        SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
        parse_error_context (wfl_operator,
! 		 "Incompatible type for %<?:%>. Can't convert %qs to %qs",
  			   t, lang_printable_name (t2, 0));
        free (t);
        error_found = 1;
*************** fold_constant_for_init (tree node, tree 
*** 16067,16082 ****
  	    }
  	  else
  	    {
! 	      /* Install the proper context for the field resolution.
! 		 The prior context is restored once the name is
! 		 properly qualified. */
  	      tree saved_current_class = current_class;
  	      /* Wait until the USE_COMPONENT_REF re-write.  FIXME. */
  	      current_class = DECL_CONTEXT (context);
  	      qualify_ambiguous_name (node);
  	      current_class = saved_current_class;
! 	      if (resolve_field_access (node, &decl, NULL)
! 		  && decl != NULL_TREE)
  		return fold_constant_for_init (decl, decl);
  	      return NULL_TREE;
  	    }
--- 16287,16302 ----
  	    }
  	  else
  	    {
! 	      tree r = NULL_TREE;
! 	      /* Install the proper context for the field resolution.  */
  	      tree saved_current_class = current_class;
  	      /* Wait until the USE_COMPONENT_REF re-write.  FIXME. */
  	      current_class = DECL_CONTEXT (context);
  	      qualify_ambiguous_name (node);
+ 	      r = resolve_field_access (node, &decl, NULL);
+ 	      /* Restore prior context.  */
  	      current_class = saved_current_class;
! 	      if (r != error_mark_node && decl != NULL_TREE)
  		return fold_constant_for_init (decl, decl);
  	      return NULL_TREE;
  	    }
*************** init_src_parse (void)
*** 16130,16151 ****
  /* This section deals with the functions that are called when tables
     recording class initialization information are traversed.  */
  
- /* Attach to PTR (a block) the declaration found in ENTRY. */
- 
- static int
- attach_init_test_initialization_flags (void **entry, void *ptr)
- {
-   tree block = (tree)ptr;
-   struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
- 
-   if (block != error_mark_node)
-     {
-       TREE_CHAIN (ite->value) = BLOCK_EXPR_DECLS (block);
-       BLOCK_EXPR_DECLS (block) = ite->value;
-     }
-   return true;
- }
- 
  /* This function is called for each class that is known definitely
     initialized when a given static method was called. This function
     augments a compound expression (INFO) storing all assignment to
--- 16350,16355 ----
*************** emit_test_initialization (void **entry_p
*** 16195,16201 ****
  
    /* Now simply augment the compound that holds all the assignments
       pertaining to this method invocation. */
!   init = build (MODIFY_EXPR, boolean_type_node, decl, boolean_true_node);
    TREE_SIDE_EFFECTS (init) = 1;
    TREE_VALUE (l) = add_stmt_to_compound (TREE_VALUE (l), void_type_node, init);
    TREE_SIDE_EFFECTS (TREE_VALUE (l)) = 1;
--- 16399,16405 ----
  
    /* Now simply augment the compound that holds all the assignments
       pertaining to this method invocation. */
!   init = build2 (MODIFY_EXPR, boolean_type_node, decl, boolean_true_node);
    TREE_SIDE_EFFECTS (init) = 1;
    TREE_VALUE (l) = add_stmt_to_compound (TREE_VALUE (l), void_type_node, init);
    TREE_SIDE_EFFECTS (TREE_VALUE (l)) = 1;
*************** emit_test_initialization (void **entry_p
*** 16203,16207 ****
--- 16407,16428 ----
    return true;
  }
  
+ #ifdef __XGETTEXT__
+ /* Depending on the version of Bison used to compile this grammar,
+    it may issue generic diagnostics spelled "syntax error" or
+    "parse error".  To prevent this from changing the translation
+    template randomly, we list all the variants of this particular
+    diagnostic here.  Translators: there is no fine distinction
+    between diagnostics with "syntax error" in them, and diagnostics
+    with "parse error" in them.  It's okay to give them both the same
+    translation.  */
+ const char d1[] = N_("syntax error");
+ const char d2[] = N_("parse error");
+ const char d3[] = N_("syntax error; also virtual memory exhausted");
+ const char d4[] = N_("parse error; also virtual memory exhausted");
+ const char d5[] = N_("syntax error: cannot back up");
+ const char d6[] = N_("parse error: cannot back up");
+ #endif
+ 
  #include "gt-java-parse.h"
  #include "gtype-java.h"
diff -Nrcpad gcc-3.4.3/gcc/java/resource.c gcc-4.0.0/gcc/java/resource.c
*** gcc-3.4.3/gcc/java/resource.c	Wed Nov 26 01:34:32 2003
--- gcc-4.0.0/gcc/java/resource.c	Fri Oct 15 14:55:00 2004
***************
*** 1,5 ****
  /* Functions related to building resource files.
!    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
     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
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** The Free Software Foundation is independ
*** 41,46 ****
--- 41,47 ----
  #include "stdio.h"
  #include "target.h"
  #include "expr.h"
+ #include "tree-iterator.h"
  
  /* DOS brain-damage */
  #ifndef O_BINARY
*************** The Free Software Foundation is independ
*** 50,58 ****
  /* A list of all the resources files.  */
  static GTY(()) tree resources = NULL;
  
- /* Function used to register resources.  */
- static GTY(()) rtx registerResource_libfunc;
- 
  /* Count of all the resources compiled in this invocation.  */
  static int Jr_count = 0;
  
--- 51,56 ----
*************** compile_resource_data (const char *name,
*** 71,84 ****
    FINISH_RECORD (rtype);
    START_RECORD_CONSTRUCTOR (rinit, rtype);
    PUSH_FIELD_VALUE (rinit, "name_length", 
! 		    build_int_2 (strlen (name), 0));
    PUSH_FIELD_VALUE (rinit, "resource_length", 
! 		    build_int_2 (length, 0));
    data = build_string (strlen(name) + length, buffer);
    TREE_TYPE (data) = data_type;
    PUSH_FIELD_VALUE (rinit, "data", data);
    FINISH_RECORD_CONSTRUCTOR (rinit);
    TREE_CONSTANT (rinit) = 1;
  
    /* Generate a unique-enough identifier.  */
    sprintf (buf, "_Jr%d", ++Jr_count);
--- 69,83 ----
    FINISH_RECORD (rtype);
    START_RECORD_CONSTRUCTOR (rinit, rtype);
    PUSH_FIELD_VALUE (rinit, "name_length", 
! 		    build_int_cst (NULL_TREE, strlen (name)));
    PUSH_FIELD_VALUE (rinit, "resource_length", 
! 		    build_int_cst (NULL_TREE, length));
    data = build_string (strlen(name) + length, buffer);
    TREE_TYPE (data) = data_type;
    PUSH_FIELD_VALUE (rinit, "data", data);
    FINISH_RECORD_CONSTRUCTOR (rinit);
    TREE_CONSTANT (rinit) = 1;
+   TREE_INVARIANT (rinit) = 1;
  
    /* Generate a unique-enough identifier.  */
    sprintf (buf, "_Jr%d", ++Jr_count);
*************** compile_resource_data (const char *name,
*** 92,164 ****
    DECL_INITIAL (decl) = rinit;
    layout_decl (decl, 0);
    pushdecl (decl);
!   rest_of_decl_compilation (decl, (char*) 0, global_bindings_p (), 0);
!   make_decl_rtl (decl, (char*) 0);
    assemble_variable (decl, 1, 0, 0);
  
    resources = tree_cons (NULL_TREE, decl, resources);
  }
  
  void
! write_resource_constructor (void)
  {
!   tree init_name, init_type, init_decl;
!   tree iter;
!   location_t saved_loc = input_location;
!   char *resource_ctor_name;
  
!   /* Only do work if required.  */
!   if (resources == NULL_TREE)
      return;
  
!   resource_ctor_name = concat (IDENTIFIER_POINTER (get_file_function_name ('I')),
! 			       "_resource", NULL);
!   init_name = get_identifier (resource_ctor_name);
!   free (resource_ctor_name);
!   init_type = build_function_type (void_type_node, end_params_node);
! 
!   init_decl = build_decl (FUNCTION_DECL, init_name, init_type);
!   DECL_SOURCE_LINE (init_decl) = 0;
!   SET_DECL_ASSEMBLER_NAME (init_decl, init_name);
!   TREE_STATIC (init_decl) = 1;
!   current_function_decl = init_decl;
!   DECL_RESULT (init_decl) = build_decl (RESULT_DECL, 
! 					NULL_TREE, void_type_node);
! 
!   /* It can be a static function as long as collect2 does not have
!      to scan the object file to find its ctor/dtor routine.  */
!   TREE_PUBLIC (init_decl) = ! targetm.have_ctors_dtors;
! 
!   pushlevel (0);
!   make_decl_rtl (init_decl, NULL);
!   init_function_start (init_decl);
!   expand_function_start (init_decl, 0);
  
    /* Write out entries in the same order in which they were defined.  */
!   for (iter = nreverse (resources); iter != NULL_TREE;
!        iter = TREE_CHAIN (iter))
      {
!       emit_library_call (registerResource_libfunc, 0, VOIDmode, 1,
! 			 expand_expr (build_address_of (TREE_VALUE (iter)),
! 				      0, Pmode, 0),
! 			 Pmode);
      }
- 
-   input_location = DECL_SOURCE_LOCATION (init_decl);
-   expand_function_end ();
-   poplevel (1, 0, 1);
-   { 
-     /* Force generation, even with -O3 or deeper.  Gross hack.
-        FIXME.  */
-     int saved_flag = flag_inline_functions;
-     flag_inline_functions = 0;	
-     rest_of_compilation (init_decl);
-     flag_inline_functions = saved_flag;
-   }
-   current_function_decl = NULL_TREE;
-   (* targetm.asm_out.constructor) (XEXP (DECL_RTL (init_decl), 0),
- 				   DEFAULT_INIT_PRIORITY);
-   input_location = saved_loc;
  }
  
  /* Generate a byte array representing the contents of FILENAME.  The
--- 91,125 ----
    DECL_INITIAL (decl) = rinit;
    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);
  }
  
  void
! write_resource_constructor (tree *list_p)
  {
!   tree iter, t, register_resource_fn;
  
!   if (resources == NULL)
      return;
  
!   t = build_function_type_list (void_type_node, ptr_type_node, NULL);
!   t = build_decl (FUNCTION_DECL, get_identifier ("_Jv_RegisterResource"), t);
!   TREE_PUBLIC (t) = 1;
!   DECL_EXTERNAL (t) = 1;
!   register_resource_fn = t;
  
    /* Write out entries in the same order in which they were defined.  */
!   for (iter = nreverse (resources); iter ; iter = TREE_CHAIN (iter))
      {
!       t = build_fold_addr_expr (TREE_VALUE (iter));
!       t = tree_cons (NULL, t, NULL);
!       t = build_function_call_expr (register_resource_fn, t);
!       append_to_statement_list (t, list_p);
      }
  }
  
  /* Generate a byte array representing the contents of FILENAME.  The
*************** compile_resource_file (const char *name,
*** 190,203 ****
    close (fd);
  
    compile_resource_data (name, buffer, stat_buf.st_size);
-   write_resource_constructor ();
- }
- 
- void
- init_resource_processing (void)
- {
-   registerResource_libfunc =
-     gen_rtx_SYMBOL_REF (Pmode, "_Jv_RegisterResource");
  }
  
  #include "gt-java-resource.h"
--- 151,156 ----
diff -Nrcpad gcc-3.4.3/gcc/java/typeck.c gcc-4.0.0/gcc/java/typeck.c
*** gcc-3.4.3/gcc/java/typeck.c	Sat Feb  7 14:33:18 2004
--- gcc-4.0.0/gcc/java/typeck.c	Mon Dec 20 13:35:25 2004
*************** convert_ieee_real_to_integer (tree type,
*** 83,104 ****
    tree result;
    expr = save_expr (expr);
  
!   result = build (COND_EXPR, type,
! 		  build (NE_EXPR, boolean_type_node, expr, expr),
! 		  convert (type, integer_zero_node),
! 		  convert_to_integer (type, expr));
! 		  
!   result = build (COND_EXPR, type, 
! 		  build (LE_EXPR, boolean_type_node, expr, 
! 			 convert (TREE_TYPE (expr), TYPE_MIN_VALUE (type))),
! 		  TYPE_MIN_VALUE (type),
! 		  result);
! 
!   result = build (COND_EXPR, type,
! 		  build (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)
*** 127,148 ****
      return error_mark_node;
    if (code == VOID_TYPE)
      return build1 (CONVERT_EXPR, type, expr);
!   if (code == BOOLEAN_TYPE)
!     return fold (convert_to_boolean (type, expr));
    if (code == INTEGER_TYPE)
      {
!       if (! flag_unsafe_math_optimizations
! 	  && ! 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
! 	return fold (convert_to_integer (type, expr));
      }	  
    if (code == REAL_TYPE)
      return fold (convert_to_real (type, expr));
-   if (code == CHAR_TYPE)
-     return fold (convert_to_char (type, expr));
    if (code == POINTER_TYPE)
      return fold (convert_to_pointer (type, expr));
    error ("conversion to non-scalar type requested");
--- 129,156 ----
      return error_mark_node;
    if (code == VOID_TYPE)
      return build1 (CONVERT_EXPR, type, expr);
!   if (code == BOOLEAN_TYPE || code ==  CHAR_TYPE)
!     return fold_convert (type, expr);
    if (code == INTEGER_TYPE)
      {
!       if ((really_constant_p (expr)
! 	   || (! flag_unsafe_math_optimizations
! 	       && ! 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;
! 	}
      }	  
    if (code == REAL_TYPE)
      return fold (convert_to_real (type, expr));
    if (code == POINTER_TYPE)
      return fold (convert_to_pointer (type, expr));
    error ("conversion to non-scalar type requested");
*************** convert (tree type, tree expr)
*** 150,167 ****
  }
  
  
- tree
- convert_to_char (tree type, tree expr)
- {
-   return build1 (NOP_EXPR, type, expr);
- }
- 
- tree
- convert_to_boolean (tree type, tree expr)
- {
-   return build1 (NOP_EXPR, type, expr);
- }
- 
  /* Return a data type that has machine mode MODE.
     If the mode is an integer,
     then UNSIGNEDP selects between signed and unsigned types.  */
--- 158,163 ----
*************** build_prim_array_type (tree element_type
*** 347,354 ****
  
    if (length != -1)
      {
!       tree max_index = build_int_2 (length - 1, (0 == length ? -1 : 0));
!       TREE_TYPE (max_index) = sizetype;
        index = build_index_type (max_index);
      }
    return build_array_type (element_type, index);
--- 343,349 ----
  
    if (length != -1)
      {
!       tree max_index = build_int_cst (sizetype, length - 1);
        index = build_index_type (max_index);
      }
    return build_array_type (element_type, index);
*************** build_java_array_type (tree element_type
*** 384,392 ****
    el_name = TYPE_NAME (el_name);
    if (TREE_CODE (el_name) == TYPE_DECL)
      el_name = DECL_NAME (el_name);
!   TYPE_NAME (t) = build_decl (TYPE_DECL,
!                              identifier_subst (el_name, "", '.', '.', "[]"),
                               t);
  
    set_java_signature (t, sig);
    set_super_info (0, t, object_type_node, 0);
--- 379,395 ----
    el_name = TYPE_NAME (el_name);
    if (TREE_CODE (el_name) == TYPE_DECL)
      el_name = DECL_NAME (el_name);
!   {
!     char suffix[12];
!     if (length >= 0)
!       sprintf (suffix, "[%d]", (int)length); 
!     else
!       strcpy (suffix, "[]");
!     TYPE_NAME (t) 
!       = build_decl (TYPE_DECL,
! 		    identifier_subst (el_name, "", '.', '.', suffix),
                               t);
+   }
  
    set_java_signature (t, sig);
    set_super_info (0, t, object_type_node, 0);
*************** parse_signature_type (const unsigned cha
*** 489,495 ****
  	      break;
  	  }
  	*ptr = str+1;
! 	type = lookup_class (unmangle_classname (start, str - start));
  	break;
        }
      default:
--- 492,498 ----
  	      break;
  	  }
  	*ptr = str+1;
! 	type = lookup_class (unmangle_classname ((const char *) start, str - start));
  	break;
        }
      default:
*************** shallow_find_method (tree searched_class
*** 764,771 ****
     lookup_do.  */
  static tree
  find_method_in_superclasses (tree searched_class, int flags, 
! 			     tree method_name, 
! 	     tree signature, tree (*signature_builder) (tree))
  {
    tree klass;
    for (klass = CLASSTYPE_SUPER (searched_class); klass != NULL_TREE;
--- 767,774 ----
     lookup_do.  */
  static tree
  find_method_in_superclasses (tree searched_class, int flags, 
!                              tree method_name, tree signature,
!                              tree (*signature_builder) (tree))
  {
    tree klass;
    for (klass = CLASSTYPE_SUPER (searched_class); klass != NULL_TREE;
*************** find_method_in_superclasses (tree search
*** 785,802 ****
     for a method matching METHOD_NAME and signature SIGNATURE.  A
     private helper for lookup_do.  */
  static tree
! find_method_in_interfaces (tree searched_class, int flags, tree method_name, 
! 	     tree signature, tree (*signature_builder) (tree))
  {
    int i;
!   int interface_len = 
!     TREE_VEC_LENGTH (TYPE_BINFO_BASETYPES (searched_class)) - 1;
  
!   for (i = interface_len; i > 0; i--)
      {
!       tree child = 
! 	TREE_VEC_ELT (TYPE_BINFO_BASETYPES (searched_class), i);
!       tree iclass = BINFO_TYPE (child);
        tree method;
  	  
        /* If the superinterface hasn't been loaded yet, do so now.  */
--- 788,803 ----
     for a method matching METHOD_NAME and signature SIGNATURE.  A
     private helper for lookup_do.  */
  static tree
! find_method_in_interfaces (tree searched_class, int flags, tree method_name,
!                            tree signature, tree (*signature_builder) (tree))
  {
    int i;
!   tree binfo, base_binfo;
  
!   for (binfo = TYPE_BINFO (searched_class), i = 1;
!        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
      {
!       tree iclass = BINFO_TYPE (base_binfo);
        tree method;
  	  
        /* If the superinterface hasn't been loaded yet, do so now.  */
*************** find_method_in_interfaces (tree searched
*** 808,814 ****
        /* First, we look in ICLASS.  If that doesn't work we'll
  	 recursively look through all its superinterfaces.  */
        method = shallow_find_method (iclass, flags, method_name, 
! 					 signature, signature_builder);      
        if (method != NULL_TREE)
  	return method;
    
--- 809,815 ----
        /* First, we look in ICLASS.  If that doesn't work we'll
  	 recursively look through all its superinterfaces.  */
        method = shallow_find_method (iclass, flags, method_name, 
! 				    signature, signature_builder);      
        if (method != NULL_TREE)
  	return method;
    
diff -Nrcpad gcc-3.4.3/gcc/java/verify-glue.c gcc-4.0.0/gcc/java/verify-glue.c
*** gcc-3.4.3/gcc/java/verify-glue.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/java/verify-glue.c	Mon Mar  7 21:37:34 2005
***************
*** 0 ****
--- 1,508 ----
+ /* Glue to interface gcj with bytecode verifier.
+    Copyright (C) 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.  */
+ 
+ /* Written by Tom Tromey <tromey@redhat.com>.  */
+ 
+ #include "config.h"
+ 
+ #include "system.h"
+ #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)
+ {
+   return xmalloc (bytes);
+ }
+ 
+ void
+ vfy_free (void *mem)
+ {
+   free (mem);
+ }
+ 
+ bool
+ vfy_strings_equal (vfy_string one, vfy_string two)
+ {
+   return one == two;
+ }
+ 
+ const char *
+ vfy_string_bytes (vfy_string str)
+ {
+   return IDENTIFIER_POINTER (str);
+ }
+ 
+ int
+ vfy_string_length (vfy_string str)
+ {
+   return IDENTIFIER_LENGTH (str);
+ }
+ 
+ vfy_string
+ vfy_init_name (void)
+ {
+   return init_identifier_node;
+ }
+ 
+ vfy_string
+ vfy_clinit_name (void)
+ {
+   return clinit_identifier_node;
+ }
+ 
+ static const char*
+ skip_one_type (const char* ptr)
+ {
+   int ch = *ptr++;
+ 
+   while (ch == '[')
+     { 
+       ch = *ptr++;
+     }
+   
+   if (ch == 'L')
+     {
+       do { ch = *ptr++; } while (ch != ';');
+     }
+ 
+   return ptr;
+ }
+ 
+ int
+ vfy_count_arguments (vfy_string signature)
+ {
+   const char *ptr = IDENTIFIER_POINTER (signature);
+   int arg_count = 0;
+ 
+   /* Skip '('.  */
+   ptr++;
+ 
+   /* Count args.  */
+   while (*ptr != ')')
+     {
+       ptr = skip_one_type (ptr);
+       arg_count += 1;
+     }
+ 
+   return arg_count;
+ }
+ 
+ vfy_string
+ vfy_get_string (const char *s, int len)
+ {
+   return get_identifier_with_length (s, len);
+ }
+ 
+ vfy_string
+ vfy_get_signature (vfy_method *method)
+ {
+   return method->signature;
+ }
+ 
+ vfy_string
+ vfy_get_method_name (vfy_method *method)
+ {
+   return method->name;
+ }
+ 
+ bool
+ vfy_is_static (vfy_method *method)
+ {
+   return METHOD_STATIC (method->method);
+ }
+ 
+ const unsigned char *
+ vfy_get_bytecode (vfy_method *method)
+ {
+   return method->bytes;
+ }
+ 
+ vfy_exception *
+ vfy_get_exceptions (vfy_method *method)
+ {
+   return method->exceptions;
+ }
+ 
+ void
+ vfy_get_exception (vfy_exception *exceptions, int index, int *handler,
+ 		   int *start, int *end, int *handler_type)
+ {
+   *handler = exceptions[index].handler;
+   *start = exceptions[index].start;
+   *end = exceptions[index].end;
+   *handler_type = exceptions[index].type;
+ }
+ 
+ int
+ vfy_tag (vfy_constants *pool, int index)
+ {
+   int result = JPOOL_TAG (pool, index);
+   /* gcj will resolve constant pool entries other than string and
+      class references.  The verifier doesn't care about the values, so
+      we just strip off the resolved flag.  */
+   if ((result & CONSTANT_ResolvedFlag) != 0
+       && result != CONSTANT_ResolvedString
+       && result != CONSTANT_ResolvedClass)
+     result &= ~ CONSTANT_ResolvedFlag;
+   return result;
+ }
+ 
+ void
+ vfy_load_indexes (vfy_constants *pool, int index,
+ 		  vfy_uint_16 *index0, vfy_uint_16 *index1)
+ {
+   *index0 = JPOOL_USHORT1 (pool, index);
+   *index1 = JPOOL_USHORT2 (pool, index);
+ }
+ 
+ vfy_constants *
+ vfy_get_constants (vfy_jclass klass)
+ {
+   return TYPE_JCF (klass);
+ }
+ 
+ int
+ vfy_get_constants_size (vfy_jclass klass)
+ {
+   return JPOOL_SIZE (TYPE_JCF (klass));
+ }
+ 
+ vfy_string
+ vfy_get_pool_string (vfy_constants *pool, int index)
+ {
+   return get_name_constant (pool, index);
+ }
+ 
+ vfy_jclass
+ vfy_get_pool_class (vfy_constants *pool, int index)
+ {
+   vfy_jclass k;
+   k = get_class_constant (pool, index);
+   return k;
+ }
+ 
+ vfy_string
+ vfy_make_string (const char *s, int len)
+ {
+   tree result;
+   char *s2 = (char *) s;
+   char save = s2[len];
+   s2[len] = '\0';
+   result = get_identifier (s2);
+   s2[len] = save;
+   return result;  
+ }
+ 
+ vfy_string
+ vfy_get_class_name (vfy_jclass klass)
+ {
+   return DECL_NAME (TYPE_NAME (klass));
+ }
+ 
+ bool
+ vfy_is_assignable_from (vfy_jclass target, vfy_jclass source)
+ {
+   /* Any class is always assignable to itself, or java.lang.Object. */
+   if (source == target || target == object_type_node)
+     return true;
+ 
+   /* For the C++ ABI, perform this test statically. */
+   if (! flag_indirect_dispatch)
+     return can_widen_reference_to (source, target);
+ 
+   /* For the BC-ABI, we assume at compile time that reference types are always 
+   compatible.  However, a type assertion table entry is emitted so that the
+   runtime can detect binary-incompatible changes.  */
+ 
+   add_type_assertion (current_class, JV_ASSERT_TYPES_COMPATIBLE, source,
+ 		      target);
+   return true;
+ }
+ 
+ char
+ vfy_get_primitive_char (vfy_jclass klass)
+ {
+   tree sig;
+   if (! vfy_is_primitive (klass))
+     abort ();
+   sig = build_java_signature (klass);
+   return (IDENTIFIER_POINTER (sig))[0];
+ }
+ 
+ bool
+ vfy_is_array (vfy_jclass klass)
+ {
+   return TYPE_ARRAY_P (klass);
+ }
+ 
+ bool
+ vfy_is_interface (vfy_jclass klass)
+ {
+   return CLASS_INTERFACE (TYPE_NAME (klass));
+ }
+ 
+ bool
+ vfy_is_primitive (vfy_jclass klass)
+ {
+   return JPRIMITIVE_TYPE_P (klass);
+ }
+ 
+ vfy_jclass
+ vfy_get_superclass (vfy_jclass klass)
+ {
+   vfy_jclass k;
+   k = CLASSTYPE_SUPER (klass);
+   return k;
+ }
+ 
+ vfy_jclass
+ vfy_get_array_class (vfy_jclass klass)
+ {
+   vfy_jclass k;
+   k = build_java_array_type (klass, -1);
+   return k;
+ }
+ 
+ vfy_jclass
+ vfy_get_component_type (vfy_jclass klass)
+ {
+   vfy_jclass k;
+   if (! vfy_is_array (klass))
+     abort ();
+   k = TYPE_ARRAY_ELEMENT (klass);
+   if (TREE_CODE (k) == POINTER_TYPE)
+     k = TREE_TYPE (k);
+   return k;
+ }
+ 
+ bool
+ vfy_is_abstract (vfy_jclass klass)
+ {
+   return CLASS_ABSTRACT (TYPE_NAME (klass));
+ }
+ 
+ vfy_jclass
+ vfy_find_class (vfy_jclass ignore ATTRIBUTE_UNUSED, vfy_string name)
+ {
+   vfy_jclass k;
+ 
+   k = get_type_from_signature (name);
+   if (TREE_CODE (k) == POINTER_TYPE)
+     k = TREE_TYPE (k);
+ 
+   return k;
+ }
+ 
+ vfy_jclass
+ vfy_object_type (void)
+ {
+   vfy_jclass k;
+   k = object_type_node;
+   return k;
+ }
+ 
+ vfy_jclass
+ vfy_string_type (void)
+ {
+   vfy_jclass k;
+   k = string_type_node;
+   return k;
+ }
+ 
+ vfy_jclass
+ vfy_throwable_type (void)
+ {
+   vfy_jclass k;
+   k = throwable_type_node;
+   return k;
+ }
+ 
+ vfy_jclass
+ vfy_unsuitable_type (void)
+ {
+   return TYPE_SECOND;
+ }
+ 
+ vfy_jclass
+ vfy_return_address_type (void)
+ {
+   return TYPE_RETURN_ADDR;
+ }
+ 
+ vfy_jclass
+ vfy_null_type (void)
+ {
+   return TYPE_NULL;
+ }
+ 
+ bool
+ vfy_class_has_field (vfy_jclass klass, vfy_string name,
+ 		     vfy_string signature)
+ {
+   tree field = TYPE_FIELDS (klass);
+   while (field != NULL_TREE)
+     {
+       if (DECL_NAME (field) == name
+ 	  && build_java_signature (TREE_TYPE (field)) == signature)
+ 	return true;
+       field = TREE_CHAIN (field);
+     }
+   return false;
+ }
+ 
+ int
+ vfy_fail (const char *message, int pc, vfy_jclass ignore1 ATTRIBUTE_UNUSED,
+ 	  vfy_method *ignore2 ATTRIBUTE_UNUSED)
+ {
+   if (pc == -1)
+     error ("verification failed: %s", message);
+   else
+     error ("verification failed at PC=%d: %s", pc, message);
+   /* We have to return a value for the verifier to throw.  */
+   return 1;
+ }
+ 
+ vfy_jclass
+ vfy_get_primitive_type (int type)
+ {
+   vfy_jclass k;
+   k = decode_newarray_type (type);
+   return k;
+ }
+ 
+ void
+ vfy_note_stack_depth (vfy_method *method, int pc, int depth)
+ {
+   tree label = lookup_label (pc);
+   LABEL_TYPE_STATE (label) = make_tree_vec (method->max_locals + depth);
+ }
+ 
+ void
+ vfy_note_stack_type (vfy_method *method, int pc, int slot, vfy_jclass type)
+ {
+   tree label, vec;
+   
+   slot += method->max_locals;
+ 
+   if (type == object_type_node)
+     type = object_ptr_type_node;
+ 
+   label = lookup_label (pc);
+   vec = LABEL_TYPE_STATE (label);
+   TREE_VEC_ELT (vec, slot) = type;
+ }
+ 
+ void
+ vfy_note_local_type (vfy_method *method ATTRIBUTE_UNUSED, int pc, int slot,
+ 		     vfy_jclass type)
+ {
+   tree label, vec;
+   
+   if (type == object_type_node)
+     type = object_ptr_type_node;
+ 
+   label = lookup_label (pc);
+   vec = LABEL_TYPE_STATE (label);
+   TREE_VEC_ELT (vec, slot) = type;
+ }
+ 
+ void
+ vfy_note_instruction_seen (int pc)
+ {
+   instruction_bits[pc] |= BCODE_VERIFIED;
+ }
+ 
+ /* Verify the bytecodes of the current method.
+    Return 1 on success, 0 on failure. */
+ int
+ verify_jvm_instructions_new (JCF *jcf, const unsigned char *byte_ops,
+ 			 long length)
+ {
+   vfy_method method;
+   int i, result, eh_count;
+   vfy_exception *exceptions;
+ 
+   method_init_exceptions ();
+ 
+   JCF_SEEK (jcf, DECL_CODE_OFFSET (current_function_decl) + length);
+   eh_count = JCF_readu2 (jcf);
+ 
+   exceptions = (vfy_exception *) xmalloc (eh_count * sizeof (vfy_exception));
+   for (i = 0; i < eh_count; ++i)
+     {
+       int start_pc, end_pc, handler_pc, catch_type;
+       unsigned char *p = jcf->read_ptr + 8 * i;
+       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)
+ 	{
+ 	  error ("bad pc in exception_table");
+ 	  free (exceptions);
+ 	  return 0;
+ 	}
+ 
+       exceptions[i].handler = handler_pc;
+       exceptions[i].start = start_pc;
+       exceptions[i].end = end_pc;
+       exceptions[i].type = catch_type;
+ 
+       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;
+     }
+ 
+   handle_nested_ranges ();
+ 
+   method.method = current_function_decl;
+   method.signature = build_java_signature (TREE_TYPE (current_function_decl));
+   method.name = DECL_NAME (current_function_decl);
+   method.bytes = byte_ops;
+   method.exceptions = exceptions;
+   method.defining_class = DECL_CONTEXT (current_function_decl);
+   method.max_stack = DECL_MAX_STACK (current_function_decl);
+   method.max_locals = DECL_MAX_LOCALS (current_function_decl);
+   method.code_length = length;
+   method.exc_count = eh_count;
+ 
+   result = verify_method (&method);
+ 
+   free (exceptions);
+ 
+   return result;
+ }
diff -Nrcpad gcc-3.4.3/gcc/java/verify-impl.c gcc-4.0.0/gcc/java/verify-impl.c
*** gcc-3.4.3/gcc/java/verify-impl.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/java/verify-impl.c	Mon Mar  7 21:37:34 2005
***************
*** 0 ****
--- 1,3308 ----
+ /* Copyright (C) 2001, 2002, 2003, 2004, 2005  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ /* Written by Tom Tromey <tromey@redhat.com>  */
+ 
+ /* Uncomment this to enable debugging output.  */
+ /* #define VERIFY_DEBUG */
+ 
+ #include "config.h"
+ 
+ #include "verify.h"
+ 
+ /* Hack to work around namespace pollution from java-tree.h.  */
+ #undef current_class
+ 
+ #ifdef VERIFY_DEBUG
+ #include <stdio.h>
+ #endif /* VERIFY_DEBUG */
+ 
+ /* This is used to mark states which are not scheduled for
+    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
+    of each opcode as it is encountered.  For most opcodes, this is a
+    straightforward operation.
+ 
+    This verifier does not do type merging.  It used to, but this
+    results in difficulty verifying some relatively simple code
+    involving interfaces, and it pushed some verification work into the
+    interpreter.
+ 
+    Instead of merging reference types, when we reach a point where two
+    flows of control merge, we simply keep the union of reference types
+    from each branch.  Then, when we need to verify a fact about a
+    reference on the stack (e.g., that it is compatible with the
+    argument type of a method), we check to ensure that all possible
+    types satisfy the requirement.
+ 
+    Another area this verifier differs from the norm is in its handling
+    of subroutines.  The JVM specification has some confusing things to
+    say about subroutines.  For instance, it makes claims about not
+    allowing subroutines to merge and it rejects recursive subroutines.
+    For the most part these are red herrings; we used to try to follow
+    these things but they lead to problems.  For example, the notion of
+    "being in a subroutine" is not well-defined: is an exception
+    handler in a subroutine?  If you never execute the `ret' but
+    instead `goto 1' do you remain in the subroutine?
+ 
+    For clarity on what is really required for type safety, read
+    "Simple Verification Technique for Complex Java Bytecode
+    Subroutines" by Alessandro Coglio.  Among other things this paper
+    shows that recursive subroutines are not harmful to type safety.
+    We implement something similar to what he proposes.  Note that this
+    means that this verifier will accept code that is rejected by some
+    other verifiers.
+ 
+    For those not wanting to read the paper, the basic observation is
+    that we can maintain split states in subroutines.  We maintain one
+    state for each calling `jsr'.  In other words, we re-verify a
+    subroutine once for each caller, using the exact types held by the
+    callers (as opposed to the old approach of merging types and
+    keeping a bitmap registering what did or did not change).  This
+    approach lets us continue to verify correctly even when a
+    subroutine is exited via `goto' or `athrow' and not `ret'.
+ 
+    In some other areas the JVM specification is (mildly) incorrect,
+    so we diverge.  For instance, you cannot
+    violate type safety by allocating an object with `new' and then
+    failing to initialize it, no matter how one branches or where one
+    stores the uninitialized reference.  See "Improving the official
+    specification of Java bytecode verification" by Alessandro Coglio.
+ 
+    Note that there's no real point in enforcing that padding bytes or
+    the mystery byte of invokeinterface must be 0, but we do that
+    regardless.
+ 
+    The verifier is currently neither completely lazy nor eager when it
+    comes to loading classes.  It tries to represent types by name when
+    possible, and then loads them when it needs to verify a fact about
+    the type.  Checking types by name is valid because we only use
+    names which come from the current class' constant pool.  Since all
+    such names are looked up using the same class loader, there is no
+    danger that we might be fooled into comparing different types with
+    the same name.
+ 
+    In the future we plan to allow for a completely lazy mode of
+    operation, where the verifier will construct a list of type
+    assertions to be checked later.
+ 
+    Some test cases for the verifier live in the "verify" module of the
+    Mauve test suite.  However, some of these are presently
+    (2004-01-20) believed to be incorrect.  (More precisely the notion
+    of "correct" is not well-defined, and this verifier differs from
+    others while remaining type-safe.)  Some other tests live in the
+    libgcj test suite.
+ 
+    This verifier is also written to be pluggable.  This means that it
+    is intended for use in a variety of environments, not just libgcj.
+    As a result the verifier expects a number of type and method
+    declarations to be declared in "verify.h".  The intent is that you
+    recompile the verifier for your particular environment.  This
+    approach was chosen so that operations could be inlined in verify.h
+    as much as possible.
+ 
+    See the verify.h that accompanies this copy of the verifier to see
+    what types, preprocessor defines, and functions must be declared.
+    The interface is ad hoc, but was defined so that it could be
+    implemented to connect to a pure C program.
+ */
+ 
+ #define FLAG_INSN_START 1
+ #define FLAG_BRANCH_TARGET 2
+ #define FLAG_INSN_SEEN 4
+ 
+ struct state;
+ struct type;
+ struct ref_intersection;
+ 
+ typedef struct state state;
+ typedef struct type type;
+ typedef struct ref_intersection ref_intersection;
+ 
+ /*typedef struct state_list state_list;*/
+ 
+ typedef struct state_list
+ {
+   state *val;
+   struct state_list *next;
+ } state_list;
+ 
+ typedef struct vfy_string_list
+ {
+   vfy_string val;
+   struct vfy_string_list *next;
+ } vfy_string_list;
+ 
+ typedef struct verifier_context
+ {
+   /* The current PC.  */
+   int PC;
+   /* The PC corresponding to the start of the current instruction.  */
+   int start_PC;
+ 
+   /* The current state of the stack, locals, etc.  */
+   state *current_state;
+ 
+   /* At each branch target we keep a linked list of all the states we
+      can process at that point.  We'll only have multiple states at a
+      given PC if they both have different return-address types in the
+      same stack or local slot.  This array is indexed by PC and holds
+      the list of all such states.  */
+   state_list **states;
+ 
+   /* We keep a linked list of all the states which we must reverify.
+      This is the head of the list.  */
+   state *next_verify_state;
+ 
+   /* We keep some flags for each instruction.  The values are the
+      FLAG_* constants defined above.  This is an array indexed by PC.  */
+   char *flags;
+ 
+   /* The bytecode itself.  */
+   const unsigned char *bytecode;
+   /* The exceptions.  */
+   vfy_exception *exception;
+ 
+   /* Defining class.  */
+   vfy_jclass current_class;
+   /* This method.  */
+   vfy_method *current_method;
+ 
+   /* A linked list of utf8 objects we allocate.  */
+   vfy_string_list *utf8_list;
+ 
+   /* A linked list of all ref_intersection objects we allocate.  */
+   ref_intersection *isect_list;
+ } verifier_context;
+ 
+ /* The current verifier's state data. This is maintained by
+    {push/pop}_verifier_context to provide a shorthand form to access
+    the verification state. */
+ static GTY(()) verifier_context *vfr;
+ 
+ /* Local function declarations.  */
+ bool type_initialized (type *t);
+ int ref_count_dimensions (ref_intersection *ref);
+ 
+ static void
+ verify_fail_pc (const char *s, int pc)
+ {
+   vfy_fail (s, pc, vfr->current_class, vfr->current_method);  
+ }
+ 
+ static void
+ verify_fail (const char *s)
+ {
+   verify_fail_pc (s, vfr->PC);
+ }
+ 
+ /* This enum holds a list of tags for all the different types we
+    need to handle.  Reference types are treated specially by the
+    type class.  */
+ typedef enum type_val
+ {
+   void_type,
+ 
+   /* The values for primitive types are chosen to correspond to values
+      specified to newarray. */
+   boolean_type = 4,
+   char_type = 5,
+   float_type = 6,
+   double_type = 7,
+   byte_type = 8,
+   short_type = 9,
+   int_type = 10,
+   long_type = 11,
+ 
+   /* Used when overwriting second word of a double or long in the
+      local variables.  Also used after merging local variable states
+      to indicate an unusable value.  */
+   unsuitable_type,
+   return_address_type,
+   /* This is the second word of a two-word value, i.e., a double or
+      a long.  */
+   continuation_type,
+ 
+   /* Everything after `reference_type' must be a reference type.  */
+   reference_type,
+   null_type,
+   uninitialized_reference_type
+ } type_val;
+ 
+ /* This represents a merged class type.  Some verifiers (including
+    earlier versions of this one) will compute the intersection of
+    two class types when merging states.  However, this loses
+    critical information about interfaces implemented by the various
+    classes.  So instead we keep track of all the actual classes that
+    have been merged.  */
+ struct ref_intersection
+ {
+   /* Whether or not this type has been resolved.  */
+   bool is_resolved;
+ 
+   /* Actual type data.  */
+   union
+   {
+     /* For a resolved reference type, this is a pointer to the class.  */
+     vfy_jclass klass;
+     /* For other reference types, this it the name of the class.  */
+     vfy_string name;
+   } data;
+ 
+   /* Link to the next reference in the intersection.  */
+   ref_intersection *ref_next;
+ 
+   /* This is used to keep track of all the allocated
+      ref_intersection objects, so we can free them.
+      FIXME: we should allocate these in chunks.  */
+   ref_intersection *alloc_next;
+ };
+ 
+ static ref_intersection *
+ make_ref (void)
+ {
+   ref_intersection *new_ref = 
+     (ref_intersection *) vfy_alloc (sizeof (ref_intersection));
+ 
+   new_ref->alloc_next = vfr->isect_list;
+   vfr->isect_list = new_ref;
+   return new_ref;
+ }
+ 
+ static ref_intersection *
+ clone_ref (ref_intersection *dup)
+ {
+   ref_intersection *new_ref = make_ref ();
+ 
+   new_ref->is_resolved = dup->is_resolved;
+   new_ref->data = dup->data;
+   return new_ref;
+ }
+ 
+ static void 
+ resolve_ref (ref_intersection *ref)
+ {
+   if (ref->is_resolved)
+     return;
+   ref->data.klass = vfy_find_class (vfr->current_class, ref->data.name);
+   ref->is_resolved = true;
+ }
+ 
+ static bool 
+ refs_equal (ref_intersection *ref1, ref_intersection *ref2)
+ {
+   if (! ref1->is_resolved && ! ref2->is_resolved
+       && vfy_strings_equal (ref1->data.name, ref2->data.name))
+     return true;
+   if (! ref1->is_resolved)
+     resolve_ref (ref1);
+   if (! ref2->is_resolved)
+     resolve_ref (ref2);
+   return ref1->data.klass == ref2->data.klass;
+ }
+ 
+ /* Merge REF1 type into REF2, returning the result.  This will
+    return REF2 if all the classes in THIS already appear in
+    REF2.  */
+ static ref_intersection *
+ merge_refs (ref_intersection *ref1, ref_intersection *ref2)
+ {
+   ref_intersection *tail = ref2;
+   for (; ref1 != NULL; ref1 = ref1->ref_next)
+     {
+       bool add = true;
+       ref_intersection *iter;
+       for (iter = ref2; iter != NULL; iter = iter->ref_next)
+ 	{
+ 	  if (refs_equal (ref1, iter))
+ 	    {
+ 	      add = false;
+ 	      break;
+ 	    }
+ 	}
+ 
+       if (add)
+         {
+ 	  ref_intersection *new_tail = clone_ref (ref1);
+ 	  new_tail->ref_next = tail;
+ 	  tail = new_tail;
+ 	}
+     }
+   return tail;
+ }
+ 
+ /* See if an object of type SOURCE can be assigned to an object of
+    type TARGET.  This might resolve classes in one chain or the other.  */
+ static bool 
+ ref_compatible (ref_intersection *target, ref_intersection *source)
+ {
+   for (; target != NULL; target = target->ref_next)
+     {
+       ref_intersection *source_iter = source;
+ 
+       for (; source_iter != NULL; source_iter = source_iter->ref_next)
+ 	{
+ 	  /* Avoid resolving if possible.  */
+ 	  if (! target->is_resolved
+ 	      && ! source_iter->is_resolved
+ 	      && vfy_strings_equal (target->data.name,
+ 				    source_iter->data.name))
+ 	    continue;
+ 
+ 	  if (! target->is_resolved)
+ 	    resolve_ref (target);
+ 	  if (! source_iter->is_resolved)
+ 	    resolve_ref (source_iter);
+ 
+ 	  if (! vfy_is_assignable_from (target->data.klass,
+ 	  			        source_iter->data.klass))
+ 	    return false;
+ 	}
+     }
+ 
+   return true;
+ }
+ 
+ static bool 
+ ref_isarray (ref_intersection *ref)
+ {
+   /* assert (ref_next == NULL);  */
+   if (ref->is_resolved)
+     return vfy_is_array (ref->data.klass);
+   else
+     return vfy_string_bytes (ref->data.name)[0] == '[';
+ }
+ 
+ static bool
+ ref_isinterface (ref_intersection *ref)
+ {
+   /* assert (ref_next == NULL);  */
+   if (! ref->is_resolved)
+     resolve_ref (ref);
+   return vfy_is_interface (ref->data.klass);
+ }
+ 
+ static bool
+ ref_isabstract (ref_intersection *ref)
+ {
+   /* assert (ref_next == NULL); */
+   if (! ref->is_resolved)
+     resolve_ref (ref);
+   return vfy_is_abstract (ref->data.klass);
+ }
+ 
+ static vfy_jclass 
+ ref_getclass (ref_intersection *ref)
+ {
+   if (! ref->is_resolved)
+     resolve_ref (ref);
+   return ref->data.klass;
+ }
+ 
+ int
+ ref_count_dimensions (ref_intersection *ref)
+ {
+   int ndims = 0;
+   if (ref->is_resolved)
+     {
+       vfy_jclass k = ref->data.klass;
+       while (vfy_is_array (k))
+ 	{
+  	  k = vfy_get_component_type (k);
+ 	  ++ndims;
+ 	}
+     }
+   else
+     {
+       const char *p = vfy_string_bytes (ref->data.name);
+       while (*p++ == '[')
+ 	++ndims;
+     }
+   return ndims;
+ }
+ 
+ /* Return the type_val corresponding to a primitive signature
+    character.  For instance `I' returns `int.class'.  */
+ static type_val
+ get_type_val_for_signature (char sig)
+ {
+   type_val rt;
+   switch (sig)
+     {
+     case 'Z':
+       rt = boolean_type;
+       break;
+     case 'B':
+       rt = byte_type;
+       break;
+     case 'C':
+       rt = char_type;
+       break;
+     case 'S':
+       rt = short_type;
+       break;
+     case 'I':
+       rt = int_type;
+       break;
+     case 'J':
+       rt = long_type;
+       break;
+     case 'F':
+       rt = float_type;
+       break;
+     case 'D':
+       rt = double_type;
+       break;
+     case 'V':
+       rt = void_type;
+       break;
+     default:
+       verify_fail ("invalid signature");
+       return null_type;
+     }
+   return rt;
+ }
+ 
+ /* Return the type_val corresponding to a primitive class.  */
+ static type_val
+ get_type_val_for_primtype (vfy_jclass k)
+ {
+   return get_type_val_for_signature (vfy_get_primitive_char (k));
+ }
+ 
+ /* The `type' class is used to represent a single type in the verifier.  */
+ struct type
+ {
+   /* The type key.  */
+   type_val key;
+ 
+   /* For reference types, the representation of the type.  */
+   ref_intersection *klass;
+ 
+   /* This is used in two situations.
+   
+      First, when constructing a new object, it is the PC of the
+      `new' instruction which created the object.  We use the special
+      value UNINIT to mean that this is uninitialized.  The special
+      value SELF is used for the case where the current method is
+      itself the <init> method.  the special value EITHER is used
+      when we may optionally allow either an uninitialized or
+      initialized reference to match.
+   
+      Second, when the key is return_address_type, this holds the PC
+      of the instruction following the `jsr'.  */
+   int pc;
+ 
+ #define UNINIT -2
+ #define SELF -1
+ #define EITHER -3
+ };
+ 
+ /* Make a new instance given the type tag.  We assume a generic
+    `reference_type' means Object.  */
+ static void
+ init_type_from_tag (type *t, type_val k)
+ {
+   t->key = k;
+   /* For reference_type, if KLASS==NULL then that means we are
+      looking for a generic object of any kind, including an
+      uninitialized reference.  */
+   t->klass = NULL;
+   t->pc = UNINIT;
+ }
+ 
+ /* Make a type for the given type_val tag K.  */
+ static type
+ make_type (type_val k)
+ {
+   type t;
+   init_type_from_tag (&t, k);
+   return t;
+ }
+ 
+ /* Make a new instance given a class.  */
+ static void
+ init_type_from_class (type *t, vfy_jclass k)
+ {
+   t->key = reference_type;
+   t->klass = make_ref ();
+   t->klass->is_resolved = true;
+   t->klass->data.klass = k;
+   t->klass->ref_next = NULL;
+   t->pc = UNINIT;
+ }
+ 
+ static type
+ make_type_from_class (vfy_jclass k)
+ {
+   type t;
+   init_type_from_class (&t, k);
+   return t;
+ }
+ 
+ static void
+ init_type_from_string (type *t, vfy_string n)
+ {
+   t->key = reference_type;
+   t->klass = make_ref ();
+   t->klass->is_resolved = false;
+   t->klass->data.name = n;
+   t->klass->ref_next = NULL;
+   t->pc = UNINIT;
+ }
+ 
+ static type
+ make_type_from_string (vfy_string n)
+ {
+   type t;
+   init_type_from_string (&t, n);
+   return t;
+ }
+ 
+ /* Promote a numeric type.  */
+ static void
+ vfy_promote_type (type *t)
+ {
+   if (t->key == boolean_type || t->key == char_type
+       || t->key == byte_type || t->key == short_type)
+     t->key = int_type;
+ }
+ #define promote_type vfy_promote_type
+ 
+ /* Mark this type as the uninitialized result of `new'.  */
+ static void
+ type_set_uninitialized (type *t, int npc)
+ {
+   if (t->key == reference_type)
+     t->key = uninitialized_reference_type;
+   else
+     verify_fail ("internal error in type::uninitialized");
+   t->pc = npc;
+ }
+ 
+ /* Mark this type as now initialized.  */
+ static void
+ type_set_initialized (type *t, int npc)
+ {
+   if (npc != UNINIT && t->pc == npc && t->key == uninitialized_reference_type)
+     {
+       t->key = reference_type;
+       t->pc = UNINIT;
+     }
+ }
+ 
+ /* Mark this type as a particular return address.  */
+ static void type_set_return_address (type *t, int npc)
+ {
+   t->pc = npc;
+ }
+ 
+ /* Return true if this type and type OTHER are considered
+    mergeable for the purposes of state merging.  This is related
+    to subroutine handling.  For this purpose two types are
+    considered unmergeable if they are both return-addresses but
+    have different PCs.  */
+ static bool
+ type_state_mergeable_p (type *t1, type *t2)
+ {
+   return (t1->key != return_address_type
+ 	  || t2->key != return_address_type
+ 	  || t1->pc == t2->pc);
+ }
+ 
+ /* Return true if an object of type K can be assigned to a variable
+    of type T.  Handle various special cases too.  Might modify
+    T or K.  Note however that this does not perform numeric
+    promotion.  */
+ static bool 
+ types_compatible (type *t, type *k)
+ {
+   /* Any type is compatible with the unsuitable type.  */
+   if (k->key == unsuitable_type)
+     return true;
+ 
+   if (t->key < reference_type || k->key < reference_type)
+     return t->key == k->key;
+ 
+   /* The `null' type is convertible to any initialized reference
+      type.  */
+   if (t->key == null_type)
+     return k->key != uninitialized_reference_type;
+   if (k->key == null_type)
+     return t->key != uninitialized_reference_type;
+ 
+   /* A special case for a generic reference.  */
+   if (t->klass == NULL)
+     return true;
+   if (k->klass == NULL)
+     verify_fail ("programmer error in type::compatible");
+ 
+   /* Handle the special 'EITHER' case, which is only used in a
+      special case of 'putfield'.  Note that we only need to handle
+      this on the LHS of a check.  */
+   if (! type_initialized (t) && t->pc == EITHER)
+     {
+       /* If the RHS is uninitialized, it must be an uninitialized
+ 	 'this'.  */
+       if (! type_initialized (k) && k->pc != SELF)
+ 	return false;
+     }
+   else if (type_initialized (t) != type_initialized (k))
+     {
+       /* An initialized type and an uninitialized type are not
+ 	 otherwise compatible.  */
+       return false;
+     }
+   else
+     {
+       /* Two uninitialized objects are compatible if either:
+        * The PCs are identical, or
+        * One PC is UNINIT.  */
+       if (type_initialized (t))
+ 	{
+ 	  if (t->pc != k->pc && t->pc != UNINIT && k->pc != UNINIT)
+ 	    return false;
+ 	}
+     }
+ 
+   return ref_compatible (t->klass, k->klass);
+ }
+ 
+ /* Return true if two types are equal.  Only valid for reference
+    types.  */
+ static bool
+ types_equal (type *t1, type *t2)
+ {
+   if ((t1->key != reference_type && t1->key != uninitialized_reference_type)
+       || (t2->key != reference_type
+ 	  && t2->key != uninitialized_reference_type))
+     return false;
+   /* Only single-ref types are allowed.  */
+   if (t1->klass->ref_next || t2->klass->ref_next)
+     return false;
+   return refs_equal (t1->klass, t2->klass);
+ }
+ 
+ static bool
+ type_isvoid (type *t)
+ {
+   return t->key == void_type;
+ }
+ 
+ static bool
+ type_iswide (type *t)
+ {
+   return t->key == long_type || t->key == double_type;
+ }
+ 
+ /* Return number of stack or local variable slots taken by this type.  */  
+ static int
+ type_depth (type *t)
+ {
+   return type_iswide (t) ? 2 : 1;
+ }
+ 
+ static bool
+ type_isarray (type *t)
+ {
+   /* We treat null_type as not an array.  This is ok based on the
+      current uses of this method.  */
+   if (t->key == reference_type)
+     return ref_isarray (t->klass);
+   return false;
+ }
+ 
+ static bool
+ type_isnull (type *t)
+ {
+   return t->key == null_type;
+ }
+ 
+ static bool
+ type_isinterface (type *t)
+ {
+   if (t->key != reference_type)
+     return false;
+   return ref_isinterface (t->klass);
+ }
+ 
+ static bool
+ type_isabstract (type *t)
+ {
+   if (t->key != reference_type)
+     return false;
+   return ref_isabstract (t->klass);
+ }
+ 
+ /* Return the element type of an array.  */
+ static type
+ type_array_element (type *t)
+ {
+   type et;
+   vfy_jclass k;
+ 
+   if (t->key != reference_type)
+     verify_fail ("programmer error in type::element_type()");
+ 
+   k = vfy_get_component_type (ref_getclass (t->klass));
+   if (vfy_is_primitive (k))
+     init_type_from_tag (&et, get_type_val_for_primtype (k));
+   else
+     init_type_from_class (&et, k);
+   return et;
+ }
+ 
+ /* Return the array type corresponding to an initialized
+    reference.  We could expand this to work for other kinds of
+    types, but currently we don't need to.  */
+ static type 
+ type_to_array (type *t)
+ {
+   type at;
+   vfy_jclass k;
+ 
+   if (t->key != reference_type)
+     verify_fail ("internal error in type::to_array()");
+ 
+   k = ref_getclass (t->klass);
+   init_type_from_class (&at, vfy_get_array_class (k));
+   return at;
+ }
+ 
+ static bool
+ type_isreference (type *t)
+ {
+   return t->key >= reference_type;
+ }
+ 
+ static int
+ type_get_pc (type *t)
+ {
+   return t->pc;
+ }
+ 
+ bool
+ type_initialized (type *t)
+ {
+   return t->key == reference_type || t->key == null_type;
+ }
+ 
+ static void
+ type_verify_dimensions (type *t, int ndims)
+ {
+   /* The way this is written, we don't need to check isarray().  */
+   if (t->key != reference_type)
+     verify_fail ("internal error in verify_dimensions:"
+ 			   " not a reference type");
+ 
+   if (ref_count_dimensions (t->klass) < ndims)
+     verify_fail ("array type has fewer dimensions"
+ 			   " than required");
+ }
+ 
+ /* Merge OLD_TYPE into this.  On error throw exception.  Return
+    true if the merge caused a type change.  */
+ static bool
+ merge_types (type *t, type *old_type, bool local_semantics)
+ {
+   bool changed = false;
+   bool refo = type_isreference (old_type);
+   bool refn = type_isreference (t);
+   if (refo && refn)
+     {
+       if (old_type->key == null_type)
+ 	;
+       else if (t->key == null_type)
+ 	{
+ 	  *t = *old_type;
+ 	  changed = true;
+ 	}
+       else if (type_initialized (t) != type_initialized (old_type))
+ 	verify_fail ("merging initialized and uninitialized types");
+       else
+ 	{
+ 	  ref_intersection *merged;
+ 	  if (! type_initialized (t))
+ 	    {
+ 	      if (t->pc == UNINIT)
+ 		t->pc = old_type->pc;
+ 	      else if (old_type->pc == UNINIT)
+ 		;
+ 	      else if (t->pc != old_type->pc)
+ 		verify_fail ("merging different uninitialized types");
+ 	    }
+ 
+ 	  merged = merge_refs (old_type->klass, t->klass);
+ 	  if (merged != t->klass)
+ 	    {
+ 	      t->klass = merged;
+ 	      changed = true;
+ 	    }
+ 	}
+     }
+   else if (refo || refn || t->key != old_type->key)
+     {
+       if (local_semantics)
+ 	{
+ 	  /* If we already have an `unsuitable' type, then we
+ 	     don't need to change again.  */
+ 	  if (t->key != unsuitable_type)
+ 	    {
+ 	      t->key = unsuitable_type;
+ 	      changed = true;
+ 	    }
+ 	}
+       else
+ 	verify_fail ("unmergeable type");
+     }
+   return changed;
+ }
+ 
+ #ifdef VERIFY_DEBUG
+ static void 
+ type_print (type *t)
+ {
+   char c = '?';
+   switch (t->key)
+     {
+     case boolean_type: c = 'Z'; break;
+     case byte_type: c = 'B'; break;
+     case char_type: c = 'C'; break;
+     case short_type: c = 'S'; break;
+     case int_type: c = 'I'; break;
+     case long_type: c = 'J'; break;
+     case float_type: c = 'F'; break;
+     case double_type: c = 'D'; break;
+     case void_type: c = 'V'; break;
+     case unsuitable_type: c = '-'; break;
+     case return_address_type: c = 'r'; break;
+     case continuation_type: c = '+'; break;
+     case reference_type: c = 'L'; break;
+     case null_type: c = '@'; break;
+     case uninitialized_reference_type: c = 'U'; break;
+     }
+   debug_print ("%c", c);
+ }
+ #endif /* VERIFY_DEBUG */
+ 
+ /* This class holds all the state information we need for a given
+    location. */
+ struct state
+ {
+   /* The current top of the stack, in terms of slots.  */
+   int stacktop;
+   /* The current depth of the stack.  This will be larger than
+      STACKTOP when wide types are on the stack.  */
+   int stackdepth;
+   /* The stack.  */
+   type *stack;
+   /* The local variables.  */
+   type *locals;
+   /* We keep track of the type of `this' specially.  This is used to
+      ensure that an instance initializer invokes another initializer
+      on `this' before returning.  We must keep track of this
+      specially because otherwise we might be confused by code which
+      assigns to locals[0] (overwriting `this') and then returns
+      without really initializing.  */
+   type this_type;
+ 
+   /* The PC for this state.  This is only valid on states which are
+      permanently attached to a given PC.  For an object like
+      `current_state', which is used transiently, this has no
+      meaning.  */
+   int pc;
+   /* We keep a linked list of all states requiring reverification.
+      If this is the special value INVALID_STATE then this state is
+      not on the list.  NULL marks the end of the linked list.  */
+   state *next;
+ };
+ 
+ /* NO_NEXT is the PC value meaning that a new state must be
+    acquired from the verification list.  */
+ #define NO_NEXT -1
+ 
+ static void
+ init_state_with_stack (state *s, int max_stack, int max_locals)
+ {
+   int i;
+   s->stacktop = 0;
+   s->stackdepth = 0;
+   s->stack = (type *) vfy_alloc (max_stack * sizeof (type));
+   for (i = 0; i < max_stack; ++i)
+     init_type_from_tag (&s->stack[i], unsuitable_type);
+   s->locals = (type *) vfy_alloc (max_locals * sizeof (type));
+   for (i = 0; i < max_locals; ++i)
+     init_type_from_tag (&s->locals[i], unsuitable_type);
+   init_type_from_tag (&s->this_type, unsuitable_type);
+   s->pc = NO_NEXT;
+   s->next = INVALID_STATE;
+ }
+ 
+ static void
+ copy_state (state *s, state *copy, int max_stack, int max_locals)
+ {
+   int i;
+   s->stacktop = copy->stacktop;
+   s->stackdepth = copy->stackdepth;
+   for (i = 0; i < max_stack; ++i)
+     s->stack[i] = copy->stack[i];
+   for (i = 0; i < max_locals; ++i)
+     s->locals[i] = copy->locals[i];
+ 
+   s->this_type = copy->this_type;
+   /* Don't modify `next' or `pc'. */
+ }
+ 
+ static void
+ copy_state_with_stack (state *s, state *orig, int max_stack, int max_locals)
+ {
+   init_state_with_stack (s, max_stack, max_locals);
+   copy_state (s, orig, max_stack, max_locals);
+ }
+ 
+ /* Allocate a new state, copying ORIG. */
+ static state *
+ make_state_copy (state *orig, int max_stack, int max_locals)
+ {
+   state *s = vfy_alloc (sizeof (state));
+   copy_state_with_stack (s, orig, max_stack, max_locals);
+   return s;
+ }
+ 
+ static state *
+ make_state (int max_stack, int max_locals)
+ {
+   state *s = vfy_alloc (sizeof (state));
+   init_state_with_stack (s, max_stack, max_locals);
+   return s;
+ }
+ 
+ static void
+ free_state (state *s)
+ {
+   if (s->stack != NULL)
+     vfy_free (s->stack);
+   if (s->locals != NULL)
+     vfy_free (s->locals);
+ }
+ 
+ /* Modify this state to reflect entry to an exception handler.  */
+ static void
+ state_set_exception (state *s, type *t, int max_stack)
+ {
+   int i;
+   s->stackdepth = 1;
+   s->stacktop = 1;
+   s->stack[0] = *t;
+   for (i = s->stacktop; i < max_stack; ++i)
+     init_type_from_tag (&s->stack[i], unsuitable_type);
+ }
+ 
+ /* Merge STATE_OLD into this state.  Destructively modifies this
+    state.  Returns true if the new state was in fact changed.
+    Will throw an exception if the states are not mergeable.  */
+ static bool
+ merge_states (state *s, state *state_old, int max_locals)
+ {
+   int i;
+   bool changed = false;
+ 
+   /* Special handling for `this'.  If one or the other is
+      uninitialized, then the merge is uninitialized.  */
+   if (type_initialized (&s->this_type))
+     s->this_type = state_old->this_type;
+ 
+   /* Merge stacks.  */
+   if (state_old->stacktop != s->stacktop)  /* FIXME stackdepth instead?  */
+     verify_fail ("stack sizes differ");
+   for (i = 0; i < state_old->stacktop; ++i)
+     {
+       if (merge_types (&s->stack[i], &state_old->stack[i], false))
+ 	changed = true;
+     }
+ 
+   /* Merge local variables.  */
+   for (i = 0; i < max_locals; ++i)
+     {
+       if (merge_types (&s->locals[i], &state_old->locals[i], true))
+ 	changed = true;
+     }
+ 
+   return changed;
+ }
+ 
+ /* Ensure that `this' has been initialized.  */
+ static void
+ state_check_this_initialized (state *s)
+ {
+   if (type_isreference (&s->this_type) && ! type_initialized (&s->this_type))
+     verify_fail ("`this' is uninitialized");
+ }
+ 
+ /* Set type of `this'.  */
+ static void
+ state_set_this_type (state *s, type *k)
+ {
+   s->this_type = *k;
+ }
+ 
+ /* Mark each `new'd object we know of that was allocated at PC as
+    initialized.  */
+ static void
+ state_set_initialized (state *s, int pc, int max_locals)
+ {
+   int i;
+   for (i = 0; i < s->stacktop; ++i)
+     type_set_initialized (&s->stack[i], pc);
+   for (i = 0; i < max_locals; ++i)
+     type_set_initialized (&s->locals[i], pc);
+   type_set_initialized (&s->this_type, pc);
+ }
+ 
+ /* This tests to see whether two states can be considered "merge
+    compatible".  If both states have a return-address in the same
+    slot, and the return addresses are different, then they are not
+    compatible and we must not try to merge them.  */
+ static bool
+ state_mergeable_p (state *s, state *other, int max_locals)
+ 
+ {
+   int i;
+ 
+   /* This is tricky: if the stack sizes differ, then not only are
+      these not mergeable, but in fact we should give an error, as
+      we've found two execution paths that reach a branch target
+      with different stack depths.  FIXME stackdepth instead?  */
+   if (s->stacktop != other->stacktop)
+     verify_fail ("stack sizes differ");
+ 
+   for (i = 0; i < s->stacktop; ++i)
+     if (! type_state_mergeable_p (&s->stack[i], &other->stack[i]))
+       return false;
+   for (i = 0; i < max_locals; ++i)
+     if (! type_state_mergeable_p (&s->locals[i], &other->locals[i]))
+       return false;
+   return true;
+ }
+ 
+ static void
+ state_reverify (state *s)
+ {
+   if (s->next == INVALID_STATE)
+     {
+       s->next = vfr->next_verify_state;
+       vfr->next_verify_state = s;
+     }
+ }
+ 
+ #ifdef VERIFY_DEBUG
+ static void 
+ debug_print_state (state *s, const char *leader, int pc, int max_stack, 
+ 		   int max_locals)
+ {
+   int i;
+   debug_print ("%s [%4d]:   [stack] ", leader, pc);
+   for (i = 0; i < s->stacktop; ++i)
+     type_print (&s->stack[i]);
+   for (; i < max_stack; ++i)
+     debug_print (".");
+   debug_print ("    [local] ");
+   for (i = 0; i < max_locals; ++i)
+     type_print (&s->locals[i]);
+   debug_print (" | %p\n", s);
+ }
+ #else
+ static void
+ debug_print_state (state *s ATTRIBUTE_UNUSED, 
+ 		   const char *leader ATTRIBUTE_UNUSED, 
+ 		   int pc ATTRIBUTE_UNUSED, int max_stack ATTRIBUTE_UNUSED, 
+ 		   int max_locals ATTRIBUTE_UNUSED)
+ {
+ }
+ #endif /* VERIFY_DEBUG */
+ 
+ static type
+ pop_raw (void)
+ {
+   type r;
+   state *s = vfr->current_state;
+   if (s->stacktop <= 0)
+     verify_fail ("stack empty");
+   r = s->stack[--s->stacktop];
+   s->stackdepth -= type_depth (&r);
+   if (s->stackdepth < 0)
+     verify_fail_pc ("stack empty", vfr->start_PC);
+   return r;
+ }
+ 
+ static type
+ pop32 (void)
+ {
+   type r = pop_raw ();
+   if (type_iswide (&r))
+     verify_fail ("narrow pop of wide type");
+   return r;
+ }
+ 
+ static type
+ vfy_pop_type_t (type match)
+ {
+   type t;
+   vfy_promote_type (&match);
+   t = pop_raw ();
+   if (! types_compatible (&match, &t))
+     verify_fail ("incompatible type on stack");
+   return t;
+ }
+ 
+ static type
+ vfy_pop_type (type_val match)
+ {
+   type t = make_type (match);
+   return vfy_pop_type_t (t);
+ }
+ 
+ #define pop_type vfy_pop_type
+ #define pop_type_t vfy_pop_type_t
+ 
+ /* Pop a reference which is guaranteed to be initialized.  MATCH
+    doesn't have to be a reference type; in this case this acts like
+    pop_type.  */
+ static type
+ pop_init_ref_t (type match)
+ {
+   type t = pop_raw ();
+   if (type_isreference (&t) && ! type_initialized (&t))
+     verify_fail ("initialized reference required");
+   else if (! types_compatible (&match, &t))
+     verify_fail ("incompatible type on stack");
+   return t;
+ }
+ 
+ static type
+ pop_init_ref (type_val match)
+ {
+   type t = make_type (match);
+   return pop_init_ref_t (t);
+ }
+ 
+ /* Pop a reference type or a return address.  */
+ static type
+ pop_ref_or_return (void)
+ {
+   type t = pop_raw ();
+   if (! type_isreference (&t) && t.key != return_address_type)
+     verify_fail ("expected reference or return address on stack");
+   return t;
+ }
+ 
+ static void
+ vfy_push_type_t (type t)
+ {
+   int depth;
+   state *s = vfr->current_state;
+   /* If T is a numeric type like short, promote it to int.  */
+   promote_type (&t);
+ 
+   depth = type_depth (&t);
+ 
+   if (s->stackdepth + depth > vfr->current_method->max_stack)
+     verify_fail ("stack overflow");
+   s->stack[s->stacktop++] = t;
+   s->stackdepth += depth;
+ }
+ 
+ static void
+ vfy_push_type (type_val tval)
+ {
+   type t = make_type (tval);
+   vfy_push_type_t (t);
+ }
+ 
+ #define push_type vfy_push_type
+ #define push_type_t vfy_push_type_t
+ 
+ static void
+ set_variable (int index, type t)
+ {
+   int depth;
+   state *s = vfr->current_state;
+   /* If T is a numeric type like short, promote it to int.  */
+   promote_type (&t);
+ 
+   depth = type_depth (&t);
+   if (index > vfr->current_method->max_locals - depth)
+     verify_fail ("invalid local variable");
+   s->locals[index] = t;
+ 
+   if (depth == 2)
+     init_type_from_tag (&s->locals[index + 1], continuation_type);
+   if (index > 0 && type_iswide (&s->locals[index - 1]))
+     init_type_from_tag (&s->locals[index - 1], unsuitable_type);
+ }
+ 
+ static type
+ get_variable_t (int index, type *t)
+ {
+   state *s = vfr->current_state;
+   int depth = type_depth (t);
+   if (index > vfr->current_method->max_locals - depth)
+     verify_fail ("invalid local variable");
+   if (! types_compatible (t, &s->locals[index]))
+     verify_fail ("incompatible type in local variable");
+   if (depth == 2)
+     {
+       type cont = make_type (continuation_type);
+       if (! types_compatible (&s->locals[index + 1], &cont))
+ 	verify_fail ("invalid local variable");
+     }
+   return s->locals[index];
+ }
+ 
+ static type
+ get_variable (int index, type_val v)
+ {
+   type t = make_type (v);
+   return get_variable_t (index, &t);
+ }
+ 
+ /* Make sure ARRAY is an array type and that its elements are
+    compatible with type ELEMENT.  Returns the actual element type.  */
+ static type
+ require_array_type_t (type array, type element)
+ {
+   type t;
+   /* An odd case.  Here we just pretend that everything went ok.  If
+      the requested element type is some kind of reference, return
+      the null type instead.  */
+   if (type_isnull (&array))
+     return type_isreference (&element) ? make_type (null_type) : element;
+ 
+   if (! type_isarray (&array))
+     verify_fail ("array required");
+ 
+   t = type_array_element (&array);
+   if (! types_compatible (&element, &t))
+     {
+       /* Special case for byte arrays, which must also be boolean
+          arrays.  */
+       bool ok = true;
+       if (element.key == byte_type)
+ 	{
+ 	  type e2 = make_type (boolean_type);
+ 	  ok = types_compatible (&e2, &t);
+ 	}
+       if (! ok)
+ 	verify_fail ("incompatible array element type");
+     }
+ 
+   /* Return T and not ELEMENT, because T might be specialized.  */
+   return t;
+ }
+ 
+ static type
+ require_array_type (type array, type_val element)
+ {
+   type t = make_type (element);
+   return require_array_type_t (array, t);
+ }
+ 
+ static jint
+ get_byte (void)
+ {
+   if (vfr->PC >= vfr->current_method->code_length)
+     verify_fail ("premature end of bytecode");
+   return (jint) vfr->bytecode[vfr->PC++] & 0xff;
+ }
+ 
+ static jint
+ get_ushort (void)
+ {
+   jint b1 = get_byte ();
+   jint b2 = get_byte ();
+   return (jint) ((b1 << 8) | b2) & 0xffff;
+ }
+ 
+ static jint
+ get_short (void)
+ {
+   signed char b1 = (signed char) get_byte ();
+   jint b2 = get_byte ();
+   jshort s = (b1 << 8) | b2;
+   return (jint) s;
+ }
+ 
+ static jint
+ get_int (void)
+ {
+   jint b1 = get_byte ();
+   jint b2 = get_byte ();
+   jint b3 = get_byte ();
+   jint b4 = get_byte ();
+   jword result = (b1 << 24) | (b2 << 16) | (b3 << 8) | b4;
+   /* In the compiler, 'jint' might have more than 32 bits, so we must
+      sign extend.  */
+   return WORD_TO_INT (result);
+ }
+ 
+ static int
+ compute_jump (int offset)
+ {
+   int npc = vfr->start_PC + offset;
+   if (npc < 0 || npc >= vfr->current_method->code_length)
+     verify_fail_pc ("branch out of range", vfr->start_PC);
+   return npc;
+ }
+ 
+ /* Add a new state to the state list at NPC.  */
+ static state *
+ add_new_state (int npc, state *old_state)
+ {
+   state_list *nlink;
+   vfy_method *current_method = vfr->current_method;
+   state *new_state = make_state_copy (old_state, current_method->max_stack,
+ 				      current_method->max_locals);
+   debug_print ("== New state in add_new_state\n");
+   debug_print_state (new_state, "New", npc, current_method->max_stack,
+ 		    current_method->max_locals);
+ 
+   nlink = vfy_alloc (sizeof (state_list));
+   nlink->val = new_state;
+   nlink->next = vfr->states[npc];
+   vfr->states[npc] = nlink;
+   new_state->pc = npc;
+   return new_state;
+ }
+ 
+ /* Merge the indicated state into the state at the branch target and
+    schedule a new PC if there is a change.  NPC is the PC of the
+    branch target, and FROM_STATE is the state at the source of the
+    branch.  This method returns true if the destination state
+    changed and requires reverification, false otherwise.  */
+ static void
+ merge_into (int npc, state *from_state)
+ {
+   /* Iterate over all target states and merge our state into each,
+      if applicable.  FIXME one improvement we could make here is
+      "state destruction".  Merging a new state into an existing one
+      might cause a return_address_type to be merged to
+      unsuitable_type.  In this case the resulting state may now be
+      mergeable with other states currently held in parallel at this
+      location.  So in this situation we could pairwise compare and
+      reduce the number of parallel states.  */
+   state_list *iter;
+   bool applicable = false;
+   for (iter = vfr->states[npc]; iter != NULL; iter = iter->next)
+     {
+       state *new_state = iter->val;
+       vfy_method *current_method = vfr->current_method;
+ 
+       if (state_mergeable_p (new_state, from_state,
+ 					current_method->max_locals))
+ 	{
+ 	  bool changed;
+ 	  applicable = true;
+ 
+ 	  debug_print ("== Merge states in merge_into\n");
+ 	  debug_print_state (from_state, "Frm", vfr->start_PC, current_method->max_stack,
+ 			     current_method->max_locals);
+ 	  debug_print_state (new_state, " To", npc, current_method->max_stack,
+ 			    current_method->max_locals);
+ 	  changed = merge_states (new_state, from_state,
+ 				  current_method->max_locals);
+ 	  debug_print_state (new_state, "New", npc, current_method->max_stack,
+ 			    current_method->max_locals);
+ 
+ 	  if (changed)
+ 	    state_reverify (new_state);
+ 	}
+     }
+ 
+   if (! applicable)
+     {
+       /* Either we don't yet have a state at NPC, or we have a
+          return-address type that is in conflict with all existing
+          state.  So, we need to create a new entry.  */
+       state *new_state = add_new_state (npc, from_state);
+       /* A new state added in this way must always be reverified.  */
+       state_reverify (new_state);
+     }
+ }
+ 
+ static void
+ push_jump (int offset)
+ {
+   int npc = compute_jump (offset);
+   /* According to the JVM Spec, we need to check for uninitialized
+      objects here.  However, this does not actually affect type
+      safety, and the Eclipse java compiler generates code that
+      violates this constraint.  */
+   merge_into (npc, vfr->current_state);
+ }
+ 
+ static void
+ push_exception_jump (type t, int pc)
+ {
+   state s;
+   /* According to the JVM Spec, we need to check for uninitialized
+      objects here.  However, this does not actually affect type
+      safety, and the Eclipse java compiler generates code that
+      violates this constraint.  */
+   copy_state_with_stack (&s, vfr->current_state, 
+ 			 vfr->current_method->max_stack,
+ 			 vfr->current_method->max_locals);
+   if (vfr->current_method->max_stack < 1)
+     verify_fail ("stack overflow at exception handler");
+   state_set_exception (&s, &t, vfr->current_method->max_stack);
+   merge_into (pc, &s);
+   /* FIXME: leak.. need free_state or GC */
+ }
+ 
+ static state *
+ pop_jump (void)
+ {
+   state *new_state = vfr->next_verify_state;
+   if (new_state == INVALID_STATE)
+     verify_fail ("programmer error in pop_jump");
+   if (new_state != NULL)
+     {
+       vfr->next_verify_state = new_state->next;
+       new_state->next = INVALID_STATE;
+     }
+   return new_state;
+ }
+ 
+ static void
+ invalidate_pc (void)
+ {
+   vfr->PC = NO_NEXT;
+ }
+ 
+ static void
+ note_branch_target (int pc)
+ {
+   /* Don't check `pc <= PC', because we've advanced PC after
+      fetching the target and we haven't yet checked the next
+      instruction.  */
+   if (pc < vfr->PC && ! (vfr->flags[pc] & FLAG_INSN_START))
+     verify_fail_pc ("branch not to instruction start", vfr->start_PC);
+   vfr->flags[pc] |= FLAG_BRANCH_TARGET;
+ }
+ 
+ static void
+ skip_padding (void)
+ {
+   while ((vfr->PC % 4) > 0)
+     if (get_byte () != 0)
+       verify_fail ("found nonzero padding byte");
+ }
+ 
+ /* Do the work for a `ret' instruction.  INDEX is the index into the
+    local variables.  */
+ static void
+ handle_ret_insn (int index)
+ {
+   type ret = make_type (return_address_type);
+   type ret_addr = get_variable_t (index, &ret);
+   /* It would be nice if we could do this.  However, the JVM Spec
+      doesn't say that this is what happens.  It is implied that
+      reusing a return address is invalid, but there's no actual
+      prohibition against it.  */
+   /* set_variable (index, unsuitable_type); */
+ 
+   int npc = type_get_pc (&ret_addr);
+   /* We might be returning to a `jsr' that is at the end of the
+      bytecode.  This is ok if we never return from the called
+      subroutine, but if we see this here it is an error.  */
+   if (npc >= vfr->current_method->code_length)
+     verify_fail ("fell off end");
+ 
+   /* According to the JVM Spec, we need to check for uninitialized
+      objects here.  However, this does not actually affect type
+      safety, and the Eclipse java compiler generates code that
+      violates this constraint.  */
+   merge_into (npc, vfr->current_state);
+   invalidate_pc ();
+ }
+ 
+ static void handle_jsr_insn (int offset)
+ {
+   type ret_addr;
+   int npc = compute_jump (offset);
+ 
+   /* According to the JVM Spec, we need to check for uninitialized
+      objects here.  However, this does not actually affect type
+      safety, and the Eclipse java compiler generates code that
+      violates this constraint.  */
+ 
+   /* Modify our state as appropriate for entry into a subroutine.  */
+   ret_addr = make_type (return_address_type);
+   type_set_return_address (&ret_addr, vfr->PC);
+   vfy_push_type_t (ret_addr);
+   merge_into (npc, vfr->current_state);
+   invalidate_pc ();
+ }
+ 
+ static vfy_jclass
+ construct_primitive_array_type (type_val prim)
+ {
+   vfy_jclass k = NULL;
+   switch (prim)
+     {
+     case boolean_type:
+     case char_type:
+     case float_type:
+     case double_type:
+     case byte_type:
+     case short_type:
+     case int_type:
+     case long_type:
+       k = vfy_get_primitive_type ((int) prim);
+       break;
+ 
+     /* These aren't used here but we call them out to avoid
+        warnings.  */
+     case void_type:
+     case unsuitable_type:
+     case return_address_type:
+     case continuation_type:
+     case reference_type:
+     case null_type:
+     case uninitialized_reference_type:
+     default:
+       verify_fail ("unknown type in construct_primitive_array_type");
+     }
+   k = vfy_get_array_class (k);
+   return k;
+ }
+ 
+ /* This pass computes the location of branch targets and also
+    instruction starts.  */
+ static void
+ branch_prepass (void)
+ {
+   int i, pc;
+   vfr->flags = (char *) vfy_alloc (vfr->current_method->code_length);
+ 
+   for (i = 0; i < vfr->current_method->code_length; ++i)
+     vfr->flags[i] = 0;
+ 
+   vfr->PC = 0;
+   while (vfr->PC < vfr->current_method->code_length)
+     {
+       java_opcode opcode;
+       /* Set `start_PC' early so that error checking can have the
+          correct value.  */
+       vfr->start_PC = vfr->PC;
+       vfr->flags[vfr->PC] |= FLAG_INSN_START;
+ 
+       opcode = (java_opcode) vfr->bytecode[vfr->PC++];
+       switch (opcode)
+ 	{
+ 	case op_nop:
+ 	case op_aconst_null:
+ 	case op_iconst_m1:
+ 	case op_iconst_0:
+ 	case op_iconst_1:
+ 	case op_iconst_2:
+ 	case op_iconst_3:
+ 	case op_iconst_4:
+ 	case op_iconst_5:
+ 	case op_lconst_0:
+ 	case op_lconst_1:
+ 	case op_fconst_0:
+ 	case op_fconst_1:
+ 	case op_fconst_2:
+ 	case op_dconst_0:
+ 	case op_dconst_1:
+ 	case op_iload_0:
+ 	case op_iload_1:
+ 	case op_iload_2:
+ 	case op_iload_3:
+ 	case op_lload_0:
+ 	case op_lload_1:
+ 	case op_lload_2:
+ 	case op_lload_3:
+ 	case op_fload_0:
+ 	case op_fload_1:
+ 	case op_fload_2:
+ 	case op_fload_3:
+ 	case op_dload_0:
+ 	case op_dload_1:
+ 	case op_dload_2:
+ 	case op_dload_3:
+ 	case op_aload_0:
+ 	case op_aload_1:
+ 	case op_aload_2:
+ 	case op_aload_3:
+ 	case op_iaload:
+ 	case op_laload:
+ 	case op_faload:
+ 	case op_daload:
+ 	case op_aaload:
+ 	case op_baload:
+ 	case op_caload:
+ 	case op_saload:
+ 	case op_istore_0:
+ 	case op_istore_1:
+ 	case op_istore_2:
+ 	case op_istore_3:
+ 	case op_lstore_0:
+ 	case op_lstore_1:
+ 	case op_lstore_2:
+ 	case op_lstore_3:
+ 	case op_fstore_0:
+ 	case op_fstore_1:
+ 	case op_fstore_2:
+ 	case op_fstore_3:
+ 	case op_dstore_0:
+ 	case op_dstore_1:
+ 	case op_dstore_2:
+ 	case op_dstore_3:
+ 	case op_astore_0:
+ 	case op_astore_1:
+ 	case op_astore_2:
+ 	case op_astore_3:
+ 	case op_iastore:
+ 	case op_lastore:
+ 	case op_fastore:
+ 	case op_dastore:
+ 	case op_aastore:
+ 	case op_bastore:
+ 	case op_castore:
+ 	case op_sastore:
+ 	case op_pop:
+ 	case op_pop2:
+ 	case op_dup:
+ 	case op_dup_x1:
+ 	case op_dup_x2:
+ 	case op_dup2:
+ 	case op_dup2_x1:
+ 	case op_dup2_x2:
+ 	case op_swap:
+ 	case op_iadd:
+ 	case op_isub:
+ 	case op_imul:
+ 	case op_idiv:
+ 	case op_irem:
+ 	case op_ishl:
+ 	case op_ishr:
+ 	case op_iushr:
+ 	case op_iand:
+ 	case op_ior:
+ 	case op_ixor:
+ 	case op_ladd:
+ 	case op_lsub:
+ 	case op_lmul:
+ 	case op_ldiv:
+ 	case op_lrem:
+ 	case op_lshl:
+ 	case op_lshr:
+ 	case op_lushr:
+ 	case op_land:
+ 	case op_lor:
+ 	case op_lxor:
+ 	case op_fadd:
+ 	case op_fsub:
+ 	case op_fmul:
+ 	case op_fdiv:
+ 	case op_frem:
+ 	case op_dadd:
+ 	case op_dsub:
+ 	case op_dmul:
+ 	case op_ddiv:
+ 	case op_drem:
+ 	case op_ineg:
+ 	case op_i2b:
+ 	case op_i2c:
+ 	case op_i2s:
+ 	case op_lneg:
+ 	case op_fneg:
+ 	case op_dneg:
+ 	case op_i2l:
+ 	case op_i2f:
+ 	case op_i2d:
+ 	case op_l2i:
+ 	case op_l2f:
+ 	case op_l2d:
+ 	case op_f2i:
+ 	case op_f2l:
+ 	case op_f2d:
+ 	case op_d2i:
+ 	case op_d2l:
+ 	case op_d2f:
+ 	case op_lcmp:
+ 	case op_fcmpl:
+ 	case op_fcmpg:
+ 	case op_dcmpl:
+ 	case op_dcmpg:
+ 	case op_monitorenter:
+ 	case op_monitorexit:
+ 	case op_ireturn:
+ 	case op_lreturn:
+ 	case op_freturn:
+ 	case op_dreturn:
+ 	case op_areturn:
+ 	case op_return:
+ 	case op_athrow:
+ 	case op_arraylength:
+ 	  break;
+ 
+ 	case op_bipush:
+ 	case op_ldc:
+ 	case op_iload:
+ 	case op_lload:
+ 	case op_fload:
+ 	case op_dload:
+ 	case op_aload:
+ 	case op_istore:
+ 	case op_lstore:
+ 	case op_fstore:
+ 	case op_dstore:
+ 	case op_astore:
+ 	case op_ret:
+ 	case op_newarray:
+ 	  get_byte ();
+ 	  break;
+ 
+ 	case op_iinc:
+ 	case op_sipush:
+ 	case op_ldc_w:
+ 	case op_ldc2_w:
+ 	case op_getstatic:
+ 	case op_getfield:
+ 	case op_putfield:
+ 	case op_putstatic:
+ 	case op_new:
+ 	case op_anewarray:
+ 	case op_instanceof:
+ 	case op_checkcast:
+ 	case op_invokespecial:
+ 	case op_invokestatic:
+ 	case op_invokevirtual:
+ 	  get_short ();
+ 	  break;
+ 
+ 	case op_multianewarray:
+ 	  get_short ();
+ 	  get_byte ();
+ 	  break;
+ 
+ 	case op_jsr:
+ 	case op_ifeq:
+ 	case op_ifne:
+ 	case op_iflt:
+ 	case op_ifge:
+ 	case op_ifgt:
+ 	case op_ifle:
+ 	case op_if_icmpeq:
+ 	case op_if_icmpne:
+ 	case op_if_icmplt:
+ 	case op_if_icmpge:
+ 	case op_if_icmpgt:
+ 	case op_if_icmple:
+ 	case op_if_acmpeq:
+ 	case op_if_acmpne:
+ 	case op_ifnull:
+ 	case op_ifnonnull:
+ 	case op_goto:
+ 	  note_branch_target (compute_jump (get_short ()));
+ 	  break;
+ 
+ 	case op_tableswitch:
+ 	  {
+ 	    jint low, hi;
+ 	    skip_padding ();
+ 	    note_branch_target (compute_jump (get_int ()));
+ 	    low = get_int ();
+ 	    hi = get_int ();
+ 	    if (low > hi)
+ 	      verify_fail_pc ("invalid tableswitch", vfr->start_PC);
+ 	    for (i = low; i <= hi; ++i)
+ 	      note_branch_target (compute_jump (get_int ()));
+ 	  }
+ 	  break;
+ 
+ 	case op_lookupswitch:
+ 	  {
+ 	    int npairs;
+ 	    skip_padding ();
+ 	    note_branch_target (compute_jump (get_int ()));
+ 	    npairs = get_int ();
+ 	    if (npairs < 0)
+ 	      verify_fail_pc ("too few pairs in lookupswitch", vfr->start_PC);
+ 	    while (npairs-- > 0)
+ 	      {
+ 		get_int ();
+ 		note_branch_target (compute_jump (get_int ()));
+ 	      }
+ 	  }
+ 	  break;
+ 
+ 	case op_invokeinterface:
+ 	  get_short ();
+ 	  get_byte ();
+ 	  get_byte ();
+ 	  break;
+ 
+ 	case op_wide:
+ 	  {
+ 	    opcode = (java_opcode) get_byte ();
+ 	    get_short ();
+ 	    if (opcode == op_iinc)
+ 	      get_short ();
+ 	  }
+ 	  break;
+ 
+ 	case op_jsr_w:
+ 	case op_goto_w:
+ 	  note_branch_target (compute_jump (get_int ()));
+ 	  break;
+ 
+ #if 0
+ 	/* These are unused here, but we call them out explicitly
+ 	   so that -Wswitch-enum doesn't complain.  */
+ 	case op_putfield_1:
+ 	case op_putfield_2:
+ 	case op_putfield_4:
+ 	case op_putfield_8:
+ 	case op_putfield_a:
+ 	case op_putstatic_1:
+ 	case op_putstatic_2:
+ 	case op_putstatic_4:
+ 	case op_putstatic_8:
+ 	case op_putstatic_a:
+ 	case op_getfield_1:
+ 	case op_getfield_2s:
+ 	case op_getfield_2u:
+ 	case op_getfield_4:
+ 	case op_getfield_8:
+ 	case op_getfield_a:
+ 	case op_getstatic_1:
+ 	case op_getstatic_2s:
+ 	case op_getstatic_2u:
+ 	case op_getstatic_4:
+ 	case op_getstatic_8:
+ 	case op_getstatic_a:
+ #endif /* VFY_FAST_OPCODES  */
+ 	default:
+ 	  verify_fail_pc ("unrecognized instruction in branch_prepass",
+ 			  vfr->start_PC);
+ 	}
+ 
+       /* See if any previous branch tried to branch to the middle of
+          this instruction.  */
+       for (pc = vfr->start_PC + 1; pc < vfr->PC; ++pc)
+ 	{
+ 	  if ((vfr->flags[pc] & FLAG_BRANCH_TARGET))
+ 	    verify_fail_pc ("branch to middle of instruction", pc);
+ 	}
+     }
+ 
+   /* Verify exception handlers.  */
+   for (i = 0; i < vfr->current_method->exc_count; ++i)
+     {
+       int handler, start, end, htype;
+       vfy_get_exception (vfr->exception, i, &handler, &start, &end, &htype);
+       if (! (vfr->flags[handler] & FLAG_INSN_START))
+ 	verify_fail_pc ("exception handler not at instruction start", 
+ 			handler);
+       if (! (vfr->flags[start] & FLAG_INSN_START))
+ 	verify_fail_pc ("exception start not at instruction start", start);
+       if (end != vfr->current_method->code_length
+ 	  && ! (vfr->flags[end] & FLAG_INSN_START))
+ 	verify_fail_pc ("exception end not at instruction start", end);
+ 
+       vfr->flags[handler] |= FLAG_BRANCH_TARGET;
+     }
+ }
+ 
+ static void
+ check_pool_index (int index)
+ {
+   if (index < 0 || index >= vfy_get_constants_size (vfr->current_class))
+     verify_fail_pc ("constant pool index out of range", vfr->start_PC);
+ }
+ 
+ static type
+ check_class_constant (int index)
+ {
+   type t;
+   vfy_constants *pool;
+ 
+   check_pool_index (index);
+   pool = vfy_get_constants (vfr->current_class);
+   if (vfy_tag (pool, index) == JV_CONSTANT_ResolvedClass)
+     init_type_from_class (&t, vfy_get_pool_class (pool, index));
+   else if (vfy_tag (pool, index) == JV_CONSTANT_Class)
+     init_type_from_string (&t, vfy_get_pool_string (pool, index));
+   else
+     verify_fail_pc ("expected class constant", vfr->start_PC);      
+   return t;
+ }
+ 
+ static type
+ check_constant (int index)
+ {
+   type t;
+   vfy_constants *pool;
+ 
+   check_pool_index (index);
+   pool = vfy_get_constants (vfr->current_class);
+   if (vfy_tag (pool, index) == JV_CONSTANT_ResolvedString
+       || vfy_tag (pool, index) == JV_CONSTANT_String)
+     init_type_from_class (&t, vfy_string_type ());
+   else if (vfy_tag (pool, index) == JV_CONSTANT_Integer)
+     init_type_from_tag (&t, int_type);
+   else if (vfy_tag (pool, index) == JV_CONSTANT_Float)
+     init_type_from_tag (&t, float_type);
+   else
+     verify_fail_pc ("String, int, or float constant expected", vfr->start_PC);
+   return t;
+ }
+ 
+ static type
+ check_wide_constant (int index)
+ {
+   type t;
+   vfy_constants *pool;
+ 
+   check_pool_index (index);
+   pool = vfy_get_constants (vfr->current_class);
+   if (vfy_tag (pool, index) == JV_CONSTANT_Long)
+     init_type_from_tag (&t, long_type);
+   else if (vfy_tag (pool, index) == JV_CONSTANT_Double)
+     init_type_from_tag (&t, double_type);
+   else
+     verify_fail_pc ("long or double constant expected", vfr->start_PC);
+   return t;
+ }
+ 
+ /* Helper for both field and method.  These are laid out the same in
+    the constant pool.  */
+ static type
+ handle_field_or_method (int index, int expected,
+ 			vfy_string *name, vfy_string *fmtype)
+ {
+   vfy_uint_16 class_index, name_and_type_index;
+   vfy_uint_16 name_index, desc_index;
+   vfy_constants *pool;
+ 
+   check_pool_index (index);
+   pool = vfy_get_constants (vfr->current_class);
+   if (vfy_tag (pool, index) != expected)
+     verify_fail_pc ("didn't see expected constant", vfr->start_PC);
+   /* Once we know we have a Fieldref or Methodref we assume that it
+      is correctly laid out in the constant pool.  I think the code
+      in defineclass.cc guarantees this.  */
+   vfy_load_indexes (pool, index, &class_index, &name_and_type_index);
+   vfy_load_indexes (pool, name_and_type_index, &name_index, &desc_index);
+ 
+   *name = vfy_get_pool_string (pool, name_index);
+   *fmtype = vfy_get_pool_string (pool, desc_index);
+ 
+   return check_class_constant (class_index);
+ }
+ 
+ /* Return field's type, compute class' type if requested.  If
+    PUTFIELD is true, use the special 'putfield' semantics.  */
+ static type
+ check_field_constant (int index, type *class_type, bool putfield)
+ {
+   vfy_string name, field_type;
+   const char *typec;
+   int len;
+   type t;
+ 
+   type ct = handle_field_or_method (index,
+ 				    JV_CONSTANT_Fieldref,
+ 				    &name, &field_type);
+   if (class_type)
+     *class_type = ct;
+   typec = vfy_string_bytes (field_type);
+   len = vfy_string_length (field_type);
+   if (typec[0] == '[' || typec[0] == 'L')
+     init_type_from_string (&t, field_type);
+   else
+     init_type_from_tag (&t, get_type_val_for_signature (typec[0]));
+ 
+   /* We have an obscure special case here: we can use `putfield' on a
+      field declared in this class, even if `this' has not yet been
+      initialized.  */
+   if (putfield
+       && ! type_initialized (&vfr->current_state->this_type)
+       && vfr->current_state->this_type.pc == SELF
+       && types_equal (&vfr->current_state->this_type, &ct)
+       && vfy_class_has_field (vfr->current_class, name, field_type))
+     /* Note that we don't actually know whether we're going to match
+        against 'this' or some other object of the same type.  So,
+        here we set things up so that it doesn't matter.  This relies
+        on knowing what our caller is up to.  */
+     type_set_uninitialized (class_type, EITHER);
+ 
+   return t;
+ }
+ 
+ static type
+ check_method_constant (int index, bool is_interface,
+ 			    vfy_string *method_name,
+ 			    vfy_string *method_signature)
+ {
+   return handle_field_or_method (index,
+ 				 (is_interface
+ 				  ? JV_CONSTANT_InterfaceMethodref
+ 				  : JV_CONSTANT_Methodref),
+ 				 method_name, method_signature);
+ }
+ 
+ static char *
+ get_one_type (char *p, type *t)
+ {
+   const char *start = p;
+   vfy_jclass k;
+   type_val rt;
+   char v;
+ 
+   int arraycount = 0;
+   while (*p == '[')
+     {
+       ++arraycount;
+       ++p;
+     }
+ 
+   v = *p++;
+ 
+   if (v == 'L')
+     {
+       vfy_string name;
+       while (*p != ';')
+ 	++p;
+       ++p;
+       name = vfy_get_string (start, p - start);
+       *t = make_type_from_string (name);
+       return p;
+     }
+ 
+   /* Casting to jchar here is ok since we are looking at an ASCII
+      character.  */
+   rt = get_type_val_for_signature (v);
+ 
+   if (arraycount == 0)
+     {
+       /* Callers of this function eventually push their arguments on
+          the stack.  So, promote them here.  */
+       type new_t = make_type (rt);
+       vfy_promote_type (&new_t);
+       *t = new_t;
+       return p;
+     }
+ 
+   k = construct_primitive_array_type (rt);
+   while (--arraycount > 0)
+     k = vfy_get_array_class (k);
+   *t = make_type_from_class (k);
+   return p;
+ }
+ 
+ static void 
+ compute_argument_types (vfy_string signature, type *types)
+ {
+   int i;
+   char *p = (char *) vfy_string_bytes (signature);
+ 
+   /* Skip `('.  */
+   ++p;
+ 
+   i = 0;
+   while (*p != ')')
+     p = get_one_type (p, &types[i++]);
+ }
+ 
+ static type
+ compute_return_type (vfy_string signature)
+ {
+   char *p = (char *) vfy_string_bytes (signature);
+   type t;
+   while (*p != ')')
+     ++p;
+   ++p;
+   get_one_type (p, &t);
+   return t;
+ }
+ 
+ static void
+ check_return_type (type onstack)
+ {
+   type rt = compute_return_type (vfy_get_signature (vfr->current_method));
+   if (! types_compatible (&rt, &onstack))
+     verify_fail ("incompatible return type");
+ }
+ 
+ /* Initialize the stack for the new method.  Returns true if this
+    method is an instance initializer.  */
+ static bool
+ initialize_stack (void)
+ {
+   int arg_count, i;
+   int var = 0;
+   bool is_init = vfy_strings_equal (vfy_get_method_name (vfr->current_method),
+ 				    vfy_init_name());
+   bool is_clinit = vfy_strings_equal (vfy_get_method_name (vfr->current_method),
+ 				      vfy_clinit_name());
+ 
+   if (! vfy_is_static (vfr->current_method))
+     {
+       type kurr = make_type_from_class (vfr->current_class);
+       if (is_init)
+ 	{
+ 	  type_set_uninitialized (&kurr, SELF);
+ 	  is_init = true;
+ 	}
+       else if (is_clinit)
+ 	verify_fail ("<clinit> method must be static");
+       set_variable (0, kurr);
+       state_set_this_type (vfr->current_state, &kurr);
+       ++var;
+     }
+   else
+     {
+       if (is_init)
+ 	verify_fail ("<init> method must be non-static");
+     }
+ 
+   /* We have to handle wide arguments specially here.  */
+   arg_count = vfy_count_arguments (vfy_get_signature (vfr->current_method));
+   {
+     type *arg_types = (type *) vfy_alloc (arg_count * sizeof (type));
+     compute_argument_types (vfy_get_signature (vfr->current_method), arg_types);
+     for (i = 0; i < arg_count; ++i)
+       {
+ 	set_variable (var, arg_types[i]);
+ 	++var;
+ 	if (type_iswide (&arg_types[i]))
+ 	  ++var;
+       }
+     vfy_free (arg_types);
+   }
+ 
+   return is_init;
+ }
+ 
+ static void
+ verify_instructions_0 (void)
+ {
+   int i;
+   bool this_is_init;
+ 
+   vfr->current_state = make_state (vfr->current_method->max_stack,
+ 				   vfr->current_method->max_locals);
+ 
+   vfr->PC = 0;
+   vfr->start_PC = 0;
+ 
+   /*  True if we are verifying an instance initializer.  */
+   this_is_init = initialize_stack ();
+ 
+   vfr->states = (state_list **) vfy_alloc (sizeof (state_list *)
+ 				      * vfr->current_method->code_length);
+ 
+   for (i = 0; i < vfr->current_method->code_length; ++i)
+     vfr->states[i] = NULL;
+ 
+   vfr->next_verify_state = NULL;
+ 
+   while (true)
+     {
+       java_opcode opcode;
+ 
+       /* If the PC was invalidated, get a new one from the work list.  */
+       if (vfr->PC == NO_NEXT)
+ 	{
+ 	  state *new_state = pop_jump ();
+ 	  /* If it is null, we're done.  */
+ 	  if (new_state == NULL)
+ 	    break;
+ 
+ 	  vfr->PC = new_state->pc;
+ 	  debug_print ("== State pop from pending list\n");
+ 	  /* Set up the current state.  */
+ 	  copy_state (vfr->current_state, new_state, 
+ 	    vfr->current_method->max_stack, vfr->current_method->max_locals);
+ 	}
+       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
+ 	         efficient, to just always invalidate the PC here.  */
+ 	      merge_into (vfr->PC, vfr->current_state);
+ 	      invalidate_pc ();
+ 	      continue;
+ 	    }
+ 	}
+ 
+       /* Control can't fall off the end of the bytecode.  We need to
+          check this in both cases, not just the fall-through case,
+          because we don't check to see whether a `jsr' appears at
+          the end of the bytecode until we process a `ret'.  */
+       if (vfr->PC >= vfr->current_method->code_length)
+ 	verify_fail ("fell off end");
+       vfr->flags[vfr->PC] |= FLAG_INSN_SEEN;
+ 
+       /* We only have to keep saved state at branch targets.  If
+          we're at a branch target and the state here hasn't been set
+          yet, we set it now.  You might notice that `ret' targets
+          won't necessarily have FLAG_BRANCH_TARGET set.  This
+          doesn't matter, since those states will be filled in by
+          merge_into.  */
+       /* Note that other parts of the compiler assume that there is a
+ 	 label with a type map at PC=0.  */
+       if (vfr->states[vfr->PC] == NULL
+ 	  && (vfr->PC == 0 || (vfr->flags[vfr->PC] & FLAG_BRANCH_TARGET) != 0))
+ 	add_new_state (vfr->PC, vfr->current_state);
+ 
+       /* Set this before handling exceptions so that debug output is
+          sane.  */
+       vfr->start_PC = vfr->PC;
+ 
+       /* Update states for all active exception handlers.  Ordinarily
+          there are not many exception handlers.  So we simply run
+          through them all.  */
+       for (i = 0; i < vfr->current_method->exc_count; ++i)
+ 	{
+ 	  int hpc, start, end, htype;
+ 	  vfy_get_exception (vfr->exception, i, &hpc, &start, &end, &htype);
+ 	  if (vfr->PC >= start && vfr->PC < end)
+ 	    {
+ 	      type handler = make_type_from_class (vfy_throwable_type ());
+ 	      if (htype != 0)
+ 		handler = check_class_constant (htype);
+ 	      push_exception_jump (handler, hpc);
+ 	    }
+ 	}
+ 
+ 
+       debug_print_state (vfr->current_state, "   ", vfr->PC, 
+ 			 vfr->current_method->max_stack,
+ 			 vfr->current_method->max_locals);
+       opcode = (java_opcode) vfr->bytecode[vfr->PC++];
+       switch (opcode)
+ 	{
+ 	case op_nop:
+ 	  break;
+ 
+ 	case op_aconst_null:
+ 	  push_type (null_type);
+ 	  break;
+ 
+ 	case op_iconst_m1:
+ 	case op_iconst_0:
+ 	case op_iconst_1:
+ 	case op_iconst_2:
+ 	case op_iconst_3:
+ 	case op_iconst_4:
+ 	case op_iconst_5:
+ 	  push_type (int_type);
+ 	  break;
+ 
+ 	case op_lconst_0:
+ 	case op_lconst_1:
+ 	  push_type (long_type);
+ 	  break;
+ 
+ 	case op_fconst_0:
+ 	case op_fconst_1:
+ 	case op_fconst_2:
+ 	  push_type (float_type);
+ 	  break;
+ 
+ 	case op_dconst_0:
+ 	case op_dconst_1:
+ 	  push_type (double_type);
+ 	  break;
+ 
+ 	case op_bipush:
+ 	  get_byte ();
+ 	  push_type (int_type);
+ 	  break;
+ 
+ 	case op_sipush:
+ 	  get_short ();
+ 	  push_type (int_type);
+ 	  break;
+ 
+ 	case op_ldc:
+ 	  push_type_t (check_constant (get_byte ()));
+ 	  break;
+ 	case op_ldc_w:
+ 	  push_type_t (check_constant (get_ushort ()));
+ 	  break;
+ 	case op_ldc2_w:
+ 	  push_type_t (check_wide_constant (get_ushort ()));
+ 	  break;
+ 
+ 	case op_iload:
+ 	  push_type_t (get_variable (get_byte (), int_type));
+ 	  break;
+ 	case op_lload:
+ 	  push_type_t (get_variable (get_byte (), long_type));
+ 	  break;
+ 	case op_fload:
+ 	  push_type_t (get_variable (get_byte (), float_type));
+ 	  break;
+ 	case op_dload:
+ 	  push_type_t (get_variable (get_byte (), double_type));
+ 	  break;
+ 	case op_aload:
+ 	  push_type_t (get_variable (get_byte (), reference_type));
+ 	  break;
+ 
+ 	case op_iload_0:
+ 	case op_iload_1:
+ 	case op_iload_2:
+ 	case op_iload_3:
+ 	  push_type_t (get_variable (opcode - op_iload_0, int_type));
+ 	  break;
+ 	case op_lload_0:
+ 	case op_lload_1:
+ 	case op_lload_2:
+ 	case op_lload_3:
+ 	  push_type_t (get_variable (opcode - op_lload_0, long_type));
+ 	  break;
+ 	case op_fload_0:
+ 	case op_fload_1:
+ 	case op_fload_2:
+ 	case op_fload_3:
+ 	  push_type_t (get_variable (opcode - op_fload_0, float_type));
+ 	  break;
+ 	case op_dload_0:
+ 	case op_dload_1:
+ 	case op_dload_2:
+ 	case op_dload_3:
+ 	  push_type_t (get_variable (opcode - op_dload_0, double_type));
+ 	  break;
+ 	case op_aload_0:
+ 	case op_aload_1:
+ 	case op_aload_2:
+ 	case op_aload_3:
+ 	  push_type_t (get_variable (opcode - op_aload_0, reference_type));
+ 	  break;
+ 	case op_iaload:
+ 	  pop_type (int_type);
+ 	  push_type_t (require_array_type (pop_init_ref (reference_type),
+ 					 int_type));
+ 	  break;
+ 	case op_laload:
+ 	  pop_type (int_type);
+ 	  push_type_t (require_array_type (pop_init_ref (reference_type),
+ 					 long_type));
+ 	  break;
+ 	case op_faload:
+ 	  pop_type (int_type);
+ 	  push_type_t (require_array_type (pop_init_ref (reference_type),
+ 					 float_type));
+ 	  break;
+ 	case op_daload:
+ 	  pop_type (int_type);
+ 	  push_type_t (require_array_type (pop_init_ref (reference_type),
+ 					 double_type));
+ 	  break;
+ 	case op_aaload:
+ 	  pop_type (int_type);
+ 	  push_type_t (require_array_type (pop_init_ref (reference_type),
+ 					 reference_type));
+ 	  break;
+ 	case op_baload:
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), byte_type);
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_caload:
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), char_type);
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_saload:
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), short_type);
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_istore:
+ 	  set_variable (get_byte (), pop_type (int_type));
+ 	  break;
+ 	case op_lstore:
+ 	  set_variable (get_byte (), pop_type (long_type));
+ 	  break;
+ 	case op_fstore:
+ 	  set_variable (get_byte (), pop_type (float_type));
+ 	  break;
+ 	case op_dstore:
+ 	  set_variable (get_byte (), pop_type (double_type));
+ 	  break;
+ 	case op_astore:
+ 	  set_variable (get_byte (), pop_ref_or_return ());
+ 	  break;
+ 	case op_istore_0:
+ 	case op_istore_1:
+ 	case op_istore_2:
+ 	case op_istore_3:
+ 	  set_variable (opcode - op_istore_0, pop_type (int_type));
+ 	  break;
+ 	case op_lstore_0:
+ 	case op_lstore_1:
+ 	case op_lstore_2:
+ 	case op_lstore_3:
+ 	  set_variable (opcode - op_lstore_0, pop_type (long_type));
+ 	  break;
+ 	case op_fstore_0:
+ 	case op_fstore_1:
+ 	case op_fstore_2:
+ 	case op_fstore_3:
+ 	  set_variable (opcode - op_fstore_0, pop_type (float_type));
+ 	  break;
+ 	case op_dstore_0:
+ 	case op_dstore_1:
+ 	case op_dstore_2:
+ 	case op_dstore_3:
+ 	  set_variable (opcode - op_dstore_0, pop_type (double_type));
+ 	  break;
+ 	case op_astore_0:
+ 	case op_astore_1:
+ 	case op_astore_2:
+ 	case op_astore_3:
+ 	  set_variable (opcode - op_astore_0, pop_ref_or_return ());
+ 	  break;
+ 	case op_iastore:
+ 	  pop_type (int_type);
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), int_type);
+ 	  break;
+ 	case op_lastore:
+ 	  pop_type (long_type);
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), long_type);
+ 	  break;
+ 	case op_fastore:
+ 	  pop_type (float_type);
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), float_type);
+ 	  break;
+ 	case op_dastore:
+ 	  pop_type (double_type);
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), double_type);
+ 	  break;
+ 	case op_aastore:
+ 	  pop_type (reference_type);
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), reference_type);
+ 	  break;
+ 	case op_bastore:
+ 	  pop_type (int_type);
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), byte_type);
+ 	  break;
+ 	case op_castore:
+ 	  pop_type (int_type);
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), char_type);
+ 	  break;
+ 	case op_sastore:
+ 	  pop_type (int_type);
+ 	  pop_type (int_type);
+ 	  require_array_type (pop_init_ref (reference_type), short_type);
+ 	  break;
+ 	case op_pop:
+ 	  pop32 ();
+ 	  break;
+ 	case op_pop2:
+ 	  {
+ 	    type t = pop_raw ();
+ 	    if (! type_iswide (&t))
+ 	      pop32 ();
+ 	  }
+ 	  break;
+ 	case op_dup:
+ 	  {
+ 	    type t = pop32 ();
+ 	    push_type_t (t);
+ 	    push_type_t (t);
+ 	  }
+ 	  break;
+ 	case op_dup_x1:
+ 	  {
+ 	    type t1 = pop32 ();
+ 	    type t2 = pop32 ();
+ 	    push_type_t (t1);
+ 	    push_type_t (t2);
+ 	    push_type_t (t1);
+ 	  }
+ 	  break;
+ 	case op_dup_x2:
+ 	  {
+ 	    type t1 = pop32 ();
+ 	    type t2 = pop_raw ();
+ 	    if (! type_iswide (&t2))
+ 	      {
+ 		type t3 = pop32 ();
+ 		push_type_t (t1);
+ 		push_type_t (t3);
+ 	      }
+ 	    else
+ 	      push_type_t (t1);
+ 	    push_type_t (t2);
+ 	    push_type_t (t1);
+ 	  }
+ 	  break;
+ 	case op_dup2:
+ 	  {
+ 	    type t = pop_raw ();
+ 	    if (! type_iswide (&t))
+ 	      {
+ 		type t2 = pop32 ();
+ 		push_type_t (t2);
+ 		push_type_t (t);
+ 		push_type_t (t2);
+ 	      }
+ 	    else
+ 	      push_type_t (t);
+ 	    push_type_t (t);
+ 	  }
+ 	  break;
+ 	case op_dup2_x1:
+ 	  {
+ 	    type t1 = pop_raw ();
+ 	    type t2 = pop32 ();
+ 	    if (! type_iswide (&t1))
+ 	      {
+ 		type t3 = pop32 ();
+ 		push_type_t (t2);
+ 		push_type_t (t1);
+ 		push_type_t (t3);
+ 	      }
+ 	    else
+ 	      push_type_t (t1);
+ 	    push_type_t (t2);
+ 	    push_type_t (t1);
+ 	  }
+ 	  break;
+ 	case op_dup2_x2:
+ 	  {
+ 	    type t1 = pop_raw ();
+ 	    if (type_iswide (&t1))
+ 	      {
+ 		type t2 = pop_raw ();
+ 		if (type_iswide (&t2))
+ 		  {
+ 		    push_type_t (t1);
+ 		    push_type_t (t2);
+ 		  }
+ 		else
+ 		  {
+ 		    type t3 = pop32 ();
+ 		    push_type_t (t1);
+ 		    push_type_t (t3);
+ 		    push_type_t (t2);
+ 		  }
+ 		push_type_t (t1);
+ 	      }
+ 	    else
+ 	      {
+ 		type t2 = pop32 ();
+ 		type t3 = pop_raw ();
+ 		if (type_iswide (&t3))
+ 		  {
+ 		    push_type_t (t2);
+ 		    push_type_t (t1);
+ 		  }
+ 		else
+ 		  {
+ 		    type t4 = pop32 ();
+ 		    push_type_t (t2);
+ 		    push_type_t (t1);
+ 		    push_type_t (t4);
+ 		  }
+ 		push_type_t (t3);
+ 		push_type_t (t2);
+ 		push_type_t (t1);
+ 	      }
+ 	  }
+ 	  break;
+ 	case op_swap:
+ 	  {
+ 	    type t1 = pop32 ();
+ 	    type t2 = pop32 ();
+ 	    push_type_t (t1);
+ 	    push_type_t (t2);
+ 	  }
+ 	  break;
+ 	case op_iadd:
+ 	case op_isub:
+ 	case op_imul:
+ 	case op_idiv:
+ 	case op_irem:
+ 	case op_ishl:
+ 	case op_ishr:
+ 	case op_iushr:
+ 	case op_iand:
+ 	case op_ior:
+ 	case op_ixor:
+ 	  pop_type (int_type);
+ 	  push_type_t (pop_type (int_type));
+ 	  break;
+ 	case op_ladd:
+ 	case op_lsub:
+ 	case op_lmul:
+ 	case op_ldiv:
+ 	case op_lrem:
+ 	case op_land:
+ 	case op_lor:
+ 	case op_lxor:
+ 	  pop_type (long_type);
+ 	  push_type_t (pop_type (long_type));
+ 	  break;
+ 	case op_lshl:
+ 	case op_lshr:
+ 	case op_lushr:
+ 	  pop_type (int_type);
+ 	  push_type_t (pop_type (long_type));
+ 	  break;
+ 	case op_fadd:
+ 	case op_fsub:
+ 	case op_fmul:
+ 	case op_fdiv:
+ 	case op_frem:
+ 	  pop_type (float_type);
+ 	  push_type_t (pop_type (float_type));
+ 	  break;
+ 	case op_dadd:
+ 	case op_dsub:
+ 	case op_dmul:
+ 	case op_ddiv:
+ 	case op_drem:
+ 	  pop_type (double_type);
+ 	  push_type_t (pop_type (double_type));
+ 	  break;
+ 	case op_ineg:
+ 	case op_i2b:
+ 	case op_i2c:
+ 	case op_i2s:
+ 	  push_type_t (pop_type (int_type));
+ 	  break;
+ 	case op_lneg:
+ 	  push_type_t (pop_type (long_type));
+ 	  break;
+ 	case op_fneg:
+ 	  push_type_t (pop_type (float_type));
+ 	  break;
+ 	case op_dneg:
+ 	  push_type_t (pop_type (double_type));
+ 	  break;
+ 	case op_iinc:
+ 	  get_variable (get_byte (), int_type);
+ 	  get_byte ();
+ 	  break;
+ 	case op_i2l:
+ 	  pop_type (int_type);
+ 	  push_type (long_type);
+ 	  break;
+ 	case op_i2f:
+ 	  pop_type (int_type);
+ 	  push_type (float_type);
+ 	  break;
+ 	case op_i2d:
+ 	  pop_type (int_type);
+ 	  push_type (double_type);
+ 	  break;
+ 	case op_l2i:
+ 	  pop_type (long_type);
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_l2f:
+ 	  pop_type (long_type);
+ 	  push_type (float_type);
+ 	  break;
+ 	case op_l2d:
+ 	  pop_type (long_type);
+ 	  push_type (double_type);
+ 	  break;
+ 	case op_f2i:
+ 	  pop_type (float_type);
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_f2l:
+ 	  pop_type (float_type);
+ 	  push_type (long_type);
+ 	  break;
+ 	case op_f2d:
+ 	  pop_type (float_type);
+ 	  push_type (double_type);
+ 	  break;
+ 	case op_d2i:
+ 	  pop_type (double_type);
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_d2l:
+ 	  pop_type (double_type);
+ 	  push_type (long_type);
+ 	  break;
+ 	case op_d2f:
+ 	  pop_type (double_type);
+ 	  push_type (float_type);
+ 	  break;
+ 	case op_lcmp:
+ 	  pop_type (long_type);
+ 	  pop_type (long_type);
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_fcmpl:
+ 	case op_fcmpg:
+ 	  pop_type (float_type);
+ 	  pop_type (float_type);
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_dcmpl:
+ 	case op_dcmpg:
+ 	  pop_type (double_type);
+ 	  pop_type (double_type);
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_ifeq:
+ 	case op_ifne:
+ 	case op_iflt:
+ 	case op_ifge:
+ 	case op_ifgt:
+ 	case op_ifle:
+ 	  pop_type (int_type);
+ 	  push_jump (get_short ());
+ 	  break;
+ 	case op_if_icmpeq:
+ 	case op_if_icmpne:
+ 	case op_if_icmplt:
+ 	case op_if_icmpge:
+ 	case op_if_icmpgt:
+ 	case op_if_icmple:
+ 	  pop_type (int_type);
+ 	  pop_type (int_type);
+ 	  push_jump (get_short ());
+ 	  break;
+ 	case op_if_acmpeq:
+ 	case op_if_acmpne:
+ 	  pop_type (reference_type);
+ 	  pop_type (reference_type);
+ 	  push_jump (get_short ());
+ 	  break;
+ 	case op_goto:
+ 	  push_jump (get_short ());
+ 	  invalidate_pc ();
+ 	  break;
+ 	case op_jsr:
+ 	  handle_jsr_insn (get_short ());
+ 	  break;
+ 	case op_ret:
+ 	  handle_ret_insn (get_byte ());
+ 	  break;
+ 	case op_tableswitch:
+ 	  {
+ 	    int i;
+ 	    jint low, high;
+ 	    pop_type (int_type);
+ 	    skip_padding ();
+ 	    push_jump (get_int ());
+ 	    low = get_int ();
+ 	    high = get_int ();
+ 	    /* Already checked LOW -vs- HIGH.  */
+ 	    for (i = low; i <= high; ++i)
+ 	      push_jump (get_int ());
+ 	    invalidate_pc ();
+ 	  }
+ 	  break;
+ 
+ 	case op_lookupswitch:
+ 	  {
+ 	    int i;
+ 	    jint npairs, lastkey;
+ 
+ 	    pop_type (int_type);
+ 	    skip_padding ();
+ 	    push_jump (get_int ());
+ 	    npairs = get_int ();
+ 	    /* Already checked NPAIRS >= 0.  */
+ 	    lastkey = 0;
+ 	    for (i = 0; i < npairs; ++i)
+ 	      {
+ 		jint key = get_int ();
+ 		if (i > 0 && key <= lastkey)
+ 		  verify_fail_pc ("lookupswitch pairs unsorted", vfr->start_PC);
+ 		lastkey = key;
+ 		push_jump (get_int ());
+ 	      }
+ 	    invalidate_pc ();
+ 	  }
+ 	  break;
+ 	case op_ireturn:
+ 	  check_return_type (pop_type (int_type));
+ 	  invalidate_pc ();
+ 	  break;
+ 	case op_lreturn:
+ 	  check_return_type (pop_type (long_type));
+ 	  invalidate_pc ();
+ 	  break;
+ 	case op_freturn:
+ 	  check_return_type (pop_type (float_type));
+ 	  invalidate_pc ();
+ 	  break;
+ 	case op_dreturn:
+ 	  check_return_type (pop_type (double_type));
+ 	  invalidate_pc ();
+ 	  break;
+ 	case op_areturn:
+ 	  check_return_type (pop_init_ref (reference_type));
+ 	  invalidate_pc ();
+ 	  break;
+ 	case op_return:
+ 	  /* We only need to check this when the return type is
+ 	     void, because all instance initializers return void.  */
+ 	  if (this_is_init)
+ 	    state_check_this_initialized (vfr->current_state);
+ 	  check_return_type (make_type (void_type));
+ 	  invalidate_pc ();
+ 	  break;
+ 	case op_getstatic:
+ 	  push_type_t (check_field_constant (get_ushort (), NULL, false));
+ 	  break;
+ 	case op_putstatic:
+ 	  pop_type_t (check_field_constant (get_ushort (), NULL, false));
+ 	  break;
+ 	case op_getfield:
+ 	  {
+ 	    type klass;
+ 	    type field = check_field_constant (get_ushort (), &klass, false);
+ 	    pop_type_t (klass);
+ 	    push_type_t (field);
+ 	  }
+ 	  break;
+ 	case op_putfield:
+ 	  {
+ 	    type klass;
+ 	    type field = check_field_constant (get_ushort (), &klass, true);
+ 	    pop_type_t (field);
+ 	    pop_type_t (klass);
+ 	  }
+ 	  break;
+ 
+ 	case op_invokevirtual:
+ 	case op_invokespecial:
+ 	case op_invokestatic:
+ 	case op_invokeinterface:
+ 	  {
+ 	    vfy_string method_name, method_signature;
+ 	    const char *namec;
+ 	    int i, arg_count;
+ 	    type rt;
+ 	    bool is_init = false;
+ 
+ 	    type class_type
+ 	      = check_method_constant (get_ushort (),
+ 				       opcode == op_invokeinterface,
+ 				       &method_name,
+ 				       &method_signature);
+ 	    /* NARGS is only used when we're processing
+ 	       invokeinterface.  It is simplest for us to compute it
+ 	       here and then verify it later.  */
+ 	    int nargs = 0;
+ 	    if (opcode == op_invokeinterface)
+ 	      {
+ 		nargs = get_byte ();
+ 		if (get_byte () != 0)
+ 		  verify_fail ("invokeinterface dummy byte is wrong");
+ 	      }
+ 
+ 	    namec = vfy_string_bytes (method_name);
+ 
+ 	    if (vfy_strings_equal (method_name, vfy_init_name()))
+ 	      {
+ 		is_init = true;
+ 		if (opcode != op_invokespecial)
+ 		  verify_fail ("can't invoke <init>");
+ 	      }
+ 	    else if (namec[0] == '<')
+ 	      verify_fail ("can't invoke method starting with `<'");
+ 
+ 	    arg_count = vfy_count_arguments (method_signature);
+             {
+ 	      /* Pop arguments and check types.  */
+ 	      type *arg_types = (type *) vfy_alloc (arg_count * sizeof (type));
+ 
+ 	      compute_argument_types (method_signature, arg_types);
+ 	      for (i = arg_count - 1; i >= 0; --i)
+ 		{
+ 		  /* This is only used for verifying the byte for
+ 		     invokeinterface.  */
+ 		  nargs -= type_depth (&arg_types[i]);
+ 		  pop_init_ref_t (arg_types[i]);
+ 		}
+ 
+ 	      vfy_free (arg_types);
+ 	    }
+ 
+ 	    if (opcode == op_invokeinterface
+ 		&& nargs != 1)
+ 	      verify_fail ("wrong argument count for invokeinterface");
+ 
+ 	    if (opcode != op_invokestatic)
+ 	      {
+ 	        type raw;
+ 		type t = class_type;
+ 		if (is_init)
+ 		  {
+ 		    /* In this case the PC doesn't matter.  */
+ 		    type_set_uninitialized (&t, UNINIT);
+ 		    /* FIXME: check to make sure that the <init>
+ 		       call is to the right class.
+ 		       It must either be super or an exact class
+ 		       match.  */
+ 		  }
+ 		raw = pop_raw ();
+ 		if (! types_compatible (&t, &raw))
+ 		  verify_fail ("incompatible type on stack");
+ 
+ 		if (is_init)		  
+ 		  state_set_initialized (vfr->current_state, 
+ 		    type_get_pc (&raw), vfr->current_method->max_locals);
+ 	      }
+ 
+ 	    rt = compute_return_type (method_signature);
+ 	    if (! type_isvoid (&rt))
+ 	      push_type_t (rt);
+ 	  }
+ 	  break;
+ 
+ 	case op_new:
+ 	  {
+ 	    type t = check_class_constant (get_ushort ());
+ 	    if (type_isarray (&t) || type_isinterface (&t)
+ 		|| type_isabstract (&t))
+ 	      verify_fail ("type is array, interface, or abstract");
+ 	    type_set_uninitialized (&t, vfr->start_PC);
+ 	    push_type_t (t);
+ 	  }
+ 	  break;
+ 
+ 	case op_newarray:
+ 	  {
+ 	    int atype = get_byte ();
+ 	    type t;
+ 	    /* We intentionally have chosen constants to make this
+ 	       valid.  */
+ 	    if (atype < boolean_type || atype > long_type)
+ 	      verify_fail_pc ("type not primitive", vfr->start_PC);
+ 	    pop_type (int_type);
+ 	    init_type_from_class (&t, construct_primitive_array_type (atype));
+ 	    push_type_t (t);
+ 	  }
+ 	  break;
+ 	case op_anewarray:
+ 	  {
+ 	    type t;
+ 	    pop_type (int_type);
+ 	    t = check_class_constant (get_ushort ());
+ 	    push_type_t (type_to_array (&t));
+ 	  }
+ 	  break;
+ 	case op_arraylength:
+ 	  {
+ 	    type t = pop_init_ref (reference_type);
+ 	    if (! type_isarray (&t) && ! type_isnull (&t))
+ 	      verify_fail ("array type expected");
+ 	    push_type (int_type);
+ 	  }
+ 	  break;
+ 	case op_athrow:
+ 	  pop_type_t (make_type_from_class (vfy_throwable_type ()));
+ 	  invalidate_pc ();
+ 	  break;
+ 	case op_checkcast:
+ 	  pop_init_ref (reference_type);
+ 	  push_type_t (check_class_constant (get_ushort ()));
+ 	  break;
+ 	case op_instanceof:
+ 	  pop_init_ref (reference_type);
+ 	  check_class_constant (get_ushort ());
+ 	  push_type (int_type);
+ 	  break;
+ 	case op_monitorenter:
+ 	  pop_init_ref (reference_type);
+ 	  break;
+ 	case op_monitorexit:
+ 	  pop_init_ref (reference_type);
+ 	  break;
+ 	case op_wide:
+ 	  {
+ 	    switch (get_byte ())
+ 	      {
+ 	      case op_iload:
+ 		push_type_t (get_variable (get_ushort (), int_type));
+ 		break;
+ 	      case op_lload:
+ 		push_type_t (get_variable (get_ushort (), long_type));
+ 		break;
+ 	      case op_fload:
+ 		push_type_t (get_variable (get_ushort (), float_type));
+ 		break;
+ 	      case op_dload:
+ 		push_type_t (get_variable (get_ushort (), double_type));
+ 		break;
+ 	      case op_aload:
+ 		push_type_t (get_variable (get_ushort (), reference_type));
+ 		break;
+ 	      case op_istore:
+ 		set_variable (get_ushort (), pop_type (int_type));
+ 		break;
+ 	      case op_lstore:
+ 		set_variable (get_ushort (), pop_type (long_type));
+ 		break;
+ 	      case op_fstore:
+ 		set_variable (get_ushort (), pop_type (float_type));
+ 		break;
+ 	      case op_dstore:
+ 		set_variable (get_ushort (), pop_type (double_type));
+ 		break;
+ 	      case op_astore:
+ 		set_variable (get_ushort (), pop_init_ref (reference_type));
+ 		break;
+ 	      case op_ret:
+ 		handle_ret_insn (get_short ());
+ 		break;
+ 	      case op_iinc:
+ 		get_variable (get_ushort (), int_type);
+ 		get_short ();
+ 		break;
+ 	      default:
+ 		verify_fail_pc ("unrecognized wide instruction", vfr->start_PC);
+ 	      }
+ 	  }
+ 	  break;
+ 	case op_multianewarray:
+ 	  {
+ 	    int i;
+ 	    type atype = check_class_constant (get_ushort ());
+ 	    int dim = get_byte ();
+ 	    if (dim < 1)
+ 	      verify_fail_pc ("too few dimensions to multianewarray", vfr->start_PC);
+             type_verify_dimensions (&atype, dim);
+ 	    for (i = 0; i < dim; ++i)
+ 	      pop_type (int_type);
+ 	    push_type_t (atype);
+ 	  }
+ 	  break;
+ 	case op_ifnull:
+ 	case op_ifnonnull:
+ 	  pop_type (reference_type);
+ 	  push_jump (get_short ());
+ 	  break;
+ 	case op_goto_w:
+ 	  push_jump (get_int ());
+ 	  invalidate_pc ();
+ 	  break;
+ 	case op_jsr_w:
+ 	  handle_jsr_insn (get_int ());
+ 	  break;
+ 
+ 	default:
+ 	  /* Unrecognized opcode.  */
+ 	  verify_fail_pc ("unrecognized instruction in verify_instructions_0",
+ 		       vfr->start_PC);
+ 	}
+     }
+ }
+ 
+ /* This turns a `type' into something suitable for use by the type map
+    in the other parts of the compiler.  In particular, reference types
+    are mapped to Object, primitive types are unchanged, and other
+    types are mapped using special functions declared in verify.h.  */
+ static vfy_jclass
+ collapse_type (type *t)
+ {
+   switch (t->key)
+     {
+     case void_type:
+     case boolean_type:
+     case char_type:
+     case float_type:
+     case double_type:
+     case byte_type:
+     case short_type:
+     case int_type:
+     case long_type:
+       return vfy_get_primitive_type (t->key);
+ 
+     case unsuitable_type:
+     case continuation_type:
+       return vfy_unsuitable_type ();
+ 
+     case return_address_type:
+       return vfy_return_address_type ();
+ 
+     case null_type:
+       return vfy_null_type ();
+ 
+     case reference_type:
+     case uninitialized_reference_type:
+       return vfy_object_type ();
+     }
+ 
+   abort ();
+ }
+ 
+ static void
+ verify_instructions (void)
+ {
+   int i;
+ 
+   branch_prepass ();
+   verify_instructions_0 ();
+ 
+   /* Now tell the rest of the compiler about the types we've found.  */
+   for (i = 0; i < vfr->current_method->code_length; ++i)
+     {
+       int j, slot;
+       struct state *curr;
+ 
+       if ((vfr->flags[i] & FLAG_INSN_SEEN) != 0)
+ 	vfy_note_instruction_seen (i);
+ 
+       if (! vfr->states[i])
+ 	continue;
+ 
+       curr = vfr->states[i]->val;
+       vfy_note_stack_depth (vfr->current_method, i, curr->stackdepth);
+ 
+       /* Tell the compiler about each local variable.  */
+       for (j = 0; j < vfr->current_method->max_locals; ++j)
+ 	vfy_note_local_type (vfr->current_method, i, j,
+ 			     collapse_type (&curr->locals[j]));
+       /* Tell the compiler about each stack slot.  */
+       for (slot = j = 0; j < curr->stacktop; ++j, ++slot)
+ 	{
+ 	  vfy_note_stack_type (vfr->current_method, i, slot,
+ 			       collapse_type (&curr->stack[j]));
+ 	  if (type_iswide (&curr->stack[j]))
+ 	    {
+ 	      ++slot;
+ 	      vfy_note_stack_type (vfr->current_method, i, slot,
+ 				   vfy_unsuitable_type ());
+ 	    }
+ 	}
+       if (slot != curr->stackdepth)
+ 	abort ();
+     }
+ }
+ 
+ static void
+ make_verifier_context (vfy_method *m)
+ {
+   vfr = (verifier_context *) vfy_alloc (sizeof (struct verifier_context));
+ 
+   vfr->current_method = m;
+   vfr->bytecode = vfy_get_bytecode (m);
+   vfr->exception = vfy_get_exceptions (m);
+   vfr->current_class = m->defining_class;
+ 
+   vfr->states = NULL;
+   vfr->flags = NULL;
+   vfr->utf8_list = NULL;
+   vfr->isect_list = NULL;
+ }
+ 
+ static void
+ free_verifier_context (void)
+ {
+   vfy_string_list *utf8_list;
+   ref_intersection *isect_list;
+ 
+   if (vfr->flags)
+     vfy_free (vfr->flags);
+ 
+   utf8_list = vfr->utf8_list;
+   while (utf8_list != NULL)
+     {
+       vfy_string_list *n = utf8_list->next;
+       vfy_free (utf8_list);
+       utf8_list = n;
+     }
+ 
+   isect_list = vfr->isect_list;
+   while (isect_list != NULL)
+     {
+       ref_intersection *next = isect_list->alloc_next;
+       vfy_free (isect_list);
+       isect_list = next;
+     }
+ 
+   if (vfr->states != NULL)
+     {
+       int i;
+       for (i = 0; i < vfr->current_method->code_length; ++i)
+ 	{
+ 	  state_list *iter = vfr->states[i];
+ 	  while (iter != NULL)
+ 	    {
+ 	      state_list *next = iter->next;
+ 	      free_state (iter->val);
+ 	      vfy_free (iter->val);
+ 	      vfy_free (iter);
+ 	      iter = next;
+ 	    }
+ 	}
+       vfy_free (vfr->states);
+     }
+   
+   vfy_free (vfr);
+ }
+ 
+ int
+ verify_method (vfy_method *meth)
+ {
+   debug_print ("verify_method (%s) %i\n", vfy_string_bytes (meth->name),
+ 	       meth->code_length);
+   
+   if (vfr != NULL)
+     verify_fail ("verifier re-entered");
+ 
+   make_verifier_context (meth);
+   verify_instructions ();
+   free_verifier_context ();
+   vfr = NULL;
+ 
+   return 1;
+ }
diff -Nrcpad gcc-3.4.3/gcc/java/verify.c gcc-4.0.0/gcc/java/verify.c
*** gcc-3.4.3/gcc/java/verify.c	Sat Dec 20 15:38:28 2003
--- gcc-4.0.0/gcc/java/verify.c	Mon Jan 10 18:14:36 2005
***************
*** 1,6 ****
  /* Handle verification of bytecoded methods for the GNU compiler for 
     the Java(TM) language.
!    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
  
  This file is part of GCC.
--- 1,6 ----
  /* 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.
*************** Java and all Java-based marks are tradem
*** 24,29 ****
--- 24,34 ----
  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"
*************** check_pending_block (tree target_label)
*** 82,88 ****
        push_pending_label (target_label);
      }
  
!   if (current_subr == NULL)
      {
        if (LABEL_IN_SUBR (target_label))
  	return "might transfer control into subroutine";
--- 87,93 ----
        push_pending_label (target_label);
      }
  
!   if (current_subr == NULL_TREE)
      {
        if (LABEL_IN_SUBR (target_label))
  	return "might transfer control into subroutine";
*************** subroutine_nesting (tree label)
*** 113,119 ****
    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++;
--- 118,124 ----
    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++;
*************** merge_types (tree type1, tree type2)
*** 221,233 ****
        depth1 = class_depth (type1);
        depth2 = class_depth (type2);
        for ( ; depth1 > depth2;  depth1--)
! 	type1 = TYPE_BINFO_BASETYPE (type1, 0);
        for ( ; depth2 > depth1;  depth2--)
! 	type2 = TYPE_BINFO_BASETYPE (type2, 0);
        while (type1 != type2)
  	{
! 	  type1 = TYPE_BINFO_BASETYPE (type1, 0);
! 	  type2 = TYPE_BINFO_BASETYPE (type2, 0);
  	}
        return promote_type (type1);
      }
--- 226,238 ----
        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);
      }
*************** merge_types (tree type1, tree type2)
*** 238,244 ****
  }
  
  /* Merge the current type state with that at LABEL.
!    Return -1 the the states are incompatible (i.e. on error),
     0 if there was no change, and 1 if there was a change. */
  
  int
--- 243,249 ----
  }
  
  /* 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)
*** 250,262 ****
    tree return_map;
    if (vec == NULL_TREE)
      {
!       if (!vec)
! 	{
! 	  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
--- 255,265 ----
    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
*************** merge_type_state (tree label)
*** 275,287 ****
        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 sub-routine. */
  	      if (return_map == NULL_TREE || i >= nlocals
  		  || TREE_VEC_ELT (return_map, i) != TYPE_UNUSED
  		  || (TYPE_IS_WIDE (new_type)
--- 278,290 ----
        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)
*************** pop_argument_types (tree arg_types)
*** 401,415 ****
              { oldpc = LABEL_PC (tmplab); goto verify_error; }} while (0)
  
  #ifdef __GNUC__
! #define CHECK_PC_IN_RANGE(PC) ({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.
!    Return 1 on success, 0 on failure. */
  int
  verify_jvm_instructions (JCF* jcf, const unsigned char *byte_ops, long length)
  {
--- 404,422 ----
              { 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)
  {
*************** verify_jvm_instructions (JCF* jcf, const
*** 434,440 ****
  
    pending_blocks = NULL_TREE;
  
!   /* Handle the exception table. */
    method_init_exceptions ();
    JCF_SEEK (jcf, DECL_CODE_OFFSET (current_function_decl) + length);
    eh_count = JCF_readu2 (jcf);
--- 441,449 ----
  
    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);
*************** verify_jvm_instructions (JCF* jcf, const
*** 463,472 ****
        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);
--- 472,481 ----
        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);
*************** verify_jvm_instructions (JCF* jcf, const
*** 478,484 ****
  		   catch_type == 0 ? NULL_TREE
  		   : get_class_constant (jcf, catch_type));
  
!       instruction_bits [handler_pc] |= BCODE_EXCEPTION_TARGET;
      }
  
    free (starts);
--- 487,493 ----
  		   catch_type == 0 ? NULL_TREE
  		   : get_class_constant (jcf, catch_type));
  
!       instruction_bits[handler_pc] |= BCODE_EXCEPTION_TARGET;
      }
  
    free (starts);
*************** verify_jvm_instructions (JCF* jcf, const
*** 487,548 ****
    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, then 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 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);
--- 496,562 ----
    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);
*************** verify_jvm_instructions (JCF* jcf, const
*** 553,563 ****
--- 567,580 ----
  		}
  	    }
  	}
+ 
        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;
  
*************** verify_jvm_instructions (JCF* jcf, const
*** 568,585 ****
  
  	  /* 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 end of method");
  
-       /* fprintf (stderr, "** %d\n", PC); */
  
        oldpc = PC;
  
!       if (!(instruction_bits [PC] & BCODE_INSTRUCTION_START) && ! wide)
  	VERIFICATION_ERROR ("PC not at instruction start");
  
        instruction_bits[PC] |= BCODE_VERIFIED;
--- 585,602 ----
  
  	  /* 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;
*************** verify_jvm_instructions (JCF* jcf, const
*** 590,597 ****
--- 607,616 ----
        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:
*************** verify_jvm_instructions (JCF* jcf, const
*** 602,619 ****
--- 621,644 ----
  	      || 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;
*************** verify_jvm_instructions (JCF* jcf, const
*** 706,724 ****
  	POP_TYPE_CONV (type, type, NULL);
  	type_map[index] = type;
  
! 	/* If local variable changed, we need to reconsider eh handlers. */
  	prev_eh_ranges = NULL_EH_RANGE;
  
! 	/* Allocate decl and rtx for this variable now, so if we're not
! 	   optimizing, 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 sub-routines. */
  	  if (current_subr)
  	    {
  	      tree vec = LABEL_RETURN_TYPE_STATE (current_subr);
--- 731,751 ----
  	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);
*************** verify_jvm_instructions (JCF* jcf, const
*** 769,783 ****
--- 796,813 ----
  	  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:
*************** verify_jvm_instructions (JCF* jcf, const
*** 785,790 ****
--- 815,821 ----
  	  pop_type (long_type_node);
  	  PUSH_TYPE (long_type_node);
  	  break;
+ 
  	case OPCODE_iinc:
  	  index = wide ? IMMEDIATE_u2 : IMMEDIATE_u1;
  	  PC += wide + 1;
*************** verify_jvm_instructions (JCF* jcf, const
*** 796,801 ****
--- 827,833 ----
  	      || ! 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:
*************** verify_jvm_instructions (JCF* jcf, const
*** 820,825 ****
--- 852,858 ----
  	  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:
*************** verify_jvm_instructions (JCF* jcf, const
*** 831,836 ****
--- 864,870 ----
  	compare:
  	  pop_type (type);  pop_type (type);
  	  PUSH_TYPE (int_type_node);  break;
+ 
  	case OPCODE_ifeq:
  	case OPCODE_ifne:
  	case OPCODE_iflt:
*************** verify_jvm_instructions (JCF* jcf, const
*** 852,864 ****
--- 886,901 ----
  	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])
  	    {
*************** verify_jvm_instructions (JCF* jcf, const
*** 874,879 ****
--- 911,917 ----
  	      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
*************** verify_jvm_instructions (JCF* jcf, const
*** 893,905 ****
  	  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;
--- 931,945 ----
  	  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;
*************** verify_jvm_instructions (JCF* jcf, const
*** 908,956 ****
  	  {
  	    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)");
--- 948,1012 ----
  	  {
  	    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)");
*************** verify_jvm_instructions (JCF* jcf, const
*** 958,976 ****
  	    {
  	      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)
  	    {
--- 1014,1037 ----
  	    {
  	      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)
  	    {
*************** verify_jvm_instructions (JCF* jcf, const
*** 1002,1011 ****
  	    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)
--- 1063,1075 ----
  	    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)
*************** verify_jvm_instructions (JCF* jcf, const
*** 1017,1034 ****
  		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 (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)
  	      {
--- 1081,1105 ----
  		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)
  	      {
*************** verify_jvm_instructions (JCF* jcf, const
*** 1036,1045 ****
  		goto pop_type_error;
  	      }
  
! 	    /* Can't invoke <clinit> */
  	    if (ID_CLINIT_P (method_name))
  	      VERIFICATION_ERROR ("invoke opcode can't invoke <clinit>");
! 	    /* Apart invokespecial, can't invoke <init> */
  	    if (op_code != OPCODE_invokespecial && ID_INIT_P (method_name))
  	      VERIFICATION_ERROR ("invoke opcode can't invoke <init>");
  
--- 1107,1117 ----
  		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>");
  
*************** verify_jvm_instructions (JCF* jcf, const
*** 1057,1067 ****
  		  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");
--- 1129,1142 ----
  		  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");
*************** verify_jvm_instructions (JCF* jcf, const
*** 1074,1082 ****
  	  }
  
  	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
--- 1149,1157 ----
  	  }
  
  	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
*************** verify_jvm_instructions (JCF* jcf, const
*** 1090,1097 ****
  	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 */
--- 1165,1173 ----
  	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 */
*************** verify_jvm_instructions (JCF* jcf, const
*** 1107,1112 ****
--- 1183,1189 ----
  	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);
*************** verify_jvm_instructions (JCF* jcf, const
*** 1132,1138 ****
  	newarray:
  	  if (int_value >= 0 && prevpc >= 0)
  	    {
! 	      /* If previous instruction pushed int constant,
  		 we want to use it. */
  	      switch (byte_ops[prevpc])
  		{
--- 1209,1215 ----
  	newarray:
  	  if (int_value >= 0 && prevpc >= 0)
  	    {
! 	      /* If the previous instruction pushed an int constant,
  		 we want to use it. */
  	      switch (byte_ops[prevpc])
  		{
*************** verify_jvm_instructions (JCF* jcf, const
*** 1148,1153 ****
--- 1225,1231 ----
  	    }
  	  else
  	    int_value = -1;
+ 
  	  type = build_java_array_type (type, int_value);
  	  pop_type (int_type_node);
  	  PUSH_TYPE (type);
*************** verify_jvm_instructions (JCF* jcf, const
*** 1159,1169 ****
  	    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;
  	  }
--- 1237,1249 ----
  	    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;
  	  }
*************** verify_jvm_instructions (JCF* jcf, const
*** 1173,1179 ****
  	  break;
  
  	case OPCODE_athrow:
! 	  /* FIXME: athrow also empties the stack. */
  	  POP_TYPE (throwable_type_node, "missing throwable at athrow" );
  	  INVALIDATE_PC;
  	  break;
--- 1253,1259 ----
  	  break;
  
  	case OPCODE_athrow:
! 	  /* FIXME: athrow also empties the stack.  */
  	  POP_TYPE (throwable_type_node, "missing throwable at athrow" );
  	  INVALIDATE_PC;
  	  break;
*************** verify_jvm_instructions (JCF* jcf, const
*** 1184,1189 ****
--- 1264,1270 ----
  	  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");
*************** verify_jvm_instructions (JCF* jcf, const
*** 1196,1207 ****
  	    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;
  
--- 1277,1290 ----
  	    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;
  
*************** verify_jvm_instructions (JCF* jcf, const
*** 1210,1215 ****
--- 1293,1299 ----
  
  	    while (low++ <= high)
  	      PUSH_PENDING (lookup_label (oldpc + IMMEDIATE_s4));
+ 
  	    INVALIDATE_PC;
  	    break;
  	  }
*************** verify_jvm_instructions (JCF* jcf, const
*** 1219,1231 ****
  	    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)
--- 1303,1316 ----
  	    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)
*************** verify_jvm_instructions (JCF* jcf, const
*** 1234,1239 ****
--- 1319,1325 ----
  	    while (npairs--)
  	      {
  	        int match = IMMEDIATE_s4;
+ 
  		if (not_registered)
  		  not_registered = 0;
  		else if (last >= match)
*************** verify_jvm_instructions (JCF* jcf, const
*** 1270,1282 ****
  		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)) = -1;
  		LABEL_RETURN_TYPE_STATE (target) = return_type_map;
  		LABEL_IS_SUBR_START (target) = 1;
  		LABEL_IN_SUBR (target) = 1;
--- 1356,1371 ----
  		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;
*************** verify_jvm_instructions (JCF* jcf, const
*** 1322,1334 ****
  	    INVALIDATE_PC;
  	  }
  	  break;
  	case OPCODE_ret:
! 	  if (current_subr == NULL)
  	    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;
--- 1411,1425 ----
  	    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;
*************** verify_jvm_instructions (JCF* jcf, const
*** 1337,1349 ****
  		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; )
  		    {
--- 1428,1442 ----
  		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; )
  		    {
*************** verify_jvm_instructions (JCF* jcf, const
*** 1361,1367 ****
  		      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)
  			    {
--- 1454,1460 ----
  		      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)
  			    {
*************** verify_jvm_instructions (JCF* jcf, const
*** 1374,1383 ****
  			}
  		    }
  		}
- 
- 
              }
            break;
          case OPCODE_jsr_w:        
          case OPCODE_ret_w:
          default:
--- 1467,1475 ----
  			}
  		    }
  		}
              }
            break;
+ 
          case OPCODE_jsr_w:        
          case OPCODE_ret_w:
          default:
*************** verify_jvm_instructions (JCF* jcf, const
*** 1390,1396 ****
        /* 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)
  	{
--- 1482,1488 ----
        /* 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)
  	{
*************** verify_jvm_instructions (JCF* jcf, const
*** 1400,1406 ****
  	  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;
  
--- 1492,1499 ----
  	  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;
  
*************** verify_jvm_instructions (JCF* jcf, const
*** 1417,1423 ****
  		 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;
--- 1510,1516 ----
  		 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;
*************** verify_jvm_instructions (JCF* jcf, const
*** 1425,1443 ****
  		{
  		  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);
--- 1518,1538 ----
  		{
  		  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);
*************** verify_jvm_instructions (JCF* jcf, const
*** 1449,1455 ****
--- 1544,1552 ----
  	  prev_eh_ranges = eh_ranges;
  	}
      }
+ 
    return 1;
+ 
   pop_type_error:
    error ("verification error at PC=%d", oldpc);
    if (message != NULL)
*************** verify_jvm_instructions (JCF* jcf, const
*** 1457,1472 ****
--- 1554,1573 ----
    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);
diff -Nrcpad gcc-3.4.3/gcc/java/verify.h gcc-4.0.0/gcc/java/verify.h
*** gcc-3.4.3/gcc/java/verify.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/gcc/java/verify.h	Sat Feb 19 01:14:17 2005
***************
*** 0 ****
--- 1,163 ----
+ /* Declarations to interface gcj with bytecode verifier.
+    Copyright (C) 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.  */
+ 
+ /* Written by Tom Tromey <tromey@redhat.com>.  */
+ 
+ #ifndef GCC_VERIFY_H
+ #define GCC_VERIFY_H
+ 
+ #ifdef __cplusplus
+ extern "C"
+ {
+ #endif
+ 
+ #include "system.h"
+ #include "coretypes.h"
+ #include "jcf.h"
+ #include "tree.h"
+ #include "java-tree.h"
+ 
+ typedef JCF vfy_constants;
+ 
+ /* For our purposes a string is the same as an identifier.  */
+ typedef tree vfy_string;
+ 
+ /* The TYPE_DECL for a class or primitive type.  */
+ typedef tree vfy_jclass;
+ 
+ /* An unsigned jshort.  */
+ typedef uint16 vfy_uint_16;
+ 
+ typedef struct
+ {
+   int handler, start, end, type;
+ } vfy_exception;
+ 
+ typedef struct
+ {
+   tree method;
+   vfy_string signature;
+   vfy_string name;
+   const unsigned char *bytes;
+   vfy_exception *exceptions;
+ 
+   /* These fields are referred to directly by the verifier.  */
+   vfy_jclass defining_class;
+   int max_stack;
+   int max_locals;
+   int code_length;
+   int exc_count;
+ } vfy_method;
+ 
+ /* Entry point to the verifier.  */
+ int verify_jvm_instructions_new (JCF *jcf, const unsigned char *byte_ops,
+ 				 long length);
+ 
+ void *vfy_alloc (size_t bytes);
+ void vfy_free (void *mem);
+ bool vfy_strings_equal (vfy_string one, vfy_string two);
+ const char *vfy_string_bytes (vfy_string str);
+ int vfy_string_length (vfy_string str);
+ vfy_string vfy_get_string (const char *chars, int length);
+ vfy_string vfy_init_name (void);
+ vfy_string vfy_clinit_name (void);
+ int vfy_count_arguments (vfy_string signature);
+ vfy_string vfy_get_signature (vfy_method *method);
+ vfy_string vfy_get_method_name (vfy_method *method);
+ bool vfy_is_static (vfy_method *method);
+ const unsigned char *vfy_get_bytecode (vfy_method *method);
+ vfy_exception *vfy_get_exceptions (vfy_method *method);
+ void vfy_get_exception (vfy_exception *, int index, int *handler,
+ 			int *start, int *end, int *handler_type);
+ int vfy_tag (vfy_constants *pool, int index);
+ void vfy_load_indexes (vfy_constants *pool, int index,
+ 		       vfy_uint_16 *index0, vfy_uint_16 *index1);
+ vfy_constants *vfy_get_constants (vfy_jclass klass);
+ int vfy_get_constants_size (vfy_jclass klass);
+ vfy_string vfy_get_pool_string (vfy_constants *pool, int index);
+ vfy_jclass vfy_get_pool_class (vfy_constants *pool, int index);
+ vfy_string vfy_make_string (const char *s, int len);
+ vfy_string vfy_get_class_name (vfy_jclass klass);
+ bool vfy_is_assignable_from (vfy_jclass target, vfy_jclass source);
+ char vfy_get_primitive_char (vfy_jclass klass);
+ int vfy_get_interface_count (vfy_jclass klass);
+ vfy_jclass vfy_get_interface (vfy_jclass klass, int index);
+ bool vfy_is_array (vfy_jclass klass);
+ bool vfy_is_interface (vfy_jclass klass);
+ bool vfy_is_primitive (vfy_jclass klass);
+ vfy_jclass vfy_get_superclass (vfy_jclass klass);
+ vfy_jclass vfy_get_array_class (vfy_jclass klass);
+ vfy_jclass vfy_get_component_type (vfy_jclass klass);
+ bool vfy_is_abstract (vfy_jclass klass);
+ vfy_jclass vfy_find_class (vfy_jclass klass, vfy_string name);
+ vfy_jclass vfy_object_type (void);
+ vfy_jclass vfy_string_type (void);
+ vfy_jclass vfy_throwable_type (void);
+ vfy_jclass vfy_unsuitable_type (void);
+ vfy_jclass vfy_return_address_type (void);
+ vfy_jclass vfy_null_type (void);
+ int vfy_fail (const char *message, int pc, vfy_jclass ignore1,
+ 	      vfy_method *method);
+ vfy_jclass vfy_get_primitive_type (int type);
+ void vfy_note_stack_depth (vfy_method *method, int pc, int depth);
+ void vfy_note_stack_type (vfy_method *method, int pc, int slot,
+ 			  vfy_jclass type);
+ void vfy_note_local_type (vfy_method *method, int pc, int slot,
+ 			  vfy_jclass type);
+ void vfy_note_instruction_seen (int pc);
+ bool vfy_class_has_field (vfy_jclass klass, vfy_string name,
+ 			  vfy_string signature);
+ 
+ #define GLOM(name, stuff) name ## stuff
+ #define VFY_PRIMITIVE_CLASS(name) \
+   vfy_get_primitive_type ((int) (GLOM (name, _type)))
+ 
+ typedef enum
+ {
+ #define JAVAOP(name, num, ignore1, ignore2, ignore3) \
+   GLOM (op_, name) = num,
+ #include "javaop.def"
+   java_opcode_end
+ } java_opcode;
+ 
+ 
+ #define JV_CONSTANT_Class CONSTANT_Class
+ #define JV_CONSTANT_ResolvedClass CONSTANT_ResolvedClass
+ #define JV_CONSTANT_String CONSTANT_String
+ #define JV_CONSTANT_ResolvedString CONSTANT_ResolvedString
+ #define JV_CONSTANT_Integer CONSTANT_Integer
+ #define JV_CONSTANT_Float CONSTANT_Float
+ #define JV_CONSTANT_Long CONSTANT_Long
+ #define JV_CONSTANT_Double CONSTANT_Double
+ #define JV_CONSTANT_Fieldref CONSTANT_Fieldref
+ #define JV_CONSTANT_InterfaceMethodref CONSTANT_InterfaceMethodref
+ #define JV_CONSTANT_Methodref CONSTANT_Methodref
+ 
+ int verify_method (vfy_method *meth);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* ! GCC_VERIFY_H */
diff -Nrcpad gcc-3.4.3/gcc/java/win32-host.c gcc-4.0.0/gcc/java/win32-host.c
*** gcc-3.4.3/gcc/java/win32-host.c	Wed Aug 13 07:08:29 2003
--- gcc-4.0.0/gcc/java/win32-host.c	Sun Oct 17 22:51:35 2004
***************
*** 1,5 ****
  /* Platform-Specific Win32 Functions
!    Copyright (C) 2003  Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Platform-Specific Win32 Functions
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** The Free Software Foundation is independ
*** 24,33 ****
  
  /* Written by Mohan Embar <gnustuff@thisiscool.com>, March 2003. */
  
- #ifdef WIN32
  
  #include "config.h"
  #include "system.h"
  
  #define WIN32_LEAN_AND_MEAN
  #include <windows.h>
--- 24,36 ----
  
  /* Written by Mohan Embar <gnustuff@thisiscool.com>, March 2003. */
  
  
  #include "config.h"
  #include "system.h"
+ #include "coretypes.h"
+ #include "jcf.h"
+ 
+ #ifdef WIN32
  
  #define WIN32_LEAN_AND_MEAN
  #include <windows.h>
diff -Nrcpad gcc-3.4.3/gcc/java/xref.c gcc-4.0.0/gcc/java/xref.c
*** gcc-3.4.3/gcc/java/xref.c	Sun Jan 12 02:14:56 2003
--- gcc-4.0.0/gcc/java/xref.c	Tue Nov 23 06:52:22 2004
*************** static xref_flag_table xref_table [] = {
*** 38,73 ****
    {NULL, NULL, NULL, NULL},
  };
  
- /* Decode an xref flag value. Return 0 if the flag wasn't found. */
- 
- int
- xref_flag_value (const char *flag)
- {
-   int i;
-   for (i = 0; xref_table [i].key; i++)
-     if (!strcmp (flag, xref_table [i].key))
-       return i+1;
-   return 0;
- }
- 
- void
- xref_set_data (int flag, void *data)
- {
-   xref_table [flag-1].data = data;
- }
- 
- void *
- xref_get_data (int flag)
- {
-   return xref_table [flag-1].data;
- }
- 
- void
- xref_set_current_fp (FILE *fp)
- {
-   xref_table [flag_emit_xref-1].fp = fp;
- }
- 
  /* Branch to the right xref "back-end".  */
  
  void
--- 38,43 ----
*************** expand_xref (tree node)
*** 87,92 ****
  
    (*current_expand) (fp, node);
  }
- 
- /* Implementation of the xref back-ends. */
- 
--- 57,59 ----
diff -Nrcpad gcc-3.4.3/gcc/java/xref.h gcc-4.0.0/gcc/java/xref.h
*** gcc-3.4.3/gcc/java/xref.h	Thu Jan  9 23:16:56 2003
--- gcc-4.0.0/gcc/java/xref.h	Tue Nov 23 06:52:22 2004
*************** of Sun Microsystems, Inc. in the United 
*** 24,48 ****
  The Free Software Foundation is independent of Sun Microsystems, Inc.  */
  
  /* Exported functions. */
- int xref_flag_value (const char *);
  void expand_xref (tree);
- void xref_set_data (int, void *);
- void *xref_get_data (int);
- void xref_set_current_fp (FILE *);
- 
- /* flag_emit_xref range of possible values. */
- 
- enum {
-   XREF_NONE = 0
- };
  
  /* 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;
- 
- #define XREF_GET_DATA(FLAG, T) ((T)xref_get_data (FLAG))
--- 24,35 ----
diff -Nrcpad gcc-3.4.3/gcc/java/zextract.c gcc-4.0.0/gcc/java/zextract.c
*** gcc-3.4.3/gcc/java/zextract.c	Sun Jan 12 02:14:56 2003
--- gcc-4.0.0/gcc/java/zextract.c	Sat Jul 24 00:03:28 2004
***************
*** 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
     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
     Free Software Foundation, Inc.
  
  This file is part of GCC.
*************** static ush makeword(const uch *b)
*** 236,242 ****
  /* Function makelong() */
  /***********************/
  
! static ulg makelong(const uch *sig)
  {
      /*
       * Convert intel style 'long' variable to non-Intel non-16-bit
--- 236,243 ----
  /* Function makelong() */
  /***********************/
  
! static ulg
! makelong (const uch *sig)
  {
      /*
       * Convert intel style 'long' variable to non-Intel non-16-bit
*************** find_zip_file_start (int fd, long offset
*** 263,269 ****
    if (read (fd, buffer, LREC_SIZE + 4) != LREC_SIZE + 4)
      return -1;
  
!   if (buffer[0] != 'P' || strncmp (&buffer[1], LOCAL_HDR_SIG, 3))
      return -1;
  
    filename_length = makeword (&buffer[4 + L_FILENAME_LENGTH]);
--- 264,270 ----
    if (read (fd, buffer, LREC_SIZE + 4) != LREC_SIZE + 4)
      return -1;
  
!   if (buffer[0] != 'P' || strncmp ((const char *) &buffer[1], LOCAL_HDR_SIG, 3))
      return -1;
  
    filename_length = makeword (&buffer[4 + L_FILENAME_LENGTH]);
*************** read_zip_archive (ZipFile *zipf)
*** 286,293 ****
      return -1;
    if (read (zipf->fd, buffer, ECREC_SIZE+4) != ECREC_SIZE+4)
      return -2;
!   zipf->count = makeword(&buffer[TOTAL_ENTRIES_CENTRAL_DIR]);
!   zipf->dir_size = makelong(&buffer[SIZE_CENTRAL_DIRECTORY]);
  #define ALLOC xmalloc
    /* Allocate 1 more to allow appending '\0' to last filename. */
    zipf->central_directory = ALLOC (zipf->dir_size+1);
--- 287,294 ----
      return -1;
    if (read (zipf->fd, buffer, ECREC_SIZE+4) != ECREC_SIZE+4)
      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
    /* Allocate 1 more to allow appending '\0' to last filename. */
    zipf->central_directory = ALLOC (zipf->dir_size+1);
*************** read_zip_archive (ZipFile *zipf)
*** 305,313 ****
    printf ("total_entries_central_dir = %d\n",
          makeword(&buffer[TOTAL_ENTRIES_CENTRAL_DIR]));
    printf ("size_central_directory = %d\n",
!         makelong(&buffer[SIZE_CENTRAL_DIRECTORY]));
    printf ("offset_start_central_directory = %d\n",
!         makelong(&buffer[OFFSET_START_CENTRAL_DIRECTORY]));
    printf ("zipfile_comment_length = %d\n",
          makeword(&buffer[ZIPFILE_COMMENT_LENGTH]));
  #endif
--- 306,314 ----
    printf ("total_entries_central_dir = %d\n",
          makeword(&buffer[TOTAL_ENTRIES_CENTRAL_DIR]));
    printf ("size_central_directory = %d\n",
!         makelong((const uch *) &buffer[SIZE_CENTRAL_DIRECTORY]));
    printf ("offset_start_central_directory = %d\n",
!         makelong((const uch *) &buffer[OFFSET_START_CENTRAL_DIRECTORY]));
    printf ("zipfile_comment_length = %d\n",
          makeword(&buffer[ZIPFILE_COMMENT_LENGTH]));
  #endif
*************** read_zip_archive (ZipFile *zipf)
*** 318,328 ****
      {
        ZipDirectory *zipd = (ZipDirectory*)(dir_ptr + dir_last_pad);
        int compression_method = (int) dir_ptr[4+C_COMPRESSION_METHOD];
!       long size = makelong (&dir_ptr[4+C_COMPRESSED_SIZE]);
!       long uncompressed_size = makelong (&dir_ptr[4+C_UNCOMPRESSED_SIZE]);
!       long filename_length = makeword (&dir_ptr[4+C_FILENAME_LENGTH]);
!       long extra_field_length = makeword (&dir_ptr[4+C_EXTRA_FIELD_LENGTH]);
!       long file_offset = makelong (&dir_ptr[4+C_RELATIVE_OFFSET_LOCAL_HEADER]);
        int unpadded_direntry_length;
        if ((dir_ptr-zipf->central_directory)+filename_length+CREC_SIZE+4>zipf->dir_size)
  	return -1;
--- 319,329 ----
      {
        ZipDirectory *zipd = (ZipDirectory*)(dir_ptr + dir_last_pad);
        int compression_method = (int) dir_ptr[4+C_COMPRESSION_METHOD];
!       long size = makelong ((const uch *) &dir_ptr[4+C_COMPRESSED_SIZE]);
!       long uncompressed_size = makelong ((const uch *) &dir_ptr[4+C_UNCOMPRESSED_SIZE]);
!       long filename_length = makeword ((const uch *) &dir_ptr[4+C_FILENAME_LENGTH]);
!       long extra_field_length = makeword ((const uch *) &dir_ptr[4+C_EXTRA_FIELD_LENGTH]);
!       long file_offset = makelong ((const uch *) &dir_ptr[4+C_RELATIVE_OFFSET_LOCAL_HEADER]);
        int unpadded_direntry_length;
        if ((dir_ptr-zipf->central_directory)+filename_length+CREC_SIZE+4>zipf->dir_size)
  	return -1;
diff -Nrcpad gcc-3.4.3/libffi/.cvsignore gcc-4.0.0/libffi/.cvsignore
*** gcc-3.4.3/libffi/.cvsignore	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/.cvsignore	Tue Jun 15 07:42:07 2004
***************
*** 0 ****
--- 1 ----
+ autom4te.cache
diff -Nrcpad gcc-3.4.3/libffi/ChangeLog gcc-4.0.0/libffi/ChangeLog
*** gcc-3.4.3/libffi/ChangeLog	Fri Nov  5 03:34:32 2004
--- gcc-4.0.0/libffi/ChangeLog	Thu Apr 21 05:19:57 2005
***************
*** 1,12 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
  2004-10-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
  	PR other/18138
  	* testsuite/lib/libffi-dg.exp: Accept more than one multilib libgcc.
  
  2004-09-14  H.J. Lu  <hongjiu.lu@intel.com>
  
  	PR libgcj/17465
--- 1,180 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
! 
! 2005-02-22  Andrew Haley  <aph@redhat.com>
! 
! 	* src/powerpc/ffi.c (ffi_prep_cif_machdep): Bump alignment to
! 	odd-numbered register pairs for 64-bit integer types.
! 
! 2005-02-23  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	PR libffi/20104
! 	* testsuite/libffi.call/return_ll1.c: New test case.
! 
! 2005-02-11  Janis Johnson  <janis187@us.ibm.com>
! 
! 	* testsuite/libffi.call/cls_align_longdouble.c: Remove dg-options.
! 	* testsuite/libffi.call/float.c: Ditto.
! 	* testsuite/libffi.call/float2.c: Ditto.
! 	* testsuite/libffi.call/float3.c: Ditto.
! 
! 2005-02-08  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* src/frv/ffitarget.h: Remove PPC stuff which does not belong to frv.
! 
! 2005-01-12  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	* testsuite/libffi.special/special.exp (cxx_options): Add
! 	-shared-libgcc.
! 
! 2004-12-31  Richard Henderson  <rth@redhat.com>
! 
! 	* src/types.c (FFI_AGGREGATE_TYPEDEF): Remove.
! 	(FFI_TYPEDEF): Rename from FFI_INTEGRAL_TYPEDEF.  Replace size and
! 	offset parameters with a type parameter; deduce size and structure
! 	alignment.  Update all users.
! 
! 2004-12-31  Richard Henderson  <rth@redhat.com>
! 
! 	* 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.
! 
! 2004-12-27  Richard Henderson  <rth@redhat.com>
! 
! 	* src/x86/unix64.S: Fix typo in unwind info.
! 
! 2004-12-25  Richard Henderson  <rth@redhat.com>
! 
! 	* src/x86/ffi64.c (struct register_args): Rename from stackLayout.
! 	(enum x86_64_reg_class): Add X86_64_COMPLEX_X87_CLASS.
! 	(merge_classes): Check for it.
! 	(SSE_CLASS_P): New.
! 	(classify_argument): Pass byte_offset by value; perform all updates
! 	inside struct case.
! 	(examine_argument): Add classes argument; handle
! 	X86_64_COMPLEX_X87_CLASS.
! 	(ffi_prep_args): Merge into ...
! 	(ffi_call): ... here.  Share stack frame with ffi_call_unix64.
! 	(ffi_prep_cif_machdep): Setup cif->flags for proper structure return.
! 	(ffi_fill_return_value): Remove.
! 	(ffi_prep_closure): Remove dead assert.
! 	(ffi_closure_unix64_inner): Rename from ffi_closure_UNIX64_inner.
! 	Rewrite to use struct register_args instead of va_list.  Create
! 	flags for handling structure returns.
! 	* src/x86/unix64.S: Remove dead strings.
! 	(ffi_call_unix64): Rename from ffi_call_UNIX64.  Rewrite to share
! 	stack frame with ffi_call.  Handle structure returns properly.
! 	(float2sse, floatfloat2sse, double2sse): Remove.
! 	(sse2float, sse2double, sse2floatfloat): Remove.
! 	(ffi_closure_unix64): Rename from ffi_closure_UNIX64.  Rewrite
! 	to handle structure returns properly.
! 
! 2004-12-08  David Edelsohn  <edelsohn@gnu.org>
! 
! 	* Makefile.am (AM_MAKEFLAGS): Remove duplicate LIBCFLAGS and
! 	PICFLAG.
! 	* Makefile.in: Regenerated.
! 
! 2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.
! 	* configure, aclocal.m4, Makefile.in: Regenerate.
! 	* include/Makefile.in, testsuite/Makefile.in: Regenerate.
! 
! 2004-11-29  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate for libtool change.
! 
! 2004-11-25  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate for libtool reversion.
! 
! 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure: Regenerate for libtool change.
! 
! 2004-11-23  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
! 
! 	* testsuite/lib/libffi-dg.exp: Use new procs in target-libpath.exp.
! 
! 2004-11-23  Richard Sandiford  <rsandifo@redhat.com>
! 
! 	* src/mips/o32.S (ffi_call_O32, ffi_closure_O32): Use jalr instead
! 	of jal.  Use an absolute encoding for the frame information.
! 
! 2004-11-23  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* Makefile.am: Remove no-dependencies.  Add ACLOCAL_AMFLAGS.
! 	* acinclude.m4: Delete logic for sincludes.
! 	* aclocal.m4, Makefile.in, configure: Regenerate.
! 	* include/Makefile: Likewise.
! 	* testsuite/Makefile: Likewise.
! 
! 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
! 
! 	* src/sparc/ffi.c (ffi_prep_closure): Align doubles and 64-bit integers
! 	on a 8-byte boundary.
! 	* src/sparc/v8.S (ffi_closure_v8): Reserve frame space for arguments.
! 
! 2004-10-27  Richard Earnshaw  <rearnsha@arm.com>
! 
! 	* src/arm/ffi.c (ffi_prep_cif_machdep): Handle functions that return
! 	long long values.  Round stack allocation to a multiple of 8 bytes
! 	for ATPCS compatibility.
! 	* src/arm/sysv.S (ffi_call_SYSV): Rework to avoid use of APCS register
! 	names.  Handle returning long long types.  Add Thumb and interworking
! 	support.  Improve soft-float code.
! 
! 2004-10-27  Richard Earnshaw  <rearnsha@arm.com>
! 
! 	* testsuite/lib/libffi-db.exp (load_gcc_lib): New function.
! 	(libffi_exit): New function.
! 	(libffi_init): Build the testglue wrapper if needed.
  
  2004-10-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
  	PR other/18138
  	* testsuite/lib/libffi-dg.exp: Accept more than one multilib libgcc.
  
+ 2004-10-25  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+ 
+ 	* src/m32r/libffitarget.h (FFI_CLOSURES): Set to 0.
+ 
+ 2004-10-20  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* src/sh/sysv.S (ffi_call_SYSV): Don't align for double data.
+ 	* testsuite/libffi.call/float3.c: New test case.
+ 
+ 2004-10-18  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* src/sh/ffi.c (ffi_prep_closure): Set T bit in trampoline for
+ 	the function returning a structure pointed with R2.
+ 	* src/sh/sysv.S (ffi_closure_SYSV): Use R2 as the pointer to
+ 	the structure return value if T bit set.  Emit position
+ 	independent code and EH data if PIC.
+ 
+ 2004-10-13  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+ 
+ 	* Makefile.am: Add m32r support.
+ 	* configure.ac: Likewise.
+ 	* Makefile.in: Regenerate.
+ 	* confiugre: Regenerate.
+ 	* src/types.c: Add m32r port to FFI_INTERNAL_TYPEDEF
+ 	(uint64, sint64, double, longdouble)
+ 	* src/m32r: New directory.
+ 	* src/m32r/ffi.c: New file.
+ 	* src/m32r/sysv.S: Likewise.
+ 	* src/m32r/ffitarget.h: Likewise.
+ 
+ 2004-10-02  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* testsuite/libffi.call/negint.c: New test case.
+ 
  2004-09-14  H.J. Lu  <hongjiu.lu@intel.com>
  
  	PR libgcj/17465
***************
*** 15,27 ****
  	LD_LIBRARY64_PATH, LD_LIBRARY_PATH_32, LD_LIBRARY_PATH_64 and
  	DYLD_LIBRARY_PATH.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
  2004-06-10  Jakub Jelinek  <jakub@redhat.com>
  
--- 183,376 ----
  	LD_LIBRARY64_PATH, LD_LIBRARY_PATH_32, LD_LIBRARY_PATH_64 and
  	DYLD_LIBRARY_PATH.
  
! 2004-09-05  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* testsuite/libffi.call/many_win32.c: Remove whitespaces.
! 	* testsuite/libffi.call/promotion.c: Likewise.
! 	* testsuite/libffi.call/return_ll.c: Remove unused var. Cleanup
! 	whitespaces.
! 	* testsuite/libffi.call/return_sc.c: Likewise.
! 	* testsuite/libffi.call/return_uc.c: Likewise.
  
! 2004-09-05  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* src/powerpc/darwin.S: Fix comments and identation.
! 	* src/powerpc/darwin_closure.S: Likewise.
! 
! 2004-09-02  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* src/powerpc/ffi_darwin.c: Add flag for longdouble return values.
! 	(ffi_prep_args): Handle longdouble arguments.
! 	(ffi_prep_cif_machdep): Set flags for longdouble. Calculate space for
! 	longdouble.
! 	(ffi_closure_helper_DARWIN): Add closure handling for longdouble.
! 	* src/powerpc/darwin.S (_ffi_call_DARWIN): Add handling of longdouble
! 	values.
! 	* src/powerpc/darwin_closure.S (_ffi_closure_ASM): Likewise.
! 	* src/types.c: Defined longdouble size and alignment for darwin.
! 
! 2004-09-02  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* src/powerpc/aix.S: Remove whitespaces.
! 	* src/powerpc/aix_closure.S: Likewise.
! 	* src/powerpc/asm.h: Likewise.
! 	* src/powerpc/ffi.c: Likewise.
! 	* src/powerpc/ffitarget.h: Likewise.
! 	* src/powerpc/linux64.S: Likewise.
! 	* src/powerpc/linux64_closure.S: Likewise.
! 	* src/powerpc/ppc_closure.S: Likewise.
! 	* src/powerpc/sysv.S: Likewise.
! 
! 2004-08-30  Anthony Green  <green@redhat.com>
! 
! 	* Makefile.am: Add frv support.
! 	* Makefile.in, testsuite/Makefile.in: Rebuilt.
! 	* configure.ac: Read configure.host.
! 	* configure.in: Read configure.host.
! 	* configure.host: New file.  frv-elf needs libgloss.
! 	* include/ffi.h.in: Force ffi_closure to have a nice big (8)
! 	alignment.  This is needed to frv and shouldn't harm the others.
! 	* include/ffi_common.h (ALIGN_DOWN): New macro.
! 	* src/frv/ffi.c, src/frv/ffitarget.h, src/frv/eabi.S: New files.
! 
! 2004-08-24  David Daney  <daney@avtrex.com>
! 
! 	* testsuite/libffi.call/closure_fn0.c: Xfail mips64* instead of mips*.
! 	* testsuite/libffi.call/closure_fn1.c: Likewise.
! 	* testsuite/libffi.call/closure_fn2.c  Likewise.
! 	* testsuite/libffi.call/closure_fn3.c: Likewise.
! 	* testsuite/libffi.call/closure_fn4.c: Likewise.
! 	* testsuite/libffi.call/closure_fn5.c: Likewise.
! 	* testsuite/libffi.call/cls_18byte.c: Likewise.
! 	* testsuite/libffi.call/cls_19byte.c: Likewise.
! 	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
! 	* testsuite/libffi.call/cls_20byte.c: Likewise.
! 	* testsuite/libffi.call/cls_20byte1.c: Likewise.
! 	* testsuite/libffi.call/cls_24byte.c: Likewise.
! 	* testsuite/libffi.call/cls_2byte.c: Likewise.
! 	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
! 	* testsuite/libffi.call/cls_3byte1.c: Likewise.
! 	* testsuite/libffi.call/cls_3byte2.c: Likewise.
! 	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
! 	* testsuite/libffi.call/cls_4byte.c: Likewise.
! 	* testsuite/libffi.call/cls_64byte.c: Likewise.
! 	* testsuite/libffi.call/cls_6byte.c: Likewise.
! 	* testsuite/libffi.call/cls_7byte.c: Likewise.
! 	* testsuite/libffi.call/cls_8byte.c: Likewise.
! 	* testsuite/libffi.call/cls_9byte1.c: Likewise.
! 	* testsuite/libffi.call/cls_9byte2.c: Likewise.
! 	* testsuite/libffi.call/cls_align_double.c: Likewise.
! 	* testsuite/libffi.call/cls_align_float.c: Likewise.
! 	* testsuite/libffi.call/cls_align_longdouble.c: Likewise.
! 	* testsuite/libffi.call/cls_align_pointer.c: Likewise.
! 	* testsuite/libffi.call/cls_align_sint16.c: Likewise.
! 	* testsuite/libffi.call/cls_align_sint32.c: Likewise.
! 	* testsuite/libffi.call/cls_align_sint64.c: Likewise.
! 	* testsuite/libffi.call/cls_align_uint16.c: Likewise.
! 	* testsuite/libffi.call/cls_align_uint32.c: Likewise.
! 	* testsuite/libffi.call/cls_align_uint64.c: Likewise.
! 	* testsuite/libffi.call/cls_double.c: Likewise.
! 	* testsuite/libffi.call/cls_float.c: Likewise.
! 	* testsuite/libffi.call/cls_multi_schar.c: Likewise.
! 	* testsuite/libffi.call/cls_multi_sshort.c: Likewise.
! 	* testsuite/libffi.call/cls_multi_sshortchar.c: Likewise.
! 	* testsuite/libffi.call/cls_multi_uchar.c: Likewise.
! 	* testsuite/libffi.call/cls_multi_ushort.c: Likewise.
! 	* testsuite/libffi.call/cls_multi_ushortchar.c: Likewise.
! 	* testsuite/libffi.call/cls_schar.c: Likewise.
! 	* testsuite/libffi.call/cls_sint.c: Likewise.
! 	* testsuite/libffi.call/cls_sshort.c: Likewise.
! 	* testsuite/libffi.call/cls_uchar.c: Likewise.
! 	* testsuite/libffi.call/cls_uint.c: Likewise.
! 	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
! 	* testsuite/libffi.call/cls_ushort.c: Likewise.
! 	* testsuite/libffi.call/nested_struct.c: Likewise.
! 	* testsuite/libffi.call/nested_struct1.c: Likewise.
! 	* testsuite/libffi.call/nested_struct2.c: Likewise.
! 	* testsuite/libffi.call/nested_struct3.c: Likewise.
! 	* testsuite/libffi.call/problem1.c: Likewise.
! 	* testsuite/libffi.special/unwindtest.cc: Likewise.
! 	* testsuite/libffi.call/cls_12byte.c: Likewise and set return value
! 	to zero.
! 	* testsuite/libffi.call/cls_16byte.c: Likewise.
! 	* testsuite/libffi.call/cls_5byte.c: Likewise.
! 
! 2004-08-23  David Daney <daney@avtrex.com>
! 
! 	PR libgcj/13141
! 	* src/mips/ffitarget.h (FFI_O32_SOFT_FLOAT): New ABI.
! 	* src/mips/ffi.c (ffi_prep_args): Fix alignment calculation.
! 	(ffi_prep_cif_machdep): Handle FFI_O32_SOFT_FLOAT floating point
! 	parameters and return types.
! 	(ffi_call): Handle FFI_O32_SOFT_FLOAT ABI.
! 	(ffi_prep_closure): Ditto.
! 	(ffi_closure_mips_inner_O32): Handle FFI_O32_SOFT_FLOAT ABI, fix
! 	alignment calculations.
! 	* src/mips/o32.S (ffi_closure_O32): Don't use floating point
! 	instructions if FFI_O32_SOFT_FLOAT, make stack frame ABI compliant.
! 
! 2004-08-14  Casey Marshall <csm@gnu.org>
! 
! 	* src/mips/ffi.c (ffi_pref_cif_machdep): set `cif->flags' to
! 	contain `FFI_TYPE_UINT64' as return type for any 64-bit
! 	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.
! 	(ffi_closure_O32): new function.
! 	Added DWARF-2 unwind info for both functions.
! 
! 2004-08-10  Andrew Haley  <aph@redhat.com>
! 
! 	* src/x86/ffi64.c (ffi_prep_args ): 8-align all stack arguments.
! 
! 2004-08-01  Robert Millan  <robertmh@gnu.org>
! 
! 	* configure.ac: Detect knetbsd-gnu and kfreebsd-gnu.
! 	* configure: Regenerate.
! 
! 2004-07-30  Maciej W. Rozycki  <macro@linux-mips.org>
! 
! 	* acinclude.m4 (AC_FUNC_MMAP_BLACKLIST): Check for <sys/mman.h>
! 	and mmap() explicitly instead of relying on preset autoconf cache
! 	variables.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regenerate.
! 
! 2004-07-11  Ulrich Weigand  <uweigand@de.ibm.com>
! 
! 	* src/s390/ffi.c (ffi_prep_args): Fix C aliasing violation.
! 	(ffi_check_float_struct): Remove unused prototype.
! 
! 2004-06-30  Geoffrey Keating  <geoffk@apple.com>
! 
! 	* src/powerpc/ffi_darwin.c (flush_icache): ';' is a comment
! 	character on Darwin, use '\n\t' instead.
! 
! 2004-06-26  Matthias Klose  <doko@debian.org>
! 
! 	* libtool-version: Fix typo in revision/age.
! 
! 2004-06-17  Matthias Klose  <doko@debian.org>
! 
! 	* libtool-version: New.
! 	* Makefile.am (libffi_la_LDFLAGS): Use -version-info for soname.
! 	* Makefile.in: Regenerate.
! 
! 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.am: Remove useless multilib rules.
! 	* Makefile.in: Regenerate.
! 	* aclocal.m4: Regenerate with automake 1.8.5.
! 	* configure.ac: Remove useless multilib configury.
! 	* configure: Regenerate.
! 
! 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* .cvsignore: New file.
  
  2004-06-10  Jakub Jelinek  <jakub@redhat.com>
  
***************
*** 30,51 ****
  	(ffi_closure_UNIX): Fix f14/f15 adjustment if FLOAT_SZ is ever
  	changed from 8.
  
  2004-04-26  Joe Buck <jbuck@welsh-buck.org>
  
  	Bug 15093
! 	* configure.in: Test for existence of mmap and sys/mman.h before
  	checking blacklist.  Fix suggested by Jim Wilson.
  	* configure: Regenerate.
  	
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
! 2004-03-12  Alan Modra  <amodra@bigpond.net.au>
  
  	* src/powerpc/ffi.c (ffi_prep_args64): Correct long double handling.
! 	(ffi_prep_cif_machdep <FFI_LINUX64>): Correct long double function
! 	return and long double arg handling.
  	(ffi_closure_helper_LINUX64): Formatting.  Delete unused "ng" var.
  	Use "end_pfr" instead of "nf".  Correct long double handling.
  	Localise "temp".
--- 379,511 ----
  	(ffi_closure_UNIX): Fix f14/f15 adjustment if FLOAT_SZ is ever
  	changed from 8.
  
+ 2004-06-06  Sean McNeil  <sean@mcneil.com>
+ 
+ 	* configure.ac: Add x86_64-*-freebsd* support.
+ 	* configure: Regenerate.
+ 
  2004-04-26  Joe Buck <jbuck@welsh-buck.org>
  
  	Bug 15093
! 	* configure.ac: Test for existence of mmap and sys/mman.h before
  	checking blacklist.  Fix suggested by Jim Wilson.
  	* configure: Regenerate.
+ 
+ 2004-04-26  Matt Austern  <austern@apple.com>
+ 
+ 	* 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
! 	error. Reported by Thomas Heller <theller@python.net>.
! 	* testsuite/libffi.call/cls_multi_sshort.c (main): Likewise.
! 	* testsuite/libffi.call/cls_multi_ushort.c (main): Likewise.
  
! 2004-03-20  Matthias Klose  <doko@debian.org>
! 
! 	* src/pa/linux.S: Fix typo.
! 
! 2004-03-19  Matthias Klose  <doko@debian.org>
! 
! 	* Makefile.am: Update.
! 	* Makefile.in: Regenerate.
! 	* src/pa/ffi.h.in: Remove.
! 	* src/pa/ffitarget.h: New file.
! 
! 2004-02-10  Randolph Chung  <tausq@debian.org>
! 
! 	* Makefile.am: Add PA support.
! 	* Makefile.in: Regenerate.
! 	* include/Makefile.in: Regenerate.
! 	* configure.ac: Add PA target.
! 	* configure: Regenerate.
! 	* src/pa/ffi.c: New file.
! 	* src/pa/ffi.h.in: Add PA support.
! 	* src/pa/linux.S: New file.
! 	* prep_cif.c: Add PA support.
! 
! 2004-03-16  Hosaka Yuji  <hos@tamanegi.org>
! 
! 	* src/types.c: Fix alignment size of X86_WIN32 case int64 and
! 	double.
! 	* src/x86/ffi.c (ffi_prep_args): Replace ecif->cif->rtype->type
! 	with ecif->cif->flags.
! 	(ffi_call, ffi_prep_incoming_args_SYSV): Replace cif->rtype->type
! 	with cif->flags.
! 	(ffi_prep_cif_machdep): Add X86_WIN32 struct case.
! 	(ffi_closure_SYSV): Add 1 or 2-bytes struct case for X86_WIN32.
! 	* src/x86/win32.S (retstruct1b, retstruct2b, sc_retstruct1b,
! 	sc_retstruct2b): Add for 1 or 2-bytes struct case.
! 
! 2004-03-15 Kelley Cook <kcook@gcc.gnu.org>
! 
! 	* configure.in: Rename file to ...
! 	* configure.ac: ... this.
! 	* fficonfig.h.in: Regenerate.
! 	* Makefile.in: Regenerate.
! 	* include/Makefile.in: Regenerate.
! 	* testsuite/Makefile.in: Regenerate.
! 
! 2004-03-12  Matt Austern  <austern@apple.com>
! 
! 	* src/powerpc/darwin.S: Fix EH information so it corresponds to
! 	changes in EH format resulting from addition of linkonce support.
! 	* src/powerpc/darwin_closure.S: Likewise.
! 
! 2004-03-11  Andreas Tobler  <a.tobler@schweiz.ch>
! 	    Paolo Bonzini  <bonzini@gnu.org>
! 
! 	* Makefile.am (AUTOMAKE_OPTIONS): Set them.
! 	Remove VPATH. Remove rules for object files. Remove multilib support.
! 	(AM_CCASFLAGS): Add.
! 	* configure.in (AC_CONFIG_HEADERS): Relace AM_CONFIG_HEADER.
! 	(AC_PREREQ): Bump version to 2.59.
! 	(AC_INIT): Fill with version info and bug address.
! 	(ORIGINAL_LD_FOR_MULTILIBS): Remove.
! 	(AM_ENABLE_MULTILIB): Use this instead of AC_ARG_ENABLE.
! 	De-precious CC so that the right flags are passed down to multilibs.
! 	(AC_MSG_ERROR): Replace obsolete macro AC_ERROR.
! 	(AC_CONFIG_FILES): Replace obsolete macro AC_LINK_FILES.
! 	(AC_OUTPUT): Reorganize the output with AC_CONFIG_COMMANDS.
! 	* configure: Rebuilt.
! 	* aclocal.m4: Likewise.
! 	* Makefile.in, include/Makefile.in, testsuite/Makefile.in: Likewise.
! 	* fficonfig.h.in: Likewise.
! 
! 2004-03-11  Andreas Schwab  <schwab@suse.de>
! 
! 	* src/ia64/ffi.c (ffi_prep_incoming_args_UNIX): Get floating point
! 	arguments from fp registers only for the first 8 parameter slots.
! 	Don't convert a float parameter when passed in memory.
! 
! 2004-03-09  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* configure: Regenerate for config/accross.m4 correction.
! 
! 2004-02-25  Matt Kraai  <kraai@alumni.cmu.edu>
! 
! 	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Change
! 	ecif->cif->bytes to bytes.
! 	(ffi_prep_cif_machdep): Add braces around nested if statement.
! 
! 2004-02-09  Alan Modra  <amodra@bigpond.net.au>
! 
! 	* src/types.c (pointer): POWERPC64 has 8 byte pointers.
  
  	* src/powerpc/ffi.c (ffi_prep_args64): Correct long double handling.
! 	(ffi_closure_helper_LINUX64): Fix typo.
! 	* testsuite/libffi.call/cls_align_longdouble.c: Pass -mlong-double-128
! 	for powerpc64-*-*.
! 	* testsuite/libffi.call/float.c: Likewise.
! 	* testsuite/libffi.call/float2.c: Likewise.
! 
! 2004-02-08  Alan Modra  <amodra@bigpond.net.au>
! 
! 	* src/powerpc/ffi.c (ffi_prep_cif_machdep <FFI_LINUX64>): Correct
! 	long double function return and long double arg handling.
  	(ffi_closure_helper_LINUX64): Formatting.  Delete unused "ng" var.
  	Use "end_pfr" instead of "nf".  Correct long double handling.
  	Localise "temp".
***************
*** 54,66 ****
  	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Allocate
  	space for long double return value.  Adjust stack frame and offsets.
  	Load f2 long double return.
! 	* testsuite/libffi.call/cls_align_longdouble.c: Pass -mlong-double-128
! 	for powerpc64-*-*.
! 	* testsuite/libffi.call/float.c: Likewise.
! 	* testsuite/libffi.call/float2.c: Likewise.
  
  	* src/types.c: Use 16 byte long double for POWERPC64.
- 	(pointer): POWERPC64 has 8 byte pointers.
  
  2004-01-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
--- 514,523 ----
  	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Allocate
  	space for long double return value.  Adjust stack frame and offsets.
  	Load f2 long double return.
! 
! 2004-02-07  Alan Modra  <amodra@bigpond.net.au>
  
  	* src/types.c: Use 16 byte long double for POWERPC64.
  
  2004-01-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
***************
*** 102,107 ****
--- 559,569 ----
  	* testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Treat result
  	value as of type ffi_arg, not unsigned int.
  
+ 2004-01-21  Michael Ritzert  <ritzert@t-online.de>
+ 
+ 	* ffi64.c (ffi_prep_args): Cast the RHS of an assignment instead
+ 	of the LHS.
+ 
  2004-01-12  Andreas Tobler  <a.tobler@schweiz.ch>
  
  	* testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_32 for
***************
*** 525,531 ****
  
  	* src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct
  	passing correctly.
! 	
  2003-09-09  Alan Modra  <amodra@bigpond.net.au>
  
  	* configure: Regenerate.
--- 987,993 ----
  
  	* src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct
  	passing correctly.
! 
  2003-09-09  Alan Modra  <amodra@bigpond.net.au>
  
  	* configure: Regenerate.
***************
*** 534,540 ****
  
  	* Makefile.am: Remove build rules for ffitest.
  	* Makefile.in: Rebuilt.
! 	
  2003-09-04  Andreas Tobler  <a.tobler@schweiz.ch>
  
  	* src/java_raw_api.c: Include <stdlib.h> to fix compiler warning
--- 996,1002 ----
  
  	* Makefile.am: Remove build rules for ffitest.
  	* Makefile.in: Rebuilt.
! 
  2003-09-04  Andreas Tobler  <a.tobler@schweiz.ch>
  
  	* src/java_raw_api.c: Include <stdlib.h> to fix compiler warning
***************
*** 549,555 ****
  
  	* testsuite/Makefile.am: New file.
  	* testsuite/Makefile.in: Built
! 	* testsuite/lib/libffi-dg.exp: New file. 
  	* testsuite/config/default.exp: Likewise.
  	* testsuite/libffi.call/call.exp: Likewise.
  	* testsuite/libffi.call/ffitest.h: Likewise.
--- 1011,1017 ----
  
  	* testsuite/Makefile.am: New file.
  	* testsuite/Makefile.in: Built
! 	* testsuite/lib/libffi-dg.exp: New file.
  	* testsuite/config/default.exp: Likewise.
  	* testsuite/libffi.call/call.exp: Likewise.
  	* testsuite/libffi.call/ffitest.h: Likewise.
***************
*** 601,612 ****
  	* testsuite/libffi.call/struct6.c: Likewise.
  	* testsuite/libffi.call/struct7.c: Likewise.
  	* testsuite/libffi.call/struct8.c: Likewise.
! 	* testsuite/libffi.call/struct9.c: Likewise.	
  	* testsuite/libffi.special/special.exp: New file.
  	* testsuite/libffi.special/ffitestcxx.h: Likewise.
  	* testsuite/libffi.special/unwindtest.cc: Likewise.
  
! 	
  2003-08-13  Kaz Kojima  <kkojima@gcc.gnu.org>
  
  	* src/sh/ffi.c (OFS_INT16): Set 0 for little endian case.  Update
--- 1063,1074 ----
  	* testsuite/libffi.call/struct6.c: Likewise.
  	* testsuite/libffi.call/struct7.c: Likewise.
  	* testsuite/libffi.call/struct8.c: Likewise.
! 	* testsuite/libffi.call/struct9.c: Likewise.
  	* testsuite/libffi.special/special.exp: New file.
  	* testsuite/libffi.special/ffitestcxx.h: Likewise.
  	* testsuite/libffi.special/unwindtest.cc: Likewise.
  
! 
  2003-08-13  Kaz Kojima  <kkojima@gcc.gnu.org>
  
  	* src/sh/ffi.c (OFS_INT16): Set 0 for little endian case.  Update
***************
*** 750,760 ****
  
  	* libffi/src/powerpc/darwin_closure.S:
  	Fix alignement bug, allocate 8 bytes for the result.
! 	* libffi/src/powerpc/aix_closure.S: 
  	Likewise.
  	* libffi/src/powerpc/ffi_darwin.c:
  	Update stackframe description for aix/darwin_closure.S.
!  
  2003-02-06  Jakub Jelinek  <jakub@redhat.com>
  
  	* src/s390/ffi.c (ffi_closure_helper_SYSV): Add hidden visibility
--- 1212,1222 ----
  
  	* libffi/src/powerpc/darwin_closure.S:
  	Fix alignement bug, allocate 8 bytes for the result.
! 	* libffi/src/powerpc/aix_closure.S:
  	Likewise.
  	* libffi/src/powerpc/ffi_darwin.c:
  	Update stackframe description for aix/darwin_closure.S.
! 
  2003-02-06  Jakub Jelinek  <jakub@redhat.com>
  
  	* src/s390/ffi.c (ffi_closure_helper_SYSV): Add hidden visibility
***************
*** 767,773 ****
  	for changes to the libffi_basedir definition.
  	(libffi_basedir): Remove ${srcdir} from value and include trailing
  	slash if nonempty.
! 	
          * configure: Regenerate.
  
  2003-01-29  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
--- 1229,1235 ----
  	for changes to the libffi_basedir definition.
  	(libffi_basedir): Remove ${srcdir} from value and include trailing
  	slash if nonempty.
! 
          * configure: Regenerate.
  
  2003-01-29  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
diff -Nrcpad gcc-3.4.3/libffi/Makefile.am gcc-4.0.0/libffi/Makefile.am
*** gcc-3.4.3/libffi/Makefile.am	Tue Oct 21 19:01:53 2003
--- gcc-4.0.0/libffi/Makefile.am	Wed Dec  8 15:48:53 2004
***************
*** 1,6 ****
  ## Process this with automake to create Makefile.in
  
! AUTOMAKE_OPTIONS = cygnus
  
  SUBDIRS = include testsuite
  
--- 1,7 ----
  ## 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 \
*** 9,14 ****
--- 10,16 ----
  	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 \
  	src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \
  	src/powerpc/ffi.c src/powerpc/sysv.S \
  	src/powerpc/linux64.S src/powerpc/linux64_closure.S \
*************** EXTRA_DIST = LICENSE ChangeLog.v1 \
*** 22,31 ****
  	src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \
  	src/sparc/ffi.c \
  	src/x86/ffi.c src/x86/sysv.S src/x86/win32.S \
! 	src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h
! 
! 
! VPATH = @srcdir@:@srcdir@/src:@srcdir@/src/@TARGETDIR@
  
  ## ################################################################
  
--- 24,31 ----
  	src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \
  	src/sparc/ffi.c \
  	src/x86/ffi.c src/x86/sysv.S src/x86/win32.S \
! 	src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \
! 	src/pa/ffi.c src/pa/linux.S src/frv/eabi.S src/frv/ffitarget.h
  
  ## ################################################################
  
*************** AM_MAKEFLAGS = \
*** 66,240 ****
  	"CC=$(CC)" \
  	"CXX=$(CXX)" \
  	"LD=$(LD)" \
- 	"LIBCFLAGS=$(LIBCFLAGS)" \
  	"NM=$(NM)" \
- 	"PICFLAG=$(PICFLAG)" \
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
  MAKEOVERRIDES=
  
- # Multilib support variables.
- MULTISRCTOP =
- MULTIBUILDTOP =
- MULTIDIRS =
- MULTISUBDIR =
- MULTIDO = true
- MULTICLEAN = true
- 
  toolexeclib_LTLIBRARIES = libffi.la
  noinst_LTLIBRARIES = libffi_convenience.la
  
  
  
- TARGET_SRC_MIPS_IRIX = src/mips/ffi.c src/mips/o32.S src/mips/n32.S
- TARGET_SRC_MIPS_LINUX = src/mips/ffi.c src/mips/o32.S
- TARGET_SRC_X86 = src/x86/ffi.c src/x86/sysv.S
- TARGET_SRC_X86_WIN32 = src/x86/ffi.c src/x86/win32.S
- TARGET_SRC_SPARC = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
- TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S
- TARGET_SRC_IA64 = src/ia64/ffi.c src/ia64/unix.S
- TARGET_SRC_M68K = src/m68k/ffi.c src/m68k/sysv.S
- TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
- TARGET_SRC_POWERPC_AIX = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
- TARGET_SRC_POWERPC_DARWIN = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
- TARGET_SRC_ARM =  src/arm/sysv.S src/arm/ffi.c
- TARGET_SRC_S390 =  src/s390/sysv.S src/s390/ffi.c
- TARGET_SRC_X86_64 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
- TARGET_SRC_SH =  src/sh/sysv.S src/sh/ffi.c
- TARGET_SRC_SH64 =  src/sh64/sysv.S src/sh64/ffi.c
- 
- ##libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c $(TARGET_SRC_@TARGET@)
- ## Work around automake deficiency
- libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c \
- 		src/raw_api.c src/java_raw_api.c
  if MIPS_IRIX
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_IRIX)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_IRIX)
  endif
  if MIPS_LINUX
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_LINUX)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_LINUX)
  endif
  if X86
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_X86)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_X86)
  endif
  if X86_WIN32
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_X86_WIN32)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_X86_WIN32)
  endif
  if SPARC
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_SPARC)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_SPARC)
  endif
  if ALPHA
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
  endif
  if IA64
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_IA64)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_IA64)
  endif
  if M68K
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
  endif
  if POWERPC
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC)
  endif
  if POWERPC_AIX
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_AIX)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_AIX)
  endif
  if POWERPC_DARWIN
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_DARWIN)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_DARWIN)
  endif
  if ARM
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
  endif
  if S390
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_S390)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_S390)
  endif
  if X86_64
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_X86_64)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_X86_64)
  endif
  if SH
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_SH)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_SH)
  endif
  if SH64
! libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_SH64)
! libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_SH64)
  endif
  
! AM_CFLAGS = -Wall -g -fexceptions
! 
! libffi_la_LDFLAGS = -release $(VERSION) 
! 
! INCLUDES = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
! 
! # Override these rules so that object files get put in the correct 
! # subdirectories. 
! .c.o:
! 	$(LTCOMPILE) -c -o $@ $<
! 
! .s.o:
! 	$(LTCOMPILE) -c -o $@ $<
! 
! .S.o:
! 	$(LTCOMPILE) -c -o $@ $<
! 
! .c.lo:
! 	$(LTCOMPILE) -c -o $@ $<
! 
! .s.lo:
! 	$(LTCOMPILE) -c -o $@ $<
! 
! .S.lo:
! 	$(LTCOMPILE) -c -o $@ $<
! 
! # Multilib support.
! .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
! 	maintainer-clean-multi
! 
! all-recursive: all-multi
! install-recursive: install-multi
! mostlyclean-recursive: mostlyclean-multi
! clean-recursive: clean-multi
! distclean-recursive: distclean-multi
! maintainer-clean-recursive: maintainer-clean-multi
! 
! all-multi:
! 	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
! install-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
! mostlyclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean
! clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean
! distclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
! maintainer-clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
! 
! 
! ## ################################################################
! 
! # Our hacked automake doesn't clean subdirectories properly.
! mostlyclean-am: mostlyclean-sub
! mostlyclean-sub:
! 	-rm -f src/*.o src/*.lo
! 	-rm -f src/@TARGETDIR@/*.o src/@TARGETDIR@/*.lo
  
! clean-am: clean-sub
! clean-sub:
! 	-rm -rf src/.libs src/_libs
! 	-rm -rf src/@TARGETDIR@/.libs src/@TARGETDIR@/_libs
  
  
--- 66,149 ----
  	"CC=$(CC)" \
  	"CXX=$(CXX)" \
  	"LD=$(LD)" \
  	"NM=$(NM)" \
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
  MAKEOVERRIDES=
  
  toolexeclib_LTLIBRARIES = libffi.la
  noinst_LTLIBRARIES = libffi_convenience.la
  
+ libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \
+ 		src/raw_api.c src/java_raw_api.c
  
+ nodist_libffi_la_SOURCES =
  
  if MIPS_IRIX
! nodist_libffi_la_SOURCES += src/mips/ffi.c src/mips/o32.S src/mips/n32.S
  endif
  if MIPS_LINUX
! nodist_libffi_la_SOURCES += src/mips/ffi.c src/mips/o32.S
  endif
  if X86
! nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/sysv.S
  endif
  if X86_WIN32
! nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win32.S
  endif
  if SPARC
! nodist_libffi_la_SOURCES += src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
  endif
  if ALPHA
! nodist_libffi_la_SOURCES += src/alpha/ffi.c src/alpha/osf.S
  endif
  if IA64
! nodist_libffi_la_SOURCES += src/ia64/ffi.c src/ia64/unix.S
! endif
! if M32R
! nodist_libffi_la_SOURCES += src/m32r/sysv.S src/m32r/ffi.c
  endif
  if M68K
! nodist_libffi_la_SOURCES += src/m68k/ffi.c src/m68k/sysv.S
  endif
  if POWERPC
! nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
  endif
  if POWERPC_AIX
! nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
  endif
  if POWERPC_DARWIN
! nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
  endif
  if ARM
! nodist_libffi_la_SOURCES += src/arm/sysv.S src/arm/ffi.c
! endif
! if FRV
! nodist_libffi_la_SOURCES += src/frv/eabi.S src/frv/ffi.c
  endif
  if S390
! nodist_libffi_la_SOURCES += src/s390/sysv.S src/s390/ffi.c
  endif
  if X86_64
! nodist_libffi_la_SOURCES += src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
  endif
  if SH
! nodist_libffi_la_SOURCES += src/sh/sysv.S src/sh/ffi.c
  endif
  if SH64
! nodist_libffi_la_SOURCES += src/sh64/sysv.S src/sh64/ffi.c
! endif
! if PA
! nodist_libffi_la_SOURCES += src/pa/linux.S src/pa/ffi.c
  endif
  
! libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
! nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
  
! AM_CFLAGS = -Wall -g -fexceptions
  
+ libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
  
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
diff -Nrcpad gcc-3.4.3/libffi/Makefile.in gcc-4.0.0/libffi/Makefile.in
*** gcc-3.4.3/libffi/Makefile.in	Sat Nov 22 13:41:32 2003
--- gcc-4.0.0/libffi/Makefile.in	Wed Dec  8 15:48:53 2004
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999 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.
--- 1,8 ----
! # 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.
***************
*** 10,105 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
  
! SHELL = @SHELL@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
! prefix = @prefix@
! exec_prefix = @exec_prefix@
! 
! bindir = @bindir@
! sbindir = @sbindir@
! libexecdir = @libexecdir@
! datadir = @datadir@
! sysconfdir = @sysconfdir@
! sharedstatedir = @sharedstatedir@
! localstatedir = @localstatedir@
! libdir = @libdir@
! infodir = @infodir@
! mandir = @mandir@
! includedir = @includedir@
! oldincludedir = /usr/include
! 
! DESTDIR =
! 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = .
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
! AS = @AS@
  CC = @CC@
! CXX = @CXX@
! CXXCPP = @CXXCPP@
! DLLTOOL = @DLLTOOL@
  EXEEXT = @EXEEXT@
! GCJ = @GCJ@
! GCJFLAGS = @GCJFLAGS@
  HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
! OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  RANLIB = @RANLIB@
  SHELL = @SHELL@
  STRIP = @STRIP@
  TARGET = @TARGET@
  TARGETDIR = @TARGETDIR@
  VERSION = @VERSION@
  gcc_version = @gcc_version@
! libffi_basedir = @libffi_basedir@
  tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
! 
! AUTOMAKE_OPTIONS = cygnus
! 
  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/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \
  	src/powerpc/ffi.c src/powerpc/sysv.S \
  	src/powerpc/linux64.S src/powerpc/linux64_closure.S \
--- 12,344 ----
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
+ @SET_MAKE@
  
! SOURCES = $(libffi_la_SOURCES) $(nodist_libffi_la_SOURCES) $(libffi_convenience_la_SOURCES) $(nodist_libffi_convenience_la_SOURCES)
  
  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@
+ @MIPS_IRIX_TRUE@am__append_1 = src/mips/ffi.c src/mips/o32.S src/mips/n32.S
+ @MIPS_LINUX_TRUE@am__append_2 = src/mips/ffi.c src/mips/o32.S
+ @X86_TRUE@am__append_3 = src/x86/ffi.c src/x86/sysv.S
+ @X86_WIN32_TRUE@am__append_4 = src/x86/ffi.c src/x86/win32.S
+ @SPARC_TRUE@am__append_5 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
+ @ALPHA_TRUE@am__append_6 = src/alpha/ffi.c src/alpha/osf.S
+ @IA64_TRUE@am__append_7 = src/ia64/ffi.c src/ia64/unix.S
+ @M32R_TRUE@am__append_8 = src/m32r/sysv.S src/m32r/ffi.c
+ @M68K_TRUE@am__append_9 = src/m68k/ffi.c src/m68k/sysv.S
+ @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 \
+ 	$(srcdir)/../ltmain.sh $(srcdir)/../missing \
+ 	$(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
+ 	$(srcdir)/Makefile.in $(srcdir)/fficonfig.h.in \
+ 	$(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 \
+  configure.lineno configure.status.lineno
+ mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+ CONFIG_HEADER = fficonfig.h
+ CONFIG_CLEAN_FILES =
+ 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)$(toolexeclibdir)"
+ toolexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
+ libffi_la_LIBADD =
+ am__dirstamp = $(am__leading_dot)dirstamp
+ am_libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo src/types.lo \
+ 	src/raw_api.lo src/java_raw_api.lo
+ @MIPS_IRIX_TRUE@am__objects_1 = src/mips/ffi.lo src/mips/o32.lo \
+ @MIPS_IRIX_TRUE@	src/mips/n32.lo
+ @MIPS_LINUX_TRUE@am__objects_2 = src/mips/ffi.lo src/mips/o32.lo
+ @X86_TRUE@am__objects_3 = src/x86/ffi.lo src/x86/sysv.lo
+ @X86_WIN32_TRUE@am__objects_4 = src/x86/ffi.lo src/x86/win32.lo
+ @SPARC_TRUE@am__objects_5 = src/sparc/ffi.lo src/sparc/v8.lo \
+ @SPARC_TRUE@	src/sparc/v9.lo
+ @ALPHA_TRUE@am__objects_6 = src/alpha/ffi.lo src/alpha/osf.lo
+ @IA64_TRUE@am__objects_7 = src/ia64/ffi.lo src/ia64/unix.lo
+ @M32R_TRUE@am__objects_8 = src/m32r/sysv.lo src/m32r/ffi.lo
+ @M68K_TRUE@am__objects_9 = src/m68k/ffi.lo src/m68k/sysv.lo
+ @POWERPC_TRUE@am__objects_10 = src/powerpc/ffi.lo src/powerpc/sysv.lo \
+ @POWERPC_TRUE@	src/powerpc/ppc_closure.lo \
+ @POWERPC_TRUE@	src/powerpc/linux64.lo \
+ @POWERPC_TRUE@	src/powerpc/linux64_closure.lo
+ @POWERPC_AIX_TRUE@am__objects_11 = src/powerpc/ffi_darwin.lo \
+ @POWERPC_AIX_TRUE@	src/powerpc/aix.lo \
+ @POWERPC_AIX_TRUE@	src/powerpc/aix_closure.lo
+ @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.
+ depcomp = $(SHELL) $(top_srcdir)/../depcomp
+ am__depfiles_maybe = depfiles
+ CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
+ LTCCASCOMPILE = $(LIBTOOL) --mode=compile $(CCAS) $(AM_CCASFLAGS) \
+ 	$(CCASFLAGS)
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+ 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ 	$(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+ LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+ SOURCES = $(libffi_la_SOURCES) $(nodist_libffi_la_SOURCES) \
+ 	$(libffi_convenience_la_SOURCES) \
+ 	$(nodist_libffi_convenience_la_SOURCES)
+ DIST_SOURCES = $(libffi_la_SOURCES) $(libffi_convenience_la_SOURCES)
+ MULTISRCTOP = 
+ MULTIBUILDTOP = 
+ MULTIDIRS = 
+ MULTISUBDIR = 
+ MULTIDO = true
+ MULTICLEAN = true
+ 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)
+ 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@
+ ALLOCA = @ALLOCA@
+ ALPHA_FALSE = @ALPHA_FALSE@
+ ALPHA_TRUE = @ALPHA_TRUE@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
  AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
! ARM_FALSE = @ARM_FALSE@
! ARM_TRUE = @ARM_TRUE@
! AUTOCONF = @AUTOCONF@
! AUTOHEADER = @AUTOHEADER@
! AUTOMAKE = @AUTOMAKE@
! AWK = @AWK@
  CC = @CC@
! CCAS = @CCAS@
! CCASFLAGS = @CCASFLAGS@
! CCDEPMODE = @CCDEPMODE@
! CFLAGS = @CFLAGS@
! CPP = @CPP@
! CPPFLAGS = @CPPFLAGS@
! CYGPATH_W = @CYGPATH_W@
! DEFS = @DEFS@
! DEPDIR = @DEPDIR@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXEEXT = @EXEEXT@
! FRV_FALSE = @FRV_FALSE@
! FRV_TRUE = @FRV_TRUE@
  HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
+ IA64_FALSE = @IA64_FALSE@
+ IA64_TRUE = @IA64_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ M32R_FALSE = @M32R_FALSE@
+ M32R_TRUE = @M32R_TRUE@
+ M68K_FALSE = @M68K_FALSE@
+ M68K_TRUE = @M68K_TRUE@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
! MIPS_IRIX_FALSE = @MIPS_IRIX_FALSE@
! MIPS_IRIX_TRUE = @MIPS_IRIX_TRUE@
! MIPS_LINUX_FALSE = @MIPS_LINUX_FALSE@
! MIPS_LINUX_TRUE = @MIPS_LINUX_TRUE@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PA_FALSE = @PA_FALSE@
+ PA_TRUE = @PA_TRUE@
+ POWERPC_AIX_FALSE = @POWERPC_AIX_FALSE@
+ POWERPC_AIX_TRUE = @POWERPC_AIX_TRUE@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+ POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
+ POWERPC_FALSE = @POWERPC_FALSE@
+ POWERPC_TRUE = @POWERPC_TRUE@
  RANLIB = @RANLIB@
+ S390_FALSE = @S390_FALSE@
+ S390_TRUE = @S390_TRUE@
+ SET_MAKE = @SET_MAKE@
+ SH64_FALSE = @SH64_FALSE@
+ SH64_TRUE = @SH64_TRUE@
  SHELL = @SHELL@
+ SH_FALSE = @SH_FALSE@
+ SH_TRUE = @SH_TRUE@
+ SPARC_FALSE = @SPARC_FALSE@
+ SPARC_TRUE = @SPARC_TRUE@
  STRIP = @STRIP@
  TARGET = @TARGET@
  TARGETDIR = @TARGETDIR@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
  VERSION = @VERSION@
+ X86_64_FALSE = @X86_64_FALSE@
+ X86_64_TRUE = @X86_64_TRUE@
+ X86_FALSE = @X86_FALSE@
+ X86_TRUE = @X86_TRUE@
+ X86_WIN32_FALSE = @X86_WIN32_FALSE@
+ X86_WIN32_TRUE = @X86_WIN32_TRUE@
+ ac_ct_CC = @ac_ct_CC@
+ 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__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@
+ 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@
! 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@
! multi_basedir = @multi_basedir@
! 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@
  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 \
  	src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \
  	src/powerpc/ffi.c src/powerpc/sysv.S \
  	src/powerpc/linux64.S src/powerpc/linux64_closure.S \
*************** EXTRA_DIST = LICENSE ChangeLog.v1 \
*** 113,122 ****
  	src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \
  	src/sparc/ffi.c \
  	src/x86/ffi.c src/x86/sysv.S src/x86/win32.S \
! 	src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h
! 
  
- VPATH = @srcdir@:@srcdir@/src:@srcdir@/src/@TARGETDIR@
  
  # 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
--- 352,360 ----
  	src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \
  	src/sparc/ffi.c \
  	src/x86/ffi.c src/x86/sysv.S src/x86/win32.S \
! 	src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \
! 	src/pa/ffi.c src/pa/linux.S src/frv/eabi.S src/frv/ffitarget.h
  
  
  # 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
*************** AM_MAKEFLAGS = \
*** 151,484 ****
  	"CC=$(CC)" \
  	"CXX=$(CXX)" \
  	"LD=$(LD)" \
- 	"LIBCFLAGS=$(LIBCFLAGS)" \
  	"NM=$(NM)" \
- 	"PICFLAG=$(PICFLAG)" \
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
- 
  MAKEOVERRIDES = 
- 
- # Multilib support variables.
- MULTISRCTOP = 
- MULTIBUILDTOP = 
- MULTIDIRS = 
- MULTISUBDIR = 
- MULTIDO = true
- MULTICLEAN = true
- 
  toolexeclib_LTLIBRARIES = libffi.la
  noinst_LTLIBRARIES = libffi_convenience.la
! 
! TARGET_SRC_MIPS_IRIX = src/mips/ffi.c src/mips/o32.S src/mips/n32.S
! TARGET_SRC_MIPS_LINUX = src/mips/ffi.c src/mips/o32.S
! TARGET_SRC_X86 = src/x86/ffi.c src/x86/sysv.S
! TARGET_SRC_X86_WIN32 = src/x86/ffi.c src/x86/win32.S
! TARGET_SRC_SPARC = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
! TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S
! TARGET_SRC_IA64 = src/ia64/ffi.c src/ia64/unix.S
! TARGET_SRC_M68K = src/m68k/ffi.c src/m68k/sysv.S
! TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
! TARGET_SRC_POWERPC_AIX = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
! TARGET_SRC_POWERPC_DARWIN = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
! TARGET_SRC_ARM = src/arm/sysv.S src/arm/ffi.c
! TARGET_SRC_S390 = src/s390/sysv.S src/s390/ffi.c
! TARGET_SRC_X86_64 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
! TARGET_SRC_SH = src/sh/sysv.S src/sh/ffi.c
! TARGET_SRC_SH64 = src/sh64/sysv.S src/sh64/ffi.c
! 
! libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c \
  		src/raw_api.c src/java_raw_api.c
  
! @MIPS_IRIX_TRUE@libffi_la_SOURCES = @MIPS_IRIX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_IRIX)
! @MIPS_LINUX_TRUE@libffi_la_SOURCES = @MIPS_LINUX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_LINUX)
! @X86_TRUE@libffi_la_SOURCES = @X86_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86)
! @X86_WIN32_TRUE@libffi_la_SOURCES = @X86_WIN32_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86_WIN32)
! @SPARC_TRUE@libffi_la_SOURCES = @SPARC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SPARC)
! @ALPHA_TRUE@libffi_la_SOURCES = @ALPHA_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
! @IA64_TRUE@libffi_la_SOURCES = @IA64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_IA64)
! @M68K_TRUE@libffi_la_SOURCES = @M68K_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
! @POWERPC_TRUE@libffi_la_SOURCES = @POWERPC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC)
! @POWERPC_AIX_TRUE@libffi_la_SOURCES = @POWERPC_AIX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_AIX)
! @POWERPC_DARWIN_TRUE@libffi_la_SOURCES = @POWERPC_DARWIN_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_DARWIN)
! @ARM_TRUE@libffi_la_SOURCES = @ARM_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
! @S390_TRUE@libffi_la_SOURCES = @S390_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_S390)
! @X86_64_TRUE@libffi_la_SOURCES = @X86_64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86_64)
! @SH_TRUE@libffi_la_SOURCES = @SH_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SH)
! @SH64_TRUE@libffi_la_SOURCES = @SH64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SH64)
! @MIPS_IRIX_TRUE@libffi_convenience_la_SOURCES = @MIPS_IRIX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_IRIX)
! @MIPS_LINUX_TRUE@libffi_convenience_la_SOURCES = @MIPS_LINUX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_LINUX)
! @X86_TRUE@libffi_convenience_la_SOURCES = @X86_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86)
! @X86_WIN32_TRUE@libffi_convenience_la_SOURCES = @X86_WIN32_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86_WIN32)
! @SPARC_TRUE@libffi_convenience_la_SOURCES = @SPARC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SPARC)
! @ALPHA_TRUE@libffi_convenience_la_SOURCES = @ALPHA_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
! @IA64_TRUE@libffi_convenience_la_SOURCES = @IA64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_IA64)
! @M68K_TRUE@libffi_convenience_la_SOURCES = @M68K_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
! @POWERPC_TRUE@libffi_convenience_la_SOURCES = @POWERPC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC)
! @POWERPC_AIX_TRUE@libffi_convenience_la_SOURCES = @POWERPC_AIX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_AIX)
! @POWERPC_DARWIN_TRUE@libffi_convenience_la_SOURCES = @POWERPC_DARWIN_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_DARWIN)
! @ARM_TRUE@libffi_convenience_la_SOURCES = @ARM_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
! @S390_TRUE@libffi_convenience_la_SOURCES = @S390_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_S390)
! @X86_64_TRUE@libffi_convenience_la_SOURCES = @X86_64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86_64)
! @SH_TRUE@libffi_convenience_la_SOURCES = @SH_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SH)
! @SH64_TRUE@libffi_convenience_la_SOURCES = @SH64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SH64)
! 
  AM_CFLAGS = -Wall -g -fexceptions
  
- libffi_la_LDFLAGS = -release $(VERSION) 
- 
- INCLUDES = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
- ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
- mkinstalldirs = $(SHELL) $(top_srcdir)/${libffi_basedir}../mkinstalldirs
- CONFIG_HEADER = fficonfig.h
- CONFIG_CLEAN_FILES = 
- LTLIBRARIES =  $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
- 
- 
- DEFS = @DEFS@ -I. -I$(srcdir) -I.
- CPPFLAGS = @CPPFLAGS@
- LDFLAGS = @LDFLAGS@
- LIBS = @LIBS@
- libffi_convenience_la_LDFLAGS = 
- libffi_convenience_la_LIBADD = 
- @X86_64_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo \
- @X86_64_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \
- @X86_64_TRUE@src/java_raw_api.lo src/x86/ffi64.lo src/x86/unix64.lo \
- @X86_64_TRUE@src/x86/ffi.lo src/x86/sysv.lo
- @M68K_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @M68K_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @M68K_TRUE@src/m68k/ffi.lo src/m68k/sysv.lo
- @POWERPC_DARWIN_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo \
- @POWERPC_DARWIN_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \
- @POWERPC_DARWIN_TRUE@src/java_raw_api.lo src/powerpc/ffi_darwin.lo \
- @POWERPC_DARWIN_TRUE@src/powerpc/darwin.lo \
- @POWERPC_DARWIN_TRUE@src/powerpc/darwin_closure.lo
- @ALPHA_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo \
- @ALPHA_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \
- @ALPHA_TRUE@src/java_raw_api.lo src/alpha/ffi.lo src/alpha/osf.lo
- @ARM_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @ARM_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @ARM_TRUE@src/arm/sysv.lo src/arm/ffi.lo
- @POWERPC_AIX_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo \
- @POWERPC_AIX_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \
- @POWERPC_AIX_TRUE@src/java_raw_api.lo src/powerpc/ffi_darwin.lo \
- @POWERPC_AIX_TRUE@src/powerpc/aix.lo src/powerpc/aix_closure.lo
- @POWERPC_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo \
- @POWERPC_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \
- @POWERPC_TRUE@src/java_raw_api.lo src/powerpc/ffi.lo \
- @POWERPC_TRUE@src/powerpc/sysv.lo src/powerpc/ppc_closure.lo \
- @POWERPC_TRUE@src/powerpc/linux64.lo src/powerpc/linux64_closure.lo
- @MIPS_LINUX_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo \
- @MIPS_LINUX_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \
- @MIPS_LINUX_TRUE@src/java_raw_api.lo src/mips/ffi.lo src/mips/o32.lo
- @SH_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @SH_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo src/sh/sysv.lo \
- @SH_TRUE@src/sh/ffi.lo
- @X86_WIN32_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo \
- @X86_WIN32_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \
- @X86_WIN32_TRUE@src/java_raw_api.lo src/x86/ffi.lo src/x86/win32.lo
- @SPARC_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo \
- @SPARC_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \
- @SPARC_TRUE@src/java_raw_api.lo src/sparc/ffi.lo src/sparc/v8.lo \
- @SPARC_TRUE@src/sparc/v9.lo
- @SH64_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @SH64_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @SH64_TRUE@src/sh64/sysv.lo src/sh64/ffi.lo
- @S390_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @S390_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @S390_TRUE@src/s390/sysv.lo src/s390/ffi.lo
- @MIPS_IRIX_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo \
- @MIPS_IRIX_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \
- @MIPS_IRIX_TRUE@src/java_raw_api.lo src/mips/ffi.lo src/mips/o32.lo \
- @MIPS_IRIX_TRUE@src/mips/n32.lo
- @X86_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @X86_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @X86_TRUE@src/x86/ffi.lo src/x86/sysv.lo
- @IA64_TRUE@libffi_convenience_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @IA64_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @IA64_TRUE@src/ia64/ffi.lo src/ia64/unix.lo
- libffi_la_LIBADD = 
- @X86_64_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @X86_64_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @X86_64_TRUE@src/x86/ffi64.lo src/x86/unix64.lo src/x86/ffi.lo \
- @X86_64_TRUE@src/x86/sysv.lo
- @M68K_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @M68K_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @M68K_TRUE@src/m68k/ffi.lo src/m68k/sysv.lo
- @POWERPC_DARWIN_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @POWERPC_DARWIN_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @POWERPC_DARWIN_TRUE@src/powerpc/ffi_darwin.lo src/powerpc/darwin.lo \
- @POWERPC_DARWIN_TRUE@src/powerpc/darwin_closure.lo
- @ALPHA_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @ALPHA_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @ALPHA_TRUE@src/alpha/ffi.lo src/alpha/osf.lo
- @ARM_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo src/types.lo \
- @ARM_TRUE@src/raw_api.lo src/java_raw_api.lo src/arm/sysv.lo \
- @ARM_TRUE@src/arm/ffi.lo
- @POWERPC_AIX_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @POWERPC_AIX_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @POWERPC_AIX_TRUE@src/powerpc/ffi_darwin.lo src/powerpc/aix.lo \
- @POWERPC_AIX_TRUE@src/powerpc/aix_closure.lo
- @POWERPC_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @POWERPC_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @POWERPC_TRUE@src/powerpc/ffi.lo src/powerpc/sysv.lo \
- @POWERPC_TRUE@src/powerpc/ppc_closure.lo src/powerpc/linux64.lo \
- @POWERPC_TRUE@src/powerpc/linux64_closure.lo
- @MIPS_LINUX_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @MIPS_LINUX_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @MIPS_LINUX_TRUE@src/mips/ffi.lo src/mips/o32.lo
- @SH_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo src/types.lo \
- @SH_TRUE@src/raw_api.lo src/java_raw_api.lo src/sh/sysv.lo \
- @SH_TRUE@src/sh/ffi.lo
- @X86_WIN32_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @X86_WIN32_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @X86_WIN32_TRUE@src/x86/ffi.lo src/x86/win32.lo
- @SPARC_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @SPARC_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @SPARC_TRUE@src/sparc/ffi.lo src/sparc/v8.lo src/sparc/v9.lo
- @SH64_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @SH64_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @SH64_TRUE@src/sh64/sysv.lo src/sh64/ffi.lo
- @S390_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @S390_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @S390_TRUE@src/s390/sysv.lo src/s390/ffi.lo
- @MIPS_IRIX_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @MIPS_IRIX_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @MIPS_IRIX_TRUE@src/mips/ffi.lo src/mips/o32.lo src/mips/n32.lo
- @X86_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo src/types.lo \
- @X86_TRUE@src/raw_api.lo src/java_raw_api.lo src/x86/ffi.lo \
- @X86_TRUE@src/x86/sysv.lo
- @IA64_TRUE@libffi_la_OBJECTS =  src/debug.lo src/prep_cif.lo \
- @IA64_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \
- @IA64_TRUE@src/ia64/ffi.lo src/ia64/unix.lo
- CFLAGS = @CFLAGS@
- COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
- LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
- CCLD = $(CC)
- LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
- DIST_COMMON =  README ./stamp-h.in ChangeLog Makefile.am Makefile.in \
- acinclude.m4 aclocal.m4 configure configure.in fficonfig.h.in
- 
- 
- DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
- 
- TAR = gnutar
- GZIP_ENV = --best
- SOURCES = $(libffi_convenience_la_SOURCES) $(libffi_la_SOURCES)
- OBJECTS = $(libffi_convenience_la_OBJECTS) $(libffi_la_OBJECTS)
- 
- all: all-redirect
  .SUFFIXES:
! .SUFFIXES: .S .c .lo .o .obj .s
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
! 
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
! 
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in  acinclude.m4
! 	cd $(srcdir) && $(ACLOCAL)
  
! config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
  	$(SHELL) ./config.status --recheck
! $(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
  	cd $(srcdir) && $(AUTOCONF)
  
! fficonfig.h: stamp-h
! 	@if test ! -f $@; then \
! 		rm -f stamp-h; \
! 		$(MAKE) stamp-h; \
! 	else :; fi
! stamp-h: $(srcdir)/fficonfig.h.in $(top_builddir)/config.status
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES= CONFIG_HEADERS=fficonfig.h \
! 	     $(SHELL) ./config.status
! 	@echo timestamp > stamp-h 2> /dev/null
! $(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in
  	@if test ! -f $@; then \
! 		rm -f $(srcdir)/stamp-h.in; \
! 		$(MAKE) $(srcdir)/stamp-h.in; \
  	else :; fi
- $(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) 
- 	cd $(top_srcdir) && $(AUTOHEADER)
- 	@echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
  
! mostlyclean-hdr:
! 
! clean-hdr:
  
  distclean-hdr:
! 	-rm -f fficonfig.h
! 
! maintainer-clean-hdr:
! 
! mostlyclean-noinstLTLIBRARIES:
  
  clean-noinstLTLIBRARIES:
  	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
! 
! distclean-noinstLTLIBRARIES:
! 
! maintainer-clean-noinstLTLIBRARIES:
! 
! mostlyclean-toolexeclibLTLIBRARIES:
! 
! clean-toolexeclibLTLIBRARIES:
! 	-test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES)
! 
! distclean-toolexeclibLTLIBRARIES:
! 
! maintainer-clean-toolexeclibLTLIBRARIES:
! 
  install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir)
  	@list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
  	  if test -f $$p; then \
! 	    echo "$(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \
! 	    $(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \
  	  else :; fi; \
  	done
  
  uninstall-toolexeclibLTLIBRARIES:
  	@$(NORMAL_UNINSTALL)
! 	list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
! 	  $(LIBTOOL)  --mode=uninstall rm -f $(DESTDIR)$(toolexeclibdir)/$$p; \
  	done
  
! # FIXME: We should only use cygpath when building on Windows,
! # and only if it is available.
! .c.obj:
! 	$(COMPILE) -c `cygpath -w $<`
  
  mostlyclean-compile:
- 	-rm -f *.o core *.core
  	-rm -f *.$(OBJEXT)
! 
! clean-compile:
  
  distclean-compile:
  	-rm -f *.tab.c
  
! maintainer-clean-compile:
  
  mostlyclean-libtool:
  	-rm -f *.lo
  
  clean-libtool:
  	-rm -rf .libs _libs
  
  distclean-libtool:
  
! maintainer-clean-libtool:
! 
! libffi_convenience.la: $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_DEPENDENCIES)
! 	$(LINK)  $(libffi_convenience_la_LDFLAGS) $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_LIBADD) $(LIBS)
  
! libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES)
! 	$(LINK) -rpath $(toolexeclibdir) $(libffi_la_LDFLAGS) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS)
  
  # This directory's subdirectories are mostly independent; you can cd
  # into them and run `make' without going through this Makefile.
--- 389,882 ----
  	"CC=$(CC)" \
  	"CXX=$(CXX)" \
  	"LD=$(LD)" \
  	"NM=$(NM)" \
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
  MAKEOVERRIDES = 
  toolexeclib_LTLIBRARIES = libffi.la
  noinst_LTLIBRARIES = libffi_convenience.la
! libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \
  		src/raw_api.c src/java_raw_api.c
  
! nodist_libffi_la_SOURCES = $(am__append_1) $(am__append_2) \
! 	$(am__append_3) $(am__append_4) $(am__append_5) \
! 	$(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) \
! 	$(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
+ libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+ all: fficonfig.h
+ 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
  
  .SUFFIXES:
! .SUFFIXES: .S .c .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*) \
! 	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
! 	      cd $(srcdir) && $(AUTOMAKE) --foreign  \
! 		&& exit 0; \
! 	      exit 1;; \
! 	  esac; \
! 	done; \
! 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  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)
  
! fficonfig.h: stamp-h1
  	@if test ! -f $@; then \
! 	  rm -f stamp-h1; \
! 	  $(MAKE) stamp-h1; \
  	else :; fi
  
! stamp-h1: $(srcdir)/fficonfig.h.in $(top_builddir)/config.status
! 	@rm -f stamp-h1
! 	cd $(top_builddir) && $(SHELL) ./config.status fficonfig.h
! $(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
! 	cd $(top_srcdir) && $(AUTOHEADER)
! 	rm -f stamp-h1
! 	touch $@
  
  distclean-hdr:
! 	-rm -f fficonfig.h stamp-h1
  
  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)"
  	@list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
  	  if test -f $$p; then \
! 	    f=$(am__strip_dir) \
! 	    echo " $(LIBTOOL) --mode=install $(toolexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(toolexeclibdir)/$$f'"; \
! 	    $(LIBTOOL) --mode=install $(toolexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(toolexeclibdir)/$$f"; \
  	  else :; fi; \
  	done
  
  uninstall-toolexeclibLTLIBRARIES:
  	@$(NORMAL_UNINSTALL)
! 	@set -x; list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
! 	  p=$(am__strip_dir) \
! 	  echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(toolexeclibdir)/$$p'"; \
! 	  $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(toolexeclibdir)/$$p"; \
  	done
  
! clean-toolexeclibLTLIBRARIES:
! 	-test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES)
! 	@list='$(toolexeclib_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
! src/$(am__dirstamp):
! 	@$(mkdir_p) src
! 	@: > src/$(am__dirstamp)
! src/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/$(DEPDIR)
! 	@: > src/$(DEPDIR)/$(am__dirstamp)
! src/debug.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
! src/prep_cif.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
! src/types.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
! src/raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
! src/java_raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
! src/mips/$(am__dirstamp):
! 	@$(mkdir_p) src/mips
! 	@: > src/mips/$(am__dirstamp)
! src/mips/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/mips/$(DEPDIR)
! 	@: > src/mips/$(DEPDIR)/$(am__dirstamp)
! src/mips/ffi.lo: src/mips/$(am__dirstamp) \
! 	src/mips/$(DEPDIR)/$(am__dirstamp)
! src/mips/o32.lo: src/mips/$(am__dirstamp) \
! 	src/mips/$(DEPDIR)/$(am__dirstamp)
! src/mips/n32.lo: src/mips/$(am__dirstamp) \
! 	src/mips/$(DEPDIR)/$(am__dirstamp)
! src/x86/$(am__dirstamp):
! 	@$(mkdir_p) src/x86
! 	@: > src/x86/$(am__dirstamp)
! src/x86/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/x86/$(DEPDIR)
! 	@: > src/x86/$(DEPDIR)/$(am__dirstamp)
! src/x86/ffi.lo: src/x86/$(am__dirstamp) \
! 	src/x86/$(DEPDIR)/$(am__dirstamp)
! src/x86/sysv.lo: src/x86/$(am__dirstamp) \
! 	src/x86/$(DEPDIR)/$(am__dirstamp)
! src/x86/win32.lo: src/x86/$(am__dirstamp) \
! 	src/x86/$(DEPDIR)/$(am__dirstamp)
! src/sparc/$(am__dirstamp):
! 	@$(mkdir_p) src/sparc
! 	@: > src/sparc/$(am__dirstamp)
! src/sparc/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/sparc/$(DEPDIR)
! 	@: > src/sparc/$(DEPDIR)/$(am__dirstamp)
! src/sparc/ffi.lo: src/sparc/$(am__dirstamp) \
! 	src/sparc/$(DEPDIR)/$(am__dirstamp)
! src/sparc/v8.lo: src/sparc/$(am__dirstamp) \
! 	src/sparc/$(DEPDIR)/$(am__dirstamp)
! src/sparc/v9.lo: src/sparc/$(am__dirstamp) \
! 	src/sparc/$(DEPDIR)/$(am__dirstamp)
! src/alpha/$(am__dirstamp):
! 	@$(mkdir_p) src/alpha
! 	@: > src/alpha/$(am__dirstamp)
! src/alpha/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/alpha/$(DEPDIR)
! 	@: > src/alpha/$(DEPDIR)/$(am__dirstamp)
! src/alpha/ffi.lo: src/alpha/$(am__dirstamp) \
! 	src/alpha/$(DEPDIR)/$(am__dirstamp)
! src/alpha/osf.lo: src/alpha/$(am__dirstamp) \
! 	src/alpha/$(DEPDIR)/$(am__dirstamp)
! src/ia64/$(am__dirstamp):
! 	@$(mkdir_p) src/ia64
! 	@: > src/ia64/$(am__dirstamp)
! src/ia64/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/ia64/$(DEPDIR)
! 	@: > src/ia64/$(DEPDIR)/$(am__dirstamp)
! src/ia64/ffi.lo: src/ia64/$(am__dirstamp) \
! 	src/ia64/$(DEPDIR)/$(am__dirstamp)
! src/ia64/unix.lo: src/ia64/$(am__dirstamp) \
! 	src/ia64/$(DEPDIR)/$(am__dirstamp)
! src/m32r/$(am__dirstamp):
! 	@$(mkdir_p) src/m32r
! 	@: > src/m32r/$(am__dirstamp)
! src/m32r/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/m32r/$(DEPDIR)
! 	@: > src/m32r/$(DEPDIR)/$(am__dirstamp)
! src/m32r/sysv.lo: src/m32r/$(am__dirstamp) \
! 	src/m32r/$(DEPDIR)/$(am__dirstamp)
! src/m32r/ffi.lo: src/m32r/$(am__dirstamp) \
! 	src/m32r/$(DEPDIR)/$(am__dirstamp)
! src/m68k/$(am__dirstamp):
! 	@$(mkdir_p) src/m68k
! 	@: > src/m68k/$(am__dirstamp)
! src/m68k/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/m68k/$(DEPDIR)
! 	@: > src/m68k/$(DEPDIR)/$(am__dirstamp)
! src/m68k/ffi.lo: src/m68k/$(am__dirstamp) \
! 	src/m68k/$(DEPDIR)/$(am__dirstamp)
! src/m68k/sysv.lo: src/m68k/$(am__dirstamp) \
! 	src/m68k/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/$(am__dirstamp):
! 	@$(mkdir_p) src/powerpc
! 	@: > src/powerpc/$(am__dirstamp)
! src/powerpc/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/powerpc/$(DEPDIR)
! 	@: > src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/ffi.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/sysv.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/ppc_closure.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/linux64.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/linux64_closure.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/ffi_darwin.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/aix.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/aix_closure.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/darwin.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/powerpc/darwin_closure.lo: src/powerpc/$(am__dirstamp) \
! 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
! src/arm/$(am__dirstamp):
! 	@$(mkdir_p) src/arm
! 	@: > src/arm/$(am__dirstamp)
! src/arm/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/arm/$(DEPDIR)
! 	@: > src/arm/$(DEPDIR)/$(am__dirstamp)
! src/arm/sysv.lo: src/arm/$(am__dirstamp) \
! 	src/arm/$(DEPDIR)/$(am__dirstamp)
! src/arm/ffi.lo: src/arm/$(am__dirstamp) \
! 	src/arm/$(DEPDIR)/$(am__dirstamp)
! src/frv/$(am__dirstamp):
! 	@$(mkdir_p) src/frv
! 	@: > src/frv/$(am__dirstamp)
! src/frv/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/frv/$(DEPDIR)
! 	@: > src/frv/$(DEPDIR)/$(am__dirstamp)
! src/frv/eabi.lo: src/frv/$(am__dirstamp) \
! 	src/frv/$(DEPDIR)/$(am__dirstamp)
! src/frv/ffi.lo: src/frv/$(am__dirstamp) \
! 	src/frv/$(DEPDIR)/$(am__dirstamp)
! src/s390/$(am__dirstamp):
! 	@$(mkdir_p) src/s390
! 	@: > src/s390/$(am__dirstamp)
! src/s390/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/s390/$(DEPDIR)
! 	@: > src/s390/$(DEPDIR)/$(am__dirstamp)
! src/s390/sysv.lo: src/s390/$(am__dirstamp) \
! 	src/s390/$(DEPDIR)/$(am__dirstamp)
! src/s390/ffi.lo: src/s390/$(am__dirstamp) \
! 	src/s390/$(DEPDIR)/$(am__dirstamp)
! src/x86/ffi64.lo: src/x86/$(am__dirstamp) \
! 	src/x86/$(DEPDIR)/$(am__dirstamp)
! src/x86/unix64.lo: src/x86/$(am__dirstamp) \
! 	src/x86/$(DEPDIR)/$(am__dirstamp)
! src/sh/$(am__dirstamp):
! 	@$(mkdir_p) src/sh
! 	@: > src/sh/$(am__dirstamp)
! src/sh/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/sh/$(DEPDIR)
! 	@: > src/sh/$(DEPDIR)/$(am__dirstamp)
! src/sh/sysv.lo: src/sh/$(am__dirstamp) \
! 	src/sh/$(DEPDIR)/$(am__dirstamp)
! src/sh/ffi.lo: src/sh/$(am__dirstamp) src/sh/$(DEPDIR)/$(am__dirstamp)
! src/sh64/$(am__dirstamp):
! 	@$(mkdir_p) src/sh64
! 	@: > src/sh64/$(am__dirstamp)
! src/sh64/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/sh64/$(DEPDIR)
! 	@: > src/sh64/$(DEPDIR)/$(am__dirstamp)
! src/sh64/sysv.lo: src/sh64/$(am__dirstamp) \
! 	src/sh64/$(DEPDIR)/$(am__dirstamp)
! src/sh64/ffi.lo: src/sh64/$(am__dirstamp) \
! 	src/sh64/$(DEPDIR)/$(am__dirstamp)
! src/pa/$(am__dirstamp):
! 	@$(mkdir_p) src/pa
! 	@: > src/pa/$(am__dirstamp)
! src/pa/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) src/pa/$(DEPDIR)
! 	@: > src/pa/$(DEPDIR)/$(am__dirstamp)
! src/pa/linux.lo: src/pa/$(am__dirstamp) \
! 	src/pa/$(DEPDIR)/$(am__dirstamp)
! src/pa/ffi.lo: src/pa/$(am__dirstamp) src/pa/$(DEPDIR)/$(am__dirstamp)
! libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES) 
! 	$(LINK) -rpath $(toolexeclibdir) $(libffi_la_LDFLAGS) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS)
! libffi_convenience.la: $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_DEPENDENCIES) 
! 	$(LINK)  $(libffi_convenience_la_LDFLAGS) $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_LIBADD) $(LIBS)
  
  mostlyclean-compile:
  	-rm -f *.$(OBJEXT)
! 	-rm -f src/alpha/ffi.$(OBJEXT)
! 	-rm -f src/alpha/ffi.lo
! 	-rm -f src/alpha/osf.$(OBJEXT)
! 	-rm -f src/alpha/osf.lo
! 	-rm -f src/arm/ffi.$(OBJEXT)
! 	-rm -f src/arm/ffi.lo
! 	-rm -f src/arm/sysv.$(OBJEXT)
! 	-rm -f src/arm/sysv.lo
! 	-rm -f src/debug.$(OBJEXT)
! 	-rm -f src/debug.lo
! 	-rm -f src/frv/eabi.$(OBJEXT)
! 	-rm -f src/frv/eabi.lo
! 	-rm -f src/frv/ffi.$(OBJEXT)
! 	-rm -f src/frv/ffi.lo
! 	-rm -f src/ia64/ffi.$(OBJEXT)
! 	-rm -f src/ia64/ffi.lo
! 	-rm -f src/ia64/unix.$(OBJEXT)
! 	-rm -f src/ia64/unix.lo
! 	-rm -f src/java_raw_api.$(OBJEXT)
! 	-rm -f src/java_raw_api.lo
! 	-rm -f src/m32r/ffi.$(OBJEXT)
! 	-rm -f src/m32r/ffi.lo
! 	-rm -f src/m32r/sysv.$(OBJEXT)
! 	-rm -f src/m32r/sysv.lo
! 	-rm -f src/m68k/ffi.$(OBJEXT)
! 	-rm -f src/m68k/ffi.lo
! 	-rm -f src/m68k/sysv.$(OBJEXT)
! 	-rm -f src/m68k/sysv.lo
! 	-rm -f src/mips/ffi.$(OBJEXT)
! 	-rm -f src/mips/ffi.lo
! 	-rm -f src/mips/n32.$(OBJEXT)
! 	-rm -f src/mips/n32.lo
! 	-rm -f src/mips/o32.$(OBJEXT)
! 	-rm -f src/mips/o32.lo
! 	-rm -f src/pa/ffi.$(OBJEXT)
! 	-rm -f src/pa/ffi.lo
! 	-rm -f src/pa/linux.$(OBJEXT)
! 	-rm -f src/pa/linux.lo
! 	-rm -f src/powerpc/aix.$(OBJEXT)
! 	-rm -f src/powerpc/aix.lo
! 	-rm -f src/powerpc/aix_closure.$(OBJEXT)
! 	-rm -f src/powerpc/aix_closure.lo
! 	-rm -f src/powerpc/darwin.$(OBJEXT)
! 	-rm -f src/powerpc/darwin.lo
! 	-rm -f src/powerpc/darwin_closure.$(OBJEXT)
! 	-rm -f src/powerpc/darwin_closure.lo
! 	-rm -f src/powerpc/ffi.$(OBJEXT)
! 	-rm -f src/powerpc/ffi.lo
! 	-rm -f src/powerpc/ffi_darwin.$(OBJEXT)
! 	-rm -f src/powerpc/ffi_darwin.lo
! 	-rm -f src/powerpc/linux64.$(OBJEXT)
! 	-rm -f src/powerpc/linux64.lo
! 	-rm -f src/powerpc/linux64_closure.$(OBJEXT)
! 	-rm -f src/powerpc/linux64_closure.lo
! 	-rm -f src/powerpc/ppc_closure.$(OBJEXT)
! 	-rm -f src/powerpc/ppc_closure.lo
! 	-rm -f src/powerpc/sysv.$(OBJEXT)
! 	-rm -f src/powerpc/sysv.lo
! 	-rm -f src/prep_cif.$(OBJEXT)
! 	-rm -f src/prep_cif.lo
! 	-rm -f src/raw_api.$(OBJEXT)
! 	-rm -f src/raw_api.lo
! 	-rm -f src/s390/ffi.$(OBJEXT)
! 	-rm -f src/s390/ffi.lo
! 	-rm -f src/s390/sysv.$(OBJEXT)
! 	-rm -f src/s390/sysv.lo
! 	-rm -f src/sh/ffi.$(OBJEXT)
! 	-rm -f src/sh/ffi.lo
! 	-rm -f src/sh/sysv.$(OBJEXT)
! 	-rm -f src/sh/sysv.lo
! 	-rm -f src/sh64/ffi.$(OBJEXT)
! 	-rm -f src/sh64/ffi.lo
! 	-rm -f src/sh64/sysv.$(OBJEXT)
! 	-rm -f src/sh64/sysv.lo
! 	-rm -f src/sparc/ffi.$(OBJEXT)
! 	-rm -f src/sparc/ffi.lo
! 	-rm -f src/sparc/v8.$(OBJEXT)
! 	-rm -f src/sparc/v8.lo
! 	-rm -f src/sparc/v9.$(OBJEXT)
! 	-rm -f src/sparc/v9.lo
! 	-rm -f src/types.$(OBJEXT)
! 	-rm -f src/types.lo
! 	-rm -f src/x86/ffi.$(OBJEXT)
! 	-rm -f src/x86/ffi.lo
! 	-rm -f src/x86/ffi64.$(OBJEXT)
! 	-rm -f src/x86/ffi64.lo
! 	-rm -f src/x86/sysv.$(OBJEXT)
! 	-rm -f src/x86/sysv.lo
! 	-rm -f src/x86/unix64.$(OBJEXT)
! 	-rm -f src/x86/unix64.lo
! 	-rm -f src/x86/win32.$(OBJEXT)
! 	-rm -f src/x86/win32.lo
  
  distclean-compile:
  	-rm -f *.tab.c
  
! @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/debug.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/java_raw_api.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/prep_cif.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/raw_api.Plo@am__quote@
! @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/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@
! @AMDEP_TRUE@@am__include@ @am__quote@src/m68k/$(DEPDIR)/ffi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/ffi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/ffi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_darwin.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/s390/$(DEPDIR)/ffi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/sh/$(DEPDIR)/ffi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/sh64/$(DEPDIR)/ffi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/ffi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi64.Plo@am__quote@
! 
! .S.o:
! 	$(CCASCOMPILE) -c $<
! 
! .S.obj:
! 	$(CCASCOMPILE) -c `$(CYGPATH_W) '$<'`
! 
! .S.lo:
! 	$(LTCCASCOMPILE) -c -o $@ $<
! 
! .c.o:
! @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \
! @am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
! @am__fastdepCC_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ $<
! 
! .c.obj:
! @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`; \
! @am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
! @am__fastdepCC_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
! 
! .c.lo:
! @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`; \
! @am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
! @am__fastdepCC_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Plo"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
  
  mostlyclean-libtool:
  	-rm -f *.lo
  
  clean-libtool:
  	-rm -rf .libs _libs
+ 	-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/frv/.libs src/frv/_libs
+ 	-rm -rf src/ia64/.libs src/ia64/_libs
+ 	-rm -rf src/m32r/.libs src/m32r/_libs
+ 	-rm -rf src/m68k/.libs src/m68k/_libs
+ 	-rm -rf src/mips/.libs src/mips/_libs
+ 	-rm -rf src/pa/.libs src/pa/_libs
+ 	-rm -rf src/powerpc/.libs src/powerpc/_libs
+ 	-rm -rf src/s390/.libs src/s390/_libs
+ 	-rm -rf src/sh/.libs src/sh/_libs
+ 	-rm -rf src/sh64/.libs src/sh64/_libs
+ 	-rm -rf src/sparc/.libs src/sparc/_libs
+ 	-rm -rf src/x86/.libs src/x86/_libs
  
  distclean-libtool:
+ 	-rm -f libtool
  
! # GNU Make needs to see an explicit $(MAKE) variable in the command it
! # runs to enable its job server during parallel builds.  Hence the
! # comments below.
! all-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE)
! install-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE)
  
! mostlyclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE)
! clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE)
! distclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE)
! maintainer-clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean # $(MAKE)
! uninstall-info-am:
  
  # This directory's subdirectories are mostly independent; you can cd
  # into them and run `make' without going through this Makefile.
*************** libffi.la: $(libffi_la_OBJECTS) $(libffi
*** 486,498 ****
  # (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.
! 
! @SET_MAKE@
! 
! all-recursive install-data-recursive install-exec-recursive \
! installdirs-recursive install-recursive uninstall-recursive install-info-recursive \
! check-recursive installcheck-recursive info-recursive dvi-recursive:
! 	@set fnord $(MAKEFLAGS); amf=$$2; \
  	dot_seen=no; \
  	target=`echo $@ | sed s/-recursive//`; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
--- 884,891 ----
  # (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 \
*************** check-recursive installcheck-recursive i
*** 512,524 ****
  
  mostlyclean-recursive clean-recursive distclean-recursive \
  maintainer-clean-recursive:
! 	@set fnord $(MAKEFLAGS); amf=$$2; \
  	dot_seen=no; \
! 	rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
! 	  rev="$$subdir $$rev"; \
! 	  test "$$subdir" = "." && dot_seen=yes; \
  	done; \
! 	test "$$dot_seen" = "no" && rev=". $$rev"; \
  	target=`echo $@ | sed s/-recursive//`; \
  	for subdir in $$rev; do \
  	  echo "Making $$target in $$subdir"; \
--- 905,922 ----
  
  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"; \
*************** tags-recursive:
*** 534,789 ****
  	list='$(SUBDIRS)'; for subdir in $$list; do \
  	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
  	done
  
! tags: TAGS
! 
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
  
! TAGS: tags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
!    if test "$$subdir" = .; then :; else \
! 	    test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
!    fi; \
  	done; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)fficonfig.h.in$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags fficonfig.h.in $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(PACKAGE)-$(VERSION)
! top_distdir = $(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
- 	-rm -rf $(distdir)
- 	GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
- 	mkdir $(distdir)/=build
- 	mkdir $(distdir)/=inst
- 	dc_install_base=`cd $(distdir)/=inst && pwd`; \
- 	cd $(distdir)/=build \
- 	  && ../configure --srcdir=.. --prefix=$$dc_install_base \
- 	  && $(MAKE) $(AM_MAKEFLAGS) \
- 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
- 	  && $(MAKE) $(AM_MAKEFLAGS) check \
- 	  && $(MAKE) $(AM_MAKEFLAGS) install \
- 	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
- 	  && $(MAKE) $(AM_MAKEFLAGS) dist
- 	-rm -rf $(distdir)
- 	@banner="$(distdir).tar.gz is ready for distribution"; \
- 	dashes=`echo "$$banner" | sed s/./=/g`; \
- 	echo "$$dashes"; \
- 	echo "$$banner"; \
- 	echo "$$dashes"
- dist: distdir
- 	-chmod -R a+r $(distdir)
- 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
- 	-rm -rf $(distdir)
- dist-all: distdir
- 	-chmod -R a+r $(distdir)
- 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
- 	-rm -rf $(distdir)
  distdir: $(DISTFILES)
! 	-rm -rf $(distdir)
  	mkdir $(distdir)
! 	-chmod 777 $(distdir)
! 	$(mkinstalldirs) $(distdir)/src/alpha $(distdir)/src/arm \
! 	   $(distdir)/src/m68k $(distdir)/src/mips \
! 	   $(distdir)/src/powerpc $(distdir)/src/s390 $(distdir)/src/sh \
! 	   $(distdir)/src/sh64 $(distdir)/src/sparc $(distdir)/src/x86
! 	@for file in $(DISTFILES); do \
! 	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
  	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
  	  else \
  	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
  	  fi; \
  	done
! 	for subdir in $(SUBDIRS); do \
  	  if test "$$subdir" = .; then :; else \
! 	    test -d $(distdir)/$$subdir \
! 	    || mkdir $(distdir)/$$subdir \
  	    || exit 1; \
! 	    chmod 777 $(distdir)/$$subdir; \
! 	    (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
  	      || exit 1; \
  	  fi; \
  	done
! info-am:
! info: info-recursive
! dvi-am:
! dvi: dvi-recursive
! check-am:
! check: check-recursive
! installcheck-am:
! installcheck: installcheck-recursive
! install-info-am: 
! install-info: install-info-recursive
! all-recursive-am: fficonfig.h
! 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
  
! install-exec-am: install-toolexeclibLTLIBRARIES
! install-exec: install-exec-recursive
  
! install-data-am:
! install-data: install-data-recursive
  
! install-am: all-am
! 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
! install: install-recursive
! uninstall-am: uninstall-toolexeclibLTLIBRARIES
! uninstall: uninstall-recursive
! all-am: Makefile $(LTLIBRARIES) fficonfig.h
! all-redirect: all-recursive-am
! install-strip:
! 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
  installdirs: installdirs-recursive
  installdirs-am:
! 	$(mkinstalldirs)  $(DESTDIR)$(toolexeclibdir)
  
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-hdr mostlyclean-noinstLTLIBRARIES \
! 		mostlyclean-toolexeclibLTLIBRARIES mostlyclean-compile \
! 		mostlyclean-libtool mostlyclean-tags \
! 		mostlyclean-generic
  
! mostlyclean: mostlyclean-recursive
  
! clean-am:  clean-hdr clean-noinstLTLIBRARIES \
! 		clean-toolexeclibLTLIBRARIES clean-compile \
! 		clean-libtool clean-tags clean-generic mostlyclean-am
  
! clean: clean-recursive
  
! distclean-am:  distclean-hdr distclean-noinstLTLIBRARIES \
! 		distclean-toolexeclibLTLIBRARIES distclean-compile \
! 		distclean-libtool distclean-tags distclean-generic \
! 		clean-am
! 	-rm -f libtool
  
! distclean: distclean-recursive
! 	-rm -f config.status
  
! maintainer-clean-am:  maintainer-clean-hdr \
! 		maintainer-clean-noinstLTLIBRARIES \
! 		maintainer-clean-toolexeclibLTLIBRARIES \
! 		maintainer-clean-compile maintainer-clean-libtool \
! 		maintainer-clean-tags maintainer-clean-generic \
! 		distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
! maintainer-clean: maintainer-clean-recursive
! 	-rm -f config.status
  
! .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
! mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \
! clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \
! mostlyclean-toolexeclibLTLIBRARIES distclean-toolexeclibLTLIBRARIES \
! clean-toolexeclibLTLIBRARIES maintainer-clean-toolexeclibLTLIBRARIES \
! uninstall-toolexeclibLTLIBRARIES install-toolexeclibLTLIBRARIES \
! mostlyclean-compile distclean-compile clean-compile \
! maintainer-clean-compile mostlyclean-libtool distclean-libtool \
! clean-libtool maintainer-clean-libtool install-data-recursive \
! uninstall-data-recursive install-exec-recursive \
! uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
! all-recursive check-recursive installcheck-recursive info-recursive \
! dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
! maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
! distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
! dvi-am dvi check check-am installcheck-am installcheck install-info-am \
! install-info all-recursive-am install-exec-am install-exec \
! install-data-am install-data install-am install uninstall-am uninstall \
! all-redirect all-am all installdirs-am installdirs mostlyclean-generic \
! distclean-generic clean-generic maintainer-clean-generic clean \
! mostlyclean distclean maintainer-clean
  
  
! # Override these rules so that object files get put in the correct 
! # subdirectories. 
! .c.o:
! 	$(LTCOMPILE) -c -o $@ $<
  
! .s.o:
! 	$(LTCOMPILE) -c -o $@ $<
  
! .S.o:
! 	$(LTCOMPILE) -c -o $@ $<
  
! .c.lo:
! 	$(LTCOMPILE) -c -o $@ $<
  
! .s.lo:
! 	$(LTCOMPILE) -c -o $@ $<
  
! .S.lo:
! 	$(LTCOMPILE) -c -o $@ $<
  
! # Multilib support.
! .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
! 	maintainer-clean-multi
  
! all-recursive: all-multi
! install-recursive: install-multi
! mostlyclean-recursive: mostlyclean-multi
! clean-recursive: clean-multi
! distclean-recursive: distclean-multi
! maintainer-clean-recursive: maintainer-clean-multi
  
! all-multi:
! 	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
! install-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
! mostlyclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean
! clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean
! distclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
! maintainer-clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
  
! # Our hacked automake doesn't clean subdirectories properly.
! mostlyclean-am: mostlyclean-sub
! mostlyclean-sub:
! 	-rm -f src/*.o src/*.lo
! 	-rm -f src/@TARGETDIR@/*.o src/@TARGETDIR@/*.lo
  
! clean-am: clean-sub
! clean-sub:
! 	-rm -rf src/.libs src/_libs
! 	-rm -rf src/@TARGETDIR@/.libs src/@TARGETDIR@/_libs
  
  # 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.
--- 932,1282 ----
  	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) fficonfig.h.in $(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) fficonfig.h.in $(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) fficonfig.h.in $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
! 	tags=; \
! 	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) fficonfig.h.in $(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)/../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 \
! 	  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
! 	-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 $(LTLIBRARIES) all-multi fficonfig.h
  installdirs: installdirs-recursive
  installdirs-am:
! 	for dir in "$(DESTDIR)$(toolexeclibdir)"; do \
! 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
! 	done
! 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)
! 	-rm -f src/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/$(am__dirstamp)
! 	-rm -f src/alpha/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/alpha/$(am__dirstamp)
! 	-rm -f src/arm/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/arm/$(am__dirstamp)
! 	-rm -f src/frv/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/frv/$(am__dirstamp)
! 	-rm -f src/ia64/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/ia64/$(am__dirstamp)
! 	-rm -f src/m32r/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/m32r/$(am__dirstamp)
! 	-rm -f src/m68k/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/m68k/$(am__dirstamp)
! 	-rm -f src/mips/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/mips/$(am__dirstamp)
! 	-rm -f src/pa/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/pa/$(am__dirstamp)
! 	-rm -f src/powerpc/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/powerpc/$(am__dirstamp)
! 	-rm -f src/s390/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/s390/$(am__dirstamp)
! 	-rm -f src/sh/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/sh/$(am__dirstamp)
! 	-rm -f src/sh64/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/sh64/$(am__dirstamp)
! 	-rm -f src/sparc/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/sparc/$(am__dirstamp)
! 	-rm -f src/x86/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f src/x86/$(am__dirstamp)
  
  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-multi clean-recursive
  
! clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
! 	clean-toolexeclibLTLIBRARIES mostlyclean-am
  
! 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
  
! dvi: dvi-recursive
  
! dvi-am:
  
! html: html-recursive
  
! info: info-recursive
  
! info-am:
  
! install-data-am:
  
+ install-exec-am: install-multi install-toolexeclibLTLIBRARIES
  
! install-info: install-info-recursive
  
! install-man:
  
! installcheck-am:
  
! 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
  
! mostlyclean: mostlyclean-multi mostlyclean-recursive
  
! mostlyclean-am: mostlyclean-compile mostlyclean-generic \
! 	mostlyclean-libtool
  
! pdf: pdf-recursive
  
! pdf-am:
  
! ps: ps-recursive
  
! ps-am:
  
! uninstall-am: uninstall-info-am uninstall-toolexeclibLTLIBRARIES
! 
! uninstall-info: uninstall-info-recursive
! 
! .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-multi \
! 	am--refresh check check-am clean clean-generic clean-libtool \
! 	clean-multi clean-noinstLTLIBRARIES 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-hdr distclean-libtool distclean-multi \
! 	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-multi install-strip install-toolexeclibLTLIBRARIES \
! 	installcheck installcheck-am installdirs installdirs-am \
! 	maintainer-clean maintainer-clean-generic \
! 	maintainer-clean-multi maintainer-clean-recursive mostlyclean \
! 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
! 	mostlyclean-multi mostlyclean-recursive pdf pdf-am ps ps-am \
! 	tags tags-recursive uninstall uninstall-am uninstall-info-am \
! 	uninstall-toolexeclibLTLIBRARIES
  
  # 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.
diff -Nrcpad gcc-3.4.3/libffi/acinclude.m4 gcc-4.0.0/libffi/acinclude.m4
*** gcc-3.4.3/libffi/acinclude.m4	Fri Nov 21 11:24:08 2003
--- gcc-4.0.0/libffi/acinclude.m4	Tue Nov 23 04:11:28 2004
***************
*** 1,18 ****
- sinclude(../libtool.m4)
- dnl The lines below arrange for aclocal not to bring libtool.m4
- dnl AC_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
- dnl to add a definition of LIBTOOL to Makefile.in.
- ifelse(yes,no,[
- AC_DEFUN([AC_PROG_LIBTOOL],)
- AC_DEFUN([AM_PROG_LIBTOOL],)
- AC_SUBST(LIBTOOL)
- ])
- 
  # mmap(2) blacklisting.  Some platforms provide the mmap library routine
  # but don't support all of the features we need from it.
  AC_DEFUN([AC_FUNC_MMAP_BLACKLIST],
! [if test $ac_cv_header_sys_mman_h != yes \
!  || test $ac_cv_func_mmap != yes; then
     ac_cv_func_mmap_file=no
     ac_cv_func_mmap_dev_zero=no
     ac_cv_func_mmap_anon=no
--- 1,12 ----
  # mmap(2) blacklisting.  Some platforms provide the mmap library routine
  # but don't support all of the features we need from it.
  AC_DEFUN([AC_FUNC_MMAP_BLACKLIST],
! [
! AC_CHECK_HEADER([sys/mman.h],
! 		[libffi_header_sys_mman_h=yes], [libffi_header_sys_mman_h=no])
! AC_CHECK_FUNC([mmap], [libffi_func_mmap=yes], [libffi_func_mmap=no])
! if test "$libffi_header_sys_mman_h" != yes \
!  || test "$libffi_func_mmap" != yes; then
     ac_cv_func_mmap_file=no
     ac_cv_func_mmap_dev_zero=no
     ac_cv_func_mmap_anon=no
*************** if test $ac_cv_func_mmap_anon = yes; the
*** 96,100 ****
  	    [Define if mmap with MAP_ANON(YMOUS) works.])
  fi
  ])
- 
- sinclude(../config/accross.m4)
--- 90,92 ----
diff -Nrcpad gcc-3.4.3/libffi/aclocal.m4 gcc-4.0.0/libffi/aclocal.m4
*** gcc-3.4.3/libffi/aclocal.m4	Fri Nov 21 11:24:08 2003
--- gcc-4.0.0/libffi/aclocal.m4	Thu Dec  2 11:04:21 2004
***************
*** 1,194 ****
! dnl aclocal.m4 generated automatically by aclocal 1.4
  
! dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
! dnl This file is free software; the Free Software Foundation
! dnl gives unlimited permission to copy and/or distribute it,
! dnl with or without modifications, as long as this notice is preserved.
  
! dnl This program is distributed in the hope that it will be useful,
! dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
! dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
! dnl PARTICULAR PURPOSE.
  
! sinclude(../libtool.m4)
! dnl The lines below arrange for aclocal not to bring libtool.m4
! dnl AC_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
! dnl to add a definition of LIBTOOL to Makefile.in.
! ifelse(yes,no,[
! AC_DEFUN([AC_PROG_LIBTOOL],)
! AC_DEFUN([AM_PROG_LIBTOOL],)
! AC_SUBST(LIBTOOL)
  ])
  
! # mmap(2) blacklisting.  Some platforms provide the mmap library routine
! # but don't support all of the features we need from it.
! AC_DEFUN([AC_FUNC_MMAP_BLACKLIST],
! [if test $ac_cv_header_sys_mman_h != yes \
!  || test $ac_cv_func_mmap != yes; then
!    ac_cv_func_mmap_file=no
!    ac_cv_func_mmap_dev_zero=no
!    ac_cv_func_mmap_anon=no
  else
!    AC_CACHE_CHECK([whether read-only mmap of a plain file works],
!   ac_cv_func_mmap_file,
!   [# Add a system to this blacklist if
!    # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a
!    # memory area containing the same data that you'd get if you applied
!    # read() to the same fd.  The only system known to have a problem here
!    # is VMS, where text files have record structure.
!    case "$host_os" in
!      vms* | ultrix*)
! 	ac_cv_func_mmap_file=no ;;
!      *)
! 	ac_cv_func_mmap_file=yes;;
!    esac])
!    AC_CACHE_CHECK([whether mmap from /dev/zero works],
!   ac_cv_func_mmap_dev_zero,
!   [# Add a system to this blacklist if it has mmap() but /dev/zero
!    # does not exist, or if mmapping /dev/zero does not give anonymous
!    # zeroed pages with both the following properties:
!    # 1. If you map N consecutive pages in with one call, and then
!    #    unmap any subset of those pages, the pages that were not
!    #    explicitly unmapped remain accessible.
!    # 2. If you map two adjacent blocks of memory and then unmap them
!    #    both at once, they must both go away.
!    # Systems known to be in this category are Windows (all variants),
!    # VMS, and Darwin.
!    case "$host_os" in
!      vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00)
! 	ac_cv_func_mmap_dev_zero=no ;;
!      *)
! 	ac_cv_func_mmap_dev_zero=yes;;
!    esac])
  
!    # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for.
!    AC_CACHE_CHECK([for MAP_ANON(YMOUS)], ac_cv_decl_map_anon,
!     [AC_TRY_COMPILE(
! [#include <sys/types.h>
! #include <sys/mman.h>
! #include <unistd.h>
  
! #ifndef MAP_ANONYMOUS
! #define MAP_ANONYMOUS MAP_ANON
! #endif
! ],
! [int n = MAP_ANONYMOUS;],
!     ac_cv_decl_map_anon=yes,
!     ac_cv_decl_map_anon=no)])
  
!    if test $ac_cv_decl_map_anon = no; then
!      ac_cv_func_mmap_anon=no
!    else
!      AC_CACHE_CHECK([whether mmap with MAP_ANON(YMOUS) works],
!      ac_cv_func_mmap_anon,
!   [# Add a system to this blacklist if it has mmap() and MAP_ANON or
!    # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
!    # doesn't give anonymous zeroed pages with the same properties listed
!    # above for use of /dev/zero.
!    # Systems known to be in this category are Windows, VMS, and SCO Unix.
!    case "$host_os" in
!      vms* | cygwin* | pe | mingw* | sco* | udk* )
! 	ac_cv_func_mmap_anon=no ;;
!      *)
! 	ac_cv_func_mmap_anon=yes;;
!    esac])
!    fi
  fi
  
! if test $ac_cv_func_mmap_file = yes; then
!   AC_DEFINE(HAVE_MMAP_FILE, 1,
! 	    [Define if read-only mmap of a plain file works.])
  fi
! if test $ac_cv_func_mmap_dev_zero = yes; then
!   AC_DEFINE(HAVE_MMAP_DEV_ZERO, 1,
! 	    [Define if mmap of /dev/zero works.])
  fi
! if test $ac_cv_func_mmap_anon = yes; then
!   AC_DEFINE(HAVE_MMAP_ANON, 1,
! 	    [Define if mmap with MAP_ANON(YMOUS) works.])
  fi
  ])
  
- sinclude(../config/accross.m4)
  
! # Like AC_CONFIG_HEADER, but automatically create stamp file.
  
! AC_DEFUN(AM_CONFIG_HEADER,
! [AC_PREREQ([2.12])
! AC_CONFIG_HEADER([$1])
! dnl When config.status generates a header, we must update the stamp-h file.
! dnl This file resides in the same directory as the config header
! dnl that is generated.  We must strip everything past the first ":",
! dnl and everything past the last "/".
! AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
! ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
! <<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
! <<am_indx=1
! for am_file in <<$1>>; do
!   case " <<$>>CONFIG_HEADERS " in
!   *" <<$>>am_file "*<<)>>
!     echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
!     ;;
    esac
!   am_indx=`expr "<<$>>am_indx" + 1`
! done<<>>dnl>>)
! changequote([,]))])
  
! # Do all the work for Automake.  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.
  
  # serial 1
  
! dnl Usage:
! dnl AM_INIT_AUTOMAKE(package,version, [no-define])
  
! AC_DEFUN(AM_INIT_AUTOMAKE,
! [AC_REQUIRE([AC_PROG_INSTALL])
! PACKAGE=[$1]
! AC_SUBST(PACKAGE)
! VERSION=[$2]
! AC_SUBST(VERSION)
! 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
! ifelse([$3],,
! AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
! AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
! AC_REQUIRE([AM_SANITY_CHECK])
! AC_REQUIRE([AC_ARG_PROGRAM])
! dnl FIXME This is truly gross.
! missing_dir=`cd $ac_aux_dir && pwd`
! AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
! AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
! AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
! AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
! AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
! AC_REQUIRE([AC_PROG_MAKE_SET])])
  
  #
  # Check to make sure that the build environment is sane.
  #
  
! AC_DEFUN(AM_SANITY_CHECK,
  [AC_MSG_CHECKING([whether build environment is sane])
  # Just in case
  sleep 1
! echo timestamp > conftestfile
  # 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 conftestfile 2> /dev/null`
!    if test "[$]*" = "X"; then
        # -L didn't work.
!       set X `ls -t $srcdir/configure conftestfile`
     fi
!    if test "[$]*" != "X $srcdir/configure conftestfile" \
!       && test "[$]*" != "X conftestfile $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
--- 1,1037 ----
! # 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])])
! 
! # Figure out how to run the assembler.             -*- Autoconf -*-
! 
! # serial 3
! 
! # Copyright (C) 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.
! 
! # AM_PROG_AS
! # ----------
! AC_DEFUN([AM_PROG_AS],
! [# By default we simply use the C compiler to build assembly code.
! AC_REQUIRE([AC_PROG_CC])
! test "${CCAS+set}" = set || CCAS=$CC
! test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
! AC_ARG_VAR([CCAS],      [assembler compiler command (defaults to CC)])
! AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
  ])
  
! # 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
! ])
! 
! # serial 2
! 
! # AM_PROG_CC_C_O
! # --------------
! # Like AC_PROG_CC_C_O, but changed for automake.
! 
! # Copyright (C) 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.
! 
! AC_DEFUN([AM_PROG_CC_C_O],
! [AC_REQUIRE([AC_PROG_CC_C_O])dnl
! AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
! # FIXME: we rely on the cache variable name because
! # there is no other way.
! set dummy $CC
! ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
! if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
!    # Losing compiler, so override with the script.
!    # FIXME: It is wrong to rewrite CC.
!    # But if we don't then we get into trouble of one sort or another.
!    # A longer-term fix would be to have automake use am__CC in this case,
!    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
!    CC="$am_aux_dir/compile $CC"
! fi
! ])
! 
! #  -*- 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])])
! 
! # Copyright (C) 1998, 1999, 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 4
! 
! # AM_ENABLE_MULTILIB([MAKEFILE], [REL-TO-TOP-SRCDIR])
! # ---------------------------------------------------
! # Add --enable-multilib to configure.
! AC_DEFUN([AM_ENABLE_MULTILIB],
! [# Default to --enable-multilib
! AC_ARG_ENABLE(multilib,
! [  --enable-multilib       build many library versions (default)],
! [case "$enableval" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
!  esac],
! 	      [multilib=yes])
! 
! # We may get other options which we leave undocumented:
! # --with-target-subdir, --with-multisrctop, --with-multisubdir
! # See config-ml.in if you want the gory details.
! 
! if test "$srcdir" = "."; then
!   if test "$with_target_subdir" != "."; then
!     multi_basedir="$srcdir/$with_multisrctop../$2"
!   else
!     multi_basedir="$srcdir/$with_multisrctop$2"
!   fi
! else
!   multi_basedir="$srcdir/$2"
! fi
! AC_SUBST(multi_basedir)
! 
! AC_OUTPUT_COMMANDS([
! # Only add multilib support code if we just rebuilt the top-level
! # Makefile.
! case " $CONFIG_FILES " in
!  *" ]m4_default([$1],Makefile)[ "*)
!    ac_file=]m4_default([$1],Makefile)[ . ${multi_basedir}/config-ml.in
!    ;;
! esac],
! 		   [
! srcdir="$srcdir"
! host="$host"
! target="$target"
! with_multisubdir="$with_multisubdir"
! with_multisrctop="$with_multisrctop"
! with_target_subdir="$with_target_subdir"
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! multi_basedir="$multi_basedir"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! CC="$CC"])])dnl
! 
! # 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])])
  
  #
  # 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
*************** if (
*** 198,204 ****
  alias in your environment])
     fi
  
!    test "[$]2" = conftestfile
     )
  then
     # Ok.
--- 1041,1047 ----
  alias in your environment])
     fi
  
!    test "$[2]" = conftest.file
     )
  then
     # Ok.
*************** else
*** 207,261 ****
     AC_MSG_ERROR([newly created file is older than distributed files!
  Check your system clock])
  fi
- rm -f conftest*
  AC_MSG_RESULT(yes)])
  
! dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
! dnl The program must properly implement --version.
! AC_DEFUN(AM_MISSING_PROG,
! [AC_MSG_CHECKING(for working $2)
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if ($2 --version) < /dev/null > /dev/null 2>&1; then
!    $1=$2
!    AC_MSG_RESULT(found)
! else
!    $1="$3/missing $2"
!    AC_MSG_RESULT(missing)
  fi
! AC_SUBST($1)])
  
! # Add --enable-maintainer-mode option to configure.
! # From Jim Meyering
  
  # serial 1
  
- 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
- ]
- )
  
! # Define a conditional.
  
! AC_DEFUN(AM_CONDITIONAL,
! [AC_SUBST($1_TRUE)
! AC_SUBST($1_FALSE)
! if $2; then
!   $1_TRUE=
!   $1_FALSE='#'
! else
!   $1_TRUE='#'
!   $1_FALSE=
! fi])
  
--- 1050,1205 ----
     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([../config/accross.m4])
+ m4_include([../config/gcc-version.m4])
+ m4_include([../libtool.m4])
+ m4_include([acinclude.m4])
diff -Nrcpad gcc-3.4.3/libffi/configure gcc-4.0.0/libffi/configure
*** gcc-3.4.3/libffi/configure	Tue May 18 09:08:39 2004
--- gcc-4.0.0/libffi/configure	Thu Dec  2 11:04:21 2004
***************
*** 1,51 ****
  #! /bin/sh
- 
  # Guess values for system-dependent variables and create Makefiles.
! # Generated automatically using autoconf version 2.13 
! # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  #
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
  
! # Defaults:
! ac_help=
  ac_default_prefix=/usr/local
! # Any additions from configure.in:
! ac_help="$ac_help
!   --enable-multilib       build many library versions (default)"
! ac_help="$ac_help
!   --enable-shared[=PKGS]  build shared libraries [default=yes]"
! ac_help="$ac_help
!   --enable-static[=PKGS]  build static libraries [default=yes]"
! ac_help="$ac_help
!   --enable-fast-install[=PKGS]  optimize for fast installation [default=yes]"
! ac_help="$ac_help
!   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]"
! ac_help="$ac_help
!   --disable-libtool-lock  avoid locking (might break parallel builds)"
! ac_help="$ac_help
!   --with-pic              try to use only PIC/non-PIC objects [default=use both]"
! ac_help="$ac_help
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer"
! ac_help="$ac_help
!   --enable-debug          debugging mode"
! ac_help="$ac_help
!   --disable-structs       omit code for struct support"
! ac_help="$ac_help
!   --disable-raw-api       make the raw api unavailable"
! ac_help="$ac_help
!   --enable-purify-safety  purify-safe mode"
  
  # Initialize some variables set by options.
  # The variables have the same names as the options, with
  # dashes changed to underlines.
! build=NONE
! cache_file=./config.cache
  exec_prefix=NONE
- host=NONE
  no_create=
- nonopt=NONE
  no_recursion=
  prefix=NONE
  program_prefix=NONE
--- 1,326 ----
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # Generated by GNU Autoconf 2.59 for libffi 2.1.
  #
+ # Report bugs to <http://gcc.gnu.org/bugs.html>.
+ #
+ # 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='libffi'
! PACKAGE_TARNAME='libffi'
! PACKAGE_VERSION='2.1'
! PACKAGE_STRING='libffi 2.1'
! PACKAGE_BUGREPORT='http://gcc.gnu.org/bugs.html'
! 
! # 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 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.
+ 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_transform_name=s,x,x,
*** 54,63 ****
  silent=
  site=
  srcdir=
- target=NONE
  verbose=
  x_includes=NONE
  x_libraries=NONE
  bindir='${exec_prefix}/bin'
  sbindir='${exec_prefix}/sbin'
  libexecdir='${exec_prefix}/libexec'
--- 329,343 ----
  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'
*************** oldincludedir='/usr/include'
*** 71,87 ****
  infodir='${prefix}/info'
  mandir='${prefix}/man'
  
- # Initialize some other variables.
- subdirs=
- MFLAGS= MAKEFLAGS=
- SHELL=${CONFIG_SHELL-/bin/sh}
- # Maximum number of lines to put in a shell here document.
- ac_max_here_lines=12
- 
  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"
--- 351,359 ----
*************** do
*** 89,147 ****
      continue
    fi
  
!   case "$ac_option" in
!   -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
!   *) ac_optarg= ;;
!   esac
  
    # 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 ;;
    -build=* | --build=* | --buil=* | --bui=* | --bu=*)
!     build="$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" ;;
  
    -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
      ac_prev=datadir ;;
    -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
    | --da=*)
!     datadir="$ac_optarg" ;;
  
    -disable-* | --disable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     eval "enable_${ac_feature}=no" ;;
  
    -enable-* | --enable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) 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- \
--- 361,419 ----
      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- \
*************** do
*** 150,244 ****
    -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)
!     # 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 << EOF
! Usage: configure [options] [host]
! Options: [defaults in brackets after descriptions]
! Configuration:
!   --cache-file=FILE       cache test results in FILE
!   --help                  print this message
!   --no-create             do not create output files
!   --quiet, --silent       do not print \`checking...' messages
!   --version               print the version of autoconf that created configure
! Directory and file names:
!   --prefix=PREFIX         install architecture-independent files in PREFIX
!                           [$ac_default_prefix]
!   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
!                           [same as prefix]
!   --bindir=DIR            user executables in DIR [EPREFIX/bin]
!   --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
!   --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
!   --datadir=DIR           read-only architecture-independent data in DIR
!                           [PREFIX/share]
!   --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
!   --sharedstatedir=DIR    modifiable architecture-independent data in DIR
!                           [PREFIX/com]
!   --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
!   --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
!   --includedir=DIR        C header files in DIR [PREFIX/include]
!   --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
!   --infodir=DIR           info documentation in DIR [PREFIX/info]
!   --mandir=DIR            man documentation in DIR [PREFIX/man]
!   --srcdir=DIR            find the sources in DIR [configure dir or ..]
!   --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
! EOF
!     cat << EOF
! Host type:
!   --build=BUILD           configure for building on BUILD [BUILD=HOST]
!   --host=HOST             configure for HOST [guessed]
!   --target=TARGET         configure for TARGET [TARGET=HOST]
! Features and packages:
!   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
!   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
!   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
!   --x-includes=DIR        X include files are in DIR
!   --x-libraries=DIR       X library files are in DIR
! EOF
!     if test -n "$ac_help"; then
!       echo "--enable and --with options recognized:$ac_help"
!     fi
!     exit 0 ;;
  
    -host | --host | --hos | --ho)
!     ac_prev=host ;;
    -host=* | --host=* | --hos=* | --ho=*)
!     host="$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 \
--- 422,468 ----
    -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 \
*************** EOF
*** 247,265 ****
    -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)
      no_create=yes ;;
  
    -no-recursion | --no-recursion | --no-recursio | --no-recursi \
--- 471,489 ----
    -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 \
*************** EOF
*** 273,298 ****
    -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 \
--- 497,522 ----
    -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 \
*************** EOF
*** 309,315 ****
    | --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)
--- 533,539 ----
    | --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)
*************** EOF
*** 319,325 ****
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir="$ac_optarg" ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
--- 543,549 ----
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir=$ac_optarg ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
*************** EOF
*** 330,387 ****
    | --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 ;;
    -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
!     target="$ac_optarg" ;;
  
    -v | -verbose | --verbose | --verbos | --verbo | --verb)
      verbose=yes ;;
  
!   -version | --version | --versio | --versi | --vers)
!     echo "configure generated by autoconf version 2.13"
!     exit 0 ;;
  
    -with-* | --with-*)
!     ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
      ac_package=`echo $ac_package| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) ac_optarg=yes ;;
      esac
!     eval "with_${ac_package}='$ac_optarg'" ;;
  
    -without-* | --without-*)
!     ac_package=`echo $ac_option|sed -e 's/-*without-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
!     ac_package=`echo $ac_package| sed 's/-/_/g'`
!     eval "with_${ac_package}=no" ;;
  
    --x)
      # Obsolete; use --with-x.
--- 554,610 ----
    | --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.
*************** EOF
*** 392,490 ****
      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 "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
      ;;
  
    *)
!     if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
!       echo "configure: warning: $ac_option: invalid host type" 1>&2
!     fi
!     if test "x$nonopt" != xNONE; then
!       { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
!     fi
!     nonopt="$ac_option"
      ;;
  
    esac
  done
  
  if test -n "$ac_prev"; then
!   { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
! fi
! 
! trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
! 
! # File descriptor usage:
! # 0 standard input
! # 1 file creation
! # 2 errors and warnings
! # 3 some systems may open it to /dev/tty
! # 4 used on the Kubota Titan
! # 6 checking for... messages and results
! # 5 compiler messages saved in config.log
! if test "$silent" = yes; then
!   exec 6>/dev/null
! else
!   exec 6>&1
  fi
- exec 5>./config.log
  
! echo "\
! This file contains any messages produced by compilers while
! running configure, to aid debugging if configure makes a mistake.
! " 1>&5
  
! # Strip out --no-create and --no-recursion so they do not pile up.
! # Also quote any args containing shell metacharacters.
! ac_configure_args=
! for ac_arg
  do
!   case "$ac_arg" in
!   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
!   | --no-cr | --no-c) ;;
!   -no-recursion | --no-recursion | --no-recursio | --no-recursi \
!   | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
!   *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
!   ac_configure_args="$ac_configure_args '$ac_arg'" ;;
!   *) ac_configure_args="$ac_configure_args $ac_arg" ;;
    esac
  done
  
! # NLS nuisances.
! # Only set these to C if already set.  These must not be set unconditionally
! # because not all systems understand e.g. LANG=C (notably SCO).
! # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
! # Non-C LC_CTYPE values break the ctype check.
! if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
! if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
! if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
! if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  
! # 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
  
- # A filename unique to this package, relative to the directory that
- # configure is in, which we can look for to find out if srcdir is correct.
- ac_unique_file=fficonfig.h.in
  
  # 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_prog=$0
!   ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
!   test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
    srcdir=$ac_confdir
    if test ! -r $srcdir/$ac_unique_file; then
      srcdir=..
--- 615,724 ----
      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=..
*************** else
*** 494,506 ****
  fi
  if test ! -r $srcdir/$ac_unique_file; then
    if test "$ac_srcdir_defaulted" = yes; then
!     { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
    else
!     { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
    fi
  fi
! srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
  
  # Prefer explicitly selected file to automatically selected ones.
  if test -z "$CONFIG_SITE"; then
    if test "x$prefix" != xNONE; then
--- 728,1217 ----
  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_CCAS_set=${CCAS+set}
! ac_env_CCAS_value=$CCAS
! ac_cv_env_CCAS_set=${CCAS+set}
! ac_cv_env_CCAS_value=$CCAS
! ac_env_CCASFLAGS_set=${CCASFLAGS+set}
! ac_env_CCASFLAGS_value=$CCASFLAGS
! ac_cv_env_CCASFLAGS_set=${CCASFLAGS+set}
! ac_cv_env_CCASFLAGS_value=$CCASFLAGS
! 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_CPPFLAGS_set=${CPPFLAGS+set}
! ac_env_CPPFLAGS_value=$CPPFLAGS
! ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
! ac_cv_env_CPPFLAGS_value=$CPPFLAGS
! 
! #
! # 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 libffi 2.1 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
! 
! 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 libffi 2.1:";;
!    esac
!   cat <<\_ACEOF
! 
! Optional Features:
!   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
!   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --enable-multilib       build many library versions (default)
!   --disable-dependency-tracking  speeds up one-time build
!   --enable-dependency-tracking   do not reject slow dependency extractors
!   --enable-shared=PKGS  build shared libraries default=yes
!   --enable-static=PKGS  build static libraries default=yes
!   --enable-fast-install=PKGS  optimize for fast installation default=yes
!   --disable-libtool-lock  avoid locking (might break parallel builds)
!   --enable-maintainer-mode  enable make rules and dependencies not useful
! 			  (and sometimes confusing) to the casual installer
!   --enable-debug          debugging mode
!   --disable-structs       omit code for struct support
!   --disable-raw-api       make the raw api unavailable
!   --enable-purify-safety  purify-safe mode
! 
! Optional Packages:
!   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
!   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
!   --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
! 
! 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>
!   CCAS        assembler compiler command (defaults to CC)
!   CCASFLAGS   assembler compiler flags (defaults to CFLAGS)
!   CPP         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 <http://gcc.gnu.org/bugs.html>.
! _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
! libffi configure 2.1
! 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 libffi $as_me 2.1, 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
*************** if test -z "$CONFIG_SITE"; then
*** 511,648 ****
  fi
  for ac_site_file in $CONFIG_SITE; do
    if test -r "$ac_site_file"; then
!     echo "loading site script $ac_site_file"
      . "$ac_site_file"
    fi
  done
  
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
- ac_exeext=
- ac_objext=o
- if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-     ac_n= ac_c='
- ' ac_t='	'
-   else
-     ac_n=-n ac_c= ac_t=
-   fi
- else
-   ac_n= ac_c='\c' ac_t=
- fi
  
- echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
- echo "configure:550: checking for Cygwin environment" >&5
- if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 555 "configure"
- #include "confdefs.h"
  
- int main() {
  
- #ifndef __CYGWIN__
- #define __CYGWIN__ __CYGWIN32__
- #endif
- return __CYGWIN__;
- ; return 0; }
- EOF
- if { (eval echo configure:566: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cygwin=yes
- else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   ac_cv_cygwin=no
- fi
- rm -f conftest*
- rm -f conftest*
- fi
  
- echo "$ac_t""$ac_cv_cygwin" 1>&6
- CYGWIN=
- test "$ac_cv_cygwin" = yes && CYGWIN=yes
- echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
- echo "configure:583: checking for mingw32 environment" >&5
- if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 588 "configure"
- #include "confdefs.h"
  
- int main() {
- return __MINGW32__;
- ; return 0; }
- EOF
- if { (eval echo configure:595: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_mingw32=yes
- else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   ac_cv_mingw32=no
- fi
- rm -f conftest*
- rm -f conftest*
- fi
  
- echo "$ac_t""$ac_cv_mingw32" 1>&6
- MINGW32=
- test "$ac_cv_mingw32" = yes && MINGW32=yes
  
  
  
  
  
- # This works around the fact that libtool configuration may change LD
- # for this particular configuration, but some shells, instead of
- # keeping the changes in LD private, export them just because LD is
- # exported.
- ORIGINAL_LD_FOR_MULTILIBS=$LD
  
  # Check whether --enable-multilib or --disable-multilib was given.
  if test "${enable_multilib+set}" = set; then
    enableval="$enable_multilib"
!   case "${enableval}" in
    yes) multilib=yes ;;
    no)  multilib=no ;;
!   *)   { echo "configure: error: bad value ${enableval} for multilib option" 1>&2; exit 1; } ;;
   esac
  else
    multilib=yes
! fi
  
  
! if test "${srcdir}" = "."; then
!   if test "${with_target_subdir}" != "."; then
!     libffi_basedir="${with_multisrctop}../"
    else
!     libffi_basedir="${with_multisrctop}"
    fi
  else
!   libffi_basedir=
  fi
  
  ac_aux_dir=
! for ac_dir in ${libffi_basedir}.. $srcdir/${libffi_basedir}..; do
    if test -f $ac_dir/install-sh; then
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install-sh -c"
--- 1222,1372 ----
  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_config_headers="$ac_config_headers fficonfig.h"
+ 
+ 
+ # Default to --enable-multilib
  # Check whether --enable-multilib or --disable-multilib was given.
  if test "${enable_multilib+set}" = set; then
    enableval="$enable_multilib"
!   case "$enableval" in
    yes) multilib=yes ;;
    no)  multilib=no ;;
!   *)   { { echo "$as_me:$LINENO: error: bad value $enableval for multilib option" >&5
! echo "$as_me: error: bad value $enableval for multilib option" >&2;}
!    { (exit 1); exit 1; }; } ;;
   esac
  else
    multilib=yes
! fi;
  
+ # We may get other options which we leave undocumented:
+ # --with-target-subdir, --with-multisrctop, --with-multisubdir
+ # See config-ml.in if you want the gory details.
  
! if test "$srcdir" = "."; then
!   if test "$with_target_subdir" != "."; then
!     multi_basedir="$srcdir/$with_multisrctop../.."
    else
!     multi_basedir="$srcdir/$with_multisrctop.."
    fi
  else
!   multi_basedir="$srcdir/.."
  fi
  
+ 
+           ac_config_commands="$ac_config_commands default-1"
+ 
+ 
  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"
*************** for ac_dir in ${libffi_basedir}.. $srcdi
*** 651,1034 ****
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install.sh -c"
      break
    fi
  done
  if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in ${libffi_basedir}.. $srcdir/${libffi_basedir}.." 1>&2; exit 1; }
  fi
! ac_config_guess=$ac_aux_dir/config.guess
! ac_config_sub=$ac_aux_dir/config.sub
! ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  
  
  
! # Do some error checking and defaulting for the host and target type.
! # The inputs are:
! #    configure --host=HOST --target=TARGET --build=BUILD NONOPT
! #
! # The rules are:
! # 1. You are not allowed to specify --host, --target, and nonopt at the
! #    same time.
! # 2. Host defaults to nonopt.
! # 3. If nonopt is not specified, then host defaults to the current host,
! #    as determined by config.guess.
! # 4. Target and build default to nonopt.
! # 5. If nonopt is not specified, then target and build default to host.
  
  # The aliases save the names the user supplied, while $host etc.
  # will get canonicalized.
! case $host---$target---$nonopt in
! NONE---*---* | *---NONE---* | *---*---NONE) ;;
! *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
  esac
  
  
- # Make sure we can run config.sub.
- if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
- else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
  fi
  
! echo $ac_n "checking host system type""... $ac_c" 1>&6
! echo "configure:693: checking host system type" >&5
  
! host_alias=$host
! case "$host_alias" in
! NONE)
!   case $nonopt in
!   NONE)
!     if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
!     else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
!     fi ;;
!   *) host_alias=$nonopt ;;
!   esac ;;
! esac
  
! host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
! host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$host" 1>&6
  
! echo $ac_n "checking target system type""... $ac_c" 1>&6
! echo "configure:714: checking target system type" >&5
  
! target_alias=$target
! case "$target_alias" in
! NONE)
!   case $nonopt in
!   NONE) target_alias=$host_alias ;;
!   *) target_alias=$nonopt ;;
!   esac ;;
! esac
  
! target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
! target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$target" 1>&6
  
! echo $ac_n "checking build system type""... $ac_c" 1>&6
! echo "configure:732: checking build system type" >&5
  
! build_alias=$build
! case "$build_alias" in
! NONE)
!   case $nonopt in
!   NONE) build_alias=$host_alias ;;
!   *) build_alias=$nonopt ;;
!   esac ;;
! esac
  
! build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
! build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$build" 1>&6
  
! test "$host_alias" != "$target_alias" &&
!   test "$program_prefix$program_suffix$program_transform_name" = \
!     NONENONEs,x,x, &&
!   program_prefix=${target_alias}-
  
! target_alias=${target_alias-$host_alias}
  
! # 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-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=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
  
! # Extract the first word of "gcc", so it can be a program name with args.
  set dummy gcc; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:828: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$CC"; then
    ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CC="gcc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! CC="$ac_cv_prog_CC"
  if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:858: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$CC"; then
    ac_cv_prog_CC="$CC" # Let the user override the test.
  else
-   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_prog_rejected=no
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
!         ac_prog_rejected=yes
! 	continue
!       fi
!       ac_cv_prog_CC="cc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  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 $# -gt 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
!     set dummy "$ac_dir/$ac_word" "$@"
!     shift
!     ac_cv_prog_CC="$@"
    fi
  fi
  fi
  fi
! CC="$ac_cv_prog_CC"
  if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
!   if test -z "$CC"; then
!     case "`uname -s`" in
!     *win32* | *WIN32*)
!       # Extract the first word of "cl", so it can be a program name with args.
! set dummy cl; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:909: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$CC"; then
    ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CC="cl"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! CC="$ac_cv_prog_CC"
  if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
!  ;;
!     esac
    fi
!   test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  fi
  
! echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
! echo "configure:941: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  
! ac_ext=c
! # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
! cat > conftest.$ac_ext << EOF
  
- #line 952 "configure"
- #include "confdefs.h"
  
! main(){return(0);}
! EOF
! if { (eval echo configure:957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   ac_cv_prog_cc_works=yes
!   # If we can't run a trivial program, we are probably using a cross compiler.
!   if (./conftest; exit) 2>/dev/null; then
!     ac_cv_prog_cc_cross=no
    else
!     ac_cv_prog_cc_cross=yes
    fi
- else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   ac_cv_prog_cc_works=no
  fi
! rm -fr conftest*
! ac_ext=c
! # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
! echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
! if test $ac_cv_prog_cc_works = no; then
!   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
  fi
- echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
- echo "configure:983: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
- echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
- cross_compiling=$ac_cv_prog_cc_cross
  
! echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
! echo "configure:988: checking whether we are using GNU C" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.c <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
!   ac_cv_prog_gcc=yes
  else
!   ac_cv_prog_gcc=no
  fi
  fi
  
! echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  
! if test $ac_cv_prog_gcc = yes; then
!   GCC=yes
  else
!   GCC=
  fi
  
! ac_test_CFLAGS="${CFLAGS+set}"
! ac_save_CFLAGS="$CFLAGS"
! CFLAGS=
! echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
! echo "configure:1016: checking whether ${CC-cc} accepts -g" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   echo 'void f(){}' > conftest.c
! if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
    ac_cv_prog_cc_g=yes
  else
!   ac_cv_prog_cc_g=no
! fi
! rm -f conftest*
  
  fi
! 
! echo "$ac_t""$ac_cv_prog_cc_g" 1>&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"
--- 1375,2554 ----
      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}-
! target_alias=${target_alias-$host_alias}
! 
! . ${srcdir}/configure.host
! 
! 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='libffi'
!  VERSION='2.1'
! 
! 
! 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"}
! 
! am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
! 
! 
! 
! 
! 
! 
! # The same as in boehm-gc and libstdc++. Have to borrow it from there.
! # We must force CC to /not/ be precious variables; otherwise
! # the wrong, non-multilib-adjusted value will be used in multilibs.
! # As a side effect, we have to subst CFLAGS ourselves.
! 
! 
! 
! 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
*** 1042,1047 ****
--- 2562,3185 ----
      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
+ 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
+ 
+ 
+ 
+ 
+ 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
+ 
+ 
+ 
+ 
+ 
+ 
+ # By default we simply use the C compiler to build assembly code.
+ 
+ test "${CCAS+set}" = set || CCAS=$CC
+ test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+ 
+ 
+ 
+ if test "x$CC" != xcc; then
+   echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+ echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6
+ else
+   echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+ echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6
+ fi
+ set dummy $CC; ac_cc=`echo $2 |
+ 		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+ if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+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
+ # Make sure it works both with $CC and with simple cc.
+ # We do the test twice because some compilers refuse to overwrite an
+ # existing .o file with -o, though they will create one.
+ ac_try='$CC -c conftest.$ac_ext -o conftest.$ac_objext >&5'
+ if { (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); } &&
+    test -f 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 ac_cv_prog_cc_${ac_cc}_c_o=yes
+   if test "x$CC" != xcc; then
+     # Test first that cc exists at all.
+     if { ac_try='cc -c conftest.$ac_ext >&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
+       ac_try='cc -c conftest.$ac_ext -o conftest.$ac_objext >&5'
+       if { (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); } &&
+ 	 test -f 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
+ 	# cc works too.
+ 	:
+       else
+ 	# cc exists but doesn't like -o.
+ 	eval ac_cv_prog_cc_${ac_cc}_c_o=no
+       fi
+     fi
+   fi
+ else
+   eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ rm -f conftest*
+ 
+ fi
+ if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then
+   echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define NO_MINUS_C_MINUS_O 1
+ _ACEOF
+ 
+ fi
+ 
+ # FIXME: we rely on the cache variable name because
+ # there is no other way.
+ set dummy $CC
+ ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+ if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+    # Losing compiler, so override with the script.
+    # FIXME: It is wrong to rewrite CC.
+    # But if we don't then we get into trouble of one sort or another.
+    # A longer-term fix would be to have automake use am__CC in this case,
+    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+    CC="$am_aux_dir/compile $CC"
+ 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-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=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
*************** if test "${with_gnu_ld+set}" = set; then
*** 1049,1061 ****
    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 $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
! echo "configure:1059: checking for ld used by GCC" >&5
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
--- 3187,3198 ----
    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
*************** echo "configure:1059: checking for ld us
*** 1084,1097 ****
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
!   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
! echo "configure:1089: checking for GNU ld" >&5
  else
!   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
! echo "configure:1092: checking for non-GNU ld" >&5
  fi
! if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
--- 3221,3234 ----
      ;;
    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-:}"
*************** fi
*** 1117,1131 ****
  
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
!   echo "$ac_t""$LD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
! test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
! echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
! echo "configure:1127: checking if the linker ($LD) is GNU ld" >&5
! if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&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
--- 3254,3272 ----
  
  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
*************** else
*** 1134,1160 ****
    lt_cv_prog_gnu_ld=no
  fi
  fi
! 
! echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6
  with_gnu_ld=$lt_cv_prog_gnu_ld
  
  
! echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
! echo "configure:1144: checking for $LD option to reload object files" >&5
! if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_ld_reload_flag='-r'
  fi
! 
! echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  
! echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
! echo "configure:1156: checking for BSD-compatible nm" >&5
! if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$NM"; then
    # Let the user override the test.
--- 3275,3301 ----
    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.
*************** fi
*** 1187,1219 ****
  fi
  
  NM="$lt_cv_path_NM"
! echo "$ac_t""$NM" 1>&6
  
! echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
! echo "configure:1194: checking whether ln -s works" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   rm -f conftestdata
! if ln -s X conftestdata 2>/dev/null
! then
!   rm -f conftestdata
!   ac_cv_prog_LN_S="ln -s"
! else
!   ac_cv_prog_LN_S=ln
! fi
! fi
! LN_S="$ac_cv_prog_LN_S"
! if test "$ac_cv_prog_LN_S" = "ln -s"; then
!   echo "$ac_t""yes" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
! echo "configure:1215: checking how to recognise dependant libraries" >&5
! if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
--- 3328,3351 ----
  fi
  
  NM="$lt_cv_path_NM"
! echo "$as_me:$LINENO: result: $NM" >&5
! echo "${ECHO_T}$NM" >&6
  
! 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
  
! 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=
*************** darwin* | rhapsody*)
*** 1264,1270 ****
    lt_cv_deplibs_check_method=pass_all
    ;;
  
! freebsd* )
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
--- 3396,3402 ----
    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 )
*************** irix5* | irix6*)
*** 1322,1338 ****
  
  # This must be Linux ELF.
  linux-gnu*)
!   case $host_cpu in
!   alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
!     lt_cv_deplibs_check_method=pass_all ;;
!   *)
!     # glibc up to 2.1.1 does not perform some relocations on ARM
!     lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
!   esac
!   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
! netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
    else
--- 3454,3463 ----
  
  # 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
*************** sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
*** 1380,1463 ****
  esac
  
  fi
! 
! echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  
- echo $ac_n "checking for object suffix""... $ac_c" 1>&6
- echo "configure:1390: checking for object suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   rm -f conftest*
- echo 'int i = 1;' > conftest.$ac_ext
- if { (eval echo configure:1396: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   for ac_file in conftest.*; do
-     case $ac_file in
-     *.c) ;;
-     *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;;
-     esac
-   done
- else
-   { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; }
- fi
- rm -f conftest*
- fi
  
- echo "$ac_t""$ac_cv_objext" 1>&6
- OBJEXT=$ac_cv_objext
- ac_objext=$ac_cv_objext
  
  
  
- echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
- echo "configure:1416: checking for executable suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
-   ac_cv_exeext=.exe
- else
-   rm -f conftest*
-   echo 'int main () { return 0; }' > conftest.$ac_ext
-   ac_cv_exeext=
-   if { (eval echo configure:1426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
-     for file in conftest.*; do
-       case $file in
-       *.c | *.o | *.obj) ;;
-       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
-       esac
-     done
-   else
-     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
-   fi
-   rm -f conftest*
-   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
- fi
- fi
- 
- EXEEXT=""
- test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
- echo "$ac_t""${ac_cv_exeext}" 1>&6
- ac_exeext=$EXEEXT
- 
- if test $host != $build; then
-   ac_tool_prefix=${host_alias}-
- else
-   ac_tool_prefix=
- fi
- 
  # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
  
  # 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 $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
! echo "configure:1459: checking for ${ac_tool_prefix}file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 3505,3529 ----
  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!
  
  # 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
    /*)
*************** fi
*** 1509,1525 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
!     echo $ac_n "checking for file""... $ac_c" 1>&6
! echo "configure:1521: checking for file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 3575,3593 ----
  
  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
    /*)
*************** fi
*** 1571,1579 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
    else
--- 3639,3649 ----
  
  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
*************** fi
*** 1585,1722 ****
    ;;
  esac
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1592: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
  if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_RANLIB"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1624: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$RANLIB"; then
!   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
! if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   RANLIB=":"
! fi
  fi
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1659: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$STRIP"; then
    ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="${ac_tool_prefix}strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
  if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_STRIP"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "strip", so it can be a program name with args.
  set dummy strip; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1691: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$STRIP"; then
!   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
! if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   STRIP=":"
! fi
  fi
  
  
--- 3655,3818 ----
    ;;
  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
  
  
*************** test "$lt_cv_prog_gnu_ld" = yes && libto
*** 1732,1751 ****
  # 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"
  
--- 3828,3846 ----
  # 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"
  
*************** test x"$pic_mode" = xno && libtool_flags
*** 1754,1761 ****
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 1758 "configure"' > conftest.$ac_ext
!   if { (eval echo configure:1759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     if test "$lt_cv_prog_gnu_ld" = yes; then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
--- 3849,3860 ----
  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=$?
!   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*)
*************** case $host in
*** 1788,1794 ****
  ia64-*-hpux*)
    # Find out which ABI we are using.
    echo 'int i;' > conftest.$ac_ext
!   if { (eval echo configure:1792: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *ELF-32*)
        HPUX_IA64_MODE="32"
--- 3887,3897 ----
  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"
*************** ia64-*-hpux*)
*** 1804,1810 ****
  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 configure:1808: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *32-bit*)
        case $host in
--- 3907,3917 ----
  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*|ppc*-*linux*|powerpc*-*li
*** 1847,1893 ****
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
!   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
! echo "configure:1852: checking whether the C compiler needs -belf" >&5
! if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
!      cat > conftest.$ac_ext <<EOF
! #line 1865 "configure"
! #include "confdefs.h"
  
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:1872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    lt_cv_cc_needs_belf=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   lt_cv_cc_needs_belf=no
  fi
! rm -f conftest*
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
  fi
! 
! echo "$ac_t""$lt_cv_cc_needs_belf" 1>&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"
--- 3954,4027 ----
    # 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"
*************** esac
*** 1899,1952 ****
  
  
  # Save cache, so that ltconfig can load it
! cat > confcache <<\EOF
  # 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.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # 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 \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     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" \
--- 4033,4093 ----
  
  
  # 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" \
*************** objext="$OBJEXT" exeext="$EXEEXT" reload
*** 1956,1970 ****
  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 "configure: error: libtool configure failed" 1>&2; exit 1; }
  
  # Reload cache, that may have been modified by ltconfig
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  
--- 4097,4122 ----
  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
  
  
*************** LIBTOOL='$(SHELL) $(top_builddir)/libtoo
*** 1978,2687 ****
  # clobbered by the next message.
  exec 5>>./config.log
  
-   
  
-   
- 	 
- 	 
  
- # 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
- # 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"
- # ./install, which can be erroneously created by make from ./install.sh.
- echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
- echo "configure:2000: checking for a BSD compatible install" >&5
- if test -z "$INSTALL"; then
- if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-     IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
-   for ac_dir in $PATH; do
-     # Account for people who put trailing slashes in PATH elements.
-     case "$ac_dir/" in
-     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
-         if test -f $ac_dir/$ac_prog; then
- 	  if test $ac_prog = install &&
-             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- 	    # AIX install.  It has an incompatible calling convention.
- 	    :
- 	  else
- 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
- 	    break 2
- 	  fi
- 	fi
-       done
-       ;;
-     esac
-   done
-   IFS="$ac_save_IFS"
  
- 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 "$ac_t""$INSTALL" 1>&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_PROGRAM}'
  
! test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
- echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
- echo "configure:2053: checking whether build environment is sane" >&5
- # Just in case
- sleep 1
- echo timestamp > conftestfile
- # 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 conftestfile 2> /dev/null`
-    if test "$*" = "X"; then
-       # -L didn't work.
-       set X `ls -t $srcdir/configure conftestfile`
-    fi
-    if test "$*" != "X $srcdir/configure conftestfile" \
-       && test "$*" != "X conftestfile $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 "configure: error: ls -t appears to fail.  Make sure there is not a broken
! alias in your environment" 1>&2; exit 1; }
!    fi
! 
!    test "$2" = conftestfile
!    )
! then
!    # Ok.
!    :
! else
!    { echo "configure: error: newly created file is older than distributed files!
! Check your system clock" 1>&2; exit 1; }
! fi
! rm -f conftest*
! echo "$ac_t""yes" 1>&6
! if test "$program_transform_name" = s,x,x,; then
!   program_transform_name=
  else
!   # Double any \ or $.  echo might interpret backslashes.
!   cat <<\EOF_SED > conftestsed
! s,\\,\\\\,g; s,\$,$$,g
! EOF_SED
!   program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
!   rm -f conftestsed
  fi
- 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"
  
! # sed with no file args requires a program.
! test "$program_transform_name" = "" && program_transform_name="s,x,x,"
  
! echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
! echo "configure:2110: checking whether ${MAKE-make} sets \${MAKE}" >&5
! set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftestmake <<\EOF
! all:
! 	@echo 'ac_maketemp="${MAKE}"'
! EOF
! # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
! eval `${MAKE-make} -f conftestmake 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 conftestmake
  fi
! if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   SET_MAKE=
  else
!   echo "$ac_t""no" 1>&6
!   SET_MAKE="MAKE=${MAKE-make}"
! fi
! 
  
! PACKAGE=libffi
  
! VERSION=2.00-beta
  
! if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
!   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
  fi
  
  
  
- missing_dir=`cd $ac_aux_dir && pwd`
- echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
- echo "configure:2149: checking for working aclocal" >&5
- # Run test in a subshell; some versions of sh will print an error if
- # an executable is not found, even if stderr is redirected.
- # Redirect stdin to placate older versions of autoconf.  Sigh.
- if (aclocal --version) < /dev/null > /dev/null 2>&1; then
-    ACLOCAL=aclocal
-    echo "$ac_t""found" 1>&6
- else
-    ACLOCAL="$missing_dir/missing aclocal"
-    echo "$ac_t""missing" 1>&6
  fi
! 
! echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
! echo "configure:2162: checking for working autoconf" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoconf --version) < /dev/null > /dev/null 2>&1; then
!    AUTOCONF=autoconf
!    echo "$ac_t""found" 1>&6
  else
!    AUTOCONF="$missing_dir/missing autoconf"
!    echo "$ac_t""missing" 1>&6
  fi
! 
! echo $ac_n "checking for working automake""... $ac_c" 1>&6
! echo "configure:2175: checking for working automake" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (automake --version) < /dev/null > /dev/null 2>&1; then
!    AUTOMAKE=automake
!    echo "$ac_t""found" 1>&6
  else
!    AUTOMAKE="$missing_dir/missing automake"
!    echo "$ac_t""missing" 1>&6
  fi
! 
! echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
! echo "configure:2188: checking for working autoheader" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoheader --version) < /dev/null > /dev/null 2>&1; then
!    AUTOHEADER=autoheader
!    echo "$ac_t""found" 1>&6
  else
!    AUTOHEADER="$missing_dir/missing autoheader"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
! echo "configure:2201: checking for working makeinfo" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
!    MAKEINFO=makeinfo
!    echo "$ac_t""found" 1>&6
  else
!    MAKEINFO="$missing_dir/missing makeinfo"
!    echo "$ac_t""missing" 1>&6
  fi
  
  
  
  
  
! echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
! echo "configure:2218: checking for executable suffix" >&5
! if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
!   ac_cv_exeext=.exe
  else
!   rm -f conftest*
!   echo 'int main () { return 0; }' > conftest.$ac_ext
!   ac_cv_exeext=
!   if { (eval echo configure:2228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
!     for file in conftest.*; do
!       case $file in
!       *.c | *.o | *.obj) ;;
!       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
!       esac
!     done
!   else
!     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
!   fi
!   rm -f conftest*
!   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
! fi
  fi
  
- EXEEXT=""
- test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
- echo "$ac_t""${ac_cv_exeext}" 1>&6
- ac_exeext=$EXEEXT
  
! echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
! echo "configure:2249: checking whether to enable maintainer-specific portions of Makefiles" >&5
!     # 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 "$ac_t""$USE_MAINTAINER_MODE" 1>&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
!   
  
  
! # Extract the first word of "gcc", so it can be a program name with args.
! set dummy gcc; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2275: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CC="gcc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
! fi
  fi
! CC="$ac_cv_prog_CC"
! if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
! else
!   echo "$ac_t""no" 1>&6
  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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2305: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_prog_rejected=no
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
!         ac_prog_rejected=yes
! 	continue
!       fi
!       ac_cv_prog_CC="cc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
! 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 $# -gt 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
!     set dummy "$ac_dir/$ac_word" "$@"
!     shift
!     ac_cv_prog_CC="$@"
!   fi
! fi
! fi
  fi
! CC="$ac_cv_prog_CC"
! if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
! else
!   echo "$ac_t""no" 1>&6
  fi
  
!   if test -z "$CC"; then
!     case "`uname -s`" in
!     *win32* | *WIN32*)
!       # Extract the first word of "cl", so it can be a program name with args.
! set dummy cl; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2356: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CC="cl"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
- CC="$ac_cv_prog_CC"
- if test -n "$CC"; then
-   echo "$ac_t""$CC" 1>&6
- else
-   echo "$ac_t""no" 1>&6
  fi
-  ;;
-     esac
-   fi
-   test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  fi
  
! echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
! echo "configure:2388: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  
! ac_ext=c
! # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
! cat > conftest.$ac_ext << EOF
  
- #line 2399 "configure"
- #include "confdefs.h"
  
- main(){return(0);}
- EOF
- if { (eval echo configure:2404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   ac_cv_prog_cc_works=yes
-   # If we can't run a trivial program, we are probably using a cross compiler.
-   if (./conftest; exit) 2>/dev/null; then
-     ac_cv_prog_cc_cross=no
-   else
-     ac_cv_prog_cc_cross=yes
-   fi
- else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   ac_cv_prog_cc_works=no
- fi
- rm -fr conftest*
- ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
- ac_cpp='$CPP $CPPFLAGS'
- ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
- ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
- cross_compiling=$ac_cv_prog_cc_cross
  
- echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
- if test $ac_cv_prog_cc_works = no; then
-   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
- fi
- echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
- echo "configure:2430: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
- echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
- cross_compiling=$ac_cv_prog_cc_cross
  
! echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
! echo "configure:2435: checking whether we are using GNU C" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.c <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
!   ac_cv_prog_gcc=yes
  else
!   ac_cv_prog_gcc=no
  fi
  fi
  
- echo "$ac_t""$ac_cv_prog_gcc" 1>&6
- 
- if test $ac_cv_prog_gcc = yes; then
-   GCC=yes
- else
-   GCC=
  fi
  
! ac_test_CFLAGS="${CFLAGS+set}"
! ac_save_CFLAGS="$CFLAGS"
! CFLAGS=
! echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
! echo "configure:2463: checking whether ${CC-cc} accepts -g" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   echo 'void f(){}' > conftest.c
! if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
!   ac_cv_prog_cc_g=yes
  else
!   ac_cv_prog_cc_g=no
! fi
! rm -f conftest*
  
  fi
  
! echo "$ac_t""$ac_cv_prog_cc_g" 1>&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 $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
- echo "configure:2502: checking how to run the C preprocessor" >&5
- # On Suns, sometimes $CPP names a directory.
- if test -n "$CPP" && test -d "$CPP"; then
-   CPP=
  fi
! if test -z "$CPP"; then
! if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!     # This must be in double quotes, not single quotes, because CPP may get
!   # substituted into the Makefile and "${CC-cc}" will confuse make.
!   CPP="${CC-cc} -E"
!   # On the NeXT, cc -E runs the code through the compiler's parser,
!   # not just through cpp.
!   cat > conftest.$ac_ext <<EOF
! #line 2517 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
! else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -E -traditional-cpp"
!   cat > conftest.$ac_ext <<EOF
! #line 2534 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2540: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -nologo -E"
!   cat > conftest.$ac_ext <<EOF
! #line 2551 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2557: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP=/lib/cpp
  fi
! rm -f conftest*
  fi
! rm -f conftest*
  fi
! rm -f conftest*
!   ac_cv_prog_CPP="$CPP"
  fi
!   CPP="$ac_cv_prog_CPP"
  else
!   ac_cv_prog_CPP="$CPP"
  fi
! echo "$ac_t""$CPP" 1>&6
  
! for ac_hdr in sys/mman.h
! do
! ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:2585: checking for $ac_hdr" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 2590 "configure"
! #include "confdefs.h"
! #include <$ac_hdr>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2595: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
! rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_hdr 1
! EOF
!  
  else
!   echo "$ac_t""no" 1>&6
  fi
- done
  
! for ac_func in mmap
! do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:2624: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 2629 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:2652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
! 
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_func 1
! EOF
!  
  else
!   echo "$ac_t""no" 1>&6
  fi
- done
  
! if test $ac_cv_header_sys_mman_h != yes \
!  || test $ac_cv_func_mmap != yes; then
     ac_cv_func_mmap_file=no
     ac_cv_func_mmap_dev_zero=no
     ac_cv_func_mmap_anon=no
  else
!    echo $ac_n "checking whether read-only mmap of a plain file works""... $ac_c" 1>&6
! echo "configure:2683: checking whether read-only mmap of a plain file works" >&5
! if eval "test \"`echo '$''{'ac_cv_func_mmap_file'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    # Add a system to this blacklist if
     # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a
--- 4130,5157 ----
  # clobbered by the next message.
  exec 5>>./config.log
  
  
  
  
  
  
  
! 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
  
! 
! 
! 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
! 
! 
! 
! for ac_header in 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 http://gcc.gnu.org/bugs.html ##
! ## ------------------------------------------- ##
! _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
! 
! 
! for ac_func in mmap
! 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
! 
! 
! if test "${ac_cv_header_sys_mman_h+set}" = set; then
!   echo "$as_me:$LINENO: checking for sys/mman.h" >&5
! echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6
! if test "${ac_cv_header_sys_mman_h+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  fi
! echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
! echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6
  else
!   # Is the header compilable?
! echo "$as_me:$LINENO: checking sys/mman.h usability" >&5
! echo $ECHO_N "checking sys/mman.h 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 <sys/mman.h>
! _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 sys/mman.h presence" >&5
! echo $ECHO_N "checking sys/mman.h 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 <sys/mman.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
!   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: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&5
! echo "$as_me: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
!     { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the compiler's result" >&5
! echo "$as_me: WARNING: sys/mman.h: proceeding with the compiler's result" >&2;}
!     ac_header_preproc=yes
!     ;;
!   no:yes:* )
!     { echo "$as_me:$LINENO: WARNING: sys/mman.h: present but cannot be compiled" >&5
! echo "$as_me: WARNING: sys/mman.h: present but cannot be compiled" >&2;}
!     { echo "$as_me:$LINENO: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&5
! echo "$as_me: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&2;}
!     { echo "$as_me:$LINENO: WARNING: sys/mman.h: see the Autoconf documentation" >&5
! echo "$as_me: WARNING: sys/mman.h: see the Autoconf documentation" >&2;}
!     { echo "$as_me:$LINENO: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&5
! echo "$as_me: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&2;}
!     { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&5
! echo "$as_me: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&2;}
!     { echo "$as_me:$LINENO: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&5
! echo "$as_me: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&2;}
!     (
!       cat <<\_ASBOX
! ## ------------------------------------------- ##
! ## Report this to http://gcc.gnu.org/bugs.html ##
! ## ------------------------------------------- ##
! _ASBOX
!     ) |
!       sed "s/^/$as_me: WARNING:     /" >&2
!     ;;
! esac
! echo "$as_me:$LINENO: checking for sys/mman.h" >&5
! echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6
! if test "${ac_cv_header_sys_mman_h+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   ac_cv_header_sys_mman_h=$ac_header_preproc
  fi
! echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
! echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6
! 
! fi
! if test $ac_cv_header_sys_mman_h = yes; then
!   libffi_header_sys_mman_h=yes
  else
!   libffi_header_sys_mman_h=no
  fi
  
! 
! echo "$as_me:$LINENO: checking for mmap" >&5
! echo $ECHO_N "checking for mmap... $ECHO_C" >&6
! if test "${ac_cv_func_mmap+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 mmap to an innocuous variant, in case <limits.h> declares mmap.
!    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
! #define mmap innocuous_mmap
! 
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char mmap (); 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 mmap
  
+ /* 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 mmap ();
  /* 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_mmap) || defined (__stub___mmap)
  choke me
  #else
! char (*f) () = mmap;
! #endif
! #ifdef __cplusplus
! }
  #endif
  
! int
! main ()
! {
! return f != mmap;
!   ;
!   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_mmap=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_func_mmap=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
! echo "$as_me:$LINENO: result: $ac_cv_func_mmap" >&5
! echo "${ECHO_T}$ac_cv_func_mmap" >&6
! if test $ac_cv_func_mmap = yes; then
!   libffi_func_mmap=yes
  else
!   libffi_func_mmap=no
  fi
  
! if test "$libffi_header_sys_mman_h" != yes \
!  || test "$libffi_func_mmap" != yes; then
     ac_cv_func_mmap_file=no
     ac_cv_func_mmap_dev_zero=no
     ac_cv_func_mmap_anon=no
  else
!    echo "$as_me:$LINENO: checking whether read-only mmap of a plain file works" >&5
! echo $ECHO_N "checking whether read-only mmap of a plain file works... $ECHO_C" >&6
! if test "${ac_cv_func_mmap_file+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    # Add a system to this blacklist if
     # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a
*************** else
*** 2695,2706 ****
  	ac_cv_func_mmap_file=yes;;
     esac
  fi
! 
! echo "$ac_t""$ac_cv_func_mmap_file" 1>&6
!    echo $ac_n "checking whether mmap from /dev/zero works""... $ac_c" 1>&6
! echo "configure:2702: checking whether mmap from /dev/zero works" >&5
! if eval "test \"`echo '$''{'ac_cv_func_mmap_dev_zero'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    # Add a system to this blacklist if it has mmap() but /dev/zero
     # does not exist, or if mmapping /dev/zero does not give anonymous
--- 5165,5176 ----
  	ac_cv_func_mmap_file=yes;;
     esac
  fi
! echo "$as_me:$LINENO: result: $ac_cv_func_mmap_file" >&5
! echo "${ECHO_T}$ac_cv_func_mmap_file" >&6
!    echo "$as_me:$LINENO: checking whether mmap from /dev/zero works" >&5
! echo $ECHO_N "checking whether mmap from /dev/zero works... $ECHO_C" >&6
! if test "${ac_cv_func_mmap_dev_zero+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    # Add a system to this blacklist if it has mmap() but /dev/zero
     # does not exist, or if mmapping /dev/zero does not give anonymous
*************** else
*** 2719,2736 ****
  	ac_cv_func_mmap_dev_zero=yes;;
     esac
  fi
! 
! echo "$ac_t""$ac_cv_func_mmap_dev_zero" 1>&6
  
     # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for.
!    echo $ac_n "checking for MAP_ANON(YMOUS)""... $ac_c" 1>&6
! echo "configure:2728: checking for MAP_ANON(YMOUS)" >&5
! if eval "test \"`echo '$''{'ac_cv_decl_map_anon'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 2733 "configure"
! #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/mman.h>
  #include <unistd.h>
--- 5189,5209 ----
  	ac_cv_func_mmap_dev_zero=yes;;
     esac
  fi
! echo "$as_me:$LINENO: result: $ac_cv_func_mmap_dev_zero" >&5
! echo "${ECHO_T}$ac_cv_func_mmap_dev_zero" >&6
  
     # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for.
!    echo "$as_me:$LINENO: checking for MAP_ANON(YMOUS)" >&5
! echo $ECHO_N "checking for MAP_ANON(YMOUS)... $ECHO_C" >&6
! if test "${ac_cv_decl_map_anon+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/mman.h>
  #include <unistd.h>
*************** else
*** 2739,2769 ****
  #define MAP_ANONYMOUS MAP_ANON
  #endif
  
! int main() {
  int n = MAP_ANONYMOUS;
! ; return 0; }
! EOF
! if { (eval echo configure:2747: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    ac_cv_decl_map_anon=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_decl_map_anon=no
  fi
! rm -f conftest*
  fi
! 
! echo "$ac_t""$ac_cv_decl_map_anon" 1>&6
  
     if test $ac_cv_decl_map_anon = no; then
       ac_cv_func_mmap_anon=no
     else
!      echo $ac_n "checking whether mmap with MAP_ANON(YMOUS) works""... $ac_c" 1>&6
! echo "configure:2765: checking whether mmap with MAP_ANON(YMOUS) works" >&5
! if eval "test \"`echo '$''{'ac_cv_func_mmap_anon'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    # Add a system to this blacklist if it has mmap() and MAP_ANON or
     # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
--- 5212,5266 ----
  #define MAP_ANONYMOUS MAP_ANON
  #endif
  
! int
! main ()
! {
  int n = MAP_ANONYMOUS;
!   ;
!   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_decl_map_anon=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_decl_map_anon=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
! echo "$as_me:$LINENO: result: $ac_cv_decl_map_anon" >&5
! echo "${ECHO_T}$ac_cv_decl_map_anon" >&6
  
     if test $ac_cv_decl_map_anon = no; then
       ac_cv_func_mmap_anon=no
     else
!      echo "$as_me:$LINENO: checking whether mmap with MAP_ANON(YMOUS) works" >&5
! echo $ECHO_N "checking whether mmap with MAP_ANON(YMOUS) works... $ECHO_C" >&6
! if test "${ac_cv_func_mmap_anon+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    # Add a system to this blacklist if it has mmap() and MAP_ANON or
     # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
*************** else
*** 2777,2803 ****
  	ac_cv_func_mmap_anon=yes;;
     esac
  fi
! 
! echo "$ac_t""$ac_cv_func_mmap_anon" 1>&6
     fi
  fi
  
  if test $ac_cv_func_mmap_file = yes; then
!   cat >> confdefs.h <<\EOF
  #define HAVE_MMAP_FILE 1
! EOF
  
  fi
  if test $ac_cv_func_mmap_dev_zero = yes; then
!   cat >> confdefs.h <<\EOF
  #define HAVE_MMAP_DEV_ZERO 1
! EOF
  
  fi
  if test $ac_cv_func_mmap_anon = yes; then
!   cat >> confdefs.h <<\EOF
  #define HAVE_MMAP_ANON 1
! EOF
  
  fi
  
--- 5274,5303 ----
  	ac_cv_func_mmap_anon=yes;;
     esac
  fi
! echo "$as_me:$LINENO: result: $ac_cv_func_mmap_anon" >&5
! echo "${ECHO_T}$ac_cv_func_mmap_anon" >&6
     fi
  fi
  
  if test $ac_cv_func_mmap_file = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_MMAP_FILE 1
! _ACEOF
  
  fi
  if test $ac_cv_func_mmap_dev_zero = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_MMAP_DEV_ZERO 1
! _ACEOF
  
  fi
  if test $ac_cv_func_mmap_anon = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_MMAP_ANON 1
! _ACEOF
  
  fi
  
*************** case "$host" in
*** 2818,2834 ****
  i*86-*-linux*) TARGET=X86; TARGETDIR=x86;;
  i*86-*-solaris*) TARGET=X86; TARGETDIR=x86;;
  i*86-*-beos*) TARGET=X86; TARGETDIR=x86;;
! i*86-*-freebsd*) TARGET=X86; TARGETDIR=x86;;
! i*86-*-netbsdelf*) 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;;
  sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;;
  sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;;
! sparc-*-linux* | sparc-*-netbsdelf*) TARGET=SPARC; TARGETDIR=sparc;;
! sparc64-*-linux* | sparc64-*-netbsd*) TARGET=SPARC; TARGETDIR=sparc;;
! alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-netbsd*) TARGET=ALPHA; TARGETDIR=alpha;;
  ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;;
  m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;;
  mips64*-*);;
  mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS_IRIX; TARGETDIR=mips;;
--- 5318,5336 ----
  i*86-*-linux*) TARGET=X86; TARGETDIR=x86;;
  i*86-*-solaris*) TARGET=X86; TARGETDIR=x86;;
  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-*-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;;
  sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;;
  sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;;
! sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) 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;;
+ m32r*-*-linux* ) TARGET=M32R; TARGETDIR=m32r;;
  m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;;
  mips64*-*);;
  mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS_IRIX; TARGETDIR=mips;;
*************** powerpc-*-darwin*) TARGET=POWERPC_DARWIN
*** 2839,2856 ****
  powerpc-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
  rs6000-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
  arm*-*-linux-*) TARGET=ARM; TARGETDIR=arm;;
! arm*-*-netbsdelf*) TARGET=ARM; TARGETDIR=arm;;
  s390-*-linux-*) TARGET=S390; TARGETDIR=s390;;
  s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;;
! x86_64-*-linux*) TARGET=X86_64; TARGETDIR=x86;;
  sh-*-linux* | sh[34]*-*-linux*) TARGET=SH; TARGETDIR=sh;;
  sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
  esac
  
  
  
  if test $TARGETDIR = unknown; then
!   { echo "configure: error: "libffi has not been ported to $host."" 1>&2; exit 1; }
  fi
  
  
--- 5341,5361 ----
  powerpc-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
  rs6000-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
  arm*-*-linux-*) TARGET=ARM; TARGETDIR=arm;;
! arm*-*-netbsdelf* | arm*-*-knetbsd*-gnu) TARGET=ARM; TARGETDIR=arm;;
  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;;
  sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
+ hppa-*-linux* | parisc-*-linux*) TARGET=PA; TARGETDIR=pa;;
  esac
  
  
  
  if test $TARGETDIR = unknown; then
!   { { echo "$as_me:$LINENO: error: \"libffi has not been ported to $host.\"" >&5
! echo "$as_me: error: \"libffi has not been ported to $host.\"" >&2;}
!    { (exit 1); exit 1; }; }
  fi
  
  
*************** else
*** 2864,2869 ****
--- 5369,5375 ----
  fi
  
  
+ 
  if test x$TARGET = xMIPS_LINUX; then
    MIPS_LINUX_TRUE=
    MIPS_LINUX_FALSE='#'
*************** else
*** 2873,2878 ****
--- 5379,5385 ----
  fi
  
  
+ 
  if test x$TARGET = xSPARC; then
    SPARC_TRUE=
    SPARC_FALSE='#'
*************** else
*** 2882,2887 ****
--- 5389,5395 ----
  fi
  
  
+ 
  if test x$TARGET = xX86; then
    X86_TRUE=
    X86_FALSE='#'
*************** else
*** 2891,2896 ****
--- 5399,5405 ----
  fi
  
  
+ 
  if test x$TARGET = xX86_WIN32; then
    X86_WIN32_TRUE=
    X86_WIN32_FALSE='#'
*************** else
*** 2900,2905 ****
--- 5409,5415 ----
  fi
  
  
+ 
  if test x$TARGET = xALPHA; then
    ALPHA_TRUE=
    ALPHA_FALSE='#'
*************** else
*** 2909,2914 ****
--- 5419,5425 ----
  fi
  
  
+ 
  if test x$TARGET = xIA64; then
    IA64_TRUE=
    IA64_FALSE='#'
*************** else
*** 2918,2923 ****
--- 5429,5445 ----
  fi
  
  
+ 
+ if test x$TARGET = xM32R; then
+   M32R_TRUE=
+   M32R_FALSE='#'
+ else
+   M32R_TRUE='#'
+   M32R_FALSE=
+ fi
+ 
+ 
+ 
  if test x$TARGET = xM68K; then
    M68K_TRUE=
    M68K_FALSE='#'
*************** else
*** 2927,2932 ****
--- 5449,5455 ----
  fi
  
  
+ 
  if test x$TARGET = xPOWERPC; then
    POWERPC_TRUE=
    POWERPC_FALSE='#'
*************** else
*** 2936,2941 ****
--- 5459,5465 ----
  fi
  
  
+ 
  if test x$TARGET = xPOWERPC_AIX; then
    POWERPC_AIX_TRUE=
    POWERPC_AIX_FALSE='#'
*************** else
*** 2945,2950 ****
--- 5469,5475 ----
  fi
  
  
+ 
  if test x$TARGET = xPOWERPC_DARWIN; then
    POWERPC_DARWIN_TRUE=
    POWERPC_DARWIN_FALSE='#'
*************** else
*** 2954,2959 ****
--- 5479,5485 ----
  fi
  
  
+ 
  if test x$TARGET = xARM; then
    ARM_TRUE=
    ARM_FALSE='#'
*************** else
*** 2963,2968 ****
--- 5489,5505 ----
  fi
  
  
+ 
+ if test x$TARGET = xFRV; then
+   FRV_TRUE=
+   FRV_FALSE='#'
+ else
+   FRV_TRUE='#'
+   FRV_FALSE=
+ fi
+ 
+ 
+ 
  if test x$TARGET = xS390; then
    S390_TRUE=
    S390_FALSE='#'
*************** else
*** 2972,2977 ****
--- 5509,5515 ----
  fi
  
  
+ 
  if test x$TARGET = xX86_64; then
    X86_64_TRUE=
    X86_64_FALSE='#'
*************** else
*** 2981,2986 ****
--- 5519,5525 ----
  fi
  
  
+ 
  if test x$TARGET = xSH; then
    SH_TRUE=
    SH_FALSE='#'
*************** else
*** 2990,2995 ****
--- 5529,5535 ----
  fi
  
  
+ 
  if test x$TARGET = xSH64; then
    SH64_TRUE=
    SH64_FALSE='#'
*************** else
*** 2998,3048 ****
    SH64_FALSE=
  fi
  
  case x$TARGET in
    xMIPS*) TARGET=MIPS ;;
    *) ;;
  esac
  
! echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
! echo "configure:3008: checking for ANSI C header files" >&5
! if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3013 "configure"
! #include "confdefs.h"
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  #include <float.h>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3021: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
    ac_cv_header_stdc=yes
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_header_stdc=no
  fi
! rm -f conftest*
  
  if test $ac_cv_header_stdc = yes; then
    # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
! cat > conftest.$ac_ext <<EOF
! #line 3038 "configure"
! #include "confdefs.h"
  #include <string.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "memchr" >/dev/null 2>&1; then
    :
  else
-   rm -rf conftest*
    ac_cv_header_stdc=no
  fi
  rm -f conftest*
--- 5538,5629 ----
    SH64_FALSE=
  fi
  
+ 
+ 
+ if test x$TARGET = xPA; then
+   PA_TRUE=
+   PA_FALSE='#'
+ else
+   PA_TRUE='#'
+   PA_FALSE=
+ fi
+ 
+ 
  case x$TARGET in
    xMIPS*) TARGET=MIPS ;;
    *) ;;
  esac
  
! 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
*** 3051,3066 ****
  
  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 <<EOF
! #line 3056 "configure"
! #include "confdefs.h"
  #include <stdlib.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "free" >/dev/null 2>&1; then
    :
  else
-   rm -rf conftest*
    ac_cv_header_stdc=no
  fi
  rm -f conftest*
--- 5632,5650 ----
  
  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
*** 3069,3211 ****
  
  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 <<EOF
! #line 3077 "configure"
! #include "confdefs.h"
  #include <ctype.h>
! #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
! #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
! #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); }
  
! EOF
! if { (eval echo configure:3088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
    :
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -fr conftest*
!   ac_cv_header_stdc=no
  fi
! rm -fr conftest*
  fi
- 
  fi
  fi
! 
! echo "$ac_t""$ac_cv_header_stdc" 1>&6
  if test $ac_cv_header_stdc = yes; then
!   cat >> confdefs.h <<\EOF
  #define STDC_HEADERS 1
! EOF
  
  fi
  
  for ac_func in memcpy
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:3114: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3119 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:3142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
  # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
  # for constant arguments.  Useless!
! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
! echo "configure:3169: checking for working alloca.h" >&5
! if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3174 "configure"
! #include "confdefs.h"
  #include <alloca.h>
! int main() {
! char *p = alloca(2 * sizeof(int));
! ; return 0; }
! EOF
! if { (eval echo configure:3181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   ac_cv_header_alloca_h=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_header_alloca_h=no
  fi
! rm -f conftest*
  fi
  
! echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
! if test $ac_cv_header_alloca_h = yes; then
!   cat >> confdefs.h <<\EOF
  #define HAVE_ALLOCA_H 1
! EOF
  
  fi
  
! echo $ac_n "checking for alloca""... $ac_c" 1>&6
! echo "configure:3202: checking for alloca" >&5
! if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3207 "configure"
! #include "confdefs.h"
! 
  #ifdef __GNUC__
  # define alloca __builtin_alloca
  #else
--- 5653,5902 ----
  
  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
  
+ 
  for ac_func in memcpy
  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
  
  # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
  # for constant arguments.  Useless!
! echo "$as_me:$LINENO: checking for working alloca.h" >&5
! echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6
! if test "${ac_cv_working_alloca_h+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 <alloca.h>
! int
! main ()
! {
! char *p = (char *) alloca (2 * sizeof (int));
!   ;
!   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_working_alloca_h=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_working_alloca_h=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
+ echo "${ECHO_T}$ac_cv_working_alloca_h" >&6
+ if test $ac_cv_working_alloca_h = yes; then
  
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_ALLOCA_H 1
! _ACEOF
  
  fi
  
! echo "$as_me:$LINENO: checking for alloca" >&5
! echo $ECHO_N "checking for alloca... $ECHO_C" >&6
! if test "${ac_cv_func_alloca_works+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.  */
  #ifdef __GNUC__
  # define alloca __builtin_alloca
  #else
*************** char *alloca ();
*** 3227,3363 ****
  # endif
  #endif
  
! int main() {
! char *p = (char *) alloca(1);
! ; return 0; }
! EOF
! if { (eval echo configure:3235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    ac_cv_func_alloca_works=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_func_alloca_works=no
  fi
! rm -f conftest*
  fi
  
- echo "$ac_t""$ac_cv_func_alloca_works" 1>&6
  if test $ac_cv_func_alloca_works = yes; then
-   cat >> confdefs.h <<\EOF
- #define HAVE_ALLOCA 1
- EOF
  
! fi
  
! if test $ac_cv_func_alloca_works = no; then
    # The SVR3 libPW and SVR4 libucb both contain incompatible functions
!   # that cause trouble.  Some versions do not even contain alloca or
!   # contain a buggy version.  If you still want to use their alloca,
!   # use ar to extract alloca.o from them instead of compiling alloca.c.
!   ALLOCA=alloca.${ac_objext}
!   cat >> confdefs.h <<\EOF
  #define C_ALLOCA 1
! EOF
  
  
! echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
! echo "configure:3267: checking whether alloca needs Cray hooks" >&5
! if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3272 "configure"
! #include "confdefs.h"
  #if defined(CRAY) && ! defined(CRAY2)
  webecray
  #else
  wenotbecray
  #endif
  
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "webecray" >/dev/null 2>&1; then
!   rm -rf conftest*
    ac_cv_os_cray=yes
  else
-   rm -rf conftest*
    ac_cv_os_cray=no
  fi
  rm -f conftest*
  
  fi
! 
! echo "$ac_t""$ac_cv_os_cray" 1>&6
  if test $ac_cv_os_cray = yes; then
! for ac_func in _getb67 GETB67 getb67; do
!   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:3297: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3302 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:3325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   cat >> confdefs.h <<EOF
  #define CRAY_STACKSEG_END $ac_func
! EOF
  
!   break
! else
!   echo "$ac_t""no" 1>&6
  fi
  
! done
  fi
  
! echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
! echo "configure:3352: checking stack direction for C alloca" >&5
! if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test "$cross_compiling" = yes; then
    ac_cv_c_stack_direction=0
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3360 "configure"
! #include "confdefs.h"
  find_stack_direction ()
  {
    static char *addr = 0;
--- 5918,6134 ----
  # endif
  #endif
  
! int
! main ()
! {
! char *p = (char *) alloca (1);
!   ;
!   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_alloca_works=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_func_alloca_works=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
+ echo "${ECHO_T}$ac_cv_func_alloca_works" >&6
  
  if test $ac_cv_func_alloca_works = yes; then
  
! cat >>confdefs.h <<\_ACEOF
! #define HAVE_ALLOCA 1
! _ACEOF
  
! else
    # The SVR3 libPW and SVR4 libucb both contain incompatible functions
! # that cause trouble.  Some versions do not even contain alloca or
! # contain a buggy version.  If you still want to use their alloca,
! # use ar to extract alloca.o from them instead of compiling alloca.c.
! 
! ALLOCA=alloca.$ac_objext
! 
! cat >>confdefs.h <<\_ACEOF
  #define C_ALLOCA 1
! _ACEOF
  
  
! echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
! echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6
! if test "${ac_cv_os_cray+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.  */
  #if defined(CRAY) && ! defined(CRAY2)
  webecray
  #else
  wenotbecray
  #endif
  
! _ACEOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "webecray" >/dev/null 2>&1; then
    ac_cv_os_cray=yes
  else
    ac_cv_os_cray=no
  fi
  rm -f conftest*
  
  fi
! echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
! echo "${ECHO_T}$ac_cv_os_cray" >&6
  if test $ac_cv_os_cray = yes; then
!   for ac_func in _getb67 GETB67 getb67; 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 CRAY_STACKSEG_END $ac_func
! _ACEOF
  
!     break
  fi
  
!   done
  fi
  
! echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
! echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6
! if test "${ac_cv_c_stack_direction+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test "$cross_compiling" = yes; then
    ac_cv_c_stack_direction=0
  else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! int
  find_stack_direction ()
  {
    static char *addr = 0;
*************** find_stack_direction ()
*** 3370,3478 ****
    else
      return (&dummy > addr) ? 1 : -1;
  }
  main ()
  {
!   exit (find_stack_direction() < 0);
  }
! EOF
! if { (eval echo configure:3379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
    ac_cv_c_stack_direction=1
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -fr conftest*
!   ac_cv_c_stack_direction=-1
  fi
! rm -fr conftest*
  fi
- 
  fi
  
! echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
! cat >> confdefs.h <<EOF
  #define STACK_DIRECTION $ac_cv_c_stack_direction
! EOF
  
  fi
  
  
! echo $ac_n "checking size of double""... $ac_c" 1>&6
! echo "configure:3402: checking size of double" >&5
! if eval "test \"`echo '$''{'ac_cv_sizeof_double'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat > conftest.$ac_ext <<EOF
! #line 3408 "configure"
! #include "confdefs.h"
  #include "confdefs.h"
  #include <sys/types.h>
  
  
! int main() {
  switch (0) case 0: case (sizeof (double) == $ac_size):;
! ; return 0; }
! EOF
! if { (eval echo configure:3418: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    ac_cv_sizeof_double=$ac_size
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
  fi
! rm -f conftest*
    if test x$ac_cv_sizeof_double != x ; then break; fi
  done
  
  fi
  
  if test x$ac_cv_sizeof_double = x ; then
!   { echo "configure: error: cannot determine a size for double" 1>&2; exit 1; }
  fi
! echo "$ac_t""$ac_cv_sizeof_double" 1>&6
! cat >> confdefs.h <<EOF
  #define SIZEOF_DOUBLE $ac_cv_sizeof_double
! EOF
  
  
! echo $ac_n "checking size of long double""... $ac_c" 1>&6
! echo "configure:3441: checking size of long double" >&5
! if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat > conftest.$ac_ext <<EOF
! #line 3447 "configure"
! #include "confdefs.h"
  #include "confdefs.h"
  #include <sys/types.h>
  
  
! int main() {
  switch (0) case 0: case (sizeof (long double) == $ac_size):;
! ; return 0; }
! EOF
! if { (eval echo configure:3457: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    ac_cv_sizeof_long_double=$ac_size
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
  fi
! rm -f conftest*
    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 "configure: error: cannot determine a size for long double" 1>&2; exit 1; }
  fi
! echo "$ac_t""$ac_cv_sizeof_long_double" 1>&6
! cat >> confdefs.h <<EOF
  #define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
! EOF
  
  
  
--- 6141,6327 ----
    else
      return (&dummy > addr) ? 1 : -1;
  }
+ 
+ int
  main ()
  {
!   exit (find_stack_direction () < 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_c_stack_direction=1
  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_stack_direction=-1
  fi
! rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+ echo "${ECHO_T}$ac_cv_c_stack_direction" >&6
  
! cat >>confdefs.h <<_ACEOF
  #define STACK_DIRECTION $ac_cv_c_stack_direction
! _ACEOF
! 
  
  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;
! }
! _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_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;
! }
! _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_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
  
  
  
*************** HAVE_LONG_DOUBLE=0
*** 3481,3550 ****
  if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
    if test $ac_cv_sizeof_long_double != 0; then
      HAVE_LONG_DOUBLE=1
!     cat >> confdefs.h <<\EOF
  #define HAVE_LONG_DOUBLE 1
! EOF
  
    fi
  fi
  
  
! echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
! echo "configure:3494: checking whether byte ordering is bigendian" >&5
! if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_cv_c_bigendian=unknown
  # See if sys/param.h defines the BYTE_ORDER macro.
! cat > conftest.$ac_ext <<EOF
! #line 3501 "configure"
! #include "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; }
! EOF
! if { (eval echo configure:3512: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    # It does; now see whether it defined to BIG_ENDIAN or not.
! cat > conftest.$ac_ext <<EOF
! #line 3516 "configure"
! #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/param.h>
! int main() {
  
  #if BYTE_ORDER != BIG_ENDIAN
   not big endian
  #endif
! ; return 0; }
! EOF
! if { (eval echo configure:3527: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    ac_cv_c_bigendian=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_c_bigendian=no
  fi
! rm -f conftest*
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
  fi
! rm -f conftest*
  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 <<EOF
! #line 3547 "configure"
! #include "confdefs.h"
  main () {
    /* Are we little or big endian?  From Harbison&Steele.  */
    union
--- 6330,6458 ----
  if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
    if test $ac_cv_sizeof_long_double != 0; then
      HAVE_LONG_DOUBLE=1
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_LONG_DOUBLE 1
! _ACEOF
  
    fi
  fi
  
  
! 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
*************** main () {
*** 3555,3580 ****
    u.l = 1;
    exit (u.c[sizeof (long) - 1] == 1);
  }
! EOF
! if { (eval echo configure:3560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
    ac_cv_c_bigendian=no
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -fr conftest*
!   ac_cv_c_bigendian=yes
  fi
! rm -fr conftest*
  fi
- 
  fi
  fi
! 
! echo "$ac_t""$ac_cv_c_bigendian" 1>&6
  if test $ac_cv_c_bigendian = unknown; then
! echo $ac_n "checking to probe for byte ordering""... $ac_c" 1>&6
! echo "configure:3578: checking to probe for byte ordering" >&5
  
  cat >conftest.c <<EOF
  short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
--- 6463,6498 ----
    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 };
*************** void _ebcdic() { char* s = (char*) ebcdi
*** 3586,3592 ****
  int main() { _ascii (); _ebcdic (); return 0; }
  EOF
   if test -f conftest.c ; then
!      if ${CC-cc} ${CFLAGS} 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
--- 6504,6510 ----
  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
*************** EOF
*** 3602,3716 ****
          echo $ac_n 'guessing bigendian ...  ' >&6
       fi
    fi
! echo "$ac_t""$ac_cv_c_bigendian" 1>&6
  fi
  if test $ac_cv_c_bigendian = yes; then
!   cat >> confdefs.h <<\EOF
  #define WORDS_BIGENDIAN 1
! EOF
  
!   cat >> confdefs.h <<\EOF
  #define HOST_WORDS_BIG_ENDIAN 1
! EOF
  
    BYTEORDER=4321
  else
    BYTEORDER=1234
  fi
! cat >> confdefs.h <<EOF
  #define BYTEORDER $BYTEORDER
! EOF
  
  if test $ac_cv_c_bigendian = unknown; then
!   { echo "configure: error: unknown endianess - sorry" 1>&2; exit 1; }
  fi
  
  
  if test x$TARGET = xSPARC; then
!     echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6
! echo "configure:3632: checking assembler and linker support unaligned pc related relocs" >&5
! if eval "test \"`echo '$''{'libffi_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
  	save_CFLAGS="$CFLAGS"
  	save_LDFLAGS="$LDFLAGS"
  	CFLAGS="$CFLAGS -fpic"
  	LDFLAGS="$LDFLAGS -shared"
! 	cat > conftest.$ac_ext <<EOF
! #line 3642 "configure"
! #include "confdefs.h"
  asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:3649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    libffi_cv_as_sparc_ua_pcrel=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   libffi_cv_as_sparc_ua_pcrel=no
  fi
! rm -f conftest*
  	CFLAGS="$save_CFLAGS"
  	LDFLAGS="$save_LDFLAGS"
  fi
! 
! echo "$ac_t""$libffi_cv_as_sparc_ua_pcrel" 1>&6
      if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then
! 	cat >> confdefs.h <<\EOF
  #define HAVE_AS_SPARC_UA_PCREL 1
! EOF
  
      fi
  
!     echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6
! echo "configure:3672: checking assembler .register pseudo-op support" >&5
! if eval "test \"`echo '$''{'libffi_cv_as_register_pseudo_op'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
         libffi_cv_as_register_pseudo_op=unknown
         # Check if we have .register
!        cat > conftest.$ac_ext <<EOF
! #line 3680 "configure"
! #include "confdefs.h"
  asm (".register %g2, #scratch");
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:3687: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    libffi_cv_as_register_pseudo_op=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   libffi_cv_as_register_pseudo_op=no
! fi
! rm -f conftest*
!     
  fi
  
! echo "$ac_t""$libffi_cv_as_register_pseudo_op" 1>&6
      if test "x$libffi_cv_as_register_pseudo_op" = xyes; then
!        cat >> confdefs.h <<\EOF
  #define HAVE_AS_REGISTER_PSEUDO_OP 1
! EOF
  
      fi
  fi
  
! echo $ac_n "checking whether .eh_frame section should be read-only""... $ac_c" 1>&6
! echo "configure:3710: checking whether .eh_frame section should be read-only" >&5
! if eval "test \"`echo '$''{'libffi_cv_ro_eh_frame'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
  	libffi_cv_ro_eh_frame=no
  	echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
  	if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
--- 6520,6697 ----
          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
!     echo "$as_me:$LINENO: checking assembler and linker support unaligned pc related relocs" >&5
! echo $ECHO_N "checking assembler and linker support unaligned pc related relocs... $ECHO_C" >&6
! if test "${libffi_cv_as_sparc_ua_pcrel+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
! 
  	save_CFLAGS="$CFLAGS"
  	save_LDFLAGS="$LDFLAGS"
  	CFLAGS="$CFLAGS -fpic"
  	LDFLAGS="$LDFLAGS -shared"
! 	cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");
! 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
    libffi_cv_as_sparc_ua_pcrel=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! libffi_cv_as_sparc_ua_pcrel=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  	CFLAGS="$save_CFLAGS"
  	LDFLAGS="$save_LDFLAGS"
  fi
! echo "$as_me:$LINENO: result: $libffi_cv_as_sparc_ua_pcrel" >&5
! echo "${ECHO_T}$libffi_cv_as_sparc_ua_pcrel" >&6
      if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_AS_SPARC_UA_PCREL 1
! _ACEOF
  
      fi
  
!     echo "$as_me:$LINENO: checking assembler .register pseudo-op support" >&5
! echo $ECHO_N "checking assembler .register pseudo-op support... $ECHO_C" >&6
! if test "${libffi_cv_as_register_pseudo_op+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
! 
         libffi_cv_as_register_pseudo_op=unknown
         # Check if we have .register
!        cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  asm (".register %g2, #scratch");
! 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
    libffi_cv_as_register_pseudo_op=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! libffi_cv_as_register_pseudo_op=no
  fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  
! fi
! echo "$as_me:$LINENO: result: $libffi_cv_as_register_pseudo_op" >&5
! echo "${ECHO_T}$libffi_cv_as_register_pseudo_op" >&6
      if test "x$libffi_cv_as_register_pseudo_op" = xyes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_AS_REGISTER_PSEUDO_OP 1
! _ACEOF
  
      fi
  fi
  
! echo "$as_me:$LINENO: checking whether .eh_frame section should be read-only" >&5
! echo $ECHO_N "checking whether .eh_frame section should be read-only... $ECHO_C" >&6
! if test "${libffi_cv_ro_eh_frame+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
! 
  	libffi_cv_ro_eh_frame=no
  	echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
  	if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
*************** else
*** 3722,3744 ****
  	    fi
  	fi
  	rm -f conftest.*
-     
- fi
  
! echo "$ac_t""$libffi_cv_ro_eh_frame" 1>&6
  if test "x$libffi_cv_ro_eh_frame" = xyes; then
!     cat >> confdefs.h <<\EOF
  #define HAVE_RO_EH_FRAME 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define EH_FRAME_FLAGS "a"
! EOF
  
  else
!     cat >> confdefs.h <<\EOF
  #define EH_FRAME_FLAGS "aw"
! EOF
  
  fi
  
--- 6703,6728 ----
  	    fi
  	fi
  	rm -f conftest.*
  
! fi
! echo "$as_me:$LINENO: result: $libffi_cv_ro_eh_frame" >&5
! echo "${ECHO_T}$libffi_cv_ro_eh_frame" >&6
  if test "x$libffi_cv_ro_eh_frame" = xyes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_RO_EH_FRAME 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define EH_FRAME_FLAGS "a"
! _ACEOF
  
  else
! 
! cat >>confdefs.h <<\_ACEOF
  #define EH_FRAME_FLAGS "aw"
! _ACEOF
  
  fi
  
*************** fi
*** 3751,3799 ****
  if test "${enable_debug+set}" = set; then
    enableval="$enable_debug"
    if test "$enable_debug" = "yes"; then
!     cat >> confdefs.h <<\EOF
  #define FFI_DEBUG 1
! EOF
  
    fi
! fi
! 
  
  # Check whether --enable-structs or --disable-structs was given.
  if test "${enable_structs+set}" = set; then
    enableval="$enable_structs"
    if test "$enable_structs" = "no"; then
!     cat >> confdefs.h <<\EOF
  #define FFI_NO_STRUCTS 1
! EOF
  
    fi
! fi
! 
  
  # Check whether --enable-raw-api or --disable-raw-api was given.
  if test "${enable_raw_api+set}" = set; then
    enableval="$enable_raw_api"
    if test "$enable_raw_api" = "no"; then
!     cat >> confdefs.h <<\EOF
  #define FFI_NO_RAW_API 1
! EOF
  
    fi
! fi
! 
  
  # Check whether --enable-purify-safety or --disable-purify-safety was given.
  if test "${enable_purify_safety+set}" = set; then
    enableval="$enable_purify_safety"
    if test "$enable_purify_safety" = "yes"; then
!     cat >> confdefs.h <<\EOF
  #define USING_PURIFY 1
! EOF
  
    fi
! fi
! 
  
  if test -n "$with_cross_host" &&
     test x"$with_cross_host" != x"no"; then
--- 6735,6783 ----
  if test "${enable_debug+set}" = set; then
    enableval="$enable_debug"
    if test "$enable_debug" = "yes"; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define FFI_DEBUG 1
! _ACEOF
  
    fi
! fi;
  
  # Check whether --enable-structs or --disable-structs was given.
  if test "${enable_structs+set}" = set; then
    enableval="$enable_structs"
    if test "$enable_structs" = "no"; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define FFI_NO_STRUCTS 1
! _ACEOF
  
    fi
! fi;
  
  # Check whether --enable-raw-api or --disable-raw-api was given.
  if test "${enable_raw_api+set}" = set; then
    enableval="$enable_raw_api"
    if test "$enable_raw_api" = "no"; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define FFI_NO_RAW_API 1
! _ACEOF
  
    fi
! fi;
  
  # Check whether --enable-purify-safety or --disable-purify-safety was given.
  if test "${enable_purify_safety+set}" = set; then
    enableval="$enable_purify_safety"
    if test "$enable_purify_safety" = "yes"; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define USING_PURIFY 1
! _ACEOF
  
    fi
! fi;
  
  if test -n "$with_cross_host" &&
     test x"$with_cross_host" != x"no"; then
*************** esac
*** 3811,4330 ****
  
  
  
! #Figure out where generated headers like ffitarget.h get installed.
! gcc_version_trigger=${srcdir}/../gcc/version.c
! gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
  gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
- tool_include_dir='$(libdir)/gcc/$(target_alias)/'${gcc_version}/include
  
  
  
  
  if test "${multilib}" = "yes"; then
    multilib_arg="--enable-multilib"
  else
    multilib_arg=
  fi
  
! trap '' 1 2 15
! cat > confcache <<\EOF
  # 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.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # 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 \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     echo "updating cache $cache_file"
!     cat confcache > $cache_file
    else
      echo "not updating unwritable cache $cache_file"
    fi
  fi
  rm -f confcache
  
- trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
- 
  test "x$prefix" = xNONE && prefix=$ac_default_prefix
  # Let make expand exec_prefix.
  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  
! # Any assignment to VPATH causes Sun make to only execute
! # the first set of double-colon rules, so remove it if not needed.
! # If there is a colon in the path, we need to keep it.
  if test "x$srcdir" = x.; then
!   ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  fi
  
- trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
- 
  DEFS=-DHAVE_CONFIG_H
  
! # Without the "./", some shells look in PATH for config.status.
! : ${CONFIG_STATUS=./config.status}
  
! echo creating $CONFIG_STATUS
! rm -f $CONFIG_STATUS
! cat > $CONFIG_STATUS <<EOF
! #! /bin/sh
! # Generated automatically by configure.
  # Run this file to recreate the current configuration.
- # This directory was configured as follows,
- # on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
- #
- # $0 $ac_configure_args
- #
  # Compiler output produced by configure, useful for debugging
! # configure, is in ./config.log if it exists.
  
! ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
! for ac_option
  do
!   case "\$ac_option" in
!   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
!     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
!   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
!     echo "$CONFIG_STATUS generated by autoconf version 2.13"
!     exit 0 ;;
!   -help | --help | --hel | --he | --h)
!     echo "\$ac_cs_usage"; exit 0 ;;
!   *) echo "\$ac_cs_usage"; exit 1 ;;
!   esac
  done
  
! ac_given_srcdir=$srcdir
! ac_given_INSTALL="$INSTALL"
  
! trap 'rm -fr `echo "include/Makefile testsuite/Makefile include/ffi.h Makefile fficonfig.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
! EOF
! cat >> $CONFIG_STATUS <<EOF
  
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
-  s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
- $ac_vpsub
- $extrasub
- s%@SHELL@%$SHELL%g
- s%@CFLAGS@%$CFLAGS%g
- s%@CPPFLAGS@%$CPPFLAGS%g
- s%@CXXFLAGS@%$CXXFLAGS%g
- s%@FFLAGS@%$FFLAGS%g
- s%@DEFS@%$DEFS%g
- s%@LDFLAGS@%$LDFLAGS%g
- s%@LIBS@%$LIBS%g
- s%@exec_prefix@%$exec_prefix%g
- s%@prefix@%$prefix%g
- s%@program_transform_name@%$program_transform_name%g
- s%@bindir@%$bindir%g
- s%@sbindir@%$sbindir%g
- s%@libexecdir@%$libexecdir%g
- s%@datadir@%$datadir%g
- s%@sysconfdir@%$sysconfdir%g
- s%@sharedstatedir@%$sharedstatedir%g
- s%@localstatedir@%$localstatedir%g
- s%@libdir@%$libdir%g
- s%@includedir@%$includedir%g
- s%@oldincludedir@%$oldincludedir%g
- s%@infodir@%$infodir%g
- s%@mandir@%$mandir%g
- s%@libffi_basedir@%$libffi_basedir%g
- s%@host@%$host%g
- s%@host_alias@%$host_alias%g
- s%@host_cpu@%$host_cpu%g
- s%@host_vendor@%$host_vendor%g
- s%@host_os@%$host_os%g
- s%@target@%$target%g
- s%@target_alias@%$target_alias%g
- s%@target_cpu@%$target_cpu%g
- s%@target_vendor@%$target_vendor%g
- s%@target_os@%$target_os%g
- s%@build@%$build%g
- s%@build_alias@%$build_alias%g
- s%@build_cpu@%$build_cpu%g
- s%@build_vendor@%$build_vendor%g
- s%@build_os@%$build_os%g
- s%@CC@%$CC%g
- s%@LN_S@%$LN_S%g
- s%@OBJEXT@%$OBJEXT%g
- s%@EXEEXT@%$EXEEXT%g
- s%@RANLIB@%$RANLIB%g
- s%@STRIP@%$STRIP%g
- s%@LIBTOOL@%$LIBTOOL%g
- s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
- s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
- s%@INSTALL_DATA@%$INSTALL_DATA%g
- s%@PACKAGE@%$PACKAGE%g
- s%@VERSION@%$VERSION%g
- s%@ACLOCAL@%$ACLOCAL%g
- s%@AUTOCONF@%$AUTOCONF%g
- s%@AUTOMAKE@%$AUTOMAKE%g
- s%@AUTOHEADER@%$AUTOHEADER%g
- s%@MAKEINFO@%$MAKEINFO%g
- s%@SET_MAKE@%$SET_MAKE%g
- s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
- s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
- s%@MAINT@%$MAINT%g
- s%@CPP@%$CPP%g
- s%@TESTSUBDIR_TRUE@%$TESTSUBDIR_TRUE%g
- s%@TESTSUBDIR_FALSE@%$TESTSUBDIR_FALSE%g
- s%@AM_RUNTESTFLAGS@%$AM_RUNTESTFLAGS%g
- s%@MIPS_IRIX_TRUE@%$MIPS_IRIX_TRUE%g
- s%@MIPS_IRIX_FALSE@%$MIPS_IRIX_FALSE%g
- s%@MIPS_LINUX_TRUE@%$MIPS_LINUX_TRUE%g
- s%@MIPS_LINUX_FALSE@%$MIPS_LINUX_FALSE%g
- s%@SPARC_TRUE@%$SPARC_TRUE%g
- s%@SPARC_FALSE@%$SPARC_FALSE%g
- s%@X86_TRUE@%$X86_TRUE%g
- s%@X86_FALSE@%$X86_FALSE%g
- s%@X86_WIN32_TRUE@%$X86_WIN32_TRUE%g
- s%@X86_WIN32_FALSE@%$X86_WIN32_FALSE%g
- s%@ALPHA_TRUE@%$ALPHA_TRUE%g
- s%@ALPHA_FALSE@%$ALPHA_FALSE%g
- s%@IA64_TRUE@%$IA64_TRUE%g
- s%@IA64_FALSE@%$IA64_FALSE%g
- s%@M68K_TRUE@%$M68K_TRUE%g
- s%@M68K_FALSE@%$M68K_FALSE%g
- s%@POWERPC_TRUE@%$POWERPC_TRUE%g
- s%@POWERPC_FALSE@%$POWERPC_FALSE%g
- s%@POWERPC_AIX_TRUE@%$POWERPC_AIX_TRUE%g
- s%@POWERPC_AIX_FALSE@%$POWERPC_AIX_FALSE%g
- s%@POWERPC_DARWIN_TRUE@%$POWERPC_DARWIN_TRUE%g
- s%@POWERPC_DARWIN_FALSE@%$POWERPC_DARWIN_FALSE%g
- s%@ARM_TRUE@%$ARM_TRUE%g
- s%@ARM_FALSE@%$ARM_FALSE%g
- s%@S390_TRUE@%$S390_TRUE%g
- s%@S390_FALSE@%$S390_FALSE%g
- s%@X86_64_TRUE@%$X86_64_TRUE%g
- s%@X86_64_FALSE@%$X86_64_FALSE%g
- s%@SH_TRUE@%$SH_TRUE%g
- s%@SH_FALSE@%$SH_FALSE%g
- s%@SH64_TRUE@%$SH64_TRUE%g
- s%@SH64_FALSE@%$SH64_FALSE%g
- s%@ALLOCA@%$ALLOCA%g
- s%@HAVE_LONG_DOUBLE@%$HAVE_LONG_DOUBLE%g
- s%@TARGET@%$TARGET%g
- s%@TARGETDIR@%$TARGETDIR%g
- s%@toolexecdir@%$toolexecdir%g
- s%@toolexeclibdir@%$toolexeclibdir%g
- s%@tool_include_dir@%$tool_include_dir%g
- s%@gcc_version@%$gcc_version%g
  
! CEOF
! EOF
  
- cat >> $CONFIG_STATUS <<\EOF
  
! # 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_cmds=90 # Maximum number of lines to put in a sed script.
! ac_file=1 # Number of current file.
! ac_beg=1 # First line for current file.
! ac_end=$ac_max_sed_cmds # 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" conftest.subs > conftest.s$ac_file
    else
!     sed "${ac_end}q" conftest.subs > conftest.s$ac_file
    fi
!   if test ! -s conftest.s$ac_file; then
!     ac_more_lines=false
!     rm -f conftest.s$ac_file
    else
!     if test -z "$ac_sed_cmds"; then
!       ac_sed_cmds="sed -f conftest.s$ac_file"
!     else
!       ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
!     fi
!     ac_file=`expr $ac_file + 1`
!     ac_beg=$ac_end
!     ac_end=`expr $ac_end + $ac_max_sed_cmds`
    fi
  done
! if test -z "$ac_sed_cmds"; then
!   ac_sed_cmds=cat
  fi
- EOF
  
! cat >> $CONFIG_STATUS <<EOF
  
! CONFIG_FILES=\${CONFIG_FILES-"include/Makefile testsuite/Makefile include/ffi.h Makefile"}
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
!   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
!   case "$ac_file" in
!   *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
!        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
!   *) ac_file_in="${ac_file}.in" ;;
    esac
  
!   # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  
!   # Remove last slash and all that follows it.  Not all systems have dirname.
!   ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
!   if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
!     # The file is in a subdirectory.
!     test ! -d "$ac_dir" && mkdir "$ac_dir"
!     ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
!     # A "../" for each directory in $ac_dir_suffix.
!     ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
!   else
!     ac_dir_suffix= ac_dots=
    fi
  
!   case "$ac_given_srcdir" in
!   .)  srcdir=.
!       if test -z "$ac_dots"; then top_srcdir=.
!       else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
!   /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
!   *) # Relative path.
!     srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
!     top_srcdir="$ac_dots$ac_given_srcdir" ;;
    esac
  
!   case "$ac_given_INSTALL" in
!   [/$]*) INSTALL="$ac_given_INSTALL" ;;
!   *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
!   esac
  
!   echo creating "$ac_file"
!   rm -f "$ac_file"
!   configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
!   case "$ac_file" in
!   *Makefile*) ac_comsub="1i\\
! # $configure_input" ;;
!   *) ac_comsub= ;;
    esac
  
!   ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
!   sed -e "$ac_comsub
! s%@configure_input@%$configure_input%g
! s%@srcdir@%$srcdir%g
! s%@top_srcdir@%$top_srcdir%g
! s%@INSTALL@%$INSTALL%g
! " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
! fi; done
! rm -f conftest.s*
  
  # 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='\3'
! ac_dD='%g'
! # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
! ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
! ac_uB='\([ 	]\)%\1#\2define\3'
  ac_uC=' '
! ac_uD='\4%g'
! # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
! ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
! ac_eB='$%\1#\2define\3'
! ac_eC=' '
! ac_eD='%g'
  
! if test "${CONFIG_HEADERS+set}" != set; then
! EOF
! cat >> $CONFIG_STATUS <<EOF
!   CONFIG_HEADERS="fficonfig.h"
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! fi
! for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
!   case "$ac_file" in
!   *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
!        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
!   *) ac_file_in="${ac_file}.in" ;;
    esac
  
!   echo creating $ac_file
  
!   rm -f conftest.frag conftest.in conftest.out
!   ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
!   cat $ac_file_inputs > conftest.in
  
! EOF
  
! # Transform confdefs.h into a sed script conftest.vals that substitutes
! # the proper values into config.h.in to produce config.h.  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.vals
! cat > conftest.hdr <<\EOF
! s/[\\&%]/\\&/g
! s%[\\$`]%\\&%g
! s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
! s%ac_d%ac_u%gp
! s%ac_u%ac_e%gp
! EOF
! sed -n -f conftest.hdr confdefs.h > conftest.vals
! rm -f conftest.hdr
  
  # 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.vals <<\EOF
! s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
! EOF
  
! # Break up conftest.vals because some shells have a limit on
! # the size of here documents, and old seds have small limits too.
  
  rm -f conftest.tail
! while :
  do
!   ac_lines=`grep -c . conftest.vals`
!   # grep -c gives empty output for an empty file on some AIX systems.
!   if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
!   # Write a limited-size here document to conftest.frag.
!   echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
!   sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
    echo 'CEOF
!   sed -f conftest.frag conftest.in > conftest.out
!   rm -f conftest.in
!   mv conftest.out conftest.in
! ' >> $CONFIG_STATUS
!   sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
!   rm -f conftest.vals
!   mv conftest.tail conftest.vals
  done
! rm -f conftest.vals
  
! cat >> $CONFIG_STATUS <<\EOF
!   rm -f conftest.frag conftest.h
!   echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
!   cat conftest.in >> conftest.h
!   rm -f conftest.in
!   if cmp -s $ac_file conftest.h 2>/dev/null; then
!     echo "$ac_file is unchanged"
!     rm -f conftest.h
    else
!     # Remove last slash and all that follows it.  Not all systems have dirname.
!       ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
!       if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
!       # The file is in a subdirectory.
!       test ! -d "$ac_dir" && mkdir "$ac_dir"
!     fi
!     rm -f $ac_file
!     mv conftest.h $ac_file
    fi
! fi; done
  
! EOF
  
! cat >> $CONFIG_STATUS <<EOF
! ac_sources="src/$TARGETDIR/ffitarget.h"
! ac_dests="include/ffitarget.h"
! EOF
  
! cat >> $CONFIG_STATUS <<\EOF
! srcdir=$ac_given_srcdir
! while test -n "$ac_sources"; do
!   set $ac_dests; ac_dest=$1; shift; ac_dests=$*
!   set $ac_sources; ac_source=$1; shift; ac_sources=$*
  
!   echo "linking $srcdir/$ac_source to $ac_dest"
  
    if test ! -r $srcdir/$ac_source; then
!     { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
    fi
    rm -f $ac_dest
  
    # Make relative symlinks.
!   # Remove last slash and all that follows it.  Not all systems have dirname.
!   ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
!   if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
!     # The dest file is in a subdirectory.
!     test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
!     ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
!     # A "../" for each directory in $ac_dest_dir_suffix.
!     ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
    else
!     ac_dest_dir_suffix= ac_dots=
!   fi
  
!   case "$srcdir" in
!   [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
!   *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
    esac
  
!   # Make a symlink if possible; otherwise try a hard link.
!   if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
!     ln $srcdir/$ac_source $ac_dest; then :
!   else
!     { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
!   fi
  done
! EOF
! cat >> $CONFIG_STATUS <<EOF
  
! srcdir=${srcdir}
! host=${host}
! target=${target}
! with_multisubdir=${with_multisubdir}
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! libffi_basedir=${libffi_basedir}
! CC="${CC}"
! DEFS="$DEFS"
! ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
  
! # Make target subdirectories if required.
! test -d src || mkdir src
! test -d src/${TARGETDIR} || mkdir src/${TARGETDIR}
! test -d include || mkdir include
  
  
  
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
  
- if test -n "$CONFIG_FILES"; then
-    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
-    ac_file=Makefile . ${srcdir}/${libffi_basedir}../config-ml.in
- fi
  
! exit 0
! EOF
  chmod +x $CONFIG_STATUS
! rm -fr confdefs* $ac_clean_files
! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  
--- 6795,8622 ----
  
  
  
! 
! 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
    multilib_arg=
  fi
  
!           ac_config_commands="$ac_config_commands include"
! 
!           ac_config_commands="$ac_config_commands src"
! 
! 
!           ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h"
! 
! 
!                                         ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile"
! 
! 
! 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 "${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 "${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 "${TESTSUBDIR_TRUE}" && test -z "${TESTSUBDIR_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"TESTSUBDIR\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"TESTSUBDIR\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${MIPS_IRIX_TRUE}" && test -z "${MIPS_IRIX_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"MIPS_IRIX\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"MIPS_IRIX\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${MIPS_LINUX_TRUE}" && test -z "${MIPS_LINUX_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"MIPS_LINUX\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"MIPS_LINUX\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${SPARC_TRUE}" && test -z "${SPARC_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"SPARC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"SPARC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${X86_TRUE}" && test -z "${X86_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"X86\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"X86\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${X86_WIN32_TRUE}" && test -z "${X86_WIN32_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"X86_WIN32\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"X86_WIN32\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${ALPHA_TRUE}" && test -z "${ALPHA_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"ALPHA\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"ALPHA\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${IA64_TRUE}" && test -z "${IA64_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"IA64\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"IA64\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${M32R_TRUE}" && test -z "${M32R_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"M32R\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"M32R\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${M68K_TRUE}" && test -z "${M68K_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"M68K\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"M68K\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${POWERPC_TRUE}" && test -z "${POWERPC_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"POWERPC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"POWERPC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${POWERPC_AIX_TRUE}" && test -z "${POWERPC_AIX_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"POWERPC_AIX\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"POWERPC_AIX\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${POWERPC_DARWIN_TRUE}" && test -z "${POWERPC_DARWIN_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"POWERPC_DARWIN\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"POWERPC_DARWIN\" 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\" 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
! echo "$as_me: error: conditional \"FRV\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${S390_TRUE}" && test -z "${S390_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"S390\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"S390\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"X86_64\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"X86_64\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${SH_TRUE}" && test -z "${SH_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"SH\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"SH\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${SH64_TRUE}" && test -z "${SH64_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"SH64\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"SH64\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${PA_TRUE}" && test -z "${PA_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"PA\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"PA\" 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 libffi $as_me 2.1, 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="\\
+ libffi config.status 2.1
+ 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.
! #
! 
! 
! srcdir="$srcdir"
! host="$host"
! target="$target"
! with_multisubdir="$with_multisubdir"
! with_multisrctop="$with_multisrctop"
! with_target_subdir="$with_target_subdir"
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! multi_basedir="$multi_basedir"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! CC="$CC"
! AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
! TARGETDIR="$TARGETDIR"
! 
! _ACEOF
! 
! 
! 
! cat >>$CONFIG_STATUS <<\_ACEOF
! for ac_config_target in $ac_config_targets
! do
!   case "$ac_config_target" in
!   # Handling of arguments.
!   "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
!   "include/ffi.h" ) CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;;
!   "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
!   "testsuite/Makefile" ) CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;;
!   "include/ffitarget.h" ) CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;;
!   "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
!   "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
!   "include" ) CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;;
!   "src" ) CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;;
!   "fficonfig.h" ) CONFIG_HEADERS="$CONFIG_HEADERS fficonfig.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,@multi_basedir@,$multi_basedir,;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,@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,@CC@,$CC,;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,@CFLAGS@,$CFLAGS,;t t
! s,@CCAS@,$CCAS,;t t
! s,@CCASFLAGS@,$CCASFLAGS,;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,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
! s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
! s,@MAINT@,$MAINT,;t t
! s,@CPP@,$CPP,;t t
! s,@CPPFLAGS@,$CPPFLAGS,;t t
! s,@EGREP@,$EGREP,;t t
! s,@TESTSUBDIR_TRUE@,$TESTSUBDIR_TRUE,;t t
! s,@TESTSUBDIR_FALSE@,$TESTSUBDIR_FALSE,;t t
! s,@AM_RUNTESTFLAGS@,$AM_RUNTESTFLAGS,;t t
! s,@MIPS_IRIX_TRUE@,$MIPS_IRIX_TRUE,;t t
! s,@MIPS_IRIX_FALSE@,$MIPS_IRIX_FALSE,;t t
! s,@MIPS_LINUX_TRUE@,$MIPS_LINUX_TRUE,;t t
! s,@MIPS_LINUX_FALSE@,$MIPS_LINUX_FALSE,;t t
! s,@SPARC_TRUE@,$SPARC_TRUE,;t t
! s,@SPARC_FALSE@,$SPARC_FALSE,;t t
! s,@X86_TRUE@,$X86_TRUE,;t t
! s,@X86_FALSE@,$X86_FALSE,;t t
! s,@X86_WIN32_TRUE@,$X86_WIN32_TRUE,;t t
! s,@X86_WIN32_FALSE@,$X86_WIN32_FALSE,;t t
! s,@ALPHA_TRUE@,$ALPHA_TRUE,;t t
! s,@ALPHA_FALSE@,$ALPHA_FALSE,;t t
! s,@IA64_TRUE@,$IA64_TRUE,;t t
! s,@IA64_FALSE@,$IA64_FALSE,;t t
! s,@M32R_TRUE@,$M32R_TRUE,;t t
! s,@M32R_FALSE@,$M32R_FALSE,;t t
! s,@M68K_TRUE@,$M68K_TRUE,;t t
! s,@M68K_FALSE@,$M68K_FALSE,;t t
! s,@POWERPC_TRUE@,$POWERPC_TRUE,;t t
! s,@POWERPC_FALSE@,$POWERPC_FALSE,;t t
! s,@POWERPC_AIX_TRUE@,$POWERPC_AIX_TRUE,;t t
! 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,@ARM_TRUE@,$ARM_TRUE,;t t
! s,@ARM_FALSE@,$ARM_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,@S390_FALSE@,$S390_FALSE,;t t
! s,@X86_64_TRUE@,$X86_64_TRUE,;t t
! s,@X86_64_FALSE@,$X86_64_FALSE,;t t
! s,@SH_TRUE@,$SH_TRUE,;t t
! s,@SH_FALSE@,$SH_FALSE,;t t
! s,@SH64_TRUE@,$SH64_TRUE,;t t
! s,@SH64_FALSE@,$SH64_FALSE,;t t
! s,@PA_TRUE@,$PA_TRUE,;t t
! s,@PA_FALSE@,$PA_FALSE,;t t
! s,@ALLOCA@,$ALLOCA,;t t
! s,@HAVE_LONG_DOUBLE@,$HAVE_LONG_DOUBLE,;t t
! s,@TARGET@,$TARGET,;t t
! 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
! 
! _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
!     default-1 )
! # Only add multilib support code if we just rebuilt the top-level
! # Makefile.
! case " $CONFIG_FILES " in
!  *" Makefile "*)
!    ac_file=Makefile . ${multi_basedir}/config-ml.in
!    ;;
! esac ;;
!     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
!  ;;
!     include ) test -d include || mkdir include ;;
!     src )
! test -d src || mkdir src
! test -d src/$TARGETDIR || mkdir src/$TARGETDIR
!  ;;
!   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-3.4.3/libffi/configure.ac gcc-4.0.0/libffi/configure.ac
*** gcc-3.4.3/libffi/configure.ac	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/configure.ac	Thu Dec  2 11:04:21 2004
***************
*** 0 ****
--- 1,251 ----
+ dnl Process this with autoconf to create configure
+ 
+ AC_PREREQ(2.59)
+ 
+ AC_INIT([libffi], [2.1], [http://gcc.gnu.org/bugs.html])
+ AC_CONFIG_HEADERS([fficonfig.h])
+ 
+ AM_ENABLE_MULTILIB(, ..)
+ 
+ AC_CANONICAL_SYSTEM
+ target_alias=${target_alias-$host_alias}
+ 
+ . ${srcdir}/configure.host
+ 
+ AM_INIT_AUTOMAKE
+ 
+ # The same as in boehm-gc and libstdc++. Have to borrow it from there.
+ # We must force CC to /not/ be precious variables; otherwise
+ # the wrong, non-multilib-adjusted value will be used in multilibs.
+ # As a side effect, we have to subst CFLAGS ourselves.
+ 
+ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
+ m4_define([_AC_ARG_VAR_PRECIOUS],[])
+ AC_PROG_CC
+ m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+ 
+ AC_SUBST(CFLAGS)
+ 
+ AM_PROG_AS
+ AM_PROG_CC_C_O
+ AC_PROG_LIBTOOL
+ 
+ AM_MAINTAINER_MODE
+ 
+ AC_CHECK_HEADERS(sys/mman.h)
+ AC_CHECK_FUNCS(mmap)
+ AC_FUNC_MMAP_BLACKLIST
+ 
+ dnl The -no-testsuite modules omit the test subdir.
+ AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
+ 
+ TARGETDIR="unknown"
+ case "$host" in
+ i*86-*-linux*) TARGET=X86; TARGETDIR=x86;;
+ i*86-*-solaris*) TARGET=X86; TARGETDIR=x86;;
+ 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-*-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;;
+ sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;;
+ sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;;
+ sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) 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;;
+ m32r*-*-linux* ) TARGET=M32R; TARGETDIR=m32r;;
+ m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;;
+ mips64*-*);;
+ mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS_IRIX; TARGETDIR=mips;;
+ mips*-*-linux*) TARGET=MIPS_LINUX; TARGETDIR=mips;;
+ powerpc*-*-linux* | powerpc-*-sysv*) TARGET=POWERPC; TARGETDIR=powerpc;;
+ powerpc-*-beos*) TARGET=POWERPC; TARGETDIR=powerpc;;
+ powerpc-*-darwin*) TARGET=POWERPC_DARWIN; TARGETDIR=powerpc;;
+ powerpc-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
+ rs6000-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
+ arm*-*-linux-*) TARGET=ARM; TARGETDIR=arm;;
+ arm*-*-netbsdelf* | arm*-*-knetbsd*-gnu) TARGET=ARM; TARGETDIR=arm;;
+ 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;;
+ sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
+ hppa-*-linux* | parisc-*-linux*) TARGET=PA; TARGETDIR=pa;;
+ esac
+ 
+ AC_SUBST(AM_RUNTESTFLAGS)
+ 
+ if test $TARGETDIR = unknown; then
+   AC_MSG_ERROR(["libffi has not been ported to $host."])
+ fi
+ 
+ AM_CONDITIONAL(MIPS_IRIX, test x$TARGET = xMIPS_IRIX)
+ AM_CONDITIONAL(MIPS_LINUX, test x$TARGET = xMIPS_LINUX)
+ AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
+ AM_CONDITIONAL(X86, test x$TARGET = xX86)
+ AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32)
+ AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
+ AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
+ AM_CONDITIONAL(M32R, test x$TARGET = xM32R)
+ AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
+ 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(ARM, test x$TARGET = xARM)
+ AM_CONDITIONAL(FRV, test x$TARGET = xFRV)
+ AM_CONDITIONAL(S390, test x$TARGET = xS390)
+ AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64)
+ AM_CONDITIONAL(SH, test x$TARGET = xSH)
+ AM_CONDITIONAL(SH64, test x$TARGET = xSH64)
+ AM_CONDITIONAL(PA, test x$TARGET = xPA)
+ 
+ case x$TARGET in
+   xMIPS*) TARGET=MIPS ;;
+   *) ;;
+ esac
+ 
+ AC_HEADER_STDC
+ 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
+ if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
+   if test $ac_cv_sizeof_long_double != 0; then
+     HAVE_LONG_DOUBLE=1
+     AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
+   fi
+ 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],
+ 	libffi_cv_as_sparc_ua_pcrel, [
+ 	save_CFLAGS="$CFLAGS"
+ 	save_LDFLAGS="$LDFLAGS"
+ 	CFLAGS="$CFLAGS -fpic"
+ 	LDFLAGS="$LDFLAGS -shared"
+ 	AC_TRY_LINK([asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");],,
+ 		    [libffi_cv_as_sparc_ua_pcrel=yes],
+ 		    [libffi_cv_as_sparc_ua_pcrel=no])
+ 	CFLAGS="$save_CFLAGS"
+ 	LDFLAGS="$save_LDFLAGS"])
+     if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then
+ 	AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
+ 		  [Define if your assembler and linker support unaligned PC relative relocs.])
+     fi
+ 
+     AC_CACHE_CHECK([assembler .register pseudo-op support],
+        libffi_cv_as_register_pseudo_op, [
+        libffi_cv_as_register_pseudo_op=unknown
+        # Check if we have .register
+        AC_TRY_COMPILE([asm (".register %g2, #scratch");],,
+ 		       [libffi_cv_as_register_pseudo_op=yes],
+ 		       [libffi_cv_as_register_pseudo_op=no])
+     ])
+     if test "x$libffi_cv_as_register_pseudo_op" = xyes; then
+        AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1,
+ 	       [Define if your assembler supports .register.])
+     fi
+ fi
+ 
+ AC_CACHE_CHECK([whether .eh_frame section should be read-only],
+     libffi_cv_ro_eh_frame, [
+ 	libffi_cv_ro_eh_frame=no
+ 	echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
+ 	if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
+ 	    if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
+ 		libffi_cv_ro_eh_frame=yes
+ 	    elif grep '.section.*eh_frame.*#alloc' conftest.c \
+ 		 | grep -v '#write' > /dev/null; then
+ 		libffi_cv_ro_eh_frame=yes
+ 	    fi
+ 	fi
+ 	rm -f conftest.*
+     ])
+ if test "x$libffi_cv_ro_eh_frame" = xyes; then
+     AC_DEFINE(HAVE_RO_EH_FRAME, 1,
+ 	      [Define if .eh_frame sections should be read-only.])
+     AC_DEFINE(EH_FRAME_FLAGS, "a",
+ 	      [Define to the flags needed for the .section .eh_frame directive.])
+ else
+     AC_DEFINE(EH_FRAME_FLAGS, "aw",
+ 	      [Define to the flags needed for the .section .eh_frame directive.])
+ fi
+ 
+ AC_SUBST(TARGET)
+ AC_SUBST(TARGETDIR)
+ 
+ AC_SUBST(SHELL)
+ 
+ AC_ARG_ENABLE(debug,
+ [  --enable-debug          debugging mode],
+   if test "$enable_debug" = "yes"; then
+     AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.])
+   fi)
+ 
+ AC_ARG_ENABLE(structs,
+ [  --disable-structs       omit code for struct support],
+   if test "$enable_structs" = "no"; then
+     AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this is you do not want support for aggregate types.])
+   fi)
+ 
+ AC_ARG_ENABLE(raw-api,
+ [  --disable-raw-api       make the raw api unavailable],
+   if test "$enable_raw_api" = "no"; then
+     AC_DEFINE(FFI_NO_RAW_API, 1, [Define this is you do not want support for the raw API.])
+   fi)
+ 
+ AC_ARG_ENABLE(purify-safety,
+ [  --enable-purify-safety  purify-safe mode],
+   if test "$enable_purify_safety" = "yes"; then
+     AC_DEFINE(USING_PURIFY, 1, [Define this if you are using Purify and want to suppress spurious messages.])
+   fi)
+ 
+ if test -n "$with_cross_host" &&
+    test x"$with_cross_host" != x"no"; then
+   toolexecdir='$(exec_prefix)/$(target_alias)'
+   toolexeclibdir='$(toolexecdir)/lib'
+ else
+   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
+   toolexeclibdir='$(libdir)'
+ fi
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+   .) ;; # Avoid trailing /.
+   *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
+ esac
+ 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
+   multilib_arg=
+ fi
+ 
+ AC_CONFIG_COMMANDS(include, [test -d include || mkdir include])
+ AC_CONFIG_COMMANDS(src, [
+ test -d src || mkdir src
+ test -d src/$TARGETDIR || mkdir src/$TARGETDIR
+ ], [TARGETDIR="$TARGETDIR"])
+ 
+ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h)
+ 
+ AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile)
+ 
+ AC_OUTPUT
diff -Nrcpad gcc-3.4.3/libffi/configure.host gcc-4.0.0/libffi/configure.host
*** gcc-3.4.3/libffi/configure.host	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/configure.host	Mon Aug 30 15:43:00 2004
***************
*** 0 ****
--- 1,11 ----
+ # configure.host
+ #
+ # This shell script handles all host based configuration for libffi.
+ # 
+ 
+ # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+ case "${host}" in
+   frv*-elf)
+     LDFLAGS=`echo $LDFLAGS | sed "s/\-B[^ ]*libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/
+     ;;
+ esac
diff -Nrcpad gcc-3.4.3/libffi/configure.in gcc-4.0.0/libffi/configure.in
*** gcc-3.4.3/libffi/configure.in	Tue Apr 27 05:10:19 2004
--- gcc-4.0.0/libffi/configure.in	Thu Jan  1 00:00:00 1970
***************
*** 1,280 ****
- dnl Process this with autoconf to create configure
- AC_PREREQ(2.13)
- AC_INIT(fficonfig.h.in)
- AM_CONFIG_HEADER(fficonfig.h)
- 
- # This works around the fact that libtool configuration may change LD
- # for this particular configuration, but some shells, instead of
- # keeping the changes in LD private, export them just because LD is
- # exported.
- ORIGINAL_LD_FOR_MULTILIBS=$LD
- 
- dnl Default to --enable-multilib
- AC_ARG_ENABLE(multilib,
- [  --enable-multilib       build many library versions (default)],
- [case "${enableval}" in
-   yes) multilib=yes ;;
-   no)  multilib=no ;;
-   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
-  esac], [multilib=yes])dnl
- 
- dnl We may get other options which we don't document:
- dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
- 
- if test "${srcdir}" = "."; then
-   if test "${with_target_subdir}" != "."; then
-     libffi_basedir="${with_multisrctop}../"
-   else
-     libffi_basedir="${with_multisrctop}"
-   fi
- else
-   libffi_basedir=
- fi
- AC_SUBST(libffi_basedir)
- AC_CONFIG_AUX_DIR(${libffi_basedir}..)
- 
- AC_CANONICAL_SYSTEM
- target_alias=${target_alias-$host_alias}
- 
- AM_PROG_LIBTOOL
- 
- AM_INIT_AUTOMAKE(libffi,2.00-beta,no-define)
- 
- AC_EXEEXT
- AM_MAINTAINER_MODE
- 
- AC_PROG_CC
- 
- AC_PROG_LIBTOOL
- 
- AC_CHECK_HEADERS(sys/mman.h)
- AC_CHECK_FUNCS(mmap)
- AC_FUNC_MMAP_BLACKLIST
- 
- dnl The -no-testsuite modules omit the test subdir.
- AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
- 
- 
- TARGETDIR="unknown"
- case "$host" in
- i*86-*-linux*) TARGET=X86; TARGETDIR=x86;;
- i*86-*-solaris*) TARGET=X86; TARGETDIR=x86;;
- i*86-*-beos*) TARGET=X86; TARGETDIR=x86;;
- i*86-*-freebsd*) TARGET=X86; TARGETDIR=x86;;
- i*86-*-netbsdelf*) 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;;
- sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;;
- sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;;
- sparc-*-linux* | sparc-*-netbsdelf*) TARGET=SPARC; TARGETDIR=sparc;;
- sparc64-*-linux* | sparc64-*-netbsd*) TARGET=SPARC; TARGETDIR=sparc;;
- alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-netbsd*) TARGET=ALPHA; TARGETDIR=alpha;;
- ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;;
- m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;;
- mips64*-*);;
- mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS_IRIX; TARGETDIR=mips;;
- mips*-*-linux*) TARGET=MIPS_LINUX; TARGETDIR=mips;;
- powerpc*-*-linux* | powerpc-*-sysv*) TARGET=POWERPC; TARGETDIR=powerpc;;
- powerpc-*-beos*) TARGET=POWERPC; TARGETDIR=powerpc;;
- powerpc-*-darwin*) TARGET=POWERPC_DARWIN; TARGETDIR=powerpc;;
- powerpc-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
- rs6000-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;;
- arm*-*-linux-*) TARGET=ARM; TARGETDIR=arm;;
- arm*-*-netbsdelf*) TARGET=ARM; TARGETDIR=arm;;
- s390-*-linux-*) TARGET=S390; TARGETDIR=s390;;
- s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;;
- x86_64-*-linux*) TARGET=X86_64; TARGETDIR=x86;;
- sh-*-linux* | sh[[34]]*-*-linux*) TARGET=SH; TARGETDIR=sh;;
- sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
- esac
- 
- AC_SUBST(AM_RUNTESTFLAGS)
- 
- if test $TARGETDIR = unknown; then
-   AC_ERROR("libffi has not been ported to $host.")
- fi
- 
- AM_CONDITIONAL(MIPS_IRIX, test x$TARGET = xMIPS_IRIX)
- AM_CONDITIONAL(MIPS_LINUX, test x$TARGET = xMIPS_LINUX)
- AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
- AM_CONDITIONAL(X86, test x$TARGET = xX86)
- AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32)
- AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
- AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
- AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
- 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(ARM, test x$TARGET = xARM)
- AM_CONDITIONAL(S390, test x$TARGET = xS390)
- AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64)
- AM_CONDITIONAL(SH, test x$TARGET = xSH)
- AM_CONDITIONAL(SH64, test x$TARGET = xSH64)
- 
- case x$TARGET in
-   xMIPS*) TARGET=MIPS ;;
-   *) ;;
- esac
- 
- AC_HEADER_STDC
- 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
- if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
-   if test $ac_cv_sizeof_long_double != 0; then
-     HAVE_LONG_DOUBLE=1
-     AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
-   fi
- 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],
- 	libffi_cv_as_sparc_ua_pcrel, [
- 	save_CFLAGS="$CFLAGS"
- 	save_LDFLAGS="$LDFLAGS"
- 	CFLAGS="$CFLAGS -fpic"
- 	LDFLAGS="$LDFLAGS -shared"
- 	AC_TRY_LINK([asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");],,
- 		    [libffi_cv_as_sparc_ua_pcrel=yes],
- 		    [libffi_cv_as_sparc_ua_pcrel=no])
- 	CFLAGS="$save_CFLAGS"
- 	LDFLAGS="$save_LDFLAGS"])
-     if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then
- 	AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
- 		  [Define if your assembler and linker support unaligned PC relative relocs.])
-     fi
- 
-     AC_CACHE_CHECK([assembler .register pseudo-op support],
-        libffi_cv_as_register_pseudo_op, [
-        libffi_cv_as_register_pseudo_op=unknown
-        # Check if we have .register
-        AC_TRY_COMPILE([asm (".register %g2, #scratch");],,
-                        [libffi_cv_as_register_pseudo_op=yes],
-                        [libffi_cv_as_register_pseudo_op=no])
-     ])
-     if test "x$libffi_cv_as_register_pseudo_op" = xyes; then
-        AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1,
-                [Define if your assembler supports .register.])
-     fi
- fi
- 
- AC_CACHE_CHECK([whether .eh_frame section should be read-only],
-     libffi_cv_ro_eh_frame, [
- 	libffi_cv_ro_eh_frame=no
- 	echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
- 	if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
- 	    if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
- 		libffi_cv_ro_eh_frame=yes
- 	    elif grep '.section.*eh_frame.*#alloc' conftest.c \
- 		 | grep -v '#write' > /dev/null; then
- 		libffi_cv_ro_eh_frame=yes
- 	    fi
- 	fi
- 	rm -f conftest.*
-     ])
- if test "x$libffi_cv_ro_eh_frame" = xyes; then
-     AC_DEFINE(HAVE_RO_EH_FRAME, 1,
- 	      [Define if .eh_frame sections should be read-only.])
-     AC_DEFINE(EH_FRAME_FLAGS, "a",
- 	      [Define to the flags needed for the .section .eh_frame directive.])
- else
-     AC_DEFINE(EH_FRAME_FLAGS, "aw",
- 	      [Define to the flags needed for the .section .eh_frame directive.])
- fi
- 
- AC_SUBST(TARGET)
- AC_SUBST(TARGETDIR)
- 
- AC_SUBST(SHELL)
- 
- AC_ARG_ENABLE(debug,
- [  --enable-debug          debugging mode],
-   if test "$enable_debug" = "yes"; then
-     AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.])
-   fi)
- 
- AC_ARG_ENABLE(structs,
- [  --disable-structs       omit code for struct support],
-   if test "$enable_structs" = "no"; then
-     AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this is you do not want support for aggregate types.])
-   fi)
- 
- AC_ARG_ENABLE(raw-api,
- [  --disable-raw-api       make the raw api unavailable],
-   if test "$enable_raw_api" = "no"; then
-     AC_DEFINE(FFI_NO_RAW_API, 1, [Define this is you do not want support for the raw API.])
-   fi)
- 
- AC_ARG_ENABLE(purify-safety,
- [  --enable-purify-safety  purify-safe mode],
-   if test "$enable_purify_safety" = "yes"; then
-     AC_DEFINE(USING_PURIFY, 1, [Define this if you are using Purify and want to suppress spurious messages.])
-   fi)
- 
- if test -n "$with_cross_host" &&
-    test x"$with_cross_host" != x"no"; then
-   toolexecdir='$(exec_prefix)/$(target_alias)'
-   toolexeclibdir='$(toolexecdir)/lib'
- else
-   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
-   toolexeclibdir='$(libdir)'
- fi
- multi_os_directory=`$CC -print-multi-os-directory`
- case $multi_os_directory in
-   .) ;; # Avoid trailing /.
-   *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
- esac
- AC_SUBST(toolexecdir)
- AC_SUBST(toolexeclibdir)
- 
- #Figure out where generated headers like ffitarget.h get installed.
- changequote(,)dnl
- gcc_version_trigger=${srcdir}/../gcc/version.c
- gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
- gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
- tool_include_dir='$(libdir)/gcc/$(target_alias)/'${gcc_version}/include
- changequote([,])dnl
- AC_SUBST(tool_include_dir)
- AC_SUBST(gcc_version)
- 
- 
- if test "${multilib}" = "yes"; then
-   multilib_arg="--enable-multilib"
- else
-   multilib_arg=
- fi
- 
- AC_OUTPUT(include/Makefile testsuite/Makefile include/ffi.h Makefile,
- [
- if test -n "$CONFIG_FILES"; then
-    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
-    ac_file=Makefile . ${srcdir}/${libffi_basedir}../config-ml.in
- fi
- ],
- srcdir=${srcdir}
- host=${host}
- target=${target}
- with_multisubdir=${with_multisubdir}
- ac_configure_args="${multilib_arg} ${ac_configure_args}"
- CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- libffi_basedir=${libffi_basedir}
- CC="${CC}"
- DEFS="$DEFS"
- ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
- 
- # Make target subdirectories if required.
- test -d src || mkdir src
- test -d src/${TARGETDIR} || mkdir src/${TARGETDIR}
- test -d include || mkdir include
- 
- AC_LINK_FILES(src/$TARGETDIR/ffitarget.h, include/ffitarget.h)
- )
--- 0 ----
diff -Nrcpad gcc-3.4.3/libffi/fficonfig.h.in gcc-4.0.0/libffi/fficonfig.h.in
*** gcc-3.4.3/libffi/fficonfig.h.in	Fri Nov 21 11:24:08 2003
--- gcc-4.0.0/libffi/fficonfig.h.in	Thu Apr 21 07:04:10 2005
***************
*** 1,85 ****
! /* fficonfig.h.in.  Generated automatically from configure.in by autoheader.  */
  
! /* Define if using alloca.c.  */
! #undef C_ALLOCA
  
! /* 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.  */
  #undef CRAY_STACKSEG_END
  
! /* Define if you have alloca, as a function or macro.  */
  #undef HAVE_ALLOCA
  
! /* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
  #undef HAVE_ALLOCA_H
  
! /* If using the C implementation of alloca, define if you know the
!    direction of stack growth for your system; otherwise it will be
!    automatically deduced at run-time.
!  STACK_DIRECTION > 0 => grows toward higher addresses
!  STACK_DIRECTION < 0 => grows toward lower addresses
!  STACK_DIRECTION = 0 => direction of growth unknown
!  */
! #undef STACK_DIRECTION
  
! /* Define if you have the ANSI C header files.  */
! #undef STDC_HEADERS
  
! /* Define if you have the memcpy function.  */
  #undef HAVE_MEMCPY
  
! /* Define if read-only mmap of a plain file works. */
! #undef HAVE_MMAP_FILE
  
! /* Define if mmap of /dev/zero works. */
! #undef HAVE_MMAP_DEV_ZERO
  
  /* Define if mmap with MAP_ANON(YMOUS) works. */
  #undef HAVE_MMAP_ANON
  
! /* The number of bytes in type double */
! #undef SIZEOF_DOUBLE
  
! /* The number of bytes in type long double */
! #undef SIZEOF_LONG_DOUBLE
  
! /* Define if you have the long double type and it is bigger than a double */
! #undef HAVE_LONG_DOUBLE
  
! /* whether byteorder is bigendian */
! #undef WORDS_BIGENDIAN
  
  /* Define if the host machine stores words of multi-word integers in
     big-endian order. */
  #undef HOST_WORDS_BIG_ENDIAN
  
! /* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
! #undef BYTEORDER
  
! /* Define if your assembler and linker support unaligned PC relative relocs. */
! #undef HAVE_AS_SPARC_UA_PCREL
  
! /* Define if your assembler supports .register. */
! #undef HAVE_AS_REGISTER_PSEUDO_OP
  
! /* Define if .eh_frame sections should be read-only. */
! #undef HAVE_RO_EH_FRAME
  
! /* Define to the flags needed for the .section .eh_frame directive. */
! #undef EH_FRAME_FLAGS
  
! /* Define to the flags needed for the .section .eh_frame directive. */
! #undef EH_FRAME_FLAGS
  
! /* Define this if you want extra debugging. */
! #undef FFI_DEBUG
  
! /* Define this is you do not want support for aggregate types. */
! #undef FFI_NO_STRUCTS
  
! /* Define this is you do not want support for the raw API. */
! #undef FFI_NO_RAW_API
  
! /* Define this if you are using Purify and want to suppress spurious messages. */
  #undef USING_PURIFY
  
--- 1,141 ----
! /* 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.
!    */
  #undef CRAY_STACKSEG_END
  
! /* Define to 1 if using `alloca.c'. */
! #undef C_ALLOCA
! 
! /* Define to the flags needed for the .section .eh_frame directive. */
! #undef EH_FRAME_FLAGS
! 
! /* Define this if you want extra debugging. */
! #undef FFI_DEBUG
! 
! /* Define this is you do not want support for the raw API. */
! #undef FFI_NO_RAW_API
! 
! /* Define this is you do not want support for aggregate types. */
! #undef FFI_NO_STRUCTS
! 
! /* Define to 1 if you have `alloca', as a function or macro. */
  #undef HAVE_ALLOCA
  
! /* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
!    */
  #undef HAVE_ALLOCA_H
  
! /* Define if your assembler supports .register. */
! #undef HAVE_AS_REGISTER_PSEUDO_OP
  
! /* Define if your assembler and linker support unaligned PC relative relocs.
!    */
! #undef HAVE_AS_SPARC_UA_PCREL
  
! /* Define to 1 if you have the <inttypes.h> header file. */
! #undef HAVE_INTTYPES_H
! 
! /* Define if you have the long double type and it is bigger than a double */
! #undef HAVE_LONG_DOUBLE
! 
! /* Define to 1 if you have the `memcpy' function. */
  #undef HAVE_MEMCPY
  
! /* Define to 1 if you have the <memory.h> header file. */
! #undef HAVE_MEMORY_H
  
! /* Define to 1 if you have the `mmap' function. */
! #undef HAVE_MMAP
  
  /* Define if mmap with MAP_ANON(YMOUS) works. */
  #undef HAVE_MMAP_ANON
  
! /* Define if mmap of /dev/zero works. */
! #undef HAVE_MMAP_DEV_ZERO
  
! /* Define if read-only mmap of a plain file works. */
! #undef HAVE_MMAP_FILE
  
! /* Define if .eh_frame sections should be read-only. */
! #undef HAVE_RO_EH_FRAME
  
! /* 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 <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 you have the <sys/mman.h> header file. */
! #undef HAVE_SYS_MMAN_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/types.h> header file. */
! #undef HAVE_SYS_TYPES_H
! 
! /* 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
  
! /* 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
  
! /* 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
!    direction of stack growth for your system; otherwise it will be
!    automatically deduced at run-time.
! 	STACK_DIRECTION > 0 => grows toward higher addresses
! 	STACK_DIRECTION < 0 => grows toward lower addresses
! 	STACK_DIRECTION = 0 => direction of growth unknown */
! #undef STACK_DIRECTION
! 
! /* Define to 1 if you have the ANSI C header files. */
! #undef STDC_HEADERS
! 
! /* Define this if you are using Purify and want to suppress spurious messages.
!    */
  #undef USING_PURIFY
  
+ /* Version number of package */
+ #undef VERSION
+ 
+ /* whether byteorder is bigendian */
+ #undef WORDS_BIGENDIAN
diff -Nrcpad gcc-3.4.3/libffi/include/Makefile.in gcc-4.0.0/libffi/include/Makefile.in
*** gcc-3.4.3/libffi/include/Makefile.in	Wed Nov 12 18:18:30 2003
--- gcc-4.0.0/libffi/include/Makefile.in	Thu Dec  2 11:05:08 2004
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999 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.
--- 1,8 ----
! # 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.
***************
*** 10,283 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
  
- SHELL = @SHELL@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = ..
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
! AS = @AS@
  CC = @CC@
! CXX = @CXX@
! CXXCPP = @CXXCPP@
! DLLTOOL = @DLLTOOL@
  EXEEXT = @EXEEXT@
! GCJ = @GCJ@
! GCJFLAGS = @GCJFLAGS@
  HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
! OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  RANLIB = @RANLIB@
  SHELL = @SHELL@
  STRIP = @STRIP@
  TARGET = @TARGET@
  TARGETDIR = @TARGETDIR@
  VERSION = @VERSION@
  gcc_version = @gcc_version@
! libffi_basedir = @libffi_basedir@
  tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
- 
  AUTOMAKE_OPTIONS = foreign
- 
  DISTCLEANFILES = ffitarget.h
  EXTRA_DIST = ffi.h.in ffi_common.h
- 
  hackdir = $(includedir)
- 
  hack_DATA = ffi.h
- 
  toollibffidir = @tool_include_dir@/libffi
  toollibffi_HEADERS = ffitarget.h
! mkinstalldirs = $(SHELL) $(top_srcdir)/${libffi_basedir}../mkinstalldirs
! CONFIG_HEADER = ../fficonfig.h
! CONFIG_CLEAN_FILES =  ffi.h
! DATA =  $(hack_DATA)
! 
! HEADERS =  $(toollibffi_HEADERS)
! 
! DIST_COMMON =  Makefile.am Makefile.in ffi.h.in
  
  
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
  
! TAR = gnutar
! GZIP_ENV = --best
! all: all-redirect
! .SUFFIXES:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile
  
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
  
! ffi.h: $(top_builddir)/config.status ffi.h.in
! 	cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
  
  install-hackDATA: $(hack_DATA)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(hackdir)
  	@list='$(hack_DATA)'; for p in $$list; do \
! 	  if test -f $(srcdir)/$$p; then \
! 	    echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(hackdir)/$$p"; \
! 	    $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(hackdir)/$$p; \
! 	  else if test -f $$p; then \
! 	    echo " $(INSTALL_DATA) $$p $(DESTDIR)$(hackdir)/$$p"; \
! 	    $(INSTALL_DATA) $$p $(DESTDIR)$(hackdir)/$$p; \
! 	  fi; fi; \
  	done
  
  uninstall-hackDATA:
  	@$(NORMAL_UNINSTALL)
! 	list='$(hack_DATA)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(hackdir)/$$p; \
  	done
- 
  install-toollibffiHEADERS: $(toollibffi_HEADERS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(toollibffidir)
  	@list='$(toollibffi_HEADERS)'; for p in $$list; do \
! 	  if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
! 	  echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(toollibffidir)/$$p"; \
! 	  $(INSTALL_DATA) $$d$$p $(DESTDIR)$(toollibffidir)/$$p; \
  	done
  
  uninstall-toollibffiHEADERS:
  	@$(NORMAL_UNINSTALL)
! 	list='$(toollibffi_HEADERS)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(toollibffidir)/$$p; \
  	done
  
  tags: TAGS
  
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
! 
! TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
! 
! subdir = include
  
  distdir: $(DISTFILES)
! 	here=`cd $(top_builddir) && pwd`; \
! 	top_distdir=`cd $(top_distdir) && pwd`; \
! 	distdir=`cd $(distdir) && pwd`; \
! 	cd $(top_srcdir) \
! 	  && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign include/Makefile
! 	@for file in $(DISTFILES); do \
! 	  d=$(srcdir); \
  	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
  	  else \
  	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
  	  fi; \
  	done
- info-am:
- info: info-am
- dvi-am:
- dvi: dvi-am
  check-am: all-am
  check: check-am
! installcheck-am:
! installcheck: installcheck-am
! install-exec-am:
  install-exec: install-exec-am
- 
- install-data-am: install-hackDATA install-toollibffiHEADERS
  install-data: install-data-am
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-am
- uninstall-am: uninstall-hackDATA uninstall-toollibffiHEADERS
- uninstall: uninstall-am
- all-am: Makefile $(DATA) $(HEADERS)
- all-redirect: all-am
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs:
- 	$(mkinstalldirs)  $(DESTDIR)$(hackdir) $(DESTDIR)$(toollibffidir)
- 
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-tags mostlyclean-generic
  
! mostlyclean: mostlyclean-am
  
! clean-am:  clean-tags clean-generic mostlyclean-am
  
! clean: clean-am
  
! distclean-am:  distclean-tags distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-am
  
! maintainer-clean-am:  maintainer-clean-tags maintainer-clean-generic \
! 		distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
  maintainer-clean: maintainer-clean-am
  
! .PHONY: uninstall-hackDATA install-hackDATA uninstall-toollibffiHEADERS \
! install-toollibffiHEADERS tags mostlyclean-tags distclean-tags \
! clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
! check-am installcheck-am installcheck install-exec-am install-exec \
! install-data-am install-data install-am install uninstall-am uninstall \
! all-redirect all-am all installdirs mostlyclean-generic \
! distclean-generic clean-generic maintainer-clean-generic clean \
! mostlyclean distclean maintainer-clean
  
  
  # 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.
--- 12,467 ----
  # 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)/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
+ CONFIG_HEADER = $(top_builddir)/fficonfig.h
+ CONFIG_CLEAN_FILES = ffi.h ffitarget.h
+ 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)$(hackdir)" "$(DESTDIR)$(toollibffidir)"
+ hackDATA_INSTALL = $(INSTALL_DATA)
+ DATA = $(hack_DATA)
+ toollibffiHEADERS_INSTALL = $(INSTALL_HEADER)
+ HEADERS = $(toollibffi_HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ ALPHA_FALSE = @ALPHA_FALSE@
+ ALPHA_TRUE = @ALPHA_TRUE@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
  AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
! ARM_FALSE = @ARM_FALSE@
! ARM_TRUE = @ARM_TRUE@
! AUTOCONF = @AUTOCONF@
! AUTOHEADER = @AUTOHEADER@
! AUTOMAKE = @AUTOMAKE@
! AWK = @AWK@
  CC = @CC@
! CCAS = @CCAS@
! CCASFLAGS = @CCASFLAGS@
! CCDEPMODE = @CCDEPMODE@
! CFLAGS = @CFLAGS@
! CPP = @CPP@
! CPPFLAGS = @CPPFLAGS@
! CYGPATH_W = @CYGPATH_W@
! DEFS = @DEFS@
! DEPDIR = @DEPDIR@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXEEXT = @EXEEXT@
! FRV_FALSE = @FRV_FALSE@
! FRV_TRUE = @FRV_TRUE@
  HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
+ IA64_FALSE = @IA64_FALSE@
+ IA64_TRUE = @IA64_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ M32R_FALSE = @M32R_FALSE@
+ M32R_TRUE = @M32R_TRUE@
+ M68K_FALSE = @M68K_FALSE@
+ M68K_TRUE = @M68K_TRUE@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
! MIPS_IRIX_FALSE = @MIPS_IRIX_FALSE@
! MIPS_IRIX_TRUE = @MIPS_IRIX_TRUE@
! MIPS_LINUX_FALSE = @MIPS_LINUX_FALSE@
! MIPS_LINUX_TRUE = @MIPS_LINUX_TRUE@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PA_FALSE = @PA_FALSE@
+ PA_TRUE = @PA_TRUE@
+ POWERPC_AIX_FALSE = @POWERPC_AIX_FALSE@
+ POWERPC_AIX_TRUE = @POWERPC_AIX_TRUE@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+ POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
+ POWERPC_FALSE = @POWERPC_FALSE@
+ POWERPC_TRUE = @POWERPC_TRUE@
  RANLIB = @RANLIB@
+ S390_FALSE = @S390_FALSE@
+ S390_TRUE = @S390_TRUE@
+ SET_MAKE = @SET_MAKE@
+ SH64_FALSE = @SH64_FALSE@
+ SH64_TRUE = @SH64_TRUE@
  SHELL = @SHELL@
+ SH_FALSE = @SH_FALSE@
+ SH_TRUE = @SH_TRUE@
+ SPARC_FALSE = @SPARC_FALSE@
+ SPARC_TRUE = @SPARC_TRUE@
  STRIP = @STRIP@
  TARGET = @TARGET@
  TARGETDIR = @TARGETDIR@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
  VERSION = @VERSION@
+ X86_64_FALSE = @X86_64_FALSE@
+ X86_64_TRUE = @X86_64_TRUE@
+ X86_FALSE = @X86_FALSE@
+ X86_TRUE = @X86_TRUE@
+ X86_WIN32_FALSE = @X86_WIN32_FALSE@
+ X86_WIN32_TRUE = @X86_WIN32_TRUE@
+ ac_ct_CC = @ac_ct_CC@
+ 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__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@
+ 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@
! 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@
! multi_basedir = @multi_basedir@
! 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@
  tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  AUTOMAKE_OPTIONS = foreign
  DISTCLEANFILES = ffitarget.h
  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
  
+ .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) --foreign  include/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --foreign  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
! ffi.h: $(top_builddir)/config.status $(srcdir)/ffi.h.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-hackDATA: $(hack_DATA)
  	@$(NORMAL_INSTALL)
! 	test -z "$(hackdir)" || $(mkdir_p) "$(DESTDIR)$(hackdir)"
  	@list='$(hack_DATA)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(hackDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(hackdir)/$$f'"; \
! 	  $(hackDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(hackdir)/$$f"; \
  	done
  
  uninstall-hackDATA:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(hack_DATA)'; for p in $$list; do \
! 	  f=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(hackdir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(hackdir)/$$f"; \
  	done
  install-toollibffiHEADERS: $(toollibffi_HEADERS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(toollibffidir)" || $(mkdir_p) "$(DESTDIR)$(toollibffidir)"
  	@list='$(toollibffi_HEADERS)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(toollibffiHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(toollibffidir)/$$f'"; \
! 	  $(toollibffiHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(toollibffidir)/$$f"; \
  	done
  
  uninstall-toollibffiHEADERS:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(toollibffi_HEADERS)'; for p in $$list; do \
! 	  f=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(toollibffidir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(toollibffidir)/$$f"; \
  	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:  $(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; }'`; \
! 	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:  $(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
  check-am: all-am
  check: check-am
! all-am: Makefile $(DATA) $(HEADERS)
! installdirs:
! 	for dir in "$(DESTDIR)$(hackdir)" "$(DESTDIR)$(toollibffidir)"; do \
! 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
! 	done
! 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-libtool \
! 	distclean-tags
  
! dvi: dvi-am
  
! dvi-am:
  
! html: html-am
  
! info: info-am
! 
! info-am:
! 
! install-data-am: install-hackDATA install-toollibffiHEADERS
! 
! 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-hackDATA uninstall-info-am \
+ 	uninstall-toollibffiHEADERS
+ 
+ .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ 	clean-libtool ctags distclean distclean-generic \
+ 	distclean-libtool 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-hackDATA \
+ 	install-info install-info-am install-man install-strip \
+ 	install-toollibffiHEADERS installcheck installcheck-am \
+ 	installdirs maintainer-clean maintainer-clean-generic \
+ 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ 	ps ps-am tags uninstall uninstall-am uninstall-hackDATA \
+ 	uninstall-info-am uninstall-toollibffiHEADERS
  
  # 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.
diff -Nrcpad gcc-3.4.3/libffi/include/ffi.h.in gcc-4.0.0/libffi/include/ffi.h.in
*** gcc-3.4.3/libffi/include/ffi.h.in	Tue Oct 21 19:01:53 2003
--- gcc-4.0.0/libffi/include/ffi.h.in	Mon Aug 30 15:43:02 2004
*************** typedef struct {
*** 218,224 ****
    ffi_cif   *cif;
    void     (*fun)(ffi_cif*,void*,void**,void*);
    void      *user_data;
! } ffi_closure;
  
  ffi_status
  ffi_prep_closure (ffi_closure*,
--- 218,224 ----
    ffi_cif   *cif;
    void     (*fun)(ffi_cif*,void*,void**,void*);
    void      *user_data;
! } ffi_closure __attribute__((aligned (8)));
  
  ffi_status
  ffi_prep_closure (ffi_closure*,
diff -Nrcpad gcc-3.4.3/libffi/include/ffi_common.h gcc-4.0.0/libffi/include/ffi_common.h
*** gcc-3.4.3/libffi/include/ffi_common.h	Tue Oct 21 19:01:53 2003
--- gcc-4.0.0/libffi/include/ffi_common.h	Mon Aug 30 15:43:02 2004
*************** void ffi_type_test(/*@temp@*/ /*@out@*/ 
*** 60,65 ****
--- 60,66 ----
  #endif
  
  #define ALIGN(v, a)  (((((size_t) (v))-1) | ((a)-1))+1)
+ #define ALIGN_DOWN(v, a) (((size_t) (v)) & -a)
  
  /* Perform machine dependent cif processing */
  ffi_status ffi_prep_cif_machdep(ffi_cif *cif);
diff -Nrcpad gcc-3.4.3/libffi/libtool-version gcc-4.0.0/libffi/libtool-version
*** gcc-3.4.3/libffi/libtool-version	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/libtool-version	Sat Jun 26 20:37:03 2004
***************
*** 0 ****
--- 1,6 ----
+ # This file is used to maintain libtool version info for libffi.  See
+ # the libtool manual to understand the meaning of the fields.  This is
+ # a separate file so that version updates don't involve re-running
+ # automake.
+ # CURRENT:REVISION:AGE
+ 4:1:0
diff -Nrcpad gcc-3.4.3/libffi/src/arm/ffi.c gcc-4.0.0/libffi/src/arm/ffi.c
*** gcc-3.4.3/libffi/src/arm/ffi.c	Tue Oct 21 19:01:55 2003
--- gcc-4.0.0/libffi/src/arm/ffi.c	Wed Oct 27 15:10:21 2004
*************** void ffi_prep_args(char *stack, extended
*** 108,113 ****
--- 108,118 ----
  /* Perform machine dependent cif processing */
  ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
  {
+   /* Round the stack up to a multiple of 8 bytes.  This isn't needed 
+      everywhere, but it is on some platforms, and it doesn't harm anything
+      when it isn't needed.  */
+   cif->bytes = (cif->bytes + 7) & ~7;
+ 
    /* Set the return type flag */
    switch (cif->rtype->type)
      {
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 118,123 ****
--- 123,133 ----
        cif->flags = (unsigned) cif->rtype->type;
        break;
  
+     case FFI_TYPE_SINT64:
+     case FFI_TYPE_UINT64:
+       cif->flags = (unsigned) FFI_TYPE_SINT64;
+       break;
+ 
      default:
        cif->flags = FFI_TYPE_INT;
        break;
diff -Nrcpad gcc-3.4.3/libffi/src/arm/sysv.S gcc-4.0.0/libffi/src/arm/sysv.S
*** gcc-3.4.3/libffi/src/arm/sysv.S	Tue Oct 21 19:01:55 2003
--- gcc-4.0.0/libffi/src/arm/sysv.S	Wed Oct 27 15:10:22 2004
***************
*** 40,126 ****
  #endif
  #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
  #endif
- 	
- .text
  
! 	# a1:   ffi_prep_args
! 	# a2:   &ecif
! 	# a3:   cif->bytes
! 	# a4:   fig->flags
! 	# sp+0: ecif.rvalue
! 	# sp+4: fn
  
! 	# This assumes we are using gas.
! ENTRY(ffi_call_SYSV)
! 	# Save registers
!         stmfd sp!, {a1-a4, fp, lr}
! 	mov   fp, sp
  
! 	# Make room for all of the new args.
! 	sub   sp, fp, a3
  
! 	# Place all of the ffi_prep_args in position
! 	mov   ip, a1
! 	mov   a1, sp
! 	#     a2 already set
  
! 	# And call
! 	mov   lr, pc
! 	mov   pc, ip
  
! 	# move first 4 parameters in registers
! 	ldr   a1, [sp, #0]
! 	ldr   a2, [sp, #4]
! 	ldr   a3, [sp, #8]
!         ldr   a4, [sp, #12]
  
! 	# and adjust stack
! 	ldr   ip, [fp, #8]
!         cmp   ip, #16
! 	movge ip, #16
!         add   sp, sp, ip
  
- 	# call function
- 	mov   lr, pc
- 	ldr   pc, [fp, #28]
  
! 	# Remove the space we pushed for the args
! 	mov   sp, fp
  
! 	# Load a3 with the pointer to storage for the return value
! 	ldr   a3, [sp, #24]
  
! 	# Load a4 with the return type code 
! 	ldr   a4, [sp, #12]
  
! 	# If the return value pointer is NULL, assume no return value.
! 	cmp   a3, #0
! 	beq   epilogue
  
! # return INT
! 	cmp   a4, #FFI_TYPE_INT
! 	streq a1, [a3]
! 	beq   epilogue
  
! # return FLOAT
! 	cmp     a4, #FFI_TYPE_FLOAT
  #ifdef __SOFTFP__
! 	streq	a1, [a3]
! #else
! 	stfeqs  f0, [a3]
  #endif
! 	beq     epilogue
  
! # return DOUBLE or LONGDOUBLE
! 	cmp     a4, #FFI_TYPE_DOUBLE
  #ifdef __SOFTFP__
! 	stmeqia	a3, {a1, a2}
! #else
! 	stfeqd  f0, [a3]
  #endif
  
! epilogue:
!         ldmfd sp!, {a1-a4, fp, pc}
  
  .ffi_call_SYSV_end:
          .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
--- 40,208 ----
  #endif
  #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
  #endif
  
! #ifdef __ELF__
! #define LSYM(x) .x
! #else
! #define LSYM(x) x
! #endif
  
! /* We need a better way of testing for this, but for now, this is all 
!    we can do.  */
! @ This selects the minimum architecture level required.
! #define __ARM_ARCH__ 3
  
! #if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__)
! # undef __ARM_ARCH__
! # define __ARM_ARCH__ 4
! #endif
!         
! #if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
! 	|| defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
! 	|| defined(__ARM_ARCH_5TEJ__)
! # undef __ARM_ARCH__
! # define __ARM_ARCH__ 5
! #endif
  
! #if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
!         || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
!         || defined(__ARM_ARCH_6ZK__)
! # undef __ARM_ARCH__
! # define __ARM_ARCH__ 6
! #endif
  
! #if __ARM_ARCH__ >= 5
! # define call_reg(x)	blx	x
! #elif defined (__ARM_ARCH_4T__)
! # define call_reg(x)	mov	lr, pc ; bx	x
! # if defined(__thumb__) || defined(__THUMB_INTERWORK__)
! #  define __INTERWORKING__
! # endif
! #else
! # define call_reg(x)	mov	lr, pc ; mov	pc, x
! #endif
  
! #if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
! .macro	ARM_FUNC_START name
! 	.text
! 	.align 0
! 	.thumb
! 	.thumb_func
! 	ENTRY(\name)
! 	bx	pc
! 	nop
! 	.arm
! /* A hook to tell gdb that we've switched to ARM mode.  Also used to call
!    directly from other local arm routines.  */
! _L__\name:		
! .endm
! #else
! .macro	ARM_FUNC_START name
! 	.text
! 	.align 0
! 	.arm
! 	ENTRY(\name)
! .endm
! #endif
  
! .macro	RETLDM	regs=, cond=, dirn=ia
! #if defined (__INTERWORKING__)
! 	.ifc "\regs",""
! 	ldr\cond	lr, [sp], #4
! 	.else
! 	ldm\cond\dirn	sp!, {\regs, lr}
! 	.endif
! 	bx\cond	lr
! #else
! 	.ifc "\regs",""
! 	ldr\cond	pc, [sp], #4
! 	.else
! 	ldm\cond\dirn	sp!, {\regs, pc}
! 	.endif
! #endif
! .endm
  
  
! 	@ r0:   ffi_prep_args
! 	@ r1:   &ecif
! 	@ r2:   cif->bytes
! 	@ r3:   fig->flags
! 	@ sp+0: ecif.rvalue
! 	@ sp+4: fn
  
! 	@ This assumes we are using gas.
! ARM_FUNC_START ffi_call_SYSV
! 	@ Save registers
!         stmfd	sp!, {r0-r3, fp, lr}
! 	mov	fp, sp
  
! 	@ Make room for all of the new args.
! 	sub	sp, fp, r2
  
! 	@ Place all of the ffi_prep_args in position
! 	mov	ip, r0
! 	mov	r0, sp
! 	@     r1 already set
  
! 	@ Call ffi_prep_args(stack, &ecif)
! 	call_reg(ip)
  
! 	@ move first 4 parameters in registers
! 	ldmia	sp, {r0-r3}
! 
! 	@ and adjust stack
! 	ldr	ip, [fp, #8]
!         cmp	ip, #16
! 	movhs	ip, #16
!         add	sp, sp, ip
! 
! 	@ call (fn) (...)
! 	ldr	ip, [fp, #28]
! 	call_reg(ip)
! 	
! 	@ Remove the space we pushed for the args
! 	mov	sp, fp
! 
! 	@ Load r2 with the pointer to storage for the return value
! 	ldr	r2, [sp, #24]
! 
! 	@ Load r3 with the return type code 
! 	ldr	r3, [sp, #12]
! 
! 	@ If the return value pointer is NULL, assume no return value.
! 	cmp	r2, #0
! 	beq	LSYM(Lepilogue)
! 
! @ return INT
! 	cmp	r3, #FFI_TYPE_INT
  #ifdef __SOFTFP__
! 	cmpne	r3, #FFI_TYPE_FLOAT
  #endif
! 	streq	r0, [r2]
! 	beq	LSYM(Lepilogue)
  
! 	@ return INT64
! 	cmp	r3, #FFI_TYPE_SINT64
  #ifdef __SOFTFP__
! 	cmpne	r3, #FFI_TYPE_DOUBLE
  #endif
+ 	stmeqia	r2, {r0, r1}
  
! #ifndef __SOFTFP__
! 	beq	LSYM(Lepilogue)
! 
! @ return FLOAT
! 	cmp	r3, #FFI_TYPE_FLOAT
! 	stfeqs	f0, [r2]
! 	beq	LSYM(Lepilogue)
! 
! @ return DOUBLE or LONGDOUBLE
! 	cmp	r3, #FFI_TYPE_DOUBLE
! 	stfeqd	f0, [r2]
! #endif
! 
! LSYM(Lepilogue):
! 	RETLDM	"r0-r3,fp"
  
  .ffi_call_SYSV_end:
          .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
diff -Nrcpad gcc-3.4.3/libffi/src/frv/eabi.S gcc-4.0.0/libffi/src/frv/eabi.S
*** gcc-3.4.3/libffi/src/frv/eabi.S	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/src/frv/eabi.S	Mon Aug 30 15:43:03 2004
***************
*** 0 ****
--- 1,130 ----
+ /* -----------------------------------------------------------------------
+    eabi.S - Copyright (c) 2004  Anthony Green
+    
+    FR-V Assembly glue.
+ 
+    $Id: eabi.S,v 1.1 2004/08/30 15:43:03 green Exp $
+ 
+    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 THE AUTHOR 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 <fficonfig.h>
+ #include <ffi.h>
+ 
+ 	.globl ffi_prep_args_EABI
+ 
+ 	.text
+ 	.p2align 4
+ 	.globl ffi_call_EABI
+ 	.type ffi_call_EABI, @function
+ 
+ 	# gr8 :   ffi_prep_args
+ 	# gr9 :   &ecif
+ 	# gr10:   cif->bytes
+ 	# gr11:   fig->flags
+ 	# gr12:   ecif.rvalue
+ 	# gr13:   fn
+ 	
+ ffi_call_EABI:	
+ 	addi	sp, #-80, sp
+ 	sti	fp, @(sp, #24)
+ 	addi	sp, #24, fp
+ 	movsg	lr, gr5
+ 
+ 	/* Make room for the new arguments.  */
+ 	/* subi	sp, fp, gr10 */
+ 	
+ 	/* Store return address and incoming args on stack.  */
+ 	sti	gr5, @(fp, #8)
+ 	sti	gr8, @(fp, #-4)
+ 	sti	gr9, @(fp, #-8)
+ 	sti	gr10, @(fp, #-12)
+ 	sti	gr11, @(fp, #-16)
+ 	sti	gr12, @(fp, #-20)
+ 	sti	gr13, @(fp, #-24)
+ 
+ 	sub     sp, gr10, sp
+ 	
+ 	/* Call ffi_prep_args.  */
+ 	ldi	@(fp, #-4), gr4
+ 	addi	sp, #0, gr8
+ 	ldi	@(fp, #-8), gr9
+ #ifdef __FRV_FDPIC__
+ 	ldd	@(gr4, gr0), gr14
+ 	calll	@(gr14, gr0)
+ #else
+ 	calll	@(gr4, gr0)
+ #endif	
+ 
+ 	/* ffi_prep_args returns the new stack pointer.  */
+ 	mov	gr8, gr4
+ 		
+ 	ldi	@(sp, #0), gr8
+ 	ldi	@(sp, #4), gr9
+ 	ldi	@(sp, #8), gr10
+ 	ldi	@(sp, #12), gr11
+ 	ldi	@(sp, #16), gr12
+ 	ldi	@(sp, #20), gr13
+ 
+ 	/* Always copy the return value pointer into the hidden
+ 	   parameter register.  This is only strictly necessary
+ 	   when we're returning an aggregate type, but it doesn't
+ 	   hurt to do this all the time, and it saves a branch.  */
+ 	ldi	@(fp, #-20), gr3
+ 
+ 	/* Use the ffi_prep_args return value for the new sp.  */
+ 	mov	gr4, sp
+ 	
+ 	/* Call the target function.  */
+ 	ldi	@(fp, -24), gr4
+ #ifdef __FRV_FDPIC__
+ 	ldd	@(gr4, gr0), gr14
+ 	calll	@(gr14, gr0)
+ #else
+ 	calll	@(gr4, gr0)
+ #endif	
+ 
+ 	/* Store the result. */
+ 	ldi	@(fp, #-16), gr10  /* fig->flags */
+ 	ldi	@(fp, #-20), gr4   /* ecif.rvalue */
+ 
+ 	/* Is the return value stored in two registers?  */
+ 	cmpi	gr10, #8, icc0
+ 	bne	icc0, 0, .L2
+ 	/*   Yes, save them.  */
+ 	sti	gr8, @(gr4, #0)
+ 	sti	gr9, @(gr4, #4)
+ 	bra	.L3
+ .L2:
+ 	/* Is the return value a structure?  */
+ 	cmpi	gr10, #-1, icc0
+ 	beq	icc0, 0, .L3
+ 	/*   No, save a 4 byte return value.  */
+ 	sti	gr8, @(gr4, #0)
+ .L3:	
+ 
+ 	/* Restore the stack, and return.  */
+ 	ldi	@(fp, 8), gr5
+ 	ld	@(fp, gr0), fp
+ 	addi	sp,#80,sp
+ 	jmpl	@(gr5,gr0)
+ 	.size ffi_call_EABI, .-ffi_call_EABI
+ 	
diff -Nrcpad gcc-3.4.3/libffi/src/frv/ffi.c gcc-4.0.0/libffi/src/frv/ffi.c
*** gcc-3.4.3/libffi/src/frv/ffi.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/src/frv/ffi.c	Mon Aug 30 15:43:03 2004
***************
*** 0 ****
--- 1,287 ----
+ /* -----------------------------------------------------------------------
+    ffi.c - Copyright (c) 2004  Anthony Green
+    
+    FR-V 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 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.
+    ----------------------------------------------------------------------- */
+ 
+ #include <ffi.h>
+ #include <ffi_common.h>
+ 
+ #include <stdlib.h>
+ 
+ /* ffi_prep_args is called by the assembly routine once stack space
+    has been allocated for the function's arguments */
+ 
+ void *ffi_prep_args(char *stack, extended_cif *ecif)
+ {
+   register unsigned int i;
+   register void **p_argv;
+   register char *argp;
+   register ffi_type **p_arg;
+   register int count = 0;
+ 
+   p_argv = ecif->avalue;
+   argp = stack;
+ 
+   for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
+        (i != 0);
+        i--, p_arg++)
+     {
+       size_t z;
+       
+       z = (*p_arg)->size;
+ 
+       if ((*p_arg)->type == FFI_TYPE_STRUCT)
+ 	{
+ 	  z = sizeof(void*);
+ 	  *(void **) argp = *p_argv;
+ 	} 
+       /*      if ((*p_arg)->type == FFI_TYPE_FLOAT)
+ 	{
+ 	  if (count > 24)
+ 	    {
+ 	      // This is going on the stack.  Turn it into a double.  
+ 	      *(double *) argp = (double) *(float*)(* p_argv);
+ 	      z = sizeof(double);
+ 	    }
+ 	  else
+ 	    *(void **) argp = *(void **)(* p_argv);
+ 	}  */
+       else if (z < sizeof(int))
+ 	{
+ 	  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);
+ 	    }
+ 	}
+       else if (z == sizeof(int))
+ 	{
+ 	  *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv);
+ 	}
+       else
+ 	{
+ 	  memcpy(argp, *p_argv, z);
+ 	}
+       p_argv++;
+       argp += z;
+       count += z;
+     }
+ 
+   return (stack + ((count > 24) ? 24 : ALIGN_DOWN(count, 8)));
+ }
+ 
+ /* Perform machine dependent cif processing */
+ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
+ {
+   if (cif->rtype->type == FFI_TYPE_STRUCT)
+     cif->flags = -1;
+   else
+     cif->flags = cif->rtype->size;
+ 
+   cif->bytes = ALIGN (cif->bytes, 8);
+ 
+   return FFI_OK;
+ }
+ 
+ extern void ffi_call_EABI(void *(*)(char *, extended_cif *), 
+ 			  extended_cif *, 
+ 			  unsigned, unsigned, 
+ 			  unsigned *, 
+ 			  void (*fn)());
+ 
+ void ffi_call(ffi_cif *cif, 
+ 	      void (*fn)(), 
+ 	      void *rvalue, 
+ 	      void **avalue)
+ {
+   extended_cif ecif;
+ 
+   ecif.cif = cif;
+   ecif.avalue = avalue;
+   
+   /* 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))
+     {
+       ecif.rvalue = alloca(cif->rtype->size);
+     }
+   else
+     ecif.rvalue = rvalue;
+     
+   
+   switch (cif->abi) 
+     {
+     case FFI_EABI:
+       ffi_call_EABI(ffi_prep_args, &ecif, cif->bytes, 
+ 		    cif->flags, ecif.rvalue, fn);
+       break;
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+ }
+ 
+ void ffi_closure_eabi (unsigned arg1, unsigned arg2, unsigned arg3,
+ 		       unsigned arg4, unsigned arg5, unsigned arg6)
+ {
+   /* This function is called by a trampoline.  The trampoline stows a
+      pointer to the ffi_closure object in gr7.  We must save this
+      pointer in a place that will persist while we do our work.  */
+   register ffi_closure *creg __asm__ ("gr7");
+   ffi_closure *closure = creg;
+ 
+   /* Arguments that don't fit in registers are found on the stack
+      at a fixed offset above the current frame pointer.  */
+   register char *frame_pointer __asm__ ("fp");
+   char *stack_args = frame_pointer + 16;
+ 
+   /* Lay the register arguments down in a continuous chunk of memory.  */
+   unsigned register_args[6] =
+     { arg1, arg2, arg3, arg4, arg5, arg6 };
+ 
+   ffi_cif *cif = closure->cif;
+   ffi_type **arg_types = cif->arg_types;
+   void **avalue = alloca (cif->nargs * sizeof(void *));
+   char *ptr = (char *) register_args;
+   int i;
+ 
+   /* Find the address of each argument.  */
+   for (i = 0; i < cif->nargs; i++)
+     {
+       switch (arg_types[i]->type)
+ 	{
+ 	case FFI_TYPE_SINT8:
+ 	case FFI_TYPE_UINT8:
+ 	  avalue[i] = ptr + 3;
+ 	  break;
+ 	case FFI_TYPE_SINT16:
+ 	case FFI_TYPE_UINT16:
+ 	  avalue[i] = ptr + 2;
+ 	  break;
+ 	case FFI_TYPE_SINT32:
+ 	case FFI_TYPE_UINT32:
+ 	case FFI_TYPE_FLOAT:
+ 	  avalue[i] = ptr;
+ 	  break;
+ 	case FFI_TYPE_STRUCT:
+ 	  avalue[i] = *(void**)ptr;
+ 	  break;
+ 	default:
+ 	  /* This is an 8-byte value.  */
+ 	  avalue[i] = ptr;
+ 	  ptr += 4;
+ 	  break;
+ 	}
+       ptr += 4;
+ 
+       /* If we've handled more arguments than fit in registers,
+ 	 start looking at the those passed on the stack.  */
+       if (ptr == ((char *)register_args + (6*4)))
+ 	ptr = stack_args;
+     }
+ 
+   /* Invoke the closure.  */
+   if (cif->rtype->type == FFI_TYPE_STRUCT)
+     {
+       /* The caller allocates space for the return structure, and
+        passes a pointer to this space in gr3.  Use this value directly
+        as the return value.  */
+       register void *return_struct_ptr __asm__("gr3");
+       (closure->fun) (cif, return_struct_ptr, avalue, closure->user_data);
+     }
+   else
+     {
+       /* Allocate space for the return value and call the function.  */
+       long long rvalue;
+       (closure->fun) (cif, &rvalue, avalue, closure->user_data);
+ 
+       /* Functions return 4-byte or smaller results in gr8.  8-byte
+ 	 values also use gr9.  We fill the both, even for small return
+ 	 values, just to avoid a branch.  */ 
+       asm ("ldi  @(%0, #0), gr8" : : "r" (&rvalue));
+       asm ("ldi  @(%0, #0), gr9" : : "r" (&((int *) &rvalue)[1]));
+     }
+ }
+ 
+ ffi_status
+ ffi_prep_closure (ffi_closure* closure,
+ 		  ffi_cif* cif,
+ 		  void (*fun)(ffi_cif*, void*, void**, void*),
+ 		  void *user_data)
+ {
+   unsigned int *tramp = (unsigned int *) &closure->tramp[0];
+   unsigned long fn = (long) ffi_closure_eabi;
+   unsigned long cls = (long) closure;
+ #ifdef __FRV_FDPIC__
+   register void *got __asm__("gr15");
+ #endif
+   int i;
+ 
+   fn = (unsigned long) ffi_closure_eabi;
+ 
+ #ifdef __FRV_FDPIC__
+   tramp[0] = &tramp[2];
+   tramp[1] = got;
+   tramp[2] = 0x8cfc0000 + (fn  & 0xffff); /* setlos lo(fn), gr6    */
+   tramp[3] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7   */
+   tramp[4] = 0x8cf80000 + (fn  >> 16);	  /* sethi hi(fn), gr6     */
+   tramp[5] = 0x8ef80000 + (cls >> 16);    /* sethi hi(cls), gr7    */
+   tramp[6] = 0x9cc86000;                  /* ldi @(gr6, #0), gr14  */
+   tramp[7] = 0x8030e000;                  /* jmpl @(gr14, gr0)     */
+ #else
+   tramp[0] = 0x8cfc0000 + (fn  & 0xffff); /* setlos lo(fn), gr6    */
+   tramp[1] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7   */
+   tramp[2] = 0x8cf80000 + (fn  >> 16);	  /* sethi hi(fn), gr6     */
+   tramp[3] = 0x8ef80000 + (cls >> 16);    /* sethi hi(cls), gr7    */
+   tramp[4] = 0x80300006;                  /* jmpl @(gr0, gr6)      */
+ #endif
+ 
+   closure->cif = cif;
+   closure->fun = fun;
+   closure->user_data = user_data;
+ 
+   /* Cache flushing.  */
+   for (i = 0; i < FFI_TRAMPOLINE_SIZE; i++)
+     __asm__ volatile ("dcf @(%0,%1)\n\tici @(%0,%1)" :: "r" (tramp), "r" (i));
+ 
+   return FFI_OK;
+ }
diff -Nrcpad gcc-3.4.3/libffi/src/frv/ffitarget.h gcc-4.0.0/libffi/src/frv/ffitarget.h
*** gcc-3.4.3/libffi/src/frv/ffitarget.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/src/frv/ffitarget.h	Tue Feb  8 21:10:50 2005
***************
*** 0 ****
--- 1,60 ----
+ /* -----------------------------------------------------------------*-C-*-
+    ffitarget.h - Copyright (c) 1996-2004  Red Hat, Inc.
+    Target configuration macros for FR-V
+ 
+    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
+ 
+ /* ---- System specific configurations ----------------------------------- */
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+ 
+ #ifdef FRV
+   FFI_EABI,
+   FFI_DEFAULT_ABI = FFI_EABI,
+ #endif
+ 
+   FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
+ } ffi_abi;
+ #endif
+ 
+ /* ---- Definitions for closures ----------------------------------------- */
+ 
+ #define FFI_CLOSURES 1
+ #define FFI_NATIVE_RAW_API 0
+ 
+ #ifdef __FRV_FDPIC__
+ /* Trampolines are 8 4-byte instructions long.  */
+ #define FFI_TRAMPOLINE_SIZE (8*4)
+ #else
+ /* Trampolines are 5 4-byte instructions long.  */
+ #define FFI_TRAMPOLINE_SIZE (5*4)
+ #endif
+ 
+ #endif
diff -Nrcpad gcc-3.4.3/libffi/src/ia64/ffi.c gcc-4.0.0/libffi/src/ia64/ffi.c
*** gcc-3.4.3/libffi/src/ia64/ffi.c	Wed Oct 22 13:57:12 2003
--- gcc-4.0.0/libffi/src/ia64/ffi.c	Fri Dec 31 20:11:17 2004
***************
*** 29,672 ****
  
  #include <stdlib.h>
  #include <stdbool.h>
  
  #include "ia64_flags.h"
  
! /* Memory image of fp register contents.  Should eventually be an fp 	*/
! /* type long enough to hold an entire register.  For now we use double.	*/
! typedef double float80;
  
! /* The stack layout at call to ffi_prep_args.  Other_args will remain	*/
! /* on the stack for the actual call.  Everything else we be transferred	*/
! /* to registers and popped by the assembly code.			*/
  
! struct ia64_args {
!     long scratch[2];	/* Two scratch words at top of stack.		*/
! 			/* Allows sp to be passed as arg pointer.	*/
!     void * r8_contents;	/* Value to be passed in r8			*/
!     long spare;		/* Not used.					*/
!     float80 fp_regs[8]; /* Contents of 8 floating point argument 	*/
! 			/* registers.					*/
!     long out_regs[8];	/* Contents of the 8 out registers used 	*/
! 			/* for integer parameters.			*/
!     long other_args[0]; /* Arguments passed on stack, variable size	*/
! 			/* Treated as continuation of out_regs.		*/
  };
  
! static size_t float_type_size(unsigned short tp)
  {
!   switch(tp) {
!     case FFI_TYPE_FLOAT:
!       return sizeof(float);
!     case FFI_TYPE_DOUBLE:
!       return sizeof(double);
! #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
!     case FFI_TYPE_LONGDOUBLE:
!       return sizeof(long double);
  #endif
-     default:
-       FFI_ASSERT(0);
-   }
  }
  
! /*
!  * Is type a struct containing at most n floats, doubles, or extended
!  * doubles, all of the same fp type?
!  * If so, set *element_type to the fp type.
!  */
! static bool is_homogeneous_fp_aggregate(ffi_type * type, int n,
! 				        unsigned short * element_type)
! {
!   ffi_type **ptr; 
!   unsigned short element, struct_element;
  
!   int type_set = 0;
  
!   FFI_ASSERT(type != NULL);
  
!   FFI_ASSERT(type->elements != NULL);
  
!   ptr = &(type->elements[0]);
  
!   while ((*ptr) != NULL)
      {
!       switch((*ptr) -> type) {
! 	case FFI_TYPE_FLOAT:
! 	  if (type_set && element != FFI_TYPE_FLOAT) return 0;
! 	  if (--n < 0) return false;
! 	  type_set = 1;
! 	  element = FFI_TYPE_FLOAT;
! 	  break;
! 	case FFI_TYPE_DOUBLE:
! 	  if (type_set && element != FFI_TYPE_DOUBLE) return 0;
! 	  if (--n < 0) return false;
! 	  type_set = 1;
! 	  element = FFI_TYPE_DOUBLE;
! 	  break;
! 	case FFI_TYPE_STRUCT:
! 	  if (!is_homogeneous_fp_aggregate(type, n, &struct_element))
! 	      return false;
! 	  if (type_set && struct_element != element) return false;
! 	  n -= (type -> size)/float_type_size(element);
! 	  element = struct_element;
! 	  if (n < 0) return false;
! 	  break;
! 	/* case FFI_TYPE_LONGDOUBLE:
! 	  Not yet implemented.	*/
! 	default:
! 	  return false;
!       }
!       ptr++;
      }
!   *element_type = element;
!   return true;
!    
! } 
  
! /* ffi_prep_args is called by the assembly routine once stack space
!    has been allocated for the function's arguments.  It fills in
!    the arguments in the structure referenced by stack. Returns nonzero
!    if fp registers are used for arguments. */
  
! static bool
! ffi_prep_args(struct ia64_args *stack, extended_cif *ecif, int bytes)
  {
!   register long i, avn;
!   register void **p_argv;
!   register long *argp = stack -> out_regs;
!   register float80 *fp_argp = stack -> fp_regs;
!   register ffi_type **p_arg;
  
!   /* For big return structs, r8 needs to contain the target address.	*/
!   /* Since r8 is otherwise dead, we set it unconditionally.		*/
!   stack -> r8_contents = ecif -> rvalue;
!   i = 0;
!   avn = ecif->cif->nargs;
!   p_arg = ecif->cif->arg_types;
!   p_argv = ecif->avalue;
!   while (i < avn)
      {
!       size_t z; /* z is in units of arg slots or words, not bytes.	*/
  
!       switch ((*p_arg)->type)
! 	{
! 	case FFI_TYPE_SINT8:
! 	  z = 1;
! 	  *(SINT64 *) argp = *(SINT8 *)(* p_argv);
! 	  break;
! 		  
! 	case FFI_TYPE_UINT8:
! 	  z = 1;
! 	  *(UINT64 *) argp = *(UINT8 *)(* p_argv);
! 	  break;
! 		  
! 	case FFI_TYPE_SINT16:
! 	  z = 1;
! 	  *(SINT64 *) argp = *(SINT16 *)(* p_argv);
! 	  break;
! 		  
! 	case FFI_TYPE_UINT16:
! 	  z = 1;
! 	  *(UINT64 *) argp = *(UINT16 *)(* p_argv);
! 	  break;
! 		  
! 	case FFI_TYPE_SINT32:
! 	  z = 1;
! 	  *(SINT64 *) argp = *(SINT32 *)(* p_argv);
! 	  break;
! 		  
! 	case FFI_TYPE_UINT32:
! 	  z = 1;
! 	  *(UINT64 *) argp = *(UINT32 *)(* p_argv);
! 	  break;
  
! 	case FFI_TYPE_SINT64:
! 	case FFI_TYPE_UINT64:
! 	case FFI_TYPE_POINTER:
! 	  z = 1;
! 	  *(UINT64 *) argp = *(UINT64 *)(* p_argv);
! 	  break;
  
! 	case FFI_TYPE_FLOAT:
! 	  z = 1;
! 	  if (fp_argp - stack->fp_regs < 8)
! 	    {
! 	      /* Note the conversion -- all the fp regs are loaded as
! 		 doubles.  */
! 	      *fp_argp++ = *(float *)(* p_argv);
! 	    }
! 	  /* Also put it into the integer registers or memory: */
! 	    *(UINT64 *) argp = *(UINT32 *)(* p_argv);
! 	  break;
  
! 	case FFI_TYPE_DOUBLE:
! 	  z = 1;
! 	  if (fp_argp - stack->fp_regs < 8)
! 	    *fp_argp++ = *(double *)(* p_argv);
! 	  /* Also put it into the integer registers or memory: */
! 	    *(double *) argp = *(double *)(* p_argv);
! 	  break;
  
! 	case FFI_TYPE_STRUCT:
  	  {
! 	      size_t sz = (*p_arg)->size;
! 	      unsigned short element_type;
!               z = ((*p_arg)->size + FFI_SIZEOF_ARG - 1)/FFI_SIZEOF_ARG;
! 	      if (is_homogeneous_fp_aggregate(*p_arg, 8, &element_type)) {
! 		int i;
! 		int nelements = sz/float_type_size(element_type);
! 		for (i = 0; i < nelements; ++i) {
! 		  switch (element_type) {
! 		    case FFI_TYPE_FLOAT:
! 		      if (fp_argp - stack->fp_regs < 8)
! 			*fp_argp++ = ((float *)(* p_argv))[i];
! 		      break;
! 		    case FFI_TYPE_DOUBLE:
! 		      if (fp_argp - stack->fp_regs < 8)
! 			*fp_argp++ = ((double *)(* p_argv))[i];
! 		      break;
! 		    default:
! 			/* Extended precision not yet implemented. */
! 			abort();
! 		  }
! 		}
! 	      }
! 	      /* And pass it in integer registers as a struct, with	*/
! 	      /* its actual field sizes packed into registers.		*/
! 	      memcpy(argp, *p_argv, (*p_arg)->size);
! 	  }
! 	  break;
  
! 	default:
! 	  FFI_ASSERT(0);
! 	}
  
!       argp += z;
!       i++, p_arg++, p_argv++;
      }
!   return (fp_argp != stack -> fp_regs);
  }
  
! /* Perform machine dependent cif processing */
  ffi_status
  ffi_prep_cif_machdep(ffi_cif *cif)
  {
!   long i, avn;
!   bool is_simple = true;
!   long simple_flag = FFI_SIMPLE_V;
!   /* Adjust cif->bytes to include space for the 2 scratch words,
!      r8 register contents, spare word,
!      the 8 fp register contents, and all 8 integer register contents.
!      This will be removed before the call, though 2 scratch words must
!      remain.  */
  
!   cif->bytes += 4*sizeof(long) + 8 *sizeof(float80);
    if (cif->bytes < sizeof(struct ia64_args))
      cif->bytes = sizeof(struct ia64_args);
  
!   /* The stack must be double word aligned, so round bytes up
!      appropriately. */
! 
!   cif->bytes = ALIGN(cif->bytes, 2*sizeof(void*));
! 
!   avn = cif->nargs;
!   if (avn <= 2) {
!     for (i = 0; i < avn; ++i) {
!       switch(cif -> arg_types[i] -> type) {
! 	case FFI_TYPE_SINT32:
! 	  simple_flag = FFI_ADD_INT_ARG(simple_flag);
! 	  break;
! 	case FFI_TYPE_SINT64:
! 	case FFI_TYPE_UINT64:
! 	case FFI_TYPE_POINTER:
! 	  simple_flag = FFI_ADD_LONG_ARG(simple_flag);
! 	  break;
! 	default:
! 	  is_simple = false;
!       }
!     }
!   } else {
!     is_simple = false;
!   }
! 
!   /* Set the return type flag */
    switch (cif->rtype->type)
      {
!     case FFI_TYPE_VOID:
!       cif->flags = FFI_TYPE_VOID;
        break;
  
      case FFI_TYPE_STRUCT:
        {
!         size_t sz = cif -> rtype -> size;
!   	unsigned short element_type;
  
! 	is_simple = false;
!   	if (is_homogeneous_fp_aggregate(cif -> rtype, 8, &element_type)) {
! 	  int nelements = sz/float_type_size(element_type);
! 	  if (nelements <= 1) {
! 	    if (0 == nelements) {
! 	      cif -> flags = FFI_TYPE_VOID;
! 	    } else {
! 	      cif -> flags = element_type;
! 	    }
! 	  } else {
! 	    switch(element_type) {
! 	      case FFI_TYPE_FLOAT:
! 	        cif -> flags = FFI_IS_FLOAT_FP_AGGREGATE | nelements;
! 		break;
! 	      case FFI_TYPE_DOUBLE:
! 	        cif -> flags = FFI_IS_DOUBLE_FP_AGGREGATE | nelements;
! 		break;
! 	      default:
! 		/* long double NYI */
! 		abort();
! 	    }
  	  }
! 	  break;
!         }
!         if (sz <= 32) {
! 	  if (sz <= 8) {
!               cif->flags = FFI_TYPE_INT;
!   	  } else if (sz <= 16) {
!               cif->flags = FFI_IS_SMALL_STRUCT2;
!   	  } else if (sz <= 24) {
!               cif->flags = FFI_IS_SMALL_STRUCT3;
! 	  } else {
!               cif->flags = FFI_IS_SMALL_STRUCT4;
  	  }
-         } else {
-           cif->flags = FFI_TYPE_STRUCT;
- 	}
        }
        break;
  
-     case FFI_TYPE_FLOAT:
-       is_simple = false;
-       cif->flags = FFI_TYPE_FLOAT;
-       break;
- 
-     case FFI_TYPE_DOUBLE:
-       is_simple = false;
-       cif->flags = FFI_TYPE_DOUBLE;
-       break;
- 
      default:
-       cif->flags = FFI_TYPE_INT;
-       /* This seems to depend on little endian mode, and the fact that	*/
-       /* the return pointer always points to at least 8 bytes.  But 	*/
-       /* that also seems to be true for other platforms.		*/
        break;
      }
!   
!   if (is_simple) cif -> flags |= simple_flag;
    return FFI_OK;
  }
  
! extern int ffi_call_unix(bool (*)(struct ia64_args *, extended_cif *, int), 
! 			 extended_cif *, unsigned, 
! 			 unsigned, unsigned *, void (*)());
  
  void
  ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
  {
!   extended_cif ecif;
!   long simple = cif -> flags & FFI_SIMPLE;
  
!   /* Should this also check for Unix ABI? */
!   /* This is almost, but not quite, machine independent.  Note that	*/
!   /* we can get away with not caring about length of the result because	*/
!   /* we assume we are little endian, and the result buffer is large 	*/
!   /* enough.								*/
!   /* This needs work for HP/UX.						*/
!   if (simple) {
!     long (*lfn)() = (long (*)())fn;
!     long result;
!     switch(simple) {
!       case FFI_SIMPLE_V:
! 	result = lfn();
! 	break;
!       case FFI_SIMPLE_I:
! 	result = lfn(*(int *)avalue[0]);
! 	break;
!       case FFI_SIMPLE_L:
! 	result = lfn(*(long *)avalue[0]);
! 	break;
!       case FFI_SIMPLE_II:
! 	result = lfn(*(int *)avalue[0], *(int *)avalue[1]);
! 	break;
!       case FFI_SIMPLE_IL:
! 	result = lfn(*(int *)avalue[0], *(long *)avalue[1]);
! 	break;
!       case FFI_SIMPLE_LI:
! 	result = lfn(*(long *)avalue[0], *(int *)avalue[1]);
! 	break;
!       case FFI_SIMPLE_LL:
! 	result = lfn(*(long *)avalue[0], *(long *)avalue[1]);
! 	break;
!     }
!     if ((cif->flags & ~FFI_SIMPLE) != FFI_TYPE_VOID && 0 != rvalue) {
!       * (long *)rvalue = result;
!     }
!     return;
!   }
!   ecif.cif = cif;
!   ecif.avalue = avalue;
!   
!   /* 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)
!     ecif.rvalue = alloca(cif->rtype->size);
!   else
!     ecif.rvalue = rvalue;
      
!   switch (cif->abi) 
      {
!     case FFI_UNIX:
!       ffi_call_unix(ffi_prep_args, &ecif, cif->bytes,
! 		    cif->flags, rvalue, fn);
!       break;
  
!     default:
!       FFI_ASSERT(0);
!       break;
      }
- }
  
! /*
!  * Closures represent a pair consisting of a function pointer, and
!  * some user data.  A closure is invoked by reinterpreting the closure
!  * as a function pointer, and branching to it.  Thus we can make an
!  * interpreted function callable as a C function:  We turn the interpreter
!  * itself, together with a pointer specifying the interpreted procedure,
!  * into a closure.
!  * On X86, the first few words of the closure structure actually contain code,
!  * which will do the right thing.  On most other architectures, this
!  * would raise some Icache/Dcache coherence issues (which can be solved, but
!  * often not cheaply).
!  * For IA64, function pointer are already pairs consisting of a code
!  * pointer, and a gp pointer.  The latter is needed to access global variables.
!  * Here we set up such a pair as the first two words of the closure (in
!  * the "trampoline" area), but we replace the gp pointer with a pointer
!  * to the closure itself.  We also add the real gp pointer to the
!  * closure.  This allows the function entry code to both retrieve the
!  * user data, and to restire the correct gp pointer.
!  */
  
! static void 
! ffi_prep_incoming_args_UNIX(struct ia64_args *args, void **rvalue,
! 			    void **avalue, ffi_cif *cif);
  
! /* This function is entered with the doctored gp (r1) value.
!  * This code is extremely gcc specific.  There is some argument that
!  * it should really be written in assembly code, since it depends on
!  * gcc properties that might change over time.
!  */
  
! /* ffi_closure_UNIX is an assembly routine, which copies the register 	*/
! /* state into a struct ia64_args, and then invokes			*/
! /* ffi_closure_UNIX_inner.  It also recovers the closure pointer	*/
! /* from its fake gp pointer.						*/
! void ffi_closure_UNIX();
  
! #ifndef __GNUC__
! #   error This requires gcc
! #endif
! void
! ffi_closure_UNIX_inner (ffi_closure *closure, struct ia64_args * args)
! /* Hopefully declaring this as a varargs function will force all args	*/
! /* to memory.								*/
  {
!   // this is our return value storage
!   long double    res;
  
!   // our various things...
!   ffi_cif       *cif;
!   unsigned short rtype;
!   void          *resp;
!   void		**arg_area;
  
!   resp = (void*)&res;
!   cif         = closure->cif;
!   arg_area    = (void**) alloca (cif->nargs * sizeof (void*));  
  
!   /* this call will initialize ARG_AREA, such that each
!    * element in that array points to the corresponding 
!    * value on the stack; and if the function returns
!    * a structure, it will re-set RESP to point to the
!    * structure return address.  */
  
!   ffi_prep_incoming_args_UNIX(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 volatile ("ld8 r8=[%0]" : : "r" (resp) : "r8");
!     }
!   else if (rtype == FFI_TYPE_FLOAT)
!     {
!       asm volatile ("ldfs f8=[%0]" : : "r" (resp) : "f8");
!     }
!   else if (rtype == FFI_TYPE_DOUBLE)
!     {
!       asm volatile ("ldfd f8=[%0]" : : "r" (resp) : "f8");
!     }
!   else if (rtype == FFI_IS_SMALL_STRUCT2)
!     {
!       asm volatile ("ld8 r8=[%0]; ld8 r9=[%1]"
! 		    : : "r" (resp), "r" (resp+8) : "r8","r9");
!     }
!   else if (rtype == FFI_IS_SMALL_STRUCT3)
!     {
!       asm volatile ("ld8 r8=[%0]; ld8 r9=[%1]; ld8 r10=[%2]"
! 		    : : "r" (resp), "r" (resp+8), "r" (resp+16)
! 		    : "r8","r9","r10");
!     }
!   else if (rtype == FFI_IS_SMALL_STRUCT4)
!     {
!       asm volatile ("ld8 r8=[%0]; ld8 r9=[%1]; ld8 r10=[%2]; ld8 r11=[%3]"
! 		    : : "r" (resp), "r" (resp+8), "r" (resp+16), "r" (resp+24)
! 		    : "r8","r9","r10","r11");
!     }
!   else if (rtype != FFI_TYPE_VOID && rtype != FFI_TYPE_STRUCT)
!     {
!       /* Can only happen for homogeneous FP aggregates?	*/
!       abort();
!     }
  }
  
! static void 
! ffi_prep_incoming_args_UNIX(struct ia64_args *args, void **rvalue,
! 			    void **avalue, ffi_cif *cif)
  {
!   register unsigned int i;
!   register unsigned int avn;
!   register void **p_argv;
!   register unsigned long *argp = args -> out_regs;
!   unsigned fp_reg_num = 0;
!   register ffi_type **p_arg;
  
    avn = cif->nargs;
!   p_argv = avalue;
  
!   for (i = cif->nargs, p_arg = cif->arg_types; i != 0; i--, p_arg++)
!     {
!       size_t z; /* In units of words or argument slots.	*/
  
        switch ((*p_arg)->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:
  	case FFI_TYPE_POINTER:
! 	  z = 1;
! 	  *p_argv = (void *)argp;
  	  break;
! 		  
  	case FFI_TYPE_FLOAT:
! 	  z = 1;
! 	  /* Convert argument back to float in place from the saved value */
! 	  if (fp_reg_num < 8) {
! 	      *(float *)argp = args -> fp_regs[fp_reg_num++];
! 	  } else {
! 	      *(float *)argp = *(double *)argp;
! 	  }
! 	  *p_argv = (void *)argp;
  	  break;
  
  	case FFI_TYPE_DOUBLE:
! 	  z = 1;
! 	  if (fp_reg_num < 8) {
! 	      *p_argv = args -> fp_regs + fp_reg_num++;
! 	  } else {
! 	      *p_argv = (void *)argp;
! 	  }
  	  break;
  
  	case FFI_TYPE_STRUCT:
  	  {
! 	      size_t sz = (*p_arg)->size;
! 	      unsigned short element_type;
!               z = ((*p_arg)->size + FFI_SIZEOF_ARG - 1)/FFI_SIZEOF_ARG;
! 	      if (is_homogeneous_fp_aggregate(*p_arg, 8, &element_type)) {
! 		int nelements = sz/float_type_size(element_type);
! 		if (nelements + fp_reg_num >= 8) {
! 		  /* hard case NYI.	*/
! 		  abort();
! 		}
! 		if (element_type == FFI_TYPE_DOUBLE) {
! 	          *p_argv = args -> fp_regs + fp_reg_num;
! 		  fp_reg_num += nelements;
! 		  break;
! 		}
! 		if (element_type == FFI_TYPE_FLOAT) {
! 		  int j;
! 		  for (j = 0; j < nelements; ++ j) {
! 		     ((float *)argp)[j] = args -> fp_regs[fp_reg_num + j];
  		  }
! 	          *p_argv = (void *)argp;
! 		  fp_reg_num += nelements;
! 		  break;
! 		}
! 		abort();  /* Other fp types NYI */
  	      }
  	  }
  	  break;
  
  	default:
! 	  FFI_ASSERT(0);
  	}
- 
-       argp += z;
-       p_argv++;
- 
      }
-   
-   return;
- }
- 
- 
- /* Fill in a closure to refer to the specified fun and user_data.	*/
- /* cif specifies the argument and result types for fun.			*/
- /* the cif must already be prep'ed */
- 
- /* The layout of a function descriptor.  A C function pointer really 	*/
- /* points to one of these.						*/
- typedef struct ia64_fd_struct {
-     void *code_pointer;
-     void *gp;
- } ia64_fd;
  
! ffi_status
! ffi_prep_closure (ffi_closure* closure,
! 		  ffi_cif* cif,
! 		  void (*fun)(ffi_cif*,void*,void**,void*),
! 		  void *user_data)
! {
!   struct ffi_ia64_trampoline_struct *tramp =
!     (struct ffi_ia64_trampoline_struct *) (closure -> tramp);
!   ia64_fd *fd = (ia64_fd *)(void *)ffi_closure_UNIX;
! 
!   FFI_ASSERT (cif->abi == FFI_UNIX);
! 
!   tramp -> code_pointer = fd -> code_pointer;
!   tramp -> real_gp = fd -> gp;
!   tramp -> fake_gp = closure;
!   closure->cif  = cif;
!   closure->user_data = user_data;
!   closure->fun  = fun;
  
!   return FFI_OK;
  }
- 
- 
--- 29,562 ----
  
  #include <stdlib.h>
  #include <stdbool.h>
+ #include <float.h>
  
  #include "ia64_flags.h"
  
! /* A 64-bit pointer value.  In LP64 mode, this is effectively a plain
!    pointer.  In ILP32 mode, it's a pointer that's been extended to 
!    64 bits by "addp4".  */
! typedef void *PTR64 __attribute__((mode(DI)));
  
! /* Memory image of fp register contents.  This is the implementation
!    specific format used by ldf.fill/stf.spill.  All we care about is
!    that it wants a 16 byte aligned slot.  */
! typedef struct
! {
!   UINT64 x[2] __attribute__((aligned(16)));
! } fpreg;
  
! 
! /* The stack layout given to ffi_call_unix and ffi_closure_unix_inner.  */
! 
! struct ia64_args
! {
!   fpreg fp_regs[8];	/* Contents of 8 fp arg registers.  */
!   UINT64 gp_regs[8];	/* Contents of 8 gp arg registers.  */
!   UINT64 other_args[];	/* Arguments passed on stack, variable size.  */
  };
  
! 
! /* Adjust ADDR, a pointer to an 8 byte slot, to point to the low LEN bytes.  */
! 
! static inline void *
! endian_adjust (void *addr, size_t len)
  {
! #ifdef __BIG_ENDIAN__
!   return addr + (8 - len);
! #else
!   return addr;
  #endif
  }
  
! /* Store VALUE to ADDR in the current cpu implementation's fp spill format.  */
  
! static inline void
! stf_spill(fpreg *addr, __float80 value)
! {
!   asm ("stf.spill %0 = %1%P0" : "=m" (*addr) : "f"(value));
! }
  
! /* Load a value from ADDR, which is in the current cpu implementation's
!    fp spill format.  */
  
! static inline __float80
! ldf_fill(fpreg *addr)
! {
!   __float80 ret;
!   asm ("ldf.fill %0 = %1%P1" : "=f"(ret) : "m"(*addr));
!   return ret;
! }
  
! /* Return the size of the C type associated with with TYPE.  Which will
!    be one of the FFI_IA64_TYPE_HFA_* values.  */
  
! static size_t
! hfa_type_size (int type)
! {
!   switch (type)
      {
!     case FFI_IA64_TYPE_HFA_FLOAT:
!       return sizeof(float);
!     case FFI_IA64_TYPE_HFA_DOUBLE:
!       return sizeof(double);
!     case FFI_IA64_TYPE_HFA_LDOUBLE:
!       return sizeof(__float80);
!     default:
!       abort ();
      }
! }
  
! /* Load from ADDR a value indicated by TYPE.  Which will be one of
!    the FFI_IA64_TYPE_HFA_* values.  */
  
! static __float80
! hfa_type_load (int type, void *addr)
  {
!   switch (type)
!     {
!     case FFI_IA64_TYPE_HFA_FLOAT:
!       return *(float *) addr;
!     case FFI_IA64_TYPE_HFA_DOUBLE:
!       return *(double *) addr;
!     case FFI_IA64_TYPE_HFA_LDOUBLE:
!       return *(__float80 *) addr;
!     default:
!       abort ();
!     }
! }
  
! /* Load VALUE into ADDR as indicated by TYPE.  Which will be one of
!    the FFI_IA64_TYPE_HFA_* values.  */
! 
! static void
! hfa_type_store (int type, void *addr, __float80 value)
! {
!   switch (type)
      {
!     case FFI_IA64_TYPE_HFA_FLOAT:
!       *(float *) addr = value;
!       break;
!     case FFI_IA64_TYPE_HFA_DOUBLE:
!       *(double *) addr = value;
!       break;
!     case FFI_IA64_TYPE_HFA_LDOUBLE:
!       *(__float80 *) addr = value;
!       break;
!     default:
!       abort ();
!     }
! }
  
! /* Is TYPE a struct containing floats, doubles, or extended doubles,
!    all of the same fp type?  If so, return the element type.  Return
!    FFI_TYPE_VOID if not.  */
  
! static int
! hfa_element_type (ffi_type *type, int nested)
! {
!   int element = FFI_TYPE_VOID;
  
!   switch (type->type)
!     {
!     case FFI_TYPE_FLOAT:
!       /* We want to return VOID for raw floating-point types, but the
! 	 synthetic HFA type if we're nested within an aggregate.  */
!       if (nested)
! 	element = FFI_IA64_TYPE_HFA_FLOAT;
!       break;
  
!     case FFI_TYPE_DOUBLE:
!       /* Similarly.  */
!       if (nested)
! 	element = FFI_IA64_TYPE_HFA_DOUBLE;
!       break;
  
!     case FFI_TYPE_LONGDOUBLE:
!       /* Similarly, except that that HFA is true for double extended,
! 	 but not quad precision.  Both have sizeof == 16, so tell the
! 	 difference based on the precision.  */
!       if (LDBL_MANT_DIG == 64 && nested)
! 	element = FFI_IA64_TYPE_HFA_LDOUBLE;
!       break;
! 
!     case FFI_TYPE_STRUCT:
!       {
! 	ffi_type **ptr = &type->elements[0];
! 
! 	for (ptr = &type->elements[0]; *ptr ; ptr++)
  	  {
! 	    int sub_element = hfa_element_type (*ptr, 1);
! 	    if (sub_element == FFI_TYPE_VOID)
! 	      return FFI_TYPE_VOID;
  
! 	    if (element == FFI_TYPE_VOID)
! 	      element = sub_element;
! 	    else if (element != sub_element)
! 	      return FFI_TYPE_VOID;
! 	  }
!       }
!       break;
  
!     default:
!       return FFI_TYPE_VOID;
      }
! 
!   return element;
  }
  
! 
! /* Perform machine dependent cif processing. */
! 
  ffi_status
  ffi_prep_cif_machdep(ffi_cif *cif)
  {
!   int flags;
  
!   /* Adjust cif->bytes to include space for the bits of the ia64_args frame
!      that preceeds the integer register portion.  The estimate that the 
!      generic bits did for the argument space required is good enough for the
!      integer component.  */
!   cif->bytes += offsetof(struct ia64_args, gp_regs[0]);
    if (cif->bytes < sizeof(struct ia64_args))
      cif->bytes = sizeof(struct ia64_args);
  
!   /* Set the return type flag. */
!   flags = cif->rtype->type;
    switch (cif->rtype->type)
      {
!     case FFI_TYPE_LONGDOUBLE:
!       /* Leave FFI_TYPE_LONGDOUBLE as meaning double extended precision,
! 	 and encode quad precision as a two-word integer structure.  */
!       if (LDBL_MANT_DIG != 64)
! 	flags = FFI_IA64_TYPE_SMALL_STRUCT | (16 << 8);
        break;
  
      case FFI_TYPE_STRUCT:
        {
!         size_t size = cif->rtype->size;
!   	int hfa_type = hfa_element_type (cif->rtype, 0);
  
! 	if (hfa_type != FFI_TYPE_VOID)
! 	  {
! 	    size_t nelts = size / hfa_type_size (hfa_type);
! 	    if (nelts <= 8)
! 	      flags = hfa_type | (size << 8);
  	  }
! 	else
! 	  {
! 	    if (size <= 32)
! 	      flags = FFI_IA64_TYPE_SMALL_STRUCT | (size << 8);
  	  }
        }
        break;
  
      default:
        break;
      }
!   cif->flags = flags;
! 
    return FFI_OK;
  }
  
! extern int ffi_call_unix (struct ia64_args *, PTR64, void (*)(), UINT64);
  
  void
  ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
  {
!   struct ia64_args *stack;
!   long i, avn, gpcount, fpcount;
!   ffi_type **p_arg;
  
!   FFI_ASSERT (cif->abi == FFI_UNIX);
! 
!   /* If we have no spot for a return value, make one.  */
!   if (rvalue == NULL && cif->rtype->type != FFI_TYPE_VOID)
!     rvalue = alloca (cif->rtype->size);
      
!   /* Allocate the stack frame.  */
!   stack = alloca (cif->bytes);
! 
!   gpcount = fpcount = 0;
!   avn = cif->nargs;
!   for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++)
      {
!       switch ((*p_arg)->type)
! 	{
! 	case FFI_TYPE_SINT8:
! 	  stack->gp_regs[gpcount++] = *(SINT8 *)avalue[i];
! 	  break;
! 	case FFI_TYPE_UINT8:
! 	  stack->gp_regs[gpcount++] = *(UINT8 *)avalue[i];
! 	  break;
! 	case FFI_TYPE_SINT16:
! 	  stack->gp_regs[gpcount++] = *(SINT16 *)avalue[i];
! 	  break;
! 	case FFI_TYPE_UINT16:
! 	  stack->gp_regs[gpcount++] = *(UINT16 *)avalue[i];
! 	  break;
! 	case FFI_TYPE_SINT32:
! 	  stack->gp_regs[gpcount++] = *(SINT32 *)avalue[i];
! 	  break;
! 	case FFI_TYPE_UINT32:
! 	  stack->gp_regs[gpcount++] = *(UINT32 *)avalue[i];
! 	  break;
! 	case FFI_TYPE_SINT64:
! 	case FFI_TYPE_UINT64:
! 	  stack->gp_regs[gpcount++] = *(UINT64 *)avalue[i];
! 	  break;
  
! 	case FFI_TYPE_POINTER:
! 	  stack->gp_regs[gpcount++] = (UINT64)(PTR64) *(void **)avalue[i];
! 	  break;
! 
! 	case FFI_TYPE_FLOAT:
! 	  if (gpcount < 8 && fpcount < 8)
! 	    stf_spill (&stack->fp_regs[fpcount++], *(float *)avalue[i]);
! 	  stack->gp_regs[gpcount++] = *(UINT32 *)avalue[i];
! 	  break;
! 
! 	case FFI_TYPE_DOUBLE:
! 	  if (gpcount < 8 && fpcount < 8)
! 	    stf_spill (&stack->fp_regs[fpcount++], *(double *)avalue[i]);
! 	  stack->gp_regs[gpcount++] = *(UINT64 *)avalue[i];
! 	  break;
! 
! 	case FFI_TYPE_LONGDOUBLE:
! 	  if (gpcount & 1)
! 	    gpcount++;
! 	  if (LDBL_MANT_DIG == 64 && gpcount < 8 && fpcount < 8)
! 	    stf_spill (&stack->fp_regs[fpcount++], *(__float80 *)avalue[i]);
! 	  memcpy (&stack->gp_regs[gpcount], avalue[i], 16);
! 	  gpcount += 2;
! 	  break;
! 
! 	case FFI_TYPE_STRUCT:
! 	  {
! 	    size_t size = (*p_arg)->size;
! 	    size_t align = (*p_arg)->alignment;
! 	    int hfa_type = hfa_element_type (*p_arg, 0);
! 
! 	    FFI_ASSERT (align <= 16);
! 	    if (align == 16 && (gpcount & 1))
! 	      gpcount++;
! 
! 	    if (hfa_type != FFI_TYPE_VOID)
! 	      {
! 		size_t hfa_size = hfa_type_size (hfa_type);
! 		size_t offset = 0;
! 		size_t gp_offset = gpcount * 8;
! 
! 		while (fpcount < 8
! 		       && offset < size
! 		       && gp_offset < 8 * 8)
! 		  {
! 		    stf_spill (&stack->fp_regs[fpcount],
! 			       hfa_type_load (hfa_type, avalue[i] + offset));
! 		    offset += hfa_size;
! 		    gp_offset += hfa_size;
! 		    fpcount += 1;
! 		  }
! 	      }
! 
! 	    memcpy (&stack->gp_regs[gpcount], avalue[i], size);
! 	    gpcount += (size + 7) / 8;
! 	  }
! 	  break;
! 
! 	default:
! 	  abort ();
! 	}
      }
  
!   ffi_call_unix (stack, rvalue, fn, cif->flags);
! }
  
! /* Closures represent a pair consisting of a function pointer, and
!    some user data.  A closure is invoked by reinterpreting the closure
!    as a function pointer, and branching to it.  Thus we can make an
!    interpreted function callable as a C function: We turn the
!    interpreter itself, together with a pointer specifying the
!    interpreted procedure, into a closure.
  
!    For IA64, function pointer are already pairs consisting of a code
!    pointer, and a gp pointer.  The latter is needed to access global
!    variables.  Here we set up such a pair as the first two words of
!    the closure (in the "trampoline" area), but we replace the gp
!    pointer with a pointer to the closure itself.  We also add the real
!    gp pointer to the closure.  This allows the function entry code to
!    both retrieve the user data, and to restire the correct gp pointer.  */
  
! extern void ffi_closure_unix ();
  
! ffi_status
! ffi_prep_closure (ffi_closure* closure,
! 		  ffi_cif* cif,
! 		  void (*fun)(ffi_cif*,void*,void**,void*),
! 		  void *user_data)
  {
!   /* The layout of a function descriptor.  A C function pointer really 
!      points to one of these.  */
!   struct ia64_fd
!   {
!     UINT64 code_pointer;
!     UINT64 gp;
!   };
  
!   struct ffi_ia64_trampoline_struct
!   {
!     UINT64 code_pointer;	/* Pointer to ffi_closure_unix.  */
!     UINT64 fake_gp;		/* Pointer to closure, installed as gp.  */
!     UINT64 real_gp;		/* Real gp value.  */
!   };
  
!   struct ffi_ia64_trampoline_struct *tramp;
!   struct ia64_fd *fd;
  
!   FFI_ASSERT (cif->abi == FFI_UNIX);
  
!   tramp = (struct ffi_ia64_trampoline_struct *)closure->tramp;
!   fd = (struct ia64_fd *)(void *)ffi_closure_unix;
  
!   tramp->code_pointer = fd->code_pointer;
!   tramp->real_gp = fd->gp;
!   tramp->fake_gp = (UINT64)(PTR64)closure;
!   closure->cif = cif;
!   closure->user_data = user_data;
!   closure->fun = fun;
  
!   return FFI_OK;
  }
  
! 
! UINT64
! ffi_closure_unix_inner (ffi_closure *closure, struct ia64_args *stack,
! 			void *rvalue, void *r8)
  {
!   ffi_cif *cif;
!   void **avalue;
!   ffi_type **p_arg;
!   long i, avn, gpcount, fpcount;
  
+   cif = closure->cif;
    avn = cif->nargs;
!   avalue = alloca (avn * sizeof (void *));
  
!   /* If the structure return value is passed in memory get that location
!      from r8 so as to pass the value directly back to the caller.  */
!   if (cif->flags == FFI_TYPE_STRUCT)
!     rvalue = r8;
  
+   gpcount = fpcount = 0;
+   for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++)
+     {
        switch ((*p_arg)->type)
  	{
  	case FFI_TYPE_SINT8:
  	case FFI_TYPE_UINT8:
+ 	  avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], 1);
+ 	  break;
  	case FFI_TYPE_SINT16:
  	case FFI_TYPE_UINT16:
+ 	  avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], 2);
+ 	  break;
  	case FFI_TYPE_SINT32:
  	case FFI_TYPE_UINT32:
+ 	  avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], 4);
+ 	  break;
  	case FFI_TYPE_SINT64:
  	case FFI_TYPE_UINT64:
+ 	  avalue[i] = &stack->gp_regs[gpcount++];
+ 	  break;
  	case FFI_TYPE_POINTER:
! 	  avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], sizeof(void*));
  	  break;
! 
  	case FFI_TYPE_FLOAT:
! 	  if (gpcount < 8 && fpcount < 8)
! 	    {
! 	      void *addr = &stack->fp_regs[fpcount++];
! 	      avalue[i] = addr;
! 	      *(float *)addr = ldf_fill (addr);
! 	    }
! 	  else
! 	    avalue[i] = endian_adjust(&stack->gp_regs[gpcount], 4);
! 	  gpcount++;
  	  break;
  
  	case FFI_TYPE_DOUBLE:
! 	  if (gpcount < 8 && fpcount < 8)
! 	    {
! 	      void *addr = &stack->fp_regs[fpcount++];
! 	      avalue[i] = addr;
! 	      *(double *)addr = ldf_fill (addr);
! 	    }
! 	  else
! 	    avalue[i] = &stack->gp_regs[gpcount];
! 	  gpcount++;
! 	  break;
! 
! 	case FFI_TYPE_LONGDOUBLE:
! 	  if (gpcount & 1)
! 	    gpcount++;
! 	  if (LDBL_MANT_DIG == 64 && gpcount < 8 && fpcount < 8)
! 	    {
! 	      void *addr = &stack->fp_regs[fpcount++];
! 	      avalue[i] = addr;
! 	      *(__float80 *)addr = ldf_fill (addr);
! 	    }
! 	  else
! 	    avalue[i] = &stack->gp_regs[gpcount];
! 	  gpcount += 2;
  	  break;
  
  	case FFI_TYPE_STRUCT:
  	  {
! 	    size_t size = (*p_arg)->size;
! 	    size_t align = (*p_arg)->alignment;
! 	    int hfa_type = hfa_element_type (*p_arg, 0);
! 
! 	    FFI_ASSERT (align <= 16);
! 	    if (align == 16 && (gpcount & 1))
! 	      gpcount++;
! 
! 	    if (hfa_type != FFI_TYPE_VOID)
! 	      {
! 		size_t hfa_size = hfa_type_size (hfa_type);
! 		size_t offset = 0;
! 		size_t gp_offset = gpcount * 8;
! 		void *addr = alloca (size);
! 
! 		avalue[i] = addr;
! 
! 		while (fpcount < 8
! 		       && offset < size
! 		       && gp_offset < 8 * 8)
! 		  {
! 		    hfa_type_store (hfa_type, addr + offset, 
! 				    ldf_fill (&stack->fp_regs[fpcount]));
! 		    offset += hfa_size;
! 		    gp_offset += hfa_size;
! 		    fpcount += 1;
  		  }
! 
! 		if (offset < size)
! 		  memcpy (addr + offset, (char *)stack->gp_regs + gp_offset,
! 			  size - offset);
  	      }
+ 	    else
+ 	      avalue[i] = &stack->gp_regs[gpcount];
+ 
+ 	    gpcount += (size + 7) / 8;
  	  }
  	  break;
  
  	default:
! 	  abort ();
  	}
      }
  
!   closure->fun (cif, rvalue, avalue, closure->user_data);
  
!   return cif->flags;
  }
diff -Nrcpad gcc-3.4.3/libffi/src/ia64/ffitarget.h gcc-4.0.0/libffi/src/ia64/ffitarget.h
*** gcc-3.4.3/libffi/src/ia64/ffitarget.h	Tue Oct 21 19:07:50 2003
--- gcc-4.0.0/libffi/src/ia64/ffitarget.h	Fri Dec 31 20:11:17 2004
*************** typedef enum ffi_abi {
*** 45,58 ****
  				/* can be interpreted as a C function	*/
  				/* descriptor:				*/
  
- #ifndef LIBFFI_ASM
- struct ffi_ia64_trampoline_struct {
-     void * code_pointer;	/* Pointer to ffi_closure_UNIX	*/
-     void * fake_gp;		/* Pointer to closure, installed as gp	*/
-     void * real_gp;		/* Real gp value, reinstalled by 	*/
- 				/* ffi_closure_UNIX.			*/
- };
- #endif
- 
  #endif
  
--- 45,49 ----
diff -Nrcpad gcc-3.4.3/libffi/src/ia64/ia64_flags.h gcc-4.0.0/libffi/src/ia64/ia64_flags.h
*** gcc-3.4.3/libffi/src/ia64/ia64_flags.h	Fri Feb 25 19:13:44 2000
--- gcc-4.0.0/libffi/src/ia64/ia64_flags.h	Fri Dec 31 20:11:17 2004
***************
*** 25,62 ****
     OTHER DEALINGS IN THE SOFTWARE.
     ----------------------------------------------------------------------- */
  
  
! /* Homogeneous Floating Point Aggregates (HFAs) which are returned	*/
! /* in FP registers.  The least significant bits specify the size in 	*/
! /* words.								*/
! #define FFI_IS_FLOAT_FP_AGGREGATE 0x1000
! #define FFI_IS_DOUBLE_FP_AGGREGATE 0x0800
! #define FLOAT_FP_AGGREGATE_BIT 12
! #define DOUBLE_FP_AGGREGATE_BIT 11
! 
! /* Small structures containing N words.  If N=1, they are returned	*/
! /* as though they were integers.					*/
! #define FFI_IS_SMALL_STRUCT2	0x40 /* Struct > 8, <=16 bytes	*/
! #define FFI_IS_SMALL_STRUCT3	0x41 /* Struct > 16 <= 24 bytes	*/
! #define FFI_IS_SMALL_STRUCT4	0x42 /* Struct > 24, <=32 bytes	*/
! 
! /* Flag values identifying particularly simple cases, which are 	*/
! /* handled specially.  We treat functions as simple if they take all	*/
! /* arguments can be passed as 32 or 64 bit integer quantities, there is	*/
! /* either no return value or it can be treated as a 64bit integer, and	*/
! /* if there are at most 2 arguments.					*/
! /* This is OR'ed with the normal flag values.				*/
! #define FFI_SIMPLE_V 0x10000	/* () -> X	*/
! #define FFI_SIMPLE_I 0x20000	/* (int) -> X	*/
! #define FFI_SIMPLE_L 0x30000	/* (long) -> X	*/
! #define FFI_SIMPLE_II 0x40000	/* (int,int) -> X	*/
! #define FFI_SIMPLE_IL 0x50000	/* (int,long) -> X	*/
! #define FFI_SIMPLE_LI 0x60000	/* (long,int) -> X	*/
! #define FFI_SIMPLE_LL 0x70000	/* (long,long) -> X	*/
! 
! /* Mask for all of the FFI_SIMPLE bits:	*/
! #define FFI_SIMPLE 0xf0000
  
! /* An easy way to build FFI_SIMPLE flags from FFI_SIMPLE_V:	*/
! #define FFI_ADD_LONG_ARG(flag) (((flag) << 1) | 0x10000)
! #define FFI_ADD_INT_ARG(flag) ((flag) << 1)
--- 25,39 ----
     OTHER DEALINGS IN THE SOFTWARE.
     ----------------------------------------------------------------------- */
  
+ /* "Type" codes used between assembly and C.  When used as a part of
+    a cfi->flags value, the low byte will be these extra type codes,
+    and bits 8-31 will be the actual size of the type.  */
  
! /* Small structures containing N words in integer registers.  */
! #define FFI_IA64_TYPE_SMALL_STRUCT	(FFI_TYPE_LAST + 1)
  
! /* Homogeneous Floating Point Aggregates (HFAs) which are returned
!    in FP registers.  */
! #define FFI_IA64_TYPE_HFA_FLOAT		(FFI_TYPE_LAST + 2)
! #define FFI_IA64_TYPE_HFA_DOUBLE	(FFI_TYPE_LAST + 3)
! #define FFI_IA64_TYPE_HFA_LDOUBLE	(FFI_TYPE_LAST + 4)
diff -Nrcpad gcc-3.4.3/libffi/src/ia64/unix.S gcc-4.0.0/libffi/src/ia64/unix.S
*** gcc-3.4.3/libffi/src/ia64/unix.S	Thu Jun 10 08:19:58 2004
--- gcc-4.0.0/libffi/src/ia64/unix.S	Fri Dec 31 20:11:17 2004
***************
*** 33,327 ****
  #include <ffi.h>
  #include "ia64_flags.h"
  
- /* parameters:	*/
- #define callback	in0
- #define ecifp		in1
- #define bytes		in2
- #define flags		in3
- #define raddr		in4
- #define fn		in5
- 
- #define FLOAT_SZ	8 /* in-memory size of fp operands	*/
- 
- /* Allocate an ia64_args structure on the stack; call ffi_prep_args	*/
- /* to fill it in with argument values; copy those to the real 		*/
- /* registers, leaving overflow arguments on the stack.  Then call fn	*/
- /* and move the result from registers into *raddr.			*/
  	.pred.safe_across_calls p1-p5,p16-p63
  .text
          .align 16
!         .global ffi_call_unix
!         .proc ffi_call_unix
  ffi_call_unix:
  	.prologue
! 	.save	ar.pfs,r38 /* loc0 */
! 	alloc   loc0=ar.pfs,6,6,8,0
! 	.save	rp,loc1
! 	mov 	loc1=b0;
! 	.vframe	loc5
! 	mov	loc5=sp;
  	.body
! 	sub	sp=sp,bytes
! 	mov	loc4=r1		/* Save gp 	*/
! 	ld8	r8=[callback],8	/* code address of callback	*/
  	;;
! 	mov 	out0=sp
! 	mov	out1=ecifp
! 	mov	out2=bytes
! 	ld8	r1=[callback]	/* Set up gp for callback.  Unnecessary? */
! 	mov	b6=r8
  	;;
! 	br.call.sptk.many b0 = b6	/* call ffi_prep_args		*/
! 	cmp.eq	p6,p0=0,r8		/* r8 nonzero ==> need fp regs	*/
!  	;;
! (p6)	add	loc2=32+8*FLOAT_SZ,sp
! (p6)	br.cond.dptk.many	fp_done
! 	;;	/* Quiets warning; needed?	*/
! 	add	loc2=32,sp
! 	add	loc3=32+FLOAT_SZ,sp
  	;;
! 	ldfd	f8=[loc2],2*FLOAT_SZ
! 	ldfd	f9=[loc3],2*FLOAT_SZ
  	;;
! 	ldfd	f10=[loc2],2*FLOAT_SZ
! 	ldfd	f11=[loc3],2*FLOAT_SZ
  	;;
! 	ldfd	f12=[loc2],2*FLOAT_SZ
! 	ldfd	f13=[loc3],2*FLOAT_SZ
  	;;
! 	ldfd	f14=[loc2],2*FLOAT_SZ
! 	ldfd	f15=[loc3]
  	;;
! fp_done:
! 	add	r9=16,sp	/* Pointer to r8_contents	*/
! 	/* loc2 points at first integer register value.  */
! 	add	loc3=8,loc2
  	;;
! 	ld8	r8=[r9]		/* Just in case we return large struct */
! 	ld8	out0=[loc2],16
! 	ld8	out1=[loc3],16
  	;;
! 	ld8	out2=[loc2],16
! 	ld8	out3=[loc3],16
  	;;
! 	ld8	out4=[loc2],16
! 	ld8	out5=[loc3],16
  	;;
! 	ld8	out6=[loc2]
! 	ld8	out7=[loc3]
!         /* Set sp to 16 bytes below the first stack parameter.  This    */
!         /* is the value currently in loc2.                              */
! 	mov	sp=loc2
! 	
! 	ld8 	r8=[fn],8
  	;;
! 	ld8	r1=[fn]		/* Set up gp */
! 	mov	b6=r8;;
! 	br.call.sptk.many b0 = b6	/* call fn	*/
! 	
! 	/* Handle return value. */
! 	cmp.eq	p6,p0=0,raddr
! 	cmp.eq	p7,p0=FFI_TYPE_INT,flags
! 	cmp.eq	p10,p0=FFI_IS_SMALL_STRUCT2,flags
! 	cmp.eq	p11,p0=FFI_IS_SMALL_STRUCT3,flags
! 	cmp.eq	p12,p0=FFI_IS_SMALL_STRUCT4,flags
  	;;
! (p6) 	br.cond.dpnt.few done		/* Dont copy ret values if raddr = 0 */
! (p7)	br.cond.dptk.few copy1
! (p10)	br.cond.dpnt.few copy2
! (p11)	br.cond.dpnt.few copy3
! (p12)	br.cond.dpnt.few copy4
! 	cmp.eq	p8,p0=FFI_TYPE_FLOAT,flags
! 	cmp.eq	p9,p0=FFI_TYPE_DOUBLE,flags
! 	tbit.nz	p6,p0=flags,FLOAT_FP_AGGREGATE_BIT
! 	tbit.nz	p7,p0=flags,DOUBLE_FP_AGGREGATE_BIT
  	;;
! (p8)	stfs	[raddr]=f8
! (p9)	stfd	[raddr]=f8
  	;;
- 	.label_state 1
- (p6)	br.cond.dpnt.few handle_float_hfa
- (p7)	br.cond.dpnt.few handle_double_hfa
- 	br done
  
! copy4:
! 	add	loc3=24,raddr
  	;;
! 	st8	[loc3]=r11
! copy3:
! 	add	loc3=16,raddr
  	;;
! 	st8	[loc3]=r10
! copy2:
! 	add	loc3=8,raddr
  	;;
- 	st8	[loc3]=r9
- copy1:
- 	st8	[raddr]=r8
- 	/* In the big struct case, raddr was passed as an argument.	*/
- 	/* In the void case there was nothing to do.			*/
  
! done:
! 	mov	r1=loc4		/* Restore gp	*/
  	mov	ar.pfs = loc0
  	mov	b0 = loc1
! 	.restore sp
! 	mov	sp = loc5
  	br.ret.sptk.many b0
  
! handle_double_hfa:
! 	.body
! 	.copy_state 1
! 	/* Homogeneous floating point array of doubles is returned in	*/
! 	/* registers f8-f15.  Save one at a time to return area.	*/
! 	and	flags=0xf,flags	/* Retrieve size	*/
  	;;
! 	cmp.eq	p6,p0=2,flags
! 	cmp.eq	p7,p0=3,flags
! 	cmp.eq	p8,p0=4,flags
! 	cmp.eq	p9,p0=5,flags
! 	cmp.eq	p10,p0=6,flags
! 	cmp.eq	p11,p0=7,flags
! 	cmp.eq	p12,p0=8,flags
  	;;
! (p6)	br.cond.dptk.few	dhfa2
! (p7)	br.cond.dptk.few	dhfa3
! (p8)	br.cond.dptk.few	dhfa4
! (p9)	br.cond.dptk.few	dhfa5
! (p10)	br.cond.dptk.few	dhfa6
! (p11)	br.cond.dptk.few	dhfa7
! dhfa8:	add 	loc3=7*8,raddr
  	;;
! 	stfd	[loc3]=f15
! dhfa7:	add 	loc3=6*8,raddr
  	;;
! 	stfd	[loc3]=f14
! dhfa6:	add 	loc3=5*8,raddr
  	;;
! 	stfd	[loc3]=f13
! dhfa5:	add 	loc3=4*8,raddr
  	;;
! 	stfd	[loc3]=f12
! dhfa4:	add 	loc3=3*8,raddr
  	;;
! 	stfd	[loc3]=f11
! dhfa3:	add 	loc3=2*8,raddr
  	;;
! 	stfd	[loc3]=f10
! dhfa2:	add 	loc3=1*8,raddr
  	;;
- 	stfd	[loc3]=f9
- 	stfd	[raddr]=f8
- 	br	done
  
! handle_float_hfa:
! 	/* Homogeneous floating point array of floats is returned in	*/
! 	/* registers f8-f15.  Save one at a time to return area.	*/
! 	and	flags=0xf,flags	/* Retrieve size	*/
  	;;
! 	cmp.eq	p6,p0=2,flags
! 	cmp.eq	p7,p0=3,flags
! 	cmp.eq	p8,p0=4,flags
! 	cmp.eq	p9,p0=5,flags
! 	cmp.eq	p10,p0=6,flags
! 	cmp.eq	p11,p0=7,flags
! 	cmp.eq	p12,p0=8,flags
  	;;
! (p6)	br.cond.dptk.few	shfa2
! (p7)	br.cond.dptk.few	shfa3
! (p8)	br.cond.dptk.few	shfa4
! (p9)	br.cond.dptk.few	shfa5
! (p10)	br.cond.dptk.few	shfa6
! (p11)	br.cond.dptk.few	shfa7
! shfa8:	add 	loc3=7*4,raddr
  	;;
! 	stfd	[loc3]=f15
! shfa7:	add 	loc3=6*4,raddr
  	;;
! 	stfd	[loc3]=f14
! shfa6:	add 	loc3=5*4,raddr
  	;;
! 	stfd	[loc3]=f13
! shfa5:	add 	loc3=4*4,raddr
  	;;
! 	stfd	[loc3]=f12
! shfa4:	add 	loc3=3*4,raddr
  	;;
! 	stfd	[loc3]=f11
! shfa3:	add 	loc3=2*4,raddr
  	;;
! 	stfd	[loc3]=f10
! shfa2:	add 	loc3=1*4,raddr
  	;;
! 	stfd	[loc3]=f9
! 	stfd	[raddr]=f8
! 	br	done
  
!         .endp ffi_call_unix
  
  
! 	.pred.safe_across_calls p1-p5,p16-p63
! .text
!         .align 16
!         .global ffi_closure_UNIX
!         .proc ffi_closure_UNIX
! ffi_closure_UNIX:
! 	.prologue
! 	.save 	ar.pfs,r40 /* loc0 */
! 	alloc   loc0=ar.pfs,8,3,2,0
! 	.save	rp,loc1
! 	mov	loc1=b0
! 	.vframe	loc2
! 	mov	loc2=sp
! 	/* Retrieve closure pointer and real gp.	*/
! 	mov	out0=gp
! 	add	gp=16,gp
  	;;
! 	ld8	gp=[gp]
! 	/* Reserve a structia64_args on the stack such that arguments	*/
! 	/* past the first 8 are automatically placed in the right	*/
! 	/* slot.  Note that when we start the sp points at 2 8-byte	*/
! 	/* scratch words, followed by the extra arguments.		*/
! #	define BASIC_ARGS_SZ (8*FLOAT_SZ+8*8+2*8)
! #	define FIRST_FP_OFFSET (4*8)
! 	add	r14=-(BASIC_ARGS_SZ-FIRST_FP_OFFSET),sp
! 	add	r15=-(BASIC_ARGS_SZ-FIRST_FP_OFFSET-FLOAT_SZ),sp
! 	add	sp=-BASIC_ARGS_SZ,sp
! 	/* r14 points to fp_regs[0], r15 points to fp_regs[1]	*/
  	;;
! 	stfd	[r14]=f8,2*FLOAT_SZ
! 	stfd	[r15]=f9,2*FLOAT_SZ
  	;;
! 	stfd	[r14]=f10,2*FLOAT_SZ
! 	stfd	[r15]=f11,2*FLOAT_SZ
  	;;
! 	stfd	[r14]=f12,2*FLOAT_SZ
! 	stfd	[r15]=f13,2*FLOAT_SZ
  	;;
! 	stfd	[r14]=f14,2*FLOAT_SZ
! 	stfd	[r15]=f15,FLOAT_SZ+8
  	;;
! 	/* r14 points to first parameter register area, r15 to second. */
! 	st8	[r14]=in0,2*8
! 	st8	[r15]=in1,2*8
  	;;
! 	st8	[r14]=in2,2*8
! 	st8	[r15]=in3,2*8
  	;;
! 	st8	[r14]=in4,2*8
! 	st8	[r15]=in5,2*8
  	;;
! 	st8	[r14]=in6,2*8
! 	st8	[r15]=in7,2*8
! 	/* Call ffi_closure_UNIX_inner */
! 	mov	out1=sp
! 	br.call.sptk.many b0=ffi_closure_UNIX_inner
  	;;
! 	mov	b0=loc1
! 	mov 	ar.pfs=loc0
  	.restore sp
! 	mov	sp=loc2
  	br.ret.sptk.many b0
! 	.endp ffi_closure_UNIX
! 	
  
--- 33,574 ----
  #include <ffi.h>
  #include "ia64_flags.h"
  
  	.pred.safe_across_calls p1-p5,p16-p63
  .text
+ 
+ /* int ffi_call_unix (struct ia64_args *stack, PTR64 rvalue,
+ 		      void (*fn)(), int flags);
+  */
+ 
          .align 16
!         .global	ffi_call_unix
!         .proc	ffi_call_unix
  ffi_call_unix:
  	.prologue
! 	/* Bit o trickiness.  We actually share a stack frame with ffi_call.
! 	   Rely on the fact that ffi_call uses a vframe and don't bother
! 	   tracking one here at all.  */
! 	.fframe	0
! 	.save	ar.pfs, r36 // loc0
! 	alloc   loc0 = ar.pfs, 4, 3, 8, 0
! 	.save	rp, loc1
! 	mov 	loc1 = b0
  	.body
! 	add	r16 = 16, in0
! 	mov	loc2 = gp
! 	mov	r8 = in1
  	;;
! 
! 	/* Load up all of the argument registers.  */
! 	ldf.fill f8 = [in0], 32
! 	ldf.fill f9 = [r16], 32
  	;;
! 	ldf.fill f10 = [in0], 32
! 	ldf.fill f11 = [r16], 32
  	;;
! 	ldf.fill f12 = [in0], 32
! 	ldf.fill f13 = [r16], 32
  	;;
! 	ldf.fill f14 = [in0], 32
! 	ldf.fill f15 = [r16], 24
  	;;
! 	ld8	out0 = [in0], 16
! 	ld8	out1 = [r16], 16
  	;;
! 	ld8	out2 = [in0], 16
! 	ld8	out3 = [r16], 16
  	;;
! 	ld8	out4 = [in0], 16
! 	ld8	out5 = [r16], 16
  	;;
! 	ld8	out6 = [in0]
! 	ld8	out7 = [r16]
  	;;
! 
! 	/* Deallocate the register save area from the stack frame.  */
! 	mov	sp = in0
! 
! 	/* Call the target function.  */
! 	ld8	r16 = [in2], 8
  	;;
! 	ld8	gp = [in2]
! 	mov	b6 = r16
! 	br.call.sptk.many b0 = b6
  	;;
! 
! 	/* Dispatch to handle return value.  */
! 	mov	gp = loc2
! 	zxt1	r16 = in3
  	;;
! 	mov	ar.pfs = loc0
! 	addl	r18 = @ltoffx(.Lst_table), gp
  	;;
! 	ld8.mov	r18 = [r18], .Lst_table
! 	mov	b0 = loc1
  	;;
! 	shladd	r18 = r16, 3, r18
! 	;;
! 	ld8	r17 = [r18]
! 	shr	in3 = in3, 8
! 	;;
! 	add	r17 = r17, r18
! 	;;
! 	mov	b6 = r17
! 	br	b6
  	;;
  
! .Lst_void:
! 	br.ret.sptk.many b0
  	;;
! .Lst_uint8:
! 	zxt1	r8 = r8
  	;;
! 	st8	[in1] = r8
! 	br.ret.sptk.many b0
! 	;;
! .Lst_sint8:
! 	sxt1	r8 = r8
! 	;;
! 	st8	[in1] = r8
! 	br.ret.sptk.many b0
! 	;;
! .Lst_uint16:
! 	zxt2	r8 = r8
! 	;;
! 	st8	[in1] = r8
! 	br.ret.sptk.many b0
! 	;;
! .Lst_sint16:
! 	sxt2	r8 = r8
! 	;;
! 	st8	[in1] = r8
! 	br.ret.sptk.many b0
! 	;;
! .Lst_uint32:
! 	zxt4	r8 = r8
! 	;;
! 	st8	[in1] = r8
! 	br.ret.sptk.many b0
! 	;;
! .Lst_sint32:
! 	sxt4	r8 = r8
! 	;;
! 	st8	[in1] = r8
! 	br.ret.sptk.many b0
! 	;;
! .Lst_int64:
! 	st8	[in1] = r8
! 	br.ret.sptk.many b0
! 	;;
! .Lst_float:
! 	stfs	[in1] = f8
! 	br.ret.sptk.many b0
! 	;;
! .Lst_double:
! 	stfd	[in1] = f8
! 	br.ret.sptk.many b0
! 	;;
! .Lst_ldouble:
! 	stfe	[in1] = f8
! 	br.ret.sptk.many b0
  	;;
  
! .Lst_small_struct:
! 	add	sp = -16, sp
! 	cmp.lt	p6, p0 = 8, in3
! 	cmp.lt	p7, p0 = 16, in3
! 	cmp.lt	p8, p0 = 24, in3
! 	;;
! 	add	r16 = 8, sp
! 	add	r17 = 16, sp
! 	add	r18 = 24, sp
! 	;;
! 	st8	[sp] = r8
! (p6)	st8	[r16] = r9
! 	mov	out0 = in1
! (p7)	st8	[r17] = r10
! (p8)	st8	[r18] = r11
! 	mov	out1 = sp
! 	mov	out2 = in3
! 	br.call.sptk.many b0 = memcpy#
! 	;;
  	mov	ar.pfs = loc0
  	mov	b0 = loc1
! 	mov	gp = loc2
  	br.ret.sptk.many b0
  
! .Lst_hfa_float:
! 	add	r16 = 4, in1
! 	cmp.lt	p6, p0 = 4, in3
  	;;
! 	stfs	[in1] = f8, 8
! (p6)	stfs	[r16] = f9, 8
! 	cmp.lt	p7, p0 = 8, in3
! 	cmp.lt	p8, p0 = 12, in3
  	;;
! (p7)	stfs	[in1] = f10, 8
! (p8)	stfs	[r16] = f11, 8
! 	cmp.lt	p9, p0 = 16, in3
! 	cmp.lt	p10, p0 = 20, in3
  	;;
! (p9)	stfs	[in1] = f12, 8
! (p10)	stfs	[r16] = f13, 8
! 	cmp.lt	p6, p0 = 24, in3
! 	cmp.lt	p7, p0 = 28, in3
  	;;
! (p6)	stfs	[in1] = f14
! (p7)	stfs	[r16] = f15
! 	br.ret.sptk.many b0
  	;;
! 
! .Lst_hfa_double:
! 	add	r16 = 8, in1
! 	cmp.lt	p6, p0 = 8, in3
  	;;
! 	stfd	[in1] = f8, 16
! (p6)	stfd	[r16] = f9, 16
! 	cmp.lt	p7, p0 = 16, in3
! 	cmp.lt	p8, p0 = 24, in3
  	;;
! (p7)	stfd	[in1] = f10, 16
! (p8)	stfd	[r16] = f11, 16
! 	cmp.lt	p9, p0 = 32, in3
! 	cmp.lt	p10, p0 = 40, in3
  	;;
! (p9)	stfd	[in1] = f12, 16
! (p10)	stfd	[r16] = f13, 16
! 	cmp.lt	p6, p0 = 48, in3
! 	cmp.lt	p7, p0 = 56, in3
! 	;;
! (p6)	stfd	[in1] = f14
! (p7)	stfd	[r16] = f15
! 	br.ret.sptk.many b0
  	;;
  
! .Lst_hfa_ldouble:
! 	add	r16 = 16, in1
! 	cmp.lt	p6, p0 = 16, in3
  	;;
! 	stfe	[in1] = f8, 32
! (p6)	stfe	[r16] = f9, 32
! 	cmp.lt	p7, p0 = 32, in3
! 	cmp.lt	p8, p0 = 48, in3
  	;;
! (p7)	stfe	[in1] = f10, 32
! (p8)	stfe	[r16] = f11, 32
! 	cmp.lt	p9, p0 = 64, in3
! 	cmp.lt	p10, p0 = 80, in3
  	;;
! (p9)	stfe	[in1] = f12, 32
! (p10)	stfe	[r16] = f13, 32
! 	cmp.lt	p6, p0 = 96, in3
! 	cmp.lt	p7, p0 = 112, in3
  	;;
! (p6)	stfe	[in1] = f14
! (p7)	stfe	[r16] = f15
! 	br.ret.sptk.many b0
  	;;
! 
!         .endp ffi_call_unix
! 
!         .align 16
!         .global ffi_closure_unix
!         .proc ffi_closure_unix
! 
! #define FRAME_SIZE	(8*16 + 8*8 + 8*16)
! 
! ffi_closure_unix:
! 	.prologue
! 	.save	ar.pfs, r40 // loc0
! 	alloc   loc0 = ar.pfs, 8, 4, 4, 0
! 	.fframe	FRAME_SIZE
! 	add	r12 = -FRAME_SIZE, r12
! 	.save	rp, loc1
! 	mov	loc1 = b0
! 	.save	ar.unat, loc2
! 	mov	loc2 = ar.unat
! 	.body
! 
! 	/* Retrieve closure pointer and real gp.  */
! 	mov	out0 = gp
! 	add	gp = 16, gp
  	;;
! 	ld8	gp = [gp]
! 
! 	/* Spill all of the possible argument registers.  */
! 	add	r16 = 16 + 8*16, sp
! 	add	r17 = 16 + 8*16 + 16, sp
  	;;
! 	stf.spill [r16] = f8, 32
! 	stf.spill [r17] = f9, 32
! 	mov	loc3 = gp
  	;;
! 	stf.spill [r16] = f10, 32
! 	stf.spill [r17] = f11, 32
  	;;
! 	stf.spill [r16] = f12, 32
! 	stf.spill [r17] = f13, 32
! 	;;
! 	stf.spill [r16] = f14, 32
! 	stf.spill [r17] = f15, 24
! 	;;
! 	.mem.offset 0, 0
! 	st8.spill [r16] = in0, 16
! 	.mem.offset 8, 0
! 	st8.spill [r17] = in1, 16
! 	add	out1 = 16 + 8*16, sp
! 	;;
! 	.mem.offset 0, 0
! 	st8.spill [r16] = in2, 16
! 	.mem.offset 8, 0
! 	st8.spill [r17] = in3, 16
! 	add	out2 = 16, sp
! 	;;
! 	.mem.offset 0, 0
! 	st8.spill [r16] = in4, 16
! 	.mem.offset 8, 0
! 	st8.spill [r17] = in5, 16
! 	mov	out3 = r8
! 	;;
! 	.mem.offset 0, 0
! 	st8.spill [r16] = in6
! 	.mem.offset 8, 0
! 	st8.spill [r17] = in7
  
! 	/* Invoke ffi_closure_unix_inner for the hard work.  */
! 	br.call.sptk.many b0 = ffi_closure_unix_inner
! 	;;
  
+ 	/* Dispatch to handle return value.  */
+ 	mov	gp = loc3
+ 	zxt1	r16 = r8
+ 	;;
+ 	addl	r18 = @ltoffx(.Lld_table), gp
+ 	mov	ar.pfs = loc0
+ 	;;
+ 	ld8.mov	r18 = [r18], .Lld_table
+ 	mov	b0 = loc1
+ 	;;
+ 	shladd	r18 = r16, 3, r18
+ 	mov	ar.unat = loc2
+ 	;;
+ 	ld8	r17 = [r18]
+ 	shr	r8 = r8, 8
+ 	;;
+ 	add	r17 = r17, r18
+ 	add	r16 = 16, sp
+ 	;;
+ 	mov	b6 = r17
+ 	br	b6
+ 	;;
+ 	.label_state 1
  
! .Lld_void:
! 	.restore sp
! 	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]
! 	.restore sp
! 	add	sp = FRAME_SIZE, sp
! 	br.ret.sptk.many b0
  	;;
! .Lld_float:
! 	.body
! 	.copy_state 1
! 	ldfs	f8 = [r16]
! 	.restore sp
! 	add	sp = FRAME_SIZE, sp
! 	br.ret.sptk.many b0
  	;;
! .Lld_double:
! 	.body
! 	.copy_state 1
! 	ldfd	f8 = [r16]
! 	.restore sp
! 	add	sp = FRAME_SIZE, sp
! 	br.ret.sptk.many b0
  	;;
! .Lld_ldouble:
! 	.body
! 	.copy_state 1
! 	ldfe	f8 = [r16]
! 	.restore sp
! 	add	sp = FRAME_SIZE, sp
! 	br.ret.sptk.many b0
  	;;
! 
! .Lld_small_struct:
! 	.body
! 	.copy_state 1
! 	add	r17 = 8, r16
! 	cmp.lt	p6, p0 = 8, r8
! 	cmp.lt	p7, p0 = 16, r8
! 	cmp.lt	p8, p0 = 24, r8
  	;;
! 	ld8	r8 = [r16], 16
! (p6)	ld8	r9 = [r17], 16
  	;;
! (p7)	ld8	r10 = [r16]
! (p8)	ld8	r11 = [r17]
  	.restore sp
! 	add	sp = FRAME_SIZE, sp
  	br.ret.sptk.many b0
! 	;;
! 
! .Lld_hfa_float:
! 	.body
! 	.copy_state 1
! 	add	r17 = 4, r16
! 	cmp.lt	p6, p0 = 4, r8
! 	;;
! 	ldfs	f8 = [r16], 8
! (p6)	ldfs	f9 = [r17], 8
! 	cmp.lt	p7, p0 = 8, r8
! 	cmp.lt	p8, p0 = 12, r8
! 	;;
! (p7)	ldfs	f10 = [r16], 8
! (p8)	ldfs	f11 = [r17], 8
! 	cmp.lt	p9, p0 = 16, r8
! 	cmp.lt	p10, p0 = 20, r8
! 	;;
! (p9)	ldfs	f12 = [r16], 8
! (p10)	ldfs	f13 = [r17], 8
! 	cmp.lt	p6, p0 = 24, r8
! 	cmp.lt	p7, p0 = 28, r8
! 	;;
! (p6)	ldfs	f14 = [r16]
! (p7)	ldfs	f15 = [r17]
! 	.restore sp
! 	add	sp = FRAME_SIZE, sp
! 	br.ret.sptk.many b0
! 	;;
  
+ .Lld_hfa_double:
+ 	.body
+ 	.copy_state 1
+ 	add	r17 = 8, r16
+ 	cmp.lt	p6, p0 = 8, r8
+ 	;;
+ 	ldfd	f8 = [r16], 16
+ (p6)	ldfd	f9 = [r17], 16
+ 	cmp.lt	p7, p0 = 16, r8
+ 	cmp.lt	p8, p0 = 24, r8
+ 	;;
+ (p7)	ldfd	f10 = [r16], 16
+ (p8)	ldfd	f11 = [r17], 16
+ 	cmp.lt	p9, p0 = 32, r8
+ 	cmp.lt	p10, p0 = 40, r8
+ 	;;
+ (p9)	ldfd	f12 = [r16], 16
+ (p10)	ldfd	f13 = [r17], 16
+ 	cmp.lt	p6, p0 = 48, r8
+ 	cmp.lt	p7, p0 = 56, r8
+ 	;;
+ (p6)	ldfd	f14 = [r16]
+ (p7)	ldfd	f15 = [r17]
+ 	.restore sp
+ 	add	sp = FRAME_SIZE, sp
+ 	br.ret.sptk.many b0
+ 	;;
+ 
+ .Lld_hfa_ldouble:
+ 	.body
+ 	.copy_state 1
+ 	add	r17 = 16, r16
+ 	cmp.lt	p6, p0 = 16, r8
+ 	;;
+ 	ldfe	f8 = [r16], 32
+ (p6)	ldfe	f9 = [r17], 32
+ 	cmp.lt	p7, p0 = 32, r8
+ 	cmp.lt	p8, p0 = 48, r8
+ 	;;
+ (p7)	ldfe	f10 = [r16], 32
+ (p8)	ldfe	f11 = [r17], 32
+ 	cmp.lt	p9, p0 = 64, r8
+ 	cmp.lt	p10, p0 = 80, r8
+ 	;;
+ (p9)	ldfe	f12 = [r16], 32
+ (p10)	ldfe	f13 = [r17], 32
+ 	cmp.lt	p6, p0 = 96, r8
+ 	cmp.lt	p7, p0 = 112, r8
+ 	;;
+ (p6)	ldfe	f14 = [r16]
+ (p7)	ldfe	f15 = [r17]
+ 	.restore sp
+ 	add	sp = FRAME_SIZE, sp
+ 	br.ret.sptk.many b0
+ 	;;
+ 
+ 	.endp	ffi_closure_unix
+ 
+ 	.section .rodata
+ 	.align	8
+ .Lst_table:
+ 	data8	@pcrel(.Lst_void)		// FFI_TYPE_VOID
+ 	data8	@pcrel(.Lst_sint32)		// FFI_TYPE_INT
+ 	data8	@pcrel(.Lst_float)		// FFI_TYPE_FLOAT
+ 	data8	@pcrel(.Lst_double)		// FFI_TYPE_DOUBLE
+ 	data8	@pcrel(.Lst_ldouble)		// FFI_TYPE_LONGDOUBLE
+ 	data8	@pcrel(.Lst_uint8)		// FFI_TYPE_UINT8
+ 	data8	@pcrel(.Lst_sint8)		// FFI_TYPE_SINT8
+ 	data8	@pcrel(.Lst_uint16)		// FFI_TYPE_UINT16
+ 	data8	@pcrel(.Lst_sint16)		// FFI_TYPE_SINT16
+ 	data8	@pcrel(.Lst_uint32)		// FFI_TYPE_UINT32
+ 	data8	@pcrel(.Lst_sint32)		// FFI_TYPE_SINT32
+ 	data8	@pcrel(.Lst_int64)		// FFI_TYPE_UINT64
+ 	data8	@pcrel(.Lst_int64)		// FFI_TYPE_SINT64
+ 	data8	@pcrel(.Lst_void)		// FFI_TYPE_STRUCT
+ 	data8	@pcrel(.Lst_int64)		// FFI_TYPE_POINTER
+ 	data8 	@pcrel(.Lst_small_struct)	// FFI_IA64_TYPE_SMALL_STRUCT
+ 	data8	@pcrel(.Lst_hfa_float)		// FFI_IA64_TYPE_HFA_FLOAT
+ 	data8	@pcrel(.Lst_hfa_double)		// FFI_IA64_TYPE_HFA_DOUBLE
+ 	data8	@pcrel(.Lst_hfa_ldouble)	// FFI_IA64_TYPE_HFA_LDOUBLE
+ 
+ .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
+ 	data8	@pcrel(.Lld_hfa_ldouble)	// FFI_IA64_TYPE_HFA_LDOUBLE
diff -Nrcpad gcc-3.4.3/libffi/src/m32r/ffi.c gcc-4.0.0/libffi/src/m32r/ffi.c
*** gcc-3.4.3/libffi/src/m32r/ffi.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/src/m32r/ffi.c	Wed Oct 13 17:20:24 2004
***************
*** 0 ****
--- 1,247 ----
+ /* -----------------------------------------------------------------------
+    ffi.c - Copyright (c) 2004  Renesas Technology
+    
+    M32R 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 RENESAS TECHNOLOGY 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>
+ 
+ #include <stdlib.h>
+ 
+ /* ffi_prep_args is called by the assembly routine once stack
+    space has been allocated for the function's arguments.  */
+ 
+ /*@-exportheader@*/
+ void ffi_prep_args(char *stack, extended_cif *ecif)
+ /*@=exportheader@*/
+ {
+   unsigned int i;
+   int tmp;
+   unsigned int avn;
+   void **p_argv;
+   char *argp;
+   ffi_type **p_arg;
+ 
+   tmp = 0;
+   argp = stack;
+ 
+   if (ecif->cif->rtype->type == FFI_TYPE_STRUCT && ecif->cif->rtype->size > 8)
+     {
+       *(void **) argp = ecif->rvalue;
+       argp += 4;
+     }
+ 
+   avn = ecif->cif->nargs;
+   p_argv = ecif->avalue;
+ 
+   for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
+        (i != 0) && (avn != 0);
+        i--, p_arg++)
+     {
+       size_t z;
+ 
+       /* Align if necessary.  */
+       if (((*p_arg)->alignment - 1) & (unsigned) argp)
+ 	argp = (char *) ALIGN (argp, (*p_arg)->alignment);
+ 
+       if (avn != 0) 
+ 	{
+ 	  avn--;
+ 	  z = (*p_arg)->size;
+ 	  if (z < sizeof (int))
+ 	    {
+ 	      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;
+ 		  
+ 		case FFI_TYPE_STRUCT:
+ 	  	  z = (*p_arg)->size;
+ 	  	  if ((*p_arg)->alignment != 1)
+ 		    memcpy (argp, *p_argv, z);
+ 		  else
+ 		    memcpy (argp + 4 - z, *p_argv, z);
+ 	  	  z = sizeof (int);
+ 		  break;
+ 
+ 		default:
+ 		  FFI_ASSERT(0);
+ 		}
+ 	    }
+ 	  else if (z == sizeof (int))
+ 	    {
+ 	       *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv);
+ 	    }
+ 	  else
+ 	    {
+ 	      if ((*p_arg)->type == FFI_TYPE_STRUCT)
+ 	        {
+ 		  if (z > 8)
+ 		    {
+ 		      *(unsigned int *) argp = (unsigned int)(void *)(* p_argv);
+ 		      z = sizeof(void *);
+ 		    }
+ 		  else
+ 		    {
+ 	              memcpy(argp, *p_argv, z);
+ 		      z = 8;
+ 		    }
+ 	        }
+ 	      else
+ 	        {
+ 		  /* Double or long long 64bit.  */
+ 	          memcpy (argp, *p_argv, z);
+ 	        }
+ 	    }
+ 	  p_argv++;
+ 	  argp += z;
+ 	}
+     }
+   
+   return;
+ }
+ 
+ /* Perform machine dependent cif processing.  */
+ ffi_status
+ ffi_prep_cif_machdep(ffi_cif *cif)
+ {
+   /* Set the return type flag.  */
+   switch (cif->rtype->type)
+     {
+     case FFI_TYPE_VOID:
+       cif->flags = (unsigned) cif->rtype->type;
+       break;
+ 
+     case FFI_TYPE_STRUCT:
+       if (cif->rtype->size <= 4)
+ 	cif->flags = FFI_TYPE_INT;
+ 
+       else if (cif->rtype->size <= 8)
+ 	cif->flags = FFI_TYPE_DOUBLE;
+ 
+       else
+ 	cif->flags = (unsigned) cif->rtype->type;
+       break;
+ 
+     case FFI_TYPE_SINT64:
+     case FFI_TYPE_UINT64:
+     case FFI_TYPE_DOUBLE:
+       cif->flags = FFI_TYPE_DOUBLE;
+       break;
+ 
+     case FFI_TYPE_FLOAT:
+     default:
+       cif->flags = FFI_TYPE_INT;
+       break;
+     }
+ 
+   return FFI_OK;
+ }
+ 
+ /*@-declundef@*/
+ /*@-exportheader@*/
+ extern void ffi_call_SYSV(void (*)(char *, extended_cif *), 
+ 			  /*@out@*/ extended_cif *, 
+ 			  unsigned, unsigned, 
+ 			  /*@out@*/ unsigned *, 
+ 			  void (*fn)());
+ /*@=declundef@*/
+ /*@=exportheader@*/
+ 
+ void ffi_call(/*@dependent@*/ ffi_cif *cif, 
+ 	      void (*fn)(), 
+ 	      /*@out@*/ void *rvalue, 
+ 	      /*@dependent@*/ void **avalue)
+ {
+   extended_cif ecif;
+ 
+   ecif.cif = cif;
+   ecif.avalue = avalue;
+   
+   /* 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@*/
+       ecif.rvalue = alloca (cif->rtype->size);
+       /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;    
+   
+   switch (cif->abi) 
+     {
+     case FFI_SYSV:
+       /*@-usedef@*/
+       ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, 
+ 		    cif->flags, ecif.rvalue, fn);
+       if (cif->rtype->type == FFI_TYPE_STRUCT)
+ 	{
+ 	  int size = cif->rtype->size;
+ 	  int align = cif->rtype->alignment;
+ 
+ 	  if (size < 4)
+ 	    {
+ 	      if (align == 1)
+ 	        *(unsigned long *)(ecif.rvalue) <<= (4 - size) * 8;
+ 	    }
+ 	  else if (4 < size && size < 8)
+ 	    {
+ 	      if (align == 1)
+ 		{
+ 		  memcpy (ecif.rvalue, ecif.rvalue + 8-size, size);
+ 		}
+ 	      else if (align == 2)
+ 		{
+ 		  if (size & 1)
+ 		    size += 1;
+ 
+ 		  if (size != 8)
+ 		    memcpy (ecif.rvalue, ecif.rvalue + 8-size, size);
+ 		}
+ 	    }
+ 	}
+       /*@=usedef@*/
+       break;
+ 
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+ }
diff -Nrcpad gcc-3.4.3/libffi/src/m32r/ffitarget.h gcc-4.0.0/libffi/src/m32r/ffitarget.h
*** gcc-3.4.3/libffi/src/m32r/ffitarget.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/src/m32r/ffitarget.h	Mon Oct 25 08:55:44 2004
***************
*** 0 ****
--- 1,48 ----
+ /* -----------------------------------------------------------------*-C-*-
+    ffitarget.h - Copyright (c) 2004  Renesas Technology.
+    Target configuration macros for M32R.
+ 
+    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 RENESAS TECHNOLOGY 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
+ 
+ /* ---- Generic type definitions ----------------------------------------- */
+ 
+ #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
+ 
+ #define FFI_CLOSURES 		0
+ #define FFI_TRAMPOLINE_SIZE	24
+ #define FFI_NATIVE_RAW_API 	0
+ 
+ #endif
diff -Nrcpad gcc-3.4.3/libffi/src/m32r/sysv.S gcc-4.0.0/libffi/src/m32r/sysv.S
*** gcc-3.4.3/libffi/src/m32r/sysv.S	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/src/m32r/sysv.S	Wed Oct 13 17:20:24 2004
***************
*** 0 ****
--- 1,121 ----
+ /* -----------------------------------------------------------------------
+    sysv.S - Copyright (c) 2004 Renesas Technology
+    
+    M32R 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 RENESAS TECHNOLOGY 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 <fficonfig.h>
+ #include <ffi.h>
+ #ifdef HAVE_MACHINE_ASM_H
+ #include <machine/asm.h>
+ #else
+ /* XXX these lose for some platforms, I'm sure.  */
+ #define CNAME(x) x
+ #define ENTRY(x) .globl CNAME(x)! .type CNAME(x),%function! CNAME(x):
+ #endif
+ 
+ .text
+ 
+ 	/* R0:   ffi_prep_args */
+ 	/* R1:   &ecif */
+ 	/* R2:   cif->bytes */
+ 	/* R3:   fig->flags */
+ 	/* sp+0: ecif.rvalue */
+ 	/* sp+4: fn */
+ 
+ 	/* This assumes we are using gas.  */
+ ENTRY(ffi_call_SYSV)
+ 	/* Save registers.  */
+ 	push	fp
+ 	push	lr
+ 	push	r3
+ 	push	r2
+ 	push	r1
+ 	push	r0
+ 	mv	fp, sp
+ 
+ 	/* Make room for all of the new args.  */
+ 	sub	sp, r2
+ 
+ 	/* Place all of the ffi_prep_args in position.  */
+ 	mv	lr, r0	
+ 	mv	r0, sp
+ 	/* R1 already set.  */
+ 
+ 	/* And call.  */
+ 	jl	lr
+ 
+ 	/* Move first 4 parameters in registers...  */
+ 	ld	r0, @(0,sp)
+ 	ld	r1, @(4,sp)
+ 	ld	r2, @(8,sp)
+         ld	r3, @(12,sp)
+ 
+ 	/* ...and adjust the stack.  */
+ 	ld	lr, @(8,fp)
+         cmpi	lr, #16
+ 	bc	adjust_stack
+ 	ldi	lr, #16
+ adjust_stack:
+         add	sp, lr
+ 
+ 	/* Call the function.  */
+ 	ld	lr, @(28,fp)
+ 	jl	lr	
+ 
+ 	/* Remove the space we pushed for the args.  */
+ 	mv	sp, fp	
+ 
+ 	/* Load R2 with the pointer to storage for the return value.  */
+ 	ld	r2, @(24,sp)
+ 
+ 	/* Load R3 with the return type code.  */
+ 	ld	r3, @(12,sp)
+ 
+ 	/* If the return value pointer is NULL, assume no return value.  */
+ 	beqz	r2, epilogue
+ 
+ 	/* Return INT.  */
+ 	ldi	r4, #FFI_TYPE_INT
+ 	bne	r3, r4, return_double
+ 	st	r0, @r2	
+ 	bra	epilogue
+ 
+ return_double:
+ 	/* Return DOUBLE or LONGDOUBLE.  */
+ 	ldi	r4, #FFI_TYPE_DOUBLE
+ 	bne	r3, r4, epilogue
+ 	st	r0, @r2	
+ 	st	r1, @(4,r2)
+ 
+ epilogue:
+ 	pop	r0
+ 	pop	r1
+ 	pop	r2
+ 	pop	r3
+ 	pop	lr
+ 	pop	fp
+         jmp lr
+ 
+ .ffi_call_SYSV_end:
+         .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
diff -Nrcpad gcc-3.4.3/libffi/src/mips/ffi.c gcc-4.0.0/libffi/src/mips/ffi.c
*** gcc-3.4.3/libffi/src/mips/ffi.c	Tue Oct 21 19:01:56 2003
--- gcc-4.0.0/libffi/src/mips/ffi.c	Mon Aug 23 16:49:17 2004
***************
*** 27,32 ****
--- 27,33 ----
  #include <ffi_common.h>
  
  #include <stdlib.h>
+ #include <sys/cachectl.h>
  
  #if _MIPS_SIM == _ABIN32
  #define FIX_ARGP \
*************** static void ffi_prep_args(char *stack, 
*** 84,93 ****
    for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i; i--, p_arg++)
      {
        size_t z;
  
        /* Align if necessary */
!       if (((*p_arg)->alignment - 1) & (unsigned) argp) {
! 	argp = (char *) ALIGN(argp, (*p_arg)->alignment);
  	FIX_ARGP;
        }
  
--- 85,99 ----
    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;
        }
  
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 267,275 ****
    cif->flags = 0;
  
  #if _MIPS_SIM == _ABIO32
!   /* Set the flags necessary for O32 processing */
  
!   if (cif->rtype->type != FFI_TYPE_STRUCT)
      {
        if (cif->nargs > 0)
  	{
--- 273,283 ----
    cif->flags = 0;
  
  #if _MIPS_SIM == _ABIO32
!   /* Set the flags necessary for O32 processing.  FFI_O32_SOFT_FLOAT
!    * does not have special handling for floating point args.
!    */
  
!   if (cif->rtype->type != FFI_TYPE_STRUCT && cif->abi == FFI_O32)
      {
        if (cif->nargs > 0)
  	{
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 306,323 ****
      }
        
    /* Set the return type flag */
!   switch (cif->rtype->type)
      {
!     case FFI_TYPE_VOID:
!     case FFI_TYPE_STRUCT:
!     case FFI_TYPE_FLOAT:
!     case FFI_TYPE_DOUBLE:
!       cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 2);
!       break;
        
!     default:
!       cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 2);
!       break;
      }
  #endif
  
--- 314,362 ----
      }
        
    /* Set the return type flag */
! 
!   if (cif->abi == FFI_O32_SOFT_FLOAT)
      {
!       switch (cif->rtype->type)
!         {
!         case FFI_TYPE_VOID:
!         case FFI_TYPE_STRUCT:
!           cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 2);
!           break;
! 
!         case FFI_TYPE_SINT64:
!         case FFI_TYPE_UINT64:
!         case FFI_TYPE_DOUBLE:
!           cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 2);
!           break;
        
!         case FFI_TYPE_FLOAT:
!         default:
!           cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 2);
!           break;
!         }
!     }
!   else
!     {
!       /* FFI_O32 */      
!       switch (cif->rtype->type)
!         {
!         case FFI_TYPE_VOID:
!         case FFI_TYPE_STRUCT:
!         case FFI_TYPE_FLOAT:
!         case FFI_TYPE_DOUBLE:
!           cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 2);
!           break;
! 
!         case FFI_TYPE_SINT64:
!         case FFI_TYPE_UINT64:
!           cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 2);
!           break;
!       
!         default:
!           cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 2);
!           break;
!         }
      }
  #endif
  
*************** void ffi_call(ffi_cif *cif, void (*fn)()
*** 442,447 ****
--- 481,487 ----
      {
  #if _MIPS_SIM == _ABIO32
      case FFI_O32:
+     case FFI_O32_SOFT_FLOAT:
        ffi_call_O32(ffi_prep_args, &ecif, cif->bytes, 
  		   cif->flags, ecif.rvalue, fn);
        break;
*************** void ffi_call(ffi_cif *cif, void (*fn)()
*** 459,461 ****
--- 499,625 ----
        break;
      }
  }
+ 
+ #if FFI_CLOSURES  /* N32 not implemented yet, FFI_CLOSURES not defined */
+ #if defined(FFI_MIPS_O32)
+ extern void ffi_closure_O32(void);
+ #endif /* FFI_MIPS_O32 */
+ 
+ ffi_status
+ ffi_prep_closure (ffi_closure *closure,
+ 		  ffi_cif *cif,
+ 		  void (*fun)(ffi_cif*,void*,void**,void*),
+ 		  void *user_data)
+ {
+   unsigned int *tramp = (unsigned int *) &closure->tramp[0];
+   unsigned int fn;
+   unsigned int ctx = (unsigned int) closure;
+ 
+ #if defined(FFI_MIPS_O32)
+   FFI_ASSERT(cif->abi == FFI_O32 || cif->abi == FFI_O32_SOFT_FLOAT);
+   fn = (unsigned int) ffi_closure_O32;
+ #else /* FFI_MIPS_N32 */
+   FFI_ASSERT(cif->abi == FFI_N32);
+   FFI_ASSERT(!"not implemented");
+ #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)  */
+ 
+   closure->cif = cif;
+   closure->fun = fun;
+   closure->user_data = user_data;
+ 
+   /* XXX this is available on Linux, but anything else? */
+   cacheflush (tramp, FFI_TRAMPOLINE_SIZE, ICACHE);
+ 
+   return FFI_OK;
+ }
+ 
+ /*
+  * Decodes the arguments to a function, which will be stored on the
+  * stack. AR is the pointer to the beginning of the integer arguments
+  * (and, depending upon the arguments, some floating-point arguments
+  * as well). FPR is a pointer to the area where floating point
+  * registers have been saved, if any.
+  *
+  * RVALUE is the location where the function return value will be
+  * stored. CLOSURE is the prepared closure to invoke.
+  *
+  * This function should only be called from assembly, which is in
+  * turn called from a trampoline.
+  *
+  * Returns the function return type.
+  *
+  * Based on the similar routine for sparc.
+  */
+ 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;
+ 
+   if ((cif->flags >> (FFI_FLAG_BITS * 2)) == FFI_TYPE_STRUCT)
+     {
+       rvalue = (void *) ar[0];
+       argn = 1;
+     }
+ 
+   i = 0;
+   avn = cif->nargs;
+   arg_types = cif->arg_types;
+ 
+   while (i < avn)
+     {
+       if (i < 2 && !seen_int &&
+ 	  (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;
+       i++;
+     }
+ 
+   /* Invoke the closure. */
+   (closure->fun) (cif, rvalue, avalue, closure->user_data);
+ 
+   if (cif->abi == FFI_O32_SOFT_FLOAT)
+     {
+       switch (cif->rtype->type)
+         {
+         case FFI_TYPE_FLOAT:
+           return FFI_TYPE_INT;
+         case FFI_TYPE_DOUBLE:
+           return FFI_TYPE_UINT64;
+         default:
+           return cif->rtype->type;
+         }
+     }
+   else
+     {
+       return cif->rtype->type;
+     }
+ }
+ 
+ #endif /* FFI_CLOSURES */
diff -Nrcpad gcc-3.4.3/libffi/src/mips/ffitarget.h gcc-4.0.0/libffi/src/mips/ffitarget.h
*** gcc-3.4.3/libffi/src/mips/ffitarget.h	Wed Oct 22 15:32:13 2003
--- gcc-4.0.0/libffi/src/mips/ffitarget.h	Mon Aug 23 16:49:17 2004
*************** typedef enum ffi_abi {
*** 138,146 ****
--- 138,151 ----
    FFI_O32,
    FFI_N32,
    FFI_N64,
+   FFI_O32_SOFT_FLOAT,
  
  #ifdef FFI_MIPS_O32
+ #ifdef __mips_soft_float
+   FFI_DEFAULT_ABI = FFI_O32_SOFT_FLOAT,
+ #else
    FFI_DEFAULT_ABI = FFI_O32,
+ #endif
  #else
    FFI_DEFAULT_ABI = FFI_N32,
  #endif
*************** typedef enum ffi_abi {
*** 153,159 ****
--- 158,170 ----
  
  /* ---- Definitions for closures ----------------------------------------- */
  
+ #if defined(FFI_MIPS_O32)
+ #define FFI_CLOSURES 1
+ #define FFI_TRAMPOLINE_SIZE 20
+ #else
+ /* N32/N64 not implemented yet. */
  #define FFI_CLOSURES 0
+ #endif /* FFI_MIPS_O32 */
  #define FFI_NATIVE_RAW_API 0
  
  #endif
diff -Nrcpad gcc-3.4.3/libffi/src/mips/o32.S gcc-4.0.0/libffi/src/mips/o32.S
*** gcc-3.4.3/libffi/src/mips/o32.S	Tue Oct 21 19:01:56 2003
--- gcc-4.0.0/libffi/src/mips/o32.S	Tue Nov 23 23:18:11 2004
***************
*** 42,54 ****
  	.globl	ffi_call_O32
  	.ent	ffi_call_O32
  ffi_call_O32:	
! 
  	# Prologue
  	SUBU	$sp, SIZEOF_FRAME			# Frame size
  	REG_S	$fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp)	# Save frame pointer
  	REG_S	ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp)	# Save return address
  	move	$fp, $sp
  
  	move	t9, callback	# callback function pointer
  	REG_S	flags, SIZEOF_FRAME + 3*FFI_SIZEOF_ARG($fp) # flags
  
--- 42,58 ----
  	.globl	ffi_call_O32
  	.ent	ffi_call_O32
  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
  
*************** sixteen:
*** 69,75 ****
  	ADDU	a0, $sp, 4 * FFI_SIZEOF_ARG
  	ADDU	a3, $fp, SIZEOF_FRAME + 3*FFI_SIZEOF_ARG
  
! 	jal	t9
  	
  	REG_L	t0, SIZEOF_FRAME + 3*FFI_SIZEOF_ARG($fp)  # load the flags word
  	add	t2, t0, 0			   # and copy it into t2
--- 73,79 ----
  	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
*************** call_it:	
*** 136,163 ****
  	REG_L	t1, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
  	beqz	t1, noretval
  
! 	bne     t2, FFI_TYPE_INT, retfloat
! 	jal	t9
  	REG_L	t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
  	REG_S	v0, 0(t0)
  	b	epilogue
  
  retfloat:
  	bne     t2, FFI_TYPE_FLOAT, retdouble
! 	jal	t9
  	REG_L	t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
  	s.s	$f0, 0(t0)
  	b	epilogue
  
  retdouble:	
  	bne	t2, FFI_TYPE_DOUBLE, noretval
! 	jal	t9
  	REG_L	t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
  	s.d	$f0, 0(t0)
  	b	epilogue
  	
  noretval:	
! 	jal	t9
  	
  	# Epilogue
  epilogue:	
--- 140,176 ----
  	REG_L	t1, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
  	beqz	t1, noretval
  
! 	bne     t2, FFI_TYPE_INT, retlonglong
! 	jalr	t9
  	REG_L	t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
  	REG_S	v0, 0(t0)
  	b	epilogue
  
+ retlonglong:
+ 	# Really any 64-bit int, signed or not.
+ 	bne	t2, FFI_TYPE_UINT64, retfloat
+ 	jalr	t9
+ 	REG_L	t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
+ 	REG_S	v1, 4(t0)
+ 	REG_S	v0, 0(t0)
+ 	b	epilogue
+ 
  retfloat:
  	bne     t2, FFI_TYPE_FLOAT, retdouble
! 	jalr	t9
  	REG_L	t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
  	s.s	$f0, 0(t0)
  	b	epilogue
  
  retdouble:	
  	bne	t2, FFI_TYPE_DOUBLE, noretval
! 	jalr	t9
  	REG_L	t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
  	s.d	$f0, 0(t0)
  	b	epilogue
  	
  noretval:	
! 	jalr	t9
  	
  	# Epilogue
  epilogue:	
*************** epilogue:	
*** 167,172 ****
--- 180,371 ----
  	ADDU	$sp, SIZEOF_FRAME		      # Fix stack pointer
  	j	ra
  
+ $LFE0:
  	.end	ffi_call_O32
+ 
+ 
+ /* ffi_closure_O32. Expects address of the passed-in ffi_closure
+ 	in t0. Stores any arguments passed in registers onto the
+ 	stack, then calls ffi_closure_mips_inner_O32, which
+ 	then decodes them.
  	
+ 	Stack layout:
+ 
+ 	14 - Start of parameters, original sp
+ 	13 - ra save
+ 	12 - fp save
+ 	11 - $16 (s0) save
+ 	10 - cprestore
+ 	 9 - return value high (v1)
+ 	 8 - return value low (v0)
+ 	 7 - f14 (le high, be low)
+ 	 6 - f14 (le low, be high)
+ 	 5 - f12 (le high, be low)
+ 	 4 - f12 (le low, be high)
+ 	 3 - Called function a3 save
+ 	 2 - Called function a2 save
+ 	 1 - Called function a1 save
+ 	 0 - Called function a0 save our sp, fp point here
+ 	 */
+ 	
+ #define SIZEOF_FRAME2	( 14 * FFI_SIZEOF_ARG )
+ 
+ 	.text
+ 	.align	2
+ 	.globl	ffi_closure_O32
+ 	.ent	ffi_closure_O32
+ 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.
+ 
+ 	li	$13, 1		# FFI_O32
+ 	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
+ 	li	$9, FFI_TYPE_VOID
+ 	beq	$8, $9, closure_done
+ 
+ 	li	$13, 1		# FFI_O32
+ 	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:
+ 	.end	ffi_closure_O32
+ 
+ /* DWARF-2 unwind info. */
+ 
+ 	.section	.eh_frame,"a",@progbits
+ $Lframe0:
+ 	.4byte	$LECIE0-$LSCIE0	 # Length of Common Information Entry
+ $LSCIE0:
+ 	.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	0x1f	 # CIE RA Column
+ 	.uleb128 0x1	 # Augmentation size
+ 	.byte	0x00	 # FDE Encoding (absptr)
+ 	.byte	0xc	 # DW_CFA_def_cfa
+ 	.uleb128 0x1d
+ 	.uleb128 0x0
+ 	.align	2
+ $LECIE0:
+ $LSFDE0:
+ 	.4byte	$LEFDE0-$LASFDE0	 # FDE Length
+ $LASFDE0:
+ 	.4byte	$LASFDE0-$Lframe0	 # FDE CIE offset
+ 	.4byte	$LFB0	 # FDE initial location
+ 	.4byte	$LFE0-$LFB0	 # FDE address range
+ 	.uleb128 0x0	 # Augmentation size
+ 	.byte	0x4	 # DW_CFA_advance_loc4
+ 	.4byte	$LCFI0-$LFB0
+ 	.byte	0xe	 # DW_CFA_def_cfa_offset
+ 	.uleb128 0x18
+ 	.byte	0x4	 # DW_CFA_advance_loc4
+ 	.4byte	$LCFI2-$LCFI0
+ 	.byte	0x11	 # DW_CFA_offset_extended_sf
+ 	.uleb128 0x1e	 # $fp
+ 	.sleb128 -2	 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp)
+ 	.byte	0x11	 # DW_CFA_offset_extended_sf
+ 	.uleb128 0x1f	 # $ra
+ 	.sleb128 -1	 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)
+ 	.byte	0x4	 # DW_CFA_advance_loc4
+ 	.4byte	$LCFI3-$LCFI2
+ 	.byte	0xc	 # DW_CFA_def_cfa
+ 	.uleb128 0x1e
+ 	.uleb128 0x18
+ 	.align	2
+ $LEFDE0:
+ $LSFDE1:
+ 	.4byte	$LEFDE1-$LASFDE1	 # FDE Length
+ $LASFDE1:
+ 	.4byte	$LASFDE1-$Lframe0	 # FDE CIE offset
+ 	.4byte	$LFB1	 # FDE initial location
+ 	.4byte	$LFE1-$LFB1	 # FDE address range
+ 	.uleb128 0x0	 # Augmentation size
+ 	.byte	0x4	 # DW_CFA_advance_loc4
+ 	.4byte	$LCFI4-$LFB1
+ 	.byte	0xe	 # DW_CFA_def_cfa_offset
+ 	.uleb128 0x38
+ 	.byte	0x4	 # DW_CFA_advance_loc4
+ 	.4byte	$LCFI6-$LCFI4
+ 	.byte	0x11	 # DW_CFA_offset_extended_sf
+ 	.uleb128 0x10	 # $16
+ 	.sleb128 -3	 # SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp)
+ 	.byte	0x11	 # DW_CFA_offset_extended_sf
+ 	.uleb128 0x1e	 # $fp
+ 	.sleb128 -2	 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp)
+ 	.byte	0x11	 # DW_CFA_offset_extended_sf
+ 	.uleb128 0x1f	 # $ra
+ 	.sleb128 -1	 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)
+ 	.byte	0x4	 # DW_CFA_advance_loc4
+ 	.4byte	$LCFI7-$LCFI6
+ 	.byte	0xc	 # DW_CFA_def_cfa
+ 	.uleb128 0x1e
+ 	.uleb128 0x38
+ 	.align	2
+ $LEFDE1:
+ 
  #endif
diff -Nrcpad gcc-3.4.3/libffi/src/pa/ffi.c gcc-4.0.0/libffi/src/pa/ffi.c
*** gcc-3.4.3/libffi/src/pa/ffi.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/src/pa/ffi.c	Fri Mar 19 22:34:17 2004
***************
*** 0 ****
--- 1,603 ----
+ /* -----------------------------------------------------------------------
+    ffi.c - (c) 2003-2004 Randolph Chung <tausq@debian.org>
+ 
+    HPPA 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 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.
+    ----------------------------------------------------------------------- */
+ 
+ #include <ffi.h>
+ #include <ffi_common.h>
+ 
+ #include <stdlib.h>
+ 
+ #define ROUND_UP(v, a)  (((size_t)(v) + (a) - 1) & ~((a) - 1))
+ #define ROUND_DOWN(v, a)  (((size_t)(v) - (a) + 1) & ~((a) - 1))
+ #define MIN_STACK_SIZE  64
+ #define FIRST_ARG_SLOT  9
+ #define DEBUG_LEVEL   0
+ 
+ #define fldw(addr, fpreg) asm volatile ("fldw 0(%0), %%" #fpreg "L" : : "r"(addr) : #fpreg)
+ #define fstw(fpreg, addr) asm volatile ("fstw %%" #fpreg "L, 0(%0)" : : "r"(addr))
+ #define fldd(addr, fpreg) asm volatile ("fldd 0(%0), %%" #fpreg : : "r"(addr) : #fpreg)
+ #define fstd(fpreg, addr) asm volatile ("fstd %%" #fpreg "L, 0(%0)" : : "r"(addr))
+ 
+ #define debug(lvl, x...) do { if (lvl <= DEBUG_LEVEL) { printf(x); } } while (0)
+ 
+ static inline int ffi_struct_type(ffi_type *t)
+ {
+   size_t sz = t->size;
+ 
+   /* Small structure results are passed in registers,
+      larger ones are passed by pointer.  */
+ 
+   if (sz <= 1)
+     return FFI_TYPE_UINT8;
+   else if (sz == 2)
+     return FFI_TYPE_UINT16;
+   else if (sz == 3)
+     return FFI_TYPE_SMALL_STRUCT1;
+   else if (sz == 4)
+     return FFI_TYPE_UINT32;
+   else if (sz <= 6)
+     return FFI_TYPE_SMALL_STRUCT2;
+   else if (sz <= 8)
+     return FFI_TYPE_UINT64;
+   else
+     return FFI_TYPE_STRUCT; /* else, we pass it by pointer.  */
+ }
+ 
+ /* PA has a downward growing stack, which looks like this:
+   
+    Offset
+         [ Variable args ]
+    SP = (4*(n+9))       arg word N
+    ...
+    SP-52                arg word 4
+         [ Fixed args ]
+    SP-48                arg word 3
+    SP-44                arg word 2
+    SP-40                arg word 1
+    SP-36                arg word 0
+         [ Frame marker ]
+    ...
+    SP-20                RP
+    SP-4                 previous SP
+   
+    First 4 non-FP 32-bit args are passed in gr26, gr25, gr24 and gr23
+    First 2 non-FP 64-bit args are passed in register pairs, starting
+      on an even numbered register (i.e. r26/r25 and r24+r23)
+    First 4 FP 32-bit arguments are passed in fr4L, fr5L, fr6L and fr7L
+    First 2 FP 64-bit arguments are passed in fr5 and fr7
+    The rest are passed on the stack starting at SP-52, but 64-bit
+      arguments need to be aligned to an 8-byte boundary
+   
+    This means we can have holes either in the register allocation,
+    or in the stack.  */
+ 
+ /* ffi_prep_args is called by the assembly routine once stack space
+    has been allocated for the function's arguments
+   
+    The following code will put everything into the stack frame
+    (which was allocated by the asm routine), and on return
+    the asm routine will load the arguments that should be
+    passed by register into the appropriate registers
+   
+    NOTE: We load floating point args in this function... that means we
+    assume gcc will not mess with fp regs in here.  */
+ 
+ /*@-exportheader@*/
+ void ffi_prep_args_LINUX(UINT32 *stack, extended_cif *ecif, unsigned bytes)
+ /*@=exportheader@*/
+ {
+   register unsigned int i;
+   register ffi_type **p_arg;
+   register void **p_argv;
+   unsigned int slot = FIRST_ARG_SLOT - 1;
+   char *dest_cpy;
+ 
+   debug(1, "%s: stack = %p, ecif = %p, bytes = %u\n", __FUNCTION__, stack, ecif, bytes);
+ 
+   p_arg = ecif->cif->arg_types;
+   p_argv = ecif->avalue;
+ 
+   for (i = 0; i < ecif->cif->nargs; i++)
+     {
+       int type = (*p_arg)->type;
+ 
+       switch (type)
+ 	{
+ 	case FFI_TYPE_SINT8:
+ 	  slot++;
+ 	  *(SINT32 *)(stack - slot) = *(SINT8 *)(*p_argv);
+ 	  break;
+ 
+ 	case FFI_TYPE_UINT8:
+ 	  slot++;
+ 	  *(UINT32 *)(stack - slot) = *(UINT8 *)(*p_argv);
+ 	  break;
+ 
+ 	case FFI_TYPE_SINT16:
+ 	  slot++;
+ 	  *(SINT32 *)(stack - slot) = *(SINT16 *)(*p_argv);
+ 	  break;
+ 
+ 	case FFI_TYPE_UINT16:
+ 	  slot++;
+ 	  *(UINT32 *)(stack - slot) = *(UINT16 *)(*p_argv);
+ 	  break;
+ 
+ 	case FFI_TYPE_UINT32:
+ 	case FFI_TYPE_SINT32:
+ 	case FFI_TYPE_POINTER:
+ 	  slot++;
+ 	  debug(3, "Storing UINT32 %u in slot %u\n", *(UINT32 *)(*p_argv), slot);
+ 	  *(UINT32 *)(stack - slot) = *(UINT32 *)(*p_argv);
+ 	  break;
+ 
+ 	case FFI_TYPE_UINT64:
+ 	case FFI_TYPE_SINT64:
+ 	  slot += 2;
+ 	  if (slot & 1)
+ 	    slot++;
+ 
+ 	  *(UINT32 *)(stack - slot) = (*(UINT64 *)(*p_argv)) >> 32;
+ 	  *(UINT32 *)(stack - slot + 1) = (*(UINT64 *)(*p_argv)) & 0xffffffffUL;
+ 	  break;
+ 
+ 	case FFI_TYPE_FLOAT:
+ 	  /* First 4 args go in fr4L - fr7L */
+ 	  slot++;
+ 	  switch (slot - FIRST_ARG_SLOT)
+ 	    {
+ 	    case 0: fldw(*p_argv, fr4); break;
+ 	    case 1: fldw(*p_argv, fr5); break;
+ 	    case 2: fldw(*p_argv, fr6); break;
+ 	    case 3: fldw(*p_argv, fr7); break;
+ 	    default:
+ 	      /* Other ones are just passed on the stack.  */
+ 	      debug(3, "Storing UINT32(float) in slot %u\n", slot);
+ 	      *(UINT32 *)(stack - slot) = *(UINT32 *)(*p_argv);
+ 	      break;
+ 	    }
+ 	    break;
+ 
+ 	case FFI_TYPE_DOUBLE:
+ 	  slot += 2;
+ 	  if (slot & 1)
+ 	    slot++;
+ 	  switch (slot - FIRST_ARG_SLOT + 1)
+ 	    {
+ 	      /* First 2 args go in fr5, fr7 */
+ 	      case 2: fldd(*p_argv, fr5); break;
+ 	      case 4: fldd(*p_argv, fr7); break;
+ 	      default:
+ 	        debug(3, "Storing UINT64(double) at slot %u\n", slot);
+ 	        *(UINT64 *)(stack - slot) = *(UINT64 *)(*p_argv);
+ 	        break;
+ 	    }
+ 	  break;
+ 
+ 	case FFI_TYPE_STRUCT:
+ 
+ 	  /* Structs smaller or equal than 4 bytes are passed in one
+ 	     register. Structs smaller or equal 8 bytes are passed in two
+ 	     registers. Larger structures are passed by pointer.  */
+ 
+ 	  if((*p_arg)->size <= 4) 
+ 	    {
+ 	      slot++;
+ 	      dest_cpy = (char *)(stack - slot);
+ 	      dest_cpy += 4 - (*p_arg)->size;
+ 	      memcpy((char *)dest_cpy, (char *)*p_argv, (*p_arg)->size);
+ 	    }
+ 	  else if ((*p_arg)->size <= 8) 
+ 	    {
+ 	      slot += 2;
+ 	      if (slot & 1)
+ 	        slot++;
+ 	      dest_cpy = (char *)(stack - slot);
+ 	      dest_cpy += 8 - (*p_arg)->size;
+ 	      memcpy((char *)dest_cpy, (char *)*p_argv, (*p_arg)->size);
+ 	    } 
+ 	  else 
+ 	    {
+ 	      slot++;
+ 	      *(UINT32 *)(stack - slot) = (UINT32)(*p_argv);
+ 	    }
+ 	  break;
+ 
+ 	default:
+ 	  FFI_ASSERT(0);
+ 	}
+ 
+       p_arg++;
+       p_argv++;
+     }
+ 
+   /* Make sure we didn't mess up and scribble on the stack.  */
+   {
+     int n;
+ 
+     debug(5, "Stack setup:\n");
+     for (n = 0; n < (bytes + 3) / 4; n++)
+       {
+ 	if ((n%4) == 0) { debug(5, "\n%08x: ", (unsigned int)(stack - n)); }
+ 	debug(5, "%08x ", *(stack - n));
+       }
+     debug(5, "\n");
+   }
+ 
+   FFI_ASSERT(slot * 4 <= bytes);
+ 
+   return;
+ }
+ 
+ static void ffi_size_stack_LINUX(ffi_cif *cif)
+ {
+   ffi_type **ptr;
+   int i;
+   int z = 0; /* # stack slots */
+ 
+   for (ptr = cif->arg_types, i = 0; i < cif->nargs; ptr++, i++)
+     {
+       int type = (*ptr)->type;
+ 
+       switch (type)
+ 	{
+ 	case FFI_TYPE_DOUBLE:
+ 	case FFI_TYPE_UINT64:
+ 	case FFI_TYPE_SINT64:
+ 	  z += 2 + (z & 1); /* must start on even regs, so we may waste one */
+ 	  break;
+ 
+ 	case FFI_TYPE_STRUCT:
+ 	  z += 1; /* pass by ptr, callee will copy */
+ 	  break;
+ 
+ 	default: /* <= 32-bit values */
+ 	  z++;
+ 	}
+     }
+ 
+   /* We can fit up to 6 args in the default 64-byte stack frame,
+      if we need more, we need more stack.  */
+   if (z <= 6)
+     cif->bytes = MIN_STACK_SIZE; /* min stack size */
+   else
+     cif->bytes = 64 + ROUND_UP((z - 6) * sizeof(UINT32), MIN_STACK_SIZE);
+ 
+   debug(3, "Calculated stack size is %u bytes\n", cif->bytes);
+ }
+ 
+ /* Perform machine dependent cif processing.  */
+ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
+ {
+   /* Set the return type flag */
+   switch (cif->rtype->type)
+     {
+     case FFI_TYPE_VOID:
+     case FFI_TYPE_FLOAT:
+     case FFI_TYPE_DOUBLE:
+       cif->flags = (unsigned) cif->rtype->type;
+       break;
+ 
+     case FFI_TYPE_STRUCT:
+       /* For the return type we have to check the size of the structures.
+ 	 If the size is smaller or equal 4 bytes, the result is given back
+ 	 in one register. If the size is smaller or equal 8 bytes than we
+ 	 return the result in two registers. But if the size is bigger than
+ 	 8 bytes, we work with pointers.  */
+       cif->flags = ffi_struct_type(cif->rtype);
+       break;
+ 
+     case FFI_TYPE_UINT64:
+     case FFI_TYPE_SINT64:
+       cif->flags = FFI_TYPE_UINT64;
+       break;
+ 
+     default:
+       cif->flags = FFI_TYPE_INT;
+       break;
+     }
+ 
+   /* Lucky us, because of the unique PA ABI we get to do our
+      own stack sizing.  */
+   switch (cif->abi)
+     {
+     case FFI_LINUX:
+       ffi_size_stack_LINUX(cif);
+       break;
+ 
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+ 
+   return FFI_OK;
+ }
+ 
+ /*@-declundef@*/
+ /*@-exportheader@*/
+ extern void ffi_call_LINUX(void (*)(UINT32 *, extended_cif *, unsigned),
+ 			   /*@out@*/ extended_cif *,
+ 			   unsigned, unsigned,
+ 			   /*@out@*/ unsigned *,
+ 			   void (*fn)());
+ /*@=declundef@*/
+ /*@=exportheader@*/
+ 
+ void ffi_call(/*@dependent@*/ ffi_cif *cif,
+ 	      void (*fn)(),
+ 	      /*@out@*/ void *rvalue,
+ 	      /*@dependent@*/ void **avalue)
+ {
+   extended_cif ecif;
+ 
+   ecif.cif = cif;
+   ecif.avalue = avalue;
+ 
+   /* 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@*/
+       ecif.rvalue = alloca(cif->rtype->size);
+       /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;
+ 
+ 
+   switch (cif->abi)
+     {
+     case FFI_LINUX:
+       /*@-usedef@*/
+       debug(2, "Calling ffi_call_LINUX: ecif=%p, bytes=%u, flags=%u, rvalue=%p, fn=%p\n", &ecif, cif->bytes, cif->flags, ecif.rvalue, (void *)fn);
+       ffi_call_LINUX(ffi_prep_args_LINUX, &ecif, cif->bytes,
+ 		     cif->flags, ecif.rvalue, fn);
+       /*@=usedef@*/
+       break;
+ 
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+ }
+ 
+ #if FFI_CLOSURES
+ /* This is more-or-less an inverse of ffi_call -- we have arguments on
+    the stack, and we need to fill them into a cif structure and invoke
+    the user function. This really ought to be in asm to make sure
+    the compiler doesn't do things we don't expect.  */
+ UINT32 ffi_closure_inner_LINUX(ffi_closure *closure, UINT32 *stack)
+ {
+   ffi_cif *cif;
+   void **avalue;
+   void *rvalue;
+   UINT32 ret[2]; /* function can return up to 64-bits in registers */
+   ffi_type **p_arg;
+   char *tmp;
+   int i, avn, slot = FIRST_ARG_SLOT - 1;
+   register UINT32 r28 asm("r28");
+ 
+   cif = closure->cif;
+ 
+   /* If returning via structure, callee will write to our pointer.  */
+   if (cif->flags == FFI_TYPE_STRUCT)
+     rvalue = (void *)r28;
+   else
+     rvalue = &ret[0];
+ 
+   avalue = (void **)alloca(cif->nargs * FFI_SIZEOF_ARG);
+   avn = cif->nargs;
+   p_arg = cif->arg_types;
+ 
+   for (i = 0; i < avn; i++)
+     {
+       int type = (*p_arg)->type;
+ 
+       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_POINTER:
+ 	  slot++;
+ 	  avalue[i] = (char *)(stack - slot) + sizeof(UINT32) - (*p_arg)->size;
+ 	  break;
+ 
+ 	case FFI_TYPE_SINT64:
+ 	case FFI_TYPE_UINT64:
+ 	  slot += 2;
+ 	  if (slot & 1)
+ 	    slot++;
+ 	  avalue[i] = (void *)(stack - slot);
+ 	  break;
+ 
+ 	case FFI_TYPE_FLOAT:
+ 	  slot++;
+ 	  switch (slot - FIRST_ARG_SLOT)
+ 	    {
+ 	    case 0: fstw(fr4, (void *)(stack - slot)); break;
+ 	    case 1: fstw(fr5, (void *)(stack - slot)); break;
+ 	    case 2: fstw(fr6, (void *)(stack - slot)); break;
+ 	    case 3: fstw(fr7, (void *)(stack - slot)); break;
+ 	    }
+ 	  avalue[i] = (void *)(stack - slot);
+ 	  break;
+ 
+ 	case FFI_TYPE_DOUBLE:
+ 	  slot += 2;
+ 	  if (slot & 1)
+ 	    slot++;
+ 	  switch (slot - FIRST_ARG_SLOT + 1)
+ 	    {
+ 	    case 2: fstd(fr5, (void *)(stack - slot)); break;
+ 	    case 4: fstd(fr7, (void *)(stack - slot)); break;
+ 	    }
+ 	  avalue[i] = (void *)(stack - slot);
+ 	  break;
+ 
+ 	case FFI_TYPE_STRUCT:
+ 	  /* Structs smaller or equal than 4 bytes are passed in one
+ 	     register. Structs smaller or equal 8 bytes are passed in two
+ 	     registers. Larger structures are passed by pointer.  */
+ 	  if((*p_arg)->size <= 4) {
+ 	    slot++;
+ 	    avalue[i] = (void *)(stack - slot) + sizeof(UINT32) -
+ 	      (*p_arg)->size;
+ 	  } else if ((*p_arg)->size <= 8) {
+ 	    slot += 2;
+ 	    if (slot & 1)
+ 	      slot++;
+ 	    avalue[i] = (void *)(stack - slot) + sizeof(UINT64) -
+ 	      (*p_arg)->size;
+ 	  } else {
+ 	    slot++;
+ 	    avalue[i] = (void *) *(stack - slot);
+ 	  }
+ 	  break;
+ 
+ 	default:
+ 	  FFI_ASSERT(0);
+ 	}
+ 
+       p_arg++;
+     }
+ 
+   /* Invoke the closure.  */
+   (closure->fun) (cif, rvalue, avalue, closure->user_data);
+ 
+   debug(3, "after calling function, ret[0] = %d, ret[1] = %d\n", ret[0], ret[1]);
+ 
+   /* Store the result */
+   switch (cif->flags)
+     {
+     case FFI_TYPE_UINT8:
+       *(stack - FIRST_ARG_SLOT) = *(UINT8 *)&ret[0];
+       break;
+     case FFI_TYPE_SINT8:
+       *(stack - FIRST_ARG_SLOT) = *(SINT8 *)&ret[0];
+       break;
+     case FFI_TYPE_UINT16:
+       *(stack - FIRST_ARG_SLOT) = *(UINT16 *)&ret[0];
+       break;
+     case FFI_TYPE_SINT16:
+       *(stack - FIRST_ARG_SLOT) = *(SINT16 *)&ret[0];
+       break;
+     case FFI_TYPE_INT:
+     case FFI_TYPE_UINT32:
+       *(stack - FIRST_ARG_SLOT) = *(UINT32 *)&ret[0];
+       break;
+     case FFI_TYPE_SINT32:
+       *(stack - FIRST_ARG_SLOT) = *(SINT32 *)&ret[0];
+       break;
+     case FFI_TYPE_SINT64:
+     case FFI_TYPE_UINT64:
+       *(stack - FIRST_ARG_SLOT) = *(UINT32 *)&ret[0];
+       *(stack - FIRST_ARG_SLOT - 1) = *(UINT32 *)&ret[1];
+       break;
+ 
+     case FFI_TYPE_DOUBLE:
+       fldd(rvalue, fr4);
+       break;
+ 
+     case FFI_TYPE_FLOAT:
+       fldw(rvalue, fr4);
+       break;
+ 
+     case FFI_TYPE_STRUCT:
+       /* Don't need a return value, done by caller.  */
+       break;
+ 
+     case FFI_TYPE_SMALL_STRUCT1:
+       tmp = (void*)(stack -  FIRST_ARG_SLOT);
+       tmp += 4 - cif->rtype->size;
+       memcpy((void*)tmp, &ret[0], cif->rtype->size);
+       break;
+ 
+     case FFI_TYPE_SMALL_STRUCT2:
+       *(stack - FIRST_ARG_SLOT) = ret[0];
+       *(stack - FIRST_ARG_SLOT - 1) = ret[1];
+       break;
+ 
+     case FFI_TYPE_POINTER:
+     case FFI_TYPE_VOID:
+       break;
+ 
+     default:
+       debug(0, "assert with cif->flags: %d\n",cif->flags);
+       FFI_ASSERT(0);
+       break;
+     }
+   return FFI_OK;
+ }
+ 
+ /* Fill in a closure to refer to the specified fun and user_data.
+    cif specifies the argument and result types for fun.
+    The cif must already be prep'ed.  */
+ 
+ void ffi_closure_LINUX(void);
+ 
+ ffi_status
+ ffi_prep_closure (ffi_closure* closure,
+ 		  ffi_cif* cif,
+ 		  void (*fun)(ffi_cif*,void*,void**,void*),
+ 		  void *user_data)
+ {
+   UINT32 *tramp = (UINT32 *)(closure->tramp);
+ 
+   FFI_ASSERT (cif->abi == FFI_LINUX);
+ 
+   /* Make a small trampoline that will branch to our
+      handler function. Use PC-relative addressing.  */
+ 
+   tramp[0] = 0xeaa00000; /* b,l  .+8, %r21      ; %r21 <- pc+8 */
+   tramp[1] = 0xd6a01c1e; /* depi 0,31,2, %r21   ; mask priv bits */
+   tramp[2] = 0x4aa10028; /* ldw  20(%r21), %r1  ; load plabel */
+   tramp[3] = 0x36b53ff1; /* ldo  -8(%r21), %r21 ; get closure addr */
+   tramp[4] = 0x0c201096; /* ldw  0(%r1), %r22   ; address of handler */
+   tramp[5] = 0xeac0c000; /* bv	 %r0(%r22)      ; branch to handler */
+   tramp[6] = 0x0c281093; /* ldw  4(%r1), %r19   ; GP of handler */
+   tramp[7] = ((UINT32)(ffi_closure_LINUX) & ~2);
+ 
+   /* Flush d/icache -- have to flush up 2 two lines because of
+      alignment.  */
+   asm volatile (
+ 		"fdc 0(%0)\n"
+ 		"fdc %1(%0)\n"
+ 		"fic 0(%%sr4, %0)\n"
+ 		"fic %1(%%sr4, %0)\n"
+ 		"sync\n"
+ 		: : "r"((unsigned long)tramp & ~31), "r"(32 /* stride */));
+ 
+   closure->cif  = cif;
+   closure->user_data = user_data;
+   closure->fun  = fun;
+ 
+   return FFI_OK;
+ }
+ #endif
diff -Nrcpad gcc-3.4.3/libffi/src/pa/ffitarget.h gcc-4.0.0/libffi/src/pa/ffitarget.h
*** gcc-3.4.3/libffi/src/pa/ffitarget.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/src/pa/ffitarget.h	Fri Mar 19 22:34:17 2004
***************
*** 0 ****
--- 1,57 ----
+ /* -----------------------------------------------------------------*-C-*-
+    ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for hppa.
+ 
+    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
+ 
+ /* ---- System specific configurations ----------------------------------- */
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+ 
+ #ifdef PA
+   FFI_LINUX,
+   FFI_DEFAULT_ABI = FFI_LINUX,
+ #endif
+ 
+   FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
+ } ffi_abi;
+ #endif
+ 
+ /* ---- Definitions for closures ----------------------------------------- */
+ 
+ #define FFI_CLOSURES 1
+ #define FFI_NATIVE_RAW_API 0
+ 
+ #define FFI_TRAMPOLINE_SIZE 32
+ 
+ #define FFI_TYPE_SMALL_STRUCT1 -1
+ #define FFI_TYPE_SMALL_STRUCT2 -2
+ #endif
+ 
diff -Nrcpad gcc-3.4.3/libffi/src/pa/linux.S gcc-4.0.0/libffi/src/pa/linux.S
*** gcc-3.4.3/libffi/src/pa/linux.S	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/src/pa/linux.S	Sat Mar 20 11:58:01 2004
***************
*** 0 ****
--- 1,281 ----
+ /* -----------------------------------------------------------------------
+    linux.S - (c) 2003-2004 Randolph Chung <tausq@debian.org>
+ 
+    HPPA 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 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.
+    ----------------------------------------------------------------------- */
+ 
+ #define LIBFFI_ASM
+ #include <fficonfig.h>
+ #include <ffi.h>
+ 
+ 	.text
+ 	.align 4
+ 
+ 	/* void ffi_call_LINUX(void (*)(char *, extended_cif *),
+ 			       extended_cif *ecif,
+ 			       unsigned bytes,
+ 			       unsigned flags,
+ 			       unsigned *rvalue,
+ 			       void (*fn)());
+ 	 */
+ 
+ 	.export ffi_call_LINUX,code
+ 	.import ffi_prep_args_LINUX,code
+ 
+ 	.type ffi_call_LINUX, @function
+ .LFB1:
+ ffi_call_LINUX:
+ 	.proc
+ 	.callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4
+ 	.entry
+ 	stw %rp, -20(%sp)
+ 	copy %r3, %r1
+ .LCFI11:
+ 
+ 	copy %sp, %r3
+ .LCFI12:
+ 
+ 	/* Setup the stack for calling prep_args...
+ 	   We want the stack to look like this:
+ 
+ 	   [ Previous stack                            ] <- %r3
+ 
+ 	   [ 64-bytes register save area               ] <- %r4
+ 
+ 	   [ Stack space for actual call, passed as    ] <- %arg0
+ 	   [     arg0 to ffi_prep_args_LINUX           ]
+ 
+ 	   [ Stack for calling prep_args               ] <- %sp
+ 	 */
+ 
+ 	stwm %r1, 64(%sp)
+ 	stw %r4, 12(%r3)
+ .LCFI13:
+ 	copy %sp, %r4
+ 
+ 	addl %arg2, %r4, %arg0                  /* arg stack */
+ 	stw %arg3, -48(%r3)                     /* save flags; we need it later */
+ 
+ 	/* Call prep_args:
+ 	   %arg0(stack) -- set up above
+ 	   %arg1(ecif) -- same as incoming param
+ 	   %arg2(bytes) -- same as incoming param */
+ 	bl ffi_prep_args_LINUX,%r2
+ 	ldo 64(%arg0), %sp
+ 	ldo -64(%sp), %sp
+ 
+ 	/* now %sp should point where %arg0 was pointing.  */
+ 
+ 	/* Load the arguments that should be passed in registers
+ 	   The fp args were loaded by the prep_args function.  */
+ 	ldw -36(%sp), %arg0
+ 	ldw -40(%sp), %arg1
+ 	ldw -44(%sp), %arg2
+ 	ldw -48(%sp), %arg3
+ 
+ 	/* in case the function is going to return a structure
+ 	   we need to give it a place to put the result.  */
+ 	ldw -52(%r3), %ret0                     /* %ret0 <- rvalue */
+ 	ldw -56(%r3), %r22                      /* %r22 <- function to call */
+ 	bl $$dyncall, %r31                      /* Call the user function */
+ 	copy %r31, %rp
+ 
+ 	/* Prepare to store the result; we need to recover flags and rvalue.  */
+ 	ldw -48(%r3), %r21                      /* r21 <- flags */
+ 	ldw -52(%r3), %r20                      /* r20 <- rvalue */
+ 
+ 	/* Store the result according to the return type.  */
+ 
+ checksmst1:
+ 	comib,<>,n FFI_TYPE_SMALL_STRUCT1, %r21, checksmst2
+ 	/* There is maybe a better way to handle 3 byte structs.  */
+ 	sh2add %ret0,0,%ret0
+ 	sh2add %ret0,0,%ret0
+ 	sh2add %ret0,0,%ret0
+ 	sh2add %ret0,0,%ret0
+ 	b done
+ 	stw %ret0, 0(%r20)
+ 
+ checksmst2:
+ 	comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, checkint8
+ 	/* Up to now I don't have a way to handle 6/7 byte structs.
+ 	   The values are left bounded in the registers. In the struct
+ 	   itself they are left bounded.  */
+ 	stw %ret0, 0(%r20)
+ 	b done
+ 	stw %ret1, 4(%r20)
+ 
+ checkint8:
+ 	comib,<>,n FFI_TYPE_UINT8, %r21, checkint16
+ 	b done
+ 	stb %ret0, 0(%r20)
+ 
+ checkint16:
+ 	comib,<>,n FFI_TYPE_UINT16, %r21, checkint32
+ 	b done
+ 	sth %ret0, 0(%r20)
+ 
+ checkint32:
+ 	comib,<>,n FFI_TYPE_UINT32, %r21, checkint
+ 	b done
+ 	stw %ret0, 0(%r20)
+ 
+ checkint:
+ 	comib,<>,n FFI_TYPE_INT, %r21, checkll
+ 	b done
+ 	stw %ret0, 0(%r20)
+ 
+ checkll:
+ 	comib,<>,n FFI_TYPE_UINT64, %r21, checkdbl
+ 	stw %ret0, 0(%r20)
+ 	b done
+ 	stw %ret1, 4(%r20)
+ 
+ checkdbl:
+ 	comib,<>,n FFI_TYPE_DOUBLE, %r21, checkfloat
+ 	b done
+ 	fstd %fr4,0(%r20)
+ 
+ checkfloat:
+ 	comib,<>,n FFI_TYPE_FLOAT, %r21, done
+ 	fstw %fr4L,0(%r20)
+ 
+ 	/* structure returns are either handled by one of the
+ 	   INT/UINT64 cases above, or, if passed by pointer,
+ 	   is handled by the callee.  */
+ 
+ done:
+ 	/* all done, return */
+ 	copy %r4, %sp                           /* pop arg stack */
+ 	ldw 12(%r3), %r4
+ 	ldwm -64(%sp), %r3                      /* .. and pop stack */
+ 	ldw -20(%sp), %rp
+ 	bv %r0(%rp)
+ 	nop
+ 	.exit
+ 	.procend
+ .LFE1:
+ 
+ 	/* void ffi_closure_LINUX(void);
+ 	   Called with closure argument in %r21 */
+ 	.export ffi_closure_LINUX,code
+ 	.import ffi_closure_inner_LINUX,code
+ 
+ 	.type ffi_closure_LINUX, @function
+ .LFB2:
+ ffi_closure_LINUX:
+ 	.proc
+ 	.callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3
+ 	.entry
+ 
+ 	stw %rp, -20(%sp)
+ .LCFI20:
+ 	copy %r3, %r1
+ .LCFI21:
+ 	copy %sp, %r3
+ .LCFI22:
+ 	stwm %r1, 64(%sp)
+ 
+ 	/* Put arguments onto the stack and call ffi_closure_inner.  */
+ 	stw %arg0, -36(%r3)
+ 	stw %arg1, -40(%r3)
+ 	stw %arg2, -44(%r3)
+ 	stw %arg3, -48(%r3)
+ 
+ 	copy %r21, %arg0
+ 	bl ffi_closure_inner_LINUX, %r2
+ 	copy %r3, %arg1
+ 
+ 	ldwm -64(%sp), %r3
+ 	ldw -20(%sp), %rp
+ 	ldw -36(%sp), %ret0
+ 	bv %r0(%r2)
+ 	ldw -40(%sp), %ret1
+ 
+ 	.exit
+ 	.procend
+ .LFE2:
+ 
+ 	.section        ".eh_frame",EH_FRAME_FLAGS,@progbits
+ .Lframe1:
+ 	.word   .LECIE1-.LSCIE1 ;# Length of Common Information Entry
+ .LSCIE1:
+ 	.word   0x0     ;# CIE Identifier Tag
+ 	.byte   0x1     ;# CIE Version
+ 	.ascii "\0"     ;# CIE Augmentation
+ 	.uleb128 0x1    ;# CIE Code Alignment Factor
+ 	.sleb128 4      ;# CIE Data Alignment Factor
+ 	.byte   0x2     ;# CIE RA Column
+ 	.byte   0xc     ;# DW_CFA_def_cfa
+ 	.uleb128 0x1e
+ 	.uleb128 0x0
+ 	.align 4
+ .LECIE1:
+ .LSFDE1:
+ 	.word   .LEFDE1-.LASFDE1        ;# FDE Length
+ .LASFDE1:
+ 	.word   .LASFDE1-.Lframe1       ;# FDE CIE offset
+ 	.word   .LFB1   ;# FDE initial location
+ 	.word   .LFE1-.LFB1     ;# FDE address range
+ 
+ 	.byte   0x4     ;# DW_CFA_advance_loc4
+ 	.word   .LCFI11-.LFB1
+ 	.byte	0x83	;# DW_CFA_offset, column 0x3
+ 	.uleb128 0x0
+ 	.byte   0x11    ;# DW_CFA_offset_extended_sf; save r2 at [r30-20]
+ 	.uleb128 0x2
+ 	.sleb128 -5
+ 
+ 	.byte   0x4     ;# DW_CFA_advance_loc4
+ 	.word   .LCFI12-.LCFI11
+ 	.byte   0xd     ;# DW_CFA_def_cfa_register = r3
+ 	.uleb128 0x3
+ 
+ 	.byte   0x4     ;# DW_CFA_advance_loc4
+ 	.word   .LCFI13-.LCFI12
+ 	.byte	0x84	;# DW_CFA_offset, column 0x4
+ 	.uleb128 0x3
+ 
+ 	.align 4
+ .LEFDE1:
+ 
+ .LSFDE2:
+ 	.word   .LEFDE2-.LASFDE2        ;# FDE Length
+ .LASFDE2:
+ 	.word   .LASFDE2-.Lframe1       ;# FDE CIE offset
+ 	.word   .LFB2   ;# FDE initial location
+ 	.word   .LFE2-.LFB2     ;# FDE address range
+ 	.byte   0x4     ;# DW_CFA_advance_loc4
+ 	.word   .LCFI21-.LFB2
+ 	.byte   0x83    ;# DW_CFA_offset, column 0x3
+ 	.uleb128 0x0
+ 	.byte   0x11    ;# DW_CFA_offset_extended_sf
+ 	.uleb128 0x2
+ 	.sleb128 -5
+ 
+ 	.byte   0x4     ;# DW_CFA_advance_loc4
+ 	.word   .LCFI12-.LCFI11
+ 	.byte   0xd     ;# DW_CFA_def_cfa_register = r3
+ 	.uleb128 0x3
+ 
+ 	.align 4
+ .LEFDE2:
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/aix.S gcc-4.0.0/libffi/src/powerpc/aix.S
*** gcc-3.4.3/libffi/src/powerpc/aix.S	Tue Oct 21 19:01:56 2003
--- gcc-4.0.0/libffi/src/powerpc/aix.S	Thu Sep  2 21:07:21 2004
***************
*** 24,85 ****
     OTHER DEALINGS IN THE SOFTWARE.
     ----------------------------------------------------------------------- */
  
!         .set r0,0
!         .set r1,1
!         .set r2,2
!         .set r3,3
!         .set r4,4
!         .set r5,5
!         .set r6,6
!         .set r7,7
!         .set r8,8
!         .set r9,9
!         .set r10,10
!         .set r11,11
!         .set r12,12
!         .set r13,13
!         .set r14,14
!         .set r15,15
!         .set r16,16
!         .set r17,17
!         .set r18,18
!         .set r19,19
!         .set r20,20
!         .set r21,21
!         .set r22,22
!         .set r23,23
!         .set r24,24
!         .set r25,25
!         .set r26,26
!         .set r27,27
!         .set r28,28
!         .set r29,29
!         .set r30,30
!         .set r31,31
!         .set f0,0
!         .set f1,1
!         .set f2,2
!         .set f3,3
!         .set f4,4
!         .set f5,5
!         .set f6,6
!         .set f7,7
!         .set f8,8
!         .set f9,9
!         .set f10,10
!         .set f11,11
!         .set f12,12
!         .set f13,13
!         .set f14,14
!         .set f15,15
!         .set f16,16
!         .set f17,17
!         .set f18,18
!         .set f19,19
!         .set f20,20
!         .set f21,21
  
! #define LIBFFI_ASM	
  #include <fficonfig.h>
  #include <ffi.h>
  #define JUMPTARGET(name) name
--- 24,85 ----
     OTHER DEALINGS IN THE SOFTWARE.
     ----------------------------------------------------------------------- */
  
! 	.set r0,0
! 	.set r1,1
! 	.set r2,2
! 	.set r3,3
! 	.set r4,4
! 	.set r5,5
! 	.set r6,6
! 	.set r7,7
! 	.set r8,8
! 	.set r9,9
! 	.set r10,10
! 	.set r11,11
! 	.set r12,12
! 	.set r13,13
! 	.set r14,14
! 	.set r15,15
! 	.set r16,16
! 	.set r17,17
! 	.set r18,18
! 	.set r19,19
! 	.set r20,20
! 	.set r21,21
! 	.set r22,22
! 	.set r23,23
! 	.set r24,24
! 	.set r25,25
! 	.set r26,26
! 	.set r27,27
! 	.set r28,28
! 	.set r29,29
! 	.set r30,30
! 	.set r31,31
! 	.set f0,0
! 	.set f1,1
! 	.set f2,2
! 	.set f3,3
! 	.set f4,4
! 	.set f5,5
! 	.set f6,6
! 	.set f7,7
! 	.set f8,8
! 	.set f9,9
! 	.set f10,10
! 	.set f11,11
! 	.set f12,12
! 	.set f13,13
! 	.set f14,14
! 	.set f15,15
! 	.set f16,16
! 	.set f17,17
! 	.set f18,18
! 	.set f19,19
! 	.set f20,20
! 	.set f21,21
  
! #define LIBFFI_ASM
  #include <fficonfig.h>
  #include <ffi.h>
  #define JUMPTARGET(name) name
*************** ffi_call_AIX:
*** 104,110 ****
  	mr	r8,r1
  
  	/* Allocate the stack space we need.  */
! 	stwux	r1,r1,r4	
  
  	/* Save registers we use.  */
  	mflr	r9
--- 104,110 ----
  	mr	r8,r1
  
  	/* Allocate the stack space we need.  */
! 	stwux	r1,r1,r4
  
  	/* Save registers we use.  */
  	mflr	r9
*************** ffi_call_AIX:
*** 130,136 ****
  	lwz	r2,4(r12)
  	lwz	r12,0(r12)
  	mtctr	r12 // r12 holds address of _ffi_prep_args
! 	bctrl 
  	lwz     r2,20(r1)
  
  	/* Now do the call.  */
--- 130,136 ----
  	lwz	r2,4(r12)
  	lwz	r12,0(r12)
  	mtctr	r12 // r12 holds address of _ffi_prep_args
! 	bctrl
  	lwz     r2,20(r1)
  
  	/* Now do the call.  */
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/aix_closure.S gcc-4.0.0/libffi/src/powerpc/aix_closure.S
*** gcc-3.4.3/libffi/src/powerpc/aix_closure.S	Thu Sep 18 20:53:19 2003
--- gcc-4.0.0/libffi/src/powerpc/aix_closure.S	Thu Sep  2 21:07:21 2004
***************
*** 1,6 ****
  /* -----------------------------------------------------------------------
     aix_closure.S - Copyright (c) 2002 2003 Free Software Foundation, Inc.
!    based on darwin_closure.S 
  
     PowerPC Assembly glue.
  
--- 1,6 ----
  /* -----------------------------------------------------------------------
     aix_closure.S - Copyright (c) 2002 2003 Free Software Foundation, Inc.
!    based on darwin_closure.S
  
     PowerPC Assembly glue.
  
*************** ffi_closure_ASM:
*** 119,128 ****
  	in the parents outgoing area  */
  	stw   r3, 200(r1)
  	stw   r4, 204(r1)
! 	stw   r5, 208(r1) 
  	stw   r6, 212(r1)
  	stw   r7, 216(r1)
! 	stw   r8, 220(r1) 
  	stw   r9, 224(r1)
  	stw   r10, 228(r1)
  
--- 119,128 ----
  	in the parents outgoing area  */
  	stw   r3, 200(r1)
  	stw   r4, 204(r1)
! 	stw   r5, 208(r1)
  	stw   r6, 212(r1)
  	stw   r7, 216(r1)
! 	stw   r8, 220(r1)
  	stw   r9, 224(r1)
  	stw   r10, 228(r1)
  
*************** ffi_closure_ASM:
*** 135,145 ****
  	stfd  f6, 96(r1)
  	stfd  f7, 104(r1)
  	stfd  f8, 112(r1)
! 	stfd  f9, 120(r1) 
! 	stfd  f10, 128(r1) 
! 	stfd  f11, 136(r1) 
! 	stfd  f12, 144(r1) 
! 	stfd  f13, 152(r1)  
  
  	/* set up registers for the routine that actually does the work */
  	/* get the context pointer from the trampoline */
--- 135,145 ----
  	stfd  f6, 96(r1)
  	stfd  f7, 104(r1)
  	stfd  f8, 112(r1)
! 	stfd  f9, 120(r1)
! 	stfd  f10, 128(r1)
! 	stfd  f11, 136(r1)
! 	stfd  f12, 144(r1)
! 	stfd  f13, 152(r1)
  
  	/* set up registers for the routine that actually does the work */
  	/* get the context pointer from the trampoline */
*************** L..60:
*** 191,197 ****
  
  
  /* case double */
! L..46:   
  	lfd f1,0(r5)
  	b L..44
  
--- 191,197 ----
  
  
  /* case double */
! L..46:
  	lfd f1,0(r5)
  	b L..44
  
*************** L..57:
*** 233,239 ****
  	b L..44
  
  /* case unsigned int16 */
! L..58:	
  	addi r5,r5,2
  	lhz r3,0(r5)
  
--- 233,239 ----
  	b L..44
  
  /* case unsigned int16 */
! L..58:
  	addi r5,r5,2
  	lhz r3,0(r5)
  
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/asm.h gcc-4.0.0/libffi/src/powerpc/asm.h
*** gcc-3.4.3/libffi/src/powerpc/asm.h	Sun Aug  8 13:27:19 1999
--- gcc-4.0.0/libffi/src/powerpc/asm.h	Thu Sep  2 21:07:21 2004
***************
*** 1,9 ****
  /* -----------------------------------------------------------------------
     asm.h - Copyright (c) 1998 Geoffrey Keating
-    
-    PowerPC Assembly glue.
  
!    $Id: asm.h,v 1.1.1.1 1998/11/29 16:48:16 green Exp $
  
     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
--- 1,7 ----
  /* -----------------------------------------------------------------------
     asm.h - Copyright (c) 1998 Geoffrey Keating
  
!    PowerPC Assembly glue.
  
     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
***************
*** 50,61 ****
  #ifdef PIC
  #define CALL_MCOUNT							      \
    .pushsection;								      \
!   .section ".data";    							      \
    .align ALIGNARG(2);							      \
  0:.long 0;								      \
    .previous;								      \
    mflr  %r0;								      \
!   stw   %r0,4(%r1);	       						      \
    bl    _GLOBAL_OFFSET_TABLE_@local-4;					      \
    mflr  %r11;								      \
    lwz   %r0,0b@got(%r11);						      \
--- 48,59 ----
  #ifdef PIC
  #define CALL_MCOUNT							      \
    .pushsection;								      \
!   .section ".data";							      \
    .align ALIGNARG(2);							      \
  0:.long 0;								      \
    .previous;								      \
    mflr  %r0;								      \
!   stw   %r0,4(%r1);							      \
    bl    _GLOBAL_OFFSET_TABLE_@local-4;					      \
    mflr  %r11;								      \
    lwz   %r0,0b@got(%r11);						      \
***************
*** 67,74 ****
  0:.long 0;								      \
    .previous;								      \
    mflr  %r0;								      \
!   lis   %r11,0b@ha;		       					      \
!   stw   %r0,4(%r1);	       						      \
    addi  %r0,%r11,0b@l;							      \
    bl    JUMPTARGET(_mcount);
  #endif /* PIC */
--- 65,72 ----
  0:.long 0;								      \
    .previous;								      \
    mflr  %r0;								      \
!   lis   %r11,0b@ha;							      \
!   stw   %r0,4(%r1);							      \
    addi  %r0,%r11,0b@l;							      \
    bl    JUMPTARGET(_mcount);
  #endif /* PIC */
***************
*** 125,128 ****
  
  /* Local labels stripped out by the linker.  */
  #define L(x) .L##x
- 
--- 123,125 ----
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/darwin.S gcc-4.0.0/libffi/src/powerpc/darwin.S
*** gcc-3.4.3/libffi/src/powerpc/darwin.S	Tue Oct 21 19:01:56 2003
--- gcc-4.0.0/libffi/src/powerpc/darwin.S	Sat Sep  4 22:09:19 2004
***************
*** 1,5 ****
--- 1,6 ----
  /* -----------------------------------------------------------------------
     darwin.S - Copyright (c) 2000 John Hornkvist
+ 	      Copyright (c) 2004 Free Software Foundation, Inc.
  
     PowerPC Assembly glue.
  
***************
*** 39,46 ****
  	.align 2
  _ffi_call_DARWIN:
  LFB0:
! 	mr      r12,r8		/* We only need r12 until the call,
! 				   so it doesn't have to be saved...  */
  LFB1:
  	/* Save the old stack pointer as AP.  */
  	mr	r8,r1
--- 40,47 ----
  	.align 2
  _ffi_call_DARWIN:
  LFB0:
! 	mr   	r12,r8	/* We only need r12 until the call,
! 			   so it doesn't have to be saved.  */
  LFB1:
  	/* Save the old stack pointer as AP.  */
  	mr	r8,r1
*************** LCFI0:
*** 51,66 ****
  	/* Save registers we use.  */
  	mflr	r9
  
! 	stw	r28,-16(r8)
  	stw	r29,-12(r8)
! 	stw	r30, -8(r8)
! 	stw	r31, -4(r8)
  
! 	stw	r9,  8(r8)
! 	stw	r2, 20(r1)
  LCFI1:
  
! 	/* Save arguments over call...  */
  	mr	r31,r5	/* flags,  */
  	mr	r30,r6	/* rvalue,  */
  	mr	r29,r7	/* function address,  */
--- 52,67 ----
  	/* Save registers we use.  */
  	mflr	r9
  
! 	stw	r28,-16(r8)	
  	stw	r29,-12(r8)
! 	stw	r30,-8(r8)
! 	stw	r31,-4(r8)
  
! 	stw	r9,8(r8)
! 	stw	r2,20(r1)
  LCFI1:
  
! 	/* Save arguments over call.  */
  	mr	r31,r5	/* flags,  */
  	mr	r30,r6	/* rvalue,  */
  	mr	r29,r7	/* function address,  */
*************** LCFI2:
*** 70,76 ****
  	mr	r4,r1
  	li	r9,0
  
! 	mtctr	r12 // r12 holds address of _ffi_prep_args
  	bctrl
  	lwz     r2,20(r1)
  
--- 71,77 ----
  	mr	r4,r1
  	li	r9,0
  
! 	mtctr	r12 /* r12 holds address of _ffi_prep_args.  */
  	bctrl
  	lwz     r2,20(r1)
  
*************** LCFI2:
*** 81,99 ****
  	mtctr	r29
  	/* Load all those argument registers.
  	   We have set up a nice stack frame, just load it into registers.  */
! 	lwz     r3, 20+(1*4)(r1)
! 	lwz     r4, 20+(2*4)(r1)
! 	lwz     r5, 20+(3*4)(r1)
! 	lwz     r6, 20+(4*4)(r1)
  	nop
! 	lwz     r7, 20+(5*4)(r1)
! 	lwz     r8, 20+(6*4)(r1)
! 	lwz     r9, 20+(7*4)(r1)
  	lwz     r10,20+(8*4)(r1)
  
  L1:
  	/* Load all the FP registers.  */
! 	bf	6,L2 // 2f + 0x18
  	lfd	f1,-16-(13*8)(r28)
  	lfd	f2,-16-(12*8)(r28)
  	lfd	f3,-16-(11*8)(r28)
--- 82,100 ----
  	mtctr	r29
  	/* Load all those argument registers.
  	   We have set up a nice stack frame, just load it into registers.  */
! 	lwz     r3,20+(1*4)(r1)
! 	lwz     r4,20+(2*4)(r1)
! 	lwz     r5,20+(3*4)(r1)
! 	lwz     r6,20+(4*4)(r1)
  	nop
! 	lwz     r7,20+(5*4)(r1)
! 	lwz     r8,20+(6*4)(r1)
! 	lwz     r9,20+(7*4)(r1)
  	lwz     r10,20+(8*4)(r1)
  
  L1:
  	/* Load all the FP registers.  */
! 	bf	6,L2	/* No floats to load.  */
  	lfd	f1,-16-(13*8)(r28)
  	lfd	f2,-16-(12*8)(r28)
  	lfd	f3,-16-(11*8)(r28)
*************** L1:
*** 112,119 ****
  	lfd     f13,-16-(1*8)(r28)
  
  L2:
! 	mr	r12,r29 /* Put the target address in r12 as specified.  */
! 	mtctr  r12
  	nop
  	nop
  	/* Make the call.  */
--- 113,120 ----
  	lfd     f13,-16-(1*8)(r28)
  
  L2:
! 	mr	r12,r29	/* Put the target address in r12 as specified.  */
! 	mtctr  	r12
  	nop
  	nop
  	/* Make the call.  */
*************** L2:
*** 128,153 ****
  	bf	28,L(done_return_value)
  	stw	r4,4(r30)
  
! 	/* Fall through...  */
  
  L(done_return_value):
  	/* Restore the registers we used and return.  */
! 	lwz	r9,   8(r28)
! 	lwz	r31,  -4(r28)
  	mtlr	r9
! 	lwz	r30, -8(r28)
  	lwz	r29,-12(r28)
  	lwz	r28,-16(r28)
  	lwz	r1,0(r1)
  	blr
  
  L(fp_return_value):
  	bf	28,L(float_return_value)
  	stfd	f1,0(r30)
  	b	L(done_return_value)
  L(float_return_value):
  	stfs	f1,0(r30)
  	b	L(done_return_value)
  LFE1:
  /* END(_ffi_call_DARWIN)  */
  
--- 129,165 ----
  	bf	28,L(done_return_value)
  	stw	r4,4(r30)
  
! 	/* Fall through.  */
  
  L(done_return_value):
  	/* Restore the registers we used and return.  */
! 	lwz	r9,8(r28)
! 	lwz	r31,-4(r28)
  	mtlr	r9
! 	lwz	r30,-8(r28)
  	lwz	r29,-12(r28)
  	lwz	r28,-16(r28)
  	lwz	r1,0(r1)
  	blr
  
  L(fp_return_value):
+ 	/* Do we have long double to store?  */
+ 	bf	31,L(fd_return_value)
+ 	stfd	f1,0(r30)
+ 	stfd	f2,8(r30)
+ 	b	L(done_return_value)
+ 
+ L(fd_return_value):
+ 	/* Do we have double to store?  */
  	bf	28,L(float_return_value)
  	stfd	f1,0(r30)
  	b	L(done_return_value)
+ 
  L(float_return_value):
+ 	/* We only have a float to store.  */
  	stfs	f1,0(r30)
  	b	L(done_return_value)
+ 
  LFE1:
  /* END(_ffi_call_DARWIN)  */
  
*************** _ffi_call_AIX:
*** 162,169 ****
  /* END(_ffi_call_AIX)  */
  
  .data
! .section __TEXT,__eh_frame
! Lframe1:
  	.set	L$set$0,LECIE1-LSCIE1
  	.long	L$set$0	; Length of Common Information Entry
  LSCIE1:
--- 174,181 ----
  /* END(_ffi_call_AIX)  */
  
  .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
  LSCIE1:
*************** LSCIE1:
*** 173,192 ****
  	.byte	0x1	; uleb128 0x1; CIE Code Alignment Factor
  	.byte	0x7c	; sleb128 -4; CIE Data Alignment Factor
  	.byte	0x41	; CIE RA Column
! 	.byte   0x1     ; uleb128 0x1; Augmentation size
! 	.byte   0x10    ; FDE Encoding (pcrel)
  	.byte	0xc	; DW_CFA_def_cfa
  	.byte	0x1	; uleb128 0x1
  	.byte	0x0	; uleb128 0x0
  	.align	2
  LECIE1:
  LSFDE1:
  	.set	L$set$1,LEFDE1-LASFDE1
  	.long	L$set$1	; FDE Length
  LASFDE1:
! 	.set	L$set$2,LASFDE1-Lframe1
! 	.long	L$set$2	; FDE CIE offset
! 	.long	LFB0-.	; FDE initial location
  	.set	L$set$3,LFE1-LFB0
  	.long	L$set$3	; FDE address range
  	.byte   0x0     ; uleb128 0x0; Augmentation size
--- 185,205 ----
  	.byte	0x1	; uleb128 0x1; CIE Code Alignment Factor
  	.byte	0x7c	; sleb128 -4; CIE Data Alignment Factor
  	.byte	0x41	; CIE RA Column
! 	.byte	0x1	; uleb128 0x1; Augmentation size
! 	.byte	0x90	; FDE Encoding (indirect pcrel)
  	.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:
  LSFDE1:
  	.set	L$set$1,LEFDE1-LASFDE1
  	.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
*************** LASFDE1:
*** 216,218 ****
--- 229,235 ----
  	.byte	0x1c	; uleb128 0x1c
  	.align 2
  LEFDE1:
+ .data
+ 	.align 2
+ LLFB0$non_lazy_ptr:
+ 	.long   LFB0
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/darwin_closure.S gcc-4.0.0/libffi/src/powerpc/darwin_closure.S
*** gcc-3.4.3/libffi/src/powerpc/darwin_closure.S	Thu Sep 18 19:35:46 2003
--- gcc-4.0.0/libffi/src/powerpc/darwin_closure.S	Sat Sep  4 22:09:20 2004
***************
*** 1,5 ****
  /* -----------------------------------------------------------------------
!    darwin_closure.S - Copyright (c) 2002 2003 Free Software Foundation,
     Inc. based on ppc_closure.S
  
     PowerPC Assembly glue.
--- 1,5 ----
  /* -----------------------------------------------------------------------
!    darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation,
     Inc. based on ppc_closure.S
  
     PowerPC Assembly glue.
***************
*** 36,49 ****
  	.align 2
  _ffi_closure_ASM:
  LFB1:
! 	mflr	r0			/* extract return address  */
! 	stw	r0, 8(r1)		/* save the return address  */
  LCFI0:
  	/* 24 Bytes (Linkage Area)
  	   32 Bytes (outgoing parameter area, always reserved)
  	   104 Bytes (13*8 from FPR)
! 	   8 Bytes (result)
! 	   168 Bytes  */
  
  	stwu	r1,-176(r1)	/* skip over caller save area
  				keep stack aligned to 16.  */
--- 36,49 ----
  	.align 2
  _ffi_closure_ASM:
  LFB1:
! 	mflr	r0		/* extract return address  */
! 	stw	r0,8(r1)	/* save the return address  */
  LCFI0:
  	/* 24 Bytes (Linkage Area)
  	   32 Bytes (outgoing parameter area, always reserved)
  	   104 Bytes (13*8 from FPR)
! 	   16 Bytes (result)
! 	   176 Bytes  */
  
  	stwu	r1,-176(r1)	/* skip over caller save area
  				keep stack aligned to 16.  */
*************** LCFI1:
*** 53,81 ****
  
  	/* We store gpr 3 to gpr 10 (aligned to 4)
  	   in the parents outgoing area.  */
! 	stw   r3, 200(r1)
! 	stw   r4, 204(r1)
! 	stw   r5, 208(r1)
! 	stw   r6, 212(r1)
! 	stw   r7, 216(r1)
! 	stw   r8, 220(r1)
! 	stw   r9, 224(r1)
! 	stw   r10, 228(r1)
  
  	/* We save fpr 1 to fpr 13. (aligned to 8)  */
! 	stfd  f1, 56(r1)
! 	stfd  f2, 64(r1)
! 	stfd  f3, 72(r1)
! 	stfd  f4, 80(r1)
! 	stfd  f5, 88(r1)
! 	stfd  f6, 96(r1)
! 	stfd  f7, 104(r1)
! 	stfd  f8, 112(r1)
! 	stfd  f9, 120(r1)
! 	stfd  f10, 128(r1)
! 	stfd  f11, 136(r1)
! 	stfd  f12, 144(r1)
! 	stfd  f13, 152(r1)
  
  	/* Set up registers for the routine that actually does the work
  	   get the context pointer from the trampoline.  */
--- 53,81 ----
  
  	/* We store gpr 3 to gpr 10 (aligned to 4)
  	   in the parents outgoing area.  */
! 	stw   r3,200(r1)
! 	stw   r4,204(r1)
! 	stw   r5,208(r1)
! 	stw   r6,212(r1)
! 	stw   r7,216(r1)
! 	stw   r8,220(r1)
! 	stw   r9,224(r1)
! 	stw   r10,228(r1)
  
  	/* We save fpr 1 to fpr 13. (aligned to 8)  */
! 	stfd  f1,56(r1)
! 	stfd  f2,64(r1)
! 	stfd  f3,72(r1)
! 	stfd  f4,80(r1)
! 	stfd  f5,88(r1)
! 	stfd  f6,96(r1)
! 	stfd  f7,104(r1)
! 	stfd  f8,112(r1)
! 	stfd  f9,120(r1)
! 	stfd  f10,128(r1)
! 	stfd  f11,136(r1)
! 	stfd  f12,144(r1)
! 	stfd  f13,152(r1)
  
  	/* Set up registers for the routine that actually does the work
  	   get the context pointer from the trampoline.  */
*************** Lret_type3:
*** 150,158 ****
  /* case FFI_TYPE_LONGDOUBLE  */
  Lret_type4:
  	lfd	f1,0(r5)
  	b	Lfinish
  	nop
- 	nop
  
  /* case FFI_TYPE_UINT8  */
  Lret_type5:
--- 150,158 ----
  /* case FFI_TYPE_LONGDOUBLE  */
  Lret_type4:
  	lfd	f1,0(r5)
+ 	lfd	f2,8(r5)
  	b	Lfinish
  	nop
  
  /* case FFI_TYPE_UINT8  */
  Lret_type5:
*************** Lret_type14:
*** 226,241 ****
  
  /* case done  */
  Lfinish:
! 	addi	r1,r1,176		/* Restore stack pointer.  */
! 	lwz	r0,8(r1)		/* Get return address.  */
! 	mtlr	r0			/* Reset link register.  */
  	blr
  
  /* END(ffi_closure_ASM)  */
  
  .data
! .section __TEXT,__eh_frame
! Lframe1:
  	.set	L$set$0,LECIE1-LSCIE1
  	.long	L$set$0	; Length of Common Information Entry
  LSCIE1:
--- 226,241 ----
  
  /* case done  */
  Lfinish:
! 	addi	r1,r1,176	/* Restore stack pointer.  */
! 	lwz	r0,8(r1)	/* Get return address.  */
! 	mtlr	r0		/* Reset link register.  */
  	blr
  
  /* 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
  LSCIE1:
*************** LSCIE1:
*** 246,265 ****
  	.byte	0x7c	; sleb128 -4; CIE Data Alignment Factor
  	.byte	0x41	; CIE RA Column
  	.byte	0x1	; uleb128 0x1; Augmentation size
! 	.byte	0x10	; FDE Encoding (pcrel)
  	.byte	0xc	; DW_CFA_def_cfa
  	.byte	0x1	; uleb128 0x1
  	.byte	0x0	; uleb128 0x0
  	.align	2
  LECIE1:
  LSFDE1:
  	.set	L$set$1,LEFDE1-LASFDE1
  	.long	L$set$1	; FDE Length
  
  LASFDE1:
! 	.set	L$set$2,LASFDE1-Lframe1
! 	.long	L$set$2	; FDE CIE offset
! 	.long	LFB1-.	; FDE initial location
  	.set	L$set$3,LFE1-LFB1
  	.long	L$set$3	; FDE address range
  	.byte   0x0     ; uleb128 0x0; Augmentation size
--- 246,266 ----
  	.byte	0x7c	; sleb128 -4; CIE Data Alignment Factor
  	.byte	0x41	; CIE RA Column
  	.byte	0x1	; uleb128 0x1; Augmentation size
! 	.byte	0x90	; FDE Encoding (indirect pcrel)
  	.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:
  LSFDE1:
  	.set	L$set$1,LEFDE1-LASFDE1
  	.long	L$set$1	; FDE Length
  
  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
*************** LO$ffi_closure_helper_DARWIN:
*** 297,299 ****
--- 298,304 ----
  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
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/ffi.c gcc-4.0.0/libffi/src/powerpc/ffi.c
*** gcc-3.4.3/libffi/src/powerpc/ffi.c	Fri Mar 12 01:35:32 2004
--- gcc-4.0.0/libffi/src/powerpc/ffi.c	Wed Feb 23 14:05:12 2005
***************
*** 1,9 ****
  /* -----------------------------------------------------------------------
     ffi.c - Copyright (c) 1998 Geoffrey Keating
-    
-    PowerPC Foreign Function Interface 
  
!    $Id: ffi.c,v 1.1.1.1 1998/11/29 16:48:16 green Exp $
  
     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
--- 1,7 ----
  /* -----------------------------------------------------------------------
     ffi.c - Copyright (c) 1998 Geoffrey Keating
  
!    PowerPC Foreign Function Interface
  
     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
*************** enum { ASM_NEEDS_REGISTERS = 4 };
*** 67,73 ****
  
     |   Return address from ffi_call_SYSV 4bytes	|	higher addresses
     |--------------------------------------------|
!    |   Previous backchain pointer	4	| 	stack pointer here
     |--------------------------------------------|<+ <<<	on entry to
     |   Saved r28-r31			4*4	| |	ffi_call_SYSV
     |--------------------------------------------| |
--- 65,71 ----
  
     |   Return address from ffi_call_SYSV 4bytes	|	higher addresses
     |--------------------------------------------|
!    |   Previous backchain pointer	4	|       stack pointer here
     |--------------------------------------------|<+ <<<	on entry to
     |   Saved r28-r31			4*4	| |	ffi_call_SYSV
     |--------------------------------------------| |
*************** enum { ASM_NEEDS_REGISTERS = 4 };
*** 84,90 ****
     |   Current backchain pointer	4	|-/	during
     |--------------------------------------------|   <<<	ffi_call_SYSV
  
!    */
  
  /*@-exportheader@*/
  void ffi_prep_args_SYSV(extended_cif *ecif, unsigned *const stack)
--- 82,88 ----
     |   Current backchain pointer	4	|-/	during
     |--------------------------------------------|   <<<	ffi_call_SYSV
  
! */
  
  /*@-exportheader@*/
  void ffi_prep_args_SYSV(extended_cif *ecif, unsigned *const stack)
*************** void ffi_prep_args_SYSV(extended_cif *ec
*** 92,100 ****
  {
    const unsigned bytes = ecif->cif->bytes;
    const unsigned flags = ecif->cif->flags;
!   
    /* 'stacktop' points at the previous backchain pointer.  */
!   unsigned *const stacktop = stack + (ecif->cif->bytes / sizeof(unsigned));
  
    /* 'gpr_base' points at the space for gpr3, and grows upwards as
       we use GPR registers.  */
--- 90,98 ----
  {
    const unsigned bytes = ecif->cif->bytes;
    const unsigned flags = ecif->cif->flags;
! 
    /* 'stacktop' points at the previous backchain pointer.  */
!   unsigned *const stacktop = stack + (bytes / sizeof(unsigned));
  
    /* 'gpr_base' points at the space for gpr3, and grows upwards as
       we use GPR registers.  */
*************** void ffi_prep_args_SYSV(extended_cif *ec
*** 131,140 ****
  
    /* Deal with return values that are actually pass-by-reference.  */
    if (flags & FLAG_RETVAL_REFERENCE)
!   {
!     *gpr_base++ = (unsigned long)(char *)ecif->rvalue;
!     intarg_count++;
!   }
  
    /* Now for the arguments.  */
    p_argv = ecif->avalue;
--- 129,138 ----
  
    /* Deal with return values that are actually pass-by-reference.  */
    if (flags & FLAG_RETVAL_REFERENCE)
!     {
!       *gpr_base++ = (unsigned long)(char *)ecif->rvalue;
!       intarg_count++;
!     }
  
    /* Now for the arguments.  */
    p_argv = ecif->avalue;
*************** void ffi_prep_args_SYSV(extended_cif *ec
*** 192,209 ****
  	    }
  	  else
  	    {
!               /* whoops: abi states only certain register pairs
!                * can be used for passing long long int
!                * specifically (r3,r4), (r5,r6), (r7,r8), 
!                * (r9,r10) and if next arg is long long but
!                * not correct starting register of pair then skip
!                * until the proper starting register
  	       */
!               if (intarg_count%2 != 0)
!                 {
!                   intarg_count ++;
!                   gpr_base++;
!                 }
  	      *(long long *)gpr_base = *(long long *)*p_argv;
  	      gpr_base += 2;
  	    }
--- 190,207 ----
  	    }
  	  else
  	    {
! 	      /* whoops: abi states only certain register pairs
! 	       * can be used for passing long long int
! 	       * specifically (r3,r4), (r5,r6), (r7,r8),
! 	       * (r9,r10) and if next arg is long long but
! 	       * not correct starting register of pair then skip
! 	       * until the proper starting register
  	       */
! 	      if (intarg_count%2 != 0)
! 		{
! 		  intarg_count ++;
! 		  gpr_base++;
! 		}
  	      *(long long *)gpr_base = *(long long *)*p_argv;
  	      gpr_base += 2;
  	    }
*************** void ffi_prep_args_SYSV(extended_cif *ec
*** 217,223 ****
  	  struct_copy_size = ((*ptr)->size + 15) & ~0xF;
  	  copy_space -= struct_copy_size;
  	  memcpy(copy_space, (char *)*p_argv, (*ptr)->size);
! 	  
  	  gprvalue = (unsigned long)copy_space;
  
  	  FFI_ASSERT(copy_space > (char *)next_arg);
--- 215,221 ----
  	  struct_copy_size = ((*ptr)->size + 15) & ~0xF;
  	  copy_space -= struct_copy_size;
  	  memcpy(copy_space, (char *)*p_argv, (*ptr)->size);
! 
  	  gprvalue = (unsigned long)copy_space;
  
  	  FFI_ASSERT(copy_space > (char *)next_arg);
*************** enum { ASM_NEEDS_REGISTERS64 = 4 };
*** 276,282 ****
     |--------------------------------------------|
     |   CR save area			8bytes	|
     |--------------------------------------------|
!    |   Previous backchain pointer	8	| 	stack pointer here
     |--------------------------------------------|<+ <<<	on entry to
     |   Saved r28-r31			4*8	| |	ffi_call_LINUX64
     |--------------------------------------------| |
--- 274,280 ----
     |--------------------------------------------|
     |   CR save area			8bytes	|
     |--------------------------------------------|
!    |   Previous backchain pointer	8	|	stack pointer here
     |--------------------------------------------|<+ <<<	on entry to
     |   Saved r28-r31			4*8	| |	ffi_call_LINUX64
     |--------------------------------------------| |
*************** enum { ASM_NEEDS_REGISTERS64 = 4 };
*** 299,305 ****
     |   Current backchain pointer	8	|-/	during
     |--------------------------------------------|   <<<	ffi_call_LINUX64
  
!    */
  
  /*@-exportheader@*/
  void hidden ffi_prep_args64(extended_cif *ecif, unsigned long *const stack)
--- 297,303 ----
     |   Current backchain pointer	8	|-/	during
     |--------------------------------------------|   <<<	ffi_call_LINUX64
  
! */
  
  /*@-exportheader@*/
  void hidden ffi_prep_args64(extended_cif *ecif, unsigned long *const stack)
*************** void hidden ffi_prep_args64(extended_cif
*** 314,320 ****
    /* 'next_arg' points at the space for gpr3, and grows upwards as
       we use GPR registers, then continues at rest.  */
    unsigned long *const gpr_base = stacktop - ASM_NEEDS_REGISTERS64
! 				  - NUM_GPR_ARG_REGISTERS64;
    unsigned long *const gpr_end = gpr_base + NUM_GPR_ARG_REGISTERS64;
    unsigned long *const rest = stack + 6 + NUM_GPR_ARG_REGISTERS64;
    unsigned long *next_arg = gpr_base;
--- 312,318 ----
    /* 'next_arg' points at the space for gpr3, and grows upwards as
       we use GPR registers, then continues at rest.  */
    unsigned long *const gpr_base = stacktop - ASM_NEEDS_REGISTERS64
!     - NUM_GPR_ARG_REGISTERS64;
    unsigned long *const gpr_end = gpr_base + NUM_GPR_ARG_REGISTERS64;
    unsigned long *const rest = stack + 6 + NUM_GPR_ARG_REGISTERS64;
    unsigned long *next_arg = gpr_base;
*************** void hidden ffi_prep_args64(extended_cif
*** 434,440 ****
  	case FFI_TYPE_SINT32:
  	  gprvalue = *(signed int *)*p_argv;
  	  goto putgpr;
! 	
  	case FFI_TYPE_UINT64:
  	case FFI_TYPE_SINT64:
  	case FFI_TYPE_POINTER:
--- 432,438 ----
  	case FFI_TYPE_SINT32:
  	  gprvalue = *(signed int *)*p_argv;
  	  goto putgpr;
! 
  	case FFI_TYPE_UINT64:
  	case FFI_TYPE_SINT64:
  	case FFI_TYPE_POINTER:
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 466,472 ****
    unsigned type = cif->rtype->type;
  
    if (cif->abi != FFI_LINUX64)
!     {    
        /* All the machine-independent calculation of cif->bytes will be wrong.
  	 Redo the calculation for SYSV.  */
  
--- 464,470 ----
    unsigned type = cif->rtype->type;
  
    if (cif->abi != FFI_LINUX64)
!     {
        /* All the machine-independent calculation of cif->bytes will be wrong.
  	 Redo the calculation for SYSV.  */
  
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 497,506 ****
       - 32-bit (or less) integer values are returned in gpr3;
       - Structures of size <= 4 bytes also returned in gpr3;
       - 64-bit integer values and structures between 5 and 8 bytes are returned
!        in gpr3 and gpr4;
       - Single/double FP values are returned in fpr1;
       - Larger structures and long double (if not equivalent to double) values
!        are allocated space and a pointer is passed as the first argument.
       For LINUX64:
       - integer values in gpr3;
       - Structures/Unions by reference;
--- 495,504 ----
       - 32-bit (or less) integer values are returned in gpr3;
       - Structures of size <= 4 bytes also returned in gpr3;
       - 64-bit integer values and structures between 5 and 8 bytes are returned
!      in gpr3 and gpr4;
       - Single/double FP values are returned in fpr1;
       - Larger structures and long double (if not equivalent to double) values
!      are allocated space and a pointer is passed as the first argument.
       For LINUX64:
       - integer values in gpr3;
       - Structures/Unions by reference;
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 521,533 ****
  
      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:
--- 519,533 ----
  
      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:
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 573,582 ****
  	    /* '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.  */
  	    if (intarg_count == NUM_GPR_ARG_REGISTERS-1
! 		|| (intarg_count >= NUM_GPR_ARG_REGISTERS
! 		    && intarg_count%2 != 0))
  	      intarg_count++;
  	    intarg_count += 2;
  	    break;
--- 573,586 ----
  	    /* '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),
! 	       (r7,r8), (r9,r10).
! 	    */
  	    if (intarg_count == NUM_GPR_ARG_REGISTERS-1
! 		|| intarg_count%2 != 0)
  	      intarg_count++;
  	    intarg_count += 2;
  	    break;
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 672,702 ****
  
  /*@-declundef@*/
  /*@-exportheader@*/
! extern void ffi_call_SYSV(/*@out@*/ extended_cif *, 
! 			  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@*/
  
! void ffi_call(/*@dependent@*/ ffi_cif *cif, 
! 	      void (*fn)(), 
! 	      /*@out@*/ void *rvalue, 
  	      /*@dependent@*/ void **avalue)
  {
    extended_cif ecif;
  
    ecif.cif = cif;
    ecif.avalue = avalue;
!   
    /* 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@*/
--- 676,706 ----
  
  /*@-declundef@*/
  /*@-exportheader@*/
! extern void ffi_call_SYSV(/*@out@*/ extended_cif *,
! 			  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@*/
  
! void ffi_call(/*@dependent@*/ ffi_cif *cif,
! 	      void (*fn)(),
! 	      /*@out@*/ void *rvalue,
  	      /*@dependent@*/ void **avalue)
  {
    extended_cif ecif;
  
    ecif.cif = cif;
    ecif.avalue = avalue;
! 
    /* 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@*/
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 705,719 ****
      }
    else
      ecif.rvalue = rvalue;
!     
!   
!   switch (cif->abi) 
      {
  #ifndef POWERPC64
      case FFI_SYSV:
      case FFI_GCC_SYSV:
        /*@-usedef@*/
!       ffi_call_SYSV(&ecif, -cif->bytes, 
  		    cif->flags, ecif.rvalue, fn);
        /*@=usedef@*/
        break;
--- 709,723 ----
      }
    else
      ecif.rvalue = rvalue;
! 
! 
!   switch (cif->abi)
      {
  #ifndef POWERPC64
      case FFI_SYSV:
      case FFI_GCC_SYSV:
        /*@-usedef@*/
!       ffi_call_SYSV(&ecif, -cif->bytes,
  		    cif->flags, ecif.rvalue, fn);
        /*@=usedef@*/
        break;
*************** static void flush_icache(char * addr1, i
*** 742,749 ****
    int i;
    char * addr;
    for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE) {
!      addr = addr1 + i;
!      __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;" : : "r"(addr) : "memory");
    }
    addr = addr1 + size - 1;
    __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;" "sync;" "isync;" : : "r"(addr) : "memory");
--- 746,753 ----
    int i;
    char * addr;
    for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE) {
!     addr = addr1 + i;
!     __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;" : : "r"(addr) : "memory");
    }
    addr = addr1 + size - 1;
    __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;" "sync;" "isync;" : : "r"(addr) : "memory");
*************** typedef union
*** 797,817 ****
    double d;
  } ffi_dblfl;
  
! int ffi_closure_helper_SYSV (ffi_closure*, void*, unsigned long*, 
  			     ffi_dblfl*, unsigned long*);
  
! /* Basically the trampoline invokes ffi_closure_SYSV, and on 
   * entry, r11 holds the address of the closure.
   * After storing the registers that could possibly contain
   * parameters to be passed into the stack frame and setting
!  * up space for a return value, ffi_closure_SYSV invokes the 
   * following helper function to do most of the work
   */
  
  int
! ffi_closure_helper_SYSV (ffi_closure* closure, void * rvalue, 
!             unsigned long * pgr, ffi_dblfl * pfr, 
!             unsigned long * pst)
  {
    /* rvalue is the pointer to space for return value in closure assembly */
    /* pgr is the pointer to where r3-r10 are stored in ffi_closure_SYSV */
--- 801,821 ----
    double d;
  } ffi_dblfl;
  
! int ffi_closure_helper_SYSV (ffi_closure*, void*, unsigned long*,
  			     ffi_dblfl*, unsigned long*);
  
! /* Basically the trampoline invokes ffi_closure_SYSV, and on
   * entry, r11 holds the address of the closure.
   * After storing the registers that could possibly contain
   * parameters to be passed into the stack frame and setting
!  * up space for a return value, ffi_closure_SYSV invokes the
   * following helper function to do most of the work
   */
  
  int
! ffi_closure_helper_SYSV (ffi_closure* closure, void * rvalue,
! 			 unsigned long * pgr, ffi_dblfl * pfr,
! 			 unsigned long * pst)
  {
    /* rvalue is the pointer to space for return value in closure assembly */
    /* pgr is the pointer to where r3-r10 are stored in ffi_closure_SYSV */
*************** ffi_closure_helper_SYSV (ffi_closure* cl
*** 823,830 ****
    long             i, avn;
    long             nf;   /* number of floating registers already used */
    long             ng;   /* number of general registers already used */
!   ffi_cif *        cif; 
!   double           temp; 
  
    cif = closure->cif;
    avalue = alloca(cif->nargs * sizeof(void *));
--- 827,834 ----
    long             i, avn;
    long             nf;   /* number of floating registers already used */
    long             ng;   /* number of general registers already used */
!   ffi_cif *        cif;
!   double           temp;
  
    cif = closure->cif;
    avalue = alloca(cif->nargs * sizeof(void *));
*************** ffi_closure_helper_SYSV (ffi_closure* cl
*** 844,850 ****
    i = 0;
    avn = cif->nargs;
    arg_types = cif->arg_types;
!   
    /* Grab the addresses of the arguments from the stack frame.  */
    while (i < avn)
      {
--- 848,854 ----
    i = 0;
    avn = cif->nargs;
    arg_types = cif->arg_types;
! 
    /* Grab the addresses of the arguments from the stack frame.  */
    while (i < avn)
      {
*************** ffi_closure_helper_SYSV (ffi_closure* cl
*** 852,975 ****
  	{
  	case FFI_TYPE_SINT8:
  	case FFI_TYPE_UINT8:
! 	/* there are 8 gpr registers used to pass values */
!           if (ng < 8) {
! 	     avalue[i] = (((char *)pgr)+3);
!              ng++;
!              pgr++;
!           } else {
!              avalue[i] = (((char *)pst)+3);
!              pst++;
!           }
  	  break;
!            
  	case FFI_TYPE_SINT16:
  	case FFI_TYPE_UINT16:
! 	/* there are 8 gpr registers used to pass values */
!           if (ng < 8) {
! 	     avalue[i] = (((char *)pgr)+2);
!              ng++;
!              pgr++;
!           } else {
!              avalue[i] = (((char *)pst)+2);
!              pst++;
!           }
  	  break;
  
  	case FFI_TYPE_SINT32:
  	case FFI_TYPE_UINT32:
  	case FFI_TYPE_POINTER:
  	  /* there are 8 gpr registers used to pass values */
!           if (ng < 8) {
! 	     avalue[i] = pgr;
!              ng++;
!              pgr++;
!           } else {
!              avalue[i] = pst;
!              pst++;
!           }
  	  break;
  
  	case FFI_TYPE_STRUCT:
! 	  /* Structs are passed by reference. The address will appear in a 
  	     gpr if it is one of the first 8 arguments.  */
!           if (ng < 8) {
! 	     avalue[i] = (void *) *pgr;
!              ng++;
!              pgr++;
!           } else {
!              avalue[i] = (void *) *pst;
!              pst++;
!           }
  	  break;
  
  	case FFI_TYPE_SINT64:
  	case FFI_TYPE_UINT64:
  	  /* passing long long ints are complex, they must
!            * be passed in suitable register pairs such as
!            * (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10)
!            * and if the entire pair aren't available then the outgoing
!            * parameter stack is used for both but an alignment of 8
!            * must will be kept.  So we must either look in pgr
!            * or pst to find the correct address for this type
!            * of parameter.
!            */
!            if (ng < 7) {
!               if (ng & 0x01) {
! 		/* skip r4, r6, r8 as starting points */
!                   ng++;
!                   pgr++;
!               }
!               avalue[i] = pgr;
!               ng+=2;
!               pgr+=2;
!            } else {
!               if (((long)pst) & 4) pst++;
!               avalue[i] = pst;
!               pst+=2;
!            }
!            break;
  
  	case FFI_TYPE_FLOAT:
! 	    /* unfortunately float values are stored as doubles
!              * in the ffi_closure_SYSV code (since we don't check
!              * the type in that routine).
!              */
  
!           /* there are 8 64bit floating point registers */
  
!           if (nf < 8) {
!              temp = pfr->d;
!              pfr->f = (float)temp;
!              avalue[i] = pfr;
!              nf++;
!              pfr++;
!           } else {
  	    /* FIXME? here we are really changing the values
!              * stored in the original calling routines outgoing
!              * parameter stack.  This is probably a really
!              * naughty thing to do but...
!              */
! 	     avalue[i] = pst;
!              nf++;
!              pst+=1;
!           }
  	  break;
  
  	case FFI_TYPE_DOUBLE:
  	  /* On the outgoing stack all values are aligned to 8 */
!           /* there are 8 64bit floating point registers */
  
!           if (nf < 8) {
! 	     avalue[i] = pfr;
!              nf++;
!              pfr++;
!           } else {
! 	     if (((long)pst) & 4) pst++;
! 	     avalue[i] = pst;
!              nf++;
!              pst+=2;
!           }
  	  break;
  
  	default:
--- 856,979 ----
  	{
  	case FFI_TYPE_SINT8:
  	case FFI_TYPE_UINT8:
! 	  /* there are 8 gpr registers used to pass values */
! 	  if (ng < 8) {
! 	    avalue[i] = (((char *)pgr)+3);
! 	    ng++;
! 	    pgr++;
! 	  } else {
! 	    avalue[i] = (((char *)pst)+3);
! 	    pst++;
! 	  }
  	  break;
! 
  	case FFI_TYPE_SINT16:
  	case FFI_TYPE_UINT16:
! 	  /* there are 8 gpr registers used to pass values */
! 	  if (ng < 8) {
! 	    avalue[i] = (((char *)pgr)+2);
! 	    ng++;
! 	    pgr++;
! 	  } else {
! 	    avalue[i] = (((char *)pst)+2);
! 	    pst++;
! 	  }
  	  break;
  
  	case FFI_TYPE_SINT32:
  	case FFI_TYPE_UINT32:
  	case FFI_TYPE_POINTER:
  	  /* there are 8 gpr registers used to pass values */
! 	  if (ng < 8) {
! 	    avalue[i] = pgr;
! 	    ng++;
! 	    pgr++;
! 	  } else {
! 	    avalue[i] = pst;
! 	    pst++;
! 	  }
  	  break;
  
  	case FFI_TYPE_STRUCT:
! 	  /* Structs are passed by reference. The address will appear in a
  	     gpr if it is one of the first 8 arguments.  */
! 	  if (ng < 8) {
! 	    avalue[i] = (void *) *pgr;
! 	    ng++;
! 	    pgr++;
! 	  } else {
! 	    avalue[i] = (void *) *pst;
! 	    pst++;
! 	  }
  	  break;
  
  	case FFI_TYPE_SINT64:
  	case FFI_TYPE_UINT64:
  	  /* passing long long ints are complex, they must
! 	   * be passed in suitable register pairs such as
! 	   * (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10)
! 	   * and if the entire pair aren't available then the outgoing
! 	   * parameter stack is used for both but an alignment of 8
! 	   * must will be kept.  So we must either look in pgr
! 	   * or pst to find the correct address for this type
! 	   * of parameter.
! 	   */
! 	  if (ng < 7) {
! 	    if (ng & 0x01) {
! 	      /* skip r4, r6, r8 as starting points */
! 	      ng++;
! 	      pgr++;
! 	    }
! 	    avalue[i] = pgr;
! 	    ng+=2;
! 	    pgr+=2;
! 	  } else {
! 	    if (((long)pst) & 4) pst++;
! 	    avalue[i] = pst;
! 	    pst+=2;
! 	  }
! 	  break;
  
  	case FFI_TYPE_FLOAT:
! 	  /* unfortunately float values are stored as doubles
! 	   * in the ffi_closure_SYSV code (since we don't check
! 	   * the type in that routine).
! 	   */
  
! 	  /* there are 8 64bit floating point registers */
  
! 	  if (nf < 8) {
! 	    temp = pfr->d;
! 	    pfr->f = (float)temp;
! 	    avalue[i] = pfr;
! 	    nf++;
! 	    pfr++;
! 	  } else {
  	    /* FIXME? here we are really changing the values
! 	     * stored in the original calling routines outgoing
! 	     * parameter stack.  This is probably a really
! 	     * naughty thing to do but...
! 	     */
! 	    avalue[i] = pst;
! 	    nf++;
! 	    pst+=1;
! 	  }
  	  break;
  
  	case FFI_TYPE_DOUBLE:
  	  /* On the outgoing stack all values are aligned to 8 */
! 	  /* there are 8 64bit floating point registers */
  
! 	  if (nf < 8) {
! 	    avalue[i] = pfr;
! 	    nf++;
! 	    pfr++;
! 	  } else {
! 	    if (((long)pst) & 4) pst++;
! 	    avalue[i] = pst;
! 	    nf++;
! 	    pst+=2;
! 	  }
  	  break;
  
  	default:
*************** int hidden ffi_closure_helper_LINUX64 (f
*** 991,997 ****
  				       ffi_dblfl*);
  
  int hidden
! ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue, 
  			    unsigned long *pst, ffi_dblfl *pfr)
  {
    /* rvalue is the pointer to space for return value in closure assembly */
--- 995,1001 ----
  				       ffi_dblfl*);
  
  int hidden
! ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue,
  			    unsigned long *pst, ffi_dblfl *pfr)
  {
    /* rvalue is the pointer to space for return value in closure assembly */
*************** ffi_closure_helper_LINUX64 (ffi_closure 
*** 1002,1008 ****
    void **avalue;
    ffi_type **arg_types;
    long i, avn;
!   ffi_cif *cif; 
    ffi_dblfl *end_pfr = pfr + NUM_FPR_ARG_REGISTERS64;
  
    cif = closure->cif;
--- 1006,1012 ----
    void **avalue;
    ffi_type **arg_types;
    long i, avn;
!   ffi_cif *cif;
    ffi_dblfl *end_pfr = pfr + NUM_FPR_ARG_REGISTERS64;
  
    cif = closure->cif;
*************** ffi_closure_helper_LINUX64 (ffi_closure 
*** 1019,1025 ****
    i = 0;
    avn = cif->nargs;
    arg_types = cif->arg_types;
!   
    /* Grab the addresses of the arguments from the stack frame.  */
    while (i < avn)
      {
--- 1023,1029 ----
    i = 0;
    avn = cif->nargs;
    arg_types = cif->arg_types;
! 
    /* Grab the addresses of the arguments from the stack frame.  */
    while (i < avn)
      {
*************** ffi_closure_helper_LINUX64 (ffi_closure 
*** 1030,1036 ****
  	  avalue[i] = (char *) pst + 7;
  	  pst++;
  	  break;
!            
  	case FFI_TYPE_SINT16:
  	case FFI_TYPE_UINT16:
  	  avalue[i] = (char *) pst + 6;
--- 1034,1040 ----
  	  avalue[i] = (char *) pst + 7;
  	  pst++;
  	  break;
! 
  	case FFI_TYPE_SINT16:
  	case FFI_TYPE_UINT16:
  	  avalue[i] = (char *) pst + 6;
*************** ffi_closure_helper_LINUX64 (ffi_closure 
*** 1062,1074 ****
  
  	case FFI_TYPE_FLOAT:
  	  /* unfortunately float values are stored as doubles
!            * in the ffi_closure_LINUX64 code (since we don't check
!            * the type in that routine).
!            */
  
!           /* there are 13 64bit floating point registers */
  
!           if (pfr < end_pfr)
  	    {
  	      double temp = pfr->d;
  	      pfr->f = (float) temp;
--- 1066,1078 ----
  
  	case FFI_TYPE_FLOAT:
  	  /* unfortunately float values are stored as doubles
! 	   * in the ffi_closure_LINUX64 code (since we don't check
! 	   * the type in that routine).
! 	   */
  
! 	  /* there are 13 64bit floating point registers */
  
! 	  if (pfr < end_pfr)
  	    {
  	      double temp = pfr->d;
  	      pfr->f = (float) temp;
*************** ffi_closure_helper_LINUX64 (ffi_closure 
*** 1082,1088 ****
  
  	case FFI_TYPE_DOUBLE:
  	  /* On the outgoing stack all values are aligned to 8 */
!           /* there are 13 64bit floating point registers */
  
  	  if (pfr < end_pfr)
  	    {
--- 1086,1092 ----
  
  	case FFI_TYPE_DOUBLE:
  	  /* On the outgoing stack all values are aligned to 8 */
! 	  /* there are 13 64bit floating point registers */
  
  	  if (pfr < end_pfr)
  	    {
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/ffi_darwin.c gcc-4.0.0/libffi/src/powerpc/ffi_darwin.c
*** gcc-3.4.3/libffi/src/powerpc/ffi_darwin.c	Tue Oct 21 19:01:56 2003
--- gcc-4.0.0/libffi/src/powerpc/ffi_darwin.c	Thu Sep  2 21:14:45 2004
*************** enum {
*** 38,43 ****
--- 38,44 ----
    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-31),
  
    FLAG_ARG_NEEDS_COPY   = 1 << (31- 7),
    FLAG_FP_ARGUMENTS     = 1 << (31- 6), /* cr1.eq; specified by ABI  */
*************** void ffi_prep_args(extended_cif *ecif, u
*** 86,92 ****
    const unsigned flags = ecif->cif->flags;
  
    /* 'stacktop' points at the previous backchain pointer.  */
!   unsigned *const stacktop = stack + (ecif->cif->bytes / sizeof(unsigned));
  
    /* 'fpr_base' points at the space for fpr1, and grows upwards as
       we use FPR registers.  */
--- 87,93 ----
    const unsigned flags = ecif->cif->flags;
  
    /* 'stacktop' points at the previous backchain pointer.  */
!   unsigned *const stacktop = stack + (bytes / sizeof(unsigned));
  
    /* 'fpr_base' points at the space for fpr1, and grows upwards as
       we use FPR registers.  */
*************** void ffi_prep_args(extended_cif *ecif, u
*** 95,101 ****
  
  
    /* 'next_arg' grows up as we put parameters in it.  */
!   unsigned *next_arg = stack + 6; /* 6 reserved posistions.  */
  
    int i = ecif->cif->nargs;
    double double_tmp;
--- 96,102 ----
  
  
    /* 'next_arg' grows up as we put parameters in it.  */
!   unsigned *next_arg = stack + 6; /* 6 reserved positions.  */
  
    int i = ecif->cif->nargs;
    double double_tmp;
*************** void ffi_prep_args(extended_cif *ecif, u
*** 137,142 ****
--- 138,144 ----
  	  fparg_count++;
  	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
  	  break;
+ 
  	case FFI_TYPE_DOUBLE:
  	  double_tmp = *(double *)*p_argv;
  	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
*************** void ffi_prep_args(extended_cif *ecif, u
*** 148,153 ****
--- 150,175 ----
  	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
  	  break;
  
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ 
+ 	case FFI_TYPE_LONGDOUBLE:
+ 	  double_tmp = ((double *)*p_argv)[0];
+ 	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+ 	    *(double *)next_arg = double_tmp;
+ 	  else
+ 	    *fpr_base++ = double_tmp;
+ 	  next_arg += 2;
+ 	  fparg_count++;
+ 	  double_tmp = ((double *)*p_argv)[1];
+ 	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+ 	    *(double *)next_arg = double_tmp;
+ 	  else
+ 	    *fpr_base++ = double_tmp;
+ 	  next_arg += 2;
+ 	  fparg_count++;
+ 	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
+ 	  break;
+ #endif
  	case FFI_TYPE_UINT64:
  	case FFI_TYPE_SINT64:
  	  *(long long *)next_arg = *(long long *)*p_argv;
*************** void ffi_prep_args(extended_cif *ecif, u
*** 167,176 ****
  	  goto putgpr;
  
  	case FFI_TYPE_STRUCT:
- 
- #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- 	case FFI_TYPE_LONGDOUBLE:
- #endif
  	  dest_cpy = (char *) next_arg;
  
  	  /* Structures that match the basic modes (QI 1 byte, HI 2 bytes,
--- 189,194 ----
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 240,249 ****
         as the first argument.  */
    switch (cif->rtype->type)
      {
  #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
      case FFI_TYPE_LONGDOUBLE:
  #endif
!       /* Fall through.  */
      case FFI_TYPE_DOUBLE:
        flags |= FLAG_RETURNS_64BITS;
        /* Fall through.  */
--- 258,271 ----
         as the first argument.  */
    switch (cif->rtype->type)
      {
+ 
  #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
      case FFI_TYPE_LONGDOUBLE:
+       flags |= FLAG_RETURNS_128BITS;
+       flags |= FLAG_RETURNS_FP;
+       break;
  #endif
! 
      case FFI_TYPE_DOUBLE:
        flags |= FLAG_RETURNS_64BITS;
        /* Fall through.  */
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 272,280 ****
  
    /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the
       first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest
!      goes on the stack.  Structures and long doubles (if not equivalent
!      to double) are passed as a pointer to a copy of the structure.
!      Stuff on the stack needs to keep proper alignment.  */
    for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
      {
        switch ((*ptr)->type)
--- 294,301 ----
  
    /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the
       first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest
!      goes on the stack.  Structures are passed as a pointer to a copy of
!      the structure. Stuff on the stack needs to keep proper alignment.  */
    for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
      {
        switch ((*ptr)->type)
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 289,294 ****
--- 310,328 ----
  	    intarg_count++;
  	  break;
  
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ 
+ 	case FFI_TYPE_LONGDOUBLE:
+ 	  fparg_count += 2;
+ 	  /* If this FP arg is going on the stack, it must be
+ 	     8-byte-aligned.  */
+ 	  if (fparg_count > NUM_FPR_ARG_REGISTERS
+ 	      && intarg_count%2 != 0)
+ 	    intarg_count++;
+ 	  intarg_count +=2;
+ 	  break;
+ #endif
+ 
  	case FFI_TYPE_UINT64:
  	case FFI_TYPE_SINT64:
  	  /* 'long long' arguments are passed as two words, but
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 302,310 ****
  	  break;
  
  	case FFI_TYPE_STRUCT:
- #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
- 	case FFI_TYPE_LONGDOUBLE:
- #endif
  	  size_al = (*ptr)->size;
  	  /* If the first member of the struct is a double, then align
  	     the struct to double-word.
--- 336,341 ----
*************** static void flush_range(char *, int);
*** 409,416 ****
     points to one of these.  */
  
  typedef struct aix_fd_struct {
!     void *code_pointer;
!     void *toc;
  } aix_fd;
  
  /* here I'd like to add the stack frame layout we use in darwin_closure.S
--- 440,447 ----
     points to one of these.  */
  
  typedef struct aix_fd_struct {
!   void *code_pointer;
!   void *toc;
  } aix_fd;
  
  /* here I'd like to add the stack frame layout we use in darwin_closure.S
*************** flush_icache(char *addr)
*** 530,540 ****
  {
  #ifndef _AIX
    __asm__ volatile (
! 		"dcbf 0,%0;"
! 		"sync;"
! 		"icbi 0,%0;"
! 		"sync;"
! 		"isync;"
  		: : "r"(addr) : "memory");
  #endif
  }
--- 561,571 ----
  {
  #ifndef _AIX
    __asm__ volatile (
! 		"dcbf 0,%0\n"
! 		"\tsync\n"
! 		"\ticbi 0,%0\n"
! 		"\tsync\n"
! 		"\tisync"
  		: : "r"(addr) : "memory");
  #endif
  }
*************** int ffi_closure_helper_DARWIN (ffi_closu
*** 572,577 ****
--- 603,615 ----
       pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM
       pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM.  */
  
+   typedef double ldbits[2];
+ 
+   union ldu
+   {
+     ldbits lb;
+     long double ld;
+   };
  
    void **          avalue;
    ffi_type **      arg_types;
*************** int ffi_closure_helper_DARWIN (ffi_closu
*** 581,586 ****
--- 619,625 ----
    ffi_cif *        cif;
    double           temp;
    unsigned         size_al;
+   union ldu        temp_ld;
  
    cif = closure->cif;
    avalue = alloca(cif->nargs * sizeof(void *));
*************** int ffi_closure_helper_DARWIN (ffi_closu
*** 689,694 ****
--- 728,761 ----
  	  pgr += 2;
  	  break;
  
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ 
+ 	case FFI_TYPE_LONGDOUBLE:
+ 	  /* A long double value consumes four GPRs and two FPRs.
+ 	     There are 13 64bit floating point registers.  */
+ 	  if (nf < NUM_FPR_ARG_REGISTERS - 1)
+ 	    {
+ 	      avalue[i] = pfr;
+ 	      pfr += 2;
+ 	    }
+ 	  /* Here we have the situation where one part of the long double
+ 	     is stored in fpr13 and the other part is already on the stack.
+ 	     We use a union to pass the long double to avalue[i].  */
+ 	  else if (nf == NUM_FPR_ARG_REGISTERS - 1)
+ 	    {
+ 	      memcpy (&temp_ld.lb[0], pfr, sizeof(ldbits));
+ 	      memcpy (&temp_ld.lb[1], pgr + 2, sizeof(ldbits));
+ 	      avalue[i] = &temp_ld.ld;
+ 	    }
+ 	  else
+ 	    {
+ 	      avalue[i] = pgr;
+ 	    }
+ 	  nf += 2;
+ 	  ng += 4;
+ 	  pgr += 4;
+ 	  break;
+ #endif
  	default:
  	  FFI_ASSERT(0);
  	}
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/ffitarget.h gcc-4.0.0/libffi/src/powerpc/ffitarget.h
*** gcc-3.4.3/libffi/src/powerpc/ffitarget.h	Tue Oct 21 19:07:51 2003
--- gcc-4.0.0/libffi/src/powerpc/ffitarget.h	Thu Sep  2 21:07:21 2004
*************** struct ffi_aix_trampoline_struct {
*** 88,91 ****
  #endif
  
  #endif
- 
--- 88,90 ----
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/linux64.S gcc-4.0.0/libffi/src/powerpc/linux64.S
*** gcc-3.4.3/libffi/src/powerpc/linux64.S	Fri Mar 12 01:35:32 2004
--- gcc-4.0.0/libffi/src/powerpc/linux64.S	Thu Sep  2 21:07:21 2004
***************
*** 1,6 ****
  /* -----------------------------------------------------------------------
     sysv.h - Copyright (c) 2003 Jakub Jelinek <jakub@redhat.com>
!    
     PowerPC64 Assembly glue.
  
     Permission is hereby granted, free of charge, to any person obtaining
--- 1,6 ----
  /* -----------------------------------------------------------------------
     sysv.h - Copyright (c) 2003 Jakub Jelinek <jakub@redhat.com>
! 
     PowerPC64 Assembly glue.
  
     Permission is hereby granted, free of charge, to any person obtaining
***************
*** 23,29 ****
     OTHER DEALINGS IN THE SOFTWARE.
     ----------------------------------------------------------------------- */
  
! #define LIBFFI_ASM	
  #include <fficonfig.h>
  #include <ffi.h>
  
--- 23,29 ----
     OTHER DEALINGS IN THE SOFTWARE.
     ----------------------------------------------------------------------- */
  
! #define LIBFFI_ASM
  #include <fficonfig.h>
  #include <ffi.h>
  
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/linux64_closure.S gcc-4.0.0/libffi/src/powerpc/linux64_closure.S
*** gcc-3.4.3/libffi/src/powerpc/linux64_closure.S	Fri Mar 12 01:35:32 2004
--- gcc-4.0.0/libffi/src/powerpc/linux64_closure.S	Thu Sep  2 21:07:21 2004
***************
*** 5,19 ****
  	.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
  ffi_closure_LINUX64:
!         .quad   .ffi_closure_LINUX64,.TOC.@tocbase,0
!         .size   ffi_closure_LINUX64,24
!         .type   .ffi_closure_LINUX64,@function
!         .text
  .ffi_closure_LINUX64:
  .LFB1:
  	# save general regs into parm save area
--- 5,19 ----
  	.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
  ffi_closure_LINUX64:
! 	.quad   .ffi_closure_LINUX64,.TOC.@tocbase,0
! 	.size   ffi_closure_LINUX64,24
! 	.type   .ffi_closure_LINUX64,@function
! 	.text
  .ffi_closure_LINUX64:
  .LFB1:
  	# save general regs into parm save area
*************** ffi_closure_LINUX64:
*** 71,77 ****
  	# so use it to look up in a table
  	# so we know how to deal with each type
  
! 	# look up the proper starting point in table 
  	# by using return type as offset
  	mflr %r4		# move address of .Lret to r4
  	sldi %r3, %r3, 4	# now multiply return type by 16
--- 71,77 ----
  	# so use it to look up in a table
  	# so we know how to deal with each type
  
! 	# look up the proper starting point in table
  	# by using return type as offset
  	mflr %r4		# move address of .Lret to r4
  	sldi %r3, %r3, 4	# now multiply return type by 16
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/ppc_closure.S gcc-4.0.0/libffi/src/powerpc/ppc_closure.S
*** gcc-3.4.3/libffi/src/powerpc/ppc_closure.S	Tue Oct 21 19:01:56 2003
--- gcc-4.0.0/libffi/src/powerpc/ppc_closure.S	Thu Sep  2 21:07:21 2004
***************
*** 3,9 ****
  #include <ffi.h>
  #include <powerpc/asm.h>
  
!         .file   "ppc_closure.S"
  
  #ifndef __powerpc64__
  
--- 3,9 ----
  #include <ffi.h>
  #include <powerpc/asm.h>
  
! 	.file   "ppc_closure.S"
  
  #ifndef __powerpc64__
  
*************** ENTRY(ffi_closure_SYSV)
*** 17,30 ****
  
  # we want to build up an areas for the parameters passed
  # in registers (both floating point and integer)
! 	
  	# so first save gpr 3 to gpr 10 (aligned to 4)
  	stw   %r3, 16(%r1)
  	stw   %r4, 20(%r1)
! 	stw   %r5, 24(%r1) 
  	stw   %r6, 28(%r1)
  	stw   %r7, 32(%r1)
! 	stw   %r8, 36(%r1) 
  	stw   %r9, 40(%r1)
  	stw   %r10,44(%r1)
  
--- 17,30 ----
  
  # we want to build up an areas for the parameters passed
  # in registers (both floating point and integer)
! 
  	# so first save gpr 3 to gpr 10 (aligned to 4)
  	stw   %r3, 16(%r1)
  	stw   %r4, 20(%r1)
! 	stw   %r5, 24(%r1)
  	stw   %r6, 28(%r1)
  	stw   %r7, 32(%r1)
! 	stw   %r8, 36(%r1)
  	stw   %r9, 40(%r1)
  	stw   %r10,44(%r1)
  
*************** ENTRY(ffi_closure_SYSV)
*** 41,69 ****
  	# set up registers for the routine that actually does the work
  	# get the context pointer from the trampoline
  	mr %r3,%r11
! 	
!         # now load up the pointer to the result storage
  	addi %r4,%r1,112
! 	
  	# now load up the pointer to the saved gpr registers
!         addi %r5,%r1,16
  
!         # now load up the pointer to the saved fpr registers */
!         addi %r6,%r1,48
  
! 	# now load up the pointer to the outgoing parameter 
  	# stack in the previous frame
  	# i.e. the previous frame pointer + 8
  	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
  	# so we know how to deal with each type
  
!         # 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
--- 41,69 ----
  	# set up registers for the routine that actually does the work
  	# get the context pointer from the trampoline
  	mr %r3,%r11
! 
! 	# now load up the pointer to the result storage
  	addi %r4,%r1,112
! 
  	# now load up the pointer to the saved gpr registers
! 	addi %r5,%r1,16
  
! 	# now load up the pointer to the saved fpr registers */
! 	addi %r6,%r1,48
  
! 	# now load up the pointer to the outgoing parameter
  	# stack in the previous frame
  	# i.e. the previous frame pointer + 8
  	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
  	# so we know how to deal with each type
  
! 	# 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
*************** ENTRY(ffi_closure_SYSV)
*** 108,128 ****
  
  # 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
--- 108,128 ----
  
  # 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
*************** ENTRY(ffi_closure_SYSV)
*** 190,198 ****
  	nop
  	nop
  
! # case done	
  .Lfinish:
! 	
  	lwz %r0,148(%r1)
  	mtlr %r0
  	addi %r1,%r1,144
--- 190,198 ----
  	nop
  	nop
  
! # case done
  .Lfinish:
! 
  	lwz %r0,148(%r1)
  	mtlr %r0
  	addi %r1,%r1,144
diff -Nrcpad gcc-3.4.3/libffi/src/powerpc/sysv.S gcc-4.0.0/libffi/src/powerpc/sysv.S
*** gcc-3.4.3/libffi/src/powerpc/sysv.S	Tue Oct 21 19:01:56 2003
--- gcc-4.0.0/libffi/src/powerpc/sysv.S	Thu Sep  2 21:07:21 2004
***************
*** 1,9 ****
  /* -----------------------------------------------------------------------
     sysv.h - Copyright (c) 1998 Geoffrey Keating
-    
-    PowerPC Assembly glue.
  
!    $Id: sysv.S,v 1.1.1.1 1998/11/29 16:48:16 green Exp $
  
     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
--- 1,7 ----
  /* -----------------------------------------------------------------------
     sysv.h - Copyright (c) 1998 Geoffrey Keating
  
!    PowerPC Assembly glue.
  
     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
***************
*** 25,31 ****
     OTHER DEALINGS IN THE SOFTWARE.
     ----------------------------------------------------------------------- */
  
! #define LIBFFI_ASM	
  #include <fficonfig.h>
  #include <ffi.h>
  #include <powerpc/asm.h>
--- 23,29 ----
     OTHER DEALINGS IN THE SOFTWARE.
     ----------------------------------------------------------------------- */
  
! #define LIBFFI_ASM
  #include <fficonfig.h>
  #include <ffi.h>
  #include <powerpc/asm.h>
diff -Nrcpad gcc-3.4.3/libffi/src/prep_cif.c gcc-4.0.0/libffi/src/prep_cif.c
*** gcc-3.4.3/libffi/src/prep_cif.c	Thu Nov  6 15:47:41 2003
--- gcc-4.0.0/libffi/src/prep_cif.c	Fri Mar 19 22:34:17 2004
*************** ffi_status ffi_prep_cif(/*@out@*/ /*@par
*** 113,119 ****
    FFI_ASSERT_VALID_TYPE(cif->rtype);
  
    /* x86-64 and s390 stack space allocation is handled in prep_machdep.  */
! #if !defined M68K && !defined __x86_64__ && !defined S390
    /* Make space for the return structure pointer */
    if (cif->rtype->type == FFI_TYPE_STRUCT
  #ifdef SPARC
--- 113,119 ----
    FFI_ASSERT_VALID_TYPE(cif->rtype);
  
    /* x86-64 and s390 stack space allocation is handled in prep_machdep.  */
! #if !defined M68K && !defined __x86_64__ && !defined S390 && !defined PA
    /* Make space for the return structure pointer */
    if (cif->rtype->type == FFI_TYPE_STRUCT
  #ifdef SPARC
*************** ffi_status ffi_prep_cif(/*@out@*/ /*@par
*** 134,140 ****
  	 check after the initialization.  */
        FFI_ASSERT_VALID_TYPE(*ptr);
  
! #if !defined __x86_64__ && !defined S390
  #ifdef SPARC
        if (((*ptr)->type == FFI_TYPE_STRUCT
  	   && ((*ptr)->size > 16 || cif->abi != FFI_V9))
--- 134,140 ----
  	 check after the initialization.  */
        FFI_ASSERT_VALID_TYPE(*ptr);
  
! #if !defined __x86_64__ && !defined S390 && !defined PA
  #ifdef SPARC
        if (((*ptr)->type == FFI_TYPE_STRUCT
  	   && ((*ptr)->size > 16 || cif->abi != FFI_V9))
diff -Nrcpad gcc-3.4.3/libffi/src/s390/ffi.c gcc-4.0.0/libffi/src/s390/ffi.c
*** gcc-3.4.3/libffi/src/s390/ffi.c	Wed Feb  5 23:58:57 2003
--- gcc-4.0.0/libffi/src/s390/ffi.c	Sun Jul 11 11:45:39 2004
***************
*** 69,75 ****
  /*====================================================================*/
   
  static void ffi_prep_args (unsigned char *, extended_cif *);
- static int ffi_check_float_struct (ffi_type *);
  void
  #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
  __attribute__ ((visibility ("hidden")))
--- 69,74 ----
*************** ffi_prep_args (unsigned char *stack, ext
*** 222,236 ****
  	    }
  	}
  
!       /* Pointers are passed like UINTs of the same size.  */
!       if (type == FFI_TYPE_POINTER)
! #ifdef __s390x__
! 	type = FFI_TYPE_UINT64;
! #else
! 	type = FFI_TYPE_UINT32;
! #endif
! 
!       /* Now handle all primitive int/float data types.  */
        switch (type) 
  	{
  	  case FFI_TYPE_DOUBLE:
--- 221,227 ----
  	    }
  	}
  
!       /* Now handle all primitive int/pointer/float data types.  */
        switch (type) 
  	{
  	  case FFI_TYPE_DOUBLE:
*************** ffi_prep_args (unsigned char *stack, ext
*** 251,256 ****
--- 242,254 ----
  	    else
  	      p_ov[n_ov++] = *(unsigned int *) arg;
  	    break;
+ 
+ 	  case FFI_TYPE_POINTER:
+ 	    if (n_gpr < MAX_GPRARGS)
+ 	      p_gpr[n_gpr++] = (unsigned long)*(unsigned char **) arg;
+ 	    else
+ 	      p_ov[n_ov++] = (unsigned long)*(unsigned char **) arg;
+ 	    break;
   
  	  case FFI_TYPE_UINT64:
  	  case FFI_TYPE_SINT64:
diff -Nrcpad gcc-3.4.3/libffi/src/sh/ffi.c gcc-4.0.0/libffi/src/sh/ffi.c
*** gcc-3.4.3/libffi/src/sh/ffi.c	Thu Sep 18 14:08:20 2003
--- gcc-4.0.0/libffi/src/sh/ffi.c	Mon Oct 18 23:12:20 2004
***************
*** 1,5 ****
  /* -----------------------------------------------------------------------
!    ffi.c - Copyright (c) 2002, 2003 Kaz Kojima
     
     SuperH Foreign Function Interface 
  
--- 1,5 ----
  /* -----------------------------------------------------------------------
!    ffi.c - Copyright (c) 2002, 2003, 2004 Kaz Kojima
     
     SuperH Foreign Function Interface 
  
*************** ffi_prep_closure (ffi_closure* closure,
*** 471,486 ****
  		  void *user_data)
  {
    unsigned int *tramp;
  
    FFI_ASSERT (cif->abi == FFI_GCC_SYSV);
  
    tramp = (unsigned int *) &closure->tramp[0];
  #ifdef __LITTLE_ENDIAN__
!   tramp[0] = 0xd301d202;
!   tramp[1] = 0x0009422b;
  #else
!   tramp[0] = 0xd202d301;
!   tramp[1] = 0x422b0009;
  #endif
    *(void **) &tramp[2] = (void *)closure;          /* ctx */
    *(void **) &tramp[3] = (void *)ffi_closure_SYSV; /* funaddr */
--- 471,492 ----
  		  void *user_data)
  {
    unsigned int *tramp;
+   unsigned short insn;
  
    FFI_ASSERT (cif->abi == FFI_GCC_SYSV);
  
    tramp = (unsigned int *) &closure->tramp[0];
+   /* Set T bit if the function returns a struct pointed with R2.  */
+   insn = (return_type (cif->rtype) == FFI_TYPE_STRUCT
+ 	  ? 0x0018 /* sett */
+ 	  : 0x0008 /* clrt */);
+ 
  #ifdef __LITTLE_ENDIAN__
!   tramp[0] = 0xd301d102;
!   tramp[1] = 0x0000412b | (insn << 16);
  #else
!   tramp[0] = 0xd102d301;
!   tramp[1] = 0x412b0000 | insn;
  #endif
    *(void **) &tramp[2] = (void *)closure;          /* ctx */
    *(void **) &tramp[3] = (void *)ffi_closure_SYSV; /* funaddr */
diff -Nrcpad gcc-3.4.3/libffi/src/sh/sysv.S gcc-4.0.0/libffi/src/sh/sysv.S
*** gcc-3.4.3/libffi/src/sh/sysv.S	Tue Oct 21 19:01:57 2003
--- gcc-4.0.0/libffi/src/sh/sysv.S	Thu Oct 21 06:00:41 2004
***************
*** 1,5 ****
  /* -----------------------------------------------------------------------
!    sysv.S - Copyright (c) 2002, 2003 Kaz Kojima
     
     SuperH Foreign Function Interface 
  
--- 1,5 ----
  /* -----------------------------------------------------------------------
!    sysv.S - Copyright (c) 2002, 2003, 2004 Kaz Kojima
     
     SuperH Foreign Function Interface 
  
*************** L_pass_d:
*** 117,128 ****
  	bt	1f
  	add	#1,r3
  1:
- 	mov	r15,r0
- 	and	#7,r0
- 	tst	r0,r0
- 	bt	2f
- 	add	#4,r15
- 2:
  	mov	#12,r0
  	cmp/hs	r0,r3
  	bt/s	3f
--- 117,122 ----
*************** ENTRY(ffi_closure_SYSV)
*** 553,561 ****
--- 547,558 ----
  	mov	r1,r7
  #endif
  
+ 	bt/s	10f
+ 	 mov	r2, r5
  	mov	r14,r1
  	add	#8,r1
  	mov	r1,r5
+ 10:
  
  	mov	r14,r1
  #if defined(__SH4__)
*************** ENTRY(ffi_closure_SYSV)
*** 565,571 ****
--- 562,576 ----
  #endif
  	mov.l	r1,@r14
  
+ #ifdef PIC
+ 	mov.l	L_got,r1
+ 	mova	L_got,r0
+ 	add	r0,r1
+ 	mov.l	L_helper,r0
+ 	add	r1,r0
+ #else
  	mov.l	L_helper,r0
+ #endif
  	jsr	@r0
  	 mov	r3,r4
  
*************** ENTRY(ffi_closure_SYSV)
*** 579,586 ****
--- 584,598 ----
  	 add	#8,r2
  0:
  	.align 2
+ #ifdef PIC
+ L_got:
+ 	.long	_GLOBAL_OFFSET_TABLE_
+ L_helper:
+ 	.long	ffi_closure_helper_SYSV@GOTOFF
+ #else
  L_helper:
  	.long	ffi_closure_helper_SYSV
+ #endif
  L_table:
  	.short L_case_v - 0b	/* FFI_TYPE_VOID */
  	.short L_case_i - 0b	/* FFI_TYPE_INT */
*************** __FRAME_BEGIN__:
*** 683,692 ****
--- 695,712 ----
  .LSCIE1:
  	.4byte	0x0	/* CIE Identifier Tag */
  	.byte	0x1	/* CIE Version */
+ #ifdef PIC
+ 	.ascii "zR\0"	/* CIE Augmentation */
+ #else
  	.byte	0x0	/* CIE Augmentation */
+ #endif
  	.byte	0x1	/* uleb128 0x1; CIE Code Alignment Factor */
  	.byte	0x7c	/* sleb128 -4; CIE Data Alignment Factor */
  	.byte	0x11	/* CIE RA Column */
+ #ifdef PIC
+ 	.uleb128 0x1	/* Augmentation size */
+ 	.byte	0x10	/* FDE Encoding (pcrel) */
+ #endif
  	.byte	0xc	/* DW_CFA_def_cfa */
  	.byte	0xf	/* uleb128 0xf */
  	.byte	0x0	/* uleb128 0x0 */
*************** __FRAME_BEGIN__:
*** 696,703 ****
--- 716,730 ----
  	.4byte	.LEFDE1-.LASFDE1	/* FDE Length */
  .LASFDE1:
  	.4byte	.LASFDE1-__FRAME_BEGIN__	/* FDE CIE offset */
+ #ifdef PIC
+ 	.4byte	.LFB1-.	/* FDE initial location */
+ #else
  	.4byte	.LFB1	/* FDE initial location */
+ #endif
  	.4byte	.LFE1-.LFB1	 /* FDE address range */
+ #ifdef PIC
+ 	.uleb128 0x0	/* Augmentation size */
+ #endif
  	.byte	0x4	/* DW_CFA_advance_loc4 */
  	.4byte	.LCFI0-.LFB1
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
*************** __FRAME_BEGIN__:
*** 745,752 ****
--- 772,786 ----
  	.4byte	.LEFDE3-.LASFDE3	/* FDE Length */
  .LASFDE3:
  	.4byte	.LASFDE3-__FRAME_BEGIN__	/* FDE CIE offset */
+ #ifdef PIC
+ 	.4byte	.LFB2-.	/* FDE initial location */
+ #else
  	.4byte	.LFB2	/* FDE initial location */
+ #endif
  	.4byte	.LFE2-.LFB2	 /* FDE address range */
+ #ifdef PIC
+ 	.uleb128 0x0	/* Augmentation size */
+ #endif
  	.byte	0x4	/* DW_CFA_advance_loc4 */
  	.4byte	.LCFI7-.LFB2
  	.byte	0xe	/* DW_CFA_def_cfa_offset */
diff -Nrcpad gcc-3.4.3/libffi/src/sparc/ffi.c gcc-4.0.0/libffi/src/sparc/ffi.c
*** gcc-3.4.3/libffi/src/sparc/ffi.c	Sun Jan 25 07:01:06 2004
--- gcc-4.0.0/libffi/src/sparc/ffi.c	Mon Nov 22 18:35:16 2004
*************** ffi_prep_closure (ffi_closure* closure,
*** 470,476 ****
  
  int
  ffi_closure_sparc_inner_v8(ffi_closure *closure,
!   void *rvalue, unsigned long *gpr)
  {
    ffi_cif *cif;
    ffi_type **arg_types;
--- 470,476 ----
  
  int
  ffi_closure_sparc_inner_v8(ffi_closure *closure,
!   void *rvalue, unsigned long *gpr, unsigned long *scratch)
  {
    ffi_cif *cif;
    ffi_type **arg_types;
*************** ffi_closure_sparc_inner_v8(ffi_closure *
*** 505,510 ****
--- 505,523 ----
  	  /* Straight copy of invisible reference.  */
  	  avalue[i] = (void *)gpr[argn++];
  	}
+       else if ((arg_types[i]->type == FFI_TYPE_DOUBLE
+ 	       || arg_types[i]->type == FFI_TYPE_SINT64
+ 	       || arg_types[i]->type == FFI_TYPE_UINT64)
+ 	       /* gpr is 8-byte aligned.  */
+ 	       && (argn % 2) != 0)
+ 	{
+ 	  /* Align on a 8-byte boundary.  */
+ 	  scratch[0] = gpr[argn];
+ 	  scratch[1] = gpr[argn+1];
+ 	  avalue[i] = scratch;
+ 	  scratch -= 2;
+ 	  argn += 2;
+ 	}
        else
  	{
  	  /* Always right-justify.  */
diff -Nrcpad gcc-3.4.3/libffi/src/sparc/v8.S gcc-4.0.0/libffi/src/sparc/v8.S
*** gcc-3.4.3/libffi/src/sparc/v8.S	Sun Jan 25 07:01:06 2004
--- gcc-4.0.0/libffi/src/sparc/v8.S	Mon Nov 22 18:35:16 2004
*************** ffi_closure_v8:
*** 115,121 ****
  		.register	%g2, #scratch
  #endif
  .LLFB2:
! 	save	%sp, -STACKFRAME, %sp
  .LLCFI1:
  
  	! Store all of the potential argument registers in va_list format.
--- 115,129 ----
  		.register	%g2, #scratch
  #endif
  .LLFB2:
! 	! Reserve frame space for all arguments in case
! 	! we need to align them on a 8-byte boundary.
! 	ld	[%g2+FFI_TRAMPOLINE_SIZE], %g1
! 	ld	[%g1+4], %g1
! 	sll	%g1, 3, %g1
! 	add	%g1, STACKFRAME, %g1
! 	! %g1 == STACKFRAME + 8*nargs
! 	neg	%g1
! 	save	%sp, %g1, %sp
  .LLCFI1:
  
  	! Store all of the potential argument registers in va_list format.
*************** ffi_closure_v8:
*** 129,136 ****
  	! Call ffi_closure_sparc_inner to do the bulk of the work.
  	mov	%g2, %o0
  	add	%fp, -8, %o1
  	call	ffi_closure_sparc_inner_v8
! 	 add	%fp,  64, %o2
  
  	! Load up the return value in the proper type.
  	! See ffi_prep_cif_machdep for the list of cases.
--- 137,145 ----
  	! Call ffi_closure_sparc_inner to do the bulk of the work.
  	mov	%g2, %o0
  	add	%fp, -8, %o1
+ 	add	%fp,  64, %o2
  	call	ffi_closure_sparc_inner_v8
! 	 add	%fp, -16, %o3
  
  	! Load up the return value in the proper type.
  	! See ffi_prep_cif_machdep for the list of cases.
*************** ffi_closure_v8:
*** 157,162 ****
--- 166,172 ----
  	be	done2
  
  	! FFI_TYPE_SINT64
+ 	! FFI_TYPE_UINT64
  	ld	[%fp-4], %i1
  
  integer:
diff -Nrcpad gcc-3.4.3/libffi/src/types.c gcc-4.0.0/libffi/src/types.c
*** gcc-3.4.3/libffi/src/types.c	Fri Mar 12 01:35:31 2004
--- gcc-4.0.0/libffi/src/types.c	Fri Dec 31 22:04:30 2004
***************
*** 28,104 ****
  
  /* Type definitions */
  
! #define FFI_INTEGRAL_TYPEDEF(n, s, a, t) ffi_type ffi_type_##n = { s, a, t, NULL }
! #define FFI_AGGREGATE_TYPEDEF(n, e) ffi_type ffi_type_##n = { 0, 0, FFI_TYPE_STRUCT, e }
  
  /* Size and alignment are fake here. They must not be 0. */
! FFI_INTEGRAL_TYPEDEF(void, 1, 1, FFI_TYPE_VOID);
! 
! FFI_INTEGRAL_TYPEDEF(uint8, 1, 1, FFI_TYPE_UINT8);
! FFI_INTEGRAL_TYPEDEF(sint8, 1, 1, FFI_TYPE_SINT8);
! FFI_INTEGRAL_TYPEDEF(uint16, 2, 2, FFI_TYPE_UINT16);
! FFI_INTEGRAL_TYPEDEF(sint16, 2, 2, FFI_TYPE_SINT16);
! FFI_INTEGRAL_TYPEDEF(uint32, 4, 4, FFI_TYPE_UINT32);
! FFI_INTEGRAL_TYPEDEF(sint32, 4, 4, FFI_TYPE_SINT32);
! FFI_INTEGRAL_TYPEDEF(float, 4, 4, FFI_TYPE_FLOAT);
! 
! #if defined ALPHA || defined SPARC64 || defined X86_64 || defined S390X \
!     || defined IA64 || defined POWERPC64
! 
! FFI_INTEGRAL_TYPEDEF(pointer, 8, 8, FFI_TYPE_POINTER);
! 
! #else
! 
! FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_TYPE_POINTER);
! 
! #endif
! 
! #if defined X86 || defined X86_WIN32 || defined ARM || defined M68K
! 
! FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64);
! FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64);
! 
! #elif defined SH
! 
! FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64);
! FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64);
! 
! #else
! 
! FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64);
! FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64);
! 
! #endif
! 
! 
! #if defined X86 || defined X86_WIN32 || defined M68K
! 
! FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE);
! FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE);
! 
! #elif defined ARM || defined SH || defined POWERPC_AIX || defined POWERPC_DARWIN
! 
! FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE);
! FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE);
! 
! #elif defined SPARC
! 
! FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE);
! #ifdef SPARC64
! FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE);
! #else
! FFI_INTEGRAL_TYPEDEF(longdouble, 16, 8, FFI_TYPE_LONGDOUBLE);
! #endif
! 
! #elif defined X86_64 || defined POWERPC64
! 
! FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE);
! FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE);
! 
! #else
  
! FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE);
! FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE);
  
! #endif
  
--- 28,60 ----
  
  /* Type definitions */
  
! #define FFI_TYPEDEF(name, type, id)		\
! struct struct_align_##name {			\
!   char c;					\
!   type x;					\
! };						\
! ffi_type ffi_type_##name = {			\
!   sizeof(type),					\
!   offsetof(struct struct_align_##name, x),	\
!   id, NULL					\
! }
  
  /* Size and alignment are fake here. They must not be 0. */
! ffi_type ffi_type_void = {
!   1, 1, FFI_TYPE_VOID, NULL
! };
  
! FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8);
! FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8);
! FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16);
! FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16);
! FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32);
! FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32);
! FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64);
! FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64);
  
! FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER);
  
+ FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT);
+ FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE);
+ FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE);
diff -Nrcpad gcc-3.4.3/libffi/src/x86/ffi.c gcc-4.0.0/libffi/src/x86/ffi.c
*** gcc-3.4.3/libffi/src/x86/ffi.c	Tue Dec  2 05:39:06 2003
--- gcc-4.0.0/libffi/src/x86/ffi.c	Tue Mar 16 19:17:33 2004
*************** void ffi_prep_args(char *stack, extended
*** 47,53 ****
  
    argp = stack;
  
!   if (ecif->cif->rtype->type == FFI_TYPE_STRUCT)
      {
        *(void **) argp = ecif->rvalue;
        argp += 4;
--- 47,53 ----
  
    argp = stack;
  
!   if (ecif->cif->flags == FFI_TYPE_STRUCT)
      {
        *(void **) argp = ecif->rvalue;
        argp += 4;
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 121,127 ****
--- 121,129 ----
    switch (cif->rtype->type)
      {
      case FFI_TYPE_VOID:
+ #ifndef X86_WIN32
      case FFI_TYPE_STRUCT:
+ #endif
      case FFI_TYPE_SINT64:
      case FFI_TYPE_FLOAT:
      case FFI_TYPE_DOUBLE:
*************** ffi_status ffi_prep_cif_machdep(ffi_cif 
*** 133,138 ****
--- 135,165 ----
        cif->flags = FFI_TYPE_SINT64;
        break;
  
+ #ifdef X86_WIN32
+     case FFI_TYPE_STRUCT:
+       if (cif->rtype->size == 1)
+         {
+           cif->flags = FFI_TYPE_SINT8; /* same as char size */
+         }
+       else if (cif->rtype->size == 2)
+         {
+           cif->flags = FFI_TYPE_SINT16; /* same as short size */
+         }
+       else if (cif->rtype->size == 4)
+         {
+           cif->flags = FFI_TYPE_INT; /* same as int type */
+         }
+       else if (cif->rtype->size == 8)
+         {
+           cif->flags = FFI_TYPE_SINT64; /* same as int64 type */
+         }
+       else
+         {
+           cif->flags = FFI_TYPE_STRUCT;
+         }
+       break;
+ #endif
+ 
      default:
        cif->flags = FFI_TYPE_INT;
        break;
*************** void ffi_call(/*@dependent@*/ ffi_cif *c
*** 177,183 ****
    /* value address then we need to make one		        */
  
    if ((rvalue == NULL) && 
!       (cif->rtype->type == FFI_TYPE_STRUCT))
      {
        /*@-sysunrecog@*/
        ecif.rvalue = alloca(cif->rtype->size);
--- 204,210 ----
    /* value address then we need to make one		        */
  
    if ((rvalue == NULL) && 
!       (cif->flags == FFI_TYPE_STRUCT))
      {
        /*@-sysunrecog@*/
        ecif.rvalue = alloca(cif->rtype->size);
*************** ffi_closure_SYSV (closure)
*** 274,279 ****
--- 301,316 ----
  	   : : "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@*/
*************** ffi_prep_incoming_args_SYSV(char *stack,
*** 289,295 ****
  
    argp = stack;
  
!   if ( cif->rtype->type == FFI_TYPE_STRUCT ) {
      *rvalue = *(void **) argp;
      argp += 4;
    }
--- 326,332 ----
  
    argp = stack;
  
!   if ( cif->flags == FFI_TYPE_STRUCT ) {
      *rvalue = *(void **) argp;
      argp += 4;
    }
diff -Nrcpad gcc-3.4.3/libffi/src/x86/ffi64.c gcc-4.0.0/libffi/src/x86/ffi64.c
*** gcc-3.4.3/libffi/src/x86/ffi64.c	Tue Oct 21 19:01:58 2003
--- gcc-4.0.0/libffi/src/x86/ffi64.c	Sat Dec 25 09:54:40 2004
***************
*** 29,50 ****
  #include <stdlib.h>
  #include <stdarg.h>
  
- /* ffi_prep_args is called by the assembly routine once stack space
-    has been allocated for the function's arguments */
- 
  #ifdef __x86_64__
  
  #define MAX_GPR_REGS 6
  #define MAX_SSE_REGS 8
! typedef struct
  {
    /* Registers for argument passing.  */
!   long gpr[MAX_GPR_REGS];
    __int128_t sse[MAX_SSE_REGS];
  
!   /* Stack space for arguments.  */
!   char argspace[0];
! } stackLayout;
  
  /* All reference to register classes here is identical to the code in
     gcc/config/i386/i386.c. Do *not* change one without the other.  */
--- 29,48 ----
  #include <stdlib.h>
  #include <stdarg.h>
  
  #ifdef __x86_64__
  
  #define MAX_GPR_REGS 6
  #define MAX_SSE_REGS 8
! 
! struct register_args
  {
    /* Registers for argument passing.  */
!   UINT64 gpr[MAX_GPR_REGS];
    __int128_t sse[MAX_SSE_REGS];
+ };
  
! 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.  */
*************** typedef struct
*** 55,62 ****
     use SF or DFmode move instead of DImode to avoid reformating penalties.
  
     Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves
!    whenever possible (upper half does contain padding).
!  */
  enum x86_64_reg_class
    {
      X86_64_NO_CLASS,
--- 53,59 ----
     use SF or DFmode move instead of DImode to avoid reformating penalties.
  
     Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves
!    whenever possible (upper half does contain padding).  */
  enum x86_64_reg_class
    {
      X86_64_NO_CLASS,
*************** enum x86_64_reg_class
*** 68,78 ****
--- 65,78 ----
      X86_64_SSEUP_CLASS,
      X86_64_X87_CLASS,
      X86_64_X87UP_CLASS,
+     X86_64_COMPLEX_X87_CLASS,
      X86_64_MEMORY_CLASS
    };
  
  #define MAX_CLASSES 4
  
+ #define SSE_CLASS_P(X)	((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS)
+ 
  /* x86-64 register passing implementation.  See x86-64 ABI for details.  Goal
     of this code is to classify each 8bytes of incoming argument by the register
     class and assign registers accordingly.  */
*************** merge_classes (enum x86_64_reg_class cla
*** 106,114 ****
        || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS)
      return X86_64_INTEGER_CLASS;
  
!   /* Rule #5: If one of the classes is X87 or X87UP class, MEMORY is used.  */
!   if (class1 == X86_64_X87_CLASS || class1 == X86_64_X87UP_CLASS
!       || class2 == X86_64_X87_CLASS || class2 == X86_64_X87UP_CLASS)
      return X86_64_MEMORY_CLASS;
  
    /* Rule #6: Otherwise class SSE is used.  */
--- 106,119 ----
        || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS)
      return X86_64_INTEGER_CLASS;
  
!   /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class,
!      MEMORY is used.  */
!   if (class1 == X86_64_X87_CLASS
!       || class1 == X86_64_X87UP_CLASS
!       || class1 == X86_64_COMPLEX_X87_CLASS
!       || class2 == X86_64_X87_CLASS
!       || class2 == X86_64_X87UP_CLASS
!       || class2 == X86_64_COMPLEX_X87_CLASS)
      return X86_64_MEMORY_CLASS;
  
    /* Rule #6: Otherwise class SSE is used.  */
*************** merge_classes (enum x86_64_reg_class cla
*** 125,135 ****
  */
  static int
  classify_argument (ffi_type *type, enum x86_64_reg_class classes[],
! 		   int *byte_offset)
  {
-   /* First, align to the right place.  */
-   *byte_offset = ALIGN(*byte_offset, type->alignment);
- 
    switch (type->type)
      {
      case FFI_TYPE_UINT8:
--- 130,137 ----
  */
  static int
  classify_argument (ffi_type *type, enum x86_64_reg_class classes[],
! 		   size_t byte_offset)
  {
    switch (type->type)
      {
      case FFI_TYPE_UINT8:
*************** classify_argument (ffi_type *type, enum 
*** 141,153 ****
      case FFI_TYPE_UINT64:
      case FFI_TYPE_SINT64:
      case FFI_TYPE_POINTER:
!       if (((*byte_offset) % 8 + type->size) <= 4)
  	classes[0] = X86_64_INTEGERSI_CLASS;
        else
  	classes[0] = X86_64_INTEGER_CLASS;
        return 1;
      case FFI_TYPE_FLOAT:
!       if (((*byte_offset) % 8) == 0)
  	classes[0] = X86_64_SSESF_CLASS;
        else
  	classes[0] = X86_64_SSE_CLASS;
--- 143,155 ----
      case FFI_TYPE_UINT64:
      case FFI_TYPE_SINT64:
      case FFI_TYPE_POINTER:
!       if (byte_offset + type->size <= 4)
  	classes[0] = X86_64_INTEGERSI_CLASS;
        else
  	classes[0] = X86_64_INTEGER_CLASS;
        return 1;
      case FFI_TYPE_FLOAT:
!       if (byte_offset == 0)
  	classes[0] = X86_64_SSESF_CLASS;
        else
  	classes[0] = X86_64_SSE_CLASS;
*************** classify_argument (ffi_type *type, enum 
*** 175,196 ****
  	  classes[i] = X86_64_NO_CLASS;
  
  	/* Merge the fields of structure.  */
! 	for (ptr=type->elements; (*ptr)!=NULL; ptr++)
  	  {
  	    int num;
  
! 	    num = classify_argument (*ptr, subclasses, byte_offset);
  	    if (num == 0)
  	      return 0;
  	    for (i = 0; i < num; i++)
  	      {
! 		int pos = *byte_offset / 8;
  		classes[i + pos] =
  		  merge_classes (subclasses[i], classes[i + pos]);
  	      }
  
! 	    if ((*ptr)->type != FFI_TYPE_STRUCT)
! 	      *byte_offset += (*ptr)->size;
  	  }
  
  	/* Final merger cleanup.  */
--- 177,199 ----
  	  classes[i] = X86_64_NO_CLASS;
  
  	/* Merge the fields of structure.  */
! 	for (ptr = type->elements; *ptr != NULL; ptr++)
  	  {
  	    int num;
  
! 	    byte_offset = ALIGN (byte_offset, (*ptr)->alignment);
! 
! 	    num = classify_argument (*ptr, subclasses, byte_offset % 8);
  	    if (num == 0)
  	      return 0;
  	    for (i = 0; i < num; i++)
  	      {
! 		int pos = byte_offset / 8;
  		classes[i + pos] =
  		  merge_classes (subclasses[i], classes[i + pos]);
  	      }
  
! 	    byte_offset += (*ptr)->size;
  	  }
  
  	/* Final merger cleanup.  */
*************** classify_argument (ffi_type *type, enum 
*** 222,578 ****
  }
  
  /* Examine the argument and return set number of register required in each
!    class.  Return 0 iff parameter should be passed in memory.  */
  static int
! examine_argument (ffi_type *type, int in_return, int *int_nregs,int *sse_nregs)
  {
!   enum x86_64_reg_class class[MAX_CLASSES];
!   int offset = 0;
!   int n;
! 
!   n = classify_argument (type, class, &offset);
  
    if (n == 0)
      return 0;
  
!   *int_nregs = 0;
!   *sse_nregs = 0;
!   for (n--; n>=0; n--)
!     switch (class[n])
        {
        case X86_64_INTEGER_CLASS:
        case X86_64_INTEGERSI_CLASS:
! 	(*int_nregs)++;
  	break;
        case X86_64_SSE_CLASS:
        case X86_64_SSESF_CLASS:
        case X86_64_SSEDF_CLASS:
! 	(*sse_nregs)++;
  	break;
        case X86_64_NO_CLASS:
        case X86_64_SSEUP_CLASS:
  	break;
        case X86_64_X87_CLASS:
        case X86_64_X87UP_CLASS:
! 	if (!in_return)
! 	  return 0;
! 	break;
        default:
  	abort ();
        }
-   return 1;
- }
  
! /* Functions to load floats and double to an SSE register placeholder.  */
! extern void float2sse (float, __int128_t *);
! extern void double2sse (double, __int128_t *);
! extern void floatfloat2sse (void *, __int128_t *);
  
! /* Functions to put the floats and doubles back.  */
! extern float sse2float (__int128_t *);
! extern double sse2double (__int128_t *);
! extern void sse2floatfloat(__int128_t *, void *);
  
! /*@-exportheader@*/
! void
! ffi_prep_args (stackLayout *stack, extended_cif *ecif)
! /*@=exportheader@*/
  {
!   int gprcount, ssecount, i, g, s;
!   void **p_argv;
!   void *argp = &stack->argspace;
!   ffi_type **p_arg;
  
-   /* First check if the return value should be passed in memory. If so,
-      pass the pointer as the first argument.  */
    gprcount = ssecount = 0;
-   if (ecif->cif->rtype->type != FFI_TYPE_VOID 
-       && examine_argument (ecif->cif->rtype, 1, &g, &s) == 0)
-     (void *)stack->gpr[gprcount++] = ecif->rvalue;
  
!   for (i=ecif->cif->nargs, p_arg=ecif->cif->arg_types, p_argv = ecif->avalue;
!        i!=0; i--, p_arg++, p_argv++)
      {
!       int in_register = 0;
! 
!       switch ((*p_arg)->type)
! 	{
! 	case FFI_TYPE_SINT8:
! 	case FFI_TYPE_SINT16:
! 	case FFI_TYPE_SINT32:
! 	case FFI_TYPE_SINT64:
! 	case FFI_TYPE_UINT8:
! 	case FFI_TYPE_UINT16:
! 	case FFI_TYPE_UINT32:
! 	case FFI_TYPE_UINT64:
! 	case FFI_TYPE_POINTER:
! 	  if (gprcount < MAX_GPR_REGS)
! 	    {
! 	      stack->gpr[gprcount] = 0;
! 	      stack->gpr[gprcount++] = *(long long *)(*p_argv);
! 	      in_register = 1;
! 	    }
! 	  break;
! 
! 	case FFI_TYPE_FLOAT:
! 	  if (ssecount < MAX_SSE_REGS)
! 	    {
! 	      float2sse (*(float *)(*p_argv), &stack->sse[ssecount++]);
! 	      in_register = 1;
! 	    }
! 	  break;
! 
! 	case FFI_TYPE_DOUBLE:
! 	  if (ssecount < MAX_SSE_REGS)
! 	    {
! 	      double2sse (*(double *)(*p_argv), &stack->sse[ssecount++]);
! 	      in_register = 1;
! 	    }
! 	  break;
! 	}
! 
!       if (in_register)
! 	continue;
! 
!       /* Either all places in registers where filled, or this is a
! 	 type that potentially goes into a memory slot.  */
!       if (examine_argument (*p_arg, 0, &g, &s) == 0
! 	  || gprcount + g > MAX_GPR_REGS || ssecount + s > MAX_SSE_REGS)
  	{
! 	  /* Pass this argument in memory.  */
! 	  argp = (void *)ALIGN(argp, (*p_arg)->alignment);
! 	  memcpy (argp, *p_argv, (*p_arg)->size);
! 	  argp += (*p_arg)->size;
  	}
!       else
  	{
! 	  /* All easy cases are eliminated. Now fire the big guns.  */
! 
! 	  enum x86_64_reg_class classes[MAX_CLASSES];
! 	  int offset = 0, j, num;
! 	  void *a;
! 
! 	  num = classify_argument (*p_arg, classes, &offset);
! 	  for (j=0, a=*p_argv; j<num; j++, a+=8)
! 	    {
! 	      switch (classes[j])
! 		{
! 		case X86_64_INTEGER_CLASS:
! 		case X86_64_INTEGERSI_CLASS:
! 		  stack->gpr[gprcount++] = *(long long *)a;
! 		  break;
! 		case X86_64_SSE_CLASS:
! 		  floatfloat2sse (a, &stack->sse[ssecount++]);
! 		  break;
! 		case X86_64_SSESF_CLASS:
! 		  float2sse (*(float *)a, &stack->sse[ssecount++]);
! 		  break;
! 		case X86_64_SSEDF_CLASS:
! 		  double2sse (*(double *)a, &stack->sse[ssecount++]);
! 		  break;
! 		default:
! 		  abort();
! 		}
! 	    }
  	}
      }
! }
! 
! /* Perform machine dependent cif processing.  */
! ffi_status
! ffi_prep_cif_machdep (ffi_cif *cif)
! {
!   int gprcount, ssecount, i, g, s;
! 
!   gprcount = ssecount = 0;
! 
!   /* Reset the byte count. We handle this size estimation here.  */
!   cif->bytes = 0;
! 
!   /* If the return value should be passed in memory, pass the pointer
!      as the first argument. The actual memory isn't allocated here.  */
!   if (cif->rtype->type != FFI_TYPE_VOID 
!       && examine_argument (cif->rtype, 1, &g, &s) == 0)
!     gprcount = 1;
  
    /* 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
       not, add it's size to the stack byte count.  */
!   for (i=0; i<cif->nargs; i++)
      {
!       if (examine_argument (cif->arg_types[i], 0, &g, &s) == 0
! 	  || gprcount + g > MAX_GPR_REGS || ssecount + s > MAX_SSE_REGS)
  	{
! 	  /* This is passed in memory. First align to the basic type.  */
! 	  cif->bytes = ALIGN(cif->bytes, cif->arg_types[i]->alignment);
  
! 	  /* Stack arguments are *always* at least 8 byte aligned.  */
! 	  cif->bytes = ALIGN(cif->bytes, 8);
  
! 	  /* Now add the size of this argument.  */
! 	  cif->bytes += cif->arg_types[i]->size;
  	}
        else
  	{
! 	  gprcount += g;
! 	  ssecount += s;
  	}
      }
! 
!   /* Set the flag for the closures return.  */
!     switch (cif->rtype->type)
!     {
!     case FFI_TYPE_VOID:
!     case FFI_TYPE_STRUCT:
!     case FFI_TYPE_SINT64:
!     case FFI_TYPE_FLOAT:
!     case FFI_TYPE_DOUBLE:
!     case FFI_TYPE_LONGDOUBLE:
!       cif->flags = (unsigned) cif->rtype->type;
!       break;
! 
!     case FFI_TYPE_UINT64:
!       cif->flags = FFI_TYPE_SINT64;
!       break;
! 
!     default:
!       cif->flags = FFI_TYPE_INT;
!       break;
!     }
  
    return FFI_OK;
  }
  
- typedef struct
- {
-   long gpr[2];
-   __int128_t sse[2];
-   long double st0;
- } return_value;
- 
  void
! ffi_fill_return_value (return_value *rv, extended_cif *ecif)
  {
    enum x86_64_reg_class classes[MAX_CLASSES];
!   int i = 0, num;
!   long *gpr = rv->gpr;
!   __int128_t *sse = rv->sse;
!   signed char sc;
!   signed short ss;
! 
!   /* This is needed because of the way x86-64 handles signed short
!      integers.  */
!   switch (ecif->cif->rtype->type)
!     {
!     case FFI_TYPE_SINT8:
!       sc = *(signed char *)gpr;
!       *(long long *)ecif->rvalue = (long long)sc;
!       return;
!     case FFI_TYPE_SINT16:
!       ss = *(signed short *)gpr;
!       *(long long *)ecif->rvalue = (long long)ss;
!       return;
!     default:
!       /* Just continue.  */
!       ;
!     }
  
!   num = classify_argument (ecif->cif->rtype, classes, &i);
  
!   if (num == 0)
!     /* Return in memory.  */
!     ecif->rvalue = (void *) rv->gpr[0];
!   else if (num == 2 && classes[0] == X86_64_X87_CLASS &&
! 	classes[1] == X86_64_X87UP_CLASS)
!     /* This is a long double (this is easiest to handle this way instead
!        of an eightbyte at a time as in the loop below.  */
!     *((long double *)ecif->rvalue) = rv->st0;
!   else
!     {
!       void *a;
  
!       for (i=0, a=ecif->rvalue; i<num; i++, a+=8)
! 	{
! 	  switch (classes[i])
! 	    {
! 	    case X86_64_INTEGER_CLASS:
! 	    case X86_64_INTEGERSI_CLASS:
! 	      *(long long *)a = *gpr;
! 	      gpr++;
! 	      break;
! 	    case X86_64_SSE_CLASS:
! 	      sse2floatfloat (sse++, a);
! 	      break;
! 	    case X86_64_SSESF_CLASS:
! 	      *(float *)a = sse2float (sse++);
! 	      break;
! 	    case X86_64_SSEDF_CLASS:
! 	      *(double *)a = sse2double (sse++);
! 	      break;
! 	    default:
! 	      abort();
! 	    }
! 	}
!     }
! }
  
! /*@-declundef@*/
! /*@-exportheader@*/
! extern void ffi_call_UNIX64(void (*)(stackLayout *, extended_cif *),
! 			    void (*) (return_value *, extended_cif *),
! 			    /*@out@*/ extended_cif *, 
! 			    unsigned, /*@out@*/ unsigned *, void (*fn)());
! /*@=declundef@*/
! /*@=exportheader@*/
  
! void ffi_call(/*@dependent@*/ ffi_cif *cif, 
! 	      void (*fn)(), 
! 	      /*@out@*/ void *rvalue, 
! 	      /*@dependent@*/ void **avalue)
! {
!   extended_cif ecif;
!   int dummy;
  
!   ecif.cif = cif;
!   ecif.avalue = avalue;
!   
!   /* 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) && 
!       (examine_argument (cif->rtype, 1, &dummy, &dummy) == 0))
!     {
!       /*@-sysunrecog@*/
!       ecif.rvalue = alloca(cif->rtype->size);
!       /*@=sysunrecog@*/
!     }
!   else
!     ecif.rvalue = rvalue;
!     
!   /* Stack must always be 16byte aligned. Make it so.  */
!   cif->bytes = ALIGN(cif->bytes, 16);
!   
!   switch (cif->abi) 
      {
!     case FFI_SYSV:
!       /* Calling 32bit code from 64bit is not possible  */
!       FFI_ASSERT(0);
!       break;
  
!     case FFI_UNIX64:
!       /*@-usedef@*/
!       ffi_call_UNIX64 (ffi_prep_args, ffi_fill_return_value, &ecif,
! 		       cif->bytes, ecif.rvalue, fn);
!       /*@=usedef@*/
!       break;
  
!     default:
!       FFI_ASSERT(0);
!       break;
      }
  }
  
! extern void ffi_closure_UNIX64(void);
  
  ffi_status
  ffi_prep_closure (ffi_closure* closure,
--- 225,434 ----
  }
  
  /* Examine the argument and return set number of register required in each
!    class.  Return zero iff parameter should be passed in memory, otherwise
!    the number of registers.  */
! 
  static int
! examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES],
! 		  _Bool in_return, int *pngpr, int *pnsse)
  {
!   int i, n, ngpr, nsse;
  
+   n = classify_argument (type, classes, 0);
    if (n == 0)
      return 0;
  
!   ngpr = nsse = 0;
!   for (i = 0; i < n; ++i)
!     switch (classes[i])
        {
        case X86_64_INTEGER_CLASS:
        case X86_64_INTEGERSI_CLASS:
! 	ngpr++;
  	break;
        case X86_64_SSE_CLASS:
        case X86_64_SSESF_CLASS:
        case X86_64_SSEDF_CLASS:
! 	nsse++;
  	break;
        case X86_64_NO_CLASS:
        case X86_64_SSEUP_CLASS:
  	break;
        case X86_64_X87_CLASS:
        case X86_64_X87UP_CLASS:
!       case X86_64_COMPLEX_X87_CLASS:
! 	return in_return != 0;
        default:
  	abort ();
        }
  
!   *pngpr = ngpr;
!   *pnsse = nsse;
  
!   return n;
! }
  
! /* Perform machine dependent cif processing.  */
! 
! ffi_status
! ffi_prep_cif_machdep (ffi_cif *cif)
  {
!   int gprcount, ssecount, i, avn, n, ngpr, nsse, flags;
!   enum x86_64_reg_class classes[MAX_CLASSES];
!   size_t bytes;
  
    gprcount = ssecount = 0;
  
!   flags = cif->rtype->type;
!   if (flags != FFI_TYPE_VOID)
      {
!       n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse);
!       if (n == 0)
  	{
! 	  /* The return value is passed in memory.  A pointer to that
! 	     memory is the first argument.  Allocate a register for it.  */
! 	  gprcount++;
! 	  /* We don't have to do anything in asm for the return.  */
! 	  flags = FFI_TYPE_VOID;
  	}
!       else if (flags == FFI_TYPE_STRUCT)
  	{
! 	  /* Mark which registers the result appears in.  */
! 	  _Bool sse0 = SSE_CLASS_P (classes[0]);
! 	  _Bool sse1 = n == 2 && SSE_CLASS_P (classes[1]);
! 	  if (sse0 && !sse1)
! 	    flags |= 1 << 8;
! 	  else if (!sse0 && sse1)
! 	    flags |= 1 << 9;
! 	  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
       not, add it's size to the stack byte count.  */
!   for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++)
      {
!       if (examine_argument (cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0
! 	  || gprcount + ngpr > MAX_GPR_REGS
! 	  || ssecount + nsse > MAX_SSE_REGS)
  	{
! 	  long align = cif->arg_types[i]->alignment;
  
! 	  if (align < 8)
! 	    align = 8;
  
! 	  bytes = ALIGN(bytes, align);
! 	  bytes += cif->arg_types[i]->size;
  	}
        else
  	{
! 	  gprcount += ngpr;
! 	  ssecount += nsse;
  	}
      }
!   cif->bytes = bytes;
  
    return FFI_OK;
  }
  
  void
! ffi_call (ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
  {
    enum x86_64_reg_class classes[MAX_CLASSES];
!   char *stack, *argp;
!   ffi_type **arg_types;
!   int gprcount, ssecount, ngpr, nsse, i, avn;
!   _Bool ret_in_memory;
!   struct register_args *reg_args;
  
!   /* Can't call 32-bit mode from 64-bit mode.  */
!   FFI_ASSERT (cif->abi == FFI_UNIX64);
  
!   /* If the return value is a struct and we don't have a return value
!      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);
  
!   /* Allocate the space for the arguments, plus 4 words of temp space.  */
!   stack = alloca (sizeof (struct register_args) + cif->bytes + 4*8);
!   reg_args = (struct register_args *) stack;
!   argp = stack + sizeof (struct register_args);
  
!   gprcount = ssecount = 0;
  
!   /* If the return value is passed in memory, add the pointer as the
!      first integer argument.  */
!   if (ret_in_memory)
!     reg_args->gpr[gprcount++] = (long) rvalue;
  
!   avn = cif->nargs;
!   arg_types = cif->arg_types;
  
!   for (i = 0; i < avn; ++i)
      {
!       size_t size = arg_types[i]->size;
!       int n;
  
!       n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse);
!       if (n == 0
! 	  || gprcount + ngpr > MAX_GPR_REGS
! 	  || ssecount + nsse > MAX_SSE_REGS)
! 	{
! 	  long align = arg_types[i]->alignment;
  
! 	  /* Stack arguments are *always* at least 8 byte aligned.  */
! 	  if (align < 8)
! 	    align = 8;
! 
! 	  /* Pass this argument in memory.  */
! 	  argp = (void *) ALIGN (argp, align);
! 	  memcpy (argp, avalue[i], size);
! 	  argp += size;
! 	}
!       else
! 	{
! 	  /* The argument is passed entirely in registers.  */
! 	  char *a = (char *) avalue[i];
! 	  int j;
! 
! 	  for (j = 0; j < n; j++, a += 8, size -= 8)
! 	    {
! 	      switch (classes[j])
! 		{
! 		case X86_64_INTEGER_CLASS:
! 		case X86_64_INTEGERSI_CLASS:
! 		  reg_args->gpr[gprcount] = 0;
! 		  memcpy (&reg_args->gpr[gprcount], a, size < 8 ? size : 8);
! 		  gprcount++;
! 		  break;
! 		case X86_64_SSE_CLASS:
! 		case X86_64_SSEDF_CLASS:
! 		  reg_args->sse[ssecount++] = *(UINT64 *) a;
! 		  break;
! 		case X86_64_SSESF_CLASS:
! 		  reg_args->sse[ssecount++] = *(UINT32 *) a;
! 		  break;
! 		default:
! 		  abort();
! 		}
! 	    }
! 	}
      }
+ 
+   ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args),
+ 		   cif->flags, rvalue, fn);
  }
  
! 
! extern void ffi_closure_unix64(void);
  
  ffi_status
  ffi_prep_closure (ffi_closure* closure,
*************** ffi_prep_closure (ffi_closure* closure,
*** 582,595 ****
  {
    volatile unsigned short *tramp;
  
-   /* FFI_ASSERT (cif->abi == FFI_OSF);  */
- 
    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;
--- 438,449 ----
  {
    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;
*************** ffi_prep_closure (ffi_closure* closure,
*** 600,706 ****
  }
  
  int
! ffi_closure_UNIX64_inner(ffi_closure *closure, va_list l, void *rp)
  {
    ffi_cif *cif;
    void **avalue;
    ffi_type **arg_types;
!   long i, avn, argn;
  
    cif = closure->cif;
    avalue = alloca(cif->nargs * sizeof(void *));
  
!   argn = 0;
  
-   i = 0;
    avn = cif->nargs;
    arg_types = cif->arg_types;
    
!   /* Grab the addresses of the arguments from the stack frame.  */
!   while (i < avn)
      {
!       switch (arg_types[i]->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:
! 	case FFI_TYPE_POINTER:
! 	  {
! 	    if (l->gp_offset > 48-8)
! 	      {
! 		avalue[i] = l->overflow_arg_area;
! 		l->overflow_arg_area = (char *)l->overflow_arg_area + 8;
! 	      }
! 	    else
! 	      {
! 		avalue[i] = (char *)l->reg_save_area + l->gp_offset;
! 		l->gp_offset += 8;
! 	      }
! 	  }
! 	  break;
  
! 	case FFI_TYPE_STRUCT:
! 	  /* FIXME  */
! 	  FFI_ASSERT(0);
! 	  break;
  
! 	case FFI_TYPE_DOUBLE:
! 	  {
! 	    if (l->fp_offset > 176-16)
! 	      {
! 		avalue[i] = l->overflow_arg_area;
! 		l->overflow_arg_area = (char *)l->overflow_arg_area + 8;
! 	      }
! 	    else
! 	      {
! 		avalue[i] = (char *)l->reg_save_area + l->fp_offset;
! 		l->fp_offset += 16;
! 	      }
! 	  }
! #if DEBUG_FFI
! 	  fprintf (stderr, "double arg %d = %g\n", i, *(double *)avalue[i]);
! #endif
! 	  break;
! 	  
! 	case FFI_TYPE_FLOAT:
! 	  {
! 	    if (l->fp_offset > 176-16)
! 	      {
! 		avalue[i] = l->overflow_arg_area;
! 		l->overflow_arg_area = (char *)l->overflow_arg_area + 8;
! 	      }
! 	    else
! 	      {
! 		avalue[i] = (char *)l->reg_save_area + l->fp_offset;
! 		l->fp_offset += 16;
! 	      }
! 	  }
! #if DEBUG_FFI
! 	  fprintf (stderr, "float arg %d = %g\n", i, *(float *)avalue[i]);
! #endif
! 	  break;
! 	  
! 	default:
! 	  FFI_ASSERT(0);
  	}
  
!       argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG;
!       i++;
      }
  
    /* Invoke the closure.  */
!   (closure->fun) (cif, rp, avalue, closure->user_data);
! 
!   /* FIXME: Structs not supported.  */
!   FFI_ASSERT(cif->rtype->type != FFI_TYPE_STRUCT);
! 
!   /* Tell ffi_closure_UNIX64 how to perform return type promotions.  */
  
!   return cif->rtype->type;
  }
! #endif /* ifndef __x86_64__ */
--- 454,562 ----
  }
  
  int
! ffi_closure_unix64_inner(ffi_closure *closure, void *rvalue,
! 			 struct register_args *reg_args, char *argp)
  {
    ffi_cif *cif;
    void **avalue;
    ffi_type **arg_types;
!   long i, avn;
!   int gprcount, ssecount, ngpr, nsse;
!   int ret;
  
    cif = closure->cif;
    avalue = alloca(cif->nargs * sizeof(void *));
+   gprcount = ssecount = 0;
  
!   ret = cif->rtype->type;
!   if (ret != FFI_TYPE_VOID)
!     {
!       enum x86_64_reg_class classes[MAX_CLASSES];
!       int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse);
!       if (n == 0)
! 	{
! 	  /* The return value goes in memory.  Arrange for the closure
! 	     return value to go directly back to the original caller.  */
! 	  rvalue = (void *) reg_args->gpr[gprcount++];
! 	  /* We don't have to do anything in asm for the return.  */
! 	  ret = FFI_TYPE_VOID;
! 	}
!       else if (ret == FFI_TYPE_STRUCT && n == 2)
! 	{
! 	  /* Mark which register the second word of the structure goes in.  */
! 	  _Bool sse0 = SSE_CLASS_P (classes[0]);
! 	  _Bool sse1 = SSE_CLASS_P (classes[1]);
! 	  if (!sse0 && sse1)
! 	    ret |= 1 << 8;
! 	  else if (sse0 && !sse1)
! 	    ret |= 1 << 9;
! 	}
!     }
  
    avn = cif->nargs;
    arg_types = cif->arg_types;
    
!   for (i = 0; i < avn; ++i)
      {
!       enum x86_64_reg_class classes[MAX_CLASSES];
!       int n;
! 
!       n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse);
!       if (n == 0
! 	  || gprcount + ngpr > MAX_GPR_REGS
! 	  || ssecount + nsse > MAX_SSE_REGS)
  	{
! 	  long align = arg_types[i]->alignment;
  
! 	  /* Stack arguments are *always* at least 8 byte aligned.  */
! 	  if (align < 8)
! 	    align = 8;
  
! 	  /* Pass this argument in memory.  */
! 	  argp = (void *) ALIGN (argp, align);
! 	  avalue[i] = argp;
! 	  argp += arg_types[i]->size;
  	}
+       /* If the argument is in a single register, or two consecutive
+ 	 registers, then we can use that address directly.  */
+       else if (n == 1
+ 	       || (n == 2
+ 		   && SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1])))
+ 	{
+ 	  /* The argument is in a single register.  */
+ 	  if (SSE_CLASS_P (classes[0]))
+ 	    {
+ 	      avalue[i] = &reg_args->sse[ssecount];
+ 	      ssecount += n;
+ 	    }
+ 	  else
+ 	    {
+ 	      avalue[i] = &reg_args->gpr[gprcount];
+ 	      gprcount += n;
+ 	    }
+ 	}
+       /* Otherwise, allocate space to make them consecutive.  */
+       else
+ 	{
+ 	  char *a = alloca (16);
+ 	  int j;
  
! 	  avalue[i] = a;
! 	  for (j = 0; j < n; j++, a += 8)
! 	    {
! 	      if (SSE_CLASS_P (classes[j]))
! 		memcpy (a, &reg_args->sse[ssecount++], 8);
! 	      else
! 		memcpy (a, &reg_args->gpr[gprcount++], 8);
! 	    }
! 	}
      }
  
    /* Invoke the closure.  */
!   closure->fun (cif, rvalue, avalue, closure->user_data);
  
!   /* Tell assembly how to perform return type promotions.  */
!   return ret;
  }
! 
! #endif /* __x86_64__ */
diff -Nrcpad gcc-3.4.3/libffi/src/x86/unix64.S gcc-4.0.0/libffi/src/x86/unix64.S
*** gcc-3.4.3/libffi/src/x86/unix64.S	Tue Oct 21 19:01:58 2003
--- gcc-4.0.0/libffi/src/x86/unix64.S	Mon Dec 27 09:20:10 2004
***************
*** 28,303 ****
  #include <fficonfig.h>
  #include <ffi.h>
  
- 	.section	.rodata
- .LC0:
- 	.string	"asm in progress %lld\n"
- .LC1:
- 	.string	"asm in progress\n"
  .text
  	.align	2
! .globl ffi_call_UNIX64
!         .type	ffi_call_UNIX64,@function
  
! ffi_call_UNIX64:
! .LFB1:
!         pushq	%rbp
! .LCFI0:
!         movq	%rsp, %rbp
! .LCFI1:
! 	/* Save all arguments */
! 	subq	$48, %rsp
! .LCFI2:
! 	movq	%rdi, -8(%rbp)		/* ffi_prep_args	 */
! 	movq	%rsi, -16(%rbp)		/* ffi_fill_return_value */
! 	movq	%rdx, -24(%rbp)		/* ecif			 */
! 	movq	%rcx, -32(%rbp)		/* cif->bytes		 */
! 	movq	%r8, -40(%rbp)		/* ecif.rvalue		 */
! 	movq	%r9, -48(%rbp)		/* fn			 */
  
! 	/* Make room for all of the new args and the register args */
! 	addl	$176, %ecx
! .LCFI3:
! 	subq	%rcx, %rsp
! .LCFI4:
! 	/* Setup the call to ffi_prep_args.  */
! 	movq	%rdi, %rax		/* &ffi_prep_args	*/
! 	movq	%rsp, %rdi		/* stackLayout		*/
! 	movq	%rdx, %rsi		/* ecif			*/
! 	call	*%rax			/* ffi_prep_args(stackLayout, ecif);*/ 
  
! 	/* ffi_prep_args have put all the register contents into the  */
! 	/* stackLayout struct. Now put the register values in place.  */
! 	movq	(%rsp), %rdi
! 	movq	8(%rsp), %rsi
! 	movq	16(%rsp), %rdx
! 	movq	24(%rsp), %rcx
! 	movq	32(%rsp), %r8
! 	movq	40(%rsp), %r9
! 	movaps	48(%rsp), %xmm0
! 	movaps	64(%rsp), %xmm1
! 	movaps	80(%rsp), %xmm2
! 	movaps	96(%rsp), %xmm3
! 	movaps	112(%rsp), %xmm4
! 	movaps	128(%rsp), %xmm5
! 	movaps	144(%rsp), %xmm6
! 	movaps	160(%rsp), %xmm7
  
- 	/* Remove space for stackLayout so stack arguments are placed
- 	   correctly for the call.  */
- .LCFI5:
- 	addq	$176, %rsp
- .LCFI6:
  	/* Call the user function.  */
! 	call	*-48(%rbp)
  
! 	/* Make stack space for the return_value struct.  */
! 	subq	$64, %rsp
  
! 	/* Fill in all potential return values to this struct.  */
! 	movq	%rax, (%rsp)
! 	movq	%rdx, 8(%rsp)
! 	movaps	%xmm0, 16(%rsp)
! 	movaps	%xmm1, 32(%rsp)
! 	fstpt	48(%rsp)
  
! 	/* Now call ffi_fill_return_value.  */
! 	movq	%rsp, %rdi		/* struct return_value	  */
! 	movq	-24(%rbp), %rsi		/* ecif			  */
! 	movq	-16(%rbp), %rax		/* &ffi_fill_return_value */
! 	call	*%rax			/* call it		  */
  
! 	/* And the work is done.  */
!         leave
!         ret
! .LFE1:
! .ffi_call_UNIX64_end:
!         .size    ffi_call_UNIX64,.ffi_call_UNIX64_end-ffi_call_UNIX64
  
! .text
! 	.align	2
! .globl float2sse
!         .type	float2sse,@function
! float2sse:
! 	/* Save the contents of this sse-float in a pointer.  */
! 	movaps	%xmm0, (%rdi)
  	ret
  
! 	.align	2
! .globl floatfloat2sse
!         .type	floatfloat2sse,@function
! floatfloat2sse:
! 	/* Save the contents of these two sse-floats in a pointer.  */
! 	movq	(%rdi), %xmm0
! 	movaps	%xmm0, (%rsi)
  	ret
! 
! 	.align	2
! .globl double2sse
!         .type	double2sse,@function
! double2sse:
! 	/* Save the contents of this sse-double in a pointer.  */
! 	movaps	%xmm0, (%rdi)
  	ret
! 
! 	.align	2
! .globl sse2float
!         .type	sse2float,@function
! sse2float:
! 	/* Save the contents of this sse-float in a pointer.  */
! 	movaps	(%rdi), %xmm0
  	ret
  
! 	.align	2
! .globl sse2double
!         .type	sse2double,@function
! sse2double:
! 	/* Save the contents of this pointer in a sse-double.  */
! 	movaps	(%rdi), %xmm0
  	ret
  
! 	.align	2
! .globl sse2floatfloat
!         .type	sse2floatfloat,@function
! sse2floatfloat:
! 	/* Save the contents of this pointer in two sse-floats.  */
! 	movaps	(%rdi), %xmm0
! 	movq	%xmm0, (%rsi)
  	ret
  
  	.align	2
! .globl ffi_closure_UNIX64
!         .type	ffi_closure_UNIX64,@function
  
- ffi_closure_UNIX64:
- .LFB2:
-         pushq   %rbp
- .LCFI10:
-         movq    %rsp, %rbp
- .LCFI11:
-         subq    $240, %rsp
- .LCFI12:
- 	movq	%rdi, -176(%rbp)
-         movq    %rsi, -168(%rbp)
-         movq    %rdx, -160(%rbp)
-         movq    %rcx, -152(%rbp)
-         movq    %r8, -144(%rbp)
-         movq    %r9, -136(%rbp)
-         /* FIXME: We can avoid all this stashing of XMM registers by
- 	   (in ffi_prep_closure) computing the number of
- 	   floating-point args and moving it into %rax before calling
- 	   this function.  Once this is done, uncomment the next few
- 	   lines and only the essential XMM registers will be written
- 	   to memory.  This is a significant saving.  */
- /*         movzbl  %al, %eax  */
- /*         movq    %rax, %rdx */
- /*         leaq    0(,%rdx,4), %rax */
- /*         leaq    2f(%rip), %rdx */
- /*         subq    %rax, %rdx */
-         leaq    -1(%rbp), %rax
- /*         jmp     *%rdx */
-         movaps  %xmm7, -15(%rax)
-         movaps  %xmm6, -31(%rax)
-         movaps  %xmm5, -47(%rax)
-         movaps  %xmm4, -63(%rax)
-         movaps  %xmm3, -79(%rax)
-         movaps  %xmm2, -95(%rax)
-         movaps  %xmm1, -111(%rax)
-         movaps  %xmm0, -127(%rax)
- 2:
-         movl    %edi, -180(%rbp)
-         movl    $0, -224(%rbp)
-         movl    $48, -220(%rbp)
-         leaq    16(%rbp), %rax
-         movq    %rax, -216(%rbp)
-         leaq    -176(%rbp), %rdx
-         movq    %rdx, -208(%rbp)
-         leaq    -224(%rbp), %rsi
  	movq	%r10, %rdi
  	movq	%rsp, %rdx
!         call    ffi_closure_UNIX64_inner@PLT
  
! 	cmpl	$FFI_TYPE_FLOAT, %eax
! 	je	1f
! 	cmpl	$FFI_TYPE_DOUBLE, %eax
! 	je	2f
! 	cmpl	$FFI_TYPE_LONGDOUBLE, %eax
! 	je	3f
! 	cmpl	$FFI_TYPE_STRUCT, %eax
! 	je	4f
! 	popq	%rax
!         leave
!         ret
! 1:
! 2:
! 3:	
! 	movaps	-240(%rbp), %xmm0
!         leave
!         ret
! 4:
! 	leave
  	ret
! .LFE2:	
! 		
!         .section        .eh_frame,EH_FRAME_FLAGS,@progbits
! .Lframe0:
!         .long   .LECIE1-.LSCIE1
  .LSCIE1:
!         .long   0x0
!         .byte   0x1
!         .string "zR"
!         .uleb128 0x1
!         .sleb128 -8
!         .byte   0x10
!         .uleb128 0x1
!         .byte   0x1b
!         .byte   0xc
!         .uleb128 0x7
!         .uleb128 0x8
!         .byte   0x90
!         .uleb128 0x1
!         .align 8
  .LECIE1:
  .LSFDE1:
! 	.long	.LEFDE1-.LASFDE1
  .LASFDE1:
!         .long   .LASFDE1-.Lframe0
  
!         .long   .LFB1-.
!         .long   .LFE1-.LFB1
!         .uleb128 0x0
!         .byte   0x4		# DW_CFA_advance_loc4
!         .long   .LCFI0-.LFB1
!         .byte   0xe		# DW_CFA_def_cfa_offset
!         .uleb128 0x10
!         .byte   0x86		# DW_CFA_offset: r6 at cfa-16
!         .uleb128 0x2
!         .byte   0x4		# DW_CFA_advance_loc4
!         .long   .LCFI1-.LCFI0
!         .byte   0x86		# DW_CFA_offset: r6 at cfa-16
!         .uleb128 0x2
!         .byte   0xd		# DW_CFA_def_cfa_reg: r6
!         .uleb128 0x6
  	.align 8
  .LEFDE1:
  .LSFDE3:
!         .long   .LEFDE3-.LASFDE3        # FDE Length
  .LASFDE3:
!         .long   .LASFDE3-.Lframe0       # FDE CIE offset
! 
!         .long   .LFB2-. # FDE initial location
!         .long   .LFE2-.LFB2     # FDE address range
!         .uleb128 0x0    # Augmentation size
!         .byte   0x4     # DW_CFA_advance_loc4
!         .long   .LCFI10-.LFB2
!         .byte   0xe     # DW_CFA_def_cfa_offset
!         .uleb128 0x10
!         .byte   0x86    # DW_CFA_offset, column 0x6
!         .uleb128 0x2
!         .byte   0x4     # DW_CFA_advance_loc4
!         .long   .LCFI11-.LCFI10
!         .byte   0xd     # DW_CFA_def_cfa_register
!         .uleb128 0x6
!         .align 8
  .LEFDE3:
  
! #endif /* __x86_64__  */
--- 28,375 ----
  #include <fficonfig.h>
  #include <ffi.h>
  
  .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
+    deallocate some of the stack that has been alloca'd.  */
+ 
  	.align	2
! 	.globl	ffi_call_unix64
!         .type	ffi_call_unix64,@function
  
! ffi_call_unix64:
! .LUW0:
! 	movq	(%rsp), %r10		/* Load return address.  */
! 	leaq	(%rdi, %rsi), %rax	/* Find local stack base.  */
! 	movq	%rdx, (%rax)		/* Save flags.  */
! 	movq	%rcx, 8(%rax)		/* Save raddr.  */
! 	movq	%rbp, 16(%rax)		/* Save old frame pointer.  */
! 	movq	%r10, 24(%rax)		/* Relocate return address.  */
! 	movq	%rax, %rbp		/* Finalize local stack frame.  */
! .LUW1:
! 	movq	%rdi, %r10		/* Save a copy of the register area. */
! 	movq	%r8, %r11		/* Save a copy of the target fn.  */
  
! 	/* Load up all argument registers.  */
! 	movq	(%r10), %rdi
! 	movq	8(%r10), %rsi
! 	movq	16(%r10), %rdx
! 	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
  
  	/* Call the user function.  */
! 	call	*%r11
  
! 	/* Deallocate stack arg area; local stack frame in redzone.  */
! 	leaq	24(%rbp), %rsp
  
! 	movq	0(%rbp), %rcx		/* Reload flags.  */
! 	movq	8(%rbp), %rdi		/* Reload raddr.  */
! 	movq	16(%rbp), %rbp		/* Reload old frame pointer.  */
! .LUW2:
  
! 	/* The first byte of the flags contains the FFI_TYPE.  */
! 	movzbl	%cl, %r10d
! 	leaq	.Lstore_table(%rip), %r11
! 	movslq	(%r11, %r10, 4), %r10
! 	addq	%r11, %r10
! 	jmp	*%r10
  
! 	.section .rodata
! .Lstore_table:
! 	.long	.Lst_void-.Lstore_table		/* FFI_TYPE_VOID */
! 	.long	.Lst_sint32-.Lstore_table	/* FFI_TYPE_INT */
! 	.long	.Lst_float-.Lstore_table	/* FFI_TYPE_FLOAT */
! 	.long	.Lst_double-.Lstore_table	/* FFI_TYPE_DOUBLE */
! 	.long	.Lst_ldouble-.Lstore_table	/* FFI_TYPE_LONGDOUBLE */
! 	.long	.Lst_uint8-.Lstore_table	/* FFI_TYPE_UINT8 */
! 	.long	.Lst_sint8-.Lstore_table	/* FFI_TYPE_SINT8 */
! 	.long	.Lst_uint16-.Lstore_table	/* FFI_TYPE_UINT16 */
! 	.long	.Lst_sint16-.Lstore_table	/* FFI_TYPE_SINT16 */
! 	.long	.Lst_uint32-.Lstore_table	/* FFI_TYPE_UINT32 */
! 	.long	.Lst_sint32-.Lstore_table	/* FFI_TYPE_SINT32 */
! 	.long	.Lst_int64-.Lstore_table	/* FFI_TYPE_UINT64 */
! 	.long	.Lst_int64-.Lstore_table	/* FFI_TYPE_SINT64 */
! 	.long	.Lst_struct-.Lstore_table	/* FFI_TYPE_STRUCT */
! 	.long	.Lst_int64-.Lstore_table	/* FFI_TYPE_POINTER */
  
! 	.text
! 	.align 2
! .Lst_void:
  	ret
+ 	.align 2
  
! .Lst_uint8:
! 	movzbq	%al, %rax
! 	movq	%rax, (%rdi)
  	ret
! 	.align 2
! .Lst_sint8:
! 	movsbq	%al, %rax
! 	movq	%rax, (%rdi)
  	ret
! 	.align 2
! .Lst_uint16:
! 	movzwq	%ax, %rax
! 	movq	%rax, (%rdi)
! 	.align 2
! .Lst_sint16:
! 	movswq	%ax, %rax
! 	movq	%rax, (%rdi)
! 	ret
! 	.align 2
! .Lst_uint32:
! 	movl	%eax, %eax
! 	movq	%rax, (%rdi)
! 	.align 2
! .Lst_sint32:
! 	cltq
! 	movq	%rax, (%rdi)
! 	ret
! 	.align 2
! .Lst_int64:
! 	movq	%rax, (%rdi)
  	ret
  
! 	.align 2
! .Lst_float:
! 	movss	%xmm0, (%rdi)
! 	ret
! 	.align 2
! .Lst_double:
! 	movsd	%xmm0, (%rdi)
! 	ret
! .Lst_ldouble:
! 	fstpt	(%rdi)
  	ret
  
! 	.align 2
! .Lst_struct:
! 	leaq	-20(%rsp), %rsi		/* Scratch area in redzone.  */
! 
! 	/* We have to locate the values now, and since we don't want to
! 	   write too much data into the user's return value, we spill the
! 	   value to a 16 byte scratch area first.  Bits 8, 9, and 10
! 	   control where the values are located.  Only one of the three
! 	   bits will be set; see ffi_prep_cif_machdep for the pattern.  */
! 	movd	%xmm0, %r10
! 	movd	%xmm1, %r11
! 	testl	$0x100, %ecx
! 	cmovnz	%rax, %rdx
! 	cmovnz	%r10, %rax
! 	testl	$0x200, %ecx
! 	cmovnz	%r10, %rdx
! 	testl	$0x400, %ecx
! 	cmovnz	%r10, %rax
! 	cmovnz	%r11, %rdx
! 	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
  	movq	%rsp, %rdx
! 	leaq	208(%rsp), %rcx
! 	call	ffi_closure_unix64_inner@PLT
  
! 	/* 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
! 	leaq	.Lload_table(%rip), %r11
! 	movslq	(%r11, %r10, 4), %r10
! 	addq	%r11, %r10
! 	jmp	*%r10
! 
! 	.section .rodata
! .Lload_table:
! 	.long	.Lld_void-.Lload_table		/* FFI_TYPE_VOID */
! 	.long	.Lld_int32-.Lload_table		/* FFI_TYPE_INT */
! 	.long	.Lld_float-.Lload_table		/* FFI_TYPE_FLOAT */
! 	.long	.Lld_double-.Lload_table	/* FFI_TYPE_DOUBLE */
! 	.long	.Lld_ldouble-.Lload_table	/* FFI_TYPE_LONGDOUBLE */
! 	.long	.Lld_int8-.Lload_table		/* FFI_TYPE_UINT8 */
! 	.long	.Lld_int8-.Lload_table		/* FFI_TYPE_SINT8 */
! 	.long	.Lld_int16-.Lload_table		/* FFI_TYPE_UINT16 */
! 	.long	.Lld_int16-.Lload_table		/* FFI_TYPE_SINT16 */
! 	.long	.Lld_int32-.Lload_table		/* FFI_TYPE_UINT32 */
! 	.long	.Lld_int32-.Lload_table		/* FFI_TYPE_SINT32 */
! 	.long	.Lld_int64-.Lload_table		/* FFI_TYPE_UINT64 */
! 	.long	.Lld_int64-.Lload_table		/* FFI_TYPE_SINT64 */
! 	.long	.Lld_struct-.Lload_table	/* FFI_TYPE_STRUCT */
! 	.long	.Lld_int64-.Lload_table		/* FFI_TYPE_POINTER */
! 
! 	.text
! 	.align 2
! .Lld_void:
  	ret
! 
! 	.align 2
! .Lld_int8:
! 	movzbl	-24(%rsp), %eax
! 	ret
! 	.align 2
! .Lld_int16:
! 	movzwl	-24(%rsp), %eax
! 	ret
! 	.align 2
! .Lld_int32:
! 	movl	-24(%rsp), %eax
! 	ret
! 	.align 2
! .Lld_int64:
! 	movq	-24(%rsp), %rax
! 	ret
! 
! 	.align 2
! .Lld_float:
! 	movss	-24(%rsp), %xmm0
! 	ret
! 	.align 2
! .Lld_double:
! 	movsd	-24(%rsp), %xmm0
! 	ret
! 	.align 2
! .Lld_ldouble:
! 	fldt	-24(%rsp)
! 	ret
! 
! 	.align 2
! .Lld_struct:
! 	/* There are four possibilities here, %rax/%rdx, %xmm0/%rax,
! 	   %rax/%xmm0, %xmm0/%xmm1.  We collapse two by always loading
! 	   both rdx and xmm1 with the second word.  For the remaining,
! 	   bit 8 set means xmm0 gets the second word, and bit 9 means
! 	   that rax gets the second word.  */
! 	movq	-24(%rsp), %rcx
! 	movq	-16(%rsp), %rdx
! 	movq	-16(%rsp), %xmm1
! 	testl	$0x100, %eax
! 	cmovnz	%rdx, %rcx
! 	movd	%rcx, %xmm0
! 	testl	$0x200, %eax
! 	movq	-24(%rsp), %rax
! 	cmovnz	%rdx, %rax
! 	ret
! .LUW7:
! 	.size	ffi_closure_unix64,.-ffi_closure_unix64
! 
! 	.section	.eh_frame,"a",@progbits
! .Lframe1:
! 	.long	.LECIE1-.LSCIE1		/* CIE Length */
  .LSCIE1:
! 	.long	0			/* CIE Identifier Tag */
! 	.byte	1			/* CIE Version */
! 	.ascii "zR\0"			/* CIE Augmentation */
! 	.uleb128 1			/* CIE Code Alignment Factor */
! 	.sleb128 -8			/* CIE Data Alignment Factor */
! 	.byte	0x10			/* CIE RA Column */
! 	.uleb128 1			/* Augmentation size */
! 	.byte	0x1b			/* FDE Encoding (pcrel sdata4) */
! 	.byte	0xc			/* DW_CFA_def_cfa, %rsp offset 8 */
! 	.uleb128 7
! 	.uleb128 8
! 	.byte	0x80+16			/* DW_CFA_offset, %rip offset 1*-8 */
! 	.uleb128 1
! 	.align 8
  .LECIE1:
  .LSFDE1:
! 	.long	.LEFDE1-.LASFDE1	/* FDE Length */
  .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
! 	.byte	0xc			/* DW_CFA_def_cfa, %rsp offset 8 */
! 	.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:
  
! #endif /* __x86_64__ */
diff -Nrcpad gcc-3.4.3/libffi/src/x86/win32.S gcc-4.0.0/libffi/src/x86/win32.S
*** gcc-3.4.3/libffi/src/x86/win32.S	Tue Oct 21 19:01:58 2003
--- gcc-4.0.0/libffi/src/x86/win32.S	Tue Mar 16 19:17:33 2004
*************** retlongdouble:
*** 114,125 ****
   
  retint64:
          cmpl  $FFI_TYPE_SINT64,%ecx
!         jne   retstruct
          # Load %ecx with the pointer to storage for the return value
          movl  24(%ebp),%ecx
          movl  %eax,0(%ecx)
          movl  %edx,4(%ecx)
   
  retstruct:
          # Nothing to do!
   
--- 114,141 ----
   
  retint64:
          cmpl  $FFI_TYPE_SINT64,%ecx
!         jne   retstruct1b
          # Load %ecx with the pointer to storage for the return value
          movl  24(%ebp),%ecx
          movl  %eax,0(%ecx)
          movl  %edx,4(%ecx)
   
+ retstruct1b:
+         cmpl  $FFI_TYPE_SINT8,%ecx
+         jne   retstruct2b
+         # Load %ecx with the pointer to storage for the return value
+         movl  24(%ebp),%ecx
+         movb  %al,0(%ecx)
+         jmp   epilogue
+  
+ retstruct2b:
+         cmpl  $FFI_TYPE_SINT16,%ecx
+         jne   retstruct
+         # Load %ecx with the pointer to storage for the return value
+         movl  24(%ebp),%ecx
+         movw  %ax,0(%ecx)
+         jmp   epilogue
+  
  retstruct:
          # Nothing to do!
   
*************** sc_retlongdouble:
*** 209,220 ****
  
  sc_retint64:
          cmpl  $FFI_TYPE_SINT64,%ecx
!         jne   sc_retstruct
          # Load %ecx with the pointer to storage for the return value
          movl  24(%ebp),%ecx
          movl  %eax,0(%ecx)
          movl  %edx,4(%ecx)
  
  sc_retstruct:
          # Nothing to do!
  
--- 225,252 ----
  
  sc_retint64:
          cmpl  $FFI_TYPE_SINT64,%ecx
!         jne   sc_retstruct1b
          # Load %ecx with the pointer to storage for the return value
          movl  24(%ebp),%ecx
          movl  %eax,0(%ecx)
          movl  %edx,4(%ecx)
  
+ sc_retstruct1b:
+         cmpl  $FFI_TYPE_SINT8,%ecx
+         jne   sc_retstruct2b
+         # Load %ecx with the pointer to storage for the return value
+         movl  24(%ebp),%ecx
+         movb  %al,0(%ecx)
+         jmp   sc_epilogue
+ 
+ sc_retstruct2b:
+         cmpl  $FFI_TYPE_SINT16,%ecx
+         jne   sc_retstruct
+         # Load %ecx with the pointer to storage for the return value
+         movl  24(%ebp),%ecx
+         movw  %ax,0(%ecx)
+         jmp   sc_epilogue
+ 
  sc_retstruct:
          # Nothing to do!
  
diff -Nrcpad gcc-3.4.3/libffi/testsuite/Makefile.in gcc-4.0.0/libffi/testsuite/Makefile.in
*** gcc-3.4.3/libffi/testsuite/Makefile.in	Wed Nov 12 18:18:30 2003
--- gcc-4.0.0/libffi/testsuite/Makefile.in	Thu Dec  2 11:05:09 2004
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999 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.
--- 1,8 ----
! # 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.
***************
*** 10,96 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! 
! SHELL = @SHELL@
! 
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = ..
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
! AS = @AS@
  CC = @CC@
! CXX = @CXX@
! CXXCPP = @CXXCPP@
! DLLTOOL = @DLLTOOL@
  EXEEXT = @EXEEXT@
! GCJ = @GCJ@
! GCJFLAGS = @GCJFLAGS@
  HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
! OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  RANLIB = @RANLIB@
  SHELL = @SHELL@
  STRIP = @STRIP@
  TARGET = @TARGET@
  TARGETDIR = @TARGETDIR@
  VERSION = @VERSION@
  gcc_version = @gcc_version@
! libffi_basedir = @libffi_basedir@
  tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
- 
  AUTOMAKE_OPTIONS = foreign dejagnu
  
  # Setup the testing framework, if you have one
--- 12,201 ----
  # 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 = 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
! CONFIG_HEADER = $(top_builddir)/fficonfig.h
! CONFIG_CLEAN_FILES =
! SOURCES =
! DIST_SOURCES =
! DEJATOOL = $(PACKAGE)
! RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
! DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
! ACLOCAL = @ACLOCAL@
! ALLOCA = @ALLOCA@
! ALPHA_FALSE = @ALPHA_FALSE@
! ALPHA_TRUE = @ALPHA_TRUE@
! AMDEP_FALSE = @AMDEP_FALSE@
! AMDEP_TRUE = @AMDEP_TRUE@
! AMTAR = @AMTAR@
! AM_RUNTESTFLAGS = 
! ARM_FALSE = @ARM_FALSE@
! ARM_TRUE = @ARM_TRUE@
! AUTOCONF = @AUTOCONF@
! AUTOHEADER = @AUTOHEADER@
! AUTOMAKE = @AUTOMAKE@
! AWK = @AWK@
  CC = @CC@
! CCAS = @CCAS@
! CCASFLAGS = @CCASFLAGS@
! CCDEPMODE = @CCDEPMODE@
! CFLAGS = @CFLAGS@
! CPP = @CPP@
! CPPFLAGS = @CPPFLAGS@
! CYGPATH_W = @CYGPATH_W@
! DEFS = @DEFS@
! DEPDIR = @DEPDIR@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXEEXT = @EXEEXT@
! FRV_FALSE = @FRV_FALSE@
! FRV_TRUE = @FRV_TRUE@
  HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
+ IA64_FALSE = @IA64_FALSE@
+ IA64_TRUE = @IA64_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ M32R_FALSE = @M32R_FALSE@
+ M32R_TRUE = @M32R_TRUE@
+ M68K_FALSE = @M68K_FALSE@
+ M68K_TRUE = @M68K_TRUE@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
! MIPS_IRIX_FALSE = @MIPS_IRIX_FALSE@
! MIPS_IRIX_TRUE = @MIPS_IRIX_TRUE@
! MIPS_LINUX_FALSE = @MIPS_LINUX_FALSE@
! MIPS_LINUX_TRUE = @MIPS_LINUX_TRUE@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PA_FALSE = @PA_FALSE@
+ PA_TRUE = @PA_TRUE@
+ POWERPC_AIX_FALSE = @POWERPC_AIX_FALSE@
+ POWERPC_AIX_TRUE = @POWERPC_AIX_TRUE@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+ POWERPC_DARWIN_TRUE = @POWERPC_DARWIN_TRUE@
+ POWERPC_FALSE = @POWERPC_FALSE@
+ POWERPC_TRUE = @POWERPC_TRUE@
  RANLIB = @RANLIB@
+ S390_FALSE = @S390_FALSE@
+ S390_TRUE = @S390_TRUE@
+ SET_MAKE = @SET_MAKE@
+ SH64_FALSE = @SH64_FALSE@
+ SH64_TRUE = @SH64_TRUE@
  SHELL = @SHELL@
+ SH_FALSE = @SH_FALSE@
+ SH_TRUE = @SH_TRUE@
+ SPARC_FALSE = @SPARC_FALSE@
+ SPARC_TRUE = @SPARC_TRUE@
  STRIP = @STRIP@
  TARGET = @TARGET@
  TARGETDIR = @TARGETDIR@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
  VERSION = @VERSION@
+ X86_64_FALSE = @X86_64_FALSE@
+ X86_64_TRUE = @X86_64_TRUE@
+ X86_FALSE = @X86_FALSE@
+ X86_TRUE = @X86_TRUE@
+ X86_WIN32_FALSE = @X86_WIN32_FALSE@
+ X86_WIN32_TRUE = @X86_WIN32_TRUE@
+ ac_ct_CC = @ac_ct_CC@
+ 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__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@
+ 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@
! 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@
! multi_basedir = @multi_basedir@
! 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@
  tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  AUTOMAKE_OPTIONS = foreign dejagnu
  
  # Setup the testing framework, if you have one
*************** EXPECT = `if [ -f $(top_builddir)/../exp
*** 98,252 ****
              echo $(top_builddir)/../expect/expect ; \
            else echo expect ; fi`
  
- 
  RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \
  	       echo $(top_srcdir)/../dejagnu/runtest ; \
  	    else echo runtest; fi`
  
- 
- AM_RUNTESTFLAGS = 
- 
  CLEANFILES = *.exe core* *.log *.sum
! mkinstalldirs = $(SHELL) $(top_srcdir)/${libffi_basedir}../mkinstalldirs
! CONFIG_HEADER = ../fficonfig.h
! CONFIG_CLEAN_FILES = 
! DIST_COMMON =  Makefile.am Makefile.in
! 
! 
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
  
- TAR = gnutar
- GZIP_ENV = --best
- all: all-redirect
  .SUFFIXES:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile
! 
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
! 
! tags: TAGS
! TAGS:
  
  
! distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
  
! subdir = testsuite
  
! distdir: $(DISTFILES)
! 	here=`cd $(top_builddir) && pwd`; \
! 	top_distdir=`cd $(top_distdir) && pwd`; \
! 	distdir=`cd $(distdir) && pwd`; \
! 	cd $(top_srcdir) \
! 	  && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign testsuite/Makefile
! 	@for file in $(DISTFILES); do \
! 	  d=$(srcdir); \
! 	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
! 	  else \
! 	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
! 	  fi; \
! 	done
  
! RUNTESTFLAGS =
  
! DEJATOOL = $(PACKAGE)
  
- RUNTESTDEFAULTFLAGS = --tool $(DEJATOOL) --srcdir $$srcdir
  
  check-DEJAGNU: site.exp
! 	srcdir=`cd $(srcdir) && pwd`; export srcdir; \
  	EXPECT=$(EXPECT); export EXPECT; \
  	runtest=$(RUNTEST); \
  	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
! 	  $$runtest $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
  	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
  	fi
  site.exp: Makefile
  	@echo 'Making a new site.exp file...'
! 	@test ! -f site.bak || rm -f site.bak
! 	@echo '## these variables are automatically generated by make ##' > $@-t
! 	@echo '# Do not edit here.  If you wish to override these values' >> $@-t
! 	@echo '# edit the last section' >> $@-t
! 	@echo 'set tool $(DEJATOOL)' >> $@-t
! 	@echo 'set srcdir $(srcdir)' >> $@-t
! 	@echo 'set objdir' `pwd` >> $@-t
! 	@echo 'set host_alias $(host_alias)' >> $@-t
! 	@echo 'set host_triplet $(host_triplet)' >> $@-t
! 	@echo 'set target_alias $(target_alias)' >> $@-t
! 	@echo 'set target_triplet $(target_triplet)' >> $@-t
! 	@echo 'set build_alias $(build_alias)' >> $@-t
! 	@echo 'set build_triplet $(build_triplet)' >> $@-t
! 	@echo '## All variables above are generated by configure. Do Not Edit ##' >> $@-t
! 	@test ! -f site.exp || sed '1,/^## All variables above are.*##/ d' site.exp >> $@-t
  	@test ! -f site.exp || mv site.exp site.bak
! 	@mv $@-t site.exp
! info-am:
! info: info-am
! dvi-am:
! dvi: dvi-am
  check-am: all-am
  	$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
  check: check-am
! installcheck-am:
! installcheck: installcheck-am
! install-exec-am:
  install-exec: install-exec-am
- 
- install-data-am:
  install-data: install-data-am
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-am
- uninstall-am:
- uninstall: uninstall-am
- all-am: Makefile
- all-redirect: all-am
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs:
- 
  
  mostlyclean-generic:
  
  clean-generic:
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-generic
  
! mostlyclean: mostlyclean-am
  
! clean-am:  clean-generic mostlyclean-am
  
! clean: clean-am
  
! distclean-am:  distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-am
  
! maintainer-clean-am:  maintainer-clean-generic distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
  maintainer-clean: maintainer-clean-am
  
! .PHONY: tags distdir check-DEJAGNU info-am info dvi-am dvi check \
! check-am installcheck-am installcheck install-exec-am install-exec \
! install-data-am install-data install-am install uninstall-am uninstall \
! all-redirect all-am all installdirs mostlyclean-generic \
! distclean-generic clean-generic maintainer-clean-generic clean \
! mostlyclean distclean maintainer-clean
  
  
  # 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.
--- 203,411 ----
              echo $(top_builddir)/../expect/expect ; \
            else echo expect ; fi`
  
  RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \
  	       echo $(top_srcdir)/../dejagnu/runtest ; \
  	    else echo runtest; fi`
  
  CLEANFILES = *.exe core* *.log *.sum
! 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) --foreign  testsuite/Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  testsuite/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:
  
  
  check-DEJAGNU: site.exp
! 	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
  	EXPECT=$(EXPECT); export EXPECT; \
  	runtest=$(RUNTEST); \
  	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
! 	  l='$(DEJATOOL)'; for tool in $$l; do \
! 	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
! 	  done; \
  	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
  	fi
  site.exp: Makefile
  	@echo 'Making a new site.exp file...'
! 	@echo '## these variables are automatically generated by make ##' >site.tmp
! 	@echo '# Do not edit here.  If you wish to override these values' >>site.tmp
! 	@echo '# edit the last section' >>site.tmp
! 	@echo 'set srcdir $(srcdir)' >>site.tmp
! 	@echo "set objdir `pwd`" >>site.tmp
! 	@echo 'set build_alias "$(build_alias)"' >>site.tmp
! 	@echo 'set build_triplet $(build_triplet)' >>site.tmp
! 	@echo 'set host_alias "$(host_alias)"' >>site.tmp
! 	@echo 'set host_triplet $(host_triplet)' >>site.tmp
! 	@echo 'set target_alias "$(target_alias)"' >>site.tmp
! 	@echo 'set target_triplet $(target_triplet)' >>site.tmp
! 	@echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
! 	@test ! -f site.exp || \
! 	  sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
! 	@-rm -f site.bak
  	@test ! -f site.exp || mv site.exp site.bak
! 	@mv site.tmp site.exp
! 
! distclean-DEJAGNU:
! 	-rm -f site.exp site.bak
! 	-l='$(DEJATOOL)'; for tool in $$l; do \
! 	  rm -f $$tool.sum $$tool.log; \
! 	done
! 
! 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
  	$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
  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:
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  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-DEJAGNU 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-DEJAGNU check-am clean clean-generic \
+ 	clean-libtool distclean distclean-DEJAGNU 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.
diff -Nrcpad gcc-3.4.3/libffi/testsuite/lib/libffi-dg.exp gcc-4.0.0/libffi/testsuite/lib/libffi-dg.exp
*** gcc-3.4.3/libffi/testsuite/lib/libffi-dg.exp	Mon Oct 25 09:22:45 2004
--- gcc-4.0.0/libffi/testsuite/lib/libffi-dg.exp	Wed Nov 24 04:39:39 2004
***************
*** 14,22 ****
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  
  load_lib dg.exp
  load_lib libgloss.exp
! 
  
  
  # Define libffi callbacks for dg.exp.
--- 14,28 ----
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  
+ proc load_gcc_lib { filename } {
+     global srcdir
+     load_file $srcdir/../../gcc/testsuite/lib/$filename
+ }
+ 
  load_lib dg.exp
  load_lib libgloss.exp
! load_gcc_lib target-libpath.exp
! load_gcc_lib wrapper.exp
  
  
  # Define libffi callbacks for dg.exp.
*************** proc libffi-init { args } {
*** 71,82 ****
--- 77,90 ----
      global gluefile wrap_flags;
      global srcdir
      global blddirffi
+     global objdir
      global blddircxx
      global TOOL_OPTIONS
      global tool
      global libffi_include
      global libffi_link_flags
      global tool_root_dir
+     global ld_library_path
  
      set blddirffi [lookfor_file [get_multilibs] libffi]
      verbose "libffi $blddirffi"
*************** proc libffi-init { args } {
*** 125,152 ****
  	lappend libffi_link_flags "-L${blddircxx}/src/.libs"
      }
  
!     # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but
!     # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH
!     # (for the 64-bit ABI).  The right way to do this would be to modify
!     # unix.exp -- but that's not an option since it's part of DejaGNU
!     # proper, so we do it here.
!     # The same applies to darwin (DYLD_LIBRARY_PATH), solaris 32 bit
!     # (LD_LIBRARY_PATH_32), solaris 64 bit (LD_LIBRARY_PATH_64), and HP-UX
!     # (SHLIB_PATH).
!     if {![is_remote target]} {
! 	set ld_path "LD_LIBRARY_PATH SHLIB_PATH LD_LIBRARYN32_PATH LD_LIBRARY64_PATH LD_LIBRARY_PATH_32 LD_LIBRARY_PATH_64 DYLD_LIBRARY_PATH"
! 	foreach path $ld_path {
! 	    if [info exists env($path)] {
! 		# If we've already added these directories once, keep
! 		# the existing path.
! 		if {$ld_library_path != $env($path)
! 		    && [string first $ld_library_path: $env($path)] != 0} {
! 		    setenv $path "$ld_library_path:$env($path)"
! 		}
! 	    } else {
! 		setenv $path "$ld_library_path"
! 	    }
! 	}
      }
  }
  
--- 133,148 ----
  	lappend libffi_link_flags "-L${blddircxx}/src/.libs"
      }
  
!     set_ld_library_path_env_vars
!     libffi_maybe_build_wrapper "${objdir}/testglue.o"
! }
! 
! proc libffi_exit { } {
!     global gluefile;
! 
!     if [info exists gluefile] {
! 	file_on_build delete $gluefile;
! 	unset gluefile;
      }
  }
  
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn0.c gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn0.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn0.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn0.c	Wed Aug 25 05:06:54 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn1.c gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn1.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn1.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn1.c	Wed Aug 25 05:06:54 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn2.c gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn2.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn2.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn2.c	Wed Aug 25 05:06:54 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void closure_test_fn2(ffi_cif* cif,void* resp,void** args,
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void closure_test_fn2(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn3.c gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn3.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn3.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn3.c	Wed Aug 25 05:06:54 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void closure_test_fn3(ffi_cif* cif,void* resp,void** args,
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void closure_test_fn3(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn4.c gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn4.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn4.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn4.c	Wed Aug 25 05:06:54 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031026	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  
  #include "ffitest.h"
  
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031026	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  
  #include "ffitest.h"
  
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn5.c gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn5.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/closure_fn5.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/closure_fn5.c	Wed Aug 25 05:06:54 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031026	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  
  #include "ffitest.h"
  
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031026	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  
  #include "ffitest.h"
  
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_12byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_12byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_12byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_12byte.c	Wed Aug 25 05:06:54 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_12byte {
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_12byte {
*************** int main (void)
*** 88,93 ****
--- 88,97 ----
  
    CHECK(ffi_prep_closure(pcl, &cif, cls_struct_12byte_gn, NULL) == FFI_OK);
  
+   res_dbl.a = 0;
+   res_dbl.b = 0;
+   res_dbl.c = 0;
+ 
    res_dbl = ((cls_struct_12byte(*)(cls_struct_12byte, cls_struct_12byte))(pcl))(h_dbl, j_dbl);
    /* { dg-output "\n7 4 9 1 5 3: 8 9 12" } */
    printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_16byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_16byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_16byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_16byte.c	Wed Aug 25 05:06:54 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_16byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_16byte {
*************** int main (void)
*** 87,92 ****
--- 87,96 ----
    printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
    /* { dg-output "\nres: 8 17 12" } */
  
+   res_dbl.a = 0;
+   res_dbl.b = 0.0;
+   res_dbl.c = 0;
+ 
    CHECK(ffi_prep_closure(pcl, &cif, cls_struct_16byte_gn, NULL) == FFI_OK);
  
    res_dbl = ((cls_struct_16byte(*)(cls_struct_16byte, cls_struct_16byte))(pcl))(h_dbl, j_dbl);
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_18byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_18byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_18byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_18byte.c	Wed Aug 25 05:06:54 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030915	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_18byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030915	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_18byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_19byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_19byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_19byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_19byte.c	Wed Aug 25 05:06:54 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030915	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_19byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030915	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_19byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_1_1byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_1_1byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_1_1byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_1_1byte.c	Wed Aug 25 05:06:54 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030902	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_1_1byte {
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030902	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_1_1byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_20byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_20byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_20byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_20byte.c	Wed Aug 25 05:06:54 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_20byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_20byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_20byte1.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_20byte1.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_20byte1.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_20byte1.c	Wed Aug 25 05:06:54 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_20byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_20byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_24byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_24byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_24byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_24byte.c	Wed Aug 25 05:06:55 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_24byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_24byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_2byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_2byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_2byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_2byte.c	Wed Aug 25 05:06:55 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_2byte {
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_2byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_3_1byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_3_1byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_3_1byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_3_1byte.c	Wed Aug 25 05:06:55 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030902	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_3_1byte {
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030902	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_3_1byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_3byte1.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_3byte1.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_3byte1.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_3byte1.c	Wed Aug 25 05:06:55 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_3byte {
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_3byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_3byte2.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_3byte2.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_3byte2.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_3byte2.c	Wed Aug 25 05:06:55 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_3byte_1 {
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_3byte_1 {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_4_1byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_4_1byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_4_1byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_4_1byte.c	Wed Aug 25 05:06:55 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030902	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_4_1byte {
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030902	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_4_1byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_4byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_4byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_4byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_4byte.c	Wed Aug 25 05:06:55 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  
  #include "ffitest.h"
  
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  
  #include "ffitest.h"
  
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_5byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_5byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_5byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_5byte.c	Wed Aug 25 05:06:55 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_5byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_5byte {
*************** int main (void)
*** 67,73 ****
  
    struct cls_struct_5byte g_dbl = { 127, 120, 1 };
    struct cls_struct_5byte f_dbl = { 12, 128, 9 };
!   struct cls_struct_5byte res_dbl;
  
    cls_struct_fields[0] = &ffi_type_ushort;
    cls_struct_fields[1] = &ffi_type_ushort;
--- 67,73 ----
  
    struct cls_struct_5byte g_dbl = { 127, 120, 1 };
    struct cls_struct_5byte f_dbl = { 12, 128, 9 };
!   struct cls_struct_5byte res_dbl = { 0, 0, 0 };
  
    cls_struct_fields[0] = &ffi_type_ushort;
    cls_struct_fields[1] = &ffi_type_ushort;
*************** int main (void)
*** 90,95 ****
--- 90,99 ----
    printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
    /* { dg-output "\nres: 139 248 10" } */
  
+   res_dbl.a = 0;
+   res_dbl.b = 0;
+   res_dbl.c = 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);
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_64byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_64byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_64byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_64byte.c	Wed Aug 25 05:06:55 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_64byte {
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_64byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_6byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_6byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_6byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_6byte.c	Wed Aug 25 05:06:55 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_6byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_6byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_7byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_7byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_7byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_7byte.c	Wed Aug 25 05:06:55 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_7byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_7byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_8byte.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_8byte.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_8byte.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_8byte.c	Wed Aug 25 05:06:55 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_8byte {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_8byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_9byte1.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_9byte1.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_9byte1.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_9byte1.c	Wed Aug 25 05:06:55 2004
***************
*** 7,13 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030914	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_9byte {
--- 7,13 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030914	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_9byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_9byte2.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_9byte2.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_9byte2.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_9byte2.c	Wed Aug 25 05:06:55 2004
***************
*** 7,13 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030914	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_9byte {
--- 7,13 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030914	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_9byte {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_double.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_double.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_double.c	Thu Dec  4 17:51:17 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_double.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_float.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_float.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_float.c	Thu Dec  4 17:51:17 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_float.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_longdouble.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_longdouble.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_longdouble.c	Fri Mar 12 01:35:32 2004
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_longdouble.c	Fri Feb 11 22:33:16 2005
***************
*** 4,11 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
! /* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */
  
  #include "ffitest.h"
  
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  
  #include "ffitest.h"
  
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_pointer.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_pointer.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_pointer.c	Wed Dec 10 09:43:29 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_pointer.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_sint16.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_sint16.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_sint16.c	Thu Dec  4 17:51:17 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_sint16.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_sint32.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_sint32.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_sint32.c	Thu Dec  4 17:51:17 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_sint32.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_sint64.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_sint64.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_sint64.c	Thu Dec  4 17:51:17 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_sint64.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_uint16.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_uint16.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_uint16.c	Thu Dec  4 17:51:17 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_uint16.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_uint32.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_uint32.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_uint32.c	Thu Dec  4 17:51:17 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_uint32.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_uint64.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_uint64.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_align_uint64.c	Thu Dec  4 17:51:17 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_align_uint64.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
--- 4,10 ----
     PR:		none.
     Originator:	<hos@tamanegi.org> 20031203	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_align {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_double.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_double.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_double.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_double.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_double_fn(ffi_cif* cif,void* resp,void** args,
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_double_fn(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_float.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_float.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_float.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_float.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_float_fn(ffi_cif* cif,void* resp,void** args,
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_float_fn(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_schar.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_schar.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_schar.c	Mon Dec  1 07:23:28 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_schar.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		PR13221.
     Originator:	<hos@tamanegi.org> 20031129  */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  signed char test_func_fn(signed char a1, signed char a2)
--- 4,10 ----
     PR:		PR13221.
     Originator:	<hos@tamanegi.org> 20031129  */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  signed char test_func_fn(signed char a1, signed char a2)
*************** int main (void)
*** 55,61 ****
  
    args_dbl[0] = &a;
    args_dbl[1] = &b;
!   args_dbl[3] = NULL;
  
    cl_arg_types[0] = &ffi_type_schar;
    cl_arg_types[1] = &ffi_type_schar;
--- 55,61 ----
  
    args_dbl[0] = &a;
    args_dbl[1] = &b;
!   args_dbl[2] = NULL;
  
    cl_arg_types[0] = &ffi_type_schar;
    cl_arg_types[1] = &ffi_type_schar;
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_sshort.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_sshort.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_sshort.c	Mon Dec  1 07:23:28 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_sshort.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  signed short test_func_fn(signed short a1, signed short a2)
--- 4,10 ----
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  signed short test_func_fn(signed short a1, signed short a2)
*************** int main (void)
*** 55,61 ****
  
    args_dbl[0] = &a;
    args_dbl[1] = &b;
!   args_dbl[3] = NULL;
  
    cl_arg_types[0] = &ffi_type_sshort;
    cl_arg_types[1] = &ffi_type_sshort;
--- 55,61 ----
  
    args_dbl[0] = &a;
    args_dbl[1] = &b;
!   args_dbl[2] = NULL;
  
    cl_arg_types[0] = &ffi_type_sshort;
    cl_arg_types[1] = &ffi_type_sshort;
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_sshortchar.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_sshortchar.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_sshortchar.c	Mon Dec  1 07:23:28 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_sshortchar.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  signed short test_func_fn(signed char a1, signed short a2,
--- 4,10 ----
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  signed short test_func_fn(signed char a1, signed short a2,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_uchar.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_uchar.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_uchar.c	Mon Dec  1 07:23:28 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_uchar.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  unsigned char test_func_fn(unsigned char a1, unsigned char a2,
--- 4,10 ----
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  unsigned char test_func_fn(unsigned char a1, unsigned char a2,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_ushort.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_ushort.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_ushort.c	Mon Dec  1 07:23:28 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_ushort.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  unsigned short test_func_fn(unsigned short a1, unsigned short a2)
--- 4,10 ----
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  unsigned short test_func_fn(unsigned short a1, unsigned short a2)
*************** int main (void)
*** 55,61 ****
  
    args_dbl[0] = &a;
    args_dbl[1] = &b;
!   args_dbl[3] = NULL;
  
    cl_arg_types[0] = &ffi_type_ushort;
    cl_arg_types[1] = &ffi_type_ushort;
--- 55,61 ----
  
    args_dbl[0] = &a;
    args_dbl[1] = &b;
!   args_dbl[2] = NULL;
  
    cl_arg_types[0] = &ffi_type_ushort;
    cl_arg_types[1] = &ffi_type_ushort;
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_ushortchar.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_ushortchar.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_multi_ushortchar.c	Mon Dec  1 07:23:28 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_multi_ushortchar.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  unsigned short test_func_fn(unsigned char a1, unsigned short a2,
--- 4,10 ----
     PR:		PR13221.
     Originator:	<andreast@gcc.gnu.org> 20031129  */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  unsigned short test_func_fn(unsigned char a1, unsigned short a2,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_schar.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_schar.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_schar.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_schar.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031108	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_schar_fn(ffi_cif* cif,void* resp,void** args,
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031108	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_schar_fn(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_sint.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_sint.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_sint.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_sint.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031108	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_sint_fn(ffi_cif* cif,void* resp,void** args,
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031108	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_sint_fn(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_sshort.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_sshort.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_sshort.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_sshort.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031108	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_sshort_fn(ffi_cif* cif,void* resp,void** args,
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20031108	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_sshort_fn(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_uchar.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_uchar.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_uchar.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_uchar.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_uchar_fn(ffi_cif* cif,void* resp,void** args,
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_uchar_fn(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_uint.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_uint.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_uint.c	Thu Jan 22 23:06:10 2004
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_uint.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_uint_fn(ffi_cif* cif,void* resp,void** args,
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_uint_fn(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_ulonglong.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_ulonglong.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_ulonglong.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_ulonglong.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_ulonglong_fn(ffi_cif* cif,void* resp,void** args,
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_ulonglong_fn(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/cls_ushort.c gcc-4.0.0/libffi/testsuite/libffi.call/cls_ushort.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/cls_ushort.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/cls_ushort.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_ushort_fn(ffi_cif* cif,void* resp,void** args,
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  static void cls_ret_ushort_fn(ffi_cif* cif,void* resp,void** args,
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/float.c gcc-4.0.0/libffi/testsuite/libffi.call/float.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/float.c	Fri Mar 12 01:35:32 2004
--- gcc-4.0.0/libffi/testsuite/libffi.call/float.c	Fri Feb 11 22:33:16 2005
***************
*** 5,11 ****
     Originator:	From the original ffitest.c  */
  
  /* { dg-do run } */
- /* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */
  
  #include "ffitest.h"
  
--- 5,10 ----
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/float2.c gcc-4.0.0/libffi/testsuite/libffi.call/float2.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/float2.c	Fri Mar 12 01:35:32 2004
--- gcc-4.0.0/libffi/testsuite/libffi.call/float2.c	Fri Feb 11 22:33:16 2005
***************
*** 5,11 ****
     Originator:	From the original ffitest.c  */
  
  /* { dg-do run } */
- /* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */
  
  #include "ffitest.h"
  #include "float.h"
--- 5,10 ----
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/float3.c gcc-4.0.0/libffi/testsuite/libffi.call/float3.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/float3.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/testsuite/libffi.call/float3.c	Fri Feb 11 22:33:16 2005
***************
*** 0 ****
--- 1,72 ----
+ /* Area:	ffi_call
+    Purpose:	Check float arguments with different orders.
+    Limitations:	none.
+    PR:		none.
+    Originator:	From the original ffitest.c  */
+ 
+ /* { dg-do run } */
+ 
+ #include "ffitest.h"
+ #include "float.h"
+ 
+ static double floating_1(float a, double b, long double c)
+ {
+   return (double) a + b + (double) c;
+ }
+ 
+ static double floating_2(long double a, double b, float c)
+ {
+   return (double) a + b + (double) c;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   double rd;
+ 
+   float f;
+   double d;
+   long double ld;
+ 
+   args[0] = &ffi_type_float;
+   values[0] = &f;
+   args[1] = &ffi_type_double;
+   values[1] = &d;
+   args[2] = &ffi_type_longdouble;
+   values[2] = &ld;
+ 
+   /* Initialize the cif */
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
+ 		     &ffi_type_double, args) == FFI_OK);
+ 
+   f = 3.14159;
+   d = (double)1.0/(double)3.0;
+   ld = 2.71828182846L;
+ 
+   floating_1 (f, d, ld);
+ 
+   ffi_call(&cif, FFI_FN(floating_1), &rd, values);
+ 
+   CHECK(rd - floating_1(f, d, ld) < DBL_EPSILON);
+ 
+   args[0] = &ffi_type_longdouble;
+   values[0] = &ld;
+   args[1] = &ffi_type_double;
+   values[1] = &d;
+   args[2] = &ffi_type_float;
+   values[2] = &f;
+ 
+   /* Initialize the cif */
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
+ 		     &ffi_type_double, args) == FFI_OK);
+ 
+   floating_2 (ld, d, f);
+ 
+   ffi_call(&cif, FFI_FN(floating_2), &rd, values);
+ 
+   CHECK(rd - floating_2(ld, d, f) < DBL_EPSILON);
+ 
+   exit (0);
+ }
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/many_win32.c gcc-4.0.0/libffi/testsuite/libffi.call/many_win32.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/many_win32.c	Thu Dec  4 17:51:17 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/many_win32.c	Sat Sep  4 22:41:53 2004
*************** static float __attribute__((stdcall)) st
*** 26,32 ****
    return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
  }
  
! int main (void) 
  {
    ffi_cif cif;
    ffi_type *args[13];
--- 26,32 ----
    return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
  }
  
! int main (void)
  {
    ffi_cif cif;
    ffi_type *args[13];
*************** int main (void) 
*** 34,63 ****
    float fa[13];
    float f, ff;
    unsigned long ul;
!   
    for (ul = 0; ul < 13; ul++)
      {
        args[ul] = &ffi_type_float;
        values[ul] = &fa[ul];
  	fa[ul] = (float) ul;
      }
!   
    /* Initialize the cif */
    CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 13,
  		     &ffi_type_float, args) == FFI_OK);
!   
!   ff =  stdcall_many(fa[0], fa[1],	
! 		     fa[2], fa[3],	
! 		     fa[4], fa[5],	
  		     fa[6], fa[7],
! 		     fa[8], fa[9],			
  		     fa[10], fa[11], fa[12]);
  
    ffi_call(&cif, FFI_FN(stdcall_many), &f, values);
!   
    if (f - ff < FLT_EPSILON)
      printf("stdcall many arg tests ok!\n");
    else
!     CHECK(0);	
!   exit(0);	
  }
--- 34,63 ----
    float fa[13];
    float f, ff;
    unsigned long ul;
! 
    for (ul = 0; ul < 13; ul++)
      {
        args[ul] = &ffi_type_float;
        values[ul] = &fa[ul];
  	fa[ul] = (float) ul;
      }
! 
    /* Initialize the cif */
    CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 13,
  		     &ffi_type_float, args) == FFI_OK);
! 
!   ff =  stdcall_many(fa[0], fa[1],
! 		     fa[2], fa[3],
! 		     fa[4], fa[5],
  		     fa[6], fa[7],
! 		     fa[8], fa[9],
  		     fa[10], fa[11], fa[12]);
  
    ffi_call(&cif, FFI_FN(stdcall_many), &f, values);
! 
    if (f - ff < FLT_EPSILON)
      printf("stdcall many arg tests ok!\n");
    else
!     CHECK(0);
!   exit(0);
  }
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/negint.c gcc-4.0.0/libffi/testsuite/libffi.call/negint.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/negint.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/testsuite/libffi.call/negint.c	Sat Oct  2 07:02:41 2004
***************
*** 0 ****
--- 1,54 ----
+ /* Area:	ffi_call
+    Purpose:	Check that negative integers are passed correctly.
+    Limitations:	none.
+    PR:		none.
+    Originator:	From the original ffitest.c  */
+ 
+ /* { dg-do run } */
+ /* { dg-options -O2 } */
+ 
+ #include "ffitest.h"
+ 
+ static int checking(int a, short b, signed char c)
+ {
+   int i;
+ 
+   return (a < 0 && b < 0 && c < 0);
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   ffi_arg rint;
+ 
+   signed int si;
+   signed short ss;
+   signed char sc;
+ 
+   args[0] = &ffi_type_sint;
+   values[0] = &si;
+   args[1] = &ffi_type_sshort;
+   values[1] = &ss;
+   args[2] = &ffi_type_schar;
+   values[2] = &sc;
+ 
+   /* Initialize the cif */
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
+ 		     &ffi_type_sint, args) == FFI_OK);
+ 
+   si = -6;
+   ss = -12;
+   sc = -1;
+ 
+   checking (si, ss, sc);
+ 
+   ffi_call(&cif, FFI_FN(checking), &rint, values);
+ 
+   printf ("%d vs %d\n", (int)rint, checking (si, ss, sc));
+ 
+   CHECK(rint != 0);
+ 
+   exit (0);
+ }
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/nested_struct.c gcc-4.0.0/libffi/testsuite/libffi.call/nested_struct.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/nested_struct.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/nested_struct.c	Wed Aug 25 05:06:55 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_16byte1 {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_16byte1 {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/nested_struct1.c gcc-4.0.0/libffi/testsuite/libffi.call/nested_struct1.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/nested_struct1.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/nested_struct1.c	Wed Aug 25 05:06:55 2004
***************
*** 5,11 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_16byte1 {
--- 5,11 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct cls_struct_16byte1 {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/nested_struct2.c gcc-4.0.0/libffi/testsuite/libffi.call/nested_struct2.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/nested_struct2.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/nested_struct2.c	Wed Aug 25 05:06:55 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030911	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  #if LONG_MAX == 2147483647
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030911	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  #if LONG_MAX == 2147483647
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/nested_struct3.c gcc-4.0.0/libffi/testsuite/libffi.call/nested_struct3.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/nested_struct3.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/nested_struct3.c	Wed Aug 25 05:06:55 2004
***************
*** 6,12 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030911	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct A {
--- 6,12 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030911	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct A {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/problem1.c gcc-4.0.0/libffi/testsuite/libffi.call/problem1.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/problem1.c	Fri Nov 21 11:24:09 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/problem1.c	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct my_ffi_struct {
--- 4,10 ----
     PR:		none.
     Originator:	<andreast@gcc.gnu.org> 20030828	 */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitest.h"
  
  typedef struct my_ffi_struct {
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/promotion.c gcc-4.0.0/libffi/testsuite/libffi.call/promotion.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/promotion.c	Thu Sep  4 14:47:48 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/promotion.c	Sat Sep  4 22:41:53 2004
***************
*** 6,12 ****
  
  /* { dg-do run } */
  #include "ffitest.h"
! static int promotion(signed char sc, signed short ss, 
  		     unsigned char uc, unsigned short us)
  {
    int r = (int) sc + (int) ss + (int) uc + (int) us;
--- 6,12 ----
  
  /* { dg-do run } */
  #include "ffitest.h"
! static int promotion(signed char sc, signed short ss,
  		     unsigned char uc, unsigned short us)
  {
    int r = (int) sc + (int) ss + (int) uc + (int) us;
*************** int main (void)
*** 34,51 ****
    values[1] = &ss;
    values[2] = &uc;
    values[3] = &us;
!   
    /* Initialize the cif */
!   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, 
  		     &ffi_type_sint, args) == FFI_OK);
!   
    us = 0;
    ul = 0;
!   
!   for (sc = (signed char) -127; 
         sc <= (signed char) 120; /*@-type@*/ sc += 1 /*@=type@*/)
      for (ss = -30000; ss <= 30000; ss += 10000)
!       for (uc = (unsigned char) 0; 
  	   uc <= (unsigned char) 200; /*@-type@*/ uc += 20 /*@=type@*/)
  	for (us = 0; us <= 60000; us += 10000)
  	  {
--- 34,51 ----
    values[1] = &ss;
    values[2] = &uc;
    values[3] = &us;
! 
    /* Initialize the cif */
!   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
  		     &ffi_type_sint, args) == FFI_OK);
! 
    us = 0;
    ul = 0;
! 
!   for (sc = (signed char) -127;
         sc <= (signed char) 120; /*@-type@*/ sc += 1 /*@=type@*/)
      for (ss = -30000; ss <= 30000; ss += 10000)
!       for (uc = (unsigned char) 0;
  	   uc <= (unsigned char) 200; /*@-type@*/ uc += 20 /*@=type@*/)
  	for (us = 0; us <= 60000; us += 10000)
  	  {
*************** int main (void)
*** 55,59 ****
  		  (unsigned char) uc + (unsigned short) us);
  	  }
    printf("%lu promotion tests run\n", ul);
!   exit(0); 
  }
--- 55,59 ----
  		  (unsigned char) uc + (unsigned short) us);
  	  }
    printf("%lu promotion tests run\n", ul);
!   exit(0);
  }
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/return_ll.c gcc-4.0.0/libffi/testsuite/libffi.call/return_ll.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/return_ll.c	Thu Sep  4 14:47:48 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/return_ll.c	Sat Sep  4 22:41:53 2004
*************** int main (void)
*** 18,43 ****
    void *values[MAX_ARGS];
    long long rlonglong;
    long long ll;
!   unsigned long ul;
!   
!  
    args[0] = &ffi_type_sint64;
    values[0] = &ll;
!   
    /* Initialize the cif */
!   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
  		     &ffi_type_sint64, args) == FFI_OK);
!   
    for (ll = 0LL; ll < 100LL; ll++)
      {
-       ul++;
        ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
        CHECK(rlonglong == ll);
      }
!   
    for (ll = 55555555555000LL; ll < 55555555555100LL; ll++)
      {
-       ul++;
        ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
        CHECK(rlonglong == ll);
      }
--- 18,39 ----
    void *values[MAX_ARGS];
    long long rlonglong;
    long long ll;
! 
    args[0] = &ffi_type_sint64;
    values[0] = &ll;
! 
    /* Initialize the cif */
!   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
  		     &ffi_type_sint64, args) == FFI_OK);
! 
    for (ll = 0LL; ll < 100LL; ll++)
      {
        ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
        CHECK(rlonglong == ll);
      }
! 
    for (ll = 55555555555000LL; ll < 55555555555100LL; ll++)
      {
        ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
        CHECK(rlonglong == ll);
      }
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/return_ll1.c gcc-4.0.0/libffi/testsuite/libffi.call/return_ll1.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/return_ll1.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libffi/testsuite/libffi.call/return_ll1.c	Wed Feb 23 13:56:01 2005
***************
*** 0 ****
--- 1,42 ----
+ /* Area:	ffi_call
+    Purpose:	Check if long long are passed in the corresponding regs on ppc.
+    Limitations:	none.
+    PR:		20104.
+    Originator:	<andreast@gcc.gnu.org> 20050222  */
+ 
+ /* { dg-do run } */
+ #include "ffitest.h"
+ static long long return_ll(int ll0, long long ll1, int ll2)
+ {
+   return ll0 + ll1 + ll2;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   long long rlonglong;
+   long long ll1;
+   unsigned ll0, ll2;
+ 
+   args[0] = &ffi_type_uint32;
+   args[1] = &ffi_type_sint64;
+   args[2] = &ffi_type_uint32;
+   values[0] = &ll0;
+   values[1] = &ll1;
+   values[2] = &ll2;
+ 
+   /* Initialize the cif */
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
+ 		     &ffi_type_sint64, args) == FFI_OK);
+ 
+   ll0 = 11111111;
+   ll1 = 11111111111000LL;
+   ll2 = 11111111;
+ 
+   ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
+   printf("res: %lld, %lld\n", rlonglong, ll0 + ll1 + ll2);
+   /* { dg-output "res: 11111133333222, 11111133333222" } */
+   exit(0);
+ }
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/return_sc.c gcc-4.0.0/libffi/testsuite/libffi.call/return_sc.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/return_sc.c	Sat Nov  8 18:32:16 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/return_sc.c	Sat Sep  4 22:41:53 2004
*************** int main (void)
*** 18,24 ****
    void *values[MAX_ARGS];
    ffi_arg rint;
    signed char sc;
-   unsigned long ul;
  
    args[0] = &ffi_type_schar;
    values[0] = &sc;
--- 18,23 ----
*************** int main (void)
*** 30,36 ****
    for (sc = (signed char) -127;
         sc < (signed char) 127; sc++)
      {
-       ul++;
        ffi_call(&cif, FFI_FN(return_sc), &rint, values);
        CHECK(rint == (ffi_arg) sc);
      }
--- 29,34 ----
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.call/return_uc.c gcc-4.0.0/libffi/testsuite/libffi.call/return_uc.c
*** gcc-3.4.3/libffi/testsuite/libffi.call/return_uc.c	Thu Sep  4 14:47:48 2003
--- gcc-4.0.0/libffi/testsuite/libffi.call/return_uc.c	Sat Sep  4 22:41:53 2004
*************** int main (void)
*** 20,38 ****
    ffi_arg rint;
  
    unsigned char uc;
-   unsigned long ul;
  
    args[0] = &ffi_type_uchar;
    values[0] = &uc;
!   
    /* Initialize the cif */
!   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
  		     &ffi_type_uchar, args) == FFI_OK);
!   
!   for (uc = (unsigned char) '\x00'; 
         uc < (unsigned char) '\xff'; uc++)
      {
-       ul++;
        ffi_call(&cif, FFI_FN(return_uc), &rint, values);
        CHECK(rint == (signed int) uc);
      }
--- 20,36 ----
    ffi_arg rint;
  
    unsigned char uc;
  
    args[0] = &ffi_type_uchar;
    values[0] = &uc;
! 
    /* Initialize the cif */
!   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
  		     &ffi_type_uchar, args) == FFI_OK);
! 
!   for (uc = (unsigned char) '\x00';
         uc < (unsigned char) '\xff'; uc++)
      {
        ffi_call(&cif, FFI_FN(return_uc), &rint, values);
        CHECK(rint == (signed int) uc);
      }
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.special/special.exp gcc-4.0.0/libffi/testsuite/libffi.special/special.exp
*** gcc-3.4.3/libffi/testsuite/libffi.special/special.exp	Thu Sep  4 14:47:48 2003
--- gcc-4.0.0/libffi/testsuite/libffi.special/special.exp	Wed Jan 12 09:06:52 2005
*************** global srcdir subdir
*** 25,31 ****
  
  global cxx_options
  
! set cxx_options " -lstdc++"
  
  dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options ""
  
--- 25,31 ----
  
  global cxx_options
  
! set cxx_options " -shared-libgcc -lstdc++"
  
  dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options ""
  
diff -Nrcpad gcc-3.4.3/libffi/testsuite/libffi.special/unwindtest.cc gcc-4.0.0/libffi/testsuite/libffi.special/unwindtest.cc
*** gcc-3.4.3/libffi/testsuite/libffi.special/unwindtest.cc	Mon Dec  1 07:23:28 2003
--- gcc-4.0.0/libffi/testsuite/libffi.special/unwindtest.cc	Wed Aug 25 05:06:55 2004
***************
*** 4,10 ****
     PR:		none.
     Originator:	Jeff Sturm <jsturm@one-point.com>  */
  
! /* { dg-do run { xfail mips*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitestcxx.h"
  
  void
--- 4,10 ----
     PR:		none.
     Originator:	Jeff Sturm <jsturm@one-point.com>  */
  
! /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
  #include "ffitestcxx.h"
  
  void
diff -Nrcpad gcc-3.4.3/libjava/.cvsignore gcc-4.0.0/libjava/.cvsignore
*** gcc-3.4.3/libjava/.cvsignore	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/.cvsignore	Mon Aug 23 23:51:56 2004
***************
*** 0 ****
--- 1 ----
+ autom4te.cache
diff -Nrcpad gcc-3.4.3/libjava/ChangeLog gcc-4.0.0/libjava/ChangeLog
*** gcc-3.4.3/libjava/ChangeLog	Fri Nov  5 03:34:39 2004
--- gcc-4.0.0/libjava/ChangeLog	Thu Apr 21 05:20:10 2005
***************
*** 1,18666 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-10-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	PR other/18138
! 	* testsuite/lib/libjava.exp: Accept more than one multilib libgcc.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 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-11  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc (several):
! 	Removed IPv4-related conditional compilation.
! 	(mcastGrp): Added missing declarations.
  
! 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  Michael Koch  <konqueror@gmx.de>
  
! 	PR libgcj/16473
! 	* java/net/ServerSocket.java (accept): Don't create two client 
! 	sockets when accepting connections.
! 	* java/net/Socket.java (impl): Made package-private.
! 	(implCreated): Likewise.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 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-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
! 2004-03-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* verify.cc: Undef PC.
  
! 2004-03-11  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-25  Andrew Haley  <aph@redhat.com>
  
! 	PR java/14296:
! 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Make sure
! 	we have a valid method index.
  
! 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-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-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-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  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-03  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-24  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-24  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am: Added library version to gtk peer lib.
! 	* Makefile.in: Regenerated.
  
! 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-21  Tom Tromey  <tromey@redhat.com>
  
! 	PR java/13468:
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (interpret.lo): New target.
  
! 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-19  Matthias Klose  <doko@debian.org>
  
! 	* libtool-version: Increased `current' to 5.
  
! 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.
  
! 2003-12-31  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/http/Connection.java
! 	(sendRequest): Dont encode output in default character encoding,
! 	add correct version number to HTTP user agent string.
  
! 2003-12-31  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. 
  
! 2003-12-31  Guilhem Lavaux  <guilhem@kaffe.org>
  
  	* java/io/ObjectOutputStream.java
! 	(putFields): Reindented. Fixed behaviour: currentPutField should be
! 	null
! 	before calling this method.
! 	(writeFields): Likewise.
! 	(markFieldsWritten): Fixed the exception message.
! 	(callWriteMethod): Ensure currentPutField is null.
! 	(getBooleanField): Translate IllegalArgumentException into
! 	InvalidClassException.
! 	(getByteField): Likewise.
! 	(getCharField): Likewise.
! 	(getDoubleField): Likewise.
! 	(getFloatField): Likewise.
! 	(getIntField): Likewise.
! 	(getLongField): Likewise.
! 	(getShortField): Likewise.
! 	(getObjectField): Check the type code before returning the object.
! 	(getField): Translate NoSuchFieldException into InvalidClassException
  	directly.
  
! 2003-12-31 Guilhem Lavaux <guilhem@kaffe.org>
  
! 	* java/net/URL.java
! 	(URL): Change context path to "/" if it is empty.
  
! 2003-12-31  Michael Koch  <konqueror@gmx.de>
  
! 	* testsuite/libjava.mauve/xfails: Removed tests that pass now:
! 	XPASS: gnu.testlet.java.net.URL.URLTest: new URL(string) (number 16)
! 	XPASS: gnu.testlet.java.net.URL.URLTest: new URL(string) (number 18)
! 	XPASS: gnu.testlet.java.net.URL.URLTest: new URL(protocol, host, file)
! 	(number 26)
! 	XPASS: gnu.testlet.java.net.URL.URLTest: new URL(protocol, host, file)
! 	(number 54)
! 	
  
! 2003-12-30 Guilhem Lavaux <guilhem@kaffe.org>
  
! 	* java/util/GregorianCalendar.java
! 	(computeFields): Reported by Ito Kazumitsu <kaz@maczuka.gcd.org>.
! 	Fixed the computation of DAY_OF_WEEK_IN_MONTH.
! 	(computeTime): 12:00 midnight is AM and 12:00 noon is PM.
  
! 2003-12-30  Michael Koch  <konqueror@gmx.de>
  
! 	* testsuite/libjava.mauve/xfails: Removed the following testcase
! 	because it passes now:
! 	FAIL: gnu.testlet.java.text.SimpleDateFormat.Test: parse() strict
! 	(number 1)
  
! 2003-12-30  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/ObjectInputStream.java,
! 	java/io/ObjectOutputStream.java,
! 	java/io/ObjectStreamClass.java:
! 	Reformated, no functional code changes.
  
! 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  Guilhem Lavaux <guilhem@kaffe.org>
  
! 	* java/io/LineNumberReader.java
! 	(countLines): Removed.
! 	(fill): New private method.
! 	(mark): Changed logic to use and matchedNewLine.
! 	(reset): Likewise.
! 	(read): Likewise.
! 	(skipRedundantLF): Likewise.
  
! 2003-12-30  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/http/Connection.java
! 	(requestProperties): New field.
! 	(addRequestProperty): New method.
! 	(getRequestProperty): New method.
! 	(setRequestProperty): New method.
! 	(getRequestProperties): New method.
  
! 2003-12-28  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/http/Connection.java
! 	(inputStream): Made it a DataInputStream.
! 	(requestProperties): Removed.
! 	(hdrHash): Removed.
! 	(hdrVec): Removed.
! 	(headers): New field to store headers.
! 	(connect): Initialize inputStream.
! 	(receiveReply): Merged from classpath. The new algorithm is line based
! 	instead of character based.
! 	(getHeaderField): Use headers.
! 	(getHeaderFields): Use headers.
! 	(getKey): Removed.
! 	(getField): Removed.
! 	* gnu/java/net/HeaderFieldHelper.java: New file.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added gnu/java/net/HeaderFieldHelper.java.
! 	* Makefile.in: Regenerated.
  
! 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.
! 	* java/io/CharArrayReader.java (read): It should throw
! 	IndexOutOfBoundsException and not ArrayIndexOutOfBoundsException (see
! 	mauve).
! 	* 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
! 	(getRequestProperty): Removed.
! 	(setRequestProperty): Removed.
  
! 2003-12-27  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/http/Connection.java
! 	(connect): Call receiveReply().
! 	(receiveReply): Renamed from getHttpHeaders().
! 	(getOutputStream): Moved check on doOutput before check for connection
! 	state.
  
! 2003-12-27  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/print/attribute/ResolutionSyntax.java,
! 	javax/print/attribute/SetOfIntegerSyntax.java,
! 	javax/print/attribute/Size2DSyntax.java,
! 	javax/print/attribute/standard/Copies.java,
! 	javax/print/attribute/standard/JobImpressions.java,
! 	javax/print/attribute/standard/JobMediaSheets.java,
! 	javax/print/attribute/standard/NumberOfDocuments.java,
! 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
! 	javax/print/attribute/standard/PagesPerMinute.java,
! 	javax/print/attribute/standard/PagesPerMinuteColor.java,
! 	javax/print/attribute/standard/QueuedJobCount.java:
! 	Fixed typo (s/then/than/).
  
! 2003-12-27  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  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-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  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am (rmi_java_source_files):
! 	Added gnu/java/rmi/server/RMIVoidValue.java.
! 	* Makefile.in: Regenerated.
  
! 2003-12-26  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.
  
! 2003-12-25  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* libltdl/ltdl.c (HAVE_DYLD): Remove ifdef conditional for 
! 	darwin. Fixed by fixinclude now.
  
! 2003-12-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/ServerSocket.java bind():
! 	If InetSocketAddress.getAddress() returns "null" use "0.0.0.0" as
! 	address to bind to.
  
! 2003-12-23  Guilhem Lavaux <guilhem@kaffe.org>
  
! 	* java/io/ObjectInputStream.java
! 	(getField): Handle transient and non persistent fields.
! 	(readClassDescriptor): Better error handling, use the right
! 	class loader.
! 	(readFields): Fields marked as not present in the stream
! 	or not to be set are not read and set.
! 	* java/io/ObjectInputStream.java
! 	(readFields): Changed implementation of GetField.
! 	(readClassDescriptor): Documented.
! 	* java/io/ObjectOutputStream.java
! 	(writeClassDescriptor): Added condition when to write class super
! 	class information.
  
! 2003-12-22  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.
  
! 2003-12-23  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: New files.
! 	* Makefile.am (ordinary_java_source_files): Added new files.
! 	* Makefile.in: Regenerated.
  
! 2003-12-23  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/print/attribute/AttributeSetUtilities.java
! 	(verifyCategoryForValue): Renamed from verifyCategoryForAttribute.
! 	* javax/print/attribute/HashAttributeSet.java
! 	(HashAttributeSet): Call internal add methods, added missing
! 	exceptions.
! 	(add): Call addInternal, added exceptions to documentation.
! 	(addInternal): New method.
! 	(addAll): Call addAllInternal, added exception to documentation.
! 	(addAllInternal): New method.
! 	(clear): Added exception to documentation.
! 	(remove): Likewise.
! 	* javax/print/attribute/URISyntax.java
! 	(serialVersionUID): Fixed value.
  
! 2003-12-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
! 	(pre_event_handler): Don't dereference NULL focus_obj_ptr.
  
! 2003-12-21  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/print/attribute/AttributeSetUtilities.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: New files.
! 	* Makefile.am (ordinary_java_source_files): Added new files.
! 	* Makefile.in: Regenerated.
  
! 2003-12-21  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/print/attribute/EnumSyntax.java,
! 	javax/print/attribute/SetOfIntegerSyntax.java: New files.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added javax/print/attribute/EnumSyntax.java
! 	and javax/print/attribute/SetOfIntegerSyntax.java.
! 	* Makefile.in: Regenerated.
  
! 2003-12-21  Michael Koch  <konqueror@gmx.de>
  
! 	* 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/SupportedValuesAttribute.java: New files.
! 	* Makefile.am (ordinary_java_source_files): Added new files.
! 	* Makefile.in: Regenerated.
  
! 2003-12-21  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/print/attribute/DateTimeSyntax.java,
! 	javax/print/attribute/DocAttribute.java,
! 	javax/print/attribute/DocAttributeSet.java,
! 	javax/print/attribute/IntegerSyntax.java,
! 	javax/print/attribute/ResolutionSyntax.java,
! 	javax/print/attribute/Size2DSyntax.java,
! 	javax/print/attribute/TextSyntax.java,
! 	javax/print/attribute/URISyntax.java,
! 	javax/print/attribute/UnmodifiableSetException.java: New files.
! 	* Makefile.am (ordinary_java_source_files): Added new files.
  	* Makefile.in: Regenerated.
  
! 2003-12-21  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/PlainDatagramSocketImpl.java
! 	(mcastGrp): Added documentation.
  
! 2003-12-20  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/jar/Connection.java
! 	(connectionCache): New field.
! 	(connect): New method.
! 	(getInputStream): New method.
! 	(hdrHash): New field.
! 	(hdrVec): New field.
! 	(gotHeaders): New field.
! 	(getHeaderField): New method.
! 	(getHeaderFields): New method.
! 	(getHeaderFieldKey): New method.
! 	(getKey): New method.
! 	(getField): New method.
! 	(getHeaders): New method.
! 	* java/net/JarURLConnection.java
! 	(connectionCache): Removed.
! 	(connect): Removed.
! 	(getInputStream): Removed.
! 	(hdrHash): Removed.
! 	(hdrVec): Removed.
! 	(gotHeaders): Removed.
! 	(getHeaderField): Removed.
! 	(getHeaderFields): Removed.
! 	(getHeaderFieldKey): Removed.
! 	(getKey): Removed.
! 	(getField): Removed.
! 	(getHeaders): Removed.
  
! 2003-12-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/ObjectStreamField.java (isUnshared): Added documentation.
  
! 2003-12-20  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.
! 	* java/nio/channels/spi/AbstractSelector.java
! 	Added import for java.nio.channels.ClosedSelectorException.
! 	(close): Added synchronized to method declaration.
! 	(cancelledKeys): Throw ClosedSelectorException if selector
! 	is closed.
! 	(cancelKey): Synchronize on cancelled key set before key.
  
! 2003-12-20  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am (ordinary_java_source_files):
! 	Added gnu.java.net.URLParseError.java.
! 	* Makefile.in: Regenerated.
  
! 2003-12-20  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.
  
! 2003-12-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ChannelOutputStream.java: New file.
! 	* java/nio/channels/Channels.java
! 	(newOutputStream): Implemented.
! 	* Makefile.am (ordinary_java_source_files)
! 	Added gnu/java/nio/ChannelOutputStream.java.
! 	* Makefile.in: Regenerated.
  
! 2003-12-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* java/awt/FlowLayout.java (layoutContainer): Let components
! 	assume their preferred height.  Centre components vertically.
  
! 2003-12-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ChannelInputStream.java: New file.
! 	* java/nio/channels/Channels.java (newInputStream): Implemented.
! 	* java/nio/channels/FileChannelImpl.java
! 	(readImpl): Only put data into buffer if something was read.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added gnu/java/nio/ChannelInputStream.java.
! 	* Makefile.in: Regenerated.
  
! 2003-12-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/OutputStreamChannel.java: New file.
! 	* java/nio/channels/Channels.java (newChannel): Implemented.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added gnu/java/nio/OutputStreamChannel.java.
! 	* Makefile.in: Regenerated.
  
! 2003-12-19  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am (ordinary_java_source_files):
! 	Added gnu.java.nio.InputStreamChannel. 
! 	* Makefile.in: Regenerated.
  
! 2003-12-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/InputStreamChannel.java: New file.
! 	* java/nio/channels/Channels.java (newChannel): Implemented.
  
! 2003-12-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/SimpleTimeZone.java
! 	(setStartRule): Reformated documentation.
! 	(setEndRule): Reworked documentation.
! 	(getDSTSavings): Fixed @since tag.
! 	(setDSTSavings): New method.
  
! 2003-12-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/NumberFormat.java: Sorted imports.
! 	(getCurrency): New method.
! 	(setCurrency): New method.
! 	
  
! 2003-12-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/MessageFormat.java
! 	(MessageFormat): New constructor.
  
! 2003-12-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/jar/Handler.java
! 	(parseURL): New method.
! 	(toExternalForm): New method.
  
! 2003-12-18  Fernando Nasser  <fnasser@redhat.com>
  
! 	* java/awt/List.java (replaceItem): Prevent selection to move with
! 	replace and minimize flickering.
!  
! 2003-12-18  Michael Koch  <konqueror@gmx.de>
  
! 	* libltdl/ltdl.c: Define __private_extern__ if needed.
  
! 2003-12-18  Michael Koch  <konqueror@gmx.de>
  
! 	* libltdl/.cvsignore: Ignore autom4te.cache
! 	* libltdl/Makefile.in: Regenerated.
! 	* libltdl/aclocal.m4: Regenerated.
! 	* libltdl/acconfig.h: Removed (obsolete).
! 	* libltdl/config-h.in: Regenerated.
! 	* libltdl/configure.ac: Added AM_MAINTAINER_MODE.
! 	* libltdl/configure: Regenerated.
  
! 2003-12-18  Michael Koch  <konqueror@gmx.de>
  
! 	* mauve-libgcj: Removed the disabling of java.text.ACIAttribute and
! 	java.text.CollationElementIterator tests as they compile again.
! 	* testsuite/libjava.mauve/xfails: Added failing
! 	java.text.CollationElementIterator tests.
  
! 2003-12-18  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/prefs/AbstractPreferences.java
! 	(cachedChildren): New method.
  
! 2003-12-18  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/TimeZone.java (getOffset): New method.
  
! 2003-12-17  Fernando Nasser  <fnasser@redhat.com>
!  
! 	* gnu/java/awt/peer/gtk/GtkListPeer.java (handleEvent): Fix generation
! 	of ActionEvents for mouse double-clicks.
  
! 2003-12-17  Fernando Nasser  <fnasser@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (handleEvent): Check for
! 	null Graphics pointer returned by FileDialogPeer.
  
! 2003-12-17  Michael Koch  <konqueror@gmx.de>
  
! 	* libltdl/stamp-h.in: Removed, not used anymore.
  
! 2003-12-16  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc:
! 	Removed unused InterruptedIOException.h include.
! 	* gnu/java/net/natPlainSocketImplWin32.cc
! 	(connect): Reset and ignore our thread's interrupted
! 	flag instead of testing and throwing an InterruptedIOException
! 	if set.
! 	(accept): Likewise + changed case of SocketTimeoutException
! 	text.
! 	(write): Likewise (for both overloads).
! 	(doRead): Likewise.
  
! 2003-12-16  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* win32.cc (WSAEventWrapper): Implemented default
! 	constructor and init() methods.
! 	(_Jv_select): Removed.
! 	* gnu/java/nio/natSelectorImplWin32.cc
! 	(helper_put_filedescriptors): Removed.
! 	(helper_get_filedescriptors): Removed.
! 	(implSelect): Implemented in terms of WSAEventWrapper
! 	and WSAWaitForMultipleEvents instead of _Jv_select().
! 	Added support for thread interruption.
! 	* include/win32.h (WSAEventWrapper): Minor formatting
! 	changes; added default constructor declaration, init(),
! 	getFD() and getEventHandle() methods.
! 	(_Jv_select): Removed.
  
! 2003-12-16  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc
! 	(peekData): Throw SocketTimeoutException instead of
! 	InterruptedIOException on timeout.
! 	(receive): Likewise.
! 	* gnu/java/net/natPlainSocketImplPosix.cc
! 	(read): Made a minor exception text case change.
  
! 2003-12-16  Michael Koch  <konqueror@gmx.de>
  
! 	Fix for PR libgcj/13056.
! 	* libltdl/configure.in,
! 	libltdl/config.h.in: Removed.
! 	* libltdl/configure.ac,
! 	libltdl/config-h.in,
! 	libltdl/install-sh,
! 	libltdl/config.guess,
! 	libltdl/config.sub,
! 	libltdl/missing,
! 	libltdl/mkinstalldirs,
! 	libltdl/ltmain.sh: New files.
! 	* libltdl/Makefile.am,
! 	libltdl/acinclude.m4,
! 	libltdl/aclocal.m4,
! 	libltdl/ltdl.c,
! 	libltdl/ltdl.h,
! 	libltdl/README: Update to versions from libtool 1.5.
! 	libltdl/configure,
! 	* libltdl/Makefile.in: Regenerated.
! 	* java/lang/natRuntime.cc (find_symbol):
! 	Use type 'lt_ptr' instead of 'lt_ptr_t'.
  
! 2003-12-16  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/MenuComponent.java
! 	(serialVersionUID): Fixed value.
  
! 2003-12-16  Fernando Nasser  <fnasser@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
! 	(pre_event_handler): Handle GtkButton widgets differently as events
! 	go to its event_window.
! 	(connect_awt_hook): Remove compiler warning.
  
! i2003-12-16  Guilhem Lavaux <guilhem@kaffe.org>
  
! 	* java/io/ObjectInputStream.java
! 	(lookupClass): New method.
! 	(currentLoader): New method.
! 	(inputGetObjectStreamClasses): New method.
! 	(assignNewHandle): Documented.
! 	(currentClassLoader): Documented.
! 	* java/io/ObjectStreamClass.java
! 	(setClass): Changed API. Better handling of the imported/exported
! 	fields.
! 	(getSerialPersistentFields): Make it throw previously caught exceptions
! 	so they can handled in setClass.
  
! 2003-12-16 Guilhem Lavaux <guilhem@kaffe.org>
!  
! 	* java/io/ObjectStreamField.java: A few methods were added in prevision
! 	of the upcoming upgrade of the serialization code. This also adds
! 	some missing documentation.
! 	(ObjectStreamField): We should throw a NullPointerException when 'name'
! 	is null.
  
!  2003-12-16 Guilhem Lavaux <guilhem@kaffe.org>
!   
! 	* java/io/ObjectInputStream.java (setBooleanField):
! 	Throw an InvalidClassException if the field hasn't the required type,
! 	documentation added.
! 	(setByteField) Likewise.
! 	(setCharField) Likewise.
! 	(setDoubleField) Likewise.
! 	(setFloatField) Likewise.
! 	(setIntField) Likewise.
! 	(setShortField) Likewise.
! 	(setLongField) Likewise.
! 	(setObjectField) Likewise.
  
! 2003-12-16 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-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* jni/gtk-peer/gdkfont.h: New file.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Remove
! 	include of cairo-xlib.h, add extra gdk_flush().
  
! 2003-12-12  Fernando Nasser  <fnasser@redhat.com>
  
! 	* jni/gtk-peer/gtkpeer.h: Extend NSA set of macros to handle a second
! 	native state table -- native_global_ref_table.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Define
! 	native_global_ref_table pointer.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose): Make sure JNI
! 	global reference is deleted and memory allocated for pointer freed.
! 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): Use saved
! 	JNI global reference instead of JNI local reference.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
! 	(pre_event_handler): Remove compilation warning.
! 	(connect_awt_hook): Use saved JNI global reference instead of creating
! 	a new one.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create): Save JNI global
! 	reference to the Java object.
! 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals): Remove
! 	unused variable declaration and add comment.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create): Save JNI global
! 	reference to the Java object.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create): Ditto.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate): Ditto.
! 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals): Use saved
! 	JNI global reference instead of JNI local reference.
! 	(item_toggled): Add debug statement.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create): Save JNI global
! 	reference to the Java object.
! 	(connect_choice_item_selectable_hook): Use saved JNI global references
! 	instead of JNI local reference.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create): Save JNI
! 	global reference to the Java object.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create): Save JNI global
! 	reference to the Java object.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkLabelPeer_create): Ditto.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create): Ditto.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create): Ditto.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create): Ditto.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Ditto.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create): Ditto.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_create): Ditto.
! 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals): Use saved
! 	JNI global reference instead of JNI local reference.
! 	(item_selected): Add debug statement.
! 	(item_unselected): Add debug statement.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create): Save JNI global
! 	reference to the Java object.
! 	Connect "activate" signal handler using global JNI reference.
! 	(connect_activate_hook): Removed in favor of inline code.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create): Save JNI global
! 	reference to the Java object.
! 	(Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals): Use saved
! 	JNI global reference instead of JNI local reference.  Add FIXME comment.
! 	(Java_gnu_java_awt_peer_gtk_GtkPanelPeer_gtkPanelNew): Save JNI global
! 	reference to the Java object.  Add FIXME comment.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create): Save JNI global
! 	reference to the Java object.
! 	(Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals): Use saved
! 	JNI global reference instead of JNI local reference.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals): Use
! 	saved JNI global reference instead of JNI local reference.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create): Save JNI global
! 	reference to the Java object.
! 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals): Use saved
! 	JNI global reference instead of JNI local reference.
  
! 2003-12-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/Format.java (serialVersionUID): Fixed value.
  
! 2003-12-11  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/naming/event/EventDirContext.java: Jalopied.
! 	(addNamingListener): Fixed typo in method name.
! 	
  
! 2003-12-11  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* gnu/java/nio/SocketChannelImpl.java
! 	(write): Removed diagnostic trace.
! 	* gnu/java/nio/natSelectorImplPosix.cc: Added
! 	includes for java.lang.Thread and java.io.InterruptedIOException.
! 	(helper_put_filedescriptors): Don't put invalid file descriptors
! 	in select set.
! 	(helper_get_filedescriptors): Clear invalid file descriptors
! 	from select set.
! 	(helper_reset): New method for clearing our file descriptor
! 	array.
! 	(implSelect): Correctly calculate timeout if specified and
! 	legal.
! 	Intercept and deal with any java.io.InterruptedIOException
! 	thrown by _Jv_select().
  
! 2003-12-08  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. 
  
! 2003-12-09  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am (nat_headers_install): New variable with header files to
! 	install automatically.
! 	(install-data-local): Install all headers listed in
! 	nat_headers_install. Install innert nat headers explicitely.
! 	* Makefile.in: Regenerated.
  
! 2003-12-09  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/Calendar.java,
! 	java/util/IdentityHashMap.java,
! 	java/util/prefs/Preferences.java:
! 	Import used classes explicitely.
  
! 2003-12-09  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(close): Directly return if socket is closed.
! 	* java/net/ServerSocket.java
! 	(close): Directly return if socket is closed.
! 	* java/net/Socket.java
! 	(close): Directly return if socket is closed.
  
! 2003-12-09  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/SelectorImpl.java
! 	(implSelect): Throws IOException.
! 	(select): Likewise.
  
! 2003-12-08  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.
  
! 2003-12-08  Fernando Nasser  <fnasser@redhat.com>
!  
! 	* java/awt/datatransfer/StringSelection.java (getTransferData): Return
! 	object of type expected by specified DataFlavor.
  
! 2003-12-08  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.
  
! 2003-12-08  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.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
! 	(getSelectionStart): Initialized start position to 0. 
! 	(getSelectionEnd): Initialized end position to 0.
! 	(getCaretPosition): Initialized caret position to 0.
! 	(getText): Initialized selected text to NULL 
  
! 2003-12-08  Michael Koch  <konqueror@gmx.de>
  
! 	Fix for PR libgcj/13176.
! 	* java/io/PrintStream.java: Partly revert my previous patches to get
! 	(line_separator): New field.
! 	(converter): New field.
! 	(work): New field.
! 	(work_bytes): New field.
! 	(pw): Removed.
! 	(closed): Removed.
! 	(PrintStrean): Initialize converter and not pw.
! 	(checkError): Flush always, pw doesn't exist anymore.
! 	(close): Close underlying out stream.
! 	(print): New method.
! 	(writeChars): New method.
! 	(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.
! 	(putAllInternal): Correct comment.
! 	* 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.
  
! 2003-12-06  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/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-05  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* gnu/gcj/xlib/GC.java (updateClip): Added rectangles argument.
! 	(clip): Removed field
! 	(clipRectangles): New field.
! 	(clone): Use new updateClip.
! 	(setClipRectangles): Use new updateClip.
! 	* gnu/gcj/xlib/natGC.cc (updateClip): Prepare passed rectangles.
  
! 2003-12-04  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/FilePermission.java:
! 	Import used classes explicitely.
  
! 2003-12-04  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-04  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-04  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/http/Connection.java
! 	(sendRequest): Merged writing http headers with classpath.
! 	(getInputStream): Merged documentation from classpath.
! 	(getHeaderField): Likewise.
! 	(getHeaderFieldKey): Likewise.
  
! 2003-12-04  Michael Koch  <konqueror@gmx.de>
  
! 	* boehm.cc (_Jv_MarkObj): Access hack_signers field.
  
! 2003-12-04  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramPacket.java
! 	(length): Made packge-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.
! 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc (peekData):
! 	Get maximal length from maxlen field, set length field directly.
! 	(receive): Likewise.
! 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc (peekData):
! 	Get maximal length from maxlen field, set length field directly.
! 	(receive): Likewise.
  
! 2003-12-03  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* gnu/java/nio/natSelectorImplPosix.cc
! 	(implSelect): A timeout of 0 means an infinite
! 	timeout.
  
! 2003-12-02  Fernando Nasser  <fnasser@redhat.com>
!  
! 	* gnu/java/awt/peer/gtk/GtkListPeer.java (handleEvent): Fix generation
! 	of ActionEvents.
  
! 2003-12-03  Michael Koch  <konqueror@gmx.de>
  
! 	* java/lang/Class.h (hack_signers): Renamed signers to hack_signers.
! 	* java/lang/natClass.cc (getSigners): Likewise.
! 	(setSigners): Likewise.
  
! 2003-12-02  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* configure.in: Added new MinGW-specific configure flag
! 	--with-win32-nlsapi.
! 	Added new AC_DEFINE MINGW_LIBGCJ_UNICODE.
! 	Add -lunicows to MinGW SYSTEMSPEC if --with-win32-nlsapi
! 	is set to unicows.
! 	* configure: Rebuilt.
! 	* include/config.h.in: Rebuilt.
! 	* win32.cc (_Jv_Win32NewString): Implemented.
! 	(nativeToUnicode): New helper function defined only for
! 	non-UNICODE builds.
! 	(unicodeToNative): Likewise.
! 	(_Jv_Win32TempString): Implemented.
! 	(lots): Refactored using tchar.h macros.
! 	(WSAEventWrapper): Use _Jv_Win32NewString.
! 	(_Jv_platform_initialize): Use GetModuleFileNameA instead
! 	of GetModuleFileName.
! 	(_Jv_platform_initProperties): Use _Jv_Win32NewString.
! 	Use temporary stack buffer instead of a heap buffer.
! 	* include/win32.h
! 	Added defines for UNICODE and _UNICODE if MINGW_LIBGCJ_UNICODE is
! 	defined; added tchar.h include.
! 	(_Jv_Win32TempString): Declared new helper class.
! 	(JV_TEMP_STRING_WIN32): New helper macro.
! 	(_Jv_Win32NewString): Declared new helper method.
! 	* java/io/natFileDescriptorWin32.cc (open): Use
! 	JV_TEMP_STRING_WIN32 instead of JV_TEMP_UTF_STRING.
! 	(write): Reformatted slightly.
! 	* java/io/natFileWin32.cc (lots): Use tchar.h macros;
! 	use JV_TEMP_STRING_WIN32 instead of JV_TEMP_UTF_STRING.
! 	(getCanonicalPath): Use _Jv_Win32NewString instead of
! 	JvNewStringUTF.
! 	(performList): Likewise.
! 	* java/lang/natWin32Process.cc (ChildProcessPipe):
! 	Use tchar.h macros.
! 	(startProcess): Use tchar.h macros, JV_TEMP_STRING_WIN32,
! 	and UNICODE environment flag for CreateProcess.
! 	* java/net/natNetworkInterfaceWin32.cc
! 	(winsock2GetRealNetworkInterfaces): Use tchar.h macros and
! 	_Jv_Win32NewString.
  
! 2003-12-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* 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.
  
! 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: Make
! 	BufferedImageBuilder class static.
  
! 2003-12-02  Mark Wielaard  <mark@klomp.org>
  
! 	* java/security/Security.java: Don't use &nbsp; in the api doc.
  
! 2003-12-02  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-12-02  Fernando Nasser  <fnasser@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GtkListPeer.java (handleEvent): New
! 	method. Handle mouse and key events that must generate
! 	ActionEvents.
! 	* java/awt/List.java (getSelectedIndex): Return -1
! 	if no list element is selected.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (awt_event_handler):
! 	Correct handling of mouse and key events so that List receives them.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
! 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_delItems): Fix removal of
! 	multiple list elements. 
  
! 2003-12-02  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-12-02  Dalibor Topic <robilad@kaffe.org>
  
! 	* java/text/FieldPosition.java (equals): Fixed comment.
  
! 2003-12-02  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-12-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(close): Close associated DatagramChannel object.
! 	* java/net/ServerSocket.java
! 	* 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>
  
! 	* gnu/java/nio/DatagramChannelImpl.java
! 	(blocking): Initialize with true by default.
! 	* gnu/java/nio/ServerSocketChannelImpl.java
! 	(serverSocket): Made private.
! 	(blocking): Likewise.
! 	(connected): Likewise.
! 	* gnu/java/nio/SocketChannelImpl.java
! 	(connectionPending): Made private.
! 	* gnu/java/nio/FileLockImpl.java
! 	(static): Load native library (needed for classpath).
! 	* gnu/java/nio/SelectorImpl.java
! 	(static): Load native library (needed for classpath).
  
! 2003-12-02  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/file/Connection.java
! 	(getLastModified): Implement for file connections.
! 	(getContentLength): Likewise.
  
! 2003-12-02  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/file/Connection.java:
! 	Some reformating.
! 	(file): Renamed from fileIn.
! 	(getPermission): Moved around.
  
! 2003-12-02  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/jar/Connection.java
! 	(Connection): Made class final, merged documentation with classpath.
! 	(file_cache): Made private.
! 	(jar_file): Renamed from jarfile.
  
! 2003-12-02  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/http/Connection.java
! 	(Connection): Initialize doOutput to false;
! 	(connect): Initialize inputStream, moved "send request" code to new
! 	method.
! 	(sendRequest): New method.
! 	(getHttpHeaders): Don't reinitialize inputStream.
  
! 2003-12-02  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol//http/Connection.java
! 	(defRequestProperties): Removed. This dont gets used since JDK 1.3.
! 	(requestProperties): Initialize, documentation added.
! 	(inputStream): Renamed from bufferedIn.
! 	(Connection): Dont initialize requestProperties.
! 	(setDefaultRequestProperty): Removed.
! 	(getDefaultRequestProperty): Removed.
! 	(usingProxy): Documentation added.
! 	(getHttpHeaders): Likewise.
  
! 2003-12-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/DateFormat.java:
! 	Explicitely import used classes.
  
! 2003-12-01  Jeff Sturm  <jsturm@one-point.com>
  
! 	* verify.cc (state::clean_subrs): Clear seen_subrs.
! 	(state::copy): Walk seen_subrs from copy, not `this'.
! 	Don't clear seen_subrs.
  
! 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  Olga Rodimina <rodimina@redhat.com>
  
! 	* java/awt/TextComponent.java:
! 	(getSelectionStart): Updated javadocs.
! 	(getSelectionEnd): Ditto.
! 	* 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/awt/gtk/GtkButtonPeer.java, gnu/awt/gtk/gtkcommon.cc,
! 	gnu/awt/gtk/gtkcommon.h, gnu/awt/gtk/GtkComponentPeer.java,
! 	gnu/awt/gtk/GtkContainerPeer.java,
! 	gnu/awt/gtk/GtkFramePeer.java, gnu/awt/gtk/GtkLabelPeer.java,
! 	gnu/awt/gtk/GtkMainThread.java, gnu/awt/gtk/GtkToolkit.java,
! 	gnu/awt/gtk/GtkWindowPeer.java, gnu/awt/gtk/natGtkButtonPeer.cc,
! 	gnu/awt/gtk/natGtkComponentPeer.cc,
! 	gnu/awt/gtk/natGtkContainerPeer.cc,
! 	gnu/awt/gtk/natGtkFramePeer.cc, gnu/awt/gtk/natGtkLabelPeer.cc,
! 	gnu/awt/gtk/natGtkMainThread.cc, gnu/awt/gtk/natGtkToolkit.cc,
! 	gnu/awt/gtk/natGtkWindowPeer.cc: Remove files.
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
! 	(closed): Mark loader parameter as unused.
  
! 2003-12-01  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/http/Connection.java
! 	(Connection): Merged class documentation.
! 	(socket): Renamed from sock.
! 	(Connection): Made protected, documentation added.
! 	(connect): Give URL'S host instead of InetAddress to Socket
! 	constructor.
! 	(disconnect): Documentation added.
! 	(getOutputStream): Rewrapped.
  
! 2003-12-01  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/file/Connection.java
! 	(fileIn): Documentation added.
! 	(inputStream): Likewise.
! 	(outputStream): Likewise.
! 	(Connection): Likewise.
! 	(connect): Simplified.
  
! 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-12-01  Michael Koch  <konqueror@gmx.de>
  
- 	* gnu/java/net/natPlainSocketImplPosix.cc
- 	bind(): Dont set SockedImpl.address field on succesful bind.
- 	* gnu/java/net/natPlainSocketImplWin32.cc
- 	bind(): Likewise.
  
! 2003-11-30  Jeff Sturm <jsturm@one-point.com>
  
! 	* java/net/InetAddress.java:
! 	(static): Don'f force DNS request for ANY_IF address.
  
! 2003-11-30  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java,
! 	java/net/natInetAddressNoNet.cc,
! 	java/net/natInetAddressPosix.cc,
! 	java/net/natInetAddressWin32.cc:
! 	Reverted my last patch.
  
! 2003-11-28  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java
! 	(lookup): New method that doesnt lookup "0.0.0.0".
! 	(ImplLookup): Renamed from lookup.
! 	* java/net/natInetAddressNoNet.cc
! 	(ImplLookup): Renamed from lookup.
! 	* java/net/natInetAddressPosix.cc
! 	(ImplLookup): Renamed from lookup.
! 	* java/net/natInetAddressWin32.cc
! 	(ImplLookup): Renamed from lookup.
  
! 2003-11-28  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* configure: Rebuilt.
! 	* configure.in: Require gtk and glib 2.2.0.
  
! 2003-11-27  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-27  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-27  Guilhem Lavaux <guilhem@kaffe.org>
  
! 	* 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.
  
! 2003-11-27  Guilhem Lavaux <guilhem@kaffe.org>
  
! 	* java/text/FormatCharacterIterator.java: Documented the class and
  
! 2003-11-27  Guilhem Lavaux <guilhem@kaffe.org>
  
! 	* java/text/FormatCharacterIterator.java: Fixed some typos.
  
! 2003-11-27  Guilhem Lavaux <guilhem@kaffe.org>
  
! 	* java/text/NumberFormat.java:
! 	(getIntegerInstance) Added the java version in the comments.
  
! 2003-11-27  Mark Wielaard  <mark@klomp.org>
  
! 	* java/text/NumberFormat.java: Import java.io.InvalidObjectException.
! 	(readResolve): Reformat.
  
! 2003-11-27  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
  
! 2003-11-27  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-27  Mark Wielaard  <mark@klomp.org>
  
! 	* javax/swing/plaf/basic/BasicDefaults.java (BasicDefaults): Put
! 	AbstractUndoableEdit.undoText and AbstractUndoableEdit.redoText.
  
! 2003-11-27  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/UIDefaults.java:
! 	Reformated to match classpath's version.
  
! 2003-11-27  Sascha Brawer  <brawer@dandelis.ch>
  
! 	* javax/swing/UIManager.java (getDefaults, getDimension,
! 	getIcon, getInsets, getInstalledLookAndFeels, getInt,
! 	getLookAndFeel, getString, getSystemLookAndFeelClassName):
! 	Declare as public.
  
! 2003-11-26  Sascha Brawer  <brawer@dandelis.ch>
  
! 	* javax/swing/undo/StateEdit.java (getPresentationName): Docfix.
! 	* javax/swing/undo/AbstractUndoableEdit.java (canUndo, canRedo,
! 	isSignificant): Likewise.
  
! 2003-11-26  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-26  Sascha Brawer  <brawer@dandelis.ch>
  
! 	* javax/swing/undo/StateEdit.java: Re-format, document.
! 	(undo, redo): Also call inherited implementation.
  
! 2003-11-26  Sascha Brawer  <brawer@dandelis.ch>
  
! 	* javax/swing/undo/StateEditable.java: Re-format, document.
  
! 2003-11-26  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-26  David Belanger  <dbelan2@cs.mcgill.ca>
  
! 	* java/util/zip/ZipFile (Zipfile(File)): Set file path as name.
! 	(ZipFile(File,int)): Likewise.
  
! 2003-11-26  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-26  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 Tromey  <tromey@redhat.com>
  
! 	* java/lang/natDouble.cc (parseDouble): Reverted patch of
! 	2003-11-13.
  
! 2003-11-26  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-26  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(DategramSocket, bind): Moved binding code from DatagramSocket
! 	constructor to bind method.
  
! 2003-11-26  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-11-26  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-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/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>
  
! 	* gnu/java/net/protocol/file/Handler.java
! 	(Handler): New explicit constructor.
! 	(openConnection): Added documentation.
! 	* gnu/java/net/protocol/jar/Handler.java
! 	(Handler): New explicit constructor.
! 	(openConnection): Added documentation.
  
! 2003-11-26  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramPacket.java
! 	(DatagramPacket): Fixed documentation to become legal HTML.
  
! 2003-11-25  Michael Koch  <konqueror@gmx.de>
  
! 	* gcj/javaprims.h: Added missing java.util.Currency.
  
! 2003-11-25  Michael Koch  <konqueror@gmx.de>
  
! 	* testsuite/libjava.mauve/xfails:
! 	Removed these two tests, they mystically pass now:
! 	-FAIL: gnu.testlet.java.net.ServerSocket.ServerSocketTest: Error :
! 	test_params failed - 5getInetAddress did not return proper values
! 	(number 1)
! 	-FAIL: gnu.testlet.java.net.Socket.SocketTest: Error :
! 	test_BasicServer failed - 11 exception was thrown :Illegal seek
! 	(number 1)
  
! 2003-11-25  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.
! 	(toString): Make output compliant to JDK 1.4.2.
! 	* 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-11-24  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (propdir): New macro.
! 	(install-data-local): Install logging.properties.
! 	(core_java_source_files): Added java.util.logging.*.
! 	* java/util/logging/logging.properties: New file.
  
! 2003-11-25  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.
  
! 2003-11-24  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-22  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc
! 	(peekData): Use offset and maximal free space in datagram packet.
! 	(receive): Likewise.
! 	(send): Use offset in datagram packet.
  
! 2003-11-22  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc
! 	(peekData): Use offset and maximal free space in datagram packet.
! 	(receive): Likewise.
! 	(send): Use offset in datagram packet.
  
! 2003-11-22  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-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  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/Float.java (static): Removed.
  
! 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.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: 
! 	Match changes to java side.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c: 
! 	Release resources.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: 
! 	Don't use pango for metrics.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c: 
! 	New file.
  
! 2003-11-19  Guilhem Lavaux <guilhem@kaffe.org>
! 	    Jim Pick  <jim@kaffe.org>
  
! 	* java/text/DecimalFormat.java (getCurrency, setCurrency): New
! 	methods.
  
! 2003-11-19  Guilhem Lavaux  <guilhem@kaffe.org>
  
! 	* java/text/DecimalFormatSymbols.java (getCurrency,
! 	setCurrency): New methods.
  
! 2003-11-19  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-19  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-11-19  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* lib/libjava.exp: Add DYLD_LIBRARY_PATH for darwin. Look for
! 	the right libgcc. Add -multiply_defined suppress and -bind_at_load
! 	flags.
  
! 2003-11-18  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/13026:
! 	* verify.cc (state::copy): Only set local_changed if we're in a
! 	subroutine.  Correctly copy local variables which were modified
! 	by the subroutine.
! 	(push_jump_merge): Added more debugging output.
  
! 	* jni.cc (_Jv_JNI_GetStringUTFChars): Fail gracefully if string
! 	is null.
  
! 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-16  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/13062:
! 	* java/io/StreamTokenizer.java (commentChar): Clear other
! 	attributes for character.
! 	(quoteChar): Likewise.
  
! 2003-11-14  Thomas 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-13  Tom Tromey  <tromey@redhat.com>
  
! 	* jni.cc (_Jv_JNI_GetStringUTFChars): Pass length of string to
! 	JvGetStringUTFRegion.
! 	* java/lang/natPosixProcess.cc (new_string): Pass length of string
! 	to JvGetStringUTFRegion.
! 	* java/lang/natDouble.cc (parseDouble): Pass length of string to
! 	JvGetStringUTFRegion.
! 	* java/lang/natWin32Process.cc (startProcess): Pass length of
! 	string to JvGetStringUTFRegion.
! 	* java/lang/natClass.cc (forName): Pass length of string to
! 	JvGetStringUTFRegion.
! 	* gnu/gcj/runtime/natNameFinder.cc (getExternalLabel): Pass length
! 	of string to JvGetStringUTFRegion.
! 	* gnu/gcj/convert/natIconv.cc (init): Pass length of string to
! 	JvGetStringUTFRegion.
! 	* gnu/awt/gtk/natGtkLabelPeer.cc (setText): Pass length of string
! 	to JvGetStringUTFRegion.
! 	* gnu/awt/gtk/natGtkButtonPeer.cc (setLabel): Pass length of
! 	string to JvGetStringUTFRegion.
  
! 2003-11-13  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* gnu/java/nio/natSelectorImplPosix.cc
! 	(helper_put_filedescriptors): Change to static linkage.
! 	(helper_get_filedescriptors): Likewise.
  
! 2003-11-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (prepareImage): Remove
! 	null check.
! 	* gnu/java/awt/peer/gtk/GtkToolkit.java (prepareImage): Likewise.
! 	* java/awt/Component.java (prepareImage): Likewise.
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (setAlignment):
! 	Rename to nativeSetAlignment.
  
! 2003-11-11  Danny Smith  <dannysmith@users.sourceforge.net>
  
! 	* jni.cc (JNI_CreateJavaVM): Remove JNIEXPORT.
! 	(JNI_GetCreatedJavaVMs): Likewise.
! 	(JNI_GetDefaultJavaVMInitArgs): Likewise.
! 	* include/jni.h (JNIIMPEXP): Remove definition
! 	and replace with...
! 	(__GCJ_JNIIMPEXP__): New macro, applicable only to libgcj
! 	symbols,
! 	(__GCJ_DLL__): New macro, controlling __GCJ_JNIIMPEXP__.
  
! 2003-11-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* Makefile.am: Add GdkPixbufDecoder.java and
! 	gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
! 	* Makefile.in: Regenerate.
! 	* 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-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  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:
! 	Removed some redundant obj == null checks.
  
! 2003-11-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteBuffer.java
! 	(equals): Remove redundant obj == null check.
  
! 2003-11-11  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/natPipeImpl.cc,
! 	gnu/java/nio/natSelectorImpl.cc: Removed
! 	* gnu/java/nio/natPipeImplEcos.cc,
! 	gnu/java/nio/natPipeImplPosix.cc,
! 	gnu/java/nio/natPipeImplWin32.cc,
! 	gnu/java/nio/natSelectorImplEcos.cc,
! 	gnu/java/nio/natSelectorImplPosix.cc,
! 	gnu/java/nio/natSelectorImplWin32.cc: New files
! 	* configure.in: Create links for gnu/java/nio/natPipeImpl.cc and
! 	gnu/java/nio/natSelectorImpl.cc
! 	* configure: Regenerated.
  
! 2003-11-11  Micheal Koch  <konqueror@gmx.de>
  
! 	* java/net/URLStreamHandler.java (toExternalForm): Print port only
! 	if host is printed too and port was really given to URL.
  
! 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-08  Jeff Sturm  <jsturm@one-point.com>
  
! 	* gnu/gcj/runtime/FirstThread.java (Klocale, Kcalendar):
! 	New fields.
  
! 2003-11-08  Jeff Sturm  <jsturm@one-point.com>
  
! 	* java/io/ByteArrayOutputStream.java (resize):
! 	Fix off-by-one error.
  
! 2003-11-08  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* gnu/gcj/xlib/XAnyEvent.java (XAnyEvent): Make constructor
! 	public.
  
! 2003-11-06  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	PR libgcj/12231
! 	* java/lang/Win32Process.java (hasExited) Changed from
! 	public to private.
! 	(startProcess): Likewise.
! 	(cleanup): Likewise.
! 	* java/lang/natWin32Process.cc (cleanup) Don't close
! 	input, output and error streams.
! 	(ChildProcessPipe): New helper class.
! 	(startProcess): Refactored to use ChildProcessPipe.
! 	Use CREATE_NO_WINDOW when launching child process.
  
! 2003-11-06  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* include/win32.h (_Jv_platform_close_on_exec): Changed
! 	signature and declared extern.
! 	* win32.cc (_Jv_platform_close_on_exec): Implemented.
! 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc
! 	(create): Use new signature of _Jv_platform_close_on_exec.
! 	* gnu/java/net/natPlainSocketImplWin32.cc 
! 	(create): Eliminated a few typecasts
! 	Use new signature of _Jv_platform_close_on_exec.
! 	(accept): Eliminated a few typecasts
! 	Use new signature of _Jv_platform_close_on_exec.
! 	* java/io/natFileDescriptorWin32.cc (open): Use
! 	_Jv_platform_close_on_exec.
  
! 2003-11-04  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* java/lang/natClass.cc (newInstance): Throw InstantiationException
! 	if class has no null-argument constructor.
  
! 2003-10-30  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	PR libgcj/12647:
! 	* win32-threads.cc (_Jv_CondWait): Respect mutex's
! 	refcount when releasing and reacquiring it.
  
! 2003-10-30  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* win32.cc: (dirExists) Internal helper function to
! 	test for directory existence.
! 	(getUserHome) New helper function refactored out
! 	of _Jv_platform_initProperties. Uses USERPROFILE
! 	instead of HOMEDIR and attempts to support Win9X and NT.
! 	(_Jv_platform_initProperties) Use getUserHome.
  
! 2003-10-30  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	PR libgcj/11521:
! 	* gnu/java/net/natPlainSocketImplWin32.cc
! 	(bind): Don't use SO_REUSEADDR
  
! 2003-10-30  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	PR libgcj/6652:
! 	* java/io/natFileWin32.cc (getCanonicalPath): Treat "" like ".".
  
! 2003-10-30  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Don't use vtable
! 	dispatch for final methods.
  
! 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-29  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-29  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-29  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-29  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-29  Ito Kazumitsu <kaz@maczuka.gcd.org>
  
! 	* java/text/DecimalFormat.java
! 	(scanFormat) corrected so that '%' may appear in a pattern.
  
! 2003-10-29  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.
  
! 2003-10-29  Mark Wielaard  <mark@klomp.org>
  
! 	From Guilhem Lavaux  <guilhem.lavaux@free.fr>
! 	* java/util/Currency.java: New file.
  
! 2003-10-29  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am (ordinary_java_source_files): Added
! 	java/text/FormatCharacterIterator.java and java/util/Currency.java.
  	* Makefile.in: Regenerated.
  
! 2003-10-29  Dalibor Topic  <robilad@kaffe.org>
  
! 	* gnu/java/beans/IntrospectionIncubator.java (addMethod): Add public
! 	static methods.
  
! 2003-10-29  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.
! 	* javax/naming/InitialContext.java (lookup(Name)): When a
! 	CannotProceedException is thrown use the ContinuationContext.
! 	(lookup(String)): Likewise.
! 	(close): Clear myProps and defaultInitCtx.
  
! 2003-10-29  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java
! 	(equals): Remove redundant obj == null check.
! 	* java/net/SocketPermission.java
! 	(equals): Likewise.
! 	* java/net/URL.java
! 	(equals): Likewise.
! 	(getURLStreamHandler): Likewise.
  
! 2003-10-29  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc
! 	(setOption): Directly return if no error occured.
! 	* gnu/java/net/natPlainSocketImplPosix.cc
! 	(setOption): Likewise.
  
! 2003-10-28  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Always assign a
! 	vtable slot for final methods. Add FIXME comment.
  
! 2003-10-28  David S. Miller  <davem@redhat.com>
  
! 	* sysdep/sparc/locks.h (__cas_start_atomic): %g0 --> %%g0.
  
! 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().
  
! 	* java/util/zip/DeflaterOutputStream.java (inbufWrite): New method.
! 	(finish): Use inbufWrite().
! 	(write(int)): Likewise.
! 	(write(byte[],int,int)): Likewise.
  
! 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-26  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* java/lang/reflect/Constructor.java (toString): Avoid extra 
! 	whitespace on constructor with no modifiers.
! 	* java/lang/reflect/natConstructor.java (newInstance): Look up
! 	caller and perform accessibility check only if constructor is
! 	non-public and accessible flag is not set.
  
! 2003-10-26  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* jni.cc (_Jv_JNI_CallAnyMethodV, _Jv_JNI_CallAnyMethodA,
! 	_Jv_JNI_CallAnyVoidMethodV, _Jv_JNI_CallAnyVoidMethodA): Don't
! 	use _Jv_LookupDeclaredMethod(). Call _Jv_CallAnyMethodA with 
! 	is_virtual_call argument.
! 	* include/jvm.h (_Jv_isVirtualMethod): Moved and renamed from 
! 	natClass.cc.
! 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Use 
! 	_Jv_isVirtualMethod.
! 	* java/lang/reflect/natMethod.cc (invoke): Don't use 
! 	_Jv_LookupDeclaredMethod.
! 	(_Jv_CallAnyMethodA): New is_virtual_call argument. If specified,
! 	look up method in target object's vtable.
  
! 2003-10-25  Graydon Hoare  <graydon@redhat.com>
  
! 	* gnu/java/awt/ClasspathToolkit.java: New abstract class.
! 	* gnu/java/awt/peer/ClasspathFontPeer.java: New abstract class.
! 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c:
! 	New concrete implementation of ClasspathFontPeer, with native part.
! 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
! 	New class, with native part.
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
! 	implement setFont, cairoSetFont, drawGlyphVector, cairoShowGlyphs.
  
! 2003-10-25  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* java/lang/reflect/Method.java (toString): Avoid extra whitespace
! 	on method with no modifiers.
  
! 2003-10-25  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	PR libgcj/11780:
! 	* java/lang/reflect/natMethod.cc (invoke): Look up caller and perform
! 	accessibility check only if target is non-public and accessible flag
! 	is not set.
! 	* java/lang/reflect/natField.cc (getAddr): Likewise.
  
! 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  Anthony Green  <green@redhat.com>
  
! 	* java/lang/natClass.cc (_Jv_LinkSymbolTable): Fix case where
! 	we have no interpreter.
  
! 2003-10-22  Andrew Haley  <aph@redhat.com>
  
! 	* java/lang/natClass.cc (initializeClass): Call
! 	_Jv_linkExceptionClassTable.
! 	(_Jv_LinkSymbolTable): Call )_Jv_ThrowNoSuchMethodError.  Call
! 	_Jv_Defer_Resolution on a method whose ncode is NULL.
! 	(_Jv_linkExceptionClassTable): New function.
! 	(_Jv_LayoutVTableMethods): If superclass looks like a constant pool
! 	entry, look it up.
! 	* java/lang/Class.h (struct _Jv_CatchClass): New.
! 	(_Jv_linkExceptionClassTable): New friend.
! 	(_Jv_Defer_Resolution): New friend.
! 	(class Class.catch_classes): New field.
! 	* include/java-interp.h (Jv_Defer_Resolution): New method.
! 	(_Jv_PrepareClass): Make a friend of _Jv_MethodBase.
! 	(_Jv_MethodBase.deferred): New field.
! 	(_Jv_Defer_Resolution): New function.
! 	* resolve.cc (_Jv_PrepareClass): Resolve deferred handlers.
! 	* exception.cc (get_ttype_entry): Change return type to void**.
! 	(PERSONALITY_FUNCTION): Remove all code related to using a
! 	Utf8Const* for a match type.  Change match type to be a pointer to
! 	a pointer, rather than a pointer to a Class.
! 	* defineclass.cc (handleCodeAttribute): Initialize
! 	method->deferred.
! 	(handleMethodsEnd): Likewise.
  
! 2003-10-23  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
- 	* java/lang/natObject.cc (_Jv_ObjectCheckMonitor): Use
- 	_Jv_MutexCheckMonitor instead of accessing mutex.owner directly.
  
! 2003-10-22  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/12416:
! 	* java/lang/Class.h: Updated.
! 	* java/lang/natClass.cc (_getFields): Removed.
! 	(getFields): Likewise.
! 	(getDeclaredFields): Added `public_only' parameter.
! 	* java/lang/Class.java (getFields): Now implemented in java; from
! 	Classpath.
! 	(getDeclaredFields): Likewise.
! 	(getDeclaredFields(boolean)): Declare.
! 	(_getFields): Removed.
! 	(internalGetFields): New method, from Classpath.
  
! 	PR libgcj/12656:
! 	* gnu/gcj/runtime/natFirstThread.cc (call_main): Use
! 	_Jv_LookupDeclaredMethod, not _Jv_GetMethodLocal.
  
! 2003-10-22  David Daney  <ddaney@avtrex.com)
  
! 	* include/mips-signal.h: New file.
! 	* sysdep/dwarf2-backtrace.cc: New file.
! 	* sysdep/mips: New directory.
! 	* sysdep/mips/locks.h: New file.
! 	* Makefile.am(extra_cc_files): New, to allow extra c++ files to be
! 	added to libgcj.
! 	(extra_cc_source_files): Ditto.
! 	* configure.host(disable_dladdr):  New shell variable passed to
! 	configure.
! 	(mips*-*-linux*): sysdeps_dir=mips,
! 	can_unwind_signal=yes, disable_dladdr=yes, use -mxgot.
! 	(mipsel*-linux* | mipsisa32el*-linux*): Enable hash synchronization.
! 	* configure.in:(mips*-*-linux*): Use sysdep/dwarf2-backtrace.cc to
! 	generate backtrace, and include/mips-signal.h as SIGNAL_HANDLER
! 	(HAVE_DLADDR): Make it depend on setting of disable_dladdr.
! 	(EXTRA_CC_FILES): New, to support conditional addition of
! 	sysdep/dwarf2-backtrace.cc.
! 	* configure: Regenerated.
  	* Makefile.in: Regenerated.
- 	* gcj/Makefile.in: Regenerated.
- 	* include/config.h.in: Regenerated.
- 	* include/Makefile.in: Regenerated.
- 	* testsuite/Makefile.in: Regenerated.
- 	
- 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-22  Sascha Brawer  <brawer@dandelis.ch>
  
! 	* java/awt/geom/QuadCurve2D.java (getFlatness, getFlatnessSq): Implement.
  
! 2003-10-22  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/File.java
! 	(equals): Removed redundant obj == null check.
! 	(createTempFile): Merged comments from classpath.
  
! 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-21  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-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>
  
! 	* java/awt/geom/GeneralPath.java (getCurrentPoint): Return last
! 	point, not start of subpath.  Fixes Classpath bug #6075.
  
! 2003-10-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteOrder.java,
! 	java/nio/DirectByteBufferImpl.java,
! 	java/nio/channels/FileChannelImpl.java:
! 	Add code to load library with code for native methods if needed.
  
! 2003-10-21  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/PlainDatagramSocketImpl.java,
! 	gnu/java/net/PlainSocketImpl.java,
! 	gnu/java/net/natPlainDatagramSocketImplPosix.cc,
! 	gnu/java/net/natPlainDatagramSocketImplWin32.cc,
! 	gnu/java/net/natPlainSocketImplPosix.cc,
! 	gnu/java/net/natPlainSocketImplWin32.cc:
! 	Renamed fnum to native_fd to match classpath more.
  
! 2003-10-21  Jerry Quinn  <jlquinn@optonline.net>
  
!         * posix-threads.cc (_Jv_CondNotify,_Jv_CondNotifyAll): Rename
!         _Jv_PthreadCheckMonitor to _Jv_MutexCheckMonitor.
! 	* include/no-threads.h (_Jv_MutexCheckMonitor): New.
! 	* include/posix-threads.h (_Jv_MutexCheckMonitor): Rename from
!         _Jv_PthreadCheckMonitor.  Simplify code.
! 	(_Jv_MutexUnlock): Use _Jv_MutexCheckMonitor.
! 	* include/win32-threads.h (_Jv_MutexCheckMonitor): New.
! 	* java/lang/Object.h (_Jv_ObjectCheckMonitor): Declare.
! 	* java/lang/Thread.java (holdsLock): New.
! 	* java/lang/natObject.cc (_Jv_ObjectCheckMonitor): New, with and
!         without JV_HASH_SYNCHRONIZATION.
! 	* java/lang/natThread.cc (java::lang::Thread::holdsLock): New.
  
! 2003-10-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/RuleBasedCollator.java
! 	(RuleBasedCollator): Check rules not empty, fixed search in already
! 	existing collation elements.
! 	(is_special): Removed common whitespace characters.
! 	(text_argument): Dont return on whitespaces, add characters between
! 	two ' to string buffer.
  
! 2003-10-18  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/protocol/file/Connection.java,
! 	gnu/java/net/protocol/file/Handler.java,
! 	gnu/java/net/protocol/http/Connection.java,
! 	gnu/java/net/protocol/http/Handler.java,
! 	gnu/java/net/protocol/jar/Connection.java,
! 	gnu/java/net/protocol/jar/Handler.java:
! 	Merged copyright text from classpath to make
! 	it possible to merge the classes.
  
! 2003-10-18  Mark Wielaard  <mark@klomp.org>
  
! 	Reported by M.Negovanovic
! 	* java/beans/IndexedPropertyDescriptor.java
! 	(IndexedPropertyDescriptor): this.setIndex = setIndex, not getIndex.
  
! 2003-10-17  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* win32.cc (_Jv_pipe): Implemented.
! 	* gnu/java/nio/natPipeImpl.cc (nativeInit): Use
! 	_Jv_pipe instead of ::pipe.
! 	* include/posix.h (_Jv_pipe): New inline.
! 	* include/win32.h (_Jv_pipe): New declaration.
! 	
! 2003-10-17  Ralph Loader  <rcl@ihug.co.nz>
  
! 	* java/lang/StringBuffer.java (getChars): Fix array index checks.
! 	(append, substring, insert): Likewise.
! 	* testsuite/libjava.lang/StringBuffer_overflow.java: New file.
! 	* testsuite/libjava.lang/StringBuffer_overflow.out: New file.
  	
! 2003-10-17  Ralph Loader  <rcl@ihug.co.nz>
  
! 	* java/lang/natString.cc (getChars):
! 	Fix validation of array indexes.
! 	(getBytes, regionMatches, startsWith, valueOf): Likewise.
! 	* testsuite/libjava.lang/String_overflow.java: New file.
! 	* testsuite/libjava.lang/String_overflow.out: New file.
  
! 2003-10-17  Ralph Loader  <rcl@ihug.co.nz>
  
! 	* prims.cc (_Jv_NewObjectArray): Make sure byte size doesn't
! 	overflow a jint.
! 	(_Jv_NewPrimArray): Check for overflowing a jint, replacing a
! 	check for overflowing size_t, since the lower level functions
! 	take a jint.
! 	* testsuite/libjava.lang/newarray_overflow.java:  New file.
! 	* testsuite/libjava.lang/newarray_overflow.out:  New file.
! 	
! 2003-10-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/RuleBasedCollator.java
! 	(RuleBasedCollator): Moved around, documentation added.
! 	(compare): Documentation added.
! 	(equals): Likewise.
! 	(getCollationElementIterator): Likewise.
! 	(getCollationKey): Likewise.
! 	(getRules): Likewise.
! 	(hashCode): Likewise.
  
! 2003-10-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/RuleBasedCollator.java
! 	(CollationElement): Renamed from RBCElement and moved into
! 	RuledBasedCollator as inner class.
  
! 2003-10-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/CollationElementIterator.java
! 	(CollationElementIterator): Moved, documenatation added, call setText.
! 	(next): Reformated.
! 	(reset): Reformated.
! 	(setText): New method.
! 	(getOffset): New method.
! 	* java/text/CollationKey.java
! 	(getSourceString): Reformated.
! 	(hashCode): Reformated.
! 	(toByteArray): Reformated.
  
! 2003-10-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/zip/InflaterInputStream.java
! 	(InflaterInputStream): Renamed infl to inf and bufsize to size,
! 	added description to exception, check for inf == null and size < 0.
  
! 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>
  
! 	* javax/swing/UIDefaults.java (putDefaults):
! 	Readded accidently removed "public" modifier.
  
! 2003-10-14  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* interpret.cc (_Jv_InterpMethod::run): Don't
! 	use libffi types, they were meant to be internal.
! 	* gcj/javaprims.h (_Jv_ulong): New typedef.
  
! 2003-10-13  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natClassLoader.cc (_Jv_InitNewClassFields): Removed.
! 	(defineClass): Updated.
! 	(_Jv_NewClass): Likewise.
! 	* prims.cc (_Jv_InitPrimClass): Don't call
! 	_Jv_InitNewClassFields.
  
! 2003-10-13  Taras Glek  <taras.judge@shaw.ca>
  
! 	PR libgcj/12592
! 	* gnu/java/net/protocol/http/Connection.java (connect): Use \r\n,
! 	not just \n.
  
! 2003-10-13  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/File.java: Reformated.
! 	(equals): Check for obj == null.
  
! 2003-10-13  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/JarURLConnection.java
! 	(jarFileURL): Added dcoumentation.
! 	(jarFileURLConnection): Reformated documentation.
! 	(entryName): Renamed from "element", documentation rewritten.
! 	(connectionCache): Renamed from "conn_cache", documentation
! 	reformated.
! 	(JarURLConnection): Check URL protocol.
! 	(getEntryName): Use entryName.
! 	(connect): Use connectionCache.
! 	(getInputStream): Use entryName, fixed comment.
! 	(getJarEntry): Use entryName.
! 	(getHeaders): Use entryName.
! 	* java/net/URLConnection.java
! 	(addRequestProperty): Fixed documentation.
! 	(setDefaultRequestProptery): Added comment that it does nothing since
! 	JDK 1.3.
! 	(getDefaultRequestProperty): Likewise.
  
! 2003-10-13  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/java/net/URLStreamHandlerFactory.java
! 	(createURLStreamHandler): Removed redundant "public" modifier.
! 	* java/sql/DatabaseMetaData.java:
! 	(DatabaseMetaData):  Readded accidently removed "public" modifier.
! 	* java/sql/ParameterMetaData.java:
! 	(ParameterMetaData): Readded accidently removed "public" modifier.
! 	* java/sql/PreparedStatement.java:
! 	(PreparedStatement): Readded accidently removed "public" modifier.
! 	* java/sql/Ref.java:
! 	(Ref): Readded accidently removed "public" modifier.
  
! 2003-10-13  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>
  
! 	* 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/SelectorProviderImpl.java
! 	(openPipe): Give provider as argument to PipeImpl constructor.
! 	* java/nio/channels/spi/SelectorProvider.java
! 	(pr): Removed.
! 	(systemDefaultProvider): New member variable.
! 	(provider): Made it synchronized, use property
! 	java.nio.channels.spi.SelectorProvider.
! 	* gnu/java/nio/natPipeImpl.cc: New file.
! 	* Makefile.am (nat_source_files): Added gnu/java/nio/natPipeImpl.cc.
! 	* Makefile.in: Regenerated.
  
! 2003-10-12  Michael Koch  <konqueror@gmx.de>
  
! 	* 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,
! 	javax/swing/undo/StateEditable.java,
! 	javax/swing/undo/UndoableEdit.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/plaf/UIResource.java,
! 	javax/swing/plaf/metal/MetalLookAndFeel.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:
! 	Removed redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* 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:
! 	Removing redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/print/attribute/Attribute.java,
! 	javax/print/attribute/AttributeSet.java,
! 	javax/print/attribute/PrintRequestAttributeSet.java:
! 	Removing redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* 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:
! 	Removing redundant modifiers.
  
! 2003-10-11  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:
! 	Removing redundant modifiers.
  
! 2003-10-11  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-11  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/rmi/server/ProtocolConstants.java,
! 	gnu/java/security/der/DER.java:
! 	Removing redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/Map.java,
! 	java/util/Observer.java,
! 	java/util/zip/Checksum.java,
! 	java/util/zip/ZipConstants.java:
! 	Removed redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/AttributedCharacterIterator.java,
! 	java/text/CharacterIterator.java:
! 	Removed redundant modifiers.
  
! 2003-10-11  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:
! 	Removed redundant modifiers.
  
! 2003-10-11  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-11  Michael Koch  <konqueror@gmx.de>
  
! 	* 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/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-11  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,
! 	java/net/URLStreamHandlerFactory.java:
! 	Removed redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/Externalizable.java,
! 	java/io/FileFilter.java,
! 	java/io/FilePermission.java,
! 	java/io/ObjectInput.java,
! 	java/io/ObjectInputValidation.java,
! 	java/io/ObjectOutput.java,
! 	java/io/ObjectStreamClass.java,
! 	java/io/ObjectStreamConstants.java,
! 	java/io/Serializable.java:
! 	Removed redundant modifiers.
  
! 2003-10-11  Ingo Proetel  <proetel@aicas.com>
  
! 	* java/rmi/server/RMIClassLoader.java: Identify cached classloaders by 
! 	codebase and context classloader.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* 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-11  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:
! 	Removed redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/print/Pageable.java,
! 	* java/awt/print/Printable.java,
! 	java/awt/print/PrinterGraphics.java:
! 	Removed redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* 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:
! 	Removed redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/NIOSocket.java (setChannel): Initialize impl.
! 	* gnu/java/nio/ServerSocketChannelImpl.java
! 	(serverSocket): Made it a NIOServerSocket.
! 	(impl): Removed.
! 	(ServerSocketChannelImpl): Initialize only serverSocket.
! 	(initServerSocket): Removed.
! 	(getNativeFD): Rewritten.
! 	(implConfigureBlocking): Set socket timeout and removed comment.
! 	(accept): Rewritten.
! 	* gnu/java/nio/SocketChannelImpl.java
! 	(impl): New variable.
! 	(connected): Removed.
! 	(SocketChannelImpl): Initialize impl too.
! 	(getImpl): New method.
! 	(isConnected): Rewritten.
! 	(read): Rewritten, set position in buffer correctly.
! 	(write): Set position in buffer correctly.
! 	* java/net/ServerSocket.java (getImpl): New method.
! 	* gnu/java/nio/NIOServerSocket.java,
! 	gnu/java/nio/natNIOServerSocket.cc: New files.
! 	* gnu/java/nio/natServerSocketChannelImpl.cc: Removed.
! 	* Makefile.am
! 	(ordinary_java_source_files):
! 	Added gnu/java/nio/NIOServerSocket.java.
! 	(nat_source_files):
! 	Removed gnu/java/nio/natServerSocketChannelImpl.cc
! 	and added gnu/java/nio/natNIOServerSocket.cc.
! 	* Makefile.in: Regenerated.
  
! 2003-10-11  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/ImageObserver.java,
! 	java/awt/image/ImageConsumer.java,
! 	java/awt/image/ImageProducer.java,
! 	java/awt/image/RGBImageFilter.java,
! 	java/awt/image/RasterOp.java,
! 	java/awt/image/renderable/RenderableImage.java:
! 	Removed redundant modifiers.
  
! 2003-10-11  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/awt/j2d/DirectRasterGraphics.java,
! 	gnu/java/awt/EmbeddedWindowSupport.java:
! 	Removed redundant modifiers.
  
! 2003-10-09  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/SelectorImpl.java (register):
! 	Use ServerSocketChannelSelectionKey for server socket channels,
! 	removed unneeded comments.
! 	* gnu/java/nio/ServerSocketChannelImpl.java
! 	(ServerSocketChannelImpl): Made class public final.
! 	(impl): New member variable.
! 	(ServerSocketChannelImpl): Initialize member variables correctly.
! 	(initServerSocket): New method.
! 	(getNativeFD): Likewise.
! 	* gnu/java/nio/ServerSocketChannelSelectionKey.java,
! 	gnu/java/nio/natServerSocketChannelImpl.cc: New files.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added gnu/java/nio/ServerSocketChannelSelectionKey.java.
! 	(nat_source_files): Added gnu/java/nio/natServerSocketChannelImpl.cc.
! 	* Makefile.in: Regenrated.
  
! 2003-10-09  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.
  
! 2003-10-09  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ClassLoader.java (setSigners): Implemented.
! 	* boehm.cc (_Jv_MarkObj): Mark `signers' field.
! 	* java/lang/natClassLoader.cc (_Jv_InitNewClassFields):
! 	Initialize new fields.
! 	* java/lang/Class.java (getSigners): Now native.
! 	(setSigners): Declare.
! 	* java/lang/natClass.cc (getSigners): New method.
! 	(getSigners): Likewise.
! 	* java/lang/Class.h (Class::signers): New field.
! 	(Class::setSigners): New method.
  
! 2003-10-09  Michael Koch  <konqueror@gmx.de>
  
! 	* java/rmi/server/RMIClassLoader.java:
! 	Removed unused imports, little reformatings.
! 	(getClassLoader): New method, implementation was part of old loadCLass
! 	method.
! 	(loadClass): Simplified by moving functionality to new method and
! 	reworking the code a bit.
! 	(getClassAnnotation): Merged documentation from classpath.
  
! 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  Michael Koch  <konqueror@gmx.de>
  
! 	* java/security/Security.java: Reformated.
  
! 2003-10-08  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/SimpleDateFormat.java
! 	(compileFormat): Replace Character.isLetter() test with
! 	Character.isLowerCase() || Character.isUpperCase().
  
! 2003-10-08  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/StrictMath.java (toDegrees): Multiply before
! 	dividing.
! 	(toRadians): Likewise.
  
! 2003-10-08  C. Brian Jones  <cbj@gnu.org>
  
! 	* java/lang/Math.java
! 	(toRadians): multiply before dividing to reduce decimal error
! 	(toDegrees): ditto
  
! 2003-10-08  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/gcj/protocol/core/Connection.java,
! 	gnu/gcj/protocol/core/CoreInputStream.java,
! 	gnu/gcj/protocol/core/Handler.java,
! 	gnu/gcj/protocol/core/natCoreInputStream.cc,
! 	gnu/gcj/protocol/file/Connection.java,
! 	gnu/gcj/protocol/file/Handler.java,
! 	gnu/gcj/protocol/gcjlib/Connection.java,
! 	gnu/gcj/protocol/gcjlib/Handler.java,
! 	gnu/gcj/protocol/http/Connection.java,
! 	gnu/gcj/protocol/http/Handler.java,
! 	gnu/gcj/protocol/jar/Connection.java,
! 	gnu/gcj/protocol/jar/Handler.java: Moved to gnu/java/net/protocol.
! 	* 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/core/natCoreInputStream.cc,
! 	gnu/java/net/protocol/file/Connection.java,
! 	gnu/java/net/protocol/file/Handler.java,
! 	gnu/java/net/protocol/gcjlib/Connection.java,
! 	gnu/java/net/protocol/gcjlib/Handler.java,
! 	gnu/java/net/protocol/http/Connection.java,
! 	gnu/java/net/protocol/http/Handler.java,
! 	gnu/java/net/protocol/jar/Connection.java,
! 	gnu/java/net/protocol/jar/Handler.java: Moved from gnu/gcj/protocol.
! 	* gnu/gcj/runtime/FirstThread.java,
! 	java/net/URL.java: Use moved protocol handlers.
! 	* Makefile.am
! 	(ordinary_java_source_files): Moved files.
! 	(nat_source_files): Likewise.
  	* Makefile.in: Regenerated.
  
! 2003-10-08  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/SocketChannelImpl.java
! 	(read): Write only read data to buffer.
  
! 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-08  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/LinkedList.java:
! 	Removed whitespace to match classpath's version again.
  
! 2003-10-08  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/prefs/Preferences.java
! 	(defaultFactoryClass): Fixed class name.
! 	(getFactory): Create instance of class returned by Class.forName(),
! 	reformated code.
  
! 2003-10-08  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-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-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  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/VMClassLoader.java (loadClass): Now native.
! 	* java/lang/natClassLoader.cc (loadClass): Implement.
! 	* prims.cc (_Jv_RunMain): Initialize ClassLoader.
  
! 2003-10-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java
! 	(zeros): Removed.
! 	(ANY_IF): Initalizie in static block.
! 	(static): Load library with native methods here and initialize ANY_IF.
! 	(isAnyLocalAddress): Check if equal to ANY_IF.
! 	(equals): Use addr directly instead of addr1. Simplify for loop.
! 	(toString): Rename "result" to "host" and add IP address allways.
! 	(getLocalHost): Merged documentation from classpath.
! 	* java/net/ServerSocket.java
! 	(ServerSocket): New package-private constructor used by java.nio.
! 	* java/net/URLConnection.java
! 	(getRequestProperties): Check if already connected.
  
! 2003-10-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteBufferHelper.java:
! 	Rewrote all methods by suggestions from Eric Blake.
  
! 2003-10-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URL.java
! 	(DEFAULT_SEARCH_PATH): New static variable.
! 	(ph_cache): Made it a HashMap.
! 	(getURLStreamHandler): Rename propVal to ph_search_path and use
! 	DEFAULT_SEARCH_PATH.
  
! 2003-10-02  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/table/AbstractTableModel.java
! 	(findColumnName): Prevent from NullPointerException if argument
! 	columnName is null.
  
! 2003-10-02  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-10-02  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/table/AbstractTableModel.java:
! 	Reformated.
  
! 2003-10-01  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	Fix PR libgcj/12475
! 	* gnu/gcj/runtime/StackTrace.java (finalize): Declare.
! 	* gnu/gcj/runtime/natStackTrace.cc (finalize): New. Free "addrs".
  
! 2003-10-01  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/gcj/runtime/FirstThread.java (getMain): Fixed indentation.
  
! 2003-10-01  Andrew Haley  <aph@redhat.com>
  
! 	* java/lang/natClass.cc (initializeClass): Check for otable and
! 	atable.
! 	(_Jv_LinkOffsetTable): Check for existence of atable.  Rewrite
! 	loops using for().  Search superinterfaces.  Check for fields as
! 	well as methods.  Initialize atable as well as otable: check for
! 	static methods as well as virtual methods.
! 	* java/lang/Class.h (struct _Jv_AddressTable): New.
! 	(atable): New.
! 	(atable_syms): New.
! 	* include/jvm.h (_Jv_equalUtf8Consts): constify.
! 	* prims.cc (_Jv_equalUtf8Consts): constify.
  
! 2003-09-29  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/10596:
! 	* include/jvm.h (_Jv_FinalizeString,
! 	_Jv_RegisterStringFinalizer): Declare.
! 	* java/lang/natString.cc (_Jv_FinalizeString): Renamed from
! 	unintern.
! 	(intern): Updated.
! 	(_Jv_NewStringUtf8Const): Likewise.
! 	* java/lang/ref/natReference.cc (finalize_referred_to_object):
! 	Add special case when finalizing a String.
! 	(in_hash): New function.
! 	(_Jv_RegisterStringFinalizer): Likewise.
! 	(maybe_add_finalize): Likewise.
  
! 2003-09-29  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java:
! 	(isMulticastAddress): Dont use local variable to store address length.
! 	Let the compiler optimize this.
! 	(getHostName): Merged dcoumentation from classpath.
! 	(getAddress): Likewise.
! 	(getHostAddress): Likewise.
! 	(hashCode): Likewise.
! 	(equals): Likewise.
! 	(toString): Likewise.
! 	(getByName): Likewise.
! 	(getAllByName): Likewise.
  
! 2003-09-29  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/image/IndexColorModel.java: Reformated.
  
! 2003-09-29  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java,
! 	java/net/URL.java: Reformated.
  
! 2003-09-29  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* boehm.cc (_Jv_BuildGCDescr): Put first word of object in most 
! 	significant bit of descriptor. Include the vtable and sync_info 
! 	fields.
  
! 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-25.
! 	Don't call setTimeZone on calendar.
  
! 2003-09-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URL.java (getURLStreamHandler): Compile fixes.
  
! 2003-09-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URL.java (getURLStreamHandler):
! 	Check if we have to use cache before trying to retrieve handler from
! 	cache. Rename facName to clsName to match classpath more. Reformated
! 	some little pieces.
  
! 2003-09-27  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/SelectionKeyImpl.java
! 	(ch): Make package-private again. Jikes found this bug.
! 	Jeff Sturm submitted PR12426 for this to bugzilla
! 	to fix this bug in gcj.
  
! 2003-09-26  Michael Koch  <konqueror@gmx.de>
  
! 	* java/rmi/server/RMIClassLoader.java:
! 	Reformatted file, no functional code changes.
  
! 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-26  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/ObjectOutputStream.java (writeFields): Fixed
! 	indentation.
! 	(putFields): Likewise.
  
! 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-25  Jeff Sturm  <jsturm@one-point.com>
  
! 	* gnu/java/nio/SelectorImpl.java (getFDsAsArray): Use getNativeFD().
! 	(select): Likewise.
! 	(register): Use DatagramChannelSelectionKey, SocketChannelSelectionKey.
  
! 2003-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/DatagramChannelImpl.java
! 	(getNativeFD): New method.
! 	* gnu/java/nio/SelectionKeyImpl.java
! 	(SelectionKeyImpl): Class made abstract.
! 	(fd): Removed.
! 	(SelectionKeyImpl): Remove fd argument.
! 	(getNativeFD): New method.
! 	* gnu/java/nio/SocketChannelImpl.java
! 	(getNativeFD): New method.
! 	gnu/java/nio/DatagramChannelSelectionKey.java,
! 	* gnu/java/nio/SocketChannelSelectionKey.java:
! 	New files.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added new files gnu/java/nio/DatagramChannelSelectionKey.java and
! 	gnu/java/nio/SocketChannelSelectionKey.java.
! 	* Makefile.in: Regenerated.
  
! 2003-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/lang/reflect/Proxy.java
! 	(getProxyClass): Remove workaround for gcj 3.0.x.
  
! 2003-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/PlainDatagramSocketImpl.java
! 	(finalize): Moved to directly after constructor.
! 	(getNativeFD): New method.
! 	* gnu/java/net/PlainSocketImpl.java
! 	(getNativeFD): New method.
  
! 2003-09-25  Ingo Proetel  <proetel@aicas.com>
  
! 	* java/io/ObjectOutputStream.java:
! 	Allow putFields be called more than once.
  
! 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.
! 	* java/awt/image/BufferedImage.java (toString): Implement.
  
! 2003-09-25  Jeff Sturm  <jsturm@one-point.com>
  
! 	* aclocal.m4: Rebuilt.
! 	* configure: Rebuilt.
  
! 2003-09-25  Guilhem Lavaux  <guilhem@kaffe.org>
  
! 	* java/text/SimpleDateFormat.java (parse): Don't use class calendar
! 	field.
  
! 2003-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/SelectorImpl.java
! 	(implSelect): Renamed from java_do_select.
! 	(select): Call native implSelect() and add support for Thread
! 	interruption.
! 	* gnu/java/nio/natSelectorImpl.cc
! 	(implSelect): Renamed from java_do_select.
  
! 2003-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/SelectorImpl.java
! 	(selectNow): Made final, throws IOException.
! 	(select): Likewise.
! 	(getFDsAsArray): Made final.
! 	(selectedKeys): Likewise.
! 	(wakeup): Likewise.
! 	(deregisterCancelledKeys): Likewise.
! 	(register): Likewise.
! 	(ass): Removed.
! 	(add_selected): Removed.
! 	* gnu/java/nio/natSelectorImpl.cc:
! 	No need to include bstring.h or gcj/cni.h.
! 	(helper_put_filedescriptors): Rewritten.
! 	(helper_get_filedescriptors): Rewritten.
  
! 2003-09-25  Sascha Brawer  <brawer@dandelis.ch>
  
! 	* java/awt/font/FontRenderContext.java (getTransform): Return
! 	copy of internal transform object. Add Javadoc.
! 	* java/awt/geom/Rectangle2D.java (getPathIterator): Use the same
! 	winding rule as Sun J2SE.
! 	* javax/swing/border/MatteBorder.java (MatteBorder(Icon)): Docfix.
  
! 2003-09-25  Ingo Proetel  <proetel@aicas.com>
  
! 	* java/rmi/Naming.java:
! 	Added comments, now accepts pseudo protocol "rmi".
  
! 2003-09-25  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-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.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added gnu/java/nio/NIOConstants.java.
! 	* Makefile.in: Regenerated.
  
! 2003-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java:
! 	Reorder imports, remove implementation comment.
! 	(isMulticastAddress): Merged documentation from classpath.
! 	* java/net/URLConnection.java
! 	(setRequestProperty): Check key for null, fix documentation.
! 	(adREquestProperty): Check key for null, remove wrong implementation
! 	and replace it with comment to overwrite this method in subclasses,
! 	fix documentation.
  
! 2003-09-25  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/reflect/Proxy.java (generate): Uncomment protection
! 	domain code.
! 	* java/lang/natClassLoader.cc (defineClass): Added `loader'
! 	argument.
! 	(linkClass0): Now in VMClassLoader.
! 	(markClassErrorState0): Likewise.
! 	(getSystemClassLoaderInternal): New method.
! 	* java/lang/natClass.cc (initializeClass): Use
! 	VMClassLoader::resolveClass.
! 	* java/lang/ClassLoader.java: New version, from Classpath.
! 	* java/lang/Class.java (getProtectionDomain):
! 	protectionDomainPermission and unknownProtectionDomain now in
! 	VMClassLoader.
! 	* java/lang/Class.h: VMClassLoader now a friend class.
! 	* gnu/gcj/runtime/VMClassLoader.java (instance): Now
! 	package-private.
! 	* gcj/javaprims.h: Regenerated class list.
! 	* resolve.cc (_Jv_PrepareClass): Use VMClassLoader::resolveClass.
! 	* java/lang/VMClassLoader.java: New version from Classpath;
! 	modified for libgcj use.
  
! 2003-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* 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.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added java/nio/ByteBufferHelper.java.
! 	* Makefile.in: Regenerated.
  
! 2003-09-25  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* gnu/java/net/natPlainSocketImplWin32.cc: Add missing #includes.
! 	PR libgcj/12388.
  
! 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-24  Michael Koch  <konqueror@gmx.de>
  
! 	* acinclude.m4 (AM_LC_LOCALES): Added check for locale.h.
  
! 2003-09-24  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
- 	* gnu/java/net/PlainSocketImpl.java (read): Remove declaration.
- 	(write): Likewise.
- 	(SocketInputStream): Declare `read' and `write' methods native.
- 	Remove implementations which called back into PlainSocketImpl.
- 	Remove unneccessary overridden methods.
- 	* gnu/java/net/natPlainSocketImplNoNet.cc (read): Move implementation 
- 	to inner class PlainSocketImpl.SocketInputStream.
- 	(write): Likewise.
- 	* gnu/java/net/natPlainSocketImplPosix.cc: As above.
- 	* gnu/java/net/natPlainSocketImplWin32.cc: As above.
- 	* gnu/java/net/SocketInputStream.java: Remove unused file.
- 	* gnu/java/net/SocketOutputStream.java: Likewise.
- 	* Makefile.am: Build CNI headers for PlainSocketImpl.SocketInputStream
- 	and SocketOutputStream.
  	* Makefile.in: Rebuilt.
  
! 2003-09-23  Nathanael Nerode  <neroden@gcc.gnu.org>
  
! 	* java/lang/System.java: Add GCJ LOCAL note about encoding aliases.
  
! 	* java/lang/Float.java, java/lang/Double.java: Add GCJ LOCAL
! 	markers.
  
! 2003-09-22  Anthony Green  <green@redhat.com>
  
! 	* configure.in (HAVE_USLEEP_DECL): Define for newlib build.
! 	* configure: Rebuilt.
  
! 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>
  
! 	* jni.cc (_Jv_LookupJNIMethod): Remove workaround that should hide a
! 	compiler warning but produces a different one now.
  
! 2003-09-22  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java:
! 	Moves around some code, reformats and adds documentation.
! 	No functional changes.
  
! 2003-09-22  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/JarURLConnection.java
! 	(JarURLConnection): Modifed code to match classpath more, fixed comment.
! 	(getCertificates): Made it more error prone.
! 	(getMainAttributes): Likewise.
! 	(getAttributes): Implemented.
! 	(getManifest): Reformatted code.
  
! 2003-09-20  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/Component.java: Indentation cleanup from Classpath.
  
! 2003-09-20  Dalibor Topic  <robilad@kaffe.org>
  
!        * java/awt/BasicStroke.java (BasicStroke): Fixed illegal argument
!        checking to follow 1.4.2 spec.
  
! 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
! 	(remerged from Classpath on 2003-09-20)
  
! 2003-09-19  David Daney <ddaney@avtrex.com>
  
! 	* java/lang/ref/Reference.java (clear): Set referent to null and
! 	synchronize.
  
! 2003-09-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/NIODatagramSocket.java,
! 	gnu/java/nio/NIOSocket.java: New files.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added gnu/java/nio/NIODatagramSocket.java and
! 	gnu/java/nio/NIOSocket.java.
! 	* Makefile.in: Regenerated.
  
! 2003-09-19  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.
! 	* 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.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Remove
! 	unused GtkArg code.
! 	(set(String,boolean)): Clamp gboolean parameter to g_object_set
! 	to TRUE or FALSE.
! 	* 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.
  
! 2003-09-19  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* win32-threads.cc: (ensure_interrupt_event_initialized) New
! 	function for lazy initialization of an auto-reset event.
! 	(_Jv_CondWait) Added thread interrupt support.
! 	(_Jv_ThreadInitData) Added initialization of interrupt support
! 	members.
! 	(_Jv_ThreadDestroyData) Added cleanup of interrupt support members.
! 	(_Jv_ThreadStart) Removed unused code.
! 	(_Jv_Win32GetInterruptEvent) New method for returning interrupt event
! 	to an external caller.
! 	(_Jv_ThreadInterrupt) Implemented.
! 	* include/win32-threads.h: (_Jv_Thread_t) Added a Win32 auto-reset
! 	event for interrupt support as well as a mutex which regulates
! 	access to this.
! 	(_Jv_Win32GetInterruptEvent) Declared new method for returning interrupt
! 	event to an external caller.
! 	* java/lang/natWin32Process.cc: (cleanup) Close handle to spawned
! 	process.
! 	(waitFor) Added interrupt support.
  
! 2003-09-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java (getLocalAddress):
! 	Renamed result variable to localAddr.
! 	* java/net/MulticastSocket.java:
! 	No need to import gnu.java.net.PlainDatagramSocketImpl.
  
! 2003-09-18  Sascha Brawer  <brawer@dandelis.ch>
  
! 	* java/awt/Toolkit.java (getSystemEventQueue, getSystemEventQueueImpl):
! 	Replace UTF-8 characters in Javadoc by XML/HTML escape sequence.
  
! 2003-09-18  Tom Tromey  <tromey@redhat.com>
  
! 	* javax/naming/InitialContext.java: Reindented.
  
! 2003-09-18  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  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/Timer.java (finalize): Added "throws Throwable".
  
! 2003-09-18  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-18  Mark Wielaard  <mark@klomp.org>
  
! 	Reported by Guilhem Lavaux and Julian Dolby
! 	* java/io/ObjectStreamClass.java (getSerialPersistentFields): Get the
! 	field "serialPersistentFields", not "getSerialPersistentFields".
  
! 2003-09-18  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-09-18  Jeroen Frijters  <jeroen@frijters.net>
  
! 	* java/sql/Timestamp.java
! 	(valueOf): Fixed confusion of java.sql.Date and java.util.Date
  
! 2003-09-18  David P Grove  <groved@us.ibm.com>
  
! 	* java/io/LineNumberReader (read): Don't reset pos & limit when
! 	markPos is 0.
  
! 2003-09-18  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-09-18  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am (rmi_java_source_files):
! 	Added gnu/java/rmi/rmic/Compile_kjc.java,
! 	gnu/java/rmi/rmic/Compile_jikes.java and
! 	gnu/java/rmi/rmic/RMICException.java
  	* Makefile.in: Regenerated.
  
! 2003-09-17  Graydon Hoare  <graydon@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
! 	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,
! 	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-17  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* configure.in: Standardized help text case of
! 	--enable-hash-synchronization
! 	New configure switch --enable-libgcj-multifile and corresponding
! 	automake conditional ONESTEP.
! 	* configure: Rebuilt.
! 	* Makefile.am: Use automake conditional ONESTEP to determine
! 	whether classfiles should be compiled individually or all
! 	at once.
! 	* Makefile.in: Rebuilt.
  
! 2003-09-16  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java (construct):
! 	Remove method declaration.
! 	(create()): Call native create.
! 	(create(int)): New method.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
! 	(create): Add window_id parameter.  Call gtk_plug_new with
! 	window_id parameter.
! 	(construct): Remove method implementation.
  
! 2003-09-16  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* Makefile.am: (MOSTLYCLEANFILES) Removed libtool objects.
! 	(mostlyclean-local): New target patterned after clean-local
! 	which recursively deletes all libtool objects using 'libtool rm'.
! 	(clean-local): Slightly modified comment to alleviate monotony.
! 	(distclean-local): New target patterned after clean-local
! 	which recursively deletes all .d files.
! 	* Makefile.in: Rebuilt.
  
! 2003-09-11  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/URLStreamHandler.java (parseURL): If original file
! 	ends with "/", so must canonical result.
! 	* java/io/natFilePosix.cc (getCanonicalPath): Clean up snafus
! 	with nul-termination and finding previous "/".
  
! 2003-09-11  Michael Koch  <konqueror@gmx.de>
  
! 	* acconfig.h: Removed most items.
! 	* configure.in: Added descriptions to AC_DEFINE macros that where in
! 	acconfig.h before.
! 	* include/config.h.in: Regenerated.
  
! 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-11  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/natFilePosix.cc (getCanonicalPath): Handle case where
! 	file does not exist.
  
! 2003-09-10  Anthony Green  <green@redhat.com>
  
! 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc (peekData):
! 	Specify full name when referencing ::java::net::InetAddress.
! 	* gnu/java/net/natPlainSocketImplWin32.cc (accept): Ditto.
! 	Fix argument type.
  
! 2003-09-10  Michael Koch  <konqueror@gmx.de>
  
! 	* acconfig.h (__NO_MATH_INLINES): Removed.
! 	* configure.in: Removed check for g++ math inlining bug from 2000.
! 	* configure.host: Removed -D__NO_MATH_INLINES in libgcj_cflags and
! 	libgcj_cxxflags.
! 	* configure: Regenerated.
  
! 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-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java,
! 	java/net/MulticastSocket.java,
! 	java/net/ServerSocket.java,
! 	java/net/Socket.java:
! 	Use gnu.java.net.Plain*SocketImpl instead of
! 	java.net.PlainSocketImpl.
! 	* java/net/PlainDatagramSocketImpl.java,
! 	java/net/PlainSocketImpl.java,
! 	java/net/SocketInputStream.java,
! 	java/net/SocketOutputStream.java,
! 	java/net/natPlainDatagramSocketImplNoNet.cc,
! 	java/net/natPlainDatagramSocketImplPosix.cc,
! 	java/net/natPlainDatagramSocketImplWin32.cc,
! 	java/net/natPlainSocketImplNoNet.cc,
! 	java/net/natPlainSocketImplPosix.cc,
! 	java/net/natPlainSocketImplWin32.cc:
! 	Removed.
! 	* gnu/java/net/PlainDatagramSocketImpl.java,
! 	gnu/java/net/PlainSocketImpl.java,
! 	gnu/java/net/SocketInputStream.java,
! 	gnu/java/net/SocketOutputStream.java,
! 	gnu/java/net/natPlainDatagramSocketImplNoNet.cc,
! 	gnu/java/net/natPlainDatagramSocketImplPosix.cc,
! 	gnu/java/net/natPlainDatagramSocketImplWin32.cc,
! 	gnu/java/net/natPlainSocketImplNoNet.cc,
! 	gnu/java/net/natPlainSocketImplPosix.cc,
! 	gnu/java/net/natPlainSocketImplWin32.cc:
! 	New files (moved from java/net).
! 	* configure.in: Create links for gnu/java/net/natPlain*SocketImpl.cc
! 	instead of java/net/natPlain*SocketImpl.cc.
! 	* configure: Regenerated.
! 	* Makefile.am: Moved files from java/net to gnu/java/net.
! 	* Makefile.in: Regenerated.
  
! 2003-09-09  Alan Modra  <amodra@bigpond.net.au>
  
! 	* configure: Regenerate.
  
! 2003-09-04  Tom Tromey  <tromey@redhat.com>
  
! 	* configure.host: Removed erroneous comment.
  
! 	* gnu/java/awt/natEmbeddedWindow.cc (setWindowPeer): Removed
! 	lvalue cast; use correct rvalue cast.
  
! 2003-09-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (create): Add width
! 	and height arguments to GtkWindowPeer.create method call.
! 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java
! 	(create(int,int,int)): New method.
! 	(create(int)): Add call to new create method.
! 	(create()): Add width and height arguments to create method
! 	call.
! 	(GtkWindowPeer): Remove call to setBounds.
! 	* java/awt/Frame.java (Frame(String)): Initialize visible field
! 	to false.
! 	(Frame(GraphicsConfiguration)): Likewise.
! 	(Frame(String,GraphicsConfiguration)): Likewise.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create):
! 	Add width and height parameters.  Call
! 	gtk_window_set_default_size.
! 	(connectHooks): Remove unused name variable.
! 	(static setBounds): Call gtk_window_resize not
! 	gtk_widget_set_usize.
! 	(setBounds): Remove unused nchildren variable.
  
! 2003-08-31  Ingo Proetel  <proetel@aicas.com>
  
! 	* java/util/logging/Logger.java: provide class and method information
! 	* java/util/logging/LogManager.java: create handlers
! 	* java/util/logging/SimpleFormatter.java: print souceClassName and
! 	sourceMethodName
  
! 2003-08-28  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* win32.cc: fixed tab, indentation and whitespace
! 	inconsistencies
! 	removed jvm.h include
! 	added includes java/lang/UnsupportedOperationException.h,
! 	java/io/IOException.h, java/net/SocketException.h
! 	(WSAEventWrapper): class implementation
! 	(_Jv_WinStrError): implemented both overloads
! 	(_Jv_ThrowIOException): implemented both overloads
! 	(_Jv_ThrowSocketException): implemented both overloads
! 	(_Jv_select): implemented
! 	* include/win32.h: fixed tab, indentation and whitespace
! 	inconsistencies
! 	wrapped <windows.h> include with  #define WIN32_LEAN_AND_MEAN
! 	added jvm.h include
! 	(WSAEventWrapper): added class declaration
! 	(_Jv_WinStrError): added both overload declarations
! 	(_Jv_ThrowIOException): added both overload declarations
! 	(_Jv_ThrowSocketException): added both overload declarations
! 	removed ENOTCONN, ECONNRESET and ENOPROTOOPT defines
! 	(_Jv_select): added declaration
! 	(_Jv_socket): removed
! 	(_Jv_connect): removed
! 	(_Jv_close): removed
! 	(_Jv_bind): removed
! 	(_Jv_accept): removed
! 	(_Jv_listen): removed
! 	(_Jv_write): removed
! 	(_Jv_read): removed
! 	* java/io/natFileDescriptorWin32.cc: fixed tab, indentation and
! 	whitespace inconsistencies
! 	replaced <windows.h> #include with <platform.h>
! 	removed jvm.h include
! 	(testCanUseGetHandleInfo): new function which tests whether Win32
! 	GetHandleInformation() call can be used with console buffer handles
! 	(only supported on >=WinNT 5.0)
! 	(winerr): removed (superseded by _Jv_WinStrError in include/win32.h)
! 	(valid): rewrote implementation using GetHandleInformation()
! 	(sync): 	changed exception throwing to use error string and exception
! 	helper methods declared in include/win32.h
! 	(open): likewise
! 	(write): likewise
! 	(setLength): likewise
! 	(close): likewise
! 	(seek): likewise
! 	(getFilePointer): likewise
! 	(read): likewise
! 	* java/io/natFileWin32.cc: fixed tab, indentation and
! 	whitespace inconsistencies
! 	replaced <windows.h> #include with <platform.h>
! 	removed jvm.h include
! 	(_access): use JV_TEMP_UTF_STRING
! 	(_stat): likewise
! 	(performMkDir): use JV_TEMP_UTF_STRING
! 	(performRenameTo): likewise
! 	(performDelete): likewise
! 	(performCreate): likewise
! 	(performSetReadOnly): likewise
! 	(performSetLastModified): likewise
! 	* java/lang/natWin32Process.cc: fixed tab, indentation and
! 	whitespace inconsistencies
! 	replaced <windows.h> #include with <platform.h>
! 	removed includes gcj/cni.h, jvm.h
! 	(new_string): removed
! 	(startProcess): use JV_TEMP_UTF_STRING,
! 	changed exception throwing to use error string and exception
! 	helper methods declared in include/win32.h
! 	* java/net/natInetAddressWin32.cc: fixed tab, indentation and
! 	whitespace inconsistencies
! 	replaced <windows.h> #include with <platform.h>
! 	removed jvm.h include
! 	removed DISABLE_JAVA_NET conditional code
! 	removed POSIX conditional code not relevant to Win32
! 	(aton): use JV_TEMP_UTF_STRING
! 	removed POSIX conditional code not relevant to Win32
! 	(lookup): likewise
! 	(getLocalHostName): likewise
! 	* java/net/natNetworkInterfaceWin32.cc: fixed tab, indentation and
! 	whitespace inconsistencies
! 	removed unnecessary windows.h, winsock.h and gcj/cni.h includes
! 	removed DISABLE_JAVA_NET conditional code
! 	removed POSIX conditional code not relevant to Win32
! 	(winsock2GetRealNetworkInterfaces): new function to compute network
! 	interfaces via Winsock2 API
! 	(determineGetRealNetworkInterfacesFN): new function for returning
! 	a function pointer to the function used to compute network interfaces.
! 	(getRealNetworkInterfaces): implemented
! 	* java/net/natPlainDatagramSocketImplWin32.cc: fixed tab, indentation and
! 	whitespace inconsistencies
! 	removed gcj/cni.h include
! 	removed DISABLE_JAVA_NET conditional code
! 	removed POSIX conditional code not relevant to Win32
! 	changed net POSIXisms to Win32isms
! 	replaced _Jv socket-related calls with their real Win32 equivalents
! 	changed exception throwing to use error string and exception
! 	helper methods declared in include/win32.h
! 	(peekData): implemented timeout support
! 	(receive): likewise
! 	* java/net/natPlainSocketImplWin32.cc: fixed tab, indentation and
! 	whitespace inconsistencies
! 	removed gcj/cni.h and gcj/javaprims.h includes
! 	removed DISABLE_JAVA_NET conditional code
! 	removed POSIX conditional code not relevant to Win32
! 	changed net POSIXisms to Win32isms
! 	replaced _Jv socket-related calls with their real Win32
! 	equivalents
! 	changed exception throwing to use error string and exception
! 	helper methods declared in include/win32.h
! 	(throwConnectException): helper function for connect()
! 	(connect): implemented timeout support
! 	(accept): likewise
! 	(doRead): new helper function common to both read() method overloads,
! 	includes timeout support
! 	(read): implemented both overloads in terms of doRead()
! 	(available): implemented using ioctlsocket()
  
! 2003-08-28  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* java/net/natInetAddressWin32.cc,
! 	java/net/natNetworkInterfaceWin32.cc,
! 	java/net/natPlainDatagramSocketImplWin32.cc,
! 	java/net/natPlainSocketImplWin32.cc:
! 	Readded code enclosed in DISABLE_JAVA_NET defines
! 	in preparation for MinGW cleanup / networking
! 	patch
  
! 2003-08-28  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* Makefile.am: Fixed problems with parallel makes.
! 	(all_java_class_files): Readded definition.
! 	(all_java_class_files): New target which depends on
! 	libgcj-@gcc_version@.jar
! 	* Makefile.in: Rebuilt
  
! 2003-08-28  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (ordinary_java_source_files): Added new files.
! 	* java/lang/Class.h (_Jv_sharedlib_register_hook): Declare as
! 	friend.
! 	* java/net/URLClassLoader.java (findClass): Don't use
! 	findURLResource.  Use loader's getClass method.
! 	(URLLoader.getClass): New method.
! 	(addURL): Handle `gcjlib' URLs.
! 	(SoURLLoader): New class.
! 	(SoResource): Likewise.
! 	* gnu/gcj/protocol/gcjlib/Connection.java: New file.
! 	* gnu/gcj/protocol/gcjlib/Handler.java: New file.
! 	* include/jvm.h (struct _Jv_core_chain): Moved from natCore.cc.
! 	(_Jv_RegisterCoreHook): Declare.
! 	(_Jv_FindCore): Declare.
! 	* gnu/gcj/runtime/SharedLibHelper.java: New file.
! 	* gnu/gcj/runtime/natSharedLibLoader.cc (CoreHookFunc): New
! 	typedef.
! 	(core_hook): New function.
! 	(struct SharedLibDummy) [saved_core]: New field.
! 	(init): Set _Jv_RegisterCoreHook.  Throw exception on failure.
! 	(register_hook): Set protection domain and class loader on new
! 	class.
! 	(finalize): Free core chain.
! 	* gnu/gcj/Core.java (Core): New constructor.
! 	* gnu/gcj/runtime/SharedLibLoader.java: Rewrote to use
! 	SharedLibHelper.
! 	* gnu/gcj/natCore.cc (_Jv_RegisterResource): Indentation fixlet.
! 	(_Jv_create_core): New function.
! 	(create): Use it.
! 	(default_register_resource): New function.
! 	(_Jv_RegisterCoreHook): New global.
! 	(_Jv_RegisterResource): Use it.
! 	(core_chain_struct): Removed.
! 	(_Jv_FindCore): New function.
! 	(_Jv_FreeCoreChain): New function.
  
! 2003-08-29  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/natInetAddressWin32.cc,
! 	java/net/natNetworkInterfaceWin32.cc,
! 	java/net/natPlainDatagramSocketImplWin32.cc,
! 	java/net/natPlainSocketImplWin32.cc:
! 	Removed code enclosed in DISABLE_JAVA_NET defines.
  
! 2003-08-26  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* Makefile.am: (write_entries_to_file) New parameterized
! 	function for writing entries to a file one line at a time.
! 	(all_java_class_files): Removed definition.
! 	(.java.class) Removed.target.
! 	(libgcj-@gcc_version@.jar): Changed dependency to
! 	$(all_java_source_files); added compilation step which compiles
! 	all changed source files in one pass.
! 	(libgcj.la) Refactored to use write_entries_to_file.
! 	(lib-gnu-awt-xlib.la) Likewise.
! 	(install-data-local) Likewise.
! 	(write-entries-to-file-check) New target which tests write_entries_to_file.
! 	(all-recursive): Changed dependency from $(all_java_class_files)
! 	to libgcj-@gcc_version@.jar
! 	* Makefile.in: Rebuilt.
  
! 2003-08-26  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/StrictMath.java: Typo fix.
! 	* java/lang/Math.java: Typo fix.
  
! 2003-08-26  Stephen Crawley  <crawley@dstc.edu.au>
  
! 	* java/lang/ThreadGroup.java (removeThread): null the 'group' field
! 	of the removed Thread.
  
! 2003-08-26  Mark Wielaard  <mark@klomp.org>
  
! 	Reported by David Holmes <dholmes@dltech.com.au>.
! 	* java/lang/InheritableThreadLocal.java (threadMap): Wrap inside
! 	Collections.synchronizedMap.
! 	* java/lang/ThreadLocal.java (valueMap): Likewise.
  
! 2003-08-26  Mark Wielaard  <mark@klomp.org>
  
! 	* 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.
! 	* 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-26  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am: Removed all GNU-make-specific FIXME comments.
  
! 	* java/lang/ref/Reference.java (get): Indentation fix.
! 	(clear): Comment fix.
! 	(enqueue): Likewise.
! 	(lock): Likewise.
! 	(referent): Likewise.
  
! 2003-08-26  Tom Tromey  <tromey@redhat.com>
  
! 	PR java/12058:
! 	* java/lang/reflect/natArray.cc (set): Allow null as argument.
  
! 	* 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  Scott Gilbertson  <scottg@mantatest.com>
! 	* Makefile.am: added gnu/awt/xlib/XOffScreenImage.java.
! 	* Makefile.in: re-generated.
! 	* gnu/awt/j2d/IntegerGraphicsState.java
! 	(ScreenCoupledImage): new interface.
! 	(drawImage): detect ScreenCoupledImage instances.
! 	* gnu/awt/xlib/XCanvasPeer.java (createImage) implemented.
! 	* gnu/awt/xlib/XEventLoop.java
! 	(createEvent): re-formatted, and rearranged to avoid null pointer.
! 	* gnu/awt/xlib/XGraphics.java
! 	(drawImage): added XOffScreenImage handling.
! 	* gnu/awt/xlib/XOffScreenImage.java: new file.
! 	* gnu/gcj/xlib/Drawable.java (getDepth): new native method.
! 	* gnu/gcj/xlib/GC.java (copyArea): new native method.
! 	* gnu/gcj/xlib/XAnyEvent.java
! 	(TYPE_KEY_PRESS): new constant.
! 	(TYPE_KEY_RELEASE): new constant.
! 	(TYPE_MOTION_NOTIFY): new constant.
! 	(TYPE_ENTER_NOTIFY): new constant.
! 	(TYPE_LEAVE_NOTIFY): new constant.
! 	(TYPE_FOCUS_IN): new constant.
! 	(TYPE_FOCUS_OUT): new constant.
! 	(TYPE_KEYMAP_NOTIFY): new constant.
! 	(TYPE_GRAPHICS_EXPOSE): new constant.
! 	(TYPE_NO_EXPOSE): new constant.
! 	(TYPE_VISIBILITY_NOTIFY): new constant.
! 	(TYPE_CREATE_NOTIFY): new constant.
! 	(TYPE_DESTROY_NOTIFY): new constant.
! 	(TYPE_MAP_REQUEST): new constant.
! 	(TYPE_CONFIGURE_REQUEST): new constant.
! 	(TYPE_GRAVITY_NOTIFY): new constant.
! 	(TYPE_RESIZE_REQUEST): new constant.
! 	(TYPE_CIRCULATE_NOTIFY): new constant.
! 	(TYPE_CIRCULATE_REQUEST): new constant.
! 	(TYPE_PROPERTY_NOTIFY): new constant.
! 	(TYPE_SELECTION_CLEAR): new constant.
! 	(TYPE_SELECTION_REQUEST): new constant.
! 	(TYPE_SELECTION_NOTIFY): new constant.
! 	(TYPE_COLORMAP_NOTIFY): new constant.
! 	(TYPE_MAPPING_NOTIFY): new constant.
! 	* gnu/gcj/xlib/natDrawable.cc (getDepth): new method.
! 	* gnu/gcj/xlib/natGC.cc (copyArea): new method
! 	* java/awt/Component.java (createImage): changed to use peer method.
  
! 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  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java: Remove
! 	GTK_WINDOW_DIALOG.  Set GTK_WINDOW_POPUP to 1.
  
! 2003-08-21  David Daney  <ddaney@avtrex.com>
  
! 	Fix for PR libgcj/12013:
! 	* java/lang/ref/natReference.cc (finalize_referred_to_object):
! 	Check `cleared' field.
! 	* java/lang/ref/Reference.java (copy): Updated comments.
! 	(cleared): New field.
! 	(clear): Rewrote.
  
! 2003-08-21  Scott Gilbertson  <scottg@mantatest.com>
!             Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* Makefile.am (gtk_awt_peer_sources): Add
! 	gnu/java/awt/peer/GLightweightPeer.java.  Remove
! 	gnu/java/awt/GLightweightPeer.java.
! 	* gnu/java/awt/GLightweightPeer.java: Remove file.
! 	* gnu/java/awt/peer/GLightweightPeer.java: New file.
! 	* java/awt/Component.java (getToolkit): Add comment about
! 	lightweight components.
! 	* java/awt/Toolkit.java (createComponent): Return
! 	gnu.java.awt.peer.GLightweightPeer.
  
! 2003-08-21  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* configure.in: Fix detection of gcj when building with newlib.
! 	* configure: Regenerated.
  
! 2003-08-20  Graydon Hoare  <graydon@redhat.com>
  
! 	* jni.cc: Replace "cheating" pointer-casting code with
! 	extract_from_jvalue<> template.
  
! 2003-08-20  Andrew Haley  <aph@redhat.com>
  
! 	* gnu/gcj/runtime/StackTrace.java (getClass): New method.
! 	* gnu/gcj/runtime/natStackTrace.cc (getClass): New method.
! 	(classAt): Break out class lookup function into getClass().
! 	* exception.cc (PERSONALITY_FUNCTION): Use new encoding for exception
! 	handlers when using -fno-assume-compiled.
  
! 2003-08-20  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/9125:
! 	* gnu/gcj/runtime/natVMClassLoader.cc (findClass): Find Runtime
! 	object outside of loop.  Respect lib_control setting.
! 	* gnu/gcj/runtime/VMClassLoader.java (tried_libraries): New
! 	field.
! 	(lib_control): New field.
! 	(LIB_FULL, LIB_CACHE, LIB_NEVER): New constants.
! 	(VMClassLoader): Initialize new field.
  
! 	* java/lang/ref/natReference.cc (finalize_referred_to_object):
! 	Set `list->reference' to DELETED_REFERENCE when removing dead
! 	object.
! 	(find_slot): Added an assert.
! 	(DELETED_REFERENCE): New define.
! 	(add_to_hash): Check for DELETED_REFERENCE.
! 	(remove_from_hash): Just return if found slot isn't ours.
  
! 2003-08-19  Andrew Haley  <aph@redhat.com>
  
! 	* prims.cc (unblock_signal): New function.
! 	(catch_segv): Use it.
! 	(catch_fpe): Likewise.
  
! 2003-08-19  Danny Smith  <dannysmith@users.sourceforge.net>
  
! 	PR libgcj/11575
! 	* java/io/natFileDescriptorWin32.cc (open): Set create
! 	flag to OPEN_AWAYS when READ & WRITE regardless of APPEND flag.
! 	Honor EXCL when openning with WRITE flag. 
  
! 2003-08-19  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* include/jvm.h: New class _Jv_TempUTFString (helper class for
! 	getting a temporary C string from a jstring)
! 	New macro JV_TEMP_UTF_STRING, which leverages _Jv_TempUTFString
! 	but uses a stack buffer if the string length is less than 256
! 	bytes.
  
! 2003-08-18  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/11951:
! 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Returns
! 	void.  Throw VirtualMachineError if ffi fails.  Initialize return
! 	value.  Added is_jni_call argument; only wrap exception if not a
! 	JNI call.  Use descriptive message if operation not supported.
! 	(_Jv_GetTypesFromSignature): Use declaring class' loader to find
! 	array class.
! 	* include/jvm.h (_Jv_CallAnyMethodA): Updated declaration.
! 	* jni.cc (_Jv_JNI_CallAnyMethodV): Updated for new form of
! 	_Jv_CallAnyMethodA.
! 	(_Jv_JNI_CallAnyMethodA): Likewise.
! 	(_Jv_JNI_CallAnyVoidMethodV): Likewise.
! 	(_Jv_JNI_CallAnyVoidMethodA): Likewise.
  
! 2003-08-13  Tom Tromey  <tromey@redhat.com>
  
! 	* gij.cc (help): Document -? and -X.
  
! 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  Tom Tromey  <tromey@redhat.com>
  
! 	* gij.cc (main): Handle -? and -X.
  
! 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-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-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-08  Andrew Haley  <aph@redhat.com>
  
! 	* Makefile.am (AM_CXXFLAGS): Define BOOT_CLASS_PATH.
! 	* Makefile.in: Rebuild.
! 	* java/lang/natRuntime.cc (insertSystemProperties): Add
! 	"sun.boot.class.path".
  
! 2003-08-07  Andrew Haley  <aph@redhat.com>
  
! 	* java/io/PrintStream.java: Don't crash on a null string.
! 	
! 2003-08-07  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* configure.in: Don't initialize GCINCS to boehm-gc/include.
! 	* configure: Regenerate.
  
! 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-07  Jacob Gladish <gladish@spinnakernet.com>
!             Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* java/net/natPlainSocketImplPosix.cc (connect): Pass the FD as a
! 	ready-to-write argument to _Jv_Select. Reset the socket back to 
! 	non-blocking state after connecting.
! 	(accept): Pass the FD as a ready-to-write argument to _Jv_Select.
! 	Throw SocketTimeoutException not InterruptedIOException.
! 	(read): Throw SocketTimeoutException not InterruptedIOException.
  
! 2003-08-07  Bryce McKinlay  <bryce@mckinlay.net.nz>
  
! 	* java/lang/Thread.java (Thread): Check for null "name" from
! 	start of private constructor, not after calling the private
! 	constructor.
  
! 2003-08-06  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/FilePermission.java (equals): Use correct index for
! 	last character of path.
  
! 2003-08-06  Alan Modra  <amodra@bigpond.net.au>
  
! 	* acinclude.m4 (LIBGCJ_CONFIGURE): Remove AC_CANONICAL_BUILD.
! 	* configure.in: Compare with_cross_host to build_alias, not build.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regenerate.
  
! 2003-08-05  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/11779:
! 	* java/lang/reflect/natField.cc (getAddr): Skip frames in Field
! 	class.
  
! 	* java/lang/reflect/Method.java: Updated status comment.
! 	Imported javadoc from Classpath and re-ordered methods.
! 	* java/lang/reflect/Constructor.java: Reindented.  Updated
! 	status comment.  Imported javadoc from Classpath and re-ordered
! 	methods.
  
! 2003-08-05  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  Matthias Klose  <doko@debian.org>
  
! 	* aclocal.m4: check for libart-config binary
! 	  under the name libart2-config as well.
! 	* configure: regenerated.
  
! 2003-08-04  David P Grove  <groved@us.ibm.com>
  
! 	* java/text/DecimalFormat.java (format): avoid ArithmeticException
! 	when groupingSize is 0.
! 	(parse): Likewise.
  
! 2003-08-04  Matthias Klose  <doko@debian.org>
  
! 	* libart.m4: check for libart-config binary
! 	  under the name libart2-config as well.
! 	* configure, aclocal.m4: regenerated.
  
! 2003-08-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteBufferImpl.java
! 	(getChar): Check remaining bytes, fixed comment about endianess.
! 	(putChar): Likewise.
! 	(getShort): Likewise.
! 	(putShort): Likewise.
! 	(getInt): Check remaining bytes, fixed conversion, fixed comment about
! 	endianess.
! 	(putInt): Likewise.
! 	(getLong): Likewise.
! 	(putLong): Likewise.
! 	(getFloat): Likewise.
! 	(putFloat): Likewise.
! 	(getDouble): Likewise.
! 	(putDouble): Likewise.
! 	* java/nio/DirectByteBufferImpl.java
! 	(getChar): Wrapped code, fixed comment about endianess.
! 	(putchar): Likewise.
! 	(getShort): Likewise.
! 	(putShort): Likewise.
! 	(getInt): Fixed conversion, fixed comment about endianess.
! 	(putInt): Likewise.
! 	(getLong): Likewise.
! 	(putLong): Likewise.
! 	(getFloat): Likewise.
! 	(putFloat): Likewise.
! 	(getDouble): Likewise.
! 	(putDouble): Likewise.
! 	* java/nio/MappedByteBufferImpl.java
! 	(compact): Implemented.
! 	(getChar): Implemented.
! 	(putChar): Implemented.
! 	(getDouble): Implemented.
! 	(putdouble): Implemented.
! 	(getFloat): Implemented.
! 	(putFloat): Implemented.
! 	(getInt): Implemented.
! 	(putInt): Implemented.
! 	(getLong): Implemented.
! 	(putLong): Implemented.
! 	(getShort): Implemented.
! 	(putShort): Implemented.
! 	* java/nio/channels/FileChannelImpl.java
! 	(read): Set position where to access file.
! 	(write): Likewise.
! 	(transferTo): Flip buffer after read and before write.
! 	(transferFrom): Likewise.
  
! 2003-08-02  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/lang/ArrayHelper.java
! 	(equalsArray): Reformated, added method documentation.
  
! 2003-08-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URL.java
! 	(URL): Added paragraph about the
! 	gnu.java.net.nocache_protocol_handlers property.
! 	(ph_cache): Renamed from handlers to match classpath's implementation.
! 	Reordered it with factory and serialVersionUID member variables.
! 	(cache_handlers): New member variable.
! 	(static): New static initializer to initialize cache_handlers from
! 	gnu.java.net.nocache_protocol_handlers property.
! 	(URL): Use ph_cache instead of handlers, reformatted some code to
! 	match classpath's implementation.
  
! 2003-08-01  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/11241:
! 	* java/util/WeakHashMap.java (WeakHashMap(int,float)): If
! 	initialCapacity is 0, set it to 1.
  
! 2003-08-01  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".
  
! 2003-08-01  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-08-01  Tom Tromey  <tromey@redhat.com>
  
! 	* configure: Rebuilt.
! 	* configure.in (tool_include_dir): Redefine to match gcc.
  
! 2003-08-01  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 and optimize code.
  
! 2003-07-31  Tom Tromey  <tromey@redhat.com>
  
! 	More for PR libgcj/11737:
! 	* 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>
  
! 	Fix for PR libgcj/11728:
! 	* java/util/HashMap.java (readObject): Set size.
  
! 2003-07-31  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/11737:
! 	* 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.
  
! 	* java/awt/geom/Arc2D.java (getBounds2D): Implement.
! 	(containsAngle): Likewise.
! 	(getStartPoint): Rewrote.
! 	(getEndPoint): Likewise.
! 	(setAngleStart(Point2D)): Likewise.
  
! 2003-07-31  Roger Sayle  <roger@eyesopen.com>
! 	    Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* configure.in: Add new THREADCXXFLAGS variable.
!   	Handle POSIX threads on alpha*-dec-osf*.
! 	* configure: Regenerate.
! 	* Makefile.am: Add THREADCXXFLAGS to AM_CXXFLAGS.
! 	* Makefile.in: Regenerate.
  
! 2003-07-08  Andrew Haley  <aph@redhat.com>
  
!         * include/i386-signal.h (RESTORE): New.
!         (INIT_SEGV): Set restorer.
!         (INIT_FPE): Likewise.
  
! 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  Tom Tromey  <tromey@redhat.com>
  
! 	* defineclass.cc (handleField): Throw exception if field name is
! 	duplicated.
! 	(handleMethod): Throw exception for duplicate method.
  
! 2003-07-29  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/gcj/convert/natIconv.cc (write): Handle case where
! 	output buffer is too small.
  
! 2003-07-28  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natString.cc (init(gnu.gcj.runtime.StringBuffer)):
! 	New method.
! 	Include gnu/gcj/runtime/StringBuffer.h.
! 	* java/lang/String.java (init(gnu.gcj.runtime.StringBuffer)): New
! 	native method.
! 	(String(gnu.gcj.runtime.StringBuffer)): Use it.
  
! 2003-07-27  Anthony Green  <green@redhat.com>
  
! 	* configure.in: Fix newlib check.
! 	* configure: Rebuilt.
  
! 2003-07-27  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
! 	Create vbox and layout for GtkPlug.
  
! 2003-07-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Window.java
! 	(Window): Removed now unused constructor. It became oboslete with the
! 	new embedded window patch.
  
! 2003-07-27  Thomas Fitzsimmons <fitzsim@redhat.com.h> 
! 	    Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/EmbeddedWindow.java
! 	(EmbeddedWindow): Extends Frame instead of Window.
! 	(window_id): New member variable to store the native window handle.
! 	(create): Removed.
! 	(EmbeddedWindow): New constructor.
! 	(addNotify): New method.
! 	(getHandler): Likewise.
! 	(setWindowPeer): New native method.
! 	* gnu/java/awt/EmbeddedWindowSupport.java
! 	(EmbeddedWindowSupport): Fixed documentation.
! 	(createEmbeddedWindow): Return EmbeddedWindowPeer instead of
! 	WindowPeer, give it an EmbeddedWindow instance instead of the raw
! 	window data.
! 	* gnu/java/awt/natEmbeddedWindow.cc
! 	(create): Removed.
! 	(setWindowPeer): New method.
! 	* gnu/java/awt/peer/EmbeddedWindowPeer.java,
! 	gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
! 	New files
! 	* gnu/java/awt/peer/gtk/GtkToolkit.java
! 	(GtkToolkit): Implements EmbeddedWindowSupport.
! 	(createEmbeddedWindow): New method.
! 	* java/awt/Window.java
! 	(Window): Removed.
! 	* Makefile.am
! 	(java_source_files): Added EmbeddedWindowPeer.java.
! 	(gtk_awt_peer_sources): Added GtkEmbeddedWindowPeer.java.
! 	(gtk_c_source_files): Added gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c.
  	* Makefile.in: Regenerated.
  
! 2003-07-26  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* java/lang/Win32Process.java (ConcreteProcess): Surround
! 	a command line element with quotes if it contains an
! 	embedded space or tab.
! 	* java/lang/natWin32Process.cc (startProcess): Do not
! 	surround command line elements with quotes here.
  
! 	* configure.host: Use -fcheck-references and 
! 	-fuse-divide-subroutine for MinGW until we fix
! 	win32_exception_handler( ) in win32.cc w.r.t. Win32 
! 	Structured Exception Handling (SEH).
  
! 	* win32.cc (_Jv_platform_initProperties): Use generic names
! 	like "x86" for the "os.arch" property to be consistent with
! 	what Sun's JDK produces. Use the wProcessorArchitecture
! 	member of the Win32 SYSTEM_INFO structure, filled in a call 
! 	to GetSystemInfo( ), instead of dwProcessorType.
  
! 2003-07-26  Mohan Embar  <gnustuff@thisiscool.com>
! 	    Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* Makefile.am: Use cross-compiling gcjh from the path for
! 	a crossed-native build.
! 	* Makefile.in: Rebuilt.
! 	* configure.in: Include libltdl in non-newlib builds.
! 	Moved determination of gcj used to build libraries to
! 	its own section. Fixed cross-compilation issues for
! 	non-newlib builds.
! 	* configure: Rebuilt.
  
! 2003-07-25  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/natFileDescriptorPosix.cc (write): Try again on EINTR.
! 	(write): Likewise.
! 	(read): Likewise.
! 	(read): Likewise.
  
! 2003-07-25  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/natRuntime.cc (_load): Add library name to
! 	UnsatisfiedLinkError when thrown.
  
! 2003-07-25  Mark Wielaard  <mark@klomp.org>
  
! 	* Makefile.am (awt_java_source_files): java/awt/GridBagLayoutInfo.java
! 	added.
! 	* Makefile.in: Likewise.
  
! 2003-07-25  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-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/GridBagLayout.java:
! 	Totally reworked and partly implemented.
! 	* java/awt/GridBagLayoutInfo.java:
! 	New file.
  
! 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  Tom Tromey  <tromey@redhat.com>
  
! 	For PR libgcj/7482:
! 	* verify.cc (ref_intersection): New class.
! 	(type_val): Removed unresolved_reference_type,
! 	uninitialized_unresolved_reference_type.
! 	(is_assignable_from_slow): Rewrote.
! 	(type::data): Removed.
! 	(type::klass): New field.
! 	(type::type): Added verifier argument.
! 	(type::resolve): Removed.
! 	(type::set_uninitialized): Updated for change to type_val.
! 	(type::set_initialized): Likewise.
! 	(type::isinitialized): Likewise.
! 	(type::print): Likewise.
! 	(construct_primitive_array_type): Likewise.
! 	(type::compatible): Updated for change to type_val and to use
! 	ref_intersection.
! 	(type::isarray): Updated to use ref_intersection.
! 	(type::isinterface): Likewise.
! 	(type::element_type): Likewise.
! 	(type::to_array): Likewise.
! 	(type::verify_dimensions): Rewrote.
! 	(type::merge): Likewise.
! 	(check_class_constant): Updated for type constructor change.
! 	(check_constant): Likewise.
! 	(check_field_constant): Likewise.
! 	(get_one_type): Likewise.
! 	(initialize_stack): Likewise.
! 	(verify_instructions_0): Likewise.
! 	(verify_instructions_0) [op_invokeinterface]: Removed special
! 	case.
! 	(isect_list): New field.
! 	(_Jv_BytecodeVerifier): Initialize it.
! 	(~_Jv_BytecodeVerifier): Destroy ref_intersection objects. 
  
! 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-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
! 	(connectHooks): New method.
! 	(handleEvent): Remove.
! 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
! 	(createHooks): Remove declaration.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
! 	(generates_key_typed_event): Change to handle only certain
! 	keyvals.
! 	(awt_event_handler): Add special handling for GtkTextView.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
! 	(textcomponent_commit_cb): New function.
! 	(textcomponent_changed_cb): Likewise.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
! 	(connectHooks): Remove.
  
! 2003-07-23  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natSystem.cc (arraycopy): Check for overflow.
  
! 	* boehm.cc (_Jv_BuildGCDescr): Use `1ULL'.
  
! 2003-07-22  Tom Tromey  <tromey@redhat.com>
  
! 	* boehm.cc (_Jv_BuildGCDescr): Wrote.
! 	Include limits.h.
  
! 2003-07-22  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/Window.java (getWarningString): Just return the
! 	string.
! 	(Window): Set warningString; check with security manager.
  
! 2003-07-22  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* gnu/awt/xlib/XGraphicsConfiguration.java
! 	(FontMetricsCache): Made static.
!  
! 2003-07-22  Tom Tromey  <tromey@redhat.com>
  
! 	* 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-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
! 	(create): Remove unused method implementation.
! 	(connectHooks): Remove debug messages.
  
! 2003-07-20  Anthony Green  <green@redhat.com>
  
! 	* gnu/awt/j2d/AbstractGraphicsState.java (clone): Handle
! 	CloneNotSupportedException.
! 	* gnu/gcj/xlib/WindowAttributes.java (clone): Ditto.
! 	* gnu/gcj/xlib/WMSizeHints.java (clone): Ditto.
! 	* gnu/gcj/xlib/GC.java (clone): Ditto.
! 	* gnu/awt/xlib/XGraphics.java (clone): Ditto.
! 	* gnu/awt/j2d/Graphics2DImpl.java (clone): Ditto.
  
- 	* gnu/awt/xlib/XEventLoop.java (postNextEvent): Remove unreachable
- 	handler.
- 	* gnu/gcj/runtime/NameFinder.java (NameFinder): Ditto.
  
! 2003-07-20  Steve Pribyl <steve@netfuel.com.>
  
! 	* gnu/gcj/runtime/natSharedLibLoader.cc (init): `libname' now a
! 	String.  Put dlerror() message into exception.
! 	Include UnsatisfiedLinkError.
! 	* gnu/gcj/runtime/SharedLibLoader.java (init): `libname' now a
! 	String.  Now native.
  
! 2003-07-20  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Runtime.java: Comment fix.
! 	* java/lang/ClassLoader.java (isAncestorOf): New method.
! 	(getParent): Uncommented security check.  Use isAncestorOf.
! 	* include/jvm.h (_Jv_CheckAccess): Declare.
! 	* java/lang/reflect/natConstructor.cc (newInstance): Perform
! 	access check.
! 	Include IllegalAccessException.h, ArrayIndexOutOfBoundsException.h.
! 	* java/lang/reflect/natArray.cc (newInstance): Pass caller's
! 	class loader to _Jv_GetArrayClass.
! 	Include ArrayIndexOutOfBoundsException.h.
! 	* java/lang/reflect/Field.java: Update comment to reflect status.
! 	(equals): Fixed indentation.
! 	* java/lang/Class.h (Class): Declare memberAccessCheck, not
! 	checkMemberAccess.  Make _Jv_CheckAccess a friend.
! 	* java/lang/Class.java (memberAccessCheck): New method from
! 	Classpath.
! 	(checkMemberAccess): Removed.
! 	(getDeclaredMethod): Use memberAccessCheck.
! 	(getField): Likewise.
! 	(getMethod): Likewise.
! 	* resolve.cc (_Jv_ResolvePoolEntry): Use _Jv_CheckAccess.
! 	(_Jv_SearchMethodInClass): Likewise.
! 	* prims.cc (_Jv_CheckAccess): New function.
! 	* jni.cc (_Jv_JNI_FindClass): Use getClassLoaderInternal.
! 	(_Jv_JNI_GetAnyFieldID): Likewise.
! 	* java/lang/natClass.cc (forName): Use getClassLoaderInternal.
! 	(getClassLoader): Added security check.
! 	(getConstructor): Call memberAccessCheck.
! 	(getDeclaredClasses): Likewise.
! 	(getDeclaredField): Likewise.
! 	(getDeclaredFields): Likewise.
! 	(_getConstructors): Likewise.
! 	(getDeclaredConstructor): Likewise.
! 	(getDeclaredMethods): Likewise.
! 	(getFields): Likewise.
! 	(getMethods): Likewise.
! 	(newInstance): Likewise.
! 	(_Jv_MakeVTable): Put method name in exception.
! 	* java/lang/reflect/natMethod.cc (getType): Use
! 	getClassLoaderInternal.
! 	(_Jv_GetTypesFromSignature): Likewise.
! 	(invoke): Perform access check.
! 	(_Jv_CallAnyMethodA): Removed old FIXME comments.
! 	Include ArrayIndexOutOfBoundsException.h.
! 	* java/lang/reflect/natField.cc (getType): Use
! 	getClassLoaderInternal.
! 	(_Jv_CheckFieldAccessibility): Removed.
! 	(getAddr): Use _Jv_CheckAccess; find caller.
! 	Include ArrayIndexOutOfBoundsException.h.
  
! 2003-07-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URL.java
! 	(URL): Fixed documentation to name an argument correcty, Reformatted
! 	one method declaration.
! 	(getURLStreamHandler): Added documentation from classpath.
  
! 2003-07-19  Tom Tromey  <tromey@redhat.com>
  
! 	* mauve-libgcj: Don't run CollationElementIterator tests.
  
! 2003-07-19  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-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/util/logging/Handler.java (isLoggable): Check record level
! 	smaller or equal.
  
! 2003-07-17  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/peer/gtk/GtkToolkit.java:
! 	Reworked imports.
  
! 2003-07-14  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/rmi/server/UnicastServerRef.java:
! 	New version from classpath.
  
! 2003-07-14  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/image/MemoryImageSource.java,
! 	java/beans/PropertyEditorManager.java,
! 	javax/naming/CompoundName.java,
! 	javax/naming/spi/NamingManager.java,
! 	javax/swing/AbstractButton.java,
! 	javax/swing/ButtonModel.java,
! 	javax/swing/SwingUtilities.java,
! 	javax/swing/UIManager.java,
! 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
! 	javax/swing/event/AncestorEvent.java,
! 	javax/swing/event/InternalFrameEvent.java,
! 	java/util/zip/ZipFile.java:
! 	New versions from classpath.
  
! 2003-07-13  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/FileChannelImpl.java,
! 	gnu/java/nio/natFileChannelImpl.cc: Removed.
! 	* 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/FileChannelImpl.java,
! 	java/nio/channels/natFileChannelImpl.cc:
! 	New files.
! 	* Makefile.am
! 	(ordinary_java_source_files):
! 	Removed gnu/java/nio/FileChannelImpl.java and added
! 	java/nio/channels/FileChannelImpl.java.
! 	(nat source_files):
! 	Removed gnu/java/nio/natFileChannelImpl.cc and added
! 	java/nio/channels/natFileChannelImpl.cc.
  	* Makefile.in: Regenerated.
  
! 2003-07-13  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/plaf/basic/BasicBorders.java,
! 	javax/swing/plaf/basic/BasicLabelUI.java,
! 	javax/swing/plaf/basic/BasicLookAndFeel.java,
! 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
! 	javax/swing/plaf/basic/BasicTextUI.java,
! 	javax/swing/plaf/metal/MetalLookAndFeel.java:
! 	New versions from classpath.
  
! 2003-07-13  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/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
  
! 2003-07-13  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/locale/LocaleInformation_de.java
! 	* gnu/java/locale/LocaleInformation_en.java
! 	* gnu/java/locale/LocaleInformation_nl.java
  
! 2003-07-13  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/EmbeddedWindow.java,
! 	gnu/java/awt/EmbeddedWindowSupport.java,
! 	gnu/java/awt/natEmbeddedWindow.cc:
! 	New files.
! 	* java/awt/Window.java
! 	(Window): New constructor to support embedded windows.
! 	* Makefile.am
! 	(awt_java_source_files): Added gnu/java/awt/EmbeddedWindow.java and
! 	gnu/java/awt/EmbeddedWindowSupport.java.
! 	(nat_source_files): Added gnu/java/awt/natEmbeddedWindow.cc.
! 	* Makefile.in: Regenerated.
  
! 2003-07-11  Matt Kraai  <kraii@alumni.cmu.edu>
  
! 	* gnu/gcj/runtime/SharedLibLoader.java: Fix misspelling.
! 	* gnu/gcj/runtime/natSharedLibLoader.cc: Likewise.
! 	* java/awt/im/InputContext.java: Remove a redundant
! 	partial line.
  
! 2003-07-09  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (AM_MAKEFLAGS): Added CPPFLAGS.
  
! 2003-07-09  Mark Wielaard  <mark@klomp.org>
  
! 	* java/io/ObjectOutputStream.java (writeObject): break after
! 	calling writeClassDescriptor().
  
! 2003-07-09  Mark Mitchell  <mark@codesourcery.com>
  
! 	* gcj/array.h (JvPrimClass): Don't parenthesize the output.
  
! 2003-07-09  Michael Koch  <konqueror@gmx.de>
  
! 	* 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/GtkWindowPeer.java:
! 	Explicitly import used classes.
! 	* java/awt/Container.java: New version from classpath.
  
! 2003-07-09  Michael Koch  <konqueror@gmx.de>
  
! 	* libgcj.pc.in: New file.
! 	* Makefile.am: Install libgcj.pc in $libdir/pkgconfig.
! 	* Makefile.in: Regenerated.
! 	* configure: Regenrated.
! 	* configure.in: Create libgcj.pc from libgcj.pc.in.
  
! 2003-07-08  Mark Wielaard <mark@klomp.org>
  
! 	* gcj/cni.h: CNI now expands to Compiled Native Interface.
  
! 	* java/lang/e_pow.c: CYGNUS LOCAL should be GCJ LOCAL.
! 	* java/lang/fdlibm.h: Likewise.
  
! 2003-07-07  Adam Megacz <adam@xwt.org>
  
!         * posix.cc: added #include<stdio.h>
! 		
! 2003-07-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Fix
! 	formatting.
  
! 	* 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  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* configure.in: Check for usleep declaration.
! 	* acconfig.h (HAVE_USLEEP_DECL): Provide template.
! 	* configure: Regenerate.
! 	* include/config.h.in: Likewise.
! 	* include/posix.h [!HAVE_USLEEP_DECL]: Declare usleep.
  
! 2003-07-01  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/gcj/convert/natIconv.cc
! 	(iconv_init): Fixed possible memory leak by releasing allocated iconv
! 	handle.
  
! 2003-06-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* glib-2.0.m4: New file.
! 	* gtk-2.0.m4: New file.
! 	* glib.m4: Remove.
! 	* gtk.m4: Remove.
! 	* configure.in: Update AM_PATH_GTK macro call to
! 	AM_PATH_GTK_2_0.  Likewise for AM_PATH_GLIB.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.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_GtkScrollBarPeer.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_GtkWindowPeer.c,
! 	jni/gtk-peer/gthread-jni.c,
! 	jni/gtk-peer/gthread-jni.h:
! 	New versions from classpath.
! 	* aclocal.m4: Regenerate.
  	* configure: Regenerate.
  	* Makefile.in: Regenerate.
- 	* gcj/Makefile.in: Regenerate.
- 	* include/Makefile.in: Regenerate.
- 	* testsuite/Makefile.in: Regenerate.
  
! 2003-06-30  Gary Benson  <gbenson@redhat.com>
  
! 	For PR libgcj/11349:
! 	* javax/naming/spi/NamingManager.java (getURLContext): Use
! 	correct name for factory class.
  
! 2003-06-28  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/PrintStream.java
! 	(checkError): Call flush() instead of direct flushing of the Writer
! 	object.
! 	(print): Call print(String) instead of direct print method of the
! 	Writer Object.
! 	(println): Call println(String) instead of direct println method of the
! 	Writer Object.
! 	(write): Simplified.
  
! 2003-06-28  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/ServerSocket.java
! 	(setChannel): New method.
! 	* java/net/Socket.java
! 	(setChannel): New method.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/beans/beancontext/BeanContextSupport.java:
! 	New version from classpath.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Window.java,
! 	java/awt/font/GraphicAttribute.java,
! 	java/awt/font/ImageGraphicAttribute.java,
! 	java/awt/image/DataBufferByte.java,
! 	java/awt/image/DataBufferInt.java,
! 	java/awt/image/DataBufferUShort.java,
! 	java/awt/image/DirectColorModel.java,
! 	java/awt/image/PixelGrabber.java:
! 	New versions from classpath.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/security/Certificate.java
! 	(getGuarantor): Removed wrong @deprecated tag.
! 	(getPrincipal): Likewise.
! 	(getPublicKey): Likewise.
! 	(encode): Likewise.
! 	(decode): Likewise.
! 	(getFormat): Likewise.
! 	(toString): Likewise.
! 	* java/security/cert/PolicyQualifierInfo.java
! 	(PolicyQualifierInfo): Made final.
! 	* javax/security/auth/x500/X500Principal.java
! 	(serialVersionUID): New member variable.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/Format.java
! 	(serialVersionUID): Fixed value.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/Inet4Address.java
! 	(Inet4Address): Made package-private.
! 	* java/net/Inet6Address.java
! 	(Inet4Address): Made package-private.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/RandomAccessFile.java
! 	(readLine): Removed wrong @deprecated tag.
! 	(getChannel): Made final.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/FileChannelImpl.java
! 	(write): Removed.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteBufferImpl.java
! 	(ByteBufferImpl): Made it a package-private class
! 	* java/nio/CharBufferImpl.java
! 	(CharBufferImpl): Made it a package-private class
! 	* java/nio/DirectByteBufferImpl.java
! 	(DirectByteBufferImpl): Made it a package-private class
! 	* java/nio/DoubleBufferImpl.java
! 	(DoubleBufferImpl): Made it a package-private class
! 	* java/nio/FloatBufferImpl.java
! 	(FloatBufferImpl): Made it a package-private class
! 	* java/nio/IntBufferImpl.java
! 	(IntBufferImpl): Made it a package-private class
! 	* java/nio/LongBufferImpl.java
! 	(LongBufferImpl): Made it a package-private class
! 	* java/nio/ShortBufferImpl.java
! 	(ShortBufferImpl): Made it a package-private class
! 	* java/nio/channels/FileChannel.java
! 	(write): Made final.
! 	* java/nio/channels/ServerSocketChannel.java
! 	(ServerSocketChanne): Made protected.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/naming/CompositeName.java
! 	(serialVersionUID): New member variable.
! 	* javax/naming/CompoundName.java
! 	(serialVersionUID): New member variable.
! 	* javax/naming/InitialContext.java
! 	(InitialContext): Throws NamingException.
! 	(init): Likewise.
! 	* javax/naming/LinkRef.java
! 	(serialVersionUID): New member variable.
! 	(gteLinkName): Throws NamingException.
! 	* javax/naming/NamingException.java
! 	(serialVersionUID): New member variable.
! 	* javax/naming/NamingSecurityException.java
! 	(NamingSecurityException): Made abstract.
! 	(serialVersionUID): New member variable.
! 	* javax/naming/ReferralException.java
! 	(serialVersionUID): New member variable.
! 	* javax/naming/StringRefAddr.java
! 	(serialVersionUID): New member variable.
! 	* javax/naming/directory/BasicAttribute.java:
! 	Reworked imports.
! 	(serialVersionUID): New member variable.
! 	(get): Throws NamingException.
! 	(getAll): Throws NamingException.
! 	* javax/naming/directory/BasicAttributes.java:
! 	Reworked imports.
! 	(serialVersionUID): New member variable.
! 	* javax/naming/ldap/UnsolicitedNotificationEvent.java
! 	(serialVersionUID): New member variable.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am
! 	(awt_java_source_files): Added new files:
! 	javax/swing/Popup.java,
! 	javax/swing/PopupFactory.java
! 	* Makefile.in: Regenerated.
  
! 2003-06-27  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JWindow.java,
! 	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/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/BasicTextUI.java,
! 	javax/swing/plaf/basic/BasicTreeUI.java:
! 	New versions from classpath.
! 	* javax/swing/Popup.java,
! 	javax/swing/PopupFactory.jav:
! 	New source files from classpath.
! 	* javax/swing/plaf/doc-files/TreeUI-1.png:
! 	New binary files from classpath.
  
! 2003-06-25  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am
! 	(awt_java_source_files): Added javax/swing/plaf/SpinnerUI.java.
! 	* Makefile.in: Regenerated.
  
! 2003-06-25  Michael Koch  <konqueror@gmx.de>
  
! 	* 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,
! 	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:
! 	New versions from classpath.
! 	* javax/swing/plaf/SpinnerUI.java: 
! 	New file from classpath
  
! 2003-06-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/image/ColorModel.java:
! 	New version from classpath.
  
! 2003-06-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/PlainDatagramSocketImpl.java:
! 	Partly merged with classpath, this mainly adds documentation.
  
! 2003-06-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/ObjectInputStream.java
! 	(readClassDescriptor): New method.
! 	(readObject): Moved functionality to readClassDescriptor().
! 	* java/io/ObjectOutputStream.java
! 	(writeClassDescriptor): New method.
! 	(writeObject): Moved functionality to writeClassDescriptor().
  
! 2003-06-25  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/plaf/basic/BasicListUI.java,
! 	javax/swing/plaf/basic/BasicOptionPaneUI.java:
! 	Added missing methods.
  
! 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.
  
! 2003-06-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URL.java:
! 	Renamed "handler" to "ph" in the whole file to match classpaths
! 	version.
! 	* java/net/URLStreamHandler.java:
! 	(equals): Renamed "handler" to "ph".
  
! 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,
! 	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,
! 	javax/swing/plaf/doc-files/ComponentUI-1.dia,
! 	javax/swing/plaf/doc-files/ComponentUI-1.png:
! 	New versions from classpath.
  
! 2003-06-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/Buffer.java
! 	(cap): Made package-private.
! 	(pos): Likewise.
! 	(limit): Likewise.
! 	(mark): Likewise.
  
! 2003-06-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/SocketImpl.java
! 	(shutdownInput): Made it non-abstract method throwing an exception
! 	like in SUNs JRE.
! 	(shutdownOutput): Likewise.
! 	* java/net/SocketInputStream.java,
! 	java/net/SocketOutputStream.java:
! 	New files from classpath.
  
! 2003-06-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Font.java,
! 	java/awt/Window.java,
! 	java/awt/color/ColorSpace.java,
! 	java/awt/datatransfer/StringSelection.java,
! 	java/awt/image/ColorModel.java:
! 	New versions from classpath.
  
! 2003-06-24  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am
! 	(awt_java_source_files): Added new files:
! 	javax/swing/plaf/basic/BasicSplitPaneDivider.java,
! 	javax/swing/plaf/basic/BasicSplitPaneUI.java
! 	* Makefile.in: Regenerated.
  
! 2003-06-24  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/text/JTextComponent.java:
! 	New version from classpath.
  
! 2003-06-24  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/Timer.java,
! 	javax/swing/plaf/ActionMapUIResource.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/basic/BasicBorders.java:
! 	New versions from classpath.
! 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java.
! 	javax/swing/plaf/basic/BasicSplitPaneUI.java:
! 	New file from classpath.
! 	* 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.FieldBorder-1.png,
! 	javax/swing/plaf/doc-files/ComponentUI-1.dia,
! 	javax/swing/plaf/doc-files/ComponentUI-1.png:
! 	New binary files from classpath.
  
! 2003-06-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/LineNumberReader.java
! 	(skip): Dont do line number accounting here as this is already done in
! 	read(), simplified.
  
! 2003-06-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/File.java
! 	(static): Load javaio lib if existing (only in classpath).
! 	(File): Revised documentation to show the correct argument name.
! 	(createTempFile): Partly merged with classpath.
! 	(compareTo): Simplified.
! 	(lastModified): Throw exception if time < 0.
! 	(deleteOnExit): Revised documentation.
  
! 2003-06-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/PlainSocketImpl.java:
! 	Reformatted.
! 	(PlainSocketImpl): Merged class documentaion with classpath.
! 	(in): Moved.
! 	(out): Moved.
! 	(PlainSocketImpl): New empty constructor.
! 	(finalize): Moved.
! 	(setOption): Merged documentation from classpath.
! 	(getOption): Likewise.
! 	(create): Likewise.
! 	(connect): Likewise.
! 	(bind): Likewise.
! 	(listen): Likewise.
! 	(accept): Likewise.
! 	(available): Likewise.
! 	(close): Likewise.
! 	(read): Likewise.
! 	(write): Likewise.
! 	(getInputStream): Made synchronozed to get sure that only one stream
! 	object can be created for this socket, merged documentation from
! 	classpath.
! 	(getOutputStream): Likewise.
  
! 2003-06-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/PlainSocketImpl.java:
! 	Reformatting.
! 	(static): New implicit method.
! 	(read): Made package private.
! 	(write): Likewise.
  
! 2003-06-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/SimpleTimeZone.java:
! 	Removed unneeded import, reformatting.
  
! 2003-06-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/DateFormat.java,
! 	java/text/SimpleDateFormat.java,
! 	java/util/Locale.java:
! 	New versions from classpath.
  
! 2003-06-21  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/SpinnerModel.java:
! 	New file from classpath.
! 	* javax/swing/border/LineBorder.java,
! 	javax/swing/border/SoftBevelBorder.java,
! 	javax/swing/plaf/BorderUIResource.java,
! 	javax/swing/plaf/basic/BasicBorders.java:
! 	New versions from classpath.
! 	* 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:
! 	New binary files from classpath.
  
! 2003-06-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/logging/LogRecord.java,
! 	java/util/logging/Logger.java,
! 	java/util/logging/SocketHandler.java,
! 	java/util/logging/SimpleFormatter.java,
! 	java/util/logging/Formatter.java,
! 	java/util/logging/ErrorManager.java,
! 	java/util/logging/Handler.java,
! 	java/util/logging/FileHandler.java,
! 	java/util/logging/LogManager.java,
! 	java/util/logging/Level.java,
! 	java/util/logging/ConsoleHandler.java,
! 	java/util/logging/StreamHandler.java,
! 	java/util/logging/LoggingPermission.java,
! 	java/util/logging/Filter.java,
! 	java/util/logging/MemoryHandler.java,
! 	java/util/logging/XMLFormatter.java:
! 	New files from classpath.
  
! 2003-06-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/ObjectStreamField.java
! 	(unshared): new member variable.
! 	(ObjectStreamField): New constructor.
! 	(isUnshared): New method.
  
! 2003-06-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URLStreamHandler.java
! 	(hostsEqual): Rewritten.
  
! 2003-06-20  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/MappedByteFileBuffer.java,
! 	gnu/java/nio/natMappedByteFileBuffer.cc:
! 	Removed
! 	* java/nio/MappedByteBufferImpl.java:
! 	New file.
! 	* gnu/java/nio/FileChannelImpl.java:
! 	Use MappedByteBufferImpl instead of MappedByteFileBuffer.
! 	* Makefile.am
! 	(ordinary_java_source_files): Removed
! 	gnu/java/nio/MappedByteFileBuffer.java and added
! 	java/nio/MappedByteBufferImpl.java.
! 	(nat_source_files): Removed gnu/java/nio/natMappedByteFileBuffer.cc
! 	* Makefile.in: Regenerated.
  
! 2003-06-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/DatagramChannelImpl.java
! 	(fd): Removed.
! 	(blocking): New member variable.
! 	(socket): Likewise.
! 	(DatagramChannelImpl): Throws IOException, initialize socket.
! 	(socket):Implemented.
! 	(implCloseSelectableChannel): Throws IOException, implemented.
! 	(implConfigureBlocking): Likewise.
! 	(connect): Likewise.
! 	(disconnect): Likewise.
! 	(isConnected): Likewise.
! 	(write): Likewise.
! 	(read): Likewise.
! 	(receive): Throws IOException.
! 	(send): Likewise.
! 	* gnu/java/nio/SocketChannelImpl.java
! 	(read): Implemented.
! 	(write): Implemented.
  
! 2003-06-19  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JComponent.java,
! 	javax/swing/JInternalFrame.java,
! 	javax/swing/MenuSelectionManager.java,
! 	javax/swing/SwingUtilities.java,
! 	javax/swing/ToggleButtonModel.java:
! 	New versions from classpath.
  
! 2003-06-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/CollationElementIterator.java
! 	(NULLORDER): Initialize with -1 as JDK documentation says.
  
! 2003-06-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/HttpURLConnection.java,
! 	java/net/Inet4Address.java,
! 	java/net/Inet6Address.java,
! 	java/net/SocketImpl.java,
! 	java/net/URLClassLoader.java:
! 	Reworked import statements.
! 	* java/net/InetAddress.java
! 	(getByAddress): Simplified.
! 	* java/net/ServerSocket.java
! 	(ServerSocket): Moved special handling during bind operation to
! 	bind().
! 	(bind): Handle different cases when trying to bind a socket.
! 	* java/net/URLConnection.java
! 	(getHeaderFieldDate): Merged with classpath.
! 	(getHeaderFieldInt): Likewise.
  
! 2003-06-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/zip/InflaterInputStream.java
! 	(InflaterInputStream): Throw NullPointerException if in is null (as
! 	JDK does).
  
! 2003-06-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Font.java
! 	javax/swing/UIManager.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/TitledBorder.java
! 	javax/swing/plaf/BorderUIResource.java
! 	javax/swing/plaf/basic/BasicBorders.java
! 	javax/swing/plaf/basic/BasicButtonUI.java
! 	javax/swing/plaf/basic/BasicCheckBoxUI.java
! 	javax/swing/plaf/basic/BasicGraphicsUtils.java
! 	javax/swing/plaf/basic/BasicLabelUI.java
! 	javax/swing/plaf/basic/BasicRadioButtonUI.java
! 	javax/swing/plaf/basic/BasicToggleButtonUI.java:
! 	New versions from classpath.
! 	* javax/swing/border/SoftBevelBorder.java:
! 	New file from classpath.
! 	* javax/swing/border/doc-files/LineBorder-1.png,
! 	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/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.MarginBorder-1.png,
! 	javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-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:
! 	New binary files from classpath.
! 	* Makefile.am
! 	(awt_java_source_files): Added
! 	javax/swing/border/SoftBevelBorder.java.
! 	* Makefile.in: Regenerated.
  
! 2003-06-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/security/x509/X509Certificate.java
! 	(writeReplace): Merged from classpath.
  
! 2003-06-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/FileChannelImpl.java
! 	(map_address): Made public.
! 	(FileChannelImpl): Merged with classpath.
! 	* gnu/java/nio/natFileChannelImpl.cc
! 	(nio_mmap_file): Commented out unused arguments.
! 	(nio_unmmap_file): Likewise.
! 	(niu_msync): Likewise.
  
! 2003-06-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/image/IndexColorModel.java:
! 	New version from classpath.
  
! 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-18  Matt Kraai  <kraai@alumni.cmu.edu>
  
! 	* java/lang/natVMSecurityManager.cc (getClassContext):
! 	Use maxlen instead of len for loop bound.
  
! 2003-06-18  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/SelectorImpl.java
! 	(register): Use fd with value 0 for now, will be fixed later.
! 	* gnu/java/nio/ServerSocketChannelImpl.java
! 	(fd): Removed.
! 	(local_port): Removed.
! 	(InetSocketAddress): Removed.
! 	(ServerSocketChannelImpl): Just initialize internal socket object.
! 	(implCloseSelectableChannel): Close internal socket object.
! 	(implConfigureBlocking): Added comment.
! 	(accept): Use jaba.net stuff to accept socket.
! 	* gnu/java/nio/SocketChannelImpl.java
! 	(fd): Removed.
! 	(local_port): Removed.
! 	(InetSocketAddress): Removed.
! 	(SocketCreate): Removed.
! 	(SocketConnect): Removed.
! 	(SocketBind): Removed.
! 	(SocketListen): Removed.
! 	(SocketAvailable): Removed.
! 	(SocketClose): Removed.
! 	(SocketRead): Removed.
! 	(SocketWrite): Removed.
! 	(SocketChannelImpl): Just initialize internal socket object.
! 	(implCloseSelectableChannel): Close internal socket object.
! 	(implConfigureBlocking): Fixed implementation, added comment.
! 	(connect): Use internal socket object to connect.
! 	(socket): No need for sanity checks.
! 	(read): Comment out some stuff, this will be reimplemented in the next
! 	commit.
! 	(write): Likewise.
! 	* gnu/java/nio/natFileChannelImpl.cc
! 	(nio_mmap_file): Line wrapped.
! 	* gnu/java/nio/natSocketChannelImpl.cc: Removed.
! 	* Makefile.am
! 	(nat_source_files): Removeded gnu/java/nio/natSocketChannelImpl.cc.
  	* Makefile.in: Regenerated.
  
! 2003-06-18  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/Locale.java
! 	(equals): Merged from classpath.
  
! 2003-06-18  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java:
! 	Reformatted to better match classpath's version.
! 	* java/net/URL.java
! 	(equals): Simplified.
! 	* java/net/URLConnection.java
! 	(setDoInput): Revised documentation.
! 	(getDefaultUseCaches): Likewise.
! 	(setRequestProperty): Added @since tag.
  
! 2003-06-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetSocketAddress.java
! 	(InetSocketAddress): Use wildcard address if addr is null.
! 	(InetSocketAddress): Dont duplicate implementation.
! 	(InetSocketAddress): Throw exception when hostname is null.
! 	* java/net/Socket.java:
! 	Reworked imports.
! 	(Socket): Throw exception when raddr is null, handle case when laddr
! 	is null.
  
! 2003-06-17  Michael Koch  <konqueror@gmx.de>
  
  	* java/nio/DirectByteBufferImpl.java
! 	(address): Made package private.
! 	(DirectByteBufferImpl): New constructor.
! 	* java/nio/natDirectByteBufferImpl.cc
! 	(allocateImpl): Moved to java.nio namespace, implemented.
! 	(freeImpl): Likewise.
! 	(getImpl): Likewise.
! 	(putImpl): Likewise.
! 	* jni.cc
! 	(_Jv_JNI_NewDirectByteBuffer): Implemented.
! 	(_Jv_JNI_GetDirectBufferAddress): Implemented.
! 	(_Jv_JNI_GetDirectBufferCapacity): Implemented.
  
! 2003-06-17  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
  
! 	* include/powerpc-signal.h: New File.
! 	* configure.in: Use it.
! 	* configure: Regenerated.
  
! 2003-06-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/Locale.java
! 	(getDisplayLanguage): Made it final.
! 	(getDisplayCountry): Likewise.
! 	(getDisplayVariant): Likewise.
! 	(getDisplayName): Likewise.
  
! 2003-06-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/PropertyResourceBundle.java:
! 	Removed unneeded import.
  
! 2003-06-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/prefs/AbstractPreferences.java,
! 	java/util/prefs/PreferencesFactory.java:
! 	Reworked imports, removed unused imports.
! 	* java/util/prefs/Preferences.java
! 	(systemNodeForPackage): Method takes a Class not an Object.
! 	(userNodeForPackage): Likewise.
! 	(nodeForPackage): Likewise.
  
! 2003-06-17  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/security/x509/X509Certificate.java:
! 	Explicitely import used classes.
  
! 2003-06-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/zip/ZipEntry.java,
! 	java/util/zip/ZipFile.java,
! 	java/util/zip/ZipInputStream.java,
! 	java/util/zip/ZipOutputStream.java:
! 	Reworked imports, only import used classes.
  
! 2003-06-17  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/lang/ArrayHelper.java,
! 	gnu/java/lang/ClassHelper.java:
! 	Reformatted to match classpath's versions.
  
! 2003-06-14  Michael Koch  <konqueror@gmx.de>
  
- 	* gnu/java/nio/FileChannelImpl.java
-         (map_address): Removed incorrect comment.        
- 	* gnu/java/nio/SelectorImpl.java
-         (register): Remove code duplication and code for file channel handling.        
- 	* gnu/java/nio/ServerSocketChannelImpl.java
-         (serverSocket): Renamed from sock_object.
-         (ServerSocketChannel): Initialize serverSocket.
-         (socket): Return serverSocket.
  	* gnu/java/nio/SocketChannelImpl.java
!         (socket): Renamed from sock_object.
!         (isConnectionPenging): Simplified.
!         (socket): Return socket.
! 2003-06-14  Michael Koch  <konqueror@gmx.de>
  
! 	* java/security/BasicPermission.java:
! 	New version from classpath.
  
! 2003-06-14  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/naming/directory/Attribute.java:
! 	New version from classpath.
  
! 2003-06-14  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/BufferedReader.java,
! 	java/io/FileOutputStream.java:
! 	New versions from classpath.
  
! 2003-06-12  Andrew Haley  <aph@redhat.com>
  
! 	* prims.cc (catch_segv): Create exception in handler.
! 	(catch_fpe): Likewise.	
! 	(_Jv_divI, _Jv_remI, _Jv_divJ, _Jv_remJ): Likewise.
! 	(_Jv_ThrowSignal): Remove.
  
! 	* include/x86_64-signal.h (INIT_SEGV): Delete reference to nullp.
! 	* include/default-signal.h (INIT_SEGV, INIT_FPE): Delete reference
! 	to nullp and arithexception.
! 	* include/dwarf2-signal.h (INIT_SEGV, INIT_FPE): Likewise.
! 	* include/i386-signal.h (INIT_SEGV, INIT_FPE): Likewise.
! 	* include/s390-signal.h (INIT_SEGV, INIT_FPE): Likewise.
! 	* include/sparc-signal.h (INIT_SEGV, INIT_FPE): Likewise.
! 	* include/win32-signal.h (INIT_SEGV, INIT_FPE): Likewise.
  
! 2003-06-11  Andrew Haley  <aph@redhat.com>
  
! 	* jni.cc (_Jv_JNI_check_types): New.
! 	(_Jv_JNI_SetPrimgitiveArrayRegion): Check array type.
! 	(_Jv_JNI_GetPrimitiveArrayRegion): Ditto.
! 	(_Jv_JNI_GetPrimitiveArrayElements): Ditto.
! 	(_Jv_JNI_ReleasePrimitiveArrayElements): Ditto.
! 	
! 	* java/lang/natVMSecurityManager.cc (getClassContext): Fix
! 	infinite loop.
  
! 2003-06-11  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ClassLoader.java (loadClass): Not deprecated.
! 	* java/io/PrintStream.java: Not deprecated.
  
- 2003-06-11  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* gnu/awt/j2d/IntegerGraphicsState.java (drawOval): implemented.
! 	(fillOval): implemented
! 	* gnu/awt/xlib/XGraphics.java (drawArc): implemented.
! 	(fillArc): implemented.
! 	* gnu/gcj/xlib/GC.java (drawArc): added native method.
! 	(fillArc): added native method.
! 	* gnu/gcj/xlib/natGC.cc (drawArc): added native method.
! 	(fillArc): added native method.
  
! 2003-06-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/im/InputSubset.java:
! 	New version from classpath.
  
! 2003-06-11  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/AbstractAction.java,
! 	javax/swing/AbstractButton.java,
! 	javax/swing/AbstractCellEditor.java,
! 	javax/swing/AbstractListModel.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/JButton.java,
! 	javax/swing/JCheckBox.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/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/JPasswordField.java,
! 	javax/swing/JPopupMenu.java,
! 	javax/swing/JProgressBar.java,
! 	javax/swing/JRadioButton.java,
! 	javax/swing/JRadioButtonMenuItem.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/JToggleButton.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/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/UIDefaults.java,
! 	javax/swing/UIManager.java,
! 	javax/swing/border/AbstractBorder.java,
! 	javax/swing/border/CompoundBorder.java,
! 	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/SwingPropertyChangeSupport.java,
! 	javax/swing/event/TableModelEvent.java,
! 	javax/swing/event/TreeWillExpandListener.java,
! 	javax/swing/event/UndoableEditEvent.java,
! 	javax/swing/filechooser/FileFilter.java,
! 	javax/swing/filechooser/FileSystemView.java,
! 	javax/swing/filechooser/FileView.java,
! 	javax/swing/plaf/BorderUIResource.java,
! 	javax/swing/plaf/basic/BasicDefaults.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:
! 	New versions from classpath.
! 	* javax/swing/table/JTableHeader.java:
! 	New file from classpath.
! 	* Makefile.am
! 	(java_awt_sources): Added javax/swing/table/JTableHeader.java.
  	* Makefile.in: Regenerated.
  
! 2003-06-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/MappedByteBuffer.java,
! 	java/nio/channels/Channels.java,
! 	java/nio/channels/ServerSocketChannel.java,
! 	java/nio/channels/spi/AbstractSelector.java:
! 	Removed unneeded imports.
  
! 2003-06-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java:
! 	Partly merged with classpath.
  
! 2003-06-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Frame.java,
! 	java/awt/Graphics.java,
! 	java/awt/Menu.java,
! 	java/awt/Robot.java,
! 	java/awt/image/ColorModel.java:
! 	New versions from classpath.
  
! 2003-06-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/PrintStream.java:
! 	Merged version from classpath.
! 	(close): Removed sychronized keyword. This class is not garantied to
! 	be thread-safe.
! 	(write): Likewise.
  
! 2003-06-09  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/gcj/xlib/natFont.cc (getAscent): Correctly access "ascent"
! 	field.
! 	(getDescent): Likewise, for "descent".
  
! 2003-06-09  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* gnu/gcj/xlib/natFont.cc (getMaxAscent): adjusted return value.
! 	(getMaxDescent): adjusted return value.
! 	(getAscent): modified to use metrics for 'O'.
! 	(getDescent): modified to use metrics for 'y'.
  
! 2003-06-08  Anthony Green  <green@redhat.com>
  
! 	* java/net/URLStreamHandler.java (sameFile): Fix port value
! 	comparison.
! 	* java/net/URL.java (handler): Make package private.
! 	* gnu/gcj/protocol/http/Handler.java (getDefaultPort): New method.
  
! 2003-06-07  Tom Tromey  <tromey@redhat.com>
  
! 	For PR libgcj/11085:
! 	* 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-08  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/Socket.java
! 	(Socket): Dont initialize inputShutdown and outputShutdown twice,
! 	call bind() and connect() to actually do the bind and connect tasks.
! 	(bind): Connect to canonical address if bindpoint is null, create
! 	socket and bind it to bindpoint.
! 	(connect): Check for exceptions.
  
! 2003-06-08  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(DatagramSocket): No need to set SO_REUSEADDRESS here. This belongs
! 	into the Multicast constructors.
! 	* java/net/DatagramSocketImpl.java
! 	(getOption): Removed.
! 	(setOption): Removed.
! 	* java/net/MulticastSocket.java
! 	(MulticastSocket): Call setReuseAddress (true).
! 	* java/net/SocketImpl.java
! 	(getOption): Removed.
! 	(setOption): Removed.
  
! 2003-06-07	Jeff Sturm	<jsturm@one-point.com>
  
! 	PR libgcj/10886:
! 	* gnu/java/rmi/server/UnicastRemoteCall.java (returnValue):
! 	Test for empty vector.
  
! 2003-06-06  Mark Wielaard  <mark@klomp.org>
  
! 	* java/security/Security.java (secprops): Initialize.
! 	(loadProviders): Return boolean.
! 	(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.
! 	* gnu/gcj/convert/Output_SJIS.java (havePendingBytes): Likewise.
! 	* gnu/gcj/convert/Output_EUCJIS.java (havePendingBytes): Likewise.
! 	* gnu/gcj/convert/Output_UTF8.java (havePendingBytes): Likewise.
! 	(write): Always decrease avail when count is increased.
! 	* 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().
! 	(writeChars(String,int,int)): Likewise.
! 	* java/io/OutputStreamWriter.java (writeChars(char[], int, int)):
! 	Check converter.havePendingBytes() and flush buffer when stalled.
  
! 2003-06-07  Michael Koch  <konqueror@gmx.de>
  
! 	* include/posix.h
! 	(O_DSYNC): Define O_DSYNC on platforms not
! 	supporting O_FSYNC (newlib).
  
! 2003-06-06  Mark Wielaard  <mark@klomp.org>
  
! 	* java/awt/Toolkit.java (getDefaultToolkit): Add exception cause to
! 	AWTError.
  
! 2003-06-06  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
! 	More compile fixes from my stupid work yesterday.
  
! 2003-06-05  Matt Kraai  <kraai@alumni.cmu.edu>
  
! 	* 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.
! 	(O_DSYNC): Likewise.
! 	* java/io/natFileDescriptorPosix.cc (open): Revert last patch.
  
! 2003-06-05  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/plaf/BorderUIResource.java,
! 	javax/swing/plaf/basic/BasicDefaults.java,
! 	javax/swing/plaf/basic/BasicOptionPaneUI.java:
! 	More compile fixes for latest Border commit. I should not commit
! 	something in this heat here ...
  
! 2003-06-05  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/border/BevelBorder.java
! 	(BevelBorder): Removed.
! 	* javax/swing/border/EmptyBorder.java:
! 	Reformatted.
! 	(EmptyBorder): Removed.
! 	(getBorderInsets): Dont use l, r, t and b.
! 	* javax/swing/border/EtchedBorder.java
! 	(EtchedBorder): Removed.
! 	* javax/swing/border/LineBorder.java
! 	(LineBorder): Removed.
! 	* javax/swing/border/MatteBorder.java
! 	(MatteBorder): Removed.
! 	* javax/swing/border/TitledBorder.java
! 	(defaultBorder): Use other default for now.
! 	(defaultFont): Likewise.
! 	(defaultColor): Likewise.
  
! 2003-06-05  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/border/Border.java:
! 	New version from classpath.
  
! 2003-06-05  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/border/AbstractBorder.java,
! 	javax/swing/border/BevelBorder.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/TitledBorder.java:
! 	New versions from Classpath.
  
! 2003-06-05  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,
! 	java/awt/print/PageFormat.java,
! 	java/awt/print/PrinterJob.java:
! 	New versions from Classpath.
  
! 2003-06-05  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* java/text/SimpleDateFormat.java (SimpleDateFormat): Added
! 	numberFormat.setParseIntegerOnly(true).
  
! 2003-06-05  Bert Deknuydt  <Bert.Deknuydt@esat.kuleuven.ac.be>
  
! 	* include/posix-threads.h: Include <machine/pal.h> on OSF.
  
! 2003-06-03  Andrew Haley  <aph@redhat.com>
  
!         * include/x86_64-signal.h (MAKE_THROW_FRAME): Mark sigcontext on
!         stack volatile to prevent optimization from removing it.
  
! 2003-05-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/zip/Deflater.java
! 	(FILTERED): Merged documentation from classpath.
! 	* java/util/zip/DeflaterOutputStream.java
! 	(DeflaterOutputStream): Merged documentation and argument validity
! 	check from classpath.
! 	(deflate): Merged documentation from classpath.
! 	(finish): Likewise.
! 	* java/util/zip/Inflater.java
! 	(Inflater): Merged class documentation from classpath.
! 	(zstream): Reordered.
! 	(is_finished): Reordered.
! 	(dict_needed): Reordered.
! 	(Inflater): Reordered, merged documentation from classpath.
! 	(end): Likewise.
! 	(finalize): Merged documentation from classpath.
! 	(finished): Likewise.
! 	(getAdler): Likewise.
! 	(getRemaining): Likewise.
! 	(getTotalIn): Likewise.
! 	(getTotalOut): Likewise.
! 	(inflate): Likewise.
! 	(needsDictionary): Likewise.
! 	(needsInput): Likewise.
! 	(reset): Likewise.
! 	(setDictionary): Likewise.
! 	(setInput): Likewise.
  
! 2003-05-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URLConnection.java
! 	(getHeaderFieldInt): Merged with classpath.
  
! 2003-05-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/PrintStream.java
! 	(PrintStream): Reformatted.
! 	(PrintStream): New method, merged from classpath.
! 	(write): Reformatted.
  
! 2003-05-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/lang/System.java:
! 	Explicitely import needed classes.
  
! 2003-05-26  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/NetPermission.java,
! 	java/net/NetworkInterface.java,
! 	java/net/PasswordAuthentication.java,
! 	java/net/SocketPermission.java:
! 	New versions from classpath.
  
! 2003-05-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/PushbackInputStream.java,
! 	java/net/Authenticator.java,
! 	java/net/ContentHandler.java,
! 	java/net/ContentHandlerFactory.java,
! 	java/net/DatagramSocket.java,
! 	java/net/DatagramSocketImpl.java,
! 	java/net/DatagramSocketImplFactory.java,
! 	java/net/FileNameMap.java,
! 	java/net/SocketImplFactory.java,
! 	java/net/SocketOptions.java,
! 	java/net/URLStreamHandlerFactory.java:
! 	Merged new versions from classpath.
  
! 2003-05-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Checkbox.java,
! 	java/awt/Dialog.java,
! 	java/awt/Font.java,
! 	java/awt/Frame.java,
! 	java/awt/ScrollPaneAdjustable.java,
! 	java/awt/Scrollbar.java,
! 	java/awt/Window.java:
! 	New versions from classpath.
  
! 2003-05-22	Jeff Sturm	<jsturm@one-point.com>
  
! 	PR libgcj/10838:
! 	* java/io/ObjectInputStream (enableResolveObject):
! 	Fixed spelling of permission name.
  
! 2003-05-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/DataInputStream.java
! 	(convertFromUTF): Merged comment from classpath.
! 	* java/io/PrintStream.java
! 	(error_occured): Renamed from error, merged comment from classpath.
! 	(PrintStream): No need to initialized error.
! 	(checkError): Replace error with error_occurred.
! 	(setError): Likewise.
  
! 2003-05-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/DataInputStream.java:
! 	Reformatted, Replaced < and & with html entitites in documentation.
! 	* java/io/File.java:
! 	Reformatted.
! 	* java/io/PrintWriter.java:
! 	Moved class documentation.
  
! 2003-05-20  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java,
! 	gnu/java/nio/CharBufferImpl.java,
! 	gnu/java/nio/CharViewBufferImpl.java,
! 	gnu/java/nio/DirectByteBufferImpl.java,
! 	gnu/java/nio/DoubleBufferImpl.java,
! 	gnu/java/nio/DoubleViewBufferImpl.java,
! 	gnu/java/nio/FloatBufferImpl.java,
! 	gnu/java/nio/FloatViewBufferImpl.java,
! 	gnu/java/nio/IntBufferImpl.java,
! 	gnu/java/nio/IntViewBufferImpl.java,
! 	gnu/java/nio/LongBufferImpl.java,
! 	gnu/java/nio/LongViewBufferImpl.java,
! 	gnu/java/nio/natDirectByteBufferImpl.cc,
! 	gnu/java/nio/ShortBufferImpl.java,
! 	gnu/java/nio/ShortViewBufferImpl.java:
! 	Moved files to java/nio.
! 	* gnu/java/nio/SocketChannelImpl.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:
! 	Dont import anything.
! 	* java/nio/ByteBufferImpl.java,
! 	java/nio/CharBufferImpl.java,
! 	java/nio/CharViewBufferImpl.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/natDirectByteBufferImpl.cc,
! 	java/nio/ShortBufferImpl.java,
! 	java/nio/ShortViewBufferImpl.java:
! 	Moved from gnu/java/nio.
! 	* Makefile.am
! 	(ordinary_java_source_files): Moved files from gnu/java/nio to
! 	java/nio.
! 	(nat_source_files): Moved natDirectByteBufferImpl.cc from gnu/java/nio
! 	to java/nio.
  	* Makefile.in: Regenerated.
  
! 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>
  
! 	* java/text/CollationKey.java:
! 	Merged copyright and dat from classpath.
! 	* java/text/RuleBasedCollator.java:
! 	Merged class documentation from classpath.
  
! 2003-05-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/CharBuffer.java
! 	(toString): Compile fix.
  
! 2003-05-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java
! 	(putLong): Fixed conversion to bytes.
! 	(putDouble): Fixed conversion to bytes.
! 	* gnu/java/nio/DirectByteBufferImpl.java
! 	(putLong): Fixed conversion to bytes.
! 	(putDouble): Fixed conversion to bytes.
! 	* gnu/java/nio/FileLockImpl.java
! 	(isValid): Reformatted.
! 	* java/nio/Buffer.java
! 	(Buffer): Fixed off-by-one bug in handling mark.
! 	* java/nio/ByteBuffer.java:
! 	Added newline.
! 	* java/nio/CharBuffer.java
! 	(toString): Don't use relative get to get string data.
  
! 2003-05-16  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/natFileDescriptorPosix.cc
! 	(open): Commented out the O_SYNC and O_DSYNC usage until its better
! 	tested.
  
! 2003-05-14  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/FileLockImpl.java
! 	(released): New member variable.
! 	(FileLockImpl): Initialize released.
! 	(releaseImpl): New native method.
! 	(release): Implemented.
! 	* gnu/java/nio/SelectorImpl.java: Reformatted.
! 	* gnu/java/nio/SelectionKeyImpl.java: Reformatted.
! 	* gnu/java/nio/ServerSocketChannelImpl.java: Reformatted.
! 	(accept): Throws IOException.
! 	* gnu/java/nio/SocketChannelImpl.java: Reformatted.
! 	(implConfigureBlocking): Throws IOException.
! 	(connect): Likewise.
! 	(read): Likewise.
! 	(write): Likewise.
! 	* gnu/java/nio/natFileLockImpl.cc: New file.
! 	* java/nio/channels/FileLock.java: Reformatted.
! 	* Makefile.am:
! 	(ordinary_java_source_files): Added gnu/java/nio/FileLockImpl.java.
! 	(nat_source_files): Added gnu/java/nio/natFileLockImpl.cc.
! 	* Makefile.in: Regenerated.
  
! 2003-05-13  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/CharViewBufferImpl.java
! 	(CharViewBufferImpl): Fixed super constructor call, initialize offset.
! 	(get): Shift bits to the right direction.
! 	(put): Likewise.
! 	* gnu/java/nio/DoubleViewBufferImpl.java
! 	(DoubleViewBufferImpl): Fixed super constructor call, initialize offset.
! 	(get): Shift bits to the right direction.
! 	(put): Likewise.
! 	* gnu/java/nio/FloatViewBufferImpl.java
! 	(FloatViewBufferImpl): Fixed super constructor call, initialize offset.
! 	(get): Shift bits to the right direction.
! 	(put): Likewise.
! 	* gnu/java/nio/IntViewBufferImpl.java
! 	(IntViewBufferImpl): Fixed super constructor call, initialize offset.
! 	(get): Shift bits to the right direction.
! 	(put): Likewise.
! 	* gnu/java/nio/LongViewBufferImpl.java
! 	(LongViewBufferImpl): Fixed super constructor call, initialize offset.
! 	(get): Shift bits to the right direction.
! 	(put): Likewise.
! 	* gnu/java/nio/ShortViewBufferImpl.java
! 	(ShortViewBufferImpl): Fixed super constructor call, initialize offset.
! 	(get): Shift bits to the right direction.
! 	(put): Likewise.
  
! 2003-05-13  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/natDirectByteBufferImpl.cc
! 	(allocateImpl): jlong -> RawData*.
! 	(freeImpl): Likewise.
  
! 2003-05-13  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/channels/FileChannel.java
! 	(MapMode.m): Made it package-private to match JDK 1.4.
! 	* java/nio/charset/Charset.java
! 	(decode): Made it final to match JDK 1.4.
  
! 2003-05-13  Michael Koch  <konqueror@gmx.de>
  
!        * java/io/FileDescriptor.java
!        (SYNC): New constant.
!        (DSYNC): Likewise.
!        (getLength): Renamed from lenght() to match classpath's
!        FileDescriptor.java.
!        * java/io/RandomAccessFile.java
!        (RandomAccessFile): Removed unneeded mode check, implemented mode
!        "rws" and "rwd", merged documentation from classpath.
!        (setLength): Reformatted.
!        (length): Use new getLength() of FileDescriptor.
!        * java/io/natFileDescriptorEcos.cc
!        (getLength): Renamed from length().
!        * java/io/natFileDescriptorPosix.cc
!        (open): Implemented support for SYNC and DSYNC.
!        (seek): Use getLength() instead of length().
!        (getLength): Renamed from length().
!        * java/io/natFileDescriptorWin32.cc
!        (getLength): Renamed from length().
!        (seek): Use getLength() instead of length().
!        (available): Likewise.
!        * gnu/java/nio/natFileChannelImpl.cc
!        (size): Use getLength() instead of length().
  
! 2003-05-13  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java
! 	(ByteBufferImpl): All constructors revised.
! 	(slice): Reimplemented.
! 	(duplicate): Reimplemented.
! 	(asReadOnlyBuffer): Reimplemented.
! 	* java/nio/ByteBuffer.java:
! 	Reformatted.
! 	(array_offset): Renamed from "offset" to match all other buffer
! 	classes.
! 	(ByteBuffer): All constructors revised.
! 	(allocateDirect): Implemented.
! 	(allocate): New implementation, documentation reworked.
! 	(wrap): Likewise.
! 	(get): Documentation reworked.
! 	(put): New implementation, documentation reworked.
! 	(hasArray): Documentation reworked.
! 	(arrayOffset): Likewise.
! 	(hashCode): Likewise.
! 	(equals): Likewise.
! 	(compareTo): Likewise.
! 	(order): Likewise.
! 	(compact): Likewise.
! 	(isDirect): Likewise.
! 	(slice): Likewise.
! 	(duplicate): Likewise.
! 	(asReadOnlyBuffer): Likewise.
! 	* Makefile.am
! 	(ordinary_java_source_files):
! 	Added gnu/java/nio/DirectByteBufferImpl.java.
! 	(nat_source_files):
! 	Added gnu/java/nio/natDirectByteBufferImpl.cc.
! 	* Makefile.in: Regenerated.
  
! 2003-05-12  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java: Reformatted.
! 	(nio_get_*): Removed.
! 	(nio_put_*): Removed.
! 	(as*Buffer): Implemented.
! 	(compact): Implemented.
! 	(get): Documentation added.
! 	(put): Documentation added.
! 	(get*): Newly implemented.
! 	(put*): Newly implemented.
! 	* gnu/java/nio/CharBufferImpl.java: Reformatted.
! 	(CharBufferImpl): Revised.
! 	(slice): New implementation.
! 	(duplicate): New implementation.
! 	(compact): New implementation.
! 	(asReadOnlyBuffer): New implementation.
! 	(get): Documentation revised.
! 	(order): Return native byte order.
! 	* gnu/java/nio/DirectByteBufferImpl.java
! 	(allocateDirect): objects can be null not 0.
! 	* gnu/java/nio/DoubleBufferImpl.java: Reformatted.
! 	(DoubleBufferImpl): Revised.
! 	(slice): New implementation.
! 	(duplicate): New implementation.
! 	(compact): New implementation.
! 	(asReadOnlyBuffer): New implementation.
! 	(get): Documentation revised.
! 	(order): Return native byte order.
! 	* gnu/java/nio/FloatBufferImpl.java: Reformatted.
! 	(FloatBufferImpl): Revised.
! 	(slice): New implementation.
! 	(duplicate): New implementation.
! 	(compact): New implementation.
! 	(asReadOnlyBuffer): New implementation.
! 	(get): Documentation revised.
! 	(order): Return native byte order.
! 	* gnu/java/nio/IntBufferImpl.java: Reformatted.
! 	(IntBufferImpl): Revised.
! 	(slice): New implementation.
! 	(duplicate): New implementation.
! 	(compact): New implementation.
! 	(asReadOnlyBuffer): New implementation.
! 	(get): Documentation revised.
! 	(order): Return native byte order.
! 	* gnu/java/nio/LongBufferImpl.java: Reformatted.
! 	(LongBufferImpl): Revised.
! 	(slice): New implementation.
! 	(duplicate): New implementation.
! 	(compact): New implementation.
! 	(asReadOnlyBuffer): New implementation.
! 	(get): Documentation revised.
! 	(order): Return native byte order.
! 	* gnu/java/nio/ShortBufferImpl.java: Reformatted.
! 	(ShortBufferImpl): Revised.
! 	(slice): New implementation.
! 	(duplicate): New implementation.
! 	(compact): New implementation.
! 	(asReadOnlyBuffer): New implementation.
! 	(get): Documentation revised.
! 	(order): Return native byte order.
! 	* java/nio/CharBuffer.java: Reformatted, much documentation rewritten.
! 	(CharBuffer): Revised.
! 	(order): Removed.
! 	* java/nio/DoubleBuffer.java: Reformatted, much documentation rewritten.
! 	(DoubleBuffer): Revised.
! 	(allocateDirect): Removed.
! 	(order): Removed.
! 	* java/nio/FloatBuffer.java: Reformatted, much documentation rewritten.
! 	(FloatBuffer): Revised.
! 	(allocateDirect): Removed.
! 	(order): Removed.
! 	* java/nio/IntBuffer.java: Reformatted, much documentation rewritten.
! 	(IntBuffer): Revised.
! 	(allocateDirect): Removed.
! 	(order): Removed.
! 	* java/nio/LongBuffer.java: Reformatted, much documentation rewritten.
! 	(LongBuffer): Revised.
! 	(allocateDirect): Removed.
! 	(order): Removed.
! 	* java/nio/ShortBuffer.java: Reformatted, much documentation rewritten.
! 	(ShortBuffer): Revised.
! 	(allocateDirect): Removed.
! 	(order): Removed.
! 	* gnu/java/nio/natByteBufferImpl.cc: Removed.
! 	* gnu/java/nio/natCharBufferImpl.cc: Removed.
! 	* Makefile.am
! 	(ordinary_java_source_files): Added the following files:
! 	gnu/java/nio/CharViewBufferImpl.java,
! 	gnu/java/nio/DoubleViewBufferImpl.java,
! 	gnu/java/nio/FloatViewBufferImpl.java,
! 	gnu/java/nio/IntViewBufferImpl.java,
! 	gnu/java/nio/LongViewBufferImpl.java,
! 	gnu/java/nio/ShortViewBufferImpl.java
! 	(nat_source_files): Removed the following files:
! 	gnu/java/nio/natByteBufferImpl.cc,
! 	gnu/java/nio/natCharBufferImpl.cc
! 	* Makefile.in: Regenerated.
  
! 2003-05-12  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/CharViewBufferImpl.java,
! 	gnu/java/nio/DirectByteBufferImpl.java,
! 	gnu/java/nio/DoubleViewBufferImpl.java,
! 	gnu/java/nio/FloatViewBufferImpl.java,
! 	gnu/java/nio/IntViewBufferImpl.java,
! 	gnu/java/nio/LongViewBufferImpl.java,
! 	gnu/java/nio/ShortViewBufferImpl.java,
! 	gnu/java/nio/natDirectByteBufferImpl.cc:
! 	New files, not yet to be compiled.
  
! 2003-05-10  Michael Koch  <konqueror@gmx.de>
  
! 	* 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:
! 	New versions from classpath. This adds copyrights to all files and
! 	some serialVersionUIDs.
  
! 2003-05-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/CharBuffer.java
! 	(offset): Make it package-private.
! 	(backing_buffer): Likewise.
! 	* java/nio/DoubleBuffer.java
! 	(offset): Make it package-private.
! 	(backing_buffer): Likewise.
! 	(put): Reformatted.
! 	* java/nio/FloatBuffer.java
! 	(offset): Make it package-private.
! 	(backing_buffer): Likewise.
! 	* java/nio/IntBuffer.java
! 	(offset): Make it package-private.
! 	(backing_buffer): Likewise.
! 	* java/nio/LongBuffer.java
! 	(offset): Make it package-private.
! 	(backing_buffer): Likewise.
! 	* java/nio/ShortBuffer.java
! 	(offset): Make it package-private.
! 	(backing_buffer): Likewise.
  
! 2003-05-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/CharBuffer.java
! 	(put): Fixed precondtion check.
! 	(toString): Make it work without backing array.
! 	(put): Skip one level of method calling.
  
! 2003-05-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/security/Identity.java,
! 	java/security/IdentityScope.java,
! 	java/security/Key.java,
! 	java/security/KeyPair.java,
! 	java/security/PrivateKey.java,
! 	java/security/Provider.java,
! 	java/security/PublicKey.java,
! 	java/security/SecureRandom.java,
! 	java/security/SecureRandomSpi.java,
! 	java/security/SignedObject.java,
! 	java/security/Signer.java,
! 	java/security/cert/Certificate.java,
! 	java/security/cert/PKIXCertPathBuilderResult.java,
! 	java/security/cert/X509Certificate.java:
! 	New versions from classpath.
  
! 2003-05-09  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (nat_source_files): Removed old files.
! 	* gnu/java/nio/natDoubleBufferImpl.cc: Removed.
! 	* gnu/java/nio/natFloatBufferImpl.cc: Removed.
! 	* gnu/java/nio/natIntBufferImpl.cc: Removed.
! 	* gnu/java/nio/natLongBufferImpl.cc: Removed.
! 	* gnu/java/nio/natShortBufferImpl.cc: Removed.
  
! 2003-05-09  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java
! 	(nio_cast): Removed.
! 	(ByteBufferImpl): Removed.
! 	(nio_get_Byte): Removed.
! 	(nio_put_Byte): Removed.
! 	(asByteBuffer): Removed.
! 	(asCharBuffer): Removed implementation and throw exception.
! 	(asShortBuffer): Likewise.
! 	(asIntBuffer): Likewise.
! 	(asLongBuffer): Likewise.
! 	(asFloatBuffer): Likewise.
! 	(asDoubleBuffer): Likewise.
! 	* gnu/java/nio/CharBufferImpl.java
! 	(CharBufferImpl): Removed.
! 	(nio_get_Byte): Removed.
! 	(nio_put_Byte): Removed.
! 	(asByteBuffer): Removed.
! 	* gnu/java/nio/DoubleBufferImpl.java
! 	(DoubleBufferImpl): Removed.
! 	(nio_get_Byte): Removed.
! 	(nio_put_Byte): Removed.
! 	(asByteBuffer): Removed.
! 	* gnu/java/nio/FloatBufferImpl.java
! 	(FloatBufferImpl): Removed.
! 	(nio_get_Byte): Removed.
! 	(nio_put_Byte): Removed.
! 	(asByteBuffer): Removed.
! 	* gnu/java/nio/IntBufferImpl.java
! 	(IntBufferImpl): Removed.
! 	(nio_get_Byte): Removed.
! 	(nio_put_Byte): Removed.
! 	(asByteBuffer): Removed.
! 	* gnu/java/nio/LongBufferImpl.java
! 	(LongBufferImpl): Removed.
! 	(nio_get_Byte): Removed.
! 	(nio_put_Byte): Removed.
! 	(asByteBuffer): Removed.
! 	* gnu/java/nio/ShortBufferImpl.java
! 	(ShortBufferImpl): Removed.
! 	(nio_get_Byte): Removed.
! 	(nio_put_Byte): Removed.
! 	(asByteBuffer): Removed.
! 	* gnu/java/nio/natByteBufferImpl.cc
! 	(nio_cast): Removed.
! 	(nio_get_Byte): Removed.
! 	(nio_put_Byte): Removed.
! 	* gnu/java/nio/natCharBufferImpl.cc
! 	(nio_get_Byte): Removed.
! 	(nio_put_Byte): Removed.
  
! 2003-05-09  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/JarURLConnection.java
! 	(getJarEntry): Merged documentation from classpath.
! 	(getJarFile): Likewise.
! 	(getMainAttributes): Likewise.
! 	(getAttributes): Likewise.
! 	(getManifest): Likewise.
! 	(getCertificates): Reformatted.
! 	* java/net/URLConnection.java:
! 	Little classpath merge.
  
! 2003-05-09  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/DataOutputStream.java
! 	(writeShort): Made it synchronized.
! 	(writeChar): Likewise.
! 	(writeInt): Likewise.
! 	(writeLong): Liekwise.
! 	(writeUTF): Made it synchronized, renamed argument to match classpath.
! 	* java/io/InputStreamReader.java
! 	(converter): Added documentation.
! 	(read): Merged documentation from classpath.
! 	* java/io/OutputStreamWriter.java
! 	(OutputStreamWriter): Merged documentation from classpath.
! 	(close): Reformatted.
! 	(getEncoding): Likewise.
! 	(flush): Likewise.
! 	(write): Merged documentation from classpath, reformatted.
  
! 2003-05-08  Tom Tromey  <tromey@redhat.com>
  
! 	* configure.host <powerpc64*-*>: Set with_libffi_default and
! 	libgcj_interpreter to "yes".
  
! 2003-05-08  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* gnu/gcj/xlib/natGC.cc (drawString): Removed obsolete code.
! 	
! 2003-05-06  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc: Reverted previous patch.
  
! 2003-05-06  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/DataOutputStream.java
! 	(write): Renamed argument to "value", merged documentation from
! 	classpath.
! 	(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
! 	(performDelete): Added documentation.
! 	(performList): Likewise.
! 	(performMkdir): Likewise.
! 	(performSetReadOnly): Likewise.
! 	(performRenameTo): Likewise.
! 	(performSetLastModified): Likewise.
! 	(delete): Made it sychronized.
! 	(renameTo): Made it sychronized.
! 	(equals): Reformatted.
! 	(isHidden): Likewise.
! 	(listFiles): Likewise.
! 	(setReadOnly): Likewise.
! 	(listRoots): Likewise.
! 	(setLastModified): Likewise.
! 	(checkRead): Likewise.
! 	(checkWrite): Likewise.
! 	* java/io/FileInputStream.java
! 	(skip): Made it sychronized, merged from classpath.
! 	* java/io/FileOutputStream.java
! 	(write): Merged from classpath.
! 	* java/io/InputStreamReader.java:
! 	(InputStreamReader): Merged documentation from classpath.
  
! 2003-05-05  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/NetworkInterface.java
! 	(networkInterfaces): Removed.
! 	(getByName): Use getRealNetworkInterfaces() instead of
! 	networkInterfaces.
! 	(getByInetAddress): Likewise.
! 	(getNetworkInterfaces): Likewise.
! 	(toString): Fix output of addresses of an interface.
  
! 2003-05-05  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/DataInputStream.java:
! 	Merged new documentation from classpath.
  
! 2003-05-03  Matt Kraai  <kraai@alumni.cmu.edu>
  
! 	* gnu/awt/gtk/GtkButtonPeer.java: Fix misspelling of
! 	"version".
! 	* gnu/awt/gtk/GtkComponentPeer.java: Likewise.
! 	* gnu/awt/gtk/GtkContainerPeer.java: Likewise.
! 	* gnu/awt/gtk/GtkFramePeer.java: Likewise.
! 	* gnu/awt/gtk/GtkLabelPeer.java: Likewise.
! 	* gnu/awt/gtk/GtkMainThread.java: Likewise.
! 	* gnu/awt/gtk/GtkToolkit.java: Likewise.
! 	* gnu/awt/gtk/GtkWindowPeer.java: Likewise.
! 	* java/security/Key.java: Likewise.
! 	* java/security/PrivateKey.java: Likewise.
! 	* java/security/Provider.java: Likewise.
! 	* java/security/PublicKey.java: Likewise.
  
! 2003-05-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URI.java
! 	(create): Doesnt throws any exceptions.
! 	* java/net/URLConnection.java
! 	(URLConnection): Commend added.
! 	(getExpiration): The header field is called "expires" not
! 	"expiration".
! 	(getHeaderField): Merged documentation with classpath.
! 	(getHeaderFieldInt): Likewise.
! 	(getHeaderFieldDate): Likewise.
! 	(getHeaderFieldKey): Likewise.
! 	(getPermission): Likewise.
! 	(setDefaultUseCaches): Likewise.
! 	(setRequestProperty): Likewise.
! 	(addRequestProperty): Likewise.
! 	(getRequestProperty): Likewise.
! 	(getRequestProperties): Likewise.
! 	(setDefaultRequestProperty): Likewise.
! 	(getDefaultRequestProperty): Likewise.
! 	(guessContentTypeFromStream): Likewise.
! 	(getFileNameMap): Likewise.
! 	(setFileNameMap): Likewise.
! 	(setDoInput): Merged implementation and documentation with classpath.
! 	(setDoOutput): Likewise.
! 	(setAllowUserInteraction): Likewise.
! 	(setDefaultAllowUserInteraction): Likewise.
! 	(setContentHandlerFactory): Made it synchronized, merged documentation
! 	with classpath.
! 	(guessContentTypeFromName): Renamed argument fname to filename to
! 	match classpath, merged documentation with classpath.
  
! 2003-05-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/JarURLConnection.java
! 	(JarURLConnection): Class documentation merged with classpath.
! 	(getJarFileURL): Moved and documentation merged with classpath.
! 	(getEntryName): Likewise.
! 	(JarURLConnection): Documentation merged with classpath.
! 	(getJarEntry): Likewise.
! 	(getJarFile): Likewise.
! 	* java/net/PlainDatagramSocketImpl.java:
! 	Class documentation moved.
! 	* java/net/URLConnection.java
! 	(fileNameMap): Moved and documentation merged with classpath.
! 	(factory): Likewise.
! 	(defaultAllowUserInteraction): Likewis.
! 	(defaultUseCaches): Likewise.
! 	(allowUserInteraction): Likewise.
! 	(connected): Likewise.
! 	(url): Likewise.
! 	(connect): Documentation merged with classpath.
! 	(getURL): Likewise.
! 	(getContentLength): Likewise.
! 	(getContentType): Likewise.
! 	(getContentEncoding): Likewise.
! 	(getExpiration): Likewise.
! 	(getDate): Likewise.
! 	(getLastModified): Likewise.
! 	(getHeaderField): Likewise.
! 	(getContent): Likewise.
! 	(getPermission): Likewise.
! 	(getInputStream): Likewise.
! 	(getOutputStream): Likewise.
! 	(toString): Likewise.
! 	(getDoInput): Likewise.
! 	(getDoOutput): Likewise.
! 	(setAllowUserInteraction): Likewise.
! 	(getAllowUserInteraction): Likewise.
! 	(setDefaultAllowUserInteraction): Likewise.
! 	(getDefaultAllowUserInteraction): Likewise.
! 	(setUseCaches): Likewise.
! 	(getUseCaches): Likewise.
! 	(setIfModifiedSince): Likewise.
! 	(getIfModifiedSince): Likewise.
! 	(setDefaultRequestProperty): Likewise.
! 	(getDefaultRequestProperty): Likewise.
! 	(setContentHandlerFactory): Likewise.
! 	(setFileNameMap): Likewise.
  
! 2003-05-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java:
! 	Merged class documentation with classpath.
! 	* java/net/JarURLConnection.java:
! 	Explicitely import all used classes.
! 	* java/net/URL.java:
! 	Reformatting.
! 	* java/net/ServerSocket.java,
! 	java/net/Socket.java:
! 	New versions from classpath.
  
! 2003-05-02  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/FileChannelImpl.java
! 	(read): New implementation.
! 	(implRead): New methods.
! 	(write): New implementation, call other write insteal of read method.
! 	(implWrite): New methods.
! 	(map): Added comment.
! 	(transferFrom): Implemented.
! 	(transferTo): Implemented.
! 	(lock): Added checks to throw exceptions.
! 	(truncate): Added check to throw exception.
! 	* gnu/java/nio/natFileChannelImpl.cc
! 	(implRead): New method.
! 	(implWrite): New method.
! 	* java/nio/ByteBuffer.java
! 	(hashCode): Fixed comment.
! 	(get): Fixed exception documentation.
! 	(put): Fixed exception documentation.
! 	* java/nio/CharBuffer.java:
! 	Added comment for later optimizations.
  
! 2003-04-30  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/10582:
! 	* verify.cc (_Jv_BytecodeVerifier::is_assignable_from_slow):
! 	Removed.
! 	(type::compatible): Use _Jv_IsAssignableFrom.
! 	* java/lang/natClass.cc (iindex_mutex_initialized): Now static.
! 	(_Jv_IsAssignableFrom): Work even when source or target class is
! 	not prepared.
  
! 2003-04-30  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/BreakIterator.java
! 	(clone): New method.
  
! 2003-04-30  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/CollationElementIterator.java,
! 	java/text/CollationKey.java,
! 	java/text/RuleBasedCollator.java:
! 	Merged copyright and documentation from classpath and
! 	rearranged some code. No code changes done.
  
! 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/Engine.java,
! 	gnu/java/security/OID.java,
! 	gnu/java/security/der/BitString.java,
! 	gnu/java/security/der/DER.java,
! 	gnu/java/security/der/DERReader.java,
! 	gnu/java/security/der/DERValue.java,
! 	gnu/java/security/der/DERWriter.java,
! 	gnu/java/security/provider/DSAKeyFactory.java,
! 	gnu/java/security/provider/X509CertificateFactory.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,
! 	java/security/cert/CRLSelector.java,
! 	java/security/cert/CertPathBuilder.java,
! 	java/security/cert/CertPathBuilderResult.java,
! 	java/security/cert/CertPathBuilderSpi.java,
! 	java/security/cert/CertPathParameters.java,
! 	java/security/cert/CertPathValidator.java,
! 	java/security/cert/CertPathValidatorResult.java,
! 	java/security/cert/CertPathValidatorSpi.java,
! 	java/security/cert/CertSelector.java,
! 	java/security/cert/CertStore.java,
! 	java/security/cert/CertStoreParameters.java,
! 	java/security/cert/CertStoreSpi.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,
! 	javax/security/auth/x500/X500Principal.java:
! 	New files from classpath.
! 	* gnu/java/io/ASN1ParsingException.java,
! 	gnu/java/io/Base64InputStream.java,
! 	gnu/java/security/der/DEREncodingException.java,
! 	gnu/java/security/provider/DSAParameters.java,
! 	gnu/java/security/provider/DSASignature.java,
! 	gnu/java/security/provider/Gnu.java,
! 	gnu/java/security/provider/GnuDSAPrivateKey.java,
! 	gnu/java/security/provider/GnuDSAPublicKey.java,
! 	java/security/AlgorithmParameterGenerator.java,
  	java/security/AlgorithmParameters.java,
  	java/security/KeyFactory.java,
  	java/security/KeyPairGenerator.java,
  	java/security/KeyStore.java,
! 	java/security/MessageDigest.java,
! 	java/security/SecureClassLoader.java,
! 	java/security/SecureRandom.java,
  	java/security/Security.java,
  	java/security/Signature.java,
  	java/security/cert/Certificate.java,
  	java/security/cert/CertificateFactory.java,
! 	java/security/cert/CertificateFactorySpi.java,
  	java/security/cert/X509CRL.java,
! 	java/security/cert/X509Certificate.java,
! 	java/security/spec/DSAPublicKeySpec.java:
! 	New versions from classpath.
! 	* gnu/java/security/provider/DERReader.java,
! 	gnu/java/security/provider/DERWriter.java,
! 	java/security/Engine.java: Removed.
! 	* Makefile.am
! 	(java_source_files, javax_source_files): Added new files.
! 	* Makefile.in: Regenerated.
  
! 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>
  
! 	* java/util/PropertyPermission.java:
! 	New version from classpath
! 	* java/util/ResourceBundle.java:
! 	Partly merged from classpath
! 	(getObject): Reformated.
! 	(tryBundle): Set foundBundle = null if no bundle found.
  
! 2003-04-29  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/AbstractListModel.java,
! 	javax/swing/DefaultBoundedRangeModel.java,
! 	javax/swing/DefaultSingleSelectionModel.java:
! 	New Versions from classpath.
  
! 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-29  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/zip/Deflater.java,
! 	java/util/zip/DeflaterOutputStream.java:
! 	Partly merged with classpath.
  
! 2003-04-27  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natString.cc (_Jv_AllocString): Initialize
! 	cachedHashCode.
! 	(init): Likewise.
! 	(_Jv_NewStringUtf8Const): Likewise.
  
! 2003-03-29  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* include/jvm.h: (_Jv_GetNbArgs) added
! 	(_Jv_GetSafeArg) added
! 	(_Jv_SetArgs) added
! 	* prims.cc: (_Jv_GetNbArgs) implemented
! 	(_Jv_GetSafeArg) implemented
! 	(_Jv_SetArgs) implemented
! 	(_Jv_RunMain) use _Jv_SetArgs() instead of explicitly
! 	setting _Jv_argc and _Jv_argv
! 	* posix.cc: (_Jv_ThisExecutable) use _Jv_GetSafeArg()
! 	instead of _Jv_argv
! 	* java/lang/natRuntime.cc: (insertSystemProperties) use
! 	_Jv_GetSafeArg() instead of _Jv_argv
  
! 2003-04-23  Tom Tromey  <tromey@redhat.com>
  
! 	* resolve.cc (_Jv_PrepareClass): Round size up to alignment
! 	required by this object.  Search superclasses to find required
! 	alignment.
! 	(get_alignment_from_class): Use alignment of type as it appears
! 	in a struct.
! 	(ALIGNOF): New macro.
! 	(struct aligner): New helper structure.
  
! 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-20  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/BufferedReader.java, java/io/BufferedWriter.java,
! 	java/io/DataInput.java, java/io/DataOutput.java: Imports from
! 	Classpath.
  
! 2003-04-19  Tom Tromey  <tromey@redhat.com>
  
! 	* java/sql/Date.java, java/sql/DriverManager.java,
! 	java/sql/Time.java, java/sql/Timestamp.java: New versions from
! 	Classpath.
  
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (ordinary_java_source_files): Added new files.
  	* java/security/AlgorithmParameterGenerator.java,
! 	java/security/AlgorithmParameters.java, java/security/Engine.java,
! 	java/security/Identity.java, java/security/IdentityScope.java,
  	java/security/KeyFactory.java,
! 	java/security/KeyPairGenerator.java, java/security/KeyStore.java,
! 	java/security/MessageDigest.java, java/security/Policy.java,
! 	java/security/ProtectionDomain.java,
! 	java/security/SecureRandom.java, java/security/Security.java,
! 	java/security/Signature.java, java/security/SignatureSpi.java,
! 	java/security/SignedObject.java, java/security/Signer.java,
! 	java/security/interfaces/RSAMultiPrimePrivateCrtKey.java,
! 	java/security/spec/PSSParameterSpec.java,
! 	java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java,
! 	java/security/spec/RSAOtherPrimeInfo.java: New versions from
! 	Classpath.
  
! 2003-04-19  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* gnu/awt/xlib/XGraphics.java (XGraphics): Use new GC.create.
! 	(dispose): Null metrics.
! 	* gnu/awt/xlib/XToolkit.java (sync): Implement.
! 	* gnu/gcj/xlib/Clip.java (dispose): Change name of native from
! 	finalize.
! 	(finalize): Call dispose.
! 	* gnu/gcj/xlib/Drawable.java (gcCache): New field.
! 	(gcCachedCount): New field.
! 	(finalize): New method.
! 	(putGCInCache): New method.
! 	(getGCFromCache): New method.
! 	* gnu/gcj/xlib/GC.java (GC): Make protected.
! 	(clone): Get new GC from cache if possible.
! 	(create): New static method.
! 	(dispose): Save old GC in cache.
! 	* gnu/gcj/xlib/natClip.cc (dispose): Check for null before
! 	deleting.
! 	* gnu/gcj/xlib/natGC.cc (initStructure): Call XCreateGC only if gc
! 	is null.
! 	* gnu/gcj/xlib/Pixmap.java (Pixmap): Use new GC.create.
! 	* 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-19  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* java/io/File.java (getAbsolutePath): On Windows, take care
! 	of paths like "C:", "G:foo\bar", etc.
! 	(getName): Make it work correctly on Windows.
! 	(getParent): Make it work correctly on Windows. For UNIX,
! 	fix bug that causes "/" to be returned as the parent of "/",
! 	instead of null as returned by Sun's JRE.
  
! 	* java/io/natFileWin32.cc: Change copyright owner to FSF.
  
! 2003-04-19  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* gnu/awt/xlib/XGraphicsConfiguration.java (FontMetricsCache): New
! 	inner class.
! 	(CACHE_SIZE_PER_DISPLAY): New field
! 	(fontMetricsCache): New field
! 	(getXFontMetrics): Use fontMetricsCache to cache fonts. Prefer
! 	loading ISO10646-1 fonts.
  
! 2003-04-19  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* libjava/gnu/gcj/xlib/natFont.cc (getStringWidth): Support 16-bit
! 	characters.
! 	* libjava/gnu/gcj/xlib/natGC.cc (drawString): Support 16-bit
! 	characters.
  
! 2003-04-16  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* java/lang/ieeefp.h: Handle ARM platforms that have pure-endian
! 	floating point.
  
! 2003-04-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	* configure.host (*-linux*): Don't set slow_pthread_self if primary
! 	installed libpthread is either linuxthreads with floating stacks or
! 	NPTL.
  
! 2003-04-14  Tom Tromey  <tromey@redhat.com>
  
! 	* resolve.cc (_Jv_PrepareClass): Round up class size to multiple
! 	of alignment.
  
! 2003-04-10  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (pop64): Removed.
! 	(verify_instructions_0) <op_pop2>: Inline code.  Don't throw
! 	exception if top-of-stack is narrow.
! 	(initialize_stack): Check to ensure that <init> is not static and
! 	<clinit> is.
  
! 2003-04-07  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>
  
! 	* java/net/URLConnection.java:
! 	Import classes directly.
! 	(URLConnection): Merged class documentation with classpath.
! 	(url): Moved, documentation from classpath added.
! 	(doInput): Moved, documentation from classpath added.
! 	(doOutput): Moved, documentation from classpath added.
! 	(allowUserInteraction): Moved.
! 	(useCaches): Moved, documentation from classpath added.
! 	(ifModifiedSince): Moved, documentation from classpath added.
! 	(connected): Moved, documentation from classpath added.
  
! 2003-04-06  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/FileInputStream.java
! 	(skip): Renamed some variables to match classpath, added
! 	checks from classpath.
  
! 2003-03-31  Michael Koch  <konqueror@gmx.de>
  
- 	* javax/swing/AbstractAction.java
- 	(AbstractAction): Reformatted.
- 	(serialVersionUID): New private member variable.
- 	* javax/swing/plaf/BorderUIResource.java
- 	(serialVersionUID): New private member variable.
- 	* javax/swing/plaf/basic/BasicLookAndFeel.java
- 	(serialVersionUID): New private member variable.
  
! 2003-03-31  Michael Koch  <konqueror@gmx.de>
  
! 	* java/sql/Date.java
! 	(valueOf): Deprecated, reformatted.
! 	(toString): Deprecated, reformatted.
! 	* java/sql/Time.java
! 	(valueOf): Deprecated, reformatted.
! 	(toString): Deprecated, reformatted.
  
! 2003-03-31  Michael Koch  <konqueror@gmx.de>
  
! 	* java/rmi/dgc/VMID.java
! 	(isUnique): Deprecated.
  
! 2003-03-31  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/File.java
! 	(separator): Merged documentation from classpath.
! 	(separatorChar): Merged documentation from classpath.
! 	(pathSeparator): Merged documentation from classpath.
! 	(pathSeparatorChar): Merged documentation from classpath.
! 	(path): Merged documentation from classpath.
! 	(canRead): Merged documentation from classpath.
! 	(canWrite): Merged documentation from classpath.
! 	(createNewFile): Merged documentation from classpath.
! 	(delete): Merged documentation from classpath.
! 	(equals): Merged documentation from classpath.
! 	(exists): Merged documentation from classpath.
! 	(File): Renamed p to name to match classpath, merged documentation
! 	from classpath.
! 	(getAbsolutePath): Merged documentation from classpath.
! 	(getCanonicalPath): Merged documentation from classpath.
! 	(getCanonicalFile): Merged documentation from classpath.
! 	(getName): Merged documentation from classpath.
! 	(getParent): Merged documentation from classpath.
! 	(getParentFile): Merged documentation from classpath.
! 	(getPath): Merged documentation from classpath.
! 	(hashCode): Merged documentation from classpath.
! 	(isAbsolute): Merged documentation from classpath.
! 	(isDirectory): Merged documentation from classpath.
! 	(isFile): Merged documentation from classpath.
! 	(isHidden): Merged documentation from classpath.
! 	(lastModified): Merged documentation from classpath.
! 	(length): Merged documentation from classpath.
! 	(list): Merged documentation from classpath.
! 	(listFiles): Merged documentation from classpath.
! 	(toString): Merged documentation from classpath.
! 	(toURL): Merged documentation from classpath.
! 	(mkdir): Merged documentation from classpath.
! 	(mkdirs): Merged documentation from classpath.
! 	(createTempFile): Merged documentation from classpath.
! 	(setReadOnly): Merged documentation from classpath.
! 	(listRoots): Merged documentation from classpath.
! 	(compareTo): Merged documentation from classpath.
! 	(renameTo): Merged documentation from classpath.
! 	(setLastModified): Merged documentation from classpath.
! 	* java/io/PrintStream.java
! 	(auto_flush): Merged documentation from classpath.
! 	(PrintStream): Merged documentation from classpath.
! 	(checkError): Merged documentation from classpath.
! 	(setError): Merged documentation from classpath.
! 	(close): Merged documentation from classpath.
! 	(flush): Merged documentation from classpath.
! 	(print): Merged documentation from classpath.
! 	(println):  Merged documentation from classpath.
! 	(write): Renamed count to len to match classpath,
! 	merged documentation from classpath.
! 	* java/io/RandomAccessFile.java
! 	(readShort): Merged documentation from classpath.
! 	(readUnsignedByte): Merged documentation from classpath.
! 	(readUnsignedShort): Merged documentation from classpath.
! 	(readUTF): Merged documentation from classpath.
! 	(seek): Reformatted, merged documentation from classpath.
! 	(skipBytes): Renamed some variables to match classpath, reformatted,
! 	merged documentation from classpath.
! 	(write): Merged documentation from classpath.
! 	(writeBoolean): Merged documentation from classpath.
! 	(writeByte): Merged documentation from classpath.
! 	(writeShort): Merged documentation from classpath.
! 	(writeChar): Merged documentation from classpath.
! 	(writeInt): Merged documentation from classpath.
! 	(writeLong): Merged documentation from classpath.
! 	(writeFloat): Merged documentation from classpath.
! 	(writeDouble): Merged documentation from classpath.
! 	(writeBytes): Merged documentation from classpath.
! 	(writeChars): Merged documentation from classpath.
! 	(writeUTF): Reformatted.
! 	(getChannel): Reformatted.
  
! 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/rmi/server/LoaderHandler.java
! 	(loadClass): Deprecated.
! 	(getSecurityContext): Deprecated.
! 	* java/rmi/server/LogStream.java
! 	(getDefaultStream): Deprecated.
! 	(setDefaultStream): Deprecated.
! 	(getOutputStream): Deprecated.
! 	(setOutputStream): Deprecated.
! 	(write): Deprecated.
! 	(toString): Deprecated.
! 	(parseLevel): Deprecated.
! 	* java/rmi/server/Operation.java
! 	(Operation): Deprecated.
! 	(getOperation): Deprecated.
! 	(toString): Deprecated.
! 	* java/rmi/server/RemoteCall.java
! 	(getOutputStream): Deprecated.
! 	(releaseOutputStream): Deprecated.
! 	(getInputStream): Deprecated.
! 	(releaseInputStream): Deprecated.
! 	(getResultStream): Deprecated.
! 	(executeCall): Deprecated.
! 	(done): Deprecated.
! 	* java/rmi/server/RemoteRef.java
! 	(invoke): Deprecated.
! 	(newCall): Deprecated.
! 	(done): Deprecated.
! 	* java/rmi/server/RemoteStub.java
! 	(setRef): Deprecated.
! 	* java/rmi/server/Skeleton.java:
! 	No need to import java.lang.Exception explicitly.
! 	(dispatch): Deprecated.
! 	(getOperations): Deprecated.
  
! 2003-03-31  Michael Koch  <konqueror@gmx.de>
  
! 	* java/rmi/dgc/VMID.java,
  	java/rmi/registry/RegistryHandler.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:
! 	Reformatted.
  
! 2003-03-31  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/AbstractCellEditor.java,
! 	javax/swing/AbstractListModel.java,
! 	javax/swing/ActionMap.java,
! 	javax/swing/BorderFactory.java,
! 	javax/swing/ButtonGroup.java,
! 	javax/swing/DefaultBoundedRangeModel.java,
! 	javax/swing/DefaultButtonModel.java,
! 	javax/swing/DefaultCellEditor.java,
! 	javax/swing/DefaultComboBoxModel.java,
! 	javax/swing/DefaultDesktopManager.java,
! 	javax/swing/DefaultListCellRenderer.java,
! 	javax/swing/DefaultSingleSelectionModel.java,
! 	javax/swing/InputMap.java,
! 	javax/swing/JComponent.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/UIManager.java,
! 	javax/swing/ViewportLayout.java,
! 	javax/swing/border/AbstractBorder.java,
! 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
! 	javax/swing/event/EventListenerList.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/StyledEditorKit.java,
! 	javax/swing/tree/DefaultMutableTreeNode.java,
! 	javax/swing/tree/DefaultTreeModel.java,
! 	javax/swing/tree/DefaultTreeSelectionModel.java,
! 	javax/swing/tree/TreePath.java,
! 	javax/swing/undo/AbstractUndoableEdit.java,
! 	javax/swing/undo/StateEdit.java,
! 	javax/swing/undo/StateEditable.java,
! 	javax/swing/undo/UndoableEditSupport.java:
! 	Merges from classpath.
  
! 2003-03-30  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/String.java (data, boffset, count): Documented.
! 	(String(byte[],String)): Reformatted.
! 	(String(byte[])): Likewise.
! 	(lastIndexOf(int)): Likewise.
! 	(lastIndexOf(String)): Likewise.
! 	(substring(int)): Renamed argument to match Classpath.
! 	(String(StringBuffer)): Don't share buffer if it is nearly empty.
  
! 	* java/lang/String.java: Miscellaneous minor formatting changes
! 	to match Classpath more closely.
  
! 2003-03-29  Eric Blake  <ebb9@email.byu.edu>
! 	    Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natString.cc (hashCode): Use cachedHashCode.
! 	(init()): Removed.
! 	(charAt): Put index in exception.
! 	(contentEquals): New method.
! 	Include StringBuffer.h.
! 	* java/lang/String.java (cachedHashCode): New field.
! 	(String()): Follow classpath implementation.
! 	(init()): Removed.
! 	(contentEquals): Declare.
! 	(subSequence): Don't declare IndexOutIfBoundsException in throws
! 	clause.
! 	(matches, replaceFirst, replaceAll, split): New methods from
! 	Classpath.
  
! 2003-03-29  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/String.java: Reordered to follow Classpath; merged in
! 	javadoc.
  
! 	* java/text/MessageFormat.java: Removed some whitespace.
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (awt_java_source_files): Added new files.
! 	* gnu/javax/rmi/PortableServer.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,
! 	javax/rmi/BAD_OPERATION.java, javax/rmi/ORB.java,
! 	javax/rmi/PortableRemoteObject.java,
! 	javax/rmi/CORBA/ClassDesc.java, javax/rmi/CORBA/ObjectImpl.java,
! 	javax/rmi/CORBA/PortableRemoteObjectDelegate.java,
! 	javax/rmi/CORBA/Stub.java, javax/rmi/CORBA/StubDelegate.java,
! 	javax/rmi/CORBA/SystemException.java, javax/rmi/CORBA/Tie.java,
! 	javax/rmi/CORBA/Util.java, javax/rmi/CORBA/UtilDelegate.java,
! 	javax/rmi/CORBA/ValueHandler.java: New files from Classpath.
  
! 	* java/lang/natClass.cc (newInstance): Put method name in
! 	exception.
! 	(getConstructor): Likewise.
! 	(getDeclaredConstructor): Likewise.
! 	(getPrivateMethod): Likewise.
  
! 2003-03-28  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/reflect/Proxy.java: New version from Classpath.
! 	* java/lang/Package.java: New version from Classpath.
  
! 2003-03-29  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* configure.in (HAVE_BACKTRACE) [s390*-*-linux*]: Define.
! 	* configure: Regenerate.
  
! 2003-03-28  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/File.java:
! 	Import needed classes instead of whole packages, merged class
! 	documentation with classpath, moved constants and variables to top of
! 	class.
! 	* java/io/PrintStream.java:
! 	Merged class documentation with classpath, moved constants and
! 	variables to top of class.
! 	* java/io/RandomAccessFile.java
! 	(RandomAccessFile): Merged with classpath.
! 	(read): Merged with classpath).
! 	(read*): Reformatted.
  
! 2003-03-28  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/FileDescriptor.java
! 	(finalize): Throws Throwable, not IOException.
! 	* java/io/ObjectOutputStream.java
! 	(PutField.put): Doesnt throws anything.
  
! 2003Â­03-28  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/FileOutputStream.java:
! 	Merged class documentation and authors with classpath.
! 	(FileOutputStream): Partly merged with classpath.
! 	(write): Merged with classpath.
! 	(getChannel): Make it synchronized instead of explicit block in this
! 	method.
! 	* java/io/RandomAccessFile.java:
! 	Merged class documentation and authors with classpath.
  
! 2003-03-26  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natRuntime.cc (insertSystemProperties): Set
! 	gnu.classpath.home.url.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am: Define LIBDIR.
  
! 2003-03-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/FileInputStream.java
! 	(read): Renamed b to buf and off to offset.
! 	* java/io/FileOutputStream.java
! 	(ch): Documentation added.
! 	(FileOutputStream): Documentation added.
! 	(getFD): Documentation added.
! 	(write): Documentation added.
! 	(close): Documentation added.
! 	(getChannel): Documentation added.
  
! 2003-03-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/DataOutputStream.java
! 	(write): Merged from classpath.
! 	* java/io/File.java:
! 	Merged copyrigth with classpath.
! 	* java/io/FileInputStream.java
! 	(getChannel): Made it synchronized instead of using a synchronized
! 	block.
! 	* java/io/FileOutputStream.java: Reformatted.
! 	* java/io/InputStreamReader.java
! 	(InputStreamReader): Renamed enc to encoding_name.
! 	(close): Merged documentation from classpath.
! 	(getEncoding): Merged documentation from classpath.
! 	(ready): Merged documentation from classpath.
! 	(read): Merged documentation from classpath.
! 	* java/io/LineNumberReader.java
! 	(lineNumber): Made it private.
! 	(LineNumberReader): Use Constant instead of a direct value.
! 	* java/io/OutputStreamWriter.java
! 	(OutputStreamWriter): Renamed enc to encoding_scheme, merged
! 	documentation from classpath.
! 	(close): Merged documentation from classpath.
! 	(flush): Merged documentation from classpath.
! 	(write): Merged documentation from classpath.
! 	* java/io/PrintStream.java: Reformatted.
  
! 2003-03-24  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/text/ComponentView.java
! 	(getComponent): Must be final.
! 	* javax/swing/tree/DefaultTreeCellRenderer.java:
! 	Reformatted.
! 	* javax/swing/undo/StateEditable.java:
! 	Reformatted.
  
! 2003-03-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/rmi/activation/ActivationInstantiator.java:
! 	Reformatted.
! 	* java/rmi/activation/Activator.java:
! 	Reformatted.
! 	* java/rmi/registry/RegistryHandler.java:
! 	Remerged from classpath.
  
! 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-24  Michael Koch  <koqnueror@gmx.de>
  
! 	* java/awt/ContainerOrderFocusTraversalPolicy.java
! 	(getFirstComponent): Implemented.
! 	(getLastComponent): Implemented.
! 	(getDefaultComponent): Implemented.
! 	(setImplicitDownCycleTraversal): Fixed implementation.
! 	* java/awt/Robot.java
! 	(Robot): Added documentation.
! 	* java/awt/Toolkit.java
! 	(getFontList): Deprecated.
! 	(getFontMetrics): Deprecated.
! 	(getPrintJob): Added documentation.
! 	(getSystemSelection): Added documentation.
! 	(getLockingKeyState): Added documentation.
! 	(setLockingKeyState): Added documentation.
! 	(createCustomCursor): Added documentation.
! 	(getBestCursorSize): Added documentation.
! 	(getMaximumCursorColors): Added documentation.
! 	(isFrameStateSupported): Added documentation.
  
! 2003-03-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/RandomAccessFile.java:
! 	More little merges with classpath. No code changes.
  
! 2003-03-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/natInetAddressNoNet.cc:
! 	Include stddef.h.
! 	* java/net/natPlainDatagramSocketImplNoNet.cc:
! 	Fixed inlcude of java/net/DatagramPacket.h.
! 	* java/net/natPlainSocketImplNoNet.cc:
! 	Include some missing classes.
  
! 2003-03-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/dnd/DropTarget.java
! 	(DropTargetAutoScroller): According to the online documentation, this
! 	is protected, but in reality it is public.
! 	* java/awt/dnd/DropTargetContext.java
! 	(TransferableProxy): According to the online documentation, this
!         is protected, but in reality it is public.
  
! 2003-03-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/DataInputStream.java
! 	(): Wrapped documentation line.
! 	(): Fixed @return tag.
! 	* java/io/DataOutputStream.java
! 	(written): Moved to top of class.
! 	(all methods): Merged documentation from classpath.
! 	* java/io/File.java:
! 	Merged copyright year with classpath.
! 	* java/io/FileInputStream.java
! 	(all methods): Merged documentation from classpath.
! 	* java/io/LineNumberReader.java
! 	(getLineNumber): Fixed @return tag.
! 	* java/io/ObjectInputStream.java.
! 	Reformatted.
! 	* java/io/ObjectOutputStream.java:
! 	Reformatted, fixed some @see tags.
! 	* java/io/OutputStreamWriter.java:
! 	Deleted empty line.
! 	* java/io/Writer.java:
! 	Reformatted.
  
! 2003-03-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Frame.java
! 	(DEFAULT_CURSOR): Fixed @deprecated tag.
! 	(setCursor): Fixed @deprecated tag.
  
! 2003-03-24  Michael Koch  <konqueror@gmx.de>
  
! 	* java/beans/beancontext/BeanContextEvent.java:
! 	Reformated.
  
! 2003-03-23  Eric Blake  <ebb9@email.byu.edu>
  
! 	* java/lang/natStringBuffer.cc (regionMatches): New function.
! 	* java/lang/String.java (count): Now package-private.
! 	* java/lang/StringBuffer.java: Merged with Classpath.
  
! 2003-03-23  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/BufferedOutputStream.java:
! 	Reformated.
! 	* java/io/BufferedReader.java:
! 	Reformated.
! 	* java/io/ByteArrayOutputStream.java
! 	(size): Fixed @see tag.
! 	* java/io/CharArrayWriter.java
! 	(size): Fixed @see tag.
! 	* java/io/DataInput.java:
! 	Reformated.
! 	* java/io/DataOutput.java:
! 	Reformated.
! 	* java/io/DataOutputStream.java:
! 	Merged copyright years with classpath.
! 	* java/io/Externalizable.java:
! 	Reformated.
! 	* java/io/FileFilter.java:
! 	Reformated.
! 	* java/io/FileInputStream.java:
! 	Merged copyright years with classpath.
! 	* java/io/FileOutputStream.java:
! 	Merged copyright years with classpath.
! 	* java/io/FilePermission.java
! 	(FilePermission): Replaced @XXX with FIXME:.
! 	* java/io/FileWriter.java:
! 	Reformated.
! 	* java/io/FilenameFilter.java:
! 	Reformated.
! 	* java/io/FilterInputStream.java:
! 	Reformated.
! 	* java/io/FilterOutputStream.java:
! 	Reformated.
! 	* java/io/FilterReader.java:
! 	Reformated.
! 	* java/io/FilterWriter.java:
! 	Reformated.
! 	* java/io/LineNumberInputStream.java
! 	(LineNumberInputStream): Replaced @code with HTML tags to make javadoc
! 	happy.
! 	(getLineNumber): Fixed @return tag.
! 	* java/io/ObjectInput.java:
! 	Reformated.
! 	* java/io/ObjectOutput.java:
! 	Reformated.
! 	* java/io/ObjectStreamClass.java:
! 	Reformated.
! 	* java/io/PrintStream.java:
! 	Merged copyright years with classpath.
! 	* java/io/PushbackReader.java
! 	(PushbackReader): Replaced @code with @param.
! 	* java/io/SerializablePermission.java:
! 	Reformated.
! 	* java/io/StreamTokenizer.java
! 	(resetSyntax): Fixed @see tag.
  
! 2003-03-22  Richard Henderson  <rth@redhat.com>
  
! 	* sysdep/ia64/locks.h: Include ia64intrin.h.
! 	(compare_and_swap): Use __sync_bool_compare_and_swap.
! 	(compare_and_swap_release): Expose ar.ccv assignment.
  
! 2003-03-22  Andreas Tobler <a.tobler@schweiz.ch>
  
! 	* include/posix.h: Add suffix for darwin dynamic libraries.
  
! 2003-03-21  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-21  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-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/LineNumberReader.java
! 	(LineNumberReader): Merged documentation with classpath.
! 	(getLineNumber): Likewise.
! 	(setLineNumber): Likewise.
! 	(mark): Likewise.
! 	(reset): Likewise.
! 	(read): Likewise.
! 	(readLine): Likewise.
! 	(skip): Likewise.
  
! 2003-03-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/rmi/RMISecurityManager.java
! 	(checkAccept): Removed.
! 	(checkAccess): Likewise.
! 	(checkAccess): Likewise.
! 	(checkAwtEventQueueAccess): Likewise.
! 	(checkConnect): Likewise.
! 	(checkCreateClassLoader): Likewise.
! 	(checkDelete): Likewise.
! 	(checkExec): Likewise.
! 	(checkExit): Likewise.
! 	(checkLink): Likewise.
! 	(checkListen): Likewise.
! 	(checkMemberAccess): Likewise.
! 	(checkMulticast): Likewise.
! 	(checkPackageAccess): Likewise.
! 	(checkPackageDefinition): Likewise.
! 	(checkPermission): Likewise.
! 	(checkPrintJobAccess): Likewise.
! 	(checkPropertiesAccess): Likewise.
! 	(checkPropertyAccess): Likewise.
! 	(checkRead): Likewise.
! 	(checkSecurityAccess): Likewise.
! 	(checkSetFactory): Likewise.
! 	(checkSystemClipboardAccess): Likewise.
! 	(checkTopLevelWindow): Likewise.
! 	(checkWrite): Likewise.
  
! 2003-03-20  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/FileChannelImpl.java
! 	(address): Removed.
! 	(map_address): New member variable.
! 	(length): Make it package private.
! 	(fd): Make it package private.
! 	(buf): Make it package private.
! 	(file_obj): Make it package private.
! 	(FileChannelImpl): New constructor.
! 	(nio_mmap_file): Use RawData instead of long.
! 	(nio_munmap_file): Use RawData instead of long.
! 	(nio_msync): Use RawData instead of long.
! 	(implCloseChannel): New implementation using map_address.
! 	(read): Reformated.
! 	(map): Implemented.
! 	(create_direct_mapped_buffer): Implemented, use RawData, throws
! 	IOException.
! 	(force): Use map_address instead of address.
! 	* gnu/java/nio/MappedByteFileBuffer.java
! 	(address): Removed.
! 	(map_address): New member variable.
! 	(MappedByteFileBuffer): Use map_address instead of address, reformated.
! 	(several methods): Use map_address instead of address, replaced long
! 	with RawData where appropriate.
! 	* gnu/java/nio/natFileChannelImpl.cc
! 	(nio_mmap_file): Replaced long with RawData.
! 	(nio_munmap_file): Replaced long with RawData.
! 	(nio_msync): Replaced long with RawData.
! 	* gnu/java/nio/natMappedByteFileBuffer.cc
! 	(several methods): Replaced long with RawData where appropriate.
  
! 2003-03-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java,
! 	java/net/JarURLConnection.java,
! 	java/net/PlainDatagramSocketImpl.java,
! 	java/net/PlainSocketImpl.java,
! 	java/net/URLConnection.java:
! 	Merged copyright statements with classpath for easier merging.
  
! 2003-03-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/FileInputStream.java
! 	(getChannel): New implementation.
! 	* java/io/FileOutputStream.java
! 	(ch): New member variable.
! 	(getChannel): Implemented.
! 	* java/io/RandomAccessFile.java
! 	(RandomAccessFile): Throws FileNotFoundException instead of
! 	IOException.
! 	(getChannel): New method.
! 	(ch): New member variable.
  
! 2003-03-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/DataOutputStream.java,
! 	java/io/File.java,
! 	java/io/FileInputStream.java,
! 	java/io/FileOutputStream.java,
! 	java/io/InputStreamReader.java,
! 	java/io/LineNumberReader.java,
! 	java/io/OutputStreamWriter.java,
! 	java/io/PrintStream.java,
! 	java/io/RandomAccessFile.java:
! 	Merged copyright statements with classpath for easier merging.
  
! 2003-03-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/lang/Process.java:
! 	Merged from classpath.
  
! 2003-03-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/FileOutputStream.java
! 	(FileOutputStream): New constructor, merged from classpath.
! 	* java/io/FileWriter.java
! 	(FileWriter): New constructor, merged from classpath.
  
! 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.
  
! 2003-03-18  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/BufferedOutputStream.java,
! 	java/io/DataInput.java,
! 	java/io/DataInputStream.java,
! 	java/io/DataOutput.java,
! 	java/io/Externalizable.java:
! 	More merges from classpath.
  
! 2003-03-18  Michael Koch  <konqueror@gmx.de>
  
- 	* configure.in: Fixed links to platform dependant java.net files.
- 	* configure: Regenerated.
- 	* java/net/natInetAddress.cc,
- 	java/net/natNetworkInterface.cc,
- 	java/net/natPlainDatagramSocketImpl.cc,
- 	java/net/natPlainSocketImpl.cc:
- 	Removed.
  
! 2003-03-18  Michael Koch  <konqueror@gmx.de>
  
! 	* configure.in: Create links to architecture dependent files,
! 	introduced PLATFORMNET variable (set to NoNet for newlib usage).
! 	* configure: Regenerated.
! 	* java/net/natInetAddressNoNet.cc,
! 	java/net/natInetAddressPosix.cc,
! 	java/net/natInetAddressWin32.cc,
! 	java/net/natNetworkInterfaceNoNet.cc,
! 	java/net/natNetworkInterfacePosix.cc,
! 	java/net/natNetworkInterfaceWin32.cc,
! 	java/net/natPlainDatagramSocketImplNoNet.cc,
! 	java/net/natPlainDatagramSocketImplPosix.cc,
! 	java/net/natPlainDatagramSocketImplWin32.cc,
! 	java/net/natPlainSocketImplNoNet.cc,
! 	java/net/natPlainSocketImplPosix.cc,
! 	java/net/natPlainSocketImplWin32.cc: New files.
  
- 2003-03-18  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/BufferedReader.java,
! 	java/io/BufferedWriter.java,
! 	java/io/ByteArrayOutputStream.java,
! 	java/io/FileFilter.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/ObjectInput.java,
! 	java/io/ObjectInputValidation.java,
! 	java/io/ObjectOutput.java,
! 	java/io/ObjectStreamField.java,
! 	java/io/PipedInputStream.java,
! 	java/io/PipedReader.java,
! 	java/io/PrintWriter.java,
! 	java/io/PushbackReader.java,
! 	java/io/Reader.java,
! 	java/io/SerializablePermission.java,
! 	java/io/StringReader.java,
! 	java/io/Writer.java:
! 	Merged from classpath.
  
! 2003-03-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/ScrollPaneAdjustable.java:
! 	Compile fixes.
! 	
! 2003-03-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(connect): Fixed comment.
! 	* java/nio/ByteBuffer.java
! 	(hasArray): Fixed comment.
  
! 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): Extends Object, 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-17  Michael Koch
  
! 	* javax/print/attribute/Attribute.java,
! 	javax/print/attribute/AttributeSet.java,
! 	javax/print/attribute/PrintRequestAttributeSet.java:
  	New files.
! 	* Makefile.am
! 	(javax_source_files): Added new files:
! 	javax/print/attribute/Attribute.java
! 	javax/print/attribute/AttributeSet.java
! 	javax/print/attribute/PrintRequestAttributeSet.java
  	* Makefile.in: Regenerated.
  
! 2003-03-17  Michael Koch
  
! 	* javax/print/attribute/Attribute.java,
! 	javax/print/attribute/AttributeSet.java,
! 	javax/print/attribute/PrintRequestAttributeSet.java:
! 	New files.
! 	* Makefile.am
! 	(awt_java_source_files): Added new files:
! 	javax/print/attribute/Attribute.java
! 	javax/print/attribute/AttributeSet.java
! 	javax/print/attribute/PrintRequestAttributeSet.java
  	* Makefile.in: Regenerated.
  
! 2003-03-16  Tom Tromey  <tromey@redhat.com>
  
! 	* resolve.cc (ncode): Use _Jv_platform_ffi_abi.
! 	Include platform.h.
! 	* java/lang/natRuntime.cc (insertSystemProperties): Use
! 	_Jv_platform_path_separator.
! 	(nativeGetLibname): Use _Jv_platform_file_separator.
! 	(_load): Use _Jv_platform_onload_names.
! 	(onload_names): New global.
! 	* include/win32.h (_Jv_platform_file_separator): New define.
! 	(_Jv_platform_path_separator): Likewise.
! 	(_Jv_platform_onload_names): Likewise.
! 	(_Jv_platform_ffi_abi): Likewise.
! 	* include/posix.h (_Jv_platform_file_separator): New define.
! 	(_Jv_platform_path_separator): Likewise.
! 	(_Jv_platform_onload_names): Likewise.
! 	(_Jv_platform_ffi_abi): Likewise.
  
! 2003-03-14  Hans Boehm  <Hans.Boehm@hp.com>
  
! 	* java/lang/natObject.cc (JV_SYNC_HASH): replace signed % by &.
  
! 2003-02-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-12  Andreas Schwab  <schwab@suse.de>
  
! 	* configure.in: Avoid trailing /. in toolexeclibdir.
! 	* configure: Rebuilt.
  
! 2003-03-11  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java
! 	(putInt): Use limit() instead of limit.
! 	* gnu/java/nio/CharBufferImpl.java
! 	(slice): Fixed implementation.
! 	(subSequence): Better bounds checking.
! 	* gnu/java/nio/MappedByteFileBuffer.java:
! 	Import all needed classes directly.
! 	* java/nio/ByteBuffer.java
! 	(hashCode): New dummy method.
! 	* java/nio/CharBuffer.java
! 	(array_offset): New member variable.
! 	(hasArray): Fixed documentation.
! 	(arrayOffset): Return array_offset.
  
! 2003-03-10  2003-02-27  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* include/jvm.h: removed declaration of _Jv_ThisExecutable()
! 	setter; made return value of getter const char* instead of char*
! 	* prims.cc: removed all references to _Jv_ThisExecutable().
! 	These are in the platform-specific sections now.
! 	* posix.cc: define platform-specific _Jv_ThisExecutable().
! 	Handle DISABLE_MAIN_ARGS and HAVE_PROC_SELF_EXE cases
! 	* win32.cc: define platform-specific _Jv_ThisExecutable()
! 	using GetModuleFilename()
! 	* java/lang/natRuntime.cc: set gnu.gcj.progname property
! 	to argv[0] instead of _Jv_ThisExecutable()
  
! 2003-03-10  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* gnu/gcj/runtime/NameFinder.java (usingAddr2name): New flag
! 	that is set if we are using addr2name.awk instead of addr2line.
! 	(NameFinder): Set usingAddr2name if using addr2name.awk.
! 	(getExternalLabel): New native method to convert a method 
! 	name to an external label.
! 	(lookup): Convert name given by addr2line to an external label
! 	before demangling.
  
! 	* gnu/gcj/runtime/natNameFinder.cc (LABEL_PREFIX): New string
! 	constant representing the prefix attached to method names to
! 	convert them to an external label.
! 	(gnu::gcj::runtime::NameFinder::getExternalLabel): Define 
! 	using LABEL_PREFIX.
  
! 2003-03-10  Tom Tromey  <tromey@redhat.com>
  
  	* Makefile.in: Rebuilt.
! 	* Makefile.am (GCJ_WITH_FLAGS): Added -Wno-deprecated.
! 	(JC1FLAGS): Removed -Wno-deprecated.
  
! 2003-03-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteOrder.java
! 	(nativeOrder): Working implementation, added documentation.
! 	(toString): Added documentation.
  
! 2003-03-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java,
! 	java/net/MulticastSocket.java,
! 	java/net/Socket.java,
! 	java/net/URL.java,
! 	java/net/URLConnection.java:
! 	Fixed some documentation tags to make javadoc and friends happy.
  
! 2003-03-10  Michael Koch  <koqnueror@gmx.de>
  
! 	* java/beans/beancontext/BeanContextServicesSupport.java,
! 	java/beans/beancontext/BeanContextSupport.java: New files.
! 	* Makefile.am
! 	(awt_source_files): Added new files.
! 	* Makefile.in: Regenerated.
  
! 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  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/9934:
! 	* java/io/natFileDescriptorPosix.cc (available): Fixed arguments
! 	to lseek.  Return 0 if we can't compute the value.
  
! 2003-03-03  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/NetworkInterface.java: Merged with classpath.
  
! 2003-03-03  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (handle_jsr_insn): Don't fail if `jsr' appears at end
! 	of bytecode.
! 	(handle_ret_insn): Fail if returning to jsr that appears at end of
! 	bytecode.
  
! 2003-03-03  Michael Koch  <konqueror@gmx.de>
  
  	* Makefile.am
! 	(ordinary_java_source_files):
! 	Added gnu/java/nio/MappedByteFileBuffer.java.
! 	(nat_source_files):
! 	Added gnu/java/nio/natMappedByteFileBuffer.cc.
  	* Makefile.in: Regenerated.
  
! 2003-03-03  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(connect): Merged comment from classpath.
! 	(receive): Merged documentation from classpath.
! 	* java/net/Socket.java
! 	(setSoTimeout): Clarified documentation.
! 	* java/net/URL.java
! 	(getPath): Merged from classpath.
! 	(getUserInfo): Merged from classpath.
! 	(getQuery): Merged from classpath.
! 	* java/net/URLStreamHandler.java
! 	(toExternalForm): Merged from classpath.
  
! 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/net/NetPermission.java:
! 	Merged copyright with classpath.
  
! 2003-03-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/lang/Package.java:
! 	Remerged from classpath.
  
! 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>
  
! 	* gnu/java/nio/FileChannelImpl.java
! 	(fd): Type FileDescriptor instead of int.
! 	(lengthInternal): Removed.
! 	(FileChannelImpl): Fixed arguments, check type of file object.
! 	(size): Made it native.
! 	(implPosition): New native method.
! 	(implTruncate): New native method.
! 	(position): Implemented.
! 	(truncate): Implemented.
! 	(nio_mmap_file): Changed arguments.
! 	(nio_munmap_file): Changed arguments.
! 	(nio_msync): Changed arguments.
! 	* gnu/java/nio/natFileChannelImpl.cc
! 	(lengthInternal): Removed.
! 	(size): New method.
! 	(implPosition): New method.
! 	(implTruncate): New method.
! 	(nio_mmap_file): Changed arguments.
! 	(nio_munmap_file): Changed arguments.
! 	(nio_msync): Changed arguments.
  
! 2003-03-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/dnd/DropTargetContext.java:
! 	Compile fix: Forgot to commit import.
! 	
! 2003-03-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Component.java,
! 	java/awt/ScrollPane.java:
! 	Fixed typos.
  
! 2003-03-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/dnd/DnDEventMulticaster.java: New file.
! 	* java/awt/dnd/DragSource.java
! 	(flavorMap): New member variable.
! 	(dragSourceListener): New member variable.
! 	(dragSourceMotionListener): New member variable.
! 	(getFlavorMap): Implemented.
! 	(createDragGestureRecognizer): Implemented.
! 	(addDragSourceListener): Implemented.
! 	(removeDragSourceListener): Implemented.
! 	(getDragSourceListeners): Implemented.
! 	(addDragSourceMotionListener): Implemented.
! 	(removeDragSourceMotionListener): Implemented.
! 	(getDragSourceMotionListeners): Implemented.
! 	(getListeners): Implemented.
! 	* java/awt/dnd/DragSourceContext.java
! 	(peer): New member variable.
! 	(cursor): New member variable.
! 	(transferable): New member variable.
! 	(trigger): New member variable.
! 	(dragSourceListener): New member variable.
! 	(image): New member variable.
! 	(offset): New member variable.
! 	(DragSourceContext): Implemented.
! 	(getDragSource): Implemented.
! 	(getComponent): Implemented.
! 	(getTrigger): Implemented.
! 	(getSourceActions): Implemented.
! 	(setCursor): Implemented.
! 	(getCursor): Implemented.
! 	(addDragSourceListener): Implemented.
! 	(removeDragSourceListener): Implemented.
! 	(getTransferable): Implemented.
! 	* java/awt/dnd/DropTarget.java
! 	(DropTargetAutoScroller.component): New member variable.
! 	(DropTargetAutoScroller.point): New member variable.
! 	(DropTargetAutoScroller.DropTargetAutoScroller): Implemented.
! 	(DropTargetAutoScroller.updateLocation): Implemented.
! 	(active): Renamed from isActive, defaults to true now.
! 	(component): New member variable.
! 	(flavorMap): New member variable.
! 	(actions): New member variable.
! 	(dropTargetContext): New member variable.
! 	(dropTargetListener): New member variable.
! 	(DropTarget): Implemented.
! 	(getComponent): Implemented.
! 	(setComponent): Implemented.
! 	(setDefaultActions): Implemented.
! 	(getDefaultActions): Implemented.
! 	(setActive): Use active instead of isActive.
! 	(isActive): Use active instead of isActive.
! 	(addDropTargetListener): Implemented.
! 	(removeDropTargetListener): Implemented.
! 	(getFlavorMap): Implemented.
! 	(setFlavorMap): Implemented.
! 	(getDropTargetContext): Implemented.
! 	(createDropTargetContext): Implemented.
! 	(createDropTargetAutoScroller): Implemented.
! 	* java/awt/dnd/DropTargetContext.java
! 	(TransferableProxy.getTransferDataFlavors): Implemented.
! 	(TransferableProxy.isDataFlavorSupported): Implemented.
! 	(TransferableProxy.getTransferData): Implemented.
! 	(dropTarget):  New member variable.
! 	(dtcp): New member variable.
! 	(DropTargetContext): New package private constructor.
! 	(getDropTarget): Implemented.
! 	(getComponent): Implemented.
! 	(addNotify): Implemented.
! 	(removeNotify): Implemented.
! 	(getCurrentDataFlavorsAsList): Implemented.
! 	(isDataFlavorSupported): Implemented.
! 	* java/awt/dnd/MouseDragGestureRecognizer.java
! 	(registerListeners): Implemented.
! 	(unregisterListeners): Implemented.
! 	* Makefile.am
! 	(awt_java_source_files): Added java/awt/dnd/DnDEventMulticaster.java.
! 	* Makefile.in: Regenerated.
  
! 2003-03-02  Michael Koch  <konqueror@gmx.de>
  
  	* java/awt/Component.java
! 	(eventTypeEnabled): New method.
! 	(dispatchEventImpl): Moved checks for event to eventTypeEnabled.
  	* java/awt/Container.java
! 	(changeSupport): New member variable.
! 	(addPropertyChangeListener): New methods.
! 	* java/awt/ContainerOrderFocusTraversalPolicy.java
! 	(ContainerOrderFocusTraversalPolicy): Added comment.
! 	(getComponentAfter): Throw exception, documentation added.
! 	(getComponentBefore): Throw exception, documentation added.
! 	(getFirstComponent): Throw exception, documentation added.
! 	(getLastComponent): Throw exception, documentation added.
! 	(getDefaultComponent): Throw exception, documentation added.
! 	* java/awt/EventQueue.java: Reindented.
! 	* java/awt/FocusTraversalPolicy.java:
! 	(FocusTraversalPolicy): Added comment.
! 	(getComponentAfter): Documentation added.
! 	(getComponentBefore): Documentation added.
! 	(getFirstComponent): Documentation added.
! 	(getLastComponent): Documentation added.
! 	(getDefaultComponent): Documentation added.
! 	(getInitialComponent): Documentation added.
! 	* java/awt/ScrollPane.java
! 	(wheelScrollingEnabled): New member variable.
! 	(ScrollPane): Initialize wheelScollingEnabled.
! 	(eventTypeEnabled): New method.
! 	(isWheelScrollingEnabled): New method.
! 	(setWheelScrollingEnabled): New method.
  
! 2003-03-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(closed): New member variable.
! 	(close): Use closed variable.
! 	(getInetAddress): No need to call isConnected().
! 	(getPort): No need to call isConnected().
! 	(disconnect): Reset remoteAddress and remotePort, fixed typo.
! 	(isClosed): Reimplemented.
! 	
! 2003-03-02  Michael Koch  <konqueror@gmx.de>
  
! 	* configure.in: Added check for memory mapping of files.
! 	* configure: Regenerated.
! 	* config.h.in: Regenerated.
  
! 2003-03-01  Jason Thorpe  <thorpej@wasabisystems.com>
  
! 	* posix-threads.cc: Include <unistd.h> if HAVE_UNISTD_H is defined.
! 	(_Jv_ThreadSetPriority): Test for _POSIX_THREAD_PRIORITY_SCHEDULING.
  
! 2003-03-01  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* java/io/File.java (normalizePath): Remove trailing separator
! 	on Windows only if path is not of the form "x:\".
  
! 	* java/io/natFileWin32.cc (WIN32_EPOCH_MILLIS): New constant.
! 	(java::io::File::attr): Change formatting a bit and use
! 	WIN32_EPOCH_MILLIS instead of magic numbers.
! 	(java::io::File::isAbsolute): Path must have at least 3 
! 	characters for a UNC network path.
! 	(java::io::File::init_native): Define.
! 	(java::io::File::performCreate): Likewise.
! 	(java::io::File::performSetReadOnly): Likewise.
! 	(java::io::File::performSetLastModified): Likewise.
! 	(java::io::File::performListRoots): Likewise.
  
! 2003-03-01  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natObject.cc: Don't include assert.h.
! 	(heavy_lock_obj_finalization_proc): Use JvAssert.
! 	(remove_all_heavy): Likewise.
! 	(_Jv_MonitorEnter): Likewise.
! 	(_Jv_MonitorExit): Likewise.
! 	(wait): Likewise.
  
! 2003-03-01  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* java/io/File (getAbsolutePath): Prefix drive specifier on
! 	Windows for paths starting with a '\'.
! 	(toURL): Make URL more consistent with what Sun's JDK returns.
  
! 	* java/io/natFileWin32.cc (java::io::File::isAbsolute): Return
! 	true only if the path is a UNC network path or it starts with a
! 	drive specifier.
  
! 	* java/net/URLStreamHandler.java (parseURL): Correct minor typo.
! 	Be prepared to handle either '/' or '\\' in the file path for
! 	Windows if using the "file" protocol.
! 	Canonicalise the file path if using a relative path in the given
! 	context and the "file" protocol.
  
! 2003-03-01  Mohan Embar  <gnustuff@thisiscool.com>
  
! 	* java/lang/natWin32Process.cc (startProcess): Double-quote each
! 	program array element passed to CreateProcess.
  
! 2003-03-01  Tom Tromey  <tromey@redhat.com>
  
! 	* java/rmi/registry/RegistryHandler.java: Deprecate.
  
! 2003-03-01  Tom Tromey  <tromey@redhat.com>
  
! 	* javax/accessibility/AccessibleEditableText.java,
! 	javax/accessibility/AccessibleHyperlink.java: New versions from
! 	Classpath.
  
! 	* 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: Updated copyright
! 	info; from Classpath.
  
! 	* gnu/awt/xlib/XPanelPeer.java (beginLayout, endLayout,
! 	isPaintPending): New methods.
! 	* gnu/awt/xlib/XFramePeer.java (getState, setState,
! 	setMaximizedBounds): New methods.
! 	(beginLayout, endLayout, isPaintPending): Likewise.
! 	* gnu/awt/xlib/XCanvasPeer.java (isFocusable): New method.
! 	(requestFocus): Likewise.
! 	(isObscured): Likewise.
! 	(canDetermineObscurity): Likewise.
! 	(coalescePaintEvent): Likewise.
! 	(updateCursorImmediately): Likewise.
! 	(createVolatileImage): Likewise.
! 	(handlesWheelScrolling): Likewise.
! 	(createBuffers): Likewise.
! 	(getBackBuffer): Likewise.
! 	(flip): Likewise.
! 	(destroyBuffers): Likewise.
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (awt_java_source_files): Added DropTargetPeer.java,
! 	RobotPeer.java.
! 	* gnu/java/awt/GLightweightPeer.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/GtkFramePeer.java,
! 	gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java,
! 	gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,
! 	java/awt/dnd/peer/DragSourceContextPeer.java,
! 	java/awt/dnd/peer/DropTargetContextPeer.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/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:
! 	New versions from Classpath.
! 	* java/awt/dnd/peer/DropTargetPeer.java: New file from Classpath.
! 	* java/awt/peer/RobotPeer.java: Likewise.
  
! 2003-03-01  Mark Wielaard  <mark@klomp.org>
  
! 	* java/io/ObjectInputStream.java: Reindent.
! 	* java/io/ObjectOutputStream.java: Likewise.
  
! 2003-02-28  Hans Boehm  <Hans.Boehm@hp.com>
  
! 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Allocate a full
! 	jvalue for each argument. Simplify.
! 	* testsuite/libjava.jni/calls.c (docall),
! 	testsuite/libjava.jni/calls.java (longpb_f): check for argument
! 	misalignment.
  
! 2003-02-28  Mark Wielaard  <mark@klomp.org>
  
! 	* Makefile.am (nat_source_files): Remove
! 	java/io/natObjectOutputStream.cc.
! 	* Makefile.in: Regenerated.
! 	* mauve-libgcj: Don't exclude java.io.ObjectInputOutput tests.
! 	* java/io/ObjectStreamField.java (typename): New field.
! 	(ObjectStreamField(String, Class)): Initialize new field.
! 	(ObjectStreamField(String, String)): New Constructor.
! 	(getTypeCode): Use new field.
! 	(getTypeString): Use new field.
! 	* java/io/ObjectOutputStream.java (writeObject): Rethrow fatal
! 	ObjectStreamExceptions. Remember and reset old BlockDataMode.
! 	Handle reading of Proxy classes. Never drain(), just write
! 	TC_ENDBLOCKDATA. Rethrow ObjectStreamExceptions.
! 	(drain): Check writeDataAsBlocks before calling writeBlockDataHeader.
! 	(flush): Call flush(), not just drain().
! 	(writeBoolean): Always use blockDataOutput.
! 	(writeByte): Likewise.
! 	(writeShort): Likewise.
! 	(writeChar): Likewise.
! 	(writeInt): Likewise.
! 	(writeLong): Likewise.
! 	(writeFloat): Likewise.
! 	(writeDouble): Likewise.
! 	(writeBytes): Likewise.
! 	(putfield (put(String,Object))): Throw IllegalArgumentException if
! 	field cannot be found.
! 	(putfield (write(ObjectOutput))): Remember old BlockDataMode.
! 	(writeArraySizeAndElements): Write byte[] in one go.
! 	(writeFields): Write TC_ENDBLOCKDATA when call_write_method, otherwise
! 	set BlockDataMode to false.
! 	(annotateProxyClass): New method.
! 	(defaultProtocolVersion): Now defaults to PROTOCOL_VERSION_2
! 	(getField): No longer native.
! 	(getMethod): Likewise.
! 	(setBlockDataMode): Always drain() on switch, return old mode.
! 	(static): New static code block.
! 	* java/io/natObjectOutputStream.cc: Removed.
! 	* java/io/ObjectInputStream.java (getField): No longer native.
! 	(getMethod): Likewise.
! 	(readObject): Remember and reset old BlockDataMode. Track whether
! 	object is consumed. Handle TC_ENDBLOCKDATA, TC_PROXYCLASSDESC and
! 	TC_LONGSTRING.
! 	(defaultReadObject): Set BlockDataMode to false during readFields.
! 	(resolveClass): Create new SecurityManager if necessary.
! 	Use Class.forName() if null ClassLoader found.
! 	(read(byte[],int,int): Copy remaining bytes to data before calling
! 	readNextBlock().
! 	(readFields): Set and reset BlockDataMode on call_read_method.
! 	Catch NoSuchFieldErrors.
! 	(setBlockDataMode): Return old mode.
! 	(static): New static code block.
! 	* java/io/natObjectInputStream.cc (getField): Removed.
! 	(getMethod): Likewise.
  
! 2003-02-27  Michael Koch  <konqueror@gmx.de>
  
! 	* java/beans/Beans.java,
! 	java/beans/FeatureDescriptor.java
! 	java/beans/PropertyEditorManager.java:
! 	Reformated to GNU style.
  
! 2003-02-25  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/MappedByteFileBuffer.java,
! 	gnu/java/nio/natMappedByteFileBuffer.cc:
! 	New files, both are not compiled yet to get not noncompiling CVS.
  
! 2003-02-24  Tom Tromey  <tromey@redhat.com>
  
! 	* java/util/prefs/AbstractPreferences.java (isUserNode):
! 	Implemented.
  
! 2003-02-24  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ClassLoader.java (defineClass(byte[],int,int)):
! 	Deprecate.
! 	* java/lang/Thread.java (resume): Deprecate.
! 	* java/io/ByteArrayOutputStream.java (toString(int)): Fixed typo
! 	in @deprecated.
  
! 2003-02-23  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (JC1FLAGS): Added -Wno-deprecated.
  
! 2003-02-23  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natRuntime.cc (libraries_size, libraries_count,
! 	libraries): Removed.
! 	(add_library): Removed.
! 	(_load): Don't call add_library.
! 	(loadLibraryInternal): Likewise.
! 	(init): Likewise.
! 	(lookup_data): New struct.
! 	(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).
! 	* Many methods: Merged GNU Classpath documentation.
  
! 	* java/lang/Class.java (finalize): throws a Throwable.
  
! 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  Mark Wielaard  <mark@klomp.org>
  
! 	* java/util/zip/ZipFile.java (finalize): New method.
  
! 2003-02-21  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/natSocketChannelImpl.cc:
! 	Reverse logic for DISABLE_JAVA_NET. Thanks to Krister Walfridsson
! 	<cato@df.lth.se> for pointing to it.
  
! 2003-02-20  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-20  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to
! 	config.status.
! 	* configure: Rebuilt.
  
! 2003-02-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/natSocketChannelImpl.cc:
! 	Added support for platforms without network support.
  
! 2003-02-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* gnu/gcj/runtime/natStackTrace.cc: Include platform.h immediately
! 	after config.h.  Use <> for consistency.
! 	* java/lang/natObject.cc: Likewise.
! 	* java/lang/natRuntime.cc: Likewise.
! 	* java/lang/natSystem.cc: Likewise.
! 	* java/util/natTimeZone.cc: Likewise.
! 	* win32.cc: Likewise.
! 	* include/posix.h (fcntl, socket, connect, close, bind, accept,
! 	listen, write, read): Undef to avoid interference from OS macros.
  
! 2003-02-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java
! 	(ByteBufferImpl): Renamed two variables.
! 	* gnu/java/nio/CharBufferImpl.java
! 	(CharBufferImpl): Renamed two variables.
! 	* gnu/java/nio/DoubleBufferImpl.java
! 	(DoubleBufferImpl): Renamed two variables.
! 	* gnu/java/nio/FloatBufferImpl.java
! 	(FloatBufferImpl): Renamed two variables.
! 	* gnu/java/nio/IntBufferImpl.java
! 	(IntBufferImpl): Renamed two variables.
! 	* gnu/java/nio/LongBufferImpl.java
! 	(LongBufferImpl): Renamed two variables.
! 	* gnu/java/nio/ShortBufferImpl.java
! 	(ShortBufferImpl): Renamed two variables.
! 	* java/nio/CharBuffer.java
! 	(wrap): Fixed arguments to CharBufferImpl constructor.
! 	(hasArray): Only not read-only buffers have backing arrays.
! 	(length): Documentation added.
! 	(subSequence): Documentation added.
! 	* java/nio/DoubleBuffer.java
! 	(hasArray): Only not read-only buffers have backing arrays.
! 	* java/nio/FloatBuffer.java
! 	(hasArray): Only not read-only buffers have backing arrays.
! 	* java/nio/IntBuffer.java
! 	(hasArray): Only not read-only buffers have backing arrays.
! 	* java/nio/LongBuffer.java
! 	(hasArray): Only not read-only buffers have backing arrays.
! 	* java/nio/ShortBuffer.java
! 	(hasArray): Only not read-only buffers have backing arrays.
! 	
! 2003-02-19  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/accessibility/AccessibleContext.java
! 	(ACCESSIBLE_DESCRIPTION_PROPERTY): Fixed typo.
  
! 2003-02-19  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/ScrollPaneAdjustable.java: Reformated.
  
! 2003-02-19  Michael Koch <konqueror@gmx.de>
  
! 	* gnu/awt/j2d/Graphics2DImpl.java
! 	(getFontRenderContext): New method.
! 	(drawGlyphVector): New method.
! 	* java/awt/Graphics2D.java
! 	(getFontRenderContext): New abstract method.
! 	(drawGlyphVector): New abstract method.
! 	
! 2003-02-18  Hans Boehm  <Hans.Boehm@hp.com>
  
! 	* gnu/awt/xlib/XToolkit.java (getFontMetrics): initialize
! 	if necessary.
! 	
! 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
! 	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
! 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,
! 	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.
  
! 	* 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.
  
! 	* 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  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/channels/FileChannel.java
! 	(toString): New implementation, added documentation.
! 	(map): Added exception documentation.
! 	(size): Added exception documentation.
! 	(write): New methods, documentation work.
! 	(read): New methods, documentation work.
! 	(implCloseChannel): Rewrote exception documentation.
! 	(force): Throws IOException, added documentation.
! 	(lock): New methods.
! 	(tryLock): New methods.
! 	(position): New methods.
! 	(transferTo): New method.
! 	(transferFrom): New method.
! 	(truncate): New method.
! 	* java/nio/channels/spi/SelectorProvider.java
! 	(provider): Implemented.
! 	* Makefile.am
! 	(ordinary_java_source_files): Added the following files:
! 	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
! 	java/nio/channels/FileLock.java
! 	(nat_java_source_files): Added the following files:
! 	gnu/java/nio/natFileChannelImpl.cc
! 	gnu/java/nio/natSelectorImpl.cc
! 	gnu/java/nio/natSocketChannelImpl.cc
! 	* Makefile.in: Regenerated.
  
! 2003-02-17  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/image/ColorModel.java: Re-merged with Classpath.
! 	* java/awt/image/ImageFilter.java: Likewise.
  
! 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  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-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(connect): Merged with classpath.
! 	(disconnect): Merged documentation with classpath.
! 	(receice): Merged documentation with classpath.
! 	(send): Merged documentation with classpath.
! 	
! 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>
  
! 	* verify.cc (_Jv_BytecodeVerifier::pop_jump): Removed unused
! 	variable.
  
! 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  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
  
! 	* java/nio/charset/Charset.java
! 	(isRegistered): Fixed method args and implementation.
! 	* java/nio/charset/CharsetEncoder.java
! 	(unmappableCharacterAction): New method.
  
! 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  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/System.java (properties): Use Properties.clone.
! 	(setProperties): Likewise.
  
! 2003-02-14  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/natServerSocketChannelImpl.cc: Removed.
! 	* gnu/java/nio/ServerSocketChannelImpl.java
! 	(SocketAccept): Removed.
! 	(accept): Commented out use of SocketAccept.
  
! 2003-02-13  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (state::seen_subrs): New field.
! 	(state::state): Initialize it.
! 	(state::clean_subrs): New method.
! 	(state::~state): Call it.
! 	(state::copy): Copy subroutine list.
! 	(state::add_subr): New method.
! 	(state::merge): Only register a change if the current subroutine
! 	hasn't yet been noted.
  
! 2003-02-13  Mark Wielaard  <mark@klomp.org>
  
! 	* java/io/InputStreamReader.java (getEncoding): Return null when
! 	closed.
! 	* java/io/OutputStreamWriter.java (getEncoding): Likewise.
  
! 2003-02-13  Mark Wielaard  <mark@klomp.org>
!  
! 	* java/util/zip/InflaterInputStream.java (read): Return zero when len
! 	is zero.
  
! 2003-02-13  Mark Wielaard  <mark@klomp.org>
  
! 	* java/io/BufferedOutputStream.java (write(int)): Only flush when
! 	next byte cannot be buffered.
  
! 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  Michael Koch  <konqueror@gmx.de>
-  
  	* gnu/java/awt/peer/gtk/GdkGraphics.java
! 	(drawString): New stubbed method.
! 	* java/awt/Graphics.java
! 	(drawString): New method.
  
! 2003-02-13  Casey Marshall  <rsdio@metastatic.org>
  
! 	PR libgcj/9271:
! 	* java/security/SecureRandom.java (next): Avoid bias in results.
  
! 2003-02-13  Michael  <konqueror@gmx.de>
  
! 	* gnu/java/nio/FileChannelImpl.java
! 	(lengthInternal): Must be native.
! 	(size): Check if channel is already closed.
! 	(implCloseChannel): Reformated.
! 	(read): w was unused, removed it.
! 	(read): Removed.
! 	(read): New method.
! 	(write): New method.
! 	(map): Check arguments.
! 	(force): Throws IOException, check if channel is closed.
! 	(transferTo): New method.
! 	(transferFrom): New method.
! 	(lock): New method.
! 	(tryLock): New method.
! 	(position): New method.
! 	(truncate): New method.
! 	(nio_mmap_file): Uncommented.
! 	(nio_munmap_file): Uncommented.
! 	(nio_msync): Uncommented.
! 	* gnu/java/nio/natFileChannelImpl.cc: New file.
! 	
! 2003-02-13  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteBuffer.java
! 	(endian): New member variable.
! 	(get): New methods.
! 	(equals): New method.
! 	(compareTo): New method.
! 	(order): New methods.
! 	(compact): New method.
! 	(isDirect): New method.
! 	(slice): New method.
! 	(duplicate): New method.
! 	(asReadOnlyBuffer): New method.
! 	(asCharBuffer): New method.
! 	(asDoubleBuffer): New method.
! 	(asFloatBuffer): New method.
! 	(asIntBuffer): New method.
! 	(asLongBuffer): New method.
! 	(asShortBuffer): New method.
! 	(get*): New methods.
! 	(put*): New methods.
! 	(toString): New method.
! 	* java/nio/CharBuffer.java
! 	(CharBuffer): Implement Comparable instead of Cloneable.
! 	(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
! 	the line number, because Win32 file names might contain a 
! 	drive letter and a colon at the start of an absolute path.
  
! 2003-02-13  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/natSocketChannelImpl.cc
! 	(SocketConnect): This is not implemented yet.
! 	(SocketBind): This is not implemented yet.
  
! 2003-02-13  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/natByteBufferImpl.cc,
! 	gnu/java/nio/natCharBufferImpl.cc,
! 	gnu/java/nio/natDoubleBufferImpl.cc,
! 	gnu/java/nio/natFloatBufferImpl.cc,
! 	gnu/java/nio/natIntBufferImpl.cc,
! 	gnu/java/nio/natLongBufferImpl.cc,
! 	gnu/java/nio/natShortBufferImpl.cc:
! 	Added copyright and license.
! 	* java/nio/DoubleBuffer.java,
! 	java/nio/FloatBuffer.java,
! 	java/nio/IntBuffer.java,
! 	java/nio/LongBuffer.java,
! 	java/nio/ShortBuffer.java
! 	(array): Throw exceptions.
! 	(arrayOffset): Throw exceptions.
  
! 2003-02-13  Michael Koch  <konqueror@gmx.de>
!  
! 	* gnu/java/util/prefs/FileBasedFactory.java,
! 	gnu/java/util/prefs/MemmoryBasedFactory.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 files, all merged from classpath.
! 	* Makefile.am
! 	(ordinary_java_source_files): Added the following files:
! 	gnu/java/util/prefs/FileBasedFactory.java,
! 	gnu/java/util/prefs/MemmoryBasedFactory.java,
! 	gnu/java/util/prefs/MemoryBasedPreferences.java,
! 	gnu/java/util/prefs/NodeReader.java,
! 	gnu/java/util/prefs/NodeWriter.java,
! 	(core_java_source_files): Added the following files:
! 	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
! 	* Makefile.in: Regenerated.
!  
! 2003-02-13  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.
! 	* java/net/ServerSocket.java: Merged with classpath.
! 	* java/net/Socket.java: Partly merged with classpath (Added some @since).
! 	* java/net/SocketImpl.java
! 	(localPort): Merged with classpath (initialize with -1).
! 	* java/net/SocketPermission.java: Merged with classpath (reindented).
! 	* java/net/URLDecoder.java: Merged with classpath (reindented).
  
! 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  Jeff Sturm  <jsturm@one-point.com>
  
! 	* configure.host (alpha*-*): Default to -mieee.
! 	* configure.in (IEEESPEC): New.
! 	* libgcj.spec.in (jc1): Add IEEESPEC.
! 	* configure: Rebuild.
  
! 2003-02-12  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* include/win32.h: Include ws2tcpip.h instead of
! 	winsock.h to obtain definition of the socklen_t type.
! 	Remove IP_TOS definition - not needed with ws2tcpip.h
! 	(_Jv_connect): Correct slight formatting error.
  
! 2003-02-12  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* jni.cc (_Jv_LookupJNIMethod): Modify to accept the
! 	size of the arguments for a JNI function. For Win32,
! 	modify to search for all forms of possible exported
! 	names of an stdcall JNI function.
! 	(_Jv_JNIMethod::call): Modify to calculate the size
! 	of the arguments passed to a JNI function and pass
! 	it to _Jv_LookupJNIMethod.
  
! 2003-02-12  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/channels/Channels.java: New file.
! 	* Makefile.am
! 	(ordinary_java_source_files): Added java/nio/channels/Channels.java.
  	* Makefile.in: Regenerated.
  
! 2003-02-12  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteBuffer.java
! 	(allocate): Implemented.
! 	(wrap): Implemented.
! 	* java/nio/CharBuffer.java:
! 	Some documentation added and reworked.
! 	(endian): Removed.
! 	(allocate): Implemented.
! 	(wrap): Implemented.
! 	(array): Throw exceptions.
! 	(arrayOffset): Throw exceptions.
! 	(toString): Implemented.
! 	(length): Implemented.
! 	(put): Implemented.
! 	(charAt): Implemented.
  
! 2003-02-11  John Leuner  <jewel@debian.org>
  
! 	* java/util/zip/ZipInputStream.java: Fix problem with 0-length 
! 	reads from end of file.
  
! 2003-02-11  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* java/io/natFileDescriptorWin32.cc 
! 	(java::io::FileDescriptor::read): Return -1 (EOF) if ReadFile( )
! 	returns with Win32 error code ERROR_BROKEN_PIPE.
  
! 2003-02-11  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.in
! 	(libgcj_la_OBJECTS): Removed natSelctorImpl.la.
  
! 2003-02-11  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java:
! 	Reformated and removed some code.
! 	(backing_buffer): Removed.	
! 	(array_offset): Removed.
! 	(ro): Renamed to readOnly.
! 	(ByteBufferImpl): Use parent constructor, initialize readOnly.
! 	* gnu/java/nio/CharBufferImpl.java:
! 	Reformated and removed some code.
! 	(array_offset): Removed.
! 	(ro): Renamed to readOnly.
! 	(CharBufferImpl): Use parent constructor, initialize readOnly.
! 	(inc_pos): Removed.
! 	(order): New method.
! 	* gnu/java/nio/DoubleBufferImpl.java:
! 	Reformated and removed some code.
! 	(array_offset): Removed.
! 	(ro): Renamed to readOnly.
! 	(DoubleBufferImpl): Use parent constructor, initialize readOnly.
! 	(inc_pos): Removed.
! 	(order): New method.
! 	* gnu/java/nio/FloatBufferImpl.java:
! 	Reformated and removed some code.
! 	(array_offset): Removed.
! 	(ro): Renamed to readOnly.
! 	(FloatBufferImpl): Use parent constructor, initialize readOnly.
! 	(inc_pos): Removed.
! 	(order): New method.
! 	* gnu/java/nio/IntBufferImpl.java:
! 	Reformated and removed some code.
! 	(array_offset): Removed.
! 	(ro): Renamed to readOnly.
! 	(IntBufferImpl): Use parent constructor, initialize readOnly.
! 	(inc_pos): Removed.
! 	(order): New method.
! 	* gnu/java/nio/LongBufferImpl.java:
! 	Reformated and removed some code.
! 	(array_offset): Removed.
! 	(ro): Renamed to readOnly.
! 	(LongBufferImpl): Use parent constructor, initialize readOnly.
! 	(inc_pos): Removed.
! 	(order): New method.
! 	* gnu/java/nio/ShortBufferImpl.java:
! 	Reformated and removed some code.
! 	(array_offset): Removed.
! 	(ro): Renamed to readOnly.
! 	(ShortBufferImpl): Use parent constructor, initialize readOnly.
! 	(inc_pos): Removed.
! 	(order): New method.
! 	* Makefile.am
! 	(ordinary_java_source_files): Added the following files:
! 	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/DoubleBuffer.java
! 	java/nio/FloatBuffer.java
! 	java/nio/IntBuffer.java
! 	java/nio/LongBuffer.java
! 	java/nio/ShortBuffer.java
! 	(nat_source_files): Added the following files:
! 	gnu/java/nio/natByteBufferImpl.cc
! 	gnu/java/nio/natCharBufferImpl.cc
! 	gnu/java/nio/natDoubleBufferImpl.cc
! 	gnu/java/nio/natFloatBufferImpl.cc
! 	gnu/java/nio/natIntBufferImpl.cc
! 	gnu/java/nio/natLongBufferImpl.cc
! 	gnu/java/nio/natShortBufferImpl.cc
  	* Makefile.in: Regenerated.
  
! 2003-02-11  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/natCharBufferImpl.cc
! 	(nio_cast): Removed.
! 	(nio_put_*): Removed.
! 	(nio_get_*): Removed.
! 	* gnu/java/nio/natDoubleBufferImpl.cc
! 	(nio_cast): Removed.
! 	(nio_put_*): Removed.
! 	(nio_get_*): Removed.
! 	* gnu/java/nio/natFloatBufferImpl.cc
! 	(nio_cast): Removed.
! 	(nio_put_*): Removed.
! 	(nio_get_*): Removed.
! 	* gnu/java/nio/natIntBufferImpl.cc
! 	(nio_cast): Removed.
! 	(nio_put_*): Removed.
! 	(nio_get_*): Removed.
! 	* gnu/java/nio/natLongBufferImpl.cc
! 	(nio_cast): Removed.
! 	(nio_put_*): Removed.
! 	(nio_get_*): Removed.
! 	* gnu/java/nio/natShortBufferImpl.cc
! 	(nio_cast): Removed.
! 	(nio_put_*): Removed.
! 	(nio_get_*): Removed.
! 	* gnu/java/nio/SelectorProviderImpl.java
! 	(openDatagramChannel): Throws IOException.
! 	(openPipe): Throws IOException.
! 	(openSelector): Throws IOException.
! 	(openServerSocketChannel): Throws IOException.
! 	(openSocketChannel): Throws IOException.
! 	* gnu/java/nio/ServerSocketChannelImpl.java
! 	(ServerSocketChannelImpl): Throws IOException.
! 	(implCloseSelectableChannel): Throws IOException.
! 	(implConfigureBlocking): Throws IOException.
! 	* java/nio/ByteBuffer.java
! 	(readOnly): Removed.
! 	(hasArray): Use isReadOnly() instead of readOnly.
! 	(array): Use isReadOnly() instead of readOnly.
! 	(arrayOffset): Use isReadOnly() instead of readOnly.
! 	* java/nio/CharBuffer.java
! 	(CharBuffer): Implements Cloneable and CharSequence.
  
! 2003-02-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/DoubleBuffer.java
! 	(DoubleBuffer): Implements Comparable.
! 	(endian): Removed.
! 	(array_offset): New member variable.
! 	(DoubleBuffer): New constuctor.
! 	(get): May not be final.
! 	(put): May not be final.
! 	(arrayOffset): Implemented.
! 	(order): Made abstract.
! 	(order): Removed.
! 	(as*Buffer): Removed.
! 	(get*): Removed.
! 	(put*): Removed.
! 	* java/nio/FloatBuffer.java
! 	(FloatBuffer): Implements Comparable.
! 	(endian): Removed.
! 	(array_offset): New member variable.
! 	(FloatBuffer): New constuctor.
! 	(get): May not be final.
! 	(put): May not be final.
! 	(arrayOffset): Implemented.
! 	(order): Made abstract.
! 	(order): Removed.
! 	(as*Buffer): Removed.
! 	(get*): Removed.
! 	(put*): Removed.
! 	* java/nio/IntBuffer.java
! 	(IntBuffer): Implements Comparable.
! 	(endian): Removed.
! 	(array_offset): New member variable.
! 	(IntBuffer): New constuctor.
! 	(get): May not be final.
! 	(put): May not be final.
! 	(arrayOffset): Implemented.
! 	(order): Made abstract.
! 	(order): Removed.
! 	(as*Buffer): Removed.
! 	(get*): Removed.
! 	(put*): Removed.
! 	* java/nio/LongBuffer.java
! 	(LongBuffer): Implements Comparable.
! 	(endian): Removed.
! 	(array_offset): New member variable.
! 	(LongBuffer): New constuctor.
! 	(get): May not be final.
! 	(put): May not be final.
! 	(arrayOffset): Implemented.
! 	(order): Made abstract.
! 	(order): Removed.
! 	(as*Buffer): Removed.
! 	(get*): Removed.
! 	(put*): Removed.
! 	* java/nio/ShortBuffer.java
! 	(ShortBuffer): Implements Comparable.
! 	(endian): Removed.
! 	(array_offset): New member variable.
! 	(ShortBuffer): New constuctor.
! 	(get): May not be final.
! 	(put): May not be final.
! 	(arrayOffset): Implemented.
! 	(order): Made abstract.
! 	(order): Removed.
! 	(as*Buffer): Removed.
! 	(get*): Removed.
! 	(put*): Removed.
  
! 2003-02-11   Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/channels/SelectionKey.java
! 	(OP_ACCEPT, OP_CONNECT, OP_READ, OP_WRITE): Initialize with correct
! 	values.
  
! 2003-02-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/channels/DatagramChannel.java
! 	(write): Throws IOException.
! 	(connect): Throws IOException.
! 	(disconnect): Throws IOException.
! 	(read): Throws IOException.
! 	(receive): Throws IOException.
! 	(send): Throws IOException.
! 	* java/nio/channels/Pipe.java
! 	(open): Throws IOException.
! 	* java/nio/channels/SelectableChannel.java
! 	(configureBlocking): Throws IOException.
! 	* java/nio/channels/ServerSocketChannel.java
! 	(accept): Throws IOException.
! 	* java/nio/channels/SocketChannel.java
! 	(SocketChannel): Implements ByteChannel, ScatteringByteChannel,
! 	GatheringByteChannel.
! 	(read): Throws IOException.
! 	(write): Throws IOException.
! 	(finishConnect): Throws IOException.
! 	* java/nio/channels/spi/AbstractInterruptibleChannel.java
! 	(end): Throws AsynchronousCloseException.
! 	* java/nio/channels/spi/AbstractSelectableChannel.java
! 	(configureBlocking): Throws IOException.
! 	(implCloseChannel): Throws IOException.
! 	(implCloseSelectableChannel): Throws IOException.
! 	(implConfigureBlocking): Throws IOException.
! 	* java/nio/channels/spi/SelectorProvider.java
! 	(openDatagramChannel): Throws IOException.
! 	(openPipe): Throws IOException.
! 	(openSelector): Throws IOException.
! 	(openServerSocketChannel): Throws IOException.
! 	(openSocketChannel): Throws IOException.
  
! 2003-02-11  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/FileLockImpl.java,
! 	java/nio/channels/FileLock.java: New files.
  
! 2003-02-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/charset/IllegalCharsetNameException.java
! 	(serialVersionUID): New member variable.
! 	(charsetName): New member variable.
! 	(IllegalCharsetException): New implementation.
! 	(getCharsetName): New implementation.
! 	* java/nio/charset/UnsupportedCharsetException.java
! 	(serialVersionUID): New member variable.
! 	(charsetName): New member variable.
! 	(UnsupportedCharsetException): New implementation.
! 	(getCharsetName): New implementation.
  
! 2003-02-10  Tom Tromey  <tromey@redhat.com>
  
! 	* javax/sql/ConnectionEvent.java (serialVersionUID): New field.
! 	(ex): Renamed from sqlException.
  
! 2003-02-10  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-10  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* java/lang/Win32Process.java (destroy): Declare as native.
! 	(hasExited): New native method.
! 	(exitValue): Define.
! 	(getErrorStream): Likewise.
! 	(getInputStream): Likewise.
! 	(getOutputStream): Likewise.
! 	(waitFor): Declare as native.
! 	(startProcess): New native method.
! 	(cleanup): Likewise.
! 	(ConcreteProcess): Define.
! 	(outputStream, inputStream, errorStream): New members.
! 	(procHandle, exitCode): Likewise.
  
! 	* java/lang/natWin32Process.cc
! 	(java::lang::ConcreteProcess::cleanup): Define.
! 	(java::lang::ConcreteProcess::destroy): Likewise.
! 	(java::lang::ConcreteProcess::hasExited): Likewise.
! 	(java::lang::ConcreteProcess::waitFor): Likewise.
! 	(new_string): Likewise.
! 	(java::lang::ConcreteProcess::startProcess): Likewise.
  
! 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-07  Mark Wielaard  <mark@klomp.org>
  
! 	* java/util/jar/JarFile.java (JarFile(String, boolean)): Read manifest
! 	when verify is true.
! 	(JarFile(File, boolean)): Likewise.
! 	(manifestRead): Set manifestRead field correctly.
  
! 2003-02-07  Stephen Crawley  <crawley@dstc.edu.au>
  
! 	* java/math/BigDecimal(valueOf): fix DiagBigDecimal val008, val013
! 	tests; see patch #1016 on Savannah.
  
! 2003-02-07  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-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-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  Ranjit Mathew <rmathew@hotmail.com>
  
! 	* java/lang/natRuntime.cc (java::lang::Runtime::_load)): Take care
! 	of the fact that on Win32, JNI_OnLoad is an "stdcall" function and
! 	could also have been exported as "JNI_OnLoad@8" (MinGW) or
! 	"_JNI_OnLoad@8" (MSVC).
  
! 2003-02-03  Ranjit Mathew <rmathew@hotmail.com>
  
! 	* resolve.cc (_Jv_JNIMethod::ncode): Use stdcall calling
! 	convention on Win32 to invoke native JNI methods.
  
! 2003-02-03  Andrew Haley  <aph@redhat.com>
  
! 	* configure.host (x86_64): Enable interpreter.
  
! 2003-02-03  Andrew Haley  <aph@redhat.com>
  
! 	* libgcj.spec.in (jc1): Add BACKTRACESPEC.
!         * configure.host (x86_64): Default to -fno-omit-frame-pointer.
!         * configure.in (BACKTRACESPEC): New.
!         * configure: Regenerate.
  
! 2003-02-02  Tom Tromey  <tromey@redhat.com>
  
  	* configure: Rebuilt.
- 	* configure.in (TOOLKIT) [xlib]: Set correctly.
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (lib_gnu_awt_xlib_la_LDFLAGS): Link against
! 	libstdc++.
  
! 2003-01-31  Mark WIelaard  <mark@klomp.org>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (gtk_c_headers): Strip trailing / from jniinclude.
  
! 2003-01-31  Tom Tromey  <tromey@redhat.com>
  
! 	* jni.cc (_Jv_JNI_NewObjectArray): Check that initializer can be
! 	cast to element type.
! 	(_Jv_JNI_SetObjectArrayElement): Check array bounds.
! 	(_Jv_JNI_GetObjectArrayElement): Likewise.
  
  	* Makefile.in: Rebuilt.
- 	* Makefile.am (cond_x_ltlibrary): Renamed library to
- 	lib-gnu-awt-xlib.la.
- 	(lib_gnu_awt_xlib_la_SOURCES): Renamed.
- 	(EXTRA_lib_gnu_awt_xlib_la_SOURCES): Likewise.
- 	(lib_gnu_awt_xlib_la_DEPENDENCIES): Likewise.
- 	(lib_gnu_awt_xlib_la_LIBADD): Likewise.
- 	(lib_gnu_awt_xlib_la_LDFLAGS): Likewise.
- 	(lib_gnu_awt_xlib_la_LINK): Likewise.
- 	(install-exec-hook): Removed.
- 	(lib-gnu-awt-xlib.la): Renamed.
  
! 2003-01-31  Tom Tromey  <tromey@redhat.com>
  
! 	* aclocal.m4, configure, include/config.h.in: Rebuilt.
! 	* acinclude.m4 (CHECK_FOR_BROKEN_MINGW_LD): Resurrected; was in
! 	aclocal.m4 and lost in some merge.
  
! 	* java/awt/Window.java (Window(Window,GraphicsConfiguration)):
! 	Don't try to find graphics configuration.
! 	* java/awt/Toolkit.java (default_toolkit_name): Use new
! 	Configuration entry.
! 	* gnu/classpath/Configuration.java.in (default_awt_peer_toolkit):
! 	New global.
! 	* configure: Rebuilt.
! 	* configure.in (TOOLKIT): New subst.
! 	(--enable-java-awt) [xlib, gtk]: Set TOOLKIT if required.
! 	Do AWT tests much earlier.  Run Gtk tests.  Make jniinclude
! 	directory.  Make output directories for .c files.
  	* Makefile.in: Rebuilt.
! 	* Makefile.am (lib_gnu_java_awt_peer_gtk_la_SOURCES): New macro.
! 	(toolexeclib_LTLIBRARIES): Added cond_gtk_ltlibrary.
! 	(all_java_source_files): Added new sources.
! 	($(lib_gnu_java_awt_peer_gtk_la_OBJECTS)): New target.
! 	(gtk_c_files): New macro.
! 	(gtk_c_source_files): New macro.
! 	(cond_gtk_ltlibrary): New macro.
! 	($(gtk_c_files)): New target.
! 	(lib_gnu_java_awt_peer_gtk_la_LIBADD): New macro.
! 	(gtk_awt_peer_sources): New macro.
! 	(gtk_c_headers): New macro.
! 	($(gtk_c_headers)): New target.
! 	(ACLOCAL_AMFLAGS): New macro.
! 	* gtk.m4, glib.m4, libart.m4: New files.
! 	* 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/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/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/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/GtkToolkit.java,
! 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
! 	gnu/java/awt/peer/gtk/TestAWT.java,
! 	gnu/java/awt/peer/gtk/Test.java: New files from Classpath.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.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_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_GtkEvents.c,
! 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.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_GtkMainThread.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_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/gthread-jni.c, jni/gtk-peer/gthread-jni.h,
! 	jni/gtk-peer/gtkpeer.h, jni/classpath/jcl.c, jni/classpath/jcl.h,
! 	jni/classpath/jnilink.c, jni/classpath/jnilink.h,
! 	jni/classpath/native_state.c, jni/classpath/native_state.h,
! 	jni/classpath/primlib.c, jni/classpath/primlib.h: Likewise.
  
! 2003-01-31  Julian Dolby  <dolby@us.ibm.com>
  
! 	* java/util/Properties.java (load): Ignore backslash before EOF.
  
! 2003-01-30  Jeff Sturm  <jsturm@one-point.com>
  
! 	* java/lang/natClass.cc (initializeClass): Check tables when
! 	(state == JV_STATE_IN_PROGRESS).
! 	(_Jv_GetInterfaces): Use _Jv_WaitForState to link interface.
! 	* java/lang/natClassLoader.cc (_Jv_WaitForState): Handle
! 	interpreted classes.
! 	(linkClass0): Use _Jv_WaitForState.
  
! 2003-01-28  Oscar Pearce  <oscar@pearceenterprises.com>
  
! 	* java/awt/Component.java (processPaintEvent): Dispose of Graphics
! 	object when finished.
  
! 2003-01-28  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* libjava/configure.host: Disable can_unwind_signal on darwin.
  
! 2003-01-28  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	Fixes PR java/9254:
! 	* include/win32-threads.h (_Jv_Mutex_t): Convert to a struct
! 	additionally containing id of the owner thread as well as
! 	the number of nested times the thread has acquired the mutex.
! 	(_Jv_MutexInit): Initialise owner thread id and refcount to 0.
! 	(_Jv_MutexDestroy): Reset owner thread id and refcount to 0.
! 	(_Jv_MutexUnlock): Check if really the owner thread, reset
! 	owner thread id to 0 before leaving, if leaving for the last
! 	time.
! 	(_Jv_MutexLock): Set owner thread id in the mutex and increment
! 	refcount.
! 	(_Jv_ThreadYield): Yield using a call to Sleep(0).
! 	* win32-threads.cc (_Jv_CondWait): Check if really owner of
! 	the passed mutex.
! 	Pass handle of the broadcast event, instead of a pointer to it
! 	in Win32 ResetEvent( ) call.
! 	Remove incorrect return values.
! 	(_Jv_CondDestroy): Close both event handles and delete
! 	critical section.
! 	(_Jv_CondNotify): Check if really the owner thread.
! 	(_Jv_CondNotifyAll): Check if really the owner thread.
! 	(_Jv_InitThreads): Change daemon_cond to a manual-reset event.
! 	(really_start): Use SetEvent( ) to signal daemon_cond.
! 	(_Jv_ThreadWait): Remove SignalObjectAndWait( ) and use
! 	WaitForSingleObject( ) instead to wait for daemon_cond to be
! 	signalled.
  
! 2003-01-27  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* configure.in: Specifically define HAVE_BACKTRACE if building
! 	for MinGW.
! 	* include/win32.h: Remove HAVE_BACKTRACE definition.
! 	* gnu/gcj/runtime/natStackTrace.cc: Include platform.h.
! 	* configure: Rebuilt.
  
! 2003-01-27  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* configure.in (toolexecdir, toolexecmainlibdir, toolexeclibdir):
! 	Set and AC_SUBST.  Remove USE_LIBDIR conditional.
! 	* Makefile.am (toolexecdir, toolexeclibdir): Don't override.
! 	(toolexecmainlib_DATA): Renamed from toolexeclib_DATA.
! 	* Makefile.in, configure: Rebuilt.
  
! 2003-01-24  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	Fixes PR java/9253:
! 	* java/io/natFileWin32.cc (performList): Append only "*.*"
! 	if the canonical file path already has a "\" at the end.
  
! 2003-01-24  Tom Tromey  <tromey@redhat.com>
  
! 	* defineclass.cc (handleMethodsEnd): Precompute code for static
! 	method.
! 	(handleCodeAttribute): Likewise.
! 	* resolve.cc (ncode): Use run_class for unsynchronized static
! 	methods.
! 	* include/java-interp.h (class _Jv_InterpMethod): Declare
! 	run_class.
! 	* interpret.cc (run_synch_class): Initialize class.
! 	(run) [insn_invokestatic]: Don't initialize class.
! 	[insn_anewarray]: Likewise.
! 	[insn_multianewarray]: Likewise.
! 	(run_class): New function.
  
! 2003-01-24  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ClassLoader.java (findLoadedClass): Removed erroneous
! 	comment.
  
! 2003-01-22  Andrew Haley  <aph@redhat.com>
  
!         * x86_64-signal.h: Add simple handler for x86_64 32-bit mode.
!         * configure.host (CHECKREFSPEC): Define for x86_64.
  
! 2003-01-21  Tom Tromey  <tromey@redhat.com>
  
! 	* java/util/natResourceBundle.cc (getCallingClassLoader): Start
! 	search at 2, not 3.
  
! 2003-01-21  Vladimir Puskas  <vpuskas@eunet.yu>
  
! 	* java/io/natFileWin32.cc (isAbsolute): Check path length before
! 	looking at any characters.
! 	* java/io/natFilePosix.cc (_stat): Only compute `buf' if it will
! 	be used.
! 	(isAbsolute): Check path's length as well.
  
! 2003-01-17  Mark Wielaard  <mark@klomp.org>
  
! 	* Makefile.am (core_java_source_files): Add VMObjectStreamClass.java.
! 	(nat_source_files): Add natVMObjectStreamClass.cc.
  	* Makefile.in: Regenerated.
! 	* gcj/javaprims.h (namespace java): Regenerated.
! 	* java/io/ObjectStreamClass.java (getClassUID): Call
! 	VMObjectStreamClass.hasClassInitializer().
! 	(hasClassInitializer): Removed.
! 	* java/io/VMObjectStreamClass.java: New class.
! 	* java/io/natVMObjectStreamClass.cc: New file.
! 	* java/lang/Class.h: Make java::io::VMObjectStreamClass friend class.
  
! 2003-01-16  Mark Wielaard  <mark@klomp.org>
  
! 	* java/net/SocketImpl.java (toString): Don't explicitly call
! 	toString() on possible null address.
  
! 2003-01-16  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/MulticastSocket.java
! 	(setInterface): Reindented.
  
! 2003-01-15  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* gnu/gcj/xlib/natGC.cc (fillPolygon): New method.
! 	* gnu/gcj/xlib/GC.java (fillPolygon): Declare.
! 	* gnu/awt/xlib/XGraphics.java (fillPolygon): Added translateX and
! 	translateY arguments.  Implement.
! 	* gnu/awt/j2d/IntegerGraphicsState.java (fillPolygon): Pass
! 	down translation arguments.
! 	(drawPolyline, drawPolygon): Fix incorrect tests.
! 	* gnu/awt/j2d/DirectRasterGraphics.java (fillPolygon): Added
! 	translateX and translateY arguments.
  
! 2003-01-15  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (xlib_includes): New macro.
! 	(INCLUDES): Use it.
  
! 2003-01-15  Scott Gilbertson  <scottg@mantatest.com>
  
! 	* gnu/awt/xlib/XToolkit.java (getColorModel): Implemented.
! 	* gnu/awt/xlib/XGraphicsConfiguration.java (getPixel): Work with
! 	16-bit display mode.
  
! 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  Andrew Haley  <aph@redhat.com>
  
! 	* java/lang/natRuntime.cc (_load): StackTrace access needs to be
! 	in a try block.
  
! 2003-01-10  Andrew Haley  <aph@redhat.com>
  
! 	* include/dwarf2-signal.h: Remove x86_64.
! 	* configure.host (x86_64 DIVIDESPEC): Remove.
! 	* include/x86_64-signal.h: New file.
! 	* configure.in: Regenerate.
  
! 2003-01-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(ch): Description added.
! 	(remotePort): Initialize with -1.
! 	(connect): Doesnt throws SocketException.
! 	* java/net/MulticastSocket.java
! 	(setInterface): Merge with Classpath.
! 	* java/net/ServerSocket.java
! 	(closed): New member variable.
! 	(bind): Check if socket is closed.
! 	(close): Close an associated channel too, set new value to closed.
! 	(isBound): Reindented.
! 	(isClosed): Implemented.
! 	* java/net/Socket.java
! 	(closed): New member variable.
! 	(bind): Check if socket is closed.
! 	(connect): Check if socket is closed.
! 	(close): Close an associated channel too, set new value to closed.
! 	(isClosed): Implemented.
  
! 2003-01-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/DisplayMode.java
! 	(equals): Fixed argument type and implementation.
  
! 2003-01-07  Tom Tromey  <tromey@redhat.com>
  
! 	* include/posix.h (_Jv_platform_usleep): Wrap in ifdef
! 	JV_HASH_SYNCHRONIZATION.
! 	* include/win32.h (_Jv_platform_usleep): Wrap in ifdef
! 	JV_HASH_SYNCHRONIZATION.
  
! 2003-01-07  Michael Koch  <konqueror@gmx.de>
!  
!  	* java/net/DatagramSocket.java:
!  	Added classpath license info.
!  	(DatagramSocket): Merged description with classpath.
!  	(close): Merged description with classpath.
!  	(getChannel): Merged description with classpath.
!  	(getInetAddress): Merged description with classpath.
!  	(getPort): Merged description with classpath.
!  	(getLocalAddress): Merged description with classpath.
!  	(getLocalPort): Merged description with classpath.
!  	(getSoTimeout): Merged description with classpath.
!  	(setSoTimeout): Merged description with classpath.
!  	(getSendBufferSize): Merged description with classpath.
!  	(setSendBufferSize): Merged description with classpath.
!  	(getReceiveBufferSize): Merged description with classpath.
!  	(setReceiveBufferSize): Merged description with classpath.
! 	
! 2003-01-04  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/List.java: Merged with Classpath.
  
! 2003-01-03  Mark Wielaard  <mark@klomp.org>
  
! 	* java/io/FileDescriptor.java (position): New private field.
! 	* java/io/natFileDescriptorPosix.cc (write): Up position.
! 	(setLength): Use and set position.
! 	(seek): Set position.
! 	(getFilePointer): Return position.
! 	(read): Up position.
  
! 2003-01-03  Mark Wielaard  <mark@klomp.org>
  
! 	Merge with Classpath:
! 	* java/io/ObjectStreamClass.java (lookup): Split method and call
! 	lookupForClassObject().
! 	(lookupForClassObject): New method.
! 	(isProxyClass): New field.
! 	(setClass): Set isProxyClass, add object to classLookupTable, set
! 	superClass and calculateOffsets.
! 	(ObjectStreamClass): Set isProxyClass. Only set uid when Serializable
! 	and not a proxy class.
! 	(setFields): Set accessible true for serialPersistentFields.
! 	(getClassUID): Same for suid. And check if suid is of type long.
! 	(hasClassInitializer): Don't throw NoSuchMethodError.
  
! 2003-01-03  Mark Wielaard  <mark@klomp.org>
  
! 	* java/io/FileInputStream.java (finalize): Don't explicitly
! 	finalize FileDescriptor.
  
! 2003-01-03  Jeff Sturm  <jsturm@one-point.com>
  
! 	* configure.host (sparc*-*): Enable bytecode interpreter.
  
! 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-03  Joerg Brunsmann  <joerg_brunsmann@yahoo.de>
  
! 	* gnu/gcj/protocol/http/Connection.java (proxyPort, proxyInUse,
! 	proxyHost): New static fields.
! 	(<clinit>): Initialize new fields.
! 	(connect): Use proxy if necessary.
! 	(usingProxy): Implement.
  
! 2003-01-03  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-22  Anthony Green  <green@redhat.com>
  
! 	* boehm.cc (_Jv_MarkObj): Mark the protectionDomain of a class.
  
! 2003-01-02  Mark Wielaard  <mark@klomp.org>
  
! 	* java/net/HttpURLConnection.java (HTTP_NOT_IMPLEMENTED): Must be
! 	public.
! 	(HTTP_USE_PROXY): Add field.
! 	(getResponseVals): Only set responseCode when not yet explicitly
! 	set by subclass.
  
! 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-02  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-01  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (rmi_java_source_files): Added RMIClassLoaderSpi.
! 	* java/awt/AlphaComposite.java, java/awt/BasicStroke.java,
! 	java/awt/BufferCapabilities.java, java/awt/Button.java,
! 	java/awt/CheckboxMenuItem.java, java/awt/Choice.java,
! 	java/awt/Container.java, java/awt/Cursor.java,
! 	java/awt/EventQueue.java, java/awt/FileDialog.java,
! 	java/awt/Graphics2D.java, java/awt/Label.java, java/awt/Menu.java,
! 	java/awt/MenuBar.java, java/awt/MenuComponent.java,
! 	java/awt/PopupMenu.java, java/awt/ScrollPane.java,
! 	java/awt/Scrollbar.java, java/awt/TextArea.java,
! 	java/awt/TextField.java, java/awt/color/CMMException.java,
! 	java/awt/color/ColorSpace.java, java/awt/color/ICC_Profile.java,
! 	java/awt/color/ProfileDataException.java,
! 	java/awt/datatransfer/Clipboard.java,
! 	java/awt/datatransfer/DataFlavor.java,
! 	java/awt/datatransfer/FlavorMap.java,
! 	java/awt/datatransfer/SystemFlavorMap.java,
! 	java/awt/dnd/DragGestureEvent.java,
! 	java/awt/dnd/DragGestureRecognizer.java,
! 	java/awt/dnd/DragSource.java, java/awt/dnd/DropTarget.java,
! 	java/awt/event/WindowEvent.java, java/awt/geom/PathIterator.java,
! 	java/awt/im/InputMethodHighlight.java,
! 	java/io/PipedOutputStream.java, java/io/PipedWriter.java,
! 	java/rmi/server/RMIClassLoader.java: Merged from Classpath.
  
! 	* gnu/awt/j2d/Graphics2DImpl.java (drawImage): Changed type of
! 	`op' to BufferedImageOp.
  
! 2002-12-31  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/7416:
! 	* javax/naming/InitialContext.java (init): 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-31  Tom Tromey  <tromey@redhat.com>
!             Ranjit Mathew  <rmathew@hotmail.com>
  
! 	Fix for PR libgcj/8997:
! 	* java/lang/natObject.cc (spin): Use _Jv_platform_usleep.
! 	Include platform.h.
! 	* include/posix.h (_Jv_platform_usleep): New function.
! 	* include/win32.h (_Jv_platform_usleep): New function.
  
! 2002-12-29  Tom Tromey  <tromey@redhat.com>
  
! 	* gcj/javaprims.h: Updated.
! 	* scripts/classes.pl (scan): Removed stray semicolon.
  
! 2002-12-30  Mark Wielaard  <mark@klomp.org>
  
! 	* java/net/URLStreamHandler.java (toExternalForm): Ignore port
! 	if zero or smaller.
  
! 2002-12-30  Mark Wielaard  <mark@klomp.org>
  
! 	* java/util/Properties (formatForOutput): Don't fall through to
! 	default case after escaping character.
  
! 2002-12-30  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/StringBuffer.java (getChars): Remove wrong dstOffset check
! 	against count.
  
! 2002-12-27  Mark Mitchell  <mark@codesourcery.com>
  
! 	* boehm.cc: Remove stray semicolon.
! 	* interpret.cc: Likewise.
! 	* prims.cc: Likewise.
! 	* verify.cc (_Jv_BytecodeVerifier::verify_fail): Move definition
! 	earlier to ensure default arguments are processed.
! 	* gcj/array.h (JArray): Add forward declaration.
! 	(elements): Likewise.
! 	* gcj/javaprim.h: Remove stray semicolons.
! 	* include/bohm-gc.h: Likewise.
! 	* include/jni.h: Likewise.
! 	* include/jvm.h: Likewise.
! 	* java/lang/Class.h (_Jv_GetArrayClass): Declare _Jv_NewArrayClass.
! 	
! 2002-12-23  Jeff Sturm  <jsturm@one-point.com>
  
! 	* exception.cc (PERSONALITY_FUNCTION): Clear least-significant-bit
! 	of catch_type.
! 	* java/lang/natClass.cc (initializeClass): Link vtable, otable,
! 	idt tables after initializing superclass.
! 	* java/lang/natClassLoader.cc (uaddr): New typedef.
! 	(_Jv_PrepareCompiledClass): Resolve superclass, interfaces
! 	if they are constant pool indicies.  Don't link vtable, otable yet.
  
! 2002-12-21  Anthony Green  <green@redhat.com>
  
! 	* Makefile.am: Move org.xml.sax and org.w3c.dom into their own
! 	libraries.
! 	* Makefile.in: Rebuilt.
  
! 2002-12-19  Anthony Green  <green@redhat.com>
  
! 	* Makefile.am (ordinary_java_source_files): Add
! 	org/xml/sax/helpers/NewInstance.java.
! 	* Makefile.in: Rebuilt.
! 	* org/xml/sax/package.html, org/xml/sax/ext/package.html,
! 	org/xml/sax/helpers/package.html: New files.
! 	* org/xml/sax/*: Upgrade to SAX 2.0.1 release from
! 	http://www.saxproject.org.
  
! 2002-12-19  Andrew Haley  <aph@redhat.com>
  
! 	* java/util/natResourceBundle.cc: Include
! 	ArrayIndexOutOfBoundsException.h.
! 	(getCallingClassLoader): Don't put upper bound on stack search.
! 	Catch ArrayIndexOutOfBoundsException.
  
! 2002-12-19  Tom Tromey  <tromey@redhat.com>
  
! 	* libtool-version: Increased `current'.
  
! 2002-12-19  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natClassLoader.cc (defineClass0): Removed erroneous
! 	comment.
! 	* java/lang/ClassLoader.java (defineClass): Use chained
! 	exception when rethrowing.
! 	* defineclass.cc (handleClassBegin): Mark class as interpreted.
! 	* java/lang/reflect/Modifier.java (INVISIBLE, INTERPRETED): New
! 	constants.
! 	* resolve.cc (_Jv_PrepareMissingMethods): New function.
! 	(_Jv_PrepareClass): Use it.
! 	* include/java-interp.h (_Jv_IsInterpretedClass): Rewrote.
! 	(_Jv_InterpClass): _Jv_PrepareMissingMethods now friend.
! 	* java/lang/Class.h (Class::getModifiers): Mask with ALL_FLAGS.
! 	(Class): _Jv_PrepareMissingMethods now friend.
! 	* java/lang/natClassLoader.cc (defineClass0): Use JvSynchronize.
! 	Record `NULL' for system class loader.
! 	(_Jv_RegisterInitiatingLoader): Use JvSynchronize.  Special case
! 	system class loader.
! 	(_Jv_FindClassInCache): Likewise.
! 	(_Jv_UnregisterClass): Use JvSynchronize.  Free old loader info.
! 	(_Jv_FindClass): Special case system class loader.
! 	* java/lang/natClass.cc (_Jv_abstractMethodError): New function.
! 	(_Jv_SetVTableEntries): Put _Jv_abstractMethodError into empty
! 	vtable slots.
! 	(_Jv_LayoutVTableMethods): Don't generate vtable slot for a method
! 	in a final class.
! 	(_getDeclaredMethod): Don't return synthetic methods.
! 	(getDeclaredMethods): Likewise.
! 	(_getMethod): Likewise.
! 	(_getMethods): Likewise.
  
! 2002-12-18  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  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/ClassLoader.java (resolveClass0): Transform
! 	ClassNotFoundException to NoClassDefFoundError. Transform all other
! 	throwables to LinkageError.
  
! 2002-12-11  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ClassLoader.java (findLoadedClass): Now synchronized.
  
! 	* java/lang/ClassLoader.java (loadedClasses): New field.
! 	(defineClass): Fixed indentation.  Put new class in
! 	loadedClasses.
! 	(findLoadedClass): Implement here.
! 	* java/lang/natClassLoader.cc (findLoadedClass): Removed.
  
! 2002-12-10  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (nat_source_files): Added natVMClassLoader.cc.
! 	* gnu/gcj/runtime/natVMClassLoader.cc: New file.
! 	(gnu::gcj::runtime::VMClassLoader::findClass): Moved here.
! 	* java/lang/natClassLoader.cc
! 	(gnu::gcj::runtime::VMClassLoader::findClass): Removed.
  
! 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-10  Tom Tromey  <tromey@redhat.com>
  
! 	* include/win32.h: Fixed typo in "DISABLE_JAVA_NET".
! 	From Laurent Bardet <l.bardet@magic.fr>.
  
! 2002-12-09  Tom Tromey  <tromey@redhat.com>
  
! 	* include/win32.h (_Jv_platform_solib_prefix): New define.
! 	(_Jv_platform_solib_suffix): Likewise.
! 	* include/posix.h (_Jv_platform_solib_prefix): New define.
! 	(_Jv_platform_solib_suffix): Likewise.
! 	* java/lang/natRuntime.cc: Include StackTrace.h.
! 	(_load): Use findLibrary and new platform defines.
! 	(nativeGetLibname): Use new platform defines.
  
! 	* java/util/natResourceBundle.cc (getCallingClassLoader): Assume
! 	`t' won't be null.
  
! 2002-12-08  Mark Wielaard  <mark@klomp.org>
  
! 	* gnu/gcj/protocol/jar/Connection.java (getJarFile): download and
! 	cache remote jar files.
! 	* gnu/gcj/runtime/VMClassLoader.java: Don't construct jar URL, only
! 	add File.separator to URL when it is a directory.
! 	* java/lang/ClassLoader.java: Add Classpath javadoc.
! 	(parent): final.
! 	(getParent): Add (disabled) security check.
! 	(findLibrary): New default method.
! 	* java/net/JarURLConnection.java (getManifest): Implement.
! 	(getInputStream): Only create InputStream when entry exists.
! 	(getHeaders): Only use jarFileURLConnection or JarEntry to set length
! 	when they exist.
! 	* java/net/URLClassLoader.java: New/Rewritten version from Classpath.
  
! 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-06  Mark Wielaard  <mark@klomp.org>
  
! 	* java/net/InetAddress.java (toString): Use hostname when not null,
! 	don't do an explicit reverse getHostName() lookup.
! 	* java/net/Socket.java (setSocketImplFactory): When fac == null throw
! 	NullPointerException.
  
! 2002-12-06  Tom Tromey  <tromey@redhat.com>
  
! 	* include/java-interp.h (class _Jv_InterpMethod): Added
! 	JV_MARKOBJ_DECL.
! 	* boehm.cc (_Jv_MarkObj): Consolidated interpreter code.  Also
! 	mark `prepared' field of interpreted method.
! 	* interpret.cc (compile): Use _Jv_AllocBytes.
  
! 2002-12-05  Andrew Haley  <aph@redhat.com>
  
! 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Throw
! 	#ifdef (HAVE_BACKTRACE) around the whole function body.
  
! 2002-12-05  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Class.h (_Jv_SetVTableEntries): Updated declaration.
! 	* resolve.cc: Don't include AbstractMethodError.h.
! 	(_Jv_abstractMethodError): Removed.
! 	* defineclass.cc (handleMethodsBegin): Initialize method index to
! 	-1.
! 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Don't set
! 	method index for "new" final method.
! 	(_Jv_SetVTableEntries): Compare index against -1 instead of using
! 	isVirtualMethod.  Added `flags' argument.
! 	(_Jv_MakeVTable): Throw exception for abstract method in concrete
! 	class.
  
! 2002-12-04  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/SocketPermission.java (hashCode): Rewrote.
  
! 2002-12-04  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (nat_source_files): Added natVMSecurityManager,
! 	natResourceBundle.
! 	* java/util/ResourceBundle.java (Security): Removed.
! 	(getCallingClassLoader): Now native.
! 	* java/util/natResourceBundle.cc: New file.
! 	* java/lang/natVMSecurityManager.cc: New file.
! 	* java/lang/VMSecurityManager.java (getClassContext): Now native.
  
! 2002-12-03  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-12-03  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Character.java (forDigit): Formatting fix.
  
! 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-03  Andrew Haley  <aph@redhat.com>
  
! 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Call
! 	_Jv_PushClass.
! 	(_Jv_InitNewClassFields): Set protectionDomain and chain = NULL.
! 	(_Jv_PopClass): New.
! 	(_Jv_PushClass): New.
! 	* java/lang/natClass.cc (forName (jstring)): Use a StackTrace to
! 	discover the ClassLoader of our caller.
! 	(_Jv_CheckArrayStore): Don't check that a class is assignment
! 	compatible with Object.
! 	* java/lang/natVMTHrowable.cc: Delete.
! 	* gnu/gcj/runtime/StackTrace.java: New, partly copied from
! 	java.lang.VMThrowable.
! 	(StackTrace(), StackTrace(int)): New constructors.
! 	(classAt, methodAt, update, methodAtAddress): New methods.
! 	(map): New field.
! 	* java/lang/VMThrowable.java: Use StackTrace instead of
! 	natVMTHrowable.
! 	* java/lang/Class.h (getClassLoaderInternal): New.
! 	(class Class): Be friendly with _Jv_PopClass and _Jv_PushClass.
! 	Be friendly with gnu::gcj::runtime::StackTrace.
! 	(Object.chain): New field.
! 	* include/java-interp.h (class _Jv_InterpMethod): Be friendly with
! 	gnu::gcj::runtime::StackTrace.
! 	* gnu/gcj/runtime/natStackTrace.cc: New file.
! 	* gnu/gcj/runtime/MethodRef.java: New file.
! 	* prims.cc (_Jv_NewObjectArray): Use getClassLoaderInternal()
! 	instead of getClassLoader().
! 	* verify.cc (class _Jv_BytecodeVerifier): Likewise.
! 	java::lang::VMThrowable.
! 	* Makefile.am (core_java_source_files): Add MethodRef.java,
! 	StackTrace.java.
! 	(nat_source_files): Remove natVMThrowable.cc; add natStackTrace.cc.
! 	* Makefile.in: Rebuild.
  
! 2002-12-02  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	* configure.host [sh-linux* | sh[34]*-linux*]: Don't set
! 	CHECKREFSPEC and EXCEPTIONSPEC. Set can_unwind_signal to
! 	yes also for sh-linux* and sh[34]*-linux*.
! 	* configure.in: Add sh-linux* and sh[34]*-linux* cases and
! 	set SIGNAL_HANDLER to use DWARF2 exception for them.
  	* configure: Regenerate.
  
! 2002-12-02  Tom Tromey  <tromey@redhat.com>
  
! 	* jni.cc: Added `name' argument.
! 	* include/jni.h (struct JNINativeInterface) [DefineClass]: Added
! 	`const char *' argument.
! 	(class _Jv_JNIEnv) [DefineClass]: Likewise.
  
! 2002-12-01  Tom Tromey  <tromey@redhat.com>
  
! 	Bug compatibility, for PR libgcj/8738:
! 	* 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-12-01  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/SecurityManager.java: Remerge comments, indenting and
! 	checkXXX methods with Classpath.
  
! 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>
  
! 	For PR libgcj/8759:
! 	* java/beans/Introspector.java (flushCaches): New method.
! 	(flushFromCaches): Likewise.
  
! 2002-11-29  Michael Koch <konqueror@gmx.de>
  
! 	* java/nio/channels/DatagramChannel.java
! 	(open): Added exception documentation.
! 	(write): Added exception documentation.
! 	(connect): Added exception documentation.
! 	(disconnect): Added exception documentation.
! 	(isConnected): Added exception documentation.
! 	(read): Added exception documentation.
! 	(receive): Added exception documentation.
! 	(send): Added exception documentation.
! 	(validOps): 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-11-29  Michael Koch <konqueror@gmx.de>
  
! 	* gnu/java/nio/DatagramChannelImpl:
! 	(fd): New member variable to store file descriptor of socket.
! 	* gnu/java/nio/SelectionKeyImpl.java:
! 	(ops): Removed.
! 	(readyOps): New member variable.
! 	(interestOps): New member variable.
! 	(readyOps): Implemented.
! 	(readyOps): New method to set member variable readyOps.
! 	(interestOps): Replaced ops by interestOps.
! 	* gnu/java/nio/SelectorImpl.java:
! 	(SelectorImpl): Initialize key sets.
! 	(select): Call select with -1 instead of Long.MAX_VALUE).
! 	(java_do_select): Make it a native method.
! 	(getFDsAsArray): New helper method.
! 	(select): Remove canceled keys, give only interested file discriptors
! 	to java_do_select, set ready ops.
! 	(add): No need to initialize keys set here.
! 	(add_selected): No need to initialize selected set here.
! 	(deregisterCanceledKeys): New helper method.
! 	(register): Set interest ops, set attachments, added handling of datagram
! 	channels.
! 	* gnu/java/nio/ServerSocketChannelImpl:
! 	(SocketAccept): Renamed from NioSocketAccept.
! 	(implConfigureBlocking): Implemented.
! 	(accept): Use SocketAccept instead of NioSocketAccept.
! 	* gnu/java/nio/SocketChannelImpl:
! 	Reactivate native methods.
  
! 2002-11-29  Michael Koch <konqueror@gmx.de>
  
! 	* gnu/java/nio/natByteBufferImpl.cc,
! 	gnu/java/nio/natCharBufferImpl.cc,
! 	gnu/java/nio/natDoubleBufferImpl.cc,
! 	gnu/java/nio/natFloatBufferImpl.cc,
! 	gnu/java/nio/natIntBufferImpl.cc,
! 	gnu/java/nio/natLongBufferImpl.cc,
! 	gnu/java/nio/natSelectorImpl.cc,
! 	gnu/java/nio/natServerSocketChannelImpl.cc,
! 	gnu/java/nio/natShortBufferImpl.cc,
! 	gnu/java/nio/natSocketChannelImpl.cc:
! 	New files that implement native functionalities.
  
! 2002-11-29  Michael Koch <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java
! 	(ByteBufferImpl): Moved position() after limit.
! 	(nio_*): Use native implementation.
! 	* gnu/java/nio/CharBufferImpl.java:
! 	Reformated.
! 	(endian): New member variable string endianess of buffer.
! 	(CharBufferImpl): Moved position() after limit.
! 	(nio_*): Use native implementation.
! 	(subSequence): Implemented.
! 	* gnu/java/nio/DoubleBufferImpl.java
! 	(DoubleBufferImpl): Moved position() after limit.
! 	(nio_*): Use native implementation.
! 	* gnu/java/nio/FloatBufferImpl.java
! 	Reformated.
! 	(FloatBufferImpl): Moved position() after limit.
! 	(nio_*): Use native implementation.
! 	* gnu/java/nio/IntBufferImpl.java
! 	Added needed imports, Reformated.
! 	(IntBufferImpl): Moved position() after limit.
! 	(nio_*): Use native implementation.
! 	* gnu/java/nio/LongBufferImpl.java
! 	Reformated.
! 	(LongBufferImpl): Moved position() after limit.
! 	(nio_*): Use native implementation.
! 	* gnu/java/nio/ShortBufferImpl.java
! 	Reformated.
! 	(ShortBufferImpl): Moved position() after limit.
! 	(nio_*): Use native implementation.
  
! 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-26  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (pop_init_ref): New method.
! 	(verify_instructions_0) [op_iaload, op_laload, op_faload,
! 	op_daload, op_aaload, op_baload, op_caload, op_saload, op_iastore,
! 	op_lastore, op_fastore, op_dastore, op_aastore, op_bastore,
! 	op_castore, op_sastore, op_areturn, op_arraylength, op_checkcast,
! 	op_instanceof, op_monitorenter, op_monitorexit]: Use it.
! 	(verify_instructions_0) [op_invokevirtual, op_invokespecial,
! 	op_invokestatic, op_invokeinterface]:  Use pop_init_ref.  Don't
! 	let `this' argument be uninitialized.  Don't let `null' be passed
! 	as `this' to construtor.
  
! 2002-11-26  Mark Wielaard  <mark@klomp.org>
  
! 	* javax/transaction/HeuristicCommitException.java: Classpath merge.
! 	* javax/transaction/HeuristicMixedException.java: Likewise.
! 	* javax/transaction/HeuristicRollbackException.java: Likewise.
! 	* javax/transaction/InvalidTransactionException.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/TransactionRequiredException.java: Likewise.
! 	* javax/transaction/TransactionRolledbackException.java: Likewise.
! 	* javax/transaction/UserTransaction.java: Likewise.
! 	* javax/transaction/xa/XAException.java: Likewise.
! 	* javax/transaction/xa/XAResource.java: Likewise.
! 	* javax/transaction/xa/Xid.java: Likewise.
  
! 2002-11-26  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* java/net/natPlainDatagramSocketImpl.cc (socklen_t): Don't
! 	define.
! 	* java/net/natPlainSocketImpl.cc (socklen_t): Don't define.
! 	* include/posix.h (socklen_t): Define if not already defined.
  
! 2002-11-25  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (type::compatible): Backed out broken change.
  
! 	* verify.cc (type::compatible): Check initialization status
! 	first.
! 	* interpret.cc (run) [insn_invokespecial, invokespecial_resolved]:
! 	Don't use NULLCHECK.
  
! 2002-11-23  H.J. Lu <hjl@gnu.org>
  
! 	* acinclude.m4 (AC_COMPILE_CHECK_SIZEOF): Removed.
! 	Include ../config/accross.m4.
! 	* aclocal.m4; Rebuild.
! 	* configure: Likewise.
  
! 2002-11-23  Mark Wielaard  <mark@klomp.org>
  
! 	* javax/naming/AuthenticationException.java: Update copyright header.
! 	* 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.
  
! 	* javax/naming/spi/NamingManager.java (ofb): Package private.
  
! 2002-11-21  Mark Wielaard  <mark@klomp.org>
  
! 	* java/net/URL.java: Merge with Classpath (partly).
! 	* java/net/URLStreamHandler: Merge with Classpath.
  
! 2002-11-22  Michael Koch <konqueror@gmx.de>
  
! 	* include/posix.h:
! 	(_Jv_platform_on_close): Moved out of #ifndef DISBALE_JAVA_NET.
! 	* include/win32.h:
! 	(_Jv_platform_on_close): Moved out of #ifndef DISBALE_JAVA_NET.
! 	(backtrace): Moved out of #ifndef DISBALE_JAVA_NET.
  
! 2002-11-21  Michael Koch <konqueror@gmx.de>
  
! 	* include/posix.h: I put too much into the #ifndef DISABLE_JAVA_NET.
! 	Only the new network functions should be in it.
  
! 2002-11-21  Michael Koch <konqueror@gmx.de>
  
! 	* include/posix.h: Moved new functions into a #ifndef DISABLE_JAVA_NET
! 	* include/win32.h: Moved new functions into a #ifndef DISABLE_JAVA_NET
  
! 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.
! 	* Makefile.am (ordinary_java_source_files): Added new files.
! 	* Makefile.in: Regenerated.
  
! 2002-11-21  Michael Koch <konqueror@gmx.de>
  
! 	* include/posix.h
! 	(_Jv_socket): New method.
! 	(_Jv_connect): New method.
! 	(_Jv_close): New method.
! 	(_Jv_platform_close_on_exec): Prefixed system function with "::".
! 	(_Jv_bind): New method.
! 	(_Jv_listen): New method.
! 	(_Jv_write): New method.
! 	(_Jv_read): New method.
! 	* include/win32.h
! 	(_Jv_socket): New method.
! 	(_Jv_connect): New method.
! 	(_Jv_close): New method.
! 	(_Jv_bind): New method.
! 	(_Jv_listen): New method.
! 	(_Jv_write): New method.
! 	(_Jv_read): New method.
! 	* java/net/natNetworkInterface.cc:
! 	Include platform.h, removed inclusion of socket.h
! 	(getRealNetworkInterfaces): Replaced ::socket() by _Jv_socket() and
! 	::close() by _Jv_close().
! 	* java/net/natPlainDatagramSocketImpl.cc:
! 	Removed include of socket.h, definition of NATIVE_CLOSE and _Jv_bind,
! 	added some new lines to make code more readable.
! 	(create): Replaced ::socket() by _Jv_socket().
! 	(close): Replaced NATIVE_CLOSE() by _Jv_close().
! 	* java/net/natPlainSocketImpl.cc:
! 	Removed definition of NATIVE_CLOSE, _Jv_bind, Jv_connect and _Jv_accept,
! 	removed include of socket.h, removed some windows defines
! 	(now in include/win32.h).
! 	(create): Replaced ::socket() by _Jv_socket().
! 	(close): Replaced NATIVE_CLOSE() by _Jv_close().
! 	(write): Replaced ::read by _Jv_write().
! 	(read): Replaced ::read by _Jv_read().
  
! 2002-11-20  Michael Koch <konqueror@gmx.de>
  
! 	* Makefile.am (ordinary_java_source_files):
! 	Added java/nio/channels/FileChannel.java.
! 	* Makefile.in: Regenerated.
  
! 2002-11-20  Michael Koch <konqueror@gmx.de>
  
! 	* java/io/FileInputStream.java
! 	(getChannel): New method.
! 	* java/io/FileOutputStream.java
! 	(getChannel): New method.
! 	* java/net/ServerSocket.java
! 	(bind): Removed duplicate code and called another bind method instead.
! 	* java/nio/channels/SelectionKey.java
! 	(isValid): Removed wrong exception documentation.
! 	* 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-20  Andreas Jaeger  <aj@suse.de>
  
! 	* configure: Regenerated with new libtool.m4.
  
! 2002-11-19  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ref/natReference.cc (add_to_hash): Look at `copy', not
! 	`referent'.
! 	(finalize_referred_to_object): Don't modify `referent' or `copy'
! 	fields.
! 	(add_to_hash): Correctly set `n->next' when updating list.
! 	* java/lang/ref/Reference.java (enqueue): Return false if already
! 	enqueued.
  
! 2002-11-19  Ranjit Mathew <rmathew@hotmail.com>
  
! 	* include/jni.h: Add missing JNICALL and JNIEXPORT attributes
! 	to function and function pointer declarations in accordance with
! 	Sun's JDKs. Define JNIIMPEXP to either JNIEXPORT or JNIIMPORT
! 	based on whether __GCJ_JNI_IMPL__ has been defined or not.
! 	* jni.cc: Add missing JNICALL and JNIEXPORT attributes to
! 	JNI function definitions.
  
! 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>
  
! 	* java/net/PlainSocketImpl.java: Fix imports.
  
! 2002-11-18  Michael Koch <konqueror@gmx.de>
  
! 	* java/nio/channels/SelectionKey.java
! 	(isValid): Added exception documentation.
! 	* java/nio/channels/Selector.java
! 	(open): Declare "throws IOException".
  
! 2002-11-18  Jesse Rosenstock <jmr@ugcs.caltech.edu>
  
! 	* java/nio/charset/Charset.java
! 	(<clinit>): New method.
! 	(encode): Synchronize use of cached encoder object.
! 	(decode): Synchronize use of cached encoder object.
  
! 2002-11-18  Michael Koch <konqueror@gmx.de>
  
! 	* gnu/java/nio/ByteBufferImpl.java,
! 	gnu/java/nio/CharBufferImpl.java,
! 	gnu/java/nio/DatagramChannelImpl.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/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/ShortBufferImpl.java,
! 	gnu/java/nio/SocketChannelImpl.java,
  	java/nio/DoubleBuffer.java,
  	java/nio/FloatBuffer.java,
  	java/nio/IntBuffer.java,
  	java/nio/LongBuffer.java,
  	java/nio/ShortBuffer.java,
! 	java/nio/channels/FileChannel.java: New files.
  
! 2002-11-18  Michael Koch <konqueror@gmx.de>
  
! 	* Makefile.am (ordinary_java_source_files):
! 	Added java/nio/ReadOnlyBufferException.java and
! 	java/nio/channels/ClosedSelectorException.java.
! 	* Makefile.in: Regenerated.
  
! 2002-11-18  Michael Koch <konqueror@gmx.de>
  
! 	* java/net/PlainSocketImpl.java: Reworked imports.
! 	* java/net/ServerSocket.java
! 	(ServerSocket): Create socket.
! 	* java/net/SocketAddress.java: Documentation added.
! 	* java/net/natPlainSocketImpl.cc: Reindented.
! 	* java/nio/ReadOnlyBufferException.java: New file
! 	* java/nio/channels/ClosedChannelException.java: Documentation added.
! 	* java/nio/channels/ClosedSelectorException.java: New file.
  
! 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 GNU Classpath.
  
! 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.
  
! 2002-11-15  Tom Tromey  <tromey@redhat.com>
  
! 	For PR libgcj/8593:
! 	* java/util/zip/GZIPInputStream.java (read): Check file size.
! 	Look in inflater for remaining input bytes.
! 	(read4): Added buf and offset arguments.
  
! 2002-11-12  Eric Blake  <ebb9@email.byu.edu>
  
! 	* java/applet/AppletContext.java: Fix typo and remove redundant
! 	modifiers.
  
! 2002-11-14  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natRuntime.cc (insertSystemProperties): Set
! 	gnu.classpath.home.
  
! 2002-11-13  Michael Koch <konqueror@gmx.de>
  
! 	* java/nio/ByteBuffer.java
! 	(allocate): New method.
! 	(wrap): New method.
! 	(put): New method.
! 	(get): New method.
  
! 2002-11-13  Michael Koch <konqueror@gmx.de>
  
! 	* java/nio/channels/AlreadyConnectedException.java:
! 	Removed unneeded import.
! 	(AlreadyConnectedException): Documentation added.
! 	* java/nio/channels/Pipe.java
! 	(SinkChannel.SinkChannel): Documentation added.
! 	(SinkChannel.validOps): New method.
! 	(SourceChannel.SourceChannel): Documentation added.
! 	(SourceChannel.validOps): New method.
! 	(Pipe): Documentation added.
! 	(open): Documentation added.
! 	(SinkChannel.channel): Documentation added.
! 	(SourceChannel.channel): Documentation added.
! 	* java/nio/channel/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.
! 	* jaba/nio/channels/SelectionKey.java
! 	(SelectionKey): Documentation added.
! 	(attach): Documentation added.
! 	(attachment): Documentation added.
! 	(isAcceptable): Documentation added.
! 	(isConnetable): Documentation added.
! 	(isReadable): Documentation added.
! 	(isWritable): Documentation added.
! 	(cancel): Documentation added.
! 	(channel): Documentation added.
! 	(interestOps): Documentation added.
! 	(isValid): Documentation added.
! 	(readyOps): Documentation added.
! 	(selector): Documentation added.
! 	* jaba/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
! 	(AbstractInterruptibleChannel): Documentation added.
! 	(opened): Default to true;
! 	(begin): Documentation added.
! 	(close): Set opened to false, documentation added.
! 	(isOpen): Documentation added.
! 	* java/nio/channels/spi/AbstractSelectionKey.java
! 	(AbstractSelectionKey): Documentation added.
! 	(cancel): Documentation added.
! 	(isValid): Documentation added.
! 	* java/nio/channels/spi/AbstractSelector.java
! 	(AbstractSelector): Documentation added.
! 	(begin): Documentation added.
! 	(close): Documentation added.
! 	(isOpen): Documentation added.
! 	(deregister): Documentation added.
! 	(end): Documentation added.
! 	(provider): Documentation added.
! 	(implCloseSelector): Documentation added.
! 	(register): 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-12  Michael Koch <konqueror@gmx.de>
  
! 	* java/nio/Buffer.java: Implemented.
! 	* java/nio/CharBuffer.java: New file.
! 	* java/nio/InvalidMarkException.java: New file.
! 	* java/nio/channels/DatagramChannel.java: Implemented.
! 	* java/nio/channels/ServerSocketChannel.java: Implemented.
! 	* java/nio/channels/SocketChannel.java: Implemented.
! 	* java/nio/channels/spi/AbstractChannel.java: Removed.
! 	* java/nio/channels/spi/AbstractSelectableChannel.java:
! 	Implemented.
! 	* java/nio/charset/Charset.java:
! 	Merge from Classpath.
! 	* java/nio/charset/CharsetDecoder.java: New file.
! 	* java/nio/charset/CharsetEncoder.java: New file.
! 	* java/nio/charset/CoderResult.java: New file.
! 	* Makefile.am (ordinary_java_source_files): Added new files.
  	* Makefile.in: Regenerated.
  
! 2002-11-11  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
  
! 	* 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: New files.
  
! 2002-11-11  Michael Koch <konqueror@gmx.de>
  
! 	* java/nio/charset/CharacterCodingException.java:
! 	This class must be public.
! 	* java/nio/charset/CoderMalfunctionError.java:
! 	This class must be public.
! 	* 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.
  
! 2002-11-11  Michael Koch <konqueror@gmx.de>
  
! 	* java/nio/BufferOverflowException.java,
! 	java/nio/BufferUnderflowException.java: New file.
! 	* Makefile.am (ordinary_java_source_files):
! 	Added new files.
! 	* Makefile.in: Regenerated.
  
! 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.
  
! 	* 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.
  
! 	* java/io/natFileDescriptorWin32.cc (read): Handle case where
! 	count is 0.
! 	* java/io/natFileDescriptorPosix.cc (read): Handle case where
! 	count is 0.
  
! 	* java/io/Externalizable.java, java/io/FilePermission.java,
! 	java/io/ObjectStreamConstants.java, java/io/Serializable.java,
! 	java/io/SerializablePermission.java, java/text/Format.java,
! 	java/util/AbstractMap.java, java/util/HashMap.java,
! 	java/util/LinkedHashMap.java, javax/naming/BinaryRefAddr.java: New
! 	versions from Classpath.
  
! 2002-11-10  Anthony Green  <green@redhat.com>
  
! 	* java/util/jar/Attributes.java (Name): Fix name check.
  
! 2002-11-10  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/natClass.cc (initializeClass): Throw NoClassDefFoundError
! 	with getName() as message.
! 	(_Jv_CheckArrayStore): Throw ArrayStoreException with object and array
! 	type as message.
  
! 	* java/lang/natVMThrowable.cc: Don't declare parameter t, it is
! 	unused.
  
! 2002-11-08  Ranjit Mathew <rmathew@hotmail.com>
  
! 	* include/jni.h (JNIIMPORT, JNIEXPORT, JNICALL): Linker defines
! 	for Win32. JNICALL has been defined to __stdcall to be compatible
! 	with Sun's JDKs.
  
! 2002-11-10  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/GridLayout.java (setColumns): Check newCols, not cols.
! 	(setRows): Check newRows, not rows.
  
! 	* jni.cc (_Jv_GetJNIEnvNewFrame): Set env->ex in all cases.
  
! 2002-11-09  Tom Tromey  <tromey@redhat.com>
  
! 	* java/applet/Applet.java, java/applet/AppletContext.java,
! 	java/applet/AppletStub.java, java/applet/AudioClip.java,
! 	java/awt/CardLayout.java,
! 	java/awt/ContainerOrderFocusTraversalPolicy.java,
! 	java/awt/Cursor.java, java/awt/Event.java, java/awt/Frame.java,
! 	java/awt/GridBagConstraints.java, java/awt/GridBagLayout.java,
! 	java/awt/GridLayout.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/datatransfer/DataFlavor.java,
! 	java/awt/dnd/DragSourceContext.java, java/awt/dnd/DropTarget.java,
! 	java/awt/dnd/DropTargetContext.java, java/awt/event/KeyEvent.java:
! 	New versions from Classpath.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (awt_java_source_files): Added ICC_ProfileGray and
! 	ICC_ProfileRGB.
  
! 	* java/awt/ScrollPane.java (ScrollPane): Fixed test for valid
! 	display policy.
  
! 	* 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-07  Mark Wielaard  <mark@klomp.org>
  
! 	Merge Orp RMI patches from Wu Gansha <gansha.wu@intel.com>
! 	* 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.
! 	(getLocBytes): 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.
  
! 2002-11-07  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/reflect/natField.cc (getBoolean): Use getType().
! 	(getByte): Likewise.
! 	(getShort): Likewise.
! 	(getInt): Likewise.
! 	(getLong): Likewise.
! 	(getFloat): Likewise.
! 	(getDouble): Likewise.
! 	(get): Likewise.
! 	(setChar): Likewise.
! 	(setByte): Likewise.
! 	(setShort): Likewise.
! 	(setInt): Likewise.
! 	(setLong): Likewise.
! 	(setFloat): Likewise.
! 	(setDouble): Likewise.
  
! 2002-11-07  Michael Koch <konqueror@gmx.de>
  
! 	* java/awt/Choice.java,
! 	java/awt/Container.java,
! 	java/awt/GridBagLayout.java:
! 	Fixed documentation.
! 	* java/awt/peer/ContainerPeer.java:
! 	Reindented.
  
! 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.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.  For PR libgcj/8481.
! 	* java/util/Random.java (nextInt(int)): Only use 31 bits.
  
! 2002-11-06  Tom Tromey  <tromey@redhat.com>
  
! 	* jni.cc (array_from_valist): Assume that jlong won't be
! 	promoted.
  
! 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-03  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ClassLoader.java (loadClass): Call loadClass on
! 	VMClassLoader, not findClass.
  
! 2002-11-03  Jeff Sturm  <jsturm@one-point.com>
  
! 	* resolve.cc (METHOD_NOT_THERE, METHOD_INACCESSIBLE): Remove.
! 	(_Jv_ResolvePoolEntry): Use _Jv_Method.index, not
! 	_Jv_DetermineVTableIndex, to determine vtable offset.
! 	(_Jv_DetermineVTableIndex): Remove.
! 	(_Jv_PrepareClass): Don't layout vtable.  Use _Jv_MakeVTable instead.
  
! 	* java/lang/Class.h (friend int _Jv_DetermineVTableIndex): Remove.
  
! 2002-11-03  Tom Tromey  <tromey@redhat.com>
  
! 	* java/nio/channels/AlreadyConnectedException.java: Extend
! 	IllegalStateException, per spec.
  
! 2002-10-31  Stephen Crawley  <crawley@dstc.edu.au>
  
! 	* java/lang/Double.java (valueOf): Return new Double(parseDouble(s)).
  
! 2002-10-31  Wu Gansha <gansha.wu@intel.com>:
  
! 	* java/util/ArrayList.java (readObject, writeObject): Only read/write
! 	size items.
  
! 2002-10-31  Wu Gansha <gansha.wu@intel.com>:
  
! 	* java/io/DataInputStream.java (convertFromUTF): Give StringBuffer an
! 	initial estimated size to avoid enlarge buffer frequently.
  
! 2002-10-31  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-31  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-31  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-11-02  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Class.h: Move JV_STATE_ERROR before JV_STATE_DONE.
! 	* java/lang/natClass.cc (initializeClass): Don't return just
! 	because self==thread.
  
! 	For PR java/8415:
! 	* java/lang/reflect/natMethod.cc (getType): Use _Jv_FindClass.
! 	* prims.cc (_Jv_FindClassFromSignature): Indentation fix.
  
! 2002-11-02  Andreas Schwab  <schwab@suse.de>
  
! 	* Makefile.am (AM_MAKEFLAGS): Don't pass JC1FLAGS, CC and CXX, do
! 	pass GCJFLAGS.
! 	(FLAGS_TO_PASS): Define.
! 	* Makefile.in: Regenerated.
  
! 2002-11-01  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteOrder.java: New file.
! 	* java/nio/channels/DatagramChannel.java:
! 	(DatagramChannel): New constructor.
! 	* java/nio/channels/Pipe.java: New file.
! 	* java/nio/channels/SelectableChannel.java: New file.
! 	* java/nio/channels/SelectionKey.java: New file.
! 	* java/nio/channels/Selector.java: New file.
! 	* java/nio/channels/ServerSocketChannel.java
! 	(ServerSocketChannel): New constructor.
! 	* java/nio/channels/SocketChannel.java
! 	(SocketChannel): New constructor.
! 	* java/nio/channels/Pipe.java: New file.
! 	* java/nio/channels/spi/AbstractChannel.java: New file.
! 	* java/nio/channels/spi/AbstractInterruptibleChannel.java: New file.
! 	* java/nio/channels/spi/AbstractSelectableChannel.java:
! 	License added
! 	(AbstractSelectableChannel): New stubbed method.
! 	* java/nio/channels/spi/AbstractSelectionKey.java: New file.
! 	* java/nio/channels/spi/AbstractSelector.java: New file.
! 	* java/nio/channels/spi/SelectorProvider.java: New file.
! 	* java/nio/charset/Charset.java: New file.
! 	* java/nio/charset/CoderMalfunctionError.java: New file.
! 	* java/nio/charset/CodingErrorAction.java: New file.
! 	* java/nio/charset/spi/CharsetProvider.java
! 	(charsetForName): Uncommented.
! 	* Makefile.am (java_native_source_files): Added new files.
  	* Makefile.in: Regenerated.
  
! 2002-11-01  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java:
! 	(isAnyLocalAddress): Implemented.
! 	(isLoopbackAddress): Implemented, comment added.
! 	(isLinkLocalAddress): Implemented, documentation added.
! 	(isSiteLocalAddress): Implemented, documentation added.
! 	(isMCGlobal): Implemented, documentation added.
! 	(isMCNodeLocal): Implemented, documentation added.
! 	(isMCLinkLocal): Implemented, documentation added.
! 	(isMCSiteLocal): Implemented, documentation added.
! 	(isMCOrgLocal): Implemented, documentation added.
! 	(getHostName): Documentation added.
! 	(getCanonicalHostName): Implemented, documentation added.
! 	(getAddress): Documentation added.
! 	(hashCode): Documentation added.
! 	(equals): Documentation added.
! 	(toString): Fixed implementation.
! 	(getByAddress): Use Inet4Address and Inet6Address.
! 	(lookup): New linewrap.
! 	(getByName): SecurityManager check added, support Inet4Address and
! 	Inet6address, comments added.
! 	(getAllByName): SecurityManager check added, comments added.
! 	* java/net/Inet6Address.java:
! 	(Inet6Address): Initialize parent class with addr instead of null.
! 	* java/net/URL.java
! 	(equals): Documentation added.
! 	(getFile): Documentation added.
! 	(hashCode): Documentation added.
! 	* java/net/natInetAddress.cc:
! 	(aton): Fix IPv6 support.
! 	* java/net/natPlainDatagramSocketImpl.cc:
! 	(peek): Throw PortUnreachableException when suitable.
! 	(peekData): Throw PortUnreachableException when suitable.
! 	(send): Throw PortUnreachableException when suitable.
! 	(receive): Throw PortUnreachableException when suitable.
  
! 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-31  Mark Anderson  <mark@panonet.net>
  
! 	* java/awt/GridBagLayout.java (setConstraints): New stubbed method
! 	added
  
! 2002-10-25  Krister Walfridsson  <cato@df.lth.se>
  
! 	* configure.in: Disable hash sync when not using threads.
! 	* configure: Regenerated.
  
! 2002-10-24  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natRuntime.cc (_Jv_SetDLLSearchPath): New function.
! 	(_Jv_FindSymbolInExecutable): Removed argument name.
! 	(insertSystemProperties): Call _Jv_SetDLLSearchPath if
! 	java.library.path is set.
  
! 	* gij.cc (help): Document --showversion.
! 	(version): Don't exit.
! 	(main): Handle --showversion.  Exit if --version given.
  
! 2002-10-23  Tom Tromey  <tromey@redhat.com>
  
! 	* jni.cc (_Jv_JNI_AllocObject): Removed old FIXME comment.
! 	(array_from_valist): Correctly handle promotion for jint, jlong,
! 	jfloat, and jdouble.
  
! 2002-10-23  Ranjit Mathew <rmathew@hotmail.com>
  
! 	* java/io/natFileWin32.cc (attr): Use FindFirstFile( ) instead of
! 	GetFileAttributesEx( ) to find file length and modification times,
! 	as the latter is not present on Windows 95.
  
! 2002-10-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URL.java
! 	(URL): Activate SecurityManager checks.
! 	(equals): Use URLStreamHandler implementation instead of doing it
! 	alone. This allows special protocol stream handlers to change default
! 	behaviour.
! 	(hashCode): Use URLStreamHandler implementation instead of doing it
! 	alone. This allows special protocol stream handlers to change default
! 	behaviour.
! 	* java/net/URLStreamHandler.java
! 	(equals): Implemented default URL equality check.
! 	(hostsEqual): Implemented default URL equality check.
! 	(hashCode): Implemented default URL hashCode algorithm.
! 	* java/net/natPlainDatagramSocketImpl.cc:
! 	No lines longer then 80 characters.
  
! 2002-10-20  Adam Megacz <adam@xwt.org>
  
! 	* aclocal.m4 (CHECK_FOR_BROKEN_MINGW_LD): added
! 	* configure.in: enabled hash sync on Win32
! 	* include/win32-threads.h (_Jv_ThreadId_t): added.
! 	* java/lang/natObject.cc (_Jv_MonitorEnter, _Jv_MonitorExit,
! 	heavy_lock_obj_finalization_proc, wait, notify, notifyAll):
! 	removed some posix-isms, use Thread::sleep() instead of usleep,
! 	added code to clear bottom three bits if platform has a broken
! 	linker.
! 	* include/win32-threads.h (_Jv_ThreadId_t): added.
  
! 2002-10-19  Ranjit Mathew <rmathew@hotmail.com>
  
! 	* java/lang/natRuntime.cc (insertSystemProperties): Added GCJ
! 	runtime property "gnu.gcj.progname" containing the name used to
! 	invoke the current Java program (similar to argv[0] for C
! 	programs).
  
! 2002-10-15  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/8234:
! 	* java/util/zip/natInflater.cc (reset): Reset avail_in.
! 	* java/util/zip/natDeflater.cc (reset): Reset avail_in.
  
! 2002-10-13  Mark Wielaard  <mark@klomp.org>
  
! 	* mauve-libgcj: Enable Mauve tests that compile now.
  
! 2002-10-11  Mark Wielaard  <mark@klomp.org>
  
! 	Fix for PR libgcj/8142
! 	* java/lang/natClassLoader.cc (findClass): Skip inner classes when
! 	loading native modules.
  
! 2002-10-10  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/AbstractListModel.java
! 	(getListDataListeners): New stubbed method.
! 	javax/swing/DefaultBoundedRangeModel.java
! 	(getChangeListeners): New stubbed method.
! 	javax/swing/DefaultSingleSelectionModel.java
! 	(getChangeListeners): New stubbed method.
  
! 2002-10-10  Michael Koch  <konqueror@gmx.de>
  
! 	* gcj/.cvsignore: New file to ignore files generated during build.
! 	* include/.cvsignore: New file to ignore files generated during build.
  
! 2002-10-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/HttpURLConnection.java
! 	(getPermission): New method.
! 	(getErrorStream): New stub method.
! 	(getHeaderFieldDate): New stub method.
! 	* java/net/Inet4Address.java:
! 	(isLinkLocalAddress): Typo fixed.
! 	* java/net/InetAddress.java:
! 	(readResolve): New stubbed method (for serialization).
! 	(isAnyLocalAddress): New stubbed method.
! 	(isLoopbackAddress): New stubbed method.
! 	(isLinkLocalAddress): New stubbed method.
! 	(isSiteLocalAddress): New stubbed method.
! 	(isMCGlobal): New stubbed method.
! 	(isMCNodeGlobal): New stubbed method.
! 	(isMCLinkLocal): New stubbed method.
! 	(isMCSiteLocal): New stubbed method.
! 	(isMCOrgLocal): New stubbed method.
! 	(getCanonicalHostName): New stubbed method.
! 	(getByAddress): Create instances of Inet4Address/Inet6Address,
! 	instead of InetAddress, documentation added.
! 	* java/net/MulticastSocket.java
! 	(getInterface): Removed FIXME.
! 	(getNetworkInterface): New method.
! 	(setNetworkInterface): New method.
! 	* java/net/NetworkInterface.java:
! 	(toString): Use property "line.separator" instead of "\n".
! 	* java/net/URLConnection.java
! 	(getContent): New stubbed method.
! 	* java/net/URLStreamHandler.java:
! 	(equals): New stubbed method.
! 	(hostsEqual): New stubbed method.
! 	(hashCode): New stubbed method.
! 	* java/net/natNetworkInterface.cc:
! 	(getRealNetworkInterfaces): Create Inet4Address object
! 	instead of InetAddress.
  
! 2002-10-08  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* interpret.cc (_Jv_InterpMethod::run): Use UINT32 instead of
! 	unsigned long temporary to implement insn_iushr shifts.
  
! 2002-10-08  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* configure.host [s390*-*]: Enable Java interpreter.
! 	Enable hash synchronization.  Add sysdeps dir.
! 	* sysdep/s390/locks.h: New file.
  
! 2002-10-06  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/Thread.java (setDaemon): Check startable_flag,
! 	not isAlive().
  
! 2002-10-07  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/Buffer.java: New stub file.
! 	* java/nio/charset/spi/CharsetProvider.java: Commented out all usages
! 	of class Charset.
! 	* Makefile.am (java_native_source_files): Added java/nio/Buffer.java.
! 	* Makefile.in: Regenerated.
  
! 2002-10-07  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteBuffer.java:
! 	removed import of not commited class.
  
! 2002-10-07  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/ByteBuffer.java,
! 	java/nio/MappedByteBuffer.java:
! 	New files, forgot to add these dummies.
! 	* Makefile.am (java_native_source_files): Added new files.
! 	* Makefile.in: Regenerated.
  
! 2002-10-07  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/channels/AlreadyConnectedException.java,
! 	java/nio/channels/ClosedChannelException.java,
! 	java/nio/channels/ReadableByteChannel.java,
! 	java/nio/channels/InterruptibleChannel.java,
! 	java/nio/channels/Channel.java,
! 	java/nio/channels/ByteChannel.java,
! 	java/nio/channels/GatheringByteChannel.java,
! 	java/nio/channels/ScatteringByteChannel.java,
! 	java/nio/channels/WritableByteChannel.java,
! 	java/nio/charset/CharacterCodingException.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: New file.
! 	These files are exceptions or interfaces,
! 	no real or abstract classes.
! 	* Makefile.am (java_native_source_files): Added new files.
! 	* Makefile.in: Regenerated.
  
! 2002-10-05  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java
! 	(getByAddress): Fixed documentation.
! 	(getByAddress): New method.
! 	* java/net/Inet4Address.java: New file.
! 	* java/net/URL.java
! 	(URL): Documentation added.
! 	(getContent): Documentation added.
! 	(getContent): New stubbed method.
! 	(getQuery): New method.
! 	(openConnection): Documentation added.
! 	(openStream): Documentation added.
! 	(setURLStreamHandlerFactory): Documentation added.
! 	* java/net/URI.java: New stub file.
! 	* Makefile.am
! 	(java_native_source_files): Added java/net/Inet4Address.java,
! 	java/net/Inet6Address.java and java/net/URI.java.
! 	* Makefile.in: Regenerated.
  
! 2002-10-04  C. Scott Ananian <cananian@lesser-magoo.lcs.mit.edu>
  
! 	* java/lang/ProtectionDomain.java (linesep): Remove field.
! 	(toString): Use System.getProperty("line.separator").
  
! 2002-10-04  Michael Koch  <konqueror@gmx.de>
  
! 	* 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.
  
! 2002-10-04  Mark Wielaard <mark@klomp.org>
  
! 	* java/security/Security.java: Use java.home or gnu.classpath.home
! 	to load providers.
! 	(loadProviders): Extra dir argument.
! 	(getProvider): Return null when not found.
  
! 2002-10-04  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/Throwable.java: Remerge with Classpath.
  
! 2002-10-04  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java:
! 	(isMulticastAddress): Added documentation.
! 	(getHostAddress): Added documentation.
! 	(toString): Added documentation.
! 	(getByAddress): Fixed documentation.
! 	(getByName): Added documentation.
! 	(getAllByName): Added documentation.
! 	(getLocalHost): Added documentation.
  
! 2002-10-04  Michael Koch  <konqueror@gmx.de>
  
! 	* java/beans/beancontext/BeanContextChildSupport.java:
! 	Added serialVersionUID.
! 	* java/text/Collator.java: (compare): Made documentation HTML-aware.
! 	* javax/naming/BinaryRefAddr.java: Added serialVersionUID.
! 	* javax/naming/Name.java: Added serialVersionUID.
  
! 2002-10-03  Adam Megacz <adam@xwt.org>
  
! 	* natNetworkInterface.cc (getRealNetworkInterfaces): ifdef out
! 	some functionality that isn't supported yet on WIN32.
  
! 2002-10-03  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (awt_java_source_files): Added new files.
  
! 2002-10-03  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/InetAddress.java
! 	(class InetAddress): Removed final keyword.
! 	(equals): Fixed typo.
! 	(getByAddress): New method.
  
! 2002-10-03  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/dnd/Autoscroll.java:
! 	New file, merge from Classpath.
! 	* java/awt/dnd/DragSourceAdapter.java:
! 	(dragExit): Fixed typos in argument type.
! 	(dragDropEnd): Fixed typos in argument type.
! 	* java/awt/dnd/DragSourceDropEvent.java:
! 	New file, merge from Classpath.
! 	* java/awt/dnd/DropTarget.java:
! 	Added stubs, merge from Classpath.
! 	* java/awt/dnd/DropTargetAdapter.java:
! 	New file, merge from Classpath.
! 	* java/awt/dnd/DropTargetContext.java:
! 	New file, merge from Classpath.
! 	* java/awt/dnd/DropTargetDragEvent.java:
! 	New file, merge from Classpath.
! 	* java/awt/dnd/DropTargetDropEvent.java:
! 	New file, merge from Classpath.
! 	* java/awt/dnd/DropTargetEvent.java:
! 	New file, merge from Classpath.
! 	* java/awt/dnd/DropTargetListener.java:
! 	New file, merge from Classpath.
! 	* java/awt/dnd/MouseDragGestureRecognizer.java:
! 	New file, merge from Classpath.
! 	* java/awt/dnd/peer/DropTargetContextPeer.java:
! 	New file, merge from Classpath.
  
! 2002-10-03  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramPacket.java
! 	(setLength): Fixed typo and be HTML-aware.
! 	* java/net/InetSocketAddress.java
! 	(InetSocketAddress): Correct initialization of hostname, fixed typo.
! 	(equals): Added comment about equality of InetSocketAddress objects.
! 	* java/net/ServerSocket.java
! 	(accept): Added checks.
! 	(isClosed): New stubbed method.
! 	* java/net/SocketOptions.java: Reindention.
! 	* java/net/SocketPermission
! 	(SocketPermission): Documentation fixed.
  
! 2002-10-03  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(receive): Check with SecurityManager AFTER the packet is received,
! 	check if connected to multicast address, documentation added.
! 	(send): Only check SecurityManager if connected, check address of
! 	packet to send.
! 	(connect): Implemented, documentation added.
! 	* java/net/Inet6Address.java: New file (not added yet to Makefile.am).
! 	* java/net/InetSocketAddress.java
! 	(whole file): Reindented.
! 	(hostname): New attribute.
! 	(InetSocketAddress): Initialize new attribute.
! 	(getAddress): Documentation added.
! 	(getHostName): Documentation added.
! 	(getPort): Documentation added.
! 	(hashCode): Documentation added.
! 	(isUnresolved): Documentation added.
! 	(toString): Conform to output of JDK 1.4.1, documentation added.
! 	* java/net/MulticastSocket.java
! 	(joinGroup): Removed FIXME, documentation added.
! 	(leaveGroup): Removed FIXME, documentation added.
! 	(send): Documentation added.
! 	* java/net/Socket.java
! 	(inputShutdown): New variable.
! 	(outputShutdown): New variable.
! 	(Socket): Initialize new variables.
! 	(getRemoteSocketAddress): Check if connected.
! 	(shutdownInput): Set new variable.
! 	(shutdownOutput): Set new variable.
! 	(isConnected): New method.
! 	(isClosed): New method.
! 	(isInputShutdown): New method.
! 	(isOutputShutdown): New method.
! 	* java/net/URLStreamHandler.java
! 	(URLStreamHandler): New method.
! 	(openConnection): Added documentation.
! 	(parseURL): Added documentation.
! 	(getHostAddress): New method.
! 	(getDefaultPort): New method.
  
! 2002-10-02  Tom Tromey  <tromey@redhat.com>
  
! 	* java/rmi/activation/ActivationDesc.java,
! 	java/rmi/activation/ActivationGroupDesc.java,
! 	java/rmi/activation/ActivationGroupID.java,
! 	java/rmi/activation/ActivationID.java: New versions from
! 	Classpath.
  
! 2002-09-30  Bo Thorsen  <bo@suse.de>
  
! 	* sysdep/x86-64/locks.h (compare_and_swap): Fix multilib support.
  
! 2002-09-30  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/ObjectInputStream.java (resolveProxyClass): New method
! 	from Classpath.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (rmi_java_source_files): Added new files.
! 	* gnu/java/rmi/RMIMarshalledObjectInputStream.java,
! 	gnu/java/rmi/RMIMarshalledObjectOutputStream.java,
! 	gnu/java/rmi/server/ConnectionRunnerPool.java: New files from
! 	Classpath.
! 	* 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_Skel.java,
! 	gnu/java/rmi/registry/RegistryImpl_Stub.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/UnicastServer.java,
! 	gnu/java/rmi/server/UnicastServerRef.java,
! 	java/rmi/MarshalledObject.java,
! 	java/rmi/server/RMIClassLoader.java,
! 	java/rmi/server/RemoteObject.java,
! 	java/rmi/server/UnicastRemoteObject.java,
! 	java/security/SecureClassLoader.java: Merged from Classpath.
  
! 2002-09-29  Anthony Green  <green@redhat.com>
  
! 	* java/lang/reflect/UndeclaredThrowableException.java: New file.
! 	Imported from GNU Classpath.
! 	* java/lang/reflect/natProxy.cc: New file.
! 	* java/lang/reflect/InvocationHandler.java: New file.  Imported
! 	from GNU Classpath.
! 	* java/lang/reflect/Proxy.java: New file.  Imported from GNU
! 	Classpath.
! 	* gnu/java/lang/reflect/TypeSignature.java: Refresh from GNU
! 	Classpath.
! 	* gnu/classpath/Configuration.java.in (HAVE_NATIVE_GET_PROXY_DATA,
! 	HAVE_NATIVE_GET_PROXY_CLASS, HAVE_NATIVE_GENERATE_PROXY_CLASS):
! 	New statics.
! 	* gcj/javaprims.h ("Java"): Add new classes.
! 	* java/lang/reflect/Proxy.java: Fix check for duplicate interfaces.
! 	* Makefile.am (java/lang/reflect/Proxy$$ProxyData.h): Create this.
! 	java/lang/reflect/Proxy$$ProxyType.h): And this.
! 	(inner_nat_headers): Add these new headers.
! 	(ordinary_java_source_files): Add new files.
! 	(nat_source_files): Add new file.
! 	* Makefile.in: Rebuilt.
  
! 2002-09-28  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* configure.host: Handle arm*-elf, strongarm*-elf and xscale*-elf with
! 	a single configuration.
  
! 2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
  
! 	* java/util/TimeZone.java (getDSTSavings): New method.
! 	Fixes PR libgcj/7786.
  
! 2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
  
! 	* resolve.cc (_Jv_ResolvePoolEntry) [end_of_method_search]: Check
! 	to see if `the_method == 0' before looking up vtable index.
! 	Fixes PR libgcj/7709.
  
! 2002-09-25  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natClassLoader.cc:
! 	(_Jv_PrepareCompiledClass): Throw NoClassDefFoundError, per spec.
! 	* resolve.cc: Include NoClassDefFoundError.h, not
! 	ClassNotFoundException.h.
! 	(_Jv_ResolvePoolEntry): Throw NoClassDefFoundError, per spec.
  
! 	* defineclass.cc: Don't include ClassNotFoundException.h.
  
! 	* resolve.cc: Include StringBuffer.
! 	(_Jv_ResolvePoolEntry): Use StringBuffer to create error string.
  
! 	* boehm.cc (_Jv_MarkObj): Don't fail if class object has been
! 	allocated but not initialized.
  
! 2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
  
! 	Fix for PR libgcj/7766:
! 	* java/util/zip/ZipInputStream.java (entryAtEOF): New field.
! 	(getNextEntry): Set it.
! 	(closeEntry): Likewise.
! 	(read): Likewise.
! 	(close): Likewise.
! 	(available): Use it.
  
! 2002-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(DatagramSocket): Initialize new instance variables.
! 	(close): Reset new instance variables.
! 	(getLocalAddress): Remove unneeded SecurityManager usage.
! 	(getLocalPort): Check if socket is already bound.
! 	(isConnected): New method.
! 	(getInetAddress): Implemented.
! 	(getPort): Better Implementation, documentation fixed.
! 	(getRemoteSocketAddress): New method.
! 	* java/net/JarURLConnection.java
! 	(element): Typo fixed.
! 	(getMainAttributes): New method.
! 	(getAttributes): New method (stub only).
! 	(getManifest): New method (stub only).
! 	* java/net/NetPermission.java: Added serialVersionsUID.
! 	* java/net/Socket.java
! 	(connect): Check blocking mode of associated channel,
! 	documentation added.
! 	(getLocalSocketAddress): Better implementation.
! 	(getRemoteSocketAddress): Implemented.
! 	(isBound): New method.
! 	(setSendBufferSize): Documentation added.
! 	* java/net/SocketAddress.java: Added serialVersionsUID.
! 	* java/net/SocketPermission.java: Added serialVersionsUID.
! 	* java/net/URL.java
! 	(URL): Wrap for shorter lines, initialize new instance variables,
! 	documentation added.
! 	(equals): Check new instance variables too.
! 	(getContent): Documentation added.
! 	(getPath): Documentation added.
! 	(getAuthority): New method.
! 	(getHost): Documentation added.
! 	(getPort): Documentation added.
! 	(getDefaultPort): New method.
! 	(getProtocol): Documentation added.
! 	(getUserInfo): Documentation added.
! 	(set): Initialize new instance variables, documentation added.
! 	* java/net/URLStreamHandler.java
! 	(setURL): New method.
! 	* java/net/natPlainDatagramSocketImpl.cc
! 	(connect): Fix exception name.
! 	(disconnect): Fix exception name.
  
! 2002-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/channels/spi/AbstractSelectableChannel.java: New file.
! 	* java/nio/channels/DatagramChannel.java:
! 	extends AbstractSelectableChannel
! 	* java/nio/channels/ServerSocketChannel.java:
! 	extends AbstractSelectableChannel
! 	* java/nio/channels/SocketChannel.java:
! 	extends AbstractSelectableChannel
! 	* Makefile.am (ordinary_java_source_files):
! 	java/nio/channels/spi/AbstractSelectableChannel.java added.
! 	* Makefile.in: Regenerated.
  
! 2002-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(DatagramSocket): Exception documentation added.
! 	(bind): Exception documentation added, addded SecurityManager check,
! 	added SocketAddress type check.
! 	(getSoTimeout): Check impl.
! 	(receive): Fix SecurityManager check, check impl, documentation added.
! 	(send): Check channel mode, documentation added.
! 	(connect): New method.
! 	(disconnect): Implemented.
! 	(getLocalSocketAddress): New method.
! 	(getReceiveBufferSize): Check impl.
! 	(setReuseAddress): Check impl.
! 	(getReuseAddress): Check impl.
! 	(setBroadcast): Check impl.
! 	(getBroadcast): Check impl.
! 	(setTrafficClass): Check impl, Documentation cleared.
! 	(getTrafficClass): Check impl.
! 	(getSendBufferSize): Check impl.
! 	(setReceiveBufferSize): Check impl, documentation added.
! 	(setSendBufferSize): Documentation added.
! 	(setDatagramSocketImplFactory): New method.
! 	* java/net/HttpURLConnection.java
! 	(HTTP_INTERNAL_ERROR): The correct code is 500.
! 	(HTTP_NOT_IMPLEMENTED): Added new constant.
! 	(setFollowRedirects): Documentation added.
! 	(getInstanceFollowRedirects): New method.
! 	(setInstanceFollowRedirects): New method.
! 	(setRequestMethod): Documentation added.
! 	(getResponseCode): Documentation added.
! 	(getResponseMessage): Documentation added.
! 	* java/net/JarURLConnection.java
! 	(JarURLConnection): protected since JDK 1.4.
! 	(getJarEntry): java.io.IOException to IOException, documentation added.
! 	(getJarFile): Documentation added.
! 	* java/net/ServerSocket.java
! 	(ServerSocket): Private to public, exception added.
! 	(ServerSocket): java.io.IOException to IOException, documentation added.
! 	(bind): Check socket address type, documentation added.
! 	(bind): java.io.IOException to IOException, documentation added.
! 	(accept): Documentation added.
! 	(implAccept): Check ch is not non-blocking, documentation added.
! 	(setSoTimeout): Documentation fixed.
! 	(setReceiveBufferSize): Documentation added.
! 	* java/net/Socket.java
! 	(Socket): Documentation added.
! 	(bind): Documentation added.
! 	(connect): Check socket address type, documentation added.
! 	(getRemoteSocketAddress): New method.
! 	(getLocalSocketAddress): New method.
! 	(setSoLinger): Documentation added.
! 	(getReuseAddress): New method.
! 	(setReuseAddress): New method.
! 	(getTrafficClass): New method.
! 	(setTrafficClass): New method.
! 	* java/net/URLStreamHandler.java
! 	(openConnection): java.io.IOException to IOException.
! 	(parseURL): Documentation added.
! 	(sameFile): public to protected, documentation added.
! 	(setURL): Documentation added.
! 	* java/nio/IllegalBlockingModeException.java: New file.
! 	* Makefile.am (ordinary_java_source_files):
! 	added java/nio/IllegalBlockingModeException.java
! 	* Makefile.in: Regenerated.
  
! 2002-09-25  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramPacket
! 	(DatagramPacket): Exception documentation added.
! 	(setData): Likewise.
! 	(setSocketAddress): Likewise.
! 	* java/net/DatagramSocketImpl.java
! 	(peek): Documentation addded.
! 	(peekData): Documentation addded.
! 	(send): Documentation addded.
! 	(receive): Documentation addded.
! 	(connect): New method.
! 	(disconnect): New method.
! 	(joinGroup): New abstract method.
! 	(leaveGroup): New abstract method.
! 	* java/net/InetSocketAddress.java
! 	(InetSocketAddress): Documentation added.
! 	(equals): final keyword added.
! 	(getAddress): final keyword added.
! 	(getHostName): final keyword added.
! 	(getPort): final keyword added.
! 	(hashCode): final keyword added.
! 	(isUnresolved): final keyword added.
! 	* java/net/MulticastSocket.java
! 	(MulticastSocket): Documentation added.
! 	(MulticastSocket): New method.
! 	(joinGroup): Documentation added.
! 	(joinGroup): New method.
! 	(leaveGroup): Documentation added.
! 	(leaveGroup): New method.
! 	(send): Documentation added.
! 	* java/net/NetworkInterface.java
! 	(getByName): Documentation added.
! 	(getByInetAddress): Documentation added.
! 	(getNetworkInterfaces): Documentation added.
! 	* java/net/PlainDatagramSocketImpl.java
! 	(connect): New method.
! 	(disconnect): New method.
! 	* java/net/SocketImpl.java
! 	(create): Documentation added.
! 	(shutdownInput): Convert public to protected, as it always was.
! 	(shutdownOutput): Convert public to protected, as it always was.
! 	* java/net/SocketOptions.java
! 	(whole file): Reintented.
! 	* java/net/URLClassLoader.java
! 	(URLClassLoader): SecurityManager check added, documentation added.
! 	(findResources): Documentation added.
! 	(findClass): Documentation added.
! 	(newInstance): More correct method arguments.
! 	* java/net/URLConnection.java
! 	(connect): Documentation added.
! 	(getContent): Documentation added.
! 	(getPermission): Documentation added.
! 	(getInputStream): Documentation added.
! 	(getOutputStream): Documentation added.
! 	(setDoInput): Throw correct exception, documentation added.
! 	(setDoOutput): Throw correct exception, documentation added.
! 	(setAllowUserInteraction): Throw correct exception, documentation added.
! 	(setUseCaches): Throw correct exception, documentation added.
! 	(setIfModifiedSince): Throw correct exception, documentation added.
! 	(setRequestProperty): Throw exception, documentation added.
! 	(addRequestProperty): Throw exception, documentation added.
! 	(getRequestProperty): Throw exception, documentation added.
! 	(getRequestProperties): Documentation added.
! 	(setContentHandlerFactory): Documentation added.
! 	(guessContentTypeFromName): protected to public.
! 	(setFileNameMap): Documentation added.
! 	* java/net/URLDecoder.java
! 	(URLDecoder): New method.
! 	(decode): Documentation added.
! 	(whole file): Reindented.
! 	* java/net/URLEncoder.java
! 	(encode): Documentation added.
! 	* java/net/natPlainDatagramSocketImpl.cc
! 	(connect): New method.
! 	(disconnect): New method.
! 	* 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-22  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/6576:
! 	* 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  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
  
! 	* Makefile.am (all-multi): Fix multilib parallel build.
  
! 2002-09-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/Socket.java
! 	(sendUrgentData): New method.
! 	(getChannel): New method.
! 	* java/net/ServerSocket.java
! 	(getChannel): New method.
! 	(isBound): New method.
! 	* java/net/DatagramSocket.java
! 	(DatagramSocket): Two new methods.
! 	(bind): New method.
! 	(getChannel): New method.
! 	(isBound): New method.
! 	(send): Added newline to to make shorter lines.
! 	* java/net/PlainDatagramSocketImpl.java
! 	(mcastGrp): Added argument.
! 	(join): Use new mcastGrp.
! 	(leave): Use new mcastGrp.
! 	(joinGroup): New method.
! 	(leaveGroup): New method.
! 	* java/net/natPlainDatagramSocketImpl.cc
! 	(mcastGrp): Added argument, no yet really implemented.
! 	(getOption): Added newline for shorter lines.
! 	* java/net/natPlainSocketImpl.cc
! 	(read, setOption, getOption): Added newline for shorter lines.
  
! 2002-09-19  Tom Tromey  <tromey@redhat.com>
  
!        * java/lang/ClassLoader.java (resolveClass0): Set cause for
!        newly-created exception.
  
! 2002-09-18  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/regex/Matcher.java, java/util/regex/Pattern.java,
! 	java/util/regex/PatternSyntaxException.java:
! 	Merge with classpath, new files.
! 	* Makefile.am (core_java_source_files):
! 	Added java/util/regex/Matcher.java,
! 	java/util/regex/Pattern.java,
! 	java/util/regex/PatternSyntaxException.java
! 	* Makefile.in: Regenerated.
! 	* include/config.h.in: Added HAVE_NET_IF_H.
! 	* java/net/natNetworkInterface.cc (getRealNetworkInterfaces):
! 	Removed #if 0 ... #endif.
  
! 2002-09-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/natNetworkInterface.cc:
! 	Removed unneed and yet wrong includes.
  
! 2002-09-17  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/NetworkInterface.java: New file.
! 	* java/net/natNetworkInterface.java: New file.
! 	* configure.in: Added check for net/if.h.
  	* configure: Regenerated.
- 	* Makefile.am
- 	(ordinary_java_source_files): Added NetworkInterface.java.
- 	(nat_source_files): Added natNetworkInterface.cc.
- 	* Makefile.in: Regenerated.
  
! 2002-09-16  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/URLClassLoader.java (findClass): Code source for a
! 	class from a jar is not necessarily a jar: URL.
  
! 2002-09-16  Michael Koch  <konqueror@gmx.de>
  
! 	* java/lang/AssertionError.java:
! 	Merge with classpath, fixes HTML.
! 	* java/rmi/server/LogStream.java:
! 	Merge with classpath, fixes some constants.
! 	* java/net/server/RemoteServer.java:
! 	Merge with classpath, adds serialVersionUID.
! 	* javax/naming/BinaryRefAddr.java:
! 	Merge with classpath, s/equal/equals/.
! 	* javax/naming/NamingException.java:
! 	Merge with classpath, fixed typo.
! 	* javax/naming/RefAddr.java:
! 	Merge with classpath, s/equal/equals/.
! 	* java/awt/Toolkit.java:
! 	s/gnu.java.awt.peer.gtk.GtkToolkit/gnu.awt.gtk.GtkToolkit/
! 	and typo fixed.
  
! 2002-09-15  Adam Megacz <adam@xwt.org>
  
! 	* java/net/natPlainSocketImpl.cc: fixed typo.
  
! 2002-09-15  Adam Megacz <adam@xwt.org>
  
! 	* java/net/natPlainSocketImpl.cc: #ifdef-shielded socket timeouts,
! 	which don't work on Win32 (yet).
  
! 2002-09-14  Adam Megacz <adam@xwt.org>
  
! 	* java/net/natPlainDatagramSocket.cc: removed #include
! 	<ws2tcpip.h>; the mingw header is broken (conflicts with itself).
! 	* include/win32.h: included definition for IP_TOS to satisfy
! 	natPlainDatagramSocket.cc
  
! 2002-09-13  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramPacket.java (DatagramPacket):
! 	Added linebreak for 80 chars per line.
! 	* java/net/JarURLConection.java
! 	(getInputStreami, getJarEntry): Likewise.
! 	* java/net/SocketPErmission.java
! 	(SocketPermission class docu, implies): Likewise.
! 	* java/net/URLClassLoader.java (findResources): Likewise.
! 	* java/net/URLConnection.java: Reindendet remark for 80 chars per line
  
! 2002-09-13  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/channels/DatagramChannel.java,
! 	java/nio/channels/ServerSocketChannel.java
! 	java/nio/channels/SocketChannel.java:
! 	New dummy files to make java.net fully JDK 1.4 compatible
! 	* Makefile.am (ordinary_java_source_files): Added
! 	java/net/DatagramSocketImplFactory.java (long forgotten),
! 	java/nio/SocketChannel.java,
! 	java/nio/ServerSocketChannel.java,
! 	java/nio/DatagramChannel.java
! 	* Makefile.in: Regenrated.
  
! 2002-09-12  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocketImpl.java
! 	(peekData): New method.
! 	* java/net/PlainDatagramSocketImpl.java
! 	(peekData): New method.
! 	* java/net/natPlainDatagramSocketImpl.cc
! 	(peekData): New method.
! 	* java/net/URLConnection
! 	(getPermission): New method.
! 	(addRequestProperty): New method.
! 	(getRequestProperties): New method.
! 	(guessContentTypeFromStream): New method, not really implemented.
! 	(URLConnection): Added/updated documentation.
! 	(connect): Added/updated documentation.
! 	(getURL): Added/updated documentation.
! 	(getContentLength): Added/updated documentation.
! 	(getContentType: Added/updated documentation.
! 	(getContentEncoding): Added/updated documentation.
! 	(getExpiration): Added/updated documentation.
! 	(getDate): Added/updated documentation.
! 	(getLastModified): Added/updated documentation.
! 	(getHeaderField): Added/updated documentation.
! 	(getHeaderFields): Added/updated documentation.
! 	(getHeaderFieldInt): Added/updated documentation.
! 	(getHeaderFieldDate): Added/updated documentation.
! 	(getHeaderFieldKey): Added/updated documentation.
! 	(getContent): Added/updated documentation.
! 	(getInputStream): Added/updated documentation.
! 	(getOutputStream): Added/updated documentation.
! 	(toString): Added/updated documentation.
! 	(setDoInput): Added/updated documentation.
! 	(getDoInput): Added/updated documentation.
! 	(setDoOutput): Added/updated documentation.
! 	(getDoOutput): Added/updated documentation.
! 	(setAllowUserInteraction): Added/updated documentation.
! 	(getAllowUserInteraction): Added/updated documentation.
! 	(setDefaultAllowUserInteraction): Added/updated documentation.
! 	(getDefaultAllowUserInteraction): Added/updated documentation.
! 	(setUseCaches): Added/updated documentation.
! 	(getUseCaches): Added/updated documentation.
! 	(setIfModifiedSince): Added/updated documentation.
! 	(getIfModifiedSince): Added/updated documentation.
! 	(getDefaultUseCaches): Added/updated documentation.
! 	(setDefaultUseCaches): Added/updated documentation.
! 	(setRequestProperty): Added/updated documentation.
! 	(getRequestProperty): Added/updated documentation.
! 	(setDefaultRequestProperty): Added/updated documentation.
! 	(getDefaultRequestProperty): Added/updated documentation.
! 	(setContentHandlerFactory): Added/updated documentation.
! 	(guessContentTypeFromName): Added/updated documentation.
! 	(getFileNameMap): Added/updated documentation.
! 	(setFileNameMap): Added/updated documentation.
  
! 2002-09-11  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/Socket.java
! 	(Socket): protected to public (since JDK 1.4). Added @specnote.
! 	(bind): New method.
! 	(connect): Two new methods.
! 	(getKeepalive): Get correct socket option.
! 	(setKeepalive): Set correct socket option.
! 	(getOOBInline): New method.
! 	(setOOBInline): New method.
! 	* java/net/ServerSocket.java
! 	(bind): Two new methods.
! 	(getInetAddress): Reimplemented, catch exception.
! 	(getLocalSocketAddress): New method.
! 	(setReuseAddress): New method.
! 	(getReuseAdress): New method.
! 	(setReceiveBufferSize): New method.
! 	(getReceiveBufferSize): New method.
! 	(toString): Made string JDK 1.4 compliant.
  
! 2002-09-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/SocketImpl.java
! 	(connect): New method.
! 	(supportsUrgentData): New method.
! 	(sendUrgentData): New method.
! 	* java/net/PlainSocketImpl.java
! 	(connect): One new method and two new implementation.
! 	(sendUrgentData): New method.
! 	* java/natPlainSocketImpl.cc
! 	(connect): Arguments changed, added support for timeouts.
! 	(getOption): Another __java_boolean to jboolean.
  
! 2002-09-07  Adam Megacz <adam@xwt.org>
  
! 	* java/net/natPlainDatagramSocket.cc: include ws2tcpip.h for
! 	definition of IP_TOS.
  
! 2002-09-04  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramSocket.java
! 	(DatagramSocket): Added documentation.
! 	(close): Likewise.
! 	(getLocalAddress): Likewise.
! 	(getLocalPort): Likewise.
! 	(receive): Likewise.
! 	(send): Likewise.
! 	(setSoTimeout): Likewise.
! 	(connect): New method.
! 	(disconnect): New method.
! 	(getInetAddress): New method (FIXME)
! 	(getPort): New method.
! 	(setReuseAddress): New method.
! 	(getReuseAddress): New method.
! 	(setBroadcast): New method.
! 	(getBroadcast): New method.
! 	(setTrafficClass): New method.
! 	(getTrafficClass): New method.
! 	* java/net/MulticastSocket.java):
! 	(getTTL): Added @see in documentation.
! 	(setTTL): Added @see in documentation.
! 	(setLoopbackMode): New method.
! 	(getLoopbackMode): New method.
! 	* java/net/PlainSocketImpl.java:
! 	Added new constants for the options SO_BROADCAST, SO_OOBINLINE,
! 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
! 	* java/net/PlainDatagramSocketImpl.java
! 	Added new constants for the options SO_BROADCAST, SO_OOBINLINE,
! 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
! 	* java/net/natPlainSocketImpl.cc
! 	(getOption): Implemented the options SO_BROADCAST, SO_OOBINLINE,
! 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
! 	(setOption): Implemented the options SO_BROADCAST, SO_OOBINLINE,
! 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
! 	This should also fix SO_KEEPALIVE
! 	* java/net/natPlainDatagramSocketImpl.cc
! 	(getOption): Implemented the options SO_BROADCAST, SO_OOBINLINE,
! 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
! 	(setOption): Implemented the options SO_BROADCAST, SO_OOBINLINE,
! 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
  
! 2002-09-04  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/SocketOptions.java: added static variables to be JDK 1.4
! 	compatible (SO_BROADCAST, SO_OOBINLINE, IP_MULTICAST_IF2,
! 	IP_MULTICAST_LOOP, IP_TOS
  
! 2002-09-03  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Class.h (_getDeclaredMethod): Declare.
! 	(_getMethod): Now private.
! 	* java/lang/natClass.cc (_getDeclaredMethod): Renamed from
! 	getDeclaredMethod.  Now returns NULL on failure.
! 	* java/lang/Class.java (_getDeclaredMethod): Declare.
! 	(getDeclaredMethod): No longer native; implements access checks.
  
! 2002-09-01  Mark Wielaard  <mark@klomp.org>
  
! 	* gnu/gcj/runtime/NameFinder.java (remove_interpreter): New field.
! 	(sanitizeStack): Correctly reset unknown and interpreter counters,
! 	detect interpreter runtime frames.
! 	(demangleInterpreterMethod): New method.
! 	* gnu/gcj/runtime/natNameFinder.cc (lookupInterp): Use new method.
! 	* java/lang/natVMThrowable.cc (fillInStackTrace): Change order of
! 	filling in addrs[].
  
! 2002-09-02  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/DatagramPacket.java, java/net/MulticsstSocket.java:
! 	re-indented documentation.
  
! 2002-08-30  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
  
! 	* java/util/Calendar.java (getTimeInMillis, getTimeInMillis): Now
! 	public, per 1.4 spec.  Fixes PR libgcj/7785.
  
! 2002-08-30  Jeff Sturm  <jsturm@one-point.com>
  
  	* Makefile.in: Rebuilt.
- 	* Makefile.am (ZIP, GCJH): Remove $(EXEEXT).
  
! 2002-08-29  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/JarURLConnection.java (getCertificates): New method
! 	from Classpath.
! 	* java/net/URLClassLoader.java (URLClassLoader): Extends
! 	SecureClassLoader.
! 	(definePackage): New method from Classpath.
! 	(getPermissions): Likewise.
! 	(newInstance): Likewise.
! 	(findClass): Construct CodeSource for new class (from Classpath).
! 	* java/net/SocketImpl.java (shutdownInput, shutdownOutput): New
! 	methods.
! 	* java/net/URL.java (getUserInfo): New method.
! 	(set(String,String,int,String,String,String,String,String)): New
! 	method.
! 	* java/net/PlainSocketImpl.java (_Jv_SO_KEEPALIVE_): Define.
! 	(shutdownInput, shutdownOutput): Declare.
! 	* java/net/PlainDatagramSocketImpl.java (_Jv_SO_KEEPALIVE_):
! 	Define.
! 	* java/net/natPlainSocketImpl.cc (setOption): Handle keepalive.
! 	(getOption): Likewise.
! 	(shutdownInput): New method.
! 	(shutdownOutput): Likewise.
! 	* java/net/natPlainDatagramSocketImpl.cc (setOption): Handle
! 	keepalive.
! 	(getOption): Likewise.
! 	* java/net/SocketOptions.java (SO_KEEPALIVE): New constant.
! 	* java/net/Socket.java (setKeepAlive): New method.
! 	(getKeepAlive): Likewise.
! 	(shutdownInput, shutdownOutput): New methods.
  
! 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-29  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/natFileDescriptorPosix.cc (setLength): Handle case where
! 	ftruncate is missing.
! 	* configure, include/config.h.in: Rebuilt.
! 	* acconfig.h (HAVE_FTRUNCATE): Mention.
! 	* configure.in: Check for ftruncate.
  
! 2002-08-29  Tom Tromey  <tromey@redhat.com>
  
! 	* include/jvm.h (struct _Jv_frame_info): New structure.
! 	* gnu/gcj/runtime/natNameFinder.cc: Include StringBuffer.h,
! 	java-interp.h.
! 	(lookupInterp): New method.
! 	(getAddrAsString): Use _Jv_frame_info.
! 	(dladdrLookup): Likewise.
! 	* gnu/gcj/runtime/NameFinder.java (lookup): Try to look up
! 	interpreted frame.
! 	(lookupInterp): Declare.
! 	* java/lang/natVMThrowable.cc: Include Thread.h, java-interp.h.
! 	(fillInStackTrace): Collect information on interpreted frames.
! 	Use _Jv_frame_info.
! 	* interpret.cc: Include Thread.h.
! 	(run): Create and push _Jv_MethodChain object.
! 	(_Jv_EndOfInterpreter): New global.
! 	* java/lang/Thread.java (interp_frame): New field.
! 	* include/java-interp.h (struct _Jv_MethodChain): New structure.
! 	Include NameFinder.h.
  
! 2002-08-28  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Class.h: Include Package.h.
! 	(Class::getProtectionDomain): Declare.
! 	(Class::getPackage): Declare.
  
! 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>
  
! 	* java/net/Authenticator.java: added some documentation.
  
! 2002-08-27  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/reflect/natConstructor.cc (newInstance): Initialize
! 	class.
! 	* java/lang/reflect/natMethod.cc (invoke): Initialize class.
  
! 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-27  Tony Kimball <alk@pobox.com>
! 	    Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/natPlainDatagramSocketImpl.cc (NATIVE_CLOSE): New
! 	define.
! 	(::close): Removed.
! 	(PlainDatagramSocketImpl::close): Use NATIVE_CLOSE.
! 	* java/net/natPlainSocketImpl.cc (NATIVE_CLOSE): New define.
! 	(::close): Removed.
! 	(PlainSocketImpl::close): Use NATIVE_CLOSE.
! 	* include/win32.h (getcwd): Removed declaration.  Include io.h.
  
! 2002-08-25  Adam Megacz <adam@xwt.org>
  
! 	* include/win32.h (getcwd): copied function declaration as
! 	temporary fix for header confusion.
  
! 2002-08-24  Mark Wielaard <mark@klomp.org>
  
! 	* Makefile.am (libgcj_la_SOURCES): Remove name-finder.cc.
! 	(core_java_source_files): Add VMThrowable.java and NameFinder.java
! 	(nat_source_files): Remove natThrowable.cc, add natVMThrowable.cc
! 	and natNameFinder.cc.
  	* Makefile.in: Regenerate.
! 	* prims.cc: Use trace_enabled from VMThrowable.
! 	* name-finder.cc: Removed.
! 	* gcj/javaprims.h: Add class VMThrowable.
! 	* gnu/gcj/runtime/NameFinder.java: New file.
! 	* gnu/gcj/runtime/natNameFinder.cc: Likewise.
! 	* include/name-finder.h: Removed.
! 	* java/lang/Throwable.java (printStackTrace (PrintStream)): Use new
! 	method stackTraceString().
! 	(printStackTrace (PrintWriter)): Likewise.
! 	(stackTraceString): Complete rewrite of old printStackTrace using
! 	StringBuffer.
! 	(stackTraceStringBuffer): New helper method for stackTraceString().
! 	(fillInStackTrace): Delegate to VMTrowable.
! 	(getStackTrace): Likewise.
! 	(getStackTrace0): Removed.
! 	(trace_enabled, stackTraceBytes): Moved to new VMThrowable.java.
! 	(setStackTrace): Copy given array.
! 	* java/lang/natThrowable.cc: Removed (replaced by natVMThrowable).
! 	* 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,
! 	gnu/gcj/protocol/core/Connection.java,
! 	gnu/gcj/protocol/file/Connection.java,
! 	gnu/gcj/protocol/http/Connection.java: Added implementation of
! 	getHeaderFields().
  
! 2002-08-22  Tom Tromey  <tromey@redhat.com>
  
! 	* gij.cc (help): Document -cp and -classpath.
! 	(main): Handle -classpath.
  
! 2002-08-21  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (ordinary_java_source_files): Added
! 	SocketAddress.java, InetSocketAddress.java.
! 	* java/net/PortUnreachableException.java: Merged with Classpath.
! 	* java/net/SocketTimeoutException.java: Likewise.
! 	* java/net/URISyntaxException.java: Likewise.
! 	* 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
  
! 2002-08-20  Michael Koch  <konqueror@gmx.de>
  
! 	* java/net/URISyntaxException.java: New file.
! 	* java/net/SocketTimeoutException.java: New file.
! 	* java/net/PortUnreachableException.java: New file.
! 	* Makefile.am: Updated.
! 	* Makefile.in: Rebuilt.
  
! 2002-08-18  Mark Wielaard  <mark@klomp.org>
  
! 	Thanks to Vladimir Puskas <vpuskas@eunet.yu>
! 	* gnu/java/security/provider/MD5.java: Extends MessageDigest, not
! 	MessageDigestSpi (fixes Classpath bug #783).
  
! 2002-08-14  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
  
! 	* java/lang/natPosixProcess.cc (cleanup): Added `path' argument.
! 	(startProcess): Allocate path for chdir in async-signal-safe way.
  
! 2002-08-13  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
  
! 	Fix for PR libgcj/7570 and PR libgcj/7578:
! 	* java/lang/natPosixProcess.cc: Include java/io/File.h.
! 	(startProcess): Handle new `dir' argument.
! 	* java/lang/Win32Process.java (ConcreteProcess): Added `dir'
! 	argument.
! 	* java/lang/PosixProcess.java (ConcreteProcess): Added `dir'
! 	argument.
! 	(startProcess): Likewise.
! 	* java/lang/EcosProcess.java (ConcreteProcess): Added `dir'
! 	argument.
! 	* java/lang/Runtime.java (execInternal): Added `dir' argument.
! 	(exec): Don't create new environment if ENV==null.  Pass DIR to
! 	execInternal.
! 	* java/lang/natRuntime.cc: Include java/io/File.h.
! 	(execInternal): Added `dir' argument.
  
! 2002-08-13  Jesse Rosenstock  <jmr@fulcrummicro.com>
  
! 	* java/io/RandomAccessFile.java (skipBytes): Return number of
! 	bytes skipped.
  
! 2002-08-01  Mark Wielaard  <mark@klomp.org>
  
! 	Reenable patch since shared library troubles on powerpc are solved:
! 	* gnu/java/security/provider/Gnu.java: Reference all implementation
! 	classes by using Class.getName().
! 	* 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/GnuDSAPrivateKey.java,
! 	gnu/java/security/provider/GnuDSAPublicKey.java,
! 	gnu/java/security/provider/MD5.java,
! 	gnu/java/security/util/Prime.java: New classes
! 	* Makefile.am (ordinary_java_source_files): Add above files.
  	* Makefile.in: Regenerate.
! 	* gnu/java/security/provider/DefaultPolicy.java
! 	(getPermissions): Don't maintain static class variable of Permissions.
! 	* gnu/java/security/provider/SHA.java
! 	(engineUpdate): algorithm change.
! 	(engineDigest): algorithm change.
  
! 2002-08-09  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.
! 	* javax/swing/text/html/HTML.java: Stub implementation.
! 	* javax/swing/text/html/parser/ParserDelegator.java: New stub
! 	implementation.
  
! 	* Makefile.am: Add new files.
  	* Makefile.in: Rebuilt.
  
! 2002-08-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* gnu/awt/j2d/Graphics2DImpl.java: Implement stubs for new abstract
! 	methods in Graphics2D.
  
! 2002-08-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	AWT/Swing merge from GNU Classpath.
  
! 	* java/awt/AlphaComposite.java, java/awt/AttributeValue.java,
! 	java/awt/BasicStroke.java, java/awt/BufferCapabilities.java,
! 	java/awt/color/CMMException.java, java/awt/ColorPaintContext.java,
! 	java/awt/color/ProfileDataException.java,
! 	java/awt/CompositeContext.java,	java/awt/Composite.java,
! 	java/awt/ContainerOrderFocusTraversalPolicy.java,
! 	java/awt/datatransfer/FlavorTable.java,
! 	java/awt/DefaultFocusTraversalPolicy.java,
! 	java/awt/DefaultKeyboardFocusManager.java, java/awt/DisplayMode.java,
! 	java/awt/dnd/DnDConstants.java, java/awt/dnd/DragGestureEvent.java,
! 	java/awt/dnd/DragGestureListener.java,
! 	java/awt/dnd/DragGestureRecognizer.java,
! 	java/awt/dnd/DragSourceAdapter.java,
! 	java/awt/dnd/DragSourceContext.java,
! 	java/awt/dnd/DragSourceDragEvent.java,
! 	java/awt/dnd/DragSourceEvent.java, java/awt/dnd/DragSource.java,
! 	java/awt/dnd/DragSourceListener.java,
! 	java/awt/dnd/DragSourceMotionListener.java,
! 	java/awt/dnd/DropTarget.java,
! 	java/awt/dnd/InvalidDnDOperationException.java,
! 	java/awt/dnd/peer/DragSourceContextPeer.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/FocusTraversalPolicy.java, java/awt/FontFormatException.java,
! 	java/awt/font/TextHitInfo.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/GradientPaint.java, java/awt/GraphicsConfigTemplate.java,
! 	java/awt/GraphicsDevice.java, java/awt/GraphicsEnvironment.java,
! 	java/awt/HeadlessException.java, java/awt/image/BufferedImageOp.java,
! 	java/awt/image/BufferStrategy.java, java/awt/ImageCapabilities.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/im/InputContext.java, java/awt/im/InputMethodHighlight.java
! 	java/awt/im/InputMethodRequests.java, java/awt/im/InputSubset.java,
! 	java/awt/JobAttributes.java, java/awt/KeyboardFocusManager.java,
! 	java/awt/KeyEventDispatcher.java, java/awt/KeyEventPostProcessor.java
! 	java/awt/PageAttributes.java, java/awt/print/Book.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/Robot.java, java/awt/ScrollPaneAdjustable.java,
! 	java/awt/Stroke.java, java/awt/TexturePaint.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/Accessible.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/swing/AbstractAction.java,
! 	javax/swing/AbstractButton.java,
! 	javax/swing/AbstractCellEditor.java,
! 	javax/swing/AbstractListModel.java,
! 	javax/swing/AbstractSet.java, javax/swing/Action.java,
! 	javax/swing/ActionMap.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/BorderFactory.java,
! 	javax/swing/border/LineBorder.java,
! 	javax/swing/border/MatteBorder.java,
! 	javax/swing/border/TitledBorder.java,
! 	javax/swing/BoundedRangeModel.java, javax/swing/Box.java,
! 	javax/swing/BoxLayout.java, javax/swing/ButtonGroup.java,
! 	javax/swing/ButtonModel.java, javax/swing/CellEditor.java,
! 	javax/swing/CellRendererPane.java,
! 	javax/swing/colorchooser/AbstractColorChooserPanel.java,
! 	javax/swing/colorchooser/ColorChooserComponentFactory.java,
! 	javax/swing/colorchooser/ColorSelectionModel.java,
! 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
! 	javax/swing/ComboBoxEditor.java, javax/swing/ComboBoxModel.java,
! 	javax/swing/ComponentInputMap.java, javax/swing/DebugGraphics.java,
! 	javax/swing/DefaultBoundedRangeModel.java,
  	javax/swing/DefaultButtonModel.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/DefaultListModel.java,
! 	javax/swing/DefaultListSelectionModel.java,
! 	javax/swing/DefaultSingleSelectionModel.java,
! 	javax/swing/DesktopManager.java,
! 	javax/swing/event/AncestorEvent.java,
! 	javax/swing/event/AncestorListener.java,
! 	javax/swing/event/CaretEvent.java,
! 	javax/swing/event/CaretListener.java,
! 	javax/swing/event/CellEditorListener.java,
! 	javax/swing/event/ChangeEvent.java,
! 	javax/swing/event/ChangeListener.java,
! 	javax/swing/event/DocumentEvent.java,
! 	javax/swing/event/DocumentListener.java,
! 	javax/swing/event/EventListenerList.java,
! 	javax/swing/event/HyperlinkEvent.java,
! 	javax/swing/event/HyperlinkListener.java,
! 	javax/swing/event/InternalFrameAdapter.java,
! 	javax/swing/event/InternalFrameEvent.java,
! 	javax/swing/event/InternalFrameListener.java,
! 	javax/swing/event/ListDataEvent.java,
! 	javax/swing/event/ListDataListener.java,
! 	javax/swing/event/ListSelectionEvent.java,
! 	javax/swing/event/ListSelectionListener.java,
! 	javax/swing/event/MenuDragMouseEvent.java,
! 	javax/swing/event/MenuDragMouseListener.java,
! 	javax/swing/event/MenuEvent.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/event/UndoableEditEvent.java,
! 	javax/swing/event/UndoableEditListener.java,
! 	javax/swing/filechooser/FileFilter.java,
  	javax/swing/filechooser/FileSystemView.java,
! 	javax/swing/filechooser/FileView.java,
! 	javax/swing/FocusManager.java, javax/swing/GrayFilter.java,
! 	javax/swing/Icon.java, javax/swing/ImageIcon.java,
! 	javax/swing/InputMap.java, javax/swing/InputVerifier.java,
! 	javax/swing/JApplet.java, javax/swing/JButton.java,
! 	javax/swing/JCheckBox.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/JFrame.java,
! 	javax/swing/JInternalFrame.java, javax/swing/JLabel.java,
! 	javax/swing/JLayeredPane.java, javax/swing/JList.java,
! 	javax/swing/JMenuBar.java, javax/swing/JMenuItem.java,
! 	javax/swing/JMenu.java,	javax/swing/JOptionPane.java,
! 	javax/swing/JPanel.java, javax/swing/JPasswordField.java,
! 	javax/swing/JPopupMenu.java, javax/swing/JProgressBar.java,
! 	javax/swing/JRadioButton.java, javax/swing/JRadioButtonMenuItem.java,
! 	javax/swing/JRootPane.java, javax/swing/JScrollBar.java,
! 	javax/swing/JScrollPane.java, javax/swing/JSeparator.java,
! 	javax/swing/JSlider.java, javax/swing/JSplitPane.java,
! 	javax/swing/JTabbedPane.java, javax/swing/JTable.java,
! 	javax/swing/JTextField.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/JWindow.java,
! 	javax/swing/KeyStroke.java, javax/swing/ListCellRenderer.java,
! 	javax/swing/ListModel.java, javax/swing/ListSelectionModel.java,
! 	javax/swing/LookAndFeel.java, javax/swing/MenuElement.java,
! 	javax/swing/MenuSelectionManager.java,
! 	javax/swing/MutableComboBoxModel.java,
! 	javax/swing/OverlayLayout.java,
! 	javax/swing/plaf/ActionMapUIResource.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/BasicLookAndFeel.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/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/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/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,
! 	javax/swing/ProgressMonitorInputStream.java,
! 	javax/swing/ProgressMonitor.java,
! 	javax/swing/Renderer.java,
! 	javax/swing/RepaintManager.java,
! 	javax/swing/RootPaneContainer.java,
! 	javax/swing/Scrollable.java,
! 	javax/swing/ScrollPaneConstants.java,
! 	javax/swing/ScrollPaneLayout.java,
! 	javax/swing/SingleSelectionModel.java,
! 	javax/swing/SizeRequirements.java,
! 	javax/swing/SizeSequence.java,
! 	javax/swing/SwingConstants.java,
! 	javax/swing/SwingUtilities.java,
! 	javax/swing/table/AbstractTableModel.java,
! 	javax/swing/table/DefaultTableCellRenderer.java,
! 	javax/swing/table/DefaultTableColumnModel.java,
! 	javax/swing/table/DefaultTableModel.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/text/AbstractDocument.java,
- 	javax/swing/text/AttributeSet.java,
- 	javax/swing/text/BadLocationException.java,
- 	javax/swing/text/Caret.java,
- 	javax/swing/text/CharacterIterator.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/Element.java,
- 	javax/swing/text/GapContent.java,
- 	javax/swing/text/JTextComponent.java,
- 	javax/swing/text/Keymap.java,
- 	javax/swing/text/MutableAttributeSet.java,
- 	javax/swing/text/PlainDocument.java,
- 	javax/swing/text/PlainEditorKit.java,
- 	javax/swing/text/Position.java,
- 	javax/swing/text/Segment.java,
- 	javax/swing/text/StyledDocument.java,
  	javax/swing/text/StyledEditorKit.java,
! 	javax/swing/text/Style.java,
! 	javax/swing/text/TextAction.java,
! 	javax/swing/text/ViewFactory.java,
! 	javax/swing/text/View.java,
! 	javax/swing/Timer.java,
! 	javax/swing/ToggleButtonModel.java,
! 	javax/swing/ToolTipManager.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/TreeNode.java,
! 	javax/swing/tree/TreePath.java,
! 	javax/swing/tree/TreeSelectionModel.java,
! 	javax/swing/tree/VariableHeightLayoutCache.java,
! 	javax/swing/UIDefaults.java,
! 	javax/swing/UIManager.java,
! 	javax/swing/undo/AbstractUndoableEdit.java,
! 	javax/swing/undo/CannotRedoException.java,
! 	javax/swing/undo/CannotUndoException.java,
! 	javax/swing/undo/CompoundEdit.java,
! 	javax/swing/undo/StateEditable.java,
! 	javax/swing/undo/StateEdit.java,
! 	javax/swing/undo/UndoableEdit.java,
! 	javax/swing/undo/UndoableEditSupport.java,
! 	javax/swing/undo/UndoManager.java,
! 	javax/swing/UnsupportedLookAndFeelException.java,
! 	javax/swing/ViewportLayout.java,
! 	javax/swing/WindowConstants.java: New files, from GNU Classpath.
! 
! 	* java/awt/ActiveEvent.java,
! 	java/awt/Adjustable.java, java/awt/AWTError.java,
! 	java/awt/AWTEvent.java,	java/awt/AWTEventMulticaster.java,
! 	java/awt/AWTException.java, java/awt/AWTPermission.java,
! 	java/awt/BorderLayout.java, java/awt/Button.java, java/awt/Choice.java,
! 	java/awt/Color.java, java/awt/Component.java,
! 	java/awt/ComponentOrientation.java, java/awt/Container.java,
! 	java/awt/datatransfer/MimeTypeParseException.java,
! 	java/awt/datatransfer/Transferable.java,
! 	java/awt/datatransfer/UnsupportedFlavorException.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/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/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/Font.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/GraphicsConfiguration.java,
! 	java/awt/IllegalComponentStateException.java,
! 	java/awt/image/IndexColorModel.java,
! 	java/awt/Image.java, java/awt/image/MemoryImageSource.java,
! 	java/awt/image/PixelGrabber.java, java/awt/Insets.java,
! 	java/awt/ItemSelectable.java, java/awt/LayoutManager2.java,
! 	java/awt/LayoutManager.java, java/awt/MenuContainer.java,
! 	java/awt/MenuItem.java,	java/awt/PaintContext.java,
! 	java/awt/Paint.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/ScrollPane.java,
! 	java/awt/Shape.java, java/awt/SystemColor.java, java/awt/Toolkit.java,
! 	java/awt/Transparency.java, java/awt/Window.java: Merge from classpath.
  
! 	* java/awt/im/spi/InputMethod.java,
! 	java/awt/im/spi/InputMethodContext.java,
! 	java/awt/im/spi/InputMethodDescriptor.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: New files from
! 	classpath.
  
! 	* gnu/java/awt/EventModifier.java,
! 	gnu/java/awt/image/ImageDecoder.java,
! 	gnu/java/awt/image/XBMDecoder.java: New files from GNU Classpath.
  
! 	* gnu/awt/xlib/XGraphicsConfiguration.java,
! 	gnu/awt/xlib/XToolkit.java: Updated to compile against 1.4 abstract
! 	API.
  
! 	* javax/swing/plaf/metal/MetalLookAndFeel.java: New file from
! 	GNU Classpath.
  
! 	* Makefile.am: Add new files.
! 	* Makefile.in: Rebuilt.
  
! 2002-08-07  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/lang/ClassLoader.java (getSystemClassLoader, findClass,
! 	defineClass, setSigners, getSystemResource, getSystemResourceAsStream,
! 	findResource, getResources, findResources): Add javadoc from classpath.
! 	(getSystemResources): Implemented.
  
! 2002-08-01  Mark Wielaard  <mark@klomp.org>
  
! 	Revert patch that breaks libgcj shared library on powerpc:
! 	* gnu/java/security/provider/Gnu.java: Reverse referencing all
! 	implementation classes by using Class.getName(). Uses Strings again.
! 	* 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/GnuDSAPrivateKey.java,
! 	gnu/java/security/provider/GnuDSAPublicKey.java,
! 	gnu/java/security/provider/MD5.java,
! 	gnu/java/security/util/Prime.java: Removed.
! 	* Makefile.am (ordinary_java_source_files): Remove above files.
! 	* Makefile.in: Regenerate.
! 	* gnu/java/security/provider/DefaultPolicy.java
! 	(getPermissions): Revert to maintaining static class variable of
! 	Permissions.
! 	* gnu/java/security/provider/SHA.java
! 	(engineUpdate): Revert algorithm change.
! 	(engineDigest): Revert algorithm change.
  
! 2002-08-01  Kaz Kojima  <kkojima@gcc.gnu.org>
  
! 	* configure.host: Add SH support.
! 	* sysdep/sh/locks.h: New file.
  
! 2002-07-31  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/awt/Frame.java (Frame): Remove println calls.
  
! 2002-07-30  Jeff Sturm  <jsturm@one-point.com>
  
! 	* configure.in (LIBFFIINCS): Don't prepend MULTIBUILDTOP.
! 	* configure: Rebuilt.
  
! 2002-07-27  Alan Modra  <amodra@bigpond.net.au>
  
! 	* sysdep/powerpc/locks.h: Formatting.
! 	(_LARX): Define.
! 	(_STCX): Define.
! 	(compare_and_swap): Use _LARX and _STCX.
! 	(compare_and_swap_release): Likewise.
  
! 2002-07-26  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/Authenticator.java: New version from Classpath.
! 	* java/net/DatagramSocketImpl.java: New version from Classpath.
  
! 2002-07-27  Alan Modra  <amodra@bigpond.net.au>
  
! 	* configure.host: Add powerpc64*-* entry.
  
! 2002-07-26  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/natFileDescriptorPosix.cc: Don't include sys/socket.h or
! 	fcntl.h.
  
! 2002-07-24  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Runtime.java (loadLibrary): Pass `true' as search
! 	argument to _load.
  
! 2002-07-24  Tom Tromey  <tromey@redhat.com>
! 	    Tony Kimball <alk@pobox.com>
  
! 	* java/io/natFileDescriptorWin32.cc (setLength): New method.
! 	* java/io/natFileDescriptorPosix.cc (setLength): New method.
! 	* java/io/RandomAccessFile.java (setLength): New method.
! 	* java/io/natFileDescriptorEcos.cc (setLength): New method.
! 	* java/io/FileDescriptor.java (setLength): New method.
  
! 2002-07-24  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/reflect/natField.cc (setAddr): Check isAccessible().
! 	* java/io/ObjectInputStream.java (setBooleanField): Before setting
! 	field call setAccessible(true).
! 	(setByteField): Likewise.
! 	(setCharField): Likewise.
! 	(setDoubleField): Likewise.
! 	(setFloatField): Likewise.
! 	(setIntField): Likewise.
! 	(setLongField): Likewise.
! 	(setShortField): Likewise.
! 	(setObjectField): Likewise.
  
! 2002-07-24  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/ObjectInputStream.java (readObject) [TC_ARRAY]: Don't
! 	use toString() to format array element.
  
! 2002-07-23  Mark Wielaard  <mark@klomp.org>
  
! 	* gnu/java/security/provider/MD5.java: Extends MessageDigest, not
! 	MessageDigestSpi (fixes Classpath 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-19  Bo Thorsen  <bo@berlioz.suse.de>
  
- 	* java/lang/ieeefp.h: Add x86-64 support.
- 	* configure.in: Likewise.
- 	* configure.host: Likewise.
- 	* configure: Regenerated.
- 	* sysdep/x86-64/locks.h: New file with x86-64 locks.
  
! 2002-07-16  Mark Wielaard  <mark@klomp.org>
  
! 	* java/io/StreamTokenizer.java (pushBack): Update documentation.
! 	(whitespaceChars): call resetChar().
  
! 2002-07-15  Tom Tromey  <tromey@redhat.com>
  
  	* Makefile.in: Rebuilt.
- 	* Makefile.am (awt_java_source_files): Added new files.
- 	* java/beans/ExceptionListener.java: Merged with Classpath.
- 	* java/beans/PropertyChangeEvent.java: Merged with Classpath.
- 	* java/beans/PropertyChangeListener.java: Merged with Classpath.
- 	* java/beans/PropertyChangeListenerProxy.java: Merged with Classpath.
- 	* java/beans/PropertyChangeSupport.java: Merged with Classpath.
- 	* java/beans/VetoableChangeListener.java: Merged with Classpath.
- 	* java/beans/VetoableChangeListenerProxy.java: Merged with Classpath.
- 	* java/beans/VetoableChangeSupport.java: Merged with Classpath.
  
! 2002-07-14  Mark Wielaard  <mark@klomp.org>
  
! 	* 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/GnuDSAPrivateKey.java,
! 	gnu/java/security/provider/GnuDSAPublicKey.java,
! 	gnu/java/security/provider/MD5.java,
! 	gnu/java/security/util/Prime.java: New files from Classpath.
! 	* Makefile.am (ordinary_java_source_files): Add new files.
! 	* Makefile.in: Regenerate.
  
! 2002-07-14  C. Brian Jones <cbj@gnu.org>
  
! 	* 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
  
! 2002-07-12  Jesse Rosenstock  <jmr@fulcrummicro.com>
  
! 	For PR libgcj/7292:
! 	* java/lang/Character.java (toString(char)): Now static.
  
! 2002-07-12  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/natThrowable.cc (printRawStackTrace): removed.
! 	(getStackTrace0): new method.
! 	* java/lang/Throwable.java (CPlusPlusDemangler): removed.
! 	(printStackTrace(PrintWriter)): replace with pure java implementation.
! 	(printRawStackTrace): removed.
! 	(getStackTrace0): new method.
! 	* java/lang/StackTraceElement.java (toString): add extra whitespace.
! 	* gcj/javaprims.h: regenerate class list.
! 	* include/name-finder.h (lookup): new returns StackTraceElement*.
! 	(method_name, file_name): fields removed.
! 	(pid2, f2_pipe, b2_pipe, b2_pipe_fd): new fields.
! 	(~_Jv_name_finder): close new descriptors.
! 	* name-finder.cc(_Jv_name_finder): setup c++filt helper process.
! 	(createStackTraceElement): new method.
! 	(lookup): returns StackTraceElement*, uses createStackTraceElement().
  
! 2002-07-10  Tom Tromey  <tromey@redhat.com>
  
! 	* configure: Rebuilt.
! 	* configure.in: Use `test' after `&&'.  From Chris Faylor.
  
! 2002-07-08  Mark Wielaard  <mark@klomp.org>
  
! 	* mauve-libgcj: Don't compile java.sql.Blob.BlobTest,
! 	java.sql.Clob.ClobTest, java.sql.Connection.TestJdbc20,
! 	java.sql.DatabaseMetaData.TestJdbc20
  
! 2002-07-05  Tony Kimball  <alk@pobox.com>
  
! 	* java/lang/natRuntime.cc (nativeGetLibname): Added missing `#'.
  
! 2002-07-04  Tom Tromey  <tromey@redhat.com>
! 	    Jeff Sturm  <jsturm@one-point.com>
  
! 	Fix for PR libgcj/7060:
! 	* java/lang/Class.h (_getMethod): Renamed from getMethod.
! 	* java/lang/natClass.cc (_getMethod): Renamed from getMethod.
! 	Recurse into superinterfaces.  Don't throw NoSuchMethodException.
! 	* java/lang/Class.java (getMethod): New Java implementation;
! 	complies with spec.
! 	(_getMethod): New native method.
  
! 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-07-01  Tom Tromey  <tromey@redhat.com>
  
! 	* javax/naming/spi/NamingManager.java (getPlusPath): Don't create
! 	StringTokenizer on null string.  For PR libgcj/7180.
! 	From daveho@cs.umd.edu.
  
! 2002-06-24  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/natPlainDatagramSocketImpl.cc (BooleanClass): Removed.
! 	(IntegerClass): Likewise.
! 	* java/lang/natClass.cc (CloneableClass): Removed.
! 	(ObjectClass, ErrorClass, ClassClass, MethodClass, FieldClass,
! 	ConstructorClass): Likewise.
! 	* java/lang/natClassLoader.cc (CloneableClass): Removed.
! 	(ObjectClass, ClassClass, VMClassLoaderClass, ClassLoaderClass,
! 	SerializableClass): Likewise.
! 	* java/lang/reflect/natMethod.cc (BooleanClass): Removed.
! 	(VoidClass, ByteClass, ShortClass, CharacterClass, IntegerClass,
! 	LongClass, FloatClass, DoubleClass): Likewise.
  
! 	* verify.cc (branch_prepass): Updated for change to exception
! 	handler type.
! 	(verify_instructions_0): Likewise.
! 	* defineclass.cc (handleCodeAttribute): Initialize `prepared'.
! 	(handleExceptionTableEntry): Updated for change to exception
! 	handler type.
! 	* java/lang/Class.h (Class): Removed _Jv_InterpMethodInvocation.
! 	* include/java-interp.h (_Jv_InterpMethodInvocation): Removed.
! 	(union _Jv_InterpPC): New.
! 	(class _Jv_InterpException): Changed types to _Jv_InterpPC.
! 	(class _Jv_InterpMethod): Added new `prepared' field.
! 	(class _Jv_InterpMethod): Added `compile' method.  Removed
! 	`continue1' and `find_exception'.  Changed arguments to `run'.
! 	* interpret.cc (union insn_slot): New.
! 	(find_exception): Removed.
! 	(run_normal): Removed most logic.
! 	(run_synch_object): Likewise; also, use JvSynchronize.
! 	(run_synch_class): Likewise.
! 	(run): Removed.
! 	(continue1): Renamed as `run'.  Compile bytecode if required.
! 	Add new code to allow refinement of direct-threaded code at
! 	runtime.  Handle exceptions.
! 	(SAVE_PC): Removed.
! 	(compile): New method.
! 	(SET_ONE, SET_INSN, SET_INT, SET_DATUM): New defines.
! 	(NULLARRAYCHECK): Don't use SAVE_PC.
! 	(pc_t): New typedef.
! 	(TAKE_GOTO, GET1S, GET1U, GET2U, AVAL1U, AVAL2U, AVAL2UP,
! 	SKIP_GOTO, GOTO_VAL, PCVAL, AMPAMP): New macros.
  
! 2002-06-23  Tom Tromey  <tromey@redhat.com>
  
! 	* configure: Rebuilt.
! 	* configure.in (INTERPRETER): New subst.
! 	(AM_RUNTESTFLAGS): Don't subst.
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am ($(srcdir)/java/lang/Object.h,
! 	$(srcdir)/java/lang/Class.h): Added dummy targets.
  
! 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.
! 	* Makefile.am: Add new files.
! 	* Makefile.in: Rebuilt.
  
! 2002-06-20  Tom Tromey  <tromey@redhat.com>
  
! 	For PR libgcj/7073:
! 	* resolve.cc (_Jv_PrepareClass): Only resolve superclass if it
! 	exists.
! 	* defineclass.cc (handleClassBegin): Superclass for interface is
! 	`null'.
  
! 2002-06-18  Tom Tromey  <tromey@redhat.com>
  
! 	* gcj/javaprims.h: Updated class declaration list.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (core_java_source_files): Removed
! 	BasicMapEntry.java.
! 	* java/util/BasicMapEntry.java: Removed.
  
! 2002-06-18  Jeff Sturm  <jsturm@one-point.com>
  
! 	* java/net/natPlainDatagramSocketImpl.cc (receive):
! 	Check bounds of argument to FD_SET.
! 	(setOption): Throw exception if socket is closed.
  
! 	* java/net/natPlainSocketImpl.cc (accept, read):
! 	Check bounds of argument to FD_SET.
! 	(setOption): Throw exception if socket is closed.
  
! 2002-06-18  Tom Tromey  <tromey@redhat.com>
  
! 	* gcj/javaprims.h: Updated class declaration list.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (core_java_source_files): Added
! 	PropertyPermissionCollection.java.
! 	* java/lang/Thread.java (group, name): Now package-private.
! 	* java/lang/ThreadGroup.java: Re-merge with Classpath.
! 	* java/util/AbstractList.java: Likewise.
! 	* java/util/AbstractMap.java: Likewise.
! 	* java/util/Calendar.java: Likewise.
! 	* java/util/Collections.java: Likewise.
! 	* java/util/HashMap.java: Likewise.
! 	* java/util/Hashtable.java: Likewise.
! 	* java/util/LinkedHashMap.java: Likewise.
! 	* java/util/LinkedList.java: Likewise.
! 	* java/util/List.java: Likewise.
! 	* java/util/ListResourceBundle.java: Likewise.
! 	* java/util/Map.java: Likewise.
! 	* java/util/Observable.java: Likewise.
! 	* java/util/Properties.java: Likewise.
! 	* java/util/PropertyPermission.java: Likewise.
! 	* java/util/PropertyPermissionCollection.java: Likewise.
! 	* java/util/PropertyResourceBundle.java: Likewise.
! 	* java/util/Random.java: Likewise.
! 	* java/util/SimpleTimeZone.java: Likewise.
! 	* java/util/StringTokenizer.java: Likewise.
! 	* java/util/TimerTask.java: Likewise.
! 	* java/util/TreeMap.java: Likewise.
! 	* java/util/WeakHashMap.java: Likewise.
! 	* java/util/jar/Attributes.java: Likewise.
! 	* java/util/jar/JarException.java: Likewise.
! 	* java/util/jar/Manifest.java: Likewise.
  
! 2002-06-17  Tom Tromey  <tromey@redhat.com>
  
! 	* gcj/javaprims.h: Updated class declaration list.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (core_java_source_files): Added new file.
! 	* java/util/EventListenerProxy.java: New file.
! 	* java/util/EventListener.java: Re-merge with Classpath.
! 	* java/util/EventObject.java: Re-merge with Classpath.
  
! 2002-06-17  Nathanael Nerode  <neroden@twcny.rr.com>
  
! 	* java/lang/ClassNotFoundException.java: New Classpath version.
  
! 2002-06-17  Nathanael Nerode  <neroden@twcny.rr.com>
  
! 	* java/rmi/activation/ActivateFailedException.java: Remerge from
! 	Classpath version.
! 	* java/rmi/activation/ActivationException.java: Ditto.
! 	* java/rmi/activation/UnknownGroupException.java: Ditto.
! 	* java/rmi/activation/UnknownObjectException.java: Ditto.
! 	* java/rmi/server/ExportException: Ditto.
! 	* java/rmi/server/ServerCloneException: Ditto.
! 	* java/rmi/server/ServerNotActiveException: Ditto.
! 	* java/rmi/server/SkeletonMismatchException: Ditto.
! 	* java/rmi/server/SkeletonNotFoundException: Ditto.
! 	* java/rmi/server/SocketSecurityException: Ditto.
  
! 2002-06-16  Tom Tromey  <tromey@redhat.com>
  
! 	* gcj/javaprims.h: Updated class declaration list.
  
! 	* java/io/LineNumberInputStream.java: Merged with Classpath.
  
! 	* java/lang/RuntimeException.java: Re-merge with Classpath.
! 	* java/util/ArrayList.java: Likewise.
! 	* java/util/Arrays.java: Likewise.
! 	* java/util/BitSet.java: Likewise.
! 	* java/util/Dictionary.java: Likewise.
! 	* java/util/IdentityHashMap.java: Likewise.
! 	* java/util/MissingResourceException.java: Likewise.
! 	* java/util/Observer.java: Likewise.
! 	* java/util/TooManyListenersException.java: Likewise.
! 	* java/util/zip/DataFormatException.java: Likewise.
! 	* java/util/zip/ZipException.java: Likewise.
  
! 2002-06-16  Nathanael Nerode  <neroden@twcny.rr.com>
  
! 	* java/rmi/AccessException.java: Remerge from Classpath.
! 	* 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/ServerError.java: Ditto.
! 	* java/rmi/ServerException.java: Ditto.
! 	* java/rmi/ServerRuntimeException.java: Ditto.
! 	* java/rmi/StubNotFoundException.java: Ditto.
! 	* java/rmi/UnexpectedExcpetion.java: Ditto.
! 	* java/rmi/UnknownHostException.java: Ditto.
! 	* java/rmi/UnmarshalException.java: Ditto.
  
! 2002-06-15  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/AbstractMethodError.java: Re-merged with Classpath.
! 	* java/lang/ArithmeticException.java: Likewise.
! 	* java/lang/ArrayIndexOutOfBoundsException.java: Likewise.
! 	* java/lang/ArrayStoreException.java: Likewise.
! 	* java/lang/Byte.java: Likewise.
! 	* java/lang/CharSequence.java: Likewise.
! 	* java/lang/ClassCastException.java: Likewise.
! 	* java/lang/ClassCircularityError.java: Likewise.
! 	* java/lang/ClassFormatError.java: Likewise.
! 	* java/lang/CloneNotSupportedException.java: Likewise.
! 	* java/lang/Cloneable.java: Likewise.
! 	* java/lang/Comparable.java: Likewise.
! 	* java/lang/Compiler.java: Likewise.
! 	* java/lang/Error.java: Likewise.
! 	* java/lang/ExceptionInInitializerError.java: Likewise.
! 	* java/lang/IllegalAccessError.java: Likewise.
! 	* java/lang/IllegalAccessException.java: Likewise.
! 	* java/lang/IllegalArgumentException.java: Likewise.
! 	* java/lang/IllegalMonitorStateException.java: Likewise.
! 	* java/lang/IllegalStateException.java: Likewise.
! 	* java/lang/IllegalThreadStateException.java: Likewise.
! 	* java/lang/IncompatibleClassChangeError.java: Likewise.
! 	* java/lang/IndexOutOfBoundsException.java: Likewise.
! 	* java/lang/InheritableThreadLocal.java: Likewise.
! 	* java/lang/InstantiationError.java: Likewise.
! 	* java/lang/InstantiationException.java: Likewise.
! 	* java/lang/InternalError.java: Likewise.
! 	* java/lang/InterruptedException.java: Likewise.
! 	* java/lang/LinkageError.java: Likewise.
! 	* java/lang/NegativeArraySizeException.java: Likewise.
! 	* java/lang/NoClassDefFoundError.java: Likewise.
! 	* java/lang/NoSuchFieldError.java: Likewise.
! 	* java/lang/NoSuchFieldException.java: Likewise.
! 	* java/lang/NoSuchMethodError.java: Likewise.
! 	* java/lang/NoSuchMethodException.java: Likewise.
! 	* java/lang/NullPointerException.java: Likewise.
! 	* java/lang/NumberFormatException.java: Likewise.
! 	* java/lang/OutOfMemoryError.java: Likewise.
! 	* java/lang/Process.java: Likewise.
! 	* java/lang/Runnable.java: Likewise.
! 	* java/lang/RuntimePermission.java: Likewise.
! 	* java/lang/SecurityException.java: Likewise.
! 	* java/lang/Short.java: Likewise.
! 	* java/lang/StackOverflowError.java: Likewise.
! 	* java/lang/StringIndexOutOfBoundsException.java: Likewise.
! 	* java/lang/ThreadDeath.java: Likewise.
! 	* java/lang/ThreadLocal.java: Likewise.
! 	* java/lang/UnknownError.java: Likewise.
! 	* java/lang/UnsatisfiedLinkError.java: Likewise.
! 	* java/lang/UnsupportedClassVersionError.java: Likewise.
! 	* java/lang/UnsupportedOperationException.java: Likewise.
! 	* java/lang/VerifyError.java: Likewise.
! 	* java/lang/VirtualMachineError.java: Likewise.
! 	* java/lang/reflect/InvocationTargetException.java: Likewise.
! 	* java/net/BindException.java: Likewise.
! 	* java/net/ConnectException.java: Likewise.
! 	* java/net/MalformedURLException.java: Likewise.
! 	* java/net/NoRouteToHostException.java: Likewise.
! 	* java/net/ProtocolException.java: Likewise.
! 	* java/net/SocketException.java: Likewise.
! 	* java/net/UnknownHostException.java: Likewise.
! 	* java/net/UnknownServiceException.java: Likewise.
  
! 	* java/io/BufferedOutputStream.java: Re-merged with Classpath.
! 	* java/io/CharConversionException.java: Likewise.
! 	* java/io/EOFException.java: Likewise.
! 	* java/io/FileNotFoundException.java: Likewise.
! 	* java/io/IOException.java: Likewise.
! 	* java/io/InterruptedIOException.java: Likewise.
! 	* java/io/InvalidClassException.java: Likewise.
! 	* java/io/InvalidObjectException.java: Likewise.
! 	* java/io/NotActiveException.java: Likewise.
! 	* java/io/NotSerializableException.java: Likewise.
! 	* java/io/ObjectStreamException.java: Likewise.
! 	* java/io/ObjectStreamConstants.java: Likewise.
! 	* java/io/OptionalDataException.java: Likewise.
! 	* java/io/PipedInputStream.java: Likewise.
! 	* java/io/PushbackInputStream.java: Likewise.
! 	* java/io/StreamCorruptedException.java: Likewise.
! 	* java/io/SyncFailedException.java: Likewise.
! 	* java/io/UTFDataFormatException.java: Likewise.
! 	* java/io/UnsupportedEncodingException.java: Likewise.
! 	* java/io/WriteAbortedException.java: Likewise.
  
! 2002-06-15  Nathanael Nerode  <neroden@twcny.rr.com>
  
! 	* java/text/ChoiceFormat.java: Update comments from Classpath.
! 	* java/text/ParseException.java (serialVersionUID): New
! 	field from Classpath.
! 	* java/text/ParseException.java: Update formatting & comments
! 	from Classpath.
  
! 2002-06-15  Tom Tromey  <tromey@redhat.com>
  
! 	* java/util/zip/InflaterInputStream.java (read): Loop if data has
! 	been read but none output by inflater.
! 	* java/util/zip/natDeflater.cc (reset): Set is_finished.
! 	* java/util/zip/natInflater.cc (reset): Set dist_needed and
! 	is_finished.
! 	* java/util/zip/ZipOutputStream.java: Replaced with Classpath
! 	version.
! 	* java/util/zip/ZipFile.java: Replaced with Classpath version.
! 	* java/util/zip/ZipEntry.java: Replaced with Classpath version.
! 	* java/util/zip/ZipInputStream.java: Replaced with Classpath
! 	version.
! 	* java/util/zip/ZipConstants.java: Replaced with Classpath version.
  
! 2002-06-13  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natString.cc (init): Handle case where DONT_COPY is
! 	true and OFFSET!=0.
! 	* java/lang/String.java (String(char[],int,int,boolean): New
! 	constructor.
! 	* java/lang/Long.java: Imported new version from Classpath.
! 	* java/lang/Number.java: Likewise.
! 	* java/lang/Integer.java: Likewise.
! 	* java/lang/Long.java: Likewise.
! 	* java/lang/Float.java: Likewise.
! 	* java/lang/Boolean.java: Likewise.
! 	* java/lang/Double.java: Likewise.
! 	* java/lang/Void.java: Likewise.
  
! 2002-06-12  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/natFilePosix.cc (getCanonicalPath): Treat "" like ".".
! 	Fixes PR libgcj/6652.
  
! 2002-06-10  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Class.h (Class::desiredAssertionStatus): Declare.
! 	(Class::getPackagePortion): Likewise.
! 	* java/lang/Class.java (desiredAssertionStatus): New method from
! 	Classpath.
! 	(getPackagePortion): Likewise.
! 	* java/lang/VMClassLoader.java (defaultAssertionStatus,
! 	packageAssertionStatus, classAssertionStatus): New methods from
! 	Classpath.
! 	* java/lang/ClassLoader.java (defaultAssertionStatus,
! 	systemPackageAssertionStatus, packageAssertionStatus,
! 	systemClassAssertionStatus, classAssertionStatus): New fields from
! 	Classpath.
! 	(setDefaultAssertionStatus, setPackageAssertionStatus,
! 	setClassAssertionStatus, clearAssertionStatus): New methods from
! 	Classpath.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (core_java_source_files): Added AssertionError.java.
! 	* java/lang/AssertionError.java: New from Classpath.
  
! 2002-06-10  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* configure.host: Disable hash synchronization and slow_pthread_self
! 	for cygwin.
  
! 2002-06-06  Adam Megacz <adam@xwt.org>
  
! 	* java/io/natFileDescriptorWin32.cc (open): Disable Win32 file
! 	locking, just like the Sun JVM does.
  
! 2002-06-05  H.J. Lu  (hjl@gnu.org)
  
! 	* Makefile.am (libgcj_convenience.la): Revert the last change.
! 	(libgcj.la): Likewise.
! 	* Makefile.in: Regenerated.
  
! 2002-06-04  H.J. Lu  (hjl@gnu.org)
  
! 	* Makefile.am (libgcj_convenience.la): New target.
! 	(libgcj.la): Depend on libgcj_convenience.la.
! 	* Makefile.in: Regenerated.
  
! 2002-06-04  H.J. Lu  (hjl@gnu.org)
  
! 	* configure.in (--with-newlib): New option:
! 	Check ${with_newlib} instead of ${with_cross_host} for newlib.
! 	(HAVE_PROC_SELF_EXE): Defined to 1 only for cross compiling to
! 	Linux.
! 	* configure: Regenerated.
  
! 2002-06-04  Tom Tromey  <tromey@redhat.com>
  
! 	* java/util/natTimeZone.cc: Include <stdio.h>.
  
! 2002-05-29  Ulrich Weigand  <uweigand@de.ibm.com>
  
! 	* configure.host [s390*-linux*]: Set can_unwind_signal=yes.
! 	* configure.in [s390*-*-linux*]: Do not define HAVE_BACKTRACE.
! 	Set SIGNAL_HANDLER=include/s390-linux.h.
! 	* configure: Regenerate.
! 	* include/s390-linux.h: New file.
  
! 2002-05-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/lang/natThrowable.cc (fillInStackTrace): Use "stackTraceBytes",
! 	not "stackTrace".
  
! 2002-05-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	Merge JDK 1.4 java.security changes from classpath.
  
! 	* java/security/AccessControlException.java: Merge from Classpath.
! 	* java/security/AccessController.java: Likewise.
! 	* java/security/AllPermission.java: Likewise.
! 	* java/security/BasicPermission.java: Likewise.
! 	* java/security/Certificate.java: Likewise.
! 	* java/security/CodeSource.java: Likewise.
! 	* java/security/DigestException.java: Likewise.
! 	* java/security/DigestOutputStream.java: Likewise.
! 	* java/security/DomainCombiner.java: Likewise.
! 	* java/security/GeneralSecurityException.java: Likewise.
! 	* java/security/Guard.java: Likewise.
! 	* java/security/GuardedObject.java: Likewise.
! 	* java/security/InvalidAlgorithmParameterException.java: Likewise.
! 	* java/security/InvalidKeyException.java: Likewise.
! 	* java/security/InvalidParameterException.java: Likewise.
! 	* java/security/Key.java: Likewise.
! 	* java/security/KeyException.java: Likewise.
! 	* java/security/KeyManagementException.java: Likewise.
! 	* java/security/KeyStoreException.java: Likewise.
! 	* java/security/MessageDigest.java: Likewise.
! 	* java/security/NoSuchAlgorithmException.java: Likewise.
! 	* java/security/NoSuchProviderException.java: Likewise.
! 	* java/security/Permission.java: Likewise.
! 	* java/security/PermissionCollection.java: Likewise.
! 	* java/security/Permissions.java: Likewise.
! 	* java/security/Policy.java: Likewise.
! 	* java/security/Principal.java: Likewise.
! 	* java/security/PrivateKey.java: Likewise.
! 	* java/security/PrivilegedAction.java: Likewise.
! 	* java/security/PrivilegedActionException.java: Likewise.
! 	* java/security/PrivilegedExceptionAction.java: Likewise.
! 	* java/security/ProtectionDomain.java: Likewise.
! 	* java/security/ProviderException.java: Likewise.
! 	* java/security/PublicKey.java: Likewise.
! 	* java/security/SecureClassLoader.java: Likewise.
! 	* java/security/SecurityPermission.java: Likewise.
! 	* java/security/SignatureException.java: Likewise.
! 	* java/security/UnrecoverableKeyException.java: Likewise.
! 	* java/security/UnresolvedPermission.java: Likewise.
! 	* java/security/acl/AclNotFoundException.java: Likewise.
! 	* java/security/acl/LastOwnerException.java: Likewise.
! 	* java/security/acl/NotOwnerException.java: Likewise.
! 	* java/security/cert/CRLException.java: Likewise.
! 	* java/security/cert/CertificateEncodingException.java: Likewise.
! 	* java/security/cert/CertificateException.java: Likewise.
! 	* java/security/cert/CertificateExpiredException.java: Likewise.
! 	* java/security/cert/CertificateFactory.java: Likewise.
! 	* java/security/cert/CertificateNotYetValidException.java: Likewise.
! 	* java/security/cert/CertificateParsingException.java: Likewise.
! 	* java/security/spec/InvalidKeySpecException.java: Likewise.
! 	* java/security/spec/InvalidParameterSpecException.java: Likewise.
  
! 	* java/security/cert/CertPath.java: New file.
! 	* java/security/cert/CertPathBuilderException.java: New file.
! 	* java/security/cert/CertPathValidatorException.java: New file.
! 	* java/security/cert/CertStoreException.java: New file.
  
! 	* Makefile.am: Add new CertPath classes.
! 	* Makefile.in: Rebuilt.
  
! 	* gnu/java/util/EmptyEnumeration.java: New file from classpath.
  
! 2002-05-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	Merge JDK 1.4 exception chaining support from classpath.
  
! 	* java/lang/Throwable.java: Merge 1.4 support from classpath.
! 	(stackTraceBytes): Rename from stackTrace.
! 	* java/lang/Exception.java: Merge from classpath.
! 	* java/lang/StackTraceElement: New file from classpath.
! 	* gcj/javaprims.h: Rebuild CNI namespace declarations.
! 	* Makefile.am: Add StackTraceElement.
! 	* Makefile.in: Rebuilt.
  
! 2002-05-23  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* Makefile.am (all-recursive): Depend on $all_java_class_files so that
! 	they build first.
! 	* Makefile.in: Rebuilt.
  
! 2002-05-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* acinclude.m4: Allow for PWDCMD to override hardcoded pwd.
! 	* configure.in: Likewise.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regenerate.
  
! 2002-05-13  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natRuntime.cc: Don't include sys/time.h and time.h.
! 	* java/util/natTimeZone.cc: Include sys/time.h and time.h here.
! 	Include platform.h.
  
! 	Fixes PR libgcj/6389:
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (nat_source_files): Added natTimeZone.cc.
! 	* java/util/natTimeZone.cc: New file.
! 	* java/util/TimeZone.java (getDefaultTimeZoneId): New method.
! 	* java/lang/System.java: Merged with Classpath.
! 	* java/lang/Runtime.java: Merged with Classpath.
! 	* java/lang/natSystem.cc (setErr0): Renamed from setErr; don't run
! 	security check.
! 	(setIn0): Renamed from setIn; don't run security check.
! 	(setOut0): Renamed from setOut; don't run security check.
! 	(file_encoding, getpwuid_adaptor, getSystemTimeZone,
! 	init_properties): Moved to natRuntime.cc.
! 	Moved many includes to natRuntime.cc.
! 	(isWordsBigEndian): New method.
! 	* java/lang/natRuntime.cc: Include Long.h, also other includes
! 	previously in natSystem.cc.
! 	(maxMemory): New function.
! 	(exitInternal): Renamed from `_exit'.
! 	(exit): Removed.
! 	(init): Don't set finalize_on_exit.
! 	(exitInternal): Use `finalizeOnExit'.
! 	(file_encoding, getpwuid_adaptor): New functions from
! 	natSystem.cc.
! 	(insertSystemProperties): New method, renamed from
! 	System::init_properties.  Don't set user.timezone.
! 	(_load): Don't call checkLink.
! 	(execInternal): New method.
! 	(availableProcessors): Likewise.
! 	(nativeGetLibname): Likewise.
  
! 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-09  Tom Tromey  <tromey@redhat.com>
  
! 	* jni.cc (_Jv_JNIFunctions): Fixed typo.
  
! 	* java/util/ResourceBundle.java: New version from Classpath.
! 	* java/util/Locale.java: Likewise.
  
! 2002-05-09  Jakub Jelinek  <jakub@redhat.com>
  
! 	* testsuite/lib/libjava.exp (libjava_arguments): Append all
! 	multilib dirs containing libgcc_s*.so.1 below gcc object dir to
! 	LD_LIBRARY_PATH.
  
! 2002-05-08  Mark Mitchell  <mark@codesourcery.com>
  
! 	* libjava/Makefile.am (all_java_source_files): New variable.
! 	(all_java_class_files): Likewise.
! 	.java.class: New rule.
! 	(CLEANFILES): Remove tmp-list.
! 	* libjava/Makefile.in: Regenerated.
  
! 2002-05-09  David.Billinghurst  <David.Billinghurst@riotinto.com>
  
! 	* testsuite/lib/libjava.exp (test_libjava_from_javac):
! 	Append .exe to executable names.  Fix for cygwin.
  
! 2002-05-08  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at
! 	script entry, and set LD to it when configuring multilibs.
! 	* configure: Rebuilt.
  
! 2002-05-07  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natString.cc (unintern): Fixed typo.
  
! 2002-05-06  David.Billinghurst  <David.Billinghurst@riotinto.com>
  
! 	* testsuite/lib/libjava.exp (libjava_arguments): Don't link
! 	with -no-install on *-*-cygwin*.
  
! 2002-05-06  David.Billinghurst  <David.Billinghurst@riotinto.com>
  
! 	* testsuite/lib/libjava.exp (test_libjava_from_source):
! 	Add comment explaining last patch
  
! 2002-05-04  David Billinghurst  <David.Billinghurst@riotinto.com>
  
! 	* testsuite/lib/libjava.exp (test_libjava_from_source):
! 	Append .exe to executable names.  If no suffix is present,
! 	then ".exe" is added by default on win32.  Harmless
! 	elsewhere so always do it.
  
! 2002-05-03  David Billinghurst  <David.Billinghurst@riotinto.com>
! 	    Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natSystem.cc (getSystemTimeZone): Use
! 	HAVE_UNDERSCORE_TIMEZONE.
! 	* include/config.h.in: Rebuilt.
! 	* acconfig.h (HAVE_UNDERSCORE_TIMEZONE, HAVE_BACKTRACE): Undef.
! 	* aclocal.m4, configure: Rebuilt.
! 	* acinclude.m4: Run AC_EXEEXT.
! 	* configure.in: Adjust test for `timezone' so it fails on Cygwin.
! 	Add test for `_timezone'.
  
! 2002-05-03  Alexandre Oliva  <aoliva@redhat.com>
  
! 	Suggested by Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
! 	* Makefile.am (jv_convert_LDADD): Bring -L.libs to the front.
! 	(gij_LDADD, rmic_LDADD, rmiregistry_LDADD): Likewise.
! 	* Makefile.in: Rebuilt.
  
! 2002-05-02  Hans Boehm  <Hans_Boehm@hp.com>
  
! 	* include/dwarf2-signal.h (INIT_SEGV, INIT_FPE for ia64):
! 	use sigaction instead of __libc_sigaction.
  
! 2002-05-02  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* testsuite/lib/libjava.exp (libjava_find_spec): New function.
! 	(libjava_init): Use it to find libgcj.spec.
! 	(libjava_arguments): Likewise.
  
! 2002-05-02  David S. Miller  <davem@redhat.com>
  
! 	PR bootstrap/6525
! 	* include/dwarf2-signal.h (INIT_SEGV, INIT_FPE): Don't use
! 	__libc_sigaction on Sparc.
  
! 2002-05-02  Jerome Marc  <marcjero@yahoo.com>
  
! 	* java/net/natPlainSocketImpl.cc: Include sys/ioctl.h and
! 	sys/filio.h, if present.
  
! 2002-04-30  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/BufferedReader.java (fill): Handle case where markPos
! 	point to ignored \n.  Fixes PR libgcj/6301.
  
! 2002-04-29  Gerhard Tonn  <GerhardTonn@swol.de>
  
! 	* java/lang/ieeefp.h: Define __IEEE_BIG_ENDIAN for S/390.
  
! 2002-04-29  Adam King <aking@dreammechanics.com>
  
! 	* java/io/natFileDescriptorWin32.cc (open): Move file pointer to end
! 	of file in APPEND mode.
  
! 2002-04-25  David S. Miller  <davem@redhat.com>
  
! 	PR target/6422
! 	* include/dwarf2-signal.h (MAKE_THROW_FRAME for sparc*): Set
! 	program counter to next program counter minus 8.  Update
! 	comments in this macro to explain why.
  
! 2002-04-26  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (construct_primitive_array_type) [void_type]: New
! 	case.
! 	(branch_prepass): Added dummy entries for unused instruction
! 	values.
! 	(verify_instructions_0): Likewise.
! 	* interpret.cc (continue1): Comment fix.
! 	* include/java-insns.h (op_xxxunusedxxx1): Removed.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am: Added -Wswitch-enum.
  
! 2002-04-24  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/gcj/natCore.cc (create): Use __builtin_alloca, and compute
! 	correct length of UTF-8 encoded name.  Strip leading `/'.
! 	(_Jv_RegisterResource): Use _Jv_Malloc.
  
! 2002-04-23  Adam Megacz <adam@xwt.org>
  
! 	* win32.cc, include/win32.cc (backtrace): Added this function
! 	because Win32 does not supply it.
  
! 2002-04-21  David S. Miller  <davem@redhat.com>
  
! 	* include/dwarf2-signal.h (MAKE_THROW_FRAME, sparc32): Document
! 	magic instruction reading sequence.
  
! 2002-04-21  Mark Wielaard  <mark@klomp.org>
  
! 	* mauve-libgcj: Don't run java.lang.ref tests since they are buggy.
  
! 2002-04-19  David S. Miller  <davem@redhat.com>
  
! 	* include/dwarf2-signal.h (SIGNAL_HANDLER): Name siginfo_t pointer
! 	arg.
! 	(MAKE_THROW_FRAME): Define for 32-bit and 64-bit sparc.
! 	(INIT_SEGV, INIT_FPE): Use direct __libc_sigaction installation
! 	on Sparc too.
! 	* include/sparc-signal.h (FLUSH_REGISTER_WINDOWS): Define properly
! 	for 64-bit sparc.
! 	(MAKE_THROW_FRAME): Use long for sp/retaddr so 64-bit works.
! 	* sysdeps/sparc/locks.h: New file.
! 	* configure.in (SIGNAL_HANDLER): Set to include/sparc-signal.h
! 	on all sparc Solaris configurations.  Set to
! 	include/dwarf2-signal.h on sparc Linux.
! 	* configure: Regenerate
! 	* configure.host (can_unwind_signal): sparc*-linux* can do it now.
  
! 2002-04-19  Hans Boehm <Hans_Boehm@hp.com>
  
! 	* configure: Rebuilt.
! 	* configure.in (backtrace): Function doesn't work on IA-64.
  
! 2002-04-17  Adam King <aking@dreammechanics.com>
  
! 	* java/io/File.java (normalizePath): Add Win32 support for auto
! 	conversion of a '/' path separator to Win32's '\' separator.
  
! 2002-04-16  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/6081:
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (install-data-local): Use GNU make trick to avoid
! 	shell limit.
  
! 2002-04-16  Adam King <aking@dreammechanics.com>
! 	    Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/natFileWin32.cc (performList): Return the correct array
! 	type.  Don't duplicate the creation of a File since it's already
! 	done earlier in the method and the existing code would cause a
! 	ArrayStoreException.  Don't use fixed-size array.
! 	(_access, _stat, attr, getCanonicalPath, performMkdir,
! 	performRenameTo): Don't use fixed-size array.
! 	(getCanonicalPath): Use throw, not _Jv_Throw.
  
! 2002-04-15  DJ Delorie  <dj@redhat.com>
  
! 	* configure.in: Allow building in $srcdir.
! 	* configure: Regenerated.
  
! 2002-04-14  Mark Wielaard <mark@klomp.org>
  
! 	* java/net/natPlainDatagramSocketImpl.cc (close): Set timeout to 0.
! 	* java/net/natSocketImpl.cc (close): Likewise.
  
! 2002-04-14  Mark Wielaard <mark@klomp.org>
  
! 	* gnu/gcj/protocol/http/Connection.java (usingProxy): return false.
  
! 2002-04-13  Adam King <aking@dreammechanics.com>
  
! 	* java/lang/natDouble.cc (parseDouble): Allow a number to end with
! 	the f/F/d/D modifiers.
  
! 2002-04-12  Anthony Green  <green@redhat.com>
  
! 	* Makefile.am (jardir, jar_DATA): Define (for libgcj.jar).
! 	Create libgcj-@gcc_version@.jar instead of libgcj.jar.
! 	* Makefile.in: Rebuilt.
! 	* configure.in: Substitute gcc_version.
! 	* configure: Rebuilt.
  
! 2002-04-11  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* configure.host: Set can_unwind_signal on hosts which support it.
! 	Don't set CHECKREFSPEC and DIVIDESPEC for FreeBSD.
! 	* configure.in: Set CHECKREFSPEC and DIVIDESPEC if not using SJLJ
! 	exceptions and can_unwind_signal isn't set.
! 	* configure: Rebuilt.
  
! 2002-04-11  Tom Tromey  <tromey@redhat.com>
  
! 	* win32.cc (_Jv_platform_initProperties): Fix spelling of _Jv_Free.
  
! 2002-04-11  Adam King <aking@dreammechanics.com>
! 	    Tom Tromey  <tromey@redhat.com>
  
! 	* include/jvm.h (_Jv_ThrowBadArrayIndex,
! 	_Jv_ThrowNullPointerException): Mark as noreturn.
! 	* win32.cc (_Jv_platform_initProperties): Use _Jv_MallocUnchecked
! 	and _Jv_free.  Correctly invoke GetTempPath().  Indentation
! 	fixes.
  
! 2002-04-10  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (java/lang/Thread.h): Mark
! 	_Jv_AttachCurrentThreadAsDaemon as friend.
! 	* gcj/javaprims.h (_Jv_AttachCurrentThreadAsDaemon): Declare.
! 	* gcj/cni.h (JvAttachCurrentThreadAsDaemon): New function.
! 	* java/lang/natThread.cc (_Jv_AttachCurrentThreadAsDaemon): New
! 	function.
! 	* java/lang/natRuntime.cc (_load): Recognize JNI_VERSION_1_4.
! 	* jni.cc (_Jv_JNI_GetVersion): Return JNI_VERSION_1_4.
! 	(_Jv_JNI_InvokeFunctions): Added
! 	_Jv_JNI_AttachCurrentThreadAsDaemon.
! 	(_Jv_JNI_GetEnv): Handle JNI_VERSION_1_4.
! 	(JNI_GetDefaultJavaVMInitArgs): Likewise.
! 	(JNI_CreateJavaVM): Likewise.
! 	(_Jv_JNI_AttachCurrentThread): Likewise.
! 	(_Jv_JNI_AttachCurrentThread): Added `is_daemon' argument.
! 	(_Jv_JNI_AttachCurrentThreadAsDaemon): New method.
! 	(_Jv_JNIFunctions): Initialize new fields.
! 	(_Jv_JNI_NewDirectByteBuffer): New function.
! 	(_Jv_JNI_GetDirectBufferAddress): Likewise.
! 	(_Jv_JNI_GetDirectBufferCapacity): Likewise.
! 	* include/jni.h (JNI_VERSION_1_4): New macro.
! 	(JNIInvokeInterface::AttachCurrentThreadAsDaemon): New field.
! 	(_Jv_JavaVM::AttachCurrentThreadAsDaemon): New method.
! 	(JNINativeInterface::NewDirectByteBuffer): New field.
! 	(JNINativeInterface::GetDirectBufferAddress): New field.
! 	(JNINativeInterface::GetDirectBufferCapacity): New field.
! 	(_Jv_JNIEnv::NewDirectByteBuffer): New method.
! 	(_Jv_JNIEnv::GetDirectBufferAddress): New method.
! 	(_Jv_JNIEnv::GetDirectBufferCapacity): New method.
  
! 2002-04-09  Tom Tromey  <tromey@redhat.com>
  
! 	* win32.cc (_Jv_platform_initProperties): Use GetTempPath.
  
! 2002-04-08  Alberto Biancardi  <alberto.biancardi@unipv.it>
  
! 	Fix for PR libgcj/6187:
! 	* java/awt/geom/Point2D.java (distance): Call distanceSq, not
! 	distance.
  
! 2002-04-07  Mark Wielaard <mark@klomp.org>
  
! 	* java/util/AbstractMap.java (putAll): Use entrySet size.
! 	(toString): Explicitly use getKey() and getValue().
  
! 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-07  Adam King <aking@dreammechanics.com>
  
! 	* java/lang/natSystem.cc (init_properties): Call new function
! 	_Jv_platform_initProperties.
! 	* win32.cc (_Jv_platform_initProperties): New function that adds Win32
! 	support for the System properties os.name, os.arch, os.version,
! 	user.name, user.home, and user.dir.
! 	* include/posix.h, include/win32.h, posix.cc: New function
! 	_Jv_platform_initProperties.
  
! 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.java (removeRange): If toIndex == fromIndex do
! 	nothing, if toIndex < fromIndex throw IndexOutIfBoundsException.
  
! 2002-04-05  Adam Megacz <adam@xwt.org>
  
! 	* exception.cc (abort): added static modifier
  
! 2002-04-04  Adam Megacz <adam@xwt.org>
  
! 	* include/win32.h (_Jv_platform_close_on_exec): added inline
! 	modifier.
  
! 2002-04-04  Loren J. Rittle  <ljrittle@acm.org>
  
! 	* configure.host: Add case statement to support generic port
! 	properties.  Add *-*-freebsd* section.
  
! 2002-04-04  Mark Wielaard  <mark@klomp.org>
  
! 	* mauve-libgcj: Add JLS1.0 and JLS1.1 tags, ignore Character.unicode
! 	test.
! 	* testsuite/libjava.mauve/xfails: Remove working tests DoubleTest,
! 	FloatTest and ObjectStreamClass. Add FAIL for Introspector.jdk11 tests
! 	that depend on awt code and BufferedByteOutputStream.interrupt.
  
! 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-03  Mark Wielaard  <mark@klomp.org>
  
! 	* java/lang/reflect/Modifier.java (toString(int,StringBuffer)): Fix
! 	ordering.
  
! 2002-04-02  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natClassLoader.cc (findClass): Compare against `3',
! 	not `0'.
  
! 2002-04-02  Mark Wielaard  <mark@klomp.org>
  
! 	* mauve-libgcj: add java.net.DatagramSocket.DatagramSocketTest2 to
! 	list of testsuite crashers.
  
! 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  Mark Wielaard  <mark@klomp.org>
  
! 	* mauve-libgcj: Add JDK1.3, JDK1.4, JLS1.2 tests, remove ignored tests
! 	that can be compiled now and add testsuite crashers to ignore list.
  
! 2002-03-31  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* libgcj.spec.in, libgcj-test.spec.in: Revert for now.
  
! 	* libgcj.spec.in: Override libgcc, not lib.
! 	* libgcj-test.spec.in: Likewise.
  
! 2002-03-29  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/natPlainDatagramSocketImpl.cc (close): New function.
! 	* java/net/natPlainSocketImpl.cc (close): Indentation fix.
  
! 2002-03-27  Jeff Sturm  <jsturm@one-point.com>
  
! 	* java/net/PlainDatagramSocketImpl.java
! 	(close): Use native implementation.
! 	(finalize): New method.
  
! 	* java/net/PlainSocketImpl.java (finalize): New method.
  
! 	* java/net/natPlainDatagramSocketImpl.cc
! 	(java/io/FileDescriptor.h): Don't include.
! 	(close): Implement method here.
! 	(create): Don't assign fd.
  
! 	* java/net/natPlainSocketImpl.cc
! 	(java/io/FileDescriptor.h): Don't include.
! 	(create): Don't assign fd.
! 	(accept): Likewise.
! 	(close): Synchronize.
  
! 2002-03-27  Richard Henderson  <rth@redhat.com>
  
! 	* include/posix-threads.h [alpha] (_Jv_ThreadSelf): Avoid a copy.
  
! 2002-03-25  Andrew Haley <aph@cambridge.redhat.com>, Hans Boehm <Hans_Boehm@hp.com>
  
! 	* include/dwarf2-signal.h (MAKE_THROW_FRAME): Add for IA-64.
! 	(INIT_SEGV, INIT_FPE): Add versions that use __libc_sigaction
! 	instead of syscall on IA-64.
! 	Add FIXME comment.
  
! 2002-03-27  Anthony Green  <green@redhat.com>
  
! 	* libgcj.spec.in: Add CHECKREFSPEC.
! 	* configure.in: Ditto.
! 	* configure.host: Ditto.  Check references for xscale-elf.
! 	* configure: Rebuilt.
  
! 2002-03-26  Hans Boehm <Hans_Boehm@hp.com>
  
! 	* include/dwarf2-signal.h: Temporarily back out last change.
  
! 2002-03-26  Loren J. Rittle  <ljrittle@acm.org>
  
! 	* include/posix-threads.h: Support <.../pal.h> on FreeBSD/alpha.
  
! 2002-03-25  Andrew Haley <aph@cambridge.redhat.com>, Hans Boehm <Hans_Boehm@hp.com>
  
! 	* configure.in, configure: enable dwarf2-exception-style
! 	exception handling on IA-64.
! 	* include/dwarf2-signal.h (MAKE_THROW_FRAME): Add for IA-64.
! 	(INIT_SEGV, INIT_FPE): Use __libc_sigaction instead of syscall.
! 	Add FIXME comment.
  
! 2002-03-25  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.am (libgcj_la_LDFLAGS): Use THREADLDFLAGS.
! 	(jv_convert_LDFLAGS): Likewise.
! 	(gij_LDFLAGS): Likewise.
! 	(rmic_LDFLAGS): Likewise.
! 	(rmiregistry_LDFLAGS): Likewise.
! 	* configure.in (THREADLDFLAGS): New subst; set correctly for
! 	*BSD.
  
! 2002-03-25  Tom Tromey  <tromey@redhat.com>
  
! 	For PR libgcj/5303:
! 	* gnu/java/rmi/registry/RegistryImpl.java (main): Recognize --help
! 	and --version.
! 	(help): New method.
! 	(version): Likewise.
! 	* gnu/gcj/convert/Convert.java (version): Removed extraneous
! 	"GNU".
! 	* gnu/java/rmi/rmic/RMIC.java (parseOptions): Removed extraneous
! 	"GNU".
  
! 2002-03-25  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/Component.java (processEvent): Check ComponentEvent
! 	after KeyEvent.
  
! 2002-03-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/io/PushbackReader.java: Reformat.
  
! 	* java/io/FileInputStream.java (skip): Call fd.getFilePointer() and
! 	calculate correct number of bytes skipped.
  
! 	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  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/TextComponent.java (TextComponent): Editable by
! 	default.
  
! 	* 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  Eric Blake  <ebb9@email.byu.edu>
  
! 	* java/beans/IntrospectionException.java: Update to 1.4.
! 	* java/beans/PropertyVetoException.java: Ditto.
  
! 2002-03-24  Eric Blake  <ebb9@email.byu.edu>
  
! 	* gnu/java/beans/BeanInfoEmbryo.java (hasMethod): Use
! 	Arrays.equals instead of ArrayHelper.equalsArray.
  
! 2002-03-24  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-03-24  C. Brian Jones <cbj@gnu.org>
  
! 	* java/beans/Introspector.java: reformatting
  
! 2002-03-24  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-03-24  Mark Wielaard  <mark@klomp.org>
  
! 	Thanks to Orp developers
! 	* gnu/java/beans/editors/NativeBooleanEditor.java (setAsText(String)):
! 	switch TRUE and FALSE return values.
  
! 2002-03-23  Tom Tromey  <tromey@redhat.com>
  
! 	* include/name-finder.h (_Jv_name_finder::myclose): New method.
! 	* name-finder.cc (_Jv_name_finder): Initialize file descriptors.
  
! 2002-03-23  Michael Smith  <msmith@spinnakernet.com>
  
! 	* java/util/GregorianCalendar.java (minimums, maximums): Correct
! 	MONTH entry.  Fixes PR libgcj/6045.
  
! 2002-03-23  Jeff Sturm  <jsturm@one-point.com>
  
! 	* java/nat/natPlainSocketImpl.cc (write): Abort loop on error.
  
! 2002-03-20  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* posix-threads.cc (_Jv_ThreadSelf_out_of_line): Use write_barrier,
! 	not release_set.
! 	* sysdep/powerpc/locks.h (write_barrier): New function.
! 	* sysdep/i386/locks.h (write_barrier): New function.
  
! 2002-03-19  Martin Kahlert  <martin.kahlert@infineon.com>
  
! 	* include/jni.h Use correct C comments.
  
! 2002-03-18  Tom Tromey  <tromey@redhat.com>
  
! 	* include/jni.h (JNIIMPORT): New macro.
! 	(JNIEXPORT): Likewise.
! 	(JNICALL): Likewise.
  
! 2002-03-18  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
! 	* configure.host (i?86-*): Use -fuse-divide-subroutine on Solaris
! 	systems.
  
! 2002-03-18  Andrew Haley  <aph@cambridge.redhat.com>
  
! 	* include/i386-signal.h (old_i386_kernel_sigaction): New.
! 	INIT_SEGV: Use old_i386_kernel_sigaction.
! 	INIT_FP: Likewise.
  
! 2002-03-18  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/lang/natSystem.cc (init_properties): Update VM version
! 	properties.
! 	* configure.in: Set GCJVERSION.
! 	* acconfig.h: Add GCJVERSION.
! 	* configure: Rebuilt.
! 	* include/config.h.in: Rebuilt.
  
! 2002-03-17  Anthony Green  <green@redhat.com>
  
! 	* java/lang/ieeefp.h: Add ARM thumb support (copied from newlib).
  
! 2002-03-17  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	Build a single libgcj.so, without separate gc and zlib libraries.
! 	* configure.in: Use convenience libraries for boehm-gc and zlib. Set
! 	SYS_ZLIBS if system zlib is used.
! 	* configure: Rebuilt.
! 	* Makefile.am: Use boehm-gc and zlib convenience libraries.
! 	* Makefile.in: Rebuilt.
! 	* libtool-version: Increment .so version number.
  
! 	* Makefile.am: Escape quotes in echo.
! 	* Makefile.in: Rebuilt.
  
! 2002-03-16  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* Makefile.am: Use empty -classpath flag in addition to -bootclasspath.
! 	* Makefile.in: Rebuilt.
  
! 2002-03-15  Anthony Green  <green@redhat.com>
  
! 	* configure.host (FILE): New macro for specifing File
! 	implementation.
! 	* configure: Rebuilt.
! 	* configure.in: Use FILE.  Define HAVE_TIME for newlib targets.
  
! 2002-03-15  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* Makefile.am (jv_convert_LDADD): Don't list libraries that are
! 	already implicitly brought in from libgcj.la.
! 	(gij_LDADD, rmic_LDADD, rmiregistry_LDADD): Likewise.
! 	* Makefile.in: Rebuilt.
  
! 2002-03-15  Eric Blake  <ebb9@email.byu.edu>
  
! 	* THANKS: Fix punctuation, alphabetization.
  
! 2002-03-15  Tom Tromey  <tromey@redhat.com>
! 	    Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
  
! 	Fix for PR libgcj/5944.
! 	* gnu/gcj/io/shs.h: Define uint8_t and uint32_t.
  
! 2002-03-15  Anthony Green  <green@redhat.com>
  
! 	* configure.in (tool_include_dir): Define.
! 	* configure: Rebuilt.
! 	* gcj/Makefile.am: Install libgcj-config.h relative to
! 	tool_include_dir.
! 	* gcj/Makefile: Rebuilt.
! 	* gcj/libgcj-config.h: Add warning comment.
  
! 2002-03-12  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* configure.host (powerpc*-darwin*): Enable interpreter.
  
! 2002-03-10  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* include/posix.h: Add multiple include header protection.
! 	* java/net/natPlainSocketImpl.cc: Don't #include <posix.h>.
  
! 2002-03-10  Adam Megacz <adam@xwt.org>
  
! 	* java/net/natPlainSocketImpl.cc: Added #include <platform.h>.
  
! 2002-03-10  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/GridLayout.java (layoutContainer): Handle case where
! 	there are no items in container.
  
! 	* java/lang/Win32Process.java: Added comment.
! 	* include/posix.h (_Jv_platform_close_on_exec): New function.
! 	Include fcntl.h.
! 	* include/win32.h (_Jv_platform_close_on_exec): New function.
! 	* java/net/natPlainSocketImpl.cc (create): Set close-on-exec
! 	flag.
! 	(accept): Likewise.
! 	* java/net/natPlainDatagramSocketImpl.cc (create): Set
! 	close-on-exec flag.
! 	* java/io/natFileDescriptorPosix.cc (open): Set close-on-exec
! 	flag.
  
! 2002-03-09  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (state::NO_STACK): New constant.
! 	(state::is_unmerged_ret_state): Handle case where stacktop is
! 	NO_STACK.
! 	(state::merge): Handle NO_STACK merges.
! 	(handle_jsr_insn): Invalidate PC, and use special NO_STACK state
! 	for instruction following jsr.
! 	(stacktop, stackdepth): Removed unused variables.
! 	(pop_jump): Ignore case where all remaining states are skipped.
  
! 2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/awt/ImageMediaEntry: Removed.
! 	* java/awt/MediaEntry: Removed.
  
! 2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	Hashtable synchronization for PowerPC.
! 	* configure.in: Define SLOW_PTHREAD_SELF if configure.host set
! 	slow_pthread_self. Set up symlink for sysdeps directory.
! 	* configure: Rebuild.
! 	* configure.host: Document more shell variables. Set sysdeps_dir
! 	for most platforms. Set slow_pthread_self for i686. Set
! 	enable_hash_synchronization_default and slow_pthread_self for PowerPC.
! 	* posix-threads.cc (_Jv_ThreadSelf_out_of_line): Use release_set so
! 	that memory barrier is emitted where required.
! 	* prims.cc: 64-bit align static primitive class instances.
! 	* include/posix-threads.h (_Jv_ThreadSelf for SLOW_PTHREAD_SELF): Add
! 	read_barrier() to enforce ordering of reads.
! 	* sysdep/powerpc/locks.h: New file. Implementation of synchronization
! 	primitives for PowerPC.
! 	* sysdep/i386/locks.h: New file. Synchronization primitives for i386
! 	moved from natObject.cc.
! 	* sysdep/alpha/locks.h: Likewise.
! 	* sysdep/ia64/locks.h: Likewise.
! 	* sysdep/generic/locks.h: Likewise.
! 	* java/lang/natObject.cc: Move thread synchronization primitives to
! 	system-dependent headers.
  
! 2002-03-09  Adam Megacz  <adam@xwt.org>
  
! 	* java/io/natFileDescriptorWin32.cc (read): Return -1 if zero
! 	bytes read and no failure code returned.
  
! 2002-03-09  Adam Megacz  <adam@xwt.org>
  
! 	* win32.cc (_CRT_MT, __mingwthr_key_dtor) Added fake
! 	definitions to simulate -mthreads.
  
! 2002-03-09  Adam Megacz  <adam@xwt.org>
  
! 	* win32.cc (_Jv_platform_gettimeofday) Cast 1000 to long long to
! 	avoid precision loss.
  
! 2002-03-09  Per Bothner  <per@bothner.com>
  
! 	* gnu/gcj/xlib/WindowAttributes.java  Assign null to RawData, not 0.
! 	* gnu/gcj/xlib/XImage.java:  Likewise.
! 	* gnu/gcj/xlib/XColor.java:  Likewise.
  
! 2002-03-09  Adam Megacz  <adam@xwt.org>
  
! 	* java/lang/Win32Process.java (ConcreteProcess): Now throws an
! 	IOException so that Throwable.printStackTrace fails correctly.
  
! 2002-03-08  Adam Megacz  <adam@xwt.org>
  
! 	* java/net/natPlainSocketImpl.cc (read, write, close): Formatting
! 	fixed.
  
! 2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* posix.cc (_Jv_platform_gettimeofday): Make sure result doesn't get
! 	truncated to int.
  
! 2002-03-08  Tom Tromey  <tromey@redhat.com>
  
! 	* include/jni.h: Include stdio.h.
  
! 2002-03-08  Tom Tromey  <tromey@redhat.com>
  
! 	* posix.cc (internal_gettimeofday): New function.
! 	(_Jv_select): Use it.
  
! 2002-03-07  Adam Megacz  <adam@xwt.org>
  
! 	* java/net/natPlainSocketImpl.cc: Changed USE_WINSOCK to
! 	WIN32, and added thunks for read(), write(), and close().
! 	* java/net/natPlainSocketImpl.cc (accept, read, read):
! 	Disabled timeouts on WIN32 pending discussion.
  
! 2002-03-07  Adam Megacz  <adam@xwt.org>
  
! 	* win32.cc (_Jv_platform_gettimeofday): Now takes no args,
! 	returns jlong. Added implementation
! 	* posix.cc (_Jv_platform_gettimeofday): Now takes no args,
! 	returns jlong.
! 	* win32.h (_Jv_platform_gettimeofday): Now takes no args,
! 	returns jlong.
! 	* posix.h (_Jv_platform_gettimeofday): Now takes no args,
! 	returns jlong.
! 	* java/lang/natSystem.cc (currentTimeMillis): Now uses updated
! 	_Jv_platform_gettimeofday signature.
  
! 2002-03-07  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/net/natPlainSocketImpl.cc (_Jv_recv): Removed.
! 	(read): Call recv() directly, not _Jv_recv().
  
! 2002-03-06  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/natFileDescriptorEcos.cc (init): Don't use
! 	GetStdHandle.
! 	* java/io/natFileDescriptorPosix.cc (valid): Don't call stat if FD
! 	is negative.
! 	(init): Don't use GetStdHandle.
  
! 	* include/config.h.in: Rebuilt.
! 	* configure: Rebuilt.
! 	* Makefile.in: Rebuilt.
  
! 2002-03-06  Adam Megacz  <adam@xwt.org>
  
! 	* java/io/FileDescriptor.java: Initialize in/out/err in init().
! 	* java/io/natFileDescriptorWin32.cc (init()): Added function.
! 	* java/io/natFileDescriptorPosix.cc (init()): Added function.
! 	* java/io/natFileDescriptorEcos.cc (init()): Added function.
  
! 2002-03-06  Eric Blake  <ebb9@email.byu.edu>
  
! 	* scripts/unicode-decomp.pl: Move from chartables.pl, and remove
! 	the code for generating include/java-chartables.h.
! 	* scripts/unicode-blocks.pl: Move from scripts/blocks.pl, and
! 	merge with Classpath.
! 	* scripts/unicode-muncher.pl: Copy from Classpath.
! 	* scritps/MakeCharTables.java: New file.
! 	* gnu/gcj/convert/Blocks-3.txt: New file.
! 	* gnu/gcj/convert/UnicodeData-3.0.0.txt: New file.
! 	* gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html: New file.
! 	* gnu/java/lang/CharData.java: Copy from Classpath.
! 	* Makefile.am (ordinary_java_source_files): Add
! 	gnu/java/lang/CharData.java.
! 	* configure.in: Remove --enable-fast-character option.
! 	* java/lang/Character.java: Merge algorithms and Javadoc with
! 	Classpath.
! 	* java/lang/natCharacter.cc: Implement Unicode lookup table more
! 	efficiently.
! 	* include/java-chardecomp.h: Regenerate.
! 	* include/java-chartables.h: Regenerate.
  
! 2002-03-06  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/awt/MediaTracker.java: Implemented.
! 	* Makefile.am: Add MediaTracker.
! 	* Makefile.in: Rebuilt.
  
! 2002-03-05  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natPosixProcess.cc (fail): Removed.
! 	(startProcess): Simplified error-handling.  Preserve
! 	LD_LIBRARY_PATH across exec.
  
! 	* jni.cc (_Jv_LookupJNIMethod): Throw UnsatisfiedLinkError, not
! 	AbstractMethodError.
  
! 2002-03-03  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* Makefile.am: Use -bootclasspath, not -CLASSPATH.
! 	* Makefile.in: Rebuilt.
  
! 2002-03-03 Mark Wielaard <mark@klomp.org>
  
! 	* java/util/Timer (TaskQueue.stop): set elements to zero.
  
! 2002-02-28  Anthony Green  <green@redhat.com>
  
! 	* java/lang/reflect/natMethod.cc (result): Add void* element.
! 	(_Jv_CallAnyMethodA): Handle FFI_TYPE_POINTER arguments.  Move
! 	constructor test.
  
! 2002-02-27  Adam Megacz <adam@xwt.org>
  
! 	* java/net/natInetAddress.cc: Changed USE_WINSOCK to WIN32, added
! 	'#undef STRICT'.
  
! 2002-02-26  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natSystem.cc (init_properties): Use __VERSION__.
! 	* gij.cc (version): Use __VERSION__.
! 	* include/config.h.in: Rebuilt.
! 	* acconfig.h (GCJVERSION): Removed.
! 	* configure: Rebuilt.
! 	* configure.in (GCJVERSION): Removed.
  
! 2002-02-26  Andreas Schwab  <schwab@suse.de>
  
! 	* acinclude.m4 (LIB_AC_PROG_CXX): Use glibjava_CXX instead of
! 	glibcpp_CXX, since libjava uses even another CXX.
! 	* aclocal.m4, configure: Regenerated.
  
! 2002-02-26  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natPosixProcess.cc (startProcess): Use FD_CLOEXEC, not
! 	`1'.
  
! 2002-02-25  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* Makefile.am (GCJCOMPILE): Use -fCLASSPATH not -fclasspath. Fixes
! 	dependency tracking for .java files.
  	* Makefile.in: Rebuilt.
  
! 2002-02-24  Adam Megacz  <adam@xwt.org>
  
! 	* java/net/natPlainDatagramSocketImpl.cc: whops; removed 'make'
! 	typo. Sorry.
  
! 2002-02-24  Adam Megacz  <adam@xwt.org>
  
! 	* java/net/natPlainDatagramSocketImpl.cc: Updated #includes
! 	for Win32, changed #ifdefs to check WIN32 instead of the
! 	(now-obsolete) USE_WINSOCK, and removed support for socket
! 	timeouts on Win32 pending further discussion.
  
! 2002-02-24  Adam Megacz  <adam@xwt.org>
  
! 	* win32-threads.cc (_Jv_ThreadInitData): _Jv_Malloc instead of new
! 	* win32-threads.cc (_Jv_ThreadDestroyData): _Jv_Free instead of
! 	delete
  
! 2002-02-24  Adam Megacz  <adam@xwt.org>
  
! 	* java/lang/Win32Process.java: Created a dummy class to allow
! 	build process to run to completion.
  
! 2002-02-24  Jeff Sturm  <jsturm@one-point.com>
  
! 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA):
! 	Define ffi_result union for ffi_call result.  Cast
! 	ffi_result members to jvalue.
  
! 2002-02-23  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* Makefile.in, gcj/Makefile.in, include/Makefile.in: Rebuilt.
! 	* testsuite/Makefile.in: Likewise.
  
! 2002-02-20  Per Bothner  <per@bothner.com>
  
! 	* java/net/URL.java (getPath):  New JDK 1.3 method.
  
! 	* java/net/URLStreamHandler.java (parseURL):
! 	It is wrong to prepend '/' to the file part of a relative url.
  
! 	* java/net/URLStreamHandler.java (parseURL):
! 	Minor optizations - append '/' rather than "/".
  
! 	* java/net/URLStreamHandler.java (parseURL):
! 	Don't canonicalize "xx/.." or "./" URLs - JDK doesn't.
! 	We probably should canonicalize for a context-relative url, though.
! 	* java/net/URL.java (sameFile):  Delegate to URLStreamHandler.
! 	* java/net/URLStreamHandler.java (canonicalizeFilename):  New helper.
! 	(sameFile):  New method.  Uses canonicalizeFilename.
  
! 2002-02-22  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natSystem.cc (init_properties): Include the `Inc.' in
! 	java.vendor and java.vm.vendor.
! 	* gnu/java/rmi/rmic/RMIC.java (parseOptions): Only print most
! 	recent copyright date.
! 	* gnu/gcj/convert/Convert.java (version): Print `Inc'.
! 	* gij.cc (version): Print `Inc'.
  
! 2002-02-22  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* acinclude.m4 (CXX): AC_SUBST it, instead of glibcpp_CXX.
! 	* aclocal.m4, configure: Rebuilt.
  
! 2002-02-20  Per Bothner  <per@bothner.com>
  
! 	* gnu/gcj/protocol/file/Connection.java (conect):  Open the input
! 	and/or output streams immediately here, instead of using File.exists.
! 	(inputStream, outputStream):  New fields to save open streams.
! 	(getInputStream, getOutputStream):  Use already-opened streams.
  
! 2002-02-22  Alexandre Oliva  <aoliva@redhat.com>
  
! 	* acinclude.m4 (LIB_AC_PROG_CXX): Copied from libstdc++-v3.
! 	Use it.
! 	* Makefile.am (LIBLINK): Use CXX (and its tag) for linking.
! 	* aclocal.m4, configure, Makefile.in: Rebuilt.
  
! 2002-02-19  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/5696:
! 	* verify.cc (is_assignable_from_slow): Never call
! 	_Jv_IsAssignableFrom.
! 	(verify_instructions_0): Added new debug statement.
! 	(state::print): Print information about whether local has
  	changed.
! 	(state::merge): Don't call note_variable when merging locals.
! 	(state::set_exception): Removed old FIXME comment.
  
! 2002-02-18  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/net/natPlainDatagramSocketImpl.cc (bind): Call setsockopt to
! 	enable SO_BROADCAST.
  
! 2002-02-18  Jason Merrill  <jason@redhat.com>
  
! 	* name-finder.cc (toHex): Use word mode, not long long.
  
! 	* gnu/gcj/convert/natIconv.cc (write): Avoid sign-compare warning.
  
! 2002-02-15  Tom Tromey  <tromey@redhat.com>
  
! 	Fix for PR libgcj/5695:
! 	* verify.cc (is_assignable_from_slow): Check to see if target is
! 	an Object before checking to see if source is an interface.
! 	(verify_instructions_0) [op_invokeinterface]: Handle case where
! 	we're making an interface call on Object.
  
! 2002-02-15  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* Makefile.in: Rebuilt with Eric's change below.
  
! 	* java/lang/natMath.cc (abs(jdouble), abs(jfloat), round(jfloat),
! 	round(jdouble), min(jfloat), max(jfloat), min(jdouble), min(jfloat)):
! 	Removed functions which are now implemented in Math.java.
  
! 2002-02-14  Eric Blake  <ebb9@email.byu.edu>
  
! 	* gcj/javaprims.h (java::lang): Add java::lang::StrictMath.
! 	* Makefile.am (core_java_source_files): Add
! 	java/lang/StrictMath.java.
! 	* java/lang/Math.java: Merge with Classpath.
! 	* java/lang/StrictMath.java: New file - merge with Classpath.
  
! 2002-02-14  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-02-14  Mark Wielaard <mark@klomp.org>
  
! 	* java/security/BasicPermission.java: extends with fully qualified
! 	classname as workaround for gcj 3.0.4.
  
! 2002-02-14  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-14  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-14  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-13  Todd Stock  <toddastock@yahoo.com>
  
! 	Fix for PR libgcj/5670:
! 	* verify.cc (is_assignable_from_slow): If `source' is interface,
! 	recursively look for merge with `target'.
  
! 2002-02-14  Martin Kahlert  <martin.kahlert@infineon.com>
  
! 	* include/jni.h: Fix typo.
  
! 2002-02-13  Martin Kahlert  <martin.kahlert@infineon.com>
  
! 	* jni.cc (_Jv_JNI_AttachCurrentThread): env->locals assigned
! 	correctly.
  
! 2002-02-13  Todd Stock  <toddastock@yahoo.com>
  
! 	Fix for PR libgcj/5671:
! 	* verify.cc (state::merge): Handle case where we're merging
! 	against an interface.
  
! 2002-02-12  Tom Tromey  <tromey@redhat.com>
  
! 	* exception.cc (std::abort): Mark as noreturn.
  
! 2002-02-12  Adam Megacz <adam@xwt.org>
  
! 	* java/lang/Win32Process.java: Filled in a placeholder
! 	implementation so Win32 will build.
  
! 2002-02-12  Adam Megacz <adam@xwt.org>
  
! 	* java/io/natFilePosix.cc: Copied this from natFile.cc.
! 	* java/io/natFile.cc: Removed from repository.
! 	* configure.in: Added AC_LINK_FILES for natFile${PLATFORM}.
  
! 2002-02-12  Adam Megacz <adam@xwt.org>
  
! 	* win32.cc: Added two #includes to make win32.cc compile.
  
! 2002-02-12  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* boehm.cc (initialized, obj_kind_x, obj_free_list): Removed unused
! 	declarations.
! 	(_Jv_InitGC): Don't bother locking, as this is always called from a
! 	single-thread. Turn off GC_all_interior_pointers. Remove dead code.
  
! 2002-02-11  Adam Megacz <adam@xwt.org>
  
! 	* include/win32.h: Added _Jv_platform_gettimeofday.
! 	* win32.cc (_Jv_platform_gettimeofday): Added dummy function.
  
! 2002-02-11  Adam Megacz <adam@xwt.org>
  
! 	* java/io/natFileWin32.cc, java/io/natFileDescriptorWin32.cc:
! 	Added #undef STRICT to make windows.h and
! 	java/lang/reflect/Modifier.h cooperate.
  
! 2002-02-11  Adam Megacz <adam@xwt.org>
  
! 	* java/io/natFileWin32.cc: Created a placeholder class with lots
! 	of FIXMEs.
  
! 2002-02-11  Adam Megacz <adam@xwt.org>
  
! 	* exception.cc (_Jv_Throw, PERSONALITY_FUNCTION): Changed
! 	std::abort() to simply abort(). Also added "fake" std::abort() so
! 	we can #include unwind-pe.h without having to link against
! 	libstdc++-v3.
  
! 2002-02-10  Andreas Tobler  <toa@pop.agri.ch>
  
! 	* interpret.cc (continue1) [insn_f2l]: Use PUSHL, not PUSHI.
  
! 2002-02-08  Tom Tromey  <tromey@redhat.com>
  
! 	* interpret.cc (convert): New function.
! 	(continue1) [insn_d2i, insn_d2l, insn_f2i, insn_f2l]: Use
! 	convert.
! 	Include Long.h.
  
! 2002-02-08  Anthony Green  <green@redhat.com>
  
! 	* configure.host: Add support for xscale-elf embedded target.
  
! 2002-02-08  Martin Kahlert  <martin.kahlert@infineon.com>
  
! 	* jni.cc (_Jv_JNI_NewLocalRef): Make sure, that NULL frame is not
! 	dereferenced.
! 	(_Jv_JNI_AttachCurrentThread): Produce full featured env->locals
! 	frame.
  
! 2002-02-07  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/natFile.cc (_access): Use __builtin_alloca.
! 	(_stat): Likewise.
! 	(attr): Likewise.
! 	(getCanonicalPath): Likewise.
! 	(performList): Likewise.
! 	(performMkdir): Likewise.
! 	(performSetReadOnly): Likewise.
! 	(performRenameTo): Likewise.
! 	(performSetLastModified): Likewise.
! 	(performCreate): Likewise.
! 	(performDelete): Likewise.
  
! 2002-02-08  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* HACKING: Fix URL for the automake-gcj.
  
! 2002-02-07  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natThrowable.cc: Updated copyright.
! 	* java/io/natFileWin32.cc: Updated copyright.
! 	* java/io/natFileDescriptorWin32.cc: Updated copyright.
! 	* win32-threads.cc: Updated copyright.
! 	* name-finder.cc: Updated copyright.
! 	* include/name-finder.h: Updated copyright.
  
! 	* include/name-finder.h: Conditionally include sys/wait.h.
! 	* include/config.h.in: Rebuilt.
  
! 	* java/io/natFile.cc (_access): Don't stack-allocate buffer.
! 	Size buffer based on real size of string.
! 	(_stat): Likewise.
! 	(attr): Likewise.
! 	(getCanonicalPath): Likewise.
! 	(performList): Likewise.
! 	(performMkdir): Likewise.
! 	(performSetReadOnly): Likewise.
! 	(unixroot): Removed.
! 	(performRenameTo): Likewise.
! 	(performSetLastModified): Likewise.
! 	(performCreate): Likewise.
! 	(performDelete): Likewise.
! 	(performListRoots): Always return new array.
  
! 	* prims.cc (_Jv_CreateJavaVM): Call _Jv_platform_initialize.
! 	* win32.cc (win32_exception_handler): Now static.
! 	* include/win32.h (_Jv_platform_initialize): Declare.
! 	(win32_exception_handler): Don't declare.
! 	* java/lang/natSystem.cc (currentTimeMillis): Use
! 	_Jv_platform_gettimeofday.
! 	* posix.cc (_Jv_platform_gettimeofday): Renamed.
! 	(_Jv_select): Use new name.
! 	(_Jv_platform_initialize): New function.
! 	* include/posix.h (_Jv_platform_gettimeofday): Renamed from
! 	_Jv_gettimeofday.
! 	(_Jv_platform_initialize): Declare.
  
! 	* configure: Rebuilt.
! 	* configure.in: Removed unnecessary parens.
  
! 2002-02-06  Adam Megacz <adam@xwt.org>
  
!        * configure.in: Changed mingw) to *mingw*).
!        * win32.cc: Created this file.
!        * win32.h: Created this file.
!        * win32.cc, prims.cc, win32.h (win32_exception_handler): Moved
!        win32_exception_handler from prims.cc to win32.cc, added
!        header in win32.h.
!        * prims.cc: removed some #ifdef-WIN32'd headers which are no
!        longer needed now that we have platform.h
  
! 2002-02-06  Adam Megacz <adam@xwt.org>
  
! 	* gnu/gcj/io/shs.h, gnu/gcj/io/shs.cc, gnu/gcj/io/natSimpleSHSStream.cc:
! 	use uint<n>_t instead of LONG and BYTE
  
! 2002-02-06  Adam Megacz <adam@xwt.org>
  
! 	* name-finder.h: don't #include sys/wait.h unless HAVE_SYS_WAIT_H
  
! 2002-02-06  Anthony Green  <green@redhat.com>
  
! 	* java/net/natPlainSocketImpl.cc: Fix DISABLE_JAVA_NET targets.
! 	Implement missing method stubs.
! 	java/net/natPlainDatagramSocketImpl.cc: Fix DISABLE_JAVA_NET
! 	targets.
! 	* java/lang/natSystem.cc (getSystemTimeZone): Some targets have no
! 	concept of timezones.
! 	(init_properties): Don't refer to _Jv_Environment_Properties
! 	when this feature is not available.
! 	* include/config.h.in: Rebuilt.
! 	* acconfig.h: Add DISABLE_MAIN_ARGS.
! 	* prims.cc (_Jv_RunMain): Use DISABLE_MAIN_ARGS.
! 	* configure: Rebuilt.
! 	* configure.in: Add --disable-main-args option.  Test for
! 	  opendir function.  Replace AC_CHECK_SIZEOF with
! 	  AC_COMPILE_CHECK_SIZEOF.
! 	* java/io/natFile.cc (performList): Check HAVE_OPENDIR.
! 	* aclocal.m4: Rebuilt.
! 	* acinclude.m4: Add AC_COMPILE_CHECK_SIZEOF.
  
! 2002-02-06  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (require_array_type): If argument is a null array of
! 	references, return null as the element type.
  
! 2002-02-06  Mark Wielaard  <mark@klomp.org>
  
! 	* verify.cc (verify_instructions_0) [op_dup2]: Actually push the
! 	duplicate of a wide type.
  
! 2002-02-06  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (type::isnull): New method.
! 	(require_array_type): Handle case where array is null.
! 	(verify_instructions_0) [op_arraylength]: Likewise.
  
! 2002-02-05  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* configure.in: Set up PLATFORMOBJS not PLATFORM_SPECIFIC_SOURCES.
! 	Symlink PLATFORMH to platform.h.
! 	* Makefile.am (libgcj_la_DEPENDENCIES, libgcj_la_LIBADD): Add
! 	PLATFORMOBJS.
! 	* java/lang/natSystem.cc: #include platform.h not posix.h.
! 	* Makefile.in: Rebuilt with libgcj automake.
  	* configure: Rebuilt.
  
! 2002-02-05  Richard Henderson  <rth@redhat.com>
  
! 	* Makefile.in: Undo munging last change.
  
! 2002-02-04  Adam Megacz <adam@xwt.org>
  
! 	* win32.cc: Created it.
! 	* configure.in: Added PLATFORM_SPECIFIC_SOURCES,
! 	which is set to posix.cc or win32.cc.
! 	* Makefile.am: Updated it to use $(PLATFORM_SPECIFIC_SOURCES).
  
! 2002-02-04  Adam Megacz <adam@xwt.org>
  
! 	* configure.in: Corrected mingw case branches; added * before
! 	and after.
  
! 2002-02-04  Adam Megacz <adam@xwt.org>
  
! 	* configure.in: Add -lgdi32 -lwsock32 -lws2_32 to libgcj.spec
! 	if compiling for win32
  
! 2002-02-04  Adam Megacz <adam@xwt.org>
  
! 	* win32-threads.cc: #undef STRICT after gc.h inclusion
  
! 2002-02-02  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
  
! 2002-02-02  Jason Merrill  <jason@redhat.com>
  
! 	* Makefile.am (clean-nat): New target.
  
! 2002-02-02  Tom Tromey  <tromey@redhat.com>
  
! 	* java/io/natFile.cc: Removed old "FIXME" comments.
  
! 2002-02-01  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natPosixProcess.cc (myclose): New function.
! 	(fail): Use it.
! 	(startProcess): Likewise.
  
! 2002-02-01  Adam Megacz <adam@xwt.org>
  
! 	* prims.cc: Added #undef STRICT after #include<windows.h>.
  
! 2002-02-01  Adam Megacz <adam@xwt.org>
  
! 	* prims.cc
! 	(_Jv_CreateJavaVM): We now use WIN32 instead of
! 	USE_WIN32_SIGNALLING and USE_WINSOCK.
! 	(win32_exception_handler): Now throws an exception out of
! 	the signal handler; assumes SJLJ.
  
! 2002-02-01  Adam Megacz <adam@xwt.org>
  
! 	* win32-threads.cc:
! 	(_Jv_CondWait, _Jv_CondNotify, _Jv_CondNotifyAll): Corrected
! 	wait() algorithm to make it safe.
! 	(ensure_condvar_initialized, _Jv_CondInit, _Jv_CondDestroy):
! 	Added lazy creation of Win32 Events for better performance
! 	(really_start): This now uses GC_CreateThread so boehm-gc
! 	knows about new threads even when statically linked.
  
! 2002-02-01  Adam Megacz <adam@xwt.org>
  
! 	* include/win32-threads.h (_Jv_ConditionVariable_t): Now a struct, to
! 	enable safer wait() algorithm.
! 	(_Jv_CondWait, _Jv_CondInit, _Jv_CondDestroy, _Jv_CondNotify,
! 	_Jv_CondNotifyAll): Implementations moved to win32-threads.cc.
! 	(_Jv_MutexInit, _Jv_HaveMutexDestroy, _Jv_MutexUnlock,
! 	_Jv_MutexLock, _Jv_ThreadYield): Reimplement using CRITICAL_SECTIONs
! 	instead of mutex.
! 	(_Jv_ThreadYield): Don't call Sleep(), because it crashes win98.
  
! 2002-02-01  Adam Megacz <adam@xwt.org>
  
! 	* configure.in: Added support for mingw.
! 	* java/lang/Win32Process.java: Created as empty file.
! 	* java/lang/natWin32Process.cc: Created as empty file.
  
! 2002-02-01  Craig Rodrigues  <rodrigc@gcc.gnu.org>
  
! 	PR java/4972
! 	* aclocal.m4, acinclude.m4 (AM_ICONV): Put linking flags
! 	for libiconv in LIBICONV variable.
! 	* configure: Regenerated.
  
! 2002-01-31  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (state::enter_subroutine): New method.
! 	(handle_jsr_insn): Use it.
! 	(state::merge): When processing a `ret', correctly use
! 	subroutine's state to determine which local variables have
! 	changed.
! 	(push_exception_jump): Don't let stack overflow.
  
! 2002-01-31  Joseph S. Myers  <jsm28@cam.ac.uk>
  
! 	* gnu/gcj/convert/Convert.java: Only include one copyright year in
! 	--version output.
  
! 2002-01-30  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/natPlainSocketImpl.cc (_Jv_recv): Added template
! 	parameter for `recv' return type.
  
! 	* verify.cc (handle_ret_insn): Check for subroutine merge here...
! 	(state::merge): ... not here.
! 	(subr_entry_info): New structure.
! 	(entry_points): New field.
! 	(~_Jv_BytecodeVerifier): Correctly free jsr_ptrs.  Free
! 	entry_points.
  
! 2002-01-29  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/List.java (addNotify): Correctly check to see if peer
! 	does not exist.
  
! 	* 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-28  Tom Tromey  <tromey@redhat.com>
  
! 	* verify.cc (class _Jv_BytecodeVerifier) [op_invokeinterface]:
! 	`nargs' byte is number of words, not number of arguments.
  
! 2002-01-27  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/event/MouseEvent.java (modifiers): Removed field.
! 	(when): Likewise.
! 	* java/awt/event/InputEvent.java (modifiers, when): Now
! 	package-private.
  
! 	* verify.cc (class _Jv_BytecodeVerifier): Removed `FIXME' comment
! 	and to-do list.
! 	(state::merge): Use current class' class loader.
! 	(state::print): Print subroutine.
! 	(state::merge): Don't look at subroutine of unmerged `ret'.
  
! 2002-01-26 Andreas Tobler <a.tobler@schweiz.ch>
  
! 	* nogc.cc: Remove warnings.
! 	(_Jv_GCRegisterDisappearingLink, _Jv_GCCanReclaimSoftReference):
! 	New functions.
  
! 2002-01-25  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
  
! 	* java/awt/image/MemoryImageSource.java (newPixels(byte[], ColorModel,
! 	int, int):  Remove empty "if" statement to work around compiler bug.
! 	(newPixels(int[], ColorModel, int, int): Likewise.
  
! 2002-01-25  Per Bothner  <per@bothner.com>
  
! 	* verify.cc (verify_fail):  Change from being a top-level function
! 	to e method of _Jv_BytecodeVerifier.  Emit current method name.
! 	Pass the current verifier to type: and state: methods as needed,
! 	for better error messages, and for resolve.
! 	(resolve):  Pass current class's loader for Class.forName and
! 	_Jv_FindClassFromSignature, rather than using the default loader.
! 	(various type: and state: methods):  Take _Jv_BytecodeVerifier* arg.
! 	(get_type_val_for_signature):  Make non-static.
! 	(various methods):  Pass start_PC implicitly, not explicitly.
  
! 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/Shape.java: Merged with Classpath.
! 	* java/awt/Scrollbar.java: Merged with Classpath.
  
! 	* 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/lang/natObject.cc (X86 compare_and_swap): Use +m constraint.
  
! 	* java/awt/image/PixelGrabber.java (grabPixels()): Call grabPixels(0).
! 	(grabPixels(long)): Wait to be notified that the ImageProducer has
! 	completed.
  
! 2002-01-24  Per Bothner  <per@bothner.com>
  
! 	* verify.cc (is_assignable_from_slow): If target is an interface,
! 	we must still check the source's superclass before giving up.
  
! 2002-01-24  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/awt/xlib/XToolkit.java (getPrintJob): New stub method.
  
! 2002-01-23  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/BorderLayout.java (addLayoutComponent): Added missing
! 	`else'.
  
  	* Makefile.in: Rebuilt.
! 	* Makefile.am (awt_java_source_files): Added new files.
! 	* java/awt/Toolkit.java: Merged with Classpath.
! 	* java/awt/PrintGraphics.java: New file from Classpath.
! 	* java/awt/PrintJob.java: New file from Classpath.
! 	* java/awt/datatransfer/Clipboard.java: New file from Classpath.
! 	* java/awt/datatransfer/ClipboardOwner.java: New file from
! 	Classpath.
! 	* java/awt/datatransfer/DataFlavor.java: New file from Classpath.
! 	* java/awt/datatransfer/FlavorMap.java: New file from Classpath.
! 	* java/awt/datatransfer/MimeTypeParseException.java: New file from
! 	Classpath.
! 	* java/awt/datatransfer/StringSelection.java: New file from
! 	Classpath.
! 	* java/awt/datatransfer/SystemFlavorMap.java: New file from
! 	Classpath.
! 	* java/awt/datatransfer/Transferable.java: New file from
! 	Classpath.
! 	* java/awt/datatransfer/UnsupportedFlavorException.java: New file
! 	from Classpath.
  
  	* Makefile.in: Rebuilt.
! 	* Makefile.am (awt_java_source_files): Added new files.
! 	* java/awt/image/AreaAveragingScaleFilter.java: New file from
! 	Classpath.
! 	* java/awt/image/CropImageFilter.java: New file from Classpath.
! 	* java/awt/image/FilteredImageSource.java: New file from
! 	Classpath.
! 	* java/awt/image/ImageFilter.java: New file from Classpath.
! 	* java/awt/image/MemoryImageSource.java: New file from Classpath.
! 	* java/awt/image/PixelGrabber.java: New file from Classpath.
! 	* java/awt/image/RGBImageFilter.java: New file from Classpath.
! 	* java/awt/image/ReplicateScaleFilter.java: New file from
! 	Classpath.
! 	* java/awt/image/ImageProducer.java: Replaced with Classpath
! 	version.
! 	* java/awt/image/ImageObserver.java: Replaced with Classpath
! 	version.
! 	* java/awt/image/ImageConsumer.java: Replaced with Classpath
! 	version.
! 	* java/awt/GridBagConstraints.java (clone): Catch
! 	CloneNotSupportedException.
  
! 2002-01-23  Per Bothner  <per@bothner.com>
  
! 	* java/lang/reflect/natField.cc (setAddr):  New function.
! 	Calls getAddr and then checks that the field isn't final.
! 	(setBoolean. setChar, setByte, setShort, setInt, setLong, setFloat,
! 	setDouble, set):  Use setAddr instead of getAddr, to check for FINAL.
! 	(set):  Call setAddr before check that new value has right type,
! 	to better match specified semantics.
  
! 2002-01-22  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/TextField.java: Replaced with Classpath version.
! 	* java/awt/TextArea.java: Replaced with Classpath version.
! 	* java/awt/TextComponent.java: Replaced with Classpath version.
  
! 	* java/awt/GridBagConstraints.java: Updated copyright.
  
! 2002-01-22  Mark Wielaard <mark@klomp.org>
  
! 	* java/awt/Adjustable.java java/awt/CheckboxMenuItem.java
! 	java/awt/Choice.java java/awt/Color.java java/awt/Cursor.java
! 	java/awt/Dialog.java java/awt/FileDialog.java
! 	java/awt/Font.java java/awt/FontMetrics.java
! 	java/awt/Image.java java/awt/ImageMediaEntry.java
! 	java/awt/Insets.java java/awt/List.java
! 	java/awt/MediaEntry.java java/awt/MediaTracker.java
! 	java/awt/Menu.java java/awt/MenuBar.java
! 	java/awt/MenuContainer.java java/awt/MenuShortcut.java
! 	java/awt/PaintContext.java java/awt/Panel.java
! 	java/awt/PopupMenu.java java/awt/SystemColor.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: Add license clarification.
  
! 2002-01-22  Mark Wielaard <mark@klomp.org>
  
! 	* LIBGCJ_LICENSE gnu/classpath/Configuration.java.in
! 	gnu/gcj/runtime/StringBuffer.java
! 	gnu/java/awt/BitMaskExtent.java gnu/java/awt/Buffers.java
! 	gnu/java/awt/ComponentDataBlitOp.java
! 	gnu/java/awt/GLightweightPeer.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/NullOutputStream.java
! 	gnu/java/io/ObjectIdentityWrapper.java
! 	gnu/java/lang/ArrayHelper.java gnu/java/lang/ClassHelper.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/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/provider/DefaultPolicy.java
! 	gnu/java/security/provider/Gnu.java
! 	gnu/java/security/provider/SHA.java
! 	gnu/java/security/provider/SHA1PRNG.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 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/BorderLayout.java
! 	java/awt/Button.java java/awt/Canvas.java
! 	java/awt/CardLayout.java java/awt/Checkbox.java
! 	java/awt/CheckboxGroup.java java/awt/Component.java
! 	java/awt/ComponentOrientation.java java/awt/Container.java
! 	java/awt/Dimension.java java/awt/Event.java
! 	java/awt/EventDispatchThread.java java/awt/EventQueue.java
! 	java/awt/FlowLayout.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/ItemSelectable.java java/awt/Label.java
! 	java/awt/LayoutManager.java java/awt/LayoutManager2.java
! 	java/awt/MenuComponent.java java/awt/MenuItem.java
! 	java/awt/Paint.java java/awt/Point.java
! 	java/awt/Rectangle.java java/awt/RenderingHints.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/event/HierarchyBoundsAdapter.java
! 	java/awt/event/HierarchyBoundsListener.java
! 	java/awt/event/HierarchyEvent.java
! 	java/awt/event/HierarchyListener.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/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/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/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/EOFException.java java/io/Externalizable.java
! 	java/io/FileFilter.java java/io/FileNotFoundException.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/InterruptedIOException.java
! 	java/io/InvalidClassException.java
! 	java/io/InvalidObjectException.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/PipedInputStream.java java/io/PipedOutputStream.java
! 	java/io/PipedReader.java java/io/PipedWriter.java
! 	java/io/PrintWriter.java java/io/PushbackInputStream.java
! 	java/io/PushbackReader.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/ClassCastException.java
! 	java/lang/ClassCircularityError.java
! 	java/lang/ClassFormatError.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/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/StringBuffer.java
! 	java/lang/StringIndexOutOfBoundsException.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/InvocationTargetException.java
! 	java/lang/reflect/Member.java java/lang/reflect/Modifier.java
! 	java/lang/reflect/ReflectPermission.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/DatagramSocketImpl.java
! 	java/net/FileNameMap.java java/net/MalformedURLException.java
! 	java/net/MulticastSocket.java java/net/NetPermission.java
! 	java/net/NoRouteToHostException.java
! 	java/net/PasswordAuthentication.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/URLDecoder.java java/net/URLEncoder.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/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/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/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
! 	javax/naming/BinaryRefAddr.java
! 	javax/naming/InvalidNameException.java javax/naming/Name.java
! 	javax/naming/NamingException.java javax/naming/RefAddr.java
! 	javax/naming/StringRefAddr.java: Add license clarification.
  
! 2002-01-22  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/peer/ButtonPeer.java: Replace with Classpath version.
! 	* java/awt/peer/CanvasPeer.java: Replace with Classpath version.
! 	* java/awt/peer/CheckboxMenuItemPeer.java: Replace with Classpath
! 	version.
! 	* java/awt/peer/CheckboxPeer.java: Replace with Classpath version.
! 	* java/awt/peer/ChoicePeer.java: Replace with Classpath version.
! 	* java/awt/peer/ComponentPeer.java: Replace with Classpath version.
! 	* java/awt/peer/ContainerPeer.java: Replace with Classpath version.
! 	* java/awt/peer/DialogPeer.java: Replace with Classpath version.
! 	* java/awt/peer/FileDialogPeer.java: Replace with Classpath version.
! 	* java/awt/peer/FontPeer.java: Replace with Classpath version.
! 	* java/awt/peer/FramePeer.java: Replace with Classpath version.
! 	* java/awt/peer/LabelPeer.java: Replace with Classpath version.
! 	* java/awt/peer/LightweightPeer.java: Replace with Classpath version.
! 	* java/awt/peer/ListPeer.java: Replace with Classpath version.
! 	* java/awt/peer/MenuBarPeer.java: Replace with Classpath version.
! 	* java/awt/peer/MenuComponentPeer.java: Replace with Classpath version.
! 	* java/awt/peer/MenuItemPeer.java: Replace with Classpath version.
! 	* java/awt/peer/MenuPeer.java: Replace with Classpath version.
! 	* java/awt/peer/PanelPeer.java: Replace with Classpath version.
! 	* java/awt/peer/PopupMenuPeer.java: Replace with Classpath version.
! 	* java/awt/peer/ScrollPanePeer.java: Replace with Classpath version.
! 	* java/awt/peer/ScrollbarPeer.java: Replace with Classpath version.
! 	* java/awt/peer/TextAreaPeer.java: Replace with Classpath version.
! 	* java/awt/peer/TextComponentPeer.java: Replace with Classpath version.
! 	* java/awt/peer/TextFieldPeer.java: Replace with Classpath version.
! 	* java/awt/peer/WindowPeer.java: Replace with Classpath version.
! 	* gnu/awt/xlib/XPanelPeer.java (insets): New method.
! 	* gnu/awt/xlib/XCanvasPeer.java (show, hide): New methods.
! 	(minimumSize, preferredSize, reshape): Likewise.
! 	* gnu/awt/xlib/XFramePeer.java (insets, enable, disable,
! 	getColorModel): New methods.
! 	* java/awt/PopupMenu.java: Merged with Classpath.
! 	* java/awt/MenuBar.java: Merged with Classpath.
! 	* java/awt/SystemColor.java: Replace with Classpath version.
! 	* java/awt/Panel.java: Merged with Classpath.
! 	* java/awt/PaintContext.java: Updated copyright.
! 	* java/awt/MenuShortcut.java: Merged with Classpath.
! 	* java/awt/MenuContainer.java: Merged with Classpath.
! 	* java/awt/Menu.java: Merged with Classpath.
! 	* java/awt/MediaEntry.java: New file from Classpath.
! 	* java/awt/MediaTracker.java: New file from Classpath.
! 	* java/awt/List.java: Merged with Classpath version.
! 	* java/awt/Insets.java: Merged with Classpath version.
! 	* java/awt/ImageMediaEntry.java: New file from Classpath.
! 	* java/awt/Image.java: Replaced with Classpath version.
! 	* java/awt/FontMetrics.java: Merged with Classpath version.
! 	* java/awt/Cursor.java (getDefaultCursor): Use DEFAULT_CURSOR
! 	constant.
! 	* java/awt/Font.java: Merged with Classpath version.
! 	* java/awt/Dialog.java: Merged with Classpath version.
! 	* java/awt/Color.java: Merged with Classpath version.
! 	* java/awt/Choice.java: Merged with Classpath version.
! 	* java/awt/CheckboxMenuItem.java: Merged with Classpath version.
! 	* java/awt/Adjustable.java: Replace with Classpath version.
! 	* 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.
  
! 2002-01-20  Andreas Schwab  <schwab@suse.de>
  
! 	* java/net/natPlainSocketImpl.cc (_Jv_recv): Change return type of
! 	function and of parameter recv_func to ssize_t, as specified by
! 	POSIX.
  
! 2002-01-19  Per Bothner  <per@bothner.com>
  
! 	* java/util/zip/ZipOutputStream.java (putNextEntry):  Clear
! 	uncompressed_size in readiness for next entry.
  
! 2002-01-18  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/natPlainSocketImpl.cc: Include
! 	IllegalArgumentException.h.
! 	(_Jv_recv): New template function.
! 	(BooleanClass): Removed.
! 	(read): Use _Jv_recv.
! 	(setOption): Use Boolean::class$.  Throw exception if object is
! 	not Boolean or Integer.
  
! 2002-01-17  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/MenuComponent.java: Merged with Classpath.
! 	* java/awt/MenuItem.java: Merged with Classpath.
! 	* java/awt/Button.java: Merged with Classpath.
  
! 	* java/awt/ActiveEvent.java: Updated copyright.
  
! 	* java/awt/AWTError.java: Replaced with Classpath version.
! 	* java/awt/AWTException.java: Replaced with Classpath version.
! 	* java/awt/IllegalComponentStateException.java: Replaced with
! 	Classpath version.
  
! 2002-01-16  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/Canvas.java (serialVersionUID): New constant.
! 	Updated copyright.  Added javadoc from Classpath.
! 	* java/awt/ItemSelectable.java: Replaced with Classpath version.
  
! 	* java/awt/CheckboxGroup.java: Merged with Classpath.
! 	* java/awt/Checkbox.java: Merged with Classpath.
  
! 	* java/awt/Dimension.java: Updated copyright.  Added javadoc from
! 	Classpath.
! 	* java/awt/Point.java: Updated copyright.
  
! 	* java/awt/Point.java (toString): Use getClass().getName().
! 	Added javadoc.
  
! 	* java/util/IdentityHashMap.java (IdentityHashMap): Removed
! 	commented code.
! 	(hash): Correctly compute initial value for `h'.
  
! 	* java/awt/Label.java: Merged with Classpath.
  
! 2002-01-15  Tom Tromey  <tromey@redhat.com>
  
! 	* java/awt/AWTPermission.java: Updated copyright.
  
! 	* java/awt/LayoutManager2.java: Merged with Classpath.
! 	* java/awt/LayoutManager.java: Merged with Classpath.
! 	* java/awt/GridLayout.java: Updated copyright and javadoc.
! 	(getSize): Use `parent.ncomponents'.  Handle insets.
! 	(layoutContainer): Use `parent.ncomponents'.  Handle case where
! 	there are fewer children than columns.  Correctly compute size of
! 	each cell in the grid.  Handle case where there isn't enough
! 	space.
! 	* java/awt/CardLayout.java (tab): Renamed from `map'.  Updated
! 	all users.
! 	(gotoComponent): Use parent.ncomponents.  Ensure child exists
! 	before calling setVisible() on it.  Last item is `num - 1', not
! 	`num'.
! 	(layoutContainer): Hoist invariants out of loop.
  
! 	Start of AWT merge with Classpath:
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (awt_java_source_files): Reference files in
! 	gnu/java/awt, not gnu/gcj/awt.
! 	* java/awt/image/BufferedImage.java: Updated copyright.
! 	* java/awt/image/ComponentColorModel.java: Updated copyright.
! 	* java/awt/image/ComponentSampleModel.java: Updated copyright.
! 	* java/awt/image/DataBuffer.java: Updated copyright.
! 	* java/awt/image/DataBufferByte.java: Updated copyright.
! 	* java/awt/image/DataBufferInt.java: Updated copyright.
! 	* java/awt/image/DataBufferUShort.java: Updated copyright.
! 	* java/awt/image/IndexColorModel.java: Updated copyright.
! 	* java/awt/image/PackedColorModel.java: Updated copyright.
! 	* java/awt/image/Raster.java: Updated copyright.
! 	* java/awt/image/RasterOp.java: Updated copyright.
! 	* java/awt/image/SampleModel.java: Updated copyright.
! 	* java/awt/image/SinglePixelPackedSampleModel.java: Updated copyright.
! 	* java/awt/image/WritableRaster.java: Updated copyright.
! 	* java/awt/color/ColorSpace.java: Updated copyright.
! 	* java/awt/color/ICC_ColorSpace.java: Updated copyright
! 	* java/awt/color/ICC_Profile.java: Updated copyright.
! 	* java/awt/event/HierarchyBoundsAdapter.java: Updated copyright.
! 	* java/awt/event/HierarchyBoundsListener.java: Updated copyright.
! 	* java/awt/event/HierarchyEvent.java: Updated copyright.
! 	* java/awt/event/HierarchyListener.java: Updated copyright.
! 	* java/awt/geom/AffineTransform.java: Updated copyright.
! 	* java/awt/geom/Dimension2D.java: Updated copyright.
! 	* java/awt/geom/Ellipse2D.java: Updated copyright.
! 	* java/awt/geom/IllegalPathStateException.java: Updated copyright.
! 	* java/awt/geom/Line2D.java: Updated copyright.
! 	* java/awt/geom/NoninvertibleTransformException.java: Updated
! 	copyright.
! 	* java/awt/geom/PathIterator.java: Updated copyright.
! 	* java/awt/geom/Point2D.java: Updated copyright.
! 	* java/awt/geom/Rectangle2D.java: Updated copyright.
! 	* java/awt/geom/RectangularShape.java: Updated copyright.
! 	* java/awt/geom/RoundRectangle2D.java: Updated copyright.
! 	* java/awt/Toolkit.java: Updated import for file moves.
! 	* java/awt/Rectangle.java: Updated copyright; added javadoc from
! 	Classpath.
! 	(hashCode): New method from Classpath.
! 	* java/awt/Graphics2D.java: Updated copyright.
! 	* java/awt/Transparency.java: Updated copyright.
! 	* java/awt/Paint.java: Updated copyright.
! 	* java/awt/Graphics.java: New version from Classpath.
! 	* java/awt/EventDispatchThread.java: Updated copyright.
! 	* java/awt/CardLayout.java (layoutContainer): Don't skip invisible
! 	children.
! 	(gotoComponent): Wrap around on next/previous.
! 	* gnu/gcj/awt/BitMaskExtent.java: Removed.
! 	* gnu/gcj/awt/Buffers.java: Removed.
! 	* gnu/gcj/awt/ComponentDataBlitOp.java: Removed.
! 	* gnu/gcj/awt/GLightweightPeer.java: Removed.
! 	* gnu/java/awt/BitMaskExtent.java: Added.
! 	* gnu/java/awt/Buffers.java: Added.
! 	* gnu/java/awt/ComponentDataBlitOp.java: Added.
! 	* gnu/java/awt/GLightweightPeer.java: Added.
! 	* java/awt/geom/Line2D.java (clone): Ignore
! 	CloneNotSupportedException.
! 	* gnu/gcj/awt/GLightweightPeer.java (getColorModel): New method.
! 	* java/awt/Frame.java: Merged with Classpath.
! 	* java/awt/RenderingHints.java: Copyright update.
! 	* java/awt/Paint.java: Copyright update.
! 	* java/awt/image/DirectColorModel.java: Merged with Classpath.
! 	* java/awt/image/ColorModel.java: Merged with Classpath.
! 	* java/awt/Window.java (show): New Implementation from Classpath.
! 	(isShowing): Use super.isShowing().
! 	* java/awt/EventQueue.java: Merged with Classpath.
! 	* java/awt/AWTEventMulticaster.java (save): Throw
! 	RuntimeException.
! 	(saveInternal): Likewise.
! 	* java/awt/AWTEvent.java: Now implements Serializable.
! 	* java/awt/Event.java: Copyright update.
! 	* java/awt/peer/ComponentPeer.java: Merged with Classpath.
! 	* java/awt/image/BufferedImage.java: Copyright update.
! 	* java/awt/GraphicsConfiguration.java: Copyright update.
! 	* java/awt/Component.java: (addNotify): Don't call
! 	addNotifyContainerChildren().
! 	(addNotifyContainerChildren): Removed.
! 	(setPeer): New method from Classpath.
! 	(setTreeLock): Likewise.
! 	(setVisible): Rewrote.
! 	(show): Use it.
! 	(hide): Likewise.
! 	(validate): Set `valid'.
! 	(checkImage(Image,ImageObserver)): Implementation from Classpath.
! 	(createImage(ImageProducer)): Likewise.
! 	(prepareImage): Likewise.
! 	* 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/ComponentOrientation.java: Updated copyright.  Added
! 	@author.
! 	* 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/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  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Float.java (equals): Preserve old code.
! 	* java/lang/Double.java (equals): Preserve old code.
  
! 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-13  Mark Wielaard  <mark@klomp.org>
  
! 	* java/net/DatagramSocket.java (getReceiveBufferSize): new 1.2 method.
! 	* java/net/DatagramSocket.java (getSendBufferSize): Likewise.
! 	* java/net/DatagramSocket.java (setReceiveBufferSize): Likewise.
! 	* java/net/DatagramSocket.java (setSendBufferSize): Likewise.
  
! 2002-01-11  Mark Wielaard  <mark@klomp.org>
  
! 	* java/net/InetAddress.java (ANY_IF): moved from ServerSocket.
! 	* java/net/DatagramSocket.java (DatagramSocket): use ANY_IF from
! 	InetAddress.
! 	* java/net/MulticastSocket.java (MulticastSocket): Likewise.
! 	* java/net/Socket.java: Merge with Classpath.
! 	* java/net/ServerSocket.java: Likewise.
  
! 2002-01-11  Chris Sears  <cbsears_sf@yahoo.com>
  
! 	* interpret.cc (NULLARRAYCHECK): New macro.
! 	(SAVE_PC): Just store `pc'.
! 	(find_exception): Subtract one from `pc' here.
! 	(continue1) [insn_iaload, insn_laload, insn_faload, insn_daload,
! 	insn_aaload, insn_baload, insn_caload, insn_saload, insn_iastore,
! 	insn_lastore, insn_fastore, insn_dastore, insn_aastore,
! 	insn_bastore, insn_castore, insn_sastore]: Use NULLARRAYCHECK, and
! 	don't call SAVE_PC.
! 	(continue1) [insn_fdiv, insn_ddiv, insn_frem, insn_drem]: Don't
! 	call SAVE_PC.
  
! 2002-01-11  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natSystem.cc (init_properties): Only look for default
! 	locale if LC_MESSAGES is defined.
! 	* aclocal.m4, configure, include/config.h.in: Rebuilt.
! 	* configure.in: Call AM_LC_MESSAGES.
! 	* acinclude.m4 (AM_LC_MESSAGES): New macro.
  
! 2002-01-10  Tom Tromey  <tromey@redhat.com>
  
! 	For PR libgcj/5303:
! 	* 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-09  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/gcj/convert/Convert.java (version): Use java.vm.name
! 	property.
! 	(help, version): Use println(), not println("").
  
! 	For PR libgcj/5303:
! 	* gnu/gcj/convert/Convert.java (error): Program is called
! 	`jv-convert'.  Print GNU-style message.  Exit with status 1, not
! 	-1.
! 	(main): Handle --help and --version.
! 	(help): New method.
! 	(version): Likewise.
  
! 2002-01-08  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (ordinary_java_source_files): Added new files.
! 	* 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.
  
! 	For PR libgcj/5031:
! 	* java/lang/natSystem.cc (init_properties): Use LC_MESSAGES to
! 	choose default locale.
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (jv_convert_LDADD): Removed convert_source_files.
  
! 2002-01-08  Nic Ferrier  <nferrier@tf1.tapsellferrier.co.uk>
  
! 	* java/net/natPlainSocketImpl.cc: Added timeout handling for
! 	sockets.
! 	(close): New function closes the socket.
! 	(write): New functions for output to socket.
! 	(read): New functions for reading from socket.
! 	* java/net/PlainSocketImpl.java: Glue for new timeout
! 	implementation.
! 	(write): Call the native impl.
! 	(read): Likewise.
! 	(getInputStream): Get a stream to read from the socket.
! 	(getOutputStream): Get a stream to write to the socket.
  
! 2002-01-08  Tom Tromey  <tromey@redhat.com>
  
! 	* resolve.cc (_Jv_PrepareClass): Enable verifier.
  
! 2002-01-07  Andreas Tobler <a.tobler@schweiz.ch>
  
! 	* java/lang/reflect/natMethod.cc: Don't include alloca.h.
! 	(_Jv_CallAnyMethodA): Convert alloca to __builtin_alloca.
  
! 2002-01-08  Chris Sears  <cbsears_sf@yahoo.com>
  
! 	* interpret.cc (ARRAYBOUNDSCHECK): New macro.
! 	(continue1) [insn_iaload, insn_laload, insn_faload, insn_daload,
! 	insn_aaload, insn_baload, insn_caload, insn_saload, insn_iastore,
! 	insn_lastore, insn_fastore, insn_dastore, insn_aastore,
! 	insn_bastore, insn_castore, insn_sastore]: Use it.
! 	(continue1) [insn_arraylength]: Check for null array.
  
! 2002-01-06 Andreas Tobler <a.tobler@schweiz.ch>
  
! 	* configure, include/config.h.in: Rebuilt.
! 	* java/lang/natSystem.cc (getSystemTimeZone): Check HAVE_TM_ZONE.
! 	* configure.in: Call AC_STRUCT_TIMEZONE.
  
! 2002-01-02 Andreas Tobler <a.tobler@schweiz.ch>
  
! 	* configure.host: Disable the interpreter for Darwin.
  
! 2002-01-04  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Thread.java (stop): No longer synchronized.
! 	(start): Likewise.
  
! 2002-01-02  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ieeefp.h: Fix bug in my hand-application of previous
! 	patch.
  
! 2002-1-1  Andrew Pinski  <pinskia@physics.uc.edu>
  
! 	* libjava/java/lang/ieeefp.h: Define __IEEE_BIG_ENDIAN for
! 	PPC Darwin, not for all of Darwin.
--- 1,21154 ----
! 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>
  
! 	* gnu/xml/pipeline/ValidationConsumer.java (Recognizer): Make
! 	'ANY' package-private.
  
! 2005-04-15  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* 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):
! 	Fixed wrong casting.
  
! 2005-04-06  Andrew Haley  <aph@redhat.com>
  
! 	* testsuite/libjava.lang/bytearray.java: New file.
! 	* testsuite/libjava.lang/bytearray.out: New file.
! 	* java/lang/ClassLoader.java (loadClassFromSig): Declare
! 	(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>
  
! 	* gnu/gcj/tools/gcj_dbtool/Main.java (Fileset): New class.
! 	(Tokenizer): New class.
! 	(getFiles): New method.
! 	(main): Add "-" argument.
! 	Add "-0" argument.
! 	Read list of files from stdin when merging map databases.
! 	(usage):  Add "-" argument.
! 	Add "-0" argument.
! 	Minor corrections.
  
! 2005-04-05  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	PR libgcj/20750
! 	* Makefile.am (AM_CXXFLAGS): Define JAVA_HOME.
! 	* Makefile.in: Regenerate.
! 	* configure.ac: Add --with-java-home option.
! 	* configure: Regenerate.
! 	* external/Makefile.in: Regenerate.
! 	* external/sax/Makefile.in: Regenerate.
! 	* external/w3c_dom/Makefile.in: Regenerate.
! 	* gcj/Makefile.in: Regenerate.
! 	* include/Makefile.in: Regenerate.
! 	* testsuite/Makefile.in: Regenerate.
! 	* java/lang/natRuntime.cc (insertSystemProperties): Set java.home
! 	to JAVA_HOME macro.
  
! 2005-04-04  Steve Pribyl <steve@netfuel.com>
  
! 	PR libgcj/20761
! 	* configure.ac: Fix fastjar definition for cross builds.
! 	* configure: Rebuilt.
  
! 2005-04-04  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ClassLoader.java (loadClass): Resolve class even if
! 	it was already found.
  
! 2005-04-04  Tom Tromey  <tromey@redhat.com>
  
! 	* java/net/URL.java (DEFAULT_SEARCH_PATH): Added
! 	org.metastatic.jessie.
  
! 2005-04-02  Anthony Green  <green@redhat.com>
  
! 	PR libgcj/20727
! 	* java/nio/DirectByteBufferImpl.java: Fix buffer ownership bug.
  
! 2005-04-02  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-04-01  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	PR libgcj/20090, PR libgcj/20526
! 	* gij.cc (nonstandard_opts_help): New function.
! 	(add_option): New function.
! 	(main): Support java options.  Set java.class.path.  Don't set
! 	_Jv_Jar_Class_Path.
! 	* prims.cc (parse_x_arg): New function.
! 	(parse_init_args): Call parse_x_arg for -X and _ options, when
! 	ignoreUnrecognized is true.
! 	(new _Jv_RunMain): New vm_args variant.
! 	(old _Jv_RunMain): Call new vm_args _Jv_RunMain.
! 	(_Jv_Jar_Class_Path): Remove variable.
! 	* include/java-props.h: Likewise.
! 	* include/cni.h (JvRealloc): New function.
! 	* include/jvm.h (_Jv_RunMain): Declare vm_args variant.
! 	* java/lang/natRuntime.cc (insertSystemProperties): Remove
! 	_Jv_Jar_Class_Path logic.  Use JV_VERSION and JV_API_VERSION
! 	macros.
! 	* configure.ac (JV_VERSION): Define.
! 	(JV_API_VERSION): Likewise.
! 	* 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.
  
! 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  Jeroen Frijters  <jeroen@frijters.net>
  
! 	* java/util/Timer.java
! 	(run): Stop the queue if a task throws an exception.
  
! 2005-03-31  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* 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>
  
! 	* gnu/xml/dom/DomNode.java (notifyNode): grow listener array as
! 	required.
  
! 2005-03-13  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/xml/aelfred2/XmlParser.java: Fixed typo.
  
! 2005-03-11  Chris Burdess  <dog@gnu.org>
  
! 	* gnu/xml/aelfred2/SAXDriver.java: Corrected bug handling URI
! 	warnings.
  
! 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-03-11  Chris Burdess  <dog@gnu.org>
  
! 	* 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
! 	-p option.
! 	(usage): Add [LIBDIR] to help output.
! 	* gnu/gcj/tools/gcj_dbtool/natMain.cc: New file.
! 	* Makefile.am (AM_CXXFLAGS): Define
! 	LIBGCJ_DEFAULT_DATABASE_PATH_TAIL.
! 	(db_pathtail): New macro.
  
! 2005-03-23  Sven de Marothy  <sven@physto.se>
  
! 	PR libgcj/2641, PR libgcj/9854, PR libgcj/14892, PR libgcj/18083,
! 	PR libgcj/11085:
! 	* 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.java
! 	(computeTime, computeFields): HOUR should be in 0-11 format.
! 	(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>
  
! 	* gnu/gcj/tools/gcj_dbtool/Main.java (usage): Fixed output.
  
! 2005-03-21  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/VMCompiler.java (static block): Also catch
! 	BufferUnderflowException.
  
! 2005-03-16  Tom Tromey  <tromey@redhat.com>
  
! 	* link.cc (ensure_class_linked): Removed #ifdef.
! 	(print_class_loaded): Likewise.
! 	(wait_for_state): Likewise.
! 	* java/lang/Class.h (_Jv_IsInterpretedClass): Always declare.
! 	* include/jvm.h (_Jv_IsInterpretedClass): Moved from...
! 	* include/java-interp.h: ... here.
  
! 2005-03-16  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/java/lang/MainThread.java (run): Load main class using
! 	system class loader.
  
! 2005-03-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR libgcj/20251
! 	* Makefile.am (libjawt_la_LIBADD): Add -L$(here)/.libs.
! 	* Makefile.in: Rebuilt.
  
! 2005-03-15  David Daney  <ddaney@avtrex.com>
  
! 	* gnu/java/net/natPlainSocketImplPosix.cc (read_helper): Handle
! 	count == 0 case.
  
! 2005-03-15  David Daney  <ddaney@avtrex.com>
  
! 	* java/io/BufferedInputStream.java (available): Use 'in' instead
! 	of 'super' for underlying stream access.
! 	(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'.
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (dbexecdir): New variable.
! 	(db_name): Likewise.
! 	(dbexec_DATA): Likewise.
! 	($(db_name)): New target.
! 	(AM_CXXFLAGS): Define LIBGCJ_DEFAULT_DATABASE.
! 	* 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.
! 	(smallTransferTo): New.
! 	(transferFrom): Loop around smallTransferFrom, copying pageSize
! 	bytes each time.
! 	(transferTo): Likewise.
  
! 2005-03-09  David Daney  <ddaney@avtrex.com>
  
! 	PR libgcj/20389
! 	Merge BufferedInputStream from GNU Classpath.
! 	* java/io/BufferedInputStream.java (marktarget): Field removed.
! 	(CHUNKSIZE): Field removed.
! 	(bufferSize): New field.
! 	(BufferedInputStream): Initialize fields.
! 	(close): Invalidate mark and buffer indexes.
! 	(mark):  Rewritten.
! 	(read()): Move mark handling code to refill.
! 	(read(byte[], int, int)): Ditto.
! 	(skip): Ditto and simplify EOF testing.
! 	(refill): Rewritten.
! 	* java/io/InputStreamReader.java (refill): Removed mark and reset
! 	of internal BufferedInputStream.
  
! 2005-03-09  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natVMClassLoader.cc (defineClass): Reference
! 	'systemClassLoader' field directly.
! 	* java/lang/natRuntime.cc (_load): Reference 'systemClassLoader'
! 	field directly.
! 	* java/lang/natClassLoader.cc (_Jv_RegisterInitiatingLoader):
! 	Reference 'systemClassLoader' field directly.
! 	(_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>
  
! 	PR libgcj/20155
! 	* Makefile.am (libgcj0_convenience.la): New rule to create a file
! 	of the object files to link to avoid exceeding the command line
! 	length limits on some platforms.
! 	(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
! 	(gcj_jni_invocation_compile_c_to_binary): Add -I. -I.. to compile
! 	flags.
! 	(gcj_jni_invocation_test_one): Add -L../.libs to cxx flags.
  
! 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-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	PR libgcj/16923
! 	* jni.cc (JNI_CreateJavaVM): Check JNI version.  Cast args to
! 	JvVMInitArgs.  Pass args to _Jv_CreateJavaVM and check return
! 	value.  Move argument parsing code to prims.cc.
! 	* prims.cc (no_properties): Remove.
! 	(_Jv_Compiler_Properties): Initialize to NULL.
! 	(_Jv_Properties_Count): Initialize to 0.
! 	(parse_verbose_args): New function.
! 	(parse_init_args): New function.
! 	(_Jv_CreateJavaVM): Call parse_init_args.
! 	(_Jv_RunMain): Check return value of _Jv_CreateJavaVM.
! 	* gcj/cni.h (JvVMOption): New struct.
! 	(JvVMInitArgs): Likewise.
! 	(JvCreateJavaVM): Declare vm_args as JvVMInitArgs* rather than
! 	void*.
! 	* libjava/gcj/javaprims.h (_Jv_VMOption): New struct.
! 	(_Jv_VMInitArgs): Likewise.
! 	* include/java-props.h (_Jv_Properties_Count): Declare.
! 	* java/lang/natRuntime.cc (insertSystemProperties): Use
! 	_Jv_Properties_Count in for loop exit condition.
! 	* testsuite/libjava.jni/jni.exp
! 	(gcj_invocation_compile_c_to_binary): New procedure.
! 	(gcj_invocation_test_one): Likewise.
! 	(gcj_jni_run): Run JNI invocation API tests.
! 	* testsuite/libjava.jni/invocation/PR16923.c,
! 	testsuite/libjava.jni/invocation/PR16923.java,
! 	testsuite/libjava.jni/invocation/PR16923.out: New test.
  
! 2005-02-23  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am: Added new file gnu/java/nio/ChannelReader.java.
! 	* Makefile.in: Regenerated.
  
! 2005-02-23  Robert Schuster  <thebohemian@gmx.net>
  
! 	* gnu/java/nio/ChannelReader: Fixed comments.
  
! 2005-02-23  Robert Schuster  <thebohemian@gmx.net>
  
! 	* java/nio/channels/Channels: Added FIXMEs about
! 	stub method implementation.
! 	(newReader): Implemented.
! 	* gnu/java/nio/ChannelReader: New class.
  
! 2005-02-23  Michael Koch  <konqueror@gmx.de>
  
! 	* java/text/SimpleDateFormat.java:
! 	Removed unused import.
  
! 2005-02-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	PR libgcj/20029:
! 	* Makefile.am (lib_gnu_java_awt_peer_gtk_la_CFLAGS): Add X_CFLAGS.
! 	(lib_gnu_java_awt_peer_gtk_la_LDFLAGS): Add X_LIBS and -lXtst.
! 	* Makefile.in: Regenerate.
! 	* configure.ac: Check for libXtst.
! 	* configure: Regenerate.
  
! 2005-02-22  Mark Wielaard  <address@bogus.example.com>
  
! 	* 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-02-22  Jeroen Frijters  <jeroen@frijters.net>
  
! 	* java/lang/reflect/Proxy.java,
! 	java/net/URL.java,
! 	java/security/SecureRandom.java,
! 	java/util/Timer.java,
! 	java/util/prefs/AbstractPreferences.java:
! 	Don't catch java.lang.ThreadDeath.
  
! 2005-02-22  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-22  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-02-22  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Object.h (_JvObjectPrefix): Declare as extern "Java".
  
! 2005-02-22  Tom Tromey  <tromey@redhat.com>
  
! 	PR java/20056:
! 	* verify.cc (type::EITHER): New constant.
! 	(check_field_constant): Use it.
! 	(type::compatible): Handle it.
  
! 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  Jeroen Frijters  <jeroen@frijters.net>
  
! 	* java/beans/PropertyDescriptor.java
! 	(PropertyDescriptor,setReadMethod): Set propertyType.
  
! 2005-02-22  Michael Koch  <konqueror@gmx.de>
  
! 	* java/nio/DirectByteBufferImpl.java
! 	(owner): Fixed formatting of javadoc.
! 	* java/text/DateFormat.java
! 	(getAvailableLocales): Fixed formatting.
! 	* java/text/SimpleDateFormat.java:
! 	Fixed formatting and import statement order.
! 	* java/util/Calendar.java
! 	(Calendar): Fixed javadoc to be HTML compliant.
! 	* java/util/SimpleTimeZone.java:
! 	Fixed javadocs.
  
! 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>
  
! 	* java/awt/Robot.java (waitForIdle): Call invokeAndWait on an
! 	empty Runnable.
  
! 	PR libgcj/17952:
! 	* 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-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	PR libgcj/19842
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
! 	(button_to_awt_mods): Return BUTTON masks, not BUTTON_DOWN masks.
  
! 2005-02-21  Bryce McKinlay  <mckinlay@redhat.com>
  
! 	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
! 	fields.
! 	* java/io/VMObjectStreamClass.java (setDoubleNative, setFloatNative,
! 	setLongNative, setIntNative, setShortNative, setCharNative,
! 	setByteNative, setBooleanNative, setObjectNative): New native methods.
! 	* java/io/natVMObjectStreamClass.java (setDoubleNative, setFloatNative,
! 	setLongNative, setIntNative, setShortNative, setCharNative,
! 	setByteNative, setBooleanNative, setObjectNative): Implement them.
! 	* java/io/natObjectInputStream.cc (allocateObject): Add new parameters
! 	from Classpath's version. Use _Jv_FromReflectedConstructor(). Call
! 	the constructor here.
! 	(callConstructor): Removed.
! 	(getCallersClassLoader): Removed.
! 	* java/lang/reflect/Field.java (setByte, setShort, setInt, setLong,
! 	setFloat, setDouble, setChar, setBoolean): Add 'checkFinal' parameter
! 	to control whether setting final field values is permitted. Call
! 	getAddr() with checkFinal parameter instead of setAddr().
! 	* java/lang/reflect/natField.cc (getType): Lookup and resolve field
! 	only if not done already.
! 	(getAddr): Add checkFinal parameter. Do the final field check only if
! 	checkFinal is set.
! 	(setAddr): Removed.
  
! 2005-02-21  Mark Wielaard  <mark@klomp.org>
  
! 	# Fixes bug #11957
! 	* java/io/ObjectInputStream.java (resolveClass): Don't check "void"
! 	twice.
! 	
! 2005-02-21  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-02-21  Jeroen Frijters  <jeroen@frijters.net>
! 
! 	* java/io/ObjectInputStream.java
! 	(readObject): Fix to consume TC_ENDBLOCKDATA after readExternal.
! 
! 2005-02-21  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.
! 
! 2005-02-21  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.	
  
! 2005-02-21  Mark Wielaard  <mark@klomp.org>
  
! 	* gnu/java/locale/LocaleInformation_en.java: Extend
! 	localPatternChars to "GyMdkHmsSEDFwWahKzYeugAZ".
  
! 2005-02-21  Mark Wielaard  <mark@klomp.org>
  
! 	* java/text/SimpleDateFormat.java
! 	(SimpleDateFormat(String, DateFormatSymbols)): Throw
! 	NullPointerException when formatData is null.
  
! 2005-02-21  Mark Wielaard  <mark@klomp.org>
  
! 	* java/util/SimpleTimeZone.java (getOffset): Calculate beforeEnd by
! 	taking dstSavings into account.
  
! 2005-02-21  Sven de Marothy <sven@physto.se>
  
! 	* java/text/SimpleDateFormat.java,
! 	(parse): Set correct DST_OFFSET to the correct value.
  
! 2005-02-21  Mark Wielaard  <mark@klomp.org>
  
! 	* java/util/SimpleTimeZone.java (checkRule): Throw
! 	IllegalArgumentException when month out of range.
  
! 2005-02-21  Sven de Marothy  <sven@physto.se>
  
! 	* java/util/GregorianCalendar.java,
! 	(add): Don't set fields directly anymore. Use set()
  
! 2005-02-21  Mark Wielaard  <mark@klomp.org>
  
! 	* java/text/SimpleDateFormat.java (CompiledField.toString):
! 	Use StringBuffer, not StringBuilder.
! 	(toString): Likewise.
  
! 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>
  
! 	* 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-21  Sven de Marothy  <sven@physto.se>
  
! 	* java/util/Calendar.java
! 	(set) Invalidate all fields on first call to set().
  
! 2005-02-21  Sven de Marothy  <sven@physto.se>
  
! 	* java/util/GregorianCalendar.java
! 	(computeTime): Fixed handling of time zones.
  
! 2005-02-21  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-21  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-02-21  Sven de Marothy <sven@physto.se>
  
! 	* java/util/Calendar.java: Reformatted.
! 	* java/util/GregorianCalendar.java: Reformatted.
! 	* java/util/SimpleTimeZone.java: Reformatted.
  
! 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>
  
! 	* java/util/Calendar.java(set):
! 	Fix for DST related regression.
  
! 2005-02-21  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.
  
! 2005-02-21  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-21  Andrew John Hughes  <gnu_andrew@member.fsf.org>
  
! 	* 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-02-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-02-21  Ito Kazumitsu  <kaz@maczuka.gcd.org>
  
! 	* java/text/SimpleDateFormat.java:
! 	(parse): Set the DST offset to 0 when parsing
! 	GMT offset timezones.
  
! 2005-02-21  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-02-21  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-02-21  Sven de Marothy <sven@physto.se>
  
! 	* java/text/SimpleDateFormat.java
! 	(parse): comparison should be case-insensitive, ignore null
! 	strings.
  
! 2005-02-21  Robert Schuster  <theBohemian@gmx.net>
  
! 	* gnu/java/beans/IntrospectionIncubator.java
! 	(addMethod) Reverts the patch that ntroduced a regression (see bug
! 	https://savannah.gnu.org/bugs/?func=detailitem&item_id=10938).
  
! 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  Andrew Haley  <aph@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (nat_source_files): Added natLogger.cc.
! 	* java/util/logging/natLogger.cc: New file.
! 	* java/util/logging/Logger.java (getCallerStackFrame): Now
! 	native.
  
! 2005-02-21  Andreas Tobler  <a.tobler@schweiz.ch>
! 
! 	* Makefile.am (all_property_files): Remove left over.
! 	(classes.stamp): Add stamp for the ONESTEP build, also known as
! 	--enable-libgcj-multifile.
  	* Makefile.in: Regenerated.
  
! 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  Mark Wielaard  <mark@klomp.org>
  
! 	* java/io/FileDescriptor.java (sync): Add real exception to
! 	SyncFailedException.
  
! 2005-02-21  Michael Koch  <konqueror@gmx.de>
  
! 	* java/io/InputStreamReader.java:
! 	Fixed @author tag.
  
! 2005-02-20  Rutger Ovidius  <ovidr@users.sourceforge.net>
  
! 	PR libgcj/19728:
! 	* gnu/java/security/provider/Gnu.java (Gnu): Add SHA-160 alias.
  
! 2005-02-20  Dalibor Topic  <robilad@kaffe.org>
  
! 	* libraries/javalib/gnu/regexp/RE.java,
! 	libraries/javalib/java/io/ObjectInputStream.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:
! 	Made 'inner' classes real public static inner classes,
! 	and made them final where possible, or removed them
! 	where unused.
  
! 2005-02-20  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/text/FormatCharacterIterator.java:
! 	Removed redundant modifiers.
  
! 2005-02-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jni/gtk-peer/gthread-jni.c (throw): Call g_snprintf instead of
! 	snprintf.
  
! 2005-02-19  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am: Added new files in gnu/java/beans and
! 	java/beans/XMLDecoder.java.
! 	* Makefile.in: Regenerated.
  
! 2005-02-19  Robert Schuster  <thebohemian@gmx.net>
  
! 	* gnu/java/beans/decoder/GrowableArrayContext.java: Fixed
! 	assignment behavior by using java.lang.reflect.Array.set()
! 	directly.
  
! 2005-02-19  Dalibor Topic  <robilad@kaffe.org>
  
! 	* gnu/java/beans/EmptyBeanInfo.java,
! 	gnu/java/beans/info/ComponentBeanInfo.java:
! 	Removed unused files.
  
! 2005-02-19  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-02-19  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-02-19  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/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: New class
! 	implementing java.beans.XMLDecoder decoding functionality.
! 	* java/beans/XMLDecoder.java: New class.
  
! 2005-02-19  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTextField.java
! 	(notfiyAction): Added javadoc.
  
! 2005-02-19  Sven de Marothy  <sven@physto.se>
  
! 	* javax/swing/SpinnerDateModel.java: Implemented.
  
! 2005-02-19  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am: Added javax/swing/SpinnerDateModel.java.
! 	* Makefile.in: Regenerated.
  
! 2005-02-19  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/nio/SelectorImpl.java:
! 	Reworked import statements.
! 	(register): Removed unused code.
! 	* java/nio/channels/Channels.java: Reformatted.
! 	* java/nio/charset/Charset.java: Likewise.
! 	* java/rmi/server/RemoteObject.java
! 	(serialVersionUID): Made private.
! 	* java/rmi/server/UID.java
! 	(serialVersionUID): Likewise.
  
! 2005-02-19  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/DTPInputStream.java,
! 	gnu/java/net/protocol/ftp/DTP.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/CRLFInputStream.java,
! 	gnu/java/net/CRLFOutputStream.java,
! 	gnu/java/net/GetLocalHostAction.java,
! 	gnu/java/net/protocol/ftp/package.html: New files.
! 	* Makefile.am: Added new files.
! 	* Makefile.in: Regenerated.
  
! 2005-02-18  Tom Tromey  <tromey@redhat.com>
  
! 	* link.cc (make_vtable): Remove abstract method check.
! 	(append_partial_itable): Likewise.
  
! 	PR java/20056:
! 	* verify.cc (type::equals): Fixed test.
! 	* testsuite/libjava.lang/PR20056.out: New file.
! 	* testsuite/libjava.lang/PR20056.java: New file.
  
! 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>
  
! 	PR java/20056:
! 	* include/jvm.h (_Jv_Linker::has_field_p): Declare.
! 	* link.cc (has_field_p): New function.
! 	* verify.cc (check_field_constant): Added 'putfield' argument.
! 	(verify_instructions_0): Updated.
! 	(type::equals): New method.
  
! 2005-02-18  Anthony Green  <green@redhat.com>
  
! 	* NEWS: Draft of libgcj NEWS for 4.0.
  
! 2005-02-18  Anthony Green  <green@redhat.com>
  
! 	* java/lang/natRuntime.cc (insertSystemProperties): Normalize x86
! 	architecture names to "i386" for compatibility reasons.  Win32
! 	still uses "x86".
  
! 2005-02-18  Anthony Green  <green@redhat.com>
  
! 	* gij.cc (version): Change year for '--version' to 2005.
! 	* gnu/gcj/convert/Convert.java: Ditto.
! 	* gnu/java/rmi/rmic/RMIC.java: Ditto.
! 	* gnu/java/rmi/registry/RegistryImpl.java: Ditto.
  
! 	* gnu/gcj/tools/gcj_dbtool/Main.java: Only show the most
! 	recent copyright year in `--version' output.
  
! 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  Ito Kazumitsu  <kaz@maczuka.gcd.org>
  
! 	* gnu/java/nio/channels/FileChannelImpl.java (write(ByteBuffer)):
! 	Move the position of the source buffer forward.
  
! 2005-02-17  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Class.h (_Jv_GetMethodString): Updated declaration.
! 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Updated.
! 	* java/lang/natClass.cc (_Jv_LookupInterfaceMethod): Updated.
! 	* link.cc (_Jv_GetMethodString): Added 'derived' argument.
! 	Changed type of second argument.  Rewrote.
! 	(make_vtable): Use it.
! 	(append_partial_itable): Updated.
! 	(layout_vtable_methods): Updated.
  
! 2005-02-17  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/net/PlainSocketImpl.java
! 	(shutdownInput): Added javadoc.
! 	(shutdownOutput): Likewise.
  
! 2005-02-17  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/print/attribute/standard/Chromaticity.java,
! 	javax/print/attribute/standard/Destination.java,
! 	javax/print/attribute/standard/MediaPrintableArea.java,
! 	javax/print/attribute/standard/MediaSize.java: New files.
! 	* Makefile.am: Added new files.
! 	* Makefile.in: Regenerated.
  
! 2005-02-17  Andrew John Hughes  <gnu_andrew@member.fsf.org>
! 	    Michael Koch  <konqueror@gmx.de>
  
! 	* 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/PipeImpl.java,
! 	gnu/java/rmi/dgc/DGCImpl.java,
! 	gnu/java/rmi/server/ConnectionRunnerPool.java,
! 	gnu/java/rmi/server/UnicastConnectionManager.java,
! 	gnu/java/security/der/DERWriter.java,
! 	gnu/java/security/pkcs/SignerInfo.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/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/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/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:
! 	Reworked import statements, fixed modifier order and some little
! 	formatting issues.
  
! 2005-02-17  Ito Kazumitsu  <kaz@maczuka.gcd.org>
  
! 	* java/nio/ByteBufferImpl.java (compact):
! 	Set position and limit even if no bytes were moved.
  
! 2005-02-17  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.
  
! 2005-02-17  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.
  
! 2005-02-17  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,
! 	java/applet/Applet.java,
! 	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/EventQueue.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,
! 	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/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/InterruptedIOException.java,
! 	java/io/LineNumberInputStream.java,
! 	java/io/LineNumberReader.java,
! 	java/io/ObjectInputStream.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/Class.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/net/NetworkInterface.java,
! 	java/nio/ByteBufferHelper.java,
! 	java/nio/ByteBufferImpl.java,
! 	java/nio/DirectByteBufferImpl.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/nio/channels/IllegalBlockingModeException.java,
! 	java/nio/charset/spi/CharsetProvider.java,
! 	java/security/AccessControlException.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/DecimalFormat.java,
! 	java/text/DecimalFormatSymbols.java,
! 	java/text/FieldPosition.java,
! 	java/text/Format.java,
! 	java/text/NumberFormat.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/Currency.java,
! 	java/util/Date.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/FileHandler.java,
! 	java/util/logging/Level.java,
! 	java/util/prefs/BackingStoreException.java,
! 	java/util/prefs/InvalidPreferencesFormatException.java,
! 	java/util/prefs/Preferences.java,
! 	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/ImageIO.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/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/sasl/Sasl.java,
! 	javax/security/sasl/SaslServerFactory.java,
! 	javax/swing/DefaultBoundedRangeModel.java,
! 	javax/swing/JComponent.java,
! 	javax/swing/JList.java,
! 	javax/swing/JProgressBar.java,
! 	javax/swing/JRadioButton.java,
! 	javax/swing/JTextArea.java,
! 	javax/swing/JTextField.java,
! 	javax/swing/JToggleButton.java,
! 	javax/swing/JTree.java,
! 	javax/swing/SpinnerListModel.java,
! 	javax/swing/event/EventListenerList.java,
! 	javax/swing/text/JTextComponent.java,
! 	javax/swing/text/StringContent.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,
! 	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, reworked import statements,
! 	removed CVS tags, changed the modifier order and fixed
! 	HTML usage in javadocs.
  
! 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  Mark Wielaard  <mark@klomp.org>
  
! 	* Makefile.am (ordinary_java_source_files): Add new files
! 	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 and
! 	gnu/java/security/pkcs/SignerInfo.java.
! 	* Makefile.in: Regenerated.
  
! 2005-02-16  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.
  
! 2005-02-16  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/jar/JarFile.java: Imports reworked.
  
! 2005-02-16  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.
  
! 2005-02-16  Casey Marshall  <csm@gnu.org>
  
! 	* java/util/jar/JarFile.java (verify): return if the jar is signed
! 	with an unsupported algorithm.
  
! 2005-02-16  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).
  
! 2005-02-16  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.
! 	* 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.
  
! 2005-02-16  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/gcj/runtime/SharedLibHelper.java (findHelper): Delete
! 	copied file on exit.
  
! 2005-02-15  Mark Wielaard  <mark@klomp.org>
  
! 	* java/awt/BasicStroke.java (hashCode): Check for null dash.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/peer/gtk/GtkArg.java,
! 	gnu/java/awt/peer/gtk/GtkArgList.java:
! 	Removed.
  
! 2005-02-15  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-15  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/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,
! 	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:
! 	Removed unused imports and expanded starred
! 	imports.
  
! 2005-02-15  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-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.
! 	* include/jawt.h: Likewise.
! 	* include/jawt_md.h: Likewise.
! 	* include/Makefile.am (tool_include__HEADERS): Add jawt.h and
! 	jawt_md.h files.
! 	* jni/classpath/classpath_jawt.h: Likewise.
! 	* jni/gtk-peer/gtk_jawt.c: Likewise.
! 	* Makefile.am: Build libjawt.so.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
! 	Merged file header with classpath CVS head.
! 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
! 	Merged code formatting with classpath CVS head.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c:
! 	Removed debug code.
! 	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector):
! 	Handle special JNI strings with 2 '\0' at the end.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
! 	Merged file header with classpath CVS head.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c:
! 	Merged code formatting with classpath CVS head.
  
! 2005-02-15  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-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* Makefile.am: Fix library build breakage.
! 	* Makefile.in: Regenerate.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTabbedPane.java
! 	(Page.setDisplayedMnemonicIndex): Handle empty menmonic.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/tree/DefaultMutableTreeNode.java:
! 	Reworked Javadocs all over.
! 	(getPathToRoot): Fixed direction of result array initialization.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
! 	 Fix includes for cairo 0.3.0 snappshot.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c:
! 	Merged file header from classpath CVS HEAD.
  
! 2005-02-15  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-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Container.javai (paramString):
! 	If layoutMgr is null just return result of super.paramString().
! 	* java/awt/Scrollbar.java: Reformatted.
! 	* java/awt/im/InputContext.java (static):
! 	Removed redundant initializations.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/ImageIcon.java,
! 	javax/swing/UIManager.java,
! 	javax/swing/text/EditorKit.java,
! 	javax/swing/text/Segment.java:
! 	More whitespace cleanups.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/EmbeddedWindow.java,
! 	gnu/java/awt/image/ImageDecoder.java,
! 	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
! 	java/awt/DefaultKeyboardFocusManager.java,
! 	java/awt/Frame.java,
! 	java/awt/image/RGBImageFilter.java,
! 	javax/swing/AbstractButton.java,
! 	javax/swing/ActionMap.java,
! 	javax/swing/ComponentInputMap.java,
! 	javax/swing/DefaultDesktopManager.java,
! 	javax/swing/ImageIcon.java,
! 	javax/swing/InputMap.java,
! 	javax/swing/JButton.java,
! 	javax/swing/JCheckBox.java,
! 	javax/swing/JCheckBoxMenuItem.java,
! 	javax/swing/JEditorPane.java,
! 	javax/swing/JMenu.java,
! 	javax/swing/JMenuItem.java,
! 	javax/swing/JOptionPane.java,
! 	javax/swing/JRootPane.java,
! 	javax/swing/JTable.java,
! 	javax/swing/MenuSelectionManager.java,
! 	javax/swing/RepaintManager.java,
! 	javax/swing/ScrollPaneLayout.java,
! 	javax/swing/SortingFocusTraversalPolicy.java,
! 	javax/swing/UIManager.java,
! 	javax/swing/ViewportLayout.java,
! 	javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java,
! 	javax/swing/plaf/basic/BasicInternalFrameUI.java,
! 	javax/swing/plaf/basic/BasicLabelUI.java,
! 	javax/swing/plaf/basic/BasicListUI.java,
! 	javax/swing/plaf/basic/BasicMenuItemUI.java,
! 	javax/swing/plaf/basic/BasicMenuUI.java,
! 	javax/swing/plaf/basic/BasicOptionPaneUI.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/BasicTextUI.java,
! 	javax/swing/table/TableColumnModel.java,
! 	javax/swing/text/AbstractDocument.java,
! 	javax/swing/text/EditorKit.java,
! 	javax/swing/text/Position.java,
! 	javax/swing/text/Segment.java,
! 	javax/swing/text/StyledEditorKit.java,
! 	javax/swing/text/ViewFactory.java:
! 	Cleanup whitespace differences to classpath CVS HEAD.
  
! 2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* 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):
! 	(gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerFontMetrics):
! 	(gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerTextMetrics):
! 	(metrics_cairo):
! 	(metrics_surface): Remove.
! 	(gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector):
! 	Pass and install font peer.
  
! 2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* Makefile.am: Create "split library" structure.
! 	* Makefile.in: Regenerate.
  
! 2005-02-15  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-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* 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):
! 	(getTextMetrics): New native methods.
! 	* gnu/java/awt/peer/gtk/GdkFontMetrics.java: Remove native parts.
! 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java: Likewise.
! 	* Makefile.am: Remove native entries for GdkFontMetrics, GdkGlyphVector.
! 	* Makefile.in: Regenerate.
  
! 2005-02-15  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-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/SwingUtilities.java
! 	(getFontMetrics): Removed.
  
! 2005-02-15  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-02-15  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-02-15  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-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/dnd/DropTarget.java (addDropTargetListener):
! 	Clarified comments.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JComponent.java (getComponentGraphics):
! 	Removed accidently commited code.
  
! 2005-02-15  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-02-15  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-02-15  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-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTextField.java
! 	(postActionEvent): Use text in field when actionCommand is null.
! 	(getActionCommand): Removed.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/AbstractSet.java: Removed.
! 	* Makefile.am: Removed javax/swing/AbstractSet.java.
! 	* Makefile.in: Regenerated.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Window.java
! 	(AccessibleWindow.getAccessibleStateSet): Fixed method name.
! 	* java/awt/dnd/DnDConstants.java
! 	(DnDConstants): New private constructor.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/DefaultCellRenderer.java: Removed.
! 	* Makefile.am: Removed javax/swing/DefaultCellRenderer.java.
! 	* Makefile.in: Regenerated.
  
! 2005-02-15  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-02-15  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-02-15  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-02-15  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-02-15  Graydon Hoare  <graydon@redhat.com>
! 	    Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/LayoutFocusTraversalPolicy.java,
! 	javax/swing/SortingFocusTraversalPolicy.java:
! 	New classes.
! 	* Makefile.am: Added new classes.
! 	* Makefike.in: Regenerated.
  
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/DebugGraphics.java: Mostly implemented.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/SwingUtilities.java
! 	(findFocusOwner): New method.
  
! 2005-02-15  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-02-15  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(int)): likewise
! 	(AccessibleAWTScrollBar.getMinimumAccessibleValue()): likewise
! 	(AccessibleAWTScrollBar.getMaximumAccessibleValue()): likewise
! 	(getAccessibleContext()): name of accessible class corrected
  
! 2005-02-15  Mark Wielaard  <mark@klomp.org>
  
! 	* java/awt/BasicStroke.java (hashCode): Implement.
! 	(equals): Document.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/print/PrinterJob.java
! 	(pageDialog): Throws java.awt.HeadlessException.
! 	(printDialog): Likewise.
  
! 2005-02-15  Mark Wielaard  <mark@klomp.org>
  
! 	* jni/gtk-peer/gtkpeer.h (gdk_env): Fix prototype.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTable.java
! 	(getValueAt): New method.
! 	* javax/swing/table/JTableHeader.java
! 	(columnAtPoint): New method.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTextField.java
! 	(actions): New field.
! 	(static): Initalize actions field.
! 	(getActions): New method.
  
! 2005-02-15  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(int)): likewise
! 	(AccessibleAWTCheckbox.getMinimumAccessibleValue()): likewise
! 	(AccessibleAWTCheckbox.getMaximumAccessibleValue()): likewise
! 	(AccessibleAWTCheckbox.getAccessibleRole()): likewise
! 	(AccessibleAWTCheckbox.getAccessibleStateSet()): implemented and
! 	documented
! 	(getAccessibleContext()): name of accessible class corrected
  
! 2005-02-15  Sven de Marothy  <sven@physto.se>
  
! 	* 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.
  
! 2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (env_union):
! 	Use union to avoid type-punning warning.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/DefaultListSelectionModel.java
! 	(clone): New method.
  
! 2005-02-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-02-15  Arnaud Vandyck  <avdyk@gnu.org>
  
! 	* javax/swing/text/StringContent.java: New file.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am: Added javax/swing/text/StringContent.java.
! 	* Makefile.in: Regenerated.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/ClasspathToolkit.java:
! 	Import statements reworked.
! 	(imageCache): Made it of type java.util.HashMap.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/imageio/stream/MemoryCacheImageInputStream.java:
! 	Reworked import statements.
  
! 2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.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_GtkButtonPeer.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_GtkEvents.c:
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c:
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c:
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c:
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c:
! 	* 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
! 	java_vm rather than old gdk_env variable.
  
! 2005-02-15 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-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* gnu/awt/xlib/XEventLoop.java: Add non-blocking event mode.
! 	* gnu/awt/xlib/XToolkit.java: Likewise.
! 	* gnu/gcj/xlib/XAnyEvent.java: Likewise.
! 	* 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):
! 	Adjust event loop to switch to java mode after 100ms.
  
! 2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* jni.cc (_Jv_JNI_RegisterNatives): Re-add sync, which was
! 	accidentally removed in last change.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
! 	gnu/java/awt/peer/gtk/GtkMainThread.java: Removed.
  
! 2005-02-15  Graydon Hoare  <graydon@redhat.com>
  
! 	* include/jni.h (_Jv_JNIEnv::bottom_locals): New field.
! 	* include/jvm.h (_Jv_FreeJNIEnv): Declare.
! 	* java/lang/natThread.cc (finalize_native): Call _Jv_FreeJNIEnv.
! 	* jni.cc: Reuse bottom frame between calls, avoid clearing
! 	frame when no local references are made.
  
! 2005-02-15  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-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/text/DefaultEditorKit.java
! 	(deinstall): Removed.
! 	(install): Likewise.
  
+ 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/UIDefaults.java (put): Handle value of null.
  
! 2005-02-15  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-02-15  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-02-15  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
! 	(nativeSetIconImageFromData): Re-add native implementation.
  
! 2005-02-15  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-02-15  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* libgcj.spec.in (lib): Add -l-javax-imageio.
  
! 2005-02-15  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-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.
! 	(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-02-15  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c (mouseWheel):
! 	Call XFlush.
! 	(keyPress): Likewise.
! 	(keyRelease): Likewise.
  
! 2005-02-15  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-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.
! 	* gnu/awt/xlib/XEventLoop.java: Fix to match thread model.
! 	* gnu/awt/xlib/XFramePeer.java: Likewise.
! 	* 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.
! 	* 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.
! 	* 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
! 	(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-02-15  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-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/text/AbstractDocument.java
! 	(documentFilter): New field.
! 	(getDocumentFilter): New method.
! 	(setDocumentFilter): Likewise.
! 	(dump): Likewise.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTree.java
! 	(DynamicUtilTreeNode.hasChildren): Clarify javadoc.
  
! 2005-02-15  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-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/ClasspathToolkit.java
! 	(createRobot): Throws java.awt.AWTException.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c:
! 	Added '__attribute__((unused))' to all unused method arguments.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/DefaultBoundedRangeModel.java
! 	(fireValueChanged): Fixed off-by-one error.
  
! 2005-02-15  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* Makefile.am (gtk_c_source_files): Add GdkRobotPeer.c.
! 	(gtk_awt_peer_sources): Add GdkScreenGraphicsDevice.java and
! 	GdkRobotPeer.java.
! 	(lib_gnu_java_awt_peer_gtk_la_CFLAGS): Add X flags.
! 	(lib_gnu_java_awt_peer_gtk_la_LDFLAGS): Add XTest flags.
! 	* gnu/awt/xlib/XToolkit.java (createRobot): New method.
! 	* 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.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: New file.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
! 	(awt_keycode_to_keysym): Make non-static.
! 	* jni/gtk-peer/gtkpeer.h (AWT_BUTTON1_MASK, AWT_BUTTON2_MASK,
! 	AWT_BUTTON3_MASK): Declare constants.
! 	(awt_keycode_to_keysym): Declare.
  
! 	* Makefile.am (AM_MAKEFLAGS): Set KEYS variable.
! 	* testsuite/libjava.mauve/mauve.exp (test_mauve): If KEYS exists
! 	and is non-empty pass its value to "make check".
! 	(test_mauve_sim): Likewise.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/imageio/IIOParam.java
! 	(setSourceBands): New method.
! 	(setSourceSubsampling): Likewise.
! 	* javax/imageio/ImageReadParam.java
! 	(setDestination): Likewise.
! 	(setDestinationBands): Likewise.
! 	(setSourceProgressivePasses): Likewise.
! 	* javax/imageio/metadata/IIOInvalidTreeException.java
! 	(serialVersionUID): New static field.
! 	* javax/imageio/metadata/IIOMetadataNode.java
! 	(IIOMetadataNode): Don't explicitely implement org.w3c.dom.Node.
! 	(parent): Dont initailize with default value explicitely.
! 	(Object): Likewise.
! 	(removeAttribute): Doesn't throws org.w3c.dom.DOMException.
! 	(removeAttributeNode): Likewise.
! 	(removeAttributeNS): Likewise.
! 	(setAttribute): Likewise.
! 	(setAttributeNode): Likewise.
! 	(setAttributeNodeNS): Likewise.
! 	(setAttributeNS): Likewise.
! 	(appendChild): Likewise.
! 	(getNodeValue): Likewise.
! 	(insertBefore): Likewise.
! 	(removeChild): Likewise.
! 	(replaceChild): Likewise.
! 	(setPrefix): Likewise.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/LookAndFeel.java
! 	(getDesktopPropertyValue): New method.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTree.java
! 	(hasChildren): New instance field.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JComponent.java
! 	(getToolTipText): New method.
! 	(getTitledBorderText): Likewise.
! 	(getAccessibleKeyBinding): Likewise.
! 	(getVerifyInputWhenFocusTarget): Likewise.
! 	(setVerifyInputWhenFocusTarget): Likewise.
! 	(verifyInputWhenFocusTarget): New instance field.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/DefaultListSelectionModel.java
! 	(fireValueChanged): New method.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/DefaultBoundedRangeModel.java:
! 	Fixed javadocs all over.
! 	(fireStateChanged): Simplified.
! 	* javax/swing/BoundedRangeModel.java:
! 	Reformatted.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JRootPane.java
! 	(setMenuBar): Added @deprecated tag.
! 	(getMenuBar): Likewise.
! 	* javax/swing/JTable.java
! 	(sizeColumnsToFit): Likewise.
  
! 2005-02-15  Paul Jenner  <psj.home@ntlworld.com>
  
! 	* javax/swing/ImageIcon.java (setImage): Implemented.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTable.java:
! 	Removed unused imports.
  
! 2005-02-15  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.	
  
! 2005-02-15  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.
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JFormattedTextField.java
! 	(getFocusLostBehavior): Fixed typo in method name.
! 	(setFocusLostBehavior): Likewise.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/TransferHandler.java:
! 	Reworked import statements.
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/Button.java,
! 	javax/swing/JApplet.java,
! 	javax/swing/JFormattedTextField.java,
! 	javax/swing/JWindow.java,
! 	javax/swing/JTree.java,
! 	javax/swing/plaf/basic/BasicEditorPaneUI.java,
! 	javax/swing/plaf/basic/BasicTextPaneUI.java,
! 	javax/swing/plaf/basic/BasicTreeUI.java:
! 	Reworked import statements.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* Makefile.am: Put javax.imageio into its own library and link it
! 	against lib-org-w3c-dom.la to fix bootstrapping.
! 	* Makefile.in: Regenerated.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/text/TextAction.java
! 	(getTextComponent): Simplified. Added Javadoc.
! 	(augmentList): Implemented. Added Javadoc.
! 	(getFocusedComponent): Added javadoc.
  
! 2005-02-15  Jerry Quinn  <jlquinn@optonline.net>
  
! 	* java/awt/Scrollbar.java (AccessibleAWTScrollbar,
! 	getAccessibleContext): Implement.
! 	* java/awt/ScrollPane.java (AccessibleAWTScrollPane,
! 	getAccessibleContext): Implement.
  
! 2005-02-15  Jerry Quinn  <jlquinn@optonline.net>
  
! 	* java/awt/Dialog.java (AccessibleAWTFrame, getAccessibleContext):
! 	Implement.
! 	* java/awt/Frame.java (AccessibleAWTFrame, getAccessibleContext):
! 	Implement.
! 	* java/awt/Window.java (getAccessibleContext): Fix comment.
! 	Remove extra import.
  
! 2005-02-15  Jerry Quinn  <jlquinn@optonline.net>
  
! 	* java/awt/Window.java (AccessibleAWTWindow): Implement.
! 	(isActive, isFocused, getAccessibleContext): Implement.
  
! 2005-02-15  Jerry Quinn  <jlquinn@optonline.net>
  
! 	* java/awt/MenuItem.java (getAccessibleContext): Implement.
! 	* java/awt/MenuComponent.java (accessibleContext): Make package
! 	visible.
! 	* java/awt/CheckboxMenuItem.java (getAccessibleContext,
! 	AccessibleAWTCheckboxMenuItem): Implement.
  
! 2005-02-15  Jerry Quinn  <jlquinn@optonline.net>
  
! 	* java/awt/List.java: Implement AccessibleAWTList,
! 	AccessibleAWTListChild.
  
! 2005-02-15  Jerry Quinn  <jlquinn@optonline.net>
  
! 	* java/awt/Choice.java: Add implements declaration for
! 	Accessible.
  
! 2005-02-15  Jerry Quinn  <jlquinn@optonline.net>
  
! 	* javax/imageio/metadata/IIOInvalidTreeException.java: Use Node
! 	instead of Object.
  
! 2005-02-15  Jerry Quinn  <jlquinn@optonline.net>
  
! 	* javax/imageio/metadata/IIOMetadataNode.java: Add Node to
! 	implemented interface list.
  
! 2005-02-15  Jerry Quinn  <jlquinn@optonline.net>
  
! 	* javax/imageio/metadata/IIOMetadataNode.java: Implement.
! 	* javax/imageio/metadata/IIOAttr.java: New class.
! 	* javax/imageio/metadata/IIONamedNodeMap.java: New class.
! 	* javax/imageio/metadata/IIONodeList.java: New class.
! 	* Makefile.am: Added new files.
! 	* Makefile.in: Regenerated.
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
! 	Reformatted.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: More reformatting.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Reformatted.
  
! 2005-02-15  Jeroen Frijters  <jeroen@frijters.net>
  
! 	* java/awt/EventDispatchThread.java,
! 	java/awt/Toolkit.java:
! 	Don't catch java.lang.ThreadDeath.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/text/PasswordView.java
! 	(drawEchoCharacter): Added javadoc.
! 	(drawSelectedText): Likewise.
! 	(drawUnselectedText): Likewise.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JRootPane.java
! 	(windowDecorationStyle): New field.
! 	(setMenuBar): New method.
! 	(getMenuBar): Likewise.
! 	(getWindowDecorationStyle): Likewise.
! 	(setWindowDecorationStyle): Likewise.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/DefaultListSelectionModel.java
! 	(leadAnchorNotificationEnabled): Made protected.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/InternalFrameFocusTraversalPolicy.java: New file.
! 	* Makefile.am: Added InternalFrameFocusTraversalPolicy.java.
! 	* Makefile.in: Regenerated.
  
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/plaf/metal/MetalTheme.java
! 	(getControlTextColor): Return getControlInfo().
! 	(getHighlightedTextColor): Return getControlTextColor().
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/imageio/event/package.html,
! 	javax/imageio/metadata/package.html: New files.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/image/MemoryImageSource.java: Reformatted.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/tree/TreeCellEditor.java: Refomatted.
  
! 2005-02-15  Jeroen Frijters  <jeroen@frijters.net>
  
! 	* java/awt/color/ICC_Profile.java
! 	(finalize): Removed pointless field assignments.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/plaf/basic/BasicEditorPaneUI.java: New file.
! 	* Makefile.am: Added javax/swing/plaf/basic/BasicEditorPaneUI.java.
! 	* Makefile.in: Regenerated.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/text/DefaultStyledDocument.java: New file.
! 	* Makefile.am: Added javax/swing/text/DefaultStyledDocument.java.
  	* Makefile.in: Regenerated.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JFileChooser.java
! 	(showDialog): Return CANCEL_OPTION for now.
! 	(showOpenDialog): Likewise.
! 	(showSaveDialog): Likewise.
  
! 2005-02-15  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/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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTextField.java
! 	(getPreferredSize): Re-implemented.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JLabel.java
! 	(setDisplayedMnemonic): Use only upper case characters.
! 	(setDisplayedMnemonicIndex): Handle index == -1 and fire
! 	PropertyChangeEvent after property got set to the new index.
  
! 2005-02-15  Robert Schuster <thebohemian@gmx.net>
  
! 	* javax/swing/JComboBox.java:
! 	(JComboBox): Removed selection of the
! 	first item in the model.
  
! 2005-02-15  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,
! 	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
! 	(getSelectedItemObjects): simplified
! 	(getItemCount): fixed dependency on DefaultComboBoxModel
! 	(getItemAt): fixed dependency on MutableComboBoxModel
! 	* 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
  
! 2005-02-15  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
! 	* Makefile.am: Added the new files.
! 	* Makefile.in: Regenerated.
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTable.java
! 	(addColumn): New method.
! 	(getColumnClass): Likewise.
! 	(getColumnName): Likewise.
  
! 2005-02-15  Paul Jenner  <psj.home@ntlworld.com>
  
! 	* javax/swing/TransferHandler.java
! 	(createTransferable): Made protected.
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JTable.java
! 	(getIntercellSpacing): Fixed typo in method name.
! 	(setIntercellSpacing): Likewise.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/text/JTextComponent.java
! 	(focusAccelerator): New variable.
! 	(getFocusAccelerator): New method.
! 	(setFocusAccelerator): Likewise.
  
! 2005-02-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.
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JPasswordField.java: Updated javadocs.
  
! 2005-02-15  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().
  
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/table/TableColumn.java: Added/fixed javadocs over all.
! 	(setHeaderValue): Simplified. Do nothing when old value == new value.
  
! 2005-02-15  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.
! 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (clearRect):
! 	Protect against null graphics structure.  Flush gdk event queue.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
! 
! 	* javax/imageio/ImageReader.java,
! 	javax/imageio/ImageTranscoder.java,
! 	javax/imageio/ImageWriter.java,
! 	javax/imageio/spi/ImageInputStreamSpi.java,
! 	javax/imageio/spi/ImageOutputStreamSpi.java,
! 	javax/imageio/spi/ServiceRegistry.java,
! 	javax/imageio/stream/ImageInputStream.java,
! 	javax/imageio/stream/ImageOutputStream.java: Updated.
! 	* javax/imageio/IIOException.java,
! 	javax/imageio/IIOImage.java,
! 	javax/imageio/IIOParam.java,
! 	javax/imageio/IIOParamController.java,
! 	javax/imageio/ImageIO.java,
! 	javax/imageio/ImageReadParam.java,
! 	javax/imageio/ImageTypeSpecifier.java,
! 	javax/imageio/ImageWriteParam.java,
! 	javax/imageio/spi/IIORegistry.java,
! 	javax/imageio/spi/ImageReaderSpi.java,
! 	javax/imageio/spi/ImageWriterSpi.java,
! 	javax/imageio/stream/FileCacheImageInputStream.java,
! 	javax/imageio/stream/FileCacheImageOutputStream.java,
! 	javax/imageio/stream/FileImageInputStream.java,
! 	javax/imageio/stream/FileImageOutputStream.java,
! 	javax/imageio/stream/ImageInputStreamImpl.java,
! 	javax/imageio/stream/ImageOutputStreamImpl.java,
! 	javax/imageio/stream/MemoryCacheImageInputStream.java,
! 	javax/imageio/stream/MemoryCacheImageOutputStream.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,
! 	javax/imageio/metadata/IIOMetadata.java,
! 	javax/imageio/metadata/IIOMetadataController.java,
! 	javax/imageio/metadata/IIOMetadataFormat.java,
! 	javax/imageio/metadata/IIOInvalidTreeException.java,
! 	javax/imageio/metadata/IIOMetadataFormatImpl.java,
! 	javax/imageio/metadata/IIOMetadataNode.java: New files.
! 	* Makefile.am (javax_source_files): Added new files
  	* Makefile.in: Regenerated.
  
! 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>
  
! 	* 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.
  
! 2005-02-15  David Gilbert <david.gilbert@object-refinery.com>
  
! 	* java/awt/Component.java,
! 	java/awt/geom/Rectangle2D.java:
! 	Javadoc fixes.
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/print/Book.java: Reformatted.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/awt/geom/Area.java
! 	(QuadSegment.curveArea): Remove unused variables.
! 	(CubicSegment.curveArea): Likewise.
  
! 2005-02-15  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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JLayeredPane.java: Reformatted.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/tree/DefaultMutableTreeNode.java:
! 	Completely Revised.
! 	* javax/swing/tree/MutableTreeNode.java:
! 	Reformatted.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JFormattedTextField.java
! 	(setDocument): Call setDocument of super class. Don't fire property
! 	change event.
  
! 2005-02-15  Sven de Marothy  <sven@physto.se>
  
! 	* 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.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* javax/swing/JList.java, javax/swing/JTree.java:
! 	Added much new methods and fixed much methods setting bound properties.
  
! 2005-02-16  Mark Wielaard  <mark@klomp.org>
  
! 	* Makefile.am (gnu_xml_source_files): Removed
! 	gnu/xml/dom/DomCDATA.java, gnu/xml/dom/DomEx.java,
! 	gnu/xml/dom/DomFragment.java, gnu/xml/dom/DomPI.java and
! 	gnu/xml/dom/ls/DomLSEx.java. Replaced by adding
! 	gnu/xml/dom/DomCDATASection.java, gnu/xml/dom/DomDOMException.java,
! 	gnu/xml/dom/DomDocumentFragment.java,
! 	gnu/xml/dom/DomProcessingInstruction.java and
! 	gnu/xml/dom/ls/DomLSException.java.
! 	* Makefile.in: Regenerated.
  
! 2005-02-16  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/xml/aelfred2/SAXDriver.java: Ensure that null is returned when
! 	attribute index is out of bounds.
  
! 2005-02-16  Chris Burdess  <dog@gnu.org>
  
! 	* gnu/xml/aelfred2/SAXDriver.java: Corrected implementation of
! 	isDeclared methods. Improved performance of isSpecified methods.
  
! 2005-02-16  Chris Burdess  <dog@gnu.org>
  
! 	Fixes bug libgcj/19864
! 	* 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-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/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):
! 	Iterate over the collection and invoke implies() on each
! 	element.
  
! 2005-02-16  Andrew Haley  <aph@redhat.com>
  
! 	* gnu/gcj/runtime/PersistentByteMap.java (name, values, fc): new
! 	fields.
! 	(PersistentByteMap): Set name
! 	Magic number changed to 0x67636a64 ("gcjd").
! 	(init): Force the map to be prime.
! 	(emptyPersistentByteMap): File name was a string, now a File.
! 	(addBytes): Share srings between entries.
! 	(stringTableSize): New method.
! 	(capacity): Scale by load factor.
! 	(force): New method.
! 	(getFile): New method.
! 	(close): New method.
! 	(putAll): New method.
! 	(ByteWrapper): New class.
! 	* gnu/gcj/tools/gcj_dbtool/Main.java (verbose): New field.
! 	(main): Guess the average string size as 32, not 64.
! 	Copy a database before modifying it, so that we can update a
! 	database in a running system.
! 	If a database isn't big enough, resize it.
! 	"-m": new option: merges databases.
! 	"-a": Create a new detabase if it doesn't exist.
! 	(usage): Correct, add new option.
! 	(addJar): Copy a database before modifying it.
! 	(resizeMap): New method.
  
! 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.
! 	(block_sigchld): Call JvFail rather than throwing exception if
! 	pthread_sigmask() fails.
  
! 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>
  
! 	* java/util/jar/Attributes.java (Attributes.Name): Add documentation
! 	to describe attributes without a constant field value in this class.
  
! 2005-02-15  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/jar/Attributes.java
! 	(CREATED_BY, JAVA_BEAN, MAGIC): Removed.
  
! 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  Mark Wielaard  <mark@klomp.org>
  
! 	* java/net/URLClassLoader.java (JarURLLoader.JarURLLoader): Don't look
! 	aside for "GCJLIBS" in directory where jarfiles are loaded.
! 	(JarURLLoader.getClass): Removed method.
! 	(JarURLLoader.toString): Removed method.
! 	(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.
  
! 2005-02-15  Richard Henderson  <rth@redhat.com>
  
! 	* Makefile.am (libgcj_la_SOURCES): Move all sources ...
! 	(libgcj0_convenience_la_SOURCES): ... here.
! 	(libgcj_la_LIBADD): Add libgcj0_convenience.la.
! 	(libgcj_la_DEPENDENCIES): Include libgcj_la_LIBADD.
! 	* Makefile.in: Regenerate.
  
! 2005-02-14  Thomas Fitzsimmons  <fitzsim@redhat.com>
  
! 	* jawt.c: New file.
! 	* include/jawt.h: Likewise.
! 	* include/jawt_md.h: Likewise.
! 	* include/Makefile.am (tool_include__HEADERS): Add jawt.h and
! 	jawt_md.h files.
! 	* include/Makefile.in: Regenerate.
! 	* jni/classpath/classpath_jawt.h: Likewise.
! 	* jni/gtk-peer/gtk_jawt.c: Likewise.
! 	* Makefile.am: Build libjawt.so.
! 	* Makefile.in: Regenerate.
  
! 2005-02-14  Tom Tromey  <tromey@redhat.com>
  
! 	* testsuite/libjava.lang/PR19921.java: Use correct class name.
  
! 2005-02-14  Tom Tromey  <tromey@redhat.com>
  
! 	* testsuite/libjava.lang/PR19921.out: Renamed from PR19929.out.
! 	* testsuite/libjava.lang/PR19921.java: Renamed from PR19929.java.
  
! 2005-02-14  Tom Tromey  <tromey@redhat.com>
  
! 	For PR java/19929:
! 	* testsuite/libjava.lang/PR19929.out: New file.
! 	* testsuite/libjava.lang/PR19929.java: New file.
  
! 2005-02-14  Anthony Green  <green@redhat.com>
  
! 	PR libgcj/18116
! 	* testsuite/libjava.jni/PR18116.c: New file.
! 	* testsuite/libjava.jni/PR18116.java: New file.
! 	* testsuite/libjava.jni/PR18116.out: New file.
  
! 2005-02-13  Anthony Green  <green@redhat.com>
  
! 	PR libgcj/18116
! 	* jni.cc (nathash_add): Don't strdup the method signature.
! 	(_Jv_JNI_RegisterNatives): Convert the slashes to dots in the
! 	method signature.
! 	Update copyright.
  
! 2005-02-12  Mark Wielaard  <mark@klomp.org>
  
! 	Fixes bug libgcj/8170
! 	* java/lang/ClassLoader.java (loadClass): Don't rewrap
! 	ClassNotFoundException.
! 	* gnu/java/lang/MainThread.java (run): Chain NoClassDefFoundError.
! 	* gnu/gcj/runtime/NameFinder.java (remove_interpreter): Removed.
! 	(remove_internal): New field superceding remove_interpreter.
! 	(sanitizeStack): Remove all no-package classes starting with "_Jv_".
! 	Remove no-class methods starting with "_Jv_". And Replace null
! 	class or method names with the empty string. Stop at either the
! 	MainThread or a real Thread run() method.
! 	(newElement): Made static.
! 	* java/net/URLClassLoader.java (findClass): Throw
! 	ClassNotFoundExceptions including urls, plus parent using toString().
! 	(thisString): New field.
! 	(toString): New method.
  
! 2005-02-10  Tom Tromey  <tromey@redhat.com>
  
! 	* external/sax/Makefile.in: Rebuilt.
! 	* external/sax/Makefile.am (all-local): Removed.
! 	(BUILT_SOURCES): New variable.
! 	(mostlyclean-local): No error if no classes to delete.
! 	* external/w3c_dom/Makefile.in: Rebuilt.
! 	* external/w3c_dom/Makefile.am (all-local): Removed.
! 	(BUILT_SOURCES): New variable.
! 	(mostlyclean-local): No error if no classes to delete.
  
! 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>
  
! 	* 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  Tom Tromey  <tromey@redhat.com>
  
! 	* java/util/zip/InflaterInputStream.java (markSupported):
! 	Override.
! 	(mark, reset): Likewise.
  
! 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  Tom Tromey  <tromey@redhat.com>
  
! 	* configure: Rebuilt.
! 	* configure.ac: Reduce number of calls to AC_CHECK_FUNCS and
! 	AC_CHECK_HEADERS.
  
! 2005-02-07  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natRuntime.cc (insertSystemProperties): Set
! 	sun.boot.class.path earlier.
  
! 2005-02-07  Tom Tromey  <tromey@redhat.com>
  
! 	* defineclass.cc (handleClassBegin): Use
! 	_Jv_RegisterInitiatingLoader.
! 	* java/lang/Class.h (_Jv_UnregisterInitiatingLoader): Declare.
! 	* java/lang/natVMClassLoader.cc (resolveClass): Don't register
! 	class.  Use _Jv_UnregisterInitiatingLoader.
! 	* java/lang/natClassLoader.cc (_Jv_UnregisterInitiatingLoader):
! 	New function.
  
! 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,
! 	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-07  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/19611:
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (src.zip): New target.
! 	(install-src.zip): Likewise.
! 	(sourcesdir): New variable.
  
! 2005-02-06  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-02-06  Graydon Hoare  <graydon@redhat.com>
  
! 	* gnu/java/awt/ClasspathToolkit.java
! 	(registerImageIOSpis): New method.
! 	* 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.
  
! 2004-02-06  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-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,
! 	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.
  
! 2005-02-02  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-02-02  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (classes.stamp): New target, broken out from
! 	libgcj.jar target.
! 	($(all_java_class_files)): Depend on it.
! 	(libgcj-@gcc_version@.jar): Likewise.
! 	(all-recursive): Likewise.
! 	(CLEANFILES): Include classes.stamp.
  
! 2005-02-02  Hans Boehm  <Hans.Boehm@hp.com>
  
! 	* link.cc: Include <stdio.h>
  
! 2005-02-02  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/19681:
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (ordinary_java_source_files): Added new class.
! 	* java/lang/natVMClassLoader.cc (getSystemClassLoaderInternal):
! 	Use system_instance, not instance.
! 	* gnu/gcj/runtime/SystemClassLoader.java: New file.
! 	* gnu/gcj/runtime/VMClassLoader.java (init): Don't search
! 	java.class.path.
! 	(system_instance): New field.
! 	(initialize): Initialize the system loader as well.
! 	(VMClassLoader): Default to LIB_CACHE.
  
! 2005-02-02  Tom Tromey  <tromey@redhat.com>
  
! 	* gnu/gcj/runtime/PersistentByteMap.java: Fixed typo.
! 	* prims.cc: Fixed comment.
  
! 2005-02-01  Tom Tromey  <tromey@redhat.com>
  
! 	* Makefile.in: Rebuilt.
! 	* Makefile.am (BOOTCLASSPATH): Added sax and w3c_dom.
! 	(.java.class): Use BOOTCLASSPATH.
  
! 2005-02-01  Tom Tromey  <tromey@redhat.com>
  
! 	* external/w3c_dom/Makefile.am: New file.
! 	* external/w3c_dom/Makefile.in: New file.
! 	* external/sax/Makefile.am: New file.
! 	* external/sax/Makefile.in: New file.
! 	* external/Makefile.in: New file.
! 	* external/Makefile.am: New file.
! 	* external/README: New file from Classpath.
! 	* configure, aclocal.m4, Makefile.in: Rebuilt.
! 	* configure.ac (AC_CONFIG_FILES): Create new Makefiles.
! 	* Makefile.am (SUBDIRS): Added external.
! 	(toolexeclib_LTLIBRARIES): Removed lib-org-xml-sax.la,
! 	lib-org-w3c-dom.la, lib-org-ietf-gss.la.
! 	(BOOTCLASSPATH): New variable.
! 	(AM_GCJFLAGS): Use it.
! 	(gnu_xml_source_files): New variable.
! 	(libgcj_la_SOURCES): Use it.
! 	(libgcj_la_LDADD): Include new convenience libraries.
! 	(lib_org_ietf_jgss_la_SOURCES): Removed.
! 	(lib_org_ietf_jgss_la_DEPENDENCIES): Likewise.
! 	(lib_org_ietf_jgss_la_LIBADD): Likewise.
! 	(lib_org_w3c_dom_la_SOURCES): Removed.
! 	(lib_org_w3c_dom_la_DEPENDENCIES): Likewise.
! 	(lib_org_w3c_dom_la_LIBADD): Likewise.
! 	(lib_org_xml_sax_la_SOURCES): Removed.
! 	(lib_org_xml_sax_la_DEPENDENCIES): Likewise.
! 	(lib_org_xml_sax_la_LIBADD): Likewise.
! 	(all_java_source_files): Updated.
! 	(property_files): Likewise.
! 	(libgcj-@gcc_version@.jar): Include classes from external/.
! 	(javax_source_files): Updated.
! 	(ordinary_java_source_files): Updated.
! 	* 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/datatype/package.html,
! 	javax/xml/namespace/NamespaceContext.java,
! 	javax/xml/namespace/QName.java, javax/xml/namespace/package.html,
! 	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/parsers/package.html,
! 	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/package.html,
! 	javax/xml/transform/dom/DOMLocator.java,
! 	javax/xml/transform/dom/DOMResult.java,
! 	javax/xml/transform/dom/DOMSource.java,
! 	javax/xml/transform/dom/package.html,
! 	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/sax/package.html,
! 	javax/xml/transform/stream/StreamResult.java,
! 	javax/xml/transform/stream/StreamSource.java,
! 	javax/xml/transform/stream/package.html,
! 	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/validation/package.html, javax/xml/xpath/XPath.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,
! 	javax/xml/xpath/XPathVariableResolver.java,
! 	javax/xml/xpath/package.html: New files, from GNU JAXP.
! 	* org/w3c/dom/Attr.java, org/w3c/dom/CDATASection.java,
! 	org/w3c/dom/CharacterData.java, org/w3c/dom/Comment.java,
! 	org/w3c/dom/DOMException.java, org/w3c/dom/DOMImplementation.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/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/ranges/DocumentRange.java,
! 	org/w3c/dom/ranges/Range.java,
! 	org/w3c/dom/ranges/RangeException.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/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,
! 	org/xml/sax/ext/DeclHandler.java,
! 	org/xml/sax/ext/LexicalHandler.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: Moved to external/.
! 	* external/sax/README,
! 	external/sax/org/xml/sax/AttributeList.java,
! 	external/sax/org/xml/sax/Attributes.java,
! 	external/sax/org/xml/sax/ContentHandler.java,
! 	external/sax/org/xml/sax/DTDHandler.java,
! 	external/sax/org/xml/sax/DocumentHandler.java,
! 	external/sax/org/xml/sax/EntityResolver.java,
! 	external/sax/org/xml/sax/ErrorHandler.java,
! 	external/sax/org/xml/sax/HandlerBase.java,
! 	external/sax/org/xml/sax/InputSource.java,
! 	external/sax/org/xml/sax/Locator.java,
! 	external/sax/org/xml/sax/Parser.java,
! 	external/sax/org/xml/sax/SAXException.java,
! 	external/sax/org/xml/sax/SAXNotRecognizedException.java,
! 	external/sax/org/xml/sax/SAXNotSupportedException.java,
! 	external/sax/org/xml/sax/SAXParseException.java,
! 	external/sax/org/xml/sax/XMLFilter.java,
! 	external/sax/org/xml/sax/XMLReader.java,
! 	external/sax/org/xml/sax/package.html,
! 	external/sax/org/xml/sax/ext/Attributes2.java,
! 	external/sax/org/xml/sax/ext/Attributes2Impl.java,
! 	external/sax/org/xml/sax/ext/DeclHandler.java,
! 	external/sax/org/xml/sax/ext/DefaultHandler2.java,
! 	external/sax/org/xml/sax/ext/EntityResolver2.java,
! 	external/sax/org/xml/sax/ext/LexicalHandler.java,
! 	external/sax/org/xml/sax/ext/Locator2.java,
! 	external/sax/org/xml/sax/ext/Locator2Impl.java,
! 	external/sax/org/xml/sax/ext/package.html,
! 	external/sax/org/xml/sax/helpers/AttributeListImpl.java,
! 	external/sax/org/xml/sax/helpers/AttributesImpl.java,
! 	external/sax/org/xml/sax/helpers/DefaultHandler.java,
! 	external/sax/org/xml/sax/helpers/LocatorImpl.java,
! 	external/sax/org/xml/sax/helpers/NamespaceSupport.java,
! 	external/sax/org/xml/sax/helpers/NewInstance.java,
! 	external/sax/org/xml/sax/helpers/ParserAdapter.java,
! 	external/sax/org/xml/sax/helpers/ParserFactory.java,
! 	external/sax/org/xml/sax/helpers/XMLFilterImpl.java,
! 	external/sax/org/xml/sax/helpers/XMLReaderAdapter.java,
! 	external/sax/org/xml/sax/helpers/XMLReaderFactory.java,
! 	external/sax/org/xml/sax/helpers/package.html,
! 	external/w3c_dom/COPYRIGHT.html, external/w3c_dom/README,
! 	external/w3c_dom/org/w3c/dom/Attr.java,
! 	external/w3c_dom/org/w3c/dom/CDATASection.java,
! 	external/w3c_dom/org/w3c/dom/CharacterData.java,
! 	external/w3c_dom/org/w3c/dom/Comment.java,
! 	external/w3c_dom/org/w3c/dom/DOMConfiguration.java,
! 	external/w3c_dom/org/w3c/dom/DOMError.java,
! 	external/w3c_dom/org/w3c/dom/DOMErrorHandler.java,
! 	external/w3c_dom/org/w3c/dom/DOMException.java,
! 	external/w3c_dom/org/w3c/dom/DOMImplementation.java,
! 	external/w3c_dom/org/w3c/dom/DOMImplementationList.java,
! 	external/w3c_dom/org/w3c/dom/DOMImplementationSource.java,
! 	external/w3c_dom/org/w3c/dom/DOMLocator.java,
! 	external/w3c_dom/org/w3c/dom/DOMStringList.java,
! 	external/w3c_dom/org/w3c/dom/Document.java,
! 	external/w3c_dom/org/w3c/dom/DocumentFragment.java,
! 	external/w3c_dom/org/w3c/dom/DocumentType.java,
! 	external/w3c_dom/org/w3c/dom/Element.java,
! 	external/w3c_dom/org/w3c/dom/Entity.java,
! 	external/w3c_dom/org/w3c/dom/EntityReference.java,
! 	external/w3c_dom/org/w3c/dom/NameList.java,
! 	external/w3c_dom/org/w3c/dom/NamedNodeMap.java,
! 	external/w3c_dom/org/w3c/dom/Node.java,
! 	external/w3c_dom/org/w3c/dom/NodeList.java,
! 	external/w3c_dom/org/w3c/dom/Notation.java,
! 	external/w3c_dom/org/w3c/dom/ProcessingInstruction.java,
! 	external/w3c_dom/org/w3c/dom/Text.java,
! 	external/w3c_dom/org/w3c/dom/TypeInfo.java,
! 	external/w3c_dom/org/w3c/dom/UserDataHandler.java,
! 	external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java,
! 	external/w3c_dom/org/w3c/dom/css/CSS2Properties.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSImportRule.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSPageRule.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSRule.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSRuleList.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSValue.java,
! 	external/w3c_dom/org/w3c/dom/css/CSSValueList.java,
! 	external/w3c_dom/org/w3c/dom/css/Counter.java,
! 	external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java,
! 	external/w3c_dom/org/w3c/dom/css/DocumentCSS.java,
! 	external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java,
! 	external/w3c_dom/org/w3c/dom/css/RGBColor.java,
! 	external/w3c_dom/org/w3c/dom/css/Rect.java,
! 	external/w3c_dom/org/w3c/dom/css/ViewCSS.java,
! 	external/w3c_dom/org/w3c/dom/events/DocumentEvent.java,
! 	external/w3c_dom/org/w3c/dom/events/Event.java,
! 	external/w3c_dom/org/w3c/dom/events/EventException.java,
! 	external/w3c_dom/org/w3c/dom/events/EventListener.java,
! 	external/w3c_dom/org/w3c/dom/events/EventTarget.java,
! 	external/w3c_dom/org/w3c/dom/events/MouseEvent.java,
! 	external/w3c_dom/org/w3c/dom/events/MutationEvent.java,
! 	external/w3c_dom/org/w3c/dom/events/UIEvent.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java,
! 	external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java,
! 	external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSException.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSInput.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSOutput.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSParser.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSSerializer.java,
! 	external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java,
! 	external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java,
! 	external/w3c_dom/org/w3c/dom/ranges/Range.java,
! 	external/w3c_dom/org/w3c/dom/ranges/RangeException.java,
! 	external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java,
! 	external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java,
! 	external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java,
! 	external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java,
! 	external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java,
! 	external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java,
! 	external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java,
! 	external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java,
! 	external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java,
! 	external/w3c_dom/org/w3c/dom/views/AbstractView.java,
! 	external/w3c_dom/org/w3c/dom/views/DocumentView.java,
! 	external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java,
! 	external/w3c_dom/org/w3c/dom/xpath/XPathException.java,
! 	external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java,
! 	external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java,
! 	external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java,
! 	external/w3c_dom/org/w3c/dom/xpath/XPathResult.java: New files
! 	from Classpath.
  
! 2005-01-31  Anthony Green  <green@redhat.com>
  
! 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc (getOption):
! 	Support IP_MULTICAST_LOOP.
! 	(setOption): Support IP_MULTICAST_LOOP.
  
! 	* gnu/java/net/natPlainSocketImplPosix.cc (setOption): Add
! 	SO_REUSEADDR support.
! 	(getOption): Support SO_REUSEADDR.
  
! 2004-01-28  Jeroen Frijters  <jeroen@frijters.net>
  
! 	PR libgcj/19649
! 	* 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.
  
! 2005-01-26  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* testsuite/libjava.jacks/jacks.xfail: Update for PR java/19070,
! 	remove other passing tests and add new XFAILs.
  
! 2005-01-24  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/Class.h (next): Updated documentation.  Renamed to
! 	'next_or_version'.
! 	* java/lang/natClassLoader.cc (_Jv_RegisterClasses): Use
! 	_Jv_CheckABIVersion.
! 	(_Jv_RegisterClasses_Counted): Likewise.
! 	(_Jv_RegisterClassHookDefault): Fix starting condition of
! 	duplicate-checking loop.
! 	* include/jvm.h (GCJ_VERSION): New define.
! 	(GCJ_BINARYCOMPAT_ADDITION): Likewise.
! 	(_Jv_CheckABIVersion): New function.
  
! 2005-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	* Makefile.am (libgij_la_LIBADD): Add -L$(here)/.libs.
! 	(libgij_la_LDFLAGS): Add.
! 	* Makefile.in: Rebuilt.
  
! 2005-01-24  Roger Sayle  <roger@eyesopen.com>
  
! 	PR java/19295
! 	* testsuite/libjava.compile/PR19295.java: New test case.
  
! 2005-01-19  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/VMCompiler.java (compileClass): Ignore UnknownError.
! 	* gnu/gcj/runtime/natSharedLibLoader.cc (finalize): Only dlclose
! 	if 'handler' is valid.
  
! 2005-01-17  Tom Tromey  <tromey@redhat.com>
  
! 	* java/text/MessageFormat.java (scanString): Changed how quoting
! 	is handled.
! 	(scanFormatElement): Likewise.
  
! 2004-12-07  Mark Wielaard  <mark@klomp.org>
  
! 	* java/text/MessageFormat.java (scanFormat): Chain thrown exception.
  
! 2005-01-15  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-14  Robin Green  <greenrd@greenrd.org>
  
! 	* java/io/File.java (toURI): Generate a URI which we understand.
! 
! 2005-01-13  Graydon Hoare  <graydon@redhat.com>
! 
! 	* include/jni.h (_Jv_JNIEnv::bottom_locals): New field.
! 	* include/jvm.h (_Jv_FreeJNIEnv): Declare.
! 	* java/lang/natThread.cc (finalize_native): Call _Jv_FreeJNIEnv.
! 	* jni.cc: Reuse bottom frame between calls, avoid clearing
! 	frame when no local references are made.
! 
! 2005-01-13  Michael Koch  <konqueror@gmx.de>
! 
! 	PR libgcj/17784
! 	* java/lang/Thread.java
! 	(Thread): Call checkAccess().
! 	(stop): Fixed argument name to match javadoc.
! 	* java/lang/natThread.cc
! 	(interrupt): Call checkAccess().
! 	(stop): Likewise.
! 
! 2005-01-11  Michael Koch  <konqueror@gmx.de>
! 
! 	PR libgcj/13972
! 	* java/net/URL.java (URL): Handle specs like
! 	"/redir?http://domain2.com/index.html" which start with a slash.
! 
! 2005-01-11  Michael Koch  <konqueror@gmx.de>
! 
! 	PR libgcj/14012, PR libgcj/14013, PR libgcj/15157, PR libgcj/15509
! 	* gnu/java/net/BASE64.java,
! 	gnu/java/net/EmptyX509TrustManager.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: Removed.
! 	* gnu/java/net/protocol/http/Handler.java,
! 	javax/net/ssl/HttpsURLConnection.java: Updated.
! 	* Makefile.am: Added new files and remove old ones.
  	* Makefile.in: Regenerated.
  
! 2005-01-11  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/18840:
! 	* java/io/BufferedInputStream.java (read): Repeatedly read to
! 	fill buffer.
! 	(refill): Change test to see if buffer must be grown.
  
! 2005-01-10  Tom Tromey  <tromey@redhat.com>
  
! 	* mauve-libgcj: Exclude some swing tests.
  
! 2005-01-10  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/12016, PR libgcj/18405, PR libgcj/17738:
! 	* java/lang/Package.java (getPackages): Use VMClassLoader when
! 	appropriate.
! 	(getPackage): Likewise.
! 	* prims.cc (_Jv_CreateJavaVM): Call
! 	_Jv_RegisterBootstrapPackages.
! 	* include/jvm.h (_Jv_RegisterBootstrapPackages): Declare.
! 	* java/lang/VMClassLoader.java (getPackage): Rewrote.
! 	(getPackages): Likewise.
! 	(definedPackages): New field.
! 	(definePackageForNative): New method.
! 	* java/lang/Class.h (_Jv_FindClassInCache): Updated.
! 	* java/lang/natVMClassLoader.cc (loadClass): Updated.
! 	* defineclass.cc (handleClassBegin): Use
! 	ClassLoader.findLoadedClass.
! 	* java/lang/natClassLoader.cc (_Jv_RegisterInitiatingLoader):
! 	Rewrote.
! 	(struct _Jv_LoaderInfo): Removed.
! 	(initiated_classes): Likewise.
! 	(_Jv_UnregisterClass): Don't use initiated_classes.
! 	(_Jv_FindClassInCache): Likewise.  Removed 'loader' argument.
! 	(_Jv_FindClass): Register classes found during boostrap.
! 	(BOOTSTRAP_CLASS_LIST_SIZE): New define.
! 	(bootstrap_class_list): New global.
! 	(bootstrap_index): Likewise.
! 	(_Jv_RegisterBootstrapPackages): New function.
! 	* gnu/gcj/runtime/natVMClassLoader.cc (findClass): Call
! 	definePackageForNative.
! 	(findClass): Updated.
! 	* gnu/gcj/runtime/VMClassLoader.java (definePackageForNative):
! 	New method.
  
! 2005-01-10  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/18868:
! 	* include/jvm.h (_Jv_Linker::find_field): Declare.
! 	(_Jv_Linker::find_field_helper): Likewise.
! 	* link.cc (find_field_helper): New method.
! 	(find_field): Likewise.
! 	(resolve_pool_entry): Use it.  Throw NoSuchFieldError when field
! 	not found.
! 	(link_symbol_table): Use find_field.
  
! 2005-01-10  Michael Koch  <konqueror@gmx.de>
  
! 	PR libgcj/18014
! 	* java/util/Locale.java (Locale): Don't uppercase variant.
! 	(getISOCountries): Fixed typo in javadoc.
  
! 2005-01-10  Michael Koch  <konqueror@gmx.de>
  
! 	* java/util/SimpleTimeZone.java (checkRule):
! 	Throw IllegalArgumentException on invalid month values.
! 	* java/util/TimeZone.java (setID):
! 	Throw NullPointerException if needed.
  
! 2005-01-10  Andrew John Hughes  <gnu_andrew@member.fsf.org>
  
! 	* java/util/SimpleTimeZone.java (getOffset):
! 	offset end date with daylight savings
  
! 2005-01-10  Ranjit Mathew  <rmathew@hotmail.com>
  
! 	* testsuite/libjava.compile/PR19277.java: New file for PR java/19277.
! 	* testsuite/libjava.compile/PR19277.xfail: Likewise.
  
! 2005-01-09  Michael Koch  <konqueror@gmx.de>
  
! 	PR libgcj/17069
! 	* java/net/InetAddress.java (getLocalHost):
! 	Throw UnknownHostException if local hostname cannot be determined.
  
! 2005-01-06  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/ClassLoader.java (findClass): Fixed documentation.
  
! 2005-01-07  Michael Koch  <konqueror@gmx.de>
  
! 	PR libgcj/18115
! 	* java/nio/Buffer.java (address): New field.
! 	* java/nio/DirectByteBufferImpl.java (address): Removed.
! 	* java/nio/MappedByteBufferImpl.java (address): Likewise.
! 	* java/nio/CharViewBufferImpl.java (CharViewBufferImpl):
! 	Explicitly 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.
! 	* jni.cc (_Jv_JNI_GetDirectBufferAddress): Don't assume buffer is a
! 	DirectByteBufferImpl object.
! 	(_Jv_JNI_GetDirectBufferCapacity): Likewise.
! 	* testsuite/libjava.jni/directbuffer.c,
! 	testsuite/libjava.jni/directbuffer.java,
! 	testsuite/libjava.jni/directbuffer.out,
! 	testsuite/libjava.jni/bytebuffer.c,
! 	testsuite/libjava.jni/bytebuffer.java,
! 	testsuite/libjava.jni/bytebuffer.out: New files.
  
! 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.
! 	* java/util/zip/DeflaterOutputStream.java (deflate): Don't
! 	deflate at all if we need input.
  
! 2005-01-05  Tom Tromey  <tromey@redhat.com>
  
! 	PR libgcj/15719:
! 	* interpret.cc (run) <insn_dcmpl, insn_dcmpg>: Set tmpval
! 	correctly.
  
! 2005-01-05  Tom Tromey  <tromey@redhat.com>
  
! 	* java/lang/natRuntime.cc (insertSystemProperties): Set
! 	java.ext.dirs earlier.
  
! 2005-01-05  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* java/lang/natObject.cc (_Jv_ObjectCheckMonitor): Initialize the
! 	sync_info element of the object if needed.
  
! 2005-01-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
  
! 	* testsuite/libjava.lang/Process_4.java (Process_4): Expect only
! 	a non-zero exit status from 'false'.
  
! 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.
diff -Nrcpad gcc-3.4.3/libjava/ChangeLog-2002 gcc-4.0.0/libjava/ChangeLog-2002
*** gcc-3.4.3/libjava/ChangeLog-2002	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/ChangeLog-2002	Sat Jan 17 08:40:40 2004
***************
*** 0 ****
--- 1,6484 ----
+ 2002-12-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/7416:
+ 	* javax/naming/InitialContext.java (init): 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-31  Tom Tromey  <tromey@redhat.com>
+             Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Fix for PR libgcj/8997:
+ 	* java/lang/natObject.cc (spin): Use _Jv_platform_usleep.
+ 	Include platform.h.
+ 	* include/posix.h (_Jv_platform_usleep): New function.
+ 	* include/win32.h (_Jv_platform_usleep): New function.
+ 
+ 2002-12-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gcj/javaprims.h: Updated.
+ 	* scripts/classes.pl (scan): Removed stray semicolon.
+ 
+ 2002-12-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URLStreamHandler.java (toExternalForm): Ignore port
+ 	if zero or smaller.
+ 
+ 2002-12-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/Properties (formatForOutput): Don't fall through to
+ 	default case after escaping character.
+ 
+ 2002-12-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/StringBuffer.java (getChars): Remove wrong dstOffset check
+ 	against count.
+ 
+ 2002-12-27  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* boehm.cc: Remove stray semicolon.
+ 	* interpret.cc: Likewise.
+ 	* prims.cc: Likewise.
+ 	* verify.cc (_Jv_BytecodeVerifier::verify_fail): Move definition
+ 	earlier to ensure default arguments are processed.
+ 	* gcj/array.h (JArray): Add forward declaration.
+ 	(elements): Likewise.
+ 	* gcj/javaprim.h: Remove stray semicolons.
+ 	* include/bohm-gc.h: Likewise.
+ 	* include/jni.h: Likewise.
+ 	* include/jvm.h: Likewise.
+ 	* java/lang/Class.h (_Jv_GetArrayClass): Declare _Jv_NewArrayClass.
+ 	
+ 2002-12-23  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* exception.cc (PERSONALITY_FUNCTION): Clear least-significant-bit
+ 	of catch_type.
+ 	* java/lang/natClass.cc (initializeClass): Link vtable, otable,
+ 	idt tables after initializing superclass.
+ 	* java/lang/natClassLoader.cc (uaddr): New typedef.
+ 	(_Jv_PrepareCompiledClass): Resolve superclass, interfaces
+ 	if they are constant pool indicies.  Don't link vtable, otable yet.
+ 
+ 2002-12-21  Anthony Green  <green@redhat.com>
+ 
+ 	* Makefile.am: Move org.xml.sax and org.w3c.dom into their own
+ 	libraries.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-12-19  Anthony Green  <green@redhat.com>
+ 
+ 	* Makefile.am (ordinary_java_source_files): Add
+ 	org/xml/sax/helpers/NewInstance.java.
+ 	* Makefile.in: Rebuilt.
+ 	* org/xml/sax/package.html, org/xml/sax/ext/package.html,
+ 	org/xml/sax/helpers/package.html: New files.
+ 	* org/xml/sax/*: Upgrade to SAX 2.0.1 release from
+ 	http://www.saxproject.org.
+ 
+ 2002-12-19  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/util/natResourceBundle.cc: Include
+ 	ArrayIndexOutOfBoundsException.h.
+ 	(getCallingClassLoader): Don't put upper bound on stack search.
+ 	Catch ArrayIndexOutOfBoundsException.
+ 
+ 2002-12-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libtool-version: Increased `current'.
+ 
+ 2002-12-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc (defineClass0): Removed erroneous
+ 	comment.
+ 	* java/lang/ClassLoader.java (defineClass): Use chained
+ 	exception when rethrowing.
+ 	* defineclass.cc (handleClassBegin): Mark class as interpreted.
+ 	* java/lang/reflect/Modifier.java (INVISIBLE, INTERPRETED): New
+ 	constants.
+ 	* resolve.cc (_Jv_PrepareMissingMethods): New function.
+ 	(_Jv_PrepareClass): Use it.
+ 	* include/java-interp.h (_Jv_IsInterpretedClass): Rewrote.
+ 	(_Jv_InterpClass): _Jv_PrepareMissingMethods now friend.
+ 	* java/lang/Class.h (Class::getModifiers): Mask with ALL_FLAGS.
+ 	(Class): _Jv_PrepareMissingMethods now friend.
+ 	* java/lang/natClassLoader.cc (defineClass0): Use JvSynchronize.
+ 	Record `NULL' for system class loader.
+ 	(_Jv_RegisterInitiatingLoader): Use JvSynchronize.  Special case
+ 	system class loader.
+ 	(_Jv_FindClassInCache): Likewise.
+ 	(_Jv_UnregisterClass): Use JvSynchronize.  Free old loader info.
+ 	(_Jv_FindClass): Special case system class loader.
+ 	* java/lang/natClass.cc (_Jv_abstractMethodError): New function.
+ 	(_Jv_SetVTableEntries): Put _Jv_abstractMethodError into empty
+ 	vtable slots.
+ 	(_Jv_LayoutVTableMethods): Don't generate vtable slot for a method
+ 	in a final class.
+ 	(_getDeclaredMethod): Don't return synthetic methods.
+ 	(getDeclaredMethods): Likewise.
+ 	(_getMethod): Likewise.
+ 	(_getMethods): Likewise.
+ 
+ 2002-12-18  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  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/ClassLoader.java (resolveClass0): Transform
+ 	ClassNotFoundException to NoClassDefFoundError. Transform all other
+ 	throwables to LinkageError.
+ 
+ 2002-12-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (findLoadedClass): Now synchronized.
+ 
+ 	* java/lang/ClassLoader.java (loadedClasses): New field.
+ 	(defineClass): Fixed indentation.  Put new class in
+ 	loadedClasses.
+ 	(findLoadedClass): Implement here.
+ 	* java/lang/natClassLoader.cc (findLoadedClass): Removed.
+ 
+ 2002-12-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_source_files): Added natVMClassLoader.cc.
+ 	* gnu/gcj/runtime/natVMClassLoader.cc: New file.
+ 	(gnu::gcj::runtime::VMClassLoader::findClass): Moved here.
+ 	* java/lang/natClassLoader.cc
+ 	(gnu::gcj::runtime::VMClassLoader::findClass): Removed.
+ 
+ 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-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/win32.h: Fixed typo in "DISABLE_JAVA_NET".
+ 	From Laurent Bardet <l.bardet@magic.fr>.
+ 
+ 2002-12-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/win32.h (_Jv_platform_solib_prefix): New define.
+ 	(_Jv_platform_solib_suffix): Likewise.
+ 	* include/posix.h (_Jv_platform_solib_prefix): New define.
+ 	(_Jv_platform_solib_suffix): Likewise.
+ 	* java/lang/natRuntime.cc: Include StackTrace.h.
+ 	(_load): Use findLibrary and new platform defines.
+ 	(nativeGetLibname): Use new platform defines.
+ 
+ 	* java/util/natResourceBundle.cc (getCallingClassLoader): Assume
+ 	`t' won't be null.
+ 
+ 2002-12-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/gcj/protocol/jar/Connection.java (getJarFile): download and
+ 	cache remote jar files.
+ 	* gnu/gcj/runtime/VMClassLoader.java: Don't construct jar URL, only
+ 	add File.separator to URL when it is a directory.
+ 	* java/lang/ClassLoader.java: Add Classpath javadoc.
+ 	(parent): final.
+ 	(getParent): Add (disabled) security check.
+ 	(findLibrary): New default method.
+ 	* java/net/JarURLConnection.java (getManifest): Implement.
+ 	(getInputStream): Only create InputStream when entry exists.
+ 	(getHeaders): Only use jarFileURLConnection or JarEntry to set length
+ 	when they exist.
+ 	* java/net/URLClassLoader.java: New/Rewritten version from Classpath.
+ 
+ 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-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/InetAddress.java (toString): Use hostname when not null,
+ 	don't do an explicit reverse getHostName() lookup.
+ 	* java/net/Socket.java (setSocketImplFactory): When fac == null throw
+ 	NullPointerException.
+ 
+ 2002-12-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/java-interp.h (class _Jv_InterpMethod): Added
+ 	JV_MARKOBJ_DECL.
+ 	* boehm.cc (_Jv_MarkObj): Consolidated interpreter code.  Also
+ 	mark `prepared' field of interpreted method.
+ 	* interpret.cc (compile): Use _Jv_AllocBytes.
+ 
+ 2002-12-05  Andrew Haley  <aph@redhat.com>
+ 
+ 	* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Throw
+ 	#ifdef (HAVE_BACKTRACE) around the whole function body.
+ 
+ 2002-12-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.h (_Jv_SetVTableEntries): Updated declaration.
+ 	* resolve.cc: Don't include AbstractMethodError.h.
+ 	(_Jv_abstractMethodError): Removed.
+ 	* defineclass.cc (handleMethodsBegin): Initialize method index to
+ 	-1.
+ 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Don't set
+ 	method index for "new" final method.
+ 	(_Jv_SetVTableEntries): Compare index against -1 instead of using
+ 	isVirtualMethod.  Added `flags' argument.
+ 	(_Jv_MakeVTable): Throw exception for abstract method in concrete
+ 	class.
+ 
+ 2002-12-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/SocketPermission.java (hashCode): Rewrote.
+ 
+ 2002-12-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_source_files): Added natVMSecurityManager,
+ 	natResourceBundle.
+ 	* java/util/ResourceBundle.java (Security): Removed.
+ 	(getCallingClassLoader): Now native.
+ 	* java/util/natResourceBundle.cc: New file.
+ 	* java/lang/natVMSecurityManager.cc: New file.
+ 	* java/lang/VMSecurityManager.java (getClassContext): Now native.
+ 
+ 2002-12-03  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-12-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Character.java (forDigit): Formatting fix.
+ 
+ 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-03  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Call
+ 	_Jv_PushClass.
+ 	(_Jv_InitNewClassFields): Set protectionDomain and chain = NULL.
+ 	(_Jv_PopClass): New.
+ 	(_Jv_PushClass): New.
+ 	* java/lang/natClass.cc (forName (jstring)): Use a StackTrace to
+ 	discover the ClassLoader of our caller.
+ 	(_Jv_CheckArrayStore): Don't check that a class is assignment
+ 	compatible with Object.
+ 	* java/lang/natVMTHrowable.cc: Delete.
+ 	* gnu/gcj/runtime/StackTrace.java: New, partly copied from
+ 	java.lang.VMThrowable.
+ 	(StackTrace(), StackTrace(int)): New constructors.
+ 	(classAt, methodAt, update, methodAtAddress): New methods.
+ 	(map): New field.
+ 	* java/lang/VMThrowable.java: Use StackTrace instead of
+ 	natVMTHrowable.
+ 	* java/lang/Class.h (getClassLoaderInternal): New.
+ 	(class Class): Be friendly with _Jv_PopClass and _Jv_PushClass.
+ 	Be friendly with gnu::gcj::runtime::StackTrace.
+ 	(Object.chain): New field.
+ 	* include/java-interp.h (class _Jv_InterpMethod): Be friendly with
+ 	gnu::gcj::runtime::StackTrace.
+ 	* gnu/gcj/runtime/natStackTrace.cc: New file.
+ 	* gnu/gcj/runtime/MethodRef.java: New file.
+ 	* prims.cc (_Jv_NewObjectArray): Use getClassLoaderInternal()
+ 	instead of getClassLoader().
+ 	* verify.cc (class _Jv_BytecodeVerifier): Likewise.
+ 	java::lang::VMThrowable.
+ 	* Makefile.am (core_java_source_files): Add MethodRef.java,
+ 	StackTrace.java.
+ 	(nat_source_files): Remove natVMThrowable.cc; add natStackTrace.cc.
+ 	* Makefile.in: Rebuild.
+ 
+ 2002-12-02  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* configure.host [sh-linux* | sh[34]*-linux*]: Don't set
+ 	CHECKREFSPEC and EXCEPTIONSPEC. Set can_unwind_signal to
+ 	yes also for sh-linux* and sh[34]*-linux*.
+ 	* configure.in: Add sh-linux* and sh[34]*-linux* cases and
+ 	set SIGNAL_HANDLER to use DWARF2 exception for them.
+ 	* configure: Regenerate.
+ 
+ 2002-12-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc: Added `name' argument.
+ 	* include/jni.h (struct JNINativeInterface) [DefineClass]: Added
+ 	`const char *' argument.
+ 	(class _Jv_JNIEnv) [DefineClass]: Likewise.
+ 
+ 2002-12-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Bug compatibility, for PR libgcj/8738:
+ 	* 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-12-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/SecurityManager.java: Remerge comments, indenting and
+ 	checkXXX methods with Classpath.
+ 
+ 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>
+ 
+ 	For PR libgcj/8759:
+ 	* java/beans/Introspector.java (flushCaches): New method.
+ 	(flushFromCaches): Likewise.
+ 
+ 2002-11-29  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/DatagramChannel.java
+ 	(open): Added exception documentation.
+ 	(write): Added exception documentation.
+ 	(connect): Added exception documentation.
+ 	(disconnect): Added exception documentation.
+ 	(isConnected): Added exception documentation.
+ 	(read): Added exception documentation.
+ 	(receive): Added exception documentation.
+ 	(send): Added exception documentation.
+ 	(validOps): 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-11-29  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl:
+ 	(fd): New member variable to store file descriptor of socket.
+ 	* gnu/java/nio/SelectionKeyImpl.java:
+ 	(ops): Removed.
+ 	(readyOps): New member variable.
+ 	(interestOps): New member variable.
+ 	(readyOps): Implemented.
+ 	(readyOps): New method to set member variable readyOps.
+ 	(interestOps): Replaced ops by interestOps.
+ 	* gnu/java/nio/SelectorImpl.java:
+ 	(SelectorImpl): Initialize key sets.
+ 	(select): Call select with -1 instead of Long.MAX_VALUE).
+ 	(java_do_select): Make it a native method.
+ 	(getFDsAsArray): New helper method.
+ 	(select): Remove canceled keys, give only interested file discriptors
+ 	to java_do_select, set ready ops.
+ 	(add): No need to initialize keys set here.
+ 	(add_selected): No need to initialize selected set here.
+ 	(deregisterCanceledKeys): New helper method.
+ 	(register): Set interest ops, set attachments, added handling of datagram
+ 	channels.
+ 	* gnu/java/nio/ServerSocketChannelImpl:
+ 	(SocketAccept): Renamed from NioSocketAccept.
+ 	(implConfigureBlocking): Implemented.
+ 	(accept): Use SocketAccept instead of NioSocketAccept.
+ 	* gnu/java/nio/SocketChannelImpl:
+ 	Reactivate native methods.
+ 
+ 2002-11-29  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/natByteBufferImpl.cc,
+ 	gnu/java/nio/natCharBufferImpl.cc,
+ 	gnu/java/nio/natDoubleBufferImpl.cc,
+ 	gnu/java/nio/natFloatBufferImpl.cc,
+ 	gnu/java/nio/natIntBufferImpl.cc,
+ 	gnu/java/nio/natLongBufferImpl.cc,
+ 	gnu/java/nio/natSelectorImpl.cc,
+ 	gnu/java/nio/natServerSocketChannelImpl.cc,
+ 	gnu/java/nio/natShortBufferImpl.cc,
+ 	gnu/java/nio/natSocketChannelImpl.cc:
+ 	New files that implement native functionalities.
+ 
+ 2002-11-29  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java
+ 	(ByteBufferImpl): Moved position() after limit.
+ 	(nio_*): Use native implementation.
+ 	* gnu/java/nio/CharBufferImpl.java:
+ 	Reformated.
+ 	(endian): New member variable string endianess of buffer.
+ 	(CharBufferImpl): Moved position() after limit.
+ 	(nio_*): Use native implementation.
+ 	(subSequence): Implemented.
+ 	* gnu/java/nio/DoubleBufferImpl.java
+ 	(DoubleBufferImpl): Moved position() after limit.
+ 	(nio_*): Use native implementation.
+ 	* gnu/java/nio/FloatBufferImpl.java
+ 	Reformated.
+ 	(FloatBufferImpl): Moved position() after limit.
+ 	(nio_*): Use native implementation.
+ 	* gnu/java/nio/IntBufferImpl.java
+ 	Added needed imports, Reformated.
+ 	(IntBufferImpl): Moved position() after limit.
+ 	(nio_*): Use native implementation.
+ 	* gnu/java/nio/LongBufferImpl.java
+ 	Reformated.
+ 	(LongBufferImpl): Moved position() after limit.
+ 	(nio_*): Use native implementation.
+ 	* gnu/java/nio/ShortBufferImpl.java
+ 	Reformated.
+ 	(ShortBufferImpl): Moved position() after limit.
+ 	(nio_*): Use native implementation.
+ 
+ 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-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (pop_init_ref): New method.
+ 	(verify_instructions_0) [op_iaload, op_laload, op_faload,
+ 	op_daload, op_aaload, op_baload, op_caload, op_saload, op_iastore,
+ 	op_lastore, op_fastore, op_dastore, op_aastore, op_bastore,
+ 	op_castore, op_sastore, op_areturn, op_arraylength, op_checkcast,
+ 	op_instanceof, op_monitorenter, op_monitorexit]: Use it.
+ 	(verify_instructions_0) [op_invokevirtual, op_invokespecial,
+ 	op_invokestatic, op_invokeinterface]:  Use pop_init_ref.  Don't
+ 	let `this' argument be uninitialized.  Don't let `null' be passed
+ 	as `this' to construtor.
+ 
+ 2002-11-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/transaction/HeuristicCommitException.java: Classpath merge.
+ 	* javax/transaction/HeuristicMixedException.java: Likewise.
+ 	* javax/transaction/HeuristicRollbackException.java: Likewise.
+ 	* javax/transaction/InvalidTransactionException.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/TransactionRequiredException.java: Likewise.
+ 	* javax/transaction/TransactionRolledbackException.java: Likewise.
+ 	* javax/transaction/UserTransaction.java: Likewise.
+ 	* javax/transaction/xa/XAException.java: Likewise.
+ 	* javax/transaction/xa/XAResource.java: Likewise.
+ 	* javax/transaction/xa/Xid.java: Likewise.
+ 
+ 2002-11-26  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc (socklen_t): Don't
+ 	define.
+ 	* java/net/natPlainSocketImpl.cc (socklen_t): Don't define.
+ 	* include/posix.h (socklen_t): Define if not already defined.
+ 
+ 2002-11-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (type::compatible): Backed out broken change.
+ 
+ 	* verify.cc (type::compatible): Check initialization status
+ 	first.
+ 	* interpret.cc (run) [insn_invokespecial, invokespecial_resolved]:
+ 	Don't use NULLCHECK.
+ 
+ 2002-11-23  H.J. Lu <hjl@gnu.org>
+ 
+ 	* acinclude.m4 (AC_COMPILE_CHECK_SIZEOF): Removed.
+ 	Include ../config/accross.m4.
+ 	* aclocal.m4; Rebuild.
+ 	* configure: Likewise.
+ 
+ 2002-11-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/naming/AuthenticationException.java: Update copyright header.
+ 	* 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.
+ 
+ 	* javax/naming/spi/NamingManager.java (ofb): Package private.
+ 
+ 2002-11-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/URL.java: Merge with Classpath (partly).
+ 	* java/net/URLStreamHandler: Merge with Classpath.
+ 
+ 2002-11-22  Michael Koch <konqueror@gmx.de>
+ 
+ 	* include/posix.h:
+ 	(_Jv_platform_on_close): Moved out of #ifndef DISBALE_JAVA_NET.
+ 	* include/win32.h:
+ 	(_Jv_platform_on_close): Moved out of #ifndef DISBALE_JAVA_NET.
+ 	(backtrace): Moved out of #ifndef DISBALE_JAVA_NET.
+ 
+ 2002-11-21  Michael Koch <konqueror@gmx.de>
+ 
+ 	* include/posix.h: I put too much into the #ifndef DISABLE_JAVA_NET.
+ 	Only the new network functions should be in it.
+ 
+ 2002-11-21  Michael Koch <konqueror@gmx.de>
+ 
+ 	* include/posix.h: Moved new functions into a #ifndef DISABLE_JAVA_NET
+ 	* include/win32.h: Moved new functions into a #ifndef DISABLE_JAVA_NET
+ 
+ 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.
+ 	* Makefile.am (ordinary_java_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-11-21  Michael Koch <konqueror@gmx.de>
+ 
+ 	* include/posix.h
+ 	(_Jv_socket): New method.
+ 	(_Jv_connect): New method.
+ 	(_Jv_close): New method.
+ 	(_Jv_platform_close_on_exec): Prefixed system function with "::".
+ 	(_Jv_bind): New method.
+ 	(_Jv_listen): New method.
+ 	(_Jv_write): New method.
+ 	(_Jv_read): New method.
+ 	* include/win32.h
+ 	(_Jv_socket): New method.
+ 	(_Jv_connect): New method.
+ 	(_Jv_close): New method.
+ 	(_Jv_bind): New method.
+ 	(_Jv_listen): New method.
+ 	(_Jv_write): New method.
+ 	(_Jv_read): New method.
+ 	* java/net/natNetworkInterface.cc:
+ 	Include platform.h, removed inclusion of socket.h
+ 	(getRealNetworkInterfaces): Replaced ::socket() by _Jv_socket() and
+ 	::close() by _Jv_close().
+ 	* java/net/natPlainDatagramSocketImpl.cc:
+ 	Removed include of socket.h, definition of NATIVE_CLOSE and _Jv_bind,
+ 	added some new lines to make code more readable.
+ 	(create): Replaced ::socket() by _Jv_socket().
+ 	(close): Replaced NATIVE_CLOSE() by _Jv_close().
+ 	* java/net/natPlainSocketImpl.cc:
+ 	Removed definition of NATIVE_CLOSE, _Jv_bind, Jv_connect and _Jv_accept,
+ 	removed include of socket.h, removed some windows defines
+ 	(now in include/win32.h).
+ 	(create): Replaced ::socket() by _Jv_socket().
+ 	(close): Replaced NATIVE_CLOSE() by _Jv_close().
+ 	(write): Replaced ::read by _Jv_write().
+ 	(read): Replaced ::read by _Jv_read().
+ 
+ 2002-11-20  Michael Koch <konqueror@gmx.de>
+ 
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added java/nio/channels/FileChannel.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-11-20  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/io/FileInputStream.java
+ 	(getChannel): New method.
+ 	* java/io/FileOutputStream.java
+ 	(getChannel): New method.
+ 	* java/net/ServerSocket.java
+ 	(bind): Removed duplicate code and called another bind method instead.
+ 	* java/nio/channels/SelectionKey.java
+ 	(isValid): Removed wrong exception documentation.
+ 	* 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-20  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* configure: Regenerated with new libtool.m4.
+ 
+ 2002-11-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ref/natReference.cc (add_to_hash): Look at `copy', not
+ 	`referent'.
+ 	(finalize_referred_to_object): Don't modify `referent' or `copy'
+ 	fields.
+ 	(add_to_hash): Correctly set `n->next' when updating list.
+ 	* java/lang/ref/Reference.java (enqueue): Return false if already
+ 	enqueued.
+ 
+ 2002-11-19  Ranjit Mathew <rmathew@hotmail.com>
+ 
+ 	* include/jni.h: Add missing JNICALL and JNIEXPORT attributes
+ 	to function and function pointer declarations in accordance with
+ 	Sun's JDKs. Define JNIIMPEXP to either JNIEXPORT or JNIIMPORT
+ 	based on whether __GCJ_JNI_IMPL__ has been defined or not.
+ 	* jni.cc: Add missing JNICALL and JNIEXPORT attributes to
+ 	JNI function definitions.
+ 
+ 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>
+ 
+ 	* java/net/PlainSocketImpl.java: Fix imports.
+ 
+ 2002-11-18  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/SelectionKey.java
+ 	(isValid): Added exception documentation.
+ 	* java/nio/channels/Selector.java
+ 	(open): Declare "throws IOException".
+ 
+ 2002-11-18  Jesse Rosenstock <jmr@ugcs.caltech.edu>
+ 
+ 	* java/nio/charset/Charset.java
+ 	(<clinit>): New method.
+ 	(encode): Synchronize use of cached encoder object.
+ 	(decode): Synchronize use of cached encoder object.
+ 
+ 2002-11-18  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java,
+ 	gnu/java/nio/CharBufferImpl.java,
+ 	gnu/java/nio/DatagramChannelImpl.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/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/ShortBufferImpl.java,
+ 	gnu/java/nio/SocketChannelImpl.java,
+ 	java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/ShortBuffer.java,
+ 	java/nio/channels/FileChannel.java: New files.
+ 
+ 2002-11-18  Michael Koch <konqueror@gmx.de>
+ 
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added java/nio/ReadOnlyBufferException.java and
+ 	java/nio/channels/ClosedSelectorException.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-11-18  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/net/PlainSocketImpl.java: Reworked imports.
+ 	* java/net/ServerSocket.java
+ 	(ServerSocket): Create socket.
+ 	* java/net/SocketAddress.java: Documentation added.
+ 	* java/net/natPlainSocketImpl.cc: Reindented.
+ 	* java/nio/ReadOnlyBufferException.java: New file
+ 	* java/nio/channels/ClosedChannelException.java: Documentation added.
+ 	* java/nio/channels/ClosedSelectorException.java: New file.
+ 
+ 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 GNU Classpath.
+ 
+ 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.
+ 
+ 2002-11-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR libgcj/8593:
+ 	* java/util/zip/GZIPInputStream.java (read): Check file size.
+ 	Look in inflater for remaining input bytes.
+ 	(read4): Added buf and offset arguments.
+ 
+ 2002-11-12  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/applet/AppletContext.java: Fix typo and remove redundant
+ 	modifiers.
+ 
+ 2002-11-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natRuntime.cc (insertSystemProperties): Set
+ 	gnu.classpath.home.
+ 
+ 2002-11-13  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java
+ 	(allocate): New method.
+ 	(wrap): New method.
+ 	(put): New method.
+ 	(get): New method.
+ 
+ 2002-11-13  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/AlreadyConnectedException.java:
+ 	Removed unneeded import.
+ 	(AlreadyConnectedException): Documentation added.
+ 	* java/nio/channels/Pipe.java
+ 	(SinkChannel.SinkChannel): Documentation added.
+ 	(SinkChannel.validOps): New method.
+ 	(SourceChannel.SourceChannel): Documentation added.
+ 	(SourceChannel.validOps): New method.
+ 	(Pipe): Documentation added.
+ 	(open): Documentation added.
+ 	(SinkChannel.channel): Documentation added.
+ 	(SourceChannel.channel): Documentation added.
+ 	* java/nio/channel/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.
+ 	* jaba/nio/channels/SelectionKey.java
+ 	(SelectionKey): Documentation added.
+ 	(attach): Documentation added.
+ 	(attachment): Documentation added.
+ 	(isAcceptable): Documentation added.
+ 	(isConnetable): Documentation added.
+ 	(isReadable): Documentation added.
+ 	(isWritable): Documentation added.
+ 	(cancel): Documentation added.
+ 	(channel): Documentation added.
+ 	(interestOps): Documentation added.
+ 	(isValid): Documentation added.
+ 	(readyOps): Documentation added.
+ 	(selector): Documentation added.
+ 	* jaba/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
+ 	(AbstractInterruptibleChannel): Documentation added.
+ 	(opened): Default to true;
+ 	(begin): Documentation added.
+ 	(close): Set opened to false, documentation added.
+ 	(isOpen): Documentation added.
+ 	* java/nio/channels/spi/AbstractSelectionKey.java
+ 	(AbstractSelectionKey): Documentation added.
+ 	(cancel): Documentation added.
+ 	(isValid): Documentation added.
+ 	* java/nio/channels/spi/AbstractSelector.java
+ 	(AbstractSelector): Documentation added.
+ 	(begin): Documentation added.
+ 	(close): Documentation added.
+ 	(isOpen): Documentation added.
+ 	(deregister): Documentation added.
+ 	(end): Documentation added.
+ 	(provider): Documentation added.
+ 	(implCloseSelector): Documentation added.
+ 	(register): 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-12  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java: Implemented.
+ 	* java/nio/CharBuffer.java: New file.
+ 	* java/nio/InvalidMarkException.java: New file.
+ 	* java/nio/channels/DatagramChannel.java: Implemented.
+ 	* java/nio/channels/ServerSocketChannel.java: Implemented.
+ 	* java/nio/channels/SocketChannel.java: Implemented.
+ 	* java/nio/channels/spi/AbstractChannel.java: Removed.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java:
+ 	Implemented.
+ 	* java/nio/charset/Charset.java:
+ 	Merge from Classpath.
+ 	* java/nio/charset/CharsetDecoder.java: New file.
+ 	* java/nio/charset/CharsetEncoder.java: New file.
+ 	* java/nio/charset/CoderResult.java: New file.
+ 	* Makefile.am (ordinary_java_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-11-11  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	* 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: New files.
+ 
+ 2002-11-11  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/charset/CharacterCodingException.java:
+ 	This class must be public.
+ 	* java/nio/charset/CoderMalfunctionError.java:
+ 	This class must be public.
+ 	* 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.
+ 
+ 2002-11-11  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/nio/BufferOverflowException.java,
+ 	java/nio/BufferUnderflowException.java: New file.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 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.
+ 
+ 	* 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.
+ 
+ 	* java/io/natFileDescriptorWin32.cc (read): Handle case where
+ 	count is 0.
+ 	* java/io/natFileDescriptorPosix.cc (read): Handle case where
+ 	count is 0.
+ 
+ 	* java/io/Externalizable.java, java/io/FilePermission.java,
+ 	java/io/ObjectStreamConstants.java, java/io/Serializable.java,
+ 	java/io/SerializablePermission.java, java/text/Format.java,
+ 	java/util/AbstractMap.java, java/util/HashMap.java,
+ 	java/util/LinkedHashMap.java, javax/naming/BinaryRefAddr.java: New
+ 	versions from Classpath.
+ 
+ 2002-11-10  Anthony Green  <green@redhat.com>
+ 
+ 	* java/util/jar/Attributes.java (Name): Fix name check.
+ 
+ 2002-11-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/natClass.cc (initializeClass): Throw NoClassDefFoundError
+ 	with getName() as message.
+ 	(_Jv_CheckArrayStore): Throw ArrayStoreException with object and array
+ 	type as message.
+ 
+ 	* java/lang/natVMThrowable.cc: Don't declare parameter t, it is
+ 	unused.
+ 
+ 2002-11-08  Ranjit Mathew <rmathew@hotmail.com>
+ 
+ 	* include/jni.h (JNIIMPORT, JNIEXPORT, JNICALL): Linker defines
+ 	for Win32. JNICALL has been defined to __stdcall to be compatible
+ 	with Sun's JDKs.
+ 
+ 2002-11-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/GridLayout.java (setColumns): Check newCols, not cols.
+ 	(setRows): Check newRows, not rows.
+ 
+ 	* jni.cc (_Jv_GetJNIEnvNewFrame): Set env->ex in all cases.
+ 
+ 2002-11-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/applet/Applet.java, java/applet/AppletContext.java,
+ 	java/applet/AppletStub.java, java/applet/AudioClip.java,
+ 	java/awt/CardLayout.java,
+ 	java/awt/ContainerOrderFocusTraversalPolicy.java,
+ 	java/awt/Cursor.java, java/awt/Event.java, java/awt/Frame.java,
+ 	java/awt/GridBagConstraints.java, java/awt/GridBagLayout.java,
+ 	java/awt/GridLayout.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/datatransfer/DataFlavor.java,
+ 	java/awt/dnd/DragSourceContext.java, java/awt/dnd/DropTarget.java,
+ 	java/awt/dnd/DropTargetContext.java, java/awt/event/KeyEvent.java:
+ 	New versions from Classpath.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added ICC_ProfileGray and
+ 	ICC_ProfileRGB.
+ 
+ 	* java/awt/ScrollPane.java (ScrollPane): Fixed test for valid
+ 	display policy.
+ 
+ 	* 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-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Merge Orp RMI patches from Wu Gansha <gansha.wu@intel.com>
+ 	* 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.
+ 	(getLocBytes): 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.
+ 
+ 2002-11-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/reflect/natField.cc (getBoolean): Use getType().
+ 	(getByte): Likewise.
+ 	(getShort): Likewise.
+ 	(getInt): Likewise.
+ 	(getLong): Likewise.
+ 	(getFloat): Likewise.
+ 	(getDouble): Likewise.
+ 	(get): Likewise.
+ 	(setChar): Likewise.
+ 	(setByte): Likewise.
+ 	(setShort): Likewise.
+ 	(setInt): Likewise.
+ 	(setLong): Likewise.
+ 	(setFloat): Likewise.
+ 	(setDouble): Likewise.
+ 
+ 2002-11-07  Michael Koch <konqueror@gmx.de>
+ 
+ 	* java/awt/Choice.java,
+ 	java/awt/Container.java,
+ 	java/awt/GridBagLayout.java:
+ 	Fixed documentation.
+ 	* java/awt/peer/ContainerPeer.java:
+ 	Reindented.
+ 
+ 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.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.  For PR libgcj/8481.
+ 	* java/util/Random.java (nextInt(int)): Only use 31 bits.
+ 
+ 2002-11-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc (array_from_valist): Assume that jlong won't be
+ 	promoted.
+ 
+ 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-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (loadClass): Call loadClass on
+ 	VMClassLoader, not findClass.
+ 
+ 2002-11-03  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* resolve.cc (METHOD_NOT_THERE, METHOD_INACCESSIBLE): Remove.
+ 	(_Jv_ResolvePoolEntry): Use _Jv_Method.index, not
+ 	_Jv_DetermineVTableIndex, to determine vtable offset.
+ 	(_Jv_DetermineVTableIndex): Remove.
+ 	(_Jv_PrepareClass): Don't layout vtable.  Use _Jv_MakeVTable instead.
+ 
+ 	* java/lang/Class.h (friend int _Jv_DetermineVTableIndex): Remove.
+ 
+ 2002-11-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/nio/channels/AlreadyConnectedException.java: Extend
+ 	IllegalStateException, per spec.
+ 
+ 2002-10-31  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/lang/Double.java (valueOf): Return new Double(parseDouble(s)).
+ 
+ 2002-10-31  Wu Gansha <gansha.wu@intel.com>:
+ 
+ 	* java/util/ArrayList.java (readObject, writeObject): Only read/write
+ 	size items.
+ 
+ 2002-10-31  Wu Gansha <gansha.wu@intel.com>:
+ 
+ 	* java/io/DataInputStream.java (convertFromUTF): Give StringBuffer an
+ 	initial estimated size to avoid enlarge buffer frequently.
+ 
+ 2002-10-31  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-31  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-31  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-11-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.h: Move JV_STATE_ERROR before JV_STATE_DONE.
+ 	* java/lang/natClass.cc (initializeClass): Don't return just
+ 	because self==thread.
+ 
+ 	For PR java/8415:
+ 	* java/lang/reflect/natMethod.cc (getType): Use _Jv_FindClass.
+ 	* prims.cc (_Jv_FindClassFromSignature): Indentation fix.
+ 
+ 2002-11-02  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* Makefile.am (AM_MAKEFLAGS): Don't pass JC1FLAGS, CC and CXX, do
+ 	pass GCJFLAGS.
+ 	(FLAGS_TO_PASS): Define.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-11-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteOrder.java: New file.
+ 	* java/nio/channels/DatagramChannel.java:
+ 	(DatagramChannel): New constructor.
+ 	* java/nio/channels/Pipe.java: New file.
+ 	* java/nio/channels/SelectableChannel.java: New file.
+ 	* java/nio/channels/SelectionKey.java: New file.
+ 	* java/nio/channels/Selector.java: New file.
+ 	* java/nio/channels/ServerSocketChannel.java
+ 	(ServerSocketChannel): New constructor.
+ 	* java/nio/channels/SocketChannel.java
+ 	(SocketChannel): New constructor.
+ 	* java/nio/channels/Pipe.java: New file.
+ 	* java/nio/channels/spi/AbstractChannel.java: New file.
+ 	* java/nio/channels/spi/AbstractInterruptibleChannel.java: New file.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java:
+ 	License added
+ 	(AbstractSelectableChannel): New stubbed method.
+ 	* java/nio/channels/spi/AbstractSelectionKey.java: New file.
+ 	* java/nio/channels/spi/AbstractSelector.java: New file.
+ 	* java/nio/channels/spi/SelectorProvider.java: New file.
+ 	* java/nio/charset/Charset.java: New file.
+ 	* java/nio/charset/CoderMalfunctionError.java: New file.
+ 	* java/nio/charset/CodingErrorAction.java: New file.
+ 	* java/nio/charset/spi/CharsetProvider.java
+ 	(charsetForName): Uncommented.
+ 	* Makefile.am (java_native_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-11-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java:
+ 	(isAnyLocalAddress): Implemented.
+ 	(isLoopbackAddress): Implemented, comment added.
+ 	(isLinkLocalAddress): Implemented, documentation added.
+ 	(isSiteLocalAddress): Implemented, documentation added.
+ 	(isMCGlobal): Implemented, documentation added.
+ 	(isMCNodeLocal): Implemented, documentation added.
+ 	(isMCLinkLocal): Implemented, documentation added.
+ 	(isMCSiteLocal): Implemented, documentation added.
+ 	(isMCOrgLocal): Implemented, documentation added.
+ 	(getHostName): Documentation added.
+ 	(getCanonicalHostName): Implemented, documentation added.
+ 	(getAddress): Documentation added.
+ 	(hashCode): Documentation added.
+ 	(equals): Documentation added.
+ 	(toString): Fixed implementation.
+ 	(getByAddress): Use Inet4Address and Inet6Address.
+ 	(lookup): New linewrap.
+ 	(getByName): SecurityManager check added, support Inet4Address and
+ 	Inet6address, comments added.
+ 	(getAllByName): SecurityManager check added, comments added.
+ 	* java/net/Inet6Address.java:
+ 	(Inet6Address): Initialize parent class with addr instead of null.
+ 	* java/net/URL.java
+ 	(equals): Documentation added.
+ 	(getFile): Documentation added.
+ 	(hashCode): Documentation added.
+ 	* java/net/natInetAddress.cc:
+ 	(aton): Fix IPv6 support.
+ 	* java/net/natPlainDatagramSocketImpl.cc:
+ 	(peek): Throw PortUnreachableException when suitable.
+ 	(peekData): Throw PortUnreachableException when suitable.
+ 	(send): Throw PortUnreachableException when suitable.
+ 	(receive): Throw PortUnreachableException when suitable.
+ 
+ 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-31  Mark Anderson  <mark@panonet.net>
+ 
+ 	* java/awt/GridBagLayout.java (setConstraints): New stubbed method
+ 	added
+ 
+ 2002-10-25  Krister Walfridsson  <cato@df.lth.se>
+ 
+ 	* configure.in: Disable hash sync when not using threads.
+ 	* configure: Regenerated.
+ 
+ 2002-10-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natRuntime.cc (_Jv_SetDLLSearchPath): New function.
+ 	(_Jv_FindSymbolInExecutable): Removed argument name.
+ 	(insertSystemProperties): Call _Jv_SetDLLSearchPath if
+ 	java.library.path is set.
+ 
+ 	* gij.cc (help): Document --showversion.
+ 	(version): Don't exit.
+ 	(main): Handle --showversion.  Exit if --version given.
+ 
+ 2002-10-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc (_Jv_JNI_AllocObject): Removed old FIXME comment.
+ 	(array_from_valist): Correctly handle promotion for jint, jlong,
+ 	jfloat, and jdouble.
+ 
+ 2002-10-23  Ranjit Mathew <rmathew@hotmail.com>
+ 
+ 	* java/io/natFileWin32.cc (attr): Use FindFirstFile( ) instead of
+ 	GetFileAttributesEx( ) to find file length and modification times,
+ 	as the latter is not present on Windows 95.
+ 
+ 2002-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java
+ 	(URL): Activate SecurityManager checks.
+ 	(equals): Use URLStreamHandler implementation instead of doing it
+ 	alone. This allows special protocol stream handlers to change default
+ 	behaviour.
+ 	(hashCode): Use URLStreamHandler implementation instead of doing it
+ 	alone. This allows special protocol stream handlers to change default
+ 	behaviour.
+ 	* java/net/URLStreamHandler.java
+ 	(equals): Implemented default URL equality check.
+ 	(hostsEqual): Implemented default URL equality check.
+ 	(hashCode): Implemented default URL hashCode algorithm.
+ 	* java/net/natPlainDatagramSocketImpl.cc:
+ 	No lines longer then 80 characters.
+ 
+ 2002-10-20  Adam Megacz <adam@xwt.org>
+ 
+ 	* aclocal.m4 (CHECK_FOR_BROKEN_MINGW_LD): added
+ 	* configure.in: enabled hash sync on Win32
+ 	* include/win32-threads.h (_Jv_ThreadId_t): added.
+ 	* java/lang/natObject.cc (_Jv_MonitorEnter, _Jv_MonitorExit,
+ 	heavy_lock_obj_finalization_proc, wait, notify, notifyAll):
+ 	removed some posix-isms, use Thread::sleep() instead of usleep,
+ 	added code to clear bottom three bits if platform has a broken
+ 	linker.
+ 	* include/win32-threads.h (_Jv_ThreadId_t): added.
+ 
+ 2002-10-19  Ranjit Mathew <rmathew@hotmail.com>
+ 
+ 	* java/lang/natRuntime.cc (insertSystemProperties): Added GCJ
+ 	runtime property "gnu.gcj.progname" containing the name used to
+ 	invoke the current Java program (similar to argv[0] for C
+ 	programs).
+ 
+ 2002-10-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/8234:
+ 	* java/util/zip/natInflater.cc (reset): Reset avail_in.
+ 	* java/util/zip/natDeflater.cc (reset): Reset avail_in.
+ 
+ 2002-10-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* mauve-libgcj: Enable Mauve tests that compile now.
+ 
+ 2002-10-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Fix for PR libgcj/8142
+ 	* java/lang/natClassLoader.cc (findClass): Skip inner classes when
+ 	loading native modules.
+ 
+ 2002-10-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractListModel.java
+ 	(getListDataListeners): New stubbed method.
+ 	javax/swing/DefaultBoundedRangeModel.java
+ 	(getChangeListeners): New stubbed method.
+ 	javax/swing/DefaultSingleSelectionModel.java
+ 	(getChangeListeners): New stubbed method.
+ 
+ 2002-10-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gcj/.cvsignore: New file to ignore files generated during build.
+ 	* include/.cvsignore: New file to ignore files generated during build.
+ 
+ 2002-10-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/HttpURLConnection.java
+ 	(getPermission): New method.
+ 	(getErrorStream): New stub method.
+ 	(getHeaderFieldDate): New stub method.
+ 	* java/net/Inet4Address.java:
+ 	(isLinkLocalAddress): Typo fixed.
+ 	* java/net/InetAddress.java:
+ 	(readResolve): New stubbed method (for serialization).
+ 	(isAnyLocalAddress): New stubbed method.
+ 	(isLoopbackAddress): New stubbed method.
+ 	(isLinkLocalAddress): New stubbed method.
+ 	(isSiteLocalAddress): New stubbed method.
+ 	(isMCGlobal): New stubbed method.
+ 	(isMCNodeGlobal): New stubbed method.
+ 	(isMCLinkLocal): New stubbed method.
+ 	(isMCSiteLocal): New stubbed method.
+ 	(isMCOrgLocal): New stubbed method.
+ 	(getCanonicalHostName): New stubbed method.
+ 	(getByAddress): Create instances of Inet4Address/Inet6Address,
+ 	instead of InetAddress, documentation added.
+ 	* java/net/MulticastSocket.java
+ 	(getInterface): Removed FIXME.
+ 	(getNetworkInterface): New method.
+ 	(setNetworkInterface): New method.
+ 	* java/net/NetworkInterface.java:
+ 	(toString): Use property "line.separator" instead of "\n".
+ 	* java/net/URLConnection.java
+ 	(getContent): New stubbed method.
+ 	* java/net/URLStreamHandler.java:
+ 	(equals): New stubbed method.
+ 	(hostsEqual): New stubbed method.
+ 	(hashCode): New stubbed method.
+ 	* java/net/natNetworkInterface.cc:
+ 	(getRealNetworkInterfaces): Create Inet4Address object
+ 	instead of InetAddress.
+ 
+ 2002-10-08  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* interpret.cc (_Jv_InterpMethod::run): Use UINT32 instead of
+ 	unsigned long temporary to implement insn_iushr shifts.
+ 
+ 2002-10-08  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* configure.host [s390*-*]: Enable Java interpreter.
+ 	Enable hash synchronization.  Add sysdeps dir.
+ 	* sysdep/s390/locks.h: New file.
+ 
+ 2002-10-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Thread.java (setDaemon): Check startable_flag,
+ 	not isAlive().
+ 
+ 2002-10-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java: New stub file.
+ 	* java/nio/charset/spi/CharsetProvider.java: Commented out all usages
+ 	of class Charset.
+ 	* Makefile.am (java_native_source_files): Added java/nio/Buffer.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-10-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java:
+ 	removed import of not commited class.
+ 
+ 2002-10-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java,
+ 	java/nio/MappedByteBuffer.java:
+ 	New files, forgot to add these dummies.
+ 	* Makefile.am (java_native_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-10-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/AlreadyConnectedException.java,
+ 	java/nio/channels/ClosedChannelException.java,
+ 	java/nio/channels/ReadableByteChannel.java,
+ 	java/nio/channels/InterruptibleChannel.java,
+ 	java/nio/channels/Channel.java,
+ 	java/nio/channels/ByteChannel.java,
+ 	java/nio/channels/GatheringByteChannel.java,
+ 	java/nio/channels/ScatteringByteChannel.java,
+ 	java/nio/channels/WritableByteChannel.java,
+ 	java/nio/charset/CharacterCodingException.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: New file.
+ 	These files are exceptions or interfaces,
+ 	no real or abstract classes.
+ 	* Makefile.am (java_native_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-10-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(getByAddress): Fixed documentation.
+ 	(getByAddress): New method.
+ 	* java/net/Inet4Address.java: New file.
+ 	* java/net/URL.java
+ 	(URL): Documentation added.
+ 	(getContent): Documentation added.
+ 	(getContent): New stubbed method.
+ 	(getQuery): New method.
+ 	(openConnection): Documentation added.
+ 	(openStream): Documentation added.
+ 	(setURLStreamHandlerFactory): Documentation added.
+ 	* java/net/URI.java: New stub file.
+ 	* Makefile.am
+ 	(java_native_source_files): Added java/net/Inet4Address.java,
+ 	java/net/Inet6Address.java and java/net/URI.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-10-04  C. Scott Ananian <cananian@lesser-magoo.lcs.mit.edu>
+ 
+ 	* java/lang/ProtectionDomain.java (linesep): Remove field.
+ 	(toString): Use System.getProperty("line.separator").
+ 
+ 2002-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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.
+ 
+ 2002-10-04  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/security/Security.java: Use java.home or gnu.classpath.home
+ 	to load providers.
+ 	(loadProviders): Extra dir argument.
+ 	(getProvider): Return null when not found.
+ 
+ 2002-10-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Throwable.java: Remerge with Classpath.
+ 
+ 2002-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java:
+ 	(isMulticastAddress): Added documentation.
+ 	(getHostAddress): Added documentation.
+ 	(toString): Added documentation.
+ 	(getByAddress): Fixed documentation.
+ 	(getByName): Added documentation.
+ 	(getAllByName): Added documentation.
+ 	(getLocalHost): Added documentation.
+ 
+ 2002-10-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/beancontext/BeanContextChildSupport.java:
+ 	Added serialVersionUID.
+ 	* java/text/Collator.java: (compare): Made documentation HTML-aware.
+ 	* javax/naming/BinaryRefAddr.java: Added serialVersionUID.
+ 	* javax/naming/Name.java: Added serialVersionUID.
+ 
+ 2002-10-03  Adam Megacz <adam@xwt.org>
+ 
+ 	* natNetworkInterface.cc (getRealNetworkInterfaces): ifdef out
+ 	some functionality that isn't supported yet on WIN32.
+ 
+ 2002-10-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new files.
+ 
+ 2002-10-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(class InetAddress): Removed final keyword.
+ 	(equals): Fixed typo.
+ 	(getByAddress): New method.
+ 
+ 2002-10-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/dnd/Autoscroll.java:
+ 	New file, merge from Classpath.
+ 	* java/awt/dnd/DragSourceAdapter.java:
+ 	(dragExit): Fixed typos in argument type.
+ 	(dragDropEnd): Fixed typos in argument type.
+ 	* java/awt/dnd/DragSourceDropEvent.java:
+ 	New file, merge from Classpath.
+ 	* java/awt/dnd/DropTarget.java:
+ 	Added stubs, merge from Classpath.
+ 	* java/awt/dnd/DropTargetAdapter.java:
+ 	New file, merge from Classpath.
+ 	* java/awt/dnd/DropTargetContext.java:
+ 	New file, merge from Classpath.
+ 	* java/awt/dnd/DropTargetDragEvent.java:
+ 	New file, merge from Classpath.
+ 	* java/awt/dnd/DropTargetDropEvent.java:
+ 	New file, merge from Classpath.
+ 	* java/awt/dnd/DropTargetEvent.java:
+ 	New file, merge from Classpath.
+ 	* java/awt/dnd/DropTargetListener.java:
+ 	New file, merge from Classpath.
+ 	* java/awt/dnd/MouseDragGestureRecognizer.java:
+ 	New file, merge from Classpath.
+ 	* java/awt/dnd/peer/DropTargetContextPeer.java:
+ 	New file, merge from Classpath.
+ 
+ 2002-10-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramPacket.java
+ 	(setLength): Fixed typo and be HTML-aware.
+ 	* java/net/InetSocketAddress.java
+ 	(InetSocketAddress): Correct initialization of hostname, fixed typo.
+ 	(equals): Added comment about equality of InetSocketAddress objects.
+ 	* java/net/ServerSocket.java
+ 	(accept): Added checks.
+ 	(isClosed): New stubbed method.
+ 	* java/net/SocketOptions.java: Reindention.
+ 	* java/net/SocketPermission
+ 	(SocketPermission): Documentation fixed.
+ 
+ 2002-10-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(receive): Check with SecurityManager AFTER the packet is received,
+ 	check if connected to multicast address, documentation added.
+ 	(send): Only check SecurityManager if connected, check address of
+ 	packet to send.
+ 	(connect): Implemented, documentation added.
+ 	* java/net/Inet6Address.java: New file (not added yet to Makefile.am).
+ 	* java/net/InetSocketAddress.java
+ 	(whole file): Reindented.
+ 	(hostname): New attribute.
+ 	(InetSocketAddress): Initialize new attribute.
+ 	(getAddress): Documentation added.
+ 	(getHostName): Documentation added.
+ 	(getPort): Documentation added.
+ 	(hashCode): Documentation added.
+ 	(isUnresolved): Documentation added.
+ 	(toString): Conform to output of JDK 1.4.1, documentation added.
+ 	* java/net/MulticastSocket.java
+ 	(joinGroup): Removed FIXME, documentation added.
+ 	(leaveGroup): Removed FIXME, documentation added.
+ 	(send): Documentation added.
+ 	* java/net/Socket.java
+ 	(inputShutdown): New variable.
+ 	(outputShutdown): New variable.
+ 	(Socket): Initialize new variables.
+ 	(getRemoteSocketAddress): Check if connected.
+ 	(shutdownInput): Set new variable.
+ 	(shutdownOutput): Set new variable.
+ 	(isConnected): New method.
+ 	(isClosed): New method.
+ 	(isInputShutdown): New method.
+ 	(isOutputShutdown): New method.
+ 	* java/net/URLStreamHandler.java
+ 	(URLStreamHandler): New method.
+ 	(openConnection): Added documentation.
+ 	(parseURL): Added documentation.
+ 	(getHostAddress): New method.
+ 	(getDefaultPort): New method.
+ 
+ 2002-10-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/rmi/activation/ActivationDesc.java,
+ 	java/rmi/activation/ActivationGroupDesc.java,
+ 	java/rmi/activation/ActivationGroupID.java,
+ 	java/rmi/activation/ActivationID.java: New versions from
+ 	Classpath.
+ 
+ 2002-09-30  Bo Thorsen  <bo@suse.de>
+ 
+ 	* sysdep/x86-64/locks.h (compare_and_swap): Fix multilib support.
+ 
+ 2002-09-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectInputStream.java (resolveProxyClass): New method
+ 	from Classpath.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (rmi_java_source_files): Added new files.
+ 	* gnu/java/rmi/RMIMarshalledObjectInputStream.java,
+ 	gnu/java/rmi/RMIMarshalledObjectOutputStream.java,
+ 	gnu/java/rmi/server/ConnectionRunnerPool.java: New files from
+ 	Classpath.
+ 	* 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_Skel.java,
+ 	gnu/java/rmi/registry/RegistryImpl_Stub.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/UnicastServer.java,
+ 	gnu/java/rmi/server/UnicastServerRef.java,
+ 	java/rmi/MarshalledObject.java,
+ 	java/rmi/server/RMIClassLoader.java,
+ 	java/rmi/server/RemoteObject.java,
+ 	java/rmi/server/UnicastRemoteObject.java,
+ 	java/security/SecureClassLoader.java: Merged from Classpath.
+ 
+ 2002-09-29  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/reflect/UndeclaredThrowableException.java: New file.
+ 	Imported from GNU Classpath.
+ 	* java/lang/reflect/natProxy.cc: New file.
+ 	* java/lang/reflect/InvocationHandler.java: New file.  Imported
+ 	from GNU Classpath.
+ 	* java/lang/reflect/Proxy.java: New file.  Imported from GNU
+ 	Classpath.
+ 	* gnu/java/lang/reflect/TypeSignature.java: Refresh from GNU
+ 	Classpath.
+ 	* gnu/classpath/Configuration.java.in (HAVE_NATIVE_GET_PROXY_DATA,
+ 	HAVE_NATIVE_GET_PROXY_CLASS, HAVE_NATIVE_GENERATE_PROXY_CLASS):
+ 	New statics.
+ 	* gcj/javaprims.h ("Java"): Add new classes.
+ 	* java/lang/reflect/Proxy.java: Fix check for duplicate interfaces.
+ 	* Makefile.am (java/lang/reflect/Proxy$$ProxyData.h): Create this.
+ 	java/lang/reflect/Proxy$$ProxyType.h): And this.
+ 	(inner_nat_headers): Add these new headers.
+ 	(ordinary_java_source_files): Add new files.
+ 	(nat_source_files): Add new file.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-09-28  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* configure.host: Handle arm*-elf, strongarm*-elf and xscale*-elf with
+ 	a single configuration.
+ 
+ 2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	* java/util/TimeZone.java (getDSTSavings): New method.
+ 	Fixes PR libgcj/7786.
+ 
+ 2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	* resolve.cc (_Jv_ResolvePoolEntry) [end_of_method_search]: Check
+ 	to see if `the_method == 0' before looking up vtable index.
+ 	Fixes PR libgcj/7709.
+ 
+ 2002-09-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc:
+ 	(_Jv_PrepareCompiledClass): Throw NoClassDefFoundError, per spec.
+ 	* resolve.cc: Include NoClassDefFoundError.h, not
+ 	ClassNotFoundException.h.
+ 	(_Jv_ResolvePoolEntry): Throw NoClassDefFoundError, per spec.
+ 
+ 	* defineclass.cc: Don't include ClassNotFoundException.h.
+ 
+ 	* resolve.cc: Include StringBuffer.
+ 	(_Jv_ResolvePoolEntry): Use StringBuffer to create error string.
+ 
+ 	* boehm.cc (_Jv_MarkObj): Don't fail if class object has been
+ 	allocated but not initialized.
+ 
+ 2002-09-25  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	Fix for PR libgcj/7766:
+ 	* java/util/zip/ZipInputStream.java (entryAtEOF): New field.
+ 	(getNextEntry): Set it.
+ 	(closeEntry): Likewise.
+ 	(read): Likewise.
+ 	(close): Likewise.
+ 	(available): Use it.
+ 
+ 2002-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): Initialize new instance variables.
+ 	(close): Reset new instance variables.
+ 	(getLocalAddress): Remove unneeded SecurityManager usage.
+ 	(getLocalPort): Check if socket is already bound.
+ 	(isConnected): New method.
+ 	(getInetAddress): Implemented.
+ 	(getPort): Better Implementation, documentation fixed.
+ 	(getRemoteSocketAddress): New method.
+ 	* java/net/JarURLConnection.java
+ 	(element): Typo fixed.
+ 	(getMainAttributes): New method.
+ 	(getAttributes): New method (stub only).
+ 	(getManifest): New method (stub only).
+ 	* java/net/NetPermission.java: Added serialVersionsUID.
+ 	* java/net/Socket.java
+ 	(connect): Check blocking mode of associated channel,
+ 	documentation added.
+ 	(getLocalSocketAddress): Better implementation.
+ 	(getRemoteSocketAddress): Implemented.
+ 	(isBound): New method.
+ 	(setSendBufferSize): Documentation added.
+ 	* java/net/SocketAddress.java: Added serialVersionsUID.
+ 	* java/net/SocketPermission.java: Added serialVersionsUID.
+ 	* java/net/URL.java
+ 	(URL): Wrap for shorter lines, initialize new instance variables,
+ 	documentation added.
+ 	(equals): Check new instance variables too.
+ 	(getContent): Documentation added.
+ 	(getPath): Documentation added.
+ 	(getAuthority): New method.
+ 	(getHost): Documentation added.
+ 	(getPort): Documentation added.
+ 	(getDefaultPort): New method.
+ 	(getProtocol): Documentation added.
+ 	(getUserInfo): Documentation added.
+ 	(set): Initialize new instance variables, documentation added.
+ 	* java/net/URLStreamHandler.java
+ 	(setURL): New method.
+ 	* java/net/natPlainDatagramSocketImpl.cc
+ 	(connect): Fix exception name.
+ 	(disconnect): Fix exception name.
+ 
+ 2002-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java: New file.
+ 	* java/nio/channels/DatagramChannel.java:
+ 	extends AbstractSelectableChannel
+ 	* java/nio/channels/ServerSocketChannel.java:
+ 	extends AbstractSelectableChannel
+ 	* java/nio/channels/SocketChannel.java:
+ 	extends AbstractSelectableChannel
+ 	* Makefile.am (ordinary_java_source_files):
+ 	java/nio/channels/spi/AbstractSelectableChannel.java added.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): Exception documentation added.
+ 	(bind): Exception documentation added, addded SecurityManager check,
+ 	added SocketAddress type check.
+ 	(getSoTimeout): Check impl.
+ 	(receive): Fix SecurityManager check, check impl, documentation added.
+ 	(send): Check channel mode, documentation added.
+ 	(connect): New method.
+ 	(disconnect): Implemented.
+ 	(getLocalSocketAddress): New method.
+ 	(getReceiveBufferSize): Check impl.
+ 	(setReuseAddress): Check impl.
+ 	(getReuseAddress): Check impl.
+ 	(setBroadcast): Check impl.
+ 	(getBroadcast): Check impl.
+ 	(setTrafficClass): Check impl, Documentation cleared.
+ 	(getTrafficClass): Check impl.
+ 	(getSendBufferSize): Check impl.
+ 	(setReceiveBufferSize): Check impl, documentation added.
+ 	(setSendBufferSize): Documentation added.
+ 	(setDatagramSocketImplFactory): New method.
+ 	* java/net/HttpURLConnection.java
+ 	(HTTP_INTERNAL_ERROR): The correct code is 500.
+ 	(HTTP_NOT_IMPLEMENTED): Added new constant.
+ 	(setFollowRedirects): Documentation added.
+ 	(getInstanceFollowRedirects): New method.
+ 	(setInstanceFollowRedirects): New method.
+ 	(setRequestMethod): Documentation added.
+ 	(getResponseCode): Documentation added.
+ 	(getResponseMessage): Documentation added.
+ 	* java/net/JarURLConnection.java
+ 	(JarURLConnection): protected since JDK 1.4.
+ 	(getJarEntry): java.io.IOException to IOException, documentation added.
+ 	(getJarFile): Documentation added.
+ 	* java/net/ServerSocket.java
+ 	(ServerSocket): Private to public, exception added.
+ 	(ServerSocket): java.io.IOException to IOException, documentation added.
+ 	(bind): Check socket address type, documentation added.
+ 	(bind): java.io.IOException to IOException, documentation added.
+ 	(accept): Documentation added.
+ 	(implAccept): Check ch is not non-blocking, documentation added.
+ 	(setSoTimeout): Documentation fixed.
+ 	(setReceiveBufferSize): Documentation added.
+ 	* java/net/Socket.java
+ 	(Socket): Documentation added.
+ 	(bind): Documentation added.
+ 	(connect): Check socket address type, documentation added.
+ 	(getRemoteSocketAddress): New method.
+ 	(getLocalSocketAddress): New method.
+ 	(setSoLinger): Documentation added.
+ 	(getReuseAddress): New method.
+ 	(setReuseAddress): New method.
+ 	(getTrafficClass): New method.
+ 	(setTrafficClass): New method.
+ 	* java/net/URLStreamHandler.java
+ 	(openConnection): java.io.IOException to IOException.
+ 	(parseURL): Documentation added.
+ 	(sameFile): public to protected, documentation added.
+ 	(setURL): Documentation added.
+ 	* java/nio/IllegalBlockingModeException.java: New file.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	added java/nio/IllegalBlockingModeException.java
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramPacket
+ 	(DatagramPacket): Exception documentation added.
+ 	(setData): Likewise.
+ 	(setSocketAddress): Likewise.
+ 	* java/net/DatagramSocketImpl.java
+ 	(peek): Documentation addded.
+ 	(peekData): Documentation addded.
+ 	(send): Documentation addded.
+ 	(receive): Documentation addded.
+ 	(connect): New method.
+ 	(disconnect): New method.
+ 	(joinGroup): New abstract method.
+ 	(leaveGroup): New abstract method.
+ 	* java/net/InetSocketAddress.java
+ 	(InetSocketAddress): Documentation added.
+ 	(equals): final keyword added.
+ 	(getAddress): final keyword added.
+ 	(getHostName): final keyword added.
+ 	(getPort): final keyword added.
+ 	(hashCode): final keyword added.
+ 	(isUnresolved): final keyword added.
+ 	* java/net/MulticastSocket.java
+ 	(MulticastSocket): Documentation added.
+ 	(MulticastSocket): New method.
+ 	(joinGroup): Documentation added.
+ 	(joinGroup): New method.
+ 	(leaveGroup): Documentation added.
+ 	(leaveGroup): New method.
+ 	(send): Documentation added.
+ 	* java/net/NetworkInterface.java
+ 	(getByName): Documentation added.
+ 	(getByInetAddress): Documentation added.
+ 	(getNetworkInterfaces): Documentation added.
+ 	* java/net/PlainDatagramSocketImpl.java
+ 	(connect): New method.
+ 	(disconnect): New method.
+ 	* java/net/SocketImpl.java
+ 	(create): Documentation added.
+ 	(shutdownInput): Convert public to protected, as it always was.
+ 	(shutdownOutput): Convert public to protected, as it always was.
+ 	* java/net/SocketOptions.java
+ 	(whole file): Reintented.
+ 	* java/net/URLClassLoader.java
+ 	(URLClassLoader): SecurityManager check added, documentation added.
+ 	(findResources): Documentation added.
+ 	(findClass): Documentation added.
+ 	(newInstance): More correct method arguments.
+ 	* java/net/URLConnection.java
+ 	(connect): Documentation added.
+ 	(getContent): Documentation added.
+ 	(getPermission): Documentation added.
+ 	(getInputStream): Documentation added.
+ 	(getOutputStream): Documentation added.
+ 	(setDoInput): Throw correct exception, documentation added.
+ 	(setDoOutput): Throw correct exception, documentation added.
+ 	(setAllowUserInteraction): Throw correct exception, documentation added.
+ 	(setUseCaches): Throw correct exception, documentation added.
+ 	(setIfModifiedSince): Throw correct exception, documentation added.
+ 	(setRequestProperty): Throw exception, documentation added.
+ 	(addRequestProperty): Throw exception, documentation added.
+ 	(getRequestProperty): Throw exception, documentation added.
+ 	(getRequestProperties): Documentation added.
+ 	(setContentHandlerFactory): Documentation added.
+ 	(guessContentTypeFromName): protected to public.
+ 	(setFileNameMap): Documentation added.
+ 	* java/net/URLDecoder.java
+ 	(URLDecoder): New method.
+ 	(decode): Documentation added.
+ 	(whole file): Reindented.
+ 	* java/net/URLEncoder.java
+ 	(encode): Documentation added.
+ 	* java/net/natPlainDatagramSocketImpl.cc
+ 	(connect): New method.
+ 	(disconnect): New method.
+ 	* 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-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/6576:
+ 	* 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  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* Makefile.am (all-multi): Fix multilib parallel build.
+ 
+ 2002-09-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(sendUrgentData): New method.
+ 	(getChannel): New method.
+ 	* java/net/ServerSocket.java
+ 	(getChannel): New method.
+ 	(isBound): New method.
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): Two new methods.
+ 	(bind): New method.
+ 	(getChannel): New method.
+ 	(isBound): New method.
+ 	(send): Added newline to to make shorter lines.
+ 	* java/net/PlainDatagramSocketImpl.java
+ 	(mcastGrp): Added argument.
+ 	(join): Use new mcastGrp.
+ 	(leave): Use new mcastGrp.
+ 	(joinGroup): New method.
+ 	(leaveGroup): New method.
+ 	* java/net/natPlainDatagramSocketImpl.cc
+ 	(mcastGrp): Added argument, no yet really implemented.
+ 	(getOption): Added newline for shorter lines.
+ 	* java/net/natPlainSocketImpl.cc
+ 	(read, setOption, getOption): Added newline for shorter lines.
+ 
+ 2002-09-19  Tom Tromey  <tromey@redhat.com>
+ 
+        * java/lang/ClassLoader.java (resolveClass0): Set cause for
+        newly-created exception.
+ 
+ 2002-09-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/regex/Matcher.java, java/util/regex/Pattern.java,
+ 	java/util/regex/PatternSyntaxException.java:
+ 	Merge with classpath, new files.
+ 	* Makefile.am (core_java_source_files):
+ 	Added java/util/regex/Matcher.java,
+ 	java/util/regex/Pattern.java,
+ 	java/util/regex/PatternSyntaxException.java
+ 	* Makefile.in: Regenerated.
+ 	* include/config.h.in: Added HAVE_NET_IF_H.
+ 	* java/net/natNetworkInterface.cc (getRealNetworkInterfaces):
+ 	Removed #if 0 ... #endif.
+ 
+ 2002-09-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/natNetworkInterface.cc:
+ 	Removed unneed and yet wrong includes.
+ 
+ 2002-09-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetworkInterface.java: New file.
+ 	* java/net/natNetworkInterface.java: New file.
+ 	* configure.in: Added check for net/if.h.
+ 	* configure: Regenerated.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Added NetworkInterface.java.
+ 	(nat_source_files): Added natNetworkInterface.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-09-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLClassLoader.java (findClass): Code source for a
+ 	class from a jar is not necessarily a jar: URL.
+ 
+ 2002-09-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/AssertionError.java:
+ 	Merge with classpath, fixes HTML.
+ 	* java/rmi/server/LogStream.java:
+ 	Merge with classpath, fixes some constants.
+ 	* java/net/server/RemoteServer.java:
+ 	Merge with classpath, adds serialVersionUID.
+ 	* javax/naming/BinaryRefAddr.java:
+ 	Merge with classpath, s/equal/equals/.
+ 	* javax/naming/NamingException.java:
+ 	Merge with classpath, fixed typo.
+ 	* javax/naming/RefAddr.java:
+ 	Merge with classpath, s/equal/equals/.
+ 	* java/awt/Toolkit.java:
+ 	s/gnu.java.awt.peer.gtk.GtkToolkit/gnu.awt.gtk.GtkToolkit/
+ 	and typo fixed.
+ 
+ 2002-09-15  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/net/natPlainSocketImpl.cc: fixed typo.
+ 
+ 2002-09-15  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/net/natPlainSocketImpl.cc: #ifdef-shielded socket timeouts,
+ 	which don't work on Win32 (yet).
+ 
+ 2002-09-14  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/net/natPlainDatagramSocket.cc: removed #include
+ 	<ws2tcpip.h>; the mingw header is broken (conflicts with itself).
+ 	* include/win32.h: included definition for IP_TOS to satisfy
+ 	natPlainDatagramSocket.cc
+ 
+ 2002-09-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramPacket.java (DatagramPacket):
+ 	Added linebreak for 80 chars per line.
+ 	* java/net/JarURLConection.java
+ 	(getInputStreami, getJarEntry): Likewise.
+ 	* java/net/SocketPErmission.java
+ 	(SocketPermission class docu, implies): Likewise.
+ 	* java/net/URLClassLoader.java (findResources): Likewise.
+ 	* java/net/URLConnection.java: Reindendet remark for 80 chars per line
+ 
+ 2002-09-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/DatagramChannel.java,
+ 	java/nio/channels/ServerSocketChannel.java
+ 	java/nio/channels/SocketChannel.java:
+ 	New dummy files to make java.net fully JDK 1.4 compatible
+ 	* Makefile.am (ordinary_java_source_files): Added
+ 	java/net/DatagramSocketImplFactory.java (long forgotten),
+ 	java/nio/SocketChannel.java,
+ 	java/nio/ServerSocketChannel.java,
+ 	java/nio/DatagramChannel.java
+ 	* Makefile.in: Regenrated.
+ 
+ 2002-09-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocketImpl.java
+ 	(peekData): New method.
+ 	* java/net/PlainDatagramSocketImpl.java
+ 	(peekData): New method.
+ 	* java/net/natPlainDatagramSocketImpl.cc
+ 	(peekData): New method.
+ 	* java/net/URLConnection
+ 	(getPermission): New method.
+ 	(addRequestProperty): New method.
+ 	(getRequestProperties): New method.
+ 	(guessContentTypeFromStream): New method, not really implemented.
+ 	(URLConnection): Added/updated documentation.
+ 	(connect): Added/updated documentation.
+ 	(getURL): Added/updated documentation.
+ 	(getContentLength): Added/updated documentation.
+ 	(getContentType: Added/updated documentation.
+ 	(getContentEncoding): Added/updated documentation.
+ 	(getExpiration): Added/updated documentation.
+ 	(getDate): Added/updated documentation.
+ 	(getLastModified): Added/updated documentation.
+ 	(getHeaderField): Added/updated documentation.
+ 	(getHeaderFields): Added/updated documentation.
+ 	(getHeaderFieldInt): Added/updated documentation.
+ 	(getHeaderFieldDate): Added/updated documentation.
+ 	(getHeaderFieldKey): Added/updated documentation.
+ 	(getContent): Added/updated documentation.
+ 	(getInputStream): Added/updated documentation.
+ 	(getOutputStream): Added/updated documentation.
+ 	(toString): Added/updated documentation.
+ 	(setDoInput): Added/updated documentation.
+ 	(getDoInput): Added/updated documentation.
+ 	(setDoOutput): Added/updated documentation.
+ 	(getDoOutput): Added/updated documentation.
+ 	(setAllowUserInteraction): Added/updated documentation.
+ 	(getAllowUserInteraction): Added/updated documentation.
+ 	(setDefaultAllowUserInteraction): Added/updated documentation.
+ 	(getDefaultAllowUserInteraction): Added/updated documentation.
+ 	(setUseCaches): Added/updated documentation.
+ 	(getUseCaches): Added/updated documentation.
+ 	(setIfModifiedSince): Added/updated documentation.
+ 	(getIfModifiedSince): Added/updated documentation.
+ 	(getDefaultUseCaches): Added/updated documentation.
+ 	(setDefaultUseCaches): Added/updated documentation.
+ 	(setRequestProperty): Added/updated documentation.
+ 	(getRequestProperty): Added/updated documentation.
+ 	(setDefaultRequestProperty): Added/updated documentation.
+ 	(getDefaultRequestProperty): Added/updated documentation.
+ 	(setContentHandlerFactory): Added/updated documentation.
+ 	(guessContentTypeFromName): Added/updated documentation.
+ 	(getFileNameMap): Added/updated documentation.
+ 	(setFileNameMap): Added/updated documentation.
+ 
+ 2002-09-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(Socket): protected to public (since JDK 1.4). Added @specnote.
+ 	(bind): New method.
+ 	(connect): Two new methods.
+ 	(getKeepalive): Get correct socket option.
+ 	(setKeepalive): Set correct socket option.
+ 	(getOOBInline): New method.
+ 	(setOOBInline): New method.
+ 	* java/net/ServerSocket.java
+ 	(bind): Two new methods.
+ 	(getInetAddress): Reimplemented, catch exception.
+ 	(getLocalSocketAddress): New method.
+ 	(setReuseAddress): New method.
+ 	(getReuseAdress): New method.
+ 	(setReceiveBufferSize): New method.
+ 	(getReceiveBufferSize): New method.
+ 	(toString): Made string JDK 1.4 compliant.
+ 
+ 2002-09-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/SocketImpl.java
+ 	(connect): New method.
+ 	(supportsUrgentData): New method.
+ 	(sendUrgentData): New method.
+ 	* java/net/PlainSocketImpl.java
+ 	(connect): One new method and two new implementation.
+ 	(sendUrgentData): New method.
+ 	* java/natPlainSocketImpl.cc
+ 	(connect): Arguments changed, added support for timeouts.
+ 	(getOption): Another __java_boolean to jboolean.
+ 
+ 2002-09-07  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/net/natPlainDatagramSocket.cc: include ws2tcpip.h for
+ 	definition of IP_TOS.
+ 
+ 2002-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): Added documentation.
+ 	(close): Likewise.
+ 	(getLocalAddress): Likewise.
+ 	(getLocalPort): Likewise.
+ 	(receive): Likewise.
+ 	(send): Likewise.
+ 	(setSoTimeout): Likewise.
+ 	(connect): New method.
+ 	(disconnect): New method.
+ 	(getInetAddress): New method (FIXME)
+ 	(getPort): New method.
+ 	(setReuseAddress): New method.
+ 	(getReuseAddress): New method.
+ 	(setBroadcast): New method.
+ 	(getBroadcast): New method.
+ 	(setTrafficClass): New method.
+ 	(getTrafficClass): New method.
+ 	* java/net/MulticastSocket.java):
+ 	(getTTL): Added @see in documentation.
+ 	(setTTL): Added @see in documentation.
+ 	(setLoopbackMode): New method.
+ 	(getLoopbackMode): New method.
+ 	* java/net/PlainSocketImpl.java:
+ 	Added new constants for the options SO_BROADCAST, SO_OOBINLINE,
+ 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
+ 	* java/net/PlainDatagramSocketImpl.java
+ 	Added new constants for the options SO_BROADCAST, SO_OOBINLINE,
+ 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
+ 	* java/net/natPlainSocketImpl.cc
+ 	(getOption): Implemented the options SO_BROADCAST, SO_OOBINLINE,
+ 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
+ 	(setOption): Implemented the options SO_BROADCAST, SO_OOBINLINE,
+ 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
+ 	This should also fix SO_KEEPALIVE
+ 	* java/net/natPlainDatagramSocketImpl.cc
+ 	(getOption): Implemented the options SO_BROADCAST, SO_OOBINLINE,
+ 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
+ 	(setOption): Implemented the options SO_BROADCAST, SO_OOBINLINE,
+ 	IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS
+ 
+ 2002-09-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/SocketOptions.java: added static variables to be JDK 1.4
+ 	compatible (SO_BROADCAST, SO_OOBINLINE, IP_MULTICAST_IF2,
+ 	IP_MULTICAST_LOOP, IP_TOS
+ 
+ 2002-09-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.h (_getDeclaredMethod): Declare.
+ 	(_getMethod): Now private.
+ 	* java/lang/natClass.cc (_getDeclaredMethod): Renamed from
+ 	getDeclaredMethod.  Now returns NULL on failure.
+ 	* java/lang/Class.java (_getDeclaredMethod): Declare.
+ 	(getDeclaredMethod): No longer native; implements access checks.
+ 
+ 2002-09-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/gcj/runtime/NameFinder.java (remove_interpreter): New field.
+ 	(sanitizeStack): Correctly reset unknown and interpreter counters,
+ 	detect interpreter runtime frames.
+ 	(demangleInterpreterMethod): New method.
+ 	* gnu/gcj/runtime/natNameFinder.cc (lookupInterp): Use new method.
+ 	* java/lang/natVMThrowable.cc (fillInStackTrace): Change order of
+ 	filling in addrs[].
+ 
+ 2002-09-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramPacket.java, java/net/MulticsstSocket.java:
+ 	re-indented documentation.
+ 
+ 2002-08-30  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	* java/util/Calendar.java (getTimeInMillis, getTimeInMillis): Now
+ 	public, per 1.4 spec.  Fixes PR libgcj/7785.
+ 
+ 2002-08-30  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ZIP, GCJH): Remove $(EXEEXT).
+ 
+ 2002-08-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/JarURLConnection.java (getCertificates): New method
+ 	from Classpath.
+ 	* java/net/URLClassLoader.java (URLClassLoader): Extends
+ 	SecureClassLoader.
+ 	(definePackage): New method from Classpath.
+ 	(getPermissions): Likewise.
+ 	(newInstance): Likewise.
+ 	(findClass): Construct CodeSource for new class (from Classpath).
+ 	* java/net/SocketImpl.java (shutdownInput, shutdownOutput): New
+ 	methods.
+ 	* java/net/URL.java (getUserInfo): New method.
+ 	(set(String,String,int,String,String,String,String,String)): New
+ 	method.
+ 	* java/net/PlainSocketImpl.java (_Jv_SO_KEEPALIVE_): Define.
+ 	(shutdownInput, shutdownOutput): Declare.
+ 	* java/net/PlainDatagramSocketImpl.java (_Jv_SO_KEEPALIVE_):
+ 	Define.
+ 	* java/net/natPlainSocketImpl.cc (setOption): Handle keepalive.
+ 	(getOption): Likewise.
+ 	(shutdownInput): New method.
+ 	(shutdownOutput): Likewise.
+ 	* java/net/natPlainDatagramSocketImpl.cc (setOption): Handle
+ 	keepalive.
+ 	(getOption): Likewise.
+ 	* java/net/SocketOptions.java (SO_KEEPALIVE): New constant.
+ 	* java/net/Socket.java (setKeepAlive): New method.
+ 	(getKeepAlive): Likewise.
+ 	(shutdownInput, shutdownOutput): New methods.
+ 
+ 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-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/natFileDescriptorPosix.cc (setLength): Handle case where
+ 	ftruncate is missing.
+ 	* configure, include/config.h.in: Rebuilt.
+ 	* acconfig.h (HAVE_FTRUNCATE): Mention.
+ 	* configure.in: Check for ftruncate.
+ 
+ 2002-08-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/jvm.h (struct _Jv_frame_info): New structure.
+ 	* gnu/gcj/runtime/natNameFinder.cc: Include StringBuffer.h,
+ 	java-interp.h.
+ 	(lookupInterp): New method.
+ 	(getAddrAsString): Use _Jv_frame_info.
+ 	(dladdrLookup): Likewise.
+ 	* gnu/gcj/runtime/NameFinder.java (lookup): Try to look up
+ 	interpreted frame.
+ 	(lookupInterp): Declare.
+ 	* java/lang/natVMThrowable.cc: Include Thread.h, java-interp.h.
+ 	(fillInStackTrace): Collect information on interpreted frames.
+ 	Use _Jv_frame_info.
+ 	* interpret.cc: Include Thread.h.
+ 	(run): Create and push _Jv_MethodChain object.
+ 	(_Jv_EndOfInterpreter): New global.
+ 	* java/lang/Thread.java (interp_frame): New field.
+ 	* include/java-interp.h (struct _Jv_MethodChain): New structure.
+ 	Include NameFinder.h.
+ 
+ 2002-08-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.h: Include Package.h.
+ 	(Class::getProtectionDomain): Declare.
+ 	(Class::getPackage): Declare.
+ 
+ 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>
+ 
+ 	* java/net/Authenticator.java: added some documentation.
+ 
+ 2002-08-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/reflect/natConstructor.cc (newInstance): Initialize
+ 	class.
+ 	* java/lang/reflect/natMethod.cc (invoke): Initialize class.
+ 
+ 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-27  Tony Kimball <alk@pobox.com>
+ 	    Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc (NATIVE_CLOSE): New
+ 	define.
+ 	(::close): Removed.
+ 	(PlainDatagramSocketImpl::close): Use NATIVE_CLOSE.
+ 	* java/net/natPlainSocketImpl.cc (NATIVE_CLOSE): New define.
+ 	(::close): Removed.
+ 	(PlainSocketImpl::close): Use NATIVE_CLOSE.
+ 	* include/win32.h (getcwd): Removed declaration.  Include io.h.
+ 
+ 2002-08-25  Adam Megacz <adam@xwt.org>
+ 
+ 	* include/win32.h (getcwd): copied function declaration as
+ 	temporary fix for header confusion.
+ 
+ 2002-08-24  Mark Wielaard <mark@klomp.org>
+ 
+ 	* Makefile.am (libgcj_la_SOURCES): Remove name-finder.cc.
+ 	(core_java_source_files): Add VMThrowable.java and NameFinder.java
+ 	(nat_source_files): Remove natThrowable.cc, add natVMThrowable.cc
+ 	and natNameFinder.cc.
+ 	* Makefile.in: Regenerate.
+ 	* prims.cc: Use trace_enabled from VMThrowable.
+ 	* name-finder.cc: Removed.
+ 	* gcj/javaprims.h: Add class VMThrowable.
+ 	* gnu/gcj/runtime/NameFinder.java: New file.
+ 	* gnu/gcj/runtime/natNameFinder.cc: Likewise.
+ 	* include/name-finder.h: Removed.
+ 	* java/lang/Throwable.java (printStackTrace (PrintStream)): Use new
+ 	method stackTraceString().
+ 	(printStackTrace (PrintWriter)): Likewise.
+ 	(stackTraceString): Complete rewrite of old printStackTrace using
+ 	StringBuffer.
+ 	(stackTraceStringBuffer): New helper method for stackTraceString().
+ 	(fillInStackTrace): Delegate to VMTrowable.
+ 	(getStackTrace): Likewise.
+ 	(getStackTrace0): Removed.
+ 	(trace_enabled, stackTraceBytes): Moved to new VMThrowable.java.
+ 	(setStackTrace): Copy given array.
+ 	* java/lang/natThrowable.cc: Removed (replaced by natVMThrowable).
+ 	* 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,
+ 	gnu/gcj/protocol/core/Connection.java,
+ 	gnu/gcj/protocol/file/Connection.java,
+ 	gnu/gcj/protocol/http/Connection.java: Added implementation of
+ 	getHeaderFields().
+ 
+ 2002-08-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gij.cc (help): Document -cp and -classpath.
+ 	(main): Handle -classpath.
+ 
+ 2002-08-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ordinary_java_source_files): Added
+ 	SocketAddress.java, InetSocketAddress.java.
+ 	* java/net/PortUnreachableException.java: Merged with Classpath.
+ 	* java/net/SocketTimeoutException.java: Likewise.
+ 	* java/net/URISyntaxException.java: Likewise.
+ 	* 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
+ 
+ 2002-08-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URISyntaxException.java: New file.
+ 	* java/net/SocketTimeoutException.java: New file.
+ 	* java/net/PortUnreachableException.java: New file.
+ 	* Makefile.am: Updated.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-08-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Thanks to Vladimir Puskas <vpuskas@eunet.yu>
+ 	* gnu/java/security/provider/MD5.java: Extends MessageDigest, not
+ 	MessageDigestSpi (fixes Classpath bug #783).
+ 
+ 2002-08-14  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	* java/lang/natPosixProcess.cc (cleanup): Added `path' argument.
+ 	(startProcess): Allocate path for chdir in async-signal-safe way.
+ 
+ 2002-08-13  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	Fix for PR libgcj/7570 and PR libgcj/7578:
+ 	* java/lang/natPosixProcess.cc: Include java/io/File.h.
+ 	(startProcess): Handle new `dir' argument.
+ 	* java/lang/Win32Process.java (ConcreteProcess): Added `dir'
+ 	argument.
+ 	* java/lang/PosixProcess.java (ConcreteProcess): Added `dir'
+ 	argument.
+ 	(startProcess): Likewise.
+ 	* java/lang/EcosProcess.java (ConcreteProcess): Added `dir'
+ 	argument.
+ 	* java/lang/Runtime.java (execInternal): Added `dir' argument.
+ 	(exec): Don't create new environment if ENV==null.  Pass DIR to
+ 	execInternal.
+ 	* java/lang/natRuntime.cc: Include java/io/File.h.
+ 	(execInternal): Added `dir' argument.
+ 
+ 2002-08-13  Jesse Rosenstock  <jmr@fulcrummicro.com>
+ 
+ 	* java/io/RandomAccessFile.java (skipBytes): Return number of
+ 	bytes skipped.
+ 
+ 2002-08-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reenable patch since shared library troubles on powerpc are solved:
+ 	* gnu/java/security/provider/Gnu.java: Reference all implementation
+ 	classes by using Class.getName().
+ 	* 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/GnuDSAPrivateKey.java,
+ 	gnu/java/security/provider/GnuDSAPublicKey.java,
+ 	gnu/java/security/provider/MD5.java,
+ 	gnu/java/security/util/Prime.java: New classes
+ 	* Makefile.am (ordinary_java_source_files): Add above files.
+ 	* Makefile.in: Regenerate.
+ 	* gnu/java/security/provider/DefaultPolicy.java
+ 	(getPermissions): Don't maintain static class variable of Permissions.
+ 	* gnu/java/security/provider/SHA.java
+ 	(engineUpdate): algorithm change.
+ 	(engineDigest): algorithm change.
+ 
+ 2002-08-09  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.
+ 	* javax/swing/text/html/HTML.java: Stub implementation.
+ 	* javax/swing/text/html/parser/ParserDelegator.java: New stub
+ 	implementation.
+ 
+ 	* Makefile.am: Add new files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-08-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* gnu/awt/j2d/Graphics2DImpl.java: Implement stubs for new abstract
+ 	methods in Graphics2D.
+ 
+ 2002-08-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	AWT/Swing merge from GNU Classpath.
+ 
+ 	* java/awt/AlphaComposite.java, java/awt/AttributeValue.java,
+ 	java/awt/BasicStroke.java, java/awt/BufferCapabilities.java,
+ 	java/awt/color/CMMException.java, java/awt/ColorPaintContext.java,
+ 	java/awt/color/ProfileDataException.java,
+ 	java/awt/CompositeContext.java,	java/awt/Composite.java,
+ 	java/awt/ContainerOrderFocusTraversalPolicy.java,
+ 	java/awt/datatransfer/FlavorTable.java,
+ 	java/awt/DefaultFocusTraversalPolicy.java,
+ 	java/awt/DefaultKeyboardFocusManager.java, java/awt/DisplayMode.java,
+ 	java/awt/dnd/DnDConstants.java, java/awt/dnd/DragGestureEvent.java,
+ 	java/awt/dnd/DragGestureListener.java,
+ 	java/awt/dnd/DragGestureRecognizer.java,
+ 	java/awt/dnd/DragSourceAdapter.java,
+ 	java/awt/dnd/DragSourceContext.java,
+ 	java/awt/dnd/DragSourceDragEvent.java,
+ 	java/awt/dnd/DragSourceEvent.java, java/awt/dnd/DragSource.java,
+ 	java/awt/dnd/DragSourceListener.java,
+ 	java/awt/dnd/DragSourceMotionListener.java,
+ 	java/awt/dnd/DropTarget.java,
+ 	java/awt/dnd/InvalidDnDOperationException.java,
+ 	java/awt/dnd/peer/DragSourceContextPeer.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/FocusTraversalPolicy.java, java/awt/FontFormatException.java,
+ 	java/awt/font/TextHitInfo.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/GradientPaint.java, java/awt/GraphicsConfigTemplate.java,
+ 	java/awt/GraphicsDevice.java, java/awt/GraphicsEnvironment.java,
+ 	java/awt/HeadlessException.java, java/awt/image/BufferedImageOp.java,
+ 	java/awt/image/BufferStrategy.java, java/awt/ImageCapabilities.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/im/InputContext.java, java/awt/im/InputMethodHighlight.java
+ 	java/awt/im/InputMethodRequests.java, java/awt/im/InputSubset.java,
+ 	java/awt/JobAttributes.java, java/awt/KeyboardFocusManager.java,
+ 	java/awt/KeyEventDispatcher.java, java/awt/KeyEventPostProcessor.java
+ 	java/awt/PageAttributes.java, java/awt/print/Book.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/Robot.java, java/awt/ScrollPaneAdjustable.java,
+ 	java/awt/Stroke.java, java/awt/TexturePaint.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/Accessible.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/swing/AbstractAction.java,
+ 	javax/swing/AbstractButton.java,
+ 	javax/swing/AbstractCellEditor.java,
+ 	javax/swing/AbstractListModel.java,
+ 	javax/swing/AbstractSet.java, javax/swing/Action.java,
+ 	javax/swing/ActionMap.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/BorderFactory.java,
+ 	javax/swing/border/LineBorder.java,
+ 	javax/swing/border/MatteBorder.java,
+ 	javax/swing/border/TitledBorder.java,
+ 	javax/swing/BoundedRangeModel.java, javax/swing/Box.java,
+ 	javax/swing/BoxLayout.java, javax/swing/ButtonGroup.java,
+ 	javax/swing/ButtonModel.java, javax/swing/CellEditor.java,
+ 	javax/swing/CellRendererPane.java,
+ 	javax/swing/colorchooser/AbstractColorChooserPanel.java,
+ 	javax/swing/colorchooser/ColorChooserComponentFactory.java,
+ 	javax/swing/colorchooser/ColorSelectionModel.java,
+ 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
+ 	javax/swing/ComboBoxEditor.java, javax/swing/ComboBoxModel.java,
+ 	javax/swing/ComponentInputMap.java, javax/swing/DebugGraphics.java,
+ 	javax/swing/DefaultBoundedRangeModel.java,
+ 	javax/swing/DefaultButtonModel.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/DefaultListModel.java,
+ 	javax/swing/DefaultListSelectionModel.java,
+ 	javax/swing/DefaultSingleSelectionModel.java,
+ 	javax/swing/DesktopManager.java,
+ 	javax/swing/event/AncestorEvent.java,
+ 	javax/swing/event/AncestorListener.java,
+ 	javax/swing/event/CaretEvent.java,
+ 	javax/swing/event/CaretListener.java,
+ 	javax/swing/event/CellEditorListener.java,
+ 	javax/swing/event/ChangeEvent.java,
+ 	javax/swing/event/ChangeListener.java,
+ 	javax/swing/event/DocumentEvent.java,
+ 	javax/swing/event/DocumentListener.java,
+ 	javax/swing/event/EventListenerList.java,
+ 	javax/swing/event/HyperlinkEvent.java,
+ 	javax/swing/event/HyperlinkListener.java,
+ 	javax/swing/event/InternalFrameAdapter.java,
+ 	javax/swing/event/InternalFrameEvent.java,
+ 	javax/swing/event/InternalFrameListener.java,
+ 	javax/swing/event/ListDataEvent.java,
+ 	javax/swing/event/ListDataListener.java,
+ 	javax/swing/event/ListSelectionEvent.java,
+ 	javax/swing/event/ListSelectionListener.java,
+ 	javax/swing/event/MenuDragMouseEvent.java,
+ 	javax/swing/event/MenuDragMouseListener.java,
+ 	javax/swing/event/MenuEvent.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/event/UndoableEditEvent.java,
+ 	javax/swing/event/UndoableEditListener.java,
+ 	javax/swing/filechooser/FileFilter.java,
+ 	javax/swing/filechooser/FileSystemView.java,
+ 	javax/swing/filechooser/FileView.java,
+ 	javax/swing/FocusManager.java, javax/swing/GrayFilter.java,
+ 	javax/swing/Icon.java, javax/swing/ImageIcon.java,
+ 	javax/swing/InputMap.java, javax/swing/InputVerifier.java,
+ 	javax/swing/JApplet.java, javax/swing/JButton.java,
+ 	javax/swing/JCheckBox.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/JFrame.java,
+ 	javax/swing/JInternalFrame.java, javax/swing/JLabel.java,
+ 	javax/swing/JLayeredPane.java, javax/swing/JList.java,
+ 	javax/swing/JMenuBar.java, javax/swing/JMenuItem.java,
+ 	javax/swing/JMenu.java,	javax/swing/JOptionPane.java,
+ 	javax/swing/JPanel.java, javax/swing/JPasswordField.java,
+ 	javax/swing/JPopupMenu.java, javax/swing/JProgressBar.java,
+ 	javax/swing/JRadioButton.java, javax/swing/JRadioButtonMenuItem.java,
+ 	javax/swing/JRootPane.java, javax/swing/JScrollBar.java,
+ 	javax/swing/JScrollPane.java, javax/swing/JSeparator.java,
+ 	javax/swing/JSlider.java, javax/swing/JSplitPane.java,
+ 	javax/swing/JTabbedPane.java, javax/swing/JTable.java,
+ 	javax/swing/JTextField.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/JWindow.java,
+ 	javax/swing/KeyStroke.java, javax/swing/ListCellRenderer.java,
+ 	javax/swing/ListModel.java, javax/swing/ListSelectionModel.java,
+ 	javax/swing/LookAndFeel.java, javax/swing/MenuElement.java,
+ 	javax/swing/MenuSelectionManager.java,
+ 	javax/swing/MutableComboBoxModel.java,
+ 	javax/swing/OverlayLayout.java,
+ 	javax/swing/plaf/ActionMapUIResource.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/BasicLookAndFeel.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/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/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/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,
+ 	javax/swing/ProgressMonitorInputStream.java,
+ 	javax/swing/ProgressMonitor.java,
+ 	javax/swing/Renderer.java,
+ 	javax/swing/RepaintManager.java,
+ 	javax/swing/RootPaneContainer.java,
+ 	javax/swing/Scrollable.java,
+ 	javax/swing/ScrollPaneConstants.java,
+ 	javax/swing/ScrollPaneLayout.java,
+ 	javax/swing/SingleSelectionModel.java,
+ 	javax/swing/SizeRequirements.java,
+ 	javax/swing/SizeSequence.java,
+ 	javax/swing/SwingConstants.java,
+ 	javax/swing/SwingUtilities.java,
+ 	javax/swing/table/AbstractTableModel.java,
+ 	javax/swing/table/DefaultTableCellRenderer.java,
+ 	javax/swing/table/DefaultTableColumnModel.java,
+ 	javax/swing/table/DefaultTableModel.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/text/AbstractDocument.java,
+ 	javax/swing/text/AttributeSet.java,
+ 	javax/swing/text/BadLocationException.java,
+ 	javax/swing/text/Caret.java,
+ 	javax/swing/text/CharacterIterator.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/Element.java,
+ 	javax/swing/text/GapContent.java,
+ 	javax/swing/text/JTextComponent.java,
+ 	javax/swing/text/Keymap.java,
+ 	javax/swing/text/MutableAttributeSet.java,
+ 	javax/swing/text/PlainDocument.java,
+ 	javax/swing/text/PlainEditorKit.java,
+ 	javax/swing/text/Position.java,
+ 	javax/swing/text/Segment.java,
+ 	javax/swing/text/StyledDocument.java,
+ 	javax/swing/text/StyledEditorKit.java,
+ 	javax/swing/text/Style.java,
+ 	javax/swing/text/TextAction.java,
+ 	javax/swing/text/ViewFactory.java,
+ 	javax/swing/text/View.java,
+ 	javax/swing/Timer.java,
+ 	javax/swing/ToggleButtonModel.java,
+ 	javax/swing/ToolTipManager.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/TreeNode.java,
+ 	javax/swing/tree/TreePath.java,
+ 	javax/swing/tree/TreeSelectionModel.java,
+ 	javax/swing/tree/VariableHeightLayoutCache.java,
+ 	javax/swing/UIDefaults.java,
+ 	javax/swing/UIManager.java,
+ 	javax/swing/undo/AbstractUndoableEdit.java,
+ 	javax/swing/undo/CannotRedoException.java,
+ 	javax/swing/undo/CannotUndoException.java,
+ 	javax/swing/undo/CompoundEdit.java,
+ 	javax/swing/undo/StateEditable.java,
+ 	javax/swing/undo/StateEdit.java,
+ 	javax/swing/undo/UndoableEdit.java,
+ 	javax/swing/undo/UndoableEditSupport.java,
+ 	javax/swing/undo/UndoManager.java,
+ 	javax/swing/UnsupportedLookAndFeelException.java,
+ 	javax/swing/ViewportLayout.java,
+ 	javax/swing/WindowConstants.java: New files, from GNU Classpath.
+ 
+ 	* java/awt/ActiveEvent.java,
+ 	java/awt/Adjustable.java, java/awt/AWTError.java,
+ 	java/awt/AWTEvent.java,	java/awt/AWTEventMulticaster.java,
+ 	java/awt/AWTException.java, java/awt/AWTPermission.java,
+ 	java/awt/BorderLayout.java, java/awt/Button.java, java/awt/Choice.java,
+ 	java/awt/Color.java, java/awt/Component.java,
+ 	java/awt/ComponentOrientation.java, java/awt/Container.java,
+ 	java/awt/datatransfer/MimeTypeParseException.java,
+ 	java/awt/datatransfer/Transferable.java,
+ 	java/awt/datatransfer/UnsupportedFlavorException.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/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/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/Font.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/GraphicsConfiguration.java,
+ 	java/awt/IllegalComponentStateException.java,
+ 	java/awt/image/IndexColorModel.java,
+ 	java/awt/Image.java, java/awt/image/MemoryImageSource.java,
+ 	java/awt/image/PixelGrabber.java, java/awt/Insets.java,
+ 	java/awt/ItemSelectable.java, java/awt/LayoutManager2.java,
+ 	java/awt/LayoutManager.java, java/awt/MenuContainer.java,
+ 	java/awt/MenuItem.java,	java/awt/PaintContext.java,
+ 	java/awt/Paint.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/ScrollPane.java,
+ 	java/awt/Shape.java, java/awt/SystemColor.java, java/awt/Toolkit.java,
+ 	java/awt/Transparency.java, java/awt/Window.java: Merge from classpath.
+ 
+ 	* java/awt/im/spi/InputMethod.java,
+ 	java/awt/im/spi/InputMethodContext.java,
+ 	java/awt/im/spi/InputMethodDescriptor.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: New files from
+ 	classpath.
+ 
+ 	* gnu/java/awt/EventModifier.java,
+ 	gnu/java/awt/image/ImageDecoder.java,
+ 	gnu/java/awt/image/XBMDecoder.java: New files from GNU Classpath.
+ 
+ 	* gnu/awt/xlib/XGraphicsConfiguration.java,
+ 	gnu/awt/xlib/XToolkit.java: Updated to compile against 1.4 abstract
+ 	API.
+ 
+ 	* javax/swing/plaf/metal/MetalLookAndFeel.java: New file from
+ 	GNU Classpath.
+ 
+ 	* Makefile.am: Add new files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-08-07  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/lang/ClassLoader.java (getSystemClassLoader, findClass,
+ 	defineClass, setSigners, getSystemResource, getSystemResourceAsStream,
+ 	findResource, getResources, findResources): Add javadoc from classpath.
+ 	(getSystemResources): Implemented.
+ 
+ 2002-08-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Revert patch that breaks libgcj shared library on powerpc:
+ 	* gnu/java/security/provider/Gnu.java: Reverse referencing all
+ 	implementation classes by using Class.getName(). Uses Strings again.
+ 	* 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/GnuDSAPrivateKey.java,
+ 	gnu/java/security/provider/GnuDSAPublicKey.java,
+ 	gnu/java/security/provider/MD5.java,
+ 	gnu/java/security/util/Prime.java: Removed.
+ 	* Makefile.am (ordinary_java_source_files): Remove above files.
+ 	* Makefile.in: Regenerate.
+ 	* gnu/java/security/provider/DefaultPolicy.java
+ 	(getPermissions): Revert to maintaining static class variable of
+ 	Permissions.
+ 	* gnu/java/security/provider/SHA.java
+ 	(engineUpdate): Revert algorithm change.
+ 	(engineDigest): Revert algorithm change.
+ 
+ 2002-08-01  Kaz Kojima  <kkojima@gcc.gnu.org>
+ 
+ 	* configure.host: Add SH support.
+ 	* sysdep/sh/locks.h: New file.
+ 
+ 2002-07-31  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/awt/Frame.java (Frame): Remove println calls.
+ 
+ 2002-07-30  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* configure.in (LIBFFIINCS): Don't prepend MULTIBUILDTOP.
+ 	* configure: Rebuilt.
+ 
+ 2002-07-27  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* sysdep/powerpc/locks.h: Formatting.
+ 	(_LARX): Define.
+ 	(_STCX): Define.
+ 	(compare_and_swap): Use _LARX and _STCX.
+ 	(compare_and_swap_release): Likewise.
+ 
+ 2002-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/Authenticator.java: New version from Classpath.
+ 	* java/net/DatagramSocketImpl.java: New version from Classpath.
+ 
+ 2002-07-27  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* configure.host: Add powerpc64*-* entry.
+ 
+ 2002-07-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/natFileDescriptorPosix.cc: Don't include sys/socket.h or
+ 	fcntl.h.
+ 
+ 2002-07-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Runtime.java (loadLibrary): Pass `true' as search
+ 	argument to _load.
+ 
+ 2002-07-24  Tom Tromey  <tromey@redhat.com>
+ 	    Tony Kimball <alk@pobox.com>
+ 
+ 	* java/io/natFileDescriptorWin32.cc (setLength): New method.
+ 	* java/io/natFileDescriptorPosix.cc (setLength): New method.
+ 	* java/io/RandomAccessFile.java (setLength): New method.
+ 	* java/io/natFileDescriptorEcos.cc (setLength): New method.
+ 	* java/io/FileDescriptor.java (setLength): New method.
+ 
+ 2002-07-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/reflect/natField.cc (setAddr): Check isAccessible().
+ 	* java/io/ObjectInputStream.java (setBooleanField): Before setting
+ 	field call setAccessible(true).
+ 	(setByteField): Likewise.
+ 	(setCharField): Likewise.
+ 	(setDoubleField): Likewise.
+ 	(setFloatField): Likewise.
+ 	(setIntField): Likewise.
+ 	(setLongField): Likewise.
+ 	(setShortField): Likewise.
+ 	(setObjectField): Likewise.
+ 
+ 2002-07-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectInputStream.java (readObject) [TC_ARRAY]: Don't
+ 	use toString() to format array element.
+ 
+ 2002-07-23  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* gnu/java/security/provider/MD5.java: Extends MessageDigest, not
+ 	MessageDigestSpi (fixes Classpath 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-19  Bo Thorsen  <bo@berlioz.suse.de>
+ 
+ 	* java/lang/ieeefp.h: Add x86-64 support.
+ 	* configure.in: Likewise.
+ 	* configure.host: Likewise.
+ 	* configure: Regenerated.
+ 	* sysdep/x86-64/locks.h: New file with x86-64 locks.
+ 
+ 2002-07-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/StreamTokenizer.java (pushBack): Update documentation.
+ 	(whitespaceChars): call resetChar().
+ 
+ 2002-07-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new files.
+ 	* java/beans/ExceptionListener.java: Merged with Classpath.
+ 	* java/beans/PropertyChangeEvent.java: Merged with Classpath.
+ 	* java/beans/PropertyChangeListener.java: Merged with Classpath.
+ 	* java/beans/PropertyChangeListenerProxy.java: Merged with Classpath.
+ 	* java/beans/PropertyChangeSupport.java: Merged with Classpath.
+ 	* java/beans/VetoableChangeListener.java: Merged with Classpath.
+ 	* java/beans/VetoableChangeListenerProxy.java: Merged with Classpath.
+ 	* java/beans/VetoableChangeSupport.java: Merged with Classpath.
+ 
+ 2002-07-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* 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/GnuDSAPrivateKey.java,
+ 	gnu/java/security/provider/GnuDSAPublicKey.java,
+ 	gnu/java/security/provider/MD5.java,
+ 	gnu/java/security/util/Prime.java: New files from Classpath.
+ 	* Makefile.am (ordinary_java_source_files): Add new files.
+ 	* Makefile.in: Regenerate.
+ 
+ 2002-07-14  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* 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
+ 
+ 2002-07-12  Jesse Rosenstock  <jmr@fulcrummicro.com>
+ 
+ 	For PR libgcj/7292:
+ 	* java/lang/Character.java (toString(char)): Now static.
+ 
+ 2002-07-12  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/natThrowable.cc (printRawStackTrace): removed.
+ 	(getStackTrace0): new method.
+ 	* java/lang/Throwable.java (CPlusPlusDemangler): removed.
+ 	(printStackTrace(PrintWriter)): replace with pure java implementation.
+ 	(printRawStackTrace): removed.
+ 	(getStackTrace0): new method.
+ 	* java/lang/StackTraceElement.java (toString): add extra whitespace.
+ 	* gcj/javaprims.h: regenerate class list.
+ 	* include/name-finder.h (lookup): new returns StackTraceElement*.
+ 	(method_name, file_name): fields removed.
+ 	(pid2, f2_pipe, b2_pipe, b2_pipe_fd): new fields.
+ 	(~_Jv_name_finder): close new descriptors.
+ 	* name-finder.cc(_Jv_name_finder): setup c++filt helper process.
+ 	(createStackTraceElement): new method.
+ 	(lookup): returns StackTraceElement*, uses createStackTraceElement().
+ 
+ 2002-07-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Use `test' after `&&'.  From Chris Faylor.
+ 
+ 2002-07-08  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* mauve-libgcj: Don't compile java.sql.Blob.BlobTest,
+ 	java.sql.Clob.ClobTest, java.sql.Connection.TestJdbc20,
+ 	java.sql.DatabaseMetaData.TestJdbc20
+ 
+ 2002-07-05  Tony Kimball  <alk@pobox.com>
+ 
+ 	* java/lang/natRuntime.cc (nativeGetLibname): Added missing `#'.
+ 
+ 2002-07-04  Tom Tromey  <tromey@redhat.com>
+ 	    Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	Fix for PR libgcj/7060:
+ 	* java/lang/Class.h (_getMethod): Renamed from getMethod.
+ 	* java/lang/natClass.cc (_getMethod): Renamed from getMethod.
+ 	Recurse into superinterfaces.  Don't throw NoSuchMethodException.
+ 	* java/lang/Class.java (getMethod): New Java implementation;
+ 	complies with spec.
+ 	(_getMethod): New native method.
+ 
+ 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-07-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/spi/NamingManager.java (getPlusPath): Don't create
+ 	StringTokenizer on null string.  For PR libgcj/7180.
+ 	From daveho@cs.umd.edu.
+ 
+ 2002-06-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc (BooleanClass): Removed.
+ 	(IntegerClass): Likewise.
+ 	* java/lang/natClass.cc (CloneableClass): Removed.
+ 	(ObjectClass, ErrorClass, ClassClass, MethodClass, FieldClass,
+ 	ConstructorClass): Likewise.
+ 	* java/lang/natClassLoader.cc (CloneableClass): Removed.
+ 	(ObjectClass, ClassClass, VMClassLoaderClass, ClassLoaderClass,
+ 	SerializableClass): Likewise.
+ 	* java/lang/reflect/natMethod.cc (BooleanClass): Removed.
+ 	(VoidClass, ByteClass, ShortClass, CharacterClass, IntegerClass,
+ 	LongClass, FloatClass, DoubleClass): Likewise.
+ 
+ 	* verify.cc (branch_prepass): Updated for change to exception
+ 	handler type.
+ 	(verify_instructions_0): Likewise.
+ 	* defineclass.cc (handleCodeAttribute): Initialize `prepared'.
+ 	(handleExceptionTableEntry): Updated for change to exception
+ 	handler type.
+ 	* java/lang/Class.h (Class): Removed _Jv_InterpMethodInvocation.
+ 	* include/java-interp.h (_Jv_InterpMethodInvocation): Removed.
+ 	(union _Jv_InterpPC): New.
+ 	(class _Jv_InterpException): Changed types to _Jv_InterpPC.
+ 	(class _Jv_InterpMethod): Added new `prepared' field.
+ 	(class _Jv_InterpMethod): Added `compile' method.  Removed
+ 	`continue1' and `find_exception'.  Changed arguments to `run'.
+ 	* interpret.cc (union insn_slot): New.
+ 	(find_exception): Removed.
+ 	(run_normal): Removed most logic.
+ 	(run_synch_object): Likewise; also, use JvSynchronize.
+ 	(run_synch_class): Likewise.
+ 	(run): Removed.
+ 	(continue1): Renamed as `run'.  Compile bytecode if required.
+ 	Add new code to allow refinement of direct-threaded code at
+ 	runtime.  Handle exceptions.
+ 	(SAVE_PC): Removed.
+ 	(compile): New method.
+ 	(SET_ONE, SET_INSN, SET_INT, SET_DATUM): New defines.
+ 	(NULLARRAYCHECK): Don't use SAVE_PC.
+ 	(pc_t): New typedef.
+ 	(TAKE_GOTO, GET1S, GET1U, GET2U, AVAL1U, AVAL2U, AVAL2UP,
+ 	SKIP_GOTO, GOTO_VAL, PCVAL, AMPAMP): New macros.
+ 
+ 2002-06-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (INTERPRETER): New subst.
+ 	(AM_RUNTESTFLAGS): Don't subst.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am ($(srcdir)/java/lang/Object.h,
+ 	$(srcdir)/java/lang/Class.h): Added dummy targets.
+ 
+ 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.
+ 	* Makefile.am: Add new files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-06-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR libgcj/7073:
+ 	* resolve.cc (_Jv_PrepareClass): Only resolve superclass if it
+ 	exists.
+ 	* defineclass.cc (handleClassBegin): Superclass for interface is
+ 	`null'.
+ 
+ 2002-06-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gcj/javaprims.h: Updated class declaration list.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (core_java_source_files): Removed
+ 	BasicMapEntry.java.
+ 	* java/util/BasicMapEntry.java: Removed.
+ 
+ 2002-06-18  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc (receive):
+ 	Check bounds of argument to FD_SET.
+ 	(setOption): Throw exception if socket is closed.
+ 
+ 	* java/net/natPlainSocketImpl.cc (accept, read):
+ 	Check bounds of argument to FD_SET.
+ 	(setOption): Throw exception if socket is closed.
+ 
+ 2002-06-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gcj/javaprims.h: Updated class declaration list.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (core_java_source_files): Added
+ 	PropertyPermissionCollection.java.
+ 	* java/lang/Thread.java (group, name): Now package-private.
+ 	* java/lang/ThreadGroup.java: Re-merge with Classpath.
+ 	* java/util/AbstractList.java: Likewise.
+ 	* java/util/AbstractMap.java: Likewise.
+ 	* java/util/Calendar.java: Likewise.
+ 	* java/util/Collections.java: Likewise.
+ 	* java/util/HashMap.java: Likewise.
+ 	* java/util/Hashtable.java: Likewise.
+ 	* java/util/LinkedHashMap.java: Likewise.
+ 	* java/util/LinkedList.java: Likewise.
+ 	* java/util/List.java: Likewise.
+ 	* java/util/ListResourceBundle.java: Likewise.
+ 	* java/util/Map.java: Likewise.
+ 	* java/util/Observable.java: Likewise.
+ 	* java/util/Properties.java: Likewise.
+ 	* java/util/PropertyPermission.java: Likewise.
+ 	* java/util/PropertyPermissionCollection.java: Likewise.
+ 	* java/util/PropertyResourceBundle.java: Likewise.
+ 	* java/util/Random.java: Likewise.
+ 	* java/util/SimpleTimeZone.java: Likewise.
+ 	* java/util/StringTokenizer.java: Likewise.
+ 	* java/util/TimerTask.java: Likewise.
+ 	* java/util/TreeMap.java: Likewise.
+ 	* java/util/WeakHashMap.java: Likewise.
+ 	* java/util/jar/Attributes.java: Likewise.
+ 	* java/util/jar/JarException.java: Likewise.
+ 	* java/util/jar/Manifest.java: Likewise.
+ 
+ 2002-06-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gcj/javaprims.h: Updated class declaration list.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (core_java_source_files): Added new file.
+ 	* java/util/EventListenerProxy.java: New file.
+ 	* java/util/EventListener.java: Re-merge with Classpath.
+ 	* java/util/EventObject.java: Re-merge with Classpath.
+ 
+ 2002-06-17  Nathanael Nerode  <neroden@twcny.rr.com>
+ 
+ 	* java/lang/ClassNotFoundException.java: New Classpath version.
+ 
+ 2002-06-17  Nathanael Nerode  <neroden@twcny.rr.com>
+ 
+ 	* java/rmi/activation/ActivateFailedException.java: Remerge from
+ 	Classpath version.
+ 	* java/rmi/activation/ActivationException.java: Ditto.
+ 	* java/rmi/activation/UnknownGroupException.java: Ditto.
+ 	* java/rmi/activation/UnknownObjectException.java: Ditto.
+ 	* java/rmi/server/ExportException: Ditto.
+ 	* java/rmi/server/ServerCloneException: Ditto.
+ 	* java/rmi/server/ServerNotActiveException: Ditto.
+ 	* java/rmi/server/SkeletonMismatchException: Ditto.
+ 	* java/rmi/server/SkeletonNotFoundException: Ditto.
+ 	* java/rmi/server/SocketSecurityException: Ditto.
+ 
+ 2002-06-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gcj/javaprims.h: Updated class declaration list.
+ 
+ 	* java/io/LineNumberInputStream.java: Merged with Classpath.
+ 
+ 	* java/lang/RuntimeException.java: Re-merge with Classpath.
+ 	* java/util/ArrayList.java: Likewise.
+ 	* java/util/Arrays.java: Likewise.
+ 	* java/util/BitSet.java: Likewise.
+ 	* java/util/Dictionary.java: Likewise.
+ 	* java/util/IdentityHashMap.java: Likewise.
+ 	* java/util/MissingResourceException.java: Likewise.
+ 	* java/util/Observer.java: Likewise.
+ 	* java/util/TooManyListenersException.java: Likewise.
+ 	* java/util/zip/DataFormatException.java: Likewise.
+ 	* java/util/zip/ZipException.java: Likewise.
+ 
+ 2002-06-16  Nathanael Nerode  <neroden@twcny.rr.com>
+ 
+ 	* java/rmi/AccessException.java: Remerge from Classpath.
+ 	* 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/ServerError.java: Ditto.
+ 	* java/rmi/ServerException.java: Ditto.
+ 	* java/rmi/ServerRuntimeException.java: Ditto.
+ 	* java/rmi/StubNotFoundException.java: Ditto.
+ 	* java/rmi/UnexpectedExcpetion.java: Ditto.
+ 	* java/rmi/UnknownHostException.java: Ditto.
+ 	* java/rmi/UnmarshalException.java: Ditto.
+ 
+ 2002-06-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/AbstractMethodError.java: Re-merged with Classpath.
+ 	* java/lang/ArithmeticException.java: Likewise.
+ 	* java/lang/ArrayIndexOutOfBoundsException.java: Likewise.
+ 	* java/lang/ArrayStoreException.java: Likewise.
+ 	* java/lang/Byte.java: Likewise.
+ 	* java/lang/CharSequence.java: Likewise.
+ 	* java/lang/ClassCastException.java: Likewise.
+ 	* java/lang/ClassCircularityError.java: Likewise.
+ 	* java/lang/ClassFormatError.java: Likewise.
+ 	* java/lang/CloneNotSupportedException.java: Likewise.
+ 	* java/lang/Cloneable.java: Likewise.
+ 	* java/lang/Comparable.java: Likewise.
+ 	* java/lang/Compiler.java: Likewise.
+ 	* java/lang/Error.java: Likewise.
+ 	* java/lang/ExceptionInInitializerError.java: Likewise.
+ 	* java/lang/IllegalAccessError.java: Likewise.
+ 	* java/lang/IllegalAccessException.java: Likewise.
+ 	* java/lang/IllegalArgumentException.java: Likewise.
+ 	* java/lang/IllegalMonitorStateException.java: Likewise.
+ 	* java/lang/IllegalStateException.java: Likewise.
+ 	* java/lang/IllegalThreadStateException.java: Likewise.
+ 	* java/lang/IncompatibleClassChangeError.java: Likewise.
+ 	* java/lang/IndexOutOfBoundsException.java: Likewise.
+ 	* java/lang/InheritableThreadLocal.java: Likewise.
+ 	* java/lang/InstantiationError.java: Likewise.
+ 	* java/lang/InstantiationException.java: Likewise.
+ 	* java/lang/InternalError.java: Likewise.
+ 	* java/lang/InterruptedException.java: Likewise.
+ 	* java/lang/LinkageError.java: Likewise.
+ 	* java/lang/NegativeArraySizeException.java: Likewise.
+ 	* java/lang/NoClassDefFoundError.java: Likewise.
+ 	* java/lang/NoSuchFieldError.java: Likewise.
+ 	* java/lang/NoSuchFieldException.java: Likewise.
+ 	* java/lang/NoSuchMethodError.java: Likewise.
+ 	* java/lang/NoSuchMethodException.java: Likewise.
+ 	* java/lang/NullPointerException.java: Likewise.
+ 	* java/lang/NumberFormatException.java: Likewise.
+ 	* java/lang/OutOfMemoryError.java: Likewise.
+ 	* java/lang/Process.java: Likewise.
+ 	* java/lang/Runnable.java: Likewise.
+ 	* java/lang/RuntimePermission.java: Likewise.
+ 	* java/lang/SecurityException.java: Likewise.
+ 	* java/lang/Short.java: Likewise.
+ 	* java/lang/StackOverflowError.java: Likewise.
+ 	* java/lang/StringIndexOutOfBoundsException.java: Likewise.
+ 	* java/lang/ThreadDeath.java: Likewise.
+ 	* java/lang/ThreadLocal.java: Likewise.
+ 	* java/lang/UnknownError.java: Likewise.
+ 	* java/lang/UnsatisfiedLinkError.java: Likewise.
+ 	* java/lang/UnsupportedClassVersionError.java: Likewise.
+ 	* java/lang/UnsupportedOperationException.java: Likewise.
+ 	* java/lang/VerifyError.java: Likewise.
+ 	* java/lang/VirtualMachineError.java: Likewise.
+ 	* java/lang/reflect/InvocationTargetException.java: Likewise.
+ 	* java/net/BindException.java: Likewise.
+ 	* java/net/ConnectException.java: Likewise.
+ 	* java/net/MalformedURLException.java: Likewise.
+ 	* java/net/NoRouteToHostException.java: Likewise.
+ 	* java/net/ProtocolException.java: Likewise.
+ 	* java/net/SocketException.java: Likewise.
+ 	* java/net/UnknownHostException.java: Likewise.
+ 	* java/net/UnknownServiceException.java: Likewise.
+ 
+ 	* java/io/BufferedOutputStream.java: Re-merged with Classpath.
+ 	* java/io/CharConversionException.java: Likewise.
+ 	* java/io/EOFException.java: Likewise.
+ 	* java/io/FileNotFoundException.java: Likewise.
+ 	* java/io/IOException.java: Likewise.
+ 	* java/io/InterruptedIOException.java: Likewise.
+ 	* java/io/InvalidClassException.java: Likewise.
+ 	* java/io/InvalidObjectException.java: Likewise.
+ 	* java/io/NotActiveException.java: Likewise.
+ 	* java/io/NotSerializableException.java: Likewise.
+ 	* java/io/ObjectStreamException.java: Likewise.
+ 	* java/io/ObjectStreamConstants.java: Likewise.
+ 	* java/io/OptionalDataException.java: Likewise.
+ 	* java/io/PipedInputStream.java: Likewise.
+ 	* java/io/PushbackInputStream.java: Likewise.
+ 	* java/io/StreamCorruptedException.java: Likewise.
+ 	* java/io/SyncFailedException.java: Likewise.
+ 	* java/io/UTFDataFormatException.java: Likewise.
+ 	* java/io/UnsupportedEncodingException.java: Likewise.
+ 	* java/io/WriteAbortedException.java: Likewise.
+ 
+ 2002-06-15  Nathanael Nerode  <neroden@twcny.rr.com>
+ 
+ 	* java/text/ChoiceFormat.java: Update comments from Classpath.
+ 	* java/text/ParseException.java (serialVersionUID): New
+ 	field from Classpath.
+ 	* java/text/ParseException.java: Update formatting & comments
+ 	from Classpath.
+ 
+ 2002-06-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/zip/InflaterInputStream.java (read): Loop if data has
+ 	been read but none output by inflater.
+ 	* java/util/zip/natDeflater.cc (reset): Set is_finished.
+ 	* java/util/zip/natInflater.cc (reset): Set dist_needed and
+ 	is_finished.
+ 	* java/util/zip/ZipOutputStream.java: Replaced with Classpath
+ 	version.
+ 	* java/util/zip/ZipFile.java: Replaced with Classpath version.
+ 	* java/util/zip/ZipEntry.java: Replaced with Classpath version.
+ 	* java/util/zip/ZipInputStream.java: Replaced with Classpath
+ 	version.
+ 	* java/util/zip/ZipConstants.java: Replaced with Classpath version.
+ 
+ 2002-06-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natString.cc (init): Handle case where DONT_COPY is
+ 	true and OFFSET!=0.
+ 	* java/lang/String.java (String(char[],int,int,boolean): New
+ 	constructor.
+ 	* java/lang/Long.java: Imported new version from Classpath.
+ 	* java/lang/Number.java: Likewise.
+ 	* java/lang/Integer.java: Likewise.
+ 	* java/lang/Long.java: Likewise.
+ 	* java/lang/Float.java: Likewise.
+ 	* java/lang/Boolean.java: Likewise.
+ 	* java/lang/Double.java: Likewise.
+ 	* java/lang/Void.java: Likewise.
+ 
+ 2002-06-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/natFilePosix.cc (getCanonicalPath): Treat "" like ".".
+ 	Fixes PR libgcj/6652.
+ 
+ 2002-06-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Class.h (Class::desiredAssertionStatus): Declare.
+ 	(Class::getPackagePortion): Likewise.
+ 	* java/lang/Class.java (desiredAssertionStatus): New method from
+ 	Classpath.
+ 	(getPackagePortion): Likewise.
+ 	* java/lang/VMClassLoader.java (defaultAssertionStatus,
+ 	packageAssertionStatus, classAssertionStatus): New methods from
+ 	Classpath.
+ 	* java/lang/ClassLoader.java (defaultAssertionStatus,
+ 	systemPackageAssertionStatus, packageAssertionStatus,
+ 	systemClassAssertionStatus, classAssertionStatus): New fields from
+ 	Classpath.
+ 	(setDefaultAssertionStatus, setPackageAssertionStatus,
+ 	setClassAssertionStatus, clearAssertionStatus): New methods from
+ 	Classpath.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (core_java_source_files): Added AssertionError.java.
+ 	* java/lang/AssertionError.java: New from Classpath.
+ 
+ 2002-06-10  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* configure.host: Disable hash synchronization and slow_pthread_self
+ 	for cygwin.
+ 
+ 2002-06-06  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/io/natFileDescriptorWin32.cc (open): Disable Win32 file
+ 	locking, just like the Sun JVM does.
+ 
+ 2002-06-05  H.J. Lu  (hjl@gnu.org)
+ 
+ 	* Makefile.am (libgcj_convenience.la): Revert the last change.
+ 	(libgcj.la): Likewise.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-06-04  H.J. Lu  (hjl@gnu.org)
+ 
+ 	* Makefile.am (libgcj_convenience.la): New target.
+ 	(libgcj.la): Depend on libgcj_convenience.la.
+ 	* Makefile.in: Regenerated.
+ 
+ 2002-06-04  H.J. Lu  (hjl@gnu.org)
+ 
+ 	* configure.in (--with-newlib): New option:
+ 	Check ${with_newlib} instead of ${with_cross_host} for newlib.
+ 	(HAVE_PROC_SELF_EXE): Defined to 1 only for cross compiling to
+ 	Linux.
+ 	* configure: Regenerated.
+ 
+ 2002-06-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/natTimeZone.cc: Include <stdio.h>.
+ 
+ 2002-05-29  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* configure.host [s390*-linux*]: Set can_unwind_signal=yes.
+ 	* configure.in [s390*-*-linux*]: Do not define HAVE_BACKTRACE.
+ 	Set SIGNAL_HANDLER=include/s390-linux.h.
+ 	* configure: Regenerate.
+ 	* include/s390-linux.h: New file.
+ 
+ 2002-05-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/lang/natThrowable.cc (fillInStackTrace): Use "stackTraceBytes",
+ 	not "stackTrace".
+ 
+ 2002-05-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	Merge JDK 1.4 java.security changes from classpath.
+ 
+ 	* java/security/AccessControlException.java: Merge from Classpath.
+ 	* java/security/AccessController.java: Likewise.
+ 	* java/security/AllPermission.java: Likewise.
+ 	* java/security/BasicPermission.java: Likewise.
+ 	* java/security/Certificate.java: Likewise.
+ 	* java/security/CodeSource.java: Likewise.
+ 	* java/security/DigestException.java: Likewise.
+ 	* java/security/DigestOutputStream.java: Likewise.
+ 	* java/security/DomainCombiner.java: Likewise.
+ 	* java/security/GeneralSecurityException.java: Likewise.
+ 	* java/security/Guard.java: Likewise.
+ 	* java/security/GuardedObject.java: Likewise.
+ 	* java/security/InvalidAlgorithmParameterException.java: Likewise.
+ 	* java/security/InvalidKeyException.java: Likewise.
+ 	* java/security/InvalidParameterException.java: Likewise.
+ 	* java/security/Key.java: Likewise.
+ 	* java/security/KeyException.java: Likewise.
+ 	* java/security/KeyManagementException.java: Likewise.
+ 	* java/security/KeyStoreException.java: Likewise.
+ 	* java/security/MessageDigest.java: Likewise.
+ 	* java/security/NoSuchAlgorithmException.java: Likewise.
+ 	* java/security/NoSuchProviderException.java: Likewise.
+ 	* java/security/Permission.java: Likewise.
+ 	* java/security/PermissionCollection.java: Likewise.
+ 	* java/security/Permissions.java: Likewise.
+ 	* java/security/Policy.java: Likewise.
+ 	* java/security/Principal.java: Likewise.
+ 	* java/security/PrivateKey.java: Likewise.
+ 	* java/security/PrivilegedAction.java: Likewise.
+ 	* java/security/PrivilegedActionException.java: Likewise.
+ 	* java/security/PrivilegedExceptionAction.java: Likewise.
+ 	* java/security/ProtectionDomain.java: Likewise.
+ 	* java/security/ProviderException.java: Likewise.
+ 	* java/security/PublicKey.java: Likewise.
+ 	* java/security/SecureClassLoader.java: Likewise.
+ 	* java/security/SecurityPermission.java: Likewise.
+ 	* java/security/SignatureException.java: Likewise.
+ 	* java/security/UnrecoverableKeyException.java: Likewise.
+ 	* java/security/UnresolvedPermission.java: Likewise.
+ 	* java/security/acl/AclNotFoundException.java: Likewise.
+ 	* java/security/acl/LastOwnerException.java: Likewise.
+ 	* java/security/acl/NotOwnerException.java: Likewise.
+ 	* java/security/cert/CRLException.java: Likewise.
+ 	* java/security/cert/CertificateEncodingException.java: Likewise.
+ 	* java/security/cert/CertificateException.java: Likewise.
+ 	* java/security/cert/CertificateExpiredException.java: Likewise.
+ 	* java/security/cert/CertificateFactory.java: Likewise.
+ 	* java/security/cert/CertificateNotYetValidException.java: Likewise.
+ 	* java/security/cert/CertificateParsingException.java: Likewise.
+ 	* java/security/spec/InvalidKeySpecException.java: Likewise.
+ 	* java/security/spec/InvalidParameterSpecException.java: Likewise.
+ 
+ 	* java/security/cert/CertPath.java: New file.
+ 	* java/security/cert/CertPathBuilderException.java: New file.
+ 	* java/security/cert/CertPathValidatorException.java: New file.
+ 	* java/security/cert/CertStoreException.java: New file.
+ 
+ 	* Makefile.am: Add new CertPath classes.
+ 	* Makefile.in: Rebuilt.
+ 
+ 	* gnu/java/util/EmptyEnumeration.java: New file from classpath.
+ 
+ 2002-05-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	Merge JDK 1.4 exception chaining support from classpath.
+ 
+ 	* java/lang/Throwable.java: Merge 1.4 support from classpath.
+ 	(stackTraceBytes): Rename from stackTrace.
+ 	* java/lang/Exception.java: Merge from classpath.
+ 	* java/lang/StackTraceElement: New file from classpath.
+ 	* gcj/javaprims.h: Rebuild CNI namespace declarations.
+ 	* Makefile.am: Add StackTraceElement.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-05-23  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* Makefile.am (all-recursive): Depend on $all_java_class_files so that
+ 	they build first.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-05-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* acinclude.m4: Allow for PWDCMD to override hardcoded pwd.
+ 	* configure.in: Likewise.
+ 	* aclocal.m4: Regenerate.
+ 	* configure: Regenerate.
+ 
+ 2002-05-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natRuntime.cc: Don't include sys/time.h and time.h.
+ 	* java/util/natTimeZone.cc: Include sys/time.h and time.h here.
+ 	Include platform.h.
+ 
+ 	Fixes PR libgcj/6389:
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_source_files): Added natTimeZone.cc.
+ 	* java/util/natTimeZone.cc: New file.
+ 	* java/util/TimeZone.java (getDefaultTimeZoneId): New method.
+ 	* java/lang/System.java: Merged with Classpath.
+ 	* java/lang/Runtime.java: Merged with Classpath.
+ 	* java/lang/natSystem.cc (setErr0): Renamed from setErr; don't run
+ 	security check.
+ 	(setIn0): Renamed from setIn; don't run security check.
+ 	(setOut0): Renamed from setOut; don't run security check.
+ 	(file_encoding, getpwuid_adaptor, getSystemTimeZone,
+ 	init_properties): Moved to natRuntime.cc.
+ 	Moved many includes to natRuntime.cc.
+ 	(isWordsBigEndian): New method.
+ 	* java/lang/natRuntime.cc: Include Long.h, also other includes
+ 	previously in natSystem.cc.
+ 	(maxMemory): New function.
+ 	(exitInternal): Renamed from `_exit'.
+ 	(exit): Removed.
+ 	(init): Don't set finalize_on_exit.
+ 	(exitInternal): Use `finalizeOnExit'.
+ 	(file_encoding, getpwuid_adaptor): New functions from
+ 	natSystem.cc.
+ 	(insertSystemProperties): New method, renamed from
+ 	System::init_properties.  Don't set user.timezone.
+ 	(_load): Don't call checkLink.
+ 	(execInternal): New method.
+ 	(availableProcessors): Likewise.
+ 	(nativeGetLibname): Likewise.
+ 
+ 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-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc (_Jv_JNIFunctions): Fixed typo.
+ 
+ 	* java/util/ResourceBundle.java: New version from Classpath.
+ 	* java/util/Locale.java: Likewise.
+ 
+ 2002-05-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* testsuite/lib/libjava.exp (libjava_arguments): Append all
+ 	multilib dirs containing libgcc_s*.so.1 below gcc object dir to
+ 	LD_LIBRARY_PATH.
+ 
+ 2002-05-08  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* libjava/Makefile.am (all_java_source_files): New variable.
+ 	(all_java_class_files): Likewise.
+ 	.java.class: New rule.
+ 	(CLEANFILES): Remove tmp-list.
+ 	* libjava/Makefile.in: Regenerated.
+ 
+ 2002-05-09  David.Billinghurst  <David.Billinghurst@riotinto.com>
+ 
+ 	* testsuite/lib/libjava.exp (test_libjava_from_javac):
+ 	Append .exe to executable names.  Fix for cygwin.
+ 
+ 2002-05-08  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at
+ 	script entry, and set LD to it when configuring multilibs.
+ 	* configure: Rebuilt.
+ 
+ 2002-05-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natString.cc (unintern): Fixed typo.
+ 
+ 2002-05-06  David.Billinghurst  <David.Billinghurst@riotinto.com>
+ 
+ 	* testsuite/lib/libjava.exp (libjava_arguments): Don't link
+ 	with -no-install on *-*-cygwin*.
+ 
+ 2002-05-06  David.Billinghurst  <David.Billinghurst@riotinto.com>
+ 
+ 	* testsuite/lib/libjava.exp (test_libjava_from_source):
+ 	Add comment explaining last patch
+ 
+ 2002-05-04  David Billinghurst  <David.Billinghurst@riotinto.com>
+ 
+ 	* testsuite/lib/libjava.exp (test_libjava_from_source):
+ 	Append .exe to executable names.  If no suffix is present,
+ 	then ".exe" is added by default on win32.  Harmless
+ 	elsewhere so always do it.
+ 
+ 2002-05-03  David Billinghurst  <David.Billinghurst@riotinto.com>
+ 	    Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natSystem.cc (getSystemTimeZone): Use
+ 	HAVE_UNDERSCORE_TIMEZONE.
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h (HAVE_UNDERSCORE_TIMEZONE, HAVE_BACKTRACE): Undef.
+ 	* aclocal.m4, configure: Rebuilt.
+ 	* acinclude.m4: Run AC_EXEEXT.
+ 	* configure.in: Adjust test for `timezone' so it fails on Cygwin.
+ 	Add test for `_timezone'.
+ 
+ 2002-05-03  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	Suggested by Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+ 	* Makefile.am (jv_convert_LDADD): Bring -L.libs to the front.
+ 	(gij_LDADD, rmic_LDADD, rmiregistry_LDADD): Likewise.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-05-02  Hans Boehm  <Hans_Boehm@hp.com>
+ 
+ 	* include/dwarf2-signal.h (INIT_SEGV, INIT_FPE for ia64):
+ 	use sigaction instead of __libc_sigaction.
+ 
+ 2002-05-02  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* testsuite/lib/libjava.exp (libjava_find_spec): New function.
+ 	(libjava_init): Use it to find libgcj.spec.
+ 	(libjava_arguments): Likewise.
+ 
+ 2002-05-02  David S. Miller  <davem@redhat.com>
+ 
+ 	PR bootstrap/6525
+ 	* include/dwarf2-signal.h (INIT_SEGV, INIT_FPE): Don't use
+ 	__libc_sigaction on Sparc.
+ 
+ 2002-05-02  Jerome Marc  <marcjero@yahoo.com>
+ 
+ 	* java/net/natPlainSocketImpl.cc: Include sys/ioctl.h and
+ 	sys/filio.h, if present.
+ 
+ 2002-04-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/BufferedReader.java (fill): Handle case where markPos
+ 	point to ignored \n.  Fixes PR libgcj/6301.
+ 
+ 2002-04-29  Gerhard Tonn  <GerhardTonn@swol.de>
+ 
+ 	* java/lang/ieeefp.h: Define __IEEE_BIG_ENDIAN for S/390.
+ 
+ 2002-04-29  Adam King <aking@dreammechanics.com>
+ 
+ 	* java/io/natFileDescriptorWin32.cc (open): Move file pointer to end
+ 	of file in APPEND mode.
+ 
+ 2002-04-25  David S. Miller  <davem@redhat.com>
+ 
+ 	PR target/6422
+ 	* include/dwarf2-signal.h (MAKE_THROW_FRAME for sparc*): Set
+ 	program counter to next program counter minus 8.  Update
+ 	comments in this macro to explain why.
+ 
+ 2002-04-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (construct_primitive_array_type) [void_type]: New
+ 	case.
+ 	(branch_prepass): Added dummy entries for unused instruction
+ 	values.
+ 	(verify_instructions_0): Likewise.
+ 	* interpret.cc (continue1): Comment fix.
+ 	* include/java-insns.h (op_xxxunusedxxx1): Removed.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am: Added -Wswitch-enum.
+ 
+ 2002-04-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/natCore.cc (create): Use __builtin_alloca, and compute
+ 	correct length of UTF-8 encoded name.  Strip leading `/'.
+ 	(_Jv_RegisterResource): Use _Jv_Malloc.
+ 
+ 2002-04-23  Adam Megacz <adam@xwt.org>
+ 
+ 	* win32.cc, include/win32.cc (backtrace): Added this function
+ 	because Win32 does not supply it.
+ 
+ 2002-04-21  David S. Miller  <davem@redhat.com>
+ 
+ 	* include/dwarf2-signal.h (MAKE_THROW_FRAME, sparc32): Document
+ 	magic instruction reading sequence.
+ 
+ 2002-04-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* mauve-libgcj: Don't run java.lang.ref tests since they are buggy.
+ 
+ 2002-04-19  David S. Miller  <davem@redhat.com>
+ 
+ 	* include/dwarf2-signal.h (SIGNAL_HANDLER): Name siginfo_t pointer
+ 	arg.
+ 	(MAKE_THROW_FRAME): Define for 32-bit and 64-bit sparc.
+ 	(INIT_SEGV, INIT_FPE): Use direct __libc_sigaction installation
+ 	on Sparc too.
+ 	* include/sparc-signal.h (FLUSH_REGISTER_WINDOWS): Define properly
+ 	for 64-bit sparc.
+ 	(MAKE_THROW_FRAME): Use long for sp/retaddr so 64-bit works.
+ 	* sysdeps/sparc/locks.h: New file.
+ 	* configure.in (SIGNAL_HANDLER): Set to include/sparc-signal.h
+ 	on all sparc Solaris configurations.  Set to
+ 	include/dwarf2-signal.h on sparc Linux.
+ 	* configure: Regenerate
+ 	* configure.host (can_unwind_signal): sparc*-linux* can do it now.
+ 
+ 2002-04-19  Hans Boehm <Hans_Boehm@hp.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (backtrace): Function doesn't work on IA-64.
+ 
+ 2002-04-17  Adam King <aking@dreammechanics.com>
+ 
+ 	* java/io/File.java (normalizePath): Add Win32 support for auto
+ 	conversion of a '/' path separator to Win32's '\' separator.
+ 
+ 2002-04-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/6081:
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (install-data-local): Use GNU make trick to avoid
+ 	shell limit.
+ 
+ 2002-04-16  Adam King <aking@dreammechanics.com>
+ 	    Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/natFileWin32.cc (performList): Return the correct array
+ 	type.  Don't duplicate the creation of a File since it's already
+ 	done earlier in the method and the existing code would cause a
+ 	ArrayStoreException.  Don't use fixed-size array.
+ 	(_access, _stat, attr, getCanonicalPath, performMkdir,
+ 	performRenameTo): Don't use fixed-size array.
+ 	(getCanonicalPath): Use throw, not _Jv_Throw.
+ 
+ 2002-04-15  DJ Delorie  <dj@redhat.com>
+ 
+ 	* configure.in: Allow building in $srcdir.
+ 	* configure: Regenerated.
+ 
+ 2002-04-14  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc (close): Set timeout to 0.
+ 	* java/net/natSocketImpl.cc (close): Likewise.
+ 
+ 2002-04-14  Mark Wielaard <mark@klomp.org>
+ 
+ 	* gnu/gcj/protocol/http/Connection.java (usingProxy): return false.
+ 
+ 2002-04-13  Adam King <aking@dreammechanics.com>
+ 
+ 	* java/lang/natDouble.cc (parseDouble): Allow a number to end with
+ 	the f/F/d/D modifiers.
+ 
+ 2002-04-12  Anthony Green  <green@redhat.com>
+ 
+ 	* Makefile.am (jardir, jar_DATA): Define (for libgcj.jar).
+ 	Create libgcj-@gcc_version@.jar instead of libgcj.jar.
+ 	* Makefile.in: Rebuilt.
+ 	* configure.in: Substitute gcc_version.
+ 	* configure: Rebuilt.
+ 
+ 2002-04-11  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* configure.host: Set can_unwind_signal on hosts which support it.
+ 	Don't set CHECKREFSPEC and DIVIDESPEC for FreeBSD.
+ 	* configure.in: Set CHECKREFSPEC and DIVIDESPEC if not using SJLJ
+ 	exceptions and can_unwind_signal isn't set.
+ 	* configure: Rebuilt.
+ 
+ 2002-04-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* win32.cc (_Jv_platform_initProperties): Fix spelling of _Jv_Free.
+ 
+ 2002-04-11  Adam King <aking@dreammechanics.com>
+ 	    Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/jvm.h (_Jv_ThrowBadArrayIndex,
+ 	_Jv_ThrowNullPointerException): Mark as noreturn.
+ 	* win32.cc (_Jv_platform_initProperties): Use _Jv_MallocUnchecked
+ 	and _Jv_free.  Correctly invoke GetTempPath().  Indentation
+ 	fixes.
+ 
+ 2002-04-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (java/lang/Thread.h): Mark
+ 	_Jv_AttachCurrentThreadAsDaemon as friend.
+ 	* gcj/javaprims.h (_Jv_AttachCurrentThreadAsDaemon): Declare.
+ 	* gcj/cni.h (JvAttachCurrentThreadAsDaemon): New function.
+ 	* java/lang/natThread.cc (_Jv_AttachCurrentThreadAsDaemon): New
+ 	function.
+ 	* java/lang/natRuntime.cc (_load): Recognize JNI_VERSION_1_4.
+ 	* jni.cc (_Jv_JNI_GetVersion): Return JNI_VERSION_1_4.
+ 	(_Jv_JNI_InvokeFunctions): Added
+ 	_Jv_JNI_AttachCurrentThreadAsDaemon.
+ 	(_Jv_JNI_GetEnv): Handle JNI_VERSION_1_4.
+ 	(JNI_GetDefaultJavaVMInitArgs): Likewise.
+ 	(JNI_CreateJavaVM): Likewise.
+ 	(_Jv_JNI_AttachCurrentThread): Likewise.
+ 	(_Jv_JNI_AttachCurrentThread): Added `is_daemon' argument.
+ 	(_Jv_JNI_AttachCurrentThreadAsDaemon): New method.
+ 	(_Jv_JNIFunctions): Initialize new fields.
+ 	(_Jv_JNI_NewDirectByteBuffer): New function.
+ 	(_Jv_JNI_GetDirectBufferAddress): Likewise.
+ 	(_Jv_JNI_GetDirectBufferCapacity): Likewise.
+ 	* include/jni.h (JNI_VERSION_1_4): New macro.
+ 	(JNIInvokeInterface::AttachCurrentThreadAsDaemon): New field.
+ 	(_Jv_JavaVM::AttachCurrentThreadAsDaemon): New method.
+ 	(JNINativeInterface::NewDirectByteBuffer): New field.
+ 	(JNINativeInterface::GetDirectBufferAddress): New field.
+ 	(JNINativeInterface::GetDirectBufferCapacity): New field.
+ 	(_Jv_JNIEnv::NewDirectByteBuffer): New method.
+ 	(_Jv_JNIEnv::GetDirectBufferAddress): New method.
+ 	(_Jv_JNIEnv::GetDirectBufferCapacity): New method.
+ 
+ 2002-04-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* win32.cc (_Jv_platform_initProperties): Use GetTempPath.
+ 
+ 2002-04-08  Alberto Biancardi  <alberto.biancardi@unipv.it>
+ 
+ 	Fix for PR libgcj/6187:
+ 	* java/awt/geom/Point2D.java (distance): Call distanceSq, not
+ 	distance.
+ 
+ 2002-04-07  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/AbstractMap.java (putAll): Use entrySet size.
+ 	(toString): Explicitly use getKey() and getValue().
+ 
+ 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-07  Adam King <aking@dreammechanics.com>
+ 
+ 	* java/lang/natSystem.cc (init_properties): Call new function
+ 	_Jv_platform_initProperties.
+ 	* win32.cc (_Jv_platform_initProperties): New function that adds Win32
+ 	support for the System properties os.name, os.arch, os.version,
+ 	user.name, user.home, and user.dir.
+ 	* include/posix.h, include/win32.h, posix.cc: New function
+ 	_Jv_platform_initProperties.
+ 
+ 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.java (removeRange): If toIndex == fromIndex do
+ 	nothing, if toIndex < fromIndex throw IndexOutIfBoundsException.
+ 
+ 2002-04-05  Adam Megacz <adam@xwt.org>
+ 
+ 	* exception.cc (abort): added static modifier
+ 
+ 2002-04-04  Adam Megacz <adam@xwt.org>
+ 
+ 	* include/win32.h (_Jv_platform_close_on_exec): added inline
+ 	modifier.
+ 
+ 2002-04-04  Loren J. Rittle  <ljrittle@acm.org>
+ 
+ 	* configure.host: Add case statement to support generic port
+ 	properties.  Add *-*-freebsd* section.
+ 
+ 2002-04-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* mauve-libgcj: Add JLS1.0 and JLS1.1 tags, ignore Character.unicode
+ 	test.
+ 	* testsuite/libjava.mauve/xfails: Remove working tests DoubleTest,
+ 	FloatTest and ObjectStreamClass. Add FAIL for Introspector.jdk11 tests
+ 	that depend on awt code and BufferedByteOutputStream.interrupt.
+ 
+ 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-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/reflect/Modifier.java (toString(int,StringBuffer)): Fix
+ 	ordering.
+ 
+ 2002-04-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc (findClass): Compare against `3',
+ 	not `0'.
+ 
+ 2002-04-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* mauve-libgcj: add java.net.DatagramSocket.DatagramSocketTest2 to
+ 	list of testsuite crashers.
+ 
+ 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  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* mauve-libgcj: Add JDK1.3, JDK1.4, JLS1.2 tests, remove ignored tests
+ 	that can be compiled now and add testsuite crashers to ignore list.
+ 
+ 2002-03-31  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* libgcj.spec.in, libgcj-test.spec.in: Revert for now.
+ 
+ 	* libgcj.spec.in: Override libgcc, not lib.
+ 	* libgcj-test.spec.in: Likewise.
+ 
+ 2002-03-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc (close): New function.
+ 	* java/net/natPlainSocketImpl.cc (close): Indentation fix.
+ 
+ 2002-03-27  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* java/net/PlainDatagramSocketImpl.java
+ 	(close): Use native implementation.
+ 	(finalize): New method.
+ 
+ 	* java/net/PlainSocketImpl.java (finalize): New method.
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc
+ 	(java/io/FileDescriptor.h): Don't include.
+ 	(close): Implement method here.
+ 	(create): Don't assign fd.
+ 
+ 	* java/net/natPlainSocketImpl.cc
+ 	(java/io/FileDescriptor.h): Don't include.
+ 	(create): Don't assign fd.
+ 	(accept): Likewise.
+ 	(close): Synchronize.
+ 
+ 2002-03-27  Richard Henderson  <rth@redhat.com>
+ 
+ 	* include/posix-threads.h [alpha] (_Jv_ThreadSelf): Avoid a copy.
+ 
+ 2002-03-25  Andrew Haley <aph@cambridge.redhat.com>, Hans Boehm <Hans_Boehm@hp.com>
+ 
+ 	* include/dwarf2-signal.h (MAKE_THROW_FRAME): Add for IA-64.
+ 	(INIT_SEGV, INIT_FPE): Add versions that use __libc_sigaction
+ 	instead of syscall on IA-64.
+ 	Add FIXME comment.
+ 
+ 2002-03-27  Anthony Green  <green@redhat.com>
+ 
+ 	* libgcj.spec.in: Add CHECKREFSPEC.
+ 	* configure.in: Ditto.
+ 	* configure.host: Ditto.  Check references for xscale-elf.
+ 	* configure: Rebuilt.
+ 
+ 2002-03-26  Hans Boehm <Hans_Boehm@hp.com>
+ 
+ 	* include/dwarf2-signal.h: Temporarily back out last change.
+ 
+ 2002-03-26  Loren J. Rittle  <ljrittle@acm.org>
+ 
+ 	* include/posix-threads.h: Support <.../pal.h> on FreeBSD/alpha.
+ 
+ 2002-03-25  Andrew Haley <aph@cambridge.redhat.com>, Hans Boehm <Hans_Boehm@hp.com>
+ 
+ 	* configure.in, configure: enable dwarf2-exception-style
+ 	exception handling on IA-64.
+ 	* include/dwarf2-signal.h (MAKE_THROW_FRAME): Add for IA-64.
+ 	(INIT_SEGV, INIT_FPE): Use __libc_sigaction instead of syscall.
+ 	Add FIXME comment.
+ 
+ 2002-03-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.am (libgcj_la_LDFLAGS): Use THREADLDFLAGS.
+ 	(jv_convert_LDFLAGS): Likewise.
+ 	(gij_LDFLAGS): Likewise.
+ 	(rmic_LDFLAGS): Likewise.
+ 	(rmiregistry_LDFLAGS): Likewise.
+ 	* configure.in (THREADLDFLAGS): New subst; set correctly for
+ 	*BSD.
+ 
+ 2002-03-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR libgcj/5303:
+ 	* gnu/java/rmi/registry/RegistryImpl.java (main): Recognize --help
+ 	and --version.
+ 	(help): New method.
+ 	(version): Likewise.
+ 	* gnu/gcj/convert/Convert.java (version): Removed extraneous
+ 	"GNU".
+ 	* gnu/java/rmi/rmic/RMIC.java (parseOptions): Removed extraneous
+ 	"GNU".
+ 
+ 2002-03-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Component.java (processEvent): Check ComponentEvent
+ 	after KeyEvent.
+ 
+ 2002-03-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/io/PushbackReader.java: Reformat.
+ 
+ 	* java/io/FileInputStream.java (skip): Call fd.getFilePointer() and
+ 	calculate correct number of bytes skipped.
+ 
+ 	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  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/TextComponent.java (TextComponent): Editable by
+ 	default.
+ 
+ 	* 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  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/beans/IntrospectionException.java: Update to 1.4.
+ 	* java/beans/PropertyVetoException.java: Ditto.
+ 
+ 2002-03-24  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* gnu/java/beans/BeanInfoEmbryo.java (hasMethod): Use
+ 	Arrays.equals instead of ArrayHelper.equalsArray.
+ 
+ 2002-03-24  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-03-24  C. Brian Jones <cbj@gnu.org>
+ 
+ 	* java/beans/Introspector.java: reformatting
+ 
+ 2002-03-24  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-03-24  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Thanks to Orp developers
+ 	* gnu/java/beans/editors/NativeBooleanEditor.java (setAsText(String)):
+ 	switch TRUE and FALSE return values.
+ 
+ 2002-03-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/name-finder.h (_Jv_name_finder::myclose): New method.
+ 	* name-finder.cc (_Jv_name_finder): Initialize file descriptors.
+ 
+ 2002-03-23  Michael Smith  <msmith@spinnakernet.com>
+ 
+ 	* java/util/GregorianCalendar.java (minimums, maximums): Correct
+ 	MONTH entry.  Fixes PR libgcj/6045.
+ 
+ 2002-03-23  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* java/nat/natPlainSocketImpl.cc (write): Abort loop on error.
+ 
+ 2002-03-20  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* posix-threads.cc (_Jv_ThreadSelf_out_of_line): Use write_barrier,
+ 	not release_set.
+ 	* sysdep/powerpc/locks.h (write_barrier): New function.
+ 	* sysdep/i386/locks.h (write_barrier): New function.
+ 
+ 2002-03-19  Martin Kahlert  <martin.kahlert@infineon.com>
+ 
+ 	* include/jni.h Use correct C comments.
+ 
+ 2002-03-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/jni.h (JNIIMPORT): New macro.
+ 	(JNIEXPORT): Likewise.
+ 	(JNICALL): Likewise.
+ 
+ 2002-03-18  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* configure.host (i?86-*): Use -fuse-divide-subroutine on Solaris
+ 	systems.
+ 
+ 2002-03-18  Andrew Haley  <aph@cambridge.redhat.com>
+ 
+ 	* include/i386-signal.h (old_i386_kernel_sigaction): New.
+ 	INIT_SEGV: Use old_i386_kernel_sigaction.
+ 	INIT_FP: Likewise.
+ 
+ 2002-03-18  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/lang/natSystem.cc (init_properties): Update VM version
+ 	properties.
+ 	* configure.in: Set GCJVERSION.
+ 	* acconfig.h: Add GCJVERSION.
+ 	* configure: Rebuilt.
+ 	* include/config.h.in: Rebuilt.
+ 
+ 2002-03-17  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/ieeefp.h: Add ARM thumb support (copied from newlib).
+ 
+ 2002-03-17  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	Build a single libgcj.so, without separate gc and zlib libraries.
+ 	* configure.in: Use convenience libraries for boehm-gc and zlib. Set
+ 	SYS_ZLIBS if system zlib is used.
+ 	* configure: Rebuilt.
+ 	* Makefile.am: Use boehm-gc and zlib convenience libraries.
+ 	* Makefile.in: Rebuilt.
+ 	* libtool-version: Increment .so version number.
+ 
+ 	* Makefile.am: Escape quotes in echo.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-03-16  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* Makefile.am: Use empty -classpath flag in addition to -bootclasspath.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-03-15  Anthony Green  <green@redhat.com>
+ 
+ 	* configure.host (FILE): New macro for specifing File
+ 	implementation.
+ 	* configure: Rebuilt.
+ 	* configure.in: Use FILE.  Define HAVE_TIME for newlib targets.
+ 
+ 2002-03-15  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* Makefile.am (jv_convert_LDADD): Don't list libraries that are
+ 	already implicitly brought in from libgcj.la.
+ 	(gij_LDADD, rmic_LDADD, rmiregistry_LDADD): Likewise.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-03-15  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* THANKS: Fix punctuation, alphabetization.
+ 
+ 2002-03-15  Tom Tromey  <tromey@redhat.com>
+ 	    Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	Fix for PR libgcj/5944.
+ 	* gnu/gcj/io/shs.h: Define uint8_t and uint32_t.
+ 
+ 2002-03-15  Anthony Green  <green@redhat.com>
+ 
+ 	* configure.in (tool_include_dir): Define.
+ 	* configure: Rebuilt.
+ 	* gcj/Makefile.am: Install libgcj-config.h relative to
+ 	tool_include_dir.
+ 	* gcj/Makefile: Rebuilt.
+ 	* gcj/libgcj-config.h: Add warning comment.
+ 
+ 2002-03-12  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* configure.host (powerpc*-darwin*): Enable interpreter.
+ 
+ 2002-03-10  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* include/posix.h: Add multiple include header protection.
+ 	* java/net/natPlainSocketImpl.cc: Don't #include <posix.h>.
+ 
+ 2002-03-10  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/net/natPlainSocketImpl.cc: Added #include <platform.h>.
+ 
+ 2002-03-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/GridLayout.java (layoutContainer): Handle case where
+ 	there are no items in container.
+ 
+ 	* java/lang/Win32Process.java: Added comment.
+ 	* include/posix.h (_Jv_platform_close_on_exec): New function.
+ 	Include fcntl.h.
+ 	* include/win32.h (_Jv_platform_close_on_exec): New function.
+ 	* java/net/natPlainSocketImpl.cc (create): Set close-on-exec
+ 	flag.
+ 	(accept): Likewise.
+ 	* java/net/natPlainDatagramSocketImpl.cc (create): Set
+ 	close-on-exec flag.
+ 	* java/io/natFileDescriptorPosix.cc (open): Set close-on-exec
+ 	flag.
+ 
+ 2002-03-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (state::NO_STACK): New constant.
+ 	(state::is_unmerged_ret_state): Handle case where stacktop is
+ 	NO_STACK.
+ 	(state::merge): Handle NO_STACK merges.
+ 	(handle_jsr_insn): Invalidate PC, and use special NO_STACK state
+ 	for instruction following jsr.
+ 	(stacktop, stackdepth): Removed unused variables.
+ 	(pop_jump): Ignore case where all remaining states are skipped.
+ 
+ 2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/awt/ImageMediaEntry: Removed.
+ 	* java/awt/MediaEntry: Removed.
+ 
+ 2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	Hashtable synchronization for PowerPC.
+ 	* configure.in: Define SLOW_PTHREAD_SELF if configure.host set
+ 	slow_pthread_self. Set up symlink for sysdeps directory.
+ 	* configure: Rebuild.
+ 	* configure.host: Document more shell variables. Set sysdeps_dir
+ 	for most platforms. Set slow_pthread_self for i686. Set
+ 	enable_hash_synchronization_default and slow_pthread_self for PowerPC.
+ 	* posix-threads.cc (_Jv_ThreadSelf_out_of_line): Use release_set so
+ 	that memory barrier is emitted where required.
+ 	* prims.cc: 64-bit align static primitive class instances.
+ 	* include/posix-threads.h (_Jv_ThreadSelf for SLOW_PTHREAD_SELF): Add
+ 	read_barrier() to enforce ordering of reads.
+ 	* sysdep/powerpc/locks.h: New file. Implementation of synchronization
+ 	primitives for PowerPC.
+ 	* sysdep/i386/locks.h: New file. Synchronization primitives for i386
+ 	moved from natObject.cc.
+ 	* sysdep/alpha/locks.h: Likewise.
+ 	* sysdep/ia64/locks.h: Likewise.
+ 	* sysdep/generic/locks.h: Likewise.
+ 	* java/lang/natObject.cc: Move thread synchronization primitives to
+ 	system-dependent headers.
+ 
+ 2002-03-09  Adam Megacz  <adam@xwt.org>
+ 
+ 	* java/io/natFileDescriptorWin32.cc (read): Return -1 if zero
+ 	bytes read and no failure code returned.
+ 
+ 2002-03-09  Adam Megacz  <adam@xwt.org>
+ 
+ 	* win32.cc (_CRT_MT, __mingwthr_key_dtor) Added fake
+ 	definitions to simulate -mthreads.
+ 
+ 2002-03-09  Adam Megacz  <adam@xwt.org>
+ 
+ 	* win32.cc (_Jv_platform_gettimeofday) Cast 1000 to long long to
+ 	avoid precision loss.
+ 
+ 2002-03-09  Per Bothner  <per@bothner.com>
+ 
+ 	* gnu/gcj/xlib/WindowAttributes.java  Assign null to RawData, not 0.
+ 	* gnu/gcj/xlib/XImage.java:  Likewise.
+ 	* gnu/gcj/xlib/XColor.java:  Likewise.
+ 
+ 2002-03-09  Adam Megacz  <adam@xwt.org>
+ 
+ 	* java/lang/Win32Process.java (ConcreteProcess): Now throws an
+ 	IOException so that Throwable.printStackTrace fails correctly.
+ 
+ 2002-03-08  Adam Megacz  <adam@xwt.org>
+ 
+ 	* java/net/natPlainSocketImpl.cc (read, write, close): Formatting
+ 	fixed.
+ 
+ 2002-03-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* posix.cc (_Jv_platform_gettimeofday): Make sure result doesn't get
+ 	truncated to int.
+ 
+ 2002-03-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/jni.h: Include stdio.h.
+ 
+ 2002-03-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* posix.cc (internal_gettimeofday): New function.
+ 	(_Jv_select): Use it.
+ 
+ 2002-03-07  Adam Megacz  <adam@xwt.org>
+ 
+ 	* java/net/natPlainSocketImpl.cc: Changed USE_WINSOCK to
+ 	WIN32, and added thunks for read(), write(), and close().
+ 	* java/net/natPlainSocketImpl.cc (accept, read, read):
+ 	Disabled timeouts on WIN32 pending discussion.
+ 
+ 2002-03-07  Adam Megacz  <adam@xwt.org>
+ 
+ 	* win32.cc (_Jv_platform_gettimeofday): Now takes no args,
+ 	returns jlong. Added implementation
+ 	* posix.cc (_Jv_platform_gettimeofday): Now takes no args,
+ 	returns jlong.
+ 	* win32.h (_Jv_platform_gettimeofday): Now takes no args,
+ 	returns jlong.
+ 	* posix.h (_Jv_platform_gettimeofday): Now takes no args,
+ 	returns jlong.
+ 	* java/lang/natSystem.cc (currentTimeMillis): Now uses updated
+ 	_Jv_platform_gettimeofday signature.
+ 
+ 2002-03-07  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/net/natPlainSocketImpl.cc (_Jv_recv): Removed.
+ 	(read): Call recv() directly, not _Jv_recv().
+ 
+ 2002-03-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/natFileDescriptorEcos.cc (init): Don't use
+ 	GetStdHandle.
+ 	* java/io/natFileDescriptorPosix.cc (valid): Don't call stat if FD
+ 	is negative.
+ 	(init): Don't use GetStdHandle.
+ 
+ 	* include/config.h.in: Rebuilt.
+ 	* configure: Rebuilt.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-03-06  Adam Megacz  <adam@xwt.org>
+ 
+ 	* java/io/FileDescriptor.java: Initialize in/out/err in init().
+ 	* java/io/natFileDescriptorWin32.cc (init()): Added function.
+ 	* java/io/natFileDescriptorPosix.cc (init()): Added function.
+ 	* java/io/natFileDescriptorEcos.cc (init()): Added function.
+ 
+ 2002-03-06  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* scripts/unicode-decomp.pl: Move from chartables.pl, and remove
+ 	the code for generating include/java-chartables.h.
+ 	* scripts/unicode-blocks.pl: Move from scripts/blocks.pl, and
+ 	merge with Classpath.
+ 	* scripts/unicode-muncher.pl: Copy from Classpath.
+ 	* scritps/MakeCharTables.java: New file.
+ 	* gnu/gcj/convert/Blocks-3.txt: New file.
+ 	* gnu/gcj/convert/UnicodeData-3.0.0.txt: New file.
+ 	* gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html: New file.
+ 	* gnu/java/lang/CharData.java: Copy from Classpath.
+ 	* Makefile.am (ordinary_java_source_files): Add
+ 	gnu/java/lang/CharData.java.
+ 	* configure.in: Remove --enable-fast-character option.
+ 	* java/lang/Character.java: Merge algorithms and Javadoc with
+ 	Classpath.
+ 	* java/lang/natCharacter.cc: Implement Unicode lookup table more
+ 	efficiently.
+ 	* include/java-chardecomp.h: Regenerate.
+ 	* include/java-chartables.h: Regenerate.
+ 
+ 2002-03-06  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/awt/MediaTracker.java: Implemented.
+ 	* Makefile.am: Add MediaTracker.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-03-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natPosixProcess.cc (fail): Removed.
+ 	(startProcess): Simplified error-handling.  Preserve
+ 	LD_LIBRARY_PATH across exec.
+ 
+ 	* jni.cc (_Jv_LookupJNIMethod): Throw UnsatisfiedLinkError, not
+ 	AbstractMethodError.
+ 
+ 2002-03-03  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* Makefile.am: Use -bootclasspath, not -CLASSPATH.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-03-03 Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/util/Timer (TaskQueue.stop): set elements to zero.
+ 
+ 2002-02-28  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/reflect/natMethod.cc (result): Add void* element.
+ 	(_Jv_CallAnyMethodA): Handle FFI_TYPE_POINTER arguments.  Move
+ 	constructor test.
+ 
+ 2002-02-27  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/net/natInetAddress.cc: Changed USE_WINSOCK to WIN32, added
+ 	'#undef STRICT'.
+ 
+ 2002-02-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natSystem.cc (init_properties): Use __VERSION__.
+ 	* gij.cc (version): Use __VERSION__.
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h (GCJVERSION): Removed.
+ 	* configure: Rebuilt.
+ 	* configure.in (GCJVERSION): Removed.
+ 
+ 2002-02-26  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* acinclude.m4 (LIB_AC_PROG_CXX): Use glibjava_CXX instead of
+ 	glibcpp_CXX, since libjava uses even another CXX.
+ 	* aclocal.m4, configure: Regenerated.
+ 
+ 2002-02-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natPosixProcess.cc (startProcess): Use FD_CLOEXEC, not
+ 	`1'.
+ 
+ 2002-02-25  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* Makefile.am (GCJCOMPILE): Use -fCLASSPATH not -fclasspath. Fixes
+ 	dependency tracking for .java files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-02-24  Adam Megacz  <adam@xwt.org>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc: whops; removed 'make'
+ 	typo. Sorry.
+ 
+ 2002-02-24  Adam Megacz  <adam@xwt.org>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc: Updated #includes
+ 	for Win32, changed #ifdefs to check WIN32 instead of the
+ 	(now-obsolete) USE_WINSOCK, and removed support for socket
+ 	timeouts on Win32 pending further discussion.
+ 
+ 2002-02-24  Adam Megacz  <adam@xwt.org>
+ 
+ 	* win32-threads.cc (_Jv_ThreadInitData): _Jv_Malloc instead of new
+ 	* win32-threads.cc (_Jv_ThreadDestroyData): _Jv_Free instead of
+ 	delete
+ 
+ 2002-02-24  Adam Megacz  <adam@xwt.org>
+ 
+ 	* java/lang/Win32Process.java: Created a dummy class to allow
+ 	build process to run to completion.
+ 
+ 2002-02-24  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA):
+ 	Define ffi_result union for ffi_call result.  Cast
+ 	ffi_result members to jvalue.
+ 
+ 2002-02-23  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* Makefile.in, gcj/Makefile.in, include/Makefile.in: Rebuilt.
+ 	* testsuite/Makefile.in: Likewise.
+ 
+ 2002-02-20  Per Bothner  <per@bothner.com>
+ 
+ 	* java/net/URL.java (getPath):  New JDK 1.3 method.
+ 
+ 	* java/net/URLStreamHandler.java (parseURL):
+ 	It is wrong to prepend '/' to the file part of a relative url.
+ 
+ 	* java/net/URLStreamHandler.java (parseURL):
+ 	Minor optizations - append '/' rather than "/".
+ 
+ 	* java/net/URLStreamHandler.java (parseURL):
+ 	Don't canonicalize "xx/.." or "./" URLs - JDK doesn't.
+ 	We probably should canonicalize for a context-relative url, though.
+ 	* java/net/URL.java (sameFile):  Delegate to URLStreamHandler.
+ 	* java/net/URLStreamHandler.java (canonicalizeFilename):  New helper.
+ 	(sameFile):  New method.  Uses canonicalizeFilename.
+ 
+ 2002-02-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natSystem.cc (init_properties): Include the `Inc.' in
+ 	java.vendor and java.vm.vendor.
+ 	* gnu/java/rmi/rmic/RMIC.java (parseOptions): Only print most
+ 	recent copyright date.
+ 	* gnu/gcj/convert/Convert.java (version): Print `Inc'.
+ 	* gij.cc (version): Print `Inc'.
+ 
+ 2002-02-22  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* acinclude.m4 (CXX): AC_SUBST it, instead of glibcpp_CXX.
+ 	* aclocal.m4, configure: Rebuilt.
+ 
+ 2002-02-20  Per Bothner  <per@bothner.com>
+ 
+ 	* gnu/gcj/protocol/file/Connection.java (conect):  Open the input
+ 	and/or output streams immediately here, instead of using File.exists.
+ 	(inputStream, outputStream):  New fields to save open streams.
+ 	(getInputStream, getOutputStream):  Use already-opened streams.
+ 
+ 2002-02-22  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* acinclude.m4 (LIB_AC_PROG_CXX): Copied from libstdc++-v3.
+ 	Use it.
+ 	* Makefile.am (LIBLINK): Use CXX (and its tag) for linking.
+ 	* aclocal.m4, configure, Makefile.in: Rebuilt.
+ 
+ 2002-02-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/5696:
+ 	* verify.cc (is_assignable_from_slow): Never call
+ 	_Jv_IsAssignableFrom.
+ 	(verify_instructions_0): Added new debug statement.
+ 	(state::print): Print information about whether local has
+ 	changed.
+ 	(state::merge): Don't call note_variable when merging locals.
+ 	(state::set_exception): Removed old FIXME comment.
+ 
+ 2002-02-18  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/net/natPlainDatagramSocketImpl.cc (bind): Call setsockopt to
+ 	enable SO_BROADCAST.
+ 
+ 2002-02-18  Jason Merrill  <jason@redhat.com>
+ 
+ 	* name-finder.cc (toHex): Use word mode, not long long.
+ 
+ 	* gnu/gcj/convert/natIconv.cc (write): Avoid sign-compare warning.
+ 
+ 2002-02-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/5695:
+ 	* verify.cc (is_assignable_from_slow): Check to see if target is
+ 	an Object before checking to see if source is an interface.
+ 	(verify_instructions_0) [op_invokeinterface]: Handle case where
+ 	we're making an interface call on Object.
+ 
+ 2002-02-15  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* Makefile.in: Rebuilt with Eric's change below.
+ 
+ 	* java/lang/natMath.cc (abs(jdouble), abs(jfloat), round(jfloat),
+ 	round(jdouble), min(jfloat), max(jfloat), min(jdouble), min(jfloat)):
+ 	Removed functions which are now implemented in Math.java.
+ 
+ 2002-02-14  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* gcj/javaprims.h (java::lang): Add java::lang::StrictMath.
+ 	* Makefile.am (core_java_source_files): Add
+ 	java/lang/StrictMath.java.
+ 	* java/lang/Math.java: Merge with Classpath.
+ 	* java/lang/StrictMath.java: New file - merge with Classpath.
+ 
+ 2002-02-14  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-02-14  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/security/BasicPermission.java: extends with fully qualified
+ 	classname as workaround for gcj 3.0.4.
+ 
+ 2002-02-14  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-14  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-14  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-13  Todd Stock  <toddastock@yahoo.com>
+ 
+ 	Fix for PR libgcj/5670:
+ 	* verify.cc (is_assignable_from_slow): If `source' is interface,
+ 	recursively look for merge with `target'.
+ 
+ 2002-02-14  Martin Kahlert  <martin.kahlert@infineon.com>
+ 
+ 	* include/jni.h: Fix typo.
+ 
+ 2002-02-13  Martin Kahlert  <martin.kahlert@infineon.com>
+ 
+ 	* jni.cc (_Jv_JNI_AttachCurrentThread): env->locals assigned
+ 	correctly.
+ 
+ 2002-02-13  Todd Stock  <toddastock@yahoo.com>
+ 
+ 	Fix for PR libgcj/5671:
+ 	* verify.cc (state::merge): Handle case where we're merging
+ 	against an interface.
+ 
+ 2002-02-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* exception.cc (std::abort): Mark as noreturn.
+ 
+ 2002-02-12  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/lang/Win32Process.java: Filled in a placeholder
+ 	implementation so Win32 will build.
+ 
+ 2002-02-12  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/io/natFilePosix.cc: Copied this from natFile.cc.
+ 	* java/io/natFile.cc: Removed from repository.
+ 	* configure.in: Added AC_LINK_FILES for natFile${PLATFORM}.
+ 
+ 2002-02-12  Adam Megacz <adam@xwt.org>
+ 
+ 	* win32.cc: Added two #includes to make win32.cc compile.
+ 
+ 2002-02-12  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* boehm.cc (initialized, obj_kind_x, obj_free_list): Removed unused
+ 	declarations.
+ 	(_Jv_InitGC): Don't bother locking, as this is always called from a
+ 	single-thread. Turn off GC_all_interior_pointers. Remove dead code.
+ 
+ 2002-02-11  Adam Megacz <adam@xwt.org>
+ 
+ 	* include/win32.h: Added _Jv_platform_gettimeofday.
+ 	* win32.cc (_Jv_platform_gettimeofday): Added dummy function.
+ 
+ 2002-02-11  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/io/natFileWin32.cc, java/io/natFileDescriptorWin32.cc:
+ 	Added #undef STRICT to make windows.h and
+ 	java/lang/reflect/Modifier.h cooperate.
+ 
+ 2002-02-11  Adam Megacz <adam@xwt.org>
+ 
+ 	* java/io/natFileWin32.cc: Created a placeholder class with lots
+ 	of FIXMEs.
+ 
+ 2002-02-11  Adam Megacz <adam@xwt.org>
+ 
+ 	* exception.cc (_Jv_Throw, PERSONALITY_FUNCTION): Changed
+ 	std::abort() to simply abort(). Also added "fake" std::abort() so
+ 	we can #include unwind-pe.h without having to link against
+ 	libstdc++-v3.
+ 
+ 2002-02-10  Andreas Tobler  <toa@pop.agri.ch>
+ 
+ 	* interpret.cc (continue1) [insn_f2l]: Use PUSHL, not PUSHI.
+ 
+ 2002-02-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* interpret.cc (convert): New function.
+ 	(continue1) [insn_d2i, insn_d2l, insn_f2i, insn_f2l]: Use
+ 	convert.
+ 	Include Long.h.
+ 
+ 2002-02-08  Anthony Green  <green@redhat.com>
+ 
+ 	* configure.host: Add support for xscale-elf embedded target.
+ 
+ 2002-02-08  Martin Kahlert  <martin.kahlert@infineon.com>
+ 
+ 	* jni.cc (_Jv_JNI_NewLocalRef): Make sure, that NULL frame is not
+ 	dereferenced.
+ 	(_Jv_JNI_AttachCurrentThread): Produce full featured env->locals
+ 	frame.
+ 
+ 2002-02-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/natFile.cc (_access): Use __builtin_alloca.
+ 	(_stat): Likewise.
+ 	(attr): Likewise.
+ 	(getCanonicalPath): Likewise.
+ 	(performList): Likewise.
+ 	(performMkdir): Likewise.
+ 	(performSetReadOnly): Likewise.
+ 	(performRenameTo): Likewise.
+ 	(performSetLastModified): Likewise.
+ 	(performCreate): Likewise.
+ 	(performDelete): Likewise.
+ 
+ 2002-02-08  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* HACKING: Fix URL for the automake-gcj.
+ 
+ 2002-02-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natThrowable.cc: Updated copyright.
+ 	* java/io/natFileWin32.cc: Updated copyright.
+ 	* java/io/natFileDescriptorWin32.cc: Updated copyright.
+ 	* win32-threads.cc: Updated copyright.
+ 	* name-finder.cc: Updated copyright.
+ 	* include/name-finder.h: Updated copyright.
+ 
+ 	* include/name-finder.h: Conditionally include sys/wait.h.
+ 	* include/config.h.in: Rebuilt.
+ 
+ 	* java/io/natFile.cc (_access): Don't stack-allocate buffer.
+ 	Size buffer based on real size of string.
+ 	(_stat): Likewise.
+ 	(attr): Likewise.
+ 	(getCanonicalPath): Likewise.
+ 	(performList): Likewise.
+ 	(performMkdir): Likewise.
+ 	(performSetReadOnly): Likewise.
+ 	(unixroot): Removed.
+ 	(performRenameTo): Likewise.
+ 	(performSetLastModified): Likewise.
+ 	(performCreate): Likewise.
+ 	(performDelete): Likewise.
+ 	(performListRoots): Always return new array.
+ 
+ 	* prims.cc (_Jv_CreateJavaVM): Call _Jv_platform_initialize.
+ 	* win32.cc (win32_exception_handler): Now static.
+ 	* include/win32.h (_Jv_platform_initialize): Declare.
+ 	(win32_exception_handler): Don't declare.
+ 	* java/lang/natSystem.cc (currentTimeMillis): Use
+ 	_Jv_platform_gettimeofday.
+ 	* posix.cc (_Jv_platform_gettimeofday): Renamed.
+ 	(_Jv_select): Use new name.
+ 	(_Jv_platform_initialize): New function.
+ 	* include/posix.h (_Jv_platform_gettimeofday): Renamed from
+ 	_Jv_gettimeofday.
+ 	(_Jv_platform_initialize): Declare.
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Removed unnecessary parens.
+ 
+ 2002-02-06  Adam Megacz <adam@xwt.org>
+ 
+        * configure.in: Changed mingw) to *mingw*).
+        * win32.cc: Created this file.
+        * win32.h: Created this file.
+        * win32.cc, prims.cc, win32.h (win32_exception_handler): Moved
+        win32_exception_handler from prims.cc to win32.cc, added
+        header in win32.h.
+        * prims.cc: removed some #ifdef-WIN32'd headers which are no
+        longer needed now that we have platform.h
+ 
+ 2002-02-06  Adam Megacz <adam@xwt.org>
+ 
+ 	* gnu/gcj/io/shs.h, gnu/gcj/io/shs.cc, gnu/gcj/io/natSimpleSHSStream.cc:
+ 	use uint<n>_t instead of LONG and BYTE
+ 
+ 2002-02-06  Adam Megacz <adam@xwt.org>
+ 
+ 	* name-finder.h: don't #include sys/wait.h unless HAVE_SYS_WAIT_H
+ 
+ 2002-02-06  Anthony Green  <green@redhat.com>
+ 
+ 	* java/net/natPlainSocketImpl.cc: Fix DISABLE_JAVA_NET targets.
+ 	Implement missing method stubs.
+ 	java/net/natPlainDatagramSocketImpl.cc: Fix DISABLE_JAVA_NET
+ 	targets.
+ 	* java/lang/natSystem.cc (getSystemTimeZone): Some targets have no
+ 	concept of timezones.
+ 	(init_properties): Don't refer to _Jv_Environment_Properties
+ 	when this feature is not available.
+ 	* include/config.h.in: Rebuilt.
+ 	* acconfig.h: Add DISABLE_MAIN_ARGS.
+ 	* prims.cc (_Jv_RunMain): Use DISABLE_MAIN_ARGS.
+ 	* configure: Rebuilt.
+ 	* configure.in: Add --disable-main-args option.  Test for
+ 	  opendir function.  Replace AC_CHECK_SIZEOF with
+ 	  AC_COMPILE_CHECK_SIZEOF.
+ 	* java/io/natFile.cc (performList): Check HAVE_OPENDIR.
+ 	* aclocal.m4: Rebuilt.
+ 	* acinclude.m4: Add AC_COMPILE_CHECK_SIZEOF.
+ 
+ 2002-02-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (require_array_type): If argument is a null array of
+ 	references, return null as the element type.
+ 
+ 2002-02-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* verify.cc (verify_instructions_0) [op_dup2]: Actually push the
+ 	duplicate of a wide type.
+ 
+ 2002-02-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (type::isnull): New method.
+ 	(require_array_type): Handle case where array is null.
+ 	(verify_instructions_0) [op_arraylength]: Likewise.
+ 
+ 2002-02-05  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* configure.in: Set up PLATFORMOBJS not PLATFORM_SPECIFIC_SOURCES.
+ 	Symlink PLATFORMH to platform.h.
+ 	* Makefile.am (libgcj_la_DEPENDENCIES, libgcj_la_LIBADD): Add
+ 	PLATFORMOBJS.
+ 	* java/lang/natSystem.cc: #include platform.h not posix.h.
+ 	* Makefile.in: Rebuilt with libgcj automake.
+ 	* configure: Rebuilt.
+ 
+ 2002-02-05  Richard Henderson  <rth@redhat.com>
+ 
+ 	* Makefile.in: Undo munging last change.
+ 
+ 2002-02-04  Adam Megacz <adam@xwt.org>
+ 
+ 	* win32.cc: Created it.
+ 	* configure.in: Added PLATFORM_SPECIFIC_SOURCES,
+ 	which is set to posix.cc or win32.cc.
+ 	* Makefile.am: Updated it to use $(PLATFORM_SPECIFIC_SOURCES).
+ 
+ 2002-02-04  Adam Megacz <adam@xwt.org>
+ 
+ 	* configure.in: Corrected mingw case branches; added * before
+ 	and after.
+ 
+ 2002-02-04  Adam Megacz <adam@xwt.org>
+ 
+ 	* configure.in: Add -lgdi32 -lwsock32 -lws2_32 to libgcj.spec
+ 	if compiling for win32
+ 
+ 2002-02-04  Adam Megacz <adam@xwt.org>
+ 
+ 	* win32-threads.cc: #undef STRICT after gc.h inclusion
+ 
+ 2002-02-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 
+ 2002-02-02  Jason Merrill  <jason@redhat.com>
+ 
+ 	* Makefile.am (clean-nat): New target.
+ 
+ 2002-02-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/natFile.cc: Removed old "FIXME" comments.
+ 
+ 2002-02-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natPosixProcess.cc (myclose): New function.
+ 	(fail): Use it.
+ 	(startProcess): Likewise.
+ 
+ 2002-02-01  Adam Megacz <adam@xwt.org>
+ 
+ 	* prims.cc: Added #undef STRICT after #include<windows.h>.
+ 
+ 2002-02-01  Adam Megacz <adam@xwt.org>
+ 
+ 	* prims.cc
+ 	(_Jv_CreateJavaVM): We now use WIN32 instead of
+ 	USE_WIN32_SIGNALLING and USE_WINSOCK.
+ 	(win32_exception_handler): Now throws an exception out of
+ 	the signal handler; assumes SJLJ.
+ 
+ 2002-02-01  Adam Megacz <adam@xwt.org>
+ 
+ 	* win32-threads.cc:
+ 	(_Jv_CondWait, _Jv_CondNotify, _Jv_CondNotifyAll): Corrected
+ 	wait() algorithm to make it safe.
+ 	(ensure_condvar_initialized, _Jv_CondInit, _Jv_CondDestroy):
+ 	Added lazy creation of Win32 Events for better performance
+ 	(really_start): This now uses GC_CreateThread so boehm-gc
+ 	knows about new threads even when statically linked.
+ 
+ 2002-02-01  Adam Megacz <adam@xwt.org>
+ 
+ 	* include/win32-threads.h (_Jv_ConditionVariable_t): Now a struct, to
+ 	enable safer wait() algorithm.
+ 	(_Jv_CondWait, _Jv_CondInit, _Jv_CondDestroy, _Jv_CondNotify,
+ 	_Jv_CondNotifyAll): Implementations moved to win32-threads.cc.
+ 	(_Jv_MutexInit, _Jv_HaveMutexDestroy, _Jv_MutexUnlock,
+ 	_Jv_MutexLock, _Jv_ThreadYield): Reimplement using CRITICAL_SECTIONs
+ 	instead of mutex.
+ 	(_Jv_ThreadYield): Don't call Sleep(), because it crashes win98.
+ 
+ 2002-02-01  Adam Megacz <adam@xwt.org>
+ 
+ 	* configure.in: Added support for mingw.
+ 	* java/lang/Win32Process.java: Created as empty file.
+ 	* java/lang/natWin32Process.cc: Created as empty file.
+ 
+ 2002-02-01  Craig Rodrigues  <rodrigc@gcc.gnu.org>
+ 
+ 	PR java/4972
+ 	* aclocal.m4, acinclude.m4 (AM_ICONV): Put linking flags
+ 	for libiconv in LIBICONV variable.
+ 	* configure: Regenerated.
+ 
+ 2002-01-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (state::enter_subroutine): New method.
+ 	(handle_jsr_insn): Use it.
+ 	(state::merge): When processing a `ret', correctly use
+ 	subroutine's state to determine which local variables have
+ 	changed.
+ 	(push_exception_jump): Don't let stack overflow.
+ 
+ 2002-01-31  Joseph S. Myers  <jsm28@cam.ac.uk>
+ 
+ 	* gnu/gcj/convert/Convert.java: Only include one copyright year in
+ 	--version output.
+ 
+ 2002-01-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/natPlainSocketImpl.cc (_Jv_recv): Added template
+ 	parameter for `recv' return type.
+ 
+ 	* verify.cc (handle_ret_insn): Check for subroutine merge here...
+ 	(state::merge): ... not here.
+ 	(subr_entry_info): New structure.
+ 	(entry_points): New field.
+ 	(~_Jv_BytecodeVerifier): Correctly free jsr_ptrs.  Free
+ 	entry_points.
+ 
+ 2002-01-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/List.java (addNotify): Correctly check to see if peer
+ 	does not exist.
+ 
+ 	* 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-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (class _Jv_BytecodeVerifier) [op_invokeinterface]:
+ 	`nargs' byte is number of words, not number of arguments.
+ 
+ 2002-01-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/event/MouseEvent.java (modifiers): Removed field.
+ 	(when): Likewise.
+ 	* java/awt/event/InputEvent.java (modifiers, when): Now
+ 	package-private.
+ 
+ 	* verify.cc (class _Jv_BytecodeVerifier): Removed `FIXME' comment
+ 	and to-do list.
+ 	(state::merge): Use current class' class loader.
+ 	(state::print): Print subroutine.
+ 	(state::merge): Don't look at subroutine of unmerged `ret'.
+ 
+ 2002-01-26 Andreas Tobler <a.tobler@schweiz.ch>
+ 
+ 	* nogc.cc: Remove warnings.
+ 	(_Jv_GCRegisterDisappearingLink, _Jv_GCCanReclaimSoftReference):
+ 	New functions.
+ 
+ 2002-01-25  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* java/awt/image/MemoryImageSource.java (newPixels(byte[], ColorModel,
+ 	int, int):  Remove empty "if" statement to work around compiler bug.
+ 	(newPixels(int[], ColorModel, int, int): Likewise.
+ 
+ 2002-01-25  Per Bothner  <per@bothner.com>
+ 
+ 	* verify.cc (verify_fail):  Change from being a top-level function
+ 	to e method of _Jv_BytecodeVerifier.  Emit current method name.
+ 	Pass the current verifier to type: and state: methods as needed,
+ 	for better error messages, and for resolve.
+ 	(resolve):  Pass current class's loader for Class.forName and
+ 	_Jv_FindClassFromSignature, rather than using the default loader.
+ 	(various type: and state: methods):  Take _Jv_BytecodeVerifier* arg.
+ 	(get_type_val_for_signature):  Make non-static.
+ 	(various methods):  Pass start_PC implicitly, not explicitly.
+ 
+ 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/Shape.java: Merged with Classpath.
+ 	* java/awt/Scrollbar.java: Merged with Classpath.
+ 
+ 	* 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/lang/natObject.cc (X86 compare_and_swap): Use +m constraint.
+ 
+ 	* java/awt/image/PixelGrabber.java (grabPixels()): Call grabPixels(0).
+ 	(grabPixels(long)): Wait to be notified that the ImageProducer has
+ 	completed.
+ 
+ 2002-01-24  Per Bothner  <per@bothner.com>
+ 
+ 	* verify.cc (is_assignable_from_slow): If target is an interface,
+ 	we must still check the source's superclass before giving up.
+ 
+ 2002-01-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/awt/xlib/XToolkit.java (getPrintJob): New stub method.
+ 
+ 2002-01-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/BorderLayout.java (addLayoutComponent): Added missing
+ 	`else'.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new files.
+ 	* java/awt/Toolkit.java: Merged with Classpath.
+ 	* java/awt/PrintGraphics.java: New file from Classpath.
+ 	* java/awt/PrintJob.java: New file from Classpath.
+ 	* java/awt/datatransfer/Clipboard.java: New file from Classpath.
+ 	* java/awt/datatransfer/ClipboardOwner.java: New file from
+ 	Classpath.
+ 	* java/awt/datatransfer/DataFlavor.java: New file from Classpath.
+ 	* java/awt/datatransfer/FlavorMap.java: New file from Classpath.
+ 	* java/awt/datatransfer/MimeTypeParseException.java: New file from
+ 	Classpath.
+ 	* java/awt/datatransfer/StringSelection.java: New file from
+ 	Classpath.
+ 	* java/awt/datatransfer/SystemFlavorMap.java: New file from
+ 	Classpath.
+ 	* java/awt/datatransfer/Transferable.java: New file from
+ 	Classpath.
+ 	* java/awt/datatransfer/UnsupportedFlavorException.java: New file
+ 	from Classpath.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new files.
+ 	* java/awt/image/AreaAveragingScaleFilter.java: New file from
+ 	Classpath.
+ 	* java/awt/image/CropImageFilter.java: New file from Classpath.
+ 	* java/awt/image/FilteredImageSource.java: New file from
+ 	Classpath.
+ 	* java/awt/image/ImageFilter.java: New file from Classpath.
+ 	* java/awt/image/MemoryImageSource.java: New file from Classpath.
+ 	* java/awt/image/PixelGrabber.java: New file from Classpath.
+ 	* java/awt/image/RGBImageFilter.java: New file from Classpath.
+ 	* java/awt/image/ReplicateScaleFilter.java: New file from
+ 	Classpath.
+ 	* java/awt/image/ImageProducer.java: Replaced with Classpath
+ 	version.
+ 	* java/awt/image/ImageObserver.java: Replaced with Classpath
+ 	version.
+ 	* java/awt/image/ImageConsumer.java: Replaced with Classpath
+ 	version.
+ 	* java/awt/GridBagConstraints.java (clone): Catch
+ 	CloneNotSupportedException.
+ 
+ 2002-01-23  Per Bothner  <per@bothner.com>
+ 
+ 	* java/lang/reflect/natField.cc (setAddr):  New function.
+ 	Calls getAddr and then checks that the field isn't final.
+ 	(setBoolean. setChar, setByte, setShort, setInt, setLong, setFloat,
+ 	setDouble, set):  Use setAddr instead of getAddr, to check for FINAL.
+ 	(set):  Call setAddr before check that new value has right type,
+ 	to better match specified semantics.
+ 
+ 2002-01-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/TextField.java: Replaced with Classpath version.
+ 	* java/awt/TextArea.java: Replaced with Classpath version.
+ 	* java/awt/TextComponent.java: Replaced with Classpath version.
+ 
+ 	* java/awt/GridBagConstraints.java: Updated copyright.
+ 
+ 2002-01-22  Mark Wielaard <mark@klomp.org>
+ 
+ 	* java/awt/Adjustable.java java/awt/CheckboxMenuItem.java
+ 	java/awt/Choice.java java/awt/Color.java java/awt/Cursor.java
+ 	java/awt/Dialog.java java/awt/FileDialog.java
+ 	java/awt/Font.java java/awt/FontMetrics.java
+ 	java/awt/Image.java java/awt/ImageMediaEntry.java
+ 	java/awt/Insets.java java/awt/List.java
+ 	java/awt/MediaEntry.java java/awt/MediaTracker.java
+ 	java/awt/Menu.java java/awt/MenuBar.java
+ 	java/awt/MenuContainer.java java/awt/MenuShortcut.java
+ 	java/awt/PaintContext.java java/awt/Panel.java
+ 	java/awt/PopupMenu.java java/awt/SystemColor.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: Add license clarification.
+ 
+ 2002-01-22  Mark Wielaard <mark@klomp.org>
+ 
+ 	* LIBGCJ_LICENSE gnu/classpath/Configuration.java.in
+ 	gnu/gcj/runtime/StringBuffer.java
+ 	gnu/java/awt/BitMaskExtent.java gnu/java/awt/Buffers.java
+ 	gnu/java/awt/ComponentDataBlitOp.java
+ 	gnu/java/awt/GLightweightPeer.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/NullOutputStream.java
+ 	gnu/java/io/ObjectIdentityWrapper.java
+ 	gnu/java/lang/ArrayHelper.java gnu/java/lang/ClassHelper.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/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/provider/DefaultPolicy.java
+ 	gnu/java/security/provider/Gnu.java
+ 	gnu/java/security/provider/SHA.java
+ 	gnu/java/security/provider/SHA1PRNG.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 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/BorderLayout.java
+ 	java/awt/Button.java java/awt/Canvas.java
+ 	java/awt/CardLayout.java java/awt/Checkbox.java
+ 	java/awt/CheckboxGroup.java java/awt/Component.java
+ 	java/awt/ComponentOrientation.java java/awt/Container.java
+ 	java/awt/Dimension.java java/awt/Event.java
+ 	java/awt/EventDispatchThread.java java/awt/EventQueue.java
+ 	java/awt/FlowLayout.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/ItemSelectable.java java/awt/Label.java
+ 	java/awt/LayoutManager.java java/awt/LayoutManager2.java
+ 	java/awt/MenuComponent.java java/awt/MenuItem.java
+ 	java/awt/Paint.java java/awt/Point.java
+ 	java/awt/Rectangle.java java/awt/RenderingHints.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/event/HierarchyBoundsAdapter.java
+ 	java/awt/event/HierarchyBoundsListener.java
+ 	java/awt/event/HierarchyEvent.java
+ 	java/awt/event/HierarchyListener.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/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/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/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/EOFException.java java/io/Externalizable.java
+ 	java/io/FileFilter.java java/io/FileNotFoundException.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/InterruptedIOException.java
+ 	java/io/InvalidClassException.java
+ 	java/io/InvalidObjectException.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/PipedInputStream.java java/io/PipedOutputStream.java
+ 	java/io/PipedReader.java java/io/PipedWriter.java
+ 	java/io/PrintWriter.java java/io/PushbackInputStream.java
+ 	java/io/PushbackReader.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/ClassCastException.java
+ 	java/lang/ClassCircularityError.java
+ 	java/lang/ClassFormatError.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/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/StringBuffer.java
+ 	java/lang/StringIndexOutOfBoundsException.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/InvocationTargetException.java
+ 	java/lang/reflect/Member.java java/lang/reflect/Modifier.java
+ 	java/lang/reflect/ReflectPermission.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/DatagramSocketImpl.java
+ 	java/net/FileNameMap.java java/net/MalformedURLException.java
+ 	java/net/MulticastSocket.java java/net/NetPermission.java
+ 	java/net/NoRouteToHostException.java
+ 	java/net/PasswordAuthentication.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/URLDecoder.java java/net/URLEncoder.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/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/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/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
+ 	javax/naming/BinaryRefAddr.java
+ 	javax/naming/InvalidNameException.java javax/naming/Name.java
+ 	javax/naming/NamingException.java javax/naming/RefAddr.java
+ 	javax/naming/StringRefAddr.java: Add license clarification.
+ 
+ 2002-01-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/peer/ButtonPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/CanvasPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/CheckboxMenuItemPeer.java: Replace with Classpath
+ 	version.
+ 	* java/awt/peer/CheckboxPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/ChoicePeer.java: Replace with Classpath version.
+ 	* java/awt/peer/ComponentPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/ContainerPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/DialogPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/FileDialogPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/FontPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/FramePeer.java: Replace with Classpath version.
+ 	* java/awt/peer/LabelPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/LightweightPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/ListPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/MenuBarPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/MenuComponentPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/MenuItemPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/MenuPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/PanelPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/PopupMenuPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/ScrollPanePeer.java: Replace with Classpath version.
+ 	* java/awt/peer/ScrollbarPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/TextAreaPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/TextComponentPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/TextFieldPeer.java: Replace with Classpath version.
+ 	* java/awt/peer/WindowPeer.java: Replace with Classpath version.
+ 	* gnu/awt/xlib/XPanelPeer.java (insets): New method.
+ 	* gnu/awt/xlib/XCanvasPeer.java (show, hide): New methods.
+ 	(minimumSize, preferredSize, reshape): Likewise.
+ 	* gnu/awt/xlib/XFramePeer.java (insets, enable, disable,
+ 	getColorModel): New methods.
+ 	* java/awt/PopupMenu.java: Merged with Classpath.
+ 	* java/awt/MenuBar.java: Merged with Classpath.
+ 	* java/awt/SystemColor.java: Replace with Classpath version.
+ 	* java/awt/Panel.java: Merged with Classpath.
+ 	* java/awt/PaintContext.java: Updated copyright.
+ 	* java/awt/MenuShortcut.java: Merged with Classpath.
+ 	* java/awt/MenuContainer.java: Merged with Classpath.
+ 	* java/awt/Menu.java: Merged with Classpath.
+ 	* java/awt/MediaEntry.java: New file from Classpath.
+ 	* java/awt/MediaTracker.java: New file from Classpath.
+ 	* java/awt/List.java: Merged with Classpath version.
+ 	* java/awt/Insets.java: Merged with Classpath version.
+ 	* java/awt/ImageMediaEntry.java: New file from Classpath.
+ 	* java/awt/Image.java: Replaced with Classpath version.
+ 	* java/awt/FontMetrics.java: Merged with Classpath version.
+ 	* java/awt/Cursor.java (getDefaultCursor): Use DEFAULT_CURSOR
+ 	constant.
+ 	* java/awt/Font.java: Merged with Classpath version.
+ 	* java/awt/Dialog.java: Merged with Classpath version.
+ 	* java/awt/Color.java: Merged with Classpath version.
+ 	* java/awt/Choice.java: Merged with Classpath version.
+ 	* java/awt/CheckboxMenuItem.java: Merged with Classpath version.
+ 	* java/awt/Adjustable.java: Replace with Classpath version.
+ 	* 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.
+ 
+ 2002-01-20  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* java/net/natPlainSocketImpl.cc (_Jv_recv): Change return type of
+ 	function and of parameter recv_func to ssize_t, as specified by
+ 	POSIX.
+ 
+ 2002-01-19  Per Bothner  <per@bothner.com>
+ 
+ 	* java/util/zip/ZipOutputStream.java (putNextEntry):  Clear
+ 	uncompressed_size in readiness for next entry.
+ 
+ 2002-01-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/natPlainSocketImpl.cc: Include
+ 	IllegalArgumentException.h.
+ 	(_Jv_recv): New template function.
+ 	(BooleanClass): Removed.
+ 	(read): Use _Jv_recv.
+ 	(setOption): Use Boolean::class$.  Throw exception if object is
+ 	not Boolean or Integer.
+ 
+ 2002-01-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/MenuComponent.java: Merged with Classpath.
+ 	* java/awt/MenuItem.java: Merged with Classpath.
+ 	* java/awt/Button.java: Merged with Classpath.
+ 
+ 	* java/awt/ActiveEvent.java: Updated copyright.
+ 
+ 	* java/awt/AWTError.java: Replaced with Classpath version.
+ 	* java/awt/AWTException.java: Replaced with Classpath version.
+ 	* java/awt/IllegalComponentStateException.java: Replaced with
+ 	Classpath version.
+ 
+ 2002-01-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Canvas.java (serialVersionUID): New constant.
+ 	Updated copyright.  Added javadoc from Classpath.
+ 	* java/awt/ItemSelectable.java: Replaced with Classpath version.
+ 
+ 	* java/awt/CheckboxGroup.java: Merged with Classpath.
+ 	* java/awt/Checkbox.java: Merged with Classpath.
+ 
+ 	* java/awt/Dimension.java: Updated copyright.  Added javadoc from
+ 	Classpath.
+ 	* java/awt/Point.java: Updated copyright.
+ 
+ 	* java/awt/Point.java (toString): Use getClass().getName().
+ 	Added javadoc.
+ 
+ 	* java/util/IdentityHashMap.java (IdentityHashMap): Removed
+ 	commented code.
+ 	(hash): Correctly compute initial value for `h'.
+ 
+ 	* java/awt/Label.java: Merged with Classpath.
+ 
+ 2002-01-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/AWTPermission.java: Updated copyright.
+ 
+ 	* java/awt/LayoutManager2.java: Merged with Classpath.
+ 	* java/awt/LayoutManager.java: Merged with Classpath.
+ 	* java/awt/GridLayout.java: Updated copyright and javadoc.
+ 	(getSize): Use `parent.ncomponents'.  Handle insets.
+ 	(layoutContainer): Use `parent.ncomponents'.  Handle case where
+ 	there are fewer children than columns.  Correctly compute size of
+ 	each cell in the grid.  Handle case where there isn't enough
+ 	space.
+ 	* java/awt/CardLayout.java (tab): Renamed from `map'.  Updated
+ 	all users.
+ 	(gotoComponent): Use parent.ncomponents.  Ensure child exists
+ 	before calling setVisible() on it.  Last item is `num - 1', not
+ 	`num'.
+ 	(layoutContainer): Hoist invariants out of loop.
+ 
+ 	Start of AWT merge with Classpath:
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Reference files in
+ 	gnu/java/awt, not gnu/gcj/awt.
+ 	* java/awt/image/BufferedImage.java: Updated copyright.
+ 	* java/awt/image/ComponentColorModel.java: Updated copyright.
+ 	* java/awt/image/ComponentSampleModel.java: Updated copyright.
+ 	* java/awt/image/DataBuffer.java: Updated copyright.
+ 	* java/awt/image/DataBufferByte.java: Updated copyright.
+ 	* java/awt/image/DataBufferInt.java: Updated copyright.
+ 	* java/awt/image/DataBufferUShort.java: Updated copyright.
+ 	* java/awt/image/IndexColorModel.java: Updated copyright.
+ 	* java/awt/image/PackedColorModel.java: Updated copyright.
+ 	* java/awt/image/Raster.java: Updated copyright.
+ 	* java/awt/image/RasterOp.java: Updated copyright.
+ 	* java/awt/image/SampleModel.java: Updated copyright.
+ 	* java/awt/image/SinglePixelPackedSampleModel.java: Updated copyright.
+ 	* java/awt/image/WritableRaster.java: Updated copyright.
+ 	* java/awt/color/ColorSpace.java: Updated copyright.
+ 	* java/awt/color/ICC_ColorSpace.java: Updated copyright
+ 	* java/awt/color/ICC_Profile.java: Updated copyright.
+ 	* java/awt/event/HierarchyBoundsAdapter.java: Updated copyright.
+ 	* java/awt/event/HierarchyBoundsListener.java: Updated copyright.
+ 	* java/awt/event/HierarchyEvent.java: Updated copyright.
+ 	* java/awt/event/HierarchyListener.java: Updated copyright.
+ 	* java/awt/geom/AffineTransform.java: Updated copyright.
+ 	* java/awt/geom/Dimension2D.java: Updated copyright.
+ 	* java/awt/geom/Ellipse2D.java: Updated copyright.
+ 	* java/awt/geom/IllegalPathStateException.java: Updated copyright.
+ 	* java/awt/geom/Line2D.java: Updated copyright.
+ 	* java/awt/geom/NoninvertibleTransformException.java: Updated
+ 	copyright.
+ 	* java/awt/geom/PathIterator.java: Updated copyright.
+ 	* java/awt/geom/Point2D.java: Updated copyright.
+ 	* java/awt/geom/Rectangle2D.java: Updated copyright.
+ 	* java/awt/geom/RectangularShape.java: Updated copyright.
+ 	* java/awt/geom/RoundRectangle2D.java: Updated copyright.
+ 	* java/awt/Toolkit.java: Updated import for file moves.
+ 	* java/awt/Rectangle.java: Updated copyright; added javadoc from
+ 	Classpath.
+ 	(hashCode): New method from Classpath.
+ 	* java/awt/Graphics2D.java: Updated copyright.
+ 	* java/awt/Transparency.java: Updated copyright.
+ 	* java/awt/Paint.java: Updated copyright.
+ 	* java/awt/Graphics.java: New version from Classpath.
+ 	* java/awt/EventDispatchThread.java: Updated copyright.
+ 	* java/awt/CardLayout.java (layoutContainer): Don't skip invisible
+ 	children.
+ 	(gotoComponent): Wrap around on next/previous.
+ 	* gnu/gcj/awt/BitMaskExtent.java: Removed.
+ 	* gnu/gcj/awt/Buffers.java: Removed.
+ 	* gnu/gcj/awt/ComponentDataBlitOp.java: Removed.
+ 	* gnu/gcj/awt/GLightweightPeer.java: Removed.
+ 	* gnu/java/awt/BitMaskExtent.java: Added.
+ 	* gnu/java/awt/Buffers.java: Added.
+ 	* gnu/java/awt/ComponentDataBlitOp.java: Added.
+ 	* gnu/java/awt/GLightweightPeer.java: Added.
+ 	* java/awt/geom/Line2D.java (clone): Ignore
+ 	CloneNotSupportedException.
+ 	* gnu/gcj/awt/GLightweightPeer.java (getColorModel): New method.
+ 	* java/awt/Frame.java: Merged with Classpath.
+ 	* java/awt/RenderingHints.java: Copyright update.
+ 	* java/awt/Paint.java: Copyright update.
+ 	* java/awt/image/DirectColorModel.java: Merged with Classpath.
+ 	* java/awt/image/ColorModel.java: Merged with Classpath.
+ 	* java/awt/Window.java (show): New Implementation from Classpath.
+ 	(isShowing): Use super.isShowing().
+ 	* java/awt/EventQueue.java: Merged with Classpath.
+ 	* java/awt/AWTEventMulticaster.java (save): Throw
+ 	RuntimeException.
+ 	(saveInternal): Likewise.
+ 	* java/awt/AWTEvent.java: Now implements Serializable.
+ 	* java/awt/Event.java: Copyright update.
+ 	* java/awt/peer/ComponentPeer.java: Merged with Classpath.
+ 	* java/awt/image/BufferedImage.java: Copyright update.
+ 	* java/awt/GraphicsConfiguration.java: Copyright update.
+ 	* java/awt/Component.java: (addNotify): Don't call
+ 	addNotifyContainerChildren().
+ 	(addNotifyContainerChildren): Removed.
+ 	(setPeer): New method from Classpath.
+ 	(setTreeLock): Likewise.
+ 	(setVisible): Rewrote.
+ 	(show): Use it.
+ 	(hide): Likewise.
+ 	(validate): Set `valid'.
+ 	(checkImage(Image,ImageObserver)): Implementation from Classpath.
+ 	(createImage(ImageProducer)): Likewise.
+ 	(prepareImage): Likewise.
+ 	* 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/ComponentOrientation.java: Updated copyright.  Added
+ 	@author.
+ 	* 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/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  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Float.java (equals): Preserve old code.
+ 	* java/lang/Double.java (equals): Preserve old code.
+ 
+ 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-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/DatagramSocket.java (getReceiveBufferSize): new 1.2 method.
+ 	* java/net/DatagramSocket.java (getSendBufferSize): Likewise.
+ 	* java/net/DatagramSocket.java (setReceiveBufferSize): Likewise.
+ 	* java/net/DatagramSocket.java (setSendBufferSize): Likewise.
+ 
+ 2002-01-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/InetAddress.java (ANY_IF): moved from ServerSocket.
+ 	* java/net/DatagramSocket.java (DatagramSocket): use ANY_IF from
+ 	InetAddress.
+ 	* java/net/MulticastSocket.java (MulticastSocket): Likewise.
+ 	* java/net/Socket.java: Merge with Classpath.
+ 	* java/net/ServerSocket.java: Likewise.
+ 
+ 2002-01-11  Chris Sears  <cbsears_sf@yahoo.com>
+ 
+ 	* interpret.cc (NULLARRAYCHECK): New macro.
+ 	(SAVE_PC): Just store `pc'.
+ 	(find_exception): Subtract one from `pc' here.
+ 	(continue1) [insn_iaload, insn_laload, insn_faload, insn_daload,
+ 	insn_aaload, insn_baload, insn_caload, insn_saload, insn_iastore,
+ 	insn_lastore, insn_fastore, insn_dastore, insn_aastore,
+ 	insn_bastore, insn_castore, insn_sastore]: Use NULLARRAYCHECK, and
+ 	don't call SAVE_PC.
+ 	(continue1) [insn_fdiv, insn_ddiv, insn_frem, insn_drem]: Don't
+ 	call SAVE_PC.
+ 
+ 2002-01-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natSystem.cc (init_properties): Only look for default
+ 	locale if LC_MESSAGES is defined.
+ 	* aclocal.m4, configure, include/config.h.in: Rebuilt.
+ 	* configure.in: Call AM_LC_MESSAGES.
+ 	* acinclude.m4 (AM_LC_MESSAGES): New macro.
+ 
+ 2002-01-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR libgcj/5303:
+ 	* 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-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/convert/Convert.java (version): Use java.vm.name
+ 	property.
+ 	(help, version): Use println(), not println("").
+ 
+ 	For PR libgcj/5303:
+ 	* gnu/gcj/convert/Convert.java (error): Program is called
+ 	`jv-convert'.  Print GNU-style message.  Exit with status 1, not
+ 	-1.
+ 	(main): Handle --help and --version.
+ 	(help): New method.
+ 	(version): Likewise.
+ 
+ 2002-01-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ordinary_java_source_files): Added new files.
+ 	* 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.
+ 
+ 	For PR libgcj/5031:
+ 	* java/lang/natSystem.cc (init_properties): Use LC_MESSAGES to
+ 	choose default locale.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (jv_convert_LDADD): Removed convert_source_files.
+ 
+ 2002-01-08  Nic Ferrier  <nferrier@tf1.tapsellferrier.co.uk>
+ 
+ 	* java/net/natPlainSocketImpl.cc: Added timeout handling for
+ 	sockets.
+ 	(close): New function closes the socket.
+ 	(write): New functions for output to socket.
+ 	(read): New functions for reading from socket.
+ 	* java/net/PlainSocketImpl.java: Glue for new timeout
+ 	implementation.
+ 	(write): Call the native impl.
+ 	(read): Likewise.
+ 	(getInputStream): Get a stream to read from the socket.
+ 	(getOutputStream): Get a stream to write to the socket.
+ 
+ 2002-01-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* resolve.cc (_Jv_PrepareClass): Enable verifier.
+ 
+ 2002-01-07  Andreas Tobler <a.tobler@schweiz.ch>
+ 
+ 	* java/lang/reflect/natMethod.cc: Don't include alloca.h.
+ 	(_Jv_CallAnyMethodA): Convert alloca to __builtin_alloca.
+ 
+ 2002-01-08  Chris Sears  <cbsears_sf@yahoo.com>
+ 
+ 	* interpret.cc (ARRAYBOUNDSCHECK): New macro.
+ 	(continue1) [insn_iaload, insn_laload, insn_faload, insn_daload,
+ 	insn_aaload, insn_baload, insn_caload, insn_saload, insn_iastore,
+ 	insn_lastore, insn_fastore, insn_dastore, insn_aastore,
+ 	insn_bastore, insn_castore, insn_sastore]: Use it.
+ 	(continue1) [insn_arraylength]: Check for null array.
+ 
+ 2002-01-06 Andreas Tobler <a.tobler@schweiz.ch>
+ 
+ 	* configure, include/config.h.in: Rebuilt.
+ 	* java/lang/natSystem.cc (getSystemTimeZone): Check HAVE_TM_ZONE.
+ 	* configure.in: Call AC_STRUCT_TIMEZONE.
+ 
+ 2002-01-02 Andreas Tobler <a.tobler@schweiz.ch>
+ 
+ 	* configure.host: Disable the interpreter for Darwin.
+ 
+ 2002-01-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Thread.java (stop): No longer synchronized.
+ 	(start): Likewise.
+ 
+ 2002-01-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ieeefp.h: Fix bug in my hand-application of previous
+ 	patch.
+ 
+ 2002-1-1  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	* libjava/java/lang/ieeefp.h: Define __IEEE_BIG_ENDIAN for
+ 	PPC Darwin, not for all of Darwin.
diff -Nrcpad gcc-3.4.3/libjava/ChangeLog-2003 gcc-4.0.0/libjava/ChangeLog-2003
*** gcc-3.4.3/libjava/ChangeLog-2003	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/ChangeLog-2003	Sat Jan 17 08:40:40 2004
***************
*** 0 ****
--- 1,11323 ----
+ 2003-12-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(sendRequest): Dont encode output in default character encoding,
+ 	add correct version number to HTTP user agent string.
+ 
+ 2003-12-31  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. 
+ 
+ 2003-12-31  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectOutputStream.java
+ 	(putFields): Reindented. Fixed behaviour: currentPutField should be
+ 	null
+ 	before calling this method.
+ 	(writeFields): Likewise.
+ 	(markFieldsWritten): Fixed the exception message.
+ 	(callWriteMethod): Ensure currentPutField is null.
+ 	(getBooleanField): Translate IllegalArgumentException into
+ 	InvalidClassException.
+ 	(getByteField): Likewise.
+ 	(getCharField): Likewise.
+ 	(getDoubleField): Likewise.
+ 	(getFloatField): Likewise.
+ 	(getIntField): Likewise.
+ 	(getLongField): Likewise.
+ 	(getShortField): Likewise.
+ 	(getObjectField): Check the type code before returning the object.
+ 	(getField): Translate NoSuchFieldException into InvalidClassException
+ 	directly.
+ 
+ 2003-12-31 Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/net/URL.java
+ 	(URL): Change context path to "/" if it is empty.
+ 
+ 2003-12-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* testsuite/libjava.mauve/xfails: Removed tests that pass now:
+ 	XPASS: gnu.testlet.java.net.URL.URLTest: new URL(string) (number 16)
+ 	XPASS: gnu.testlet.java.net.URL.URLTest: new URL(string) (number 18)
+ 	XPASS: gnu.testlet.java.net.URL.URLTest: new URL(protocol, host, file)
+ 	(number 26)
+ 	XPASS: gnu.testlet.java.net.URL.URLTest: new URL(protocol, host, file)
+ 	(number 54)
+ 	
+ 
+ 2003-12-30 Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/util/GregorianCalendar.java
+ 	(computeFields): Reported by Ito Kazumitsu <kaz@maczuka.gcd.org>.
+ 	Fixed the computation of DAY_OF_WEEK_IN_MONTH.
+ 	(computeTime): 12:00 midnight is AM and 12:00 noon is PM.
+ 
+ 2003-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* testsuite/libjava.mauve/xfails: Removed the following testcase
+ 	because it passes now:
+ 	FAIL: gnu.testlet.java.text.SimpleDateFormat.Test: parse() strict
+ 	(number 1)
+ 
+ 2003-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java,
+ 	java/io/ObjectOutputStream.java,
+ 	java/io/ObjectStreamClass.java:
+ 	Reformated, no functional code changes.
+ 
+ 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  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/LineNumberReader.java
+ 	(countLines): Removed.
+ 	(fill): New private method.
+ 	(mark): Changed logic to use and matchedNewLine.
+ 	(reset): Likewise.
+ 	(read): Likewise.
+ 	(skipRedundantLF): Likewise.
+ 
+ 2003-12-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(requestProperties): New field.
+ 	(addRequestProperty): New method.
+ 	(getRequestProperty): New method.
+ 	(setRequestProperty): New method.
+ 	(getRequestProperties): New method.
+ 
+ 2003-12-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(inputStream): Made it a DataInputStream.
+ 	(requestProperties): Removed.
+ 	(hdrHash): Removed.
+ 	(hdrVec): Removed.
+ 	(headers): New field to store headers.
+ 	(connect): Initialize inputStream.
+ 	(receiveReply): Merged from classpath. The new algorithm is line based
+ 	instead of character based.
+ 	(getHeaderField): Use headers.
+ 	(getHeaderFields): Use headers.
+ 	(getKey): Removed.
+ 	(getField): Removed.
+ 	* gnu/java/net/HeaderFieldHelper.java: New file.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added gnu/java/net/HeaderFieldHelper.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 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.
+ 	* java/io/CharArrayReader.java (read): It should throw
+ 	IndexOutOfBoundsException and not ArrayIndexOutOfBoundsException (see
+ 	mauve).
+ 	* 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
+ 	(getRequestProperty): Removed.
+ 	(setRequestProperty): Removed.
+ 
+ 2003-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(connect): Call receiveReply().
+ 	(receiveReply): Renamed from getHttpHeaders().
+ 	(getOutputStream): Moved check on doOutput before check for connection
+ 	state.
+ 
+ 2003-12-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/ResolutionSyntax.java,
+ 	javax/print/attribute/SetOfIntegerSyntax.java,
+ 	javax/print/attribute/Size2DSyntax.java,
+ 	javax/print/attribute/standard/Copies.java,
+ 	javax/print/attribute/standard/JobImpressions.java,
+ 	javax/print/attribute/standard/JobMediaSheets.java,
+ 	javax/print/attribute/standard/NumberOfDocuments.java,
+ 	javax/print/attribute/standard/NumberOfInterveningJobs.java,
+ 	javax/print/attribute/standard/PagesPerMinute.java,
+ 	javax/print/attribute/standard/PagesPerMinuteColor.java,
+ 	javax/print/attribute/standard/QueuedJobCount.java:
+ 	Fixed typo (s/then/than/).
+ 
+ 2003-12-27  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  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-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  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am (rmi_java_source_files):
+ 	Added gnu/java/rmi/server/RMIVoidValue.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-26  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.
+ 
+ 2003-12-25  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* libltdl/ltdl.c (HAVE_DYLD): Remove ifdef conditional for 
+ 	darwin. Fixed by fixinclude now.
+ 
+ 2003-12-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java bind():
+ 	If InetSocketAddress.getAddress() returns "null" use "0.0.0.0" as
+ 	address to bind to.
+ 
+ 2003-12-23  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(getField): Handle transient and non persistent fields.
+ 	(readClassDescriptor): Better error handling, use the right
+ 	class loader.
+ 	(readFields): Fields marked as not present in the stream
+ 	or not to be set are not read and set.
+ 	* java/io/ObjectInputStream.java
+ 	(readFields): Changed implementation of GetField.
+ 	(readClassDescriptor): Documented.
+ 	* java/io/ObjectOutputStream.java
+ 	(writeClassDescriptor): Added condition when to write class super
+ 	class information.
+ 
+ 2003-12-22  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.
+ 
+ 2003-12-23  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: New files.
+ 	* Makefile.am (ordinary_java_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/AttributeSetUtilities.java
+ 	(verifyCategoryForValue): Renamed from verifyCategoryForAttribute.
+ 	* javax/print/attribute/HashAttributeSet.java
+ 	(HashAttributeSet): Call internal add methods, added missing
+ 	exceptions.
+ 	(add): Call addInternal, added exceptions to documentation.
+ 	(addInternal): New method.
+ 	(addAll): Call addAllInternal, added exception to documentation.
+ 	(addAllInternal): New method.
+ 	(clear): Added exception to documentation.
+ 	(remove): Likewise.
+ 	* javax/print/attribute/URISyntax.java
+ 	(serialVersionUID): Fixed value.
+ 
+ 2003-12-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Don't dereference NULL focus_obj_ptr.
+ 
+ 2003-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/AttributeSetUtilities.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: New files.
+ 	* Makefile.am (ordinary_java_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/EnumSyntax.java,
+ 	javax/print/attribute/SetOfIntegerSyntax.java: New files.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added javax/print/attribute/EnumSyntax.java
+ 	and javax/print/attribute/SetOfIntegerSyntax.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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/SupportedValuesAttribute.java: New files.
+ 	* Makefile.am (ordinary_java_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/DateTimeSyntax.java,
+ 	javax/print/attribute/DocAttribute.java,
+ 	javax/print/attribute/DocAttributeSet.java,
+ 	javax/print/attribute/IntegerSyntax.java,
+ 	javax/print/attribute/ResolutionSyntax.java,
+ 	javax/print/attribute/Size2DSyntax.java,
+ 	javax/print/attribute/TextSyntax.java,
+ 	javax/print/attribute/URISyntax.java,
+ 	javax/print/attribute/UnmodifiableSetException.java: New files.
+ 	* Makefile.am (ordinary_java_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java
+ 	(mcastGrp): Added documentation.
+ 
+ 2003-12-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Connection.java
+ 	(connectionCache): New field.
+ 	(connect): New method.
+ 	(getInputStream): New method.
+ 	(hdrHash): New field.
+ 	(hdrVec): New field.
+ 	(gotHeaders): New field.
+ 	(getHeaderField): New method.
+ 	(getHeaderFields): New method.
+ 	(getHeaderFieldKey): New method.
+ 	(getKey): New method.
+ 	(getField): New method.
+ 	(getHeaders): New method.
+ 	* java/net/JarURLConnection.java
+ 	(connectionCache): Removed.
+ 	(connect): Removed.
+ 	(getInputStream): Removed.
+ 	(hdrHash): Removed.
+ 	(hdrVec): Removed.
+ 	(gotHeaders): Removed.
+ 	(getHeaderField): Removed.
+ 	(getHeaderFields): Removed.
+ 	(getHeaderFieldKey): Removed.
+ 	(getKey): Removed.
+ 	(getField): Removed.
+ 	(getHeaders): Removed.
+ 
+ 2003-12-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectStreamField.java (isUnshared): Added documentation.
+ 
+ 2003-12-20  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.
+ 	* java/nio/channels/spi/AbstractSelector.java
+ 	Added import for java.nio.channels.ClosedSelectorException.
+ 	(close): Added synchronized to method declaration.
+ 	(cancelledKeys): Throw ClosedSelectorException if selector
+ 	is closed.
+ 	(cancelKey): Synchronize on cancelled key set before key.
+ 
+ 2003-12-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added gnu.java.net.URLParseError.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-20  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.
+ 
+ 2003-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ChannelOutputStream.java: New file.
+ 	* java/nio/channels/Channels.java
+ 	(newOutputStream): Implemented.
+ 	* Makefile.am (ordinary_java_source_files)
+ 	Added gnu/java/nio/ChannelOutputStream.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* java/awt/FlowLayout.java (layoutContainer): Let components
+ 	assume their preferred height.  Centre components vertically.
+ 
+ 2003-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ChannelInputStream.java: New file.
+ 	* java/nio/channels/Channels.java (newInputStream): Implemented.
+ 	* java/nio/channels/FileChannelImpl.java
+ 	(readImpl): Only put data into buffer if something was read.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added gnu/java/nio/ChannelInputStream.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/OutputStreamChannel.java: New file.
+ 	* java/nio/channels/Channels.java (newChannel): Implemented.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added gnu/java/nio/OutputStreamChannel.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added gnu.java.nio.InputStreamChannel. 
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/InputStreamChannel.java: New file.
+ 	* java/nio/channels/Channels.java (newChannel): Implemented.
+ 
+ 2003-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/SimpleTimeZone.java
+ 	(setStartRule): Reformated documentation.
+ 	(setEndRule): Reworked documentation.
+ 	(getDSTSavings): Fixed @since tag.
+ 	(setDSTSavings): New method.
+ 
+ 2003-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/NumberFormat.java: Sorted imports.
+ 	(getCurrency): New method.
+ 	(setCurrency): New method.
+ 	
+ 
+ 2003-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/MessageFormat.java
+ 	(MessageFormat): New constructor.
+ 
+ 2003-12-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Handler.java
+ 	(parseURL): New method.
+ 	(toExternalForm): New method.
+ 
+ 2003-12-18  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* java/awt/List.java (replaceItem): Prevent selection to move with
+ 	replace and minimize flickering.
+  
+ 2003-12-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* libltdl/ltdl.c: Define __private_extern__ if needed.
+ 
+ 2003-12-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* libltdl/.cvsignore: Ignore autom4te.cache
+ 	* libltdl/Makefile.in: Regenerated.
+ 	* libltdl/aclocal.m4: Regenerated.
+ 	* libltdl/acconfig.h: Removed (obsolete).
+ 	* libltdl/config-h.in: Regenerated.
+ 	* libltdl/configure.ac: Added AM_MAINTAINER_MODE.
+ 	* libltdl/configure: Regenerated.
+ 
+ 2003-12-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* mauve-libgcj: Removed the disabling of java.text.ACIAttribute and
+ 	java.text.CollationElementIterator tests as they compile again.
+ 	* testsuite/libjava.mauve/xfails: Added failing
+ 	java.text.CollationElementIterator tests.
+ 
+ 2003-12-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/prefs/AbstractPreferences.java
+ 	(cachedChildren): New method.
+ 
+ 2003-12-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/TimeZone.java (getOffset): New method.
+ 
+ 2003-12-17  Fernando Nasser  <fnasser@redhat.com>
+  
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java (handleEvent): Fix generation
+ 	of ActionEvents for mouse double-clicks.
+ 
+ 2003-12-17  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkContainerPeer.java (handleEvent): Check for
+ 	null Graphics pointer returned by FileDialogPeer.
+ 
+ 2003-12-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* libltdl/stamp-h.in: Removed, not used anymore.
+ 
+ 2003-12-16  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc:
+ 	Removed unused InterruptedIOException.h include.
+ 	* gnu/java/net/natPlainSocketImplWin32.cc
+ 	(connect): Reset and ignore our thread's interrupted
+ 	flag instead of testing and throwing an InterruptedIOException
+ 	if set.
+ 	(accept): Likewise + changed case of SocketTimeoutException
+ 	text.
+ 	(write): Likewise (for both overloads).
+ 	(doRead): Likewise.
+ 
+ 2003-12-16  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* win32.cc (WSAEventWrapper): Implemented default
+ 	constructor and init() methods.
+ 	(_Jv_select): Removed.
+ 	* gnu/java/nio/natSelectorImplWin32.cc
+ 	(helper_put_filedescriptors): Removed.
+ 	(helper_get_filedescriptors): Removed.
+ 	(implSelect): Implemented in terms of WSAEventWrapper
+ 	and WSAWaitForMultipleEvents instead of _Jv_select().
+ 	Added support for thread interruption.
+ 	* include/win32.h (WSAEventWrapper): Minor formatting
+ 	changes; added default constructor declaration, init(),
+ 	getFD() and getEventHandle() methods.
+ 	(_Jv_select): Removed.
+ 
+ 2003-12-16  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc
+ 	(peekData): Throw SocketTimeoutException instead of
+ 	InterruptedIOException on timeout.
+ 	(receive): Likewise.
+ 	* gnu/java/net/natPlainSocketImplPosix.cc
+ 	(read): Made a minor exception text case change.
+ 
+ 2003-12-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	Fix for PR libgcj/13056.
+ 	* libltdl/configure.in,
+ 	libltdl/config.h.in: Removed.
+ 	* libltdl/configure.ac,
+ 	libltdl/config-h.in,
+ 	libltdl/install-sh,
+ 	libltdl/config.guess,
+ 	libltdl/config.sub,
+ 	libltdl/missing,
+ 	libltdl/mkinstalldirs,
+ 	libltdl/ltmain.sh: New files.
+ 	* libltdl/Makefile.am,
+ 	libltdl/acinclude.m4,
+ 	libltdl/aclocal.m4,
+ 	libltdl/ltdl.c,
+ 	libltdl/ltdl.h,
+ 	libltdl/README: Update to versions from libtool 1.5.
+ 	libltdl/configure,
+ 	* libltdl/Makefile.in: Regenerated.
+ 	* java/lang/natRuntime.cc (find_symbol):
+ 	Use type 'lt_ptr' instead of 'lt_ptr_t'.
+ 
+ 2003-12-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/MenuComponent.java
+ 	(serialVersionUID): Fixed value.
+ 
+ 2003-12-16  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Handle GtkButton widgets differently as events
+ 	go to its event_window.
+ 	(connect_awt_hook): Remove compiler warning.
+ 
+ i2003-12-16  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(lookupClass): New method.
+ 	(currentLoader): New method.
+ 	(inputGetObjectStreamClasses): New method.
+ 	(assignNewHandle): Documented.
+ 	(currentClassLoader): Documented.
+ 	* java/io/ObjectStreamClass.java
+ 	(setClass): Changed API. Better handling of the imported/exported
+ 	fields.
+ 	(getSerialPersistentFields): Make it throw previously caught exceptions
+ 	so they can handled in setClass.
+ 
+ 2003-12-16 Guilhem Lavaux <guilhem@kaffe.org>
+  
+ 	* java/io/ObjectStreamField.java: A few methods were added in prevision
+ 	of the upcoming upgrade of the serialization code. This also adds
+ 	some missing documentation.
+ 	(ObjectStreamField): We should throw a NullPointerException when 'name'
+ 	is null.
+ 
+  2003-12-16 Guilhem Lavaux <guilhem@kaffe.org>
+   
+ 	* java/io/ObjectInputStream.java (setBooleanField):
+ 	Throw an InvalidClassException if the field hasn't the required type,
+ 	documentation added.
+ 	(setByteField) Likewise.
+ 	(setCharField) Likewise.
+ 	(setDoubleField) Likewise.
+ 	(setFloatField) Likewise.
+ 	(setIntField) Likewise.
+ 	(setShortField) Likewise.
+ 	(setLongField) Likewise.
+ 	(setObjectField) Likewise.
+ 
+ 2003-12-16 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-15  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* jni/gtk-peer/gdkfont.h: New file.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Remove
+ 	include of cairo-xlib.h, add extra gdk_flush().
+ 
+ 2003-12-12  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* jni/gtk-peer/gtkpeer.h: Extend NSA set of macros to handle a second
+ 	native state table -- native_global_ref_table.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Define
+ 	native_global_ref_table pointer.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose): Make sure JNI
+ 	global reference is deleted and memory allocated for pointer freed.
+ 	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): Use saved
+ 	JNI global reference instead of JNI local reference.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(pre_event_handler): Remove compilation warning.
+ 	(connect_awt_hook): Use saved JNI global reference instead of creating
+ 	a new one.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create): Save JNI global
+ 	reference to the Java object.
+ 	(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals): Remove
+ 	unused variable declaration and add comment.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create): Save JNI global
+ 	reference to the Java object.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate): Ditto.
+ 	(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals): Use saved
+ 	JNI global reference instead of JNI local reference.
+ 	(item_toggled): Add debug statement.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create): Save JNI global
+ 	reference to the Java object.
+ 	(connect_choice_item_selectable_hook): Use saved JNI global references
+ 	instead of JNI local reference.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create): Save JNI
+ 	global reference to the Java object.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create): Save JNI global
+ 	reference to the Java object.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkLabelPeer_create): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_create): Ditto.
+ 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals): Use saved
+ 	JNI global reference instead of JNI local reference.
+ 	(item_selected): Add debug statement.
+ 	(item_unselected): Add debug statement.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create): Save JNI global
+ 	reference to the Java object.
+ 	Connect "activate" signal handler using global JNI reference.
+ 	(connect_activate_hook): Removed in favor of inline code.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create): Save JNI global
+ 	reference to the Java object.
+ 	(Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals): Use saved
+ 	JNI global reference instead of JNI local reference.  Add FIXME comment.
+ 	(Java_gnu_java_awt_peer_gtk_GtkPanelPeer_gtkPanelNew): Save JNI global
+ 	reference to the Java object.  Add FIXME comment.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create): Save JNI global
+ 	reference to the Java object.
+ 	(Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals): Use saved
+ 	JNI global reference instead of JNI local reference.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals): Use
+ 	saved JNI global reference instead of JNI local reference.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create): Save JNI global
+ 	reference to the Java object.
+ 	(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals): Use saved
+ 	JNI global reference instead of JNI local reference.
+ 
+ 2003-12-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/Format.java (serialVersionUID): Fixed value.
+ 
+ 2003-12-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/event/EventDirContext.java: Jalopied.
+ 	(addNamingListener): Fixed typo in method name.
+ 	
+ 
+ 2003-12-11  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(write): Removed diagnostic trace.
+ 	* gnu/java/nio/natSelectorImplPosix.cc: Added
+ 	includes for java.lang.Thread and java.io.InterruptedIOException.
+ 	(helper_put_filedescriptors): Don't put invalid file descriptors
+ 	in select set.
+ 	(helper_get_filedescriptors): Clear invalid file descriptors
+ 	from select set.
+ 	(helper_reset): New method for clearing our file descriptor
+ 	array.
+ 	(implSelect): Correctly calculate timeout if specified and
+ 	legal.
+ 	Intercept and deal with any java.io.InterruptedIOException
+ 	thrown by _Jv_select().
+ 
+ 2003-12-08  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. 
+ 
+ 2003-12-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am (nat_headers_install): New variable with header files to
+ 	install automatically.
+ 	(install-data-local): Install all headers listed in
+ 	nat_headers_install. Install innert nat headers explicitely.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-12-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Calendar.java,
+ 	java/util/IdentityHashMap.java,
+ 	java/util/prefs/Preferences.java:
+ 	Import used classes explicitely.
+ 
+ 2003-12-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(close): Directly return if socket is closed.
+ 	* java/net/ServerSocket.java
+ 	(close): Directly return if socket is closed.
+ 	* java/net/Socket.java
+ 	(close): Directly return if socket is closed.
+ 
+ 2003-12-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(implSelect): Throws IOException.
+ 	(select): Likewise.
+ 
+ 2003-12-08  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.
+ 
+ 2003-12-08  Fernando Nasser  <fnasser@redhat.com>
+  
+ 	* java/awt/datatransfer/StringSelection.java (getTransferData): Return
+ 	object of type expected by specified DataFlavor.
+ 
+ 2003-12-08  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.
+ 
+ 2003-12-08  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.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
+ 	(getSelectionStart): Initialized start position to 0. 
+ 	(getSelectionEnd): Initialized end position to 0.
+ 	(getCaretPosition): Initialized caret position to 0.
+ 	(getText): Initialized selected text to NULL 
+ 
+ 2003-12-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	Fix for PR libgcj/13176.
+ 	* java/io/PrintStream.java: Partly revert my previous patches to get
+ 	(line_separator): New field.
+ 	(converter): New field.
+ 	(work): New field.
+ 	(work_bytes): New field.
+ 	(pw): Removed.
+ 	(closed): Removed.
+ 	(PrintStrean): Initialize converter and not pw.
+ 	(checkError): Flush always, pw doesn't exist anymore.
+ 	(close): Close underlying out stream.
+ 	(print): New method.
+ 	(writeChars): New method.
+ 	(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.
+ 	(putAllInternal): Correct comment.
+ 	* 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.
+ 
+ 2003-12-06  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/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-05  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/gcj/xlib/GC.java (updateClip): Added rectangles argument.
+ 	(clip): Removed field
+ 	(clipRectangles): New field.
+ 	(clone): Use new updateClip.
+ 	(setClipRectangles): Use new updateClip.
+ 	* gnu/gcj/xlib/natGC.cc (updateClip): Prepare passed rectangles.
+ 
+ 2003-12-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FilePermission.java:
+ 	Import used classes explicitely.
+ 
+ 2003-12-04  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-04  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-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(sendRequest): Merged writing http headers with classpath.
+ 	(getInputStream): Merged documentation from classpath.
+ 	(getHeaderField): Likewise.
+ 	(getHeaderFieldKey): Likewise.
+ 
+ 2003-12-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* boehm.cc (_Jv_MarkObj): Access hack_signers field.
+ 
+ 2003-12-04  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramPacket.java
+ 	(length): Made packge-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.
+ 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc (peekData):
+ 	Get maximal length from maxlen field, set length field directly.
+ 	(receive): Likewise.
+ 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc (peekData):
+ 	Get maximal length from maxlen field, set length field directly.
+ 	(receive): Likewise.
+ 
+ 2003-12-03  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/nio/natSelectorImplPosix.cc
+ 	(implSelect): A timeout of 0 means an infinite
+ 	timeout.
+ 
+ 2003-12-02  Fernando Nasser  <fnasser@redhat.com>
+  
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java (handleEvent): Fix generation
+ 	of ActionEvents.
+ 
+ 2003-12-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Class.h (hack_signers): Renamed signers to hack_signers.
+ 	* java/lang/natClass.cc (getSigners): Likewise.
+ 	(setSigners): Likewise.
+ 
+ 2003-12-02  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* configure.in: Added new MinGW-specific configure flag
+ 	--with-win32-nlsapi.
+ 	Added new AC_DEFINE MINGW_LIBGCJ_UNICODE.
+ 	Add -lunicows to MinGW SYSTEMSPEC if --with-win32-nlsapi
+ 	is set to unicows.
+ 	* configure: Rebuilt.
+ 	* include/config.h.in: Rebuilt.
+ 	* win32.cc (_Jv_Win32NewString): Implemented.
+ 	(nativeToUnicode): New helper function defined only for
+ 	non-UNICODE builds.
+ 	(unicodeToNative): Likewise.
+ 	(_Jv_Win32TempString): Implemented.
+ 	(lots): Refactored using tchar.h macros.
+ 	(WSAEventWrapper): Use _Jv_Win32NewString.
+ 	(_Jv_platform_initialize): Use GetModuleFileNameA instead
+ 	of GetModuleFileName.
+ 	(_Jv_platform_initProperties): Use _Jv_Win32NewString.
+ 	Use temporary stack buffer instead of a heap buffer.
+ 	* include/win32.h
+ 	Added defines for UNICODE and _UNICODE if MINGW_LIBGCJ_UNICODE is
+ 	defined; added tchar.h include.
+ 	(_Jv_Win32TempString): Declared new helper class.
+ 	(JV_TEMP_STRING_WIN32): New helper macro.
+ 	(_Jv_Win32NewString): Declared new helper method.
+ 	* java/io/natFileDescriptorWin32.cc (open): Use
+ 	JV_TEMP_STRING_WIN32 instead of JV_TEMP_UTF_STRING.
+ 	(write): Reformatted slightly.
+ 	* java/io/natFileWin32.cc (lots): Use tchar.h macros;
+ 	use JV_TEMP_STRING_WIN32 instead of JV_TEMP_UTF_STRING.
+ 	(getCanonicalPath): Use _Jv_Win32NewString instead of
+ 	JvNewStringUTF.
+ 	(performList): Likewise.
+ 	* java/lang/natWin32Process.cc (ChildProcessPipe):
+ 	Use tchar.h macros.
+ 	(startProcess): Use tchar.h macros, JV_TEMP_STRING_WIN32,
+ 	and UNICODE environment flag for CreateProcess.
+ 	* java/net/natNetworkInterfaceWin32.cc
+ 	(winsock2GetRealNetworkInterfaces): Use tchar.h macros and
+ 	_Jv_Win32NewString.
+ 
+ 2003-12-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* 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.
+ 
+ 	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: Make
+ 	BufferedImageBuilder class static.
+ 
+ 2003-12-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/security/Security.java: Don't use &nbsp; in the api doc.
+ 
+ 2003-12-02  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-12-02  Fernando Nasser  <fnasser@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkListPeer.java (handleEvent): New
+ 	method. Handle mouse and key events that must generate
+ 	ActionEvents.
+ 	* java/awt/List.java (getSelectedIndex): Return -1
+ 	if no list element is selected.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (awt_event_handler):
+ 	Correct handling of mouse and key events so that List receives them.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ 	(Java_gnu_java_awt_peer_gtk_GtkListPeer_delItems): Fix removal of
+ 	multiple list elements. 
+ 
+ 2003-12-02  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-12-02  Dalibor Topic <robilad@kaffe.org>
+ 
+ 	* java/text/FieldPosition.java (equals): Fixed comment.
+ 
+ 2003-12-02  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-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(close): Close associated DatagramChannel object.
+ 	* java/net/ServerSocket.java
+ 	* 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>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(blocking): Initialize with true by default.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(serverSocket): Made private.
+ 	(blocking): Likewise.
+ 	(connected): Likewise.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(connectionPending): Made private.
+ 	* gnu/java/nio/FileLockImpl.java
+ 	(static): Load native library (needed for classpath).
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(static): Load native library (needed for classpath).
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(getLastModified): Implement for file connections.
+ 	(getContentLength): Likewise.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java:
+ 	Some reformating.
+ 	(file): Renamed from fileIn.
+ 	(getPermission): Moved around.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/jar/Connection.java
+ 	(Connection): Made class final, merged documentation with classpath.
+ 	(file_cache): Made private.
+ 	(jar_file): Renamed from jarfile.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(Connection): Initialize doOutput to false;
+ 	(connect): Initialize inputStream, moved "send request" code to new
+ 	method.
+ 	(sendRequest): New method.
+ 	(getHttpHeaders): Don't reinitialize inputStream.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol//http/Connection.java
+ 	(defRequestProperties): Removed. This dont gets used since JDK 1.3.
+ 	(requestProperties): Initialize, documentation added.
+ 	(inputStream): Renamed from bufferedIn.
+ 	(Connection): Dont initialize requestProperties.
+ 	(setDefaultRequestProperty): Removed.
+ 	(getDefaultRequestProperty): Removed.
+ 	(usingProxy): Documentation added.
+ 	(getHttpHeaders): Likewise.
+ 
+ 2003-12-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/DateFormat.java:
+ 	Explicitely import used classes.
+ 
+ 2003-12-01  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* verify.cc (state::clean_subrs): Clear seen_subrs.
+ 	(state::copy): Walk seen_subrs from copy, not `this'.
+ 	Don't clear seen_subrs.
+ 
+ 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  Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* java/awt/TextComponent.java:
+ 	(getSelectionStart): Updated javadocs.
+ 	(getSelectionEnd): Ditto.
+ 	* 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/awt/gtk/GtkButtonPeer.java, gnu/awt/gtk/gtkcommon.cc,
+ 	gnu/awt/gtk/gtkcommon.h, gnu/awt/gtk/GtkComponentPeer.java,
+ 	gnu/awt/gtk/GtkContainerPeer.java,
+ 	gnu/awt/gtk/GtkFramePeer.java, gnu/awt/gtk/GtkLabelPeer.java,
+ 	gnu/awt/gtk/GtkMainThread.java, gnu/awt/gtk/GtkToolkit.java,
+ 	gnu/awt/gtk/GtkWindowPeer.java, gnu/awt/gtk/natGtkButtonPeer.cc,
+ 	gnu/awt/gtk/natGtkComponentPeer.cc,
+ 	gnu/awt/gtk/natGtkContainerPeer.cc,
+ 	gnu/awt/gtk/natGtkFramePeer.cc, gnu/awt/gtk/natGtkLabelPeer.cc,
+ 	gnu/awt/gtk/natGtkMainThread.cc, gnu/awt/gtk/natGtkToolkit.cc,
+ 	gnu/awt/gtk/natGtkWindowPeer.cc: Remove files.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	(closed): Mark loader parameter as unused.
+ 
+ 2003-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/http/Connection.java
+ 	(Connection): Merged class documentation.
+ 	(socket): Renamed from sock.
+ 	(Connection): Made protected, documentation added.
+ 	(connect): Give URL'S host instead of InetAddress to Socket
+ 	constructor.
+ 	(disconnect): Documentation added.
+ 	(getOutputStream): Rewrapped.
+ 
+ 2003-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java
+ 	(fileIn): Documentation added.
+ 	(inputStream): Likewise.
+ 	(outputStream): Likewise.
+ 	(Connection): Likewise.
+ 	(connect): Simplified.
+ 
+ 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-12-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/natPlainSocketImplPosix.cc
+ 	bind(): Dont set SockedImpl.address field on succesful bind.
+ 	* gnu/java/net/natPlainSocketImplWin32.cc
+ 	bind(): Likewise.
+ 
+ 2003-11-30  Jeff Sturm <jsturm@one-point.com>
+ 
+ 	* java/net/InetAddress.java:
+ 	(static): Don'f force DNS request for ANY_IF address.
+ 
+ 2003-11-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java,
+ 	java/net/natInetAddressNoNet.cc,
+ 	java/net/natInetAddressPosix.cc,
+ 	java/net/natInetAddressWin32.cc:
+ 	Reverted my last patch.
+ 
+ 2003-11-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(lookup): New method that doesnt lookup "0.0.0.0".
+ 	(ImplLookup): Renamed from lookup.
+ 	* java/net/natInetAddressNoNet.cc
+ 	(ImplLookup): Renamed from lookup.
+ 	* java/net/natInetAddressPosix.cc
+ 	(ImplLookup): Renamed from lookup.
+ 	* java/net/natInetAddressWin32.cc
+ 	(ImplLookup): Renamed from lookup.
+ 
+ 2003-11-28  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in: Require gtk and glib 2.2.0.
+ 
+ 2003-11-27  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-27  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-27  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* 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.
+ 
+ 2003-11-27  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/FormatCharacterIterator.java: Documented the class and
+ 
+ 2003-11-27  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/FormatCharacterIterator.java: Fixed some typos.
+ 
+ 2003-11-27  Guilhem Lavaux <guilhem@kaffe.org>
+ 
+ 	* java/text/NumberFormat.java:
+ 	(getIntegerInstance) Added the java version in the comments.
+ 
+ 2003-11-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/text/NumberFormat.java: Import java.io.InvalidObjectException.
+ 	(readResolve): Reformat.
+ 
+ 2003-11-27  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
+ 
+ 2003-11-27  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-27  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* javax/swing/plaf/basic/BasicDefaults.java (BasicDefaults): Put
+ 	AbstractUndoableEdit.undoText and AbstractUndoableEdit.redoText.
+ 
+ 2003-11-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/UIDefaults.java:
+ 	Reformated to match classpath's version.
+ 
+ 2003-11-27  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/UIManager.java (getDefaults, getDimension,
+ 	getIcon, getInsets, getInstalledLookAndFeels, getInt,
+ 	getLookAndFeel, getString, getSystemLookAndFeelClassName):
+ 	Declare as public.
+ 
+ 2003-11-26  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/StateEdit.java (getPresentationName): Docfix.
+ 	* javax/swing/undo/AbstractUndoableEdit.java (canUndo, canRedo,
+ 	isSignificant): Likewise.
+ 
+ 2003-11-26  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-26  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/StateEdit.java: Re-format, document.
+ 	(undo, redo): Also call inherited implementation.
+ 
+ 2003-11-26  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* javax/swing/undo/StateEditable.java: Re-format, document.
+ 
+ 2003-11-26  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-26  David Belanger  <dbelan2@cs.mcgill.ca>
+ 
+ 	* java/util/zip/ZipFile (Zipfile(File)): Set file path as name.
+ 	(ZipFile(File,int)): Likewise.
+ 
+ 2003-11-26  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-26  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 Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natDouble.cc (parseDouble): Reverted patch of
+ 	2003-11-13.
+ 
+ 2003-11-26  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-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DategramSocket, bind): Moved binding code from DatagramSocket
+ 	constructor to bind method.
+ 
+ 2003-11-26  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-11-26  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-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/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>
+ 
+ 	* gnu/java/net/protocol/file/Handler.java
+ 	(Handler): New explicit constructor.
+ 	(openConnection): Added documentation.
+ 	* gnu/java/net/protocol/jar/Handler.java
+ 	(Handler): New explicit constructor.
+ 	(openConnection): Added documentation.
+ 
+ 2003-11-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramPacket.java
+ 	(DatagramPacket): Fixed documentation to become legal HTML.
+ 
+ 2003-11-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gcj/javaprims.h: Added missing java.util.Currency.
+ 
+ 2003-11-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* testsuite/libjava.mauve/xfails:
+ 	Removed these two tests, they mystically pass now:
+ 	-FAIL: gnu.testlet.java.net.ServerSocket.ServerSocketTest: Error :
+ 	test_params failed - 5getInetAddress did not return proper values
+ 	(number 1)
+ 	-FAIL: gnu.testlet.java.net.Socket.SocketTest: Error :
+ 	test_BasicServer failed - 11 exception was thrown :Illegal seek
+ 	(number 1)
+ 
+ 2003-11-25  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.
+ 	(toString): Make output compliant to JDK 1.4.2.
+ 	* 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-11-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (propdir): New macro.
+ 	(install-data-local): Install logging.properties.
+ 	(core_java_source_files): Added java.util.logging.*.
+ 	* java/util/logging/logging.properties: New file.
+ 
+ 2003-11-25  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.
+ 
+ 2003-11-24  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-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc
+ 	(peekData): Use offset and maximal free space in datagram packet.
+ 	(receive): Likewise.
+ 	(send): Use offset in datagram packet.
+ 
+ 2003-11-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc
+ 	(peekData): Use offset and maximal free space in datagram packet.
+ 	(receive): Likewise.
+ 	(send): Use offset in datagram packet.
+ 
+ 2003-11-22  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-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  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/Float.java (static): Removed.
+ 
+ 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.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: 
+ 	Match changes to java side.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c: 
+ 	Release resources.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: 
+ 	Don't use pango for metrics.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c: 
+ 	New file.
+ 
+ 2003-11-19  Guilhem Lavaux <guilhem@kaffe.org>
+ 	    Jim Pick  <jim@kaffe.org>
+ 
+ 	* java/text/DecimalFormat.java (getCurrency, setCurrency): New
+ 	methods.
+ 
+ 2003-11-19  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/text/DecimalFormatSymbols.java (getCurrency,
+ 	setCurrency): New methods.
+ 
+ 2003-11-19  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-19  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-11-19  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* lib/libjava.exp: Add DYLD_LIBRARY_PATH for darwin. Look for
+ 	the right libgcc. Add -multiply_defined suppress and -bind_at_load
+ 	flags.
+ 
+ 2003-11-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/13026:
+ 	* verify.cc (state::copy): Only set local_changed if we're in a
+ 	subroutine.  Correctly copy local variables which were modified
+ 	by the subroutine.
+ 	(push_jump_merge): Added more debugging output.
+ 
+ 	* jni.cc (_Jv_JNI_GetStringUTFChars): Fail gracefully if string
+ 	is null.
+ 
+ 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-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/13062:
+ 	* java/io/StreamTokenizer.java (commentChar): Clear other
+ 	attributes for character.
+ 	(quoteChar): Likewise.
+ 
+ 2003-11-14  Thomas 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-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc (_Jv_JNI_GetStringUTFChars): Pass length of string to
+ 	JvGetStringUTFRegion.
+ 	* java/lang/natPosixProcess.cc (new_string): Pass length of string
+ 	to JvGetStringUTFRegion.
+ 	* java/lang/natDouble.cc (parseDouble): Pass length of string to
+ 	JvGetStringUTFRegion.
+ 	* java/lang/natWin32Process.cc (startProcess): Pass length of
+ 	string to JvGetStringUTFRegion.
+ 	* java/lang/natClass.cc (forName): Pass length of string to
+ 	JvGetStringUTFRegion.
+ 	* gnu/gcj/runtime/natNameFinder.cc (getExternalLabel): Pass length
+ 	of string to JvGetStringUTFRegion.
+ 	* gnu/gcj/convert/natIconv.cc (init): Pass length of string to
+ 	JvGetStringUTFRegion.
+ 	* gnu/awt/gtk/natGtkLabelPeer.cc (setText): Pass length of string
+ 	to JvGetStringUTFRegion.
+ 	* gnu/awt/gtk/natGtkButtonPeer.cc (setLabel): Pass length of
+ 	string to JvGetStringUTFRegion.
+ 
+ 2003-11-13  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* gnu/java/nio/natSelectorImplPosix.cc
+ 	(helper_put_filedescriptors): Change to static linkage.
+ 	(helper_get_filedescriptors): Likewise.
+ 
+ 2003-11-12  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (prepareImage): Remove
+ 	null check.
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java (prepareImage): Likewise.
+ 	* java/awt/Component.java (prepareImage): Likewise.
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (setAlignment):
+ 	Rename to nativeSetAlignment.
+ 
+ 2003-11-11  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	* jni.cc (JNI_CreateJavaVM): Remove JNIEXPORT.
+ 	(JNI_GetCreatedJavaVMs): Likewise.
+ 	(JNI_GetDefaultJavaVMInitArgs): Likewise.
+ 	* include/jni.h (JNIIMPEXP): Remove definition
+ 	and replace with...
+ 	(__GCJ_JNIIMPEXP__): New macro, applicable only to libgcj
+ 	symbols,
+ 	(__GCJ_DLL__): New macro, controlling __GCJ_JNIIMPEXP__.
+ 
+ 2003-11-11  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* Makefile.am: Add GdkPixbufDecoder.java and
+ 	gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ 	* Makefile.in: Regenerate.
+ 	* 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-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  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:
+ 	Removed some redundant obj == null checks.
+ 
+ 2003-11-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java
+ 	(equals): Remove redundant obj == null check.
+ 
+ 2003-11-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/natPipeImpl.cc,
+ 	gnu/java/nio/natSelectorImpl.cc: Removed
+ 	* gnu/java/nio/natPipeImplEcos.cc,
+ 	gnu/java/nio/natPipeImplPosix.cc,
+ 	gnu/java/nio/natPipeImplWin32.cc,
+ 	gnu/java/nio/natSelectorImplEcos.cc,
+ 	gnu/java/nio/natSelectorImplPosix.cc,
+ 	gnu/java/nio/natSelectorImplWin32.cc: New files
+ 	* configure.in: Create links for gnu/java/nio/natPipeImpl.cc and
+ 	gnu/java/nio/natSelectorImpl.cc
+ 	* configure: Regenerated.
+ 
+ 2003-11-11  Micheal Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLStreamHandler.java (toExternalForm): Print port only
+ 	if host is printed too and port was really given to URL.
+ 
+ 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-08  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* gnu/gcj/runtime/FirstThread.java (Klocale, Kcalendar):
+ 	New fields.
+ 
+ 2003-11-08  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* java/io/ByteArrayOutputStream.java (resize):
+ 	Fix off-by-one error.
+ 
+ 2003-11-08  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* gnu/gcj/xlib/XAnyEvent.java (XAnyEvent): Make constructor
+ 	public.
+ 
+ 2003-11-06  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	PR libgcj/12231
+ 	* java/lang/Win32Process.java (hasExited) Changed from
+ 	public to private.
+ 	(startProcess): Likewise.
+ 	(cleanup): Likewise.
+ 	* java/lang/natWin32Process.cc (cleanup) Don't close
+ 	input, output and error streams.
+ 	(ChildProcessPipe): New helper class.
+ 	(startProcess): Refactored to use ChildProcessPipe.
+ 	Use CREATE_NO_WINDOW when launching child process.
+ 
+ 2003-11-06  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* include/win32.h (_Jv_platform_close_on_exec): Changed
+ 	signature and declared extern.
+ 	* win32.cc (_Jv_platform_close_on_exec): Implemented.
+ 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc
+ 	(create): Use new signature of _Jv_platform_close_on_exec.
+ 	* gnu/java/net/natPlainSocketImplWin32.cc 
+ 	(create): Eliminated a few typecasts
+ 	Use new signature of _Jv_platform_close_on_exec.
+ 	(accept): Eliminated a few typecasts
+ 	Use new signature of _Jv_platform_close_on_exec.
+ 	* java/io/natFileDescriptorWin32.cc (open): Use
+ 	_Jv_platform_close_on_exec.
+ 
+ 2003-11-04  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/lang/natClass.cc (newInstance): Throw InstantiationException
+ 	if class has no null-argument constructor.
+ 
+ 2003-10-30  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	PR libgcj/12647:
+ 	* win32-threads.cc (_Jv_CondWait): Respect mutex's
+ 	refcount when releasing and reacquiring it.
+ 
+ 2003-10-30  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* win32.cc: (dirExists) Internal helper function to
+ 	test for directory existence.
+ 	(getUserHome) New helper function refactored out
+ 	of _Jv_platform_initProperties. Uses USERPROFILE
+ 	instead of HOMEDIR and attempts to support Win9X and NT.
+ 	(_Jv_platform_initProperties) Use getUserHome.
+ 
+ 2003-10-30  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	PR libgcj/11521:
+ 	* gnu/java/net/natPlainSocketImplWin32.cc
+ 	(bind): Don't use SO_REUSEADDR
+ 
+ 2003-10-30  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	PR libgcj/6652:
+ 	* java/io/natFileWin32.cc (getCanonicalPath): Treat "" like ".".
+ 
+ 2003-10-30  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Don't use vtable
+ 	dispatch for final methods.
+ 
+ 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-29  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-29  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-29  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-29  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-29  Ito Kazumitsu <kaz@maczuka.gcd.org>
+ 
+ 	* java/text/DecimalFormat.java
+ 	(scanFormat) corrected so that '%' may appear in a pattern.
+ 
+ 2003-10-29  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.
+ 
+ 2003-10-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	From Guilhem Lavaux  <guilhem.lavaux@free.fr>
+ 	* java/util/Currency.java: New file.
+ 
+ 2003-10-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am (ordinary_java_source_files): Added
+ 	java/text/FormatCharacterIterator.java and java/util/Currency.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-10-29  Dalibor Topic  <robilad@kaffe.org>
+ 
+ 	* gnu/java/beans/IntrospectionIncubator.java (addMethod): Add public
+ 	static methods.
+ 
+ 2003-10-29  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.
+ 	* javax/naming/InitialContext.java (lookup(Name)): When a
+ 	CannotProceedException is thrown use the ContinuationContext.
+ 	(lookup(String)): Likewise.
+ 	(close): Clear myProps and defaultInitCtx.
+ 
+ 2003-10-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(equals): Remove redundant obj == null check.
+ 	* java/net/SocketPermission.java
+ 	(equals): Likewise.
+ 	* java/net/URL.java
+ 	(equals): Likewise.
+ 	(getURLStreamHandler): Likewise.
+ 
+ 2003-10-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/natPlainDatagramSocketImplPosix.cc
+ 	(setOption): Directly return if no error occured.
+ 	* gnu/java/net/natPlainSocketImplPosix.cc
+ 	(setOption): Likewise.
+ 
+ 2003-10-28  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Always assign a
+ 	vtable slot for final methods. Add FIXME comment.
+ 
+ 2003-10-28  David S. Miller  <davem@redhat.com>
+ 
+ 	* sysdep/sparc/locks.h (__cas_start_atomic): %g0 --> %%g0.
+ 
+ 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().
+ 
+ 	* java/util/zip/DeflaterOutputStream.java (inbufWrite): New method.
+ 	(finish): Use inbufWrite().
+ 	(write(int)): Likewise.
+ 	(write(byte[],int,int)): Likewise.
+ 
+ 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-26  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/lang/reflect/Constructor.java (toString): Avoid extra 
+ 	whitespace on constructor with no modifiers.
+ 	* java/lang/reflect/natConstructor.java (newInstance): Look up
+ 	caller and perform accessibility check only if constructor is
+ 	non-public and accessible flag is not set.
+ 
+ 2003-10-26  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* jni.cc (_Jv_JNI_CallAnyMethodV, _Jv_JNI_CallAnyMethodA,
+ 	_Jv_JNI_CallAnyVoidMethodV, _Jv_JNI_CallAnyVoidMethodA): Don't
+ 	use _Jv_LookupDeclaredMethod(). Call _Jv_CallAnyMethodA with 
+ 	is_virtual_call argument.
+ 	* include/jvm.h (_Jv_isVirtualMethod): Moved and renamed from 
+ 	natClass.cc.
+ 	* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Use 
+ 	_Jv_isVirtualMethod.
+ 	* java/lang/reflect/natMethod.cc (invoke): Don't use 
+ 	_Jv_LookupDeclaredMethod.
+ 	(_Jv_CallAnyMethodA): New is_virtual_call argument. If specified,
+ 	look up method in target object's vtable.
+ 
+ 2003-10-25  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/ClasspathToolkit.java: New abstract class.
+ 	* gnu/java/awt/peer/ClasspathFontPeer.java: New abstract class.
+ 	* gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c:
+ 	New concrete implementation of ClasspathFontPeer, with native part.
+ 	* gnu/java/awt/peer/gtk/GdkGlyphVector.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
+ 	New class, with native part.
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
+ 	implement setFont, cairoSetFont, drawGlyphVector, cairoShowGlyphs.
+ 
+ 2003-10-25  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/lang/reflect/Method.java (toString): Avoid extra whitespace
+ 	on method with no modifiers.
+ 
+ 2003-10-25  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	PR libgcj/11780:
+ 	* java/lang/reflect/natMethod.cc (invoke): Look up caller and perform
+ 	accessibility check only if target is non-public and accessible flag
+ 	is not set.
+ 	* java/lang/reflect/natField.cc (getAddr): Likewise.
+ 
+ 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  Anthony Green  <green@redhat.com>
+ 
+ 	* java/lang/natClass.cc (_Jv_LinkSymbolTable): Fix case where
+ 	we have no interpreter.
+ 
+ 2003-10-22  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natClass.cc (initializeClass): Call
+ 	_Jv_linkExceptionClassTable.
+ 	(_Jv_LinkSymbolTable): Call )_Jv_ThrowNoSuchMethodError.  Call
+ 	_Jv_Defer_Resolution on a method whose ncode is NULL.
+ 	(_Jv_linkExceptionClassTable): New function.
+ 	(_Jv_LayoutVTableMethods): If superclass looks like a constant pool
+ 	entry, look it up.
+ 	* java/lang/Class.h (struct _Jv_CatchClass): New.
+ 	(_Jv_linkExceptionClassTable): New friend.
+ 	(_Jv_Defer_Resolution): New friend.
+ 	(class Class.catch_classes): New field.
+ 	* include/java-interp.h (Jv_Defer_Resolution): New method.
+ 	(_Jv_PrepareClass): Make a friend of _Jv_MethodBase.
+ 	(_Jv_MethodBase.deferred): New field.
+ 	(_Jv_Defer_Resolution): New function.
+ 	* resolve.cc (_Jv_PrepareClass): Resolve deferred handlers.
+ 	* exception.cc (get_ttype_entry): Change return type to void**.
+ 	(PERSONALITY_FUNCTION): Remove all code related to using a
+ 	Utf8Const* for a match type.  Change match type to be a pointer to
+ 	a pointer, rather than a pointer to a Class.
+ 	* defineclass.cc (handleCodeAttribute): Initialize
+ 	method->deferred.
+ 	(handleMethodsEnd): Likewise.
+ 
+ 2003-10-23  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* java/lang/natObject.cc (_Jv_ObjectCheckMonitor): Use
+ 	_Jv_MutexCheckMonitor instead of accessing mutex.owner directly.
+ 
+ 2003-10-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/12416:
+ 	* java/lang/Class.h: Updated.
+ 	* java/lang/natClass.cc (_getFields): Removed.
+ 	(getFields): Likewise.
+ 	(getDeclaredFields): Added `public_only' parameter.
+ 	* java/lang/Class.java (getFields): Now implemented in java; from
+ 	Classpath.
+ 	(getDeclaredFields): Likewise.
+ 	(getDeclaredFields(boolean)): Declare.
+ 	(_getFields): Removed.
+ 	(internalGetFields): New method, from Classpath.
+ 
+ 	PR libgcj/12656:
+ 	* gnu/gcj/runtime/natFirstThread.cc (call_main): Use
+ 	_Jv_LookupDeclaredMethod, not _Jv_GetMethodLocal.
+ 
+ 2003-10-22  David Daney  <ddaney@avtrex.com)
+ 
+ 	* include/mips-signal.h: New file.
+ 	* sysdep/dwarf2-backtrace.cc: New file.
+ 	* sysdep/mips: New directory.
+ 	* sysdep/mips/locks.h: New file.
+ 	* Makefile.am(extra_cc_files): New, to allow extra c++ files to be
+ 	added to libgcj.
+ 	(extra_cc_source_files): Ditto.
+ 	* configure.host(disable_dladdr):  New shell variable passed to
+ 	configure.
+ 	(mips*-*-linux*): sysdeps_dir=mips,
+ 	can_unwind_signal=yes, disable_dladdr=yes, use -mxgot.
+ 	(mipsel*-linux* | mipsisa32el*-linux*): Enable hash synchronization.
+ 	* configure.in:(mips*-*-linux*): Use sysdep/dwarf2-backtrace.cc to
+ 	generate backtrace, and include/mips-signal.h as SIGNAL_HANDLER
+ 	(HAVE_DLADDR): Make it depend on setting of disable_dladdr.
+ 	(EXTRA_CC_FILES): New, to support conditional addition of
+ 	sysdep/dwarf2-backtrace.cc.
+ 	* configure: Regenerated.
+ 	* Makefile.in: Regenerated.
+ 	* gcj/Makefile.in: Regenerated.
+ 	* include/config.h.in: Regenerated.
+ 	* include/Makefile.in: Regenerated.
+ 	* testsuite/Makefile.in: Regenerated.
+ 	
+ 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-22  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/geom/QuadCurve2D.java (getFlatness, getFlatnessSq): Implement.
+ 
+ 2003-10-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(equals): Removed redundant obj == null check.
+ 	(createTempFile): Merged comments from classpath.
+ 
+ 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-21  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-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>
+ 
+ 	* java/awt/geom/GeneralPath.java (getCurrentPoint): Return last
+ 	point, not start of subpath.  Fixes Classpath bug #6075.
+ 
+ 2003-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteOrder.java,
+ 	java/nio/DirectByteBufferImpl.java,
+ 	java/nio/channels/FileChannelImpl.java:
+ 	Add code to load library with code for native methods if needed.
+ 
+ 2003-10-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java,
+ 	gnu/java/net/PlainSocketImpl.java,
+ 	gnu/java/net/natPlainDatagramSocketImplPosix.cc,
+ 	gnu/java/net/natPlainDatagramSocketImplWin32.cc,
+ 	gnu/java/net/natPlainSocketImplPosix.cc,
+ 	gnu/java/net/natPlainSocketImplWin32.cc:
+ 	Renamed fnum to native_fd to match classpath more.
+ 
+ 2003-10-21  Jerry Quinn  <jlquinn@optonline.net>
+ 
+         * posix-threads.cc (_Jv_CondNotify,_Jv_CondNotifyAll): Rename
+         _Jv_PthreadCheckMonitor to _Jv_MutexCheckMonitor.
+ 	* include/no-threads.h (_Jv_MutexCheckMonitor): New.
+ 	* include/posix-threads.h (_Jv_MutexCheckMonitor): Rename from
+         _Jv_PthreadCheckMonitor.  Simplify code.
+ 	(_Jv_MutexUnlock): Use _Jv_MutexCheckMonitor.
+ 	* include/win32-threads.h (_Jv_MutexCheckMonitor): New.
+ 	* java/lang/Object.h (_Jv_ObjectCheckMonitor): Declare.
+ 	* java/lang/Thread.java (holdsLock): New.
+ 	* java/lang/natObject.cc (_Jv_ObjectCheckMonitor): New, with and
+         without JV_HASH_SYNCHRONIZATION.
+ 	* java/lang/natThread.cc (java::lang::Thread::holdsLock): New.
+ 
+ 2003-10-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/RuleBasedCollator.java
+ 	(RuleBasedCollator): Check rules not empty, fixed search in already
+ 	existing collation elements.
+ 	(is_special): Removed common whitespace characters.
+ 	(text_argument): Dont return on whitespaces, add characters between
+ 	two ' to string buffer.
+ 
+ 2003-10-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/protocol/file/Connection.java,
+ 	gnu/java/net/protocol/file/Handler.java,
+ 	gnu/java/net/protocol/http/Connection.java,
+ 	gnu/java/net/protocol/http/Handler.java,
+ 	gnu/java/net/protocol/jar/Connection.java,
+ 	gnu/java/net/protocol/jar/Handler.java:
+ 	Merged copyright text from classpath to make
+ 	it possible to merge the classes.
+ 
+ 2003-10-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by M.Negovanovic
+ 	* java/beans/IndexedPropertyDescriptor.java
+ 	(IndexedPropertyDescriptor): this.setIndex = setIndex, not getIndex.
+ 
+ 2003-10-17  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* win32.cc (_Jv_pipe): Implemented.
+ 	* gnu/java/nio/natPipeImpl.cc (nativeInit): Use
+ 	_Jv_pipe instead of ::pipe.
+ 	* include/posix.h (_Jv_pipe): New inline.
+ 	* include/win32.h (_Jv_pipe): New declaration.
+ 	
+ 2003-10-17  Ralph Loader  <rcl@ihug.co.nz>
+ 
+ 	* java/lang/StringBuffer.java (getChars): Fix array index checks.
+ 	(append, substring, insert): Likewise.
+ 	* testsuite/libjava.lang/StringBuffer_overflow.java: New file.
+ 	* testsuite/libjava.lang/StringBuffer_overflow.out: New file.
+ 	
+ 2003-10-17  Ralph Loader  <rcl@ihug.co.nz>
+ 
+ 	* java/lang/natString.cc (getChars):
+ 	Fix validation of array indexes.
+ 	(getBytes, regionMatches, startsWith, valueOf): Likewise.
+ 	* testsuite/libjava.lang/String_overflow.java: New file.
+ 	* testsuite/libjava.lang/String_overflow.out: New file.
+ 
+ 2003-10-17  Ralph Loader  <rcl@ihug.co.nz>
+ 
+ 	* prims.cc (_Jv_NewObjectArray): Make sure byte size doesn't
+ 	overflow a jint.
+ 	(_Jv_NewPrimArray): Check for overflowing a jint, replacing a
+ 	check for overflowing size_t, since the lower level functions
+ 	take a jint.
+ 	* testsuite/libjava.lang/newarray_overflow.java:  New file.
+ 	* testsuite/libjava.lang/newarray_overflow.out:  New file.
+ 	
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/RuleBasedCollator.java
+ 	(RuleBasedCollator): Moved around, documentation added.
+ 	(compare): Documentation added.
+ 	(equals): Likewise.
+ 	(getCollationElementIterator): Likewise.
+ 	(getCollationKey): Likewise.
+ 	(getRules): Likewise.
+ 	(hashCode): Likewise.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/RuleBasedCollator.java
+ 	(CollationElement): Renamed from RBCElement and moved into
+ 	RuledBasedCollator as inner class.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(CollationElementIterator): Moved, documenatation added, call setText.
+ 	(next): Reformated.
+ 	(reset): Reformated.
+ 	(setText): New method.
+ 	(getOffset): New method.
+ 	* java/text/CollationKey.java
+ 	(getSourceString): Reformated.
+ 	(hashCode): Reformated.
+ 	(toByteArray): Reformated.
+ 
+ 2003-10-15  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/InflaterInputStream.java
+ 	(InflaterInputStream): Renamed infl to inf and bufsize to size,
+ 	added description to exception, check for inf == null and size < 0.
+ 
+ 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>
+ 
+ 	* javax/swing/UIDefaults.java (putDefaults):
+ 	Readded accidently removed "public" modifier.
+ 
+ 2003-10-14  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* interpret.cc (_Jv_InterpMethod::run): Don't
+ 	use libffi types, they were meant to be internal.
+ 	* gcj/javaprims.h (_Jv_ulong): New typedef.
+ 
+ 2003-10-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natClassLoader.cc (_Jv_InitNewClassFields): Removed.
+ 	(defineClass): Updated.
+ 	(_Jv_NewClass): Likewise.
+ 	* prims.cc (_Jv_InitPrimClass): Don't call
+ 	_Jv_InitNewClassFields.
+ 
+ 2003-10-13  Taras Glek  <taras.judge@shaw.ca>
+ 
+ 	PR libgcj/12592
+ 	* gnu/java/net/protocol/http/Connection.java (connect): Use \r\n,
+ 	not just \n.
+ 
+ 2003-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java: Reformated.
+ 	(equals): Check for obj == null.
+ 
+ 2003-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(jarFileURL): Added dcoumentation.
+ 	(jarFileURLConnection): Reformated documentation.
+ 	(entryName): Renamed from "element", documentation rewritten.
+ 	(connectionCache): Renamed from "conn_cache", documentation
+ 	reformated.
+ 	(JarURLConnection): Check URL protocol.
+ 	(getEntryName): Use entryName.
+ 	(connect): Use connectionCache.
+ 	(getInputStream): Use entryName, fixed comment.
+ 	(getJarEntry): Use entryName.
+ 	(getHeaders): Use entryName.
+ 	* java/net/URLConnection.java
+ 	(addRequestProperty): Fixed documentation.
+ 	(setDefaultRequestProptery): Added comment that it does nothing since
+ 	JDK 1.3.
+ 	(getDefaultRequestProperty): Likewise.
+ 
+ 2003-10-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/java/net/URLStreamHandlerFactory.java
+ 	(createURLStreamHandler): Removed redundant "public" modifier.
+ 	* java/sql/DatabaseMetaData.java:
+ 	(DatabaseMetaData):  Readded accidently removed "public" modifier.
+ 	* java/sql/ParameterMetaData.java:
+ 	(ParameterMetaData): Readded accidently removed "public" modifier.
+ 	* java/sql/PreparedStatement.java:
+ 	(PreparedStatement): Readded accidently removed "public" modifier.
+ 	* java/sql/Ref.java:
+ 	(Ref): Readded accidently removed "public" modifier.
+ 
+ 2003-10-13  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>
+ 
+ 	* 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/SelectorProviderImpl.java
+ 	(openPipe): Give provider as argument to PipeImpl constructor.
+ 	* java/nio/channels/spi/SelectorProvider.java
+ 	(pr): Removed.
+ 	(systemDefaultProvider): New member variable.
+ 	(provider): Made it synchronized, use property
+ 	java.nio.channels.spi.SelectorProvider.
+ 	* gnu/java/nio/natPipeImpl.cc: New file.
+ 	* Makefile.am (nat_source_files): Added gnu/java/nio/natPipeImpl.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-10-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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,
+ 	javax/swing/undo/StateEditable.java,
+ 	javax/swing/undo/UndoableEdit.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/plaf/UIResource.java,
+ 	javax/swing/plaf/metal/MetalLookAndFeel.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:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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:
+ 	Removing redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/print/attribute/Attribute.java,
+ 	javax/print/attribute/AttributeSet.java,
+ 	javax/print/attribute/PrintRequestAttributeSet.java:
+ 	Removing redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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:
+ 	Removing redundant modifiers.
+ 
+ 2003-10-11  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:
+ 	Removing redundant modifiers.
+ 
+ 2003-10-11  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-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/server/ProtocolConstants.java,
+ 	gnu/java/security/der/DER.java:
+ 	Removing redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Map.java,
+ 	java/util/Observer.java,
+ 	java/util/zip/Checksum.java,
+ 	java/util/zip/ZipConstants.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/AttributedCharacterIterator.java,
+ 	java/text/CharacterIterator.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  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:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  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-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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/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-11  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,
+ 	java/net/URLStreamHandlerFactory.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/Externalizable.java,
+ 	java/io/FileFilter.java,
+ 	java/io/FilePermission.java,
+ 	java/io/ObjectInput.java,
+ 	java/io/ObjectInputValidation.java,
+ 	java/io/ObjectOutput.java,
+ 	java/io/ObjectStreamClass.java,
+ 	java/io/ObjectStreamConstants.java,
+ 	java/io/Serializable.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/rmi/server/RMIClassLoader.java: Identify cached classloaders by 
+ 	codebase and context classloader.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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-11  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:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/print/Pageable.java,
+ 	* java/awt/print/Printable.java,
+ 	java/awt/print/PrinterGraphics.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIOSocket.java (setChannel): Initialize impl.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(serverSocket): Made it a NIOServerSocket.
+ 	(impl): Removed.
+ 	(ServerSocketChannelImpl): Initialize only serverSocket.
+ 	(initServerSocket): Removed.
+ 	(getNativeFD): Rewritten.
+ 	(implConfigureBlocking): Set socket timeout and removed comment.
+ 	(accept): Rewritten.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(impl): New variable.
+ 	(connected): Removed.
+ 	(SocketChannelImpl): Initialize impl too.
+ 	(getImpl): New method.
+ 	(isConnected): Rewritten.
+ 	(read): Rewritten, set position in buffer correctly.
+ 	(write): Set position in buffer correctly.
+ 	* java/net/ServerSocket.java (getImpl): New method.
+ 	* gnu/java/nio/NIOServerSocket.java,
+ 	gnu/java/nio/natNIOServerSocket.cc: New files.
+ 	* gnu/java/nio/natServerSocketChannelImpl.cc: Removed.
+ 	* Makefile.am
+ 	(ordinary_java_source_files):
+ 	Added gnu/java/nio/NIOServerSocket.java.
+ 	(nat_source_files):
+ 	Removed gnu/java/nio/natServerSocketChannelImpl.cc
+ 	and added gnu/java/nio/natNIOServerSocket.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-10-11  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/ImageObserver.java,
+ 	java/awt/image/ImageConsumer.java,
+ 	java/awt/image/ImageProducer.java,
+ 	java/awt/image/RGBImageFilter.java,
+ 	java/awt/image/RasterOp.java,
+ 	java/awt/image/renderable/RenderableImage.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/awt/j2d/DirectRasterGraphics.java,
+ 	gnu/java/awt/EmbeddedWindowSupport.java:
+ 	Removed redundant modifiers.
+ 
+ 2003-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectorImpl.java (register):
+ 	Use ServerSocketChannelSelectionKey for server socket channels,
+ 	removed unneeded comments.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(ServerSocketChannelImpl): Made class public final.
+ 	(impl): New member variable.
+ 	(ServerSocketChannelImpl): Initialize member variables correctly.
+ 	(initServerSocket): New method.
+ 	(getNativeFD): Likewise.
+ 	* gnu/java/nio/ServerSocketChannelSelectionKey.java,
+ 	gnu/java/nio/natServerSocketChannelImpl.cc: New files.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added gnu/java/nio/ServerSocketChannelSelectionKey.java.
+ 	(nat_source_files): Added gnu/java/nio/natServerSocketChannelImpl.cc.
+ 	* Makefile.in: Regenrated.
+ 
+ 2003-10-09  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.
+ 
+ 2003-10-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (setSigners): Implemented.
+ 	* boehm.cc (_Jv_MarkObj): Mark `signers' field.
+ 	* java/lang/natClassLoader.cc (_Jv_InitNewClassFields):
+ 	Initialize new fields.
+ 	* java/lang/Class.java (getSigners): Now native.
+ 	(setSigners): Declare.
+ 	* java/lang/natClass.cc (getSigners): New method.
+ 	(getSigners): Likewise.
+ 	* java/lang/Class.h (Class::signers): New field.
+ 	(Class::setSigners): New method.
+ 
+ 2003-10-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/server/RMIClassLoader.java:
+ 	Removed unused imports, little reformatings.
+ 	(getClassLoader): New method, implementation was part of old loadCLass
+ 	method.
+ 	(loadClass): Simplified by moving functionality to new method and
+ 	reworking the code a bit.
+ 	(getClassAnnotation): Merged documentation from classpath.
+ 
+ 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  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Security.java: Reformated.
+ 
+ 2003-10-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/SimpleDateFormat.java
+ 	(compileFormat): Replace Character.isLetter() test with
+ 	Character.isLowerCase() || Character.isUpperCase().
+ 
+ 2003-10-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/StrictMath.java (toDegrees): Multiply before
+ 	dividing.
+ 	(toRadians): Likewise.
+ 
+ 2003-10-08  C. Brian Jones  <cbj@gnu.org>
+ 
+ 	* java/lang/Math.java
+ 	(toRadians): multiply before dividing to reduce decimal error
+ 	(toDegrees): ditto
+ 
+ 2003-10-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/gcj/protocol/core/Connection.java,
+ 	gnu/gcj/protocol/core/CoreInputStream.java,
+ 	gnu/gcj/protocol/core/Handler.java,
+ 	gnu/gcj/protocol/core/natCoreInputStream.cc,
+ 	gnu/gcj/protocol/file/Connection.java,
+ 	gnu/gcj/protocol/file/Handler.java,
+ 	gnu/gcj/protocol/gcjlib/Connection.java,
+ 	gnu/gcj/protocol/gcjlib/Handler.java,
+ 	gnu/gcj/protocol/http/Connection.java,
+ 	gnu/gcj/protocol/http/Handler.java,
+ 	gnu/gcj/protocol/jar/Connection.java,
+ 	gnu/gcj/protocol/jar/Handler.java: Moved to gnu/java/net/protocol.
+ 	* 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/core/natCoreInputStream.cc,
+ 	gnu/java/net/protocol/file/Connection.java,
+ 	gnu/java/net/protocol/file/Handler.java,
+ 	gnu/java/net/protocol/gcjlib/Connection.java,
+ 	gnu/java/net/protocol/gcjlib/Handler.java,
+ 	gnu/java/net/protocol/http/Connection.java,
+ 	gnu/java/net/protocol/http/Handler.java,
+ 	gnu/java/net/protocol/jar/Connection.java,
+ 	gnu/java/net/protocol/jar/Handler.java: Moved from gnu/gcj/protocol.
+ 	* gnu/gcj/runtime/FirstThread.java,
+ 	java/net/URL.java: Use moved protocol handlers.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Moved files.
+ 	(nat_source_files): Likewise.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-10-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(read): Write only read data to buffer.
+ 
+ 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-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/LinkedList.java:
+ 	Removed whitespace to match classpath's version again.
+ 
+ 2003-10-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/prefs/Preferences.java
+ 	(defaultFactoryClass): Fixed class name.
+ 	(getFactory): Create instance of class returned by Class.forName(),
+ 	reformated code.
+ 
+ 2003-10-08  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-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-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  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/VMClassLoader.java (loadClass): Now native.
+ 	* java/lang/natClassLoader.cc (loadClass): Implement.
+ 	* prims.cc (_Jv_RunMain): Initialize ClassLoader.
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java
+ 	(zeros): Removed.
+ 	(ANY_IF): Initalizie in static block.
+ 	(static): Load library with native methods here and initialize ANY_IF.
+ 	(isAnyLocalAddress): Check if equal to ANY_IF.
+ 	(equals): Use addr directly instead of addr1. Simplify for loop.
+ 	(toString): Rename "result" to "host" and add IP address allways.
+ 	(getLocalHost): Merged documentation from classpath.
+ 	* java/net/ServerSocket.java
+ 	(ServerSocket): New package-private constructor used by java.nio.
+ 	* java/net/URLConnection.java
+ 	(getRequestProperties): Check if already connected.
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBufferHelper.java:
+ 	Rewrote all methods by suggestions from Eric Blake.
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java
+ 	(DEFAULT_SEARCH_PATH): New static variable.
+ 	(ph_cache): Made it a HashMap.
+ 	(getURLStreamHandler): Rename propVal to ph_search_path and use
+ 	DEFAULT_SEARCH_PATH.
+ 
+ 2003-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/AbstractTableModel.java
+ 	(findColumnName): Prevent from NullPointerException if argument
+ 	columnName is null.
+ 
+ 2003-10-02  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-10-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/table/AbstractTableModel.java:
+ 	Reformated.
+ 
+ 2003-10-01  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	Fix PR libgcj/12475
+ 	* gnu/gcj/runtime/StackTrace.java (finalize): Declare.
+ 	* gnu/gcj/runtime/natStackTrace.cc (finalize): New. Free "addrs".
+ 
+ 2003-10-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/runtime/FirstThread.java (getMain): Fixed indentation.
+ 
+ 2003-10-01  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natClass.cc (initializeClass): Check for otable and
+ 	atable.
+ 	(_Jv_LinkOffsetTable): Check for existence of atable.  Rewrite
+ 	loops using for().  Search superinterfaces.  Check for fields as
+ 	well as methods.  Initialize atable as well as otable: check for
+ 	static methods as well as virtual methods.
+ 	* java/lang/Class.h (struct _Jv_AddressTable): New.
+ 	(atable): New.
+ 	(atable_syms): New.
+ 	* include/jvm.h (_Jv_equalUtf8Consts): constify.
+ 	* prims.cc (_Jv_equalUtf8Consts): constify.
+ 
+ 2003-09-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/10596:
+ 	* include/jvm.h (_Jv_FinalizeString,
+ 	_Jv_RegisterStringFinalizer): Declare.
+ 	* java/lang/natString.cc (_Jv_FinalizeString): Renamed from
+ 	unintern.
+ 	(intern): Updated.
+ 	(_Jv_NewStringUtf8Const): Likewise.
+ 	* java/lang/ref/natReference.cc (finalize_referred_to_object):
+ 	Add special case when finalizing a String.
+ 	(in_hash): New function.
+ 	(_Jv_RegisterStringFinalizer): Likewise.
+ 	(maybe_add_finalize): Likewise.
+ 
+ 2003-09-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java:
+ 	(isMulticastAddress): Dont use local variable to store address length.
+ 	Let the compiler optimize this.
+ 	(getHostName): Merged dcoumentation from classpath.
+ 	(getAddress): Likewise.
+ 	(getHostAddress): Likewise.
+ 	(hashCode): Likewise.
+ 	(equals): Likewise.
+ 	(toString): Likewise.
+ 	(getByName): Likewise.
+ 	(getAllByName): Likewise.
+ 
+ 2003-09-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/IndexColorModel.java: Reformated.
+ 
+ 2003-09-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java,
+ 	java/net/URL.java: Reformated.
+ 
+ 2003-09-29  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* boehm.cc (_Jv_BuildGCDescr): Put first word of object in most 
+ 	significant bit of descriptor. Include the vtable and sync_info 
+ 	fields.
+ 
+ 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-25.
+ 	Don't call setTimeZone on calendar.
+ 
+ 2003-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java (getURLStreamHandler): Compile fixes.
+ 
+ 2003-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java (getURLStreamHandler):
+ 	Check if we have to use cache before trying to retrieve handler from
+ 	cache. Rename facName to clsName to match classpath more. Reformated
+ 	some little pieces.
+ 
+ 2003-09-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectionKeyImpl.java
+ 	(ch): Make package-private again. Jikes found this bug.
+ 	Jeff Sturm submitted PR12426 for this to bugzilla
+ 	to fix this bug in gcj.
+ 
+ 2003-09-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/server/RMIClassLoader.java:
+ 	Reformatted file, no functional code changes.
+ 
+ 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-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/ObjectOutputStream.java (writeFields): Fixed
+ 	indentation.
+ 	(putFields): Likewise.
+ 
+ 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-25  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* gnu/java/nio/SelectorImpl.java (getFDsAsArray): Use getNativeFD().
+ 	(select): Likewise.
+ 	(register): Use DatagramChannelSelectionKey, SocketChannelSelectionKey.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(getNativeFD): New method.
+ 	* gnu/java/nio/SelectionKeyImpl.java
+ 	(SelectionKeyImpl): Class made abstract.
+ 	(fd): Removed.
+ 	(SelectionKeyImpl): Remove fd argument.
+ 	(getNativeFD): New method.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(getNativeFD): New method.
+ 	gnu/java/nio/DatagramChannelSelectionKey.java,
+ 	* gnu/java/nio/SocketChannelSelectionKey.java:
+ 	New files.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added new files gnu/java/nio/DatagramChannelSelectionKey.java and
+ 	gnu/java/nio/SocketChannelSelectionKey.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/reflect/Proxy.java
+ 	(getProxyClass): Remove workaround for gcj 3.0.x.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/net/PlainDatagramSocketImpl.java
+ 	(finalize): Moved to directly after constructor.
+ 	(getNativeFD): New method.
+ 	* gnu/java/net/PlainSocketImpl.java
+ 	(getNativeFD): New method.
+ 
+ 2003-09-25  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/io/ObjectOutputStream.java:
+ 	Allow putFields be called more than once.
+ 
+ 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.
+ 	* java/awt/image/BufferedImage.java (toString): Implement.
+ 
+ 2003-09-25  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* aclocal.m4: Rebuilt.
+ 	* configure: Rebuilt.
+ 
+ 2003-09-25  Guilhem Lavaux  <guilhem@kaffe.org>
+ 
+ 	* java/text/SimpleDateFormat.java (parse): Don't use class calendar
+ 	field.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(implSelect): Renamed from java_do_select.
+ 	(select): Call native implSelect() and add support for Thread
+ 	interruption.
+ 	* gnu/java/nio/natSelectorImpl.cc
+ 	(implSelect): Renamed from java_do_select.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(selectNow): Made final, throws IOException.
+ 	(select): Likewise.
+ 	(getFDsAsArray): Made final.
+ 	(selectedKeys): Likewise.
+ 	(wakeup): Likewise.
+ 	(deregisterCancelledKeys): Likewise.
+ 	(register): Likewise.
+ 	(ass): Removed.
+ 	(add_selected): Removed.
+ 	* gnu/java/nio/natSelectorImpl.cc:
+ 	No need to include bstring.h or gcj/cni.h.
+ 	(helper_put_filedescriptors): Rewritten.
+ 	(helper_get_filedescriptors): Rewritten.
+ 
+ 2003-09-25  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/font/FontRenderContext.java (getTransform): Return
+ 	copy of internal transform object. Add Javadoc.
+ 	* java/awt/geom/Rectangle2D.java (getPathIterator): Use the same
+ 	winding rule as Sun J2SE.
+ 	* javax/swing/border/MatteBorder.java (MatteBorder(Icon)): Docfix.
+ 
+ 2003-09-25  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/rmi/Naming.java:
+ 	Added comments, now accepts pseudo protocol "rmi".
+ 
+ 2003-09-25  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-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.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added gnu/java/nio/NIOConstants.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java:
+ 	Reorder imports, remove implementation comment.
+ 	(isMulticastAddress): Merged documentation from classpath.
+ 	* java/net/URLConnection.java
+ 	(setRequestProperty): Check key for null, fix documentation.
+ 	(adREquestProperty): Check key for null, remove wrong implementation
+ 	and replace it with comment to overwrite this method in subclasses,
+ 	fix documentation.
+ 
+ 2003-09-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/reflect/Proxy.java (generate): Uncomment protection
+ 	domain code.
+ 	* java/lang/natClassLoader.cc (defineClass): Added `loader'
+ 	argument.
+ 	(linkClass0): Now in VMClassLoader.
+ 	(markClassErrorState0): Likewise.
+ 	(getSystemClassLoaderInternal): New method.
+ 	* java/lang/natClass.cc (initializeClass): Use
+ 	VMClassLoader::resolveClass.
+ 	* java/lang/ClassLoader.java: New version, from Classpath.
+ 	* java/lang/Class.java (getProtectionDomain):
+ 	protectionDomainPermission and unknownProtectionDomain now in
+ 	VMClassLoader.
+ 	* java/lang/Class.h: VMClassLoader now a friend class.
+ 	* gnu/gcj/runtime/VMClassLoader.java (instance): Now
+ 	package-private.
+ 	* gcj/javaprims.h: Regenerated class list.
+ 	* resolve.cc (_Jv_PrepareClass): Use VMClassLoader::resolveClass.
+ 	* java/lang/VMClassLoader.java: New version from Classpath;
+ 	modified for libgcj use.
+ 
+ 2003-09-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added java/nio/ByteBufferHelper.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-09-25  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* gnu/java/net/natPlainSocketImplWin32.cc: Add missing #includes.
+ 	PR libgcj/12388.
+ 
+ 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-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acinclude.m4 (AM_LC_LOCALES): Added check for locale.h.
+ 
+ 2003-09-24  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* gnu/java/net/PlainSocketImpl.java (read): Remove declaration.
+ 	(write): Likewise.
+ 	(SocketInputStream): Declare `read' and `write' methods native.
+ 	Remove implementations which called back into PlainSocketImpl.
+ 	Remove unneccessary overridden methods.
+ 	* gnu/java/net/natPlainSocketImplNoNet.cc (read): Move implementation 
+ 	to inner class PlainSocketImpl.SocketInputStream.
+ 	(write): Likewise.
+ 	* gnu/java/net/natPlainSocketImplPosix.cc: As above.
+ 	* gnu/java/net/natPlainSocketImplWin32.cc: As above.
+ 	* gnu/java/net/SocketInputStream.java: Remove unused file.
+ 	* gnu/java/net/SocketOutputStream.java: Likewise.
+ 	* Makefile.am: Build CNI headers for PlainSocketImpl.SocketInputStream
+ 	and SocketOutputStream.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2003-09-23  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* java/lang/System.java: Add GCJ LOCAL note about encoding aliases.
+ 
+ 	* java/lang/Float.java, java/lang/Double.java: Add GCJ LOCAL
+ 	markers.
+ 
+ 2003-09-22  Anthony Green  <green@redhat.com>
+ 
+ 	* configure.in (HAVE_USLEEP_DECL): Define for newlib build.
+ 	* configure: Rebuilt.
+ 
+ 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>
+ 
+ 	* jni.cc (_Jv_LookupJNIMethod): Remove workaround that should hide a
+ 	compiler warning but produces a different one now.
+ 
+ 2003-09-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java:
+ 	Moves around some code, reformats and adds documentation.
+ 	No functional changes.
+ 
+ 2003-09-22  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(JarURLConnection): Modifed code to match classpath more, fixed comment.
+ 	(getCertificates): Made it more error prone.
+ 	(getMainAttributes): Likewise.
+ 	(getAttributes): Implemented.
+ 	(getManifest): Reformatted code.
+ 
+ 2003-09-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Component.java: Indentation cleanup from Classpath.
+ 
+ 2003-09-20  Dalibor Topic  <robilad@kaffe.org>
+ 
+        * java/awt/BasicStroke.java (BasicStroke): Fixed illegal argument
+        checking to follow 1.4.2 spec.
+ 
+ 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
+ 	(remerged from Classpath on 2003-09-20)
+ 
+ 2003-09-19  David Daney <ddaney@avtrex.com>
+ 
+ 	* java/lang/ref/Reference.java (clear): Set referent to null and
+ 	synchronize.
+ 
+ 2003-09-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/NIODatagramSocket.java,
+ 	gnu/java/nio/NIOSocket.java: New files.
+ 	* Makefile.am (ordinary_java_source_files):
+ 	Added gnu/java/nio/NIODatagramSocket.java and
+ 	gnu/java/nio/NIOSocket.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-09-19  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.
+ 	* 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.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Remove
+ 	unused GtkArg code.
+ 	(set(String,boolean)): Clamp gboolean parameter to g_object_set
+ 	to TRUE or FALSE.
+ 	* 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.
+ 
+ 2003-09-19  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* win32-threads.cc: (ensure_interrupt_event_initialized) New
+ 	function for lazy initialization of an auto-reset event.
+ 	(_Jv_CondWait) Added thread interrupt support.
+ 	(_Jv_ThreadInitData) Added initialization of interrupt support
+ 	members.
+ 	(_Jv_ThreadDestroyData) Added cleanup of interrupt support members.
+ 	(_Jv_ThreadStart) Removed unused code.
+ 	(_Jv_Win32GetInterruptEvent) New method for returning interrupt event
+ 	to an external caller.
+ 	(_Jv_ThreadInterrupt) Implemented.
+ 	* include/win32-threads.h: (_Jv_Thread_t) Added a Win32 auto-reset
+ 	event for interrupt support as well as a mutex which regulates
+ 	access to this.
+ 	(_Jv_Win32GetInterruptEvent) Declared new method for returning interrupt
+ 	event to an external caller.
+ 	* java/lang/natWin32Process.cc: (cleanup) Close handle to spawned
+ 	process.
+ 	(waitFor) Added interrupt support.
+ 
+ 2003-09-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java (getLocalAddress):
+ 	Renamed result variable to localAddr.
+ 	* java/net/MulticastSocket.java:
+ 	No need to import gnu.java.net.PlainDatagramSocketImpl.
+ 
+ 2003-09-18  Sascha Brawer  <brawer@dandelis.ch>
+ 
+ 	* java/awt/Toolkit.java (getSystemEventQueue, getSystemEventQueueImpl):
+ 	Replace UTF-8 characters in Javadoc by XML/HTML escape sequence.
+ 
+ 2003-09-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/naming/InitialContext.java: Reindented.
+ 
+ 2003-09-18  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  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Timer.java (finalize): Added "throws Throwable".
+ 
+ 2003-09-18  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-18  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by Guilhem Lavaux and Julian Dolby
+ 	* java/io/ObjectStreamClass.java (getSerialPersistentFields): Get the
+ 	field "serialPersistentFields", not "getSerialPersistentFields".
+ 
+ 2003-09-18  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-09-18  Jeroen Frijters  <jeroen@frijters.net>
+ 
+ 	* java/sql/Timestamp.java
+ 	(valueOf): Fixed confusion of java.sql.Date and java.util.Date
+ 
+ 2003-09-18  David P Grove  <groved@us.ibm.com>
+ 
+ 	* java/io/LineNumberReader (read): Don't reset pos & limit when
+ 	markPos is 0.
+ 
+ 2003-09-18  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-09-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am (rmi_java_source_files):
+ 	Added gnu/java/rmi/rmic/Compile_kjc.java,
+ 	gnu/java/rmi/rmic/Compile_jikes.java and
+ 	gnu/java/rmi/rmic/RMICException.java
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-09-17  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
+ 	gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,
+ 	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-17  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* configure.in: Standardized help text case of
+ 	--enable-hash-synchronization
+ 	New configure switch --enable-libgcj-multifile and corresponding
+ 	automake conditional ONESTEP.
+ 	* configure: Rebuilt.
+ 	* Makefile.am: Use automake conditional ONESTEP to determine
+ 	whether classfiles should be compiled individually or all
+ 	at once.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2003-09-16  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java (construct):
+ 	Remove method declaration.
+ 	(create()): Call native create.
+ 	(create(int)): New method.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
+ 	(create): Add window_id parameter.  Call gtk_plug_new with
+ 	window_id parameter.
+ 	(construct): Remove method implementation.
+ 
+ 2003-09-16  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* Makefile.am: (MOSTLYCLEANFILES) Removed libtool objects.
+ 	(mostlyclean-local): New target patterned after clean-local
+ 	which recursively deletes all libtool objects using 'libtool rm'.
+ 	(clean-local): Slightly modified comment to alleviate monotony.
+ 	(distclean-local): New target patterned after clean-local
+ 	which recursively deletes all .d files.
+ 	* Makefile.in: Rebuilt.
+ 
+ 2003-09-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/net/URLStreamHandler.java (parseURL): If original file
+ 	ends with "/", so must canonical result.
+ 	* java/io/natFilePosix.cc (getCanonicalPath): Clean up snafus
+ 	with nul-termination and finding previous "/".
+ 
+ 2003-09-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acconfig.h: Removed most items.
+ 	* configure.in: Added descriptions to AC_DEFINE macros that where in
+ 	acconfig.h before.
+ 	* include/config.h.in: Regenerated.
+ 
+ 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-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/natFilePosix.cc (getCanonicalPath): Handle case where
+ 	file does not exist.
+ 
+ 2003-09-10  Anthony Green  <green@redhat.com>
+ 
+ 	* gnu/java/net/natPlainDatagramSocketImplWin32.cc (peekData):
+ 	Specify full name when referencing ::java::net::InetAddress.
+ 	* gnu/java/net/natPlainSocketImplWin32.cc (accept): Ditto.
+ 	Fix argument type.
+ 
+ 2003-09-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* acconfig.h (__NO_MATH_INLINES): Removed.
+ 	* configure.in: Removed check for g++ math inlining bug from 2000.
+ 	* configure.host: Removed -D__NO_MATH_INLINES in libgcj_cflags and
+ 	libgcj_cxxflags.
+ 	* configure: Regenerated.
+ 
+ 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-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java,
+ 	java/net/MulticastSocket.java,
+ 	java/net/ServerSocket.java,
+ 	java/net/Socket.java:
+ 	Use gnu.java.net.Plain*SocketImpl instead of
+ 	java.net.PlainSocketImpl.
+ 	* java/net/PlainDatagramSocketImpl.java,
+ 	java/net/PlainSocketImpl.java,
+ 	java/net/SocketInputStream.java,
+ 	java/net/SocketOutputStream.java,
+ 	java/net/natPlainDatagramSocketImplNoNet.cc,
+ 	java/net/natPlainDatagramSocketImplPosix.cc,
+ 	java/net/natPlainDatagramSocketImplWin32.cc,
+ 	java/net/natPlainSocketImplNoNet.cc,
+ 	java/net/natPlainSocketImplPosix.cc,
+ 	java/net/natPlainSocketImplWin32.cc:
+ 	Removed.
+ 	* gnu/java/net/PlainDatagramSocketImpl.java,
+ 	gnu/java/net/PlainSocketImpl.java,
+ 	gnu/java/net/SocketInputStream.java,
+ 	gnu/java/net/SocketOutputStream.java,
+ 	gnu/java/net/natPlainDatagramSocketImplNoNet.cc,
+ 	gnu/java/net/natPlainDatagramSocketImplPosix.cc,
+ 	gnu/java/net/natPlainDatagramSocketImplWin32.cc,
+ 	gnu/java/net/natPlainSocketImplNoNet.cc,
+ 	gnu/java/net/natPlainSocketImplPosix.cc,
+ 	gnu/java/net/natPlainSocketImplWin32.cc:
+ 	New files (moved from java/net).
+ 	* configure.in: Create links for gnu/java/net/natPlain*SocketImpl.cc
+ 	instead of java/net/natPlain*SocketImpl.cc.
+ 	* configure: Regenerated.
+ 	* Makefile.am: Moved files from java/net to gnu/java/net.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-09-09  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* configure: Regenerate.
+ 
+ 2003-09-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure.host: Removed erroneous comment.
+ 
+ 	* gnu/java/awt/natEmbeddedWindow.cc (setWindowPeer): Removed
+ 	lvalue cast; use correct rvalue cast.
+ 
+ 2003-09-02  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (create): Add width
+ 	and height arguments to GtkWindowPeer.create method call.
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java
+ 	(create(int,int,int)): New method.
+ 	(create(int)): Add call to new create method.
+ 	(create()): Add width and height arguments to create method
+ 	call.
+ 	(GtkWindowPeer): Remove call to setBounds.
+ 	* java/awt/Frame.java (Frame(String)): Initialize visible field
+ 	to false.
+ 	(Frame(GraphicsConfiguration)): Likewise.
+ 	(Frame(String,GraphicsConfiguration)): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create):
+ 	Add width and height parameters.  Call
+ 	gtk_window_set_default_size.
+ 	(connectHooks): Remove unused name variable.
+ 	(static setBounds): Call gtk_window_resize not
+ 	gtk_widget_set_usize.
+ 	(setBounds): Remove unused nchildren variable.
+ 
+ 2003-08-31  Ingo Proetel  <proetel@aicas.com>
+ 
+ 	* java/util/logging/Logger.java: provide class and method information
+ 	* java/util/logging/LogManager.java: create handlers
+ 	* java/util/logging/SimpleFormatter.java: print souceClassName and
+ 	sourceMethodName
+ 
+ 2003-08-28  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* win32.cc: fixed tab, indentation and whitespace
+ 	inconsistencies
+ 	removed jvm.h include
+ 	added includes java/lang/UnsupportedOperationException.h,
+ 	java/io/IOException.h, java/net/SocketException.h
+ 	(WSAEventWrapper): class implementation
+ 	(_Jv_WinStrError): implemented both overloads
+ 	(_Jv_ThrowIOException): implemented both overloads
+ 	(_Jv_ThrowSocketException): implemented both overloads
+ 	(_Jv_select): implemented
+ 	* include/win32.h: fixed tab, indentation and whitespace
+ 	inconsistencies
+ 	wrapped <windows.h> include with  #define WIN32_LEAN_AND_MEAN
+ 	added jvm.h include
+ 	(WSAEventWrapper): added class declaration
+ 	(_Jv_WinStrError): added both overload declarations
+ 	(_Jv_ThrowIOException): added both overload declarations
+ 	(_Jv_ThrowSocketException): added both overload declarations
+ 	removed ENOTCONN, ECONNRESET and ENOPROTOOPT defines
+ 	(_Jv_select): added declaration
+ 	(_Jv_socket): removed
+ 	(_Jv_connect): removed
+ 	(_Jv_close): removed
+ 	(_Jv_bind): removed
+ 	(_Jv_accept): removed
+ 	(_Jv_listen): removed
+ 	(_Jv_write): removed
+ 	(_Jv_read): removed
+ 	* java/io/natFileDescriptorWin32.cc: fixed tab, indentation and
+ 	whitespace inconsistencies
+ 	replaced <windows.h> #include with <platform.h>
+ 	removed jvm.h include
+ 	(testCanUseGetHandleInfo): new function which tests whether Win32
+ 	GetHandleInformation() call can be used with console buffer handles
+ 	(only supported on >=WinNT 5.0)
+ 	(winerr): removed (superseded by _Jv_WinStrError in include/win32.h)
+ 	(valid): rewrote implementation using GetHandleInformation()
+ 	(sync): 	changed exception throwing to use error string and exception
+ 	helper methods declared in include/win32.h
+ 	(open): likewise
+ 	(write): likewise
+ 	(setLength): likewise
+ 	(close): likewise
+ 	(seek): likewise
+ 	(getFilePointer): likewise
+ 	(read): likewise
+ 	* java/io/natFileWin32.cc: fixed tab, indentation and
+ 	whitespace inconsistencies
+ 	replaced <windows.h> #include with <platform.h>
+ 	removed jvm.h include
+ 	(_access): use JV_TEMP_UTF_STRING
+ 	(_stat): likewise
+ 	(performMkDir): use JV_TEMP_UTF_STRING
+ 	(performRenameTo): likewise
+ 	(performDelete): likewise
+ 	(performCreate): likewise
+ 	(performSetReadOnly): likewise
+ 	(performSetLastModified): likewise
+ 	* java/lang/natWin32Process.cc: fixed tab, indentation and
+ 	whitespace inconsistencies
+ 	replaced <windows.h> #include with <platform.h>
+ 	removed includes gcj/cni.h, jvm.h
+ 	(new_string): removed
+ 	(startProcess): use JV_TEMP_UTF_STRING,
+ 	changed exception throwing to use error string and exception
+ 	helper methods declared in include/win32.h
+ 	* java/net/natInetAddressWin32.cc: fixed tab, indentation and
+ 	whitespace inconsistencies
+ 	replaced <windows.h> #include with <platform.h>
+ 	removed jvm.h include
+ 	removed DISABLE_JAVA_NET conditional code
+ 	removed POSIX conditional code not relevant to Win32
+ 	(aton): use JV_TEMP_UTF_STRING
+ 	removed POSIX conditional code not relevant to Win32
+ 	(lookup): likewise
+ 	(getLocalHostName): likewise
+ 	* java/net/natNetworkInterfaceWin32.cc: fixed tab, indentation and
+ 	whitespace inconsistencies
+ 	removed unnecessary windows.h, winsock.h and gcj/cni.h includes
+ 	removed DISABLE_JAVA_NET conditional code
+ 	removed POSIX conditional code not relevant to Win32
+ 	(winsock2GetRealNetworkInterfaces): new function to compute network
+ 	interfaces via Winsock2 API
+ 	(determineGetRealNetworkInterfacesFN): new function for returning
+ 	a function pointer to the function used to compute network interfaces.
+ 	(getRealNetworkInterfaces): implemented
+ 	* java/net/natPlainDatagramSocketImplWin32.cc: fixed tab, indentation and
+ 	whitespace inconsistencies
+ 	removed gcj/cni.h include
+ 	removed DISABLE_JAVA_NET conditional code
+ 	removed POSIX conditional code not relevant to Win32
+ 	changed net POSIXisms to Win32isms
+ 	replaced _Jv socket-related calls with their real Win32 equivalents
+ 	changed exception throwing to use error string and exception
+ 	helper methods declared in include/win32.h
+ 	(peekData): implemented timeout support
+ 	(receive): likewise
+ 	* java/net/natPlainSocketImplWin32.cc: fixed tab, indentation and
+ 	whitespace inconsistencies
+ 	removed gcj/cni.h and gcj/javaprims.h includes
+ 	removed DISABLE_JAVA_NET conditional code
+ 	removed POSIX conditional code not relevant to Win32
+ 	changed net POSIXisms to Win32isms
+ 	replaced _Jv socket-related calls with their real Win32
+ 	equivalents
+ 	changed exception throwing to use error string and exception
+ 	helper methods declared in include/win32.h
+ 	(throwConnectException): helper function for connect()
+ 	(connect): implemented timeout support
+ 	(accept): likewise
+ 	(doRead): new helper function common to both read() method overloads,
+ 	includes timeout support
+ 	(read): implemented both overloads in terms of doRead()
+ 	(available): implemented using ioctlsocket()
+ 
+ 2003-08-28  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* java/net/natInetAddressWin32.cc,
+ 	java/net/natNetworkInterfaceWin32.cc,
+ 	java/net/natPlainDatagramSocketImplWin32.cc,
+ 	java/net/natPlainSocketImplWin32.cc:
+ 	Readded code enclosed in DISABLE_JAVA_NET defines
+ 	in preparation for MinGW cleanup / networking
+ 	patch
+ 
+ 2003-08-28  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* Makefile.am: Fixed problems with parallel makes.
+ 	(all_java_class_files): Readded definition.
+ 	(all_java_class_files): New target which depends on
+ 	libgcj-@gcc_version@.jar
+ 	* Makefile.in: Rebuilt
+ 
+ 2003-08-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ordinary_java_source_files): Added new files.
+ 	* java/lang/Class.h (_Jv_sharedlib_register_hook): Declare as
+ 	friend.
+ 	* java/net/URLClassLoader.java (findClass): Don't use
+ 	findURLResource.  Use loader's getClass method.
+ 	(URLLoader.getClass): New method.
+ 	(addURL): Handle `gcjlib' URLs.
+ 	(SoURLLoader): New class.
+ 	(SoResource): Likewise.
+ 	* gnu/gcj/protocol/gcjlib/Connection.java: New file.
+ 	* gnu/gcj/protocol/gcjlib/Handler.java: New file.
+ 	* include/jvm.h (struct _Jv_core_chain): Moved from natCore.cc.
+ 	(_Jv_RegisterCoreHook): Declare.
+ 	(_Jv_FindCore): Declare.
+ 	* gnu/gcj/runtime/SharedLibHelper.java: New file.
+ 	* gnu/gcj/runtime/natSharedLibLoader.cc (CoreHookFunc): New
+ 	typedef.
+ 	(core_hook): New function.
+ 	(struct SharedLibDummy) [saved_core]: New field.
+ 	(init): Set _Jv_RegisterCoreHook.  Throw exception on failure.
+ 	(register_hook): Set protection domain and class loader on new
+ 	class.
+ 	(finalize): Free core chain.
+ 	* gnu/gcj/Core.java (Core): New constructor.
+ 	* gnu/gcj/runtime/SharedLibLoader.java: Rewrote to use
+ 	SharedLibHelper.
+ 	* gnu/gcj/natCore.cc (_Jv_RegisterResource): Indentation fixlet.
+ 	(_Jv_create_core): New function.
+ 	(create): Use it.
+ 	(default_register_resource): New function.
+ 	(_Jv_RegisterCoreHook): New global.
+ 	(_Jv_RegisterResource): Use it.
+ 	(core_chain_struct): Removed.
+ 	(_Jv_FindCore): New function.
+ 	(_Jv_FreeCoreChain): New function.
+ 
+ 2003-08-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/natInetAddressWin32.cc,
+ 	java/net/natNetworkInterfaceWin32.cc,
+ 	java/net/natPlainDatagramSocketImplWin32.cc,
+ 	java/net/natPlainSocketImplWin32.cc:
+ 	Removed code enclosed in DISABLE_JAVA_NET defines.
+ 
+ 2003-08-26  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* Makefile.am: (write_entries_to_file) New parameterized
+ 	function for writing entries to a file one line at a time.
+ 	(all_java_class_files): Removed definition.
+ 	(.java.class) Removed.target.
+ 	(libgcj-@gcc_version@.jar): Changed dependency to
+ 	$(all_java_source_files); added compilation step which compiles
+ 	all changed source files in one pass.
+ 	(libgcj.la) Refactored to use write_entries_to_file.
+ 	(lib-gnu-awt-xlib.la) Likewise.
+ 	(install-data-local) Likewise.
+ 	(write-entries-to-file-check) New target which tests write_entries_to_file.
+ 	(all-recursive): Changed dependency from $(all_java_class_files)
+ 	to libgcj-@gcc_version@.jar
+ 	* Makefile.in: Rebuilt.
+ 
+ 2003-08-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/StrictMath.java: Typo fix.
+ 	* java/lang/Math.java: Typo fix.
+ 
+ 2003-08-26  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/lang/ThreadGroup.java (removeThread): null the 'group' field
+ 	of the removed Thread.
+ 
+ 2003-08-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Reported by David Holmes <dholmes@dltech.com.au>.
+ 	* java/lang/InheritableThreadLocal.java (threadMap): Wrap inside
+ 	Collections.synchronizedMap.
+ 	* java/lang/ThreadLocal.java (valueMap): Likewise.
+ 
+ 2003-08-26  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* 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.
+ 	* 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-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am: Removed all GNU-make-specific FIXME comments.
+ 
+ 	* java/lang/ref/Reference.java (get): Indentation fix.
+ 	(clear): Comment fix.
+ 	(enqueue): Likewise.
+ 	(lock): Likewise.
+ 	(referent): Likewise.
+ 
+ 2003-08-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR java/12058:
+ 	* java/lang/reflect/natArray.cc (set): Allow null as argument.
+ 
+ 	* 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  Scott Gilbertson  <scottg@mantatest.com>
+ 	* Makefile.am: added gnu/awt/xlib/XOffScreenImage.java.
+ 	* Makefile.in: re-generated.
+ 	* gnu/awt/j2d/IntegerGraphicsState.java
+ 	(ScreenCoupledImage): new interface.
+ 	(drawImage): detect ScreenCoupledImage instances.
+ 	* gnu/awt/xlib/XCanvasPeer.java (createImage) implemented.
+ 	* gnu/awt/xlib/XEventLoop.java
+ 	(createEvent): re-formatted, and rearranged to avoid null pointer.
+ 	* gnu/awt/xlib/XGraphics.java
+ 	(drawImage): added XOffScreenImage handling.
+ 	* gnu/awt/xlib/XOffScreenImage.java: new file.
+ 	* gnu/gcj/xlib/Drawable.java (getDepth): new native method.
+ 	* gnu/gcj/xlib/GC.java (copyArea): new native method.
+ 	* gnu/gcj/xlib/XAnyEvent.java
+ 	(TYPE_KEY_PRESS): new constant.
+ 	(TYPE_KEY_RELEASE): new constant.
+ 	(TYPE_MOTION_NOTIFY): new constant.
+ 	(TYPE_ENTER_NOTIFY): new constant.
+ 	(TYPE_LEAVE_NOTIFY): new constant.
+ 	(TYPE_FOCUS_IN): new constant.
+ 	(TYPE_FOCUS_OUT): new constant.
+ 	(TYPE_KEYMAP_NOTIFY): new constant.
+ 	(TYPE_GRAPHICS_EXPOSE): new constant.
+ 	(TYPE_NO_EXPOSE): new constant.
+ 	(TYPE_VISIBILITY_NOTIFY): new constant.
+ 	(TYPE_CREATE_NOTIFY): new constant.
+ 	(TYPE_DESTROY_NOTIFY): new constant.
+ 	(TYPE_MAP_REQUEST): new constant.
+ 	(TYPE_CONFIGURE_REQUEST): new constant.
+ 	(TYPE_GRAVITY_NOTIFY): new constant.
+ 	(TYPE_RESIZE_REQUEST): new constant.
+ 	(TYPE_CIRCULATE_NOTIFY): new constant.
+ 	(TYPE_CIRCULATE_REQUEST): new constant.
+ 	(TYPE_PROPERTY_NOTIFY): new constant.
+ 	(TYPE_SELECTION_CLEAR): new constant.
+ 	(TYPE_SELECTION_REQUEST): new constant.
+ 	(TYPE_SELECTION_NOTIFY): new constant.
+ 	(TYPE_COLORMAP_NOTIFY): new constant.
+ 	(TYPE_MAPPING_NOTIFY): new constant.
+ 	* gnu/gcj/xlib/natDrawable.cc (getDepth): new method.
+ 	* gnu/gcj/xlib/natGC.cc (copyArea): new method
+ 	* java/awt/Component.java (createImage): changed to use peer method.
+ 
+ 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  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkWindowPeer.java: Remove
+ 	GTK_WINDOW_DIALOG.  Set GTK_WINDOW_POPUP to 1.
+ 
+ 2003-08-21  David Daney  <ddaney@avtrex.com>
+ 
+ 	Fix for PR libgcj/12013:
+ 	* java/lang/ref/natReference.cc (finalize_referred_to_object):
+ 	Check `cleared' field.
+ 	* java/lang/ref/Reference.java (copy): Updated comments.
+ 	(cleared): New field.
+ 	(clear): Rewrote.
+ 
+ 2003-08-21  Scott Gilbertson  <scottg@mantatest.com>
+             Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* Makefile.am (gtk_awt_peer_sources): Add
+ 	gnu/java/awt/peer/GLightweightPeer.java.  Remove
+ 	gnu/java/awt/GLightweightPeer.java.
+ 	* gnu/java/awt/GLightweightPeer.java: Remove file.
+ 	* gnu/java/awt/peer/GLightweightPeer.java: New file.
+ 	* java/awt/Component.java (getToolkit): Add comment about
+ 	lightweight components.
+ 	* java/awt/Toolkit.java (createComponent): Return
+ 	gnu.java.awt.peer.GLightweightPeer.
+ 
+ 2003-08-21  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* configure.in: Fix detection of gcj when building with newlib.
+ 	* configure: Regenerated.
+ 
+ 2003-08-20  Graydon Hoare  <graydon@redhat.com>
+ 
+ 	* jni.cc: Replace "cheating" pointer-casting code with
+ 	extract_from_jvalue<> template.
+ 
+ 2003-08-20  Andrew Haley  <aph@redhat.com>
+ 
+ 	* gnu/gcj/runtime/StackTrace.java (getClass): New method.
+ 	* gnu/gcj/runtime/natStackTrace.cc (getClass): New method.
+ 	(classAt): Break out class lookup function into getClass().
+ 	* exception.cc (PERSONALITY_FUNCTION): Use new encoding for exception
+ 	handlers when using -fno-assume-compiled.
+ 
+ 2003-08-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/9125:
+ 	* gnu/gcj/runtime/natVMClassLoader.cc (findClass): Find Runtime
+ 	object outside of loop.  Respect lib_control setting.
+ 	* gnu/gcj/runtime/VMClassLoader.java (tried_libraries): New
+ 	field.
+ 	(lib_control): New field.
+ 	(LIB_FULL, LIB_CACHE, LIB_NEVER): New constants.
+ 	(VMClassLoader): Initialize new field.
+ 
+ 	* java/lang/ref/natReference.cc (finalize_referred_to_object):
+ 	Set `list->reference' to DELETED_REFERENCE when removing dead
+ 	object.
+ 	(find_slot): Added an assert.
+ 	(DELETED_REFERENCE): New define.
+ 	(add_to_hash): Check for DELETED_REFERENCE.
+ 	(remove_from_hash): Just return if found slot isn't ours.
+ 
+ 2003-08-19  Andrew Haley  <aph@redhat.com>
+ 
+ 	* prims.cc (unblock_signal): New function.
+ 	(catch_segv): Use it.
+ 	(catch_fpe): Likewise.
+ 
+ 2003-08-19  Danny Smith  <dannysmith@users.sourceforge.net>
+ 
+ 	PR libgcj/11575
+ 	* java/io/natFileDescriptorWin32.cc (open): Set create
+ 	flag to OPEN_AWAYS when READ & WRITE regardless of APPEND flag.
+ 	Honor EXCL when openning with WRITE flag. 
+ 
+ 2003-08-19  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* include/jvm.h: New class _Jv_TempUTFString (helper class for
+ 	getting a temporary C string from a jstring)
+ 	New macro JV_TEMP_UTF_STRING, which leverages _Jv_TempUTFString
+ 	but uses a stack buffer if the string length is less than 256
+ 	bytes.
+ 
+ 2003-08-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/11951:
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Returns
+ 	void.  Throw VirtualMachineError if ffi fails.  Initialize return
+ 	value.  Added is_jni_call argument; only wrap exception if not a
+ 	JNI call.  Use descriptive message if operation not supported.
+ 	(_Jv_GetTypesFromSignature): Use declaring class' loader to find
+ 	array class.
+ 	* include/jvm.h (_Jv_CallAnyMethodA): Updated declaration.
+ 	* jni.cc (_Jv_JNI_CallAnyMethodV): Updated for new form of
+ 	_Jv_CallAnyMethodA.
+ 	(_Jv_JNI_CallAnyMethodA): Likewise.
+ 	(_Jv_JNI_CallAnyVoidMethodV): Likewise.
+ 	(_Jv_JNI_CallAnyVoidMethodA): Likewise.
+ 
+ 2003-08-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gij.cc (help): Document -? and -X.
+ 
+ 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  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gij.cc (main): Handle -? and -X.
+ 
+ 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-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-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-08  Andrew Haley  <aph@redhat.com>
+ 
+ 	* Makefile.am (AM_CXXFLAGS): Define BOOT_CLASS_PATH.
+ 	* Makefile.in: Rebuild.
+ 	* java/lang/natRuntime.cc (insertSystemProperties): Add
+ 	"sun.boot.class.path".
+ 
+ 2003-08-07  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/io/PrintStream.java: Don't crash on a null string.
+ 	
+ 2003-08-07  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* configure.in: Don't initialize GCINCS to boehm-gc/include.
+ 	* configure: Regenerate.
+ 
+ 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-07  Jacob Gladish <gladish@spinnakernet.com>
+             Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/net/natPlainSocketImplPosix.cc (connect): Pass the FD as a
+ 	ready-to-write argument to _Jv_Select. Reset the socket back to 
+ 	non-blocking state after connecting.
+ 	(accept): Pass the FD as a ready-to-write argument to _Jv_Select.
+ 	Throw SocketTimeoutException not InterruptedIOException.
+ 	(read): Throw SocketTimeoutException not InterruptedIOException.
+ 
+ 2003-08-07  Bryce McKinlay  <bryce@mckinlay.net.nz>
+ 
+ 	* java/lang/Thread.java (Thread): Check for null "name" from
+ 	start of private constructor, not after calling the private
+ 	constructor.
+ 
+ 2003-08-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/FilePermission.java (equals): Use correct index for
+ 	last character of path.
+ 
+ 2003-08-06  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* acinclude.m4 (LIBGCJ_CONFIGURE): Remove AC_CANONICAL_BUILD.
+ 	* configure.in: Compare with_cross_host to build_alias, not build.
+ 	* aclocal.m4: Regenerate.
+ 	* configure: Regenerate.
+ 
+ 2003-08-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/11779:
+ 	* java/lang/reflect/natField.cc (getAddr): Skip frames in Field
+ 	class.
+ 
+ 	* java/lang/reflect/Method.java: Updated status comment.
+ 	Imported javadoc from Classpath and re-ordered methods.
+ 	* java/lang/reflect/Constructor.java: Reindented.  Updated
+ 	status comment.  Imported javadoc from Classpath and re-ordered
+ 	methods.
+ 
+ 2003-08-05  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  Matthias Klose  <doko@debian.org>
+ 
+ 	* aclocal.m4: check for libart-config binary
+ 	  under the name libart2-config as well.
+ 	* configure: regenerated.
+ 
+ 2003-08-04  David P Grove  <groved@us.ibm.com>
+ 
+ 	* java/text/DecimalFormat.java (format): avoid ArithmeticException
+ 	when groupingSize is 0.
+ 	(parse): Likewise.
+ 
+ 2003-08-04  Matthias Klose  <doko@debian.org>
+ 
+ 	* libart.m4: check for libart-config binary
+ 	  under the name libart2-config as well.
+ 	* configure, aclocal.m4: regenerated.
+ 
+ 2003-08-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBufferImpl.java
+ 	(getChar): Check remaining bytes, fixed comment about endianess.
+ 	(putChar): Likewise.
+ 	(getShort): Likewise.
+ 	(putShort): Likewise.
+ 	(getInt): Check remaining bytes, fixed conversion, fixed comment about
+ 	endianess.
+ 	(putInt): Likewise.
+ 	(getLong): Likewise.
+ 	(putLong): Likewise.
+ 	(getFloat): Likewise.
+ 	(putFloat): Likewise.
+ 	(getDouble): Likewise.
+ 	(putDouble): Likewise.
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(getChar): Wrapped code, fixed comment about endianess.
+ 	(putchar): Likewise.
+ 	(getShort): Likewise.
+ 	(putShort): Likewise.
+ 	(getInt): Fixed conversion, fixed comment about endianess.
+ 	(putInt): Likewise.
+ 	(getLong): Likewise.
+ 	(putLong): Likewise.
+ 	(getFloat): Likewise.
+ 	(putFloat): Likewise.
+ 	(getDouble): Likewise.
+ 	(putDouble): Likewise.
+ 	* java/nio/MappedByteBufferImpl.java
+ 	(compact): Implemented.
+ 	(getChar): Implemented.
+ 	(putChar): Implemented.
+ 	(getDouble): Implemented.
+ 	(putdouble): Implemented.
+ 	(getFloat): Implemented.
+ 	(putFloat): Implemented.
+ 	(getInt): Implemented.
+ 	(putInt): Implemented.
+ 	(getLong): Implemented.
+ 	(putLong): Implemented.
+ 	(getShort): Implemented.
+ 	(putShort): Implemented.
+ 	* java/nio/channels/FileChannelImpl.java
+ 	(read): Set position where to access file.
+ 	(write): Likewise.
+ 	(transferTo): Flip buffer after read and before write.
+ 	(transferFrom): Likewise.
+ 
+ 2003-08-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/ArrayHelper.java
+ 	(equalsArray): Reformated, added method documentation.
+ 
+ 2003-08-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java
+ 	(URL): Added paragraph about the
+ 	gnu.java.net.nocache_protocol_handlers property.
+ 	(ph_cache): Renamed from handlers to match classpath's implementation.
+ 	Reordered it with factory and serialVersionUID member variables.
+ 	(cache_handlers): New member variable.
+ 	(static): New static initializer to initialize cache_handlers from
+ 	gnu.java.net.nocache_protocol_handlers property.
+ 	(URL): Use ph_cache instead of handlers, reformatted some code to
+ 	match classpath's implementation.
+ 
+ 2003-08-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/11241:
+ 	* java/util/WeakHashMap.java (WeakHashMap(int,float)): If
+ 	initialCapacity is 0, set it to 1.
+ 
+ 2003-08-01  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".
+ 
+ 2003-08-01  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-08-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (tool_include_dir): Redefine to match gcc.
+ 
+ 2003-08-01  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 and optimize code.
+ 
+ 2003-07-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	More for PR libgcj/11737:
+ 	* 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>
+ 
+ 	Fix for PR libgcj/11728:
+ 	* java/util/HashMap.java (readObject): Set size.
+ 
+ 2003-07-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/11737:
+ 	* 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.
+ 
+ 	* java/awt/geom/Arc2D.java (getBounds2D): Implement.
+ 	(containsAngle): Likewise.
+ 	(getStartPoint): Rewrote.
+ 	(getEndPoint): Likewise.
+ 	(setAngleStart(Point2D)): Likewise.
+ 
+ 2003-07-31  Roger Sayle  <roger@eyesopen.com>
+ 	    Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* configure.in: Add new THREADCXXFLAGS variable.
+   	Handle POSIX threads on alpha*-dec-osf*.
+ 	* configure: Regenerate.
+ 	* Makefile.am: Add THREADCXXFLAGS to AM_CXXFLAGS.
+ 	* Makefile.in: Regenerate.
+ 
+ 2003-07-08  Andrew Haley  <aph@redhat.com>
+ 
+         * include/i386-signal.h (RESTORE): New.
+         (INIT_SEGV): Set restorer.
+         (INIT_FPE): Likewise.
+ 
+ 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  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* defineclass.cc (handleField): Throw exception if field name is
+ 	duplicated.
+ 	(handleMethod): Throw exception for duplicate method.
+ 
+ 2003-07-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/convert/natIconv.cc (write): Handle case where
+ 	output buffer is too small.
+ 
+ 2003-07-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natString.cc (init(gnu.gcj.runtime.StringBuffer)):
+ 	New method.
+ 	Include gnu/gcj/runtime/StringBuffer.h.
+ 	* java/lang/String.java (init(gnu.gcj.runtime.StringBuffer)): New
+ 	native method.
+ 	(String(gnu.gcj.runtime.StringBuffer)): Use it.
+ 
+ 2003-07-27  Anthony Green  <green@redhat.com>
+ 
+ 	* configure.in: Fix newlib check.
+ 	* configure: Rebuilt.
+ 
+ 2003-07-27  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
+ 	Create vbox and layout for GtkPlug.
+ 
+ 2003-07-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Window.java
+ 	(Window): Removed now unused constructor. It became oboslete with the
+ 	new embedded window patch.
+ 
+ 2003-07-27  Thomas Fitzsimmons <fitzsim@redhat.com.h> 
+ 	    Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java
+ 	(EmbeddedWindow): Extends Frame instead of Window.
+ 	(window_id): New member variable to store the native window handle.
+ 	(create): Removed.
+ 	(EmbeddedWindow): New constructor.
+ 	(addNotify): New method.
+ 	(getHandler): Likewise.
+ 	(setWindowPeer): New native method.
+ 	* gnu/java/awt/EmbeddedWindowSupport.java
+ 	(EmbeddedWindowSupport): Fixed documentation.
+ 	(createEmbeddedWindow): Return EmbeddedWindowPeer instead of
+ 	WindowPeer, give it an EmbeddedWindow instance instead of the raw
+ 	window data.
+ 	* gnu/java/awt/natEmbeddedWindow.cc
+ 	(create): Removed.
+ 	(setWindowPeer): New method.
+ 	* gnu/java/awt/peer/EmbeddedWindowPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
+ 	New files
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java
+ 	(GtkToolkit): Implements EmbeddedWindowSupport.
+ 	(createEmbeddedWindow): New method.
+ 	* java/awt/Window.java
+ 	(Window): Removed.
+ 	* Makefile.am
+ 	(java_source_files): Added EmbeddedWindowPeer.java.
+ 	(gtk_awt_peer_sources): Added GtkEmbeddedWindowPeer.java.
+ 	(gtk_c_source_files): Added gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-07-26  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/lang/Win32Process.java (ConcreteProcess): Surround
+ 	a command line element with quotes if it contains an
+ 	embedded space or tab.
+ 	* java/lang/natWin32Process.cc (startProcess): Do not
+ 	surround command line elements with quotes here.
+ 
+ 	* configure.host: Use -fcheck-references and 
+ 	-fuse-divide-subroutine for MinGW until we fix
+ 	win32_exception_handler( ) in win32.cc w.r.t. Win32 
+ 	Structured Exception Handling (SEH).
+ 
+ 	* win32.cc (_Jv_platform_initProperties): Use generic names
+ 	like "x86" for the "os.arch" property to be consistent with
+ 	what Sun's JDK produces. Use the wProcessorArchitecture
+ 	member of the Win32 SYSTEM_INFO structure, filled in a call 
+ 	to GetSystemInfo( ), instead of dwProcessorType.
+ 
+ 2003-07-26  Mohan Embar  <gnustuff@thisiscool.com>
+ 	    Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* Makefile.am: Use cross-compiling gcjh from the path for
+ 	a crossed-native build.
+ 	* Makefile.in: Rebuilt.
+ 	* configure.in: Include libltdl in non-newlib builds.
+ 	Moved determination of gcj used to build libraries to
+ 	its own section. Fixed cross-compilation issues for
+ 	non-newlib builds.
+ 	* configure: Rebuilt.
+ 
+ 2003-07-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/natFileDescriptorPosix.cc (write): Try again on EINTR.
+ 	(write): Likewise.
+ 	(read): Likewise.
+ 	(read): Likewise.
+ 
+ 2003-07-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/lang/natRuntime.cc (_load): Add library name to
+ 	UnsatisfiedLinkError when thrown.
+ 
+ 2003-07-25  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (awt_java_source_files): java/awt/GridBagLayoutInfo.java
+ 	added.
+ 	* Makefile.in: Likewise.
+ 
+ 2003-07-25  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-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/GridBagLayout.java:
+ 	Totally reworked and partly implemented.
+ 	* java/awt/GridBagLayoutInfo.java:
+ 	New file.
+ 
+ 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  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR libgcj/7482:
+ 	* verify.cc (ref_intersection): New class.
+ 	(type_val): Removed unresolved_reference_type,
+ 	uninitialized_unresolved_reference_type.
+ 	(is_assignable_from_slow): Rewrote.
+ 	(type::data): Removed.
+ 	(type::klass): New field.
+ 	(type::type): Added verifier argument.
+ 	(type::resolve): Removed.
+ 	(type::set_uninitialized): Updated for change to type_val.
+ 	(type::set_initialized): Likewise.
+ 	(type::isinitialized): Likewise.
+ 	(type::print): Likewise.
+ 	(construct_primitive_array_type): Likewise.
+ 	(type::compatible): Updated for change to type_val and to use
+ 	ref_intersection.
+ 	(type::isarray): Updated to use ref_intersection.
+ 	(type::isinterface): Likewise.
+ 	(type::element_type): Likewise.
+ 	(type::to_array): Likewise.
+ 	(type::verify_dimensions): Rewrote.
+ 	(type::merge): Likewise.
+ 	(check_class_constant): Updated for type constructor change.
+ 	(check_constant): Likewise.
+ 	(check_field_constant): Likewise.
+ 	(get_one_type): Likewise.
+ 	(initialize_stack): Likewise.
+ 	(verify_instructions_0): Likewise.
+ 	(verify_instructions_0) [op_invokeinterface]: Removed special
+ 	case.
+ 	(isect_list): New field.
+ 	(_Jv_BytecodeVerifier): Initialize it.
+ 	(~_Jv_BytecodeVerifier): Destroy ref_intersection objects. 
+ 
+ 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-23  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
+ 	(connectHooks): New method.
+ 	(handleEvent): Remove.
+ 	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
+ 	(createHooks): Remove declaration.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+ 	(generates_key_typed_event): Change to handle only certain
+ 	keyvals.
+ 	(awt_event_handler): Add special handling for GtkTextView.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
+ 	(textcomponent_commit_cb): New function.
+ 	(textcomponent_changed_cb): Likewise.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+ 	(connectHooks): Remove.
+ 
+ 2003-07-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natSystem.cc (arraycopy): Check for overflow.
+ 
+ 	* boehm.cc (_Jv_BuildGCDescr): Use `1ULL'.
+ 
+ 2003-07-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* boehm.cc (_Jv_BuildGCDescr): Wrote.
+ 	Include limits.h.
+ 
+ 2003-07-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/Window.java (getWarningString): Just return the
+ 	string.
+ 	(Window): Set warningString; check with security manager.
+ 
+ 2003-07-22  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/awt/xlib/XGraphicsConfiguration.java
+ 	(FontMetricsCache): Made static.
+  
+ 2003-07-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* 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-21  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ 	(create): Remove unused method implementation.
+ 	(connectHooks): Remove debug messages.
+ 
+ 2003-07-20  Anthony Green  <green@redhat.com>
+ 
+ 	* gnu/awt/j2d/AbstractGraphicsState.java (clone): Handle
+ 	CloneNotSupportedException.
+ 	* gnu/gcj/xlib/WindowAttributes.java (clone): Ditto.
+ 	* gnu/gcj/xlib/WMSizeHints.java (clone): Ditto.
+ 	* gnu/gcj/xlib/GC.java (clone): Ditto.
+ 	* gnu/awt/xlib/XGraphics.java (clone): Ditto.
+ 	* gnu/awt/j2d/Graphics2DImpl.java (clone): Ditto.
+ 
+ 	* gnu/awt/xlib/XEventLoop.java (postNextEvent): Remove unreachable
+ 	handler.
+ 	* gnu/gcj/runtime/NameFinder.java (NameFinder): Ditto.
+ 
+ 2003-07-20  Steve Pribyl <steve@netfuel.com.>
+ 
+ 	* gnu/gcj/runtime/natSharedLibLoader.cc (init): `libname' now a
+ 	String.  Put dlerror() message into exception.
+ 	Include UnsatisfiedLinkError.
+ 	* gnu/gcj/runtime/SharedLibLoader.java (init): `libname' now a
+ 	String.  Now native.
+ 
+ 2003-07-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/Runtime.java: Comment fix.
+ 	* java/lang/ClassLoader.java (isAncestorOf): New method.
+ 	(getParent): Uncommented security check.  Use isAncestorOf.
+ 	* include/jvm.h (_Jv_CheckAccess): Declare.
+ 	* java/lang/reflect/natConstructor.cc (newInstance): Perform
+ 	access check.
+ 	Include IllegalAccessException.h, ArrayIndexOutOfBoundsException.h.
+ 	* java/lang/reflect/natArray.cc (newInstance): Pass caller's
+ 	class loader to _Jv_GetArrayClass.
+ 	Include ArrayIndexOutOfBoundsException.h.
+ 	* java/lang/reflect/Field.java: Update comment to reflect status.
+ 	(equals): Fixed indentation.
+ 	* java/lang/Class.h (Class): Declare memberAccessCheck, not
+ 	checkMemberAccess.  Make _Jv_CheckAccess a friend.
+ 	* java/lang/Class.java (memberAccessCheck): New method from
+ 	Classpath.
+ 	(checkMemberAccess): Removed.
+ 	(getDeclaredMethod): Use memberAccessCheck.
+ 	(getField): Likewise.
+ 	(getMethod): Likewise.
+ 	* resolve.cc (_Jv_ResolvePoolEntry): Use _Jv_CheckAccess.
+ 	(_Jv_SearchMethodInClass): Likewise.
+ 	* prims.cc (_Jv_CheckAccess): New function.
+ 	* jni.cc (_Jv_JNI_FindClass): Use getClassLoaderInternal.
+ 	(_Jv_JNI_GetAnyFieldID): Likewise.
+ 	* java/lang/natClass.cc (forName): Use getClassLoaderInternal.
+ 	(getClassLoader): Added security check.
+ 	(getConstructor): Call memberAccessCheck.
+ 	(getDeclaredClasses): Likewise.
+ 	(getDeclaredField): Likewise.
+ 	(getDeclaredFields): Likewise.
+ 	(_getConstructors): Likewise.
+ 	(getDeclaredConstructor): Likewise.
+ 	(getDeclaredMethods): Likewise.
+ 	(getFields): Likewise.
+ 	(getMethods): Likewise.
+ 	(newInstance): Likewise.
+ 	(_Jv_MakeVTable): Put method name in exception.
+ 	* java/lang/reflect/natMethod.cc (getType): Use
+ 	getClassLoaderInternal.
+ 	(_Jv_GetTypesFromSignature): Likewise.
+ 	(invoke): Perform access check.
+ 	(_Jv_CallAnyMethodA): Removed old FIXME comments.
+ 	Include ArrayIndexOutOfBoundsException.h.
+ 	* java/lang/reflect/natField.cc (getType): Use
+ 	getClassLoaderInternal.
+ 	(_Jv_CheckFieldAccessibility): Removed.
+ 	(getAddr): Use _Jv_CheckAccess; find caller.
+ 	Include ArrayIndexOutOfBoundsException.h.
+ 
+ 2003-07-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java
+ 	(URL): Fixed documentation to name an argument correcty, Reformatted
+ 	one method declaration.
+ 	(getURLStreamHandler): Added documentation from classpath.
+ 
+ 2003-07-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* mauve-libgcj: Don't run CollationElementIterator tests.
+ 
+ 2003-07-19  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-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/util/logging/Handler.java (isLoggable): Check record level
+ 	smaller or equal.
+ 
+ 2003-07-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/peer/gtk/GtkToolkit.java:
+ 	Reworked imports.
+ 
+ 2003-07-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/rmi/server/UnicastServerRef.java:
+ 	New version from classpath.
+ 
+ 2003-07-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/MemoryImageSource.java,
+ 	java/beans/PropertyEditorManager.java,
+ 	javax/naming/CompoundName.java,
+ 	javax/naming/spi/NamingManager.java,
+ 	javax/swing/AbstractButton.java,
+ 	javax/swing/ButtonModel.java,
+ 	javax/swing/SwingUtilities.java,
+ 	javax/swing/UIManager.java,
+ 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
+ 	javax/swing/event/AncestorEvent.java,
+ 	javax/swing/event/InternalFrameEvent.java,
+ 	java/util/zip/ZipFile.java:
+ 	New versions from classpath.
+ 
+ 2003-07-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java,
+ 	gnu/java/nio/natFileChannelImpl.cc: Removed.
+ 	* 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/FileChannelImpl.java,
+ 	java/nio/channels/natFileChannelImpl.cc:
+ 	New files.
+ 	* Makefile.am
+ 	(ordinary_java_source_files):
+ 	Removed gnu/java/nio/FileChannelImpl.java and added
+ 	java/nio/channels/FileChannelImpl.java.
+ 	(nat source_files):
+ 	Removed gnu/java/nio/natFileChannelImpl.cc and added
+ 	java/nio/channels/natFileChannelImpl.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-07-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicBorders.java,
+ 	javax/swing/plaf/basic/BasicLabelUI.java,
+ 	javax/swing/plaf/basic/BasicLookAndFeel.java,
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.java,
+ 	javax/swing/plaf/basic/BasicTextUI.java,
+ 	javax/swing/plaf/metal/MetalLookAndFeel.java:
+ 	New versions from classpath.
+ 
+ 2003-07-13  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/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
+ 
+ 2003-07-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/locale/LocaleInformation_de.java
+ 	* gnu/java/locale/LocaleInformation_en.java
+ 	* gnu/java/locale/LocaleInformation_nl.java
+ 
+ 2003-07-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/awt/EmbeddedWindow.java,
+ 	gnu/java/awt/EmbeddedWindowSupport.java,
+ 	gnu/java/awt/natEmbeddedWindow.cc:
+ 	New files.
+ 	* java/awt/Window.java
+ 	(Window): New constructor to support embedded windows.
+ 	* Makefile.am
+ 	(awt_java_source_files): Added gnu/java/awt/EmbeddedWindow.java and
+ 	gnu/java/awt/EmbeddedWindowSupport.java.
+ 	(nat_source_files): Added gnu/java/awt/natEmbeddedWindow.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-07-11  Matt Kraai  <kraii@alumni.cmu.edu>
+ 
+ 	* gnu/gcj/runtime/SharedLibLoader.java: Fix misspelling.
+ 	* gnu/gcj/runtime/natSharedLibLoader.cc: Likewise.
+ 	* java/awt/im/InputContext.java: Remove a redundant
+ 	partial line.
+ 
+ 2003-07-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AM_MAKEFLAGS): Added CPPFLAGS.
+ 
+ 2003-07-09  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectOutputStream.java (writeObject): break after
+ 	calling writeClassDescriptor().
+ 
+ 2003-07-09  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	* gcj/array.h (JvPrimClass): Don't parenthesize the output.
+ 
+ 2003-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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/GtkWindowPeer.java:
+ 	Explicitly import used classes.
+ 	* java/awt/Container.java: New version from classpath.
+ 
+ 2003-07-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* libgcj.pc.in: New file.
+ 	* Makefile.am: Install libgcj.pc in $libdir/pkgconfig.
+ 	* Makefile.in: Regenerated.
+ 	* configure: Regenrated.
+ 	* configure.in: Create libgcj.pc from libgcj.pc.in.
+ 
+ 2003-07-08  Mark Wielaard <mark@klomp.org>
+ 
+ 	* gcj/cni.h: CNI now expands to Compiled Native Interface.
+ 
+ 	* java/lang/e_pow.c: CYGNUS LOCAL should be GCJ LOCAL.
+ 	* java/lang/fdlibm.h: Likewise.
+ 
+ 2003-07-07  Adam Megacz <adam@xwt.org>
+ 
+         * posix.cc: added #include<stdio.h>
+ 		
+ 2003-07-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Fix
+ 	formatting.
+ 
+ 	* 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  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* configure.in: Check for usleep declaration.
+ 	* acconfig.h (HAVE_USLEEP_DECL): Provide template.
+ 	* configure: Regenerate.
+ 	* include/config.h.in: Likewise.
+ 	* include/posix.h [!HAVE_USLEEP_DECL]: Declare usleep.
+ 
+ 2003-07-01  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/gcj/convert/natIconv.cc
+ 	(iconv_init): Fixed possible memory leak by releasing allocated iconv
+ 	handle.
+ 
+ 2003-06-30  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* glib-2.0.m4: New file.
+ 	* gtk-2.0.m4: New file.
+ 	* glib.m4: Remove.
+ 	* gtk.m4: Remove.
+ 	* configure.in: Update AM_PATH_GTK macro call to
+ 	AM_PATH_GTK_2_0.  Likewise for AM_PATH_GLIB.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.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_GtkScrollBarPeer.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_GtkWindowPeer.c,
+ 	jni/gtk-peer/gthread-jni.c,
+ 	jni/gtk-peer/gthread-jni.h:
+ 	New versions from classpath.
+ 	* aclocal.m4: Regenerate.
+ 	* configure: Regenerate.
+ 	* Makefile.in: Regenerate.
+ 	* gcj/Makefile.in: Regenerate.
+ 	* include/Makefile.in: Regenerate.
+ 	* testsuite/Makefile.in: Regenerate.
+ 
+ 2003-06-30  Gary Benson  <gbenson@redhat.com>
+ 
+ 	For PR libgcj/11349:
+ 	* javax/naming/spi/NamingManager.java (getURLContext): Use
+ 	correct name for factory class.
+ 
+ 2003-06-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/PrintStream.java
+ 	(checkError): Call flush() instead of direct flushing of the Writer
+ 	object.
+ 	(print): Call print(String) instead of direct print method of the
+ 	Writer Object.
+ 	(println): Call println(String) instead of direct println method of the
+ 	Writer Object.
+ 	(write): Simplified.
+ 
+ 2003-06-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/ServerSocket.java
+ 	(setChannel): New method.
+ 	* java/net/Socket.java
+ 	(setChannel): New method.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/beancontext/BeanContextSupport.java:
+ 	New version from classpath.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Window.java,
+ 	java/awt/font/GraphicAttribute.java,
+ 	java/awt/font/ImageGraphicAttribute.java,
+ 	java/awt/image/DataBufferByte.java,
+ 	java/awt/image/DataBufferInt.java,
+ 	java/awt/image/DataBufferUShort.java,
+ 	java/awt/image/DirectColorModel.java,
+ 	java/awt/image/PixelGrabber.java:
+ 	New versions from classpath.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Certificate.java
+ 	(getGuarantor): Removed wrong @deprecated tag.
+ 	(getPrincipal): Likewise.
+ 	(getPublicKey): Likewise.
+ 	(encode): Likewise.
+ 	(decode): Likewise.
+ 	(getFormat): Likewise.
+ 	(toString): Likewise.
+ 	* java/security/cert/PolicyQualifierInfo.java
+ 	(PolicyQualifierInfo): Made final.
+ 	* javax/security/auth/x500/X500Principal.java
+ 	(serialVersionUID): New member variable.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/Format.java
+ 	(serialVersionUID): Fixed value.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Inet4Address.java
+ 	(Inet4Address): Made package-private.
+ 	* java/net/Inet6Address.java
+ 	(Inet4Address): Made package-private.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/RandomAccessFile.java
+ 	(readLine): Removed wrong @deprecated tag.
+ 	(getChannel): Made final.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(write): Removed.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBufferImpl.java
+ 	(ByteBufferImpl): Made it a package-private class
+ 	* java/nio/CharBufferImpl.java
+ 	(CharBufferImpl): Made it a package-private class
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(DirectByteBufferImpl): Made it a package-private class
+ 	* java/nio/DoubleBufferImpl.java
+ 	(DoubleBufferImpl): Made it a package-private class
+ 	* java/nio/FloatBufferImpl.java
+ 	(FloatBufferImpl): Made it a package-private class
+ 	* java/nio/IntBufferImpl.java
+ 	(IntBufferImpl): Made it a package-private class
+ 	* java/nio/LongBufferImpl.java
+ 	(LongBufferImpl): Made it a package-private class
+ 	* java/nio/ShortBufferImpl.java
+ 	(ShortBufferImpl): Made it a package-private class
+ 	* java/nio/channels/FileChannel.java
+ 	(write): Made final.
+ 	* java/nio/channels/ServerSocketChannel.java
+ 	(ServerSocketChanne): Made protected.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/CompositeName.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/naming/CompoundName.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/naming/InitialContext.java
+ 	(InitialContext): Throws NamingException.
+ 	(init): Likewise.
+ 	* javax/naming/LinkRef.java
+ 	(serialVersionUID): New member variable.
+ 	(gteLinkName): Throws NamingException.
+ 	* javax/naming/NamingException.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/naming/NamingSecurityException.java
+ 	(NamingSecurityException): Made abstract.
+ 	(serialVersionUID): New member variable.
+ 	* javax/naming/ReferralException.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/naming/StringRefAddr.java
+ 	(serialVersionUID): New member variable.
+ 	* javax/naming/directory/BasicAttribute.java:
+ 	Reworked imports.
+ 	(serialVersionUID): New member variable.
+ 	(get): Throws NamingException.
+ 	(getAll): Throws NamingException.
+ 	* javax/naming/directory/BasicAttributes.java:
+ 	Reworked imports.
+ 	(serialVersionUID): New member variable.
+ 	* javax/naming/ldap/UnsolicitedNotificationEvent.java
+ 	(serialVersionUID): New member variable.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am
+ 	(awt_java_source_files): Added new files:
+ 	javax/swing/Popup.java,
+ 	javax/swing/PopupFactory.java
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-06-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JWindow.java,
+ 	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/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/BasicTextUI.java,
+ 	javax/swing/plaf/basic/BasicTreeUI.java:
+ 	New versions from classpath.
+ 	* javax/swing/Popup.java,
+ 	javax/swing/PopupFactory.jav:
+ 	New source files from classpath.
+ 	* javax/swing/plaf/doc-files/TreeUI-1.png:
+ 	New binary files from classpath.
+ 
+ 2003-06-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am
+ 	(awt_java_source_files): Added javax/swing/plaf/SpinnerUI.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-06-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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,
+ 	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:
+ 	New versions from classpath.
+ 	* javax/swing/plaf/SpinnerUI.java: 
+ 	New file from classpath
+ 
+ 2003-06-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/ColorModel.java:
+ 	New version from classpath.
+ 
+ 2003-06-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/PlainDatagramSocketImpl.java:
+ 	Partly merged with classpath, this mainly adds documentation.
+ 
+ 2003-06-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectInputStream.java
+ 	(readClassDescriptor): New method.
+ 	(readObject): Moved functionality to readClassDescriptor().
+ 	* java/io/ObjectOutputStream.java
+ 	(writeClassDescriptor): New method.
+ 	(writeObject): Moved functionality to writeClassDescriptor().
+ 
+ 2003-06-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicListUI.java,
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	Added missing methods.
+ 
+ 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.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URL.java:
+ 	Renamed "handler" to "ph" in the whole file to match classpaths
+ 	version.
+ 	* java/net/URLStreamHandler.java:
+ 	(equals): Renamed "handler" to "ph".
+ 
+ 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,
+ 	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,
+ 	javax/swing/plaf/doc-files/ComponentUI-1.dia,
+ 	javax/swing/plaf/doc-files/ComponentUI-1.png:
+ 	New versions from classpath.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/Buffer.java
+ 	(cap): Made package-private.
+ 	(pos): Likewise.
+ 	(limit): Likewise.
+ 	(mark): Likewise.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/SocketImpl.java
+ 	(shutdownInput): Made it non-abstract method throwing an exception
+ 	like in SUNs JRE.
+ 	(shutdownOutput): Likewise.
+ 	* java/net/SocketInputStream.java,
+ 	java/net/SocketOutputStream.java:
+ 	New files from classpath.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Font.java,
+ 	java/awt/Window.java,
+ 	java/awt/color/ColorSpace.java,
+ 	java/awt/datatransfer/StringSelection.java,
+ 	java/awt/image/ColorModel.java:
+ 	New versions from classpath.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am
+ 	(awt_java_source_files): Added new files:
+ 	javax/swing/plaf/basic/BasicSplitPaneDivider.java,
+ 	javax/swing/plaf/basic/BasicSplitPaneUI.java
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/JTextComponent.java:
+ 	New version from classpath.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/Timer.java,
+ 	javax/swing/plaf/ActionMapUIResource.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/basic/BasicBorders.java:
+ 	New versions from classpath.
+ 	* javax/swing/plaf/basic/BasicSplitPaneDivider.java.
+ 	javax/swing/plaf/basic/BasicSplitPaneUI.java:
+ 	New file from classpath.
+ 	* 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.FieldBorder-1.png,
+ 	javax/swing/plaf/doc-files/ComponentUI-1.dia,
+ 	javax/swing/plaf/doc-files/ComponentUI-1.png:
+ 	New binary files from classpath.
+ 
+ 2003-06-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/LineNumberReader.java
+ 	(skip): Dont do line number accounting here as this is already done in
+ 	read(), simplified.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(static): Load javaio lib if existing (only in classpath).
+ 	(File): Revised documentation to show the correct argument name.
+ 	(createTempFile): Partly merged with classpath.
+ 	(compareTo): Simplified.
+ 	(lastModified): Throw exception if time < 0.
+ 	(deleteOnExit): Revised documentation.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/PlainSocketImpl.java:
+ 	Reformatted.
+ 	(PlainSocketImpl): Merged class documentaion with classpath.
+ 	(in): Moved.
+ 	(out): Moved.
+ 	(PlainSocketImpl): New empty constructor.
+ 	(finalize): Moved.
+ 	(setOption): Merged documentation from classpath.
+ 	(getOption): Likewise.
+ 	(create): Likewise.
+ 	(connect): Likewise.
+ 	(bind): Likewise.
+ 	(listen): Likewise.
+ 	(accept): Likewise.
+ 	(available): Likewise.
+ 	(close): Likewise.
+ 	(read): Likewise.
+ 	(write): Likewise.
+ 	(getInputStream): Made synchronozed to get sure that only one stream
+ 	object can be created for this socket, merged documentation from
+ 	classpath.
+ 	(getOutputStream): Likewise.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/PlainSocketImpl.java:
+ 	Reformatting.
+ 	(static): New implicit method.
+ 	(read): Made package private.
+ 	(write): Likewise.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/SimpleTimeZone.java:
+ 	Removed unneeded import, reformatting.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/DateFormat.java,
+ 	java/text/SimpleDateFormat.java,
+ 	java/util/Locale.java:
+ 	New versions from classpath.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/SpinnerModel.java:
+ 	New file from classpath.
+ 	* javax/swing/border/LineBorder.java,
+ 	javax/swing/border/SoftBevelBorder.java,
+ 	javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/basic/BasicBorders.java:
+ 	New versions from classpath.
+ 	* 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:
+ 	New binary files from classpath.
+ 
+ 2003-06-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/logging/LogRecord.java,
+ 	java/util/logging/Logger.java,
+ 	java/util/logging/SocketHandler.java,
+ 	java/util/logging/SimpleFormatter.java,
+ 	java/util/logging/Formatter.java,
+ 	java/util/logging/ErrorManager.java,
+ 	java/util/logging/Handler.java,
+ 	java/util/logging/FileHandler.java,
+ 	java/util/logging/LogManager.java,
+ 	java/util/logging/Level.java,
+ 	java/util/logging/ConsoleHandler.java,
+ 	java/util/logging/StreamHandler.java,
+ 	java/util/logging/LoggingPermission.java,
+ 	java/util/logging/Filter.java,
+ 	java/util/logging/MemoryHandler.java,
+ 	java/util/logging/XMLFormatter.java:
+ 	New files from classpath.
+ 
+ 2003-06-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/ObjectStreamField.java
+ 	(unshared): new member variable.
+ 	(ObjectStreamField): New constructor.
+ 	(isUnshared): New method.
+ 
+ 2003-06-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLStreamHandler.java
+ 	(hostsEqual): Rewritten.
+ 
+ 2003-06-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/MappedByteFileBuffer.java,
+ 	gnu/java/nio/natMappedByteFileBuffer.cc:
+ 	Removed
+ 	* java/nio/MappedByteBufferImpl.java:
+ 	New file.
+ 	* gnu/java/nio/FileChannelImpl.java:
+ 	Use MappedByteBufferImpl instead of MappedByteFileBuffer.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Removed
+ 	gnu/java/nio/MappedByteFileBuffer.java and added
+ 	java/nio/MappedByteBufferImpl.java.
+ 	(nat_source_files): Removed gnu/java/nio/natMappedByteFileBuffer.cc
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/DatagramChannelImpl.java
+ 	(fd): Removed.
+ 	(blocking): New member variable.
+ 	(socket): Likewise.
+ 	(DatagramChannelImpl): Throws IOException, initialize socket.
+ 	(socket):Implemented.
+ 	(implCloseSelectableChannel): Throws IOException, implemented.
+ 	(implConfigureBlocking): Likewise.
+ 	(connect): Likewise.
+ 	(disconnect): Likewise.
+ 	(isConnected): Likewise.
+ 	(write): Likewise.
+ 	(read): Likewise.
+ 	(receive): Throws IOException.
+ 	(send): Likewise.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(read): Implemented.
+ 	(write): Implemented.
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/JComponent.java,
+ 	javax/swing/JInternalFrame.java,
+ 	javax/swing/MenuSelectionManager.java,
+ 	javax/swing/SwingUtilities.java,
+ 	javax/swing/ToggleButtonModel.java:
+ 	New versions from classpath.
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java
+ 	(NULLORDER): Initialize with -1 as JDK documentation says.
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/HttpURLConnection.java,
+ 	java/net/Inet4Address.java,
+ 	java/net/Inet6Address.java,
+ 	java/net/SocketImpl.java,
+ 	java/net/URLClassLoader.java:
+ 	Reworked import statements.
+ 	* java/net/InetAddress.java
+ 	(getByAddress): Simplified.
+ 	* java/net/ServerSocket.java
+ 	(ServerSocket): Moved special handling during bind operation to
+ 	bind().
+ 	(bind): Handle different cases when trying to bind a socket.
+ 	* java/net/URLConnection.java
+ 	(getHeaderFieldDate): Merged with classpath.
+ 	(getHeaderFieldInt): Likewise.
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/InflaterInputStream.java
+ 	(InflaterInputStream): Throw NullPointerException if in is null (as
+ 	JDK does).
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Font.java
+ 	javax/swing/UIManager.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/TitledBorder.java
+ 	javax/swing/plaf/BorderUIResource.java
+ 	javax/swing/plaf/basic/BasicBorders.java
+ 	javax/swing/plaf/basic/BasicButtonUI.java
+ 	javax/swing/plaf/basic/BasicCheckBoxUI.java
+ 	javax/swing/plaf/basic/BasicGraphicsUtils.java
+ 	javax/swing/plaf/basic/BasicLabelUI.java
+ 	javax/swing/plaf/basic/BasicRadioButtonUI.java
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.java:
+ 	New versions from classpath.
+ 	* javax/swing/border/SoftBevelBorder.java:
+ 	New file from classpath.
+ 	* javax/swing/border/doc-files/LineBorder-1.png,
+ 	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/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.MarginBorder-1.png,
+ 	javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-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:
+ 	New binary files from classpath.
+ 	* Makefile.am
+ 	(awt_java_source_files): Added
+ 	javax/swing/border/SoftBevelBorder.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/x509/X509Certificate.java
+ 	(writeReplace): Merged from classpath.
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(map_address): Made public.
+ 	(FileChannelImpl): Merged with classpath.
+ 	* gnu/java/nio/natFileChannelImpl.cc
+ 	(nio_mmap_file): Commented out unused arguments.
+ 	(nio_unmmap_file): Likewise.
+ 	(niu_msync): Likewise.
+ 
+ 2003-06-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/image/IndexColorModel.java:
+ 	New version from classpath.
+ 
+ 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-18  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* java/lang/natVMSecurityManager.cc (getClassContext):
+ 	Use maxlen instead of len for loop bound.
+ 
+ 2003-06-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/SelectorImpl.java
+ 	(register): Use fd with value 0 for now, will be fixed later.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(fd): Removed.
+ 	(local_port): Removed.
+ 	(InetSocketAddress): Removed.
+ 	(ServerSocketChannelImpl): Just initialize internal socket object.
+ 	(implCloseSelectableChannel): Close internal socket object.
+ 	(implConfigureBlocking): Added comment.
+ 	(accept): Use jaba.net stuff to accept socket.
+ 	* gnu/java/nio/SocketChannelImpl.java
+ 	(fd): Removed.
+ 	(local_port): Removed.
+ 	(InetSocketAddress): Removed.
+ 	(SocketCreate): Removed.
+ 	(SocketConnect): Removed.
+ 	(SocketBind): Removed.
+ 	(SocketListen): Removed.
+ 	(SocketAvailable): Removed.
+ 	(SocketClose): Removed.
+ 	(SocketRead): Removed.
+ 	(SocketWrite): Removed.
+ 	(SocketChannelImpl): Just initialize internal socket object.
+ 	(implCloseSelectableChannel): Close internal socket object.
+ 	(implConfigureBlocking): Fixed implementation, added comment.
+ 	(connect): Use internal socket object to connect.
+ 	(socket): No need for sanity checks.
+ 	(read): Comment out some stuff, this will be reimplemented in the next
+ 	commit.
+ 	(write): Likewise.
+ 	* gnu/java/nio/natFileChannelImpl.cc
+ 	(nio_mmap_file): Line wrapped.
+ 	* gnu/java/nio/natSocketChannelImpl.cc: Removed.
+ 	* Makefile.am
+ 	(nat_source_files): Removeded gnu/java/nio/natSocketChannelImpl.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-06-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Locale.java
+ 	(equals): Merged from classpath.
+ 
+ 2003-06-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java:
+ 	Reformatted to better match classpath's version.
+ 	* java/net/URL.java
+ 	(equals): Simplified.
+ 	* java/net/URLConnection.java
+ 	(setDoInput): Revised documentation.
+ 	(getDefaultUseCaches): Likewise.
+ 	(setRequestProperty): Added @since tag.
+ 
+ 2003-06-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetSocketAddress.java
+ 	(InetSocketAddress): Use wildcard address if addr is null.
+ 	(InetSocketAddress): Dont duplicate implementation.
+ 	(InetSocketAddress): Throw exception when hostname is null.
+ 	* java/net/Socket.java:
+ 	Reworked imports.
+ 	(Socket): Throw exception when raddr is null, handle case when laddr
+ 	is null.
+ 
+ 2003-06-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DirectByteBufferImpl.java
+ 	(address): Made package private.
+ 	(DirectByteBufferImpl): New constructor.
+ 	* java/nio/natDirectByteBufferImpl.cc
+ 	(allocateImpl): Moved to java.nio namespace, implemented.
+ 	(freeImpl): Likewise.
+ 	(getImpl): Likewise.
+ 	(putImpl): Likewise.
+ 	* jni.cc
+ 	(_Jv_JNI_NewDirectByteBuffer): Implemented.
+ 	(_Jv_JNI_GetDirectBufferAddress): Implemented.
+ 	(_Jv_JNI_GetDirectBufferCapacity): Implemented.
+ 
+ 2003-06-17  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
+ 
+ 	* include/powerpc-signal.h: New File.
+ 	* configure.in: Use it.
+ 	* configure: Regenerated.
+ 
+ 2003-06-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/Locale.java
+ 	(getDisplayLanguage): Made it final.
+ 	(getDisplayCountry): Likewise.
+ 	(getDisplayVariant): Likewise.
+ 	(getDisplayName): Likewise.
+ 
+ 2003-06-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/PropertyResourceBundle.java:
+ 	Removed unneeded import.
+ 
+ 2003-06-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/prefs/AbstractPreferences.java,
+ 	java/util/prefs/PreferencesFactory.java:
+ 	Reworked imports, removed unused imports.
+ 	* java/util/prefs/Preferences.java
+ 	(systemNodeForPackage): Method takes a Class not an Object.
+ 	(userNodeForPackage): Likewise.
+ 	(nodeForPackage): Likewise.
+ 
+ 2003-06-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/security/x509/X509Certificate.java:
+ 	Explicitely import used classes.
+ 
+ 2003-06-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/ZipEntry.java,
+ 	java/util/zip/ZipFile.java,
+ 	java/util/zip/ZipInputStream.java,
+ 	java/util/zip/ZipOutputStream.java:
+ 	Reworked imports, only import used classes.
+ 
+ 2003-06-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/lang/ArrayHelper.java,
+ 	gnu/java/lang/ClassHelper.java:
+ 	Reformatted to match classpath's versions.
+ 
+ 2003-06-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+         (map_address): Removed incorrect comment.        
+ 	* gnu/java/nio/SelectorImpl.java
+         (register): Remove code duplication and code for file channel handling.        
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+         (serverSocket): Renamed from sock_object.
+         (ServerSocketChannel): Initialize serverSocket.
+         (socket): Return serverSocket.
+ 	* gnu/java/nio/SocketChannelImpl.java
+         (socket): Renamed from sock_object.
+         (isConnectionPenging): Simplified.
+         (socket): Return socket.
+ 2003-06-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/BasicPermission.java:
+ 	New version from classpath.
+ 
+ 2003-06-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/naming/directory/Attribute.java:
+ 	New version from classpath.
+ 
+ 2003-06-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedReader.java,
+ 	java/io/FileOutputStream.java:
+ 	New versions from classpath.
+ 
+ 2003-06-12  Andrew Haley  <aph@redhat.com>
+ 
+ 	* prims.cc (catch_segv): Create exception in handler.
+ 	(catch_fpe): Likewise.	
+ 	(_Jv_divI, _Jv_remI, _Jv_divJ, _Jv_remJ): Likewise.
+ 	(_Jv_ThrowSignal): Remove.
+ 
+ 	* include/x86_64-signal.h (INIT_SEGV): Delete reference to nullp.
+ 	* include/default-signal.h (INIT_SEGV, INIT_FPE): Delete reference
+ 	to nullp and arithexception.
+ 	* include/dwarf2-signal.h (INIT_SEGV, INIT_FPE): Likewise.
+ 	* include/i386-signal.h (INIT_SEGV, INIT_FPE): Likewise.
+ 	* include/s390-signal.h (INIT_SEGV, INIT_FPE): Likewise.
+ 	* include/sparc-signal.h (INIT_SEGV, INIT_FPE): Likewise.
+ 	* include/win32-signal.h (INIT_SEGV, INIT_FPE): Likewise.
+ 
+ 2003-06-11  Andrew Haley  <aph@redhat.com>
+ 
+ 	* jni.cc (_Jv_JNI_check_types): New.
+ 	(_Jv_JNI_SetPrimgitiveArrayRegion): Check array type.
+ 	(_Jv_JNI_GetPrimitiveArrayRegion): Ditto.
+ 	(_Jv_JNI_GetPrimitiveArrayElements): Ditto.
+ 	(_Jv_JNI_ReleasePrimitiveArrayElements): Ditto.
+ 	
+ 	* java/lang/natVMSecurityManager.cc (getClassContext): Fix
+ 	infinite loop.
+ 
+ 2003-06-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (loadClass): Not deprecated.
+ 	* java/io/PrintStream.java: Not deprecated.
+ 
+ 2003-06-11  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/awt/j2d/IntegerGraphicsState.java (drawOval): implemented.
+ 	(fillOval): implemented
+ 	* gnu/awt/xlib/XGraphics.java (drawArc): implemented.
+ 	(fillArc): implemented.
+ 	* gnu/gcj/xlib/GC.java (drawArc): added native method.
+ 	(fillArc): added native method.
+ 	* gnu/gcj/xlib/natGC.cc (drawArc): added native method.
+ 	(fillArc): added native method.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/im/InputSubset.java:
+ 	New version from classpath.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java,
+ 	javax/swing/AbstractButton.java,
+ 	javax/swing/AbstractCellEditor.java,
+ 	javax/swing/AbstractListModel.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/JButton.java,
+ 	javax/swing/JCheckBox.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/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/JPasswordField.java,
+ 	javax/swing/JPopupMenu.java,
+ 	javax/swing/JProgressBar.java,
+ 	javax/swing/JRadioButton.java,
+ 	javax/swing/JRadioButtonMenuItem.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/JToggleButton.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/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/UIDefaults.java,
+ 	javax/swing/UIManager.java,
+ 	javax/swing/border/AbstractBorder.java,
+ 	javax/swing/border/CompoundBorder.java,
+ 	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/SwingPropertyChangeSupport.java,
+ 	javax/swing/event/TableModelEvent.java,
+ 	javax/swing/event/TreeWillExpandListener.java,
+ 	javax/swing/event/UndoableEditEvent.java,
+ 	javax/swing/filechooser/FileFilter.java,
+ 	javax/swing/filechooser/FileSystemView.java,
+ 	javax/swing/filechooser/FileView.java,
+ 	javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/basic/BasicDefaults.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:
+ 	New versions from classpath.
+ 	* javax/swing/table/JTableHeader.java:
+ 	New file from classpath.
+ 	* Makefile.am
+ 	(java_awt_sources): Added javax/swing/table/JTableHeader.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/MappedByteBuffer.java,
+ 	java/nio/channels/Channels.java,
+ 	java/nio/channels/ServerSocketChannel.java,
+ 	java/nio/channels/spi/AbstractSelector.java:
+ 	Removed unneeded imports.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java:
+ 	Partly merged with classpath.
+ 
+ 2003-06-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Frame.java,
+ 	java/awt/Graphics.java,
+ 	java/awt/Menu.java,
+ 	java/awt/Robot.java,
+ 	java/awt/image/ColorModel.java:
+ 	New versions from classpath.
+ 
+ 2003-06-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/PrintStream.java:
+ 	Merged version from classpath.
+ 	(close): Removed sychronized keyword. This class is not garantied to
+ 	be thread-safe.
+ 	(write): Likewise.
+ 
+ 2003-06-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* gnu/gcj/xlib/natFont.cc (getAscent): Correctly access "ascent"
+ 	field.
+ 	(getDescent): Likewise, for "descent".
+ 
+ 2003-06-09  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/gcj/xlib/natFont.cc (getMaxAscent): adjusted return value.
+ 	(getMaxDescent): adjusted return value.
+ 	(getAscent): modified to use metrics for 'O'.
+ 	(getDescent): modified to use metrics for 'y'.
+ 
+ 2003-06-08  Anthony Green  <green@redhat.com>
+ 
+ 	* java/net/URLStreamHandler.java (sameFile): Fix port value
+ 	comparison.
+ 	* java/net/URL.java (handler): Make package private.
+ 	* gnu/gcj/protocol/http/Handler.java (getDefaultPort): New method.
+ 
+ 2003-06-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR libgcj/11085:
+ 	* 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-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/Socket.java
+ 	(Socket): Dont initialize inputShutdown and outputShutdown twice,
+ 	call bind() and connect() to actually do the bind and connect tasks.
+ 	(bind): Connect to canonical address if bindpoint is null, create
+ 	socket and bind it to bindpoint.
+ 	(connect): Check for exceptions.
+ 
+ 2003-06-08  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(DatagramSocket): No need to set SO_REUSEADDRESS here. This belongs
+ 	into the Multicast constructors.
+ 	* java/net/DatagramSocketImpl.java
+ 	(getOption): Removed.
+ 	(setOption): Removed.
+ 	* java/net/MulticastSocket.java
+ 	(MulticastSocket): Call setReuseAddress (true).
+ 	* java/net/SocketImpl.java
+ 	(getOption): Removed.
+ 	(setOption): Removed.
+ 
+ 2003-06-07	Jeff Sturm	<jsturm@one-point.com>
+ 
+ 	PR libgcj/10886:
+ 	* gnu/java/rmi/server/UnicastRemoteCall.java (returnValue):
+ 	Test for empty vector.
+ 
+ 2003-06-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/security/Security.java (secprops): Initialize.
+ 	(loadProviders): Return boolean.
+ 	(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.
+ 	* gnu/gcj/convert/Output_SJIS.java (havePendingBytes): Likewise.
+ 	* gnu/gcj/convert/Output_EUCJIS.java (havePendingBytes): Likewise.
+ 	* gnu/gcj/convert/Output_UTF8.java (havePendingBytes): Likewise.
+ 	(write): Always decrease avail when count is increased.
+ 	* 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().
+ 	(writeChars(String,int,int)): Likewise.
+ 	* java/io/OutputStreamWriter.java (writeChars(char[], int, int)):
+ 	Check converter.havePendingBytes() and flush buffer when stalled.
+ 
+ 2003-06-07  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* include/posix.h
+ 	(O_DSYNC): Define O_DSYNC on platforms not
+ 	supporting O_FSYNC (newlib).
+ 
+ 2003-06-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/awt/Toolkit.java (getDefaultToolkit): Add exception cause to
+ 	AWTError.
+ 
+ 2003-06-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	More compile fixes from my stupid work yesterday.
+ 
+ 2003-06-05  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* 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.
+ 	(O_DSYNC): Likewise.
+ 	* java/io/natFileDescriptorPosix.cc (open): Revert last patch.
+ 
+ 2003-06-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/plaf/BorderUIResource.java,
+ 	javax/swing/plaf/basic/BasicDefaults.java,
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ 	More compile fixes for latest Border commit. I should not commit
+ 	something in this heat here ...
+ 
+ 2003-06-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/border/BevelBorder.java
+ 	(BevelBorder): Removed.
+ 	* javax/swing/border/EmptyBorder.java:
+ 	Reformatted.
+ 	(EmptyBorder): Removed.
+ 	(getBorderInsets): Dont use l, r, t and b.
+ 	* javax/swing/border/EtchedBorder.java
+ 	(EtchedBorder): Removed.
+ 	* javax/swing/border/LineBorder.java
+ 	(LineBorder): Removed.
+ 	* javax/swing/border/MatteBorder.java
+ 	(MatteBorder): Removed.
+ 	* javax/swing/border/TitledBorder.java
+ 	(defaultBorder): Use other default for now.
+ 	(defaultFont): Likewise.
+ 	(defaultColor): Likewise.
+ 
+ 2003-06-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/border/Border.java:
+ 	New version from classpath.
+ 
+ 2003-06-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/border/AbstractBorder.java,
+ 	javax/swing/border/BevelBorder.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/TitledBorder.java:
+ 	New versions from Classpath.
+ 
+ 2003-06-05  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,
+ 	java/awt/print/PageFormat.java,
+ 	java/awt/print/PrinterJob.java:
+ 	New versions from Classpath.
+ 
+ 2003-06-05  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* java/text/SimpleDateFormat.java (SimpleDateFormat): Added
+ 	numberFormat.setParseIntegerOnly(true).
+ 
+ 2003-06-05  Bert Deknuydt  <Bert.Deknuydt@esat.kuleuven.ac.be>
+ 
+ 	* include/posix-threads.h: Include <machine/pal.h> on OSF.
+ 
+ 2003-06-03  Andrew Haley  <aph@redhat.com>
+ 
+         * include/x86_64-signal.h (MAKE_THROW_FRAME): Mark sigcontext on
+         stack volatile to prevent optimization from removing it.
+ 
+ 2003-05-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/Deflater.java
+ 	(FILTERED): Merged documentation from classpath.
+ 	* java/util/zip/DeflaterOutputStream.java
+ 	(DeflaterOutputStream): Merged documentation and argument validity
+ 	check from classpath.
+ 	(deflate): Merged documentation from classpath.
+ 	(finish): Likewise.
+ 	* java/util/zip/Inflater.java
+ 	(Inflater): Merged class documentation from classpath.
+ 	(zstream): Reordered.
+ 	(is_finished): Reordered.
+ 	(dict_needed): Reordered.
+ 	(Inflater): Reordered, merged documentation from classpath.
+ 	(end): Likewise.
+ 	(finalize): Merged documentation from classpath.
+ 	(finished): Likewise.
+ 	(getAdler): Likewise.
+ 	(getRemaining): Likewise.
+ 	(getTotalIn): Likewise.
+ 	(getTotalOut): Likewise.
+ 	(inflate): Likewise.
+ 	(needsDictionary): Likewise.
+ 	(needsInput): Likewise.
+ 	(reset): Likewise.
+ 	(setDictionary): Likewise.
+ 	(setInput): Likewise.
+ 
+ 2003-05-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URLConnection.java
+ 	(getHeaderFieldInt): Merged with classpath.
+ 
+ 2003-05-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/PrintStream.java
+ 	(PrintStream): Reformatted.
+ 	(PrintStream): New method, merged from classpath.
+ 	(write): Reformatted.
+ 
+ 2003-05-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/System.java:
+ 	Explicitely import needed classes.
+ 
+ 2003-05-26  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetPermission.java,
+ 	java/net/NetworkInterface.java,
+ 	java/net/PasswordAuthentication.java,
+ 	java/net/SocketPermission.java:
+ 	New versions from classpath.
+ 
+ 2003-05-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/PushbackInputStream.java,
+ 	java/net/Authenticator.java,
+ 	java/net/ContentHandler.java,
+ 	java/net/ContentHandlerFactory.java,
+ 	java/net/DatagramSocket.java,
+ 	java/net/DatagramSocketImpl.java,
+ 	java/net/DatagramSocketImplFactory.java,
+ 	java/net/FileNameMap.java,
+ 	java/net/SocketImplFactory.java,
+ 	java/net/SocketOptions.java,
+ 	java/net/URLStreamHandlerFactory.java:
+ 	Merged new versions from classpath.
+ 
+ 2003-05-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Checkbox.java,
+ 	java/awt/Dialog.java,
+ 	java/awt/Font.java,
+ 	java/awt/Frame.java,
+ 	java/awt/ScrollPaneAdjustable.java,
+ 	java/awt/Scrollbar.java,
+ 	java/awt/Window.java:
+ 	New versions from classpath.
+ 
+ 2003-05-22	Jeff Sturm	<jsturm@one-point.com>
+ 
+ 	PR libgcj/10838:
+ 	* java/io/ObjectInputStream (enableResolveObject):
+ 	Fixed spelling of permission name.
+ 
+ 2003-05-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataInputStream.java
+ 	(convertFromUTF): Merged comment from classpath.
+ 	* java/io/PrintStream.java
+ 	(error_occured): Renamed from error, merged comment from classpath.
+ 	(PrintStream): No need to initialized error.
+ 	(checkError): Replace error with error_occurred.
+ 	(setError): Likewise.
+ 
+ 2003-05-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataInputStream.java:
+ 	Reformatted, Replaced < and & with html entitites in documentation.
+ 	* java/io/File.java:
+ 	Reformatted.
+ 	* java/io/PrintWriter.java:
+ 	Moved class documentation.
+ 
+ 2003-05-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java,
+ 	gnu/java/nio/CharBufferImpl.java,
+ 	gnu/java/nio/CharViewBufferImpl.java,
+ 	gnu/java/nio/DirectByteBufferImpl.java,
+ 	gnu/java/nio/DoubleBufferImpl.java,
+ 	gnu/java/nio/DoubleViewBufferImpl.java,
+ 	gnu/java/nio/FloatBufferImpl.java,
+ 	gnu/java/nio/FloatViewBufferImpl.java,
+ 	gnu/java/nio/IntBufferImpl.java,
+ 	gnu/java/nio/IntViewBufferImpl.java,
+ 	gnu/java/nio/LongBufferImpl.java,
+ 	gnu/java/nio/LongViewBufferImpl.java,
+ 	gnu/java/nio/natDirectByteBufferImpl.cc,
+ 	gnu/java/nio/ShortBufferImpl.java,
+ 	gnu/java/nio/ShortViewBufferImpl.java:
+ 	Moved files to java/nio.
+ 	* gnu/java/nio/SocketChannelImpl.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:
+ 	Dont import anything.
+ 	* java/nio/ByteBufferImpl.java,
+ 	java/nio/CharBufferImpl.java,
+ 	java/nio/CharViewBufferImpl.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/natDirectByteBufferImpl.cc,
+ 	java/nio/ShortBufferImpl.java,
+ 	java/nio/ShortViewBufferImpl.java:
+ 	Moved from gnu/java/nio.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Moved files from gnu/java/nio to
+ 	java/nio.
+ 	(nat_source_files): Moved natDirectByteBufferImpl.cc from gnu/java/nio
+ 	to java/nio.
+ 	* Makefile.in: Regenerated.
+ 
+ 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>
+ 
+ 	* java/text/CollationKey.java:
+ 	Merged copyright and dat from classpath.
+ 	* java/text/RuleBasedCollator.java:
+ 	Merged class documentation from classpath.
+ 
+ 2003-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/CharBuffer.java
+ 	(toString): Compile fix.
+ 
+ 2003-05-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java
+ 	(putLong): Fixed conversion to bytes.
+ 	(putDouble): Fixed conversion to bytes.
+ 	* gnu/java/nio/DirectByteBufferImpl.java
+ 	(putLong): Fixed conversion to bytes.
+ 	(putDouble): Fixed conversion to bytes.
+ 	* gnu/java/nio/FileLockImpl.java
+ 	(isValid): Reformatted.
+ 	* java/nio/Buffer.java
+ 	(Buffer): Fixed off-by-one bug in handling mark.
+ 	* java/nio/ByteBuffer.java:
+ 	Added newline.
+ 	* java/nio/CharBuffer.java
+ 	(toString): Don't use relative get to get string data.
+ 
+ 2003-05-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/natFileDescriptorPosix.cc
+ 	(open): Commented out the O_SYNC and O_DSYNC usage until its better
+ 	tested.
+ 
+ 2003-05-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java
+ 	(released): New member variable.
+ 	(FileLockImpl): Initialize released.
+ 	(releaseImpl): New native method.
+ 	(release): Implemented.
+ 	* gnu/java/nio/SelectorImpl.java: Reformatted.
+ 	* gnu/java/nio/SelectionKeyImpl.java: Reformatted.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java: Reformatted.
+ 	(accept): Throws IOException.
+ 	* gnu/java/nio/SocketChannelImpl.java: Reformatted.
+ 	(implConfigureBlocking): Throws IOException.
+ 	(connect): Likewise.
+ 	(read): Likewise.
+ 	(write): Likewise.
+ 	* gnu/java/nio/natFileLockImpl.cc: New file.
+ 	* java/nio/channels/FileLock.java: Reformatted.
+ 	* Makefile.am:
+ 	(ordinary_java_source_files): Added gnu/java/nio/FileLockImpl.java.
+ 	(nat_source_files): Added gnu/java/nio/natFileLockImpl.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-05-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/CharViewBufferImpl.java
+ 	(CharViewBufferImpl): Fixed super constructor call, initialize offset.
+ 	(get): Shift bits to the right direction.
+ 	(put): Likewise.
+ 	* gnu/java/nio/DoubleViewBufferImpl.java
+ 	(DoubleViewBufferImpl): Fixed super constructor call, initialize offset.
+ 	(get): Shift bits to the right direction.
+ 	(put): Likewise.
+ 	* gnu/java/nio/FloatViewBufferImpl.java
+ 	(FloatViewBufferImpl): Fixed super constructor call, initialize offset.
+ 	(get): Shift bits to the right direction.
+ 	(put): Likewise.
+ 	* gnu/java/nio/IntViewBufferImpl.java
+ 	(IntViewBufferImpl): Fixed super constructor call, initialize offset.
+ 	(get): Shift bits to the right direction.
+ 	(put): Likewise.
+ 	* gnu/java/nio/LongViewBufferImpl.java
+ 	(LongViewBufferImpl): Fixed super constructor call, initialize offset.
+ 	(get): Shift bits to the right direction.
+ 	(put): Likewise.
+ 	* gnu/java/nio/ShortViewBufferImpl.java
+ 	(ShortViewBufferImpl): Fixed super constructor call, initialize offset.
+ 	(get): Shift bits to the right direction.
+ 	(put): Likewise.
+ 
+ 2003-05-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/natDirectByteBufferImpl.cc
+ 	(allocateImpl): jlong -> RawData*.
+ 	(freeImpl): Likewise.
+ 
+ 2003-05-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/FileChannel.java
+ 	(MapMode.m): Made it package-private to match JDK 1.4.
+ 	* java/nio/charset/Charset.java
+ 	(decode): Made it final to match JDK 1.4.
+ 
+ 2003-05-13  Michael Koch  <konqueror@gmx.de>
+ 
+        * java/io/FileDescriptor.java
+        (SYNC): New constant.
+        (DSYNC): Likewise.
+        (getLength): Renamed from lenght() to match classpath's
+        FileDescriptor.java.
+        * java/io/RandomAccessFile.java
+        (RandomAccessFile): Removed unneeded mode check, implemented mode
+        "rws" and "rwd", merged documentation from classpath.
+        (setLength): Reformatted.
+        (length): Use new getLength() of FileDescriptor.
+        * java/io/natFileDescriptorEcos.cc
+        (getLength): Renamed from length().
+        * java/io/natFileDescriptorPosix.cc
+        (open): Implemented support for SYNC and DSYNC.
+        (seek): Use getLength() instead of length().
+        (getLength): Renamed from length().
+        * java/io/natFileDescriptorWin32.cc
+        (getLength): Renamed from length().
+        (seek): Use getLength() instead of length().
+        (available): Likewise.
+        * gnu/java/nio/natFileChannelImpl.cc
+        (size): Use getLength() instead of length().
+ 
+ 2003-05-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java
+ 	(ByteBufferImpl): All constructors revised.
+ 	(slice): Reimplemented.
+ 	(duplicate): Reimplemented.
+ 	(asReadOnlyBuffer): Reimplemented.
+ 	* java/nio/ByteBuffer.java:
+ 	Reformatted.
+ 	(array_offset): Renamed from "offset" to match all other buffer
+ 	classes.
+ 	(ByteBuffer): All constructors revised.
+ 	(allocateDirect): Implemented.
+ 	(allocate): New implementation, documentation reworked.
+ 	(wrap): Likewise.
+ 	(get): Documentation reworked.
+ 	(put): New implementation, documentation reworked.
+ 	(hasArray): Documentation reworked.
+ 	(arrayOffset): Likewise.
+ 	(hashCode): Likewise.
+ 	(equals): Likewise.
+ 	(compareTo): Likewise.
+ 	(order): Likewise.
+ 	(compact): Likewise.
+ 	(isDirect): Likewise.
+ 	(slice): Likewise.
+ 	(duplicate): Likewise.
+ 	(asReadOnlyBuffer): Likewise.
+ 	* Makefile.am
+ 	(ordinary_java_source_files):
+ 	Added gnu/java/nio/DirectByteBufferImpl.java.
+ 	(nat_source_files):
+ 	Added gnu/java/nio/natDirectByteBufferImpl.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-05-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java: Reformatted.
+ 	(nio_get_*): Removed.
+ 	(nio_put_*): Removed.
+ 	(as*Buffer): Implemented.
+ 	(compact): Implemented.
+ 	(get): Documentation added.
+ 	(put): Documentation added.
+ 	(get*): Newly implemented.
+ 	(put*): Newly implemented.
+ 	* gnu/java/nio/CharBufferImpl.java: Reformatted.
+ 	(CharBufferImpl): Revised.
+ 	(slice): New implementation.
+ 	(duplicate): New implementation.
+ 	(compact): New implementation.
+ 	(asReadOnlyBuffer): New implementation.
+ 	(get): Documentation revised.
+ 	(order): Return native byte order.
+ 	* gnu/java/nio/DirectByteBufferImpl.java
+ 	(allocateDirect): objects can be null not 0.
+ 	* gnu/java/nio/DoubleBufferImpl.java: Reformatted.
+ 	(DoubleBufferImpl): Revised.
+ 	(slice): New implementation.
+ 	(duplicate): New implementation.
+ 	(compact): New implementation.
+ 	(asReadOnlyBuffer): New implementation.
+ 	(get): Documentation revised.
+ 	(order): Return native byte order.
+ 	* gnu/java/nio/FloatBufferImpl.java: Reformatted.
+ 	(FloatBufferImpl): Revised.
+ 	(slice): New implementation.
+ 	(duplicate): New implementation.
+ 	(compact): New implementation.
+ 	(asReadOnlyBuffer): New implementation.
+ 	(get): Documentation revised.
+ 	(order): Return native byte order.
+ 	* gnu/java/nio/IntBufferImpl.java: Reformatted.
+ 	(IntBufferImpl): Revised.
+ 	(slice): New implementation.
+ 	(duplicate): New implementation.
+ 	(compact): New implementation.
+ 	(asReadOnlyBuffer): New implementation.
+ 	(get): Documentation revised.
+ 	(order): Return native byte order.
+ 	* gnu/java/nio/LongBufferImpl.java: Reformatted.
+ 	(LongBufferImpl): Revised.
+ 	(slice): New implementation.
+ 	(duplicate): New implementation.
+ 	(compact): New implementation.
+ 	(asReadOnlyBuffer): New implementation.
+ 	(get): Documentation revised.
+ 	(order): Return native byte order.
+ 	* gnu/java/nio/ShortBufferImpl.java: Reformatted.
+ 	(ShortBufferImpl): Revised.
+ 	(slice): New implementation.
+ 	(duplicate): New implementation.
+ 	(compact): New implementation.
+ 	(asReadOnlyBuffer): New implementation.
+ 	(get): Documentation revised.
+ 	(order): Return native byte order.
+ 	* java/nio/CharBuffer.java: Reformatted, much documentation rewritten.
+ 	(CharBuffer): Revised.
+ 	(order): Removed.
+ 	* java/nio/DoubleBuffer.java: Reformatted, much documentation rewritten.
+ 	(DoubleBuffer): Revised.
+ 	(allocateDirect): Removed.
+ 	(order): Removed.
+ 	* java/nio/FloatBuffer.java: Reformatted, much documentation rewritten.
+ 	(FloatBuffer): Revised.
+ 	(allocateDirect): Removed.
+ 	(order): Removed.
+ 	* java/nio/IntBuffer.java: Reformatted, much documentation rewritten.
+ 	(IntBuffer): Revised.
+ 	(allocateDirect): Removed.
+ 	(order): Removed.
+ 	* java/nio/LongBuffer.java: Reformatted, much documentation rewritten.
+ 	(LongBuffer): Revised.
+ 	(allocateDirect): Removed.
+ 	(order): Removed.
+ 	* java/nio/ShortBuffer.java: Reformatted, much documentation rewritten.
+ 	(ShortBuffer): Revised.
+ 	(allocateDirect): Removed.
+ 	(order): Removed.
+ 	* gnu/java/nio/natByteBufferImpl.cc: Removed.
+ 	* gnu/java/nio/natCharBufferImpl.cc: Removed.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Added the following files:
+ 	gnu/java/nio/CharViewBufferImpl.java,
+ 	gnu/java/nio/DoubleViewBufferImpl.java,
+ 	gnu/java/nio/FloatViewBufferImpl.java,
+ 	gnu/java/nio/IntViewBufferImpl.java,
+ 	gnu/java/nio/LongViewBufferImpl.java,
+ 	gnu/java/nio/ShortViewBufferImpl.java
+ 	(nat_source_files): Removed the following files:
+ 	gnu/java/nio/natByteBufferImpl.cc,
+ 	gnu/java/nio/natCharBufferImpl.cc
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-05-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/CharViewBufferImpl.java,
+ 	gnu/java/nio/DirectByteBufferImpl.java,
+ 	gnu/java/nio/DoubleViewBufferImpl.java,
+ 	gnu/java/nio/FloatViewBufferImpl.java,
+ 	gnu/java/nio/IntViewBufferImpl.java,
+ 	gnu/java/nio/LongViewBufferImpl.java,
+ 	gnu/java/nio/ShortViewBufferImpl.java,
+ 	gnu/java/nio/natDirectByteBufferImpl.cc:
+ 	New files, not yet to be compiled.
+ 
+ 2003-05-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* 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:
+ 	New versions from classpath. This adds copyrights to all files and
+ 	some serialVersionUIDs.
+ 
+ 2003-05-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/CharBuffer.java
+ 	(offset): Make it package-private.
+ 	(backing_buffer): Likewise.
+ 	* java/nio/DoubleBuffer.java
+ 	(offset): Make it package-private.
+ 	(backing_buffer): Likewise.
+ 	(put): Reformatted.
+ 	* java/nio/FloatBuffer.java
+ 	(offset): Make it package-private.
+ 	(backing_buffer): Likewise.
+ 	* java/nio/IntBuffer.java
+ 	(offset): Make it package-private.
+ 	(backing_buffer): Likewise.
+ 	* java/nio/LongBuffer.java
+ 	(offset): Make it package-private.
+ 	(backing_buffer): Likewise.
+ 	* java/nio/ShortBuffer.java
+ 	(offset): Make it package-private.
+ 	(backing_buffer): Likewise.
+ 
+ 2003-05-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/CharBuffer.java
+ 	(put): Fixed precondtion check.
+ 	(toString): Make it work without backing array.
+ 	(put): Skip one level of method calling.
+ 
+ 2003-05-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/security/Identity.java,
+ 	java/security/IdentityScope.java,
+ 	java/security/Key.java,
+ 	java/security/KeyPair.java,
+ 	java/security/PrivateKey.java,
+ 	java/security/Provider.java,
+ 	java/security/PublicKey.java,
+ 	java/security/SecureRandom.java,
+ 	java/security/SecureRandomSpi.java,
+ 	java/security/SignedObject.java,
+ 	java/security/Signer.java,
+ 	java/security/cert/Certificate.java,
+ 	java/security/cert/PKIXCertPathBuilderResult.java,
+ 	java/security/cert/X509Certificate.java:
+ 	New versions from classpath.
+ 
+ 2003-05-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (nat_source_files): Removed old files.
+ 	* gnu/java/nio/natDoubleBufferImpl.cc: Removed.
+ 	* gnu/java/nio/natFloatBufferImpl.cc: Removed.
+ 	* gnu/java/nio/natIntBufferImpl.cc: Removed.
+ 	* gnu/java/nio/natLongBufferImpl.cc: Removed.
+ 	* gnu/java/nio/natShortBufferImpl.cc: Removed.
+ 
+ 2003-05-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java
+ 	(nio_cast): Removed.
+ 	(ByteBufferImpl): Removed.
+ 	(nio_get_Byte): Removed.
+ 	(nio_put_Byte): Removed.
+ 	(asByteBuffer): Removed.
+ 	(asCharBuffer): Removed implementation and throw exception.
+ 	(asShortBuffer): Likewise.
+ 	(asIntBuffer): Likewise.
+ 	(asLongBuffer): Likewise.
+ 	(asFloatBuffer): Likewise.
+ 	(asDoubleBuffer): Likewise.
+ 	* gnu/java/nio/CharBufferImpl.java
+ 	(CharBufferImpl): Removed.
+ 	(nio_get_Byte): Removed.
+ 	(nio_put_Byte): Removed.
+ 	(asByteBuffer): Removed.
+ 	* gnu/java/nio/DoubleBufferImpl.java
+ 	(DoubleBufferImpl): Removed.
+ 	(nio_get_Byte): Removed.
+ 	(nio_put_Byte): Removed.
+ 	(asByteBuffer): Removed.
+ 	* gnu/java/nio/FloatBufferImpl.java
+ 	(FloatBufferImpl): Removed.
+ 	(nio_get_Byte): Removed.
+ 	(nio_put_Byte): Removed.
+ 	(asByteBuffer): Removed.
+ 	* gnu/java/nio/IntBufferImpl.java
+ 	(IntBufferImpl): Removed.
+ 	(nio_get_Byte): Removed.
+ 	(nio_put_Byte): Removed.
+ 	(asByteBuffer): Removed.
+ 	* gnu/java/nio/LongBufferImpl.java
+ 	(LongBufferImpl): Removed.
+ 	(nio_get_Byte): Removed.
+ 	(nio_put_Byte): Removed.
+ 	(asByteBuffer): Removed.
+ 	* gnu/java/nio/ShortBufferImpl.java
+ 	(ShortBufferImpl): Removed.
+ 	(nio_get_Byte): Removed.
+ 	(nio_put_Byte): Removed.
+ 	(asByteBuffer): Removed.
+ 	* gnu/java/nio/natByteBufferImpl.cc
+ 	(nio_cast): Removed.
+ 	(nio_get_Byte): Removed.
+ 	(nio_put_Byte): Removed.
+ 	* gnu/java/nio/natCharBufferImpl.cc
+ 	(nio_get_Byte): Removed.
+ 	(nio_put_Byte): Removed.
+ 
+ 2003-05-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(getJarEntry): Merged documentation from classpath.
+ 	(getJarFile): Likewise.
+ 	(getMainAttributes): Likewise.
+ 	(getAttributes): Likewise.
+ 	(getManifest): Likewise.
+ 	(getCertificates): Reformatted.
+ 	* java/net/URLConnection.java:
+ 	Little classpath merge.
+ 
+ 2003-05-09  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataOutputStream.java
+ 	(writeShort): Made it synchronized.
+ 	(writeChar): Likewise.
+ 	(writeInt): Likewise.
+ 	(writeLong): Liekwise.
+ 	(writeUTF): Made it synchronized, renamed argument to match classpath.
+ 	* java/io/InputStreamReader.java
+ 	(converter): Added documentation.
+ 	(read): Merged documentation from classpath.
+ 	* java/io/OutputStreamWriter.java
+ 	(OutputStreamWriter): Merged documentation from classpath.
+ 	(close): Reformatted.
+ 	(getEncoding): Likewise.
+ 	(flush): Likewise.
+ 	(write): Merged documentation from classpath, reformatted.
+ 
+ 2003-05-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure.host <powerpc64*-*>: Set with_libffi_default and
+ 	libgcj_interpreter to "yes".
+ 
+ 2003-05-08  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/gcj/xlib/natGC.cc (drawString): Removed obsolete code.
+ 	
+ 2003-05-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc: Reverted previous patch.
+ 
+ 2003-05-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataOutputStream.java
+ 	(write): Renamed argument to "value", merged documentation from
+ 	classpath.
+ 	(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
+ 	(performDelete): Added documentation.
+ 	(performList): Likewise.
+ 	(performMkdir): Likewise.
+ 	(performSetReadOnly): Likewise.
+ 	(performRenameTo): Likewise.
+ 	(performSetLastModified): Likewise.
+ 	(delete): Made it sychronized.
+ 	(renameTo): Made it sychronized.
+ 	(equals): Reformatted.
+ 	(isHidden): Likewise.
+ 	(listFiles): Likewise.
+ 	(setReadOnly): Likewise.
+ 	(listRoots): Likewise.
+ 	(setLastModified): Likewise.
+ 	(checkRead): Likewise.
+ 	(checkWrite): Likewise.
+ 	* java/io/FileInputStream.java
+ 	(skip): Made it sychronized, merged from classpath.
+ 	* java/io/FileOutputStream.java
+ 	(write): Merged from classpath.
+ 	* java/io/InputStreamReader.java:
+ 	(InputStreamReader): Merged documentation from classpath.
+ 
+ 2003-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetworkInterface.java
+ 	(networkInterfaces): Removed.
+ 	(getByName): Use getRealNetworkInterfaces() instead of
+ 	networkInterfaces.
+ 	(getByInetAddress): Likewise.
+ 	(getNetworkInterfaces): Likewise.
+ 	(toString): Fix output of addresses of an interface.
+ 
+ 2003-05-05  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataInputStream.java:
+ 	Merged new documentation from classpath.
+ 
+ 2003-05-03  Matt Kraai  <kraai@alumni.cmu.edu>
+ 
+ 	* gnu/awt/gtk/GtkButtonPeer.java: Fix misspelling of
+ 	"version".
+ 	* gnu/awt/gtk/GtkComponentPeer.java: Likewise.
+ 	* gnu/awt/gtk/GtkContainerPeer.java: Likewise.
+ 	* gnu/awt/gtk/GtkFramePeer.java: Likewise.
+ 	* gnu/awt/gtk/GtkLabelPeer.java: Likewise.
+ 	* gnu/awt/gtk/GtkMainThread.java: Likewise.
+ 	* gnu/awt/gtk/GtkToolkit.java: Likewise.
+ 	* gnu/awt/gtk/GtkWindowPeer.java: Likewise.
+ 	* java/security/Key.java: Likewise.
+ 	* java/security/PrivateKey.java: Likewise.
+ 	* java/security/Provider.java: Likewise.
+ 	* java/security/PublicKey.java: Likewise.
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/URI.java
+ 	(create): Doesnt throws any exceptions.
+ 	* java/net/URLConnection.java
+ 	(URLConnection): Commend added.
+ 	(getExpiration): The header field is called "expires" not
+ 	"expiration".
+ 	(getHeaderField): Merged documentation with classpath.
+ 	(getHeaderFieldInt): Likewise.
+ 	(getHeaderFieldDate): Likewise.
+ 	(getHeaderFieldKey): Likewise.
+ 	(getPermission): Likewise.
+ 	(setDefaultUseCaches): Likewise.
+ 	(setRequestProperty): Likewise.
+ 	(addRequestProperty): Likewise.
+ 	(getRequestProperty): Likewise.
+ 	(getRequestProperties): Likewise.
+ 	(setDefaultRequestProperty): Likewise.
+ 	(getDefaultRequestProperty): Likewise.
+ 	(guessContentTypeFromStream): Likewise.
+ 	(getFileNameMap): Likewise.
+ 	(setFileNameMap): Likewise.
+ 	(setDoInput): Merged implementation and documentation with classpath.
+ 	(setDoOutput): Likewise.
+ 	(setAllowUserInteraction): Likewise.
+ 	(setDefaultAllowUserInteraction): Likewise.
+ 	(setContentHandlerFactory): Made it synchronized, merged documentation
+ 	with classpath.
+ 	(guessContentTypeFromName): Renamed argument fname to filename to
+ 	match classpath, merged documentation with classpath.
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/JarURLConnection.java
+ 	(JarURLConnection): Class documentation merged with classpath.
+ 	(getJarFileURL): Moved and documentation merged with classpath.
+ 	(getEntryName): Likewise.
+ 	(JarURLConnection): Documentation merged with classpath.
+ 	(getJarEntry): Likewise.
+ 	(getJarFile): Likewise.
+ 	* java/net/PlainDatagramSocketImpl.java:
+ 	Class documentation moved.
+ 	* java/net/URLConnection.java
+ 	(fileNameMap): Moved and documentation merged with classpath.
+ 	(factory): Likewise.
+ 	(defaultAllowUserInteraction): Likewis.
+ 	(defaultUseCaches): Likewise.
+ 	(allowUserInteraction): Likewise.
+ 	(connected): Likewise.
+ 	(url): Likewise.
+ 	(connect): Documentation merged with classpath.
+ 	(getURL): Likewise.
+ 	(getContentLength): Likewise.
+ 	(getContentType): Likewise.
+ 	(getContentEncoding): Likewise.
+ 	(getExpiration): Likewise.
+ 	(getDate): Likewise.
+ 	(getLastModified): Likewise.
+ 	(getHeaderField): Likewise.
+ 	(getContent): Likewise.
+ 	(getPermission): Likewise.
+ 	(getInputStream): Likewise.
+ 	(getOutputStream): Likewise.
+ 	(toString): Likewise.
+ 	(getDoInput): Likewise.
+ 	(getDoOutput): Likewise.
+ 	(setAllowUserInteraction): Likewise.
+ 	(getAllowUserInteraction): Likewise.
+ 	(setDefaultAllowUserInteraction): Likewise.
+ 	(getDefaultAllowUserInteraction): Likewise.
+ 	(setUseCaches): Likewise.
+ 	(getUseCaches): Likewise.
+ 	(setIfModifiedSince): Likewise.
+ 	(getIfModifiedSince): Likewise.
+ 	(setDefaultRequestProperty): Likewise.
+ 	(getDefaultRequestProperty): Likewise.
+ 	(setContentHandlerFactory): Likewise.
+ 	(setFileNameMap): Likewise.
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java:
+ 	Merged class documentation with classpath.
+ 	* java/net/JarURLConnection.java:
+ 	Explicitely import all used classes.
+ 	* java/net/URL.java:
+ 	Reformatting.
+ 	* java/net/ServerSocket.java,
+ 	java/net/Socket.java:
+ 	New versions from classpath.
+ 
+ 2003-05-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(read): New implementation.
+ 	(implRead): New methods.
+ 	(write): New implementation, call other write insteal of read method.
+ 	(implWrite): New methods.
+ 	(map): Added comment.
+ 	(transferFrom): Implemented.
+ 	(transferTo): Implemented.
+ 	(lock): Added checks to throw exceptions.
+ 	(truncate): Added check to throw exception.
+ 	* gnu/java/nio/natFileChannelImpl.cc
+ 	(implRead): New method.
+ 	(implWrite): New method.
+ 	* java/nio/ByteBuffer.java
+ 	(hashCode): Fixed comment.
+ 	(get): Fixed exception documentation.
+ 	(put): Fixed exception documentation.
+ 	* java/nio/CharBuffer.java:
+ 	Added comment for later optimizations.
+ 
+ 2003-04-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/10582:
+ 	* verify.cc (_Jv_BytecodeVerifier::is_assignable_from_slow):
+ 	Removed.
+ 	(type::compatible): Use _Jv_IsAssignableFrom.
+ 	* java/lang/natClass.cc (iindex_mutex_initialized): Now static.
+ 	(_Jv_IsAssignableFrom): Work even when source or target class is
+ 	not prepared.
+ 
+ 2003-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/BreakIterator.java
+ 	(clone): New method.
+ 
+ 2003-04-30  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/text/CollationElementIterator.java,
+ 	java/text/CollationKey.java,
+ 	java/text/RuleBasedCollator.java:
+ 	Merged copyright and documentation from classpath and
+ 	rearranged some code. No code changes done.
+ 
+ 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/Engine.java,
+ 	gnu/java/security/OID.java,
+ 	gnu/java/security/der/BitString.java,
+ 	gnu/java/security/der/DER.java,
+ 	gnu/java/security/der/DERReader.java,
+ 	gnu/java/security/der/DERValue.java,
+ 	gnu/java/security/der/DERWriter.java,
+ 	gnu/java/security/provider/DSAKeyFactory.java,
+ 	gnu/java/security/provider/X509CertificateFactory.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,
+ 	java/security/cert/CRLSelector.java,
+ 	java/security/cert/CertPathBuilder.java,
+ 	java/security/cert/CertPathBuilderResult.java,
+ 	java/security/cert/CertPathBuilderSpi.java,
+ 	java/security/cert/CertPathParameters.java,
+ 	java/security/cert/CertPathValidator.java,
+ 	java/security/cert/CertPathValidatorResult.java,
+ 	java/security/cert/CertPathValidatorSpi.java,
+ 	java/security/cert/CertSelector.java,
+ 	java/security/cert/CertStore.java,
+ 	java/security/cert/CertStoreParameters.java,
+ 	java/security/cert/CertStoreSpi.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,
+ 	javax/security/auth/x500/X500Principal.java:
+ 	New files from classpath.
+ 	* gnu/java/io/ASN1ParsingException.java,
+ 	gnu/java/io/Base64InputStream.java,
+ 	gnu/java/security/der/DEREncodingException.java,
+ 	gnu/java/security/provider/DSAParameters.java,
+ 	gnu/java/security/provider/DSASignature.java,
+ 	gnu/java/security/provider/Gnu.java,
+ 	gnu/java/security/provider/GnuDSAPrivateKey.java,
+ 	gnu/java/security/provider/GnuDSAPublicKey.java,
+ 	java/security/AlgorithmParameterGenerator.java,
+ 	java/security/AlgorithmParameters.java,
+ 	java/security/KeyFactory.java,
+ 	java/security/KeyPairGenerator.java,
+ 	java/security/KeyStore.java,
+ 	java/security/MessageDigest.java,
+ 	java/security/SecureClassLoader.java,
+ 	java/security/SecureRandom.java,
+ 	java/security/Security.java,
+ 	java/security/Signature.java,
+ 	java/security/cert/Certificate.java,
+ 	java/security/cert/CertificateFactory.java,
+ 	java/security/cert/CertificateFactorySpi.java,
+ 	java/security/cert/X509CRL.java,
+ 	java/security/cert/X509Certificate.java,
+ 	java/security/spec/DSAPublicKeySpec.java:
+ 	New versions from classpath.
+ 	* gnu/java/security/provider/DERReader.java,
+ 	gnu/java/security/provider/DERWriter.java,
+ 	java/security/Engine.java: Removed.
+ 	* Makefile.am
+ 	(java_source_files, javax_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 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>
+ 
+ 	* java/util/PropertyPermission.java:
+ 	New version from classpath
+ 	* java/util/ResourceBundle.java:
+ 	Partly merged from classpath
+ 	(getObject): Reformated.
+ 	(tryBundle): Set foundBundle = null if no bundle found.
+ 
+ 2003-04-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractListModel.java,
+ 	javax/swing/DefaultBoundedRangeModel.java,
+ 	javax/swing/DefaultSingleSelectionModel.java:
+ 	New Versions from classpath.
+ 
+ 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-29  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/util/zip/Deflater.java,
+ 	java/util/zip/DeflaterOutputStream.java:
+ 	Partly merged with classpath.
+ 
+ 2003-04-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natString.cc (_Jv_AllocString): Initialize
+ 	cachedHashCode.
+ 	(init): Likewise.
+ 	(_Jv_NewStringUtf8Const): Likewise.
+ 
+ 2003-03-29  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* include/jvm.h: (_Jv_GetNbArgs) added
+ 	(_Jv_GetSafeArg) added
+ 	(_Jv_SetArgs) added
+ 	* prims.cc: (_Jv_GetNbArgs) implemented
+ 	(_Jv_GetSafeArg) implemented
+ 	(_Jv_SetArgs) implemented
+ 	(_Jv_RunMain) use _Jv_SetArgs() instead of explicitly
+ 	setting _Jv_argc and _Jv_argv
+ 	* posix.cc: (_Jv_ThisExecutable) use _Jv_GetSafeArg()
+ 	instead of _Jv_argv
+ 	* java/lang/natRuntime.cc: (insertSystemProperties) use
+ 	_Jv_GetSafeArg() instead of _Jv_argv
+ 
+ 2003-04-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* resolve.cc (_Jv_PrepareClass): Round size up to alignment
+ 	required by this object.  Search superclasses to find required
+ 	alignment.
+ 	(get_alignment_from_class): Use alignment of type as it appears
+ 	in a struct.
+ 	(ALIGNOF): New macro.
+ 	(struct aligner): New helper structure.
+ 
+ 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-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/io/BufferedReader.java, java/io/BufferedWriter.java,
+ 	java/io/DataInput.java, java/io/DataOutput.java: Imports from
+ 	Classpath.
+ 
+ 2003-04-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/sql/Date.java, java/sql/DriverManager.java,
+ 	java/sql/Time.java, java/sql/Timestamp.java: New versions from
+ 	Classpath.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (ordinary_java_source_files): Added new files.
+ 	* java/security/AlgorithmParameterGenerator.java,
+ 	java/security/AlgorithmParameters.java, java/security/Engine.java,
+ 	java/security/Identity.java, java/security/IdentityScope.java,
+ 	java/security/KeyFactory.java,
+ 	java/security/KeyPairGenerator.java, java/security/KeyStore.java,
+ 	java/security/MessageDigest.java, java/security/Policy.java,
+ 	java/security/ProtectionDomain.java,
+ 	java/security/SecureRandom.java, java/security/Security.java,
+ 	java/security/Signature.java, java/security/SignatureSpi.java,
+ 	java/security/SignedObject.java, java/security/Signer.java,
+ 	java/security/interfaces/RSAMultiPrimePrivateCrtKey.java,
+ 	java/security/spec/PSSParameterSpec.java,
+ 	java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java,
+ 	java/security/spec/RSAOtherPrimeInfo.java: New versions from
+ 	Classpath.
+ 
+ 2003-04-19  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/awt/xlib/XGraphics.java (XGraphics): Use new GC.create.
+ 	(dispose): Null metrics.
+ 	* gnu/awt/xlib/XToolkit.java (sync): Implement.
+ 	* gnu/gcj/xlib/Clip.java (dispose): Change name of native from
+ 	finalize.
+ 	(finalize): Call dispose.
+ 	* gnu/gcj/xlib/Drawable.java (gcCache): New field.
+ 	(gcCachedCount): New field.
+ 	(finalize): New method.
+ 	(putGCInCache): New method.
+ 	(getGCFromCache): New method.
+ 	* gnu/gcj/xlib/GC.java (GC): Make protected.
+ 	(clone): Get new GC from cache if possible.
+ 	(create): New static method.
+ 	(dispose): Save old GC in cache.
+ 	* gnu/gcj/xlib/natClip.cc (dispose): Check for null before
+ 	deleting.
+ 	* gnu/gcj/xlib/natGC.cc (initStructure): Call XCreateGC only if gc
+ 	is null.
+ 	* gnu/gcj/xlib/Pixmap.java (Pixmap): Use new GC.create.
+ 	* 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-19  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/io/File.java (getAbsolutePath): On Windows, take care
+ 	of paths like "C:", "G:foo\bar", etc.
+ 	(getName): Make it work correctly on Windows.
+ 	(getParent): Make it work correctly on Windows. For UNIX,
+ 	fix bug that causes "/" to be returned as the parent of "/",
+ 	instead of null as returned by Sun's JRE.
+ 
+ 	* java/io/natFileWin32.cc: Change copyright owner to FSF.
+ 
+ 2003-04-19  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/awt/xlib/XGraphicsConfiguration.java (FontMetricsCache): New
+ 	inner class.
+ 	(CACHE_SIZE_PER_DISPLAY): New field
+ 	(fontMetricsCache): New field
+ 	(getXFontMetrics): Use fontMetricsCache to cache fonts. Prefer
+ 	loading ISO10646-1 fonts.
+ 
+ 2003-04-19  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* libjava/gnu/gcj/xlib/natFont.cc (getStringWidth): Support 16-bit
+ 	characters.
+ 	* libjava/gnu/gcj/xlib/natGC.cc (drawString): Support 16-bit
+ 	characters.
+ 
+ 2003-04-16  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* java/lang/ieeefp.h: Handle ARM platforms that have pure-endian
+ 	floating point.
+ 
+ 2003-04-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* configure.host (*-linux*): Don't set slow_pthread_self if primary
+ 	installed libpthread is either linuxthreads with floating stacks or
+ 	NPTL.
+ 
+ 2003-04-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* resolve.cc (_Jv_PrepareClass): Round up class size to multiple
+ 	of alignment.
+ 
+ 2003-04-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (pop64): Removed.
+ 	(verify_instructions_0) <op_pop2>: Inline code.  Don't throw
+ 	exception if top-of-stack is narrow.
+ 	(initialize_stack): Check to ensure that <init> is not static and
+ 	<clinit> is.
+ 
+ 2003-04-07  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>
+ 
+ 	* java/net/URLConnection.java:
+ 	Import classes directly.
+ 	(URLConnection): Merged class documentation with classpath.
+ 	(url): Moved, documentation from classpath added.
+ 	(doInput): Moved, documentation from classpath added.
+ 	(doOutput): Moved, documentation from classpath added.
+ 	(allowUserInteraction): Moved.
+ 	(useCaches): Moved, documentation from classpath added.
+ 	(ifModifiedSince): Moved, documentation from classpath added.
+ 	(connected): Moved, documentation from classpath added.
+ 
+ 2003-04-06  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileInputStream.java
+ 	(skip): Renamed some variables to match classpath, added
+ 	checks from classpath.
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractAction.java
+ 	(AbstractAction): Reformatted.
+ 	(serialVersionUID): New private member variable.
+ 	* javax/swing/plaf/BorderUIResource.java
+ 	(serialVersionUID): New private member variable.
+ 	* javax/swing/plaf/basic/BasicLookAndFeel.java
+ 	(serialVersionUID): New private member variable.
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/sql/Date.java
+ 	(valueOf): Deprecated, reformatted.
+ 	(toString): Deprecated, reformatted.
+ 	* java/sql/Time.java
+ 	(valueOf): Deprecated, reformatted.
+ 	(toString): Deprecated, reformatted.
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/dgc/VMID.java
+ 	(isUnique): Deprecated.
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java
+ 	(separator): Merged documentation from classpath.
+ 	(separatorChar): Merged documentation from classpath.
+ 	(pathSeparator): Merged documentation from classpath.
+ 	(pathSeparatorChar): Merged documentation from classpath.
+ 	(path): Merged documentation from classpath.
+ 	(canRead): Merged documentation from classpath.
+ 	(canWrite): Merged documentation from classpath.
+ 	(createNewFile): Merged documentation from classpath.
+ 	(delete): Merged documentation from classpath.
+ 	(equals): Merged documentation from classpath.
+ 	(exists): Merged documentation from classpath.
+ 	(File): Renamed p to name to match classpath, merged documentation
+ 	from classpath.
+ 	(getAbsolutePath): Merged documentation from classpath.
+ 	(getCanonicalPath): Merged documentation from classpath.
+ 	(getCanonicalFile): Merged documentation from classpath.
+ 	(getName): Merged documentation from classpath.
+ 	(getParent): Merged documentation from classpath.
+ 	(getParentFile): Merged documentation from classpath.
+ 	(getPath): Merged documentation from classpath.
+ 	(hashCode): Merged documentation from classpath.
+ 	(isAbsolute): Merged documentation from classpath.
+ 	(isDirectory): Merged documentation from classpath.
+ 	(isFile): Merged documentation from classpath.
+ 	(isHidden): Merged documentation from classpath.
+ 	(lastModified): Merged documentation from classpath.
+ 	(length): Merged documentation from classpath.
+ 	(list): Merged documentation from classpath.
+ 	(listFiles): Merged documentation from classpath.
+ 	(toString): Merged documentation from classpath.
+ 	(toURL): Merged documentation from classpath.
+ 	(mkdir): Merged documentation from classpath.
+ 	(mkdirs): Merged documentation from classpath.
+ 	(createTempFile): Merged documentation from classpath.
+ 	(setReadOnly): Merged documentation from classpath.
+ 	(listRoots): Merged documentation from classpath.
+ 	(compareTo): Merged documentation from classpath.
+ 	(renameTo): Merged documentation from classpath.
+ 	(setLastModified): Merged documentation from classpath.
+ 	* java/io/PrintStream.java
+ 	(auto_flush): Merged documentation from classpath.
+ 	(PrintStream): Merged documentation from classpath.
+ 	(checkError): Merged documentation from classpath.
+ 	(setError): Merged documentation from classpath.
+ 	(close): Merged documentation from classpath.
+ 	(flush): Merged documentation from classpath.
+ 	(print): Merged documentation from classpath.
+ 	(println):  Merged documentation from classpath.
+ 	(write): Renamed count to len to match classpath,
+ 	merged documentation from classpath.
+ 	* java/io/RandomAccessFile.java
+ 	(readShort): Merged documentation from classpath.
+ 	(readUnsignedByte): Merged documentation from classpath.
+ 	(readUnsignedShort): Merged documentation from classpath.
+ 	(readUTF): Merged documentation from classpath.
+ 	(seek): Reformatted, merged documentation from classpath.
+ 	(skipBytes): Renamed some variables to match classpath, reformatted,
+ 	merged documentation from classpath.
+ 	(write): Merged documentation from classpath.
+ 	(writeBoolean): Merged documentation from classpath.
+ 	(writeByte): Merged documentation from classpath.
+ 	(writeShort): Merged documentation from classpath.
+ 	(writeChar): Merged documentation from classpath.
+ 	(writeInt): Merged documentation from classpath.
+ 	(writeLong): Merged documentation from classpath.
+ 	(writeFloat): Merged documentation from classpath.
+ 	(writeDouble): Merged documentation from classpath.
+ 	(writeBytes): Merged documentation from classpath.
+ 	(writeChars): Merged documentation from classpath.
+ 	(writeUTF): Reformatted.
+ 	(getChannel): Reformatted.
+ 
+ 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/rmi/server/LoaderHandler.java
+ 	(loadClass): Deprecated.
+ 	(getSecurityContext): Deprecated.
+ 	* java/rmi/server/LogStream.java
+ 	(getDefaultStream): Deprecated.
+ 	(setDefaultStream): Deprecated.
+ 	(getOutputStream): Deprecated.
+ 	(setOutputStream): Deprecated.
+ 	(write): Deprecated.
+ 	(toString): Deprecated.
+ 	(parseLevel): Deprecated.
+ 	* java/rmi/server/Operation.java
+ 	(Operation): Deprecated.
+ 	(getOperation): Deprecated.
+ 	(toString): Deprecated.
+ 	* java/rmi/server/RemoteCall.java
+ 	(getOutputStream): Deprecated.
+ 	(releaseOutputStream): Deprecated.
+ 	(getInputStream): Deprecated.
+ 	(releaseInputStream): Deprecated.
+ 	(getResultStream): Deprecated.
+ 	(executeCall): Deprecated.
+ 	(done): Deprecated.
+ 	* java/rmi/server/RemoteRef.java
+ 	(invoke): Deprecated.
+ 	(newCall): Deprecated.
+ 	(done): Deprecated.
+ 	* java/rmi/server/RemoteStub.java
+ 	(setRef): Deprecated.
+ 	* java/rmi/server/Skeleton.java:
+ 	No need to import java.lang.Exception explicitly.
+ 	(dispatch): Deprecated.
+ 	(getOperations): Deprecated.
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/dgc/VMID.java,
+ 	java/rmi/registry/RegistryHandler.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:
+ 	Reformatted.
+ 
+ 2003-03-31  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/AbstractCellEditor.java,
+ 	javax/swing/AbstractListModel.java,
+ 	javax/swing/ActionMap.java,
+ 	javax/swing/BorderFactory.java,
+ 	javax/swing/ButtonGroup.java,
+ 	javax/swing/DefaultBoundedRangeModel.java,
+ 	javax/swing/DefaultButtonModel.java,
+ 	javax/swing/DefaultCellEditor.java,
+ 	javax/swing/DefaultComboBoxModel.java,
+ 	javax/swing/DefaultDesktopManager.java,
+ 	javax/swing/DefaultListCellRenderer.java,
+ 	javax/swing/DefaultSingleSelectionModel.java,
+ 	javax/swing/InputMap.java,
+ 	javax/swing/JComponent.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/UIManager.java,
+ 	javax/swing/ViewportLayout.java,
+ 	javax/swing/border/AbstractBorder.java,
+ 	javax/swing/colorchooser/DefaultColorSelectionModel.java,
+ 	javax/swing/event/EventListenerList.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/StyledEditorKit.java,
+ 	javax/swing/tree/DefaultMutableTreeNode.java,
+ 	javax/swing/tree/DefaultTreeModel.java,
+ 	javax/swing/tree/DefaultTreeSelectionModel.java,
+ 	javax/swing/tree/TreePath.java,
+ 	javax/swing/undo/AbstractUndoableEdit.java,
+ 	javax/swing/undo/StateEdit.java,
+ 	javax/swing/undo/StateEditable.java,
+ 	javax/swing/undo/UndoableEditSupport.java:
+ 	Merges from classpath.
+ 
+ 2003-03-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/String.java (data, boffset, count): Documented.
+ 	(String(byte[],String)): Reformatted.
+ 	(String(byte[])): Likewise.
+ 	(lastIndexOf(int)): Likewise.
+ 	(lastIndexOf(String)): Likewise.
+ 	(substring(int)): Renamed argument to match Classpath.
+ 	(String(StringBuffer)): Don't share buffer if it is nearly empty.
+ 
+ 	* java/lang/String.java: Miscellaneous minor formatting changes
+ 	to match Classpath more closely.
+ 
+ 2003-03-29  Eric Blake  <ebb9@email.byu.edu>
+ 	    Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natString.cc (hashCode): Use cachedHashCode.
+ 	(init()): Removed.
+ 	(charAt): Put index in exception.
+ 	(contentEquals): New method.
+ 	Include StringBuffer.h.
+ 	* java/lang/String.java (cachedHashCode): New field.
+ 	(String()): Follow classpath implementation.
+ 	(init()): Removed.
+ 	(contentEquals): Declare.
+ 	(subSequence): Don't declare IndexOutIfBoundsException in throws
+ 	clause.
+ 	(matches, replaceFirst, replaceAll, split): New methods from
+ 	Classpath.
+ 
+ 2003-03-29  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/String.java: Reordered to follow Classpath; merged in
+ 	javadoc.
+ 
+ 	* java/text/MessageFormat.java: Removed some whitespace.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added new files.
+ 	* gnu/javax/rmi/PortableServer.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,
+ 	javax/rmi/BAD_OPERATION.java, javax/rmi/ORB.java,
+ 	javax/rmi/PortableRemoteObject.java,
+ 	javax/rmi/CORBA/ClassDesc.java, javax/rmi/CORBA/ObjectImpl.java,
+ 	javax/rmi/CORBA/PortableRemoteObjectDelegate.java,
+ 	javax/rmi/CORBA/Stub.java, javax/rmi/CORBA/StubDelegate.java,
+ 	javax/rmi/CORBA/SystemException.java, javax/rmi/CORBA/Tie.java,
+ 	javax/rmi/CORBA/Util.java, javax/rmi/CORBA/UtilDelegate.java,
+ 	javax/rmi/CORBA/ValueHandler.java: New files from Classpath.
+ 
+ 	* java/lang/natClass.cc (newInstance): Put method name in
+ 	exception.
+ 	(getConstructor): Likewise.
+ 	(getDeclaredConstructor): Likewise.
+ 	(getPrivateMethod): Likewise.
+ 
+ 2003-03-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/reflect/Proxy.java: New version from Classpath.
+ 	* java/lang/Package.java: New version from Classpath.
+ 
+ 2003-03-29  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* configure.in (HAVE_BACKTRACE) [s390*-*-linux*]: Define.
+ 	* configure: Regenerate.
+ 
+ 2003-03-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/File.java:
+ 	Import needed classes instead of whole packages, merged class
+ 	documentation with classpath, moved constants and variables to top of
+ 	class.
+ 	* java/io/PrintStream.java:
+ 	Merged class documentation with classpath, moved constants and
+ 	variables to top of class.
+ 	* java/io/RandomAccessFile.java
+ 	(RandomAccessFile): Merged with classpath.
+ 	(read): Merged with classpath).
+ 	(read*): Reformatted.
+ 
+ 2003-03-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileDescriptor.java
+ 	(finalize): Throws Throwable, not IOException.
+ 	* java/io/ObjectOutputStream.java
+ 	(PutField.put): Doesnt throws anything.
+ 
+ 2003Â­03-28  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileOutputStream.java:
+ 	Merged class documentation and authors with classpath.
+ 	(FileOutputStream): Partly merged with classpath.
+ 	(write): Merged with classpath.
+ 	(getChannel): Make it synchronized instead of explicit block in this
+ 	method.
+ 	* java/io/RandomAccessFile.java:
+ 	Merged class documentation and authors with classpath.
+ 
+ 2003-03-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natRuntime.cc (insertSystemProperties): Set
+ 	gnu.classpath.home.url.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am: Define LIBDIR.
+ 
+ 2003-03-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileInputStream.java
+ 	(read): Renamed b to buf and off to offset.
+ 	* java/io/FileOutputStream.java
+ 	(ch): Documentation added.
+ 	(FileOutputStream): Documentation added.
+ 	(getFD): Documentation added.
+ 	(write): Documentation added.
+ 	(close): Documentation added.
+ 	(getChannel): Documentation added.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataOutputStream.java
+ 	(write): Merged from classpath.
+ 	* java/io/File.java:
+ 	Merged copyrigth with classpath.
+ 	* java/io/FileInputStream.java
+ 	(getChannel): Made it synchronized instead of using a synchronized
+ 	block.
+ 	* java/io/FileOutputStream.java: Reformatted.
+ 	* java/io/InputStreamReader.java
+ 	(InputStreamReader): Renamed enc to encoding_name.
+ 	(close): Merged documentation from classpath.
+ 	(getEncoding): Merged documentation from classpath.
+ 	(ready): Merged documentation from classpath.
+ 	(read): Merged documentation from classpath.
+ 	* java/io/LineNumberReader.java
+ 	(lineNumber): Made it private.
+ 	(LineNumberReader): Use Constant instead of a direct value.
+ 	* java/io/OutputStreamWriter.java
+ 	(OutputStreamWriter): Renamed enc to encoding_scheme, merged
+ 	documentation from classpath.
+ 	(close): Merged documentation from classpath.
+ 	(flush): Merged documentation from classpath.
+ 	(write): Merged documentation from classpath.
+ 	* java/io/PrintStream.java: Reformatted.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/swing/text/ComponentView.java
+ 	(getComponent): Must be final.
+ 	* javax/swing/tree/DefaultTreeCellRenderer.java:
+ 	Reformatted.
+ 	* javax/swing/undo/StateEditable.java:
+ 	Reformatted.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/activation/ActivationInstantiator.java:
+ 	Reformatted.
+ 	* java/rmi/activation/Activator.java:
+ 	Reformatted.
+ 	* java/rmi/registry/RegistryHandler.java:
+ 	Remerged from classpath.
+ 
+ 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-24  Michael Koch  <koqnueror@gmx.de>
+ 
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java
+ 	(getFirstComponent): Implemented.
+ 	(getLastComponent): Implemented.
+ 	(getDefaultComponent): Implemented.
+ 	(setImplicitDownCycleTraversal): Fixed implementation.
+ 	* java/awt/Robot.java
+ 	(Robot): Added documentation.
+ 	* java/awt/Toolkit.java
+ 	(getFontList): Deprecated.
+ 	(getFontMetrics): Deprecated.
+ 	(getPrintJob): Added documentation.
+ 	(getSystemSelection): Added documentation.
+ 	(getLockingKeyState): Added documentation.
+ 	(setLockingKeyState): Added documentation.
+ 	(createCustomCursor): Added documentation.
+ 	(getBestCursorSize): Added documentation.
+ 	(getMaximumCursorColors): Added documentation.
+ 	(isFrameStateSupported): Added documentation.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/RandomAccessFile.java:
+ 	More little merges with classpath. No code changes.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/natInetAddressNoNet.cc:
+ 	Include stddef.h.
+ 	* java/net/natPlainDatagramSocketImplNoNet.cc:
+ 	Fixed inlcude of java/net/DatagramPacket.h.
+ 	* java/net/natPlainSocketImplNoNet.cc:
+ 	Include some missing classes.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/dnd/DropTarget.java
+ 	(DropTargetAutoScroller): According to the online documentation, this
+ 	is protected, but in reality it is public.
+ 	* java/awt/dnd/DropTargetContext.java
+ 	(TransferableProxy): According to the online documentation, this
+         is protected, but in reality it is public.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataInputStream.java
+ 	(): Wrapped documentation line.
+ 	(): Fixed @return tag.
+ 	* java/io/DataOutputStream.java
+ 	(written): Moved to top of class.
+ 	(all methods): Merged documentation from classpath.
+ 	* java/io/File.java:
+ 	Merged copyright year with classpath.
+ 	* java/io/FileInputStream.java
+ 	(all methods): Merged documentation from classpath.
+ 	* java/io/LineNumberReader.java
+ 	(getLineNumber): Fixed @return tag.
+ 	* java/io/ObjectInputStream.java.
+ 	Reformatted.
+ 	* java/io/ObjectOutputStream.java:
+ 	Reformatted, fixed some @see tags.
+ 	* java/io/OutputStreamWriter.java:
+ 	Deleted empty line.
+ 	* java/io/Writer.java:
+ 	Reformatted.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Frame.java
+ 	(DEFAULT_CURSOR): Fixed @deprecated tag.
+ 	(setCursor): Fixed @deprecated tag.
+ 
+ 2003-03-24  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/beancontext/BeanContextEvent.java:
+ 	Reformated.
+ 
+ 2003-03-23  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* java/lang/natStringBuffer.cc (regionMatches): New function.
+ 	* java/lang/String.java (count): Now package-private.
+ 	* java/lang/StringBuffer.java: Merged with Classpath.
+ 
+ 2003-03-23  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedOutputStream.java:
+ 	Reformated.
+ 	* java/io/BufferedReader.java:
+ 	Reformated.
+ 	* java/io/ByteArrayOutputStream.java
+ 	(size): Fixed @see tag.
+ 	* java/io/CharArrayWriter.java
+ 	(size): Fixed @see tag.
+ 	* java/io/DataInput.java:
+ 	Reformated.
+ 	* java/io/DataOutput.java:
+ 	Reformated.
+ 	* java/io/DataOutputStream.java:
+ 	Merged copyright years with classpath.
+ 	* java/io/Externalizable.java:
+ 	Reformated.
+ 	* java/io/FileFilter.java:
+ 	Reformated.
+ 	* java/io/FileInputStream.java:
+ 	Merged copyright years with classpath.
+ 	* java/io/FileOutputStream.java:
+ 	Merged copyright years with classpath.
+ 	* java/io/FilePermission.java
+ 	(FilePermission): Replaced @XXX with FIXME:.
+ 	* java/io/FileWriter.java:
+ 	Reformated.
+ 	* java/io/FilenameFilter.java:
+ 	Reformated.
+ 	* java/io/FilterInputStream.java:
+ 	Reformated.
+ 	* java/io/FilterOutputStream.java:
+ 	Reformated.
+ 	* java/io/FilterReader.java:
+ 	Reformated.
+ 	* java/io/FilterWriter.java:
+ 	Reformated.
+ 	* java/io/LineNumberInputStream.java
+ 	(LineNumberInputStream): Replaced @code with HTML tags to make javadoc
+ 	happy.
+ 	(getLineNumber): Fixed @return tag.
+ 	* java/io/ObjectInput.java:
+ 	Reformated.
+ 	* java/io/ObjectOutput.java:
+ 	Reformated.
+ 	* java/io/ObjectStreamClass.java:
+ 	Reformated.
+ 	* java/io/PrintStream.java:
+ 	Merged copyright years with classpath.
+ 	* java/io/PushbackReader.java
+ 	(PushbackReader): Replaced @code with @param.
+ 	* java/io/SerializablePermission.java:
+ 	Reformated.
+ 	* java/io/StreamTokenizer.java
+ 	(resetSyntax): Fixed @see tag.
+ 
+ 2003-03-22  Richard Henderson  <rth@redhat.com>
+ 
+ 	* sysdep/ia64/locks.h: Include ia64intrin.h.
+ 	(compare_and_swap): Use __sync_bool_compare_and_swap.
+ 	(compare_and_swap_release): Expose ar.ccv assignment.
+ 
+ 2003-03-22  Andreas Tobler <a.tobler@schweiz.ch>
+ 
+ 	* include/posix.h: Add suffix for darwin dynamic libraries.
+ 
+ 2003-03-21  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-21  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-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/LineNumberReader.java
+ 	(LineNumberReader): Merged documentation with classpath.
+ 	(getLineNumber): Likewise.
+ 	(setLineNumber): Likewise.
+ 	(mark): Likewise.
+ 	(reset): Likewise.
+ 	(read): Likewise.
+ 	(readLine): Likewise.
+ 	(skip): Likewise.
+ 
+ 2003-03-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/rmi/RMISecurityManager.java
+ 	(checkAccept): Removed.
+ 	(checkAccess): Likewise.
+ 	(checkAccess): Likewise.
+ 	(checkAwtEventQueueAccess): Likewise.
+ 	(checkConnect): Likewise.
+ 	(checkCreateClassLoader): Likewise.
+ 	(checkDelete): Likewise.
+ 	(checkExec): Likewise.
+ 	(checkExit): Likewise.
+ 	(checkLink): Likewise.
+ 	(checkListen): Likewise.
+ 	(checkMemberAccess): Likewise.
+ 	(checkMulticast): Likewise.
+ 	(checkPackageAccess): Likewise.
+ 	(checkPackageDefinition): Likewise.
+ 	(checkPermission): Likewise.
+ 	(checkPrintJobAccess): Likewise.
+ 	(checkPropertiesAccess): Likewise.
+ 	(checkPropertyAccess): Likewise.
+ 	(checkRead): Likewise.
+ 	(checkSecurityAccess): Likewise.
+ 	(checkSetFactory): Likewise.
+ 	(checkSystemClipboardAccess): Likewise.
+ 	(checkTopLevelWindow): Likewise.
+ 	(checkWrite): Likewise.
+ 
+ 2003-03-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(address): Removed.
+ 	(map_address): New member variable.
+ 	(length): Make it package private.
+ 	(fd): Make it package private.
+ 	(buf): Make it package private.
+ 	(file_obj): Make it package private.
+ 	(FileChannelImpl): New constructor.
+ 	(nio_mmap_file): Use RawData instead of long.
+ 	(nio_munmap_file): Use RawData instead of long.
+ 	(nio_msync): Use RawData instead of long.
+ 	(implCloseChannel): New implementation using map_address.
+ 	(read): Reformated.
+ 	(map): Implemented.
+ 	(create_direct_mapped_buffer): Implemented, use RawData, throws
+ 	IOException.
+ 	(force): Use map_address instead of address.
+ 	* gnu/java/nio/MappedByteFileBuffer.java
+ 	(address): Removed.
+ 	(map_address): New member variable.
+ 	(MappedByteFileBuffer): Use map_address instead of address, reformated.
+ 	(several methods): Use map_address instead of address, replaced long
+ 	with RawData where appropriate.
+ 	* gnu/java/nio/natFileChannelImpl.cc
+ 	(nio_mmap_file): Replaced long with RawData.
+ 	(nio_munmap_file): Replaced long with RawData.
+ 	(nio_msync): Replaced long with RawData.
+ 	* gnu/java/nio/natMappedByteFileBuffer.cc
+ 	(several methods): Replaced long with RawData where appropriate.
+ 
+ 2003-03-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/InetAddress.java,
+ 	java/net/JarURLConnection.java,
+ 	java/net/PlainDatagramSocketImpl.java,
+ 	java/net/PlainSocketImpl.java,
+ 	java/net/URLConnection.java:
+ 	Merged copyright statements with classpath for easier merging.
+ 
+ 2003-03-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileInputStream.java
+ 	(getChannel): New implementation.
+ 	* java/io/FileOutputStream.java
+ 	(ch): New member variable.
+ 	(getChannel): Implemented.
+ 	* java/io/RandomAccessFile.java
+ 	(RandomAccessFile): Throws FileNotFoundException instead of
+ 	IOException.
+ 	(getChannel): New method.
+ 	(ch): New member variable.
+ 
+ 2003-03-20  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/DataOutputStream.java,
+ 	java/io/File.java,
+ 	java/io/FileInputStream.java,
+ 	java/io/FileOutputStream.java,
+ 	java/io/InputStreamReader.java,
+ 	java/io/LineNumberReader.java,
+ 	java/io/OutputStreamWriter.java,
+ 	java/io/PrintStream.java,
+ 	java/io/RandomAccessFile.java:
+ 	Merged copyright statements with classpath for easier merging.
+ 
+ 2003-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Process.java:
+ 	Merged from classpath.
+ 
+ 2003-03-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/FileOutputStream.java
+ 	(FileOutputStream): New constructor, merged from classpath.
+ 	* java/io/FileWriter.java
+ 	(FileWriter): New constructor, merged from classpath.
+ 
+ 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.
+ 
+ 2003-03-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedOutputStream.java,
+ 	java/io/DataInput.java,
+ 	java/io/DataInputStream.java,
+ 	java/io/DataOutput.java,
+ 	java/io/Externalizable.java:
+ 	More merges from classpath.
+ 
+ 2003-03-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in: Fixed links to platform dependant java.net files.
+ 	* configure: Regenerated.
+ 	* java/net/natInetAddress.cc,
+ 	java/net/natNetworkInterface.cc,
+ 	java/net/natPlainDatagramSocketImpl.cc,
+ 	java/net/natPlainSocketImpl.cc:
+ 	Removed.
+ 
+ 2003-03-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in: Create links to architecture dependent files,
+ 	introduced PLATFORMNET variable (set to NoNet for newlib usage).
+ 	* configure: Regenerated.
+ 	* java/net/natInetAddressNoNet.cc,
+ 	java/net/natInetAddressPosix.cc,
+ 	java/net/natInetAddressWin32.cc,
+ 	java/net/natNetworkInterfaceNoNet.cc,
+ 	java/net/natNetworkInterfacePosix.cc,
+ 	java/net/natNetworkInterfaceWin32.cc,
+ 	java/net/natPlainDatagramSocketImplNoNet.cc,
+ 	java/net/natPlainDatagramSocketImplPosix.cc,
+ 	java/net/natPlainDatagramSocketImplWin32.cc,
+ 	java/net/natPlainSocketImplNoNet.cc,
+ 	java/net/natPlainSocketImplPosix.cc,
+ 	java/net/natPlainSocketImplWin32.cc: New files.
+ 
+ 2003-03-18  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/io/BufferedReader.java,
+ 	java/io/BufferedWriter.java,
+ 	java/io/ByteArrayOutputStream.java,
+ 	java/io/FileFilter.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/ObjectInput.java,
+ 	java/io/ObjectInputValidation.java,
+ 	java/io/ObjectOutput.java,
+ 	java/io/ObjectStreamField.java,
+ 	java/io/PipedInputStream.java,
+ 	java/io/PipedReader.java,
+ 	java/io/PrintWriter.java,
+ 	java/io/PushbackReader.java,
+ 	java/io/Reader.java,
+ 	java/io/SerializablePermission.java,
+ 	java/io/StringReader.java,
+ 	java/io/Writer.java:
+ 	Merged from classpath.
+ 
+ 2003-03-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/ScrollPaneAdjustable.java:
+ 	Compile fixes.
+ 	
+ 2003-03-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(connect): Fixed comment.
+ 	* java/nio/ByteBuffer.java
+ 	(hasArray): Fixed comment.
+ 
+ 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): Extends Object, 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-17  Michael Koch
+ 
+ 	* javax/print/attribute/Attribute.java,
+ 	javax/print/attribute/AttributeSet.java,
+ 	javax/print/attribute/PrintRequestAttributeSet.java:
+ 	New files.
+ 	* Makefile.am
+ 	(javax_source_files): Added new files:
+ 	javax/print/attribute/Attribute.java
+ 	javax/print/attribute/AttributeSet.java
+ 	javax/print/attribute/PrintRequestAttributeSet.java
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-03-17  Michael Koch
+ 
+ 	* javax/print/attribute/Attribute.java,
+ 	javax/print/attribute/AttributeSet.java,
+ 	javax/print/attribute/PrintRequestAttributeSet.java:
+ 	New files.
+ 	* Makefile.am
+ 	(awt_java_source_files): Added new files:
+ 	javax/print/attribute/Attribute.java
+ 	javax/print/attribute/AttributeSet.java
+ 	javax/print/attribute/PrintRequestAttributeSet.java
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-03-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* resolve.cc (ncode): Use _Jv_platform_ffi_abi.
+ 	Include platform.h.
+ 	* java/lang/natRuntime.cc (insertSystemProperties): Use
+ 	_Jv_platform_path_separator.
+ 	(nativeGetLibname): Use _Jv_platform_file_separator.
+ 	(_load): Use _Jv_platform_onload_names.
+ 	(onload_names): New global.
+ 	* include/win32.h (_Jv_platform_file_separator): New define.
+ 	(_Jv_platform_path_separator): Likewise.
+ 	(_Jv_platform_onload_names): Likewise.
+ 	(_Jv_platform_ffi_abi): Likewise.
+ 	* include/posix.h (_Jv_platform_file_separator): New define.
+ 	(_Jv_platform_path_separator): Likewise.
+ 	(_Jv_platform_onload_names): Likewise.
+ 	(_Jv_platform_ffi_abi): Likewise.
+ 
+ 2003-03-14  Hans Boehm  <Hans.Boehm@hp.com>
+ 
+ 	* java/lang/natObject.cc (JV_SYNC_HASH): replace signed % by &.
+ 
+ 2003-02-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-12  Andreas Schwab  <schwab@suse.de>
+ 
+ 	* configure.in: Avoid trailing /. in toolexeclibdir.
+ 	* configure: Rebuilt.
+ 
+ 2003-03-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java
+ 	(putInt): Use limit() instead of limit.
+ 	* gnu/java/nio/CharBufferImpl.java
+ 	(slice): Fixed implementation.
+ 	(subSequence): Better bounds checking.
+ 	* gnu/java/nio/MappedByteFileBuffer.java:
+ 	Import all needed classes directly.
+ 	* java/nio/ByteBuffer.java
+ 	(hashCode): New dummy method.
+ 	* java/nio/CharBuffer.java
+ 	(array_offset): New member variable.
+ 	(hasArray): Fixed documentation.
+ 	(arrayOffset): Return array_offset.
+ 
+ 2003-03-10  2003-02-27  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* include/jvm.h: removed declaration of _Jv_ThisExecutable()
+ 	setter; made return value of getter const char* instead of char*
+ 	* prims.cc: removed all references to _Jv_ThisExecutable().
+ 	These are in the platform-specific sections now.
+ 	* posix.cc: define platform-specific _Jv_ThisExecutable().
+ 	Handle DISABLE_MAIN_ARGS and HAVE_PROC_SELF_EXE cases
+ 	* win32.cc: define platform-specific _Jv_ThisExecutable()
+ 	using GetModuleFilename()
+ 	* java/lang/natRuntime.cc: set gnu.gcj.progname property
+ 	to argv[0] instead of _Jv_ThisExecutable()
+ 
+ 2003-03-10  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* gnu/gcj/runtime/NameFinder.java (usingAddr2name): New flag
+ 	that is set if we are using addr2name.awk instead of addr2line.
+ 	(NameFinder): Set usingAddr2name if using addr2name.awk.
+ 	(getExternalLabel): New native method to convert a method 
+ 	name to an external label.
+ 	(lookup): Convert name given by addr2line to an external label
+ 	before demangling.
+ 
+ 	* gnu/gcj/runtime/natNameFinder.cc (LABEL_PREFIX): New string
+ 	constant representing the prefix attached to method names to
+ 	convert them to an external label.
+ 	(gnu::gcj::runtime::NameFinder::getExternalLabel): Define 
+ 	using LABEL_PREFIX.
+ 
+ 2003-03-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (GCJ_WITH_FLAGS): Added -Wno-deprecated.
+ 	(JC1FLAGS): Removed -Wno-deprecated.
+ 
+ 2003-03-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteOrder.java
+ 	(nativeOrder): Working implementation, added documentation.
+ 	(toString): Added documentation.
+ 
+ 2003-03-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java,
+ 	java/net/MulticastSocket.java,
+ 	java/net/Socket.java,
+ 	java/net/URL.java,
+ 	java/net/URLConnection.java:
+ 	Fixed some documentation tags to make javadoc and friends happy.
+ 
+ 2003-03-10  Michael Koch  <koqnueror@gmx.de>
+ 
+ 	* java/beans/beancontext/BeanContextServicesSupport.java,
+ 	java/beans/beancontext/BeanContextSupport.java: New files.
+ 	* Makefile.am
+ 	(awt_source_files): Added new files.
+ 	* Makefile.in: Regenerated.
+ 
+ 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  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/9934:
+ 	* java/io/natFileDescriptorPosix.cc (available): Fixed arguments
+ 	to lseek.  Return 0 if we can't compute the value.
+ 
+ 2003-03-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/NetworkInterface.java: Merged with classpath.
+ 
+ 2003-03-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (handle_jsr_insn): Don't fail if `jsr' appears at end
+ 	of bytecode.
+ 	(handle_ret_insn): Fail if returning to jsr that appears at end of
+ 	bytecode.
+ 
+ 2003-03-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.am
+ 	(ordinary_java_source_files):
+ 	Added gnu/java/nio/MappedByteFileBuffer.java.
+ 	(nat_source_files):
+ 	Added gnu/java/nio/natMappedByteFileBuffer.cc.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-03-03  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(connect): Merged comment from classpath.
+ 	(receive): Merged documentation from classpath.
+ 	* java/net/Socket.java
+ 	(setSoTimeout): Clarified documentation.
+ 	* java/net/URL.java
+ 	(getPath): Merged from classpath.
+ 	(getUserInfo): Merged from classpath.
+ 	(getQuery): Merged from classpath.
+ 	* java/net/URLStreamHandler.java
+ 	(toExternalForm): Merged from classpath.
+ 
+ 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/net/NetPermission.java:
+ 	Merged copyright with classpath.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/lang/Package.java:
+ 	Remerged from classpath.
+ 
+ 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>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(fd): Type FileDescriptor instead of int.
+ 	(lengthInternal): Removed.
+ 	(FileChannelImpl): Fixed arguments, check type of file object.
+ 	(size): Made it native.
+ 	(implPosition): New native method.
+ 	(implTruncate): New native method.
+ 	(position): Implemented.
+ 	(truncate): Implemented.
+ 	(nio_mmap_file): Changed arguments.
+ 	(nio_munmap_file): Changed arguments.
+ 	(nio_msync): Changed arguments.
+ 	* gnu/java/nio/natFileChannelImpl.cc
+ 	(lengthInternal): Removed.
+ 	(size): New method.
+ 	(implPosition): New method.
+ 	(implTruncate): New method.
+ 	(nio_mmap_file): Changed arguments.
+ 	(nio_munmap_file): Changed arguments.
+ 	(nio_msync): Changed arguments.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/dnd/DropTargetContext.java:
+ 	Compile fix: Forgot to commit import.
+ 	
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Component.java,
+ 	java/awt/ScrollPane.java:
+ 	Fixed typos.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/dnd/DnDEventMulticaster.java: New file.
+ 	* java/awt/dnd/DragSource.java
+ 	(flavorMap): New member variable.
+ 	(dragSourceListener): New member variable.
+ 	(dragSourceMotionListener): New member variable.
+ 	(getFlavorMap): Implemented.
+ 	(createDragGestureRecognizer): Implemented.
+ 	(addDragSourceListener): Implemented.
+ 	(removeDragSourceListener): Implemented.
+ 	(getDragSourceListeners): Implemented.
+ 	(addDragSourceMotionListener): Implemented.
+ 	(removeDragSourceMotionListener): Implemented.
+ 	(getDragSourceMotionListeners): Implemented.
+ 	(getListeners): Implemented.
+ 	* java/awt/dnd/DragSourceContext.java
+ 	(peer): New member variable.
+ 	(cursor): New member variable.
+ 	(transferable): New member variable.
+ 	(trigger): New member variable.
+ 	(dragSourceListener): New member variable.
+ 	(image): New member variable.
+ 	(offset): New member variable.
+ 	(DragSourceContext): Implemented.
+ 	(getDragSource): Implemented.
+ 	(getComponent): Implemented.
+ 	(getTrigger): Implemented.
+ 	(getSourceActions): Implemented.
+ 	(setCursor): Implemented.
+ 	(getCursor): Implemented.
+ 	(addDragSourceListener): Implemented.
+ 	(removeDragSourceListener): Implemented.
+ 	(getTransferable): Implemented.
+ 	* java/awt/dnd/DropTarget.java
+ 	(DropTargetAutoScroller.component): New member variable.
+ 	(DropTargetAutoScroller.point): New member variable.
+ 	(DropTargetAutoScroller.DropTargetAutoScroller): Implemented.
+ 	(DropTargetAutoScroller.updateLocation): Implemented.
+ 	(active): Renamed from isActive, defaults to true now.
+ 	(component): New member variable.
+ 	(flavorMap): New member variable.
+ 	(actions): New member variable.
+ 	(dropTargetContext): New member variable.
+ 	(dropTargetListener): New member variable.
+ 	(DropTarget): Implemented.
+ 	(getComponent): Implemented.
+ 	(setComponent): Implemented.
+ 	(setDefaultActions): Implemented.
+ 	(getDefaultActions): Implemented.
+ 	(setActive): Use active instead of isActive.
+ 	(isActive): Use active instead of isActive.
+ 	(addDropTargetListener): Implemented.
+ 	(removeDropTargetListener): Implemented.
+ 	(getFlavorMap): Implemented.
+ 	(setFlavorMap): Implemented.
+ 	(getDropTargetContext): Implemented.
+ 	(createDropTargetContext): Implemented.
+ 	(createDropTargetAutoScroller): Implemented.
+ 	* java/awt/dnd/DropTargetContext.java
+ 	(TransferableProxy.getTransferDataFlavors): Implemented.
+ 	(TransferableProxy.isDataFlavorSupported): Implemented.
+ 	(TransferableProxy.getTransferData): Implemented.
+ 	(dropTarget):  New member variable.
+ 	(dtcp): New member variable.
+ 	(DropTargetContext): New package private constructor.
+ 	(getDropTarget): Implemented.
+ 	(getComponent): Implemented.
+ 	(addNotify): Implemented.
+ 	(removeNotify): Implemented.
+ 	(getCurrentDataFlavorsAsList): Implemented.
+ 	(isDataFlavorSupported): Implemented.
+ 	* java/awt/dnd/MouseDragGestureRecognizer.java
+ 	(registerListeners): Implemented.
+ 	(unregisterListeners): Implemented.
+ 	* Makefile.am
+ 	(awt_java_source_files): Added java/awt/dnd/DnDEventMulticaster.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/Component.java
+ 	(eventTypeEnabled): New method.
+ 	(dispatchEventImpl): Moved checks for event to eventTypeEnabled.
+ 	* java/awt/Container.java
+ 	(changeSupport): New member variable.
+ 	(addPropertyChangeListener): New methods.
+ 	* java/awt/ContainerOrderFocusTraversalPolicy.java
+ 	(ContainerOrderFocusTraversalPolicy): Added comment.
+ 	(getComponentAfter): Throw exception, documentation added.
+ 	(getComponentBefore): Throw exception, documentation added.
+ 	(getFirstComponent): Throw exception, documentation added.
+ 	(getLastComponent): Throw exception, documentation added.
+ 	(getDefaultComponent): Throw exception, documentation added.
+ 	* java/awt/EventQueue.java: Reindented.
+ 	* java/awt/FocusTraversalPolicy.java:
+ 	(FocusTraversalPolicy): Added comment.
+ 	(getComponentAfter): Documentation added.
+ 	(getComponentBefore): Documentation added.
+ 	(getFirstComponent): Documentation added.
+ 	(getLastComponent): Documentation added.
+ 	(getDefaultComponent): Documentation added.
+ 	(getInitialComponent): Documentation added.
+ 	* java/awt/ScrollPane.java
+ 	(wheelScrollingEnabled): New member variable.
+ 	(ScrollPane): Initialize wheelScollingEnabled.
+ 	(eventTypeEnabled): New method.
+ 	(isWheelScrollingEnabled): New method.
+ 	(setWheelScrollingEnabled): New method.
+ 
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(closed): New member variable.
+ 	(close): Use closed variable.
+ 	(getInetAddress): No need to call isConnected().
+ 	(getPort): No need to call isConnected().
+ 	(disconnect): Reset remoteAddress and remotePort, fixed typo.
+ 	(isClosed): Reimplemented.
+ 	
+ 2003-03-02  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* configure.in: Added check for memory mapping of files.
+ 	* configure: Regenerated.
+ 	* config.h.in: Regenerated.
+ 
+ 2003-03-01  Jason Thorpe  <thorpej@wasabisystems.com>
+ 
+ 	* posix-threads.cc: Include <unistd.h> if HAVE_UNISTD_H is defined.
+ 	(_Jv_ThreadSetPriority): Test for _POSIX_THREAD_PRIORITY_SCHEDULING.
+ 
+ 2003-03-01  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/io/File.java (normalizePath): Remove trailing separator
+ 	on Windows only if path is not of the form "x:\".
+ 
+ 	* java/io/natFileWin32.cc (WIN32_EPOCH_MILLIS): New constant.
+ 	(java::io::File::attr): Change formatting a bit and use
+ 	WIN32_EPOCH_MILLIS instead of magic numbers.
+ 	(java::io::File::isAbsolute): Path must have at least 3 
+ 	characters for a UNC network path.
+ 	(java::io::File::init_native): Define.
+ 	(java::io::File::performCreate): Likewise.
+ 	(java::io::File::performSetReadOnly): Likewise.
+ 	(java::io::File::performSetLastModified): Likewise.
+ 	(java::io::File::performListRoots): Likewise.
+ 
+ 2003-03-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natObject.cc: Don't include assert.h.
+ 	(heavy_lock_obj_finalization_proc): Use JvAssert.
+ 	(remove_all_heavy): Likewise.
+ 	(_Jv_MonitorEnter): Likewise.
+ 	(_Jv_MonitorExit): Likewise.
+ 	(wait): Likewise.
+ 
+ 2003-03-01  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/io/File (getAbsolutePath): Prefix drive specifier on
+ 	Windows for paths starting with a '\'.
+ 	(toURL): Make URL more consistent with what Sun's JDK returns.
+ 
+ 	* java/io/natFileWin32.cc (java::io::File::isAbsolute): Return
+ 	true only if the path is a UNC network path or it starts with a
+ 	drive specifier.
+ 
+ 	* java/net/URLStreamHandler.java (parseURL): Correct minor typo.
+ 	Be prepared to handle either '/' or '\\' in the file path for
+ 	Windows if using the "file" protocol.
+ 	Canonicalise the file path if using a relative path in the given
+ 	context and the "file" protocol.
+ 
+ 2003-03-01  Mohan Embar  <gnustuff@thisiscool.com>
+ 
+ 	* java/lang/natWin32Process.cc (startProcess): Double-quote each
+ 	program array element passed to CreateProcess.
+ 
+ 2003-03-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/rmi/registry/RegistryHandler.java: Deprecate.
+ 
+ 2003-03-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/accessibility/AccessibleEditableText.java,
+ 	javax/accessibility/AccessibleHyperlink.java: New versions from
+ 	Classpath.
+ 
+ 	* 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: Updated copyright
+ 	info; from Classpath.
+ 
+ 	* gnu/awt/xlib/XPanelPeer.java (beginLayout, endLayout,
+ 	isPaintPending): New methods.
+ 	* gnu/awt/xlib/XFramePeer.java (getState, setState,
+ 	setMaximizedBounds): New methods.
+ 	(beginLayout, endLayout, isPaintPending): Likewise.
+ 	* gnu/awt/xlib/XCanvasPeer.java (isFocusable): New method.
+ 	(requestFocus): Likewise.
+ 	(isObscured): Likewise.
+ 	(canDetermineObscurity): Likewise.
+ 	(coalescePaintEvent): Likewise.
+ 	(updateCursorImmediately): Likewise.
+ 	(createVolatileImage): Likewise.
+ 	(handlesWheelScrolling): Likewise.
+ 	(createBuffers): Likewise.
+ 	(getBackBuffer): Likewise.
+ 	(flip): Likewise.
+ 	(destroyBuffers): Likewise.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (awt_java_source_files): Added DropTargetPeer.java,
+ 	RobotPeer.java.
+ 	* gnu/java/awt/GLightweightPeer.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/GtkFramePeer.java,
+ 	gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,
+ 	java/awt/dnd/peer/DragSourceContextPeer.java,
+ 	java/awt/dnd/peer/DropTargetContextPeer.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/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:
+ 	New versions from Classpath.
+ 	* java/awt/dnd/peer/DropTargetPeer.java: New file from Classpath.
+ 	* java/awt/peer/RobotPeer.java: Likewise.
+ 
+ 2003-03-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/ObjectInputStream.java: Reindent.
+ 	* java/io/ObjectOutputStream.java: Likewise.
+ 
+ 2003-02-28  Hans Boehm  <Hans.Boehm@hp.com>
+ 
+ 	* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Allocate a full
+ 	jvalue for each argument. Simplify.
+ 	* testsuite/libjava.jni/calls.c (docall),
+ 	testsuite/libjava.jni/calls.java (longpb_f): check for argument
+ 	misalignment.
+ 
+ 2003-02-28  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (nat_source_files): Remove
+ 	java/io/natObjectOutputStream.cc.
+ 	* Makefile.in: Regenerated.
+ 	* mauve-libgcj: Don't exclude java.io.ObjectInputOutput tests.
+ 	* java/io/ObjectStreamField.java (typename): New field.
+ 	(ObjectStreamField(String, Class)): Initialize new field.
+ 	(ObjectStreamField(String, String)): New Constructor.
+ 	(getTypeCode): Use new field.
+ 	(getTypeString): Use new field.
+ 	* java/io/ObjectOutputStream.java (writeObject): Rethrow fatal
+ 	ObjectStreamExceptions. Remember and reset old BlockDataMode.
+ 	Handle reading of Proxy classes. Never drain(), just write
+ 	TC_ENDBLOCKDATA. Rethrow ObjectStreamExceptions.
+ 	(drain): Check writeDataAsBlocks before calling writeBlockDataHeader.
+ 	(flush): Call flush(), not just drain().
+ 	(writeBoolean): Always use blockDataOutput.
+ 	(writeByte): Likewise.
+ 	(writeShort): Likewise.
+ 	(writeChar): Likewise.
+ 	(writeInt): Likewise.
+ 	(writeLong): Likewise.
+ 	(writeFloat): Likewise.
+ 	(writeDouble): Likewise.
+ 	(writeBytes): Likewise.
+ 	(putfield (put(String,Object))): Throw IllegalArgumentException if
+ 	field cannot be found.
+ 	(putfield (write(ObjectOutput))): Remember old BlockDataMode.
+ 	(writeArraySizeAndElements): Write byte[] in one go.
+ 	(writeFields): Write TC_ENDBLOCKDATA when call_write_method, otherwise
+ 	set BlockDataMode to false.
+ 	(annotateProxyClass): New method.
+ 	(defaultProtocolVersion): Now defaults to PROTOCOL_VERSION_2
+ 	(getField): No longer native.
+ 	(getMethod): Likewise.
+ 	(setBlockDataMode): Always drain() on switch, return old mode.
+ 	(static): New static code block.
+ 	* java/io/natObjectOutputStream.cc: Removed.
+ 	* java/io/ObjectInputStream.java (getField): No longer native.
+ 	(getMethod): Likewise.
+ 	(readObject): Remember and reset old BlockDataMode. Track whether
+ 	object is consumed. Handle TC_ENDBLOCKDATA, TC_PROXYCLASSDESC and
+ 	TC_LONGSTRING.
+ 	(defaultReadObject): Set BlockDataMode to false during readFields.
+ 	(resolveClass): Create new SecurityManager if necessary.
+ 	Use Class.forName() if null ClassLoader found.
+ 	(read(byte[],int,int): Copy remaining bytes to data before calling
+ 	readNextBlock().
+ 	(readFields): Set and reset BlockDataMode on call_read_method.
+ 	Catch NoSuchFieldErrors.
+ 	(setBlockDataMode): Return old mode.
+ 	(static): New static code block.
+ 	* java/io/natObjectInputStream.cc (getField): Removed.
+ 	(getMethod): Likewise.
+ 
+ 2003-02-27  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/beans/Beans.java,
+ 	java/beans/FeatureDescriptor.java
+ 	java/beans/PropertyEditorManager.java:
+ 	Reformated to GNU style.
+ 
+ 2003-02-25  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/MappedByteFileBuffer.java,
+ 	gnu/java/nio/natMappedByteFileBuffer.cc:
+ 	New files, both are not compiled yet to get not noncompiling CVS.
+ 
+ 2003-02-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/prefs/AbstractPreferences.java (isUserNode):
+ 	Implemented.
+ 
+ 2003-02-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (defineClass(byte[],int,int)):
+ 	Deprecate.
+ 	* java/lang/Thread.java (resume): Deprecate.
+ 	* java/io/ByteArrayOutputStream.java (toString(int)): Fixed typo
+ 	in @deprecated.
+ 
+ 2003-02-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (JC1FLAGS): Added -Wno-deprecated.
+ 
+ 2003-02-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/natRuntime.cc (libraries_size, libraries_count,
+ 	libraries): Removed.
+ 	(add_library): Removed.
+ 	(_load): Don't call add_library.
+ 	(loadLibraryInternal): Likewise.
+ 	(init): Likewise.
+ 	(lookup_data): New struct.
+ 	(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).
+ 	* Many methods: Merged GNU Classpath documentation.
+ 
+ 	* java/lang/Class.java (finalize): throws a Throwable.
+ 
+ 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  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/zip/ZipFile.java (finalize): New method.
+ 
+ 2003-02-21  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/natSocketChannelImpl.cc:
+ 	Reverse logic for DISABLE_JAVA_NET. Thanks to Krister Walfridsson
+ 	<cato@df.lth.se> for pointing to it.
+ 
+ 2003-02-20  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-20  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to
+ 	config.status.
+ 	* configure: Rebuilt.
+ 
+ 2003-02-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/natSocketChannelImpl.cc:
+ 	Added support for platforms without network support.
+ 
+ 2003-02-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* gnu/gcj/runtime/natStackTrace.cc: Include platform.h immediately
+ 	after config.h.  Use <> for consistency.
+ 	* java/lang/natObject.cc: Likewise.
+ 	* java/lang/natRuntime.cc: Likewise.
+ 	* java/lang/natSystem.cc: Likewise.
+ 	* java/util/natTimeZone.cc: Likewise.
+ 	* win32.cc: Likewise.
+ 	* include/posix.h (fcntl, socket, connect, close, bind, accept,
+ 	listen, write, read): Undef to avoid interference from OS macros.
+ 
+ 2003-02-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java
+ 	(ByteBufferImpl): Renamed two variables.
+ 	* gnu/java/nio/CharBufferImpl.java
+ 	(CharBufferImpl): Renamed two variables.
+ 	* gnu/java/nio/DoubleBufferImpl.java
+ 	(DoubleBufferImpl): Renamed two variables.
+ 	* gnu/java/nio/FloatBufferImpl.java
+ 	(FloatBufferImpl): Renamed two variables.
+ 	* gnu/java/nio/IntBufferImpl.java
+ 	(IntBufferImpl): Renamed two variables.
+ 	* gnu/java/nio/LongBufferImpl.java
+ 	(LongBufferImpl): Renamed two variables.
+ 	* gnu/java/nio/ShortBufferImpl.java
+ 	(ShortBufferImpl): Renamed two variables.
+ 	* java/nio/CharBuffer.java
+ 	(wrap): Fixed arguments to CharBufferImpl constructor.
+ 	(hasArray): Only not read-only buffers have backing arrays.
+ 	(length): Documentation added.
+ 	(subSequence): Documentation added.
+ 	* java/nio/DoubleBuffer.java
+ 	(hasArray): Only not read-only buffers have backing arrays.
+ 	* java/nio/FloatBuffer.java
+ 	(hasArray): Only not read-only buffers have backing arrays.
+ 	* java/nio/IntBuffer.java
+ 	(hasArray): Only not read-only buffers have backing arrays.
+ 	* java/nio/LongBuffer.java
+ 	(hasArray): Only not read-only buffers have backing arrays.
+ 	* java/nio/ShortBuffer.java
+ 	(hasArray): Only not read-only buffers have backing arrays.
+ 	
+ 2003-02-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* javax/accessibility/AccessibleContext.java
+ 	(ACCESSIBLE_DESCRIPTION_PROPERTY): Fixed typo.
+ 
+ 2003-02-19  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/ScrollPaneAdjustable.java: Reformated.
+ 
+ 2003-02-19  Michael Koch <konqueror@gmx.de>
+ 
+ 	* gnu/awt/j2d/Graphics2DImpl.java
+ 	(getFontRenderContext): New method.
+ 	(drawGlyphVector): New method.
+ 	* java/awt/Graphics2D.java
+ 	(getFontRenderContext): New abstract method.
+ 	(drawGlyphVector): New abstract method.
+ 	
+ 2003-02-18  Hans Boehm  <Hans.Boehm@hp.com>
+ 
+ 	* gnu/awt/xlib/XToolkit.java (getFontMetrics): initialize
+ 	if necessary.
+ 	
+ 	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
+ 	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,
+ 	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.
+ 
+ 	* 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.
+ 
+ 	* 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  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/FileChannel.java
+ 	(toString): New implementation, added documentation.
+ 	(map): Added exception documentation.
+ 	(size): Added exception documentation.
+ 	(write): New methods, documentation work.
+ 	(read): New methods, documentation work.
+ 	(implCloseChannel): Rewrote exception documentation.
+ 	(force): Throws IOException, added documentation.
+ 	(lock): New methods.
+ 	(tryLock): New methods.
+ 	(position): New methods.
+ 	(transferTo): New method.
+ 	(transferFrom): New method.
+ 	(truncate): New method.
+ 	* java/nio/channels/spi/SelectorProvider.java
+ 	(provider): Implemented.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Added the following files:
+ 	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
+ 	java/nio/channels/FileLock.java
+ 	(nat_java_source_files): Added the following files:
+ 	gnu/java/nio/natFileChannelImpl.cc
+ 	gnu/java/nio/natSelectorImpl.cc
+ 	gnu/java/nio/natSocketChannelImpl.cc
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-02-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/image/ColorModel.java: Re-merged with Classpath.
+ 	* java/awt/image/ImageFilter.java: Likewise.
+ 
+ 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  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-17  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(connect): Merged with classpath.
+ 	(disconnect): Merged documentation with classpath.
+ 	(receice): Merged documentation with classpath.
+ 	(send): Merged documentation with classpath.
+ 	
+ 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>
+ 
+ 	* verify.cc (_Jv_BytecodeVerifier::pop_jump): Removed unused
+ 	variable.
+ 
+ 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  Jesse Rosenstock  <jmr@ugcs.caltech.edu>
+ 
+ 	* java/nio/charset/Charset.java
+ 	(isRegistered): Fixed method args and implementation.
+ 	* java/nio/charset/CharsetEncoder.java
+ 	(unmappableCharacterAction): New method.
+ 
+ 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  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/System.java (properties): Use Properties.clone.
+ 	(setProperties): Likewise.
+ 
+ 2003-02-14  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/natServerSocketChannelImpl.cc: Removed.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(SocketAccept): Removed.
+ 	(accept): Commented out use of SocketAccept.
+ 
+ 2003-02-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* verify.cc (state::seen_subrs): New field.
+ 	(state::state): Initialize it.
+ 	(state::clean_subrs): New method.
+ 	(state::~state): Call it.
+ 	(state::copy): Copy subroutine list.
+ 	(state::add_subr): New method.
+ 	(state::merge): Only register a change if the current subroutine
+ 	hasn't yet been noted.
+ 
+ 2003-02-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/InputStreamReader.java (getEncoding): Return null when
+ 	closed.
+ 	* java/io/OutputStreamWriter.java (getEncoding): Likewise.
+ 
+ 2003-02-13  Mark Wielaard  <mark@klomp.org>
+  
+ 	* java/util/zip/InflaterInputStream.java (read): Return zero when len
+ 	is zero.
+ 
+ 2003-02-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/BufferedOutputStream.java (write(int)): Only flush when
+ 	next byte cannot be buffered.
+ 
+ 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  Michael Koch  <konqueror@gmx.de>
+  
+ 	* gnu/java/awt/peer/gtk/GdkGraphics.java
+ 	(drawString): New stubbed method.
+ 	* java/awt/Graphics.java
+ 	(drawString): New method.
+ 
+ 2003-02-13  Casey Marshall  <rsdio@metastatic.org>
+ 
+ 	PR libgcj/9271:
+ 	* java/security/SecureRandom.java (next): Avoid bias in results.
+ 
+ 2003-02-13  Michael  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileChannelImpl.java
+ 	(lengthInternal): Must be native.
+ 	(size): Check if channel is already closed.
+ 	(implCloseChannel): Reformated.
+ 	(read): w was unused, removed it.
+ 	(read): Removed.
+ 	(read): New method.
+ 	(write): New method.
+ 	(map): Check arguments.
+ 	(force): Throws IOException, check if channel is closed.
+ 	(transferTo): New method.
+ 	(transferFrom): New method.
+ 	(lock): New method.
+ 	(tryLock): New method.
+ 	(position): New method.
+ 	(truncate): New method.
+ 	(nio_mmap_file): Uncommented.
+ 	(nio_munmap_file): Uncommented.
+ 	(nio_msync): Uncommented.
+ 	* gnu/java/nio/natFileChannelImpl.cc: New file.
+ 	
+ 2003-02-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java
+ 	(endian): New member variable.
+ 	(get): New methods.
+ 	(equals): New method.
+ 	(compareTo): New method.
+ 	(order): New methods.
+ 	(compact): New method.
+ 	(isDirect): New method.
+ 	(slice): New method.
+ 	(duplicate): New method.
+ 	(asReadOnlyBuffer): New method.
+ 	(asCharBuffer): New method.
+ 	(asDoubleBuffer): New method.
+ 	(asFloatBuffer): New method.
+ 	(asIntBuffer): New method.
+ 	(asLongBuffer): New method.
+ 	(asShortBuffer): New method.
+ 	(get*): New methods.
+ 	(put*): New methods.
+ 	(toString): New method.
+ 	* java/nio/CharBuffer.java
+ 	(CharBuffer): Implement Comparable instead of Cloneable.
+ 	(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
+ 	the line number, because Win32 file names might contain a 
+ 	drive letter and a colon at the start of an absolute path.
+ 
+ 2003-02-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/natSocketChannelImpl.cc
+ 	(SocketConnect): This is not implemented yet.
+ 	(SocketBind): This is not implemented yet.
+ 
+ 2003-02-13  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/natByteBufferImpl.cc,
+ 	gnu/java/nio/natCharBufferImpl.cc,
+ 	gnu/java/nio/natDoubleBufferImpl.cc,
+ 	gnu/java/nio/natFloatBufferImpl.cc,
+ 	gnu/java/nio/natIntBufferImpl.cc,
+ 	gnu/java/nio/natLongBufferImpl.cc,
+ 	gnu/java/nio/natShortBufferImpl.cc:
+ 	Added copyright and license.
+ 	* java/nio/DoubleBuffer.java,
+ 	java/nio/FloatBuffer.java,
+ 	java/nio/IntBuffer.java,
+ 	java/nio/LongBuffer.java,
+ 	java/nio/ShortBuffer.java
+ 	(array): Throw exceptions.
+ 	(arrayOffset): Throw exceptions.
+ 
+ 2003-02-13  Michael Koch  <konqueror@gmx.de>
+  
+ 	* gnu/java/util/prefs/FileBasedFactory.java,
+ 	gnu/java/util/prefs/MemmoryBasedFactory.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 files, all merged from classpath.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Added the following files:
+ 	gnu/java/util/prefs/FileBasedFactory.java,
+ 	gnu/java/util/prefs/MemmoryBasedFactory.java,
+ 	gnu/java/util/prefs/MemoryBasedPreferences.java,
+ 	gnu/java/util/prefs/NodeReader.java,
+ 	gnu/java/util/prefs/NodeWriter.java,
+ 	(core_java_source_files): Added the following files:
+ 	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
+ 	* Makefile.in: Regenerated.
+  
+ 2003-02-13  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.
+ 	* java/net/ServerSocket.java: Merged with classpath.
+ 	* java/net/Socket.java: Partly merged with classpath (Added some @since).
+ 	* java/net/SocketImpl.java
+ 	(localPort): Merged with classpath (initialize with -1).
+ 	* java/net/SocketPermission.java: Merged with classpath (reindented).
+ 	* java/net/URLDecoder.java: Merged with classpath (reindented).
+ 
+ 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  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* configure.host (alpha*-*): Default to -mieee.
+ 	* configure.in (IEEESPEC): New.
+ 	* libgcj.spec.in (jc1): Add IEEESPEC.
+ 	* configure: Rebuild.
+ 
+ 2003-02-12  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* include/win32.h: Include ws2tcpip.h instead of
+ 	winsock.h to obtain definition of the socklen_t type.
+ 	Remove IP_TOS definition - not needed with ws2tcpip.h
+ 	(_Jv_connect): Correct slight formatting error.
+ 
+ 2003-02-12  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* jni.cc (_Jv_LookupJNIMethod): Modify to accept the
+ 	size of the arguments for a JNI function. For Win32,
+ 	modify to search for all forms of possible exported
+ 	names of an stdcall JNI function.
+ 	(_Jv_JNIMethod::call): Modify to calculate the size
+ 	of the arguments passed to a JNI function and pass
+ 	it to _Jv_LookupJNIMethod.
+ 
+ 2003-02-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/Channels.java: New file.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Added java/nio/channels/Channels.java.
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-02-12  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/ByteBuffer.java
+ 	(allocate): Implemented.
+ 	(wrap): Implemented.
+ 	* java/nio/CharBuffer.java:
+ 	Some documentation added and reworked.
+ 	(endian): Removed.
+ 	(allocate): Implemented.
+ 	(wrap): Implemented.
+ 	(array): Throw exceptions.
+ 	(arrayOffset): Throw exceptions.
+ 	(toString): Implemented.
+ 	(length): Implemented.
+ 	(put): Implemented.
+ 	(charAt): Implemented.
+ 
+ 2003-02-11  John Leuner  <jewel@debian.org>
+ 
+ 	* java/util/zip/ZipInputStream.java: Fix problem with 0-length 
+ 	reads from end of file.
+ 
+ 2003-02-11  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/io/natFileDescriptorWin32.cc 
+ 	(java::io::FileDescriptor::read): Return -1 (EOF) if ReadFile( )
+ 	returns with Win32 error code ERROR_BROKEN_PIPE.
+ 
+ 2003-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* Makefile.in
+ 	(libgcj_la_OBJECTS): Removed natSelctorImpl.la.
+ 
+ 2003-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/ByteBufferImpl.java:
+ 	Reformated and removed some code.
+ 	(backing_buffer): Removed.	
+ 	(array_offset): Removed.
+ 	(ro): Renamed to readOnly.
+ 	(ByteBufferImpl): Use parent constructor, initialize readOnly.
+ 	* gnu/java/nio/CharBufferImpl.java:
+ 	Reformated and removed some code.
+ 	(array_offset): Removed.
+ 	(ro): Renamed to readOnly.
+ 	(CharBufferImpl): Use parent constructor, initialize readOnly.
+ 	(inc_pos): Removed.
+ 	(order): New method.
+ 	* gnu/java/nio/DoubleBufferImpl.java:
+ 	Reformated and removed some code.
+ 	(array_offset): Removed.
+ 	(ro): Renamed to readOnly.
+ 	(DoubleBufferImpl): Use parent constructor, initialize readOnly.
+ 	(inc_pos): Removed.
+ 	(order): New method.
+ 	* gnu/java/nio/FloatBufferImpl.java:
+ 	Reformated and removed some code.
+ 	(array_offset): Removed.
+ 	(ro): Renamed to readOnly.
+ 	(FloatBufferImpl): Use parent constructor, initialize readOnly.
+ 	(inc_pos): Removed.
+ 	(order): New method.
+ 	* gnu/java/nio/IntBufferImpl.java:
+ 	Reformated and removed some code.
+ 	(array_offset): Removed.
+ 	(ro): Renamed to readOnly.
+ 	(IntBufferImpl): Use parent constructor, initialize readOnly.
+ 	(inc_pos): Removed.
+ 	(order): New method.
+ 	* gnu/java/nio/LongBufferImpl.java:
+ 	Reformated and removed some code.
+ 	(array_offset): Removed.
+ 	(ro): Renamed to readOnly.
+ 	(LongBufferImpl): Use parent constructor, initialize readOnly.
+ 	(inc_pos): Removed.
+ 	(order): New method.
+ 	* gnu/java/nio/ShortBufferImpl.java:
+ 	Reformated and removed some code.
+ 	(array_offset): Removed.
+ 	(ro): Renamed to readOnly.
+ 	(ShortBufferImpl): Use parent constructor, initialize readOnly.
+ 	(inc_pos): Removed.
+ 	(order): New method.
+ 	* Makefile.am
+ 	(ordinary_java_source_files): Added the following files:
+ 	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/DoubleBuffer.java
+ 	java/nio/FloatBuffer.java
+ 	java/nio/IntBuffer.java
+ 	java/nio/LongBuffer.java
+ 	java/nio/ShortBuffer.java
+ 	(nat_source_files): Added the following files:
+ 	gnu/java/nio/natByteBufferImpl.cc
+ 	gnu/java/nio/natCharBufferImpl.cc
+ 	gnu/java/nio/natDoubleBufferImpl.cc
+ 	gnu/java/nio/natFloatBufferImpl.cc
+ 	gnu/java/nio/natIntBufferImpl.cc
+ 	gnu/java/nio/natLongBufferImpl.cc
+ 	gnu/java/nio/natShortBufferImpl.cc
+ 	* Makefile.in: Regenerated.
+ 
+ 2003-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/natCharBufferImpl.cc
+ 	(nio_cast): Removed.
+ 	(nio_put_*): Removed.
+ 	(nio_get_*): Removed.
+ 	* gnu/java/nio/natDoubleBufferImpl.cc
+ 	(nio_cast): Removed.
+ 	(nio_put_*): Removed.
+ 	(nio_get_*): Removed.
+ 	* gnu/java/nio/natFloatBufferImpl.cc
+ 	(nio_cast): Removed.
+ 	(nio_put_*): Removed.
+ 	(nio_get_*): Removed.
+ 	* gnu/java/nio/natIntBufferImpl.cc
+ 	(nio_cast): Removed.
+ 	(nio_put_*): Removed.
+ 	(nio_get_*): Removed.
+ 	* gnu/java/nio/natLongBufferImpl.cc
+ 	(nio_cast): Removed.
+ 	(nio_put_*): Removed.
+ 	(nio_get_*): Removed.
+ 	* gnu/java/nio/natShortBufferImpl.cc
+ 	(nio_cast): Removed.
+ 	(nio_put_*): Removed.
+ 	(nio_get_*): Removed.
+ 	* gnu/java/nio/SelectorProviderImpl.java
+ 	(openDatagramChannel): Throws IOException.
+ 	(openPipe): Throws IOException.
+ 	(openSelector): Throws IOException.
+ 	(openServerSocketChannel): Throws IOException.
+ 	(openSocketChannel): Throws IOException.
+ 	* gnu/java/nio/ServerSocketChannelImpl.java
+ 	(ServerSocketChannelImpl): Throws IOException.
+ 	(implCloseSelectableChannel): Throws IOException.
+ 	(implConfigureBlocking): Throws IOException.
+ 	* java/nio/ByteBuffer.java
+ 	(readOnly): Removed.
+ 	(hasArray): Use isReadOnly() instead of readOnly.
+ 	(array): Use isReadOnly() instead of readOnly.
+ 	(arrayOffset): Use isReadOnly() instead of readOnly.
+ 	* java/nio/CharBuffer.java
+ 	(CharBuffer): Implements Cloneable and CharSequence.
+ 
+ 2003-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/DoubleBuffer.java
+ 	(DoubleBuffer): Implements Comparable.
+ 	(endian): Removed.
+ 	(array_offset): New member variable.
+ 	(DoubleBuffer): New constuctor.
+ 	(get): May not be final.
+ 	(put): May not be final.
+ 	(arrayOffset): Implemented.
+ 	(order): Made abstract.
+ 	(order): Removed.
+ 	(as*Buffer): Removed.
+ 	(get*): Removed.
+ 	(put*): Removed.
+ 	* java/nio/FloatBuffer.java
+ 	(FloatBuffer): Implements Comparable.
+ 	(endian): Removed.
+ 	(array_offset): New member variable.
+ 	(FloatBuffer): New constuctor.
+ 	(get): May not be final.
+ 	(put): May not be final.
+ 	(arrayOffset): Implemented.
+ 	(order): Made abstract.
+ 	(order): Removed.
+ 	(as*Buffer): Removed.
+ 	(get*): Removed.
+ 	(put*): Removed.
+ 	* java/nio/IntBuffer.java
+ 	(IntBuffer): Implements Comparable.
+ 	(endian): Removed.
+ 	(array_offset): New member variable.
+ 	(IntBuffer): New constuctor.
+ 	(get): May not be final.
+ 	(put): May not be final.
+ 	(arrayOffset): Implemented.
+ 	(order): Made abstract.
+ 	(order): Removed.
+ 	(as*Buffer): Removed.
+ 	(get*): Removed.
+ 	(put*): Removed.
+ 	* java/nio/LongBuffer.java
+ 	(LongBuffer): Implements Comparable.
+ 	(endian): Removed.
+ 	(array_offset): New member variable.
+ 	(LongBuffer): New constuctor.
+ 	(get): May not be final.
+ 	(put): May not be final.
+ 	(arrayOffset): Implemented.
+ 	(order): Made abstract.
+ 	(order): Removed.
+ 	(as*Buffer): Removed.
+ 	(get*): Removed.
+ 	(put*): Removed.
+ 	* java/nio/ShortBuffer.java
+ 	(ShortBuffer): Implements Comparable.
+ 	(endian): Removed.
+ 	(array_offset): New member variable.
+ 	(ShortBuffer): New constuctor.
+ 	(get): May not be final.
+ 	(put): May not be final.
+ 	(arrayOffset): Implemented.
+ 	(order): Made abstract.
+ 	(order): Removed.
+ 	(as*Buffer): Removed.
+ 	(get*): Removed.
+ 	(put*): Removed.
+ 
+ 2003-02-11   Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/SelectionKey.java
+ 	(OP_ACCEPT, OP_CONNECT, OP_READ, OP_WRITE): Initialize with correct
+ 	values.
+ 
+ 2003-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/channels/DatagramChannel.java
+ 	(write): Throws IOException.
+ 	(connect): Throws IOException.
+ 	(disconnect): Throws IOException.
+ 	(read): Throws IOException.
+ 	(receive): Throws IOException.
+ 	(send): Throws IOException.
+ 	* java/nio/channels/Pipe.java
+ 	(open): Throws IOException.
+ 	* java/nio/channels/SelectableChannel.java
+ 	(configureBlocking): Throws IOException.
+ 	* java/nio/channels/ServerSocketChannel.java
+ 	(accept): Throws IOException.
+ 	* java/nio/channels/SocketChannel.java
+ 	(SocketChannel): Implements ByteChannel, ScatteringByteChannel,
+ 	GatheringByteChannel.
+ 	(read): Throws IOException.
+ 	(write): Throws IOException.
+ 	(finishConnect): Throws IOException.
+ 	* java/nio/channels/spi/AbstractInterruptibleChannel.java
+ 	(end): Throws AsynchronousCloseException.
+ 	* java/nio/channels/spi/AbstractSelectableChannel.java
+ 	(configureBlocking): Throws IOException.
+ 	(implCloseChannel): Throws IOException.
+ 	(implCloseSelectableChannel): Throws IOException.
+ 	(implConfigureBlocking): Throws IOException.
+ 	* java/nio/channels/spi/SelectorProvider.java
+ 	(openDatagramChannel): Throws IOException.
+ 	(openPipe): Throws IOException.
+ 	(openSelector): Throws IOException.
+ 	(openServerSocketChannel): Throws IOException.
+ 	(openSocketChannel): Throws IOException.
+ 
+ 2003-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* gnu/java/nio/FileLockImpl.java,
+ 	java/nio/channels/FileLock.java: New files.
+ 
+ 2003-02-11  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/nio/charset/IllegalCharsetNameException.java
+ 	(serialVersionUID): New member variable.
+ 	(charsetName): New member variable.
+ 	(IllegalCharsetException): New implementation.
+ 	(getCharsetName): New implementation.
+ 	* java/nio/charset/UnsupportedCharsetException.java
+ 	(serialVersionUID): New member variable.
+ 	(charsetName): New member variable.
+ 	(UnsupportedCharsetException): New implementation.
+ 	(getCharsetName): New implementation.
+ 
+ 2003-02-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* javax/sql/ConnectionEvent.java (serialVersionUID): New field.
+ 	(ex): Renamed from sqlException.
+ 
+ 2003-02-10  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-10  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* java/lang/Win32Process.java (destroy): Declare as native.
+ 	(hasExited): New native method.
+ 	(exitValue): Define.
+ 	(getErrorStream): Likewise.
+ 	(getInputStream): Likewise.
+ 	(getOutputStream): Likewise.
+ 	(waitFor): Declare as native.
+ 	(startProcess): New native method.
+ 	(cleanup): Likewise.
+ 	(ConcreteProcess): Define.
+ 	(outputStream, inputStream, errorStream): New members.
+ 	(procHandle, exitCode): Likewise.
+ 
+ 	* java/lang/natWin32Process.cc
+ 	(java::lang::ConcreteProcess::cleanup): Define.
+ 	(java::lang::ConcreteProcess::destroy): Likewise.
+ 	(java::lang::ConcreteProcess::hasExited): Likewise.
+ 	(java::lang::ConcreteProcess::waitFor): Likewise.
+ 	(new_string): Likewise.
+ 	(java::lang::ConcreteProcess::startProcess): Likewise.
+ 
+ 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-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/util/jar/JarFile.java (JarFile(String, boolean)): Read manifest
+ 	when verify is true.
+ 	(JarFile(File, boolean)): Likewise.
+ 	(manifestRead): Set manifestRead field correctly.
+ 
+ 2003-02-07  Stephen Crawley  <crawley@dstc.edu.au>
+ 
+ 	* java/math/BigDecimal(valueOf): fix DiagBigDecimal val008, val013
+ 	tests; see patch #1016 on Savannah.
+ 
+ 2003-02-07  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-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-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  Ranjit Mathew <rmathew@hotmail.com>
+ 
+ 	* java/lang/natRuntime.cc (java::lang::Runtime::_load)): Take care
+ 	of the fact that on Win32, JNI_OnLoad is an "stdcall" function and
+ 	could also have been exported as "JNI_OnLoad@8" (MinGW) or
+ 	"_JNI_OnLoad@8" (MSVC).
+ 
+ 2003-02-03  Ranjit Mathew <rmathew@hotmail.com>
+ 
+ 	* resolve.cc (_Jv_JNIMethod::ncode): Use stdcall calling
+ 	convention on Win32 to invoke native JNI methods.
+ 
+ 2003-02-03  Andrew Haley  <aph@redhat.com>
+ 
+ 	* configure.host (x86_64): Enable interpreter.
+ 
+ 2003-02-03  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libgcj.spec.in (jc1): Add BACKTRACESPEC.
+         * configure.host (x86_64): Default to -fno-omit-frame-pointer.
+         * configure.in (BACKTRACESPEC): New.
+         * configure: Regenerate.
+ 
+ 2003-02-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* configure: Rebuilt.
+ 	* configure.in (TOOLKIT) [xlib]: Set correctly.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (lib_gnu_awt_xlib_la_LDFLAGS): Link against
+ 	libstdc++.
+ 
+ 2003-01-31  Mark WIelaard  <mark@klomp.org>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (gtk_c_headers): Strip trailing / from jniinclude.
+ 
+ 2003-01-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* jni.cc (_Jv_JNI_NewObjectArray): Check that initializer can be
+ 	cast to element type.
+ 	(_Jv_JNI_SetObjectArrayElement): Check array bounds.
+ 	(_Jv_JNI_GetObjectArrayElement): Likewise.
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (cond_x_ltlibrary): Renamed library to
+ 	lib-gnu-awt-xlib.la.
+ 	(lib_gnu_awt_xlib_la_SOURCES): Renamed.
+ 	(EXTRA_lib_gnu_awt_xlib_la_SOURCES): Likewise.
+ 	(lib_gnu_awt_xlib_la_DEPENDENCIES): Likewise.
+ 	(lib_gnu_awt_xlib_la_LIBADD): Likewise.
+ 	(lib_gnu_awt_xlib_la_LDFLAGS): Likewise.
+ 	(lib_gnu_awt_xlib_la_LINK): Likewise.
+ 	(install-exec-hook): Removed.
+ 	(lib-gnu-awt-xlib.la): Renamed.
+ 
+ 2003-01-31  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* aclocal.m4, configure, include/config.h.in: Rebuilt.
+ 	* acinclude.m4 (CHECK_FOR_BROKEN_MINGW_LD): Resurrected; was in
+ 	aclocal.m4 and lost in some merge.
+ 
+ 	* java/awt/Window.java (Window(Window,GraphicsConfiguration)):
+ 	Don't try to find graphics configuration.
+ 	* java/awt/Toolkit.java (default_toolkit_name): Use new
+ 	Configuration entry.
+ 	* gnu/classpath/Configuration.java.in (default_awt_peer_toolkit):
+ 	New global.
+ 	* configure: Rebuilt.
+ 	* configure.in (TOOLKIT): New subst.
+ 	(--enable-java-awt) [xlib, gtk]: Set TOOLKIT if required.
+ 	Do AWT tests much earlier.  Run Gtk tests.  Make jniinclude
+ 	directory.  Make output directories for .c files.
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (lib_gnu_java_awt_peer_gtk_la_SOURCES): New macro.
+ 	(toolexeclib_LTLIBRARIES): Added cond_gtk_ltlibrary.
+ 	(all_java_source_files): Added new sources.
+ 	($(lib_gnu_java_awt_peer_gtk_la_OBJECTS)): New target.
+ 	(gtk_c_files): New macro.
+ 	(gtk_c_source_files): New macro.
+ 	(cond_gtk_ltlibrary): New macro.
+ 	($(gtk_c_files)): New target.
+ 	(lib_gnu_java_awt_peer_gtk_la_LIBADD): New macro.
+ 	(gtk_awt_peer_sources): New macro.
+ 	(gtk_c_headers): New macro.
+ 	($(gtk_c_headers)): New target.
+ 	(ACLOCAL_AMFLAGS): New macro.
+ 	* gtk.m4, glib.m4, libart.m4: New files.
+ 	* 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/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/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/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/GtkToolkit.java,
+ 	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
+ 	gnu/java/awt/peer/gtk/TestAWT.java,
+ 	gnu/java/awt/peer/gtk/Test.java: New files from Classpath.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.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_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_GtkEvents.c,
+ 	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.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_GtkMainThread.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_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/gthread-jni.c, jni/gtk-peer/gthread-jni.h,
+ 	jni/gtk-peer/gtkpeer.h, jni/classpath/jcl.c, jni/classpath/jcl.h,
+ 	jni/classpath/jnilink.c, jni/classpath/jnilink.h,
+ 	jni/classpath/native_state.c, jni/classpath/native_state.h,
+ 	jni/classpath/primlib.c, jni/classpath/primlib.h: Likewise.
+ 
+ 2003-01-31  Julian Dolby  <dolby@us.ibm.com>
+ 
+ 	* java/util/Properties.java (load): Ignore backslash before EOF.
+ 
+ 2003-01-30  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* java/lang/natClass.cc (initializeClass): Check tables when
+ 	(state == JV_STATE_IN_PROGRESS).
+ 	(_Jv_GetInterfaces): Use _Jv_WaitForState to link interface.
+ 	* java/lang/natClassLoader.cc (_Jv_WaitForState): Handle
+ 	interpreted classes.
+ 	(linkClass0): Use _Jv_WaitForState.
+ 
+ 2003-01-28  Oscar Pearce  <oscar@pearceenterprises.com>
+ 
+ 	* java/awt/Component.java (processPaintEvent): Dispose of Graphics
+ 	object when finished.
+ 
+ 2003-01-28  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* libjava/configure.host: Disable can_unwind_signal on darwin.
+ 
+ 2003-01-28  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Fixes PR java/9254:
+ 	* include/win32-threads.h (_Jv_Mutex_t): Convert to a struct
+ 	additionally containing id of the owner thread as well as
+ 	the number of nested times the thread has acquired the mutex.
+ 	(_Jv_MutexInit): Initialise owner thread id and refcount to 0.
+ 	(_Jv_MutexDestroy): Reset owner thread id and refcount to 0.
+ 	(_Jv_MutexUnlock): Check if really the owner thread, reset
+ 	owner thread id to 0 before leaving, if leaving for the last
+ 	time.
+ 	(_Jv_MutexLock): Set owner thread id in the mutex and increment
+ 	refcount.
+ 	(_Jv_ThreadYield): Yield using a call to Sleep(0).
+ 	* win32-threads.cc (_Jv_CondWait): Check if really owner of
+ 	the passed mutex.
+ 	Pass handle of the broadcast event, instead of a pointer to it
+ 	in Win32 ResetEvent( ) call.
+ 	Remove incorrect return values.
+ 	(_Jv_CondDestroy): Close both event handles and delete
+ 	critical section.
+ 	(_Jv_CondNotify): Check if really the owner thread.
+ 	(_Jv_CondNotifyAll): Check if really the owner thread.
+ 	(_Jv_InitThreads): Change daemon_cond to a manual-reset event.
+ 	(really_start): Use SetEvent( ) to signal daemon_cond.
+ 	(_Jv_ThreadWait): Remove SignalObjectAndWait( ) and use
+ 	WaitForSingleObject( ) instead to wait for daemon_cond to be
+ 	signalled.
+ 
+ 2003-01-27  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* configure.in: Specifically define HAVE_BACKTRACE if building
+ 	for MinGW.
+ 	* include/win32.h: Remove HAVE_BACKTRACE definition.
+ 	* gnu/gcj/runtime/natStackTrace.cc: Include platform.h.
+ 	* configure: Rebuilt.
+ 
+ 2003-01-27  Alexandre Oliva  <aoliva@redhat.com>
+ 
+ 	* configure.in (toolexecdir, toolexecmainlibdir, toolexeclibdir):
+ 	Set and AC_SUBST.  Remove USE_LIBDIR conditional.
+ 	* Makefile.am (toolexecdir, toolexeclibdir): Don't override.
+ 	(toolexecmainlib_DATA): Renamed from toolexeclib_DATA.
+ 	* Makefile.in, configure: Rebuilt.
+ 
+ 2003-01-24  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	Fixes PR java/9253:
+ 	* java/io/natFileWin32.cc (performList): Append only "*.*"
+ 	if the canonical file path already has a "\" at the end.
+ 
+ 2003-01-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* defineclass.cc (handleMethodsEnd): Precompute code for static
+ 	method.
+ 	(handleCodeAttribute): Likewise.
+ 	* resolve.cc (ncode): Use run_class for unsynchronized static
+ 	methods.
+ 	* include/java-interp.h (class _Jv_InterpMethod): Declare
+ 	run_class.
+ 	* interpret.cc (run_synch_class): Initialize class.
+ 	(run) [insn_invokestatic]: Don't initialize class.
+ 	[insn_anewarray]: Likewise.
+ 	[insn_multianewarray]: Likewise.
+ 	(run_class): New function.
+ 
+ 2003-01-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/lang/ClassLoader.java (findLoadedClass): Removed erroneous
+ 	comment.
+ 
+ 2003-01-22  Andrew Haley  <aph@redhat.com>
+ 
+         * x86_64-signal.h: Add simple handler for x86_64 32-bit mode.
+         * configure.host (CHECKREFSPEC): Define for x86_64.
+ 
+ 2003-01-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/util/natResourceBundle.cc (getCallingClassLoader): Start
+ 	search at 2, not 3.
+ 
+ 2003-01-21  Vladimir Puskas  <vpuskas@eunet.yu>
+ 
+ 	* java/io/natFileWin32.cc (isAbsolute): Check path length before
+ 	looking at any characters.
+ 	* java/io/natFilePosix.cc (_stat): Only compute `buf' if it will
+ 	be used.
+ 	(isAbsolute): Check path's length as well.
+ 
+ 2003-01-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.am (core_java_source_files): Add VMObjectStreamClass.java.
+ 	(nat_source_files): Add natVMObjectStreamClass.cc.
+ 	* Makefile.in: Regenerated.
+ 	* gcj/javaprims.h (namespace java): Regenerated.
+ 	* java/io/ObjectStreamClass.java (getClassUID): Call
+ 	VMObjectStreamClass.hasClassInitializer().
+ 	(hasClassInitializer): Removed.
+ 	* java/io/VMObjectStreamClass.java: New class.
+ 	* java/io/natVMObjectStreamClass.cc: New file.
+ 	* java/lang/Class.h: Make java::io::VMObjectStreamClass friend class.
+ 
+ 2003-01-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/SocketImpl.java (toString): Don't explicitly call
+ 	toString() on possible null address.
+ 
+ 2003-01-16  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/MulticastSocket.java
+ 	(setInterface): Reindented.
+ 
+ 2003-01-15  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/gcj/xlib/natGC.cc (fillPolygon): New method.
+ 	* gnu/gcj/xlib/GC.java (fillPolygon): Declare.
+ 	* gnu/awt/xlib/XGraphics.java (fillPolygon): Added translateX and
+ 	translateY arguments.  Implement.
+ 	* gnu/awt/j2d/IntegerGraphicsState.java (fillPolygon): Pass
+ 	down translation arguments.
+ 	(drawPolyline, drawPolygon): Fix incorrect tests.
+ 	* gnu/awt/j2d/DirectRasterGraphics.java (fillPolygon): Added
+ 	translateX and translateY arguments.
+ 
+ 2003-01-15  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (xlib_includes): New macro.
+ 	(INCLUDES): Use it.
+ 
+ 2003-01-15  Scott Gilbertson  <scottg@mantatest.com>
+ 
+ 	* gnu/awt/xlib/XToolkit.java (getColorModel): Implemented.
+ 	* gnu/awt/xlib/XGraphicsConfiguration.java (getPixel): Work with
+ 	16-bit display mode.
+ 
+ 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  Andrew Haley  <aph@redhat.com>
+ 
+ 	* java/lang/natRuntime.cc (_load): StackTrace access needs to be
+ 	in a try block.
+ 
+ 2003-01-10  Andrew Haley  <aph@redhat.com>
+ 
+ 	* include/dwarf2-signal.h: Remove x86_64.
+ 	* configure.host (x86_64 DIVIDESPEC): Remove.
+ 	* include/x86_64-signal.h: New file.
+ 	* configure.in: Regenerate.
+ 
+ 2003-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/net/DatagramSocket.java
+ 	(ch): Description added.
+ 	(remotePort): Initialize with -1.
+ 	(connect): Doesnt throws SocketException.
+ 	* java/net/MulticastSocket.java
+ 	(setInterface): Merge with Classpath.
+ 	* java/net/ServerSocket.java
+ 	(closed): New member variable.
+ 	(bind): Check if socket is closed.
+ 	(close): Close an associated channel too, set new value to closed.
+ 	(isBound): Reindented.
+ 	(isClosed): Implemented.
+ 	* java/net/Socket.java
+ 	(closed): New member variable.
+ 	(bind): Check if socket is closed.
+ 	(connect): Check if socket is closed.
+ 	(close): Close an associated channel too, set new value to closed.
+ 	(isClosed): Implemented.
+ 
+ 2003-01-10  Michael Koch  <konqueror@gmx.de>
+ 
+ 	* java/awt/DisplayMode.java
+ 	(equals): Fixed argument type and implementation.
+ 
+ 2003-01-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* include/posix.h (_Jv_platform_usleep): Wrap in ifdef
+ 	JV_HASH_SYNCHRONIZATION.
+ 	* include/win32.h (_Jv_platform_usleep): Wrap in ifdef
+ 	JV_HASH_SYNCHRONIZATION.
+ 
+ 2003-01-07  Michael Koch  <konqueror@gmx.de>
+  
+  	* java/net/DatagramSocket.java:
+  	Added classpath license info.
+  	(DatagramSocket): Merged description with classpath.
+  	(close): Merged description with classpath.
+  	(getChannel): Merged description with classpath.
+  	(getInetAddress): Merged description with classpath.
+  	(getPort): Merged description with classpath.
+  	(getLocalAddress): Merged description with classpath.
+  	(getLocalPort): Merged description with classpath.
+  	(getSoTimeout): Merged description with classpath.
+  	(setSoTimeout): Merged description with classpath.
+  	(getSendBufferSize): Merged description with classpath.
+  	(setSendBufferSize): Merged description with classpath.
+  	(getReceiveBufferSize): Merged description with classpath.
+  	(setReceiveBufferSize): Merged description with classpath.
+ 	
+ 2003-01-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* java/awt/List.java: Merged with Classpath.
+ 
+ 2003-01-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/FileDescriptor.java (position): New private field.
+ 	* java/io/natFileDescriptorPosix.cc (write): Up position.
+ 	(setLength): Use and set position.
+ 	(seek): Set position.
+ 	(getFilePointer): Return position.
+ 	(read): Up position.
+ 
+ 2003-01-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	Merge with Classpath:
+ 	* java/io/ObjectStreamClass.java (lookup): Split method and call
+ 	lookupForClassObject().
+ 	(lookupForClassObject): New method.
+ 	(isProxyClass): New field.
+ 	(setClass): Set isProxyClass, add object to classLookupTable, set
+ 	superClass and calculateOffsets.
+ 	(ObjectStreamClass): Set isProxyClass. Only set uid when Serializable
+ 	and not a proxy class.
+ 	(setFields): Set accessible true for serialPersistentFields.
+ 	(getClassUID): Same for suid. And check if suid is of type long.
+ 	(hasClassInitializer): Don't throw NoSuchMethodError.
+ 
+ 2003-01-03  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/io/FileInputStream.java (finalize): Don't explicitly
+ 	finalize FileDescriptor.
+ 
+ 2003-01-03  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* configure.host (sparc*-*): Enable bytecode interpreter.
+ 
+ 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-03  Joerg Brunsmann  <joerg_brunsmann@yahoo.de>
+ 
+ 	* gnu/gcj/protocol/http/Connection.java (proxyPort, proxyInUse,
+ 	proxyHost): New static fields.
+ 	(<clinit>): Initialize new fields.
+ 	(connect): Use proxy if necessary.
+ 	(usingProxy): Implement.
+ 
+ 2003-01-03  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-22  Anthony Green  <green@redhat.com>
+ 
+ 	* boehm.cc (_Jv_MarkObj): Mark the protectionDomain of a class.
+ 
+ 2003-01-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* java/net/HttpURLConnection.java (HTTP_NOT_IMPLEMENTED): Must be
+ 	public.
+ 	(HTTP_USE_PROXY): Add field.
+ 	(getResponseVals): Only set responseCode when not yet explicitly
+ 	set by subclass.
+ 
+ 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-02  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-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (rmi_java_source_files): Added RMIClassLoaderSpi.
+ 	* java/awt/AlphaComposite.java, java/awt/BasicStroke.java,
+ 	java/awt/BufferCapabilities.java, java/awt/Button.java,
+ 	java/awt/CheckboxMenuItem.java, java/awt/Choice.java,
+ 	java/awt/Container.java, java/awt/Cursor.java,
+ 	java/awt/EventQueue.java, java/awt/FileDialog.java,
+ 	java/awt/Graphics2D.java, java/awt/Label.java, java/awt/Menu.java,
+ 	java/awt/MenuBar.java, java/awt/MenuComponent.java,
+ 	java/awt/PopupMenu.java, java/awt/ScrollPane.java,
+ 	java/awt/Scrollbar.java, java/awt/TextArea.java,
+ 	java/awt/TextField.java, java/awt/color/CMMException.java,
+ 	java/awt/color/ColorSpace.java, java/awt/color/ICC_Profile.java,
+ 	java/awt/color/ProfileDataException.java,
+ 	java/awt/datatransfer/Clipboard.java,
+ 	java/awt/datatransfer/DataFlavor.java,
+ 	java/awt/datatransfer/FlavorMap.java,
+ 	java/awt/datatransfer/SystemFlavorMap.java,
+ 	java/awt/dnd/DragGestureEvent.java,
+ 	java/awt/dnd/DragGestureRecognizer.java,
+ 	java/awt/dnd/DragSource.java, java/awt/dnd/DropTarget.java,
+ 	java/awt/event/WindowEvent.java, java/awt/geom/PathIterator.java,
+ 	java/awt/im/InputMethodHighlight.java,
+ 	java/io/PipedOutputStream.java, java/io/PipedWriter.java,
+ 	java/rmi/server/RMIClassLoader.java: Merged from Classpath.
+ 
+ 	* gnu/awt/j2d/Graphics2DImpl.java (drawImage): Changed type of
+ 	`op' to BufferedImageOp.
+ 
diff -Nrcpad gcc-3.4.3/libjava/HACKING gcc-4.0.0/libjava/HACKING
*** gcc-3.4.3/libjava/HACKING	Fri Feb  8 01:22:47 2002
--- gcc-4.0.0/libjava/HACKING	Mon Aug 30 18:45:10 2004
*************** shared libgcj/classpath file.
*** 35,52 ****
  
  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.
- But note the following (thanks to Bryce McKinlay):
- 
- > Do you know the magic dance I have to do when adding files to Makefile.am
- > so they will appear in Makefile.in and finally in the user generated
- > Makefile?
- Yup, you need the magic libgcj automake ;-)
- 
- <ftp://sources.redhat.com/pub/java/automake-gcj-1.4.tar.gz>
- 
- Install that (don't worry, it should still work for other projects), add your
- files to the Makefile.am, then just type "automake" and it will regenerate the
- Makefile.in. Easy!
  
  Tom Tromey adds:
  If you add a class to java.lang, java.io, or java.util
--- 35,40 ----
diff -Nrcpad gcc-3.4.3/libjava/Makefile.am gcc-4.0.0/libjava/Makefile.am
*** gcc-3.4.3/libjava/Makefile.am	Sat Jan 24 20:47:28 2004
--- gcc-4.0.0/libjava/Makefile.am	Sun Apr 17 06:51:06 2005
***************
*** 1,13 ****
  ## Process this file with automake to produce Makefile.in.
  
! AUTOMAKE_OPTIONS = foreign
  
! ACLOCAL_AMFLAGS = -I .
  
  if TESTSUBDIR
! SUBDIRS = $(DIRLTDL) testsuite gcj include
  else
! SUBDIRS = $(DIRLTDL) gcj include
  endif
  
  # write_entries_to_file - writes each entry in a list
--- 1,79 ----
  ## Process this file with automake to produce Makefile.in.
  
! 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
*************** write_entries_to_file = $(shell rm -f $(
*** 21,47 ****
  
  ## ################################################################
  
  ##
  ## What gets installed, and where.
  ##
  
  if XLIB_AWT
! cond_x_ltlibrary = lib-gnu-awt-xlib.la
! ## We require libstdc++-v3 to be in the same build tree.
! xlib_includes = -I../libstdc++-v3/include -I../libstdc++-v3/include/$(target_alias) -I$(srcdir)/../libstdc++-v3/libsupc++
  else
! cond_x_ltlibrary =
! xlib_includes =
  endif
  
  if GTK_AWT
  cond_gtk_ltlibrary = lib-gnu-java-awt-peer-gtk.la
  else
  cond_gtk_ltlibrary =
  endif
  
! toolexeclib_LTLIBRARIES = libgcj.la lib-org-xml-sax.la lib-org-w3c-dom.la \
!     $(cond_gtk_ltlibrary) $(cond_x_ltlibrary)
  toolexecmainlib_DATA = libgcj.spec
  
  pkgconfigdir = $(libdir)/pkgconfig
--- 87,115 ----
  
  ## ################################################################
  
+ # autoconf2.13's target_alias
+ target_noncanonical = @target_noncanonical@
+ 
  ##
  ## 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
*** 50,63 ****
  jardir = $(datadir)/java
  jar_DATA = libgcj-@gcc_version@.jar
  
  ## FIXME: Using libdir violates GNU coding standards.
  secdir = $(libdir)/security
  ## Where to install default logging property file.
  propdir = $(libdir)
  
  ## For now, only on native systems.  FIXME.
  if NATIVE
! bin_PROGRAMS = jv-convert gij rmic rmiregistry
  endif
  
  bin_SCRIPTS = addr2name.awk
--- 118,150 ----
  jardir = $(datadir)/java
  jar_DATA = libgcj-@gcc_version@.jar
  
+ if JAVA_HOME_SET
+ JAVA_HOME_DIR = $(JAVA_HOME)
+ BOOT_CLASS_PATH_DIR = $(JAVA_HOME)/lib/rt.jar
+ else
+ JAVA_HOME_DIR = $(prefix)
+ BOOT_CLASS_PATH_DIR = $(jardir)/$(jar_DATA)
+ endif
+ 
  ## FIXME: Using libdir violates GNU coding standards.
  secdir = $(libdir)/security
  ## 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
! bin_PROGRAMS = jv-convert gij grmic grmiregistry gcj-dbtool
! 
! ## It is convenient to actually build and install the default database
! ## when gcj-dbtool is available.
! dbexec_DATA = $(db_name)
  endif
  
  bin_SCRIPTS = addr2name.awk
*************** bin_SCRIPTS = addr2name.awk
*** 68,179 ****
  ## Compilers and compilation flags.
  ##
  
! ## CANADIAN is a misnomer.  Really we check to see if we must pick up
! ## the tools from the path.
! if CANADIAN
! if NULL_TARGET
! ## In this case, gcj is found outside the build tree.  However, zip is
! ## found in the build tree.
! ZIP = $(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar
! GCJH = gcjh
! else
! ZIP = jar
! GCJH = $(target_alias)-gcjh
! endif
! else # CANADIAN
! GCJH = $(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh
! ZIP = $(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar
! endif # CANADIAN
  
  ## The compiler with whatever flags we want for both -c and -C
  ## compiles.
  GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated
  
- GCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ_WITH_FLAGS) -fclasspath= -fbootclasspath=$(here) $(JC1FLAGS) -MD -MT $@ -MF $(@:.lo=.d) -c
  GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
  LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
  
- ## We define this because otherwise libtool can be run with different
- ## values of `CXX' and will then get confused and fail to work.  So,
- ## we use --tag explicitly.  Someday automake will be changed to do
- ## this automatically.
- LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
- 
  JAVAC = $(GCJ_WITH_FLAGS) -C
  
  GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  
! WARNINGS = -W -Wall
! ## We need _GNU_SOURCE defined for some Linux builds.  It doesn't hurt
! ## to always define it.
! AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions $(THREADCXXFLAGS) \
! ## Some systems don't allow `$' in identifiers by default, so we force it.
  	-fdollars-in-identifiers \
- ## Detect bugs in the verifier implementation, and maybe other places.
  	-Wswitch-enum \
! 	@LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \
! 	-DPREFIX="\"$(prefix)\"" -DLIBDIR="\"$(libdir)\"" \
! 	-DBOOT_CLASS_PATH="\"$(jardir)/$(jar_DATA)\""
  if USING_GCC
  AM_CFLAGS = @LIBGCJ_CFLAGS@ $(WARNINGS)
  else
  AM_CFLAGS = @LIBGCJ_CFLAGS@
  endif
  
  JCFLAGS = -g
  JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
  
  LIBFFIINCS = @LIBFFIINCS@
  
! INCLUDES = -I$(top_srcdir) -Iinclude -I$(top_srcdir)/include \
! 	$(GCINCS) $(THREADINCS) $(INCLTDL) $(xlib_includes) \
  	$(GCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS)
  
  ## ################################################################
  
  ##
  ## How to build libgcj.a and libgcj.jar
  ##
  
  ## Objects from C++ sources in subdirs.
  nat_files = $(nat_source_files:.cc=.lo)
! x_nat_files = $(x_nat_source_files:.cc=.lo)
! ## Objects from C sources in subdirs.
! c_files = $(c_source_files:.c=.lo)
! extra_cc_files = $(extra_cc_source_files:.cc=.lo)
! ## Objects from gtk-related C sources in subdirs.
! gtk_c_files = $(gtk_c_source_files:.c=.lo)
! ## Objects from Java sources in subdirs.
! javao_files = $(java_source_files:.java=.lo) \
! 	$(built_java_source_files:.java=.lo)
! x_javao_files = $(x_java_source_files:.java=.lo)
! 
! libgcj_la_SOURCES = prims.cc jni.cc exception.cc \
! 	resolve.cc defineclass.cc interpret.cc verify.cc \
! 	$(nat_source_files)
! EXTRA_libgcj_la_SOURCES = boehm.cc nogc.cc posix-threads.cc no-threads.cc \
! 	win32-threads.cc posix.cc win32.cc $(c_source_files) \
! 	$(extra_cc_source_files) $(java_source_files) $(built_java_source_files)
! libgcj_la_DEPENDENCIES = libgcj-@gcc_version@.jar $(javao_files) \
! 	$(c_files) $(extra_cc_files) $(GCOBJS) $(THREADOBJS) \
!        $(PLATFORMOBJS) $(LIBLTDL) $(LIBFFI) $(ZLIBS) $(GCLIBS)
  
- libgcj_la_LIBADD = $(javao_files) $(c_files) $(extra_cc_files) $(GCOBJS) \
- 	$(THREADOBJS) $(PLATFORMOBJS)
  # Include THREADLIBS here to ensure that the correct version of
  # certain linuxthread functions get linked:
  libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(THREADLIBS) \
  	$(LIBLTDL) $(SYS_ZLIBS) \
- ## The mysterious backslash is consumed by make.
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
  libgcj_la_LINK = $(LIBLINK)
  
  # Gtk/Cairo JNI sources.
  if GTK_CAIRO
  gtk_cairo_c_source_files = \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c \
- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c \
  jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
  else
  gtk_cairo_c_source_files = 
--- 155,297 ----
  ## Compilers and compilation flags.
  ##
  
! GCJH = @GCJH@
! ZIP = @ZIP@
  
  ## The compiler with whatever flags we want for both -c and -C
  ## 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@
  
! WARNINGS = -Wextra -Wall
! ## Some systems don't allow `$' in identifiers by default, so we force
! ## it with -fdollars-in-identifiers.  -Wswitch-enum detects bugs in
! ## the verifier implementation, and maybe other places.  We need
! ## _GNU_SOURCE defined for some Linux builds.  It doesn't hurt to
! ## always define it.  Some systems, including Linux, need
! ## -D_FILE_OFFSET_BITS=64 to enable > 2GB file support.
! AM_CXXFLAGS = \
! 	-fno-rtti \
! 	-fnon-call-exceptions \
! 	$(THREADCXXFLAGS) \
  	-fdollars-in-identifiers \
  	-Wswitch-enum \
! 	-D_FILE_OFFSET_BITS=64 \
! 	@LIBGCJ_CXXFLAGS@ \
! 	@X_CFLAGS@ \
! 	$(WARNINGS) \
! 	-D_GNU_SOURCE \
! 	-DPREFIX="\"$(prefix)\"" \
! 	-DLIBDIR="\"$(libdir)\"" \
!         -DJAVA_HOME="\"$(JAVA_HOME_DIR)\"" \
!         -DBOOT_CLASS_PATH="\"$(BOOT_CLASS_PATH_DIR)\"" \
! 	-DJAVA_EXT_DIRS="\"$(jardir)/ext\"" \
! 	-DGCJ_ENDORSED_DIRS="\"$(jardir)/gcj-endorsed\"" \
! 	-DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
! 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\"" \
! 	-DTOOLEXECLIBDIR="\"$(toolexeclibdir)\""
! 
! AM_GCJFLAGS = \
! 	@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.
+ PEDANTIC_CFLAGS = -ansi -pedantic -Wall -Wno-long-long
+ 
  JCFLAGS = -g
  JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
  
  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
+ 
  ## ################################################################
  
  ##
  ## How to build libgcj.a and libgcj.jar
  ##
  
+ libgij_la_SOURCES = gij.cc
+ libgij_la_DEPENDENCIES = libgcj.la libgcj.spec
+ ## See jv_convert_LDADD.
+ libgij_la_LIBADD = -L$(here)/.libs libgcj.la
+ ## The mysterious backslash in the grep pattern is consumed by make.
+ 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) $(java_source_files) \
+ 	$(built_java_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 = \
+ 	gnu-xml.lo javax-imageio.lo \
+ 	javax-xml.lo gnu-java-beans.lo \
+ 	external/sax/libsax-gcj.la \
+ 	external/w3c_dom/libw3c-gcj.la
+ 
+ noinst_LTLIBRARIES = libgcj0_convenience.la
+ 
+ libgcj_la_SOURCES =
+ 
  ## Objects from C++ sources in subdirs.
  nat_files = $(nat_source_files:.cc=.lo)
! xlib_nat_files = $(xlib_nat_source_files:.cc=.lo)
  
  # Include THREADLIBS here to ensure that the correct version of
  # certain linuxthread functions get linked:
+ ## The mysterious backslash in the grep pattern is consumed by make.
  libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(THREADLIBS) \
  	$(LIBLTDL) $(SYS_ZLIBS) \
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
+ libgcj_la_LIBADD = \
+ 	libgcj0_convenience.la \
+ 	$(LIBFFI) $(ZLIBS) $(GCLIBS) $(propertyo_files)
+ 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)
  
+ 
+ ## The .db file.  This rule is only used for native builds, so it is
+ ## safe to invoke gcj-dbtool.
+ $(db_name): gcj-dbtool$(EXEEXT)
+ ## In case it exists already.
+ 	@rm -f $(db_name)
+ ## We don't actually care if it fails -- if it does, just make an
+ ## empty file.  This is simpler than trying to discover when mmap is
+ ## 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
*** 182,192 ****
  ## Gtk JNI sources.
  gtk_c_source_files = \
  $(gtk_cairo_c_source_files) \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \
  jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
  jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.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_GtkCheckboxMenuItemPeer.c \
  jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c \
  jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c \
--- 300,314 ----
  ## 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_GtkCo
*** 195,205 ****
  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_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_GtkMainThread.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_GtkPanelPeer.c \
--- 317,329 ----
  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_GtkTe
*** 211,233 ****
  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/gthread-jni.c \
! jni/classpath/jcl.c \
! jni/classpath/jnilink.c	\
! jni/classpath/native_state.c \
! jni/classpath/primlib.c
  
  ## Java sources for Gtk peers.
  gtk_awt_peer_sources = \
! gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java \
! gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java \
  gnu/java/awt/peer/gtk/GdkFontMetrics.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/GdkPixbufDecoder.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/GtkCheckboxGroupPeer.java	\
--- 335,358 ----
  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_sources = \
! 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/GtkContainerPeer.j
*** 240,253 ****
  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/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 \
--- 365,376 ----
*************** gnu/java/awt/peer/gtk/GtkTextAreaPeer.ja
*** 261,424 ****
  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
  
- gtk_c_headers = $(patsubst %.java,jniinclude/%.h,$(subst /,_,$(gtk_awt_peer_sources)))
  
! $(gtk_c_headers): $(gtk_awt_peer_sources)
  	@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
  
  lib_gnu_java_awt_peer_gtk_la_SOURCES = \
- $(gtk_awt_peer_sources) \
  $(gtk_c_source_files) \
  jni/gtk-peer/gthread-jni.h \
  jni/gtk-peer/gtkpeer.h \
! jni/classpath/jcl.h \
! jni/classpath/jnilink.h	\
! jni/classpath/native_state.h \
! jni/classpath/primlib.h
  
! lib_gnu_java_awt_peer_gtk_la_LIBADD = $(GTK_LIBS) $(GLIB_LIBS) $(LIBART_LIBS) $(CAIRO_LIBS) $(PANGOFT2_LIBS)
  lib_gnu_java_awt_peer_gtk_la_LDFLAGS = \
! ## The mysterious backslash is consumed by make.
! 	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
! 
! lib_org_w3c_dom_la_SOURCES = org/w3c/dom/Attr.java \
! org/w3c/dom/CDATASection.java \
! org/w3c/dom/CharacterData.java \
! org/w3c/dom/Comment.java \
! org/w3c/dom/DOMException.java \
! org/w3c/dom/DOMImplementation.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/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/ranges/DocumentRange.java \
! org/w3c/dom/ranges/Range.java \
! org/w3c/dom/ranges/RangeException.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
! ## See jv_convert_LDADD.
! lib_org_w3c_dom_la_LIBADD = -L$(here)/.libs libgcj.la
! lib_org_w3c_dom_la_LDFLAGS = -rpath $(toolexeclibdir) \
! ## The mysterious backslash is consumed by make.
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version`
  
! lib_org_xml_sax_la_SOURCES = org/xml/sax/ext/DeclHandler.java \
! org/xml/sax/ext/LexicalHandler.java \
! 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/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
  ## See jv_convert_LDADD.
! lib_org_xml_sax_la_LIBADD = -L$(here)/.libs libgcj.la
! lib_org_xml_sax_la_LDFLAGS = -rpath $(toolexeclibdir) \
! ## The mysterious backslash is consumed by make.
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version`
  
! lib_gnu_awt_xlib_la_SOURCES = $(x_nat_source_files)
! EXTRA_lib_gnu_awt_xlib_la_SOURCES = $(x_java_source_files)
! lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-@gcc_version@.jar $(x_javao_files)
! lib_gnu_awt_xlib_la_LIBADD = $(x_javao_files)
  lib_gnu_awt_xlib_la_LDFLAGS = ../libstdc++-v3/src/libstdc++.la \
  	@X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \
          -rpath $(toolexeclibdir) \
! ## The mysterious backslash is consumed by make.
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version`
  lib_gnu_awt_xlib_la_LINK = $(LIBLINK)
  
  all_java_source_files = \
      $(java_source_files) \
      $(built_java_source_files) \
-     $(lib_org_xml_sax_la_SOURCES) \
-     $(lib_org_w3c_dom_la_SOURCES) \
      $(gtk_awt_peer_sources) \
!     $(x_java_source_files)
  
  all_java_class_files = $(all_java_source_files:.java=.class)
  
  if ONESTEP
  
  # Compile all classfiles in one go.
  
! libgcj-@gcc_version@.jar: $(all_java_source_files)
! 	-@rm -f libgcj-@gcc_version@.jar
  	@echo Compiling Java sourcefiles...
  	@: $(call write_entries_to_file,$?,libgcj.sourcelist)
! 	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(here):$(srcdir) -d $(here) @libgcj.sourcelist
! ## Note that we explicitly want to include directory information.
! 	find java gnu javax org -type d -o -type f -name '*.class' | \
! 	  sed -e '/\/\./d' -e '/\/xlib/d' | \
! 	  $(ZIP) cfM0E@ $@
! 
! # This next rule seems backward, but reflects the fact
! # that 1) all classfiles are compiled in one go when the
! # libgcj jarfile is built and 2) anything which depends
! # on a particular .class file must wait until the jarfile
! # is built.
! $(all_java_class_files): libgcj-@gcc_version@.jar
  
  else # !ONESTEP
  
  # Compile each classfile individually.
  
  .java.class:
! 	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(here):$(srcdir) -d $(here) $<
  
! libgcj-@gcc_version@.jar: $(all_java_class_files)
! 	-@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' | \
! 	  sed -e '/\/\./d' -e '/\/xlib/d' | \
! 	  $(ZIP) cfM0E@ $@
  
  endif
  
! # Note: The libtool objects are removed by mostlyclean-local
! # because of command-line-length issues.
! MOSTLYCLEANFILES = $(nat_headers) $(x_nat_headers)
  
! CLEANFILES = libgcj-@gcc_version@.jar
  
  mostlyclean-local:
  ## Use libtool rm to remove each libtool object
  	find . -name '*.lo' -print | xargs $(LIBTOOL) rm -f
  
  clean-local:
  ## Remove every .class file that was created.
--- 384,614 ----
  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_sources)))
! 
! 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_java_source_files) \
! 	$(xlib_nat_source_files)
! lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-@gcc_version@.jar libgcj.la libgcj.spec
! lib_gnu_awt_xlib_la_LIBADD = $(xlib_javao_files)
! ## We require libstdc++-v3 to be in the same build tree.
! lib_gnu_awt_xlib_la_CPPFLAGS = \
! 	$(AM_CPPFLAGS) \
! 	-I../libstdc++-v3/include \
! 	-I../libstdc++-v3/include/$(target_noncanonical) \
! 	-I$(srcdir)/../libstdc++-v3/libsupc++
! ## The mysterious backslash in the grep pattern is consumed by make.
  lib_gnu_awt_xlib_la_LDFLAGS = ../libstdc++-v3/src/libstdc++.la \
  	@X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \
          -rpath $(toolexeclibdir) \
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC)
  lib_gnu_awt_xlib_la_LINK = $(LIBLINK)
  
  all_java_source_files = \
      $(java_source_files) \
      $(built_java_source_files) \
      $(gtk_awt_peer_sources) \
!     $(xlib_java_source_files) \
!     $(gnu_xml_source_files) \
!     $(javax_imageio_source_files) \
!     $(javax_xml_source_files) \
!     $(gnu_java_beans_source_files)
  
  all_java_class_files = $(all_java_source_files:.java=.class)
  
+ all_property_files = $(property_files) \
+     java/util/logging/logging.properties
+ 
+ ## 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$$//"`
+ 
  if ONESTEP
  
  # Compile all classfiles in one go.
  
! classes.stamp: $(all_java_source_files) gnu/gcj/tools/gcj_dbtool/Main.java
  	@echo Compiling Java sourcefiles...
  	@: $(call write_entries_to_file,$?,libgcj.sourcelist)
! 	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(BOOTCLASSPATH) -d $(here) @libgcj.sourcelist
! 	echo > classes.stamp
! # This next rule seems backward, but reflects the fact that 1) all
! # classfiles are compiled in one go when classes.stamp is built and 2)
! # anything which depends on a particular .class file must wait until
! # this file is built.
! $(all_java_class_files) gnu/gcj/tools/gcj_dbtool/Main.class: classes.stamp
  
  else # !ONESTEP
  
  # Compile each classfile individually.
  
  .java.class:
! 	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(BOOTCLASSPATH) -d $(here) $<
  
! classes.stamp: $(all_java_class_files) $(all_property_files)
! 	echo > classes.stamp
  
  endif
  
! 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
  
  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.
*************** distclean-local:
*** 430,499 ****
  
  # Just remove the objects from C++ sources, for testing the C++ compiler.
  clean-nat:
! 	rm -f $(nat_files) $(x_nat_files)
! 
! SUFFIXES = .class .java .h
! 
! .class.lo:
! 	$(GCJCOMPILE) -o $@ $<
! 
! .java.lo:
! 	$(GCJCOMPILE) -o $@ $<
! 
! ## FIXME: For the .o files in subdirs, use a special rule.  The
! ## standard automake rule can't be overridden (this is a bug in
! ## automake), and it also won't put the .o files into subdirs.
! $(nat_files) $(x_nat_files): %.lo: %.cc
! 	@echo '$(LTCXXCOMPILE) -MD -MT $@ -MF $(@:.lo=.pp) -c -o $@ $<'; \
! 	$(LTCXXCOMPILE) -MD -MT $@ -MF $(@:.lo=.pp) -c -o $@ $<
! 	@-mv $(@:.lo=.pp) $(@:.lo=.d)
! 
! ## FIXME: see above
! $(c_files): %.lo: %.c
! 	$(LTCOMPILE) -c -o $@ $<
! 
! ## A special rule for interpret.lo for the time being.  Our current
! ## approach to stack-trace handling is fragile and will not work with
! ## unit-at-a-time.  So, for now we disable it.  This will be fixed by
! ## a larger patch in the future.
! interpret.lo: interpret.cc
! 	$(LTCXXCOMPILE) -fno-unit-at-a-time -c -o $@ $<
! 
! $(extra_cc_files): %.lo: %.cc
! 	$(LTCXXCOMPILE) -c -o $@ $<
! 
! $(c_files): java/lang/fdlibm.h java/lang/ieeefp.h java/lang/mprec.h
! 
! ## FIXME: see above
! $(gtk_c_files): %.lo: %.c
! 	$(LTCOMPILE) -c -Ijniinclude -I$(srcdir)/jni/classpath -I$(srcdir)/jni/gtk-peer \
! 	$(GTK_CFLAGS) $(LIBART_CFLAGS) $(CAIRO_LIBS) $(PANGOFT2_LIBS) -o $@ $<
! 
! $(gtk_c_files): $(gtk_c_headers)
  
! ## FIXME: see above.
  
  ## Note: we omit StackTrace here, since it has an explicit rule a bit
  ## later, and GNU make will warn in this case.
! $(filter-out gnu/gcj/runtime/StackTrace.lo, $(javao_files)) $(x_javao_files) $(lib_org_w3c_dom_la_OBJECTS) $(lib_org_xml_sax_la_OBJECTS): %.lo: %.java
! 	$(GCJCOMPILE) -o $@ $<
! 
! $(gtk_awt_peer_sources:.java=.lo): %.lo: %.java
! 	$(GCJCOMPILE) -fjni -o $@ $<
  
  ## 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
! 	$(GCJCOMPILE) -fno-optimize-sibling-calls -o $@ $<
  
! ## 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_la_LIBADD),libgcj.objectlist)
  	$(libgcj_la_LINK) -objectlist libgcj.objectlist \
! 	@GCLIBS@ @LIBFFI@ @ZLIBS@ \
  	-rpath $(toolexeclibdir) $(libgcj_la_LDFLAGS) $(LIBS)
  
  lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPENDENCIES)
--- 620,647 ----
  
  # Just remove the objects from C++ sources, for testing the C++ compiler.
  clean-nat:
! 	rm -f $(nat_files) $(xlib_nat_files)
  
! SUFFIXES = .class .java .h .properties
  
  ## Note: we omit StackTrace here, since it has an explicit rule a bit
  ## later, and GNU make will warn in this case.
! $(filter-out gnu/gcj/runtime/StackTrace.lo, $(javao_files)) $(xlib_javao_files): %.lo: %.java
! 	$(LTGCJCOMPILE) -o $@ -c $<
  
  ## 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)
*************** lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_
*** 505,538 ****
  ## ################################################################
  
  ##
  ## How to build header files.
  ##
  
! .class.h:
  	$(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 \
  	java/lang/reflect/Proxy$$ProxyData.h \
  	java/lang/reflect/Proxy$$ProxyType.h \
  	gnu/java/net/PlainSocketImpl$$SocketInputStream.h \
! 	gnu/java/net/PlainSocketImpl$$SocketOutputStream.h
  
! nat_headers = $(ordinary_nat_headers) $(inner_nat_headers)
  nat_headers_install = $(ordinary_nat_headers)
  
! x_nat_headers = $(x_java_source_files:.java=.h)
  
! $(ordinary_nat_headers) $(x_nat_headers): %.h: %.class
  
  java/lang/ClassLoader.h: java/lang/ClassLoader.class
  	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
! 		-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
--- 653,758 ----
  ## ################################################################
  
  ##
+ ## 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_sources)
+ ## 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`
+ 
+ ## ################################################################
+ 
+ ##
  ## 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 \
+ 	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)
  
! $(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
*************** java/lang/Thread.h: java/lang/Thread.cla
*** 540,584 ****
  		-prepend 'class _Jv_JNIEnv;' \
  		-prepend '#define _JV_NOT_OWNER 1' \
  		-prepend '#define _JV_INTERRUPTED 2' \
! 		-friend '_Jv_JNIEnv * _Jv_GetCurrentJNIEnv ();' \
! 		-friend 'void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *env);' \
! 		-friend 'void _Jv_ThreadRun (java::lang::Thread* thread);' \
! 		-friend 'jint _Jv_AttachCurrentThread(java::lang::Thread* thread);' \
! 		-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) \
! 	    -friend 'jchar* _Jv_GetStringChars (jstring str);' \
! 	    -friend 'jstring* _Jv_StringFindSlot (jchar*, jint, jint);' \
! 	    -friend 'jstring* _Jv_StringGetSlot (jstring);' \
! 	    -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) \
! 	    -friend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \
  	    -friend 'class java::lang::Class;' \
- 	    -friend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    $(basename $<)
  
  java/lang/reflect/Field.h: java/lang/reflect/Field.class
  	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
! 	    -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) \
! 	    -friend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \
  	    -friend 'class java::lang::Class;' \
  	    -friend 'class java::io::ObjectInputStream;' \
- 	    -friend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    $(basename $<)
  
  java/lang/reflect/Proxy.h: java/lang/reflect/Proxy.class
--- 760,823 ----
  		-prepend 'class _Jv_JNIEnv;' \
  		-prepend '#define _JV_NOT_OWNER 1' \
  		-prepend '#define _JV_INTERRUPTED 2' \
! 		-prepend '_Jv_JNIEnv * _Jv_GetCurrentJNIEnv ();' \
! 		-prepend 'void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *env);' \
! 		-prepend 'void _Jv_ThreadRun (java::lang::Thread* thread);' \
! 		-prepend 'jint _Jv_AttachCurrentThread(java::lang::Thread* thread);' \
! 		-prepend 'java::lang::Thread* _Jv_AttachCurrentThread (jstring name, java::lang::ThreadGroup* group);' \
! 		-prepend 'java::lang::Thread* _Jv_AttachCurrentThreadAsDaemon (jstring name, java::lang::ThreadGroup* group);' \
! 		-prepend 'jint _Jv_DetachCurrentThread ();' \
! 		-friend '_Jv_JNIEnv * ::_Jv_GetCurrentJNIEnv ();' \
! 		-friend 'void ::_Jv_SetCurrentJNIEnv (_Jv_JNIEnv *env);' \
! 		-friend 'void ::_Jv_ThreadRun (java::lang::Thread* thread);' \
! 		-friend 'jint (::_Jv_AttachCurrentThread) (java::lang::Thread* thread);' \
! 		-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);' \
! 	    -prepend 'jstring _Jv_NewStringUtf8Const (_Jv_Utf8Const* str);' \
! 	    -prepend 'jstring _Jv_NewStringLatin1 (const char*, jsize);' \
! 	    -prepend 'jstring _Jv_AllocString (jsize);' \
! 	    -friend 'jchar* ::_Jv_GetStringChars (jstring str);' \
! 	    -friend 'jstring* ::_Jv_StringFindSlot (jchar*, jint, jint);' \
! 	    -friend 'jstring* ::_Jv_StringGetSlot (jstring);' \
! 	    -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
*************** java/lang/reflect/Proxy$$ProxyType.h: ja
*** 593,599 ****
  	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/lang/reflect/Proxy$$ProxyType'
  
! gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class
  	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -friend 'class ::java::lang::ClassLoader;' \
  	    $(basename $<)
--- 832,838 ----
  	$(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/ObjectOutputStream$$PutField.h: 
*** 606,611 ****
--- 845,862 ----
  	$(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$$SocketOutp
*** 614,619 ****
--- 865,883 ----
  	$(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.
  extra_headers = java/lang/Object.h java/lang/Class.h
  
*************** install-data-local:
*** 630,639 ****
  	@: $(call write_entries_to_file,$(nat_headers_install) $(extra_headers),tmp-ilist)
  	@cat tmp-ilist | while read f; do \
  	  d="`echo $$f | sed -e 's,/[^/]*$$,,'`"; \
! 	  $(mkinstalldirs) $(DESTDIR)$(includedir)/$$d; \
  	  if test -f $(srcdir)/$$f; then p=$(srcdir)/$$f; else p=$$f; fi; \
! 	  echo " $(INSTALL_DATA) $$p $(DESTDIR)$(includedir)/$$f"; \
! 	  $(INSTALL_DATA) $$p $(DESTDIR)$(includedir)/$$f; \
  	done
  	-@rm -f tmp-ilist
  ## FIXME: the obvious approach using lib_DATA doesn't work with
--- 894,903 ----
  	@: $(call write_entries_to_file,$(nat_headers_install) $(extra_headers),tmp-ilist)
  	@cat tmp-ilist | while read f; do \
  	  d="`echo $$f | sed -e 's,/[^/]*$$,,'`"; \
! 	  $(mkinstalldirs) $(DESTDIR)$(gxx_include_dir)/$$d; \
  	  if test -f $(srcdir)/$$f; then p=$(srcdir)/$$f; else p=$$f; fi; \
! 	  echo " $(INSTALL_DATA) $$p $(DESTDIR)$(gxx_include_dir)/$$f"; \
! 	  $(INSTALL_DATA) $$p $(DESTDIR)$(gxx_include_dir)/$$f; \
  	done
  	-@rm -f tmp-ilist
  ## FIXME: the obvious approach using lib_DATA doesn't work with
*************** install-data-local:
*** 643,656 ****
  	  echo " $(INSTALL_DATA) $(srcdir)/java/security/$$f $(DESTDIR)$(secdir)/$$f"; \
  	  $(INSTALL_DATA) $(srcdir)/java/security/$$f $(DESTDIR)$(secdir)/$$f; \
  	done
- ## Install inner class headers.
- 	$(INSTALL_DATA) 'java/io/ObjectOutputStream$$PutField.h' $(DESTDIR)$(includedir)/java/io/
- 	$(INSTALL_DATA) 'java/io/ObjectInputStream$$GetField.h' $(DESTDIR)$(includedir)/java/io/
- 	$(INSTALL_DATA) 'java/lang/reflect/Proxy$$ProxyData.h' $(DESTDIR)$(includedir)/java/lang/reflect/
- 	$(INSTALL_DATA) 'java/lang/reflect/Proxy$$ProxyType.h' $(DESTDIR)$(includedir)/java/lang/reflect/
- 	$(INSTALL_DATA) 'gnu/java/net/PlainSocketImpl$$SocketInputStream.h' $(DESTDIR)$(includedir)/gnu/java/net/
- 	$(INSTALL_DATA) 'gnu/java/net/PlainSocketImpl$$SocketOutputStream.h' $(DESTDIR)$(includedir)/gnu/java/net/
  	$(INSTALL_DATA) $(srcdir)/java/util/logging/logging.properties $(DESTDIR)$(propdir)/logging.properties
  
  ## ################################################################
  
--- 907,926 ----
  	  echo " $(INSTALL_DATA) $(srcdir)/java/security/$$f $(DESTDIR)$(secdir)/$$f"; \
  	  $(INSTALL_DATA) $(srcdir)/java/security/$$f $(DESTDIR)$(secdir)/$$f; \
  	done
  	$(INSTALL_DATA) $(srcdir)/java/util/logging/logging.properties $(DESTDIR)$(propdir)/logging.properties
+ ## Install inner class headers.
+ 	$(INSTALL_DATA) 'java/io/ObjectOutputStream$$PutField.h' $(DESTDIR)$(gxx_include_dir)/java/io/
+ 	$(INSTALL_DATA) 'java/io/ObjectInputStream$$GetField.h' $(DESTDIR)$(gxx_include_dir)/java/io/
+ 	$(INSTALL_DATA) 'java/nio/channels/Pipe$$SinkChannel.h' $(DESTDIR)$(gxx_include_dir)/java/nio/channels/
+ 	$(INSTALL_DATA) 'java/nio/channels/Pipe$$SourceChannel.h' $(DESTDIR)$(gxx_include_dir)/java/nio/channels/
+ 	$(INSTALL_DATA) 'java/lang/reflect/Proxy$$ProxyData.h' $(DESTDIR)$(gxx_include_dir)/java/lang/reflect/
+ 	$(INSTALL_DATA) 'java/lang/reflect/Proxy$$ProxyType.h' $(DESTDIR)$(gxx_include_dir)/java/lang/reflect/
+ 	$(INSTALL_DATA) 'gnu/java/net/PlainSocketImpl$$SocketInputStream.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/net/
+ 	$(INSTALL_DATA) 'gnu/java/net/PlainSocketImpl$$SocketOutputStream.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/net/
+ 	$(INSTALL_DATA) 'gnu/java/nio/PipeImpl$$SinkChannelImpl.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/nio/
+ 	$(INSTALL_DATA) 'gnu/java/nio/PipeImpl$$SourceChannelImpl.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/nio/
+ ## Don't install java/nio/DirectByteBufferImpl$$ReadWrite.h here. It's for internal use only.
+ 
  
  ## ################################################################
  
*************** write-entries-to-file-check:
*** 708,720 ****
  if NATIVE
  if MAINTAINER_MODE
  noinst_PROGRAMS = gen-from-JIS
  endif
  endif 
  
- CONVERT_DIR = gnu/gcj/convert
  
  jv_convert_SOURCES =
- EXTRA_jv_convert_SOURCES = $(convert_source_files)
  ## 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.
--- 978,1040 ----
  if NATIVE
  if MAINTAINER_MODE
  noinst_PROGRAMS = gen-from-JIS
+ 
+ gen_from_JIS_SOURCES = \
+ 	gnu/gcj/convert/gen-from-JIS.c \
+ 	gnu/gcj/convert/make-trie.c
+ 
+ gen_from_JIS_DEPENDENCIES = \
+ 	gnu/gcj/convert/JIS0201.h \
+ 	gnu/gcj/convert/JIS0208.h \
+ 	gnu/gcj/convert/JIS0212.h
+ 
+ $(srcdir)/gnu/gcj/convert/JIS0208_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
+ 	 ./gen-from-JIS JIS0208 >$(srcdir)/gnu/gcj/convert/JIS0208_to_Unicode.cc
+ 
+ $(srcdir)/gnu/gcj/convert/JIS0212_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
+ 	 ./gen-from-JIS JIS0212 >$(srcdir)/gnu/gcj/convert/JIS0212_to_Unicode.cc
+ 
+ $(srcdir)/gnu/gcj/convert/Unicode_to_JIS.cc: ./gen-from-JIS$(EXEEXT)
+ 	 ./gen-from-JIS toJIS >$(srcdir)/gnu/gcj/convert/Unicode_to_JIS.cc
+ 
+ # The Unicode consortium does not permit re-distributing the file JIS0201.TXT.
+ # You can get it from
+ # ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/
+ 
+ $(srcdir)/gnu/gcj/convert/JIS0201.h: # gnu/gcj/convert/JIS0201.TXT
+ 	echo '/* This file is automatically generated from Unicode tables */' > tmp-0201; \
+ 	tr  -d '\r' <$(srcdir)/gnu/gcj/convert/JIS0201.TXT \
+ 	| sed -n -e 's|\(0x..\).*\(0x....\).*#\(.*\)$$|MAP(0x00, \1, \2)  /*\3 */|p' \
+ 	>> tmp-0201; \
+ 	mv tmp-0201 $(srcdir)/gnu/gcj/convert/JIS0201.h
+ 
+ # The Unicode consortium does not permit re-distributing the file JIS0208.TXT.
+ # You can get it from
+ # ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/
+ 
+ $(srcdir)/gnu/gcj/convert/JIS0208.h: # gnu/gcj/convert/JIS0208.TXT
+ 	echo '/* This file is automatically generated from Unicode tables */' > tmp-0208; \
+ 	tr  -d '\r' <$(srcdir)/gnu/gcj/convert/JIS0208.TXT \
+ 	| sed -n -e 's|\(0x....\).*0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\2, 0x\3, \4)  /*\5 */|p' \
+ 	>> tmp-0208; \
+ 	mv tmp-0208 $(srcdir)/gnu/gcj/convert/JIS0208.h
+ 
+ # The Unicode consortium does not permit re-distributing the file JIS0212.TXT.
+ # You can get it from
+ # ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/
+ 
+ $(srcdir)/gnu/gcj/convert/JIS0212.h: # gnu/gcj/convert/JIS0212.TXT
+ 	echo '/* This file is automatically generated from Unicode tables */' > tmp-0212; \
+ 	tr  -d '\r' <$(srcdir)/gnu/gcj/convert/JIS0212.TXT \
+ 	| sed -n -e 's|0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\1, 0x\2, \3)  /*\4 */|p' \
+ 	>> tmp-0212; \
+ 	mv tmp-0212 $(srcdir)/gnu/gcj/convert/JIS0212.h
+ 
  endif
  endif 
  
  
  jv_convert_SOURCES =
  ## 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.
*************** jv_convert_LINK = $(GCJLINK)
*** 731,842 ****
  jv_convert_LDADD = -L$(here)/.libs libgcj.la
  ## Depend on the spec file to make sure it is up to date before
  ## linking this program.
! jv_convert_DEPENDENCIES = $(convert_source_files:.java=.lo) \
! 	libgcj.la libgcj.spec
  
! gij_SOURCES = gij.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.
  gij_LDFLAGS = -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
  gij_LINK = $(GCJLINK)
  ## See jv_convert_LDADD.
! gij_LDADD = -L$(here)/.libs libgcj.la
  ## Depend on the spec file to make sure it is up to date before
  ## linking this program.
! gij_DEPENDENCIES = libgcj.la libgcj.spec
  
- rmic_SOURCES =
  ## This is a dummy definition.
! EXTRA_rmic_SOURCES = $(rmi_java_source_files)
! rmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \
  	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
! rmic_LINK = $(GCJLINK)
  ## See jv_convert_LDADD.
! rmic_LDADD = -L$(here)/.libs libgcj.la
  ## Depend on the spec file to make sure it is up to date before
  ## linking this program.
! rmic_DEPENDENCIES = libgcj.la libgcj.spec
  
- rmiregistry_SOURCES =
  ## This is a dummy definition.
! EXTRA_rmiregistry_SOURCES = $(rmi_java_source_files)
! rmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \
  	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
! rmiregistry_LINK = $(GCJLINK)
  ## See jv_convert_LDADD.
! rmiregistry_LDADD = -L$(here)/.libs libgcj.la
  ## Depend on the spec file to make sure it is up to date before
  ## linking this program.
! rmiregistry_DEPENDENCIES = libgcj.la libgcj.spec
! 
! # The Unicode consortium does not permit re-distributing the file JIS0201.TXT.
! # You can get it from ftp://ftp.unicode.org/Public/MAPPINGS/EASTASIA/JIS/.
! 
! $(srcdir)/$(CONVERT_DIR)/JIS0201.h:  # $(CONVERT_DIR)/JIS0201.TXT
! 	echo '/* This file is automatically generated from Unicode tables */' > tmp-0201; \
! 	tr  -d '\r' <$(CONVERT_DIR)/JIS0201.TXT \
! 	| sed -n -e 's|\(0x..\).*\(0x....\).*#\(.*\)$$|MAP(0x00, \1, \2)  /*\3 */|p' \
! 	>> tmp-0201; \
! 	mv tmp-0201 $(srcdir)/$(CONVERT_DIR)/JIS0201.h
! 
! # The Unicode consortium does not permit re-distributing the file JIS0208.TXT.
! # You can get it from ftp://ftp.unicode.org/Public/MAPPINGS/EASTASIA/JIS/.
! 
! $(srcdir)/$(CONVERT_DIR)/JIS0208.h:  # $(CONVERT_DIR)/JIS0208.TXT
! 	echo '/* This file is automatically generated from Unicode tables */' > tmp-0208; \
! 	tr  -d '\r' <$(CONVERT_DIR)/JIS0208.TXT \
! 	| sed -n -e 's|\(0x....\).*0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\2, 0x\3, \4)  /*\5 */|p' \
! 	>> tmp-0208; \
! 	mv tmp-0208 $(srcdir)/$(CONVERT_DIR)/JIS0208.h
! 
! # The Unicode consortium does not permit re-distributing the file JIS0212.TXT.
! # You can get it from ftp://ftp.unicode.org/Public/MAPPINGS/EASTASIA/JIS/.
! 
! $(srcdir)/$(CONVERT_DIR)/JIS0212.h:  # $(CONVERT_DIR)/JIS0212.TXT
! 	echo '/* This file is automatically generated from Unicode tables */' > tmp-0212; \
! 	tr  -d '\r' <$(CONVERT_DIR)/JIS0212.TXT \
! 	| sed -n -e 's|0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\1, 0x\2, \3)  /*\4 */|p' \
! 	>> tmp-0212; \
! 	mv tmp-0212 $(srcdir)/$(CONVERT_DIR)/JIS0212.h
! 
! 
! gen_from_JIS_SOURCES =
! EXTRA_gen_from_JIS_SOURCES = $(srcdir)/$(CONVERT_DIR)/gen-from-JIS.c \
! 		$(srcdir)/$(CONVERT_DIR)/make-trie.c \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0201.h \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0208.h \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0212.h
! gen_from_JIS_LDADD = $(CONVERT_DIR)/gen-from-JIS.o $(CONVERT_DIR)/make-trie.o
! gen_from_JIS_DEPENDENCIES = $(CONVERT_DIR)/gen-from-JIS.o \
! 		$(CONVERT_DIR)/make-trie.o
! 
! $(CONVERT_DIR)/gen-from-JIS.o: $(srcdir)/$(CONVERT_DIR)/gen-from-JIS.c \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0201.h \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0208.h \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0212.h
! 	$(COMPILE) -c -o $(CONVERT_DIR)/gen-from-JIS.o \
! 		$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.c
! 
! $(CONVERT_DIR)/make-trie.o: $(srcdir)/$(CONVERT_DIR)/make-trie.c
! 	$(COMPILE) -c -o $(CONVERT_DIR)/make-trie.o \
! 		$(srcdir)/$(CONVERT_DIR)/make-trie.c
! 
! if NATIVE
! if MAINTAINER_MODE
! 
! $(srcdir)/$(CONVERT_DIR)/JIS0208_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
! 	 ./gen-from-JIS JIS0208>$(srcdir)/$(CONVERT_DIR)/JIS0208_to_Unicode.cc
! 
! $(srcdir)/$(CONVERT_DIR)/JIS0212_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
! 	 ./gen-from-JIS JIS0212>$(srcdir)/$(CONVERT_DIR)/JIS0212_to_Unicode.cc
! 
! $(srcdir)/$(CONVERT_DIR)/Unicode_to_JIS.cc: ./gen-from-JIS$(EXEEXT)
! 	 ./gen-from-JIS toJIS>$(srcdir)/$(CONVERT_DIR)/Unicode_to_JIS.cc
! 
! endif # MAINTAINER_MODE
! endif # NATIVE
! 
  
  ## ################################################################
  
--- 1051,1111 ----
  jv_convert_LDADD = -L$(here)/.libs libgcj.la
  ## Depend on the spec file to make sure it is up to date before
  ## 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.
! gcj_dbtool_LDFLAGS = --main=gnu.gcj.tools.gcj_dbtool.Main \
! 	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
! gcj_dbtool_LINK = $(GCJLINK)
! ## We don't explicitly link in the libraries we need; libgcj.la brings
! ## in all dependencies.  We need the -L so that gcj can find libgcj
! ## with `-lgcj', but it must come first, otherwise the -L flags
! ## brought in from libgcj.la would cause the install directories to be
! ## searched before the build-tree ones, and we'd get errors because of
! ## different libraries with the same SONAME from picky linkers such as
! ## Solaris'.  FIXME: should be _libs on some systems.
! gcj_dbtool_LDADD = -L$(here)/.libs libgcj.la
! ## Depend on the spec file to make sure it is up to date before
! ## linking this program.
! gcj_dbtool_DEPENDENCIES = libgcj.la libgcj.spec
! 
! gij_SOURCES = 
  ## 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.
  gij_LDFLAGS = -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
  gij_LINK = $(GCJLINK)
  ## See jv_convert_LDADD.
! gij_LDADD = -L$(here)/.libs libgij.la
  ## Depend on the spec file to make sure it is up to date before
  ## linking this program.
! gij_DEPENDENCIES = libgij.la
  
  ## This is a dummy definition.
! grmic_SOURCES =
! grmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \
  	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
! grmic_LINK = $(GCJLINK)
  ## See jv_convert_LDADD.
! grmic_LDADD = -L$(here)/.libs libgcj.la
  ## Depend on the spec file to make sure it is up to date before
  ## linking this program.
! grmic_DEPENDENCIES = libgcj.la libgcj.spec
  
  ## This is a dummy definition.
! grmiregistry_SOURCES =
! grmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \
  	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
! grmiregistry_LINK = $(GCJLINK)
  ## See jv_convert_LDADD.
! grmiregistry_LDADD = -L$(here)/.libs libgcj.la
  ## Depend on the spec file to make sure it is up to date before
  ## linking this program.
! grmiregistry_DEPENDENCIES = libgcj.la libgcj.spec
  
  ## ################################################################
  
*************** gnu/gcj/convert/Input_ASCII.java \
*** 852,857 ****
--- 1121,1128 ----
  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_ASCII.java \
*** 860,865 ****
--- 1131,1137 ----
  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
*************** gnu/gcj/convert/UnicodeToBytes.java
*** 868,873 ****
--- 1140,1199 ----
  ## 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/java/awt/ClasspathToolkit.java \
*** 883,915 ****
  gnu/java/awt/EmbeddedWindow.java \
  gnu/java/awt/EmbeddedWindowSupport.java \
  gnu/java/awt/EventModifier.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/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/beans/BeanInfoEmbryo.java \
! gnu/java/beans/EmptyBeanInfo.java \
! gnu/java/beans/ExplicitBeanInfo.java \
! gnu/java/beans/IntrospectionIncubator.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 \
  java/applet/Applet.java \
  java/applet/AppletStub.java \
  java/applet/AppletContext.java \
--- 1209,1233 ----
  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/awt/geom/CubicCurve2D.java \
*** 1074,1096 ****
--- 1392,1431 ----
  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/beans/BeanInfo.java \
*** 1244,1251 ****
--- 1579,1588 ----
  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/PropertyEditor.java \
*** 1261,1285 ****
  java/beans/PropertyEditorManager.java \
  java/beans/PropertyEditorSupport.java \
  java/beans/PropertyVetoException.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 \
! javax/rmi/BAD_OPERATION.java \
! javax/rmi/ORB.java \
! javax/rmi/PortableRemoteObject.java \
! javax/rmi/CORBA/ClassDesc.java \
! javax/rmi/CORBA/ObjectImpl.java	\
! javax/rmi/CORBA/PortableRemoteObjectDelegate.java \
! javax/rmi/CORBA/StubDelegate.java \
! javax/rmi/CORBA/Stub.java \
! javax/rmi/CORBA/SystemException.java \
! javax/rmi/CORBA/Tie.java \
! javax/rmi/CORBA/UtilDelegate.java \
! javax/rmi/CORBA/Util.java \
! javax/rmi/CORBA/ValueHandler.java \
  javax/swing/border/AbstractBorder.java \
  javax/swing/border/BevelBorder.java \
  javax/swing/border/Border.java \
--- 1598,1611 ----
  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/TitledBorder.java \
*** 1293,1318 ****
  javax/swing/GrayFilter.java \
  javax/swing/AbstractAction.java \
  javax/swing/AbstractButton.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/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/BasicSplitPaneDivider.java \
  javax/swing/plaf/basic/BasicSplitPaneUI.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/basic/BasicLookAndFeel.java \
  javax/swing/plaf/basic/BasicBorders.java \
  javax/swing/plaf/basic/BasicIconFactory.java \
  javax/swing/plaf/BorderUIResource.java \
  javax/swing/plaf/UIResource.java \
  javax/swing/plaf/ButtonUI.java \
--- 1619,1680 ----
  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/TabbedPaneUI.java \
*** 1326,1332 ****
--- 1688,1696 ----
  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/TableUI.java \
*** 1356,1366 ****
  javax/swing/plaf/ToolBarUI.java \
  javax/swing/plaf/ToolTipUI.java \
  javax/swing/AbstractListModel.java \
- javax/swing/AbstractSet.java \
  javax/swing/colorchooser/AbstractColorChooserPanel.java \
  javax/swing/colorchooser/ColorChooserComponentFactory.java \
  javax/swing/colorchooser/ColorSelectionModel.java \
  javax/swing/colorchooser/DefaultColorSelectionModel.java \
  javax/swing/filechooser/FileFilter.java \
  javax/swing/filechooser/FileSystemView.java \
  javax/swing/filechooser/FileView.java \
--- 1720,1733 ----
  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/ButtonGroup.java \
*** 1382,1393 ****
  javax/swing/ButtonModel.java \
  javax/swing/ComponentInputMap.java \
  javax/swing/DefaultButtonModel.java \
- javax/swing/DefaultCellRenderer.java \
  javax/swing/DefaultListModel.java \
  javax/swing/DefaultListSelectionModel.java \
  javax/swing/Icon.java \
  javax/swing/ImageIcon.java \
  javax/swing/InputMap.java \
  javax/swing/JApplet.java \
  javax/swing/JButton.java \
  javax/swing/JCheckBox.java \
--- 1749,1760 ----
  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/JRadioButton.java \
*** 1406,1412 ****
--- 1773,1781 ----
  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 \
*** 1414,1428 ****
  javax/swing/JViewport.java \
  javax/swing/JWindow.java \
  javax/swing/KeyStroke.java \
  javax/swing/ListCellRenderer.java \
  javax/swing/ListModel.java \
  javax/swing/ListSelectionModel.java \
  javax/swing/LookAndFeel.java \
  javax/swing/Scrollable.java \
  javax/swing/SwingConstants.java \
  javax/swing/SwingUtilities.java \
  javax/swing/Timer.java \
! javax/swing/ToggleButtonModel.java \
  javax/swing/UIDefaults.java \
  javax/swing/UIManager.java \
  javax/swing/UnsupportedLookAndFeelException.java \
--- 1783,1806 ----
  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/text/AbstractDocument.java \
*** 1474,1502 ****
  javax/swing/text/AttributeSet.java \
  javax/swing/text/BadLocationException.java \
  javax/swing/text/Caret.java \
- javax/swing/text/CharacterIterator.java \
  javax/swing/text/ComponentView.java \
  javax/swing/text/DefaultCaret.java \
  javax/swing/text/DefaultEditorKit.java \
  javax/swing/text/Document.java \
  javax/swing/text/DocumentFilter.java \
  javax/swing/text/EditorKit.java \
  javax/swing/text/Element.java \
  javax/swing/text/GapContent.java \
  javax/swing/text/JTextComponent.java \
  javax/swing/text/Keymap.java \
  javax/swing/text/PlainDocument.java \
! javax/swing/text/PlainEditorKit.java \
  javax/swing/text/Position.java \
  javax/swing/text/Segment.java \
  javax/swing/text/Style.java \
! javax/swing/text/View.java \
! javax/swing/text/ViewFactory.java \
! javax/swing/text/MutableAttributeSet.java \
! javax/swing/text/NavigationFilter.java \
  javax/swing/text/StyledDocument.java \
  javax/swing/text/StyledEditorKit.java \
  javax/swing/text/TextAction.java \
  javax/swing/text/html/HTML.java \
  javax/swing/text/html/parser/ParserDelegator.java \
  javax/swing/tree/TreeNode.java \
--- 1852,1894 ----
  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/ProgressMonitor.java \
*** 1577,1583 ****
  javax/swing/ProgressMonitorInputStream.java \
  javax/swing/RepaintManager.java \
  javax/swing/ScrollPaneLayout.java \
- javax/swing/ToolTipManager.java \
  javax/swing/ViewportLayout.java
  
  rmi_java_source_files =	\
--- 1969,1974 ----
*************** gnu/java/rmi/server/ConnectionRunnerPool
*** 1667,1672 ****
--- 2058,2064 ----
  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/UnicastRemoteStub.ja
*** 1678,1884 ****
  gnu/java/rmi/server/UnicastServer.java \
  gnu/java/rmi/server/UnicastServerRef.java
  
  javax_source_files = \
! 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/naming/directory/Attribute.java \
! javax/naming/directory/AttributeInUseException.java \
  javax/naming/directory/AttributeModificationException.java \
- javax/naming/directory/Attributes.java \
- javax/naming/directory/DirContext.java \
  javax/naming/directory/InvalidAttributeIdentifierException.java	\
! javax/naming/directory/InvalidAttributeValueException.java \
! javax/naming/directory/InvalidAttributesException.java \
  javax/naming/directory/InvalidSearchControlsException.java \
  javax/naming/directory/InvalidSearchFilterException.java \
- javax/naming/directory/NoSuchAttributeException.java \
- javax/naming/directory/SchemaViolationException.java \
- javax/naming/directory/BasicAttribute.java \
- javax/naming/directory/BasicAttributes.java \
  javax/naming/directory/ModificationItem.java \
- javax/naming/directory/SearchControls.java \
  javax/naming/directory/SearchResult.java \
! javax/naming/directory/InitialDirContext.java \
! javax/naming/AuthenticationException.java \
! javax/naming/AuthenticationNotSupportedException.java \
! javax/naming/CannotProceedException.java \
! javax/naming/CommunicationException.java \
! javax/naming/ConfigurationException.java \
! javax/naming/Context.java \
  javax/naming/ContextNotEmptyException.java \
! javax/naming/InsufficientResourcesException.java \
  javax/naming/InterruptedNamingException.java \
! javax/naming/BinaryRefAddr.java	\
! javax/naming/LimitExceededException.java \
  javax/naming/LinkException.java	\
  javax/naming/LinkLoopException.java \
! javax/naming/MalformedLinkException.java \
! javax/naming/Name.java \
  javax/naming/NameAlreadyBoundException.java \
! javax/naming/NameNotFoundException.java	\
! javax/naming/NameParser.java \
! javax/naming/NamingEnumeration.java \
! javax/naming/InitialContext.java \
! javax/naming/NamingSecurityException.java \
! javax/naming/NoInitialContextException.java \
! javax/naming/NoPermissionException.java	\
  javax/naming/NotContextException.java \
! javax/naming/NamingException.java \
! javax/naming/PartialResultException.java \
! javax/naming/event/EventContext.java \
! javax/naming/event/EventDirContext.java	\
! javax/naming/event/NamespaceChangeListener.java	\
! javax/naming/event/NamingEvent.java \
! javax/naming/event/NamingExceptionEvent.java \
! javax/naming/event/NamingListener.java \
! javax/naming/event/ObjectChangeListener.java \
! javax/naming/RefAddr.java \
! javax/naming/Reference.java \
! javax/naming/Referenceable.java	\
! javax/naming/ReferralException.java \
! javax/naming/ServiceUnavailableException.java \
! javax/naming/SizeLimitExceededException.java \
! javax/naming/StringRefAddr.java	\
! javax/naming/TimeLimitExceededException.java \
! javax/naming/spi/InitialContextFactory.java \
  javax/naming/spi/InitialContextFactoryBuilder.java \
- javax/naming/spi/NamingManager.java \
  javax/naming/spi/ObjectFactory.java \
  javax/naming/spi/Resolver.java \
- javax/naming/spi/DirObjectFactory.java \
- javax/naming/spi/DirStateFactory.java \
- javax/naming/spi/DirectoryManager.java \
- javax/naming/spi/ObjectFactoryBuilder.java \
- javax/naming/spi/ResolveResult.java \
  javax/naming/spi/StateFactory.java \
  javax/naming/InvalidNameException.java \
! javax/naming/Binding.java \
! javax/naming/CompositeName.java	\
! javax/naming/CompoundName.java \
  javax/naming/LinkRef.java \
! javax/naming/NameClassPair.java	\
! javax/naming/ldap/Control.java \
! javax/naming/ldap/ControlFactory.java \
  javax/naming/ldap/ExtendedRequest.java \
! javax/naming/ldap/ExtendedResponse.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/UnsolicitedNotificationEvent.java \
! javax/naming/ldap/UnsolicitedNotificationListener.java \
  javax/naming/OperationNotSupportedException.java \
! javax/print/attribute/Attribute.java \
! javax/print/attribute/AttributeSet.java \
! 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/PrintRequestAttributeSet.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/UnmodifiableSetException.java \
! javax/print/attribute/URISyntax.java \
! 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 \
! 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 \
  javax/security/auth/x500/X500Principal.java \
! 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 \
! javax/transaction/xa/XAException.java \
! javax/transaction/xa/XAResource.java \
! javax/transaction/xa/Xid.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
  
  
  ## Java files which are created by configure and thus are in the build
  ## directory.
--- 2070,2744 ----
  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.
*************** java/lang/UnsupportedOperationException.
*** 1967,1972 ****
--- 2827,2833 ----
  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/util/TreeMap.java \
*** 2104,2109 ****
--- 2965,2971 ----
  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/regex/PatternSyntaxException.j
*** 2136,2162 ****
  
  ## 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/gcj/Core.java \
  gnu/gcj/RawData.java \
  gnu/gcj/io/DefaultMimeTypes.java \
  gnu/gcj/io/MimeTypes.java \
  gnu/gcj/io/SimpleSHSStream.java	\
  gnu/gcj/runtime/FileDeleter.java \
  gnu/gcj/runtime/FinalizerThread.java \
! gnu/gcj/runtime/FirstThread.java \
  gnu/gcj/runtime/JNIWeakRef.java \
  gnu/gcj/runtime/MethodRef.java \
  gnu/gcj/runtime/NameFinder.java \
  gnu/gcj/runtime/SharedLibHelper.java \
  gnu/gcj/runtime/SharedLibLoader.java \
- gnu/gcj/runtime/StackTrace.java \
  gnu/gcj/runtime/StringBuffer.java \
! gnu/gcj/runtime/VMClassLoader.java \
  gnu/java/io/ASN1ParsingException.java \
  gnu/java/io/Base64InputStream.java \
  gnu/java/io/ClassLoaderObjectInputStream.java \
--- 2998,3031 ----
  
  ## 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 \
*** 2164,2170 ****
  gnu/java/io/ObjectIdentityWrapper.java \
  gnu/java/lang/ArrayHelper.java \
  gnu/java/lang/ClassHelper.java \
! gnu/java/lang/CharData.java \
  gnu/java/lang/reflect/TypeSignature.java \
  gnu/java/locale/Calendar.java \
  gnu/java/locale/Calendar_de.java \
--- 3033,3039 ----
  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/LocaleInformation_zh_HK.
*** 2306,2336 ****
  gnu/java/locale/LocaleInformation_zh_SG.java \
  gnu/java/locale/LocaleInformation_zh_TW.java \
  gnu/java/math/MPN.java \
  gnu/java/net/HeaderFieldHelper.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/Handler.java \
  gnu/java/net/protocol/core/CoreInputStream.java \
  gnu/java/net/protocol/file/Connection.java \
  gnu/java/net/protocol/file/Handler.java \
! gnu/java/net/protocol/http/Connection.java \
  gnu/java/net/protocol/http/Handler.java \
  gnu/java/net/protocol/jar/Connection.java \
  gnu/java/net/protocol/jar/Handler.java \
! gnu/java/net/protocol/gcjlib/Connection.java \
! gnu/java/net/protocol/gcjlib/Handler.java \
  gnu/java/nio/DatagramChannelImpl.java \
  gnu/java/nio/DatagramChannelSelectionKey.java \
  gnu/java/nio/FileLockImpl.java \
  gnu/java/nio/NIOConstants.java \
  gnu/java/nio/NIODatagramSocket.java \
  gnu/java/nio/NIOServerSocket.java \
  gnu/java/nio/NIOSocket.java \
- gnu/java/nio/ChannelInputStream.java \
- gnu/java/nio/ChannelOutputStream.java \
- gnu/java/nio/InputStreamChannel.java \
  gnu/java/nio/OutputStreamChannel.java \
  gnu/java/nio/PipeImpl.java \
  gnu/java/nio/SelectionKeyImpl.java \
--- 3175,3249 ----
  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/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/ServerSocketChannelImpl.jav
*** 2340,2345 ****
--- 3253,3261 ----
  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_16LE.java \
*** 2351,2392 ****
  gnu/java/nio/charset/UTF_8.java \
  gnu/java/security/Engine.java \
  gnu/java/security/OID.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/provider/DefaultPolicy.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/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/provider/X509CertificateFactory.java \
  gnu/java/security/util/Prime.java \
  gnu/java/security/x509/X500DistinguishedName.java \
- gnu/java/security/x509/X509Certificate.java \
- gnu/java/security/x509/X509CRLEntry.java \
  gnu/java/security/x509/X509CRL.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/MemoryBasedFactory.java \
- gnu/java/util/prefs/NodeReader.java \
  gnu/java/util/prefs/MemoryBasedPreferences.java \
! gnu/java/util/prefs/FileBasedFactory.java \
  gnu/java/util/prefs/NodeWriter.java \
  java/lang/ref/PhantomReference.java \
  java/lang/ref/Reference.java \
  java/lang/ref/ReferenceQueue.java \
--- 3267,3380 ----
  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/net/DatagramSocketImpl.java \
*** 2417,2425 ****
  java/net/DatagramSocketImplFactory.java \
  java/net/FileNameMap.java \
  java/net/HttpURLConnection.java	\
- java/net/InetAddress.java \
  java/net/Inet4Address.java \
  java/net/Inet6Address.java \
  java/net/InetSocketAddress.java \
  java/net/JarURLConnection.java \
  java/net/MalformedURLException.java \
--- 3405,3413 ----
  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/nio/ReadOnlyBufferException.java \
*** 2480,2485 ****
--- 3468,3474 ----
  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/ClosedSelectorExceptio
*** 2492,2498 ****
  java/nio/channels/ConnectionPendingException.java \
  java/nio/channels/DatagramChannel.java \
  java/nio/channels/FileChannel.java \
- java/nio/channels/FileChannelImpl.java \
  java/nio/channels/FileLock.java \
  java/nio/channels/FileLockInterruptionException.java \
  java/nio/channels/GatheringByteChannel.java \
--- 3481,3486 ----
*************** java/nio/channels/SocketChannel.java \
*** 2516,2528 ****
  java/nio/channels/UnresolvedAddressException.java \
  java/nio/channels/UnsupportedAddressTypeException.java \
  java/nio/channels/WritableByteChannel.java \
- java/nio/channels/spi/AbstractSelectableChannel.java \
  java/nio/channels/spi/AbstractInterruptibleChannel.java \
  java/nio/channels/spi/AbstractSelectionKey.java \
  java/nio/channels/spi/AbstractSelector.java \
  java/nio/channels/spi/SelectorProvider.java \
- java/nio/charset/Charset.java \
  java/nio/charset/CharacterCodingException.java \
  java/nio/charset/CharsetDecoder.java \
  java/nio/charset/CharsetEncoder.java \
  java/nio/charset/CoderMalfunctionError.java \
--- 3504,3516 ----
  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/security/AccessControlContext.java 
*** 2537,2556 ****
  java/security/AccessControlException.java \
  java/security/AccessController.java \
  java/security/AlgorithmParameterGenerator.java \
- java/security/AlgorithmParameters.java \
  java/security/AlgorithmParameterGeneratorSpi.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/DigestOutputStream.java \
- java/security/DummyKeyPairGenerator.java \
- java/security/DummySignature.java \
  java/security/DigestInputStream.java \
  java/security/DomainCombiner.java \
  java/security/DummyMessageDigest.java \
  java/security/GeneralSecurityException.java \
  java/security/Guard.java \
  java/security/GuardedObject.java \
--- 3525,3544 ----
  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/InvalidAlgorithmParameterE
*** 2560,2623 ****
  java/security/InvalidKeyException.java \
  java/security/InvalidParameterException.java \
  java/security/Key.java \
- java/security/KeyFactorySpi.java \
- java/security/KeyPairGenerator.java \
- java/security/KeyStoreException.java \
  java/security/KeyException.java \
- java/security/KeyManagementException.java \
- java/security/KeyPairGeneratorSpi.java \
- java/security/KeyStoreSpi.java \
  java/security/KeyFactory.java \
  java/security/KeyPair.java \
  java/security/KeyStore.java \
  java/security/MessageDigest.java \
  java/security/MessageDigestSpi.java \
  java/security/NoSuchAlgorithmException.java \
  java/security/NoSuchProviderException.java \
  java/security/Permission.java \
- java/security/Principal.java \
- java/security/PrivilegedExceptionAction.java \
- java/security/PublicKey.java \
  java/security/PermissionCollection.java \
- java/security/PrivateKey.java \
- java/security/ProtectionDomain.java \
  java/security/Permissions.java \
- java/security/PrivilegedAction.java \
- java/security/Provider.java \
  java/security/Policy.java \
  java/security/PrivilegedActionException.java \
  java/security/ProviderException.java \
  java/security/SecureClassLoader.java \
- java/security/SecureRandomSpi.java \
- java/security/SecurityPermission.java \
- java/security/SignatureException.java \
- java/security/SignedObject.java \
  java/security/SecureRandom.java \
  java/security/Security.java \
  java/security/Signature.java \
  java/security/SignatureSpi.java \
  java/security/Signer.java \
  java/security/UnrecoverableKeyException.java \
  java/security/UnresolvedPermission.java \
  java/security/acl/Acl.java \
- java/security/acl/AclNotFoundException.java \
- java/security/acl/LastOwnerException.java \
- java/security/acl/Owner.java \
  java/security/acl/AclEntry.java \
  java/security/acl/Group.java \
  java/security/acl/NotOwnerException.java \
  java/security/acl/Permission.java \
  java/security/cert/CRL.java \
  java/security/cert/CRLException.java \
  java/security/cert/CRLSelector.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/CertPath.java \
  java/security/cert/CertPathBuilder.java \
  java/security/cert/CertPathBuilderException.java \
--- 3548,3603 ----
  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/CertStore.java \
*** 2633,2638 ****
--- 3613,3626 ----
  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/PolicyQualifierInfo.j
*** 2645,2650 ****
--- 3633,3640 ----
  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/sql/PreparedStatement.java	\
*** 2691,2703 ****
  java/sql/Ref.java \
  java/sql/ResultSet.java	\
  java/sql/ResultSetMetaData.java	\
- java/sql/Savepoint.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/Statement.java	\
  java/sql/Struct.java	\
  java/sql/Time.java \
--- 3681,3693 ----
  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/text/DecimalFormat.java \
*** 2719,2725 ****
  java/text/DecimalFormatSymbols.java \
  java/text/FieldPosition.java \
  java/text/Format.java \
- java/text/FormatCharacterIterator.java \
  java/text/MessageFormat.java \
  java/text/NumberFormat.java \
  java/text/ParseException.java \
--- 3709,3714 ----
*************** java/util/zip/ZipOutputStream.java \
*** 2755,2767 ****
  $(rmi_java_source_files) \
  $(awt_java_source_files) \
  $(convert_source_files) \
! $(javax_source_files)
  
  
  java_source_files = $(special_java_source_files) $(ordinary_java_source_files)
  
  ## Math library: C, not C++
! 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      \
--- 3744,3757 ----
  $(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      \
*************** c_source_files = \
*** 2776,2784 ****
    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
  
- extra_cc_source_files = $(EXTRA_CC_FILES)
- 
- #java/awt/natToolkit.cc
  
  ## This lists all the C++ source files in subdirectories.
  nat_source_files = \
--- 3766,3771 ----
*************** gnu/gcj/convert/natOutput_SJIS.cc \
*** 2794,2815 ****
  gnu/gcj/io/natSimpleSHSStream.cc \
  gnu/gcj/io/shs.cc \
  gnu/gcj/runtime/natFinalizerThread.cc \
- gnu/gcj/runtime/natFirstThread.cc \
  gnu/gcj/runtime/natNameFinder.cc \
  gnu/gcj/runtime/natSharedLibLoader.cc \
  gnu/gcj/runtime/natStackTrace.cc \
  gnu/gcj/runtime/natStringBuffer.cc \
! gnu/gcj/runtime/natVMClassLoader.cc \
! gnu/java/awt/natEmbeddedWindow.cc \
  gnu/java/net/natPlainDatagramSocketImpl.cc \
  gnu/java/net/natPlainSocketImpl.cc \
  gnu/java/net/protocol/core/natCoreInputStream.cc \
- gnu/java/nio/natFileLockImpl.cc \
  gnu/java/nio/natPipeImpl.cc \
  gnu/java/nio/natSelectorImpl.cc \
  gnu/java/nio/natNIOServerSocket.cc \
  java/io/natFile.cc \
- java/io/natFileDescriptor.cc \
  java/io/natObjectInputStream.cc \
  java/io/natVMObjectStreamClass.cc \
  java/lang/natCharacter.cc \
--- 3781,3800 ----
  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 \
  gnu/java/net/natPlainSocketImpl.cc \
  gnu/java/net/protocol/core/natCoreInputStream.cc \
  gnu/java/nio/natPipeImpl.cc \
  gnu/java/nio/natSelectorImpl.cc \
  gnu/java/nio/natNIOServerSocket.cc \
+ gnu/java/nio/channels/natFileChannelImpl.cc \
  java/io/natFile.cc \
  java/io/natObjectInputStream.cc \
  java/io/natVMObjectStreamClass.cc \
  java/lang/natCharacter.cc \
*************** java/lang/natString.cc \
*** 2825,2830 ****
--- 3810,3816 ----
  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/natMethod.cc \
*** 2834,2848 ****
  java/lang/reflect/natProxy.cc \
  java/net/natNetworkInterface.cc \
  java/net/natInetAddress.cc \
  java/nio/natDirectByteBufferImpl.cc \
- java/nio/channels/natFileChannelImpl.cc \
  java/text/natCollator.cc \
  java/util/natResourceBundle.cc \
! java/util/natTimeZone.cc \
  java/util/zip/natDeflater.cc \
  java/util/zip/natInflater.cc
  
! x_java_source_files = \
  gnu/gcj/xlib/Clip.java \
  gnu/gcj/xlib/Colormap.java \
  gnu/gcj/xlib/Display.java \
--- 3820,3835 ----
  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
  
! xlib_java_source_files = \
  gnu/gcj/xlib/Clip.java \
  gnu/gcj/xlib/Colormap.java \
  gnu/gcj/xlib/Display.java \
*************** gnu/awt/xlib/XGraphics.java \
*** 2875,2883 ****
  gnu/awt/xlib/XGraphicsConfiguration.java \
  gnu/awt/xlib/XOffScreenImage.java \
  gnu/awt/xlib/XPanelPeer.java \
  gnu/awt/xlib/XToolkit.java
  
! x_nat_source_files = \
  gnu/gcj/xlib/natClip.cc \
  gnu/gcj/xlib/natColormap.cc \
  gnu/gcj/xlib/natDisplay.cc \
--- 3862,3871 ----
  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 \
  gnu/gcj/xlib/natDisplay.cc \
*************** TexinfoDoclet.class: $(srcdir)/scripts/T
*** 2911,2949 ****
  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 .:$(srcdir) $$lang
! 	javadoc -outfile $(srcdir)/doc/java-lang-ref.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/lang/ref/*.java
! 	javadoc -outfile $(srcdir)/doc/java-lang-reflect.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/lang/reflect/*.java
! 	javadoc -outfile $(srcdir)/doc/java-applet.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/applet/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-color.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/color/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-datatransfer.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/datatransfer/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-event.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/event/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-geom.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/geom/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-image.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/image/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-peer.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/peer/*.java
! 	javadoc -outfile $(srcdir)/doc/java-beans.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/beans/*.java
! 	javadoc -outfile $(srcdir)/doc/java-beans-beancontext.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/beans/beancontext/*.java
! 	javadoc -outfile $(srcdir)/doc/java-io.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/io/*.java
! 	javadoc -outfile $(srcdir)/doc/java-math.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/math/*.java
! 	javadoc -outfile $(srcdir)/doc/java-net.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/net/*.java
! 	javadoc -outfile $(srcdir)/doc/java-security.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/security/*.java
! 	javadoc -outfile $(srcdir)/doc/java-security-cert.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/security-cert/*.java
! 	javadoc -outfile $(srcdir)/doc/java-security-spec.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/security/spec/*.java
! 	javadoc -outfile $(srcdir)/doc/java-security-interfaces.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/security/spec/interfaces/*.java
! 	javadoc -outfile $(srcdir)/doc/java-sql.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/sql/*.java
! 	javadoc -outfile $(srcdir)/doc/java-text.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/text/*.java
! 	javadoc -outfile $(srcdir)/doc/java-util.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/util/*.java
! 	javadoc -outfile $(srcdir)/doc/java-util-jar.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/util/jar/*.java
! 	javadoc -outfile $(srcdir)/doc/java-util-zip.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/util/zip/*.java
  
  ## ################################################################
  
  ##
! ## Dependency tracking madness.
  ##
  
! -include deps.mk
  
  ## 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
--- 3899,3978 ----
  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
  ##
  
! ## Create a zip holding all the sources.  This can be meaningfully
! ## used in Eclipse.
! 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
! 
! 
! ## ################################################################
! 
! ##
! ## Dependency tracking madness.
! ##
  
  ## 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
*************** texinfo: TexinfoDoclet.class
*** 2952,2958 ****
  ## 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: libgcj-@gcc_version@.jar $(nat_headers) $(x_nat_headers)
  
  ## ################################################################
  
--- 3981,3987 ----
  ## 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)
  
  ## ################################################################
  
*************** AM_MAKEFLAGS = \
*** 2989,2994 ****
--- 4018,4024 ----
  	"infodir=$(infodir)" \
  	"libdir=$(libdir)" \
  	"prefix=$(prefix)" \
+ 	"gxx_include_dir=$(gxx_include_dir)" \
  	"AR=$(AR)" \
  	"AS=$(AS)" \
  	"LD=$(LD)" \
diff -Nrcpad gcc-3.4.3/libjava/Makefile.in gcc-4.0.0/libjava/Makefile.in
*** gcc-3.4.3/libjava/Makefile.in	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/libjava/Makefile.in	Thu Apr 21 07:04:10 2005
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999 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.
--- 1,8 ----
! # 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.
***************
*** 10,164 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
  
- SHELL = @SHELL@
  
- srcdir = @srcdir@
- top_srcdir = @top_srcdir@
- VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
  
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
  
! DESTDIR =
  
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = .
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AR = @AR@
  AS = @AS@
  BACKTRACESPEC = @BACKTRACESPEC@
  CAIRO_CFLAGS = @CAIRO_CFLAGS@
  CAIRO_LIBS = @CAIRO_LIBS@
  CC = @CC@
  CHECKREFSPEC = @CHECKREFSPEC@
! COMPPATH = @COMPPATH@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
  DIRLTDL = @DIRLTDL@
  DIVIDESPEC = @DIVIDESPEC@
! DLLTOOL = @DLLTOOL@
  EXCEPTIONSPEC = @EXCEPTIONSPEC@
  EXEEXT = @EXEEXT@
! EXTRA_CC_FILES = @EXTRA_CC_FILES@
  GCDEPS = @GCDEPS@
  GCINCS = @GCINCS@
  GCJ = @GCJ@
  GCJFLAGS = @GCJFLAGS@
  GCJVERSION = @GCJVERSION@
  GCLIBS = @GCLIBS@
- GCOBJS = @GCOBJS@
  GCSPEC = @GCSPEC@
  GCTESTSPEC = @GCTESTSPEC@
  GLIB_CFLAGS = @GLIB_CFLAGS@
- GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
  GLIB_LIBS = @GLIB_LIBS@
! GLIB_MKENUMS = @GLIB_MKENUMS@
! GOBJECT_QUERY = @GOBJECT_QUERY@
  GTK_CFLAGS = @GTK_CFLAGS@
  GTK_LIBS = @GTK_LIBS@
  HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
- HAVE_LIB = @HAVE_LIB@
  IEEESPEC = @IEEESPEC@
  INCLTDL = @INCLTDL@
  INTERPRETER = @INTERPRETER@
  JC1GCSPEC = @JC1GCSPEC@
! LIB = @LIB@
  LIBART_CFLAGS = @LIBART_CFLAGS@
- LIBART_CONFIG = @LIBART_CONFIG@
  LIBART_LIBS = @LIBART_LIBS@
  LIBFFI = @LIBFFI@
  LIBGCJDEBUG = @LIBGCJDEBUG@
  LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
  LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
  LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
  LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
  LIBICONV = @LIBICONV@
  LIBLTDL = @LIBLTDL@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
! LTLIB = @LTLIB@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
! OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
  PANGOFT2_LIBS = @PANGOFT2_LIBS@
  PERL = @PERL@
  PKG_CONFIG = @PKG_CONFIG@
! PLATFORMOBJS = @PLATFORMOBJS@
  RANLIB = @RANLIB@
  STRIP = @STRIP@
  SYSDEP_SOURCES = @SYSDEP_SOURCES@
  SYSTEMSPEC = @SYSTEMSPEC@
  SYS_ZLIBS = @SYS_ZLIBS@
  THREADCXXFLAGS = @THREADCXXFLAGS@
  THREADDEPS = @THREADDEPS@
  THREADINCS = @THREADINCS@
  THREADLDFLAGS = @THREADLDFLAGS@
  THREADLIBS = @THREADLIBS@
- THREADOBJS = @THREADOBJS@
  THREADSPEC = @THREADSPEC@
  TOOLKIT = @TOOLKIT@
  VERSION = @VERSION@
  ZINCS = @ZINCS@
  ZLIBS = @ZLIBS@
  ZLIBSPEC = @ZLIBSPEC@
  ZLIBTESTSPEC = @ZLIBTESTSPEC@
  gcc_version = @gcc_version@
! glibjava_CXX = @glibjava_CXX@
  here = @here@
  libgcj_basedir = @libgcj_basedir@
  mkinstalldirs = @mkinstalldirs@
  tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  toolexecmainlibdir = @toolexecmainlibdir@
! 
! AUTOMAKE_OPTIONS = foreign
! 
! ACLOCAL_AMFLAGS = -I .
! @TESTSUBDIR_TRUE@SUBDIRS = @TESTSUBDIR_TRUE@$(DIRLTDL) testsuite gcj include
! @TESTSUBDIR_FALSE@SUBDIRS = @TESTSUBDIR_FALSE@$(DIRLTDL) gcj include
  
  # write_entries_to_file - writes each entry in a list
  # to the specified file. Each entry is written individually
--- 12,4440 ----
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
+ @SET_MAKE@
  
  
  
  
! 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@
+ 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@
+ @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 \
+ 	$(srcdir)/../ltmain.sh $(srcdir)/../missing \
+ 	$(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 \
+  configure.lineno configure.status.lineno
+ 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/||"`;; \
+     *) f=$$p;; \
+   esac;
+ am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+ am__installdirs = "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(bindir)" \
+ 	"$(DESTDIR)$(bindir)" "$(DESTDIR)$(dbexecdir)" \
+ 	"$(DESTDIR)$(jardir)" "$(DESTDIR)$(pkgconfigdir)" \
+ 	"$(DESTDIR)$(toolexecmainlibdir)"
+ toolexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
+ am__dirstamp = $(am__leading_dot)dirstamp
+ am__objects_1 = gnu/gcj/xlib/Clip.lo gnu/gcj/xlib/Colormap.lo \
+ 	gnu/gcj/xlib/Display.lo gnu/gcj/xlib/Drawable.lo \
+ 	gnu/gcj/xlib/Font.lo gnu/gcj/xlib/GC.lo gnu/gcj/xlib/Pixmap.lo \
+ 	gnu/gcj/xlib/Screen.lo gnu/gcj/xlib/Visual.lo \
+ 	gnu/gcj/xlib/WMSizeHints.lo gnu/gcj/xlib/Window.lo \
+ 	gnu/gcj/xlib/WindowAttributes.lo gnu/gcj/xlib/XAnyEvent.lo \
+ 	gnu/gcj/xlib/XButtonEvent.lo gnu/gcj/xlib/XColor.lo \
+ 	gnu/gcj/xlib/XConfigureEvent.lo \
+ 	gnu/gcj/xlib/XConnectException.lo gnu/gcj/xlib/XEvent.lo \
+ 	gnu/gcj/xlib/XException.lo gnu/gcj/xlib/XExposeEvent.lo \
+ 	gnu/gcj/xlib/XID.lo gnu/gcj/xlib/XImage.lo \
+ 	gnu/gcj/xlib/XUnmapEvent.lo gnu/awt/xlib/XCanvasPeer.lo \
+ 	gnu/awt/xlib/XEventLoop.lo gnu/awt/xlib/XEventQueue.lo \
+ 	gnu/awt/xlib/XFontMetrics.lo gnu/awt/xlib/XFramePeer.lo \
+ 	gnu/awt/xlib/XGraphics.lo \
+ 	gnu/awt/xlib/XGraphicsConfiguration.lo \
+ 	gnu/awt/xlib/XOffScreenImage.lo gnu/awt/xlib/XPanelPeer.lo \
+ 	gnu/awt/xlib/XFontPeer.lo gnu/awt/xlib/XToolkit.lo
+ am__objects_2 = gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natFont.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natGC.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natPixmap.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natScreen.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natVisual.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWMSizeHints.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindow.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindowAttributes.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXAnyEvent.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXButtonEvent.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXColor.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXConfigureEvent.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXException.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.lo \
+ 	gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo
+ am_lib_gnu_awt_xlib_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+ 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_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_3 = jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo
+ am__objects_4 = $(am__objects_3) \
+ 	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_4)
+ 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_2 = gnu/regexp/MessagesBundle.properties.lo \
+ 	gnu/regexp/MessagesBundle_fr.properties.lo \
+ 	org/ietf/jgss/MessagesBundle.properties.lo
+ am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2)
+ am_libgcj_la_OBJECTS =
+ libgcj_la_OBJECTS = $(am_libgcj_la_OBJECTS)
+ libgcj0_convenience_la_DEPENDENCIES = gnu-xml.lo javax-imageio.lo \
+ 	javax-xml.lo gnu-java-beans.lo external/sax/libsax-gcj.la \
+ 	external/w3c_dom/libw3c-gcj.la
+ 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 \
+ 	gnu/gcj/convert/natInput_SJIS.cc \
+ 	gnu/gcj/convert/natOutput_EUCJIS.cc \
+ 	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 \
+ 	gnu/java/net/natPlainSocketImpl.cc \
+ 	gnu/java/net/protocol/core/natCoreInputStream.cc \
+ 	gnu/java/nio/natPipeImpl.cc gnu/java/nio/natSelectorImpl.cc \
+ 	gnu/java/nio/natNIOServerSocket.cc \
+ 	gnu/java/nio/channels/natFileChannelImpl.cc java/io/natFile.cc \
+ 	java/io/natObjectInputStream.cc \
+ 	java/io/natVMObjectStreamClass.cc java/lang/natCharacter.cc \
+ 	java/lang/natClass.cc java/lang/natClassLoader.cc \
+ 	java/lang/natConcreteProcess.cc java/lang/natDouble.cc \
+ 	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 \
+ 	java/lang/Class.java java/lang/Object.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/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 \
+ 	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/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 \
+ 	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 \
+ 	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 \
+ 	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 \
+ 	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/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 \
+ 	java/lang/ConcreteProcess.java \
+ 	gnu/classpath/Configuration.java 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_5 = 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 \
+ 	gnu/gcj/convert/natInput_SJIS.lo \
+ 	gnu/gcj/convert/natOutput_EUCJIS.lo \
+ 	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 \
+ 	gnu/java/net/natPlainSocketImpl.lo \
+ 	gnu/java/net/protocol/core/natCoreInputStream.lo \
+ 	gnu/java/nio/natPipeImpl.lo gnu/java/nio/natSelectorImpl.lo \
+ 	gnu/java/nio/natNIOServerSocket.lo \
+ 	gnu/java/nio/channels/natFileChannelImpl.lo java/io/natFile.lo \
+ 	java/io/natObjectInputStream.lo \
+ 	java/io/natVMObjectStreamClass.lo java/lang/natCharacter.lo \
+ 	java/lang/natClass.lo java/lang/natClassLoader.lo \
+ 	java/lang/natConcreteProcess.lo java/lang/natDouble.lo \
+ 	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_6 = 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
+ am__objects_7 = java/lang/Class.lo java/lang/Object.lo
+ am__objects_8 = java/lang/AbstractMethodError.lo \
+ 	java/lang/ArithmeticException.lo \
+ 	java/lang/ArrayIndexOutOfBoundsException.lo \
+ 	java/lang/ArrayStoreException.lo java/lang/AssertionError.lo \
+ 	java/lang/Boolean.lo java/lang/Byte.lo java/lang/Character.lo \
+ 	java/lang/CharSequence.lo java/lang/ClassCastException.lo \
+ 	java/lang/ClassCircularityError.lo \
+ 	java/lang/ClassFormatError.lo java/lang/ClassLoader.lo \
+ 	java/lang/ClassNotFoundException.lo \
+ 	java/lang/CloneNotSupportedException.lo java/lang/Cloneable.lo \
+ 	java/lang/Comparable.lo java/lang/Compiler.lo \
+ 	java/lang/Double.lo java/lang/Error.lo java/lang/Exception.lo \
+ 	java/lang/ExceptionInInitializerError.lo java/lang/Float.lo \
+ 	java/lang/IllegalAccessError.lo \
+ 	java/lang/IllegalAccessException.lo \
+ 	java/lang/IllegalArgumentException.lo \
+ 	java/lang/IllegalMonitorStateException.lo \
+ 	java/lang/IllegalStateException.lo \
+ 	java/lang/IllegalThreadStateException.lo \
+ 	java/lang/IncompatibleClassChangeError.lo \
+ 	java/lang/IndexOutOfBoundsException.lo \
+ 	java/lang/InheritableThreadLocal.lo \
+ 	java/lang/InstantiationError.lo \
+ 	java/lang/InstantiationException.lo java/lang/Integer.lo \
+ 	java/lang/InternalError.lo java/lang/InterruptedException.lo \
+ 	java/lang/LinkageError.lo java/lang/Long.lo java/lang/Math.lo \
+ 	java/lang/NegativeArraySizeException.lo \
+ 	java/lang/NoClassDefFoundError.lo \
+ 	java/lang/NoSuchFieldError.lo \
+ 	java/lang/NoSuchFieldException.lo \
+ 	java/lang/NoSuchMethodError.lo \
+ 	java/lang/NoSuchMethodException.lo \
+ 	java/lang/NullPointerException.lo java/lang/Number.lo \
+ 	java/lang/NumberFormatException.lo \
+ 	java/lang/OutOfMemoryError.lo java/lang/Package.lo \
+ 	java/lang/Process.lo java/lang/Runnable.lo \
+ 	java/lang/Runtime.lo java/lang/RuntimeException.lo \
+ 	java/lang/RuntimePermission.lo java/lang/SecurityException.lo \
+ 	java/lang/SecurityManager.lo java/lang/Short.lo \
+ 	java/lang/StackOverflowError.lo java/lang/StackTraceElement.lo \
+ 	java/lang/StrictMath.lo java/lang/String.lo \
+ 	java/lang/StringBuffer.lo \
+ 	java/lang/StringIndexOutOfBoundsException.lo \
+ 	java/lang/System.lo java/lang/Thread.lo \
+ 	java/lang/ThreadDeath.lo java/lang/ThreadGroup.lo \
+ 	java/lang/ThreadLocal.lo java/lang/Throwable.lo \
+ 	java/lang/UnknownError.lo java/lang/UnsatisfiedLinkError.lo \
+ 	java/lang/UnsupportedClassVersionError.lo \
+ 	java/lang/UnsupportedOperationException.lo \
+ 	java/lang/VerifyError.lo java/lang/VirtualMachineError.lo \
+ 	java/lang/VMClassLoader.lo java/lang/VMCompiler.lo \
+ 	java/lang/VMSecurityManager.lo java/lang/VMThrowable.lo \
+ 	java/lang/Void.lo java/io/BufferedInputStream.lo \
+ 	java/io/BufferedOutputStream.lo java/io/BufferedReader.lo \
+ 	java/io/BufferedWriter.lo java/io/ByteArrayInputStream.lo \
+ 	java/io/ByteArrayOutputStream.lo java/io/CharArrayReader.lo \
+ 	java/io/CharArrayWriter.lo java/io/CharConversionException.lo \
+ 	java/io/DataInput.lo java/io/DataInputStream.lo \
+ 	java/io/DataOutput.lo java/io/DataOutputStream.lo \
+ 	java/io/EOFException.lo java/io/Externalizable.lo \
+ 	java/io/File.lo java/io/FileDescriptor.lo \
+ 	java/io/FileFilter.lo java/io/FileInputStream.lo \
+ 	java/io/FileNotFoundException.lo java/io/FileOutputStream.lo \
+ 	java/io/FilePermission.lo java/io/FileReader.lo \
+ 	java/io/FileWriter.lo java/io/FilenameFilter.lo \
+ 	java/io/FilterInputStream.lo java/io/FilterOutputStream.lo \
+ 	java/io/FilterReader.lo java/io/FilterWriter.lo \
+ 	java/io/IOException.lo java/io/InputStream.lo \
+ 	java/io/InputStreamReader.lo java/io/InterruptedIOException.lo \
+ 	java/io/InvalidClassException.lo \
+ 	java/io/InvalidObjectException.lo \
+ 	java/io/LineNumberInputStream.lo java/io/LineNumberReader.lo \
+ 	java/io/NotActiveException.lo \
+ 	java/io/NotSerializableException.lo java/io/ObjectInput.lo \
+ 	java/io/ObjectInputStream.lo java/io/ObjectInputValidation.lo \
+ 	java/io/ObjectOutput.lo java/io/ObjectOutputStream.lo \
+ 	java/io/ObjectStreamClass.lo java/io/ObjectStreamConstants.lo \
+ 	java/io/ObjectStreamException.lo java/io/ObjectStreamField.lo \
+ 	java/io/OptionalDataException.lo java/io/OutputStream.lo \
+ 	java/io/OutputStreamWriter.lo java/io/PipedInputStream.lo \
+ 	java/io/PipedOutputStream.lo java/io/PipedReader.lo \
+ 	java/io/PipedWriter.lo java/io/PrintStream.lo \
+ 	java/io/PrintWriter.lo java/io/PushbackInputStream.lo \
+ 	java/io/PushbackReader.lo java/io/RandomAccessFile.lo \
+ 	java/io/Reader.lo java/io/SequenceInputStream.lo \
+ 	java/io/Serializable.lo java/io/SerializablePermission.lo \
+ 	java/io/StreamCorruptedException.lo java/io/StreamTokenizer.lo \
+ 	java/io/StringBufferInputStream.lo java/io/StringReader.lo \
+ 	java/io/StringWriter.lo java/io/SyncFailedException.lo \
+ 	java/io/UTFDataFormatException.lo \
+ 	java/io/UnsupportedEncodingException.lo \
+ 	java/io/VMObjectStreamClass.lo \
+ 	java/io/WriteAbortedException.lo java/io/Writer.lo \
+ 	java/util/AbstractCollection.lo java/util/AbstractList.lo \
+ 	java/util/AbstractMap.lo java/util/AbstractSequentialList.lo \
+ 	java/util/AbstractSet.lo java/util/ArrayList.lo \
+ 	java/util/Arrays.lo java/util/BitSet.lo java/util/Calendar.lo \
+ 	java/util/Collection.lo java/util/Collections.lo \
+ 	java/util/Comparator.lo \
+ 	java/util/ConcurrentModificationException.lo \
+ 	java/util/Currency.lo java/util/Date.lo \
+ 	java/util/Dictionary.lo java/util/EmptyStackException.lo \
+ 	java/util/Enumeration.lo java/util/EventListener.lo \
+ 	java/util/EventListenerProxy.lo java/util/EventObject.lo \
+ 	java/util/GregorianCalendar.lo java/util/HashMap.lo \
+ 	java/util/HashSet.lo java/util/Hashtable.lo \
+ 	java/util/IdentityHashMap.lo java/util/Iterator.lo \
+ 	java/util/LinkedList.lo java/util/LinkedHashMap.lo \
+ 	java/util/LinkedHashSet.lo java/util/List.lo \
+ 	java/util/ListIterator.lo java/util/ListResourceBundle.lo \
+ 	java/util/Locale.lo java/util/Map.lo \
+ 	java/util/MissingResourceException.lo \
+ 	java/util/NoSuchElementException.lo java/util/Observable.lo \
+ 	java/util/Observer.lo java/util/Properties.lo \
+ 	java/util/PropertyPermission.lo \
+ 	java/util/PropertyPermissionCollection.lo \
+ 	java/util/PropertyResourceBundle.lo java/util/Random.lo \
+ 	java/util/RandomAccess.lo java/util/ResourceBundle.lo \
+ 	java/util/Set.lo java/util/SimpleTimeZone.lo \
+ 	java/util/SortedMap.lo java/util/SortedSet.lo \
+ 	java/util/Stack.lo java/util/StringTokenizer.lo \
+ 	java/util/TimeZone.lo java/util/Timer.lo \
+ 	java/util/TimerTask.lo java/util/TreeMap.lo \
+ 	java/util/TreeSet.lo java/util/TooManyListenersException.lo \
+ 	java/util/Vector.lo java/util/VMTimeZone.lo \
+ 	java/util/WeakHashMap.lo java/util/logging/ConsoleHandler.lo \
+ 	java/util/logging/ErrorManager.lo \
+ 	java/util/logging/FileHandler.lo java/util/logging/Filter.lo \
+ 	java/util/logging/Formatter.lo java/util/logging/Handler.lo \
+ 	java/util/logging/Level.lo java/util/logging/Logger.lo \
+ 	java/util/logging/LoggingPermission.lo \
+ 	java/util/logging/LogManager.lo java/util/logging/LogRecord.lo \
+ 	java/util/logging/MemoryHandler.lo \
+ 	java/util/logging/SimpleFormatter.lo \
+ 	java/util/logging/SocketHandler.lo \
+ 	java/util/logging/StreamHandler.lo \
+ 	java/util/logging/XMLFormatter.lo \
+ 	java/util/prefs/NodeChangeListener.lo \
+ 	java/util/prefs/Preferences.lo \
+ 	java/util/prefs/PreferenceChangeListener.lo \
+ 	java/util/prefs/NodeChangeEvent.lo \
+ 	java/util/prefs/InvalidPreferencesFormatException.lo \
+ 	java/util/prefs/AbstractPreferences.lo \
+ 	java/util/prefs/BackingStoreException.lo \
+ 	java/util/prefs/PreferenceChangeEvent.lo \
+ 	java/util/prefs/PreferencesFactory.lo \
+ 	java/util/regex/Matcher.lo java/util/regex/Pattern.lo \
+ 	java/util/regex/PatternSyntaxException.lo
+ am__objects_9 = java/rmi/activation/Activatable.lo \
+ 	java/rmi/activation/ActivateFailedException.lo \
+ 	java/rmi/activation/ActivationDesc.lo \
+ 	java/rmi/activation/ActivationException.lo \
+ 	java/rmi/activation/ActivationGroup.lo \
+ 	java/rmi/activation/ActivationGroupDesc.lo \
+ 	java/rmi/activation/ActivationGroupID.lo \
+ 	java/rmi/activation/ActivationID.lo \
+ 	java/rmi/activation/ActivationInstantiator.lo \
+ 	java/rmi/activation/ActivationMonitor.lo \
+ 	java/rmi/activation/ActivationSystem.lo \
+ 	java/rmi/activation/Activator.lo \
+ 	java/rmi/activation/UnknownGroupException.lo \
+ 	java/rmi/activation/UnknownObjectException.lo \
+ 	java/rmi/AccessException.lo java/rmi/AlreadyBoundException.lo \
+ 	java/rmi/ConnectException.lo java/rmi/ConnectIOException.lo \
+ 	java/rmi/MarshalException.lo java/rmi/MarshalledObject.lo \
+ 	java/rmi/Naming.lo java/rmi/NoSuchObjectException.lo \
+ 	java/rmi/NotBoundException.lo java/rmi/RMISecurityException.lo \
+ 	java/rmi/RMISecurityManager.lo java/rmi/Remote.lo \
+ 	java/rmi/RemoteException.lo java/rmi/ServerError.lo \
+ 	java/rmi/ServerException.lo java/rmi/ServerRuntimeException.lo \
+ 	java/rmi/StubNotFoundException.lo \
+ 	java/rmi/UnexpectedException.lo \
+ 	java/rmi/UnknownHostException.lo \
+ 	java/rmi/UnmarshalException.lo java/rmi/dgc/DGC.lo \
+ 	java/rmi/dgc/Lease.lo java/rmi/dgc/VMID.lo \
+ 	java/rmi/registry/LocateRegistry.lo \
+ 	java/rmi/registry/Registry.lo \
+ 	java/rmi/registry/RegistryHandler.lo \
+ 	java/rmi/server/ExportException.lo \
+ 	java/rmi/server/LoaderHandler.lo java/rmi/server/LogStream.lo \
+ 	java/rmi/server/ObjID.lo java/rmi/server/Operation.lo \
+ 	java/rmi/server/RMIClassLoader.lo \
+ 	java/rmi/server/RMIClassLoaderSpi.lo \
+ 	java/rmi/server/RMIClientSocketFactory.lo \
+ 	java/rmi/server/RMIFailureHandler.lo \
+ 	java/rmi/server/RMIServerSocketFactory.lo \
+ 	java/rmi/server/RMISocketFactory.lo \
+ 	java/rmi/server/RemoteCall.lo java/rmi/server/RemoteObject.lo \
+ 	java/rmi/server/RemoteRef.lo java/rmi/server/RemoteServer.lo \
+ 	java/rmi/server/RemoteStub.lo \
+ 	java/rmi/server/ServerCloneException.lo \
+ 	java/rmi/server/ServerNotActiveException.lo \
+ 	java/rmi/server/ServerRef.lo java/rmi/server/Skeleton.lo \
+ 	java/rmi/server/SkeletonMismatchException.lo \
+ 	java/rmi/server/SkeletonNotFoundException.lo \
+ 	java/rmi/server/SocketSecurityException.lo \
+ 	java/rmi/server/UID.lo java/rmi/server/UnicastRemoteObject.lo \
+ 	java/rmi/server/Unreferenced.lo \
+ 	gnu/java/rmi/RMIMarshalledObjectInputStream.lo \
+ 	gnu/java/rmi/RMIMarshalledObjectOutputStream.lo \
+ 	gnu/java/rmi/dgc/DGCImpl.lo gnu/java/rmi/dgc/DGCImpl_Skel.lo \
+ 	gnu/java/rmi/dgc/DGCImpl_Stub.lo \
+ 	gnu/java/rmi/registry/RegistryImpl.lo \
+ 	gnu/java/rmi/registry/RegistryImpl_Skel.lo \
+ 	gnu/java/rmi/registry/RegistryImpl_Stub.lo \
+ 	gnu/java/rmi/rmic/Compile_gcj.lo \
+ 	gnu/java/rmi/rmic/Compile_jikes.lo \
+ 	gnu/java/rmi/rmic/Compile_kjc.lo gnu/java/rmi/rmic/Compiler.lo \
+ 	gnu/java/rmi/rmic/CompilerProcess.lo gnu/java/rmi/rmic/RMIC.lo \
+ 	gnu/java/rmi/rmic/RMICException.lo \
+ 	gnu/java/rmi/rmic/TabbedWriter.lo \
+ 	gnu/java/rmi/server/ConnectionRunnerPool.lo \
+ 	gnu/java/rmi/server/ProtocolConstants.lo \
+ 	gnu/java/rmi/server/RMIDefaultSocketFactory.lo \
+ 	gnu/java/rmi/server/RMIHashes.lo \
+ 	gnu/java/rmi/server/RMIIncomingThread.lo \
+ 	gnu/java/rmi/server/RMIObjectInputStream.lo \
+ 	gnu/java/rmi/server/RMIObjectOutputStream.lo \
+ 	gnu/java/rmi/server/RMIVoidValue.lo \
+ 	gnu/java/rmi/server/UnicastConnection.lo \
+ 	gnu/java/rmi/server/UnicastConnectionManager.lo \
+ 	gnu/java/rmi/server/UnicastRef.lo \
+ 	gnu/java/rmi/server/UnicastRemoteCall.lo \
+ 	gnu/java/rmi/server/UnicastRemoteStub.lo \
+ 	gnu/java/rmi/server/UnicastServer.lo \
+ 	gnu/java/rmi/server/UnicastServerRef.lo
+ am__objects_10 = gnu/awt/LightweightRedirector.lo \
+ 	gnu/awt/j2d/AbstractGraphicsState.lo \
+ 	gnu/awt/j2d/DirectRasterGraphics.lo \
+ 	gnu/awt/j2d/Graphics2DImpl.lo \
+ 	gnu/awt/j2d/IntegerGraphicsState.lo \
+ 	gnu/awt/j2d/MappedRaster.lo gnu/java/awt/BitMaskExtent.lo \
+ 	gnu/java/awt/Buffers.lo gnu/java/awt/BitwiseXORComposite.lo \
+ 	gnu/java/awt/ComponentDataBlitOp.lo \
+ 	gnu/java/awt/ClasspathToolkit.lo \
+ 	gnu/java/awt/EmbeddedWindow.lo \
+ 	gnu/java/awt/EmbeddedWindowSupport.lo \
+ 	gnu/java/awt/EventModifier.lo \
+ 	gnu/java/awt/color/CieXyzConverter.lo \
+ 	gnu/java/awt/color/ClutProfileConverter.lo \
+ 	gnu/java/awt/color/ColorLookUpTable.lo \
+ 	gnu/java/awt/color/ColorSpaceConverter.lo \
+ 	gnu/java/awt/color/GrayProfileConverter.lo \
+ 	gnu/java/awt/color/GrayScaleConverter.lo \
+ 	gnu/java/awt/color/LinearRGBConverter.lo \
+ 	gnu/java/awt/color/ProfileHeader.lo \
+ 	gnu/java/awt/color/PyccConverter.lo \
+ 	gnu/java/awt/color/RgbProfileConverter.lo \
+ 	gnu/java/awt/color/SrgbConverter.lo \
+ 	gnu/java/awt/color/TagEntry.lo \
+ 	gnu/java/awt/color/ToneReproductionCurve.lo \
+ 	gnu/java/awt/image/ImageDecoder.lo \
+ 	gnu/java/awt/image/XBMDecoder.lo \
+ 	gnu/java/awt/peer/EmbeddedWindowPeer.lo \
+ 	gnu/java/awt/peer/GLightweightPeer.lo \
+ 	gnu/java/awt/peer/ClasspathFontPeer.lo \
+ 	gnu/java/awt/peer/ClasspathTextLayoutPeer.lo \
+ 	java/applet/Applet.lo java/applet/AppletStub.lo \
+ 	java/applet/AppletContext.lo java/applet/AudioClip.lo \
+ 	java/awt/AWTError.lo java/awt/AWTEvent.lo \
+ 	java/awt/AWTEventMulticaster.lo java/awt/AWTException.lo \
+ 	java/awt/AWTPermission.lo java/awt/ActiveEvent.lo \
+ 	java/awt/Adjustable.lo java/awt/BorderLayout.lo \
+ 	java/awt/Button.lo java/awt/Canvas.lo java/awt/CardLayout.lo \
+ 	java/awt/Checkbox.lo java/awt/CheckboxGroup.lo \
+ 	java/awt/CheckboxMenuItem.lo java/awt/Choice.lo \
+ 	java/awt/Color.lo java/awt/Component.lo \
+ 	java/awt/ComponentOrientation.lo java/awt/Container.lo \
+ 	java/awt/Cursor.lo java/awt/Dialog.lo java/awt/Dimension.lo \
+ 	java/awt/Event.lo java/awt/EventDispatchThread.lo \
+ 	java/awt/EventQueue.lo java/awt/FileDialog.lo \
+ 	java/awt/FlowLayout.lo java/awt/Font.lo \
+ 	java/awt/FontMetrics.lo java/awt/Frame.lo java/awt/Graphics.lo \
+ 	java/awt/Graphics2D.lo java/awt/GraphicsConfiguration.lo \
+ 	java/awt/GridBagConstraints.lo java/awt/GridBagLayout.lo \
+ 	java/awt/GridBagLayoutInfo.lo java/awt/GridLayout.lo \
+ 	java/awt/IllegalComponentStateException.lo java/awt/Image.lo \
+ 	java/awt/Insets.lo java/awt/ItemSelectable.lo \
+ 	java/awt/Label.lo java/awt/LayoutManager.lo \
+ 	java/awt/LayoutManager2.lo java/awt/List.lo java/awt/Menu.lo \
+ 	java/awt/MenuBar.lo java/awt/MenuComponent.lo \
+ 	java/awt/MenuContainer.lo java/awt/MenuItem.lo \
+ 	java/awt/MenuShortcut.lo java/awt/Paint.lo \
+ 	java/awt/PaintContext.lo java/awt/Panel.lo java/awt/Point.lo \
+ 	java/awt/PopupMenu.lo java/awt/Rectangle.lo \
+ 	java/awt/RenderingHints.lo java/awt/ScrollPane.lo \
+ 	java/awt/Scrollbar.lo java/awt/Shape.lo java/awt/TextArea.lo \
+ 	java/awt/TextComponent.lo java/awt/TextField.lo \
+ 	java/awt/Toolkit.lo java/awt/Transparency.lo \
+ 	java/awt/Window.lo java/awt/color/ColorSpace.lo \
+ 	java/awt/color/ICC_ColorSpace.lo java/awt/color/ICC_Profile.lo \
+ 	java/awt/color/ICC_ProfileGray.lo \
+ 	java/awt/color/ICC_ProfileRGB.lo \
+ 	java/awt/color/CMMException.lo \
+ 	java/awt/color/ProfileDataException.lo \
+ 	java/awt/datatransfer/Clipboard.lo \
+ 	java/awt/datatransfer/ClipboardOwner.lo \
+ 	java/awt/datatransfer/DataFlavor.lo \
+ 	java/awt/datatransfer/FlavorMap.lo \
+ 	java/awt/datatransfer/MimeTypeParseException.lo \
+ 	java/awt/datatransfer/StringSelection.lo \
+ 	java/awt/datatransfer/SystemFlavorMap.lo \
+ 	java/awt/datatransfer/Transferable.lo \
+ 	java/awt/datatransfer/UnsupportedFlavorException.lo \
+ 	java/awt/datatransfer/FlavorTable.lo \
+ 	java/awt/event/AWTEventListener.lo \
+ 	java/awt/event/ActionEvent.lo java/awt/event/ActionListener.lo \
+ 	java/awt/event/AdjustmentEvent.lo \
+ 	java/awt/event/AdjustmentListener.lo \
+ 	java/awt/event/ComponentAdapter.lo \
+ 	java/awt/event/ComponentEvent.lo \
+ 	java/awt/event/ComponentListener.lo \
+ 	java/awt/event/ContainerAdapter.lo \
+ 	java/awt/event/ContainerEvent.lo \
+ 	java/awt/event/ContainerListener.lo \
+ 	java/awt/event/FocusAdapter.lo java/awt/event/FocusEvent.lo \
+ 	java/awt/event/FocusListener.lo \
+ 	java/awt/event/HierarchyBoundsAdapter.lo \
+ 	java/awt/event/HierarchyBoundsListener.lo \
+ 	java/awt/event/HierarchyEvent.lo \
+ 	java/awt/event/HierarchyListener.lo \
+ 	java/awt/event/InputEvent.lo \
+ 	java/awt/event/InputMethodEvent.lo \
+ 	java/awt/event/InputMethodListener.lo \
+ 	java/awt/event/InvocationEvent.lo java/awt/event/ItemEvent.lo \
+ 	java/awt/event/ItemListener.lo java/awt/event/KeyAdapter.lo \
+ 	java/awt/event/KeyEvent.lo java/awt/event/KeyListener.lo \
+ 	java/awt/event/MouseAdapter.lo java/awt/event/MouseEvent.lo \
+ 	java/awt/event/MouseListener.lo \
+ 	java/awt/event/MouseMotionAdapter.lo \
+ 	java/awt/event/MouseMotionListener.lo \
+ 	java/awt/event/PaintEvent.lo java/awt/event/TextEvent.lo \
+ 	java/awt/event/TextListener.lo java/awt/event/WindowAdapter.lo \
+ 	java/awt/event/WindowEvent.lo java/awt/event/WindowListener.lo \
+ 	java/awt/event/AWTEventListenerProxy.lo \
+ 	java/awt/event/MouseWheelEvent.lo \
+ 	java/awt/event/MouseWheelListener.lo \
+ 	java/awt/event/WindowFocusListener.lo \
+ 	java/awt/event/WindowStateListener.lo \
+ 	java/awt/font/FontRenderContext.lo \
+ 	java/awt/font/ShapeGraphicAttribute.lo \
+ 	java/awt/font/MultipleMaster.lo \
+ 	java/awt/font/TransformAttribute.lo \
+ 	java/awt/font/GlyphJustificationInfo.lo \
+ 	java/awt/font/LineBreakMeasurer.lo \
+ 	java/awt/font/TextMeasurer.lo java/awt/font/TextLayout.lo \
+ 	java/awt/font/LineMetrics.lo java/awt/font/TextAttribute.lo \
+ 	java/awt/font/GlyphMetrics.lo java/awt/font/OpenType.lo \
+ 	java/awt/font/GlyphVector.lo java/awt/font/GraphicAttribute.lo \
+ 	java/awt/font/ImageGraphicAttribute.lo \
+ 	java/awt/font/NumericShaper.lo \
+ 	java/awt/geom/AffineTransform.lo java/awt/geom/Dimension2D.lo \
+ 	java/awt/geom/Ellipse2D.lo \
+ 	java/awt/geom/IllegalPathStateException.lo \
+ 	java/awt/geom/NoninvertibleTransformException.lo \
+ 	java/awt/geom/PathIterator.lo java/awt/geom/Point2D.lo \
+ 	java/awt/geom/Rectangle2D.lo java/awt/geom/RectangularShape.lo \
+ 	java/awt/geom/RoundRectangle2D.lo java/awt/geom/Line2D.lo \
+ 	java/awt/geom/Arc2D.lo java/awt/geom/Area.lo \
+ 	java/awt/geom/CubicCurve2D.lo \
+ 	java/awt/geom/FlatteningPathIterator.lo \
+ 	java/awt/geom/GeneralPath.lo java/awt/geom/QuadCurve2D.lo \
+ 	java/awt/image/BandCombineOp.lo \
+ 	java/awt/image/BandedSampleModel.lo \
+ 	java/awt/image/AffineTransformOp.lo \
+ 	java/awt/image/BufferedImage.lo \
+ 	java/awt/image/BufferedImageFilter.lo \
+ 	java/awt/image/ByteLookupTable.lo \
+ 	java/awt/image/ColorConvertOp.lo java/awt/image/ColorModel.lo \
+ 	java/awt/image/ComponentColorModel.lo \
+ 	java/awt/image/ComponentSampleModel.lo \
+ 	java/awt/image/ConvolveOp.lo java/awt/image/DataBuffer.lo \
+ 	java/awt/image/DataBufferByte.lo \
+ 	java/awt/image/DataBufferDouble.lo \
+ 	java/awt/image/DataBufferFloat.lo \
+ 	java/awt/image/DataBufferInt.lo \
+ 	java/awt/image/DataBufferShort.lo \
+ 	java/awt/image/DataBufferUShort.lo \
+ 	java/awt/image/DirectColorModel.lo \
+ 	java/awt/image/ImageConsumer.lo \
+ 	java/awt/image/ImageObserver.lo \
+ 	java/awt/image/ImageProducer.lo \
+ 	java/awt/image/IndexColorModel.lo java/awt/image/Kernel.lo \
+ 	java/awt/image/LookupOp.lo java/awt/image/LookupTable.lo \
+ 	java/awt/image/MultiPixelPackedSampleModel.lo \
+ 	java/awt/image/PackedColorModel.lo \
+ 	java/awt/image/PixelInterleavedSampleModel.lo \
+ 	java/awt/image/Raster.lo java/awt/image/RasterOp.lo \
+ 	java/awt/image/RescaleOp.lo java/awt/image/SampleModel.lo \
+ 	java/awt/image/ShortLookupTable.lo \
+ 	java/awt/image/SinglePixelPackedSampleModel.lo \
+ 	java/awt/image/WritableRaster.lo \
+ 	java/awt/image/AreaAveragingScaleFilter.lo \
+ 	java/awt/image/CropImageFilter.lo \
+ 	java/awt/image/FilteredImageSource.lo \
+ 	java/awt/image/ImageFilter.lo \
+ 	java/awt/image/MemoryImageSource.lo \
+ 	java/awt/image/PixelGrabber.lo \
+ 	java/awt/image/RGBImageFilter.lo \
+ 	java/awt/image/ReplicateScaleFilter.lo \
+ 	java/awt/image/BufferStrategy.lo \
+ 	java/awt/image/BufferedImageOp.lo \
+ 	java/awt/image/ImagingOpException.lo \
+ 	java/awt/image/RasterFormatException.lo \
+ 	java/awt/image/RenderedImage.lo java/awt/image/TileObserver.lo \
+ 	java/awt/image/VolatileImage.lo \
+ 	java/awt/image/WritableRenderedImage.lo \
+ 	java/awt/image/renderable/ContextualRenderedImageFactory.lo \
+ 	java/awt/image/renderable/ParameterBlock.lo \
+ 	java/awt/image/renderable/RenderContext.lo \
+ 	java/awt/image/renderable/RenderableImage.lo \
+ 	java/awt/image/renderable/RenderableImageOp.lo \
+ 	java/awt/image/renderable/RenderableImageProducer.lo \
+ 	java/awt/image/renderable/RenderedImageFactory.lo \
+ 	java/awt/peer/ButtonPeer.lo java/awt/peer/CanvasPeer.lo \
+ 	java/awt/peer/CheckboxMenuItemPeer.lo \
+ 	java/awt/peer/CheckboxPeer.lo java/awt/peer/ChoicePeer.lo \
+ 	java/awt/peer/ComponentPeer.lo java/awt/peer/ContainerPeer.lo \
+ 	java/awt/peer/DialogPeer.lo java/awt/peer/FileDialogPeer.lo \
+ 	java/awt/peer/FontPeer.lo java/awt/peer/FramePeer.lo \
+ 	java/awt/peer/LabelPeer.lo java/awt/peer/LightweightPeer.lo \
+ 	java/awt/peer/ListPeer.lo java/awt/peer/MenuBarPeer.lo \
+ 	java/awt/peer/MenuComponentPeer.lo \
+ 	java/awt/peer/MenuItemPeer.lo java/awt/peer/MenuPeer.lo \
+ 	java/awt/peer/PanelPeer.lo java/awt/peer/PopupMenuPeer.lo \
+ 	java/awt/peer/RobotPeer.lo java/awt/peer/ScrollPanePeer.lo \
+ 	java/awt/peer/ScrollbarPeer.lo java/awt/peer/TextAreaPeer.lo \
+ 	java/awt/peer/TextComponentPeer.lo \
+ 	java/awt/peer/TextFieldPeer.lo java/awt/peer/WindowPeer.lo \
+ 	java/awt/SystemColor.lo java/awt/Polygon.lo \
+ 	java/awt/MediaTracker.lo java/awt/PrintGraphics.lo \
+ 	java/awt/PrintJob.lo java/awt/AWTKeyStroke.lo \
+ 	java/awt/AlphaComposite.lo java/awt/AttributeValue.lo \
+ 	java/awt/BasicStroke.lo java/awt/BufferCapabilities.lo \
+ 	java/awt/ColorPaintContext.lo java/awt/Composite.lo \
+ 	java/awt/CompositeContext.lo \
+ 	java/awt/ContainerOrderFocusTraversalPolicy.lo \
+ 	java/awt/DefaultFocusTraversalPolicy.lo \
+ 	java/awt/DefaultKeyboardFocusManager.lo \
+ 	java/awt/DisplayMode.lo java/awt/FocusTraversalPolicy.lo \
+ 	java/awt/FontFormatException.lo java/awt/GradientPaint.lo \
+ 	java/awt/GraphicsConfigTemplate.lo java/awt/GraphicsDevice.lo \
+ 	java/awt/GraphicsEnvironment.lo java/awt/HeadlessException.lo \
+ 	java/awt/ImageCapabilities.lo java/awt/JobAttributes.lo \
+ 	java/awt/KeyEventDispatcher.lo \
+ 	java/awt/KeyEventPostProcessor.lo \
+ 	java/awt/KeyboardFocusManager.lo java/awt/PageAttributes.lo \
+ 	java/awt/Robot.lo java/awt/ScrollPaneAdjustable.lo \
+ 	java/awt/Stroke.lo java/awt/TexturePaint.lo \
+ 	java/awt/dnd/peer/DragSourceContextPeer.lo \
+ 	java/awt/dnd/peer/DropTargetContextPeer.lo \
+ 	java/awt/dnd/peer/DropTargetPeer.lo \
+ 	java/awt/dnd/DnDConstants.lo \
+ 	java/awt/dnd/DnDEventMulticaster.lo \
+ 	java/awt/dnd/DragGestureEvent.lo \
+ 	java/awt/dnd/DragGestureListener.lo \
+ 	java/awt/dnd/DragGestureRecognizer.lo \
+ 	java/awt/dnd/DragSource.lo java/awt/dnd/DragSourceAdapter.lo \
+ 	java/awt/dnd/DragSourceContext.lo \
+ 	java/awt/dnd/DragSourceDragEvent.lo \
+ 	java/awt/dnd/DragSourceEvent.lo \
+ 	java/awt/dnd/DragSourceListener.lo \
+ 	java/awt/dnd/DragSourceMotionListener.lo \
+ 	java/awt/dnd/DropTarget.lo \
+ 	java/awt/dnd/InvalidDnDOperationException.lo \
+ 	java/awt/dnd/Autoscroll.lo java/awt/dnd/DragSourceDropEvent.lo \
+ 	java/awt/dnd/DropTargetAdapter.lo \
+ 	java/awt/dnd/DropTargetContext.lo \
+ 	java/awt/dnd/DropTargetDragEvent.lo \
+ 	java/awt/dnd/DropTargetDropEvent.lo \
+ 	java/awt/dnd/DropTargetEvent.lo \
+ 	java/awt/dnd/DropTargetListener.lo \
+ 	java/awt/dnd/MouseDragGestureRecognizer.lo \
+ 	java/awt/font/TextHitInfo.lo java/awt/im/spi/InputMethod.lo \
+ 	java/awt/im/spi/InputMethodContext.lo \
+ 	java/awt/im/spi/InputMethodDescriptor.lo \
+ 	java/awt/im/InputContext.lo \
+ 	java/awt/im/InputMethodHighlight.lo \
+ 	java/awt/im/InputMethodRequests.lo java/awt/im/InputSubset.lo \
+ 	java/awt/print/Book.lo java/awt/print/PageFormat.lo \
+ 	java/awt/print/Pageable.lo java/awt/print/Paper.lo \
+ 	java/awt/print/Printable.lo \
+ 	java/awt/print/PrinterAbortException.lo \
+ 	java/awt/print/PrinterException.lo \
+ 	java/awt/print/PrinterGraphics.lo \
+ 	java/awt/print/PrinterIOException.lo \
+ 	java/awt/print/PrinterJob.lo \
+ 	java/beans/beancontext/BeanContext.lo \
+ 	java/beans/beancontext/BeanContextChild.lo \
+ 	java/beans/beancontext/BeanContextChildComponentProxy.lo \
+ 	java/beans/beancontext/BeanContextChildSupport.lo \
+ 	java/beans/beancontext/BeanContextContainerProxy.lo \
+ 	java/beans/beancontext/BeanContextEvent.lo \
+ 	java/beans/beancontext/BeanContextMembershipEvent.lo \
+ 	java/beans/beancontext/BeanContextMembershipListener.lo \
+ 	java/beans/beancontext/BeanContextProxy.lo \
+ 	java/beans/beancontext/BeanContextServiceAvailableEvent.lo \
+ 	java/beans/beancontext/BeanContextServiceProvider.lo \
+ 	java/beans/beancontext/BeanContextServiceProviderBeanInfo.lo \
+ 	java/beans/beancontext/BeanContextServiceRevokedEvent.lo \
+ 	java/beans/beancontext/BeanContextServiceRevokedListener.lo \
+ 	java/beans/beancontext/BeanContextServices.lo \
+ 	java/beans/beancontext/BeanContextServicesListener.lo \
+ 	java/beans/beancontext/BeanContextServicesSupport.lo \
+ 	java/beans/beancontext/BeanContextSupport.lo \
+ 	java/beans/BeanDescriptor.lo java/beans/BeanInfo.lo \
+ 	java/beans/Beans.lo java/beans/Customizer.lo \
+ 	java/beans/DesignMode.lo java/beans/EventHandler.lo \
+ 	java/beans/EventSetDescriptor.lo \
+ 	java/beans/ExceptionListener.lo java/beans/Expression.lo \
+ 	java/beans/FeatureDescriptor.lo \
+ 	java/beans/IndexedPropertyDescriptor.lo \
+ 	java/beans/IntrospectionException.lo \
+ 	java/beans/Introspector.lo java/beans/MethodDescriptor.lo \
+ 	java/beans/ParameterDescriptor.lo \
+ 	java/beans/PropertyChangeEvent.lo \
+ 	java/beans/PropertyChangeListener.lo \
+ 	java/beans/PropertyChangeListenerProxy.lo \
+ 	java/beans/PropertyChangeSupport.lo \
+ 	java/beans/PropertyDescriptor.lo java/beans/PropertyEditor.lo \
+ 	java/beans/PropertyEditorManager.lo \
+ 	java/beans/PropertyEditorSupport.lo \
+ 	java/beans/PropertyVetoException.lo java/beans/Statement.lo \
+ 	java/beans/SimpleBeanInfo.lo \
+ 	java/beans/VetoableChangeListener.lo \
+ 	java/beans/VetoableChangeListenerProxy.lo \
+ 	java/beans/VetoableChangeSupport.lo java/beans/Visibility.lo \
+ 	java/beans/AppletInitializer.lo java/beans/XMLDecoder.lo \
+ 	javax/swing/border/AbstractBorder.lo \
+ 	javax/swing/border/BevelBorder.lo javax/swing/border/Border.lo \
+ 	javax/swing/border/CompoundBorder.lo \
+ 	javax/swing/border/EmptyBorder.lo \
+ 	javax/swing/border/EtchedBorder.lo \
+ 	javax/swing/border/LineBorder.lo \
+ 	javax/swing/border/MatteBorder.lo \
+ 	javax/swing/border/SoftBevelBorder.lo \
+ 	javax/swing/border/TitledBorder.lo javax/swing/GrayFilter.lo \
+ 	javax/swing/AbstractAction.lo javax/swing/AbstractButton.lo \
+ 	javax/swing/AbstractSpinnerModel.lo \
+ 	javax/swing/plaf/basic/BasicArrowButton.lo \
+ 	javax/swing/plaf/basic/BasicButtonListener.lo \
+ 	javax/swing/plaf/basic/BasicButtonUI.lo \
+ 	javax/swing/plaf/basic/BasicCheckBoxUI.lo \
+ 	javax/swing/plaf/basic/BasicColorChooserUI.lo \
+ 	javax/swing/plaf/basic/BasicComboBoxUI.lo \
+ 	javax/swing/plaf/basic/BasicComboBoxEditor.lo \
+ 	javax/swing/plaf/basic/BasicComboBoxRenderer.lo \
+ 	javax/swing/plaf/basic/BasicComboPopup.lo \
+ 	javax/swing/plaf/basic/BasicDesktopIconUI.lo \
+ 	javax/swing/plaf/basic/BasicDesktopPaneUI.lo \
+ 	javax/swing/plaf/basic/BasicEditorPaneUI.lo \
+ 	javax/swing/plaf/basic/BasicFormattedTextFieldUI.lo \
+ 	javax/swing/plaf/basic/BasicGraphicsUtils.lo \
+ 	javax/swing/plaf/basic/BasicInternalFrameTitlePane.lo \
+ 	javax/swing/plaf/basic/BasicInternalFrameUI.lo \
+ 	javax/swing/plaf/basic/BasicLabelUI.lo \
+ 	javax/swing/plaf/basic/BasicListUI.lo \
+ 	javax/swing/plaf/basic/BasicMenuUI.lo \
+ 	javax/swing/plaf/basic/BasicMenuBarUI.lo \
+ 	javax/swing/plaf/basic/BasicMenuItemUI.lo \
+ 	javax/swing/plaf/basic/BasicOptionPaneUI.lo \
+ 	javax/swing/plaf/basic/BasicPanelUI.lo \
+ 	javax/swing/plaf/basic/BasicPasswordFieldUI.lo \
+ 	javax/swing/plaf/basic/BasicPopupMenuUI.lo \
+ 	javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.lo \
+ 	javax/swing/plaf/basic/BasicProgressBarUI.lo \
+ 	javax/swing/plaf/basic/BasicRootPaneUI.lo \
+ 	javax/swing/plaf/basic/BasicRadioButtonUI.lo \
+ 	javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.lo \
+ 	javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.lo \
+ 	javax/swing/plaf/basic/BasicScrollBarUI.lo \
+ 	javax/swing/plaf/basic/BasicScrollPaneUI.lo \
+ 	javax/swing/plaf/basic/BasicSeparatorUI.lo \
+ 	javax/swing/plaf/basic/BasicSliderUI.lo \
+ 	javax/swing/plaf/basic/BasicSpinnerUI.lo \
+ 	javax/swing/plaf/basic/BasicSplitPaneDivider.lo \
+ 	javax/swing/plaf/basic/BasicSplitPaneUI.lo \
+ 	javax/swing/plaf/basic/BasicTabbedPaneUI.lo \
+ 	javax/swing/plaf/basic/BasicTableUI.lo \
+ 	javax/swing/plaf/basic/BasicTableHeaderUI.lo \
+ 	javax/swing/plaf/basic/BasicTextAreaUI.lo \
+ 	javax/swing/plaf/basic/BasicTextFieldUI.lo \
+ 	javax/swing/plaf/basic/BasicTextPaneUI.lo \
+ 	javax/swing/plaf/basic/BasicTextUI.lo \
+ 	javax/swing/plaf/basic/BasicToggleButtonUI.lo \
+ 	javax/swing/plaf/basic/BasicToolBarSeparatorUI.lo \
+ 	javax/swing/plaf/basic/BasicToolBarUI.lo \
+ 	javax/swing/plaf/basic/BasicToolTipUI.lo \
+ 	javax/swing/plaf/basic/BasicTreeUI.lo \
+ 	javax/swing/plaf/basic/BasicViewportUI.lo \
+ 	javax/swing/plaf/basic/BasicLookAndFeel.lo \
+ 	javax/swing/plaf/basic/BasicBorders.lo \
+ 	javax/swing/plaf/basic/BasicIconFactory.lo \
+ 	javax/swing/plaf/basic/ComboPopup.lo \
+ 	javax/swing/plaf/BorderUIResource.lo \
+ 	javax/swing/plaf/UIResource.lo javax/swing/plaf/ButtonUI.lo \
+ 	javax/swing/plaf/ComponentUI.lo javax/swing/plaf/LabelUI.lo \
+ 	javax/swing/plaf/ListUI.lo javax/swing/plaf/OptionPaneUI.lo \
+ 	javax/swing/plaf/PanelUI.lo javax/swing/plaf/ScrollPaneUI.lo \
+ 	javax/swing/plaf/TabbedPaneUI.lo javax/swing/plaf/TextUI.lo \
+ 	javax/swing/plaf/TreeUI.lo javax/swing/plaf/ViewportUI.lo \
+ 	javax/swing/plaf/metal/DefaultMetalTheme.lo \
+ 	javax/swing/plaf/metal/MetalLookAndFeel.lo \
+ 	javax/swing/plaf/metal/MetalTheme.lo \
+ 	javax/swing/plaf/ColorUIResource.lo \
+ 	javax/swing/plaf/DimensionUIResource.lo \
+ 	javax/swing/plaf/FontUIResource.lo \
+ 	javax/swing/plaf/IconUIResource.lo \
+ 	javax/swing/plaf/InsetsUIResource.lo \
+ 	javax/swing/plaf/ActionMapUIResource.lo \
+ 	javax/swing/plaf/ColorChooserUI.lo \
+ 	javax/swing/plaf/ComboBoxUI.lo \
+ 	javax/swing/plaf/ComponentInputMapUIResource.lo \
+ 	javax/swing/plaf/DesktopIconUI.lo \
+ 	javax/swing/plaf/DesktopPaneUI.lo \
+ 	javax/swing/plaf/FileChooserUI.lo \
+ 	javax/swing/plaf/InputMapUIResource.lo \
+ 	javax/swing/plaf/InternalFrameUI.lo \
+ 	javax/swing/plaf/MenuBarUI.lo javax/swing/plaf/MenuItemUI.lo \
+ 	javax/swing/plaf/PopupMenuUI.lo \
+ 	javax/swing/plaf/ProgressBarUI.lo \
+ 	javax/swing/plaf/RootPaneUI.lo javax/swing/plaf/ScrollBarUI.lo \
+ 	javax/swing/plaf/SeparatorUI.lo javax/swing/plaf/SliderUI.lo \
+ 	javax/swing/plaf/SpinnerUI.lo javax/swing/plaf/SplitPaneUI.lo \
+ 	javax/swing/plaf/TableHeaderUI.lo javax/swing/plaf/TableUI.lo \
+ 	javax/swing/plaf/ToolBarUI.lo javax/swing/plaf/ToolTipUI.lo \
+ 	javax/swing/AbstractListModel.lo \
+ 	javax/swing/colorchooser/AbstractColorChooserPanel.lo \
+ 	javax/swing/colorchooser/ColorChooserComponentFactory.lo \
+ 	javax/swing/colorchooser/ColorSelectionModel.lo \
+ 	javax/swing/colorchooser/DefaultColorSelectionModel.lo \
+ 	javax/swing/colorchooser/DefaultPreviewPanel.lo \
+ 	javax/swing/colorchooser/DefaultSwatchChooserPanel.lo \
+ 	javax/swing/colorchooser/DefaultHSBChooserPanel.lo \
+ 	javax/swing/colorchooser/DefaultRGBChooserPanel.lo \
+ 	javax/swing/filechooser/FileFilter.lo \
+ 	javax/swing/filechooser/FileSystemView.lo \
+ 	javax/swing/filechooser/FileView.lo \
+ 	javax/swing/table/AbstractTableModel.lo \
+ 	javax/swing/table/DefaultTableColumnModel.lo \
+ 	javax/swing/table/DefaultTableModel.lo \
+ 	javax/swing/table/JTableHeader.lo \
+ 	javax/swing/table/TableCellEditor.lo \
+ 	javax/swing/table/TableCellRenderer.lo \
+ 	javax/swing/table/TableColumn.lo \
+ 	javax/swing/table/TableColumnModel.lo \
+ 	javax/swing/table/TableModel.lo \
+ 	javax/swing/table/DefaultTableCellRenderer.lo \
+ 	javax/swing/Action.lo javax/swing/BorderFactory.lo \
+ 	javax/swing/Box.lo javax/swing/BoxLayout.lo \
+ 	javax/swing/ButtonGroup.lo javax/swing/ButtonModel.lo \
+ 	javax/swing/ComponentInputMap.lo \
+ 	javax/swing/DefaultButtonModel.lo \
+ 	javax/swing/DefaultListModel.lo \
+ 	javax/swing/DefaultListSelectionModel.lo javax/swing/Icon.lo \
+ 	javax/swing/ImageIcon.lo javax/swing/InputMap.lo \
+ 	javax/swing/InternalFrameFocusTraversalPolicy.lo \
+ 	javax/swing/JApplet.lo javax/swing/JButton.lo \
+ 	javax/swing/JCheckBox.lo javax/swing/JComponent.lo \
+ 	javax/swing/JDialog.lo javax/swing/JEditorPane.lo \
+ 	javax/swing/JFormattedTextField.lo javax/swing/JFrame.lo \
+ 	javax/swing/JLabel.lo javax/swing/JLayeredPane.lo \
+ 	javax/swing/JList.lo javax/swing/JMenuBar.lo \
+ 	javax/swing/JOptionPane.lo javax/swing/JPanel.lo \
+ 	javax/swing/JRadioButton.lo javax/swing/JRootPane.lo \
+ 	javax/swing/JScrollBar.lo javax/swing/JScrollPane.lo \
+ 	javax/swing/JSpinner.lo javax/swing/JTabbedPane.lo \
+ 	javax/swing/JTextArea.lo javax/swing/JTextField.lo \
+ 	javax/swing/JToggleButton.lo javax/swing/JToolTip.lo \
+ 	javax/swing/JTree.lo javax/swing/JViewport.lo \
+ 	javax/swing/JWindow.lo javax/swing/KeyStroke.lo \
+ 	javax/swing/LayoutFocusTraversalPolicy.lo \
+ 	javax/swing/ListCellRenderer.lo javax/swing/ListModel.lo \
+ 	javax/swing/ListSelectionModel.lo javax/swing/LookAndFeel.lo \
+ 	javax/swing/Scrollable.lo \
+ 	javax/swing/SortingFocusTraversalPolicy.lo \
+ 	javax/swing/SpinnerDateModel.lo \
+ 	javax/swing/SpinnerListModel.lo javax/swing/SpinnerModel.lo \
+ 	javax/swing/SpinnerNumberModel.lo javax/swing/Spring.lo \
+ 	javax/swing/SpringLayout.lo javax/swing/SwingConstants.lo \
+ 	javax/swing/SwingUtilities.lo javax/swing/Timer.lo \
+ 	javax/swing/ToolTipManager.lo javax/swing/TransferHandler.lo \
+ 	javax/swing/UIDefaults.lo javax/swing/UIManager.lo \
+ 	javax/swing/UnsupportedLookAndFeelException.lo \
+ 	javax/swing/event/AncestorEvent.lo \
+ 	javax/swing/event/AncestorListener.lo \
+ 	javax/swing/event/ChangeEvent.lo \
+ 	javax/swing/event/ChangeListener.lo \
+ 	javax/swing/event/DocumentEvent.lo \
+ 	javax/swing/event/DocumentListener.lo \
+ 	javax/swing/event/HyperlinkEvent.lo \
+ 	javax/swing/event/HyperlinkListener.lo \
+ 	javax/swing/event/ListDataEvent.lo \
+ 	javax/swing/event/ListDataListener.lo \
+ 	javax/swing/event/ListSelectionEvent.lo \
+ 	javax/swing/event/ListSelectionListener.lo \
+ 	javax/swing/event/MenuEvent.lo \
+ 	javax/swing/event/UndoableEditEvent.lo \
+ 	javax/swing/event/UndoableEditListener.lo \
+ 	javax/swing/event/CaretEvent.lo \
+ 	javax/swing/event/CaretListener.lo \
+ 	javax/swing/event/CellEditorListener.lo \
+ 	javax/swing/event/EventListenerList.lo \
+ 	javax/swing/event/InternalFrameAdapter.lo \
+ 	javax/swing/event/InternalFrameEvent.lo \
+ 	javax/swing/event/InternalFrameListener.lo \
+ 	javax/swing/event/MenuDragMouseEvent.lo \
+ 	javax/swing/event/MenuDragMouseListener.lo \
+ 	javax/swing/event/MenuKeyEvent.lo \
+ 	javax/swing/event/MenuKeyListener.lo \
+ 	javax/swing/event/MenuListener.lo \
+ 	javax/swing/event/MouseInputAdapter.lo \
+ 	javax/swing/event/MouseInputListener.lo \
+ 	javax/swing/event/PopupMenuEvent.lo \
+ 	javax/swing/event/PopupMenuListener.lo \
+ 	javax/swing/event/SwingPropertyChangeSupport.lo \
+ 	javax/swing/event/TableColumnModelEvent.lo \
+ 	javax/swing/event/TableColumnModelListener.lo \
+ 	javax/swing/event/TableModelEvent.lo \
+ 	javax/swing/event/TableModelListener.lo \
+ 	javax/swing/event/TreeExpansionEvent.lo \
+ 	javax/swing/event/TreeExpansionListener.lo \
+ 	javax/swing/event/TreeModelEvent.lo \
+ 	javax/swing/event/TreeModelListener.lo \
+ 	javax/swing/event/TreeSelectionEvent.lo \
+ 	javax/swing/event/TreeSelectionListener.lo \
+ 	javax/swing/event/TreeWillExpandListener.lo \
+ 	javax/swing/ActionMap.lo javax/swing/text/AbstractDocument.lo \
+ 	javax/swing/text/AttributeSet.lo \
+ 	javax/swing/text/BadLocationException.lo \
+ 	javax/swing/text/Caret.lo javax/swing/text/ComponentView.lo \
+ 	javax/swing/text/DefaultCaret.lo \
+ 	javax/swing/text/DefaultEditorKit.lo \
+ 	javax/swing/text/DefaultHighlighter.lo \
+ 	javax/swing/text/DefaultStyledDocument.lo \
+ 	javax/swing/text/Document.lo \
+ 	javax/swing/text/DocumentFilter.lo \
+ 	javax/swing/text/EditorKit.lo javax/swing/text/Element.lo \
+ 	javax/swing/text/FieldView.lo javax/swing/text/GapContent.lo \
+ 	javax/swing/text/Highlighter.lo \
+ 	javax/swing/text/JTextComponent.lo javax/swing/text/Keymap.lo \
+ 	javax/swing/text/LayeredHighlighter.lo \
+ 	javax/swing/text/MutableAttributeSet.lo \
+ 	javax/swing/text/NavigationFilter.lo \
+ 	javax/swing/text/PasswordView.lo \
+ 	javax/swing/text/PlainDocument.lo \
+ 	javax/swing/text/PlainView.lo javax/swing/text/Position.lo \
+ 	javax/swing/text/Segment.lo \
+ 	javax/swing/text/SimpleAttributeSet.lo \
+ 	javax/swing/text/StringContent.lo javax/swing/text/Style.lo \
+ 	javax/swing/text/StyleConstants.lo \
+ 	javax/swing/text/StyleContext.lo \
+ 	javax/swing/text/StyledDocument.lo \
+ 	javax/swing/text/StyledEditorKit.lo \
+ 	javax/swing/text/TabableView.lo \
+ 	javax/swing/text/TabExpander.lo javax/swing/text/TabSet.lo \
+ 	javax/swing/text/TabStop.lo javax/swing/text/TextAction.lo \
+ 	javax/swing/text/Utilities.lo javax/swing/text/View.lo \
+ 	javax/swing/text/ViewFactory.lo javax/swing/text/html/HTML.lo \
+ 	javax/swing/text/html/parser/ParserDelegator.lo \
+ 	javax/swing/tree/TreeNode.lo \
+ 	javax/swing/tree/AbstractLayoutCache.lo \
+ 	javax/swing/tree/DefaultMutableTreeNode.lo \
+ 	javax/swing/tree/DefaultTreeCellEditor.lo \
+ 	javax/swing/tree/DefaultTreeCellRenderer.lo \
+ 	javax/swing/tree/DefaultTreeModel.lo \
+ 	javax/swing/tree/DefaultTreeSelectionModel.lo \
+ 	javax/swing/tree/ExpandVetoException.lo \
+ 	javax/swing/tree/FixedHeightLayoutCache.lo \
+ 	javax/swing/tree/MutableTreeNode.lo \
+ 	javax/swing/tree/RowMapper.lo \
+ 	javax/swing/tree/TreeCellEditor.lo \
+ 	javax/swing/tree/TreeCellRenderer.lo \
+ 	javax/swing/tree/TreeModel.lo javax/swing/tree/TreePath.lo \
+ 	javax/swing/tree/TreeSelectionModel.lo \
+ 	javax/swing/tree/VariableHeightLayoutCache.lo \
+ 	javax/swing/undo/UndoableEdit.lo \
+ 	javax/swing/undo/AbstractUndoableEdit.lo \
+ 	javax/swing/undo/CannotRedoException.lo \
+ 	javax/swing/undo/CannotUndoException.lo \
+ 	javax/swing/undo/CompoundEdit.lo javax/swing/undo/StateEdit.lo \
+ 	javax/swing/undo/StateEditable.lo \
+ 	javax/swing/undo/UndoManager.lo \
+ 	javax/swing/undo/UndoableEditSupport.lo \
+ 	javax/swing/BoundedRangeModel.lo javax/swing/CellEditor.lo \
+ 	javax/swing/ComboBoxEditor.lo javax/swing/ComboBoxModel.lo \
+ 	javax/swing/DefaultBoundedRangeModel.lo \
+ 	javax/swing/DesktopManager.lo javax/swing/InputVerifier.lo \
+ 	javax/swing/JInternalFrame.lo javax/swing/JTable.lo \
+ 	javax/swing/MenuElement.lo javax/swing/MenuSelectionManager.lo \
+ 	javax/swing/MutableComboBoxModel.lo javax/swing/Renderer.lo \
+ 	javax/swing/RootPaneContainer.lo \
+ 	javax/swing/ScrollPaneConstants.lo \
+ 	javax/swing/SingleSelectionModel.lo \
+ 	javax/swing/SizeRequirements.lo javax/swing/SizeSequence.lo \
+ 	javax/swing/WindowConstants.lo \
+ 	javax/swing/AbstractCellEditor.lo \
+ 	javax/swing/CellRendererPane.lo javax/swing/DebugGraphics.lo \
+ 	javax/swing/DefaultCellEditor.lo \
+ 	javax/swing/DefaultComboBoxModel.lo \
+ 	javax/swing/DefaultDesktopManager.lo \
+ 	javax/swing/DefaultFocusManager.lo \
+ 	javax/swing/DefaultListCellRenderer.lo \
+ 	javax/swing/DefaultSingleSelectionModel.lo \
+ 	javax/swing/FocusManager.lo javax/swing/JCheckBoxMenuItem.lo \
+ 	javax/swing/JColorChooser.lo javax/swing/JComboBox.lo \
+ 	javax/swing/JDesktopPane.lo javax/swing/JFileChooser.lo \
+ 	javax/swing/JMenu.lo javax/swing/JMenuItem.lo \
+ 	javax/swing/JPasswordField.lo javax/swing/JPopupMenu.lo \
+ 	javax/swing/JProgressBar.lo \
+ 	javax/swing/JRadioButtonMenuItem.lo javax/swing/JSeparator.lo \
+ 	javax/swing/JSlider.lo javax/swing/JSplitPane.lo \
+ 	javax/swing/JTextPane.lo javax/swing/JToolBar.lo \
+ 	javax/swing/OverlayLayout.lo javax/swing/Popup.lo \
+ 	javax/swing/PopupFactory.lo javax/swing/ProgressMonitor.lo \
+ 	javax/swing/ProgressMonitorInputStream.lo \
+ 	javax/swing/RepaintManager.lo javax/swing/ScrollPaneLayout.lo \
+ 	javax/swing/ViewportLayout.lo
+ am__objects_11 = gnu/gcj/convert/BytesToUnicode.lo \
+ 	gnu/gcj/convert/Convert.lo gnu/gcj/convert/Input_8859_1.lo \
+ 	gnu/gcj/convert/Input_ASCII.lo gnu/gcj/convert/Input_EUCJIS.lo \
+ 	gnu/gcj/convert/Input_JavaSrc.lo gnu/gcj/convert/Input_SJIS.lo \
+ 	gnu/gcj/convert/Input_UnicodeBig.lo \
+ 	gnu/gcj/convert/Input_UnicodeLittle.lo \
+ 	gnu/gcj/convert/Input_UTF8.lo gnu/gcj/convert/Input_iconv.lo \
+ 	gnu/gcj/convert/IOConverter.lo \
+ 	gnu/gcj/convert/Output_8859_1.lo \
+ 	gnu/gcj/convert/Output_ASCII.lo \
+ 	gnu/gcj/convert/Output_EUCJIS.lo \
+ 	gnu/gcj/convert/Output_JavaSrc.lo \
+ 	gnu/gcj/convert/Output_SJIS.lo \
+ 	gnu/gcj/convert/Output_UnicodeLittleUnmarked.lo \
+ 	gnu/gcj/convert/Output_UTF8.lo gnu/gcj/convert/Output_iconv.lo \
+ 	gnu/gcj/convert/UnicodeToBytes.lo
+ am__objects_12 = javax/net/VanillaSocketFactory.lo \
+ 	javax/net/ssl/TrustManagerFactorySpi.lo \
+ 	javax/net/ssl/SSLKeyException.lo javax/net/ssl/TrustManager.lo \
+ 	javax/net/ssl/SSLServerSocket.lo \
+ 	javax/net/ssl/TrustManagerFactory.lo \
+ 	javax/net/ssl/KeyManager.lo javax/net/ssl/SSLSocketFactory.lo \
+ 	javax/net/ssl/SSLPermission.lo javax/net/ssl/SSLContext.lo \
+ 	javax/net/ssl/TrivialHostnameVerifier.lo \
+ 	javax/net/ssl/X509KeyManager.lo \
+ 	javax/net/ssl/SSLServerSocketFactory.lo \
+ 	javax/net/ssl/SSLSessionBindingListener.lo \
+ 	javax/net/ssl/SSLSessionContext.lo \
+ 	javax/net/ssl/KeyManagerFactory.lo \
+ 	javax/net/ssl/SSLProtocolException.lo \
+ 	javax/net/ssl/SSLSocket.lo javax/net/ssl/HostnameVerifier.lo \
+ 	javax/net/ssl/HandshakeCompletedListener.lo \
+ 	javax/net/ssl/HttpsURLConnection.lo \
+ 	javax/net/ssl/KeyManagerFactorySpi.lo \
+ 	javax/net/ssl/SSLHandshakeException.lo \
+ 	javax/net/ssl/SSLPeerUnverifiedException.lo \
+ 	javax/net/ssl/X509TrustManager.lo javax/net/ssl/SSLSession.lo \
+ 	javax/net/ssl/SSLContextSpi.lo \
+ 	javax/net/ssl/HandshakeCompletedEvent.lo \
+ 	javax/net/ssl/SSLSessionBindingEvent.lo \
+ 	javax/net/ssl/SSLException.lo \
+ 	javax/net/ssl/ManagerFactoryParameters.lo \
+ 	javax/net/SocketFactory.lo \
+ 	javax/net/VanillaServerSocketFactory.lo \
+ 	javax/net/ServerSocketFactory.lo \
+ 	javax/print/attribute/HashPrintServiceAttributeSet.lo \
+ 	javax/print/attribute/Attribute.lo \
+ 	javax/print/attribute/DocAttributeSet.lo \
+ 	javax/print/attribute/PrintRequestAttributeSet.lo \
+ 	javax/print/attribute/standard/Chromaticity.lo \
+ 	javax/print/attribute/standard/Destination.lo \
+ 	javax/print/attribute/standard/MediaPrintableArea.lo \
+ 	javax/print/attribute/standard/MediaSize.lo \
+ 	javax/print/attribute/standard/NumberOfInterveningJobs.lo \
+ 	javax/print/attribute/standard/PrinterMakeAndModel.lo \
+ 	javax/print/attribute/standard/PrinterStateReason.lo \
+ 	javax/print/attribute/standard/JobImpressions.lo \
+ 	javax/print/attribute/standard/JobHoldUntil.lo \
+ 	javax/print/attribute/standard/JobKOctetsSupported.lo \
+ 	javax/print/attribute/standard/JobPriority.lo \
+ 	javax/print/attribute/standard/QueuedJobCount.lo \
+ 	javax/print/attribute/standard/JobOriginatingUserName.lo \
+ 	javax/print/attribute/standard/PrinterName.lo \
+ 	javax/print/attribute/standard/PDLOverrideSupported.lo \
+ 	javax/print/attribute/standard/PrinterStateReasons.lo \
+ 	javax/print/attribute/standard/JobMediaSheets.lo \
+ 	javax/print/attribute/standard/JobKOctets.lo \
+ 	javax/print/attribute/standard/MultipleDocumentHandling.lo \
+ 	javax/print/attribute/standard/PrinterMessageFromOperator.lo \
+ 	javax/print/attribute/standard/Severity.lo \
+ 	javax/print/attribute/standard/ReferenceUriSchemesSupported.lo \
+ 	javax/print/attribute/standard/DocumentName.lo \
+ 	javax/print/attribute/standard/PrinterMoreInfo.lo \
+ 	javax/print/attribute/standard/JobMessageFromOperator.lo \
+ 	javax/print/attribute/standard/JobStateReasons.lo \
+ 	javax/print/attribute/standard/PrinterIsAcceptingJobs.lo \
+ 	javax/print/attribute/standard/DateTimeAtProcessing.lo \
+ 	javax/print/attribute/standard/PagesPerMinute.lo \
+ 	javax/print/attribute/standard/PrinterResolution.lo \
+ 	javax/print/attribute/standard/JobMediaSheetsSupported.lo \
+ 	javax/print/attribute/standard/NumberUpSupported.lo \
+ 	javax/print/attribute/standard/Finishings.lo \
+ 	javax/print/attribute/standard/DateTimeAtCompleted.lo \
+ 	javax/print/attribute/standard/NumberOfDocuments.lo \
+ 	javax/print/attribute/standard/PrinterInfo.lo \
+ 	javax/print/attribute/standard/PrintQuality.lo \
+ 	javax/print/attribute/standard/JobSheets.lo \
+ 	javax/print/attribute/standard/Media.lo \
+ 	javax/print/attribute/standard/Fidelity.lo \
+ 	javax/print/attribute/standard/PrinterLocation.lo \
+ 	javax/print/attribute/standard/PrinterMoreInfoManufacturer.lo \
+ 	javax/print/attribute/standard/OrientationRequested.lo \
+ 	javax/print/attribute/standard/JobState.lo \
+ 	javax/print/attribute/standard/DateTimeAtCreation.lo \
+ 	javax/print/attribute/standard/PresentationDirection.lo \
+ 	javax/print/attribute/standard/JobName.lo \
+ 	javax/print/attribute/standard/PagesPerMinuteColor.lo \
+ 	javax/print/attribute/standard/CopiesSupported.lo \
+ 	javax/print/attribute/standard/PrinterURI.lo \
+ 	javax/print/attribute/standard/PageRanges.lo \
+ 	javax/print/attribute/standard/RequestingUserName.lo \
+ 	javax/print/attribute/standard/JobPrioritySupported.lo \
+ 	javax/print/attribute/standard/JobMediaSheetsCompleted.lo \
+ 	javax/print/attribute/standard/JobKOctetsProcessed.lo \
+ 	javax/print/attribute/standard/JobImpressionsCompleted.lo \
+ 	javax/print/attribute/standard/Compression.lo \
+ 	javax/print/attribute/standard/JobImpressionsSupported.lo \
+ 	javax/print/attribute/standard/Sides.lo \
+ 	javax/print/attribute/standard/JobStateReason.lo \
+ 	javax/print/attribute/standard/SheetCollate.lo \
+ 	javax/print/attribute/standard/Copies.lo \
+ 	javax/print/attribute/standard/MediaSizeName.lo \
+ 	javax/print/attribute/standard/OutputDeviceAssigned.lo \
+ 	javax/print/attribute/standard/PrinterState.lo \
+ 	javax/print/attribute/standard/NumberUp.lo \
+ 	javax/print/attribute/standard/ColorSupported.lo \
+ 	javax/print/attribute/HashAttributeSet.lo \
+ 	javax/print/attribute/SetOfIntegerSyntax.lo \
+ 	javax/print/attribute/HashDocAttributeSet.lo \
+ 	javax/print/attribute/PrintRequestAttribute.lo \
+ 	javax/print/attribute/DateTimeSyntax.lo \
+ 	javax/print/attribute/PrintServiceAttribute.lo \
+ 	javax/print/attribute/UnmodifiableSetException.lo \
+ 	javax/print/attribute/HashPrintJobAttributeSet.lo \
+ 	javax/print/attribute/PrintJobAttribute.lo \
+ 	javax/print/attribute/AttributeSet.lo \
+ 	javax/print/attribute/ResolutionSyntax.lo \
+ 	javax/print/attribute/URISyntax.lo \
+ 	javax/print/attribute/AttributeSetUtilities.lo \
+ 	javax/print/attribute/HashPrintRequestAttributeSet.lo \
+ 	javax/print/attribute/TextSyntax.lo \
+ 	javax/print/attribute/PrintJobAttributeSet.lo \
+ 	javax/print/attribute/SupportedValuesAttribute.lo \
+ 	javax/print/attribute/EnumSyntax.lo \
+ 	javax/print/attribute/DocAttribute.lo \
+ 	javax/print/attribute/Size2DSyntax.lo \
+ 	javax/print/attribute/IntegerSyntax.lo \
+ 	javax/print/attribute/PrintServiceAttributeSet.lo \
+ 	javax/print/PrintService.lo javax/print/DocFlavor.lo \
+ 	javax/print/DocPrintJob.lo javax/print/event/PrintEvent.lo \
+ 	javax/print/event/PrintJobAdapter.lo \
+ 	javax/print/event/PrintServiceAttributeEvent.lo \
+ 	javax/print/event/PrintJobAttributeEvent.lo \
+ 	javax/print/event/PrintServiceAttributeListener.lo \
+ 	javax/print/event/PrintJobEvent.lo \
+ 	javax/print/event/PrintJobListener.lo \
+ 	javax/print/event/PrintJobAttributeListener.lo \
+ 	javax/print/PrintServiceLookup.lo javax/print/URIException.lo \
+ 	javax/print/StreamPrintService.lo javax/print/MultiDoc.lo \
+ 	javax/print/FlavorException.lo javax/print/Doc.lo \
+ 	javax/print/MultiDocPrintJob.lo \
+ 	javax/print/CancelablePrintJob.lo \
+ 	javax/print/MultiDocPrintService.lo \
+ 	javax/print/ServiceUIFactory.lo \
+ 	javax/print/AttributeException.lo \
+ 	javax/print/PrintException.lo \
+ 	javax/naming/ServiceUnavailableException.lo \
+ 	javax/naming/directory/Attribute.lo \
+ 	javax/naming/directory/SchemaViolationException.lo \
+ 	javax/naming/directory/InitialDirContext.lo \
+ 	javax/naming/directory/BasicAttribute.lo \
+ 	javax/naming/directory/NoSuchAttributeException.lo \
+ 	javax/naming/directory/InvalidAttributesException.lo \
+ 	javax/naming/directory/InvalidAttributeValueException.lo \
+ 	javax/naming/directory/BasicAttributes.lo \
+ 	javax/naming/directory/AttributeModificationException.lo \
+ 	javax/naming/directory/InvalidAttributeIdentifierException.lo \
+ 	javax/naming/directory/DirContext.lo \
+ 	javax/naming/directory/Attributes.lo \
+ 	javax/naming/directory/InvalidSearchControlsException.lo \
+ 	javax/naming/directory/SearchControls.lo \
+ 	javax/naming/directory/AttributeInUseException.lo \
+ 	javax/naming/directory/InvalidSearchFilterException.lo \
+ 	javax/naming/directory/ModificationItem.lo \
+ 	javax/naming/directory/SearchResult.lo javax/naming/Binding.lo \
+ 	javax/naming/ContextNotEmptyException.lo \
+ 	javax/naming/Referenceable.lo \
+ 	javax/naming/InterruptedNamingException.lo \
+ 	javax/naming/CommunicationException.lo \
+ 	javax/naming/LinkException.lo javax/naming/BinaryRefAddr.lo \
+ 	javax/naming/LinkLoopException.lo \
+ 	javax/naming/AuthenticationException.lo \
+ 	javax/naming/NameAlreadyBoundException.lo \
+ 	javax/naming/MalformedLinkException.lo \
+ 	javax/naming/NotContextException.lo \
+ 	javax/naming/spi/DirStateFactory.lo \
+ 	javax/naming/spi/ResolveResult.lo \
+ 	javax/naming/spi/ObjectFactoryBuilder.lo \
+ 	javax/naming/spi/DirObjectFactory.lo \
+ 	javax/naming/spi/DirectoryManager.lo \
+ 	javax/naming/spi/InitialContextFactoryBuilder.lo \
+ 	javax/naming/spi/ObjectFactory.lo javax/naming/spi/Resolver.lo \
+ 	javax/naming/spi/StateFactory.lo \
+ 	javax/naming/spi/InitialContextFactory.lo \
+ 	javax/naming/spi/NamingManager.lo \
+ 	javax/naming/InvalidNameException.lo \
+ 	javax/naming/NamingEnumeration.lo javax/naming/LinkRef.lo \
+ 	javax/naming/event/NamingListener.lo \
+ 	javax/naming/event/NamingEvent.lo \
+ 	javax/naming/event/NamespaceChangeListener.lo \
+ 	javax/naming/event/ObjectChangeListener.lo \
+ 	javax/naming/event/EventContext.lo \
+ 	javax/naming/event/NamingExceptionEvent.lo \
+ 	javax/naming/event/EventDirContext.lo \
+ 	javax/naming/NamingException.lo \
+ 	javax/naming/CannotProceedException.lo \
+ 	javax/naming/PartialResultException.lo \
+ 	javax/naming/TimeLimitExceededException.lo \
+ 	javax/naming/NoPermissionException.lo \
+ 	javax/naming/CompoundName.lo \
+ 	javax/naming/SizeLimitExceededException.lo \
+ 	javax/naming/NoInitialContextException.lo \
+ 	javax/naming/NameNotFoundException.lo \
+ 	javax/naming/InitialContext.lo \
+ 	javax/naming/NamingSecurityException.lo \
+ 	javax/naming/Context.lo javax/naming/ConfigurationException.lo \
+ 	javax/naming/InsufficientResourcesException.lo \
+ 	javax/naming/AuthenticationNotSupportedException.lo \
+ 	javax/naming/StringRefAddr.lo \
+ 	javax/naming/ldap/InitialLdapContext.lo \
+ 	javax/naming/ldap/ExtendedRequest.lo \
+ 	javax/naming/ldap/Control.lo \
+ 	javax/naming/ldap/UnsolicitedNotificationListener.lo \
+ 	javax/naming/ldap/LdapReferralException.lo \
+ 	javax/naming/ldap/UnsolicitedNotificationEvent.lo \
+ 	javax/naming/ldap/HasControls.lo \
+ 	javax/naming/ldap/LdapContext.lo \
+ 	javax/naming/ldap/ExtendedResponse.lo \
+ 	javax/naming/ldap/UnsolicitedNotification.lo \
+ 	javax/naming/ldap/ControlFactory.lo \
+ 	javax/naming/OperationNotSupportedException.lo \
+ 	javax/naming/ReferralException.lo \
+ 	javax/naming/LimitExceededException.lo \
+ 	javax/naming/Reference.lo javax/naming/NameParser.lo \
+ 	javax/naming/NameClassPair.lo javax/naming/RefAddr.lo \
+ 	javax/naming/CompositeName.lo javax/naming/Name.lo \
+ 	javax/security/cert/CertificateNotYetValidException.lo \
+ 	javax/security/cert/Certificate.lo \
+ 	javax/security/cert/X509Certificate.lo \
+ 	javax/security/cert/X509CertBridge.lo \
+ 	javax/security/cert/CertificateEncodingException.lo \
+ 	javax/security/cert/CertificateExpiredException.lo \
+ 	javax/security/cert/CertificateException.lo \
+ 	javax/security/cert/CertificateParsingException.lo \
+ 	javax/security/auth/Destroyable.lo \
+ 	javax/security/auth/x500/X500PrivateCredential.lo \
+ 	javax/security/auth/x500/X500Principal.lo \
+ 	javax/security/auth/spi/LoginModule.lo \
+ 	javax/security/auth/DestroyFailedException.lo \
+ 	javax/security/auth/SubjectDomainCombiner.lo \
+ 	javax/security/auth/AuthPermission.lo \
+ 	javax/security/auth/login/CredentialExpiredException.lo \
+ 	javax/security/auth/login/NullConfiguration.lo \
+ 	javax/security/auth/login/AccountExpiredException.lo \
+ 	javax/security/auth/login/LoginException.lo \
+ 	javax/security/auth/login/AppConfigurationEntry.lo \
+ 	javax/security/auth/login/Configuration.lo \
+ 	javax/security/auth/login/LoginContext.lo \
+ 	javax/security/auth/login/FailedLoginException.lo \
+ 	javax/security/auth/PrivateCredentialPermission.lo \
+ 	javax/security/auth/Subject.lo javax/security/auth/Policy.lo \
+ 	javax/security/auth/Refreshable.lo \
+ 	javax/security/auth/callback/TextInputCallback.lo \
+ 	javax/security/auth/callback/LanguageCallback.lo \
+ 	javax/security/auth/callback/TextOutputCallback.lo \
+ 	javax/security/auth/callback/UnsupportedCallbackException.lo \
+ 	javax/security/auth/callback/Callback.lo \
+ 	javax/security/auth/callback/ConfirmationCallback.lo \
+ 	javax/security/auth/callback/ChoiceCallback.lo \
+ 	javax/security/auth/callback/NameCallback.lo \
+ 	javax/security/auth/callback/PasswordCallback.lo \
+ 	javax/security/auth/callback/CallbackHandler.lo \
+ 	javax/security/auth/RefreshFailedException.lo \
+ 	javax/security/sasl/RealmCallback.lo \
+ 	javax/security/sasl/SaslClient.lo \
+ 	javax/security/sasl/RealmChoiceCallback.lo \
+ 	javax/security/sasl/AuthenticationException.lo \
+ 	javax/security/sasl/Sasl.lo \
+ 	javax/security/sasl/SaslClientFactory.lo \
+ 	javax/security/sasl/AuthorizeCallback.lo \
+ 	javax/security/sasl/SaslServerFactory.lo \
+ 	javax/security/sasl/SaslException.lo \
+ 	javax/security/sasl/SaslServer.lo \
+ 	javax/transaction/TransactionRolledbackException.lo \
+ 	javax/transaction/Synchronization.lo \
+ 	javax/transaction/TransactionRequiredException.lo \
+ 	javax/transaction/RollbackException.lo \
+ 	javax/transaction/Status.lo \
+ 	javax/transaction/HeuristicMixedException.lo \
+ 	javax/transaction/HeuristicRollbackException.lo \
+ 	javax/transaction/SystemException.lo \
+ 	javax/transaction/UserTransaction.lo \
+ 	javax/transaction/NotSupportedException.lo \
+ 	javax/transaction/HeuristicCommitException.lo \
+ 	javax/transaction/Transaction.lo \
+ 	javax/transaction/TransactionManager.lo \
+ 	javax/transaction/InvalidTransactionException.lo \
+ 	javax/transaction/xa/XAException.lo \
+ 	javax/transaction/xa/XAResource.lo javax/transaction/xa/Xid.lo \
+ 	javax/accessibility/AccessibleValue.lo \
+ 	javax/accessibility/AccessibleBundle.lo \
+ 	javax/accessibility/AccessibleContext.lo \
+ 	javax/accessibility/AccessibleRelationSet.lo \
+ 	javax/accessibility/Accessible.lo \
+ 	javax/accessibility/AccessibleTableModelChange.lo \
+ 	javax/accessibility/AccessibleState.lo \
+ 	javax/accessibility/AccessibleIcon.lo \
+ 	javax/accessibility/AccessibleHypertext.lo \
+ 	javax/accessibility/AccessibleComponent.lo \
+ 	javax/accessibility/AccessibleText.lo \
+ 	javax/accessibility/AccessibleRole.lo \
+ 	javax/accessibility/AccessibleEditableText.lo \
+ 	javax/accessibility/AccessibleRelation.lo \
+ 	javax/accessibility/AccessibleTable.lo \
+ 	javax/accessibility/AccessibleStateSet.lo \
+ 	javax/accessibility/AccessibleSelection.lo \
+ 	javax/accessibility/AccessibleExtendedTable.lo \
+ 	javax/accessibility/AccessibleResourceBundle.lo \
+ 	javax/accessibility/AccessibleExtendedComponent.lo \
+ 	javax/accessibility/AccessibleHyperlink.lo \
+ 	javax/accessibility/AccessibleKeyBinding.lo \
+ 	javax/accessibility/AccessibleAction.lo \
+ 	javax/sql/ConnectionEventListener.lo javax/sql/RowSetEvent.lo \
+ 	javax/sql/ConnectionPoolDataSource.lo \
+ 	javax/sql/RowSetWriter.lo javax/sql/XAConnection.lo \
+ 	javax/sql/RowSet.lo javax/sql/DataSource.lo \
+ 	javax/sql/RowSetInternal.lo javax/sql/RowSetReader.lo \
+ 	javax/sql/RowSetMetaData.lo javax/sql/PooledConnection.lo \
+ 	javax/sql/XADataSource.lo javax/sql/RowSetListener.lo \
+ 	javax/sql/ConnectionEvent.lo javax/crypto/Cipher.lo \
+ 	javax/crypto/IllegalBlockSizeException.lo \
+ 	javax/crypto/MacSpi.lo javax/crypto/SecretKeyFactorySpi.lo \
+ 	javax/crypto/ShortBufferException.lo \
+ 	javax/crypto/KeyAgreement.lo \
+ 	javax/crypto/ExemptionMechanism.lo \
+ 	javax/crypto/CipherOutputStream.lo \
+ 	javax/crypto/SealedObject.lo javax/crypto/NullCipher.lo \
+ 	javax/crypto/KeyAgreementSpi.lo \
+ 	javax/crypto/SecretKeyFactory.lo javax/crypto/SecretKey.lo \
+ 	javax/crypto/NullCipherImpl.lo javax/crypto/spec/DESKeySpec.lo \
+ 	javax/crypto/spec/DHPrivateKeySpec.lo \
+ 	javax/crypto/spec/DHParameterSpec.lo \
+ 	javax/crypto/spec/PBEParameterSpec.lo \
+ 	javax/crypto/spec/DESedeKeySpec.lo \
+ 	javax/crypto/spec/DHGenParameterSpec.lo \
+ 	javax/crypto/spec/DHPublicKeySpec.lo \
+ 	javax/crypto/spec/PBEKeySpec.lo \
+ 	javax/crypto/spec/RC5ParameterSpec.lo \
+ 	javax/crypto/spec/RC2ParameterSpec.lo \
+ 	javax/crypto/spec/IvParameterSpec.lo \
+ 	javax/crypto/spec/SecretKeySpec.lo \
+ 	javax/crypto/interfaces/DHPublicKey.lo \
+ 	javax/crypto/interfaces/DHKey.lo \
+ 	javax/crypto/interfaces/DHPrivateKey.lo \
+ 	javax/crypto/interfaces/PBEKey.lo \
+ 	javax/crypto/NoSuchPaddingException.lo \
+ 	javax/crypto/KeyGeneratorSpi.lo \
+ 	javax/crypto/BadPaddingException.lo javax/crypto/CipherSpi.lo \
+ 	javax/crypto/KeyGenerator.lo javax/crypto/CipherInputStream.lo \
+ 	javax/crypto/ExemptionMechanismException.lo \
+ 	javax/crypto/ExemptionMechanismSpi.lo \
+ 	javax/crypto/EncryptedPrivateKeyInfo.lo javax/crypto/Mac.lo
+ am__objects_13 = org/ietf/jgss/GSSManager.lo \
+ 	org/ietf/jgss/GSSException.lo org/ietf/jgss/MessageProp.lo \
+ 	org/ietf/jgss/GSSName.lo org/ietf/jgss/GSSContext.lo \
+ 	org/ietf/jgss/Oid.lo org/ietf/jgss/GSSCredential.lo \
+ 	org/ietf/jgss/ChannelBinding.lo
+ am__objects_14 = $(am__objects_8) gnu/classpath/ServiceFactory.lo \
+ 	gnu/classpath/ServiceProviderLoadingAction.lo gnu/gcj/Core.lo \
+ 	gnu/gcj/RawData.lo gnu/gcj/RawDataManaged.lo \
+ 	gnu/gcj/io/DefaultMimeTypes.lo gnu/gcj/io/MimeTypes.lo \
+ 	gnu/gcj/io/SimpleSHSStream.lo \
+ 	gnu/gcj/runtime/BootClassLoader.lo \
+ 	gnu/gcj/runtime/ExtensionClassLoader.lo \
+ 	gnu/gcj/runtime/FileDeleter.lo \
+ 	gnu/gcj/runtime/FinalizerThread.lo \
+ 	gnu/gcj/runtime/HelperClassLoader.lo \
+ 	gnu/gcj/runtime/JNIWeakRef.lo gnu/gcj/runtime/MethodRef.lo \
+ 	gnu/gcj/runtime/NameFinder.lo \
+ 	gnu/gcj/runtime/PersistentByteMap.lo \
+ 	gnu/gcj/runtime/SharedLibHelper.lo \
+ 	gnu/gcj/runtime/SharedLibLoader.lo \
+ 	gnu/gcj/runtime/StringBuffer.lo gnu/gcj/runtime/StackTrace.lo \
+ 	gnu/gcj/runtime/SystemClassLoader.lo gnu/gcj/util/Debug.lo \
+ 	gnu/java/io/ASN1ParsingException.lo \
+ 	gnu/java/io/Base64InputStream.lo \
+ 	gnu/java/io/ClassLoaderObjectInputStream.lo \
+ 	gnu/java/io/NullOutputStream.lo \
+ 	gnu/java/io/ObjectIdentityWrapper.lo \
+ 	gnu/java/lang/ArrayHelper.lo gnu/java/lang/ClassHelper.lo \
+ 	gnu/java/lang/MainThread.lo \
+ 	gnu/java/lang/reflect/TypeSignature.lo \
+ 	gnu/java/locale/Calendar.lo gnu/java/locale/Calendar_de.lo \
+ 	gnu/java/locale/Calendar_en.lo gnu/java/locale/Calendar_nl.lo \
+ 	gnu/java/locale/LocaleInformation.lo \
+ 	gnu/java/locale/LocaleInformation_af_ZA.lo \
+ 	gnu/java/locale/LocaleInformation_ar_AE.lo \
+ 	gnu/java/locale/LocaleInformation_ar_BH.lo \
+ 	gnu/java/locale/LocaleInformation_ar_DZ.lo \
+ 	gnu/java/locale/LocaleInformation_ar_EG.lo \
+ 	gnu/java/locale/LocaleInformation_ar_IN.lo \
+ 	gnu/java/locale/LocaleInformation_ar_IQ.lo \
+ 	gnu/java/locale/LocaleInformation_ar_JO.lo \
+ 	gnu/java/locale/LocaleInformation_ar_KW.lo \
+ 	gnu/java/locale/LocaleInformation_ar_LB.lo \
+ 	gnu/java/locale/LocaleInformation_ar_LY.lo \
+ 	gnu/java/locale/LocaleInformation_ar_MA.lo \
+ 	gnu/java/locale/LocaleInformation_ar_OM.lo \
+ 	gnu/java/locale/LocaleInformation_ar_QA.lo \
+ 	gnu/java/locale/LocaleInformation_ar_SD.lo \
+ 	gnu/java/locale/LocaleInformation_ar_SY.lo \
+ 	gnu/java/locale/LocaleInformation_ar_TN.lo \
+ 	gnu/java/locale/LocaleInformation_ar_YE.lo \
+ 	gnu/java/locale/LocaleInformation_be_BY.lo \
+ 	gnu/java/locale/LocaleInformation_bn_IN.lo \
+ 	gnu/java/locale/LocaleInformation_br_FR.lo \
+ 	gnu/java/locale/LocaleInformation_bs_BA.lo \
+ 	gnu/java/locale/LocaleInformation_ca_ES.lo \
+ 	gnu/java/locale/LocaleInformation_cs_CZ.lo \
+ 	gnu/java/locale/LocaleInformation_cy_GB.lo \
+ 	gnu/java/locale/LocaleInformation_da_DK.lo \
+ 	gnu/java/locale/LocaleInformation_de.lo \
+ 	gnu/java/locale/LocaleInformation_de_AT.lo \
+ 	gnu/java/locale/LocaleInformation_de_BE.lo \
+ 	gnu/java/locale/LocaleInformation_de_CH.lo \
+ 	gnu/java/locale/LocaleInformation_de_DE.lo \
+ 	gnu/java/locale/LocaleInformation_de_LU.lo \
+ 	gnu/java/locale/LocaleInformation_el_GR.lo \
+ 	gnu/java/locale/LocaleInformation_en.lo \
+ 	gnu/java/locale/LocaleInformation_en_AU.lo \
+ 	gnu/java/locale/LocaleInformation_en_BW.lo \
+ 	gnu/java/locale/LocaleInformation_en_CA.lo \
+ 	gnu/java/locale/LocaleInformation_en_DK.lo \
+ 	gnu/java/locale/LocaleInformation_en_GB.lo \
+ 	gnu/java/locale/LocaleInformation_en_HK.lo \
+ 	gnu/java/locale/LocaleInformation_en_IE.lo \
+ 	gnu/java/locale/LocaleInformation_en_IN.lo \
+ 	gnu/java/locale/LocaleInformation_en_NZ.lo \
+ 	gnu/java/locale/LocaleInformation_en_PH.lo \
+ 	gnu/java/locale/LocaleInformation_en_SG.lo \
+ 	gnu/java/locale/LocaleInformation_en_US.lo \
+ 	gnu/java/locale/LocaleInformation_en_ZA.lo \
+ 	gnu/java/locale/LocaleInformation_en_ZW.lo \
+ 	gnu/java/locale/LocaleInformation_es_AR.lo \
+ 	gnu/java/locale/LocaleInformation_es_BO.lo \
+ 	gnu/java/locale/LocaleInformation_es_CL.lo \
+ 	gnu/java/locale/LocaleInformation_es_CO.lo \
+ 	gnu/java/locale/LocaleInformation_es_CR.lo \
+ 	gnu/java/locale/LocaleInformation_es_DO.lo \
+ 	gnu/java/locale/LocaleInformation_es_EC.lo \
+ 	gnu/java/locale/LocaleInformation_es_ES.lo \
+ 	gnu/java/locale/LocaleInformation_es_GT.lo \
+ 	gnu/java/locale/LocaleInformation_es_HN.lo \
+ 	gnu/java/locale/LocaleInformation_es_MX.lo \
+ 	gnu/java/locale/LocaleInformation_es_NI.lo \
+ 	gnu/java/locale/LocaleInformation_es_PA.lo \
+ 	gnu/java/locale/LocaleInformation_es_PE.lo \
+ 	gnu/java/locale/LocaleInformation_es_PR.lo \
+ 	gnu/java/locale/LocaleInformation_es_PY.lo \
+ 	gnu/java/locale/LocaleInformation_es_SV.lo \
+ 	gnu/java/locale/LocaleInformation_es_US.lo \
+ 	gnu/java/locale/LocaleInformation_es_UY.lo \
+ 	gnu/java/locale/LocaleInformation_es_VE.lo \
+ 	gnu/java/locale/LocaleInformation_et_EE.lo \
+ 	gnu/java/locale/LocaleInformation_eu_ES.lo \
+ 	gnu/java/locale/LocaleInformation_fa_IR.lo \
+ 	gnu/java/locale/LocaleInformation_fi_FI.lo \
+ 	gnu/java/locale/LocaleInformation_fo_FO.lo \
+ 	gnu/java/locale/LocaleInformation_fr_BE.lo \
+ 	gnu/java/locale/LocaleInformation_fr_CA.lo \
+ 	gnu/java/locale/LocaleInformation_fr_CH.lo \
+ 	gnu/java/locale/LocaleInformation_fr_FR.lo \
+ 	gnu/java/locale/LocaleInformation_fr_LU.lo \
+ 	gnu/java/locale/LocaleInformation_ga_IE.lo \
+ 	gnu/java/locale/LocaleInformation_gd_GB.lo \
+ 	gnu/java/locale/LocaleInformation_gl_ES.lo \
+ 	gnu/java/locale/LocaleInformation_gv_GB.lo \
+ 	gnu/java/locale/LocaleInformation_he_IL.lo \
+ 	gnu/java/locale/LocaleInformation_hi_IN.lo \
+ 	gnu/java/locale/LocaleInformation_hr_HR.lo \
+ 	gnu/java/locale/LocaleInformation_hu_HU.lo \
+ 	gnu/java/locale/LocaleInformation_id_ID.lo \
+ 	gnu/java/locale/LocaleInformation_it_CH.lo \
+ 	gnu/java/locale/LocaleInformation_it_IT.lo \
+ 	gnu/java/locale/LocaleInformation_iw_IL.lo \
+ 	gnu/java/locale/LocaleInformation_ja_JP.lo \
+ 	gnu/java/locale/LocaleInformation_ka_GE.lo \
+ 	gnu/java/locale/LocaleInformation_kl_GL.lo \
+ 	gnu/java/locale/LocaleInformation_ko_KR.lo \
+ 	gnu/java/locale/LocaleInformation_kw_GB.lo \
+ 	gnu/java/locale/LocaleInformation_lt_LT.lo \
+ 	gnu/java/locale/LocaleInformation_lv_LV.lo \
+ 	gnu/java/locale/LocaleInformation_mi_NZ.lo \
+ 	gnu/java/locale/LocaleInformation_mk_MK.lo \
+ 	gnu/java/locale/LocaleInformation_mr_IN.lo \
+ 	gnu/java/locale/LocaleInformation_mt_MT.lo \
+ 	gnu/java/locale/LocaleInformation_nl.lo \
+ 	gnu/java/locale/LocaleInformation_nl_BE.lo \
+ 	gnu/java/locale/LocaleInformation_nl_NL.lo \
+ 	gnu/java/locale/LocaleInformation_nn_NO.lo \
+ 	gnu/java/locale/LocaleInformation_no_NO.lo \
+ 	gnu/java/locale/LocaleInformation_oc_FR.lo \
+ 	gnu/java/locale/LocaleInformation_pl_PL.lo \
+ 	gnu/java/locale/LocaleInformation_pt_BR.lo \
+ 	gnu/java/locale/LocaleInformation_pt_PT.lo \
+ 	gnu/java/locale/LocaleInformation_ro_RO.lo \
+ 	gnu/java/locale/LocaleInformation_ru_RU.lo \
+ 	gnu/java/locale/LocaleInformation_ru_UA.lo \
+ 	gnu/java/locale/LocaleInformation_se_NO.lo \
+ 	gnu/java/locale/LocaleInformation_sk_SK.lo \
+ 	gnu/java/locale/LocaleInformation_sl_SI.lo \
+ 	gnu/java/locale/LocaleInformation_sq_AL.lo \
+ 	gnu/java/locale/LocaleInformation_sr_YU.lo \
+ 	gnu/java/locale/LocaleInformation_sv_FI.lo \
+ 	gnu/java/locale/LocaleInformation_sv_SE.lo \
+ 	gnu/java/locale/LocaleInformation_ta_IN.lo \
+ 	gnu/java/locale/LocaleInformation_te_IN.lo \
+ 	gnu/java/locale/LocaleInformation_tg_TJ.lo \
+ 	gnu/java/locale/LocaleInformation_tl_PH.lo \
+ 	gnu/java/locale/LocaleInformation_tr_TR.lo \
+ 	gnu/java/locale/LocaleInformation_uk_UA.lo \
+ 	gnu/java/locale/LocaleInformation_ur_PK.lo \
+ 	gnu/java/locale/LocaleInformation_uz_UZ.lo \
+ 	gnu/java/locale/LocaleInformation_vi_VN.lo \
+ 	gnu/java/locale/LocaleInformation_yi_US.lo \
+ 	gnu/java/locale/LocaleInformation_zh_CN.lo \
+ 	gnu/java/locale/LocaleInformation_zh_HK.lo \
+ 	gnu/java/locale/LocaleInformation_zh_SG.lo \
+ 	gnu/java/locale/LocaleInformation_zh_TW.lo \
+ 	gnu/java/math/MPN.lo gnu/java/net/BASE64.lo \
+ 	gnu/java/net/CRLFInputStream.lo \
+ 	gnu/java/net/CRLFOutputStream.lo \
+ 	gnu/java/net/DefaultContentHandlerFactory.lo \
+ 	gnu/java/net/EmptyX509TrustManager.lo \
+ 	gnu/java/net/GetLocalHostAction.lo \
+ 	gnu/java/net/HeaderFieldHelper.lo \
+ 	gnu/java/net/LineInputStream.lo \
+ 	gnu/java/net/PlainDatagramSocketImpl.lo \
+ 	gnu/java/net/PlainSocketImpl.lo gnu/java/net/URLParseError.lo \
+ 	gnu/java/net/protocol/core/Connection.lo \
+ 	gnu/java/net/protocol/core/CoreInputStream.lo \
+ 	gnu/java/net/protocol/core/Handler.lo \
+ 	gnu/java/net/protocol/file/Connection.lo \
+ 	gnu/java/net/protocol/file/Handler.lo \
+ 	gnu/java/net/protocol/ftp/ActiveModeDTP.lo \
+ 	gnu/java/net/protocol/ftp/BlockInputStream.lo \
+ 	gnu/java/net/protocol/ftp/BlockOutputStream.lo \
+ 	gnu/java/net/protocol/ftp/CompressedInputStream.lo \
+ 	gnu/java/net/protocol/ftp/CompressedOutputStream.lo \
+ 	gnu/java/net/protocol/ftp/DTP.lo \
+ 	gnu/java/net/protocol/ftp/DTPInputStream.lo \
+ 	gnu/java/net/protocol/ftp/DTPOutputStream.lo \
+ 	gnu/java/net/protocol/ftp/FTPConnection.lo \
+ 	gnu/java/net/protocol/ftp/FTPException.lo \
+ 	gnu/java/net/protocol/ftp/FTPResponse.lo \
+ 	gnu/java/net/protocol/ftp/FTPURLConnection.lo \
+ 	gnu/java/net/protocol/ftp/Handler.lo \
+ 	gnu/java/net/protocol/ftp/PassiveModeDTP.lo \
+ 	gnu/java/net/protocol/ftp/StreamInputStream.lo \
+ 	gnu/java/net/protocol/ftp/StreamOutputStream.lo \
+ 	gnu/java/net/protocol/gcjlib/Connection.lo \
+ 	gnu/java/net/protocol/gcjlib/Handler.lo \
+ 	gnu/java/net/protocol/http/Authenticator.lo \
+ 	gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.lo \
+ 	gnu/java/net/protocol/http/ByteArrayResponseBodyReader.lo \
+ 	gnu/java/net/protocol/http/ChunkedInputStream.lo \
+ 	gnu/java/net/protocol/http/Cookie.lo \
+ 	gnu/java/net/protocol/http/CookieManager.lo \
+ 	gnu/java/net/protocol/http/Credentials.lo \
+ 	gnu/java/net/protocol/http/HTTPConnection.lo \
+ 	gnu/java/net/protocol/http/HTTPDateFormat.lo \
+ 	gnu/java/net/protocol/http/HTTPURLConnection.lo \
+ 	gnu/java/net/protocol/http/Handler.lo \
+ 	gnu/java/net/protocol/http/Headers.lo \
+ 	gnu/java/net/protocol/http/Request.lo \
+ 	gnu/java/net/protocol/http/RequestBodyWriter.lo \
+ 	gnu/java/net/protocol/http/Response.lo \
+ 	gnu/java/net/protocol/http/ResponseBodyReader.lo \
+ 	gnu/java/net/protocol/http/ResponseHeaderHandler.lo \
+ 	gnu/java/net/protocol/http/SimpleCookieManager.lo \
+ 	gnu/java/net/protocol/http/event/ConnectionEvent.lo \
+ 	gnu/java/net/protocol/http/event/ConnectionListener.lo \
+ 	gnu/java/net/protocol/http/event/RequestEvent.lo \
+ 	gnu/java/net/protocol/http/event/RequestListener.lo \
+ 	gnu/java/net/protocol/jar/Connection.lo \
+ 	gnu/java/net/protocol/jar/Handler.lo \
+ 	gnu/java/nio/ChannelInputStream.lo \
+ 	gnu/java/nio/ChannelOutputStream.lo \
+ 	gnu/java/nio/ChannelReader.lo \
+ 	gnu/java/nio/DatagramChannelImpl.lo \
+ 	gnu/java/nio/DatagramChannelSelectionKey.lo \
+ 	gnu/java/nio/FileLockImpl.lo \
+ 	gnu/java/nio/InputStreamChannel.lo \
+ 	gnu/java/nio/NIOConstants.lo gnu/java/nio/NIODatagramSocket.lo \
+ 	gnu/java/nio/NIOServerSocket.lo gnu/java/nio/NIOSocket.lo \
+ 	gnu/java/nio/OutputStreamChannel.lo gnu/java/nio/PipeImpl.lo \
+ 	gnu/java/nio/SelectionKeyImpl.lo gnu/java/nio/SelectorImpl.lo \
+ 	gnu/java/nio/SelectorProviderImpl.lo \
+ 	gnu/java/nio/ServerSocketChannelImpl.lo \
+ 	gnu/java/nio/ServerSocketChannelSelectionKey.lo \
+ 	gnu/java/nio/SocketChannelImpl.lo \
+ 	gnu/java/nio/SocketChannelSelectionKey.lo \
+ 	gnu/java/nio/VMPipe.lo gnu/java/nio/VMSelector.lo \
+ 	gnu/java/nio/channels/FileChannelImpl.lo \
+ 	gnu/java/nio/charset/ISO_8859_1.lo \
+ 	gnu/java/nio/charset/Provider.lo \
+ 	gnu/java/nio/charset/US_ASCII.lo \
+ 	gnu/java/nio/charset/UTF_16.lo \
+ 	gnu/java/nio/charset/UTF_16BE.lo \
+ 	gnu/java/nio/charset/UTF_16Decoder.lo \
+ 	gnu/java/nio/charset/UTF_16Encoder.lo \
+ 	gnu/java/nio/charset/UTF_16LE.lo gnu/java/nio/charset/UTF_8.lo \
+ 	gnu/java/security/Engine.lo gnu/java/security/OID.lo \
+ 	gnu/java/security/PolicyFile.lo \
+ 	gnu/java/security/action/GetPropertyAction.lo \
+ 	gnu/java/security/action/GetSecurityPropertyAction.lo \
+ 	gnu/java/security/action/SetAccessibleAction.lo \
+ 	gnu/java/security/ber/BER.lo \
+ 	gnu/java/security/ber/BEREncodingException.lo \
+ 	gnu/java/security/ber/BERReader.lo \
+ 	gnu/java/security/ber/BERValue.lo \
+ 	gnu/java/security/der/BitString.lo \
+ 	gnu/java/security/der/DER.lo \
+ 	gnu/java/security/der/DEREncodingException.lo \
+ 	gnu/java/security/der/DERReader.lo \
+ 	gnu/java/security/der/DERValue.lo \
+ 	gnu/java/security/der/DERWriter.lo \
+ 	gnu/java/security/pkcs/PKCS7SignedData.lo \
+ 	gnu/java/security/pkcs/SignerInfo.lo \
+ 	gnu/java/security/provider/CollectionCertStoreImpl.lo \
+ 	gnu/java/security/provider/DSAKeyFactory.lo \
+ 	gnu/java/security/provider/DSAKeyPairGenerator.lo \
+ 	gnu/java/security/provider/DSAParameterGenerator.lo \
+ 	gnu/java/security/provider/DSAParameters.lo \
+ 	gnu/java/security/provider/DSASignature.lo \
+ 	gnu/java/security/provider/DefaultPolicy.lo \
+ 	gnu/java/security/provider/EncodedKeyFactory.lo \
+ 	gnu/java/security/provider/Gnu.lo \
+ 	gnu/java/security/provider/GnuDHPublicKey.lo \
+ 	gnu/java/security/provider/GnuDSAPrivateKey.lo \
+ 	gnu/java/security/provider/GnuDSAPublicKey.lo \
+ 	gnu/java/security/provider/GnuRSAPrivateKey.lo \
+ 	gnu/java/security/provider/GnuRSAPublicKey.lo \
+ 	gnu/java/security/provider/MD2withRSA.lo \
+ 	gnu/java/security/provider/MD4withRSA.lo \
+ 	gnu/java/security/provider/MD5.lo \
+ 	gnu/java/security/provider/MD5withRSA.lo \
+ 	gnu/java/security/provider/PKIXCertPathValidatorImpl.lo \
+ 	gnu/java/security/provider/RSA.lo \
+ 	gnu/java/security/provider/RSAKeyFactory.lo \
+ 	gnu/java/security/provider/SHA.lo \
+ 	gnu/java/security/provider/SHA1PRNG.lo \
+ 	gnu/java/security/provider/SHA1withRSA.lo \
+ 	gnu/java/security/provider/X509CertificateFactory.lo \
+ 	gnu/java/security/util/Prime.lo \
+ 	gnu/java/security/x509/GnuPKIExtension.lo \
+ 	gnu/java/security/x509/PolicyNodeImpl.lo \
+ 	gnu/java/security/x509/Util.lo \
+ 	gnu/java/security/x509/X500DistinguishedName.lo \
+ 	gnu/java/security/x509/X509CRL.lo \
+ 	gnu/java/security/x509/X509CRLEntry.lo \
+ 	gnu/java/security/x509/X509CRLSelectorImpl.lo \
+ 	gnu/java/security/x509/X509Certificate.lo \
+ 	gnu/java/security/x509/X509CertPath.lo \
+ 	gnu/java/security/x509/X509CertSelectorImpl.lo \
+ 	gnu/java/security/x509/ext/AuthorityKeyIdentifier.lo \
+ 	gnu/java/security/x509/ext/BasicConstraints.lo \
+ 	gnu/java/security/x509/ext/CRLNumber.lo \
+ 	gnu/java/security/x509/ext/CertificatePolicies.lo \
+ 	gnu/java/security/x509/ext/ExtendedKeyUsage.lo \
+ 	gnu/java/security/x509/ext/Extension.lo \
+ 	gnu/java/security/x509/ext/GeneralNames.lo \
+ 	gnu/java/security/x509/ext/IssuerAlternativeNames.lo \
+ 	gnu/java/security/x509/ext/KeyUsage.lo \
+ 	gnu/java/security/x509/ext/PolicyConstraint.lo \
+ 	gnu/java/security/x509/ext/PolicyMappings.lo \
+ 	gnu/java/security/x509/ext/PrivateKeyUsagePeriod.lo \
+ 	gnu/java/security/x509/ext/ReasonCode.lo \
+ 	gnu/java/security/x509/ext/SubjectAlternativeNames.lo \
+ 	gnu/java/security/x509/ext/SubjectKeyIdentifier.lo \
+ 	gnu/java/text/AttributedFormatBuffer.lo \
+ 	gnu/java/text/BaseBreakIterator.lo \
+ 	gnu/java/text/CharacterBreakIterator.lo \
+ 	gnu/java/text/FormatBuffer.lo \
+ 	gnu/java/text/FormatCharacterIterator.lo \
+ 	gnu/java/text/LineBreakIterator.lo \
+ 	gnu/java/text/SentenceBreakIterator.lo \
+ 	gnu/java/text/StringFormatBuffer.lo \
+ 	gnu/java/text/WordBreakIterator.lo \
+ 	gnu/java/util/DoubleEnumeration.lo \
+ 	gnu/java/util/EmptyEnumeration.lo \
+ 	gnu/java/util/prefs/FileBasedFactory.lo \
+ 	gnu/java/util/prefs/MemoryBasedFactory.lo \
+ 	gnu/java/util/prefs/MemoryBasedPreferences.lo \
+ 	gnu/java/util/prefs/NodeReader.lo \
+ 	gnu/java/util/prefs/NodeWriter.lo gnu/regexp/CharIndexed.lo \
+ 	gnu/regexp/CharIndexedCharArray.lo \
+ 	gnu/regexp/CharIndexedInputStream.lo \
+ 	gnu/regexp/CharIndexedString.lo \
+ 	gnu/regexp/CharIndexedStringBuffer.lo gnu/regexp/RE.lo \
+ 	gnu/regexp/REException.lo gnu/regexp/REFilterInputStream.lo \
+ 	gnu/regexp/REMatch.lo gnu/regexp/REMatchEnumeration.lo \
+ 	gnu/regexp/RESyntax.lo gnu/regexp/REToken.lo \
+ 	gnu/regexp/RETokenAny.lo gnu/regexp/RETokenBackRef.lo \
+ 	gnu/regexp/RETokenChar.lo gnu/regexp/RETokenEnd.lo \
+ 	gnu/regexp/RETokenEndSub.lo gnu/regexp/RETokenLookAhead.lo \
+ 	gnu/regexp/RETokenOneOf.lo gnu/regexp/RETokenPOSIX.lo \
+ 	gnu/regexp/RETokenRange.lo gnu/regexp/RETokenRepeated.lo \
+ 	gnu/regexp/RETokenStart.lo gnu/regexp/RETokenWordBoundary.lo \
+ 	gnu/regexp/UncheckedRE.lo java/lang/ref/PhantomReference.lo \
+ 	java/lang/ref/Reference.lo java/lang/ref/ReferenceQueue.lo \
+ 	java/lang/ref/SoftReference.lo java/lang/ref/WeakReference.lo \
+ 	java/lang/reflect/AccessibleObject.lo \
+ 	java/lang/reflect/Array.lo java/lang/reflect/Constructor.lo \
+ 	java/lang/reflect/Field.lo \
+ 	java/lang/reflect/InvocationHandler.lo \
+ 	java/lang/reflect/InvocationTargetException.lo \
+ 	java/lang/reflect/Member.lo java/lang/reflect/Method.lo \
+ 	java/lang/reflect/Modifier.lo java/lang/reflect/Proxy.lo \
+ 	java/lang/reflect/ReflectPermission.lo \
+ 	java/lang/reflect/UndeclaredThrowableException.lo \
+ 	java/math/BigDecimal.lo java/math/BigInteger.lo \
+ 	java/net/Authenticator.lo java/net/BindException.lo \
+ 	java/net/ConnectException.lo java/net/ContentHandler.lo \
+ 	java/net/ContentHandlerFactory.lo java/net/DatagramPacket.lo \
+ 	java/net/DatagramSocket.lo java/net/DatagramSocketImpl.lo \
+ 	java/net/DatagramSocketImplFactory.lo java/net/FileNameMap.lo \
+ 	java/net/HttpURLConnection.lo java/net/Inet4Address.lo \
+ 	java/net/Inet6Address.lo java/net/InetAddress.lo \
+ 	java/net/InetSocketAddress.lo java/net/JarURLConnection.lo \
+ 	java/net/MalformedURLException.lo java/net/MulticastSocket.lo \
+ 	java/net/NetPermission.lo java/net/NetworkInterface.lo \
+ 	java/net/NoRouteToHostException.lo \
+ 	java/net/PasswordAuthentication.lo \
+ 	java/net/PortUnreachableException.lo \
+ 	java/net/ProtocolException.lo java/net/ServerSocket.lo \
+ 	java/net/Socket.lo java/net/SocketAddress.lo \
+ 	java/net/SocketException.lo java/net/SocketImpl.lo \
+ 	java/net/SocketImplFactory.lo java/net/SocketOptions.lo \
+ 	java/net/SocketPermission.lo \
+ 	java/net/SocketTimeoutException.lo java/net/URI.lo \
+ 	java/net/URISyntaxException.lo java/net/URL.lo \
+ 	java/net/URLClassLoader.lo java/net/URLConnection.lo \
+ 	java/net/URLDecoder.lo java/net/URLEncoder.lo \
+ 	java/net/URLStreamHandler.lo \
+ 	java/net/URLStreamHandlerFactory.lo \
+ 	java/net/UnknownHostException.lo \
+ 	java/net/UnknownServiceException.lo java/nio/Buffer.lo \
+ 	java/nio/BufferOverflowException.lo \
+ 	java/nio/BufferUnderflowException.lo java/nio/ByteBuffer.lo \
+ 	java/nio/ByteBufferHelper.lo java/nio/ByteBufferImpl.lo \
+ 	java/nio/ByteOrder.lo java/nio/CharBuffer.lo \
+ 	java/nio/CharBufferImpl.lo java/nio/CharViewBufferImpl.lo \
+ 	java/nio/DirectByteBufferImpl.lo java/nio/DoubleBuffer.lo \
+ 	java/nio/DoubleBufferImpl.lo java/nio/DoubleViewBufferImpl.lo \
+ 	java/nio/FloatBuffer.lo java/nio/FloatBufferImpl.lo \
+ 	java/nio/FloatViewBufferImpl.lo java/nio/IntBuffer.lo \
+ 	java/nio/IntBufferImpl.lo java/nio/IntViewBufferImpl.lo \
+ 	java/nio/InvalidMarkException.lo java/nio/LongBuffer.lo \
+ 	java/nio/LongBufferImpl.lo java/nio/LongViewBufferImpl.lo \
+ 	java/nio/MappedByteBuffer.lo java/nio/MappedByteBufferImpl.lo \
+ 	java/nio/ReadOnlyBufferException.lo java/nio/ShortBuffer.lo \
+ 	java/nio/ShortBufferImpl.lo java/nio/ShortViewBufferImpl.lo \
+ 	java/nio/VMDirectByteBuffer.lo \
+ 	java/nio/channels/AlreadyConnectedException.lo \
+ 	java/nio/channels/AsynchronousCloseException.lo \
+ 	java/nio/channels/ByteChannel.lo \
+ 	java/nio/channels/CancelledKeyException.lo \
+ 	java/nio/channels/Channel.lo java/nio/channels/Channels.lo \
+ 	java/nio/channels/ClosedByInterruptException.lo \
+ 	java/nio/channels/ClosedChannelException.lo \
+ 	java/nio/channels/ClosedSelectorException.lo \
+ 	java/nio/channels/ConnectionPendingException.lo \
+ 	java/nio/channels/DatagramChannel.lo \
+ 	java/nio/channels/FileChannel.lo java/nio/channels/FileLock.lo \
+ 	java/nio/channels/FileLockInterruptionException.lo \
+ 	java/nio/channels/GatheringByteChannel.lo \
+ 	java/nio/channels/IllegalBlockingModeException.lo \
+ 	java/nio/channels/IllegalSelectorException.lo \
+ 	java/nio/channels/InterruptibleChannel.lo \
+ 	java/nio/channels/NoConnectionPendingException.lo \
+ 	java/nio/channels/NonReadableChannelException.lo \
+ 	java/nio/channels/NonWritableChannelException.lo \
+ 	java/nio/channels/NotYetBoundException.lo \
+ 	java/nio/channels/NotYetConnectedException.lo \
+ 	java/nio/channels/OverlappingFileLockException.lo \
+ 	java/nio/channels/Pipe.lo \
+ 	java/nio/channels/ReadableByteChannel.lo \
+ 	java/nio/channels/ScatteringByteChannel.lo \
+ 	java/nio/channels/SelectableChannel.lo \
+ 	java/nio/channels/SelectionKey.lo \
+ 	java/nio/channels/Selector.lo \
+ 	java/nio/channels/ServerSocketChannel.lo \
+ 	java/nio/channels/SocketChannel.lo \
+ 	java/nio/channels/UnresolvedAddressException.lo \
+ 	java/nio/channels/UnsupportedAddressTypeException.lo \
+ 	java/nio/channels/WritableByteChannel.lo \
+ 	java/nio/channels/spi/AbstractInterruptibleChannel.lo \
+ 	java/nio/channels/spi/AbstractSelectableChannel.lo \
+ 	java/nio/channels/spi/AbstractSelectionKey.lo \
+ 	java/nio/channels/spi/AbstractSelector.lo \
+ 	java/nio/channels/spi/SelectorProvider.lo \
+ 	java/nio/charset/CharacterCodingException.lo \
+ 	java/nio/charset/Charset.lo java/nio/charset/CharsetDecoder.lo \
+ 	java/nio/charset/CharsetEncoder.lo \
+ 	java/nio/charset/CoderMalfunctionError.lo \
+ 	java/nio/charset/CoderResult.lo \
+ 	java/nio/charset/CodingErrorAction.lo \
+ 	java/nio/charset/IllegalCharsetNameException.lo \
+ 	java/nio/charset/MalformedInputException.lo \
+ 	java/nio/charset/UnmappableCharacterException.lo \
+ 	java/nio/charset/UnsupportedCharsetException.lo \
+ 	java/nio/charset/spi/CharsetProvider.lo \
+ 	java/security/AccessControlContext.lo \
+ 	java/security/AccessControlException.lo \
+ 	java/security/AccessController.lo \
+ 	java/security/AlgorithmParameterGenerator.lo \
+ 	java/security/AlgorithmParameterGeneratorSpi.lo \
+ 	java/security/AlgorithmParameters.lo \
+ 	java/security/AlgorithmParametersSpi.lo \
+ 	java/security/AllPermission.lo \
+ 	java/security/BasicPermission.lo java/security/Certificate.lo \
+ 	java/security/CodeSource.lo java/security/DigestException.lo \
+ 	java/security/DigestInputStream.lo \
+ 	java/security/DigestOutputStream.lo \
+ 	java/security/DomainCombiner.lo \
+ 	java/security/DummyKeyPairGenerator.lo \
+ 	java/security/DummyMessageDigest.lo \
+ 	java/security/DummySignature.lo \
+ 	java/security/GeneralSecurityException.lo \
+ 	java/security/Guard.lo java/security/GuardedObject.lo \
+ 	java/security/Identity.lo java/security/IdentityScope.lo \
+ 	java/security/InvalidAlgorithmParameterException.lo \
+ 	java/security/InvalidKeyException.lo \
+ 	java/security/InvalidParameterException.lo \
+ 	java/security/Key.lo java/security/KeyException.lo \
+ 	java/security/KeyFactory.lo java/security/KeyFactorySpi.lo \
+ 	java/security/KeyManagementException.lo \
+ 	java/security/KeyPair.lo java/security/KeyPairGenerator.lo \
+ 	java/security/KeyPairGeneratorSpi.lo java/security/KeyStore.lo \
+ 	java/security/KeyStoreException.lo \
+ 	java/security/KeyStoreSpi.lo java/security/MessageDigest.lo \
+ 	java/security/MessageDigestSpi.lo \
+ 	java/security/NoSuchAlgorithmException.lo \
+ 	java/security/NoSuchProviderException.lo \
+ 	java/security/Permission.lo \
+ 	java/security/PermissionCollection.lo \
+ 	java/security/Permissions.lo java/security/Policy.lo \
+ 	java/security/Principal.lo java/security/PrivateKey.lo \
+ 	java/security/PrivilegedAction.lo \
+ 	java/security/PrivilegedActionException.lo \
+ 	java/security/PrivilegedExceptionAction.lo \
+ 	java/security/ProtectionDomain.lo java/security/Provider.lo \
+ 	java/security/ProviderException.lo java/security/PublicKey.lo \
+ 	java/security/SecureClassLoader.lo \
+ 	java/security/SecureRandom.lo java/security/SecureRandomSpi.lo \
+ 	java/security/Security.lo java/security/SecurityPermission.lo \
+ 	java/security/Signature.lo java/security/SignatureException.lo \
+ 	java/security/SignatureSpi.lo java/security/SignedObject.lo \
+ 	java/security/Signer.lo \
+ 	java/security/UnrecoverableKeyException.lo \
+ 	java/security/UnresolvedPermission.lo java/security/acl/Acl.lo \
+ 	java/security/acl/AclEntry.lo \
+ 	java/security/acl/AclNotFoundException.lo \
+ 	java/security/acl/Group.lo \
+ 	java/security/acl/LastOwnerException.lo \
+ 	java/security/acl/NotOwnerException.lo \
+ 	java/security/acl/Owner.lo java/security/acl/Permission.lo \
+ 	java/security/cert/CRL.lo java/security/cert/CRLException.lo \
+ 	java/security/cert/CRLSelector.lo \
+ 	java/security/cert/CertPath.lo \
+ 	java/security/cert/CertPathBuilder.lo \
+ 	java/security/cert/CertPathBuilderException.lo \
+ 	java/security/cert/CertPathBuilderResult.lo \
+ 	java/security/cert/CertPathBuilderSpi.lo \
+ 	java/security/cert/CertPathParameters.lo \
+ 	java/security/cert/CertPathValidator.lo \
+ 	java/security/cert/CertPathValidatorException.lo \
+ 	java/security/cert/CertPathValidatorResult.lo \
+ 	java/security/cert/CertPathValidatorSpi.lo \
+ 	java/security/cert/CertSelector.lo \
+ 	java/security/cert/CertStore.lo \
+ 	java/security/cert/CertStoreException.lo \
+ 	java/security/cert/CertStoreParameters.lo \
+ 	java/security/cert/CertStoreSpi.lo \
+ 	java/security/cert/Certificate.lo \
+ 	java/security/cert/CertificateEncodingException.lo \
+ 	java/security/cert/CertificateException.lo \
+ 	java/security/cert/CertificateExpiredException.lo \
+ 	java/security/cert/CertificateFactory.lo \
+ 	java/security/cert/CertificateFactorySpi.lo \
+ 	java/security/cert/CertificateNotYetValidException.lo \
+ 	java/security/cert/CertificateParsingException.lo \
+ 	java/security/cert/CollectionCertStoreParameters.lo \
+ 	java/security/cert/LDAPCertStoreParameters.lo \
+ 	java/security/cert/PKIXBuilderParameters.lo \
+ 	java/security/cert/PKIXCertPathBuilderResult.lo \
+ 	java/security/cert/PKIXCertPathChecker.lo \
+ 	java/security/cert/PKIXCertPathValidatorResult.lo \
+ 	java/security/cert/PKIXParameters.lo \
+ 	java/security/cert/PolicyNode.lo \
+ 	java/security/cert/PolicyQualifierInfo.lo \
+ 	java/security/cert/TrustAnchor.lo \
+ 	java/security/cert/X509CRL.lo \
+ 	java/security/cert/X509CRLEntry.lo \
+ 	java/security/cert/X509CRLSelector.lo \
+ 	java/security/cert/X509CertSelector.lo \
+ 	java/security/cert/X509Certificate.lo \
+ 	java/security/cert/X509Extension.lo \
+ 	java/security/interfaces/DSAKey.lo \
+ 	java/security/interfaces/DSAKeyPairGenerator.lo \
+ 	java/security/interfaces/DSAParams.lo \
+ 	java/security/interfaces/DSAPrivateKey.lo \
+ 	java/security/interfaces/DSAPublicKey.lo \
+ 	java/security/interfaces/RSAKey.lo \
+ 	java/security/interfaces/RSAMultiPrimePrivateCrtKey.lo \
+ 	java/security/interfaces/RSAPrivateCrtKey.lo \
+ 	java/security/interfaces/RSAPrivateKey.lo \
+ 	java/security/interfaces/RSAPublicKey.lo \
+ 	java/security/spec/AlgorithmParameterSpec.lo \
+ 	java/security/spec/DSAParameterSpec.lo \
+ 	java/security/spec/DSAPrivateKeySpec.lo \
+ 	java/security/spec/DSAPublicKeySpec.lo \
+ 	java/security/spec/EncodedKeySpec.lo \
+ 	java/security/spec/InvalidKeySpecException.lo \
+ 	java/security/spec/InvalidParameterSpecException.lo \
+ 	java/security/spec/KeySpec.lo \
+ 	java/security/spec/PKCS8EncodedKeySpec.lo \
+ 	java/security/spec/PSSParameterSpec.lo \
+ 	java/security/spec/RSAKeyGenParameterSpec.lo \
+ 	java/security/spec/RSAMultiPrimePrivateCrtKeySpec.lo \
+ 	java/security/spec/RSAOtherPrimeInfo.lo \
+ 	java/security/spec/RSAPrivateCrtKeySpec.lo \
+ 	java/security/spec/RSAPrivateKeySpec.lo \
+ 	java/security/spec/RSAPublicKeySpec.lo \
+ 	java/security/spec/X509EncodedKeySpec.lo java/sql/Array.lo \
+ 	java/sql/BatchUpdateException.lo java/sql/Blob.lo \
+ 	java/sql/CallableStatement.lo java/sql/Clob.lo \
+ 	java/sql/Connection.lo java/sql/DataTruncation.lo \
+ 	java/sql/DatabaseMetaData.lo java/sql/Date.lo \
+ 	java/sql/Driver.lo java/sql/DriverManager.lo \
+ 	java/sql/DriverPropertyInfo.lo java/sql/ParameterMetaData.lo \
+ 	java/sql/PreparedStatement.lo java/sql/Ref.lo \
+ 	java/sql/ResultSet.lo java/sql/ResultSetMetaData.lo \
+ 	java/sql/SQLData.lo java/sql/SQLException.lo \
+ 	java/sql/SQLInput.lo java/sql/SQLOutput.lo \
+ 	java/sql/SQLPermission.lo java/sql/SQLWarning.lo \
+ 	java/sql/Savepoint.lo java/sql/Statement.lo java/sql/Struct.lo \
+ 	java/sql/Time.lo java/sql/Timestamp.lo java/sql/Types.lo \
+ 	java/text/Annotation.lo \
+ 	java/text/AttributedCharacterIterator.lo \
+ 	java/text/AttributedString.lo \
+ 	java/text/AttributedStringIterator.lo \
+ 	java/text/BreakIterator.lo java/text/CharacterIterator.lo \
+ 	java/text/ChoiceFormat.lo \
+ 	java/text/CollationElementIterator.lo \
+ 	java/text/CollationKey.lo java/text/Collator.lo \
+ 	java/text/DateFormat.lo java/text/DateFormatSymbols.lo \
+ 	java/text/DecimalFormat.lo java/text/DecimalFormatSymbols.lo \
+ 	java/text/FieldPosition.lo java/text/Format.lo \
+ 	java/text/MessageFormat.lo java/text/NumberFormat.lo \
+ 	java/text/ParseException.lo java/text/ParsePosition.lo \
+ 	java/text/RuleBasedCollator.lo java/text/SimpleDateFormat.lo \
+ 	java/text/StringCharacterIterator.lo \
+ 	java/util/jar/Attributes.lo java/util/jar/JarEntry.lo \
+ 	java/util/jar/JarException.lo java/util/jar/JarFile.lo \
+ 	java/util/jar/JarInputStream.lo \
+ 	java/util/jar/JarOutputStream.lo java/util/jar/Manifest.lo \
+ 	java/util/zip/Adler32.lo java/util/zip/CRC32.lo \
+ 	java/util/zip/CheckedInputStream.lo \
+ 	java/util/zip/CheckedOutputStream.lo java/util/zip/Checksum.lo \
+ 	java/util/zip/DataFormatException.lo java/util/zip/Deflater.lo \
+ 	java/util/zip/DeflaterOutputStream.lo \
+ 	java/util/zip/GZIPInputStream.lo \
+ 	java/util/zip/GZIPOutputStream.lo java/util/zip/Inflater.lo \
+ 	java/util/zip/InflaterInputStream.lo \
+ 	java/util/zip/ZipConstants.lo java/util/zip/ZipEntry.lo \
+ 	java/util/zip/ZipException.lo java/util/zip/ZipFile.lo \
+ 	java/util/zip/ZipInputStream.lo \
+ 	java/util/zip/ZipOutputStream.lo $(am__objects_9) \
+ 	$(am__objects_10) $(am__objects_11) $(am__objects_12) \
+ 	$(am__objects_13)
+ am__objects_15 = $(am__objects_7) $(am__objects_14)
+ am__objects_16 = java/lang/ConcreteProcess.lo \
+ 	gnu/classpath/Configuration.lo
+ @USING_BOEHMGC_TRUE@am__objects_17 = boehm.lo
+ @USING_NOGC_TRUE@am__objects_18 = nogc.lo
+ @SUPPLY_BACKTRACE_TRUE@am__objects_19 = sysdep/dwarf2-backtrace.lo
+ @USING_POSIX_PLATFORM_TRUE@am__objects_20 = posix.lo
+ @USING_WIN32_PLATFORM_TRUE@am__objects_21 = win32.lo
+ @USING_ECOS_PLATFORM_TRUE@am__objects_22 = posix.lo
+ @USING_DARWIN_CRT_TRUE@am__objects_23 = darwin.lo
+ @USING_POSIX_THREADS_TRUE@am__objects_24 = posix-threads.lo
+ @USING_WIN32_THREADS_TRUE@am__objects_25 = win32-threads.lo
+ @USING_NO_THREADS_TRUE@am__objects_26 = no-threads.lo
+ am_libgcj0_convenience_la_OBJECTS = prims.lo jni.lo exception.lo \
+ 	link.lo defineclass.lo interpret.lo verify.lo $(am__objects_5) \
+ 	$(am__objects_6) $(am__objects_15) $(am__objects_16) \
+ 	$(am__objects_17) $(am__objects_18) $(am__objects_19) \
+ 	$(am__objects_20) $(am__objects_21) $(am__objects_22) \
+ 	$(am__objects_23) $(am__objects_24) $(am__objects_25) \
+ 	$(am__objects_26)
+ 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) \
+ 	gnu/gcj/tools/gcj_dbtool/natMain.$(OBJEXT)
+ gcj_dbtool_OBJECTS = $(am_gcj_dbtool_OBJECTS)
+ am__gen_from_JIS_SOURCES_DIST = gnu/gcj/convert/gen-from-JIS.c \
+ 	gnu/gcj/convert/make-trie.c
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@am_gen_from_JIS_OBJECTS = gnu/gcj/convert/gen-from-JIS.$(OBJEXT) \
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gnu/gcj/convert/make-trie.$(OBJEXT)
+ gen_from_JIS_OBJECTS = $(am_gen_from_JIS_OBJECTS)
+ gen_from_JIS_LDADD = $(LDADD)
+ am_gij_OBJECTS =
+ gij_OBJECTS = $(am_gij_OBJECTS)
+ am_grmic_OBJECTS =
+ grmic_OBJECTS = $(am_grmic_OBJECTS)
+ am_grmiregistry_OBJECTS =
+ grmiregistry_OBJECTS = $(am_grmiregistry_OBJECTS)
+ am_jv_convert_OBJECTS =
+ jv_convert_OBJECTS = $(am_jv_convert_OBJECTS)
+ binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+ SCRIPTS = $(bin_SCRIPTS)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/gcj
+ depcomp = $(SHELL) $(top_srcdir)/../depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+ 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ 	$(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+ LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+ LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+ 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ 	$(AM_CXXFLAGS) $(CXXFLAGS)
+ CXXLD = $(CXX)
+ CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+ GCJCOMPILE = $(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS)
+ LTGCJCOMPILE = $(LIBTOOL) --mode=compile $(GCJ) $(AM_GCJFLAGS) \
+ 	$(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 \
+ 	install-recursive installcheck-recursive installdirs-recursive \
+ 	pdf-recursive ps-recursive uninstall-info-recursive \
+ 	uninstall-recursive
+ dbexecDATA_INSTALL = $(INSTALL_DATA)
+ jarDATA_INSTALL = $(INSTALL_DATA)
+ pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+ toolexecmainlibDATA_INSTALL = $(INSTALL_DATA)
+ DATA = $(dbexec_DATA) $(jar_DATA) $(pkgconfig_DATA) \
+ 	$(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)
+ 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@
+ ALLOCA = @ALLOCA@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
  AR = @AR@
  AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
  BACKTRACESPEC = @BACKTRACESPEC@
  CAIRO_CFLAGS = @CAIRO_CFLAGS@
  CAIRO_LIBS = @CAIRO_LIBS@
  CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
  CHECKREFSPEC = @CHECKREFSPEC@
! CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
! CPP = @CPP@
! CPPFLAGS = @CPPFLAGS@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
  DIRLTDL = @DIRLTDL@
  DIVIDESPEC = @DIVIDESPEC@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXCEPTIONSPEC = @EXCEPTIONSPEC@
  EXEEXT = @EXEEXT@
! GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  GCDEPS = @GCDEPS@
  GCINCS = @GCINCS@
  GCJ = @GCJ@
+ GCJDEPMODE = @GCJDEPMODE@
  GCJFLAGS = @GCJFLAGS@
+ GCJH = @GCJH@
  GCJVERSION = @GCJVERSION@
  GCLIBS = @GCLIBS@
  GCSPEC = @GCSPEC@
  GCTESTSPEC = @GCTESTSPEC@
  GLIB_CFLAGS = @GLIB_CFLAGS@
  GLIB_LIBS = @GLIB_LIBS@
! GTK_AWT_FALSE = @GTK_AWT_FALSE@
! GTK_AWT_TRUE = @GTK_AWT_TRUE@
! GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
! GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
  GTK_CFLAGS = @GTK_CFLAGS@
  GTK_LIBS = @GTK_LIBS@
  HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
  IEEESPEC = @IEEESPEC@
  INCLTDL = @INCLTDL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
  INTERPRETER = @INTERPRETER@
+ JAVA_HOME = @JAVA_HOME@
+ JAVA_HOME_SET_FALSE = @JAVA_HOME_SET_FALSE@
+ JAVA_HOME_SET_TRUE = @JAVA_HOME_SET_TRUE@
  JC1GCSPEC = @JC1GCSPEC@
! LDFLAGS = @LDFLAGS@
  LIBART_CFLAGS = @LIBART_CFLAGS@
  LIBART_LIBS = @LIBART_LIBS@
  LIBFFI = @LIBFFI@
+ LIBFFIINCS = @LIBFFIINCS@
  LIBGCJDEBUG = @LIBGCJDEBUG@
  LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
  LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
  LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
  LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
+ LIBGCJ_LD_SYMBOLIC = @LIBGCJ_LD_SYMBOLIC@
  LIBICONV = @LIBICONV@
  LIBLTDL = @LIBLTDL@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
! LTLIBICONV = @LTLIBICONV@
! LTLIBOBJS = @LTLIBOBJS@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
! NATIVE_FALSE = @NATIVE_FALSE@
! NATIVE_TRUE = @NATIVE_TRUE@
! NEEDS_DATA_START_FALSE = @NEEDS_DATA_START_FALSE@
! NEEDS_DATA_START_TRUE = @NEEDS_DATA_START_TRUE@
  OBJEXT = @OBJEXT@
+ ONESTEP_FALSE = @ONESTEP_FALSE@
+ ONESTEP_TRUE = @ONESTEP_TRUE@
  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@
  PERL = @PERL@
  PKG_CONFIG = @PKG_CONFIG@
! PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@
  RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
  STRIP = @STRIP@
+ SUPPLY_BACKTRACE_FALSE = @SUPPLY_BACKTRACE_FALSE@
+ SUPPLY_BACKTRACE_TRUE = @SUPPLY_BACKTRACE_TRUE@
  SYSDEP_SOURCES = @SYSDEP_SOURCES@
  SYSTEMSPEC = @SYSTEMSPEC@
  SYS_ZLIBS = @SYS_ZLIBS@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
  THREADCXXFLAGS = @THREADCXXFLAGS@
  THREADDEPS = @THREADDEPS@
  THREADINCS = @THREADINCS@
  THREADLDFLAGS = @THREADLDFLAGS@
  THREADLIBS = @THREADLIBS@
  THREADSPEC = @THREADSPEC@
  TOOLKIT = @TOOLKIT@
+ USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
+ 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@
+ USING_NOGC_TRUE = @USING_NOGC_TRUE@
+ USING_NO_THREADS_FALSE = @USING_NO_THREADS_FALSE@
+ USING_NO_THREADS_TRUE = @USING_NO_THREADS_TRUE@
+ USING_POSIX_PLATFORM_FALSE = @USING_POSIX_PLATFORM_FALSE@
+ USING_POSIX_PLATFORM_TRUE = @USING_POSIX_PLATFORM_TRUE@
+ USING_POSIX_THREADS_FALSE = @USING_POSIX_THREADS_FALSE@
+ USING_POSIX_THREADS_TRUE = @USING_POSIX_THREADS_TRUE@
+ USING_WIN32_PLATFORM_FALSE = @USING_WIN32_PLATFORM_FALSE@
+ USING_WIN32_PLATFORM_TRUE = @USING_WIN32_PLATFORM_TRUE@
+ USING_WIN32_THREADS_FALSE = @USING_WIN32_THREADS_FALSE@
+ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
  VERSION = @VERSION@
+ XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
+ XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
  ZINCS = @ZINCS@
+ ZIP = @ZIP@
  ZLIBS = @ZLIBS@
  ZLIBSPEC = @ZLIBSPEC@
  ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_GCJ = @ac_ct_GCJ@
+ 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__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
+ am__fastdepGCJ_TRUE = @am__fastdepGCJ_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@
+ 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@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
  libgcj_basedir = @libgcj_basedir@
+ libstdcxx_incdir = @libstdcxx_incdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
  mkinstalldirs = @mkinstalldirs@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ subdirs = @subdirs@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ 
+ # 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
*************** ACLOCAL_AMFLAGS = -I .
*** 168,262 ****
  # $(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_TRUE@cond_x_ltlibrary = @XLIB_AWT_TRUE@lib-gnu-awt-xlib.la
! @XLIB_AWT_FALSE@cond_x_ltlibrary = 
! @XLIB_AWT_TRUE@xlib_includes = @XLIB_AWT_TRUE@-I../libstdc++-v3/include -I../libstdc++-v3/include/$(target_alias) -I$(srcdir)/../libstdc++-v3/libsupc++
! @XLIB_AWT_FALSE@xlib_includes = 
! @GTK_AWT_TRUE@cond_gtk_ltlibrary = @GTK_AWT_TRUE@lib-gnu-java-awt-peer-gtk.la
  @GTK_AWT_FALSE@cond_gtk_ltlibrary = 
! 
! toolexeclib_LTLIBRARIES = libgcj.la lib-org-xml-sax.la lib-org-w3c-dom.la \
!     $(cond_gtk_ltlibrary) $(cond_x_ltlibrary)
  
  toolexecmainlib_DATA = libgcj.spec
- 
  pkgconfigdir = $(libdir)/pkgconfig
  pkgconfig_DATA = libgcj.pc
- 
  jardir = $(datadir)/java
  jar_DATA = libgcj-@gcc_version@.jar
! 
  secdir = $(libdir)/security
  propdir = $(libdir)
! 
! @NATIVE_TRUE@bin_PROGRAMS = @NATIVE_TRUE@jv-convert gij rmic rmiregistry
! 
  bin_SCRIPTS = addr2name.awk
- @CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar
- @CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_FALSE@jar
- @CANADIAN_FALSE@ZIP = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar
- @CANADIAN_TRUE@@NULL_TARGET_TRUE@GCJH = @CANADIAN_TRUE@@NULL_TARGET_TRUE@gcjh
- @CANADIAN_TRUE@@NULL_TARGET_FALSE@GCJH = @CANADIAN_TRUE@@NULL_TARGET_FALSE@$(target_alias)-gcjh
- @CANADIAN_FALSE@GCJH = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh
- 
  GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated
- 
- GCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ_WITH_FLAGS) -fclasspath= -fbootclasspath=$(here) $(JC1FLAGS) -MD -MT $@ -MF $(@:.lo=.d) -c
  GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
  LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
- 
- LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
- 
  JAVAC = $(GCJ_WITH_FLAGS) -C
! 
! GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
! 
! WARNINGS = -W -Wall
! AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions $(THREADCXXFLAGS) \
  	-fdollars-in-identifiers \
  	-Wswitch-enum \
! 	@LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \
! 	-DPREFIX="\"$(prefix)\"" -DLIBDIR="\"$(libdir)\"" \
! 	-DBOOT_CLASS_PATH="\"$(jardir)/$(jar_DATA)\""
  
! @USING_GCC_TRUE@AM_CFLAGS = @USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
! @USING_GCC_FALSE@AM_CFLAGS = @USING_GCC_FALSE@@LIBGCJ_CFLAGS@
  
  JCFLAGS = -g
  JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
! 
! LIBFFIINCS = @LIBFFIINCS@
! 
! INCLUDES = -I$(top_srcdir) -Iinclude -I$(top_srcdir)/include \
! 	$(GCINCS) $(THREADINCS) $(INCLTDL) $(xlib_includes) \
  	$(GCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS)
  
  
- nat_files = $(nat_source_files:.cc=.lo)
- x_nat_files = $(x_nat_source_files:.cc=.lo)
- c_files = $(c_source_files:.c=.lo)
- extra_cc_files = $(extra_cc_source_files:.cc=.lo)
- gtk_c_files = $(gtk_c_source_files:.c=.lo)
- javao_files = $(java_source_files:.java=.lo) \
- 	$(built_java_source_files:.java=.lo)
- 
- x_javao_files = $(x_java_source_files:.java=.lo)
- 
- libgcj_la_SOURCES = prims.cc jni.cc exception.cc \
- 	resolve.cc defineclass.cc interpret.cc verify.cc \
- 	$(nat_source_files)
- 
- EXTRA_libgcj_la_SOURCES = boehm.cc nogc.cc posix-threads.cc no-threads.cc \
- 	win32-threads.cc posix.cc win32.cc $(c_source_files) \
- 	$(extra_cc_source_files) $(java_source_files) $(built_java_source_files)
  
! libgcj_la_DEPENDENCIES = libgcj-@gcc_version@.jar $(javao_files) \
! 	$(c_files) $(extra_cc_files) $(GCOBJS) $(THREADOBJS) \
!        $(PLATFORMOBJS) $(LIBLTDL) $(LIBFFI) $(ZLIBS) $(GCLIBS)
  
  
! libgcj_la_LIBADD = $(javao_files) $(c_files) $(extra_cc_files) $(GCOBJS) \
! 	$(THREADOBJS) $(PLATFORMOBJS)
  
  # Include THREADLIBS here to ensure that the correct version of
  # certain linuxthread functions get linked:
--- 4444,4547 ----
  # $(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 \
! 	-fnon-call-exceptions \
! 	$(THREADCXXFLAGS) \
  	-fdollars-in-identifiers \
  	-Wswitch-enum \
! 	-D_FILE_OFFSET_BITS=64 \
! 	@LIBGCJ_CXXFLAGS@ \
! 	@X_CFLAGS@ \
! 	$(WARNINGS) \
! 	-D_GNU_SOURCE \
! 	-DPREFIX="\"$(prefix)\"" \
! 	-DLIBDIR="\"$(libdir)\"" \
!         -DJAVA_HOME="\"$(JAVA_HOME_DIR)\"" \
!         -DBOOT_CLASS_PATH="\"$(BOOT_CLASS_PATH_DIR)\"" \
! 	-DJAVA_EXT_DIRS="\"$(jardir)/ext\"" \
! 	-DGCJ_ENDORSED_DIRS="\"$(jardir)/gcj-endorsed\"" \
! 	-DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
! 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\"" \
! 	-DTOOLEXECLIBDIR="\"$(toolexeclibdir)\""
  
! AM_GCJFLAGS = \
! 	@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
+ libgij_la_SOURCES = gij.cc
+ libgij_la_DEPENDENCIES = libgcj.la libgcj.spec
+ libgij_la_LIBADD = -L$(here)/.libs libgcj.la
+ 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) $(java_source_files) \
! 	$(built_java_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 = \
+ 	gnu-xml.lo javax-imageio.lo \
+ 	javax-xml.lo gnu-java-beans.lo \
+ 	external/sax/libsax-gcj.la \
+ 	external/w3c_dom/libw3c-gcj.la
  
! noinst_LTLIBRARIES = libgcj0_convenience.la
! libgcj_la_SOURCES = 
! nat_files = $(nat_source_files:.cc=.lo)
! xlib_nat_files = $(xlib_nat_source_files:.cc=.lo)
  
  # Include THREADLIBS here to ensure that the correct version of
  # certain linuxthread functions get linked:
*************** libgcj_la_LDFLAGS = -rpath $(toolexeclib
*** 264,284 ****
  	$(LIBLTDL) $(SYS_ZLIBS) \
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
  
  libgcj_la_LINK = $(LIBLINK)
- @GTK_CAIRO_TRUE@gtk_cairo_c_source_files = @GTK_CAIRO_TRUE@\
- @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c \
- @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c \
- @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c \
- @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
  @GTK_CAIRO_FALSE@gtk_cairo_c_source_files = 
  
  gtk_c_source_files = \
  $(gtk_cairo_c_source_files) \
! jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \
  jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
  jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.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_GtkCheckboxMenuItemPeer.c \
  jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c \
  jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c \
--- 4549,4580 ----
  	$(LIBLTDL) $(SYS_ZLIBS) \
  	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
  
+ libgcj_la_LIBADD = \
+ 	libgcj0_convenience.la \
+ 	$(LIBFFI) $(ZLIBS) $(GCLIBS) $(propertyo_files)
+ 
+ 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_GtkCo
*** 287,297 ****
  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_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_GtkMainThread.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_GtkPanelPeer.c \
--- 4583,4595 ----
  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_GtkTe
*** 303,325 ****
  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/gthread-jni.c \
! jni/classpath/jcl.c \
! jni/classpath/jnilink.c	\
! jni/classpath/native_state.c \
! jni/classpath/primlib.c
! 
  
  gtk_awt_peer_sources = \
! gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java \
! gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java \
  gnu/java/awt/peer/gtk/GdkFontMetrics.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/GdkPixbufDecoder.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/GtkCheckboxGroupPeer.java	\
--- 4601,4623 ----
  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_sources = \
! 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/GtkContainerPeer.j
*** 332,345 ****
  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/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 \
--- 4630,4641 ----
*************** gnu/java/awt/peer/gtk/GtkTextAreaPeer.ja
*** 353,548 ****
  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
! 
! 
! gtk_c_headers = $(patsubst %.java,jniinclude/%.h,$(subst /,_,$(gtk_awt_peer_sources)))
  
  lib_gnu_java_awt_peer_gtk_la_SOURCES = \
- $(gtk_awt_peer_sources) \
  $(gtk_c_source_files) \
  jni/gtk-peer/gthread-jni.h \
  jni/gtk-peer/gtkpeer.h \
! jni/classpath/jcl.h \
! jni/classpath/jnilink.h	\
! jni/classpath/native_state.h \
! jni/classpath/primlib.h
  
  
! lib_gnu_java_awt_peer_gtk_la_LIBADD = $(GTK_LIBS) $(GLIB_LIBS) $(LIBART_LIBS) $(CAIRO_LIBS) $(PANGOFT2_LIBS)
  lib_gnu_java_awt_peer_gtk_la_LDFLAGS = \
! 	-version-info `grep -v '^\#' $(srcdir)/libtool-version`
! 
! 
! lib_org_w3c_dom_la_SOURCES = org/w3c/dom/Attr.java \
! org/w3c/dom/CDATASection.java \
! org/w3c/dom/CharacterData.java \
! org/w3c/dom/Comment.java \
! org/w3c/dom/DOMException.java \
! org/w3c/dom/DOMImplementation.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/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/ranges/DocumentRange.java \
! org/w3c/dom/ranges/Range.java \
! org/w3c/dom/ranges/RangeException.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
! 
! lib_org_w3c_dom_la_LIBADD = -L$(here)/.libs libgcj.la
! lib_org_w3c_dom_la_LDFLAGS = -rpath $(toolexeclibdir) \
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version`
! 
  
! lib_org_xml_sax_la_SOURCES = org/xml/sax/ext/DeclHandler.java \
! org/xml/sax/ext/LexicalHandler.java \
! 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/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
  
! lib_org_xml_sax_la_LIBADD = -L$(here)/.libs libgcj.la
! lib_org_xml_sax_la_LDFLAGS = -rpath $(toolexeclibdir) \
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version`
  
  
- lib_gnu_awt_xlib_la_SOURCES = $(x_nat_source_files)
- EXTRA_lib_gnu_awt_xlib_la_SOURCES = $(x_java_source_files)
- lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-@gcc_version@.jar $(x_javao_files)
- lib_gnu_awt_xlib_la_LIBADD = $(x_javao_files)
  lib_gnu_awt_xlib_la_LDFLAGS = ../libstdc++-v3/src/libstdc++.la \
  	@X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \
          -rpath $(toolexeclibdir) \
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version`
  
  lib_gnu_awt_xlib_la_LINK = $(LIBLINK)
- 
  all_java_source_files = \
      $(java_source_files) \
      $(built_java_source_files) \
-     $(lib_org_xml_sax_la_SOURCES) \
-     $(lib_org_w3c_dom_la_SOURCES) \
      $(gtk_awt_peer_sources) \
!     $(x_java_source_files)
! 
  
  all_java_class_files = $(all_java_source_files:.java=.class)
  
! # Note: The libtool objects are removed by mostlyclean-local
! # because of command-line-length issues.
! MOSTLYCLEANFILES = $(nat_headers) $(x_nat_headers)
! 
! CLEANFILES = libgcj-@gcc_version@.jar
! 
! SUFFIXES = .class .java .h
! 
! 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/lang/reflect/Proxy$$ProxyData.h \
  	java/lang/reflect/Proxy$$ProxyType.h \
  	gnu/java/net/PlainSocketImpl$$SocketInputStream.h \
! 	gnu/java/net/PlainSocketImpl$$SocketOutputStream.h
! 
  
! nat_headers = $(ordinary_nat_headers) $(inner_nat_headers)
  nat_headers_install = $(ordinary_nat_headers)
! 
! x_nat_headers = $(x_java_source_files:.java=.h)
! 
  extra_headers = java/lang/Object.h java/lang/Class.h
- 
  NM = nm
  
! @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
! 
! CONVERT_DIR = gnu/gcj/convert
  
  jv_convert_SOURCES = 
- EXTRA_jv_convert_SOURCES = $(convert_source_files)
  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 = $(convert_source_files:.java=.lo) \
! 	libgcj.la libgcj.spec
  
  
! gij_SOURCES = gij.cc
  gij_LDFLAGS = -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
  gij_LINK = $(GCJLINK)
! gij_LDADD = -L$(here)/.libs libgcj.la
! gij_DEPENDENCIES = libgcj.la libgcj.spec
! 
! rmic_SOURCES = 
! EXTRA_rmic_SOURCES = $(rmi_java_source_files)
! rmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \
  	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
  
! rmic_LINK = $(GCJLINK)
! rmic_LDADD = -L$(here)/.libs libgcj.la
! rmic_DEPENDENCIES = libgcj.la libgcj.spec
! 
! rmiregistry_SOURCES = 
! EXTRA_rmiregistry_SOURCES = $(rmi_java_source_files)
! rmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \
  	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
  
! rmiregistry_LINK = $(GCJLINK)
! rmiregistry_LDADD = -L$(here)/.libs libgcj.la
! rmiregistry_DEPENDENCIES = libgcj.la libgcj.spec
! 
! gen_from_JIS_SOURCES = 
! EXTRA_gen_from_JIS_SOURCES = $(srcdir)/$(CONVERT_DIR)/gen-from-JIS.c \
! 		$(srcdir)/$(CONVERT_DIR)/make-trie.c \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0201.h \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0208.h \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0212.h
! 
! gen_from_JIS_LDADD = $(CONVERT_DIR)/gen-from-JIS.o $(CONVERT_DIR)/make-trie.o
! gen_from_JIS_DEPENDENCIES = $(CONVERT_DIR)/gen-from-JIS.o \
! 		$(CONVERT_DIR)/make-trie.o
! 
! 
  convert_source_files = \
  gnu/gcj/convert/BytesToUnicode.java \
  gnu/gcj/convert/Convert.java \
--- 4649,4791 ----
  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_sources)))
  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_java_source_files) \
! 	$(xlib_nat_source_files)
  
+ lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-@gcc_version@.jar libgcj.la libgcj.spec
+ lib_gnu_awt_xlib_la_LIBADD = $(xlib_javao_files)
+ lib_gnu_awt_xlib_la_CPPFLAGS = \
+ 	$(AM_CPPFLAGS) \
+ 	-I../libstdc++-v3/include \
+ 	-I../libstdc++-v3/include/$(target_noncanonical) \
+ 	-I$(srcdir)/../libstdc++-v3/libsupc++
  
  lib_gnu_awt_xlib_la_LDFLAGS = ../libstdc++-v3/src/libstdc++.la \
  	@X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \
          -rpath $(toolexeclibdir) \
!         -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC)
  
  lib_gnu_awt_xlib_la_LINK = $(LIBLINK)
  all_java_source_files = \
      $(java_source_files) \
      $(built_java_source_files) \
      $(gtk_awt_peer_sources) \
!     $(xlib_java_source_files) \
!     $(gnu_xml_source_files) \
!     $(javax_imageio_source_files) \
!     $(javax_xml_source_files) \
!     $(gnu_java_beans_source_files)
  
  all_java_class_files = $(all_java_source_files:.java=.class)
+ all_property_files = $(property_files) \
+     java/util/logging/logging.properties
  
! 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
+ 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_ASCII.java \
*** 551,556 ****
--- 4794,4801 ----
  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_ASCII.java \
*** 559,570 ****
  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_iconv.java \
  gnu/gcj/convert/UnicodeToBytes.java
  
- 
  special_java_source_files = java/lang/Class.java java/lang/Object.java
  
  awt_java_source_files = \
  gnu/awt/LightweightRedirector.java \
--- 4804,4868 ----
  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/java/awt/ClasspathToolkit.java \
*** 581,613 ****
  gnu/java/awt/EmbeddedWindow.java \
  gnu/java/awt/EmbeddedWindowSupport.java \
  gnu/java/awt/EventModifier.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/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/beans/BeanInfoEmbryo.java \
! gnu/java/beans/EmptyBeanInfo.java \
! gnu/java/beans/ExplicitBeanInfo.java \
! gnu/java/beans/IntrospectionIncubator.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 \
  java/applet/Applet.java \
  java/applet/AppletStub.java \
  java/applet/AppletContext.java \
--- 4879,4903 ----
  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/awt/geom/CubicCurve2D.java \
*** 772,794 ****
--- 5062,5101 ----
  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/beans/BeanInfo.java \
*** 942,949 ****
--- 5249,5258 ----
  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/PropertyEditor.java \
*** 959,983 ****
  java/beans/PropertyEditorManager.java \
  java/beans/PropertyEditorSupport.java \
  java/beans/PropertyVetoException.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 \
! javax/rmi/BAD_OPERATION.java \
! javax/rmi/ORB.java \
! javax/rmi/PortableRemoteObject.java \
! javax/rmi/CORBA/ClassDesc.java \
! javax/rmi/CORBA/ObjectImpl.java	\
! javax/rmi/CORBA/PortableRemoteObjectDelegate.java \
! javax/rmi/CORBA/StubDelegate.java \
! javax/rmi/CORBA/Stub.java \
! javax/rmi/CORBA/SystemException.java \
! javax/rmi/CORBA/Tie.java \
! javax/rmi/CORBA/UtilDelegate.java \
! javax/rmi/CORBA/Util.java \
! javax/rmi/CORBA/ValueHandler.java \
  javax/swing/border/AbstractBorder.java \
  javax/swing/border/BevelBorder.java \
  javax/swing/border/Border.java \
--- 5268,5281 ----
  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/TitledBorder.java \
*** 991,1016 ****
  javax/swing/GrayFilter.java \
  javax/swing/AbstractAction.java \
  javax/swing/AbstractButton.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/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/BasicSplitPaneDivider.java \
  javax/swing/plaf/basic/BasicSplitPaneUI.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/basic/BasicLookAndFeel.java \
  javax/swing/plaf/basic/BasicBorders.java \
  javax/swing/plaf/basic/BasicIconFactory.java \
  javax/swing/plaf/BorderUIResource.java \
  javax/swing/plaf/UIResource.java \
  javax/swing/plaf/ButtonUI.java \
--- 5289,5350 ----
  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/TabbedPaneUI.java \
*** 1024,1030 ****
--- 5358,5366 ----
  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/TableUI.java \
*** 1054,1064 ****
  javax/swing/plaf/ToolBarUI.java \
  javax/swing/plaf/ToolTipUI.java \
  javax/swing/AbstractListModel.java \
- javax/swing/AbstractSet.java \
  javax/swing/colorchooser/AbstractColorChooserPanel.java \
  javax/swing/colorchooser/ColorChooserComponentFactory.java \
  javax/swing/colorchooser/ColorSelectionModel.java \
  javax/swing/colorchooser/DefaultColorSelectionModel.java \
  javax/swing/filechooser/FileFilter.java \
  javax/swing/filechooser/FileSystemView.java \
  javax/swing/filechooser/FileView.java \
--- 5390,5403 ----
  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/ButtonGroup.java \
*** 1080,1091 ****
  javax/swing/ButtonModel.java \
  javax/swing/ComponentInputMap.java \
  javax/swing/DefaultButtonModel.java \
- javax/swing/DefaultCellRenderer.java \
  javax/swing/DefaultListModel.java \
  javax/swing/DefaultListSelectionModel.java \
  javax/swing/Icon.java \
  javax/swing/ImageIcon.java \
  javax/swing/InputMap.java \
  javax/swing/JApplet.java \
  javax/swing/JButton.java \
  javax/swing/JCheckBox.java \
--- 5419,5430 ----
  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/JRadioButton.java \
*** 1104,1110 ****
--- 5443,5451 ----
  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 \
*** 1112,1126 ****
  javax/swing/JViewport.java \
  javax/swing/JWindow.java \
  javax/swing/KeyStroke.java \
  javax/swing/ListCellRenderer.java \
  javax/swing/ListModel.java \
  javax/swing/ListSelectionModel.java \
  javax/swing/LookAndFeel.java \
  javax/swing/Scrollable.java \
  javax/swing/SwingConstants.java \
  javax/swing/SwingUtilities.java \
  javax/swing/Timer.java \
! javax/swing/ToggleButtonModel.java \
  javax/swing/UIDefaults.java \
  javax/swing/UIManager.java \
  javax/swing/UnsupportedLookAndFeelException.java \
--- 5453,5476 ----
  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/text/AbstractDocument.java \
*** 1172,1200 ****
  javax/swing/text/AttributeSet.java \
  javax/swing/text/BadLocationException.java \
  javax/swing/text/Caret.java \
- javax/swing/text/CharacterIterator.java \
  javax/swing/text/ComponentView.java \
  javax/swing/text/DefaultCaret.java \
  javax/swing/text/DefaultEditorKit.java \
  javax/swing/text/Document.java \
  javax/swing/text/DocumentFilter.java \
  javax/swing/text/EditorKit.java \
  javax/swing/text/Element.java \
  javax/swing/text/GapContent.java \
  javax/swing/text/JTextComponent.java \
  javax/swing/text/Keymap.java \
  javax/swing/text/PlainDocument.java \
! javax/swing/text/PlainEditorKit.java \
  javax/swing/text/Position.java \
  javax/swing/text/Segment.java \
  javax/swing/text/Style.java \
! javax/swing/text/View.java \
! javax/swing/text/ViewFactory.java \
! javax/swing/text/MutableAttributeSet.java \
! javax/swing/text/NavigationFilter.java \
  javax/swing/text/StyledDocument.java \
  javax/swing/text/StyledEditorKit.java \
  javax/swing/text/TextAction.java \
  javax/swing/text/html/HTML.java \
  javax/swing/text/html/parser/ParserDelegator.java \
  javax/swing/tree/TreeNode.java \
--- 5522,5564 ----
  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/ProgressMonitor.java \
*** 1275,1284 ****
  javax/swing/ProgressMonitorInputStream.java \
  javax/swing/RepaintManager.java \
  javax/swing/ScrollPaneLayout.java \
- javax/swing/ToolTipManager.java \
  javax/swing/ViewportLayout.java
  
- 
  rmi_java_source_files = \
  java/rmi/activation/Activatable.java \
  java/rmi/activation/ActivateFailedException.java \
--- 5639,5646 ----
*************** gnu/java/rmi/server/ConnectionRunnerPool
*** 1366,1371 ****
--- 5728,5734 ----
  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/UnicastRemoteStub.ja
*** 1377,1589 ****
  gnu/java/rmi/server/UnicastServer.java \
  gnu/java/rmi/server/UnicastServerRef.java
  
  
  javax_source_files = \
! 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/naming/directory/Attribute.java \
! javax/naming/directory/AttributeInUseException.java \
  javax/naming/directory/AttributeModificationException.java \
- javax/naming/directory/Attributes.java \
- javax/naming/directory/DirContext.java \
  javax/naming/directory/InvalidAttributeIdentifierException.java	\
! javax/naming/directory/InvalidAttributeValueException.java \
! javax/naming/directory/InvalidAttributesException.java \
  javax/naming/directory/InvalidSearchControlsException.java \
  javax/naming/directory/InvalidSearchFilterException.java \
- javax/naming/directory/NoSuchAttributeException.java \
- javax/naming/directory/SchemaViolationException.java \
- javax/naming/directory/BasicAttribute.java \
- javax/naming/directory/BasicAttributes.java \
  javax/naming/directory/ModificationItem.java \
- javax/naming/directory/SearchControls.java \
  javax/naming/directory/SearchResult.java \
! javax/naming/directory/InitialDirContext.java \
! javax/naming/AuthenticationException.java \
! javax/naming/AuthenticationNotSupportedException.java \
! javax/naming/CannotProceedException.java \
! javax/naming/CommunicationException.java \
! javax/naming/ConfigurationException.java \
! javax/naming/Context.java \
  javax/naming/ContextNotEmptyException.java \
! javax/naming/InsufficientResourcesException.java \
  javax/naming/InterruptedNamingException.java \
! javax/naming/BinaryRefAddr.java	\
! javax/naming/LimitExceededException.java \
  javax/naming/LinkException.java	\
  javax/naming/LinkLoopException.java \
! javax/naming/MalformedLinkException.java \
! javax/naming/Name.java \
  javax/naming/NameAlreadyBoundException.java \
! javax/naming/NameNotFoundException.java	\
! javax/naming/NameParser.java \
! javax/naming/NamingEnumeration.java \
! javax/naming/InitialContext.java \
! javax/naming/NamingSecurityException.java \
! javax/naming/NoInitialContextException.java \
! javax/naming/NoPermissionException.java	\
  javax/naming/NotContextException.java \
! javax/naming/NamingException.java \
! javax/naming/PartialResultException.java \
! javax/naming/event/EventContext.java \
! javax/naming/event/EventDirContext.java	\
! javax/naming/event/NamespaceChangeListener.java	\
! javax/naming/event/NamingEvent.java \
! javax/naming/event/NamingExceptionEvent.java \
! javax/naming/event/NamingListener.java \
! javax/naming/event/ObjectChangeListener.java \
! javax/naming/RefAddr.java \
! javax/naming/Reference.java \
! javax/naming/Referenceable.java	\
! javax/naming/ReferralException.java \
! javax/naming/ServiceUnavailableException.java \
! javax/naming/SizeLimitExceededException.java \
! javax/naming/StringRefAddr.java	\
! javax/naming/TimeLimitExceededException.java \
! javax/naming/spi/InitialContextFactory.java \
  javax/naming/spi/InitialContextFactoryBuilder.java \
- javax/naming/spi/NamingManager.java \
  javax/naming/spi/ObjectFactory.java \
  javax/naming/spi/Resolver.java \
- javax/naming/spi/DirObjectFactory.java \
- javax/naming/spi/DirStateFactory.java \
- javax/naming/spi/DirectoryManager.java \
- javax/naming/spi/ObjectFactoryBuilder.java \
- javax/naming/spi/ResolveResult.java \
  javax/naming/spi/StateFactory.java \
  javax/naming/InvalidNameException.java \
! javax/naming/Binding.java \
! javax/naming/CompositeName.java	\
! javax/naming/CompoundName.java \
  javax/naming/LinkRef.java \
! javax/naming/NameClassPair.java	\
! javax/naming/ldap/Control.java \
! javax/naming/ldap/ControlFactory.java \
  javax/naming/ldap/ExtendedRequest.java \
! javax/naming/ldap/ExtendedResponse.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/UnsolicitedNotificationEvent.java \
! javax/naming/ldap/UnsolicitedNotificationListener.java \
  javax/naming/OperationNotSupportedException.java \
! javax/print/attribute/Attribute.java \
! javax/print/attribute/AttributeSet.java \
! 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/PrintRequestAttributeSet.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/UnmodifiableSetException.java \
! javax/print/attribute/URISyntax.java \
! 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 \
! 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 \
  javax/security/auth/x500/X500Principal.java \
! 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 \
! javax/transaction/xa/XAException.java \
! javax/transaction/xa/XAResource.java \
! javax/transaction/xa/Xid.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
  
  
  built_java_source_files = java/lang/ConcreteProcess.java \
                            gnu/classpath/Configuration.java
  
- 
  core_java_source_files = \
  java/lang/AbstractMethodError.java \
  java/lang/ArithmeticException.java \
--- 5740,6418 ----
  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/UnsupportedOperationException.
*** 1663,1668 ****
--- 6492,6498 ----
  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/util/TreeMap.java \
*** 1800,1805 ****
--- 6630,6636 ----
  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/regex/Matcher.java \
*** 1830,1853 ****
  java/util/regex/Pattern.java \
  java/util/regex/PatternSyntaxException.java
  
- 
  ordinary_java_source_files = $(core_java_source_files) \
  gnu/gcj/Core.java \
  gnu/gcj/RawData.java \
  gnu/gcj/io/DefaultMimeTypes.java \
  gnu/gcj/io/MimeTypes.java \
  gnu/gcj/io/SimpleSHSStream.java	\
  gnu/gcj/runtime/FileDeleter.java \
  gnu/gcj/runtime/FinalizerThread.java \
! gnu/gcj/runtime/FirstThread.java \
  gnu/gcj/runtime/JNIWeakRef.java \
  gnu/gcj/runtime/MethodRef.java \
  gnu/gcj/runtime/NameFinder.java \
  gnu/gcj/runtime/SharedLibHelper.java \
  gnu/gcj/runtime/SharedLibLoader.java \
- gnu/gcj/runtime/StackTrace.java \
  gnu/gcj/runtime/StringBuffer.java \
! gnu/gcj/runtime/VMClassLoader.java \
  gnu/java/io/ASN1ParsingException.java \
  gnu/java/io/Base64InputStream.java \
  gnu/java/io/ClassLoaderObjectInputStream.java \
--- 6661,6690 ----
  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 \
*** 1855,1861 ****
  gnu/java/io/ObjectIdentityWrapper.java \
  gnu/java/lang/ArrayHelper.java \
  gnu/java/lang/ClassHelper.java \
! gnu/java/lang/CharData.java \
  gnu/java/lang/reflect/TypeSignature.java \
  gnu/java/locale/Calendar.java \
  gnu/java/locale/Calendar_de.java \
--- 6692,6698 ----
  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/LocaleInformation_zh_HK.
*** 1997,2027 ****
  gnu/java/locale/LocaleInformation_zh_SG.java \
  gnu/java/locale/LocaleInformation_zh_TW.java \
  gnu/java/math/MPN.java \
  gnu/java/net/HeaderFieldHelper.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/Handler.java \
  gnu/java/net/protocol/core/CoreInputStream.java \
  gnu/java/net/protocol/file/Connection.java \
  gnu/java/net/protocol/file/Handler.java \
! gnu/java/net/protocol/http/Connection.java \
  gnu/java/net/protocol/http/Handler.java \
  gnu/java/net/protocol/jar/Connection.java \
  gnu/java/net/protocol/jar/Handler.java \
! gnu/java/net/protocol/gcjlib/Connection.java \
! gnu/java/net/protocol/gcjlib/Handler.java \
  gnu/java/nio/DatagramChannelImpl.java \
  gnu/java/nio/DatagramChannelSelectionKey.java \
  gnu/java/nio/FileLockImpl.java \
  gnu/java/nio/NIOConstants.java \
  gnu/java/nio/NIODatagramSocket.java \
  gnu/java/nio/NIOServerSocket.java \
  gnu/java/nio/NIOSocket.java \
- gnu/java/nio/ChannelInputStream.java \
- gnu/java/nio/ChannelOutputStream.java \
- gnu/java/nio/InputStreamChannel.java \
  gnu/java/nio/OutputStreamChannel.java \
  gnu/java/nio/PipeImpl.java \
  gnu/java/nio/SelectionKeyImpl.java \
--- 6834,6908 ----
  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/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/ServerSocketChannelImpl.jav
*** 2031,2036 ****
--- 6912,6920 ----
  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_16LE.java \
*** 2042,2083 ****
  gnu/java/nio/charset/UTF_8.java \
  gnu/java/security/Engine.java \
  gnu/java/security/OID.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/provider/DefaultPolicy.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/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/provider/X509CertificateFactory.java \
  gnu/java/security/util/Prime.java \
  gnu/java/security/x509/X500DistinguishedName.java \
- gnu/java/security/x509/X509Certificate.java \
- gnu/java/security/x509/X509CRLEntry.java \
  gnu/java/security/x509/X509CRL.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/MemoryBasedFactory.java \
- gnu/java/util/prefs/NodeReader.java \
  gnu/java/util/prefs/MemoryBasedPreferences.java \
! gnu/java/util/prefs/FileBasedFactory.java \
  gnu/java/util/prefs/NodeWriter.java \
  java/lang/ref/PhantomReference.java \
  java/lang/ref/Reference.java \
  java/lang/ref/ReferenceQueue.java \
--- 6926,7039 ----
  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/net/DatagramSocketImpl.java \
*** 2108,2116 ****
  java/net/DatagramSocketImplFactory.java \
  java/net/FileNameMap.java \
  java/net/HttpURLConnection.java	\
- java/net/InetAddress.java \
  java/net/Inet4Address.java \
  java/net/Inet6Address.java \
  java/net/InetSocketAddress.java \
  java/net/JarURLConnection.java \
  java/net/MalformedURLException.java \
--- 7064,7072 ----
  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/nio/ReadOnlyBufferException.java \
*** 2171,2176 ****
--- 7127,7133 ----
  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/ClosedSelectorExceptio
*** 2183,2189 ****
  java/nio/channels/ConnectionPendingException.java \
  java/nio/channels/DatagramChannel.java \
  java/nio/channels/FileChannel.java \
- java/nio/channels/FileChannelImpl.java \
  java/nio/channels/FileLock.java \
  java/nio/channels/FileLockInterruptionException.java \
  java/nio/channels/GatheringByteChannel.java \
--- 7140,7145 ----
*************** java/nio/channels/SocketChannel.java \
*** 2207,2219 ****
  java/nio/channels/UnresolvedAddressException.java \
  java/nio/channels/UnsupportedAddressTypeException.java \
  java/nio/channels/WritableByteChannel.java \
- java/nio/channels/spi/AbstractSelectableChannel.java \
  java/nio/channels/spi/AbstractInterruptibleChannel.java \
  java/nio/channels/spi/AbstractSelectionKey.java \
  java/nio/channels/spi/AbstractSelector.java \
  java/nio/channels/spi/SelectorProvider.java \
- java/nio/charset/Charset.java \
  java/nio/charset/CharacterCodingException.java \
  java/nio/charset/CharsetDecoder.java \
  java/nio/charset/CharsetEncoder.java \
  java/nio/charset/CoderMalfunctionError.java \
--- 7163,7175 ----
  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/security/AccessControlContext.java 
*** 2228,2247 ****
  java/security/AccessControlException.java \
  java/security/AccessController.java \
  java/security/AlgorithmParameterGenerator.java \
- java/security/AlgorithmParameters.java \
  java/security/AlgorithmParameterGeneratorSpi.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/DigestOutputStream.java \
- java/security/DummyKeyPairGenerator.java \
- java/security/DummySignature.java \
  java/security/DigestInputStream.java \
  java/security/DomainCombiner.java \
  java/security/DummyMessageDigest.java \
  java/security/GeneralSecurityException.java \
  java/security/Guard.java \
  java/security/GuardedObject.java \
--- 7184,7203 ----
  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/InvalidAlgorithmParameterE
*** 2251,2314 ****
  java/security/InvalidKeyException.java \
  java/security/InvalidParameterException.java \
  java/security/Key.java \
- java/security/KeyFactorySpi.java \
- java/security/KeyPairGenerator.java \
- java/security/KeyStoreException.java \
  java/security/KeyException.java \
- java/security/KeyManagementException.java \
- java/security/KeyPairGeneratorSpi.java \
- java/security/KeyStoreSpi.java \
  java/security/KeyFactory.java \
  java/security/KeyPair.java \
  java/security/KeyStore.java \
  java/security/MessageDigest.java \
  java/security/MessageDigestSpi.java \
  java/security/NoSuchAlgorithmException.java \
  java/security/NoSuchProviderException.java \
  java/security/Permission.java \
- java/security/Principal.java \
- java/security/PrivilegedExceptionAction.java \
- java/security/PublicKey.java \
  java/security/PermissionCollection.java \
- java/security/PrivateKey.java \
- java/security/ProtectionDomain.java \
  java/security/Permissions.java \
- java/security/PrivilegedAction.java \
- java/security/Provider.java \
  java/security/Policy.java \
  java/security/PrivilegedActionException.java \
  java/security/ProviderException.java \
  java/security/SecureClassLoader.java \
- java/security/SecureRandomSpi.java \
- java/security/SecurityPermission.java \
- java/security/SignatureException.java \
- java/security/SignedObject.java \
  java/security/SecureRandom.java \
  java/security/Security.java \
  java/security/Signature.java \
  java/security/SignatureSpi.java \
  java/security/Signer.java \
  java/security/UnrecoverableKeyException.java \
  java/security/UnresolvedPermission.java \
  java/security/acl/Acl.java \
- java/security/acl/AclNotFoundException.java \
- java/security/acl/LastOwnerException.java \
- java/security/acl/Owner.java \
  java/security/acl/AclEntry.java \
  java/security/acl/Group.java \
  java/security/acl/NotOwnerException.java \
  java/security/acl/Permission.java \
  java/security/cert/CRL.java \
  java/security/cert/CRLException.java \
  java/security/cert/CRLSelector.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/CertPath.java \
  java/security/cert/CertPathBuilder.java \
  java/security/cert/CertPathBuilderException.java \
--- 7207,7262 ----
  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/CertStore.java \
*** 2324,2329 ****
--- 7272,7285 ----
  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/PolicyQualifierInfo.j
*** 2336,2341 ****
--- 7292,7299 ----
  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/sql/PreparedStatement.java	\
*** 2382,2394 ****
  java/sql/Ref.java \
  java/sql/ResultSet.java	\
  java/sql/ResultSetMetaData.java	\
- java/sql/Savepoint.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/Statement.java	\
  java/sql/Struct.java	\
  java/sql/Time.java \
--- 7340,7352 ----
  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/text/DecimalFormat.java \
*** 2410,2416 ****
  java/text/DecimalFormatSymbols.java \
  java/text/FieldPosition.java \
  java/text/Format.java \
- java/text/FormatCharacterIterator.java \
  java/text/MessageFormat.java \
  java/text/NumberFormat.java \
  java/text/ParseException.java \
--- 7368,7373 ----
*************** java/util/zip/ZipOutputStream.java \
*** 2446,2457 ****
  $(rmi_java_source_files) \
  $(awt_java_source_files) \
  $(convert_source_files) \
! $(javax_source_files)
! 
  
  java_source_files = $(special_java_source_files) $(ordinary_java_source_files)
! 
! 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      \
--- 7403,7413 ----
  $(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      \
*************** c_source_files = \
*** 2466,2476 ****
    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
  
- 
- extra_cc_source_files = $(EXTRA_CC_FILES)
- 
- #java/awt/natToolkit.cc
- 
  nat_source_files = \
  gnu/gcj/natCore.cc \
  gnu/gcj/convert/JIS0208_to_Unicode.cc \
--- 7422,7427 ----
*************** gnu/gcj/convert/natOutput_SJIS.cc \
*** 2484,2505 ****
  gnu/gcj/io/natSimpleSHSStream.cc \
  gnu/gcj/io/shs.cc \
  gnu/gcj/runtime/natFinalizerThread.cc \
- gnu/gcj/runtime/natFirstThread.cc \
  gnu/gcj/runtime/natNameFinder.cc \
  gnu/gcj/runtime/natSharedLibLoader.cc \
  gnu/gcj/runtime/natStackTrace.cc \
  gnu/gcj/runtime/natStringBuffer.cc \
! gnu/gcj/runtime/natVMClassLoader.cc \
! gnu/java/awt/natEmbeddedWindow.cc \
  gnu/java/net/natPlainDatagramSocketImpl.cc \
  gnu/java/net/natPlainSocketImpl.cc \
  gnu/java/net/protocol/core/natCoreInputStream.cc \
- gnu/java/nio/natFileLockImpl.cc \
  gnu/java/nio/natPipeImpl.cc \
  gnu/java/nio/natSelectorImpl.cc \
  gnu/java/nio/natNIOServerSocket.cc \
  java/io/natFile.cc \
- java/io/natFileDescriptor.cc \
  java/io/natObjectInputStream.cc \
  java/io/natVMObjectStreamClass.cc \
  java/lang/natCharacter.cc \
--- 7435,7454 ----
  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 \
  gnu/java/net/natPlainSocketImpl.cc \
  gnu/java/net/protocol/core/natCoreInputStream.cc \
  gnu/java/nio/natPipeImpl.cc \
  gnu/java/nio/natSelectorImpl.cc \
  gnu/java/nio/natNIOServerSocket.cc \
+ gnu/java/nio/channels/natFileChannelImpl.cc \
  java/io/natFile.cc \
  java/io/natObjectInputStream.cc \
  java/io/natVMObjectStreamClass.cc \
  java/lang/natCharacter.cc \
*************** java/lang/natString.cc \
*** 2515,2520 ****
--- 7464,7470 ----
  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/natMethod.cc \
*** 2524,2539 ****
  java/lang/reflect/natProxy.cc \
  java/net/natNetworkInterface.cc \
  java/net/natInetAddress.cc \
  java/nio/natDirectByteBufferImpl.cc \
- java/nio/channels/natFileChannelImpl.cc \
  java/text/natCollator.cc \
  java/util/natResourceBundle.cc \
! java/util/natTimeZone.cc \
  java/util/zip/natDeflater.cc \
  java/util/zip/natInflater.cc
  
! 
! x_java_source_files = \
  gnu/gcj/xlib/Clip.java \
  gnu/gcj/xlib/Colormap.java \
  gnu/gcj/xlib/Display.java \
--- 7474,7489 ----
  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
  
! xlib_java_source_files = \
  gnu/gcj/xlib/Clip.java \
  gnu/gcj/xlib/Colormap.java \
  gnu/gcj/xlib/Display.java \
*************** gnu/awt/xlib/XGraphics.java \
*** 2566,2575 ****
  gnu/awt/xlib/XGraphicsConfiguration.java \
  gnu/awt/xlib/XOffScreenImage.java \
  gnu/awt/xlib/XPanelPeer.java \
  gnu/awt/xlib/XToolkit.java
  
! 
! x_nat_source_files = \
  gnu/gcj/xlib/natClip.cc \
  gnu/gcj/xlib/natColormap.cc \
  gnu/gcj/xlib/natDisplay.cc \
--- 7516,7525 ----
  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 \
  gnu/gcj/xlib/natDisplay.cc \
*************** gnu/gcj/xlib/natXExposeEvent.cc \
*** 2591,2596 ****
--- 7541,7547 ----
  gnu/gcj/xlib/natXImage.cc \
  gnu/gcj/xlib/natXUnmapEvent.cc
  
+ sourcesdir = $(jardir)
  
  # 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
*************** AM_MAKEFLAGS = \
*** 2621,2626 ****
--- 7572,7578 ----
  	"infodir=$(infodir)" \
  	"libdir=$(libdir)" \
  	"prefix=$(prefix)" \
+ 	"gxx_include_dir=$(gxx_include_dir)" \
  	"AR=$(AR)" \
  	"AS=$(AS)" \
  	"LD=$(LD)" \
*************** AM_MAKEFLAGS = \
*** 2633,2641 ****
  
  # Subdir rules rely on $(FLAGS_TO_PASS)
  FLAGS_TO_PASS = $(AM_MAKEFLAGS)
- 
  CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
- 
  MAKEOVERRIDES = 
  
  # Multilib support variables.
--- 7585,7591 ----
*************** MULTIDIRS = 
*** 2645,4871 ****
  MULTISUBDIR = 
  MULTIDO = true
  MULTICLEAN = true
! ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! CONFIG_HEADER = ./include/config.h ./gcj/libgcj-config.h
! CONFIG_CLEAN_FILES =  libgcj.pc libgcj.spec libgcj-test.spec
! LTLIBRARIES =  $(toolexeclib_LTLIBRARIES)
! 
! 
! DEFS = @DEFS@ -I. -I$(srcdir) -I./include -I./gcj
! CPPFLAGS = @CPPFLAGS@
! LDFLAGS = @LDFLAGS@
! LIBS = @LIBS@
! X_CFLAGS = @X_CFLAGS@
! X_LIBS = @X_LIBS@
! X_EXTRA_LIBS = @X_EXTRA_LIBS@
! X_PRE_LIBS = @X_PRE_LIBS@
! libgcj_la_OBJECTS =  prims.lo jni.lo exception.lo resolve.lo \
! defineclass.lo interpret.lo verify.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 \
! gnu/gcj/convert/natInput_SJIS.lo gnu/gcj/convert/natOutput_EUCJIS.lo \
! gnu/gcj/convert/natOutput_SJIS.lo gnu/gcj/io/natSimpleSHSStream.lo \
! gnu/gcj/io/shs.lo gnu/gcj/runtime/natFinalizerThread.lo \
! gnu/gcj/runtime/natFirstThread.lo gnu/gcj/runtime/natNameFinder.lo \
! gnu/gcj/runtime/natSharedLibLoader.lo gnu/gcj/runtime/natStackTrace.lo \
! gnu/gcj/runtime/natStringBuffer.lo gnu/gcj/runtime/natVMClassLoader.lo \
! gnu/java/awt/natEmbeddedWindow.lo \
! gnu/java/net/natPlainDatagramSocketImpl.lo \
! gnu/java/net/natPlainSocketImpl.lo \
! gnu/java/net/protocol/core/natCoreInputStream.lo \
! gnu/java/nio/natFileLockImpl.lo gnu/java/nio/natPipeImpl.lo \
! gnu/java/nio/natSelectorImpl.lo gnu/java/nio/natNIOServerSocket.lo \
! java/io/natFile.lo java/io/natFileDescriptor.lo \
! java/io/natObjectInputStream.lo java/io/natVMObjectStreamClass.lo \
! java/lang/natCharacter.lo java/lang/natClass.lo \
! java/lang/natClassLoader.lo java/lang/natConcreteProcess.lo \
! java/lang/natDouble.lo 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/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/natDirectByteBufferImpl.lo \
! java/nio/channels/natFileChannelImpl.lo java/text/natCollator.lo \
! java/util/natResourceBundle.lo java/util/natTimeZone.lo \
! java/util/zip/natDeflater.lo java/util/zip/natInflater.lo
! lib_org_xml_sax_la_DEPENDENCIES =  libgcj.la
! lib_org_xml_sax_la_OBJECTS =  org/xml/sax/ext/DeclHandler.lo \
! org/xml/sax/ext/LexicalHandler.lo \
! org/xml/sax/helpers/AttributeListImpl.lo \
! org/xml/sax/helpers/AttributesImpl.lo \
! org/xml/sax/helpers/DefaultHandler.lo \
! org/xml/sax/helpers/LocatorImpl.lo \
! org/xml/sax/helpers/NamespaceSupport.lo \
! org/xml/sax/helpers/NewInstance.lo org/xml/sax/helpers/ParserAdapter.lo \
! org/xml/sax/helpers/ParserFactory.lo \
! org/xml/sax/helpers/XMLFilterImpl.lo \
! org/xml/sax/helpers/XMLReaderAdapter.lo \
! org/xml/sax/helpers/XMLReaderFactory.lo org/xml/sax/AttributeList.lo \
! org/xml/sax/Attributes.lo org/xml/sax/ContentHandler.lo \
! org/xml/sax/DTDHandler.lo org/xml/sax/DocumentHandler.lo \
! org/xml/sax/EntityResolver.lo org/xml/sax/ErrorHandler.lo \
! org/xml/sax/HandlerBase.lo org/xml/sax/InputSource.lo \
! org/xml/sax/Locator.lo org/xml/sax/Parser.lo \
! org/xml/sax/SAXException.lo org/xml/sax/SAXNotRecognizedException.lo \
! org/xml/sax/SAXNotSupportedException.lo \
! org/xml/sax/SAXParseException.lo org/xml/sax/XMLFilter.lo \
! org/xml/sax/XMLReader.lo
! lib_org_w3c_dom_la_DEPENDENCIES =  libgcj.la
! lib_org_w3c_dom_la_OBJECTS =  org/w3c/dom/Attr.lo \
! org/w3c/dom/CDATASection.lo org/w3c/dom/CharacterData.lo \
! org/w3c/dom/Comment.lo org/w3c/dom/DOMException.lo \
! org/w3c/dom/DOMImplementation.lo org/w3c/dom/Document.lo \
! org/w3c/dom/DocumentFragment.lo org/w3c/dom/DocumentType.lo \
! org/w3c/dom/Element.lo org/w3c/dom/Entity.lo \
! org/w3c/dom/EntityReference.lo org/w3c/dom/NamedNodeMap.lo \
! org/w3c/dom/Node.lo org/w3c/dom/NodeList.lo org/w3c/dom/Notation.lo \
! org/w3c/dom/ProcessingInstruction.lo org/w3c/dom/Text.lo \
! org/w3c/dom/ranges/DocumentRange.lo org/w3c/dom/ranges/Range.lo \
! org/w3c/dom/ranges/RangeException.lo \
! org/w3c/dom/traversal/DocumentTraversal.lo \
! org/w3c/dom/traversal/NodeFilter.lo \
! org/w3c/dom/traversal/NodeIterator.lo \
! org/w3c/dom/traversal/TreeWalker.lo
! lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES = 
! @GTK_CAIRO_FALSE@lib_gnu_java_awt_peer_gtk_la_OBJECTS =  \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkClasspathFontPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkFontMetrics.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkGlyphVector.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkGraphics.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkGraphics2D.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GdkPixbufDecoder.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkArg.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkArgList.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkButtonPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCanvasPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkCheckboxPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkChoicePeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkClipboard.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkComponentPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkContainerPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkDialogPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkFileDialogPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkFontPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkFramePeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkGenericPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkImage.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkImagePainter.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkLabelPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkListPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMainThread.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuBarPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuComponentPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuItemPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkMenuPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkOffScreenImage.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkPanelPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkPopupMenuPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkScrollPanePeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkScrollbarPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkTextAreaPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkTextComponentPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkTextFieldPeer.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkToolkit.lo \
! @GTK_CAIRO_FALSE@gnu/java/awt/peer/gtk/GtkWindowPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.lo \
! @GTK_CAIRO_FALSE@jni/gtk-peer/gthread-jni.lo jni/classpath/jcl.lo \
! @GTK_CAIRO_FALSE@jni/classpath/jnilink.lo jni/classpath/native_state.lo \
! @GTK_CAIRO_FALSE@jni/classpath/primlib.lo
! @GTK_CAIRO_TRUE@lib_gnu_java_awt_peer_gtk_la_OBJECTS =  \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GdkClasspathFontPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GdkFontMetrics.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GdkGlyphVector.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GdkGraphics.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GdkGraphics2D.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GdkPixbufDecoder.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkArg.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkArgList.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkButtonPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkCanvasPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkCheckboxPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkChoicePeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkClipboard.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkComponentPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkContainerPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkDialogPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkFileDialogPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkFontPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkFramePeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkGenericPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkImage.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkImagePainter.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkLabelPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkListPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkMainThread.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkMenuBarPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkMenuComponentPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkMenuItemPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkMenuPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkOffScreenImage.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkPanelPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkPopupMenuPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkScrollPanePeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkScrollbarPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkTextAreaPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkTextComponentPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkTextFieldPeer.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkToolkit.lo \
! @GTK_CAIRO_TRUE@gnu/java/awt/peer/gtk/GtkWindowPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.lo \
! @GTK_CAIRO_TRUE@jni/gtk-peer/gthread-jni.lo jni/classpath/jcl.lo \
! @GTK_CAIRO_TRUE@jni/classpath/jnilink.lo jni/classpath/native_state.lo \
! @GTK_CAIRO_TRUE@jni/classpath/primlib.lo
! lib_gnu_awt_xlib_la_OBJECTS =  gnu/gcj/xlib/natClip.lo \
! gnu/gcj/xlib/natColormap.lo gnu/gcj/xlib/natDisplay.lo \
! gnu/gcj/xlib/natDrawable.lo gnu/gcj/xlib/natFont.lo \
! gnu/gcj/xlib/natGC.lo gnu/gcj/xlib/natPixmap.lo \
! gnu/gcj/xlib/natScreen.lo gnu/gcj/xlib/natVisual.lo \
! gnu/gcj/xlib/natWMSizeHints.lo gnu/gcj/xlib/natWindow.lo \
! gnu/gcj/xlib/natWindowAttributes.lo gnu/gcj/xlib/natXAnyEvent.lo \
! gnu/gcj/xlib/natXButtonEvent.lo gnu/gcj/xlib/natXColor.lo \
! gnu/gcj/xlib/natXConfigureEvent.lo gnu/gcj/xlib/natXException.lo \
! gnu/gcj/xlib/natXExposeEvent.lo gnu/gcj/xlib/natXImage.lo \
! gnu/gcj/xlib/natXUnmapEvent.lo
! @NATIVE_TRUE@bin_PROGRAMS =  jv-convert$(EXEEXT) gij$(EXEEXT) \
! @NATIVE_TRUE@rmic$(EXEEXT) rmiregistry$(EXEEXT)
! @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS =  \
! @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS$(EXEEXT)
! PROGRAMS =  $(bin_PROGRAMS) $(noinst_PROGRAMS)
! 
! jv_convert_OBJECTS = 
! gij_OBJECTS =  gij.$(OBJEXT)
! rmic_OBJECTS = 
! rmiregistry_OBJECTS = 
! gen_from_JIS_OBJECTS = 
! gen_from_JIS_LDFLAGS = 
! SCRIPTS =  $(bin_SCRIPTS)
! 
! CXXFLAGS = @CXXFLAGS@
! CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
! CXXLD = $(CXX)
! CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
! CFLAGS = @CFLAGS@
! COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
! CCLD = $(CC)
! LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
! DATA =  $(jar_DATA) $(pkgconfig_DATA) $(toolexecmainlib_DATA)
! 
! DIST_COMMON =  README COPYING ChangeLog Makefile.am Makefile.in NEWS \
! THANKS acinclude.m4 aclocal.m4 configure configure.in \
! libgcj-test.spec.in libgcj.pc.in libgcj.spec.in
! 
! 
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
! 
! TAR = gtar
! GZIP_ENV = --best
! DIST_SUBDIRS =  @DIRLTDL@ testsuite gcj include @DIRLTDL@ gcj include
! DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
! .deps/$(srcdir)/$(CONVERT_DIR)/make-trie.P .deps/boehm.P \
! .deps/defineclass.P .deps/exception.P .deps/gij.P \
! .deps/gnu/awt/LightweightRedirector.P \
! .deps/gnu/awt/j2d/AbstractGraphicsState.P \
! .deps/gnu/awt/j2d/DirectRasterGraphics.P \
! .deps/gnu/awt/j2d/Graphics2DImpl.P \
! .deps/gnu/awt/j2d/IntegerGraphicsState.P \
! .deps/gnu/awt/j2d/MappedRaster.P .deps/gnu/awt/xlib/XCanvasPeer.P \
! .deps/gnu/awt/xlib/XEventLoop.P .deps/gnu/awt/xlib/XEventQueue.P \
! .deps/gnu/awt/xlib/XFontMetrics.P .deps/gnu/awt/xlib/XFramePeer.P \
! .deps/gnu/awt/xlib/XGraphics.P \
! .deps/gnu/awt/xlib/XGraphicsConfiguration.P \
! .deps/gnu/awt/xlib/XOffScreenImage.P .deps/gnu/awt/xlib/XPanelPeer.P \
! .deps/gnu/awt/xlib/XToolkit.P .deps/gnu/classpath/Configuration.P \
! .deps/gnu/gcj/Core.P .deps/gnu/gcj/RawData.P \
! .deps/gnu/gcj/convert/BytesToUnicode.P .deps/gnu/gcj/convert/Convert.P \
! .deps/gnu/gcj/convert/IOConverter.P \
! .deps/gnu/gcj/convert/Input_8859_1.P \
! .deps/gnu/gcj/convert/Input_ASCII.P \
! .deps/gnu/gcj/convert/Input_EUCJIS.P \
! .deps/gnu/gcj/convert/Input_JavaSrc.P \
! .deps/gnu/gcj/convert/Input_SJIS.P .deps/gnu/gcj/convert/Input_UTF8.P \
! .deps/gnu/gcj/convert/Input_iconv.P \
! .deps/gnu/gcj/convert/JIS0208_to_Unicode.P \
! .deps/gnu/gcj/convert/JIS0212_to_Unicode.P \
! .deps/gnu/gcj/convert/Output_8859_1.P \
! .deps/gnu/gcj/convert/Output_ASCII.P \
! .deps/gnu/gcj/convert/Output_EUCJIS.P \
! .deps/gnu/gcj/convert/Output_JavaSrc.P \
! .deps/gnu/gcj/convert/Output_SJIS.P .deps/gnu/gcj/convert/Output_UTF8.P \
! .deps/gnu/gcj/convert/Output_iconv.P \
! .deps/gnu/gcj/convert/UnicodeToBytes.P \
! .deps/gnu/gcj/convert/Unicode_to_JIS.P .deps/gnu/gcj/convert/natIconv.P \
! .deps/gnu/gcj/convert/natInput_EUCJIS.P \
! .deps/gnu/gcj/convert/natInput_SJIS.P \
! .deps/gnu/gcj/convert/natOutput_EUCJIS.P \
! .deps/gnu/gcj/convert/natOutput_SJIS.P \
! .deps/gnu/gcj/io/DefaultMimeTypes.P .deps/gnu/gcj/io/MimeTypes.P \
! .deps/gnu/gcj/io/SimpleSHSStream.P \
! .deps/gnu/gcj/io/natSimpleSHSStream.P .deps/gnu/gcj/io/shs.P \
! .deps/gnu/gcj/natCore.P .deps/gnu/gcj/runtime/FileDeleter.P \
! .deps/gnu/gcj/runtime/FinalizerThread.P \
! .deps/gnu/gcj/runtime/FirstThread.P .deps/gnu/gcj/runtime/JNIWeakRef.P \
! .deps/gnu/gcj/runtime/MethodRef.P .deps/gnu/gcj/runtime/NameFinder.P \
! .deps/gnu/gcj/runtime/SharedLibHelper.P \
! .deps/gnu/gcj/runtime/SharedLibLoader.P \
! .deps/gnu/gcj/runtime/StackTrace.P .deps/gnu/gcj/runtime/StringBuffer.P \
! .deps/gnu/gcj/runtime/VMClassLoader.P \
! .deps/gnu/gcj/runtime/natFinalizerThread.P \
! .deps/gnu/gcj/runtime/natFirstThread.P \
! .deps/gnu/gcj/runtime/natNameFinder.P \
! .deps/gnu/gcj/runtime/natSharedLibLoader.P \
! .deps/gnu/gcj/runtime/natStackTrace.P \
! .deps/gnu/gcj/runtime/natStringBuffer.P \
! .deps/gnu/gcj/runtime/natVMClassLoader.P .deps/gnu/gcj/xlib/Clip.P \
! .deps/gnu/gcj/xlib/Colormap.P .deps/gnu/gcj/xlib/Display.P \
! .deps/gnu/gcj/xlib/Drawable.P .deps/gnu/gcj/xlib/Font.P \
! .deps/gnu/gcj/xlib/GC.P .deps/gnu/gcj/xlib/Pixmap.P \
! .deps/gnu/gcj/xlib/Screen.P .deps/gnu/gcj/xlib/Visual.P \
! .deps/gnu/gcj/xlib/WMSizeHints.P .deps/gnu/gcj/xlib/Window.P \
! .deps/gnu/gcj/xlib/WindowAttributes.P .deps/gnu/gcj/xlib/XAnyEvent.P \
! .deps/gnu/gcj/xlib/XButtonEvent.P .deps/gnu/gcj/xlib/XColor.P \
! .deps/gnu/gcj/xlib/XConfigureEvent.P \
! .deps/gnu/gcj/xlib/XConnectException.P .deps/gnu/gcj/xlib/XEvent.P \
! .deps/gnu/gcj/xlib/XException.P .deps/gnu/gcj/xlib/XExposeEvent.P \
! .deps/gnu/gcj/xlib/XID.P .deps/gnu/gcj/xlib/XImage.P \
! .deps/gnu/gcj/xlib/XUnmapEvent.P .deps/gnu/gcj/xlib/natClip.P \
! .deps/gnu/gcj/xlib/natColormap.P .deps/gnu/gcj/xlib/natDisplay.P \
! .deps/gnu/gcj/xlib/natDrawable.P .deps/gnu/gcj/xlib/natFont.P \
! .deps/gnu/gcj/xlib/natGC.P .deps/gnu/gcj/xlib/natPixmap.P \
! .deps/gnu/gcj/xlib/natScreen.P .deps/gnu/gcj/xlib/natVisual.P \
! .deps/gnu/gcj/xlib/natWMSizeHints.P .deps/gnu/gcj/xlib/natWindow.P \
! .deps/gnu/gcj/xlib/natWindowAttributes.P \
! .deps/gnu/gcj/xlib/natXAnyEvent.P .deps/gnu/gcj/xlib/natXButtonEvent.P \
! .deps/gnu/gcj/xlib/natXColor.P .deps/gnu/gcj/xlib/natXConfigureEvent.P \
! .deps/gnu/gcj/xlib/natXException.P .deps/gnu/gcj/xlib/natXExposeEvent.P \
! .deps/gnu/gcj/xlib/natXImage.P .deps/gnu/gcj/xlib/natXUnmapEvent.P \
! .deps/gnu/java/awt/BitMaskExtent.P \
! .deps/gnu/java/awt/BitwiseXORComposite.P .deps/gnu/java/awt/Buffers.P \
! .deps/gnu/java/awt/ClasspathToolkit.P \
! .deps/gnu/java/awt/ComponentDataBlitOp.P \
! .deps/gnu/java/awt/EmbeddedWindow.P \
! .deps/gnu/java/awt/EmbeddedWindowSupport.P \
! .deps/gnu/java/awt/EventModifier.P \
! .deps/gnu/java/awt/image/ImageDecoder.P \
! .deps/gnu/java/awt/image/XBMDecoder.P \
! .deps/gnu/java/awt/natEmbeddedWindow.P \
! .deps/gnu/java/awt/peer/ClasspathFontPeer.P \
! .deps/gnu/java/awt/peer/EmbeddedWindowPeer.P \
! .deps/gnu/java/awt/peer/GLightweightPeer.P \
! .deps/gnu/java/awt/peer/gtk/GdkClasspathFontPeer.P \
! .deps/gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.P \
! .deps/gnu/java/awt/peer/gtk/GdkFontMetrics.P \
! .deps/gnu/java/awt/peer/gtk/GdkGlyphVector.P \
! .deps/gnu/java/awt/peer/gtk/GdkGraphics.P \
! .deps/gnu/java/awt/peer/gtk/GdkGraphics2D.P \
! .deps/gnu/java/awt/peer/gtk/GdkPixbufDecoder.P \
! .deps/gnu/java/awt/peer/gtk/GtkArg.P \
! .deps/gnu/java/awt/peer/gtk/GtkArgList.P \
! .deps/gnu/java/awt/peer/gtk/GtkButtonPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkCanvasPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkCheckboxPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkChoicePeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkClipboard.P \
! .deps/gnu/java/awt/peer/gtk/GtkComponentPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkContainerPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkDialogPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkFileDialogPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkFontPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkFramePeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkGenericPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkImage.P \
! .deps/gnu/java/awt/peer/gtk/GtkImagePainter.P \
! .deps/gnu/java/awt/peer/gtk/GtkLabelPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkListPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkMainThread.P \
! .deps/gnu/java/awt/peer/gtk/GtkMenuBarPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkMenuItemPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkMenuPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkOffScreenImage.P \
! .deps/gnu/java/awt/peer/gtk/GtkPanelPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkScrollPanePeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkScrollbarPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkTextAreaPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkTextComponentPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkTextFieldPeer.P \
! .deps/gnu/java/awt/peer/gtk/GtkToolkit.P \
! .deps/gnu/java/awt/peer/gtk/GtkWindowPeer.P \
! .deps/gnu/java/beans/BeanInfoEmbryo.P \
! .deps/gnu/java/beans/EmptyBeanInfo.P \
! .deps/gnu/java/beans/ExplicitBeanInfo.P \
! .deps/gnu/java/beans/IntrospectionIncubator.P \
! .deps/gnu/java/beans/editors/ColorEditor.P \
! .deps/gnu/java/beans/editors/FontEditor.P \
! .deps/gnu/java/beans/editors/NativeBooleanEditor.P \
! .deps/gnu/java/beans/editors/NativeByteEditor.P \
! .deps/gnu/java/beans/editors/NativeDoubleEditor.P \
! .deps/gnu/java/beans/editors/NativeFloatEditor.P \
! .deps/gnu/java/beans/editors/NativeIntEditor.P \
! .deps/gnu/java/beans/editors/NativeLongEditor.P \
! .deps/gnu/java/beans/editors/NativeShortEditor.P \
! .deps/gnu/java/beans/editors/StringEditor.P \
! .deps/gnu/java/beans/info/ComponentBeanInfo.P \
! .deps/gnu/java/io/ASN1ParsingException.P \
! .deps/gnu/java/io/Base64InputStream.P \
! .deps/gnu/java/io/ClassLoaderObjectInputStream.P \
! .deps/gnu/java/io/NullOutputStream.P \
! .deps/gnu/java/io/ObjectIdentityWrapper.P \
! .deps/gnu/java/lang/ArrayHelper.P .deps/gnu/java/lang/CharData.P \
! .deps/gnu/java/lang/ClassHelper.P \
! .deps/gnu/java/lang/reflect/TypeSignature.P \
! .deps/gnu/java/locale/Calendar.P .deps/gnu/java/locale/Calendar_de.P \
! .deps/gnu/java/locale/Calendar_en.P .deps/gnu/java/locale/Calendar_nl.P \
! .deps/gnu/java/locale/LocaleInformation.P \
! .deps/gnu/java/locale/LocaleInformation_af_ZA.P \
! .deps/gnu/java/locale/LocaleInformation_ar_AE.P \
! .deps/gnu/java/locale/LocaleInformation_ar_BH.P \
! .deps/gnu/java/locale/LocaleInformation_ar_DZ.P \
! .deps/gnu/java/locale/LocaleInformation_ar_EG.P \
! .deps/gnu/java/locale/LocaleInformation_ar_IN.P \
! .deps/gnu/java/locale/LocaleInformation_ar_IQ.P \
! .deps/gnu/java/locale/LocaleInformation_ar_JO.P \
! .deps/gnu/java/locale/LocaleInformation_ar_KW.P \
! .deps/gnu/java/locale/LocaleInformation_ar_LB.P \
! .deps/gnu/java/locale/LocaleInformation_ar_LY.P \
! .deps/gnu/java/locale/LocaleInformation_ar_MA.P \
! .deps/gnu/java/locale/LocaleInformation_ar_OM.P \
! .deps/gnu/java/locale/LocaleInformation_ar_QA.P \
! .deps/gnu/java/locale/LocaleInformation_ar_SD.P \
! .deps/gnu/java/locale/LocaleInformation_ar_SY.P \
! .deps/gnu/java/locale/LocaleInformation_ar_TN.P \
! .deps/gnu/java/locale/LocaleInformation_ar_YE.P \
! .deps/gnu/java/locale/LocaleInformation_be_BY.P \
! .deps/gnu/java/locale/LocaleInformation_bn_IN.P \
! .deps/gnu/java/locale/LocaleInformation_br_FR.P \
! .deps/gnu/java/locale/LocaleInformation_bs_BA.P \
! .deps/gnu/java/locale/LocaleInformation_ca_ES.P \
! .deps/gnu/java/locale/LocaleInformation_cs_CZ.P \
! .deps/gnu/java/locale/LocaleInformation_cy_GB.P \
! .deps/gnu/java/locale/LocaleInformation_da_DK.P \
! .deps/gnu/java/locale/LocaleInformation_de.P \
! .deps/gnu/java/locale/LocaleInformation_de_AT.P \
! .deps/gnu/java/locale/LocaleInformation_de_BE.P \
! .deps/gnu/java/locale/LocaleInformation_de_CH.P \
! .deps/gnu/java/locale/LocaleInformation_de_DE.P \
! .deps/gnu/java/locale/LocaleInformation_de_LU.P \
! .deps/gnu/java/locale/LocaleInformation_el_GR.P \
! .deps/gnu/java/locale/LocaleInformation_en.P \
! .deps/gnu/java/locale/LocaleInformation_en_AU.P \
! .deps/gnu/java/locale/LocaleInformation_en_BW.P \
! .deps/gnu/java/locale/LocaleInformation_en_CA.P \
! .deps/gnu/java/locale/LocaleInformation_en_DK.P \
! .deps/gnu/java/locale/LocaleInformation_en_GB.P \
! .deps/gnu/java/locale/LocaleInformation_en_HK.P \
! .deps/gnu/java/locale/LocaleInformation_en_IE.P \
! .deps/gnu/java/locale/LocaleInformation_en_IN.P \
! .deps/gnu/java/locale/LocaleInformation_en_NZ.P \
! .deps/gnu/java/locale/LocaleInformation_en_PH.P \
! .deps/gnu/java/locale/LocaleInformation_en_SG.P \
! .deps/gnu/java/locale/LocaleInformation_en_US.P \
! .deps/gnu/java/locale/LocaleInformation_en_ZA.P \
! .deps/gnu/java/locale/LocaleInformation_en_ZW.P \
! .deps/gnu/java/locale/LocaleInformation_es_AR.P \
! .deps/gnu/java/locale/LocaleInformation_es_BO.P \
! .deps/gnu/java/locale/LocaleInformation_es_CL.P \
! .deps/gnu/java/locale/LocaleInformation_es_CO.P \
! .deps/gnu/java/locale/LocaleInformation_es_CR.P \
! .deps/gnu/java/locale/LocaleInformation_es_DO.P \
! .deps/gnu/java/locale/LocaleInformation_es_EC.P \
! .deps/gnu/java/locale/LocaleInformation_es_ES.P \
! .deps/gnu/java/locale/LocaleInformation_es_GT.P \
! .deps/gnu/java/locale/LocaleInformation_es_HN.P \
! .deps/gnu/java/locale/LocaleInformation_es_MX.P \
! .deps/gnu/java/locale/LocaleInformation_es_NI.P \
! .deps/gnu/java/locale/LocaleInformation_es_PA.P \
! .deps/gnu/java/locale/LocaleInformation_es_PE.P \
! .deps/gnu/java/locale/LocaleInformation_es_PR.P \
! .deps/gnu/java/locale/LocaleInformation_es_PY.P \
! .deps/gnu/java/locale/LocaleInformation_es_SV.P \
! .deps/gnu/java/locale/LocaleInformation_es_US.P \
! .deps/gnu/java/locale/LocaleInformation_es_UY.P \
! .deps/gnu/java/locale/LocaleInformation_es_VE.P \
! .deps/gnu/java/locale/LocaleInformation_et_EE.P \
! .deps/gnu/java/locale/LocaleInformation_eu_ES.P \
! .deps/gnu/java/locale/LocaleInformation_fa_IR.P \
! .deps/gnu/java/locale/LocaleInformation_fi_FI.P \
! .deps/gnu/java/locale/LocaleInformation_fo_FO.P \
! .deps/gnu/java/locale/LocaleInformation_fr_BE.P \
! .deps/gnu/java/locale/LocaleInformation_fr_CA.P \
! .deps/gnu/java/locale/LocaleInformation_fr_CH.P \
! .deps/gnu/java/locale/LocaleInformation_fr_FR.P \
! .deps/gnu/java/locale/LocaleInformation_fr_LU.P \
! .deps/gnu/java/locale/LocaleInformation_ga_IE.P \
! .deps/gnu/java/locale/LocaleInformation_gd_GB.P \
! .deps/gnu/java/locale/LocaleInformation_gl_ES.P \
! .deps/gnu/java/locale/LocaleInformation_gv_GB.P \
! .deps/gnu/java/locale/LocaleInformation_he_IL.P \
! .deps/gnu/java/locale/LocaleInformation_hi_IN.P \
! .deps/gnu/java/locale/LocaleInformation_hr_HR.P \
! .deps/gnu/java/locale/LocaleInformation_hu_HU.P \
! .deps/gnu/java/locale/LocaleInformation_id_ID.P \
! .deps/gnu/java/locale/LocaleInformation_it_CH.P \
! .deps/gnu/java/locale/LocaleInformation_it_IT.P \
! .deps/gnu/java/locale/LocaleInformation_iw_IL.P \
! .deps/gnu/java/locale/LocaleInformation_ja_JP.P \
! .deps/gnu/java/locale/LocaleInformation_ka_GE.P \
! .deps/gnu/java/locale/LocaleInformation_kl_GL.P \
! .deps/gnu/java/locale/LocaleInformation_ko_KR.P \
! .deps/gnu/java/locale/LocaleInformation_kw_GB.P \
! .deps/gnu/java/locale/LocaleInformation_lt_LT.P \
! .deps/gnu/java/locale/LocaleInformation_lv_LV.P \
! .deps/gnu/java/locale/LocaleInformation_mi_NZ.P \
! .deps/gnu/java/locale/LocaleInformation_mk_MK.P \
! .deps/gnu/java/locale/LocaleInformation_mr_IN.P \
! .deps/gnu/java/locale/LocaleInformation_mt_MT.P \
! .deps/gnu/java/locale/LocaleInformation_nl.P \
! .deps/gnu/java/locale/LocaleInformation_nl_BE.P \
! .deps/gnu/java/locale/LocaleInformation_nl_NL.P \
! .deps/gnu/java/locale/LocaleInformation_nn_NO.P \
! .deps/gnu/java/locale/LocaleInformation_no_NO.P \
! .deps/gnu/java/locale/LocaleInformation_oc_FR.P \
! .deps/gnu/java/locale/LocaleInformation_pl_PL.P \
! .deps/gnu/java/locale/LocaleInformation_pt_BR.P \
! .deps/gnu/java/locale/LocaleInformation_pt_PT.P \
! .deps/gnu/java/locale/LocaleInformation_ro_RO.P \
! .deps/gnu/java/locale/LocaleInformation_ru_RU.P \
! .deps/gnu/java/locale/LocaleInformation_ru_UA.P \
! .deps/gnu/java/locale/LocaleInformation_se_NO.P \
! .deps/gnu/java/locale/LocaleInformation_sk_SK.P \
! .deps/gnu/java/locale/LocaleInformation_sl_SI.P \
! .deps/gnu/java/locale/LocaleInformation_sq_AL.P \
! .deps/gnu/java/locale/LocaleInformation_sr_YU.P \
! .deps/gnu/java/locale/LocaleInformation_sv_FI.P \
! .deps/gnu/java/locale/LocaleInformation_sv_SE.P \
! .deps/gnu/java/locale/LocaleInformation_ta_IN.P \
! .deps/gnu/java/locale/LocaleInformation_te_IN.P \
! .deps/gnu/java/locale/LocaleInformation_tg_TJ.P \
! .deps/gnu/java/locale/LocaleInformation_tl_PH.P \
! .deps/gnu/java/locale/LocaleInformation_tr_TR.P \
! .deps/gnu/java/locale/LocaleInformation_uk_UA.P \
! .deps/gnu/java/locale/LocaleInformation_ur_PK.P \
! .deps/gnu/java/locale/LocaleInformation_uz_UZ.P \
! .deps/gnu/java/locale/LocaleInformation_vi_VN.P \
! .deps/gnu/java/locale/LocaleInformation_yi_US.P \
! .deps/gnu/java/locale/LocaleInformation_zh_CN.P \
! .deps/gnu/java/locale/LocaleInformation_zh_HK.P \
! .deps/gnu/java/locale/LocaleInformation_zh_SG.P \
! .deps/gnu/java/locale/LocaleInformation_zh_TW.P \
! .deps/gnu/java/math/MPN.P .deps/gnu/java/net/HeaderFieldHelper.P \
! .deps/gnu/java/net/PlainDatagramSocketImpl.P \
! .deps/gnu/java/net/PlainSocketImpl.P .deps/gnu/java/net/URLParseError.P \
! .deps/gnu/java/net/natPlainDatagramSocketImpl.P \
! .deps/gnu/java/net/natPlainSocketImpl.P \
! .deps/gnu/java/net/protocol/core/Connection.P \
! .deps/gnu/java/net/protocol/core/CoreInputStream.P \
! .deps/gnu/java/net/protocol/core/Handler.P \
! .deps/gnu/java/net/protocol/core/natCoreInputStream.P \
! .deps/gnu/java/net/protocol/file/Connection.P \
! .deps/gnu/java/net/protocol/file/Handler.P \
! .deps/gnu/java/net/protocol/gcjlib/Connection.P \
! .deps/gnu/java/net/protocol/gcjlib/Handler.P \
! .deps/gnu/java/net/protocol/http/Connection.P \
! .deps/gnu/java/net/protocol/http/Handler.P \
! .deps/gnu/java/net/protocol/jar/Connection.P \
! .deps/gnu/java/net/protocol/jar/Handler.P \
! .deps/gnu/java/nio/ChannelInputStream.P \
! .deps/gnu/java/nio/ChannelOutputStream.P \
! .deps/gnu/java/nio/DatagramChannelImpl.P \
! .deps/gnu/java/nio/DatagramChannelSelectionKey.P \
! .deps/gnu/java/nio/FileLockImpl.P \
! .deps/gnu/java/nio/InputStreamChannel.P \
! .deps/gnu/java/nio/NIOConstants.P \
! .deps/gnu/java/nio/NIODatagramSocket.P \
! .deps/gnu/java/nio/NIOServerSocket.P .deps/gnu/java/nio/NIOSocket.P \
! .deps/gnu/java/nio/OutputStreamChannel.P .deps/gnu/java/nio/PipeImpl.P \
! .deps/gnu/java/nio/SelectionKeyImpl.P .deps/gnu/java/nio/SelectorImpl.P \
! .deps/gnu/java/nio/SelectorProviderImpl.P \
! .deps/gnu/java/nio/ServerSocketChannelImpl.P \
! .deps/gnu/java/nio/ServerSocketChannelSelectionKey.P \
! .deps/gnu/java/nio/SocketChannelImpl.P \
! .deps/gnu/java/nio/SocketChannelSelectionKey.P \
! .deps/gnu/java/nio/charset/ISO_8859_1.P \
! .deps/gnu/java/nio/charset/Provider.P \
! .deps/gnu/java/nio/charset/US_ASCII.P \
! .deps/gnu/java/nio/charset/UTF_16.P \
! .deps/gnu/java/nio/charset/UTF_16BE.P \
! .deps/gnu/java/nio/charset/UTF_16Decoder.P \
! .deps/gnu/java/nio/charset/UTF_16Encoder.P \
! .deps/gnu/java/nio/charset/UTF_16LE.P \
! .deps/gnu/java/nio/charset/UTF_8.P .deps/gnu/java/nio/natFileLockImpl.P \
! .deps/gnu/java/nio/natNIOServerSocket.P \
! .deps/gnu/java/nio/natPipeImpl.P .deps/gnu/java/nio/natSelectorImpl.P \
! .deps/gnu/java/rmi/RMIMarshalledObjectInputStream.P \
! .deps/gnu/java/rmi/RMIMarshalledObjectOutputStream.P \
! .deps/gnu/java/rmi/dgc/DGCImpl.P .deps/gnu/java/rmi/dgc/DGCImpl_Skel.P \
! .deps/gnu/java/rmi/dgc/DGCImpl_Stub.P \
! .deps/gnu/java/rmi/registry/RegistryImpl.P \
! .deps/gnu/java/rmi/registry/RegistryImpl_Skel.P \
! .deps/gnu/java/rmi/registry/RegistryImpl_Stub.P \
! .deps/gnu/java/rmi/rmic/Compile_gcj.P \
! .deps/gnu/java/rmi/rmic/Compile_jikes.P \
! .deps/gnu/java/rmi/rmic/Compile_kjc.P \
! .deps/gnu/java/rmi/rmic/Compiler.P \
! .deps/gnu/java/rmi/rmic/CompilerProcess.P \
! .deps/gnu/java/rmi/rmic/RMIC.P .deps/gnu/java/rmi/rmic/RMICException.P \
! .deps/gnu/java/rmi/rmic/TabbedWriter.P \
! .deps/gnu/java/rmi/server/ConnectionRunnerPool.P \
! .deps/gnu/java/rmi/server/ProtocolConstants.P \
! .deps/gnu/java/rmi/server/RMIDefaultSocketFactory.P \
! .deps/gnu/java/rmi/server/RMIHashes.P \
! .deps/gnu/java/rmi/server/RMIObjectInputStream.P \
! .deps/gnu/java/rmi/server/RMIObjectOutputStream.P \
! .deps/gnu/java/rmi/server/RMIVoidValue.P \
! .deps/gnu/java/rmi/server/UnicastConnection.P \
! .deps/gnu/java/rmi/server/UnicastConnectionManager.P \
! .deps/gnu/java/rmi/server/UnicastRef.P \
! .deps/gnu/java/rmi/server/UnicastRemoteCall.P \
! .deps/gnu/java/rmi/server/UnicastRemoteStub.P \
! .deps/gnu/java/rmi/server/UnicastServer.P \
! .deps/gnu/java/rmi/server/UnicastServerRef.P \
! .deps/gnu/java/security/Engine.P .deps/gnu/java/security/OID.P \
! .deps/gnu/java/security/der/BitString.P \
! .deps/gnu/java/security/der/DER.P \
! .deps/gnu/java/security/der/DEREncodingException.P \
! .deps/gnu/java/security/der/DERReader.P \
! .deps/gnu/java/security/der/DERValue.P \
! .deps/gnu/java/security/der/DERWriter.P \
! .deps/gnu/java/security/provider/DSAKeyFactory.P \
! .deps/gnu/java/security/provider/DSAKeyPairGenerator.P \
! .deps/gnu/java/security/provider/DSAParameterGenerator.P \
! .deps/gnu/java/security/provider/DSAParameters.P \
! .deps/gnu/java/security/provider/DSASignature.P \
! .deps/gnu/java/security/provider/DefaultPolicy.P \
! .deps/gnu/java/security/provider/Gnu.P \
! .deps/gnu/java/security/provider/GnuDSAPrivateKey.P \
! .deps/gnu/java/security/provider/GnuDSAPublicKey.P \
! .deps/gnu/java/security/provider/MD5.P \
! .deps/gnu/java/security/provider/SHA.P \
! .deps/gnu/java/security/provider/SHA1PRNG.P \
! .deps/gnu/java/security/provider/X509CertificateFactory.P \
! .deps/gnu/java/security/util/Prime.P \
! .deps/gnu/java/security/x509/X500DistinguishedName.P \
! .deps/gnu/java/security/x509/X509CRL.P \
! .deps/gnu/java/security/x509/X509CRLEntry.P \
! .deps/gnu/java/security/x509/X509Certificate.P \
! .deps/gnu/java/text/BaseBreakIterator.P \
! .deps/gnu/java/text/CharacterBreakIterator.P \
! .deps/gnu/java/text/LineBreakIterator.P \
! .deps/gnu/java/text/SentenceBreakIterator.P \
! .deps/gnu/java/text/WordBreakIterator.P \
! .deps/gnu/java/util/DoubleEnumeration.P \
! .deps/gnu/java/util/EmptyEnumeration.P \
! .deps/gnu/java/util/prefs/FileBasedFactory.P \
! .deps/gnu/java/util/prefs/MemoryBasedFactory.P \
! .deps/gnu/java/util/prefs/MemoryBasedPreferences.P \
! .deps/gnu/java/util/prefs/NodeReader.P \
! .deps/gnu/java/util/prefs/NodeWriter.P \
! .deps/gnu/javax/rmi/CORBA/DelegateFactory.P \
! .deps/gnu/javax/rmi/CORBA/GetDelegateInstanceException.P \
! .deps/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.P \
! .deps/gnu/javax/rmi/CORBA/StubDelegateImpl.P \
! .deps/gnu/javax/rmi/CORBA/UtilDelegateImpl.P \
! .deps/gnu/javax/rmi/CORBA/ValueHandlerImpl.P \
! .deps/gnu/javax/rmi/PortableServer.P .deps/interpret.P \
! .deps/java/applet/Applet.P .deps/java/applet/AppletContext.P \
! .deps/java/applet/AppletStub.P .deps/java/applet/AudioClip.P \
! .deps/java/awt/AWTError.P .deps/java/awt/AWTEvent.P \
! .deps/java/awt/AWTEventMulticaster.P .deps/java/awt/AWTException.P \
! .deps/java/awt/AWTKeyStroke.P .deps/java/awt/AWTPermission.P \
! .deps/java/awt/ActiveEvent.P .deps/java/awt/Adjustable.P \
! .deps/java/awt/AlphaComposite.P .deps/java/awt/AttributeValue.P \
! .deps/java/awt/BasicStroke.P .deps/java/awt/BorderLayout.P \
! .deps/java/awt/BufferCapabilities.P .deps/java/awt/Button.P \
! .deps/java/awt/Canvas.P .deps/java/awt/CardLayout.P \
! .deps/java/awt/Checkbox.P .deps/java/awt/CheckboxGroup.P \
! .deps/java/awt/CheckboxMenuItem.P .deps/java/awt/Choice.P \
! .deps/java/awt/Color.P .deps/java/awt/ColorPaintContext.P \
! .deps/java/awt/Component.P .deps/java/awt/ComponentOrientation.P \
! .deps/java/awt/Composite.P .deps/java/awt/CompositeContext.P \
! .deps/java/awt/Container.P \
! .deps/java/awt/ContainerOrderFocusTraversalPolicy.P \
! .deps/java/awt/Cursor.P .deps/java/awt/DefaultFocusTraversalPolicy.P \
! .deps/java/awt/DefaultKeyboardFocusManager.P .deps/java/awt/Dialog.P \
! .deps/java/awt/Dimension.P .deps/java/awt/DisplayMode.P \
! .deps/java/awt/Event.P .deps/java/awt/EventDispatchThread.P \
! .deps/java/awt/EventQueue.P .deps/java/awt/FileDialog.P \
! .deps/java/awt/FlowLayout.P .deps/java/awt/FocusTraversalPolicy.P \
! .deps/java/awt/Font.P .deps/java/awt/FontFormatException.P \
! .deps/java/awt/FontMetrics.P .deps/java/awt/Frame.P \
! .deps/java/awt/GradientPaint.P .deps/java/awt/Graphics.P \
! .deps/java/awt/Graphics2D.P .deps/java/awt/GraphicsConfigTemplate.P \
! .deps/java/awt/GraphicsConfiguration.P .deps/java/awt/GraphicsDevice.P \
! .deps/java/awt/GraphicsEnvironment.P \
! .deps/java/awt/GridBagConstraints.P .deps/java/awt/GridBagLayout.P \
! .deps/java/awt/GridBagLayoutInfo.P .deps/java/awt/GridLayout.P \
! .deps/java/awt/HeadlessException.P \
! .deps/java/awt/IllegalComponentStateException.P .deps/java/awt/Image.P \
! .deps/java/awt/ImageCapabilities.P .deps/java/awt/Insets.P \
! .deps/java/awt/ItemSelectable.P .deps/java/awt/JobAttributes.P \
! .deps/java/awt/KeyEventDispatcher.P \
! .deps/java/awt/KeyEventPostProcessor.P \
! .deps/java/awt/KeyboardFocusManager.P .deps/java/awt/Label.P \
! .deps/java/awt/LayoutManager.P .deps/java/awt/LayoutManager2.P \
! .deps/java/awt/List.P .deps/java/awt/MediaTracker.P \
! .deps/java/awt/Menu.P .deps/java/awt/MenuBar.P \
! .deps/java/awt/MenuComponent.P .deps/java/awt/MenuContainer.P \
! .deps/java/awt/MenuItem.P .deps/java/awt/MenuShortcut.P \
! .deps/java/awt/PageAttributes.P .deps/java/awt/Paint.P \
! .deps/java/awt/PaintContext.P .deps/java/awt/Panel.P \
! .deps/java/awt/Point.P .deps/java/awt/Polygon.P \
! .deps/java/awt/PopupMenu.P .deps/java/awt/PrintGraphics.P \
! .deps/java/awt/PrintJob.P .deps/java/awt/Rectangle.P \
! .deps/java/awt/RenderingHints.P .deps/java/awt/Robot.P \
! .deps/java/awt/ScrollPane.P .deps/java/awt/ScrollPaneAdjustable.P \
! .deps/java/awt/Scrollbar.P .deps/java/awt/Shape.P \
! .deps/java/awt/Stroke.P .deps/java/awt/SystemColor.P \
! .deps/java/awt/TextArea.P .deps/java/awt/TextComponent.P \
! .deps/java/awt/TextField.P .deps/java/awt/TexturePaint.P \
! .deps/java/awt/Toolkit.P .deps/java/awt/Transparency.P \
! .deps/java/awt/Window.P .deps/java/awt/color/CMMException.P \
! .deps/java/awt/color/ColorSpace.P .deps/java/awt/color/ICC_ColorSpace.P \
! .deps/java/awt/color/ICC_Profile.P \
! .deps/java/awt/color/ICC_ProfileGray.P \
! .deps/java/awt/color/ICC_ProfileRGB.P \
! .deps/java/awt/color/ProfileDataException.P \
! .deps/java/awt/datatransfer/Clipboard.P \
! .deps/java/awt/datatransfer/ClipboardOwner.P \
! .deps/java/awt/datatransfer/DataFlavor.P \
! .deps/java/awt/datatransfer/FlavorMap.P \
! .deps/java/awt/datatransfer/FlavorTable.P \
! .deps/java/awt/datatransfer/MimeTypeParseException.P \
! .deps/java/awt/datatransfer/StringSelection.P \
! .deps/java/awt/datatransfer/SystemFlavorMap.P \
! .deps/java/awt/datatransfer/Transferable.P \
! .deps/java/awt/datatransfer/UnsupportedFlavorException.P \
! .deps/java/awt/dnd/Autoscroll.P .deps/java/awt/dnd/DnDConstants.P \
! .deps/java/awt/dnd/DnDEventMulticaster.P \
! .deps/java/awt/dnd/DragGestureEvent.P \
! .deps/java/awt/dnd/DragGestureListener.P \
! .deps/java/awt/dnd/DragGestureRecognizer.P \
! .deps/java/awt/dnd/DragSource.P .deps/java/awt/dnd/DragSourceAdapter.P \
! .deps/java/awt/dnd/DragSourceContext.P \
! .deps/java/awt/dnd/DragSourceDragEvent.P \
! .deps/java/awt/dnd/DragSourceDropEvent.P \
! .deps/java/awt/dnd/DragSourceEvent.P \
! .deps/java/awt/dnd/DragSourceListener.P \
! .deps/java/awt/dnd/DragSourceMotionListener.P \
! .deps/java/awt/dnd/DropTarget.P .deps/java/awt/dnd/DropTargetAdapter.P \
! .deps/java/awt/dnd/DropTargetContext.P \
! .deps/java/awt/dnd/DropTargetDragEvent.P \
! .deps/java/awt/dnd/DropTargetDropEvent.P \
! .deps/java/awt/dnd/DropTargetEvent.P \
! .deps/java/awt/dnd/DropTargetListener.P \
! .deps/java/awt/dnd/InvalidDnDOperationException.P \
! .deps/java/awt/dnd/MouseDragGestureRecognizer.P \
! .deps/java/awt/dnd/peer/DragSourceContextPeer.P \
! .deps/java/awt/dnd/peer/DropTargetContextPeer.P \
! .deps/java/awt/dnd/peer/DropTargetPeer.P \
! .deps/java/awt/event/AWTEventListener.P \
! .deps/java/awt/event/AWTEventListenerProxy.P \
! .deps/java/awt/event/ActionEvent.P \
! .deps/java/awt/event/ActionListener.P \
! .deps/java/awt/event/AdjustmentEvent.P \
! .deps/java/awt/event/AdjustmentListener.P \
! .deps/java/awt/event/ComponentAdapter.P \
! .deps/java/awt/event/ComponentEvent.P \
! .deps/java/awt/event/ComponentListener.P \
! .deps/java/awt/event/ContainerAdapter.P \
! .deps/java/awt/event/ContainerEvent.P \
! .deps/java/awt/event/ContainerListener.P \
! .deps/java/awt/event/FocusAdapter.P .deps/java/awt/event/FocusEvent.P \
! .deps/java/awt/event/FocusListener.P \
! .deps/java/awt/event/HierarchyBoundsAdapter.P \
! .deps/java/awt/event/HierarchyBoundsListener.P \
! .deps/java/awt/event/HierarchyEvent.P \
! .deps/java/awt/event/HierarchyListener.P \
! .deps/java/awt/event/InputEvent.P \
! .deps/java/awt/event/InputMethodEvent.P \
! .deps/java/awt/event/InputMethodListener.P \
! .deps/java/awt/event/InvocationEvent.P .deps/java/awt/event/ItemEvent.P \
! .deps/java/awt/event/ItemListener.P .deps/java/awt/event/KeyAdapter.P \
! .deps/java/awt/event/KeyEvent.P .deps/java/awt/event/KeyListener.P \
! .deps/java/awt/event/MouseAdapter.P .deps/java/awt/event/MouseEvent.P \
! .deps/java/awt/event/MouseListener.P \
! .deps/java/awt/event/MouseMotionAdapter.P \
! .deps/java/awt/event/MouseMotionListener.P \
! .deps/java/awt/event/MouseWheelEvent.P \
! .deps/java/awt/event/MouseWheelListener.P \
! .deps/java/awt/event/PaintEvent.P .deps/java/awt/event/TextEvent.P \
! .deps/java/awt/event/TextListener.P \
! .deps/java/awt/event/WindowAdapter.P .deps/java/awt/event/WindowEvent.P \
! .deps/java/awt/event/WindowFocusListener.P \
! .deps/java/awt/event/WindowListener.P \
! .deps/java/awt/event/WindowStateListener.P \
! .deps/java/awt/font/FontRenderContext.P \
! .deps/java/awt/font/GlyphJustificationInfo.P \
! .deps/java/awt/font/GlyphMetrics.P .deps/java/awt/font/GlyphVector.P \
! .deps/java/awt/font/GraphicAttribute.P \
! .deps/java/awt/font/ImageGraphicAttribute.P \
! .deps/java/awt/font/LineBreakMeasurer.P \
! .deps/java/awt/font/LineMetrics.P .deps/java/awt/font/MultipleMaster.P \
! .deps/java/awt/font/NumericShaper.P .deps/java/awt/font/OpenType.P \
! .deps/java/awt/font/ShapeGraphicAttribute.P \
! .deps/java/awt/font/TextAttribute.P .deps/java/awt/font/TextHitInfo.P \
! .deps/java/awt/font/TextLayout.P .deps/java/awt/font/TextMeasurer.P \
! .deps/java/awt/font/TransformAttribute.P \
! .deps/java/awt/geom/AffineTransform.P .deps/java/awt/geom/Arc2D.P \
! .deps/java/awt/geom/Area.P .deps/java/awt/geom/CubicCurve2D.P \
! .deps/java/awt/geom/Dimension2D.P .deps/java/awt/geom/Ellipse2D.P \
! .deps/java/awt/geom/FlatteningPathIterator.P \
! .deps/java/awt/geom/GeneralPath.P \
! .deps/java/awt/geom/IllegalPathStateException.P \
! .deps/java/awt/geom/Line2D.P \
! .deps/java/awt/geom/NoninvertibleTransformException.P \
! .deps/java/awt/geom/PathIterator.P .deps/java/awt/geom/Point2D.P \
! .deps/java/awt/geom/QuadCurve2D.P .deps/java/awt/geom/Rectangle2D.P \
! .deps/java/awt/geom/RectangularShape.P \
! .deps/java/awt/geom/RoundRectangle2D.P .deps/java/awt/im/InputContext.P \
! .deps/java/awt/im/InputMethodHighlight.P \
! .deps/java/awt/im/InputMethodRequests.P .deps/java/awt/im/InputSubset.P \
! .deps/java/awt/im/spi/InputMethod.P \
! .deps/java/awt/im/spi/InputMethodContext.P \
! .deps/java/awt/im/spi/InputMethodDescriptor.P \
! .deps/java/awt/image/AreaAveragingScaleFilter.P \
! .deps/java/awt/image/BufferStrategy.P \
! .deps/java/awt/image/BufferedImage.P \
! .deps/java/awt/image/BufferedImageOp.P \
! .deps/java/awt/image/ColorModel.P \
! .deps/java/awt/image/ComponentColorModel.P \
! .deps/java/awt/image/ComponentSampleModel.P \
! .deps/java/awt/image/CropImageFilter.P \
! .deps/java/awt/image/DataBuffer.P .deps/java/awt/image/DataBufferByte.P \
! .deps/java/awt/image/DataBufferInt.P \
! .deps/java/awt/image/DataBufferUShort.P \
! .deps/java/awt/image/DirectColorModel.P \
! .deps/java/awt/image/FilteredImageSource.P \
! .deps/java/awt/image/ImageConsumer.P .deps/java/awt/image/ImageFilter.P \
! .deps/java/awt/image/ImageObserver.P \
! .deps/java/awt/image/ImageProducer.P \
! .deps/java/awt/image/ImagingOpException.P \
! .deps/java/awt/image/IndexColorModel.P \
! .deps/java/awt/image/MemoryImageSource.P \
! .deps/java/awt/image/PackedColorModel.P \
! .deps/java/awt/image/PixelGrabber.P \
! .deps/java/awt/image/RGBImageFilter.P .deps/java/awt/image/Raster.P \
! .deps/java/awt/image/RasterFormatException.P \
! .deps/java/awt/image/RasterOp.P .deps/java/awt/image/RenderedImage.P \
! .deps/java/awt/image/ReplicateScaleFilter.P \
! .deps/java/awt/image/SampleModel.P \
! .deps/java/awt/image/SinglePixelPackedSampleModel.P \
! .deps/java/awt/image/TileObserver.P \
! .deps/java/awt/image/VolatileImage.P \
! .deps/java/awt/image/WritableRaster.P \
! .deps/java/awt/image/WritableRenderedImage.P \
! .deps/java/awt/image/renderable/ContextualRenderedImageFactory.P \
! .deps/java/awt/image/renderable/ParameterBlock.P \
! .deps/java/awt/image/renderable/RenderContext.P \
! .deps/java/awt/image/renderable/RenderableImage.P \
! .deps/java/awt/image/renderable/RenderableImageOp.P \
! .deps/java/awt/image/renderable/RenderableImageProducer.P \
! .deps/java/awt/image/renderable/RenderedImageFactory.P \
! .deps/java/awt/peer/ButtonPeer.P .deps/java/awt/peer/CanvasPeer.P \
! .deps/java/awt/peer/CheckboxMenuItemPeer.P \
! .deps/java/awt/peer/CheckboxPeer.P .deps/java/awt/peer/ChoicePeer.P \
! .deps/java/awt/peer/ComponentPeer.P .deps/java/awt/peer/ContainerPeer.P \
! .deps/java/awt/peer/DialogPeer.P .deps/java/awt/peer/FileDialogPeer.P \
! .deps/java/awt/peer/FontPeer.P .deps/java/awt/peer/FramePeer.P \
! .deps/java/awt/peer/LabelPeer.P .deps/java/awt/peer/LightweightPeer.P \
! .deps/java/awt/peer/ListPeer.P .deps/java/awt/peer/MenuBarPeer.P \
! .deps/java/awt/peer/MenuComponentPeer.P \
! .deps/java/awt/peer/MenuItemPeer.P .deps/java/awt/peer/MenuPeer.P \
! .deps/java/awt/peer/PanelPeer.P .deps/java/awt/peer/PopupMenuPeer.P \
! .deps/java/awt/peer/RobotPeer.P .deps/java/awt/peer/ScrollPanePeer.P \
! .deps/java/awt/peer/ScrollbarPeer.P .deps/java/awt/peer/TextAreaPeer.P \
! .deps/java/awt/peer/TextComponentPeer.P \
! .deps/java/awt/peer/TextFieldPeer.P .deps/java/awt/peer/WindowPeer.P \
! .deps/java/awt/print/Book.P .deps/java/awt/print/PageFormat.P \
! .deps/java/awt/print/Pageable.P .deps/java/awt/print/Paper.P \
! .deps/java/awt/print/Printable.P \
! .deps/java/awt/print/PrinterAbortException.P \
! .deps/java/awt/print/PrinterException.P \
! .deps/java/awt/print/PrinterGraphics.P \
! .deps/java/awt/print/PrinterIOException.P \
! .deps/java/awt/print/PrinterJob.P .deps/java/beans/AppletInitializer.P \
! .deps/java/beans/BeanDescriptor.P .deps/java/beans/BeanInfo.P \
! .deps/java/beans/Beans.P .deps/java/beans/Customizer.P \
! .deps/java/beans/DesignMode.P .deps/java/beans/EventSetDescriptor.P \
! .deps/java/beans/ExceptionListener.P \
! .deps/java/beans/FeatureDescriptor.P \
! .deps/java/beans/IndexedPropertyDescriptor.P \
! .deps/java/beans/IntrospectionException.P \
! .deps/java/beans/Introspector.P .deps/java/beans/MethodDescriptor.P \
! .deps/java/beans/ParameterDescriptor.P \
! .deps/java/beans/PropertyChangeEvent.P \
! .deps/java/beans/PropertyChangeListener.P \
! .deps/java/beans/PropertyChangeListenerProxy.P \
! .deps/java/beans/PropertyChangeSupport.P \
! .deps/java/beans/PropertyDescriptor.P .deps/java/beans/PropertyEditor.P \
! .deps/java/beans/PropertyEditorManager.P \
! .deps/java/beans/PropertyEditorSupport.P \
! .deps/java/beans/PropertyVetoException.P \
! .deps/java/beans/SimpleBeanInfo.P \
! .deps/java/beans/VetoableChangeListener.P \
! .deps/java/beans/VetoableChangeListenerProxy.P \
! .deps/java/beans/VetoableChangeSupport.P .deps/java/beans/Visibility.P \
! .deps/java/beans/beancontext/BeanContext.P \
! .deps/java/beans/beancontext/BeanContextChild.P \
! .deps/java/beans/beancontext/BeanContextChildComponentProxy.P \
! .deps/java/beans/beancontext/BeanContextChildSupport.P \
! .deps/java/beans/beancontext/BeanContextContainerProxy.P \
! .deps/java/beans/beancontext/BeanContextEvent.P \
! .deps/java/beans/beancontext/BeanContextMembershipEvent.P \
! .deps/java/beans/beancontext/BeanContextMembershipListener.P \
! .deps/java/beans/beancontext/BeanContextProxy.P \
! .deps/java/beans/beancontext/BeanContextServiceAvailableEvent.P \
! .deps/java/beans/beancontext/BeanContextServiceProvider.P \
! .deps/java/beans/beancontext/BeanContextServiceProviderBeanInfo.P \
! .deps/java/beans/beancontext/BeanContextServiceRevokedEvent.P \
! .deps/java/beans/beancontext/BeanContextServiceRevokedListener.P \
! .deps/java/beans/beancontext/BeanContextServices.P \
! .deps/java/beans/beancontext/BeanContextServicesListener.P \
! .deps/java/beans/beancontext/BeanContextServicesSupport.P \
! .deps/java/beans/beancontext/BeanContextSupport.P \
! .deps/java/io/BufferedInputStream.P \
! .deps/java/io/BufferedOutputStream.P .deps/java/io/BufferedReader.P \
! .deps/java/io/BufferedWriter.P .deps/java/io/ByteArrayInputStream.P \
! .deps/java/io/ByteArrayOutputStream.P .deps/java/io/CharArrayReader.P \
! .deps/java/io/CharArrayWriter.P .deps/java/io/CharConversionException.P \
! .deps/java/io/DataInput.P .deps/java/io/DataInputStream.P \
! .deps/java/io/DataOutput.P .deps/java/io/DataOutputStream.P \
! .deps/java/io/EOFException.P .deps/java/io/Externalizable.P \
! .deps/java/io/File.P .deps/java/io/FileDescriptor.P \
! .deps/java/io/FileFilter.P .deps/java/io/FileInputStream.P \
! .deps/java/io/FileNotFoundException.P .deps/java/io/FileOutputStream.P \
! .deps/java/io/FilePermission.P .deps/java/io/FileReader.P \
! .deps/java/io/FileWriter.P .deps/java/io/FilenameFilter.P \
! .deps/java/io/FilterInputStream.P .deps/java/io/FilterOutputStream.P \
! .deps/java/io/FilterReader.P .deps/java/io/FilterWriter.P \
! .deps/java/io/IOException.P .deps/java/io/InputStream.P \
! .deps/java/io/InputStreamReader.P \
! .deps/java/io/InterruptedIOException.P \
! .deps/java/io/InvalidClassException.P \
! .deps/java/io/InvalidObjectException.P \
! .deps/java/io/LineNumberInputStream.P .deps/java/io/LineNumberReader.P \
! .deps/java/io/NotActiveException.P \
! .deps/java/io/NotSerializableException.P .deps/java/io/ObjectInput.P \
! .deps/java/io/ObjectInputStream.P .deps/java/io/ObjectInputValidation.P \
! .deps/java/io/ObjectOutput.P .deps/java/io/ObjectOutputStream.P \
! .deps/java/io/ObjectStreamClass.P .deps/java/io/ObjectStreamConstants.P \
! .deps/java/io/ObjectStreamException.P .deps/java/io/ObjectStreamField.P \
! .deps/java/io/OptionalDataException.P .deps/java/io/OutputStream.P \
! .deps/java/io/OutputStreamWriter.P .deps/java/io/PipedInputStream.P \
! .deps/java/io/PipedOutputStream.P .deps/java/io/PipedReader.P \
! .deps/java/io/PipedWriter.P .deps/java/io/PrintStream.P \
! .deps/java/io/PrintWriter.P .deps/java/io/PushbackInputStream.P \
! .deps/java/io/PushbackReader.P .deps/java/io/RandomAccessFile.P \
! .deps/java/io/Reader.P .deps/java/io/SequenceInputStream.P \
! .deps/java/io/Serializable.P .deps/java/io/SerializablePermission.P \
! .deps/java/io/StreamCorruptedException.P \
! .deps/java/io/StreamTokenizer.P .deps/java/io/StringBufferInputStream.P \
! .deps/java/io/StringReader.P .deps/java/io/StringWriter.P \
! .deps/java/io/SyncFailedException.P \
! .deps/java/io/UTFDataFormatException.P \
! .deps/java/io/UnsupportedEncodingException.P \
! .deps/java/io/VMObjectStreamClass.P \
! .deps/java/io/WriteAbortedException.P .deps/java/io/Writer.P \
! .deps/java/io/natFile.P .deps/java/io/natFileDescriptor.P \
! .deps/java/io/natObjectInputStream.P \
! .deps/java/io/natVMObjectStreamClass.P \
! .deps/java/lang/AbstractMethodError.P \
! .deps/java/lang/ArithmeticException.P \
! .deps/java/lang/ArrayIndexOutOfBoundsException.P \
! .deps/java/lang/ArrayStoreException.P .deps/java/lang/AssertionError.P \
! .deps/java/lang/Boolean.P .deps/java/lang/Byte.P \
! .deps/java/lang/CharSequence.P .deps/java/lang/Character.P \
! .deps/java/lang/Class.P .deps/java/lang/ClassCastException.P \
! .deps/java/lang/ClassCircularityError.P \
! .deps/java/lang/ClassFormatError.P .deps/java/lang/ClassLoader.P \
! .deps/java/lang/ClassNotFoundException.P \
! .deps/java/lang/CloneNotSupportedException.P \
! .deps/java/lang/Cloneable.P .deps/java/lang/Comparable.P \
! .deps/java/lang/Compiler.P .deps/java/lang/ConcreteProcess.P \
! .deps/java/lang/Double.P .deps/java/lang/Error.P \
! .deps/java/lang/Exception.P \
! .deps/java/lang/ExceptionInInitializerError.P .deps/java/lang/Float.P \
! .deps/java/lang/IllegalAccessError.P \
! .deps/java/lang/IllegalAccessException.P \
! .deps/java/lang/IllegalArgumentException.P \
! .deps/java/lang/IllegalMonitorStateException.P \
! .deps/java/lang/IllegalStateException.P \
! .deps/java/lang/IllegalThreadStateException.P \
! .deps/java/lang/IncompatibleClassChangeError.P \
! .deps/java/lang/IndexOutOfBoundsException.P \
! .deps/java/lang/InheritableThreadLocal.P \
! .deps/java/lang/InstantiationError.P \
! .deps/java/lang/InstantiationException.P .deps/java/lang/Integer.P \
! .deps/java/lang/InternalError.P .deps/java/lang/InterruptedException.P \
! .deps/java/lang/LinkageError.P .deps/java/lang/Long.P \
! .deps/java/lang/Math.P .deps/java/lang/NegativeArraySizeException.P \
! .deps/java/lang/NoClassDefFoundError.P \
! .deps/java/lang/NoSuchFieldError.P \
! .deps/java/lang/NoSuchFieldException.P \
! .deps/java/lang/NoSuchMethodError.P \
! .deps/java/lang/NoSuchMethodException.P \
! .deps/java/lang/NullPointerException.P .deps/java/lang/Number.P \
! .deps/java/lang/NumberFormatException.P .deps/java/lang/Object.P \
! .deps/java/lang/OutOfMemoryError.P .deps/java/lang/Package.P \
! .deps/java/lang/Process.P .deps/java/lang/Runnable.P \
! .deps/java/lang/Runtime.P .deps/java/lang/RuntimeException.P \
! .deps/java/lang/RuntimePermission.P .deps/java/lang/SecurityException.P \
! .deps/java/lang/SecurityManager.P .deps/java/lang/Short.P \
! .deps/java/lang/StackOverflowError.P \
! .deps/java/lang/StackTraceElement.P .deps/java/lang/StrictMath.P \
! .deps/java/lang/String.P .deps/java/lang/StringBuffer.P \
! .deps/java/lang/StringIndexOutOfBoundsException.P \
! .deps/java/lang/System.P .deps/java/lang/Thread.P \
! .deps/java/lang/ThreadDeath.P .deps/java/lang/ThreadGroup.P \
! .deps/java/lang/ThreadLocal.P .deps/java/lang/Throwable.P \
! .deps/java/lang/UnknownError.P .deps/java/lang/UnsatisfiedLinkError.P \
! .deps/java/lang/UnsupportedClassVersionError.P \
! .deps/java/lang/UnsupportedOperationException.P \
! .deps/java/lang/VMClassLoader.P .deps/java/lang/VMSecurityManager.P \
! .deps/java/lang/VMThrowable.P .deps/java/lang/VerifyError.P \
! .deps/java/lang/VirtualMachineError.P .deps/java/lang/Void.P \
! .deps/java/lang/dtoa.P .deps/java/lang/e_acos.P \
! .deps/java/lang/e_asin.P .deps/java/lang/e_atan2.P \
! .deps/java/lang/e_exp.P .deps/java/lang/e_fmod.P \
! .deps/java/lang/e_log.P .deps/java/lang/e_pow.P \
! .deps/java/lang/e_rem_pio2.P .deps/java/lang/e_remainder.P \
! .deps/java/lang/e_scalb.P .deps/java/lang/e_sqrt.P \
! .deps/java/lang/k_cos.P .deps/java/lang/k_rem_pio2.P \
! .deps/java/lang/k_sin.P .deps/java/lang/k_tan.P .deps/java/lang/mprec.P \
! .deps/java/lang/natCharacter.P .deps/java/lang/natClass.P \
! .deps/java/lang/natClassLoader.P .deps/java/lang/natConcreteProcess.P \
! .deps/java/lang/natDouble.P .deps/java/lang/natFloat.P \
! .deps/java/lang/natMath.P .deps/java/lang/natObject.P \
! .deps/java/lang/natRuntime.P .deps/java/lang/natString.P \
! .deps/java/lang/natStringBuffer.P .deps/java/lang/natSystem.P \
! .deps/java/lang/natThread.P .deps/java/lang/natVMSecurityManager.P \
! .deps/java/lang/ref/PhantomReference.P .deps/java/lang/ref/Reference.P \
! .deps/java/lang/ref/ReferenceQueue.P \
! .deps/java/lang/ref/SoftReference.P .deps/java/lang/ref/WeakReference.P \
! .deps/java/lang/ref/natReference.P \
! .deps/java/lang/reflect/AccessibleObject.P \
! .deps/java/lang/reflect/Array.P .deps/java/lang/reflect/Constructor.P \
! .deps/java/lang/reflect/Field.P \
! .deps/java/lang/reflect/InvocationHandler.P \
! .deps/java/lang/reflect/InvocationTargetException.P \
! .deps/java/lang/reflect/Member.P .deps/java/lang/reflect/Method.P \
! .deps/java/lang/reflect/Modifier.P .deps/java/lang/reflect/Proxy.P \
! .deps/java/lang/reflect/ReflectPermission.P \
! .deps/java/lang/reflect/UndeclaredThrowableException.P \
! .deps/java/lang/reflect/natArray.P \
! .deps/java/lang/reflect/natConstructor.P \
! .deps/java/lang/reflect/natField.P .deps/java/lang/reflect/natMethod.P \
! .deps/java/lang/reflect/natProxy.P .deps/java/lang/s_atan.P \
! .deps/java/lang/s_ceil.P .deps/java/lang/s_copysign.P \
! .deps/java/lang/s_cos.P .deps/java/lang/s_fabs.P \
! .deps/java/lang/s_floor.P .deps/java/lang/s_rint.P \
! .deps/java/lang/s_scalbn.P .deps/java/lang/s_sin.P \
! .deps/java/lang/s_tan.P .deps/java/lang/sf_fabs.P \
! .deps/java/lang/sf_rint.P .deps/java/lang/strtod.P \
! .deps/java/lang/w_acos.P .deps/java/lang/w_asin.P \
! .deps/java/lang/w_atan2.P .deps/java/lang/w_exp.P \
! .deps/java/lang/w_fmod.P .deps/java/lang/w_log.P \
! .deps/java/lang/w_pow.P .deps/java/lang/w_remainder.P \
! .deps/java/lang/w_sqrt.P .deps/java/math/BigDecimal.P \
! .deps/java/math/BigInteger.P .deps/java/net/Authenticator.P \
! .deps/java/net/BindException.P .deps/java/net/ConnectException.P \
! .deps/java/net/ContentHandler.P .deps/java/net/ContentHandlerFactory.P \
! .deps/java/net/DatagramPacket.P .deps/java/net/DatagramSocket.P \
! .deps/java/net/DatagramSocketImpl.P \
! .deps/java/net/DatagramSocketImplFactory.P .deps/java/net/FileNameMap.P \
! .deps/java/net/HttpURLConnection.P .deps/java/net/Inet4Address.P \
! .deps/java/net/Inet6Address.P .deps/java/net/InetAddress.P \
! .deps/java/net/InetSocketAddress.P .deps/java/net/JarURLConnection.P \
! .deps/java/net/MalformedURLException.P .deps/java/net/MulticastSocket.P \
! .deps/java/net/NetPermission.P .deps/java/net/NetworkInterface.P \
! .deps/java/net/NoRouteToHostException.P \
! .deps/java/net/PasswordAuthentication.P \
! .deps/java/net/PortUnreachableException.P \
! .deps/java/net/ProtocolException.P .deps/java/net/ServerSocket.P \
! .deps/java/net/Socket.P .deps/java/net/SocketAddress.P \
! .deps/java/net/SocketException.P .deps/java/net/SocketImpl.P \
! .deps/java/net/SocketImplFactory.P .deps/java/net/SocketOptions.P \
! .deps/java/net/SocketPermission.P \
! .deps/java/net/SocketTimeoutException.P .deps/java/net/URI.P \
! .deps/java/net/URISyntaxException.P .deps/java/net/URL.P \
! .deps/java/net/URLClassLoader.P .deps/java/net/URLConnection.P \
! .deps/java/net/URLDecoder.P .deps/java/net/URLEncoder.P \
! .deps/java/net/URLStreamHandler.P \
! .deps/java/net/URLStreamHandlerFactory.P \
! .deps/java/net/UnknownHostException.P \
! .deps/java/net/UnknownServiceException.P \
! .deps/java/net/natInetAddress.P .deps/java/net/natNetworkInterface.P \
! .deps/java/nio/Buffer.P .deps/java/nio/BufferOverflowException.P \
! .deps/java/nio/BufferUnderflowException.P .deps/java/nio/ByteBuffer.P \
! .deps/java/nio/ByteBufferHelper.P .deps/java/nio/ByteBufferImpl.P \
! .deps/java/nio/ByteOrder.P .deps/java/nio/CharBuffer.P \
! .deps/java/nio/CharBufferImpl.P .deps/java/nio/CharViewBufferImpl.P \
! .deps/java/nio/DirectByteBufferImpl.P .deps/java/nio/DoubleBuffer.P \
! .deps/java/nio/DoubleBufferImpl.P .deps/java/nio/DoubleViewBufferImpl.P \
! .deps/java/nio/FloatBuffer.P .deps/java/nio/FloatBufferImpl.P \
! .deps/java/nio/FloatViewBufferImpl.P .deps/java/nio/IntBuffer.P \
! .deps/java/nio/IntBufferImpl.P .deps/java/nio/IntViewBufferImpl.P \
! .deps/java/nio/InvalidMarkException.P .deps/java/nio/LongBuffer.P \
! .deps/java/nio/LongBufferImpl.P .deps/java/nio/LongViewBufferImpl.P \
! .deps/java/nio/MappedByteBuffer.P .deps/java/nio/MappedByteBufferImpl.P \
! .deps/java/nio/ReadOnlyBufferException.P .deps/java/nio/ShortBuffer.P \
! .deps/java/nio/ShortBufferImpl.P .deps/java/nio/ShortViewBufferImpl.P \
! .deps/java/nio/channels/AlreadyConnectedException.P \
! .deps/java/nio/channels/AsynchronousCloseException.P \
! .deps/java/nio/channels/ByteChannel.P \
! .deps/java/nio/channels/CancelledKeyException.P \
! .deps/java/nio/channels/Channel.P .deps/java/nio/channels/Channels.P \
! .deps/java/nio/channels/ClosedByInterruptException.P \
! .deps/java/nio/channels/ClosedChannelException.P \
! .deps/java/nio/channels/ClosedSelectorException.P \
! .deps/java/nio/channels/ConnectionPendingException.P \
! .deps/java/nio/channels/DatagramChannel.P \
! .deps/java/nio/channels/FileChannel.P \
! .deps/java/nio/channels/FileChannelImpl.P \
! .deps/java/nio/channels/FileLock.P \
! .deps/java/nio/channels/FileLockInterruptionException.P \
! .deps/java/nio/channels/GatheringByteChannel.P \
! .deps/java/nio/channels/IllegalBlockingModeException.P \
! .deps/java/nio/channels/IllegalSelectorException.P \
! .deps/java/nio/channels/InterruptibleChannel.P \
! .deps/java/nio/channels/NoConnectionPendingException.P \
! .deps/java/nio/channels/NonReadableChannelException.P \
! .deps/java/nio/channels/NonWritableChannelException.P \
! .deps/java/nio/channels/NotYetBoundException.P \
! .deps/java/nio/channels/NotYetConnectedException.P \
! .deps/java/nio/channels/OverlappingFileLockException.P \
! .deps/java/nio/channels/Pipe.P \
! .deps/java/nio/channels/ReadableByteChannel.P \
! .deps/java/nio/channels/ScatteringByteChannel.P \
! .deps/java/nio/channels/SelectableChannel.P \
! .deps/java/nio/channels/SelectionKey.P \
! .deps/java/nio/channels/Selector.P \
! .deps/java/nio/channels/ServerSocketChannel.P \
! .deps/java/nio/channels/SocketChannel.P \
! .deps/java/nio/channels/UnresolvedAddressException.P \
! .deps/java/nio/channels/UnsupportedAddressTypeException.P \
! .deps/java/nio/channels/WritableByteChannel.P \
! .deps/java/nio/channels/natFileChannelImpl.P \
! .deps/java/nio/channels/spi/AbstractInterruptibleChannel.P \
! .deps/java/nio/channels/spi/AbstractSelectableChannel.P \
! .deps/java/nio/channels/spi/AbstractSelectionKey.P \
! .deps/java/nio/channels/spi/AbstractSelector.P \
! .deps/java/nio/channels/spi/SelectorProvider.P \
! .deps/java/nio/charset/CharacterCodingException.P \
! .deps/java/nio/charset/Charset.P \
! .deps/java/nio/charset/CharsetDecoder.P \
! .deps/java/nio/charset/CharsetEncoder.P \
! .deps/java/nio/charset/CoderMalfunctionError.P \
! .deps/java/nio/charset/CoderResult.P \
! .deps/java/nio/charset/CodingErrorAction.P \
! .deps/java/nio/charset/IllegalCharsetNameException.P \
! .deps/java/nio/charset/MalformedInputException.P \
! .deps/java/nio/charset/UnmappableCharacterException.P \
! .deps/java/nio/charset/UnsupportedCharsetException.P \
! .deps/java/nio/charset/spi/CharsetProvider.P \
! .deps/java/nio/natDirectByteBufferImpl.P \
! .deps/java/rmi/AccessException.P .deps/java/rmi/AlreadyBoundException.P \
! .deps/java/rmi/ConnectException.P .deps/java/rmi/ConnectIOException.P \
! .deps/java/rmi/MarshalException.P .deps/java/rmi/MarshalledObject.P \
! .deps/java/rmi/Naming.P .deps/java/rmi/NoSuchObjectException.P \
! .deps/java/rmi/NotBoundException.P \
! .deps/java/rmi/RMISecurityException.P \
! .deps/java/rmi/RMISecurityManager.P .deps/java/rmi/Remote.P \
! .deps/java/rmi/RemoteException.P .deps/java/rmi/ServerError.P \
! .deps/java/rmi/ServerException.P \
! .deps/java/rmi/ServerRuntimeException.P \
! .deps/java/rmi/StubNotFoundException.P \
! .deps/java/rmi/UnexpectedException.P \
! .deps/java/rmi/UnknownHostException.P \
! .deps/java/rmi/UnmarshalException.P \
! .deps/java/rmi/activation/Activatable.P \
! .deps/java/rmi/activation/ActivateFailedException.P \
! .deps/java/rmi/activation/ActivationDesc.P \
! .deps/java/rmi/activation/ActivationException.P \
! .deps/java/rmi/activation/ActivationGroup.P \
! .deps/java/rmi/activation/ActivationGroupDesc.P \
! .deps/java/rmi/activation/ActivationGroupID.P \
! .deps/java/rmi/activation/ActivationID.P \
! .deps/java/rmi/activation/ActivationInstantiator.P \
! .deps/java/rmi/activation/ActivationMonitor.P \
! .deps/java/rmi/activation/ActivationSystem.P \
! .deps/java/rmi/activation/Activator.P \
! .deps/java/rmi/activation/UnknownGroupException.P \
! .deps/java/rmi/activation/UnknownObjectException.P \
! .deps/java/rmi/dgc/DGC.P .deps/java/rmi/dgc/Lease.P \
! .deps/java/rmi/dgc/VMID.P .deps/java/rmi/registry/LocateRegistry.P \
! .deps/java/rmi/registry/Registry.P \
! .deps/java/rmi/registry/RegistryHandler.P \
! .deps/java/rmi/server/ExportException.P \
! .deps/java/rmi/server/LoaderHandler.P .deps/java/rmi/server/LogStream.P \
! .deps/java/rmi/server/ObjID.P .deps/java/rmi/server/Operation.P \
! .deps/java/rmi/server/RMIClassLoader.P \
! .deps/java/rmi/server/RMIClassLoaderSpi.P \
! .deps/java/rmi/server/RMIClientSocketFactory.P \
! .deps/java/rmi/server/RMIFailureHandler.P \
! .deps/java/rmi/server/RMIServerSocketFactory.P \
! .deps/java/rmi/server/RMISocketFactory.P \
! .deps/java/rmi/server/RemoteCall.P .deps/java/rmi/server/RemoteObject.P \
! .deps/java/rmi/server/RemoteRef.P .deps/java/rmi/server/RemoteServer.P \
! .deps/java/rmi/server/RemoteStub.P \
! .deps/java/rmi/server/ServerCloneException.P \
! .deps/java/rmi/server/ServerNotActiveException.P \
! .deps/java/rmi/server/ServerRef.P .deps/java/rmi/server/Skeleton.P \
! .deps/java/rmi/server/SkeletonMismatchException.P \
! .deps/java/rmi/server/SkeletonNotFoundException.P \
! .deps/java/rmi/server/SocketSecurityException.P \
! .deps/java/rmi/server/UID.P .deps/java/rmi/server/UnicastRemoteObject.P \
! .deps/java/rmi/server/Unreferenced.P \
! .deps/java/security/AccessControlContext.P \
! .deps/java/security/AccessControlException.P \
! .deps/java/security/AccessController.P \
! .deps/java/security/AlgorithmParameterGenerator.P \
! .deps/java/security/AlgorithmParameterGeneratorSpi.P \
! .deps/java/security/AlgorithmParameters.P \
! .deps/java/security/AlgorithmParametersSpi.P \
! .deps/java/security/AllPermission.P \
! .deps/java/security/BasicPermission.P .deps/java/security/Certificate.P \
! .deps/java/security/CodeSource.P .deps/java/security/DigestException.P \
! .deps/java/security/DigestInputStream.P \
! .deps/java/security/DigestOutputStream.P \
! .deps/java/security/DomainCombiner.P \
! .deps/java/security/DummyKeyPairGenerator.P \
! .deps/java/security/DummyMessageDigest.P \
! .deps/java/security/DummySignature.P \
! .deps/java/security/GeneralSecurityException.P \
! .deps/java/security/Guard.P .deps/java/security/GuardedObject.P \
! .deps/java/security/Identity.P .deps/java/security/IdentityScope.P \
! .deps/java/security/InvalidAlgorithmParameterException.P \
! .deps/java/security/InvalidKeyException.P \
! .deps/java/security/InvalidParameterException.P \
! .deps/java/security/Key.P .deps/java/security/KeyException.P \
! .deps/java/security/KeyFactory.P .deps/java/security/KeyFactorySpi.P \
! .deps/java/security/KeyManagementException.P \
! .deps/java/security/KeyPair.P .deps/java/security/KeyPairGenerator.P \
! .deps/java/security/KeyPairGeneratorSpi.P \
! .deps/java/security/KeyStore.P .deps/java/security/KeyStoreException.P \
! .deps/java/security/KeyStoreSpi.P .deps/java/security/MessageDigest.P \
! .deps/java/security/MessageDigestSpi.P \
! .deps/java/security/NoSuchAlgorithmException.P \
! .deps/java/security/NoSuchProviderException.P \
! .deps/java/security/Permission.P \
! .deps/java/security/PermissionCollection.P \
! .deps/java/security/Permissions.P .deps/java/security/Policy.P \
! .deps/java/security/Principal.P .deps/java/security/PrivateKey.P \
! .deps/java/security/PrivilegedAction.P \
! .deps/java/security/PrivilegedActionException.P \
! .deps/java/security/PrivilegedExceptionAction.P \
! .deps/java/security/ProtectionDomain.P .deps/java/security/Provider.P \
! .deps/java/security/ProviderException.P .deps/java/security/PublicKey.P \
! .deps/java/security/SecureClassLoader.P \
! .deps/java/security/SecureRandom.P \
! .deps/java/security/SecureRandomSpi.P .deps/java/security/Security.P \
! .deps/java/security/SecurityPermission.P \
! .deps/java/security/Signature.P \
! .deps/java/security/SignatureException.P \
! .deps/java/security/SignatureSpi.P .deps/java/security/SignedObject.P \
! .deps/java/security/Signer.P \
! .deps/java/security/UnrecoverableKeyException.P \
! .deps/java/security/UnresolvedPermission.P \
! .deps/java/security/acl/Acl.P .deps/java/security/acl/AclEntry.P \
! .deps/java/security/acl/AclNotFoundException.P \
! .deps/java/security/acl/Group.P \
! .deps/java/security/acl/LastOwnerException.P \
! .deps/java/security/acl/NotOwnerException.P \
! .deps/java/security/acl/Owner.P .deps/java/security/acl/Permission.P \
! .deps/java/security/cert/CRL.P .deps/java/security/cert/CRLException.P \
! .deps/java/security/cert/CRLSelector.P \
! .deps/java/security/cert/CertPath.P \
! .deps/java/security/cert/CertPathBuilder.P \
! .deps/java/security/cert/CertPathBuilderException.P \
! .deps/java/security/cert/CertPathBuilderResult.P \
! .deps/java/security/cert/CertPathBuilderSpi.P \
! .deps/java/security/cert/CertPathParameters.P \
! .deps/java/security/cert/CertPathValidator.P \
! .deps/java/security/cert/CertPathValidatorException.P \
! .deps/java/security/cert/CertPathValidatorResult.P \
! .deps/java/security/cert/CertPathValidatorSpi.P \
! .deps/java/security/cert/CertSelector.P \
! .deps/java/security/cert/CertStore.P \
! .deps/java/security/cert/CertStoreException.P \
! .deps/java/security/cert/CertStoreParameters.P \
! .deps/java/security/cert/CertStoreSpi.P \
! .deps/java/security/cert/Certificate.P \
! .deps/java/security/cert/CertificateEncodingException.P \
! .deps/java/security/cert/CertificateException.P \
! .deps/java/security/cert/CertificateExpiredException.P \
! .deps/java/security/cert/CertificateFactory.P \
! .deps/java/security/cert/CertificateFactorySpi.P \
! .deps/java/security/cert/CertificateNotYetValidException.P \
! .deps/java/security/cert/CertificateParsingException.P \
! .deps/java/security/cert/CollectionCertStoreParameters.P \
! .deps/java/security/cert/LDAPCertStoreParameters.P \
! .deps/java/security/cert/PKIXBuilderParameters.P \
! .deps/java/security/cert/PKIXCertPathBuilderResult.P \
! .deps/java/security/cert/PKIXCertPathChecker.P \
! .deps/java/security/cert/PKIXCertPathValidatorResult.P \
! .deps/java/security/cert/PKIXParameters.P \
! .deps/java/security/cert/PolicyNode.P \
! .deps/java/security/cert/PolicyQualifierInfo.P \
! .deps/java/security/cert/TrustAnchor.P \
! .deps/java/security/cert/X509CRL.P \
! .deps/java/security/cert/X509CRLEntry.P \
! .deps/java/security/cert/X509Certificate.P \
! .deps/java/security/cert/X509Extension.P \
! .deps/java/security/interfaces/DSAKey.P \
! .deps/java/security/interfaces/DSAKeyPairGenerator.P \
! .deps/java/security/interfaces/DSAParams.P \
! .deps/java/security/interfaces/DSAPrivateKey.P \
! .deps/java/security/interfaces/DSAPublicKey.P \
! .deps/java/security/interfaces/RSAKey.P \
! .deps/java/security/interfaces/RSAMultiPrimePrivateCrtKey.P \
! .deps/java/security/interfaces/RSAPrivateCrtKey.P \
! .deps/java/security/interfaces/RSAPrivateKey.P \
! .deps/java/security/interfaces/RSAPublicKey.P \
! .deps/java/security/spec/AlgorithmParameterSpec.P \
! .deps/java/security/spec/DSAParameterSpec.P \
! .deps/java/security/spec/DSAPrivateKeySpec.P \
! .deps/java/security/spec/DSAPublicKeySpec.P \
! .deps/java/security/spec/EncodedKeySpec.P \
! .deps/java/security/spec/InvalidKeySpecException.P \
! .deps/java/security/spec/InvalidParameterSpecException.P \
! .deps/java/security/spec/KeySpec.P \
! .deps/java/security/spec/PKCS8EncodedKeySpec.P \
! .deps/java/security/spec/PSSParameterSpec.P \
! .deps/java/security/spec/RSAKeyGenParameterSpec.P \
! .deps/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.P \
! .deps/java/security/spec/RSAOtherPrimeInfo.P \
! .deps/java/security/spec/RSAPrivateCrtKeySpec.P \
! .deps/java/security/spec/RSAPrivateKeySpec.P \
! .deps/java/security/spec/RSAPublicKeySpec.P \
! .deps/java/security/spec/X509EncodedKeySpec.P .deps/java/sql/Array.P \
! .deps/java/sql/BatchUpdateException.P .deps/java/sql/Blob.P \
! .deps/java/sql/CallableStatement.P .deps/java/sql/Clob.P \
! .deps/java/sql/Connection.P .deps/java/sql/DataTruncation.P \
! .deps/java/sql/DatabaseMetaData.P .deps/java/sql/Date.P \
! .deps/java/sql/Driver.P .deps/java/sql/DriverManager.P \
! .deps/java/sql/DriverPropertyInfo.P .deps/java/sql/ParameterMetaData.P \
! .deps/java/sql/PreparedStatement.P .deps/java/sql/Ref.P \
! .deps/java/sql/ResultSet.P .deps/java/sql/ResultSetMetaData.P \
! .deps/java/sql/SQLData.P .deps/java/sql/SQLException.P \
! .deps/java/sql/SQLInput.P .deps/java/sql/SQLOutput.P \
! .deps/java/sql/SQLPermission.P .deps/java/sql/SQLWarning.P \
! .deps/java/sql/Savepoint.P .deps/java/sql/Statement.P \
! .deps/java/sql/Struct.P .deps/java/sql/Time.P \
! .deps/java/sql/Timestamp.P .deps/java/sql/Types.P \
! .deps/java/text/Annotation.P \
! .deps/java/text/AttributedCharacterIterator.P \
! .deps/java/text/AttributedString.P \
! .deps/java/text/AttributedStringIterator.P \
! .deps/java/text/BreakIterator.P .deps/java/text/CharacterIterator.P \
! .deps/java/text/ChoiceFormat.P \
! .deps/java/text/CollationElementIterator.P \
! .deps/java/text/CollationKey.P .deps/java/text/Collator.P \
! .deps/java/text/DateFormat.P .deps/java/text/DateFormatSymbols.P \
! .deps/java/text/DecimalFormat.P .deps/java/text/DecimalFormatSymbols.P \
! .deps/java/text/FieldPosition.P .deps/java/text/Format.P \
! .deps/java/text/FormatCharacterIterator.P \
! .deps/java/text/MessageFormat.P .deps/java/text/NumberFormat.P \
! .deps/java/text/ParseException.P .deps/java/text/ParsePosition.P \
! .deps/java/text/RuleBasedCollator.P .deps/java/text/SimpleDateFormat.P \
! .deps/java/text/StringCharacterIterator.P .deps/java/text/natCollator.P \
! .deps/java/util/AbstractCollection.P .deps/java/util/AbstractList.P \
! .deps/java/util/AbstractMap.P .deps/java/util/AbstractSequentialList.P \
! .deps/java/util/AbstractSet.P .deps/java/util/ArrayList.P \
! .deps/java/util/Arrays.P .deps/java/util/BitSet.P \
! .deps/java/util/Calendar.P .deps/java/util/Collection.P \
! .deps/java/util/Collections.P .deps/java/util/Comparator.P \
! .deps/java/util/ConcurrentModificationException.P \
! .deps/java/util/Currency.P .deps/java/util/Date.P \
! .deps/java/util/Dictionary.P .deps/java/util/EmptyStackException.P \
! .deps/java/util/Enumeration.P .deps/java/util/EventListener.P \
! .deps/java/util/EventListenerProxy.P .deps/java/util/EventObject.P \
! .deps/java/util/GregorianCalendar.P .deps/java/util/HashMap.P \
! .deps/java/util/HashSet.P .deps/java/util/Hashtable.P \
! .deps/java/util/IdentityHashMap.P .deps/java/util/Iterator.P \
! .deps/java/util/LinkedHashMap.P .deps/java/util/LinkedHashSet.P \
! .deps/java/util/LinkedList.P .deps/java/util/List.P \
! .deps/java/util/ListIterator.P .deps/java/util/ListResourceBundle.P \
! .deps/java/util/Locale.P .deps/java/util/Map.P \
! .deps/java/util/MissingResourceException.P \
! .deps/java/util/NoSuchElementException.P .deps/java/util/Observable.P \
! .deps/java/util/Observer.P .deps/java/util/Properties.P \
! .deps/java/util/PropertyPermission.P \
! .deps/java/util/PropertyPermissionCollection.P \
! .deps/java/util/PropertyResourceBundle.P .deps/java/util/Random.P \
! .deps/java/util/RandomAccess.P .deps/java/util/ResourceBundle.P \
! .deps/java/util/Set.P .deps/java/util/SimpleTimeZone.P \
! .deps/java/util/SortedMap.P .deps/java/util/SortedSet.P \
! .deps/java/util/Stack.P .deps/java/util/StringTokenizer.P \
! .deps/java/util/TimeZone.P .deps/java/util/Timer.P \
! .deps/java/util/TimerTask.P .deps/java/util/TooManyListenersException.P \
! .deps/java/util/TreeMap.P .deps/java/util/TreeSet.P \
! .deps/java/util/Vector.P .deps/java/util/WeakHashMap.P \
! .deps/java/util/jar/Attributes.P .deps/java/util/jar/JarEntry.P \
! .deps/java/util/jar/JarException.P .deps/java/util/jar/JarFile.P \
! .deps/java/util/jar/JarInputStream.P \
! .deps/java/util/jar/JarOutputStream.P .deps/java/util/jar/Manifest.P \
! .deps/java/util/logging/ConsoleHandler.P \
! .deps/java/util/logging/ErrorManager.P \
! .deps/java/util/logging/FileHandler.P .deps/java/util/logging/Filter.P \
! .deps/java/util/logging/Formatter.P .deps/java/util/logging/Handler.P \
! .deps/java/util/logging/Level.P .deps/java/util/logging/LogManager.P \
! .deps/java/util/logging/LogRecord.P .deps/java/util/logging/Logger.P \
! .deps/java/util/logging/LoggingPermission.P \
! .deps/java/util/logging/MemoryHandler.P \
! .deps/java/util/logging/SimpleFormatter.P \
! .deps/java/util/logging/SocketHandler.P \
! .deps/java/util/logging/StreamHandler.P \
! .deps/java/util/logging/XMLFormatter.P \
! .deps/java/util/natResourceBundle.P .deps/java/util/natTimeZone.P \
! .deps/java/util/prefs/AbstractPreferences.P \
! .deps/java/util/prefs/BackingStoreException.P \
! .deps/java/util/prefs/InvalidPreferencesFormatException.P \
! .deps/java/util/prefs/NodeChangeEvent.P \
! .deps/java/util/prefs/NodeChangeListener.P \
! .deps/java/util/prefs/PreferenceChangeEvent.P \
! .deps/java/util/prefs/PreferenceChangeListener.P \
! .deps/java/util/prefs/Preferences.P \
! .deps/java/util/prefs/PreferencesFactory.P \
! .deps/java/util/regex/Matcher.P .deps/java/util/regex/Pattern.P \
! .deps/java/util/regex/PatternSyntaxException.P \
! .deps/java/util/zip/Adler32.P .deps/java/util/zip/CRC32.P \
! .deps/java/util/zip/CheckedInputStream.P \
! .deps/java/util/zip/CheckedOutputStream.P \
! .deps/java/util/zip/Checksum.P \
! .deps/java/util/zip/DataFormatException.P \
! .deps/java/util/zip/Deflater.P \
! .deps/java/util/zip/DeflaterOutputStream.P \
! .deps/java/util/zip/GZIPInputStream.P \
! .deps/java/util/zip/GZIPOutputStream.P .deps/java/util/zip/Inflater.P \
! .deps/java/util/zip/InflaterInputStream.P \
! .deps/java/util/zip/ZipConstants.P .deps/java/util/zip/ZipEntry.P \
! .deps/java/util/zip/ZipException.P .deps/java/util/zip/ZipFile.P \
! .deps/java/util/zip/ZipInputStream.P \
! .deps/java/util/zip/ZipOutputStream.P .deps/java/util/zip/natDeflater.P \
! .deps/java/util/zip/natInflater.P \
! .deps/javax/accessibility/Accessible.P \
! .deps/javax/accessibility/AccessibleAction.P \
! .deps/javax/accessibility/AccessibleBundle.P \
! .deps/javax/accessibility/AccessibleComponent.P \
! .deps/javax/accessibility/AccessibleContext.P \
! .deps/javax/accessibility/AccessibleEditableText.P \
! .deps/javax/accessibility/AccessibleExtendedComponent.P \
! .deps/javax/accessibility/AccessibleExtendedTable.P \
! .deps/javax/accessibility/AccessibleHyperlink.P \
! .deps/javax/accessibility/AccessibleHypertext.P \
! .deps/javax/accessibility/AccessibleIcon.P \
! .deps/javax/accessibility/AccessibleKeyBinding.P \
! .deps/javax/accessibility/AccessibleRelation.P \
! .deps/javax/accessibility/AccessibleRelationSet.P \
! .deps/javax/accessibility/AccessibleResourceBundle.P \
! .deps/javax/accessibility/AccessibleRole.P \
! .deps/javax/accessibility/AccessibleSelection.P \
! .deps/javax/accessibility/AccessibleState.P \
! .deps/javax/accessibility/AccessibleStateSet.P \
! .deps/javax/accessibility/AccessibleTable.P \
! .deps/javax/accessibility/AccessibleTableModelChange.P \
! .deps/javax/accessibility/AccessibleText.P \
! .deps/javax/accessibility/AccessibleValue.P \
! .deps/javax/naming/AuthenticationException.P \
! .deps/javax/naming/AuthenticationNotSupportedException.P \
! .deps/javax/naming/BinaryRefAddr.P .deps/javax/naming/Binding.P \
! .deps/javax/naming/CannotProceedException.P \
! .deps/javax/naming/CommunicationException.P \
! .deps/javax/naming/CompositeName.P .deps/javax/naming/CompoundName.P \
! .deps/javax/naming/ConfigurationException.P \
! .deps/javax/naming/Context.P \
! .deps/javax/naming/ContextNotEmptyException.P \
! .deps/javax/naming/InitialContext.P \
! .deps/javax/naming/InsufficientResourcesException.P \
! .deps/javax/naming/InterruptedNamingException.P \
! .deps/javax/naming/InvalidNameException.P \
! .deps/javax/naming/LimitExceededException.P \
! .deps/javax/naming/LinkException.P \
! .deps/javax/naming/LinkLoopException.P .deps/javax/naming/LinkRef.P \
! .deps/javax/naming/MalformedLinkException.P .deps/javax/naming/Name.P \
! .deps/javax/naming/NameAlreadyBoundException.P \
! .deps/javax/naming/NameClassPair.P \
! .deps/javax/naming/NameNotFoundException.P \
! .deps/javax/naming/NameParser.P .deps/javax/naming/NamingEnumeration.P \
! .deps/javax/naming/NamingException.P \
! .deps/javax/naming/NamingSecurityException.P \
! .deps/javax/naming/NoInitialContextException.P \
! .deps/javax/naming/NoPermissionException.P \
! .deps/javax/naming/NotContextException.P \
! .deps/javax/naming/OperationNotSupportedException.P \
! .deps/javax/naming/PartialResultException.P \
! .deps/javax/naming/RefAddr.P .deps/javax/naming/Reference.P \
! .deps/javax/naming/Referenceable.P \
! .deps/javax/naming/ReferralException.P \
! .deps/javax/naming/ServiceUnavailableException.P \
! .deps/javax/naming/SizeLimitExceededException.P \
! .deps/javax/naming/StringRefAddr.P \
! .deps/javax/naming/TimeLimitExceededException.P \
! .deps/javax/naming/directory/Attribute.P \
! .deps/javax/naming/directory/AttributeInUseException.P \
! .deps/javax/naming/directory/AttributeModificationException.P \
! .deps/javax/naming/directory/Attributes.P \
! .deps/javax/naming/directory/BasicAttribute.P \
! .deps/javax/naming/directory/BasicAttributes.P \
! .deps/javax/naming/directory/DirContext.P \
! .deps/javax/naming/directory/InitialDirContext.P \
! .deps/javax/naming/directory/InvalidAttributeIdentifierException.P \
! .deps/javax/naming/directory/InvalidAttributeValueException.P \
! .deps/javax/naming/directory/InvalidAttributesException.P \
! .deps/javax/naming/directory/InvalidSearchControlsException.P \
! .deps/javax/naming/directory/InvalidSearchFilterException.P \
! .deps/javax/naming/directory/ModificationItem.P \
! .deps/javax/naming/directory/NoSuchAttributeException.P \
! .deps/javax/naming/directory/SchemaViolationException.P \
! .deps/javax/naming/directory/SearchControls.P \
! .deps/javax/naming/directory/SearchResult.P \
! .deps/javax/naming/event/EventContext.P \
! .deps/javax/naming/event/EventDirContext.P \
! .deps/javax/naming/event/NamespaceChangeListener.P \
! .deps/javax/naming/event/NamingEvent.P \
! .deps/javax/naming/event/NamingExceptionEvent.P \
! .deps/javax/naming/event/NamingListener.P \
! .deps/javax/naming/event/ObjectChangeListener.P \
! .deps/javax/naming/ldap/Control.P \
! .deps/javax/naming/ldap/ControlFactory.P \
! .deps/javax/naming/ldap/ExtendedRequest.P \
! .deps/javax/naming/ldap/ExtendedResponse.P \
! .deps/javax/naming/ldap/HasControls.P \
! .deps/javax/naming/ldap/InitialLdapContext.P \
! .deps/javax/naming/ldap/LdapContext.P \
! .deps/javax/naming/ldap/LdapReferralException.P \
! .deps/javax/naming/ldap/UnsolicitedNotification.P \
! .deps/javax/naming/ldap/UnsolicitedNotificationEvent.P \
! .deps/javax/naming/ldap/UnsolicitedNotificationListener.P \
! .deps/javax/naming/spi/DirObjectFactory.P \
! .deps/javax/naming/spi/DirStateFactory.P \
! .deps/javax/naming/spi/DirectoryManager.P \
! .deps/javax/naming/spi/InitialContextFactory.P \
! .deps/javax/naming/spi/InitialContextFactoryBuilder.P \
! .deps/javax/naming/spi/NamingManager.P \
! .deps/javax/naming/spi/ObjectFactory.P \
! .deps/javax/naming/spi/ObjectFactoryBuilder.P \
! .deps/javax/naming/spi/ResolveResult.P \
! .deps/javax/naming/spi/Resolver.P .deps/javax/naming/spi/StateFactory.P \
! .deps/javax/print/attribute/Attribute.P \
! .deps/javax/print/attribute/AttributeSet.P \
! .deps/javax/print/attribute/AttributeSetUtilities.P \
! .deps/javax/print/attribute/DateTimeSyntax.P \
! .deps/javax/print/attribute/DocAttribute.P \
! .deps/javax/print/attribute/DocAttributeSet.P \
! .deps/javax/print/attribute/EnumSyntax.P \
! .deps/javax/print/attribute/HashAttributeSet.P \
! .deps/javax/print/attribute/HashDocAttributeSet.P \
! .deps/javax/print/attribute/HashPrintJobAttributeSet.P \
! .deps/javax/print/attribute/HashPrintRequestAttributeSet.P \
! .deps/javax/print/attribute/HashPrintServiceAttributeSet.P \
! .deps/javax/print/attribute/IntegerSyntax.P \
! .deps/javax/print/attribute/PrintJobAttribute.P \
! .deps/javax/print/attribute/PrintJobAttributeSet.P \
! .deps/javax/print/attribute/PrintRequestAttribute.P \
! .deps/javax/print/attribute/PrintRequestAttributeSet.P \
! .deps/javax/print/attribute/PrintServiceAttribute.P \
! .deps/javax/print/attribute/PrintServiceAttributeSet.P \
! .deps/javax/print/attribute/ResolutionSyntax.P \
! .deps/javax/print/attribute/SetOfIntegerSyntax.P \
! .deps/javax/print/attribute/Size2DSyntax.P \
! .deps/javax/print/attribute/SupportedValuesAttribute.P \
! .deps/javax/print/attribute/TextSyntax.P \
! .deps/javax/print/attribute/URISyntax.P \
! .deps/javax/print/attribute/UnmodifiableSetException.P \
! .deps/javax/print/attribute/standard/Copies.P \
! .deps/javax/print/attribute/standard/DateTimeAtCompleted.P \
! .deps/javax/print/attribute/standard/DateTimeAtCreation.P \
! .deps/javax/print/attribute/standard/DateTimeAtProcessing.P \
! .deps/javax/print/attribute/standard/DocumentName.P \
! .deps/javax/print/attribute/standard/JobHoldUntil.P \
! .deps/javax/print/attribute/standard/JobImpressions.P \
! .deps/javax/print/attribute/standard/JobImpressionsCompleted.P \
! .deps/javax/print/attribute/standard/JobKOctets.P \
! .deps/javax/print/attribute/standard/JobKOctetsProcessed.P \
! .deps/javax/print/attribute/standard/JobMediaSheets.P \
! .deps/javax/print/attribute/standard/JobMediaSheetsCompleted.P \
! .deps/javax/print/attribute/standard/JobMessageFromOperator.P \
! .deps/javax/print/attribute/standard/JobName.P \
! .deps/javax/print/attribute/standard/JobOriginatingUserName.P \
! .deps/javax/print/attribute/standard/JobPriority.P \
! .deps/javax/print/attribute/standard/JobPrioritySupported.P \
! .deps/javax/print/attribute/standard/NumberOfDocuments.P \
! .deps/javax/print/attribute/standard/NumberOfInterveningJobs.P \
! .deps/javax/print/attribute/standard/NumberUp.P \
! .deps/javax/print/attribute/standard/OutputDeviceAssigned.P \
! .deps/javax/print/attribute/standard/PagesPerMinute.P \
! .deps/javax/print/attribute/standard/PagesPerMinuteColor.P \
! .deps/javax/print/attribute/standard/PrinterInfo.P \
! .deps/javax/print/attribute/standard/PrinterLocation.P \
! .deps/javax/print/attribute/standard/PrinterMakeAndModel.P \
! .deps/javax/print/attribute/standard/PrinterMessageFromOperator.P \
! .deps/javax/print/attribute/standard/PrinterName.P \
! .deps/javax/print/attribute/standard/QueuedJobCount.P \
! .deps/javax/print/attribute/standard/RequestingUserName.P \
! .deps/javax/rmi/BAD_OPERATION.P .deps/javax/rmi/CORBA/ClassDesc.P \
! .deps/javax/rmi/CORBA/ObjectImpl.P \
! .deps/javax/rmi/CORBA/PortableRemoteObjectDelegate.P \
! .deps/javax/rmi/CORBA/Stub.P .deps/javax/rmi/CORBA/StubDelegate.P \
! .deps/javax/rmi/CORBA/SystemException.P .deps/javax/rmi/CORBA/Tie.P \
! .deps/javax/rmi/CORBA/Util.P .deps/javax/rmi/CORBA/UtilDelegate.P \
! .deps/javax/rmi/CORBA/ValueHandler.P .deps/javax/rmi/ORB.P \
! .deps/javax/rmi/PortableRemoteObject.P \
! .deps/javax/security/auth/x500/X500Principal.P \
! .deps/javax/sql/ConnectionEvent.P \
! .deps/javax/sql/ConnectionEventListener.P \
! .deps/javax/sql/ConnectionPoolDataSource.P .deps/javax/sql/DataSource.P \
! .deps/javax/sql/PooledConnection.P .deps/javax/sql/RowSet.P \
! .deps/javax/sql/RowSetEvent.P .deps/javax/sql/RowSetInternal.P \
! .deps/javax/sql/RowSetListener.P .deps/javax/sql/RowSetMetaData.P \
! .deps/javax/sql/RowSetReader.P .deps/javax/sql/RowSetWriter.P \
! .deps/javax/sql/XAConnection.P .deps/javax/sql/XADataSource.P \
! .deps/javax/swing/AbstractAction.P .deps/javax/swing/AbstractButton.P \
! .deps/javax/swing/AbstractCellEditor.P \
! .deps/javax/swing/AbstractListModel.P .deps/javax/swing/AbstractSet.P \
! .deps/javax/swing/Action.P .deps/javax/swing/ActionMap.P \
! .deps/javax/swing/BorderFactory.P .deps/javax/swing/BoundedRangeModel.P \
! .deps/javax/swing/Box.P .deps/javax/swing/BoxLayout.P \
! .deps/javax/swing/ButtonGroup.P .deps/javax/swing/ButtonModel.P \
! .deps/javax/swing/CellEditor.P .deps/javax/swing/CellRendererPane.P \
! .deps/javax/swing/ComboBoxEditor.P .deps/javax/swing/ComboBoxModel.P \
! .deps/javax/swing/ComponentInputMap.P .deps/javax/swing/DebugGraphics.P \
! .deps/javax/swing/DefaultBoundedRangeModel.P \
! .deps/javax/swing/DefaultButtonModel.P \
! .deps/javax/swing/DefaultCellEditor.P \
! .deps/javax/swing/DefaultCellRenderer.P \
! .deps/javax/swing/DefaultComboBoxModel.P \
! .deps/javax/swing/DefaultDesktopManager.P \
! .deps/javax/swing/DefaultFocusManager.P \
! .deps/javax/swing/DefaultListCellRenderer.P \
! .deps/javax/swing/DefaultListModel.P \
! .deps/javax/swing/DefaultListSelectionModel.P \
! .deps/javax/swing/DefaultSingleSelectionModel.P \
! .deps/javax/swing/DesktopManager.P .deps/javax/swing/FocusManager.P \
! .deps/javax/swing/GrayFilter.P .deps/javax/swing/Icon.P \
! .deps/javax/swing/ImageIcon.P .deps/javax/swing/InputMap.P \
! .deps/javax/swing/InputVerifier.P .deps/javax/swing/JApplet.P \
! .deps/javax/swing/JButton.P .deps/javax/swing/JCheckBox.P \
! .deps/javax/swing/JCheckBoxMenuItem.P .deps/javax/swing/JColorChooser.P \
! .deps/javax/swing/JComboBox.P .deps/javax/swing/JComponent.P \
! .deps/javax/swing/JDesktopPane.P .deps/javax/swing/JDialog.P \
! .deps/javax/swing/JEditorPane.P .deps/javax/swing/JFileChooser.P \
! .deps/javax/swing/JFormattedTextField.P .deps/javax/swing/JFrame.P \
! .deps/javax/swing/JInternalFrame.P .deps/javax/swing/JLabel.P \
! .deps/javax/swing/JLayeredPane.P .deps/javax/swing/JList.P \
! .deps/javax/swing/JMenu.P .deps/javax/swing/JMenuBar.P \
! .deps/javax/swing/JMenuItem.P .deps/javax/swing/JOptionPane.P \
! .deps/javax/swing/JPanel.P .deps/javax/swing/JPasswordField.P \
! .deps/javax/swing/JPopupMenu.P .deps/javax/swing/JProgressBar.P \
! .deps/javax/swing/JRadioButton.P \
! .deps/javax/swing/JRadioButtonMenuItem.P .deps/javax/swing/JRootPane.P \
! .deps/javax/swing/JScrollBar.P .deps/javax/swing/JScrollPane.P \
! .deps/javax/swing/JSeparator.P .deps/javax/swing/JSlider.P \
! .deps/javax/swing/JSplitPane.P .deps/javax/swing/JTabbedPane.P \
! .deps/javax/swing/JTable.P .deps/javax/swing/JTextField.P \
! .deps/javax/swing/JTextPane.P .deps/javax/swing/JToggleButton.P \
! .deps/javax/swing/JToolBar.P .deps/javax/swing/JToolTip.P \
! .deps/javax/swing/JTree.P .deps/javax/swing/JViewport.P \
! .deps/javax/swing/JWindow.P .deps/javax/swing/KeyStroke.P \
! .deps/javax/swing/ListCellRenderer.P .deps/javax/swing/ListModel.P \
! .deps/javax/swing/ListSelectionModel.P .deps/javax/swing/LookAndFeel.P \
! .deps/javax/swing/MenuElement.P \
! .deps/javax/swing/MenuSelectionManager.P \
! .deps/javax/swing/MutableComboBoxModel.P \
! .deps/javax/swing/OverlayLayout.P .deps/javax/swing/Popup.P \
! .deps/javax/swing/PopupFactory.P .deps/javax/swing/ProgressMonitor.P \
! .deps/javax/swing/ProgressMonitorInputStream.P \
! .deps/javax/swing/Renderer.P .deps/javax/swing/RepaintManager.P \
! .deps/javax/swing/RootPaneContainer.P \
! .deps/javax/swing/ScrollPaneConstants.P \
! .deps/javax/swing/ScrollPaneLayout.P .deps/javax/swing/Scrollable.P \
! .deps/javax/swing/SingleSelectionModel.P \
! .deps/javax/swing/SizeRequirements.P .deps/javax/swing/SizeSequence.P \
! .deps/javax/swing/SwingConstants.P .deps/javax/swing/SwingUtilities.P \
! .deps/javax/swing/Timer.P .deps/javax/swing/ToggleButtonModel.P \
! .deps/javax/swing/ToolTipManager.P .deps/javax/swing/UIDefaults.P \
! .deps/javax/swing/UIManager.P \
! .deps/javax/swing/UnsupportedLookAndFeelException.P \
! .deps/javax/swing/ViewportLayout.P .deps/javax/swing/WindowConstants.P \
! .deps/javax/swing/border/AbstractBorder.P \
! .deps/javax/swing/border/BevelBorder.P \
! .deps/javax/swing/border/Border.P \
! .deps/javax/swing/border/CompoundBorder.P \
! .deps/javax/swing/border/EmptyBorder.P \
! .deps/javax/swing/border/EtchedBorder.P \
! .deps/javax/swing/border/LineBorder.P \
! .deps/javax/swing/border/MatteBorder.P \
! .deps/javax/swing/border/SoftBevelBorder.P \
! .deps/javax/swing/border/TitledBorder.P \
! .deps/javax/swing/colorchooser/AbstractColorChooserPanel.P \
! .deps/javax/swing/colorchooser/ColorChooserComponentFactory.P \
! .deps/javax/swing/colorchooser/ColorSelectionModel.P \
! .deps/javax/swing/colorchooser/DefaultColorSelectionModel.P \
! .deps/javax/swing/event/AncestorEvent.P \
! .deps/javax/swing/event/AncestorListener.P \
! .deps/javax/swing/event/CaretEvent.P \
! .deps/javax/swing/event/CaretListener.P \
! .deps/javax/swing/event/CellEditorListener.P \
! .deps/javax/swing/event/ChangeEvent.P \
! .deps/javax/swing/event/ChangeListener.P \
! .deps/javax/swing/event/DocumentEvent.P \
! .deps/javax/swing/event/DocumentListener.P \
! .deps/javax/swing/event/EventListenerList.P \
! .deps/javax/swing/event/HyperlinkEvent.P \
! .deps/javax/swing/event/HyperlinkListener.P \
! .deps/javax/swing/event/InternalFrameAdapter.P \
! .deps/javax/swing/event/InternalFrameEvent.P \
! .deps/javax/swing/event/InternalFrameListener.P \
! .deps/javax/swing/event/ListDataEvent.P \
! .deps/javax/swing/event/ListDataListener.P \
! .deps/javax/swing/event/ListSelectionEvent.P \
! .deps/javax/swing/event/ListSelectionListener.P \
! .deps/javax/swing/event/MenuDragMouseEvent.P \
! .deps/javax/swing/event/MenuDragMouseListener.P \
! .deps/javax/swing/event/MenuEvent.P \
! .deps/javax/swing/event/MenuKeyEvent.P \
! .deps/javax/swing/event/MenuKeyListener.P \
! .deps/javax/swing/event/MenuListener.P \
! .deps/javax/swing/event/MouseInputAdapter.P \
! .deps/javax/swing/event/MouseInputListener.P \
! .deps/javax/swing/event/PopupMenuEvent.P \
! .deps/javax/swing/event/PopupMenuListener.P \
! .deps/javax/swing/event/SwingPropertyChangeSupport.P \
! .deps/javax/swing/event/TableColumnModelEvent.P \
! .deps/javax/swing/event/TableColumnModelListener.P \
! .deps/javax/swing/event/TableModelEvent.P \
! .deps/javax/swing/event/TableModelListener.P \
! .deps/javax/swing/event/TreeExpansionEvent.P \
! .deps/javax/swing/event/TreeExpansionListener.P \
! .deps/javax/swing/event/TreeModelEvent.P \
! .deps/javax/swing/event/TreeModelListener.P \
! .deps/javax/swing/event/TreeSelectionEvent.P \
! .deps/javax/swing/event/TreeSelectionListener.P \
! .deps/javax/swing/event/TreeWillExpandListener.P \
! .deps/javax/swing/event/UndoableEditEvent.P \
! .deps/javax/swing/event/UndoableEditListener.P \
! .deps/javax/swing/filechooser/FileFilter.P \
! .deps/javax/swing/filechooser/FileSystemView.P \
! .deps/javax/swing/filechooser/FileView.P \
! .deps/javax/swing/plaf/ActionMapUIResource.P \
! .deps/javax/swing/plaf/BorderUIResource.P \
! .deps/javax/swing/plaf/ButtonUI.P \
! .deps/javax/swing/plaf/ColorChooserUI.P \
! .deps/javax/swing/plaf/ColorUIResource.P \
! .deps/javax/swing/plaf/ComboBoxUI.P \
! .deps/javax/swing/plaf/ComponentInputMapUIResource.P \
! .deps/javax/swing/plaf/ComponentUI.P \
! .deps/javax/swing/plaf/DesktopIconUI.P \
! .deps/javax/swing/plaf/DesktopPaneUI.P \
! .deps/javax/swing/plaf/DimensionUIResource.P \
! .deps/javax/swing/plaf/FileChooserUI.P \
! .deps/javax/swing/plaf/FontUIResource.P \
! .deps/javax/swing/plaf/IconUIResource.P \
! .deps/javax/swing/plaf/InputMapUIResource.P \
! .deps/javax/swing/plaf/InsetsUIResource.P \
! .deps/javax/swing/plaf/InternalFrameUI.P \
! .deps/javax/swing/plaf/LabelUI.P .deps/javax/swing/plaf/ListUI.P \
! .deps/javax/swing/plaf/MenuBarUI.P .deps/javax/swing/plaf/MenuItemUI.P \
! .deps/javax/swing/plaf/OptionPaneUI.P .deps/javax/swing/plaf/PanelUI.P \
! .deps/javax/swing/plaf/PopupMenuUI.P \
! .deps/javax/swing/plaf/ProgressBarUI.P \
! .deps/javax/swing/plaf/RootPaneUI.P \
! .deps/javax/swing/plaf/ScrollBarUI.P \
! .deps/javax/swing/plaf/ScrollPaneUI.P \
! .deps/javax/swing/plaf/SeparatorUI.P .deps/javax/swing/plaf/SliderUI.P \
! .deps/javax/swing/plaf/SpinnerUI.P .deps/javax/swing/plaf/SplitPaneUI.P \
! .deps/javax/swing/plaf/TabbedPaneUI.P \
! .deps/javax/swing/plaf/TableHeaderUI.P .deps/javax/swing/plaf/TableUI.P \
! .deps/javax/swing/plaf/TextUI.P .deps/javax/swing/plaf/ToolBarUI.P \
! .deps/javax/swing/plaf/ToolTipUI.P .deps/javax/swing/plaf/TreeUI.P \
! .deps/javax/swing/plaf/UIResource.P .deps/javax/swing/plaf/ViewportUI.P \
! .deps/javax/swing/plaf/basic/BasicBorders.P \
! .deps/javax/swing/plaf/basic/BasicButtonUI.P \
! .deps/javax/swing/plaf/basic/BasicCheckBoxUI.P \
! .deps/javax/swing/plaf/basic/BasicDefaults.P \
! .deps/javax/swing/plaf/basic/BasicGraphicsUtils.P \
! .deps/javax/swing/plaf/basic/BasicIconFactory.P \
! .deps/javax/swing/plaf/basic/BasicLabelUI.P \
! .deps/javax/swing/plaf/basic/BasicListUI.P \
! .deps/javax/swing/plaf/basic/BasicLookAndFeel.P \
! .deps/javax/swing/plaf/basic/BasicOptionPaneUI.P \
! .deps/javax/swing/plaf/basic/BasicPanelUI.P \
! .deps/javax/swing/plaf/basic/BasicRadioButtonUI.P \
! .deps/javax/swing/plaf/basic/BasicScrollPaneUI.P \
! .deps/javax/swing/plaf/basic/BasicSplitPaneDivider.P \
! .deps/javax/swing/plaf/basic/BasicSplitPaneUI.P \
! .deps/javax/swing/plaf/basic/BasicTabbedPaneUI.P \
! .deps/javax/swing/plaf/basic/BasicTextUI.P \
! .deps/javax/swing/plaf/basic/BasicToggleButtonUI.P \
! .deps/javax/swing/plaf/basic/BasicTreeUI.P \
! .deps/javax/swing/plaf/basic/BasicViewportUI.P \
! .deps/javax/swing/plaf/metal/MetalLookAndFeel.P \
! .deps/javax/swing/table/AbstractTableModel.P \
! .deps/javax/swing/table/DefaultTableCellRenderer.P \
! .deps/javax/swing/table/DefaultTableColumnModel.P \
! .deps/javax/swing/table/DefaultTableModel.P \
! .deps/javax/swing/table/JTableHeader.P \
! .deps/javax/swing/table/TableCellEditor.P \
! .deps/javax/swing/table/TableCellRenderer.P \
! .deps/javax/swing/table/TableColumn.P \
! .deps/javax/swing/table/TableColumnModel.P \
! .deps/javax/swing/table/TableModel.P \
! .deps/javax/swing/text/AbstractDocument.P \
! .deps/javax/swing/text/AttributeSet.P \
! .deps/javax/swing/text/BadLocationException.P \
! .deps/javax/swing/text/Caret.P \
! .deps/javax/swing/text/CharacterIterator.P \
! .deps/javax/swing/text/ComponentView.P \
! .deps/javax/swing/text/DefaultCaret.P \
! .deps/javax/swing/text/DefaultEditorKit.P \
! .deps/javax/swing/text/Document.P \
! .deps/javax/swing/text/DocumentFilter.P \
! .deps/javax/swing/text/EditorKit.P .deps/javax/swing/text/Element.P \
! .deps/javax/swing/text/GapContent.P \
! .deps/javax/swing/text/JTextComponent.P .deps/javax/swing/text/Keymap.P \
! .deps/javax/swing/text/MutableAttributeSet.P \
! .deps/javax/swing/text/NavigationFilter.P \
! .deps/javax/swing/text/PlainDocument.P \
! .deps/javax/swing/text/PlainEditorKit.P \
! .deps/javax/swing/text/Position.P .deps/javax/swing/text/Segment.P \
! .deps/javax/swing/text/Style.P .deps/javax/swing/text/StyledDocument.P \
! .deps/javax/swing/text/StyledEditorKit.P \
! .deps/javax/swing/text/TextAction.P .deps/javax/swing/text/View.P \
! .deps/javax/swing/text/ViewFactory.P .deps/javax/swing/text/html/HTML.P \
! .deps/javax/swing/text/html/parser/ParserDelegator.P \
! .deps/javax/swing/tree/AbstractLayoutCache.P \
! .deps/javax/swing/tree/DefaultMutableTreeNode.P \
! .deps/javax/swing/tree/DefaultTreeCellEditor.P \
! .deps/javax/swing/tree/DefaultTreeCellRenderer.P \
! .deps/javax/swing/tree/DefaultTreeModel.P \
! .deps/javax/swing/tree/DefaultTreeSelectionModel.P \
! .deps/javax/swing/tree/ExpandVetoException.P \
! .deps/javax/swing/tree/FixedHeightLayoutCache.P \
! .deps/javax/swing/tree/MutableTreeNode.P \
! .deps/javax/swing/tree/RowMapper.P \
! .deps/javax/swing/tree/TreeCellEditor.P \
! .deps/javax/swing/tree/TreeCellRenderer.P \
! .deps/javax/swing/tree/TreeModel.P .deps/javax/swing/tree/TreeNode.P \
! .deps/javax/swing/tree/TreePath.P \
! .deps/javax/swing/tree/TreeSelectionModel.P \
! .deps/javax/swing/tree/VariableHeightLayoutCache.P \
! .deps/javax/swing/undo/AbstractUndoableEdit.P \
! .deps/javax/swing/undo/CannotRedoException.P \
! .deps/javax/swing/undo/CannotUndoException.P \
! .deps/javax/swing/undo/CompoundEdit.P \
! .deps/javax/swing/undo/StateEdit.P \
! .deps/javax/swing/undo/StateEditable.P \
! .deps/javax/swing/undo/UndoManager.P \
! .deps/javax/swing/undo/UndoableEdit.P \
! .deps/javax/swing/undo/UndoableEditSupport.P \
! .deps/javax/transaction/HeuristicCommitException.P \
! .deps/javax/transaction/HeuristicMixedException.P \
! .deps/javax/transaction/HeuristicRollbackException.P \
! .deps/javax/transaction/InvalidTransactionException.P \
! .deps/javax/transaction/NotSupportedException.P \
! .deps/javax/transaction/RollbackException.P \
! .deps/javax/transaction/Status.P \
! .deps/javax/transaction/Synchronization.P \
! .deps/javax/transaction/SystemException.P \
! .deps/javax/transaction/Transaction.P \
! .deps/javax/transaction/TransactionManager.P \
! .deps/javax/transaction/TransactionRequiredException.P \
! .deps/javax/transaction/TransactionRolledbackException.P \
! .deps/javax/transaction/UserTransaction.P \
! .deps/javax/transaction/xa/XAException.P \
! .deps/javax/transaction/xa/XAResource.P \
! .deps/javax/transaction/xa/Xid.P .deps/jni.P .deps/jni/classpath/jcl.P \
! .deps/jni/classpath/jnilink.P .deps/jni/classpath/native_state.P \
! .deps/jni/classpath/primlib.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.P \
! .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.P \
! .deps/jni/gtk-peer/gthread-jni.P .deps/no-threads.P .deps/nogc.P \
! .deps/org/w3c/dom/Attr.P .deps/org/w3c/dom/CDATASection.P \
! .deps/org/w3c/dom/CharacterData.P .deps/org/w3c/dom/Comment.P \
! .deps/org/w3c/dom/DOMException.P .deps/org/w3c/dom/DOMImplementation.P \
! .deps/org/w3c/dom/Document.P .deps/org/w3c/dom/DocumentFragment.P \
! .deps/org/w3c/dom/DocumentType.P .deps/org/w3c/dom/Element.P \
! .deps/org/w3c/dom/Entity.P .deps/org/w3c/dom/EntityReference.P \
! .deps/org/w3c/dom/NamedNodeMap.P .deps/org/w3c/dom/Node.P \
! .deps/org/w3c/dom/NodeList.P .deps/org/w3c/dom/Notation.P \
! .deps/org/w3c/dom/ProcessingInstruction.P .deps/org/w3c/dom/Text.P \
! .deps/org/w3c/dom/ranges/DocumentRange.P \
! .deps/org/w3c/dom/ranges/Range.P \
! .deps/org/w3c/dom/ranges/RangeException.P \
! .deps/org/w3c/dom/traversal/DocumentTraversal.P \
! .deps/org/w3c/dom/traversal/NodeFilter.P \
! .deps/org/w3c/dom/traversal/NodeIterator.P \
! .deps/org/w3c/dom/traversal/TreeWalker.P \
! .deps/org/xml/sax/AttributeList.P .deps/org/xml/sax/Attributes.P \
! .deps/org/xml/sax/ContentHandler.P .deps/org/xml/sax/DTDHandler.P \
! .deps/org/xml/sax/DocumentHandler.P .deps/org/xml/sax/EntityResolver.P \
! .deps/org/xml/sax/ErrorHandler.P .deps/org/xml/sax/HandlerBase.P \
! .deps/org/xml/sax/InputSource.P .deps/org/xml/sax/Locator.P \
! .deps/org/xml/sax/Parser.P .deps/org/xml/sax/SAXException.P \
! .deps/org/xml/sax/SAXNotRecognizedException.P \
! .deps/org/xml/sax/SAXNotSupportedException.P \
! .deps/org/xml/sax/SAXParseException.P .deps/org/xml/sax/XMLFilter.P \
! .deps/org/xml/sax/XMLReader.P .deps/org/xml/sax/ext/DeclHandler.P \
! .deps/org/xml/sax/ext/LexicalHandler.P \
! .deps/org/xml/sax/helpers/AttributeListImpl.P \
! .deps/org/xml/sax/helpers/AttributesImpl.P \
! .deps/org/xml/sax/helpers/DefaultHandler.P \
! .deps/org/xml/sax/helpers/LocatorImpl.P \
! .deps/org/xml/sax/helpers/NamespaceSupport.P \
! .deps/org/xml/sax/helpers/NewInstance.P \
! .deps/org/xml/sax/helpers/ParserAdapter.P \
! .deps/org/xml/sax/helpers/ParserFactory.P \
! .deps/org/xml/sax/helpers/XMLFilterImpl.P \
! .deps/org/xml/sax/helpers/XMLReaderAdapter.P \
! .deps/org/xml/sax/helpers/XMLReaderFactory.P .deps/posix-threads.P \
! .deps/posix.P .deps/prims.P .deps/resolve.P .deps/verify.P \
! .deps/win32-threads.P .deps/win32.P
! SOURCES = $(libgcj_la_SOURCES) $(EXTRA_libgcj_la_SOURCES) $(lib_org_xml_sax_la_SOURCES) $(lib_org_w3c_dom_la_SOURCES) $(lib_gnu_java_awt_peer_gtk_la_SOURCES) $(lib_gnu_awt_xlib_la_SOURCES) $(EXTRA_lib_gnu_awt_xlib_la_SOURCES) $(jv_convert_SOURCES) $(EXTRA_jv_convert_SOURCES) $(gij_SOURCES) $(rmic_SOURCES) $(EXTRA_rmic_SOURCES) $(rmiregistry_SOURCES) $(EXTRA_rmiregistry_SOURCES) $(gen_from_JIS_SOURCES) $(EXTRA_gen_from_JIS_SOURCES)
! OBJECTS = $(libgcj_la_OBJECTS) $(lib_org_xml_sax_la_OBJECTS) $(lib_org_w3c_dom_la_OBJECTS) $(lib_gnu_java_awt_peer_gtk_la_OBJECTS) $(lib_gnu_awt_xlib_la_OBJECTS) $(jv_convert_OBJECTS) $(gij_OBJECTS) $(rmic_OBJECTS) $(rmiregistry_OBJECTS) $(gen_from_JIS_OBJECTS)
  
- all: all-redirect
  .SUFFIXES:
! .SUFFIXES: .S .c .cc .class .h .java .lo .o .obj .s
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile
  
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
  
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in  acinclude.m4 \
! 		./acinclude.m4 ./aclocal.m4 ./glib-2.0.m4 ./gtk-2.0.m4 \
! 		./libart.m4
  	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
  
! config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
! 	$(SHELL) ./config.status --recheck
! $(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
! 	cd $(srcdir) && $(AUTOCONF)
! libgcj.pc: $(top_builddir)/config.status libgcj.pc.in
! 	cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
! libgcj.spec: $(top_builddir)/config.status libgcj.spec.in
! 	cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
! libgcj-test.spec: $(top_builddir)/config.status libgcj-test.spec.in
! 	cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
  
! mostlyclean-toolexeclibLTLIBRARIES:
  
  clean-toolexeclibLTLIBRARIES:
  	-test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES)
  
! distclean-toolexeclibLTLIBRARIES:
  
! maintainer-clean-toolexeclibLTLIBRARIES:
  
! install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir)
! 	@list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
! 	  if test -f $$p; then \
! 	    echo "$(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \
! 	    $(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \
  	  else :; fi; \
  	done
  
! uninstall-toolexeclibLTLIBRARIES:
  	@$(NORMAL_UNINSTALL)
! 	list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
! 	  $(LIBTOOL)  --mode=uninstall rm -f $(DESTDIR)$(toolexeclibdir)/$$p; \
  	done
  
! # FIXME: We should only use cygpath when building on Windows,
! # and only if it is available.
  .c.obj:
! 	$(COMPILE) -c `cygpath -w $<`
  
! .s.o:
! 	$(COMPILE) -c $<
  
! .S.o:
! 	$(COMPILE) -c $<
  
! mostlyclean-compile:
! 	-rm -f *.o core *.core
! 	-rm -f *.$(OBJEXT)
  
! clean-compile:
  
! distclean-compile:
! 	-rm -f *.tab.c
  
! maintainer-clean-compile:
  
! .s.lo:
! 	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
  
! .S.lo:
! 	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
  
! mostlyclean-libtool:
! 	-rm -f *.lo
  
! clean-libtool:
! 	-rm -rf .libs _libs
  
! distclean-libtool:
  
! maintainer-clean-libtool:
  
! lib-org-xml-sax.la: $(lib_org_xml_sax_la_OBJECTS) $(lib_org_xml_sax_la_DEPENDENCIES)
! 	$(LINK) -rpath $(toolexeclibdir) $(lib_org_xml_sax_la_LDFLAGS) $(lib_org_xml_sax_la_OBJECTS) $(lib_org_xml_sax_la_LIBADD) $(LIBS)
  
! lib-org-w3c-dom.la: $(lib_org_w3c_dom_la_OBJECTS) $(lib_org_w3c_dom_la_DEPENDENCIES)
! 	$(LINK) -rpath $(toolexeclibdir) $(lib_org_w3c_dom_la_LDFLAGS) $(lib_org_w3c_dom_la_OBJECTS) $(lib_org_w3c_dom_la_LIBADD) $(LIBS)
  
! lib-gnu-java-awt-peer-gtk.la: $(lib_gnu_java_awt_peer_gtk_la_OBJECTS) $(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES)
! 	$(LINK) -rpath $(toolexeclibdir) $(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)
  
! mostlyclean-binPROGRAMS:
  
! clean-binPROGRAMS:
! 	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
  
! distclean-binPROGRAMS:
  
! maintainer-clean-binPROGRAMS:
  
! install-binPROGRAMS: $(bin_PROGRAMS)
! 	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(bindir)
! 	@list='$(bin_PROGRAMS)'; for p in $$list; do \
! 	  if test -f $$p; then \
! 	    echo " $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
! 	    $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
! 	  else :; fi; \
! 	done
  
! uninstall-binPROGRAMS:
! 	@$(NORMAL_UNINSTALL)
! 	list='$(bin_PROGRAMS)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
! 	done
  
! mostlyclean-noinstPROGRAMS:
  
! clean-noinstPROGRAMS:
! 	-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
  
! distclean-noinstPROGRAMS:
  
! maintainer-clean-noinstPROGRAMS:
  
! jv-convert$(EXEEXT): $(jv_convert_OBJECTS) $(jv_convert_DEPENDENCIES)
! 	@rm -f jv-convert$(EXEEXT)
! 	$(jv_convert_LINK) $(jv_convert_LDFLAGS) $(jv_convert_OBJECTS) $(jv_convert_LDADD) $(LIBS)
  
! gij$(EXEEXT): $(gij_OBJECTS) $(gij_DEPENDENCIES)
! 	@rm -f gij$(EXEEXT)
! 	$(gij_LINK) $(gij_LDFLAGS) $(gij_OBJECTS) $(gij_LDADD) $(LIBS)
  
! rmic$(EXEEXT): $(rmic_OBJECTS) $(rmic_DEPENDENCIES)
! 	@rm -f rmic$(EXEEXT)
! 	$(rmic_LINK) $(rmic_LDFLAGS) $(rmic_OBJECTS) $(rmic_LDADD) $(LIBS)
  
! rmiregistry$(EXEEXT): $(rmiregistry_OBJECTS) $(rmiregistry_DEPENDENCIES)
! 	@rm -f rmiregistry$(EXEEXT)
! 	$(rmiregistry_LINK) $(rmiregistry_LDFLAGS) $(rmiregistry_OBJECTS) $(rmiregistry_LDADD) $(LIBS)
  
! gen-from-JIS$(EXEEXT): $(gen_from_JIS_OBJECTS) $(gen_from_JIS_DEPENDENCIES)
! 	@rm -f gen-from-JIS$(EXEEXT)
! 	$(LINK) $(gen_from_JIS_LDFLAGS) $(gen_from_JIS_OBJECTS) $(gen_from_JIS_LDADD) $(LIBS)
  
! install-binSCRIPTS: $(bin_SCRIPTS)
! 	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(bindir)
! 	@list='$(bin_SCRIPTS)'; for p in $$list; do \
! 	  if test -f $$p; then \
! 	    echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
! 	    $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
! 	  else if test -f $(srcdir)/$$p; then \
! 	    echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
! 	    $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
! 	  else :; fi; fi; \
! 	done
  
- uninstall-binSCRIPTS:
- 	@$(NORMAL_UNINSTALL)
- 	list='$(bin_SCRIPTS)'; for p in $$list; do \
- 	  rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
- 	done
  .cc.o:
! 	$(CXXCOMPILE) -c $<
  .cc.obj:
! 	$(CXXCOMPILE) -c `cygpath -w $<`
  .cc.lo:
! 	$(LTCXXCOMPILE) -c $<
  
  install-jarDATA: $(jar_DATA)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(jardir)
  	@list='$(jar_DATA)'; for p in $$list; do \
! 	  if test -f $(srcdir)/$$p; then \
! 	    echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(jardir)/$$p"; \
! 	    $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(jardir)/$$p; \
! 	  else if test -f $$p; then \
! 	    echo " $(INSTALL_DATA) $$p $(DESTDIR)$(jardir)/$$p"; \
! 	    $(INSTALL_DATA) $$p $(DESTDIR)$(jardir)/$$p; \
! 	  fi; fi; \
  	done
  
  uninstall-jarDATA:
  	@$(NORMAL_UNINSTALL)
! 	list='$(jar_DATA)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(jardir)/$$p; \
  	done
- 
  install-pkgconfigDATA: $(pkgconfig_DATA)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
  	@list='$(pkgconfig_DATA)'; for p in $$list; do \
! 	  if test -f $(srcdir)/$$p; then \
! 	    echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
! 	    $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p; \
! 	  else if test -f $$p; then \
! 	    echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
! 	    $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p; \
! 	  fi; fi; \
  	done
  
  uninstall-pkgconfigDATA:
  	@$(NORMAL_UNINSTALL)
! 	list='$(pkgconfig_DATA)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(pkgconfigdir)/$$p; \
  	done
- 
  install-toolexecmainlibDATA: $(toolexecmainlib_DATA)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(toolexecmainlibdir)
  	@list='$(toolexecmainlib_DATA)'; for p in $$list; do \
! 	  if test -f $(srcdir)/$$p; then \
! 	    echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(toolexecmainlibdir)/$$p"; \
! 	    $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(toolexecmainlibdir)/$$p; \
! 	  else if test -f $$p; then \
! 	    echo " $(INSTALL_DATA) $$p $(DESTDIR)$(toolexecmainlibdir)/$$p"; \
! 	    $(INSTALL_DATA) $$p $(DESTDIR)$(toolexecmainlibdir)/$$p; \
! 	  fi; fi; \
  	done
  
  uninstall-toolexecmainlibDATA:
  	@$(NORMAL_UNINSTALL)
! 	list='$(toolexecmainlib_DATA)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(toolexecmainlibdir)/$$p; \
  	done
  
  # This directory's subdirectories are mostly independent; you can cd
--- 7595,22648 ----
  MULTISUBDIR = 
  MULTIDO = true
  MULTICLEAN = true
! 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*) \
! 	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
! 	      cd $(srcdir) && $(AUTOMAKE) --foreign  \
! 		&& exit 0; \
! 	      exit 1;; \
! 	  esac; \
! 	done; \
! 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  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)
+ libgcj.pc: $(top_builddir)/config.status $(srcdir)/libgcj.pc.in
+ 	cd $(top_builddir) && $(SHELL) ./config.status $@
+ libgcj.spec: $(top_builddir)/config.status $(srcdir)/libgcj.spec.in
+ 	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)"
! 	@list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
! 	  if test -f $$p; then \
! 	    f=$(am__strip_dir) \
! 	    echo " $(LIBTOOL) --mode=install $(toolexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(toolexeclibdir)/$$f'"; \
! 	    $(LIBTOOL) --mode=install $(toolexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(toolexeclibdir)/$$f"; \
! 	  else :; fi; \
! 	done
  
! uninstall-toolexeclibLTLIBRARIES:
! 	@$(NORMAL_UNINSTALL)
! 	@set -x; list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
! 	  p=$(am__strip_dir) \
! 	  echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(toolexeclibdir)/$$p'"; \
! 	  $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(toolexeclibdir)/$$p"; \
! 	done
  
  clean-toolexeclibLTLIBRARIES:
  	-test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES)
+ 	@list='$(toolexeclib_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
+ gnu/gcj/xlib/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/xlib
+ 	@: > gnu/gcj/xlib/$(am__dirstamp)
+ gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/xlib/$(DEPDIR)
+ 	@: > gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/Clip.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/Colormap.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/Display.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/Drawable.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/Font.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/GC.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/Pixmap.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/Screen.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/Visual.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/WMSizeHints.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/Window.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/WindowAttributes.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XAnyEvent.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XButtonEvent.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XColor.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XConfigureEvent.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XConnectException.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XEvent.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XException.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XExposeEvent.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XID.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XImage.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/XUnmapEvent.lo: gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/awt/xlib
+ 	@: > gnu/awt/xlib/$(am__dirstamp)
+ gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/awt/xlib/$(DEPDIR)
+ 	@: > gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XCanvasPeer.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XEventLoop.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XEventQueue.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XFontMetrics.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XFramePeer.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XGraphics.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XGraphicsConfiguration.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XOffScreenImage.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XPanelPeer.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XFontPeer.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/xlib/XToolkit.lo: gnu/awt/xlib/$(am__dirstamp) \
+ 	gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natFont.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natGC.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natPixmap.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natScreen.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natVisual.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWMSizeHints.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindow.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindowAttributes.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXAnyEvent.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXButtonEvent.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXColor.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXConfigureEvent.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXException.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.lo:  \
+ 	gnu/gcj/xlib/$(am__dirstamp) \
+ 	gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
+ 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)
+ gnu/gcj/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/$(DEPDIR)
+ 	@: > gnu/gcj/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/natCore.lo: gnu/gcj/$(am__dirstamp) \
+ 	gnu/gcj/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/convert
+ 	@: > gnu/gcj/convert/$(am__dirstamp)
+ gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/convert/$(DEPDIR)
+ 	@: > gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/JIS0208_to_Unicode.lo:  \
+ 	gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/JIS0212_to_Unicode.lo:  \
+ 	gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Unicode_to_JIS.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/natIconv.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/natInput_EUCJIS.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/natInput_SJIS.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/natOutput_EUCJIS.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/natOutput_SJIS.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/io/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/io
+ 	@: > gnu/gcj/io/$(am__dirstamp)
+ gnu/gcj/io/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/io/$(DEPDIR)
+ 	@: > gnu/gcj/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/io/natSimpleSHSStream.lo: gnu/gcj/io/$(am__dirstamp) \
+ 	gnu/gcj/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/io/shs.lo: gnu/gcj/io/$(am__dirstamp) \
+ 	gnu/gcj/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/runtime
+ 	@: > gnu/gcj/runtime/$(am__dirstamp)
+ gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/runtime/$(DEPDIR)
+ 	@: > gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ 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):
+ 	@$(mkdir_p) gnu/gcj/util
+ 	@: > gnu/gcj/util/$(am__dirstamp)
+ gnu/gcj/util/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/gcj/util/$(DEPDIR)
+ 	@: > gnu/gcj/util/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/util/natDebug.lo: gnu/gcj/util/$(am__dirstamp) \
+ 	gnu/gcj/util/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/lang/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/lang
+ 	@: > gnu/java/lang/$(am__dirstamp)
+ gnu/java/lang/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/lang/$(DEPDIR)
+ 	@: > gnu/java/lang/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/lang/natMainThread.lo: gnu/java/lang/$(am__dirstamp) \
+ 	gnu/java/lang/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net
+ 	@: > gnu/java/net/$(am__dirstamp)
+ gnu/java/net/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/$(DEPDIR)
+ 	@: > gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/natPlainDatagramSocketImpl.lo:  \
+ 	gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/natPlainSocketImpl.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/core/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/core
+ 	@: > gnu/java/net/protocol/core/$(am__dirstamp)
+ gnu/java/net/protocol/core/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/core/$(DEPDIR)
+ 	@: > gnu/java/net/protocol/core/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/core/natCoreInputStream.lo:  \
+ 	gnu/java/net/protocol/core/$(am__dirstamp) \
+ 	gnu/java/net/protocol/core/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/nio
+ 	@: > gnu/java/nio/$(am__dirstamp)
+ gnu/java/nio/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/nio/$(DEPDIR)
+ 	@: > gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/natPipeImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/natSelectorImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/natNIOServerSocket.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/channels/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/nio/channels
+ 	@: > gnu/java/nio/channels/$(am__dirstamp)
+ gnu/java/nio/channels/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/nio/channels/$(DEPDIR)
+ 	@: > gnu/java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/channels/natFileChannelImpl.lo:  \
+ 	gnu/java/nio/channels/$(am__dirstamp) \
+ 	gnu/java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/io/$(am__dirstamp):
+ 	@$(mkdir_p) java/io
+ 	@: > java/io/$(am__dirstamp)
+ java/io/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/io/$(DEPDIR)
+ 	@: > java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/natFile.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/natObjectInputStream.lo: java/io/$(am__dirstamp) \
+ 	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) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natClassLoader.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natConcreteProcess.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natDouble.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natFloat.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natMath.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natObject.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natRuntime.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natString.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natStringBuffer.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/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natVMClassLoader.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/natVMSecurityManager.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/ref/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/lang/ref/$(DEPDIR)
+ 	@: > java/lang/ref/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ref/natReference.lo: java/lang/ref/$(am__dirstamp) \
+ 	java/lang/ref/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/$(am__dirstamp):
+ 	@$(mkdir_p) java/lang/reflect
+ 	@: > java/lang/reflect/$(am__dirstamp)
+ java/lang/reflect/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/lang/reflect/$(DEPDIR)
+ 	@: > java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/natArray.lo: java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/natConstructor.lo:  \
+ 	java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/natField.lo: java/lang/reflect/$(am__dirstamp) \
+ 	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)
+ java/nio/channels/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio/channels
+ 	@: > java/nio/channels/$(am__dirstamp)
+ java/nio/channels/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio/channels/$(DEPDIR)
+ 	@: > java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/natChannels.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio
+ 	@: > java/nio/$(am__dirstamp)
+ java/nio/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio/$(DEPDIR)
+ 	@: > java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/natDirectByteBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/text/$(am__dirstamp):
+ 	@$(mkdir_p) java/text
+ 	@: > java/text/$(am__dirstamp)
+ java/text/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/text/$(DEPDIR)
+ 	@: > java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/natCollator.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/util/$(am__dirstamp):
+ 	@$(mkdir_p) java/util
+ 	@: > java/util/$(am__dirstamp)
+ java/util/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/$(DEPDIR)
+ 	@: > java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/natResourceBundle.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/natVMTimeZone.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/logging
+ 	@: > java/util/logging/$(am__dirstamp)
+ java/util/logging/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/logging/$(DEPDIR)
+ 	@: > java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/natLogger.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/zip
+ 	@: > java/util/zip/$(am__dirstamp)
+ java/util/zip/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/zip/$(DEPDIR)
+ 	@: > java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/natDeflater.lo: java/util/zip/$(am__dirstamp) \
+ 	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)
+ 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)
+ java/lang/AbstractMethodError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ArithmeticException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ArrayIndexOutOfBoundsException.lo:  \
+ 	java/lang/$(am__dirstamp) java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ArrayStoreException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/AssertionError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Boolean.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Byte.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Character.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/CharSequence.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ClassCastException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ClassCircularityError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ClassFormatError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ClassLoader.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ClassNotFoundException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/CloneNotSupportedException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Cloneable.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Comparable.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Compiler.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Double.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Error.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Exception.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ExceptionInInitializerError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Float.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/IllegalAccessError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/IllegalAccessException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/IllegalArgumentException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/IllegalMonitorStateException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/IllegalStateException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/IllegalThreadStateException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/IncompatibleClassChangeError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/IndexOutOfBoundsException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/InheritableThreadLocal.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/InstantiationError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/InstantiationException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Integer.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/InternalError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/InterruptedException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/LinkageError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Long.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Math.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/NegativeArraySizeException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/NoClassDefFoundError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/NoSuchFieldError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/NoSuchFieldException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/NoSuchMethodError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/NoSuchMethodException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/NullPointerException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Number.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/NumberFormatException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/OutOfMemoryError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Package.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Process.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Runnable.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Runtime.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/RuntimeException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/RuntimePermission.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/SecurityException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/SecurityManager.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Short.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/StackOverflowError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/StackTraceElement.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/StrictMath.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/String.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/StringBuffer.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/StringIndexOutOfBoundsException.lo:  \
+ 	java/lang/$(am__dirstamp) java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/System.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Thread.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ThreadDeath.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ThreadGroup.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ThreadLocal.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Throwable.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/UnknownError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/UnsatisfiedLinkError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/UnsupportedClassVersionError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/UnsupportedOperationException.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/VerifyError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/VirtualMachineError.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/VMClassLoader.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/VMCompiler.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/VMSecurityManager.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/VMThrowable.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/lang/Void.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ java/io/BufferedInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/BufferedOutputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/BufferedReader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/BufferedWriter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ByteArrayInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ByteArrayOutputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/CharArrayReader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/CharArrayWriter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/CharConversionException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/DataInput.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/DataInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/DataOutput.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/DataOutputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/EOFException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/Externalizable.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/File.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FileDescriptor.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FileFilter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FileInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FileNotFoundException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FileOutputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FilePermission.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FileReader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FileWriter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FilenameFilter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FilterInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FilterOutputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FilterReader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/FilterWriter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/IOException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/InputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/InputStreamReader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/InterruptedIOException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/InvalidClassException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/InvalidObjectException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/LineNumberInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/LineNumberReader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/NotActiveException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/NotSerializableException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ObjectInput.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ObjectInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ObjectInputValidation.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ObjectOutput.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ObjectOutputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ObjectStreamClass.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ObjectStreamConstants.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ObjectStreamException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/ObjectStreamField.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/OptionalDataException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/OutputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/OutputStreamWriter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/PipedInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/PipedOutputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/PipedReader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/PipedWriter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/PrintStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/PrintWriter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/PushbackInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/PushbackReader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/RandomAccessFile.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/Reader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/SequenceInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/Serializable.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/SerializablePermission.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/StreamCorruptedException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/StreamTokenizer.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/StringBufferInputStream.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/StringReader.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/StringWriter.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/SyncFailedException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/UTFDataFormatException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/UnsupportedEncodingException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/VMObjectStreamClass.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/WriteAbortedException.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/io/Writer.lo: java/io/$(am__dirstamp) \
+ 	java/io/$(DEPDIR)/$(am__dirstamp)
+ java/util/AbstractCollection.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/AbstractList.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/AbstractMap.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/AbstractSequentialList.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/AbstractSet.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/ArrayList.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Arrays.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/BitSet.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Calendar.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Collection.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Collections.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Comparator.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/ConcurrentModificationException.lo:  \
+ 	java/util/$(am__dirstamp) java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Currency.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Date.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Dictionary.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/EmptyStackException.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Enumeration.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/EventListener.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/EventListenerProxy.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/EventObject.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/GregorianCalendar.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/HashMap.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/HashSet.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Hashtable.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/IdentityHashMap.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Iterator.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/LinkedList.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/LinkedHashMap.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/LinkedHashSet.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/List.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/ListIterator.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/ListResourceBundle.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Locale.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Map.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/MissingResourceException.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/NoSuchElementException.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Observable.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Observer.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Properties.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/PropertyPermission.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/PropertyPermissionCollection.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/PropertyResourceBundle.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Random.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/RandomAccess.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/ResourceBundle.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Set.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/SimpleTimeZone.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/SortedMap.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/SortedSet.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Stack.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/StringTokenizer.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/TimeZone.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Timer.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/TimerTask.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/TreeMap.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/TreeSet.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/TooManyListenersException.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/Vector.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/VMTimeZone.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/WeakHashMap.lo: java/util/$(am__dirstamp) \
+ 	java/util/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/ConsoleHandler.lo:  \
+ 	java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/ErrorManager.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/FileHandler.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/Filter.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/Formatter.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/Handler.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/Level.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/Logger.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/LoggingPermission.lo:  \
+ 	java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/LogManager.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/LogRecord.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/MemoryHandler.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/SimpleFormatter.lo:  \
+ 	java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/SocketHandler.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/StreamHandler.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/logging/XMLFormatter.lo: java/util/logging/$(am__dirstamp) \
+ 	java/util/logging/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/prefs
+ 	@: > java/util/prefs/$(am__dirstamp)
+ java/util/prefs/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/prefs/$(DEPDIR)
+ 	@: > java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/NodeChangeListener.lo:  \
+ 	java/util/prefs/$(am__dirstamp) \
+ 	java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/Preferences.lo: java/util/prefs/$(am__dirstamp) \
+ 	java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/PreferenceChangeListener.lo:  \
+ 	java/util/prefs/$(am__dirstamp) \
+ 	java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/NodeChangeEvent.lo: java/util/prefs/$(am__dirstamp) \
+ 	java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/InvalidPreferencesFormatException.lo:  \
+ 	java/util/prefs/$(am__dirstamp) \
+ 	java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/AbstractPreferences.lo:  \
+ 	java/util/prefs/$(am__dirstamp) \
+ 	java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/BackingStoreException.lo:  \
+ 	java/util/prefs/$(am__dirstamp) \
+ 	java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/PreferenceChangeEvent.lo:  \
+ 	java/util/prefs/$(am__dirstamp) \
+ 	java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/prefs/PreferencesFactory.lo:  \
+ 	java/util/prefs/$(am__dirstamp) \
+ 	java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ java/util/regex/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/regex
+ 	@: > java/util/regex/$(am__dirstamp)
+ java/util/regex/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/regex/$(DEPDIR)
+ 	@: > java/util/regex/$(DEPDIR)/$(am__dirstamp)
+ java/util/regex/Matcher.lo: java/util/regex/$(am__dirstamp) \
+ 	java/util/regex/$(DEPDIR)/$(am__dirstamp)
+ java/util/regex/Pattern.lo: java/util/regex/$(am__dirstamp) \
+ 	java/util/regex/$(DEPDIR)/$(am__dirstamp)
+ java/util/regex/PatternSyntaxException.lo:  \
+ 	java/util/regex/$(am__dirstamp) \
+ 	java/util/regex/$(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/ServiceFactory.lo: gnu/classpath/$(am__dirstamp) \
+ 	gnu/classpath/$(DEPDIR)/$(am__dirstamp)
+ gnu/classpath/ServiceProviderLoadingAction.lo:  \
+ 	gnu/classpath/$(am__dirstamp) \
+ 	gnu/classpath/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/Core.lo: gnu/gcj/$(am__dirstamp) \
+ 	gnu/gcj/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/RawData.lo: gnu/gcj/$(am__dirstamp) \
+ 	gnu/gcj/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/RawDataManaged.lo: gnu/gcj/$(am__dirstamp) \
+ 	gnu/gcj/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/io/DefaultMimeTypes.lo: gnu/gcj/io/$(am__dirstamp) \
+ 	gnu/gcj/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/io/MimeTypes.lo: gnu/gcj/io/$(am__dirstamp) \
+ 	gnu/gcj/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/io/SimpleSHSStream.lo: gnu/gcj/io/$(am__dirstamp) \
+ 	gnu/gcj/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/BootClassLoader.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/ExtensionClassLoader.lo:  \
+ 	gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/FileDeleter.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/FinalizerThread.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/HelperClassLoader.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/JNIWeakRef.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/MethodRef.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/NameFinder.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/PersistentByteMap.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/SharedLibHelper.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/SharedLibLoader.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/StringBuffer.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/StackTrace.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/runtime/SystemClassLoader.lo: gnu/gcj/runtime/$(am__dirstamp) \
+ 	gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/util/Debug.lo: gnu/gcj/util/$(am__dirstamp) \
+ 	gnu/gcj/util/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/io/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/io
+ 	@: > gnu/java/io/$(am__dirstamp)
+ gnu/java/io/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/io/$(DEPDIR)
+ 	@: > gnu/java/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/io/ASN1ParsingException.lo: gnu/java/io/$(am__dirstamp) \
+ 	gnu/java/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/io/Base64InputStream.lo: gnu/java/io/$(am__dirstamp) \
+ 	gnu/java/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/io/ClassLoaderObjectInputStream.lo:  \
+ 	gnu/java/io/$(am__dirstamp) \
+ 	gnu/java/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/io/NullOutputStream.lo: gnu/java/io/$(am__dirstamp) \
+ 	gnu/java/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/io/ObjectIdentityWrapper.lo: gnu/java/io/$(am__dirstamp) \
+ 	gnu/java/io/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/lang/ArrayHelper.lo: gnu/java/lang/$(am__dirstamp) \
+ 	gnu/java/lang/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/lang/ClassHelper.lo: gnu/java/lang/$(am__dirstamp) \
+ 	gnu/java/lang/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/lang/MainThread.lo: gnu/java/lang/$(am__dirstamp) \
+ 	gnu/java/lang/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/lang/reflect/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/lang/reflect
+ 	@: > gnu/java/lang/reflect/$(am__dirstamp)
+ gnu/java/lang/reflect/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/lang/reflect/$(DEPDIR)
+ 	@: > gnu/java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/lang/reflect/TypeSignature.lo:  \
+ 	gnu/java/lang/reflect/$(am__dirstamp) \
+ 	gnu/java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/locale
+ 	@: > gnu/java/locale/$(am__dirstamp)
+ gnu/java/locale/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/locale/$(DEPDIR)
+ 	@: > gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/Calendar.lo: gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/Calendar_de.lo: gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/Calendar_en.lo: gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/Calendar_nl.lo: gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation.lo: gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_af_ZA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_AE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_BH.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_DZ.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_EG.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_IN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_IQ.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_JO.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_KW.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_LB.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_LY.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_MA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_OM.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_QA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_SD.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_SY.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_TN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ar_YE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_be_BY.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_bn_IN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_br_FR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_bs_BA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ca_ES.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_cs_CZ.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_cy_GB.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_da_DK.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_de.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_de_AT.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_de_BE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_de_CH.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_de_DE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_de_LU.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_el_GR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_AU.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_BW.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_CA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_DK.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_GB.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_HK.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_IE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_IN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_NZ.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_PH.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_SG.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_US.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_ZA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_en_ZW.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_AR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_BO.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_CL.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_CO.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_CR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_DO.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_EC.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_ES.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_GT.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_HN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_MX.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_NI.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_PA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_PE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_PR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_PY.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_SV.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_US.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_UY.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_es_VE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_et_EE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_eu_ES.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_fa_IR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_fi_FI.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_fo_FO.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_fr_BE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_fr_CA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_fr_CH.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_fr_FR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_fr_LU.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ga_IE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_gd_GB.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_gl_ES.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_gv_GB.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_he_IL.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_hi_IN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_hr_HR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_hu_HU.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_id_ID.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_it_CH.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_it_IT.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_iw_IL.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ja_JP.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ka_GE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_kl_GL.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ko_KR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_kw_GB.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_lt_LT.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_lv_LV.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_mi_NZ.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_mk_MK.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_mr_IN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_mt_MT.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_nl.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_nl_BE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_nl_NL.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_nn_NO.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_no_NO.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_oc_FR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_pl_PL.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_pt_BR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_pt_PT.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ro_RO.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ru_RU.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ru_UA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_se_NO.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_sk_SK.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_sl_SI.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_sq_AL.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_sr_YU.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_sv_FI.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_sv_SE.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ta_IN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_te_IN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_tg_TJ.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_tl_PH.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_tr_TR.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_uk_UA.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_ur_PK.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_uz_UZ.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_vi_VN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_yi_US.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_zh_CN.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_zh_HK.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_zh_SG.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/locale/LocaleInformation_zh_TW.lo:  \
+ 	gnu/java/locale/$(am__dirstamp) \
+ 	gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/math/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/math
+ 	@: > gnu/java/math/$(am__dirstamp)
+ gnu/java/math/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/math/$(DEPDIR)
+ 	@: > gnu/java/math/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/math/MPN.lo: gnu/java/math/$(am__dirstamp) \
+ 	gnu/java/math/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/BASE64.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/CRLFInputStream.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/CRLFOutputStream.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/DefaultContentHandlerFactory.lo:  \
+ 	gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/EmptyX509TrustManager.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/GetLocalHostAction.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/HeaderFieldHelper.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/LineInputStream.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/PlainDatagramSocketImpl.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/PlainSocketImpl.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/URLParseError.lo: gnu/java/net/$(am__dirstamp) \
+ 	gnu/java/net/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/core/Connection.lo:  \
+ 	gnu/java/net/protocol/core/$(am__dirstamp) \
+ 	gnu/java/net/protocol/core/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/core/CoreInputStream.lo:  \
+ 	gnu/java/net/protocol/core/$(am__dirstamp) \
+ 	gnu/java/net/protocol/core/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/core/Handler.lo:  \
+ 	gnu/java/net/protocol/core/$(am__dirstamp) \
+ 	gnu/java/net/protocol/core/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/file/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/file
+ 	@: > gnu/java/net/protocol/file/$(am__dirstamp)
+ gnu/java/net/protocol/file/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/file/$(DEPDIR)
+ 	@: > gnu/java/net/protocol/file/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/file/Connection.lo:  \
+ 	gnu/java/net/protocol/file/$(am__dirstamp) \
+ 	gnu/java/net/protocol/file/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/file/Handler.lo:  \
+ 	gnu/java/net/protocol/file/$(am__dirstamp) \
+ 	gnu/java/net/protocol/file/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/ftp
+ 	@: > gnu/java/net/protocol/ftp/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/ftp/$(DEPDIR)
+ 	@: > gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/ActiveModeDTP.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/BlockInputStream.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/BlockOutputStream.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/CompressedInputStream.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/CompressedOutputStream.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/DTP.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/DTPInputStream.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/DTPOutputStream.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/FTPConnection.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/FTPException.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/FTPResponse.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/FTPURLConnection.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/Handler.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/PassiveModeDTP.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/StreamInputStream.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/ftp/StreamOutputStream.lo:  \
+ 	gnu/java/net/protocol/ftp/$(am__dirstamp) \
+ 	gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/gcjlib/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/gcjlib
+ 	@: > gnu/java/net/protocol/gcjlib/$(am__dirstamp)
+ gnu/java/net/protocol/gcjlib/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/gcjlib/$(DEPDIR)
+ 	@: > gnu/java/net/protocol/gcjlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/gcjlib/Connection.lo:  \
+ 	gnu/java/net/protocol/gcjlib/$(am__dirstamp) \
+ 	gnu/java/net/protocol/gcjlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/gcjlib/Handler.lo:  \
+ 	gnu/java/net/protocol/gcjlib/$(am__dirstamp) \
+ 	gnu/java/net/protocol/gcjlib/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/http
+ 	@: > gnu/java/net/protocol/http/$(am__dirstamp)
+ gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/http/$(DEPDIR)
+ 	@: > gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/Authenticator.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/ByteArrayResponseBodyReader.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/ChunkedInputStream.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/Cookie.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/CookieManager.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/Credentials.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/HTTPConnection.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/HTTPDateFormat.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/HTTPURLConnection.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/Handler.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/Headers.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/Request.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/RequestBodyWriter.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/Response.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/ResponseBodyReader.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/ResponseHeaderHandler.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/SimpleCookieManager.lo:  \
+ 	gnu/java/net/protocol/http/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/event/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/http/event
+ 	@: > gnu/java/net/protocol/http/event/$(am__dirstamp)
+ gnu/java/net/protocol/http/event/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/http/event/$(DEPDIR)
+ 	@: > gnu/java/net/protocol/http/event/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/event/ConnectionEvent.lo:  \
+ 	gnu/java/net/protocol/http/event/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/event/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/event/ConnectionListener.lo:  \
+ 	gnu/java/net/protocol/http/event/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/event/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/event/RequestEvent.lo:  \
+ 	gnu/java/net/protocol/http/event/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/event/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/http/event/RequestListener.lo:  \
+ 	gnu/java/net/protocol/http/event/$(am__dirstamp) \
+ 	gnu/java/net/protocol/http/event/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/jar/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/jar
+ 	@: > gnu/java/net/protocol/jar/$(am__dirstamp)
+ gnu/java/net/protocol/jar/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/net/protocol/jar/$(DEPDIR)
+ 	@: > gnu/java/net/protocol/jar/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/jar/Connection.lo:  \
+ 	gnu/java/net/protocol/jar/$(am__dirstamp) \
+ 	gnu/java/net/protocol/jar/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/net/protocol/jar/Handler.lo:  \
+ 	gnu/java/net/protocol/jar/$(am__dirstamp) \
+ 	gnu/java/net/protocol/jar/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/ChannelInputStream.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/ChannelOutputStream.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/ChannelReader.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/DatagramChannelImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/DatagramChannelSelectionKey.lo:  \
+ 	gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/FileLockImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/InputStreamChannel.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/NIOConstants.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/NIODatagramSocket.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/NIOServerSocket.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/NIOSocket.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/OutputStreamChannel.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/PipeImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/SelectionKeyImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/SelectorImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/SelectorProviderImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/ServerSocketChannelImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/ServerSocketChannelSelectionKey.lo:  \
+ 	gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/SocketChannelImpl.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/SocketChannelSelectionKey.lo:  \
+ 	gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/VMPipe.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/VMSelector.lo: gnu/java/nio/$(am__dirstamp) \
+ 	gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/channels/FileChannelImpl.lo:  \
+ 	gnu/java/nio/channels/$(am__dirstamp) \
+ 	gnu/java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/nio/charset
+ 	@: > gnu/java/nio/charset/$(am__dirstamp)
+ gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/nio/charset/$(DEPDIR)
+ 	@: > gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/ISO_8859_1.lo:  \
+ 	gnu/java/nio/charset/$(am__dirstamp) \
+ 	gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/Provider.lo:  \
+ 	gnu/java/nio/charset/$(am__dirstamp) \
+ 	gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/US_ASCII.lo:  \
+ 	gnu/java/nio/charset/$(am__dirstamp) \
+ 	gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/UTF_16.lo: gnu/java/nio/charset/$(am__dirstamp) \
+ 	gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/UTF_16BE.lo:  \
+ 	gnu/java/nio/charset/$(am__dirstamp) \
+ 	gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/UTF_16Decoder.lo:  \
+ 	gnu/java/nio/charset/$(am__dirstamp) \
+ 	gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/UTF_16Encoder.lo:  \
+ 	gnu/java/nio/charset/$(am__dirstamp) \
+ 	gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/UTF_16LE.lo:  \
+ 	gnu/java/nio/charset/$(am__dirstamp) \
+ 	gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/nio/charset/UTF_8.lo: gnu/java/nio/charset/$(am__dirstamp) \
+ 	gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security
+ 	@: > gnu/java/security/$(am__dirstamp)
+ gnu/java/security/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/$(DEPDIR)
+ 	@: > gnu/java/security/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/Engine.lo: gnu/java/security/$(am__dirstamp) \
+ 	gnu/java/security/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/OID.lo: gnu/java/security/$(am__dirstamp) \
+ 	gnu/java/security/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/PolicyFile.lo: gnu/java/security/$(am__dirstamp) \
+ 	gnu/java/security/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/action/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/action
+ 	@: > gnu/java/security/action/$(am__dirstamp)
+ gnu/java/security/action/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/action/$(DEPDIR)
+ 	@: > gnu/java/security/action/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/action/GetPropertyAction.lo:  \
+ 	gnu/java/security/action/$(am__dirstamp) \
+ 	gnu/java/security/action/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/action/GetSecurityPropertyAction.lo:  \
+ 	gnu/java/security/action/$(am__dirstamp) \
+ 	gnu/java/security/action/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/action/SetAccessibleAction.lo:  \
+ 	gnu/java/security/action/$(am__dirstamp) \
+ 	gnu/java/security/action/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/ber/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/ber
+ 	@: > gnu/java/security/ber/$(am__dirstamp)
+ gnu/java/security/ber/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/ber/$(DEPDIR)
+ 	@: > gnu/java/security/ber/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/ber/BER.lo: gnu/java/security/ber/$(am__dirstamp) \
+ 	gnu/java/security/ber/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/ber/BEREncodingException.lo:  \
+ 	gnu/java/security/ber/$(am__dirstamp) \
+ 	gnu/java/security/ber/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/ber/BERReader.lo:  \
+ 	gnu/java/security/ber/$(am__dirstamp) \
+ 	gnu/java/security/ber/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/ber/BERValue.lo:  \
+ 	gnu/java/security/ber/$(am__dirstamp) \
+ 	gnu/java/security/ber/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/der/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/der
+ 	@: > gnu/java/security/der/$(am__dirstamp)
+ gnu/java/security/der/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/der/$(DEPDIR)
+ 	@: > gnu/java/security/der/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/der/BitString.lo:  \
+ 	gnu/java/security/der/$(am__dirstamp) \
+ 	gnu/java/security/der/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/der/DER.lo: gnu/java/security/der/$(am__dirstamp) \
+ 	gnu/java/security/der/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/der/DEREncodingException.lo:  \
+ 	gnu/java/security/der/$(am__dirstamp) \
+ 	gnu/java/security/der/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/der/DERReader.lo:  \
+ 	gnu/java/security/der/$(am__dirstamp) \
+ 	gnu/java/security/der/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/der/DERValue.lo:  \
+ 	gnu/java/security/der/$(am__dirstamp) \
+ 	gnu/java/security/der/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/der/DERWriter.lo:  \
+ 	gnu/java/security/der/$(am__dirstamp) \
+ 	gnu/java/security/der/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/pkcs/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/pkcs
+ 	@: > gnu/java/security/pkcs/$(am__dirstamp)
+ gnu/java/security/pkcs/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/pkcs/$(DEPDIR)
+ 	@: > gnu/java/security/pkcs/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/pkcs/PKCS7SignedData.lo:  \
+ 	gnu/java/security/pkcs/$(am__dirstamp) \
+ 	gnu/java/security/pkcs/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/pkcs/SignerInfo.lo:  \
+ 	gnu/java/security/pkcs/$(am__dirstamp) \
+ 	gnu/java/security/pkcs/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/provider
+ 	@: > gnu/java/security/provider/$(am__dirstamp)
+ gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/provider/$(DEPDIR)
+ 	@: > gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/CollectionCertStoreImpl.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/DSAKeyFactory.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/DSAKeyPairGenerator.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/DSAParameterGenerator.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/DSAParameters.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/DSASignature.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/DefaultPolicy.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/EncodedKeyFactory.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/Gnu.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/GnuDHPublicKey.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/GnuDSAPrivateKey.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/GnuDSAPublicKey.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/GnuRSAPrivateKey.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/GnuRSAPublicKey.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/MD2withRSA.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/MD4withRSA.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/MD5.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/MD5withRSA.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/PKIXCertPathValidatorImpl.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/RSA.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/RSAKeyFactory.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/SHA.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/SHA1PRNG.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/SHA1withRSA.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/provider/X509CertificateFactory.lo:  \
+ 	gnu/java/security/provider/$(am__dirstamp) \
+ 	gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/util/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/util
+ 	@: > gnu/java/security/util/$(am__dirstamp)
+ gnu/java/security/util/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/util/$(DEPDIR)
+ 	@: > gnu/java/security/util/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/util/Prime.lo:  \
+ 	gnu/java/security/util/$(am__dirstamp) \
+ 	gnu/java/security/util/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/x509
+ 	@: > gnu/java/security/x509/$(am__dirstamp)
+ gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/x509/$(DEPDIR)
+ 	@: > gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/GnuPKIExtension.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/PolicyNodeImpl.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/Util.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/X500DistinguishedName.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/X509CRL.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/X509CRLEntry.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/X509CRLSelectorImpl.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/X509Certificate.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/X509CertPath.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/X509CertSelectorImpl.lo:  \
+ 	gnu/java/security/x509/$(am__dirstamp) \
+ 	gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/x509/ext
+ 	@: > gnu/java/security/x509/ext/$(am__dirstamp)
+ gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/security/x509/ext/$(DEPDIR)
+ 	@: > gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/AuthorityKeyIdentifier.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/BasicConstraints.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/CRLNumber.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/CertificatePolicies.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/ExtendedKeyUsage.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/Extension.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/GeneralNames.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/IssuerAlternativeNames.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/KeyUsage.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/PolicyConstraint.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/PolicyMappings.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/PrivateKeyUsagePeriod.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/ReasonCode.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/SubjectAlternativeNames.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/security/x509/ext/SubjectKeyIdentifier.lo:  \
+ 	gnu/java/security/x509/ext/$(am__dirstamp) \
+ 	gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/text
+ 	@: > gnu/java/text/$(am__dirstamp)
+ gnu/java/text/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/text/$(DEPDIR)
+ 	@: > gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/AttributedFormatBuffer.lo:  \
+ 	gnu/java/text/$(am__dirstamp) \
+ 	gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/BaseBreakIterator.lo: gnu/java/text/$(am__dirstamp) \
+ 	gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/CharacterBreakIterator.lo:  \
+ 	gnu/java/text/$(am__dirstamp) \
+ 	gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/FormatBuffer.lo: gnu/java/text/$(am__dirstamp) \
+ 	gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/FormatCharacterIterator.lo:  \
+ 	gnu/java/text/$(am__dirstamp) \
+ 	gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/LineBreakIterator.lo: gnu/java/text/$(am__dirstamp) \
+ 	gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/SentenceBreakIterator.lo: gnu/java/text/$(am__dirstamp) \
+ 	gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/StringFormatBuffer.lo: gnu/java/text/$(am__dirstamp) \
+ 	gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/text/WordBreakIterator.lo: gnu/java/text/$(am__dirstamp) \
+ 	gnu/java/text/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/util/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/util
+ 	@: > gnu/java/util/$(am__dirstamp)
+ gnu/java/util/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/util/$(DEPDIR)
+ 	@: > gnu/java/util/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/util/DoubleEnumeration.lo: gnu/java/util/$(am__dirstamp) \
+ 	gnu/java/util/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/util/EmptyEnumeration.lo: gnu/java/util/$(am__dirstamp) \
+ 	gnu/java/util/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/util/prefs/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/util/prefs
+ 	@: > gnu/java/util/prefs/$(am__dirstamp)
+ gnu/java/util/prefs/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/util/prefs/$(DEPDIR)
+ 	@: > gnu/java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/util/prefs/FileBasedFactory.lo:  \
+ 	gnu/java/util/prefs/$(am__dirstamp) \
+ 	gnu/java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/util/prefs/MemoryBasedFactory.lo:  \
+ 	gnu/java/util/prefs/$(am__dirstamp) \
+ 	gnu/java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/util/prefs/MemoryBasedPreferences.lo:  \
+ 	gnu/java/util/prefs/$(am__dirstamp) \
+ 	gnu/java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/util/prefs/NodeReader.lo:  \
+ 	gnu/java/util/prefs/$(am__dirstamp) \
+ 	gnu/java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/util/prefs/NodeWriter.lo:  \
+ 	gnu/java/util/prefs/$(am__dirstamp) \
+ 	gnu/java/util/prefs/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/regexp
+ 	@: > gnu/regexp/$(am__dirstamp)
+ gnu/regexp/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/regexp/$(DEPDIR)
+ 	@: > gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/CharIndexed.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/CharIndexedCharArray.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/CharIndexedInputStream.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/CharIndexedString.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/CharIndexedStringBuffer.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RE.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/REException.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/REFilterInputStream.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/REMatch.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/REMatchEnumeration.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RESyntax.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/REToken.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenAny.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenBackRef.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenChar.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenEnd.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenEndSub.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenLookAhead.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenOneOf.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenPOSIX.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenRange.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenRepeated.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenStart.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/RETokenWordBoundary.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ gnu/regexp/UncheckedRE.lo: gnu/regexp/$(am__dirstamp) \
+ 	gnu/regexp/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ref/PhantomReference.lo: java/lang/ref/$(am__dirstamp) \
+ 	java/lang/ref/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ref/Reference.lo: java/lang/ref/$(am__dirstamp) \
+ 	java/lang/ref/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ref/ReferenceQueue.lo: java/lang/ref/$(am__dirstamp) \
+ 	java/lang/ref/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ref/SoftReference.lo: java/lang/ref/$(am__dirstamp) \
+ 	java/lang/ref/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ref/WeakReference.lo: java/lang/ref/$(am__dirstamp) \
+ 	java/lang/ref/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/AccessibleObject.lo:  \
+ 	java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/Array.lo: java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/Constructor.lo: java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/Field.lo: java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/InvocationHandler.lo:  \
+ 	java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/InvocationTargetException.lo:  \
+ 	java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/Member.lo: java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/Method.lo: java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/Modifier.lo: java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/Proxy.lo: java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/ReflectPermission.lo:  \
+ 	java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/lang/reflect/UndeclaredThrowableException.lo:  \
+ 	java/lang/reflect/$(am__dirstamp) \
+ 	java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
+ java/math/$(am__dirstamp):
+ 	@$(mkdir_p) java/math
+ 	@: > java/math/$(am__dirstamp)
+ java/math/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/math/$(DEPDIR)
+ 	@: > java/math/$(DEPDIR)/$(am__dirstamp)
+ java/math/BigDecimal.lo: java/math/$(am__dirstamp) \
+ 	java/math/$(DEPDIR)/$(am__dirstamp)
+ java/math/BigInteger.lo: java/math/$(am__dirstamp) \
+ 	java/math/$(DEPDIR)/$(am__dirstamp)
+ java/net/Authenticator.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/BindException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/ConnectException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/ContentHandler.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/ContentHandlerFactory.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/DatagramPacket.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/DatagramSocket.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/DatagramSocketImpl.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/DatagramSocketImplFactory.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/FileNameMap.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/HttpURLConnection.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/Inet4Address.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/Inet6Address.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/InetAddress.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/InetSocketAddress.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/JarURLConnection.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/MalformedURLException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/MulticastSocket.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/NetPermission.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/NetworkInterface.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/NoRouteToHostException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/PasswordAuthentication.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/PortUnreachableException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/ProtocolException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/ServerSocket.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/Socket.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/SocketAddress.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/SocketException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/SocketImpl.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/SocketImplFactory.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/SocketOptions.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/SocketPermission.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/SocketTimeoutException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/URI.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/URISyntaxException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/URL.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/URLClassLoader.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/URLConnection.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/URLDecoder.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/URLEncoder.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/URLStreamHandler.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/URLStreamHandlerFactory.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/UnknownHostException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/net/UnknownServiceException.lo: java/net/$(am__dirstamp) \
+ 	java/net/$(DEPDIR)/$(am__dirstamp)
+ java/nio/Buffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/BufferOverflowException.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/BufferUnderflowException.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/ByteBuffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/ByteBufferHelper.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/ByteBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/ByteOrder.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/CharBuffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/CharBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/CharViewBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/DirectByteBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/DoubleBuffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/DoubleBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/DoubleViewBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/FloatBuffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/FloatBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/FloatViewBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/IntBuffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/IntBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/IntViewBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/InvalidMarkException.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/LongBuffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/LongBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/LongViewBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/MappedByteBuffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/MappedByteBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/ReadOnlyBufferException.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/ShortBuffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/ShortBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/ShortViewBufferImpl.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/VMDirectByteBuffer.lo: java/nio/$(am__dirstamp) \
+ 	java/nio/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/AlreadyConnectedException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/AsynchronousCloseException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/ByteChannel.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/CancelledKeyException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/Channel.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/Channels.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/ClosedByInterruptException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/ClosedChannelException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/ClosedSelectorException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/ConnectionPendingException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/DatagramChannel.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/FileChannel.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/FileLock.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/FileLockInterruptionException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/GatheringByteChannel.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/IllegalBlockingModeException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/IllegalSelectorException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/InterruptibleChannel.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/NoConnectionPendingException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/NonReadableChannelException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/NonWritableChannelException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/NotYetBoundException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/NotYetConnectedException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/OverlappingFileLockException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/Pipe.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/ReadableByteChannel.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/ScatteringByteChannel.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/SelectableChannel.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/SelectionKey.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/Selector.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/ServerSocketChannel.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/SocketChannel.lo: java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/UnresolvedAddressException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/UnsupportedAddressTypeException.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/WritableByteChannel.lo:  \
+ 	java/nio/channels/$(am__dirstamp) \
+ 	java/nio/channels/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/spi/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio/channels/spi
+ 	@: > java/nio/channels/spi/$(am__dirstamp)
+ java/nio/channels/spi/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio/channels/spi/$(DEPDIR)
+ 	@: > java/nio/channels/spi/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/spi/AbstractInterruptibleChannel.lo:  \
+ 	java/nio/channels/spi/$(am__dirstamp) \
+ 	java/nio/channels/spi/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/spi/AbstractSelectableChannel.lo:  \
+ 	java/nio/channels/spi/$(am__dirstamp) \
+ 	java/nio/channels/spi/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/spi/AbstractSelectionKey.lo:  \
+ 	java/nio/channels/spi/$(am__dirstamp) \
+ 	java/nio/channels/spi/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/spi/AbstractSelector.lo:  \
+ 	java/nio/channels/spi/$(am__dirstamp) \
+ 	java/nio/channels/spi/$(DEPDIR)/$(am__dirstamp)
+ java/nio/channels/spi/SelectorProvider.lo:  \
+ 	java/nio/channels/spi/$(am__dirstamp) \
+ 	java/nio/channels/spi/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio/charset
+ 	@: > java/nio/charset/$(am__dirstamp)
+ java/nio/charset/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio/charset/$(DEPDIR)
+ 	@: > java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/CharacterCodingException.lo:  \
+ 	java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/Charset.lo: java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/CharsetDecoder.lo: java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/CharsetEncoder.lo: java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/CoderMalfunctionError.lo:  \
+ 	java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/CoderResult.lo: java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/CodingErrorAction.lo:  \
+ 	java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/IllegalCharsetNameException.lo:  \
+ 	java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/MalformedInputException.lo:  \
+ 	java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/UnmappableCharacterException.lo:  \
+ 	java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/UnsupportedCharsetException.lo:  \
+ 	java/nio/charset/$(am__dirstamp) \
+ 	java/nio/charset/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/spi/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio/charset/spi
+ 	@: > java/nio/charset/spi/$(am__dirstamp)
+ java/nio/charset/spi/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/nio/charset/spi/$(DEPDIR)
+ 	@: > java/nio/charset/spi/$(DEPDIR)/$(am__dirstamp)
+ java/nio/charset/spi/CharsetProvider.lo:  \
+ 	java/nio/charset/spi/$(am__dirstamp) \
+ 	java/nio/charset/spi/$(DEPDIR)/$(am__dirstamp)
+ java/security/$(am__dirstamp):
+ 	@$(mkdir_p) java/security
+ 	@: > java/security/$(am__dirstamp)
+ java/security/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/security/$(DEPDIR)
+ 	@: > java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/AccessControlContext.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/AccessControlException.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/AccessController.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/AlgorithmParameterGenerator.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/AlgorithmParameterGeneratorSpi.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/AlgorithmParameters.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/AlgorithmParametersSpi.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/AllPermission.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/BasicPermission.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Certificate.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/CodeSource.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/DigestException.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/DigestInputStream.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/DigestOutputStream.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/DomainCombiner.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/DummyKeyPairGenerator.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/DummyMessageDigest.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/DummySignature.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/GeneralSecurityException.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Guard.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/GuardedObject.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Identity.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/IdentityScope.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/InvalidAlgorithmParameterException.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/InvalidKeyException.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/InvalidParameterException.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Key.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyException.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyFactory.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyFactorySpi.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyManagementException.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyPair.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyPairGenerator.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyPairGeneratorSpi.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyStore.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyStoreException.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/KeyStoreSpi.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/MessageDigest.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/MessageDigestSpi.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/NoSuchAlgorithmException.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/NoSuchProviderException.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Permission.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/PermissionCollection.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Permissions.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Policy.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Principal.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/PrivateKey.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/PrivilegedAction.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/PrivilegedActionException.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/PrivilegedExceptionAction.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/ProtectionDomain.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Provider.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/ProviderException.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/PublicKey.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/SecureClassLoader.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/SecureRandom.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/SecureRandomSpi.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Security.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/SecurityPermission.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Signature.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/SignatureException.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/SignatureSpi.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/SignedObject.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/Signer.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/UnrecoverableKeyException.lo:  \
+ 	java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/UnresolvedPermission.lo: java/security/$(am__dirstamp) \
+ 	java/security/$(DEPDIR)/$(am__dirstamp)
+ java/security/acl/$(am__dirstamp):
+ 	@$(mkdir_p) java/security/acl
+ 	@: > java/security/acl/$(am__dirstamp)
+ java/security/acl/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/security/acl/$(DEPDIR)
+ 	@: > java/security/acl/$(DEPDIR)/$(am__dirstamp)
+ java/security/acl/Acl.lo: java/security/acl/$(am__dirstamp) \
+ 	java/security/acl/$(DEPDIR)/$(am__dirstamp)
+ java/security/acl/AclEntry.lo: java/security/acl/$(am__dirstamp) \
+ 	java/security/acl/$(DEPDIR)/$(am__dirstamp)
+ java/security/acl/AclNotFoundException.lo:  \
+ 	java/security/acl/$(am__dirstamp) \
+ 	java/security/acl/$(DEPDIR)/$(am__dirstamp)
+ java/security/acl/Group.lo: java/security/acl/$(am__dirstamp) \
+ 	java/security/acl/$(DEPDIR)/$(am__dirstamp)
+ java/security/acl/LastOwnerException.lo:  \
+ 	java/security/acl/$(am__dirstamp) \
+ 	java/security/acl/$(DEPDIR)/$(am__dirstamp)
+ java/security/acl/NotOwnerException.lo:  \
+ 	java/security/acl/$(am__dirstamp) \
+ 	java/security/acl/$(DEPDIR)/$(am__dirstamp)
+ java/security/acl/Owner.lo: java/security/acl/$(am__dirstamp) \
+ 	java/security/acl/$(DEPDIR)/$(am__dirstamp)
+ java/security/acl/Permission.lo: java/security/acl/$(am__dirstamp) \
+ 	java/security/acl/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/$(am__dirstamp):
+ 	@$(mkdir_p) java/security/cert
+ 	@: > java/security/cert/$(am__dirstamp)
+ java/security/cert/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/security/cert/$(DEPDIR)
+ 	@: > java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CRL.lo: java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CRLException.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CRLSelector.lo: java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPath.lo: java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPathBuilder.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPathBuilderException.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPathBuilderResult.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPathBuilderSpi.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPathParameters.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPathValidator.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPathValidatorException.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPathValidatorResult.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertPathValidatorSpi.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertSelector.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertStore.lo: java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertStoreException.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertStoreParameters.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertStoreSpi.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/Certificate.lo: java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertificateEncodingException.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertificateException.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertificateExpiredException.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertificateFactory.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertificateFactorySpi.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertificateNotYetValidException.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CertificateParsingException.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/CollectionCertStoreParameters.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/LDAPCertStoreParameters.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/PKIXBuilderParameters.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/PKIXCertPathBuilderResult.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/PKIXCertPathChecker.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/PKIXCertPathValidatorResult.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/PKIXParameters.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/PolicyNode.lo: java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/PolicyQualifierInfo.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/TrustAnchor.lo: java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/X509CRL.lo: java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/X509CRLEntry.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/X509CRLSelector.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/X509CertSelector.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/X509Certificate.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/cert/X509Extension.lo:  \
+ 	java/security/cert/$(am__dirstamp) \
+ 	java/security/cert/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/$(am__dirstamp):
+ 	@$(mkdir_p) java/security/interfaces
+ 	@: > java/security/interfaces/$(am__dirstamp)
+ java/security/interfaces/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/security/interfaces/$(DEPDIR)
+ 	@: > java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/DSAKey.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/DSAKeyPairGenerator.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/DSAParams.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/DSAPrivateKey.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/DSAPublicKey.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/RSAKey.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/RSAMultiPrimePrivateCrtKey.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/RSAPrivateCrtKey.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/RSAPrivateKey.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/interfaces/RSAPublicKey.lo:  \
+ 	java/security/interfaces/$(am__dirstamp) \
+ 	java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/$(am__dirstamp):
+ 	@$(mkdir_p) java/security/spec
+ 	@: > java/security/spec/$(am__dirstamp)
+ java/security/spec/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/security/spec/$(DEPDIR)
+ 	@: > java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/AlgorithmParameterSpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/DSAParameterSpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/DSAPrivateKeySpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/DSAPublicKeySpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/EncodedKeySpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/InvalidKeySpecException.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/InvalidParameterSpecException.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/KeySpec.lo: java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/PKCS8EncodedKeySpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/PSSParameterSpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/RSAKeyGenParameterSpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/RSAMultiPrimePrivateCrtKeySpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/RSAOtherPrimeInfo.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/RSAPrivateCrtKeySpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/RSAPrivateKeySpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/RSAPublicKeySpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/security/spec/X509EncodedKeySpec.lo:  \
+ 	java/security/spec/$(am__dirstamp) \
+ 	java/security/spec/$(DEPDIR)/$(am__dirstamp)
+ java/sql/$(am__dirstamp):
+ 	@$(mkdir_p) java/sql
+ 	@: > java/sql/$(am__dirstamp)
+ java/sql/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/sql/$(DEPDIR)
+ 	@: > java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Array.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/BatchUpdateException.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Blob.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/CallableStatement.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Clob.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Connection.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/DataTruncation.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/DatabaseMetaData.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Date.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Driver.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/DriverManager.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/DriverPropertyInfo.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/ParameterMetaData.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/PreparedStatement.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Ref.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/ResultSet.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/ResultSetMetaData.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/SQLData.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/SQLException.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/SQLInput.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/SQLOutput.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/SQLPermission.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/SQLWarning.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Savepoint.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Statement.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Struct.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Time.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Timestamp.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/sql/Types.lo: java/sql/$(am__dirstamp) \
+ 	java/sql/$(DEPDIR)/$(am__dirstamp)
+ java/text/Annotation.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/AttributedCharacterIterator.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/AttributedString.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/AttributedStringIterator.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/BreakIterator.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/CharacterIterator.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/ChoiceFormat.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/CollationElementIterator.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/CollationKey.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/Collator.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/DateFormat.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/DateFormatSymbols.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/DecimalFormat.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/DecimalFormatSymbols.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/FieldPosition.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/Format.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/MessageFormat.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/NumberFormat.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/ParseException.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/ParsePosition.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/RuleBasedCollator.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/SimpleDateFormat.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/text/StringCharacterIterator.lo: java/text/$(am__dirstamp) \
+ 	java/text/$(DEPDIR)/$(am__dirstamp)
+ java/util/jar/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/jar
+ 	@: > java/util/jar/$(am__dirstamp)
+ java/util/jar/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/util/jar/$(DEPDIR)
+ 	@: > java/util/jar/$(DEPDIR)/$(am__dirstamp)
+ java/util/jar/Attributes.lo: java/util/jar/$(am__dirstamp) \
+ 	java/util/jar/$(DEPDIR)/$(am__dirstamp)
+ java/util/jar/JarEntry.lo: java/util/jar/$(am__dirstamp) \
+ 	java/util/jar/$(DEPDIR)/$(am__dirstamp)
+ java/util/jar/JarException.lo: java/util/jar/$(am__dirstamp) \
+ 	java/util/jar/$(DEPDIR)/$(am__dirstamp)
+ java/util/jar/JarFile.lo: java/util/jar/$(am__dirstamp) \
+ 	java/util/jar/$(DEPDIR)/$(am__dirstamp)
+ java/util/jar/JarInputStream.lo: java/util/jar/$(am__dirstamp) \
+ 	java/util/jar/$(DEPDIR)/$(am__dirstamp)
+ java/util/jar/JarOutputStream.lo: java/util/jar/$(am__dirstamp) \
+ 	java/util/jar/$(DEPDIR)/$(am__dirstamp)
+ java/util/jar/Manifest.lo: java/util/jar/$(am__dirstamp) \
+ 	java/util/jar/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/Adler32.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/CRC32.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/CheckedInputStream.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/CheckedOutputStream.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/Checksum.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/DataFormatException.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/Deflater.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/DeflaterOutputStream.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/GZIPInputStream.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/GZIPOutputStream.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/Inflater.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/InflaterInputStream.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/ZipConstants.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/ZipEntry.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/ZipException.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/ZipFile.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/ZipInputStream.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/util/zip/ZipOutputStream.lo: java/util/zip/$(am__dirstamp) \
+ 	java/util/zip/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi/activation
+ 	@: > java/rmi/activation/$(am__dirstamp)
+ java/rmi/activation/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi/activation/$(DEPDIR)
+ 	@: > java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/Activatable.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivateFailedException.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivationDesc.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivationException.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivationGroup.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivationGroupDesc.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivationGroupID.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivationID.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivationInstantiator.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivationMonitor.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/ActivationSystem.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/Activator.lo: java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/UnknownGroupException.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/activation/UnknownObjectException.lo:  \
+ 	java/rmi/activation/$(am__dirstamp) \
+ 	java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi
+ 	@: > java/rmi/$(am__dirstamp)
+ java/rmi/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi/$(DEPDIR)
+ 	@: > java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/AccessException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/AlreadyBoundException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/ConnectException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/ConnectIOException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/MarshalException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/MarshalledObject.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/Naming.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/NoSuchObjectException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/NotBoundException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/RMISecurityException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/RMISecurityManager.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/Remote.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/RemoteException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/ServerError.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/ServerException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/ServerRuntimeException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/StubNotFoundException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/UnexpectedException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/UnknownHostException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/UnmarshalException.lo: java/rmi/$(am__dirstamp) \
+ 	java/rmi/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/dgc/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi/dgc
+ 	@: > java/rmi/dgc/$(am__dirstamp)
+ java/rmi/dgc/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi/dgc/$(DEPDIR)
+ 	@: > java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/dgc/DGC.lo: java/rmi/dgc/$(am__dirstamp) \
+ 	java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/dgc/Lease.lo: java/rmi/dgc/$(am__dirstamp) \
+ 	java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/dgc/VMID.lo: java/rmi/dgc/$(am__dirstamp) \
+ 	java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/registry/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi/registry
+ 	@: > java/rmi/registry/$(am__dirstamp)
+ java/rmi/registry/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi/registry/$(DEPDIR)
+ 	@: > java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/registry/LocateRegistry.lo:  \
+ 	java/rmi/registry/$(am__dirstamp) \
+ 	java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/registry/Registry.lo: java/rmi/registry/$(am__dirstamp) \
+ 	java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/registry/RegistryHandler.lo:  \
+ 	java/rmi/registry/$(am__dirstamp) \
+ 	java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi/server
+ 	@: > java/rmi/server/$(am__dirstamp)
+ java/rmi/server/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/rmi/server/$(DEPDIR)
+ 	@: > java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/ExportException.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/LoaderHandler.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/LogStream.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/ObjID.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/Operation.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RMIClassLoader.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RMIClassLoaderSpi.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RMIClientSocketFactory.lo:  \
+ 	java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RMIFailureHandler.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RMIServerSocketFactory.lo:  \
+ 	java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RMISocketFactory.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RemoteCall.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RemoteObject.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RemoteRef.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RemoteServer.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/RemoteStub.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/ServerCloneException.lo:  \
+ 	java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/ServerNotActiveException.lo:  \
+ 	java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/ServerRef.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/Skeleton.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/SkeletonMismatchException.lo:  \
+ 	java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/SkeletonNotFoundException.lo:  \
+ 	java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/SocketSecurityException.lo:  \
+ 	java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/UID.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/UnicastRemoteObject.lo:  \
+ 	java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ java/rmi/server/Unreferenced.lo: java/rmi/server/$(am__dirstamp) \
+ 	java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi
+ 	@: > gnu/java/rmi/$(am__dirstamp)
+ gnu/java/rmi/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi/$(DEPDIR)
+ 	@: > gnu/java/rmi/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/RMIMarshalledObjectInputStream.lo:  \
+ 	gnu/java/rmi/$(am__dirstamp) \
+ 	gnu/java/rmi/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/RMIMarshalledObjectOutputStream.lo:  \
+ 	gnu/java/rmi/$(am__dirstamp) \
+ 	gnu/java/rmi/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/dgc/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi/dgc
+ 	@: > gnu/java/rmi/dgc/$(am__dirstamp)
+ gnu/java/rmi/dgc/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi/dgc/$(DEPDIR)
+ 	@: > gnu/java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/dgc/DGCImpl.lo: gnu/java/rmi/dgc/$(am__dirstamp) \
+ 	gnu/java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/dgc/DGCImpl_Skel.lo: gnu/java/rmi/dgc/$(am__dirstamp) \
+ 	gnu/java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/dgc/DGCImpl_Stub.lo: gnu/java/rmi/dgc/$(am__dirstamp) \
+ 	gnu/java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/registry/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi/registry
+ 	@: > gnu/java/rmi/registry/$(am__dirstamp)
+ gnu/java/rmi/registry/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi/registry/$(DEPDIR)
+ 	@: > gnu/java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/registry/RegistryImpl.lo:  \
+ 	gnu/java/rmi/registry/$(am__dirstamp) \
+ 	gnu/java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/registry/RegistryImpl_Skel.lo:  \
+ 	gnu/java/rmi/registry/$(am__dirstamp) \
+ 	gnu/java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/registry/RegistryImpl_Stub.lo:  \
+ 	gnu/java/rmi/registry/$(am__dirstamp) \
+ 	gnu/java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/rmic/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi/rmic
+ 	@: > gnu/java/rmi/rmic/$(am__dirstamp)
+ gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi/rmic/$(DEPDIR)
+ 	@: > gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/rmic/Compile_gcj.lo: gnu/java/rmi/rmic/$(am__dirstamp) \
+ 	gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/rmic/Compile_jikes.lo: gnu/java/rmi/rmic/$(am__dirstamp) \
+ 	gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/rmic/Compile_kjc.lo: gnu/java/rmi/rmic/$(am__dirstamp) \
+ 	gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/rmic/Compiler.lo: gnu/java/rmi/rmic/$(am__dirstamp) \
+ 	gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/rmic/CompilerProcess.lo:  \
+ 	gnu/java/rmi/rmic/$(am__dirstamp) \
+ 	gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/rmic/RMIC.lo: gnu/java/rmi/rmic/$(am__dirstamp) \
+ 	gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/rmic/RMICException.lo: gnu/java/rmi/rmic/$(am__dirstamp) \
+ 	gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/rmic/TabbedWriter.lo: gnu/java/rmi/rmic/$(am__dirstamp) \
+ 	gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi/server
+ 	@: > gnu/java/rmi/server/$(am__dirstamp)
+ gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/rmi/server/$(DEPDIR)
+ 	@: > gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/ConnectionRunnerPool.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/ProtocolConstants.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/RMIDefaultSocketFactory.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/RMIHashes.lo: gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/RMIIncomingThread.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/RMIObjectInputStream.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/RMIObjectOutputStream.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/RMIVoidValue.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/UnicastConnection.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/UnicastConnectionManager.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/UnicastRef.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/UnicastRemoteCall.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/UnicastRemoteStub.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/UnicastServer.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/rmi/server/UnicastServerRef.lo:  \
+ 	gnu/java/rmi/server/$(am__dirstamp) \
+ 	gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/awt
+ 	@: > gnu/awt/$(am__dirstamp)
+ gnu/awt/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/awt/$(DEPDIR)
+ 	@: > gnu/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/LightweightRedirector.lo: gnu/awt/$(am__dirstamp) \
+ 	gnu/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/j2d/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/awt/j2d
+ 	@: > gnu/awt/j2d/$(am__dirstamp)
+ gnu/awt/j2d/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/awt/j2d/$(DEPDIR)
+ 	@: > gnu/awt/j2d/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/j2d/AbstractGraphicsState.lo: gnu/awt/j2d/$(am__dirstamp) \
+ 	gnu/awt/j2d/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/j2d/DirectRasterGraphics.lo: gnu/awt/j2d/$(am__dirstamp) \
+ 	gnu/awt/j2d/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/j2d/Graphics2DImpl.lo: gnu/awt/j2d/$(am__dirstamp) \
+ 	gnu/awt/j2d/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/j2d/IntegerGraphicsState.lo: gnu/awt/j2d/$(am__dirstamp) \
+ 	gnu/awt/j2d/$(DEPDIR)/$(am__dirstamp)
+ gnu/awt/j2d/MappedRaster.lo: gnu/awt/j2d/$(am__dirstamp) \
+ 	gnu/awt/j2d/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/awt
+ 	@: > gnu/java/awt/$(am__dirstamp)
+ gnu/java/awt/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/awt/$(DEPDIR)
+ 	@: > gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/BitMaskExtent.lo: gnu/java/awt/$(am__dirstamp) \
+ 	gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/Buffers.lo: gnu/java/awt/$(am__dirstamp) \
+ 	gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/BitwiseXORComposite.lo: gnu/java/awt/$(am__dirstamp) \
+ 	gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/ComponentDataBlitOp.lo: gnu/java/awt/$(am__dirstamp) \
+ 	gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/ClasspathToolkit.lo: gnu/java/awt/$(am__dirstamp) \
+ 	gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/EmbeddedWindow.lo: gnu/java/awt/$(am__dirstamp) \
+ 	gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/EmbeddedWindowSupport.lo: gnu/java/awt/$(am__dirstamp) \
+ 	gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/EventModifier.lo: gnu/java/awt/$(am__dirstamp) \
+ 	gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/awt/color
+ 	@: > gnu/java/awt/color/$(am__dirstamp)
+ gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/awt/color/$(DEPDIR)
+ 	@: > gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/CieXyzConverter.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/ClutProfileConverter.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/ColorLookUpTable.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/ColorSpaceConverter.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/GrayProfileConverter.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/GrayScaleConverter.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/LinearRGBConverter.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/ProfileHeader.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/PyccConverter.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/RgbProfileConverter.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/SrgbConverter.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/TagEntry.lo: gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/color/ToneReproductionCurve.lo:  \
+ 	gnu/java/awt/color/$(am__dirstamp) \
+ 	gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/image/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/awt/image
+ 	@: > gnu/java/awt/image/$(am__dirstamp)
+ gnu/java/awt/image/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/awt/image/$(DEPDIR)
+ 	@: > gnu/java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/image/ImageDecoder.lo:  \
+ 	gnu/java/awt/image/$(am__dirstamp) \
+ 	gnu/java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/image/XBMDecoder.lo: gnu/java/awt/image/$(am__dirstamp) \
+ 	gnu/java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/peer/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/awt/peer
+ 	@: > gnu/java/awt/peer/$(am__dirstamp)
+ gnu/java/awt/peer/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) gnu/java/awt/peer/$(DEPDIR)
+ 	@: > gnu/java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/peer/EmbeddedWindowPeer.lo:  \
+ 	gnu/java/awt/peer/$(am__dirstamp) \
+ 	gnu/java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/peer/GLightweightPeer.lo:  \
+ 	gnu/java/awt/peer/$(am__dirstamp) \
+ 	gnu/java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/peer/ClasspathFontPeer.lo:  \
+ 	gnu/java/awt/peer/$(am__dirstamp) \
+ 	gnu/java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ gnu/java/awt/peer/ClasspathTextLayoutPeer.lo:  \
+ 	gnu/java/awt/peer/$(am__dirstamp) \
+ 	gnu/java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/applet/$(am__dirstamp):
+ 	@$(mkdir_p) java/applet
+ 	@: > java/applet/$(am__dirstamp)
+ java/applet/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/applet/$(DEPDIR)
+ 	@: > java/applet/$(DEPDIR)/$(am__dirstamp)
+ java/applet/Applet.lo: java/applet/$(am__dirstamp) \
+ 	java/applet/$(DEPDIR)/$(am__dirstamp)
+ java/applet/AppletStub.lo: java/applet/$(am__dirstamp) \
+ 	java/applet/$(DEPDIR)/$(am__dirstamp)
+ java/applet/AppletContext.lo: java/applet/$(am__dirstamp) \
+ 	java/applet/$(DEPDIR)/$(am__dirstamp)
+ java/applet/AudioClip.lo: java/applet/$(am__dirstamp) \
+ 	java/applet/$(DEPDIR)/$(am__dirstamp)
+ java/awt/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt
+ 	@: > java/awt/$(am__dirstamp)
+ java/awt/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/$(DEPDIR)
+ 	@: > java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/AWTError.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/AWTEvent.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/AWTEventMulticaster.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/AWTException.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/AWTPermission.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/ActiveEvent.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Adjustable.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/BorderLayout.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Button.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Canvas.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/CardLayout.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Checkbox.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/CheckboxGroup.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/CheckboxMenuItem.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Choice.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Color.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Component.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/ComponentOrientation.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Container.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Cursor.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Dialog.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Dimension.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Event.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/EventDispatchThread.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/EventQueue.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/FileDialog.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/FlowLayout.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Font.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/FontMetrics.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Frame.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Graphics.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Graphics2D.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/GraphicsConfiguration.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/GridBagConstraints.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/GridBagLayout.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/GridBagLayoutInfo.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/GridLayout.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/IllegalComponentStateException.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Image.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Insets.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/ItemSelectable.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Label.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/LayoutManager.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/LayoutManager2.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/List.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Menu.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/MenuBar.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/MenuComponent.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/MenuContainer.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/MenuItem.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/MenuShortcut.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Paint.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/PaintContext.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Panel.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Point.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/PopupMenu.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Rectangle.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/RenderingHints.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/ScrollPane.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Scrollbar.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Shape.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/TextArea.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/TextComponent.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/TextField.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Toolkit.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Transparency.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Window.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/color/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/color
+ 	@: > java/awt/color/$(am__dirstamp)
+ java/awt/color/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/color/$(DEPDIR)
+ 	@: > java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ java/awt/color/ColorSpace.lo: java/awt/color/$(am__dirstamp) \
+ 	java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ java/awt/color/ICC_ColorSpace.lo: java/awt/color/$(am__dirstamp) \
+ 	java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ java/awt/color/ICC_Profile.lo: java/awt/color/$(am__dirstamp) \
+ 	java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ java/awt/color/ICC_ProfileGray.lo: java/awt/color/$(am__dirstamp) \
+ 	java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ java/awt/color/ICC_ProfileRGB.lo: java/awt/color/$(am__dirstamp) \
+ 	java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ java/awt/color/CMMException.lo: java/awt/color/$(am__dirstamp) \
+ 	java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ java/awt/color/ProfileDataException.lo:  \
+ 	java/awt/color/$(am__dirstamp) \
+ 	java/awt/color/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/datatransfer
+ 	@: > java/awt/datatransfer/$(am__dirstamp)
+ java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/datatransfer/$(DEPDIR)
+ 	@: > java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/Clipboard.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/ClipboardOwner.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/DataFlavor.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/FlavorMap.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/MimeTypeParseException.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/StringSelection.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/SystemFlavorMap.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/Transferable.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/UnsupportedFlavorException.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/datatransfer/FlavorTable.lo:  \
+ 	java/awt/datatransfer/$(am__dirstamp) \
+ 	java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/event
+ 	@: > java/awt/event/$(am__dirstamp)
+ java/awt/event/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/event/$(DEPDIR)
+ 	@: > java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/AWTEventListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ActionEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ActionListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/AdjustmentEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/AdjustmentListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ComponentAdapter.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ComponentEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ComponentListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ContainerAdapter.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ContainerEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ContainerListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/FocusAdapter.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/FocusEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/FocusListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/HierarchyBoundsAdapter.lo:  \
+ 	java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/HierarchyBoundsListener.lo:  \
+ 	java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/HierarchyEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/HierarchyListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/InputEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/InputMethodEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/InputMethodListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/InvocationEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ItemEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/ItemListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/KeyAdapter.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/KeyEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/KeyListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/MouseAdapter.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/MouseEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/MouseListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/MouseMotionAdapter.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/MouseMotionListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/PaintEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/TextEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/TextListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/WindowAdapter.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/WindowEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/WindowListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/AWTEventListenerProxy.lo:  \
+ 	java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/MouseWheelEvent.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/MouseWheelListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/WindowFocusListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/event/WindowStateListener.lo: java/awt/event/$(am__dirstamp) \
+ 	java/awt/event/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/font
+ 	@: > java/awt/font/$(am__dirstamp)
+ java/awt/font/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/font/$(DEPDIR)
+ 	@: > java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/FontRenderContext.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/ShapeGraphicAttribute.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/MultipleMaster.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/TransformAttribute.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/GlyphJustificationInfo.lo:  \
+ 	java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/LineBreakMeasurer.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/TextMeasurer.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/TextLayout.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/LineMetrics.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/TextAttribute.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/GlyphMetrics.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/OpenType.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/GlyphVector.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/GraphicAttribute.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/ImageGraphicAttribute.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/NumericShaper.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/geom
+ 	@: > java/awt/geom/$(am__dirstamp)
+ java/awt/geom/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/geom/$(DEPDIR)
+ 	@: > java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/AffineTransform.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/Dimension2D.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/Ellipse2D.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/IllegalPathStateException.lo:  \
+ 	java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/NoninvertibleTransformException.lo:  \
+ 	java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/PathIterator.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/Point2D.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/Rectangle2D.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/RectangularShape.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/RoundRectangle2D.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/Line2D.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/Arc2D.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/Area.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/CubicCurve2D.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/FlatteningPathIterator.lo:  \
+ 	java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/GeneralPath.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/geom/QuadCurve2D.lo: java/awt/geom/$(am__dirstamp) \
+ 	java/awt/geom/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/image
+ 	@: > java/awt/image/$(am__dirstamp)
+ java/awt/image/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/image/$(DEPDIR)
+ 	@: > java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/BandCombineOp.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/BandedSampleModel.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/AffineTransformOp.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/BufferedImage.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/BufferedImageFilter.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ByteLookupTable.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ColorConvertOp.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ColorModel.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ComponentColorModel.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ComponentSampleModel.lo:  \
+ 	java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ConvolveOp.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/DataBuffer.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/DataBufferByte.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/DataBufferDouble.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/DataBufferFloat.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/DataBufferInt.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/DataBufferShort.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/DataBufferUShort.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/DirectColorModel.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ImageConsumer.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ImageObserver.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ImageProducer.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/IndexColorModel.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/Kernel.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/LookupOp.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/LookupTable.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/MultiPixelPackedSampleModel.lo:  \
+ 	java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/PackedColorModel.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/PixelInterleavedSampleModel.lo:  \
+ 	java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/Raster.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/RasterOp.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/RescaleOp.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/SampleModel.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ShortLookupTable.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/SinglePixelPackedSampleModel.lo:  \
+ 	java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/WritableRaster.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/AreaAveragingScaleFilter.lo:  \
+ 	java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/CropImageFilter.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/FilteredImageSource.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ImageFilter.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/MemoryImageSource.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/PixelGrabber.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/RGBImageFilter.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ReplicateScaleFilter.lo:  \
+ 	java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/BufferStrategy.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/BufferedImageOp.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/ImagingOpException.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/RasterFormatException.lo:  \
+ 	java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/RenderedImage.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/TileObserver.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/VolatileImage.lo: java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/WritableRenderedImage.lo:  \
+ 	java/awt/image/$(am__dirstamp) \
+ 	java/awt/image/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/renderable/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/image/renderable
+ 	@: > java/awt/image/renderable/$(am__dirstamp)
+ java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/image/renderable/$(DEPDIR)
+ 	@: > java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/renderable/ContextualRenderedImageFactory.lo:  \
+ 	java/awt/image/renderable/$(am__dirstamp) \
+ 	java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/renderable/ParameterBlock.lo:  \
+ 	java/awt/image/renderable/$(am__dirstamp) \
+ 	java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/renderable/RenderContext.lo:  \
+ 	java/awt/image/renderable/$(am__dirstamp) \
+ 	java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/renderable/RenderableImage.lo:  \
+ 	java/awt/image/renderable/$(am__dirstamp) \
+ 	java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/renderable/RenderableImageOp.lo:  \
+ 	java/awt/image/renderable/$(am__dirstamp) \
+ 	java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/renderable/RenderableImageProducer.lo:  \
+ 	java/awt/image/renderable/$(am__dirstamp) \
+ 	java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp)
+ java/awt/image/renderable/RenderedImageFactory.lo:  \
+ 	java/awt/image/renderable/$(am__dirstamp) \
+ 	java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/peer
+ 	@: > java/awt/peer/$(am__dirstamp)
+ java/awt/peer/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/peer/$(DEPDIR)
+ 	@: > java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/ButtonPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/CanvasPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/CheckboxMenuItemPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/CheckboxPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/ChoicePeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/ComponentPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/ContainerPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/DialogPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/FileDialogPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/FontPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/FramePeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/LabelPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/LightweightPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/ListPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/MenuBarPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/MenuComponentPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/MenuItemPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/MenuPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/PanelPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/PopupMenuPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/RobotPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/ScrollPanePeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/ScrollbarPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/TextAreaPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/TextComponentPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/TextFieldPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/peer/WindowPeer.lo: java/awt/peer/$(am__dirstamp) \
+ 	java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/SystemColor.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Polygon.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/MediaTracker.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/PrintGraphics.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/PrintJob.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/AWTKeyStroke.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/AlphaComposite.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/AttributeValue.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/BasicStroke.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/BufferCapabilities.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/ColorPaintContext.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Composite.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/CompositeContext.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/ContainerOrderFocusTraversalPolicy.lo:  \
+ 	java/awt/$(am__dirstamp) java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/DefaultFocusTraversalPolicy.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/DefaultKeyboardFocusManager.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/DisplayMode.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/FocusTraversalPolicy.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/FontFormatException.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/GradientPaint.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/GraphicsConfigTemplate.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/GraphicsDevice.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/GraphicsEnvironment.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/HeadlessException.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/ImageCapabilities.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/JobAttributes.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/KeyEventDispatcher.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/KeyEventPostProcessor.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/KeyboardFocusManager.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/PageAttributes.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Robot.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/ScrollPaneAdjustable.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/Stroke.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/TexturePaint.lo: java/awt/$(am__dirstamp) \
+ 	java/awt/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/peer/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/dnd/peer
+ 	@: > java/awt/dnd/peer/$(am__dirstamp)
+ java/awt/dnd/peer/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/dnd/peer/$(DEPDIR)
+ 	@: > java/awt/dnd/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/peer/DragSourceContextPeer.lo:  \
+ 	java/awt/dnd/peer/$(am__dirstamp) \
+ 	java/awt/dnd/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/peer/DropTargetContextPeer.lo:  \
+ 	java/awt/dnd/peer/$(am__dirstamp) \
+ 	java/awt/dnd/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/peer/DropTargetPeer.lo:  \
+ 	java/awt/dnd/peer/$(am__dirstamp) \
+ 	java/awt/dnd/peer/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/dnd
+ 	@: > java/awt/dnd/$(am__dirstamp)
+ java/awt/dnd/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/dnd/$(DEPDIR)
+ 	@: > java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DnDConstants.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DnDEventMulticaster.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragGestureEvent.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragGestureListener.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragGestureRecognizer.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragSource.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragSourceAdapter.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragSourceContext.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragSourceDragEvent.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragSourceEvent.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragSourceListener.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragSourceMotionListener.lo:  \
+ 	java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DropTarget.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/InvalidDnDOperationException.lo:  \
+ 	java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/Autoscroll.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DragSourceDropEvent.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DropTargetAdapter.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DropTargetContext.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DropTargetDragEvent.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DropTargetDropEvent.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DropTargetEvent.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/DropTargetListener.lo: java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/dnd/MouseDragGestureRecognizer.lo:  \
+ 	java/awt/dnd/$(am__dirstamp) \
+ 	java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
+ java/awt/font/TextHitInfo.lo: java/awt/font/$(am__dirstamp) \
+ 	java/awt/font/$(DEPDIR)/$(am__dirstamp)
+ java/awt/im/spi/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/im/spi
+ 	@: > java/awt/im/spi/$(am__dirstamp)
+ java/awt/im/spi/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/im/spi/$(DEPDIR)
+ 	@: > java/awt/im/spi/$(DEPDIR)/$(am__dirstamp)
+ java/awt/im/spi/InputMethod.lo: java/awt/im/spi/$(am__dirstamp) \
+ 	java/awt/im/spi/$(DEPDIR)/$(am__dirstamp)
+ java/awt/im/spi/InputMethodContext.lo:  \
+ 	java/awt/im/spi/$(am__dirstamp) \
+ 	java/awt/im/spi/$(DEPDIR)/$(am__dirstamp)
+ java/awt/im/spi/InputMethodDescriptor.lo:  \
+ 	java/awt/im/spi/$(am__dirstamp) \
+ 	java/awt/im/spi/$(DEPDIR)/$(am__dirstamp)
+ java/awt/im/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/im
+ 	@: > java/awt/im/$(am__dirstamp)
+ java/awt/im/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/im/$(DEPDIR)
+ 	@: > java/awt/im/$(DEPDIR)/$(am__dirstamp)
+ java/awt/im/InputContext.lo: java/awt/im/$(am__dirstamp) \
+ 	java/awt/im/$(DEPDIR)/$(am__dirstamp)
+ java/awt/im/InputMethodHighlight.lo: java/awt/im/$(am__dirstamp) \
+ 	java/awt/im/$(DEPDIR)/$(am__dirstamp)
+ java/awt/im/InputMethodRequests.lo: java/awt/im/$(am__dirstamp) \
+ 	java/awt/im/$(DEPDIR)/$(am__dirstamp)
+ java/awt/im/InputSubset.lo: java/awt/im/$(am__dirstamp) \
+ 	java/awt/im/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/print
+ 	@: > java/awt/print/$(am__dirstamp)
+ java/awt/print/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/awt/print/$(DEPDIR)
+ 	@: > java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/Book.lo: java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/PageFormat.lo: java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/Pageable.lo: java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/Paper.lo: java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/Printable.lo: java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/PrinterAbortException.lo:  \
+ 	java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/PrinterException.lo: java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/PrinterGraphics.lo: java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/PrinterIOException.lo: java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/awt/print/PrinterJob.lo: java/awt/print/$(am__dirstamp) \
+ 	java/awt/print/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/$(am__dirstamp):
+ 	@$(mkdir_p) java/beans/beancontext
+ 	@: > java/beans/beancontext/$(am__dirstamp)
+ java/beans/beancontext/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/beans/beancontext/$(DEPDIR)
+ 	@: > java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContext.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextChild.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextChildComponentProxy.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextChildSupport.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextContainerProxy.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextEvent.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextMembershipEvent.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextMembershipListener.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextProxy.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextServiceAvailableEvent.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextServiceProvider.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextServiceProviderBeanInfo.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextServiceRevokedEvent.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextServiceRevokedListener.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextServices.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextServicesListener.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextServicesSupport.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/beancontext/BeanContextSupport.lo:  \
+ 	java/beans/beancontext/$(am__dirstamp) \
+ 	java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
+ java/beans/$(am__dirstamp):
+ 	@$(mkdir_p) java/beans
+ 	@: > java/beans/$(am__dirstamp)
+ java/beans/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) java/beans/$(DEPDIR)
+ 	@: > java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/BeanDescriptor.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/BeanInfo.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/Beans.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/Customizer.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/DesignMode.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/EventHandler.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/EventSetDescriptor.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/ExceptionListener.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/Expression.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/FeatureDescriptor.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/IndexedPropertyDescriptor.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/IntrospectionException.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/Introspector.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/MethodDescriptor.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/ParameterDescriptor.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/PropertyChangeEvent.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/PropertyChangeListener.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/PropertyChangeListenerProxy.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/PropertyChangeSupport.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/PropertyDescriptor.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/PropertyEditor.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/PropertyEditorManager.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/PropertyEditorSupport.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/PropertyVetoException.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/Statement.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/SimpleBeanInfo.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/VetoableChangeListener.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/VetoableChangeListenerProxy.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/VetoableChangeSupport.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/Visibility.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/AppletInitializer.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ java/beans/XMLDecoder.lo: java/beans/$(am__dirstamp) \
+ 	java/beans/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/border
+ 	@: > javax/swing/border/$(am__dirstamp)
+ javax/swing/border/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/border/$(DEPDIR)
+ 	@: > javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/AbstractBorder.lo:  \
+ 	javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/BevelBorder.lo: javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/Border.lo: javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/CompoundBorder.lo:  \
+ 	javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/EmptyBorder.lo: javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/EtchedBorder.lo:  \
+ 	javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/LineBorder.lo: javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/MatteBorder.lo: javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/SoftBevelBorder.lo:  \
+ 	javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/border/TitledBorder.lo:  \
+ 	javax/swing/border/$(am__dirstamp) \
+ 	javax/swing/border/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing
+ 	@: > javax/swing/$(am__dirstamp)
+ javax/swing/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/$(DEPDIR)
+ 	@: > javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/GrayFilter.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/AbstractAction.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/AbstractButton.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/AbstractSpinnerModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/plaf/basic
+ 	@: > javax/swing/plaf/basic/$(am__dirstamp)
+ javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/plaf/basic/$(DEPDIR)
+ 	@: > javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicArrowButton.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicButtonListener.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicButtonUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicCheckBoxUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicColorChooserUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicComboBoxUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicComboBoxEditor.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicComboBoxRenderer.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicComboPopup.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicDesktopIconUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicDesktopPaneUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicEditorPaneUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicFormattedTextFieldUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicGraphicsUtils.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicInternalFrameTitlePane.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicInternalFrameUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicLabelUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicListUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicMenuUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicMenuBarUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicMenuItemUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicOptionPaneUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicPanelUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicPasswordFieldUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicPopupMenuUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicProgressBarUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicRootPaneUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicRadioButtonUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicScrollBarUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicScrollPaneUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicSeparatorUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicSliderUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicSpinnerUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicSplitPaneDivider.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicSplitPaneUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicTabbedPaneUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicTableUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicTableHeaderUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicTextAreaUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicTextFieldUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicTextPaneUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicTextUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicToggleButtonUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicToolBarSeparatorUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicToolBarUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicToolTipUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicTreeUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicViewportUI.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicLookAndFeel.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicBorders.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/BasicIconFactory.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/basic/ComboPopup.lo:  \
+ 	javax/swing/plaf/basic/$(am__dirstamp) \
+ 	javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/plaf
+ 	@: > javax/swing/plaf/$(am__dirstamp)
+ javax/swing/plaf/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/plaf/$(DEPDIR)
+ 	@: > javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/BorderUIResource.lo:  \
+ 	javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/UIResource.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ButtonUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ComponentUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/LabelUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ListUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/OptionPaneUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/PanelUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ScrollPaneUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/TabbedPaneUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/TextUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/TreeUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ViewportUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/metal/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/plaf/metal
+ 	@: > javax/swing/plaf/metal/$(am__dirstamp)
+ javax/swing/plaf/metal/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/plaf/metal/$(DEPDIR)
+ 	@: > javax/swing/plaf/metal/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/metal/DefaultMetalTheme.lo:  \
+ 	javax/swing/plaf/metal/$(am__dirstamp) \
+ 	javax/swing/plaf/metal/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/metal/MetalLookAndFeel.lo:  \
+ 	javax/swing/plaf/metal/$(am__dirstamp) \
+ 	javax/swing/plaf/metal/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/metal/MetalTheme.lo:  \
+ 	javax/swing/plaf/metal/$(am__dirstamp) \
+ 	javax/swing/plaf/metal/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ColorUIResource.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/DimensionUIResource.lo:  \
+ 	javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/FontUIResource.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/IconUIResource.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/InsetsUIResource.lo:  \
+ 	javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ActionMapUIResource.lo:  \
+ 	javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ColorChooserUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ComboBoxUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ComponentInputMapUIResource.lo:  \
+ 	javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/DesktopIconUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/DesktopPaneUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/FileChooserUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/InputMapUIResource.lo:  \
+ 	javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/InternalFrameUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/MenuBarUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/MenuItemUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/PopupMenuUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ProgressBarUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/RootPaneUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ScrollBarUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/SeparatorUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/SliderUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/SpinnerUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/SplitPaneUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/TableHeaderUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/TableUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ToolBarUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/plaf/ToolTipUI.lo: javax/swing/plaf/$(am__dirstamp) \
+ 	javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/AbstractListModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/colorchooser/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/colorchooser
+ 	@: > javax/swing/colorchooser/$(am__dirstamp)
+ javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/colorchooser/$(DEPDIR)
+ 	@: > javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/colorchooser/AbstractColorChooserPanel.lo:  \
+ 	javax/swing/colorchooser/$(am__dirstamp) \
+ 	javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/colorchooser/ColorChooserComponentFactory.lo:  \
+ 	javax/swing/colorchooser/$(am__dirstamp) \
+ 	javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/colorchooser/ColorSelectionModel.lo:  \
+ 	javax/swing/colorchooser/$(am__dirstamp) \
+ 	javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/colorchooser/DefaultColorSelectionModel.lo:  \
+ 	javax/swing/colorchooser/$(am__dirstamp) \
+ 	javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/colorchooser/DefaultPreviewPanel.lo:  \
+ 	javax/swing/colorchooser/$(am__dirstamp) \
+ 	javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/colorchooser/DefaultSwatchChooserPanel.lo:  \
+ 	javax/swing/colorchooser/$(am__dirstamp) \
+ 	javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/colorchooser/DefaultHSBChooserPanel.lo:  \
+ 	javax/swing/colorchooser/$(am__dirstamp) \
+ 	javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/colorchooser/DefaultRGBChooserPanel.lo:  \
+ 	javax/swing/colorchooser/$(am__dirstamp) \
+ 	javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/filechooser/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/filechooser
+ 	@: > javax/swing/filechooser/$(am__dirstamp)
+ javax/swing/filechooser/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/filechooser/$(DEPDIR)
+ 	@: > javax/swing/filechooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/filechooser/FileFilter.lo:  \
+ 	javax/swing/filechooser/$(am__dirstamp) \
+ 	javax/swing/filechooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/filechooser/FileSystemView.lo:  \
+ 	javax/swing/filechooser/$(am__dirstamp) \
+ 	javax/swing/filechooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/filechooser/FileView.lo:  \
+ 	javax/swing/filechooser/$(am__dirstamp) \
+ 	javax/swing/filechooser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/table
+ 	@: > javax/swing/table/$(am__dirstamp)
+ javax/swing/table/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/table/$(DEPDIR)
+ 	@: > javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/AbstractTableModel.lo:  \
+ 	javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/DefaultTableColumnModel.lo:  \
+ 	javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/DefaultTableModel.lo:  \
+ 	javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/JTableHeader.lo: javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/TableCellEditor.lo:  \
+ 	javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/TableCellRenderer.lo:  \
+ 	javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/TableColumn.lo: javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/TableColumnModel.lo:  \
+ 	javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/TableModel.lo: javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/table/DefaultTableCellRenderer.lo:  \
+ 	javax/swing/table/$(am__dirstamp) \
+ 	javax/swing/table/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/Action.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/BorderFactory.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/Box.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/BoxLayout.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ButtonGroup.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ButtonModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ComponentInputMap.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultButtonModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultListModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultListSelectionModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/Icon.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ImageIcon.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/InputMap.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/InternalFrameFocusTraversalPolicy.lo:  \
+ 	javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JApplet.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JButton.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JCheckBox.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JComponent.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JDialog.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JEditorPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JFormattedTextField.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JFrame.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JLabel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JLayeredPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JList.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JMenuBar.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JOptionPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JPanel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JRadioButton.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JRootPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JScrollBar.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JScrollPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JSpinner.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JTabbedPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JTextArea.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JTextField.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JToggleButton.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JToolTip.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JTree.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JViewport.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JWindow.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/KeyStroke.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/LayoutFocusTraversalPolicy.lo:  \
+ 	javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ListCellRenderer.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ListModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ListSelectionModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/LookAndFeel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/Scrollable.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SortingFocusTraversalPolicy.lo:  \
+ 	javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SpinnerDateModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SpinnerListModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SpinnerModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SpinnerNumberModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/Spring.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SpringLayout.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SwingConstants.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SwingUtilities.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/Timer.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ToolTipManager.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/TransferHandler.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/UIDefaults.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/UIManager.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/UnsupportedLookAndFeelException.lo:  \
+ 	javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/event
+ 	@: > javax/swing/event/$(am__dirstamp)
+ javax/swing/event/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/event/$(DEPDIR)
+ 	@: > javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/AncestorEvent.lo: javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/AncestorListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/ChangeEvent.lo: javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/ChangeListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/DocumentEvent.lo: javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/DocumentListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/HyperlinkEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/HyperlinkListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/ListDataEvent.lo: javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/ListDataListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/ListSelectionEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/ListSelectionListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/MenuEvent.lo: javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/UndoableEditEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/UndoableEditListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/CaretEvent.lo: javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/CaretListener.lo: javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/CellEditorListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/EventListenerList.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/InternalFrameAdapter.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/InternalFrameEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/InternalFrameListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/MenuDragMouseEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/MenuDragMouseListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/MenuKeyEvent.lo: javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/MenuKeyListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/MenuListener.lo: javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/MouseInputAdapter.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/MouseInputListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/PopupMenuEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/PopupMenuListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/SwingPropertyChangeSupport.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TableColumnModelEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TableColumnModelListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TableModelEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TableModelListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TreeExpansionEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TreeExpansionListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TreeModelEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TreeModelListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TreeSelectionEvent.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TreeSelectionListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/event/TreeWillExpandListener.lo:  \
+ 	javax/swing/event/$(am__dirstamp) \
+ 	javax/swing/event/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ActionMap.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/text
+ 	@: > javax/swing/text/$(am__dirstamp)
+ javax/swing/text/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/text/$(DEPDIR)
+ 	@: > javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/AbstractDocument.lo:  \
+ 	javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/AttributeSet.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/BadLocationException.lo:  \
+ 	javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/Caret.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/ComponentView.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/DefaultCaret.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/DefaultEditorKit.lo:  \
+ 	javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/DefaultHighlighter.lo:  \
+ 	javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/DefaultStyledDocument.lo:  \
+ 	javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/Document.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/DocumentFilter.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/EditorKit.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/Element.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/FieldView.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/GapContent.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/Highlighter.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/JTextComponent.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/Keymap.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/LayeredHighlighter.lo:  \
+ 	javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/MutableAttributeSet.lo:  \
+ 	javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/NavigationFilter.lo:  \
+ 	javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/PasswordView.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/PlainDocument.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/PlainView.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/Position.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/Segment.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/SimpleAttributeSet.lo:  \
+ 	javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/StringContent.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/Style.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/StyleConstants.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/StyleContext.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/StyledDocument.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/StyledEditorKit.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/TabableView.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/TabExpander.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/TabSet.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/TabStop.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/TextAction.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/Utilities.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/View.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/ViewFactory.lo: javax/swing/text/$(am__dirstamp) \
+ 	javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/html/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/text/html
+ 	@: > javax/swing/text/html/$(am__dirstamp)
+ javax/swing/text/html/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/text/html/$(DEPDIR)
+ 	@: > javax/swing/text/html/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/html/HTML.lo: javax/swing/text/html/$(am__dirstamp) \
+ 	javax/swing/text/html/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/html/parser/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/text/html/parser
+ 	@: > javax/swing/text/html/parser/$(am__dirstamp)
+ javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/text/html/parser/$(DEPDIR)
+ 	@: > javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/text/html/parser/ParserDelegator.lo:  \
+ 	javax/swing/text/html/parser/$(am__dirstamp) \
+ 	javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/tree
+ 	@: > javax/swing/tree/$(am__dirstamp)
+ javax/swing/tree/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/tree/$(DEPDIR)
+ 	@: > javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/TreeNode.lo: javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/AbstractLayoutCache.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/DefaultMutableTreeNode.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/DefaultTreeCellEditor.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/DefaultTreeCellRenderer.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/DefaultTreeModel.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/DefaultTreeSelectionModel.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/ExpandVetoException.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/FixedHeightLayoutCache.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/MutableTreeNode.lo: javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/RowMapper.lo: javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/TreeCellEditor.lo: javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/TreeCellRenderer.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/TreeModel.lo: javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/TreePath.lo: javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/TreeSelectionModel.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/tree/VariableHeightLayoutCache.lo:  \
+ 	javax/swing/tree/$(am__dirstamp) \
+ 	javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/undo
+ 	@: > javax/swing/undo/$(am__dirstamp)
+ javax/swing/undo/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/swing/undo/$(DEPDIR)
+ 	@: > javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/UndoableEdit.lo: javax/swing/undo/$(am__dirstamp) \
+ 	javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/AbstractUndoableEdit.lo:  \
+ 	javax/swing/undo/$(am__dirstamp) \
+ 	javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/CannotRedoException.lo:  \
+ 	javax/swing/undo/$(am__dirstamp) \
+ 	javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/CannotUndoException.lo:  \
+ 	javax/swing/undo/$(am__dirstamp) \
+ 	javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/CompoundEdit.lo: javax/swing/undo/$(am__dirstamp) \
+ 	javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/StateEdit.lo: javax/swing/undo/$(am__dirstamp) \
+ 	javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/StateEditable.lo: javax/swing/undo/$(am__dirstamp) \
+ 	javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/UndoManager.lo: javax/swing/undo/$(am__dirstamp) \
+ 	javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/undo/UndoableEditSupport.lo:  \
+ 	javax/swing/undo/$(am__dirstamp) \
+ 	javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/BoundedRangeModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/CellEditor.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ComboBoxEditor.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ComboBoxModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultBoundedRangeModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DesktopManager.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/InputVerifier.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JInternalFrame.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JTable.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/MenuElement.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/MenuSelectionManager.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/MutableComboBoxModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/Renderer.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/RootPaneContainer.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ScrollPaneConstants.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SingleSelectionModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SizeRequirements.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/SizeSequence.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/WindowConstants.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/AbstractCellEditor.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/CellRendererPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DebugGraphics.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultCellEditor.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultComboBoxModel.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultDesktopManager.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultFocusManager.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultListCellRenderer.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/DefaultSingleSelectionModel.lo:  \
+ 	javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/FocusManager.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JCheckBoxMenuItem.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JColorChooser.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JComboBox.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JDesktopPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JFileChooser.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JMenu.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JMenuItem.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JPasswordField.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JPopupMenu.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JProgressBar.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JRadioButtonMenuItem.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JSeparator.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JSlider.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JSplitPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JTextPane.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/JToolBar.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/OverlayLayout.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/Popup.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/PopupFactory.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ProgressMonitor.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ProgressMonitorInputStream.lo:  \
+ 	javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/RepaintManager.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ScrollPaneLayout.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ javax/swing/ViewportLayout.lo: javax/swing/$(am__dirstamp) \
+ 	javax/swing/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/BytesToUnicode.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Convert.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Input_8859_1.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Input_ASCII.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Input_EUCJIS.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Input_JavaSrc.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Input_SJIS.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Input_UnicodeBig.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Input_UnicodeLittle.lo:  \
+ 	gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Input_UTF8.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Input_iconv.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/IOConverter.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Output_8859_1.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Output_ASCII.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Output_EUCJIS.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Output_JavaSrc.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Output_SJIS.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Output_UnicodeLittleUnmarked.lo:  \
+ 	gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Output_UTF8.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/Output_iconv.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ gnu/gcj/convert/UnicodeToBytes.lo: gnu/gcj/convert/$(am__dirstamp) \
+ 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
+ javax/net/$(am__dirstamp):
+ 	@$(mkdir_p) javax/net
+ 	@: > javax/net/$(am__dirstamp)
+ javax/net/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/net/$(DEPDIR)
+ 	@: > javax/net/$(DEPDIR)/$(am__dirstamp)
+ javax/net/VanillaSocketFactory.lo: javax/net/$(am__dirstamp) \
+ 	javax/net/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/$(am__dirstamp):
+ 	@$(mkdir_p) javax/net/ssl
+ 	@: > javax/net/ssl/$(am__dirstamp)
+ javax/net/ssl/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/net/ssl/$(DEPDIR)
+ 	@: > javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/TrustManagerFactorySpi.lo:  \
+ 	javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLKeyException.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/TrustManager.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLServerSocket.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/TrustManagerFactory.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/KeyManager.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLSocketFactory.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLPermission.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLContext.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/TrivialHostnameVerifier.lo:  \
+ 	javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/X509KeyManager.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLServerSocketFactory.lo:  \
+ 	javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLSessionBindingListener.lo:  \
+ 	javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLSessionContext.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/KeyManagerFactory.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLProtocolException.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLSocket.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/HostnameVerifier.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/HandshakeCompletedListener.lo:  \
+ 	javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/HttpsURLConnection.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/KeyManagerFactorySpi.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLHandshakeException.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLPeerUnverifiedException.lo:  \
+ 	javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/X509TrustManager.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLSession.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLContextSpi.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/HandshakeCompletedEvent.lo:  \
+ 	javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLSessionBindingEvent.lo:  \
+ 	javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/SSLException.lo: javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ssl/ManagerFactoryParameters.lo:  \
+ 	javax/net/ssl/$(am__dirstamp) \
+ 	javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
+ javax/net/SocketFactory.lo: javax/net/$(am__dirstamp) \
+ 	javax/net/$(DEPDIR)/$(am__dirstamp)
+ javax/net/VanillaServerSocketFactory.lo: javax/net/$(am__dirstamp) \
+ 	javax/net/$(DEPDIR)/$(am__dirstamp)
+ javax/net/ServerSocketFactory.lo: javax/net/$(am__dirstamp) \
+ 	javax/net/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/$(am__dirstamp):
+ 	@$(mkdir_p) javax/print/attribute
+ 	@: > javax/print/attribute/$(am__dirstamp)
+ javax/print/attribute/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/print/attribute/$(DEPDIR)
+ 	@: > javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/HashPrintServiceAttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/Attribute.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/DocAttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/PrintRequestAttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/$(am__dirstamp):
+ 	@$(mkdir_p) javax/print/attribute/standard
+ 	@: > javax/print/attribute/standard/$(am__dirstamp)
+ javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/print/attribute/standard/$(DEPDIR)
+ 	@: > javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/Chromaticity.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/Destination.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/MediaPrintableArea.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/MediaSize.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/NumberOfInterveningJobs.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterMakeAndModel.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterStateReason.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobImpressions.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobHoldUntil.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobKOctetsSupported.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobPriority.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/QueuedJobCount.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobOriginatingUserName.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterName.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PDLOverrideSupported.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterStateReasons.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobMediaSheets.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobKOctets.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/MultipleDocumentHandling.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterMessageFromOperator.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/Severity.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/ReferenceUriSchemesSupported.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/DocumentName.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterMoreInfo.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobMessageFromOperator.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobStateReasons.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterIsAcceptingJobs.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/DateTimeAtProcessing.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PagesPerMinute.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterResolution.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobMediaSheetsSupported.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/NumberUpSupported.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/Finishings.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/DateTimeAtCompleted.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/NumberOfDocuments.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterInfo.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrintQuality.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobSheets.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/Media.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/Fidelity.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterLocation.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterMoreInfoManufacturer.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/OrientationRequested.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobState.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/DateTimeAtCreation.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PresentationDirection.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobName.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PagesPerMinuteColor.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/CopiesSupported.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterURI.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PageRanges.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/RequestingUserName.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobPrioritySupported.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobMediaSheetsCompleted.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobKOctetsProcessed.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobImpressionsCompleted.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/Compression.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobImpressionsSupported.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/Sides.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/JobStateReason.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/SheetCollate.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/Copies.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/MediaSizeName.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/OutputDeviceAssigned.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/PrinterState.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/NumberUp.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/standard/ColorSupported.lo:  \
+ 	javax/print/attribute/standard/$(am__dirstamp) \
+ 	javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/HashAttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/SetOfIntegerSyntax.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/HashDocAttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/PrintRequestAttribute.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/DateTimeSyntax.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/PrintServiceAttribute.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/UnmodifiableSetException.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/HashPrintJobAttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/PrintJobAttribute.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/AttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/ResolutionSyntax.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/URISyntax.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/AttributeSetUtilities.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/HashPrintRequestAttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/TextSyntax.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/PrintJobAttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/SupportedValuesAttribute.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/EnumSyntax.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/DocAttribute.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/Size2DSyntax.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/IntegerSyntax.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/attribute/PrintServiceAttributeSet.lo:  \
+ 	javax/print/attribute/$(am__dirstamp) \
+ 	javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
+ javax/print/$(am__dirstamp):
+ 	@$(mkdir_p) javax/print
+ 	@: > javax/print/$(am__dirstamp)
+ javax/print/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/print/$(DEPDIR)
+ 	@: > javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/PrintService.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/DocFlavor.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/DocPrintJob.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/event/$(am__dirstamp):
+ 	@$(mkdir_p) javax/print/event
+ 	@: > javax/print/event/$(am__dirstamp)
+ javax/print/event/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/print/event/$(DEPDIR)
+ 	@: > javax/print/event/$(DEPDIR)/$(am__dirstamp)
+ javax/print/event/PrintEvent.lo: javax/print/event/$(am__dirstamp) \
+ 	javax/print/event/$(DEPDIR)/$(am__dirstamp)
+ javax/print/event/PrintJobAdapter.lo:  \
+ 	javax/print/event/$(am__dirstamp) \
+ 	javax/print/event/$(DEPDIR)/$(am__dirstamp)
+ javax/print/event/PrintServiceAttributeEvent.lo:  \
+ 	javax/print/event/$(am__dirstamp) \
+ 	javax/print/event/$(DEPDIR)/$(am__dirstamp)
+ javax/print/event/PrintJobAttributeEvent.lo:  \
+ 	javax/print/event/$(am__dirstamp) \
+ 	javax/print/event/$(DEPDIR)/$(am__dirstamp)
+ javax/print/event/PrintServiceAttributeListener.lo:  \
+ 	javax/print/event/$(am__dirstamp) \
+ 	javax/print/event/$(DEPDIR)/$(am__dirstamp)
+ javax/print/event/PrintJobEvent.lo: javax/print/event/$(am__dirstamp) \
+ 	javax/print/event/$(DEPDIR)/$(am__dirstamp)
+ javax/print/event/PrintJobListener.lo:  \
+ 	javax/print/event/$(am__dirstamp) \
+ 	javax/print/event/$(DEPDIR)/$(am__dirstamp)
+ javax/print/event/PrintJobAttributeListener.lo:  \
+ 	javax/print/event/$(am__dirstamp) \
+ 	javax/print/event/$(DEPDIR)/$(am__dirstamp)
+ javax/print/PrintServiceLookup.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/URIException.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/StreamPrintService.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/MultiDoc.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/FlavorException.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/Doc.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/MultiDocPrintJob.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/CancelablePrintJob.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/MultiDocPrintService.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/ServiceUIFactory.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/AttributeException.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/print/PrintException.lo: javax/print/$(am__dirstamp) \
+ 	javax/print/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming
+ 	@: > javax/naming/$(am__dirstamp)
+ javax/naming/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming/$(DEPDIR)
+ 	@: > javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ServiceUnavailableException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming/directory
+ 	@: > javax/naming/directory/$(am__dirstamp)
+ javax/naming/directory/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming/directory/$(DEPDIR)
+ 	@: > javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/Attribute.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/SchemaViolationException.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/InitialDirContext.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/BasicAttribute.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/NoSuchAttributeException.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/InvalidAttributesException.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/InvalidAttributeValueException.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/BasicAttributes.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/AttributeModificationException.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/InvalidAttributeIdentifierException.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/DirContext.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/Attributes.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/InvalidSearchControlsException.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/SearchControls.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/AttributeInUseException.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/InvalidSearchFilterException.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/ModificationItem.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/directory/SearchResult.lo:  \
+ 	javax/naming/directory/$(am__dirstamp) \
+ 	javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/Binding.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ContextNotEmptyException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/Referenceable.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/InterruptedNamingException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/CommunicationException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/LinkException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/BinaryRefAddr.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/LinkLoopException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/AuthenticationException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NameAlreadyBoundException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/MalformedLinkException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NotContextException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming/spi
+ 	@: > javax/naming/spi/$(am__dirstamp)
+ javax/naming/spi/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming/spi/$(DEPDIR)
+ 	@: > javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/DirStateFactory.lo: javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/ResolveResult.lo: javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/ObjectFactoryBuilder.lo:  \
+ 	javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/DirObjectFactory.lo:  \
+ 	javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/DirectoryManager.lo:  \
+ 	javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/InitialContextFactoryBuilder.lo:  \
+ 	javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/ObjectFactory.lo: javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/Resolver.lo: javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/StateFactory.lo: javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/InitialContextFactory.lo:  \
+ 	javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/spi/NamingManager.lo: javax/naming/spi/$(am__dirstamp) \
+ 	javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/InvalidNameException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NamingEnumeration.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/LinkRef.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/event/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming/event
+ 	@: > javax/naming/event/$(am__dirstamp)
+ javax/naming/event/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming/event/$(DEPDIR)
+ 	@: > javax/naming/event/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/event/NamingListener.lo:  \
+ 	javax/naming/event/$(am__dirstamp) \
+ 	javax/naming/event/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/event/NamingEvent.lo: javax/naming/event/$(am__dirstamp) \
+ 	javax/naming/event/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/event/NamespaceChangeListener.lo:  \
+ 	javax/naming/event/$(am__dirstamp) \
+ 	javax/naming/event/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/event/ObjectChangeListener.lo:  \
+ 	javax/naming/event/$(am__dirstamp) \
+ 	javax/naming/event/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/event/EventContext.lo:  \
+ 	javax/naming/event/$(am__dirstamp) \
+ 	javax/naming/event/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/event/NamingExceptionEvent.lo:  \
+ 	javax/naming/event/$(am__dirstamp) \
+ 	javax/naming/event/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/event/EventDirContext.lo:  \
+ 	javax/naming/event/$(am__dirstamp) \
+ 	javax/naming/event/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NamingException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/CannotProceedException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/PartialResultException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/TimeLimitExceededException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NoPermissionException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/CompoundName.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/SizeLimitExceededException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NoInitialContextException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NameNotFoundException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/InitialContext.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NamingSecurityException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/Context.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ConfigurationException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/InsufficientResourcesException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/AuthenticationNotSupportedException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/StringRefAddr.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming/ldap
+ 	@: > javax/naming/ldap/$(am__dirstamp)
+ javax/naming/ldap/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/naming/ldap/$(DEPDIR)
+ 	@: > javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/InitialLdapContext.lo:  \
+ 	javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/ExtendedRequest.lo:  \
+ 	javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/Control.lo: javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/UnsolicitedNotificationListener.lo:  \
+ 	javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/LdapReferralException.lo:  \
+ 	javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/UnsolicitedNotificationEvent.lo:  \
+ 	javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/HasControls.lo: javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/LdapContext.lo: javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/ExtendedResponse.lo:  \
+ 	javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/UnsolicitedNotification.lo:  \
+ 	javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ldap/ControlFactory.lo:  \
+ 	javax/naming/ldap/$(am__dirstamp) \
+ 	javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/OperationNotSupportedException.lo:  \
+ 	javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/ReferralException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/LimitExceededException.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/Reference.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NameParser.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/NameClassPair.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/RefAddr.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/CompositeName.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/naming/Name.lo: javax/naming/$(am__dirstamp) \
+ 	javax/naming/$(DEPDIR)/$(am__dirstamp)
+ javax/security/cert/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/cert
+ 	@: > javax/security/cert/$(am__dirstamp)
+ javax/security/cert/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/cert/$(DEPDIR)
+ 	@: > javax/security/cert/$(DEPDIR)/$(am__dirstamp)
+ javax/security/cert/CertificateNotYetValidException.lo:  \
+ 	javax/security/cert/$(am__dirstamp) \
+ 	javax/security/cert/$(DEPDIR)/$(am__dirstamp)
+ javax/security/cert/Certificate.lo:  \
+ 	javax/security/cert/$(am__dirstamp) \
+ 	javax/security/cert/$(DEPDIR)/$(am__dirstamp)
+ javax/security/cert/X509Certificate.lo:  \
+ 	javax/security/cert/$(am__dirstamp) \
+ 	javax/security/cert/$(DEPDIR)/$(am__dirstamp)
+ javax/security/cert/X509CertBridge.lo:  \
+ 	javax/security/cert/$(am__dirstamp) \
+ 	javax/security/cert/$(DEPDIR)/$(am__dirstamp)
+ javax/security/cert/CertificateEncodingException.lo:  \
+ 	javax/security/cert/$(am__dirstamp) \
+ 	javax/security/cert/$(DEPDIR)/$(am__dirstamp)
+ javax/security/cert/CertificateExpiredException.lo:  \
+ 	javax/security/cert/$(am__dirstamp) \
+ 	javax/security/cert/$(DEPDIR)/$(am__dirstamp)
+ javax/security/cert/CertificateException.lo:  \
+ 	javax/security/cert/$(am__dirstamp) \
+ 	javax/security/cert/$(DEPDIR)/$(am__dirstamp)
+ javax/security/cert/CertificateParsingException.lo:  \
+ 	javax/security/cert/$(am__dirstamp) \
+ 	javax/security/cert/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth
+ 	@: > javax/security/auth/$(am__dirstamp)
+ javax/security/auth/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth/$(DEPDIR)
+ 	@: > javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/Destroyable.lo:  \
+ 	javax/security/auth/$(am__dirstamp) \
+ 	javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/x500/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth/x500
+ 	@: > javax/security/auth/x500/$(am__dirstamp)
+ javax/security/auth/x500/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth/x500/$(DEPDIR)
+ 	@: > javax/security/auth/x500/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/x500/X500PrivateCredential.lo:  \
+ 	javax/security/auth/x500/$(am__dirstamp) \
+ 	javax/security/auth/x500/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/x500/X500Principal.lo:  \
+ 	javax/security/auth/x500/$(am__dirstamp) \
+ 	javax/security/auth/x500/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/spi/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth/spi
+ 	@: > javax/security/auth/spi/$(am__dirstamp)
+ javax/security/auth/spi/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth/spi/$(DEPDIR)
+ 	@: > javax/security/auth/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/spi/LoginModule.lo:  \
+ 	javax/security/auth/spi/$(am__dirstamp) \
+ 	javax/security/auth/spi/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/DestroyFailedException.lo:  \
+ 	javax/security/auth/$(am__dirstamp) \
+ 	javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/SubjectDomainCombiner.lo:  \
+ 	javax/security/auth/$(am__dirstamp) \
+ 	javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/AuthPermission.lo:  \
+ 	javax/security/auth/$(am__dirstamp) \
+ 	javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/login/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth/login
+ 	@: > javax/security/auth/login/$(am__dirstamp)
+ javax/security/auth/login/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth/login/$(DEPDIR)
+ 	@: > javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/login/CredentialExpiredException.lo:  \
+ 	javax/security/auth/login/$(am__dirstamp) \
+ 	javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/login/NullConfiguration.lo:  \
+ 	javax/security/auth/login/$(am__dirstamp) \
+ 	javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/login/AccountExpiredException.lo:  \
+ 	javax/security/auth/login/$(am__dirstamp) \
+ 	javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/login/LoginException.lo:  \
+ 	javax/security/auth/login/$(am__dirstamp) \
+ 	javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/login/AppConfigurationEntry.lo:  \
+ 	javax/security/auth/login/$(am__dirstamp) \
+ 	javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/login/Configuration.lo:  \
+ 	javax/security/auth/login/$(am__dirstamp) \
+ 	javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/login/LoginContext.lo:  \
+ 	javax/security/auth/login/$(am__dirstamp) \
+ 	javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/login/FailedLoginException.lo:  \
+ 	javax/security/auth/login/$(am__dirstamp) \
+ 	javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/PrivateCredentialPermission.lo:  \
+ 	javax/security/auth/$(am__dirstamp) \
+ 	javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/Subject.lo: javax/security/auth/$(am__dirstamp) \
+ 	javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/Policy.lo: javax/security/auth/$(am__dirstamp) \
+ 	javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/Refreshable.lo:  \
+ 	javax/security/auth/$(am__dirstamp) \
+ 	javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth/callback
+ 	@: > javax/security/auth/callback/$(am__dirstamp)
+ javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/auth/callback/$(DEPDIR)
+ 	@: > javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/TextInputCallback.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/LanguageCallback.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/TextOutputCallback.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/UnsupportedCallbackException.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/Callback.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/ConfirmationCallback.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/ChoiceCallback.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/NameCallback.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/PasswordCallback.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/callback/CallbackHandler.lo:  \
+ 	javax/security/auth/callback/$(am__dirstamp) \
+ 	javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
+ javax/security/auth/RefreshFailedException.lo:  \
+ 	javax/security/auth/$(am__dirstamp) \
+ 	javax/security/auth/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/sasl
+ 	@: > javax/security/sasl/$(am__dirstamp)
+ javax/security/sasl/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/security/sasl/$(DEPDIR)
+ 	@: > javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/RealmCallback.lo:  \
+ 	javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/SaslClient.lo:  \
+ 	javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/RealmChoiceCallback.lo:  \
+ 	javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/AuthenticationException.lo:  \
+ 	javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/Sasl.lo: javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/SaslClientFactory.lo:  \
+ 	javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/AuthorizeCallback.lo:  \
+ 	javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/SaslServerFactory.lo:  \
+ 	javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/SaslException.lo:  \
+ 	javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/security/sasl/SaslServer.lo:  \
+ 	javax/security/sasl/$(am__dirstamp) \
+ 	javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/$(am__dirstamp):
+ 	@$(mkdir_p) javax/transaction
+ 	@: > javax/transaction/$(am__dirstamp)
+ javax/transaction/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/transaction/$(DEPDIR)
+ 	@: > javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/TransactionRolledbackException.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/Synchronization.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/TransactionRequiredException.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/RollbackException.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/Status.lo: javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/HeuristicMixedException.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/HeuristicRollbackException.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/SystemException.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/UserTransaction.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/NotSupportedException.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/HeuristicCommitException.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/Transaction.lo: javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/TransactionManager.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/InvalidTransactionException.lo:  \
+ 	javax/transaction/$(am__dirstamp) \
+ 	javax/transaction/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/xa/$(am__dirstamp):
+ 	@$(mkdir_p) javax/transaction/xa
+ 	@: > javax/transaction/xa/$(am__dirstamp)
+ javax/transaction/xa/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/transaction/xa/$(DEPDIR)
+ 	@: > javax/transaction/xa/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/xa/XAException.lo:  \
+ 	javax/transaction/xa/$(am__dirstamp) \
+ 	javax/transaction/xa/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/xa/XAResource.lo:  \
+ 	javax/transaction/xa/$(am__dirstamp) \
+ 	javax/transaction/xa/$(DEPDIR)/$(am__dirstamp)
+ javax/transaction/xa/Xid.lo: javax/transaction/xa/$(am__dirstamp) \
+ 	javax/transaction/xa/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/$(am__dirstamp):
+ 	@$(mkdir_p) javax/accessibility
+ 	@: > javax/accessibility/$(am__dirstamp)
+ javax/accessibility/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/accessibility/$(DEPDIR)
+ 	@: > javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleValue.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleBundle.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleContext.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleRelationSet.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/Accessible.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleTableModelChange.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleState.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleIcon.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleHypertext.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleComponent.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleText.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleRole.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleEditableText.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleRelation.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleTable.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleStateSet.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleSelection.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleExtendedTable.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleResourceBundle.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleExtendedComponent.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleHyperlink.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleKeyBinding.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/accessibility/AccessibleAction.lo:  \
+ 	javax/accessibility/$(am__dirstamp) \
+ 	javax/accessibility/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/$(am__dirstamp):
+ 	@$(mkdir_p) javax/sql
+ 	@: > javax/sql/$(am__dirstamp)
+ javax/sql/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/sql/$(DEPDIR)
+ 	@: > javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/ConnectionEventListener.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/RowSetEvent.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/ConnectionPoolDataSource.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/RowSetWriter.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/XAConnection.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/RowSet.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/DataSource.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/RowSetInternal.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/RowSetReader.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/RowSetMetaData.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/PooledConnection.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/XADataSource.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/RowSetListener.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/sql/ConnectionEvent.lo: javax/sql/$(am__dirstamp) \
+ 	javax/sql/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/$(am__dirstamp):
+ 	@$(mkdir_p) javax/crypto
+ 	@: > javax/crypto/$(am__dirstamp)
+ javax/crypto/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/crypto/$(DEPDIR)
+ 	@: > javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/Cipher.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/IllegalBlockSizeException.lo:  \
+ 	javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/MacSpi.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/SecretKeyFactorySpi.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/ShortBufferException.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/KeyAgreement.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/ExemptionMechanism.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/CipherOutputStream.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/SealedObject.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/NullCipher.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/KeyAgreementSpi.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/SecretKeyFactory.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/SecretKey.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/NullCipherImpl.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/$(am__dirstamp):
+ 	@$(mkdir_p) javax/crypto/spec
+ 	@: > javax/crypto/spec/$(am__dirstamp)
+ javax/crypto/spec/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/crypto/spec/$(DEPDIR)
+ 	@: > javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/DESKeySpec.lo: javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/DHPrivateKeySpec.lo:  \
+ 	javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/DHParameterSpec.lo:  \
+ 	javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/PBEParameterSpec.lo:  \
+ 	javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/DESedeKeySpec.lo: javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/DHGenParameterSpec.lo:  \
+ 	javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/DHPublicKeySpec.lo:  \
+ 	javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/PBEKeySpec.lo: javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/RC5ParameterSpec.lo:  \
+ 	javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/RC2ParameterSpec.lo:  \
+ 	javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/IvParameterSpec.lo:  \
+ 	javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/spec/SecretKeySpec.lo: javax/crypto/spec/$(am__dirstamp) \
+ 	javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/interfaces/$(am__dirstamp):
+ 	@$(mkdir_p) javax/crypto/interfaces
+ 	@: > javax/crypto/interfaces/$(am__dirstamp)
+ javax/crypto/interfaces/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) javax/crypto/interfaces/$(DEPDIR)
+ 	@: > javax/crypto/interfaces/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/interfaces/DHPublicKey.lo:  \
+ 	javax/crypto/interfaces/$(am__dirstamp) \
+ 	javax/crypto/interfaces/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/interfaces/DHKey.lo:  \
+ 	javax/crypto/interfaces/$(am__dirstamp) \
+ 	javax/crypto/interfaces/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/interfaces/DHPrivateKey.lo:  \
+ 	javax/crypto/interfaces/$(am__dirstamp) \
+ 	javax/crypto/interfaces/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/interfaces/PBEKey.lo:  \
+ 	javax/crypto/interfaces/$(am__dirstamp) \
+ 	javax/crypto/interfaces/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/NoSuchPaddingException.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/KeyGeneratorSpi.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/BadPaddingException.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/CipherSpi.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/KeyGenerator.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/CipherInputStream.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/ExemptionMechanismException.lo:  \
+ 	javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/ExemptionMechanismSpi.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/EncryptedPrivateKeyInfo.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ javax/crypto/Mac.lo: javax/crypto/$(am__dirstamp) \
+ 	javax/crypto/$(DEPDIR)/$(am__dirstamp)
+ org/ietf/jgss/$(am__dirstamp):
+ 	@$(mkdir_p) org/ietf/jgss
+ 	@: > org/ietf/jgss/$(am__dirstamp)
+ org/ietf/jgss/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) org/ietf/jgss/$(DEPDIR)
+ 	@: > org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
+ org/ietf/jgss/GSSManager.lo: org/ietf/jgss/$(am__dirstamp) \
+ 	org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
+ org/ietf/jgss/GSSException.lo: org/ietf/jgss/$(am__dirstamp) \
+ 	org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
+ org/ietf/jgss/MessageProp.lo: org/ietf/jgss/$(am__dirstamp) \
+ 	org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
+ org/ietf/jgss/GSSName.lo: org/ietf/jgss/$(am__dirstamp) \
+ 	org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
+ org/ietf/jgss/GSSContext.lo: org/ietf/jgss/$(am__dirstamp) \
+ 	org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
+ org/ietf/jgss/Oid.lo: org/ietf/jgss/$(am__dirstamp) \
+ 	org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
+ org/ietf/jgss/GSSCredential.lo: org/ietf/jgss/$(am__dirstamp) \
+ 	org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
+ org/ietf/jgss/ChannelBinding.lo: org/ietf/jgss/$(am__dirstamp) \
+ 	org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
+ java/lang/ConcreteProcess.lo: java/lang/$(am__dirstamp) \
+ 	java/lang/$(DEPDIR)/$(am__dirstamp)
+ gnu/classpath/Configuration.lo: gnu/classpath/$(am__dirstamp) \
+ 	gnu/classpath/$(DEPDIR)/$(am__dirstamp)
+ sysdep/$(am__dirstamp):
+ 	@$(mkdir_p) sysdep
+ 	@: > sysdep/$(am__dirstamp)
+ sysdep/$(DEPDIR)/$(am__dirstamp):
+ 	@$(mkdir_p) sysdep/$(DEPDIR)
+ 	@: > 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) 
+ 	$(GCJLINK)  $(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)"
+ 	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+ 	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ 	  if test -f $$p \
+ 	     || test -f $$p1 \
+ 	  ; then \
+ 	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ 	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ 	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ 	  else :; fi; \
+ 	done
  
! uninstall-binPROGRAMS:
! 	@$(NORMAL_UNINSTALL)
! 	@list='$(bin_PROGRAMS)'; for p in $$list; do \
! 	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
! 	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
! 	done
  
! clean-binPROGRAMS:
! 	@list='$(bin_PROGRAMS)'; for p in $$list; do \
! 	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
! 	  echo " rm -f $$p $$f"; \
! 	  rm -f $$p $$f ; \
! 	done
  
! clean-noinstPROGRAMS:
! 	@list='$(noinst_PROGRAMS)'; for p in $$list; do \
! 	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
! 	  echo " rm -f $$p $$f"; \
! 	  rm -f $$p $$f ; \
! 	done
! gnu/gcj/tools/gcj_dbtool/$(am__dirstamp):
! 	@$(mkdir_p) gnu/gcj/tools/gcj_dbtool
! 	@: > gnu/gcj/tools/gcj_dbtool/$(am__dirstamp)
! gnu/gcj/tools/gcj_dbtool/$(DEPDIR)/$(am__dirstamp):
! 	@$(mkdir_p) gnu/gcj/tools/gcj_dbtool/$(DEPDIR)
! 	@: > gnu/gcj/tools/gcj_dbtool/$(DEPDIR)/$(am__dirstamp)
! gnu/gcj/tools/gcj_dbtool/Main.$(OBJEXT):  \
! 	gnu/gcj/tools/gcj_dbtool/$(am__dirstamp) \
! 	gnu/gcj/tools/gcj_dbtool/$(DEPDIR)/$(am__dirstamp)
! gnu/gcj/tools/gcj_dbtool/natMain.$(OBJEXT):  \
! 	gnu/gcj/tools/gcj_dbtool/$(am__dirstamp) \
! 	gnu/gcj/tools/gcj_dbtool/$(DEPDIR)/$(am__dirstamp)
! gcj-dbtool$(EXEEXT): $(gcj_dbtool_OBJECTS) $(gcj_dbtool_DEPENDENCIES) 
! 	@rm -f gcj-dbtool$(EXEEXT)
! 	$(gcj_dbtool_LINK) $(gcj_dbtool_LDFLAGS) $(gcj_dbtool_OBJECTS) $(gcj_dbtool_LDADD) $(LIBS)
! gnu/gcj/convert/gen-from-JIS.$(OBJEXT):  \
! 	gnu/gcj/convert/$(am__dirstamp) \
! 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
! gnu/gcj/convert/make-trie.$(OBJEXT): gnu/gcj/convert/$(am__dirstamp) \
! 	gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
! gen-from-JIS$(EXEEXT): $(gen_from_JIS_OBJECTS) $(gen_from_JIS_DEPENDENCIES) 
! 	@rm -f gen-from-JIS$(EXEEXT)
! 	$(LINK) $(gen_from_JIS_LDFLAGS) $(gen_from_JIS_OBJECTS) $(gen_from_JIS_LDADD) $(LIBS)
! gij$(EXEEXT): $(gij_OBJECTS) $(gij_DEPENDENCIES) 
! 	@rm -f gij$(EXEEXT)
! 	$(gij_LINK) $(gij_LDFLAGS) $(gij_OBJECTS) $(gij_LDADD) $(LIBS)
! grmic$(EXEEXT): $(grmic_OBJECTS) $(grmic_DEPENDENCIES) 
! 	@rm -f grmic$(EXEEXT)
! 	$(grmic_LINK) $(grmic_LDFLAGS) $(grmic_OBJECTS) $(grmic_LDADD) $(LIBS)
! grmiregistry$(EXEEXT): $(grmiregistry_OBJECTS) $(grmiregistry_DEPENDENCIES) 
! 	@rm -f grmiregistry$(EXEEXT)
! 	$(grmiregistry_LINK) $(grmiregistry_LDFLAGS) $(grmiregistry_OBJECTS) $(grmiregistry_LDADD) $(LIBS)
! jv-convert$(EXEEXT): $(jv_convert_OBJECTS) $(jv_convert_DEPENDENCIES) 
! 	@rm -f jv-convert$(EXEEXT)
! 	$(jv_convert_LINK) $(jv_convert_LDFLAGS) $(jv_convert_OBJECTS) $(jv_convert_LDADD) $(LIBS)
! install-binSCRIPTS: $(bin_SCRIPTS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
! 	@list='$(bin_SCRIPTS)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  if test -f $$d$$p; then \
! 	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
! 	    echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
! 	    $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
  	  else :; fi; \
  	done
  
! uninstall-binSCRIPTS:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(bin_SCRIPTS)'; for p in $$list; do \
! 	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
! 	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
  	done
  
! mostlyclean-compile:
! 	-rm -f *.$(OBJEXT)
! 	-rm -f gnu/awt/LightweightRedirector.$(OBJEXT)
! 	-rm -f gnu/awt/LightweightRedirector.lo
! 	-rm -f gnu/awt/j2d/AbstractGraphicsState.$(OBJEXT)
! 	-rm -f gnu/awt/j2d/AbstractGraphicsState.lo
! 	-rm -f gnu/awt/j2d/DirectRasterGraphics.$(OBJEXT)
! 	-rm -f gnu/awt/j2d/DirectRasterGraphics.lo
! 	-rm -f gnu/awt/j2d/Graphics2DImpl.$(OBJEXT)
! 	-rm -f gnu/awt/j2d/Graphics2DImpl.lo
! 	-rm -f gnu/awt/j2d/IntegerGraphicsState.$(OBJEXT)
! 	-rm -f gnu/awt/j2d/IntegerGraphicsState.lo
! 	-rm -f gnu/awt/j2d/MappedRaster.$(OBJEXT)
! 	-rm -f gnu/awt/j2d/MappedRaster.lo
! 	-rm -f gnu/awt/xlib/XCanvasPeer.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XCanvasPeer.lo
! 	-rm -f gnu/awt/xlib/XEventLoop.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XEventLoop.lo
! 	-rm -f gnu/awt/xlib/XEventQueue.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XEventQueue.lo
! 	-rm -f gnu/awt/xlib/XFontMetrics.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XFontMetrics.lo
! 	-rm -f gnu/awt/xlib/XFontPeer.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XFontPeer.lo
! 	-rm -f gnu/awt/xlib/XFramePeer.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XFramePeer.lo
! 	-rm -f gnu/awt/xlib/XGraphics.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XGraphics.lo
! 	-rm -f gnu/awt/xlib/XGraphicsConfiguration.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XGraphicsConfiguration.lo
! 	-rm -f gnu/awt/xlib/XOffScreenImage.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XOffScreenImage.lo
! 	-rm -f gnu/awt/xlib/XPanelPeer.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XPanelPeer.lo
! 	-rm -f gnu/awt/xlib/XToolkit.$(OBJEXT)
! 	-rm -f gnu/awt/xlib/XToolkit.lo
! 	-rm -f gnu/classpath/Configuration.$(OBJEXT)
! 	-rm -f gnu/classpath/Configuration.lo
! 	-rm -f gnu/classpath/ServiceFactory.$(OBJEXT)
! 	-rm -f gnu/classpath/ServiceFactory.lo
! 	-rm -f gnu/classpath/ServiceProviderLoadingAction.$(OBJEXT)
! 	-rm -f gnu/classpath/ServiceProviderLoadingAction.lo
! 	-rm -f gnu/gcj/Core.$(OBJEXT)
! 	-rm -f gnu/gcj/Core.lo
! 	-rm -f gnu/gcj/RawData.$(OBJEXT)
! 	-rm -f gnu/gcj/RawData.lo
! 	-rm -f gnu/gcj/RawDataManaged.$(OBJEXT)
! 	-rm -f gnu/gcj/RawDataManaged.lo
! 	-rm -f gnu/gcj/convert/BytesToUnicode.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/BytesToUnicode.lo
! 	-rm -f gnu/gcj/convert/Convert.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Convert.lo
! 	-rm -f gnu/gcj/convert/IOConverter.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/IOConverter.lo
! 	-rm -f gnu/gcj/convert/Input_8859_1.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Input_8859_1.lo
! 	-rm -f gnu/gcj/convert/Input_ASCII.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Input_ASCII.lo
! 	-rm -f gnu/gcj/convert/Input_EUCJIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Input_EUCJIS.lo
! 	-rm -f gnu/gcj/convert/Input_JavaSrc.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Input_JavaSrc.lo
! 	-rm -f gnu/gcj/convert/Input_SJIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Input_SJIS.lo
! 	-rm -f gnu/gcj/convert/Input_UTF8.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Input_UTF8.lo
! 	-rm -f gnu/gcj/convert/Input_UnicodeBig.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Input_UnicodeBig.lo
! 	-rm -f gnu/gcj/convert/Input_UnicodeLittle.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Input_UnicodeLittle.lo
! 	-rm -f gnu/gcj/convert/Input_iconv.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Input_iconv.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)
! 	-rm -f gnu/gcj/convert/JIS0212_to_Unicode.lo
! 	-rm -f gnu/gcj/convert/Output_8859_1.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Output_8859_1.lo
! 	-rm -f gnu/gcj/convert/Output_ASCII.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Output_ASCII.lo
! 	-rm -f gnu/gcj/convert/Output_EUCJIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Output_EUCJIS.lo
! 	-rm -f gnu/gcj/convert/Output_JavaSrc.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Output_JavaSrc.lo
! 	-rm -f gnu/gcj/convert/Output_SJIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Output_SJIS.lo
! 	-rm -f gnu/gcj/convert/Output_UTF8.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Output_UTF8.lo
! 	-rm -f gnu/gcj/convert/Output_UnicodeLittleUnmarked.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Output_UnicodeLittleUnmarked.lo
! 	-rm -f gnu/gcj/convert/Output_iconv.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Output_iconv.lo
! 	-rm -f gnu/gcj/convert/UnicodeToBytes.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/UnicodeToBytes.lo
! 	-rm -f gnu/gcj/convert/Unicode_to_JIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/Unicode_to_JIS.lo
! 	-rm -f gnu/gcj/convert/gen-from-JIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/make-trie.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/natIconv.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/natIconv.lo
! 	-rm -f gnu/gcj/convert/natInput_EUCJIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/natInput_EUCJIS.lo
! 	-rm -f gnu/gcj/convert/natInput_SJIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/natInput_SJIS.lo
! 	-rm -f gnu/gcj/convert/natOutput_EUCJIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/natOutput_EUCJIS.lo
! 	-rm -f gnu/gcj/convert/natOutput_SJIS.$(OBJEXT)
! 	-rm -f gnu/gcj/convert/natOutput_SJIS.lo
! 	-rm -f gnu/gcj/io/DefaultMimeTypes.$(OBJEXT)
! 	-rm -f gnu/gcj/io/DefaultMimeTypes.lo
! 	-rm -f gnu/gcj/io/MimeTypes.$(OBJEXT)
! 	-rm -f gnu/gcj/io/MimeTypes.lo
! 	-rm -f gnu/gcj/io/SimpleSHSStream.$(OBJEXT)
! 	-rm -f gnu/gcj/io/SimpleSHSStream.lo
! 	-rm -f gnu/gcj/io/natSimpleSHSStream.$(OBJEXT)
! 	-rm -f gnu/gcj/io/natSimpleSHSStream.lo
! 	-rm -f gnu/gcj/io/shs.$(OBJEXT)
! 	-rm -f gnu/gcj/io/shs.lo
! 	-rm -f gnu/gcj/natCore.$(OBJEXT)
! 	-rm -f gnu/gcj/natCore.lo
! 	-rm -f gnu/gcj/runtime/BootClassLoader.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/BootClassLoader.lo
! 	-rm -f gnu/gcj/runtime/ExtensionClassLoader.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/ExtensionClassLoader.lo
! 	-rm -f gnu/gcj/runtime/FileDeleter.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/FileDeleter.lo
! 	-rm -f gnu/gcj/runtime/FinalizerThread.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/FinalizerThread.lo
! 	-rm -f gnu/gcj/runtime/HelperClassLoader.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/HelperClassLoader.lo
! 	-rm -f gnu/gcj/runtime/JNIWeakRef.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/JNIWeakRef.lo
! 	-rm -f gnu/gcj/runtime/MethodRef.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/MethodRef.lo
! 	-rm -f gnu/gcj/runtime/NameFinder.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/NameFinder.lo
! 	-rm -f gnu/gcj/runtime/PersistentByteMap.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/PersistentByteMap.lo
! 	-rm -f gnu/gcj/runtime/SharedLibHelper.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/SharedLibHelper.lo
! 	-rm -f gnu/gcj/runtime/SharedLibLoader.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/SharedLibLoader.lo
! 	-rm -f gnu/gcj/runtime/StackTrace.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/StackTrace.lo
! 	-rm -f gnu/gcj/runtime/StringBuffer.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/StringBuffer.lo
! 	-rm -f gnu/gcj/runtime/SystemClassLoader.$(OBJEXT)
! 	-rm -f gnu/gcj/runtime/SystemClassLoader.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)
! 	-rm -f gnu/gcj/tools/gcj_dbtool/natMain.$(OBJEXT)
! 	-rm -f gnu/gcj/util/Debug.$(OBJEXT)
! 	-rm -f gnu/gcj/util/Debug.lo
! 	-rm -f gnu/gcj/util/natDebug.$(OBJEXT)
! 	-rm -f gnu/gcj/util/natDebug.lo
! 	-rm -f gnu/gcj/xlib/Clip.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/Clip.lo
! 	-rm -f gnu/gcj/xlib/Colormap.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/Colormap.lo
! 	-rm -f gnu/gcj/xlib/Display.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/Display.lo
! 	-rm -f gnu/gcj/xlib/Drawable.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/Drawable.lo
! 	-rm -f gnu/gcj/xlib/Font.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/Font.lo
! 	-rm -f gnu/gcj/xlib/GC.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/GC.lo
! 	-rm -f gnu/gcj/xlib/Pixmap.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/Pixmap.lo
! 	-rm -f gnu/gcj/xlib/Screen.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/Screen.lo
! 	-rm -f gnu/gcj/xlib/Visual.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/Visual.lo
! 	-rm -f gnu/gcj/xlib/WMSizeHints.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/WMSizeHints.lo
! 	-rm -f gnu/gcj/xlib/Window.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/Window.lo
! 	-rm -f gnu/gcj/xlib/WindowAttributes.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/WindowAttributes.lo
! 	-rm -f gnu/gcj/xlib/XAnyEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XAnyEvent.lo
! 	-rm -f gnu/gcj/xlib/XButtonEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XButtonEvent.lo
! 	-rm -f gnu/gcj/xlib/XColor.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XColor.lo
! 	-rm -f gnu/gcj/xlib/XConfigureEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XConfigureEvent.lo
! 	-rm -f gnu/gcj/xlib/XConnectException.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XConnectException.lo
! 	-rm -f gnu/gcj/xlib/XEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XEvent.lo
! 	-rm -f gnu/gcj/xlib/XException.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XException.lo
! 	-rm -f gnu/gcj/xlib/XExposeEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XExposeEvent.lo
! 	-rm -f gnu/gcj/xlib/XID.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XID.lo
! 	-rm -f gnu/gcj/xlib/XImage.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XImage.lo
! 	-rm -f gnu/gcj/xlib/XUnmapEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/XUnmapEvent.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natFont.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natFont.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natGC.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natGC.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natPixmap.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natPixmap.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natScreen.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natScreen.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natVisual.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natVisual.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWMSizeHints.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWMSizeHints.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindow.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindow.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindowAttributes.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindowAttributes.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXAnyEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXAnyEvent.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXButtonEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXButtonEvent.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXColor.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXColor.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXConfigureEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXConfigureEvent.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXException.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXException.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.lo
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.$(OBJEXT)
! 	-rm -f gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo
! 	-rm -f gnu/java/awt/BitMaskExtent.$(OBJEXT)
! 	-rm -f gnu/java/awt/BitMaskExtent.lo
! 	-rm -f gnu/java/awt/BitwiseXORComposite.$(OBJEXT)
! 	-rm -f gnu/java/awt/BitwiseXORComposite.lo
! 	-rm -f gnu/java/awt/Buffers.$(OBJEXT)
! 	-rm -f gnu/java/awt/Buffers.lo
! 	-rm -f gnu/java/awt/ClasspathToolkit.$(OBJEXT)
! 	-rm -f gnu/java/awt/ClasspathToolkit.lo
! 	-rm -f gnu/java/awt/ComponentDataBlitOp.$(OBJEXT)
! 	-rm -f gnu/java/awt/ComponentDataBlitOp.lo
! 	-rm -f gnu/java/awt/EmbeddedWindow.$(OBJEXT)
! 	-rm -f gnu/java/awt/EmbeddedWindow.lo
! 	-rm -f gnu/java/awt/EmbeddedWindowSupport.$(OBJEXT)
! 	-rm -f gnu/java/awt/EmbeddedWindowSupport.lo
! 	-rm -f gnu/java/awt/EventModifier.$(OBJEXT)
! 	-rm -f gnu/java/awt/EventModifier.lo
! 	-rm -f gnu/java/awt/color/CieXyzConverter.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/CieXyzConverter.lo
! 	-rm -f gnu/java/awt/color/ClutProfileConverter.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/ClutProfileConverter.lo
! 	-rm -f gnu/java/awt/color/ColorLookUpTable.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/ColorLookUpTable.lo
! 	-rm -f gnu/java/awt/color/ColorSpaceConverter.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/ColorSpaceConverter.lo
! 	-rm -f gnu/java/awt/color/GrayProfileConverter.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/GrayProfileConverter.lo
! 	-rm -f gnu/java/awt/color/GrayScaleConverter.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/GrayScaleConverter.lo
! 	-rm -f gnu/java/awt/color/LinearRGBConverter.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/LinearRGBConverter.lo
! 	-rm -f gnu/java/awt/color/ProfileHeader.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/ProfileHeader.lo
! 	-rm -f gnu/java/awt/color/PyccConverter.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/PyccConverter.lo
! 	-rm -f gnu/java/awt/color/RgbProfileConverter.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/RgbProfileConverter.lo
! 	-rm -f gnu/java/awt/color/SrgbConverter.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/SrgbConverter.lo
! 	-rm -f gnu/java/awt/color/TagEntry.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/TagEntry.lo
! 	-rm -f gnu/java/awt/color/ToneReproductionCurve.$(OBJEXT)
! 	-rm -f gnu/java/awt/color/ToneReproductionCurve.lo
! 	-rm -f gnu/java/awt/image/ImageDecoder.$(OBJEXT)
! 	-rm -f gnu/java/awt/image/ImageDecoder.lo
! 	-rm -f gnu/java/awt/image/XBMDecoder.$(OBJEXT)
! 	-rm -f gnu/java/awt/image/XBMDecoder.lo
! 	-rm -f gnu/java/awt/peer/ClasspathFontPeer.$(OBJEXT)
! 	-rm -f gnu/java/awt/peer/ClasspathFontPeer.lo
! 	-rm -f gnu/java/awt/peer/ClasspathTextLayoutPeer.$(OBJEXT)
! 	-rm -f gnu/java/awt/peer/ClasspathTextLayoutPeer.lo
! 	-rm -f gnu/java/awt/peer/EmbeddedWindowPeer.$(OBJEXT)
! 	-rm -f gnu/java/awt/peer/EmbeddedWindowPeer.lo
! 	-rm -f gnu/java/awt/peer/GLightweightPeer.$(OBJEXT)
! 	-rm -f gnu/java/awt/peer/GLightweightPeer.lo
! 	-rm -f gnu/java/io/ASN1ParsingException.$(OBJEXT)
! 	-rm -f gnu/java/io/ASN1ParsingException.lo
! 	-rm -f gnu/java/io/Base64InputStream.$(OBJEXT)
! 	-rm -f gnu/java/io/Base64InputStream.lo
! 	-rm -f gnu/java/io/ClassLoaderObjectInputStream.$(OBJEXT)
! 	-rm -f gnu/java/io/ClassLoaderObjectInputStream.lo
! 	-rm -f gnu/java/io/NullOutputStream.$(OBJEXT)
! 	-rm -f gnu/java/io/NullOutputStream.lo
! 	-rm -f gnu/java/io/ObjectIdentityWrapper.$(OBJEXT)
! 	-rm -f gnu/java/io/ObjectIdentityWrapper.lo
! 	-rm -f gnu/java/lang/ArrayHelper.$(OBJEXT)
! 	-rm -f gnu/java/lang/ArrayHelper.lo
! 	-rm -f gnu/java/lang/ClassHelper.$(OBJEXT)
! 	-rm -f gnu/java/lang/ClassHelper.lo
! 	-rm -f gnu/java/lang/MainThread.$(OBJEXT)
! 	-rm -f gnu/java/lang/MainThread.lo
! 	-rm -f gnu/java/lang/natMainThread.$(OBJEXT)
! 	-rm -f gnu/java/lang/natMainThread.lo
! 	-rm -f gnu/java/lang/reflect/TypeSignature.$(OBJEXT)
! 	-rm -f gnu/java/lang/reflect/TypeSignature.lo
! 	-rm -f gnu/java/locale/Calendar.$(OBJEXT)
! 	-rm -f gnu/java/locale/Calendar.lo
! 	-rm -f gnu/java/locale/Calendar_de.$(OBJEXT)
! 	-rm -f gnu/java/locale/Calendar_de.lo
! 	-rm -f gnu/java/locale/Calendar_en.$(OBJEXT)
! 	-rm -f gnu/java/locale/Calendar_en.lo
! 	-rm -f gnu/java/locale/Calendar_nl.$(OBJEXT)
! 	-rm -f gnu/java/locale/Calendar_nl.lo
! 	-rm -f gnu/java/locale/LocaleInformation.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation.lo
! 	-rm -f gnu/java/locale/LocaleInformation_af_ZA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_af_ZA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_AE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_AE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_BH.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_BH.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_DZ.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_DZ.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_EG.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_EG.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_IN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_IN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_IQ.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_IQ.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_JO.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_JO.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_KW.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_KW.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_LB.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_LB.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_LY.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_LY.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_MA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_MA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_OM.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_OM.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_QA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_QA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_SD.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_SD.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_SY.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_SY.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_TN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_TN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ar_YE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ar_YE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_be_BY.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_be_BY.lo
! 	-rm -f gnu/java/locale/LocaleInformation_bn_IN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_bn_IN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_br_FR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_br_FR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_bs_BA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_bs_BA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ca_ES.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ca_ES.lo
! 	-rm -f gnu/java/locale/LocaleInformation_cs_CZ.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_cs_CZ.lo
! 	-rm -f gnu/java/locale/LocaleInformation_cy_GB.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_cy_GB.lo
! 	-rm -f gnu/java/locale/LocaleInformation_da_DK.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_da_DK.lo
! 	-rm -f gnu/java/locale/LocaleInformation_de.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_de.lo
! 	-rm -f gnu/java/locale/LocaleInformation_de_AT.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_de_AT.lo
! 	-rm -f gnu/java/locale/LocaleInformation_de_BE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_de_BE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_de_CH.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_de_CH.lo
! 	-rm -f gnu/java/locale/LocaleInformation_de_DE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_de_DE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_de_LU.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_de_LU.lo
! 	-rm -f gnu/java/locale/LocaleInformation_el_GR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_el_GR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_AU.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_AU.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_BW.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_BW.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_CA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_CA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_DK.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_DK.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_GB.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_GB.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_HK.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_HK.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_IE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_IE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_IN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_IN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_NZ.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_NZ.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_PH.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_PH.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_SG.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_SG.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_US.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_US.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_ZA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_ZA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_en_ZW.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_en_ZW.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_AR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_AR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_BO.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_BO.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_CL.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_CL.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_CO.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_CO.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_CR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_CR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_DO.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_DO.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_EC.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_EC.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_ES.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_ES.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_GT.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_GT.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_HN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_HN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_MX.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_MX.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_NI.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_NI.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_PA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_PA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_PE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_PE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_PR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_PR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_PY.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_PY.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_SV.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_SV.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_US.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_US.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_UY.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_UY.lo
! 	-rm -f gnu/java/locale/LocaleInformation_es_VE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_es_VE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_et_EE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_et_EE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_eu_ES.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_eu_ES.lo
! 	-rm -f gnu/java/locale/LocaleInformation_fa_IR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_fa_IR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_fi_FI.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_fi_FI.lo
! 	-rm -f gnu/java/locale/LocaleInformation_fo_FO.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_fo_FO.lo
! 	-rm -f gnu/java/locale/LocaleInformation_fr_BE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_fr_BE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_fr_CA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_fr_CA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_fr_CH.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_fr_CH.lo
! 	-rm -f gnu/java/locale/LocaleInformation_fr_FR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_fr_FR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_fr_LU.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_fr_LU.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ga_IE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ga_IE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_gd_GB.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_gd_GB.lo
! 	-rm -f gnu/java/locale/LocaleInformation_gl_ES.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_gl_ES.lo
! 	-rm -f gnu/java/locale/LocaleInformation_gv_GB.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_gv_GB.lo
! 	-rm -f gnu/java/locale/LocaleInformation_he_IL.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_he_IL.lo
! 	-rm -f gnu/java/locale/LocaleInformation_hi_IN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_hi_IN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_hr_HR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_hr_HR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_hu_HU.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_hu_HU.lo
! 	-rm -f gnu/java/locale/LocaleInformation_id_ID.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_id_ID.lo
! 	-rm -f gnu/java/locale/LocaleInformation_it_CH.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_it_CH.lo
! 	-rm -f gnu/java/locale/LocaleInformation_it_IT.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_it_IT.lo
! 	-rm -f gnu/java/locale/LocaleInformation_iw_IL.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_iw_IL.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ja_JP.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ja_JP.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ka_GE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ka_GE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_kl_GL.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_kl_GL.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ko_KR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ko_KR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_kw_GB.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_kw_GB.lo
! 	-rm -f gnu/java/locale/LocaleInformation_lt_LT.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_lt_LT.lo
! 	-rm -f gnu/java/locale/LocaleInformation_lv_LV.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_lv_LV.lo
! 	-rm -f gnu/java/locale/LocaleInformation_mi_NZ.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_mi_NZ.lo
! 	-rm -f gnu/java/locale/LocaleInformation_mk_MK.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_mk_MK.lo
! 	-rm -f gnu/java/locale/LocaleInformation_mr_IN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_mr_IN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_mt_MT.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_mt_MT.lo
! 	-rm -f gnu/java/locale/LocaleInformation_nl.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_nl.lo
! 	-rm -f gnu/java/locale/LocaleInformation_nl_BE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_nl_BE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_nl_NL.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_nl_NL.lo
! 	-rm -f gnu/java/locale/LocaleInformation_nn_NO.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_nn_NO.lo
! 	-rm -f gnu/java/locale/LocaleInformation_no_NO.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_no_NO.lo
! 	-rm -f gnu/java/locale/LocaleInformation_oc_FR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_oc_FR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_pl_PL.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_pl_PL.lo
! 	-rm -f gnu/java/locale/LocaleInformation_pt_BR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_pt_BR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_pt_PT.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_pt_PT.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ro_RO.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ro_RO.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ru_RU.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ru_RU.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ru_UA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ru_UA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_se_NO.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_se_NO.lo
! 	-rm -f gnu/java/locale/LocaleInformation_sk_SK.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_sk_SK.lo
! 	-rm -f gnu/java/locale/LocaleInformation_sl_SI.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_sl_SI.lo
! 	-rm -f gnu/java/locale/LocaleInformation_sq_AL.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_sq_AL.lo
! 	-rm -f gnu/java/locale/LocaleInformation_sr_YU.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_sr_YU.lo
! 	-rm -f gnu/java/locale/LocaleInformation_sv_FI.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_sv_FI.lo
! 	-rm -f gnu/java/locale/LocaleInformation_sv_SE.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_sv_SE.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ta_IN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ta_IN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_te_IN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_te_IN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_tg_TJ.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_tg_TJ.lo
! 	-rm -f gnu/java/locale/LocaleInformation_tl_PH.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_tl_PH.lo
! 	-rm -f gnu/java/locale/LocaleInformation_tr_TR.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_tr_TR.lo
! 	-rm -f gnu/java/locale/LocaleInformation_uk_UA.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_uk_UA.lo
! 	-rm -f gnu/java/locale/LocaleInformation_ur_PK.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_ur_PK.lo
! 	-rm -f gnu/java/locale/LocaleInformation_uz_UZ.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_uz_UZ.lo
! 	-rm -f gnu/java/locale/LocaleInformation_vi_VN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_vi_VN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_yi_US.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_yi_US.lo
! 	-rm -f gnu/java/locale/LocaleInformation_zh_CN.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_zh_CN.lo
! 	-rm -f gnu/java/locale/LocaleInformation_zh_HK.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_zh_HK.lo
! 	-rm -f gnu/java/locale/LocaleInformation_zh_SG.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_zh_SG.lo
! 	-rm -f gnu/java/locale/LocaleInformation_zh_TW.$(OBJEXT)
! 	-rm -f gnu/java/locale/LocaleInformation_zh_TW.lo
! 	-rm -f gnu/java/math/MPN.$(OBJEXT)
! 	-rm -f gnu/java/math/MPN.lo
! 	-rm -f gnu/java/net/BASE64.$(OBJEXT)
! 	-rm -f gnu/java/net/BASE64.lo
! 	-rm -f gnu/java/net/CRLFInputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/CRLFInputStream.lo
! 	-rm -f gnu/java/net/CRLFOutputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/CRLFOutputStream.lo
! 	-rm -f gnu/java/net/DefaultContentHandlerFactory.$(OBJEXT)
! 	-rm -f gnu/java/net/DefaultContentHandlerFactory.lo
! 	-rm -f gnu/java/net/EmptyX509TrustManager.$(OBJEXT)
! 	-rm -f gnu/java/net/EmptyX509TrustManager.lo
! 	-rm -f gnu/java/net/GetLocalHostAction.$(OBJEXT)
! 	-rm -f gnu/java/net/GetLocalHostAction.lo
! 	-rm -f gnu/java/net/HeaderFieldHelper.$(OBJEXT)
! 	-rm -f gnu/java/net/HeaderFieldHelper.lo
! 	-rm -f gnu/java/net/LineInputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/LineInputStream.lo
! 	-rm -f gnu/java/net/PlainDatagramSocketImpl.$(OBJEXT)
! 	-rm -f gnu/java/net/PlainDatagramSocketImpl.lo
! 	-rm -f gnu/java/net/PlainSocketImpl.$(OBJEXT)
! 	-rm -f gnu/java/net/PlainSocketImpl.lo
! 	-rm -f gnu/java/net/URLParseError.$(OBJEXT)
! 	-rm -f gnu/java/net/URLParseError.lo
! 	-rm -f gnu/java/net/natPlainDatagramSocketImpl.$(OBJEXT)
! 	-rm -f gnu/java/net/natPlainDatagramSocketImpl.lo
! 	-rm -f gnu/java/net/natPlainSocketImpl.$(OBJEXT)
! 	-rm -f gnu/java/net/natPlainSocketImpl.lo
! 	-rm -f gnu/java/net/protocol/core/Connection.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/core/Connection.lo
! 	-rm -f gnu/java/net/protocol/core/CoreInputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/core/CoreInputStream.lo
! 	-rm -f gnu/java/net/protocol/core/Handler.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/core/Handler.lo
! 	-rm -f gnu/java/net/protocol/core/natCoreInputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/core/natCoreInputStream.lo
! 	-rm -f gnu/java/net/protocol/file/Connection.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/file/Connection.lo
! 	-rm -f gnu/java/net/protocol/file/Handler.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/file/Handler.lo
! 	-rm -f gnu/java/net/protocol/ftp/ActiveModeDTP.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/ActiveModeDTP.lo
! 	-rm -f gnu/java/net/protocol/ftp/BlockInputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/BlockInputStream.lo
! 	-rm -f gnu/java/net/protocol/ftp/BlockOutputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/BlockOutputStream.lo
! 	-rm -f gnu/java/net/protocol/ftp/CompressedInputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/CompressedInputStream.lo
! 	-rm -f gnu/java/net/protocol/ftp/CompressedOutputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/CompressedOutputStream.lo
! 	-rm -f gnu/java/net/protocol/ftp/DTP.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/DTP.lo
! 	-rm -f gnu/java/net/protocol/ftp/DTPInputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/DTPInputStream.lo
! 	-rm -f gnu/java/net/protocol/ftp/DTPOutputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/DTPOutputStream.lo
! 	-rm -f gnu/java/net/protocol/ftp/FTPConnection.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/FTPConnection.lo
! 	-rm -f gnu/java/net/protocol/ftp/FTPException.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/FTPException.lo
! 	-rm -f gnu/java/net/protocol/ftp/FTPResponse.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/FTPResponse.lo
! 	-rm -f gnu/java/net/protocol/ftp/FTPURLConnection.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/FTPURLConnection.lo
! 	-rm -f gnu/java/net/protocol/ftp/Handler.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/Handler.lo
! 	-rm -f gnu/java/net/protocol/ftp/PassiveModeDTP.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/PassiveModeDTP.lo
! 	-rm -f gnu/java/net/protocol/ftp/StreamInputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/StreamInputStream.lo
! 	-rm -f gnu/java/net/protocol/ftp/StreamOutputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/ftp/StreamOutputStream.lo
! 	-rm -f gnu/java/net/protocol/gcjlib/Connection.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/gcjlib/Connection.lo
! 	-rm -f gnu/java/net/protocol/gcjlib/Handler.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/gcjlib/Handler.lo
! 	-rm -f gnu/java/net/protocol/http/Authenticator.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/Authenticator.lo
! 	-rm -f gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.lo
! 	-rm -f gnu/java/net/protocol/http/ByteArrayResponseBodyReader.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/ByteArrayResponseBodyReader.lo
! 	-rm -f gnu/java/net/protocol/http/ChunkedInputStream.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/ChunkedInputStream.lo
! 	-rm -f gnu/java/net/protocol/http/Cookie.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/Cookie.lo
! 	-rm -f gnu/java/net/protocol/http/CookieManager.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/CookieManager.lo
! 	-rm -f gnu/java/net/protocol/http/Credentials.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/Credentials.lo
! 	-rm -f gnu/java/net/protocol/http/HTTPConnection.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/HTTPConnection.lo
! 	-rm -f gnu/java/net/protocol/http/HTTPDateFormat.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/HTTPDateFormat.lo
! 	-rm -f gnu/java/net/protocol/http/HTTPURLConnection.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/HTTPURLConnection.lo
! 	-rm -f gnu/java/net/protocol/http/Handler.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/Handler.lo
! 	-rm -f gnu/java/net/protocol/http/Headers.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/Headers.lo
! 	-rm -f gnu/java/net/protocol/http/Request.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/Request.lo
! 	-rm -f gnu/java/net/protocol/http/RequestBodyWriter.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/RequestBodyWriter.lo
! 	-rm -f gnu/java/net/protocol/http/Response.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/Response.lo
! 	-rm -f gnu/java/net/protocol/http/ResponseBodyReader.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/ResponseBodyReader.lo
! 	-rm -f gnu/java/net/protocol/http/ResponseHeaderHandler.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/ResponseHeaderHandler.lo
! 	-rm -f gnu/java/net/protocol/http/SimpleCookieManager.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/SimpleCookieManager.lo
! 	-rm -f gnu/java/net/protocol/http/event/ConnectionEvent.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/event/ConnectionEvent.lo
! 	-rm -f gnu/java/net/protocol/http/event/ConnectionListener.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/event/ConnectionListener.lo
! 	-rm -f gnu/java/net/protocol/http/event/RequestEvent.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/event/RequestEvent.lo
! 	-rm -f gnu/java/net/protocol/http/event/RequestListener.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/http/event/RequestListener.lo
! 	-rm -f gnu/java/net/protocol/jar/Connection.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/jar/Connection.lo
! 	-rm -f gnu/java/net/protocol/jar/Handler.$(OBJEXT)
! 	-rm -f gnu/java/net/protocol/jar/Handler.lo
! 	-rm -f gnu/java/nio/ChannelInputStream.$(OBJEXT)
! 	-rm -f gnu/java/nio/ChannelInputStream.lo
! 	-rm -f gnu/java/nio/ChannelOutputStream.$(OBJEXT)
! 	-rm -f gnu/java/nio/ChannelOutputStream.lo
! 	-rm -f gnu/java/nio/ChannelReader.$(OBJEXT)
! 	-rm -f gnu/java/nio/ChannelReader.lo
! 	-rm -f gnu/java/nio/DatagramChannelImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/DatagramChannelImpl.lo
! 	-rm -f gnu/java/nio/DatagramChannelSelectionKey.$(OBJEXT)
! 	-rm -f gnu/java/nio/DatagramChannelSelectionKey.lo
! 	-rm -f gnu/java/nio/FileLockImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/FileLockImpl.lo
! 	-rm -f gnu/java/nio/InputStreamChannel.$(OBJEXT)
! 	-rm -f gnu/java/nio/InputStreamChannel.lo
! 	-rm -f gnu/java/nio/NIOConstants.$(OBJEXT)
! 	-rm -f gnu/java/nio/NIOConstants.lo
! 	-rm -f gnu/java/nio/NIODatagramSocket.$(OBJEXT)
! 	-rm -f gnu/java/nio/NIODatagramSocket.lo
! 	-rm -f gnu/java/nio/NIOServerSocket.$(OBJEXT)
! 	-rm -f gnu/java/nio/NIOServerSocket.lo
! 	-rm -f gnu/java/nio/NIOSocket.$(OBJEXT)
! 	-rm -f gnu/java/nio/NIOSocket.lo
! 	-rm -f gnu/java/nio/OutputStreamChannel.$(OBJEXT)
! 	-rm -f gnu/java/nio/OutputStreamChannel.lo
! 	-rm -f gnu/java/nio/PipeImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/PipeImpl.lo
! 	-rm -f gnu/java/nio/SelectionKeyImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/SelectionKeyImpl.lo
! 	-rm -f gnu/java/nio/SelectorImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/SelectorImpl.lo
! 	-rm -f gnu/java/nio/SelectorProviderImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/SelectorProviderImpl.lo
! 	-rm -f gnu/java/nio/ServerSocketChannelImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/ServerSocketChannelImpl.lo
! 	-rm -f gnu/java/nio/ServerSocketChannelSelectionKey.$(OBJEXT)
! 	-rm -f gnu/java/nio/ServerSocketChannelSelectionKey.lo
! 	-rm -f gnu/java/nio/SocketChannelImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/SocketChannelImpl.lo
! 	-rm -f gnu/java/nio/SocketChannelSelectionKey.$(OBJEXT)
! 	-rm -f gnu/java/nio/SocketChannelSelectionKey.lo
! 	-rm -f gnu/java/nio/VMPipe.$(OBJEXT)
! 	-rm -f gnu/java/nio/VMPipe.lo
! 	-rm -f gnu/java/nio/VMSelector.$(OBJEXT)
! 	-rm -f gnu/java/nio/VMSelector.lo
! 	-rm -f gnu/java/nio/channels/FileChannelImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/channels/FileChannelImpl.lo
! 	-rm -f gnu/java/nio/channels/natFileChannelImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/channels/natFileChannelImpl.lo
! 	-rm -f gnu/java/nio/charset/ISO_8859_1.$(OBJEXT)
! 	-rm -f gnu/java/nio/charset/ISO_8859_1.lo
! 	-rm -f gnu/java/nio/charset/Provider.$(OBJEXT)
! 	-rm -f gnu/java/nio/charset/Provider.lo
! 	-rm -f gnu/java/nio/charset/US_ASCII.$(OBJEXT)
! 	-rm -f gnu/java/nio/charset/US_ASCII.lo
! 	-rm -f gnu/java/nio/charset/UTF_16.$(OBJEXT)
! 	-rm -f gnu/java/nio/charset/UTF_16.lo
! 	-rm -f gnu/java/nio/charset/UTF_16BE.$(OBJEXT)
! 	-rm -f gnu/java/nio/charset/UTF_16BE.lo
! 	-rm -f gnu/java/nio/charset/UTF_16Decoder.$(OBJEXT)
! 	-rm -f gnu/java/nio/charset/UTF_16Decoder.lo
! 	-rm -f gnu/java/nio/charset/UTF_16Encoder.$(OBJEXT)
! 	-rm -f gnu/java/nio/charset/UTF_16Encoder.lo
! 	-rm -f gnu/java/nio/charset/UTF_16LE.$(OBJEXT)
! 	-rm -f gnu/java/nio/charset/UTF_16LE.lo
! 	-rm -f gnu/java/nio/charset/UTF_8.$(OBJEXT)
! 	-rm -f gnu/java/nio/charset/UTF_8.lo
! 	-rm -f gnu/java/nio/natNIOServerSocket.$(OBJEXT)
! 	-rm -f gnu/java/nio/natNIOServerSocket.lo
! 	-rm -f gnu/java/nio/natPipeImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/natPipeImpl.lo
! 	-rm -f gnu/java/nio/natSelectorImpl.$(OBJEXT)
! 	-rm -f gnu/java/nio/natSelectorImpl.lo
! 	-rm -f gnu/java/rmi/RMIMarshalledObjectInputStream.$(OBJEXT)
! 	-rm -f gnu/java/rmi/RMIMarshalledObjectInputStream.lo
! 	-rm -f gnu/java/rmi/RMIMarshalledObjectOutputStream.$(OBJEXT)
! 	-rm -f gnu/java/rmi/RMIMarshalledObjectOutputStream.lo
! 	-rm -f gnu/java/rmi/dgc/DGCImpl.$(OBJEXT)
! 	-rm -f gnu/java/rmi/dgc/DGCImpl.lo
! 	-rm -f gnu/java/rmi/dgc/DGCImpl_Skel.$(OBJEXT)
! 	-rm -f gnu/java/rmi/dgc/DGCImpl_Skel.lo
! 	-rm -f gnu/java/rmi/dgc/DGCImpl_Stub.$(OBJEXT)
! 	-rm -f gnu/java/rmi/dgc/DGCImpl_Stub.lo
! 	-rm -f gnu/java/rmi/registry/RegistryImpl.$(OBJEXT)
! 	-rm -f gnu/java/rmi/registry/RegistryImpl.lo
! 	-rm -f gnu/java/rmi/registry/RegistryImpl_Skel.$(OBJEXT)
! 	-rm -f gnu/java/rmi/registry/RegistryImpl_Skel.lo
! 	-rm -f gnu/java/rmi/registry/RegistryImpl_Stub.$(OBJEXT)
! 	-rm -f gnu/java/rmi/registry/RegistryImpl_Stub.lo
! 	-rm -f gnu/java/rmi/rmic/Compile_gcj.$(OBJEXT)
! 	-rm -f gnu/java/rmi/rmic/Compile_gcj.lo
! 	-rm -f gnu/java/rmi/rmic/Compile_jikes.$(OBJEXT)
! 	-rm -f gnu/java/rmi/rmic/Compile_jikes.lo
! 	-rm -f gnu/java/rmi/rmic/Compile_kjc.$(OBJEXT)
! 	-rm -f gnu/java/rmi/rmic/Compile_kjc.lo
! 	-rm -f gnu/java/rmi/rmic/Compiler.$(OBJEXT)
! 	-rm -f gnu/java/rmi/rmic/Compiler.lo
! 	-rm -f gnu/java/rmi/rmic/CompilerProcess.$(OBJEXT)
! 	-rm -f gnu/java/rmi/rmic/CompilerProcess.lo
! 	-rm -f gnu/java/rmi/rmic/RMIC.$(OBJEXT)
! 	-rm -f gnu/java/rmi/rmic/RMIC.lo
! 	-rm -f gnu/java/rmi/rmic/RMICException.$(OBJEXT)
! 	-rm -f gnu/java/rmi/rmic/RMICException.lo
! 	-rm -f gnu/java/rmi/rmic/TabbedWriter.$(OBJEXT)
! 	-rm -f gnu/java/rmi/rmic/TabbedWriter.lo
! 	-rm -f gnu/java/rmi/server/ConnectionRunnerPool.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/ConnectionRunnerPool.lo
! 	-rm -f gnu/java/rmi/server/ProtocolConstants.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/ProtocolConstants.lo
! 	-rm -f gnu/java/rmi/server/RMIDefaultSocketFactory.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/RMIDefaultSocketFactory.lo
! 	-rm -f gnu/java/rmi/server/RMIHashes.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/RMIHashes.lo
! 	-rm -f gnu/java/rmi/server/RMIIncomingThread.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/RMIIncomingThread.lo
! 	-rm -f gnu/java/rmi/server/RMIObjectInputStream.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/RMIObjectInputStream.lo
! 	-rm -f gnu/java/rmi/server/RMIObjectOutputStream.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/RMIObjectOutputStream.lo
! 	-rm -f gnu/java/rmi/server/RMIVoidValue.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/RMIVoidValue.lo
! 	-rm -f gnu/java/rmi/server/UnicastConnection.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/UnicastConnection.lo
! 	-rm -f gnu/java/rmi/server/UnicastConnectionManager.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/UnicastConnectionManager.lo
! 	-rm -f gnu/java/rmi/server/UnicastRef.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/UnicastRef.lo
! 	-rm -f gnu/java/rmi/server/UnicastRemoteCall.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/UnicastRemoteCall.lo
! 	-rm -f gnu/java/rmi/server/UnicastRemoteStub.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/UnicastRemoteStub.lo
! 	-rm -f gnu/java/rmi/server/UnicastServer.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/UnicastServer.lo
! 	-rm -f gnu/java/rmi/server/UnicastServerRef.$(OBJEXT)
! 	-rm -f gnu/java/rmi/server/UnicastServerRef.lo
! 	-rm -f gnu/java/security/Engine.$(OBJEXT)
! 	-rm -f gnu/java/security/Engine.lo
! 	-rm -f gnu/java/security/OID.$(OBJEXT)
! 	-rm -f gnu/java/security/OID.lo
! 	-rm -f gnu/java/security/PolicyFile.$(OBJEXT)
! 	-rm -f gnu/java/security/PolicyFile.lo
! 	-rm -f gnu/java/security/action/GetPropertyAction.$(OBJEXT)
! 	-rm -f gnu/java/security/action/GetPropertyAction.lo
! 	-rm -f gnu/java/security/action/GetSecurityPropertyAction.$(OBJEXT)
! 	-rm -f gnu/java/security/action/GetSecurityPropertyAction.lo
! 	-rm -f gnu/java/security/action/SetAccessibleAction.$(OBJEXT)
! 	-rm -f gnu/java/security/action/SetAccessibleAction.lo
! 	-rm -f gnu/java/security/ber/BER.$(OBJEXT)
! 	-rm -f gnu/java/security/ber/BER.lo
! 	-rm -f gnu/java/security/ber/BEREncodingException.$(OBJEXT)
! 	-rm -f gnu/java/security/ber/BEREncodingException.lo
! 	-rm -f gnu/java/security/ber/BERReader.$(OBJEXT)
! 	-rm -f gnu/java/security/ber/BERReader.lo
! 	-rm -f gnu/java/security/ber/BERValue.$(OBJEXT)
! 	-rm -f gnu/java/security/ber/BERValue.lo
! 	-rm -f gnu/java/security/der/BitString.$(OBJEXT)
! 	-rm -f gnu/java/security/der/BitString.lo
! 	-rm -f gnu/java/security/der/DER.$(OBJEXT)
! 	-rm -f gnu/java/security/der/DER.lo
! 	-rm -f gnu/java/security/der/DEREncodingException.$(OBJEXT)
! 	-rm -f gnu/java/security/der/DEREncodingException.lo
! 	-rm -f gnu/java/security/der/DERReader.$(OBJEXT)
! 	-rm -f gnu/java/security/der/DERReader.lo
! 	-rm -f gnu/java/security/der/DERValue.$(OBJEXT)
! 	-rm -f gnu/java/security/der/DERValue.lo
! 	-rm -f gnu/java/security/der/DERWriter.$(OBJEXT)
! 	-rm -f gnu/java/security/der/DERWriter.lo
! 	-rm -f gnu/java/security/pkcs/PKCS7SignedData.$(OBJEXT)
! 	-rm -f gnu/java/security/pkcs/PKCS7SignedData.lo
! 	-rm -f gnu/java/security/pkcs/SignerInfo.$(OBJEXT)
! 	-rm -f gnu/java/security/pkcs/SignerInfo.lo
! 	-rm -f gnu/java/security/provider/CollectionCertStoreImpl.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/CollectionCertStoreImpl.lo
! 	-rm -f gnu/java/security/provider/DSAKeyFactory.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/DSAKeyFactory.lo
! 	-rm -f gnu/java/security/provider/DSAKeyPairGenerator.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/DSAKeyPairGenerator.lo
! 	-rm -f gnu/java/security/provider/DSAParameterGenerator.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/DSAParameterGenerator.lo
! 	-rm -f gnu/java/security/provider/DSAParameters.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/DSAParameters.lo
! 	-rm -f gnu/java/security/provider/DSASignature.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/DSASignature.lo
! 	-rm -f gnu/java/security/provider/DefaultPolicy.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/DefaultPolicy.lo
! 	-rm -f gnu/java/security/provider/EncodedKeyFactory.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/EncodedKeyFactory.lo
! 	-rm -f gnu/java/security/provider/Gnu.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/Gnu.lo
! 	-rm -f gnu/java/security/provider/GnuDHPublicKey.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/GnuDHPublicKey.lo
! 	-rm -f gnu/java/security/provider/GnuDSAPrivateKey.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/GnuDSAPrivateKey.lo
! 	-rm -f gnu/java/security/provider/GnuDSAPublicKey.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/GnuDSAPublicKey.lo
! 	-rm -f gnu/java/security/provider/GnuRSAPrivateKey.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/GnuRSAPrivateKey.lo
! 	-rm -f gnu/java/security/provider/GnuRSAPublicKey.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/GnuRSAPublicKey.lo
! 	-rm -f gnu/java/security/provider/MD2withRSA.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/MD2withRSA.lo
! 	-rm -f gnu/java/security/provider/MD4withRSA.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/MD4withRSA.lo
! 	-rm -f gnu/java/security/provider/MD5.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/MD5.lo
! 	-rm -f gnu/java/security/provider/MD5withRSA.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/MD5withRSA.lo
! 	-rm -f gnu/java/security/provider/PKIXCertPathValidatorImpl.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/PKIXCertPathValidatorImpl.lo
! 	-rm -f gnu/java/security/provider/RSA.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/RSA.lo
! 	-rm -f gnu/java/security/provider/RSAKeyFactory.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/RSAKeyFactory.lo
! 	-rm -f gnu/java/security/provider/SHA.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/SHA.lo
! 	-rm -f gnu/java/security/provider/SHA1PRNG.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/SHA1PRNG.lo
! 	-rm -f gnu/java/security/provider/SHA1withRSA.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/SHA1withRSA.lo
! 	-rm -f gnu/java/security/provider/X509CertificateFactory.$(OBJEXT)
! 	-rm -f gnu/java/security/provider/X509CertificateFactory.lo
! 	-rm -f gnu/java/security/util/Prime.$(OBJEXT)
! 	-rm -f gnu/java/security/util/Prime.lo
! 	-rm -f gnu/java/security/x509/GnuPKIExtension.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/GnuPKIExtension.lo
! 	-rm -f gnu/java/security/x509/PolicyNodeImpl.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/PolicyNodeImpl.lo
! 	-rm -f gnu/java/security/x509/Util.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/Util.lo
! 	-rm -f gnu/java/security/x509/X500DistinguishedName.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/X500DistinguishedName.lo
! 	-rm -f gnu/java/security/x509/X509CRL.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/X509CRL.lo
! 	-rm -f gnu/java/security/x509/X509CRLEntry.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/X509CRLEntry.lo
! 	-rm -f gnu/java/security/x509/X509CRLSelectorImpl.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/X509CRLSelectorImpl.lo
! 	-rm -f gnu/java/security/x509/X509CertPath.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/X509CertPath.lo
! 	-rm -f gnu/java/security/x509/X509CertSelectorImpl.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/X509CertSelectorImpl.lo
! 	-rm -f gnu/java/security/x509/X509Certificate.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/X509Certificate.lo
! 	-rm -f gnu/java/security/x509/ext/AuthorityKeyIdentifier.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/AuthorityKeyIdentifier.lo
! 	-rm -f gnu/java/security/x509/ext/BasicConstraints.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/BasicConstraints.lo
! 	-rm -f gnu/java/security/x509/ext/CRLNumber.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/CRLNumber.lo
! 	-rm -f gnu/java/security/x509/ext/CertificatePolicies.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/CertificatePolicies.lo
! 	-rm -f gnu/java/security/x509/ext/ExtendedKeyUsage.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/ExtendedKeyUsage.lo
! 	-rm -f gnu/java/security/x509/ext/Extension.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/Extension.lo
! 	-rm -f gnu/java/security/x509/ext/GeneralNames.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/GeneralNames.lo
! 	-rm -f gnu/java/security/x509/ext/IssuerAlternativeNames.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/IssuerAlternativeNames.lo
! 	-rm -f gnu/java/security/x509/ext/KeyUsage.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/KeyUsage.lo
! 	-rm -f gnu/java/security/x509/ext/PolicyConstraint.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/PolicyConstraint.lo
! 	-rm -f gnu/java/security/x509/ext/PolicyMappings.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/PolicyMappings.lo
! 	-rm -f gnu/java/security/x509/ext/PrivateKeyUsagePeriod.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/PrivateKeyUsagePeriod.lo
! 	-rm -f gnu/java/security/x509/ext/ReasonCode.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/ReasonCode.lo
! 	-rm -f gnu/java/security/x509/ext/SubjectAlternativeNames.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/SubjectAlternativeNames.lo
! 	-rm -f gnu/java/security/x509/ext/SubjectKeyIdentifier.$(OBJEXT)
! 	-rm -f gnu/java/security/x509/ext/SubjectKeyIdentifier.lo
! 	-rm -f gnu/java/text/AttributedFormatBuffer.$(OBJEXT)
! 	-rm -f gnu/java/text/AttributedFormatBuffer.lo
! 	-rm -f gnu/java/text/BaseBreakIterator.$(OBJEXT)
! 	-rm -f gnu/java/text/BaseBreakIterator.lo
! 	-rm -f gnu/java/text/CharacterBreakIterator.$(OBJEXT)
! 	-rm -f gnu/java/text/CharacterBreakIterator.lo
! 	-rm -f gnu/java/text/FormatBuffer.$(OBJEXT)
! 	-rm -f gnu/java/text/FormatBuffer.lo
! 	-rm -f gnu/java/text/FormatCharacterIterator.$(OBJEXT)
! 	-rm -f gnu/java/text/FormatCharacterIterator.lo
! 	-rm -f gnu/java/text/LineBreakIterator.$(OBJEXT)
! 	-rm -f gnu/java/text/LineBreakIterator.lo
! 	-rm -f gnu/java/text/SentenceBreakIterator.$(OBJEXT)
! 	-rm -f gnu/java/text/SentenceBreakIterator.lo
! 	-rm -f gnu/java/text/StringFormatBuffer.$(OBJEXT)
! 	-rm -f gnu/java/text/StringFormatBuffer.lo
! 	-rm -f gnu/java/text/WordBreakIterator.$(OBJEXT)
! 	-rm -f gnu/java/text/WordBreakIterator.lo
! 	-rm -f gnu/java/util/DoubleEnumeration.$(OBJEXT)
! 	-rm -f gnu/java/util/DoubleEnumeration.lo
! 	-rm -f gnu/java/util/EmptyEnumeration.$(OBJEXT)
! 	-rm -f gnu/java/util/EmptyEnumeration.lo
! 	-rm -f gnu/java/util/prefs/FileBasedFactory.$(OBJEXT)
! 	-rm -f gnu/java/util/prefs/FileBasedFactory.lo
! 	-rm -f gnu/java/util/prefs/MemoryBasedFactory.$(OBJEXT)
! 	-rm -f gnu/java/util/prefs/MemoryBasedFactory.lo
! 	-rm -f gnu/java/util/prefs/MemoryBasedPreferences.$(OBJEXT)
! 	-rm -f gnu/java/util/prefs/MemoryBasedPreferences.lo
! 	-rm -f gnu/java/util/prefs/NodeReader.$(OBJEXT)
! 	-rm -f gnu/java/util/prefs/NodeReader.lo
! 	-rm -f gnu/java/util/prefs/NodeWriter.$(OBJEXT)
! 	-rm -f gnu/java/util/prefs/NodeWriter.lo
! 	-rm -f gnu/regexp/CharIndexed.$(OBJEXT)
! 	-rm -f gnu/regexp/CharIndexed.lo
! 	-rm -f gnu/regexp/CharIndexedCharArray.$(OBJEXT)
! 	-rm -f gnu/regexp/CharIndexedCharArray.lo
! 	-rm -f gnu/regexp/CharIndexedInputStream.$(OBJEXT)
! 	-rm -f gnu/regexp/CharIndexedInputStream.lo
! 	-rm -f gnu/regexp/CharIndexedString.$(OBJEXT)
! 	-rm -f gnu/regexp/CharIndexedString.lo
! 	-rm -f gnu/regexp/CharIndexedStringBuffer.$(OBJEXT)
! 	-rm -f gnu/regexp/CharIndexedStringBuffer.lo
! 	-rm -f gnu/regexp/RE.$(OBJEXT)
! 	-rm -f gnu/regexp/RE.lo
! 	-rm -f gnu/regexp/REException.$(OBJEXT)
! 	-rm -f gnu/regexp/REException.lo
! 	-rm -f gnu/regexp/REFilterInputStream.$(OBJEXT)
! 	-rm -f gnu/regexp/REFilterInputStream.lo
! 	-rm -f gnu/regexp/REMatch.$(OBJEXT)
! 	-rm -f gnu/regexp/REMatch.lo
! 	-rm -f gnu/regexp/REMatchEnumeration.$(OBJEXT)
! 	-rm -f gnu/regexp/REMatchEnumeration.lo
! 	-rm -f gnu/regexp/RESyntax.$(OBJEXT)
! 	-rm -f gnu/regexp/RESyntax.lo
! 	-rm -f gnu/regexp/REToken.$(OBJEXT)
! 	-rm -f gnu/regexp/REToken.lo
! 	-rm -f gnu/regexp/RETokenAny.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenAny.lo
! 	-rm -f gnu/regexp/RETokenBackRef.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenBackRef.lo
! 	-rm -f gnu/regexp/RETokenChar.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenChar.lo
! 	-rm -f gnu/regexp/RETokenEnd.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenEnd.lo
! 	-rm -f gnu/regexp/RETokenEndSub.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenEndSub.lo
! 	-rm -f gnu/regexp/RETokenLookAhead.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenLookAhead.lo
! 	-rm -f gnu/regexp/RETokenOneOf.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenOneOf.lo
! 	-rm -f gnu/regexp/RETokenPOSIX.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenPOSIX.lo
! 	-rm -f gnu/regexp/RETokenRange.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenRange.lo
! 	-rm -f gnu/regexp/RETokenRepeated.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenRepeated.lo
! 	-rm -f gnu/regexp/RETokenStart.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenStart.lo
! 	-rm -f gnu/regexp/RETokenWordBoundary.$(OBJEXT)
! 	-rm -f gnu/regexp/RETokenWordBoundary.lo
! 	-rm -f gnu/regexp/UncheckedRE.$(OBJEXT)
! 	-rm -f gnu/regexp/UncheckedRE.lo
! 	-rm -f java/applet/Applet.$(OBJEXT)
! 	-rm -f java/applet/Applet.lo
! 	-rm -f java/applet/AppletContext.$(OBJEXT)
! 	-rm -f java/applet/AppletContext.lo
! 	-rm -f java/applet/AppletStub.$(OBJEXT)
! 	-rm -f java/applet/AppletStub.lo
! 	-rm -f java/applet/AudioClip.$(OBJEXT)
! 	-rm -f java/applet/AudioClip.lo
! 	-rm -f java/awt/AWTError.$(OBJEXT)
! 	-rm -f java/awt/AWTError.lo
! 	-rm -f java/awt/AWTEvent.$(OBJEXT)
! 	-rm -f java/awt/AWTEvent.lo
! 	-rm -f java/awt/AWTEventMulticaster.$(OBJEXT)
! 	-rm -f java/awt/AWTEventMulticaster.lo
! 	-rm -f java/awt/AWTException.$(OBJEXT)
! 	-rm -f java/awt/AWTException.lo
! 	-rm -f java/awt/AWTKeyStroke.$(OBJEXT)
! 	-rm -f java/awt/AWTKeyStroke.lo
! 	-rm -f java/awt/AWTPermission.$(OBJEXT)
! 	-rm -f java/awt/AWTPermission.lo
! 	-rm -f java/awt/ActiveEvent.$(OBJEXT)
! 	-rm -f java/awt/ActiveEvent.lo
! 	-rm -f java/awt/Adjustable.$(OBJEXT)
! 	-rm -f java/awt/Adjustable.lo
! 	-rm -f java/awt/AlphaComposite.$(OBJEXT)
! 	-rm -f java/awt/AlphaComposite.lo
! 	-rm -f java/awt/AttributeValue.$(OBJEXT)
! 	-rm -f java/awt/AttributeValue.lo
! 	-rm -f java/awt/BasicStroke.$(OBJEXT)
! 	-rm -f java/awt/BasicStroke.lo
! 	-rm -f java/awt/BorderLayout.$(OBJEXT)
! 	-rm -f java/awt/BorderLayout.lo
! 	-rm -f java/awt/BufferCapabilities.$(OBJEXT)
! 	-rm -f java/awt/BufferCapabilities.lo
! 	-rm -f java/awt/Button.$(OBJEXT)
! 	-rm -f java/awt/Button.lo
! 	-rm -f java/awt/Canvas.$(OBJEXT)
! 	-rm -f java/awt/Canvas.lo
! 	-rm -f java/awt/CardLayout.$(OBJEXT)
! 	-rm -f java/awt/CardLayout.lo
! 	-rm -f java/awt/Checkbox.$(OBJEXT)
! 	-rm -f java/awt/Checkbox.lo
! 	-rm -f java/awt/CheckboxGroup.$(OBJEXT)
! 	-rm -f java/awt/CheckboxGroup.lo
! 	-rm -f java/awt/CheckboxMenuItem.$(OBJEXT)
! 	-rm -f java/awt/CheckboxMenuItem.lo
! 	-rm -f java/awt/Choice.$(OBJEXT)
! 	-rm -f java/awt/Choice.lo
! 	-rm -f java/awt/Color.$(OBJEXT)
! 	-rm -f java/awt/Color.lo
! 	-rm -f java/awt/ColorPaintContext.$(OBJEXT)
! 	-rm -f java/awt/ColorPaintContext.lo
! 	-rm -f java/awt/Component.$(OBJEXT)
! 	-rm -f java/awt/Component.lo
! 	-rm -f java/awt/ComponentOrientation.$(OBJEXT)
! 	-rm -f java/awt/ComponentOrientation.lo
! 	-rm -f java/awt/Composite.$(OBJEXT)
! 	-rm -f java/awt/Composite.lo
! 	-rm -f java/awt/CompositeContext.$(OBJEXT)
! 	-rm -f java/awt/CompositeContext.lo
! 	-rm -f java/awt/Container.$(OBJEXT)
! 	-rm -f java/awt/Container.lo
! 	-rm -f java/awt/ContainerOrderFocusTraversalPolicy.$(OBJEXT)
! 	-rm -f java/awt/ContainerOrderFocusTraversalPolicy.lo
! 	-rm -f java/awt/Cursor.$(OBJEXT)
! 	-rm -f java/awt/Cursor.lo
! 	-rm -f java/awt/DefaultFocusTraversalPolicy.$(OBJEXT)
! 	-rm -f java/awt/DefaultFocusTraversalPolicy.lo
! 	-rm -f java/awt/DefaultKeyboardFocusManager.$(OBJEXT)
! 	-rm -f java/awt/DefaultKeyboardFocusManager.lo
! 	-rm -f java/awt/Dialog.$(OBJEXT)
! 	-rm -f java/awt/Dialog.lo
! 	-rm -f java/awt/Dimension.$(OBJEXT)
! 	-rm -f java/awt/Dimension.lo
! 	-rm -f java/awt/DisplayMode.$(OBJEXT)
! 	-rm -f java/awt/DisplayMode.lo
! 	-rm -f java/awt/Event.$(OBJEXT)
! 	-rm -f java/awt/Event.lo
! 	-rm -f java/awt/EventDispatchThread.$(OBJEXT)
! 	-rm -f java/awt/EventDispatchThread.lo
! 	-rm -f java/awt/EventQueue.$(OBJEXT)
! 	-rm -f java/awt/EventQueue.lo
! 	-rm -f java/awt/FileDialog.$(OBJEXT)
! 	-rm -f java/awt/FileDialog.lo
! 	-rm -f java/awt/FlowLayout.$(OBJEXT)
! 	-rm -f java/awt/FlowLayout.lo
! 	-rm -f java/awt/FocusTraversalPolicy.$(OBJEXT)
! 	-rm -f java/awt/FocusTraversalPolicy.lo
! 	-rm -f java/awt/Font.$(OBJEXT)
! 	-rm -f java/awt/Font.lo
! 	-rm -f java/awt/FontFormatException.$(OBJEXT)
! 	-rm -f java/awt/FontFormatException.lo
! 	-rm -f java/awt/FontMetrics.$(OBJEXT)
! 	-rm -f java/awt/FontMetrics.lo
! 	-rm -f java/awt/Frame.$(OBJEXT)
! 	-rm -f java/awt/Frame.lo
! 	-rm -f java/awt/GradientPaint.$(OBJEXT)
! 	-rm -f java/awt/GradientPaint.lo
! 	-rm -f java/awt/Graphics.$(OBJEXT)
! 	-rm -f java/awt/Graphics.lo
! 	-rm -f java/awt/Graphics2D.$(OBJEXT)
! 	-rm -f java/awt/Graphics2D.lo
! 	-rm -f java/awt/GraphicsConfigTemplate.$(OBJEXT)
! 	-rm -f java/awt/GraphicsConfigTemplate.lo
! 	-rm -f java/awt/GraphicsConfiguration.$(OBJEXT)
! 	-rm -f java/awt/GraphicsConfiguration.lo
! 	-rm -f java/awt/GraphicsDevice.$(OBJEXT)
! 	-rm -f java/awt/GraphicsDevice.lo
! 	-rm -f java/awt/GraphicsEnvironment.$(OBJEXT)
! 	-rm -f java/awt/GraphicsEnvironment.lo
! 	-rm -f java/awt/GridBagConstraints.$(OBJEXT)
! 	-rm -f java/awt/GridBagConstraints.lo
! 	-rm -f java/awt/GridBagLayout.$(OBJEXT)
! 	-rm -f java/awt/GridBagLayout.lo
! 	-rm -f java/awt/GridBagLayoutInfo.$(OBJEXT)
! 	-rm -f java/awt/GridBagLayoutInfo.lo
! 	-rm -f java/awt/GridLayout.$(OBJEXT)
! 	-rm -f java/awt/GridLayout.lo
! 	-rm -f java/awt/HeadlessException.$(OBJEXT)
! 	-rm -f java/awt/HeadlessException.lo
! 	-rm -f java/awt/IllegalComponentStateException.$(OBJEXT)
! 	-rm -f java/awt/IllegalComponentStateException.lo
! 	-rm -f java/awt/Image.$(OBJEXT)
! 	-rm -f java/awt/Image.lo
! 	-rm -f java/awt/ImageCapabilities.$(OBJEXT)
! 	-rm -f java/awt/ImageCapabilities.lo
! 	-rm -f java/awt/Insets.$(OBJEXT)
! 	-rm -f java/awt/Insets.lo
! 	-rm -f java/awt/ItemSelectable.$(OBJEXT)
! 	-rm -f java/awt/ItemSelectable.lo
! 	-rm -f java/awt/JobAttributes.$(OBJEXT)
! 	-rm -f java/awt/JobAttributes.lo
! 	-rm -f java/awt/KeyEventDispatcher.$(OBJEXT)
! 	-rm -f java/awt/KeyEventDispatcher.lo
! 	-rm -f java/awt/KeyEventPostProcessor.$(OBJEXT)
! 	-rm -f java/awt/KeyEventPostProcessor.lo
! 	-rm -f java/awt/KeyboardFocusManager.$(OBJEXT)
! 	-rm -f java/awt/KeyboardFocusManager.lo
! 	-rm -f java/awt/Label.$(OBJEXT)
! 	-rm -f java/awt/Label.lo
! 	-rm -f java/awt/LayoutManager.$(OBJEXT)
! 	-rm -f java/awt/LayoutManager.lo
! 	-rm -f java/awt/LayoutManager2.$(OBJEXT)
! 	-rm -f java/awt/LayoutManager2.lo
! 	-rm -f java/awt/List.$(OBJEXT)
! 	-rm -f java/awt/List.lo
! 	-rm -f java/awt/MediaTracker.$(OBJEXT)
! 	-rm -f java/awt/MediaTracker.lo
! 	-rm -f java/awt/Menu.$(OBJEXT)
! 	-rm -f java/awt/Menu.lo
! 	-rm -f java/awt/MenuBar.$(OBJEXT)
! 	-rm -f java/awt/MenuBar.lo
! 	-rm -f java/awt/MenuComponent.$(OBJEXT)
! 	-rm -f java/awt/MenuComponent.lo
! 	-rm -f java/awt/MenuContainer.$(OBJEXT)
! 	-rm -f java/awt/MenuContainer.lo
! 	-rm -f java/awt/MenuItem.$(OBJEXT)
! 	-rm -f java/awt/MenuItem.lo
! 	-rm -f java/awt/MenuShortcut.$(OBJEXT)
! 	-rm -f java/awt/MenuShortcut.lo
! 	-rm -f java/awt/PageAttributes.$(OBJEXT)
! 	-rm -f java/awt/PageAttributes.lo
! 	-rm -f java/awt/Paint.$(OBJEXT)
! 	-rm -f java/awt/Paint.lo
! 	-rm -f java/awt/PaintContext.$(OBJEXT)
! 	-rm -f java/awt/PaintContext.lo
! 	-rm -f java/awt/Panel.$(OBJEXT)
! 	-rm -f java/awt/Panel.lo
! 	-rm -f java/awt/Point.$(OBJEXT)
! 	-rm -f java/awt/Point.lo
! 	-rm -f java/awt/Polygon.$(OBJEXT)
! 	-rm -f java/awt/Polygon.lo
! 	-rm -f java/awt/PopupMenu.$(OBJEXT)
! 	-rm -f java/awt/PopupMenu.lo
! 	-rm -f java/awt/PrintGraphics.$(OBJEXT)
! 	-rm -f java/awt/PrintGraphics.lo
! 	-rm -f java/awt/PrintJob.$(OBJEXT)
! 	-rm -f java/awt/PrintJob.lo
! 	-rm -f java/awt/Rectangle.$(OBJEXT)
! 	-rm -f java/awt/Rectangle.lo
! 	-rm -f java/awt/RenderingHints.$(OBJEXT)
! 	-rm -f java/awt/RenderingHints.lo
! 	-rm -f java/awt/Robot.$(OBJEXT)
! 	-rm -f java/awt/Robot.lo
! 	-rm -f java/awt/ScrollPane.$(OBJEXT)
! 	-rm -f java/awt/ScrollPane.lo
! 	-rm -f java/awt/ScrollPaneAdjustable.$(OBJEXT)
! 	-rm -f java/awt/ScrollPaneAdjustable.lo
! 	-rm -f java/awt/Scrollbar.$(OBJEXT)
! 	-rm -f java/awt/Scrollbar.lo
! 	-rm -f java/awt/Shape.$(OBJEXT)
! 	-rm -f java/awt/Shape.lo
! 	-rm -f java/awt/Stroke.$(OBJEXT)
! 	-rm -f java/awt/Stroke.lo
! 	-rm -f java/awt/SystemColor.$(OBJEXT)
! 	-rm -f java/awt/SystemColor.lo
! 	-rm -f java/awt/TextArea.$(OBJEXT)
! 	-rm -f java/awt/TextArea.lo
! 	-rm -f java/awt/TextComponent.$(OBJEXT)
! 	-rm -f java/awt/TextComponent.lo
! 	-rm -f java/awt/TextField.$(OBJEXT)
! 	-rm -f java/awt/TextField.lo
! 	-rm -f java/awt/TexturePaint.$(OBJEXT)
! 	-rm -f java/awt/TexturePaint.lo
! 	-rm -f java/awt/Toolkit.$(OBJEXT)
! 	-rm -f java/awt/Toolkit.lo
! 	-rm -f java/awt/Transparency.$(OBJEXT)
! 	-rm -f java/awt/Transparency.lo
! 	-rm -f java/awt/Window.$(OBJEXT)
! 	-rm -f java/awt/Window.lo
! 	-rm -f java/awt/color/CMMException.$(OBJEXT)
! 	-rm -f java/awt/color/CMMException.lo
! 	-rm -f java/awt/color/ColorSpace.$(OBJEXT)
! 	-rm -f java/awt/color/ColorSpace.lo
! 	-rm -f java/awt/color/ICC_ColorSpace.$(OBJEXT)
! 	-rm -f java/awt/color/ICC_ColorSpace.lo
! 	-rm -f java/awt/color/ICC_Profile.$(OBJEXT)
! 	-rm -f java/awt/color/ICC_Profile.lo
! 	-rm -f java/awt/color/ICC_ProfileGray.$(OBJEXT)
! 	-rm -f java/awt/color/ICC_ProfileGray.lo
! 	-rm -f java/awt/color/ICC_ProfileRGB.$(OBJEXT)
! 	-rm -f java/awt/color/ICC_ProfileRGB.lo
! 	-rm -f java/awt/color/ProfileDataException.$(OBJEXT)
! 	-rm -f java/awt/color/ProfileDataException.lo
! 	-rm -f java/awt/datatransfer/Clipboard.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/Clipboard.lo
! 	-rm -f java/awt/datatransfer/ClipboardOwner.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/ClipboardOwner.lo
! 	-rm -f java/awt/datatransfer/DataFlavor.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/DataFlavor.lo
! 	-rm -f java/awt/datatransfer/FlavorMap.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/FlavorMap.lo
! 	-rm -f java/awt/datatransfer/FlavorTable.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/FlavorTable.lo
! 	-rm -f java/awt/datatransfer/MimeTypeParseException.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/MimeTypeParseException.lo
! 	-rm -f java/awt/datatransfer/StringSelection.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/StringSelection.lo
! 	-rm -f java/awt/datatransfer/SystemFlavorMap.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/SystemFlavorMap.lo
! 	-rm -f java/awt/datatransfer/Transferable.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/Transferable.lo
! 	-rm -f java/awt/datatransfer/UnsupportedFlavorException.$(OBJEXT)
! 	-rm -f java/awt/datatransfer/UnsupportedFlavorException.lo
! 	-rm -f java/awt/dnd/Autoscroll.$(OBJEXT)
! 	-rm -f java/awt/dnd/Autoscroll.lo
! 	-rm -f java/awt/dnd/DnDConstants.$(OBJEXT)
! 	-rm -f java/awt/dnd/DnDConstants.lo
! 	-rm -f java/awt/dnd/DnDEventMulticaster.$(OBJEXT)
! 	-rm -f java/awt/dnd/DnDEventMulticaster.lo
! 	-rm -f java/awt/dnd/DragGestureEvent.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragGestureEvent.lo
! 	-rm -f java/awt/dnd/DragGestureListener.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragGestureListener.lo
! 	-rm -f java/awt/dnd/DragGestureRecognizer.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragGestureRecognizer.lo
! 	-rm -f java/awt/dnd/DragSource.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragSource.lo
! 	-rm -f java/awt/dnd/DragSourceAdapter.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragSourceAdapter.lo
! 	-rm -f java/awt/dnd/DragSourceContext.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragSourceContext.lo
! 	-rm -f java/awt/dnd/DragSourceDragEvent.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragSourceDragEvent.lo
! 	-rm -f java/awt/dnd/DragSourceDropEvent.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragSourceDropEvent.lo
! 	-rm -f java/awt/dnd/DragSourceEvent.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragSourceEvent.lo
! 	-rm -f java/awt/dnd/DragSourceListener.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragSourceListener.lo
! 	-rm -f java/awt/dnd/DragSourceMotionListener.$(OBJEXT)
! 	-rm -f java/awt/dnd/DragSourceMotionListener.lo
! 	-rm -f java/awt/dnd/DropTarget.$(OBJEXT)
! 	-rm -f java/awt/dnd/DropTarget.lo
! 	-rm -f java/awt/dnd/DropTargetAdapter.$(OBJEXT)
! 	-rm -f java/awt/dnd/DropTargetAdapter.lo
! 	-rm -f java/awt/dnd/DropTargetContext.$(OBJEXT)
! 	-rm -f java/awt/dnd/DropTargetContext.lo
! 	-rm -f java/awt/dnd/DropTargetDragEvent.$(OBJEXT)
! 	-rm -f java/awt/dnd/DropTargetDragEvent.lo
! 	-rm -f java/awt/dnd/DropTargetDropEvent.$(OBJEXT)
! 	-rm -f java/awt/dnd/DropTargetDropEvent.lo
! 	-rm -f java/awt/dnd/DropTargetEvent.$(OBJEXT)
! 	-rm -f java/awt/dnd/DropTargetEvent.lo
! 	-rm -f java/awt/dnd/DropTargetListener.$(OBJEXT)
! 	-rm -f java/awt/dnd/DropTargetListener.lo
! 	-rm -f java/awt/dnd/InvalidDnDOperationException.$(OBJEXT)
! 	-rm -f java/awt/dnd/InvalidDnDOperationException.lo
! 	-rm -f java/awt/dnd/MouseDragGestureRecognizer.$(OBJEXT)
! 	-rm -f java/awt/dnd/MouseDragGestureRecognizer.lo
! 	-rm -f java/awt/dnd/peer/DragSourceContextPeer.$(OBJEXT)
! 	-rm -f java/awt/dnd/peer/DragSourceContextPeer.lo
! 	-rm -f java/awt/dnd/peer/DropTargetContextPeer.$(OBJEXT)
! 	-rm -f java/awt/dnd/peer/DropTargetContextPeer.lo
! 	-rm -f java/awt/dnd/peer/DropTargetPeer.$(OBJEXT)
! 	-rm -f java/awt/dnd/peer/DropTargetPeer.lo
! 	-rm -f java/awt/event/AWTEventListener.$(OBJEXT)
! 	-rm -f java/awt/event/AWTEventListener.lo
! 	-rm -f java/awt/event/AWTEventListenerProxy.$(OBJEXT)
! 	-rm -f java/awt/event/AWTEventListenerProxy.lo
! 	-rm -f java/awt/event/ActionEvent.$(OBJEXT)
! 	-rm -f java/awt/event/ActionEvent.lo
! 	-rm -f java/awt/event/ActionListener.$(OBJEXT)
! 	-rm -f java/awt/event/ActionListener.lo
! 	-rm -f java/awt/event/AdjustmentEvent.$(OBJEXT)
! 	-rm -f java/awt/event/AdjustmentEvent.lo
! 	-rm -f java/awt/event/AdjustmentListener.$(OBJEXT)
! 	-rm -f java/awt/event/AdjustmentListener.lo
! 	-rm -f java/awt/event/ComponentAdapter.$(OBJEXT)
! 	-rm -f java/awt/event/ComponentAdapter.lo
! 	-rm -f java/awt/event/ComponentEvent.$(OBJEXT)
! 	-rm -f java/awt/event/ComponentEvent.lo
! 	-rm -f java/awt/event/ComponentListener.$(OBJEXT)
! 	-rm -f java/awt/event/ComponentListener.lo
! 	-rm -f java/awt/event/ContainerAdapter.$(OBJEXT)
! 	-rm -f java/awt/event/ContainerAdapter.lo
! 	-rm -f java/awt/event/ContainerEvent.$(OBJEXT)
! 	-rm -f java/awt/event/ContainerEvent.lo
! 	-rm -f java/awt/event/ContainerListener.$(OBJEXT)
! 	-rm -f java/awt/event/ContainerListener.lo
! 	-rm -f java/awt/event/FocusAdapter.$(OBJEXT)
! 	-rm -f java/awt/event/FocusAdapter.lo
! 	-rm -f java/awt/event/FocusEvent.$(OBJEXT)
! 	-rm -f java/awt/event/FocusEvent.lo
! 	-rm -f java/awt/event/FocusListener.$(OBJEXT)
! 	-rm -f java/awt/event/FocusListener.lo
! 	-rm -f java/awt/event/HierarchyBoundsAdapter.$(OBJEXT)
! 	-rm -f java/awt/event/HierarchyBoundsAdapter.lo
! 	-rm -f java/awt/event/HierarchyBoundsListener.$(OBJEXT)
! 	-rm -f java/awt/event/HierarchyBoundsListener.lo
! 	-rm -f java/awt/event/HierarchyEvent.$(OBJEXT)
! 	-rm -f java/awt/event/HierarchyEvent.lo
! 	-rm -f java/awt/event/HierarchyListener.$(OBJEXT)
! 	-rm -f java/awt/event/HierarchyListener.lo
! 	-rm -f java/awt/event/InputEvent.$(OBJEXT)
! 	-rm -f java/awt/event/InputEvent.lo
! 	-rm -f java/awt/event/InputMethodEvent.$(OBJEXT)
! 	-rm -f java/awt/event/InputMethodEvent.lo
! 	-rm -f java/awt/event/InputMethodListener.$(OBJEXT)
! 	-rm -f java/awt/event/InputMethodListener.lo
! 	-rm -f java/awt/event/InvocationEvent.$(OBJEXT)
! 	-rm -f java/awt/event/InvocationEvent.lo
! 	-rm -f java/awt/event/ItemEvent.$(OBJEXT)
! 	-rm -f java/awt/event/ItemEvent.lo
! 	-rm -f java/awt/event/ItemListener.$(OBJEXT)
! 	-rm -f java/awt/event/ItemListener.lo
! 	-rm -f java/awt/event/KeyAdapter.$(OBJEXT)
! 	-rm -f java/awt/event/KeyAdapter.lo
! 	-rm -f java/awt/event/KeyEvent.$(OBJEXT)
! 	-rm -f java/awt/event/KeyEvent.lo
! 	-rm -f java/awt/event/KeyListener.$(OBJEXT)
! 	-rm -f java/awt/event/KeyListener.lo
! 	-rm -f java/awt/event/MouseAdapter.$(OBJEXT)
! 	-rm -f java/awt/event/MouseAdapter.lo
! 	-rm -f java/awt/event/MouseEvent.$(OBJEXT)
! 	-rm -f java/awt/event/MouseEvent.lo
! 	-rm -f java/awt/event/MouseListener.$(OBJEXT)
! 	-rm -f java/awt/event/MouseListener.lo
! 	-rm -f java/awt/event/MouseMotionAdapter.$(OBJEXT)
! 	-rm -f java/awt/event/MouseMotionAdapter.lo
! 	-rm -f java/awt/event/MouseMotionListener.$(OBJEXT)
! 	-rm -f java/awt/event/MouseMotionListener.lo
! 	-rm -f java/awt/event/MouseWheelEvent.$(OBJEXT)
! 	-rm -f java/awt/event/MouseWheelEvent.lo
! 	-rm -f java/awt/event/MouseWheelListener.$(OBJEXT)
! 	-rm -f java/awt/event/MouseWheelListener.lo
! 	-rm -f java/awt/event/PaintEvent.$(OBJEXT)
! 	-rm -f java/awt/event/PaintEvent.lo
! 	-rm -f java/awt/event/TextEvent.$(OBJEXT)
! 	-rm -f java/awt/event/TextEvent.lo
! 	-rm -f java/awt/event/TextListener.$(OBJEXT)
! 	-rm -f java/awt/event/TextListener.lo
! 	-rm -f java/awt/event/WindowAdapter.$(OBJEXT)
! 	-rm -f java/awt/event/WindowAdapter.lo
! 	-rm -f java/awt/event/WindowEvent.$(OBJEXT)
! 	-rm -f java/awt/event/WindowEvent.lo
! 	-rm -f java/awt/event/WindowFocusListener.$(OBJEXT)
! 	-rm -f java/awt/event/WindowFocusListener.lo
! 	-rm -f java/awt/event/WindowListener.$(OBJEXT)
! 	-rm -f java/awt/event/WindowListener.lo
! 	-rm -f java/awt/event/WindowStateListener.$(OBJEXT)
! 	-rm -f java/awt/event/WindowStateListener.lo
! 	-rm -f java/awt/font/FontRenderContext.$(OBJEXT)
! 	-rm -f java/awt/font/FontRenderContext.lo
! 	-rm -f java/awt/font/GlyphJustificationInfo.$(OBJEXT)
! 	-rm -f java/awt/font/GlyphJustificationInfo.lo
! 	-rm -f java/awt/font/GlyphMetrics.$(OBJEXT)
! 	-rm -f java/awt/font/GlyphMetrics.lo
! 	-rm -f java/awt/font/GlyphVector.$(OBJEXT)
! 	-rm -f java/awt/font/GlyphVector.lo
! 	-rm -f java/awt/font/GraphicAttribute.$(OBJEXT)
! 	-rm -f java/awt/font/GraphicAttribute.lo
! 	-rm -f java/awt/font/ImageGraphicAttribute.$(OBJEXT)
! 	-rm -f java/awt/font/ImageGraphicAttribute.lo
! 	-rm -f java/awt/font/LineBreakMeasurer.$(OBJEXT)
! 	-rm -f java/awt/font/LineBreakMeasurer.lo
! 	-rm -f java/awt/font/LineMetrics.$(OBJEXT)
! 	-rm -f java/awt/font/LineMetrics.lo
! 	-rm -f java/awt/font/MultipleMaster.$(OBJEXT)
! 	-rm -f java/awt/font/MultipleMaster.lo
! 	-rm -f java/awt/font/NumericShaper.$(OBJEXT)
! 	-rm -f java/awt/font/NumericShaper.lo
! 	-rm -f java/awt/font/OpenType.$(OBJEXT)
! 	-rm -f java/awt/font/OpenType.lo
! 	-rm -f java/awt/font/ShapeGraphicAttribute.$(OBJEXT)
! 	-rm -f java/awt/font/ShapeGraphicAttribute.lo
! 	-rm -f java/awt/font/TextAttribute.$(OBJEXT)
! 	-rm -f java/awt/font/TextAttribute.lo
! 	-rm -f java/awt/font/TextHitInfo.$(OBJEXT)
! 	-rm -f java/awt/font/TextHitInfo.lo
! 	-rm -f java/awt/font/TextLayout.$(OBJEXT)
! 	-rm -f java/awt/font/TextLayout.lo
! 	-rm -f java/awt/font/TextMeasurer.$(OBJEXT)
! 	-rm -f java/awt/font/TextMeasurer.lo
! 	-rm -f java/awt/font/TransformAttribute.$(OBJEXT)
! 	-rm -f java/awt/font/TransformAttribute.lo
! 	-rm -f java/awt/geom/AffineTransform.$(OBJEXT)
! 	-rm -f java/awt/geom/AffineTransform.lo
! 	-rm -f java/awt/geom/Arc2D.$(OBJEXT)
! 	-rm -f java/awt/geom/Arc2D.lo
! 	-rm -f java/awt/geom/Area.$(OBJEXT)
! 	-rm -f java/awt/geom/Area.lo
! 	-rm -f java/awt/geom/CubicCurve2D.$(OBJEXT)
! 	-rm -f java/awt/geom/CubicCurve2D.lo
! 	-rm -f java/awt/geom/Dimension2D.$(OBJEXT)
! 	-rm -f java/awt/geom/Dimension2D.lo
! 	-rm -f java/awt/geom/Ellipse2D.$(OBJEXT)
! 	-rm -f java/awt/geom/Ellipse2D.lo
! 	-rm -f java/awt/geom/FlatteningPathIterator.$(OBJEXT)
! 	-rm -f java/awt/geom/FlatteningPathIterator.lo
! 	-rm -f java/awt/geom/GeneralPath.$(OBJEXT)
! 	-rm -f java/awt/geom/GeneralPath.lo
! 	-rm -f java/awt/geom/IllegalPathStateException.$(OBJEXT)
! 	-rm -f java/awt/geom/IllegalPathStateException.lo
! 	-rm -f java/awt/geom/Line2D.$(OBJEXT)
! 	-rm -f java/awt/geom/Line2D.lo
! 	-rm -f java/awt/geom/NoninvertibleTransformException.$(OBJEXT)
! 	-rm -f java/awt/geom/NoninvertibleTransformException.lo
! 	-rm -f java/awt/geom/PathIterator.$(OBJEXT)
! 	-rm -f java/awt/geom/PathIterator.lo
! 	-rm -f java/awt/geom/Point2D.$(OBJEXT)
! 	-rm -f java/awt/geom/Point2D.lo
! 	-rm -f java/awt/geom/QuadCurve2D.$(OBJEXT)
! 	-rm -f java/awt/geom/QuadCurve2D.lo
! 	-rm -f java/awt/geom/Rectangle2D.$(OBJEXT)
! 	-rm -f java/awt/geom/Rectangle2D.lo
! 	-rm -f java/awt/geom/RectangularShape.$(OBJEXT)
! 	-rm -f java/awt/geom/RectangularShape.lo
! 	-rm -f java/awt/geom/RoundRectangle2D.$(OBJEXT)
! 	-rm -f java/awt/geom/RoundRectangle2D.lo
! 	-rm -f java/awt/im/InputContext.$(OBJEXT)
! 	-rm -f java/awt/im/InputContext.lo
! 	-rm -f java/awt/im/InputMethodHighlight.$(OBJEXT)
! 	-rm -f java/awt/im/InputMethodHighlight.lo
! 	-rm -f java/awt/im/InputMethodRequests.$(OBJEXT)
! 	-rm -f java/awt/im/InputMethodRequests.lo
! 	-rm -f java/awt/im/InputSubset.$(OBJEXT)
! 	-rm -f java/awt/im/InputSubset.lo
! 	-rm -f java/awt/im/spi/InputMethod.$(OBJEXT)
! 	-rm -f java/awt/im/spi/InputMethod.lo
! 	-rm -f java/awt/im/spi/InputMethodContext.$(OBJEXT)
! 	-rm -f java/awt/im/spi/InputMethodContext.lo
! 	-rm -f java/awt/im/spi/InputMethodDescriptor.$(OBJEXT)
! 	-rm -f java/awt/im/spi/InputMethodDescriptor.lo
! 	-rm -f java/awt/image/AffineTransformOp.$(OBJEXT)
! 	-rm -f java/awt/image/AffineTransformOp.lo
! 	-rm -f java/awt/image/AreaAveragingScaleFilter.$(OBJEXT)
! 	-rm -f java/awt/image/AreaAveragingScaleFilter.lo
! 	-rm -f java/awt/image/BandCombineOp.$(OBJEXT)
! 	-rm -f java/awt/image/BandCombineOp.lo
! 	-rm -f java/awt/image/BandedSampleModel.$(OBJEXT)
! 	-rm -f java/awt/image/BandedSampleModel.lo
! 	-rm -f java/awt/image/BufferStrategy.$(OBJEXT)
! 	-rm -f java/awt/image/BufferStrategy.lo
! 	-rm -f java/awt/image/BufferedImage.$(OBJEXT)
! 	-rm -f java/awt/image/BufferedImage.lo
! 	-rm -f java/awt/image/BufferedImageFilter.$(OBJEXT)
! 	-rm -f java/awt/image/BufferedImageFilter.lo
! 	-rm -f java/awt/image/BufferedImageOp.$(OBJEXT)
! 	-rm -f java/awt/image/BufferedImageOp.lo
! 	-rm -f java/awt/image/ByteLookupTable.$(OBJEXT)
! 	-rm -f java/awt/image/ByteLookupTable.lo
! 	-rm -f java/awt/image/ColorConvertOp.$(OBJEXT)
! 	-rm -f java/awt/image/ColorConvertOp.lo
! 	-rm -f java/awt/image/ColorModel.$(OBJEXT)
! 	-rm -f java/awt/image/ColorModel.lo
! 	-rm -f java/awt/image/ComponentColorModel.$(OBJEXT)
! 	-rm -f java/awt/image/ComponentColorModel.lo
! 	-rm -f java/awt/image/ComponentSampleModel.$(OBJEXT)
! 	-rm -f java/awt/image/ComponentSampleModel.lo
! 	-rm -f java/awt/image/ConvolveOp.$(OBJEXT)
! 	-rm -f java/awt/image/ConvolveOp.lo
! 	-rm -f java/awt/image/CropImageFilter.$(OBJEXT)
! 	-rm -f java/awt/image/CropImageFilter.lo
! 	-rm -f java/awt/image/DataBuffer.$(OBJEXT)
! 	-rm -f java/awt/image/DataBuffer.lo
! 	-rm -f java/awt/image/DataBufferByte.$(OBJEXT)
! 	-rm -f java/awt/image/DataBufferByte.lo
! 	-rm -f java/awt/image/DataBufferDouble.$(OBJEXT)
! 	-rm -f java/awt/image/DataBufferDouble.lo
! 	-rm -f java/awt/image/DataBufferFloat.$(OBJEXT)
! 	-rm -f java/awt/image/DataBufferFloat.lo
! 	-rm -f java/awt/image/DataBufferInt.$(OBJEXT)
! 	-rm -f java/awt/image/DataBufferInt.lo
! 	-rm -f java/awt/image/DataBufferShort.$(OBJEXT)
! 	-rm -f java/awt/image/DataBufferShort.lo
! 	-rm -f java/awt/image/DataBufferUShort.$(OBJEXT)
! 	-rm -f java/awt/image/DataBufferUShort.lo
! 	-rm -f java/awt/image/DirectColorModel.$(OBJEXT)
! 	-rm -f java/awt/image/DirectColorModel.lo
! 	-rm -f java/awt/image/FilteredImageSource.$(OBJEXT)
! 	-rm -f java/awt/image/FilteredImageSource.lo
! 	-rm -f java/awt/image/ImageConsumer.$(OBJEXT)
! 	-rm -f java/awt/image/ImageConsumer.lo
! 	-rm -f java/awt/image/ImageFilter.$(OBJEXT)
! 	-rm -f java/awt/image/ImageFilter.lo
! 	-rm -f java/awt/image/ImageObserver.$(OBJEXT)
! 	-rm -f java/awt/image/ImageObserver.lo
! 	-rm -f java/awt/image/ImageProducer.$(OBJEXT)
! 	-rm -f java/awt/image/ImageProducer.lo
! 	-rm -f java/awt/image/ImagingOpException.$(OBJEXT)
! 	-rm -f java/awt/image/ImagingOpException.lo
! 	-rm -f java/awt/image/IndexColorModel.$(OBJEXT)
! 	-rm -f java/awt/image/IndexColorModel.lo
! 	-rm -f java/awt/image/Kernel.$(OBJEXT)
! 	-rm -f java/awt/image/Kernel.lo
! 	-rm -f java/awt/image/LookupOp.$(OBJEXT)
! 	-rm -f java/awt/image/LookupOp.lo
! 	-rm -f java/awt/image/LookupTable.$(OBJEXT)
! 	-rm -f java/awt/image/LookupTable.lo
! 	-rm -f java/awt/image/MemoryImageSource.$(OBJEXT)
! 	-rm -f java/awt/image/MemoryImageSource.lo
! 	-rm -f java/awt/image/MultiPixelPackedSampleModel.$(OBJEXT)
! 	-rm -f java/awt/image/MultiPixelPackedSampleModel.lo
! 	-rm -f java/awt/image/PackedColorModel.$(OBJEXT)
! 	-rm -f java/awt/image/PackedColorModel.lo
! 	-rm -f java/awt/image/PixelGrabber.$(OBJEXT)
! 	-rm -f java/awt/image/PixelGrabber.lo
! 	-rm -f java/awt/image/PixelInterleavedSampleModel.$(OBJEXT)
! 	-rm -f java/awt/image/PixelInterleavedSampleModel.lo
! 	-rm -f java/awt/image/RGBImageFilter.$(OBJEXT)
! 	-rm -f java/awt/image/RGBImageFilter.lo
! 	-rm -f java/awt/image/Raster.$(OBJEXT)
! 	-rm -f java/awt/image/Raster.lo
! 	-rm -f java/awt/image/RasterFormatException.$(OBJEXT)
! 	-rm -f java/awt/image/RasterFormatException.lo
! 	-rm -f java/awt/image/RasterOp.$(OBJEXT)
! 	-rm -f java/awt/image/RasterOp.lo
! 	-rm -f java/awt/image/RenderedImage.$(OBJEXT)
! 	-rm -f java/awt/image/RenderedImage.lo
! 	-rm -f java/awt/image/ReplicateScaleFilter.$(OBJEXT)
! 	-rm -f java/awt/image/ReplicateScaleFilter.lo
! 	-rm -f java/awt/image/RescaleOp.$(OBJEXT)
! 	-rm -f java/awt/image/RescaleOp.lo
! 	-rm -f java/awt/image/SampleModel.$(OBJEXT)
! 	-rm -f java/awt/image/SampleModel.lo
! 	-rm -f java/awt/image/ShortLookupTable.$(OBJEXT)
! 	-rm -f java/awt/image/ShortLookupTable.lo
! 	-rm -f java/awt/image/SinglePixelPackedSampleModel.$(OBJEXT)
! 	-rm -f java/awt/image/SinglePixelPackedSampleModel.lo
! 	-rm -f java/awt/image/TileObserver.$(OBJEXT)
! 	-rm -f java/awt/image/TileObserver.lo
! 	-rm -f java/awt/image/VolatileImage.$(OBJEXT)
! 	-rm -f java/awt/image/VolatileImage.lo
! 	-rm -f java/awt/image/WritableRaster.$(OBJEXT)
! 	-rm -f java/awt/image/WritableRaster.lo
! 	-rm -f java/awt/image/WritableRenderedImage.$(OBJEXT)
! 	-rm -f java/awt/image/WritableRenderedImage.lo
! 	-rm -f java/awt/image/renderable/ContextualRenderedImageFactory.$(OBJEXT)
! 	-rm -f java/awt/image/renderable/ContextualRenderedImageFactory.lo
! 	-rm -f java/awt/image/renderable/ParameterBlock.$(OBJEXT)
! 	-rm -f java/awt/image/renderable/ParameterBlock.lo
! 	-rm -f java/awt/image/renderable/RenderContext.$(OBJEXT)
! 	-rm -f java/awt/image/renderable/RenderContext.lo
! 	-rm -f java/awt/image/renderable/RenderableImage.$(OBJEXT)
! 	-rm -f java/awt/image/renderable/RenderableImage.lo
! 	-rm -f java/awt/image/renderable/RenderableImageOp.$(OBJEXT)
! 	-rm -f java/awt/image/renderable/RenderableImageOp.lo
! 	-rm -f java/awt/image/renderable/RenderableImageProducer.$(OBJEXT)
! 	-rm -f java/awt/image/renderable/RenderableImageProducer.lo
! 	-rm -f java/awt/image/renderable/RenderedImageFactory.$(OBJEXT)
! 	-rm -f java/awt/image/renderable/RenderedImageFactory.lo
! 	-rm -f java/awt/peer/ButtonPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/ButtonPeer.lo
! 	-rm -f java/awt/peer/CanvasPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/CanvasPeer.lo
! 	-rm -f java/awt/peer/CheckboxMenuItemPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/CheckboxMenuItemPeer.lo
! 	-rm -f java/awt/peer/CheckboxPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/CheckboxPeer.lo
! 	-rm -f java/awt/peer/ChoicePeer.$(OBJEXT)
! 	-rm -f java/awt/peer/ChoicePeer.lo
! 	-rm -f java/awt/peer/ComponentPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/ComponentPeer.lo
! 	-rm -f java/awt/peer/ContainerPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/ContainerPeer.lo
! 	-rm -f java/awt/peer/DialogPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/DialogPeer.lo
! 	-rm -f java/awt/peer/FileDialogPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/FileDialogPeer.lo
! 	-rm -f java/awt/peer/FontPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/FontPeer.lo
! 	-rm -f java/awt/peer/FramePeer.$(OBJEXT)
! 	-rm -f java/awt/peer/FramePeer.lo
! 	-rm -f java/awt/peer/LabelPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/LabelPeer.lo
! 	-rm -f java/awt/peer/LightweightPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/LightweightPeer.lo
! 	-rm -f java/awt/peer/ListPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/ListPeer.lo
! 	-rm -f java/awt/peer/MenuBarPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/MenuBarPeer.lo
! 	-rm -f java/awt/peer/MenuComponentPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/MenuComponentPeer.lo
! 	-rm -f java/awt/peer/MenuItemPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/MenuItemPeer.lo
! 	-rm -f java/awt/peer/MenuPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/MenuPeer.lo
! 	-rm -f java/awt/peer/PanelPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/PanelPeer.lo
! 	-rm -f java/awt/peer/PopupMenuPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/PopupMenuPeer.lo
! 	-rm -f java/awt/peer/RobotPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/RobotPeer.lo
! 	-rm -f java/awt/peer/ScrollPanePeer.$(OBJEXT)
! 	-rm -f java/awt/peer/ScrollPanePeer.lo
! 	-rm -f java/awt/peer/ScrollbarPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/ScrollbarPeer.lo
! 	-rm -f java/awt/peer/TextAreaPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/TextAreaPeer.lo
! 	-rm -f java/awt/peer/TextComponentPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/TextComponentPeer.lo
! 	-rm -f java/awt/peer/TextFieldPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/TextFieldPeer.lo
! 	-rm -f java/awt/peer/WindowPeer.$(OBJEXT)
! 	-rm -f java/awt/peer/WindowPeer.lo
! 	-rm -f java/awt/print/Book.$(OBJEXT)
! 	-rm -f java/awt/print/Book.lo
! 	-rm -f java/awt/print/PageFormat.$(OBJEXT)
! 	-rm -f java/awt/print/PageFormat.lo
! 	-rm -f java/awt/print/Pageable.$(OBJEXT)
! 	-rm -f java/awt/print/Pageable.lo
! 	-rm -f java/awt/print/Paper.$(OBJEXT)
! 	-rm -f java/awt/print/Paper.lo
! 	-rm -f java/awt/print/Printable.$(OBJEXT)
! 	-rm -f java/awt/print/Printable.lo
! 	-rm -f java/awt/print/PrinterAbortException.$(OBJEXT)
! 	-rm -f java/awt/print/PrinterAbortException.lo
! 	-rm -f java/awt/print/PrinterException.$(OBJEXT)
! 	-rm -f java/awt/print/PrinterException.lo
! 	-rm -f java/awt/print/PrinterGraphics.$(OBJEXT)
! 	-rm -f java/awt/print/PrinterGraphics.lo
! 	-rm -f java/awt/print/PrinterIOException.$(OBJEXT)
! 	-rm -f java/awt/print/PrinterIOException.lo
! 	-rm -f java/awt/print/PrinterJob.$(OBJEXT)
! 	-rm -f java/awt/print/PrinterJob.lo
! 	-rm -f java/beans/AppletInitializer.$(OBJEXT)
! 	-rm -f java/beans/AppletInitializer.lo
! 	-rm -f java/beans/BeanDescriptor.$(OBJEXT)
! 	-rm -f java/beans/BeanDescriptor.lo
! 	-rm -f java/beans/BeanInfo.$(OBJEXT)
! 	-rm -f java/beans/BeanInfo.lo
! 	-rm -f java/beans/Beans.$(OBJEXT)
! 	-rm -f java/beans/Beans.lo
! 	-rm -f java/beans/Customizer.$(OBJEXT)
! 	-rm -f java/beans/Customizer.lo
! 	-rm -f java/beans/DesignMode.$(OBJEXT)
! 	-rm -f java/beans/DesignMode.lo
! 	-rm -f java/beans/EventHandler.$(OBJEXT)
! 	-rm -f java/beans/EventHandler.lo
! 	-rm -f java/beans/EventSetDescriptor.$(OBJEXT)
! 	-rm -f java/beans/EventSetDescriptor.lo
! 	-rm -f java/beans/ExceptionListener.$(OBJEXT)
! 	-rm -f java/beans/ExceptionListener.lo
! 	-rm -f java/beans/Expression.$(OBJEXT)
! 	-rm -f java/beans/Expression.lo
! 	-rm -f java/beans/FeatureDescriptor.$(OBJEXT)
! 	-rm -f java/beans/FeatureDescriptor.lo
! 	-rm -f java/beans/IndexedPropertyDescriptor.$(OBJEXT)
! 	-rm -f java/beans/IndexedPropertyDescriptor.lo
! 	-rm -f java/beans/IntrospectionException.$(OBJEXT)
! 	-rm -f java/beans/IntrospectionException.lo
! 	-rm -f java/beans/Introspector.$(OBJEXT)
! 	-rm -f java/beans/Introspector.lo
! 	-rm -f java/beans/MethodDescriptor.$(OBJEXT)
! 	-rm -f java/beans/MethodDescriptor.lo
! 	-rm -f java/beans/ParameterDescriptor.$(OBJEXT)
! 	-rm -f java/beans/ParameterDescriptor.lo
! 	-rm -f java/beans/PropertyChangeEvent.$(OBJEXT)
! 	-rm -f java/beans/PropertyChangeEvent.lo
! 	-rm -f java/beans/PropertyChangeListener.$(OBJEXT)
! 	-rm -f java/beans/PropertyChangeListener.lo
! 	-rm -f java/beans/PropertyChangeListenerProxy.$(OBJEXT)
! 	-rm -f java/beans/PropertyChangeListenerProxy.lo
! 	-rm -f java/beans/PropertyChangeSupport.$(OBJEXT)
! 	-rm -f java/beans/PropertyChangeSupport.lo
! 	-rm -f java/beans/PropertyDescriptor.$(OBJEXT)
! 	-rm -f java/beans/PropertyDescriptor.lo
! 	-rm -f java/beans/PropertyEditor.$(OBJEXT)
! 	-rm -f java/beans/PropertyEditor.lo
! 	-rm -f java/beans/PropertyEditorManager.$(OBJEXT)
! 	-rm -f java/beans/PropertyEditorManager.lo
! 	-rm -f java/beans/PropertyEditorSupport.$(OBJEXT)
! 	-rm -f java/beans/PropertyEditorSupport.lo
! 	-rm -f java/beans/PropertyVetoException.$(OBJEXT)
! 	-rm -f java/beans/PropertyVetoException.lo
! 	-rm -f java/beans/SimpleBeanInfo.$(OBJEXT)
! 	-rm -f java/beans/SimpleBeanInfo.lo
! 	-rm -f java/beans/Statement.$(OBJEXT)
! 	-rm -f java/beans/Statement.lo
! 	-rm -f java/beans/VetoableChangeListener.$(OBJEXT)
! 	-rm -f java/beans/VetoableChangeListener.lo
! 	-rm -f java/beans/VetoableChangeListenerProxy.$(OBJEXT)
! 	-rm -f java/beans/VetoableChangeListenerProxy.lo
! 	-rm -f java/beans/VetoableChangeSupport.$(OBJEXT)
! 	-rm -f java/beans/VetoableChangeSupport.lo
! 	-rm -f java/beans/Visibility.$(OBJEXT)
! 	-rm -f java/beans/Visibility.lo
! 	-rm -f java/beans/XMLDecoder.$(OBJEXT)
! 	-rm -f java/beans/XMLDecoder.lo
! 	-rm -f java/beans/beancontext/BeanContext.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContext.lo
! 	-rm -f java/beans/beancontext/BeanContextChild.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextChild.lo
! 	-rm -f java/beans/beancontext/BeanContextChildComponentProxy.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextChildComponentProxy.lo
! 	-rm -f java/beans/beancontext/BeanContextChildSupport.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextChildSupport.lo
! 	-rm -f java/beans/beancontext/BeanContextContainerProxy.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextContainerProxy.lo
! 	-rm -f java/beans/beancontext/BeanContextEvent.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextEvent.lo
! 	-rm -f java/beans/beancontext/BeanContextMembershipEvent.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextMembershipEvent.lo
! 	-rm -f java/beans/beancontext/BeanContextMembershipListener.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextMembershipListener.lo
! 	-rm -f java/beans/beancontext/BeanContextProxy.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextProxy.lo
! 	-rm -f java/beans/beancontext/BeanContextServiceAvailableEvent.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextServiceAvailableEvent.lo
! 	-rm -f java/beans/beancontext/BeanContextServiceProvider.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextServiceProvider.lo
! 	-rm -f java/beans/beancontext/BeanContextServiceProviderBeanInfo.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextServiceProviderBeanInfo.lo
! 	-rm -f java/beans/beancontext/BeanContextServiceRevokedEvent.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextServiceRevokedEvent.lo
! 	-rm -f java/beans/beancontext/BeanContextServiceRevokedListener.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextServiceRevokedListener.lo
! 	-rm -f java/beans/beancontext/BeanContextServices.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextServices.lo
! 	-rm -f java/beans/beancontext/BeanContextServicesListener.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextServicesListener.lo
! 	-rm -f java/beans/beancontext/BeanContextServicesSupport.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextServicesSupport.lo
! 	-rm -f java/beans/beancontext/BeanContextSupport.$(OBJEXT)
! 	-rm -f java/beans/beancontext/BeanContextSupport.lo
! 	-rm -f java/io/BufferedInputStream.$(OBJEXT)
! 	-rm -f java/io/BufferedInputStream.lo
! 	-rm -f java/io/BufferedOutputStream.$(OBJEXT)
! 	-rm -f java/io/BufferedOutputStream.lo
! 	-rm -f java/io/BufferedReader.$(OBJEXT)
! 	-rm -f java/io/BufferedReader.lo
! 	-rm -f java/io/BufferedWriter.$(OBJEXT)
! 	-rm -f java/io/BufferedWriter.lo
! 	-rm -f java/io/ByteArrayInputStream.$(OBJEXT)
! 	-rm -f java/io/ByteArrayInputStream.lo
! 	-rm -f java/io/ByteArrayOutputStream.$(OBJEXT)
! 	-rm -f java/io/ByteArrayOutputStream.lo
! 	-rm -f java/io/CharArrayReader.$(OBJEXT)
! 	-rm -f java/io/CharArrayReader.lo
! 	-rm -f java/io/CharArrayWriter.$(OBJEXT)
! 	-rm -f java/io/CharArrayWriter.lo
! 	-rm -f java/io/CharConversionException.$(OBJEXT)
! 	-rm -f java/io/CharConversionException.lo
! 	-rm -f java/io/DataInput.$(OBJEXT)
! 	-rm -f java/io/DataInput.lo
! 	-rm -f java/io/DataInputStream.$(OBJEXT)
! 	-rm -f java/io/DataInputStream.lo
! 	-rm -f java/io/DataOutput.$(OBJEXT)
! 	-rm -f java/io/DataOutput.lo
! 	-rm -f java/io/DataOutputStream.$(OBJEXT)
! 	-rm -f java/io/DataOutputStream.lo
! 	-rm -f java/io/EOFException.$(OBJEXT)
! 	-rm -f java/io/EOFException.lo
! 	-rm -f java/io/Externalizable.$(OBJEXT)
! 	-rm -f java/io/Externalizable.lo
! 	-rm -f java/io/File.$(OBJEXT)
! 	-rm -f java/io/File.lo
! 	-rm -f java/io/FileDescriptor.$(OBJEXT)
! 	-rm -f java/io/FileDescriptor.lo
! 	-rm -f java/io/FileFilter.$(OBJEXT)
! 	-rm -f java/io/FileFilter.lo
! 	-rm -f java/io/FileInputStream.$(OBJEXT)
! 	-rm -f java/io/FileInputStream.lo
! 	-rm -f java/io/FileNotFoundException.$(OBJEXT)
! 	-rm -f java/io/FileNotFoundException.lo
! 	-rm -f java/io/FileOutputStream.$(OBJEXT)
! 	-rm -f java/io/FileOutputStream.lo
! 	-rm -f java/io/FilePermission.$(OBJEXT)
! 	-rm -f java/io/FilePermission.lo
! 	-rm -f java/io/FileReader.$(OBJEXT)
! 	-rm -f java/io/FileReader.lo
! 	-rm -f java/io/FileWriter.$(OBJEXT)
! 	-rm -f java/io/FileWriter.lo
! 	-rm -f java/io/FilenameFilter.$(OBJEXT)
! 	-rm -f java/io/FilenameFilter.lo
! 	-rm -f java/io/FilterInputStream.$(OBJEXT)
! 	-rm -f java/io/FilterInputStream.lo
! 	-rm -f java/io/FilterOutputStream.$(OBJEXT)
! 	-rm -f java/io/FilterOutputStream.lo
! 	-rm -f java/io/FilterReader.$(OBJEXT)
! 	-rm -f java/io/FilterReader.lo
! 	-rm -f java/io/FilterWriter.$(OBJEXT)
! 	-rm -f java/io/FilterWriter.lo
! 	-rm -f java/io/IOException.$(OBJEXT)
! 	-rm -f java/io/IOException.lo
! 	-rm -f java/io/InputStream.$(OBJEXT)
! 	-rm -f java/io/InputStream.lo
! 	-rm -f java/io/InputStreamReader.$(OBJEXT)
! 	-rm -f java/io/InputStreamReader.lo
! 	-rm -f java/io/InterruptedIOException.$(OBJEXT)
! 	-rm -f java/io/InterruptedIOException.lo
! 	-rm -f java/io/InvalidClassException.$(OBJEXT)
! 	-rm -f java/io/InvalidClassException.lo
! 	-rm -f java/io/InvalidObjectException.$(OBJEXT)
! 	-rm -f java/io/InvalidObjectException.lo
! 	-rm -f java/io/LineNumberInputStream.$(OBJEXT)
! 	-rm -f java/io/LineNumberInputStream.lo
! 	-rm -f java/io/LineNumberReader.$(OBJEXT)
! 	-rm -f java/io/LineNumberReader.lo
! 	-rm -f java/io/NotActiveException.$(OBJEXT)
! 	-rm -f java/io/NotActiveException.lo
! 	-rm -f java/io/NotSerializableException.$(OBJEXT)
! 	-rm -f java/io/NotSerializableException.lo
! 	-rm -f java/io/ObjectInput.$(OBJEXT)
! 	-rm -f java/io/ObjectInput.lo
! 	-rm -f java/io/ObjectInputStream.$(OBJEXT)
! 	-rm -f java/io/ObjectInputStream.lo
! 	-rm -f java/io/ObjectInputValidation.$(OBJEXT)
! 	-rm -f java/io/ObjectInputValidation.lo
! 	-rm -f java/io/ObjectOutput.$(OBJEXT)
! 	-rm -f java/io/ObjectOutput.lo
! 	-rm -f java/io/ObjectOutputStream.$(OBJEXT)
! 	-rm -f java/io/ObjectOutputStream.lo
! 	-rm -f java/io/ObjectStreamClass.$(OBJEXT)
! 	-rm -f java/io/ObjectStreamClass.lo
! 	-rm -f java/io/ObjectStreamConstants.$(OBJEXT)
! 	-rm -f java/io/ObjectStreamConstants.lo
! 	-rm -f java/io/ObjectStreamException.$(OBJEXT)
! 	-rm -f java/io/ObjectStreamException.lo
! 	-rm -f java/io/ObjectStreamField.$(OBJEXT)
! 	-rm -f java/io/ObjectStreamField.lo
! 	-rm -f java/io/OptionalDataException.$(OBJEXT)
! 	-rm -f java/io/OptionalDataException.lo
! 	-rm -f java/io/OutputStream.$(OBJEXT)
! 	-rm -f java/io/OutputStream.lo
! 	-rm -f java/io/OutputStreamWriter.$(OBJEXT)
! 	-rm -f java/io/OutputStreamWriter.lo
! 	-rm -f java/io/PipedInputStream.$(OBJEXT)
! 	-rm -f java/io/PipedInputStream.lo
! 	-rm -f java/io/PipedOutputStream.$(OBJEXT)
! 	-rm -f java/io/PipedOutputStream.lo
! 	-rm -f java/io/PipedReader.$(OBJEXT)
! 	-rm -f java/io/PipedReader.lo
! 	-rm -f java/io/PipedWriter.$(OBJEXT)
! 	-rm -f java/io/PipedWriter.lo
! 	-rm -f java/io/PrintStream.$(OBJEXT)
! 	-rm -f java/io/PrintStream.lo
! 	-rm -f java/io/PrintWriter.$(OBJEXT)
! 	-rm -f java/io/PrintWriter.lo
! 	-rm -f java/io/PushbackInputStream.$(OBJEXT)
! 	-rm -f java/io/PushbackInputStream.lo
! 	-rm -f java/io/PushbackReader.$(OBJEXT)
! 	-rm -f java/io/PushbackReader.lo
! 	-rm -f java/io/RandomAccessFile.$(OBJEXT)
! 	-rm -f java/io/RandomAccessFile.lo
! 	-rm -f java/io/Reader.$(OBJEXT)
! 	-rm -f java/io/Reader.lo
! 	-rm -f java/io/SequenceInputStream.$(OBJEXT)
! 	-rm -f java/io/SequenceInputStream.lo
! 	-rm -f java/io/Serializable.$(OBJEXT)
! 	-rm -f java/io/Serializable.lo
! 	-rm -f java/io/SerializablePermission.$(OBJEXT)
! 	-rm -f java/io/SerializablePermission.lo
! 	-rm -f java/io/StreamCorruptedException.$(OBJEXT)
! 	-rm -f java/io/StreamCorruptedException.lo
! 	-rm -f java/io/StreamTokenizer.$(OBJEXT)
! 	-rm -f java/io/StreamTokenizer.lo
! 	-rm -f java/io/StringBufferInputStream.$(OBJEXT)
! 	-rm -f java/io/StringBufferInputStream.lo
! 	-rm -f java/io/StringReader.$(OBJEXT)
! 	-rm -f java/io/StringReader.lo
! 	-rm -f java/io/StringWriter.$(OBJEXT)
! 	-rm -f java/io/StringWriter.lo
! 	-rm -f java/io/SyncFailedException.$(OBJEXT)
! 	-rm -f java/io/SyncFailedException.lo
! 	-rm -f java/io/UTFDataFormatException.$(OBJEXT)
! 	-rm -f java/io/UTFDataFormatException.lo
! 	-rm -f java/io/UnsupportedEncodingException.$(OBJEXT)
! 	-rm -f java/io/UnsupportedEncodingException.lo
! 	-rm -f java/io/VMObjectStreamClass.$(OBJEXT)
! 	-rm -f java/io/VMObjectStreamClass.lo
! 	-rm -f java/io/WriteAbortedException.$(OBJEXT)
! 	-rm -f java/io/WriteAbortedException.lo
! 	-rm -f java/io/Writer.$(OBJEXT)
! 	-rm -f java/io/Writer.lo
! 	-rm -f java/io/natFile.$(OBJEXT)
! 	-rm -f java/io/natFile.lo
! 	-rm -f java/io/natObjectInputStream.$(OBJEXT)
! 	-rm -f java/io/natObjectInputStream.lo
! 	-rm -f java/io/natVMObjectStreamClass.$(OBJEXT)
! 	-rm -f java/io/natVMObjectStreamClass.lo
! 	-rm -f java/lang/AbstractMethodError.$(OBJEXT)
! 	-rm -f java/lang/AbstractMethodError.lo
! 	-rm -f java/lang/ArithmeticException.$(OBJEXT)
! 	-rm -f java/lang/ArithmeticException.lo
! 	-rm -f java/lang/ArrayIndexOutOfBoundsException.$(OBJEXT)
! 	-rm -f java/lang/ArrayIndexOutOfBoundsException.lo
! 	-rm -f java/lang/ArrayStoreException.$(OBJEXT)
! 	-rm -f java/lang/ArrayStoreException.lo
! 	-rm -f java/lang/AssertionError.$(OBJEXT)
! 	-rm -f java/lang/AssertionError.lo
! 	-rm -f java/lang/Boolean.$(OBJEXT)
! 	-rm -f java/lang/Boolean.lo
! 	-rm -f java/lang/Byte.$(OBJEXT)
! 	-rm -f java/lang/Byte.lo
! 	-rm -f java/lang/CharSequence.$(OBJEXT)
! 	-rm -f java/lang/CharSequence.lo
! 	-rm -f java/lang/Character.$(OBJEXT)
! 	-rm -f java/lang/Character.lo
! 	-rm -f java/lang/Class.$(OBJEXT)
! 	-rm -f java/lang/Class.lo
! 	-rm -f java/lang/ClassCastException.$(OBJEXT)
! 	-rm -f java/lang/ClassCastException.lo
! 	-rm -f java/lang/ClassCircularityError.$(OBJEXT)
! 	-rm -f java/lang/ClassCircularityError.lo
! 	-rm -f java/lang/ClassFormatError.$(OBJEXT)
! 	-rm -f java/lang/ClassFormatError.lo
! 	-rm -f java/lang/ClassLoader.$(OBJEXT)
! 	-rm -f java/lang/ClassLoader.lo
! 	-rm -f java/lang/ClassNotFoundException.$(OBJEXT)
! 	-rm -f java/lang/ClassNotFoundException.lo
! 	-rm -f java/lang/CloneNotSupportedException.$(OBJEXT)
! 	-rm -f java/lang/CloneNotSupportedException.lo
! 	-rm -f java/lang/Cloneable.$(OBJEXT)
! 	-rm -f java/lang/Cloneable.lo
! 	-rm -f java/lang/Comparable.$(OBJEXT)
! 	-rm -f java/lang/Comparable.lo
! 	-rm -f java/lang/Compiler.$(OBJEXT)
! 	-rm -f java/lang/Compiler.lo
! 	-rm -f java/lang/ConcreteProcess.$(OBJEXT)
! 	-rm -f java/lang/ConcreteProcess.lo
! 	-rm -f java/lang/Double.$(OBJEXT)
! 	-rm -f java/lang/Double.lo
! 	-rm -f java/lang/Error.$(OBJEXT)
! 	-rm -f java/lang/Error.lo
! 	-rm -f java/lang/Exception.$(OBJEXT)
! 	-rm -f java/lang/Exception.lo
! 	-rm -f java/lang/ExceptionInInitializerError.$(OBJEXT)
! 	-rm -f java/lang/ExceptionInInitializerError.lo
! 	-rm -f java/lang/Float.$(OBJEXT)
! 	-rm -f java/lang/Float.lo
! 	-rm -f java/lang/IllegalAccessError.$(OBJEXT)
! 	-rm -f java/lang/IllegalAccessError.lo
! 	-rm -f java/lang/IllegalAccessException.$(OBJEXT)
! 	-rm -f java/lang/IllegalAccessException.lo
! 	-rm -f java/lang/IllegalArgumentException.$(OBJEXT)
! 	-rm -f java/lang/IllegalArgumentException.lo
! 	-rm -f java/lang/IllegalMonitorStateException.$(OBJEXT)
! 	-rm -f java/lang/IllegalMonitorStateException.lo
! 	-rm -f java/lang/IllegalStateException.$(OBJEXT)
! 	-rm -f java/lang/IllegalStateException.lo
! 	-rm -f java/lang/IllegalThreadStateException.$(OBJEXT)
! 	-rm -f java/lang/IllegalThreadStateException.lo
! 	-rm -f java/lang/IncompatibleClassChangeError.$(OBJEXT)
! 	-rm -f java/lang/IncompatibleClassChangeError.lo
! 	-rm -f java/lang/IndexOutOfBoundsException.$(OBJEXT)
! 	-rm -f java/lang/IndexOutOfBoundsException.lo
! 	-rm -f java/lang/InheritableThreadLocal.$(OBJEXT)
! 	-rm -f java/lang/InheritableThreadLocal.lo
! 	-rm -f java/lang/InstantiationError.$(OBJEXT)
! 	-rm -f java/lang/InstantiationError.lo
! 	-rm -f java/lang/InstantiationException.$(OBJEXT)
! 	-rm -f java/lang/InstantiationException.lo
! 	-rm -f java/lang/Integer.$(OBJEXT)
! 	-rm -f java/lang/Integer.lo
! 	-rm -f java/lang/InternalError.$(OBJEXT)
! 	-rm -f java/lang/InternalError.lo
! 	-rm -f java/lang/InterruptedException.$(OBJEXT)
! 	-rm -f java/lang/InterruptedException.lo
! 	-rm -f java/lang/LinkageError.$(OBJEXT)
! 	-rm -f java/lang/LinkageError.lo
! 	-rm -f java/lang/Long.$(OBJEXT)
! 	-rm -f java/lang/Long.lo
! 	-rm -f java/lang/Math.$(OBJEXT)
! 	-rm -f java/lang/Math.lo
! 	-rm -f java/lang/NegativeArraySizeException.$(OBJEXT)
! 	-rm -f java/lang/NegativeArraySizeException.lo
! 	-rm -f java/lang/NoClassDefFoundError.$(OBJEXT)
! 	-rm -f java/lang/NoClassDefFoundError.lo
! 	-rm -f java/lang/NoSuchFieldError.$(OBJEXT)
! 	-rm -f java/lang/NoSuchFieldError.lo
! 	-rm -f java/lang/NoSuchFieldException.$(OBJEXT)
! 	-rm -f java/lang/NoSuchFieldException.lo
! 	-rm -f java/lang/NoSuchMethodError.$(OBJEXT)
! 	-rm -f java/lang/NoSuchMethodError.lo
! 	-rm -f java/lang/NoSuchMethodException.$(OBJEXT)
! 	-rm -f java/lang/NoSuchMethodException.lo
! 	-rm -f java/lang/NullPointerException.$(OBJEXT)
! 	-rm -f java/lang/NullPointerException.lo
! 	-rm -f java/lang/Number.$(OBJEXT)
! 	-rm -f java/lang/Number.lo
! 	-rm -f java/lang/NumberFormatException.$(OBJEXT)
! 	-rm -f java/lang/NumberFormatException.lo
! 	-rm -f java/lang/Object.$(OBJEXT)
! 	-rm -f java/lang/Object.lo
! 	-rm -f java/lang/OutOfMemoryError.$(OBJEXT)
! 	-rm -f java/lang/OutOfMemoryError.lo
! 	-rm -f java/lang/Package.$(OBJEXT)
! 	-rm -f java/lang/Package.lo
! 	-rm -f java/lang/Process.$(OBJEXT)
! 	-rm -f java/lang/Process.lo
! 	-rm -f java/lang/Runnable.$(OBJEXT)
! 	-rm -f java/lang/Runnable.lo
! 	-rm -f java/lang/Runtime.$(OBJEXT)
! 	-rm -f java/lang/Runtime.lo
! 	-rm -f java/lang/RuntimeException.$(OBJEXT)
! 	-rm -f java/lang/RuntimeException.lo
! 	-rm -f java/lang/RuntimePermission.$(OBJEXT)
! 	-rm -f java/lang/RuntimePermission.lo
! 	-rm -f java/lang/SecurityException.$(OBJEXT)
! 	-rm -f java/lang/SecurityException.lo
! 	-rm -f java/lang/SecurityManager.$(OBJEXT)
! 	-rm -f java/lang/SecurityManager.lo
! 	-rm -f java/lang/Short.$(OBJEXT)
! 	-rm -f java/lang/Short.lo
! 	-rm -f java/lang/StackOverflowError.$(OBJEXT)
! 	-rm -f java/lang/StackOverflowError.lo
! 	-rm -f java/lang/StackTraceElement.$(OBJEXT)
! 	-rm -f java/lang/StackTraceElement.lo
! 	-rm -f java/lang/StrictMath.$(OBJEXT)
! 	-rm -f java/lang/StrictMath.lo
! 	-rm -f java/lang/String.$(OBJEXT)
! 	-rm -f java/lang/String.lo
! 	-rm -f java/lang/StringBuffer.$(OBJEXT)
! 	-rm -f java/lang/StringBuffer.lo
! 	-rm -f java/lang/StringIndexOutOfBoundsException.$(OBJEXT)
! 	-rm -f java/lang/StringIndexOutOfBoundsException.lo
! 	-rm -f java/lang/System.$(OBJEXT)
! 	-rm -f java/lang/System.lo
! 	-rm -f java/lang/Thread.$(OBJEXT)
! 	-rm -f java/lang/Thread.lo
! 	-rm -f java/lang/ThreadDeath.$(OBJEXT)
! 	-rm -f java/lang/ThreadDeath.lo
! 	-rm -f java/lang/ThreadGroup.$(OBJEXT)
! 	-rm -f java/lang/ThreadGroup.lo
! 	-rm -f java/lang/ThreadLocal.$(OBJEXT)
! 	-rm -f java/lang/ThreadLocal.lo
! 	-rm -f java/lang/Throwable.$(OBJEXT)
! 	-rm -f java/lang/Throwable.lo
! 	-rm -f java/lang/UnknownError.$(OBJEXT)
! 	-rm -f java/lang/UnknownError.lo
! 	-rm -f java/lang/UnsatisfiedLinkError.$(OBJEXT)
! 	-rm -f java/lang/UnsatisfiedLinkError.lo
! 	-rm -f java/lang/UnsupportedClassVersionError.$(OBJEXT)
! 	-rm -f java/lang/UnsupportedClassVersionError.lo
! 	-rm -f java/lang/UnsupportedOperationException.$(OBJEXT)
! 	-rm -f java/lang/UnsupportedOperationException.lo
! 	-rm -f java/lang/VMClassLoader.$(OBJEXT)
! 	-rm -f java/lang/VMClassLoader.lo
! 	-rm -f java/lang/VMCompiler.$(OBJEXT)
! 	-rm -f java/lang/VMCompiler.lo
! 	-rm -f java/lang/VMSecurityManager.$(OBJEXT)
! 	-rm -f java/lang/VMSecurityManager.lo
! 	-rm -f java/lang/VMThrowable.$(OBJEXT)
! 	-rm -f java/lang/VMThrowable.lo
! 	-rm -f java/lang/VerifyError.$(OBJEXT)
! 	-rm -f java/lang/VerifyError.lo
! 	-rm -f java/lang/VirtualMachineError.$(OBJEXT)
! 	-rm -f java/lang/VirtualMachineError.lo
! 	-rm -f java/lang/Void.$(OBJEXT)
! 	-rm -f java/lang/Void.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)
! 	-rm -f java/lang/natClass.lo
! 	-rm -f java/lang/natClassLoader.$(OBJEXT)
! 	-rm -f java/lang/natClassLoader.lo
! 	-rm -f java/lang/natConcreteProcess.$(OBJEXT)
! 	-rm -f java/lang/natConcreteProcess.lo
! 	-rm -f java/lang/natDouble.$(OBJEXT)
! 	-rm -f java/lang/natDouble.lo
! 	-rm -f java/lang/natFloat.$(OBJEXT)
! 	-rm -f java/lang/natFloat.lo
! 	-rm -f java/lang/natMath.$(OBJEXT)
! 	-rm -f java/lang/natMath.lo
! 	-rm -f java/lang/natObject.$(OBJEXT)
! 	-rm -f java/lang/natObject.lo
! 	-rm -f java/lang/natRuntime.$(OBJEXT)
! 	-rm -f java/lang/natRuntime.lo
! 	-rm -f java/lang/natString.$(OBJEXT)
! 	-rm -f java/lang/natString.lo
! 	-rm -f java/lang/natStringBuffer.$(OBJEXT)
! 	-rm -f java/lang/natStringBuffer.lo
! 	-rm -f java/lang/natSystem.$(OBJEXT)
! 	-rm -f java/lang/natSystem.lo
! 	-rm -f java/lang/natThread.$(OBJEXT)
! 	-rm -f java/lang/natThread.lo
! 	-rm -f java/lang/natVMClassLoader.$(OBJEXT)
! 	-rm -f java/lang/natVMClassLoader.lo
! 	-rm -f java/lang/natVMSecurityManager.$(OBJEXT)
! 	-rm -f java/lang/natVMSecurityManager.lo
! 	-rm -f java/lang/ref/PhantomReference.$(OBJEXT)
! 	-rm -f java/lang/ref/PhantomReference.lo
! 	-rm -f java/lang/ref/Reference.$(OBJEXT)
! 	-rm -f java/lang/ref/Reference.lo
! 	-rm -f java/lang/ref/ReferenceQueue.$(OBJEXT)
! 	-rm -f java/lang/ref/ReferenceQueue.lo
! 	-rm -f java/lang/ref/SoftReference.$(OBJEXT)
! 	-rm -f java/lang/ref/SoftReference.lo
! 	-rm -f java/lang/ref/WeakReference.$(OBJEXT)
! 	-rm -f java/lang/ref/WeakReference.lo
! 	-rm -f java/lang/ref/natReference.$(OBJEXT)
! 	-rm -f java/lang/ref/natReference.lo
! 	-rm -f java/lang/reflect/AccessibleObject.$(OBJEXT)
! 	-rm -f java/lang/reflect/AccessibleObject.lo
! 	-rm -f java/lang/reflect/Array.$(OBJEXT)
! 	-rm -f java/lang/reflect/Array.lo
! 	-rm -f java/lang/reflect/Constructor.$(OBJEXT)
! 	-rm -f java/lang/reflect/Constructor.lo
! 	-rm -f java/lang/reflect/Field.$(OBJEXT)
! 	-rm -f java/lang/reflect/Field.lo
! 	-rm -f java/lang/reflect/InvocationHandler.$(OBJEXT)
! 	-rm -f java/lang/reflect/InvocationHandler.lo
! 	-rm -f java/lang/reflect/InvocationTargetException.$(OBJEXT)
! 	-rm -f java/lang/reflect/InvocationTargetException.lo
! 	-rm -f java/lang/reflect/Member.$(OBJEXT)
! 	-rm -f java/lang/reflect/Member.lo
! 	-rm -f java/lang/reflect/Method.$(OBJEXT)
! 	-rm -f java/lang/reflect/Method.lo
! 	-rm -f java/lang/reflect/Modifier.$(OBJEXT)
! 	-rm -f java/lang/reflect/Modifier.lo
! 	-rm -f java/lang/reflect/Proxy.$(OBJEXT)
! 	-rm -f java/lang/reflect/Proxy.lo
! 	-rm -f java/lang/reflect/ReflectPermission.$(OBJEXT)
! 	-rm -f java/lang/reflect/ReflectPermission.lo
! 	-rm -f java/lang/reflect/UndeclaredThrowableException.$(OBJEXT)
! 	-rm -f java/lang/reflect/UndeclaredThrowableException.lo
! 	-rm -f java/lang/reflect/natArray.$(OBJEXT)
! 	-rm -f java/lang/reflect/natArray.lo
! 	-rm -f java/lang/reflect/natConstructor.$(OBJEXT)
! 	-rm -f java/lang/reflect/natConstructor.lo
! 	-rm -f java/lang/reflect/natField.$(OBJEXT)
! 	-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/math/BigDecimal.$(OBJEXT)
! 	-rm -f java/math/BigDecimal.lo
! 	-rm -f java/math/BigInteger.$(OBJEXT)
! 	-rm -f java/math/BigInteger.lo
! 	-rm -f java/net/Authenticator.$(OBJEXT)
! 	-rm -f java/net/Authenticator.lo
! 	-rm -f java/net/BindException.$(OBJEXT)
! 	-rm -f java/net/BindException.lo
! 	-rm -f java/net/ConnectException.$(OBJEXT)
! 	-rm -f java/net/ConnectException.lo
! 	-rm -f java/net/ContentHandler.$(OBJEXT)
! 	-rm -f java/net/ContentHandler.lo
! 	-rm -f java/net/ContentHandlerFactory.$(OBJEXT)
! 	-rm -f java/net/ContentHandlerFactory.lo
! 	-rm -f java/net/DatagramPacket.$(OBJEXT)
! 	-rm -f java/net/DatagramPacket.lo
! 	-rm -f java/net/DatagramSocket.$(OBJEXT)
! 	-rm -f java/net/DatagramSocket.lo
! 	-rm -f java/net/DatagramSocketImpl.$(OBJEXT)
! 	-rm -f java/net/DatagramSocketImpl.lo
! 	-rm -f java/net/DatagramSocketImplFactory.$(OBJEXT)
! 	-rm -f java/net/DatagramSocketImplFactory.lo
! 	-rm -f java/net/FileNameMap.$(OBJEXT)
! 	-rm -f java/net/FileNameMap.lo
! 	-rm -f java/net/HttpURLConnection.$(OBJEXT)
! 	-rm -f java/net/HttpURLConnection.lo
! 	-rm -f java/net/Inet4Address.$(OBJEXT)
! 	-rm -f java/net/Inet4Address.lo
! 	-rm -f java/net/Inet6Address.$(OBJEXT)
! 	-rm -f java/net/Inet6Address.lo
! 	-rm -f java/net/InetAddress.$(OBJEXT)
! 	-rm -f java/net/InetAddress.lo
! 	-rm -f java/net/InetSocketAddress.$(OBJEXT)
! 	-rm -f java/net/InetSocketAddress.lo
! 	-rm -f java/net/JarURLConnection.$(OBJEXT)
! 	-rm -f java/net/JarURLConnection.lo
! 	-rm -f java/net/MalformedURLException.$(OBJEXT)
! 	-rm -f java/net/MalformedURLException.lo
! 	-rm -f java/net/MulticastSocket.$(OBJEXT)
! 	-rm -f java/net/MulticastSocket.lo
! 	-rm -f java/net/NetPermission.$(OBJEXT)
! 	-rm -f java/net/NetPermission.lo
! 	-rm -f java/net/NetworkInterface.$(OBJEXT)
! 	-rm -f java/net/NetworkInterface.lo
! 	-rm -f java/net/NoRouteToHostException.$(OBJEXT)
! 	-rm -f java/net/NoRouteToHostException.lo
! 	-rm -f java/net/PasswordAuthentication.$(OBJEXT)
! 	-rm -f java/net/PasswordAuthentication.lo
! 	-rm -f java/net/PortUnreachableException.$(OBJEXT)
! 	-rm -f java/net/PortUnreachableException.lo
! 	-rm -f java/net/ProtocolException.$(OBJEXT)
! 	-rm -f java/net/ProtocolException.lo
! 	-rm -f java/net/ServerSocket.$(OBJEXT)
! 	-rm -f java/net/ServerSocket.lo
! 	-rm -f java/net/Socket.$(OBJEXT)
! 	-rm -f java/net/Socket.lo
! 	-rm -f java/net/SocketAddress.$(OBJEXT)
! 	-rm -f java/net/SocketAddress.lo
! 	-rm -f java/net/SocketException.$(OBJEXT)
! 	-rm -f java/net/SocketException.lo
! 	-rm -f java/net/SocketImpl.$(OBJEXT)
! 	-rm -f java/net/SocketImpl.lo
! 	-rm -f java/net/SocketImplFactory.$(OBJEXT)
! 	-rm -f java/net/SocketImplFactory.lo
! 	-rm -f java/net/SocketOptions.$(OBJEXT)
! 	-rm -f java/net/SocketOptions.lo
! 	-rm -f java/net/SocketPermission.$(OBJEXT)
! 	-rm -f java/net/SocketPermission.lo
! 	-rm -f java/net/SocketTimeoutException.$(OBJEXT)
! 	-rm -f java/net/SocketTimeoutException.lo
! 	-rm -f java/net/URI.$(OBJEXT)
! 	-rm -f java/net/URI.lo
! 	-rm -f java/net/URISyntaxException.$(OBJEXT)
! 	-rm -f java/net/URISyntaxException.lo
! 	-rm -f java/net/URL.$(OBJEXT)
! 	-rm -f java/net/URL.lo
! 	-rm -f java/net/URLClassLoader.$(OBJEXT)
! 	-rm -f java/net/URLClassLoader.lo
! 	-rm -f java/net/URLConnection.$(OBJEXT)
! 	-rm -f java/net/URLConnection.lo
! 	-rm -f java/net/URLDecoder.$(OBJEXT)
! 	-rm -f java/net/URLDecoder.lo
! 	-rm -f java/net/URLEncoder.$(OBJEXT)
! 	-rm -f java/net/URLEncoder.lo
! 	-rm -f java/net/URLStreamHandler.$(OBJEXT)
! 	-rm -f java/net/URLStreamHandler.lo
! 	-rm -f java/net/URLStreamHandlerFactory.$(OBJEXT)
! 	-rm -f java/net/URLStreamHandlerFactory.lo
! 	-rm -f java/net/UnknownHostException.$(OBJEXT)
! 	-rm -f java/net/UnknownHostException.lo
! 	-rm -f java/net/UnknownServiceException.$(OBJEXT)
! 	-rm -f java/net/UnknownServiceException.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/Buffer.$(OBJEXT)
! 	-rm -f java/nio/Buffer.lo
! 	-rm -f java/nio/BufferOverflowException.$(OBJEXT)
! 	-rm -f java/nio/BufferOverflowException.lo
! 	-rm -f java/nio/BufferUnderflowException.$(OBJEXT)
! 	-rm -f java/nio/BufferUnderflowException.lo
! 	-rm -f java/nio/ByteBuffer.$(OBJEXT)
! 	-rm -f java/nio/ByteBuffer.lo
! 	-rm -f java/nio/ByteBufferHelper.$(OBJEXT)
! 	-rm -f java/nio/ByteBufferHelper.lo
! 	-rm -f java/nio/ByteBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/ByteBufferImpl.lo
! 	-rm -f java/nio/ByteOrder.$(OBJEXT)
! 	-rm -f java/nio/ByteOrder.lo
! 	-rm -f java/nio/CharBuffer.$(OBJEXT)
! 	-rm -f java/nio/CharBuffer.lo
! 	-rm -f java/nio/CharBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/CharBufferImpl.lo
! 	-rm -f java/nio/CharViewBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/CharViewBufferImpl.lo
! 	-rm -f java/nio/DirectByteBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/DirectByteBufferImpl.lo
! 	-rm -f java/nio/DoubleBuffer.$(OBJEXT)
! 	-rm -f java/nio/DoubleBuffer.lo
! 	-rm -f java/nio/DoubleBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/DoubleBufferImpl.lo
! 	-rm -f java/nio/DoubleViewBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/DoubleViewBufferImpl.lo
! 	-rm -f java/nio/FloatBuffer.$(OBJEXT)
! 	-rm -f java/nio/FloatBuffer.lo
! 	-rm -f java/nio/FloatBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/FloatBufferImpl.lo
! 	-rm -f java/nio/FloatViewBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/FloatViewBufferImpl.lo
! 	-rm -f java/nio/IntBuffer.$(OBJEXT)
! 	-rm -f java/nio/IntBuffer.lo
! 	-rm -f java/nio/IntBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/IntBufferImpl.lo
! 	-rm -f java/nio/IntViewBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/IntViewBufferImpl.lo
! 	-rm -f java/nio/InvalidMarkException.$(OBJEXT)
! 	-rm -f java/nio/InvalidMarkException.lo
! 	-rm -f java/nio/LongBuffer.$(OBJEXT)
! 	-rm -f java/nio/LongBuffer.lo
! 	-rm -f java/nio/LongBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/LongBufferImpl.lo
! 	-rm -f java/nio/LongViewBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/LongViewBufferImpl.lo
! 	-rm -f java/nio/MappedByteBuffer.$(OBJEXT)
! 	-rm -f java/nio/MappedByteBuffer.lo
! 	-rm -f java/nio/MappedByteBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/MappedByteBufferImpl.lo
! 	-rm -f java/nio/ReadOnlyBufferException.$(OBJEXT)
! 	-rm -f java/nio/ReadOnlyBufferException.lo
! 	-rm -f java/nio/ShortBuffer.$(OBJEXT)
! 	-rm -f java/nio/ShortBuffer.lo
! 	-rm -f java/nio/ShortBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/ShortBufferImpl.lo
! 	-rm -f java/nio/ShortViewBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/ShortViewBufferImpl.lo
! 	-rm -f java/nio/VMDirectByteBuffer.$(OBJEXT)
! 	-rm -f java/nio/VMDirectByteBuffer.lo
! 	-rm -f java/nio/channels/AlreadyConnectedException.$(OBJEXT)
! 	-rm -f java/nio/channels/AlreadyConnectedException.lo
! 	-rm -f java/nio/channels/AsynchronousCloseException.$(OBJEXT)
! 	-rm -f java/nio/channels/AsynchronousCloseException.lo
! 	-rm -f java/nio/channels/ByteChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/ByteChannel.lo
! 	-rm -f java/nio/channels/CancelledKeyException.$(OBJEXT)
! 	-rm -f java/nio/channels/CancelledKeyException.lo
! 	-rm -f java/nio/channels/Channel.$(OBJEXT)
! 	-rm -f java/nio/channels/Channel.lo
! 	-rm -f java/nio/channels/Channels.$(OBJEXT)
! 	-rm -f java/nio/channels/Channels.lo
! 	-rm -f java/nio/channels/ClosedByInterruptException.$(OBJEXT)
! 	-rm -f java/nio/channels/ClosedByInterruptException.lo
! 	-rm -f java/nio/channels/ClosedChannelException.$(OBJEXT)
! 	-rm -f java/nio/channels/ClosedChannelException.lo
! 	-rm -f java/nio/channels/ClosedSelectorException.$(OBJEXT)
! 	-rm -f java/nio/channels/ClosedSelectorException.lo
! 	-rm -f java/nio/channels/ConnectionPendingException.$(OBJEXT)
! 	-rm -f java/nio/channels/ConnectionPendingException.lo
! 	-rm -f java/nio/channels/DatagramChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/DatagramChannel.lo
! 	-rm -f java/nio/channels/FileChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/FileChannel.lo
! 	-rm -f java/nio/channels/FileLock.$(OBJEXT)
! 	-rm -f java/nio/channels/FileLock.lo
! 	-rm -f java/nio/channels/FileLockInterruptionException.$(OBJEXT)
! 	-rm -f java/nio/channels/FileLockInterruptionException.lo
! 	-rm -f java/nio/channels/GatheringByteChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/GatheringByteChannel.lo
! 	-rm -f java/nio/channels/IllegalBlockingModeException.$(OBJEXT)
! 	-rm -f java/nio/channels/IllegalBlockingModeException.lo
! 	-rm -f java/nio/channels/IllegalSelectorException.$(OBJEXT)
! 	-rm -f java/nio/channels/IllegalSelectorException.lo
! 	-rm -f java/nio/channels/InterruptibleChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/InterruptibleChannel.lo
! 	-rm -f java/nio/channels/NoConnectionPendingException.$(OBJEXT)
! 	-rm -f java/nio/channels/NoConnectionPendingException.lo
! 	-rm -f java/nio/channels/NonReadableChannelException.$(OBJEXT)
! 	-rm -f java/nio/channels/NonReadableChannelException.lo
! 	-rm -f java/nio/channels/NonWritableChannelException.$(OBJEXT)
! 	-rm -f java/nio/channels/NonWritableChannelException.lo
! 	-rm -f java/nio/channels/NotYetBoundException.$(OBJEXT)
! 	-rm -f java/nio/channels/NotYetBoundException.lo
! 	-rm -f java/nio/channels/NotYetConnectedException.$(OBJEXT)
! 	-rm -f java/nio/channels/NotYetConnectedException.lo
! 	-rm -f java/nio/channels/OverlappingFileLockException.$(OBJEXT)
! 	-rm -f java/nio/channels/OverlappingFileLockException.lo
! 	-rm -f java/nio/channels/Pipe.$(OBJEXT)
! 	-rm -f java/nio/channels/Pipe.lo
! 	-rm -f java/nio/channels/ReadableByteChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/ReadableByteChannel.lo
! 	-rm -f java/nio/channels/ScatteringByteChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/ScatteringByteChannel.lo
! 	-rm -f java/nio/channels/SelectableChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/SelectableChannel.lo
! 	-rm -f java/nio/channels/SelectionKey.$(OBJEXT)
! 	-rm -f java/nio/channels/SelectionKey.lo
! 	-rm -f java/nio/channels/Selector.$(OBJEXT)
! 	-rm -f java/nio/channels/Selector.lo
! 	-rm -f java/nio/channels/ServerSocketChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/ServerSocketChannel.lo
! 	-rm -f java/nio/channels/SocketChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/SocketChannel.lo
! 	-rm -f java/nio/channels/UnresolvedAddressException.$(OBJEXT)
! 	-rm -f java/nio/channels/UnresolvedAddressException.lo
! 	-rm -f java/nio/channels/UnsupportedAddressTypeException.$(OBJEXT)
! 	-rm -f java/nio/channels/UnsupportedAddressTypeException.lo
! 	-rm -f java/nio/channels/WritableByteChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/WritableByteChannel.lo
! 	-rm -f java/nio/channels/natChannels.$(OBJEXT)
! 	-rm -f java/nio/channels/natChannels.lo
! 	-rm -f java/nio/channels/spi/AbstractInterruptibleChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/spi/AbstractInterruptibleChannel.lo
! 	-rm -f java/nio/channels/spi/AbstractSelectableChannel.$(OBJEXT)
! 	-rm -f java/nio/channels/spi/AbstractSelectableChannel.lo
! 	-rm -f java/nio/channels/spi/AbstractSelectionKey.$(OBJEXT)
! 	-rm -f java/nio/channels/spi/AbstractSelectionKey.lo
! 	-rm -f java/nio/channels/spi/AbstractSelector.$(OBJEXT)
! 	-rm -f java/nio/channels/spi/AbstractSelector.lo
! 	-rm -f java/nio/channels/spi/SelectorProvider.$(OBJEXT)
! 	-rm -f java/nio/channels/spi/SelectorProvider.lo
! 	-rm -f java/nio/charset/CharacterCodingException.$(OBJEXT)
! 	-rm -f java/nio/charset/CharacterCodingException.lo
! 	-rm -f java/nio/charset/Charset.$(OBJEXT)
! 	-rm -f java/nio/charset/Charset.lo
! 	-rm -f java/nio/charset/CharsetDecoder.$(OBJEXT)
! 	-rm -f java/nio/charset/CharsetDecoder.lo
! 	-rm -f java/nio/charset/CharsetEncoder.$(OBJEXT)
! 	-rm -f java/nio/charset/CharsetEncoder.lo
! 	-rm -f java/nio/charset/CoderMalfunctionError.$(OBJEXT)
! 	-rm -f java/nio/charset/CoderMalfunctionError.lo
! 	-rm -f java/nio/charset/CoderResult.$(OBJEXT)
! 	-rm -f java/nio/charset/CoderResult.lo
! 	-rm -f java/nio/charset/CodingErrorAction.$(OBJEXT)
! 	-rm -f java/nio/charset/CodingErrorAction.lo
! 	-rm -f java/nio/charset/IllegalCharsetNameException.$(OBJEXT)
! 	-rm -f java/nio/charset/IllegalCharsetNameException.lo
! 	-rm -f java/nio/charset/MalformedInputException.$(OBJEXT)
! 	-rm -f java/nio/charset/MalformedInputException.lo
! 	-rm -f java/nio/charset/UnmappableCharacterException.$(OBJEXT)
! 	-rm -f java/nio/charset/UnmappableCharacterException.lo
! 	-rm -f java/nio/charset/UnsupportedCharsetException.$(OBJEXT)
! 	-rm -f java/nio/charset/UnsupportedCharsetException.lo
! 	-rm -f java/nio/charset/spi/CharsetProvider.$(OBJEXT)
! 	-rm -f java/nio/charset/spi/CharsetProvider.lo
! 	-rm -f java/nio/natDirectByteBufferImpl.$(OBJEXT)
! 	-rm -f java/nio/natDirectByteBufferImpl.lo
! 	-rm -f java/rmi/AccessException.$(OBJEXT)
! 	-rm -f java/rmi/AccessException.lo
! 	-rm -f java/rmi/AlreadyBoundException.$(OBJEXT)
! 	-rm -f java/rmi/AlreadyBoundException.lo
! 	-rm -f java/rmi/ConnectException.$(OBJEXT)
! 	-rm -f java/rmi/ConnectException.lo
! 	-rm -f java/rmi/ConnectIOException.$(OBJEXT)
! 	-rm -f java/rmi/ConnectIOException.lo
! 	-rm -f java/rmi/MarshalException.$(OBJEXT)
! 	-rm -f java/rmi/MarshalException.lo
! 	-rm -f java/rmi/MarshalledObject.$(OBJEXT)
! 	-rm -f java/rmi/MarshalledObject.lo
! 	-rm -f java/rmi/Naming.$(OBJEXT)
! 	-rm -f java/rmi/Naming.lo
! 	-rm -f java/rmi/NoSuchObjectException.$(OBJEXT)
! 	-rm -f java/rmi/NoSuchObjectException.lo
! 	-rm -f java/rmi/NotBoundException.$(OBJEXT)
! 	-rm -f java/rmi/NotBoundException.lo
! 	-rm -f java/rmi/RMISecurityException.$(OBJEXT)
! 	-rm -f java/rmi/RMISecurityException.lo
! 	-rm -f java/rmi/RMISecurityManager.$(OBJEXT)
! 	-rm -f java/rmi/RMISecurityManager.lo
! 	-rm -f java/rmi/Remote.$(OBJEXT)
! 	-rm -f java/rmi/Remote.lo
! 	-rm -f java/rmi/RemoteException.$(OBJEXT)
! 	-rm -f java/rmi/RemoteException.lo
! 	-rm -f java/rmi/ServerError.$(OBJEXT)
! 	-rm -f java/rmi/ServerError.lo
! 	-rm -f java/rmi/ServerException.$(OBJEXT)
! 	-rm -f java/rmi/ServerException.lo
! 	-rm -f java/rmi/ServerRuntimeException.$(OBJEXT)
! 	-rm -f java/rmi/ServerRuntimeException.lo
! 	-rm -f java/rmi/StubNotFoundException.$(OBJEXT)
! 	-rm -f java/rmi/StubNotFoundException.lo
! 	-rm -f java/rmi/UnexpectedException.$(OBJEXT)
! 	-rm -f java/rmi/UnexpectedException.lo
! 	-rm -f java/rmi/UnknownHostException.$(OBJEXT)
! 	-rm -f java/rmi/UnknownHostException.lo
! 	-rm -f java/rmi/UnmarshalException.$(OBJEXT)
! 	-rm -f java/rmi/UnmarshalException.lo
! 	-rm -f java/rmi/activation/Activatable.$(OBJEXT)
! 	-rm -f java/rmi/activation/Activatable.lo
! 	-rm -f java/rmi/activation/ActivateFailedException.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivateFailedException.lo
! 	-rm -f java/rmi/activation/ActivationDesc.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivationDesc.lo
! 	-rm -f java/rmi/activation/ActivationException.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivationException.lo
! 	-rm -f java/rmi/activation/ActivationGroup.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivationGroup.lo
! 	-rm -f java/rmi/activation/ActivationGroupDesc.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivationGroupDesc.lo
! 	-rm -f java/rmi/activation/ActivationGroupID.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivationGroupID.lo
! 	-rm -f java/rmi/activation/ActivationID.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivationID.lo
! 	-rm -f java/rmi/activation/ActivationInstantiator.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivationInstantiator.lo
! 	-rm -f java/rmi/activation/ActivationMonitor.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivationMonitor.lo
! 	-rm -f java/rmi/activation/ActivationSystem.$(OBJEXT)
! 	-rm -f java/rmi/activation/ActivationSystem.lo
! 	-rm -f java/rmi/activation/Activator.$(OBJEXT)
! 	-rm -f java/rmi/activation/Activator.lo
! 	-rm -f java/rmi/activation/UnknownGroupException.$(OBJEXT)
! 	-rm -f java/rmi/activation/UnknownGroupException.lo
! 	-rm -f java/rmi/activation/UnknownObjectException.$(OBJEXT)
! 	-rm -f java/rmi/activation/UnknownObjectException.lo
! 	-rm -f java/rmi/dgc/DGC.$(OBJEXT)
! 	-rm -f java/rmi/dgc/DGC.lo
! 	-rm -f java/rmi/dgc/Lease.$(OBJEXT)
! 	-rm -f java/rmi/dgc/Lease.lo
! 	-rm -f java/rmi/dgc/VMID.$(OBJEXT)
! 	-rm -f java/rmi/dgc/VMID.lo
! 	-rm -f java/rmi/registry/LocateRegistry.$(OBJEXT)
! 	-rm -f java/rmi/registry/LocateRegistry.lo
! 	-rm -f java/rmi/registry/Registry.$(OBJEXT)
! 	-rm -f java/rmi/registry/Registry.lo
! 	-rm -f java/rmi/registry/RegistryHandler.$(OBJEXT)
! 	-rm -f java/rmi/registry/RegistryHandler.lo
! 	-rm -f java/rmi/server/ExportException.$(OBJEXT)
! 	-rm -f java/rmi/server/ExportException.lo
! 	-rm -f java/rmi/server/LoaderHandler.$(OBJEXT)
! 	-rm -f java/rmi/server/LoaderHandler.lo
! 	-rm -f java/rmi/server/LogStream.$(OBJEXT)
! 	-rm -f java/rmi/server/LogStream.lo
! 	-rm -f java/rmi/server/ObjID.$(OBJEXT)
! 	-rm -f java/rmi/server/ObjID.lo
! 	-rm -f java/rmi/server/Operation.$(OBJEXT)
! 	-rm -f java/rmi/server/Operation.lo
! 	-rm -f java/rmi/server/RMIClassLoader.$(OBJEXT)
! 	-rm -f java/rmi/server/RMIClassLoader.lo
! 	-rm -f java/rmi/server/RMIClassLoaderSpi.$(OBJEXT)
! 	-rm -f java/rmi/server/RMIClassLoaderSpi.lo
! 	-rm -f java/rmi/server/RMIClientSocketFactory.$(OBJEXT)
! 	-rm -f java/rmi/server/RMIClientSocketFactory.lo
! 	-rm -f java/rmi/server/RMIFailureHandler.$(OBJEXT)
! 	-rm -f java/rmi/server/RMIFailureHandler.lo
! 	-rm -f java/rmi/server/RMIServerSocketFactory.$(OBJEXT)
! 	-rm -f java/rmi/server/RMIServerSocketFactory.lo
! 	-rm -f java/rmi/server/RMISocketFactory.$(OBJEXT)
! 	-rm -f java/rmi/server/RMISocketFactory.lo
! 	-rm -f java/rmi/server/RemoteCall.$(OBJEXT)
! 	-rm -f java/rmi/server/RemoteCall.lo
! 	-rm -f java/rmi/server/RemoteObject.$(OBJEXT)
! 	-rm -f java/rmi/server/RemoteObject.lo
! 	-rm -f java/rmi/server/RemoteRef.$(OBJEXT)
! 	-rm -f java/rmi/server/RemoteRef.lo
! 	-rm -f java/rmi/server/RemoteServer.$(OBJEXT)
! 	-rm -f java/rmi/server/RemoteServer.lo
! 	-rm -f java/rmi/server/RemoteStub.$(OBJEXT)
! 	-rm -f java/rmi/server/RemoteStub.lo
! 	-rm -f java/rmi/server/ServerCloneException.$(OBJEXT)
! 	-rm -f java/rmi/server/ServerCloneException.lo
! 	-rm -f java/rmi/server/ServerNotActiveException.$(OBJEXT)
! 	-rm -f java/rmi/server/ServerNotActiveException.lo
! 	-rm -f java/rmi/server/ServerRef.$(OBJEXT)
! 	-rm -f java/rmi/server/ServerRef.lo
! 	-rm -f java/rmi/server/Skeleton.$(OBJEXT)
! 	-rm -f java/rmi/server/Skeleton.lo
! 	-rm -f java/rmi/server/SkeletonMismatchException.$(OBJEXT)
! 	-rm -f java/rmi/server/SkeletonMismatchException.lo
! 	-rm -f java/rmi/server/SkeletonNotFoundException.$(OBJEXT)
! 	-rm -f java/rmi/server/SkeletonNotFoundException.lo
! 	-rm -f java/rmi/server/SocketSecurityException.$(OBJEXT)
! 	-rm -f java/rmi/server/SocketSecurityException.lo
! 	-rm -f java/rmi/server/UID.$(OBJEXT)
! 	-rm -f java/rmi/server/UID.lo
! 	-rm -f java/rmi/server/UnicastRemoteObject.$(OBJEXT)
! 	-rm -f java/rmi/server/UnicastRemoteObject.lo
! 	-rm -f java/rmi/server/Unreferenced.$(OBJEXT)
! 	-rm -f java/rmi/server/Unreferenced.lo
! 	-rm -f java/security/AccessControlContext.$(OBJEXT)
! 	-rm -f java/security/AccessControlContext.lo
! 	-rm -f java/security/AccessControlException.$(OBJEXT)
! 	-rm -f java/security/AccessControlException.lo
! 	-rm -f java/security/AccessController.$(OBJEXT)
! 	-rm -f java/security/AccessController.lo
! 	-rm -f java/security/AlgorithmParameterGenerator.$(OBJEXT)
! 	-rm -f java/security/AlgorithmParameterGenerator.lo
! 	-rm -f java/security/AlgorithmParameterGeneratorSpi.$(OBJEXT)
! 	-rm -f java/security/AlgorithmParameterGeneratorSpi.lo
! 	-rm -f java/security/AlgorithmParameters.$(OBJEXT)
! 	-rm -f java/security/AlgorithmParameters.lo
! 	-rm -f java/security/AlgorithmParametersSpi.$(OBJEXT)
! 	-rm -f java/security/AlgorithmParametersSpi.lo
! 	-rm -f java/security/AllPermission.$(OBJEXT)
! 	-rm -f java/security/AllPermission.lo
! 	-rm -f java/security/BasicPermission.$(OBJEXT)
! 	-rm -f java/security/BasicPermission.lo
! 	-rm -f java/security/Certificate.$(OBJEXT)
! 	-rm -f java/security/Certificate.lo
! 	-rm -f java/security/CodeSource.$(OBJEXT)
! 	-rm -f java/security/CodeSource.lo
! 	-rm -f java/security/DigestException.$(OBJEXT)
! 	-rm -f java/security/DigestException.lo
! 	-rm -f java/security/DigestInputStream.$(OBJEXT)
! 	-rm -f java/security/DigestInputStream.lo
! 	-rm -f java/security/DigestOutputStream.$(OBJEXT)
! 	-rm -f java/security/DigestOutputStream.lo
! 	-rm -f java/security/DomainCombiner.$(OBJEXT)
! 	-rm -f java/security/DomainCombiner.lo
! 	-rm -f java/security/DummyKeyPairGenerator.$(OBJEXT)
! 	-rm -f java/security/DummyKeyPairGenerator.lo
! 	-rm -f java/security/DummyMessageDigest.$(OBJEXT)
! 	-rm -f java/security/DummyMessageDigest.lo
! 	-rm -f java/security/DummySignature.$(OBJEXT)
! 	-rm -f java/security/DummySignature.lo
! 	-rm -f java/security/GeneralSecurityException.$(OBJEXT)
! 	-rm -f java/security/GeneralSecurityException.lo
! 	-rm -f java/security/Guard.$(OBJEXT)
! 	-rm -f java/security/Guard.lo
! 	-rm -f java/security/GuardedObject.$(OBJEXT)
! 	-rm -f java/security/GuardedObject.lo
! 	-rm -f java/security/Identity.$(OBJEXT)
! 	-rm -f java/security/Identity.lo
! 	-rm -f java/security/IdentityScope.$(OBJEXT)
! 	-rm -f java/security/IdentityScope.lo
! 	-rm -f java/security/InvalidAlgorithmParameterException.$(OBJEXT)
! 	-rm -f java/security/InvalidAlgorithmParameterException.lo
! 	-rm -f java/security/InvalidKeyException.$(OBJEXT)
! 	-rm -f java/security/InvalidKeyException.lo
! 	-rm -f java/security/InvalidParameterException.$(OBJEXT)
! 	-rm -f java/security/InvalidParameterException.lo
! 	-rm -f java/security/Key.$(OBJEXT)
! 	-rm -f java/security/Key.lo
! 	-rm -f java/security/KeyException.$(OBJEXT)
! 	-rm -f java/security/KeyException.lo
! 	-rm -f java/security/KeyFactory.$(OBJEXT)
! 	-rm -f java/security/KeyFactory.lo
! 	-rm -f java/security/KeyFactorySpi.$(OBJEXT)
! 	-rm -f java/security/KeyFactorySpi.lo
! 	-rm -f java/security/KeyManagementException.$(OBJEXT)
! 	-rm -f java/security/KeyManagementException.lo
! 	-rm -f java/security/KeyPair.$(OBJEXT)
! 	-rm -f java/security/KeyPair.lo
! 	-rm -f java/security/KeyPairGenerator.$(OBJEXT)
! 	-rm -f java/security/KeyPairGenerator.lo
! 	-rm -f java/security/KeyPairGeneratorSpi.$(OBJEXT)
! 	-rm -f java/security/KeyPairGeneratorSpi.lo
! 	-rm -f java/security/KeyStore.$(OBJEXT)
! 	-rm -f java/security/KeyStore.lo
! 	-rm -f java/security/KeyStoreException.$(OBJEXT)
! 	-rm -f java/security/KeyStoreException.lo
! 	-rm -f java/security/KeyStoreSpi.$(OBJEXT)
! 	-rm -f java/security/KeyStoreSpi.lo
! 	-rm -f java/security/MessageDigest.$(OBJEXT)
! 	-rm -f java/security/MessageDigest.lo
! 	-rm -f java/security/MessageDigestSpi.$(OBJEXT)
! 	-rm -f java/security/MessageDigestSpi.lo
! 	-rm -f java/security/NoSuchAlgorithmException.$(OBJEXT)
! 	-rm -f java/security/NoSuchAlgorithmException.lo
! 	-rm -f java/security/NoSuchProviderException.$(OBJEXT)
! 	-rm -f java/security/NoSuchProviderException.lo
! 	-rm -f java/security/Permission.$(OBJEXT)
! 	-rm -f java/security/Permission.lo
! 	-rm -f java/security/PermissionCollection.$(OBJEXT)
! 	-rm -f java/security/PermissionCollection.lo
! 	-rm -f java/security/Permissions.$(OBJEXT)
! 	-rm -f java/security/Permissions.lo
! 	-rm -f java/security/Policy.$(OBJEXT)
! 	-rm -f java/security/Policy.lo
! 	-rm -f java/security/Principal.$(OBJEXT)
! 	-rm -f java/security/Principal.lo
! 	-rm -f java/security/PrivateKey.$(OBJEXT)
! 	-rm -f java/security/PrivateKey.lo
! 	-rm -f java/security/PrivilegedAction.$(OBJEXT)
! 	-rm -f java/security/PrivilegedAction.lo
! 	-rm -f java/security/PrivilegedActionException.$(OBJEXT)
! 	-rm -f java/security/PrivilegedActionException.lo
! 	-rm -f java/security/PrivilegedExceptionAction.$(OBJEXT)
! 	-rm -f java/security/PrivilegedExceptionAction.lo
! 	-rm -f java/security/ProtectionDomain.$(OBJEXT)
! 	-rm -f java/security/ProtectionDomain.lo
! 	-rm -f java/security/Provider.$(OBJEXT)
! 	-rm -f java/security/Provider.lo
! 	-rm -f java/security/ProviderException.$(OBJEXT)
! 	-rm -f java/security/ProviderException.lo
! 	-rm -f java/security/PublicKey.$(OBJEXT)
! 	-rm -f java/security/PublicKey.lo
! 	-rm -f java/security/SecureClassLoader.$(OBJEXT)
! 	-rm -f java/security/SecureClassLoader.lo
! 	-rm -f java/security/SecureRandom.$(OBJEXT)
! 	-rm -f java/security/SecureRandom.lo
! 	-rm -f java/security/SecureRandomSpi.$(OBJEXT)
! 	-rm -f java/security/SecureRandomSpi.lo
! 	-rm -f java/security/Security.$(OBJEXT)
! 	-rm -f java/security/Security.lo
! 	-rm -f java/security/SecurityPermission.$(OBJEXT)
! 	-rm -f java/security/SecurityPermission.lo
! 	-rm -f java/security/Signature.$(OBJEXT)
! 	-rm -f java/security/Signature.lo
! 	-rm -f java/security/SignatureException.$(OBJEXT)
! 	-rm -f java/security/SignatureException.lo
! 	-rm -f java/security/SignatureSpi.$(OBJEXT)
! 	-rm -f java/security/SignatureSpi.lo
! 	-rm -f java/security/SignedObject.$(OBJEXT)
! 	-rm -f java/security/SignedObject.lo
! 	-rm -f java/security/Signer.$(OBJEXT)
! 	-rm -f java/security/Signer.lo
! 	-rm -f java/security/UnrecoverableKeyException.$(OBJEXT)
! 	-rm -f java/security/UnrecoverableKeyException.lo
! 	-rm -f java/security/UnresolvedPermission.$(OBJEXT)
! 	-rm -f java/security/UnresolvedPermission.lo
! 	-rm -f java/security/acl/Acl.$(OBJEXT)
! 	-rm -f java/security/acl/Acl.lo
! 	-rm -f java/security/acl/AclEntry.$(OBJEXT)
! 	-rm -f java/security/acl/AclEntry.lo
! 	-rm -f java/security/acl/AclNotFoundException.$(OBJEXT)
! 	-rm -f java/security/acl/AclNotFoundException.lo
! 	-rm -f java/security/acl/Group.$(OBJEXT)
! 	-rm -f java/security/acl/Group.lo
! 	-rm -f java/security/acl/LastOwnerException.$(OBJEXT)
! 	-rm -f java/security/acl/LastOwnerException.lo
! 	-rm -f java/security/acl/NotOwnerException.$(OBJEXT)
! 	-rm -f java/security/acl/NotOwnerException.lo
! 	-rm -f java/security/acl/Owner.$(OBJEXT)
! 	-rm -f java/security/acl/Owner.lo
! 	-rm -f java/security/acl/Permission.$(OBJEXT)
! 	-rm -f java/security/acl/Permission.lo
! 	-rm -f java/security/cert/CRL.$(OBJEXT)
! 	-rm -f java/security/cert/CRL.lo
! 	-rm -f java/security/cert/CRLException.$(OBJEXT)
! 	-rm -f java/security/cert/CRLException.lo
! 	-rm -f java/security/cert/CRLSelector.$(OBJEXT)
! 	-rm -f java/security/cert/CRLSelector.lo
! 	-rm -f java/security/cert/CertPath.$(OBJEXT)
! 	-rm -f java/security/cert/CertPath.lo
! 	-rm -f java/security/cert/CertPathBuilder.$(OBJEXT)
! 	-rm -f java/security/cert/CertPathBuilder.lo
! 	-rm -f java/security/cert/CertPathBuilderException.$(OBJEXT)
! 	-rm -f java/security/cert/CertPathBuilderException.lo
! 	-rm -f java/security/cert/CertPathBuilderResult.$(OBJEXT)
! 	-rm -f java/security/cert/CertPathBuilderResult.lo
! 	-rm -f java/security/cert/CertPathBuilderSpi.$(OBJEXT)
! 	-rm -f java/security/cert/CertPathBuilderSpi.lo
! 	-rm -f java/security/cert/CertPathParameters.$(OBJEXT)
! 	-rm -f java/security/cert/CertPathParameters.lo
! 	-rm -f java/security/cert/CertPathValidator.$(OBJEXT)
! 	-rm -f java/security/cert/CertPathValidator.lo
! 	-rm -f java/security/cert/CertPathValidatorException.$(OBJEXT)
! 	-rm -f java/security/cert/CertPathValidatorException.lo
! 	-rm -f java/security/cert/CertPathValidatorResult.$(OBJEXT)
! 	-rm -f java/security/cert/CertPathValidatorResult.lo
! 	-rm -f java/security/cert/CertPathValidatorSpi.$(OBJEXT)
! 	-rm -f java/security/cert/CertPathValidatorSpi.lo
! 	-rm -f java/security/cert/CertSelector.$(OBJEXT)
! 	-rm -f java/security/cert/CertSelector.lo
! 	-rm -f java/security/cert/CertStore.$(OBJEXT)
! 	-rm -f java/security/cert/CertStore.lo
! 	-rm -f java/security/cert/CertStoreException.$(OBJEXT)
! 	-rm -f java/security/cert/CertStoreException.lo
! 	-rm -f java/security/cert/CertStoreParameters.$(OBJEXT)
! 	-rm -f java/security/cert/CertStoreParameters.lo
! 	-rm -f java/security/cert/CertStoreSpi.$(OBJEXT)
! 	-rm -f java/security/cert/CertStoreSpi.lo
! 	-rm -f java/security/cert/Certificate.$(OBJEXT)
! 	-rm -f java/security/cert/Certificate.lo
! 	-rm -f java/security/cert/CertificateEncodingException.$(OBJEXT)
! 	-rm -f java/security/cert/CertificateEncodingException.lo
! 	-rm -f java/security/cert/CertificateException.$(OBJEXT)
! 	-rm -f java/security/cert/CertificateException.lo
! 	-rm -f java/security/cert/CertificateExpiredException.$(OBJEXT)
! 	-rm -f java/security/cert/CertificateExpiredException.lo
! 	-rm -f java/security/cert/CertificateFactory.$(OBJEXT)
! 	-rm -f java/security/cert/CertificateFactory.lo
! 	-rm -f java/security/cert/CertificateFactorySpi.$(OBJEXT)
! 	-rm -f java/security/cert/CertificateFactorySpi.lo
! 	-rm -f java/security/cert/CertificateNotYetValidException.$(OBJEXT)
! 	-rm -f java/security/cert/CertificateNotYetValidException.lo
! 	-rm -f java/security/cert/CertificateParsingException.$(OBJEXT)
! 	-rm -f java/security/cert/CertificateParsingException.lo
! 	-rm -f java/security/cert/CollectionCertStoreParameters.$(OBJEXT)
! 	-rm -f java/security/cert/CollectionCertStoreParameters.lo
! 	-rm -f java/security/cert/LDAPCertStoreParameters.$(OBJEXT)
! 	-rm -f java/security/cert/LDAPCertStoreParameters.lo
! 	-rm -f java/security/cert/PKIXBuilderParameters.$(OBJEXT)
! 	-rm -f java/security/cert/PKIXBuilderParameters.lo
! 	-rm -f java/security/cert/PKIXCertPathBuilderResult.$(OBJEXT)
! 	-rm -f java/security/cert/PKIXCertPathBuilderResult.lo
! 	-rm -f java/security/cert/PKIXCertPathChecker.$(OBJEXT)
! 	-rm -f java/security/cert/PKIXCertPathChecker.lo
! 	-rm -f java/security/cert/PKIXCertPathValidatorResult.$(OBJEXT)
! 	-rm -f java/security/cert/PKIXCertPathValidatorResult.lo
! 	-rm -f java/security/cert/PKIXParameters.$(OBJEXT)
! 	-rm -f java/security/cert/PKIXParameters.lo
! 	-rm -f java/security/cert/PolicyNode.$(OBJEXT)
! 	-rm -f java/security/cert/PolicyNode.lo
! 	-rm -f java/security/cert/PolicyQualifierInfo.$(OBJEXT)
! 	-rm -f java/security/cert/PolicyQualifierInfo.lo
! 	-rm -f java/security/cert/TrustAnchor.$(OBJEXT)
! 	-rm -f java/security/cert/TrustAnchor.lo
! 	-rm -f java/security/cert/X509CRL.$(OBJEXT)
! 	-rm -f java/security/cert/X509CRL.lo
! 	-rm -f java/security/cert/X509CRLEntry.$(OBJEXT)
! 	-rm -f java/security/cert/X509CRLEntry.lo
! 	-rm -f java/security/cert/X509CRLSelector.$(OBJEXT)
! 	-rm -f java/security/cert/X509CRLSelector.lo
! 	-rm -f java/security/cert/X509CertSelector.$(OBJEXT)
! 	-rm -f java/security/cert/X509CertSelector.lo
! 	-rm -f java/security/cert/X509Certificate.$(OBJEXT)
! 	-rm -f java/security/cert/X509Certificate.lo
! 	-rm -f java/security/cert/X509Extension.$(OBJEXT)
! 	-rm -f java/security/cert/X509Extension.lo
! 	-rm -f java/security/interfaces/DSAKey.$(OBJEXT)
! 	-rm -f java/security/interfaces/DSAKey.lo
! 	-rm -f java/security/interfaces/DSAKeyPairGenerator.$(OBJEXT)
! 	-rm -f java/security/interfaces/DSAKeyPairGenerator.lo
! 	-rm -f java/security/interfaces/DSAParams.$(OBJEXT)
! 	-rm -f java/security/interfaces/DSAParams.lo
! 	-rm -f java/security/interfaces/DSAPrivateKey.$(OBJEXT)
! 	-rm -f java/security/interfaces/DSAPrivateKey.lo
! 	-rm -f java/security/interfaces/DSAPublicKey.$(OBJEXT)
! 	-rm -f java/security/interfaces/DSAPublicKey.lo
! 	-rm -f java/security/interfaces/RSAKey.$(OBJEXT)
! 	-rm -f java/security/interfaces/RSAKey.lo
! 	-rm -f java/security/interfaces/RSAMultiPrimePrivateCrtKey.$(OBJEXT)
! 	-rm -f java/security/interfaces/RSAMultiPrimePrivateCrtKey.lo
! 	-rm -f java/security/interfaces/RSAPrivateCrtKey.$(OBJEXT)
! 	-rm -f java/security/interfaces/RSAPrivateCrtKey.lo
! 	-rm -f java/security/interfaces/RSAPrivateKey.$(OBJEXT)
! 	-rm -f java/security/interfaces/RSAPrivateKey.lo
! 	-rm -f java/security/interfaces/RSAPublicKey.$(OBJEXT)
! 	-rm -f java/security/interfaces/RSAPublicKey.lo
! 	-rm -f java/security/spec/AlgorithmParameterSpec.$(OBJEXT)
! 	-rm -f java/security/spec/AlgorithmParameterSpec.lo
! 	-rm -f java/security/spec/DSAParameterSpec.$(OBJEXT)
! 	-rm -f java/security/spec/DSAParameterSpec.lo
! 	-rm -f java/security/spec/DSAPrivateKeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/DSAPrivateKeySpec.lo
! 	-rm -f java/security/spec/DSAPublicKeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/DSAPublicKeySpec.lo
! 	-rm -f java/security/spec/EncodedKeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/EncodedKeySpec.lo
! 	-rm -f java/security/spec/InvalidKeySpecException.$(OBJEXT)
! 	-rm -f java/security/spec/InvalidKeySpecException.lo
! 	-rm -f java/security/spec/InvalidParameterSpecException.$(OBJEXT)
! 	-rm -f java/security/spec/InvalidParameterSpecException.lo
! 	-rm -f java/security/spec/KeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/KeySpec.lo
! 	-rm -f java/security/spec/PKCS8EncodedKeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/PKCS8EncodedKeySpec.lo
! 	-rm -f java/security/spec/PSSParameterSpec.$(OBJEXT)
! 	-rm -f java/security/spec/PSSParameterSpec.lo
! 	-rm -f java/security/spec/RSAKeyGenParameterSpec.$(OBJEXT)
! 	-rm -f java/security/spec/RSAKeyGenParameterSpec.lo
! 	-rm -f java/security/spec/RSAMultiPrimePrivateCrtKeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/RSAMultiPrimePrivateCrtKeySpec.lo
! 	-rm -f java/security/spec/RSAOtherPrimeInfo.$(OBJEXT)
! 	-rm -f java/security/spec/RSAOtherPrimeInfo.lo
! 	-rm -f java/security/spec/RSAPrivateCrtKeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/RSAPrivateCrtKeySpec.lo
! 	-rm -f java/security/spec/RSAPrivateKeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/RSAPrivateKeySpec.lo
! 	-rm -f java/security/spec/RSAPublicKeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/RSAPublicKeySpec.lo
! 	-rm -f java/security/spec/X509EncodedKeySpec.$(OBJEXT)
! 	-rm -f java/security/spec/X509EncodedKeySpec.lo
! 	-rm -f java/sql/Array.$(OBJEXT)
! 	-rm -f java/sql/Array.lo
! 	-rm -f java/sql/BatchUpdateException.$(OBJEXT)
! 	-rm -f java/sql/BatchUpdateException.lo
! 	-rm -f java/sql/Blob.$(OBJEXT)
! 	-rm -f java/sql/Blob.lo
! 	-rm -f java/sql/CallableStatement.$(OBJEXT)
! 	-rm -f java/sql/CallableStatement.lo
! 	-rm -f java/sql/Clob.$(OBJEXT)
! 	-rm -f java/sql/Clob.lo
! 	-rm -f java/sql/Connection.$(OBJEXT)
! 	-rm -f java/sql/Connection.lo
! 	-rm -f java/sql/DataTruncation.$(OBJEXT)
! 	-rm -f java/sql/DataTruncation.lo
! 	-rm -f java/sql/DatabaseMetaData.$(OBJEXT)
! 	-rm -f java/sql/DatabaseMetaData.lo
! 	-rm -f java/sql/Date.$(OBJEXT)
! 	-rm -f java/sql/Date.lo
! 	-rm -f java/sql/Driver.$(OBJEXT)
! 	-rm -f java/sql/Driver.lo
! 	-rm -f java/sql/DriverManager.$(OBJEXT)
! 	-rm -f java/sql/DriverManager.lo
! 	-rm -f java/sql/DriverPropertyInfo.$(OBJEXT)
! 	-rm -f java/sql/DriverPropertyInfo.lo
! 	-rm -f java/sql/ParameterMetaData.$(OBJEXT)
! 	-rm -f java/sql/ParameterMetaData.lo
! 	-rm -f java/sql/PreparedStatement.$(OBJEXT)
! 	-rm -f java/sql/PreparedStatement.lo
! 	-rm -f java/sql/Ref.$(OBJEXT)
! 	-rm -f java/sql/Ref.lo
! 	-rm -f java/sql/ResultSet.$(OBJEXT)
! 	-rm -f java/sql/ResultSet.lo
! 	-rm -f java/sql/ResultSetMetaData.$(OBJEXT)
! 	-rm -f java/sql/ResultSetMetaData.lo
! 	-rm -f java/sql/SQLData.$(OBJEXT)
! 	-rm -f java/sql/SQLData.lo
! 	-rm -f java/sql/SQLException.$(OBJEXT)
! 	-rm -f java/sql/SQLException.lo
! 	-rm -f java/sql/SQLInput.$(OBJEXT)
! 	-rm -f java/sql/SQLInput.lo
! 	-rm -f java/sql/SQLOutput.$(OBJEXT)
! 	-rm -f java/sql/SQLOutput.lo
! 	-rm -f java/sql/SQLPermission.$(OBJEXT)
! 	-rm -f java/sql/SQLPermission.lo
! 	-rm -f java/sql/SQLWarning.$(OBJEXT)
! 	-rm -f java/sql/SQLWarning.lo
! 	-rm -f java/sql/Savepoint.$(OBJEXT)
! 	-rm -f java/sql/Savepoint.lo
! 	-rm -f java/sql/Statement.$(OBJEXT)
! 	-rm -f java/sql/Statement.lo
! 	-rm -f java/sql/Struct.$(OBJEXT)
! 	-rm -f java/sql/Struct.lo
! 	-rm -f java/sql/Time.$(OBJEXT)
! 	-rm -f java/sql/Time.lo
! 	-rm -f java/sql/Timestamp.$(OBJEXT)
! 	-rm -f java/sql/Timestamp.lo
! 	-rm -f java/sql/Types.$(OBJEXT)
! 	-rm -f java/sql/Types.lo
! 	-rm -f java/text/Annotation.$(OBJEXT)
! 	-rm -f java/text/Annotation.lo
! 	-rm -f java/text/AttributedCharacterIterator.$(OBJEXT)
! 	-rm -f java/text/AttributedCharacterIterator.lo
! 	-rm -f java/text/AttributedString.$(OBJEXT)
! 	-rm -f java/text/AttributedString.lo
! 	-rm -f java/text/AttributedStringIterator.$(OBJEXT)
! 	-rm -f java/text/AttributedStringIterator.lo
! 	-rm -f java/text/BreakIterator.$(OBJEXT)
! 	-rm -f java/text/BreakIterator.lo
! 	-rm -f java/text/CharacterIterator.$(OBJEXT)
! 	-rm -f java/text/CharacterIterator.lo
! 	-rm -f java/text/ChoiceFormat.$(OBJEXT)
! 	-rm -f java/text/ChoiceFormat.lo
! 	-rm -f java/text/CollationElementIterator.$(OBJEXT)
! 	-rm -f java/text/CollationElementIterator.lo
! 	-rm -f java/text/CollationKey.$(OBJEXT)
! 	-rm -f java/text/CollationKey.lo
! 	-rm -f java/text/Collator.$(OBJEXT)
! 	-rm -f java/text/Collator.lo
! 	-rm -f java/text/DateFormat.$(OBJEXT)
! 	-rm -f java/text/DateFormat.lo
! 	-rm -f java/text/DateFormatSymbols.$(OBJEXT)
! 	-rm -f java/text/DateFormatSymbols.lo
! 	-rm -f java/text/DecimalFormat.$(OBJEXT)
! 	-rm -f java/text/DecimalFormat.lo
! 	-rm -f java/text/DecimalFormatSymbols.$(OBJEXT)
! 	-rm -f java/text/DecimalFormatSymbols.lo
! 	-rm -f java/text/FieldPosition.$(OBJEXT)
! 	-rm -f java/text/FieldPosition.lo
! 	-rm -f java/text/Format.$(OBJEXT)
! 	-rm -f java/text/Format.lo
! 	-rm -f java/text/MessageFormat.$(OBJEXT)
! 	-rm -f java/text/MessageFormat.lo
! 	-rm -f java/text/NumberFormat.$(OBJEXT)
! 	-rm -f java/text/NumberFormat.lo
! 	-rm -f java/text/ParseException.$(OBJEXT)
! 	-rm -f java/text/ParseException.lo
! 	-rm -f java/text/ParsePosition.$(OBJEXT)
! 	-rm -f java/text/ParsePosition.lo
! 	-rm -f java/text/RuleBasedCollator.$(OBJEXT)
! 	-rm -f java/text/RuleBasedCollator.lo
! 	-rm -f java/text/SimpleDateFormat.$(OBJEXT)
! 	-rm -f java/text/SimpleDateFormat.lo
! 	-rm -f java/text/StringCharacterIterator.$(OBJEXT)
! 	-rm -f java/text/StringCharacterIterator.lo
! 	-rm -f java/text/natCollator.$(OBJEXT)
! 	-rm -f java/text/natCollator.lo
! 	-rm -f java/util/AbstractCollection.$(OBJEXT)
! 	-rm -f java/util/AbstractCollection.lo
! 	-rm -f java/util/AbstractList.$(OBJEXT)
! 	-rm -f java/util/AbstractList.lo
! 	-rm -f java/util/AbstractMap.$(OBJEXT)
! 	-rm -f java/util/AbstractMap.lo
! 	-rm -f java/util/AbstractSequentialList.$(OBJEXT)
! 	-rm -f java/util/AbstractSequentialList.lo
! 	-rm -f java/util/AbstractSet.$(OBJEXT)
! 	-rm -f java/util/AbstractSet.lo
! 	-rm -f java/util/ArrayList.$(OBJEXT)
! 	-rm -f java/util/ArrayList.lo
! 	-rm -f java/util/Arrays.$(OBJEXT)
! 	-rm -f java/util/Arrays.lo
! 	-rm -f java/util/BitSet.$(OBJEXT)
! 	-rm -f java/util/BitSet.lo
! 	-rm -f java/util/Calendar.$(OBJEXT)
! 	-rm -f java/util/Calendar.lo
! 	-rm -f java/util/Collection.$(OBJEXT)
! 	-rm -f java/util/Collection.lo
! 	-rm -f java/util/Collections.$(OBJEXT)
! 	-rm -f java/util/Collections.lo
! 	-rm -f java/util/Comparator.$(OBJEXT)
! 	-rm -f java/util/Comparator.lo
! 	-rm -f java/util/ConcurrentModificationException.$(OBJEXT)
! 	-rm -f java/util/ConcurrentModificationException.lo
! 	-rm -f java/util/Currency.$(OBJEXT)
! 	-rm -f java/util/Currency.lo
! 	-rm -f java/util/Date.$(OBJEXT)
! 	-rm -f java/util/Date.lo
! 	-rm -f java/util/Dictionary.$(OBJEXT)
! 	-rm -f java/util/Dictionary.lo
! 	-rm -f java/util/EmptyStackException.$(OBJEXT)
! 	-rm -f java/util/EmptyStackException.lo
! 	-rm -f java/util/Enumeration.$(OBJEXT)
! 	-rm -f java/util/Enumeration.lo
! 	-rm -f java/util/EventListener.$(OBJEXT)
! 	-rm -f java/util/EventListener.lo
! 	-rm -f java/util/EventListenerProxy.$(OBJEXT)
! 	-rm -f java/util/EventListenerProxy.lo
! 	-rm -f java/util/EventObject.$(OBJEXT)
! 	-rm -f java/util/EventObject.lo
! 	-rm -f java/util/GregorianCalendar.$(OBJEXT)
! 	-rm -f java/util/GregorianCalendar.lo
! 	-rm -f java/util/HashMap.$(OBJEXT)
! 	-rm -f java/util/HashMap.lo
! 	-rm -f java/util/HashSet.$(OBJEXT)
! 	-rm -f java/util/HashSet.lo
! 	-rm -f java/util/Hashtable.$(OBJEXT)
! 	-rm -f java/util/Hashtable.lo
! 	-rm -f java/util/IdentityHashMap.$(OBJEXT)
! 	-rm -f java/util/IdentityHashMap.lo
! 	-rm -f java/util/Iterator.$(OBJEXT)
! 	-rm -f java/util/Iterator.lo
! 	-rm -f java/util/LinkedHashMap.$(OBJEXT)
! 	-rm -f java/util/LinkedHashMap.lo
! 	-rm -f java/util/LinkedHashSet.$(OBJEXT)
! 	-rm -f java/util/LinkedHashSet.lo
! 	-rm -f java/util/LinkedList.$(OBJEXT)
! 	-rm -f java/util/LinkedList.lo
! 	-rm -f java/util/List.$(OBJEXT)
! 	-rm -f java/util/List.lo
! 	-rm -f java/util/ListIterator.$(OBJEXT)
! 	-rm -f java/util/ListIterator.lo
! 	-rm -f java/util/ListResourceBundle.$(OBJEXT)
! 	-rm -f java/util/ListResourceBundle.lo
! 	-rm -f java/util/Locale.$(OBJEXT)
! 	-rm -f java/util/Locale.lo
! 	-rm -f java/util/Map.$(OBJEXT)
! 	-rm -f java/util/Map.lo
! 	-rm -f java/util/MissingResourceException.$(OBJEXT)
! 	-rm -f java/util/MissingResourceException.lo
! 	-rm -f java/util/NoSuchElementException.$(OBJEXT)
! 	-rm -f java/util/NoSuchElementException.lo
! 	-rm -f java/util/Observable.$(OBJEXT)
! 	-rm -f java/util/Observable.lo
! 	-rm -f java/util/Observer.$(OBJEXT)
! 	-rm -f java/util/Observer.lo
! 	-rm -f java/util/Properties.$(OBJEXT)
! 	-rm -f java/util/Properties.lo
! 	-rm -f java/util/PropertyPermission.$(OBJEXT)
! 	-rm -f java/util/PropertyPermission.lo
! 	-rm -f java/util/PropertyPermissionCollection.$(OBJEXT)
! 	-rm -f java/util/PropertyPermissionCollection.lo
! 	-rm -f java/util/PropertyResourceBundle.$(OBJEXT)
! 	-rm -f java/util/PropertyResourceBundle.lo
! 	-rm -f java/util/Random.$(OBJEXT)
! 	-rm -f java/util/Random.lo
! 	-rm -f java/util/RandomAccess.$(OBJEXT)
! 	-rm -f java/util/RandomAccess.lo
! 	-rm -f java/util/ResourceBundle.$(OBJEXT)
! 	-rm -f java/util/ResourceBundle.lo
! 	-rm -f java/util/Set.$(OBJEXT)
! 	-rm -f java/util/Set.lo
! 	-rm -f java/util/SimpleTimeZone.$(OBJEXT)
! 	-rm -f java/util/SimpleTimeZone.lo
! 	-rm -f java/util/SortedMap.$(OBJEXT)
! 	-rm -f java/util/SortedMap.lo
! 	-rm -f java/util/SortedSet.$(OBJEXT)
! 	-rm -f java/util/SortedSet.lo
! 	-rm -f java/util/Stack.$(OBJEXT)
! 	-rm -f java/util/Stack.lo
! 	-rm -f java/util/StringTokenizer.$(OBJEXT)
! 	-rm -f java/util/StringTokenizer.lo
! 	-rm -f java/util/TimeZone.$(OBJEXT)
! 	-rm -f java/util/TimeZone.lo
! 	-rm -f java/util/Timer.$(OBJEXT)
! 	-rm -f java/util/Timer.lo
! 	-rm -f java/util/TimerTask.$(OBJEXT)
! 	-rm -f java/util/TimerTask.lo
! 	-rm -f java/util/TooManyListenersException.$(OBJEXT)
! 	-rm -f java/util/TooManyListenersException.lo
! 	-rm -f java/util/TreeMap.$(OBJEXT)
! 	-rm -f java/util/TreeMap.lo
! 	-rm -f java/util/TreeSet.$(OBJEXT)
! 	-rm -f java/util/TreeSet.lo
! 	-rm -f java/util/VMTimeZone.$(OBJEXT)
! 	-rm -f java/util/VMTimeZone.lo
! 	-rm -f java/util/Vector.$(OBJEXT)
! 	-rm -f java/util/Vector.lo
! 	-rm -f java/util/WeakHashMap.$(OBJEXT)
! 	-rm -f java/util/WeakHashMap.lo
! 	-rm -f java/util/jar/Attributes.$(OBJEXT)
! 	-rm -f java/util/jar/Attributes.lo
! 	-rm -f java/util/jar/JarEntry.$(OBJEXT)
! 	-rm -f java/util/jar/JarEntry.lo
! 	-rm -f java/util/jar/JarException.$(OBJEXT)
! 	-rm -f java/util/jar/JarException.lo
! 	-rm -f java/util/jar/JarFile.$(OBJEXT)
! 	-rm -f java/util/jar/JarFile.lo
! 	-rm -f java/util/jar/JarInputStream.$(OBJEXT)
! 	-rm -f java/util/jar/JarInputStream.lo
! 	-rm -f java/util/jar/JarOutputStream.$(OBJEXT)
! 	-rm -f java/util/jar/JarOutputStream.lo
! 	-rm -f java/util/jar/Manifest.$(OBJEXT)
! 	-rm -f java/util/jar/Manifest.lo
! 	-rm -f java/util/logging/ConsoleHandler.$(OBJEXT)
! 	-rm -f java/util/logging/ConsoleHandler.lo
! 	-rm -f java/util/logging/ErrorManager.$(OBJEXT)
! 	-rm -f java/util/logging/ErrorManager.lo
! 	-rm -f java/util/logging/FileHandler.$(OBJEXT)
! 	-rm -f java/util/logging/FileHandler.lo
! 	-rm -f java/util/logging/Filter.$(OBJEXT)
! 	-rm -f java/util/logging/Filter.lo
! 	-rm -f java/util/logging/Formatter.$(OBJEXT)
! 	-rm -f java/util/logging/Formatter.lo
! 	-rm -f java/util/logging/Handler.$(OBJEXT)
! 	-rm -f java/util/logging/Handler.lo
! 	-rm -f java/util/logging/Level.$(OBJEXT)
! 	-rm -f java/util/logging/Level.lo
! 	-rm -f java/util/logging/LogManager.$(OBJEXT)
! 	-rm -f java/util/logging/LogManager.lo
! 	-rm -f java/util/logging/LogRecord.$(OBJEXT)
! 	-rm -f java/util/logging/LogRecord.lo
! 	-rm -f java/util/logging/Logger.$(OBJEXT)
! 	-rm -f java/util/logging/Logger.lo
! 	-rm -f java/util/logging/LoggingPermission.$(OBJEXT)
! 	-rm -f java/util/logging/LoggingPermission.lo
! 	-rm -f java/util/logging/MemoryHandler.$(OBJEXT)
! 	-rm -f java/util/logging/MemoryHandler.lo
! 	-rm -f java/util/logging/SimpleFormatter.$(OBJEXT)
! 	-rm -f java/util/logging/SimpleFormatter.lo
! 	-rm -f java/util/logging/SocketHandler.$(OBJEXT)
! 	-rm -f java/util/logging/SocketHandler.lo
! 	-rm -f java/util/logging/StreamHandler.$(OBJEXT)
! 	-rm -f java/util/logging/StreamHandler.lo
! 	-rm -f java/util/logging/XMLFormatter.$(OBJEXT)
! 	-rm -f java/util/logging/XMLFormatter.lo
! 	-rm -f java/util/logging/natLogger.$(OBJEXT)
! 	-rm -f java/util/logging/natLogger.lo
! 	-rm -f java/util/natResourceBundle.$(OBJEXT)
! 	-rm -f java/util/natResourceBundle.lo
! 	-rm -f java/util/natVMTimeZone.$(OBJEXT)
! 	-rm -f java/util/natVMTimeZone.lo
! 	-rm -f java/util/prefs/AbstractPreferences.$(OBJEXT)
! 	-rm -f java/util/prefs/AbstractPreferences.lo
! 	-rm -f java/util/prefs/BackingStoreException.$(OBJEXT)
! 	-rm -f java/util/prefs/BackingStoreException.lo
! 	-rm -f java/util/prefs/InvalidPreferencesFormatException.$(OBJEXT)
! 	-rm -f java/util/prefs/InvalidPreferencesFormatException.lo
! 	-rm -f java/util/prefs/NodeChangeEvent.$(OBJEXT)
! 	-rm -f java/util/prefs/NodeChangeEvent.lo
! 	-rm -f java/util/prefs/NodeChangeListener.$(OBJEXT)
! 	-rm -f java/util/prefs/NodeChangeListener.lo
! 	-rm -f java/util/prefs/PreferenceChangeEvent.$(OBJEXT)
! 	-rm -f java/util/prefs/PreferenceChangeEvent.lo
! 	-rm -f java/util/prefs/PreferenceChangeListener.$(OBJEXT)
! 	-rm -f java/util/prefs/PreferenceChangeListener.lo
! 	-rm -f java/util/prefs/Preferences.$(OBJEXT)
! 	-rm -f java/util/prefs/Preferences.lo
! 	-rm -f java/util/prefs/PreferencesFactory.$(OBJEXT)
! 	-rm -f java/util/prefs/PreferencesFactory.lo
! 	-rm -f java/util/regex/Matcher.$(OBJEXT)
! 	-rm -f java/util/regex/Matcher.lo
! 	-rm -f java/util/regex/Pattern.$(OBJEXT)
! 	-rm -f java/util/regex/Pattern.lo
! 	-rm -f java/util/regex/PatternSyntaxException.$(OBJEXT)
! 	-rm -f java/util/regex/PatternSyntaxException.lo
! 	-rm -f java/util/zip/Adler32.$(OBJEXT)
! 	-rm -f java/util/zip/Adler32.lo
! 	-rm -f java/util/zip/CRC32.$(OBJEXT)
! 	-rm -f java/util/zip/CRC32.lo
! 	-rm -f java/util/zip/CheckedInputStream.$(OBJEXT)
! 	-rm -f java/util/zip/CheckedInputStream.lo
! 	-rm -f java/util/zip/CheckedOutputStream.$(OBJEXT)
! 	-rm -f java/util/zip/CheckedOutputStream.lo
! 	-rm -f java/util/zip/Checksum.$(OBJEXT)
! 	-rm -f java/util/zip/Checksum.lo
! 	-rm -f java/util/zip/DataFormatException.$(OBJEXT)
! 	-rm -f java/util/zip/DataFormatException.lo
! 	-rm -f java/util/zip/Deflater.$(OBJEXT)
! 	-rm -f java/util/zip/Deflater.lo
! 	-rm -f java/util/zip/DeflaterOutputStream.$(OBJEXT)
! 	-rm -f java/util/zip/DeflaterOutputStream.lo
! 	-rm -f java/util/zip/GZIPInputStream.$(OBJEXT)
! 	-rm -f java/util/zip/GZIPInputStream.lo
! 	-rm -f java/util/zip/GZIPOutputStream.$(OBJEXT)
! 	-rm -f java/util/zip/GZIPOutputStream.lo
! 	-rm -f java/util/zip/Inflater.$(OBJEXT)
! 	-rm -f java/util/zip/Inflater.lo
! 	-rm -f java/util/zip/InflaterInputStream.$(OBJEXT)
! 	-rm -f java/util/zip/InflaterInputStream.lo
! 	-rm -f java/util/zip/ZipConstants.$(OBJEXT)
! 	-rm -f java/util/zip/ZipConstants.lo
! 	-rm -f java/util/zip/ZipEntry.$(OBJEXT)
! 	-rm -f java/util/zip/ZipEntry.lo
! 	-rm -f java/util/zip/ZipException.$(OBJEXT)
! 	-rm -f java/util/zip/ZipException.lo
! 	-rm -f java/util/zip/ZipFile.$(OBJEXT)
! 	-rm -f java/util/zip/ZipFile.lo
! 	-rm -f java/util/zip/ZipInputStream.$(OBJEXT)
! 	-rm -f java/util/zip/ZipInputStream.lo
! 	-rm -f java/util/zip/ZipOutputStream.$(OBJEXT)
! 	-rm -f java/util/zip/ZipOutputStream.lo
! 	-rm -f java/util/zip/natDeflater.$(OBJEXT)
! 	-rm -f java/util/zip/natDeflater.lo
! 	-rm -f java/util/zip/natInflater.$(OBJEXT)
! 	-rm -f java/util/zip/natInflater.lo
! 	-rm -f javax/accessibility/Accessible.$(OBJEXT)
! 	-rm -f javax/accessibility/Accessible.lo
! 	-rm -f javax/accessibility/AccessibleAction.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleAction.lo
! 	-rm -f javax/accessibility/AccessibleBundle.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleBundle.lo
! 	-rm -f javax/accessibility/AccessibleComponent.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleComponent.lo
! 	-rm -f javax/accessibility/AccessibleContext.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleContext.lo
! 	-rm -f javax/accessibility/AccessibleEditableText.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleEditableText.lo
! 	-rm -f javax/accessibility/AccessibleExtendedComponent.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleExtendedComponent.lo
! 	-rm -f javax/accessibility/AccessibleExtendedTable.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleExtendedTable.lo
! 	-rm -f javax/accessibility/AccessibleHyperlink.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleHyperlink.lo
! 	-rm -f javax/accessibility/AccessibleHypertext.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleHypertext.lo
! 	-rm -f javax/accessibility/AccessibleIcon.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleIcon.lo
! 	-rm -f javax/accessibility/AccessibleKeyBinding.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleKeyBinding.lo
! 	-rm -f javax/accessibility/AccessibleRelation.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleRelation.lo
! 	-rm -f javax/accessibility/AccessibleRelationSet.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleRelationSet.lo
! 	-rm -f javax/accessibility/AccessibleResourceBundle.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleResourceBundle.lo
! 	-rm -f javax/accessibility/AccessibleRole.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleRole.lo
! 	-rm -f javax/accessibility/AccessibleSelection.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleSelection.lo
! 	-rm -f javax/accessibility/AccessibleState.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleState.lo
! 	-rm -f javax/accessibility/AccessibleStateSet.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleStateSet.lo
! 	-rm -f javax/accessibility/AccessibleTable.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleTable.lo
! 	-rm -f javax/accessibility/AccessibleTableModelChange.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleTableModelChange.lo
! 	-rm -f javax/accessibility/AccessibleText.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleText.lo
! 	-rm -f javax/accessibility/AccessibleValue.$(OBJEXT)
! 	-rm -f javax/accessibility/AccessibleValue.lo
! 	-rm -f javax/crypto/BadPaddingException.$(OBJEXT)
! 	-rm -f javax/crypto/BadPaddingException.lo
! 	-rm -f javax/crypto/Cipher.$(OBJEXT)
! 	-rm -f javax/crypto/Cipher.lo
! 	-rm -f javax/crypto/CipherInputStream.$(OBJEXT)
! 	-rm -f javax/crypto/CipherInputStream.lo
! 	-rm -f javax/crypto/CipherOutputStream.$(OBJEXT)
! 	-rm -f javax/crypto/CipherOutputStream.lo
! 	-rm -f javax/crypto/CipherSpi.$(OBJEXT)
! 	-rm -f javax/crypto/CipherSpi.lo
! 	-rm -f javax/crypto/EncryptedPrivateKeyInfo.$(OBJEXT)
! 	-rm -f javax/crypto/EncryptedPrivateKeyInfo.lo
! 	-rm -f javax/crypto/ExemptionMechanism.$(OBJEXT)
! 	-rm -f javax/crypto/ExemptionMechanism.lo
! 	-rm -f javax/crypto/ExemptionMechanismException.$(OBJEXT)
! 	-rm -f javax/crypto/ExemptionMechanismException.lo
! 	-rm -f javax/crypto/ExemptionMechanismSpi.$(OBJEXT)
! 	-rm -f javax/crypto/ExemptionMechanismSpi.lo
! 	-rm -f javax/crypto/IllegalBlockSizeException.$(OBJEXT)
! 	-rm -f javax/crypto/IllegalBlockSizeException.lo
! 	-rm -f javax/crypto/KeyAgreement.$(OBJEXT)
! 	-rm -f javax/crypto/KeyAgreement.lo
! 	-rm -f javax/crypto/KeyAgreementSpi.$(OBJEXT)
! 	-rm -f javax/crypto/KeyAgreementSpi.lo
! 	-rm -f javax/crypto/KeyGenerator.$(OBJEXT)
! 	-rm -f javax/crypto/KeyGenerator.lo
! 	-rm -f javax/crypto/KeyGeneratorSpi.$(OBJEXT)
! 	-rm -f javax/crypto/KeyGeneratorSpi.lo
! 	-rm -f javax/crypto/Mac.$(OBJEXT)
! 	-rm -f javax/crypto/Mac.lo
! 	-rm -f javax/crypto/MacSpi.$(OBJEXT)
! 	-rm -f javax/crypto/MacSpi.lo
! 	-rm -f javax/crypto/NoSuchPaddingException.$(OBJEXT)
! 	-rm -f javax/crypto/NoSuchPaddingException.lo
! 	-rm -f javax/crypto/NullCipher.$(OBJEXT)
! 	-rm -f javax/crypto/NullCipher.lo
! 	-rm -f javax/crypto/NullCipherImpl.$(OBJEXT)
! 	-rm -f javax/crypto/NullCipherImpl.lo
! 	-rm -f javax/crypto/SealedObject.$(OBJEXT)
! 	-rm -f javax/crypto/SealedObject.lo
! 	-rm -f javax/crypto/SecretKey.$(OBJEXT)
! 	-rm -f javax/crypto/SecretKey.lo
! 	-rm -f javax/crypto/SecretKeyFactory.$(OBJEXT)
! 	-rm -f javax/crypto/SecretKeyFactory.lo
! 	-rm -f javax/crypto/SecretKeyFactorySpi.$(OBJEXT)
! 	-rm -f javax/crypto/SecretKeyFactorySpi.lo
! 	-rm -f javax/crypto/ShortBufferException.$(OBJEXT)
! 	-rm -f javax/crypto/ShortBufferException.lo
! 	-rm -f javax/crypto/interfaces/DHKey.$(OBJEXT)
! 	-rm -f javax/crypto/interfaces/DHKey.lo
! 	-rm -f javax/crypto/interfaces/DHPrivateKey.$(OBJEXT)
! 	-rm -f javax/crypto/interfaces/DHPrivateKey.lo
! 	-rm -f javax/crypto/interfaces/DHPublicKey.$(OBJEXT)
! 	-rm -f javax/crypto/interfaces/DHPublicKey.lo
! 	-rm -f javax/crypto/interfaces/PBEKey.$(OBJEXT)
! 	-rm -f javax/crypto/interfaces/PBEKey.lo
! 	-rm -f javax/crypto/spec/DESKeySpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/DESKeySpec.lo
! 	-rm -f javax/crypto/spec/DESedeKeySpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/DESedeKeySpec.lo
! 	-rm -f javax/crypto/spec/DHGenParameterSpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/DHGenParameterSpec.lo
! 	-rm -f javax/crypto/spec/DHParameterSpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/DHParameterSpec.lo
! 	-rm -f javax/crypto/spec/DHPrivateKeySpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/DHPrivateKeySpec.lo
! 	-rm -f javax/crypto/spec/DHPublicKeySpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/DHPublicKeySpec.lo
! 	-rm -f javax/crypto/spec/IvParameterSpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/IvParameterSpec.lo
! 	-rm -f javax/crypto/spec/PBEKeySpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/PBEKeySpec.lo
! 	-rm -f javax/crypto/spec/PBEParameterSpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/PBEParameterSpec.lo
! 	-rm -f javax/crypto/spec/RC2ParameterSpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/RC2ParameterSpec.lo
! 	-rm -f javax/crypto/spec/RC5ParameterSpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/RC5ParameterSpec.lo
! 	-rm -f javax/crypto/spec/SecretKeySpec.$(OBJEXT)
! 	-rm -f javax/crypto/spec/SecretKeySpec.lo
! 	-rm -f javax/naming/AuthenticationException.$(OBJEXT)
! 	-rm -f javax/naming/AuthenticationException.lo
! 	-rm -f javax/naming/AuthenticationNotSupportedException.$(OBJEXT)
! 	-rm -f javax/naming/AuthenticationNotSupportedException.lo
! 	-rm -f javax/naming/BinaryRefAddr.$(OBJEXT)
! 	-rm -f javax/naming/BinaryRefAddr.lo
! 	-rm -f javax/naming/Binding.$(OBJEXT)
! 	-rm -f javax/naming/Binding.lo
! 	-rm -f javax/naming/CannotProceedException.$(OBJEXT)
! 	-rm -f javax/naming/CannotProceedException.lo
! 	-rm -f javax/naming/CommunicationException.$(OBJEXT)
! 	-rm -f javax/naming/CommunicationException.lo
! 	-rm -f javax/naming/CompositeName.$(OBJEXT)
! 	-rm -f javax/naming/CompositeName.lo
! 	-rm -f javax/naming/CompoundName.$(OBJEXT)
! 	-rm -f javax/naming/CompoundName.lo
! 	-rm -f javax/naming/ConfigurationException.$(OBJEXT)
! 	-rm -f javax/naming/ConfigurationException.lo
! 	-rm -f javax/naming/Context.$(OBJEXT)
! 	-rm -f javax/naming/Context.lo
! 	-rm -f javax/naming/ContextNotEmptyException.$(OBJEXT)
! 	-rm -f javax/naming/ContextNotEmptyException.lo
! 	-rm -f javax/naming/InitialContext.$(OBJEXT)
! 	-rm -f javax/naming/InitialContext.lo
! 	-rm -f javax/naming/InsufficientResourcesException.$(OBJEXT)
! 	-rm -f javax/naming/InsufficientResourcesException.lo
! 	-rm -f javax/naming/InterruptedNamingException.$(OBJEXT)
! 	-rm -f javax/naming/InterruptedNamingException.lo
! 	-rm -f javax/naming/InvalidNameException.$(OBJEXT)
! 	-rm -f javax/naming/InvalidNameException.lo
! 	-rm -f javax/naming/LimitExceededException.$(OBJEXT)
! 	-rm -f javax/naming/LimitExceededException.lo
! 	-rm -f javax/naming/LinkException.$(OBJEXT)
! 	-rm -f javax/naming/LinkException.lo
! 	-rm -f javax/naming/LinkLoopException.$(OBJEXT)
! 	-rm -f javax/naming/LinkLoopException.lo
! 	-rm -f javax/naming/LinkRef.$(OBJEXT)
! 	-rm -f javax/naming/LinkRef.lo
! 	-rm -f javax/naming/MalformedLinkException.$(OBJEXT)
! 	-rm -f javax/naming/MalformedLinkException.lo
! 	-rm -f javax/naming/Name.$(OBJEXT)
! 	-rm -f javax/naming/Name.lo
! 	-rm -f javax/naming/NameAlreadyBoundException.$(OBJEXT)
! 	-rm -f javax/naming/NameAlreadyBoundException.lo
! 	-rm -f javax/naming/NameClassPair.$(OBJEXT)
! 	-rm -f javax/naming/NameClassPair.lo
! 	-rm -f javax/naming/NameNotFoundException.$(OBJEXT)
! 	-rm -f javax/naming/NameNotFoundException.lo
! 	-rm -f javax/naming/NameParser.$(OBJEXT)
! 	-rm -f javax/naming/NameParser.lo
! 	-rm -f javax/naming/NamingEnumeration.$(OBJEXT)
! 	-rm -f javax/naming/NamingEnumeration.lo
! 	-rm -f javax/naming/NamingException.$(OBJEXT)
! 	-rm -f javax/naming/NamingException.lo
! 	-rm -f javax/naming/NamingSecurityException.$(OBJEXT)
! 	-rm -f javax/naming/NamingSecurityException.lo
! 	-rm -f javax/naming/NoInitialContextException.$(OBJEXT)
! 	-rm -f javax/naming/NoInitialContextException.lo
! 	-rm -f javax/naming/NoPermissionException.$(OBJEXT)
! 	-rm -f javax/naming/NoPermissionException.lo
! 	-rm -f javax/naming/NotContextException.$(OBJEXT)
! 	-rm -f javax/naming/NotContextException.lo
! 	-rm -f javax/naming/OperationNotSupportedException.$(OBJEXT)
! 	-rm -f javax/naming/OperationNotSupportedException.lo
! 	-rm -f javax/naming/PartialResultException.$(OBJEXT)
! 	-rm -f javax/naming/PartialResultException.lo
! 	-rm -f javax/naming/RefAddr.$(OBJEXT)
! 	-rm -f javax/naming/RefAddr.lo
! 	-rm -f javax/naming/Reference.$(OBJEXT)
! 	-rm -f javax/naming/Reference.lo
! 	-rm -f javax/naming/Referenceable.$(OBJEXT)
! 	-rm -f javax/naming/Referenceable.lo
! 	-rm -f javax/naming/ReferralException.$(OBJEXT)
! 	-rm -f javax/naming/ReferralException.lo
! 	-rm -f javax/naming/ServiceUnavailableException.$(OBJEXT)
! 	-rm -f javax/naming/ServiceUnavailableException.lo
! 	-rm -f javax/naming/SizeLimitExceededException.$(OBJEXT)
! 	-rm -f javax/naming/SizeLimitExceededException.lo
! 	-rm -f javax/naming/StringRefAddr.$(OBJEXT)
! 	-rm -f javax/naming/StringRefAddr.lo
! 	-rm -f javax/naming/TimeLimitExceededException.$(OBJEXT)
! 	-rm -f javax/naming/TimeLimitExceededException.lo
! 	-rm -f javax/naming/directory/Attribute.$(OBJEXT)
! 	-rm -f javax/naming/directory/Attribute.lo
! 	-rm -f javax/naming/directory/AttributeInUseException.$(OBJEXT)
! 	-rm -f javax/naming/directory/AttributeInUseException.lo
! 	-rm -f javax/naming/directory/AttributeModificationException.$(OBJEXT)
! 	-rm -f javax/naming/directory/AttributeModificationException.lo
! 	-rm -f javax/naming/directory/Attributes.$(OBJEXT)
! 	-rm -f javax/naming/directory/Attributes.lo
! 	-rm -f javax/naming/directory/BasicAttribute.$(OBJEXT)
! 	-rm -f javax/naming/directory/BasicAttribute.lo
! 	-rm -f javax/naming/directory/BasicAttributes.$(OBJEXT)
! 	-rm -f javax/naming/directory/BasicAttributes.lo
! 	-rm -f javax/naming/directory/DirContext.$(OBJEXT)
! 	-rm -f javax/naming/directory/DirContext.lo
! 	-rm -f javax/naming/directory/InitialDirContext.$(OBJEXT)
! 	-rm -f javax/naming/directory/InitialDirContext.lo
! 	-rm -f javax/naming/directory/InvalidAttributeIdentifierException.$(OBJEXT)
! 	-rm -f javax/naming/directory/InvalidAttributeIdentifierException.lo
! 	-rm -f javax/naming/directory/InvalidAttributeValueException.$(OBJEXT)
! 	-rm -f javax/naming/directory/InvalidAttributeValueException.lo
! 	-rm -f javax/naming/directory/InvalidAttributesException.$(OBJEXT)
! 	-rm -f javax/naming/directory/InvalidAttributesException.lo
! 	-rm -f javax/naming/directory/InvalidSearchControlsException.$(OBJEXT)
! 	-rm -f javax/naming/directory/InvalidSearchControlsException.lo
! 	-rm -f javax/naming/directory/InvalidSearchFilterException.$(OBJEXT)
! 	-rm -f javax/naming/directory/InvalidSearchFilterException.lo
! 	-rm -f javax/naming/directory/ModificationItem.$(OBJEXT)
! 	-rm -f javax/naming/directory/ModificationItem.lo
! 	-rm -f javax/naming/directory/NoSuchAttributeException.$(OBJEXT)
! 	-rm -f javax/naming/directory/NoSuchAttributeException.lo
! 	-rm -f javax/naming/directory/SchemaViolationException.$(OBJEXT)
! 	-rm -f javax/naming/directory/SchemaViolationException.lo
! 	-rm -f javax/naming/directory/SearchControls.$(OBJEXT)
! 	-rm -f javax/naming/directory/SearchControls.lo
! 	-rm -f javax/naming/directory/SearchResult.$(OBJEXT)
! 	-rm -f javax/naming/directory/SearchResult.lo
! 	-rm -f javax/naming/event/EventContext.$(OBJEXT)
! 	-rm -f javax/naming/event/EventContext.lo
! 	-rm -f javax/naming/event/EventDirContext.$(OBJEXT)
! 	-rm -f javax/naming/event/EventDirContext.lo
! 	-rm -f javax/naming/event/NamespaceChangeListener.$(OBJEXT)
! 	-rm -f javax/naming/event/NamespaceChangeListener.lo
! 	-rm -f javax/naming/event/NamingEvent.$(OBJEXT)
! 	-rm -f javax/naming/event/NamingEvent.lo
! 	-rm -f javax/naming/event/NamingExceptionEvent.$(OBJEXT)
! 	-rm -f javax/naming/event/NamingExceptionEvent.lo
! 	-rm -f javax/naming/event/NamingListener.$(OBJEXT)
! 	-rm -f javax/naming/event/NamingListener.lo
! 	-rm -f javax/naming/event/ObjectChangeListener.$(OBJEXT)
! 	-rm -f javax/naming/event/ObjectChangeListener.lo
! 	-rm -f javax/naming/ldap/Control.$(OBJEXT)
! 	-rm -f javax/naming/ldap/Control.lo
! 	-rm -f javax/naming/ldap/ControlFactory.$(OBJEXT)
! 	-rm -f javax/naming/ldap/ControlFactory.lo
! 	-rm -f javax/naming/ldap/ExtendedRequest.$(OBJEXT)
! 	-rm -f javax/naming/ldap/ExtendedRequest.lo
! 	-rm -f javax/naming/ldap/ExtendedResponse.$(OBJEXT)
! 	-rm -f javax/naming/ldap/ExtendedResponse.lo
! 	-rm -f javax/naming/ldap/HasControls.$(OBJEXT)
! 	-rm -f javax/naming/ldap/HasControls.lo
! 	-rm -f javax/naming/ldap/InitialLdapContext.$(OBJEXT)
! 	-rm -f javax/naming/ldap/InitialLdapContext.lo
! 	-rm -f javax/naming/ldap/LdapContext.$(OBJEXT)
! 	-rm -f javax/naming/ldap/LdapContext.lo
! 	-rm -f javax/naming/ldap/LdapReferralException.$(OBJEXT)
! 	-rm -f javax/naming/ldap/LdapReferralException.lo
! 	-rm -f javax/naming/ldap/UnsolicitedNotification.$(OBJEXT)
! 	-rm -f javax/naming/ldap/UnsolicitedNotification.lo
! 	-rm -f javax/naming/ldap/UnsolicitedNotificationEvent.$(OBJEXT)
! 	-rm -f javax/naming/ldap/UnsolicitedNotificationEvent.lo
! 	-rm -f javax/naming/ldap/UnsolicitedNotificationListener.$(OBJEXT)
! 	-rm -f javax/naming/ldap/UnsolicitedNotificationListener.lo
! 	-rm -f javax/naming/spi/DirObjectFactory.$(OBJEXT)
! 	-rm -f javax/naming/spi/DirObjectFactory.lo
! 	-rm -f javax/naming/spi/DirStateFactory.$(OBJEXT)
! 	-rm -f javax/naming/spi/DirStateFactory.lo
! 	-rm -f javax/naming/spi/DirectoryManager.$(OBJEXT)
! 	-rm -f javax/naming/spi/DirectoryManager.lo
! 	-rm -f javax/naming/spi/InitialContextFactory.$(OBJEXT)
! 	-rm -f javax/naming/spi/InitialContextFactory.lo
! 	-rm -f javax/naming/spi/InitialContextFactoryBuilder.$(OBJEXT)
! 	-rm -f javax/naming/spi/InitialContextFactoryBuilder.lo
! 	-rm -f javax/naming/spi/NamingManager.$(OBJEXT)
! 	-rm -f javax/naming/spi/NamingManager.lo
! 	-rm -f javax/naming/spi/ObjectFactory.$(OBJEXT)
! 	-rm -f javax/naming/spi/ObjectFactory.lo
! 	-rm -f javax/naming/spi/ObjectFactoryBuilder.$(OBJEXT)
! 	-rm -f javax/naming/spi/ObjectFactoryBuilder.lo
! 	-rm -f javax/naming/spi/ResolveResult.$(OBJEXT)
! 	-rm -f javax/naming/spi/ResolveResult.lo
! 	-rm -f javax/naming/spi/Resolver.$(OBJEXT)
! 	-rm -f javax/naming/spi/Resolver.lo
! 	-rm -f javax/naming/spi/StateFactory.$(OBJEXT)
! 	-rm -f javax/naming/spi/StateFactory.lo
! 	-rm -f javax/net/ServerSocketFactory.$(OBJEXT)
! 	-rm -f javax/net/ServerSocketFactory.lo
! 	-rm -f javax/net/SocketFactory.$(OBJEXT)
! 	-rm -f javax/net/SocketFactory.lo
! 	-rm -f javax/net/VanillaServerSocketFactory.$(OBJEXT)
! 	-rm -f javax/net/VanillaServerSocketFactory.lo
! 	-rm -f javax/net/VanillaSocketFactory.$(OBJEXT)
! 	-rm -f javax/net/VanillaSocketFactory.lo
! 	-rm -f javax/net/ssl/HandshakeCompletedEvent.$(OBJEXT)
! 	-rm -f javax/net/ssl/HandshakeCompletedEvent.lo
! 	-rm -f javax/net/ssl/HandshakeCompletedListener.$(OBJEXT)
! 	-rm -f javax/net/ssl/HandshakeCompletedListener.lo
! 	-rm -f javax/net/ssl/HostnameVerifier.$(OBJEXT)
! 	-rm -f javax/net/ssl/HostnameVerifier.lo
! 	-rm -f javax/net/ssl/HttpsURLConnection.$(OBJEXT)
! 	-rm -f javax/net/ssl/HttpsURLConnection.lo
! 	-rm -f javax/net/ssl/KeyManager.$(OBJEXT)
! 	-rm -f javax/net/ssl/KeyManager.lo
! 	-rm -f javax/net/ssl/KeyManagerFactory.$(OBJEXT)
! 	-rm -f javax/net/ssl/KeyManagerFactory.lo
! 	-rm -f javax/net/ssl/KeyManagerFactorySpi.$(OBJEXT)
! 	-rm -f javax/net/ssl/KeyManagerFactorySpi.lo
! 	-rm -f javax/net/ssl/ManagerFactoryParameters.$(OBJEXT)
! 	-rm -f javax/net/ssl/ManagerFactoryParameters.lo
! 	-rm -f javax/net/ssl/SSLContext.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLContext.lo
! 	-rm -f javax/net/ssl/SSLContextSpi.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLContextSpi.lo
! 	-rm -f javax/net/ssl/SSLException.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLException.lo
! 	-rm -f javax/net/ssl/SSLHandshakeException.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLHandshakeException.lo
! 	-rm -f javax/net/ssl/SSLKeyException.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLKeyException.lo
! 	-rm -f javax/net/ssl/SSLPeerUnverifiedException.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLPeerUnverifiedException.lo
! 	-rm -f javax/net/ssl/SSLPermission.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLPermission.lo
! 	-rm -f javax/net/ssl/SSLProtocolException.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLProtocolException.lo
! 	-rm -f javax/net/ssl/SSLServerSocket.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLServerSocket.lo
! 	-rm -f javax/net/ssl/SSLServerSocketFactory.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLServerSocketFactory.lo
! 	-rm -f javax/net/ssl/SSLSession.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLSession.lo
! 	-rm -f javax/net/ssl/SSLSessionBindingEvent.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLSessionBindingEvent.lo
! 	-rm -f javax/net/ssl/SSLSessionBindingListener.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLSessionBindingListener.lo
! 	-rm -f javax/net/ssl/SSLSessionContext.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLSessionContext.lo
! 	-rm -f javax/net/ssl/SSLSocket.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLSocket.lo
! 	-rm -f javax/net/ssl/SSLSocketFactory.$(OBJEXT)
! 	-rm -f javax/net/ssl/SSLSocketFactory.lo
! 	-rm -f javax/net/ssl/TrivialHostnameVerifier.$(OBJEXT)
! 	-rm -f javax/net/ssl/TrivialHostnameVerifier.lo
! 	-rm -f javax/net/ssl/TrustManager.$(OBJEXT)
! 	-rm -f javax/net/ssl/TrustManager.lo
! 	-rm -f javax/net/ssl/TrustManagerFactory.$(OBJEXT)
! 	-rm -f javax/net/ssl/TrustManagerFactory.lo
! 	-rm -f javax/net/ssl/TrustManagerFactorySpi.$(OBJEXT)
! 	-rm -f javax/net/ssl/TrustManagerFactorySpi.lo
! 	-rm -f javax/net/ssl/X509KeyManager.$(OBJEXT)
! 	-rm -f javax/net/ssl/X509KeyManager.lo
! 	-rm -f javax/net/ssl/X509TrustManager.$(OBJEXT)
! 	-rm -f javax/net/ssl/X509TrustManager.lo
! 	-rm -f javax/print/AttributeException.$(OBJEXT)
! 	-rm -f javax/print/AttributeException.lo
! 	-rm -f javax/print/CancelablePrintJob.$(OBJEXT)
! 	-rm -f javax/print/CancelablePrintJob.lo
! 	-rm -f javax/print/Doc.$(OBJEXT)
! 	-rm -f javax/print/Doc.lo
! 	-rm -f javax/print/DocFlavor.$(OBJEXT)
! 	-rm -f javax/print/DocFlavor.lo
! 	-rm -f javax/print/DocPrintJob.$(OBJEXT)
! 	-rm -f javax/print/DocPrintJob.lo
! 	-rm -f javax/print/FlavorException.$(OBJEXT)
! 	-rm -f javax/print/FlavorException.lo
! 	-rm -f javax/print/MultiDoc.$(OBJEXT)
! 	-rm -f javax/print/MultiDoc.lo
! 	-rm -f javax/print/MultiDocPrintJob.$(OBJEXT)
! 	-rm -f javax/print/MultiDocPrintJob.lo
! 	-rm -f javax/print/MultiDocPrintService.$(OBJEXT)
! 	-rm -f javax/print/MultiDocPrintService.lo
! 	-rm -f javax/print/PrintException.$(OBJEXT)
! 	-rm -f javax/print/PrintException.lo
! 	-rm -f javax/print/PrintService.$(OBJEXT)
! 	-rm -f javax/print/PrintService.lo
! 	-rm -f javax/print/PrintServiceLookup.$(OBJEXT)
! 	-rm -f javax/print/PrintServiceLookup.lo
! 	-rm -f javax/print/ServiceUIFactory.$(OBJEXT)
! 	-rm -f javax/print/ServiceUIFactory.lo
! 	-rm -f javax/print/StreamPrintService.$(OBJEXT)
! 	-rm -f javax/print/StreamPrintService.lo
! 	-rm -f javax/print/URIException.$(OBJEXT)
! 	-rm -f javax/print/URIException.lo
! 	-rm -f javax/print/attribute/Attribute.$(OBJEXT)
! 	-rm -f javax/print/attribute/Attribute.lo
! 	-rm -f javax/print/attribute/AttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/AttributeSet.lo
! 	-rm -f javax/print/attribute/AttributeSetUtilities.$(OBJEXT)
! 	-rm -f javax/print/attribute/AttributeSetUtilities.lo
! 	-rm -f javax/print/attribute/DateTimeSyntax.$(OBJEXT)
! 	-rm -f javax/print/attribute/DateTimeSyntax.lo
! 	-rm -f javax/print/attribute/DocAttribute.$(OBJEXT)
! 	-rm -f javax/print/attribute/DocAttribute.lo
! 	-rm -f javax/print/attribute/DocAttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/DocAttributeSet.lo
! 	-rm -f javax/print/attribute/EnumSyntax.$(OBJEXT)
! 	-rm -f javax/print/attribute/EnumSyntax.lo
! 	-rm -f javax/print/attribute/HashAttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/HashAttributeSet.lo
! 	-rm -f javax/print/attribute/HashDocAttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/HashDocAttributeSet.lo
! 	-rm -f javax/print/attribute/HashPrintJobAttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/HashPrintJobAttributeSet.lo
! 	-rm -f javax/print/attribute/HashPrintRequestAttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/HashPrintRequestAttributeSet.lo
! 	-rm -f javax/print/attribute/HashPrintServiceAttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/HashPrintServiceAttributeSet.lo
! 	-rm -f javax/print/attribute/IntegerSyntax.$(OBJEXT)
! 	-rm -f javax/print/attribute/IntegerSyntax.lo
! 	-rm -f javax/print/attribute/PrintJobAttribute.$(OBJEXT)
! 	-rm -f javax/print/attribute/PrintJobAttribute.lo
! 	-rm -f javax/print/attribute/PrintJobAttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/PrintJobAttributeSet.lo
! 	-rm -f javax/print/attribute/PrintRequestAttribute.$(OBJEXT)
! 	-rm -f javax/print/attribute/PrintRequestAttribute.lo
! 	-rm -f javax/print/attribute/PrintRequestAttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/PrintRequestAttributeSet.lo
! 	-rm -f javax/print/attribute/PrintServiceAttribute.$(OBJEXT)
! 	-rm -f javax/print/attribute/PrintServiceAttribute.lo
! 	-rm -f javax/print/attribute/PrintServiceAttributeSet.$(OBJEXT)
! 	-rm -f javax/print/attribute/PrintServiceAttributeSet.lo
! 	-rm -f javax/print/attribute/ResolutionSyntax.$(OBJEXT)
! 	-rm -f javax/print/attribute/ResolutionSyntax.lo
! 	-rm -f javax/print/attribute/SetOfIntegerSyntax.$(OBJEXT)
! 	-rm -f javax/print/attribute/SetOfIntegerSyntax.lo
! 	-rm -f javax/print/attribute/Size2DSyntax.$(OBJEXT)
! 	-rm -f javax/print/attribute/Size2DSyntax.lo
! 	-rm -f javax/print/attribute/SupportedValuesAttribute.$(OBJEXT)
! 	-rm -f javax/print/attribute/SupportedValuesAttribute.lo
! 	-rm -f javax/print/attribute/TextSyntax.$(OBJEXT)
! 	-rm -f javax/print/attribute/TextSyntax.lo
! 	-rm -f javax/print/attribute/URISyntax.$(OBJEXT)
! 	-rm -f javax/print/attribute/URISyntax.lo
! 	-rm -f javax/print/attribute/UnmodifiableSetException.$(OBJEXT)
! 	-rm -f javax/print/attribute/UnmodifiableSetException.lo
! 	-rm -f javax/print/attribute/standard/Chromaticity.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/Chromaticity.lo
! 	-rm -f javax/print/attribute/standard/ColorSupported.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/ColorSupported.lo
! 	-rm -f javax/print/attribute/standard/Compression.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/Compression.lo
! 	-rm -f javax/print/attribute/standard/Copies.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/Copies.lo
! 	-rm -f javax/print/attribute/standard/CopiesSupported.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/CopiesSupported.lo
! 	-rm -f javax/print/attribute/standard/DateTimeAtCompleted.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/DateTimeAtCompleted.lo
! 	-rm -f javax/print/attribute/standard/DateTimeAtCreation.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/DateTimeAtCreation.lo
! 	-rm -f javax/print/attribute/standard/DateTimeAtProcessing.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/DateTimeAtProcessing.lo
! 	-rm -f javax/print/attribute/standard/Destination.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/Destination.lo
! 	-rm -f javax/print/attribute/standard/DocumentName.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/DocumentName.lo
! 	-rm -f javax/print/attribute/standard/Fidelity.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/Fidelity.lo
! 	-rm -f javax/print/attribute/standard/Finishings.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/Finishings.lo
! 	-rm -f javax/print/attribute/standard/JobHoldUntil.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobHoldUntil.lo
! 	-rm -f javax/print/attribute/standard/JobImpressions.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobImpressions.lo
! 	-rm -f javax/print/attribute/standard/JobImpressionsCompleted.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobImpressionsCompleted.lo
! 	-rm -f javax/print/attribute/standard/JobImpressionsSupported.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobImpressionsSupported.lo
! 	-rm -f javax/print/attribute/standard/JobKOctets.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobKOctets.lo
! 	-rm -f javax/print/attribute/standard/JobKOctetsProcessed.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobKOctetsProcessed.lo
! 	-rm -f javax/print/attribute/standard/JobKOctetsSupported.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobKOctetsSupported.lo
! 	-rm -f javax/print/attribute/standard/JobMediaSheets.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobMediaSheets.lo
! 	-rm -f javax/print/attribute/standard/JobMediaSheetsCompleted.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobMediaSheetsCompleted.lo
! 	-rm -f javax/print/attribute/standard/JobMediaSheetsSupported.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobMediaSheetsSupported.lo
! 	-rm -f javax/print/attribute/standard/JobMessageFromOperator.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobMessageFromOperator.lo
! 	-rm -f javax/print/attribute/standard/JobName.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobName.lo
! 	-rm -f javax/print/attribute/standard/JobOriginatingUserName.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobOriginatingUserName.lo
! 	-rm -f javax/print/attribute/standard/JobPriority.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobPriority.lo
! 	-rm -f javax/print/attribute/standard/JobPrioritySupported.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobPrioritySupported.lo
! 	-rm -f javax/print/attribute/standard/JobSheets.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobSheets.lo
! 	-rm -f javax/print/attribute/standard/JobState.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobState.lo
! 	-rm -f javax/print/attribute/standard/JobStateReason.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobStateReason.lo
! 	-rm -f javax/print/attribute/standard/JobStateReasons.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/JobStateReasons.lo
! 	-rm -f javax/print/attribute/standard/Media.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/Media.lo
! 	-rm -f javax/print/attribute/standard/MediaPrintableArea.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/MediaPrintableArea.lo
! 	-rm -f javax/print/attribute/standard/MediaSize.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/MediaSize.lo
! 	-rm -f javax/print/attribute/standard/MediaSizeName.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/MediaSizeName.lo
! 	-rm -f javax/print/attribute/standard/MultipleDocumentHandling.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/MultipleDocumentHandling.lo
! 	-rm -f javax/print/attribute/standard/NumberOfDocuments.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/NumberOfDocuments.lo
! 	-rm -f javax/print/attribute/standard/NumberOfInterveningJobs.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/NumberOfInterveningJobs.lo
! 	-rm -f javax/print/attribute/standard/NumberUp.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/NumberUp.lo
! 	-rm -f javax/print/attribute/standard/NumberUpSupported.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/NumberUpSupported.lo
! 	-rm -f javax/print/attribute/standard/OrientationRequested.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/OrientationRequested.lo
! 	-rm -f javax/print/attribute/standard/OutputDeviceAssigned.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/OutputDeviceAssigned.lo
! 	-rm -f javax/print/attribute/standard/PDLOverrideSupported.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PDLOverrideSupported.lo
! 	-rm -f javax/print/attribute/standard/PageRanges.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PageRanges.lo
! 	-rm -f javax/print/attribute/standard/PagesPerMinute.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PagesPerMinute.lo
! 	-rm -f javax/print/attribute/standard/PagesPerMinuteColor.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PagesPerMinuteColor.lo
! 	-rm -f javax/print/attribute/standard/PresentationDirection.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PresentationDirection.lo
! 	-rm -f javax/print/attribute/standard/PrintQuality.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrintQuality.lo
! 	-rm -f javax/print/attribute/standard/PrinterInfo.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterInfo.lo
! 	-rm -f javax/print/attribute/standard/PrinterIsAcceptingJobs.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterIsAcceptingJobs.lo
! 	-rm -f javax/print/attribute/standard/PrinterLocation.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterLocation.lo
! 	-rm -f javax/print/attribute/standard/PrinterMakeAndModel.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterMakeAndModel.lo
! 	-rm -f javax/print/attribute/standard/PrinterMessageFromOperator.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterMessageFromOperator.lo
! 	-rm -f javax/print/attribute/standard/PrinterMoreInfo.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterMoreInfo.lo
! 	-rm -f javax/print/attribute/standard/PrinterMoreInfoManufacturer.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterMoreInfoManufacturer.lo
! 	-rm -f javax/print/attribute/standard/PrinterName.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterName.lo
! 	-rm -f javax/print/attribute/standard/PrinterResolution.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterResolution.lo
! 	-rm -f javax/print/attribute/standard/PrinterState.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterState.lo
! 	-rm -f javax/print/attribute/standard/PrinterStateReason.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterStateReason.lo
! 	-rm -f javax/print/attribute/standard/PrinterStateReasons.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterStateReasons.lo
! 	-rm -f javax/print/attribute/standard/PrinterURI.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/PrinterURI.lo
! 	-rm -f javax/print/attribute/standard/QueuedJobCount.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/QueuedJobCount.lo
! 	-rm -f javax/print/attribute/standard/ReferenceUriSchemesSupported.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/ReferenceUriSchemesSupported.lo
! 	-rm -f javax/print/attribute/standard/RequestingUserName.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/RequestingUserName.lo
! 	-rm -f javax/print/attribute/standard/Severity.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/Severity.lo
! 	-rm -f javax/print/attribute/standard/SheetCollate.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/SheetCollate.lo
! 	-rm -f javax/print/attribute/standard/Sides.$(OBJEXT)
! 	-rm -f javax/print/attribute/standard/Sides.lo
! 	-rm -f javax/print/event/PrintEvent.$(OBJEXT)
! 	-rm -f javax/print/event/PrintEvent.lo
! 	-rm -f javax/print/event/PrintJobAdapter.$(OBJEXT)
! 	-rm -f javax/print/event/PrintJobAdapter.lo
! 	-rm -f javax/print/event/PrintJobAttributeEvent.$(OBJEXT)
! 	-rm -f javax/print/event/PrintJobAttributeEvent.lo
! 	-rm -f javax/print/event/PrintJobAttributeListener.$(OBJEXT)
! 	-rm -f javax/print/event/PrintJobAttributeListener.lo
! 	-rm -f javax/print/event/PrintJobEvent.$(OBJEXT)
! 	-rm -f javax/print/event/PrintJobEvent.lo
! 	-rm -f javax/print/event/PrintJobListener.$(OBJEXT)
! 	-rm -f javax/print/event/PrintJobListener.lo
! 	-rm -f javax/print/event/PrintServiceAttributeEvent.$(OBJEXT)
! 	-rm -f javax/print/event/PrintServiceAttributeEvent.lo
! 	-rm -f javax/print/event/PrintServiceAttributeListener.$(OBJEXT)
! 	-rm -f javax/print/event/PrintServiceAttributeListener.lo
! 	-rm -f javax/security/auth/AuthPermission.$(OBJEXT)
! 	-rm -f javax/security/auth/AuthPermission.lo
! 	-rm -f javax/security/auth/DestroyFailedException.$(OBJEXT)
! 	-rm -f javax/security/auth/DestroyFailedException.lo
! 	-rm -f javax/security/auth/Destroyable.$(OBJEXT)
! 	-rm -f javax/security/auth/Destroyable.lo
! 	-rm -f javax/security/auth/Policy.$(OBJEXT)
! 	-rm -f javax/security/auth/Policy.lo
! 	-rm -f javax/security/auth/PrivateCredentialPermission.$(OBJEXT)
! 	-rm -f javax/security/auth/PrivateCredentialPermission.lo
! 	-rm -f javax/security/auth/RefreshFailedException.$(OBJEXT)
! 	-rm -f javax/security/auth/RefreshFailedException.lo
! 	-rm -f javax/security/auth/Refreshable.$(OBJEXT)
! 	-rm -f javax/security/auth/Refreshable.lo
! 	-rm -f javax/security/auth/Subject.$(OBJEXT)
! 	-rm -f javax/security/auth/Subject.lo
! 	-rm -f javax/security/auth/SubjectDomainCombiner.$(OBJEXT)
! 	-rm -f javax/security/auth/SubjectDomainCombiner.lo
! 	-rm -f javax/security/auth/callback/Callback.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/Callback.lo
! 	-rm -f javax/security/auth/callback/CallbackHandler.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/CallbackHandler.lo
! 	-rm -f javax/security/auth/callback/ChoiceCallback.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/ChoiceCallback.lo
! 	-rm -f javax/security/auth/callback/ConfirmationCallback.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/ConfirmationCallback.lo
! 	-rm -f javax/security/auth/callback/LanguageCallback.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/LanguageCallback.lo
! 	-rm -f javax/security/auth/callback/NameCallback.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/NameCallback.lo
! 	-rm -f javax/security/auth/callback/PasswordCallback.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/PasswordCallback.lo
! 	-rm -f javax/security/auth/callback/TextInputCallback.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/TextInputCallback.lo
! 	-rm -f javax/security/auth/callback/TextOutputCallback.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/TextOutputCallback.lo
! 	-rm -f javax/security/auth/callback/UnsupportedCallbackException.$(OBJEXT)
! 	-rm -f javax/security/auth/callback/UnsupportedCallbackException.lo
! 	-rm -f javax/security/auth/login/AccountExpiredException.$(OBJEXT)
! 	-rm -f javax/security/auth/login/AccountExpiredException.lo
! 	-rm -f javax/security/auth/login/AppConfigurationEntry.$(OBJEXT)
! 	-rm -f javax/security/auth/login/AppConfigurationEntry.lo
! 	-rm -f javax/security/auth/login/Configuration.$(OBJEXT)
! 	-rm -f javax/security/auth/login/Configuration.lo
! 	-rm -f javax/security/auth/login/CredentialExpiredException.$(OBJEXT)
! 	-rm -f javax/security/auth/login/CredentialExpiredException.lo
! 	-rm -f javax/security/auth/login/FailedLoginException.$(OBJEXT)
! 	-rm -f javax/security/auth/login/FailedLoginException.lo
! 	-rm -f javax/security/auth/login/LoginContext.$(OBJEXT)
! 	-rm -f javax/security/auth/login/LoginContext.lo
! 	-rm -f javax/security/auth/login/LoginException.$(OBJEXT)
! 	-rm -f javax/security/auth/login/LoginException.lo
! 	-rm -f javax/security/auth/login/NullConfiguration.$(OBJEXT)
! 	-rm -f javax/security/auth/login/NullConfiguration.lo
! 	-rm -f javax/security/auth/spi/LoginModule.$(OBJEXT)
! 	-rm -f javax/security/auth/spi/LoginModule.lo
! 	-rm -f javax/security/auth/x500/X500Principal.$(OBJEXT)
! 	-rm -f javax/security/auth/x500/X500Principal.lo
! 	-rm -f javax/security/auth/x500/X500PrivateCredential.$(OBJEXT)
! 	-rm -f javax/security/auth/x500/X500PrivateCredential.lo
! 	-rm -f javax/security/cert/Certificate.$(OBJEXT)
! 	-rm -f javax/security/cert/Certificate.lo
! 	-rm -f javax/security/cert/CertificateEncodingException.$(OBJEXT)
! 	-rm -f javax/security/cert/CertificateEncodingException.lo
! 	-rm -f javax/security/cert/CertificateException.$(OBJEXT)
! 	-rm -f javax/security/cert/CertificateException.lo
! 	-rm -f javax/security/cert/CertificateExpiredException.$(OBJEXT)
! 	-rm -f javax/security/cert/CertificateExpiredException.lo
! 	-rm -f javax/security/cert/CertificateNotYetValidException.$(OBJEXT)
! 	-rm -f javax/security/cert/CertificateNotYetValidException.lo
! 	-rm -f javax/security/cert/CertificateParsingException.$(OBJEXT)
! 	-rm -f javax/security/cert/CertificateParsingException.lo
! 	-rm -f javax/security/cert/X509CertBridge.$(OBJEXT)
! 	-rm -f javax/security/cert/X509CertBridge.lo
! 	-rm -f javax/security/cert/X509Certificate.$(OBJEXT)
! 	-rm -f javax/security/cert/X509Certificate.lo
! 	-rm -f javax/security/sasl/AuthenticationException.$(OBJEXT)
! 	-rm -f javax/security/sasl/AuthenticationException.lo
! 	-rm -f javax/security/sasl/AuthorizeCallback.$(OBJEXT)
! 	-rm -f javax/security/sasl/AuthorizeCallback.lo
! 	-rm -f javax/security/sasl/RealmCallback.$(OBJEXT)
! 	-rm -f javax/security/sasl/RealmCallback.lo
! 	-rm -f javax/security/sasl/RealmChoiceCallback.$(OBJEXT)
! 	-rm -f javax/security/sasl/RealmChoiceCallback.lo
! 	-rm -f javax/security/sasl/Sasl.$(OBJEXT)
! 	-rm -f javax/security/sasl/Sasl.lo
! 	-rm -f javax/security/sasl/SaslClient.$(OBJEXT)
! 	-rm -f javax/security/sasl/SaslClient.lo
! 	-rm -f javax/security/sasl/SaslClientFactory.$(OBJEXT)
! 	-rm -f javax/security/sasl/SaslClientFactory.lo
! 	-rm -f javax/security/sasl/SaslException.$(OBJEXT)
! 	-rm -f javax/security/sasl/SaslException.lo
! 	-rm -f javax/security/sasl/SaslServer.$(OBJEXT)
! 	-rm -f javax/security/sasl/SaslServer.lo
! 	-rm -f javax/security/sasl/SaslServerFactory.$(OBJEXT)
! 	-rm -f javax/security/sasl/SaslServerFactory.lo
! 	-rm -f javax/sql/ConnectionEvent.$(OBJEXT)
! 	-rm -f javax/sql/ConnectionEvent.lo
! 	-rm -f javax/sql/ConnectionEventListener.$(OBJEXT)
! 	-rm -f javax/sql/ConnectionEventListener.lo
! 	-rm -f javax/sql/ConnectionPoolDataSource.$(OBJEXT)
! 	-rm -f javax/sql/ConnectionPoolDataSource.lo
! 	-rm -f javax/sql/DataSource.$(OBJEXT)
! 	-rm -f javax/sql/DataSource.lo
! 	-rm -f javax/sql/PooledConnection.$(OBJEXT)
! 	-rm -f javax/sql/PooledConnection.lo
! 	-rm -f javax/sql/RowSet.$(OBJEXT)
! 	-rm -f javax/sql/RowSet.lo
! 	-rm -f javax/sql/RowSetEvent.$(OBJEXT)
! 	-rm -f javax/sql/RowSetEvent.lo
! 	-rm -f javax/sql/RowSetInternal.$(OBJEXT)
! 	-rm -f javax/sql/RowSetInternal.lo
! 	-rm -f javax/sql/RowSetListener.$(OBJEXT)
! 	-rm -f javax/sql/RowSetListener.lo
! 	-rm -f javax/sql/RowSetMetaData.$(OBJEXT)
! 	-rm -f javax/sql/RowSetMetaData.lo
! 	-rm -f javax/sql/RowSetReader.$(OBJEXT)
! 	-rm -f javax/sql/RowSetReader.lo
! 	-rm -f javax/sql/RowSetWriter.$(OBJEXT)
! 	-rm -f javax/sql/RowSetWriter.lo
! 	-rm -f javax/sql/XAConnection.$(OBJEXT)
! 	-rm -f javax/sql/XAConnection.lo
! 	-rm -f javax/sql/XADataSource.$(OBJEXT)
! 	-rm -f javax/sql/XADataSource.lo
! 	-rm -f javax/swing/AbstractAction.$(OBJEXT)
! 	-rm -f javax/swing/AbstractAction.lo
! 	-rm -f javax/swing/AbstractButton.$(OBJEXT)
! 	-rm -f javax/swing/AbstractButton.lo
! 	-rm -f javax/swing/AbstractCellEditor.$(OBJEXT)
! 	-rm -f javax/swing/AbstractCellEditor.lo
! 	-rm -f javax/swing/AbstractListModel.$(OBJEXT)
! 	-rm -f javax/swing/AbstractListModel.lo
! 	-rm -f javax/swing/AbstractSpinnerModel.$(OBJEXT)
! 	-rm -f javax/swing/AbstractSpinnerModel.lo
! 	-rm -f javax/swing/Action.$(OBJEXT)
! 	-rm -f javax/swing/Action.lo
! 	-rm -f javax/swing/ActionMap.$(OBJEXT)
! 	-rm -f javax/swing/ActionMap.lo
! 	-rm -f javax/swing/BorderFactory.$(OBJEXT)
! 	-rm -f javax/swing/BorderFactory.lo
! 	-rm -f javax/swing/BoundedRangeModel.$(OBJEXT)
! 	-rm -f javax/swing/BoundedRangeModel.lo
! 	-rm -f javax/swing/Box.$(OBJEXT)
! 	-rm -f javax/swing/Box.lo
! 	-rm -f javax/swing/BoxLayout.$(OBJEXT)
! 	-rm -f javax/swing/BoxLayout.lo
! 	-rm -f javax/swing/ButtonGroup.$(OBJEXT)
! 	-rm -f javax/swing/ButtonGroup.lo
! 	-rm -f javax/swing/ButtonModel.$(OBJEXT)
! 	-rm -f javax/swing/ButtonModel.lo
! 	-rm -f javax/swing/CellEditor.$(OBJEXT)
! 	-rm -f javax/swing/CellEditor.lo
! 	-rm -f javax/swing/CellRendererPane.$(OBJEXT)
! 	-rm -f javax/swing/CellRendererPane.lo
! 	-rm -f javax/swing/ComboBoxEditor.$(OBJEXT)
! 	-rm -f javax/swing/ComboBoxEditor.lo
! 	-rm -f javax/swing/ComboBoxModel.$(OBJEXT)
! 	-rm -f javax/swing/ComboBoxModel.lo
! 	-rm -f javax/swing/ComponentInputMap.$(OBJEXT)
! 	-rm -f javax/swing/ComponentInputMap.lo
! 	-rm -f javax/swing/DebugGraphics.$(OBJEXT)
! 	-rm -f javax/swing/DebugGraphics.lo
! 	-rm -f javax/swing/DefaultBoundedRangeModel.$(OBJEXT)
! 	-rm -f javax/swing/DefaultBoundedRangeModel.lo
! 	-rm -f javax/swing/DefaultButtonModel.$(OBJEXT)
! 	-rm -f javax/swing/DefaultButtonModel.lo
! 	-rm -f javax/swing/DefaultCellEditor.$(OBJEXT)
! 	-rm -f javax/swing/DefaultCellEditor.lo
! 	-rm -f javax/swing/DefaultComboBoxModel.$(OBJEXT)
! 	-rm -f javax/swing/DefaultComboBoxModel.lo
! 	-rm -f javax/swing/DefaultDesktopManager.$(OBJEXT)
! 	-rm -f javax/swing/DefaultDesktopManager.lo
! 	-rm -f javax/swing/DefaultFocusManager.$(OBJEXT)
! 	-rm -f javax/swing/DefaultFocusManager.lo
! 	-rm -f javax/swing/DefaultListCellRenderer.$(OBJEXT)
! 	-rm -f javax/swing/DefaultListCellRenderer.lo
! 	-rm -f javax/swing/DefaultListModel.$(OBJEXT)
! 	-rm -f javax/swing/DefaultListModel.lo
! 	-rm -f javax/swing/DefaultListSelectionModel.$(OBJEXT)
! 	-rm -f javax/swing/DefaultListSelectionModel.lo
! 	-rm -f javax/swing/DefaultSingleSelectionModel.$(OBJEXT)
! 	-rm -f javax/swing/DefaultSingleSelectionModel.lo
! 	-rm -f javax/swing/DesktopManager.$(OBJEXT)
! 	-rm -f javax/swing/DesktopManager.lo
! 	-rm -f javax/swing/FocusManager.$(OBJEXT)
! 	-rm -f javax/swing/FocusManager.lo
! 	-rm -f javax/swing/GrayFilter.$(OBJEXT)
! 	-rm -f javax/swing/GrayFilter.lo
! 	-rm -f javax/swing/Icon.$(OBJEXT)
! 	-rm -f javax/swing/Icon.lo
! 	-rm -f javax/swing/ImageIcon.$(OBJEXT)
! 	-rm -f javax/swing/ImageIcon.lo
! 	-rm -f javax/swing/InputMap.$(OBJEXT)
! 	-rm -f javax/swing/InputMap.lo
! 	-rm -f javax/swing/InputVerifier.$(OBJEXT)
! 	-rm -f javax/swing/InputVerifier.lo
! 	-rm -f javax/swing/InternalFrameFocusTraversalPolicy.$(OBJEXT)
! 	-rm -f javax/swing/InternalFrameFocusTraversalPolicy.lo
! 	-rm -f javax/swing/JApplet.$(OBJEXT)
! 	-rm -f javax/swing/JApplet.lo
! 	-rm -f javax/swing/JButton.$(OBJEXT)
! 	-rm -f javax/swing/JButton.lo
! 	-rm -f javax/swing/JCheckBox.$(OBJEXT)
! 	-rm -f javax/swing/JCheckBox.lo
! 	-rm -f javax/swing/JCheckBoxMenuItem.$(OBJEXT)
! 	-rm -f javax/swing/JCheckBoxMenuItem.lo
! 	-rm -f javax/swing/JColorChooser.$(OBJEXT)
! 	-rm -f javax/swing/JColorChooser.lo
! 	-rm -f javax/swing/JComboBox.$(OBJEXT)
! 	-rm -f javax/swing/JComboBox.lo
! 	-rm -f javax/swing/JComponent.$(OBJEXT)
! 	-rm -f javax/swing/JComponent.lo
! 	-rm -f javax/swing/JDesktopPane.$(OBJEXT)
! 	-rm -f javax/swing/JDesktopPane.lo
! 	-rm -f javax/swing/JDialog.$(OBJEXT)
! 	-rm -f javax/swing/JDialog.lo
! 	-rm -f javax/swing/JEditorPane.$(OBJEXT)
! 	-rm -f javax/swing/JEditorPane.lo
! 	-rm -f javax/swing/JFileChooser.$(OBJEXT)
! 	-rm -f javax/swing/JFileChooser.lo
! 	-rm -f javax/swing/JFormattedTextField.$(OBJEXT)
! 	-rm -f javax/swing/JFormattedTextField.lo
! 	-rm -f javax/swing/JFrame.$(OBJEXT)
! 	-rm -f javax/swing/JFrame.lo
! 	-rm -f javax/swing/JInternalFrame.$(OBJEXT)
! 	-rm -f javax/swing/JInternalFrame.lo
! 	-rm -f javax/swing/JLabel.$(OBJEXT)
! 	-rm -f javax/swing/JLabel.lo
! 	-rm -f javax/swing/JLayeredPane.$(OBJEXT)
! 	-rm -f javax/swing/JLayeredPane.lo
! 	-rm -f javax/swing/JList.$(OBJEXT)
! 	-rm -f javax/swing/JList.lo
! 	-rm -f javax/swing/JMenu.$(OBJEXT)
! 	-rm -f javax/swing/JMenu.lo
! 	-rm -f javax/swing/JMenuBar.$(OBJEXT)
! 	-rm -f javax/swing/JMenuBar.lo
! 	-rm -f javax/swing/JMenuItem.$(OBJEXT)
! 	-rm -f javax/swing/JMenuItem.lo
! 	-rm -f javax/swing/JOptionPane.$(OBJEXT)
! 	-rm -f javax/swing/JOptionPane.lo
! 	-rm -f javax/swing/JPanel.$(OBJEXT)
! 	-rm -f javax/swing/JPanel.lo
! 	-rm -f javax/swing/JPasswordField.$(OBJEXT)
! 	-rm -f javax/swing/JPasswordField.lo
! 	-rm -f javax/swing/JPopupMenu.$(OBJEXT)
! 	-rm -f javax/swing/JPopupMenu.lo
! 	-rm -f javax/swing/JProgressBar.$(OBJEXT)
! 	-rm -f javax/swing/JProgressBar.lo
! 	-rm -f javax/swing/JRadioButton.$(OBJEXT)
! 	-rm -f javax/swing/JRadioButton.lo
! 	-rm -f javax/swing/JRadioButtonMenuItem.$(OBJEXT)
! 	-rm -f javax/swing/JRadioButtonMenuItem.lo
! 	-rm -f javax/swing/JRootPane.$(OBJEXT)
! 	-rm -f javax/swing/JRootPane.lo
! 	-rm -f javax/swing/JScrollBar.$(OBJEXT)
! 	-rm -f javax/swing/JScrollBar.lo
! 	-rm -f javax/swing/JScrollPane.$(OBJEXT)
! 	-rm -f javax/swing/JScrollPane.lo
! 	-rm -f javax/swing/JSeparator.$(OBJEXT)
! 	-rm -f javax/swing/JSeparator.lo
! 	-rm -f javax/swing/JSlider.$(OBJEXT)
! 	-rm -f javax/swing/JSlider.lo
! 	-rm -f javax/swing/JSpinner.$(OBJEXT)
! 	-rm -f javax/swing/JSpinner.lo
! 	-rm -f javax/swing/JSplitPane.$(OBJEXT)
! 	-rm -f javax/swing/JSplitPane.lo
! 	-rm -f javax/swing/JTabbedPane.$(OBJEXT)
! 	-rm -f javax/swing/JTabbedPane.lo
! 	-rm -f javax/swing/JTable.$(OBJEXT)
! 	-rm -f javax/swing/JTable.lo
! 	-rm -f javax/swing/JTextArea.$(OBJEXT)
! 	-rm -f javax/swing/JTextArea.lo
! 	-rm -f javax/swing/JTextField.$(OBJEXT)
! 	-rm -f javax/swing/JTextField.lo
! 	-rm -f javax/swing/JTextPane.$(OBJEXT)
! 	-rm -f javax/swing/JTextPane.lo
! 	-rm -f javax/swing/JToggleButton.$(OBJEXT)
! 	-rm -f javax/swing/JToggleButton.lo
! 	-rm -f javax/swing/JToolBar.$(OBJEXT)
! 	-rm -f javax/swing/JToolBar.lo
! 	-rm -f javax/swing/JToolTip.$(OBJEXT)
! 	-rm -f javax/swing/JToolTip.lo
! 	-rm -f javax/swing/JTree.$(OBJEXT)
! 	-rm -f javax/swing/JTree.lo
! 	-rm -f javax/swing/JViewport.$(OBJEXT)
! 	-rm -f javax/swing/JViewport.lo
! 	-rm -f javax/swing/JWindow.$(OBJEXT)
! 	-rm -f javax/swing/JWindow.lo
! 	-rm -f javax/swing/KeyStroke.$(OBJEXT)
! 	-rm -f javax/swing/KeyStroke.lo
! 	-rm -f javax/swing/LayoutFocusTraversalPolicy.$(OBJEXT)
! 	-rm -f javax/swing/LayoutFocusTraversalPolicy.lo
! 	-rm -f javax/swing/ListCellRenderer.$(OBJEXT)
! 	-rm -f javax/swing/ListCellRenderer.lo
! 	-rm -f javax/swing/ListModel.$(OBJEXT)
! 	-rm -f javax/swing/ListModel.lo
! 	-rm -f javax/swing/ListSelectionModel.$(OBJEXT)
! 	-rm -f javax/swing/ListSelectionModel.lo
! 	-rm -f javax/swing/LookAndFeel.$(OBJEXT)
! 	-rm -f javax/swing/LookAndFeel.lo
! 	-rm -f javax/swing/MenuElement.$(OBJEXT)
! 	-rm -f javax/swing/MenuElement.lo
! 	-rm -f javax/swing/MenuSelectionManager.$(OBJEXT)
! 	-rm -f javax/swing/MenuSelectionManager.lo
! 	-rm -f javax/swing/MutableComboBoxModel.$(OBJEXT)
! 	-rm -f javax/swing/MutableComboBoxModel.lo
! 	-rm -f javax/swing/OverlayLayout.$(OBJEXT)
! 	-rm -f javax/swing/OverlayLayout.lo
! 	-rm -f javax/swing/Popup.$(OBJEXT)
! 	-rm -f javax/swing/Popup.lo
! 	-rm -f javax/swing/PopupFactory.$(OBJEXT)
! 	-rm -f javax/swing/PopupFactory.lo
! 	-rm -f javax/swing/ProgressMonitor.$(OBJEXT)
! 	-rm -f javax/swing/ProgressMonitor.lo
! 	-rm -f javax/swing/ProgressMonitorInputStream.$(OBJEXT)
! 	-rm -f javax/swing/ProgressMonitorInputStream.lo
! 	-rm -f javax/swing/Renderer.$(OBJEXT)
! 	-rm -f javax/swing/Renderer.lo
! 	-rm -f javax/swing/RepaintManager.$(OBJEXT)
! 	-rm -f javax/swing/RepaintManager.lo
! 	-rm -f javax/swing/RootPaneContainer.$(OBJEXT)
! 	-rm -f javax/swing/RootPaneContainer.lo
! 	-rm -f javax/swing/ScrollPaneConstants.$(OBJEXT)
! 	-rm -f javax/swing/ScrollPaneConstants.lo
! 	-rm -f javax/swing/ScrollPaneLayout.$(OBJEXT)
! 	-rm -f javax/swing/ScrollPaneLayout.lo
! 	-rm -f javax/swing/Scrollable.$(OBJEXT)
! 	-rm -f javax/swing/Scrollable.lo
! 	-rm -f javax/swing/SingleSelectionModel.$(OBJEXT)
! 	-rm -f javax/swing/SingleSelectionModel.lo
! 	-rm -f javax/swing/SizeRequirements.$(OBJEXT)
! 	-rm -f javax/swing/SizeRequirements.lo
! 	-rm -f javax/swing/SizeSequence.$(OBJEXT)
! 	-rm -f javax/swing/SizeSequence.lo
! 	-rm -f javax/swing/SortingFocusTraversalPolicy.$(OBJEXT)
! 	-rm -f javax/swing/SortingFocusTraversalPolicy.lo
! 	-rm -f javax/swing/SpinnerDateModel.$(OBJEXT)
! 	-rm -f javax/swing/SpinnerDateModel.lo
! 	-rm -f javax/swing/SpinnerListModel.$(OBJEXT)
! 	-rm -f javax/swing/SpinnerListModel.lo
! 	-rm -f javax/swing/SpinnerModel.$(OBJEXT)
! 	-rm -f javax/swing/SpinnerModel.lo
! 	-rm -f javax/swing/SpinnerNumberModel.$(OBJEXT)
! 	-rm -f javax/swing/SpinnerNumberModel.lo
! 	-rm -f javax/swing/Spring.$(OBJEXT)
! 	-rm -f javax/swing/Spring.lo
! 	-rm -f javax/swing/SpringLayout.$(OBJEXT)
! 	-rm -f javax/swing/SpringLayout.lo
! 	-rm -f javax/swing/SwingConstants.$(OBJEXT)
! 	-rm -f javax/swing/SwingConstants.lo
! 	-rm -f javax/swing/SwingUtilities.$(OBJEXT)
! 	-rm -f javax/swing/SwingUtilities.lo
! 	-rm -f javax/swing/Timer.$(OBJEXT)
! 	-rm -f javax/swing/Timer.lo
! 	-rm -f javax/swing/ToolTipManager.$(OBJEXT)
! 	-rm -f javax/swing/ToolTipManager.lo
! 	-rm -f javax/swing/TransferHandler.$(OBJEXT)
! 	-rm -f javax/swing/TransferHandler.lo
! 	-rm -f javax/swing/UIDefaults.$(OBJEXT)
! 	-rm -f javax/swing/UIDefaults.lo
! 	-rm -f javax/swing/UIManager.$(OBJEXT)
! 	-rm -f javax/swing/UIManager.lo
! 	-rm -f javax/swing/UnsupportedLookAndFeelException.$(OBJEXT)
! 	-rm -f javax/swing/UnsupportedLookAndFeelException.lo
! 	-rm -f javax/swing/ViewportLayout.$(OBJEXT)
! 	-rm -f javax/swing/ViewportLayout.lo
! 	-rm -f javax/swing/WindowConstants.$(OBJEXT)
! 	-rm -f javax/swing/WindowConstants.lo
! 	-rm -f javax/swing/border/AbstractBorder.$(OBJEXT)
! 	-rm -f javax/swing/border/AbstractBorder.lo
! 	-rm -f javax/swing/border/BevelBorder.$(OBJEXT)
! 	-rm -f javax/swing/border/BevelBorder.lo
! 	-rm -f javax/swing/border/Border.$(OBJEXT)
! 	-rm -f javax/swing/border/Border.lo
! 	-rm -f javax/swing/border/CompoundBorder.$(OBJEXT)
! 	-rm -f javax/swing/border/CompoundBorder.lo
! 	-rm -f javax/swing/border/EmptyBorder.$(OBJEXT)
! 	-rm -f javax/swing/border/EmptyBorder.lo
! 	-rm -f javax/swing/border/EtchedBorder.$(OBJEXT)
! 	-rm -f javax/swing/border/EtchedBorder.lo
! 	-rm -f javax/swing/border/LineBorder.$(OBJEXT)
! 	-rm -f javax/swing/border/LineBorder.lo
! 	-rm -f javax/swing/border/MatteBorder.$(OBJEXT)
! 	-rm -f javax/swing/border/MatteBorder.lo
! 	-rm -f javax/swing/border/SoftBevelBorder.$(OBJEXT)
! 	-rm -f javax/swing/border/SoftBevelBorder.lo
! 	-rm -f javax/swing/border/TitledBorder.$(OBJEXT)
! 	-rm -f javax/swing/border/TitledBorder.lo
! 	-rm -f javax/swing/colorchooser/AbstractColorChooserPanel.$(OBJEXT)
! 	-rm -f javax/swing/colorchooser/AbstractColorChooserPanel.lo
! 	-rm -f javax/swing/colorchooser/ColorChooserComponentFactory.$(OBJEXT)
! 	-rm -f javax/swing/colorchooser/ColorChooserComponentFactory.lo
! 	-rm -f javax/swing/colorchooser/ColorSelectionModel.$(OBJEXT)
! 	-rm -f javax/swing/colorchooser/ColorSelectionModel.lo
! 	-rm -f javax/swing/colorchooser/DefaultColorSelectionModel.$(OBJEXT)
! 	-rm -f javax/swing/colorchooser/DefaultColorSelectionModel.lo
! 	-rm -f javax/swing/colorchooser/DefaultHSBChooserPanel.$(OBJEXT)
! 	-rm -f javax/swing/colorchooser/DefaultHSBChooserPanel.lo
! 	-rm -f javax/swing/colorchooser/DefaultPreviewPanel.$(OBJEXT)
! 	-rm -f javax/swing/colorchooser/DefaultPreviewPanel.lo
! 	-rm -f javax/swing/colorchooser/DefaultRGBChooserPanel.$(OBJEXT)
! 	-rm -f javax/swing/colorchooser/DefaultRGBChooserPanel.lo
! 	-rm -f javax/swing/colorchooser/DefaultSwatchChooserPanel.$(OBJEXT)
! 	-rm -f javax/swing/colorchooser/DefaultSwatchChooserPanel.lo
! 	-rm -f javax/swing/event/AncestorEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/AncestorEvent.lo
! 	-rm -f javax/swing/event/AncestorListener.$(OBJEXT)
! 	-rm -f javax/swing/event/AncestorListener.lo
! 	-rm -f javax/swing/event/CaretEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/CaretEvent.lo
! 	-rm -f javax/swing/event/CaretListener.$(OBJEXT)
! 	-rm -f javax/swing/event/CaretListener.lo
! 	-rm -f javax/swing/event/CellEditorListener.$(OBJEXT)
! 	-rm -f javax/swing/event/CellEditorListener.lo
! 	-rm -f javax/swing/event/ChangeEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/ChangeEvent.lo
! 	-rm -f javax/swing/event/ChangeListener.$(OBJEXT)
! 	-rm -f javax/swing/event/ChangeListener.lo
! 	-rm -f javax/swing/event/DocumentEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/DocumentEvent.lo
! 	-rm -f javax/swing/event/DocumentListener.$(OBJEXT)
! 	-rm -f javax/swing/event/DocumentListener.lo
! 	-rm -f javax/swing/event/EventListenerList.$(OBJEXT)
! 	-rm -f javax/swing/event/EventListenerList.lo
! 	-rm -f javax/swing/event/HyperlinkEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/HyperlinkEvent.lo
! 	-rm -f javax/swing/event/HyperlinkListener.$(OBJEXT)
! 	-rm -f javax/swing/event/HyperlinkListener.lo
! 	-rm -f javax/swing/event/InternalFrameAdapter.$(OBJEXT)
! 	-rm -f javax/swing/event/InternalFrameAdapter.lo
! 	-rm -f javax/swing/event/InternalFrameEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/InternalFrameEvent.lo
! 	-rm -f javax/swing/event/InternalFrameListener.$(OBJEXT)
! 	-rm -f javax/swing/event/InternalFrameListener.lo
! 	-rm -f javax/swing/event/ListDataEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/ListDataEvent.lo
! 	-rm -f javax/swing/event/ListDataListener.$(OBJEXT)
! 	-rm -f javax/swing/event/ListDataListener.lo
! 	-rm -f javax/swing/event/ListSelectionEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/ListSelectionEvent.lo
! 	-rm -f javax/swing/event/ListSelectionListener.$(OBJEXT)
! 	-rm -f javax/swing/event/ListSelectionListener.lo
! 	-rm -f javax/swing/event/MenuDragMouseEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/MenuDragMouseEvent.lo
! 	-rm -f javax/swing/event/MenuDragMouseListener.$(OBJEXT)
! 	-rm -f javax/swing/event/MenuDragMouseListener.lo
! 	-rm -f javax/swing/event/MenuEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/MenuEvent.lo
! 	-rm -f javax/swing/event/MenuKeyEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/MenuKeyEvent.lo
! 	-rm -f javax/swing/event/MenuKeyListener.$(OBJEXT)
! 	-rm -f javax/swing/event/MenuKeyListener.lo
! 	-rm -f javax/swing/event/MenuListener.$(OBJEXT)
! 	-rm -f javax/swing/event/MenuListener.lo
! 	-rm -f javax/swing/event/MouseInputAdapter.$(OBJEXT)
! 	-rm -f javax/swing/event/MouseInputAdapter.lo
! 	-rm -f javax/swing/event/MouseInputListener.$(OBJEXT)
! 	-rm -f javax/swing/event/MouseInputListener.lo
! 	-rm -f javax/swing/event/PopupMenuEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/PopupMenuEvent.lo
! 	-rm -f javax/swing/event/PopupMenuListener.$(OBJEXT)
! 	-rm -f javax/swing/event/PopupMenuListener.lo
! 	-rm -f javax/swing/event/SwingPropertyChangeSupport.$(OBJEXT)
! 	-rm -f javax/swing/event/SwingPropertyChangeSupport.lo
! 	-rm -f javax/swing/event/TableColumnModelEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/TableColumnModelEvent.lo
! 	-rm -f javax/swing/event/TableColumnModelListener.$(OBJEXT)
! 	-rm -f javax/swing/event/TableColumnModelListener.lo
! 	-rm -f javax/swing/event/TableModelEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/TableModelEvent.lo
! 	-rm -f javax/swing/event/TableModelListener.$(OBJEXT)
! 	-rm -f javax/swing/event/TableModelListener.lo
! 	-rm -f javax/swing/event/TreeExpansionEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/TreeExpansionEvent.lo
! 	-rm -f javax/swing/event/TreeExpansionListener.$(OBJEXT)
! 	-rm -f javax/swing/event/TreeExpansionListener.lo
! 	-rm -f javax/swing/event/TreeModelEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/TreeModelEvent.lo
! 	-rm -f javax/swing/event/TreeModelListener.$(OBJEXT)
! 	-rm -f javax/swing/event/TreeModelListener.lo
! 	-rm -f javax/swing/event/TreeSelectionEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/TreeSelectionEvent.lo
! 	-rm -f javax/swing/event/TreeSelectionListener.$(OBJEXT)
! 	-rm -f javax/swing/event/TreeSelectionListener.lo
! 	-rm -f javax/swing/event/TreeWillExpandListener.$(OBJEXT)
! 	-rm -f javax/swing/event/TreeWillExpandListener.lo
! 	-rm -f javax/swing/event/UndoableEditEvent.$(OBJEXT)
! 	-rm -f javax/swing/event/UndoableEditEvent.lo
! 	-rm -f javax/swing/event/UndoableEditListener.$(OBJEXT)
! 	-rm -f javax/swing/event/UndoableEditListener.lo
! 	-rm -f javax/swing/filechooser/FileFilter.$(OBJEXT)
! 	-rm -f javax/swing/filechooser/FileFilter.lo
! 	-rm -f javax/swing/filechooser/FileSystemView.$(OBJEXT)
! 	-rm -f javax/swing/filechooser/FileSystemView.lo
! 	-rm -f javax/swing/filechooser/FileView.$(OBJEXT)
! 	-rm -f javax/swing/filechooser/FileView.lo
! 	-rm -f javax/swing/plaf/ActionMapUIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ActionMapUIResource.lo
! 	-rm -f javax/swing/plaf/BorderUIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/BorderUIResource.lo
! 	-rm -f javax/swing/plaf/ButtonUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ButtonUI.lo
! 	-rm -f javax/swing/plaf/ColorChooserUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ColorChooserUI.lo
! 	-rm -f javax/swing/plaf/ColorUIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ColorUIResource.lo
! 	-rm -f javax/swing/plaf/ComboBoxUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ComboBoxUI.lo
! 	-rm -f javax/swing/plaf/ComponentInputMapUIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ComponentInputMapUIResource.lo
! 	-rm -f javax/swing/plaf/ComponentUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ComponentUI.lo
! 	-rm -f javax/swing/plaf/DesktopIconUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/DesktopIconUI.lo
! 	-rm -f javax/swing/plaf/DesktopPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/DesktopPaneUI.lo
! 	-rm -f javax/swing/plaf/DimensionUIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/DimensionUIResource.lo
! 	-rm -f javax/swing/plaf/FileChooserUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/FileChooserUI.lo
! 	-rm -f javax/swing/plaf/FontUIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/FontUIResource.lo
! 	-rm -f javax/swing/plaf/IconUIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/IconUIResource.lo
! 	-rm -f javax/swing/plaf/InputMapUIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/InputMapUIResource.lo
! 	-rm -f javax/swing/plaf/InsetsUIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/InsetsUIResource.lo
! 	-rm -f javax/swing/plaf/InternalFrameUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/InternalFrameUI.lo
! 	-rm -f javax/swing/plaf/LabelUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/LabelUI.lo
! 	-rm -f javax/swing/plaf/ListUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ListUI.lo
! 	-rm -f javax/swing/plaf/MenuBarUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/MenuBarUI.lo
! 	-rm -f javax/swing/plaf/MenuItemUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/MenuItemUI.lo
! 	-rm -f javax/swing/plaf/OptionPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/OptionPaneUI.lo
! 	-rm -f javax/swing/plaf/PanelUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/PanelUI.lo
! 	-rm -f javax/swing/plaf/PopupMenuUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/PopupMenuUI.lo
! 	-rm -f javax/swing/plaf/ProgressBarUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ProgressBarUI.lo
! 	-rm -f javax/swing/plaf/RootPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/RootPaneUI.lo
! 	-rm -f javax/swing/plaf/ScrollBarUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ScrollBarUI.lo
! 	-rm -f javax/swing/plaf/ScrollPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ScrollPaneUI.lo
! 	-rm -f javax/swing/plaf/SeparatorUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/SeparatorUI.lo
! 	-rm -f javax/swing/plaf/SliderUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/SliderUI.lo
! 	-rm -f javax/swing/plaf/SpinnerUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/SpinnerUI.lo
! 	-rm -f javax/swing/plaf/SplitPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/SplitPaneUI.lo
! 	-rm -f javax/swing/plaf/TabbedPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/TabbedPaneUI.lo
! 	-rm -f javax/swing/plaf/TableHeaderUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/TableHeaderUI.lo
! 	-rm -f javax/swing/plaf/TableUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/TableUI.lo
! 	-rm -f javax/swing/plaf/TextUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/TextUI.lo
! 	-rm -f javax/swing/plaf/ToolBarUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ToolBarUI.lo
! 	-rm -f javax/swing/plaf/ToolTipUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ToolTipUI.lo
! 	-rm -f javax/swing/plaf/TreeUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/TreeUI.lo
! 	-rm -f javax/swing/plaf/UIResource.$(OBJEXT)
! 	-rm -f javax/swing/plaf/UIResource.lo
! 	-rm -f javax/swing/plaf/ViewportUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/ViewportUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicArrowButton.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicArrowButton.lo
! 	-rm -f javax/swing/plaf/basic/BasicBorders.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicBorders.lo
! 	-rm -f javax/swing/plaf/basic/BasicButtonListener.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicButtonListener.lo
! 	-rm -f javax/swing/plaf/basic/BasicButtonUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicButtonUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicCheckBoxUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicCheckBoxUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicColorChooserUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicColorChooserUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicComboBoxEditor.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicComboBoxEditor.lo
! 	-rm -f javax/swing/plaf/basic/BasicComboBoxRenderer.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicComboBoxRenderer.lo
! 	-rm -f javax/swing/plaf/basic/BasicComboBoxUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicComboBoxUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicComboPopup.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicComboPopup.lo
! 	-rm -f javax/swing/plaf/basic/BasicDesktopIconUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicDesktopIconUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicDesktopPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicDesktopPaneUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicEditorPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicEditorPaneUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicFormattedTextFieldUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicFormattedTextFieldUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicGraphicsUtils.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicGraphicsUtils.lo
! 	-rm -f javax/swing/plaf/basic/BasicIconFactory.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicIconFactory.lo
! 	-rm -f javax/swing/plaf/basic/BasicInternalFrameTitlePane.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicInternalFrameTitlePane.lo
! 	-rm -f javax/swing/plaf/basic/BasicInternalFrameUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicInternalFrameUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicLabelUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicLabelUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicListUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicListUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicLookAndFeel.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicLookAndFeel.lo
! 	-rm -f javax/swing/plaf/basic/BasicMenuBarUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicMenuBarUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicMenuItemUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicMenuItemUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicMenuUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicMenuUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicOptionPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicOptionPaneUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicPanelUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicPanelUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicPasswordFieldUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicPasswordFieldUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicPopupMenuUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicPopupMenuUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicProgressBarUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicProgressBarUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicRadioButtonUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicRadioButtonUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicRootPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicRootPaneUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicScrollBarUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicScrollBarUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicScrollPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicScrollPaneUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicSeparatorUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicSeparatorUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicSliderUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicSliderUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicSpinnerUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicSpinnerUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicSplitPaneDivider.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicSplitPaneDivider.lo
! 	-rm -f javax/swing/plaf/basic/BasicSplitPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicSplitPaneUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicTabbedPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicTabbedPaneUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicTableHeaderUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicTableHeaderUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicTableUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicTableUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicTextAreaUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicTextAreaUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicTextFieldUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicTextFieldUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicTextPaneUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicTextPaneUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicTextUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicTextUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicToggleButtonUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicToggleButtonUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicToolBarSeparatorUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicToolBarSeparatorUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicToolBarUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicToolBarUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicToolTipUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicToolTipUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicTreeUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicTreeUI.lo
! 	-rm -f javax/swing/plaf/basic/BasicViewportUI.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/BasicViewportUI.lo
! 	-rm -f javax/swing/plaf/basic/ComboPopup.$(OBJEXT)
! 	-rm -f javax/swing/plaf/basic/ComboPopup.lo
! 	-rm -f javax/swing/plaf/metal/DefaultMetalTheme.$(OBJEXT)
! 	-rm -f javax/swing/plaf/metal/DefaultMetalTheme.lo
! 	-rm -f javax/swing/plaf/metal/MetalLookAndFeel.$(OBJEXT)
! 	-rm -f javax/swing/plaf/metal/MetalLookAndFeel.lo
! 	-rm -f javax/swing/plaf/metal/MetalTheme.$(OBJEXT)
! 	-rm -f javax/swing/plaf/metal/MetalTheme.lo
! 	-rm -f javax/swing/table/AbstractTableModel.$(OBJEXT)
! 	-rm -f javax/swing/table/AbstractTableModel.lo
! 	-rm -f javax/swing/table/DefaultTableCellRenderer.$(OBJEXT)
! 	-rm -f javax/swing/table/DefaultTableCellRenderer.lo
! 	-rm -f javax/swing/table/DefaultTableColumnModel.$(OBJEXT)
! 	-rm -f javax/swing/table/DefaultTableColumnModel.lo
! 	-rm -f javax/swing/table/DefaultTableModel.$(OBJEXT)
! 	-rm -f javax/swing/table/DefaultTableModel.lo
! 	-rm -f javax/swing/table/JTableHeader.$(OBJEXT)
! 	-rm -f javax/swing/table/JTableHeader.lo
! 	-rm -f javax/swing/table/TableCellEditor.$(OBJEXT)
! 	-rm -f javax/swing/table/TableCellEditor.lo
! 	-rm -f javax/swing/table/TableCellRenderer.$(OBJEXT)
! 	-rm -f javax/swing/table/TableCellRenderer.lo
! 	-rm -f javax/swing/table/TableColumn.$(OBJEXT)
! 	-rm -f javax/swing/table/TableColumn.lo
! 	-rm -f javax/swing/table/TableColumnModel.$(OBJEXT)
! 	-rm -f javax/swing/table/TableColumnModel.lo
! 	-rm -f javax/swing/table/TableModel.$(OBJEXT)
! 	-rm -f javax/swing/table/TableModel.lo
! 	-rm -f javax/swing/text/AbstractDocument.$(OBJEXT)
! 	-rm -f javax/swing/text/AbstractDocument.lo
! 	-rm -f javax/swing/text/AttributeSet.$(OBJEXT)
! 	-rm -f javax/swing/text/AttributeSet.lo
! 	-rm -f javax/swing/text/BadLocationException.$(OBJEXT)
! 	-rm -f javax/swing/text/BadLocationException.lo
! 	-rm -f javax/swing/text/Caret.$(OBJEXT)
! 	-rm -f javax/swing/text/Caret.lo
! 	-rm -f javax/swing/text/ComponentView.$(OBJEXT)
! 	-rm -f javax/swing/text/ComponentView.lo
! 	-rm -f javax/swing/text/DefaultCaret.$(OBJEXT)
! 	-rm -f javax/swing/text/DefaultCaret.lo
! 	-rm -f javax/swing/text/DefaultEditorKit.$(OBJEXT)
! 	-rm -f javax/swing/text/DefaultEditorKit.lo
! 	-rm -f javax/swing/text/DefaultHighlighter.$(OBJEXT)
! 	-rm -f javax/swing/text/DefaultHighlighter.lo
! 	-rm -f javax/swing/text/DefaultStyledDocument.$(OBJEXT)
! 	-rm -f javax/swing/text/DefaultStyledDocument.lo
! 	-rm -f javax/swing/text/Document.$(OBJEXT)
! 	-rm -f javax/swing/text/Document.lo
! 	-rm -f javax/swing/text/DocumentFilter.$(OBJEXT)
! 	-rm -f javax/swing/text/DocumentFilter.lo
! 	-rm -f javax/swing/text/EditorKit.$(OBJEXT)
! 	-rm -f javax/swing/text/EditorKit.lo
! 	-rm -f javax/swing/text/Element.$(OBJEXT)
! 	-rm -f javax/swing/text/Element.lo
! 	-rm -f javax/swing/text/FieldView.$(OBJEXT)
! 	-rm -f javax/swing/text/FieldView.lo
! 	-rm -f javax/swing/text/GapContent.$(OBJEXT)
! 	-rm -f javax/swing/text/GapContent.lo
! 	-rm -f javax/swing/text/Highlighter.$(OBJEXT)
! 	-rm -f javax/swing/text/Highlighter.lo
! 	-rm -f javax/swing/text/JTextComponent.$(OBJEXT)
! 	-rm -f javax/swing/text/JTextComponent.lo
! 	-rm -f javax/swing/text/Keymap.$(OBJEXT)
! 	-rm -f javax/swing/text/Keymap.lo
! 	-rm -f javax/swing/text/LayeredHighlighter.$(OBJEXT)
! 	-rm -f javax/swing/text/LayeredHighlighter.lo
! 	-rm -f javax/swing/text/MutableAttributeSet.$(OBJEXT)
! 	-rm -f javax/swing/text/MutableAttributeSet.lo
! 	-rm -f javax/swing/text/NavigationFilter.$(OBJEXT)
! 	-rm -f javax/swing/text/NavigationFilter.lo
! 	-rm -f javax/swing/text/PasswordView.$(OBJEXT)
! 	-rm -f javax/swing/text/PasswordView.lo
! 	-rm -f javax/swing/text/PlainDocument.$(OBJEXT)
! 	-rm -f javax/swing/text/PlainDocument.lo
! 	-rm -f javax/swing/text/PlainView.$(OBJEXT)
! 	-rm -f javax/swing/text/PlainView.lo
! 	-rm -f javax/swing/text/Position.$(OBJEXT)
! 	-rm -f javax/swing/text/Position.lo
! 	-rm -f javax/swing/text/Segment.$(OBJEXT)
! 	-rm -f javax/swing/text/Segment.lo
! 	-rm -f javax/swing/text/SimpleAttributeSet.$(OBJEXT)
! 	-rm -f javax/swing/text/SimpleAttributeSet.lo
! 	-rm -f javax/swing/text/StringContent.$(OBJEXT)
! 	-rm -f javax/swing/text/StringContent.lo
! 	-rm -f javax/swing/text/Style.$(OBJEXT)
! 	-rm -f javax/swing/text/Style.lo
! 	-rm -f javax/swing/text/StyleConstants.$(OBJEXT)
! 	-rm -f javax/swing/text/StyleConstants.lo
! 	-rm -f javax/swing/text/StyleContext.$(OBJEXT)
! 	-rm -f javax/swing/text/StyleContext.lo
! 	-rm -f javax/swing/text/StyledDocument.$(OBJEXT)
! 	-rm -f javax/swing/text/StyledDocument.lo
! 	-rm -f javax/swing/text/StyledEditorKit.$(OBJEXT)
! 	-rm -f javax/swing/text/StyledEditorKit.lo
! 	-rm -f javax/swing/text/TabExpander.$(OBJEXT)
! 	-rm -f javax/swing/text/TabExpander.lo
! 	-rm -f javax/swing/text/TabSet.$(OBJEXT)
! 	-rm -f javax/swing/text/TabSet.lo
! 	-rm -f javax/swing/text/TabStop.$(OBJEXT)
! 	-rm -f javax/swing/text/TabStop.lo
! 	-rm -f javax/swing/text/TabableView.$(OBJEXT)
! 	-rm -f javax/swing/text/TabableView.lo
! 	-rm -f javax/swing/text/TextAction.$(OBJEXT)
! 	-rm -f javax/swing/text/TextAction.lo
! 	-rm -f javax/swing/text/Utilities.$(OBJEXT)
! 	-rm -f javax/swing/text/Utilities.lo
! 	-rm -f javax/swing/text/View.$(OBJEXT)
! 	-rm -f javax/swing/text/View.lo
! 	-rm -f javax/swing/text/ViewFactory.$(OBJEXT)
! 	-rm -f javax/swing/text/ViewFactory.lo
! 	-rm -f javax/swing/text/html/HTML.$(OBJEXT)
! 	-rm -f javax/swing/text/html/HTML.lo
! 	-rm -f javax/swing/text/html/parser/ParserDelegator.$(OBJEXT)
! 	-rm -f javax/swing/text/html/parser/ParserDelegator.lo
! 	-rm -f javax/swing/tree/AbstractLayoutCache.$(OBJEXT)
! 	-rm -f javax/swing/tree/AbstractLayoutCache.lo
! 	-rm -f javax/swing/tree/DefaultMutableTreeNode.$(OBJEXT)
! 	-rm -f javax/swing/tree/DefaultMutableTreeNode.lo
! 	-rm -f javax/swing/tree/DefaultTreeCellEditor.$(OBJEXT)
! 	-rm -f javax/swing/tree/DefaultTreeCellEditor.lo
! 	-rm -f javax/swing/tree/DefaultTreeCellRenderer.$(OBJEXT)
! 	-rm -f javax/swing/tree/DefaultTreeCellRenderer.lo
! 	-rm -f javax/swing/tree/DefaultTreeModel.$(OBJEXT)
! 	-rm -f javax/swing/tree/DefaultTreeModel.lo
! 	-rm -f javax/swing/tree/DefaultTreeSelectionModel.$(OBJEXT)
! 	-rm -f javax/swing/tree/DefaultTreeSelectionModel.lo
! 	-rm -f javax/swing/tree/ExpandVetoException.$(OBJEXT)
! 	-rm -f javax/swing/tree/ExpandVetoException.lo
! 	-rm -f javax/swing/tree/FixedHeightLayoutCache.$(OBJEXT)
! 	-rm -f javax/swing/tree/FixedHeightLayoutCache.lo
! 	-rm -f javax/swing/tree/MutableTreeNode.$(OBJEXT)
! 	-rm -f javax/swing/tree/MutableTreeNode.lo
! 	-rm -f javax/swing/tree/RowMapper.$(OBJEXT)
! 	-rm -f javax/swing/tree/RowMapper.lo
! 	-rm -f javax/swing/tree/TreeCellEditor.$(OBJEXT)
! 	-rm -f javax/swing/tree/TreeCellEditor.lo
! 	-rm -f javax/swing/tree/TreeCellRenderer.$(OBJEXT)
! 	-rm -f javax/swing/tree/TreeCellRenderer.lo
! 	-rm -f javax/swing/tree/TreeModel.$(OBJEXT)
! 	-rm -f javax/swing/tree/TreeModel.lo
! 	-rm -f javax/swing/tree/TreeNode.$(OBJEXT)
! 	-rm -f javax/swing/tree/TreeNode.lo
! 	-rm -f javax/swing/tree/TreePath.$(OBJEXT)
! 	-rm -f javax/swing/tree/TreePath.lo
! 	-rm -f javax/swing/tree/TreeSelectionModel.$(OBJEXT)
! 	-rm -f javax/swing/tree/TreeSelectionModel.lo
! 	-rm -f javax/swing/tree/VariableHeightLayoutCache.$(OBJEXT)
! 	-rm -f javax/swing/tree/VariableHeightLayoutCache.lo
! 	-rm -f javax/swing/undo/AbstractUndoableEdit.$(OBJEXT)
! 	-rm -f javax/swing/undo/AbstractUndoableEdit.lo
! 	-rm -f javax/swing/undo/CannotRedoException.$(OBJEXT)
! 	-rm -f javax/swing/undo/CannotRedoException.lo
! 	-rm -f javax/swing/undo/CannotUndoException.$(OBJEXT)
! 	-rm -f javax/swing/undo/CannotUndoException.lo
! 	-rm -f javax/swing/undo/CompoundEdit.$(OBJEXT)
! 	-rm -f javax/swing/undo/CompoundEdit.lo
! 	-rm -f javax/swing/undo/StateEdit.$(OBJEXT)
! 	-rm -f javax/swing/undo/StateEdit.lo
! 	-rm -f javax/swing/undo/StateEditable.$(OBJEXT)
! 	-rm -f javax/swing/undo/StateEditable.lo
! 	-rm -f javax/swing/undo/UndoManager.$(OBJEXT)
! 	-rm -f javax/swing/undo/UndoManager.lo
! 	-rm -f javax/swing/undo/UndoableEdit.$(OBJEXT)
! 	-rm -f javax/swing/undo/UndoableEdit.lo
! 	-rm -f javax/swing/undo/UndoableEditSupport.$(OBJEXT)
! 	-rm -f javax/swing/undo/UndoableEditSupport.lo
! 	-rm -f javax/transaction/HeuristicCommitException.$(OBJEXT)
! 	-rm -f javax/transaction/HeuristicCommitException.lo
! 	-rm -f javax/transaction/HeuristicMixedException.$(OBJEXT)
! 	-rm -f javax/transaction/HeuristicMixedException.lo
! 	-rm -f javax/transaction/HeuristicRollbackException.$(OBJEXT)
! 	-rm -f javax/transaction/HeuristicRollbackException.lo
! 	-rm -f javax/transaction/InvalidTransactionException.$(OBJEXT)
! 	-rm -f javax/transaction/InvalidTransactionException.lo
! 	-rm -f javax/transaction/NotSupportedException.$(OBJEXT)
! 	-rm -f javax/transaction/NotSupportedException.lo
! 	-rm -f javax/transaction/RollbackException.$(OBJEXT)
! 	-rm -f javax/transaction/RollbackException.lo
! 	-rm -f javax/transaction/Status.$(OBJEXT)
! 	-rm -f javax/transaction/Status.lo
! 	-rm -f javax/transaction/Synchronization.$(OBJEXT)
! 	-rm -f javax/transaction/Synchronization.lo
! 	-rm -f javax/transaction/SystemException.$(OBJEXT)
! 	-rm -f javax/transaction/SystemException.lo
! 	-rm -f javax/transaction/Transaction.$(OBJEXT)
! 	-rm -f javax/transaction/Transaction.lo
! 	-rm -f javax/transaction/TransactionManager.$(OBJEXT)
! 	-rm -f javax/transaction/TransactionManager.lo
! 	-rm -f javax/transaction/TransactionRequiredException.$(OBJEXT)
! 	-rm -f javax/transaction/TransactionRequiredException.lo
! 	-rm -f javax/transaction/TransactionRolledbackException.$(OBJEXT)
! 	-rm -f javax/transaction/TransactionRolledbackException.lo
! 	-rm -f javax/transaction/UserTransaction.$(OBJEXT)
! 	-rm -f javax/transaction/UserTransaction.lo
! 	-rm -f javax/transaction/xa/XAException.$(OBJEXT)
! 	-rm -f javax/transaction/xa/XAException.lo
! 	-rm -f javax/transaction/xa/XAResource.$(OBJEXT)
! 	-rm -f javax/transaction/xa/XAResource.lo
! 	-rm -f javax/transaction/xa/Xid.$(OBJEXT)
! 	-rm -f javax/transaction/xa/Xid.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 org/ietf/jgss/ChannelBinding.$(OBJEXT)
! 	-rm -f org/ietf/jgss/ChannelBinding.lo
! 	-rm -f org/ietf/jgss/GSSContext.$(OBJEXT)
! 	-rm -f org/ietf/jgss/GSSContext.lo
! 	-rm -f org/ietf/jgss/GSSCredential.$(OBJEXT)
! 	-rm -f org/ietf/jgss/GSSCredential.lo
! 	-rm -f org/ietf/jgss/GSSException.$(OBJEXT)
! 	-rm -f org/ietf/jgss/GSSException.lo
! 	-rm -f org/ietf/jgss/GSSManager.$(OBJEXT)
! 	-rm -f org/ietf/jgss/GSSManager.lo
! 	-rm -f org/ietf/jgss/GSSName.$(OBJEXT)
! 	-rm -f org/ietf/jgss/GSSName.lo
! 	-rm -f org/ietf/jgss/MessageProp.$(OBJEXT)
! 	-rm -f org/ietf/jgss/MessageProp.lo
! 	-rm -f org/ietf/jgss/Oid.$(OBJEXT)
! 	-rm -f org/ietf/jgss/Oid.lo
! 	-rm -f sysdep/dwarf2-backtrace.$(OBJEXT)
! 	-rm -f sysdep/dwarf2-backtrace.lo
! 
! distclean-compile:
! 	-rm -f *.tab.c
! 
! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boehm.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/darwin.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defineclass.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exception.Plo@am__quote@
! @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/awt/$(DEPDIR)/LightweightRedirector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/j2d/$(DEPDIR)/AbstractGraphicsState.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/j2d/$(DEPDIR)/DirectRasterGraphics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/j2d/$(DEPDIR)/Graphics2DImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/j2d/$(DEPDIR)/IntegerGraphicsState.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/j2d/$(DEPDIR)/MappedRaster.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XCanvasPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XEventLoop.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XEventQueue.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XFontMetrics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XFontPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XFramePeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XGraphics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XGraphicsConfiguration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XOffScreenImage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XPanelPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/awt/xlib/$(DEPDIR)/XToolkit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/classpath/$(DEPDIR)/Configuration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/classpath/$(DEPDIR)/ServiceFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/classpath/$(DEPDIR)/ServiceProviderLoadingAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/$(DEPDIR)/Core.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/$(DEPDIR)/RawData.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/$(DEPDIR)/RawDataManaged.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)/BytesToUnicode.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Convert.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/IOConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Input_8859_1.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Input_ASCII.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Input_EUCJIS.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Input_JavaSrc.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Input_SJIS.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Input_UTF8.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Input_UnicodeBig.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Input_UnicodeLittle.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Input_iconv.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@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Output_8859_1.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Output_ASCII.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Output_EUCJIS.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Output_JavaSrc.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Output_SJIS.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Output_UTF8.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Output_UnicodeLittleUnmarked.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Output_iconv.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/UnicodeToBytes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/Unicode_to_JIS.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/gen-from-JIS.Po@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/make-trie.Po@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/natIconv.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/natInput_EUCJIS.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/natInput_SJIS.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/natOutput_EUCJIS.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/convert/$(DEPDIR)/natOutput_SJIS.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/io/$(DEPDIR)/DefaultMimeTypes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/io/$(DEPDIR)/MimeTypes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/io/$(DEPDIR)/SimpleSHSStream.Plo@am__quote@
! @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)/BootClassLoader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/ExtensionClassLoader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/FileDeleter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/FinalizerThread.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/HelperClassLoader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/JNIWeakRef.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/MethodRef.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/NameFinder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/PersistentByteMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/SharedLibHelper.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/SharedLibLoader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/StackTrace.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/StringBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/SystemClassLoader.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@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/util/$(DEPDIR)/Debug.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/util/$(DEPDIR)/natDebug.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/Clip.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/Colormap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/Display.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/Drawable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/Font.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/GC.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/Pixmap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/Screen.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/Visual.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/WMSizeHints.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/Window.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/WindowAttributes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XAnyEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XButtonEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XColor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XConfigureEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XConnectException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XExposeEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XID.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XImage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/XUnmapEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natClip.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natColormap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDisplay.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDrawable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natFont.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natGC.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natPixmap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natScreen.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natVisual.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWMSizeHints.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindow.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindowAttributes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXAnyEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXButtonEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXColor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXConfigureEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXExposeEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXImage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXUnmapEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/$(DEPDIR)/BitMaskExtent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/$(DEPDIR)/BitwiseXORComposite.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/$(DEPDIR)/Buffers.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/$(DEPDIR)/ClasspathToolkit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/$(DEPDIR)/ComponentDataBlitOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/$(DEPDIR)/EmbeddedWindow.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/$(DEPDIR)/EmbeddedWindowSupport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/$(DEPDIR)/EventModifier.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/CieXyzConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/ClutProfileConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/ColorLookUpTable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/ColorSpaceConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/GrayProfileConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/GrayScaleConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/LinearRGBConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/ProfileHeader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/PyccConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/RgbProfileConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/SrgbConverter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/TagEntry.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/color/$(DEPDIR)/ToneReproductionCurve.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/image/$(DEPDIR)/ImageDecoder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/image/$(DEPDIR)/XBMDecoder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/peer/$(DEPDIR)/ClasspathFontPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/peer/$(DEPDIR)/ClasspathTextLayoutPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/peer/$(DEPDIR)/EmbeddedWindowPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/awt/peer/$(DEPDIR)/GLightweightPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/io/$(DEPDIR)/ASN1ParsingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/io/$(DEPDIR)/Base64InputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/io/$(DEPDIR)/ClassLoaderObjectInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/io/$(DEPDIR)/NullOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/io/$(DEPDIR)/ObjectIdentityWrapper.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/$(DEPDIR)/ArrayHelper.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/$(DEPDIR)/ClassHelper.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/$(DEPDIR)/MainThread.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/$(DEPDIR)/natMainThread.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/lang/reflect/$(DEPDIR)/TypeSignature.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/Calendar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/Calendar_de.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/Calendar_en.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/Calendar_nl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_af_ZA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_AE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_BH.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_DZ.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_EG.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_IN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_IQ.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_JO.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_KW.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_LB.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_LY.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_MA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_OM.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_QA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_SD.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_SY.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_TN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ar_YE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_be_BY.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_bn_IN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_br_FR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_bs_BA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ca_ES.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_cs_CZ.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_cy_GB.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_da_DK.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_de.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_de_AT.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_de_BE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_de_CH.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_de_DE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_de_LU.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_el_GR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_AU.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_BW.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_CA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_DK.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_GB.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_HK.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_IE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_IN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_NZ.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_PH.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_SG.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_US.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_ZA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_en_ZW.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_AR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_BO.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_CL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_CO.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_CR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_DO.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_EC.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_ES.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_GT.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_HN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_MX.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_NI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_PA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_PE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_PR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_PY.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_SV.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_US.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_UY.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_es_VE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_et_EE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_eu_ES.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_fa_IR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_fi_FI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_fo_FO.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_fr_BE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_fr_CA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_fr_CH.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_fr_FR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_fr_LU.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ga_IE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_gd_GB.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_gl_ES.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_gv_GB.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_he_IL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_hi_IN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_hr_HR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_hu_HU.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_id_ID.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_it_CH.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_it_IT.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_iw_IL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ja_JP.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ka_GE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_kl_GL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ko_KR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_kw_GB.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_lt_LT.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_lv_LV.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_mi_NZ.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_mk_MK.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_mr_IN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_mt_MT.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_nl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_nl_BE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_nl_NL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_nn_NO.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_no_NO.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_oc_FR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_pl_PL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_pt_BR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_pt_PT.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ro_RO.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ru_RU.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ru_UA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_se_NO.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_sk_SK.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_sl_SI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_sq_AL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_sr_YU.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_sv_FI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_sv_SE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ta_IN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_te_IN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_tg_TJ.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_tl_PH.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_tr_TR.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_uk_UA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_ur_PK.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_uz_UZ.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_vi_VN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_yi_US.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_zh_CN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_zh_HK.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_zh_SG.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_zh_TW.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/math/$(DEPDIR)/MPN.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/BASE64.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/CRLFInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/CRLFOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/DefaultContentHandlerFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/EmptyX509TrustManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/GetLocalHostAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/HeaderFieldHelper.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/LineInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/PlainDatagramSocketImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/PlainSocketImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/URLParseError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/natPlainDatagramSocketImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/natPlainSocketImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/core/$(DEPDIR)/Connection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/core/$(DEPDIR)/CoreInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/core/$(DEPDIR)/Handler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/core/$(DEPDIR)/natCoreInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/file/$(DEPDIR)/Connection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/file/$(DEPDIR)/Handler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/ActiveModeDTP.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/BlockInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/BlockOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/CompressedInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/CompressedOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/DTP.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/DTPInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/DTPOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/FTPConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/FTPException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/FTPResponse.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/FTPURLConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/Handler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/PassiveModeDTP.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/StreamInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/StreamOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/gcjlib/$(DEPDIR)/Connection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/gcjlib/$(DEPDIR)/Handler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/Authenticator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/ByteArrayRequestBodyWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/ByteArrayResponseBodyReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/ChunkedInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/Cookie.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/CookieManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/Credentials.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/HTTPConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/HTTPDateFormat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/HTTPURLConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/Handler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/Headers.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/Request.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/RequestBodyWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/Response.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/ResponseBodyReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/ResponseHeaderHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/SimpleCookieManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/event/$(DEPDIR)/ConnectionEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/event/$(DEPDIR)/ConnectionListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/event/$(DEPDIR)/RequestEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/event/$(DEPDIR)/RequestListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/jar/$(DEPDIR)/Connection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/jar/$(DEPDIR)/Handler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/ChannelInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/ChannelOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/ChannelReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/DatagramChannelImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/DatagramChannelSelectionKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/FileLockImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/InputStreamChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/NIOConstants.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/NIODatagramSocket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/NIOServerSocket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/NIOSocket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/OutputStreamChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/PipeImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/SelectionKeyImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/SelectorImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/SelectorProviderImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/ServerSocketChannelImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/ServerSocketChannelSelectionKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/SocketChannelImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/SocketChannelSelectionKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/VMPipe.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/VMSelector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/natNIOServerSocket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/natPipeImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/natSelectorImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/channels/$(DEPDIR)/FileChannelImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/channels/$(DEPDIR)/natFileChannelImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/charset/$(DEPDIR)/ISO_8859_1.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/charset/$(DEPDIR)/Provider.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/charset/$(DEPDIR)/US_ASCII.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/charset/$(DEPDIR)/UTF_16.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/charset/$(DEPDIR)/UTF_16BE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/charset/$(DEPDIR)/UTF_16Decoder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/charset/$(DEPDIR)/UTF_16Encoder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/charset/$(DEPDIR)/UTF_16LE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/charset/$(DEPDIR)/UTF_8.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/$(DEPDIR)/RMIMarshalledObjectInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/$(DEPDIR)/RMIMarshalledObjectOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/dgc/$(DEPDIR)/DGCImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/dgc/$(DEPDIR)/DGCImpl_Skel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/dgc/$(DEPDIR)/DGCImpl_Stub.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/registry/$(DEPDIR)/RegistryImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/registry/$(DEPDIR)/RegistryImpl_Skel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/registry/$(DEPDIR)/RegistryImpl_Stub.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/rmic/$(DEPDIR)/Compile_gcj.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/rmic/$(DEPDIR)/Compile_jikes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/rmic/$(DEPDIR)/Compile_kjc.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/rmic/$(DEPDIR)/Compiler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/rmic/$(DEPDIR)/CompilerProcess.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/rmic/$(DEPDIR)/RMIC.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/rmic/$(DEPDIR)/RMICException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/rmic/$(DEPDIR)/TabbedWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/ConnectionRunnerPool.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/ProtocolConstants.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/RMIDefaultSocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/RMIHashes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/RMIIncomingThread.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/RMIObjectInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/RMIObjectOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/RMIVoidValue.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/UnicastConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/UnicastConnectionManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/UnicastRef.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/UnicastRemoteCall.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/UnicastRemoteStub.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/UnicastServer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/rmi/server/$(DEPDIR)/UnicastServerRef.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/$(DEPDIR)/Engine.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/$(DEPDIR)/OID.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/$(DEPDIR)/PolicyFile.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/action/$(DEPDIR)/GetPropertyAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/action/$(DEPDIR)/GetSecurityPropertyAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/action/$(DEPDIR)/SetAccessibleAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/ber/$(DEPDIR)/BER.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/ber/$(DEPDIR)/BEREncodingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/ber/$(DEPDIR)/BERReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/ber/$(DEPDIR)/BERValue.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/der/$(DEPDIR)/BitString.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/der/$(DEPDIR)/DER.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/der/$(DEPDIR)/DEREncodingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/der/$(DEPDIR)/DERReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/der/$(DEPDIR)/DERValue.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/der/$(DEPDIR)/DERWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/pkcs/$(DEPDIR)/PKCS7SignedData.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/pkcs/$(DEPDIR)/SignerInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/CollectionCertStoreImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/DSAKeyFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/DSAKeyPairGenerator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/DSAParameterGenerator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/DSAParameters.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/DSASignature.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/DefaultPolicy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/EncodedKeyFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/Gnu.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/GnuDHPublicKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/GnuDSAPrivateKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/GnuDSAPublicKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/GnuRSAPrivateKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/GnuRSAPublicKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/MD2withRSA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/MD4withRSA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/MD5.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/MD5withRSA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/PKIXCertPathValidatorImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/RSA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/RSAKeyFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/SHA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/SHA1PRNG.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/SHA1withRSA.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/provider/$(DEPDIR)/X509CertificateFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/util/$(DEPDIR)/Prime.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/GnuPKIExtension.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/PolicyNodeImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/Util.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/X500DistinguishedName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/X509CRL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/X509CRLEntry.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/X509CRLSelectorImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/X509CertPath.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/X509CertSelectorImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/$(DEPDIR)/X509Certificate.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/AuthorityKeyIdentifier.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/BasicConstraints.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/CRLNumber.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/CertificatePolicies.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/ExtendedKeyUsage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/Extension.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/GeneralNames.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/IssuerAlternativeNames.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/KeyUsage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/PolicyConstraint.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/PolicyMappings.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/PrivateKeyUsagePeriod.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/ReasonCode.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/SubjectAlternativeNames.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/x509/ext/$(DEPDIR)/SubjectKeyIdentifier.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/text/$(DEPDIR)/AttributedFormatBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/text/$(DEPDIR)/BaseBreakIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/text/$(DEPDIR)/CharacterBreakIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/text/$(DEPDIR)/FormatBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/text/$(DEPDIR)/FormatCharacterIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/text/$(DEPDIR)/LineBreakIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/text/$(DEPDIR)/SentenceBreakIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/text/$(DEPDIR)/StringFormatBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/text/$(DEPDIR)/WordBreakIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/$(DEPDIR)/DoubleEnumeration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/$(DEPDIR)/EmptyEnumeration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/prefs/$(DEPDIR)/FileBasedFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/prefs/$(DEPDIR)/MemoryBasedFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/prefs/$(DEPDIR)/MemoryBasedPreferences.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/prefs/$(DEPDIR)/NodeReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/prefs/$(DEPDIR)/NodeWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/CharIndexed.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/CharIndexedCharArray.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/CharIndexedInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/CharIndexedString.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/CharIndexedStringBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/REException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/REFilterInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/REMatch.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/REMatchEnumeration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RESyntax.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/REToken.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenAny.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenBackRef.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenChar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenEnd.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenEndSub.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenLookAhead.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenOneOf.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenPOSIX.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenRange.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenRepeated.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenStart.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/RETokenWordBoundary.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/UncheckedRE.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/applet/$(DEPDIR)/Applet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/applet/$(DEPDIR)/AppletContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/applet/$(DEPDIR)/AppletStub.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/applet/$(DEPDIR)/AudioClip.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/AWTError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/AWTEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/AWTEventMulticaster.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/AWTException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/AWTKeyStroke.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/AWTPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/ActiveEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Adjustable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/AlphaComposite.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/AttributeValue.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/BasicStroke.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/BorderLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/BufferCapabilities.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Button.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Canvas.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/CardLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Checkbox.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/CheckboxGroup.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/CheckboxMenuItem.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Choice.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Color.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/ColorPaintContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Component.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/ComponentOrientation.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Composite.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/CompositeContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Container.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/ContainerOrderFocusTraversalPolicy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Cursor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/DefaultFocusTraversalPolicy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/DefaultKeyboardFocusManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Dialog.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Dimension.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/DisplayMode.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Event.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/EventDispatchThread.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/EventQueue.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/FileDialog.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/FlowLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/FocusTraversalPolicy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Font.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/FontFormatException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/FontMetrics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Frame.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/GradientPaint.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Graphics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Graphics2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/GraphicsConfigTemplate.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/GraphicsConfiguration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/GraphicsDevice.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/GraphicsEnvironment.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/GridBagConstraints.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/GridBagLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/GridBagLayoutInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/GridLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/HeadlessException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/IllegalComponentStateException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Image.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/ImageCapabilities.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Insets.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/ItemSelectable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/JobAttributes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/KeyEventDispatcher.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/KeyEventPostProcessor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/KeyboardFocusManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Label.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/LayoutManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/LayoutManager2.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/List.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/MediaTracker.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Menu.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/MenuBar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/MenuComponent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/MenuContainer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/MenuItem.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/MenuShortcut.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/PageAttributes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Paint.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/PaintContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Panel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Point.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Polygon.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/PopupMenu.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/PrintGraphics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/PrintJob.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Rectangle.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/RenderingHints.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Robot.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/ScrollPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/ScrollPaneAdjustable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Scrollbar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Shape.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Stroke.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/SystemColor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/TextArea.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/TextComponent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/TextField.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/TexturePaint.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Toolkit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Transparency.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/$(DEPDIR)/Window.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/color/$(DEPDIR)/CMMException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/color/$(DEPDIR)/ColorSpace.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/color/$(DEPDIR)/ICC_ColorSpace.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/color/$(DEPDIR)/ICC_Profile.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/color/$(DEPDIR)/ICC_ProfileGray.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/color/$(DEPDIR)/ICC_ProfileRGB.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/color/$(DEPDIR)/ProfileDataException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/Clipboard.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/ClipboardOwner.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/DataFlavor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/FlavorMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/FlavorTable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/MimeTypeParseException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/StringSelection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/SystemFlavorMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/Transferable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/datatransfer/$(DEPDIR)/UnsupportedFlavorException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/Autoscroll.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DnDConstants.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DnDEventMulticaster.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragGestureEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragGestureListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragGestureRecognizer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragSource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragSourceAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragSourceContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragSourceDragEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragSourceDropEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragSourceEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragSourceListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DragSourceMotionListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DropTarget.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DropTargetAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DropTargetContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DropTargetDragEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DropTargetDropEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DropTargetEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/DropTargetListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/InvalidDnDOperationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/$(DEPDIR)/MouseDragGestureRecognizer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/peer/$(DEPDIR)/DragSourceContextPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/peer/$(DEPDIR)/DropTargetContextPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/dnd/peer/$(DEPDIR)/DropTargetPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/AWTEventListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/AWTEventListenerProxy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ActionEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ActionListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/AdjustmentEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/AdjustmentListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ComponentAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ComponentEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ComponentListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ContainerAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ContainerEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ContainerListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/FocusAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/FocusEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/FocusListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/HierarchyBoundsAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/HierarchyBoundsListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/HierarchyEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/HierarchyListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/InputEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/InputMethodEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/InputMethodListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/InvocationEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ItemEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/ItemListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/KeyAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/KeyEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/KeyListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/MouseAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/MouseEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/MouseListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/MouseMotionAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/MouseMotionListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/MouseWheelEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/MouseWheelListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/PaintEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/TextEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/TextListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/WindowAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/WindowEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/WindowFocusListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/WindowListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/event/$(DEPDIR)/WindowStateListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/FontRenderContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/GlyphJustificationInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/GlyphMetrics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/GlyphVector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/GraphicAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/ImageGraphicAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/LineBreakMeasurer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/LineMetrics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/MultipleMaster.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/NumericShaper.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/OpenType.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/ShapeGraphicAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/TextAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/TextHitInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/TextLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/TextMeasurer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/font/$(DEPDIR)/TransformAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/AffineTransform.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/Arc2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/Area.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/CubicCurve2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/Dimension2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/Ellipse2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/FlatteningPathIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/GeneralPath.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/IllegalPathStateException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/Line2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/NoninvertibleTransformException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/PathIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/Point2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/QuadCurve2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/Rectangle2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/RectangularShape.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/geom/$(DEPDIR)/RoundRectangle2D.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/im/$(DEPDIR)/InputContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/im/$(DEPDIR)/InputMethodHighlight.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/im/$(DEPDIR)/InputMethodRequests.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/im/$(DEPDIR)/InputSubset.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/im/spi/$(DEPDIR)/InputMethod.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/im/spi/$(DEPDIR)/InputMethodContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/im/spi/$(DEPDIR)/InputMethodDescriptor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/AffineTransformOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/AreaAveragingScaleFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/BandCombineOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/BandedSampleModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/BufferStrategy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/BufferedImage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/BufferedImageFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/BufferedImageOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ByteLookupTable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ColorConvertOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ColorModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ComponentColorModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ComponentSampleModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ConvolveOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/CropImageFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/DataBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/DataBufferByte.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/DataBufferDouble.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/DataBufferFloat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/DataBufferInt.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/DataBufferShort.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/DataBufferUShort.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/DirectColorModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/FilteredImageSource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ImageConsumer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ImageFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ImageObserver.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ImageProducer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ImagingOpException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/IndexColorModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/Kernel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/LookupOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/LookupTable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/MemoryImageSource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/MultiPixelPackedSampleModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/PackedColorModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/PixelGrabber.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/PixelInterleavedSampleModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/RGBImageFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/Raster.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/RasterFormatException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/RasterOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/RenderedImage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ReplicateScaleFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/RescaleOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/SampleModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/ShortLookupTable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/SinglePixelPackedSampleModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/TileObserver.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/VolatileImage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/WritableRaster.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/$(DEPDIR)/WritableRenderedImage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/renderable/$(DEPDIR)/ContextualRenderedImageFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/renderable/$(DEPDIR)/ParameterBlock.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/renderable/$(DEPDIR)/RenderContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/renderable/$(DEPDIR)/RenderableImage.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/renderable/$(DEPDIR)/RenderableImageOp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/renderable/$(DEPDIR)/RenderableImageProducer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/image/renderable/$(DEPDIR)/RenderedImageFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/ButtonPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/CanvasPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/CheckboxMenuItemPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/CheckboxPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/ChoicePeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/ComponentPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/ContainerPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/DialogPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/FileDialogPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/FontPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/FramePeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/LabelPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/LightweightPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/ListPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/MenuBarPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/MenuComponentPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/MenuItemPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/MenuPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/PanelPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/PopupMenuPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/RobotPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/ScrollPanePeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/ScrollbarPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/TextAreaPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/TextComponentPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/TextFieldPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/peer/$(DEPDIR)/WindowPeer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/Book.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/PageFormat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/Pageable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/Paper.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/Printable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/PrinterAbortException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/PrinterException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/PrinterGraphics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/PrinterIOException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/awt/print/$(DEPDIR)/PrinterJob.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/AppletInitializer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/BeanDescriptor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/BeanInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/Beans.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/Customizer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/DesignMode.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/EventHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/EventSetDescriptor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/ExceptionListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/Expression.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/FeatureDescriptor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/IndexedPropertyDescriptor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/IntrospectionException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/Introspector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/MethodDescriptor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/ParameterDescriptor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/PropertyChangeEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/PropertyChangeListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/PropertyChangeListenerProxy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/PropertyChangeSupport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/PropertyDescriptor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/PropertyEditor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/PropertyEditorManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/PropertyEditorSupport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/PropertyVetoException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/SimpleBeanInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/Statement.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/VetoableChangeListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/VetoableChangeListenerProxy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/VetoableChangeSupport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/Visibility.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/$(DEPDIR)/XMLDecoder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextChild.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextChildComponentProxy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextChildSupport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextContainerProxy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextMembershipEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextMembershipListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextProxy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextServiceAvailableEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextServiceProvider.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextServiceProviderBeanInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextServiceRevokedEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextServiceRevokedListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextServices.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextServicesListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextServicesSupport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/beans/beancontext/$(DEPDIR)/BeanContextSupport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/BufferedInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/BufferedOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/BufferedReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/BufferedWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ByteArrayInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ByteArrayOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/CharArrayReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/CharArrayWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/CharConversionException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/DataInput.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/DataInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/DataOutput.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/DataOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/EOFException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/Externalizable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/File.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FileDescriptor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FileFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FileInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FileNotFoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FileOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FilePermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FileReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FileWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FilenameFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FilterInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FilterOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FilterReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/FilterWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/IOException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/InputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/InputStreamReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/InterruptedIOException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/InvalidClassException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/InvalidObjectException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/LineNumberInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/LineNumberReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/NotActiveException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/NotSerializableException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ObjectInput.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ObjectInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ObjectInputValidation.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ObjectOutput.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ObjectOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ObjectStreamClass.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ObjectStreamConstants.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ObjectStreamException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/ObjectStreamField.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/OptionalDataException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/OutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/OutputStreamWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/PipedInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/PipedOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/PipedReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/PipedWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/PrintStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/PrintWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/PushbackInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/PushbackReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/RandomAccessFile.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/Reader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/SequenceInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/Serializable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/SerializablePermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/StreamCorruptedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/StreamTokenizer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/StringBufferInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/StringReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/StringWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/SyncFailedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/UTFDataFormatException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/UnsupportedEncodingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/VMObjectStreamClass.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/WriteAbortedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/Writer.Plo@am__quote@
! @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)/AbstractMethodError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ArithmeticException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ArrayIndexOutOfBoundsException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ArrayStoreException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/AssertionError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Boolean.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Byte.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/CharSequence.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Character.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)/ClassCastException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ClassCircularityError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ClassFormatError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ClassLoader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ClassNotFoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/CloneNotSupportedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Cloneable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Comparable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Compiler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ConcreteProcess.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Double.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Error.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Exception.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ExceptionInInitializerError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Float.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/IllegalAccessError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/IllegalAccessException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/IllegalArgumentException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/IllegalMonitorStateException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/IllegalStateException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/IllegalThreadStateException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/IncompatibleClassChangeError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/IndexOutOfBoundsException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/InheritableThreadLocal.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/InstantiationError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/InstantiationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Integer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/InternalError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/InterruptedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/LinkageError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Long.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Math.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/NegativeArraySizeException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/NoClassDefFoundError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/NoSuchFieldError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/NoSuchFieldException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/NoSuchMethodError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/NoSuchMethodException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/NullPointerException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Number.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/NumberFormatException.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)/OutOfMemoryError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Package.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Process.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Runnable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Runtime.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/RuntimeException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/RuntimePermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/SecurityException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/SecurityManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Short.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/StackOverflowError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/StackTraceElement.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/StrictMath.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/String.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/StringBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/StringIndexOutOfBoundsException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/System.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Thread.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ThreadDeath.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ThreadGroup.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/ThreadLocal.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Throwable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/UnknownError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/UnsatisfiedLinkError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/UnsupportedClassVersionError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/UnsupportedOperationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/VMClassLoader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/VMCompiler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/VMSecurityManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/VMThrowable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/VerifyError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/VirtualMachineError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/Void.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@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natConcreteProcess.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natDouble.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natFloat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natMath.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natObject.Plo@am__quote@
! @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)/PhantomReference.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/ref/$(DEPDIR)/Reference.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/ref/$(DEPDIR)/ReferenceQueue.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/ref/$(DEPDIR)/SoftReference.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/ref/$(DEPDIR)/WeakReference.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)/AccessibleObject.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/Array.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/Constructor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/Field.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/InvocationHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/InvocationTargetException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/Member.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/Method.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/Modifier.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/Proxy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/ReflectPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/UndeclaredThrowableException.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/math/$(DEPDIR)/BigDecimal.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/math/$(DEPDIR)/BigInteger.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/Authenticator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/BindException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/ConnectException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/ContentHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/ContentHandlerFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/DatagramPacket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/DatagramSocket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/DatagramSocketImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/DatagramSocketImplFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/FileNameMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/HttpURLConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/Inet4Address.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/Inet6Address.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/InetAddress.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/InetSocketAddress.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/JarURLConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/MalformedURLException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/MulticastSocket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/NetPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/NetworkInterface.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/NoRouteToHostException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/PasswordAuthentication.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/PortUnreachableException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/ProtocolException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/ServerSocket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/Socket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/SocketAddress.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/SocketException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/SocketImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/SocketImplFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/SocketOptions.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/SocketPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/SocketTimeoutException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/URI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/URISyntaxException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/URL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/URLClassLoader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/URLConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/URLDecoder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/URLEncoder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/URLStreamHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/URLStreamHandlerFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/UnknownHostException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/UnknownServiceException.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)/Buffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/BufferOverflowException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/BufferUnderflowException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/ByteBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/ByteBufferHelper.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/ByteBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/ByteOrder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/CharBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/CharBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/CharViewBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/DirectByteBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/DoubleBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/DoubleBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/DoubleViewBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/FloatBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/FloatBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/FloatViewBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/IntBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/IntBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/IntViewBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/InvalidMarkException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/LongBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/LongBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/LongViewBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/MappedByteBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/MappedByteBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/ReadOnlyBufferException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/ShortBuffer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/ShortBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/ShortViewBufferImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/VMDirectByteBuffer.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)/AlreadyConnectedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/AsynchronousCloseException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/ByteChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/CancelledKeyException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/Channel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/Channels.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/ClosedByInterruptException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/ClosedChannelException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/ClosedSelectorException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/ConnectionPendingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/DatagramChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/FileChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/FileLock.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/FileLockInterruptionException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/GatheringByteChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/IllegalBlockingModeException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/IllegalSelectorException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/InterruptibleChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/NoConnectionPendingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/NonReadableChannelException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/NonWritableChannelException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/NotYetBoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/NotYetConnectedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/OverlappingFileLockException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/Pipe.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/ReadableByteChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/ScatteringByteChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/SelectableChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/SelectionKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/Selector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/ServerSocketChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/SocketChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/UnresolvedAddressException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/UnsupportedAddressTypeException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/WritableByteChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/natChannels.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/spi/$(DEPDIR)/AbstractInterruptibleChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/spi/$(DEPDIR)/AbstractSelectableChannel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/spi/$(DEPDIR)/AbstractSelectionKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/spi/$(DEPDIR)/AbstractSelector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/spi/$(DEPDIR)/SelectorProvider.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/CharacterCodingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/Charset.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/CharsetDecoder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/CharsetEncoder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/CoderMalfunctionError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/CoderResult.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/CodingErrorAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/IllegalCharsetNameException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/MalformedInputException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/UnmappableCharacterException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/$(DEPDIR)/UnsupportedCharsetException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/nio/charset/spi/$(DEPDIR)/CharsetProvider.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/AccessException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/AlreadyBoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/ConnectException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/ConnectIOException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/MarshalException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/MarshalledObject.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/Naming.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/NoSuchObjectException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/NotBoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/RMISecurityException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/RMISecurityManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/Remote.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/RemoteException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/ServerError.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/ServerException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/ServerRuntimeException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/StubNotFoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/UnexpectedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/UnknownHostException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/$(DEPDIR)/UnmarshalException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/Activatable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivateFailedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivationDesc.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivationGroup.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivationGroupDesc.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivationGroupID.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivationID.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivationInstantiator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivationMonitor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/ActivationSystem.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/Activator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/UnknownGroupException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/activation/$(DEPDIR)/UnknownObjectException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/dgc/$(DEPDIR)/DGC.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/dgc/$(DEPDIR)/Lease.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/dgc/$(DEPDIR)/VMID.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/registry/$(DEPDIR)/LocateRegistry.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/registry/$(DEPDIR)/Registry.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/registry/$(DEPDIR)/RegistryHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/ExportException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/LoaderHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/LogStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/ObjID.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/Operation.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RMIClassLoader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RMIClassLoaderSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RMIClientSocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RMIFailureHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RMIServerSocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RMISocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RemoteCall.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RemoteObject.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RemoteRef.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RemoteServer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/RemoteStub.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/ServerCloneException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/ServerNotActiveException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/ServerRef.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/Skeleton.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/SkeletonMismatchException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/SkeletonNotFoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/SocketSecurityException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/UID.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/UnicastRemoteObject.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/rmi/server/$(DEPDIR)/Unreferenced.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/AccessControlContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/AccessControlException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/AccessController.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/AlgorithmParameterGenerator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/AlgorithmParameterGeneratorSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/AlgorithmParameters.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/AlgorithmParametersSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/AllPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/BasicPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Certificate.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/CodeSource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/DigestException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/DigestInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/DigestOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/DomainCombiner.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/DummyKeyPairGenerator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/DummyMessageDigest.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/DummySignature.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/GeneralSecurityException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Guard.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/GuardedObject.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Identity.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/IdentityScope.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/InvalidAlgorithmParameterException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/InvalidKeyException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/InvalidParameterException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Key.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyFactorySpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyManagementException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyPair.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyPairGenerator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyPairGeneratorSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyStore.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyStoreException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/KeyStoreSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/MessageDigest.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/MessageDigestSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/NoSuchAlgorithmException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/NoSuchProviderException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Permission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/PermissionCollection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Permissions.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Policy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Principal.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/PrivateKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/PrivilegedAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/PrivilegedActionException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/PrivilegedExceptionAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/ProtectionDomain.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Provider.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/ProviderException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/PublicKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/SecureClassLoader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/SecureRandom.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/SecureRandomSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Security.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/SecurityPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Signature.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/SignatureException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/SignatureSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/SignedObject.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/Signer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/UnrecoverableKeyException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/$(DEPDIR)/UnresolvedPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/acl/$(DEPDIR)/Acl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/acl/$(DEPDIR)/AclEntry.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/acl/$(DEPDIR)/AclNotFoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/acl/$(DEPDIR)/Group.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/acl/$(DEPDIR)/LastOwnerException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/acl/$(DEPDIR)/NotOwnerException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/acl/$(DEPDIR)/Owner.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/acl/$(DEPDIR)/Permission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CRL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CRLException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CRLSelector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPath.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPathBuilder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPathBuilderException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPathBuilderResult.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPathBuilderSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPathParameters.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPathValidator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPathValidatorException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPathValidatorResult.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertPathValidatorSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertSelector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertStore.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertStoreException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertStoreParameters.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertStoreSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/Certificate.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertificateEncodingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertificateException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertificateExpiredException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertificateFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertificateFactorySpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertificateNotYetValidException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CertificateParsingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/CollectionCertStoreParameters.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/LDAPCertStoreParameters.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/PKIXBuilderParameters.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/PKIXCertPathBuilderResult.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/PKIXCertPathChecker.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/PKIXCertPathValidatorResult.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/PKIXParameters.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/PolicyNode.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/PolicyQualifierInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/TrustAnchor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/X509CRL.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/X509CRLEntry.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/X509CRLSelector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/X509CertSelector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/X509Certificate.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/cert/$(DEPDIR)/X509Extension.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/DSAKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/DSAKeyPairGenerator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/DSAParams.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/DSAPrivateKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/DSAPublicKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/RSAKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/RSAMultiPrimePrivateCrtKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/RSAPrivateCrtKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/RSAPrivateKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/interfaces/$(DEPDIR)/RSAPublicKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/AlgorithmParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/DSAParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/DSAPrivateKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/DSAPublicKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/EncodedKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/InvalidKeySpecException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/InvalidParameterSpecException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/KeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/PKCS8EncodedKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/PSSParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/RSAKeyGenParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/RSAMultiPrimePrivateCrtKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/RSAOtherPrimeInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/RSAPrivateCrtKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/RSAPrivateKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/RSAPublicKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/security/spec/$(DEPDIR)/X509EncodedKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Array.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/BatchUpdateException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Blob.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/CallableStatement.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Clob.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Connection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/DataTruncation.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/DatabaseMetaData.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Date.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Driver.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/DriverManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/DriverPropertyInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/ParameterMetaData.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/PreparedStatement.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Ref.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/ResultSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/ResultSetMetaData.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/SQLData.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/SQLException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/SQLInput.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/SQLOutput.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/SQLPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/SQLWarning.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Savepoint.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Statement.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Struct.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Time.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Timestamp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/sql/$(DEPDIR)/Types.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/Annotation.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/AttributedCharacterIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/AttributedString.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/AttributedStringIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/BreakIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/CharacterIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/ChoiceFormat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/CollationElementIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/CollationKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/Collator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/DateFormat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/DateFormatSymbols.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/DecimalFormat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/DecimalFormatSymbols.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/FieldPosition.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/Format.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/MessageFormat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/NumberFormat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/ParseException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/ParsePosition.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/RuleBasedCollator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/SimpleDateFormat.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/StringCharacterIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/text/$(DEPDIR)/natCollator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/AbstractCollection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/AbstractList.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/AbstractMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/AbstractSequentialList.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/AbstractSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/ArrayList.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Arrays.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/BitSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Calendar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Collection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Collections.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Comparator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/ConcurrentModificationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Currency.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Date.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Dictionary.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/EmptyStackException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Enumeration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/EventListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/EventListenerProxy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/EventObject.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/GregorianCalendar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/HashMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/HashSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Hashtable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/IdentityHashMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Iterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/LinkedHashMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/LinkedHashSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/LinkedList.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/List.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/ListIterator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/ListResourceBundle.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Locale.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Map.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/MissingResourceException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/NoSuchElementException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Observable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Observer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Properties.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/PropertyPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/PropertyPermissionCollection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/PropertyResourceBundle.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Random.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/RandomAccess.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/ResourceBundle.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Set.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/SimpleTimeZone.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/SortedMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/SortedSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Stack.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/StringTokenizer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/TimeZone.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Timer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/TimerTask.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/TooManyListenersException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/TreeMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/TreeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/VMTimeZone.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/Vector.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/WeakHashMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/natResourceBundle.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/$(DEPDIR)/natVMTimeZone.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/jar/$(DEPDIR)/Attributes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/jar/$(DEPDIR)/JarEntry.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/jar/$(DEPDIR)/JarException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/jar/$(DEPDIR)/JarFile.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/jar/$(DEPDIR)/JarInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/jar/$(DEPDIR)/JarOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/jar/$(DEPDIR)/Manifest.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/ConsoleHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/ErrorManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/FileHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/Filter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/Formatter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/Handler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/Level.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/LogManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/LogRecord.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/Logger.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/LoggingPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/MemoryHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/SimpleFormatter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/SocketHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/StreamHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/XMLFormatter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/logging/$(DEPDIR)/natLogger.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/prefs/$(DEPDIR)/AbstractPreferences.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/prefs/$(DEPDIR)/BackingStoreException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/prefs/$(DEPDIR)/InvalidPreferencesFormatException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/prefs/$(DEPDIR)/NodeChangeEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/prefs/$(DEPDIR)/NodeChangeListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/prefs/$(DEPDIR)/PreferenceChangeEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/prefs/$(DEPDIR)/PreferenceChangeListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/prefs/$(DEPDIR)/Preferences.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/prefs/$(DEPDIR)/PreferencesFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/regex/$(DEPDIR)/Matcher.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/regex/$(DEPDIR)/Pattern.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/regex/$(DEPDIR)/PatternSyntaxException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/Adler32.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/CRC32.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/CheckedInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/CheckedOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/Checksum.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/DataFormatException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/Deflater.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/DeflaterOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/GZIPInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/GZIPOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/Inflater.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/InflaterInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/ZipConstants.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/ZipEntry.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/ZipException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/ZipFile.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/ZipInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@java/util/zip/$(DEPDIR)/ZipOutputStream.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@javax/accessibility/$(DEPDIR)/Accessible.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleBundle.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleComponent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleEditableText.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleExtendedComponent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleExtendedTable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleHyperlink.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleHypertext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleIcon.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleKeyBinding.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleRelation.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleRelationSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleResourceBundle.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleRole.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleSelection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleState.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleStateSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleTable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleTableModelChange.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleText.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/accessibility/$(DEPDIR)/AccessibleValue.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/BadPaddingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/Cipher.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/CipherInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/CipherOutputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/CipherSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/EncryptedPrivateKeyInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/ExemptionMechanism.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/ExemptionMechanismException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/ExemptionMechanismSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/IllegalBlockSizeException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/KeyAgreement.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/KeyAgreementSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/KeyGenerator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/KeyGeneratorSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/Mac.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/MacSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/NoSuchPaddingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/NullCipher.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/NullCipherImpl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/SealedObject.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/SecretKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/SecretKeyFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/SecretKeyFactorySpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/$(DEPDIR)/ShortBufferException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/interfaces/$(DEPDIR)/DHKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/interfaces/$(DEPDIR)/DHPrivateKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/interfaces/$(DEPDIR)/DHPublicKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/interfaces/$(DEPDIR)/PBEKey.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/DESKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/DESedeKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/DHGenParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/DHParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/DHPrivateKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/DHPublicKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/IvParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/PBEKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/PBEParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/RC2ParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/RC5ParameterSpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/crypto/spec/$(DEPDIR)/SecretKeySpec.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/AuthenticationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/AuthenticationNotSupportedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/BinaryRefAddr.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/Binding.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/CannotProceedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/CommunicationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/CompositeName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/CompoundName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/ConfigurationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/Context.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/ContextNotEmptyException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/InitialContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/InsufficientResourcesException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/InterruptedNamingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/InvalidNameException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/LimitExceededException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/LinkException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/LinkLoopException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/LinkRef.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/MalformedLinkException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/Name.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NameAlreadyBoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NameClassPair.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NameNotFoundException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NameParser.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NamingEnumeration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NamingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NamingSecurityException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NoInitialContextException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NoPermissionException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/NotContextException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/OperationNotSupportedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/PartialResultException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/RefAddr.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/Reference.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/Referenceable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/ReferralException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/ServiceUnavailableException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/SizeLimitExceededException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/StringRefAddr.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/$(DEPDIR)/TimeLimitExceededException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/Attribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/AttributeInUseException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/AttributeModificationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/Attributes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/BasicAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/BasicAttributes.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/DirContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/InitialDirContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/InvalidAttributeIdentifierException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/InvalidAttributeValueException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/InvalidAttributesException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/InvalidSearchControlsException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/InvalidSearchFilterException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/ModificationItem.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/NoSuchAttributeException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/SchemaViolationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/SearchControls.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/directory/$(DEPDIR)/SearchResult.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/event/$(DEPDIR)/EventContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/event/$(DEPDIR)/EventDirContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/event/$(DEPDIR)/NamespaceChangeListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/event/$(DEPDIR)/NamingEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/event/$(DEPDIR)/NamingExceptionEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/event/$(DEPDIR)/NamingListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/event/$(DEPDIR)/ObjectChangeListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/Control.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/ControlFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/ExtendedRequest.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/ExtendedResponse.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/HasControls.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/InitialLdapContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/LdapContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/LdapReferralException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/UnsolicitedNotification.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/UnsolicitedNotificationEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/ldap/$(DEPDIR)/UnsolicitedNotificationListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/DirObjectFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/DirStateFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/DirectoryManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/InitialContextFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/InitialContextFactoryBuilder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/NamingManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/ObjectFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/ObjectFactoryBuilder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/ResolveResult.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/Resolver.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/naming/spi/$(DEPDIR)/StateFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/$(DEPDIR)/ServerSocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/$(DEPDIR)/SocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/$(DEPDIR)/VanillaServerSocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/$(DEPDIR)/VanillaSocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/HandshakeCompletedEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/HandshakeCompletedListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/HostnameVerifier.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/HttpsURLConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/KeyManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/KeyManagerFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/KeyManagerFactorySpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/ManagerFactoryParameters.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLContextSpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLHandshakeException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLKeyException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLPeerUnverifiedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLProtocolException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLServerSocket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLServerSocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLSession.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLSessionBindingEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLSessionBindingListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLSessionContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLSocket.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/SSLSocketFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/TrivialHostnameVerifier.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/TrustManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/TrustManagerFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/TrustManagerFactorySpi.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/X509KeyManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/net/ssl/$(DEPDIR)/X509TrustManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/AttributeException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/CancelablePrintJob.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/Doc.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/DocFlavor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/DocPrintJob.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/FlavorException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/MultiDoc.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/MultiDocPrintJob.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/MultiDocPrintService.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/PrintException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/PrintService.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/PrintServiceLookup.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/ServiceUIFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/StreamPrintService.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/$(DEPDIR)/URIException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/Attribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/AttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/AttributeSetUtilities.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/DateTimeSyntax.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/DocAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/DocAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/EnumSyntax.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/HashAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/HashDocAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/HashPrintJobAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/HashPrintRequestAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/HashPrintServiceAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/IntegerSyntax.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/PrintJobAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/PrintJobAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/PrintRequestAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/PrintRequestAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/PrintServiceAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/PrintServiceAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/ResolutionSyntax.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/SetOfIntegerSyntax.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/Size2DSyntax.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/SupportedValuesAttribute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/TextSyntax.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/URISyntax.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/$(DEPDIR)/UnmodifiableSetException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/Chromaticity.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/ColorSupported.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/Compression.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/Copies.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/CopiesSupported.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/DateTimeAtCompleted.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/DateTimeAtCreation.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/DateTimeAtProcessing.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/Destination.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/DocumentName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/Fidelity.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/Finishings.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobHoldUntil.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobImpressions.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobImpressionsCompleted.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobImpressionsSupported.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobKOctets.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobKOctetsProcessed.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobKOctetsSupported.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobMediaSheets.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobMediaSheetsCompleted.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobMediaSheetsSupported.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobMessageFromOperator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobOriginatingUserName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobPriority.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobPrioritySupported.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobSheets.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobState.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobStateReason.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/JobStateReasons.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/Media.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/MediaPrintableArea.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/MediaSize.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/MediaSizeName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/MultipleDocumentHandling.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/NumberOfDocuments.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/NumberOfInterveningJobs.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/NumberUp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/NumberUpSupported.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/OrientationRequested.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/OutputDeviceAssigned.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PDLOverrideSupported.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PageRanges.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PagesPerMinute.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PagesPerMinuteColor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PresentationDirection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrintQuality.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterIsAcceptingJobs.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterLocation.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterMakeAndModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterMessageFromOperator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterMoreInfo.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterMoreInfoManufacturer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterResolution.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterState.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterStateReason.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterStateReasons.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/PrinterURI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/QueuedJobCount.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/ReferenceUriSchemesSupported.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/RequestingUserName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/Severity.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/SheetCollate.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/attribute/standard/$(DEPDIR)/Sides.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/event/$(DEPDIR)/PrintEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/event/$(DEPDIR)/PrintJobAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/event/$(DEPDIR)/PrintJobAttributeEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/event/$(DEPDIR)/PrintJobAttributeListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/event/$(DEPDIR)/PrintJobEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/event/$(DEPDIR)/PrintJobListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/event/$(DEPDIR)/PrintServiceAttributeEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/print/event/$(DEPDIR)/PrintServiceAttributeListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/$(DEPDIR)/AuthPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/$(DEPDIR)/DestroyFailedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/$(DEPDIR)/Destroyable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/$(DEPDIR)/Policy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/$(DEPDIR)/PrivateCredentialPermission.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/$(DEPDIR)/RefreshFailedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/$(DEPDIR)/Refreshable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/$(DEPDIR)/Subject.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/$(DEPDIR)/SubjectDomainCombiner.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/Callback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/CallbackHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/ChoiceCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/ConfirmationCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/LanguageCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/NameCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/PasswordCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/TextInputCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/TextOutputCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/callback/$(DEPDIR)/UnsupportedCallbackException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/login/$(DEPDIR)/AccountExpiredException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/login/$(DEPDIR)/AppConfigurationEntry.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/login/$(DEPDIR)/Configuration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/login/$(DEPDIR)/CredentialExpiredException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/login/$(DEPDIR)/FailedLoginException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/login/$(DEPDIR)/LoginContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/login/$(DEPDIR)/LoginException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/login/$(DEPDIR)/NullConfiguration.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/spi/$(DEPDIR)/LoginModule.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/x500/$(DEPDIR)/X500Principal.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/auth/x500/$(DEPDIR)/X500PrivateCredential.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/cert/$(DEPDIR)/Certificate.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/cert/$(DEPDIR)/CertificateEncodingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/cert/$(DEPDIR)/CertificateException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/cert/$(DEPDIR)/CertificateExpiredException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/cert/$(DEPDIR)/CertificateNotYetValidException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/cert/$(DEPDIR)/CertificateParsingException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/cert/$(DEPDIR)/X509CertBridge.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/cert/$(DEPDIR)/X509Certificate.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/AuthenticationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/AuthorizeCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/RealmCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/RealmChoiceCallback.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/Sasl.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/SaslClient.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/SaslClientFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/SaslException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/SaslServer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/security/sasl/$(DEPDIR)/SaslServerFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/ConnectionEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/ConnectionEventListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/ConnectionPoolDataSource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/DataSource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/PooledConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/RowSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/RowSetEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/RowSetInternal.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/RowSetListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/RowSetMetaData.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/RowSetReader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/RowSetWriter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/XAConnection.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/sql/$(DEPDIR)/XADataSource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/AbstractAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/AbstractButton.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/AbstractCellEditor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/AbstractListModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/AbstractSpinnerModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/Action.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ActionMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/BorderFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/BoundedRangeModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/Box.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/BoxLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ButtonGroup.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ButtonModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/CellEditor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/CellRendererPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ComboBoxEditor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ComboBoxModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ComponentInputMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DebugGraphics.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultBoundedRangeModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultButtonModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultCellEditor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultComboBoxModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultDesktopManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultFocusManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultListCellRenderer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultListModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultListSelectionModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DefaultSingleSelectionModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/DesktopManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/FocusManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/GrayFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/Icon.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ImageIcon.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/InputMap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/InputVerifier.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/InternalFrameFocusTraversalPolicy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JApplet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JButton.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JCheckBox.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JCheckBoxMenuItem.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JColorChooser.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JComboBox.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JComponent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JDesktopPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JDialog.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JEditorPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JFileChooser.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JFormattedTextField.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JFrame.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JInternalFrame.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JLabel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JLayeredPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JList.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JMenu.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JMenuBar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JMenuItem.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JOptionPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JPanel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JPasswordField.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JPopupMenu.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JProgressBar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JRadioButton.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JRadioButtonMenuItem.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JRootPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JScrollBar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JScrollPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JSeparator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JSlider.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JSpinner.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JSplitPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JTabbedPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JTable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JTextArea.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JTextField.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JTextPane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JToggleButton.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JToolBar.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JToolTip.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JTree.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JViewport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/JWindow.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/KeyStroke.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/LayoutFocusTraversalPolicy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ListCellRenderer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ListModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ListSelectionModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/LookAndFeel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/MenuElement.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/MenuSelectionManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/MutableComboBoxModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/OverlayLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/Popup.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/PopupFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ProgressMonitor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ProgressMonitorInputStream.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/Renderer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/RepaintManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/RootPaneContainer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ScrollPaneConstants.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ScrollPaneLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/Scrollable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SingleSelectionModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SizeRequirements.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SizeSequence.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SortingFocusTraversalPolicy.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SpinnerDateModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SpinnerListModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SpinnerModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SpinnerNumberModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/Spring.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SpringLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SwingConstants.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/SwingUtilities.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/Timer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ToolTipManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/TransferHandler.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/UIDefaults.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/UIManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/UnsupportedLookAndFeelException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/ViewportLayout.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/$(DEPDIR)/WindowConstants.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/AbstractBorder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/BevelBorder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/Border.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/CompoundBorder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/EmptyBorder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/EtchedBorder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/LineBorder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/MatteBorder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/SoftBevelBorder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/border/$(DEPDIR)/TitledBorder.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/colorchooser/$(DEPDIR)/AbstractColorChooserPanel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/colorchooser/$(DEPDIR)/ColorChooserComponentFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/colorchooser/$(DEPDIR)/ColorSelectionModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/colorchooser/$(DEPDIR)/DefaultColorSelectionModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/colorchooser/$(DEPDIR)/DefaultHSBChooserPanel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/colorchooser/$(DEPDIR)/DefaultPreviewPanel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/colorchooser/$(DEPDIR)/DefaultRGBChooserPanel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/colorchooser/$(DEPDIR)/DefaultSwatchChooserPanel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/AncestorEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/AncestorListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/CaretEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/CaretListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/CellEditorListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/ChangeEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/ChangeListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/DocumentEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/DocumentListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/EventListenerList.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/HyperlinkEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/HyperlinkListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/InternalFrameAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/InternalFrameEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/InternalFrameListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/ListDataEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/ListDataListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/ListSelectionEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/ListSelectionListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/MenuDragMouseEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/MenuDragMouseListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/MenuEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/MenuKeyEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/MenuKeyListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/MenuListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/MouseInputAdapter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/MouseInputListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/PopupMenuEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/PopupMenuListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/SwingPropertyChangeSupport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TableColumnModelEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TableColumnModelListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TableModelEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TableModelListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TreeExpansionEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TreeExpansionListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TreeModelEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TreeModelListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TreeSelectionEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TreeSelectionListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/TreeWillExpandListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/UndoableEditEvent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/event/$(DEPDIR)/UndoableEditListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/filechooser/$(DEPDIR)/FileFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/filechooser/$(DEPDIR)/FileSystemView.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/filechooser/$(DEPDIR)/FileView.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ActionMapUIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/BorderUIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ButtonUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ColorChooserUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ColorUIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ComboBoxUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ComponentInputMapUIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ComponentUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/DesktopIconUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/DesktopPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/DimensionUIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/FileChooserUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/FontUIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/IconUIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/InputMapUIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/InsetsUIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/InternalFrameUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/LabelUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ListUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/MenuBarUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/MenuItemUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/OptionPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/PanelUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/PopupMenuUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ProgressBarUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/RootPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ScrollBarUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ScrollPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/SeparatorUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/SliderUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/SpinnerUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/SplitPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/TabbedPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/TableHeaderUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/TableUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/TextUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ToolBarUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ToolTipUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/TreeUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/UIResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/$(DEPDIR)/ViewportUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicArrowButton.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicBorders.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicButtonListener.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicButtonUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicCheckBoxMenuItemUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicCheckBoxUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicColorChooserUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicComboBoxEditor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicComboBoxRenderer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicComboBoxUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicComboPopup.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicDesktopIconUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicDesktopPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicEditorPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicFormattedTextFieldUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicGraphicsUtils.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicIconFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicInternalFrameTitlePane.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicInternalFrameUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicLabelUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicListUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicLookAndFeel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicMenuBarUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicMenuItemUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicMenuUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicOptionPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicPanelUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicPasswordFieldUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicPopupMenuSeparatorUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicPopupMenuUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicProgressBarUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicRadioButtonMenuItemUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicRadioButtonUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicRootPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicScrollBarUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicScrollPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicSeparatorUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicSliderUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicSpinnerUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicSplitPaneDivider.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicSplitPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicTabbedPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicTableHeaderUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicTableUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicTextAreaUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicTextFieldUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicTextPaneUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicTextUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicToggleButtonUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicToolBarSeparatorUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicToolBarUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicToolTipUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicTreeUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/BasicViewportUI.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/basic/$(DEPDIR)/ComboPopup.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/metal/$(DEPDIR)/DefaultMetalTheme.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/metal/$(DEPDIR)/MetalLookAndFeel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/plaf/metal/$(DEPDIR)/MetalTheme.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/AbstractTableModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/DefaultTableCellRenderer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/DefaultTableColumnModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/DefaultTableModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/JTableHeader.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/TableCellEditor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/TableCellRenderer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/TableColumn.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/TableColumnModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/table/$(DEPDIR)/TableModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/AbstractDocument.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/AttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/BadLocationException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Caret.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/ComponentView.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/DefaultCaret.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/DefaultEditorKit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/DefaultHighlighter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/DefaultStyledDocument.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Document.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/DocumentFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/EditorKit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Element.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/FieldView.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/GapContent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Highlighter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/JTextComponent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Keymap.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/LayeredHighlighter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/MutableAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/NavigationFilter.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/PasswordView.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/PlainDocument.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/PlainView.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Position.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Segment.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/SimpleAttributeSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/StringContent.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Style.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/StyleConstants.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/StyleContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/StyledDocument.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/StyledEditorKit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/TabExpander.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/TabSet.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/TabStop.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/TabableView.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/TextAction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Utilities.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/View.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/ViewFactory.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/$(DEPDIR)/HTML.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/ParserDelegator.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/AbstractLayoutCache.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/DefaultMutableTreeNode.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/DefaultTreeCellEditor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/DefaultTreeCellRenderer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/DefaultTreeModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/DefaultTreeSelectionModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/ExpandVetoException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/FixedHeightLayoutCache.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/MutableTreeNode.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/RowMapper.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/TreeCellEditor.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/TreeCellRenderer.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/TreeModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/TreeNode.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/TreePath.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/TreeSelectionModel.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/tree/$(DEPDIR)/VariableHeightLayoutCache.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/undo/$(DEPDIR)/AbstractUndoableEdit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/undo/$(DEPDIR)/CannotRedoException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/undo/$(DEPDIR)/CannotUndoException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/undo/$(DEPDIR)/CompoundEdit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/undo/$(DEPDIR)/StateEdit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/undo/$(DEPDIR)/StateEditable.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/undo/$(DEPDIR)/UndoManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/undo/$(DEPDIR)/UndoableEdit.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/undo/$(DEPDIR)/UndoableEditSupport.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/HeuristicCommitException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/HeuristicMixedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/HeuristicRollbackException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/InvalidTransactionException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/NotSupportedException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/RollbackException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/Status.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/Synchronization.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/SystemException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/Transaction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/TransactionManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/TransactionRequiredException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/TransactionRolledbackException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/$(DEPDIR)/UserTransaction.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/xa/$(DEPDIR)/XAException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/xa/$(DEPDIR)/XAResource.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@javax/transaction/xa/$(DEPDIR)/Xid.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@org/ietf/jgss/$(DEPDIR)/ChannelBinding.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@org/ietf/jgss/$(DEPDIR)/GSSContext.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@org/ietf/jgss/$(DEPDIR)/GSSCredential.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@org/ietf/jgss/$(DEPDIR)/GSSException.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@org/ietf/jgss/$(DEPDIR)/GSSManager.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@org/ietf/jgss/$(DEPDIR)/GSSName.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@org/ietf/jgss/$(DEPDIR)/MessageProp.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@org/ietf/jgss/$(DEPDIR)/Oid.Plo@am__quote@
! @AMDEP_TRUE@@am__include@ @am__quote@sysdep/$(DEPDIR)/dwarf2-backtrace.Plo@am__quote@
! 
! .c.o:
! @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \
! @am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
! @am__fastdepCC_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ $<
! 
  .c.obj:
! @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`; \
! @am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
! @am__fastdepCC_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
  
! .c.lo:
! @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`; \
! @am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
! @am__fastdepCC_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Plo"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
! @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$$||'`; \
! @am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
! @am__fastdepCXX_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
! 
  .cc.obj:
! @am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`; \
! @am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
! @am__fastdepCXX_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
! 
  .cc.lo:
! @am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`; \
! @am__fastdepCXX_TRUE@	if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
! @am__fastdepCXX_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Plo"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo: gnu/gcj/xlib/natClip.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natClip.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo `test -f 'gnu/gcj/xlib/natClip.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natClip.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natClip.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natClip.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natClip.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natClip.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo `test -f 'gnu/gcj/xlib/natClip.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natClip.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo: gnu/gcj/xlib/natColormap.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natColormap.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo `test -f 'gnu/gcj/xlib/natColormap.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natColormap.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natColormap.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natColormap.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natColormap.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natColormap.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo `test -f 'gnu/gcj/xlib/natColormap.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natColormap.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.lo: gnu/gcj/xlib/natDisplay.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDisplay.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.lo `test -f 'gnu/gcj/xlib/natDisplay.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natDisplay.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDisplay.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDisplay.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDisplay.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natDisplay.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.lo `test -f 'gnu/gcj/xlib/natDisplay.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natDisplay.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.lo: gnu/gcj/xlib/natDrawable.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDrawable.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.lo `test -f 'gnu/gcj/xlib/natDrawable.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natDrawable.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDrawable.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDrawable.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natDrawable.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natDrawable.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.lo `test -f 'gnu/gcj/xlib/natDrawable.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natDrawable.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natFont.lo: gnu/gcj/xlib/natFont.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natFont.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natFont.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natFont.lo `test -f 'gnu/gcj/xlib/natFont.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natFont.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natFont.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natFont.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natFont.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natFont.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natFont.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natFont.lo `test -f 'gnu/gcj/xlib/natFont.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natFont.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natGC.lo: gnu/gcj/xlib/natGC.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natGC.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natGC.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natGC.lo `test -f 'gnu/gcj/xlib/natGC.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natGC.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natGC.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natGC.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natGC.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natGC.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natGC.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natGC.lo `test -f 'gnu/gcj/xlib/natGC.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natGC.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natPixmap.lo: gnu/gcj/xlib/natPixmap.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natPixmap.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natPixmap.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natPixmap.lo `test -f 'gnu/gcj/xlib/natPixmap.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natPixmap.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natPixmap.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natPixmap.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natPixmap.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natPixmap.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natPixmap.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natPixmap.lo `test -f 'gnu/gcj/xlib/natPixmap.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natPixmap.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natScreen.lo: gnu/gcj/xlib/natScreen.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natScreen.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natScreen.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natScreen.lo `test -f 'gnu/gcj/xlib/natScreen.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natScreen.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natScreen.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natScreen.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natScreen.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natScreen.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natScreen.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natScreen.lo `test -f 'gnu/gcj/xlib/natScreen.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natScreen.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natVisual.lo: gnu/gcj/xlib/natVisual.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natVisual.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natVisual.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natVisual.lo `test -f 'gnu/gcj/xlib/natVisual.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natVisual.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natVisual.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natVisual.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natVisual.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natVisual.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natVisual.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natVisual.lo `test -f 'gnu/gcj/xlib/natVisual.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natVisual.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWMSizeHints.lo: gnu/gcj/xlib/natWMSizeHints.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWMSizeHints.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWMSizeHints.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWMSizeHints.lo `test -f 'gnu/gcj/xlib/natWMSizeHints.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natWMSizeHints.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWMSizeHints.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWMSizeHints.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWMSizeHints.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natWMSizeHints.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWMSizeHints.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWMSizeHints.lo `test -f 'gnu/gcj/xlib/natWMSizeHints.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natWMSizeHints.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindow.lo: gnu/gcj/xlib/natWindow.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindow.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindow.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindow.lo `test -f 'gnu/gcj/xlib/natWindow.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natWindow.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindow.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindow.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindow.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natWindow.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindow.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindow.lo `test -f 'gnu/gcj/xlib/natWindow.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natWindow.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindowAttributes.lo: gnu/gcj/xlib/natWindowAttributes.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindowAttributes.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindowAttributes.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindowAttributes.lo `test -f 'gnu/gcj/xlib/natWindowAttributes.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natWindowAttributes.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindowAttributes.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindowAttributes.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natWindowAttributes.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natWindowAttributes.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindowAttributes.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natWindowAttributes.lo `test -f 'gnu/gcj/xlib/natWindowAttributes.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natWindowAttributes.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXAnyEvent.lo: gnu/gcj/xlib/natXAnyEvent.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXAnyEvent.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXAnyEvent.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXAnyEvent.lo `test -f 'gnu/gcj/xlib/natXAnyEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXAnyEvent.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXAnyEvent.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXAnyEvent.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXAnyEvent.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natXAnyEvent.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXAnyEvent.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXAnyEvent.lo `test -f 'gnu/gcj/xlib/natXAnyEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXAnyEvent.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXButtonEvent.lo: gnu/gcj/xlib/natXButtonEvent.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXButtonEvent.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXButtonEvent.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXButtonEvent.lo `test -f 'gnu/gcj/xlib/natXButtonEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXButtonEvent.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXButtonEvent.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXButtonEvent.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXButtonEvent.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natXButtonEvent.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXButtonEvent.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXButtonEvent.lo `test -f 'gnu/gcj/xlib/natXButtonEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXButtonEvent.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXColor.lo: gnu/gcj/xlib/natXColor.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXColor.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXColor.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXColor.lo `test -f 'gnu/gcj/xlib/natXColor.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXColor.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXColor.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXColor.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXColor.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natXColor.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXColor.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXColor.lo `test -f 'gnu/gcj/xlib/natXColor.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXColor.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXConfigureEvent.lo: gnu/gcj/xlib/natXConfigureEvent.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXConfigureEvent.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXConfigureEvent.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXConfigureEvent.lo `test -f 'gnu/gcj/xlib/natXConfigureEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXConfigureEvent.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXConfigureEvent.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXConfigureEvent.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXConfigureEvent.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natXConfigureEvent.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXConfigureEvent.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXConfigureEvent.lo `test -f 'gnu/gcj/xlib/natXConfigureEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXConfigureEvent.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXException.lo: gnu/gcj/xlib/natXException.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXException.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXException.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXException.lo `test -f 'gnu/gcj/xlib/natXException.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXException.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXException.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXException.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXException.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natXException.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXException.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXException.lo `test -f 'gnu/gcj/xlib/natXException.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXException.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.lo: gnu/gcj/xlib/natXExposeEvent.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXExposeEvent.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.lo `test -f 'gnu/gcj/xlib/natXExposeEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXExposeEvent.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXExposeEvent.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXExposeEvent.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXExposeEvent.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natXExposeEvent.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.lo `test -f 'gnu/gcj/xlib/natXExposeEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXExposeEvent.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.lo: gnu/gcj/xlib/natXImage.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXImage.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.lo `test -f 'gnu/gcj/xlib/natXImage.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXImage.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXImage.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXImage.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXImage.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natXImage.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.lo `test -f 'gnu/gcj/xlib/natXImage.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXImage.cc
! 
! gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo: gnu/gcj/xlib/natXUnmapEvent.cc
! @am__fastdepCXX_TRUE@	if $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo -MD -MP -MF "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXUnmapEvent.Tpo" -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo `test -f 'gnu/gcj/xlib/natXUnmapEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXUnmapEvent.cc; \
! @am__fastdepCXX_TRUE@	then mv -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXUnmapEvent.Tpo" "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXUnmapEvent.Plo"; else rm -f "gnu/gcj/xlib/$(DEPDIR)/lib_gnu_awt_xlib_la-natXUnmapEvent.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gnu/gcj/xlib/natXUnmapEvent.cc' object='gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepCXX_FALSE@	$(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_gnu_awt_xlib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo `test -f 'gnu/gcj/xlib/natXUnmapEvent.cc' || echo '$(srcdir)/'`gnu/gcj/xlib/natXUnmapEvent.cc
! 
! .java.o:
! @am__fastdepGCJ_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \
! @am__fastdepGCJ_TRUE@	if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
! @am__fastdepGCJ_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepGCJ_FALSE@	$(GCJCOMPILE) -c -o $@ $<
! 
! .java.obj:
! @am__fastdepGCJ_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`; \
! @am__fastdepGCJ_TRUE@	if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
! @am__fastdepGCJ_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepGCJ_FALSE@	$(GCJCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
! 
! .java.lo:
! @am__fastdepGCJ_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`; \
! @am__fastdepGCJ_TRUE@	if $(LTGCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
! @am__fastdepGCJ_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Plo"; else rm -f "$$depbase.Tpo"; exit 1; fi
! @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
! @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
! @am__fastdepGCJ_FALSE@	$(LTGCJCOMPILE) -c -o $@ $<
! 
! mostlyclean-libtool:
! 	-rm -f *.lo
! 
! clean-libtool:
! 	-rm -rf .libs _libs
! 	-rm -rf gnu/awt/.libs gnu/awt/_libs
! 	-rm -rf gnu/awt/j2d/.libs gnu/awt/j2d/_libs
! 	-rm -rf gnu/awt/xlib/.libs gnu/awt/xlib/_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
! 	-rm -rf gnu/gcj/runtime/.libs gnu/gcj/runtime/_libs
! 	-rm -rf gnu/gcj/util/.libs gnu/gcj/util/_libs
! 	-rm -rf gnu/gcj/xlib/.libs gnu/gcj/xlib/_libs
! 	-rm -rf gnu/java/awt/.libs gnu/java/awt/_libs
! 	-rm -rf gnu/java/awt/color/.libs gnu/java/awt/color/_libs
! 	-rm -rf gnu/java/awt/image/.libs gnu/java/awt/image/_libs
! 	-rm -rf gnu/java/awt/peer/.libs gnu/java/awt/peer/_libs
! 	-rm -rf gnu/java/io/.libs gnu/java/io/_libs
! 	-rm -rf gnu/java/lang/.libs gnu/java/lang/_libs
! 	-rm -rf gnu/java/lang/reflect/.libs gnu/java/lang/reflect/_libs
! 	-rm -rf gnu/java/locale/.libs gnu/java/locale/_libs
! 	-rm -rf gnu/java/math/.libs gnu/java/math/_libs
! 	-rm -rf gnu/java/net/.libs gnu/java/net/_libs
! 	-rm -rf gnu/java/net/protocol/core/.libs gnu/java/net/protocol/core/_libs
! 	-rm -rf gnu/java/net/protocol/file/.libs gnu/java/net/protocol/file/_libs
! 	-rm -rf gnu/java/net/protocol/ftp/.libs gnu/java/net/protocol/ftp/_libs
! 	-rm -rf gnu/java/net/protocol/gcjlib/.libs gnu/java/net/protocol/gcjlib/_libs
! 	-rm -rf gnu/java/net/protocol/http/.libs gnu/java/net/protocol/http/_libs
! 	-rm -rf gnu/java/net/protocol/http/event/.libs gnu/java/net/protocol/http/event/_libs
! 	-rm -rf gnu/java/net/protocol/jar/.libs gnu/java/net/protocol/jar/_libs
! 	-rm -rf gnu/java/nio/.libs gnu/java/nio/_libs
! 	-rm -rf gnu/java/nio/channels/.libs gnu/java/nio/channels/_libs
! 	-rm -rf gnu/java/nio/charset/.libs gnu/java/nio/charset/_libs
! 	-rm -rf gnu/java/rmi/.libs gnu/java/rmi/_libs
! 	-rm -rf gnu/java/rmi/dgc/.libs gnu/java/rmi/dgc/_libs
! 	-rm -rf gnu/java/rmi/registry/.libs gnu/java/rmi/registry/_libs
! 	-rm -rf gnu/java/rmi/rmic/.libs gnu/java/rmi/rmic/_libs
! 	-rm -rf gnu/java/rmi/server/.libs gnu/java/rmi/server/_libs
! 	-rm -rf gnu/java/security/.libs gnu/java/security/_libs
! 	-rm -rf gnu/java/security/action/.libs gnu/java/security/action/_libs
! 	-rm -rf gnu/java/security/ber/.libs gnu/java/security/ber/_libs
! 	-rm -rf gnu/java/security/der/.libs gnu/java/security/der/_libs
! 	-rm -rf gnu/java/security/pkcs/.libs gnu/java/security/pkcs/_libs
! 	-rm -rf gnu/java/security/provider/.libs gnu/java/security/provider/_libs
! 	-rm -rf gnu/java/security/util/.libs gnu/java/security/util/_libs
! 	-rm -rf gnu/java/security/x509/.libs gnu/java/security/x509/_libs
! 	-rm -rf gnu/java/security/x509/ext/.libs gnu/java/security/x509/ext/_libs
! 	-rm -rf gnu/java/text/.libs gnu/java/text/_libs
! 	-rm -rf gnu/java/util/.libs gnu/java/util/_libs
! 	-rm -rf gnu/java/util/prefs/.libs gnu/java/util/prefs/_libs
! 	-rm -rf gnu/regexp/.libs gnu/regexp/_libs
! 	-rm -rf java/applet/.libs java/applet/_libs
! 	-rm -rf java/awt/.libs java/awt/_libs
! 	-rm -rf java/awt/color/.libs java/awt/color/_libs
! 	-rm -rf java/awt/datatransfer/.libs java/awt/datatransfer/_libs
! 	-rm -rf java/awt/dnd/.libs java/awt/dnd/_libs
! 	-rm -rf java/awt/dnd/peer/.libs java/awt/dnd/peer/_libs
! 	-rm -rf java/awt/event/.libs java/awt/event/_libs
! 	-rm -rf java/awt/font/.libs java/awt/font/_libs
! 	-rm -rf java/awt/geom/.libs java/awt/geom/_libs
! 	-rm -rf java/awt/im/.libs java/awt/im/_libs
! 	-rm -rf java/awt/im/spi/.libs java/awt/im/spi/_libs
! 	-rm -rf java/awt/image/.libs java/awt/image/_libs
! 	-rm -rf java/awt/image/renderable/.libs java/awt/image/renderable/_libs
! 	-rm -rf java/awt/peer/.libs java/awt/peer/_libs
! 	-rm -rf java/awt/print/.libs java/awt/print/_libs
! 	-rm -rf java/beans/.libs java/beans/_libs
! 	-rm -rf java/beans/beancontext/.libs java/beans/beancontext/_libs
! 	-rm -rf java/io/.libs java/io/_libs
! 	-rm -rf java/lang/.libs java/lang/_libs
! 	-rm -rf java/lang/ref/.libs java/lang/ref/_libs
! 	-rm -rf java/lang/reflect/.libs java/lang/reflect/_libs
! 	-rm -rf java/math/.libs java/math/_libs
! 	-rm -rf java/net/.libs java/net/_libs
! 	-rm -rf java/nio/.libs java/nio/_libs
! 	-rm -rf java/nio/channels/.libs java/nio/channels/_libs
! 	-rm -rf java/nio/channels/spi/.libs java/nio/channels/spi/_libs
! 	-rm -rf java/nio/charset/.libs java/nio/charset/_libs
! 	-rm -rf java/nio/charset/spi/.libs java/nio/charset/spi/_libs
! 	-rm -rf java/rmi/.libs java/rmi/_libs
! 	-rm -rf java/rmi/activation/.libs java/rmi/activation/_libs
! 	-rm -rf java/rmi/dgc/.libs java/rmi/dgc/_libs
! 	-rm -rf java/rmi/registry/.libs java/rmi/registry/_libs
! 	-rm -rf java/rmi/server/.libs java/rmi/server/_libs
! 	-rm -rf java/security/.libs java/security/_libs
! 	-rm -rf java/security/acl/.libs java/security/acl/_libs
! 	-rm -rf java/security/cert/.libs java/security/cert/_libs
! 	-rm -rf java/security/interfaces/.libs java/security/interfaces/_libs
! 	-rm -rf java/security/spec/.libs java/security/spec/_libs
! 	-rm -rf java/sql/.libs java/sql/_libs
! 	-rm -rf java/text/.libs java/text/_libs
! 	-rm -rf java/util/.libs java/util/_libs
! 	-rm -rf java/util/jar/.libs java/util/jar/_libs
! 	-rm -rf java/util/logging/.libs java/util/logging/_libs
! 	-rm -rf java/util/prefs/.libs java/util/prefs/_libs
! 	-rm -rf java/util/regex/.libs java/util/regex/_libs
! 	-rm -rf java/util/zip/.libs java/util/zip/_libs
! 	-rm -rf javax/accessibility/.libs javax/accessibility/_libs
! 	-rm -rf javax/crypto/.libs javax/crypto/_libs
! 	-rm -rf javax/crypto/interfaces/.libs javax/crypto/interfaces/_libs
! 	-rm -rf javax/crypto/spec/.libs javax/crypto/spec/_libs
! 	-rm -rf javax/naming/.libs javax/naming/_libs
! 	-rm -rf javax/naming/directory/.libs javax/naming/directory/_libs
! 	-rm -rf javax/naming/event/.libs javax/naming/event/_libs
! 	-rm -rf javax/naming/ldap/.libs javax/naming/ldap/_libs
! 	-rm -rf javax/naming/spi/.libs javax/naming/spi/_libs
! 	-rm -rf javax/net/.libs javax/net/_libs
! 	-rm -rf javax/net/ssl/.libs javax/net/ssl/_libs
! 	-rm -rf javax/print/.libs javax/print/_libs
! 	-rm -rf javax/print/attribute/.libs javax/print/attribute/_libs
! 	-rm -rf javax/print/attribute/standard/.libs javax/print/attribute/standard/_libs
! 	-rm -rf javax/print/event/.libs javax/print/event/_libs
! 	-rm -rf javax/security/auth/.libs javax/security/auth/_libs
! 	-rm -rf javax/security/auth/callback/.libs javax/security/auth/callback/_libs
! 	-rm -rf javax/security/auth/login/.libs javax/security/auth/login/_libs
! 	-rm -rf javax/security/auth/spi/.libs javax/security/auth/spi/_libs
! 	-rm -rf javax/security/auth/x500/.libs javax/security/auth/x500/_libs
! 	-rm -rf javax/security/cert/.libs javax/security/cert/_libs
! 	-rm -rf javax/security/sasl/.libs javax/security/sasl/_libs
! 	-rm -rf javax/sql/.libs javax/sql/_libs
! 	-rm -rf javax/swing/.libs javax/swing/_libs
! 	-rm -rf javax/swing/border/.libs javax/swing/border/_libs
! 	-rm -rf javax/swing/colorchooser/.libs javax/swing/colorchooser/_libs
! 	-rm -rf javax/swing/event/.libs javax/swing/event/_libs
! 	-rm -rf javax/swing/filechooser/.libs javax/swing/filechooser/_libs
! 	-rm -rf javax/swing/plaf/.libs javax/swing/plaf/_libs
! 	-rm -rf javax/swing/plaf/basic/.libs javax/swing/plaf/basic/_libs
! 	-rm -rf javax/swing/plaf/metal/.libs javax/swing/plaf/metal/_libs
! 	-rm -rf javax/swing/table/.libs javax/swing/table/_libs
! 	-rm -rf javax/swing/text/.libs javax/swing/text/_libs
! 	-rm -rf javax/swing/text/html/.libs javax/swing/text/html/_libs
! 	-rm -rf javax/swing/text/html/parser/.libs javax/swing/text/html/parser/_libs
! 	-rm -rf javax/swing/tree/.libs javax/swing/tree/_libs
! 	-rm -rf javax/swing/undo/.libs javax/swing/undo/_libs
! 	-rm -rf javax/transaction/.libs javax/transaction/_libs
! 	-rm -rf javax/transaction/xa/.libs javax/transaction/xa/_libs
! 	-rm -rf jni/classpath/.libs jni/classpath/_libs
! 	-rm -rf jni/gtk-peer/.libs jni/gtk-peer/_libs
! 	-rm -rf org/ietf/jgss/.libs org/ietf/jgss/_libs
! 	-rm -rf sysdep/.libs sysdep/_libs
! 
! distclean-libtool:
! 	-rm -f libtool
! uninstall-info-am:
! install-dbexecDATA: $(dbexec_DATA)
! 	@$(NORMAL_INSTALL)
! 	test -z "$(dbexecdir)" || $(mkdir_p) "$(DESTDIR)$(dbexecdir)"
! 	@list='$(dbexec_DATA)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(dbexecDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(dbexecdir)/$$f'"; \
! 	  $(dbexecDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(dbexecdir)/$$f"; \
! 	done
  
+ uninstall-dbexecDATA:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(dbexec_DATA)'; for p in $$list; do \
+ 	  f=$(am__strip_dir) \
+ 	  echo " rm -f '$(DESTDIR)$(dbexecdir)/$$f'"; \
+ 	  rm -f "$(DESTDIR)$(dbexecdir)/$$f"; \
+ 	done
  install-jarDATA: $(jar_DATA)
  	@$(NORMAL_INSTALL)
! 	test -z "$(jardir)" || $(mkdir_p) "$(DESTDIR)$(jardir)"
  	@list='$(jar_DATA)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(jarDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(jardir)/$$f'"; \
! 	  $(jarDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(jardir)/$$f"; \
  	done
  
  uninstall-jarDATA:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(jar_DATA)'; for p in $$list; do \
! 	  f=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(jardir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(jardir)/$$f"; \
  	done
  install-pkgconfigDATA: $(pkgconfig_DATA)
  	@$(NORMAL_INSTALL)
! 	test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)"
  	@list='$(pkgconfig_DATA)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
! 	  $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
  	done
  
  uninstall-pkgconfigDATA:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(pkgconfig_DATA)'; for p in $$list; do \
! 	  f=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
  	done
  install-toolexecmainlibDATA: $(toolexecmainlib_DATA)
  	@$(NORMAL_INSTALL)
! 	test -z "$(toolexecmainlibdir)" || $(mkdir_p) "$(DESTDIR)$(toolexecmainlibdir)"
  	@list='$(toolexecmainlib_DATA)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(toolexecmainlibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(toolexecmainlibdir)/$$f'"; \
! 	  $(toolexecmainlibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(toolexecmainlibdir)/$$f"; \
  	done
  
  uninstall-toolexecmainlibDATA:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(toolexecmainlib_DATA)'; for p in $$list; do \
! 	  f=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(toolexecmainlibdir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(toolexecmainlibdir)/$$f"; \
  	done
  
  # This directory's subdirectories are mostly independent; you can cd
*************** uninstall-toolexecmainlibDATA:
*** 4874,4886 ****
  # (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.
! 
! @SET_MAKE@
! 
! all-recursive install-data-recursive install-exec-recursive \
! installdirs-recursive install-recursive uninstall-recursive  \
! check-recursive installcheck-recursive info-recursive dvi-recursive:
! 	@set fnord $(MAKEFLAGS); amf=$$2; \
  	dot_seen=no; \
  	target=`echo $@ | sed s/-recursive//`; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
--- 22651,22658 ----
  # (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 \
*************** check-recursive installcheck-recursive i
*** 4900,4912 ****
  
  mostlyclean-recursive clean-recursive distclean-recursive \
  maintainer-clean-recursive:
! 	@set fnord $(MAKEFLAGS); amf=$$2; \
  	dot_seen=no; \
! 	rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
! 	  rev="$$subdir $$rev"; \
! 	  test "$$subdir" = "." && dot_seen=yes; \
  	done; \
! 	test "$$dot_seen" = "no" && rev=". $$rev"; \
  	target=`echo $@ | sed s/-recursive//`; \
  	for subdir in $$rev; do \
  	  echo "Making $$target in $$subdir"; \
--- 22672,22689 ----
  
  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"; \
*************** tags-recursive:
*** 4922,5223 ****
  	list='$(SUBDIRS)'; for subdir in $$list; do \
  	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
  	done
  
! tags: TAGS
! 
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
  
! TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
  	list='$(SUBDIRS)'; for subdir in $$list; do \
!    if test "$$subdir" = .; then :; else \
! 	    test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
!    fi; \
  	done; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(PACKAGE)-$(VERSION)
! top_distdir = $(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
- 	-rm -rf $(distdir)
- 	GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
- 	mkdir $(distdir)/=build
- 	mkdir $(distdir)/=inst
- 	dc_install_base=`cd $(distdir)/=inst && pwd`; \
- 	cd $(distdir)/=build \
- 	  && ../configure --srcdir=.. --prefix=$$dc_install_base \
- 	  && $(MAKE) $(AM_MAKEFLAGS) \
- 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
- 	  && $(MAKE) $(AM_MAKEFLAGS) check \
- 	  && $(MAKE) $(AM_MAKEFLAGS) install \
- 	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
- 	  && $(MAKE) $(AM_MAKEFLAGS) dist
- 	-rm -rf $(distdir)
- 	@banner="$(distdir).tar.gz is ready for distribution"; \
- 	dashes=`echo "$$banner" | sed s/./=/g`; \
- 	echo "$$dashes"; \
- 	echo "$$banner"; \
- 	echo "$$dashes"
- dist: distdir
- 	-chmod -R a+r $(distdir)
- 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
- 	-rm -rf $(distdir)
- dist-all: distdir
- 	-chmod -R a+r $(distdir)
- 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
- 	-rm -rf $(distdir)
  distdir: $(DISTFILES)
! 	-rm -rf $(distdir)
  	mkdir $(distdir)
! 	-chmod 777 $(distdir)
! 	here=`cd $(top_builddir) && pwd`; \
! 	top_distdir=`cd $(distdir) && pwd`; \
! 	distdir=`cd $(distdir) && pwd`; \
! 	cd $(top_srcdir) \
! 	  && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile
! 	@for file in $(DISTFILES); do \
! 	  d=$(srcdir); \
  	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
  	  else \
  	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
  	  fi; \
  	done
! 	for subdir in $(DIST_SUBDIRS); do \
  	  if test "$$subdir" = .; then :; else \
! 	    test -d $(distdir)/$$subdir \
! 	    || mkdir $(distdir)/$$subdir \
  	    || exit 1; \
! 	    chmod 777 $(distdir)/$$subdir; \
! 	    (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
  	      || exit 1; \
  	  fi; \
  	done
  
! DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
! 
! -include $(DEP_FILES)
! 
! mostlyclean-depend:
! 
! clean-depend:
! 
! distclean-depend:
! 	-rm -rf .deps
  
! maintainer-clean-depend:
  
! %.o: %.c
! 	@echo '$(COMPILE) -c $<'; \
! 	$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
! 	@-cp .deps/$(*F).pp .deps/$(*F).P; \
! 	tr ' ' '\012' < .deps/$(*F).pp \
! 	  | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
! 	    >> .deps/$(*F).P; \
! 	rm .deps/$(*F).pp
  
! %.lo: %.c
! 	@echo '$(LTCOMPILE) -c $<'; \
! 	$(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
! 	@-sed -e 's/^\([^:]*\)\.o[ 	]*:/\1.lo \1.o :/' \
! 	  < .deps/$(*F).pp > .deps/$(*F).P; \
! 	tr ' ' '\012' < .deps/$(*F).pp \
! 	  | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
! 	    >> .deps/$(*F).P; \
! 	rm -f .deps/$(*F).pp
  
! %.o: %.cc
! 	@echo '$(CXXCOMPILE) -c $<'; \
! 	$(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
! 	@-cp .deps/$(*F).pp .deps/$(*F).P; \
! 	tr ' ' '\012' < .deps/$(*F).pp \
! 	  | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
! 	    >> .deps/$(*F).P; \
! 	rm .deps/$(*F).pp
  
! %.lo: %.cc
! 	@echo '$(LTCXXCOMPILE) -c $<'; \
! 	$(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
! 	@-sed -e 's/^\([^:]*\)\.o[ 	]*:/\1.lo \1.o :/' \
! 	  < .deps/$(*F).pp > .deps/$(*F).P; \
! 	tr ' ' '\012' < .deps/$(*F).pp \
! 	  | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
! 	    >> .deps/$(*F).P; \
! 	rm -f .deps/$(*F).pp
! info-am:
! info: info-recursive
! dvi-am:
! dvi: dvi-recursive
  check-am: all-am
  check: check-recursive
! installcheck-am:
! installcheck: installcheck-recursive
! install-exec-am: install-toolexeclibLTLIBRARIES install-binPROGRAMS \
! 		install-binSCRIPTS install-toolexecmainlibDATA
  install-exec: install-exec-recursive
- 
- install-data-am: install-jarDATA install-pkgconfigDATA \
- 		install-data-local
  install-data: install-data-recursive
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-recursive
- uninstall-am: uninstall-toolexeclibLTLIBRARIES uninstall-binPROGRAMS \
- 		uninstall-binSCRIPTS uninstall-jarDATA \
- 		uninstall-pkgconfigDATA uninstall-toolexecmainlibDATA
- uninstall: uninstall-recursive
- all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA)
- all-redirect: all-recursive
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs: installdirs-recursive
- installdirs-am:
- 	$(mkinstalldirs)  $(DESTDIR)$(toolexeclibdir) $(DESTDIR)$(bindir) \
- 		$(DESTDIR)$(bindir) $(DESTDIR)$(jardir) \
- 		$(DESTDIR)$(pkgconfigdir) \
- 		$(DESTDIR)$(toolexecmainlibdir)
- 
  
  mostlyclean-generic:
- 	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
  
  clean-generic:
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-toolexeclibLTLIBRARIES mostlyclean-compile \
! 		mostlyclean-libtool mostlyclean-binPROGRAMS \
! 		mostlyclean-noinstPROGRAMS mostlyclean-tags \
! 		mostlyclean-depend mostlyclean-generic \
! 		mostlyclean-local
  
! mostlyclean: mostlyclean-recursive
  
! clean-am:  clean-toolexeclibLTLIBRARIES clean-compile clean-libtool \
! 		clean-binPROGRAMS clean-noinstPROGRAMS clean-tags \
! 		clean-depend clean-generic mostlyclean-am clean-local
  
! clean: clean-recursive
  
! distclean-am:  distclean-toolexeclibLTLIBRARIES distclean-compile \
! 		distclean-libtool distclean-binPROGRAMS \
! 		distclean-noinstPROGRAMS distclean-tags \
! 		distclean-depend distclean-generic clean-am \
! 		distclean-local
! 	-rm -f libtool
  
! distclean: distclean-recursive
! 	-rm -f config.status
  
! maintainer-clean-am:  maintainer-clean-toolexeclibLTLIBRARIES \
! 		maintainer-clean-compile maintainer-clean-libtool \
! 		maintainer-clean-binPROGRAMS \
! 		maintainer-clean-noinstPROGRAMS maintainer-clean-tags \
! 		maintainer-clean-depend maintainer-clean-generic \
! 		distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
  maintainer-clean: maintainer-clean-recursive
! 	-rm -f config.status
  
! .PHONY: mostlyclean-toolexeclibLTLIBRARIES \
! distclean-toolexeclibLTLIBRARIES clean-toolexeclibLTLIBRARIES \
! maintainer-clean-toolexeclibLTLIBRARIES \
! uninstall-toolexeclibLTLIBRARIES install-toolexeclibLTLIBRARIES \
! mostlyclean-compile distclean-compile clean-compile \
! maintainer-clean-compile mostlyclean-libtool distclean-libtool \
! clean-libtool maintainer-clean-libtool mostlyclean-binPROGRAMS \
! distclean-binPROGRAMS clean-binPROGRAMS maintainer-clean-binPROGRAMS \
! uninstall-binPROGRAMS install-binPROGRAMS mostlyclean-noinstPROGRAMS \
! distclean-noinstPROGRAMS clean-noinstPROGRAMS \
! maintainer-clean-noinstPROGRAMS uninstall-binSCRIPTS install-binSCRIPTS \
! uninstall-jarDATA install-jarDATA uninstall-pkgconfigDATA \
! install-pkgconfigDATA uninstall-toolexecmainlibDATA \
! install-toolexecmainlibDATA install-data-recursive \
! uninstall-data-recursive install-exec-recursive \
! uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
! all-recursive check-recursive installcheck-recursive info-recursive \
! dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
! maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
! distclean-tags clean-tags maintainer-clean-tags distdir \
! mostlyclean-depend distclean-depend clean-depend \
! maintainer-clean-depend info-am info dvi-am dvi check check-am \
! installcheck-am installcheck install-exec-am install-exec \
! install-data-local install-data-am install-data install-am install \
! uninstall-am uninstall all-redirect all-am all installdirs-am \
! installdirs mostlyclean-generic distclean-generic clean-generic \
! maintainer-clean-generic clean mostlyclean distclean maintainer-clean
  
  
! $(gtk_c_headers): $(gtk_awt_peer_sources)
  	@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
  
  # Compile all classfiles in one go.
  
! @ONESTEP_TRUE@libgcj-@gcc_version@.jar: $(all_java_source_files)
! @ONESTEP_TRUE@	-@rm -f libgcj-@gcc_version@.jar
  @ONESTEP_TRUE@	@echo Compiling Java sourcefiles...
  @ONESTEP_TRUE@	@: $(call write_entries_to_file,$?,libgcj.sourcelist)
! @ONESTEP_TRUE@	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(here):$(srcdir) -d $(here) @libgcj.sourcelist
! @ONESTEP_TRUE@	find java gnu javax org -type d -o -type f -name '*.class' | \
! @ONESTEP_TRUE@	  sed -e '/\/\./d' -e '/\/xlib/d' | \
! @ONESTEP_TRUE@	  $(ZIP) cfM0E@ $@
! 
! # This next rule seems backward, but reflects the fact
! # that 1) all classfiles are compiled in one go when the
! # libgcj jarfile is built and 2) anything which depends
! # on a particular .class file must wait until the jarfile
! # is built.
! @ONESTEP_TRUE@$(all_java_class_files): libgcj-@gcc_version@.jar
  
  # Compile each classfile individually.
  
  @ONESTEP_FALSE@.java.class:
! @ONESTEP_FALSE@	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(here):$(srcdir) -d $(here) $<
  
! @ONESTEP_FALSE@libgcj-@gcc_version@.jar: $(all_java_class_files)
! @ONESTEP_FALSE@	-@rm -f libgcj-@gcc_version@.jar
! @ONESTEP_FALSE@	find java gnu javax org -type d -o -type f -name '*.class' | \
! @ONESTEP_FALSE@	  sed -e '/\/\./d' -e '/\/xlib/d' | \
! @ONESTEP_FALSE@	  $(ZIP) cfM0E@ $@
  
  mostlyclean-local:
  	find . -name '*.lo' -print | xargs $(LIBTOOL) rm -f
  
  clean-local:
  	find . -name '*.class' -print | xargs rm -f
--- 22699,23446 ----
  	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)/.. $(distdir)/../config $(distdir)/gnu/classpath
! 	@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
+ 	-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 $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA)
! installdirs: installdirs-recursive
! installdirs-am:
! 	for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(dbexecdir)" "$(DESTDIR)$(jardir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(toolexecmainlibdir)"; do \
! 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
! 	done
! 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:
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  distclean-generic:
! 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
! 	-rm -f gnu/awt/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/awt/$(am__dirstamp)
! 	-rm -f gnu/awt/j2d/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/awt/j2d/$(am__dirstamp)
! 	-rm -f gnu/awt/xlib/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/awt/xlib/$(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)
! 	-rm -f gnu/gcj/convert/$(am__dirstamp)
! 	-rm -f gnu/gcj/io/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/gcj/io/$(am__dirstamp)
! 	-rm -f gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/gcj/runtime/$(am__dirstamp)
! 	-rm -f gnu/gcj/tools/gcj_dbtool/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/gcj/tools/gcj_dbtool/$(am__dirstamp)
! 	-rm -f gnu/gcj/util/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/gcj/util/$(am__dirstamp)
! 	-rm -f gnu/gcj/xlib/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/gcj/xlib/$(am__dirstamp)
! 	-rm -f gnu/java/awt/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/awt/$(am__dirstamp)
! 	-rm -f gnu/java/awt/color/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/awt/color/$(am__dirstamp)
! 	-rm -f gnu/java/awt/image/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/awt/image/$(am__dirstamp)
! 	-rm -f gnu/java/awt/peer/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/awt/peer/$(am__dirstamp)
! 	-rm -f gnu/java/io/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/io/$(am__dirstamp)
! 	-rm -f gnu/java/lang/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/lang/$(am__dirstamp)
! 	-rm -f gnu/java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/lang/reflect/$(am__dirstamp)
! 	-rm -f gnu/java/locale/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/locale/$(am__dirstamp)
! 	-rm -f gnu/java/math/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/math/$(am__dirstamp)
! 	-rm -f gnu/java/net/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/net/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/core/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/core/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/file/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/file/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/ftp/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/gcjlib/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/gcjlib/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/http/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/http/event/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/http/event/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/jar/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/net/protocol/jar/$(am__dirstamp)
! 	-rm -f gnu/java/nio/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/nio/$(am__dirstamp)
! 	-rm -f gnu/java/nio/channels/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/nio/channels/$(am__dirstamp)
! 	-rm -f gnu/java/nio/charset/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/nio/charset/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/dgc/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/registry/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/rmic/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/rmic/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/server/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/rmi/server/$(am__dirstamp)
! 	-rm -f gnu/java/security/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/security/$(am__dirstamp)
! 	-rm -f gnu/java/security/action/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/security/action/$(am__dirstamp)
! 	-rm -f gnu/java/security/ber/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/security/ber/$(am__dirstamp)
! 	-rm -f gnu/java/security/der/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/security/der/$(am__dirstamp)
! 	-rm -f gnu/java/security/pkcs/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/security/pkcs/$(am__dirstamp)
! 	-rm -f gnu/java/security/provider/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/security/provider/$(am__dirstamp)
! 	-rm -f gnu/java/security/util/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/security/util/$(am__dirstamp)
! 	-rm -f gnu/java/security/x509/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/security/x509/$(am__dirstamp)
! 	-rm -f gnu/java/security/x509/ext/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/security/x509/ext/$(am__dirstamp)
! 	-rm -f gnu/java/text/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/text/$(am__dirstamp)
! 	-rm -f gnu/java/util/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/util/$(am__dirstamp)
! 	-rm -f gnu/java/util/prefs/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/java/util/prefs/$(am__dirstamp)
! 	-rm -f gnu/regexp/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f gnu/regexp/$(am__dirstamp)
! 	-rm -f java/applet/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/applet/$(am__dirstamp)
! 	-rm -f java/awt/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/$(am__dirstamp)
! 	-rm -f java/awt/color/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/color/$(am__dirstamp)
! 	-rm -f java/awt/datatransfer/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/datatransfer/$(am__dirstamp)
! 	-rm -f java/awt/dnd/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/dnd/$(am__dirstamp)
! 	-rm -f java/awt/dnd/peer/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/dnd/peer/$(am__dirstamp)
! 	-rm -f java/awt/event/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/event/$(am__dirstamp)
! 	-rm -f java/awt/font/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/font/$(am__dirstamp)
! 	-rm -f java/awt/geom/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/geom/$(am__dirstamp)
! 	-rm -f java/awt/im/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/im/$(am__dirstamp)
! 	-rm -f java/awt/im/spi/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/im/spi/$(am__dirstamp)
! 	-rm -f java/awt/image/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/image/$(am__dirstamp)
! 	-rm -f java/awt/image/renderable/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/image/renderable/$(am__dirstamp)
! 	-rm -f java/awt/peer/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/peer/$(am__dirstamp)
! 	-rm -f java/awt/print/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/awt/print/$(am__dirstamp)
! 	-rm -f java/beans/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/beans/$(am__dirstamp)
! 	-rm -f java/beans/beancontext/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/beans/beancontext/$(am__dirstamp)
! 	-rm -f java/io/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/io/$(am__dirstamp)
! 	-rm -f java/lang/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/lang/$(am__dirstamp)
! 	-rm -f java/lang/ref/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/lang/ref/$(am__dirstamp)
! 	-rm -f java/lang/reflect/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/lang/reflect/$(am__dirstamp)
! 	-rm -f java/math/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/math/$(am__dirstamp)
! 	-rm -f java/net/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/net/$(am__dirstamp)
! 	-rm -f java/nio/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/nio/$(am__dirstamp)
! 	-rm -f java/nio/channels/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/nio/channels/$(am__dirstamp)
! 	-rm -f java/nio/channels/spi/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/nio/channels/spi/$(am__dirstamp)
! 	-rm -f java/nio/charset/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/nio/charset/$(am__dirstamp)
! 	-rm -f java/nio/charset/spi/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/nio/charset/spi/$(am__dirstamp)
! 	-rm -f java/rmi/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/rmi/$(am__dirstamp)
! 	-rm -f java/rmi/activation/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/rmi/activation/$(am__dirstamp)
! 	-rm -f java/rmi/dgc/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/rmi/dgc/$(am__dirstamp)
! 	-rm -f java/rmi/registry/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/rmi/registry/$(am__dirstamp)
! 	-rm -f java/rmi/server/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/rmi/server/$(am__dirstamp)
! 	-rm -f java/security/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/security/$(am__dirstamp)
! 	-rm -f java/security/acl/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/security/acl/$(am__dirstamp)
! 	-rm -f java/security/cert/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/security/cert/$(am__dirstamp)
! 	-rm -f java/security/interfaces/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/security/interfaces/$(am__dirstamp)
! 	-rm -f java/security/spec/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/security/spec/$(am__dirstamp)
! 	-rm -f java/sql/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/sql/$(am__dirstamp)
! 	-rm -f java/text/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/text/$(am__dirstamp)
! 	-rm -f java/util/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/util/$(am__dirstamp)
! 	-rm -f java/util/jar/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/util/jar/$(am__dirstamp)
! 	-rm -f java/util/logging/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/util/logging/$(am__dirstamp)
! 	-rm -f java/util/prefs/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/util/prefs/$(am__dirstamp)
! 	-rm -f java/util/regex/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/util/regex/$(am__dirstamp)
! 	-rm -f java/util/zip/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f java/util/zip/$(am__dirstamp)
! 	-rm -f javax/accessibility/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/accessibility/$(am__dirstamp)
! 	-rm -f javax/crypto/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/crypto/$(am__dirstamp)
! 	-rm -f javax/crypto/interfaces/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/crypto/interfaces/$(am__dirstamp)
! 	-rm -f javax/crypto/spec/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/crypto/spec/$(am__dirstamp)
! 	-rm -f javax/naming/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/naming/$(am__dirstamp)
! 	-rm -f javax/naming/directory/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/naming/directory/$(am__dirstamp)
! 	-rm -f javax/naming/event/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/naming/event/$(am__dirstamp)
! 	-rm -f javax/naming/ldap/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/naming/ldap/$(am__dirstamp)
! 	-rm -f javax/naming/spi/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/naming/spi/$(am__dirstamp)
! 	-rm -f javax/net/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/net/$(am__dirstamp)
! 	-rm -f javax/net/ssl/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/net/ssl/$(am__dirstamp)
! 	-rm -f javax/print/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/print/$(am__dirstamp)
! 	-rm -f javax/print/attribute/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/print/attribute/$(am__dirstamp)
! 	-rm -f javax/print/attribute/standard/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/print/attribute/standard/$(am__dirstamp)
! 	-rm -f javax/print/event/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/print/event/$(am__dirstamp)
! 	-rm -f javax/security/auth/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/security/auth/$(am__dirstamp)
! 	-rm -f javax/security/auth/callback/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/security/auth/callback/$(am__dirstamp)
! 	-rm -f javax/security/auth/login/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/security/auth/login/$(am__dirstamp)
! 	-rm -f javax/security/auth/spi/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/security/auth/spi/$(am__dirstamp)
! 	-rm -f javax/security/auth/x500/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/security/auth/x500/$(am__dirstamp)
! 	-rm -f javax/security/cert/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/security/cert/$(am__dirstamp)
! 	-rm -f javax/security/sasl/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/security/sasl/$(am__dirstamp)
! 	-rm -f javax/sql/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/sql/$(am__dirstamp)
! 	-rm -f javax/swing/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/$(am__dirstamp)
! 	-rm -f javax/swing/border/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/border/$(am__dirstamp)
! 	-rm -f javax/swing/colorchooser/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/colorchooser/$(am__dirstamp)
! 	-rm -f javax/swing/event/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/event/$(am__dirstamp)
! 	-rm -f javax/swing/filechooser/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/filechooser/$(am__dirstamp)
! 	-rm -f javax/swing/plaf/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/plaf/$(am__dirstamp)
! 	-rm -f javax/swing/plaf/basic/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/plaf/basic/$(am__dirstamp)
! 	-rm -f javax/swing/plaf/metal/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/plaf/metal/$(am__dirstamp)
! 	-rm -f javax/swing/table/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/table/$(am__dirstamp)
! 	-rm -f javax/swing/text/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/text/$(am__dirstamp)
! 	-rm -f javax/swing/text/html/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/text/html/$(am__dirstamp)
! 	-rm -f javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/text/html/parser/$(am__dirstamp)
! 	-rm -f javax/swing/tree/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/tree/$(am__dirstamp)
! 	-rm -f javax/swing/undo/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/swing/undo/$(am__dirstamp)
! 	-rm -f javax/transaction/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/transaction/$(am__dirstamp)
! 	-rm -f javax/transaction/xa/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f javax/transaction/xa/$(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 org/ietf/jgss/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f org/ietf/jgss/$(am__dirstamp)
! 	-rm -f sysdep/$(DEPDIR)/$(am__dirstamp)
! 	-rm -f sysdep/$(am__dirstamp)
  
  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-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/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(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/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/ftp/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/regexp/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
! 	-rm -f Makefile
! distclean-am: clean-am distclean-compile distclean-generic \
! 	distclean-libtool distclean-local distclean-tags
  
! dvi: dvi-recursive
  
! dvi-am:
  
! html: html-recursive
  
! info: info-recursive
! 
! info-am:
! 
! install-data-am: install-data-local install-jarDATA \
! 	install-pkgconfigDATA
! 
! install-exec-am: install-binPROGRAMS install-binSCRIPTS \
! 	install-dbexecDATA install-toolexeclibLTLIBRARIES \
! 	install-toolexecmainlibDATA
! 
! 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 -rf ./$(DEPDIR) gnu/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(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/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/ftp/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/regexp/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
! 	-rm -f Makefile
! maintainer-clean-am: distclean-am maintainer-clean-generic
  
! mostlyclean: mostlyclean-recursive
! 
! mostlyclean-am: mostlyclean-compile mostlyclean-generic \
! 	mostlyclean-libtool mostlyclean-local
  
+ pdf: pdf-recursive
  
! pdf-am:
! 
! ps: ps-recursive
! 
! ps-am:
! 
! uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
! 	uninstall-dbexecDATA uninstall-info-am uninstall-jarDATA \
! 	uninstall-pkgconfigDATA uninstall-toolexeclibLTLIBRARIES \
! 	uninstall-toolexecmainlibDATA
! 
! uninstall-info: uninstall-info-recursive
! 
! .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
! 
! 
! $(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 all classfiles in one go.
  
! @ONESTEP_TRUE@classes.stamp: $(all_java_source_files) gnu/gcj/tools/gcj_dbtool/Main.java
  @ONESTEP_TRUE@	@echo Compiling Java sourcefiles...
  @ONESTEP_TRUE@	@: $(call write_entries_to_file,$?,libgcj.sourcelist)
! @ONESTEP_TRUE@	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(BOOTCLASSPATH) -d $(here) @libgcj.sourcelist
! @ONESTEP_TRUE@	echo > classes.stamp
! # This next rule seems backward, but reflects the fact that 1) all
! # classfiles are compiled in one go when classes.stamp is built and 2)
! # anything which depends on a particular .class file must wait until
! # this file is built.
! @ONESTEP_TRUE@$(all_java_class_files) gnu/gcj/tools/gcj_dbtool/Main.class: classes.stamp
  
  # Compile each classfile individually.
  
  @ONESTEP_FALSE@.java.class:
! @ONESTEP_FALSE@	$(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(BOOTCLASSPATH) -d $(here) $<
  
! @ONESTEP_FALSE@classes.stamp: $(all_java_class_files) $(all_property_files)
! @ONESTEP_FALSE@	echo > 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:
*** 5227,5276 ****
  
  # Just remove the objects from C++ sources, for testing the C++ compiler.
  clean-nat:
! 	rm -f $(nat_files) $(x_nat_files)
! 
! .class.lo:
! 	$(GCJCOMPILE) -o $@ $<
! 
! .java.lo:
! 	$(GCJCOMPILE) -o $@ $<
! 
! $(nat_files) $(x_nat_files): %.lo: %.cc
! 	@echo '$(LTCXXCOMPILE) -MD -MT $@ -MF $(@:.lo=.pp) -c -o $@ $<'; \
! 	$(LTCXXCOMPILE) -MD -MT $@ -MF $(@:.lo=.pp) -c -o $@ $<
! 	@-mv $(@:.lo=.pp) $(@:.lo=.d)
! 
! $(c_files): %.lo: %.c
! 	$(LTCOMPILE) -c -o $@ $<
! 
! interpret.lo: interpret.cc
! 	$(LTCXXCOMPILE) -fno-unit-at-a-time -c -o $@ $<
! 
! $(extra_cc_files): %.lo: %.cc
! 	$(LTCXXCOMPILE) -c -o $@ $<
! 
! $(c_files): java/lang/fdlibm.h java/lang/ieeefp.h java/lang/mprec.h
! 
! $(gtk_c_files): %.lo: %.c
! 	$(LTCOMPILE) -c -Ijniinclude -I$(srcdir)/jni/classpath -I$(srcdir)/jni/gtk-peer \
! 	$(GTK_CFLAGS) $(LIBART_CFLAGS) $(CAIRO_LIBS) $(PANGOFT2_LIBS) -o $@ $<
! 
! $(gtk_c_files): $(gtk_c_headers)
! 
! $(filter-out gnu/gcj/runtime/StackTrace.lo, $(javao_files)) $(x_javao_files) $(lib_org_w3c_dom_la_OBJECTS) $(lib_org_xml_sax_la_OBJECTS): %.lo: %.java
! 	$(GCJCOMPILE) -o $@ $<
  
! $(gtk_awt_peer_sources:.java=.lo): %.lo: %.java
! 	$(GCJCOMPILE) -fjni -o $@ $<
  
  gnu/gcj/runtime/StackTrace.lo: gnu/gcj/runtime/StackTrace.java
! 	$(GCJCOMPILE) -fno-optimize-sibling-calls -o $@ $<
  
  libgcj.la: $(libgcj_la_OBJECTS) $(libgcj_la_DEPENDENCIES)
  	@echo Creating list of files to link...
! 	@: $(call write_entries_to_file,$(libgcj_la_OBJECTS) $(libgcj_la_LIBADD),libgcj.objectlist)
  	$(libgcj_la_LINK) -objectlist libgcj.objectlist \
! 	@GCLIBS@ @LIBFFI@ @ZLIBS@ \
  	-rpath $(toolexeclibdir) $(libgcj_la_LDFLAGS) $(LIBS)
  
  lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPENDENCIES)
--- 23450,23468 ----
  
  # Just remove the objects from C++ sources, for testing the C++ compiler.
  clean-nat:
! 	rm -f $(nat_files) $(xlib_nat_files)
  
! $(filter-out gnu/gcj/runtime/StackTrace.lo, $(javao_files)) $(xlib_javao_files): %.lo: %.java
! 	$(LTGCJCOMPILE) -o $@ -c $<
  
  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)
*************** lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_
*** 5279,5293 ****
  	$(lib_gnu_awt_xlib_la_LINK) -objectlist lib_gnu_awt_xlib.objectlist \
  	-rpath $(toolexeclibdir) $(lib_gnu_awt_xlib_la_LDFLAGS) $(LIBS)
  
! .class.h:
  	$(GCJH) -classpath '' -bootclasspath $(top_builddir) $(basename $<)
  
! $(ordinary_nat_headers) $(x_nat_headers): %.h: %.class
  
  java/lang/ClassLoader.h: java/lang/ClassLoader.class
  	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
! 		-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
--- 23471,23512 ----
  	$(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_sources)
! 	$(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
*************** java/lang/Thread.h: java/lang/Thread.cla
*** 5295,5339 ****
  		-prepend 'class _Jv_JNIEnv;' \
  		-prepend '#define _JV_NOT_OWNER 1' \
  		-prepend '#define _JV_INTERRUPTED 2' \
! 		-friend '_Jv_JNIEnv * _Jv_GetCurrentJNIEnv ();' \
! 		-friend 'void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *env);' \
! 		-friend 'void _Jv_ThreadRun (java::lang::Thread* thread);' \
! 		-friend 'jint _Jv_AttachCurrentThread(java::lang::Thread* thread);' \
! 		-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) \
! 	    -friend 'jchar* _Jv_GetStringChars (jstring str);' \
! 	    -friend 'jstring* _Jv_StringFindSlot (jchar*, jint, jint);' \
! 	    -friend 'jstring* _Jv_StringGetSlot (jstring);' \
! 	    -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) \
! 	    -friend 'jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);' \
  	    -friend 'class java::lang::Class;' \
- 	    -friend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    $(basename $<)
  
  java/lang/reflect/Field.h: java/lang/reflect/Field.class
  	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
! 	    -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) \
! 	    -friend 'jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);' \
  	    -friend 'class java::lang::Class;' \
  	    -friend 'class java::io::ObjectInputStream;' \
- 	    -friend 'jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);' \
  	    $(basename $<)
  
  java/lang/reflect/Proxy.h: java/lang/reflect/Proxy.class
--- 23514,23577 ----
  		-prepend 'class _Jv_JNIEnv;' \
  		-prepend '#define _JV_NOT_OWNER 1' \
  		-prepend '#define _JV_INTERRUPTED 2' \
! 		-prepend '_Jv_JNIEnv * _Jv_GetCurrentJNIEnv ();' \
! 		-prepend 'void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *env);' \
! 		-prepend 'void _Jv_ThreadRun (java::lang::Thread* thread);' \
! 		-prepend 'jint _Jv_AttachCurrentThread(java::lang::Thread* thread);' \
! 		-prepend 'java::lang::Thread* _Jv_AttachCurrentThread (jstring name, java::lang::ThreadGroup* group);' \
! 		-prepend 'java::lang::Thread* _Jv_AttachCurrentThreadAsDaemon (jstring name, java::lang::ThreadGroup* group);' \
! 		-prepend 'jint _Jv_DetachCurrentThread ();' \
! 		-friend '_Jv_JNIEnv * ::_Jv_GetCurrentJNIEnv ();' \
! 		-friend 'void ::_Jv_SetCurrentJNIEnv (_Jv_JNIEnv *env);' \
! 		-friend 'void ::_Jv_ThreadRun (java::lang::Thread* thread);' \
! 		-friend 'jint (::_Jv_AttachCurrentThread) (java::lang::Thread* thread);' \
! 		-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);' \
! 	    -prepend 'jstring _Jv_NewStringUtf8Const (_Jv_Utf8Const* str);' \
! 	    -prepend 'jstring _Jv_NewStringLatin1 (const char*, jsize);' \
! 	    -prepend 'jstring _Jv_AllocString (jsize);' \
! 	    -friend 'jchar* ::_Jv_GetStringChars (jstring str);' \
! 	    -friend 'jstring* ::_Jv_StringFindSlot (jchar*, jint, jint);' \
! 	    -friend 'jstring* ::_Jv_StringGetSlot (jstring);' \
! 	    -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
*************** java/lang/reflect/Proxy$$ProxyType.h: ja
*** 5348,5354 ****
  	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	'java/lang/reflect/Proxy$$ProxyType'
  
! gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class
  	$(GCJH) -classpath '' -bootclasspath $(top_builddir) \
  	    -friend 'class ::java::lang::ClassLoader;' \
  	    $(basename $<)
--- 23586,23592 ----
  	$(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/ObjectOutputStream$$PutField.h: 
*** 5361,5366 ****
--- 23599,23616 ----
  	$(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$$SocketOutp
*** 5369,5374 ****
--- 23619,23636 ----
  	$(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:
  	@:
  
*************** install-data-local:
*** 5378,5387 ****
  	@: $(call write_entries_to_file,$(nat_headers_install) $(extra_headers),tmp-ilist)
  	@cat tmp-ilist | while read f; do \
  	  d="`echo $$f | sed -e 's,/[^/]*$$,,'`"; \
! 	  $(mkinstalldirs) $(DESTDIR)$(includedir)/$$d; \
  	  if test -f $(srcdir)/$$f; then p=$(srcdir)/$$f; else p=$$f; fi; \
! 	  echo " $(INSTALL_DATA) $$p $(DESTDIR)$(includedir)/$$f"; \
! 	  $(INSTALL_DATA) $$p $(DESTDIR)$(includedir)/$$f; \
  	done
  	-@rm -f tmp-ilist
  	$(mkinstalldirs) $(DESTDIR)$(secdir)
--- 23640,23649 ----
  	@: $(call write_entries_to_file,$(nat_headers_install) $(extra_headers),tmp-ilist)
  	@cat tmp-ilist | while read f; do \
  	  d="`echo $$f | sed -e 's,/[^/]*$$,,'`"; \
! 	  $(mkinstalldirs) $(DESTDIR)$(gxx_include_dir)/$$d; \
  	  if test -f $(srcdir)/$$f; then p=$(srcdir)/$$f; else p=$$f; fi; \
! 	  echo " $(INSTALL_DATA) $$p $(DESTDIR)$(gxx_include_dir)/$$f"; \
! 	  $(INSTALL_DATA) $$p $(DESTDIR)$(gxx_include_dir)/$$f; \
  	done
  	-@rm -f tmp-ilist
  	$(mkinstalldirs) $(DESTDIR)$(secdir)
*************** install-data-local:
*** 5389,5401 ****
  	  echo " $(INSTALL_DATA) $(srcdir)/java/security/$$f $(DESTDIR)$(secdir)/$$f"; \
  	  $(INSTALL_DATA) $(srcdir)/java/security/$$f $(DESTDIR)$(secdir)/$$f; \
  	done
- 	$(INSTALL_DATA) 'java/io/ObjectOutputStream$$PutField.h' $(DESTDIR)$(includedir)/java/io/
- 	$(INSTALL_DATA) 'java/io/ObjectInputStream$$GetField.h' $(DESTDIR)$(includedir)/java/io/
- 	$(INSTALL_DATA) 'java/lang/reflect/Proxy$$ProxyData.h' $(DESTDIR)$(includedir)/java/lang/reflect/
- 	$(INSTALL_DATA) 'java/lang/reflect/Proxy$$ProxyType.h' $(DESTDIR)$(includedir)/java/lang/reflect/
- 	$(INSTALL_DATA) 'gnu/java/net/PlainSocketImpl$$SocketInputStream.h' $(DESTDIR)$(includedir)/gnu/java/net/
- 	$(INSTALL_DATA) 'gnu/java/net/PlainSocketImpl$$SocketOutputStream.h' $(DESTDIR)$(includedir)/gnu/java/net/
  	$(INSTALL_DATA) $(srcdir)/java/util/logging/logging.properties $(DESTDIR)$(propdir)/logging.properties
  
  maintainer-check: libgcj.la
  	$(NM) .libs/libgcj.a | grep ' T ' \
--- 23651,23667 ----
  	  echo " $(INSTALL_DATA) $(srcdir)/java/security/$$f $(DESTDIR)$(secdir)/$$f"; \
  	  $(INSTALL_DATA) $(srcdir)/java/security/$$f $(DESTDIR)$(secdir)/$$f; \
  	done
  	$(INSTALL_DATA) $(srcdir)/java/util/logging/logging.properties $(DESTDIR)$(propdir)/logging.properties
+ 	$(INSTALL_DATA) 'java/io/ObjectOutputStream$$PutField.h' $(DESTDIR)$(gxx_include_dir)/java/io/
+ 	$(INSTALL_DATA) 'java/io/ObjectInputStream$$GetField.h' $(DESTDIR)$(gxx_include_dir)/java/io/
+ 	$(INSTALL_DATA) 'java/nio/channels/Pipe$$SinkChannel.h' $(DESTDIR)$(gxx_include_dir)/java/nio/channels/
+ 	$(INSTALL_DATA) 'java/nio/channels/Pipe$$SourceChannel.h' $(DESTDIR)$(gxx_include_dir)/java/nio/channels/
+ 	$(INSTALL_DATA) 'java/lang/reflect/Proxy$$ProxyData.h' $(DESTDIR)$(gxx_include_dir)/java/lang/reflect/
+ 	$(INSTALL_DATA) 'java/lang/reflect/Proxy$$ProxyType.h' $(DESTDIR)$(gxx_include_dir)/java/lang/reflect/
+ 	$(INSTALL_DATA) 'gnu/java/net/PlainSocketImpl$$SocketInputStream.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/net/
+ 	$(INSTALL_DATA) 'gnu/java/net/PlainSocketImpl$$SocketOutputStream.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/net/
+ 	$(INSTALL_DATA) 'gnu/java/nio/PipeImpl$$SinkChannelImpl.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/nio/
+ 	$(INSTALL_DATA) 'gnu/java/nio/PipeImpl$$SourceChannelImpl.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/nio/
  
  maintainer-check: libgcj.la
  	$(NM) .libs/libgcj.a | grep ' T ' \
*************** write-entries-to-file-check:
*** 5422,5476 ****
  	@echo Creating list of files to link...
  	@: $(call write_entries_to_file,$(libgcj_la_OBJECTS) $(libgcj_la_LIBADD),libgcj.objectlist)
  
! # The Unicode consortium does not permit re-distributing the file JIS0201.TXT.
! # You can get it from ftp://ftp.unicode.org/Public/MAPPINGS/EASTASIA/JIS/.
! 
! $(srcdir)/$(CONVERT_DIR)/JIS0201.h:  # $(CONVERT_DIR)/JIS0201.TXT
! 	echo '/* This file is automatically generated from Unicode tables */' > tmp-0201; \
! 	tr  -d '\r' <$(CONVERT_DIR)/JIS0201.TXT \
! 	| sed -n -e 's|\(0x..\).*\(0x....\).*#\(.*\)$$|MAP(0x00, \1, \2)  /*\3 */|p' \
! 	>> tmp-0201; \
! 	mv tmp-0201 $(srcdir)/$(CONVERT_DIR)/JIS0201.h
! 
! # The Unicode consortium does not permit re-distributing the file JIS0208.TXT.
! # You can get it from ftp://ftp.unicode.org/Public/MAPPINGS/EASTASIA/JIS/.
  
! $(srcdir)/$(CONVERT_DIR)/JIS0208.h:  # $(CONVERT_DIR)/JIS0208.TXT
! 	echo '/* This file is automatically generated from Unicode tables */' > tmp-0208; \
! 	tr  -d '\r' <$(CONVERT_DIR)/JIS0208.TXT \
! 	| sed -n -e 's|\(0x....\).*0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\2, 0x\3, \4)  /*\5 */|p' \
! 	>> tmp-0208; \
! 	mv tmp-0208 $(srcdir)/$(CONVERT_DIR)/JIS0208.h
  
! # The Unicode consortium does not permit re-distributing the file JIS0212.TXT.
! # You can get it from ftp://ftp.unicode.org/Public/MAPPINGS/EASTASIA/JIS/.
  
! $(srcdir)/$(CONVERT_DIR)/JIS0212.h:  # $(CONVERT_DIR)/JIS0212.TXT
! 	echo '/* This file is automatically generated from Unicode tables */' > tmp-0212; \
! 	tr  -d '\r' <$(CONVERT_DIR)/JIS0212.TXT \
! 	| sed -n -e 's|0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\1, 0x\2, \3)  /*\4 */|p' \
! 	>> tmp-0212; \
! 	mv tmp-0212 $(srcdir)/$(CONVERT_DIR)/JIS0212.h
  
! $(CONVERT_DIR)/gen-from-JIS.o: $(srcdir)/$(CONVERT_DIR)/gen-from-JIS.c \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0201.h \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0208.h \
! 		$(srcdir)/$(CONVERT_DIR)/JIS0212.h
! 	$(COMPILE) -c -o $(CONVERT_DIR)/gen-from-JIS.o \
! 		$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.c
  
! $(CONVERT_DIR)/make-trie.o: $(srcdir)/$(CONVERT_DIR)/make-trie.c
! 	$(COMPILE) -c -o $(CONVERT_DIR)/make-trie.o \
! 		$(srcdir)/$(CONVERT_DIR)/make-trie.c
  
! @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@$(srcdir)/$(CONVERT_DIR)/JIS0208_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
! @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@	 ./gen-from-JIS JIS0208>$(srcdir)/$(CONVERT_DIR)/JIS0208_to_Unicode.cc
  
! @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@$(srcdir)/$(CONVERT_DIR)/JIS0212_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
! @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@	 ./gen-from-JIS JIS0212>$(srcdir)/$(CONVERT_DIR)/JIS0212_to_Unicode.cc
  
! @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@$(srcdir)/$(CONVERT_DIR)/Unicode_to_JIS.cc: ./gen-from-JIS$(EXEEXT)
! @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@	 ./gen-from-JIS toJIS>$(srcdir)/$(CONVERT_DIR)/Unicode_to_JIS.cc
  
  TexinfoDoclet.class: $(srcdir)/scripts/TexinfoDoclet.java
  	javac -d . $(srcdir)/scripts/TexinfoDoclet.java
--- 23688,23734 ----
  	@echo Creating list of files to link...
  	@: $(call write_entries_to_file,$(libgcj_la_OBJECTS) $(libgcj_la_LIBADD),libgcj.objectlist)
  
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@$(srcdir)/gnu/gcj/convert/JIS0208_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	 ./gen-from-JIS JIS0208 >$(srcdir)/gnu/gcj/convert/JIS0208_to_Unicode.cc
  
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@$(srcdir)/gnu/gcj/convert/JIS0212_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	 ./gen-from-JIS JIS0212 >$(srcdir)/gnu/gcj/convert/JIS0212_to_Unicode.cc
  
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@$(srcdir)/gnu/gcj/convert/Unicode_to_JIS.cc: ./gen-from-JIS$(EXEEXT)
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	 ./gen-from-JIS toJIS >$(srcdir)/gnu/gcj/convert/Unicode_to_JIS.cc
  
! # The Unicode consortium does not permit re-distributing the file JIS0201.TXT.
! # You can get it from
! # ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/
  
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@$(srcdir)/gnu/gcj/convert/JIS0201.h: # gnu/gcj/convert/JIS0201.TXT
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	echo '/* This file is automatically generated from Unicode tables */' > tmp-0201; \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	tr  -d '\r' <$(srcdir)/gnu/gcj/convert/JIS0201.TXT \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	| sed -n -e 's|\(0x..\).*\(0x....\).*#\(.*\)$$|MAP(0x00, \1, \2)  /*\3 */|p' \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	>> tmp-0201; \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	mv tmp-0201 $(srcdir)/gnu/gcj/convert/JIS0201.h
  
! # The Unicode consortium does not permit re-distributing the file JIS0208.TXT.
! # You can get it from
! # ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/
  
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@$(srcdir)/gnu/gcj/convert/JIS0208.h: # gnu/gcj/convert/JIS0208.TXT
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	echo '/* This file is automatically generated from Unicode tables */' > tmp-0208; \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	tr  -d '\r' <$(srcdir)/gnu/gcj/convert/JIS0208.TXT \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	| sed -n -e 's|\(0x....\).*0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\2, 0x\3, \4)  /*\5 */|p' \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	>> tmp-0208; \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	mv tmp-0208 $(srcdir)/gnu/gcj/convert/JIS0208.h
  
! # The Unicode consortium does not permit re-distributing the file JIS0212.TXT.
! # You can get it from
! # ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/
  
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@$(srcdir)/gnu/gcj/convert/JIS0212.h: # gnu/gcj/convert/JIS0212.TXT
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	echo '/* This file is automatically generated from Unicode tables */' > tmp-0212; \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	tr  -d '\r' <$(srcdir)/gnu/gcj/convert/JIS0212.TXT \
! @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	| sed -n -e 's|0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\1, 0x\2, \3)  /*\4 */|p' \
! @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
*************** TexinfoDoclet.class: $(srcdir)/scripts/T
*** 5478,5512 ****
  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 .:$(srcdir) $$lang
! 	javadoc -outfile $(srcdir)/doc/java-lang-ref.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/lang/ref/*.java
! 	javadoc -outfile $(srcdir)/doc/java-lang-reflect.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/lang/reflect/*.java
! 	javadoc -outfile $(srcdir)/doc/java-applet.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/applet/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-color.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/color/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-datatransfer.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/datatransfer/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-event.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/event/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-geom.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/geom/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-image.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/image/*.java
! 	javadoc -outfile $(srcdir)/doc/java-awt-peer.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/awt/peer/*.java
! 	javadoc -outfile $(srcdir)/doc/java-beans.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/beans/*.java
! 	javadoc -outfile $(srcdir)/doc/java-beans-beancontext.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/beans/beancontext/*.java
! 	javadoc -outfile $(srcdir)/doc/java-io.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/io/*.java
! 	javadoc -outfile $(srcdir)/doc/java-math.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/math/*.java
! 	javadoc -outfile $(srcdir)/doc/java-net.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/net/*.java
! 	javadoc -outfile $(srcdir)/doc/java-security.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/security/*.java
! 	javadoc -outfile $(srcdir)/doc/java-security-cert.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/security-cert/*.java
! 	javadoc -outfile $(srcdir)/doc/java-security-spec.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/security/spec/*.java
! 	javadoc -outfile $(srcdir)/doc/java-security-interfaces.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/security/spec/interfaces/*.java
! 	javadoc -outfile $(srcdir)/doc/java-sql.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/sql/*.java
! 	javadoc -outfile $(srcdir)/doc/java-text.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/text/*.java
! 	javadoc -outfile $(srcdir)/doc/java-util.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/util/*.java
! 	javadoc -outfile $(srcdir)/doc/java-util-jar.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/util/jar/*.java
! 	javadoc -outfile $(srcdir)/doc/java-util-zip.texi -doclet TexinfoDoclet -sourcepath .:$(srcdir) $(srcdir)/java/util/zip/*.java
  
! -include deps.mk
  
! all-recursive: libgcj-@gcc_version@.jar $(nat_headers) $(x_nat_headers)
  
  # Multilib support.
  .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
--- 23736,23793 ----
  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 \
*************** distclean-multi:
*** 5531,5537 ****
  	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
  maintainer-clean-multi:
  	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
- 
  # 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:
--- 23812,23817 ----
diff -Nrcpad gcc-3.4.3/libjava/NEWS gcc-4.0.0/libjava/NEWS
*** gcc-3.4.3/libjava/NEWS	Tue Jan 30 17:15:15 2001
--- gcc-4.0.0/libjava/NEWS	Sat Feb 19 00:47:33 2005
***************
*** 1,4 ****
! New in libgcj X.XX:
  
  * libgcj now includes a bytecode interpreter. If a compiled version of a class 
  is not found in the application binary or linked shared libraries, the
--- 1,300 ----
! *** Changes in GCC 4.0:
! 
! * 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).
! 
! * Lots of Calendar bug fixes.
! 
! * 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.
! 
! * 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.
! 
! * Much fuller collection documentation.
! 
! * libgcj 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.
! 
! * 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.
! 
! * 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/
! 
! * java.security.AccessController has been implemented.
! 
! * The default java.lang.SecurityManager now uses AccessController.
! 
! * Lookahead support for regular expressions.
! 
! * java.util.regexp implementation through gnu.regexp wrappers.
! 
! * Serialization object stream fixes for multiple ClassLoader scenarios.
! 
! * 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.io is now implemented by delegating most tasks directly to
! java.nio.
! 
! * Reworked/Optimized implementations of java.nio.Buffer and subclasses.
! 
! * BufferedReader speed improvements.
! 
! * Multiple java.net.InetAdress fixes and java.rmi fixes.
! 
! * ServerSocket.accept() now restarts listening when system call
! interrupted.
! 
! * java.net.URI implementation.
! 
! * New javax.print, javax.print.attribute[.standard] and
! javax.print.event packages and classes.
! 
! * java.text multiple new features and bug fixes (only 2 out of the
! 1000+ java.text Mauve tests now fail).
! 
! * java.text attributed iterators support.
! 
! * Improved useabilty of java.text implementation for several
! applications.
! 
! * 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.
! 
! * Full java.awt.color implementation, with all standard ICC profiles,
! except for PhotoYCC color space.
! 
! * java.awt.image support updated to 1.4.
! 
! * Big-endian (PowerPC) fixes for native awt GTK+ peers.
! 
! * 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.
! 
! * More javax.imageio support.
! 
! * Better AWT Help MenuBar support.
! 
! * Swing TabbedPane, ColorChooser and ComboBox improvements.
! 
! * Start of JTree functionality.
! 
! * 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.
! 
! * 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.
! 
! * java.awt.geom completed. Area, Arc2D, Ellipse2D and Line2D
! implemented.
! 
! * JColorChooser, JComboBox and JTextField implemented, including
! example uses in GNU Classpath Examples swing Demo.
! 
! * 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.
! 
! * 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.
! 
! * New javax.imageio, javax.imageio.event and javax.imageio.spi packages
! and classes.
! 
! * 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.
! 
! *** Changes in GCC 3.4:
! 
! * Compiling a .jar file will now cause non-.class entries to be automatically 
!   compiled as resources.
! 
! * libgcj has been ported to Darwin.
! 
! * Jeff Sturm has adapted Jan Hubicka's call graph optimization code to gcj.
! 
! * libgcj has a new gcjlib URL type; this lets URLClassLoader load code from 
!   shared libraries.
! 
! * libgcj has been much more completely merged with GNU Classpath.
! 
! * Class loading is now much more correct; in particular the caller's class 
!   loader is now used when that is required.
! 
! * Eclipse 2.x will run out of the box using gij.
! 
! * Parts of java.nio have been implemented. Direct and indirect buffers work, 
!   as do fundamental file and socket operations.
! 
! * java.awt has been improved, though it is still not ready for general use.
! 
! * The HTTP protocol handler now uses HTTP/1.1 and can handle the POST method.
! 
! * The MinGW port has matured. Enhancements include socket timeout support, 
!   thread interruption, improved Runtime.exec() handling and support for 
!   accented characters in filenames.
! 
! *** Changes in GCC 3.3:
! 
! * The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK 1.4) 
!   API.
! 
! * The JDK 1.4 assert facility has been implemented.
! 
! * The bytecode interpreter is now direct threaded and thus faster.
! 
! 
! *** Changes in GCC 3.1:
! 
! * libgcj now includes RMI, java.lang.ref.*, javax.naming, and 
!   javax.transaction.
! 
! * Property files and other system resources can be compiled into executables 
!   which use libgcj using the new gcj --resource feature.
! 
! * libgcj has been ported to more platforms. In particular there is now a 
!   mostly-functional mingw32 (Windows) target port.
! 
! * JNI and CNI invocation interfaces were implemented, so gcj-compiled Java 
!   code can now be called from a C/C++ application.
! 
! * gcj can now use builtin functions for certain known methods, for instance 
!   Math.cos.
! 
! * gcj can now automatically remove redundant array-store checks in some common 
!   cases.
! 
! * The --no-store-checks optimization option was added. This can be used to 
!   omit runtime store checks for code which is known not to throw 
!   ArrayStoreException
! 
! * The following third party interface standards were added to libgcj: 
!   org.w3c.dom and org.xml.sax.
! 
! * java.security has been merged with GNU Classpath. The new package is now 
!   JDK 1.2 compliant, and much more complete.
! 
! * A bytecode verifier was added to the libgcj interpreter.
! 
! * java.lang.Character was rewritten to comply with the Unicode 3.0 standard, 
!   and improve performance.
! 
! * Partial support for many more locales was added to libgcj.
! 
! * Socket timeouts have been implemented.
! 
! * libgcj has been merged into a single shared library. There are no longer 
!   separate shared libraries for the garbage collector and zlib.
! 
! * Several performance improvements were made to gcj and libgcj:
!       o Hash synchronization (thin locks)
!       o A special allocation path for finalizer-free objects
!       o Thread-local allocation
!       o Parallel GC, and other GC tweaks
! 
! *** Changes in GCC 3.0:
  
  * libgcj now includes a bytecode interpreter. If a compiled version of a class 
  is not found in the application binary or linked shared libraries, the
diff -Nrcpad gcc-3.4.3/libjava/README gcc-4.0.0/libjava/README
*** gcc-3.4.3/libjava/README	Thu Feb  8 01:49:53 2001
--- gcc-4.0.0/libjava/README	Thu Jul 29 02:13:04 2004
*************** can be found on the gcj web pages at thi
*** 12,55 ****
  
  		http://gcc.gnu.org/java/
  
- 
- REQUIREMENTS
- ============
- 
- libgcj must be built with a compatible version of the gcc compiler. libgcj
- releases are usually numbered according to their corresponding gcc release.
- For example, if this is "libgcj 2.95.3", you need to build it using "gcc
- 2.95.3".
- 
- 
- QUICK INSTALLATION
- ==================
- 
-   > mkdir build
-   > cd build
-   > ../libgcj/configure --enable-threads=<THREADS_TYPE> --prefix=<DIR>
-   > make
-   > make install
- 
- where:
- 
- <THREADS_TYPE> specifies the threads library to be used by libgcj. Currently 
- the possible values are "posix" and "none". This value must be the same as
- the value used when configuring gcc itself.
- 
- <DIR> specifies the installation directory. This should be the same location 
- as where gcc is installed.
- 
- Consult the gcj web pages for additional "configure" arguments.
- 
- NOTE: libgcj can not be built in the same directory as `configure'. You must 
- create a separate build directory. 
- 
- 
  BUGS
  ====
  
  Please submit bug reports via this URL:
  
! 	http://gcc.gnu.org/cgi-bin/gnatsweb.pl?database=gcc
! 
--- 12,20 ----
  
  		http://gcc.gnu.org/java/
  
  BUGS
  ====
  
  Please submit bug reports via this URL:
  
! 	http://gcc.gnu.org/bugzilla
diff -Nrcpad gcc-3.4.3/libjava/THANKS gcc-4.0.0/libjava/THANKS
*** gcc-3.4.3/libjava/THANKS	Fri Mar 15 22:36:05 2002
--- gcc-4.0.0/libjava/THANKS	Thu Jul 29 02:13:04 2004
***************
*** 1,58 ****
  Many people contribute to the GCJ project, and in many different
! capacities.  Any omissions to this list are accidental.  Feel free to
! contact green@cygnus.com if you have been left out or some of your
! contributions are not listed.  Please keep this list in alphabetical
! order.
  
! Godmar Back for his improvements and encouragement.
! Scott Bambrough for help porting the compiler.
! Jon Beniston for his Win32 port.
! Geoff Berry for his object serialization work and various patches.
! Eric Blake for helping to make gcj and libgcj conform to the specifications.
! Hans-J. Boehm for his garbage collector, IA-64 libffi port, and other work.
! Per Bothner for dreaming up, designing and implementing much of gcj.
! Joerg Brunsmann for compiler hacking and help with the FAQ.
! Steve Chamberlain for config fixes and the picoJava port.
! Glenn Chambers for help with the FAQ.
! John-Marc Chandonia for various library patches.
! Eric Christopher for his porting help and clean-ups.
! The GNU Classpath project for all of their merged runtime code.
! Mo DeJong for gcj and libgcj bug fixes.
! The GCC project contributors for all of their great compiler work.
! Ivan Fontes Garcia for the Portugese translation of the FAQ.
! John Gilmore for a donation to the FSF earmarked improving GNU Java.
! Anthony Green for various contributions.
! Stu Grossman for gdb hacking, allowing us to debug our code.
! Andrew Haley for his amazing compiler and library efforts.
! Jakub Jelinek for improving the build system.
! Warren Levy for his tremendous library work.
! Oskar Liljeblad for hacking on AWT and his many bug reports and patches.
! All of the Mauve project contributors, for test code.
! Bryce McKinlay for numerous gcj and libgcj fixes and improvements.
! Adam Megacz for his work on the Win32 port.
! Jason Molenda for establishing the project infrastructure 
! 	on sources.redhat.com.
! Mike Moreton for his various patches.
! Alexandre Oliva for all of this porting and testing efforts.
! Rainer Orth for configuration clean-ups and porting help.
! Alexandre Petit-Bianco for implementing much of the compiler, 
! 	and continued maintainership.
! Rolf W. Rasmussen for hacking on AWT.
! Bradley Schatz for his work on the FAQ.
! Jason Schroeder for jcf-dump patches.
! John Stracke for his HTTP protocol fixes.
! Jeff Sturm for porting help, bug fixes, and encouragement.
! Kresten Krab Thorup for his fantastic bytecode interpreter.
! Andreas Tobler for his work porting libgcj to Darwin.
! Tom Tromey for his many contributions and libgcj maintainership.
! Matt Welsh for help with Linux Threads.
! Urban Widmark for help fixing java.io.
! Mark Wielaard for new library code and his work integrating with Classpath.
! Gilles Zunino for help porting to Irix.
  
  
! We'd also like to thank the folks who have contributed time and energy
! in testing GCJ:
  
  Michael Abd-El-Malek 
  Thomas Arend
--- 1,218 ----
  Many people contribute to the GCJ project, and in many different
! capacities.  Any omissions to this list are accidental.  Please keep 
! this list in alphabetical order.
  
! Robert Abeles
! Mark G. Adams
! C. Scott Ananian
! Mark Anderson
! Bonzo Armstrong
! Steven Augart
! Godmar Back
! Stuart Ballard
! Scott Bambrough
! David Belanger
! Jon Beniston
! Gary Benson
! Mark Benvenuto
! Daniel Berlin
! Geoff Berry
! Alberto Biancardi
! Artur Biesiadowski
! David Billinghurst
! Eric Blake
! Hans Boehm
! Paolo Bonzini
! Neil Booth
! Steven Bosscher
! Per Bothner
! Sascha Brawer
! Dave Brolley
! Rodney Brown
! Joerg Brunsmann
! Nathan Bryant
! Adrian Bunk
! Andrew Cagney
! John F. Carr
! Steve Chamberlain
! Glenn Chambers
! John-Marc Chandonia
! Michael Chastain
! Tang Ching-Hui
! Eric Christopher
! Randolph Chung
! James Clark
! Nick Clifton
! Kelley Cook
! Christian Cornelssen
! Stephen Crawley
! David Daney
! Marcus G. Daniels
! Mo DeJong
! Bert Deknuydt
! DJ Delorie
! Akim Demaille
! R. A. Rivas Diaz
! Julian Dolby
! Richard Earnshaw
! David Edelsohn
! Frank Ch. Eigler
! Mohan Embar
! Marc Espie
! Nic Ferrier
! Thomas Fitzsimmons
! Andreas Franck
! Norbert Frese
! Todd T. Fries
! Jeroen Frijters
! Wu Gansha
! Ivan Fontes Garcia
! Kaveh R. Ghazi
! Scott Gilbertson
! John Gilmore
! Jacob Gladish
! Taras Glek
! Anthony Green
! Stu Grossman
! David P Grove
! Laurent Guerby
! Andrew Haley
! Raja R Harinath
! Richard Henderson
! Kevin B Hendricks
! Kazu Hirata
! Kim Ho
! Graydon Hoare
! Jochen Hoenicke
! Jens-Michael Hoffmann
! Manfred Hollstein
! Jan Hubicka
! Bernardo Innocenti
! Christian Iseli
! Andreas Jaeger
! David Jee
! Jakub Jelinek
! Mojo Jojo
! C. Brian Jones
! Tim Josling
! Martin Kahlert
! Ito Kazumitsu
! Geoffrey Keating
! Brendan Kehoe
! Richard Kenner
! Mumit Khan
! Dhek Bhun Kho
! Tony Kimball
! Adam King
! Matthias Klose
! Michael Koch
! Kaz Kojima
! Stepan Koltsov
! Bruce Korb
! Matt Kraai
! Guilhem Lavaux
! Jeffrey A Law
! John Leuner
! Warren Levy
! Oskar Liljeblad
! Robert Lipe
! Ralph Loader
! H.J. Lu
! Brad Lucier
! Martin v. LÃ¶wis
! Andrew MacLeod
! Jan van Male
! Jerome Marc
! Casey Marshall
! T.J. Mather
! Ranjit Mathew
! Greg McGary
! Bryce McKinlay
! Adam Megacz
! Marcus Meissner
! Jason Merrill
! Jim Meyering
! David S. Miller
! Corey Minyard
! Mark Mitchell
! Alan Modra
! Jason Molenda
! Peter Moon
! Mike Moreton
! Joseph S. Myers
! Raif Naffah
! Raif S. Naffah
! Fernando Nasser
! Nathanael Nerode
! Pekka Nikander
! Hans-Peter Nilsson
! Jeremy Nimmer
! Diego Novillo
! Jeffrey Oldham
! Alexandre Oliva
! Rainer Orth
! Andrew Overholt
! Theodore Papadopoulo
! Oscar Pearce
! Alexandre Petit-Bianco
! Andrew Pinski
! Ovidiu Predescu
! Steve Pribyl
! Ingo Proetel
! Vladimir Puskas
! Jerry Quinn
! Rolf W. Rasmussen
! Volker Reichelt
! Petter Reinholdtsen
! Gabriel Dos Reis
! Aaron M. Renn
! J"orn Rennecke
! Loren J. Rittle
! Mark J. Roberts
! Olga Rodimina
! Craig Rodrigues
! Jesse Rosenstock
! Torsten Rueger
! Douglas B. Rupp
! Roger Sayle
! Bradley Schatz
! Bernd Schmidt
! Jason Schroeder
! Andreas Schwab
! Chris Sears
! Nathan Sidwell
! Franz Sirl
! Danny Smith
! Michael Smith
! Todd Stock
! Graham Stott
! John Stracke
! Mike Stump
! Jeff Sturm
! Sam TH
! Philipp Thomas
! Jason Thorpe
! Bo Thorsen
! Kresten Krab Thorup
! Michael Tiemann
! Andreas Tobler
! Gerhard Tonn
! Dalibor Topic
! Gregg Townsend
! Tom Tromey
! Arnaud Vandyck
! H. VÃ¤isÃ¤nen
! Krister Walfridsson
! Ulrich Weigand
! Zack Weinberg
! Matt Welsh
! Urban Widmark
! Mark Wielaard
! Gilles Zunino
  
  
! We'd also like to thank these folks who contributed time and energy
! in testing early versions of GCJ:
  
  Michael Abd-El-Malek 
  Thomas Arend
*************** Frederik Warg 
*** 103,106 ****
--- 263,273 ----
  Gregory Warnes
  David E. Young
  
+ Special thanks to:
+ 
+ The GCC project contributors for all of their great compiler work.
+ The GNU Classpath project for all of their merged class libraries.
+ All of the Mauve project contributors, for test code.
+ All the contributors to the Jacks compiler test suite.
+ 
  Thank you all!
diff -Nrcpad gcc-3.4.3/libjava/acconfig.h gcc-4.0.0/libjava/acconfig.h
*** gcc-3.4.3/libjava/acconfig.h	Thu Sep 11 17:25:47 2003
--- gcc-4.0.0/libjava/acconfig.h	Thu Jan  1 00:00:00 1970
***************
*** 1,2 ****
- /* Define to `int' if `ssize_t' is not defined.  */
- #undef ssize_t
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/acinclude.m4 gcc-4.0.0/libjava/acinclude.m4
*** gcc-3.4.3/libjava/acinclude.m4	Wed Dec 31 08:58:29 2003
--- gcc-4.0.0/libjava/acinclude.m4	Thu Sep 23 01:14:00 2004
***************
*** 1,144 ****
! sinclude(../config/accross.m4)
! 
! AC_DEFUN(LIBGCJ_CONFIGURE,
! [
! dnl Default to --enable-multilib
! AC_ARG_ENABLE(multilib,
! [  --enable-multilib       build many library versions (default)],
! [case "${enableval}" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
!  esac], [multilib=yes])dnl
! 
! dnl We may get other options which we don't document:
! dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
! 
! # When building with srcdir == objdir, links to the source files will
! # be created in directories within the target_subdir.  We have to
! # adjust toplevel_srcdir accordingly, so that configure finds
! # install-sh and other auxiliary files that live in the top-level
! # source directory.
! if test "${srcdir}" = "."; then
!   if test -z "${with_target_subdir}"; then
!     toprel=".."
!   else
!     if test "${with_target_subdir}" != "."; then
!       toprel="${with_multisrctop}../.."
!     else
!       toprel="${with_multisrctop}.."
!     fi
!   fi
! else
!   toprel=".."
! fi
! 
! libgcj_basedir=$srcdir/$toprel/$1/libjava
! AC_SUBST(libgcj_basedir)
! 
! AC_CONFIG_AUX_DIR(${srcdir}/$toprel)
! if :; then :; else
!   # This overrides the previous occurrence for automake, but not for
!   # autoconf, which is exactly what we want.
!   AC_CONFIG_AUX_DIR(..)
! fi
! 
! # This works around an automake problem.
! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
! AC_SUBST(mkinstalldirs)
! 
! AC_CANONICAL_SYSTEM
! 
! dnl This shouldn't be needed, as long as top-level dependencies are
! dnl defined correctly and shared-library paths are set up so that
! dnl execution tests succeed.  FIXME.
! define([AC_PROG_CC_WORKS],[])
! define([AC_PROG_CXX_WORKS],[])
! 
! AC_PROG_CC
! 
! # We use the libstdc++-v3 version of LIB_AC_PROG_CXX, but use
! # glibjava_CXX instead of glibcpp_CXX.  That's because we're passed a
! # different definition of CXX than other directories, since we don't
! # depend on libstdc++-v3 having already been built.
! AC_DEFUN(LIB_AC_PROG_CXX,
! [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
! dnl Fool anybody using AC_PROG_CXX.
! AC_PROVIDE([AC_PROG_CXX])
! # Use glibjava_CXX so that we do not cause CXX to be cached with the
! # flags that come in CXX while configuring libjava.  They're different
! # from those used for all other target libraries.  If CXX is set in
! # the environment, respect that here.
! glibjava_CXX=$CXX
! AC_CHECK_PROGS(glibjava_CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
! AC_SUBST(CXX)
! CXX=$glibjava_CXX
! test -z "$glibjava_CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
! 
! AC_PROG_CXX_GNU
! 
! if test $ac_cv_prog_gxx = yes; then
!   GXX=yes
! dnl Check whether -g works, even if CXXFLAGS is set, in case the package
! dnl plays around with CXXFLAGS (such as to build both debugging and
! dnl normal versions of a library), tasteless as that idea is.
!   ac_test_CXXFLAGS="${CXXFLAGS+set}"
!   ac_save_CXXFLAGS="$CXXFLAGS"
!   CXXFLAGS=
!   AC_PROG_CXX_G
!   if test "$ac_test_CXXFLAGS" = set; then
!     CXXFLAGS="$ac_save_CXXFLAGS"
!   elif test $ac_cv_prog_cxx_g = yes; then
!     CXXFLAGS="-g -O2"
!   else
!     CXXFLAGS="-O2"
!   fi
! else
!   GXX=
!   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
! fi
! ])
! 
! LIB_AC_PROG_CXX
! 
! dnl version is pulled out to make it a bit easier to change using sed.
! version=0.0.7
! dnl Still use "libjava" here to placate dejagnu.
! AM_INIT_AUTOMAKE(libjava, $version)
! 
! AC_CHECK_TOOL(AS, as)
! AC_CHECK_TOOL(AR, ar)
! AC_CHECK_TOOL(RANLIB, ranlib, :)
! 
! AC_PROG_INSTALL
! 
! AM_MAINTAINER_MODE
! 
! AC_EXEEXT
! 
! # configure.host sets the following important variables
! #	libgcj_cflags    - host specific C compiler flags
! #	libgcj_cxxflags  - host specific C++ compiler flags
! #	libgcj_javaflags - host specific Java compiler flags
! 
! libgcj_cflags=
! libgcj_cxxflags=
! libgcj_javaflags=
! 
! . [$]{srcdir}/configure.host
! 
! LIBGCJ_CFLAGS="[$]{libgcj_cflags}"
! LIBGCJ_CXXFLAGS="[$]{libgcj_cxxflags}"
! LIBGCJ_JAVAFLAGS="[$]{libgcj_javaflags}"
! AC_SUBST(LIBGCJ_CFLAGS)
! AC_SUBST(LIBGCJ_CXXFLAGS)
! AC_SUBST(LIBGCJ_JAVAFLAGS)
! ])dnl
  
- sinclude(../libtool.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.
  ifelse(yes,no,[
  AC_DEFUN([AM_PROG_LIBTOOL],)
  AC_DEFUN([AC_LIBTOOL_DLOPEN],)
--- 1,9 ----
! 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([LT_AC_PROG_GCJ],)
*** 147,250 ****
  AC_SUBST(GCJ)
  AC_SUBST(LIBTOOL)
  ])
- 
- #serial AM2
- 
- dnl From Bruno Haible.
- 
- AC_DEFUN([AM_ICONV],
- [
-   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
-   dnl those with the standalone portable GNU libiconv installed).
- 
-   am_cv_lib_iconv_ldpath=
-   AC_ARG_WITH([libiconv-prefix],
- [  --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib], [
-     for dir in `echo "$withval" | tr : ' '`; do
-       if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
-       if test -d $dir/lib; then am_cv_lib_iconv_ldpath="-L$dir/lib"; fi
-     done
-    ])
- 
-   AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
-     am_cv_func_iconv="no, consider installing GNU libiconv"
-     am_cv_lib_iconv=no
-     AC_TRY_LINK([#include <stdlib.h>
- #include <iconv.h>],
-       [iconv_t cd = iconv_open("","");
-        iconv(cd,NULL,NULL,NULL,NULL);
-        iconv_close(cd);],
-       am_cv_func_iconv=yes)
-     if test "$am_cv_func_iconv" != yes; then
-       am_save_LIBS="$LIBS"
-       LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
-       AC_TRY_LINK([#include <stdlib.h>
- #include <iconv.h>],
-         [iconv_t cd = iconv_open("","");
-          iconv(cd,NULL,NULL,NULL,NULL);
-          iconv_close(cd);],
-         am_cv_lib_iconv=yes
-         am_cv_func_iconv=yes)
-       LIBS="$am_save_LIBS"
-     fi
-   ])
-   if test "$am_cv_func_iconv" = yes; then
-     AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
-     AC_MSG_CHECKING([for iconv declaration])
-     AC_CACHE_VAL(am_cv_proto_iconv, [
-       AC_TRY_COMPILE([
- #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
- ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
-       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);"])
-     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-     AC_MSG_RESULT([$]{ac_t:-
-          }[$]am_cv_proto_iconv)
-     AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
-       [Define as const if the declaration of iconv() needs const.])
-   fi
-   LIBICONV=
-   if test "$am_cv_lib_iconv" = yes; then
-     LIBICONV="$am_cv_lib_iconv_ldpath -liconv"
-   fi
-   AC_SUBST(LIBICONV)
- ])
- 
- # Check whether LC_MESSAGES is available in <locale.h>.
- # Ulrich Drepper <drepper@cygnus.com>, 1995.
- #
- # This file can be copied and used freely without restrictions.  It can
- # be used in projects which are not available under the GNU General Public
- # License or the GNU Library General Public License but which still want
- # to provide support for the GNU gettext functionality.
- # Please note that the actual code of the GNU gettext library is covered
- # by the GNU Library General Public License, and the rest of the GNU
- # gettext package package is covered by the GNU General Public License.
- # They are *not* in the public domain.
- 
- # serial 2
- 
- AC_DEFUN([AM_LC_MESSAGES],
-   [AC_CHECK_HEADERS(locale.h)
-   if test $ac_cv_header_locale_h = yes; then
-     AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
-       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
-        am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
-     if test $am_cv_val_LC_MESSAGES = yes; then
-       AC_DEFINE(HAVE_LC_MESSAGES, 1,
-         [Define if your <locale.h> file defines LC_MESSAGES.])
-     fi
-   fi])
- 
  AC_DEFUN([CHECK_FOR_BROKEN_MINGW_LD],
  [
  AC_MSG_CHECKING(whether 'ld' is at least 2.13)
--- 12,17 ----
*************** else
*** 268,327 ****
              [Indicate that linker is not able to 8-byte align static data])
  fi[]dnl
  ])# CHECK_FOR_BROKEN_MINGW_LD
- 
- dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
- dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
- dnl also defines GSTUFF_PKG_ERRORS on error
- AC_DEFUN(PKG_CHECK_MODULES, [
-   succeeded=no
- 
-   if test -z "$PKG_CONFIG"; then
-     AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-   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
-         AC_MSG_CHECKING(for $2)
- 
-         if $PKG_CONFIG --exists "$2" ; then
-             AC_MSG_RESULT(yes)
-             succeeded=yes
- 
-             AC_MSG_CHECKING($1_CFLAGS)
-             $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
-             AC_MSG_RESULT($$1_CFLAGS)
- 
-             AC_MSG_CHECKING($1_LIBS)
-             $1_LIBS=`$PKG_CONFIG --libs "$2"`
-             AC_MSG_RESULT($$1_LIBS)
-         else
-             $1_CFLAGS=""
-             $1_LIBS=""
-             ## If we have a custom action on failure, don't print errors, but 
-             ## do set a variable so people can do so.
-             $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-             ifelse([$4], ,echo $$1_PKG_ERRORS,)
-         fi
- 
-         AC_SUBST($1_CFLAGS)
-         AC_SUBST($1_LIBS)
-      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
-      ifelse([$3], , :, [$3])
-   else
-      ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
-   fi
- ])
- 
- 
--- 35,37 ----
diff -Nrcpad gcc-3.4.3/libjava/aclocal.m4 gcc-4.0.0/libjava/aclocal.m4
*** gcc-3.4.3/libjava/aclocal.m4	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/libjava/aclocal.m4	Thu Apr 21 07:04:10 2005
***************
*** 1,1197 ****
! dnl aclocal.m4 generated automatically by aclocal 1.4-p6
  
! dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
! dnl This file is free software; the Free Software Foundation
! dnl gives unlimited permission to copy and/or distribute it,
! dnl with or without modifications, as long as this notice is preserved.
  
! dnl This program is distributed in the hope that it will be useful,
! dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
! dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
! dnl PARTICULAR PURPOSE.
  
! sinclude(../config/accross.m4)
  
! AC_DEFUN(LIBGCJ_CONFIGURE,
! [
! dnl Default to --enable-multilib
! AC_ARG_ENABLE(multilib,
! [  --enable-multilib       build many library versions (default)],
! [case "${enableval}" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
!  esac], [multilib=yes])dnl
  
! dnl We may get other options which we don't document:
! dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
  
! # When building with srcdir == objdir, links to the source files will
! # be created in directories within the target_subdir.  We have to
! # adjust toplevel_srcdir accordingly, so that configure finds
! # install-sh and other auxiliary files that live in the top-level
! # source directory.
! if test "${srcdir}" = "."; then
!   if test -z "${with_target_subdir}"; then
!     toprel=".."
!   else
!     if test "${with_target_subdir}" != "."; then
!       toprel="${with_multisrctop}../.."
!     else
!       toprel="${with_multisrctop}.."
!     fi
!   fi
! else
!   toprel=".."
! fi
  
! libgcj_basedir=$srcdir/$toprel/$1/libjava
! AC_SUBST(libgcj_basedir)
  
! AC_CONFIG_AUX_DIR(${srcdir}/$toprel)
! if :; then :; else
!   # This overrides the previous occurrence for automake, but not for
!   # autoconf, which is exactly what we want.
!   AC_CONFIG_AUX_DIR(..)
! fi
  
! # This works around an automake problem.
! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
! AC_SUBST(mkinstalldirs)
  
! AC_CANONICAL_SYSTEM
  
! dnl This shouldn't be needed, as long as top-level dependencies are
! dnl defined correctly and shared-library paths are set up so that
! dnl execution tests succeed.  FIXME.
! define([AC_PROG_CC_WORKS],[])
! define([AC_PROG_CXX_WORKS],[])
  
! AC_PROG_CC
  
! # We use the libstdc++-v3 version of LIB_AC_PROG_CXX, but use
! # glibjava_CXX instead of glibcpp_CXX.  That's because we're passed a
! # different definition of CXX than other directories, since we don't
! # depend on libstdc++-v3 having already been built.
! AC_DEFUN(LIB_AC_PROG_CXX,
! [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
! dnl Fool anybody using AC_PROG_CXX.
! AC_PROVIDE([AC_PROG_CXX])
! # Use glibjava_CXX so that we do not cause CXX to be cached with the
! # flags that come in CXX while configuring libjava.  They're different
! # from those used for all other target libraries.  If CXX is set in
! # the environment, respect that here.
! glibjava_CXX=$CXX
! AC_CHECK_PROGS(glibjava_CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
! AC_SUBST(CXX)
! CXX=$glibjava_CXX
! test -z "$glibjava_CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
  
! AC_PROG_CXX_GNU
  
! if test $ac_cv_prog_gxx = yes; then
!   GXX=yes
! dnl Check whether -g works, even if CXXFLAGS is set, in case the package
! dnl plays around with CXXFLAGS (such as to build both debugging and
! dnl normal versions of a library), tasteless as that idea is.
!   ac_test_CXXFLAGS="${CXXFLAGS+set}"
!   ac_save_CXXFLAGS="$CXXFLAGS"
!   CXXFLAGS=
!   AC_PROG_CXX_G
!   if test "$ac_test_CXXFLAGS" = set; then
!     CXXFLAGS="$ac_save_CXXFLAGS"
!   elif test $ac_cv_prog_cxx_g = yes; then
!     CXXFLAGS="-g -O2"
!   else
!     CXXFLAGS="-O2"
!   fi
! else
!   GXX=
!   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
! fi
  ])
  
! LIB_AC_PROG_CXX
  
! dnl version is pulled out to make it a bit easier to change using sed.
! version=0.0.7
! dnl Still use "libjava" here to placate dejagnu.
! AM_INIT_AUTOMAKE(libjava, $version)
  
! AC_CHECK_TOOL(AS, as)
! AC_CHECK_TOOL(AR, ar)
! AC_CHECK_TOOL(RANLIB, ranlib, :)
  
! AC_PROG_INSTALL
  
! AM_MAINTAINER_MODE
  
! AC_EXEEXT
  
! # configure.host sets the following important variables
! #	libgcj_cflags    - host specific C compiler flags
! #	libgcj_cxxflags  - host specific C++ compiler flags
! #	libgcj_javaflags - host specific Java compiler flags
  
! libgcj_cflags=
! libgcj_cxxflags=
! libgcj_javaflags=
  
! . [$]{srcdir}/configure.host
  
! LIBGCJ_CFLAGS="[$]{libgcj_cflags}"
! LIBGCJ_CXXFLAGS="[$]{libgcj_cxxflags}"
! LIBGCJ_JAVAFLAGS="[$]{libgcj_javaflags}"
! AC_SUBST(LIBGCJ_CFLAGS)
! AC_SUBST(LIBGCJ_CXXFLAGS)
! AC_SUBST(LIBGCJ_JAVAFLAGS)
! ])dnl
  
! sinclude(../libtool.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.
! 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)
! ])
  
! #serial AM2
  
- dnl From Bruno Haible.
  
! AC_DEFUN([AM_ICONV],
! [
!   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
!   dnl those with the standalone portable GNU libiconv installed).
  
-   am_cv_lib_iconv_ldpath=
-   AC_ARG_WITH([libiconv-prefix],
- [  --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib], [
-     for dir in `echo "$withval" | tr : ' '`; do
-       if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
-       if test -d $dir/lib; then am_cv_lib_iconv_ldpath="-L$dir/lib"; fi
-     done
-    ])
  
-   AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
-     am_cv_func_iconv="no, consider installing GNU libiconv"
-     am_cv_lib_iconv=no
-     AC_TRY_LINK([#include <stdlib.h>
- #include <iconv.h>],
-       [iconv_t cd = iconv_open("","");
-        iconv(cd,NULL,NULL,NULL,NULL);
-        iconv_close(cd);],
-       am_cv_func_iconv=yes)
-     if test "$am_cv_func_iconv" != yes; then
-       am_save_LIBS="$LIBS"
-       LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
-       AC_TRY_LINK([#include <stdlib.h>
- #include <iconv.h>],
-         [iconv_t cd = iconv_open("","");
-          iconv(cd,NULL,NULL,NULL,NULL);
-          iconv_close(cd);],
-         am_cv_lib_iconv=yes
-         am_cv_func_iconv=yes)
-       LIBS="$am_save_LIBS"
-     fi
-   ])
-   if test "$am_cv_func_iconv" = yes; then
-     AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
-     AC_MSG_CHECKING([for iconv declaration])
-     AC_CACHE_VAL(am_cv_proto_iconv, [
-       AC_TRY_COMPILE([
- #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
- ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
-       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);"])
-     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-     AC_MSG_RESULT([$]{ac_t:-
-          }[$]am_cv_proto_iconv)
-     AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
-       [Define as const if the declaration of iconv() needs const.])
-   fi
-   LIBICONV=
-   if test "$am_cv_lib_iconv" = yes; then
-     LIBICONV="$am_cv_lib_iconv_ldpath -liconv"
-   fi
-   AC_SUBST(LIBICONV)
- ])
  
! # Check whether LC_MESSAGES is available in <locale.h>.
! # Ulrich Drepper <drepper@cygnus.com>, 1995.
  #
! # This file can be copied and used freely without restrictions.  It can
! # be used in projects which are not available under the GNU General Public
! # License or the GNU Library General Public License but which still want
! # to provide support for the GNU gettext functionality.
! # Please note that the actual code of the GNU gettext library is covered
! # by the GNU Library General Public License, and the rest of the GNU
! # gettext package package is covered by the GNU General Public License.
! # They are *not* in the public domain.
! 
! # serial 2
! 
! AC_DEFUN([AM_LC_MESSAGES],
!   [AC_CHECK_HEADERS(locale.h)
!   if test $ac_cv_header_locale_h = yes; then
!     AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
!       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
!        am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
!     if test $am_cv_val_LC_MESSAGES = yes; then
!       AC_DEFINE(HAVE_LC_MESSAGES, 1,
!         [Define if your <locale.h> file defines LC_MESSAGES.])
!     fi
!   fi])
  
! 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
  
! dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
! dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
! dnl also defines GSTUFF_PKG_ERRORS on error
! AC_DEFUN(PKG_CHECK_MODULES, [
!   succeeded=no
  
!   if test -z "$PKG_CONFIG"; then
!     AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
    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
!         AC_MSG_CHECKING(for $2)
  
!         if $PKG_CONFIG --exists "$2" ; then
!             AC_MSG_RESULT(yes)
!             succeeded=yes
  
-             AC_MSG_CHECKING($1_CFLAGS)
-             $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
-             AC_MSG_RESULT($$1_CFLAGS)
  
!             AC_MSG_CHECKING($1_LIBS)
!             $1_LIBS=`$PKG_CONFIG --libs "$2"`
!             AC_MSG_RESULT($$1_LIBS)
!         else
!             $1_CFLAGS=""
!             $1_LIBS=""
!             ## If we have a custom action on failure, don't print errors, but 
!             ## do set a variable so people can do so.
!             $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
!             ifelse([$4], ,echo $$1_PKG_ERRORS,)
!         fi
  
-         AC_SUBST($1_CFLAGS)
-         AC_SUBST($1_LIBS)
-      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
!      ifelse([$3], , :, [$3])
!   else
!      ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
!   fi
  ])
  
  
  
! # lib-prefix.m4 serial 3 (gettext-0.12.2)
! dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
! dnl This file is free software, distributed under the terms of the GNU
! dnl General Public License.  As a special exception to the GNU General
! dnl Public License, this file may be distributed as part of a program
! dnl that contains a configuration script generated by Autoconf, under
! dnl the same distribution terms as the rest of that program.
  
! dnl From Bruno Haible.
  
! dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
! dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
! dnl require excessive bracketing.
! ifdef([AC_HELP_STRING],
! [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
! [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
  
! dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
! dnl to access previously installed libraries. The basic assumption is that
! dnl a user will want packages to use other packages he previously installed
! dnl with the same --prefix option.
! dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
! dnl libraries, but is otherwise very convenient.
! AC_DEFUN([AC_LIB_PREFIX],
! [
!   AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
!   AC_REQUIRE([AC_PROG_CC])
!   AC_REQUIRE([AC_CANONICAL_HOST])
!   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
!   dnl By default, look in $includedir and $libdir.
!   use_additional=yes
!   AC_LIB_WITH_FINAL_PREFIX([
!     eval additional_includedir=\"$includedir\"
!     eval additional_libdir=\"$libdir\"
!   ])
!   AC_LIB_ARG_WITH([lib-prefix],
! [  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
!   --without-lib-prefix    don't search for libraries in includedir and libdir],
! [
!     if test "X$withval" = "Xno"; then
!       use_additional=no
!     else
!       if test "X$withval" = "X"; then
!         AC_LIB_WITH_FINAL_PREFIX([
!           eval additional_includedir=\"$includedir\"
!           eval additional_libdir=\"$libdir\"
!         ])
!       else
!         additional_includedir="$withval/include"
!         additional_libdir="$withval/lib"
!       fi
!     fi
! ])
!   if test $use_additional = yes; then
!     dnl Potentially add $additional_includedir to $CPPFLAGS.
!     dnl But don't add it
!     dnl   1. if it's the standard /usr/include,
!     dnl   2. if it's already present in $CPPFLAGS,
!     dnl   3. if it's /usr/local/include and we are using GCC on Linux,
!     dnl   4. if it doesn't exist as a directory.
!     if test "X$additional_includedir" != "X/usr/include"; then
!       haveit=
!       for x in $CPPFLAGS; do
!         AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
!         if test "X$x" = "X-I$additional_includedir"; then
!           haveit=yes
!           break
!         fi
!       done
!       if test -z "$haveit"; then
!         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
!           if test -d "$additional_includedir"; then
!             dnl Really add $additional_includedir to $CPPFLAGS.
!             CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
!           fi
!         fi
!       fi
!     fi
!     dnl Potentially add $additional_libdir to $LDFLAGS.
!     dnl But don't add it
!     dnl   1. if it's the standard /usr/lib,
!     dnl   2. if it's already present in $LDFLAGS,
!     dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
!     dnl   4. if it doesn't exist as a directory.
!     if test "X$additional_libdir" != "X/usr/lib"; then
!       haveit=
!       for x in $LDFLAGS; do
!         AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
!         if test "X$x" = "X-L$additional_libdir"; then
!           haveit=yes
!           break
!         fi
!       done
!       if test -z "$haveit"; then
!         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
!           if test -d "$additional_libdir"; then
!             dnl Really add $additional_libdir to $LDFLAGS.
!             LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
!           fi
!         fi
!       fi
!     fi
!   fi
! ])
  
! dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
! dnl acl_final_exec_prefix, containing the values to which $prefix and
! dnl $exec_prefix will expand at the end of the configure script.
! AC_DEFUN([AC_LIB_PREPARE_PREFIX],
! [
!   dnl Unfortunately, prefix and exec_prefix get only finally determined
!   dnl at the end of configure.
!   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"
! ])
  
- dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
- dnl variables prefix and exec_prefix bound to the values they will have
- dnl at the end of the configure script.
- AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
- [
-   acl_save_prefix="$prefix"
-   prefix="$acl_final_prefix"
-   acl_save_exec_prefix="$exec_prefix"
-   exec_prefix="$acl_final_exec_prefix"
-   $1
-   exec_prefix="$acl_save_exec_prefix"
-   prefix="$acl_save_prefix"
- ])
  
! # lib-link.m4 serial 4 (gettext-0.12)
! dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
! dnl This file is free software, distributed under the terms of the GNU
! dnl General Public License.  As a special exception to the GNU General
! dnl Public License, this file may be distributed as part of a program
! dnl that contains a configuration script generated by Autoconf, under
! dnl the same distribution terms as the rest of that program.
  
! dnl From Bruno Haible.
  
! dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
! dnl the libraries corresponding to explicit and implicit dependencies.
! dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
! dnl augments the CPPFLAGS variable.
! AC_DEFUN([AC_LIB_LINKFLAGS],
! [
!   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
!   AC_REQUIRE([AC_LIB_RPATH])
!   define([Name],[translit([$1],[./-], [___])])
!   define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
!                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
!   AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
!     AC_LIB_LINKFLAGS_BODY([$1], [$2])
!     ac_cv_lib[]Name[]_libs="$LIB[]NAME"
!     ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
!     ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
!   ])
!   LIB[]NAME="$ac_cv_lib[]Name[]_libs"
!   LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
!   INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
!   AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
!   AC_SUBST([LIB]NAME)
!   AC_SUBST([LTLIB]NAME)
!   dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
!   dnl results of this search when this library appears as a dependency.
!   HAVE_LIB[]NAME=yes
!   undefine([Name])
!   undefine([NAME])
! ])
  
! dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
! dnl searches for libname and the libraries corresponding to explicit and
! dnl implicit dependencies, together with the specified include files and
! dnl the ability to compile and link the specified testcode. If found, it
! dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
! dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
! dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
! dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
! AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
! [
!   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
!   AC_REQUIRE([AC_LIB_RPATH])
!   define([Name],[translit([$1],[./-], [___])])
!   define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
!                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
  
!   dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
!   dnl accordingly.
!   AC_LIB_LINKFLAGS_BODY([$1], [$2])
  
!   dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
!   dnl because if the user has installed lib[]Name and not disabled its use
!   dnl via --without-lib[]Name-prefix, he wants to use it.
!   ac_save_CPPFLAGS="$CPPFLAGS"
!   AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
  
!   AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
!     ac_save_LIBS="$LIBS"
!     LIBS="$LIBS $LIB[]NAME"
!     AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
!     LIBS="$ac_save_LIBS"
!   ])
!   if test "$ac_cv_lib[]Name" = yes; then
!     HAVE_LIB[]NAME=yes
!     AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
!     AC_MSG_CHECKING([how to link with lib[]$1])
!     AC_MSG_RESULT([$LIB[]NAME])
!   else
!     HAVE_LIB[]NAME=no
!     dnl If $LIB[]NAME didn't lead to a usable library, we don't need
!     dnl $INC[]NAME either.
!     CPPFLAGS="$ac_save_CPPFLAGS"
!     LIB[]NAME=
!     LTLIB[]NAME=
!   fi
!   AC_SUBST([HAVE_LIB]NAME)
!   AC_SUBST([LIB]NAME)
!   AC_SUBST([LTLIB]NAME)
!   undefine([Name])
!   undefine([NAME])
  ])
  
! dnl Determine the platform dependent parameters needed to use rpath:
! dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
! dnl hardcode_direct, hardcode_minus_L.
! AC_DEFUN([AC_LIB_RPATH],
! [
!   AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
!   AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
!   AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
!   AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
!   AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
!     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
!   ])
!   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"
!   dnl Determine whether the user wants rpath handling at all.
!   AC_ARG_ENABLE(rpath,
!     [  --disable-rpath         do not hardcode runtime library paths],
!     :, enable_rpath=yes)
! ])
  
! dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
! dnl the libraries corresponding to explicit and implicit dependencies.
! dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
! AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
! [
!   define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
!                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
!   dnl By default, look in $includedir and $libdir.
!   use_additional=yes
!   AC_LIB_WITH_FINAL_PREFIX([
!     eval additional_includedir=\"$includedir\"
!     eval additional_libdir=\"$libdir\"
!   ])
!   AC_LIB_ARG_WITH([lib$1-prefix],
! [  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
!   --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
! [
!     if test "X$withval" = "Xno"; then
!       use_additional=no
!     else
!       if test "X$withval" = "X"; then
!         AC_LIB_WITH_FINAL_PREFIX([
!           eval additional_includedir=\"$includedir\"
!           eval additional_libdir=\"$libdir\"
!         ])
!       else
!         additional_includedir="$withval/include"
!         additional_libdir="$withval/lib"
!       fi
!     fi
! ])
!   dnl Search the library and its dependencies in $additional_libdir and
!   dnl $LDFLAGS. Using breadth-first-seach.
!   LIB[]NAME=
!   LTLIB[]NAME=
!   INC[]NAME=
!   rpathdirs=
!   ltrpathdirs=
!   names_already_handled=
!   names_next_round='$1 $2'
!   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"
!         dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
!         dnl or AC_LIB_HAVE_LINKFLAGS call.
!         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" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
!             eval value=\"\$LTLIB$uppername\"
!             test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
!           else
!             dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
!             dnl that this library doesn't exist. So just drop it.
!             :
!           fi
!         else
!           dnl Search the library lib$name in $additional_libdir and $LDFLAGS
!           dnl and the already constructed $LIBNAME/$LTLIBNAME.
!           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 $LTLIB[]NAME; do
!               AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
!               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
!             dnl Found the library.
!             LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
!             if test "X$found_so" != "X"; then
!               dnl Linking with a shared library. We attempt to hardcode its
!               dnl directory into the executable's runpath, unless it's the
!               dnl standard /usr/lib.
!               if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
!                 dnl No hardcoding is needed.
!                 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
!               else
!                 dnl Use an explicit option to hardcode DIR into the resulting
!                 dnl binary.
!                 dnl Potentially add DIR to ltrpathdirs.
!                 dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
!                 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
!                 dnl The hardcoding into $LIBNAME is system dependent.
!                 if test "$hardcode_direct" = yes; then
!                   dnl Using DIR/libNAME.so during linking hardcodes DIR into the
!                   dnl resulting binary.
!                   LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
!                 else
!                   if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
!                     dnl Use an explicit option to hardcode DIR into the resulting
!                     dnl binary.
!                     LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
!                     dnl Potentially add DIR to rpathdirs.
!                     dnl The rpathdirs will be appended to $LIBNAME at the end.
!                     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
!                     dnl Rely on "-L$found_dir".
!                     dnl But don't add it if it's already contained in the LDFLAGS
!                     dnl or the already constructed $LIBNAME
!                     haveit=
!                     for x in $LDFLAGS $LIB[]NAME; do
!                       AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
!                       if test "X$x" = "X-L$found_dir"; then
!                         haveit=yes
!                         break
!                       fi
!                     done
!                     if test -z "$haveit"; then
!                       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
!                     fi
!                     if test "$hardcode_minus_L" != no; then
!                       dnl FIXME: Not sure whether we should use
!                       dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
!                       dnl here.
!                       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
!                     else
!                       dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
!                       dnl here, because this doesn't fit in flags passed to the
!                       dnl compiler. So give up. No hardcoding. This affects only
!                       dnl very old systems.
!                       dnl FIXME: Not sure whether we should use
!                       dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
!                       dnl here.
!                       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
!                     fi
!                   fi
!                 fi
!               fi
!             else
!               if test "X$found_a" != "X"; then
!                 dnl Linking with a static library.
!                 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
!               else
!                 dnl We shouldn't come here, but anyway it's good to have a
!                 dnl fallback.
!                 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
!               fi
!             fi
!             dnl Assume the include files are nearby.
!             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
!               dnl Potentially add $additional_includedir to $INCNAME.
!               dnl But don't add it
!               dnl   1. if it's the standard /usr/include,
!               dnl   2. if it's /usr/local/include and we are using GCC on Linux,
!               dnl   3. if it's already present in $CPPFLAGS or the already
!               dnl      constructed $INCNAME,
!               dnl   4. if it doesn't exist as a directory.
!               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 $INC[]NAME; do
!                     AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
!                     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
!                       dnl Really add $additional_includedir to $INCNAME.
!                       INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
!                     fi
!                   fi
!                 fi
!               fi
!             fi
!             dnl Look for dependencies.
!             if test -n "$found_la"; then
!               dnl Read the .la file. It defines the variables
!               dnl dlname, library_names, old_library, dependency_libs, current,
!               dnl age, revision, installed, dlopen, dlpreopen, libdir.
!               save_libdir="$libdir"
!               case "$found_la" in
!                 */* | *\\*) . "$found_la" ;;
!                 *) . "./$found_la" ;;
!               esac
!               libdir="$save_libdir"
!               dnl We use only dependency_libs.
!               for dep in $dependency_libs; do
!                 case "$dep" in
!                   -L*)
!                     additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
!                     dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
!                     dnl But don't add it
!                     dnl   1. if it's the standard /usr/lib,
!                     dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
!                     dnl   3. if it's already present in $LDFLAGS or the already
!                     dnl      constructed $LIBNAME,
!                     dnl   4. if it doesn't exist as a directory.
!                     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 $LIB[]NAME; do
!                           AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
!                           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
!                             dnl Really add $additional_libdir to $LIBNAME.
!                             LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
!                           fi
!                         fi
!                         haveit=
!                         for x in $LDFLAGS $LTLIB[]NAME; do
!                           AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
!                           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
!                             dnl Really add $additional_libdir to $LTLIBNAME.
!                             LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
!                           fi
!                         fi
!                       fi
!                     fi
!                     ;;
!                   -R*)
!                     dir=`echo "X$dep" | sed -e 's/^X-R//'`
!                     if test "$enable_rpath" != no; then
!                       dnl Potentially add DIR to rpathdirs.
!                       dnl The rpathdirs will be appended to $LIBNAME at the end.
!                       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
!                       dnl Potentially add DIR to ltrpathdirs.
!                       dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
!                       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*)
!                     dnl Handle this in the next round.
!                     names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
!                     ;;
!                   *.la)
!                     dnl Handle this in the next round. Throw away the .la's
!                     dnl directory; it is already contained in a preceding -L
!                     dnl option.
!                     names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
!                     ;;
!                   *)
!                     dnl Most likely an immediate library name.
!                     LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
!                     LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
!                     ;;
!                 esac
!               done
!             fi
!           else
!             dnl Didn't find the library; assume it is in the system directories
!             dnl known to the linker and runtime loader. (All the system
!             dnl directories known to the linker should also be known to the
!             dnl runtime loader, otherwise the system is severely misconfigured.)
!             LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
!             LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
!           fi
!         fi
!       fi
!     done
!   done
!   if test "X$rpathdirs" != "X"; then
!     if test -n "$hardcode_libdir_separator"; then
!       dnl Weird platform: only the last -rpath option counts, the user must
!       dnl pass all path elements in one option. We can arrange that for a
!       dnl single library, but not when more than one $LIBNAMEs are used.
!       alldirs=
!       for found_dir in $rpathdirs; do
!         alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
!       done
!       dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
!       acl_save_libdir="$libdir"
!       libdir="$alldirs"
!       eval flag=\"$hardcode_libdir_flag_spec\"
!       libdir="$acl_save_libdir"
!       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
!     else
!       dnl The -rpath options are cumulative.
!       for found_dir in $rpathdirs; do
!         acl_save_libdir="$libdir"
!         libdir="$found_dir"
!         eval flag=\"$hardcode_libdir_flag_spec\"
!         libdir="$acl_save_libdir"
!         LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
!       done
!     fi
!   fi
!   if test "X$ltrpathdirs" != "X"; then
!     dnl When using libtool, the option that works for both libraries and
!     dnl executables is -R. The -R options are cumulative.
!     for found_dir in $ltrpathdirs; do
!       LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
!     done
!   fi
! ])
  
! dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
! dnl unless already present in VAR.
! dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
! dnl contains two or three consecutive elements that belong together.
! AC_DEFUN([AC_LIB_APPENDTOVAR],
! [
!   for element in [$2]; do
!     haveit=
!     for x in $[$1]; do
!       AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
!       if test "X$x" = "X$element"; then
!         haveit=yes
!         break
!       fi
!     done
!     if test -z "$haveit"; then
!       [$1]="${[$1]}${[$1]:+ }$element"
!     fi
!   done
! ])
  
! # lib-ld.m4 serial 2 (gettext-0.12)
! dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
! dnl This file is free software, distributed under the terms of the GNU
! dnl General Public License.  As a special exception to the GNU General
! dnl Public License, this file may be distributed as part of a program
! dnl that contains a configuration script generated by Autoconf, under
! dnl the same distribution terms as the rest of that program.
  
! dnl Subroutines of libtool.m4,
! dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
! dnl with libtool.m4.
  
! dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
! AC_DEFUN([AC_LIB_PROG_LD_GNU],
! [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
! [# 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])
! with_gnu_ld=$acl_cv_prog_gnu_ld
! ])
  
! dnl From libtool-1.4. Sets the variable LD.
! AC_DEFUN([AC_LIB_PROG_LD],
! [AC_ARG_WITH(gnu-ld,
! [  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
! test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
! AC_REQUIRE([AC_PROG_CC])dnl
! AC_REQUIRE([AC_CANONICAL_HOST])dnl
! # 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.
!   AC_MSG_CHECKING([for ld used by GCC])
!   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
!   AC_MSG_CHECKING([for GNU ld])
! else
!   AC_MSG_CHECKING([for non-GNU ld])
! fi
! AC_CACHE_VAL(acl_cv_path_LD,
! [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])
! LD="$acl_cv_path_LD"
! if test -n "$LD"; then
!   AC_MSG_RESULT($LD)
! else
!   AC_MSG_RESULT(no)
! fi
! test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
! AC_LIB_PROG_LD_GNU
  ])
  
- # Do all the work for Automake.  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.
  
! # serial 1
  
! dnl Usage:
! dnl AM_INIT_AUTOMAKE(package,version, [no-define])
  
! AC_DEFUN([AM_INIT_AUTOMAKE],
! [AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
! AC_REQUIRE([AC_PROG_INSTALL])
! PACKAGE=[$1]
! AC_SUBST(PACKAGE)
! VERSION=[$2]
! AC_SUBST(VERSION)
! 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
! ifelse([$3],,
! AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
! AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
! AC_REQUIRE([AM_SANITY_CHECK])
! AC_REQUIRE([AC_ARG_PROGRAM])
! dnl FIXME This is truly gross.
! missing_dir=`cd $ac_aux_dir && pwd`
! AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir)
! AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
! AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir)
! AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
! AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
! AC_REQUIRE([AC_PROG_MAKE_SET])])
  
! # Copyright 2002  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,561 ----
! # 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"])
! ])
  
! # Check for Java compiler.
! # For now we only handle the GNU compiler.
  
! # Copyright (C) 1999, 2000, 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_GCJ],[
! AC_CHECK_PROGS(GCJ, gcj, gcj)
! test -z "$GCJ" && AC_MSG_ERROR([no acceptable gcj found in \$PATH])
! if test "x${GCJFLAGS-unset}" = xunset; then
!    GCJFLAGS="-g -O2"
! fi
! AC_SUBST(GCJFLAGS)
! _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(GCJ)])
  ])
  
! # 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
*************** AC_REQUIRE([AC_PROG_MAKE_SET])])
*** 1206,1916 ****
  # 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.4"])
  
! # 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.4-p6])])
  
! #
! # Check to make sure that the build environment is sane.
! #
  
! AC_DEFUN([AM_SANITY_CHECK],
! [AC_MSG_CHECKING([whether build environment is sane])
! # Just in case
! sleep 1
! echo timestamp > conftestfile
! # 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 conftestfile 2> /dev/null`
!    if test "[$]*" = "X"; then
!       # -L didn't work.
!       set X `ls -t $srcdir/configure conftestfile`
!    fi
!    if test "[$]*" != "X $srcdir/configure conftestfile" \
!       && test "[$]*" != "X conftestfile $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" = conftestfile
!    )
! then
!    # Ok.
!    :
! else
!    AC_MSG_ERROR([newly created file is older than distributed files!
! Check your system clock])
! fi
! rm -f conftest*
! AC_MSG_RESULT(yes)])
  
! dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
! dnl The program must properly implement --version.
! AC_DEFUN([AM_MISSING_PROG],
! [AC_MSG_CHECKING(for working $2)
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if ($2 --version) < /dev/null > /dev/null 2>&1; then
!    $1=$2
!    AC_MSG_RESULT(found)
  else
!    $1="$3/missing $2"
!    AC_MSG_RESULT(missing)
  fi
! AC_SUBST($1)])
  
  # Add --enable-maintainer-mode option to configure.
  # From Jim Meyering
  
! # serial 1
  
  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
  ]
  )
  
! # Define a conditional.
  
! AC_DEFUN([AM_CONDITIONAL],
! [AC_SUBST($1_TRUE)
! AC_SUBST($1_FALSE)
! if $2; then
!   $1_TRUE=
!   $1_FALSE='#'
! else
!   $1_TRUE='#'
!   $1_FALSE=
! fi])
  
! # Like AC_CONFIG_HEADER, but automatically create stamp file.
  
! AC_DEFUN([AM_CONFIG_HEADER],
! [AC_PREREQ([2.12])
! AC_CONFIG_HEADER([$1])
! dnl When config.status generates a header, we must update the stamp-h file.
! dnl This file resides in the same directory as the config header
! dnl that is generated.  We must strip everything past the first ":",
! dnl and everything past the last "/".
! AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
! ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
! <<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
! <<am_indx=1
! for am_file in <<$1>>; do
!   case " <<$>>CONFIG_HEADERS " in
!   *" <<$>>am_file "*<<)>>
!     echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
!     ;;
!   esac
!   am_indx=`expr "<<$>>am_indx" + 1`
! done<<>>dnl>>)
! changequote([,]))])
  
! # Configure paths for GTK+
! # Owen Taylor     1997-2001
  
! dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
! dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, 
! dnl pass to pkg-config
! dnl
! AC_DEFUN(AM_PATH_GTK_2_0,
! [dnl 
! dnl Get the cflags and libraries from pkg-config
! dnl
! AC_ARG_ENABLE(gtktest, [  --disable-gtktest       do not try to compile and run a test GTK+ program],
! 		    , enable_gtktest=yes)
  
!   pkg_config_args=gtk+-2.0
!   for module in . $4
!   do
!       case "$module" in
!          gthread) 
!              pkg_config_args="$pkg_config_args gthread-2.0"
!          ;;
!       esac
!   done
  
!   no_gtk=""
  
!   AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
  
!   if test x$PKG_CONFIG != xno ; then
!     if pkg-config --atleast-pkgconfig-version 0.7 ; then
!       :
!     else
!       echo *** pkg-config too old; version 0.7 or better required.
!       no_gtk=yes
!       PKG_CONFIG=no
!     fi
!   else
!     no_gtk=yes
!   fi
  
!   min_gtk_version=ifelse([$1], ,2.0.0,$1)
!   AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version)
  
!   if test x$PKG_CONFIG != xno ; then
!     ## don't try to run the test against uninstalled libtool libs
!     if $PKG_CONFIG --uninstalled $pkg_config_args; then
! 	  echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
! 	  enable_gtktest=no
!     fi
  
!     if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then
! 	  :
!     else
! 	  no_gtk=yes
!     fi
!   fi
  
!   if test x"$no_gtk" = x ; then
!     GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
!     GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
!     gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
!            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
!     gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
!            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
!     gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
!            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
!     if test "x$enable_gtktest" = "xyes" ; then
!       ac_save_CFLAGS="$CFLAGS"
!       ac_save_LIBS="$LIBS"
!       CFLAGS="$CFLAGS $GTK_CFLAGS"
!       LIBS="$GTK_LIBS $LIBS"
! dnl
! dnl Now check if the installed GTK+ is sufficiently new. (Also sanity
! dnl checks the results of pkg-config to some extent)
! dnl
!       rm -f conf.gtktest
!       AC_TRY_RUN([
! #include <gtk/gtk.h>
! #include <stdio.h>
! #include <stdlib.h>
  
! int 
! main ()
! {
!   int major, minor, micro;
!   char *tmp_version;
  
!   system ("touch conf.gtktest");
  
-   /* HP/UX 9 (%@#!) writes to sscanf strings */
-   tmp_version = g_strdup("$min_gtk_version");
-   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-      printf("%s, bad version string\n", "$min_gtk_version");
-      exit(1);
-    }
  
!   if ((gtk_major_version != $gtk_config_major_version) ||
!       (gtk_minor_version != $gtk_config_minor_version) ||
!       (gtk_micro_version != $gtk_config_micro_version))
!     {
!       printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", 
!              $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
!              gtk_major_version, gtk_minor_version, gtk_micro_version);
!       printf ("*** was found! If pkg-config was correct, then it is best\n");
!       printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
!       printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
!       printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
!       printf("*** required on your system.\n");
!       printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
!       printf("*** to point to the correct configuration files\n");
!     } 
!   else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
! 	   (gtk_minor_version != GTK_MINOR_VERSION) ||
!            (gtk_micro_version != GTK_MICRO_VERSION))
!     {
!       printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
! 	     GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
!       printf("*** library (version %d.%d.%d)\n",
! 	     gtk_major_version, gtk_minor_version, gtk_micro_version);
!     }
!   else
!     {
!       if ((gtk_major_version > major) ||
!         ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
!         ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
!       {
!         return 0;
!        }
!      else
!       {
!         printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
!                gtk_major_version, gtk_minor_version, gtk_micro_version);
!         printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
! 	       major, minor, micro);
!         printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
!         printf("***\n");
!         printf("*** If you have already installed a sufficiently new version, this error\n");
!         printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
!         printf("*** being found. The easiest way to fix this is to remove the old version\n");
!         printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
!         printf("*** correct copy of pkg-config. (In this case, you will have to\n");
!         printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
!         printf("*** so that the correct libraries are found at run-time))\n");
!       }
!     }
!   return 1;
! }
! ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
!        CFLAGS="$ac_save_CFLAGS"
!        LIBS="$ac_save_LIBS"
!      fi
!   fi
!   if test "x$no_gtk" = x ; then
!      AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version))
!      ifelse([$2], , :, [$2])     
!   else
!      AC_MSG_RESULT(no)
!      if test "$PKG_CONFIG" = "no" ; then
!        echo "*** A new enough version of pkg-config was not found."
!        echo "*** See http://pkgconfig.sourceforge.net"
!      else
!        if test -f conf.gtktest ; then
!         :
!        else
!           echo "*** Could not run GTK+ test program, checking why..."
! 	  ac_save_CFLAGS="$CFLAGS"
! 	  ac_save_LIBS="$LIBS"
!           CFLAGS="$CFLAGS $GTK_CFLAGS"
!           LIBS="$LIBS $GTK_LIBS"
!           AC_TRY_LINK([
! #include <gtk/gtk.h>
! #include <stdio.h>
! ],      [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
!         [ echo "*** The test program compiled, but did not run. This usually means"
!           echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
!           echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
!           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
!           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
!           echo "*** is required on your system"
! 	  echo "***"
!           echo "*** If you have an old version installed, it is best to remove it, although"
!           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
!         [ echo "*** The test program failed to compile or link. See the file config.log for the"
!           echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."])
!           CFLAGS="$ac_save_CFLAGS"
!           LIBS="$ac_save_LIBS"
!        fi
!      fi
!      GTK_CFLAGS=""
!      GTK_LIBS=""
!      ifelse([$3], , :, [$3])
!   fi
!   AC_SUBST(GTK_CFLAGS)
!   AC_SUBST(GTK_LIBS)
!   rm -f conf.gtktest
  ])
  
! # Configure paths for GLIB
! # Owen Taylor     1997-2001
  
! dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
! dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or 
! dnl gthread is specified in MODULES, pass to pkg-config
! dnl
! AC_DEFUN(AM_PATH_GLIB_2_0,
! [dnl 
! dnl Get the cflags and libraries from pkg-config
! dnl
! AC_ARG_ENABLE(glibtest, [  --disable-glibtest      do not try to compile and run a test GLIB program],
! 		    , enable_glibtest=yes)
  
!   pkg_config_args=glib-2.0
!   for module in . $4
!   do
!       case "$module" in
!          gmodule) 
!              pkg_config_args="$pkg_config_args gmodule-2.0"
!          ;;
!          gobject) 
!              pkg_config_args="$pkg_config_args gobject-2.0"
!          ;;
!          gthread) 
!              pkg_config_args="$pkg_config_args gthread-2.0"
!          ;;
!       esac
!   done
  
!   AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
  
!   no_glib=""
  
!   if test x$PKG_CONFIG != xno ; then
!     if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
!       :
!     else
!       echo *** pkg-config too old; version 0.7 or better required.
!       no_glib=yes
!       PKG_CONFIG=no
!     fi
    else
!     no_glib=yes
    fi
  
!   min_glib_version=ifelse([$1], ,2.0.0,$1)
!   AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
  
!   if test x$PKG_CONFIG != xno ; then
!     ## don't try to run the test against uninstalled libtool libs
!     if $PKG_CONFIG --uninstalled $pkg_config_args; then
! 	  echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
! 	  enable_glibtest=no
!     fi
  
!     if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
! 	  :
!     else
! 	  no_glib=yes
!     fi
!   fi
  
!   if test x"$no_glib" = x ; then
!     GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
!     GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
!     GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
  
!     GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
!     GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
!     glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
!            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
!     glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
!            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
!     glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
!            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
!     if test "x$enable_glibtest" = "xyes" ; then
!       ac_save_CFLAGS="$CFLAGS"
!       ac_save_LIBS="$LIBS"
!       CFLAGS="$CFLAGS $GLIB_CFLAGS"
!       LIBS="$GLIB_LIBS $LIBS"
! dnl
! dnl Now check if the installed GLIB is sufficiently new. (Also sanity
! dnl checks the results of pkg-config to some extent)
! dnl
!       rm -f conf.glibtest
!       AC_TRY_RUN([
! #include <glib.h>
! #include <stdio.h>
! #include <stdlib.h>
  
! int 
! main ()
! {
!   int major, minor, micro;
!   char *tmp_version;
  
!   system ("touch conf.glibtest");
  
!   /* HP/UX 9 (%@#!) writes to sscanf strings */
!   tmp_version = g_strdup("$min_glib_version");
!   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
!      printf("%s, bad version string\n", "$min_glib_version");
!      exit(1);
!    }
  
!   if ((glib_major_version != $glib_config_major_version) ||
!       (glib_minor_version != $glib_config_minor_version) ||
!       (glib_micro_version != $glib_config_micro_version))
!     {
!       printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
!              $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
!              glib_major_version, glib_minor_version, glib_micro_version);
!       printf ("*** was found! If pkg-config was correct, then it is best\n");
!       printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
!       printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
!       printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
!       printf("*** required on your system.\n");
!       printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
!       printf("*** to point to the correct configuration files\n");
!     } 
!   else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
! 	   (glib_minor_version != GLIB_MINOR_VERSION) ||
!            (glib_micro_version != GLIB_MICRO_VERSION))
!     {
!       printf("*** GLIB header files (version %d.%d.%d) do not match\n",
! 	     GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
!       printf("*** library (version %d.%d.%d)\n",
! 	     glib_major_version, glib_minor_version, glib_micro_version);
!     }
!   else
!     {
!       if ((glib_major_version > major) ||
!         ((glib_major_version == major) && (glib_minor_version > minor)) ||
!         ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
!       {
!         return 0;
!        }
!      else
!       {
!         printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
!                glib_major_version, glib_minor_version, glib_micro_version);
!         printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
! 	       major, minor, micro);
!         printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
!         printf("***\n");
!         printf("*** If you have already installed a sufficiently new version, this error\n");
!         printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
!         printf("*** being found. The easiest way to fix this is to remove the old version\n");
!         printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
!         printf("*** correct copy of pkg-config. (In this case, you will have to\n");
!         printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
!         printf("*** so that the correct libraries are found at run-time))\n");
!       }
!     }
!   return 1;
! }
! ],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
!        CFLAGS="$ac_save_CFLAGS"
!        LIBS="$ac_save_LIBS"
!      fi
!   fi
!   if test "x$no_glib" = x ; then
!      AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
!      ifelse([$2], , :, [$2])     
!   else
!      AC_MSG_RESULT(no)
!      if test "$PKG_CONFIG" = "no" ; then
!        echo "*** A new enough version of pkg-config was not found."
!        echo "*** See http://www.freedesktop.org/software/pkgconfig/"
!      else
!        if test -f conf.glibtest ; then
!         :
!        else
!           echo "*** Could not run GLIB test program, checking why..."
!           ac_save_CFLAGS="$CFLAGS"
!           ac_save_LIBS="$LIBS"
!           CFLAGS="$CFLAGS $GLIB_CFLAGS"
!           LIBS="$LIBS $GLIB_LIBS"
!           AC_TRY_LINK([
! #include <glib.h>
! #include <stdio.h>
! ],      [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
!         [ echo "*** The test program compiled, but did not run. This usually means"
!           echo "*** that the run-time linker is not finding GLIB or finding the wrong"
!           echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
!           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
!           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
!           echo "*** is required on your system"
! 	  echo "***"
!           echo "*** If you have an old version installed, it is best to remove it, although"
!           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
!         [ echo "*** The test program failed to compile or link. See the file config.log for the"
!           echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
!           CFLAGS="$ac_save_CFLAGS"
!           LIBS="$ac_save_LIBS"
!        fi
!      fi
!      GLIB_CFLAGS=""
!      GLIB_LIBS=""
!      GLIB_GENMARSHAL=""
!      GOBJECT_QUERY=""
!      GLIB_MKENUMS=""
!      ifelse([$3], , :, [$3])
!   fi
!   AC_SUBST(GLIB_CFLAGS)
!   AC_SUBST(GLIB_LIBS)
!   AC_SUBST(GLIB_GENMARSHAL)
!   AC_SUBST(GOBJECT_QUERY)
!   AC_SUBST(GLIB_MKENUMS)
!   rm -f conf.glibtest
! ])
  
! # Configure paths for LIBART
! # Raph Levien 98-11-18
! # stolen from Manish Singh    98-9-30
! # stolen back from Frank Belew
! # stolen from Manish Singh
! # Shamelessly stolen from Owen Taylor
  
! dnl AM_PATH_LIBART([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
! dnl Test for LIBART, and define LIBART_CFLAGS and LIBART_LIBS
! dnl
! AC_DEFUN(AM_PATH_LIBART,
! [dnl 
! dnl Get the cflags and libraries from the libart-config script
! dnl
! AC_ARG_WITH(libart-prefix,[  --with-libart-prefix=PFX   Prefix where LIBART is installed (optional)],
!             libart_prefix="$withval", libart_prefix="")
! AC_ARG_WITH(libart-exec-prefix,[  --with-libart-exec-prefix=PFX Exec prefix where LIBART is installed (optional)],
!             libart_exec_prefix="$withval", libart_exec_prefix="")
! AC_ARG_ENABLE(libarttest, [  --disable-libarttest       Do not try to compile and run a test LIBART program],
! 		    , enable_libarttest=yes)
  
!   if test x$libart_exec_prefix != x ; then
!      libart_args="$libart_args --exec-prefix=$libart_exec_prefix"
!      if test x${LIBART_CONFIG+set} != xset ; then
!         LIBART_CONFIG=$libart_exec_prefix/bin/libart-config
!      fi
!   fi
!   if test x$libart_prefix != x ; then
!      libart_args="$libart_args --prefix=$libart_prefix"
!      if test x${LIBART_CONFIG+set} != xset ; then
!         LIBART_CONFIG=$libart_prefix/bin/libart-config
!      fi
!   fi
  
!   AC_PATH_PROG(LIBART_CONFIG, libart2-config, no)
!   if test "$LIBART_CONFIG" = "no" ; then
!     AC_PATH_PROG(LIBART_CONFIG, libart-config, no)
!   fi
!   min_libart_version=ifelse([$1], ,0.2.5,$1)
!   AC_MSG_CHECKING(for LIBART - version >= $min_libart_version)
!   no_libart=""
!   if test "$LIBART_CONFIG" = "no" ; then
!     no_libart=yes
!   else
!     LIBART_CFLAGS=`$LIBART_CONFIG $libartconf_args --cflags`
!     LIBART_LIBS=`$LIBART_CONFIG $libartconf_args --libs`
  
!     libart_major_version=`$LIBART_CONFIG $libart_args --version | \
!            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
!     libart_minor_version=`$LIBART_CONFIG $libart_args --version | \
!            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
!     libart_micro_version=`$LIBART_CONFIG $libart_config_args --version | \
!            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
!     if test "x$enable_libarttest" = "xyes" ; then
!       ac_save_CFLAGS="$CFLAGS"
!       ac_save_LIBS="$LIBS"
!       CFLAGS="$CFLAGS $LIBART_CFLAGS"
!       LIBS="$LIBS $LIBART_LIBS"
! dnl
! dnl Now check if the installed LIBART is sufficiently new. (Also sanity
! dnl checks the results of libart-config to some extent
! dnl
!       rm -f conf.libarttest
!       AC_TRY_RUN([
! #include <stdio.h>
! #include <stdlib.h>
! #include <string.h>
! #include <libart_lgpl/libart.h>
  
! char*
! my_strdup (char *str)
! {
!   char *new_str;
!   
!   if (str)
!     {
!       new_str = malloc ((strlen (str) + 1) * sizeof(char));
!       strcpy (new_str, str);
!     }
!   else
!     new_str = NULL;
!   
!   return new_str;
! }
  
! int main ()
! {
!   int major, minor, micro;
!   char *tmp_version;
  
!   system ("touch conf.libarttest");
  
!   /* HP/UX 9 (%@#!) writes to sscanf strings */
!   tmp_version = my_strdup("$min_libart_version");
!   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
!      printf("%s, bad version string\n", "$min_libart_version");
!      exit(1);
!    }
  
!    if (($libart_major_version > major) ||
!       (($libart_major_version == major) && ($libart_minor_version > minor)) ||
!       (($libart_major_version == major) && ($libart_minor_version == minor) && ($libart_micro_version >= micro)))
!     {
!       return 0;
!     }
!   else
!     {
!       printf("\n*** 'libart-config --version' returned %d.%d.%d, but the minimum version\n", $libart_major_version, $libart_minor_version, $libart_micro_version);
!       printf("*** of LIBART required is %d.%d.%d. If libart-config is correct, then it is\n", major, minor, micro);
!       printf("*** best to upgrade to the required version.\n");
!       printf("*** If libart-config was wrong, set the environment variable LIBART_CONFIG\n");
!       printf("*** to point to the correct copy of libart-config, and remove the file\n");
!       printf("*** config.cache before re-running configure\n");
!       return 1;
!     }
! }
  
! ],, no_libart=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
!        CFLAGS="$ac_save_CFLAGS"
!        LIBS="$ac_save_LIBS"
!      fi
!   fi
!   if test "x$no_libart" = x ; then
!      AC_MSG_RESULT(yes)
!      ifelse([$2], , :, [$2])     
!   else
!      AC_MSG_RESULT(no)
!      if test "$LIBART_CONFIG" = "no" ; then
!        echo "*** The libart-config script installed by LIBART could not be found"
!        echo "*** If LIBART was installed in PREFIX, make sure PREFIX/bin is in"
!        echo "*** your path, or set the LIBART_CONFIG environment variable to the"
!        echo "*** full path to libart-config."
!      else
!        if test -f conf.libarttest ; then
!         :
!        else
!           echo "*** Could not run LIBART test program, checking why..."
!           CFLAGS="$CFLAGS $LIBART_CFLAGS"
!           LIBS="$LIBS $LIBART_LIBS"
!           AC_TRY_LINK([
! #include <stdio.h>
! #include <libart_lgpl/libart.h>
! ],      [ return 0; ],
!         [ echo "*** The test program compiled, but did not run. This usually means"
!           echo "*** that the run-time linker is not finding LIBART or finding the wrong"
!           echo "*** version of LIBART. If it is not finding LIBART, you'll need to set your"
!           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
!           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
!           echo "*** is required on your system"
! 	  echo "***"
!           echo "*** If you have an old version installed, it is best to remove it, although"
!           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
!         [ echo "*** The test program failed to compile or link. See the file config.log for the"
!           echo "*** exact error that occured. This usually means LIBART was incorrectly installed"
!           echo "*** or that you have moved LIBART since it was installed. In the latter case, you"
!           echo "*** may want to edit the libart-config script: $LIBART_CONFIG" ])
!           CFLAGS="$ac_save_CFLAGS"
!           LIBS="$ac_save_LIBS"
!        fi
!      fi
!      LIBART_CFLAGS=""
!      LIBART_LIBS=""
!      ifelse([$3], , :, [$3])
    fi
!   AC_SUBST(LIBART_CFLAGS)
!   AC_SUBST(LIBART_LIBS)
!   rm -f conf.libarttest
! ])
  
--- 570,1141 ----
  # 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
! ])
  
! # serial 2
  
! # AM_PROG_CC_C_O
! # --------------
! # Like AC_PROG_CC_C_O, but changed for automake.
  
! # Copyright (C) 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.
  
! AC_DEFUN([AM_PROG_CC_C_O],
! [AC_REQUIRE([AC_PROG_CC_C_O])dnl
! AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
! # FIXME: we rely on the cache variable name because
! # there is no other way.
! set dummy $CC
! ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
! if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
!    # Losing compiler, so override with the script.
!    # FIXME: It is wrong to rewrite CC.
!    # But if we don't then we get into trouble of one sort or another.
!    # A longer-term fix would be to have automake use am__CC in this case,
!    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
!    CC="$am_aux_dir/compile $CC"
! fi
! ])
  
! #  -*- 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])])
  
! #
! # 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([../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])
diff -Nrcpad gcc-3.4.3/libjava/boehm.cc gcc-4.0.0/libjava/boehm.cc
*** gcc-3.4.3/libjava/boehm.cc	Thu Dec  4 13:07:07 2003
--- gcc-4.0.0/libjava/boehm.cc	Mon Mar 28 18:21:04 2005
***************
*** 1,6 ****
  // boehm.cc - interface between libjava and Boehm GC.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,7 ----
  // 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.
  
*************** details.  */
*** 27,56 ****
  
  extern "C"
  {
! #include <private/gc_pmark.h>
  #include <gc_gcj.h>
  
  #ifdef THREAD_LOCAL_ALLOC
  # define GC_REDIRECT_TO_LOCAL
  # include <gc_local_alloc.h>
  #endif
  
!   // These aren't declared in any Boehm GC header.
!   void GC_finalize_all (void);
!   ptr_t GC_debug_generic_malloc (size_t size, int k, GC_EXTRA_PARAMS);
  };
  
! #define MAYBE_MARK(Obj, Top, Limit, Source, Exit)  \
! 	Top=GC_MARK_AND_PUSH((GC_PTR)Obj, Top, Limit, (GC_PTR *)Source)
  
  // `kind' index used when allocating Java arrays.
  static int array_kind_x;
  
  // Freelist used for Java arrays.
! static ptr_t *array_free_list;
! 
! // Lock used to protect access to Boehm's GC_enable/GC_disable functions.
! static _Jv_Mutex_t disable_gc_mutex;
  
  
  
--- 28,62 ----
  
  extern "C"
  {
! #include <gc_config.h>
! 
! // Set GC_DEBUG before including gc.h!
! #ifdef LIBGCJ_GC_DEBUG
! # define GC_DEBUG
! #endif
! 
! #include <gc_mark.h>
  #include <gc_gcj.h>
+ #include <javaxfc.h>  // GC_finalize_all declaration.  
  
  #ifdef THREAD_LOCAL_ALLOC
  # define GC_REDIRECT_TO_LOCAL
  # include <gc_local_alloc.h>
  #endif
  
!   // From boehm's misc.c 
!   void GC_enable();
!   void GC_disable();
  };
  
! #define MAYBE_MARK(Obj, Top, Limit, Source)  \
! 	Top=GC_MARK_AND_PUSH((GC_PTR) Obj, Top, Limit, (GC_PTR *) Source)
  
  // `kind' index used when allocating Java arrays.
  static int array_kind_x;
  
  // Freelist used for Java arrays.
! static void **array_free_list;
  
  
  
*************** static _Jv_Mutex_t disable_gc_mutex;
*** 58,72 ****
  // object.  We use `void *' arguments and return, and not what the
  // Boehm GC wants, to avoid pollution in our headers.
  void *
! _Jv_MarkObj (void *addr, void *msp, void *msl, void * /* env */)
  {
!   mse *mark_stack_ptr = (mse *) msp;
!   mse *mark_stack_limit = (mse *) msl;
!   jobject obj = (jobject) addr;
  
!   // FIXME: if env is 1, this object was allocated through the debug
!   // interface, and addr points to the beginning of the debug header.
!   // In that case, we should really add the size of the header to addr.
  
    _Jv_VTable *dt = *(_Jv_VTable **) addr;
    // The object might not yet have its vtable set, or it might
--- 64,77 ----
  // object.  We use `void *' arguments and return, and not what the
  // Boehm GC wants, to avoid pollution in our headers.
  void *
! _Jv_MarkObj (void *addr, void *msp, void *msl, void *env)
  {
!   struct GC_ms_entry *mark_stack_ptr = (struct GC_ms_entry *)msp;
!   struct GC_ms_entry *mark_stack_limit = (struct GC_ms_entry *)msl;
  
!   if (env == (void *)1) /* Object allocated with debug allocator.	*/
!     addr = (GC_PTR)GC_USR_PTR_FROM_BASE(addr);
!   jobject obj = (jobject) addr;
  
    _Jv_VTable *dt = *(_Jv_VTable **) addr;
    // The object might not yet have its vtable set, or it might
*************** _Jv_MarkObj (void *addr, void *msp, void
*** 78,93 ****
    if (__builtin_expect (! dt || !(dt -> get_finalizer()), false))
      return mark_stack_ptr;
    jclass klass = dt->clas;
!   ptr_t p;
  
  # ifndef JV_HASH_SYNCHRONIZATION
      // Every object has a sync_info pointer.
!     p = (ptr_t) obj->sync_info;
!     MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, obj, o1label);
  # endif
    // Mark the object's class.
!   p = (ptr_t) klass;
!   MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, obj, o2label);
  
    if (__builtin_expect (klass == &java::lang::Class::class$, false))
      {
--- 83,98 ----
    if (__builtin_expect (! dt || !(dt -> get_finalizer()), false))
      return mark_stack_ptr;
    jclass klass = dt->clas;
!   GC_PTR p;
  
  # ifndef JV_HASH_SYNCHRONIZATION
      // Every object has a sync_info pointer.
!     p = (GC_PTR) obj->sync_info;
!     MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, obj);
  # endif
    // Mark the object's class.
!   p = (GC_PTR) klass;
!   MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, obj);
  
    if (__builtin_expect (klass == &java::lang::Class::class$, false))
      {
*************** _Jv_MarkObj (void *addr, void *msp, void
*** 105,138 ****
        // of our root set.		- HB
        jclass c = (jclass) addr;
  
!       p = (ptr_t) c->name;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c3label);
!       p = (ptr_t) c->superclass;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c4label);
        for (int i = 0; i < c->constants.size; ++i)
  	{
  	  /* FIXME: We could make this more precise by using the tags -KKT */
! 	  p = (ptr_t) c->constants.data[i].p;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c5label);
  	}
  
  #ifdef INTERPRETER
        if (_Jv_IsInterpretedClass (c))
  	{
! 	  p = (ptr_t) c->constants.tags;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c5alabel);
! 	  p = (ptr_t) c->constants.data;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c5blabel);
! 	  p = (ptr_t) c->vtable;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c5clabel);
  	}
  #endif
  
        // If the class is an array, then the methods field holds a
        // pointer to the element class.  If the class is primitive,
        // then the methods field holds a pointer to the array class.
!       p = (ptr_t) c->methods;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c6label);
  
        // The vtable might have been set, but the rest of the class
        // could still be uninitialized.  If this is the case, then
--- 110,145 ----
        // of our root set.		- HB
        jclass c = (jclass) addr;
  
!       p = (GC_PTR) c->name;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
!       p = (GC_PTR) c->superclass;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
        for (int i = 0; i < c->constants.size; ++i)
  	{
  	  /* FIXME: We could make this more precise by using the tags -KKT */
! 	  p = (GC_PTR) c->constants.data[i].p;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
  	}
  
  #ifdef INTERPRETER
        if (_Jv_IsInterpretedClass (c))
  	{
! 	  p = (GC_PTR) c->constants.tags;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
! 	  p = (GC_PTR) c->constants.data;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
  	}
  #endif
  
+       // The vtable might be allocated even for compiled code.
+       p = (GC_PTR) c->vtable;
+       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+ 
        // If the class is an array, then the methods field holds a
        // pointer to the element class.  If the class is primitive,
        // then the methods field holds a pointer to the array class.
!       p = (GC_PTR) c->methods;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
  
        // The vtable might have been set, but the rest of the class
        // could still be uninitialized.  If this is the case, then
*************** _Jv_MarkObj (void *addr, void *msp, void
*** 147,251 ****
  	  // points to a methods structure.
  	  for (int i = 0; i < c->method_count; ++i)
  	    {
! 	      p = (ptr_t) c->methods[i].name;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
! 			     cm1label);
! 	      p = (ptr_t) c->methods[i].signature;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
! 			     cm2label);
  	    }
  	}
  
        // Mark all the fields.
!       p = (ptr_t) c->fields;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8label);
        for (int i = 0; i < c->field_count; ++i)
  	{
  	  _Jv_Field* field = &c->fields[i];
  
! #ifndef COMPACT_FIELDS
! 	  p = (ptr_t) field->name;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8alabel);
! #endif
! 	  p = (ptr_t) field->type;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8blabel);
  
  	  // For the interpreter, we also need to mark the memory
  	  // containing static members
  	  if ((field->flags & java::lang::reflect::Modifier::STATIC))
  	    {
! 	      p = (ptr_t) field->u.addr;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8clabel);
  
  	      // also, if the static member is a reference,
  	      // mark also the value pointed to.  We check for isResolved
  	      // since marking can happen before memory is allocated for
  	      // static members.
! 	      if (JvFieldIsRef (field) && field->isResolved()) 
  		{
! 		  jobject val = *(jobject*) field->u.addr;
! 		  p = (ptr_t) val;
! 		  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit,
! 			      c, c8elabel);
  		}
  	    }
  	}
  
!       p = (ptr_t) c->vtable;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c9label);
!       p = (ptr_t) c->interfaces;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, cAlabel);
        for (int i = 0; i < c->interface_count; ++i)
  	{
! 	  p = (ptr_t) c->interfaces[i];
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, cClabel);
  	}
!       p = (ptr_t) c->loader;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, cBlabel);
!       p = (ptr_t) c->arrayclass;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, cDlabel);
!       p = (ptr_t) c->protectionDomain;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, cPlabel);
!       p = (ptr_t) c->hack_signers;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, cSlabel);
  
  #ifdef INTERPRETER
!       if (_Jv_IsInterpretedClass (c))
  	{
! 	  _Jv_InterpClass* ic = (_Jv_InterpClass*) c;
  
! 	  p = (ptr_t) ic->interpreted_methods;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, cElabel);
  
  	  for (int i = 0; i < c->method_count; i++)
  	    {
! 	      p = (ptr_t) ic->interpreted_methods[i];
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, \
! 			  cFlabel);
  
! 	      // Mark the direct-threaded code.
! 	      if ((c->methods[i].accflags
! 		   & java::lang::reflect::Modifier::NATIVE) == 0)
  		{
  		  _Jv_InterpMethod *im
  		    = (_Jv_InterpMethod *) ic->interpreted_methods[i];
  		  if (im)
  		    {
! 		      p = (ptr_t) im->prepared;
! 		      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, \
! 				  cFlabel);
  		    }
  		}
- 
- 	      // The interpreter installs a heap-allocated trampoline
- 	      // here, so we'll mark it.
- 	      p = (ptr_t) c->methods[i].ncode;
- 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
- 			  cm3label);
  	    }
  
! 	  p = (ptr_t) ic->field_initializers;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, cGlabel);
  	  
  	}
  #endif
--- 154,304 ----
  	  // points to a methods structure.
  	  for (int i = 0; i < c->method_count; ++i)
  	    {
! 	      p = (GC_PTR) c->methods[i].name;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
! 	      p = (GC_PTR) c->methods[i].signature;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
! 
! 	      // Note that we don't have to mark each individual throw
! 	      // separately, as these are stored in the constant pool.
! 	      p = (GC_PTR) c->methods[i].throws;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
  	    }
  	}
  
        // Mark all the fields.
!       p = (GC_PTR) c->fields;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
        for (int i = 0; i < c->field_count; ++i)
  	{
  	  _Jv_Field* field = &c->fields[i];
  
! 	  p = (GC_PTR) field->name;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
! 	  p = (GC_PTR) field->type;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
  
  	  // For the interpreter, we also need to mark the memory
  	  // containing static members
  	  if ((field->flags & java::lang::reflect::Modifier::STATIC))
  	    {
! 	      p = (GC_PTR) field->u.addr;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
  
  	      // also, if the static member is a reference,
  	      // mark also the value pointed to.  We check for isResolved
  	      // since marking can happen before memory is allocated for
  	      // 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;
! 		  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
  		}
  	    }
  	}
  
!       p = (GC_PTR) c->vtable;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
!       p = (GC_PTR) c->interfaces;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
        for (int i = 0; i < c->interface_count; ++i)
  	{
! 	  p = (GC_PTR) c->interfaces[i];
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
! 	}
!       p = (GC_PTR) c->loader;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
! 
!       // The dispatch tables can be allocated at runtime.
!       p = (GC_PTR) c->ancestors;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
!       if (c->idt)
! 	{
! 	  p = (GC_PTR) c->idt;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
! 
! 	  if (c->isInterface())
! 	    {
! 	      p = (GC_PTR) c->idt->iface.ioffsets;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c->idt);
! 	    }
! 	  else if (! c->isPrimitive())
! 	    {
! 	      // This field is only valid for ordinary classes.
! 	      p = (GC_PTR) c->idt->cls.itable;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c->idt);
! 	    }
  	}
! 
!       p = (GC_PTR) c->arrayclass;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
!       p = (GC_PTR) c->protectionDomain;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
!       p = (GC_PTR) c->hack_signers;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
!       p = (GC_PTR) c->aux_info;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
  
  #ifdef INTERPRETER
!       if (_Jv_IsInterpretedClass (c) && c->aux_info)
  	{
! 	  _Jv_InterpClass* ic = (_Jv_InterpClass*) c->aux_info;
  
! 	  p = (GC_PTR) ic->interpreted_methods;
! 	  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
! 	      // here, so we'll mark it.
! 	      p = (GC_PTR) c->methods[i].ncode;
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
  
! 	      using namespace java::lang::reflect;
! 
! 	      // Mark the direct-threaded code.  Note a subtlety here:
! 	      // when we add Miranda methods to a class, we don't
! 	      // resize its interpreted_methods array.  If we try to
! 	      // reference one of these methods, we may crash.
! 	      // However, we know these are all abstract, and we know
! 	      // that abstract methods have nothing useful in this
! 	      // array.  So, we skip all abstract methods to avoid the
! 	      // problem.  FIXME: this is pretty obscure, it may be
! 	      // better to add a methods to the execution engine and
! 	      // resize the array.
! 	      if ((c->methods[i].accflags & Modifier::ABSTRACT) != 0)
! 		continue;
! 
! 	      p = (GC_PTR) ic->interpreted_methods[i];
! 	      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic);
! 
! 	      if ((c->methods[i].accflags & Modifier::NATIVE) != 0)
! 		{
! 		  _Jv_JNIMethod *jm
! 		    = (_Jv_JNIMethod *) ic->interpreted_methods[i];
! 		  if (jm)
! 		    {
! 		      p = (GC_PTR) jm->jni_arg_types;
! 		      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, p);
! 		    }
! 		}
! 	      else
  		{
  		  _Jv_InterpMethod *im
  		    = (_Jv_InterpMethod *) ic->interpreted_methods[i];
  		  if (im)
  		    {
! 		      p = (GC_PTR) im->prepared;
! 		      MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic);
  		    }
  		}
  	    }
  
! 	  p = (GC_PTR) ic->field_initializers;
! 	  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic);
  	  
  	}
  #endif
*************** _Jv_MarkObj (void *addr, void *msp, void
*** 271,279 ****
  	      if (JvFieldIsRef (field))
  		{
  		  jobject val = JvGetObjectField (obj, field);
! 		  p = (ptr_t) val;
! 		  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit,
! 			      obj, elabel);
  		}
  	      field = field->getNextField ();
  	    }
--- 324,331 ----
  	      if (JvFieldIsRef (field))
  		{
  		  jobject val = JvGetObjectField (obj, field);
! 		  p = (GC_PTR) val;
! 		  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, obj);
  		}
  	      field = field->getNextField ();
  	    }
*************** _Jv_MarkObj (void *addr, void *msp, void
*** 288,297 ****
  // array (of objects).  We use `void *' arguments and return, and not
  // what the Boehm GC wants, to avoid pollution in our headers.
  void *
! _Jv_MarkArray (void *addr, void *msp, void *msl, void * /*env*/)
  {
!   mse *mark_stack_ptr = (mse *) msp;
!   mse *mark_stack_limit = (mse *) msl;
    jobjectArray array = (jobjectArray) addr;
  
    _Jv_VTable *dt = *(_Jv_VTable **) addr;
--- 340,352 ----
  // array (of objects).  We use `void *' arguments and return, and not
  // what the Boehm GC wants, to avoid pollution in our headers.
  void *
! _Jv_MarkArray (void *addr, void *msp, void *msl, void *env)
  {
!   struct GC_ms_entry *mark_stack_ptr = (struct GC_ms_entry *)msp;
!   struct GC_ms_entry *mark_stack_limit = (struct GC_ms_entry *)msl;
! 
!   if (env == (void *)1) /* Object allocated with debug allocator.	*/
!     addr = (void *)GC_USR_PTR_FROM_BASE(addr);
    jobjectArray array = (jobjectArray) addr;
  
    _Jv_VTable *dt = *(_Jv_VTable **) addr;
*************** _Jv_MarkArray (void *addr, void *msp, vo
*** 301,322 ****
    if (__builtin_expect (! dt || !(dt -> get_finalizer()), false))
      return mark_stack_ptr;
    jclass klass = dt->clas;
!   ptr_t p;
  
  # ifndef JV_HASH_SYNCHRONIZATION
      // Every object has a sync_info pointer.
!     p = (ptr_t) array->sync_info;
!     MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, array, e1label);
  # endif
    // Mark the object's class.
!   p = (ptr_t) klass;
!   MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, &(dt -> clas), o2label);
  
    for (int i = 0; i < JvGetArrayLength (array); ++i)
      {
        jobject obj = elements (array)[i];
!       p = (ptr_t) obj;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, array, e2label);
      }
  
    return mark_stack_ptr;
--- 356,377 ----
    if (__builtin_expect (! dt || !(dt -> get_finalizer()), false))
      return mark_stack_ptr;
    jclass klass = dt->clas;
!   GC_PTR p;
  
  # ifndef JV_HASH_SYNCHRONIZATION
      // Every object has a sync_info pointer.
!     p = (GC_PTR) array->sync_info;
!     MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, array);
  # endif
    // Mark the object's class.
!   p = (GC_PTR) klass;
!   MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, &(dt -> clas));
  
    for (int i = 0; i < JvGetArrayLength (array); ++i)
      {
        jobject obj = elements (array)[i];
!       p = (GC_PTR) obj;
!       MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, array);
      }
  
    return mark_stack_ptr;
*************** _Jv_BuildGCDescr(jclass self)
*** 364,370 ****
  	      // If we find a field outside the range of our bitmap,
  	      // fall back to procedure marker. The bottom 2 bits are
  	      // reserved.
! 	      if (off >= bits_per_word - 2)
  		return (void *) (GCJ_DEFAULT_DESCR);
  	      desc |= 1ULL << (bits_per_word - off - 1);
  	    }
--- 419,425 ----
  	      // If we find a field outside the range of our bitmap,
  	      // fall back to procedure marker. The bottom 2 bits are
  	      // reserved.
! 	      if (off >= (unsigned) bits_per_word - 2)
  		return (void *) (GCJ_DEFAULT_DESCR);
  	      desc |= 1ULL << (bits_per_word - off - 1);
  	    }
*************** _Jv_AllocBytes (jsize size)
*** 392,403 ****
--- 447,490 ----
    return r;
  }
  
+ #ifdef LIBGCJ_GC_DEBUG
+ 
+ void *
+ _Jv_AllocObj (jsize size, jclass klass)
+ {
+   return GC_GCJ_MALLOC (size, klass->vtable);
+ }
+ 
+ void *
+ _Jv_AllocPtrFreeObj (jsize size, jclass klass)
+ {
+ #ifdef JV_HASH_SYNCHRONIZATION
+   void * obj = GC_MALLOC_ATOMIC(size);
+   *((_Jv_VTable **) obj) = klass->vtable;
+ #else
+   void * obj = GC_GCJ_MALLOC(size, klass->vtable);
+ #endif
+   return obj;
+ }
+ 
+ #endif /* LIBGCJ_GC_DEBUG */
+ // In the non-debug case, the above two functions are defined
+ // as inline functions in boehm-gc.h.  In the debug case we
+ // really want to take advantage of the definitions in gc_gcj.h.
+ 
  // Allocate space for a new Java array.
  // Used only for arrays of objects.
  void *
  _Jv_AllocArray (jsize size, jclass klass)
  {
    void *obj;
+ 
+ #ifdef LIBGCJ_GC_DEBUG
+   // There isn't much to lose by scanning this conservatively.
+   // If we didn't, the mark proc would have to understand that
+   // it needed to skip the header.
+   obj = GC_MALLOC(size);
+ #else
    const jsize min_heap_addr = 16*1024;
    // A heuristic.  If size is less than this value, the size
    // stored in the array can't possibly be misinterpreted as
*************** _Jv_AllocArray (jsize size, jclass klass
*** 405,416 ****
    // completely conservatively, since no misidentification can
    // take place.
    
- #ifdef GC_DEBUG
-   // There isn't much to lose by scanning this conservatively.
-   // If we didn't, the mark proc would have to understand that
-   // it needed to skip the header.
-   obj = GC_MALLOC(size);
- #else
    if (size < min_heap_addr) 
      obj = GC_MALLOC(size);
    else 
--- 492,497 ----
*************** _Jv_GCSetMaximumHeapSize (size_t size)
*** 488,511 ****
    GC_set_max_heap_size ((GC_word) size);
  }
  
- // From boehm's misc.c 
- extern "C" void GC_enable();
- extern "C" void GC_disable();
- 
  void
  _Jv_DisableGC (void)
  {
-   _Jv_MutexLock (&disable_gc_mutex); 
    GC_disable();
-   _Jv_MutexUnlock (&disable_gc_mutex); 
  }
  
  void
  _Jv_EnableGC (void)
  {
-   _Jv_MutexLock (&disable_gc_mutex); 
    GC_enable();
-   _Jv_MutexUnlock (&disable_gc_mutex); 
  }
  
  static void * handle_out_of_memory(size_t)
--- 569,584 ----
*************** static void * handle_out_of_memory(size_
*** 513,518 ****
--- 586,614 ----
    _Jv_ThrowNoMemory();
  }
  
+ static void
+ gcj_describe_type_fn(void *obj, char *out_buf)
+ {
+   _Jv_VTable *dt = *(_Jv_VTable **) obj;
+ 
+   if (! dt /* Shouldn't happen */)
+     {
+       strcpy(out_buf, "GCJ (bad)");
+       return;
+     }
+   jclass klass = dt->clas;
+   if (!klass /* shouldn't happen */)
+     {
+       strcpy(out_buf, "GCJ (bad)");
+       return;
+     }
+   jstring name = klass -> getName();
+   size_t len = name -> length();
+   if (len >= GC_TYPE_DESCR_LEN) len = GC_TYPE_DESCR_LEN - 1;
+   JvGetStringUTFRegion (name, 0, len, out_buf);
+   out_buf[len] = '\0';
+ }
+ 
  void
  _Jv_InitGC (void)
  {
*************** _Jv_InitGC (void)
*** 523,528 ****
--- 619,626 ----
  
    // Configure the collector to use the bitmap marking descriptors that we
    // stash in the class vtable.
+   // We always use mark proc descriptor 0, since the compiler knows
+   // about it.
    GC_init_gcj_malloc (0, (void *) _Jv_MarkObj);  
  
    // Cause an out of memory error to be thrown from the allocators,
*************** _Jv_InitGC (void)
*** 533,555 ****
  
    // We use a different mark procedure for object arrays. This code 
    // configures a different object `kind' for object array allocation and
!   // marking. FIXME: see above.
!   array_free_list = (ptr_t *) GC_generic_malloc_inner ((MAXOBJSZ + 1)
! 						       * sizeof (ptr_t),
! 						       PTRFREE);
!   memset (array_free_list, 0, (MAXOBJSZ + 1) * sizeof (ptr_t));
! 
!   proc = GC_n_mark_procs++;
!   GC_mark_procs[proc] = (GC_mark_proc) _Jv_MarkArray;
! 
!   array_kind_x = GC_n_kinds++;
!   GC_obj_kinds[array_kind_x].ok_freelist = array_free_list;
!   GC_obj_kinds[array_kind_x].ok_reclaim_list = 0;
!   GC_obj_kinds[array_kind_x].ok_descriptor = GC_MAKE_PROC (proc, 0);
!   GC_obj_kinds[array_kind_x].ok_relocate_descr = FALSE;
!   GC_obj_kinds[array_kind_x].ok_init = TRUE;
  
!   _Jv_MutexInit (&disable_gc_mutex);
  }
  
  #ifdef JV_HASH_SYNCHRONIZATION
--- 631,644 ----
  
    // We use a different mark procedure for object arrays. This code 
    // configures a different object `kind' for object array allocation and
!   // marking.
!   array_free_list = GC_new_free_list();
!   proc = GC_new_proc((GC_mark_proc)_Jv_MarkArray);
!   array_kind_x = GC_new_kind(array_free_list, GC_MAKE_PROC (proc, 0), 0, 1);
  
!   // Arrange to have the GC print Java class names in backtraces, etc.
!   GC_register_describe_type_fn(GC_gcj_kind, gcj_describe_type_fn);
!   GC_register_describe_type_fn(GC_gcj_debug_kind, gcj_describe_type_fn);
  }
  
  #ifdef JV_HASH_SYNCHRONIZATION
*************** _Jv_GCInitializeFinalizers (void (*notif
*** 602,608 ****
  void
  _Jv_GCRegisterDisappearingLink (jobject *objp)
  {
!   GC_general_register_disappearing_link ((GC_PTR *) objp, (GC_PTR) *objp);
  }
  
  jboolean
--- 691,701 ----
  void
  _Jv_GCRegisterDisappearingLink (jobject *objp)
  {
!   // This test helps to ensure that we meet a precondition of
!   // GC_general_register_disappearing_link, viz. "Obj must be a
!   // pointer to the first word of an object we allocated."
!   if (GC_base(*objp))
!     GC_general_register_disappearing_link ((GC_PTR *) objp, (GC_PTR) *objp);
  }
  
  jboolean
diff -Nrcpad gcc-3.4.3/libjava/configure gcc-4.0.0/libjava/configure
*** gcc-3.4.3/libjava/configure	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/libjava/configure	Thu Apr 21 07:04:10 2005
***************
*** 1,98 ****
  #! /bin/sh
- 
  # Guess values for system-dependent variables and create Makefiles.
! # Generated automatically using autoconf version 2.13 
! # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  #
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
  
! # Defaults:
! ac_help=
  ac_default_prefix=/usr/local
! # Any additions from configure.in:
! ac_help="$ac_help
!   --with-target-subdir=SUBDIR
!                            configuring in a subdirectory"
! ac_help="$ac_help
!   --with-cross-host=HOST  configuring with a cross compiler"
! ac_help="$ac_help
!   --with-newlib           Configuring with newlib"
! ac_help="$ac_help
!   --enable-multilib       build many library versions (default)"
! ac_help="$ac_help
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer"
! ac_help="$ac_help
!   --enable-shared[=PKGS]  build shared libraries [default=yes]"
! ac_help="$ac_help
!   --enable-static[=PKGS]  build static libraries [default=yes]"
! ac_help="$ac_help
!   --enable-fast-install[=PKGS]  optimize for fast installation [default=yes]"
! ac_help="$ac_help
!   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]"
! ac_help="$ac_help
!   --disable-libtool-lock  avoid locking (might break parallel builds)"
! ac_help="$ac_help
!   --with-pic              try to use only PIC/non-PIC objects [default=use both]"
! ac_help="$ac_help
!   --disable-getenv-properties
!                           don't set system properties from GCJ_PROPERTIES"
! ac_help="$ac_help
!   --enable-hash-synchronization
!                           use global hash table for monitor locks"
! ac_help="$ac_help
!   --enable-libgcj-multifile
!                           allow compilation of several files at once"
! ac_help="$ac_help
!   --with-win32-nlsapi=ansi, unicows or unicode
!                           native MinGW libgcj Win32 OS API [ansi]"
! ac_help="$ac_help
!   --enable-libgcj-debug   enable runtime debugging code"
! ac_help="$ac_help
!   --enable-interpreter    enable interpreter"
! ac_help="$ac_help
!   --enable-sjlj-exceptions  force use of builtin_setjmp for exceptions"
! ac_help="$ac_help
!   --disable-java-net      disable java.net"
! ac_help="$ac_help
!   --without-libffi        don't use libffi"
! ac_help="$ac_help
!   --disable-jvmpi         disable JVMPI support"
! ac_help="$ac_help
!   --with-ecos             enable runtime eCos target support"
! ac_help="$ac_help
!   --with-system-zlib      use installed libz"
! ac_help="$ac_help
!   --with-x                use the X Window System"
! ac_help="$ac_help
!   --enable-java-awt       list of AWT peer implementations to be built"
! ac_help="$ac_help
!   --enable-gtk-cairo       build the cairo Graphics2D implementation on GTK"
! ac_help="$ac_help
!   --enable-java-gc=TYPE   choose garbage collector [boehm]"
! ac_help="$ac_help
!   --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib"
! ac_help="$ac_help
!   --disable-gtktest       do not try to compile and run a test GTK+ program"
! ac_help="$ac_help
!   --disable-glibtest      do not try to compile and run a test GLIB program"
! ac_help="$ac_help
!   --with-libart-prefix=PFX   Prefix where LIBART is installed (optional)"
! ac_help="$ac_help
!   --with-libart-exec-prefix=PFX Exec prefix where LIBART is installed (optional)"
! ac_help="$ac_help
!   --disable-libarttest       Do not try to compile and run a test LIBART program"
  
  # Initialize some variables set by options.
  # The variables have the same names as the options, with
  # dashes changed to underlines.
! build=NONE
! cache_file=./config.cache
  exec_prefix=NONE
- host=NONE
  no_create=
- nonopt=NONE
  no_recursion=
  prefix=NONE
  program_prefix=NONE
--- 1,326 ----
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # Generated by GNU Autoconf 2.59 for libjava version-unused.
  #
+ # 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='libjava'
! PACKAGE_TARNAME='libjava'
! PACKAGE_VERSION='version-unused'
! PACKAGE_STRING='libjava version-unused'
! PACKAGE_BUGREPORT=''
! 
! ac_unique_file="java/lang/System.java"
! ac_subdirs_all="$ac_subdirs_all libltdl"
! # 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 libgcj_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical LN_S mkinstalldirs CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LDFLAGS 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 DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBGCJ_CFLAGS LIBGCJ_CXXFLAGS LIBGCJ_JAVAFLAGS LIBGCJ_LD_SYMBOLIC INCLTDL LIBLTDL DIRLTDL LIBTOOL CXXCPP CPPFLAGS GCJ GCJFLAGS GCJDEPMODE am__fastdepGCJ_TRUE am__fastdepGCJ_FALSE subdirs TESTSUBDIR_TRUE TESTSUBDIR_FALSE ONESTEP_TRUE ONESTEP_FALSE JAVA_HOME_SET_TRUE JAVA_HOME_SET_FALSE JAVA_HOME LIBGCJDEBUG INTERPRETER LIBFFI LIBFFIINCS PLATFORM_INNER_NAT_HDRS CPP EGREP USING_WIN32_PLATFORM_TRUE USING_WIN32_PLATFORM_FALSE USING_POSIX_PLATFORM_TRUE USING_POSIX_PLATFORM_FALSE USING_ECOS_PLATFORM_TRUE USING_ECOS_PLATFORM_FALSE USING_DARWIN_CRT_TRUE USING_DARWIN_CRT_FALSE SYSTEMSPEC LIBGCJTESTSPEC ZLIBSPEC ZLIBTESTSPEC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS TOOLKIT XLIB_AWT_TRUE XLIB_AWT_FALSE GTK_AWT_TRUE GTK_AWT_FALSE GTK_CAIRO_TRUE GTK_CAIRO_FALSE PKG_CONFIG CAIRO_CFLAGS CAIRO_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS GCLIBS GCINCS GCDEPS GCSPEC JC1GCSPEC GCTESTSPEC USING_BOEHMGC_TRUE USING_BOEHMGC_FALSE USING_NOGC_TRUE USING_NOGC_FALSE THREADLIBS THREADINCS THREADDEPS THREADSPEC THREADLDFLAGS THREADCXXFLAGS USING_POSIX_THREADS_TRUE USING_POSIX_THREADS_FALSE USING_WIN32_THREADS_TRUE USING_WIN32_THREADS_FALSE USING_NO_THREADS_TRUE USING_NO_THREADS_FALSE HASH_SYNC_SPEC USING_GCC_TRUE USING_GCC_FALSE gcc_version_trigger gcc_version_full gcc_version tool_include_dir LIBICONV LTLIBICONV GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBART_CFLAGS LIBART_LIBS SUPPLY_BACKTRACE_TRUE SUPPLY_BACKTRACE_FALSE GCJH ZIP CLASSPATH_SEPARATOR ac_ct_GCJ ZLIBS SYS_ZLIBS ZINCS DIVIDESPEC CHECKREFSPEC EXCEPTIONSPEC IEEESPEC NATIVE_TRUE NATIVE_FALSE NEEDS_DATA_START_TRUE NEEDS_DATA_START_FALSE GCC_UNWIND_INCLUDE toolexecdir toolexecmainlibdir toolexeclibdir GCJVERSION gxx_include_dir libstdcxx_incdir ALLOCA PERL BACKTRACESPEC SYSDEP_SOURCES here 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_transform_name=s,x,x,
*** 101,110 ****
  silent=
  site=
  srcdir=
- target=NONE
  verbose=
  x_includes=NONE
  x_libraries=NONE
  bindir='${exec_prefix}/bin'
  sbindir='${exec_prefix}/sbin'
  libexecdir='${exec_prefix}/libexec'
--- 329,343 ----
  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'
*************** oldincludedir='/usr/include'
*** 118,134 ****
  infodir='${prefix}/info'
  mandir='${prefix}/man'
  
- # Initialize some other variables.
- subdirs=
- MFLAGS= MAKEFLAGS=
- SHELL=${CONFIG_SHELL-/bin/sh}
- # Maximum number of lines to put in a shell here document.
- ac_max_here_lines=12
- 
  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"
--- 351,359 ----
*************** do
*** 136,194 ****
      continue
    fi
  
!   case "$ac_option" in
!   -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
!   *) ac_optarg= ;;
!   esac
  
    # 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 ;;
    -build=* | --build=* | --buil=* | --bui=* | --bu=*)
!     build="$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" ;;
  
    -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
      ac_prev=datadir ;;
    -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
    | --da=*)
!     datadir="$ac_optarg" ;;
  
    -disable-* | --disable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     eval "enable_${ac_feature}=no" ;;
  
    -enable-* | --enable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) 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- \
--- 361,419 ----
      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- \
*************** do
*** 197,291 ****
    -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)
!     # 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 << EOF
! Usage: configure [options] [host]
! Options: [defaults in brackets after descriptions]
! Configuration:
!   --cache-file=FILE       cache test results in FILE
!   --help                  print this message
!   --no-create             do not create output files
!   --quiet, --silent       do not print \`checking...' messages
!   --version               print the version of autoconf that created configure
! Directory and file names:
!   --prefix=PREFIX         install architecture-independent files in PREFIX
!                           [$ac_default_prefix]
!   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
!                           [same as prefix]
!   --bindir=DIR            user executables in DIR [EPREFIX/bin]
!   --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
!   --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
!   --datadir=DIR           read-only architecture-independent data in DIR
!                           [PREFIX/share]
!   --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
!   --sharedstatedir=DIR    modifiable architecture-independent data in DIR
!                           [PREFIX/com]
!   --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
!   --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
!   --includedir=DIR        C header files in DIR [PREFIX/include]
!   --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
!   --infodir=DIR           info documentation in DIR [PREFIX/info]
!   --mandir=DIR            man documentation in DIR [PREFIX/man]
!   --srcdir=DIR            find the sources in DIR [configure dir or ..]
!   --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
! EOF
!     cat << EOF
! Host type:
!   --build=BUILD           configure for building on BUILD [BUILD=HOST]
!   --host=HOST             configure for HOST [guessed]
!   --target=TARGET         configure for TARGET [TARGET=HOST]
! Features and packages:
!   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
!   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
!   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
!   --x-includes=DIR        X include files are in DIR
!   --x-libraries=DIR       X library files are in DIR
! EOF
!     if test -n "$ac_help"; then
!       echo "--enable and --with options recognized:$ac_help"
!     fi
!     exit 0 ;;
  
    -host | --host | --hos | --ho)
!     ac_prev=host ;;
    -host=* | --host=* | --hos=* | --ho=*)
!     host="$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 \
--- 422,468 ----
    -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 \
*************** EOF
*** 294,312 ****
    -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)
      no_create=yes ;;
  
    -no-recursion | --no-recursion | --no-recursio | --no-recursi \
--- 471,489 ----
    -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 \
*************** EOF
*** 320,345 ****
    -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 \
--- 497,522 ----
    -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 \
*************** EOF
*** 356,362 ****
    | --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)
--- 533,539 ----
    | --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)
*************** EOF
*** 366,372 ****
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir="$ac_optarg" ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
--- 543,549 ----
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir=$ac_optarg ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
*************** EOF
*** 377,434 ****
    | --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 ;;
    -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
!     target="$ac_optarg" ;;
  
    -v | -verbose | --verbose | --verbos | --verbo | --verb)
      verbose=yes ;;
  
!   -version | --version | --versio | --versi | --vers)
!     echo "configure generated by autoconf version 2.13"
!     exit 0 ;;
  
    -with-* | --with-*)
!     ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
      ac_package=`echo $ac_package| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) ac_optarg=yes ;;
      esac
!     eval "with_${ac_package}='$ac_optarg'" ;;
  
    -without-* | --without-*)
!     ac_package=`echo $ac_option|sed -e 's/-*without-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
!     ac_package=`echo $ac_package| sed 's/-/_/g'`
!     eval "with_${ac_package}=no" ;;
  
    --x)
      # Obsolete; use --with-x.
--- 554,610 ----
    | --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.
*************** EOF
*** 439,537 ****
      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 "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
      ;;
  
    *)
!     if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
!       echo "configure: warning: $ac_option: invalid host type" 1>&2
!     fi
!     if test "x$nonopt" != xNONE; then
!       { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
!     fi
!     nonopt="$ac_option"
      ;;
  
    esac
  done
  
  if test -n "$ac_prev"; then
!   { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
! fi
! 
! trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
! 
! # File descriptor usage:
! # 0 standard input
! # 1 file creation
! # 2 errors and warnings
! # 3 some systems may open it to /dev/tty
! # 4 used on the Kubota Titan
! # 6 checking for... messages and results
! # 5 compiler messages saved in config.log
! if test "$silent" = yes; then
!   exec 6>/dev/null
! else
!   exec 6>&1
  fi
- exec 5>./config.log
  
! echo "\
! This file contains any messages produced by compilers while
! running configure, to aid debugging if configure makes a mistake.
! " 1>&5
  
! # Strip out --no-create and --no-recursion so they do not pile up.
! # Also quote any args containing shell metacharacters.
! ac_configure_args=
! for ac_arg
  do
!   case "$ac_arg" in
!   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
!   | --no-cr | --no-c) ;;
!   -no-recursion | --no-recursion | --no-recursio | --no-recursi \
!   | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
!   *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
!   ac_configure_args="$ac_configure_args '$ac_arg'" ;;
!   *) ac_configure_args="$ac_configure_args $ac_arg" ;;
    esac
  done
  
! # NLS nuisances.
! # Only set these to C if already set.  These must not be set unconditionally
! # because not all systems understand e.g. LANG=C (notably SCO).
! # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
! # Non-C LC_CTYPE values break the ctype check.
! if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
! if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
! if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
! if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  
! # 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
  
- # A filename unique to this package, relative to the directory that
- # configure is in, which we can look for to find out if srcdir is correct.
- ac_unique_file=java/lang/System.java
  
  # 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_prog=$0
!   ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
!   test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
    srcdir=$ac_confdir
    if test ! -r $srcdir/$ac_unique_file; then
      srcdir=..
--- 615,724 ----
      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=..
*************** else
*** 541,553 ****
  fi
  if test ! -r $srcdir/$ac_unique_file; then
    if test "$ac_srcdir_defaulted" = yes; then
!     { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
    else
!     { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
    fi
  fi
! srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
  
  # Prefer explicitly selected file to automatically selected ones.
  if test -z "$CONFIG_SITE"; then
    if test "x$prefix" != xNONE; then
--- 728,1248 ----
  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_CXXCPP_set=${CXXCPP+set}
! ac_env_CXXCPP_value=$CXXCPP
! ac_cv_env_CXXCPP_set=${CXXCPP+set}
! ac_cv_env_CXXCPP_value=$CXXCPP
! 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
! 
! #
! # 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 libjava version-unused 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 libjava version-unused:";;
+    esac
+   cat <<\_ACEOF
+ 
+ Optional Features:
+   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+   --enable-version-specific-runtime-libs
+                           specify that runtime libraries should be installed
+                           in a compiler-specific directory
+   --enable-multilib       build many library versions (default)
+   --disable-dependency-tracking  speeds up one-time build
+   --enable-dependency-tracking   do not reject slow dependency extractors
+   --enable-maintainer-mode  enable make rules and dependencies not useful
+ 			  (and sometimes confusing) to the casual installer
+   --enable-shared=PKGS  build shared libraries default=yes
+   --enable-static=PKGS  build static libraries default=yes
+   --enable-fast-install=PKGS  optimize for fast installation default=yes
+   --disable-libtool-lock  avoid locking (might break parallel builds)
+   --disable-getenv-properties
+                           don't set system properties from GCJ_PROPERTIES
+   --enable-hash-synchronization
+                           use global hash table for monitor locks
+   --enable-libgcj-multifile
+                  allow compilation of several files at once
+ 
+   --enable-libgcj-debug   enable runtime debugging code
+   --enable-gc-debug       include full support for pointer backtracing etc.
+   --enable-interpreter    enable interpreter
+   --enable-sjlj-exceptions
+                           force use of builtin_setjmp for exceptions
+   --disable-java-net      disable java.net
+   --disable-jvmpi         disable JVMPI support
+   --enable-java-awt       list of AWT peer implementations to be built
+   --enable-gtk-cairo      build the cairo Graphics2D implementation on GTK
+   --enable-java-gc=TYPE   choose garbage collector (default is boehm)
+   --disable-rpath         do not hardcode runtime library paths
+ 
+ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+   --with-target-subdir=SUBDIR
+                           configure in a subdirectory
+   --with-cross-host=HOST  configure with a cross compiler from HOST
+   --with-newlib           configure with newlib
+   --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-java-home=DIRECTORY
+                           value of java.home system property
+   --with-win32-nlsapi=ansi or unicows or unicode
+                           native MinGW libgcj Win32 OS API (default is ansi)
+   --without-libffi        don't use libffi
+   --with-ecos             enable runtime eCos target support
+   --with-system-zlib      use installed libz
+   --with-x                use the X Window System
+   --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
+ 
+ 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>
+   CXX         C++ compiler command
+   CXXFLAGS    C++ compiler flags
+   CXXCPP      C++ preprocessor
+   CPP         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.
+ 
+ _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
+ libjava configure version-unused
+ 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 libjava $as_me version-unused, 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
*************** if test -z "$CONFIG_SITE"; then
*** 558,877 ****
  fi
  for ac_site_file in $CONFIG_SITE; do
    if test -r "$ac_site_file"; then
!     echo "loading site script $ac_site_file"
      . "$ac_site_file"
    fi
  done
  
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
- ac_exeext=
- ac_objext=o
- if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-     ac_n= ac_c='
- ' ac_t='	'
-   else
-     ac_n=-n ac_c= ac_t=
-   fi
- else
-   ac_n= ac_c='\c' ac_t=
- fi
  
  
  
- # This works around the fact that libtool configuration may change LD
- # for this particular configuration, but some shells, instead of
- # keeping the changes in LD private, export them just because LD is
- # exported.
- ORIGINAL_LD_FOR_MULTILIBS=$LD
  
- echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
- echo "configure:605: checking whether ln -s works" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   rm -f conftestdata
- if ln -s X conftestdata 2>/dev/null
- then
-   rm -f conftestdata
-   ac_cv_prog_LN_S="ln -s"
- else
-   ac_cv_prog_LN_S=ln
- fi
- fi
- LN_S="$ac_cv_prog_LN_S"
- if test "$ac_cv_prog_LN_S" = "ln -s"; then
-   echo "$ac_t""yes" 1>&6
- else
-   echo "$ac_t""no" 1>&6
- fi
  
  
- # Check whether --with-target-subdir or --without-target-subdir was given.
- if test "${with_target_subdir+set}" = set; then
-   withval="$with_target_subdir"
-   :
- fi
  
- # Check whether --with-cross-host or --without-cross-host was given.
- if test "${with_cross_host+set}" = set; then
-   withval="$with_cross_host"
-   :
- fi
  
  
- # Check whether --with-newlib or --without-newlib was given.
- if test "${with_newlib+set}" = set; then
-   withval="$with_newlib"
-   :
- fi
  
  
- am__api_version="1.4"
- # 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
- # 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"
- # ./install, which can be erroneously created by make from ./install.sh.
- echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
- echo "configure:659: checking for a BSD compatible install" >&5
- if test -z "$INSTALL"; then
- if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-     IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
-   for ac_dir in $PATH; do
-     # Account for people who put trailing slashes in PATH elements.
-     case "$ac_dir/" in
-     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
-         if test -f $ac_dir/$ac_prog; then
- 	  if test $ac_prog = install &&
-             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- 	    # AIX install.  It has an incompatible calling convention.
- 	    :
- 	  else
- 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
- 	    break 2
- 	  fi
- 	fi
-       done
-       ;;
-     esac
-   done
-   IFS="$ac_save_IFS"
  
- 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 "$ac_t""$INSTALL" 1>&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_PROGRAM}'
  
- test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
- echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
- echo "configure:712: checking whether build environment is sane" >&5
- # Just in case
- sleep 1
- echo timestamp > conftestfile
- # 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 conftestfile 2> /dev/null`
-    if test "$*" = "X"; then
-       # -L didn't work.
-       set X `ls -t $srcdir/configure conftestfile`
-    fi
-    if test "$*" != "X $srcdir/configure conftestfile" \
-       && test "$*" != "X conftestfile $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 "configure: error: ls -t appears to fail.  Make sure there is not a broken
- alias in your environment" 1>&2; exit 1; }
-    fi
  
-    test "$2" = conftestfile
-    )
- then
-    # Ok.
-    :
- else
-    { echo "configure: error: newly created file is older than distributed files!
- Check your system clock" 1>&2; exit 1; }
- fi
- rm -f conftest*
- echo "$ac_t""yes" 1>&6
- if test "$program_transform_name" = s,x,x,; then
-   program_transform_name=
- else
-   # Double any \ or $.  echo might interpret backslashes.
-   cat <<\EOF_SED > conftestsed
- s,\\,\\\\,g; s,\$,$$,g
- EOF_SED
-   program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
-   rm -f conftestsed
- fi
- 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"
  
- # sed with no file args requires a program.
- test "$program_transform_name" = "" && program_transform_name="s,x,x,"
  
- echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
- echo "configure:769: checking whether ${MAKE-make} sets \${MAKE}" >&5
- set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftestmake <<\EOF
- all:
- 	@echo 'ac_maketemp="${MAKE}"'
- EOF
- # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
- eval `${MAKE-make} -f conftestmake 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 conftestmake
- fi
- if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   SET_MAKE=
- else
-   echo "$ac_t""no" 1>&6
-   SET_MAKE="MAKE=${MAKE-make}"
- fi
  
- if test $host != $build; then
-   ac_tool_prefix=${host_alias}-
- else
-   ac_tool_prefix=
- fi
  
- echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
- echo "configure:802: checking for Cygwin environment" >&5
- if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 807 "configure"
- #include "confdefs.h"
  
- int main() {
  
- #ifndef __CYGWIN__
- #define __CYGWIN__ __CYGWIN32__
- #endif
- return __CYGWIN__;
- ; return 0; }
- EOF
- if { (eval echo configure:818: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cygwin=yes
- else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   ac_cv_cygwin=no
- fi
- rm -f conftest*
- rm -f conftest*
- fi
  
- echo "$ac_t""$ac_cv_cygwin" 1>&6
- CYGWIN=
- test "$ac_cv_cygwin" = yes && CYGWIN=yes
- echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
- echo "configure:835: checking for mingw32 environment" >&5
- if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 840 "configure"
- #include "confdefs.h"
  
- int main() {
- return __MINGW32__;
- ; return 0; }
- EOF
- if { (eval echo configure:847: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_mingw32=yes
- else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   ac_cv_mingw32=no
- fi
- rm -f conftest*
- rm -f conftest*
- fi
  
- echo "$ac_t""$ac_cv_mingw32" 1>&6
- MINGW32=
- test "$ac_cv_mingw32" = yes && MINGW32=yes
  
- # Check whether --enable-multilib or --disable-multilib was given.
- if test "${enable_multilib+set}" = set; then
-   enableval="$enable_multilib"
-   case "${enableval}" in
-   yes) multilib=yes ;;
-   no)  multilib=no ;;
-   *)   { echo "configure: error: bad value ${enableval} for multilib option" 1>&2; exit 1; } ;;
-  esac
- else
-   multilib=yes
- fi
  
  
  # When building with srcdir == objdir, links to the source files will
  # be created in directories within the target_subdir.  We have to
--- 1253,1378 ----
  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
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
+ # We use these options to decide which functions to include.
+ 
+ # Check whether --with-target-subdir or --without-target-subdir was given.
+ if test "${with_target_subdir+set}" = set; then
+   withval="$with_target_subdir"
+ 
+ fi;
+ 
+ # We may get other options which we don't document:
+ # --with-target-subdir, --with-multisrctop, --with-multisubdir
  
  # When building with srcdir == objdir, links to the source files will
  # be created in directories within the target_subdir.  We have to
*************** libgcj_basedir=$srcdir/$toprel/./libjava
*** 896,902 ****
  
  
  ac_aux_dir=
! for ac_dir in ${srcdir}/$toprel $srcdir/${srcdir}/$toprel; do
    if test -f $ac_dir/install-sh; then
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install-sh -c"
--- 1397,1403 ----
  
  
  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"
*************** for ac_dir in ${srcdir}/$toprel $srcdir/
*** 905,1202 ****
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install.sh -c"
      break
!   fi
! done
! if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in ${srcdir}/$toprel $srcdir/${srcdir}/$toprel" 1>&2; exit 1; }
! fi
! ac_config_guess=$ac_aux_dir/config.guess
! ac_config_sub=$ac_aux_dir/config.sub
! ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
! 
! if :; then :; else
!   # This overrides the previous occurrence for automake, but not for
!   # autoconf, which is exactly what we want.
!   ac_aux_dir=
! for ac_dir in .. $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
    fi
  done
  if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in .. $srcdir/.." 1>&2; exit 1; }
  fi
! ac_config_guess=$ac_aux_dir/config.guess
! ac_config_sub=$ac_aux_dir/config.sub
! ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  
  fi
  
- # This works around an automake problem.
- mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
  
  
  
! # Do some error checking and defaulting for the host and target type.
! # The inputs are:
! #    configure --host=HOST --target=TARGET --build=BUILD NONOPT
! #
! # The rules are:
! # 1. You are not allowed to specify --host, --target, and nonopt at the
! #    same time.
! # 2. Host defaults to nonopt.
! # 3. If nonopt is not specified, then host defaults to the current host,
! #    as determined by config.guess.
! # 4. Target and build default to nonopt.
! # 5. If nonopt is not specified, then target and build default to host.
  
  # The aliases save the names the user supplied, while $host etc.
  # will get canonicalized.
! case $host---$target---$nonopt in
! NONE---*---* | *---NONE---* | *---*---NONE) ;;
! *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
  esac
  
  
! # Make sure we can run config.sub.
! if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
! else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
  fi
  
- echo $ac_n "checking host system type""... $ac_c" 1>&6
- echo "configure:974: checking host system type" >&5
  
! host_alias=$host
! case "$host_alias" in
! NONE)
!   case $nonopt in
!   NONE)
!     if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
!     else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
!     fi ;;
!   *) host_alias=$nonopt ;;
!   esac ;;
! esac
  
- host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
- host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
- host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
- host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
- echo "$ac_t""$host" 1>&6
  
- echo $ac_n "checking target system type""... $ac_c" 1>&6
- echo "configure:995: checking target system type" >&5
  
! target_alias=$target
! case "$target_alias" in
! NONE)
!   case $nonopt in
!   NONE) target_alias=$host_alias ;;
!   *) target_alias=$nonopt ;;
!   esac ;;
! esac
  
! target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
! target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$target" 1>&6
  
- echo $ac_n "checking build system type""... $ac_c" 1>&6
- echo "configure:1013: checking build system type" >&5
  
! build_alias=$build
! case "$build_alias" in
! NONE)
!   case $nonopt in
!   NONE) build_alias=$host_alias ;;
!   *) build_alias=$nonopt ;;
!   esac ;;
! esac
  
! build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
! build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
! build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
! build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
! echo "$ac_t""$build" 1>&6
  
- test "$host_alias" != "$target_alias" &&
-   test "$program_prefix$program_suffix$program_transform_name" = \
-     NONENONEs,x,x, &&
-   program_prefix=${target_alias}-
  
  
  
  
  
! # Extract the first word of "gcc", so it can be a program name with args.
  set dummy gcc; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1042: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$CC"; then
    ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CC="gcc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! CC="$ac_cv_prog_CC"
  if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1072: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$CC"; then
    ac_cv_prog_CC="$CC" # Let the user override the test.
  else
-   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_prog_rejected=no
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
!         ac_prog_rejected=yes
! 	continue
!       fi
!       ac_cv_prog_CC="cc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  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 $# -gt 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
!     set dummy "$ac_dir/$ac_word" "$@"
!     shift
!     ac_cv_prog_CC="$@"
    fi
  fi
  fi
  fi
! CC="$ac_cv_prog_CC"
  if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
!   if test -z "$CC"; then
!     case "`uname -s`" in
!     *win32* | *WIN32*)
!       # Extract the first word of "cl", so it can be a program name with args.
! set dummy cl; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1123: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$CC"; then
    ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CC="cl"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! CC="$ac_cv_prog_CC"
  if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
!  ;;
!     esac
    fi
!   test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  fi
  
  
! echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
! echo "configure:1156: checking whether we are using GNU C" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.c <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
!   ac_cv_prog_gcc=yes
  else
!   ac_cv_prog_gcc=no
  fi
  fi
  
! echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  
! if test $ac_cv_prog_gcc = yes; then
!   GCC=yes
  else
!   GCC=
  fi
  
! ac_test_CFLAGS="${CFLAGS+set}"
! ac_save_CFLAGS="$CFLAGS"
! CFLAGS=
! echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
! echo "configure:1184: checking whether ${CC-cc} accepts -g" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   echo 'void f(){}' > conftest.c
! if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
!   ac_cv_prog_cc_g=yes
  else
!   ac_cv_prog_cc_g=no
  fi
- rm -f conftest*
  
  fi
  
! echo "$ac_t""$ac_cv_prog_cc_g" 1>&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"
--- 1406,2296 ----
      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}-
!  case ${build_alias} in
!   "") build_noncanonical=${build} ;;
!   *) build_noncanonical=${build_alias} ;;
  esac
  
+  case ${host_alias} in
+   "") host_noncanonical=${build_noncanonical} ;;
+   *) host_noncanonical=${host_alias} ;;
+ esac
  
!  case ${target_alias} in
!   "") target_noncanonical=${host_noncanonical} ;;
!   *) target_noncanonical=${target_alias} ;;
! esac
! 
! 
! 
! 
! # This works around the fact that libtool configuration may change LD
! # for this particular configuration, but some shells, instead of
! # keeping the changes in LD private, export them just because LD is
! # exported.
! ORIGINAL_LD_FOR_MULTILIBS=$LD
! 
! 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
  
  
! # This works around an automake problem.
! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
  
  
  
! # Check whether --with-cross-host or --without-cross-host was given.
! if test "${with_cross_host+set}" = set; then
!   withval="$with_cross_host"
  
! fi;
  
  
! # Check whether --with-newlib or --without-newlib was given.
! if test "${with_newlib+set}" = set; then
!   withval="$with_newlib"
  
! fi;
! 
! # Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given.
! if test "${enable_version_specific_runtime_libs+set}" = set; then
!   enableval="$enable_version_specific_runtime_libs"
!   case "$enableval" in
!       yes) version_specific_libs=yes ;;
!       no)  version_specific_libs=no ;;
!       *)   { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable version-specific libs" >&5
! echo "$as_me: error: Unknown argument to enable/disable version-specific libs" >&2;}
!    { (exit 1); exit 1; }; };;
!      esac
! else
!   version_specific_libs=no
! 
! fi;
! 
! # Default to --enable-multilib
! # Check whether --enable-multilib or --disable-multilib was given.
! if test "${enable_multilib+set}" = set; then
!   enableval="$enable_multilib"
!   case "${enableval}" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   { { echo "$as_me:$LINENO: error: bad value ${enableval} for multilib option" >&5
! echo "$as_me: error: bad value ${enableval} for multilib option" >&2;}
!    { (exit 1); exit 1; }; } ;;
!  esac
! else
!   multilib=yes
! fi;
! # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
  
  
+ # (1) We use an abnormal CXX (without library references), so we
+ # must cache it under a different name.
+ # (2) CC, CFLAGS, CXX, CXXFLAGS, LDFLAGS must not be 'precious', or
+ # the non-multilib-adjusted value will be used in multilibs.
+ # (3) As a side effect, we must SUBST CXXFLAGS, CFLAGS, and LDFLAGS ourselves.
+ # (4) As another side effect, automake doesn't automatically include them
+ # in Makefile.in.
+ # (5) For libstdc++-v3, -fno-builtin must be present here so that a
+ # non-conflicting form of std::exit can be guessed by AC_PROG_CXX, and
+ # used in later tests.  This may not be necessary in libjava; I don't know.
  
  
  
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-builtin"
+ 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
! # FIXME: Cleanup?
! 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
!   gcc_no_link=no
  else
!   gcc_no_link=yes
! fi
! 
! if test x$gcc_no_link = xyes; then
!   # Setting cross_compile will disable run tests; it will
!   # also disable AC_CHECK_FILE but that's generally
!   # correct if we can't link.
!   cross_compiling=yes
!   EXEEXT=
  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
! 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
! fi
! 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
*** 1210,1537 ****
      CFLAGS=
    fi
  fi
  
  
! # We use the libstdc++-v3 version of LIB_AC_PROG_CXX, but use
! # glibjava_CXX instead of glibcpp_CXX.  That's because we're passed a
! # different definition of CXX than other directories, since we don't
! # depend on libstdc++-v3 having already been built.
  
  
  
! # Use glibjava_CXX so that we do not cause CXX to be cached with the
! # flags that come in CXX while configuring libjava.  They're different
! # from those used for all other target libraries.  If CXX is set in
! # the environment, respect that here.
! glibjava_CXX=$CXX
! for ac_prog in $CCC c++ g++ gcc CC cxx cc++
  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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1233: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_glibjava_CXX'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$glibjava_CXX"; then
!   ac_cv_prog_glibjava_CXX="$glibjava_CXX" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_glibjava_CXX="$ac_prog"
!       break
!     fi
    done
!   IFS="$ac_save_ifs"
  fi
  fi
! glibjava_CXX="$ac_cv_prog_glibjava_CXX"
! if test -n "$glibjava_CXX"; then
!   echo "$ac_t""$glibjava_CXX" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! test -n "$glibjava_CXX" && break
  done
! test -n "$glibjava_CXX" || glibjava_CXX="gcc"
  
  
- CXX=$glibjava_CXX
- test -z "$glibjava_CXX" && { echo "configure: error: no acceptable c++ found in \$PATH" 1>&2; exit 1; }
  
! echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
! echo "configure:1268: checking whether we are using GNU C++" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.C <<EOF
! #ifdef __GNUC__
!   yes;
  #endif
! EOF
! if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1277: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
!   ac_cv_prog_gxx=yes
  else
!   ac_cv_prog_gxx=no
  fi
  fi
  
! echo "$ac_t""$ac_cv_prog_gxx" 1>&6
  
! if test $ac_cv_prog_gxx = yes; then
!   GXX=yes
!   ac_test_CXXFLAGS="${CXXFLAGS+set}"
!   ac_save_CXXFLAGS="$CXXFLAGS"
!   CXXFLAGS=
!   echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
! echo "configure:1292: checking whether ${CXX-g++} accepts -g" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   echo 'void f(){}' > conftest.cc
! if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
    ac_cv_prog_cxx_g=yes
  else
!   ac_cv_prog_cxx_g=no
  fi
  rm -f conftest*
  
  fi
  
! echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
!   if test "$ac_test_CXXFLAGS" = set; then
!     CXXFLAGS="$ac_save_CXXFLAGS"
!   elif test $ac_cv_prog_cxx_g = yes; then
!     CXXFLAGS="-g -O2"
    else
!     CXXFLAGS="-O2"
    fi
  else
!   GXX=
!   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
  fi
  
  
! version=0.0.7
  
! PACKAGE=libjava
  
! VERSION=$version
  
! if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
!   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
  fi
! cat >> confdefs.h <<EOF
  #define PACKAGE "$PACKAGE"
! EOF
  
! cat >> confdefs.h <<EOF
  #define VERSION "$VERSION"
! EOF
  
  
  
! missing_dir=`cd $ac_aux_dir && pwd`
! echo $ac_n "checking for working aclocal-${am__api_version}""... $ac_c" 1>&6
! echo "configure:1341: checking for working aclocal-${am__api_version}" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (aclocal-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then
!    ACLOCAL=aclocal-${am__api_version}
!    echo "$ac_t""found" 1>&6
  else
!    ACLOCAL="$missing_dir/missing aclocal-${am__api_version}"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
! echo "configure:1354: checking for working autoconf" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoconf --version) < /dev/null > /dev/null 2>&1; then
!    AUTOCONF=autoconf
!    echo "$ac_t""found" 1>&6
  else
!    AUTOCONF="$missing_dir/missing autoconf"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working automake-${am__api_version}""... $ac_c" 1>&6
! echo "configure:1367: checking for working automake-${am__api_version}" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (automake-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then
!    AUTOMAKE=automake-${am__api_version}
!    echo "$ac_t""found" 1>&6
  else
!    AUTOMAKE="$missing_dir/missing automake-${am__api_version}"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
! echo "configure:1380: checking for working autoheader" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoheader --version) < /dev/null > /dev/null 2>&1; then
!    AUTOHEADER=autoheader
!    echo "$ac_t""found" 1>&6
  else
!    AUTOHEADER="$missing_dir/missing autoheader"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
! echo "configure:1393: checking for working makeinfo" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
!    MAKEINFO=makeinfo
!    echo "$ac_t""found" 1>&6
  else
!    MAKEINFO="$missing_dir/missing makeinfo"
!    echo "$ac_t""missing" 1>&6
  fi
  
  
  
! # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
  set dummy ${ac_tool_prefix}as; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1410: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$AS"; then
    ac_cv_prog_AS="$AS" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_AS="${ac_tool_prefix}as"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_AS" && ac_cv_prog_AS="as"
  fi
  fi
! AS="$ac_cv_prog_AS"
  if test -n "$AS"; then
!   echo "$ac_t""$AS" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  
  
! # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1442: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$AR"; then
    ac_cv_prog_AR="$AR" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_AR="${ac_tool_prefix}ar"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
  fi
  fi
! AR="$ac_cv_prog_AR"
  if test -n "$AR"; then
!   echo "$ac_t""$AR" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1474: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
  if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_RANLIB"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1506: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$RANLIB"; then
!   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
! if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   RANLIB=":"
! fi
  fi
  
  
--- 2304,3866 ----
      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
! 
! 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 "${glibcxx_cv_prog_CXX+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   if test -n "$CXX"; then
!   glibcxx_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
!     glibcxx_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=$glibcxx_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
+ 
+ CXXFLAGS="$save_CXXFLAGS"
+ 
+ 
+ 
+ 
+ 
+ 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
  
! 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
! 
! 
! 
! # 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='libjava'
!  VERSION='version-unused'
! 
! 
! 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"}
! 
! am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
! 
! 
! 
! 
! 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
  
  
+ 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
! 
! 
! 
! 
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
  set dummy ${ac_tool_prefix}as; 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_AS+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$AS"; then
    ac_cv_prog_AS="$AS" # 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_AS="${ac_tool_prefix}as"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! AS=$ac_cv_prog_AS
  if test -n "$AS"; then
!   echo "$as_me:$LINENO: result: $AS" >&5
! echo "${ECHO_T}$AS" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+ fi
+ if test -z "$ac_cv_prog_AS"; then
+   ac_ct_AS=$AS
+   # Extract the first word of "as", so it can be a program name with args.
+ set dummy as; 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_AS+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_AS"; then
+   ac_cv_prog_ac_ct_AS="$ac_ct_AS" # 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_AS="as"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
  
+ fi
+ fi
+ ac_ct_AS=$ac_cv_prog_ac_ct_AS
+ if test -n "$ac_ct_AS"; then
+   echo "$as_me:$LINENO: result: $ac_ct_AS" >&5
+ echo "${ECHO_T}$ac_ct_AS" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
  
!   AS=$ac_ct_AS
! else
!   AS="$ac_cv_prog_AS"
! fi
! 
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; 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_AR+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$AR"; then
    ac_cv_prog_AR="$AR" # 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_AR="${ac_tool_prefix}ar"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! AR=$ac_cv_prog_AR
  if test -n "$AR"; then
!   echo "$as_me:$LINENO: result: $AR" >&5
! echo "${ECHO_T}$AR" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+ fi
+ if test -z "$ac_cv_prog_AR"; then
+   ac_ct_AR=$AR
+   # Extract the first word of "ar", so it can be a program name with args.
+ set dummy ar; 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_AR+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$ac_ct_AR"; then
+   ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="ar"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ ac_ct_AR=$ac_cv_prog_ac_ct_AR
+ if test -n "$ac_ct_AR"; then
+   echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+ echo "${ECHO_T}$ac_ct_AR" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
  
+   AR=$ac_ct_AR
+ else
+   AR="$ac_cv_prog_AR"
+ fi
  
! 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
  
  
*************** fi
*** 1542,1617 ****
  # SunOS /usr/etc/install
  # IRIX /sbin/install
  # AIX /bin/install
  # 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"
  # ./install, which can be erroneously created by make from ./install.sh.
! echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:1551: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
! if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
!   for ac_dir in $PATH; do
!     # Account for people who put trailing slashes in PATH elements.
!     case "$ac_dir/" in
!     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
!         if test -f $ac_dir/$ac_prog; then
  	  if test $ac_prog = install &&
!             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
  	    # AIX install.  It has an incompatible calling convention.
  	    :
  	  else
! 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
! 	    break 2
  	  fi
  	fi
        done
!       ;;
!     esac
!   done
!   IFS="$ac_save_IFS"
  
  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 "$ac_t""$INSTALL" 1>&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_PROGRAM}'
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
  
! echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
! echo "configure:1605: checking whether to enable maintainer-specific portions of Makefiles" >&5
      # 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 "$ac_t""$USE_MAINTAINER_MODE" 1>&6
-   
  
  if test $USE_MAINTAINER_MODE = yes; then
    MAINTAINER_MODE_TRUE=
--- 3871,3961 ----
  # 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 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=
*************** else
*** 1620,1661 ****
    MAINTAINER_MODE_TRUE='#'
    MAINTAINER_MODE_FALSE=
  fi
-   MAINT=$MAINTAINER_MODE_TRUE
-   
- 
  
  
  
- echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
- echo "configure:1631: checking for executable suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
-   ac_cv_exeext=.exe
- else
-   rm -f conftest*
-   echo 'int main () { return 0; }' > conftest.$ac_ext
-   ac_cv_exeext=
-   if { (eval echo configure:1641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
-     for file in conftest.*; do
-       case $file in
-       *.$ac_ext | *.c | *.o | *.obj) ;;
-       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
-       esac
-     done
-   else
-     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
-   fi
-   rm -f conftest*
-   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
- fi
- fi
  
- EXEEXT=""
- test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
- echo "$ac_t""${ac_cv_exeext}" 1>&6
- ac_exeext=$EXEEXT
  
  
  # configure.host sets the following important variables
--- 3964,3974 ----
    MAINTAINER_MODE_TRUE='#'
    MAINTAINER_MODE_FALSE=
  fi
  
+   MAINT=$MAINTAINER_MODE_TRUE
  
  
  
  
  
  # configure.host sets the following important variables
*************** libgcj_javaflags=
*** 1672,1701 ****
  LIBGCJ_CFLAGS="${libgcj_cflags}"
  LIBGCJ_CXXFLAGS="${libgcj_cxxflags}"
  LIBGCJ_JAVAFLAGS="${libgcj_javaflags}"
  
  
  
  
  
! 
! 
  
  
  # Only use libltdl for non-newlib builds.
  if test "x${with_newlib}" = "x" || test "x${with_newlib}" = "xno"; then
       case $enable_ltdl_convenience in
!   no) { echo "configure: error: this package needs a convenience libltdl" 1>&2; exit 1; } ;;
    "") enable_ltdl_convenience=yes
        ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
    esac
    LIBLTDL='${top_builddir}/''libltdl'/libltdlc.la
    INCLTDL='-I${top_srcdir}/''libltdl'
  
!    
     DIRLTDL=libltdl
!    cat >> confdefs.h <<\EOF
  #define USE_LTDL 1
! EOF
  
     # Sigh.  Libtool's macro doesn't do the right thing.
     INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL"
--- 3985,4017 ----
  LIBGCJ_CFLAGS="${libgcj_cflags}"
  LIBGCJ_CXXFLAGS="${libgcj_cxxflags}"
  LIBGCJ_JAVAFLAGS="${libgcj_javaflags}"
+ LIBGCJ_LD_SYMBOLIC="${libgcj_ld_symbolic}"
  
  
  
  
  
!                     ac_config_headers="$ac_config_headers include/config.h gcj/libgcj-config.h"
  
  
  # Only use libltdl for non-newlib builds.
  if test "x${with_newlib}" = "x" || test "x${with_newlib}" = "xno"; then
       case $enable_ltdl_convenience in
!   no) { { echo "$as_me:$LINENO: error: this package needs a convenience libltdl" >&5
! echo "$as_me: error: this package needs a convenience libltdl" >&2;}
!    { (exit 1); exit 1; }; } ;;
    "") enable_ltdl_convenience=yes
        ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
    esac
    LIBLTDL='${top_builddir}/''libltdl'/libltdlc.la
    INCLTDL='-I${top_srcdir}/''libltdl'
  
! 
     DIRLTDL=libltdl
! 
! cat >>confdefs.h <<\_ACEOF
  #define USE_LTDL 1
! _ACEOF
  
     # Sigh.  Libtool's macro doesn't do the right thing.
     INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL"
*************** no) enable_shared=no ;;
*** 1727,1734 ****
  esac
  else
    enable_shared=yes
! fi
! 
  # Check whether --enable-static or --disable-static was given.
  if test "${enable_static+set}" = set; then
    enableval="$enable_static"
--- 4043,4049 ----
  esac
  else
    enable_shared=yes
! fi;
  # Check whether --enable-static or --disable-static was given.
  if test "${enable_static+set}" = set; then
    enableval="$enable_static"
*************** no) enable_static=no ;;
*** 1750,1757 ****
  esac
  else
    enable_static=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"
--- 4065,4071 ----
  esac
  else
    enable_static=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"
*************** no) enable_fast_install=no ;;
*** 1773,1779 ****
  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
--- 4087,4093 ----
  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
*************** if test "${with_gnu_ld+set}" = set; then
*** 1781,1793 ****
    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 $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
! echo "configure:1791: checking for ld used by GCC" >&5
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
--- 4095,4106 ----
    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
*************** echo "configure:1791: checking for ld us
*** 1816,1829 ****
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
!   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
! echo "configure:1821: checking for GNU ld" >&5
  else
!   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
! echo "configure:1824: checking for non-GNU ld" >&5
  fi
! if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
--- 4129,4142 ----
      ;;
    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-:}"
*************** fi
*** 1849,1863 ****
  
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
!   echo "$ac_t""$LD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
! test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
! echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
! echo "configure:1859: checking if the linker ($LD) is GNU ld" >&5
! if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&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
--- 4162,4180 ----
  
  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
*************** else
*** 1866,1892 ****
    lt_cv_prog_gnu_ld=no
  fi
  fi
! 
! echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6
  with_gnu_ld=$lt_cv_prog_gnu_ld
  
  
! echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
! echo "configure:1876: checking for $LD option to reload object files" >&5
! if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_ld_reload_flag='-r'
  fi
! 
! echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  
! echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
! echo "configure:1888: checking for BSD-compatible nm" >&5
! if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$NM"; then
    # Let the user override the test.
--- 4183,4209 ----
    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.
*************** fi
*** 1919,1930 ****
  fi
  
  NM="$lt_cv_path_NM"
! echo "$ac_t""$NM" 1>&6
  
! echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
! echo "configure:1926: checking how to recognise dependant libraries" >&5
! if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
--- 4236,4248 ----
  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=
*************** darwin* | rhapsody*)
*** 1975,1981 ****
    lt_cv_deplibs_check_method=pass_all
    ;;
  
! freebsd* )
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
--- 4293,4299 ----
    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 )
*************** irix5* | irix6*)
*** 2033,2049 ****
  
  # This must be Linux ELF.
  linux-gnu*)
!   case $host_cpu in
!   alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
!     lt_cv_deplibs_check_method=pass_all ;;
!   *)
!     # glibc up to 2.1.1 does not perform some relocations on ARM
!     lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
!   esac
!   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
! netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
    else
--- 4351,4360 ----
  
  # 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
*************** sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
*** 2091,2124 ****
  esac
  
  fi
! 
! echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  
- echo $ac_n "checking for object suffix""... $ac_c" 1>&6
- echo "configure:2101: checking for object suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   rm -f conftest*
- echo 'int i = 1;' > conftest.$ac_ext
- if { (eval echo configure:2107: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   for ac_file in conftest.*; do
-     case $ac_file in
-     *.c) ;;
-     *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;;
-     esac
-   done
- else
-   { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; }
- fi
- rm -f conftest*
- fi
  
! echo "$ac_t""$ac_cv_objext" 1>&6
! OBJEXT=$ac_cv_objext
! ac_objext=$ac_cv_objext
  
  # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
  
--- 4402,4414 ----
  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!
  
*************** ac_objext=$ac_cv_objext
*** 2126,2135 ****
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
!     echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
! echo "configure:2131: checking for ${ac_tool_prefix}file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 4416,4425 ----
  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
    /*)
*************** fi
*** 2181,2197 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
!     echo $ac_n "checking for file""... $ac_c" 1>&6
! echo "configure:2193: checking for file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 4471,4489 ----
  
  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
    /*)
*************** fi
*** 2243,2251 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
    else
--- 4535,4545 ----
  
  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
*************** fi
*** 2257,2394 ****
    ;;
  esac
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2264: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
  if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_RANLIB"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2296: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$RANLIB"; then
!   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
! if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   RANLIB=":"
! fi
  fi
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2331: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$STRIP"; then
    ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="${ac_tool_prefix}strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
  if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_STRIP"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "strip", so it can be a program name with args.
  set dummy strip; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2363: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$STRIP"; then
!   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
! if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   STRIP=":"
! fi
  fi
  
  
--- 4551,4714 ----
    ;;
  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
  
  
*************** test "$enable_static" = no && libtool_fl
*** 2399,2423 ****
  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"
! libtool_flags="$libtool_flags --enable-dlopen"
  
  # 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"
  
--- 4719,4742 ----
  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"
  
*************** test x"$pic_mode" = xno && libtool_flags
*** 2426,2433 ****
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 2430 "configure"' > conftest.$ac_ext
!   if { (eval echo configure:2431: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     if test "$lt_cv_prog_gnu_ld" = yes; then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
--- 4745,4756 ----
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 4748 "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*)
*************** case $host in
*** 2460,2466 ****
  ia64-*-hpux*)
    # Find out which ABI we are using.
    echo 'int i;' > conftest.$ac_ext
!   if { (eval echo configure:2464: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *ELF-32*)
        HPUX_IA64_MODE="32"
--- 4783,4793 ----
  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"
*************** ia64-*-hpux*)
*** 2476,2482 ****
  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 configure:2480: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *32-bit*)
        case $host in
--- 4803,4813 ----
  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*|ppc*-*linux*|powerpc*-*li
*** 2519,2565 ****
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
!   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
! echo "configure:2524: checking whether the C compiler needs -belf" >&5
! if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
!      cat > conftest.$ac_ext <<EOF
! #line 2537 "configure"
! #include "confdefs.h"
  
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:2544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    lt_cv_cc_needs_belf=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   lt_cv_cc_needs_belf=no
  fi
! rm -f conftest*
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
  fi
! 
! echo "$ac_t""$lt_cv_cc_needs_belf" 1>&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"
--- 4850,4928 ----
    # 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
  
!      if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
*************** echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
*** 2569,2667 ****
  
  esac
  
- echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
- echo "configure:2574: checking how to run the C++ preprocessor" >&5
- if test -z "$CXXCPP"; then
- if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_ext=C
- # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
- ac_cpp='$CXXCPP $CPPFLAGS'
- ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
- ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
- cross_compiling=$ac_cv_prog_cxx_cross
-   CXXCPP="${CXX-g++} -E"
-   cat > conftest.$ac_ext <<EOF
- #line 2587 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
- { (eval echo configure:2592: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
- else
-   echo "$ac_err" >&5
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   CXXCPP=/lib/cpp
- fi
- rm -f conftest*
-   ac_cv_prog_CXXCPP="$CXXCPP"
- ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
- ac_cpp='$CPP $CPPFLAGS'
- ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
- ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
- cross_compiling=$ac_cv_prog_cc_cross
- fi
- fi
- CXXCPP="$ac_cv_prog_CXXCPP"
- echo "$ac_t""$CXXCPP" 1>&6
- 
  
  # Save cache, so that ltconfig can load it
! cat > confcache <<\EOF
  # 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.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # 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 \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     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" \
--- 4932,4994 ----
  
  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" \
*************** objext="$OBJEXT" exeext="$EXEEXT" reload
*** 2671,2685 ****
  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 "configure: error: libtool configure failed" 1>&2; exit 1; }
  
  # Reload cache, that may have been modified by ltconfig
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  
--- 4998,5023 ----
  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
  
  
*************** LIBTOOL='$(SHELL) $(top_builddir)/libtoo
*** 2693,2698 ****
--- 5031,5266 ----
  # clobbered by the next message.
  exec 5>>./config.log
  
+ 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"
*************** deplibs_check_method="$deplibs_check_met
*** 2707,2713 ****
  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 "configure: error: libtool tag configuration failed" 1>&2; exit 1; }
  CC="$lt_save_CC"
  CFLAGS="$lt_save_CFLAGS"
  
--- 5275,5283 ----
  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"
  
*************** CFLAGS="$lt_save_CFLAGS"
*** 2715,2737 ****
  # clobbered by the next message.
  exec 5>>./config.log
  
-   
  
-   
- 	 
- 	 
- subdirs="$DIRLTDL"
  
  
! if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
!    COMPPATH=.
  else
!    COMPPATH=..
  fi
  
  
  
  
  if test -d $srcdir/testsuite; then
    TESTSUBDIR_TRUE=
    TESTSUBDIR_FALSE='#'
--- 5285,5591 ----
  # clobbered by the next message.
  exec 5>>./config.log
  
  
  
  
! 
! 
! 
! for ac_prog in gcj
! 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_GCJ+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$GCJ"; then
!   ac_cv_prog_GCJ="$GCJ" # 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_GCJ="$ac_prog"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
! fi
! fi
! GCJ=$ac_cv_prog_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
! 
!   test -n "$GCJ" && break
! done
! test -n "$GCJ" || GCJ="gcj"
! 
! test -z "$GCJ" && { { echo "$as_me:$LINENO: error: no acceptable gcj found in \$PATH" >&5
! echo "$as_me: error: no acceptable gcj found in \$PATH" >&2;}
!    { (exit 1); exit 1; }; }
! if test "x${GCJFLAGS-unset}" = xunset; then
!    GCJFLAGS="-g -O2"
! fi
! 
! 
! depcc="$GCJ"  am_compiler_list='gcc3 gcc'
! 
! 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_GCJ_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_GCJ_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_GCJ_dependencies_compiler_type=$depmode
!         break
!       fi
!     fi
!   done
! 
!   cd ..
!   rm -rf conftest.dir
! else
!   am_cv_GCJ_dependencies_compiler_type=none
! fi
! 
! fi
! echo "$as_me:$LINENO: result: $am_cv_GCJ_dependencies_compiler_type" >&5
! echo "${ECHO_T}$am_cv_GCJ_dependencies_compiler_type" >&6
! GCJDEPMODE=depmode=$am_cv_GCJ_dependencies_compiler_type
! 
! 
! 
! if
!   test "x$enable_dependency_tracking" != xno \
!   && test "$am_cv_GCJ_dependencies_compiler_type" = gcc3; then
!   am__fastdepGCJ_TRUE=
!   am__fastdepGCJ_FALSE='#'
! else
!   am__fastdepGCJ_TRUE='#'
!   am__fastdepGCJ_FALSE=
  fi
  
  
  
  
+ LIBTOOL_DEPS=$LIBTOOL_DEPS" $ac_aux_dir/ltcf-gcj.sh"
+ lt_save_CC="$CC"
+ lt_save_CFLAGS="$CFLAGS"
+ AR="$AR" LTCC="$CC" CC="$GCJ" CFLAGS="$GCJFLAGS" 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=GCJ $ac_aux_dir/ltcf-gcj.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$CC" != xcc; then
+   echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+ echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6
+ else
+   echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+ echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6
+ fi
+ set dummy $CC; ac_cc=`echo $2 |
+ 		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+ if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+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
+ # Make sure it works both with $CC and with simple cc.
+ # We do the test twice because some compilers refuse to overwrite an
+ # existing .o file with -o, though they will create one.
+ ac_try='$CC -c conftest.$ac_ext -o conftest.$ac_objext >&5'
+ if { (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); } &&
+    test -f 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 ac_cv_prog_cc_${ac_cc}_c_o=yes
+   if test "x$CC" != xcc; then
+     # Test first that cc exists at all.
+     if { ac_try='cc -c conftest.$ac_ext >&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
+       ac_try='cc -c conftest.$ac_ext -o conftest.$ac_objext >&5'
+       if { (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); } &&
+ 	 test -f 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
+ 	# cc works too.
+ 	:
+       else
+ 	# cc exists but doesn't like -o.
+ 	eval ac_cv_prog_cc_${ac_cc}_c_o=no
+       fi
+     fi
+   fi
+ else
+   eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ rm -f conftest*
+ 
+ fi
+ if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then
+   echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define NO_MINUS_C_MINUS_O 1
+ _ACEOF
+ 
+ fi
+ 
+ # FIXME: we rely on the cache variable name because
+ # there is no other way.
+ set dummy $CC
+ ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+ if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+    # Losing compiler, so override with the script.
+    # FIXME: It is wrong to rewrite CC.
+    # But if we don't then we get into trouble of one sort or another.
+    # A longer-term fix would be to have automake use am__CC in this case,
+    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+    CC="$am_aux_dir/compile $CC"
+ fi
+ 
+ 
+ 
+ subdirs="$subdirs libltdl"
+ 
+ 
+ # The -no-testsuite modules omit the test subdir.
+ 
+ 
  if test -d $srcdir/testsuite; then
    TESTSUBDIR_TRUE=
    TESTSUBDIR_FALSE='#'
*************** else
*** 2740,2779 ****
    TESTSUBDIR_FALSE=
  fi
  
  # Check whether --enable-getenv-properties or --disable-getenv-properties was given.
  if test "${enable_getenv_properties+set}" = set; then
    enableval="$enable_getenv_properties"
-   :
- fi
  
  
  if test -z "$enable_getenv_properties"; then
     enable_getenv_properties=${enable_getenv_properties_default-yes}
  fi
  if test "$enable_getenv_properties" = no; then
!    cat >> confdefs.h <<\EOF
  #define DISABLE_GETENV_PROPERTIES 1
! EOF
  
  fi
  
  if test -z "$enable_main_args"; then
     enable_main_args=${enable_main_args_default-yes}
  fi
  if test "$enable_main_args" = no; then
!    cat >> confdefs.h <<\EOF
  #define DISABLE_MAIN_ARGS 1
! EOF
  
  fi
  
  
  # Check whether --enable-hash-synchronization or --disable-hash-synchronization was given.
  if test "${enable_hash_synchronization+set}" = set; then
    enableval="$enable_hash_synchronization"
-   :
- fi
  
  
  if test -z "$enable_hash_synchronization"; then
     enable_hash_synchronization=$enable_hash_synchronization_default
--- 5594,5641 ----
    TESTSUBDIR_FALSE=
  fi
  
+ 
+ # Should the runtime set system properties by examining the
+ # environment variable GCJ_PROPERTIES?
  # Check whether --enable-getenv-properties or --disable-getenv-properties was given.
  if test "${enable_getenv_properties+set}" = set; then
    enableval="$enable_getenv_properties"
  
+ fi;
  
+ # Whether GCJ_PROPERTIES is used depends on the target.
  if test -z "$enable_getenv_properties"; then
     enable_getenv_properties=${enable_getenv_properties_default-yes}
  fi
  if test "$enable_getenv_properties" = no; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define DISABLE_GETENV_PROPERTIES 1
! _ACEOF
  
  fi
  
+ # Whether we should use arguments to main()
  if test -z "$enable_main_args"; then
     enable_main_args=${enable_main_args_default-yes}
  fi
  if test "$enable_main_args" = no; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define DISABLE_MAIN_ARGS 1
! _ACEOF
  
  fi
  
  
+ # Should we use hashtable-based synchronization?
+ # Currently works only for Linux X86/ia64
+ # Typically faster and more space-efficient
  # Check whether --enable-hash-synchronization or --disable-hash-synchronization was given.
  if test "${enable_hash_synchronization+set}" = set; then
    enableval="$enable_hash_synchronization"
  
+ fi;
  
  if test -z "$enable_hash_synchronization"; then
     enable_hash_synchronization=$enable_hash_synchronization_default
*************** if test "${enable_libgcj_multifile+set}"
*** 2786,2797 ****
    case "${enableval}" in
    yes) enable_libgcj_multifile=yes ;;
    no)  enable_libgcj_multifile=no ;;
!   *) { echo "configure: error: bad value ${enableval} for --enable-libgcj-multifile" 1>&2; exit 1; } ;;
  esac
  else
    enable_libgcj_multifile=no
! fi
! 
  
  
  if test "$enable_libgcj_multifile" = yes; then
--- 5648,5660 ----
    case "${enableval}" in
    yes) enable_libgcj_multifile=yes ;;
    no)  enable_libgcj_multifile=no ;;
!   *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-libgcj-multifile" >&5
! echo "$as_me: error: bad value ${enableval} for --enable-libgcj-multifile" >&2;}
!    { (exit 1); exit 1; }; } ;;
  esac
  else
    enable_libgcj_multifile=no
! fi;
  
  
  if test "$enable_libgcj_multifile" = yes; then
*************** else
*** 2802,2855 ****
    ONESTEP_FALSE=
  fi
  
  # What is the native OS API for MinGW?
  # Check whether --with-win32-nlsapi or --without-win32-nlsapi was given.
  if test "${with_win32_nlsapi+set}" = set; then
    withval="$with_win32_nlsapi"
!   
! case "${withval}" in
    ansi) with_win32_nlsapi=ansi ;;
    unicows) with_win32_nlsapi=unicows ;;
    unicode) with_win32_nlsapi=unicode ;;
!   *) { echo "configure: error: Bad value ${withval} for --with-win32-nlsapi." 1>&2; exit 1; } ;;
  esac
  else
    with_win32_nlsapi=ansi
! fi
! 
  
  case "${with_win32_nlsapi}" in
!   unicows | unicode) 
!     cat >> confdefs.h <<\EOF
  #define MINGW_LIBGCJ_UNICODE 1
! EOF
  
      ;;
  esac
  
  if test "${slow_pthread_self}" = "yes"; then
!   cat >> confdefs.h <<\EOF
  #define SLOW_PTHREAD_SELF 1
! EOF
  
  fi
  
  
  LIBGCJDEBUG="false"
  
  # Check whether --enable-libgcj-debug or --disable-libgcj-debug was given.
  if test "${enable_libgcj_debug+set}" = set; then
    enableval="$enable_libgcj_debug"
    if test "$enable_libgcj_debug" = yes; then
!     cat >> confdefs.h <<\EOF
  #define DEBUG 1
! EOF
  
      LIBGCJDEBUG="true"
    fi
! fi
  
  
  # Check whether --enable-interpreter or --disable-interpreter was given.
  if test "${enable_interpreter+set}" = set; then
    enableval="$enable_interpreter"
--- 5665,5759 ----
    ONESTEP_FALSE=
  fi
  
+ 
+ 
+ # Check whether --with-java-home or --without-java-home was given.
+ if test "${with_java_home+set}" = set; then
+   withval="$with_java_home"
+   JAVA_HOME="${withval}"
+ else
+   JAVA_HOME=""
+ fi;
+ 
+ 
+ if test ! -z "$JAVA_HOME"; then
+   JAVA_HOME_SET_TRUE=
+   JAVA_HOME_SET_FALSE='#'
+ else
+   JAVA_HOME_SET_TRUE='#'
+   JAVA_HOME_SET_FALSE=
+ fi
+ 
+ 
+ 
  # What is the native OS API for MinGW?
+ 
  # Check whether --with-win32-nlsapi or --without-win32-nlsapi was given.
  if test "${with_win32_nlsapi+set}" = set; then
    withval="$with_win32_nlsapi"
!   case "${withval}" in
    ansi) with_win32_nlsapi=ansi ;;
    unicows) with_win32_nlsapi=unicows ;;
    unicode) with_win32_nlsapi=unicode ;;
!   *) { { echo "$as_me:$LINENO: error: Bad value ${withval} for --with-win32-nlsapi." >&5
! echo "$as_me: error: Bad value ${withval} for --with-win32-nlsapi." >&2;}
!    { (exit 1); exit 1; }; } ;;
  esac
  else
    with_win32_nlsapi=ansi
! fi;
  
  case "${with_win32_nlsapi}" in
!   unicows | unicode)
! 
! cat >>confdefs.h <<\_ACEOF
  #define MINGW_LIBGCJ_UNICODE 1
! _ACEOF
  
      ;;
  esac
  
+ # configure.host sets slow_pthread_self if the synchronization code should
+ # try to avoid pthread_self calls by caching thread IDs in a hashtable.
  if test "${slow_pthread_self}" = "yes"; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define SLOW_PTHREAD_SELF 1
! _ACEOF
  
  fi
  
  
+ # See if the user has requested runtime debugging.
  LIBGCJDEBUG="false"
  
  # Check whether --enable-libgcj-debug or --disable-libgcj-debug was given.
  if test "${enable_libgcj_debug+set}" = set; then
    enableval="$enable_libgcj_debug"
    if test "$enable_libgcj_debug" = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define DEBUG 1
! _ACEOF
  
      LIBGCJDEBUG="true"
    fi
! fi;
  
+ # Check for gc debugging.  This option is handled both here and in the GC.
+ # Check whether --enable-gc-debug or --disable-gc-debug was given.
+ if test "${enable_gc_debug+set}" = set; then
+   enableval="$enable_gc_debug"
+    if test "$enable_gc_debug" = "yes"; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define LIBGCJ_GC_DEBUG 1
+ _ACEOF
+ 
+   fi
+ fi;
  
+ # See if the user has the interpreter included.
  # Check whether --enable-interpreter or --disable-interpreter was given.
  if test "${enable_interpreter+set}" = set; then
    enableval="$enable_interpreter"
*************** if test "${enable_interpreter+set}" = se
*** 2859,2885 ****
    elif test "$enable_interpreter" = no; then
      libgcj_interpreter=no
    fi
! fi
! 
  
  if test "$libgcj_interpreter" = yes; then
!    cat >> confdefs.h <<\EOF
  #define INTERPRETER 1
! EOF
  
  fi
  INTERPRETER="$libgcj_interpreter"
  
  
! echo $ac_n "checking for exception model to use""... $ac_c" 1>&6
! echo "configure:2876: checking for exception model to use" >&5
! 
! ac_ext=C
! # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CXXCPP $CPPFLAGS'
! ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cxx_cross
  
  # Check whether --enable-sjlj-exceptions or --disable-sjlj-exceptions was given.
  if test "${enable_sjlj_exceptions+set}" = set; then
--- 5763,5787 ----
    elif test "$enable_interpreter" = no; then
      libgcj_interpreter=no
    fi
! fi;
  
  if test "$libgcj_interpreter" = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define INTERPRETER 1
! _ACEOF
  
  fi
  INTERPRETER="$libgcj_interpreter"
  
  
! echo "$as_me:$LINENO: checking for exception model to use" >&5
! echo $ECHO_N "checking for exception model to use... $ECHO_C" >&6
! 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
  
  # Check whether --enable-sjlj-exceptions or --disable-sjlj-exceptions was given.
  if test "${enable_sjlj_exceptions+set}" = set; then
*************** if test "${enable_sjlj_exceptions+set}" 
*** 2887,2893 ****
    :
  else
    cat > conftest.$ac_ext << EOF
! #line 2891 "configure"
  struct S { ~S(); };
  void bar();
  void foo()
--- 5789,5795 ----
    :
  else
    cat > conftest.$ac_ext << EOF
! #line 5792 "configure"
  struct S { ~S(); };
  void bar();
  void foo()
*************** void foo()
*** 2896,2904 ****
    bar();
  }
  EOF
! old_CXXFLAGS="$CXXFLAGS"  
  CXXFLAGS=-S
! if { (eval echo configure:2902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
      enable_sjlj_exceptions=yes
    elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
--- 5798,5810 ----
    bar();
  }
  EOF
! old_CXXFLAGS="$CXXFLAGS"
  CXXFLAGS=-S
! 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 grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
      enable_sjlj_exceptions=yes
    elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
*************** if { (eval echo configure:2902: \"$ac_co
*** 2907,2935 ****
  fi
  CXXFLAGS="$old_CXXFLAGS"
  rm -f conftest*
! fi
! 
  if test x$enable_sjlj_exceptions = xyes; then
!   cat >> confdefs.h <<\EOF
  #define SJLJ_EXCEPTIONS 1
! EOF
  
    ac_exception_model_name=sjlj
  elif test x$enable_sjlj_exceptions = xno; then
    ac_exception_model_name="call frame"
  else
!   { echo "configure: error: unable to detect exception model" 1>&2; exit 1; }
  fi
  ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
! echo "$ac_t""$ac_exception_model_name" 1>&6
  
! # If we are non using SJLJ exceptions, and this host does not have support 
  # for unwinding from a signal handler, enable checked dereferences and divides.
  if test $can_unwind_signal = no && test $enable_sjlj_exceptions = no; then
    CHECKREFSPEC=-fcheck-references
--- 5813,5843 ----
  fi
  CXXFLAGS="$old_CXXFLAGS"
  rm -f conftest*
! fi;
  if test x$enable_sjlj_exceptions = xyes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define SJLJ_EXCEPTIONS 1
! _ACEOF
  
    ac_exception_model_name=sjlj
  elif test x$enable_sjlj_exceptions = xno; then
    ac_exception_model_name="call frame"
  else
!   { { echo "$as_me:$LINENO: error: unable to detect exception model" >&5
! echo "$as_me: error: unable to detect exception model" >&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: result: $ac_exception_model_name" >&5
! echo "${ECHO_T}$ac_exception_model_name" >&6
  
! # If we are non using SJLJ exceptions, and this host does not have support
  # for unwinding from a signal handler, enable checked dereferences and divides.
  if test $can_unwind_signal = no && test $enable_sjlj_exceptions = no; then
    CHECKREFSPEC=-fcheck-references
*************** if test $can_unwind_signal = no && test 
*** 2937,2974 ****
    EXCEPTIONSPEC=
  fi
  
  # Check whether --enable-java-net or --disable-java-net was given.
  if test "${enable_java_net+set}" = set; then
    enableval="$enable_java_net"
-   :
- fi
  
  
  if test -z "$enable_java_net"; then
     enable_java_net=${enable_java_net_default-yes}
  fi
  if test "$enable_java_net" = no; then
!    cat >> confdefs.h <<\EOF
  #define DISABLE_JAVA_NET 1
! EOF
  
  fi
  
  # Check whether --with-libffi or --without-libffi was given.
  if test "${with_libffi+set}" = set; then
    withval="$with_libffi"
    :
  else
    with_libffi=${with_libffi_default-yes}
! fi
! 
  
  LIBFFI=
  LIBFFIINCS=
  if test "$with_libffi" != no; then
!    cat >> confdefs.h <<\EOF
  #define USE_LIBFFI 1
! EOF
  
     LIBFFI=../libffi/libffi_convenience.la
     LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
--- 5845,5889 ----
    EXCEPTIONSPEC=
  fi
  
+ # See if the user wants to disable java.net.  This is the mildly
+ # ugly way that we admit that target-side configuration sucks.
  # Check whether --enable-java-net or --disable-java-net was given.
  if test "${enable_java_net+set}" = set; then
    enableval="$enable_java_net"
  
+ fi;
  
+ # Whether java.net is built by default can depend on the target.
  if test -z "$enable_java_net"; then
     enable_java_net=${enable_java_net_default-yes}
  fi
  if test "$enable_java_net" = no; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define DISABLE_JAVA_NET 1
! _ACEOF
  
  fi
  
+ # See if the user wants to configure without libffi.  Some
+ # architectures don't support it, and default values are set in
+ # configure.host.
+ 
  # Check whether --with-libffi or --without-libffi was given.
  if test "${with_libffi+set}" = set; then
    withval="$with_libffi"
    :
  else
    with_libffi=${with_libffi_default-yes}
! fi;
  
  LIBFFI=
  LIBFFIINCS=
  if test "$with_libffi" != no; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define USE_LIBFFI 1
! _ACEOF
  
     LIBFFI=../libffi/libffi_convenience.la
     LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
*************** fi
*** 2976,3018 ****
  
  
  
  # Check whether --enable-jvmpi or --disable-jvmpi was given.
  if test "${enable_jvmpi+set}" = set; then
    enableval="$enable_jvmpi"
-   :
- fi
  
  
  if test "$enable_jvmpi" != no; then
!     cat >> confdefs.h <<\EOF
  #define ENABLE_JVMPI 1
! EOF
  
  fi
  
  TARGET_ECOS=${PROCESS-"no"}
  # Check whether --with-ecos or --without-ecos was given.
  if test "${with_ecos+set}" = set; then
    withval="$with_ecos"
    TARGET_ECOS="$with_ecos"
  
! fi
! 
! 
! EXTRA_CC_FILES=
  
  
! PLATFORMOBJS=
  case "$TARGET_ECOS" in
     no) case "$host" in
        *mingw*)
              PLATFORM=Win32
  	    PLATFORMNET=Win32
-             PLATFORMOBJS=win32.lo
  	    PLATFORMH=win32.h
!         
! echo $ac_n "checking whether 'ld' is at least 2.13""... $ac_c" 1>&6
! echo "configure:3016: checking whether 'ld' is at least 2.13" >&5
  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`
--- 5891,5936 ----
  
  
  
+ # See if the user wants to disable JVMPI support.
  # Check whether --enable-jvmpi or --disable-jvmpi was given.
  if test "${enable_jvmpi+set}" = set; then
    enableval="$enable_jvmpi"
  
+ fi;
  
  if test "$enable_jvmpi" != no; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define ENABLE_JVMPI 1
! _ACEOF
  
  fi
  
+ # If the target is an eCos system, use the appropriate eCos
+ # I/O routines.
+ # FIXME: this should not be a local option but a global target
+ # system; at present there is no eCos target.
  TARGET_ECOS=${PROCESS-"no"}
+ 
  # Check whether --with-ecos or --without-ecos was given.
  if test "${with_ecos+set}" = set; then
    withval="$with_ecos"
    TARGET_ECOS="$with_ecos"
  
! fi;
  
+ supply_backtrace=no
  
! PLATFORM_INNER_NAT_HDRS=
  case "$TARGET_ECOS" in
     no) case "$host" in
        *mingw*)
              PLATFORM=Win32
  	    PLATFORMNET=Win32
  	    PLATFORMH=win32.h
! 
! echo "$as_me:$LINENO: checking whether 'ld' is at least 2.13" >&5
! echo $ECHO_N "checking whether 'ld' is at least 2.13... $ECHO_C" >&6
  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`
*************** else
*** 3025,3261 ****
    fi
  fi
  if test "x$LD_OK" != x; then
!   echo "$ac_t""yes; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR" 1>&6
  else
!   echo "$ac_t""no; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR" 1>&6
!   echo "configure: warning: ld <2.13 detected; enabling JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS hack..." 1>&2
!   cat >> confdefs.h <<\EOF
  #define JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS 1
! EOF
  
  fi
        ;;
        *)
              PLATFORM=Posix
  	    PLATFORMNET=Posix
-             PLATFORMOBJS=posix.lo
  	    PLATFORMH=posix.h
        ;;
        esac
        ;;
     *)
        PLATFORM=Ecos
        PLATFORMNET=NoNet
!       cat >> confdefs.h <<\EOF
  #define ECOS 1
! EOF
  
-       PLATFORMOBJS=posix.lo
        PLATFORMH=posix.h
        ;;
  esac
  
  
  
! echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
! echo "configure:3062: checking how to run the C preprocessor" >&5
  # On Suns, sometimes $CPP names a directory.
  if test -n "$CPP" && test -d "$CPP"; then
    CPP=
  fi
  if test -z "$CPP"; then
! if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     # This must be in double quotes, not single quotes, because CPP may get
!   # substituted into the Makefile and "${CC-cc}" will confuse make.
!   CPP="${CC-cc} -E"
    # On the NeXT, cc -E runs the code through the compiler's parser,
!   # not just through cpp.
!   cat > conftest.$ac_ext <<EOF
! #line 3077 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3083: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -E -traditional-cpp"
!   cat > conftest.$ac_ext <<EOF
! #line 3094 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3100: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
    :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -nologo -E"
!   cat > conftest.$ac_ext <<EOF
! #line 3111 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3117: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
    :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP=/lib/cpp
  fi
! rm -f conftest*
  fi
! rm -f conftest*
  fi
! rm -f conftest*
!   ac_cv_prog_CPP="$CPP"
  fi
!   CPP="$ac_cv_prog_CPP"
  else
!   ac_cv_prog_CPP="$CPP"
  fi
! echo "$ac_t""$CPP" 1>&6
  
! cat > conftest.$ac_ext <<EOF
! #line 3142 "configure"
! #include "confdefs.h"
  #include <stdint.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "uint32_t" >/dev/null 2>&1; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_INT32_DEFINED 1
! EOF
  
  fi
  rm -f conftest*
  
! cat > conftest.$ac_ext <<EOF
! #line 3157 "configure"
! #include "confdefs.h"
  #include <inttypes.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "uint32_t" >/dev/null 2>&1; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_INT32_DEFINED 1
! EOF
  
  fi
  rm -f conftest*
  
! cat > conftest.$ac_ext <<EOF
! #line 3172 "configure"
! #include "confdefs.h"
  #include <sys/types.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "u_int32_t" >/dev/null 2>&1; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_BSD_INT32_DEFINED 1
! EOF
  
  fi
  rm -f conftest*
  
! cat > conftest.$ac_ext <<EOF
! #line 3187 "configure"
! #include "confdefs.h"
  #include <sys/config.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "u_int32_t" >/dev/null 2>&1; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_BSD_INT32_DEFINED 1
! EOF
  
  fi
  rm -f conftest*
  
  
  
! cat > conftest.$ac_ext <<EOF
! #line 3204 "configure"
! #include "confdefs.h"
  #include <time.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "mktime" >/dev/null 2>&1; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_MKTIME 1
! EOF
  
  fi
  rm -f conftest*
  
! cat > conftest.$ac_ext <<EOF
! #line 3219 "configure"
! #include "confdefs.h"
  #include <time.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "localtime" >/dev/null 2>&1; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_LOCALTIME 1
! EOF
  
  fi
  rm -f conftest*
  
  
  test -d java || mkdir java
  test -d java/io || mkdir java/io
  test -d gnu || mkdir gnu
  
  
! 
  test -d java/lang || mkdir java/lang
  
  
  
  test -d java/net || mkdir java/net
  
  
  
  test -d gnu/java || mkdir gnu/java
  test -d gnu/java/net || mkdir gnu/java/net
  
  
  
  test -d gnu/java/nio || mkdir gnu/java/nio
  
  
  
  case "${host}" in
      *mingw*)
!       SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32"
        if test "${with_win32_nlsapi}" = "unicows"; then
          SYSTEMSPEC="-lunicows $SYSTEMSPEC"
        fi
--- 5943,6442 ----
    fi
  fi
  if test "x$LD_OK" != x; then
!   echo "$as_me:$LINENO: result: yes; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR" >&5
! echo "${ECHO_T}yes; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR" >&6
  else
!   echo "$as_me:$LINENO: result: no; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR" >&5
! echo "${ECHO_T}no; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR" >&6
!   { echo "$as_me:$LINENO: WARNING: ld <2.13 detected; enabling JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS hack..." >&5
! echo "$as_me: WARNING: ld <2.13 detected; enabling JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS hack..." >&2;}
! 
! cat >>confdefs.h <<\_ACEOF
  #define JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS 1
! _ACEOF
  
  fi
        ;;
        *)
              PLATFORM=Posix
  	    PLATFORMNET=Posix
  	    PLATFORMH=posix.h
+ 	    PLATFORM_INNER_NAT_HDRS='java/lang/ConcreteProcess$$ProcessManager.h'
        ;;
        esac
        ;;
     *)
        PLATFORM=Ecos
        PLATFORMNET=NoNet
! 
! cat >>confdefs.h <<\_ACEOF
  #define ECOS 1
! _ACEOF
  
        PLATFORMH=posix.h
        ;;
  esac
  
+           ac_config_links="$ac_config_links include/platform.h:include/$PLATFORMH"
  
  
! 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
  
! 
! 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*
  
  
  
! 
! if test "$PLATFORM" = Win32; then
!   USING_WIN32_PLATFORM_TRUE=
!   USING_WIN32_PLATFORM_FALSE='#'
! else
!   USING_WIN32_PLATFORM_TRUE='#'
!   USING_WIN32_PLATFORM_FALSE=
! fi
! 
! 
! 
! if test "$PLATFORM" = Posix; then
!   USING_POSIX_PLATFORM_TRUE=
!   USING_POSIX_PLATFORM_FALSE='#'
! else
!   USING_POSIX_PLATFORM_TRUE='#'
!   USING_POSIX_PLATFORM_FALSE=
! fi
! 
! 
! 
! if test "$PLATFORM" = Ecos; then
!   USING_ECOS_PLATFORM_TRUE=
!   USING_ECOS_PLATFORM_FALSE='#'
! else
!   USING_ECOS_PLATFORM_TRUE='#'
!   USING_ECOS_PLATFORM_FALSE=
! fi
! 
! 
! case "$host" in
!   *-darwin*) DARWIN_CRT=true ;;
!   *) DARWIN_CRT=false ;;
! esac
! 
! 
! if $DARWIN_CRT; then
!   USING_DARWIN_CRT_TRUE=
!   USING_DARWIN_CRT_FALSE='#'
! else
!   USING_DARWIN_CRT_TRUE='#'
!   USING_DARWIN_CRT_FALSE=
! fi
! 
! 
! # These may not be defined in a non-ANS conformant embedded system.
! # FIXME: Should these case a runtime exception in that case?
! 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>
! 
! _ACEOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "mktime" >/dev/null 2>&1; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_MKTIME 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 <time.h>
! 
! _ACEOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "localtime" >/dev/null 2>&1; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_LOCALTIME 1
! _ACEOF
  
  fi
  rm -f conftest*
  
  
+ # Create the subdirectory for natFile.cc, or the attempt
+ # to create the link will fail.
  test -d java || mkdir java
  test -d java/io || mkdir java/io
  test -d gnu || mkdir gnu
+           ac_config_links="$ac_config_links java/io/natFile.cc:java/io/natFile${FILE-${PLATFORM}}.cc"
  
  
! # Likewise for ConcreteProcess.java and natConcreteProcess.cc.
  test -d java/lang || mkdir java/lang
+           ac_config_links="$ac_config_links java/lang/ConcreteProcess.java:java/lang/${PLATFORM}Process.java"
  
+           ac_config_links="$ac_config_links java/lang/natConcreteProcess.cc:java/lang/nat${PLATFORM}Process.cc"
  
  
+ # Likewise for natInetAddress.cc and natNetworkInterface.cc.
  test -d java/net || mkdir java/net
+           ac_config_links="$ac_config_links java/net/natInetAddress.cc:java/net/natInetAddress${PLATFORMNET}.cc"
  
+           ac_config_links="$ac_config_links java/net/natNetworkInterface.cc:java/net/natNetworkInterface${PLATFORMNET}.cc"
  
  
+ # Likewise for natPlainSocketImpl.cc and natPlainDatagramSocketImpl.cc.
  test -d gnu/java || mkdir gnu/java
  test -d gnu/java/net || mkdir gnu/java/net
+           ac_config_links="$ac_config_links gnu/java/net/natPlainSocketImpl.cc:gnu/java/net/natPlainSocketImpl${PLATFORMNET}.cc"
  
+           ac_config_links="$ac_config_links gnu/java/net/natPlainDatagramSocketImpl.cc:gnu/java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc"
  
  
+ # Likewise for natPipeImpl.cc and natSelectorImpl.cc.
  test -d gnu/java/nio || mkdir gnu/java/nio
+           ac_config_links="$ac_config_links gnu/java/nio/natPipeImpl.cc:gnu/java/nio/natPipeImpl${PLATFORM}.cc"
  
+           ac_config_links="$ac_config_links gnu/java/nio/natSelectorImpl.cc:gnu/java/nio/natSelectorImpl${PLATFORM}.cc"
+ 
+ test -d gnu/java/nio/channels || mkdir gnu/java/nio/channels
+           ac_config_links="$ac_config_links gnu/java/nio/channels/natFileChannelImpl.cc:gnu/java/nio/channels/natFileChannel${FILE-${PLATFORM}}.cc"
  
  
  case "${host}" in
      *mingw*)
!       SYSTEMSPEC="-lgdi32 -lws2_32"
        if test "${with_win32_nlsapi}" = "unicows"; then
          SYSTEMSPEC="-lunicows $SYSTEMSPEC"
        fi
*************** esac
*** 3269,3298 ****
  LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -rpath `${PWDCMD-pwd}`/.libs"
  
  
  # Check whether --with-system-zlib or --without-system-zlib was given.
  if test "${with_system_zlib+set}" = set; then
    withval="$with_system_zlib"
-   :
- fi
  
  ZLIBSPEC=
  
  ZLIBTESTSPEC=
  
  
! # If we find X, set shell vars x_includes and x_libraries to the
! # paths, otherwise set no_x=yes.
! # Uses ac_ vars as temps to allow command line to override cache and checks.
! # --without-x overrides everything else, but does not touch the cache.
! echo $ac_n "checking for X""... $ac_c" 1>&6
! echo "configure:3289: checking for X" >&5
  
  # 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.
--- 6450,6475 ----
  LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -rpath `${PWDCMD-pwd}`/.libs"
  
  
+ 
  # Check whether --with-system-zlib or --without-system-zlib was given.
  if test "${with_system_zlib+set}" = set; then
    withval="$with_system_zlib"
  
+ fi;
  ZLIBSPEC=
  
  ZLIBTESTSPEC=
  
  
! 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.
*************** else
*** 3302,3508 ****
      # Both variables are already set.
      have_x=yes
    else
! if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&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 conftestdir
! if mkdir conftestdir; then
!   cd conftestdir
    # Make sure to not put "make" in the Imakefile rules, since we grep it out.
!   cat > Imakefile <<'EOF'
  acfindx:
  	@echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
! EOF
    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 conftestdir
  fi
  
! if test "$ac_x_includes" = NO; then
!   # Guess where to find include files, by looking for this one X11 .h file.
!   test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
  
    # First, try using that file with no special directory specified.
! cat > conftest.$ac_ext <<EOF
! #line 3351 "configure"
! #include "confdefs.h"
! #include <$x_direct_test_include>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3356: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
    # We can compile using X headers with no special include directory.
  ac_x_includes=
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   # Look for the header file in a standard set of common directories.
! # Check X11 before X11Rn because it is often a symlink to the current release.
!   for ac_dir in               \
!     /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 \
!     ; \
!   do
!     if test -r "$ac_dir/$x_direct_test_include"; then
!       ac_x_includes=$ac_dir
!       break
!     fi
!   done
  fi
! rm -f conftest*
! fi # $ac_x_includes = NO
  
! if test "$ac_x_libraries" = NO; then
    # Check for the libraries.
- 
-   test -z "$x_direct_test_library" && x_direct_test_library=Xt
-   test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
- 
    # See if we find them without any special options.
    # Don't add to $LIBS permanently.
!   ac_save_LIBS="$LIBS"
!   LIBS="-l$x_direct_test_library $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 3425 "configure"
! #include "confdefs.h"
! 
! int main() {
! ${x_direct_test_function}()
! ; return 0; }
! EOF
! if { (eval echo configure:3432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   LIBS="$ac_save_LIBS"
  # We can link X programs with no special library path.
  ac_x_libraries=
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   LIBS="$ac_save_LIBS"
! # First see if replacing the include by lib works.
! # Check X11 before X11Rn because it is often a symlink to the current release.
! for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
!     /usr/X11/lib          \
!     /usr/X11R6/lib        \
!     /usr/X11R5/lib        \
!     /usr/X11R4/lib        \
!                           \
!     /usr/lib/X11          \
!     /usr/lib/X11R6        \
!     /usr/lib/X11R5        \
!     /usr/lib/X11R4        \
!                           \
!     /usr/local/X11/lib    \
!     /usr/local/X11R6/lib  \
!     /usr/local/X11R5/lib  \
!     /usr/local/X11R4/lib  \
!                           \
!     /usr/local/lib/X11    \
!     /usr/local/lib/X11R6  \
!     /usr/local/lib/X11R5  \
!     /usr/local/lib/X11R4  \
!                           \
!     /usr/X386/lib         \
!     /usr/x386/lib         \
!     /usr/XFree86/lib/X11  \
!                           \
!     /usr/lib              \
!     /usr/local/lib        \
!     /usr/unsupported/lib  \
!     /usr/athena/lib       \
!     /usr/local/x11r5/lib  \
!     /usr/lpp/Xamples/lib  \
!     /lib/usr/lib/X11	  \
!                           \
!     /usr/openwin/lib      \
!     /usr/openwin/share/lib \
!     ; \
  do
    for ac_extension in a so sl; do
!     if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
        ac_x_libraries=$ac_dir
        break 2
      fi
    done
  done
  fi
! rm -f conftest*
! 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 "$ac_t""$have_x" 1>&6
    no_x=yes
  else
    # If each of the values was on the command line, it overrides each guess.
--- 6479,6693 ----
      # 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"
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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.
*************** else
*** 3511,3524 ****
    # 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 "$ac_t""libraries $x_libraries, headers $x_includes" 1>&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 <<\EOF
  #define X_DISPLAY_MISSING 1
! EOF
  
    X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
  else
--- 6696,6711 ----
    # 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
*************** else
*** 3531,3590 ****
      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 $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
! echo "configure:3538: checking whether -R must be followed by a space" >&5
!       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
!       cat > conftest.$ac_ext <<EOF
! #line 3541 "configure"
! #include "confdefs.h"
  
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:3548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    ac_R_nospace=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_R_nospace=no
  fi
! rm -f conftest*
        if test $ac_R_nospace = yes; then
! 	echo "$ac_t""no" 1>&6
  	X_LIBS="$X_LIBS -R$x_libraries"
        else
  	LIBS="$ac_xsave_LIBS -R $x_libraries"
! 	cat > conftest.$ac_ext <<EOF
! #line 3564 "configure"
! #include "confdefs.h"
  
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:3571: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    ac_R_space=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_R_space=no
  fi
! rm -f conftest*
  	if test $ac_R_space = yes; then
! 	  echo "$ac_t""yes" 1>&6
  	  X_LIBS="$X_LIBS -R $x_libraries"
  	else
! 	  echo "$ac_t""neither works" 1>&6
  	fi
        fi
!       LIBS="$ac_xsave_LIBS"
      esac
    fi
  
--- 6718,6846 ----
      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"
!       if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
! 	if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
*************** rm -f conftest*
*** 3595,4126 ****
    if test "$ISC" = yes; then
      X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
    else
!     # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X
!     # libraries were built with DECnet support.  And karl@cs.umb.edu says
      # the Alpha needs dnet_stub (dnet does not exist).
!     echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
! echo "configure:3603: checking for dnet_ntoa in -ldnet" >&5
! ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   ac_save_LIBS="$LIBS"
! LIBS="-ldnet  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 3611 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* 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; }
! EOF
! if { (eval echo configure:3622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
  fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
      if test $ac_cv_lib_dnet_dnet_ntoa = no; then
!       echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
! echo "configure:3644: checking for dnet_ntoa in -ldnet_stub" >&5
! ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-ldnet_stub  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 3652 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* 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; }
! EOF
! if { (eval echo configure:3663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
      fi
  
      # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
      # to get the SysV transport functions.
!     # chad@anasazi.com 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 dickey@clark.net.
!     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
! echo "configure:3692: checking for gethostbyname" >&5
! if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3697 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char gethostbyname(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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() {
  
  /* 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
! gethostbyname();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:3720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_gethostbyname=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_gethostbyname=no"
! fi
! rm -f conftest*
! fi
  
! if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   :
! else
!   echo "$ac_t""no" 1>&6
  fi
  
      if test $ac_cv_func_gethostbyname = no; then
!       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
! echo "configure:3741: checking for gethostbyname in -lnsl" >&5
! ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lnsl  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 3749 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* 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; }
! EOF
! if { (eval echo configure:3760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
  else
!   echo "$ac_t""no" 1>&6
  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@lia.di.epfl.ch: it contains
!     # gethostby* variants that don't use the nameserver (or something).
!     # -lsocket must be given before -lnsl if both are needed.
!     # We assume that if connect needs -lnsl, so does gethostbyname.
!     echo $ac_n "checking for connect""... $ac_c" 1>&6
! echo "configure:3790: checking for connect" >&5
! if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3795 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char connect(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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() {
  
  /* 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
! connect();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:3818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_connect=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_connect=no"
! fi
! rm -f conftest*
! fi
  
! if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   :
! else
!   echo "$ac_t""no" 1>&6
  fi
  
      if test $ac_cv_func_connect = no; then
!       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
! echo "configure:3839: checking for connect in -lsocket" >&5
! ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 3847 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* 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; }
! EOF
! if { (eval echo configure:3858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
      fi
  
!     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
!     echo $ac_n "checking for remove""... $ac_c" 1>&6
! echo "configure:3882: checking for remove" >&5
! if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3887 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char remove(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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() {
  
  /* 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
! remove();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:3910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_remove=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_remove=no"
! fi
! rm -f conftest*
! fi
  
! if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   :
! else
!   echo "$ac_t""no" 1>&6
  fi
  
      if test $ac_cv_func_remove = no; then
!       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
! echo "configure:3931: checking for remove in -lposix" >&5
! ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lposix  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 3939 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* 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; }
! EOF
! if { (eval echo configure:3950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
      fi
  
      # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
!     echo $ac_n "checking for shmat""... $ac_c" 1>&6
! echo "configure:3974: checking for shmat" >&5
! if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 3979 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char shmat(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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() {
  
  /* 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
! shmat();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:4002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_shmat=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_shmat=no"
! fi
! rm -f conftest*
! fi
  
! if eval "test \"`echo '$ac_cv_func_'shmat`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   :
! else
!   echo "$ac_t""no" 1>&6
  fi
  
      if test $ac_cv_func_shmat = no; then
!       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
! echo "configure:4023: checking for shmat in -lipc" >&5
! ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lipc  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 4031 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* 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; }
! EOF
! if { (eval echo configure:4042: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
- else
-   echo "$ac_t""no" 1>&6
  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.
!   #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
!   echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
! echo "configure:4075: checking for IceConnectionNumber in -lICE" >&5
! ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lICE $X_EXTRA_LIBS $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 4083 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* 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; }
! EOF
! if { (eval echo configure:4094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
!   LDFLAGS="$ac_save_LDFLAGS"
  
  fi
  
  
  # Check whether --enable-java-awt or --disable-java-awt was given.
  if test "${enable_java_awt+set}" = set; then
    enableval="$enable_java_awt"
-   :
- fi
  
  
  peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
  use_xlib_awt=""
--- 6851,7941 ----
    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"
!     if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
  fi
! 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"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
  fi
+ 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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
  
+ # Determine which AWT peer libraries to build
  # Check whether --enable-java-awt or --disable-java-awt was given.
  if test "${enable_java_awt+set}" = set; then
    enableval="$enable_java_awt"
  
+ fi;
  
  peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
  use_xlib_awt=""
*************** else
*** 4176,4181 ****
--- 7991,7997 ----
  fi
  
  
+ 
  if test "$use_gtk_awt" = yes; then
    GTK_AWT_TRUE=
    GTK_AWT_FALSE='#'
*************** else
*** 4184,4195 ****
    GTK_AWT_FALSE=
  fi
  
  # Check whether --enable-gtk-cairo or --disable-gtk-cairo was given.
  if test "${enable_gtk_cairo+set}" = set; then
    enableval="$enable_gtk_cairo"
-   :
- fi
  
  
  
  if test "x${enable_gtk_cairo}" = xyes; then
--- 8000,8012 ----
    GTK_AWT_FALSE=
  fi
  
+ 
+ # determine whether to enable the cairo GTK Graphics2D backend
  # Check whether --enable-gtk-cairo or --disable-gtk-cairo was given.
  if test "${enable_gtk_cairo+set}" = set; then
    enableval="$enable_gtk_cairo"
  
+ fi;
  
  
  if test "x${enable_gtk_cairo}" = xyes; then
*************** else
*** 4199,4244 ****
    GTK_CAIRO_TRUE='#'
    GTK_CAIRO_FALSE=
  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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4212: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   case "$PKG_CONFIG" in
!   /*)
    ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
    ;;
-   ?:/*)			 
-   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a dos path.
-   ;;
    *)
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do 
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
    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 "$ac_t""$PKG_CONFIG" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
    fi
--- 8016,8066 ----
    GTK_CAIRO_TRUE='#'
    GTK_CAIRO_FALSE=
  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
*************** fi
*** 4251,4283 ****
    else
       PKG_CONFIG_MIN_VERSION=0.9.0
       if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
!         echo $ac_n "checking for cairo""... $ac_c" 1>&6
! echo "configure:4256: checking for cairo" >&5
  
          if $PKG_CONFIG --exists "cairo" ; then
!             echo "$ac_t""yes" 1>&6
              succeeded=yes
  
!             echo $ac_n "checking CAIRO_CFLAGS""... $ac_c" 1>&6
! echo "configure:4263: checking CAIRO_CFLAGS" >&5
              CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo"`
!             echo "$ac_t""$CAIRO_CFLAGS" 1>&6
  
!             echo $ac_n "checking CAIRO_LIBS""... $ac_c" 1>&6
! echo "configure:4268: checking CAIRO_LIBS" >&5
              CAIRO_LIBS=`$PKG_CONFIG --libs "cairo"`
!             echo "$ac_t""$CAIRO_LIBS" 1>&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"`
              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"
--- 8073,8108 ----
    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" >&5
! echo $ECHO_N "checking for cairo... $ECHO_C" >&6
  
          if $PKG_CONFIG --exists "cairo" ; 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"`
!             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"`
!             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"`
              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"
*************** echo "configure:4268: checking CAIRO_LIB
*** 4287,4333 ****
    if test $succeeded = yes; then
       :
    else
!      { echo "configure: error: Library requirements (cairo) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." 1>&2; 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4301: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   case "$PKG_CONFIG" in
!   /*)
    ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
    ;;
-   ?:/*)			 
-   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a dos path.
-   ;;
    *)
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do 
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
    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 "$ac_t""$PKG_CONFIG" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
    fi
--- 8112,8164 ----
    if test $succeeded = yes; then
       :
    else
!      { { echo "$as_me:$LINENO: error: Library requirements (cairo) 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) 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
*************** fi
*** 4340,4372 ****
    else
       PKG_CONFIG_MIN_VERSION=0.9.0
       if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
!         echo $ac_n "checking for pangoft2""... $ac_c" 1>&6
! echo "configure:4345: checking for pangoft2" >&5
  
          if $PKG_CONFIG --exists "pangoft2" ; then
!             echo "$ac_t""yes" 1>&6
              succeeded=yes
  
!             echo $ac_n "checking PANGOFT2_CFLAGS""... $ac_c" 1>&6
! echo "configure:4352: checking PANGOFT2_CFLAGS" >&5
              PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2"`
!             echo "$ac_t""$PANGOFT2_CFLAGS" 1>&6
  
!             echo $ac_n "checking PANGOFT2_LIBS""... $ac_c" 1>&6
! echo "configure:4357: checking PANGOFT2_LIBS" >&5
              PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2"`
!             echo "$ac_t""$PANGOFT2_LIBS" 1>&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"
--- 8171,8206 ----
    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"
*************** echo "configure:4357: checking PANGOFT2_
*** 4376,4382 ****
    if test $succeeded = yes; then
       :
    else
!      { echo "configure: 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." 1>&2; exit 1; }
    fi
  
  fi
--- 8210,8218 ----
    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
*************** fi
*** 4385,4432 ****
  
  
  
  libsubdir=.libs
  
! echo $ac_n "checking for garbage collector to use""... $ac_c" 1>&6
! echo "configure:4392: checking for garbage collector to use" >&5
  # Check whether --enable-java-gc or --disable-java-gc was given.
  if test "${enable_java_gc+set}" = set; then
    enableval="$enable_java_gc"
-   
    GC=$enableval
  else
    GC=boehm
! fi
! 
  GCLIBS=
  GCINCS=
  GCDEPS=
- GCOBJS=
  GCSPEC=
  JC1GCSPEC=
  GCTESTSPEC=
  case "$GC" in
   boehm)
!     echo "$ac_t""boehm" 1>&6
      GCLIBS=../boehm-gc/libgcjgc_convenience.la
      JC1GCSPEC='-fuse-boehm-gc'
      GCTESTSPEC="-L`${PWDCMD-pwd}`/../boehm-gc/.libs -rpath `${PWDCMD-pwd}`/../boehm-gc/.libs"
! 
!             GCINCS="`cat ../boehm-gc/boehm-cflags`"
      GCOBJS=boehm.lo
      GCHDR=boehm-gc.h
!         cat >> confdefs.h <<\EOF
  #define HAVE_BOEHM_GC 1
! EOF
  
      ;;
   no)
!     echo "$ac_t""none" 1>&6
!     GCOBJS=nogc.lo
      GCHDR=no-gc.h
      ;;
   *)
!     { echo "configure: error: unrecognized collector \"$GC\"" 1>&2; exit 1; }
      ;;
  esac
  
--- 8221,8271 ----
  
  
  
+ # FIXME: this should be _libs on some hosts.
  libsubdir=.libs
  
! # Allow the GC to be disabled.  Can be useful when debugging.
! echo "$as_me:$LINENO: checking for garbage collector to use" >&5
! echo $ECHO_N "checking for garbage collector to use... $ECHO_C" >&6
  # Check whether --enable-java-gc or --disable-java-gc was given.
  if test "${enable_java_gc+set}" = set; then
    enableval="$enable_java_gc"
    GC=$enableval
  else
    GC=boehm
! fi;
  GCLIBS=
  GCINCS=
  GCDEPS=
  GCSPEC=
  JC1GCSPEC=
  GCTESTSPEC=
  case "$GC" in
   boehm)
!     echo "$as_me:$LINENO: result: boehm" >&5
! echo "${ECHO_T}boehm" >&6
      GCLIBS=../boehm-gc/libgcjgc_convenience.la
      JC1GCSPEC='-fuse-boehm-gc'
      GCTESTSPEC="-L`${PWDCMD-pwd}`/../boehm-gc/.libs -rpath `${PWDCMD-pwd}`/../boehm-gc/.libs"
!     GCINCS='-I$(top_srcdir)/../boehm-gc/include -I../boehm-gc/include'
      GCOBJS=boehm.lo
      GCHDR=boehm-gc.h
!     # The POSIX thread support needs to know this.
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_BOEHM_GC 1
! _ACEOF
  
      ;;
   no)
!     echo "$as_me:$LINENO: result: none" >&5
! echo "${ECHO_T}none" >&6
      GCHDR=no-gc.h
      ;;
   *)
!     { { echo "$as_me:$LINENO: error: unrecognized collector \"$GC\"" >&5
! echo "$as_me: error: unrecognized collector \"$GC\"" >&2;}
!    { (exit 1); exit 1; }; }
      ;;
  esac
  
*************** esac
*** 4435,4460 ****
  
  
  
  
  
  
  
! echo $ac_n "checking for thread model used by GCC""... $ac_c" 1>&6
! echo "configure:4444: checking for thread model used by GCC" >&5
  THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
! echo "$ac_t""$THREADS" 1>&6
  
  case "$THREADS" in
   no | none | single)
      THREADS=none
      ;;
!  posix | pthreads)
      THREADS=posix
      case "$host" in
       *-*-linux*)
! 	cat >> confdefs.h <<\EOF
  #define LINUX_THREADS 1
! EOF
  
  	;;
      esac
--- 8274,8321 ----
  
  
  
+           ac_config_links="$ac_config_links include/java-gc.h:include/$GCHDR"
  
  
  
+ if test "$GC" = boehm; then
+   USING_BOEHMGC_TRUE=
+   USING_BOEHMGC_FALSE='#'
+ else
+   USING_BOEHMGC_TRUE='#'
+   USING_BOEHMGC_FALSE=
+ fi
  
! 
! 
! if test "$GC" = no; then
!   USING_NOGC_TRUE=
!   USING_NOGC_FALSE='#'
! else
!   USING_NOGC_TRUE='#'
!   USING_NOGC_FALSE=
! fi
! 
! 
! 
! echo "$as_me:$LINENO: checking for thread model used by GCC" >&5
! echo $ECHO_N "checking for thread model used by GCC... $ECHO_C" >&6
  THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
! echo "$as_me:$LINENO: result: $THREADS" >&5
! echo "${ECHO_T}$THREADS" >&6
  
  case "$THREADS" in
   no | none | single)
      THREADS=none
      ;;
!  posix | posix95 | pthreads)
      THREADS=posix
      case "$host" in
       *-*-linux*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define LINUX_THREADS 1
! _ACEOF
  
  	;;
      esac
*************** EOF
*** 4462,4471 ****
   win32)
      ;;
   decosf1 | irix | mach | os2 | solaris | dce | vxworks)
!     { echo "configure: error: thread package $THREADS not yet supported" 1>&2; exit 1; }
      ;;
   *)
!     { echo "configure: error: $THREADS is an unknown thread package" 1>&2; exit 1; }
      ;;
  esac
  
--- 8323,8336 ----
   win32)
      ;;
   decosf1 | irix | mach | os2 | solaris | dce | vxworks)
!     { { echo "$as_me:$LINENO: error: thread package $THREADS not yet supported" >&5
! echo "$as_me: error: thread package $THREADS not yet supported" >&2;}
!    { (exit 1); exit 1; }; }
      ;;
   *)
!     { { echo "$as_me:$LINENO: error: $THREADS is an unknown thread package" >&5
! echo "$as_me: error: $THREADS is an unknown thread package" >&2;}
!    { (exit 1); exit 1; }; }
      ;;
  esac
  
*************** THREADLDFLAGS=
*** 4474,4480 ****
  THREADLIBS=
  THREADINCS=
  THREADDEPS=
- THREADOBJS=
  THREADH=
  THREADSPEC=
  case "$THREADS" in
--- 8339,8344 ----
*************** case "$THREADS" in
*** 4483,4491 ****
       *-*-cygwin*)
  	# Don't set THREADLIBS here.  Cygwin doesn't have -lpthread.
  	;;
-    
       *-*-freebsd[1234]*)
-    
  	# Before FreeBSD 5, it didn't have -lpthread (or any library which
  	# merely adds pthread_* functions) but it does have a -pthread switch
  	# which is required at link-time to select -lc_r *instead* of -lc.
--- 8347,8353 ----
*************** case "$THREADS" in
*** 4495,4501 ****
  	# the command line.  For now, the user must provide the -pthread
  	# switch to link code compiled with gcj.  In future, consider adding
  	# support for weak references to pthread_* functions ala gthr.h API.
! 	THREADSPEC='%{!pthread: %eUnder this configuration, the user must provide -pthread when linking.}'
  	;;
       *-*-freebsd*)
  	# FreeBSD 5 implements a model much closer to other modern UNIX
--- 8357,8363 ----
  	# the command line.  For now, the user must provide the -pthread
  	# switch to link code compiled with gcj.  In future, consider adding
  	# support for weak references to pthread_* functions ala gthr.h API.
! 	THREADSPEC='%{!pthread: %{!shared: %eUnder this configuration, the user must provide -pthread when linking.}}'
  	;;
       *-*-freebsd*)
  	# FreeBSD 5 implements a model much closer to other modern UNIX
*************** case "$THREADS" in
*** 4515,4554 ****
  	THREADSPEC=-lpthread
  	;;
      esac
-     THREADOBJS=posix-threads.lo
      THREADH=posix-threads.h
      # MIT pthreads doesn't seem to have the mutexattr functions.
      # But for now we don't check for it.  We just assume you aren't
      # using MIT pthreads.
!     cat >> confdefs.h <<\EOF
  #define HAVE_PTHREAD_MUTEXATTR_INIT 1
! EOF
  
  
      # If we're using the Boehm GC, then we happen to know that it
      # defines _REENTRANT, so we don't bother.  Eww.
      if test "$GC" != boehm; then
!        cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
      fi
!     cat >> confdefs.h <<\EOF
  #define _POSIX_PTHREAD_SEMANTICS 1
! EOF
  
      ;;
  
   win32)
-     THREADOBJS=win32-threads.lo
      THREADH=win32-threads.h
      ;;
  
   none)
-     THREADOBJS=no-threads.lo
      THREADH=no-threads.h
      ;;
  esac
  
  
  
--- 8377,8419 ----
  	THREADSPEC=-lpthread
  	;;
      esac
      THREADH=posix-threads.h
      # MIT pthreads doesn't seem to have the mutexattr functions.
      # But for now we don't check for it.  We just assume you aren't
      # using MIT pthreads.
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_PTHREAD_MUTEXATTR_INIT 1
! _ACEOF
  
  
      # If we're using the Boehm GC, then we happen to know that it
      # defines _REENTRANT, so we don't bother.  Eww.
      if test "$GC" != boehm; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
      fi
! 
! cat >>confdefs.h <<\_ACEOF
  #define _POSIX_PTHREAD_SEMANTICS 1
! _ACEOF
  
      ;;
  
   win32)
      THREADH=win32-threads.h
      ;;
  
   none)
      THREADH=no-threads.h
      ;;
  esac
+           ac_config_links="$ac_config_links include/java-threads.h:include/$THREADH"
+ 
+ 
  
  
  
*************** esac
*** 4556,4573 ****
  
  
  
  
  
  if test -d sysdep; then true; else mkdir sysdep; fi
  
  
  HASH_SYNC_SPEC=
  # Hash synchronization is only useful with posix threads right now.
  if test "$enable_hash_synchronization" = yes && test "$THREADS" != "none"; then
     HASH_SYNC_SPEC=-fhash-synchronization
!    cat >> confdefs.h <<\EOF
  #define JV_HASH_SYNCHRONIZATION 1
! EOF
  
  fi
  
--- 8421,8467 ----
  
  
  
+ if test "$THREADS" = posix; then
+   USING_POSIX_THREADS_TRUE=
+   USING_POSIX_THREADS_FALSE='#'
+ else
+   USING_POSIX_THREADS_TRUE='#'
+   USING_POSIX_THREADS_FALSE=
+ fi
+ 
+ 
+ 
+ if test "$THREADS" = win32; then
+   USING_WIN32_THREADS_TRUE=
+   USING_WIN32_THREADS_FALSE='#'
+ else
+   USING_WIN32_THREADS_TRUE='#'
+   USING_WIN32_THREADS_FALSE=
+ fi
+ 
+ 
+ 
+ if test "$THREADS" = none; then
+   USING_NO_THREADS_TRUE=
+   USING_NO_THREADS_FALSE='#'
+ else
+   USING_NO_THREADS_TRUE='#'
+   USING_NO_THREADS_FALSE=
+ fi
  
  
  if test -d sysdep; then true; else mkdir sysdep; fi
+           ac_config_links="$ac_config_links sysdep/locks.h:sysdep/$sysdeps_dir/locks.h"
  
  
  HASH_SYNC_SPEC=
  # Hash synchronization is only useful with posix threads right now.
  if test "$enable_hash_synchronization" = yes && test "$THREADS" != "none"; then
     HASH_SYNC_SPEC=-fhash-synchronization
! 
! cat >>confdefs.h <<\_ACEOF
  #define JV_HASH_SYNCHRONIZATION 1
! _ACEOF
  
  fi
  
*************** else
*** 4583,4603 ****
    USING_GCC_FALSE=
  fi
  
- CANADIAN=no
- NULL_TARGET=no
- NATIVE=yes
  
  # We're in the tree with gcc, and need to include some of its headers.
  GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
  
! # Figure out where generated headers like libgcj-config.h get installed.
! gcc_version_trigger=${libgcj_basedir}/../gcc/version.c
! gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
  gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
- tool_include_dir='$(libdir)/gcc/$(target_alias)/'${gcc_version}/include
  
  
  
  if test "x${with_newlib}" = "xyes"; then
     # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
     # may not work correctly, because the compiler may not be able to
--- 8477,8507 ----
    USING_GCC_FALSE=
  fi
  
  
  # We're in the tree with gcc, and need to include some of its headers.
  GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
  
! 
! 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 libgcj-config.h get installed.
+ tool_include_dir='$(libdir)/gcc/$(target_noncanonical)/'${gcc_version}/include
+ 
+ 
  if test "x${with_newlib}" = "xyes"; then
     # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
     # may not work correctly, because the compiler may not be able to
*************** if test "x${with_newlib}" = "xyes"; then
*** 4605,5122 ****
  
     # We assume newlib.  This lets us hard-code the functions we know
     # we'll have.
!    cat >> confdefs.h <<\EOF
  #define HAVE_MEMMOVE 1
! EOF
  
!    cat >> confdefs.h <<\EOF
  #define HAVE_MEMCPY 1
! EOF
  
!    cat >> confdefs.h <<\EOF
  #define HAVE_STRERROR 1
! EOF
  
!    cat >> confdefs.h <<\EOF
  #define HAVE_TIME 1
! EOF
  
!    cat >> confdefs.h <<\EOF
  #define HAVE_GMTIME_R 1
! EOF
  
!    cat >> confdefs.h <<\EOF
  #define HAVE_LOCALTIME_R 1
! EOF
  
!    cat >> confdefs.h <<\EOF
  #define HAVE_USLEEP_DECL 1
! EOF
  
!       cat >> confdefs.h <<\EOF
  #define HAVE_PTHREAD_MUTEXATTR_INIT 1
! EOF
  
!       cat >> confdefs.h <<\EOF
  #define HAVE_ALLOCA 1
! EOF
  
  
!       cat >> confdefs.h <<\EOF
  #define NO_GETUID 1
! EOF
  
     PLATFORMNET=NoNet
  else
-    for ac_func in strerror ioctl select fstat open fsync sleep opendir
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
- echo "configure:4655: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 4660 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
- #include <assert.h>
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* 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();
  
- int main() {
  
- /* 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
- $ac_func();
- #endif
  
- ; return 0; }
- EOF
- if { (eval echo configure:4683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=yes"
- else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=no"
- fi
- rm -f conftest*
- fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
- fi
- done
  
!    for ac_func in gmtime_r localtime_r readdir_r getpwuid_r getcwd
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:4710: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 4715 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:4738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
!    for ac_func in access stat mkdir rename rmdir unlink realpath utime chmod
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:4765: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 4770 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:4793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
! 
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_func 1
! EOF
!  
! else
!   echo "$ac_t""no" 1>&6
  fi
  done
  
!    for ac_func in nl_langinfo setlocale
! do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:4820: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 4825 "configure"
! #include "confdefs.h"
! /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
! /* 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
! $ac_func();
! #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:4848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
  rm -f conftest*
- fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
  fi
- done
  
!    for ac_func in inet_aton inet_addr
! do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:4875: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 4880 "configure"
! #include "confdefs.h"
! /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
! /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:4903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
- rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  break
- else
-   echo "$ac_t""no" 1>&6
  fi
- done
  
!    for ac_func in inet_pton uname inet_ntoa
! do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:4930: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   cat > conftest.$ac_ext <<EOF
! #line 4935 "configure"
! #include "confdefs.h"
! /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
- int main() {
  
- /* 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
- $ac_func();
- #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:4958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
-    for ac_func in fork execvp pipe sigaction ftruncate
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
- echo "configure:4985: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 4990 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
- #include <assert.h>
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* 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();
  
- int main() {
  
- /* 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
- $ac_func();
- #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:5013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
! else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_func 1
! EOF
!  
  else
!   echo "$ac_t""no" 1>&6
  fi
! done
! 
!    for ac_hdr in execinfo.h unistd.h dlfcn.h
! do
! ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:5041: checking for $ac_hdr" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5046 "configure"
! #include "confdefs.h"
! #include <$ac_hdr>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:5051: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
! rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_hdr 1
! EOF
!  
! else
!   echo "$ac_t""no" 1>&6
  fi
  done
!  
!    echo $ac_n "checking for backtrace""... $ac_c" 1>&6
! echo "configure:5078: checking for backtrace" >&5
! if eval "test \"`echo '$''{'ac_cv_func_backtrace'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5083 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char backtrace(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char backtrace();
  
! int main() {
  
  /* 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_backtrace) || defined (__stub___backtrace)
  choke me
  #else
! backtrace();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:5106: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_backtrace=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_backtrace=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'backtrace`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-   
       case "$host" in
         ia64-*-linux*)
  	 # Has broken backtrace()
--- 8509,9307 ----
  
     # We assume newlib.  This lets us hard-code the functions we know
     # we'll have.
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_MEMMOVE 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_MEMCPY 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_STRERROR 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_TIME 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_GMTIME_R 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_LOCALTIME_R 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_USLEEP_DECL 1
! _ACEOF
  
!    # This is only for POSIX threads.
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_PTHREAD_MUTEXATTR_INIT 1
! _ACEOF
  
!    # We also assume we are using gcc, which provides alloca.
!    cat >>confdefs.h <<\_ACEOF
  #define HAVE_ALLOCA 1
! _ACEOF
  
  
!    # Assume we do not have getuid and friends.
! 
! cat >>confdefs.h <<\_ACEOF
  #define NO_GETUID 1
! _ACEOF
  
     PLATFORMNET=NoNet
  else
  
  
  
  
  
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! for ac_func in strerror ioctl select fstat open fsync sleep opendir \
!                    gmtime_r localtime_r readdir_r getpwuid_r getcwd \
! 		   access stat mkdir rename rmdir unlink realpath utime chmod \
! 		   nl_langinfo setlocale \
! 		   inet_pton uname inet_ntoa \
! 		   fork execvp pipe sigaction ftruncate
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
! 
! 
! for ac_func in inet_aton inet_addr
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
!  break
  fi
  done
  
!    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
  
  
  
  
! 
! for ac_header in execinfo.h unistd.h dlfcn.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 the libjava lists.  ##
! ## ---------------------------------- ##
! _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
! 
!    echo "$as_me:$LINENO: checking for backtrace" >&5
! echo $ECHO_N "checking for backtrace... $ECHO_C" >&6
! if test "${ac_cv_func_backtrace+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! /* Define backtrace to an innocuous variant, in case <limits.h> declares backtrace.
!    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
! #define backtrace innocuous_backtrace
! 
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char backtrace (); 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 backtrace
  
+ /* 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 backtrace ();
  /* 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_backtrace) || defined (__stub___backtrace)
  choke me
  #else
! char (*f) () = backtrace;
! #endif
! #ifdef __cplusplus
! }
  #endif
  
! int
! main ()
! {
! return f != backtrace;
!   ;
!   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_backtrace=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_func_backtrace=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_backtrace" >&5
+ echo "${ECHO_T}$ac_cv_func_backtrace" >&6
+ if test $ac_cv_func_backtrace = yes; then
  
       case "$host" in
         ia64-*-linux*)
  	 # Has broken backtrace()
*************** if eval "test \"`echo '$ac_cv_func_'back
*** 5124,5342 ****
         mips*-*-linux*)
           # Has broken backtrace(), but we supply our own.
           if test -d sysdep; then true; else mkdir -p sysdep; fi
!          EXTRA_CC_FILES="${EXTRA_CC_FILES} sysdep/dwarf2-backtrace.cc"
!          cat >> confdefs.h <<\EOF
  #define HAVE_BACKTRACE 1
! EOF
  
           ;;
         *)
!          cat >> confdefs.h <<\EOF
  #define HAVE_BACKTRACE 1
! EOF
  
  	 ;;
       esac
!    
  else
-   echo "$ac_t""no" 1>&6
  
       case "$host" in
         *mingw*)
           # Has backtrace() defined in libgcj itself
!          cat >> confdefs.h <<\EOF
  #define HAVE_BACKTRACE 1
! EOF
  
           ;;
       esac
!    
  fi
  
  
!    echo $ac_n "checking for dladdr in -ldl""... $ac_c" 1>&6
! echo "configure:5159: checking for dladdr in -ldl" >&5
! ac_lib_var=`echo dl'_'dladdr | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-ldl  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 5167 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char dladdr();
! 
! int main() {
! dladdr()
! ; return 0; }
! EOF
! if { (eval echo configure:5178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   
       if test "x${disable_dladdr}" = "xyes"; then
         #Broken dladdr().
         true
       else
!        cat >> confdefs.h <<\EOF
  #define HAVE_DLADDR 1
! EOF
  
       fi
!    
! else
!   echo "$ac_t""no" 1>&6
  fi
  
     if test x"$build" = x"$host"; then
!      for ac_file in /proc/self/exe
! do
! 
! ac_safe=`echo "$ac_file" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for $ac_file""... $ac_c" 1>&6
! echo "configure:5214: checking for $ac_file" >&5
! if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test "$cross_compiling" = yes; then
!     { echo "configure: error: Cannot check for file existence when cross compiling" 1>&2; exit 1; }
  else
!   if test -r $ac_file; then
!     eval "ac_cv_file_$ac_safe=yes"
!   else
!     eval "ac_cv_file_$ac_safe=no"
!   fi
  fi
  fi
! if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_file=HAVE_`echo $ac_file | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_file 1
! EOF
!  
!        cat >> confdefs.h <<\EOF
! #define HAVE_PROC_SELF_EXE 1
! EOF
  
! else
!   echo "$ac_t""no" 1>&6
  
  fi
- done
  
     else
       case $host in
       *-linux*)
!        cat >> confdefs.h <<\EOF
  #define HAVE_PROC_SELF_EXE 1
! EOF
  
         ;;
       esac
     fi
  
!    
!     
!   am_cv_lib_iconv_ldpath=
!   # Check whether --with-libiconv-prefix or --without-libiconv-prefix was given.
  if test "${with_libiconv_prefix+set}" = set; then
    withval="$with_libiconv_prefix"
!   
!     for dir in `echo "$withval" | tr : ' '`; do
!       if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
!       if test -d $dir/lib; then am_cv_lib_iconv_ldpath="-L$dir/lib"; fi
      done
!    
! fi
  
  
!   echo $ac_n "checking for iconv""... $ac_c" 1>&6
! echo "configure:5272: checking for iconv" >&5
! if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
      am_cv_func_iconv="no, consider installing GNU libiconv"
      am_cv_lib_iconv=no
!     cat > conftest.$ac_ext <<EOF
! #line 5280 "configure"
! #include "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; }
! EOF
! if { (eval echo configure:5290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    am_cv_func_iconv=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
  fi
! rm -f conftest*
      if test "$am_cv_func_iconv" != yes; then
        am_save_LIBS="$LIBS"
!       LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
!       cat > conftest.$ac_ext <<EOF
! #line 5302 "configure"
! #include "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; }
! EOF
! if { (eval echo configure:5312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    am_cv_lib_iconv=yes
          am_cv_func_iconv=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
  fi
! rm -f conftest*
        LIBS="$am_save_LIBS"
      fi
-   
- fi
  
! echo "$ac_t""$am_cv_func_iconv" 1>&6
    if test "$am_cv_func_iconv" = yes; then
!     cat >> confdefs.h <<\EOF
  #define HAVE_ICONV 1
! EOF
  
!     echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
! echo "configure:5333: checking for iconv declaration" >&5
!     if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
!       cat > conftest.$ac_ext <<EOF
! #line 5339 "configure"
! #include "confdefs.h"
  
  #include <stdlib.h>
  #include <iconv.h>
--- 9309,10204 ----
         mips*-*-linux*)
           # Has broken backtrace(), but we supply our own.
           if test -d sysdep; then true; else mkdir -p sysdep; fi
! 	 supply_backtrace=yes
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_BACKTRACE 1
! _ACEOF
  
           ;;
         *)
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_BACKTRACE 1
! _ACEOF
  
  	 ;;
       esac
! 
  else
  
       case "$host" in
         *mingw*)
           # Has backtrace() defined in libgcj itself
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_BACKTRACE 1
! _ACEOF
  
           ;;
       esac
! 
  fi
  
  
!    echo "$as_me:$LINENO: checking for dladdr in -ldl" >&5
! echo $ECHO_N "checking for dladdr in -ldl... $ECHO_C" >&6
! if test "${ac_cv_lib_dl_dladdr+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 dladdr ();
! int
! main ()
! {
! dladdr ();
!   ;
!   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_dl_dladdr=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_dl_dladdr=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_dl_dladdr" >&5
! echo "${ECHO_T}$ac_cv_lib_dl_dladdr" >&6
! if test $ac_cv_lib_dl_dladdr = yes; then
! 
       if test "x${disable_dladdr}" = "xyes"; then
         #Broken dladdr().
         true
       else
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_DLADDR 1
! _ACEOF
  
       fi
! 
  fi
  
     if test x"$build" = x"$host"; then
!      echo "$as_me:$LINENO: checking for /proc/self/exe" >&5
! echo $ECHO_N "checking for /proc/self/exe... $ECHO_C" >&6
! if test "${ac_cv_file__proc_self_exe+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 "/proc/self/exe"; then
!   ac_cv_file__proc_self_exe=yes
  else
!   ac_cv_file__proc_self_exe=no
  fi
  fi
! echo "$as_me:$LINENO: result: $ac_cv_file__proc_self_exe" >&5
! echo "${ECHO_T}$ac_cv_file__proc_self_exe" >&6
! if test $ac_cv_file__proc_self_exe = yes; then
! 
! cat >>confdefs.h <<_ACEOF
! #define HAVE__PROC_SELF_EXE 1
! _ACEOF
! 
  
! 
! cat >>confdefs.h <<\_ACEOF
! #define HAVE_PROC_SELF_EXE 1
! _ACEOF
  
  fi
  
     else
       case $host in
       *-linux*)
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_PROC_SELF_EXE 1
! _ACEOF
  
         ;;
       esac
     fi
  
! 
!       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
!     if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
!       if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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>
*************** size_t iconv (iconv_t cd, char * *inbuf,
*** 5350,5634 ****
  size_t iconv();
  #endif
  
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:5358: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    am_cv_proto_iconv_arg1=""
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   am_cv_proto_iconv_arg1="const"
  fi
! rm -f conftest*
        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 "$ac_t""${ac_t:-
!          }$am_cv_proto_iconv" 1>&6
!     cat >> confdefs.h <<EOF
  #define ICONV_CONST $am_cv_proto_iconv_arg1
! EOF
  
    fi
-   LIBICONV=
-   if test "$am_cv_lib_iconv" = yes; then
-     LIBICONV="$am_cv_lib_iconv_ldpath -liconv"
-   fi
-   
  
-    for ac_hdr in locale.h
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
- echo "configure:5389: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 5394 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
- { (eval echo configure:5399: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-   eval "ac_cv_header_$ac_safe=yes"
- else
-   echo "$ac_err" >&5
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   eval "ac_cv_header_$ac_safe=no"
- fi
- rm -f conftest*
- fi
- if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_hdr 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
- fi
- done
  
!   if test $ac_cv_header_locale_h = yes; then
!     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
! echo "configure:5427: checking for LC_MESSAGES" >&5
! if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5432 "configure"
! #include "confdefs.h"
  #include <locale.h>
! int main() {
  return LC_MESSAGES
! ; return 0; }
! EOF
! if { (eval echo configure:5439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    am_cv_val_LC_MESSAGES=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   am_cv_val_LC_MESSAGES=no
  fi
! rm -f conftest*
  fi
  
! echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6
!     if test $am_cv_val_LC_MESSAGES = yes; then
!       cat >> confdefs.h <<\EOF
  #define HAVE_LC_MESSAGES 1
! EOF
  
-     fi
    fi
!    echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
! echo "configure:5460: checking whether struct tm is in sys/time.h or time.h" >&5
! if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5465 "configure"
! #include "confdefs.h"
  #include <sys/types.h>
  #include <time.h>
! int main() {
  struct tm *tp; tp->tm_sec;
! ; return 0; }
! EOF
! if { (eval echo configure:5473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    ac_cv_struct_tm=time.h
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_struct_tm=sys/time.h
  fi
! rm -f conftest*
  fi
! 
! echo "$ac_t""$ac_cv_struct_tm" 1>&6
  if test $ac_cv_struct_tm = sys/time.h; then
!   cat >> confdefs.h <<\EOF
  #define TM_IN_SYS_TIME 1
! EOF
  
  fi
  
! echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
! echo "configure:5494: checking for tm_zone in struct tm" >&5
! if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5499 "configure"
! #include "confdefs.h"
  #include <sys/types.h>
  #include <$ac_cv_struct_tm>
! int main() {
! struct tm tm; tm.tm_zone;
! ; return 0; }
! EOF
! if { (eval echo configure:5507: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   ac_cv_struct_tm_zone=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_struct_tm_zone=no
  fi
! rm -f conftest*
  fi
  
! echo "$ac_t""$ac_cv_struct_tm_zone" 1>&6
! if test "$ac_cv_struct_tm_zone" = yes; then
!   cat >> confdefs.h <<\EOF
  #define HAVE_TM_ZONE 1
! EOF
  
  else
!   echo $ac_n "checking for tzname""... $ac_c" 1>&6
! echo "configure:5527: checking for tzname" >&5
! if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5532 "configure"
! #include "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; }
! EOF
! if { (eval echo configure:5542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    ac_cv_var_tzname=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_var_tzname=no
  fi
! rm -f conftest*
  fi
! 
! echo "$ac_t""$ac_cv_var_tzname" 1>&6
    if test $ac_cv_var_tzname = yes; then
!     cat >> confdefs.h <<\EOF
  #define HAVE_TZNAME 1
! EOF
  
    fi
  fi
  
  
!    for ac_func in gethostbyname_r
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:5567: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5572 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:5595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_func 1
! EOF
!  
!      cat >> confdefs.h <<\EOF
  #define HAVE_GETHOSTBYNAME_R 1
! EOF
  
       # There are two different kinds of gethostbyname_r.
       # We look for the one that returns `int'.
       # Hopefully this check is robust enough.
!      cat > conftest.$ac_ext <<EOF
! #line 5622 "configure"
! #include "confdefs.h"
  #include <netdb.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "int.*gethostbyname_r" >/dev/null 2>&1; then
!   rm -rf conftest*
!   
!        cat >> confdefs.h <<\EOF
  #define GETHOSTBYNAME_R_RETURNS_INT 1
! EOF
  
  fi
  rm -f conftest*
--- 10212,10726 ----
  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
  
  
!   echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
! echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6
! if test "${am_cv_val_LC_MESSAGES+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <locale.h>
! int
! main ()
! {
  return LC_MESSAGES
!   ;
!   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_val_LC_MESSAGES=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! am_cv_val_LC_MESSAGES=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
+ echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5
+ echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6
+   if test $am_cv_val_LC_MESSAGES = yes; then
  
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_LC_MESSAGES 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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
  
! 
! 
! for ac_func in gethostbyname_r
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_GETHOSTBYNAME_R 1
! _ACEOF
  
       # There are two different kinds of gethostbyname_r.
       # We look for the one that returns `int'.
       # Hopefully this check is robust enough.
!      cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <netdb.h>
! 
! _ACEOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "int.*gethostbyname_r" >/dev/null 2>&1; then
! 
! 
! cat >>confdefs.h <<\_ACEOF
  #define GETHOSTBYNAME_R_RETURNS_INT 1
! _ACEOF
  
  fi
  rm -f conftest*
*************** rm -f conftest*
*** 5637,5753 ****
       case " $GCINCS " in
       *" -D_REENTRANT "*) ;;
       *)
! 		echo $ac_n "checking whether gethostbyname_r declaration requires -D_REENTRANT""... $ac_c" 1>&6
! echo "configure:5642: checking whether gethostbyname_r declaration requires -D_REENTRANT" >&5
! if eval "test \"`echo '$''{'libjava_cv_gethostbyname_r_needs_reentrant'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!    
! 	  ac_ext=C
! # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CXXCPP $CPPFLAGS'
! ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cxx_cross
  
! 	  cat > conftest.$ac_ext <<EOF
! #line 5655 "configure"
! #include "confdefs.h"
  #include <netdb.h>
! int main() {
  gethostbyname_r("", 0, 0);
! ; return 0; }
! EOF
! if { (eval echo configure:5662: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    libjava_cv_gethostbyname_r_needs_reentrant=no
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   		CPPFLAGS_SAVE="$CPPFLAGS"
  		CPPFLAGS="$CPPFLAGS -D_REENTRANT"
! 		cat > conftest.$ac_ext <<EOF
! #line 5672 "configure"
! #include "confdefs.h"
  #include <netdb.h>
! int main() {
  gethostbyname_r("", 0, 0);
! ; return 0; }
! EOF
! if { (eval echo configure:5679: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    libjava_cv_gethostbyname_r_needs_reentrant=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   libjava_cv_gethostbyname_r_needs_reentrant=fail
  fi
! rm -f conftest*
  		CPPFLAGS="$CPPFLAGS_SAVE"
! 	  
  fi
! rm -f conftest*
  	  ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
- 	
- fi
  
! echo "$ac_t""$libjava_cv_gethostbyname_r_needs_reentrant" 1>&6
  	if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
! 	  cat >> confdefs.h <<\EOF
  #define _REENTRANT 1
! EOF
  
  	fi
       ;;
       esac
  
!      echo $ac_n "checking for struct hostent_data""... $ac_c" 1>&6
! echo "configure:5714: checking for struct hostent_data" >&5
! if eval "test \"`echo '$''{'libjava_cv_struct_hostent_data'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   	cat > conftest.$ac_ext <<EOF
! #line 5719 "configure"
! #include "confdefs.h"
  
  #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
  # define _REENTRANT 1
  #endif
  #include <netdb.h>
! int main() {
  struct hostent_data data;
! ; return 0; }
! EOF
! if { (eval echo configure:5730: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    libjava_cv_struct_hostent_data=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   libjava_cv_struct_hostent_data=no
  fi
! rm -f conftest*
  fi
! 
! echo "$ac_t""$libjava_cv_struct_hostent_data" 1>&6
       if test "x$libjava_cv_struct_hostent_data" = xyes; then
!        cat >> confdefs.h <<\EOF
  #define HAVE_STRUCT_HOSTENT_DATA 1
! EOF
  
       fi
!    
! else
!   echo "$ac_t""no" 1>&6
  fi
  done
  
--- 10729,10923 ----
       case " $GCINCS " in
       *" -D_REENTRANT "*) ;;
       *)
! 		echo "$as_me:$LINENO: checking whether gethostbyname_r declaration requires -D_REENTRANT" >&5
! echo $ECHO_N "checking whether gethostbyname_r declaration requires -D_REENTRANT... $ECHO_C" >&6
! if test "${libjava_cv_gethostbyname_r_needs_reentrant+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!    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
  
! 	  cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <netdb.h>
! int
! main ()
! {
  gethostbyname_r("", 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_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
    libjava_cv_gethostbyname_r_needs_reentrant=no
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! 		CPPFLAGS_SAVE="$CPPFLAGS"
  		CPPFLAGS="$CPPFLAGS -D_REENTRANT"
! 		cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <netdb.h>
! int
! main ()
! {
  gethostbyname_r("", 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_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
    libjava_cv_gethostbyname_r_needs_reentrant=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! libjava_cv_gethostbyname_r_needs_reentrant=fail
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  		CPPFLAGS="$CPPFLAGS_SAVE"
! 
  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
  
  
! fi
! echo "$as_me:$LINENO: result: $libjava_cv_gethostbyname_r_needs_reentrant" >&5
! echo "${ECHO_T}$libjava_cv_gethostbyname_r_needs_reentrant" >&6
  	if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define _REENTRANT 1
! _ACEOF
  
  	fi
       ;;
       esac
  
!      echo "$as_me:$LINENO: checking for struct hostent_data" >&5
! echo $ECHO_N "checking for struct hostent_data... $ECHO_C" >&6
! if test "${libjava_cv_struct_hostent_data+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.  */
  
  #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
  # define _REENTRANT 1
  #endif
  #include <netdb.h>
! int
! main ()
! {
  struct hostent_data data;
!   ;
!   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
    libjava_cv_struct_hostent_data=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! libjava_cv_struct_hostent_data=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
! echo "$as_me:$LINENO: result: $libjava_cv_struct_hostent_data" >&5
! echo "${ECHO_T}$libjava_cv_struct_hostent_data" >&6
       if test "x$libjava_cv_struct_hostent_data" = xyes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_STRUCT_HOSTENT_DATA 1
! _ACEOF
  
       fi
! 
  fi
  done
  
*************** done
*** 5757,5846 ****
     # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
     # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
     # linkage check is enough, yet C++ code requires proper prototypes.)
!    cat > conftest.$ac_ext <<EOF
! #line 5762 "configure"
! #include "confdefs.h"
  #include <netdb.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "gethostbyaddr_r" >/dev/null 2>&1; then
!   rm -rf conftest*
!   
!    for ac_func in gethostbyaddr_r
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:5773: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5778 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:5801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_func 1
! EOF
!  
!      cat >> confdefs.h <<\EOF
  #define HAVE_GETHOSTBYADDR_R 1
! EOF
  
       # There are two different kinds of gethostbyaddr_r.
       # We look for the one that returns `int'.
       # Hopefully this check is robust enough.
!      cat > conftest.$ac_ext <<EOF
! #line 5828 "configure"
! #include "confdefs.h"
  #include <netdb.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "int.*gethostbyaddr_r" >/dev/null 2>&1; then
!   rm -rf conftest*
!   
!        cat >> confdefs.h <<\EOF
  #define GETHOSTBYADDR_R_RETURNS_INT 1
! EOF
  
  fi
  rm -f conftest*
  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
--- 10927,11076 ----
     # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
     # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
     # linkage check is enough, yet C++ code requires proper prototypes.)
!    cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <netdb.h>
! 
! _ACEOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "gethostbyaddr_r" >/dev/null 2>&1; then
! 
! 
! for ac_func in gethostbyaddr_r
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_GETHOSTBYADDR_R 1
! _ACEOF
  
       # There are two different kinds of gethostbyaddr_r.
       # We look for the one that returns `int'.
       # Hopefully this check is robust enough.
!      cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <netdb.h>
! 
! _ACEOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "int.*gethostbyaddr_r" >/dev/null 2>&1; then
! 
! 
! cat >>confdefs.h <<\_ACEOF
  #define GETHOSTBYADDR_R_RETURNS_INT 1
! _ACEOF
  
  fi
  rm -f conftest*
  
  fi
  done
  
*************** fi
*** 5848,5997 ****
  rm -f conftest*
  
  
!    for ac_func in gethostname
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:5855: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5860 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:5883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_func 1
! EOF
!  
!      cat >> confdefs.h <<\EOF
  #define HAVE_GETHOSTNAME 1
! EOF
  
!      cat > conftest.$ac_ext <<EOF
! #line 5907 "configure"
! #include "confdefs.h"
  #include <unistd.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "gethostname" >/dev/null 2>&1; then
!   rm -rf conftest*
!   
!        cat >> confdefs.h <<\EOF
  #define HAVE_GETHOSTNAME_DECL 1
! EOF
  
  fi
  rm -f conftest*
  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
  
!    for ac_func in usleep
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:5931: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 5936 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:5959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_func 1
! EOF
!  
!      cat > conftest.$ac_ext <<EOF
! #line 5979 "configure"
! #include "confdefs.h"
  #include <unistd.h>
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "usleep" >/dev/null 2>&1; then
!   rm -rf conftest*
!   
!        cat >> confdefs.h <<\EOF
  #define HAVE_USLEEP_DECL 1
! EOF
  
  fi
  rm -f conftest*
  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
--- 11078,11340 ----
  rm -f conftest*
  
  
! 
! for ac_func in gethostname
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_GETHOSTNAME 1
! _ACEOF
  
!      cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <unistd.h>
! 
! _ACEOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "gethostname" >/dev/null 2>&1; then
! 
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_GETHOSTNAME_DECL 1
! _ACEOF
  
  fi
  rm -f conftest*
  
  fi
  done
  
  
! 
! for ac_func in usleep
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
!      cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <unistd.h>
! 
! _ACEOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "usleep" >/dev/null 2>&1; then
! 
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_USLEEP_DECL 1
! _ACEOF
  
  fi
  rm -f conftest*
  
  fi
  done
  
*************** done
*** 6003,6207 ****
        LIBS="$LIBS $THREADLIBS"
        # Some POSIX thread systems don't have pthread_mutexattr_settype.
        # E.g., Solaris.
!       for ac_func in pthread_mutexattr_settype pthread_mutexattr_setkind_np
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:6010: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 6015 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:6038: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
  
        # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
        # Solaris 7 the name librt is preferred.
!       for ac_func in sched_yield
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:6068: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 6073 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:6096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
  else
!   echo "$ac_t""no" 1>&6
! echo $ac_n "checking for sched_yield in -lrt""... $ac_c" 1>&6
! echo "configure:6118: checking for sched_yield in -lrt" >&5
! ac_lib_var=`echo rt'_'sched_yield | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lrt  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 6126 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char sched_yield();
! 
! int main() {
! sched_yield()
! ; return 0; }
! EOF
! if { (eval echo configure:6137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   
! 	  cat >> confdefs.h <<\EOF
  #define HAVE_SCHED_YIELD 1
! EOF
  
  	  THREADLIBS="$THREADLIBS -lrt"
  	  THREADSPEC="$THREADSPEC -lrt"
  else
-   echo "$ac_t""no" 1>&6
  
! 	  echo $ac_n "checking for sched_yield in -lposix4""... $ac_c" 1>&6
! echo "configure:6163: checking for sched_yield in -lposix4" >&5
! ac_lib_var=`echo posix4'_'sched_yield | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lposix4  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 6171 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char sched_yield();
! 
! int main() {
! sched_yield()
! ; return 0; }
! EOF
! if { (eval echo configure:6182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   
! 	    cat >> confdefs.h <<\EOF
  #define HAVE_SCHED_YIELD 1
! EOF
  
  	    THREADLIBS="$THREADLIBS -lposix4"
  	    THREADSPEC="$THREADSPEC -lposix4"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
  fi
--- 11346,11724 ----
        LIBS="$LIBS $THREADLIBS"
        # Some POSIX thread systems don't have pthread_mutexattr_settype.
        # E.g., Solaris.
! 
! 
! for ac_func in pthread_mutexattr_settype pthread_mutexattr_setkind_np
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
  
        # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
        # Solaris 7 the name librt is preferred.
! 
! for ac_func in sched_yield
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
  else
! 
! 	echo "$as_me:$LINENO: checking for sched_yield in -lrt" >&5
! echo $ECHO_N "checking for sched_yield in -lrt... $ECHO_C" >&6
! if test "${ac_cv_lib_rt_sched_yield+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-lrt  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 sched_yield ();
! int
! main ()
! {
! sched_yield ();
!   ;
!   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_rt_sched_yield=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_rt_sched_yield=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_rt_sched_yield" >&5
! echo "${ECHO_T}$ac_cv_lib_rt_sched_yield" >&6
! if test $ac_cv_lib_rt_sched_yield = yes; then
! 
! 	  cat >>confdefs.h <<\_ACEOF
  #define HAVE_SCHED_YIELD 1
! _ACEOF
  
  	  THREADLIBS="$THREADLIBS -lrt"
  	  THREADSPEC="$THREADSPEC -lrt"
  else
  
! 	  echo "$as_me:$LINENO: checking for sched_yield in -lposix4" >&5
! echo $ECHO_N "checking for sched_yield in -lposix4... $ECHO_C" >&6
! if test "${ac_cv_lib_posix4_sched_yield+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-lposix4  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 sched_yield ();
! int
! main ()
! {
! sched_yield ();
!   ;
!   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_posix4_sched_yield=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_posix4_sched_yield=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_posix4_sched_yield" >&5
! echo "${ECHO_T}$ac_cv_lib_posix4_sched_yield" >&6
! if test $ac_cv_lib_posix4_sched_yield = yes; then
! 
! 	    cat >>confdefs.h <<\_ACEOF
  #define HAVE_SCHED_YIELD 1
! _ACEOF
  
  	    THREADLIBS="$THREADLIBS -lposix4"
  	    THREADSPEC="$THREADSPEC -lposix4"
  fi
  
  fi
*************** done
*** 6213,6484 ****
  
        # We can save a little space at runtime if the mutex has m_count
        # or __m_count.  This is a nice hack for Linux.
!       cat > conftest.$ac_ext <<EOF
! #line 6218 "configure"
! #include "confdefs.h"
  #include <pthread.h>
! int main() {
  
            extern pthread_mutex_t *mutex; int q = mutex->m_count;
!         
! ; return 0; }
! EOF
! if { (eval echo configure:6227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define PTHREAD_MUTEX_HAVE_M_COUNT 1
! EOF
  
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   
! 	cat > conftest.$ac_ext <<EOF
! #line 6239 "configure"
! #include "confdefs.h"
  #include <pthread.h>
! int main() {
  
  	    extern pthread_mutex_t *mutex; int q = mutex->__m_count;
! 	  
! ; return 0; }
! EOF
! if { (eval echo configure:6248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define PTHREAD_MUTEX_HAVE___M_COUNT 1
! EOF
  
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
  fi
! rm -f conftest*
  fi
! rm -f conftest*
     fi
  
     # We require a way to get the time.
     time_found=no
!    for ac_func in gettimeofday time ftime
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:6268: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 6273 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:6296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
! 
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_func 1
! EOF
   time_found=yes
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
     if test "$time_found" = no; then
!       { echo "configure: error: no function found to get the time" 1>&2; exit 1; }
     fi
  
!    for ac_func in memmove
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:6327: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 6332 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:6355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
  
     # We require memcpy.
     memcpy_found=no
!    for ac_func in memcpy
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:6385: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 6390 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:6413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
! 
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_func 1
! EOF
   memcpy_found=yes
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
     if test "$memcpy_found" = no; then
!       { echo "configure: error: memcpy is required" 1>&2; exit 1; }
     fi
  
!    echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
! echo "configure:6442: checking for dlopen in -ldl" >&5
! ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-ldl  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 6450 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char dlopen();
! 
! int main() {
! dlopen()
! ; return 0; }
! EOF
! if { (eval echo configure:6461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   
!        cat >> confdefs.h <<\EOF
  #define HAVE_DLOPEN 1
! EOF
  
- else
-   echo "$ac_t""no" 1>&6
  fi
  
  
--- 11730,12254 ----
  
        # We can save a little space at runtime if the mutex has m_count
        # or __m_count.  This is a nice hack for Linux.
!       cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <pthread.h>
! int
! main ()
! {
  
            extern pthread_mutex_t *mutex; int q = mutex->m_count;
! 
!   ;
!   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 PTHREAD_MUTEX_HAVE_M_COUNT 1
! _ACEOF
  
  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 <pthread.h>
! int
! main ()
! {
  
  	    extern pthread_mutex_t *mutex; int q = mutex->__m_count;
! 
!   ;
!   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 PTHREAD_MUTEX_HAVE___M_COUNT 1
! _ACEOF
  
  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
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
     fi
  
     # We require a way to get the time.
     time_found=no
! 
! 
! 
! for ac_func in gettimeofday time ftime
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
   time_found=yes
  fi
  done
  
     if test "$time_found" = no; then
!       { { echo "$as_me:$LINENO: error: no function found to get the time" >&5
! echo "$as_me: error: no function found to get the time" >&2;}
!    { (exit 1); exit 1; }; }
     fi
  
! 
! for ac_func in memmove
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
  
     # We require memcpy.
     memcpy_found=no
! 
! for ac_func in memcpy
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
   memcpy_found=yes
  fi
  done
  
     if test "$memcpy_found" = no; then
!       { { echo "$as_me:$LINENO: error: memcpy is required" >&5
! echo "$as_me: error: memcpy is required" >&2;}
!    { (exit 1); exit 1; }; }
     fi
  
!    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
! echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
! if test "${ac_cv_lib_dl_dlopen+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 dlopen ();
! int
! main ()
! {
! dlopen ();
!   ;
!   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_dl_dlopen=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
! echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
! if test $ac_cv_lib_dl_dlopen = yes; then
! 
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_DLOPEN 1
! _ACEOF
  
  fi
  
  
*************** fi
*** 6501,6600 ****
     #	   if -lsocket doesn't work by itself.
     #--------------------------------------------------------------------
  
!    echo $ac_n "checking for socket libraries""... $ac_c" 1>&6
! echo "configure:6506: checking for socket libraries" >&5
! if eval "test \"`echo '$''{'gcj_cv_lib_sockets'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    gcj_cv_lib_sockets=
       gcj_checkBoth=0
       unset ac_cv_func_connect
!      echo $ac_n "checking for connect""... $ac_c" 1>&6
! echo "configure:6514: checking for connect" >&5
! if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 6519 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char connect(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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() {
  
  /* 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
! connect();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:6542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_connect=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_connect=no"
  fi
! rm -f conftest*
  fi
! 
! if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    gcj_checkSocket=0
  else
!   echo "$ac_t""no" 1>&6
! gcj_checkSocket=1
  fi
  
       if test "$gcj_checkSocket" = 1; then
  	 unset ac_cv_func_connect
! 	 echo $ac_n "checking for main in -lsocket""... $ac_c" 1>&6
! echo "configure:6565: checking for main in -lsocket" >&5
! ac_lib_var=`echo socket'_'main | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lsocket  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 6573 "configure"
! #include "confdefs.h"
  
! int main() {
! main()
! ; return 0; }
! EOF
! if { (eval echo configure:6580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    gcj_cv_lib_sockets="-lsocket"
  else
!   echo "$ac_t""no" 1>&6
! gcj_checkBoth=1
  fi
  
       fi
--- 12271,12454 ----
     #	   if -lsocket doesn't work by itself.
     #--------------------------------------------------------------------
  
!    echo "$as_me:$LINENO: checking for socket libraries" >&5
! echo $ECHO_N "checking for socket libraries... $ECHO_C" >&6
! if test "${gcj_cv_lib_sockets+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    gcj_cv_lib_sockets=
       gcj_checkBoth=0
       unset ac_cv_func_connect
!      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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 = yes; then
    gcj_checkSocket=0
  else
!   gcj_checkSocket=1
  fi
  
       if test "$gcj_checkSocket" = 1; then
  	 unset ac_cv_func_connect
! 	 echo "$as_me:$LINENO: checking for main in -lsocket" >&5
! echo $ECHO_N "checking for main in -lsocket... $ECHO_C" >&6
! if test "${ac_cv_lib_socket_main+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-lsocket  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  
! 
! int
! main ()
! {
! 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_cv_lib_socket_main=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_socket_main=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_main" >&5
! echo "${ECHO_T}$ac_cv_lib_socket_main" >&6
! if test $ac_cv_lib_socket_main = yes; then
    gcj_cv_lib_sockets="-lsocket"
  else
!   gcj_checkBoth=1
  fi
  
       fi
*************** fi
*** 6602,6654 ****
  	 gcj_oldLibs=$LIBS
  	 LIBS="$LIBS -lsocket -lnsl"
  	 unset ac_cv_func_accept
! 	 echo $ac_n "checking for accept""... $ac_c" 1>&6
! echo "configure:6607: checking for accept" >&5
! if eval "test \"`echo '$''{'ac_cv_func_accept'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 6612 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char accept(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char accept();
  
! int main() {
  
  /* 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_accept) || defined (__stub___accept)
  choke me
  #else
! accept();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:6635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_accept=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_accept=no"
  fi
! rm -f conftest*
  fi
! 
! if eval "test \"`echo '$ac_cv_func_'accept`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    gcj_checkNsl=0
  			gcj_cv_lib_sockets="-lsocket -lnsl"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
  	 unset ac_cv_func_accept
--- 12456,12559 ----
  	 gcj_oldLibs=$LIBS
  	 LIBS="$LIBS -lsocket -lnsl"
  	 unset ac_cv_func_accept
! 	 echo "$as_me:$LINENO: checking for accept" >&5
! echo $ECHO_N "checking for accept... $ECHO_C" >&6
! if test "${ac_cv_func_accept+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! /* Define accept to an innocuous variant, in case <limits.h> declares accept.
!    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
! #define accept innocuous_accept
! 
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char accept (); 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 accept
  
+ /* 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 accept ();
  /* 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_accept) || defined (__stub___accept)
  choke me
  #else
! char (*f) () = accept;
! #endif
! #ifdef __cplusplus
! }
  #endif
  
! int
! main ()
! {
! return f != accept;
!   ;
!   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_accept=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_func_accept=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
! echo "$as_me:$LINENO: result: $ac_cv_func_accept" >&5
! echo "${ECHO_T}$ac_cv_func_accept" >&6
! if test $ac_cv_func_accept = yes; then
    gcj_checkNsl=0
  			gcj_cv_lib_sockets="-lsocket -lnsl"
  fi
  
  	 unset ac_cv_func_accept
*************** fi
*** 6657,7659 ****
       unset ac_cv_func_gethostbyname
       gcj_oldLibs=$LIBS
       LIBS="$LIBS $gcj_cv_lib_sockets"
!      echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
! echo "configure:6662: checking for gethostbyname" >&5
! if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 6667 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char gethostbyname(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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() {
  
  /* 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
! gethostbyname();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:6690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_gethostbyname=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_gethostbyname=no"
  fi
! rm -f conftest*
  fi
! 
! if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    :
  else
!   echo "$ac_t""no" 1>&6
! echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6
! echo "configure:6708: checking for main in -lnsl" >&5
! ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lnsl  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 6716 "configure"
! #include "confdefs.h"
  
! int main() {
! main()
! ; return 0; }
! EOF
! if { (eval echo configure:6723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
  fi
  
       unset ac_cv_func_gethostbyname
       LIBS=$gcj_oldLIBS
-    
- fi
  
! echo "$ac_t""$gcj_cv_lib_sockets" 1>&6
     SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
  
     if test "$with_system_zlib" = yes; then
!       echo $ac_n "checking for deflate in -lz""... $ac_c" 1>&6
! echo "configure:6755: checking for deflate in -lz" >&5
! ac_lib_var=`echo z'_'deflate | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lz  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 6763 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char deflate();
! 
! int main() {
! deflate()
! ; return 0; }
! EOF
! if { (eval echo configure:6774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    ZLIBSPEC=-lz
  else
!   echo "$ac_t""no" 1>&6
! ZLIBSPEC=
  fi
  
     fi
  
     # Test for Gtk stuff, if asked for.
     if test "$use_gtk_awt" = yes; then
-       # Check whether --enable-gtktest or --disable-gtktest was given.
- if test "${enable_gtktest+set}" = set; then
-   enableval="$enable_gtktest"
-   :
- else
-   enable_gtktest=yes
- fi
  
  
!   pkg_config_args=gtk+-2.0
!   for module in . 
!   do
!       case "$module" in
!          gthread) 
!              pkg_config_args="$pkg_config_args gthread-2.0"
!          ;;
!       esac
!   done
! 
!   no_gtk=""
! 
!   # Extract the first word of "pkg-config", so it can be a program name with args.
  set dummy pkg-config; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:6823: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   case "$PKG_CONFIG" in
!   /*)
    ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
    ;;
-   ?:/*)			 
-   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a dos path.
-   ;;
    *)
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do 
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
    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 "$ac_t""$PKG_CONFIG" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
- 
-   if test x$PKG_CONFIG != xno ; then
-     if pkg-config --atleast-pkgconfig-version 0.7 ; then
-       :
-     else
-       echo *** pkg-config too old; version 0.7 or better required.
-       no_gtk=yes
-       PKG_CONFIG=no
-     fi
-   else
-     no_gtk=yes
    fi
  
!   min_gtk_version=2.2.0
!   echo $ac_n "checking for GTK+ - version >= $min_gtk_version""... $ac_c" 1>&6
! echo "configure:6871: checking for GTK+ - version >= $min_gtk_version" >&5
! 
!   if test x$PKG_CONFIG != xno ; then
!     ## don't try to run the test against uninstalled libtool libs
!     if $PKG_CONFIG --uninstalled $pkg_config_args; then
! 	  echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
! 	  enable_gtktest=no
!     fi
! 
!     if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then
! 	  :
!     else
! 	  no_gtk=yes
!     fi
!   fi
  
!   if test x"$no_gtk" = x ; then
!     GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
!     GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
!     gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
!            sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
!     gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
!            sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
!     gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
!            sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
!     if test "x$enable_gtktest" = "xyes" ; then
!       ac_save_CFLAGS="$CFLAGS"
!       ac_save_LIBS="$LIBS"
!       CFLAGS="$CFLAGS $GTK_CFLAGS"
!       LIBS="$GTK_LIBS $LIBS"
!       rm -f conf.gtktest
!       if test "$cross_compiling" = yes; then
!   echo $ac_n "cross compiling; assumed OK... $ac_c"
! else
!   cat > conftest.$ac_ext <<EOF
! #line 6906 "configure"
! #include "confdefs.h"
  
! #include <gtk/gtk.h>
! #include <stdio.h>
! #include <stdlib.h>
  
! int 
! main ()
! {
!   int major, minor, micro;
!   char *tmp_version;
  
-   system ("touch conf.gtktest");
  
-   /* HP/UX 9 (%@#!) writes to sscanf strings */
-   tmp_version = g_strdup("$min_gtk_version");
-   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-      printf("%s, bad version string\n", "$min_gtk_version");
-      exit(1);
-    }
  
-   if ((gtk_major_version != $gtk_config_major_version) ||
-       (gtk_minor_version != $gtk_config_minor_version) ||
-       (gtk_micro_version != $gtk_config_micro_version))
-     {
-       printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", 
-              $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
-              gtk_major_version, gtk_minor_version, gtk_micro_version);
-       printf ("*** was found! If pkg-config was correct, then it is best\n");
-       printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
-       printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
-       printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
-       printf("*** required on your system.\n");
-       printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
-       printf("*** to point to the correct configuration files\n");
-     } 
-   else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
- 	   (gtk_minor_version != GTK_MINOR_VERSION) ||
-            (gtk_micro_version != GTK_MICRO_VERSION))
-     {
-       printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
- 	     GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
-       printf("*** library (version %d.%d.%d)\n",
- 	     gtk_major_version, gtk_minor_version, gtk_micro_version);
-     }
-   else
-     {
-       if ((gtk_major_version > major) ||
-         ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
-         ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
-       {
-         return 0;
-        }
       else
!       {
!         printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
!                gtk_major_version, gtk_minor_version, gtk_micro_version);
!         printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
! 	       major, minor, micro);
!         printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
!         printf("***\n");
!         printf("*** If you have already installed a sufficiently new version, this error\n");
!         printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
!         printf("*** being found. The easiest way to fix this is to remove the old version\n");
!         printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
!         printf("*** correct copy of pkg-config. (In this case, you will have to\n");
!         printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
!         printf("*** so that the correct libraries are found at run-time))\n");
!       }
!     }
!   return 1;
! }
! 
! EOF
! if { (eval echo configure:6981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
!   :
! else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -fr conftest*
!   no_gtk=yes
! fi
! rm -fr conftest*
! fi
! 
!        CFLAGS="$ac_save_CFLAGS"
!        LIBS="$ac_save_LIBS"
       fi
    fi
!   if test "x$no_gtk" = x ; then
!      echo "$ac_t""yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" 1>&6
!      :     
    else
!      echo "$ac_t""no" 1>&6
!      if test "$PKG_CONFIG" = "no" ; then
!        echo "*** A new enough version of pkg-config was not found."
!        echo "*** See http://pkgconfig.sourceforge.net"
!      else
!        if test -f conf.gtktest ; then
!         :
!        else
!           echo "*** Could not run GTK+ test program, checking why..."
! 	  ac_save_CFLAGS="$CFLAGS"
! 	  ac_save_LIBS="$LIBS"
!           CFLAGS="$CFLAGS $GTK_CFLAGS"
!           LIBS="$LIBS $GTK_LIBS"
!           cat > conftest.$ac_ext <<EOF
! #line 7015 "configure"
! #include "confdefs.h"
  
- #include <gtk/gtk.h>
- #include <stdio.h>
  
- int main() {
-  return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); 
- ; return 0; }
- EOF
- if { (eval echo configure:7025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-    echo "*** The test program compiled, but did not run. This usually means"
-           echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
-           echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
-           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-           echo "*** is required on your system"
- 	  echo "***"
-           echo "*** If you have an old version installed, it is best to remove it, although"
-           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" 
- else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-    echo "*** The test program failed to compile or link. See the file config.log for the"
-           echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."
- fi
- rm -f conftest*
-           CFLAGS="$ac_save_CFLAGS"
-           LIBS="$ac_save_LIBS"
-        fi
-      fi
-      GTK_CFLAGS=""
-      GTK_LIBS=""
-      exit 1
-   fi
-   
-   
-   rm -f conf.gtktest
  
-       # Check whether --enable-glibtest or --disable-glibtest was given.
- if test "${enable_glibtest+set}" = set; then
-   enableval="$enable_glibtest"
-   :
- else
-   enable_glibtest=yes
- fi
  
  
!   pkg_config_args=glib-2.0
!   for module in . gthread
!   do
!       case "$module" in
!          gmodule) 
!              pkg_config_args="$pkg_config_args gmodule-2.0"
!          ;;
!          gobject) 
!              pkg_config_args="$pkg_config_args gobject-2.0"
!          ;;
!          gthread) 
!              pkg_config_args="$pkg_config_args gthread-2.0"
!          ;;
!       esac
!   done
  
!   # Extract the first word of "pkg-config", so it can be a program name with args.
  set dummy pkg-config; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:7084: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   case "$PKG_CONFIG" in
!   /*)
    ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
    ;;
-   ?:/*)			 
-   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a dos path.
-   ;;
    *)
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do 
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
    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 "$ac_t""$PKG_CONFIG" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
- 
-   no_glib=""
- 
-   if test x$PKG_CONFIG != xno ; then
-     if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
-       :
-     else
-       echo *** pkg-config too old; version 0.7 or better required.
-       no_glib=yes
-       PKG_CONFIG=no
-     fi
-   else
-     no_glib=yes
-   fi
- 
-   min_glib_version=2.2.0
-   echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6
- echo "configure:7134: checking for GLIB - version >= $min_glib_version" >&5
- 
-   if test x$PKG_CONFIG != xno ; then
-     ## don't try to run the test against uninstalled libtool libs
-     if $PKG_CONFIG --uninstalled $pkg_config_args; then
- 	  echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
- 	  enable_glibtest=no
-     fi
- 
-     if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
- 	  :
-     else
- 	  no_glib=yes
-     fi
    fi
  
!   if test x"$no_glib" = x ; then
!     GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
!     GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
!     GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
  
!     GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
!     GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
!     glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
!            sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
!     glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
!            sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
!     glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
!            sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
!     if test "x$enable_glibtest" = "xyes" ; then
!       ac_save_CFLAGS="$CFLAGS"
!       ac_save_LIBS="$LIBS"
!       CFLAGS="$CFLAGS $GLIB_CFLAGS"
!       LIBS="$GLIB_LIBS $LIBS"
!       rm -f conf.glibtest
!       if test "$cross_compiling" = yes; then
!   echo $ac_n "cross compiling; assumed OK... $ac_c"
! else
!   cat > conftest.$ac_ext <<EOF
! #line 7173 "configure"
! #include "confdefs.h"
  
! #include <glib.h>
! #include <stdio.h>
! #include <stdlib.h>
  
! int 
! main ()
! {
!   int major, minor, micro;
!   char *tmp_version;
  
-   system ("touch conf.glibtest");
  
-   /* HP/UX 9 (%@#!) writes to sscanf strings */
-   tmp_version = g_strdup("$min_glib_version");
-   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-      printf("%s, bad version string\n", "$min_glib_version");
-      exit(1);
-    }
  
-   if ((glib_major_version != $glib_config_major_version) ||
-       (glib_minor_version != $glib_config_minor_version) ||
-       (glib_micro_version != $glib_config_micro_version))
-     {
-       printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
-              $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
-              glib_major_version, glib_minor_version, glib_micro_version);
-       printf ("*** was found! If pkg-config was correct, then it is best\n");
-       printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
-       printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
-       printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
-       printf("*** required on your system.\n");
-       printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
-       printf("*** to point to the correct configuration files\n");
-     } 
-   else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
- 	   (glib_minor_version != GLIB_MINOR_VERSION) ||
-            (glib_micro_version != GLIB_MICRO_VERSION))
-     {
-       printf("*** GLIB header files (version %d.%d.%d) do not match\n",
- 	     GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
-       printf("*** library (version %d.%d.%d)\n",
- 	     glib_major_version, glib_minor_version, glib_micro_version);
-     }
-   else
-     {
-       if ((glib_major_version > major) ||
-         ((glib_major_version == major) && (glib_minor_version > minor)) ||
-         ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
-       {
-         return 0;
-        }
       else
!       {
!         printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
!                glib_major_version, glib_minor_version, glib_micro_version);
!         printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
! 	       major, minor, micro);
!         printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
!         printf("***\n");
!         printf("*** If you have already installed a sufficiently new version, this error\n");
!         printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
!         printf("*** being found. The easiest way to fix this is to remove the old version\n");
!         printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
!         printf("*** correct copy of pkg-config. (In this case, you will have to\n");
!         printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
!         printf("*** so that the correct libraries are found at run-time))\n");
!       }
!     }
!   return 1;
! }
! 
! EOF
! if { (eval echo configure:7248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
!   :
! else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -fr conftest*
!   no_glib=yes
! fi
! rm -fr conftest*
! fi
! 
!        CFLAGS="$ac_save_CFLAGS"
!        LIBS="$ac_save_LIBS"
       fi
    fi
-   if test "x$no_glib" = x ; then
-      echo "$ac_t""yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" 1>&6
-      :     
-   else
-      echo "$ac_t""no" 1>&6
-      if test "$PKG_CONFIG" = "no" ; then
-        echo "*** A new enough version of pkg-config was not found."
-        echo "*** See http://www.freedesktop.org/software/pkgconfig/"
-      else
-        if test -f conf.glibtest ; then
-         :
-        else
-           echo "*** Could not run GLIB test program, checking why..."
-           ac_save_CFLAGS="$CFLAGS"
-           ac_save_LIBS="$LIBS"
-           CFLAGS="$CFLAGS $GLIB_CFLAGS"
-           LIBS="$LIBS $GLIB_LIBS"
-           cat > conftest.$ac_ext <<EOF
- #line 7282 "configure"
- #include "confdefs.h"
  
! #include <glib.h>
! #include <stdio.h>
! 
! int main() {
!  return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); 
! ; return 0; }
! EOF
! if { (eval echo configure:7292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!    echo "*** The test program compiled, but did not run. This usually means"
!           echo "*** that the run-time linker is not finding GLIB or finding the wrong"
!           echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
!           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
!           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
!           echo "*** is required on your system"
! 	  echo "***"
!           echo "*** If you have an old version installed, it is best to remove it, although"
!           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" 
! else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!    echo "*** The test program failed to compile or link. See the file config.log for the"
!           echo "*** exact error that occured. This usually means GLIB is incorrectly installed."
! fi
! rm -f conftest*
!           CFLAGS="$ac_save_CFLAGS"
!           LIBS="$ac_save_LIBS"
!        fi
!      fi
!      GLIB_CFLAGS=""
!      GLIB_LIBS=""
!      GLIB_GENMARSHAL=""
!      GOBJECT_QUERY=""
!      GLIB_MKENUMS=""
!      exit 1
    fi
-   
-   
-   
-   
-   
-   rm -f conf.glibtest
  
-             enable_libarttest=no
-       # Check whether --with-libart-prefix or --without-libart-prefix was given.
- if test "${with_libart_prefix+set}" = set; then
-   withval="$with_libart_prefix"
-   libart_prefix="$withval"
- else
-   libart_prefix=""
- fi
  
- # Check whether --with-libart-exec-prefix or --without-libart-exec-prefix was given.
- if test "${with_libart_exec_prefix+set}" = set; then
-   withval="$with_libart_exec_prefix"
-   libart_exec_prefix="$withval"
- else
-   libart_exec_prefix=""
- fi
  
- # Check whether --enable-libarttest or --disable-libarttest was given.
- if test "${enable_libarttest+set}" = set; then
-   enableval="$enable_libarttest"
-   :
- else
-   enable_libarttest=yes
- fi
  
  
!   if test x$libart_exec_prefix != x ; then
!      libart_args="$libart_args --exec-prefix=$libart_exec_prefix"
!      if test x${LIBART_CONFIG+set} != xset ; then
!         LIBART_CONFIG=$libart_exec_prefix/bin/libart-config
!      fi
!   fi
!   if test x$libart_prefix != x ; then
!      libart_args="$libart_args --prefix=$libart_prefix"
!      if test x${LIBART_CONFIG+set} != xset ; then
!         LIBART_CONFIG=$libart_prefix/bin/libart-config
!      fi
!   fi
  
!   # Extract the first word of "libart2-config", so it can be a program name with args.
! set dummy libart2-config; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:7371: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_path_LIBART_CONFIG'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   case "$LIBART_CONFIG" in
!   /*)
!   ac_cv_path_LIBART_CONFIG="$LIBART_CONFIG" # Let the user override the test with a path.
!   ;;
!   ?:/*)			 
!   ac_cv_path_LIBART_CONFIG="$LIBART_CONFIG" # Let the user override the test with a dos path.
    ;;
    *)
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do 
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_path_LIBART_CONFIG="$ac_dir/$ac_word"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_path_LIBART_CONFIG" && ac_cv_path_LIBART_CONFIG="no"
!   ;;
! esac
! fi
! LIBART_CONFIG="$ac_cv_path_LIBART_CONFIG"
! if test -n "$LIBART_CONFIG"; then
!   echo "$ac_t""$LIBART_CONFIG" 1>&6
! else
!   echo "$ac_t""no" 1>&6
! fi
  
!   if test "$LIBART_CONFIG" = "no" ; then
!     # Extract the first word of "libart-config", so it can be a program name with args.
! set dummy libart-config; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:7408: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_path_LIBART_CONFIG'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   case "$LIBART_CONFIG" in
!   /*)
!   ac_cv_path_LIBART_CONFIG="$LIBART_CONFIG" # Let the user override the test with a path.
!   ;;
!   ?:/*)			 
!   ac_cv_path_LIBART_CONFIG="$LIBART_CONFIG" # Let the user override the test with a dos path.
!   ;;
!   *)
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do 
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_path_LIBART_CONFIG="$ac_dir/$ac_word"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_path_LIBART_CONFIG" && ac_cv_path_LIBART_CONFIG="no"
    ;;
  esac
  fi
! LIBART_CONFIG="$ac_cv_path_LIBART_CONFIG"
! if test -n "$LIBART_CONFIG"; then
!   echo "$ac_t""$LIBART_CONFIG" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
    fi
!   min_libart_version=2.1.0
!   echo $ac_n "checking for LIBART - version >= $min_libart_version""... $ac_c" 1>&6
! echo "configure:7444: checking for LIBART - version >= $min_libart_version" >&5
!   no_libart=""
!   if test "$LIBART_CONFIG" = "no" ; then
!     no_libart=yes
    else
!     LIBART_CFLAGS=`$LIBART_CONFIG $libartconf_args --cflags`
!     LIBART_LIBS=`$LIBART_CONFIG $libartconf_args --libs`
  
!     libart_major_version=`$LIBART_CONFIG $libart_args --version | \
!            sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
!     libart_minor_version=`$LIBART_CONFIG $libart_args --version | \
!            sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
!     libart_micro_version=`$LIBART_CONFIG $libart_config_args --version | \
!            sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
!     if test "x$enable_libarttest" = "xyes" ; then
!       ac_save_CFLAGS="$CFLAGS"
!       ac_save_LIBS="$LIBS"
!       CFLAGS="$CFLAGS $LIBART_CFLAGS"
!       LIBS="$LIBS $LIBART_LIBS"
!       rm -f conf.libarttest
!       if test "$cross_compiling" = yes; then
!   echo $ac_n "cross compiling; assumed OK... $ac_c"
! else
!   cat > conftest.$ac_ext <<EOF
! #line 7468 "configure"
! #include "confdefs.h"
  
! #include <stdio.h>
! #include <stdlib.h>
! #include <string.h>
! #include <libart_lgpl/libart.h>
  
! char*
! my_strdup (char *str)
! {
!   char *new_str;
!   
!   if (str)
!     {
!       new_str = malloc ((strlen (str) + 1) * sizeof(char));
!       strcpy (new_str, str);
!     }
!   else
!     new_str = NULL;
!   
!   return new_str;
! }
  
- int main ()
- {
-   int major, minor, micro;
-   char *tmp_version;
  
-   system ("touch conf.libarttest");
  
!   /* HP/UX 9 (%@#!) writes to sscanf strings */
!   tmp_version = my_strdup("$min_libart_version");
!   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
!      printf("%s, bad version string\n", "$min_libart_version");
!      exit(1);
!    }
  
!    if (($libart_major_version > major) ||
!       (($libart_major_version == major) && ($libart_minor_version > minor)) ||
!       (($libart_major_version == major) && ($libart_minor_version == minor) && ($libart_micro_version >= micro)))
!     {
!       return 0;
!     }
    else
!     {
!       printf("\n*** 'libart-config --version' returned %d.%d.%d, but the minimum version\n", $libart_major_version, $libart_minor_version, $libart_micro_version);
!       printf("*** of LIBART required is %d.%d.%d. If libart-config is correct, then it is\n", major, minor, micro);
!       printf("*** best to upgrade to the required version.\n");
!       printf("*** If libart-config was wrong, set the environment variable LIBART_CONFIG\n");
!       printf("*** to point to the correct copy of libart-config, and remove the file\n");
!       printf("*** config.cache before re-running configure\n");
!       return 1;
!     }
! }
  
  
! EOF
! if { (eval echo configure:7526: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
!   :
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -fr conftest*
!   no_libart=yes
! fi
! rm -fr conftest*
  fi
  
!        CFLAGS="$ac_save_CFLAGS"
!        LIBS="$ac_save_LIBS"
!      fi
!   fi
!   if test "x$no_libart" = x ; then
!      echo "$ac_t""yes" 1>&6
!      :     
!   else
!      echo "$ac_t""no" 1>&6
!      if test "$LIBART_CONFIG" = "no" ; then
!        echo "*** The libart-config script installed by LIBART could not be found"
!        echo "*** If LIBART was installed in PREFIX, make sure PREFIX/bin is in"
!        echo "*** your path, or set the LIBART_CONFIG environment variable to the"
!        echo "*** full path to libart-config."
!      else
!        if test -f conf.libarttest ; then
!         :
!        else
!           echo "*** Could not run LIBART test program, checking why..."
!           CFLAGS="$CFLAGS $LIBART_CFLAGS"
!           LIBS="$LIBS $LIBART_LIBS"
!           cat > conftest.$ac_ext <<EOF
! #line 7560 "configure"
! #include "confdefs.h"
! 
! #include <stdio.h>
! #include <libart_lgpl/libart.h>
  
! int main() {
!  return 0; 
! ; return 0; }
! EOF
! if { (eval echo configure:7570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!    echo "*** The test program compiled, but did not run. This usually means"
!           echo "*** that the run-time linker is not finding LIBART or finding the wrong"
!           echo "*** version of LIBART. If it is not finding LIBART, you'll need to set your"
!           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
!           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
!           echo "*** is required on your system"
! 	  echo "***"
!           echo "*** If you have an old version installed, it is best to remove it, although"
!           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!    echo "*** The test program failed to compile or link. See the file config.log for the"
!           echo "*** exact error that occured. This usually means LIBART was incorrectly installed"
!           echo "*** or that you have moved LIBART since it was installed. In the latter case, you"
!           echo "*** may want to edit the libart-config script: $LIBART_CONFIG" 
  fi
- rm -f conftest*
-           CFLAGS="$ac_save_CFLAGS"
-           LIBS="$ac_save_LIBS"
-        fi
-      fi
-      LIBART_CFLAGS=""
-      LIBART_LIBS=""
-      exit 1
-   fi
-   
-   
-   rm -f conf.libarttest
  
     fi
  
     # On Solaris, and maybe other architectures, the Boehm collector
     # requires -ldl.
     if test "$GC" = boehm; then
!       echo $ac_n "checking for main in -ldl""... $ac_c" 1>&6
! echo "configure:7609: checking for main in -ldl" >&5
! ac_lib_var=`echo dl'_'main | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-ldl  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 7617 "configure"
! #include "confdefs.h"
  
! int main() {
! main()
! ; return 0; }
! EOF
! if { (eval echo configure:7624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    SYSTEMSPEC="$SYSTEMSPEC -ldl"
- else
-   echo "$ac_t""no" 1>&6
  fi
  
     fi
  fi
  
  if test -z "${with_multisubdir}"; then
     builddotdot=.
  else
- 
     builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
- 
  fi
  
  # Which gcj do we use?
  which_gcj=default
! built_gcc_dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
  if test -n "${with_cross_host}"; then
    # We are being configured with a cross compiler. We can't
    # use ac_exeext, because that is for the target platform.
--- 12562,13299 ----
       unset ac_cv_func_gethostbyname
       gcj_oldLibs=$LIBS
       LIBS="$LIBS $gcj_cv_lib_sockets"
!      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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 = yes; then
    :
  else
!   echo "$as_me:$LINENO: checking for main in -lnsl" >&5
! echo $ECHO_N "checking for main in -lnsl... $ECHO_C" >&6
! if test "${ac_cv_lib_nsl_main+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-lnsl  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  
! 
! int
! main ()
! {
! 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_cv_lib_nsl_main=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_nsl_main=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_main" >&5
! echo "${ECHO_T}$ac_cv_lib_nsl_main" >&6
! if test $ac_cv_lib_nsl_main = yes; then
    gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"
  fi
  
  fi
  
       unset ac_cv_func_gethostbyname
       LIBS=$gcj_oldLIBS
  
! fi
! echo "$as_me:$LINENO: result: $gcj_cv_lib_sockets" >&5
! echo "${ECHO_T}$gcj_cv_lib_sockets" >&6
     SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
  
     if test "$with_system_zlib" = yes; then
!       echo "$as_me:$LINENO: checking for deflate in -lz" >&5
! echo $ECHO_N "checking for deflate in -lz... $ECHO_C" >&6
! if test "${ac_cv_lib_z_deflate+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-lz  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 deflate ();
! int
! main ()
! {
! deflate ();
!   ;
!   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_z_deflate=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_z_deflate=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_z_deflate" >&5
! echo "${ECHO_T}$ac_cv_lib_z_deflate" >&6
! if test $ac_cv_lib_z_deflate = yes; then
    ZLIBSPEC=-lz
  else
!   ZLIBSPEC=
  fi
  
     fi
  
     # Test for Gtk stuff, if asked for.
     if test "$use_gtk_awt" = yes; 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 gtk+-2.0 >= 2.4" >&5
! echo $ECHO_N "checking for gtk+-2.0 >= 2.4... $ECHO_C" >&6
  
!         if $PKG_CONFIG --exists "gtk+-2.0 >= 2.4" ; 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"`
!             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"`
!             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"`
!             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) 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) 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 glib-2.0 >= 2.4 gthread-2.0 >= 2.4" >&5
! echo $ECHO_N "checking for glib-2.0 >= 2.4 gthread-2.0 >= 2.4... $ECHO_C" >&6
  
!         if $PKG_CONFIG --exists "glib-2.0 >= 2.4 gthread-2.0 >= 2.4" ; then
!             echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
!             succeeded=yes
  
!             echo "$as_me:$LINENO: checking GLIB_CFLAGS" >&5
! echo $ECHO_N "checking GLIB_CFLAGS... $ECHO_C" >&6
!             GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.4 gthread-2.0 >= 2.4"`
!             echo "$as_me:$LINENO: result: $GLIB_CFLAGS" >&5
! echo "${ECHO_T}$GLIB_CFLAGS" >&6
  
!             echo "$as_me:$LINENO: checking GLIB_LIBS" >&5
! echo $ECHO_N "checking GLIB_LIBS... $ECHO_C" >&6
!             GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.4 gthread-2.0 >= 2.4"`
!             echo "$as_me:$LINENO: result: $GLIB_LIBS" >&5
! echo "${ECHO_T}$GLIB_LIBS" >&6
!         else
!             GLIB_CFLAGS=""
!             GLIB_LIBS=""
!             ## If we have a custom action on failure, don't print errors, but
!             ## do set a variable so people can do so.
!             GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.4 gthread-2.0 >= 2.4"`
!             echo $GLIB_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 (glib-2.0 >= 2.4 gthread-2.0 >= 2.4) 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 (glib-2.0 >= 2.4 gthread-2.0 >= 2.4) 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 libart-2.0 >= 2.1" >&5
! echo $ECHO_N "checking for libart-2.0 >= 2.1... $ECHO_C" >&6
  
!         if $PKG_CONFIG --exists "libart-2.0 >= 2.1" ; then
!             echo "$as_me:$LINENO: result: yes" >&5
! echo "${ECHO_T}yes" >&6
!             succeeded=yes
  
!             echo "$as_me:$LINENO: checking LIBART_CFLAGS" >&5
! echo $ECHO_N "checking LIBART_CFLAGS... $ECHO_C" >&6
!             LIBART_CFLAGS=`$PKG_CONFIG --cflags "libart-2.0 >= 2.1"`
!             echo "$as_me:$LINENO: result: $LIBART_CFLAGS" >&5
! echo "${ECHO_T}$LIBART_CFLAGS" >&6
  
!             echo "$as_me:$LINENO: checking LIBART_LIBS" >&5
! echo $ECHO_N "checking LIBART_LIBS... $ECHO_C" >&6
!             LIBART_LIBS=`$PKG_CONFIG --libs "libart-2.0 >= 2.1"`
!             echo "$as_me:$LINENO: result: $LIBART_LIBS" >&5
! echo "${ECHO_T}$LIBART_LIBS" >&6
!         else
!             LIBART_CFLAGS=""
!             LIBART_LIBS=""
!             ## If we have a custom action on failure, don't print errors, but
!             ## do set a variable so people can do so.
!             LIBART_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libart-2.0 >= 2.1"`
!             echo $LIBART_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 (libart-2.0 >= 2.1) 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 (libart-2.0 >= 2.1) 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
  
  
! 
! 
!       # We require the XTest Extension to support java.awt.Robot.
!       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"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
  fi
+ 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 by java.awt.Robot" >&5
! echo "$as_me: error: libXtst not found, required by java.awt.Robot" >&2;}
!    { (exit 1); exit 1; }; }
  fi
  
     fi
  
     # On Solaris, and maybe other architectures, the Boehm collector
     # requires -ldl.
     if test "$GC" = boehm; then
!       echo "$as_me:$LINENO: checking for main in -ldl" >&5
! echo $ECHO_N "checking for main in -ldl... $ECHO_C" >&6
! if test "${ac_cv_lib_dl_main+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  
! 
! int
! main ()
! {
! 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_cv_lib_dl_main=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_dl_main=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_dl_main" >&5
! echo "${ECHO_T}$ac_cv_lib_dl_main" >&6
! if test $ac_cv_lib_dl_main = yes; then
    SYSTEMSPEC="$SYSTEMSPEC -ldl"
  fi
  
     fi
  fi
  
+ 
+ if test "$supply_backtrace" = yes; then
+   SUPPLY_BACKTRACE_TRUE=
+   SUPPLY_BACKTRACE_FALSE='#'
+ else
+   SUPPLY_BACKTRACE_TRUE='#'
+   SUPPLY_BACKTRACE_FALSE=
+ fi
+ 
+ 
  if test -z "${with_multisubdir}"; then
     builddotdot=.
  else
     builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
  fi
  
+ NATIVE=yes
+ 
  # Which gcj do we use?
  which_gcj=default
! built_gcc_dir="`cd ${builddotdot}/../../${host_subdir}/gcc && ${PWDCMD-pwd}`"
  if test -n "${with_cross_host}"; then
    # We are being configured with a cross compiler. We can't
    # use ac_exeext, because that is for the target platform.
*************** if test -n "${with_cross_host}"; then
*** 7665,7671 ****
       ;;
    esac
    if test -x "${built_gcc_dir}/gcj${cross_host_exeext}"; then
!      if test x"$build_alias" = x"$with_cross_host"; then
          # Ordinary cross (host!=target and host=build)
          which_gcj=built
       else
--- 13305,13311 ----
       ;;
    esac
    if test -x "${built_gcc_dir}/gcj${cross_host_exeext}"; then
!      if test x"$build_noncanonical" = x"$with_cross_host"; then
          # Ordinary cross (host!=target and host=build)
          which_gcj=built
       else
*************** fi
*** 7692,7721 ****
  case "${which_gcj}" in
     built)
        GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/"
     ;;
     cross)
-       # See the comment in Makefile.am about CANADIAN being a misnomer
-       CANADIAN=yes
-       NULL_TARGET=no
        if test "x${with_newlib}" = "xyes"; then
           # FIXME (comment): Why is this needed?
           GCC_UNWIND_INCLUDE=
!          GCJ="${target_alias}-gcj"
        else
!          GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/"
        fi
     ;;
     path)
-       # See the comment in Makefile.am about CANADIAN being a misnomer
-       CANADIAN=yes
-       NULL_TARGET=yes
        GCJ="gcj -B`${PWDCMD-pwd}`/"
     ;;
  esac
  
  # Create it, so that compile/link tests don't fail
  test -f libgcj.spec || touch libgcj.spec
  
  # We must search the source tree for java.lang, since we still don't
  # have libgcj.jar nor java/lang/*.class
  GCJ_SAVE_CPPFLAGS=$CPPFLAGS
--- 13332,13373 ----
  case "${which_gcj}" in
     built)
        GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/"
+       GCJH='$(top_builddir)/$(MULTIBUILDTOP)../../$(host_subdir)/gcc/gcjh'
+       ZIP='$(top_builddir)/$(MULTIBUILDTOP)../../$(host_subdir)/fastjar/fastjar'
     ;;
     cross)
        if test "x${with_newlib}" = "xyes"; then
           # FIXME (comment): Why is this needed?
           GCC_UNWIND_INCLUDE=
!          GCJ="${target_noncanonical}-gcj"
        else
!          GCJ="${target_noncanonical}-gcj -B`${PWDCMD-pwd}`/"
        fi
+       ZIP='$(target_noncanonical)-fastjar'
+       GCJH='$(target_noncanonical)-gcjh'
     ;;
     path)
        GCJ="gcj -B`${PWDCMD-pwd}`/"
+       ## In this case, gcj is found outside the build tree.  However, zip is
+       ## found in the build tree.
+       ZIP='$(top_builddir)/$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/fastjar'
+       GCJH=gcjh
     ;;
  esac
  
+ 
+ 
+ 
  # Create it, so that compile/link tests don't fail
  test -f libgcj.spec || touch libgcj.spec
  
+ # Use a semicolon as CLASSPATH separator for MinGW, otherwise a colon.
+ case $build in
+     *-mingw32) CLASSPATH_SEPARATOR=';' ;;
+     *)         CLASSPATH_SEPARATOR=':' ;;
+ esac
+ 
+ 
  # We must search the source tree for java.lang, since we still don't
  # have libgcj.jar nor java/lang/*.class
  GCJ_SAVE_CPPFLAGS=$CPPFLAGS
*************** if test ! -f gnu/classpath/Configuration
*** 7734,7877 ****
    # but we add /dev/null to the input list so that grep will print the
    # filename of Configuration.java in case it finds any matches.
    if grep @ gnu/classpath/Configuration.java /dev/null; then
!     { echo "configure: error: configure.in is missing the substitutions above" 1>&2; exit 1; }
    fi
  fi
  
! # Extract the first word of "${ac_tool_prefix}gcj", so it can be a program name with args.
  set dummy ${ac_tool_prefix}gcj; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:7745: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_GCJ'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$GCJ"; then
    ac_cv_prog_GCJ="$GCJ" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_GCJ="${ac_tool_prefix}gcj"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! GCJ="$ac_cv_prog_GCJ"
  if test -n "$GCJ"; then
!   echo "$ac_t""$GCJ" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_GCJ"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "gcj", so it can be a program name with args.
  set dummy gcj; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:7777: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_GCJ'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$GCJ"; then
!   ac_cv_prog_GCJ="$GCJ" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_GCJ="gcj"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_GCJ" && ac_cv_prog_GCJ="no"
  fi
  fi
! GCJ="$ac_cv_prog_GCJ"
! if test -n "$GCJ"; then
!   echo "$ac_t""$GCJ" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   GCJ="no"
! fi
  fi
  
    test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-   
- 
- 
- LIBTOOL_DEPS=$LIBTOOL_DEPS" $ac_aux_dir/ltcf-gcj.sh"
- lt_save_CC="$CC"
- lt_save_CFLAGS="$CFLAGS"
- AR="$AR" LTCC="$CC" CC="$GCJ" CFLAGS="$GCJFLAGS" 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=GCJ $ac_aux_dir/ltcf-gcj.sh $host \
- || { echo "configure: error: libtool tag configuration failed" 1>&2; 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
  
  
  
  
  CPPFLAGS=$GCJ_SAVE_CPPFLAGS
  
! echo $ac_n "checking size of void *""... $ac_c" 1>&6
! echo "configure:7839: checking size of void *" >&5
! if eval "test \"`echo '$''{'ac_cv_sizeof_void_p'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    for ac_size in 4 8 1 2 16 12  ; do # List sizes in rough order of prevalence.
!   cat > conftest.$ac_ext <<EOF
! #line 7845 "configure"
! #include "confdefs.h"
  #include "confdefs.h"
  #include <sys/types.h>
  
  
! int main() {
  switch (0) case 0: case (sizeof (void *) == $ac_size):;
! ; return 0; }
! EOF
! if { (eval echo configure:7855: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    ac_cv_sizeof_void_p=$ac_size
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
  fi
! rm -f conftest*
    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 "configure: error: cannot determine a size for void *" 1>&2; exit 1; }
  fi
! echo "$ac_t""$ac_cv_sizeof_void_p" 1>&6
! cat >> confdefs.h <<EOF
  #define SIZEOF_VOID_P $ac_cv_sizeof_void_p
  EOF
  
  
  
  ZLIBS=
--- 13386,13765 ----
    # but we add /dev/null to the input list so that grep will print the
    # filename of Configuration.java in case it finds any matches.
    if grep @ gnu/classpath/Configuration.java /dev/null; then
!     { { echo "$as_me:$LINENO: error: configure.ac is missing the substitutions above" >&5
! echo "$as_me: error: configure.ac is missing the substitutions above" >&2;}
!    { (exit 1); exit 1; }; }
    fi
  fi
  
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}gcj", so it can be a program name with args.
  set dummy ${ac_tool_prefix}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_prog_GCJ+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$GCJ"; then
    ac_cv_prog_GCJ="$GCJ" # 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_GCJ="${ac_tool_prefix}gcj"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! GCJ=$ac_cv_prog_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 -z "$ac_cv_prog_GCJ"; then
!   ac_ct_GCJ=$GCJ
    # 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_prog_ac_ct_GCJ+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test -n "$ac_ct_GCJ"; then
!   ac_cv_prog_ac_ct_GCJ="$ac_ct_GCJ" # 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_GCJ="gcj"
!     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_GCJ" && ac_cv_prog_ac_ct_GCJ="no"
  fi
  fi
! ac_ct_GCJ=$ac_cv_prog_ac_ct_GCJ
! if test -n "$ac_ct_GCJ"; then
!   echo "$as_me:$LINENO: result: $ac_ct_GCJ" >&5
! echo "${ECHO_T}$ac_ct_GCJ" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
+   GCJ=$ac_ct_GCJ
  else
!   GCJ="$ac_cv_prog_GCJ"
  fi
  
    test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
  
  
  
  
  CPPFLAGS=$GCJ_SAVE_CPPFLAGS
  
! 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
  
  
  ZLIBS=
*************** fi
*** 7896,7920 ****
  
  
  
! if test "$CANADIAN" = yes; then
!   CANADIAN_TRUE=
!   CANADIAN_FALSE='#'
! else
!   CANADIAN_TRUE='#'
!   CANADIAN_FALSE=
! fi
! 
! 
! if test "$NULL_TARGET" = yes; then
!   NULL_TARGET_TRUE=
!   NULL_TARGET_FALSE='#'
! else
!   NULL_TARGET_TRUE='#'
!   NULL_TARGET_FALSE=
! fi
! 
! 
! if test "$NATIVE" = yes || test "$NULL_TARGET" = yes; then
    NATIVE_TRUE=
    NATIVE_FALSE='#'
  else
--- 13784,13790 ----
  
  
  
! if test "$NATIVE" = yes; then
    NATIVE_TRUE=
    NATIVE_FALSE='#'
  else
*************** else
*** 7923,7928 ****
--- 13793,13799 ----
  fi
  
  
+ 
  if test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes; then
    NEEDS_DATA_START_TRUE=
    NEEDS_DATA_START_FALSE='#'
*************** else
*** 7932,8280 ****
  fi
  
  
! if test -n "$with_cross_host" &&
!    test x"$with_cross_host" != x"no"; then
!   toolexecdir='$(exec_prefix)/$(target_alias)'
!   toolexecmainlibdir='$(toolexecdir)/lib'
! else
!   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
!   toolexecmainlibdir='$(libdir)'
! fi
! multi_os_directory=`$CC -print-multi-os-directory`
! case $multi_os_directory in
!   .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
!   *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
  esac
  
  
  
  
  # Determine gcj version number.
- 
  gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
- 
  GCJVERSION=$gcjversion
  
! cat >> confdefs.h <<EOF
  #define GCJVERSION "$GCJVERSION"
! EOF
  
  
! for ac_hdr in unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/filio.h sys/stat.h sys/select.h sys/socket.h netinet/in.h arpa/inet.h netdb.h net/if.h pwd.h sys/config.h stdint.h langinfo.h locale.h
  do
! ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:7968: checking for $ac_hdr" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 7973 "configure"
! #include "confdefs.h"
! #include <$ac_hdr>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:7978: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
! rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_hdr 1
! EOF
!  
  else
!   echo "$ac_t""no" 1>&6
  fi
  done
  
! for ac_hdr in dirent.h
  do
! ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:8008: checking for $ac_hdr" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8013 "configure"
! #include "confdefs.h"
! #include <$ac_hdr>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:8018: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
! rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_hdr 1
! EOF
!  
  else
!   echo "$ac_t""no" 1>&6
  fi
! done
  
! for ac_hdr in inttypes.h
! do
! ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:8048: checking for $ac_hdr" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   cat > conftest.$ac_ext <<EOF
! #line 8053 "configure"
! #include "confdefs.h"
! #include <$ac_hdr>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:8058: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
! rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_hdr 1
! EOF
!  
!     cat >> confdefs.h <<\EOF
  #define HAVE_INTTYPES_H 1
! EOF
  
!     cat >> confdefs.h <<\EOF
  #define JV_HAVE_INTTYPES_H 1
! EOF
  
  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
! echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
! echo "configure:8094: checking for sys/wait.h that is POSIX.1 compatible" >&5
! if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8099 "configure"
! #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/wait.h>
  #ifndef WEXITSTATUS
! #define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
  #endif
  #ifndef WIFEXITED
! #define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
  #endif
! int main() {
! int s;
! wait (&s);
! s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
! ; return 0; }
! EOF
! if { (eval echo configure:8115: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
    ac_cv_header_sys_wait_h=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_header_sys_wait_h=no
  fi
! rm -f conftest*
  fi
! 
! echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6
  if test $ac_cv_header_sys_wait_h = yes; then
!   cat >> confdefs.h <<\EOF
  #define HAVE_SYS_WAIT_H 1
! EOF
  
  fi
  
  
! echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
! echo "configure:8137: checking for ANSI C header files" >&5
! if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   cat > conftest.$ac_ext <<EOF
! #line 8142 "configure"
! #include "confdefs.h"
! #include <stdlib.h>
! #include <stdarg.h>
! #include <string.h>
! #include <float.h>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:8150: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   ac_cv_header_stdc=yes
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_header_stdc=no
! fi
! rm -f conftest*
! 
! if test $ac_cv_header_stdc = yes; then
!   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
! cat > conftest.$ac_ext <<EOF
! #line 8167 "configure"
! #include "confdefs.h"
! #include <string.h>
! EOF
! if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "memchr" >/dev/null 2>&1; then
!   :
  else
!   rm -rf conftest*
!   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 <<EOF
! #line 8185 "configure"
! #include "confdefs.h"
! #include <stdlib.h>
! EOF
! if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "free" >/dev/null 2>&1; then
!   :
! else
!   rm -rf conftest*
!   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 <<EOF
! #line 8206 "configure"
! #include "confdefs.h"
! #include <ctype.h>
! #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
! #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
! #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); }
! 
! EOF
! if { (eval echo configure:8217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
    :
  else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -fr conftest*
-   ac_cv_header_stdc=no
- fi
- rm -fr conftest*
- fi
- 
- fi
- fi
- 
- echo "$ac_t""$ac_cv_header_stdc" 1>&6
- if test $ac_cv_header_stdc = yes; then
-   cat >> confdefs.h <<\EOF
- #define STDC_HEADERS 1
- EOF
- 
- fi
- 
- echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
- echo "configure:8241: checking for ssize_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
- #line 8246 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
- #include <stdlib.h>
- #include <stddef.h>
- #endif
- EOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-   egrep "(^|[^a-zA-Z_0-9])ssize_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
-   rm -rf conftest*
-   ac_cv_type_ssize_t=yes
- else
-   rm -rf conftest*
-   ac_cv_type_ssize_t=no
- fi
- rm -f conftest*
  
! fi
! echo "$ac_t""$ac_cv_type_ssize_t" 1>&6
! if test $ac_cv_type_ssize_t = no; then
!   cat >> confdefs.h <<\EOF
  #define ssize_t int
! EOF
  
  fi
  
  
! echo $ac_n "checking for in_addr_t""... $ac_c" 1>&6
! echo "configure:8275: checking for in_addr_t" >&5
! cat > conftest.$ac_ext <<EOF
! #line 8277 "configure"
! #include "confdefs.h"
  #include <sys/types.h>
  #if STDC_HEADERS
  #include <stdlib.h>
--- 13803,14369 ----
  fi
  
  
! 
! # Process the option "--enable-version-specific-runtime-libs"
! # Calculate toolexeclibdir
! case ${version_specific_libs} in
!   yes)
!     # Need the gcc compiler version to know where to install libraries
!     # and header files if --enable-version-specific-runtime-libs option
!     # is selected.
!     includedir='${libdir}/gcc/${target_noncanonical}/'$gcc_version/include/
!     toolexecdir='$(libdir)/gcc/$(target_noncanonical)'
!     toolexecmainlibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
!     toolexeclibdir=$toolexecmainlibdir
!     ;;
!   no)
!     if test -n "$with_cross_host" &&
!        test x"$with_cross_host" != x"no"; then
!       # Install a library built with a cross compiler in tooldir, not libdir.
!       toolexecdir='$(exec_prefix)/$(target_noncanonical)'
!       toolexecmainlibdir='$(toolexecdir)/lib'
!     else
!       toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
!       toolexecmainlibdir='$(libdir)'
!     fi
!     multi_os_directory=`$CC -print-multi-os-directory`
!     case $multi_os_directory in
!       .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
!       *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
!     esac
!     ;;
  esac
  
  
  
  
  # Determine gcj version number.
  gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
  GCJVERSION=$gcjversion
  
! 
! cat >>confdefs.h <<_ACEOF
  #define GCJVERSION "$GCJVERSION"
! _ACEOF
  
  
! 
! cat >>confdefs.h <<\_ACEOF
! #define JV_VERSION "1.4.2"
! _ACEOF
! 
! 
! cat >>confdefs.h <<\_ACEOF
! #define JV_API_VERSION "1.4"
! _ACEOF
! 
! 
! 
! case "${with_gxx_include_dir}" in
!   yes)
!     { { echo "$as_me:$LINENO: error: --with-gxx-include-dir=[dir] requires a directory" >&5
! echo "$as_me: error: --with-gxx-include-dir=[dir] requires a directory" >&2;}
!    { (exit 1); exit 1; }; }
!     ;;
!   no | "")
!     case "${enable_version_specific_runtime_libs}" in
!       yes) gxx_include_dir='${libsubdir}/include/c++' ;;
!       *)
! 	libstdcxx_incdir=c++/${gcc_version}
! 	gxx_include_dir='${prefix}/include/'${libstdcxx_incdir} ;;
!     esac ;;
!   *) gxx_include_dir=${with_gxx_include_dir} ;;
! esac
! 
! 
! 
! 
! # We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
! # On that system, sys/ioctl.h will not include sys/filio.h unless
! # BSD_COMP is defined; just including sys/filio.h is simpler.
! # We avoid AC_HEADER_DIRENT since we really only care about dirent.h
! # for now.  If you change this, you also must update natFile.cc.
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! for ac_header in unistd.h bstring.h sys/time.h sys/types.h fcntl.h \
! 		  sys/ioctl.h sys/filio.h sys/stat.h sys/select.h \
! 		  sys/socket.h netinet/in.h arpa/inet.h netdb.h net/if.h \
! 		  pwd.h sys/config.h stdint.h langinfo.h locale.h \
! 		  dirent.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 the libjava lists.  ##
! ## ---------------------------------- ##
! _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
  
! 
! for ac_header in inttypes.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 the libjava lists.  ##
! ## ---------------------------------- ##
! _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
! 
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_INTTYPES_H 1
! _ACEOF
  
! 
! cat >>confdefs.h <<\_ACEOF
  #define JV_HAVE_INTTYPES_H 1
! _ACEOF
  
  
  fi
+ 
  done
  
! echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
! echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6
! if test "${ac_cv_header_sys_wait_h+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/wait.h>
  #ifndef WEXITSTATUS
! # define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
  #endif
  #ifndef WIFEXITED
! # define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
  #endif
! 
! int
! main ()
! {
!   int s;
!   wait (&s);
!   s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
!   ;
!   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_sys_wait_h=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_header_sys_wait_h=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
! echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
! echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
  if test $ac_cv_header_sys_wait_h = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_SYS_WAIT_H 1
! _ACEOF
  
  fi
  
  
! echo "$as_me:$LINENO: checking for ssize_t" >&5
! echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
! if test "${ac_cv_type_ssize_t+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 ((ssize_t *) 0)
!   return 0;
! if (sizeof (ssize_t))
!   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_ssize_t=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
! ac_cv_type_ssize_t=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
! echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5
! echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
! if test $ac_cv_type_ssize_t = yes; then
    :
  else
  
! cat >>confdefs.h <<_ACEOF
  #define ssize_t int
! _ACEOF
  
  fi
  
  
! echo "$as_me:$LINENO: checking for in_addr_t" >&5
! echo $ECHO_N "checking for in_addr_t... $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 <sys/types.h>
  #if STDC_HEADERS
  #include <stdlib.h>
*************** cat > conftest.$ac_ext <<EOF
*** 8283,8526 ****
  #if HAVE_NETINET_IN_H
  #include <netinet/in.h>
  #endif
! int main() {
  in_addr_t foo;
! ; return 0; }
! EOF
! if { (eval echo configure:8291: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_IN_ADDR_T 1
! EOF
  
!    echo "$ac_t""yes" 1>&6
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   echo "$ac_t""no" 1>&6
  fi
! rm -f conftest*
  
! echo $ac_n "checking whether struct ip_mreq is in netinet/in.h""... $ac_c" 1>&6
! echo "configure:8307: checking whether struct ip_mreq is in netinet/in.h" >&5
! cat > conftest.$ac_ext <<EOF
! #line 8309 "configure"
! #include "confdefs.h"
  #include <netinet/in.h>
! int main() {
  struct ip_mreq mreq;
! ; return 0; }
! EOF
! if { (eval echo configure:8316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_STRUCT_IP_MREQ 1
! EOF
  
!    echo "$ac_t""yes" 1>&6
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   echo "$ac_t""no" 1>&6
  fi
! rm -f conftest*
  
! echo $ac_n "checking whether struct ipv6_mreq is in netinet/in.h""... $ac_c" 1>&6
! echo "configure:8332: checking whether struct ipv6_mreq is in netinet/in.h" >&5
! cat > conftest.$ac_ext <<EOF
! #line 8334 "configure"
! #include "confdefs.h"
  #include <netinet/in.h>
! int main() {
  struct ipv6_mreq mreq6;
! ; return 0; }
! EOF
! if { (eval echo configure:8341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_STRUCT_IPV6_MREQ 1
! EOF
  
!    echo "$ac_t""yes" 1>&6
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   echo "$ac_t""no" 1>&6
  fi
! rm -f conftest*
  
! echo $ac_n "checking whether struct sockaddr_in6 is in netinet/in.h""... $ac_c" 1>&6
! echo "configure:8357: checking whether struct sockaddr_in6 is in netinet/in.h" >&5
! cat > conftest.$ac_ext <<EOF
! #line 8359 "configure"
! #include "confdefs.h"
  #include <netinet/in.h>
! int main() {
  struct sockaddr_in6 addr6;
! ; return 0; }
! EOF
! if { (eval echo configure:8366: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_INET6 1
! EOF
  
!    echo "$ac_t""yes" 1>&6
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   echo "$ac_t""no" 1>&6
  fi
! rm -f conftest*
  
! echo $ac_n "checking for socklen_t in sys/socket.h""... $ac_c" 1>&6
! echo "configure:8382: checking for socklen_t in sys/socket.h" >&5
! cat > conftest.$ac_ext <<EOF
! #line 8384 "configure"
! #include "confdefs.h"
  #define _POSIX_PII_SOCKET
  #include <sys/types.h>
  #include <sys/socket.h>
! int main() {
  socklen_t x = 5;
! ; return 0; }
! EOF
! if { (eval echo configure:8393: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_SOCKLEN_T 1
! EOF
  
!    echo "$ac_t""yes" 1>&6
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   echo "$ac_t""no" 1>&6
  fi
! rm -f conftest*
  
! echo $ac_n "checking for tm_gmtoff in struct tm""... $ac_c" 1>&6
! echo "configure:8409: checking for tm_gmtoff in struct tm" >&5
! cat > conftest.$ac_ext <<EOF
! #line 8411 "configure"
! #include "confdefs.h"
  #include <time.h>
! int main() {
  struct tm tim; tim.tm_gmtoff = 0;
! ; return 0; }
! EOF
! if { (eval echo configure:8418: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define STRUCT_TM_HAS_GMTOFF 1
! EOF
  
!    echo "$ac_t""yes" 1>&6
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   echo "$ac_t""no" 1>&6
!    echo $ac_n "checking for global timezone variable""... $ac_c" 1>&6
! echo "configure:8431: checking for global timezone variable" >&5
!                cat > conftest.$ac_ext <<EOF
! #line 8433 "configure"
! #include "confdefs.h"
  #include <time.h>
! int main() {
  void i(){long z2 = 2*timezone;}
! ; return 0; }
! EOF
! if { (eval echo configure:8440: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_TIMEZONE 1
! EOF
  
!       echo "$ac_t""yes" 1>&6
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   echo "$ac_t""no" 1>&6
!        echo $ac_n "checking for global _timezone variable""... $ac_c" 1>&6
! echo "configure:8453: checking for global _timezone variable" >&5
!               cat > conftest.$ac_ext <<EOF
! #line 8455 "configure"
! #include "confdefs.h"
  #include <time.h>
! int main() {
  long z2 = _timezone;
! ; return 0; }
! EOF
! if { (eval echo configure:8462: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   cat >> confdefs.h <<\EOF
  #define HAVE_UNDERSCORE_TIMEZONE 1
! EOF
  
!           echo "$ac_t""yes" 1>&6
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   echo "$ac_t""no" 1>&6
  fi
! rm -f conftest*
  fi
! rm -f conftest*
  fi
! rm -f conftest*
  
  # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
  # for constant arguments.  Useless!
! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
! echo "configure:8484: checking for working alloca.h" >&5
! if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8489 "configure"
! #include "confdefs.h"
  #include <alloca.h>
! int main() {
! char *p = alloca(2 * sizeof(int));
! ; return 0; }
! EOF
! if { (eval echo configure:8496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   ac_cv_header_alloca_h=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_header_alloca_h=no
  fi
! rm -f conftest*
  fi
  
! echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
! if test $ac_cv_header_alloca_h = yes; then
!   cat >> confdefs.h <<\EOF
  #define HAVE_ALLOCA_H 1
! EOF
  
  fi
  
! echo $ac_n "checking for alloca""... $ac_c" 1>&6
! echo "configure:8517: checking for alloca" >&5
! if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8522 "configure"
! #include "confdefs.h"
! 
  #ifdef __GNUC__
  # define alloca __builtin_alloca
  #else
--- 14372,14893 ----
  #if HAVE_NETINET_IN_H
  #include <netinet/in.h>
  #endif
! int
! main ()
! {
  in_addr_t foo;
!   ;
!   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_IN_ADDR_T 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
  
! echo "$as_me:$LINENO: checking whether struct ip_mreq is in netinet/in.h" >&5
! echo $ECHO_N "checking whether struct ip_mreq is in netinet/in.h... $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 <netinet/in.h>
! int
! main ()
! {
  struct ip_mreq mreq;
!   ;
!   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_STRUCT_IP_MREQ 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
  
! echo "$as_me:$LINENO: checking whether struct ipv6_mreq is in netinet/in.h" >&5
! echo $ECHO_N "checking whether struct ipv6_mreq is in netinet/in.h... $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 <netinet/in.h>
! int
! main ()
! {
  struct ipv6_mreq mreq6;
!   ;
!   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_STRUCT_IPV6_MREQ 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
  
! echo "$as_me:$LINENO: checking whether struct sockaddr_in6 is in netinet/in.h" >&5
! echo $ECHO_N "checking whether struct sockaddr_in6 is in netinet/in.h... $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 <netinet/in.h>
! int
! main ()
! {
  struct sockaddr_in6 addr6;
!   ;
!   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_INET6 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
  
! echo "$as_me:$LINENO: checking for socklen_t in sys/socket.h" >&5
! echo $ECHO_N "checking for socklen_t in sys/socket.h... $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.  */
  #define _POSIX_PII_SOCKET
  #include <sys/types.h>
  #include <sys/socket.h>
! int
! main ()
! {
  socklen_t x = 5;
!   ;
!   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_SOCKLEN_T 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
  
! 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
  
  # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
  # for constant arguments.  Useless!
! echo "$as_me:$LINENO: checking for working alloca.h" >&5
! echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6
! if test "${ac_cv_working_alloca_h+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #include <alloca.h>
! int
! main ()
! {
! char *p = (char *) alloca (2 * sizeof (int));
!   ;
!   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_working_alloca_h=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_working_alloca_h=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
+ echo "${ECHO_T}$ac_cv_working_alloca_h" >&6
+ if test $ac_cv_working_alloca_h = yes; then
  
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_ALLOCA_H 1
! _ACEOF
  
  fi
  
! echo "$as_me:$LINENO: checking for alloca" >&5
! echo $ECHO_N "checking for alloca... $ECHO_C" >&6
! if test "${ac_cv_func_alloca_works+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
  #ifdef __GNUC__
  # define alloca __builtin_alloca
  #else
*************** char *alloca ();
*** 8542,8678 ****
  # endif
  #endif
  
! int main() {
! char *p = (char *) alloca(1);
! ; return 0; }
! EOF
! if { (eval echo configure:8550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    ac_cv_func_alloca_works=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_func_alloca_works=no
  fi
! rm -f conftest*
  fi
  
- echo "$ac_t""$ac_cv_func_alloca_works" 1>&6
  if test $ac_cv_func_alloca_works = yes; then
-   cat >> confdefs.h <<\EOF
- #define HAVE_ALLOCA 1
- EOF
  
! fi
  
! if test $ac_cv_func_alloca_works = no; then
    # The SVR3 libPW and SVR4 libucb both contain incompatible functions
!   # that cause trouble.  Some versions do not even contain alloca or
!   # contain a buggy version.  If you still want to use their alloca,
!   # use ar to extract alloca.o from them instead of compiling alloca.c.
!   ALLOCA=alloca.${ac_objext}
!   cat >> confdefs.h <<\EOF
  #define C_ALLOCA 1
! EOF
  
  
! echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
! echo "configure:8582: checking whether alloca needs Cray hooks" >&5
! if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8587 "configure"
! #include "confdefs.h"
  #if defined(CRAY) && ! defined(CRAY2)
  webecray
  #else
  wenotbecray
  #endif
  
! EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "webecray" >/dev/null 2>&1; then
!   rm -rf conftest*
    ac_cv_os_cray=yes
  else
-   rm -rf conftest*
    ac_cv_os_cray=no
  fi
  rm -f conftest*
  
  fi
! 
! echo "$ac_t""$ac_cv_os_cray" 1>&6
  if test $ac_cv_os_cray = yes; then
! for ac_func in _getb67 GETB67 getb67; do
!   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:8612: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8617 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:8640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!   cat >> confdefs.h <<EOF
  #define CRAY_STACKSEG_END $ac_func
! EOF
  
!   break
! else
!   echo "$ac_t""no" 1>&6
  fi
  
! done
  fi
  
! echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
! echo "configure:8667: checking stack direction for C alloca" >&5
! if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test "$cross_compiling" = yes; then
    ac_cv_c_stack_direction=0
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8675 "configure"
! #include "confdefs.h"
  find_stack_direction ()
  {
    static char *addr = 0;
--- 14909,15130 ----
  # endif
  #endif
  
! int
! main ()
! {
! char *p = (char *) alloca (1);
!   ;
!   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_alloca_works=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! ac_cv_func_alloca_works=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
+ echo "${ECHO_T}$ac_cv_func_alloca_works" >&6
  
  if test $ac_cv_func_alloca_works = yes; then
  
! cat >>confdefs.h <<\_ACEOF
! #define HAVE_ALLOCA 1
! _ACEOF
  
! else
    # The SVR3 libPW and SVR4 libucb both contain incompatible functions
! # that cause trouble.  Some versions do not even contain alloca or
! # contain a buggy version.  If you still want to use their alloca,
! # use ar to extract alloca.o from them instead of compiling alloca.c.
! 
! ALLOCA=alloca.$ac_objext
! 
! cat >>confdefs.h <<\_ACEOF
  #define C_ALLOCA 1
! _ACEOF
  
  
! echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
! echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6
! if test "${ac_cv_os_cray+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.  */
  #if defined(CRAY) && ! defined(CRAY2)
  webecray
  #else
  wenotbecray
  #endif
  
! _ACEOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "webecray" >/dev/null 2>&1; then
    ac_cv_os_cray=yes
  else
    ac_cv_os_cray=no
  fi
  rm -f conftest*
  
  fi
! echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
! echo "${ECHO_T}$ac_cv_os_cray" >&6
  if test $ac_cv_os_cray = yes; then
!   for ac_func in _getb67 GETB67 getb67; 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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 CRAY_STACKSEG_END $ac_func
! _ACEOF
  
!     break
  fi
  
!   done
  fi
  
! echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
! echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6
! if test "${ac_cv_c_stack_direction+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test "$cross_compiling" = yes; then
    ac_cv_c_stack_direction=0
  else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! int
  find_stack_direction ()
  {
    static char *addr = 0;
*************** find_stack_direction ()
*** 8685,8822 ****
    else
      return (&dummy > addr) ? 1 : -1;
  }
  main ()
  {
!   exit (find_stack_direction() < 0);
  }
! EOF
! if { (eval echo configure:8694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
    ac_cv_c_stack_direction=1
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -fr conftest*
!   ac_cv_c_stack_direction=-1
  fi
! rm -fr conftest*
  fi
- 
  fi
  
! echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
! cat >> confdefs.h <<EOF
  #define STACK_DIRECTION $ac_cv_c_stack_direction
! EOF
  
  fi
  
! for ac_hdr in unistd.h
  do
! ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:8719: checking for $ac_hdr" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8724 "configure"
! #include "confdefs.h"
! #include <$ac_hdr>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:8729: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
! rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_hdr 1
! EOF
!  
  else
!   echo "$ac_t""no" 1>&6
  fi
  done
  
  for ac_func in getpagesize
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:8758: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8763 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:8786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
! echo $ac_n "checking for working mmap""... $ac_c" 1>&6
! echo "configure:8811: checking for working mmap" >&5
! if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test "$cross_compiling" = yes; then
    ac_cv_func_mmap_fixed_mapped=no
  else
!   cat > conftest.$ac_ext <<EOF
! #line 8819 "configure"
! #include "confdefs.h"
  
  /* Thanks to Mike Haertel and Jim Avera for this test.
     Here is a matrix of mmap possibilities:
--- 15137,15463 ----
    else
      return (&dummy > addr) ? 1 : -1;
  }
+ 
+ int
  main ()
  {
!   exit (find_stack_direction () < 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_c_stack_direction=1
  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_stack_direction=-1
  fi
! rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+ echo "${ECHO_T}$ac_cv_c_stack_direction" >&6
  
! cat >>confdefs.h <<_ACEOF
  #define STACK_DIRECTION $ac_cv_c_stack_direction
! _ACEOF
! 
  
  fi
  
! if test x$gcc_no_link = xyes; then
!   if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then
!     ac_cv_func_mmap_fixed_mapped=no
!   fi
! fi
! if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then
! 
! 
! for ac_header in stdlib.h unistd.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 the libjava lists.  ##
! ## ---------------------------------- ##
! _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
  
+ 
  for ac_func in getpagesize
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 for working mmap" >&5
! echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
! if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test "$cross_compiling" = yes; then
    ac_cv_func_mmap_fixed_mapped=no
  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
! /* malloc might have been renamed as rpl_malloc. */
! #undef malloc
  
  /* Thanks to Mike Haertel and Jim Avera for this test.
     Here is a matrix of mmap possibilities:
*************** else
*** 8830,8863 ****
     back from the file, nor mmap's back from the file at a different
     address.  (There have been systems where private was not correctly
     implemented like the infamous i386 svr4.0, and systems where the
!    VM page cache was not coherent with the filesystem buffer cache
     like early versions of FreeBSD and possibly contemporary NetBSD.)
     For shared mappings, we should conversely verify that changes get
!    propogated back to all the places they're supposed to be.
  
     Grep wants private fixed already mapped.
     The main things grep needs to know about mmap are:
     * does it exist and is it safe to write into the mmap'd area
     * how to use it (BSD variants)  */
! #include <sys/types.h>
  #include <fcntl.h>
  #include <sys/mman.h>
  
! /* This mess was copied from the GNU getpagesize.h.  */
! #ifndef HAVE_GETPAGESIZE
! # ifdef HAVE_UNISTD_H
! #  include <unistd.h>
! # endif
  
  /* Assume that all systems that can run configure have sys/param.h.  */
! # ifndef HAVE_SYS_PARAM_H
  #  define HAVE_SYS_PARAM_H 1
  # endif
  
  # ifdef _SC_PAGESIZE
  #  define getpagesize() sysconf(_SC_PAGESIZE)
  # else /* no _SC_PAGESIZE */
! #  ifdef HAVE_SYS_PARAM_H
  #   include <sys/param.h>
  #   ifdef EXEC_PAGESIZE
  #    define getpagesize() EXEC_PAGESIZE
--- 15471,15504 ----
     back from the file, nor mmap's back from the file at a different
     address.  (There have been systems where private was not correctly
     implemented like the infamous i386 svr4.0, and systems where the
!    VM page cache was not coherent with the file system buffer cache
     like early versions of FreeBSD and possibly contemporary NetBSD.)
     For shared mappings, we should conversely verify that changes get
!    propagated back to all the places they're supposed to be.
  
     Grep wants private fixed already mapped.
     The main things grep needs to know about mmap are:
     * does it exist and is it safe to write into the mmap'd area
     * how to use it (BSD variants)  */
! 
  #include <fcntl.h>
  #include <sys/mman.h>
  
! #if !STDC_HEADERS && !HAVE_STDLIB_H
! char *malloc ();
! #endif
  
+ /* This mess was copied from the GNU getpagesize.h.  */
+ #if !HAVE_GETPAGESIZE
  /* Assume that all systems that can run configure have sys/param.h.  */
! # if !HAVE_SYS_PARAM_H
  #  define HAVE_SYS_PARAM_H 1
  # endif
  
  # ifdef _SC_PAGESIZE
  #  define getpagesize() sysconf(_SC_PAGESIZE)
  # else /* no _SC_PAGESIZE */
! #  if HAVE_SYS_PARAM_H
  #   include <sys/param.h>
  #   ifdef EXEC_PAGESIZE
  #    define getpagesize() EXEC_PAGESIZE
*************** else
*** 8884,9015 ****
  
  #endif /* no HAVE_GETPAGESIZE */
  
- #ifdef __cplusplus
- extern "C" { void *malloc(unsigned); }
- #else
- char *malloc();
- #endif
- 
  int
! main()
  {
! 	char *data, *data2, *data3;
! 	int i, pagesize;
! 	int fd;
  
! 	pagesize = getpagesize();
  
! 	/*
! 	 * First, make a file with some known garbage in it.
! 	 */
! 	data = malloc(pagesize);
! 	if (!data)
! 		exit(1);
! 	for (i = 0; i < pagesize; ++i)
! 		*(data + i) = rand();
! 	umask(0);
! 	fd = creat("conftestmmap", 0600);
! 	if (fd < 0)
! 		exit(1);
! 	if (write(fd, data, pagesize) != pagesize)
! 		exit(1);
! 	close(fd);
  
! 	/*
! 	 * Next, try to mmap the file at a fixed address which
! 	 * already has something else allocated at it.  If we can,
! 	 * also make sure that we see the same garbage.
! 	 */
! 	fd = open("conftestmmap", O_RDWR);
! 	if (fd < 0)
! 		exit(1);
! 	data2 = malloc(2 * pagesize);
! 	if (!data2)
! 		exit(1);
! 	data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
! 	if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE,
! 	    MAP_PRIVATE | MAP_FIXED, fd, 0L))
! 		exit(1);
! 	for (i = 0; i < pagesize; ++i)
! 		if (*(data + i) != *(data2 + i))
! 			exit(1);
  
! 	/*
! 	 * Finally, make sure that changes to the mapped area
! 	 * do not percolate back to the file as seen by read().
! 	 * (This is a bug on some variants of i386 svr4.0.)
! 	 */
! 	for (i = 0; i < pagesize; ++i)
! 		*(data2 + i) = *(data2 + i) + 1;
! 	data3 = malloc(pagesize);
! 	if (!data3)
! 		exit(1);
! 	if (read(fd, data3, pagesize) != pagesize)
! 		exit(1);
! 	for (i = 0; i < pagesize; ++i)
! 		if (*(data + i) != *(data3 + i))
! 			exit(1);
! 	close(fd);
! 	unlink("conftestmmap");
! 	exit(0);
  }
! 
! EOF
! if { (eval echo configure:8959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
    ac_cv_func_mmap_fixed_mapped=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -fr conftest*
!   ac_cv_func_mmap_fixed_mapped=no
  fi
! rm -fr conftest*
  fi
- 
  fi
! 
! echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6
  if test $ac_cv_func_mmap_fixed_mapped = yes; then
!   cat >> confdefs.h <<\EOF
  #define HAVE_MMAP 1
! EOF
  
  fi
  
  
  for ac_prog in perl
  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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:8987: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_PERL'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$PERL"; then
    ac_cv_prog_PERL="$PERL" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_PERL="$ac_prog"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! PERL="$ac_cv_prog_PERL"
  if test -n "$PERL"; then
!   echo "$ac_t""$PERL" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! test -n "$PERL" && break
  done
  test -n "$PERL" || PERL="false"
  
--- 15525,15661 ----
  
  #endif /* no HAVE_GETPAGESIZE */
  
  int
! main ()
  {
!   char *data, *data2, *data3;
!   int i, pagesize;
!   int fd;
  
!   pagesize = getpagesize ();
  
!   /* First, make a file with some known garbage in it. */
!   data = (char *) malloc (pagesize);
!   if (!data)
!     exit (1);
!   for (i = 0; i < pagesize; ++i)
!     *(data + i) = rand ();
!   umask (0);
!   fd = creat ("conftest.mmap", 0600);
!   if (fd < 0)
!     exit (1);
!   if (write (fd, data, pagesize) != pagesize)
!     exit (1);
!   close (fd);
  
!   /* Next, try to mmap the file at a fixed address which already has
!      something else allocated at it.  If we can, also make sure that
!      we see the same garbage.  */
!   fd = open ("conftest.mmap", O_RDWR);
!   if (fd < 0)
!     exit (1);
!   data2 = (char *) malloc (2 * pagesize);
!   if (!data2)
!     exit (1);
!   data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1);
!   if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
! 		     MAP_PRIVATE | MAP_FIXED, fd, 0L))
!     exit (1);
!   for (i = 0; i < pagesize; ++i)
!     if (*(data + i) != *(data2 + i))
!       exit (1);
  
!   /* Finally, make sure that changes to the mapped area do not
!      percolate back to the file as seen by read().  (This is a bug on
!      some variants of i386 svr4.0.)  */
!   for (i = 0; i < pagesize; ++i)
!     *(data2 + i) = *(data2 + i) + 1;
!   data3 = (char *) malloc (pagesize);
!   if (!data3)
!     exit (1);
!   if (read (fd, data3, pagesize) != pagesize)
!     exit (1);
!   for (i = 0; i < pagesize; ++i)
!     if (*(data + i) != *(data3 + i))
!       exit (1);
!   close (fd);
!   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
    ac_cv_func_mmap_fixed_mapped=yes
  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_func_mmap_fixed_mapped=no
  fi
! rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
! echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
! echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
  if test $ac_cv_func_mmap_fixed_mapped = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_MMAP 1
! _ACEOF
  
  fi
+ rm -f conftest.mmap
  
+ fi
  
  for ac_prog in perl
  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_PERL+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test -n "$PERL"; then
    ac_cv_prog_PERL="$PERL" # 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_PERL="$ac_prog"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
  fi
  fi
! PERL=$ac_cv_prog_PERL
  if test -n "$PERL"; then
!   echo "$as_me:$LINENO: result: $PERL" >&5
! echo "${ECHO_T}$PERL" >&6
  else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
  fi
  
!   test -n "$PERL" && break
  done
  test -n "$PERL" || PERL="false"
  
*************** case "${host}" in
*** 9028,9033 ****
--- 15674,15682 ----
  #    SYSDEP_SOURCES=sysdep/ia64.c
  #    test -d sysdep || mkdir sysdep
  #    ;;
+  hppa*-*-linux*)
+     SIGNAL_HANDLER=include/pa-signal.h
+     ;;
   ia64-*-linux*)
      SIGNAL_HANDLER=include/dwarf2-signal.h
      ;;
*************** case "${host}" in
*** 9047,9054 ****
   sparc*-*-linux*)
      SIGNAL_HANDLER=include/dwarf2-signal.h
      ;;
!  sh-*-linux* | sh[34]*-*-linux*)
!     SIGNAL_HANDLER=include/dwarf2-signal.h
      ;;
   *mingw*)
      SIGNAL_HANDLER=include/win32-signal.h
--- 15696,15703 ----
   sparc*-*-linux*)
      SIGNAL_HANDLER=include/dwarf2-signal.h
      ;;
!  sh*-*-linux*)
!     SIGNAL_HANDLER=include/sh-signal.h
      ;;
   *mingw*)
      SIGNAL_HANDLER=include/win32-signal.h
*************** case "${host}" in
*** 9056,9061 ****
--- 15705,15713 ----
   mips*-*-linux*)
      SIGNAL_HANDLER=include/mips-signal.h
      ;;
+  *-*-darwin*)
+     SIGNAL_HANDLER=include/darwin-signal.h
+     ;;
   *)
      SIGNAL_HANDLER=include/default-signal.h
      ;;
*************** fi
*** 9070,9076 ****
  # Define here any compiler flags that you need in order to make backtrace() work.
  BACKTRACESPEC=
  case "${host}" in
!  x86_64*-*-linux*)
      BACKTRACESPEC=-fno-omit-frame-pointer
      ;;
  esac
--- 15722,15728 ----
  # Define here any compiler flags that you need in order to make backtrace() work.
  BACKTRACESPEC=
  case "${host}" in
!  x86_64*-*-linux*|i?86-*)
      BACKTRACESPEC=-fno-omit-frame-pointer
      ;;
  esac
*************** if test -z "$SIGNAL_HANDLER_AUX"; then
*** 9082,9087 ****
--- 15734,15740 ----
    SIGNAL_HANDLER_AUX=$SIGNAL_HANDLER
  fi
  
+                     ac_config_links="$ac_config_links include/java-signal.h:$SIGNAL_HANDLER include/java-signal-aux.h:$SIGNAL_HANDLER_AUX"
  
  
  if test "${multilib}" = "yes"; then
*************** here=`${PWDCMD-pwd}`
*** 9098,9687 ****
  # We get this from the environment.
  
  
! trap '' 1 2 15
! cat > confcache <<\EOF
  # 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.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # 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 \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     echo "updating cache $cache_file"
!     cat confcache > $cache_file
    else
      echo "not updating unwritable cache $cache_file"
    fi
  fi
  rm -f confcache
  
- trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
- 
  test "x$prefix" = xNONE && prefix=$ac_default_prefix
  # Let make expand exec_prefix.
  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  
! # Any assignment to VPATH causes Sun make to only execute
! # the first set of double-colon rules, so remove it if not needed.
! # If there is a colon in the path, we need to keep it.
  if test "x$srcdir" = x.; then
!   ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  fi
  
- trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
- 
  DEFS=-DHAVE_CONFIG_H
  
! # Without the "./", some shells look in PATH for config.status.
! : ${CONFIG_STATUS=./config.status}
  
! echo creating $CONFIG_STATUS
! rm -f $CONFIG_STATUS
! cat > $CONFIG_STATUS <<EOF
! #! /bin/sh
! # Generated automatically by configure.
  # Run this file to recreate the current configuration.
- # This directory was configured as follows,
- # on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
- #
- # $0 $ac_configure_args
- #
  # Compiler output produced by configure, useful for debugging
! # configure, is in ./config.log if it exists.
  
! ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
! for ac_option
  do
!   case "\$ac_option" in
!   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
!     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
!   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
!     echo "$CONFIG_STATUS generated by autoconf version 2.13"
!     exit 0 ;;
!   -help | --help | --hel | --he | --h)
!     echo "\$ac_cs_usage"; exit 0 ;;
!   *) echo "\$ac_cs_usage"; exit 1 ;;
!   esac
  done
  
! ac_given_srcdir=$srcdir
! ac_given_INSTALL="$INSTALL"
  
! trap 'rm -fr `echo "Makefile libgcj.pc libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile include/config.h gcj/libgcj-config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
! EOF
! cat >> $CONFIG_STATUS <<EOF
  
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
-  s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
- $ac_vpsub
- $extrasub
- s%@SHELL@%$SHELL%g
- s%@CFLAGS@%$CFLAGS%g
- s%@CPPFLAGS@%$CPPFLAGS%g
- s%@CXXFLAGS@%$CXXFLAGS%g
- s%@FFLAGS@%$FFLAGS%g
- s%@DEFS@%$DEFS%g
- s%@LDFLAGS@%$LDFLAGS%g
- s%@LIBS@%$LIBS%g
- s%@exec_prefix@%$exec_prefix%g
- s%@prefix@%$prefix%g
- s%@program_transform_name@%$program_transform_name%g
- s%@bindir@%$bindir%g
- s%@sbindir@%$sbindir%g
- s%@libexecdir@%$libexecdir%g
- s%@datadir@%$datadir%g
- s%@sysconfdir@%$sysconfdir%g
- s%@sharedstatedir@%$sharedstatedir%g
- s%@localstatedir@%$localstatedir%g
- s%@libdir@%$libdir%g
- s%@includedir@%$includedir%g
- s%@oldincludedir@%$oldincludedir%g
- s%@infodir@%$infodir%g
- s%@mandir@%$mandir%g
- s%@LN_S@%$LN_S%g
- s%@libgcj_basedir@%$libgcj_basedir%g
- s%@mkinstalldirs@%$mkinstalldirs%g
- s%@host@%$host%g
- s%@host_alias@%$host_alias%g
- s%@host_cpu@%$host_cpu%g
- s%@host_vendor@%$host_vendor%g
- s%@host_os@%$host_os%g
- s%@target@%$target%g
- s%@target_alias@%$target_alias%g
- s%@target_cpu@%$target_cpu%g
- s%@target_vendor@%$target_vendor%g
- s%@target_os@%$target_os%g
- s%@build@%$build%g
- s%@build_alias@%$build_alias%g
- s%@build_cpu@%$build_cpu%g
- s%@build_vendor@%$build_vendor%g
- s%@build_os@%$build_os%g
- s%@CC@%$CC%g
- s%@glibjava_CXX@%$glibjava_CXX%g
- s%@CXX@%$CXX%g
- s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
- s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
- s%@INSTALL_DATA@%$INSTALL_DATA%g
- s%@PACKAGE@%$PACKAGE%g
- s%@VERSION@%$VERSION%g
- s%@ACLOCAL@%$ACLOCAL%g
- s%@AUTOCONF@%$AUTOCONF%g
- s%@AUTOMAKE@%$AUTOMAKE%g
- s%@AUTOHEADER@%$AUTOHEADER%g
- s%@MAKEINFO@%$MAKEINFO%g
- s%@SET_MAKE@%$SET_MAKE%g
- s%@AS@%$AS%g
- s%@AR@%$AR%g
- s%@RANLIB@%$RANLIB%g
- s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
- s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
- s%@MAINT@%$MAINT%g
- s%@EXEEXT@%$EXEEXT%g
- s%@LIBGCJ_CFLAGS@%$LIBGCJ_CFLAGS%g
- s%@LIBGCJ_CXXFLAGS@%$LIBGCJ_CXXFLAGS%g
- s%@LIBGCJ_JAVAFLAGS@%$LIBGCJ_JAVAFLAGS%g
- s%@INCLTDL@%$INCLTDL%g
- s%@LIBLTDL@%$LIBLTDL%g
- s%@DIRLTDL@%$DIRLTDL%g
- s%@OBJEXT@%$OBJEXT%g
- s%@STRIP@%$STRIP%g
- s%@LIBTOOL@%$LIBTOOL%g
- s%@CXXCPP@%$CXXCPP%g
- s%@subdirs@%$subdirs%g
- s%@COMPPATH@%$COMPPATH%g
- s%@TESTSUBDIR_TRUE@%$TESTSUBDIR_TRUE%g
- s%@TESTSUBDIR_FALSE@%$TESTSUBDIR_FALSE%g
- s%@ONESTEP_TRUE@%$ONESTEP_TRUE%g
- s%@ONESTEP_FALSE@%$ONESTEP_FALSE%g
- s%@LIBGCJDEBUG@%$LIBGCJDEBUG%g
- s%@INTERPRETER@%$INTERPRETER%g
- s%@LIBFFI@%$LIBFFI%g
- s%@LIBFFIINCS@%$LIBFFIINCS%g
- s%@EXTRA_CC_FILES@%$EXTRA_CC_FILES%g
- s%@PLATFORMOBJS@%$PLATFORMOBJS%g
- s%@CPP@%$CPP%g
- s%@SYSTEMSPEC@%$SYSTEMSPEC%g
- s%@LIBGCJTESTSPEC@%$LIBGCJTESTSPEC%g
- s%@ZLIBSPEC@%$ZLIBSPEC%g
- s%@ZLIBTESTSPEC@%$ZLIBTESTSPEC%g
- s%@X_CFLAGS@%$X_CFLAGS%g
- s%@X_PRE_LIBS@%$X_PRE_LIBS%g
- s%@X_LIBS@%$X_LIBS%g
- s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g
- s%@TOOLKIT@%$TOOLKIT%g
- s%@XLIB_AWT_TRUE@%$XLIB_AWT_TRUE%g
- s%@XLIB_AWT_FALSE@%$XLIB_AWT_FALSE%g
- s%@GTK_AWT_TRUE@%$GTK_AWT_TRUE%g
- s%@GTK_AWT_FALSE@%$GTK_AWT_FALSE%g
- s%@GTK_CAIRO_TRUE@%$GTK_CAIRO_TRUE%g
- s%@GTK_CAIRO_FALSE@%$GTK_CAIRO_FALSE%g
- s%@PKG_CONFIG@%$PKG_CONFIG%g
- s%@CAIRO_CFLAGS@%$CAIRO_CFLAGS%g
- s%@CAIRO_LIBS@%$CAIRO_LIBS%g
- s%@PANGOFT2_CFLAGS@%$PANGOFT2_CFLAGS%g
- s%@PANGOFT2_LIBS@%$PANGOFT2_LIBS%g
- s%@GCLIBS@%$GCLIBS%g
- s%@GCINCS@%$GCINCS%g
- s%@GCDEPS@%$GCDEPS%g
- s%@GCOBJS@%$GCOBJS%g
- s%@GCSPEC@%$GCSPEC%g
- s%@JC1GCSPEC@%$JC1GCSPEC%g
- s%@GCTESTSPEC@%$GCTESTSPEC%g
- s%@THREADLIBS@%$THREADLIBS%g
- s%@THREADINCS@%$THREADINCS%g
- s%@THREADDEPS@%$THREADDEPS%g
- s%@THREADOBJS@%$THREADOBJS%g
- s%@THREADSPEC@%$THREADSPEC%g
- s%@THREADLDFLAGS@%$THREADLDFLAGS%g
- s%@THREADCXXFLAGS@%$THREADCXXFLAGS%g
- s%@HASH_SYNC_SPEC@%$HASH_SYNC_SPEC%g
- s%@USING_GCC_TRUE@%$USING_GCC_TRUE%g
- s%@USING_GCC_FALSE@%$USING_GCC_FALSE%g
- s%@tool_include_dir@%$tool_include_dir%g
- s%@gcc_version@%$gcc_version%g
- s%@LIBICONV@%$LIBICONV%g
- s%@GTK_CFLAGS@%$GTK_CFLAGS%g
- s%@GTK_LIBS@%$GTK_LIBS%g
- s%@GLIB_CFLAGS@%$GLIB_CFLAGS%g
- s%@GLIB_LIBS@%$GLIB_LIBS%g
- s%@GLIB_GENMARSHAL@%$GLIB_GENMARSHAL%g
- s%@GOBJECT_QUERY@%$GOBJECT_QUERY%g
- s%@GLIB_MKENUMS@%$GLIB_MKENUMS%g
- s%@LIBART_CONFIG@%$LIBART_CONFIG%g
- s%@LIBART_CFLAGS@%$LIBART_CFLAGS%g
- s%@LIBART_LIBS@%$LIBART_LIBS%g
- s%@GCJ@%$GCJ%g
- s%@GCJFLAGS@%$GCJFLAGS%g
- s%@ZLIBS@%$ZLIBS%g
- s%@SYS_ZLIBS@%$SYS_ZLIBS%g
- s%@ZINCS@%$ZINCS%g
- s%@DIVIDESPEC@%$DIVIDESPEC%g
- s%@CHECKREFSPEC@%$CHECKREFSPEC%g
- s%@EXCEPTIONSPEC@%$EXCEPTIONSPEC%g
- s%@IEEESPEC@%$IEEESPEC%g
- s%@CANADIAN_TRUE@%$CANADIAN_TRUE%g
- s%@CANADIAN_FALSE@%$CANADIAN_FALSE%g
- s%@NULL_TARGET_TRUE@%$NULL_TARGET_TRUE%g
- s%@NULL_TARGET_FALSE@%$NULL_TARGET_FALSE%g
- s%@NATIVE_TRUE@%$NATIVE_TRUE%g
- s%@NATIVE_FALSE@%$NATIVE_FALSE%g
- s%@NEEDS_DATA_START_TRUE@%$NEEDS_DATA_START_TRUE%g
- s%@NEEDS_DATA_START_FALSE@%$NEEDS_DATA_START_FALSE%g
- s%@GCC_UNWIND_INCLUDE@%$GCC_UNWIND_INCLUDE%g
- s%@toolexecdir@%$toolexecdir%g
- s%@toolexecmainlibdir@%$toolexecmainlibdir%g
- s%@toolexeclibdir@%$toolexeclibdir%g
- s%@GCJVERSION@%$GCJVERSION%g
- s%@ALLOCA@%$ALLOCA%g
- s%@PERL@%$PERL%g
- s%@BACKTRACESPEC@%$BACKTRACESPEC%g
- s%@SYSDEP_SOURCES@%$SYSDEP_SOURCES%g
- s%@here@%$here%g
  
! CEOF
! EOF
  
- cat >> $CONFIG_STATUS <<\EOF
  
! # 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_cmds=90 # Maximum number of lines to put in a sed script.
! ac_file=1 # Number of current file.
! ac_beg=1 # First line for current file.
! ac_end=$ac_max_sed_cmds # 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" conftest.subs > conftest.s$ac_file
    else
!     sed "${ac_end}q" conftest.subs > conftest.s$ac_file
    fi
!   if test ! -s conftest.s$ac_file; then
!     ac_more_lines=false
!     rm -f conftest.s$ac_file
    else
!     if test -z "$ac_sed_cmds"; then
!       ac_sed_cmds="sed -f conftest.s$ac_file"
!     else
!       ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
!     fi
!     ac_file=`expr $ac_file + 1`
!     ac_beg=$ac_end
!     ac_end=`expr $ac_end + $ac_max_sed_cmds`
    fi
  done
! if test -z "$ac_sed_cmds"; then
!   ac_sed_cmds=cat
  fi
- EOF
  
! cat >> $CONFIG_STATUS <<EOF
  
! CONFIG_FILES=\${CONFIG_FILES-"Makefile libgcj.pc libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile"}
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
!   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
!   case "$ac_file" in
!   *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
!        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
!   *) ac_file_in="${ac_file}.in" ;;
    esac
  
!   # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  
!   # Remove last slash and all that follows it.  Not all systems have dirname.
!   ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
!   if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
!     # The file is in a subdirectory.
!     test ! -d "$ac_dir" && mkdir "$ac_dir"
!     ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
!     # A "../" for each directory in $ac_dir_suffix.
!     ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
!   else
!     ac_dir_suffix= ac_dots=
    fi
  
!   case "$ac_given_srcdir" in
!   .)  srcdir=.
!       if test -z "$ac_dots"; then top_srcdir=.
!       else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
!   /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
!   *) # Relative path.
!     srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
!     top_srcdir="$ac_dots$ac_given_srcdir" ;;
    esac
  
!   case "$ac_given_INSTALL" in
!   [/$]*) INSTALL="$ac_given_INSTALL" ;;
!   *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
!   esac
  
!   echo creating "$ac_file"
!   rm -f "$ac_file"
!   configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
!   case "$ac_file" in
!   *Makefile*) ac_comsub="1i\\
! # $configure_input" ;;
!   *) ac_comsub= ;;
    esac
  
!   ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
!   sed -e "$ac_comsub
! s%@configure_input@%$configure_input%g
! s%@srcdir@%$srcdir%g
! s%@top_srcdir@%$top_srcdir%g
! s%@INSTALL@%$INSTALL%g
! " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
! fi; done
! rm -f conftest.s*
  
  # 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='\3'
! ac_dD='%g'
! # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
! ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
! ac_uB='\([ 	]\)%\1#\2define\3'
  ac_uC=' '
! ac_uD='\4%g'
! # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
! ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
! ac_eB='$%\1#\2define\3'
! ac_eC=' '
! ac_eD='%g'
  
! if test "${CONFIG_HEADERS+set}" != set; then
! EOF
! cat >> $CONFIG_STATUS <<EOF
!   CONFIG_HEADERS="include/config.h gcj/libgcj-config.h"
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! fi
! for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
!   case "$ac_file" in
!   *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
!        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
!   *) ac_file_in="${ac_file}.in" ;;
    esac
  
!   echo creating $ac_file
  
!   rm -f conftest.frag conftest.in conftest.out
!   ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
!   cat $ac_file_inputs > conftest.in
  
! EOF
  
! # Transform confdefs.h into a sed script conftest.vals that substitutes
! # the proper values into config.h.in to produce config.h.  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.vals
! cat > conftest.hdr <<\EOF
! s/[\\&%]/\\&/g
! s%[\\$`]%\\&%g
! s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
! s%ac_d%ac_u%gp
! s%ac_u%ac_e%gp
! EOF
! sed -n -f conftest.hdr confdefs.h > conftest.vals
! rm -f conftest.hdr
  
  # 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.vals <<\EOF
! s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
! EOF
  
! # Break up conftest.vals because some shells have a limit on
! # the size of here documents, and old seds have small limits too.
  
  rm -f conftest.tail
! while :
  do
!   ac_lines=`grep -c . conftest.vals`
!   # grep -c gives empty output for an empty file on some AIX systems.
!   if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
!   # Write a limited-size here document to conftest.frag.
!   echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
!   sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
    echo 'CEOF
!   sed -f conftest.frag conftest.in > conftest.out
!   rm -f conftest.in
!   mv conftest.out conftest.in
! ' >> $CONFIG_STATUS
!   sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
!   rm -f conftest.vals
!   mv conftest.tail conftest.vals
  done
! rm -f conftest.vals
  
! cat >> $CONFIG_STATUS <<\EOF
!   rm -f conftest.frag conftest.h
!   echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
!   cat conftest.in >> conftest.h
!   rm -f conftest.in
!   if cmp -s $ac_file conftest.h 2>/dev/null; then
!     echo "$ac_file is unchanged"
!     rm -f conftest.h
    else
!     # Remove last slash and all that follows it.  Not all systems have dirname.
!       ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
!       if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
!       # The file is in a subdirectory.
!       test ! -d "$ac_dir" && mkdir "$ac_dir"
!     fi
!     rm -f $ac_file
!     mv conftest.h $ac_file
    fi
! fi; done
  
! EOF
  
! cat >> $CONFIG_STATUS <<EOF
! ac_sources="include/$PLATFORMH java/io/natFile${FILE-${PLATFORM}}.cc java/io/natFileDescriptor${FILE-${PLATFORM}}.cc java/lang/${PLATFORM}Process.java java/lang/nat${PLATFORM}Process.cc java/net/natInetAddress${PLATFORMNET}.cc java/net/natNetworkInterface${PLATFORMNET}.cc gnu/java/net/natPlainSocketImpl${PLATFORMNET}.cc gnu/java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc gnu/java/nio/natPipeImpl${PLATFORM}.cc gnu/java/nio/natSelectorImpl${PLATFORM}.cc include/$GCHDR include/$THREADH sysdep/$sysdeps_dir/locks.h $SIGNAL_HANDLER $SIGNAL_HANDLER_AUX"
! ac_dests="include/platform.h java/io/natFile.cc java/io/natFileDescriptor.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 include/java-gc.h include/java-threads.h sysdep/locks.h include/java-signal.h include/java-signal-aux.h"
! EOF
  
! cat >> $CONFIG_STATUS <<\EOF
! srcdir=$ac_given_srcdir
! while test -n "$ac_sources"; do
!   set $ac_dests; ac_dest=$1; shift; ac_dests=$*
!   set $ac_sources; ac_source=$1; shift; ac_sources=$*
  
!   echo "linking $srcdir/$ac_source to $ac_dest"
  
    if test ! -r $srcdir/$ac_source; then
!     { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
    fi
    rm -f $ac_dest
  
    # Make relative symlinks.
!   # Remove last slash and all that follows it.  Not all systems have dirname.
!   ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
!   if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
!     # The dest file is in a subdirectory.
!     test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
!     ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
!     # A "../" for each directory in $ac_dest_dir_suffix.
!     ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
    else
!     ac_dest_dir_suffix= ac_dots=
!   fi
  
!   case "$srcdir" in
!   [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
!   *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
    esac
  
!   # Make a symlink if possible; otherwise try a hard link.
!   if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
!     ln $srcdir/$ac_source $ac_dest; then :
!   else
!     { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
!   fi
  done
! EOF
! cat >> $CONFIG_STATUS <<EOF
  
! srcdir=${srcdir}
! host=${host}
! target=${target}
! with_multisubdir=${with_multisubdir}
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! libgcj_basedir=${libgcj_basedir}
! CC="${CC}"
! CXX="${CXX}"
! ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
  
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! am_indx=1
! for am_file in include/config.h gcj/libgcj-config.h; do
!   case " $CONFIG_HEADERS " in
!   *" $am_file "*)
!     echo timestamp > `echo $am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
!     ;;
!   esac
!   am_indx=`expr "$am_indx" + 1`
  done
! # Only add multilib support code if we just rebuilt top-level Makefile.
  case " $CONFIG_FILES " in
   *" Makefile "*)
     LD="${ORIGINAL_LD_FOR_MULTILIBS}"
     ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
     ;;
  esac
  
! # Make subdirectories and `.d' files.  Look in both srcdir and
! # builddir for the .java files.
! h=`${PWDCMD-pwd}`
! : > deps.mk
! ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) ;
!   find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) | \
!    fgrep -v testsuite | \
!    sed -e 's/\.java/.d/'\;'s/\.cc/.d/'\;'s/\.c/.d/' | \
!    while read f; do
!       echo "include $f" >> deps.mk
!       test -f $f || {
  
! 	 d=`echo $f | sed -e 's,/[^/]*$,,'`
  
- 	 if test ! -d $d; then
- 	   $libgcj_basedir/../mkinstalldirs $d
- 	 fi;
- 	 echo > $f
-       }
-    done
  
! exit 0
! EOF
! chmod +x $CONFIG_STATUS
! rm -fr confdefs* $ac_clean_files
! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  
  if test "$no_recursion" != yes; then
  
    # Remove --cache-file and --srcdir arguments so they do not pile up.
--- 15751,17660 ----
  # We get this from the environment.
  
  
!                                                                                                               ac_config_files="$ac_config_files Makefile libgcj.pc libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile external/Makefile external/sax/Makefile external/w3c_dom/Makefile"
! 
! 
!           ac_config_commands="$ac_config_commands default"
! 
! 
! 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 "${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 "${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 "${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 "${am__fastdepGCJ_TRUE}" && test -z "${am__fastdepGCJ_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"am__fastdepGCJ\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"am__fastdepGCJ\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${TESTSUBDIR_TRUE}" && test -z "${TESTSUBDIR_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"TESTSUBDIR\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"TESTSUBDIR\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${ONESTEP_TRUE}" && test -z "${ONESTEP_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"ONESTEP\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"ONESTEP\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${JAVA_HOME_SET_TRUE}" && test -z "${JAVA_HOME_SET_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"JAVA_HOME_SET\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"JAVA_HOME_SET\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${USING_WIN32_PLATFORM_TRUE}" && test -z "${USING_WIN32_PLATFORM_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_WIN32_PLATFORM\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_WIN32_PLATFORM\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${USING_POSIX_PLATFORM_TRUE}" && test -z "${USING_POSIX_PLATFORM_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_POSIX_PLATFORM\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_POSIX_PLATFORM\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${USING_ECOS_PLATFORM_TRUE}" && test -z "${USING_ECOS_PLATFORM_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_ECOS_PLATFORM\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_ECOS_PLATFORM\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${USING_DARWIN_CRT_TRUE}" && test -z "${USING_DARWIN_CRT_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_DARWIN_CRT\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_DARWIN_CRT\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${XLIB_AWT_TRUE}" && test -z "${XLIB_AWT_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"XLIB_AWT\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"XLIB_AWT\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${GTK_AWT_TRUE}" && test -z "${GTK_AWT_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"GTK_AWT\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"GTK_AWT\" 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 "${USING_BOEHMGC_TRUE}" && test -z "${USING_BOEHMGC_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_BOEHMGC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_BOEHMGC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${USING_NOGC_TRUE}" && test -z "${USING_NOGC_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_NOGC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_NOGC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${USING_POSIX_THREADS_TRUE}" && test -z "${USING_POSIX_THREADS_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_POSIX_THREADS\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_POSIX_THREADS\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${USING_WIN32_THREADS_TRUE}" && test -z "${USING_WIN32_THREADS_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_WIN32_THREADS\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_WIN32_THREADS\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${USING_NO_THREADS_TRUE}" && test -z "${USING_NO_THREADS_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_NO_THREADS\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_NO_THREADS\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${USING_GCC_TRUE}" && test -z "${USING_GCC_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"USING_GCC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"USING_GCC\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${SUPPLY_BACKTRACE_TRUE}" && test -z "${SUPPLY_BACKTRACE_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"SUPPLY_BACKTRACE\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"SUPPLY_BACKTRACE\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${NATIVE_TRUE}" && test -z "${NATIVE_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"NATIVE\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"NATIVE\" was never defined.
! Usually this means the macro was only invoked conditionally." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! if test -z "${NEEDS_DATA_START_TRUE}" && test -z "${NEEDS_DATA_START_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"NEEDS_DATA_START\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"NEEDS_DATA_START\" 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 libjava $as_me version-unused, 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="\\
+ libjava config.status version-unused
+ 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"
! srcdir=${srcdir}
! host=${host}
! target=${target}
! with_multisubdir=${with_multisubdir}
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! libgcj_basedir=${libgcj_basedir}
! CC="${CC}"
! CXX="${CXX}"
! ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
! 
! 
! _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" ;;
!   "libgcj.pc" ) CONFIG_FILES="$CONFIG_FILES libgcj.pc" ;;
!   "libgcj.spec" ) CONFIG_FILES="$CONFIG_FILES libgcj.spec" ;;
!   "libgcj-test.spec" ) CONFIG_FILES="$CONFIG_FILES libgcj-test.spec" ;;
!   "gnu/classpath/Configuration.java" ) CONFIG_FILES="$CONFIG_FILES gnu/classpath/Configuration.java" ;;
!   "gcj/Makefile" ) CONFIG_FILES="$CONFIG_FILES gcj/Makefile" ;;
!   "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
!   "testsuite/Makefile" ) CONFIG_FILES="$CONFIG_FILES testsuite/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" ;;
!   "include/platform.h" ) CONFIG_LINKS="$CONFIG_LINKS include/platform.h:include/$PLATFORMH" ;;
!   "java/io/natFile.cc" ) CONFIG_LINKS="$CONFIG_LINKS java/io/natFile.cc:java/io/natFile${FILE-${PLATFORM}}.cc" ;;
!   "java/lang/ConcreteProcess.java" ) CONFIG_LINKS="$CONFIG_LINKS java/lang/ConcreteProcess.java:java/lang/${PLATFORM}Process.java" ;;
!   "java/lang/natConcreteProcess.cc" ) CONFIG_LINKS="$CONFIG_LINKS java/lang/natConcreteProcess.cc:java/lang/nat${PLATFORM}Process.cc" ;;
!   "java/net/natInetAddress.cc" ) CONFIG_LINKS="$CONFIG_LINKS java/net/natInetAddress.cc:java/net/natInetAddress${PLATFORMNET}.cc" ;;
!   "java/net/natNetworkInterface.cc" ) CONFIG_LINKS="$CONFIG_LINKS java/net/natNetworkInterface.cc:java/net/natNetworkInterface${PLATFORMNET}.cc" ;;
!   "gnu/java/net/natPlainSocketImpl.cc" ) CONFIG_LINKS="$CONFIG_LINKS gnu/java/net/natPlainSocketImpl.cc:gnu/java/net/natPlainSocketImpl${PLATFORMNET}.cc" ;;
!   "gnu/java/net/natPlainDatagramSocketImpl.cc" ) CONFIG_LINKS="$CONFIG_LINKS gnu/java/net/natPlainDatagramSocketImpl.cc:gnu/java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc" ;;
!   "gnu/java/nio/natPipeImpl.cc" ) CONFIG_LINKS="$CONFIG_LINKS gnu/java/nio/natPipeImpl.cc:gnu/java/nio/natPipeImpl${PLATFORM}.cc" ;;
!   "gnu/java/nio/natSelectorImpl.cc" ) CONFIG_LINKS="$CONFIG_LINKS gnu/java/nio/natSelectorImpl.cc:gnu/java/nio/natSelectorImpl${PLATFORM}.cc" ;;
!   "gnu/java/nio/channels/natFileChannelImpl.cc" ) CONFIG_LINKS="$CONFIG_LINKS gnu/java/nio/channels/natFileChannelImpl.cc:gnu/java/nio/channels/natFileChannel${FILE-${PLATFORM}}.cc" ;;
!   "include/java-gc.h" ) CONFIG_LINKS="$CONFIG_LINKS include/java-gc.h:include/$GCHDR" ;;
!   "include/java-threads.h" ) CONFIG_LINKS="$CONFIG_LINKS include/java-threads.h:include/$THREADH" ;;
!   "sysdep/locks.h" ) CONFIG_LINKS="$CONFIG_LINKS sysdep/locks.h:sysdep/$sysdeps_dir/locks.h" ;;
!   "include/java-signal.h" ) CONFIG_LINKS="$CONFIG_LINKS include/java-signal.h:$SIGNAL_HANDLER" ;;
!   "include/java-signal-aux.h" ) CONFIG_LINKS="$CONFIG_LINKS include/java-signal-aux.h:$SIGNAL_HANDLER_AUX" ;;
!   "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
!   "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
!   "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
!   "gcj/libgcj-config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS gcj/libgcj-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,@libgcj_basedir@,$libgcj_basedir,;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,@target_noncanonical@,$target_noncanonical,;t t
! s,@LN_S@,$LN_S,;t t
! s,@mkinstalldirs@,$mkinstalldirs,;t t
! s,@CC@,$CC,;t t
! s,@ac_ct_CC@,$ac_ct_CC,;t t
! s,@EXEEXT@,$EXEEXT,;t t
! s,@OBJEXT@,$OBJEXT,;t t
! s,@CXX@,$CXX,;t t
! s,@ac_ct_CXX@,$ac_ct_CXX,;t t
! s,@CFLAGS@,$CFLAGS,;t t
! s,@CXXFLAGS@,$CXXFLAGS,;t t
! s,@LDFLAGS@,$LDFLAGS,;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,@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,@CXXDEPMODE@,$CXXDEPMODE,;t t
! s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
! s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
! s,@AS@,$AS,;t t
! s,@ac_ct_AS@,$ac_ct_AS,;t t
! s,@AR@,$AR,;t t
! s,@ac_ct_AR@,$ac_ct_AR,;t t
! s,@RANLIB@,$RANLIB,;t t
! s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;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,@LIBGCJ_CFLAGS@,$LIBGCJ_CFLAGS,;t t
! s,@LIBGCJ_CXXFLAGS@,$LIBGCJ_CXXFLAGS,;t t
! s,@LIBGCJ_JAVAFLAGS@,$LIBGCJ_JAVAFLAGS,;t t
! s,@LIBGCJ_LD_SYMBOLIC@,$LIBGCJ_LD_SYMBOLIC,;t t
! s,@INCLTDL@,$INCLTDL,;t t
! s,@LIBLTDL@,$LIBLTDL,;t t
! s,@DIRLTDL@,$DIRLTDL,;t t
! s,@LIBTOOL@,$LIBTOOL,;t t
! s,@CXXCPP@,$CXXCPP,;t t
! s,@CPPFLAGS@,$CPPFLAGS,;t t
! s,@GCJ@,$GCJ,;t t
! s,@GCJFLAGS@,$GCJFLAGS,;t t
! s,@GCJDEPMODE@,$GCJDEPMODE,;t t
! s,@am__fastdepGCJ_TRUE@,$am__fastdepGCJ_TRUE,;t t
! s,@am__fastdepGCJ_FALSE@,$am__fastdepGCJ_FALSE,;t t
! s,@subdirs@,$subdirs,;t t
! s,@TESTSUBDIR_TRUE@,$TESTSUBDIR_TRUE,;t t
! s,@TESTSUBDIR_FALSE@,$TESTSUBDIR_FALSE,;t t
! s,@ONESTEP_TRUE@,$ONESTEP_TRUE,;t t
! s,@ONESTEP_FALSE@,$ONESTEP_FALSE,;t t
! s,@JAVA_HOME_SET_TRUE@,$JAVA_HOME_SET_TRUE,;t t
! s,@JAVA_HOME_SET_FALSE@,$JAVA_HOME_SET_FALSE,;t t
! s,@JAVA_HOME@,$JAVA_HOME,;t t
! s,@LIBGCJDEBUG@,$LIBGCJDEBUG,;t t
! s,@INTERPRETER@,$INTERPRETER,;t t
! s,@LIBFFI@,$LIBFFI,;t t
! s,@LIBFFIINCS@,$LIBFFIINCS,;t t
! s,@PLATFORM_INNER_NAT_HDRS@,$PLATFORM_INNER_NAT_HDRS,;t t
! s,@CPP@,$CPP,;t t
! s,@EGREP@,$EGREP,;t t
! s,@USING_WIN32_PLATFORM_TRUE@,$USING_WIN32_PLATFORM_TRUE,;t t
! s,@USING_WIN32_PLATFORM_FALSE@,$USING_WIN32_PLATFORM_FALSE,;t t
! s,@USING_POSIX_PLATFORM_TRUE@,$USING_POSIX_PLATFORM_TRUE,;t t
! s,@USING_POSIX_PLATFORM_FALSE@,$USING_POSIX_PLATFORM_FALSE,;t t
! s,@USING_ECOS_PLATFORM_TRUE@,$USING_ECOS_PLATFORM_TRUE,;t t
! s,@USING_ECOS_PLATFORM_FALSE@,$USING_ECOS_PLATFORM_FALSE,;t t
! s,@USING_DARWIN_CRT_TRUE@,$USING_DARWIN_CRT_TRUE,;t t
! s,@USING_DARWIN_CRT_FALSE@,$USING_DARWIN_CRT_FALSE,;t t
! s,@SYSTEMSPEC@,$SYSTEMSPEC,;t t
! s,@LIBGCJTESTSPEC@,$LIBGCJTESTSPEC,;t t
! s,@ZLIBSPEC@,$ZLIBSPEC,;t t
! s,@ZLIBTESTSPEC@,$ZLIBTESTSPEC,;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,@TOOLKIT@,$TOOLKIT,;t t
! s,@XLIB_AWT_TRUE@,$XLIB_AWT_TRUE,;t t
! s,@XLIB_AWT_FALSE@,$XLIB_AWT_FALSE,;t t
! s,@GTK_AWT_TRUE@,$GTK_AWT_TRUE,;t t
! s,@GTK_AWT_FALSE@,$GTK_AWT_FALSE,;t t
! s,@GTK_CAIRO_TRUE@,$GTK_CAIRO_TRUE,;t t
! s,@GTK_CAIRO_FALSE@,$GTK_CAIRO_FALSE,;t t
! s,@PKG_CONFIG@,$PKG_CONFIG,;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,@GCLIBS@,$GCLIBS,;t t
! s,@GCINCS@,$GCINCS,;t t
! s,@GCDEPS@,$GCDEPS,;t t
! s,@GCSPEC@,$GCSPEC,;t t
! s,@JC1GCSPEC@,$JC1GCSPEC,;t t
! s,@GCTESTSPEC@,$GCTESTSPEC,;t t
! s,@USING_BOEHMGC_TRUE@,$USING_BOEHMGC_TRUE,;t t
! s,@USING_BOEHMGC_FALSE@,$USING_BOEHMGC_FALSE,;t t
! s,@USING_NOGC_TRUE@,$USING_NOGC_TRUE,;t t
! s,@USING_NOGC_FALSE@,$USING_NOGC_FALSE,;t t
! s,@THREADLIBS@,$THREADLIBS,;t t
! s,@THREADINCS@,$THREADINCS,;t t
! s,@THREADDEPS@,$THREADDEPS,;t t
! s,@THREADSPEC@,$THREADSPEC,;t t
! s,@THREADLDFLAGS@,$THREADLDFLAGS,;t t
! s,@THREADCXXFLAGS@,$THREADCXXFLAGS,;t t
! s,@USING_POSIX_THREADS_TRUE@,$USING_POSIX_THREADS_TRUE,;t t
! s,@USING_POSIX_THREADS_FALSE@,$USING_POSIX_THREADS_FALSE,;t t
! s,@USING_WIN32_THREADS_TRUE@,$USING_WIN32_THREADS_TRUE,;t t
! s,@USING_WIN32_THREADS_FALSE@,$USING_WIN32_THREADS_FALSE,;t t
! s,@USING_NO_THREADS_TRUE@,$USING_NO_THREADS_TRUE,;t t
! s,@USING_NO_THREADS_FALSE@,$USING_NO_THREADS_FALSE,;t t
! s,@HASH_SYNC_SPEC@,$HASH_SYNC_SPEC,;t t
! s,@USING_GCC_TRUE@,$USING_GCC_TRUE,;t t
! s,@USING_GCC_FALSE@,$USING_GCC_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,@tool_include_dir@,$tool_include_dir,;t t
! s,@LIBICONV@,$LIBICONV,;t t
! s,@LTLIBICONV@,$LTLIBICONV,;t t
! s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t
! s,@GTK_LIBS@,$GTK_LIBS,;t t
! s,@GLIB_CFLAGS@,$GLIB_CFLAGS,;t t
! s,@GLIB_LIBS@,$GLIB_LIBS,;t t
! s,@LIBART_CFLAGS@,$LIBART_CFLAGS,;t t
! s,@LIBART_LIBS@,$LIBART_LIBS,;t t
! s,@SUPPLY_BACKTRACE_TRUE@,$SUPPLY_BACKTRACE_TRUE,;t t
! s,@SUPPLY_BACKTRACE_FALSE@,$SUPPLY_BACKTRACE_FALSE,;t t
! s,@GCJH@,$GCJH,;t t
! s,@ZIP@,$ZIP,;t t
! s,@CLASSPATH_SEPARATOR@,$CLASSPATH_SEPARATOR,;t t
! s,@ac_ct_GCJ@,$ac_ct_GCJ,;t t
! s,@ZLIBS@,$ZLIBS,;t t
! s,@SYS_ZLIBS@,$SYS_ZLIBS,;t t
! s,@ZINCS@,$ZINCS,;t t
! s,@DIVIDESPEC@,$DIVIDESPEC,;t t
! s,@CHECKREFSPEC@,$CHECKREFSPEC,;t t
! s,@EXCEPTIONSPEC@,$EXCEPTIONSPEC,;t t
! s,@IEEESPEC@,$IEEESPEC,;t t
! s,@NATIVE_TRUE@,$NATIVE_TRUE,;t t
! s,@NATIVE_FALSE@,$NATIVE_FALSE,;t t
! s,@NEEDS_DATA_START_TRUE@,$NEEDS_DATA_START_TRUE,;t t
! s,@NEEDS_DATA_START_FALSE@,$NEEDS_DATA_START_FALSE,;t t
! s,@GCC_UNWIND_INCLUDE@,$GCC_UNWIND_INCLUDE,;t t
! s,@toolexecdir@,$toolexecdir,;t t
! s,@toolexecmainlibdir@,$toolexecmainlibdir,;t t
! s,@toolexeclibdir@,$toolexeclibdir,;t t
! s,@GCJVERSION@,$GCJVERSION,;t t
! s,@gxx_include_dir@,$gxx_include_dir,;t t
! s,@libstdcxx_incdir@,$libstdcxx_incdir,;t t
! s,@ALLOCA@,$ALLOCA,;t t
! s,@PERL@,$PERL,;t t
! s,@BACKTRACESPEC@,$BACKTRACESPEC,;t t
! s,@SYSDEP_SOURCES@,$SYSDEP_SOURCES,;t t
! s,@here@,$here,;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
!  ;;
!     default ) # Only add multilib support code if we just rebuilt top-level Makefile.
  case " $CONFIG_FILES " in
   *" Makefile "*)
     LD="${ORIGINAL_LD_FOR_MULTILIBS}"
     ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
     ;;
  esac
+ for ac_multi_file in $CONFIG_FILES; do
+   case $ac_multi_file in
+   */Makefile)
+     grep "^MULTI[^ ]* =" Makefile >> "$ac_multi_file" ;;
+   esac
+ done
+  ;;
+   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
  
+ #
+ # CONFIG_SUBDIRS section.
+ #
  if test "$no_recursion" != yes; then
  
    # Remove --cache-file and --srcdir arguments so they do not pile up.
*************** if test "$no_recursion" != yes; then
*** 9692,9781 ****
        ac_prev=
        continue
      fi
!     case "$ac_arg" in
      -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=*)
        ;;
      -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
        ac_prev=srcdir ;;
      -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
        ;;
      *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;;
      esac
    done
  
!   for ac_config_dir in $DIRLTDL; do
  
      # Do not complain, so a configure script can configure whichever
      # parts of a large source tree are present.
!     if test ! -d $srcdir/$ac_config_dir; then
!       continue
!     fi
  
!     echo configuring in $ac_config_dir
  
!     case "$srcdir" in
!     .) ;;
!     *)
!       if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :;
!       else
!         { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; }
!       fi
!       ;;
!     esac
  
!     ac_popdir=`pwd`
!     cd $ac_config_dir
  
!       # A "../" for each directory in /$ac_config_dir.
!       ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
  
!     case "$srcdir" in
!     .) # No --srcdir option.  We are building in place.
!       ac_sub_srcdir=$srcdir ;;
!     /*) # Absolute path.
!       ac_sub_srcdir=$srcdir/$ac_config_dir ;;
!     *) # Relative path.
!       ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;;
!     esac
  
      # Check for guested configure; otherwise get Cygnus style configure.
!     if test -f $ac_sub_srcdir/configure; then
!       ac_sub_configure=$ac_sub_srcdir/configure
!     elif test -f $ac_sub_srcdir/configure.in; then
        ac_sub_configure=$ac_configure
      else
!       echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2
        ac_sub_configure=
      fi
  
      # The recursion is here.
      if test -n "$ac_sub_configure"; then
- 
        # Make the cache file name correct relative to the subdirectory.
!       case "$cache_file" in
!       /*) ac_sub_cache_file=$cache_file ;;
        *) # Relative path.
!         ac_sub_cache_file="$ac_dots$cache_file" ;;
        esac
-   case "$ac_given_INSTALL" in
-         [/$]*) INSTALL="$ac_given_INSTALL" ;;
-         *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
-         esac
  
!       echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
        # The eval makes quoting arguments work.
!       if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir
!       then :
!       else
!         { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; }
!       fi
      fi
  
!     cd "$ac_popdir"
    done
  fi
  
--- 17665,17831 ----
        ac_prev=
        continue
      fi
!     case $ac_arg in
      -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=*)
!       ;;
!     --config-cache | -C)
        ;;
      -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
        ac_prev=srcdir ;;
      -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
        ;;
+     -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+       ac_prev=prefix ;;
+     -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+       ;;
      *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;;
      esac
    done
  
!   # Always prepend --prefix to ensure using the same prefix
!   # in subdir configurations.
!   ac_sub_configure_args="--prefix=$prefix $ac_sub_configure_args"
! 
!   ac_popdir=`pwd`
!   for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
  
      # Do not complain, so a configure script can configure whichever
      # parts of a large source tree are present.
!     test -d $srcdir/$ac_dir || continue
  
!     { echo "$as_me:$LINENO: configuring in $ac_dir" >&5
! echo "$as_me: configuring in $ac_dir" >&6;}
!     { 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
! 
! 
!     cd $ac_dir
  
      # Check for guested configure; otherwise get Cygnus style configure.
!     if test -f $ac_srcdir/configure.gnu; then
!       ac_sub_configure="$SHELL '$ac_srcdir/configure.gnu'"
!     elif test -f $ac_srcdir/configure; then
!       ac_sub_configure="$SHELL '$ac_srcdir/configure'"
!     elif test -f $ac_srcdir/configure.in; then
        ac_sub_configure=$ac_configure
      else
!       { echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5
! echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
        ac_sub_configure=
      fi
  
      # The recursion is here.
      if test -n "$ac_sub_configure"; then
        # Make the cache file name correct relative to the subdirectory.
!       case $cache_file in
!       [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
        *) # Relative path.
! 	ac_sub_cache_file=$ac_top_builddir$cache_file ;;
        esac
  
!       { echo "$as_me:$LINENO: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
! echo "$as_me: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
        # The eval makes quoting arguments work.
!       eval $ac_sub_configure $ac_sub_configure_args \
! 	   --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir ||
! 	{ { echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5
! echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;}
!    { (exit 1); exit 1; }; }
      fi
  
!     cd $ac_popdir
    done
  fi
  
diff -Nrcpad gcc-3.4.3/libjava/configure.ac gcc-4.0.0/libjava/configure.ac
*** gcc-3.4.3/libjava/configure.ac	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/configure.ac	Wed Apr  6 21:38:26 2005
***************
*** 0 ****
--- 1,1435 ----
+ dnl # Process this with autoconf to create configure
+ AC_PREREQ(2.59)
+ # Still use "libjava" here to placate dejagnu.
+ AC_INIT([libjava], [version-unused],, [libjava])
+ 
+ AC_CONFIG_SRCDIR(java/lang/System.java)
+ 
+ # We use these options to decide which functions to include.
+ AC_ARG_WITH(target-subdir,
+   AS_HELP_STRING([--with-target-subdir=SUBDIR],
+                  [configure in a subdirectory]))
+ 
+ # We may get other options which we don't document:
+ # --with-target-subdir, --with-multisrctop, --with-multisubdir
+ 
+ # When building with srcdir == objdir, links to the source files will
+ # be created in directories within the target_subdir.  We have to
+ # adjust toplevel_srcdir accordingly, so that configure finds
+ # install-sh and other auxiliary files that live in the top-level
+ # source directory.
+ if test "${srcdir}" = "."; then
+   if test -z "${with_target_subdir}"; then
+     toprel=".."
+   else
+     if test "${with_target_subdir}" != "."; then
+       toprel="${with_multisrctop}../.."
+     else
+       toprel="${with_multisrctop}.."
+     fi
+   fi
+ else
+   toprel=".."
+ fi
+ 
+ libgcj_basedir=$srcdir/$toprel/./libjava
+ AC_SUBST(libgcj_basedir)
+ 
+ AC_CANONICAL_SYSTEM
+ _GCC_TOPLEV_NONCANONICAL_BUILD
+ _GCC_TOPLEV_NONCANONICAL_TARGET
+ 
+ AC_SUBST(target_noncanonical)
+ 
+ # This works around the fact that libtool configuration may change LD
+ # for this particular configuration, but some shells, instead of
+ # keeping the changes in LD private, export them just because LD is
+ # exported.
+ ORIGINAL_LD_FOR_MULTILIBS=$LD
+ 
+ AC_PROG_LN_S
+ 
+ # This works around an automake problem.
+ mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
+ AC_SUBST(mkinstalldirs)
+ 
+ AC_ARG_WITH(cross-host,
+   AS_HELP_STRING([--with-cross-host=HOST],
+                  [configure with a cross compiler from HOST]))
+ 
+ AC_ARG_WITH(newlib,
+   AS_HELP_STRING([--with-newlib],
+                  [configure with newlib]))
+ 
+ AC_ARG_ENABLE(version-specific-runtime-libs,
+   AS_HELP_STRING([--enable-version-specific-runtime-libs],    
+                  [specify that runtime libraries should be installed in a compiler-specific directory]),
+     [case "$enableval" in
+       yes) version_specific_libs=yes ;;
+       no)  version_specific_libs=no ;;
+       *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
+      esac],
+     [version_specific_libs=no]
+ )
+ 
+ # Default to --enable-multilib
+ AC_ARG_ENABLE(multilib,
+   AS_HELP_STRING([--enable-multilib],
+                  [build many library versions (default)]),
+ [case "${enableval}" in
+   yes) multilib=yes ;;
+   no)  multilib=no ;;
+   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
+  esac], [multilib=yes])dnl
+ 
+ # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
+ GCC_NO_EXECUTABLES
+ 
+ # (1) We use an abnormal CXX (without library references), so we
+ # must cache it under a different name.
+ # (2) CC, CFLAGS, CXX, CXXFLAGS, LDFLAGS must not be 'precious', or
+ # the non-multilib-adjusted value will be used in multilibs.
+ # (3) As a side effect, we must SUBST CXXFLAGS, CFLAGS, and LDFLAGS ourselves.
+ # (4) As another side effect, automake doesn't automatically include them
+ # in Makefile.in.
+ # (5) For libstdc++-v3, -fno-builtin must be present here so that a
+ # non-conflicting form of std::exit can be guessed by AC_PROG_CXX, and
+ # used in later tests.  This may not be necessary in libjava; I don't know.
+ m4_define([ac_cv_prog_CXX],[glibcxx_cv_prog_CXX])
+ m4_rename([_AC_ARG_VAR_PRECIOUS],[glibcxx_PRECIOUS])
+ m4_define([_AC_ARG_VAR_PRECIOUS],[])
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-builtin"
+ AC_PROG_CC
+ AC_PROG_CXX
+ CXXFLAGS="$save_CXXFLAGS"
+ m4_rename([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+ AC_SUBST(CFLAGS)
+ AC_SUBST(CXXFLAGS)
+ AC_SUBST(LDFLAGS)
+ 
+ AM_INIT_AUTOMAKE([1.9.0])
+ 
+ AC_CHECK_TOOL(AS, as)
+ AC_CHECK_TOOL(AR, ar)
+ AC_CHECK_TOOL(RANLIB, ranlib, :)
+ 
+ AC_PROG_INSTALL
+ 
+ AM_MAINTAINER_MODE
+ 
+ AC_EXEEXT
+ 
+ # configure.host sets the following important variables
+ #	libgcj_cflags    - host specific C compiler flags
+ #	libgcj_cxxflags  - host specific C++ compiler flags
+ #	libgcj_javaflags - host specific Java compiler flags
+ 
+ libgcj_cflags=
+ libgcj_cxxflags=
+ libgcj_javaflags=
+ 
+ . ${srcdir}/configure.host
+ 
+ LIBGCJ_CFLAGS="${libgcj_cflags}"
+ LIBGCJ_CXXFLAGS="${libgcj_cxxflags}"
+ LIBGCJ_JAVAFLAGS="${libgcj_javaflags}"
+ LIBGCJ_LD_SYMBOLIC="${libgcj_ld_symbolic}"
+ AC_SUBST(LIBGCJ_CFLAGS)
+ AC_SUBST(LIBGCJ_CXXFLAGS)
+ AC_SUBST(LIBGCJ_JAVAFLAGS)
+ AC_SUBST(LIBGCJ_LD_SYMBOLIC)
+ 
+ AC_CONFIG_HEADERS([include/config.h gcj/libgcj-config.h])
+ 
+ # Only use libltdl for non-newlib builds.
+ if test "x${with_newlib}" = "x" || test "x${with_newlib}" = "xno"; then
+    AC_LIBLTDL_CONVENIENCE
+    AC_LIBTOOL_DLOPEN
+    DIRLTDL=libltdl
+    AC_DEFINE(USE_LTDL, 1, [Define if libltdl is in use.])
+    # Sigh.  Libtool's macro doesn't do the right thing.
+    INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL"
+    # FIXME: this is a hack.
+    sub_auxdir="`cd $ac_aux_dir && ${PWDCMD-pwd}`"
+    ac_configure_args="$ac_configure_args --with-auxdir=$sub_auxdir"
+ fi
+ AC_SUBST(INCLTDL)
+ AC_SUBST(LIBLTDL)
+ AC_SUBST(DIRLTDL)
+ AC_PROG_LIBTOOL
+ AM_PROG_GCJ
+ AM_PROG_CC_C_O
+ AC_CONFIG_SUBDIRS(libltdl)
+ 
+ # The -no-testsuite modules omit the test subdir.
+ AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
+ 
+ # Should the runtime set system properties by examining the 
+ # environment variable GCJ_PROPERTIES?
+ AC_ARG_ENABLE(getenv-properties,
+   AS_HELP_STRING([--disable-getenv-properties],
+                  [don't set system properties from GCJ_PROPERTIES]))
+ 
+ # Whether GCJ_PROPERTIES is used depends on the target.
+ if test -z "$enable_getenv_properties"; then
+    enable_getenv_properties=${enable_getenv_properties_default-yes}
+ fi
+ if test "$enable_getenv_properties" = no; then
+    AC_DEFINE(DISABLE_GETENV_PROPERTIES, 1,
+      [Define if system properties shouldn't be read from getenv("GCJ_PROPERTIES").])
+ fi
+ 
+ # Whether we should use arguments to main()
+ if test -z "$enable_main_args"; then
+    enable_main_args=${enable_main_args_default-yes}
+ fi
+ if test "$enable_main_args" = no; then
+    AC_DEFINE(DISABLE_MAIN_ARGS, 1, [Define if we should ignore arguments to main().])
+ fi
+ 
+ 
+ # Should we use hashtable-based synchronization?
+ # Currently works only for Linux X86/ia64
+ # Typically faster and more space-efficient
+ AC_ARG_ENABLE(hash-synchronization,
+   AS_HELP_STRING([--enable-hash-synchronization],
+                  [use global hash table for monitor locks]))
+ 
+ if test -z "$enable_hash_synchronization"; then
+    enable_hash_synchronization=$enable_hash_synchronization_default
+ fi
+ 
+ # Do we allow intermodule optimizations (i.e. compiling many files at once)?
+ AC_ARG_ENABLE(libgcj-multifile,
+   AS_HELP_STRING([--enable-libgcj-multifile]
+                  [allow compilation of several files at once]),
+ [case "${enableval}" in
+   yes) enable_libgcj_multifile=yes ;;
+   no)  enable_libgcj_multifile=no ;;
+   *) AC_MSG_ERROR(bad value ${enableval} for --enable-libgcj-multifile) ;;
+ esac],[enable_libgcj_multifile=no])
+ AM_CONDITIONAL(ONESTEP, test "$enable_libgcj_multifile" = yes)
+ 
+ AC_ARG_WITH(java-home,
+   AS_HELP_STRING([--with-java-home=DIRECTORY],
+                  [value of java.home system property]),
+ 		 [JAVA_HOME="${withval}"], [JAVA_HOME=""])
+ AM_CONDITIONAL(JAVA_HOME_SET, test ! -z "$JAVA_HOME")
+ AC_SUBST(JAVA_HOME)
+ 
+ # What is the native OS API for MinGW?
+ AC_ARG_WITH(win32-nlsapi,
+   AS_HELP_STRING([--with-win32-nlsapi=ansi or unicows or unicode],
+                  [native MinGW libgcj Win32 OS API (default is ansi)]),
+ [case "${withval}" in
+   ansi) with_win32_nlsapi=ansi ;;
+   unicows) with_win32_nlsapi=unicows ;;
+   unicode) with_win32_nlsapi=unicode ;;
+   *) AC_MSG_ERROR(Bad value ${withval} for --with-win32-nlsapi.) ;;
+ esac],[with_win32_nlsapi=ansi])
+ 
+ case "${with_win32_nlsapi}" in
+   unicows | unicode) 
+     AC_DEFINE(MINGW_LIBGCJ_UNICODE, 1,
+       [Define if MinGW libgcj uses the Windows UNICODE OS API.])
+     ;;
+ esac
+ 
+ # configure.host sets slow_pthread_self if the synchronization code should 
+ # try to avoid pthread_self calls by caching thread IDs in a hashtable.
+ if test "${slow_pthread_self}" = "yes"; then
+   AC_DEFINE(SLOW_PTHREAD_SELF, 1,
+     [Define if if the synchronization code should try to avoid pthread_self calls by caching thread IDs in a hashtable.])
+ fi
+ 
+ 
+ # See if the user has requested runtime debugging.
+ LIBGCJDEBUG="false"
+ AC_SUBST(LIBGCJDEBUG)
+ AC_ARG_ENABLE(libgcj-debug,
+   AS_HELP_STRING([--enable-libgcj-debug],
+                  [enable runtime debugging code]),
+   [if test "$enable_libgcj_debug" = yes; then
+     AC_DEFINE(DEBUG, 1, [Define this if you want runtime debugging enabled.])
+     LIBGCJDEBUG="true"
+   fi])
+ 
+ # Check for gc debugging.  This option is handled both here and in the GC.
+ AC_ARG_ENABLE(gc-debug,
+    AS_HELP_STRING([--enable-gc-debug],
+ 		  [include full support for pointer backtracing etc.]),
+ [ if test "$enable_gc_debug" = "yes"; then
+     AC_DEFINE(LIBGCJ_GC_DEBUG, 1, 
+ 	      [Define if we want to use debug calls into the garbage collector.])
+   fi])
+ 
+ # See if the user has the interpreter included.
+ AC_ARG_ENABLE(interpreter,
+   AS_HELP_STRING([--enable-interpreter],
+                  [enable interpreter]),
+   [if test "$enable_interpreter" = yes; then
+     # This can also be set in configure.host.
+     libgcj_interpreter=yes
+   elif test "$enable_interpreter" = no; then
+     libgcj_interpreter=no
+   fi])
+ 
+ if test "$libgcj_interpreter" = yes; then
+    AC_DEFINE(INTERPRETER, 1, [Define if you want a bytecode interpreter.])
+ fi
+ INTERPRETER="$libgcj_interpreter"
+ AC_SUBST(INTERPRETER)
+ 
+ AC_MSG_CHECKING([for exception model to use])
+ AC_LANG_PUSH(C++)
+ AC_ARG_ENABLE(sjlj-exceptions,
+   AS_HELP_STRING([--enable-sjlj-exceptions],
+                  [force use of builtin_setjmp for exceptions]),
+ [:],
+ [dnl Botheration.  Now we've got to detect the exception model.
+ dnl Link tests against libgcc.a are problematic since -- at least
+ dnl as of this writing -- we've not been given proper -L bits for
+ dnl single-tree newlib and libgloss.
+ dnl
+ dnl This is what AC_TRY_COMPILE would do if it didn't delete the
+ dnl conftest files before we got a change to grep them first.
+ cat > conftest.$ac_ext << EOF
+ [#]line __oline__ "configure"
+ struct S { ~S(); };
+ void bar();
+ void foo()
+ {
+   S s;
+   bar();
+ }
+ EOF
+ old_CXXFLAGS="$CXXFLAGS"  
+ CXXFLAGS=-S
+ if AC_TRY_EVAL(ac_compile); then
+   if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
+     enable_sjlj_exceptions=yes
+   elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
+     enable_sjlj_exceptions=no
+   fi
+ fi
+ CXXFLAGS="$old_CXXFLAGS"
+ rm -f conftest*])
+ if test x$enable_sjlj_exceptions = xyes; then
+   AC_DEFINE(SJLJ_EXCEPTIONS, 1,
+ 	[Define if the compiler is configured for setjmp/longjmp exceptions.])
+   ac_exception_model_name=sjlj
+ elif test x$enable_sjlj_exceptions = xno; then
+   ac_exception_model_name="call frame"
+ else
+   AC_MSG_ERROR([unable to detect exception model])
+ fi
+ AC_LANG_POP(C++)
+ AC_MSG_RESULT($ac_exception_model_name)
+ 
+ # If we are non using SJLJ exceptions, and this host does not have support 
+ # for unwinding from a signal handler, enable checked dereferences and divides.
+ if test $can_unwind_signal = no && test $enable_sjlj_exceptions = no; then
+   CHECKREFSPEC=-fcheck-references
+   DIVIDESPEC=-fuse-divide-subroutine
+   EXCEPTIONSPEC=
+ fi
+ 
+ # See if the user wants to disable java.net.  This is the mildly
+ # ugly way that we admit that target-side configuration sucks.
+ AC_ARG_ENABLE(java-net,
+   AS_HELP_STRING([--disable-java-net],
+                  [disable java.net]))
+ 
+ # Whether java.net is built by default can depend on the target.
+ if test -z "$enable_java_net"; then
+    enable_java_net=${enable_java_net_default-yes}
+ fi
+ if test "$enable_java_net" = no; then
+    AC_DEFINE(DISABLE_JAVA_NET, 1, [Define if java.net native functions should be stubbed out.])
+ fi
+ 
+ # See if the user wants to configure without libffi.  Some
+ # architectures don't support it, and default values are set in 
+ # configure.host.
+ AC_ARG_WITH(libffi,
+   AS_HELP_STRING([--without-libffi],
+                  [don't use libffi]),
+   [:],
+   [with_libffi=${with_libffi_default-yes}])
+ 
+ LIBFFI=
+ LIBFFIINCS=
+ if test "$with_libffi" != no; then
+    AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.])
+    LIBFFI=../libffi/libffi_convenience.la
+    LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
+ fi
+ AC_SUBST(LIBFFI)
+ AC_SUBST(LIBFFIINCS)
+ 
+ # See if the user wants to disable JVMPI support.
+ AC_ARG_ENABLE(jvmpi,
+   AS_HELP_STRING([--disable-jvmpi],
+                  [disable JVMPI support]))
+ 
+ if test "$enable_jvmpi" != no; then
+     AC_DEFINE(ENABLE_JVMPI, 1, [Define if you are using JVMPI.])
+ fi
+ 
+ # If the target is an eCos system, use the appropriate eCos
+ # I/O routines.
+ # FIXME: this should not be a local option but a global target
+ # system; at present there is no eCos target.
+ TARGET_ECOS=${PROCESS-"no"}
+ AC_ARG_WITH(ecos,
+ [  --with-ecos             enable runtime eCos target support],
+ TARGET_ECOS="$with_ecos"
+ )
+ 
+ supply_backtrace=no
+ 
+ PLATFORM_INNER_NAT_HDRS=
+ case "$TARGET_ECOS" in
+    no) case "$host" in
+       *mingw*)
+             PLATFORM=Win32
+ 	    PLATFORMNET=Win32
+ 	    PLATFORMH=win32.h
+         CHECK_FOR_BROKEN_MINGW_LD
+       ;;
+       *)
+             PLATFORM=Posix
+ 	    PLATFORMNET=Posix
+ 	    PLATFORMH=posix.h
+ 	    PLATFORM_INNER_NAT_HDRS='java/lang/ConcreteProcess$$ProcessManager.h'
+       ;;
+       esac
+       ;;
+    *)
+       PLATFORM=Ecos
+       PLATFORMNET=NoNet
+       AC_DEFINE(ECOS, 1, [Define if you're running eCos.])
+       PLATFORMH=posix.h
+       ;;
+ esac
+ AC_SUBST(PLATFORM_INNER_NAT_HDRS)
+ AC_CONFIG_LINKS(include/platform.h:include/$PLATFORMH)
+ 
+ AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED, 1,
+                                       [Define if you have int32_t and uint32_t.]))
+ AC_EGREP_HEADER(uint32_t, inttypes.h, AC_DEFINE(HAVE_INT32_DEFINED, 1,
+                                         [Define if you have int32_t and uint32_t.]))
+ AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1,
+                                           [Define if you have u_int32_t]))
+ AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1,
+                                            [Define if you have u_int32_t]))
+ 
+ AM_CONDITIONAL(USING_WIN32_PLATFORM, test "$PLATFORM" = Win32)
+ AM_CONDITIONAL(USING_POSIX_PLATFORM, test "$PLATFORM" = Posix)
+ AM_CONDITIONAL(USING_ECOS_PLATFORM, test "$PLATFORM" = Ecos)
+ 
+ case "$host" in
+   *-darwin*) DARWIN_CRT=true ;;
+   *) DARWIN_CRT=false ;;
+ esac
+ AM_CONDITIONAL(USING_DARWIN_CRT, $DARWIN_CRT)
+ 
+ # These may not be defined in a non-ANS conformant embedded system.
+ # FIXME: Should these case a runtime exception in that case?
+ AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME, 1,
+                                   [Define is you have 'mktime' in <time.h>]))
+ AC_EGREP_HEADER(localtime, time.h, AC_DEFINE(HAVE_LOCALTIME, 1,
+                                   [Define is you have 'localtime' in <time.h>]))
+ 
+ # Create the subdirectory for natFile.cc, or the attempt
+ # to create the link will fail.
+ test -d java || mkdir java
+ test -d java/io || mkdir java/io
+ test -d gnu || mkdir gnu
+ AC_CONFIG_LINKS(java/io/natFile.cc:java/io/natFile${FILE-${PLATFORM}}.cc)
+ 
+ # Likewise for ConcreteProcess.java and natConcreteProcess.cc.
+ test -d java/lang || mkdir java/lang
+ AC_CONFIG_LINKS(java/lang/ConcreteProcess.java:java/lang/${PLATFORM}Process.java)
+ AC_CONFIG_LINKS(java/lang/natConcreteProcess.cc:java/lang/nat${PLATFORM}Process.cc)
+ 
+ # Likewise for natInetAddress.cc and natNetworkInterface.cc.
+ test -d java/net || mkdir java/net
+ AC_CONFIG_LINKS(java/net/natInetAddress.cc:java/net/natInetAddress${PLATFORMNET}.cc)
+ AC_CONFIG_LINKS(java/net/natNetworkInterface.cc:java/net/natNetworkInterface${PLATFORMNET}.cc)
+ 
+ # Likewise for natPlainSocketImpl.cc and natPlainDatagramSocketImpl.cc.
+ test -d gnu/java || mkdir gnu/java
+ test -d gnu/java/net || mkdir gnu/java/net
+ AC_CONFIG_LINKS(gnu/java/net/natPlainSocketImpl.cc:gnu/java/net/natPlainSocketImpl${PLATFORMNET}.cc)
+ AC_CONFIG_LINKS(gnu/java/net/natPlainDatagramSocketImpl.cc:gnu/java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc)
+ 
+ # Likewise for natPipeImpl.cc and natSelectorImpl.cc.
+ test -d gnu/java/nio || mkdir gnu/java/nio
+ AC_CONFIG_LINKS(gnu/java/nio/natPipeImpl.cc:gnu/java/nio/natPipeImpl${PLATFORM}.cc)
+ AC_CONFIG_LINKS(gnu/java/nio/natSelectorImpl.cc:gnu/java/nio/natSelectorImpl${PLATFORM}.cc)
+ test -d gnu/java/nio/channels || mkdir gnu/java/nio/channels
+ AC_CONFIG_LINKS(gnu/java/nio/channels/natFileChannelImpl.cc:gnu/java/nio/channels/natFileChannel${FILE-${PLATFORM}}.cc)
+ 
+ case "${host}" in
+     *mingw*)
+       SYSTEMSPEC="-lgdi32 -lws2_32"
+       if test "${with_win32_nlsapi}" = "unicows"; then
+         SYSTEMSPEC="-lunicows $SYSTEMSPEC"
+       fi
+     ;;
+     *)
+       SYSTEMSPEC=
+     ;;
+ esac
+ AC_SUBST(SYSTEMSPEC)
+ 
+ LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -rpath `${PWDCMD-pwd}`/.libs"
+ AC_SUBST(LIBGCJTESTSPEC)
+ 
+ AC_ARG_WITH(system-zlib,
+   AS_HELP_STRING([--with-system-zlib],
+                  [use installed libz]))
+ ZLIBSPEC=
+ AC_SUBST(ZLIBSPEC)
+ ZLIBTESTSPEC=
+ AC_SUBST(ZLIBTESTSPEC)
+ 
+ AC_PATH_XTRA
+ 
+ # Determine which AWT peer libraries to build
+ AC_ARG_ENABLE(java-awt,
+   AS_HELP_STRING([--enable-java-awt],
+                  [list of AWT peer implementations to be built]))
+ 
+ peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
+ use_xlib_awt=""
+ use_gtk_awt=""
+ # The default toolkit to use is the first one specified.
+ TOOLKIT=
+ AC_SUBST(TOOLKIT)
+ 
+ for peer in $peerlibs ; do
+   case $peer in
+     xlib)
+       if test "$no_x" = yes; then
+         echo "*** xlib peers requested but no X library available" 1>&2
+         exit 1
+       else
+         use_xlib_awt="yes"
+ 	if test -z "$TOOLKIT"; then
+ 	   TOOLKIT=gnu.awt.xlib.XToolkit
+ 	fi
+       fi
+       ;;
+     gtk)
+       if test "$no_x" = yes; then
+ 	 echo "*** xlib peers requested but no X library available" 1>&2
+ 	 exit 1
+       else
+ 	 use_gtk_awt=yes
+ 	 if test -z "$TOOLKIT"; then
+ 	    TOOLKIT=gnu.java.awt.peer.gtk.GtkToolkit
+ 	 fi
+ 	 test -d jniinclude || mkdir jniinclude
+       fi
+       ;;
+     no)
+       use_xlib_awt=
+       use_gtk_awt=
+       break
+       ;;
+     *)
+       echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
+       exit 1
+   esac
+ done
+ 
+ AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
+ AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
+ 
+ # determine whether to enable the cairo GTK Graphics2D backend
+ AC_ARG_ENABLE(gtk-cairo,
+   AS_HELP_STRING([--enable-gtk-cairo],
+                  [build the cairo Graphics2D implementation on GTK]))
+ AM_CONDITIONAL(GTK_CAIRO, test "x${enable_gtk_cairo}" = xyes)
+ if test "x${enable_gtk_cairo}" = xyes
+ then
+ 	PKG_CHECK_MODULES(CAIRO, cairo)
+ 	PKG_CHECK_MODULES(PANGOFT2, pangoft2)
+ fi
+ AC_SUBST(CAIRO_LIBS)
+ AC_SUBST(CAIRO_CFLAGS)
+ AC_SUBST(PANGOFT2_LIBS)
+ AC_SUBST(PANGOFT2_CFLAGS)
+ 
+ # FIXME: this should be _libs on some hosts.
+ libsubdir=.libs
+ 
+ # Allow the GC to be disabled.  Can be useful when debugging.
+ AC_MSG_CHECKING([for garbage collector to use])
+ AC_ARG_ENABLE(java-gc,
+   AS_HELP_STRING([--enable-java-gc=TYPE],
+                  [choose garbage collector (default is boehm)]),
+   [GC=$enableval],
+   [GC=boehm])
+ GCLIBS=
+ GCINCS=
+ GCDEPS=
+ GCSPEC=
+ JC1GCSPEC=
+ GCTESTSPEC=
+ case "$GC" in
+  boehm)
+     AC_MSG_RESULT(boehm)
+     GCLIBS=../boehm-gc/libgcjgc_convenience.la
+     JC1GCSPEC='-fuse-boehm-gc'
+     GCTESTSPEC="-L`${PWDCMD-pwd}`/../boehm-gc/.libs -rpath `${PWDCMD-pwd}`/../boehm-gc/.libs"
+     GCINCS='-I$(top_srcdir)/../boehm-gc/include -I../boehm-gc/include'
+     GCOBJS=boehm.lo    
+     GCHDR=boehm-gc.h
+     # The POSIX thread support needs to know this.
+     AC_DEFINE(HAVE_BOEHM_GC, 1, [Define if Boehm GC in use.])
+     ;;
+  no)
+     AC_MSG_RESULT(none)
+     GCHDR=no-gc.h
+     ;;
+  *)
+     AC_MSG_ERROR([unrecognized collector "$GC"])
+     ;;
+ esac
+ AC_SUBST(GCLIBS)
+ AC_SUBST(GCINCS)
+ AC_SUBST(GCDEPS)
+ AC_SUBST(GCSPEC)
+ AC_SUBST(JC1GCSPEC)
+ AC_SUBST(GCTESTSPEC)
+ AC_CONFIG_LINKS(include/java-gc.h:include/$GCHDR)
+ AM_CONDITIONAL(USING_BOEHMGC, test "$GC" = boehm)
+ AM_CONDITIONAL(USING_NOGC, test "$GC" = no)
+ 
+ 
+ AC_MSG_CHECKING([for thread model used by GCC])
+ THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
+ AC_MSG_RESULT([$THREADS])
+ 
+ case "$THREADS" in
+  no | none | single)
+     THREADS=none
+     ;;
+  posix | posix95 | pthreads)
+     THREADS=posix
+     case "$host" in
+      *-*-linux*)
+ 	AC_DEFINE(LINUX_THREADS, 1, [Define if using POSIX threads on Linux.])
+ 	;;
+     esac
+     ;;
+  win32)
+     ;;
+  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
+     AC_MSG_ERROR(thread package $THREADS not yet supported)
+     ;;
+  *)
+     AC_MSG_ERROR($THREADS is an unknown thread package)
+     ;;
+ esac
+ 
+ THREADCXXFLAGS=
+ THREADLDFLAGS=
+ THREADLIBS=
+ THREADINCS=
+ THREADDEPS=
+ THREADH=
+ THREADSPEC=
+ case "$THREADS" in
+  posix)
+     case "$host" in
+      *-*-cygwin*)
+ 	# Don't set THREADLIBS here.  Cygwin doesn't have -lpthread.
+ 	;;
+      *-*-freebsd[[1234]]*)
+ 	# Before FreeBSD 5, it didn't have -lpthread (or any library which
+ 	# merely adds pthread_* functions) but it does have a -pthread switch
+ 	# which is required at link-time to select -lc_r *instead* of -lc.
+ 	THREADLDFLAGS=-pthread
+ 	# Don't set THREADSPEC here as might be expected since -pthread is
+ 	# not processed when found within a spec file, it must come from
+ 	# the command line.  For now, the user must provide the -pthread
+ 	# switch to link code compiled with gcj.  In future, consider adding
+ 	# support for weak references to pthread_* functions ala gthr.h API.
+ 	THREADSPEC='%{!pthread: %{!shared: %eUnder this configuration, the user must provide -pthread when linking.}}'
+ 	;;
+      *-*-freebsd*)
+ 	# FreeBSD 5 implements a model much closer to other modern UNIX
+ 	# which support threads.  However, it still does not support
+ 	# -lpthread.
+ 	THREADLDFLAGS=-pthread
+ 	THREADSPEC=-lc_r
+ 	;;
+      alpha*-dec-osf*)
+ 	THREADCXXFLAGS=-pthread
+ 	# boehm-gc needs some functions from librt, so link that too.
+ 	THREADLIBS='-lpthread -lrt'
+ 	THREADSPEC='-lpthread -lrt'
+ 	;;
+      *)
+ 	THREADLIBS=-lpthread
+ 	THREADSPEC=-lpthread
+ 	;;
+     esac
+     THREADH=posix-threads.h
+     # MIT pthreads doesn't seem to have the mutexattr functions.
+     # But for now we don't check for it.  We just assume you aren't
+     # using MIT pthreads.
+     AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT, 1, [Define if using POSIX threads that have the mutexattr functions.])
+ 
+     # If we're using the Boehm GC, then we happen to know that it
+     # defines _REENTRANT, so we don't bother.  Eww.
+     if test "$GC" != boehm; then
+        AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
+     fi
+     AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads])
+     ;;
+ 
+  win32)
+     THREADH=win32-threads.h
+     ;;
+ 
+  none)
+     THREADH=no-threads.h
+     ;;
+ esac
+ AC_CONFIG_LINKS(include/java-threads.h:include/$THREADH)
+ AC_SUBST(THREADLIBS)
+ AC_SUBST(THREADINCS)
+ AC_SUBST(THREADDEPS)
+ AC_SUBST(THREADSPEC)
+ AC_SUBST(THREADLDFLAGS)
+ AC_SUBST(THREADCXXFLAGS)
+ AM_CONDITIONAL(USING_POSIX_THREADS, test "$THREADS" = posix)
+ AM_CONDITIONAL(USING_WIN32_THREADS, test "$THREADS" = win32)
+ AM_CONDITIONAL(USING_NO_THREADS, test "$THREADS" = none)
+ 
+ if test -d sysdep; then true; else mkdir sysdep; fi
+ AC_CONFIG_LINKS(sysdep/locks.h:sysdep/$sysdeps_dir/locks.h)
+ 
+ HASH_SYNC_SPEC=
+ # Hash synchronization is only useful with posix threads right now.
+ if test "$enable_hash_synchronization" = yes && test "$THREADS" != "none"; then
+    HASH_SYNC_SPEC=-fhash-synchronization
+    AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
+ fi
+ AC_SUBST(HASH_SYNC_SPEC)
+ 
+ 
+ AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
+ 
+ # We're in the tree with gcc, and need to include some of its headers.
+ GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
+ 
+ TL_AC_GCC_VERSION([$srcdir/..])
+ 
+ # Figure out where generated headers like libgcj-config.h get installed.
+ tool_include_dir='$(libdir)/gcc/$(target_noncanonical)/'${gcc_version}/include
+ AC_SUBST(tool_include_dir)
+ 
+ if test "x${with_newlib}" = "xyes"; then
+    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
+    # may not work correctly, because the compiler may not be able to
+    # link executables.
+ 
+    # We assume newlib.  This lets us hard-code the functions we know
+    # we'll have.
+    AC_DEFINE(HAVE_MEMMOVE, 1, [Define if you have memmove.])
+    AC_DEFINE(HAVE_MEMCPY, 1, [Define if you have memcpy.])
+    AC_DEFINE(HAVE_STRERROR, 1, [Define if you have strerror.])
+    AC_DEFINE(HAVE_TIME, 1, [Define if you have time.])
+    AC_DEFINE(HAVE_GMTIME_R, 1, [Define if you have the 'gmtime_r' function])
+    AC_DEFINE(HAVE_LOCALTIME_R, 1, [Define if you have the 'localtime_r' function.])
+    AC_DEFINE(HAVE_USLEEP_DECL, 1, [Define if usleep is declared in <unistd.h>.])
+    # This is only for POSIX threads.
+    AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT, 1, [Define if using POSIX threads that have the mutexattr functions.])
+    # We also assume we are using gcc, which provides alloca.
+    AC_DEFINE(HAVE_ALLOCA)
+ 
+    # Assume we do not have getuid and friends.
+    AC_DEFINE(NO_GETUID, 1, [Define if getuid() and friends are missing.])
+    PLATFORMNET=NoNet
+ else
+    AC_CHECK_FUNCS([strerror ioctl select fstat open fsync sleep opendir \
+                    gmtime_r localtime_r readdir_r getpwuid_r getcwd \
+ 		   access stat mkdir rename rmdir unlink realpath utime chmod \
+ 		   nl_langinfo setlocale \
+ 		   inet_pton uname inet_ntoa \
+ 		   fork execvp pipe sigaction ftruncate])
+    AC_CHECK_FUNCS(inet_aton inet_addr, break)
+    AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) 
+    AC_CHECK_FUNC(backtrace, [
+      case "$host" in
+        ia64-*-linux*)
+ 	 # Has broken backtrace()
+ 	 ;;
+        mips*-*-linux*)
+          # Has broken backtrace(), but we supply our own.
+          if test -d sysdep; then true; else mkdir -p sysdep; fi
+ 	 supply_backtrace=yes
+          AC_DEFINE(HAVE_BACKTRACE, 1,
+            [Define if your platform has a working backtrace() function.])
+          ;;
+        *)
+          AC_DEFINE(HAVE_BACKTRACE, 1,
+            [Define if your platform has a working backtrace() function.])
+ 	 ;;
+      esac
+    ], [
+      case "$host" in
+        *mingw*)
+          # Has backtrace() defined in libgcj itself
+          AC_DEFINE(HAVE_BACKTRACE, 1,
+            [Define if your platform has a working backtrace() function.])
+          ;;
+      esac
+    ])
+ 
+    AC_CHECK_LIB(dl, dladdr, [
+      if test "x${disable_dladdr}" = "xyes"; then
+        #Broken dladdr().
+        true
+      else
+        AC_DEFINE(HAVE_DLADDR, 1, [Define if you have dladdr()])
+      fi
+    ])
+    if test x"$build" = x"$host"; then
+      AC_CHECK_FILES(/proc/self/exe, [
+        AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])])
+    else
+      case $host in
+      *-linux*)
+        AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])
+        ;;
+      esac
+    fi
+ 
+    AM_ICONV
+    AM_LC_MESSAGES
+    AC_STRUCT_TIMEZONE
+ 
+    AC_CHECK_FUNCS(gethostbyname_r, [
+      AC_DEFINE(HAVE_GETHOSTBYNAME_R, 1,
+        [Define if you have the 'gethostbyname_r' function.])
+      # There are two different kinds of gethostbyname_r.
+      # We look for the one that returns `int'.
+      # Hopefully this check is robust enough.
+      AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
+        AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT, 1, [Define if gethostbyname_r returns 'int'.])])
+ 
+      case " $GCINCS " in
+      *" -D_REENTRANT "*) ;;
+      *)
+ 	dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
+ 	AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
+ 	[libjava_cv_gethostbyname_r_needs_reentrant],
+ 	[ AC_LANG_PUSH(C++)
+ 	  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
+ 	    [[gethostbyname_r("", 0, 0);]])],
+ 	    [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
+ 		CPPFLAGS_SAVE="$CPPFLAGS"
+ 		CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ 		AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]], [[gethostbyname_r("", 0, 0);]])],
+ 		    [libjava_cv_gethostbyname_r_needs_reentrant=yes],
+ 		    [libjava_cv_gethostbyname_r_needs_reentrant=fail])
+ 		CPPFLAGS="$CPPFLAGS_SAVE"
+ 	  ])
+ 	  AC_LANG_POP(C++)
+ 	])
+ 	if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
+ 	  AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
+ 	fi
+      ;;
+      esac
+ 
+      AC_CACHE_CHECK([for struct hostent_data],
+ 	[libjava_cv_struct_hostent_data], [dnl
+ 	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
+ # define _REENTRANT 1
+ #endif
+ #include <netdb.h>]], [[struct hostent_data data;]])],
+ 	  [libjava_cv_struct_hostent_data=yes],
+ 	  [libjava_cv_struct_hostent_data=no])])
+      if test "x$libjava_cv_struct_hostent_data" = xyes; then
+        AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
+          [Define if struct hostent_data is defined in netdb.h])
+      fi
+    ])
+ 
+    # FIXME: libjava source code expects to find a prototype for
+    # gethostbyaddr_r in netdb.h.  The outer check ensures that
+    # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
+    # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
+    # linkage check is enough, yet C++ code requires proper prototypes.)
+    AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
+    AC_CHECK_FUNCS(gethostbyaddr_r, [
+      AC_DEFINE(HAVE_GETHOSTBYADDR_R, 1,
+        [Define if you have the 'gethostbyaddr_r' function.])
+      # There are two different kinds of gethostbyaddr_r.
+      # We look for the one that returns `int'.
+      # Hopefully this check is robust enough.
+      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
+        AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT, 1,
+          [Define if gethostbyaddr_r returns 'int'.])])])])
+ 
+    AC_CHECK_FUNCS(gethostname, [
+      AC_DEFINE(HAVE_GETHOSTNAME, 1,
+        [Define if you have the 'gethostname' function.])
+      AC_EGREP_HEADER(gethostname, unistd.h, [
+        AC_DEFINE(HAVE_GETHOSTNAME_DECL, 1,
+          [Define if gethostname is declared in <unistd.h>.])])])
+ 
+    AC_CHECK_FUNCS(usleep, [
+      AC_EGREP_HEADER(usleep, unistd.h, [
+        AC_DEFINE(HAVE_USLEEP_DECL, 1,
+           [Define if usleep is declared in <unistd.h>.])])])
+ 
+    # Look for these functions in the thread library, but only bother
+    # if using POSIX threads.
+    if test "$THREADS" = posix; then
+       save_LIBS="$LIBS"
+       LIBS="$LIBS $THREADLIBS"
+       # Some POSIX thread systems don't have pthread_mutexattr_settype.
+       # E.g., Solaris.
+       AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
+ 
+       # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
+       # Solaris 7 the name librt is preferred.
+       AC_CHECK_FUNCS(sched_yield, , [
+ 	AC_CHECK_LIB(rt, sched_yield, [
+ 	  AC_DEFINE(HAVE_SCHED_YIELD)
+ 	  THREADLIBS="$THREADLIBS -lrt"
+ 	  THREADSPEC="$THREADSPEC -lrt"], [
+ 	  AC_CHECK_LIB(posix4, sched_yield, [
+ 	    AC_DEFINE(HAVE_SCHED_YIELD)
+ 	    THREADLIBS="$THREADLIBS -lposix4"
+ 	    THREADSPEC="$THREADSPEC -lposix4"])])])
+       LIBS="$save_LIBS"
+ 
+       # We can save a little space at runtime if the mutex has m_count
+       # or __m_count.  This is a nice hack for Linux.
+       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[
+           extern pthread_mutex_t *mutex; int q = mutex->m_count;
+         ]])], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT, 1,
+              [Define if pthread_mutex_t has m_count member.]), [
+ 	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[
+ 	    extern pthread_mutex_t *mutex; int q = mutex->__m_count;
+ 	  ]])], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT, 1,
+             [Define if pthread_mutex_t has __m_count member.]))])
+    fi
+ 
+    # We require a way to get the time.
+    time_found=no
+    AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
+    if test "$time_found" = no; then
+       AC_MSG_ERROR([no function found to get the time])
+    fi
+ 
+    AC_CHECK_FUNCS(memmove)
+ 
+    # We require memcpy.
+    memcpy_found=no
+    AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
+    if test "$memcpy_found" = no; then
+       AC_MSG_ERROR([memcpy is required])
+    fi
+ 
+    AC_CHECK_LIB(dl, dlopen, [
+        AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
+ 
+    # Some library-finding code we stole from Tcl.
+    #--------------------------------------------------------------------
+    #	Check for the existence of the -lsocket and -lnsl libraries.
+    #	The order here is important, so that they end up in the right
+    #	order in the command line generated by make.  Here are some
+    #	special considerations:
+    #	1. Use "connect" and "accept" to check for -lsocket, and
+    #	   "gethostbyname" to check for -lnsl.
+    #	2. Use each function name only once:  can't redo a check because
+    #	   autoconf caches the results of the last check and won't redo it.
+    #	3. Use -lnsl and -lsocket only if they supply procedures that
+    #	   aren't already present in the normal libraries.  This is because
+    #	   IRIX 5.2 has libraries, but they aren't needed and they're
+    #	   bogus:  they goof up name resolution if used.
+    #	4. On some SVR4 systems, can't use -lsocket without -lnsl too.
+    #	   To get around this problem, check for both libraries together
+    #	   if -lsocket doesn't work by itself.
+    #--------------------------------------------------------------------
+ 
+    AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
+     [gcj_cv_lib_sockets=
+      gcj_checkBoth=0
+      unset ac_cv_func_connect
+      AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
+      if test "$gcj_checkSocket" = 1; then
+ 	 unset ac_cv_func_connect
+ 	 AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
+ 		      gcj_checkBoth=1)
+      fi
+      if test "$gcj_checkBoth" = 1; then
+ 	 gcj_oldLibs=$LIBS
+ 	 LIBS="$LIBS -lsocket -lnsl"
+ 	 unset ac_cv_func_accept
+ 	 AC_CHECK_FUNC(accept,
+ 		       [gcj_checkNsl=0
+ 			gcj_cv_lib_sockets="-lsocket -lnsl"])
+ 	 unset ac_cv_func_accept
+ 	 LIBS=$gcj_oldLibs
+      fi
+      unset ac_cv_func_gethostbyname
+      gcj_oldLibs=$LIBS
+      LIBS="$LIBS $gcj_cv_lib_sockets"
+      AC_CHECK_FUNC(gethostbyname, ,
+ 		   [AC_CHECK_LIB(nsl, main,
+ 				 [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
+      unset ac_cv_func_gethostbyname
+      LIBS=$gcj_oldLIBS
+    ])
+    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
+ 
+    if test "$with_system_zlib" = yes; then
+       AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=)
+    fi
+ 
+    # Test for Gtk stuff, if asked for.
+    if test "$use_gtk_awt" = yes; then
+       PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.4)
+       AC_SUBST(GTK_CFLAGS)
+       AC_SUBST(GTK_LIBS)
+ 
+       PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.4 gthread-2.0 >= 2.4)
+       AC_SUBST(GLIB_CFLAGS)
+       AC_SUBST(GLIB_LIBS)
+ 
+       PKG_CHECK_MODULES(LIBART, libart-2.0 >= 2.1)
+       AC_SUBST(LIBART_CFLAGS)
+       AC_SUBST(LIBART_LIBS)
+ 
+       # We require the XTest Extension to support java.awt.Robot.
+       AC_CHECK_LIB([Xtst], [XTestQueryExtension], [true],
+ 		   [AC_MSG_ERROR([libXtst not found, required by java.awt.Robot])],
+ 		   [${X_LIBS}])
+    fi
+ 
+    # On Solaris, and maybe other architectures, the Boehm collector
+    # requires -ldl.
+    if test "$GC" = boehm; then
+       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
+    fi
+ fi
+ AM_CONDITIONAL(SUPPLY_BACKTRACE, test "$supply_backtrace" = yes)
+ 
+ if test -z "${with_multisubdir}"; then
+    builddotdot=.
+ else
+    builddotdot=`echo ${with_multisubdir} | sed -e 's:[[^/]][[^/]]*:..:g'`
+ fi
+ 
+ NATIVE=yes
+ 
+ # Which gcj do we use?
+ which_gcj=default
+ built_gcc_dir="`cd ${builddotdot}/../../${host_subdir}/gcc && ${PWDCMD-pwd}`"
+ if test -n "${with_cross_host}"; then
+   # We are being configured with a cross compiler. We can't
+   # use ac_exeext, because that is for the target platform.
+   NATIVE=no
+   cross_host_exeext=
+   case "${with_cross_host}" in
+      *mingw* | *cygwin*)
+          cross_host_exeext=.exe
+      ;;
+   esac
+   if test -x "${built_gcc_dir}/gcj${cross_host_exeext}"; then
+      if test x"$build_noncanonical" = x"$with_cross_host"; then
+         # Ordinary cross (host!=target and host=build)
+         which_gcj=built
+      else
+         # Canadian cross (host!=target and host!=build)
+         which_gcj=cross
+      fi
+   else
+      which_gcj=cross
+   fi
+ else
+   # We are being configured with a native or crossed-native compiler
+   if test -x "${built_gcc_dir}/gcj${ac_exeext}"; then
+      if test x"$build" = x"$host"; then
+         # True native build (host=target and host=build)
+         which_gcj=built
+      else
+         # Crossed-native build (host=target and host!=build)
+         which_gcj=cross
+      fi
+   else
+      which_gcj=path
+   fi
+ fi
+ case "${which_gcj}" in
+    built)
+       GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/"
+       GCJH='$(top_builddir)/$(MULTIBUILDTOP)../../$(host_subdir)/gcc/gcjh'
+       ZIP='$(top_builddir)/$(MULTIBUILDTOP)../../$(host_subdir)/fastjar/fastjar'
+    ;;
+    cross)
+       if test "x${with_newlib}" = "xyes"; then
+          # FIXME (comment): Why is this needed?
+          GCC_UNWIND_INCLUDE=
+          GCJ="${target_noncanonical}-gcj"
+       else
+          GCJ="${target_noncanonical}-gcj -B`${PWDCMD-pwd}`/"
+       fi
+       ZIP='$(target_noncanonical)-fastjar'
+       GCJH='$(target_noncanonical)-gcjh'
+    ;;
+    path)
+       GCJ="gcj -B`${PWDCMD-pwd}`/"
+       ## In this case, gcj is found outside the build tree.  However, zip is
+       ## found in the build tree.
+       ZIP='$(top_builddir)/$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/fastjar'
+       GCJH=gcjh
+    ;;
+ esac
+ 
+ AC_SUBST(GCJH)
+ AC_SUBST(ZIP)
+ 
+ # Create it, so that compile/link tests don't fail
+ test -f libgcj.spec || touch libgcj.spec
+ 
+ # Use a semicolon as CLASSPATH separator for MinGW, otherwise a colon.
+ case $build in
+     *-mingw32) CLASSPATH_SEPARATOR=';' ;;
+     *)         CLASSPATH_SEPARATOR=':' ;;
+ esac
+ AC_SUBST(CLASSPATH_SEPARATOR)
+ 
+ # We must search the source tree for java.lang, since we still don't
+ # have libgcj.jar nor java/lang/*.class
+ GCJ_SAVE_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS -I`${PWDCMD-pwd}` -I`cd $srcdir && ${PWDCMD-pwd}`"
+ 
+ # Since some classes depend on this one, we need its source available
+ # before we can do any GCJ compilation test :-(
+ if test ! -f gnu/classpath/Configuration.java; then
+   test -d gnu || mkdir gnu
+   test -d gnu/classpath || mkdir gnu/classpath
+   sed -e 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
+       -e 's,@TOOLKIT@,$TOOLKIT,' \
+ 	< $srcdir/gnu/classpath/Configuration.java.in \
+ 	> gnu/classpath/Configuration.java
+   # We do not want to redirect the output of the grep below to /dev/null,
+   # but we add /dev/null to the input list so that grep will print the
+   # filename of Configuration.java in case it finds any matches.
+   if grep @ gnu/classpath/Configuration.java /dev/null; then
+     AC_MSG_ERROR([configure.ac is missing the substitutions above])
+   fi
+ fi
+ 
+ LT_AC_PROG_GCJ
+ 
+ CPPFLAGS=$GCJ_SAVE_CPPFLAGS
+ 
+ AC_COMPILE_CHECK_SIZEOF(void *)
+ 
+ AC_C_BIGENDIAN_CROSS
+ 
+ ZLIBS=
+ SYS_ZLIBS=
+ ZINCS=
+ 
+ if test -z "$ZLIBSPEC"; then
+    # Use zlib from the GCC tree.
+    ZINCS='-I$(top_srcdir)/../zlib'
+    ZLIBS=../zlib/libzgcj_convenience.la
+ else
+    # System's zlib.
+    SYS_ZLIBS="$ZLIBSPEC"
+ fi
+ AC_SUBST(ZLIBS)
+ AC_SUBST(SYS_ZLIBS)
+ AC_SUBST(ZINCS)
+ AC_SUBST(DIVIDESPEC)
+ AC_SUBST(CHECKREFSPEC)
+ AC_SUBST(EXCEPTIONSPEC)
+ AC_SUBST(IEEESPEC)
+ 
+ AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes)
+ AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
+ AC_SUBST(GCC_UNWIND_INCLUDE)
+ 
+ # Process the option "--enable-version-specific-runtime-libs"
+ # Calculate toolexeclibdir
+ case ${version_specific_libs} in
+   yes)
+     # Need the gcc compiler version to know where to install libraries
+     # and header files if --enable-version-specific-runtime-libs option
+     # is selected.
+     includedir='${libdir}/gcc/${target_noncanonical}/'$gcc_version/include/
+     toolexecdir='$(libdir)/gcc/$(target_noncanonical)'
+     toolexecmainlibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
+     toolexeclibdir=$toolexecmainlibdir
+     ;;
+   no)
+     if test -n "$with_cross_host" &&
+        test x"$with_cross_host" != x"no"; then
+       # Install a library built with a cross compiler in tooldir, not libdir.
+       toolexecdir='$(exec_prefix)/$(target_noncanonical)'
+       toolexecmainlibdir='$(toolexecdir)/lib'
+     else
+       toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
+       toolexecmainlibdir='$(libdir)'
+     fi
+     multi_os_directory=`$CC -print-multi-os-directory`
+     case $multi_os_directory in
+       .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
+       *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
+     esac
+     ;;
+ esac
+ AC_SUBST(toolexecdir)
+ AC_SUBST(toolexecmainlibdir)
+ AC_SUBST(toolexeclibdir)
+ 
+ # Determine gcj version number.
+ gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([[^ ]]*\).*$/\1/p'`
+ GCJVERSION=$gcjversion
+ AC_SUBST(GCJVERSION)
+ AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
+ 
+ AC_DEFINE(JV_VERSION, "1.4.2", [Compatibility version string])
+ AC_DEFINE(JV_API_VERSION, "1.4", [API compatibility version string])
+ 
+ TL_AC_GXX_INCLUDE_DIR
+ 
+ # We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
+ # On that system, sys/ioctl.h will not include sys/filio.h unless
+ # BSD_COMP is defined; just including sys/filio.h is simpler.
+ # We avoid AC_HEADER_DIRENT since we really only care about dirent.h
+ # for now.  If you change this, you also must update natFile.cc.
+ AC_CHECK_HEADERS([unistd.h bstring.h sys/time.h sys/types.h fcntl.h \
+ 		  sys/ioctl.h sys/filio.h sys/stat.h sys/select.h \
+ 		  sys/socket.h netinet/in.h arpa/inet.h netdb.h net/if.h \
+ 		  pwd.h sys/config.h stdint.h langinfo.h locale.h \
+ 		  dirent.h])
+ AC_CHECK_HEADERS(inttypes.h, [
+     AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
+     AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
+ ])
+ AC_HEADER_SYS_WAIT
+ 
+ AC_CHECK_TYPE([ssize_t], [int])
+ 
+ AC_MSG_CHECKING([for in_addr_t])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+ #if STDC_HEADERS
+ #include <stdlib.h>
+ #include <stddef.h>
+ #endif
+ #if HAVE_NETINET_IN_H
+ #include <netinet/in.h>
+ #endif]], [[in_addr_t foo;]])],
+   [AC_DEFINE(HAVE_IN_ADDR_T, 1,
+      [Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h.])
+    AC_MSG_RESULT(yes)],
+   [AC_MSG_RESULT(no)])
+ 
+ AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>]], [[struct ip_mreq mreq;]])],
+   [AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1,
+      [Define if struct ip_mreq is defined in netinet/in.h.])
+    AC_MSG_RESULT(yes)],
+   [AC_MSG_RESULT(no)])
+ 
+ AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>]], [[struct ipv6_mreq mreq6;]])],
+   [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ, 1,
+      [Define if struct ipv6_mreq is defined in netinet/in.h.])
+    AC_MSG_RESULT(yes)],
+   [AC_MSG_RESULT(no)])
+ 
+ AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>]], [[struct sockaddr_in6 addr6;]])],
+   [AC_DEFINE(HAVE_INET6, 1,
+      [Define if inet6 structures are defined in netinet/in.h.])
+    AC_MSG_RESULT(yes)],
+   [AC_MSG_RESULT(no)])
+ 
+ AC_MSG_CHECKING([for socklen_t in sys/socket.h])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _POSIX_PII_SOCKET
+ #include <sys/types.h>
+ #include <sys/socket.h>]], [[socklen_t x = 5;]])],
+   [AC_DEFINE(HAVE_SOCKLEN_T, 1, [Define it socklen_t typedef is in sys/socket.h.])
+    AC_MSG_RESULT(yes)],
+   [AC_MSG_RESULT(no)])
+ 
+ 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_FUNC_ALLOCA
+ AC_FUNC_MMAP
+ 
+ AC_CHECK_PROGS(PERL, perl, false)
+ 
+ SYSDEP_SOURCES=
+ SIGNAL_HANDLER_AUX=
+ 
+ case "${host}" in
+  i?86-*-linux*)
+     SIGNAL_HANDLER=include/i386-signal.h
+     ;;
+  sparc*-sun-solaris*)
+     SIGNAL_HANDLER=include/sparc-signal.h
+     ;;
+ # ia64-*)
+ #    SYSDEP_SOURCES=sysdep/ia64.c
+ #    test -d sysdep || mkdir sysdep
+ #    ;;
+  hppa*-*-linux*)
+     SIGNAL_HANDLER=include/pa-signal.h
+     ;;
+  ia64-*-linux*)
+     SIGNAL_HANDLER=include/dwarf2-signal.h
+     ;;
+  powerpc*-*-linux*)
+     SIGNAL_HANDLER=include/powerpc-signal.h
+     ;;
+  alpha*-*-linux*)
+     SIGNAL_HANDLER=include/dwarf2-signal.h
+     ;;
+  s390*-*-linux*)
+     SIGNAL_HANDLER=include/s390-signal.h
+     ;;
+  x86_64*-*-linux*)
+     SIGNAL_HANDLER=include/x86_64-signal.h
+     SIGNAL_HANDLER_AUX=include/i386-signal.h
+     ;;
+  sparc*-*-linux*)
+     SIGNAL_HANDLER=include/dwarf2-signal.h
+     ;;
+  sh*-*-linux*)
+     SIGNAL_HANDLER=include/sh-signal.h
+     ;;
+  *mingw*)
+     SIGNAL_HANDLER=include/win32-signal.h
+     ;;
+  mips*-*-linux*)
+     SIGNAL_HANDLER=include/mips-signal.h
+     ;;
+  *-*-darwin*)
+     SIGNAL_HANDLER=include/darwin-signal.h
+     ;;
+  *)
+     SIGNAL_HANDLER=include/default-signal.h
+     ;;
+ esac
+ 
+ # If we're using sjlj exceptions, forget what we just learned.
+ if test "$enable_sjlj_exceptions" = yes; then
+    SIGNAL_HANDLER=include/default-signal.h
+    SIGNAL_HANDLER_AUX=
+ fi
+ 
+ # Define here any compiler flags that you need in order to make backtrace() work.
+ BACKTRACESPEC=
+ case "${host}" in
+  x86_64*-*-linux*|i?86-*)
+     BACKTRACESPEC=-fno-omit-frame-pointer
+     ;;
+ esac
+ AC_SUBST(BACKTRACESPEC)
+ 
+ AC_SUBST(SYSDEP_SOURCES)
+ 
+ if test -z "$SIGNAL_HANDLER_AUX"; then
+   SIGNAL_HANDLER_AUX=$SIGNAL_HANDLER
+ fi
+ 
+ AC_CONFIG_LINKS(include/java-signal.h:$SIGNAL_HANDLER
+ 		include/java-signal-aux.h:$SIGNAL_HANDLER_AUX)
+ 
+ if test "${multilib}" = "yes"; then
+   multilib_arg="--enable-multilib"
+ else
+   multilib_arg=
+ fi
+ 
+ 
+ 
+ here=`${PWDCMD-pwd}`
+ AC_SUBST(here)
+ 
+ # We get this from the environment.
+ AC_SUBST(GCJFLAGS)
+ 
+ AC_CONFIG_FILES([
+ Makefile
+ libgcj.pc
+ libgcj.spec
+ libgcj-test.spec
+ gnu/classpath/Configuration.java
+ gcj/Makefile
+ include/Makefile
+ testsuite/Makefile
+ external/Makefile
+ external/sax/Makefile
+ external/w3c_dom/Makefile
+ ])
+ 
+ AC_CONFIG_COMMANDS([default],
+ [# Only add multilib support code if we just rebuilt top-level Makefile.
+ case " $CONFIG_FILES " in
+  *" Makefile "*)
+    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
+    ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
+    ;;
+ esac
+ for ac_multi_file in $CONFIG_FILES; do
+   case $ac_multi_file in
+   */Makefile)
+     grep "^MULTI[[^ ]]* =" Makefile >> "$ac_multi_file" ;;
+   esac
+ done
+ ],
+ srcdir=${srcdir}
+ host=${host}
+ target=${target}
+ with_multisubdir=${with_multisubdir}
+ ac_configure_args="${multilib_arg} ${ac_configure_args}"
+ CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ libgcj_basedir=${libgcj_basedir}
+ CC="${CC}"
+ CXX="${CXX}"
+ ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
+ )
+ 
+ AC_OUTPUT
diff -Nrcpad gcc-3.4.3/libjava/configure.host gcc-4.0.0/libjava/configure.host
*** gcc-3.4.3/libjava/configure.host	Fri Jan 23 17:39:12 2004
--- gcc-4.0.0/libjava/configure.host	Mon Mar 14 20:23:34 2005
*************** case "${host}" in
*** 90,96 ****
  	;;
    i686-*|i586-*|i486-*|i386-*)
  	sysdeps_dir=i386
! 	libgcj_flags="${libgcj_flags} -ffloat-store"
  	libgcj_interpreter=yes
  	libgcj_cxxflags=
  	libgcj_cflags=
--- 90,96 ----
  	;;
    i686-*|i586-*|i486-*|i386-*)
  	sysdeps_dir=i386
! 	libgcj_flags="${libgcj_flags} -ffloat-store -fno-omit-frame-pointer"
  	libgcj_interpreter=yes
  	libgcj_cxxflags=
  	libgcj_cflags=
*************** case "${host}" in
*** 115,120 ****
--- 115,125 ----
  	enable_hash_synchronization_default=yes
  	IEEESPEC=-mieee
  	;;
+   hppa-*)
+ 	sysdeps_dir=pa
+ 	libgcj_interpreter=yes
+ 	enable_hash_synchronization_default=yes
+ 	;;
    powerpc64*-*)
  	sysdeps_dir=powerpc
  	libgcj_interpreter=yes
*************** case "${host}" in
*** 133,138 ****
--- 138,144 ----
    s390*-*)
  	sysdeps_dir=s390
  	libgcj_interpreter=yes
+ 	DIVIDESPEC=-fno-use-divide-subroutine
  	enable_hash_synchronization_default=yes
  	;;
    sparc*-*)
*************** case "${host}" in
*** 164,171 ****
--- 170,179 ----
    sparc*-linux* | \
    ia64-* | \
    x86_64*-linux* | \
+   hppa*-linux* | \
    sh-linux* | sh[34]*-linux*)
    	can_unwind_signal=yes
+ 	libgcj_ld_symbolic='-Wl,-Bsymbolic'
  	if test x$slow_pthread_self = xyes \
  	   && test x$cross_compiling != xyes; then
  	  cat > conftest.c <<EOF
*************** EOF
*** 219,225 ****
    mips*-*-linux* )
    	sysdeps_dir=mips
    	can_unwind_signal=yes
! 	libgcj_flags="${libgcj_flags} -mxgot"
  	case "${host}" in
  	    mipsel*-linux* | mipsisa32el*-linux*)
  		enable_hash_synchronization_default=yes
--- 227,233 ----
    mips*-*-linux* )
    	sysdeps_dir=mips
    	can_unwind_signal=yes
! 	DIVIDESPEC=-fno-use-divide-subroutine
  	case "${host}" in
  	    mipsel*-linux* | mipsisa32el*-linux*)
  		enable_hash_synchronization_default=yes
*************** EOF
*** 227,236 ****
  	    ;;
  	esac
  	;;
!   *-*-darwin*)
! 	enable_hash_synchronization_default=no
  	slow_pthread_self=
! 	can_unwind_signal=no
  	;;
    *-*-freebsd*)
  	slow_pthread_self=
--- 235,244 ----
  	    ;;
  	esac
  	;;
!   powerpc*-*-darwin*)
! 	enable_hash_synchronization_default=yes
  	slow_pthread_self=
! 	can_unwind_signal=yes
  	;;
    *-*-freebsd*)
  	slow_pthread_self=
diff -Nrcpad gcc-3.4.3/libjava/configure.in gcc-4.0.0/libjava/configure.in
*** gcc-3.4.3/libjava/configure.in	Fri Jan 23 17:39:12 2004
--- gcc-4.0.0/libjava/configure.in	Thu Jan  1 00:00:00 1970
***************
*** 1,1255 ****
- dnl Process this with autoconf to create configure
- AC_PREREQ(2.13)
- AC_INIT(java/lang/System.java)
- 
- # This works around the fact that libtool configuration may change LD
- # for this particular configuration, but some shells, instead of
- # keeping the changes in LD private, export them just because LD is
- # exported.
- ORIGINAL_LD_FOR_MULTILIBS=$LD
- 
- AC_PROG_LN_S
- 
- dnl We use these options to decide which functions to include.
- AC_ARG_WITH(target-subdir,
- [  --with-target-subdir=SUBDIR
-                            configuring in a subdirectory])
- AC_ARG_WITH(cross-host,
- [  --with-cross-host=HOST  configuring with a cross compiler])
- 
- AC_ARG_WITH(newlib,
- [  --with-newlib           Configuring with newlib])
- 
- LIBGCJ_CONFIGURE(.)
- 
- AM_CONFIG_HEADER(include/config.h gcj/libgcj-config.h)
- 
- # Only use libltdl for non-newlib builds.
- if test "x${with_newlib}" = "x" || test "x${with_newlib}" = "xno"; then
-    AC_LIBLTDL_CONVENIENCE
-    AC_LIBTOOL_DLOPEN
-    DIRLTDL=libltdl
-    AC_DEFINE(USE_LTDL, 1, [Define if libltdl is in use.])
-    # Sigh.  Libtool's macro doesn't do the right thing.
-    INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL"
-    # FIXME: this is a hack.
-    sub_auxdir="`cd $ac_aux_dir && ${PWDCMD-pwd}`"
-    ac_configure_args="$ac_configure_args --with-auxdir=$sub_auxdir"
- fi
- AC_SUBST(INCLTDL)
- AC_SUBST(LIBLTDL)
- AC_SUBST(DIRLTDL)
- AM_PROG_LIBTOOL
- AC_CONFIG_SUBDIRS($DIRLTDL)
- 
- if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
-    COMPPATH=.
- else
-    COMPPATH=..
- fi
- AC_SUBST(COMPPATH)
- 
- dnl The -no-testsuite modules omit the test subdir.
- AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
- 
- dnl Should the runtime set system properties by examining the 
- dnl environment variable GCJ_PROPERTIES?
- AC_ARG_ENABLE(getenv-properties,
- [  --disable-getenv-properties
-                           don't set system properties from GCJ_PROPERTIES])
- 
- dnl Whether GCJ_PROPERTIES is used depends on the target.
- if test -z "$enable_getenv_properties"; then
-    enable_getenv_properties=${enable_getenv_properties_default-yes}
- fi
- if test "$enable_getenv_properties" = no; then
-    AC_DEFINE(DISABLE_GETENV_PROPERTIES, 1,
-      [Define if system properties shouldn't be read from getenv("GCJ_PROPERTIES").])
- fi
- 
- dnl Whether we should use arguments to main()
- if test -z "$enable_main_args"; then
-    enable_main_args=${enable_main_args_default-yes}
- fi
- if test "$enable_main_args" = no; then
-    AC_DEFINE(DISABLE_MAIN_ARGS, 1, [Define if we should ignore arguments to main().])
- fi
- 
- 
- dnl Should we use hashtable-based synchronization?
- dnl Currently works only for Linux X86/ia64
- dnl Typically faster and more space-efficient
- AC_ARG_ENABLE(hash-synchronization,
- [  --enable-hash-synchronization
-                           use global hash table for monitor locks])
- 
- if test -z "$enable_hash_synchronization"; then
-    enable_hash_synchronization=$enable_hash_synchronization_default
- fi
- 
- # Do we allow intermodule optimizations (i.e. compiling many files at once)?
- AC_ARG_ENABLE(libgcj-multifile,
- [  --enable-libgcj-multifile
-                           allow compilation of several files at once],
- [case "${enableval}" in
-   yes) enable_libgcj_multifile=yes ;;
-   no)  enable_libgcj_multifile=no ;;
-   *) AC_MSG_ERROR(bad value ${enableval} for --enable-libgcj-multifile) ;;
- esac],[enable_libgcj_multifile=no])
- AM_CONDITIONAL(ONESTEP, test "$enable_libgcj_multifile" = yes)
- 
- # What is the native OS API for MinGW?
- AC_ARG_WITH(win32-nlsapi,
- changequote(<<,>>)dnl
- <<  --with-win32-nlsapi=ansi, unicows or unicode
-                           native MinGW libgcj Win32 OS API [ansi]>>,
- changequote([,])
- [case "${withval}" in
-   ansi) with_win32_nlsapi=ansi ;;
-   unicows) with_win32_nlsapi=unicows ;;
-   unicode) with_win32_nlsapi=unicode ;;
-   *) AC_MSG_ERROR(Bad value ${withval} for --with-win32-nlsapi.) ;;
- esac],[with_win32_nlsapi=ansi])
- 
- case "${with_win32_nlsapi}" in
-   unicows | unicode) 
-     AC_DEFINE(MINGW_LIBGCJ_UNICODE, 1,
-       [Define if MinGW libgcj uses the Windows UNICODE OS API.])
-     ;;
- esac
- 
- dnl configure.host sets slow_pthread_self if the synchronization code should 
- dnl try to avoid pthread_self calls by caching thread IDs in a hashtable.
- if test "${slow_pthread_self}" = "yes"; then
-   AC_DEFINE(SLOW_PTHREAD_SELF, 1,
-     [Define if if the synchronization code should try to avoid pthread_self calls by caching thread IDs in a hashtable.])
- fi
- 
- 
- dnl See if the user has requested runtime debugging.
- LIBGCJDEBUG="false"
- AC_SUBST(LIBGCJDEBUG)
- AC_ARG_ENABLE(libgcj-debug,
- [  --enable-libgcj-debug   enable runtime debugging code],
-   if test "$enable_libgcj_debug" = yes; then
-     AC_DEFINE(DEBUG, 1, [Define this if you want runtime debugging enabled.])
-     LIBGCJDEBUG="true"
-   fi)
- 
- dnl See if the user has the interpreter included.
- AC_ARG_ENABLE(interpreter,
- [  --enable-interpreter    enable interpreter],
-   if test "$enable_interpreter" = yes; then
-     # This can also be set in configure.host.
-     libgcj_interpreter=yes
-   elif test "$enable_interpreter" = no; then
-     libgcj_interpreter=no
-   fi)
- 
- if test "$libgcj_interpreter" = yes; then
-    AC_DEFINE(INTERPRETER, 1, [Define if you want a bytecode interpreter.])
- fi
- INTERPRETER="$libgcj_interpreter"
- AC_SUBST(INTERPRETER)
- 
- AC_MSG_CHECKING([for exception model to use])
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_ARG_ENABLE(sjlj-exceptions,
- [  --enable-sjlj-exceptions  force use of builtin_setjmp for exceptions],
- [:],
- [dnl Botheration.  Now we've got to detect the exception model.
- dnl Link tests against libgcc.a are problematic since -- at least
- dnl as of this writing -- we've not been given proper -L bits for
- dnl single-tree newlib and libgloss.
- dnl
- dnl This is what AC_TRY_COMPILE would do if it didn't delete the
- dnl conftest files before we got a change to grep them first.
- cat > conftest.$ac_ext << EOF
- [#]line __oline__ "configure"
- struct S { ~S(); };
- void bar();
- void foo()
- {
-   S s;
-   bar();
- }
- EOF
- old_CXXFLAGS="$CXXFLAGS"  
- CXXFLAGS=-S
- if AC_TRY_EVAL(ac_compile); then
-   if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
-     enable_sjlj_exceptions=yes
-   elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
-     enable_sjlj_exceptions=no
-   fi
- fi
- CXXFLAGS="$old_CXXFLAGS"
- rm -f conftest*])
- if test x$enable_sjlj_exceptions = xyes; then
-   AC_DEFINE(SJLJ_EXCEPTIONS, 1,
- 	[Define if the compiler is configured for setjmp/longjmp exceptions.])
-   ac_exception_model_name=sjlj
- elif test x$enable_sjlj_exceptions = xno; then
-   ac_exception_model_name="call frame"
- else
-   AC_MSG_ERROR([unable to detect exception model])
- fi
- AC_LANG_RESTORE
- AC_MSG_RESULT($ac_exception_model_name)
- 
- # If we are non using SJLJ exceptions, and this host does not have support 
- # for unwinding from a signal handler, enable checked dereferences and divides.
- if test $can_unwind_signal = no && test $enable_sjlj_exceptions = no; then
-   CHECKREFSPEC=-fcheck-references
-   DIVIDESPEC=-fuse-divide-subroutine
-   EXCEPTIONSPEC=
- fi
- 
- dnl See if the user wants to disable java.net.  This is the mildly
- dnl ugly way that we admit that target-side configuration sucks.
- AC_ARG_ENABLE(java-net,
- [  --disable-java-net      disable java.net])
- 
- dnl Whether java.net is built by default can depend on the target.
- if test -z "$enable_java_net"; then
-    enable_java_net=${enable_java_net_default-yes}
- fi
- if test "$enable_java_net" = no; then
-    AC_DEFINE(DISABLE_JAVA_NET, 1, [Define if java.net native functions should be stubbed out.])
- fi
- 
- dnl See if the user wants to configure without libffi.  Some
- dnl architectures don't support it, and default values are set in 
- dnl configure.host.
- AC_ARG_WITH(libffi,
- [  --without-libffi        don't use libffi],,with_libffi=${with_libffi_default-yes})
- 
- LIBFFI=
- LIBFFIINCS=
- if test "$with_libffi" != no; then
-    AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.])
-    LIBFFI=../libffi/libffi_convenience.la
-    LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
- fi
- AC_SUBST(LIBFFI)
- AC_SUBST(LIBFFIINCS)
- 
- dnl See if the user wants to disable JVMPI support.
- AC_ARG_ENABLE(jvmpi,
- [  --disable-jvmpi         disable JVMPI support])
- 
- if test "$enable_jvmpi" != no; then
-     AC_DEFINE(ENABLE_JVMPI, 1, [Define if you are using JVMPI.])
- fi
- 
- dnl If the target is an eCos system, use the appropriate eCos
- dnl I/O routines.
- dnl FIXME: this should not be a local option but a global target
- dnl system; at present there is no eCos target.
- TARGET_ECOS=${PROCESS-"no"}
- AC_ARG_WITH(ecos,
- [  --with-ecos             enable runtime eCos target support],
- TARGET_ECOS="$with_ecos"
- )
- 
- EXTRA_CC_FILES=
- AC_SUBST(EXTRA_CC_FILES)
- 
- PLATFORMOBJS=
- case "$TARGET_ECOS" in
-    no) case "$host" in
-       *mingw*)
-             PLATFORM=Win32
- 	    PLATFORMNET=Win32
-             PLATFORMOBJS=win32.lo
- 	    PLATFORMH=win32.h
-         CHECK_FOR_BROKEN_MINGW_LD
-       ;;
-       *)
-             PLATFORM=Posix
- 	    PLATFORMNET=Posix
-             PLATFORMOBJS=posix.lo
- 	    PLATFORMH=posix.h
-       ;;
-       esac
-       ;;
-    *)
-       PLATFORM=Ecos
-       PLATFORMNET=NoNet
-       AC_DEFINE(ECOS, 1, [Define if you're running eCos.])
-       PLATFORMOBJS=posix.lo
-       PLATFORMH=posix.h
-       ;;
- esac
- AC_SUBST(PLATFORMOBJS)
- AC_LINK_FILES(include/$PLATFORMH, include/platform.h)
- 
- AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED, 1,
-                                       [Define if you have int32_t and uint32_t.]))
- AC_EGREP_HEADER(uint32_t, inttypes.h, AC_DEFINE(HAVE_INT32_DEFINED, 1,
-                                         [Define if you have int32_t and uint32_t.]))
- AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1,
-                                           [Define if you have u_int32_t]))
- AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1,
-                                            [Define if you have u_int32_t]))
- 
- 
- dnl These may not be defined in a non-ANS conformant embedded system.
- dnl FIXME: Should these case a runtime exception in that case?
- AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME, 1,
-                                   [Define is you have 'mktime' in <time.h>]))
- AC_EGREP_HEADER(localtime, time.h, AC_DEFINE(HAVE_LOCALTIME, 1,
-                                   [Define is you have 'localtime' in <time.h>]))
- 
- dnl Create the subdirectory for natFileDescriptor.cc, or the attempt
- dnl to create the link will fail.
- test -d java || mkdir java
- test -d java/io || mkdir java/io
- test -d gnu || mkdir gnu
- AC_LINK_FILES(java/io/natFile${FILE-${PLATFORM}}.cc, java/io/natFile.cc)
- AC_LINK_FILES(java/io/natFileDescriptor${FILE-${PLATFORM}}.cc, java/io/natFileDescriptor.cc)
- 
- dnl Likewise for ConcreteProcess.java and natConcreteProcess.cc.
- test -d java/lang || mkdir java/lang
- AC_LINK_FILES(java/lang/${PLATFORM}Process.java, java/lang/ConcreteProcess.java)
- AC_LINK_FILES(java/lang/nat${PLATFORM}Process.cc, java/lang/natConcreteProcess.cc)
- 
- dnl Likewise for natInetAddress.cc and natNetworkInterface.cc.
- test -d java/net || mkdir java/net
- AC_LINK_FILES(java/net/natInetAddress${PLATFORMNET}.cc, java/net/natInetAddress.cc)
- AC_LINK_FILES(java/net/natNetworkInterface${PLATFORMNET}.cc, java/net/natNetworkInterface.cc)
- 
- dnl Likewise for natPlainSocketImpl.cc and natPlainDatagramSocketImpl.cc.
- test -d gnu/java || mkdir gnu/java
- test -d gnu/java/net || mkdir gnu/java/net
- AC_LINK_FILES(gnu/java/net/natPlainSocketImpl${PLATFORMNET}.cc, gnu/java/net/natPlainSocketImpl.cc)
- AC_LINK_FILES(gnu/java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc, gnu/java/net/natPlainDatagramSocketImpl.cc)
- 
- dnl Likewise for natPipeImpl.cc and natSelectorImpl.cc.
- test -d gnu/java/nio || mkdir gnu/java/nio
- AC_LINK_FILES(gnu/java/nio/natPipeImpl${PLATFORM}.cc, gnu/java/nio/natPipeImpl.cc)
- AC_LINK_FILES(gnu/java/nio/natSelectorImpl${PLATFORM}.cc, gnu/java/nio/natSelectorImpl.cc)
- 
- case "${host}" in
-     *mingw*)
-       SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32"
-       if test "${with_win32_nlsapi}" = "unicows"; then
-         SYSTEMSPEC="-lunicows $SYSTEMSPEC"
-       fi
-     ;;
-     *)
-       SYSTEMSPEC=
-     ;;
- esac
- AC_SUBST(SYSTEMSPEC)
- 
- LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -rpath `${PWDCMD-pwd}`/.libs"
- AC_SUBST(LIBGCJTESTSPEC)
- 
- AC_ARG_WITH(system-zlib,
- [  --with-system-zlib      use installed libz])
- ZLIBSPEC=
- AC_SUBST(ZLIBSPEC)
- ZLIBTESTSPEC=
- AC_SUBST(ZLIBTESTSPEC)
- 
- AC_PATH_XTRA
- 
- dnl Determine which AWT peer libraries to build
- AC_ARG_ENABLE(java-awt,
- [  --enable-java-awt       list of AWT peer implementations to be built])
- 
- peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
- use_xlib_awt=""
- use_gtk_awt=""
- # The default toolkit to use is the first one specified.
- TOOLKIT=
- AC_SUBST(TOOLKIT)
- 
- for peer in $peerlibs ; do
-   case $peer in
-     xlib)
-       if test "$no_x" = yes; then
-         echo "*** xlib peers requested but no X library available" 1>&2
-         exit 1
-       else
-         use_xlib_awt="yes"
- 	if test -z "$TOOLKIT"; then
- 	   TOOLKIT=gnu.awt.xlib.XToolkit
- 	fi
-       fi
-       ;;
-     gtk)
-       if test "$no_x" = yes; then
- 	 echo "*** xlib peers requested but no X library available" 1>&2
- 	 exit 1
-       else
- 	 use_gtk_awt=yes
- 	 if test -z "$TOOLKIT"; then
- 	    TOOLKIT=gnu.java.awt.peer.gtk.GtkToolkit
- 	 fi
- 	 test -d jniinclude || mkdir jniinclude
-       fi
-       ;;
-     no)
-       use_xlib_awt=
-       use_gtk_awt=
-       break
-       ;;
-     *)
-       echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
-       exit 1
-   esac
- done
- 
- AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
- AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
- 
- dnl determine whether to enable the cairo GTK Graphics2D backend
- AC_ARG_ENABLE(gtk-cairo, [  --enable-gtk-cairo       build the cairo Graphics2D implementation on GTK])
- AM_CONDITIONAL(GTK_CAIRO, test "x${enable_gtk_cairo}" = xyes)
- if test "x${enable_gtk_cairo}" = xyes
- then
- 	PKG_CHECK_MODULES(CAIRO, cairo)
- 	PKG_CHECK_MODULES(PANGOFT2, pangoft2)
- fi
- AC_SUBST(CAIRO_LIBS)
- AC_SUBST(CAIRO_CFLAGS)
- AC_SUBST(PANGOFT2_LIBS)
- AC_SUBST(PANGOFT2_CFLAGS)
- 
- dnl FIXME: this should be _libs on some hosts.
- libsubdir=.libs
- 
- dnl Allow the GC to be disabled.  Can be useful when debugging.
- AC_MSG_CHECKING([for garbage collector to use])
- AC_ARG_ENABLE(java-gc,
- changequote(<<,>>)dnl
- <<  --enable-java-gc=TYPE   choose garbage collector [boehm]>>,
- changequote([,])
-   GC=$enableval,
-   GC=boehm)
- GCLIBS=
- GCINCS=
- GCDEPS=
- GCOBJS=
- GCSPEC=
- JC1GCSPEC=
- GCTESTSPEC=
- case "$GC" in
-  boehm)
-     AC_MSG_RESULT(boehm)
-     GCLIBS=../boehm-gc/libgcjgc_convenience.la
-     JC1GCSPEC='-fuse-boehm-gc'
-     GCTESTSPEC="-L`${PWDCMD-pwd}`/../boehm-gc/.libs -rpath `${PWDCMD-pwd}`/../boehm-gc/.libs"
- 
-     dnl We also want to pick up some cpp flags required when including
-     dnl boehm-config.h.  Yuck.
-     GCINCS="`cat ../boehm-gc/boehm-cflags`"
-     GCOBJS=boehm.lo
-     GCHDR=boehm-gc.h
-     dnl The POSIX thread support needs to know this.
-     AC_DEFINE(HAVE_BOEHM_GC, 1, [Define if Boehm GC in use.])
-     ;;
-  no)
-     AC_MSG_RESULT(none)
-     GCOBJS=nogc.lo
-     GCHDR=no-gc.h
-     ;;
-  *)
-     AC_MSG_ERROR(unrecognized collector \"$GC\")
-     ;;
- esac
- AC_SUBST(GCLIBS)
- AC_SUBST(GCINCS)
- AC_SUBST(GCDEPS)
- AC_SUBST(GCOBJS)
- AC_SUBST(GCSPEC)
- AC_SUBST(JC1GCSPEC)
- AC_SUBST(GCTESTSPEC)
- AC_LINK_FILES(include/$GCHDR, include/java-gc.h)
- 
- 
- AC_MSG_CHECKING([for thread model used by GCC])
- THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
- AC_MSG_RESULT([$THREADS])
- 
- case "$THREADS" in
-  no | none | single)
-     THREADS=none
-     ;;
-  posix | pthreads)
-     THREADS=posix
-     case "$host" in
-      *-*-linux*)
- 	AC_DEFINE(LINUX_THREADS, 1, [Define if using POSIX threads on Linux.])
- 	;;
-     esac
-     ;;
-  win32)
-     ;;
-  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
-     AC_MSG_ERROR(thread package $THREADS not yet supported)
-     ;;
-  *)
-     AC_MSG_ERROR($THREADS is an unknown thread package)
-     ;;
- esac
- 
- THREADCXXFLAGS=
- THREADLDFLAGS=
- THREADLIBS=
- THREADINCS=
- THREADDEPS=
- THREADOBJS=
- THREADH=
- THREADSPEC=
- case "$THREADS" in
-  posix)
-     case "$host" in
-      *-*-cygwin*)
- 	# Don't set THREADLIBS here.  Cygwin doesn't have -lpthread.
- 	;;
- changequote(<<,>>)   
-      *-*-freebsd[1234]*)
- changequote([,])   
- 	# Before FreeBSD 5, it didn't have -lpthread (or any library which
- 	# merely adds pthread_* functions) but it does have a -pthread switch
- 	# which is required at link-time to select -lc_r *instead* of -lc.
- 	THREADLDFLAGS=-pthread
- 	# Don't set THREADSPEC here as might be expected since -pthread is
- 	# not processed when found within a spec file, it must come from
- 	# the command line.  For now, the user must provide the -pthread
- 	# switch to link code compiled with gcj.  In future, consider adding
- 	# support for weak references to pthread_* functions ala gthr.h API.
- 	THREADSPEC='%{!pthread: %eUnder this configuration, the user must provide -pthread when linking.}'
- 	;;
-      *-*-freebsd*)
- 	# FreeBSD 5 implements a model much closer to other modern UNIX
- 	# which support threads.  However, it still does not support
- 	# -lpthread.
- 	THREADLDFLAGS=-pthread
- 	THREADSPEC=-lc_r
- 	;;
-      alpha*-dec-osf*)
- 	THREADCXXFLAGS=-pthread
- 	# boehm-gc needs some functions from librt, so link that too.
- 	THREADLIBS='-lpthread -lrt'
- 	THREADSPEC='-lpthread -lrt'
- 	;;
-      *)
- 	THREADLIBS=-lpthread
- 	THREADSPEC=-lpthread
- 	;;
-     esac
-     THREADOBJS=posix-threads.lo
-     THREADH=posix-threads.h
-     # MIT pthreads doesn't seem to have the mutexattr functions.
-     # But for now we don't check for it.  We just assume you aren't
-     # using MIT pthreads.
-     AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT, 1, [Define if using POSIX threads that have the mutexattr functions.])
- 
-     # If we're using the Boehm GC, then we happen to know that it
-     # defines _REENTRANT, so we don't bother.  Eww.
-     if test "$GC" != boehm; then
-        AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
-     fi
-     AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads])
-     ;;
- 
-  win32)
-     THREADOBJS=win32-threads.lo
-     THREADH=win32-threads.h
-     ;;
- 
-  none)
-     THREADOBJS=no-threads.lo
-     THREADH=no-threads.h
-     ;;
- esac
- AC_LINK_FILES(include/$THREADH, include/java-threads.h)
- AC_SUBST(THREADLIBS)
- AC_SUBST(THREADINCS)
- AC_SUBST(THREADDEPS)
- AC_SUBST(THREADOBJS)
- AC_SUBST(THREADSPEC)
- AC_SUBST(THREADLDFLAGS)
- AC_SUBST(THREADCXXFLAGS)
- 
- if test -d sysdep; then true; else mkdir sysdep; fi
- AC_LINK_FILES(sysdep/$sysdeps_dir/locks.h, sysdep/locks.h)
- 
- HASH_SYNC_SPEC=
- # Hash synchronization is only useful with posix threads right now.
- if test "$enable_hash_synchronization" = yes && test "$THREADS" != "none"; then
-    HASH_SYNC_SPEC=-fhash-synchronization
-    AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
- fi
- AC_SUBST(HASH_SYNC_SPEC)
- 
- 
- AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
- 
- CANADIAN=no
- NULL_TARGET=no
- NATIVE=yes
- 
- # We're in the tree with gcc, and need to include some of its headers.
- GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
- 
- # Figure out where generated headers like libgcj-config.h get installed.
- changequote(,)dnl
- gcc_version_trigger=${libgcj_basedir}/../gcc/version.c
- gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
- gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
- tool_include_dir='$(libdir)/gcc/$(target_alias)/'${gcc_version}/include
- changequote([,])dnl
- AC_SUBST(tool_include_dir)
- AC_SUBST(gcc_version)
- 
- if test "x${with_newlib}" = "xyes"; then
-    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
-    # may not work correctly, because the compiler may not be able to
-    # link executables.
- 
-    # We assume newlib.  This lets us hard-code the functions we know
-    # we'll have.
-    AC_DEFINE(HAVE_MEMMOVE, 1, [Define if you have memmove.])
-    AC_DEFINE(HAVE_MEMCPY, 1, [Define if you have memcpy.])
-    AC_DEFINE(HAVE_STRERROR, 1, [Define if you have strerror.])
-    AC_DEFINE(HAVE_TIME, 1, [Define if you have time.])
-    AC_DEFINE(HAVE_GMTIME_R, 1, [Define if you have the 'gmtime_r' function])
-    AC_DEFINE(HAVE_LOCALTIME_R, 1, [Define if you have the 'localtime_r' function.])
-    AC_DEFINE(HAVE_USLEEP_DECL, 1, [Define if usleep is declared in <unistd.h>.])
-    dnl This is only for POSIX threads.
-    AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT, 1, [Define if using POSIX threads that have the mutexattr functions.])
-    dnl We also assume we are using gcc, which provides alloca.
-    AC_DEFINE(HAVE_ALLOCA)
- 
-    dnl Assume we do not have getuid and friends.
-    AC_DEFINE(NO_GETUID, 1, [Define if getuid() and friends are missing.])
-    PLATFORMNET=NoNet
- else
-    AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
-    AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
-    AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
-    AC_CHECK_FUNCS(nl_langinfo setlocale)
-    AC_CHECK_FUNCS(inet_aton inet_addr, break)
-    AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
-    AC_CHECK_FUNCS(fork execvp pipe sigaction ftruncate)
-    AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) 
-    AC_CHECK_FUNC(backtrace, [
-      case "$host" in
-        ia64-*-linux*)
- 	 # Has broken backtrace()
- 	 ;;
-        mips*-*-linux*)
-          # Has broken backtrace(), but we supply our own.
-          if test -d sysdep; then true; else mkdir -p sysdep; fi
-          EXTRA_CC_FILES="${EXTRA_CC_FILES} sysdep/dwarf2-backtrace.cc"
-          AC_DEFINE(HAVE_BACKTRACE, 1,
-            [Define if your platform has a working backtrace() function.])
-          ;;
-        *)
-          AC_DEFINE(HAVE_BACKTRACE, 1,
-            [Define if your platform has a working backtrace() function.])
- 	 ;;
-      esac
-    ], [
-      case "$host" in
-        *mingw*)
-          # Has backtrace() defined in libgcj itself
-          AC_DEFINE(HAVE_BACKTRACE, 1,
-            [Define if your platform has a working backtrace() function.])
-          ;;
-      esac
-    ])
- 
-    AC_CHECK_LIB(dl, dladdr, [
-      if test "x${disable_dladdr}" = "xyes"; then
-        #Broken dladdr().
-        true
-      else
-        AC_DEFINE(HAVE_DLADDR, 1, [Define if you have dladdr()])
-      fi
-    ])
-    if test x"$build" = x"$host"; then
-      AC_CHECK_FILES(/proc/self/exe, [
-        AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])])
-    else
-      case $host in
-      *-linux*)
-        AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])
-        ;;
-      esac
-    fi
- 
-    AM_ICONV
-    AM_LC_MESSAGES
-    AC_STRUCT_TIMEZONE
- 
-    AC_CHECK_FUNCS(gethostbyname_r, [
-      AC_DEFINE(HAVE_GETHOSTBYNAME_R, 1,
-        [Define if you have the 'gethostbyname_r' function.])
-      # There are two different kinds of gethostbyname_r.
-      # We look for the one that returns `int'.
-      # Hopefully this check is robust enough.
-      AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
-        AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT, 1, [Define if gethostbyname_r returns 'int'.])])
- 
-      case " $GCINCS " in
-      *" -D_REENTRANT "*) ;;
-      *)
- 	dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
- 	AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
- 	[libjava_cv_gethostbyname_r_needs_reentrant],
- 	[ AC_LANG_SAVE
- 	  AC_LANG_CPLUSPLUS
- 	  AC_TRY_COMPILE([#include <netdb.h>],
- 	    [gethostbyname_r("", 0, 0);],
- 	    [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
- 		CPPFLAGS_SAVE="$CPPFLAGS"
- 		CPPFLAGS="$CPPFLAGS -D_REENTRANT"
- 		AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
- 		    [libjava_cv_gethostbyname_r_needs_reentrant=yes],
- 		    [libjava_cv_gethostbyname_r_needs_reentrant=fail])
- 		CPPFLAGS="$CPPFLAGS_SAVE"
- 	  ])
- 	  AC_LANG_RESTORE
- 	])
- 	if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
- 	  AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
- 	fi
-      ;;
-      esac
- 
-      AC_CACHE_CHECK([for struct hostent_data],
- 	[libjava_cv_struct_hostent_data], [dnl
- 	AC_TRY_COMPILE([
- #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
- # define _REENTRANT 1
- #endif
- #include <netdb.h>], [struct hostent_data data;],
- 	  [libjava_cv_struct_hostent_data=yes],
- 	  [libjava_cv_struct_hostent_data=no])])
-      if test "x$libjava_cv_struct_hostent_data" = xyes; then
-        AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
-          [Define if struct hostent_data is defined in netdb.h])
-      fi
-    ])
- 
-    # FIXME: libjava source code expects to find a prototype for
-    # gethostbyaddr_r in netdb.h.  The outer check ensures that
-    # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
-    # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
-    # linkage check is enough, yet C++ code requires proper prototypes.)
-    AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
-    AC_CHECK_FUNCS(gethostbyaddr_r, [
-      AC_DEFINE(HAVE_GETHOSTBYADDR_R, 1,
-        [Define if you have the 'gethostbyaddr_r' function.])
-      # There are two different kinds of gethostbyaddr_r.
-      # We look for the one that returns `int'.
-      # Hopefully this check is robust enough.
-      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
-        AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT, 1,
-          [Define if gethostbyaddr_r returns 'int'.])])])])
- 
-    AC_CHECK_FUNCS(gethostname, [
-      AC_DEFINE(HAVE_GETHOSTNAME, 1,
-        [Define if you have the 'gethostname' function.])
-      AC_EGREP_HEADER(gethostname, unistd.h, [
-        AC_DEFINE(HAVE_GETHOSTNAME_DECL, 1,
-          [Define if gethostname is declared in <unistd.h>.])])])
- 
-    AC_CHECK_FUNCS(usleep, [
-      AC_EGREP_HEADER(usleep, unistd.h, [
-        AC_DEFINE(HAVE_USLEEP_DECL, 1,
-           [Define if usleep is declared in <unistd.h>.])])])
- 
-    # Look for these functions in the thread library, but only bother
-    # if using POSIX threads.
-    if test "$THREADS" = posix; then
-       save_LIBS="$LIBS"
-       LIBS="$LIBS $THREADLIBS"
-       # Some POSIX thread systems don't have pthread_mutexattr_settype.
-       # E.g., Solaris.
-       AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
- 
-       # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
-       # Solaris 7 the name librt is preferred.
-       AC_CHECK_FUNCS(sched_yield, , [
- 	AC_CHECK_LIB(rt, sched_yield, [
- 	  AC_DEFINE(HAVE_SCHED_YIELD)
- 	  THREADLIBS="$THREADLIBS -lrt"
- 	  THREADSPEC="$THREADSPEC -lrt"], [
- 	  AC_CHECK_LIB(posix4, sched_yield, [
- 	    AC_DEFINE(HAVE_SCHED_YIELD)
- 	    THREADLIBS="$THREADLIBS -lposix4"
- 	    THREADSPEC="$THREADSPEC -lposix4"])])])
-       LIBS="$save_LIBS"
- 
-       # We can save a little space at runtime if the mutex has m_count
-       # or __m_count.  This is a nice hack for Linux.
-       AC_TRY_COMPILE([#include <pthread.h>], [
-           extern pthread_mutex_t *mutex; int q = mutex->m_count;
-         ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT, 1,
-              [Define if pthread_mutex_t has m_count member.]), [
- 	AC_TRY_COMPILE([#include <pthread.h>], [
- 	    extern pthread_mutex_t *mutex; int q = mutex->__m_count;
- 	  ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT, 1,
-             [Define if pthread_mutex_t has __m_count member.]))])
-    fi
- 
-    # We require a way to get the time.
-    time_found=no
-    AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
-    if test "$time_found" = no; then
-       AC_MSG_ERROR([no function found to get the time])
-    fi
- 
-    AC_CHECK_FUNCS(memmove)
- 
-    # We require memcpy.
-    memcpy_found=no
-    AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
-    if test "$memcpy_found" = no; then
-       AC_MSG_ERROR([memcpy is required])
-    fi
- 
-    AC_CHECK_LIB(dl, dlopen, [
-        AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
- 
-    # Some library-finding code we stole from Tcl.
-    #--------------------------------------------------------------------
-    #	Check for the existence of the -lsocket and -lnsl libraries.
-    #	The order here is important, so that they end up in the right
-    #	order in the command line generated by make.  Here are some
-    #	special considerations:
-    #	1. Use "connect" and "accept" to check for -lsocket, and
-    #	   "gethostbyname" to check for -lnsl.
-    #	2. Use each function name only once:  can't redo a check because
-    #	   autoconf caches the results of the last check and won't redo it.
-    #	3. Use -lnsl and -lsocket only if they supply procedures that
-    #	   aren't already present in the normal libraries.  This is because
-    #	   IRIX 5.2 has libraries, but they aren't needed and they're
-    #	   bogus:  they goof up name resolution if used.
-    #	4. On some SVR4 systems, can't use -lsocket without -lnsl too.
-    #	   To get around this problem, check for both libraries together
-    #	   if -lsocket doesn't work by itself.
-    #--------------------------------------------------------------------
- 
-    AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
-     [gcj_cv_lib_sockets=
-      gcj_checkBoth=0
-      unset ac_cv_func_connect
-      AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
-      if test "$gcj_checkSocket" = 1; then
- 	 unset ac_cv_func_connect
- 	 AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
- 		      gcj_checkBoth=1)
-      fi
-      if test "$gcj_checkBoth" = 1; then
- 	 gcj_oldLibs=$LIBS
- 	 LIBS="$LIBS -lsocket -lnsl"
- 	 unset ac_cv_func_accept
- 	 AC_CHECK_FUNC(accept,
- 		       [gcj_checkNsl=0
- 			gcj_cv_lib_sockets="-lsocket -lnsl"])
- 	 unset ac_cv_func_accept
- 	 LIBS=$gcj_oldLibs
-      fi
-      unset ac_cv_func_gethostbyname
-      gcj_oldLibs=$LIBS
-      LIBS="$LIBS $gcj_cv_lib_sockets"
-      AC_CHECK_FUNC(gethostbyname, ,
- 		   [AC_CHECK_LIB(nsl, main,
- 				 [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
-      unset ac_cv_func_gethostbyname
-      LIBS=$gcj_oldLIBS
-    ])
-    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
- 
-    if test "$with_system_zlib" = yes; then
-       AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=)
-    fi
- 
-    # Test for Gtk stuff, if asked for.
-    if test "$use_gtk_awt" = yes; then
-       AM_PATH_GTK_2_0(2.2.0,,exit 1)
-       AM_PATH_GLIB_2_0(2.2.0,,exit 1,gthread)
-       dnl XXX Fix me when libart.m4 has the compile test fixed!
-       enable_libarttest=no
-       AM_PATH_LIBART(2.1.0,,exit 1)
-    fi
- 
-    # On Solaris, and maybe other architectures, the Boehm collector
-    # requires -ldl.
-    if test "$GC" = boehm; then
-       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
-    fi
- fi
- 
- if test -z "${with_multisubdir}"; then
-    builddotdot=.
- else
- changequote(<<,>>)
-    builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
- changequote([,])
- fi
- 
- # Which gcj do we use?
- which_gcj=default
- built_gcc_dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
- if test -n "${with_cross_host}"; then
-   # We are being configured with a cross compiler. We can't
-   # use ac_exeext, because that is for the target platform.
-   NATIVE=no
-   cross_host_exeext=
-   case "${with_cross_host}" in
-      *mingw* | *cygwin*)
-          cross_host_exeext=.exe
-      ;;
-   esac
-   if test -x "${built_gcc_dir}/gcj${cross_host_exeext}"; then
-      if test x"$build_alias" = x"$with_cross_host"; then
-         # Ordinary cross (host!=target and host=build)
-         which_gcj=built
-      else
-         # Canadian cross (host!=target and host!=build)
-         which_gcj=cross
-      fi
-   else
-      which_gcj=cross
-   fi
- else
-   # We are being configured with a native or crossed-native compiler
-   if test -x "${built_gcc_dir}/gcj${ac_exeext}"; then
-      if test x"$build" = x"$host"; then
-         # True native build (host=target and host=build)
-         which_gcj=built
-      else
-         # Crossed-native build (host=target and host!=build)
-         which_gcj=cross
-      fi
-   else
-      which_gcj=path
-   fi
- fi
- case "${which_gcj}" in
-    built)
-       GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/"
-    ;;
-    cross)
-       # See the comment in Makefile.am about CANADIAN being a misnomer
-       CANADIAN=yes
-       NULL_TARGET=no
-       if test "x${with_newlib}" = "xyes"; then
-          # FIXME (comment): Why is this needed?
-          GCC_UNWIND_INCLUDE=
-          GCJ="${target_alias}-gcj"
-       else
-          GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/"
-       fi
-    ;;
-    path)
-       # See the comment in Makefile.am about CANADIAN being a misnomer
-       CANADIAN=yes
-       NULL_TARGET=yes
-       GCJ="gcj -B`${PWDCMD-pwd}`/"
-    ;;
- esac
- 
- # Create it, so that compile/link tests don't fail
- test -f libgcj.spec || touch libgcj.spec
- 
- # We must search the source tree for java.lang, since we still don't
- # have libgcj.jar nor java/lang/*.class
- GCJ_SAVE_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="$CPPFLAGS -I`${PWDCMD-pwd}` -I`cd $srcdir && ${PWDCMD-pwd}`"
- 
- # Since some classes depend on this one, we need its source available
- # before we can do any GCJ compilation test :-(
- if test ! -f gnu/classpath/Configuration.java; then
-   test -d gnu || mkdir gnu
-   test -d gnu/classpath || mkdir gnu/classpath
-   sed -e 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
-       -e 's,@TOOLKIT@,$TOOLKIT,' \
- 	< $srcdir/gnu/classpath/Configuration.java.in \
- 	> gnu/classpath/Configuration.java
-   # We do not want to redirect the output of the grep below to /dev/null,
-   # but we add /dev/null to the input list so that grep will print the
-   # filename of Configuration.java in case it finds any matches.
-   if grep @ gnu/classpath/Configuration.java /dev/null; then
-     AC_MSG_ERROR([configure.in is missing the substitutions above])
-   fi
- fi
- 
- LT_AC_PROG_GCJ
- 
- CPPFLAGS=$GCJ_SAVE_CPPFLAGS
- 
- AC_COMPILE_CHECK_SIZEOF(void *)
- 
- ZLIBS=
- SYS_ZLIBS=
- ZINCS=
- 
- if test -z "$ZLIBSPEC"; then
-    # Use zlib from the GCC tree.
-    ZINCS='-I$(top_srcdir)/../zlib'
-    ZLIBS=../zlib/libzgcj_convenience.la
- else
-    # System's zlib.
-    SYS_ZLIBS="$ZLIBSPEC"
- fi
- AC_SUBST(ZLIBS)
- AC_SUBST(SYS_ZLIBS)
- AC_SUBST(ZINCS)
- AC_SUBST(DIVIDESPEC)
- AC_SUBST(CHECKREFSPEC)
- AC_SUBST(EXCEPTIONSPEC)
- AC_SUBST(IEEESPEC)
- 
- AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
- AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
- AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
- AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
- AC_SUBST(GCC_UNWIND_INCLUDE)
- 
- if test -n "$with_cross_host" &&
-    test x"$with_cross_host" != x"no"; then
-   toolexecdir='$(exec_prefix)/$(target_alias)'
-   toolexecmainlibdir='$(toolexecdir)/lib'
- else
-   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
-   toolexecmainlibdir='$(libdir)'
- fi
- multi_os_directory=`$CC -print-multi-os-directory`
- case $multi_os_directory in
-   .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
-   *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
- esac
- AC_SUBST(toolexecdir)
- AC_SUBST(toolexecmainlibdir)
- AC_SUBST(toolexeclibdir)
- 
- # Determine gcj version number.
- changequote(<<,>>)
- gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
- changequote([,])
- GCJVERSION=$gcjversion
- AC_SUBST(GCJVERSION)
- AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
- 
- 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.
- AC_CHECK_HEADERS(unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/filio.h sys/stat.h sys/select.h sys/socket.h netinet/in.h arpa/inet.h netdb.h net/if.h pwd.h sys/config.h stdint.h langinfo.h locale.h)
- dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
- dnl for now.  If you change this, you also must update natFile.cc.
- AC_CHECK_HEADERS(dirent.h)
- AC_CHECK_HEADERS(inttypes.h, [
-     AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
-     AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
- ])
- AC_HEADER_SYS_WAIT
- 
- AC_CHECK_TYPE([ssize_t], [int])
- 
- AC_MSG_CHECKING([for in_addr_t])
- AC_TRY_COMPILE([#include <sys/types.h>
- #if STDC_HEADERS
- #include <stdlib.h>
- #include <stddef.h>
- #endif
- #if HAVE_NETINET_IN_H
- #include <netinet/in.h>
- #endif], [in_addr_t foo;],
-   [AC_DEFINE(HAVE_IN_ADDR_T, 1,
-      [Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h.])
-    AC_MSG_RESULT(yes)],
-   [AC_MSG_RESULT(no)])
- 
- AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
- AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
-   [AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1,
-      [Define if struct ip_mreq is defined in netinet/in.h.])
-    AC_MSG_RESULT(yes)],
-   [AC_MSG_RESULT(no)])
- 
- AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
- AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
-   [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ, 1,
-      [Define if struct ipv6_mreq is defined in netinet/in.h.])
-    AC_MSG_RESULT(yes)],
-   [AC_MSG_RESULT(no)])
- 
- AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
- AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
-   [AC_DEFINE(HAVE_INET6, 1,
-      [Define if inet6 structures are defined in netinet/in.h.])
-    AC_MSG_RESULT(yes)],
-   [AC_MSG_RESULT(no)])
- 
- AC_MSG_CHECKING([for socklen_t in sys/socket.h])
- AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
- #include <sys/types.h>
- #include <sys/socket.h>], [socklen_t x = 5;],
-   [AC_DEFINE(HAVE_SOCKLEN_T, 1, [Define it socklen_t typedef is in sys/socket.h.])
-    AC_MSG_RESULT(yes)],
-   [AC_MSG_RESULT(no)])
- 
- AC_MSG_CHECKING([for tm_gmtoff in struct tm])
- AC_TRY_COMPILE([#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_TRY_COMPILE([#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_TRY_COMPILE([#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_FUNC_ALLOCA
- AC_FUNC_MMAP
- 
- AC_CHECK_PROGS(PERL, perl, false)
- 
- SYSDEP_SOURCES=
- SIGNAL_HANDLER_AUX=
- 
- case "${host}" in
-  i?86-*-linux*)
-     SIGNAL_HANDLER=include/i386-signal.h
-     ;;
-  sparc*-sun-solaris*)
-     SIGNAL_HANDLER=include/sparc-signal.h
-     ;;
- # ia64-*)
- #    SYSDEP_SOURCES=sysdep/ia64.c
- #    test -d sysdep || mkdir sysdep
- #    ;;
-  ia64-*-linux*)
-     SIGNAL_HANDLER=include/dwarf2-signal.h
-     ;;
-  powerpc*-*-linux*)
-     SIGNAL_HANDLER=include/powerpc-signal.h
-     ;;
-  alpha*-*-linux*)
-     SIGNAL_HANDLER=include/dwarf2-signal.h
-     ;;
-  s390*-*-linux*)
-     SIGNAL_HANDLER=include/s390-signal.h
-     ;;
-  x86_64*-*-linux*)
-     SIGNAL_HANDLER=include/x86_64-signal.h
-     SIGNAL_HANDLER_AUX=include/i386-signal.h
-     ;;
-  sparc*-*-linux*)
-     SIGNAL_HANDLER=include/dwarf2-signal.h
-     ;;
-  sh-*-linux* | sh[[34]]*-*-linux*)
-     SIGNAL_HANDLER=include/dwarf2-signal.h
-     ;;
-  *mingw*)
-     SIGNAL_HANDLER=include/win32-signal.h
-     ;;
-  mips*-*-linux*)
-     SIGNAL_HANDLER=include/mips-signal.h
-     ;;
-  *)
-     SIGNAL_HANDLER=include/default-signal.h
-     ;;
- esac
- 
- # If we're using sjlj exceptions, forget what we just learned.
- if test "$enable_sjlj_exceptions" = yes; then
-    SIGNAL_HANDLER=include/default-signal.h
-    SIGNAL_HANDLER_AUX=
- fi
- 
- # Define here any compiler flags that you need in order to make backtrace() work.
- BACKTRACESPEC=
- case "${host}" in
-  x86_64*-*-linux*)
-     BACKTRACESPEC=-fno-omit-frame-pointer
-     ;;
- esac
- AC_SUBST(BACKTRACESPEC)
- 
- AC_SUBST(SYSDEP_SOURCES)
- 
- if test -z "$SIGNAL_HANDLER_AUX"; then
-   SIGNAL_HANDLER_AUX=$SIGNAL_HANDLER
- fi
- 
- AC_LINK_FILES($SIGNAL_HANDLER $SIGNAL_HANDLER_AUX,
- 	      include/java-signal.h include/java-signal-aux.h)
- 
- if test "${multilib}" = "yes"; then
-   multilib_arg="--enable-multilib"
- else
-   multilib_arg=
- fi
- 
- 
- 
- here=`${PWDCMD-pwd}`
- AC_SUBST(here)
- 
- # We get this from the environment.
- AC_SUBST(GCJFLAGS)
- 
- AC_OUTPUT(Makefile libgcj.pc libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
- [# Only add multilib support code if we just rebuilt top-level Makefile.
- case " $CONFIG_FILES " in
-  *" Makefile "*)
-    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
-    ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
-    ;;
- esac
- 
- # Make subdirectories and `.d' files.  Look in both srcdir and
- # builddir for the .java files.
- h=`${PWDCMD-pwd}`
- : > deps.mk
- ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) ;
-   find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) | \
-    fgrep -v testsuite | \
-    sed -e 's/\.java/.d/'\;'s/\.cc/.d/'\;'s/\.c/.d/' | \
-    while read f; do
-       echo "include $f" >> deps.mk
-       test -f $f || {
- changequote(<<,>>)
- 	 d=`echo $f | sed -e 's,/[^/]*$,,'`
- changequote([,])
- 	 if test ! -d $d; then
- 	   $libgcj_basedir/../mkinstalldirs $d
- 	 fi;
- 	 echo > $f
-       }
-    done
- ],
- srcdir=${srcdir}
- host=${host}
- target=${target}
- with_multisubdir=${with_multisubdir}
- ac_configure_args="${multilib_arg} ${ac_configure_args}"
- CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- libgcj_basedir=${libgcj_basedir}
- CC="${CC}"
- CXX="${CXX}"
- ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
- )
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/darwin.cc gcc-4.0.0/libjava/darwin.cc
*** gcc-3.4.3/libjava/darwin.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/darwin.cc	Tue Oct 26 06:08:57 2004
***************
*** 0 ****
--- 1,63 ----
+ /* darwin.cc - class loader stuff for Darwin.  */
+ 
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #include <config.h>
+ 
+ #include <jvm.h>
+ 
+ /* In theory, we should be able to do:
+    #include <mach-o/getsect.h>
+    #include <mach-o/dyld.h>
+ 
+    but all the types in these headers changed between Panther and Tiger,
+    so the only way to be avoid type mismatches is to declare the routines
+    ourself.  */
+ 
+ #include <stdint.h>
+ struct mach_header;
+ extern "C" void _dyld_register_func_for_add_image
+   (void (*func)(const struct mach_header *mh, intptr_t vmaddr_slide));
+ extern "C" void _dyld_register_func_for_remove_image
+   (void (*func)(const struct mach_header *mh, intptr_t vmaddr_slide));
+ extern "C" char *getsectdatafromheader
+ (const struct mach_header *mhp, const char *segname, const char *sectname,
+  uint32_t *size);
+ 
+ /* When a new image is loaded, look to see if it has a jcr section
+    and if so register the classes listed in it.  */
+ 
+ static void
+ darwin_java_register_dyld_add_image_hook (const struct mach_header *mh,
+ 					  intptr_t slide)
+ {
+   char *fde;
+   uint32_t sz;
+ 
+   fde = getsectdatafromheader (mh, "__DATA", "jcr", &sz);
+   if (! fde)
+     return;
+   
+   /* As far as I can tell, you're only supposed to load shared
+      libraries while having a lock on java.lang.Class.  So there's
+      no need to synchronize on anything here.  (I'm not sure how exactly
+      you can ensure this given lazy library loading.  FIXME.)  */
+  
+   _Jv_RegisterClasses_Counted ((const jclass *) (fde + slide),
+ 			       sz / sizeof (jclass *));
+ }
+ 
+ static struct darwin_constructor_s{
+   darwin_constructor_s() 
+   {
+     _dyld_register_func_for_add_image 
+       (darwin_java_register_dyld_add_image_hook);
+     /* At present, you mustn't unload any java plugin.  */
+   };
+ } darwin_constructor;
diff -Nrcpad gcc-3.4.3/libjava/defineclass.cc gcc-4.0.0/libjava/defineclass.cc
*** gcc-3.4.3/libjava/defineclass.cc	Fri Oct 24 09:29:41 2003
--- gcc-4.0.0/libjava/defineclass.cc	Mon Feb  7 21:29:03 2005
***************
*** 1,6 ****
  // defineclass.cc - defining a class from .class format.
  
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // defineclass.cc - defining a class from .class format.
  
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 23,30 ****
--- 23,32 ----
  #include <java-interp.h>
  
  #include <stdlib.h>
+ #include <stdio.h>
  #include <java-cpool.h>
  #include <gcj/cni.h>
+ #include <execution.h>
  
  #include <java/lang/Class.h>
  #include <java/lang/Float.h>
*************** details.  */
*** 37,42 ****
--- 39,45 ----
  #include <java/lang/ClassCircularityError.h>
  #include <java/lang/IncompatibleClassChangeError.h>
  #include <java/lang/reflect/Modifier.h>
+ #include <java/security/ProtectionDomain.h>
  
  using namespace gcj;
  
*************** struct _Jv_ClassReader {
*** 96,102 ****
    unsigned int      *offsets;
  
    // the class to define (see java-interp.h)
!   _Jv_InterpClass   *def;
  
    /* check that the given number of input bytes are available */
    inline void check (int num)
--- 99,108 ----
    unsigned int      *offsets;
  
    // the class to define (see java-interp.h)
!   jclass	   def;
!   
!   // the classes associated interpreter data.
!   _Jv_InterpClass  *def_interp;
  
    /* check that the given number of input bytes are available */
    inline void check (int num)
*************** struct _Jv_ClassReader {
*** 212,218 ****
        throw_class_format_error ("erroneous type descriptor");
    }
  
!   _Jv_ClassReader (jclass klass, jbyteArray data, jint offset, jint length)
    {
      if (klass == 0 || length < 0 || offset+length > data->length)
        throw_internal_error ("arguments to _Jv_DefineClass");
--- 218,225 ----
        throw_class_format_error ("erroneous type descriptor");
    }
  
!   _Jv_ClassReader (jclass klass, jbyteArray data, jint offset, jint length,
! 		   java::security::ProtectionDomain *pd)
    {
      if (klass == 0 || length < 0 || offset+length > data->length)
        throw_internal_error ("arguments to _Jv_DefineClass");
*************** struct _Jv_ClassReader {
*** 221,227 ****
      bytes  = (unsigned char*) (elements (data)+offset);
      len    = length;
      pos    = 0;
!     def    = (_Jv_InterpClass*) klass;
    }
  
    /** and here goes the parser members defined out-of-line */
--- 228,238 ----
      bytes  = (unsigned char*) (elements (data)+offset);
      len    = length;
      pos    = 0;
!     def    = klass;
!     def->size_in_bytes = -1;
!     def->vtable_method_count = -1;
!     def->engine = &_Jv_soleInterpreterEngine;
!     def->protectionDomain = pd;
    }
  
    /** and here goes the parser members defined out-of-line */
*************** struct _Jv_ClassReader {
*** 268,276 ****
  };
  
  void
! _Jv_DefineClass (jclass klass, jbyteArray data, jint offset, jint length)
  {
!   _Jv_ClassReader reader (klass, data, offset, length);
    reader.parse();
  
    /* that's it! */
--- 279,288 ----
  };
  
  void
! _Jv_DefineClass (jclass klass, jbyteArray data, jint offset, jint length,
! 		 java::security::ProtectionDomain *pd)
  {
!   _Jv_ClassReader reader (klass, data, offset, length, pd);
    reader.parse();
  
    /* that's it! */
*************** _Jv_ClassReader::parse ()
*** 306,313 ****
  
    handleClassBegin (access_flags, this_class, super_class);
  
    int interfaces_count = read2u (); 
! 	
    handleInterfacesBegin (interfaces_count);
  
    for (int i = 0; i < interfaces_count; i++)
--- 318,330 ----
  
    handleClassBegin (access_flags, this_class, super_class);
  
+   // Allocate our aux_info here, after the name is set, to fulfill our
+   // contract with the collector interface.
+   def->aux_info = (void *) _Jv_AllocBytes (sizeof (_Jv_InterpClass));
+   def_interp = (_Jv_InterpClass *) def->aux_info;
+ 
    int interfaces_count = read2u (); 
! 
    handleInterfacesBegin (interfaces_count);
  
    for (int i = 0; i < interfaces_count; i++)
*************** _Jv_ClassReader::parse ()
*** 330,339 ****
    if (pos != len)
      throw_class_format_error ("unused data before end of file");
  
!   // tell everyone we're done.
!   def->state = JV_STATE_LOADED;
    def->notifyAll ();
- 
  }
  
  void _Jv_ClassReader::read_constpool ()
--- 347,357 ----
    if (pos != len)
      throw_class_format_error ("unused data before end of file");
  
!   // Tell everyone we're done.
!   def->state = JV_STATE_READ;
!   if (gcj::verbose_class_flag)
!     _Jv_Linker::print_class_loaded (def);
    def->notifyAll ();
  }
  
  void _Jv_ClassReader::read_constpool ()
*************** void _Jv_ClassReader::read_one_method_at
*** 510,539 ****
  	throw_class_format_error ("only one Exceptions attribute allowed per method");
  
        int num_exceptions = read2u ();
-       // We use malloc here because the GC won't scan the method
-       // objects.  FIXME this means a memory leak if we GC a class.
-       // (Currently we never do.)
        _Jv_Utf8Const **exceptions =
! 	(_Jv_Utf8Const **) _Jv_Malloc ((num_exceptions + 1) * sizeof (_Jv_Utf8Const *));
  
        int out = 0;
        _Jv_word *pool_data = def->constants.data;
        for (int i = 0; i < num_exceptions; ++i)
  	{
! 	  try
! 	    {
! 	      int ndx = read2u ();
! 	      // JLS 2nd Ed. 4.7.5 requires that the tag not be 0.
! 	      if (ndx != 0)
! 		{
! 		  check_tag (ndx, JV_CONSTANT_Class);
! 		  exceptions[out++] = pool_data[ndx].utf8; 
! 		}
! 	    }
! 	  catch (java::lang::Throwable *exc)
  	    {
! 	      _Jv_Free (exceptions);
! 	      throw exc;
  	    }
  	}
        exceptions[out] = NULL;
--- 528,547 ----
  	throw_class_format_error ("only one Exceptions attribute allowed per method");
  
        int num_exceptions = read2u ();
        _Jv_Utf8Const **exceptions =
! 	(_Jv_Utf8Const **) _Jv_AllocBytes ((num_exceptions + 1)
! 					   * sizeof (_Jv_Utf8Const *));
  
        int out = 0;
        _Jv_word *pool_data = def->constants.data;
        for (int i = 0; i < num_exceptions; ++i)
  	{
! 	  int ndx = read2u ();
! 	  // JLS 2nd Ed. 4.7.5 requires that the tag not be 0.
! 	  if (ndx != 0)
  	    {
! 	      check_tag (ndx, JV_CONSTANT_Class);
! 	      exceptions[out++] = pool_data[ndx].utf8; 
  	    }
  	}
        exceptions[out] = NULL;
*************** _Jv_ClassReader::prepare_pool_entry (int
*** 772,780 ****
  			   name_index, type_index);
  
  	  if (this_tag == JV_CONSTANT_Fieldref)
! 	    _Jv_VerifyFieldSignature (pool_data[type_index].utf8);
  	  else
! 	    _Jv_VerifyMethodSignature (pool_data[type_index].utf8);
  
  	  _Jv_Utf8Const* name = pool_data[name_index].utf8;
  
--- 780,788 ----
  			   name_index, type_index);
  
  	  if (this_tag == JV_CONSTANT_Fieldref)
! 	    verify_field_signature (pool_data[type_index].utf8);
  	  else
! 	    verify_method_signature (pool_data[type_index].utf8);
  
  	  _Jv_Utf8Const* name = pool_data[name_index].utf8;
  
*************** _Jv_ClassReader::prepare_pool_entry (int
*** 847,854 ****
  
  
  void
! _Jv_ClassReader::handleClassBegin
!   (int access_flags, int this_class, int super_class)
  {
    using namespace java::lang::reflect;
  
--- 855,861 ----
  
  
  void
! _Jv_ClassReader::handleClassBegin (int access_flags, int this_class, int super_class)
  {
    using namespace java::lang::reflect;
  
*************** _Jv_ClassReader::handleClassBegin
*** 861,867 ****
    // was ClassLoader.defineClass called with an expected class name?
    if (def->name == 0)
      {
!       jclass orig = _Jv_FindClassInCache (loadedName, def->loader);
  
        if (orig == 0)
  	{
--- 868,874 ----
    // was ClassLoader.defineClass called with an expected class name?
    if (def->name == 0)
      {
!       jclass orig = def->loader->findLoadedClass(loadedName->toString());
  
        if (orig == 0)
  	{
*************** _Jv_ClassReader::handleClassBegin
*** 884,890 ****
        jstring msg = JvNewStringUTF ("loaded class ");
        msg = msg->concat (def->getName ());
        msg = msg->concat (_Jv_NewStringUTF (" was in fact named "));
!       jstring klass_name = _Jv_NewStringUTF (loadedName->data);
        msg = msg->concat (klass_name);
  
        throw_no_class_def_found_error (msg);
--- 891,897 ----
        jstring msg = JvNewStringUTF ("loaded class ");
        msg = msg->concat (def->getName ());
        msg = msg->concat (_Jv_NewStringUTF (" was in fact named "));
!       jstring klass_name = loadedName->toString();
        msg = msg->concat (klass_name);
  
        throw_no_class_def_found_error (msg);
*************** _Jv_ClassReader::handleClassBegin
*** 901,916 ****
  	throw_no_class_def_found_error ("loading java.lang.Object");
      }
  
-   // In the pre-loading state, it can be looked up in the
-   // cache only by this thread!  This allows the super-class
-   // to include references to this class.
- 
    def->state = JV_STATE_PRELOADING;
  
!   {
!     JvSynchronize sync (&java::lang::Class::class$);
!     _Jv_RegisterClass (def);
!   }
  
    if (super_class != 0)
      {
--- 908,921 ----
  	throw_no_class_def_found_error ("loading java.lang.Object");
      }
  
    def->state = JV_STATE_PRELOADING;
  
!   // Register this class with its defining loader as well (despite the
!   // name of the function we're calling), so that super class lookups
!   // work properly.  If there is an error, our caller will unregister
!   // this class from the class loader.  Also, we don't need to hold a
!   // lock here, as our caller has acquired it.
!   _Jv_RegisterInitiatingLoader (def, def->loader);
  
    if (super_class != 0)
      {
*************** _Jv_ClassReader::handleClassBegin
*** 943,965 ****
    def->notifyAll ();
  }
  
! ///// implements the checks described in sect. 5.3.5.3
  void
  _Jv_ClassReader::checkExtends (jclass sub, jclass super)
  {
    using namespace java::lang::reflect;
  
!   // having an interface or a final class as a superclass is no good
    if ((super->accflags & (Modifier::INTERFACE | Modifier::FINAL)) != 0)
      {
        throw_incompatible_class_change_error (sub->getName ());
      }
  
!   // if the super class is not public, we need to check some more
    if ((super->accflags & Modifier::PUBLIC) == 0)
      {
!       // With package scope, the classes must have the same
!       // class loader.
        if (   sub->loader != super->loader
  	  || !_Jv_ClassNameSamePackage (sub->name, super->name))
  	{
--- 948,972 ----
    def->notifyAll ();
  }
  
! ///// Implements the checks described in sect. 5.3.5.3
  void
  _Jv_ClassReader::checkExtends (jclass sub, jclass super)
  {
    using namespace java::lang::reflect;
  
!   _Jv_Linker::wait_for_state (super, JV_STATE_LOADING);
! 
!   // Having an interface or a final class as a superclass is no good.
    if ((super->accflags & (Modifier::INTERFACE | Modifier::FINAL)) != 0)
      {
        throw_incompatible_class_change_error (sub->getName ());
      }
  
!   // If the super class is not public, we need to check some more.
    if ((super->accflags & Modifier::PUBLIC) == 0)
      {
!       // With package scope, the classes must have the same class
!       // loader.
        if (   sub->loader != super->loader
  	  || !_Jv_ClassNameSamePackage (sub->name, super->name))
  	{
*************** _Jv_ClassReader::checkExtends (jclass su
*** 967,973 ****
  	}
      } 
  
!   for (; super != 0; super = super->superclass)
      {
        if (super == sub)
  	throw_class_circularity_error (sub->getName ());
--- 974,980 ----
  	}
      } 
  
!   for (; super != 0; super = super->getSuperclass ())
      {
        if (super == sub)
  	throw_class_circularity_error (sub->getName ());
*************** void _Jv_ClassReader::handleFieldsBegin 
*** 1047,1056 ****
    def->fields = (_Jv_Field*) 
      _Jv_AllocBytes (count * sizeof (_Jv_Field));
    def->field_count = count;
!   def->field_initializers = (_Jv_ushort*)
      _Jv_AllocBytes (count * sizeof (_Jv_ushort));
    for (int i = 0; i < count; i++)
!     def->field_initializers[i] = (_Jv_ushort) 0;
  }
  
  void _Jv_ClassReader::handleField (int field_no,
--- 1054,1063 ----
    def->fields = (_Jv_Field*) 
      _Jv_AllocBytes (count * sizeof (_Jv_Field));
    def->field_count = count;
!   def_interp->field_initializers = (_Jv_ushort*)
      _Jv_AllocBytes (count * sizeof (_Jv_ushort));
    for (int i = 0; i < count; i++)
!     def_interp->field_initializers[i] = (_Jv_ushort) 0;
  }
  
  void _Jv_ClassReader::handleField (int field_no,
*************** void _Jv_ClassReader::handleField (int f
*** 1065,1075 ****
    _Jv_Field *field = &def->fields[field_no];
    _Jv_Utf8Const *field_name = pool_data[name].utf8;
  
- #ifndef COMPACT_FIELDS
    field->name      = field_name;
- #else
-   field->nameIndex = name;
- #endif
  
    // Ignore flags we don't know about.  
    field->flags = flags & Modifier::ALL_FLAGS;
--- 1072,1078 ----
*************** void _Jv_ClassReader::handleField (int f
*** 1090,1109 ****
  	    throw_class_format_error ("duplicate field name");
  	}
  
!       if (field->flags & (Modifier::SYNCHRONIZED
! 			  | Modifier::NATIVE
! 			  | Modifier::INTERFACE
! 			  | Modifier::ABSTRACT))
! 	throw_class_format_error ("erroneous field access flags");
!       
        if (1 < ( ((field->flags & Modifier::PUBLIC) ? 1 : 0)
  		+((field->flags & Modifier::PRIVATE) ? 1 : 0)
  		+((field->flags & Modifier::PROTECTED) ? 1 : 0)))
  	throw_class_format_error ("erroneous field access flags");
      }
  
    if (verify)
!     _Jv_VerifyFieldSignature (sig);
  
    // field->type is really a jclass, but while it is still
    // unresolved we keep an _Jv_Utf8Const* instead.
--- 1093,1111 ----
  	    throw_class_format_error ("duplicate field name");
  	}
  
!       // At most one of PUBLIC, PRIVATE, or PROTECTED is allowed.
        if (1 < ( ((field->flags & Modifier::PUBLIC) ? 1 : 0)
  		+((field->flags & Modifier::PRIVATE) ? 1 : 0)
  		+((field->flags & Modifier::PROTECTED) ? 1 : 0)))
  	throw_class_format_error ("erroneous field access flags");
+ 
+       // FIXME: JVM spec S4.5: Verify ACC_FINAL and ACC_VOLATILE are not 
+       // both set. Verify modifiers for interface fields.
+       
      }
  
    if (verify)
!     verify_field_signature (sig);
  
    // field->type is really a jclass, but while it is still
    // unresolved we keep an _Jv_Utf8Const* instead.
*************** void _Jv_ClassReader::handleConstantValu
*** 1133,1139 ****
      throw_class_format_error ("field has multiple ConstantValue attributes");
  
    field->flags |= _Jv_FIELD_CONSTANT_VALUE;
!   def->field_initializers[field_index] = value;
  
    /* type check the initializer */
    
--- 1135,1141 ----
      throw_class_format_error ("field has multiple ConstantValue attributes");
  
    field->flags |= _Jv_FIELD_CONSTANT_VALUE;
!   def_interp->field_initializers[field_index] = value;
  
    /* type check the initializer */
    
*************** void _Jv_ClassReader::handleFieldsEnd ()
*** 1153,1159 ****
    int low            = 0;
    int high           = def->field_count-1;
    _Jv_Field  *fields = def->fields;
!   _Jv_ushort *inits  = def->field_initializers;
  
    // this is kind of a raw version of quicksort.
    while (low < high)
--- 1155,1161 ----
    int low            = 0;
    int high           = def->field_count-1;
    _Jv_Field  *fields = def->fields;
!   _Jv_ushort *inits  = def_interp->field_initializers;
  
    // this is kind of a raw version of quicksort.
    while (low < high)
*************** _Jv_ClassReader::handleMethodsBegin (int
*** 1195,1207 ****
  {
    def->methods = (_Jv_Method *) _Jv_AllocBytes (sizeof (_Jv_Method) * count);
  
!   def->interpreted_methods
      = (_Jv_MethodBase **) _Jv_AllocBytes (sizeof (_Jv_MethodBase *)
  					  * count);
  
    for (int i = 0; i < count; i++)
      {
!       def->interpreted_methods[i] = 0;
        def->methods[i].index = (_Jv_ushort) -1;
      }
  
--- 1197,1209 ----
  {
    def->methods = (_Jv_Method *) _Jv_AllocBytes (sizeof (_Jv_Method) * count);
  
!   def_interp->interpreted_methods
      = (_Jv_MethodBase **) _Jv_AllocBytes (sizeof (_Jv_MethodBase *)
  					  * count);
  
    for (int i = 0; i < count; i++)
      {
!       def_interp->interpreted_methods[i] = 0;
        def->methods[i].index = (_Jv_ushort) -1;
      }
  
*************** void _Jv_ClassReader::handleMethod 
*** 1228,1234 ****
    // ignore unknown flags
    method->accflags = accflags & Modifier::ALL_FLAGS;
  
!   // intialize...
    method->ncode = 0;
    method->throws = NULL;
    
--- 1230,1236 ----
    // ignore unknown flags
    method->accflags = accflags & Modifier::ALL_FLAGS;
  
!   // Initialize...
    method->ncode = 0;
    method->throws = NULL;
    
*************** void _Jv_ClassReader::handleMethod 
*** 1240,1246 ****
        else
  	verify_identifier (method->name);
  
!       _Jv_VerifyMethodSignature (method->signature);
  
        for (int i = 0; i < mth_index; ++i)
  	{
--- 1242,1248 ----
        else
  	verify_identifier (method->name);
  
!       verify_method_signature (method->signature);
  
        for (int i = 0; i < mth_index; ++i)
  	{
*************** void _Jv_ClassReader::handleMethod 
*** 1250,1264 ****
  	    throw_class_format_error ("duplicate method");
  	}
  
!       if (method->accflags & (Modifier::VOLATILE
! 			      | Modifier::TRANSIENT
! 			      | Modifier::INTERFACE))
! 	throw_class_format_error ("erroneous method access flags");
!       
        if (1 < ( ((method->accflags & Modifier::PUBLIC) ? 1 : 0)
  		+((method->accflags & Modifier::PRIVATE) ? 1 : 0)
  		+((method->accflags & Modifier::PROTECTED) ? 1 : 0)))
  	throw_class_format_error ("erroneous method access flags");
      }
  }
  
--- 1252,1266 ----
  	    throw_class_format_error ("duplicate method");
  	}
  
!       // At most one of PUBLIC, PRIVATE, or PROTECTED is allowed.
        if (1 < ( ((method->accflags & Modifier::PUBLIC) ? 1 : 0)
  		+((method->accflags & Modifier::PRIVATE) ? 1 : 0)
  		+((method->accflags & Modifier::PROTECTED) ? 1 : 0)))
  	throw_class_format_error ("erroneous method access flags");
+ 
+       // FIXME: JVM spec S4.6: if ABSTRACT modifier is set, verify other 
+       // flags are not set. Verify flags for interface methods. Verifiy
+       // modifiers for initializers. 
      }
  }
  
*************** void _Jv_ClassReader::handleCodeAttribut
*** 1270,1276 ****
    _Jv_InterpMethod *method = 
      (_Jv_InterpMethod*) (_Jv_AllocBytes (size));
  
-   method->deferred	 = NULL;
    method->max_stack      = max_stack;
    method->max_locals     = max_locals;
    method->code_length    = code_length;
--- 1272,1277 ----
*************** void _Jv_ClassReader::handleCodeAttribut
*** 1284,1290 ****
  	  (void*) (bytes+code_start),
  	  code_length);
  
!   def->interpreted_methods[method_index] = method;
  
    if ((method->self->accflags & java::lang::reflect::Modifier::STATIC))
      {
--- 1285,1291 ----
  	  (void*) (bytes+code_start),
  	  code_length);
  
!   def_interp->interpreted_methods[method_index] = method;
  
    if ((method->self->accflags & java::lang::reflect::Modifier::STATIC))
      {
*************** void _Jv_ClassReader::handleExceptionTab
*** 1301,1307 ****
     int start_pc, int end_pc, int handler_pc, int catch_type)
  {
    _Jv_InterpMethod *method = reinterpret_cast<_Jv_InterpMethod *>
!     (def->interpreted_methods[method_index]);
    _Jv_InterpException *exc = method->exceptions ();
  
    exc[exc_index].start_pc.i     = start_pc;
--- 1302,1308 ----
     int start_pc, int end_pc, int handler_pc, int catch_type)
  {
    _Jv_InterpMethod *method = reinterpret_cast<_Jv_InterpMethod *>
!     (def_interp->interpreted_methods[method_index]);
    _Jv_InterpException *exc = method->exceptions ();
  
    exc[exc_index].start_pc.i     = start_pc;
*************** void _Jv_ClassReader::handleMethodsEnd (
*** 1319,1325 ****
        _Jv_Method *method = &def->methods[i];
        if ((method->accflags & Modifier::NATIVE) != 0)
  	{
! 	  if (def->interpreted_methods[i] != 0)
  	    throw_class_format_error ("code provided for native method");
  	  else
  	    {
--- 1320,1326 ----
        _Jv_Method *method = &def->methods[i];
        if ((method->accflags & Modifier::NATIVE) != 0)
  	{
! 	  if (def_interp->interpreted_methods[i] != 0)
  	    throw_class_format_error ("code provided for native method");
  	  else
  	    {
*************** void _Jv_ClassReader::handleMethodsEnd (
*** 1328,1335 ****
  	      m->defining_class = def;
  	      m->self = method;
  	      m->function = NULL;
! 	      def->interpreted_methods[i] = m;
! 	      m->deferred = NULL;
  
  	      if ((method->accflags & Modifier::STATIC))
  		{
--- 1329,1335 ----
  	      m->defining_class = def;
  	      m->self = method;
  	      m->function = NULL;
! 	      def_interp->interpreted_methods[i] = m;
  
  	      if ((method->accflags & Modifier::STATIC))
  		{
*************** void _Jv_ClassReader::handleMethodsEnd (
*** 1344,1355 ****
  	}
        else if ((method->accflags & Modifier::ABSTRACT) != 0)
  	{
! 	  if (def->interpreted_methods[i] != 0)
  	    throw_class_format_error ("code provided for abstract method");
  	}
        else
  	{
! 	  if (def->interpreted_methods[i] == 0)
  	    throw_class_format_error ("method with no code");
  	}
      }
--- 1344,1355 ----
  	}
        else if ((method->accflags & Modifier::ABSTRACT) != 0)
  	{
! 	  if (def_interp->interpreted_methods[i] != 0)
  	    throw_class_format_error ("code provided for abstract method");
  	}
        else
  	{
! 	  if (def_interp->interpreted_methods[i] == 0)
  	    throw_class_format_error ("method with no code");
  	}
      }
*************** void _Jv_ClassReader::throw_class_format
*** 1361,1368 ****
    if (def->name != NULL)
      {
        jsize mlen = strlen (msg);
!       unsigned char* data = (unsigned char*) def->name->data;
!       int ulen = def->name->length;
        unsigned char* limit = data + ulen;
        jsize nlen = _Jv_strLengthUtf8 ((char *) data, ulen);
        jsize len = nlen + mlen + 3;
--- 1361,1368 ----
    if (def->name != NULL)
      {
        jsize mlen = strlen (msg);
!       unsigned char* data = (unsigned char*) def->name->chars();
!       int ulen = def->name->len();
        unsigned char* limit = data + ulen;
        jsize nlen = _Jv_strLengthUtf8 ((char *) data, ulen);
        jsize len = nlen + mlen + 3;
*************** _Jv_VerifyOne (unsigned char* ptr, unsig
*** 1494,1501 ****
  bool
  _Jv_VerifyFieldSignature (_Jv_Utf8Const*sig)
  {
!   unsigned char* ptr = (unsigned char*) sig->data;
!   unsigned char* limit = ptr + sig->length;
  
    ptr = _Jv_VerifyOne (ptr, limit, false);
  
--- 1494,1501 ----
  bool
  _Jv_VerifyFieldSignature (_Jv_Utf8Const*sig)
  {
!   unsigned char* ptr = (unsigned char*) sig->chars();
!   unsigned char* limit = ptr + sig->len();
  
    ptr = _Jv_VerifyOne (ptr, limit, false);
  
*************** _Jv_VerifyFieldSignature (_Jv_Utf8Const*
*** 1505,1512 ****
  bool
  _Jv_VerifyMethodSignature (_Jv_Utf8Const*sig)
  {
!   unsigned char* ptr = (unsigned char*) sig->data;
!   unsigned char* limit = ptr + sig->length;
  
    if (ptr == limit || UTF8_GET(ptr,limit) != '(')
      return false;
--- 1505,1512 ----
  bool
  _Jv_VerifyMethodSignature (_Jv_Utf8Const*sig)
  {
!   unsigned char* ptr = (unsigned char*) sig->chars();
!   unsigned char* limit = ptr + sig->len();
  
    if (ptr == limit || UTF8_GET(ptr,limit) != '(')
      return false;
*************** is_identifier_part (int c)
*** 1560,1567 ****
  bool
  _Jv_VerifyIdentifier (_Jv_Utf8Const* name)
  {
!   unsigned char *ptr   = (unsigned char*) name->data;
!   unsigned char *limit = ptr + name->length;
    int ch;
  
    if ((ch = UTF8_GET (ptr, limit))==-1
--- 1560,1567 ----
  bool
  _Jv_VerifyIdentifier (_Jv_Utf8Const* name)
  {
!   unsigned char *ptr   = (unsigned char*) name->chars();
!   unsigned char *limit = (unsigned char*) name->limit();
    int ch;
  
    if ((ch = UTF8_GET (ptr, limit))==-1
*************** _Jv_VerifyClassName (unsigned char* ptr,
*** 1616,1632 ****
  bool
  _Jv_VerifyClassName (_Jv_Utf8Const *name)
  {
!   return _Jv_VerifyClassName ((unsigned char*)&name->data[0],
! 			      (_Jv_ushort) name->length);
  }
  
  /* Returns true, if NAME1 and NAME2 represent classes in the same
!    package.  */
  bool
  _Jv_ClassNameSamePackage (_Jv_Utf8Const *name1, _Jv_Utf8Const *name2)
  {
!   unsigned char* ptr1 = (unsigned char*) name1->data;
!   unsigned char* limit1 = ptr1 + name1->length;
  
    unsigned char* last1 = ptr1;
  
--- 1616,1631 ----
  bool
  _Jv_VerifyClassName (_Jv_Utf8Const *name)
  {
!   return _Jv_VerifyClassName ((unsigned char*)name->chars(), name->len());
  }
  
  /* Returns true, if NAME1 and NAME2 represent classes in the same
!    package.  Neither NAME2 nor NAME2 may name an array type.  */
  bool
  _Jv_ClassNameSamePackage (_Jv_Utf8Const *name1, _Jv_Utf8Const *name2)
  {
!   unsigned char* ptr1 = (unsigned char*) name1->chars();
!   unsigned char* limit1 = (unsigned char*) name1->limit();
  
    unsigned char* last1 = ptr1;
  
*************** _Jv_ClassNameSamePackage (_Jv_Utf8Const 
*** 1642,1661 ****
    }
  
    // Now the length of NAME1's package name is LEN.
!   int len = last1 - (unsigned char*) name1->data;
  
    // If this is longer than NAME2, then we're off.
!   if (len > name2->length)
      return false;
  
    // Then compare the first len bytes for equality.
!   if (memcmp ((void*) name1->data, (void*) name2->data, len) == 0)
      {
        // Check that there are no .'s after position LEN in NAME2.
  
!       unsigned char* ptr2 = (unsigned char*) name2->data + len;
!       unsigned char* limit2 =
! 	(unsigned char*) name2->data + name2->length;
  
        while (ptr2 < limit2)
  	{
--- 1641,1659 ----
    }
  
    // Now the length of NAME1's package name is LEN.
!   int len = last1 - (unsigned char*) name1->chars();
  
    // If this is longer than NAME2, then we're off.
!   if (len > name2->len())
      return false;
  
    // Then compare the first len bytes for equality.
!   if (memcmp ((void*) name1->chars(), (void*) name2->chars(), len) == 0)
      {
        // Check that there are no .'s after position LEN in NAME2.
  
!       unsigned char* ptr2 = (unsigned char*) name2->chars() + len;
!       unsigned char* limit2 = (unsigned char*) name2->limit();
  
        while (ptr2 < limit2)
  	{
diff -Nrcpad gcc-3.4.3/libjava/doc/cni.sgml gcc-4.0.0/libjava/doc/cni.sgml
*** gcc-3.4.3/libjava/doc/cni.sgml	Sun May 13 01:28:18 2001
--- gcc-4.0.0/libjava/doc/cni.sgml	Thu Jan  1 00:00:00 1970
***************
*** 1,996 ****
- <!DOCTYPE article PUBLIC "-//Davenport//DTD DocBook V3.0//EN">
- <article>
- <artheader>
- <title>The Cygnus Native Interface for C++/Java Integration</title>
- <subtitle>Writing native Java methods in natural C++</subtitle>
- <authorgroup>
- <corpauthor>Cygnus Solutions</corpauthor>
- </authorgroup>
- <date>March, 2000</date>
- </artheader>
- 
- <abstract><para>
- This documents CNI, the Cygnus Native Interface,
- which is is a convenient way to write Java native methods using C++.
- This is a more efficient, more convenient, but less portable
- alternative to the standard JNI (Java Native Interface).</para>
- </abstract>
- 
- <sect1><title>Basic Concepts</title>
- <para>
- In terms of languages features, Java is mostly a subset
- of C++.  Java has a few important extensions, plus a powerful standard
- class library, but on the whole that does not change the basic similarity.
- Java is a hybrid object-oriented language, with a few native types,
- in addition to class types.  It is class-based, where a class may have
- static as well as per-object fields, and static as well as instance methods.
- Non-static methods may be virtual, and may be overloaded.  Overloading is
- resolved at compile time by matching the actual argument types against
- the parameter types.  Virtual methods are implemented using indirect calls
- through a dispatch table (virtual function table).  Objects are
- allocated on the heap, and initialized using a constructor method.
- Classes are organized in a package hierarchy.
- </para>
- <para>
- All of the listed attributes are also true of C++, though C++ has
- extra features (for example in C++ objects may be allocated not just
- on the heap, but also statically or in a local stack frame).  Because
- <acronym>gcj</acronym> uses the same compiler technology as
- <acronym>g++</acronym> (the GNU C++ compiler), it is possible
- to make the intersection of the two languages use the same
- <acronym>ABI</acronym> (object representation and calling conventions).
- The key idea in <acronym>CNI</acronym> is that Java objects are C++ objects,
- and all Java classes are C++ classes (but not the other way around).
- So the most important task in integrating Java and C++ is to
- remove gratuitous incompatibilities.
- </para>
- <para>
- You write CNI code as a regular C++ source file.  (You do have to use
- a Java/CNI-aware C++ compiler, specifically a recent version of G++.)</para>
- <para>
- You start with:
- <programlisting>
- #include &lt;gcj/cni.h&gt;
- </programlisting></para>
- 
- <para>
- You then include header files for the various Java classes you need
- to use:
- <programlisting>
- #include &lt;java/lang/Character.h&gt;
- #include &lt;java/util/Date.h&gt;
- #include &lt;java/lang/IndexOutOfBoundsException.h&gt;
- </programlisting></para>
- 
- <para>
- In general, <acronym>CNI</acronym> functions and macros start with the
- `<literal>Jv</literal>' prefix, for example the function
- `<literal>JvNewObjectArray</literal>'.  This convention is used to
- avoid conflicts with other libraries.
- Internal functions in <acronym>CNI</acronym> start with the prefix
- `<literal>_Jv_</literal>'.  You should not call these;
- if you find a need to, let us know and we will try to come up with an
- alternate solution.  (This manual lists <literal>_Jv_AllocBytes</literal>
- as an example;  <acronym>CNI</acronym> should instead provide
- a <literal>JvAllocBytes</literal> function.)</para>
- <para>
- These header files are automatically generated by <command>gcjh</command>.
- </para>
- </sect1>
- 
- <sect1><title>Packages</title>
- <para>
- The only global names in Java are class names, and packages.
- A <firstterm>package</firstterm> can contain zero or more classes, and
- also zero or more sub-packages.
- Every class belongs to either an unnamed package or a package that
- has a hierarchical and globally unique name.
- </para>
- <para>
- A Java package is mapped to a C++ <firstterm>namespace</firstterm>.
- The Java class <literal>java.lang.String</literal>
- is in the package <literal>java.lang</literal>, which is a sub-package
- of <literal>java</literal>.  The C++ equivalent is the
- class <literal>java::lang::String</literal>,
- which is in the namespace <literal>java::lang</literal>,
- which is in the namespace <literal>java</literal>.
- </para>
- <para>
- Here is how you could express this:
- <programlisting>
- // Declare the class(es), possibly in a header file:
- namespace java {
-   namespace lang {
-     class Object;
-     class String;
-     ...
-   }
- }
- 
- class java::lang::String : public java::lang::Object
- {
-   ...
- };
- </programlisting>
- </para>
- <para>
- The <literal>gcjh</literal> tool automatically generates the
- nessary namespace declarations.</para>
- 
- <sect2><title>Nested classes as a substitute for namespaces</title>
- <para>
- <!-- FIXME the next line reads poorly jsm -->
- It is not that long since g++ got complete namespace support,
- and it was very recent (end of February 1999) that <literal>libgcj</literal>
- was changed to uses namespaces.  Releases before then used
- nested classes, which are the C++ equivalent of Java inner classes.
- They provide similar (though less convenient) functionality.
- The old syntax is:
- <programlisting>
- class java {
-   class lang {
-     class Object;
-     class String;
-   };
- };
- </programlisting>
- The obvious difference is the use of <literal>class</literal> instead
- of <literal>namespace</literal>.  The more important difference is
- that all the members of a nested class have to be declared inside
- the parent class definition, while namespaces can be defined in
- multiple places in the source.  This is more convenient, since it
- corresponds more closely to how Java packages are defined.
- The main difference is in the declarations; the syntax for
- using a nested class is the same as with namespaces:
- <programlisting>
- class java::lang::String : public java::lang::Object
- { ... }
- </programlisting>
- Note that the generated code (including name mangling)
- using nested classes is the same as that using namespaces.</para>
- </sect2>
- 
- <sect2><title>Leaving out package names</title>
- <para>
- <!-- FIXME next line reads poorly jsm -->
- Having to always type the fully-qualified class name is verbose.
- It also makes it more difficult to change the package containing a class.
- The Java <literal>package</literal> declaration specifies that the
- following class declarations are in the named package, without having
- to explicitly name the full package qualifiers.
- The <literal>package</literal> declaration can be followed by zero or
- more <literal>import</literal> declarations, which allows either
- a single class or all the classes in a package to be named by a simple
- identifier.  C++ provides something similar
- with the <literal>using</literal> declaration and directive.
- </para>
- <para>
- A Java simple-type-import declaration:
- <programlisting>
- import <replaceable>PackageName</replaceable>.<replaceable>TypeName</replaceable>;
- </programlisting>
- allows using <replaceable>TypeName</replaceable> as a shorthand for
- <literal><replaceable>PackageName</replaceable>.<replaceable>TypeName</replaceable></literal>.
- The C++ (more-or-less) equivalent is a <literal>using</literal>-declaration:
- <programlisting>
- using <replaceable>PackageName</replaceable>::<replaceable>TypeName</replaceable>;
- </programlisting>
- </para>
- <para>
- A Java import-on-demand declaration:
- <programlisting>
- import <replaceable>PackageName</replaceable>.*;
- </programlisting>
- allows using <replaceable>TypeName</replaceable> as a shorthand for
- <literal><replaceable>PackageName</replaceable>.<replaceable>TypeName</replaceable></literal>
- The C++ (more-or-less) equivalent is a <literal>using</literal>-directive:
- <programlisting>
- using namespace <replaceable>PackageName</replaceable>;
- </programlisting>
- </para>
- </sect2>
- </sect1>
- 
- <sect1><title>Primitive types</title>
- <para>
- Java provides 8 <quote>primitives</quote> types:
- <literal>byte</literal>, <literal>short</literal>, <literal>int</literal>,
- <literal>long</literal>, <literal>float</literal>, <literal>double</literal>,
- <literal>char</literal>, and <literal>boolean</literal>.
- These are the same as the following C++ <literal>typedef</literal>s
- (which are defined by <literal>gcj/cni.h</literal>):
- <literal>jbyte</literal>, <literal>jshort</literal>, <literal>jint</literal>,
- <literal>jlong</literal>, <literal>jfloat</literal>,
- <literal>jdouble</literal>,
- <literal>jchar</literal>, and <literal>jboolean</literal>.
- You should use the C++ typenames
- (<ForeignPhrase><Abbrev>e.g.</Abbrev></ForeignPhrase> <literal>jint</literal>),
- and not the Java types names
- (<ForeignPhrase><Abbrev>e.g.</Abbrev></ForeignPhrase> <literal>int</literal>),
- even if they are <quote>the same</quote>.
- This is because there is no guarantee that the C++ type
- <literal>int</literal> is a 32-bit type, but <literal>jint</literal>
- <emphasis>is</emphasis> guaranteed to be a 32-bit type.
- 
- <informaltable frame="all" colsep="1" rowsep="0">
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Java type</entry>
- <entry>C/C++ typename</entry>
- <entry>Description</entry>
- </thead>
- <tbody>
- <row>
- <entry>byte</entry>
- <entry>jbyte</entry>
- <entry>8-bit signed integer</entry>
- </row>
- <row>
- <entry>short</entry>
- <entry>jshort</entry>
- <entry>16-bit signed integer</entry>
- </row>
- <row>
- <entry>int</entry>
- <entry>jint</entry>
- <entry>32-bit signed integer</entry>
- </row>
- <row>
- <entry>long</entry>
- <entry>jlong</entry>
- <entry>64-bit signed integer</entry>
- </row>
- <row>
- <entry>float</entry>
- <entry>jfloat</entry>
- <entry>32-bit IEEE floating-point number</entry>
- </row>
- <row>
- <entry>double</entry>
- <entry>jdouble</entry>
- <entry>64-bit IEEE floating-point number</entry>
- </row>
- <row>
- <entry>char</entry>
- <entry>jchar</entry>
- <entry>16-bit Unicode character</entry>
- </row>
- <row>
- <entry>boolean</entry>
- <entry>jboolean</entry>
- <entry>logical (Boolean) values</entry>
- </row>
- <row>
- <entry>void</entry>
- <entry>void</entry>
- <entry>no value</entry>
- </row>
- </tbody></tgroup>
- </informaltable>
- </para>
- 
- <para>
- <funcsynopsis>
- <funcdef><function>JvPrimClass</function></funcdef>
- <paramdef><parameter>primtype</parameter></paramdef>
- </funcsynopsis>
- This is a macro whose argument should be the name of a primitive
- type, <ForeignPhrase><Abbrev>e.g.</Abbrev></ForeignPhrase>
- <literal>byte</literal>.
- The macro expands to a pointer to the <literal>Class</literal> object
- corresponding to the primitive type.
- <ForeignPhrase><Abbrev>E.g.</Abbrev></ForeignPhrase>,
- <literal>JvPrimClass(void)</literal>
- has the same value as the Java expression
- <literal>Void.TYPE</literal> (or <literal>void.class</literal>).
- </para>
- 
- </sect1>
- 
- <sect1><title>Objects and Classes</title>
- <sect2><title>Classes</title>
- <para>
- All Java classes are derived from <literal>java.lang.Object</literal>.
- C++ does not have a unique <quote>root</quote>class, but we use
- a C++ <literal>java::lang::Object</literal> as the C++ version
- of the <literal>java.lang.Object</literal> Java class.  All
- other Java classes are mapped into corresponding C++ classes
- derived from <literal>java::lang::Object</literal>.</para>
- <para>
- Interface inheritance (the <quote><literal>implements</literal></quote>
- keyword) is currently not reflected in the C++ mapping.</para>
- </sect2>
- <sect2><title>Object references</title>
- <para>
- We implement a Java object reference as a pointer to the start
- of the referenced object.  It maps to a C++ pointer.
- (We cannot use C++ references for Java references, since
- once a C++ reference has been initialized, you cannot change it to
- point to another object.)
- The <literal>null</literal> Java reference maps to the <literal>NULL</literal>
- C++ pointer.
- </para>
- <para>
- Note that in some Java implementations an object reference is implemented as
- a pointer to a two-word <quote>handle</quote>.  One word of the handle
- points to the fields of the object, while the other points
- to a method table.  Gcj does not use this extra indirection.
- </para>
- </sect2>
- <sect2><title>Object fields</title>
- <para>
- Each object contains an object header, followed by the instance
- fields of the class, in order.  The object header consists of
- a single pointer to a dispatch or virtual function table.
- (There may be extra fields <quote>in front of</quote> the object,
- for example for
- memory management, but this is invisible to the application, and
- the reference to the object points to the dispatch table pointer.)
- </para>
- <para>
- The fields are laid out in the same order, alignment, and size
- as in C++.  Specifically, 8-bite and 16-bit native types
- (<literal>byte</literal>, <literal>short</literal>, <literal>char</literal>,
- and <literal>boolean</literal>) are <emphasis>not</emphasis>
- 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.</para>
- <para>
- If you include the <literal>gcjh</literal>-generated header for a
- class, you can access fields of Java classes in the <quote>natural</quote>
- way.  Given the following Java class:
- <programlisting>
- public class Int
- {
-   public int i;
-   public Integer (int i) { this.i = i; }
-   public static zero = new Integer(0);
- }
- </programlisting>
- you can write:
- <programlisting>
- #include &lt;gcj/cni.h&gt;
- #include &lt;Int.h&gt;
- Int*
- mult (Int *p, jint k)
- {
-   if (k == 0)
-     return Int::zero;  // static member access.
-   return new Int(p->i * k);
- }
- </programlisting>
- </para>
- <para>
- <acronym>CNI</acronym> does not strictly enforce the Java access
- specifiers, because Java permissions cannot be directly mapped
- into C++ permission.  Private Java fields and methods are mapped
- to private C++ fields and methods, but other fields and methods
- are mapped to public fields and methods.
- </para>
- </sect2>
- </sect1>
- 
- <sect1><title>Arrays</title>
- <para>
- While in many ways Java is similar to C and C++,
- it is quite different in its treatment of arrays.
- C arrays are based on the idea of pointer arithmetic,
- which would be incompatible with Java's security requirements.
- Java arrays are true objects (array types inherit from
- <literal>java.lang.Object</literal>).  An array-valued variable
- is one that contains a reference (pointer) to an array object.
- </para>
- <para>
- Referencing a Java array in C++ code is done using the
- <literal>JArray</literal> template, which as defined as follows:
- <programlisting>
- class __JArray : public java::lang::Object
- {
- public:
-   int length;
- };
- 
- template&lt;class T&gt;
- class JArray : public __JArray
- {
-   T data[0];
- public:
-   T&amp; operator[](jint i) { return data[i]; }
- };
- </programlisting></para>
- <para>
- <funcsynopsis> 
-    <funcdef>template&lt;class T&gt;  T *<function>elements</function></funcdef>
-    <paramdef>JArray&lt;T&gt; &amp;<parameter>array</parameter></paramdef>
- </funcsynopsis>
-    This template function can be used to get a pointer to the
-    elements of the <parameter>array</parameter>.
-    For instance, you can fetch a pointer
-    to the integers that make up an <literal>int[]</literal> like so:
- <programlisting>
- extern jintArray foo;
- jint *intp = elements (foo);
- </programlisting>
- The name of this function may change in the future.</para>
- <para>
- There are a number of typedefs which correspond to typedefs from JNI.
- Each is the type of an array holding objects of the appropriate type:
- <programlisting>
- typedef __JArray *jarray;
- typedef JArray&lt;jobject&gt; *jobjectArray;
- typedef JArray&lt;jboolean&gt; *jbooleanArray;
- typedef JArray&lt;jbyte&gt; *jbyteArray;
- typedef JArray&lt;jchar&gt; *jcharArray;
- typedef JArray&lt;jshort&gt; *jshortArray;
- typedef JArray&lt;jint&gt; *jintArray;
- typedef JArray&lt;jlong&gt; *jlongArray;
- typedef JArray&lt;jfloat&gt; *jfloatArray;
- typedef JArray&lt;jdouble&gt; *jdoubleArray;
- </programlisting>
- </para>
- <para>
-  You can create an array of objects using this function:
- <funcsynopsis> 
-    <funcdef>jobjectArray <function>JvNewObjectArray</function></funcdef>
-    <paramdef>jint <parameter>length</parameter></paramdef>
-    <paramdef>jclass <parameter>klass</parameter></paramdef>
-    <paramdef>jobject <parameter>init</parameter></paramdef>
-    </funcsynopsis>
-    Here <parameter>klass</parameter> is the type of elements of the array;
-    <parameter>init</parameter> is the initial
-    value to be put into every slot in the array.
- </para>
- <para>
- For each primitive type there is a function which can be used
-    to create a new array holding that type.  The name of the function
-    is of the form
-    `<literal>JvNew&lt;<replaceable>Type</replaceable>&gt;Array</literal>',
-    where `&lt;<replaceable>Type</replaceable>&gt;' is the name of
-    the primitive type, with its initial letter in upper-case.  For
-    instance, `<literal>JvNewBooleanArray</literal>' can be used to create
-    a new array of booleans.
-    Each such function follows this example:
- <funcsynopsis>  
-    <funcdef>jbooleanArray <function>JvNewBooleanArray</function></funcdef> 
-    <paramdef>jint <parameter>length</parameter></paramdef>
- </funcsynopsis>
- </para>
- <para>
- <funcsynopsis>
-    <funcdef>jsize <function>JvGetArrayLength</function></funcdef>
-    <paramdef>jarray <parameter>array</parameter></paramdef> 
-    </funcsynopsis>
-    Returns the length of <parameter>array</parameter>.</para>
- </sect1>
- 
- <sect1><title>Methods</title>
- 
- <para>
- Java methods are mapped directly into C++ methods.
- The header files generated by <literal>gcjh</literal>
- include the appropriate method definitions.
- Basically, the generated methods have the same names and
- <quote>corresponding</quote> types as the Java methods,
- and are called in the natural manner.</para>
- 
- <sect2><title>Overloading</title>
- <para>
- Both Java and C++ provide method overloading, where multiple
- methods in a class have the same name, and the correct one is chosen
- (at compile time) depending on the argument types.
- The rules for choosing the correct method are (as expected) more complicated
- in C++ than in Java, but given a set of overloaded methods
- generated by <literal>gcjh</literal> the C++ compiler will choose
- the expected one.</para>
- <para>
- Common assemblers and linkers are not aware of C++ overloading,
- so the standard implementation strategy is to encode the
- parameter types of a method into its assembly-level name.
- This encoding is called <firstterm>mangling</firstterm>,
- and the encoded name is the <firstterm>mangled name</firstterm>.
- The same mechanism is used to implement Java overloading.
- For C++/Java interoperability, it is important that both the Java
- and C++ compilers use the <emphasis>same</emphasis> encoding scheme.
- </para>
- </sect2>
- 
- <sect2><title>Static methods</title>
- <para>
- Static Java methods are invoked in <acronym>CNI</acronym> using the standard
- C++ syntax, using the `<literal>::</literal>' operator rather
- than the `<literal>.</literal>' operator.  For example:
- </para>
- <programlisting>
- jint i = java::lang::Math::round((jfloat) 2.3);
- </programlisting>
- <para>
- <!-- FIXME this next sentence seems ungammatical jsm -->
- Defining a static native method uses standard C++ method
- definition syntax.  For example:
- <programlisting>
- #include &lt;java/lang/Integer.h&gt;
- java::lang::Integer*
- java::lang::Integer::getInteger(jstring str)
- {
-   ...
- }
- </programlisting>
- </sect2>
- 
- <sect2><title>Object Constructors</title>
- <para>
- Constructors are called implicitly as part of object allocation
- using the <literal>new</literal> operator.  For example:
- <programlisting> 
- java::lang::Int x = new java::lang::Int(234);
- </programlisting> 
- </para>
- <para>
- <!-- FIXME rewrite needed here, mine may not be good jsm -->
- Java does not allow a constructor to be a native method.
- Instead, you could define a private method which
- you can have the constructor call.
- </para>
- </sect2>
- 
- <sect2><title>Instance methods</title>
- <para>
- <!-- FIXME next para week, I would remove a few words from some sentences jsm -->
- Virtual method dispatch is handled essentially the same way
- in C++ and Java -- <abbrev>i.e.</abbrev> by doing an
- indirect call through a function pointer stored in a per-class virtual
- function table.  C++ is more complicated because it has to support
- multiple inheritance, but this does not effect Java classes.
- However, G++ has historically used a different calling convention
- that is not compatible with the one used by <acronym>gcj</acronym>.
- During 1999, G++ will switch to a new ABI that is compatible with
- <acronym>gcj</acronym>.  Some platforms (including Linux) have already
- changed.  On other platforms, you will have to pass
- the <literal>-fvtable-thunks</literal> flag to g++ when
- compiling <acronym>CNI</acronym> code.  Note that you must also compile
- your C++ source code with <literal>-fno-rtti</literal>.
- </para>
- <para>
- Calling a Java instance method in <acronym>CNI</acronym> is done
- using the standard C++ syntax.  For example:
- <programlisting>
-   java::lang::Number *x;
-   if (x-&gt;doubleValue() &gt; 0.0) ...
- </programlisting>
- </para>
- <para>
- Defining a Java native instance method is also done the natural way:
- <programlisting>
- #include &lt;java/lang/Integer.h&gt;
- jdouble
- java::lang:Integer::doubleValue()
- {
-   return (jdouble) value;
- }
- </programlisting>
- </para>
- </sect2>
- 
- <sect2><title>Interface method calls</title>
- <para>
- In Java you can call a method using an interface reference.
- This is not yet supported in <acronym>CNI</acronym>.</para>
- </sect2>
- </sect1>
- 
- <sect1><title>Object allocation</title>
- 
- <para>
- New Java objects are allocated using a
- <firstterm>class-instance-creation-expression</firstterm>:
- <programlisting>
- new <replaceable>Type</replaceable> ( <replaceable>arguments</replaceable> )
- </programlisting>
- The same syntax is used in C++.  The main difference is that
- C++ objects have to be explicitly deleted; in Java they are
- automatically deleted by the garbage collector.
- Using <acronym>CNI</acronym>, you can allocate a new object
- using standard C++ syntax.  The C++ compiler is smart enough to
- realize the class is a Java class, and hence it needs to allocate
- memory from the garbage collector.  If you have overloaded
- constructors, the compiler will choose the correct one
- using standard C++ overload resolution rules.  For example:
- <programlisting>
- java::util::Hashtable *ht = new java::util::Hashtable(120);
- </programlisting>
- </para>
- <para>
- <funcsynopsis>
-   <funcdef>void *<function>_Jv_AllocBytes</function></funcdef>
-   <paramdef>jsize <parameter>size</parameter></paramdef>
- </funcsynopsis>
-    Allocate <parameter>size</parameter> bytes.  This memory is not
-    scanned by the garbage collector.  However, it will be freed by
- the GC if no references to it are discovered.
- </para>
- </sect1>
- 
- <sect1><title>Interfaces</title>
- <para>
- A Java class can <firstterm>implement</firstterm> zero or more
- <firstterm>interfaces</firstterm>, in addition to inheriting from
- a single base class. 
- An interface is a collection of constants and method specifications;
- it is similar to the <firstterm>signatures</firstterm> available
- as a G++ extension.  An interface provides a subset of the
- functionality of C++ abstract virtual base classes, but they
- are currently implemented differently.
- CNI does not currently provide any support for interfaces,
- or calling methods from an interface pointer.
- This is partly because we are planning to re-do how
- interfaces are implemented in <acronym>gcj</acronym>.
- </para>
- </sect1>
- 
- <sect1><title>Strings</title>
- <para>
- <acronym>CNI</acronym> provides a number of utility functions for
- working with Java <literal>String</literal> objects.
- The names and interfaces are analogous to those of <acronym>JNI</acronym>.
- </para>
- 
- <para>
- <funcsynopsis>
-   <funcdef>jstring <function>JvNewString</function></funcdef>
-   <paramdef>const jchar *<parameter>chars</parameter></paramdef>
-   <paramdef>jsize <parameter>len</parameter></paramdef>
-   </funcsynopsis>
-   Creates a new Java String object, where
-   <parameter>chars</parameter> are the contents, and
-   <parameter>len</parameter> is the number of characters.
- </para>
- 
- <para>
- <funcsynopsis>
-   <funcdef>jstring <function>JvNewStringLatin1</function></funcdef>
-   <paramdef>const char *<parameter>bytes</parameter></paramdef>
-   <paramdef>jsize <parameter>len</parameter></paramdef>
-  </funcsynopsis>
-   Creates a new Java String object, where <parameter>bytes</parameter>
-   are the Latin-1 encoded
-   characters, and <parameter>len</parameter> is the length of
-   <parameter>bytes</parameter>, in bytes.
- </para>
- 
- <para>
- <funcsynopsis>
-   <funcdef>jstring <function>JvNewStringLatin1</function></funcdef>
-   <paramdef>const char *<parameter>bytes</parameter></paramdef>
-   </funcsynopsis>
-   Like the first JvNewStringLatin1, but computes <parameter>len</parameter>
-   using <literal>strlen</literal>.
- </para>
- 
- <para>
- <funcsynopsis>
-   <funcdef>jstring <function>JvNewStringUTF</function></funcdef>
-   <paramdef>const char *<parameter>bytes</parameter></paramdef>
-   </funcsynopsis>
-    Creates a new Java String object, where <parameter>bytes</parameter> are
-    the UTF-8 encoded characters of the string, terminated by a null byte.
- </para>
- 
- <para>
- <funcsynopsis>
-    <funcdef>jchar *<function>JvGetStringChars</function></funcdef>
-   <paramdef>jstring <parameter>str</parameter></paramdef>
-   </funcsynopsis>
-    Returns a pointer to the array of characters which make up a string.
- </para>
- 
- <para>
- <funcsynopsis>
-    <funcdef> int <function>JvGetStringUTFLength</function></funcdef>
-   <paramdef>jstring <parameter>str</parameter></paramdef>
-   </funcsynopsis>
-    Returns number of bytes required to encode contents
-    of <parameter>str</parameter> as UTF-8.
- </para>
- 
- <para>
- <funcsynopsis>
-   <funcdef> jsize <function>JvGetStringUTFRegion</function></funcdef>
-   <paramdef>jstring <parameter>str</parameter></paramdef>
-   <paramdef>jsize <parameter>start</parameter></paramdef>
-   <paramdef>jsize <parameter>len</parameter></paramdef>
-   <paramdef>char *<parameter>buf</parameter></paramdef>
-   </funcsynopsis>
-   This puts the UTF-8 encoding of a region of the
-   string <parameter>str</parameter> into
-   the buffer <parameter>buf</parameter>.
-   The region of the string to fetch is specifued by
-   <parameter>start</parameter> and <parameter>len</parameter>.
-    It is assumed that <parameter>buf</parameter> is big enough
-    to hold the result.  Note
-    that <parameter>buf</parameter> is <emphasis>not</emphasis> null-terminated.
- </para>
- </sect1>
- 
- <sect1><title>Class Initialization</title>
- <para>
- Java requires that each class be automatically initialized at the time 
- of the first active use.  Initializing a class involves 
- initializing the static fields, running code in class initializer 
- methods, and initializing base classes.  There may also be 
- some implementation specific actions, such as allocating 
- <classname>String</classname> objects corresponding to string literals in
- the code.</para>
- <para>
- The Gcj compiler inserts calls to <literal>JvInitClass</literal> (actually
- <literal>_Jv_InitClass</literal>) at appropriate places to ensure that a
- class is initialized when required.  The C++ compiler does not
- insert these calls automatically - it is the programmer's
- responsibility to make sure classes are initialized.  However,
- this is fairly painless because of the conventions assumed by the Java
- system.</para>
- <para>
- First, <literal>libgcj</literal> will make sure a class is initialized
- before an instance of that object is created.  This is one
- of the responsibilities of the <literal>new</literal> operation.  This is
- taken care of both in Java code, and in C++ code.  (When the G++
- compiler sees a <literal>new</literal> of a Java class, it will call
- a routine in <literal>libgcj</literal> to allocate the object, and that
- routine will take care of initializing the class.)  It follows that you can
- access an instance field, or call an instance (non-static)
- method and be safe in the knowledge that the class and all
- of its base classes have been initialized.</para>
- <para>
- Invoking a static method is also safe.  This is because the
- Java compiler adds code to the start of a static method to make sure
- the class is initialized.  However, the C++ compiler does not
- add this extra code.  Hence, if you write a native static method
- using CNI, you are responsible for calling <literal>JvInitClass</literal>
- before doing anything else in the method (unless you are sure
- it is safe to leave it out).</para>
- <para>
- Accessing a static field also requires the class of the
- field to be initialized.  The Java compiler will generate code
- to call <literal>_Jv_InitClass</literal> 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.</para>
- </sect1>
- <sect1><title>Exception Handling</title>
- <para>
- While C++ and Java share a common exception handling framework,
- things are not yet perfectly integrated.  The main issue is that the
- <quote>run-time type information</quote> facilities of the two
- languages are not integrated.</para>
- <para>
- Still, things work fairly well.  You can throw a Java exception from
- C++ using the ordinary <literal>throw</literal> construct, and this
- exception can be caught by Java code.  Similarly, you can catch an
- exception thrown from Java using the C++ <literal>catch</literal>
- construct.
- <para>
- Note that currently you cannot mix C++ catches and Java catches in
- a single C++ translation unit.  We do intend to fix this eventually.
- </para>
- <para>
- Here is an example:
- <programlisting>
- if (i >= count)
-    throw new java::lang::IndexOutOfBoundsException();
- </programlisting>
- </para>
- <para>
- Normally, GNU C++ will automatically detect when you are writing C++
- code that uses Java exceptions, and handle them appropriately.
- However, if C++ code only needs to execute destructors when Java
- exceptions are thrown through it, GCC will guess incorrectly.  Sample
- problematic code:
- <programlisting>
-   struct S { ~S(); };
-   extern void bar();    // is implemented in Java and may throw exceptions
-   void foo()
-   {
-     S s;
-     bar();
-   }
- </programlisting>
- The usual effect of an incorrect guess is a link failure, complaining of
- a missing routine called <literal>__gxx_personality_v0</literal>.
- </para>
- <para>
- You can inform the compiler that Java exceptions are to be used in a
- translation unit, irrespective of what it might think, by writing
- <literal>#pragma GCC java_exceptions</literal> at the head of the
- file.  This <literal>#pragma</literal> must appear before any
- functions that throw or catch exceptions, or run destructors when
- exceptions are thrown through them.</para>
- </sect1>
- 
- <sect1><title>Synchronization</title>
- <para>
- Each Java object has an implicit monitor.
- The Java VM uses the instruction <literal>monitorenter</literal> to acquire
- and lock a monitor, and <literal>monitorexit</literal> to release it.
- The JNI has corresponding methods <literal>MonitorEnter</literal>
- and <literal>MonitorExit</literal>.  The corresponding CNI macros
- are <literal>JvMonitorEnter</literal> and <literal>JvMonitorExit</literal>.
- </para>
- <para>
- The Java source language does not provide direct access to these primitives.
- Instead, there is a <literal>synchronized</literal> statement that does an
- implicit <literal>monitorenter</literal> before entry to the block,
- and does a <literal>monitorexit</literal> on exit from the block.
- Note that the lock has to be released even the block is abnormally
- terminated by an exception, which means there is an implicit
- <literal>try</literal>-<literal>finally</literal>.
- </para>
- <para>
- From C++, it makes sense to use a destructor to release a lock.
- CNI defines the following utility class.
- <programlisting>
- class JvSynchronize() {
-   jobject obj;
-   JvSynchronize(jobject o) { obj = o; JvMonitorEnter(o); }
-   ~JvSynchronize() { JvMonitorExit(obj); }
- };
- </programlisting>
- The equivalent of Java's:
- <programlisting>
- synchronized (OBJ) { CODE; }
- </programlisting>
- can be simply expressed:
- <programlisting>
- { JvSynchronize dummy(OBJ); CODE; }
- </programlisting>
- </para>
- <para>
- Java also has methods with the <literal>synchronized</literal> attribute.
- This is equivalent to wrapping the entire method body in a
- <literal>synchronized</literal> statement.
- (Alternatively, an implementation could require the caller to do
- the synchronization.  This is not practical for a compiler, because
- each virtual method call would have to test at run-time if
- synchronization is needed.)  Since in <literal>gcj</literal>
- the <literal>synchronized</literal> attribute is handled by the
- method implementation, it is up to the programmer
- of a synchronized native method to handle the synchronization
- (in the C++ implementation of the method).
- In otherwords, you need to manually add <literal>JvSynchronize</literal>
- in a <literal>native synchornized</literal> method.</para>
- </sect1>
- 
- <sect1><title>Reflection</title>
- <para>The types <literal>jfieldID</literal> and <literal>jmethodID</literal>
- are as in JNI.</para>
- <para>
- The function <literal>JvFromReflectedField</literal>,
- <literal>JvFromReflectedMethod</literal>,
- <literal>JvToReflectedField</literal>, and
- <literal>JvToFromReflectedMethod</literal> (as in Java 2 JNI)
- will be added shortly, as will other functions corresponding to JNI.</para>
- 
- <sect1><title>Using gcjh</title>
- <para>
-       The <command>gcjh</command> is used to generate C++ header files from
-       Java class files.  By default, <command>gcjh</command> generates
-       a relatively straightforward C++ header file.  However, there
-       are a few caveats to its use, and a few options which can be
-       used to change how it operates:
- </para>
- <variablelist>
- <varlistentry>
- <term><literal>--classpath</literal> <replaceable>path</replaceable></term>
- <term><literal>--CLASSPATH</literal> <replaceable>path</replaceable></term>
- <term><literal>-I</literal> <replaceable>dir</replaceable></term>
- <listitem><para>
-         These options can be used to set the class path for gcjh.
-         Gcjh searches the class path the same way the compiler does;
- 	these options have their familiar meanings.</para>
- </listitem>
- </varlistentry>
- 
- <varlistentry>
- <term><literal>-d <replaceable>directory</replaceable></literal></term>
- <listitem><para>
- Puts the generated <literal>.h</literal> files
- beneath <replaceable>directory</replaceable>.</para>
- </listitem>
- </varlistentry>
- 
- <varlistentry>
- <term><literal>-o <replaceable>file</replaceable></literal></term>
- <listitem><para>
-         Sets the name of the <literal>.h</literal> file to be generated.
-         By default the <literal>.h</literal> file is named after the class.
-         This option only really makes sense if just a single class file
-         is specified.</para>
- </listitem>
- </varlistentry>
- 
- <varlistentry>
- <term><literal>--verbose</literal></term>
- <listitem><para>
-         gcjh will print information to stderr as it works.</para>
- </listitem>
- </varlistentry>
- 
- <varlistentry>
- <term><literal>-M</literal></term>
- <term><literal>-MM</literal></term>
- <term><literal>-MD</literal></term>
- <term><literal>-MMD</literal></term>
- <listitem><para>
-         These options can be used to generate dependency information
-         for the generated header file.  They work the same way as the
-         corresponding compiler options.</para>
- </listitem>
- </varlistentry>
- 
- <varlistentry>
- <term><literal>-prepend <replaceable>text</replaceable></literal></term>
- <listitem><para>
- This causes the <replaceable>text</replaceable> to be put into the generated
-         header just after class declarations (but before declaration
-         of the current class).  This option should be used with caution.</para>
- </listitem>
- </varlistentry>
- 
- <varlistentry> 
- <term><literal>-friend <replaceable>text</replaceable></literal></term>
- <listitem><para>
- This causes the <replaceable>text</replaceable> to be put into the class
- declaration after a <literal>friend</literal> keyword.
- This can be used to declare some
-         other class or function to be a friend of this class.
-         This option should be used with caution.</para>
- </listitem>
- </varlistentry>
- 
- <varlistentry>  
- <term><literal>-add <replaceable>text</replaceable></literal></term>
- <listitem><para>
- The <replaceable>text</replaceable> is inserted into the class declaration.
- This option should be used with caution.</para>
- </listitem>
- </varlistentry>
- 
- <varlistentry> 
- <term><literal>-append <replaceable>text</replaceable></literal></term>
- <listitem><para>
- The <replaceable>text</replaceable> is inserted into the header file
- after the class declaration.  One use for this is to generate
- inline functions.  This option should be used with caution.
- </listitem>
- </varlistentry>
- </variablelist>
- <para>
- All other options not beginning with a <literal>-</literal> are treated
- as the names of classes for which headers should be generated.</para>
- <para>
- gcjh will generate all the required namespace declarations and
- <literal>#include</literal>'s for the header file.
- In some situations, gcjh will generate simple inline member
- functions.  Note that, while gcjh puts <literal>#pragma
- interface</literal> in the generated header file, you should
- <emphasis>not</emphasis> put <literal>#pragma implementation</literal>
- into your C++ source file.  If you do, duplicate definitions of
- inline functions will sometimes be created, leading to link-time
- errors.
- </para>
- <para>
- There are a few cases where gcjh will fail to work properly:</para>
- <para>
- gcjh assumes that all the methods and fields of a class have ASCII
- names.  The C++ compiler cannot correctly handle non-ASCII
- identifiers.  gcjh does not currently diagnose this problem.</para>
- <para>
- gcjh also cannot fully handle classes where a field and a method have
- the same name.  If the field is static, an error will result.
- Otherwise, the field will be renamed in the generated header; `__'
- will be appended to the field name.</para>
- <para>
- Eventually we hope to change the C++ compiler so that these
- restrictions can be lifted.</para>
- </sect1>
- 
- </article>
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/external/Makefile.am gcc-4.0.0/libjava/external/Makefile.am
*** gcc-3.4.3/libjava/external/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/Makefile.am	Wed Feb  2 00:41:49 2005
***************
*** 0 ****
--- 1,44 ----
+ ## Input file for automake to generate the Makefile.in used by configure
+ 
+ SUBDIRS = sax w3c_dom
+ 
+ # 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.
+ AM_MAKEFLAGS = \
+ 	"AR_FLAGS=$(AR_FLAGS)" \
+ 	"CC_FOR_BUILD=$(CC_FOR_BUILD)" \
+ 	"CFLAGS=$(CFLAGS)" \
+ 	"CXXFLAGS=$(CXXFLAGS)" \
+ 	"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
+ 	"CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
+ 	"INSTALL=$(INSTALL)" \
+ 	"INSTALL_DATA=$(INSTALL_DATA)" \
+ 	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+ 	"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
+ 	"LDFLAGS=$(LDFLAGS)" \
+ 	"LIBCFLAGS=$(LIBCFLAGS)" \
+ 	"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
+ 	"MAKE=$(MAKE)" \
+ 	"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
+ 	"PICFLAG=$(PICFLAG)" \
+ 	"PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
+ 	"SHELL=$(SHELL)" \
+ 	"EXPECT=$(EXPECT)" \
+ 	"RUNTEST=$(RUNTEST)" \
+ 	"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
+ 	"exec_prefix=$(exec_prefix)" \
+ 	"infodir=$(infodir)" \
+ 	"libdir=$(libdir)" \
+ 	"prefix=$(prefix)" \
+ 	"tooldir=$(tooldir)" \
+ 	"AR=$(AR)" \
+ 	"AS=$(AS)" \
+ 	"CC=$(CC)" \
+ 	"CXX=$(CXX)" \
+ 	"LD=$(LD)" \
+ 	"LIBCFLAGS=$(LIBCFLAGS)" \
+ 	"NM=$(NM)" \
+ 	"PICFLAG=$(PICFLAG)" \
+ 	"RANLIB=$(RANLIB)" \
+ 	"DESTDIR=$(DESTDIR)"
diff -Nrcpad gcc-3.4.3/libjava/external/Makefile.in gcc-4.0.0/libjava/external/Makefile.in
*** gcc-3.4.3/libjava/external/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/Makefile.in	Wed Apr  6 21:38:28 2005
***************
*** 0 ****
--- 1,635 ----
+ # 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)/../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)
+ CONFIG_HEADER = $(top_builddir)/include/config.h \
+ 	$(top_builddir)/gcj/libgcj-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@
+ ALLOCA = @ALLOCA@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AR = @AR@
+ AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BACKTRACESPEC = @BACKTRACESPEC@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CHECKREFSPEC = @CHECKREFSPEC@
+ CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ DIRLTDL = @DIRLTDL@
+ DIVIDESPEC = @DIVIDESPEC@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
+ EXCEPTIONSPEC = @EXCEPTIONSPEC@
+ EXEEXT = @EXEEXT@
+ GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
+ GCDEPS = @GCDEPS@
+ GCINCS = @GCINCS@
+ GCJ = @GCJ@
+ GCJDEPMODE = @GCJDEPMODE@
+ GCJFLAGS = @GCJFLAGS@
+ GCJH = @GCJH@
+ GCJVERSION = @GCJVERSION@
+ GCLIBS = @GCLIBS@
+ GCSPEC = @GCSPEC@
+ GCTESTSPEC = @GCTESTSPEC@
+ GLIB_CFLAGS = @GLIB_CFLAGS@
+ GLIB_LIBS = @GLIB_LIBS@
+ GTK_AWT_FALSE = @GTK_AWT_FALSE@
+ GTK_AWT_TRUE = @GTK_AWT_TRUE@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
+ IEEESPEC = @IEEESPEC@
+ INCLTDL = @INCLTDL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ INTERPRETER = @INTERPRETER@
+ JAVA_HOME = @JAVA_HOME@
+ JAVA_HOME_SET_FALSE = @JAVA_HOME_SET_FALSE@
+ JAVA_HOME_SET_TRUE = @JAVA_HOME_SET_TRUE@
+ JC1GCSPEC = @JC1GCSPEC@
+ LDFLAGS = @LDFLAGS@
+ LIBART_CFLAGS = @LIBART_CFLAGS@
+ LIBART_LIBS = @LIBART_LIBS@
+ LIBFFI = @LIBFFI@
+ LIBFFIINCS = @LIBFFIINCS@
+ LIBGCJDEBUG = @LIBGCJDEBUG@
+ LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
+ LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
+ LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
+ LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
+ LIBGCJ_LD_SYMBOLIC = @LIBGCJ_LD_SYMBOLIC@
+ LIBICONV = @LIBICONV@
+ LIBLTDL = @LIBLTDL@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ NATIVE_FALSE = @NATIVE_FALSE@
+ NATIVE_TRUE = @NATIVE_TRUE@
+ NEEDS_DATA_START_FALSE = @NEEDS_DATA_START_FALSE@
+ NEEDS_DATA_START_TRUE = @NEEDS_DATA_START_TRUE@
+ OBJEXT = @OBJEXT@
+ ONESTEP_FALSE = @ONESTEP_FALSE@
+ ONESTEP_TRUE = @ONESTEP_TRUE@
+ 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@
+ PERL = @PERL@
+ PKG_CONFIG = @PKG_CONFIG@
+ PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@
+ RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRIP = @STRIP@
+ SUPPLY_BACKTRACE_FALSE = @SUPPLY_BACKTRACE_FALSE@
+ SUPPLY_BACKTRACE_TRUE = @SUPPLY_BACKTRACE_TRUE@
+ SYSDEP_SOURCES = @SYSDEP_SOURCES@
+ SYSTEMSPEC = @SYSTEMSPEC@
+ SYS_ZLIBS = @SYS_ZLIBS@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
+ THREADCXXFLAGS = @THREADCXXFLAGS@
+ THREADDEPS = @THREADDEPS@
+ THREADINCS = @THREADINCS@
+ THREADLDFLAGS = @THREADLDFLAGS@
+ THREADLIBS = @THREADLIBS@
+ THREADSPEC = @THREADSPEC@
+ TOOLKIT = @TOOLKIT@
+ USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
+ 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@
+ USING_NOGC_TRUE = @USING_NOGC_TRUE@
+ USING_NO_THREADS_FALSE = @USING_NO_THREADS_FALSE@
+ USING_NO_THREADS_TRUE = @USING_NO_THREADS_TRUE@
+ USING_POSIX_PLATFORM_FALSE = @USING_POSIX_PLATFORM_FALSE@
+ USING_POSIX_PLATFORM_TRUE = @USING_POSIX_PLATFORM_TRUE@
+ USING_POSIX_THREADS_FALSE = @USING_POSIX_THREADS_FALSE@
+ USING_POSIX_THREADS_TRUE = @USING_POSIX_THREADS_TRUE@
+ USING_WIN32_PLATFORM_FALSE = @USING_WIN32_PLATFORM_FALSE@
+ USING_WIN32_PLATFORM_TRUE = @USING_WIN32_PLATFORM_TRUE@
+ USING_WIN32_THREADS_FALSE = @USING_WIN32_THREADS_FALSE@
+ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
+ VERSION = @VERSION@
+ XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
+ XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZINCS = @ZINCS@
+ ZIP = @ZIP@
+ ZLIBS = @ZLIBS@
+ ZLIBSPEC = @ZLIBSPEC@
+ ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_GCJ = @ac_ct_GCJ@
+ 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__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
+ am__fastdepGCJ_TRUE = @am__fastdepGCJ_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@
+ 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@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ libgcj_basedir = @libgcj_basedir@
+ libstdcxx_incdir = @libstdcxx_incdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ mkinstalldirs = @mkinstalldirs@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ subdirs = @subdirs@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ tool_include_dir = @tool_include_dir@
+ toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
+ toolexecmainlibdir = @toolexecmainlibdir@
+ SUBDIRS = sax w3c_dom
+ 
+ # 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.
+ AM_MAKEFLAGS = \
+ 	"AR_FLAGS=$(AR_FLAGS)" \
+ 	"CC_FOR_BUILD=$(CC_FOR_BUILD)" \
+ 	"CFLAGS=$(CFLAGS)" \
+ 	"CXXFLAGS=$(CXXFLAGS)" \
+ 	"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
+ 	"CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
+ 	"INSTALL=$(INSTALL)" \
+ 	"INSTALL_DATA=$(INSTALL_DATA)" \
+ 	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+ 	"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
+ 	"LDFLAGS=$(LDFLAGS)" \
+ 	"LIBCFLAGS=$(LIBCFLAGS)" \
+ 	"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
+ 	"MAKE=$(MAKE)" \
+ 	"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
+ 	"PICFLAG=$(PICFLAG)" \
+ 	"PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
+ 	"SHELL=$(SHELL)" \
+ 	"EXPECT=$(EXPECT)" \
+ 	"RUNTEST=$(RUNTEST)" \
+ 	"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
+ 	"exec_prefix=$(exec_prefix)" \
+ 	"infodir=$(infodir)" \
+ 	"libdir=$(libdir)" \
+ 	"prefix=$(prefix)" \
+ 	"tooldir=$(tooldir)" \
+ 	"AR=$(AR)" \
+ 	"AS=$(AS)" \
+ 	"CC=$(CC)" \
+ 	"CXX=$(CXX)" \
+ 	"LD=$(LD)" \
+ 	"LIBCFLAGS=$(LIBCFLAGS)" \
+ 	"NM=$(NM)" \
+ 	"PICFLAG=$(PICFLAG)" \
+ 	"RANLIB=$(RANLIB)" \
+ 	"DESTDIR=$(DESTDIR)"
+ 
+ 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-3.4.3/libjava/external/README gcc-4.0.0/libjava/external/README
*** gcc-3.4.3/libjava/external/README	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/README	Wed Feb  2 00:41:50 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-3.4.3/libjava/external/sax/Makefile.am gcc-4.0.0/libjava/external/sax/Makefile.am
*** gcc-3.4.3/libjava/external/sax/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/Makefile.am	Wed Apr  6 21:38:28 2005
***************
*** 0 ****
--- 1,73 ----
+ ## Process this file with automake to produce Makefile.in.
+ 
+ AUTOMAKE_OPTIONS = foreign subdir-objects
+ 
+ ## The compiler with whatever flags we want for both -c and -C
+ ## compiles.
+ GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=$(BOOTCLASSPATH)
+ 
+ BOOTCLASSPATH = $(here)'$(CLASSPATH_SEPARATOR)'$(srcdir)'$(CLASSPATH_SEPARATOR)'$(top_srcdir)'$(CLASSPATH_SEPARATOR)'$(top_builddir)
+ 
+ AM_GCJFLAGS = \
+ 	-B$(top_builddir) \
+ 	@LIBGCJ_JAVAFLAGS@ \
+ 	-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
+ 	--encoding=UTF-8 \
+ 	-Wno-deprecated
+ 
+ BUILT_SOURCES = classes.stamp
+ 
+ sax.jar: classes.stamp
+ 	find org -name '*.class' -print | $(ZIP) -cfME@ $@
+ 
+ classes.stamp:	$(source_files)
+ 	here=`pwd`; cd $(srcdir); \
+ 	$(GCJ_WITH_FLAGS) -C -d $$here $(source_files)
+ 	echo > classes.stamp
+ 
+ mostlyclean-local:
+ 	-find . -name '*.class' | xargs rm
+ 	-rm classes.stamp sax.jar
+ 
+ noinst_LTLIBRARIES = libsax-gcj.la
+ 
+ libsax_gcj_la_SOURCES =	sax.jar
+ libsax_gcj_la_GCJFLAGS = -findirect-dispatch $(AM_GCJFLAGS)
+ 
+ source_files = \
+ org/xml/sax/SAXNotSupportedException.java \
+ org/xml/sax/helpers/NamespaceSupport.java \
+ org/xml/sax/helpers/AttributesImpl.java	\
+ org/xml/sax/helpers/LocatorImpl.java \
+ org/xml/sax/helpers/DefaultHandler.java	\
+ org/xml/sax/helpers/AttributeListImpl.java \
+ org/xml/sax/helpers/ParserFactory.java \
+ org/xml/sax/helpers/NewInstance.java \
+ org/xml/sax/helpers/XMLFilterImpl.java \
+ org/xml/sax/helpers/ParserAdapter.java \
+ org/xml/sax/helpers/XMLReaderAdapter.java \
+ org/xml/sax/helpers/XMLReaderFactory.java \
+ org/xml/sax/HandlerBase.java \
+ org/xml/sax/SAXException.java \
+ org/xml/sax/ContentHandler.java	\
+ org/xml/sax/SAXNotRecognizedException.java \
+ org/xml/sax/ErrorHandler.java \
+ org/xml/sax/AttributeList.java \
+ org/xml/sax/Locator.java \
+ org/xml/sax/Attributes.java \
+ org/xml/sax/SAXParseException.java \
+ org/xml/sax/XMLFilter.java \
+ org/xml/sax/EntityResolver.java	\
+ org/xml/sax/XMLReader.java \
+ org/xml/sax/ext/Locator2.java \
+ org/xml/sax/ext/LexicalHandler.java \
+ org/xml/sax/ext/Attributes2Impl.java \
+ org/xml/sax/ext/DeclHandler.java \
+ org/xml/sax/ext/Attributes2.java \
+ org/xml/sax/ext/EntityResolver2.java \
+ org/xml/sax/ext/Locator2Impl.java \
+ org/xml/sax/ext/DefaultHandler2.java \
+ org/xml/sax/InputSource.java \
+ org/xml/sax/DocumentHandler.java \
+ org/xml/sax/DTDHandler.java \
+ org/xml/sax/Parser.java
diff -Nrcpad gcc-3.4.3/libjava/external/sax/Makefile.in gcc-4.0.0/libjava/external/sax/Makefile.in
*** gcc-3.4.3/libjava/external/sax/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/Makefile.in	Wed Apr  6 21:38:28 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@
+ 
+ SOURCES = $(libsax_gcj_la_SOURCES)
+ 
+ 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)/../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)
+ CONFIG_HEADER = $(top_builddir)/include/config.h \
+ 	$(top_builddir)/gcj/libgcj-config.h
+ CONFIG_CLEAN_FILES =
+ LTLIBRARIES = $(noinst_LTLIBRARIES)
+ libsax_gcj_la_LIBADD =
+ am_libsax_gcj_la_OBJECTS = libsax_gcj_la-sax.lo
+ libsax_gcj_la_OBJECTS = $(am_libsax_gcj_la_OBJECTS)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/gcj
+ depcomp = $(SHELL) $(top_srcdir)/../depcomp
+ am__depfiles_maybe = depfiles
+ GCJCOMPILE = $(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS)
+ LTGCJCOMPILE = $(LIBTOOL) --mode=compile $(GCJ) $(AM_GCJFLAGS) \
+ 	$(GCJFLAGS)
+ GCJLD = $(GCJ)
+ GCJLINK = $(LIBTOOL) --mode=link $(GCJLD) $(AM_GCJFLAGS) $(GCJFLAGS) \
+ 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+ SOURCES = $(libsax_gcj_la_SOURCES)
+ DIST_SOURCES = $(libsax_gcj_la_SOURCES)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AR = @AR@
+ AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BACKTRACESPEC = @BACKTRACESPEC@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CHECKREFSPEC = @CHECKREFSPEC@
+ CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ DIRLTDL = @DIRLTDL@
+ DIVIDESPEC = @DIVIDESPEC@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
+ EXCEPTIONSPEC = @EXCEPTIONSPEC@
+ EXEEXT = @EXEEXT@
+ GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
+ GCDEPS = @GCDEPS@
+ GCINCS = @GCINCS@
+ GCJ = @GCJ@
+ GCJDEPMODE = @GCJDEPMODE@
+ GCJFLAGS = @GCJFLAGS@
+ GCJH = @GCJH@
+ GCJVERSION = @GCJVERSION@
+ GCLIBS = @GCLIBS@
+ GCSPEC = @GCSPEC@
+ GCTESTSPEC = @GCTESTSPEC@
+ GLIB_CFLAGS = @GLIB_CFLAGS@
+ GLIB_LIBS = @GLIB_LIBS@
+ GTK_AWT_FALSE = @GTK_AWT_FALSE@
+ GTK_AWT_TRUE = @GTK_AWT_TRUE@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
+ IEEESPEC = @IEEESPEC@
+ INCLTDL = @INCLTDL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ INTERPRETER = @INTERPRETER@
+ JAVA_HOME = @JAVA_HOME@
+ JAVA_HOME_SET_FALSE = @JAVA_HOME_SET_FALSE@
+ JAVA_HOME_SET_TRUE = @JAVA_HOME_SET_TRUE@
+ JC1GCSPEC = @JC1GCSPEC@
+ LDFLAGS = @LDFLAGS@
+ LIBART_CFLAGS = @LIBART_CFLAGS@
+ LIBART_LIBS = @LIBART_LIBS@
+ LIBFFI = @LIBFFI@
+ LIBFFIINCS = @LIBFFIINCS@
+ LIBGCJDEBUG = @LIBGCJDEBUG@
+ LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
+ LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
+ LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
+ LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
+ LIBGCJ_LD_SYMBOLIC = @LIBGCJ_LD_SYMBOLIC@
+ LIBICONV = @LIBICONV@
+ LIBLTDL = @LIBLTDL@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ NATIVE_FALSE = @NATIVE_FALSE@
+ NATIVE_TRUE = @NATIVE_TRUE@
+ NEEDS_DATA_START_FALSE = @NEEDS_DATA_START_FALSE@
+ NEEDS_DATA_START_TRUE = @NEEDS_DATA_START_TRUE@
+ OBJEXT = @OBJEXT@
+ ONESTEP_FALSE = @ONESTEP_FALSE@
+ ONESTEP_TRUE = @ONESTEP_TRUE@
+ 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@
+ PERL = @PERL@
+ PKG_CONFIG = @PKG_CONFIG@
+ PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@
+ RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRIP = @STRIP@
+ SUPPLY_BACKTRACE_FALSE = @SUPPLY_BACKTRACE_FALSE@
+ SUPPLY_BACKTRACE_TRUE = @SUPPLY_BACKTRACE_TRUE@
+ SYSDEP_SOURCES = @SYSDEP_SOURCES@
+ SYSTEMSPEC = @SYSTEMSPEC@
+ SYS_ZLIBS = @SYS_ZLIBS@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
+ THREADCXXFLAGS = @THREADCXXFLAGS@
+ THREADDEPS = @THREADDEPS@
+ THREADINCS = @THREADINCS@
+ THREADLDFLAGS = @THREADLDFLAGS@
+ THREADLIBS = @THREADLIBS@
+ THREADSPEC = @THREADSPEC@
+ TOOLKIT = @TOOLKIT@
+ USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
+ 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@
+ USING_NOGC_TRUE = @USING_NOGC_TRUE@
+ USING_NO_THREADS_FALSE = @USING_NO_THREADS_FALSE@
+ USING_NO_THREADS_TRUE = @USING_NO_THREADS_TRUE@
+ USING_POSIX_PLATFORM_FALSE = @USING_POSIX_PLATFORM_FALSE@
+ USING_POSIX_PLATFORM_TRUE = @USING_POSIX_PLATFORM_TRUE@
+ USING_POSIX_THREADS_FALSE = @USING_POSIX_THREADS_FALSE@
+ USING_POSIX_THREADS_TRUE = @USING_POSIX_THREADS_TRUE@
+ USING_WIN32_PLATFORM_FALSE = @USING_WIN32_PLATFORM_FALSE@
+ USING_WIN32_PLATFORM_TRUE = @USING_WIN32_PLATFORM_TRUE@
+ USING_WIN32_THREADS_FALSE = @USING_WIN32_THREADS_FALSE@
+ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
+ VERSION = @VERSION@
+ XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
+ XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZINCS = @ZINCS@
+ ZIP = @ZIP@
+ ZLIBS = @ZLIBS@
+ ZLIBSPEC = @ZLIBSPEC@
+ ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_GCJ = @ac_ct_GCJ@
+ 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__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
+ am__fastdepGCJ_TRUE = @am__fastdepGCJ_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@
+ 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@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ libgcj_basedir = @libgcj_basedir@
+ libstdcxx_incdir = @libstdcxx_incdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ mkinstalldirs = @mkinstalldirs@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ subdirs = @subdirs@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ 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
+ GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=$(BOOTCLASSPATH)
+ BOOTCLASSPATH = $(here)'$(CLASSPATH_SEPARATOR)'$(srcdir)'$(CLASSPATH_SEPARATOR)'$(top_srcdir)'$(CLASSPATH_SEPARATOR)'$(top_builddir)
+ AM_GCJFLAGS = \
+ 	-B$(top_builddir) \
+ 	@LIBGCJ_JAVAFLAGS@ \
+ 	-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
+ 	--encoding=UTF-8 \
+ 	-Wno-deprecated
+ 
+ BUILT_SOURCES = classes.stamp
+ noinst_LTLIBRARIES = libsax-gcj.la
+ libsax_gcj_la_SOURCES = sax.jar
+ libsax_gcj_la_GCJFLAGS = -findirect-dispatch $(AM_GCJFLAGS)
+ source_files = \
+ org/xml/sax/SAXNotSupportedException.java \
+ org/xml/sax/helpers/NamespaceSupport.java \
+ org/xml/sax/helpers/AttributesImpl.java	\
+ org/xml/sax/helpers/LocatorImpl.java \
+ org/xml/sax/helpers/DefaultHandler.java	\
+ org/xml/sax/helpers/AttributeListImpl.java \
+ org/xml/sax/helpers/ParserFactory.java \
+ org/xml/sax/helpers/NewInstance.java \
+ org/xml/sax/helpers/XMLFilterImpl.java \
+ org/xml/sax/helpers/ParserAdapter.java \
+ org/xml/sax/helpers/XMLReaderAdapter.java \
+ org/xml/sax/helpers/XMLReaderFactory.java \
+ org/xml/sax/HandlerBase.java \
+ org/xml/sax/SAXException.java \
+ org/xml/sax/ContentHandler.java	\
+ org/xml/sax/SAXNotRecognizedException.java \
+ org/xml/sax/ErrorHandler.java \
+ org/xml/sax/AttributeList.java \
+ org/xml/sax/Locator.java \
+ org/xml/sax/Attributes.java \
+ org/xml/sax/SAXParseException.java \
+ org/xml/sax/XMLFilter.java \
+ org/xml/sax/EntityResolver.java	\
+ org/xml/sax/XMLReader.java \
+ org/xml/sax/ext/Locator2.java \
+ org/xml/sax/ext/LexicalHandler.java \
+ org/xml/sax/ext/Attributes2Impl.java \
+ org/xml/sax/ext/DeclHandler.java \
+ org/xml/sax/ext/Attributes2.java \
+ org/xml/sax/ext/EntityResolver2.java \
+ org/xml/sax/ext/Locator2Impl.java \
+ org/xml/sax/ext/DefaultHandler2.java \
+ org/xml/sax/InputSource.java \
+ org/xml/sax/DocumentHandler.java \
+ org/xml/sax/DTDHandler.java \
+ org/xml/sax/Parser.java
+ 
+ all: $(BUILT_SOURCES)
+ 	$(MAKE) $(AM_MAKEFLAGS) all-am
+ 
+ .SUFFIXES:
+ .SUFFIXES: .jar .lo .o .obj
+ $(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) --foreign  external/sax/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --foreign  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
+ 
+ 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
+ libsax-gcj.la: $(libsax_gcj_la_OBJECTS) $(libsax_gcj_la_DEPENDENCIES) 
+ 	$(GCJLINK)  $(libsax_gcj_la_LDFLAGS) $(libsax_gcj_la_OBJECTS) $(libsax_gcj_la_LIBADD) $(LIBS)
+ 
+ mostlyclean-compile:
+ 	-rm -f *.$(OBJEXT)
+ 
+ distclean-compile:
+ 	-rm -f *.tab.c
+ 
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsax_gcj_la-sax.Plo@am__quote@
+ 
+ .jar.o:
+ @am__fastdepGCJ_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \
+ @am__fastdepGCJ_TRUE@	if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
+ @am__fastdepGCJ_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepGCJ_FALSE@	$(GCJCOMPILE) -c -o $@ $<
+ 
+ .jar.obj:
+ @am__fastdepGCJ_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`; \
+ @am__fastdepGCJ_TRUE@	if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+ @am__fastdepGCJ_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepGCJ_FALSE@	$(GCJCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ 
+ .jar.lo:
+ @am__fastdepGCJ_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`; \
+ @am__fastdepGCJ_TRUE@	if $(LTGCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
+ @am__fastdepGCJ_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Plo"; else rm -f "$$depbase.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepGCJ_FALSE@	$(LTGCJCOMPILE) -c -o $@ $<
+ 
+ libsax_gcj_la-sax.lo: sax.jar
+ @am__fastdepGCJ_TRUE@	if $(LIBTOOL) --mode=compile $(GCJ) $(libsax_gcj_la_GCJFLAGS) $(GCJFLAGS) -MT libsax_gcj_la-sax.lo -MD -MP -MF "$(DEPDIR)/libsax_gcj_la-sax.Tpo" -c -o libsax_gcj_la-sax.lo `test -f 'sax.jar' || echo '$(srcdir)/'`sax.jar; \
+ @am__fastdepGCJ_TRUE@	then mv -f "$(DEPDIR)/libsax_gcj_la-sax.Tpo" "$(DEPDIR)/libsax_gcj_la-sax.Plo"; else rm -f "$(DEPDIR)/libsax_gcj_la-sax.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='sax.jar' object='libsax_gcj_la-sax.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepGCJ_FALSE@	$(LIBTOOL) --mode=compile $(GCJ) $(libsax_gcj_la_GCJFLAGS) $(GCJFLAGS) -c -o libsax_gcj_la-sax.lo `test -f 'sax.jar' || echo '$(srcdir)/'`sax.jar
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ 
+ 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:  $(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; }'`; \
+ 	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:  $(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
+ check-am: all-am
+ check: $(BUILT_SOURCES)
+ 	$(MAKE) $(AM_MAKEFLAGS) check-am
+ all-am: Makefile $(LTLIBRARIES)
+ installdirs:
+ 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-noinstLTLIBRARIES \
+ 	mostlyclean-am
+ 
+ distclean: distclean-am
+ 	-rm -rf ./$(DEPDIR)
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-compile distclean-generic \
+ 	distclean-libtool distclean-tags
+ 
+ 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 -rf ./$(DEPDIR)
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-am
+ 
+ mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ 	mostlyclean-libtool mostlyclean-local
+ 
+ pdf: pdf-am
+ 
+ pdf-am:
+ 
+ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am
+ 
+ .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ 	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ 	distclean-compile distclean-generic distclean-libtool \
+ 	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 \
+ 	maintainer-clean maintainer-clean-generic mostlyclean \
+ 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ 	mostlyclean-local pdf pdf-am ps ps-am tags uninstall \
+ 	uninstall-am uninstall-info-am
+ 
+ 
+ sax.jar: classes.stamp
+ 	find org -name '*.class' -print | $(ZIP) -cfME@ $@
+ 
+ classes.stamp:	$(source_files)
+ 	here=`pwd`; cd $(srcdir); \
+ 	$(GCJ_WITH_FLAGS) -C -d $$here $(source_files)
+ 	echo > classes.stamp
+ 
+ mostlyclean-local:
+ 	-find . -name '*.class' | xargs rm
+ 	-rm classes.stamp sax.jar
+ # 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-3.4.3/libjava/external/sax/README gcc-4.0.0/libjava/external/sax/README
*** gcc-3.4.3/libjava/external/sax/README	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/README	Wed Feb  2 00:41:50 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-3.4.3/libjava/external/sax/org/xml/sax/AttributeList.java gcc-4.0.0/libjava/external/sax/org/xml/sax/AttributeList.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/AttributeList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/AttributeList.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/Attributes.java gcc-4.0.0/libjava/external/sax/org/xml/sax/Attributes.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/Attributes.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/Attributes.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ContentHandler.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ContentHandler.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ContentHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ContentHandler.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/DTDHandler.java gcc-4.0.0/libjava/external/sax/org/xml/sax/DTDHandler.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/DTDHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/DTDHandler.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/DocumentHandler.java gcc-4.0.0/libjava/external/sax/org/xml/sax/DocumentHandler.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/DocumentHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/DocumentHandler.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/EntityResolver.java gcc-4.0.0/libjava/external/sax/org/xml/sax/EntityResolver.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/EntityResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/EntityResolver.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ErrorHandler.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ErrorHandler.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ErrorHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ErrorHandler.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/HandlerBase.java gcc-4.0.0/libjava/external/sax/org/xml/sax/HandlerBase.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/HandlerBase.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/HandlerBase.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/InputSource.java gcc-4.0.0/libjava/external/sax/org/xml/sax/InputSource.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/InputSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/InputSource.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/Locator.java gcc-4.0.0/libjava/external/sax/org/xml/sax/Locator.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/Locator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/Locator.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/Parser.java gcc-4.0.0/libjava/external/sax/org/xml/sax/Parser.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/Parser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/Parser.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/SAXException.java gcc-4.0.0/libjava/external/sax/org/xml/sax/SAXException.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/SAXException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/SAXException.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/SAXNotRecognizedException.java gcc-4.0.0/libjava/external/sax/org/xml/sax/SAXNotRecognizedException.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/SAXNotRecognizedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/SAXNotRecognizedException.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/SAXNotSupportedException.java gcc-4.0.0/libjava/external/sax/org/xml/sax/SAXNotSupportedException.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/SAXNotSupportedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/SAXNotSupportedException.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/SAXParseException.java gcc-4.0.0/libjava/external/sax/org/xml/sax/SAXParseException.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/SAXParseException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/SAXParseException.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/XMLFilter.java gcc-4.0.0/libjava/external/sax/org/xml/sax/XMLFilter.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/XMLFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/XMLFilter.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/XMLReader.java gcc-4.0.0/libjava/external/sax/org/xml/sax/XMLReader.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/XMLReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/XMLReader.java	Wed Feb  2 00:41:51 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.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ext/Attributes2.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/Attributes2.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ext/Attributes2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/Attributes2.java	Wed Feb  2 00:41:52 2005
***************
*** 0 ****
--- 1,132 ----
+ // Attributes2.java - extended Attributes
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: Attributes2.java,v 1.1 2005/02/02 00:41:52 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ext/Attributes2Impl.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/Attributes2Impl.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ext/Attributes2Impl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/Attributes2Impl.java	Wed Feb  2 00:41:52 2005
***************
*** 0 ****
--- 1,301 ----
+ // Attributes2Impl.java - extended AttributesImpl
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: Attributes2Impl.java,v 1.1 2005/02/02 00:41:52 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ext/DeclHandler.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/DeclHandler.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ext/DeclHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/DeclHandler.java	Wed Feb  2 00:41:52 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.1 2005/02/02 00:41:52 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ext/DefaultHandler2.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/DefaultHandler2.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ext/DefaultHandler2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/DefaultHandler2.java	Wed Feb  2 00:41:52 2005
***************
*** 0 ****
--- 1,130 ----
+ // DefaultHandler2.java - extended DefaultHandler
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: DefaultHandler2.java,v 1.1 2005/02/02 00:41:52 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ext/EntityResolver2.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/EntityResolver2.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ext/EntityResolver2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/EntityResolver2.java	Wed Feb  2 00:41:52 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 2005/02/02 00:41:52 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ext/LexicalHandler.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/LexicalHandler.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ext/LexicalHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/LexicalHandler.java	Wed Feb  2 00:41:52 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.1 2005/02/02 00:41:52 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ext/Locator2.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/Locator2.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ext/Locator2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/Locator2.java	Wed Feb  2 00:41:52 2005
***************
*** 0 ****
--- 1,75 ----
+ // Locator2.java - extended Locator
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: Locator2.java,v 1.1 2005/02/02 00:41:52 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ext/Locator2Impl.java gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/Locator2Impl.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ext/Locator2Impl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/Locator2Impl.java	Wed Feb  2 00:41:52 2005
***************
*** 0 ****
--- 1,101 ----
+ // Locator2Impl.java - extended LocatorImpl
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+ // $Id: Locator2Impl.java,v 1.1 2005/02/02 00:41:52 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/ext/package.html gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/package.html
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/ext/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/ext/package.html	Wed Feb  2 00:41:52 2005
***************
*** 0 ****
--- 1,46 ----
+ <HTML><HEAD>
+ <!-- $Id: package.html,v 1.1 2005/02/02 00:41:52 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/AttributeListImpl.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/AttributeListImpl.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/AttributeListImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/AttributeListImpl.java	Wed Feb  2 00:41:53 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.1 2005/02/02 00:41:53 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/AttributesImpl.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/AttributesImpl.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/AttributesImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/AttributesImpl.java	Wed Feb  2 00:41:54 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.1 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/DefaultHandler.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/DefaultHandler.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/DefaultHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/DefaultHandler.java	Wed Feb  2 00:41:54 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.1 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/LocatorImpl.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/LocatorImpl.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/LocatorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/LocatorImpl.java	Wed Feb  2 00:41:54 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.1 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/NamespaceSupport.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/NamespaceSupport.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/NamespaceSupport.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/NamespaceSupport.java	Wed Apr  6 21:38:28 2005
***************
*** 0 ****
--- 1,836 ----
+ // 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.2 2005/03/24 00:04:07 tromey 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.
+      */
+     // GCJ LOCAL: work around gcj bug by making this package-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-3.4.3/libjava/external/sax/org/xml/sax/helpers/NewInstance.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/NewInstance.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/NewInstance.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/NewInstance.java	Wed Feb  2 00:41:54 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.1 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/ParserAdapter.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/ParserAdapter.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/ParserAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/ParserAdapter.java	Wed Feb  2 00:41:54 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.1 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/ParserFactory.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/ParserFactory.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/ParserFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/ParserFactory.java	Wed Feb  2 00:41:54 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.1 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/XMLFilterImpl.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/XMLFilterImpl.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/XMLFilterImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/XMLFilterImpl.java	Wed Feb  2 00:41:54 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.1 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java	Wed Feb  2 00:41:54 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 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/XMLReaderFactory.java gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/XMLReaderFactory.java
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/XMLReaderFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/XMLReaderFactory.java	Wed Feb  2 00:41:54 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.1 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/helpers/package.html gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/package.html
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/helpers/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/helpers/package.html	Wed Feb  2 00:41:54 2005
***************
*** 0 ****
--- 1,11 ----
+ <HTML><HEAD>
+ <!-- $Id: package.html,v 1.1 2005/02/02 00:41:54 tromey 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-3.4.3/libjava/external/sax/org/xml/sax/package.html gcc-4.0.0/libjava/external/sax/org/xml/sax/package.html
*** gcc-3.4.3/libjava/external/sax/org/xml/sax/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/sax/org/xml/sax/package.html	Wed Feb  2 00:41:51 2005
***************
*** 0 ****
--- 1,297 ----
+ <html><head>
+ <!-- $Id: package.html,v 1.1 2005/02/02 00:41:51 tromey 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-3.4.3/libjava/external/w3c_dom/COPYRIGHT.html gcc-4.0.0/libjava/external/w3c_dom/COPYRIGHT.html
*** gcc-3.4.3/libjava/external/w3c_dom/COPYRIGHT.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/COPYRIGHT.html	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/Makefile.am gcc-4.0.0/libjava/external/w3c_dom/Makefile.am
*** gcc-3.4.3/libjava/external/w3c_dom/Makefile.am	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/Makefile.am	Wed Apr  6 21:38:29 2005
***************
*** 0 ****
--- 1,183 ----
+ ## Process this file with automake to produce Makefile.in.
+ 
+ AUTOMAKE_OPTIONS = foreign subdir-objects
+ 
+ ## The compiler with whatever flags we want for both -c and -C
+ ## compiles.
+ GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=$(BOOTCLASSPATH)
+ 
+ BOOTCLASSPATH = $(here)'$(CLASSPATH_SEPARATOR)'$(srcdir)'$(CLASSPATH_SEPARATOR)'$(top_srcdir)'$(CLASSPATH_SEPARATOR)'$(top_builddir)
+ 
+ AM_GCJFLAGS = \
+ 	-B$(top_builddir) \
+ 	@LIBGCJ_JAVAFLAGS@ \
+ 	-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
+ 	--encoding=UTF-8 \
+ 	-Wno-deprecated
+ 
+ BUILT_SOURCES = classes.stamp
+ 
+ w3c.jar: classes.stamp
+ 	find org -name '*.class' -print | $(ZIP) -cfME@ $@
+ 
+ classes.stamp:	$(source_files)
+ 	here=`pwd`; cd $(srcdir); \
+ 	$(GCJ_WITH_FLAGS) -C -d $$here $(source_files)
+ 	echo > classes.stamp
+ 
+ mostlyclean-local:
+ 	-find . -name '*.class' | xargs rm
+ 	-rm classes.stamp w3c.jar
+ 
+ noinst_LTLIBRARIES = libw3c-gcj.la
+ 
+ libw3c_gcj_la_SOURCES =	w3c.jar
+ libw3c_gcj_la_GCJFLAGS = -findirect-dispatch $(AM_GCJFLAGS)
+ 
+ source_files = \
+ org/w3c/dom/xpath/XPathNamespace.java \
+ org/w3c/dom/xpath/XPathResult.java \
+ org/w3c/dom/xpath/XPathException.java \
+ org/w3c/dom/xpath/XPathExpression.java \
+ org/w3c/dom/xpath/XPathNSResolver.java \
+ org/w3c/dom/xpath/XPathEvaluator.java \
+ org/w3c/dom/DOMException.java \
+ org/w3c/dom/Comment.java \
+ org/w3c/dom/stylesheets/DocumentStyle.java \
+ org/w3c/dom/stylesheets/MediaList.java \
+ org/w3c/dom/stylesheets/LinkStyle.java \
+ org/w3c/dom/stylesheets/StyleSheet.java	\
+ org/w3c/dom/stylesheets/StyleSheetList.java \
+ org/w3c/dom/Attr.java \
+ org/w3c/dom/Notation.java \
+ org/w3c/dom/TypeInfo.java \
+ org/w3c/dom/html2/HTMLIsIndexElement.java \
+ org/w3c/dom/html2/HTMLTableColElement.java \
+ org/w3c/dom/html2/HTMLLinkElement.java \
+ org/w3c/dom/html2/HTMLTitleElement.java	\
+ org/w3c/dom/html2/HTMLBRElement.java \
+ org/w3c/dom/html2/HTMLHeadElement.java \
+ org/w3c/dom/html2/HTMLHtmlElement.java \
+ org/w3c/dom/html2/HTMLScriptElement.java \
+ org/w3c/dom/html2/HTMLTableRowElement.java \
+ org/w3c/dom/html2/HTMLOptionsCollection.java \
+ org/w3c/dom/html2/HTMLTableCellElement.java \
+ org/w3c/dom/html2/HTMLDListElement.java	\
+ org/w3c/dom/html2/HTMLFieldSetElement.java \
+ org/w3c/dom/html2/HTMLImageElement.java	\
+ org/w3c/dom/html2/HTMLHRElement.java \
+ org/w3c/dom/html2/HTMLModElement.java \
+ org/w3c/dom/html2/HTMLHeadingElement.java \
+ org/w3c/dom/html2/HTMLTableElement.java	\
+ org/w3c/dom/html2/HTMLAreaElement.java \
+ org/w3c/dom/html2/HTMLOptGroupElement.java \
+ org/w3c/dom/html2/HTMLIFrameElement.java \
+ org/w3c/dom/html2/HTMLDirectoryElement.java \
+ org/w3c/dom/html2/HTMLParamElement.java	\
+ org/w3c/dom/html2/HTMLLegendElement.java \
+ org/w3c/dom/html2/HTMLFrameElement.java	\
+ org/w3c/dom/html2/HTMLFormElement.java \
+ org/w3c/dom/html2/HTMLStyleElement.java	\
+ org/w3c/dom/html2/HTMLFrameSetElement.java \
+ org/w3c/dom/html2/HTMLCollection.java \
+ org/w3c/dom/html2/HTMLAnchorElement.java \
+ org/w3c/dom/html2/HTMLLabelElement.java	\
+ org/w3c/dom/html2/HTMLBodyElement.java \
+ org/w3c/dom/html2/HTMLOptionElement.java \
+ org/w3c/dom/html2/HTMLTableSectionElement.java \
+ org/w3c/dom/html2/HTMLAppletElement.java \
+ org/w3c/dom/html2/HTMLSelectElement.java \
+ org/w3c/dom/html2/HTMLMetaElement.java \
+ org/w3c/dom/html2/HTMLMenuElement.java \
+ org/w3c/dom/html2/HTMLDivElement.java \
+ org/w3c/dom/html2/HTMLLIElement.java \
+ org/w3c/dom/html2/HTMLFontElement.java \
+ org/w3c/dom/html2/HTMLOListElement.java	\
+ org/w3c/dom/html2/HTMLBaseFontElement.java \
+ org/w3c/dom/html2/HTMLElement.java \
+ org/w3c/dom/html2/HTMLTableCaptionElement.java \
+ org/w3c/dom/html2/HTMLTextAreaElement.java \
+ org/w3c/dom/html2/HTMLPreElement.java \
+ org/w3c/dom/html2/HTMLObjectElement.java \
+ org/w3c/dom/html2/HTMLBaseElement.java \
+ org/w3c/dom/html2/HTMLUListElement.java	\
+ org/w3c/dom/html2/HTMLMapElement.java \
+ org/w3c/dom/html2/HTMLParagraphElement.java \
+ org/w3c/dom/html2/HTMLButtonElement.java \
+ org/w3c/dom/html2/HTMLQuoteElement.java	\
+ org/w3c/dom/html2/HTMLInputElement.java	\
+ org/w3c/dom/html2/HTMLDocument.java \
+ org/w3c/dom/ls/LSParser.java \
+ org/w3c/dom/ls/LSSerializerFilter.java \
+ org/w3c/dom/ls/LSLoadEvent.java	\
+ org/w3c/dom/ls/DOMImplementationLS.java	\
+ org/w3c/dom/ls/LSException.java	\
+ org/w3c/dom/ls/LSSerializer.java \
+ org/w3c/dom/ls/LSResourceResolver.java \
+ org/w3c/dom/ls/LSOutput.java \
+ org/w3c/dom/ls/LSInput.java \
+ org/w3c/dom/ls/LSProgressEvent.java \
+ org/w3c/dom/ls/LSParserFilter.java \
+ org/w3c/dom/DOMLocator.java \
+ org/w3c/dom/DOMStringList.java \
+ org/w3c/dom/DocumentFragment.java \
+ org/w3c/dom/events/MutationEvent.java \
+ org/w3c/dom/events/UIEvent.java	\
+ org/w3c/dom/events/EventListener.java \
+ org/w3c/dom/events/Event.java \
+ org/w3c/dom/events/MouseEvent.java \
+ org/w3c/dom/events/EventTarget.java \
+ org/w3c/dom/events/DocumentEvent.java \
+ org/w3c/dom/events/EventException.java \
+ org/w3c/dom/EntityReference.java \
+ org/w3c/dom/DOMErrorHandler.java \
+ org/w3c/dom/views/AbstractView.java \
+ org/w3c/dom/views/DocumentView.java \
+ org/w3c/dom/DOMError.java \
+ org/w3c/dom/bootstrap/DOMImplementationRegistry.java \
+ org/w3c/dom/traversal/TreeWalker.java \
+ org/w3c/dom/traversal/NodeFilter.java \
+ org/w3c/dom/traversal/DocumentTraversal.java \
+ org/w3c/dom/traversal/NodeIterator.java	\
+ org/w3c/dom/CharacterData.java \
+ org/w3c/dom/DOMConfiguration.java \
+ org/w3c/dom/css/CSSRule.java \
+ org/w3c/dom/css/Rect.java \
+ org/w3c/dom/css/CSSStyleSheet.java \
+ org/w3c/dom/css/CSSFontFaceRule.java \
+ org/w3c/dom/css/CSSPrimitiveValue.java \
+ org/w3c/dom/css/CSSRuleList.java \
+ org/w3c/dom/css/ViewCSS.java \
+ org/w3c/dom/css/CSSStyleRule.java \
+ org/w3c/dom/css/CSSUnknownRule.java \
+ org/w3c/dom/css/RGBColor.java \
+ org/w3c/dom/css/ElementCSSInlineStyle.java \
+ org/w3c/dom/css/CSSMediaRule.java \
+ org/w3c/dom/css/CSS2Properties.java \
+ org/w3c/dom/css/CSSValue.java \
+ org/w3c/dom/css/CSSStyleDeclaration.java \
+ org/w3c/dom/css/DOMImplementationCSS.java \
+ org/w3c/dom/css/CSSCharsetRule.java \
+ org/w3c/dom/css/Counter.java \
+ org/w3c/dom/css/CSSPageRule.java \
+ org/w3c/dom/css/DocumentCSS.java \
+ org/w3c/dom/css/CSSValueList.java \
+ org/w3c/dom/css/CSSImportRule.java \
+ org/w3c/dom/NameList.java \
+ org/w3c/dom/Element.java \
+ org/w3c/dom/Document.java \
+ org/w3c/dom/ranges/Range.java \
+ org/w3c/dom/ranges/RangeException.java \
+ org/w3c/dom/ranges/DocumentRange.java \
+ org/w3c/dom/DOMImplementationList.java \
+ org/w3c/dom/Entity.java	\
+ org/w3c/dom/UserDataHandler.java \
+ org/w3c/dom/DOMImplementation.java \
+ org/w3c/dom/CDATASection.java \
+ org/w3c/dom/ProcessingInstruction.java \
+ org/w3c/dom/Node.java \
+ org/w3c/dom/NamedNodeMap.java \
+ org/w3c/dom/NodeList.java \
+ org/w3c/dom/Text.java \
+ org/w3c/dom/DocumentType.java \
+ org/w3c/dom/DOMImplementationSource.java
diff -Nrcpad gcc-3.4.3/libjava/external/w3c_dom/Makefile.in gcc-4.0.0/libjava/external/w3c_dom/Makefile.in
*** gcc-3.4.3/libjava/external/w3c_dom/Makefile.in	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/Makefile.in	Wed Apr  6 21:38:29 2005
***************
*** 0 ****
--- 1,743 ----
+ # 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@
+ 
+ SOURCES = $(libw3c_gcj_la_SOURCES)
+ 
+ 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)/../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)
+ CONFIG_HEADER = $(top_builddir)/include/config.h \
+ 	$(top_builddir)/gcj/libgcj-config.h
+ CONFIG_CLEAN_FILES =
+ LTLIBRARIES = $(noinst_LTLIBRARIES)
+ libw3c_gcj_la_LIBADD =
+ am_libw3c_gcj_la_OBJECTS = libw3c_gcj_la-w3c.lo
+ libw3c_gcj_la_OBJECTS = $(am_libw3c_gcj_la_OBJECTS)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/gcj
+ depcomp = $(SHELL) $(top_srcdir)/../depcomp
+ am__depfiles_maybe = depfiles
+ GCJCOMPILE = $(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS)
+ LTGCJCOMPILE = $(LIBTOOL) --mode=compile $(GCJ) $(AM_GCJFLAGS) \
+ 	$(GCJFLAGS)
+ GCJLD = $(GCJ)
+ GCJLINK = $(LIBTOOL) --mode=link $(GCJLD) $(AM_GCJFLAGS) $(GCJFLAGS) \
+ 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+ SOURCES = $(libw3c_gcj_la_SOURCES)
+ DIST_SOURCES = $(libw3c_gcj_la_SOURCES)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ AR = @AR@
+ AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ BACKTRACESPEC = @BACKTRACESPEC@
+ CAIRO_CFLAGS = @CAIRO_CFLAGS@
+ CAIRO_LIBS = @CAIRO_LIBS@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CHECKREFSPEC = @CHECKREFSPEC@
+ CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+ DIRLTDL = @DIRLTDL@
+ DIVIDESPEC = @DIVIDESPEC@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
+ EXCEPTIONSPEC = @EXCEPTIONSPEC@
+ EXEEXT = @EXEEXT@
+ GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
+ GCDEPS = @GCDEPS@
+ GCINCS = @GCINCS@
+ GCJ = @GCJ@
+ GCJDEPMODE = @GCJDEPMODE@
+ GCJFLAGS = @GCJFLAGS@
+ GCJH = @GCJH@
+ GCJVERSION = @GCJVERSION@
+ GCLIBS = @GCLIBS@
+ GCSPEC = @GCSPEC@
+ GCTESTSPEC = @GCTESTSPEC@
+ GLIB_CFLAGS = @GLIB_CFLAGS@
+ GLIB_LIBS = @GLIB_LIBS@
+ GTK_AWT_FALSE = @GTK_AWT_FALSE@
+ GTK_AWT_TRUE = @GTK_AWT_TRUE@
+ GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
+ GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
+ GTK_CFLAGS = @GTK_CFLAGS@
+ GTK_LIBS = @GTK_LIBS@
+ HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
+ IEEESPEC = @IEEESPEC@
+ INCLTDL = @INCLTDL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ INTERPRETER = @INTERPRETER@
+ JAVA_HOME = @JAVA_HOME@
+ JAVA_HOME_SET_FALSE = @JAVA_HOME_SET_FALSE@
+ JAVA_HOME_SET_TRUE = @JAVA_HOME_SET_TRUE@
+ JC1GCSPEC = @JC1GCSPEC@
+ LDFLAGS = @LDFLAGS@
+ LIBART_CFLAGS = @LIBART_CFLAGS@
+ LIBART_LIBS = @LIBART_LIBS@
+ LIBFFI = @LIBFFI@
+ LIBFFIINCS = @LIBFFIINCS@
+ LIBGCJDEBUG = @LIBGCJDEBUG@
+ LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
+ LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
+ LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
+ LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
+ LIBGCJ_LD_SYMBOLIC = @LIBGCJ_LD_SYMBOLIC@
+ LIBICONV = @LIBICONV@
+ LIBLTDL = @LIBLTDL@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKEINFO = @MAKEINFO@
+ NATIVE_FALSE = @NATIVE_FALSE@
+ NATIVE_TRUE = @NATIVE_TRUE@
+ NEEDS_DATA_START_FALSE = @NEEDS_DATA_START_FALSE@
+ NEEDS_DATA_START_TRUE = @NEEDS_DATA_START_TRUE@
+ OBJEXT = @OBJEXT@
+ ONESTEP_FALSE = @ONESTEP_FALSE@
+ ONESTEP_TRUE = @ONESTEP_TRUE@
+ 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@
+ PERL = @PERL@
+ PKG_CONFIG = @PKG_CONFIG@
+ PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@
+ RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRIP = @STRIP@
+ SUPPLY_BACKTRACE_FALSE = @SUPPLY_BACKTRACE_FALSE@
+ SUPPLY_BACKTRACE_TRUE = @SUPPLY_BACKTRACE_TRUE@
+ SYSDEP_SOURCES = @SYSDEP_SOURCES@
+ SYSTEMSPEC = @SYSTEMSPEC@
+ SYS_ZLIBS = @SYS_ZLIBS@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
+ THREADCXXFLAGS = @THREADCXXFLAGS@
+ THREADDEPS = @THREADDEPS@
+ THREADINCS = @THREADINCS@
+ THREADLDFLAGS = @THREADLDFLAGS@
+ THREADLIBS = @THREADLIBS@
+ THREADSPEC = @THREADSPEC@
+ TOOLKIT = @TOOLKIT@
+ USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
+ 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@
+ USING_NOGC_TRUE = @USING_NOGC_TRUE@
+ USING_NO_THREADS_FALSE = @USING_NO_THREADS_FALSE@
+ USING_NO_THREADS_TRUE = @USING_NO_THREADS_TRUE@
+ USING_POSIX_PLATFORM_FALSE = @USING_POSIX_PLATFORM_FALSE@
+ USING_POSIX_PLATFORM_TRUE = @USING_POSIX_PLATFORM_TRUE@
+ USING_POSIX_THREADS_FALSE = @USING_POSIX_THREADS_FALSE@
+ USING_POSIX_THREADS_TRUE = @USING_POSIX_THREADS_TRUE@
+ USING_WIN32_PLATFORM_FALSE = @USING_WIN32_PLATFORM_FALSE@
+ USING_WIN32_PLATFORM_TRUE = @USING_WIN32_PLATFORM_TRUE@
+ USING_WIN32_THREADS_FALSE = @USING_WIN32_THREADS_FALSE@
+ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
+ VERSION = @VERSION@
+ XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
+ XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
+ ZINCS = @ZINCS@
+ ZIP = @ZIP@
+ ZLIBS = @ZLIBS@
+ ZLIBSPEC = @ZLIBSPEC@
+ ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_GCJ = @ac_ct_GCJ@
+ 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__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
+ am__fastdepGCJ_TRUE = @am__fastdepGCJ_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@
+ 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@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ libgcj_basedir = @libgcj_basedir@
+ libstdcxx_incdir = @libstdcxx_incdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ mkinstalldirs = @mkinstalldirs@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ subdirs = @subdirs@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ 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
+ GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=$(BOOTCLASSPATH)
+ BOOTCLASSPATH = $(here)'$(CLASSPATH_SEPARATOR)'$(srcdir)'$(CLASSPATH_SEPARATOR)'$(top_srcdir)'$(CLASSPATH_SEPARATOR)'$(top_builddir)
+ AM_GCJFLAGS = \
+ 	-B$(top_builddir) \
+ 	@LIBGCJ_JAVAFLAGS@ \
+ 	-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
+ 	--encoding=UTF-8 \
+ 	-Wno-deprecated
+ 
+ BUILT_SOURCES = classes.stamp
+ noinst_LTLIBRARIES = libw3c-gcj.la
+ libw3c_gcj_la_SOURCES = w3c.jar
+ libw3c_gcj_la_GCJFLAGS = -findirect-dispatch $(AM_GCJFLAGS)
+ source_files = \
+ org/w3c/dom/xpath/XPathNamespace.java \
+ org/w3c/dom/xpath/XPathResult.java \
+ org/w3c/dom/xpath/XPathException.java \
+ org/w3c/dom/xpath/XPathExpression.java \
+ org/w3c/dom/xpath/XPathNSResolver.java \
+ org/w3c/dom/xpath/XPathEvaluator.java \
+ org/w3c/dom/DOMException.java \
+ org/w3c/dom/Comment.java \
+ org/w3c/dom/stylesheets/DocumentStyle.java \
+ org/w3c/dom/stylesheets/MediaList.java \
+ org/w3c/dom/stylesheets/LinkStyle.java \
+ org/w3c/dom/stylesheets/StyleSheet.java	\
+ org/w3c/dom/stylesheets/StyleSheetList.java \
+ org/w3c/dom/Attr.java \
+ org/w3c/dom/Notation.java \
+ org/w3c/dom/TypeInfo.java \
+ org/w3c/dom/html2/HTMLIsIndexElement.java \
+ org/w3c/dom/html2/HTMLTableColElement.java \
+ org/w3c/dom/html2/HTMLLinkElement.java \
+ org/w3c/dom/html2/HTMLTitleElement.java	\
+ org/w3c/dom/html2/HTMLBRElement.java \
+ org/w3c/dom/html2/HTMLHeadElement.java \
+ org/w3c/dom/html2/HTMLHtmlElement.java \
+ org/w3c/dom/html2/HTMLScriptElement.java \
+ org/w3c/dom/html2/HTMLTableRowElement.java \
+ org/w3c/dom/html2/HTMLOptionsCollection.java \
+ org/w3c/dom/html2/HTMLTableCellElement.java \
+ org/w3c/dom/html2/HTMLDListElement.java	\
+ org/w3c/dom/html2/HTMLFieldSetElement.java \
+ org/w3c/dom/html2/HTMLImageElement.java	\
+ org/w3c/dom/html2/HTMLHRElement.java \
+ org/w3c/dom/html2/HTMLModElement.java \
+ org/w3c/dom/html2/HTMLHeadingElement.java \
+ org/w3c/dom/html2/HTMLTableElement.java	\
+ org/w3c/dom/html2/HTMLAreaElement.java \
+ org/w3c/dom/html2/HTMLOptGroupElement.java \
+ org/w3c/dom/html2/HTMLIFrameElement.java \
+ org/w3c/dom/html2/HTMLDirectoryElement.java \
+ org/w3c/dom/html2/HTMLParamElement.java	\
+ org/w3c/dom/html2/HTMLLegendElement.java \
+ org/w3c/dom/html2/HTMLFrameElement.java	\
+ org/w3c/dom/html2/HTMLFormElement.java \
+ org/w3c/dom/html2/HTMLStyleElement.java	\
+ org/w3c/dom/html2/HTMLFrameSetElement.java \
+ org/w3c/dom/html2/HTMLCollection.java \
+ org/w3c/dom/html2/HTMLAnchorElement.java \
+ org/w3c/dom/html2/HTMLLabelElement.java	\
+ org/w3c/dom/html2/HTMLBodyElement.java \
+ org/w3c/dom/html2/HTMLOptionElement.java \
+ org/w3c/dom/html2/HTMLTableSectionElement.java \
+ org/w3c/dom/html2/HTMLAppletElement.java \
+ org/w3c/dom/html2/HTMLSelectElement.java \
+ org/w3c/dom/html2/HTMLMetaElement.java \
+ org/w3c/dom/html2/HTMLMenuElement.java \
+ org/w3c/dom/html2/HTMLDivElement.java \
+ org/w3c/dom/html2/HTMLLIElement.java \
+ org/w3c/dom/html2/HTMLFontElement.java \
+ org/w3c/dom/html2/HTMLOListElement.java	\
+ org/w3c/dom/html2/HTMLBaseFontElement.java \
+ org/w3c/dom/html2/HTMLElement.java \
+ org/w3c/dom/html2/HTMLTableCaptionElement.java \
+ org/w3c/dom/html2/HTMLTextAreaElement.java \
+ org/w3c/dom/html2/HTMLPreElement.java \
+ org/w3c/dom/html2/HTMLObjectElement.java \
+ org/w3c/dom/html2/HTMLBaseElement.java \
+ org/w3c/dom/html2/HTMLUListElement.java	\
+ org/w3c/dom/html2/HTMLMapElement.java \
+ org/w3c/dom/html2/HTMLParagraphElement.java \
+ org/w3c/dom/html2/HTMLButtonElement.java \
+ org/w3c/dom/html2/HTMLQuoteElement.java	\
+ org/w3c/dom/html2/HTMLInputElement.java	\
+ org/w3c/dom/html2/HTMLDocument.java \
+ org/w3c/dom/ls/LSParser.java \
+ org/w3c/dom/ls/LSSerializerFilter.java \
+ org/w3c/dom/ls/LSLoadEvent.java	\
+ org/w3c/dom/ls/DOMImplementationLS.java	\
+ org/w3c/dom/ls/LSException.java	\
+ org/w3c/dom/ls/LSSerializer.java \
+ org/w3c/dom/ls/LSResourceResolver.java \
+ org/w3c/dom/ls/LSOutput.java \
+ org/w3c/dom/ls/LSInput.java \
+ org/w3c/dom/ls/LSProgressEvent.java \
+ org/w3c/dom/ls/LSParserFilter.java \
+ org/w3c/dom/DOMLocator.java \
+ org/w3c/dom/DOMStringList.java \
+ org/w3c/dom/DocumentFragment.java \
+ org/w3c/dom/events/MutationEvent.java \
+ org/w3c/dom/events/UIEvent.java	\
+ org/w3c/dom/events/EventListener.java \
+ org/w3c/dom/events/Event.java \
+ org/w3c/dom/events/MouseEvent.java \
+ org/w3c/dom/events/EventTarget.java \
+ org/w3c/dom/events/DocumentEvent.java \
+ org/w3c/dom/events/EventException.java \
+ org/w3c/dom/EntityReference.java \
+ org/w3c/dom/DOMErrorHandler.java \
+ org/w3c/dom/views/AbstractView.java \
+ org/w3c/dom/views/DocumentView.java \
+ org/w3c/dom/DOMError.java \
+ org/w3c/dom/bootstrap/DOMImplementationRegistry.java \
+ org/w3c/dom/traversal/TreeWalker.java \
+ org/w3c/dom/traversal/NodeFilter.java \
+ org/w3c/dom/traversal/DocumentTraversal.java \
+ org/w3c/dom/traversal/NodeIterator.java	\
+ org/w3c/dom/CharacterData.java \
+ org/w3c/dom/DOMConfiguration.java \
+ org/w3c/dom/css/CSSRule.java \
+ org/w3c/dom/css/Rect.java \
+ org/w3c/dom/css/CSSStyleSheet.java \
+ org/w3c/dom/css/CSSFontFaceRule.java \
+ org/w3c/dom/css/CSSPrimitiveValue.java \
+ org/w3c/dom/css/CSSRuleList.java \
+ org/w3c/dom/css/ViewCSS.java \
+ org/w3c/dom/css/CSSStyleRule.java \
+ org/w3c/dom/css/CSSUnknownRule.java \
+ org/w3c/dom/css/RGBColor.java \
+ org/w3c/dom/css/ElementCSSInlineStyle.java \
+ org/w3c/dom/css/CSSMediaRule.java \
+ org/w3c/dom/css/CSS2Properties.java \
+ org/w3c/dom/css/CSSValue.java \
+ org/w3c/dom/css/CSSStyleDeclaration.java \
+ org/w3c/dom/css/DOMImplementationCSS.java \
+ org/w3c/dom/css/CSSCharsetRule.java \
+ org/w3c/dom/css/Counter.java \
+ org/w3c/dom/css/CSSPageRule.java \
+ org/w3c/dom/css/DocumentCSS.java \
+ org/w3c/dom/css/CSSValueList.java \
+ org/w3c/dom/css/CSSImportRule.java \
+ org/w3c/dom/NameList.java \
+ org/w3c/dom/Element.java \
+ org/w3c/dom/Document.java \
+ org/w3c/dom/ranges/Range.java \
+ org/w3c/dom/ranges/RangeException.java \
+ org/w3c/dom/ranges/DocumentRange.java \
+ org/w3c/dom/DOMImplementationList.java \
+ org/w3c/dom/Entity.java	\
+ org/w3c/dom/UserDataHandler.java \
+ org/w3c/dom/DOMImplementation.java \
+ org/w3c/dom/CDATASection.java \
+ org/w3c/dom/ProcessingInstruction.java \
+ org/w3c/dom/Node.java \
+ org/w3c/dom/NamedNodeMap.java \
+ org/w3c/dom/NodeList.java \
+ org/w3c/dom/Text.java \
+ org/w3c/dom/DocumentType.java \
+ org/w3c/dom/DOMImplementationSource.java
+ 
+ all: $(BUILT_SOURCES)
+ 	$(MAKE) $(AM_MAKEFLAGS) all-am
+ 
+ .SUFFIXES:
+ .SUFFIXES: .jar .lo .o .obj
+ $(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) --foreign  external/w3c_dom/Makefile'; \
+ 	cd $(top_srcdir) && \
+ 	  $(AUTOMAKE) --foreign  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
+ 
+ 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
+ libw3c-gcj.la: $(libw3c_gcj_la_OBJECTS) $(libw3c_gcj_la_DEPENDENCIES) 
+ 	$(GCJLINK)  $(libw3c_gcj_la_LDFLAGS) $(libw3c_gcj_la_OBJECTS) $(libw3c_gcj_la_LIBADD) $(LIBS)
+ 
+ mostlyclean-compile:
+ 	-rm -f *.$(OBJEXT)
+ 
+ distclean-compile:
+ 	-rm -f *.tab.c
+ 
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libw3c_gcj_la-w3c.Plo@am__quote@
+ 
+ .jar.o:
+ @am__fastdepGCJ_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \
+ @am__fastdepGCJ_TRUE@	if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
+ @am__fastdepGCJ_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepGCJ_FALSE@	$(GCJCOMPILE) -c -o $@ $<
+ 
+ .jar.obj:
+ @am__fastdepGCJ_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`; \
+ @am__fastdepGCJ_TRUE@	if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+ @am__fastdepGCJ_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepGCJ_FALSE@	$(GCJCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ 
+ .jar.lo:
+ @am__fastdepGCJ_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`; \
+ @am__fastdepGCJ_TRUE@	if $(LTGCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
+ @am__fastdepGCJ_TRUE@	then mv -f "$$depbase.Tpo" "$$depbase.Plo"; else rm -f "$$depbase.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepGCJ_FALSE@	$(LTGCJCOMPILE) -c -o $@ $<
+ 
+ libw3c_gcj_la-w3c.lo: w3c.jar
+ @am__fastdepGCJ_TRUE@	if $(LIBTOOL) --mode=compile $(GCJ) $(libw3c_gcj_la_GCJFLAGS) $(GCJFLAGS) -MT libw3c_gcj_la-w3c.lo -MD -MP -MF "$(DEPDIR)/libw3c_gcj_la-w3c.Tpo" -c -o libw3c_gcj_la-w3c.lo `test -f 'w3c.jar' || echo '$(srcdir)/'`w3c.jar; \
+ @am__fastdepGCJ_TRUE@	then mv -f "$(DEPDIR)/libw3c_gcj_la-w3c.Tpo" "$(DEPDIR)/libw3c_gcj_la-w3c.Plo"; else rm -f "$(DEPDIR)/libw3c_gcj_la-w3c.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	source='w3c.jar' object='libw3c_gcj_la-w3c.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepGCJ_FALSE@	DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepGCJ_FALSE@	$(LIBTOOL) --mode=compile $(GCJ) $(libw3c_gcj_la_GCJFLAGS) $(GCJFLAGS) -c -o libw3c_gcj_la-w3c.lo `test -f 'w3c.jar' || echo '$(srcdir)/'`w3c.jar
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
+ 
+ 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:  $(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; }'`; \
+ 	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:  $(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
+ check-am: all-am
+ check: $(BUILT_SOURCES)
+ 	$(MAKE) $(AM_MAKEFLAGS) check-am
+ all-am: Makefile $(LTLIBRARIES)
+ installdirs:
+ 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-noinstLTLIBRARIES \
+ 	mostlyclean-am
+ 
+ distclean: distclean-am
+ 	-rm -rf ./$(DEPDIR)
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-compile distclean-generic \
+ 	distclean-libtool distclean-tags
+ 
+ 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 -rf ./$(DEPDIR)
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
+ mostlyclean: mostlyclean-am
+ 
+ mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ 	mostlyclean-libtool mostlyclean-local
+ 
+ pdf: pdf-am
+ 
+ pdf-am:
+ 
+ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-info-am
+ 
+ .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ 	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ 	distclean-compile distclean-generic distclean-libtool \
+ 	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 \
+ 	maintainer-clean maintainer-clean-generic mostlyclean \
+ 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ 	mostlyclean-local pdf pdf-am ps ps-am tags uninstall \
+ 	uninstall-am uninstall-info-am
+ 
+ 
+ w3c.jar: classes.stamp
+ 	find org -name '*.class' -print | $(ZIP) -cfME@ $@
+ 
+ classes.stamp:	$(source_files)
+ 	here=`pwd`; cd $(srcdir); \
+ 	$(GCJ_WITH_FLAGS) -C -d $$here $(source_files)
+ 	echo > classes.stamp
+ 
+ mostlyclean-local:
+ 	-find . -name '*.class' | xargs rm
+ 	-rm classes.stamp w3c.jar
+ # 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-3.4.3/libjava/external/w3c_dom/README gcc-4.0.0/libjava/external/w3c_dom/README
*** gcc-3.4.3/libjava/external/w3c_dom/README	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/README	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Attr.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Attr.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Attr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Attr.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/CDATASection.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/CDATASection.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/CDATASection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/CDATASection.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/CharacterData.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/CharacterData.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/CharacterData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/CharacterData.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Comment.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Comment.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Comment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Comment.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMConfiguration.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMConfiguration.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMConfiguration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMConfiguration.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMError.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMError.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMError.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMErrorHandler.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMException.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMException.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMException.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMImplementation.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMImplementation.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMImplementation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMImplementation.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMImplementationList.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMImplementationList.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMImplementationList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMImplementationList.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMImplementationSource.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMLocator.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMLocator.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMLocator.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMStringList.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMStringList.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DOMStringList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DOMStringList.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Document.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Document.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Document.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Document.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DocumentFragment.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DocumentFragment.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DocumentFragment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DocumentFragment.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DocumentType.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DocumentType.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/DocumentType.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/DocumentType.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Element.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Element.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Element.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Element.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Entity.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Entity.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Entity.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Entity.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/EntityReference.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/EntityReference.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/EntityReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/EntityReference.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/NameList.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/NameList.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/NameList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/NameList.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/NamedNodeMap.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/NamedNodeMap.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/NamedNodeMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/NamedNodeMap.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Node.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Node.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Node.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Node.java	Wed Feb  2 00:41:55 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/NodeList.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/NodeList.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/NodeList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/NodeList.java	Wed Feb  2 00:41:56 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Notation.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Notation.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Notation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Notation.java	Wed Feb  2 00:41:56 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ProcessingInstruction.java	Wed Feb  2 00:41:56 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Text.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Text.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/Text.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/Text.java	Wed Feb  2 00:41:56 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/TypeInfo.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/TypeInfo.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/TypeInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/TypeInfo.java	Wed Feb  2 00:41:56 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/UserDataHandler.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/UserDataHandler.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/UserDataHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/UserDataHandler.java	Wed Feb  2 00:41:56 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java	Wed Feb  2 00:41:57 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSS2Properties.java	Wed Feb  2 00:41:58 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSImportRule.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSPageRule.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSRule.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSRule.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSRule.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSRuleList.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSValue.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSValue.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSValue.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSValueList.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSValueList.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/CSSValueList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/CSSValueList.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/Counter.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/Counter.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/Counter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/Counter.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/DocumentCSS.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/RGBColor.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/RGBColor.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/RGBColor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/RGBColor.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/Rect.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/Rect.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/Rect.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/Rect.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/ViewCSS.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/ViewCSS.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/css/ViewCSS.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/css/ViewCSS.java	Wed Feb  2 00:41:59 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/DocumentEvent.java	Wed Feb  2 00:42:00 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/Event.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/Event.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/Event.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/Event.java	Wed Feb  2 00:42:00 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/EventException.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/EventException.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/EventException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/EventException.java	Wed Feb  2 00:42:00 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/EventListener.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/EventListener.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/EventListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/EventListener.java	Wed Feb  2 00:42:00 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/EventTarget.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/EventTarget.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/EventTarget.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/EventTarget.java	Wed Feb  2 00:42:00 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/MouseEvent.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/MouseEvent.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/MouseEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/MouseEvent.java	Wed Feb  2 00:42:00 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/MutationEvent.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/MutationEvent.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/MutationEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/MutationEvent.java	Wed Feb  2 00:42:00 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/UIEvent.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/UIEvent.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/events/UIEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/events/UIEvent.java	Wed Feb  2 00:42:00 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java	Wed Feb  2 00:42:01 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSException.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSException.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSException.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSInput.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSInput.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSInput.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSOutput.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSOutput.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSOutput.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSParser.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSParser.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSParser.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializer.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java	Wed Feb  2 00:42:02 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java	Wed Feb  2 00:42:04 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ranges/Range.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ranges/Range.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ranges/Range.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ranges/Range.java	Wed Feb  2 00:42:04 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ranges/RangeException.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ranges/RangeException.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/ranges/RangeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/ranges/RangeException.java	Wed Feb  2 00:42:04 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java	Wed Feb  2 00:42:05 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java	Wed Feb  2 00:42:05 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java	Wed Feb  2 00:42:05 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java	Wed Feb  2 00:42:05 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java	Wed Feb  2 00:42:05 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java	Wed Feb  2 00:42:05 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java	Wed Feb  2 00:42:05 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java	Wed Feb  2 00:42:05 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java	Wed Feb  2 00:42:05 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/views/AbstractView.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/views/AbstractView.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/views/AbstractView.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/views/AbstractView.java	Wed Feb  2 00:42:06 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/views/DocumentView.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/views/DocumentView.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/views/DocumentView.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/views/DocumentView.java	Wed Feb  2 00:42:06 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java	Wed Feb  2 00:42:06 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathException.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathException.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathException.java	Wed Feb  2 00:42:06 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java	Wed Feb  2 00:42:06 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java	Wed Feb  2 00:42:06 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java	Wed Feb  2 00:42:06 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-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java
*** gcc-3.4.3/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/external/w3c_dom/org/w3c/dom/xpath/XPathResult.java	Wed Feb  2 00:42:06 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-3.4.3/libjava/gcj/Makefile.am gcc-4.0.0/libjava/gcj/Makefile.am
*** gcc-3.4.3/libjava/gcj/Makefile.am	Fri Mar 15 18:03:47 2002
--- gcc-4.0.0/libjava/gcj/Makefile.am	Fri Dec  3 11:15:23 2004
***************
*** 2,8 ****
  
  AUTOMAKE_OPTIONS = foreign
  
! gcjdir = $(includedir)/gcj
  gcj_HEADERS = array.h cni.h field.h javaprims.h method.h
  
  toolgcjdir = @tool_include_dir@/gcj
--- 2,11 ----
  
  AUTOMAKE_OPTIONS = foreign
  
! # autoconf2.13's target_alias
! target_noncanonical = @target_noncanonical@
! 
! gcjdir = $(gxx_include_dir)/gcj
  gcj_HEADERS = array.h cni.h field.h javaprims.h method.h
  
  toolgcjdir = @tool_include_dir@/gcj
diff -Nrcpad gcc-3.4.3/libjava/gcj/Makefile.in gcc-4.0.0/libjava/gcj/Makefile.in
*** gcc-3.4.3/libjava/gcj/Makefile.in	Tue Jan 13 17:37:23 2004
--- gcc-4.0.0/libjava/gcj/Makefile.in	Wed Apr  6 21:38:29 2005
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999 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.
--- 1,8 ----
! # 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.
***************
*** 10,110 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! 
! SHELL = @SHELL@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = ..
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AR = @AR@
  AS = @AS@
  BACKTRACESPEC = @BACKTRACESPEC@
  CAIRO_CFLAGS = @CAIRO_CFLAGS@
  CAIRO_LIBS = @CAIRO_LIBS@
  CC = @CC@
  CHECKREFSPEC = @CHECKREFSPEC@
! COMPPATH = @COMPPATH@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
  DIRLTDL = @DIRLTDL@
  DIVIDESPEC = @DIVIDESPEC@
! DLLTOOL = @DLLTOOL@
  EXCEPTIONSPEC = @EXCEPTIONSPEC@
  EXEEXT = @EXEEXT@
- EXTRA_CC_FILES = @EXTRA_CC_FILES@
  GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  GCDEPS = @GCDEPS@
  GCINCS = @GCINCS@
  GCJ = @GCJ@
  GCJFLAGS = @GCJFLAGS@
  GCJVERSION = @GCJVERSION@
  GCLIBS = @GCLIBS@
- GCOBJS = @GCOBJS@
  GCSPEC = @GCSPEC@
  GCTESTSPEC = @GCTESTSPEC@
  GLIB_CFLAGS = @GLIB_CFLAGS@
- GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
  GLIB_LIBS = @GLIB_LIBS@
! GLIB_MKENUMS = @GLIB_MKENUMS@
! GOBJECT_QUERY = @GOBJECT_QUERY@
  GTK_CFLAGS = @GTK_CFLAGS@
  GTK_LIBS = @GTK_LIBS@
  HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
- HAVE_LIB = @HAVE_LIB@
  IEEESPEC = @IEEESPEC@
  INCLTDL = @INCLTDL@
  INTERPRETER = @INTERPRETER@
  JC1GCSPEC = @JC1GCSPEC@
! LIB = @LIB@
  LIBART_CFLAGS = @LIBART_CFLAGS@
- LIBART_CONFIG = @LIBART_CONFIG@
  LIBART_LIBS = @LIBART_LIBS@
  LIBFFI = @LIBFFI@
  LIBFFIINCS = @LIBFFIINCS@
--- 12,147 ----
  # 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 = gcj
+ DIST_COMMON = $(gcj_HEADERS) $(srcdir)/Makefile.am \
+ 	$(srcdir)/Makefile.in $(srcdir)/libgcj-config.h.in \
+ 	$(toolgcj_HEADERS)
+ 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)
+ CONFIG_HEADER = $(top_builddir)/include/config.h libgcj-config.h
+ CONFIG_CLEAN_FILES =
+ 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)$(gcjdir)" "$(DESTDIR)$(toolgcjdir)"
+ gcjHEADERS_INSTALL = $(INSTALL_HEADER)
+ toolgcjHEADERS_INSTALL = $(INSTALL_HEADER)
+ HEADERS = $(gcj_HEADERS) $(toolgcj_HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
  AR = @AR@
  AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
  BACKTRACESPEC = @BACKTRACESPEC@
  CAIRO_CFLAGS = @CAIRO_CFLAGS@
  CAIRO_LIBS = @CAIRO_LIBS@
  CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
  CHECKREFSPEC = @CHECKREFSPEC@
! CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
! CPP = @CPP@
! CPPFLAGS = @CPPFLAGS@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
  DIRLTDL = @DIRLTDL@
  DIVIDESPEC = @DIVIDESPEC@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXCEPTIONSPEC = @EXCEPTIONSPEC@
  EXEEXT = @EXEEXT@
  GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  GCDEPS = @GCDEPS@
  GCINCS = @GCINCS@
  GCJ = @GCJ@
+ GCJDEPMODE = @GCJDEPMODE@
  GCJFLAGS = @GCJFLAGS@
+ GCJH = @GCJH@
  GCJVERSION = @GCJVERSION@
  GCLIBS = @GCLIBS@
  GCSPEC = @GCSPEC@
  GCTESTSPEC = @GCTESTSPEC@
  GLIB_CFLAGS = @GLIB_CFLAGS@
  GLIB_LIBS = @GLIB_LIBS@
! GTK_AWT_FALSE = @GTK_AWT_FALSE@
! GTK_AWT_TRUE = @GTK_AWT_TRUE@
! GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
! GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
  GTK_CFLAGS = @GTK_CFLAGS@
  GTK_LIBS = @GTK_LIBS@
  HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
  IEEESPEC = @IEEESPEC@
  INCLTDL = @INCLTDL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
  INTERPRETER = @INTERPRETER@
+ JAVA_HOME = @JAVA_HOME@
+ JAVA_HOME_SET_FALSE = @JAVA_HOME_SET_FALSE@
+ JAVA_HOME_SET_TRUE = @JAVA_HOME_SET_TRUE@
  JC1GCSPEC = @JC1GCSPEC@
! LDFLAGS = @LDFLAGS@
  LIBART_CFLAGS = @LIBART_CFLAGS@
  LIBART_LIBS = @LIBART_LIBS@
  LIBFFI = @LIBFFI@
  LIBFFIINCS = @LIBFFIINCS@
*************** LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
*** 113,365 ****
  LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
  LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
  LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
  LIBICONV = @LIBICONV@
  LIBLTDL = @LIBLTDL@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
! LTLIB = @LTLIB@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
! OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
  PANGOFT2_LIBS = @PANGOFT2_LIBS@
  PERL = @PERL@
  PKG_CONFIG = @PKG_CONFIG@
! PLATFORMOBJS = @PLATFORMOBJS@
  RANLIB = @RANLIB@
  STRIP = @STRIP@
  SYSDEP_SOURCES = @SYSDEP_SOURCES@
  SYSTEMSPEC = @SYSTEMSPEC@
  SYS_ZLIBS = @SYS_ZLIBS@
  THREADCXXFLAGS = @THREADCXXFLAGS@
  THREADDEPS = @THREADDEPS@
  THREADINCS = @THREADINCS@
  THREADLDFLAGS = @THREADLDFLAGS@
  THREADLIBS = @THREADLIBS@
- THREADOBJS = @THREADOBJS@
  THREADSPEC = @THREADSPEC@
  TOOLKIT = @TOOLKIT@
  VERSION = @VERSION@
  ZINCS = @ZINCS@
  ZLIBS = @ZLIBS@
  ZLIBSPEC = @ZLIBSPEC@
  ZLIBTESTSPEC = @ZLIBTESTSPEC@
  gcc_version = @gcc_version@
! glibjava_CXX = @glibjava_CXX@
  here = @here@
  libgcj_basedir = @libgcj_basedir@
  mkinstalldirs = @mkinstalldirs@
  tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  toolexecmainlibdir = @toolexecmainlibdir@
- 
  AUTOMAKE_OPTIONS = foreign
! 
! gcjdir = $(includedir)/gcj
  gcj_HEADERS = array.h cni.h field.h javaprims.h method.h
- 
  toolgcjdir = @tool_include_dir@/gcj
  toolgcj_HEADERS = libgcj-config.h
! CONFIG_HEADER = ../include/config.h libgcj-config.h
! CONFIG_CLEAN_FILES = 
! HEADERS =  $(gcj_HEADERS) $(toolgcj_HEADERS)
! 
! DIST_COMMON =  ./stamp-h2.in Makefile.am Makefile.in libgcj-config.h.in
! 
! 
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
  
- TAR = gtar
- GZIP_ENV = --best
- all: all-redirect
  .SUFFIXES:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --foreign gcj/Makefile
  
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
  
  
  libgcj-config.h: stamp-h2
  	@if test ! -f $@; then \
! 		rm -f stamp-h2; \
! 		$(MAKE) stamp-h2; \
  	else :; fi
  stamp-h2: $(srcdir)/libgcj-config.h.in $(top_builddir)/config.status
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES= CONFIG_HEADERS=gcj/libgcj-config.h \
! 	     $(SHELL) ./config.status
! 	@echo timestamp > stamp-h2 2> /dev/null
! $(srcdir)/libgcj-config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h2.in
! 	@if test ! -f $@; then \
! 		rm -f $(srcdir)/stamp-h2.in; \
! 		$(MAKE) $(srcdir)/stamp-h2.in; \
! 	else :; fi
! $(srcdir)/stamp-h2.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) 
  	cd $(top_srcdir) && $(AUTOHEADER)
! 	@echo timestamp > $(srcdir)/stamp-h2.in 2> /dev/null
! 
! mostlyclean-hdr:
! 
! clean-hdr:
  
  distclean-hdr:
! 	-rm -f libgcj-config.h
  
! maintainer-clean-hdr:
  
  install-gcjHEADERS: $(gcj_HEADERS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(gcjdir)
  	@list='$(gcj_HEADERS)'; for p in $$list; do \
! 	  if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
! 	  echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(gcjdir)/$$p"; \
! 	  $(INSTALL_DATA) $$d$$p $(DESTDIR)$(gcjdir)/$$p; \
  	done
  
  uninstall-gcjHEADERS:
  	@$(NORMAL_UNINSTALL)
! 	list='$(gcj_HEADERS)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(gcjdir)/$$p; \
  	done
- 
  install-toolgcjHEADERS: $(toolgcj_HEADERS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(toolgcjdir)
  	@list='$(toolgcj_HEADERS)'; for p in $$list; do \
! 	  if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
! 	  echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(toolgcjdir)/$$p"; \
! 	  $(INSTALL_DATA) $$d$$p $(DESTDIR)$(toolgcjdir)/$$p; \
  	done
  
  uninstall-toolgcjHEADERS:
  	@$(NORMAL_UNINSTALL)
! 	list='$(toolgcj_HEADERS)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(toolgcjdir)/$$p; \
  	done
  
  tags: TAGS
  
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
! 
! TAGS:  $(HEADERS) $(SOURCES) libgcj-config.h.in $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)libgcj-config.h.in$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags libgcj-config.h.in $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
! 
! subdir = gcj
  
  distdir: $(DISTFILES)
! 	here=`cd $(top_builddir) && pwd`; \
! 	top_distdir=`cd $(top_distdir) && pwd`; \
! 	distdir=`cd $(distdir) && pwd`; \
! 	cd $(top_srcdir) \
! 	  && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign gcj/Makefile
! 	@for file in $(DISTFILES); do \
! 	  d=$(srcdir); \
  	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
  	  else \
  	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
  	  fi; \
  	done
- info-am:
- info: info-am
- dvi-am:
- dvi: dvi-am
  check-am: all-am
  check: check-am
! installcheck-am:
! installcheck: installcheck-am
! all-recursive-am: libgcj-config.h
! 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
! 
! install-exec-am:
  install-exec: install-exec-am
- 
- install-data-am: install-gcjHEADERS install-toolgcjHEADERS
  install-data: install-data-am
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-am
- uninstall-am: uninstall-gcjHEADERS uninstall-toolgcjHEADERS
- uninstall: uninstall-am
- all-am: Makefile $(HEADERS) libgcj-config.h
- all-redirect: all-am
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs:
- 	$(mkinstalldirs)  $(DESTDIR)$(gcjdir) $(DESTDIR)$(toolgcjdir)
- 
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-hdr mostlyclean-tags mostlyclean-generic
  
! mostlyclean: mostlyclean-am
  
! clean-am:  clean-hdr clean-tags clean-generic mostlyclean-am
  
! clean: clean-am
  
! distclean-am:  distclean-hdr distclean-tags distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-am
  
! maintainer-clean-am:  maintainer-clean-hdr maintainer-clean-tags \
! 		maintainer-clean-generic distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
  maintainer-clean: maintainer-clean-am
  
! .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
! uninstall-gcjHEADERS install-gcjHEADERS uninstall-toolgcjHEADERS \
! install-toolgcjHEADERS tags mostlyclean-tags distclean-tags clean-tags \
! maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \
! installcheck-am installcheck all-recursive-am install-exec-am \
! install-exec install-data-am install-data install-am install \
! uninstall-am uninstall all-redirect all-am all installdirs \
! mostlyclean-generic distclean-generic clean-generic \
! maintainer-clean-generic clean mostlyclean distclean maintainer-clean
  
  
  # 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.
--- 150,569 ----
  LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
  LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
  LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
+ LIBGCJ_LD_SYMBOLIC = @LIBGCJ_LD_SYMBOLIC@
  LIBICONV = @LIBICONV@
  LIBLTDL = @LIBLTDL@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
! LTLIBICONV = @LTLIBICONV@
! LTLIBOBJS = @LTLIBOBJS@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
! NATIVE_FALSE = @NATIVE_FALSE@
! NATIVE_TRUE = @NATIVE_TRUE@
! NEEDS_DATA_START_FALSE = @NEEDS_DATA_START_FALSE@
! NEEDS_DATA_START_TRUE = @NEEDS_DATA_START_TRUE@
  OBJEXT = @OBJEXT@
+ ONESTEP_FALSE = @ONESTEP_FALSE@
+ ONESTEP_TRUE = @ONESTEP_TRUE@
  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@
  PERL = @PERL@
  PKG_CONFIG = @PKG_CONFIG@
! PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@
  RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
  STRIP = @STRIP@
+ SUPPLY_BACKTRACE_FALSE = @SUPPLY_BACKTRACE_FALSE@
+ SUPPLY_BACKTRACE_TRUE = @SUPPLY_BACKTRACE_TRUE@
  SYSDEP_SOURCES = @SYSDEP_SOURCES@
  SYSTEMSPEC = @SYSTEMSPEC@
  SYS_ZLIBS = @SYS_ZLIBS@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
  THREADCXXFLAGS = @THREADCXXFLAGS@
  THREADDEPS = @THREADDEPS@
  THREADINCS = @THREADINCS@
  THREADLDFLAGS = @THREADLDFLAGS@
  THREADLIBS = @THREADLIBS@
  THREADSPEC = @THREADSPEC@
  TOOLKIT = @TOOLKIT@
+ USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
+ 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@
+ USING_NOGC_TRUE = @USING_NOGC_TRUE@
+ USING_NO_THREADS_FALSE = @USING_NO_THREADS_FALSE@
+ USING_NO_THREADS_TRUE = @USING_NO_THREADS_TRUE@
+ USING_POSIX_PLATFORM_FALSE = @USING_POSIX_PLATFORM_FALSE@
+ USING_POSIX_PLATFORM_TRUE = @USING_POSIX_PLATFORM_TRUE@
+ USING_POSIX_THREADS_FALSE = @USING_POSIX_THREADS_FALSE@
+ USING_POSIX_THREADS_TRUE = @USING_POSIX_THREADS_TRUE@
+ USING_WIN32_PLATFORM_FALSE = @USING_WIN32_PLATFORM_FALSE@
+ USING_WIN32_PLATFORM_TRUE = @USING_WIN32_PLATFORM_TRUE@
+ USING_WIN32_THREADS_FALSE = @USING_WIN32_THREADS_FALSE@
+ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
  VERSION = @VERSION@
+ XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
+ XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
  ZINCS = @ZINCS@
+ ZIP = @ZIP@
  ZLIBS = @ZLIBS@
  ZLIBSPEC = @ZLIBSPEC@
  ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_GCJ = @ac_ct_GCJ@
+ 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__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
+ am__fastdepGCJ_TRUE = @am__fastdepGCJ_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@
+ 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@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
  libgcj_basedir = @libgcj_basedir@
+ libstdcxx_incdir = @libstdcxx_incdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
  mkinstalldirs = @mkinstalldirs@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ subdirs = @subdirs@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ 
+ # 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
! gcjdir = $(gxx_include_dir)/gcj
  gcj_HEADERS = array.h cni.h field.h javaprims.h method.h
  toolgcjdir = @tool_include_dir@/gcj
  toolgcj_HEADERS = libgcj-config.h
! all: libgcj-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) --foreign  gcj/Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  gcj/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
  
  libgcj-config.h: stamp-h2
  	@if test ! -f $@; then \
! 	  rm -f stamp-h2; \
! 	  $(MAKE) stamp-h2; \
  	else :; fi
+ 
  stamp-h2: $(srcdir)/libgcj-config.h.in $(top_builddir)/config.status
! 	@rm -f stamp-h2
! 	cd $(top_builddir) && $(SHELL) ./config.status gcj/libgcj-config.h
! $(srcdir)/libgcj-config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
  	cd $(top_srcdir) && $(AUTOHEADER)
! 	rm -f stamp-h2
! 	touch $@
  
  distclean-hdr:
! 	-rm -f libgcj-config.h stamp-h2
  
! mostlyclean-libtool:
! 	-rm -f *.lo
! 
! clean-libtool:
! 	-rm -rf .libs _libs
  
+ distclean-libtool:
+ 	-rm -f libtool
+ uninstall-info-am:
  install-gcjHEADERS: $(gcj_HEADERS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(gcjdir)" || $(mkdir_p) "$(DESTDIR)$(gcjdir)"
  	@list='$(gcj_HEADERS)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(gcjHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gcjdir)/$$f'"; \
! 	  $(gcjHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gcjdir)/$$f"; \
  	done
  
  uninstall-gcjHEADERS:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(gcj_HEADERS)'; for p in $$list; do \
! 	  f=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(gcjdir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(gcjdir)/$$f"; \
  	done
  install-toolgcjHEADERS: $(toolgcj_HEADERS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(toolgcjdir)" || $(mkdir_p) "$(DESTDIR)$(toolgcjdir)"
  	@list='$(toolgcj_HEADERS)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(toolgcjHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(toolgcjdir)/$$f'"; \
! 	  $(toolgcjHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(toolgcjdir)/$$f"; \
  	done
  
  uninstall-toolgcjHEADERS:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(toolgcj_HEADERS)'; for p in $$list; do \
! 	  f=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(toolgcjdir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(toolgcjdir)/$$f"; \
  	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:  $(HEADERS) $(SOURCES) libgcj-config.h.in $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
! 	tags=; \
! 	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) libgcj-config.h.in $(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:  $(HEADERS) $(SOURCES) libgcj-config.h.in $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) libgcj-config.h.in $(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
  check-am: all-am
  check: check-am
! all-am: Makefile $(HEADERS) libgcj-config.h
! installdirs:
! 	for dir in "$(DESTDIR)$(gcjdir)" "$(DESTDIR)$(toolgcjdir)"; do \
! 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
! 	done
! 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-hdr \
! 	distclean-libtool distclean-tags
  
! dvi: dvi-am
  
! dvi-am:
  
! html: html-am
  
! info: info-am
! 
! info-am:
! 
! install-data-am: install-gcjHEADERS install-toolgcjHEADERS
! 
! 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-gcjHEADERS uninstall-info-am \
+ 	uninstall-toolgcjHEADERS
+ 
+ .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ 	clean-libtool ctags distclean distclean-generic distclean-hdr \
+ 	distclean-libtool 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-gcjHEADERS install-info install-info-am install-man \
+ 	install-strip install-toolgcjHEADERS installcheck \
+ 	installcheck-am installdirs maintainer-clean \
+ 	maintainer-clean-generic mostlyclean mostlyclean-generic \
+ 	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+ 	uninstall-am uninstall-gcjHEADERS uninstall-info-am \
+ 	uninstall-toolgcjHEADERS
  
  # 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.
diff -Nrcpad gcc-3.4.3/libjava/gcj/cni.h gcc-4.0.0/libjava/gcj/cni.h
*** gcc-3.4.3/libjava/gcj/cni.h	Tue Jul  8 21:27:37 2003
--- gcc-4.0.0/libjava/gcj/cni.h	Sat Apr  2 02:30:39 2005
*************** details.  */
*** 17,39 ****
  #include <java/lang/Class.h>
  
  #include <gcj/array.h>
  
  #include <string.h>
  
- extern inline jobject
- JvAllocObject (jclass cls)
- {
-   return _Jv_AllocObject (cls, cls->size());
- }
- 
- extern inline jobject
- JvAllocObject (jclass cls, jsize sz)
- {
-   return _Jv_AllocObject (cls, sz);
- }
- 
- extern "C" jstring _Jv_NewStringUTF (const char *bytes);
  extern "C" void _Jv_InitClass (jclass);
  
  extern inline void
  JvInitClass (jclass cls)
--- 17,28 ----
  #include <java/lang/Class.h>
  
  #include <gcj/array.h>
+ #include <gcj/javaprims.h>
  
  #include <string.h>
  
  extern "C" void _Jv_InitClass (jclass);
+ extern "C" void *_Jv_AllocBytes (jsize size) __attribute__((__malloc__));
  
  extern inline void
  JvInitClass (jclass cls)
*************** JvInitClass (jclass cls)
*** 41,46 ****
--- 30,41 ----
    return _Jv_InitClass (cls);
  }
  
+ extern inline void *
+ JvAllocBytes (jsize sz)
+ {
+   return _Jv_AllocBytes (sz);
+ }
+ 
  extern inline jstring
  JvAllocString (jsize sz)
  {
*************** JvMalloc (jsize size)
*** 113,126 ****
    return _Jv_Malloc (size);
  }
  
  extern inline void
  JvFree (void *ptr)
  {
    return _Jv_Free (ptr);
  }
  
  extern inline jint
! JvCreateJavaVM (void* vm_args)
  {
    return _Jv_CreateJavaVM (vm_args);
  }
--- 108,130 ----
    return _Jv_Malloc (size);
  }
  
+ extern inline void *
+ JvRealloc (void *ptr, jsize size)
+ {
+   return _Jv_Realloc (ptr, size);
+ }
+ 
  extern inline void
  JvFree (void *ptr)
  {
    return _Jv_Free (ptr);
  }
  
+ typedef struct _Jv_VMOption JvVMOption;
+ typedef struct _Jv_VMInitArgs JvVMInitArgs;
+ 
  extern inline jint
! JvCreateJavaVM (JvVMInitArgs* vm_args)
  {
    return _Jv_CreateJavaVM (vm_args);
  }
diff -Nrcpad gcc-3.4.3/libjava/gcj/field.h gcc-4.0.0/libjava/gcj/field.h
*** gcc-3.4.3/libjava/gcj/field.h	Fri Oct  6 01:49:31 2000
--- gcc-4.0.0/libjava/gcj/field.h	Thu Nov 25 03:46:58 2004
***************
*** 1,6 ****
  // field.h - Header file for fieldID instances.  -*- c++ -*-
  
! /* Copyright (C) 1998, 1999, 2000  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // field.h - Header file for fieldID instances.  -*- c++ -*-
  
! /* Copyright (C) 1998, 1999, 2000, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 21,29 ****
  
  struct _Jv_Field
  {
- #ifndef COMPACT_FIELDS
    struct _Jv_Utf8Const*	name;
- #endif
  
    /* The type of the field, if isResolved().
       If !isResolved():  The fields's signature as a (Utf8Const*). */
--- 21,27 ----
*************** struct _Jv_Field
*** 31,45 ****
  
    _Jv_ushort		flags;
  
- #ifdef COMPACT_FIELDS
-   jshort		nameIndex;  /* offset in class's name table */
- #else
    _Jv_ushort		bsize;  /* not really needed ... */
- #endif
  
    union {
      jint		boffset;  /* offset in bytes for instance field */
!     void*		addr;  /* address of static field */
    } u;
  
  #ifdef __cplusplus
--- 29,48 ----
  
    _Jv_ushort		flags;
  
    _Jv_ushort		bsize;  /* not really needed ... */
  
    union {
      jint		boffset;  /* offset in bytes for instance field */
!     char*		addr;  /* address of static field */
!     
!     jobject* object_addr;  /* address of static object field... etc */
!     jbyte* byte_addr;
!     jshort* short_addr;
!     jchar* char_addr;
!     jint* int_addr;
!     jlong* long_addr;
!     jfloat* float_addr;
!     jdouble* double_addr;
    } u;
  
  #ifdef __cplusplus
*************** struct _Jv_Field
*** 59,65 ****
      { 
        if (!isResolved ()) 
  	{
! 	  char first = ((_Jv_Utf8Const*)type)->data[0]; 
  	  return first == '[' || first == 'L';
  	}
        else
--- 62,68 ----
      { 
        if (!isResolved ()) 
  	{
! 	  char first = ((_Jv_Utf8Const*)type)->first(); 
  	  return first == '[' || first == 'L';
  	}
        else
*************** struct _Jv_Field
*** 82,94 ****
      return flags & java::lang::reflect::Modifier::ALL_FLAGS;
    }
  
- #ifdef COMPACT_FIELDS
-   _Jv_Utf8Const * getNameUtf8Const (jclass cls)
-   { return clas->fieldNames + nameIndex; }
- #else
    _Jv_Utf8Const * getNameUtf8Const (jclass) { return name; }
  #endif
- #endif
  };
  
  #ifdef __cplusplus
--- 85,92 ----
diff -Nrcpad gcc-3.4.3/libjava/gcj/javaprims.h gcc-4.0.0/libjava/gcj/javaprims.h
*** gcc-3.4.3/libjava/gcj/javaprims.h	Tue Nov 25 18:26:08 2003
--- gcc-4.0.0/libjava/gcj/javaprims.h	Wed Feb 23 17:36:24 2005
***************
*** 1,6 ****
  // javaprims.h - Main external header file for libgcj.  -*- c++ -*-
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,8 ----
  // javaprims.h - Main external header file for libgcj.  -*- c++ -*-
  
! 
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
!    Free Software Foundation
  
     This file is part of libgcj.
  
*************** extern "Java"
*** 83,88 ****
--- 85,91 ----
        class LineNumberInputStream;
        class LineNumberReader;
        class MemberComparator;
+       class MyIOException;
        class NotActiveException;
        class NotSerializableException;
        class ObjectInput;
*************** extern "Java"
*** 150,155 ****
--- 153,160 ----
        class Comparable;
        class Compiler;
        class ConcreteProcess;
+       class ConcreteProcess$EOFInputStream;
+       class ConcreteProcess$ProcessManager;
        class Double;
        class Error;
        class Exception;
*************** extern "Java"
*** 211,216 ****
--- 216,222 ----
        class UnsupportedClassVersionError;
        class UnsupportedOperationException;
        class VMClassLoader;
+       class VMCompiler;
        class VMSecurityManager;
        class VMThrowable;
        class VerifyError;
*************** extern "Java"
*** 338,343 ****
--- 344,350 ----
        class RandomAccess;
        class RandomAccessSubList;
        class ResourceBundle;
+       class ResourceBundle$BundleKey;
        class Set;
        class SimpleTimeZone;
        class SortedMap;
*************** extern "Java"
*** 356,361 ****
--- 363,369 ----
        class TreeMap$SubMap;
        class TreeMap$TreeIterator;
        class TreeSet;
+       class VMTimeZone;
        class Vector;
        class WeakHashMap;
        class WeakHashMap$WeakBucket;
*************** struct _Jv_JNIEnv;
*** 450,466 ****
  typedef struct _Jv_Field *jfieldID;
  typedef struct _Jv_Method *jmethodID;
  
! extern "C" jobject _Jv_AllocObject (jclass, jint) __attribute__((__malloc__));
! extern "C" jobject _Jv_AllocObjectNoFinalizer (jclass, jint) __attribute__((__malloc__));
! extern "C" jobject _Jv_AllocObjectNoInitNoFinalizer (jclass, jint) __attribute__((__malloc__));
  #ifdef JV_HASH_SYNCHRONIZATION
!   extern "C" jobject _Jv_AllocPtrFreeObject (jclass, jint)
    			    __attribute__((__malloc__));
  #else
    // Collector still needs to scan sync_info
!   static inline jobject _Jv_AllocPtrFreeObject (jclass klass, jint sz)
    {
!     return _Jv_AllocObject(klass, sz);
    }
  #endif
  extern "C" jboolean _Jv_IsInstanceOf(jobject, jclass);
--- 458,474 ----
  typedef struct _Jv_Field *jfieldID;
  typedef struct _Jv_Method *jmethodID;
  
! extern "C" jobject _Jv_AllocObject (jclass) __attribute__((__malloc__));
! extern "C" jobject _Jv_AllocObjectNoFinalizer (jclass) __attribute__((__malloc__));
! extern "C" jobject _Jv_AllocObjectNoInitNoFinalizer (jclass) __attribute__((__malloc__));
  #ifdef JV_HASH_SYNCHRONIZATION
!   extern "C" jobject _Jv_AllocPtrFreeObject (jclass)
    			    __attribute__((__malloc__));
  #else
    // Collector still needs to scan sync_info
!   static inline jobject _Jv_AllocPtrFreeObject (jclass klass)
    {
!     return _Jv_AllocObject(klass);
    }
  #endif
  extern "C" jboolean _Jv_IsInstanceOf(jobject, jclass);
*************** extern jint _Jv_FormatInt (jchar* bufend
*** 471,482 ****
  extern "C" jchar* _Jv_GetStringChars (jstring str);
  extern "C" void _Jv_MonitorEnter (jobject);
  extern "C" void _Jv_MonitorExit (jobject);
  extern "C" jstring _Jv_NewStringLatin1(const char*, jsize)
    __attribute__((__malloc__));
  extern "C" jsize _Jv_GetStringUTFLength (jstring);
  extern "C" jsize _Jv_GetStringUTFRegion (jstring, jsize, jsize, char *);
  
! extern jint _Jv_CreateJavaVM (void* /*vm_args*/);
  
  void
  _Jv_ThreadRun (java::lang::Thread* thread);
--- 479,516 ----
  extern "C" jchar* _Jv_GetStringChars (jstring str);
  extern "C" void _Jv_MonitorEnter (jobject);
  extern "C" void _Jv_MonitorExit (jobject);
+ extern "C" jstring _Jv_NewStringUTF (const char *bytes)
+   __attribute__((__malloc__));
  extern "C" jstring _Jv_NewStringLatin1(const char*, jsize)
    __attribute__((__malloc__));
  extern "C" jsize _Jv_GetStringUTFLength (jstring);
  extern "C" jsize _Jv_GetStringUTFRegion (jstring, jsize, jsize, char *);
+ extern "C" jint _Jv_hashUtf8String (char*, int);
  
! struct _Jv_VMOption
! {
!   // a VM initialization option
!   char* optionString;
!   // extra information associated with this option
!   void* extraInfo;
! };
! 
! struct _Jv_VMInitArgs
! {
!   // for compatibility with JavaVMInitArgs
!   jint version;
! 
!   // number of VM initialization options
!   jint nOptions;
! 
!   // an array of VM initialization options
!   struct _Jv_VMOption* options;
! 
!   // true if the option parser should ignore unrecognized options
!   jboolean ignoreUnrecognized;
! };
! 
! extern jint _Jv_CreateJavaVM (struct _Jv_VMInitArgs*);
  
  void
  _Jv_ThreadRun (java::lang::Thread* thread);
*************** typedef unsigned short _Jv_ushort __attr
*** 499,509 ****
  typedef unsigned int _Jv_uint __attribute__((__mode__(__SI__)));
  typedef unsigned int _Jv_ulong __attribute__((__mode__(__DI__)));
  
! struct _Jv_Utf8Const
  {
    _Jv_ushort hash;
    _Jv_ushort length;	/* In bytes, of data portion, without final '\0'. */
    char data[1];		/* In Utf8 format, with final '\0'. */
  };
  
  
--- 533,572 ----
  typedef unsigned int _Jv_uint __attribute__((__mode__(__SI__)));
  typedef unsigned int _Jv_ulong __attribute__((__mode__(__DI__)));
  
! class _Jv_Utf8Const
  {
    _Jv_ushort hash;
    _Jv_ushort length;	/* In bytes, of data portion, without final '\0'. */
    char data[1];		/* In Utf8 format, with final '\0'. */
+  public:
+   /** Return same value of java.lang.String's hashCode. */
+   jint hash32() { return _Jv_hashUtf8String(data, length); }
+   /** Return a hash code that has at least 16 bits of information. */
+   _Jv_ushort hash16 () { return hash; }
+   /** Return a hash code that has at least 8 bits of information. */
+   _Jv_ushort hash8 () { return hash; }
+   /** Length in bytes of the UTF8-encoding. */
+   _Jv_ushort len () const { return length; }
+   /** Pointer to the first byte in the NUL-terminated UTF8-encoding. */
+   char* chars() { return data; }
+   /** Pointer to the NUL byte that terminated the UTF8-encoding. */
+   char* limit() { return data+length; }
+   /** Return the first byte in the UTF8-encoding. */
+   char first() const { return data[0]; }
+   /** Create a (non-interned) java.lang.String from this UTF8Const. */
+   jstring toString() { return _Jv_NewStringUTF(data); }
+   /** Given an UTF8 string, how many bytes needed for a UTF8Const,
+       including struct header, and final NUL.  I.e. what to pas to malloc. */
+   static int space_needed (char *, int len)
+   { return sizeof (_Jv_Utf8Const) + len + 1; }
+   /** Given an allocated _Jv_Utf8Const, copy / fill it in. */
+   void init (char *s, int len);
+   friend jboolean _Jv_equalUtf8Consts (const _Jv_Utf8Const*, const _Jv_Utf8Const *);
+   friend jboolean _Jv_equal (_Jv_Utf8Const*, jstring, jint);
+   friend jboolean _Jv_equaln (_Jv_Utf8Const*, jstring, jint);
+   friend _Jv_Utf8Const *_Jv_makeUtf8Const (char*, int);
+   friend _Jv_Utf8Const *_Jv_makeUtf8Const (jstring);
+   friend jstring _Jv_NewStringUtf8Const (_Jv_Utf8Const*);
  };
  
  
diff -Nrcpad gcc-3.4.3/libjava/gcj/method.h gcc-4.0.0/libjava/gcj/method.h
*** gcc-3.4.3/libjava/gcj/method.h	Tue Mar  7 19:55:24 2000
--- gcc-4.0.0/libjava/gcj/method.h	Tue Feb 22 03:13:31 2005
*************** details.  */
*** 12,17 ****
--- 12,19 ----
  #define __GCJ_METHOD_H__
  
  #include <java/lang/Class.h>
+ #include <java/lang/reflect/Constructor.h>
+ #include <java/lang/reflect/Method.h>
  
  extern inline jmethodID
  _Jv_FromReflectedMethod (java::lang::reflect::Method *method)
diff -Nrcpad gcc-3.4.3/libjava/gij.cc gcc-4.0.0/libjava/gij.cc
*** gcc-3.4.3/libjava/gij.cc	Wed Aug 13 17:20:08 2003
--- gcc-4.0.0/libjava/gij.cc	Sat Apr  2 02:30:39 2005
***************
*** 1,26 ****
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
! This software is copyrighted work licensed under the terms of the
! Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
! details.  */
! 
! /* Author: Kresten Krab Thorup <krab@gnu.org>  */
  
  #include <config.h>
  
  #include <jvm.h>
  #include <gcj/cni.h>
- #include <java-props.h>
  
  #include <stdio.h>
  #include <string.h>
  #include <stdlib.h>
  
- #include <java/lang/System.h>
- #include <java/util/Properties.h>
- 
  static void
  help ()
  {
--- 1,20 ----
! /* Copyright (C) 1999-2005  Free Software Foundation
  
     This file is part of libgcj.
  
!    This software is copyrighted work licensed under the terms of the
!    Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
!    details. */
  
  #include <config.h>
  
  #include <jvm.h>
  #include <gcj/cni.h>
  
  #include <stdio.h>
  #include <string.h>
  #include <stdlib.h>
  
  static void
  help ()
  {
*************** help ()
*** 35,40 ****
--- 29,35 ----
    printf ("  -X                print help on supported -X options, then exit\n");
    printf ("  --ms=NUMBER       set initial heap size\n");
    printf ("  --mx=NUMBER       set maximum heap size\n");
+   printf ("  --verbose[:class] print information about class loading\n");
    printf ("  --showversion     print version number, then keep going\n");
    printf ("  --version         print version number, then exit\n");
    printf ("\nOptions can be specified with `-' or `--'.\n");
*************** help ()
*** 45,147 ****
  static void
  version ()
  {
    printf ("gij (GNU libgcj) version %s\n\n", __VERSION__);
!   printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n");
    printf ("This is free software; see the source for copying conditions.  There is NO\n");
    printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
  }
  
  int
! main (int argc, const char **argv)
  {
!   /* We rearrange ARGV so that all the -D options appear near the
!      beginning.  */
!   int last_D_option = 0;
    bool jar_mode = false;
  
    int i;
    for (i = 1; i < argc; ++i)
      {
!       const char *arg = argv[i];
  
!       /* A non-option stops processing.  */
        if (arg[0] != '-')
  	break;
!       /* A "--" stops processing.  */
        if (! strcmp (arg, "--"))
  	{
  	  ++i;
  	  break;
  	}
  
!       if (! strncmp (arg, "-D", 2))
! 	{
! 	  argv[last_D_option++] = arg + 2;
! 	  continue;
! 	}
! 
!       if (! strcmp (arg, "-jar"))
! 	{
! 	  jar_mode = true;
! 	  continue;
! 	}
! 
!       /* Allow both single or double hyphen for all remaining
! 	 options.  */
        if (arg[1] == '-')
  	++arg;
  
!       if (! strcmp (arg, "-help") || ! strcmp (arg, "-?"))
! 	help ();
!       else if (! strcmp (arg, "-version"))
! 	{
! 	  version ();
! 	  exit (0);
! 	}
!       else if (! strcmp (arg, "-showversion"))
! 	version ();
!       /* FIXME: use getopt and avoid the ugliness here.
! 	 We at least need to handle the argument in a better way.  */
!       else if (! strncmp (arg, "-ms=", 4))
! 	_Jv_SetInitialHeapSize (arg + 4);
!       else if (! strcmp (arg, "-ms"))
! 	{
! 	  if (i >= argc - 1)
! 	    {
  	    no_arg:
  	      fprintf (stderr, "gij: option requires an argument -- `%s'\n",
  		       argv[i]);
  	      fprintf (stderr, "Try `gij --help' for more information.\n");
  	      exit (1);
! 	    }
! 	  _Jv_SetInitialHeapSize (argv[++i]);
  	}
!       else if (! strncmp (arg, "-mx=", 4))
! 	_Jv_SetMaximumHeapSize (arg + 4);
        else if (! strcmp (arg, "-mx"))
  	{
  	  if (i >= argc - 1)
! 	    goto no_arg;
! 	  _Jv_SetMaximumHeapSize (argv[++i]);
  	}
!       else if (! strcmp (arg, "-cp") || ! strcmp (arg, "-classpath"))
  	{
  	  if (i >= argc - 1)
! 	    goto no_arg;
! 	  // We set _Jv_Jar_Class_Path.  If the user specified `-jar'
! 	  // then the jar code will override this.  This is the
! 	  // correct behavior.
! 	  _Jv_Jar_Class_Path = argv[++i];
  	}
!       else if (arg[1] == 'X')
  	{
! 	  if (arg[2] == '\0')
! 	    {
! 	      printf ("gij: currently no -X options are recognized\n");
! 	      exit (0);
! 	    }
! 	  /* Ignore other -X options.  */
  	}
        else
  	{
  	  fprintf (stderr, "gij: unrecognized option -- `%s'\n", argv[i]);
--- 40,301 ----
  static void
  version ()
  {
+   printf ("java version " JV_VERSION "\n");
    printf ("gij (GNU libgcj) version %s\n\n", __VERSION__);
!   printf ("Copyright (C) 2005 Free Software Foundation, Inc.\n");
    printf ("This is free software; see the source for copying conditions.  There is NO\n");
    printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
  }
  
+ static void
+ nonstandard_opts_help ()
+ {
+   printf ("  -Xms<size>         set initial heap size\n");
+   printf ("  -Xmx<size>         set maximum heap size\n");
+   exit (0);
+ }
+ 
+ static void
+ add_option (JvVMInitArgs& vm_args, char const* option, void const* extra)
+ {
+   vm_args.options =
+     (JvVMOption*) JvRealloc (vm_args.options,
+                              (vm_args.nOptions + 1) * sizeof (JvVMOption));
+ 
+   vm_args.options[vm_args.nOptions].optionString = const_cast<char*> (option);
+   vm_args.options[vm_args.nOptions].extraInfo = const_cast<void*> (extra);
+   ++vm_args.nOptions;
+ }
+ 
  int
! main (int argc, char const** argv)
  {
!   JvVMInitArgs vm_args;
    bool jar_mode = false;
  
+   vm_args.options = NULL;
+   vm_args.nOptions = 0;
+   vm_args.ignoreUnrecognized = true;
+ 
+   // Command-line options always override the CLASSPATH environment
+   // variable.
+   char *classpath = getenv("CLASSPATH");
+ 
+   if (classpath)
+     {
+       char* darg = (char*) JvMalloc (strlen (classpath)
+                                      + sizeof ("-Djava.class.path="));
+       sprintf (darg, "-Djava.class.path=%s", classpath);
+       add_option (vm_args, darg, NULL);
+     }
+ 
+   // Handle arguments to the java command.  Store in vm_args arguments
+   // handled by the invocation API.
    int i;
    for (i = 1; i < argc; ++i)
      {
!       char* arg = const_cast<char*> (argv[i]);
  
!       // A non-option stops processing.
        if (arg[0] != '-')
  	break;
! 
!       // A "--" stops processing.
        if (! strcmp (arg, "--"))
  	{
  	  ++i;
  	  break;
  	}
  
!       // Allow both single or double hyphen for all options.
        if (arg[1] == '-')
  	++arg;
  
!       // Ignore JIT options
!       if (! strcmp (arg, "-client"))
!         continue;
!       else if (! strcmp (arg, "-server"))
!         continue;
!       else if (! strcmp (arg, "-hotspot"))
!         continue;
!       else if (! strcmp (arg, "-jrockit"))
!         continue;
!       // Ignore JVM Tool Interface options
!       else if (! strncmp (arg, "-agentlib:", sizeof ("-agentlib:") - 1))
!         continue;
!       else if (! strncmp (arg, "-agentpath:", sizeof ("-agentpath:") - 1))
!         continue;
!       else if (! strcmp (arg, "-classpath") || ! strcmp (arg, "-cp"))
!         {
!           if (i >= argc - 1)
!             {
  	    no_arg:
  	      fprintf (stderr, "gij: option requires an argument -- `%s'\n",
  		       argv[i]);
  	      fprintf (stderr, "Try `gij --help' for more information.\n");
  	      exit (1);
!             }
! 
!           // Sun seems to translate the -classpath option into
!           // -Djava.class.path because if both -classpath and
!           // -Djava.class.path are specified on the java command line,
!           // the last one always wins.
!           char* darg = (char*) JvMalloc (strlen (argv[++i])
!                                          + sizeof ("-Djava.class.path="));
!           sprintf (darg, "-Djava.class.path=%s", argv[i]);
!           add_option (vm_args, darg, NULL);
!         }
!       else if (! strcmp (arg, "-debug"))
!         {
!           char* xarg = strdup ("-Xdebug");
!           add_option (vm_args, xarg, NULL);
!         }
!       else if (! strncmp (arg, "-D", sizeof ("-D") - 1))
!         add_option (vm_args, arg, NULL);
!       // Ignore 32/64-bit JIT options
!       else if (! strcmp (arg, "-d32") || ! strcmp (arg, "-d64"))
!         continue;
!       else if (! strcmp (arg, "-enableassertions") || ! strcmp (arg, "-ea"))
!         {
!           if (i >= argc - 1)
!             goto no_arg;
!           // FIXME: hook up assertion support
!           ++i;
!           continue;
!         }
!       else if (! strcmp (arg, "-disableassertions") || ! strcmp (arg, "-da"))
!         {
!           if (i >= argc - 1)
!             goto no_arg;
!           // FIXME
!           ++i;
!           continue;
!         }
!       else if (! strcmp (arg, "-enablesystemassertions")
!                || ! strcmp (arg, "-esa"))
!         {
!           // FIXME: hook up system assertion support
!           continue;
!         }
!       else if (! strcmp (arg, "-disablesystemassertions")
!                || ! strcmp (arg, "-dsa"))
!         {
!           // FIXME
!           continue;
!         }
!       else if (! strcmp (arg, "-jar"))
! 	{
! 	  jar_mode = true;
! 	  continue;
  	}
!       // Ignore java.lang.instrument option
!       else if (! strncmp (arg, "-javaagent:", sizeof ("-javaagent:") - 1))
!         continue;
!       else if (! strcmp (arg, "-noclassgc"))
!         {
!           char* xarg = strdup ("-Xnoclassgc");
!           add_option (vm_args, xarg, NULL);
!         }
!       // -ms=n
!       else if (! strncmp (arg, "-ms=", sizeof ("-ms=") - 1))
!         {
!           arg[1] = 'X';
!           arg[2] = 'm';
!           arg[3] = 's';
!           add_option (vm_args, arg, NULL);
!         }
!       // -ms n
!       else if (! strcmp (arg, "-ms"))
! 	{
! 	  if (i >= argc - 1)
!             goto no_arg;
! 
!           char* xarg = (char*) JvMalloc (strlen (argv[++i])
!                                          + sizeof ("-Xms"));
!           sprintf (xarg, "-Xms%s", argv[i]);
!           add_option (vm_args, xarg, NULL);
! 	}
!       // -msn
!       else if (! strncmp (arg, "-ms", sizeof ("-ms") - 1))
! 	{
!           char* xarg = (char*) JvMalloc (strlen (arg) + sizeof ("X"));
!           sprintf (xarg, "-Xms%s", arg + sizeof ("-Xms") - 1);
!           add_option (vm_args, xarg, NULL);
! 	}
!       // -mx=n
!       else if (! strncmp (arg, "-mx=", sizeof ("-mx=") - 1))
!         {
!           arg[1] = 'X';
!           arg[2] = 'm';
!           arg[3] = 'x';
!           add_option (vm_args, arg, NULL);
!         }
!       // -mx n
        else if (! strcmp (arg, "-mx"))
  	{
  	  if (i >= argc - 1)
!             goto no_arg;
! 
!           char* xarg = (char*) JvMalloc (strlen (argv[++i])
!                                          + sizeof ("-Xmx"));
!           sprintf (xarg, "-Xmx%s", argv[i]);
!           add_option (vm_args, xarg, NULL);
  	}
!       // -mxn
!       else if (! strncmp (arg, "-mx", sizeof ("-mx") - 1))
! 	{
!           char* xarg = (char*) JvMalloc (strlen (arg) + sizeof ("X"));
!           sprintf (xarg, "-Xmx%s", arg + sizeof ("-Xmx") - 1);
!           add_option (vm_args, xarg, NULL);
! 	}
!       // -ss=n
!       else if (! strncmp (arg, "-ss=", sizeof ("-ss=") - 1))
!         {
!           arg[1] = 'X';
!           arg[2] = 's';
!           arg[3] = 's';
!           add_option (vm_args, arg, NULL);
!         }
!       // -ss n
!       else if (! strcmp (arg, "-ss"))
  	{
  	  if (i >= argc - 1)
!             goto no_arg;
! 
!           char* xarg = (char*) JvMalloc (strlen (argv[++i])
!                                          + sizeof ("-Xss"));
!           sprintf (xarg, "-Xss%s", argv[i]);
!           add_option (vm_args, xarg, NULL);
  	}
!       // -ssn
!       else if (! strncmp (arg, "-ss", sizeof ("-ss") - 1))
  	{
!           char* xarg = (char*) JvMalloc (strlen (arg) + sizeof ("X"));
!           sprintf (xarg, "-Xss%s", arg + sizeof ("-Xss") - 1);
!           add_option (vm_args, xarg, NULL);
  	}
+       // This handles all the option variants that begin with
+       // -verbose.
+       else if (! strncmp (arg, "-verbose", 8))
+         add_option (vm_args, arg, NULL);
+       else if (! strcmp (arg, "-version"))
+ 	{
+ 	  version ();
+ 	  exit (0);
+ 	}
+       else if (! strcmp (arg, "-fullversion"))
+         {
+           printf ("java full version \"gcj-" JV_VERSION "\"\n");
+           exit (0);
+         }
+       else if (! strcmp (arg, "-showversion"))
+         version ();
+       else if (! strcmp (arg, "-help") || ! strcmp (arg, "-?"))
+ 	help ();
+       else if (! strcmp (arg, "-X"))
+         nonstandard_opts_help ();
+       else if (! strncmp (arg, "-X", 2))
+         add_option (vm_args, arg, NULL);
        else
  	{
  	  fprintf (stderr, "gij: unrecognized option -- `%s'\n", argv[i]);
*************** main (int argc, const char **argv)
*** 150,158 ****
  	}
      }
  
-   argv[last_D_option] = NULL;
-   _Jv_Compiler_Properties = argv;
- 
    if (argc - i < 1)
      {
        fprintf (stderr, "Usage: gij [OPTION] ... CLASS [ARGS] ...\n");
--- 304,309 ----
*************** main (int argc, const char **argv)
*** 163,167 ****
        exit (1);
      }
  
!   _Jv_RunMain (NULL, argv[i], argc - i, argv + i, jar_mode);
  }
--- 314,329 ----
        exit (1);
      }
  
!   // -jar mode overrides all other modes of specifying class path:
!   // -CLASSPATH, -Djava.class.path, -classpath and -cp.
!   if (jar_mode)
!     {
!       char* darg = (char*) JvMalloc (strlen (argv[i])
!                                       + sizeof ("-Djava.class.path="));
!       sprintf (darg, "-Djava.class.path=%s", argv[i]);
!       add_option (vm_args, darg, NULL);
!     }
! 
!   _Jv_RunMain (&vm_args, NULL, argv[i], argc - i,
!                (char const**) (argv + i), jar_mode);
  }
diff -Nrcpad gcc-3.4.3/libjava/glib-2.0.m4 gcc-4.0.0/libjava/glib-2.0.m4
*** gcc-3.4.3/libjava/glib-2.0.m4	Mon Jun 30 23:53:28 2003
--- gcc-4.0.0/libjava/glib-2.0.m4	Thu Jan  1 00:00:00 1970
***************
*** 1,212 ****
- # Configure paths for GLIB
- # Owen Taylor     1997-2001
- 
- dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
- dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or 
- dnl gthread is specified in MODULES, pass to pkg-config
- dnl
- AC_DEFUN(AM_PATH_GLIB_2_0,
- [dnl 
- dnl Get the cflags and libraries from pkg-config
- dnl
- AC_ARG_ENABLE(glibtest, [  --disable-glibtest      do not try to compile and run a test GLIB program],
- 		    , enable_glibtest=yes)
- 
-   pkg_config_args=glib-2.0
-   for module in . $4
-   do
-       case "$module" in
-          gmodule) 
-              pkg_config_args="$pkg_config_args gmodule-2.0"
-          ;;
-          gobject) 
-              pkg_config_args="$pkg_config_args gobject-2.0"
-          ;;
-          gthread) 
-              pkg_config_args="$pkg_config_args gthread-2.0"
-          ;;
-       esac
-   done
- 
-   AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
- 
-   no_glib=""
- 
-   if test x$PKG_CONFIG != xno ; then
-     if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
-       :
-     else
-       echo *** pkg-config too old; version 0.7 or better required.
-       no_glib=yes
-       PKG_CONFIG=no
-     fi
-   else
-     no_glib=yes
-   fi
- 
-   min_glib_version=ifelse([$1], ,2.0.0,$1)
-   AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
- 
-   if test x$PKG_CONFIG != xno ; then
-     ## don't try to run the test against uninstalled libtool libs
-     if $PKG_CONFIG --uninstalled $pkg_config_args; then
- 	  echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
- 	  enable_glibtest=no
-     fi
- 
-     if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
- 	  :
-     else
- 	  no_glib=yes
-     fi
-   fi
- 
-   if test x"$no_glib" = x ; then
-     GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
-     GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
-     GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
- 
-     GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
-     GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
-     glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
-            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-     glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
-            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-     glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
-            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-     if test "x$enable_glibtest" = "xyes" ; then
-       ac_save_CFLAGS="$CFLAGS"
-       ac_save_LIBS="$LIBS"
-       CFLAGS="$CFLAGS $GLIB_CFLAGS"
-       LIBS="$GLIB_LIBS $LIBS"
- dnl
- dnl Now check if the installed GLIB is sufficiently new. (Also sanity
- dnl checks the results of pkg-config to some extent)
- dnl
-       rm -f conf.glibtest
-       AC_TRY_RUN([
- #include <glib.h>
- #include <stdio.h>
- #include <stdlib.h>
- 
- int 
- main ()
- {
-   int major, minor, micro;
-   char *tmp_version;
- 
-   system ("touch conf.glibtest");
- 
-   /* HP/UX 9 (%@#!) writes to sscanf strings */
-   tmp_version = g_strdup("$min_glib_version");
-   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-      printf("%s, bad version string\n", "$min_glib_version");
-      exit(1);
-    }
- 
-   if ((glib_major_version != $glib_config_major_version) ||
-       (glib_minor_version != $glib_config_minor_version) ||
-       (glib_micro_version != $glib_config_micro_version))
-     {
-       printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
-              $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
-              glib_major_version, glib_minor_version, glib_micro_version);
-       printf ("*** was found! If pkg-config was correct, then it is best\n");
-       printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
-       printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
-       printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
-       printf("*** required on your system.\n");
-       printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
-       printf("*** to point to the correct configuration files\n");
-     } 
-   else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
- 	   (glib_minor_version != GLIB_MINOR_VERSION) ||
-            (glib_micro_version != GLIB_MICRO_VERSION))
-     {
-       printf("*** GLIB header files (version %d.%d.%d) do not match\n",
- 	     GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
-       printf("*** library (version %d.%d.%d)\n",
- 	     glib_major_version, glib_minor_version, glib_micro_version);
-     }
-   else
-     {
-       if ((glib_major_version > major) ||
-         ((glib_major_version == major) && (glib_minor_version > minor)) ||
-         ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
-       {
-         return 0;
-        }
-      else
-       {
-         printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
-                glib_major_version, glib_minor_version, glib_micro_version);
-         printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
- 	       major, minor, micro);
-         printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
-         printf("***\n");
-         printf("*** If you have already installed a sufficiently new version, this error\n");
-         printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
-         printf("*** being found. The easiest way to fix this is to remove the old version\n");
-         printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
-         printf("*** correct copy of pkg-config. (In this case, you will have to\n");
-         printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
-         printf("*** so that the correct libraries are found at run-time))\n");
-       }
-     }
-   return 1;
- }
- ],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-        CFLAGS="$ac_save_CFLAGS"
-        LIBS="$ac_save_LIBS"
-      fi
-   fi
-   if test "x$no_glib" = x ; then
-      AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
-      ifelse([$2], , :, [$2])     
-   else
-      AC_MSG_RESULT(no)
-      if test "$PKG_CONFIG" = "no" ; then
-        echo "*** A new enough version of pkg-config was not found."
-        echo "*** See http://www.freedesktop.org/software/pkgconfig/"
-      else
-        if test -f conf.glibtest ; then
-         :
-        else
-           echo "*** Could not run GLIB test program, checking why..."
-           ac_save_CFLAGS="$CFLAGS"
-           ac_save_LIBS="$LIBS"
-           CFLAGS="$CFLAGS $GLIB_CFLAGS"
-           LIBS="$LIBS $GLIB_LIBS"
-           AC_TRY_LINK([
- #include <glib.h>
- #include <stdio.h>
- ],      [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
-         [ echo "*** The test program compiled, but did not run. This usually means"
-           echo "*** that the run-time linker is not finding GLIB or finding the wrong"
-           echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
-           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-           echo "*** is required on your system"
- 	  echo "***"
-           echo "*** If you have an old version installed, it is best to remove it, although"
-           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
-         [ echo "*** The test program failed to compile or link. See the file config.log for the"
-           echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
-           CFLAGS="$ac_save_CFLAGS"
-           LIBS="$ac_save_LIBS"
-        fi
-      fi
-      GLIB_CFLAGS=""
-      GLIB_LIBS=""
-      GLIB_GENMARSHAL=""
-      GOBJECT_QUERY=""
-      GLIB_MKENUMS=""
-      ifelse([$3], , :, [$3])
-   fi
-   AC_SUBST(GLIB_CFLAGS)
-   AC_SUBST(GLIB_LIBS)
-   AC_SUBST(GLIB_GENMARSHAL)
-   AC_SUBST(GOBJECT_QUERY)
-   AC_SUBST(GLIB_MKENUMS)
-   rm -f conf.glibtest
- ])
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/awt/LightweightRedirector.java gcc-4.0.0/libjava/gnu/awt/LightweightRedirector.java
*** gcc-3.4.3/libjava/gnu/awt/LightweightRedirector.java	Sun Oct 22 17:46:08 2000
--- gcc-4.0.0/libjava/gnu/awt/LightweightRedirector.java	Thu Sep  2 05:10:05 2004
*************** public class LightweightRedirector
*** 141,147 ****
      
      MouseEvent redirected = new MouseEvent(source, event.getID(),
  					   event.getWhen(),
! 					   event.getModifiers(),
  					   x, y,
  					   event.getClickCount(),
  					   event.isPopupTrigger());
--- 141,147 ----
      
      MouseEvent redirected = new MouseEvent(source, event.getID(),
  					   event.getWhen(),
! 					   event.getModifiersEx(),
  					   x, y,
  					   event.getClickCount(),
  					   event.isPopupTrigger());
*************** public class LightweightRedirector
*** 157,176 ****
     */
    int getButtonNumber(InputEvent event)
    {
!     int modifiers = event.getModifiers();
      
      modifiers &=
!       InputEvent.BUTTON1_MASK |
!       InputEvent.BUTTON2_MASK |
!       InputEvent.BUTTON3_MASK;
      
      switch (modifiers)
        {
!       case InputEvent.BUTTON1_MASK:
  	return 1;
!       case InputEvent.BUTTON2_MASK:
  	return 2;
!       case InputEvent.BUTTON3_MASK:
  	return 3;
        case 0:
  	return 0;
--- 157,176 ----
     */
    int getButtonNumber(InputEvent event)
    {
!     int modifiers = event.getModifiersEx();
      
      modifiers &=
!       InputEvent.BUTTON1_DOWN_MASK |
!       InputEvent.BUTTON2_DOWN_MASK |
!       InputEvent.BUTTON3_DOWN_MASK;
      
      switch (modifiers)
        {
!       case InputEvent.BUTTON1_DOWN_MASK:
  	return 1;
!       case InputEvent.BUTTON2_DOWN_MASK:
  	return 2;
!       case InputEvent.BUTTON3_DOWN_MASK:
  	return 3;
        case 0:
  	return 0;
diff -Nrcpad gcc-3.4.3/libjava/gnu/awt/xlib/XCanvasPeer.java gcc-4.0.0/libjava/gnu/awt/xlib/XCanvasPeer.java
*** gcc-3.4.3/libjava/gnu/awt/xlib/XCanvasPeer.java	Mon Aug 25 19:02:28 2003
--- gcc-4.0.0/libjava/gnu/awt/xlib/XCanvasPeer.java	Mon Jul 12 16:26:07 2004
*************** public class XCanvasPeer implements Canv
*** 210,220 ****
    }
    public Image createImage(ImageProducer prod)
    {
!     throw new UnsupportedOperationException("FIXME, not implemented");
    }
    public Image createImage(int width, int height)
    {
!     return new XOffScreenImage (config, window, width, height);
    }
    public void dispose()
    {
--- 210,220 ----
    }
    public Image createImage(ImageProducer prod)
    {
!     return new XOffScreenImage (config, window, prod, config.getColorModel());
    }
    public Image createImage(int width, int height)
    {
!     return new XOffScreenImage (config, window, width, height, config.getColorModel());
    }
    public void dispose()
    {
*************** public class XCanvasPeer implements Canv
*** 279,284 ****
--- 279,310 ----
  
    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)
+             component.paint (g);
+           else
+             component.update (g);
+           
+           g.dispose ();
+         }
+         catch (InternalError e)
+         {
+           System.err.println (e);
+         }
+       }
+       break;
+     }
    }
  
    public boolean isFocusTraversable()
*************** public class XCanvasPeer implements Canv
*** 398,404 ****
        }
      else
        {
! 	throw new UnsupportedOperationException("unmap not implemented");
        }
    }
  	
--- 424,431 ----
        }
      else
        {
! 	window.unmap();
! 	ensureFlush();	    
        }
    }
  	
diff -Nrcpad gcc-3.4.3/libjava/gnu/awt/xlib/XEventLoop.java gcc-4.0.0/libjava/gnu/awt/xlib/XEventLoop.java
*** gcc-3.4.3/libjava/gnu/awt/xlib/XEventLoop.java	Mon Aug 25 19:02:28 2003
--- gcc-4.0.0/libjava/gnu/awt/xlib/XEventLoop.java	Wed Feb 16 20:01:08 2005
*************** import java.awt.event.InputEvent;
*** 21,32 ****
  import java.awt.event.MouseEvent;
  import java.util.Vector;
  
! public class XEventLoop implements Runnable
  {
    Display display;
    EventQueue queue;
    XAnyEvent anyEvent;
-   Thread eventLoopThread;
  
    LightweightRedirector lightweightRedirector = new LightweightRedirector();
      
--- 21,31 ----
  import java.awt.event.MouseEvent;
  import java.util.Vector;
  
! public class XEventLoop
  {
    Display display;
    EventQueue queue;
    XAnyEvent anyEvent;
  
    LightweightRedirector lightweightRedirector = new LightweightRedirector();
      
*************** public class XEventLoop implements Runna
*** 36,79 ****
      this.queue = queue;
      
      anyEvent = new XAnyEvent(display);
-     eventLoopThread = new Thread(this, "AWT thread for XEventLoop");
-     eventLoopThread.start();
    }
  
!   public void run()
    {
!     while (true) 
!       postNextEvent();
    }
  
!   void postNextEvent()
    {
!     AWTEvent evt = getNextEvent();
!     queue.postEvent(evt);
    }
      
    /** get next event. Will block until events become available. */
   
!   public AWTEvent getNextEvent()
    {
      // ASSERT:
      if (isIdle())
        throw new Error("should not be idle");
      
      AWTEvent event = null;
!     while (event == null)
        {
! 	loadNextEvent();
! 	event = createEvent();
!       }
! 
!     event = lightweightRedirector.redirect(event);
! 
      return event;
    }
  
!   void loadNextEvent()
    {
      try
        {
  	setIdle(true);
--- 35,74 ----
      this.queue = queue;
      
      anyEvent = new XAnyEvent(display);
    }
  
!   void interrupt()
    {
!     anyEvent.interrupt();
    }
  
!   void postNextEvent(boolean block)
    {
!     AWTEvent evt = getNextEvent(block);
!     if (evt != null)
!       queue.postEvent(evt);
    }
      
    /** get next event. Will block until events become available. */
   
!   public AWTEvent getNextEvent(boolean block)
    {
      // ASSERT:
      if (isIdle())
        throw new Error("should not be idle");
      
      AWTEvent event = null;
!     if (loadNextEvent(block))
        {
!         event = createEvent();        
!         event = lightweightRedirector.redirect(event);
!       }    
      return event;
    }
  
!   boolean loadNextEvent(boolean block)
    {
+     boolean gotEvent = false;
      try
        {
  	setIdle(true);
*************** public class XEventLoop implements Runna
*** 100,106 ****
  	   of events. */
  	
  	//display.flush(); // implicit?
! 	anyEvent.loadNext();
        }
      catch (RuntimeException re)
        {
--- 95,101 ----
  	   of events. */
  	
  	//display.flush(); // implicit?
! 	gotEvent = anyEvent.loadNext(block);
        }
      catch (RuntimeException re)
        {
*************** public class XEventLoop implements Runna
*** 110,115 ****
--- 105,111 ----
        {
  	setIdle(false);
        }
+     return gotEvent;
    }
      
    /**
*************** public class XEventLoop implements Runna
*** 197,209 ****
      switch (buttonEvt.button)
        {
        case 1:
! 	modifiers = InputEvent.BUTTON1_MASK;
  	break;
        case 2:
! 	modifiers = InputEvent.BUTTON2_MASK;
  	break;
        case 3:
! 	modifiers = InputEvent.BUTTON2_MASK;
  	break;
        }
      
--- 193,205 ----
      switch (buttonEvt.button)
        {
        case 1:
! 	modifiers = InputEvent.BUTTON1_DOWN_MASK;
  	break;
        case 2:
! 	modifiers = InputEvent.BUTTON2_DOWN_MASK;
  	break;
        case 3:
! 	modifiers = InputEvent.BUTTON2_DOWN_MASK;
  	break;
        }
      
diff -Nrcpad gcc-3.4.3/libjava/gnu/awt/xlib/XFontPeer.java gcc-4.0.0/libjava/gnu/awt/xlib/XFontPeer.java
*** gcc-3.4.3/libjava/gnu/awt/xlib/XFontPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/awt/xlib/XFontPeer.java	Thu Jan 29 19:28:26 2004
***************
*** 0 ****
--- 1,277 ----
+ /* Copyright (C) 2000, 2002, 2003  Free Software Foundation
+  
+    This file is part of libgcj.
+  
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ package gnu.awt.xlib;
+ 
+ import java.awt.*;
+ import gnu.java.awt.ClasspathToolkit;
+ import gnu.java.awt.peer.ClasspathFontPeer;
+ import java.util.Locale;
+ import java.awt.font.*;
+ import java.awt.geom.*;
+ import java.text.CharacterIterator;
+ 
+ /**
+  * Classpath-compatible peer for a font
+  */
+ public class XFontPeer extends ClasspathFontPeer
+ {
+   public XFontPeer (String name, int style)
+   {
+     this (name, style, 12 /* kludge */);
+   }
+   
+   public XFontPeer (String name, int style, float size)
+   {
+     super (name, style, (int)size);
+   }
+   
+   /**
+    * 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 boolean canDisplay (Font font, char c)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 int canDisplayUpTo (Font font, CharacterIterator i, int start, int limit)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 GlyphVector createGlyphVector (Font font, FontRenderContext frc, CharacterIterator ci)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 GlyphVector createGlyphVector (Font font, FontRenderContext ctx, int[] glyphCodes)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 byte getBaselineFor (Font font, char c)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 FontMetrics getFontMetrics (Font font)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /** 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 String getGlyphName (Font font, int glyphIndex)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 LineMetrics getLineMetrics (Font font, CharacterIterator ci, int begin, int limit, FontRenderContext rc)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 Rectangle2D getMaxCharBounds (Font font, FontRenderContext rc)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 int getMissingGlyphCode (Font font)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 int getNumGlyphs (Font font)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 String getPostScriptName (Font font)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 Rectangle2D getStringBounds (Font font, CharacterIterator ci, int begin, int limit, FontRenderContext frc)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /** 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 String getSubFamilyName (Font font, Locale locale)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 boolean hasUniformLineMetrics (Font font)
+   {
+     throw new UnsupportedOperationException ();
+   }
+   
+   /**
+    * 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 GlyphVector layoutGlyphVector (Font font, FontRenderContext frc, char[] chars, int start, int limit, int flags)
+   {
+     throw new UnsupportedOperationException ();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/awt/xlib/XFramePeer.java gcc-4.0.0/libjava/gnu/awt/xlib/XFramePeer.java
*** gcc-3.4.3/libjava/gnu/awt/xlib/XFramePeer.java	Sat Mar  1 22:14:20 2003
--- gcc-4.0.0/libjava/gnu/awt/xlib/XFramePeer.java	Wed Feb 16 20:01:08 2005
*************** public class XFramePeer extends XCanvasP
*** 78,84 ****
       bounds.  */
    public void setBounds(int x, int y, int width, int height)
    {
!     if (Thread.currentThread() == getXToolkit().eventLoop.eventLoopThread)
        return;
      
      super.setBounds(x, y, width, height);
--- 78,84 ----
       bounds.  */
    public void setBounds(int x, int y, int width, int height)
    {
!     if (EventQueue.isDispatchThread())
        return;
      
      super.setBounds(x, y, width, height);
diff -Nrcpad gcc-3.4.3/libjava/gnu/awt/xlib/XGraphics.java gcc-4.0.0/libjava/gnu/awt/xlib/XGraphics.java
*** gcc-3.4.3/libjava/gnu/awt/xlib/XGraphics.java	Mon Aug 25 19:02:28 2003
--- gcc-4.0.0/libjava/gnu/awt/xlib/XGraphics.java	Fri May 14 22:17:44 2004
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,4 ----
! /* Copyright (C) 2000, 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** public class XGraphics implements Clonea
*** 98,107 ****
      
    public void setFont(Font font)
    {
!     if ((metrics != null) && font.equals(metrics.getFont())) return;
! 
      metrics = config.getXFontMetrics(font);
!     context.setFont(metrics.xfont);
    }
      
    public FontMetrics getFontMetrics(Font font)
--- 98,110 ----
      
    public void setFont(Font font)
    {
!     if (font == null)
!       return;
!     if ((metrics != null) && font.equals(metrics.getFont()))
!       return;
      metrics = config.getXFontMetrics(font);
!     if (metrics != null)
!       context.setFont(metrics.xfont);
    }
      
    public FontMetrics getFontMetrics(Font font)
*************** public class XGraphics implements Clonea
*** 130,141 ****
--- 133,147 ----
         expose. */
      Rectangle newClipBounds = clip.getBounds();
      
+     /* FIXME: decide whether this test code is worth anything
+      * (as of 2004-01-29, it prints frequently)
      if ((clipBounds != null) && !clipBounds.contains(newClipBounds))
        {
  	System.err.println("warning: old clip ("+ clipBounds +") does " +
  			   "not fully contain new clip (" +
  			   newClipBounds + ")");
        }
+      */
      clipBounds = newClipBounds;
      Rectangle[] rects = { clipBounds };
      context.setClipRectangles(rects);
*************** public class XGraphics implements Clonea
*** 203,210 ****
      if (img instanceof XOffScreenImage)
      {
        // FIXME: have to enforce clip, or is it OK as-is?
!       XGraphicsConfiguration.XOffScreenImage offScreenImage
!         = ((XGraphicsConfiguration.XOffScreenImage)img);
        Pixmap pixmap = offScreenImage.getPixmap ();
        context.copyArea (pixmap, 0, 0, x, y,
          offScreenImage.getWidth (), offScreenImage.getHeight ());
--- 209,215 ----
      if (img instanceof XOffScreenImage)
      {
        // FIXME: have to enforce clip, or is it OK as-is?
!       XOffScreenImage offScreenImage = (XOffScreenImage) img;
        Pixmap pixmap = offScreenImage.getPixmap ();
        context.copyArea (pixmap, 0, 0, x, y,
          offScreenImage.getWidth (), offScreenImage.getHeight ());
diff -Nrcpad gcc-3.4.3/libjava/gnu/awt/xlib/XOffScreenImage.java gcc-4.0.0/libjava/gnu/awt/xlib/XOffScreenImage.java
*** gcc-3.4.3/libjava/gnu/awt/xlib/XOffScreenImage.java	Mon Aug 25 19:02:28 2003
--- gcc-4.0.0/libjava/gnu/awt/xlib/XOffScreenImage.java	Mon Jul 12 16:26:07 2004
*************** import java.awt.GraphicsConfiguration;
*** 15,20 ****
--- 15,21 ----
  import java.awt.image.ColorModel;
  import java.awt.image.ImageObserver;
  import java.awt.image.ImageProducer;
+ import java.awt.image.ImageConsumer;
  import java.util.Hashtable;
  import gnu.awt.j2d.DirectRasterGraphics;
  import gnu.awt.j2d.Graphics2DImpl;
*************** import gnu.gcj.xlib.Drawable;
*** 23,28 ****
--- 24,30 ----
  import gnu.gcj.xlib.Pixmap;
  import gnu.gcj.xlib.Screen;
  import gnu.gcj.xlib.Visual;
+ import gnu.gcj.xlib.GC;
  
  /** Image class for xlib off-screen buffers.
   * The image is stored in a server-side pixmap for best performance.
*************** import gnu.gcj.xlib.Visual;
*** 34,45 ****
   * @author  scott gilbertson <scottg@mantatest.com> <sgilbertson@cogeco.ca>
   */
  public class XOffScreenImage extends Image 
!                              implements IntegerGraphicsState.ScreenCoupledImage
  {
    private Pixmap pixmap;
    private XGraphicsConfiguration config;
    private int width;
    private int height;
    
    /** Create a new XOffScreenImage
     * @param config Graphics configuration, to compare against on-screen 
--- 36,52 ----
   * @author  scott gilbertson <scottg@mantatest.com> <sgilbertson@cogeco.ca>
   */
  public class XOffScreenImage extends Image 
!                              implements IntegerGraphicsState.ScreenCoupledImage,
!                              ImageConsumer
  {
    private Pixmap pixmap;
    private XGraphicsConfiguration config;
    private int width;
    private int height;
+   private Drawable drawable;
+   private ImageProducer prod;
+   private GC gc;
+   private ColorModel pixmapColorModel;
    
    /** Create a new XOffScreenImage
     * @param config Graphics configuration, to compare against on-screen 
*************** public class XOffScreenImage extends Ima
*** 47,59 ****
     * @param drawable The drawable with which the image is compatible
     * @param width The width of the image
     * @param height The height of the image
     */
!   XOffScreenImage (XGraphicsConfiguration config, Drawable drawable, int width, int height)
    {
      this.config = config;
      this.width = width;
      this.height = height;
      pixmap = new Pixmap (drawable, width, height, drawable.getDepth ());
    }
    
    /** Get the pixmap which contains this image
--- 54,88 ----
     * @param drawable The drawable with which the image is compatible
     * @param width The width of the image
     * @param height The height of the image
+    * @param cm The ColorModel associated with drawable
     */
!   XOffScreenImage (XGraphicsConfiguration config, Drawable drawable, int width, int height, ColorModel cm)
    {
      this.config = config;
      this.width = width;
      this.height = height;
+     this.drawable = drawable;
+     pixmapColorModel = cm;
      pixmap = new Pixmap (drawable, width, height, drawable.getDepth ());
+     gc = GC.create (pixmap);
+   }
+   
+   /** Create a new XOffScreenImage and obtain image data from an ImageProducer
+    * @param config Graphics configuration, to compare against on-screen 
+    *               components and to create the appropriate Graphics
+    * @param drawable The drawable with which the image is compatible
+    * @param prod The source of image data for this image
+    * @param cm The ColorModel associated with drawable
+    */
+   XOffScreenImage (XGraphicsConfiguration config, Drawable drawable, ImageProducer prod, ColorModel cm)
+   {
+     this.config = config;
+     this.width = 0;  // size will be overridden in a moment
+     this.height = 0;
+     this.drawable = drawable;
+     this.prod = prod;
+     pixmapColorModel = cm;
+     prod.startProduction (this);
    }
    
    /** Get the pixmap which contains this image
*************** public class XOffScreenImage extends Ima
*** 120,126 ****
     */
    public ImageProducer getSource ()
    {
!     throw new UnsupportedOperationException ("getSource not supported");
    }
    
    /** Returns the width of the image, or -1 if it is unknown.  If the
--- 149,158 ----
     */
    public ImageProducer getSource ()
    {
!     if (prod == null)
!       throw new UnsupportedOperationException ("getSource not supported");
!     else
!       return prod;
    }
    
    /** Returns the width of the image, or -1 if it is unknown.  If the
*************** public class XOffScreenImage extends Ima
*** 172,175 ****
--- 204,280 ----
    {
      return config;
    }
+   
+   public void imageComplete (int status)
+   {
+   }
+   
+   public void setColorModel (ColorModel model)
+   {
+   }
+   
+   public void setDimensions (int width, int height)
+   {
+     this.width = width;
+     this.height = height;
+     pixmap = new Pixmap (drawable, width, height, drawable.getDepth ());
+     gc = GC.create (pixmap);
+   }
+   
+   public void setHints (int flags)
+   {
+   }
+   
+   public void setPixels (int x, int y, int w, int h, ColorModel model, int[] pixels, int offset, int scansize)
+   {
+     int idx = 0;
+     float[] normalizedComponents = new float [4];
+     int[] unnormalizedComponents = { 0, 0, 0, 0xff };
+     normalizedComponents[3] = 1;
+     for (int yp=y; yp < (y + h); yp++)
+     {
+       for (int xp=x; xp < (x + w); xp++)
+       {
+         int p = (yp - y) * scansize + (xp - x) + offset;
+         // FIXME: there HAS to be a more efficient mechanism for color mapping
+         normalizedComponents[0] = (float)model.getRed (pixels[p]) / 255F;
+         normalizedComponents[1] = (float)model.getGreen (pixels[p]) / 255F;
+         normalizedComponents[2] = (float)model.getBlue (pixels[p]) / 255F;
+         pixmapColorModel.getUnnormalizedComponents (normalizedComponents, 0,
+           unnormalizedComponents, 0);
+         int pixelColor = pixmapColorModel.getDataElement (unnormalizedComponents, 0);
+         gc.setForeground (pixelColor);
+         gc.drawPoint (xp, yp);
+       }
+     }
+   }
+   
+   public void setPixels (int x, int y, int w, int h, ColorModel model, byte[] pixels, int offset, int scansize)
+   {
+     int idx = 0;
+     float[] normalizedComponents = new float [4];
+     int[] unnormalizedComponents = { 0, 0, 0, 0xff };
+     normalizedComponents[3] = 1;
+     for (int yp=y; yp < (y + h); yp++)
+     {
+       for (int xp=x; xp < (x + w); xp++)
+       {
+         // FIXME: there HAS to be a more efficient mechanism for color mapping
+         int p = (yp - y) * scansize + (xp - x) + offset;
+         normalizedComponents[0] = (float)model.getRed (pixels[p]) / 255F;
+         normalizedComponents[1] = (float)model.getGreen (pixels[p]) / 255F;
+         normalizedComponents[2] = (float)model.getBlue (pixels[p]) / 255F;
+         pixmapColorModel.getUnnormalizedComponents (normalizedComponents, 0,
+           unnormalizedComponents, 0);
+         int pixelColor = pixmapColorModel.getDataElement (unnormalizedComponents, 0);
+         gc.setForeground (pixelColor);
+         gc.drawPoint (xp, yp);
+       }
+     }
+   }
+   
+   public void setProperties (Hashtable props)
+   {
+   }
+   
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/awt/xlib/XToolkit.java gcc-4.0.0/libjava/gnu/awt/xlib/XToolkit.java
*** gcc-3.4.3/libjava/gnu/awt/xlib/XToolkit.java	Sat Apr 19 19:54:38 2003
--- gcc-4.0.0/libjava/gnu/awt/xlib/XToolkit.java	Wed Feb 16 20:01:08 2005
*************** package gnu.awt.xlib;
*** 11,30 ****
  import java.awt.*;
  import java.awt.dnd.*;
  import java.awt.dnd.peer.*;
  import java.awt.im.*;
  import java.awt.peer.*;
  import java.awt.image.ImageProducer;
  import java.awt.image.ImageObserver;
  import java.net.*;
  import java.awt.datatransfer.Clipboard;
! import java.util.Properties;
  import java.util.Map;
! 
  import gnu.gcj.xlib.Display;
  import gnu.gcj.xlib.Screen;
  import gnu.gcj.xlib.Visual;
  
! public class XToolkit extends Toolkit
  {
    static XToolkit INSTANCE;
    
--- 11,35 ----
  import java.awt.*;
  import java.awt.dnd.*;
  import java.awt.dnd.peer.*;
+ import java.awt.font.*;
  import java.awt.im.*;
  import java.awt.peer.*;
  import java.awt.image.ImageProducer;
  import java.awt.image.ImageObserver;
  import java.net.*;
  import java.awt.datatransfer.Clipboard;
! import java.io.InputStream;
! import java.text.AttributedString;
  import java.util.Map;
! import java.util.Properties;
  import gnu.gcj.xlib.Display;
  import gnu.gcj.xlib.Screen;
  import gnu.gcj.xlib.Visual;
+ import gnu.java.awt.ClasspathToolkit;
+ import gnu.java.awt.peer.ClasspathFontPeer;
+ import gnu.java.awt.peer.ClasspathTextLayoutPeer;
  
! public class XToolkit extends ClasspathToolkit
  {
    static XToolkit INSTANCE;
    
*************** public class XToolkit extends Toolkit
*** 158,164 ****
  
    protected java.awt.peer.FontPeer getFontPeer(String name, int style) 
    {
!     return null;
    }
  
    public Dimension getScreenSize()
--- 163,169 ----
  
    protected java.awt.peer.FontPeer getFontPeer(String name, int style) 
    {
!     return new XFontPeer (name,style);
    }
  
    public Dimension getScreenSize()
*************** public class XToolkit extends Toolkit
*** 345,348 ****
--- 350,466 ----
    {
      throw new UnsupportedOperationException("not implemented");
    }
+   
+   /** 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 GraphicsEnvironment getLocalGraphicsEnvironment ()
+   {
+     throw new java.lang.UnsupportedOperationException ();
+   }
+   
+   /** 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 ClasspathFontPeer getClasspathFontPeer (String name, Map attrs)
+   {
+     int style = Font.PLAIN;
+     float size = 12;
+ 
+     if (attrs.containsKey (TextAttribute.WEIGHT))
+       {
+         Float weight = (Float) attrs.get (TextAttribute.WEIGHT);
+         if (weight.floatValue () >= TextAttribute.WEIGHT_BOLD.floatValue ())
+           style += Font.BOLD;
+       }
+ 
+     if (attrs.containsKey (TextAttribute.POSTURE))
+       {
+         Float posture = (Float) attrs.get (TextAttribute.POSTURE);
+         if (posture.floatValue () >= TextAttribute.POSTURE_OBLIQUE.floatValue ())
+           style += Font.ITALIC;
+       }
+ 
+     if (attrs.containsKey (TextAttribute.SIZE))
+       {
+         Float fsize = (Float) attrs.get (TextAttribute.SIZE);
+         size = fsize.floatValue ();
+       }
+ 
+     return new XFontPeer (name,style,size);
+   }
+ 
+   public ClasspathTextLayoutPeer 
+   getClasspathTextLayoutPeer (AttributedString str, FontRenderContext frc)
+   {
+     throw new Error("not implemented");
+   }
+   
+   /** 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 Font createFont (int format, InputStream stream)
+   {
+     throw new java.lang.UnsupportedOperationException ();
+   }
+ 
+   public RobotPeer createRobot (GraphicsDevice screen) throws AWTException
+   {
+     throw new java.lang.UnsupportedOperationException ();
+   }
+ 
+   boolean interrupted;
+ 
+   public boolean nativeQueueEmpty() 
+   { 
+     return eventLoop.isIdle(); 
+   }
+ 
+   public void wakeNativeQueue() 
+   {
+     interrupted = true;
+     eventLoop.interrupt();
+   }
+ 
+   public void iterateNativeQueue(java.awt.EventQueue locked, boolean block) 
+   {
+     interrupted = false;
+     while (!interrupted)
+       eventLoop.postNextEvent(block);
+   }; 
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/classpath/ServiceFactory.java gcc-4.0.0/libjava/gnu/classpath/ServiceFactory.java
*** gcc-3.4.3/libjava/gnu/classpath/ServiceFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/classpath/ServiceFactory.java	Sat Nov  6 23:38:51 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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-3.4.3/libjava/gnu/classpath/ServiceProviderLoadingAction.java gcc-4.0.0/libjava/gnu/classpath/ServiceProviderLoadingAction.java
*** gcc-3.4.3/libjava/gnu/classpath/ServiceProviderLoadingAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/classpath/ServiceProviderLoadingAction.java	Wed Apr 21 08:20:30 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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-3.4.3/libjava/gnu/gcj/RawDataManaged.java gcc-4.0.0/libjava/gnu/gcj/RawDataManaged.java
*** gcc-3.4.3/libjava/gnu/gcj/RawDataManaged.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/RawDataManaged.java	Fri May 28 18:53:04 2004
***************
*** 0 ****
--- 1,23 ----
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ package gnu.gcj;
+ 
+ /** A type used to indicate special data used by native code. Unlike the 
+     <code>RawData</code> type, fields declared as <code>RawDataManaged</code> 
+     will be "marked" by the memory manager and considered for garbage 
+     collection.  
+     
+     Native data which is allocated using CNI's <code>JvAllocBytes()</code> 
+     function and stored in a <code>RawDataManaged</code> will be automatically 
+     freed when the Java object it is associated with becomes unreachable.  */
+ 
+ public final class RawDataManaged
+ {
+    private RawDataManaged() { }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/convert/BytesToUnicode.java gcc-4.0.0/libjava/gnu/gcj/convert/BytesToUnicode.java
*** gcc-3.4.3/libjava/gnu/gcj/convert/BytesToUnicode.java	Mon Jul 30 20:24:17 2001
--- gcc-4.0.0/libjava/gnu/gcj/convert/BytesToUnicode.java	Tue Jun 22 19:24:32 2004
*************** public abstract class BytesToUnicode ext
*** 75,87 ****
    {
      /* First hunt in our cache to see if we have a decoder that is
         already allocated. */
      synchronized (BytesToUnicode.class)
        {
  	int i;
  	for (i = 0; i < decoderCache.length; ++i)
  	  {
  	    if (decoderCache[i] != null
! 		&& encoding.equals(decoderCache[i].getName ()))
  	      {
  		BytesToUnicode rv = decoderCache[i];
  		decoderCache[i] = null;
--- 75,88 ----
    {
      /* First hunt in our cache to see if we have a decoder that is
         already allocated. */
+     String canonicalEncoding = canonicalize(encoding);
      synchronized (BytesToUnicode.class)
        {
  	int i;
  	for (i = 0; i < decoderCache.length; ++i)
  	  {
  	    if (decoderCache[i] != null
! 		&& canonicalEncoding.equals(decoderCache[i].getName ()))
  	      {
  		BytesToUnicode rv = decoderCache[i];
  		decoderCache[i] = null;
*************** public abstract class BytesToUnicode ext
*** 91,97 ****
        }
  
      // It's not in the cache, so now we have to do real work.
!     String className = "gnu.gcj.convert.Input_" + canonicalize (encoding);
      Class decodingClass;
      try 
        { 
--- 92,98 ----
        }
  
      // It's not in the cache, so now we have to do real work.
!     String className = "gnu.gcj.convert.Input_" + canonicalEncoding;
      Class decodingClass;
      try 
        { 
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/convert/Convert.java gcc-4.0.0/libjava/gnu/gcj/convert/Convert.java
*** gcc-3.4.3/libjava/gnu/gcj/convert/Convert.java	Mon Mar 25 22:08:25 2002
--- gcc-4.0.0/libjava/gnu/gcj/convert/Convert.java	Fri Feb 18 20:52:14 2005
***************
*** 1,4 ****
! /* Copyright (C) 1999, 2002  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,4 ----
! /* Copyright (C) 1999, 2002, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** public class Convert
*** 45,51 ****
  		       + ") "
  		       + System.getProperty("java.vm.version"));
      System.out.println();
!     System.out.println("Copyright (C) 2002 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);
--- 45,51 ----
  		       + ") "
  		       + System.getProperty("java.vm.version"));
      System.out.println();
!     System.out.println("Copyright (C) 2005 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 class Convert
*** 157,166 ****
  	UnicodeToBytes outEncoder
  	  = outEncodingName == null ? UnicodeToBytes.getDefaultEncoder()
  	  : UnicodeToBytes.getEncoder(outEncodingName);
! 	InputStream inStream = inName == "-" ? System.in
  	  : new FileInputStream(inName);
  	OutputStream outStream;
! 	if (outName == "-")
  	  outStream = System.out;
  	else
  	  outStream = new FileOutputStream(outName);
--- 157,166 ----
  	UnicodeToBytes outEncoder
  	  = outEncodingName == null ? UnicodeToBytes.getDefaultEncoder()
  	  : UnicodeToBytes.getEncoder(outEncodingName);
! 	InputStream inStream = inName.equals("-") ? System.in
  	  : new FileInputStream(inName);
  	OutputStream outStream;
! 	if (outName.equals("-"))
  	  outStream = System.out;
  	else
  	  outStream = new FileOutputStream(outName);
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/convert/IOConverter.java gcc-4.0.0/libjava/gnu/gcj/convert/IOConverter.java
*** gcc-3.4.3/libjava/gnu/gcj/convert/IOConverter.java	Mon Sep 17 02:28:53 2001
--- gcc-4.0.0/libjava/gnu/gcj/convert/IOConverter.java	Sat Mar 20 00:24:49 2004
*************** public abstract class IOConverter
*** 63,69 ****
      hash.put ("extended_unix_code_packed_format_for_japanese", "EUCJIS");
      hash.put ("cseucpkdfmtjapanese", "EUCJIS");
      hash.put ("euc-jp", "EUCJIS");
! 
      iconv_byte_swap = iconv_init ();
    }
  
--- 63,71 ----
      hash.put ("extended_unix_code_packed_format_for_japanese", "EUCJIS");
      hash.put ("cseucpkdfmtjapanese", "EUCJIS");
      hash.put ("euc-jp", "EUCJIS");
!     hash.put ("euc-jp", "EUCJIS");
!     hash.put ("utf-16le", "UnicodeLittle");
!     hash.put ("utf-16be", "UnicodeBig");
      iconv_byte_swap = iconv_init ();
    }
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/convert/Input_UnicodeBig.java gcc-4.0.0/libjava/gnu/gcj/convert/Input_UnicodeBig.java
*** gcc-3.4.3/libjava/gnu/gcj/convert/Input_UnicodeBig.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/convert/Input_UnicodeBig.java	Sat Mar 20 00:24:49 2004
***************
*** 0 ****
--- 1,49 ----
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ package gnu.gcj.convert;
+ 
+ public class Input_UnicodeBig extends BytesToUnicode
+ {
+   /** 0, 8, or 16 bits of a partially constructed character. */
+   char partial;
+   /** How many bytes of partial are valid. */
+   int partial_count;
+ 
+   public String getName() { return "UnicodeBig"; }
+ 
+   public int read (char[] outbuffer, int outpos, int count)
+   {
+     int origcount = count;
+     for (;;)
+       {
+ 	if (partial_count == 2)
+ 	  {
+ 	    if (count == 0)
+ 	      break;
+ 	    if (partial == 0xFEFF)
+ 	      ; // drop byte order mark
+ 	    // else if (partial >= 0xFFFe)  ERROR;
+ 	    else
+ 	      outbuffer[outpos++] = partial;
+ 	    count--;
+ 	    partial_count = 0;
+ 	    partial = 0;
+ 	  }
+ 	else if (inpos >= inlength)
+ 	  break;
+ 	else
+ 	  {
+ 	    int b = inbuffer[inpos++] & 0xFF;
+ 	    partial = (char) (((int) partial << 8) + b);
+ 	    partial_count++;
+ 	  }
+       }
+     return origcount - count;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/convert/Input_UnicodeLittle.java gcc-4.0.0/libjava/gnu/gcj/convert/Input_UnicodeLittle.java
*** gcc-3.4.3/libjava/gnu/gcj/convert/Input_UnicodeLittle.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/convert/Input_UnicodeLittle.java	Sat Mar 20 00:24:49 2004
***************
*** 0 ****
--- 1,49 ----
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ package gnu.gcj.convert;
+ 
+ public class Input_UnicodeLittle extends BytesToUnicode
+ {
+   /** 0, 8, or 16 bits of a partially constructed character. */
+   char partial;
+   /** How many bytes of partial are valid. */
+   int partial_count;
+ 
+   public String getName() { return "UnicodeLittle"; }
+ 
+   public int read (char[] outbuffer, int outpos, int count)
+   {
+     int origcount = count;
+     for (;;)
+       {
+ 	if (partial_count == 2)
+ 	  {
+ 	    if (count == 0)
+ 	      break;
+ 	    if (partial == 0xFEFF)
+ 	      ; // drop byte order mark
+ 	    // else if (partial >= 0xFFFe)  ERROR;
+ 	    else
+ 	      outbuffer[outpos++] = partial;
+ 	    count--;
+ 	    partial_count = 0;
+ 	    partial = 0;
+ 	  }
+ 	else if (inpos >= inlength)
+ 	  break;
+ 	else
+ 	  {
+ 	    int b = inbuffer[inpos++] & 0xFF;
+ 	    partial = (char) (partial | (b << (8 * partial_count)));
+ 	    partial_count++;
+ 	  }
+       }
+     return origcount - count;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/convert/Output_UnicodeLittleUnmarked.java gcc-4.0.0/libjava/gnu/gcj/convert/Output_UnicodeLittleUnmarked.java
*** gcc-3.4.3/libjava/gnu/gcj/convert/Output_UnicodeLittleUnmarked.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/convert/Output_UnicodeLittleUnmarked.java	Thu Oct 28 15:22:44 2004
***************
*** 0 ****
--- 1,41 ----
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ package gnu.gcj.convert;
+ 
+ /**
+  * Convert to Unicode Little Endian, no marker
+  */
+ public class Output_UnicodeLittleUnmarked extends UnicodeToBytes
+ {
+   public String getName() { return "UnicodeLittleUnmarked"; }
+ 
+   /** Convert chars to bytes.
+     * Converted bytes are written to buf, starting at count.
+     * @param inbuffer source of characters to convert
+     * @param inpos index of initial character in inbuffer to convert
+     * @param inlength number of characters to convert
+     * @return number of chars converted
+     * Also, this.count is increment by the number of bytes converted.
+     */
+   public int write (char[] inbuffer, int inpos, int inlength)
+   {
+     int avail = buf.length - count;
+     if (inlength * 2 > avail)
+       inlength = avail / 2;
+     for (int i = inlength; i > 0; i--)
+       {
+         char c = inbuffer[inpos++];
+         buf[count] = (byte)c;
+         buf[count+1] = (byte)(c >> 8);
+ 	count += 2;
+       }
+     return inlength;
+   }
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html gcc-4.0.0/libjava/gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html
*** gcc-3.4.3/libjava/gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html	Wed Mar  6 18:54:37 2002
--- gcc-4.0.0/libjava/gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html	Thu Jan  1 00:00:00 1970
***************
*** 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>  
-   
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/convert/UnicodeData-3.0.0.txt gcc-4.0.0/libjava/gnu/gcj/convert/UnicodeData-3.0.0.txt
*** gcc-3.4.3/libjava/gnu/gcj/convert/UnicodeData-3.0.0.txt	Wed Mar  6 18:54:37 2002
--- gcc-4.0.0/libjava/gnu/gcj/convert/UnicodeData-3.0.0.txt	Thu Jan  1 00:00:00 1970
***************
*** 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;;;;;
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/convert/UnicodeToBytes.java gcc-4.0.0/libjava/gnu/gcj/convert/UnicodeToBytes.java
*** gcc-3.4.3/libjava/gnu/gcj/convert/UnicodeToBytes.java	Sat Jun  7 18:35:00 2003
--- gcc-4.0.0/libjava/gnu/gcj/convert/UnicodeToBytes.java	Tue Jun 22 19:24:32 2004
*************** public abstract class UnicodeToBytes ext
*** 73,85 ****
    {
      /* First hunt in our cache to see if we have a encoder that is
         already allocated. */
      synchronized (UnicodeToBytes.class)
        {
  	int i;
  	for (i = 0; i < encoderCache.length; ++i)
  	  {
  	    if (encoderCache[i] != null
! 		&& encoding.equals(encoderCache[i].getName ()))
  	      {
  		UnicodeToBytes rv = encoderCache[i];
  		encoderCache[i] = null;
--- 73,86 ----
    {
      /* First hunt in our cache to see if we have a encoder that is
         already allocated. */
+     String canonicalEncoding = canonicalize(encoding);
      synchronized (UnicodeToBytes.class)
        {
  	int i;
  	for (i = 0; i < encoderCache.length; ++i)
  	  {
  	    if (encoderCache[i] != null
! 		&& canonicalEncoding.equals(encoderCache[i].getName ()))
  	      {
  		UnicodeToBytes rv = encoderCache[i];
  		encoderCache[i] = null;
*************** public abstract class UnicodeToBytes ext
*** 88,94 ****
  	  }
        }
  
!     String className = "gnu.gcj.convert.Output_" + canonicalize (encoding);
      Class encodingClass;
      try 
        { 
--- 89,95 ----
  	  }
        }
  
!     String className = "gnu.gcj.convert.Output_" + canonicalEncoding;
      Class encodingClass;
      try 
        { 
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/natCore.cc gcc-4.0.0/libjava/gnu/gcj/natCore.cc
*** gcc-3.4.3/libjava/gnu/gcj/natCore.cc	Thu Aug 28 22:17:35 2003
--- gcc-4.0.0/libjava/gnu/gcj/natCore.cc	Fri Apr 16 16:27:18 2004
*************** _Jv_create_core (_Jv_core_chain *node, j
*** 96,103 ****
    gnu::gcj::Core *core = NULL;
    if (node)
      {
!       core = (gnu::gcj::Core *) _Jv_AllocObject(&gnu::gcj::Core::class$,
! 						sizeof (gnu::gcj::Core));
        core->ptr = (gnu::gcj::RawData *) node->data;
        core->length = node->data_length;
      }
--- 96,102 ----
    gnu::gcj::Core *core = NULL;
    if (node)
      {
!       core = new gnu::gcj::Core ();
        core->ptr = (gnu::gcj::RawData *) node->data;
        core->length = node->data_length;
      }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/BootClassLoader.java gcc-4.0.0/libjava/gnu/gcj/runtime/BootClassLoader.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/BootClassLoader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/runtime/BootClassLoader.java	Wed Apr  6 21:38:29 2005
***************
*** 0 ****
--- 1,71 ----
+ /* Copyright (C) 2005  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ package gnu.gcj.runtime;
+ 
+ import java.io.IOException;
+ import java.net.URL;
+ import java.util.Enumeration;
+ 
+ /**
+  * This is a helper for the bootstrap class loader.  It is a
+  * URLClassLoader so that we can read a class path and re-use all the
+  * existing code for finding classes, extracting them from jars, etc.
+  * However, it is never called the way that an ordinary ClassLoader is
+  * called.  For instance, loadClass() is never used.
+  */
+ public final class BootClassLoader extends HelperClassLoader
+ {
+   BootClassLoader(String libdir)
+   {
+     addDirectoriesFromProperty("java.endorsed.dirs");
+     addDirectoriesFromProperty("gnu.gcj.runtime.endorsed.dirs");
+ 
+     try
+       {
+ 	// Add core:/ to the end so any resources compiled into this
+ 	// executable may be found.
+ 	addURL(new URL("core", "", -1, "/"));
+       }
+     catch (java.net.MalformedURLException x)
+       {
+ 	// This should never happen.
+ 	throw new RuntimeException(x);
+       }
+   }
+ 
+   public Class bootLoadClass(String name)
+     throws ClassNotFoundException
+   {
+     Class c = findLoadedClass(name);
+     if (c == null)
+       {
+ 	try
+ 	  {
+ 	    // We could hack URLClassLoader to make this more
+ 	    // efficient, if it mattered.
+ 	    c = findClass(name);
+ 	  }
+ 	catch (ClassNotFoundException _)
+ 	  {
+ 	    c = null;
+ 	  }
+       }
+     return c;
+   }
+ 
+   public URL bootGetResource(String name)
+   {
+     return findResource(name);
+   }
+ 
+   public Enumeration bootGetResources(String name) throws IOException
+   {
+     return findResources(name);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/ExtensionClassLoader.java gcc-4.0.0/libjava/gnu/gcj/runtime/ExtensionClassLoader.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/ExtensionClassLoader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/runtime/ExtensionClassLoader.java	Wed Apr  6 21:38:29 2005
***************
*** 0 ****
--- 1,40 ----
+ /* Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ /* Author: Kresten Krab Thorup <krab@gnu.org>  */
+ 
+ package gnu.gcj.runtime;
+ 
+ import java.net.URL;
+ 
+ // The extension loader for libgcj.  Class loader bootstrap is a bit
+ // tricky, see prims.cc and SystemClassLoader for some details.
+ public final class ExtensionClassLoader extends HelperClassLoader
+ {
+   private ExtensionClassLoader ()
+   {	
+   }
+ 
+   private void init() 
+   {
+     addDirectoriesFromProperty("java.ext.dirs");
+   }
+ 
+   // This can be package-private because we only call it from native
+   // code during startup.
+   static void initialize ()
+   {
+     instance.init();
+     system_instance.init();
+   }
+ 
+   // The only ExtensionClassLoader that can exist.
+   static ExtensionClassLoader instance = new ExtensionClassLoader();
+   // The system class loader.
+   static SystemClassLoader system_instance = new SystemClassLoader(instance);
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/FirstThread.java gcc-4.0.0/libjava/gnu/gcj/runtime/FirstThread.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/FirstThread.java	Sat Nov  8 13:43:12 2003
--- gcc-4.0.0/libjava/gnu/gcj/runtime/FirstThread.java	Thu Jan  1 00:00:00 1970
***************
*** 1,98 ****
- // FirstThread.java - Implementation of very first thread.
- 
- /* Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- package gnu.gcj.runtime;
- 
- import java.util.jar.*;
- 
- /**
-  * @author Tom Tromey <tromey@cygnus.com>
-  * @date August 24, 1998 
-  */
- 
- final class FirstThread extends Thread
- {
-   public FirstThread (Class k, String[] args)
-   {
-     super (null, null, "main");
-     klass = k;
-     this.args = args;
-   }
- 
-   public FirstThread (String class_name, String[] args, boolean is_jar)
-   {
-     super (null, null, "main");
-     klass_name = class_name;
-     this.args = args;
-     this.is_jar = is_jar;
-   }
- 
-   public void run()
-   {
-     if (is_jar)
-       klass_name = getMain(klass_name);
- 
-     if (klass == null)
-       {
-         try
- 	  {
- 	    klass = Class.forName(klass_name);
- 	  }
- 	catch (ClassNotFoundException x)
- 	  {
- 	    throw new NoClassDefFoundError(klass_name);
- 	  }
-       }
- 
-     call_main();
-   }
- 
-   private String getMain (String name)
-   {
-     String mainName = null;
-     try
-       {
- 	JarFile j = new JarFile(name);
- 	Attributes a = j.getManifest().getMainAttributes();
- 	mainName = a.getValue(Attributes.Name.MAIN_CLASS);
-       }
-     catch (Exception e)
-       {
- 	// Ignore.
-       }
- 
-     if (mainName == null)
-       {
- 	System.err.println("Failed to load Main-Class manifest attribute from "
- 			   + name);
- 	System.exit(1);
-       }
-     return mainName;
-   }
- 
-   private native void call_main ();
- 
-   // Private data.
-   private Class klass;
-   private String klass_name;
-   private Object args;
-   private boolean is_jar;
- 
-   // If the user links statically then we need to ensure that these
-   // classes are linked in.  Otherwise bootstrapping fails.  These
-   // classes are only referred to via Class.forName(), so we add an
-   // explicit mention of them here.
-   static final Class Kcert     = java.security.cert.Certificate.class;
-   static final Class Kfile     = gnu.java.net.protocol.file.Handler.class;
-   static final Class Khttp     = gnu.java.net.protocol.http.Handler.class;
-   static final Class Kjar      = gnu.java.net.protocol.jar.Handler.class;
-   static final Class Klocale   = gnu.java.locale.LocaleInformation.class;
-   static final Class Kcalendar = gnu.java.locale.Calendar.class;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/HelperClassLoader.java gcc-4.0.0/libjava/gnu/gcj/runtime/HelperClassLoader.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/HelperClassLoader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/runtime/HelperClassLoader.java	Wed Apr  6 21:38:29 2005
***************
*** 0 ****
--- 1,67 ----
+ /* Copyright (C) 2005  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ package gnu.gcj.runtime;
+ 
+ import java.io.File;
+ import java.io.FilenameFilter;
+ import java.io.IOException;
+ import java.net.URL;
+ import java.net.URLClassLoader;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * This is a URLClassLoader that has an extra helper method for
+  * handling things like java.ext.dirs.
+  */
+ class HelperClassLoader extends URLClassLoader
+ {
+   HelperClassLoader()
+   {
+     super(new URL[0]);
+   }
+ 
+   /**
+    * This is a helper method that adds all the jar and zip files from
+    * a given list of paths to this class loader.  The paths are taken
+    * from a system property whose name is provided as an argument.
+    */
+   final void addDirectoriesFromProperty(String propName)
+   {
+     StringTokenizer st
+       = new StringTokenizer (System.getProperty (propName, ""),
+ 			     File.pathSeparator);
+     try
+       {
+ 	while (st.hasMoreElements ())
+ 	  {
+ 	    String dirname = st.nextToken ();
+ 	    File dir = new File (dirname);
+             if (dir.exists ())
+ 	      {
+ 		if (! dirname.endsWith (File.separator))
+ 		  dirname = dirname + File.separator;
+ 		String files[] = dir.list (new FilenameFilter ()
+ 		  {
+ 		    public boolean accept (File dir, String name)
+ 		    {
+ 		      return name.endsWith (".jar") || name.endsWith (".zip");
+ 		    }
+ 		  });
+ 		for (int i = files.length - 1; i >= 0; i--)
+ 		  addURL(new URL("file", "", -1, dirname + files[i]));
+ 	      }
+ 	  }
+       }
+     catch (java.net.MalformedURLException x)
+       {
+ 	// This should never happen.
+ 	throw new RuntimeException(x);
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/NameFinder.java gcc-4.0.0/libjava/gnu/gcj/runtime/NameFinder.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/NameFinder.java	Mon Jul 21 02:24:08 2003
--- gcc-4.0.0/libjava/gnu/gcj/runtime/NameFinder.java	Sat Feb 12 13:51:10 2005
***************
*** 1,5 ****
  /* NameFinder.java -- Translates addresses to StackTraceElements.
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
     This file is part of libgcj.
  
--- 1,5 ----
  /* NameFinder.java -- Translates addresses to StackTraceElements.
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
     This file is part of libgcj.
  
*************** import java.io.File;
*** 37,44 ****
   *     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.</ul>
!  * <ul><code>gnu.gcj.runtime.NameFinder.remove_interpreter</code>
!  *     Whether runtime interpreter calls (methods in the _Jv_InterpMethod class
   *     and functions starting with 'ffi_') should be removed from the stack
   *     trace. Only done when the stack is sanitized.</ul>
   * <ul><code>gnu.gcj.runtime.NameFinder.use_addr2line</code>
--- 37,44 ----
   *     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.</ul>
!  * <ul><code>gnu.gcj.runtime.NameFinder.remove_internal</code>
!  *     Whether runtime internal calls (methods in the internal _Jv_* classes
   *     and functions starting with 'ffi_') should be removed from the stack
   *     trace. Only done when the stack is sanitized.</ul>
   * <ul><code>gnu.gcj.runtime.NameFinder.use_addr2line</code>
*************** public class NameFinder
*** 72,81 ****
  	  = Boolean.valueOf(System.getProperty
  		("gnu.gcj.runtime.NameFinder.remove_unknown", "true")
  	    ).booleanValue();
!   private static final boolean remove_interpreter
! 	  = Boolean.valueOf(System.getProperty
  		("gnu.gcj.runtime.NameFinder.remove_interpreter", "true")
! 	    ).booleanValue();
    private static final boolean use_addr2line
  	  = Boolean.valueOf(System.getProperty
  		("gnu.gcj.runtime.NameFinder.use_addr2line", "true")
--- 72,89 ----
  	  = Boolean.valueOf(System.getProperty
  		("gnu.gcj.runtime.NameFinder.remove_unknown", "true")
  	    ).booleanValue();
! 
!   // The remove_interpreter name is an old 3.3/3.4 (deprecated) synonym.
!   private static final boolean remove_internal
! 	  = (Boolean.valueOf(System.getProperty
! 		("gnu.gcj.runtime.NameFinder.remove_internal", "true")
! 			     ).booleanValue()
! 	     ||
! 	     Boolean.valueOf(System.getProperty
  		("gnu.gcj.runtime.NameFinder.remove_interpreter", "true")
!                              ).booleanValue()
! 	     );
! 
    private static final boolean use_addr2line
  	  = Boolean.valueOf(System.getProperty
  		("gnu.gcj.runtime.NameFinder.use_addr2line", "true")
*************** public class NameFinder
*** 241,248 ****
     * Given an Throwable and a native stacktrace returns an array of
     * StackTraceElement containing class, method, file and linenumbers.
     */
!   public StackTraceElement[] lookup(Throwable t, RawData addrs, int length)
    {
      StackTraceElement[] elements = new StackTraceElement[length];
      for (int i=0; i < length; i++)
        elements[i] = lookup(addrs, i);
--- 249,259 ----
     * Given an Throwable and a native stacktrace returns an array of
     * StackTraceElement containing class, method, file and linenumbers.
     */
!   public StackTraceElement[] lookup(Throwable t, StackTrace trace)
    {
+     RawData addrs = trace.stackTraceAddrs();
+     int length = trace.length();
+ 
      StackTraceElement[] elements = new StackTraceElement[length];
      for (int i=0; i < length; i++)
        elements[i] = lookup(addrs, i);
*************** public class NameFinder
*** 277,283 ****
        consName = className.substring(lastDot + 1) + '(';
  
      int unknown = 0;
!     int interpreter = 0;
      int last_throw = -1;
      int length = elements.length;
      int end = length-1;
--- 288,294 ----
        consName = className.substring(lastDot + 1) + '(';
  
      int unknown = 0;
!     int internal = 0;
      int last_throw = -1;
      int length = elements.length;
      int end = length-1;
*************** public class NameFinder
*** 297,315 ****
  		|| MName.startsWith("fillInStackTrace("))))
  	  {
  	    last_throw = i;
! 	    // Reset counting of unknown and interpreter frames.
  	    unknown = 0;
! 	    interpreter = 0;
  	  }
  	else if (remove_unknown && CName == null 
  		 && (MName == null || MName.startsWith("0x")))
  	  unknown++;
! 	else if (remove_interpreter
  		 && ((CName == null
  		      && MName != null && MName.startsWith("ffi_"))
! 		     || (CName != null && CName.equals("_Jv_InterpMethod"))))
! 	  interpreter++;
! 	else if ("main(java.lang.String[])".equals(MName))
  	  {
  	    end = i;
  	    break;
--- 308,330 ----
  		|| MName.startsWith("fillInStackTrace("))))
  	  {
  	    last_throw = i;
! 	    // Reset counting of unknown and internal frames.
  	    unknown = 0;
! 	    internal = 0;
  	  }
  	else if (remove_unknown && CName == null 
  		 && (MName == null || MName.startsWith("0x")))
  	  unknown++;
! 	else if (remove_internal
  		 && ((CName == null
  		      && MName != null && MName.startsWith("ffi_"))
! 		     || (CName != null && CName.startsWith("_Jv_"))
! 		     || (CName == null && MName != null
! 			 && MName.startsWith("_Jv_"))))
! 	  internal++;
! 	else if (("java.lang.Thread".equals(CName)
! 		  || "gnu.java.lang.MainThread".equals(CName))
! 		 && "run()".equals(MName))
  	  {
  	    end = i;
  	    break;
*************** public class NameFinder
*** 318,328 ****
      int begin = last_throw+1;
  
      // Now filter out everything at the start and the end that is not part
!     // of the "normal" user program including any elements that are interpreter
      // calls or have no usefull information whatsoever.
      // Unless that means we filter out all info.
!     int nr_elements = end-begin-unknown-interpreter+1;
!     if ((begin > 0 || end < length-1 || unknown > 0 || interpreter > 0)
  	&& nr_elements > 0)
        {
  	stack = new StackTraceElement[nr_elements];
--- 333,343 ----
      int begin = last_throw+1;
  
      // Now filter out everything at the start and the end that is not part
!     // of the "normal" user program including any elements that are internal
      // calls or have no usefull information whatsoever.
      // Unless that means we filter out all info.
!     int nr_elements = end - begin - unknown - internal + 1;
!     if ((begin > 0 || end < length-1 || unknown > 0 || internal > 0)
  	&& nr_elements > 0)
        {
  	stack = new StackTraceElement[nr_elements];
*************** public class NameFinder
*** 334,347 ****
  	    if (remove_unknown && CName == null 
  		 && (MName == null || MName.startsWith("0x")))
  	      ; // Skip unknown frame
! 	    else if (remove_interpreter
  		     && ((CName == null
! 			 && MName != null && MName.startsWith("ffi_"))
! 			|| (CName != null && CName.equals("_Jv_InterpMethod"))))
! 	      ; // Skip interpreter runtime frame
  	    else
  	      {
! 		stack[pos] = elements[i];
  		pos++;
  	      }
  	  }
--- 349,375 ----
  	    if (remove_unknown && CName == null 
  		 && (MName == null || MName.startsWith("0x")))
  	      ; // Skip unknown frame
! 	    else if (remove_internal
  		     && ((CName == null
! 			  && MName != null && MName.startsWith("ffi_"))
! 			 || (CName != null && CName.startsWith("_Jv_"))
! 			 || (CName == null && MName != null
! 			     && MName.startsWith("_Jv_"))))
! 	      ; // Skip internal runtime frame
  	    else
  	      {
! 		// Null Class or Method name in elements are not allowed.
! 		if (MName == null || CName == null)
! 		  {
! 		    MName = MName == null ? "" : MName;
! 		    CName = CName == null ? "" : CName;
! 		    stack[pos] = newElement(elements[i].getFileName(),
! 					    elements[i].getLineNumber(),
! 					    CName, MName,
! 					    elements[i].isNativeMethod());
! 		  }
! 		else
! 		  stack[pos] = elements[i];
  		pos++;
  	      }
  	  }
*************** public class NameFinder
*** 353,358 ****
--- 381,396 ----
    }
  
    /**
+    * Native helper method to create a StackTraceElement. Needed to work
+    * around normal Java access restrictions.
+    */
+   native static private StackTraceElement newElement(String fileName,
+ 						     int lineNumber,
+ 						     String className,
+ 						     String methName,
+ 						     boolean isNative);
+ 
+   /**
     * Creates a StackTraceElement given a string and a filename.
     * Splits the given string into the class and method part.
     * The string name will be a demangled to a fully qualified java method
*************** public class NameFinder
*** 363,369 ****
    private StackTraceElement createStackTraceElement(String name, String file)
    {
      if (!demangle)
!       return new StackTraceElement(file, -1, null, name, false);
  
      String s = demangleName(name);
      String methodName = s;
--- 401,407 ----
    private StackTraceElement createStackTraceElement(String name, String file)
    {
      if (!demangle)
!       return newElement(file, -1, null, name, false);
  
      String s = demangleName(name);
      String methodName = s;
*************** public class NameFinder
*** 409,415 ****
  	  }
        }
  
!     return new StackTraceElement(fileName, line, className, methodName, false);
    }
  
    /**
--- 447,453 ----
  	  }
        }
  
!     return newElement(fileName, line, className, methodName, false);
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/PersistentByteMap.java gcc-4.0.0/libjava/gnu/gcj/runtime/PersistentByteMap.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/PersistentByteMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/runtime/PersistentByteMap.java	Wed Feb 16 17:32:59 2005
***************
*** 0 ****
--- 1,619 ----
+ /* Copyright (C) 2004, 2005  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ 
+ 
+ /*  A PersistentByteMap maps a byte array to another byte array.  It
+ uses a file that does not need to be serialized but may be
+ memory-mapped and read in-place.  So, even if there are many instances
+ of gcj applications running, they can share PersistentByteMaps.
+ 
+ The idea is to make searches as fast as possible: opening a
+ PersistentByteMap is cheap and search time doesn't grow with the
+ number of entries in the table.  On the other hand, enumerating the
+ map is slow, but that is a relatively uncommon operation.
+ 
+ The main use of this class is to provide a way to map the
+ MessageDigest of a class file to the location of a DSO that contains
+ the compiled version of that class.  It is up the the installer of an
+ application to keep the DSO up to date with the jar.  
+ 
+ USAGE:
+         MessageDigest md = MessageDigest.getInstance("MD5");
+         digest = md.digest(bytes);
+ 
+         PersistentByteMap map 
+           = new PersistentByteMap
+             (fileName, PersistentByteMap.AccessMode.READ_ONLY);
+ 
+         byte[] soName = map.get(digest);
+         if (soName)
+           {
+             String SharedLibraryName = new String(soName);
+ 
+ BUGS/FEATURES:
+         remove() isn't written yet.
+ 
+         capacity is fixed once the map has been created.
+ 
+         We use linear probing to resolve collisions.  It might be
+         better to use a scheme that results in fewer probes to
+         determine that an item isn't found.  However, even when the
+         table is half full there are only on average 1.5 probes for a
+         successful search and 2.5 probes for an unsuccessful one.
+ 
+ 	We don't do any locking at all: adding to a PersistentByteMap
+ 	at runtime is possible, but it requires filesystem locks
+ 	around get(), put(), and remove().
+ */
+ 
+ package gnu.gcj.runtime;
+ 
+ import java.io.*;
+ import java.nio.*;
+ import java.nio.channels.*;
+ import java.util.*;
+ import java.security.MessageDigest;
+ import java.math.BigInteger;
+ 
+ public class PersistentByteMap
+ {
+   private MappedByteBuffer buf;
+ 
+   static private final int MAGIC = 0;
+   static private final int VERSION = 4;
+   static private final int CAPACITY = 8;
+   static private final int TABLE_BASE = 12;
+   static private final int STRING_BASE = 16;
+   static private final int STRING_SIZE = 20;
+   static private final int FILE_SIZE = 24;
+   static private final int ELEMENTS = 28;
+   
+   static private final int INT_SIZE = 4;
+ 
+   static private final int TABLE_ENTRY_SIZE = 2 * INT_SIZE;
+ 
+   private int capacity;   // number of entries
+   private int table_base;   // offset from start of file, in bytes
+   private int string_base;  // offset from start of file, in bytes
+   private int string_size;  // size of string table, in bytes
+   private int file_size;    // size of file, in bytes;
+   private int elements;     // number of elements in table
+ 
+   private long length;      // the length of the underlying file
+ 
+   private final File name;  // The name of the underlying file
+ 
+   static private final int UNUSED_ENTRY = -1; 
+ 
+   static public final int KEYS = 0;
+   static public final int VALUES = 1;
+   static public final int ENTRIES = 2;
+ 
+   private HashMap values;   // A map of strings in the string table.
+ 
+   FileChannel fc;           // The underlying file channel.
+ 
+   static final public class AccessMode
+   {
+     private final FileChannel.MapMode mapMode;
+ 
+     static
+     {
+       READ_ONLY = new AccessMode(FileChannel.MapMode.READ_ONLY);
+       READ_WRITE = new AccessMode(FileChannel.MapMode.READ_WRITE);
+       PRIVATE = new AccessMode(FileChannel.MapMode.PRIVATE);
+     }
+ 
+     public static final AccessMode READ_ONLY;
+     public static final AccessMode READ_WRITE; 
+     public static final AccessMode PRIVATE;
+ 
+     private AccessMode(FileChannel.MapMode mode)
+     {
+       this.mapMode = mode;
+     }
+   }
+ 
+   private PersistentByteMap(File name)
+   {
+     this.name = name;
+   }
+ 
+   public PersistentByteMap(String filename, AccessMode mode)
+     throws IOException 
+   {
+     this(new File(filename), mode);
+   }
+ 
+   public PersistentByteMap(File f, AccessMode mode)
+     throws IOException 
+   {
+     name = f;
+ 
+     if (mode == AccessMode.READ_ONLY)
+       {
+         FileInputStream fis = new FileInputStream(f);
+         fc = fis.getChannel();
+       }
+     else
+       {
+         RandomAccessFile fos = new RandomAccessFile(f, "rw");
+         fc = fos.getChannel();
+       }
+ 
+     length = fc.size();
+     buf = fc.map(mode.mapMode, 0, length);
+ 
+     int magic = getWord (MAGIC);
+     if (magic != 0x67636a64) /* "gcjd" */
+       throw new IllegalArgumentException(f.getName());
+ 
+     table_base = getWord (TABLE_BASE);
+     capacity = getWord (CAPACITY);
+     string_base = getWord (STRING_BASE);
+     string_size = getWord (STRING_SIZE);
+     file_size = getWord (FILE_SIZE);
+     elements = getWord (ELEMENTS);
+ 
+     // FIXME:  Insert a bunch of sanity checks here
+   }
+ 
+   private void init (PersistentByteMap m, File f, int capacity, int strtabSize)
+     throws IOException 
+   {
+     f.createNewFile();
+     RandomAccessFile raf = new RandomAccessFile(f, "rw");
+ 
+     {        
+       // The user has explicitly provided a size for the table.
+       // We're going to make that size prime.  This isn't
+       // strictly necessary but it can't hurt.
+       //
+       // We expand the size by 3/2 because the hash table is
+       // intolerably slow when more than 2/3 full.
+       
+       BigInteger size = new BigInteger(Integer.toString(capacity * 3/2));
+       BigInteger two = BigInteger.ONE.add(BigInteger.ONE);
+       
+       if (size.getLowestSetBit() != 0) // A hard way to say isEven()
+ 	size = size.add(BigInteger.ONE);
+     
+       while (! size.isProbablePrime(10))
+ 	size = size.add(two);
+       
+       this.capacity = capacity = size.intValue();
+     }
+ 
+     table_base = 64;
+     string_base = table_base + capacity * TABLE_ENTRY_SIZE;
+     string_size = 0;
+     file_size = string_base;
+     elements = 0;
+ 
+     int totalFileSize = string_base + strtabSize;
+ 
+     // Create the file; this rounds up the size of the file to a fixed
+     // number of 4k pages.
+     byte[] _4k = new byte[4096];
+     for (long i = 0; i < totalFileSize; i+= 4096)
+       raf.write(_4k);
+         
+     fc = raf.getChannel();
+     buf = fc.map(FileChannel.MapMode.READ_WRITE, 0, raf.length());
+ 
+     for (int i = 0; i < capacity; i++)
+       putKeyPos(UNUSED_ENTRY, i);
+         
+     putWord(0x67636a64, MAGIC);
+     putWord(0x01, VERSION);
+     putWord(capacity, CAPACITY);
+     putWord(table_base, TABLE_BASE);
+     putWord(string_base, STRING_BASE);
+     putWord(file_size, FILE_SIZE);
+     putWord(elements, ELEMENTS);
+     buf.force();
+ 
+     length = fc.size();
+     string_size = 0;
+   }     
+ 
+   static public PersistentByteMap 
+   emptyPersistentByteMap(File name, int capacity, int strtabSize)
+     throws IOException 
+   {
+     PersistentByteMap m = new PersistentByteMap(name);
+     m.init(m, name, capacity, strtabSize);
+     return m;
+   }     
+ 
+   private int getWord (int index)
+   {
+     buf.position(index);
+     byte[] wordBuf = new byte[4];
+     buf.get(wordBuf);
+ 
+     int result = (int)wordBuf[0]&0xff;
+     result += ((int)wordBuf[1]&0xff) << 8;
+     result += ((int)wordBuf[2]&0xff) << 16;
+     result += ((int)wordBuf[3]&0xff) << 24;
+     return result;
+   }
+ 
+   private void putWord (int word, int index)
+   {
+     buf.position(index);
+     byte[] wordBuf = new byte[4];
+     wordBuf[0] = (byte)(word);
+     wordBuf[1] = (byte)(word >>> 8);
+     wordBuf[2] = (byte)(word >>> 16);
+     wordBuf[3] = (byte)(word >>> 24);
+     buf.put(wordBuf);
+   }
+ 
+   public Set entrySet()
+   {
+     return null;
+   }
+ 
+   private int getBucket(int n)
+   {
+     return table_base + (2*n * INT_SIZE);
+   }
+ 
+   private int getKeyPos(int n)
+   {
+     return getWord(getBucket(n));
+   }
+   
+   private int getValuePos(int n)
+   {
+     return getWord(getBucket(n) + INT_SIZE);
+   }
+ 
+   private void putKeyPos(int index, int n)
+   {
+     putWord(index, getBucket(n));
+   }
+ 
+   private void putValuePos(int index, int n)
+   {
+     putWord(index, getBucket(n) + INT_SIZE);
+   }
+ 
+   private byte[] getBytes(int n)
+   {
+     int len = getWord (string_base + n);
+     int base = string_base + n + INT_SIZE;
+     byte[] key = new byte[len];
+     buf.position(base);
+     buf.get(key, 0, len);
+     return key;
+   }
+ 
+   private int hash (byte[] b)
+   {    
+     // We assume that the message digest is evenly distributed, so we
+     // only need to use a few bytes of it as the hash function.
+     long hashIndex 
+       = ((b[0]&0xffL)
+          + ((b[1]&0xffL)<<8) 
+          + ((b[2]&0xffL)<<16) 
+          + ((b[3]&0xffL)<<24));
+     long result = hashIndex % (long)capacity;
+     return (int)result;
+   }
+         
+   public byte[] get(byte[] digest)
+   {
+     int hashIndex = hash(digest);
+ 
+     do
+       {
+         int k = getKeyPos(hashIndex);
+         if (k == UNUSED_ENTRY)
+           return null;
+ 
+         if (Arrays.equals ((byte[])digest, getBytes(k)))
+           return getBytes(getValuePos(hashIndex));
+                 
+         // Use linear probing to resolve hash collisions.  This may
+         // not be theoretically as good as open addressing, but it has
+         // good cache behviour.
+         hashIndex++;
+         hashIndex %= capacity;
+       }
+     while (true);
+   }
+ 
+   public void put(byte[] digest, byte[] value)
+     throws IllegalAccessException
+   {
+     int hashIndex = hash(digest);
+ 
+     if (elements >= capacity())
+       throw new IllegalAccessException("Table Full: " + elements);
+ 
+     do
+       {
+         int k = getKeyPos(hashIndex);
+         if (k == UNUSED_ENTRY)
+           {
+             int newKey = addBytes(digest);
+             putKeyPos(newKey, hashIndex);
+             int newValue = addBytes(value);
+             putValuePos(newValue, hashIndex);
+             elements++;
+             putWord(elements, ELEMENTS);            
+             return;
+           }
+         else if (Arrays.equals (digest, getBytes(k)))
+           {
+             int newValue = addBytes((byte[])value);
+             putValuePos(newValue, hashIndex);
+             return;
+           }
+                 
+         hashIndex++;
+         hashIndex %= capacity;
+       }
+     while (true);
+   }
+ 
+   private int addBytes (byte[] data)
+     throws IllegalAccessException
+   {
+     if (data.length > 16)
+       {
+ 	// Keep track of long strings in the hope that we will be able
+ 	// to re-use them.
+ 	if (values == null)
+ 	  {
+ 	    values = new HashMap();
+ 	
+ 	    for (int i = 0; i < capacity; i++)
+ 	      if (getKeyPos(i) != UNUSED_ENTRY)
+ 		{
+ 		  int pos = getValuePos(i);
+ 		  ByteWrapper bytes = new ByteWrapper(getBytes(pos));
+ 		  values.put(bytes, new Integer(pos));
+ 		}
+ 	  }
+ 
+ 	{
+ 	  Object result = values.get(new ByteWrapper(data));
+ 	  if (result != null)
+ 	    {
+ 	      // We already have this value in the string table
+ 	      return ((Integer)result).intValue();
+ 	    }
+ 	}
+       }
+ 
+     if (data.length + INT_SIZE >= this.length)
+       throw new IllegalAccessException("String table Full");
+ 
+     int extent = string_base+string_size;
+     int top = extent;
+     putWord(data.length, extent);
+     extent += INT_SIZE;
+     buf.position(extent);
+     buf.put(data, 0, data.length);
+     extent += data.length;
+     extent += INT_SIZE-1;
+     extent &= ~(INT_SIZE-1); // align
+     string_size = extent - string_base;
+     file_size = extent;
+     putWord (string_size, STRING_SIZE);
+     putWord (file_size, FILE_SIZE);
+ 
+     if (data.length > 16)
+       values.put(new ByteWrapper(data), new Integer(top - string_base));
+         
+     return top - string_base;
+   }
+ 
+   public Iterator iterator(int type)
+   {
+     return new HashIterator(type);
+   }
+ 
+   public int size()
+   {
+     return elements;
+   }
+ 
+   public int stringTableSize()
+   {
+     return string_size;
+   }
+ 
+   public int capacity()
+   {
+     // With the the table 2/3 full there will be on average 2 probes
+     // for a successful search and 5 probes for an unsuccessful one.
+     return capacity * 2/3;
+   }
+ 
+   public void force()
+   {
+     buf.force();
+   }
+ 
+   public File getFile()
+   {
+     return name;
+   }
+ 
+   // Close the map.  Once this has been done, the map can no longer be
+   // used.
+   public void close()
+   {
+     force();
+     fc.close();
+   }
+ 
+   public void 
+   putAll(PersistentByteMap t)
+     throws IllegalAccessException
+   {
+     // We can use a fast copy if the size of a map has not changed.
+     if (this.elements == 0 && t.capacity == this.capacity
+ 	&& t.length == this.length)
+       {
+ 	this.buf.position(0);
+ 	t.buf.position(0);
+ 	this.buf.put(t.buf);
+ 	this.table_base = t.table_base;
+ 	this.string_base = t.string_base;
+ 	this.string_size = t.string_size;
+ 	this.file_size = t.file_size;
+ 	this.elements = t.elements;
+ 	if (t.values != null)
+ 	  this.values = (HashMap)t.values.clone();
+ 	return;
+       }
+ 
+     // Otherwise do it the hard way.
+     Iterator iterator = t.iterator(PersistentByteMap.ENTRIES);
+     while (iterator.hasNext())
+       {
+ 	PersistentByteMap.MapEntry entry 
+ 	  = (PersistentByteMap.MapEntry)iterator.next();
+ 	this.put((byte[])entry.getKey(), (byte[])entry.getValue());
+       }
+   }
+ 	
+ 
+   private final class HashIterator implements Iterator
+   {
+     /** Current index in the physical hash table. */
+ 
+     private int idx;
+     private int count;
+     private final int type;
+ 
+     /**
+      * Construct a new HashIterator with the supplied type.
+      * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
+      */
+     HashIterator(int type)
+     {
+       this.type = type;
+       count = elements;
+       idx = 0;
+     }
+ 
+     /**
+      * 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()
+     {
+       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()
+     {
+       count--;
+       for (int i = idx; i < capacity; i++)
+         if (getKeyPos(i) != UNUSED_ENTRY)
+           {
+             idx = i+1;
+             if (type == VALUES)
+               return getBytes(getValuePos(i));
+             if (type == KEYS)
+               return getBytes(getKeyPos(i));
+             return new MapEntry(i,
+                                 getBytes(getKeyPos(i)),
+                                 getBytes(getValuePos(i)));
+           }
+       return null;
+     }    
+ 
+     /**
+      * 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.
+      */
+      public void remove()
+     {
+       throw new UnsupportedOperationException();
+     }
+   }
+ 
+   static public final class MapEntry
+   {
+     private final Object key;
+     private final Object value;
+     private final int bucket;
+ 
+     public MapEntry(int bucket, Object newKey, Object newValue)
+     {
+       this.key = newKey;
+       this.value = newValue;
+       this.bucket = bucket;
+     }
+ 
+     public final Object getKey()
+     {
+       return key;
+     }
+ 
+     public final Object getValue()
+     {
+       return value;
+     }
+ 
+     public final int getBucket()
+     {
+       return bucket;
+     }
+   }
+ 
+   // A wrapper class for a byte array that allows collections to be
+   // made.
+   private final class ByteWrapper
+   {
+     final byte[] bytes;
+     final int hash;
+ 
+     public ByteWrapper (byte[] bytes)
+     {
+       int sum = 0;
+       this.bytes = bytes;
+       for (int i = 0; i < bytes.length; i++)
+ 	sum += bytes[i];
+       hash = sum;
+     }
+ 
+     public int hashCode()
+     {
+       return hash;
+     }
+   
+     public boolean equals(Object obj)
+     {
+       return Arrays.equals(bytes, ((ByteWrapper)obj).bytes);
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/SharedLibHelper.java gcc-4.0.0/libjava/gnu/gcj/runtime/SharedLibHelper.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/SharedLibHelper.java	Thu Aug 28 22:17:36 2003
--- gcc-4.0.0/libjava/gnu/gcj/runtime/SharedLibHelper.java	Wed Feb 16 21:39:11 2005
***************
*** 1,4 ****
! /* Copyright (C) 2001, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,4 ----
! /* Copyright (C) 2001, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** import java.net.MalformedURLException;
*** 13,18 ****
--- 13,24 ----
  import java.util.HashMap;
  import java.security.*;
  import gnu.gcj.Core;
+ import java.util.Set;
+ import java.util.Iterator;
+ import java.util.HashSet;
+ import java.util.HashMap;
+ import java.nio.channels.FileChannel;
+ import java.io.*;
  
  public class SharedLibHelper
  {
*************** public class SharedLibHelper
*** 22,34 ****
     * @parem flags passed to dlopen
     */
    SharedLibHelper(String libname, ClassLoader parent, CodeSource source,
! 		  int flags)
    {
      // FIXME: ask security manager first.
      loader = parent;
      baseName = libname;
!     domain = new ProtectionDomain(source,
! 				  Policy.getPolicy().getPermissions(source));
      this.flags = flags;
    }
  
--- 28,42 ----
     * @parem flags passed to dlopen
     */
    SharedLibHelper(String libname, ClassLoader parent, CodeSource source,
! 		  ProtectionDomain domain, int flags)
    {
      // FIXME: ask security manager first.
      loader = parent;
      baseName = libname;
!     if (domain == null)
!       domain = new ProtectionDomain(source,
! 				    Policy.getPolicy().getPermissions(source));
!     this.domain = domain;
      this.flags = flags;
    }
  
*************** public class SharedLibHelper
*** 36,69 ****
    {
      synchronized (map)
        {
! 	WeakReference ref = (WeakReference) map.get(libname);
! 	if (ref != null)
! 	  return (SharedLibHelper) ref.get();
  	return null;
        }
    }
  
    public static SharedLibHelper findHelper (ClassLoader loader, String libname,
! 					    CodeSource source)
    {
      synchronized (map)
        {
  	SharedLibHelper result;
! 	WeakReference ref = (WeakReference) map.get(libname);
! 	if (ref != null)
  	  {
! 	    result = (SharedLibHelper) ref.get();
! 	    if (result != null)
  	      {
! 		if (result.loader != loader)
! 		  // FIXME
! 		  throw new UnknownError();
! 		return result;
  	      }
- 	  }
  
! 	result = new SharedLibHelper(libname, loader, source, 0);
! 	map.put(libname, new WeakReference(result));
  	return result;
        }
    }
--- 44,135 ----
    {
      synchronized (map)
        {
! 	Set s = (Set)map.get(libname);
! 	if (s == null)
! 	  return null;
! 	for (Iterator i=s.iterator(); i.hasNext();)
! 	  {
! 	    WeakReference ref = (WeakReference)i.next();
! 	    if (ref != null)
! 	      return (SharedLibHelper) ref.get();
! 	  }
  	return null;
        }
    }
  
+   static void copyFile (File in, File out) throws IOException 
+   {
+     FileChannel source = new FileInputStream(in).getChannel();
+     FileChannel destination = new FileOutputStream(out).getChannel();
+     source.transferTo(0, source.size(), destination);
+     source.close();
+     destination.close();
+   }
+ 
    public static SharedLibHelper findHelper (ClassLoader loader, String libname,
! 					    CodeSource source,
! 					    boolean tryParents)
!   {
!     return findHelper (loader, libname, source, null, tryParents);
!   }
! 
!   public static SharedLibHelper findHelper (ClassLoader loader, String libname,
! 					    CodeSource source,
! 					    ProtectionDomain domain, 
! 					    boolean tryParents)
    {
      synchronized (map)
        {
  	SharedLibHelper result;
! 	Set s = (Set)map.get(libname);
! 	if (s == null)
  	  {
! 	    s = new HashSet();
! 	    map.put(libname, s);
! 	  }
! 	else
! 	  {
! 	    for (Iterator i=s.iterator(); i.hasNext();)
  	      {
! 		WeakReference ref = (WeakReference)i.next();
! 		if (ref != null)
! 		  {
! 		    result = (SharedLibHelper) ref.get();
! 		    if (result != null)
! 		      {			
! 			// A match succeeds if the library is already
! 			// loaded by LOADER or any of its ancestors.
! 			ClassLoader l = loader;
! 			do
! 			  {
! 			    if (result.loader == l)
! 			      return result;
! 			    l = l.getParent();
! 			  }
! 			while (tryParents && l != null);
! 		      }
! 		  }
  	      }
  
! 	    // Oh dear.  We've already mapped this shared library, but
! 	    // with a different class loader.  We need to copy it.
! 	    try
! 	      {
! 		File copy 
! 		  = File.createTempFile(new File(libname).getName(), 
! 					".so", new File ("/tmp"));
! 		File src = new File(libname);
! 		copyFile (src, copy);
! 		copy.deleteOnExit();
! 		libname = copy.getPath();
! 	      }
! 	    catch (IOException e)
! 	      {
! 		return null;
! 	      }
! 	  }
! 	result = new SharedLibHelper(libname, loader, source, domain, 0);
! 	s.add(new WeakReference(result));
  	return result;
        }
    }
*************** public class SharedLibHelper
*** 73,79 ****
    public Class findClass(String name)
    {
      ensureInit();
!     return (Class) classMap.get(name);
    }
  
    public URL findResource (String name)
--- 139,153 ----
    public Class findClass(String name)
    {
      ensureInit();
!     Class result = (Class) classMap.get(name);
!     if (result != null)
!       {
! 	// We never want to return a class without its supers linked.
! 	// It isn't clear from the spec, but this is what other
! 	// implementations do in practice.
! 	ensureSupersLinked(result);
!       }
!     return result;
    }
  
    public URL findResource (String name)
*************** public class SharedLibHelper
*** 106,111 ****
--- 180,191 ----
  
    native boolean hasResource(String name);
    native void init();
+   native void ensureSupersLinked(Class k);
+ 
+   public String toString ()
+   {
+     return "shared object " + baseName;
+   }
  
    /** Called during dlopen's processing of the init section. */
    void registerClass(String name, Class cls)
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/SharedLibLoader.java gcc-4.0.0/libjava/gnu/gcj/runtime/SharedLibLoader.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/SharedLibLoader.java	Thu Aug 28 22:17:36 2003
--- gcc-4.0.0/libjava/gnu/gcj/runtime/SharedLibLoader.java	Wed Feb 16 18:51:20 2005
*************** public class SharedLibLoader extends Cla
*** 39,45 ****
  	url = null;
        }
      helper = SharedLibHelper.findHelper(this, libname,
! 					new CodeSource(url, null));
    }
  
    /** Load a shared library, and asociate a ClassLoader with it.
--- 39,45 ----
  	url = null;
        }
      helper = SharedLibHelper.findHelper(this, libname,
! 					new CodeSource(url, null), true);
    }
  
    /** Load a shared library, and asociate a ClassLoader with it.
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/SystemClassLoader.java gcc-4.0.0/libjava/gnu/gcj/runtime/SystemClassLoader.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/SystemClassLoader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/runtime/SystemClassLoader.java	Wed Feb  2 20:59:39 2005
***************
*** 0 ****
--- 1,57 ----
+ /* Copyright (C) 2005  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ package gnu.gcj.runtime;
+ 
+ import java.io.*;
+ import java.util.StringTokenizer;
+ import java.util.HashSet;
+ import java.net.URL;
+ import java.net.URLClassLoader;
+ 
+ public final class SystemClassLoader extends URLClassLoader
+ {
+   SystemClassLoader(ClassLoader parent)
+   {
+     super(new URL[0], parent);
+   }
+ 
+   // We add the URLs to the system class loader late.  The reason for
+   // this is that during bootstrap we don't want to parse URLs or
+   // create URL connections, since that will result in circularities
+   // causing a crash.
+   void init()
+   {
+     StringTokenizer st
+       = new StringTokenizer (System.getProperty ("java.class.path", "."),
+ 			     File.pathSeparator);
+     while (st.hasMoreElements ()) 
+       {  
+ 	String e = st.nextToken ();
+ 	try
+ 	  {
+ 	    if ("".equals(e))
+ 	      e = ".";
+ 
+ 	    File path = new File(e);
+ 	    // Ignore invalid paths.
+ 	    if (!path.exists())
+ 	      continue;
+ 	    if (!e.endsWith (File.separator) && path.isDirectory ())
+ 	      addURL(new URL("file", "", -1, e + File.separator));
+ 	    else
+ 	      addURL(new URL("file", "", -1, e));
+ 	  } 
+ 	catch (java.net.MalformedURLException x)
+ 	  {
+ 	    // This should never happen.
+ 	    throw new RuntimeException(x);
+ 	  }
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/VMClassLoader.java gcc-4.0.0/libjava/gnu/gcj/runtime/VMClassLoader.java
*** gcc-3.4.3/libjava/gnu/gcj/runtime/VMClassLoader.java	Wed Jan 14 22:49:58 2004
--- gcc-4.0.0/libjava/gnu/gcj/runtime/VMClassLoader.java	Thu Jan  1 00:00:00 1970
***************
*** 1,100 ****
- /* Copyright (C) 1999, 2001, 2002, 2003, 2004  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- /* Author: Kresten Krab Thorup <krab@gnu.org>  */
- 
- package gnu.gcj.runtime;
- 
- import java.io.*;
- import java.util.StringTokenizer;
- import java.util.HashSet;
- import java.net.URL;
- 
- public final class VMClassLoader extends java.net.URLClassLoader
- {
-   private VMClassLoader ()
-   {	
-     super (new URL[0]);
-     String p
-       = System.getProperty ("gnu.gcj.runtime.VMClassLoader.library_control",
- 			    "");
-     if ("never".equals(p))
-       lib_control = LIB_NEVER;
-     else if ("cache".equals(p))
-       lib_control = LIB_CACHE;
-     else if ("full".equals(p))
-       {
- 	// In case we ever want to change the default.
- 	lib_control = LIB_FULL;
-       }
-     else
-       lib_control = LIB_FULL;
-   }
- 
-   private void init() 
-   {
-     StringTokenizer st
- 	= new StringTokenizer (System.getProperty ("java.class.path", "."),
- 			       System.getProperty ("path.separator", ":"));
- 
-     while (st.hasMoreElements ()) 
-       {  
- 	String e = st.nextToken ();
- 	try
- 	  {
- 	    if (!e.endsWith (File.separator) && new File (e).isDirectory ())
- 	      addURL(new URL("file", "", -1, e + File.separator));
- 	    else
- 	      addURL(new URL("file", "", -1, e));
- 	  } 
- 	catch (java.net.MalformedURLException x)
- 	  {
- 	    /* Ignore this path element */
- 	  }
-       }
-     // Add core:/ to the end of the java.class.path so any resources
-     // compiled into this executable may be found.
-     try
-       {
- 	addURL(new URL("core", "", -1, "/"));
-       }
-     catch (java.net.MalformedURLException x)
-       {
- 	// This should never happen.
-       }
-   }
- 
-   /** This is overridden to search the internal hash table, which 
-    * will only search existing linked-in classes.   This will make
-    * the default implementation of loadClass (in ClassLoader) work right.
-    * The implementation of this method is in java/lang/natClassLoader.cc.
-    */
-   protected native Class findClass(String name) 
-     throws java.lang.ClassNotFoundException;
- 
-   // This can be package-private because we only call it from native
-   // code during startup.
-   static void initialize ()
-   {
-     instance.init();
-   }
- 
-   // This keeps track of shared libraries we've already tried to load.
-   private HashSet tried_libraries = new HashSet();
- 
-   // Holds one of the LIB_* constants; used to determine how shared
-   // library loads are done.
-   private int lib_control;
- 
-   // The only VMClassLoader that can exist.
-   static VMClassLoader instance = new VMClassLoader();
- 
-   private static final int LIB_FULL = 0;
-   private static final int LIB_CACHE = 1;
-   private static final int LIB_NEVER = 2;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/natFirstThread.cc gcc-4.0.0/libjava/gnu/gcj/runtime/natFirstThread.cc
*** gcc-3.4.3/libjava/gnu/gcj/runtime/natFirstThread.cc	Wed Oct 22 18:05:57 2003
--- gcc-4.0.0/libjava/gnu/gcj/runtime/natFirstThread.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- // natFirstThread.cc - Implementation of FirstThread native methods.
- 
- /* Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- #include <config.h>
- 
- #include <stdio.h>
- #include <stdlib.h>
- 
- #include <gcj/cni.h>
- #include <jvm.h>
- 
- #include <gnu/gcj/runtime/FirstThread.h>
- 
- typedef void main_func (jobject);
- 
- void
- gnu::gcj::runtime::FirstThread::call_main (void)
- {
-   Utf8Const* main_signature = _Jv_makeUtf8Const ("([Ljava.lang.String;)V", 22);
-   Utf8Const* main_name = _Jv_makeUtf8Const ("main", 4);
- 
-   _Jv_Method *meth = _Jv_LookupDeclaredMethod (klass, main_name,
- 					       main_signature);
- 
-   // Some checks from Java Spec section 12.1.4.
-   const char *msg = NULL;
-   if (meth == NULL)
-     msg = "no suitable method `main' in class";
-   else if (! java::lang::reflect::Modifier::isStatic(meth->accflags))
-     msg = "`main' must be static";
-   else if (! java::lang::reflect::Modifier::isPublic(meth->accflags))
-     msg =  "`main' must be public";
-   if (msg != NULL)
-     {
-       fprintf (stderr, "%s\n", msg);
-       ::exit(1);
-     }
- 
-   main_func *real_main = (main_func *) meth->ncode;
-   (*real_main) (args);
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/natNameFinder.cc gcc-4.0.0/libjava/gnu/gcj/runtime/natNameFinder.cc
*** gcc-3.4.3/libjava/gnu/gcj/runtime/natNameFinder.cc	Fri Nov 14 01:48:29 2003
--- gcc-4.0.0/libjava/gnu/gcj/runtime/natNameFinder.cc	Fri Apr  9 04:39:24 2004
***************
*** 1,6 ****
  // natNameFinder.cc - native helper methods for NameFinder.java
  
! /* Copyright (C) 2002, 2003  Free Software Foundation, Inc
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natNameFinder.cc - native helper methods for NameFinder.java
  
! /* Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc
  
     This file is part of libgcj.
  
*************** details.  */
*** 48,53 ****
--- 48,64 ----
  
  #endif /* ! __USER_LABEL_PREFIX__ */
  
+ java::lang::StackTraceElement*
+ gnu::gcj::runtime::NameFinder::newElement (java::lang::String* fileName,
+                                            jint lineNumber,
+                                            java::lang::String* className,
+                                            java::lang::String* methName,
+                                            jboolean isNative)
+ {
+   return new java::lang::StackTraceElement( fileName, lineNumber,
+                                             className, methName, isNative);
+ }
+                                           
  java::lang::String*
  gnu::gcj::runtime::NameFinder::getExternalLabel (java::lang::String* name)
  {
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/natSharedLibLoader.cc gcc-4.0.0/libjava/gnu/gcj/runtime/natSharedLibLoader.cc
*** gcc-3.4.3/libjava/gnu/gcj/runtime/natSharedLibLoader.cc	Thu Aug 28 22:17:36 2003
--- gcc-4.0.0/libjava/gnu/gcj/runtime/natSharedLibLoader.cc	Wed Jan 19 23:56:27 2005
***************
*** 1,6 ****
  // natSharedLibLoader.cc - Implementation of SharedLibHelper native methods.
  
! /* Copyright (C) 2001, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natSharedLibLoader.cc - Implementation of SharedLibHelper native methods.
  
! /* Copyright (C) 2001, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 12,17 ****
--- 12,19 ----
  
  #include <gcj/cni.h>
  #include <jvm.h>
+ #include <execution.h>
+ 
  #include <gnu/gcj/runtime/SharedLibHelper.h>
  #include <java/io/IOException.h>
  #include <java/lang/UnsupportedOperationException.h>
*************** typedef void (*CoreHookFunc) (_Jv_core_c
*** 30,38 ****
  void
  _Jv_sharedlib_register_hook (jclass cls)
  {
-   curHelper->registerClass(cls->getName(), cls);
    cls->protectionDomain = curHelper->domain;
    cls->loader = curLoader;
  }
  
  static void
--- 32,41 ----
  void
  _Jv_sharedlib_register_hook (jclass cls)
  {
    cls->protectionDomain = curHelper->domain;
    cls->loader = curLoader;
+   cls->engine = &_Jv_soleCompiledEngine;
+   curHelper->registerClass(cls->getName(), cls);
  }
  
  static void
*************** gnu::gcj::runtime::SharedLibHelper::fina
*** 119,124 ****
  {
    _Jv_FreeCoreChain ((_Jv_core_chain *) core_chain);
  #ifdef HAVE_DLOPEN
!   dlclose (handler);
  #endif
  }
--- 122,134 ----
  {
    _Jv_FreeCoreChain ((_Jv_core_chain *) core_chain);
  #ifdef HAVE_DLOPEN
!   if (handler)
!     dlclose (handler);
  #endif
  }
+ 
+ void
+ gnu::gcj::runtime::SharedLibHelper::ensureSupersLinked(jclass k)
+ {
+   _Jv_Linker::wait_for_state (k, JV_STATE_LOADING);
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/natStackTrace.cc gcc-4.0.0/libjava/gnu/gcj/runtime/natStackTrace.cc
*** gcc-3.4.3/libjava/gnu/gcj/runtime/natStackTrace.cc	Thu Oct  2 07:10:34 2003
--- gcc-4.0.0/libjava/gnu/gcj/runtime/natStackTrace.cc	Mon Oct 18 14:07:42 2004
*************** details.  */
*** 45,50 ****
--- 45,55 ----
  #include <unwind.h>
  
  
+ #ifdef INTERPRETER
+ extern "C" void *_Unwind_FindEnclosingFunction (void *pc)
+   __attribute__((pure));
+ #endif // INTERPRETER
+ 
  // Fill in this stack trace with MAXLEN elements starting at offset.
  void
  gnu::gcj::runtime::StackTrace::fillInStackTrace (jint maxlen, jint offset)
*************** gnu::gcj::runtime::StackTrace::fillInSta
*** 58,65 ****
    if (len > 0)
      {
  #ifdef INTERPRETER
!       extern void _Jv_StartOfInterpreter (void);
!       extern void _Jv_EndOfInterpreter (void);
  
        java::lang::Thread *thread = java::lang::Thread::currentThread();
        _Jv_MethodChain *interp_frame
--- 63,70 ----
    if (len > 0)
      {
  #ifdef INTERPRETER
!       extern void *const _Jv_StartOfInterpreter;
!       extern void * _Jv_EndOfInterpreter;
  
        java::lang::Thread *thread = java::lang::Thread::currentThread();
        _Jv_MethodChain *interp_frame
*************** gnu::gcj::runtime::StackTrace::fillInSta
*** 70,85 ****
        frame = (_Jv_frame_info *) _Jv_Malloc (len * sizeof (_Jv_frame_info));
        for (int n = 0; n < len; n++)
  	{
! 	  frame[n].addr = p[n];
  #ifdef INTERPRETER
! 	  if (p[n] >= &_Jv_StartOfInterpreter && p[n] <= &_Jv_EndOfInterpreter)
  	    {
! 	      frame[n].interp = (void *) interp_frame->self;
! 	      interp_frame = interp_frame->next;
  	    }
- 	  else
- 	    frame[n].interp = 0;
  #endif // INTERPRETER
  	}
      }
    else
--- 75,118 ----
        frame = (_Jv_frame_info *) _Jv_Malloc (len * sizeof (_Jv_frame_info));
        for (int n = 0; n < len; n++)
  	{
! 	  void *pc = p[n];
! 	  frame[n].addr = pc;
! 
  #ifdef INTERPRETER
! 	  frame[n].interp = 0;
! 
! 	  // If _Jv_StartOfInterpreter is NULL either we've never
! 	  // entered the intepreter or _Unwind_FindEnclosingFunction
! 	  // is broken.
! 	  if (__builtin_expect (_Jv_StartOfInterpreter != NULL, false))
  	    {
! 	      // _Jv_StartOfInterpreter marks the very first
! 	      // instruction in the interpreter, but
! 	      // _Jv_EndOfInterpreter is an upper bound.  If PC is
! 	      // less than _Jv_EndOfInterpreter it might be in the
! 	      // interpreter: we call _Unwind_FindEnclosingFunction to
! 	      // find out.
! 	      if (pc >= _Jv_StartOfInterpreter
! 		  && (pc < _Jv_EndOfInterpreter
! 		      || _Jv_EndOfInterpreter == NULL))
! 		{
! 		  if (_Unwind_FindEnclosingFunction (pc) 
! 		      == _Jv_StartOfInterpreter)
! 		    {
! 		      frame[n].interp = (void *) interp_frame->self;
! 		      interp_frame = interp_frame->next;
! 		    }
! 		  else
! 		    {
! 		      // We've found an address that we know is not within
! 		      // the interpreter.  We use that to refine our upper
! 		      // bound on where the interpreter ends.
! 		      _Jv_EndOfInterpreter = pc;
! 		    }
! 		}
  	    }
  #endif // INTERPRETER
+ 
  	}
      }
    else
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/runtime/natVMClassLoader.cc gcc-4.0.0/libjava/gnu/gcj/runtime/natVMClassLoader.cc
*** gcc-3.4.3/libjava/gnu/gcj/runtime/natVMClassLoader.cc	Wed Aug 20 15:32:23 2003
--- gcc-4.0.0/libjava/gnu/gcj/runtime/natVMClassLoader.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,77 ****
- // Native code for VMClassLoader
- 
- /* Copyright (C) 2002, 2003  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- #include <config.h>
- 
- #include <gcj/cni.h>
- #include <jvm.h>
- 
- #include <gnu/gcj/runtime/VMClassLoader.h>
- #include <java/lang/Class.h>
- #include <java/lang/StringBuffer.h>
- #include <java/net/URLClassLoader.h>
- #include <java/lang/Runtime.h>
- #include <java/util/HashSet.h>
- 
- jclass
- gnu::gcj::runtime::VMClassLoader::findClass (jstring name)
- {
-   _Jv_Utf8Const *name_u = _Jv_makeUtf8Const (name);
-   jclass klass = _Jv_FindClassInCache (name_u, 0);
- 
-   if (! klass && lib_control != LIB_NEVER)
-     {
-       // Turn `gnu.pkg.quux' into `lib-gnu-pkg-quux'.  Then search for
-       // a module named (eg, on Linux) `lib-gnu-pkg-quux.so', followed
-       // by `lib-gnu-pkg.so' and `lib-gnu.so'.  If loading one of
-       // these causes the class to appear in the cache, then use it.
-       java::lang::StringBuffer *sb = new java::lang::StringBuffer (JvNewStringLatin1("lib-"));
-       // Skip inner classes
-       jstring cn;
-       jint ci = name->indexOf('$');
-       if (ci == -1)
- 	cn = name;
-       else
- 	cn = name->substring (0, ci);
-       jstring so_base_name = (sb->append (cn)->toString ())->replace ('.', '-');
- 
-       using namespace ::java::lang;
-       Runtime *rt = Runtime::getRuntime();
- 
-       // Compare against `3' because that is the length of "lib".
-       while (! klass && so_base_name && so_base_name->length() > 3)
- 	{
- 	  if (lib_control == LIB_CACHE)
- 	    {
- 	      // If we've already tried this name, we're done.
- 	      if (tried_libraries->contains(so_base_name))
- 		break;
- 	      tried_libraries->add(so_base_name);
- 	    }
- 
- 	  jboolean loaded = rt->loadLibraryInternal (so_base_name);
- 
- 	  jint nd = so_base_name->lastIndexOf ('-');
- 	  if (nd == -1)
- 	    so_base_name = NULL;
- 	  else
- 	    so_base_name = so_base_name->substring (0, nd);
- 
- 	  if (loaded)
- 	    klass = _Jv_FindClassInCache (name_u, 0);
- 	}
-     }
- 
-   // Now try loading using the interpreter.
-   if (! klass)
-     klass = java::net::URLClassLoader::findClass (name);
- 
-   return klass;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/tools/gcj_dbtool/Main.java gcc-4.0.0/libjava/gnu/gcj/tools/gcj_dbtool/Main.java
*** gcc-3.4.3/libjava/gnu/gcj/tools/gcj_dbtool/Main.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/tools/gcj_dbtool/Main.java	Wed Apr  6 14:59:19 2005
***************
*** 0 ****
--- 1,535 ----
+ /* Copyright (C) 2004, 2005  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ package gnu.gcj.tools.gcj_dbtool;
+ 
+ 
+ import gnu.gcj.runtime.PersistentByteMap;
+ import java.io.*;
+ import java.nio.channels.*;
+ import java.util.*;
+ import java.util.jar.*;
+ import java.security.MessageDigest;
+ 
+ public class Main
+ {
+   static private boolean verbose = false;
+ 
+   public static void main (String[] s)
+   {
+     boolean fileListFromStdin = false;
+     char filenameSeparator = ' ';
+ 
+     insist (s.length >= 1);
+ 
+     if (s[0].equals("-") ||
+ 	s[0].equals("-0"))
+       {
+ 	if (s[0].equals("-0"))
+ 	  filenameSeparator = (char)0;
+ 	fileListFromStdin = true;
+ 	String[] newArgs = new String[s.length - 1];
+ 	System.arraycopy(s, 1, newArgs, 0, s.length - 1);
+ 	s = newArgs;
+       }
+ 
+     if (s[0].equals("-v") || s[0].equals("--version"))
+       {
+ 	insist (s.length == 1);
+ 	System.out.println("gcj-dbtool ("
+ 			   + System.getProperty("java.vm.name")
+ 			   + ") "
+ 			   + System.getProperty("java.vm.version"));
+ 	System.out.println();
+ 	System.out.println("Copyright 2005 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.");
+ 	return;
+       }
+     if (s[0].equals("--help"))
+       {
+ 	usage(System.out);
+ 	return;
+       }
+ 
+     if (s[0].equals("-n"))
+       {
+ 	// Create a new database.
+ 	insist (s.length >= 2 && s.length <= 3);
+ 
+ 	int capacity = 32749;
+ 
+ 	if (s.length == 3)
+ 	  {	    
+ 	    capacity = Integer.parseInt(s[2]);
+ 
+ 	    if (capacity <= 2)
+ 	      {
+ 		usage(System.err);
+ 		System.exit(1);
+ 	      }
+ 	  }
+ 	    
+ 	try
+ 	  {
+ 	    PersistentByteMap b 
+ 	      = PersistentByteMap.emptyPersistentByteMap(new File(s[1]), 
+ 							 capacity, capacity*32);
+ 	  }
+ 	catch (Exception e)
+ 	  {
+ 	    System.err.println ("error: could not create " 
+ 				+ s[1] + ": " + e.toString());
+ 	    System.exit(2);
+ 	  }
+ 	return;
+       }
+ 
+     if (s[0].equals("-a") || s[0].equals("-f"))
+       {
+ 	// Add a jar file to a database, creating it if necessary.
+ 	// Copies the database, adds the jar file to the copy, and
+ 	// then renames the new database over the old.
+ 	try
+ 	  {
+ 	    insist (s.length == 4);
+ 	    File database = new File(s[1]);
+ 	    database = database.getAbsoluteFile();
+ 	    File jar = new File(s[2]);	
+ 	    PersistentByteMap map; 
+ 	    if (database.isFile())
+ 	      map = new PersistentByteMap(database, 
+ 					  PersistentByteMap.AccessMode.READ_ONLY);
+ 	    else
+ 	      map = PersistentByteMap.emptyPersistentByteMap(database, 
+ 							     100, 100*32);
+ 	    File soFile = new File(s[3]);
+ 	    if (! s[0].equals("-f") && ! soFile.isFile())
+ 	      throw new IllegalArgumentException(s[3] + " is not a file");
+  	    map = addJar(jar, map, soFile);
+ 	  }
+ 	catch (Exception e)
+ 	  {
+ 	    System.err.println ("error: could not update " + s[1] 
+ 				+ ": " + e.toString());
+ 	    System.exit(2);
+ 	  }
+ 	return;
+       }
+ 
+     if (s[0].equals("-t"))
+       {
+ 	// Test
+ 	try
+ 	  {
+ 	    insist (s.length == 2);
+ 	    PersistentByteMap b 
+ 	      = new PersistentByteMap(new File(s[1]),
+ 				      PersistentByteMap.AccessMode.READ_ONLY);
+ 	    Iterator iterator = b.iterator(PersistentByteMap.ENTRIES);
+ 	
+ 	    while (iterator.hasNext())
+ 	      {
+ 		PersistentByteMap.MapEntry entry 
+ 		  = (PersistentByteMap.MapEntry)iterator.next();
+ 		byte[] key = (byte[])entry.getKey();
+ 		byte[] value = (byte[])b.get(key);
+ 		if (! Arrays.equals (value, (byte[])entry.getValue()))
+ 		  {
+ 		    String err 
+ 		      = ("Key " + bytesToString(key) + " at bucket " 
+ 			 + entry.getBucket());
+ 		  
+ 		    throw new RuntimeException(err);
+ 		  }
+ 	      }
+ 	  }
+ 	catch (Exception e)
+ 	  {
+ 	    e.printStackTrace();
+ 	    System.exit(3);
+ 	  }
+ 	return;
+       }
+ 	 
+     if (s[0].equals("-m"))
+       {
+ 	// Merge databases.
+ 	insist (s.length >= 3
+ 		|| fileListFromStdin && s.length == 2);
+ 	try
+ 	  {
+ 	    File database = new File(s[1]);
+ 	    database = database.getAbsoluteFile();
+ 	    File temp = File.createTempFile(database.getName(), "", 
+ 					    database.getParentFile());
+ 	    	
+ 	    int newSize = 0;
+ 	    int newStringTableSize = 0;
+ 	    Fileset files = getFiles(s, 2, fileListFromStdin, 
+ 				     filenameSeparator);
+ 	    PersistentByteMap[] sourceMaps 
+ 	      = new PersistentByteMap[files.size()];
+ 
+ 	    // Scan all the input files, calculating worst case string
+ 	    // table and hash table use.
+ 	    {
+ 	      Iterator it = files.iterator();
+ 	      int i = 0;
+ 	      while (it.hasNext())
+ 		{
+ 		  PersistentByteMap b 
+ 		    = new PersistentByteMap((File)it.next(),
+ 					    PersistentByteMap.AccessMode.READ_ONLY);
+ 		  newSize += b.size();
+ 		  newStringTableSize += b.stringTableSize();
+ 		  sourceMaps[i++] = b;
+ 		}
+ 	    }
+ 	    
+ 	    newSize *= 1.5; // Scaling the new size by 1.5 results in
+ 			    // fewer collisions.
+ 	    PersistentByteMap map 
+ 	      = PersistentByteMap.emptyPersistentByteMap
+ 	      (temp, newSize, newStringTableSize);
+ 
+ 	    for (int i = 0; i < sourceMaps.length; i++)
+ 	      {
+ 		if (verbose)
+ 		  System.err.println("adding " + sourceMaps[i].size() 
+ 				     + " elements from "
+ 				     + sourceMaps[i].getFile());
+ 		map.putAll(sourceMaps[i]);
+ 	      }
+ 	    map.close();
+ 	    temp.renameTo(database);
+ 	  }
+ 	catch (Exception e)
+ 	  {
+ 	    e.printStackTrace();
+ 	    System.exit(3);
+ 	  }
+ 	return;
+       }
+ 
+     if (s[0].equals("-l"))
+       {
+ 	// List a database.
+ 	insist (s.length == 2);
+ 	try
+ 	  {
+ 	    PersistentByteMap b 
+ 	      = new PersistentByteMap(new File(s[1]),
+ 				      PersistentByteMap.AccessMode.READ_ONLY);
+ 
+ 	    System.out.println ("Capacity: " + b.capacity());
+ 	    System.out.println ("Size: " + b.size());
+ 	    System.out.println ();
+ 
+ 	    System.out.println ("Elements: ");
+ 	    Iterator iterator = b.iterator(PersistentByteMap.ENTRIES);
+     
+ 	    while (iterator.hasNext())
+ 	      {
+ 		PersistentByteMap.MapEntry entry 
+ 		  = (PersistentByteMap.MapEntry)iterator.next();
+ 		byte[] digest = (byte[])entry.getKey();
+ 		System.out.print ("[" + entry.getBucket() + "] " 
+ 				  + bytesToString(digest)
+ 				  + " -> ");
+ 		System.out.println (new String((byte[])entry.getValue()));
+ 	      }
+ 	  }
+ 	catch (Exception e)
+ 	  {
+ 	    System.err.println ("error: could not list " 
+ 				+ s[1] + ": " + e.toString());
+ 	    System.exit(2);
+ 	  }
+ 	return;
+       }
+ 
+     if (s[0].equals("-d"))
+       {
+ 	// For testing only: fill the byte map with random data.
+ 	insist (s.length == 2);
+ 	try
+ 	  {    
+ 	    MessageDigest md = MessageDigest.getInstance("MD5");
+ 	    PersistentByteMap b 
+ 	      = new PersistentByteMap(new File(s[1]), 
+ 				      PersistentByteMap.AccessMode.READ_WRITE);
+ 	    int N = b.capacity();
+ 	    byte[] bytes = new byte[1];
+ 	    byte digest[] = md.digest(bytes);
+ 	    for (int i = 0; i < N; i++)
+ 	      {
+ 		digest = md.digest(digest);
+ 		b.put(digest, digest);
+ 	      }
+ 	  }
+ 	catch (Exception e)
+ 	  {
+ 	    e.printStackTrace();
+ 	    System.exit(3);
+ 	  }	    
+ 	return;
+       }
+ 
+     if (s[0].equals("-p"))
+       {
+ 	insist (s.length == 1 || s.length == 2);
+ 	String result;
+ 	
+ 	if (s.length == 1)
+ 	  result = System.getProperty("gnu.gcj.precompiled.db.path", "");
+ 	else 
+ 	  result = (s[1] 
+ 		    + (s[1].endsWith(File.separator) ? "" : File.separator)
+ 		    + getDbPathTail ());
+ 
+ 	System.out.println (result);
+ 	return;
+       }
+ 
+     usage(System.err);
+     System.exit(1);	    
+   }
+ 
+   private static native String getDbPathTail ();
+     
+   private static void insist(boolean ok)
+   {
+     if (! ok)
+       {
+ 	usage(System.err);
+ 	System.exit(1);
+       }	    
+   }
+ 
+   private static void usage(PrintStream out)
+   {
+     out.println
+       ("gcj-dbtool: Manipulate gcj map database files\n"
+        + "\n"
+        + "  Usage: \n"
+        + "    gcj-dbtool -n file.gcjdb [size]     - Create a new gcj map database\n"
+        + "    gcj-dbtool -a file.gcjdb file.jar file.so\n"
+        + "            - Add the contents of file.jar to a gcj map database\n"
+        + "    gcj-dbtool -f file.gcjdb file.jar file.so\n"
+        + "            - Add the contents of file.jar to a gcj map database\n"
+        + "    gcj-dbtool -t file.gcjdb            - Test a gcj map database\n"
+        + "    gcj-dbtool -l file.gcjdb            - List a gcj map database\n"
+        + "    gcj-dbtool [-][-0] -m dest.gcjdb [source.gcjdb]...\n"
+        + "            - Merge gcj map databases into dest\n"
+        + "              Replaces dest\n"
+        + "              To add to dest, include dest in the list of sources\n"
+        + "              If the first arg is -, read the list from stdin\n"
+        + "              If the first arg is -0, filenames separated by nul\n"
+        + "    gcj-dbtool -p [LIBDIR]              - Print default database name"
+        );
+   }
+ 
+   // Add a jar to a map.  This copies the map first and returns a
+   // different map that contains the data.  The original map is
+   // closed.
+ 
+   private static PersistentByteMap 
+   addJar(File f, PersistentByteMap b, File soFile)
+     throws Exception
+   {
+     MessageDigest md = MessageDigest.getInstance("MD5");
+ 
+     JarFile jar = new JarFile (f);
+ 
+     int count = 0;
+     {
+       Enumeration entries = jar.entries();      
+       while (entries.hasMoreElements())
+ 	{
+ 	  JarEntry classfile = (JarEntry)entries.nextElement();
+ 	  if (classfile.getName().endsWith(".class"))
+ 	    count++;
+ 	}
+     }
+ 
+     if (verbose)
+       System.err.println("adding " + count + " elements from "
+ 			 + f + " to " + b.getFile());
+     
+     // Maybe resize the destination map.  We're allowing plenty of
+     // extra space by using a loadFactor of 2.  
+     b = resizeMap(b, (b.size() + count) * 2, true);
+ 
+     Enumeration entries = jar.entries();
+ 
+     byte[] soFileName = soFile.getCanonicalPath().getBytes("UTF-8");
+     while (entries.hasMoreElements())
+       {
+ 	JarEntry classfile = (JarEntry)entries.nextElement();
+ 	if (classfile.getName().endsWith(".class"))
+ 	  {
+ 	    InputStream str = jar.getInputStream(classfile);
+ 	    long length = classfile.getSize();
+ 	    if (length == -1)
+ 	      throw new EOFException();
+ 
+ 	    byte[] data = new byte[length];
+ 	    int pos = 0;
+ 	    while (length - pos > 0)
+ 	      {
+ 		int len = str.read(data, pos, (int)(length - pos));
+ 		if (len == -1)
+ 		  throw new EOFException("Not enough data reading from: "
+ 					 + classfile.getName());
+ 		pos += len;
+ 	      }
+ 	    b.put(md.digest(data), soFileName);
+ 	  }
+       }
+     return b;
+   }    
+ 
+   // Resize a map by creating a new one with the same data and
+   // renaming it.  If close is true, close the original map.
+ 
+   static PersistentByteMap resizeMap(PersistentByteMap m, int newCapacity, boolean close)
+     throws IOException, IllegalAccessException
+   {
+     newCapacity = Math.max(m.capacity(), newCapacity);
+     File name = m.getFile();
+     File copy = File.createTempFile(name.getName(), "", name.getParentFile());
+     try
+       {
+ 	PersistentByteMap dest 
+ 	  = PersistentByteMap.emptyPersistentByteMap
+ 	  (copy, newCapacity, newCapacity*32);
+ 	dest.putAll(m);
+ 	dest.force();
+ 	if (close)
+ 	  m.close();
+ 	copy.renameTo(name);
+ 	return dest;
+       }
+     catch (Exception e)
+       {
+ 	copy.delete();
+       }
+     return null;
+   }
+     
+ 	 
+   static String bytesToString(byte[] b)
+   {
+     StringBuffer hexBytes = new StringBuffer();
+     int length = b.length;
+     for (int i = 0; i < length; ++i)
+       hexBytes.append(Integer.toHexString(b[i] & 0xff));
+     return hexBytes.toString();
+   }
+ 
+ 
+   // Return a Fileset, either from a String array or from System.in,
+   // depending on fileListFromStdin.
+   private static final Fileset getFiles(String[] s, int startPos,
+ 					boolean fileListFromStdin,
+ 					char separator)
+   {
+     if (fileListFromStdin)
+       return new Fileset(System.in, separator);
+     else
+       return new Fileset(s, startPos, s.length);
+   }
+ }
+ 
+ // Parse a stream into tokens.  The separator can be any char, and
+ // space is equivalent to any whitepace character.
+ class Tokenizer
+ {
+   final Reader r;
+   final char separator;
+ 
+   Tokenizer(Reader r, char separator)
+   {
+     this.r = r;
+     this.separator = separator;
+   }
+ 
+   boolean isSeparator(int c)
+   {
+     if (Character.isWhitespace(separator))
+       return Character.isWhitespace((char)c);
+     else
+       return c == separator;
+   }
+ 
+   // Parse a token from the input stream.  Return the empty string
+   // when the stream is exhausted.
+   String nextToken ()
+   {
+     StringBuffer buf = new StringBuffer();
+     int c;
+     try
+       {
+ 	while ((c = r.read()) != -1)
+ 	  {
+ 	    if (! isSeparator(c))
+ 	      {
+ 		buf.append((char)c);
+ 		break;
+ 	      }
+ 	  }
+ 	while ((c = r.read()) != -1)
+ 	  {
+ 	    if (isSeparator(c))
+ 	      break;
+ 	    else
+ 	      buf.append((char)c);
+ 	  }
+       }
+     catch (java.io.IOException e)
+       {
+       }
+     return buf.toString();
+   }
+ }
+ 
+ // A Fileset is a container for a set of files; it can be created
+ // either from a string array or from an input stream, given a
+ // separator character.
+ class Fileset
+ {
+   LinkedHashSet files = new LinkedHashSet();
+   
+   Fileset (String[] s, int start, int end)
+   {
+     for (int i = start; i < end; i++)
+       {
+ 	files.add(new File(s[i]));
+       }
+   }
+ 
+   Fileset (InputStream is, char separator)
+   {
+     Reader r = new BufferedReader(new InputStreamReader(is));
+     Tokenizer st = new Tokenizer(r, separator);
+     String name;
+     while (! "".equals(name = st.nextToken()))
+       files.add(new File(name));
+   }
+ 
+   Iterator iterator()
+   {
+     return files.iterator();
+   }
+ 
+   int size()
+   {
+     return files.size();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/tools/gcj_dbtool/natMain.cc gcc-4.0.0/libjava/gnu/gcj/tools/gcj_dbtool/natMain.cc
*** gcc-3.4.3/libjava/gnu/gcj/tools/gcj_dbtool/natMain.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/tools/gcj_dbtool/natMain.cc	Fri Mar 25 00:05:30 2005
***************
*** 0 ****
--- 1,24 ----
+ // natMain -- gcj-dbtool native code.
+ 
+ /* Copyright (C) 2005  Free Software Foundation
+ 
+    This file is part of gcj-dbtool.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ /* Author: Anthony Green <green@redhat.com>.  */
+ 
+ #include <config.h>
+ 
+ #include <gcj/cni.h>
+ #include <jvm.h>
+ 
+ #include <gnu/gcj/tools/gcj_dbtool/Main.h>
+ 
+ java::lang::String *
+ gnu::gcj::tools::gcj_dbtool::Main::getDbPathTail ()
+ {
+   return JvNewStringLatin1 (LIBGCJ_DEFAULT_DATABASE_PATH_TAIL);
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/util/Debug.java gcc-4.0.0/libjava/gnu/gcj/util/Debug.java
*** gcc-3.4.3/libjava/gnu/gcj/util/Debug.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/util/Debug.java	Thu Nov 25 11:50:45 2004
***************
*** 0 ****
--- 1,226 ----
+ /*  Copyright (C) 2004  Free Software Foundation
+ 
+ This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ /* Utility methods that allow an object to be converted to a textual
+    representation on an OutputStream.  The intention here is that this
+    class be used for debugging, so we provide information about all
+    fields, public or otherwise. */
+ 
+ package gnu.gcj.util;
+ 
+ import java.lang.reflect.*;
+ import java.io.*;
+ import java.util.*;
+ 
+ class Debug 
+ {
+   private final PrintStream p;
+   private final int maxdepth;
+   private final int maxArrayLength;
+   private final boolean printStaticFields;
+   private int depth; 
+ 
+   Debug(PrintStream writer, int maxdepth, int maxArrayLength, boolean printStaticFields)
+   {
+     p = writer;
+     this.maxdepth = maxdepth;
+     this.maxArrayLength = maxArrayLength;
+     this.printStaticFields = printStaticFields;
+   }
+ 
+   Debug(PrintStream writer)
+   {
+     this(writer, 0, 10, false);
+   }
+ 
+   Debug(int maxdepth, boolean printStaticFields)
+   {
+     this(new PrintStream
+ 	 (new FileOutputStream(FileDescriptor.err), true), 
+ 	 maxdepth, 
+ 	 maxdepth > 0 ? 1000 : 10, printStaticFields);
+   }
+ 
+   Debug(int maxdepth)
+   {
+     this(maxdepth, false);
+   }
+ 
+   Debug()
+   {
+     this(0, false);
+   }
+   
+   private final void indent()
+   {
+     for (int i = 0; i < depth; i++)
+       p.print("  ");
+   }
+ 
+   private final java.util.IdentityHashMap h = 
+   new java.util.IdentityHashMap();
+ 
+   private static native Field[] getDeclaredFields(Class c);
+   private static native Object getField(Object o, Field f);
+   private static native long getAddr(Object o);
+ 
+   // Return an array containing all the fields of a class and its
+   // superclasses.
+   private Field[] internalGetFields(Class c)
+   {
+     HashSet set = new HashSet();
+     set.addAll(Arrays.asList(getDeclaredFields(c)));
+     Class[] interfaces = c.getInterfaces();
+     for (int i = 0; i < interfaces.length; i++)
+       set.addAll(Arrays.asList(internalGetFields(interfaces[i])));
+     Class superClass = c.getSuperclass();
+     if (superClass != null)
+       set.addAll(Arrays.asList(internalGetFields(superClass)));
+     return (Field[])set.toArray(new Field[set.size()]);
+   }
+ 
+   // FIXME: We could just use getClass() here, but this is a
+   // workaround for a C++ bug that is causing getClass() to be
+   // miscompiled.
+   static private Class getItsClass(Object O)
+   {
+     return O.getClass();
+   }
+ 
+   // Print a reasonably readable textual representation of an object
+   // on our OutputStream.  Objects are only printed once, no matter
+   // how many references point to them.
+   private void print(Object O)
+   {
+     int savedDepth = depth;
+     h.put(O, O);
+     try
+       {
+ 	Class C = getItsClass(O);
+ 	p.print(C.getName() + "@");
+ 	p.println(Long.toHexString(getAddr(O)));
+ 
+ 	if (C.isArray())
+ 	  {
+ 	    indent(); p.println("{");
+ 	    depth++;
+ 	    indent();
+ 	    C = C.getComponentType();
+ 
+ 	    int len = Array.getLength(O);
+ 	    for (int i = 0; i < len; i++)
+ 	      {
+ 		Object thing = Array.get(O, i);
+ 		print0(thing, C);
+ 		p.print(", ");
+ 		if (i > maxArrayLength)
+ 		  {
+ 		    p.print("...");
+ 		    break;
+ 		  }
+ 	      }
+ 	    depth--;
+ 	    p.println();
+ 	    indent(); p.print("}");
+ 	    return;
+ 	  }
+ 
+ 	indent(); p.println("{");
+ 	depth++;
+ 	if (C == java.lang.Class.class)
+ 	  {
+ 	    indent();
+ 	    p.println ("class = " + O.toString() + ",");
+ 	  }
+ 	else if (C == java.lang.reflect.Field.class)
+ 	  {
+ 	    indent();
+ 	    p.println ("<field> = \"" + O.toString() + "\",");
+ 	  }
+ 	else if (C == java.lang.String.class)
+ 	  {
+ 	    indent();
+ 	    p.println ("<string> = \"" + O.toString() + "\",");
+ 	  }
+ 	Field[] f = internalGetFields(C);
+ 	for (int i = 0; i < f.length; i++)
+ 	  {
+ 	    Class type = f[i].getType();
+ 	    boolean isStatic = (f[i].getModifiers() & Modifier.STATIC) != 0;
+  
+ 	    if (isStatic && ! printStaticFields)
+ 	      continue;
+ 
+ 	    indent();
+ 	    if (isStatic)
+ 	      p.print("static ");
+ 	    p.print(type.getName() +" " +f[i].getName() + " = ");
+ 	    Object thing = getField(O, f[i]);
+ 	    print0(thing, type);
+ 	    p.println(",");
+ 	  }
+ 	depth--;
+ 	indent(); p.print("}");
+       }
+     catch (Throwable t)
+       {
+ 	p.print("error: 0x" + Long.toHexString(getAddr(O)) + ";");
+ 	depth = savedDepth;
+       }
+   }
+ 
+   private void print0(Object thing, Class C)
+   {
+     try
+       {
+ 	if (thing == null)
+ 	  {
+ 	    p.print("null");
+ 	    return;
+ 	  }
+ 	else if (C == gnu.gcj.RawData.class || 
+ 		 C == gnu.gcj.RawDataManaged.class)
+ 	  {
+ 	  }
+ 	else if (C.isPrimitive())
+ 	  {
+ 	    if (getItsClass(thing) == Character.class)				
+ 	      p.print("'" + thing + "'");
+ 	    else
+ 	      p.print(thing);
+ 	    return;
+ 	  }
+ 	else if (getItsClass(thing) == String.class)
+ 	  {			  
+ 	    p.print("\"" + thing + "\"");
+ 	    return;
+ 	  }
+ 	else if (depth < maxdepth && h.get(thing) == null)
+ 	  {
+ 	    depth++;
+ 	    print(thing);
+ 	    depth--;
+ 	    return;
+ 	  }
+       }
+     catch (Throwable t)
+       {
+       }
+     
+     // The default action: just print the address.
+     p.print("0x"+ Long.toHexString(getAddr(thing)));    
+   }
+ 
+   // Print the textual representation of an object on System.err.
+   public void write(Object O)
+   {
+     depth = 0;
+     print(O);
+     p.flush();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/util/natDebug.cc gcc-4.0.0/libjava/gnu/gcj/util/natDebug.cc
*** gcc-3.4.3/libjava/gnu/gcj/util/natDebug.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/gcj/util/natDebug.cc	Fri Nov 26 02:27:53 2004
***************
*** 0 ****
--- 1,118 ----
+ // natDebug -- C++ side of Debug
+ 
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #include <config.h>
+ #include <stddef.h>
+ #include <gcj/cni.h>
+ #include <gcj/field.h>
+ #include <gcj/javaprims.h>
+ #include <java/lang/reflect/Field.h>
+ #include <java/lang/Class.h>
+ #include <java/lang/Byte.h>
+ #include <java/lang/Short.h>
+ #include <java/lang/Integer.h>
+ #include <java/lang/Long.h>
+ #include <java/lang/Float.h>
+ #include <java/lang/Double.h>
+ #include <java/lang/Boolean.h>
+ #include <java/lang/Character.h>
+ #include <java/lang/IllegalArgumentException.h>
+ 
+ #include <gnu/gcj/util/Debug.h>
+ 
+ jlong 
+ gnu::gcj::util::Debug::getAddr (::java::lang::Object *o)
+ {
+   return (jlong)(size_t)o;
+ }
+ 
+ JArray< ::java::lang::reflect::Field *> *
+ gnu::gcj::util::Debug::getDeclaredFields (::java::lang::Class *c)
+ {
+   return c->getDeclaredFields (false);
+ }
+ 
+ static void *
+ getField (::java::lang::Object *obj, 
+ 	  ::java::lang::reflect::Field *field)
+ {
+   using namespace java::lang::reflect;
+   
+   jfieldID fld = _Jv_FromReflectedField (field);
+   _Jv_ushort flags = fld->getModifiers();
+ 
+   if (flags & Modifier::STATIC)
+     {
+       jclass fldClass = field->getDeclaringClass ();
+       JvInitClass(fldClass);
+       return (void*) fld->u.addr;
+     }
+   else
+     {
+       return (void*) ((char*) obj + fld->getOffset ());
+     }
+ }
+ 
+ ::java::lang::Object *
+ gnu::gcj::util::Debug::getField (::java::lang::Object *o, 
+ 				   ::java::lang::reflect::Field *field)
+ {
+   void *addr = ::getField (o, field);
+ 
+   jclass type = field->getType();
+   if (! type->isPrimitive ())
+     return * (jobject*) addr;
+   if (type == JvPrimClass (double))
+     return new java::lang::Double (* (jdouble*) addr);
+   if (type == JvPrimClass (float))
+     return new java::lang::Float (* (jfloat*) addr);
+   if (type == JvPrimClass (long))
+     return new java::lang::Long (* (jlong*) addr);
+   if (type == JvPrimClass (int))
+     return new java::lang::Integer (* (jint*) addr);
+   if (type == JvPrimClass (short))
+     return new java::lang::Short (* (jshort*) addr);
+   if (type == JvPrimClass (byte))
+     return new java::lang::Byte (* (jbyte*) addr);
+   if (type == JvPrimClass (char))
+     return new java::lang::Character (* (jchar*) addr);
+   if (type == JvPrimClass (boolean))
+     {
+       _Jv_InitClass (&java::lang::Boolean::class$);
+       if (* (jboolean*) addr)
+ 	return java::lang::Boolean::TRUE;
+       else
+ 	return java::lang::Boolean::FALSE;
+     }
+   throw new java::lang::IllegalArgumentException;
+ }
+ 
+ /* A simple method of printing an object that can be called from a
+    debugger.  */
+ extern "C"
+ void
+ _Jv_Debug (void *p)
+ {
+   (new ::gnu::gcj::util::Debug ())->write ((jobject)p);
+ }
+ 
+ extern "C"
+ void
+ _Jv_DeepDebug (void *p, int depth)
+ {
+   (new ::gnu::gcj::util::Debug (depth))->write ((jobject)p);
+ }
+ 
+ extern "C"
+ void
+ _Jv_StaticDeepDebug (void *p, int depth)
+ {
+   (new ::gnu::gcj::util::Debug (depth, true))->write ((jobject)p);
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/xlib/GC.java gcc-4.0.0/libjava/gnu/gcj/xlib/GC.java
*** gcc-3.4.3/libjava/gnu/gcj/xlib/GC.java	Fri Dec  5 22:10:16 2003
--- gcc-4.0.0/libjava/gnu/gcj/xlib/GC.java	Mon Jul 12 16:26:07 2004
*************** public class GC implements Cloneable
*** 132,137 ****
--- 132,142 ----
    public native void clearArea(int x, int y, int w, int h,
  			       boolean exposures);
  
+   /** Draw a point using the current foreground color
+    * @param x The x coordinate at which to draw
+    * @param t The y coordinate at which to draw
+    */
+   public native void drawPoint (int x, int y);
  
    public native void putImage(XImage image,
  			      int srcX, int srcY,
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/xlib/XAnyEvent.java gcc-4.0.0/libjava/gnu/gcj/xlib/XAnyEvent.java
*** gcc-3.4.3/libjava/gnu/gcj/xlib/XAnyEvent.java	Sat Nov  8 01:23:47 2003
--- gcc-4.0.0/libjava/gnu/gcj/xlib/XAnyEvent.java	Wed Feb 16 20:01:12 2005
*************** public final class XAnyEvent
*** 70,76 ****
    /**
     * Load next event into the event structure.
     */
!   public native void loadNext();
  
    public native int getType();
    public native void setType(int type);
--- 70,77 ----
    /**
     * Load next event into the event structure.
     */
!   public native boolean loadNext(boolean block);
!   public native void interrupt();
  
    public native int getType();
    public native void setType(int type);
*************** public final class XAnyEvent
*** 86,91 ****
--- 87,93 ----
    public native void send(Window destination, boolean propagate,
  			  long mask);
  
+   RawData pipefds;
    RawData structure;
    Display display;
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/xlib/natGC.cc gcc-4.0.0/libjava/gnu/gcj/xlib/natGC.cc
*** gcc-3.4.3/libjava/gnu/gcj/xlib/natGC.cc	Fri Dec  5 22:10:16 2003
--- gcc-4.0.0/libjava/gnu/gcj/xlib/natGC.cc	Mon Jul 12 16:26:07 2004
*************** void gnu::gcj::xlib::GC::drawString(jstr
*** 117,122 ****
--- 117,131 ----
    XDrawString16(dpy, drawableXID, gc, x, y, xwchars, length);
  }
  
+ void gnu::gcj::xlib::GC::drawPoint(jint x, jint y)
+ {
+   Display* display = target->getDisplay();
+   ::Display* dpy = (::Display*) (display->display);
+   ::Drawable drawableXID = target->getXID();
+   ::GC gc = (::GC) structure;
+   XDrawPoint (dpy, drawableXID, gc, x, y);
+ }
+ 
  void gnu::gcj::xlib::GC::drawLine(jint x1, jint y1, jint x2, jint y2)
  {
    Display* display = target->getDisplay();
diff -Nrcpad gcc-3.4.3/libjava/gnu/gcj/xlib/natXAnyEvent.cc gcc-4.0.0/libjava/gnu/gcj/xlib/natXAnyEvent.cc
*** gcc-3.4.3/libjava/gnu/gcj/xlib/natXAnyEvent.cc	Sun Oct 22 17:46:09 2000
--- gcc-4.0.0/libjava/gnu/gcj/xlib/natXAnyEvent.cc	Wed Feb 16 20:01:12 2005
*************** This software is copyrighted work licens
*** 6,11 ****
--- 6,17 ----
  Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
  details.  */
  
+ #include <config.h>
+ #include <platform.h>
+ 
+ #include <gcj/javaprims.h>
+ #include <jvm.h>
+ 
  #include <X11/Xlib.h>
  
  #include <gcj/cni.h>
*************** details.  */
*** 22,45 ****
  #include <gnu/gcj/xlib/XExposeEvent.h>
  #include <gnu/gcj/xlib/XException.h>
  
  void gnu::gcj::xlib::XAnyEvent::init()
  {
    ::XEvent* event = new ::XEvent;
    structure = reinterpret_cast<gnu::gcj::RawData*>(event);
  }
  
  void gnu::gcj::xlib::XAnyEvent::finalize()
  {
    delete structure;
    structure = 0;
  }
  
! void gnu::gcj::xlib::XAnyEvent::loadNext()
  {
    ::Display* dpy = (::Display*) display->display;
    ::XEvent* evt = (::XEvent*) structure;
!   XNextEvent(dpy, evt);
!   // What does XNextEvent return?
  }
  
  jint gnu::gcj::xlib::XAnyEvent::getType()
--- 28,99 ----
  #include <gnu/gcj/xlib/XExposeEvent.h>
  #include <gnu/gcj/xlib/XException.h>
  
+ #include <unistd.h>
+ #include <posix.h>
+ 
  void gnu::gcj::xlib::XAnyEvent::init()
  {
    ::XEvent* event = new ::XEvent;
+   int *pipes = new int[2];
+   pipe(pipes);
    structure = reinterpret_cast<gnu::gcj::RawData*>(event);
+   pipefds = reinterpret_cast<gnu::gcj::RawData*>(pipes);
  }
  
  void gnu::gcj::xlib::XAnyEvent::finalize()
  {
    delete structure;
+   int *pipe = reinterpret_cast<int *>(pipefds);
+   close(pipe[0]);
+   close(pipe[1]);
+   delete [] pipefds;
+   pipefds = 0;
    structure = 0;
  }
  
! jboolean gnu::gcj::xlib::XAnyEvent::loadNext(jboolean block)
  {
    ::Display* dpy = (::Display*) display->display;
    ::XEvent* evt = (::XEvent*) structure;
! 
!   if (XPending(dpy))
!     {
!       XNextEvent(dpy, evt);
!       return true;  
!     }
! 
!   if (!block)
!     return false;
! 
!   int *pipe = reinterpret_cast<int *>(pipefds);
!   int xfd = XConnectionNumber(dpy);
!   int pipefd = pipe[0];
!   int n = (xfd > pipefd ? xfd : pipefd) + 1;
!   fd_set rfds;
!   FD_ZERO(&rfds);
!   FD_SET(xfd, &rfds);
!   FD_SET(pipefd, &rfds);  
!   int sel = _Jv_select (n, &rfds, NULL, NULL, NULL);
!   if (sel > 0)
!     {
!       if (FD_ISSET(xfd, &rfds))
! 	{
! 	  XNextEvent(dpy, evt);
! 	  return true;  
! 	}
!       if (FD_ISSET(pipefd, &rfds))
! 	{
! 	  char c;
! 	  read(pipefd, &c, 1);
! 	}
!     }
!   return false;
! }
! 
! void gnu::gcj::xlib::XAnyEvent::interrupt()
! {
!   int *pipe = reinterpret_cast<int *>(pipefds);
!   write(pipe[1], "W", 1);
  }
  
  jint gnu::gcj::xlib::XAnyEvent::getType()
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/BitwiseXORComposite.java gcc-4.0.0/libjava/gnu/java/awt/BitwiseXORComposite.java
*** gcc-3.4.3/libjava/gnu/java/awt/BitwiseXORComposite.java	Mon Jan 12 19:11:00 2004
--- gcc-4.0.0/libjava/gnu/java/awt/BitwiseXORComposite.java	Tue Nov 30 23:58:31 2004
***************
*** 1,5 ****
  /* BitwiseXORComposite.java -- Composite for emulating old-style XOR.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BitwiseXORComposite.java -- Composite for emulating old-style XOR.
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package gnu.java.awt;
*** 41,47 ****
  import java.awt.Color;
  import java.awt.Composite;
  import java.awt.CompositeContext;
- import java.awt.Graphics;
  import java.awt.Rectangle;
  import java.awt.RenderingHints;
  import java.awt.image.ColorModel;
--- 41,46 ----
*************** public class BitwiseXORComposite
*** 232,238 ****
                          WritableRaster dstOut)
      {
        int aX, bX, dstX, aY, bY, dstY, width, height;
!       int xorPixel, transferType;
        int[] srcLine, dstLine;
  
        aX = src.getMinX();
--- 231,237 ----
                          WritableRaster dstOut)
      {
        int aX, bX, dstX, aY, bY, dstY, width, height;
!       int xorPixel;
        int[] srcLine, dstLine;
  
        aX = src.getMinX();
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/Buffers.java gcc-4.0.0/libjava/gnu/java/awt/Buffers.java
*** gcc-3.4.3/libjava/gnu/java/awt/Buffers.java	Tue Jan 22 22:39:48 2002
--- gcc-4.0.0/libjava/gnu/java/awt/Buffers.java	Tue Apr 20 08:37:47 2004
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,4 ----
! /* Copyright (C) 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** public final class Buffers
*** 83,92 ****
--- 83,98 ----
        {
        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();
        }
*************** public final class Buffers
*** 106,115 ****
--- 112,127 ----
        {
        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();
        }
*************** public final class Buffers
*** 126,135 ****
--- 138,159 ----
    {
      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");
    }
  
*************** public final class Buffers
*** 149,154 ****
--- 173,183 ----
  	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();
*************** public final class Buffers
*** 159,164 ****
--- 188,203 ----
  	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");
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/ClasspathToolkit.java gcc-4.0.0/libjava/gnu/java/awt/ClasspathToolkit.java
*** gcc-3.4.3/libjava/gnu/java/awt/ClasspathToolkit.java	Sat Oct 25 18:41:45 2003
--- gcc-4.0.0/libjava/gnu/java/awt/ClasspathToolkit.java	Wed Feb 16 20:01:13 2005
***************
*** 1,5 ****
  /* ClasspathToolkit.java -- Abstract superclass for Classpath toolkits.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ClasspathToolkit.java -- Abstract superclass for Classpath toolkits.
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,63 ****
  
  package gnu.java.awt;
  
! import java.awt.Image;
  import java.awt.Dimension;
  import java.awt.DisplayMode;
  import java.awt.Font;
- import java.awt.FontFormatException;
  import java.awt.FontMetrics;
  import java.awt.GraphicsEnvironment;
! import java.awt.HeadlessException;
  import java.awt.Toolkit;
  import java.awt.image.ColorModel;
  import java.io.File;
  import java.io.InputStream;
- import java.io.IOException;
  import java.net.MalformedURLException;
  import java.net.URL;
  import java.util.HashMap;
  import java.util.Map;
  
! import gnu.java.awt.peer.ClasspathFontPeer;
! 
  
  /**
   * An abstract superclass for Classpath toolkits.
--- 38,69 ----
  
  package gnu.java.awt;
  
! import gnu.java.awt.peer.ClasspathFontPeer;
! import gnu.java.awt.peer.ClasspathTextLayoutPeer;
! 
! import java.awt.AWTException;
  import java.awt.Dimension;
  import java.awt.DisplayMode;
+ import java.awt.EventQueue;
  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.net.MalformedURLException;
  import java.net.URL;
+ import java.text.AttributedString;
  import java.util.HashMap;
  import java.util.Map;
  
! import javax.imageio.spi.IIORegistry;
  
  /**
   * An abstract superclass for Classpath toolkits.
*************** public abstract class ClasspathToolkit
*** 88,94 ****
     * #getImage(java.net.URL)}. For images that were loaded via a path
     * to an image file, the map contains a key with a file URL.
     */
!   private Map imageCache;
  
  
    /**
--- 94,100 ----
     * #getImage(java.net.URL)}. For images that were loaded via a path
     * to an image file, the map contains a key with a file URL.
     */
!   private HashMap imageCache;
  
  
    /**
*************** public abstract class ClasspathToolkit
*** 167,175 ****
     * this font peer should have, such as size, weight, family name, or
     * transformation.
     */
- 
    public abstract ClasspathFontPeer getClasspathFontPeer (String name, Map attrs); 
  
  
    /** 
     * Creates a {@link Font}, in a platform-specific manner.
--- 173,183 ----
     * 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.
*************** public abstract class ClasspathToolkit
*** 179,185 ****
     * implement {@link java.awt.font.OpenType} or
     * {@link java.awt.font.MultipleMaster}.
     */
- 
    public Font getFont (String name, Map attrs) 
    {
      return new Font (name, attrs);
--- 187,192 ----
*************** public abstract class ClasspathToolkit
*** 331,334 ****
--- 338,369 ----
          .initCause(muex);
      }
    }
+   
+   /**
+    * Creates an ImageProducer from the specified URL. The image is assumed
+    * to be in a recognised format. If the toolkit does not implement the
+    * image format or the image format is not recognised, null is returned.
+    * This default implementation is overriden by the Toolkit implementations.
+    *
+    * @param url URL to read image data from.
+    */
+   public ImageProducer createImageProducer(URL url)
+   {
+     return null;
+   }
+ 
+   public abstract RobotPeer createRobot (GraphicsDevice screen)
+     throws AWTException;
+ 
+   /** 
+    * Used to register ImageIO SPIs provided by the toolkit.
+    */
+ 
+   public void registerImageIOSpis(IIORegistry reg)
+   {
+   }
+ 
+   public abstract boolean nativeQueueEmpty();
+   public abstract void wakeNativeQueue();  
+   public abstract void iterateNativeQueue(EventQueue locked, boolean block);
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/ComponentDataBlitOp.java gcc-4.0.0/libjava/gnu/java/awt/ComponentDataBlitOp.java
*** gcc-3.4.3/libjava/gnu/java/awt/ComponentDataBlitOp.java	Tue Jan 22 22:39:48 2002
--- gcc-4.0.0/libjava/gnu/java/awt/ComponentDataBlitOp.java	Thu Jul 29 09:30:18 2004
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,4 ----
! /* Copyright (C) 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 36,44 ****
  
  package gnu.java.awt;
  
- import java.awt.geom.*;
- import java.awt.image.*;
  import java.awt.RenderingHints;
  
  /**
   * This raster copy operation assumes that both source and destination
--- 36,49 ----
  
  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
*************** import java.awt.RenderingHints;
*** 52,58 ****
   */
  public class ComponentDataBlitOp implements RasterOp
  {
!   public static ComponentDataBlitOp INSTANCE = new ComponentDataBlitOp();
  
    public WritableRaster filter(Raster src, WritableRaster dest)
    {
--- 57,63 ----
   */
  public class ComponentDataBlitOp implements RasterOp
  {
!   public static final ComponentDataBlitOp INSTANCE = new ComponentDataBlitOp();
  
    public WritableRaster filter(Raster src, WritableRaster dest)
    {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/EmbeddedWindow.java gcc-4.0.0/libjava/gnu/java/awt/EmbeddedWindow.java
*** gcc-3.4.3/libjava/gnu/java/awt/EmbeddedWindow.java	Mon Jan  5 21:41:20 2004
--- gcc-4.0.0/libjava/gnu/java/awt/EmbeddedWindow.java	Wed Feb 16 20:01:14 2005
***************
*** 1,5 ****
  /* EmbeddedWindow.java --
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* EmbeddedWindow.java --
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,52 ****
  package gnu.java.awt;
  
  import gnu.java.awt.peer.EmbeddedWindowPeer;
  import java.awt.Frame;
  import java.awt.Toolkit;
  
  /**
   * Represents an AWT window that can be embedded into another
   * application.
   * 
!  * @author Michael Koch <konqueror@gmx.de>
   */
  public class EmbeddedWindow extends Frame
  {
--- 39,57 ----
  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
  {
*************** public class EmbeddedWindow extends Fram
*** 84,99 ****
  
      if (! (tk instanceof EmbeddedWindowSupport))
        throw new UnsupportedOperationException
!         ("Embedded windows are not supported by the current peers: " + tk.getClass());
  
-     setWindowPeer (((EmbeddedWindowSupport) tk).createEmbeddedWindow (this));
      super.addNotify();
    }
  
-   // This method is only made native to circumvent the package-privateness of
-   // an AWT internal java.awt.Component.peer member variable.
-   native void setWindowPeer (EmbeddedWindowPeer peer);
- 
    /**
     * If the native peer for this embedded window has been created,
     * then setHandle will embed the window.  If not, setHandle tells
--- 89,117 ----
  
      if (! (tk instanceof EmbeddedWindowSupport))
        throw new UnsupportedOperationException
!         ("Embedded windows are not supported by the current peers: "
! 	 + tk.getClass());
! 
!     // 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, ((EmbeddedWindowSupport) tk).createEmbeddedWindow (this));
!       }
!     catch (IllegalAccessException e)
!       {
! 	// This should never happen.
!       }
!     catch (NoSuchFieldException e)
!       {
! 	// This should never happen.
!       }
  
      super.addNotify();
    }
  
    /**
     * If the native peer for this embedded window has been created,
     * then setHandle will embed the window.  If not, setHandle tells
*************** public class EmbeddedWindow extends Fram
*** 108,115 ****
        throw new RuntimeException ("EmbeddedWindow is already embedded");
  
      this.handle = handle;
!     if (peer != null)
!       ((EmbeddedWindowPeer) peer).embed (this.handle);
    }
  
    /**
--- 126,133 ----
        throw new RuntimeException ("EmbeddedWindow is already embedded");
  
      this.handle = handle;
!     if (getPeer() != null)
!       ((EmbeddedWindowPeer) getPeer()).embed (this.handle);
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/color/CieXyzConverter.java gcc-4.0.0/libjava/gnu/java/awt/color/CieXyzConverter.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/CieXyzConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/CieXyzConverter.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,74 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/ClutProfileConverter.java gcc-4.0.0/libjava/gnu/java/awt/color/ClutProfileConverter.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/ClutProfileConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/ClutProfileConverter.java	Wed Feb 16 20:01:16 2005
***************
*** 0 ****
--- 1,153 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/ColorLookUpTable.java gcc-4.0.0/libjava/gnu/java/awt/color/ColorLookUpTable.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/ColorLookUpTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/ColorLookUpTable.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,430 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/ColorSpaceConverter.java gcc-4.0.0/libjava/gnu/java/awt/color/ColorSpaceConverter.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/ColorSpaceConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/ColorSpaceConverter.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,70 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/GrayProfileConverter.java gcc-4.0.0/libjava/gnu/java/awt/color/GrayProfileConverter.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/GrayProfileConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/GrayProfileConverter.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,138 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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.ProfileDataException;
+ import java.awt.color.ICC_Profile;
+ import java.awt.color.ICC_ProfileGray;
+ 
+ 
+ /**
+  * 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-3.4.3/libjava/gnu/java/awt/color/GrayScaleConverter.java gcc-4.0.0/libjava/gnu/java/awt/color/GrayScaleConverter.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/GrayScaleConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/GrayScaleConverter.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,111 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/LinearRGBConverter.java gcc-4.0.0/libjava/gnu/java/awt/color/LinearRGBConverter.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/LinearRGBConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/LinearRGBConverter.java	Tue Nov 30 23:58:32 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/ProfileHeader.java gcc-4.0.0/libjava/gnu/java/awt/color/ProfileHeader.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/ProfileHeader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/ProfileHeader.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,399 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/PyccConverter.java gcc-4.0.0/libjava/gnu/java/awt/color/PyccConverter.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/PyccConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/PyccConverter.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,73 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/RgbProfileConverter.java gcc-4.0.0/libjava/gnu/java/awt/color/RgbProfileConverter.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/RgbProfileConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/RgbProfileConverter.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,245 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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.ProfileDataException;
+ import java.awt.color.ICC_Profile;
+ import java.awt.color.ICC_ProfileRGB;
+ 
+ 
+ /**
+  * RgbProfileConverter - converts RGB profiles (ICC_ProfileRGB)
+  *
+  * This type of profile contains a matrix and three
+  * tone reproduction curves (TRCs).
+  *
+  * Device RGB --> 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-3.4.3/libjava/gnu/java/awt/color/SrgbConverter.java gcc-4.0.0/libjava/gnu/java/awt/color/SrgbConverter.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/SrgbConverter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/SrgbConverter.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,153 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/TagEntry.java gcc-4.0.0/libjava/gnu/java/awt/color/TagEntry.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/TagEntry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/TagEntry.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,122 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/color/ToneReproductionCurve.java gcc-4.0.0/libjava/gnu/java/awt/color/ToneReproductionCurve.java
*** gcc-3.4.3/libjava/gnu/java/awt/color/ToneReproductionCurve.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/color/ToneReproductionCurve.java	Tue Nov 30 23:58:32 2004
***************
*** 0 ****
--- 1,178 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/doc-files/BitwiseXORComposite-1.png gcc-4.0.0/libjava/gnu/java/awt/doc-files/BitwiseXORComposite-1.png
*** gcc-3.4.3/libjava/gnu/java/awt/doc-files/BitwiseXORComposite-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/doc-files/BitwiseXORComposite-1.png	Fri Jan 23 12:01:23 2004
***************
*** 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-3.4.3/libjava/gnu/java/awt/image/ImageDecoder.java gcc-4.0.0/libjava/gnu/java/awt/image/ImageDecoder.java
*** gcc-3.4.3/libjava/gnu/java/awt/image/ImageDecoder.java	Sat Jan 10 21:32:22 2004
--- gcc-4.0.0/libjava/gnu/java/awt/image/ImageDecoder.java	Wed Feb 16 20:01:17 2005
***************
*** 1,5 ****
  /* ImageDecoder.java
!    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ImageDecoder.java
!    Copyright (C) 1999, 2000, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,47 ****
  
  package gnu.java.awt.image;
  
! import java.awt.*;
! import java.awt.image.*;
! import java.util.*;
! import java.io.*;
  import java.net.URL;
  
  public abstract class ImageDecoder implements ImageProducer 
  {
--- 37,50 ----
  
  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.InputStream;
! import java.io.IOException;
  import java.net.URL;
+ import java.util.Vector;
  
  public abstract class ImageDecoder implements ImageProducer 
  {
*************** public abstract class ImageDecoder imple
*** 53,60 ****
    int length;
    InputStream input;
  
-   public static ColorModel cm;
- 
    static
    {
      // FIXME: there was some broken code here that looked like
--- 56,61 ----
*************** public abstract class ImageDecoder imple
*** 73,78 ****
--- 74,84 ----
      this.url = url;
    }
  
+   public ImageDecoder (InputStream is)
+   {
+     this.input = is;
+   }
+ 
    public ImageDecoder (byte[] imagedata, int imageoffset, int imagelength)
    {
      data = imagedata;
*************** public abstract class ImageDecoder imple
*** 97,103 ****
  
    public void startProduction (ImageConsumer ic)
    {
!     addConsumer (ic);
      Vector list = (Vector) consumers.clone ();
      try 
        {
--- 103,111 ----
  
    public void startProduction (ImageConsumer ic)
    {
!     if (!isConsumer(ic))
!       addConsumer(ic);
! 
      Vector list = (Vector) consumers.clone ();
      try 
        {
*************** public abstract class ImageDecoder imple
*** 105,121 ****
  	// ImageDecoder constructors so that exceptions cause
  	// imageComplete to be called with an appropriate error
  	// status.
! 	if (url != null)
! 	  input = url.openStream();
! 	else
! 	  {
! 	    if (filename != null)
! 	      input = new FileInputStream (filename);
! 	    else
! 	      input = new ByteArrayInputStream (data, offset, length);
! 	  }
! 
! 	produce (list, input);
        }
      catch (Exception e)
        {
--- 113,142 ----
  	// 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)
        {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/image/XBMDecoder.java gcc-4.0.0/libjava/gnu/java/awt/image/XBMDecoder.java
*** gcc-3.4.3/libjava/gnu/java/awt/image/XBMDecoder.java	Wed Nov 12 00:37:33 2003
--- gcc-4.0.0/libjava/gnu/java/awt/image/XBMDecoder.java	Tue Nov 30 23:58:33 2004
***************
*** 1,5 ****
  /* XBMDecoder -- Decodes X-bitmaps
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* XBMDecoder -- Decodes X-bitmaps
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,47 ****
  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.*;
! import java.awt.image.*;
! import java.util.*;
! import java.io.*;
  import java.net.URL;
  
  public class XBMDecoder extends ImageDecoder
  {
--- 35,53 ----
  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.InputStream;
! import java.io.InputStreamReader;
! import java.io.IOException;
! import java.io.Reader;
  import java.net.URL;
+ import java.util.StringTokenizer;
+ import java.util.Vector;
  
  public class XBMDecoder extends ImageDecoder
  {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/natEmbeddedWindow.cc gcc-4.0.0/libjava/gnu/java/awt/natEmbeddedWindow.cc
*** gcc-3.4.3/libjava/gnu/java/awt/natEmbeddedWindow.cc	Thu Sep  4 16:58:13 2003
--- gcc-4.0.0/libjava/gnu/java/awt/natEmbeddedWindow.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* Copyright (C) 2003  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- #include <gnu/java/awt/EmbeddedWindow.h>
- #include <gnu/java/awt/peer/EmbeddedWindowPeer.h>
- #include <java/awt/peer/ComponentPeer.h>
- 
- void
- gnu::java::awt::EmbeddedWindow::setWindowPeer (gnu::java::awt::peer::EmbeddedWindowPeer* w)
- {
-   if (!peer)
-     peer = reinterpret_cast< ::java::awt::peer::ComponentPeer *> (w);
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/ClasspathFontPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/ClasspathFontPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/ClasspathFontPeer.java	Sat Oct 25 18:41:45 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/ClasspathFontPeer.java	Tue Nov 30 23:58:34 2004
***************
*** 1,5 ****
  /* ClasspathFontPeer.java -- Font peer used by GNU Classpath.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ClasspathFontPeer.java -- Font peer used by GNU Classpath.
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import gnu.java.awt.*;
*** 56,67 ****
   * <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><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.
   *
   * @see java.awt.Font#getPeer
   * @see java.awt.Toolkit#getFontPeer
--- 56,67 ----
   * <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
*************** public abstract class ClasspathFontPeer
*** 160,166 ****
      return name;
    }
  
!   protected static void copyStyleToAttrs (int style, Map attrs)
    {
      if ((style & Font.BOLD) == Font.BOLD)
        attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
--- 160,166 ----
      return name;
    }
  
!   public static void copyStyleToAttrs (int style, Map attrs)
    {
      if ((style & Font.BOLD) == Font.BOLD)
        attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
*************** public abstract class ClasspathFontPeer
*** 179,185 ****
        attrs.put (TextAttribute.FAMILY, fam);
    }
    
!   protected static void copySizeToAttrs (float size, Map attrs)
    {
      attrs.put (TextAttribute.SIZE, new Float (size));
    }
--- 179,185 ----
        attrs.put (TextAttribute.FAMILY, fam);
    }
    
!   public static void copySizeToAttrs (float size, Map attrs)
    {
      attrs.put (TextAttribute.SIZE, new Float (size));
    }
*************** public abstract class ClasspathFontPeer
*** 218,224 ****
      AffineTransform trans = this.transform;
      float size = this.size;
      int style = this.style;
!     
      if (attribs.containsKey (TextAttribute.FAMILY))
        family = (String) attribs.get (TextAttribute.FAMILY);
  
--- 218,224 ----
      AffineTransform trans = this.transform;
      float size = this.size;
      int style = this.style;
! 
      if (attribs.containsKey (TextAttribute.FAMILY))
        family = (String) attribs.get (TextAttribute.FAMILY);
  
*************** public abstract class ClasspathFontPeer
*** 243,249 ****
--- 243,255 ----
        {
          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))
        {
*************** public abstract class ClasspathFontPeer
*** 395,400 ****
--- 401,423 ----
    }
  
    /** 
+    * 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
*************** public abstract class ClasspathFontPeer
*** 444,449 ****
--- 467,488 ----
    }
  
    /** 
+    * 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
*************** public abstract class ClasspathFontPeer
*** 501,506 ****
--- 540,547 ----
  
    public AffineTransform getTransform (Font font)
    {
+     if (transform == null)
+       transform = new AffineTransform ();
      return transform;
    }
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java	Wed Feb 16 20:01:19 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/peer/GLightweightPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/GLightweightPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/GLightweightPeer.java	Sat Jan 10 21:32:22 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/GLightweightPeer.java	Tue Nov 30 23:58:34 2004
***************
*** 1,5 ****
  /* GLightweightPeer.java --
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GLightweightPeer.java --
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  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.Component;
*** 45,51 ****
  import java.awt.Cursor;
  import java.awt.Dimension;
  import java.awt.Font;
- import java.awt.Font;
  import java.awt.FontMetrics;
  import java.awt.Graphics;
  import java.awt.GraphicsConfiguration;
--- 46,51 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GThreadMutex.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GThreadMutex.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GThreadMutex.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GThreadMutex.java	Thu Sep  2 06:58:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java	Thu Feb 17 07:48:22 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java	Thu Nov 20 22:44:01 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeer.java	Thu Jan  1 00:00:00 1970
***************
*** 1,293 ****
- /* GdkClasspathFontPeer.java -- backend implementation for Font object
-    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., 59 Temple Place, Suite 330, Boston, MA
-    02111-1307 USA.
- 
-    Linking this library statically or dynamically with other modules is
-    making a combined work based on this library.  Thus, the terms and
-    conditions of the GNU General Public License cover the whole
-    combination.
- 
-    As a special exception, the copyright holders of this library give you
-    permission to link this library with independent modules to produce an
-    executable, regardless of the license terms of these independent
-    modules, and to copy and distribute the resulting executable under
-    terms of your choice, provided that you also meet, for each linked
-    independent module, the terms and conditions of the license of that
-    module.  An independent module is a module which is not derived from
-    or based on this library.  If you modify this library, you may extend
-    this exception to your version of the library, but you 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.*;
- import java.awt.font.*;
- import java.awt.geom.*;
- import java.io.InputStream;
- import java.io.IOException;
- import java.io.Serializable;
- import java.util.Locale;
- import java.util.Map;
- import java.util.StringTokenizer;
- import java.text.CharacterIterator;
- import java.text.AttributedCharacterIterator;
- import java.text.StringCharacterIterator;
- import java.awt.font.TextAttribute;
- import gnu.classpath.Configuration;
- import gnu.java.awt.peer.ClasspathFontPeer;
- 
- /**
-  * This class represents a windowing system font using the Pango
-  * unicode/glyph/font library and the Cairo rendering library.
-  *
-  * @author Graydon Hoare (graydon@redhat.com)
-  */
- 
- public class GdkClasspathFontPeer extends ClasspathFontPeer
- {
-   
-   static 
-   {
-     if (Configuration.INIT_LOAD_LIBRARY)
-       {
-         System.loadLibrary("gtkpeer");
-       }
-     initStaticState ();
-   }
-   native static void initStaticState ();
-   private final int native_state = GtkGenericPeer.getUniqueInteger ();
- 
- 
-   /* Instance Variables */
- 
-   private native void initState ();
-   private native void dispose ();
-   private native void setFont (String family, int style, int size);
- 
-   protected void sync ()
-   {
-     this.setFont (this.familyName, this.style, (int)this.size);
-   }
- 
-   protected void finalize ()
-   {
-     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 i) {
-     String s = new String ();
-     for(char c = i.first(); c != CharacterIterator.DONE; c = i.next()) 
-       s += c;
-     return s;
-   }
- 
-   private String buildString(CharacterIterator iter, int begin, int limit) {
-     String s = new String ();
-     int i = 0;
-     for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next(), i++) 
-       {
-         if (begin <= i)
-           s += c;
-         if (limit <= i)
-           break;
-       }
-     return s;
-   }
-   
-   private String buildString(char[] chars, int begin, int limit) {
-     String s = new String ();
-     for(int i = begin; i <= limit; i++)
-       s += chars[i];
-     return s;
-   }
- 
-   /* Public API */
- 
-   public GdkClasspathFontPeer (String name, int style, int size)
-   {  
-     super(name, style, size);    
-     initState ();
-     setFont (this.familyName, this.style, (int)this.size);
-   }
- 
-   public GdkClasspathFontPeer (String name, Map attributes)
-   {
-     super(name, attributes);
-     initState ();
-     setFont (this.familyName, this.style, (int)this.size);
-   }
- 
-   public String getSubFamilyName(Font font, Locale locale)
-   {
-     return null;
-   }
- 
-   public String getPostScriptName(Font font)
-   {
-     return null;
-   }
- 
-   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 GlyphVector createGlyphVector (Font font, 
-                                         FontRenderContext ctx, 
-                                         CharacterIterator i)
-   {
-     return new GdkGlyphVector(font, this, ctx, buildString (i));
-   }
- 
-   public GlyphVector createGlyphVector (Font font, 
-                                         FontRenderContext ctx, 
-                                         int[] glyphCodes)
-   {
-     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)
-   {
-     throw new UnsupportedOperationException ();
-   }
- 
-   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 GdkClasspathFontPeerMetrics (font);
-   }
- 
- }
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java	Thu Nov 20 22:44:01 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkClasspathFontPeerMetrics.java	Thu Jan  1 00:00:00 1970
***************
*** 1,116 ****
- /* GdkClasspathFontPeerMetrics.java
-    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., 59 Temple Place, Suite 330, Boston, MA
-    02111-1307 USA.
- 
-    Linking this library statically or dynamically with other modules is
-    making a combined work based on this library.  Thus, the terms and
-    conditions of the GNU General Public License cover the whole
-    combination.
- 
-    As a special exception, the copyright holders of this library give you
-    permission to link this library with independent modules to produce an
-    executable, regardless of the license terms of these independent
-    modules, and to copy and distribute the resulting executable under
-    terms of your choice, provided that you also meet, for each linked
-    independent module, the terms and conditions of the license of that
-    module.  An independent module is a module which is not derived from
-    or based on this library.  If you modify this library, you may extend
-    this exception to your version of the library, but you 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.*;
- import java.awt.font.*;
- import java.awt.geom.*;
- 
- public class GdkClasspathFontPeerMetrics extends FontMetrics
- {
-   private final int native_state = GtkGenericPeer.getUniqueInteger();
- 
-   private static final int ASCENT = 0, MAX_ASCENT = 1, 
-                        DESCENT = 2, MAX_DESCENT = 3, 
-                        MAX_ADVANCE = 4;
- 
-   private int[] metrics;
-   private native int[] initState (Object font);
- 
-   public GdkClasspathFontPeerMetrics (Font font)
-   {
-     super (font);
-     metrics = initState (font.getPeer());
-   }
- 
-   public int stringWidth (String str)
-   {
-     GlyphVector gv = font.createGlyphVector 
-       (new FontRenderContext 
-        (new AffineTransform (), false, false), str);
-     Rectangle2D r = gv.getVisualBounds ();
-     return (int) r.getWidth ();
-   }
- 
-   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;
- //      return metrics[ASCENT] + metrics[DESCENT];
-   }
- 
-   public int getAscent ()
-   {
-     return metrics[ASCENT];
-   }
- 
-   public int getMaxAscent ()
-   {
-     return metrics[MAX_ASCENT];
-   }
- 
-   public int getDescent ()
-   {
-     return metrics[DESCENT];
-   }
- 
-   public int getMaxDescent ()
-   {
-     return metrics[MAX_DESCENT];
-   }
- 
-   public int getMaxAdvance ()
-   {
-     return metrics[MAX_ADVANCE];
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java	Mon Dec  1 23:12:07 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java	Wed Feb 16 20:01:24 2005
***************
*** 1,5 ****
  /* GdkFontMetrics.java
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GdkFontMetrics.java
!    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,68 ****
  
  package gnu.java.awt.peer.gtk;
  
  import java.awt.Font;
  import java.awt.FontMetrics;
  
  public class GdkFontMetrics extends FontMetrics
  {
!   private final int native_state = GtkGenericPeer.getUniqueInteger();
  
!   private static final int ASCENT = 0, MAX_ASCENT = 1, 
!                        DESCENT = 2, MAX_DESCENT = 3, 
!                        MAX_ADVANCE = 4;
  
!   private int[] metrics;
!   private native int[] initState (String fname, int size);
  
-   public GdkFontMetrics (Font font)
-   {
-     super (font);
-     metrics = initState (font.getName (), font.getSize ());
-   }
  
!   native public int stringWidth (String fname, int size, String str);
  
    public int stringWidth (String str)
    {
!     return stringWidth (font.getName (), font.getSize (), str);
    }
  
    public int charWidth (char ch)
--- 38,90 ----
  
  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;
  
  
!   public GdkFontMetrics (Font font)
!   {    
!     super (font.getPeer() instanceof GdkFontPeer 
!            ? font 
!            : ((ClasspathToolkit)(Toolkit.getDefaultToolkit ()))
!            .getFont (font.getName(), font.getAttributes ()));
!     
!     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)
*************** public class GdkFontMetrics extends Font
*** 75,108 ****
      return stringWidth (new String (data, off, len));
    }
  
!   // Sun's Motif implementation always returns 0 or 1 here (???).
    public int getLeading ()
    {
!     return 0;
    }
  
    public int getAscent ()
    {
!     return metrics[ASCENT];
    }
  
    public int getMaxAscent ()
    {
!     return metrics[MAX_ASCENT];
    }
  
    public int getDescent ()
    {
!     return metrics[DESCENT];
    }
  
    public int getMaxDescent ()
    {
!     return metrics[MAX_DESCENT];
    }
  
    public int getMaxAdvance ()
    {
!     return metrics[MAX_ADVANCE];
    }
  }
--- 97,134 ----
      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-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java	Thu Feb 17 07:48:22 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java	Sat Oct 25 18:41:45 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java	Thu Feb 17 07:48:22 2005
***************
*** 1,87 ****
  /* GdkGlyphVector.java -- Glyph vector object
!    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., 59 Temple Place, Suite 330, Boston, MA
!    02111-1307 USA.
  
!    Linking this library statically or dynamically with other modules is
!    making a combined work based on this library.  Thus, the terms and
!    conditions of the GNU General Public License cover the whole
!    combination.
  
!    As a special exception, the copyright holders of this library give you
!    permission to link this library with independent modules to produce an
!    executable, regardless of the license terms of these independent
!    modules, and to copy and distribute the resulting executable under
!    terms of your choice, provided that you also meet, for each linked
!    independent module, the terms and conditions of the license of that
!    module.  An independent module is a module which is not derived from
!    or based on this library.  If you modify this library, you may extend
!    this exception to your version of the library, but you 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.*;
! import java.awt.font.*;
! import java.awt.geom.*;
! import java.io.InputStream;
! import java.io.IOException;
! import java.io.Serializable;
! import java.util.Locale;
! import java.util.Map;
! import java.util.StringTokenizer;
! import java.text.CharacterIterator;
! import java.text.AttributedCharacterIterator;
! import gnu.classpath.Configuration;
  
! public class GdkGlyphVector extends GlyphVector 
  {
  
!   static 
    {
!     if (Configuration.INIT_LOAD_LIBRARY)
!       {
!         System.loadLibrary("gtkpeer");
!       }
!     initStaticState ();
!   }
!   native static void initStaticState ();
!   private final int native_state = GtkGenericPeer.getUniqueInteger ();
  
!   private Font font;
!   private FontRenderContext ctx;
      
!   private native void initState (GdkClasspathFontPeer peer, FontRenderContext ctx);
!   private native void setChars (String s);
!   private native void setGlyphCodes (int codes[]);
!   private native void dispose ();
!   private native int glyphCode (int idx);
!   private native int numGlyphs ();
!   private native int glyphCharIndex (int idx);
!   private native double[] allLogicalExtents ();
!   private native double[] allInkExtents ();
!   private native double[] glyphLogicalExtents (int idx);
!   private native double[] glyphInkExtents (int idx);
!   private native boolean glyphIsHorizontal (int idx);
!   private native boolean isEqual (GdkGlyphVector ggv);
  
  
    /* 
       geometric notes:
--- 1,108 ----
  /* 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., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
  
! Linking this library statically or dynamically with other modules is
! making a combined work based on this library.  Thus, the terms and
! conditions of the GNU General Public License cover the whole
! combination.
  
! As a special exception, the copyright holders of this library give you
! permission to link this library with independent modules to produce an
! executable, regardless of the license terms of these independent
! modules, and to copy and distribute the resulting executable under
! terms of your choice, provided that you also meet, for each linked
! independent module, the terms and conditions of the license of that
! module.  An independent module is a module which is not derived from
! or based on this library.  If you modify this library, you may extend
! this exception to your version of the library, but you 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:
*************** public class GdkGlyphVector extends Glyp
*** 106,131 ****
       
     */
  
! 
!   public GdkGlyphVector (Font f, GdkClasspathFontPeer peer, FontRenderContext c, String s)
!   {
!     font = f;
!     ctx = c;
!     initState (peer, ctx);
!     setChars (s);
!   }
! 
!   public GdkGlyphVector (Font f, GdkClasspathFontPeer peer, FontRenderContext c, int codes[])
    {
!     font = f;
!     ctx = c;
!     initState (peer, ctx);
!     setGlyphCodes (codes);
    }
  
!   protected void finalize ()
    {
!     dispose ();
    }
  
    public Font getFont () 
--- 127,140 ----
       
     */
  
!   public double[] getExtents() 
    {
!     return extents;
    }
  
!   public int[] getCodes()
    {
!     return codes;
    }
  
    public Font getFont () 
*************** public class GdkGlyphVector extends Glyp
*** 135,146 ****
  
    public FontRenderContext getFontRenderContext () 
    { 
!     return ctx; 
    }
  
    public int getGlyphCharIndex (int glyphIndex) 
    { 
!     return glyphCharIndex (glyphIndex); 
    }
  
    public int[] getGlyphCharIndices (int beginGlyphIndex, 
--- 144,158 ----
  
    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, 
*************** public class GdkGlyphVector extends Glyp
*** 152,201 ****
        ix = new int[numEntries];
  
      for (int i = 0; i < numEntries; i++)
!       ix[i] = glyphCharIndex (beginGlyphIndex + i);
      return ix;
    }
  
    public int getGlyphCode (int glyphIndex) 
    { 
!     return glyphCode (glyphIndex); 
    }
  
    public int[] getGlyphCodes (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] = glyphCode (beginGlyphIndex + i);
!     return ix;
    }
  
!   public Shape getGlyphLogicalBounds (int glyphIndex)
    {
!     double extents[] = glyphLogicalExtents (glyphIndex);
!     return new Rectangle2D.Double (extents[0], extents[1],
!                                    extents[2], extents[3]);
    }
      
!   public GlyphMetrics getGlyphMetrics (int glyphIndex)
    {
!     double extents[] = glyphLogicalExtents (glyphIndex);
!     Rectangle2D log_bounds = new Rectangle2D.Double (extents[0], extents[1],
!                                                      extents[2], extents[3]);
! 
!     extents = glyphInkExtents (glyphIndex);
!     Rectangle2D ink_bounds = new Rectangle2D.Double (extents[0], extents[1],
!                                                      extents[2], extents[3]);
!       
!     boolean is_horizontal = glyphIsHorizontal (glyphIndex);
  
!     return new GlyphMetrics (is_horizontal,
!                              (float)(log_bounds.getWidth() + log_bounds.getX()), 
!                              (float)(log_bounds.getHeight() + log_bounds.getY()),
!                              ink_bounds, GlyphMetrics.STANDARD);
    }
  
    public Shape getGlyphOutline (int glyphIndex)
--- 164,207 ----
        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)
*************** public class GdkGlyphVector extends Glyp
*** 208,227 ****
      throw new UnsupportedOperationException ();
    }
  
!   public Rectangle getGlyphPixelBounds (int glyphIndex, 
                                          FontRenderContext renderFRC,
                                          float x, float y)
    {
!     double extents[] = glyphInkExtents(glyphIndex);
!     return new Rectangle ((int)x, (int)y, (int)extents[2], (int)extents[3]);
    }
      
!   public Point2D getGlyphPosition (int glyphIndex)
    {
!     float[] ret = new float[2 * (glyphIndex + 1)];
!     getGlyphPositions (0, glyphIndex + 1, ret);
!     return new Point2D.Float (ret[2 * glyphIndex], 
!                               ret[2 * glyphIndex + 1]);
    }
  
    public float[] getGlyphPositions (int beginGlyphIndex,
--- 214,231 ----
      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,
*************** public class GdkGlyphVector extends Glyp
*** 232,266 ****
      if (fx == null)
        fx = new float[numEntries * 2];
  
- 
-     float x = 0.0f;
-     float y = 0.0f;
      for (int i = 0; i < numEntries; ++i)
        {
!         boolean is_horizontal = glyphIsHorizontal (beginGlyphIndex + i);
!         double log_extents[] = glyphLogicalExtents (beginGlyphIndex + i);
!         fx[2*i]     = x + (float)log_extents[0]; // x offset
!         fx[2*i + 1] = y + (float)log_extents[1]; // y offset
!         if (is_horizontal)
!           x += (float)log_extents[2]; // x advance ("logical width") in pango-ese
!         else
!           y += (float)log_extents[3]; // y advance ("logical height") in pango-ese
        }
      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 glyphIndex)
    {
!     double extents[] = glyphInkExtents (glyphIndex);
!     return new Rectangle2D.Double (extents[0], extents[1], 
!                                    extents[2], extents[3]);
    }
      
    public int getLayoutFlags ()
--- 236,260 ----
      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 ()
*************** public class GdkGlyphVector extends Glyp
*** 270,283 ****
  
    public Rectangle2D getLogicalBounds ()
    {
!     double extents[] = allLogicalExtents ();
!     return new Rectangle2D.Double (extents[0], extents[1], 
!                                    extents[2], extents[3]);
    }
  
    public int getNumGlyphs ()
    {
!     return numGlyphs ();
    }
  
    public Shape getOutline ()
--- 264,275 ----
  
    public Rectangle2D getLogicalBounds ()
    {
!     return allLogical;
    }
  
    public int getNumGlyphs ()
    {
!     return codes.length;
    }
  
    public Shape getOutline ()
*************** public class GdkGlyphVector extends Glyp
*** 288,313 ****
    public Rectangle getPixelBounds (FontRenderContext renderFRC,
                                     float x, float y)
    {
!     double extents[] = allInkExtents();
!     return new Rectangle ((int)x, (int)y, 
!                           (int)extents[2], (int)extents[3]);
    }
      
    public Rectangle2D getVisualBounds ()
    {
!     double extents[] = allInkExtents();
!     return new Rectangle2D.Double (extents[0], extents[1], 
!                                    extents[2], extents[3]);
    }
  
    public void performDefaultLayout ()
    {
    }
      
!   public void setGlyphPosition (int glyphIndex, Point2D newPos)
    {
!     // should we be ok twiddling pango's structure here?
!     throw new UnsupportedOperationException ();      
    }
  
    public void setGlyphTransform (int glyphIndex,
--- 280,307 ----
    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,
*************** public class GdkGlyphVector extends Glyp
*** 325,332 ****
      if (! (gv instanceof GdkGlyphVector))
        return false;
  
!     GdkGlyphVector ggv = (GdkGlyphVector)gv;
!     return isEqual(ggv);
    }
  
    public GlyphJustificationInfo getGlyphJustificationInfo(int idx)
--- 319,349 ----
      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)
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java	Fri Aug 22 20:33:49 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GdkGraphics.java
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GdkGraphics.java
!    Copyright (C) 1998, 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Graphics;
*** 46,51 ****
--- 46,52 ----
  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 Graphic
*** 63,69 ****
  
    static final int GDK_COPY = 0, GDK_XOR = 2;
  
!   native int[] initState (GtkComponentPeer component);
    native void initState (int width, int height);
    native void copyState (GdkGraphics g);
  
--- 64,70 ----
  
    static final int GDK_COPY = 0, GDK_XOR = 2;
  
!   native void initState (GtkComponentPeer component);
    native void initState (int width, int height);
    native void copyState (GdkGraphics g);
  
*************** public class GdkGraphics extends Graphic
*** 83,189 ****
      initState (width, height);
      color = Color.black;
      clip = new Rectangle (0, 0, width, height);
!     font = new Font ("Dialog", Font.PLAIN, 10);
    }
  
    GdkGraphics (GtkComponentPeer component)
    {
      this.component = component;
!     int rgb[] = initState (component);
!     color = new Color (rgb[0], rgb[1], rgb[2]);
!     font = new Font ("Dialog", Font.PLAIN, 10);
      Dimension d = component.awtComponent.getSize ();
      clip = new Rectangle (0, 0, d.width, d.height);
    }
  
!   public native void clearRect (int x, int y, int width, int height);
  
    public void clipRect (int x, int y, int width, int height)
    {
      clip = clip.intersection (new Rectangle (x, y, width, height));
      setClipRectangle (clip.x, clip.y, clip.width, clip.height);
    }
  
!   native public void copyArea (int x, int y, int width, int height, 
! 			       int dx, int dy);
  
    public Graphics create ()
    {
      return new GdkGraphics (this);
    }
  
! //    public Graphics create (int x, int y, int width, int height)
! //    {
! //      GdkGraphics g = new GdkGraphics (this);
! //      System.out.println ("translating by: " + x +" " + y);
! //      g.translate (x, y);
! //      g.clipRect (0, 0, width, height);
! 
! //      return g;
! //    }
!   
!   native public void dispose ();
  
    native void copyPixmap (Graphics g, int x, int y, int width, int height);
    public boolean drawImage (Image img, int x, int y, 
  			    Color bgcolor, ImageObserver observer)
    {
      if (img instanceof GtkOffScreenImage)
        {
  	copyPixmap (img.getGraphics (), 
! 		    x, y, img.getWidth (null), img.getHeight (null));
  	return true;
        }
  
      GtkImage image = (GtkImage) img;
!     new GtkImagePainter (image, this, x, y, -1, -1, bgcolor);
      return image.isLoaded ();
    }
  
    public boolean drawImage (Image img, int x, int y, ImageObserver observer)
    {
      if (img instanceof GtkOffScreenImage)
        {
  	copyPixmap (img.getGraphics (), 
! 		    x, y, img.getWidth (null), img.getHeight (null));
  	return true;
        }
  
!     return drawImage (img, x, y, component.getBackground (), observer);
    }
  
    public boolean drawImage (Image img, int x, int y, int width, int height, 
  			    Color bgcolor, ImageObserver observer)
    {
      if (img instanceof GtkOffScreenImage)
        {
! 	throw new RuntimeException ();
        }
  
      GtkImage image = (GtkImage) img;
!     new GtkImagePainter (image, this, x, y, width, height, bgcolor);
      return image.isLoaded ();
    }
  
    public boolean drawImage (Image img, int x, int y, int width, int height, 
  			    ImageObserver observer)
    {
!     return drawImage (img, x, y, width, height, component.getBackground (),
! 		      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 GtkOffScreenImage)
        {
! 	throw new RuntimeException ();
        }
  
      GtkImage image = (GtkImage) img;
      new GtkImagePainter (image, this, dx1, dy1, dx2, dy2, 
! 			 sx1, sy1, sx2, sy2, bgcolor);
      return image.isLoaded ();
    }
  
--- 84,303 ----
      initState (width, height);
      color = Color.black;
      clip = new Rectangle (0, 0, width, height);
!     font = new Font ("Dialog", Font.PLAIN, 12);
    }
  
    GdkGraphics (GtkComponentPeer component)
    {
      this.component = component;
!     font = component.awtComponent.getFont ();
! 
!     if (component.isRealized ())
!       initComponentGraphics ();
!     else
!       connectSignals (component);
!   }
! 
!   void initComponentGraphics ()
!   {
!     initState (component);
!     color = component.awtComponent.getForeground ();
      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();
  
    native void copyPixmap (Graphics g, int x, int y, int width, int height);
+   native void copyAndScalePixmap (Graphics g, boolean flip_x, boolean flip_y,
+                                   int src_x, int src_y, 
+                                   int src_width, int src_height, 
+                                   int dest_x, int dest_y, 
+                                   int dest_width, int dest_height);
    public boolean drawImage (Image img, int x, int y, 
  			    Color bgcolor, ImageObserver observer)
    {
+     if (component != null && ! component.isRealized ())
+       return false;
+ 
      if (img instanceof GtkOffScreenImage)
        {
+         int width = img.getWidth (null);
+         int height = img.getHeight (null);
  	copyPixmap (img.getGraphics (), 
! 		    x, y, width, height);
!         // FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
!         if (observer != null)
!           observer.imageUpdate (img,
!                                 ImageObserver.FRAMEBITS,
!                                 x, y, width, height);
  	return true;
        }
  
      GtkImage image = (GtkImage) img;
!     new GtkImagePainter (image, this, x, y, -1, -1, bgcolor, observer);
      return image.isLoaded ();
    }
  
    public boolean drawImage (Image img, int x, int y, ImageObserver observer)
    {
+     if (component != null && ! component.isRealized ())
+       return false;
+ 
      if (img instanceof GtkOffScreenImage)
        {
+         int width = img.getWidth (null);
+         int height = img.getHeight (null);
  	copyPixmap (img.getGraphics (), 
! 		    x, y, width, height);
! 
!         // FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
!         if (observer != null)
!           observer.imageUpdate (img,
!                                 ImageObserver.FRAMEBITS,
!                                 x, y, width, height);
  	return true;
        }
  
!     if (component != null)
!       return drawImage (img, x, y, component.getBackground (), observer);
!     else
!       return drawImage (img, x, y, SystemColor.window, observer);
    }
  
    public boolean drawImage (Image img, int x, int y, int width, int height, 
  			    Color bgcolor, ImageObserver observer)
    {
+     if (component != null && ! component.isRealized ())
+       return false;
+ 
      if (img instanceof GtkOffScreenImage)
        {
!         copyAndScalePixmap (img.getGraphics (), false, false,
!                             0, 0, img.getWidth (null), img.getHeight (null), 
!                             x, y, width, height);
!         // FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
!         if (observer != null)
!           observer.imageUpdate (img,
!                                 ImageObserver.FRAMEBITS,
!                                 x, y, width, height);
!         return true;
        }
  
      GtkImage image = (GtkImage) img;
!     new GtkImagePainter (image, this, x, y, width, height, bgcolor, observer);
      return image.isLoaded ();
    }
  
    public boolean drawImage (Image img, int x, int y, int width, int height, 
  			    ImageObserver observer)
    {
!     if (component != null && ! component.isRealized ())
!       return false;
! 
!     if (component != null)
!       return drawImage (img, x, y, width, height, component.getBackground (),
!                         observer);
!     else
!       return drawImage (img, x, y, width, height, SystemColor.window,
!                         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 (component != null && ! component.isRealized ())
+       return false;
+ 
      if (img instanceof GtkOffScreenImage)
        {
!         int dx_start, dy_start, d_width, d_height;
!         int sx_start, sy_start, s_width, s_height;
!         boolean x_flip = false;
!         boolean y_flip = false;
! 
!         if (dx1 < dx2)
!         {
!           dx_start = dx1;
!           d_width = dx2 - dx1;
!         }
!         else
!         {
!           dx_start = dx2;
!           d_width = dx1 - dx2;
!           x_flip ^= true;
!         }
!         if (dy1 < dy2)
!         {
!           dy_start = dy1;
!           d_height = dy2 - dy1;
!         }
!         else
!         {
!           dy_start = dy2;
!           d_height = dy1 - dy2;
!           y_flip ^= true;
!         }
!         if (sx1 < sx2)
!         {
!           sx_start = sx1;
!           s_width = sx2 - sx1;
!         }
!         else
!         {
!           sx_start = sx2;
!           s_width = sx1 - sx2;
!           x_flip ^= true;
!         }
!         if (sy1 < sy2)
!         {
!           sy_start = sy1;
!           s_height = sy2 - sy1;
!         }
!         else
!         {
!           sy_start = sy2;
!           s_height = sy1 - sy2;
!           y_flip ^= true;
!         }
! 
!         copyAndScalePixmap (img.getGraphics (), x_flip, y_flip,
!                             sx_start, sy_start, s_width, s_height, 
!                             dx_start, dy_start, d_width, d_height);
! 
!         // FIXME: need to differentiate between SOMEBITS and FRAMEBITS.
!         if (observer != null)
!           observer.imageUpdate (img,
!                                 ImageObserver.FRAMEBITS,
!                                 dx_start, dy_start, d_width, d_height);
!         return true;
        }
  
      GtkImage image = (GtkImage) img;
      new GtkImagePainter (image, this, dx1, dy1, dx2, dy2, 
! 			 sx1, sy1, sx2, sy2, bgcolor, observer);
      return image.isLoaded ();
    }
  
*************** public class GdkGraphics extends Graphic
*** 191,222 ****
  			    int sx1, int sy1, int sx2, int sy2, 
  			    ImageObserver observer) 
    {
!     return drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
! 		      component.getBackground (), observer);
    }
  
!   native public void drawLine (int x1, int y1, int x2, int y2);
  
!   native public void drawArc (int x, int y, int width, int height,
! 			      int startAngle, int arcAngle);
!   native public void fillArc (int x, int y, int width, int height, 
! 			      int startAngle, int arcAngle);
!   native public void drawOval(int x, int y, int width, int height);
!   native public void fillOval(int x, int y, int width, int height);
  
!   native public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints);
!   native public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints);
  
!   native public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints);
  
!   native public void drawRect(int x, int y, int width, int height);
!   native public void fillRect (int x, int y, int width, int height);
  
!   native void drawString (String str, int x, int y, String fname, int size);
    public void drawString (String str, int x, int y)
    {
!     drawString (str, x, y, font.getName(), font.getSize());
    }
  
    public void drawString (AttributedCharacterIterator ci, int x, int y)
    {
--- 305,349 ----
  			    int sx1, int sy1, int sx2, int sy2, 
  			    ImageObserver observer) 
    {
!     if (component != null && ! component.isRealized ())
!       return false;
! 
!     if (component != null)
!       return drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
!                         component.getBackground (), observer);
!     else
!       return drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
!                         SystemColor.window, 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)
    {
*************** public class GdkGraphics extends Graphic
*** 226,238 ****
    public void drawRoundRect(int x, int y, int width, int height, 
  			    int arcWidth, int arcHeight)
    {
!     // System.out.println ("drawRoundRect called [UNIMPLEMENTED]");
    }
  
    public void fillRoundRect (int x, int y, int width, int height, 
  			     int arcWidth, int arcHeight)
    {
!     // System.out.println ("fillRoundRect called [UNIMPLEMENTED]");
    }
  
    public Shape getClip ()
--- 353,400 ----
    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 ()
*************** public class GdkGraphics extends Graphic
*** 242,248 ****
  
    public Rectangle getClipBounds ()
    {
- //      System.out.println ("returning CLIP: " + clip);
      return new Rectangle (clip.x, clip.y, clip.width, clip.height);
    }
  
--- 404,409 ----
*************** public class GdkGraphics extends Graphic
*** 265,270 ****
--- 426,435 ----
  
    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;
*************** public class GdkGraphics extends Graphic
*** 283,293 ****
      setClip (clip.getBounds ());
    }
  
!   native private void setFGColor (int red, int green, int blue);
  
    public void setColor (Color c)
    {
!     color = c;
  
      if (xorColor == null) /* paint mode */
        setFGColor (color.getRed (), color.getGreen (), color.getBlue ());
--- 448,461 ----
      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 ());
*************** public class GdkGraphics extends Graphic
*** 296,302 ****
  		  color.getGreen () ^ xorColor.getGreen (),
  		  color.getBlue  () ^ xorColor.getBlue ());
    }
! 
    public void setFont (Font font)
    {
      this.font = font;
--- 464,470 ----
  		  color.getGreen () ^ xorColor.getGreen (),
  		  color.getBlue  () ^ xorColor.getBlue ());
    }
!   
    public void setFont (Font font)
    {
      this.font = font;
*************** public class GdkGraphics extends Graphic
*** 322,331 ****
  		color.getBlue  () ^ xorColor.getBlue ());
    }
  
!   native public void translateNative (int x, int y);
  
    public void translate (int x, int y)
    {
      clip.x -= x;
      clip.y -= y;
  
--- 490,502 ----
  		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;
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java	Fri Jan 16 14:22:23 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
! /* GdkGraphics2D.java
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* GdkGraphics2D.java --
!    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,63 ****
  
  package gnu.java.awt.peer.gtk;
  
! import java.awt.*;
! import java.awt.geom.*;
! import java.awt.font.*;
! import java.awt.color.*;
! import java.awt.image.*;
! import java.awt.image.renderable.*;
! import java.util.HashMap;
! import java.util.Map;
  
  import java.text.AttributedCharacterIterator;
  import java.util.Map;
  import java.util.Stack;
- import java.lang.Integer;
- import gnu.java.awt.ClasspathToolkit;
- import gnu.java.awt.peer.ClasspathFontPeer;
- import gnu.classpath.Configuration;
  
  public class GdkGraphics2D extends Graphics2D
  {
- 
    //////////////////////////////////////
    ////// State Management Methods //////
    //////////////////////////////////////
--- 38,98 ----
  
  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.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 //////
    //////////////////////////////////////
*************** public class GdkGraphics2D extends Graph
*** 65,78 ****
    static 
    {
      if (Configuration.INIT_LOAD_LIBRARY)
!       {
!         System.loadLibrary("gtkpeer");
!       }
  
!     if (GtkToolkit.useGraphics2D ())
!       initStaticState ();
    }
!   native static void initStaticState ();
    private final int native_state = GtkGenericPeer.getUniqueInteger();  
  
    private Paint paint;
--- 100,113 ----
    static 
    {
      if (Configuration.INIT_LOAD_LIBRARY)
!       System.loadLibrary("gtkpeer");
  
!     if (GtkToolkit.useGraphics2D())
!       initStaticState();
    }
!   
!   static native void initStaticState();
!   
    private final int native_state = GtkGenericPeer.getUniqueInteger();  
  
    private Paint paint;
*************** public class GdkGraphics2D extends Graph
*** 82,553 ****
    private Shape clip;
    private AffineTransform transform;
    private GtkComponentPeer component;
!   private Font font;  
    private RenderingHints hints;
! 
    private Stack stateStack;
-   
-   native private int[] initState (GtkComponentPeer component);
-   native private void initState (int width, int height);
-   native private void copyState (GdkGraphics2D g);
-   native public void dispose ();
  
!   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 (width, height);
    }
  
!   GdkGraphics2D (GdkGraphics2D g)
    {
      paint = g.paint;
      stroke = g.stroke;
!     hints = 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);
!     setClip (clip);
!     setTransform (transform);
      stateStack = new Stack();
    }
  
!   GdkGraphics2D (int width, int height)
    {
!     initState (width, height);
  
      setColor(Color.black);
!     setBackground (Color.black);
!     setPaint (getColor());
!     setFont (new Font("SansSerif", Font.PLAIN, 12));
!     setTransform (new AffineTransform ());
!     setStroke (new BasicStroke ());
!     setRenderingHints (new HashMap ());
  
      stateStack = new Stack();
    }
  
!   GdkGraphics2D (GtkComponentPeer component)
    {
      this.component = component;
!     int rgb[] = initState (component);
  
!     setColor (new Color (rgb[0], rgb[1], rgb[2]));
!     setBackground (new Color (rgb[3], rgb[4], rgb[5]));
!     setPaint (getColor());
!     setFont (new Font("SansSerif", Font.PLAIN, 12));
!     setTransform (new AffineTransform ());
!     setStroke (new BasicStroke ());
!     setRenderingHints (new HashMap ());
  
!     stateStack = new Stack ();
    }
  
  
    ////////////////////////////////////
    ////// 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 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);
  
    // simple passthroughs to cairo
!   private native void cairoSave ();
!   private native void cairoRestore ();
!   private native void cairoSetMatrix (double m[]);
!   private native void cairoSetFont (GdkClasspathFontPeer peer);
!   private native void cairoShowGlyphs (int codes[],
!                                        float positions[]);
!   private native void cairoSetOperator (int cairoOperator);
!   private native void cairoSetRGBColor (double red, double green, double blue);
!   private native void cairoSetAlpha (double alpha);
!   private native void cairoSetFillRule (int cairoFillRule);
!   private native void cairoSetLineWidth (double width);
!   private native void cairoSetLineCap (int cairoLineCap);
!   private native void cairoSetLineJoin (int cairoLineJoin);
!   private native void cairoSetDash (double dashes[], int ndash, double offset);
!   private native void cairoSetMiterLimit (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;  
! 	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;
! 	}
! 	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;
! 	}
!     }
!     
!     private void stateSave ()
      {
! 	stateStack.push (new DrawState (this));
! 	cairoSave ();
      }
  
!     private void stateRestore ()
      {
! 	((DrawState)(stateStack.pop ())).restore (this);
! 	cairoRestore ();
      }
  
  
!   double x;
!   double y;
!   private void setPos (double nx, double ny)
    {
!     x = nx;
!     y = ny;
    }
  
!   private void walkPath(PathIterator p)
    {
!     double coords[] = new double[6];
  
!     cairoSetFillRule (p.getWindingRule ());
!     for ( ; ! p.isDone (); p.next())
        {
!         int seg = p.currentSegment (coords);
!         switch(seg)
!           {
  
!           case PathIterator.SEG_MOVETO:
!             setPos(coords[0], coords[1]);
!             cairoMoveTo (coords[0], coords[1]);
!             break;
  
!           case PathIterator.SEG_LINETO:
!             setPos(coords[0], coords[1]);
!             cairoLineTo (coords[0], coords[1]);
!             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) * (coords[0] - x);
!             double y1 = y + (2.0/3.0) * (coords[1] - y);
!             
!             double x2 = x1 + (1.0/3.0) * (coords[2] - x);
!             double y2 = y1 + (1.0/3.0) * (coords[3] - y);
  
!             setPos(coords[2], coords[3]);
!             cairoCurveTo (x1, y1,
!                           x2, y2,
!                           coords[2], coords[3]);
!             break;
  
!           case PathIterator.SEG_CUBICTO:
!             setPos(coords[4], coords[5]);
!             cairoCurveTo (coords[0], coords[1],
!                           coords[2], coords[3],
!                           coords[4], coords[5]);
!             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;
!     
    }
  
    //////////////////////////////////////////////////
    ////// Implementation of Graphics2D Methods //////
    //////////////////////////////////////////////////
  
!   public void draw (Shape s)
    {
! 
!     if (stroke != null &&
!         !(stroke instanceof BasicStroke))
        {
!         fill (stroke.createStrokedShape (s));
!         return;
        }
  
!     stateSave ();
!     cairoNewPath ();
! 
!     boolean normalize;
!     normalize = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
!                 || hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
  
-     if (normalize)
-       translate (0.5,0.5);      
-     
      if (s instanceof Rectangle2D)
        {
!         Rectangle2D r = (Rectangle2D)s;
!         cairoRectangle (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
        }
!     else      
!       walkPath (s.getPathIterator (null));
!     cairoStroke ();
!     
!     if (normalize)
!       translate (-0.5,-0.5);
!       
!     stateRestore ();
    }
  
!   public void fill (Shape s)
    {
!     stateSave();
!     cairoNewPath ();
      if (s instanceof Rectangle2D)
        {
!         Rectangle2D r = (Rectangle2D)s;
!         cairoRectangle (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
        }
!     else      
!       walkPath (s.getPathIterator (null));
!     cairoFill ();
!     stateRestore ();
    }
  
!   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));
! 	      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 ();
!         int pixels[] = img.getRGB(0, 0, img.getWidth (), 
!                                   img.getHeight (), null, 
!                                   0, img.getWidth ());
!         setTexturePixels (pixels, img.getWidth (), 
!                           img.getHeight (), img.getWidth ());
        }
      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 setTransform (AffineTransform tx)
    {
      transform = tx;
      if (transform != null)
        {
!         double m[] = new double[6];
!         transform.getMatrix (m);
!         cairoSetMatrix (m);
        }
    }
  
!   public void transform (AffineTransform tx)
    {
      if (transform == null)
!       transform = new AffineTransform (tx);
      else
!       transform.concatenate (tx);
!     setTransform (transform);
    }
  
    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()
--- 117,754 ----
    private Shape clip;
    private AffineTransform transform;
    private GtkComponentPeer component;
!   private Font font;
    private RenderingHints hints;
!   private BufferedImage bimage;
!   private boolean pixelConversionRequired;
!   private int[] pixelBuffer;
!   private Composite comp;
    private Stack stateStack;
  
!   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);
!   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(width, height);
    }
  
!   GdkGraphics2D(GdkGraphics2D g)
    {
      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(int width, int height)
    {
!     initState(width, height);
  
      setColor(Color.black);
!     setBackground(Color.black);
!     setPaint(getColor());
!     setFont(new Font("SansSerif", Font.PLAIN, 12));
!     setTransform(new AffineTransform());
!     setStroke(new BasicStroke());
!     setRenderingHints(getDefaultHints());
  
      stateStack = new Stack();
    }
  
!   GdkGraphics2D(GtkComponentPeer component)
    {
      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();
    }
  
+   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(Color.black);
+     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 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);
  
    // simple passthroughs to cairo
!   private native void cairoSave();
!   private native void cairoRestore();
!   private native void cairoSetMatrix(double[] m);
!   private native void cairoSetOperator(int cairoOperator);
!   private native void cairoSetRGBColor(double red, double green, double blue);
!   private native void cairoSetAlpha(double alpha);
!   private native void cairoSetFillRule(int cairoFillRule);
!   private native void cairoSetLineWidth(double width);
!   private native void cairoSetLineCap(int cairoLineCap);
!   private native void cairoSetLineJoin(int cairoLineJoin);
!   private native void cairoSetDash(double[] dashes, int ndash, double offset);
  
+   private native void cairoSetMiterLimit(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();
!         for (int y = 0; y < height; ++y)
!           for (int x = 0; x < width; ++x)
!             bimage.setRGB(x, y, pixelBuffer[y*width+height]);
!       }
!   }
! 
!   private boolean drawImage(Image img, AffineTransform xform,
!                             Color bgcolor, ImageObserver obs)
!   {
!     if (img == null)
!       return false;
! 
!     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.getData(),
! 		                  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 setTransform(AffineTransform tx)
    {
      transform = tx;
      if (transform != null)
        {
! 	double[] m = new double[6];
! 	transform.getMatrix(m);
! 	cairoSetMatrix(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()
*************** public class GdkGraphics2D extends Graph
*** 555,764 ****
      return stroke;
    }
  
!   public void setStroke (Stroke st)
    {
      stroke = st;
      if (stroke instanceof BasicStroke)
        {
!         BasicStroke bs = (BasicStroke) stroke;
!         cairoSetLineCap (bs.getEndCap());
!         cairoSetLineWidth (bs.getLineWidth() / 2.0);
!         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 ());        
!           }
        }
    }
  
- 
    ////////////////////////////////////////////////
    ////// 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)
    {
      fg = c;
      paint = c;
!     cairoSetRGBColor (fg.getRed() / 255.0, 
!                       fg.getGreen() / 255.0, 
!                       fg.getBlue() / 255.0);
!     cairoSetAlpha ((fg.getAlpha() & 255) / 255.0);
    }
  
!   public Color getColor ()
    {
      return fg;
    }
  
!   public void clipRect (int x, int y, int width, int height)
    {
!       clip (new Rectangle (x, y, width, height));
    }
  
!   public Shape getClip ()
    {
!     return 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)
    {
!       cairoNewPath ();
!       cairoRectangle (x, y, width, height);
!       cairoClosePath ();
!       cairoClip ();
!       clip = new Rectangle2D.Double ((double)x, (double)y, 
! 				     (double)width, (double)height);
    }
  
!   public void setClip (Shape s)
    {
!     clip (s);
    }
  
!   public void draw3DRect(int x, int y, int width, 
!                          int height, boolean raised)
    {
!     Color std = fg;
!     Color light = std.brighter();
!     Color dark = std.darker();
! 
!     if (!raised)
        {
!         Color t = light;
!         light = dark;
!         dark = t;
!       }
!     
!     double x1 = (double) x;
!     double x2 = (double) x + width;
! 
!     double y1 = (double) y;
!     double y2 = (double) y + height;
  
!     stateSave ();
!     
!     cairoNewPath ();
!     
!     boolean normalize;
!     normalize = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
!                 || hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
! 		
!     if (normalize) 
!       {
!     	x1 += 0.5;
! 	y1 += 0.5; 
! 	x2 += 0.5;
! 	y2 += 0.5; 
        }
-     
-     setColor (light);
-     cairoMoveTo (x1, y1);
-     cairoLineTo (x2, y1);
-     cairoLineTo (x2, y2);
-     cairoStroke ();
-     
-     cairoNewPath ();
-     setColor (dark);
-     cairoMoveTo (x1, y1);
-     cairoLineTo (x1, y2);
-     cairoLineTo (x2, y2);
-     cairoStroke ();
-     
-     stateRestore ();    
    }
  
!   public void fill3DRect(int x, int y, int width, 
!                          int height, boolean raised)
!   {
!     double step = 1.0;
!     if (stroke != null && stroke instanceof BasicStroke)
!       {
!         BasicStroke bs = (BasicStroke) stroke;
!         step = bs.getLineWidth();
!       }
  
!     Color bright = fg.brighter ();
!     Color dark = fg.darker ();
!       
!     draw3DRect (x, y, width, height, raised);
!     
!     stateSave ();
!     translate (step/2.0, step/2.0);
!     cairoNewPath ();
!     cairoRectangle ((double) x, (double) y, 
!                     ((double) width) - step, 
!                     ((double) height) - step );
!     cairoClosePath ();
!     cairoFill ();
!     stateRestore ();
    }
  
  
!   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)
    {
!     fill(new Rectangle (x, y, width, height));
    }
  
!   public void clearRect (int x, int y, int width, int height)
    {
!     stateSave ();
!     cairoSetRGBColor (bg.getRed() / 255.0, 
!                       bg.getGreen() / 255.0, 
!                       bg.getBlue() / 255.0);
!     cairoSetAlpha (1.0);
!     cairoNewPath ();
!     cairoRectangle (x, y, width, height);
!     cairoClosePath ();
!     cairoFill ();
!     stateRestore ();
    }
  
    public void setBackground(Color c)
--- 756,920 ----
      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());
! 	  }
        }
    }
  
    ////////////////////////////////////////////////
    ////// 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;
!     cairoSetRGBColor(fg.getRed() / 255.0, fg.getGreen() / 255.0,
!                      fg.getBlue() / 255.0);
!     cairoSetAlpha((fg.getAlpha() & 255) / 255.0);
    }
  
!   public Color getColor()
    {
      return fg;
    }
  
!   public void clipRect(int x, int y, int width, int height)
    {
!     clip(new Rectangle(x, y, width, height));
    }
  
!   public Shape getClip()
    {
!     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 (s != null)
        {
! 	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)
    {
!     cairoSetRGBColor(bg.getRed() / 255.0, bg.getGreen() / 255.0,
!                      bg.getBlue() / 255.0);
!     cairoSetAlpha(1.0);
!     cairoNewPath();
!     cairoRectangle(x, y, width, height);
!     cairoFill();
!     setColor(fg);
! 
!     updateBufferedImage();
    }
  
    public void setBackground(Color c)
*************** public class GdkGraphics2D extends Graph
*** 771,1082 ****
      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)
    {
      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[2] = 0; i2u[3] = 0;
        }
  
!     int pixels[] = null;
  
!     if (sm.getDataType () == DataBuffer.TYPE_INT &&
!         db instanceof DataBufferInt &&
!         db.getNumBanks () == 1)
        {
!         // single bank, ARGB-ints buffer in sRGB space
!         DataBufferInt dbi = (DataBufferInt)db;
!         pixels = dbi.getData ();
        }
!     else
!       pixels = r.getPixels (0, 0, r.getWidth (), r.getHeight (), pixels);
!     
!     ColorSpace cs = cm.getColorSpace ();
!     if (cs != null && 
!         cs.getType () != ColorSpace.CS_sRGB)
        {
!         int pixels2[] = new int[pixels.length];        
!         for (int i = 0; i < pixels2.length; i++)
!           pixels2[i] = cm.getRGB (pixels[i]);        
!         pixels = pixels2;
        }
!     
!     stateSave ();
!     translate (x, y);
!     drawPixels (pixels, r.getWidth (), r.getHeight (), r.getWidth (), i2u);
!     stateRestore ();    
      return true;
    }
  
!   public void drawRenderedImage(RenderedImage image,
!                                 AffineTransform xform)
!   {
!     drawRaster (image.getColorModel(), image.getData(), xform);
!   }
!   
!   public void drawRenderableImage(RenderableImage image,
!                                   AffineTransform xform)
    {
!     drawRenderedImage (image.createRendering (new RenderContext (xform)), xform);
    }
!   
!   public boolean drawImage(Image img, 
!                            AffineTransform xform,
!                            ImageObserver obs)
    {
!     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());
!         return true;
!       }
!     else
!       {
!         if (img instanceof BufferedImage)
!           {
!             // draw an image which has actually been loaded into memory fully
!             BufferedImage b = (BufferedImage) img;
!             return drawRaster (b.getColorModel (), b.getData (), xform);
!           }        
!         else
!           {
!             // begin progressive loading in a separate thread
!             new PainterThread (this, img, xform);
!             return false;
!           }
!       }
    }
  
!   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), null);
    }
  
!   public boolean drawImage (Image img, int x, int y, 
!                             ImageObserver observer)
    {
!     return drawImage(img, new AffineTransform(1f,0f,0f,1f,x,y), observer);    
    }
  
! 
!   ////////////////////////////////////////
!   ////// Supporting Private Classes //////
!   ////////////////////////////////////////
!   
!   private class PainterThread implements Runnable, ImageConsumer
    {
! 
!     // this is a helper which is spun off when someone tries to do
!     // Graphics2D.drawImage on an image we cannot determine to be either
!     // one of our own offscreen images or a BufferedImage; that is, when
!     // someone wants to draw an image which is possibly still loading over
!     // a network or something. you run it in a separate thread and it
!     // writes through to the underlying Graphics2D as pixels becomg
!     // available.
! 
!     GdkGraphics2D gr;
!     Image image;
!     ColorModel defaultModel;
!     AffineTransform xform;
! 
!     public PainterThread (GdkGraphics2D g, Image im, AffineTransform xf)
!     {
!       image = im;
!       xform = xf;
!       this.gr = (GdkGraphics2D) g.create ();
!       new Thread (this).start ();
!     }
!     
!     public void imageComplete (int status)
!     {
!     }
!     
!     public void setColorModel (ColorModel model) 
!     {
!       defaultModel = model;
!     }
!     
!     public void setDimensions (int width, int height)
!     {
!     }
!     
!     public void setHints (int hintflags)
!     {
!     }
!     
!     public void setPixels (int x, int y, int w, int h, ColorModel model, 
!                            byte[] pixels, int off, int scansize)
!     {
!     }
!     
!     public void setPixels (int x, int y, int w, int h, ColorModel model, 
!                            int[] pixels, int off, int scansize)
!       {
!         gr.stateSave ();
!         gr.translate (x, y);
! 
!         if (model == null)
!           model = defaultModel;
! 
!         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;
! 
!         double[] xf = new double[6];
!         xform.getMatrix(xf);        
!         gr.drawPixels (pixels2, w, h, scansize, xf);
!         gr.stateRestore ();
!       }
! 
!     public void setProperties (java.util.Hashtable props)
!     {
!     }
!     
!     public void run ()
!     {
!       image.getSource ().startProduction (this);
!       gr.dispose ();
!     }
    }
  
- 
- 
    ///////////////////////////////////////////////
    ////// 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)
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
!   public void setRenderingHint(RenderingHints.Key hintKey,
!                                Object hintValue)
    {
!     hints.put (hintKey, hintValue);    
    }
  
    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));
    }
  
    public void addRenderingHints(Map hints)
    {
!     this.hints.add (new RenderingHints (hints));
    }
  
    public RenderingHints getRenderingHints()
--- 927,1181 ----
      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 addRenderingHints(Map hints)
    {
!     this.hints.add(new RenderingHints(hints));
    }
  
    public RenderingHints getRenderingHints()
*************** public class GdkGraphics2D extends Graph
*** 1086,1257 ****
  
    public Composite getComposite()
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
!   public FontRenderContext getFontRenderContext ()
    {
!     return new FontRenderContext (transform, true, true);
    }
  
!   public void drawGlyphVector (GlyphVector g, float x, float y)
!   {    
!     stateSave ();
!     setFont (g.getFont ());
!     translate ((double)x, (double)y);
!     cairoMoveTo (0, 0);
!     int nglyphs = g.getNumGlyphs ();
!     int codes[] = g.getGlyphCodes (0, nglyphs, (int []) null);
!     float posns[] = g.getGlyphPositions (0, nglyphs, (float []) null);
!     cairoShowGlyphs (codes, posns);
!     stateRestore ();
    }
  
!   public void copyArea (int x, int y, int width, int height, int dx, int dy)
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
!   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)
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
!   public boolean drawImage (Image img, int x, int y, int width, int height, 
!                             Color bgcolor, ImageObserver observer)
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
!   public boolean drawImage (Image img, int x, int y, int width, int height, 
!                             ImageObserver observer)
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
!   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)
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
!   public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2, 
!                             int sx1, int sy1, int sx2, int sy2, 
!                             ImageObserver observer) 
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
!   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)
    {
!     int x1 = x + arcWidth, x2 = x + width - arcWidth;
!     int y1 = y + arcHeight, y2 = y + height - arcHeight;
!     fillRect (x1, y, x2 - x1, height);
!     fillRect (x, y1, width, y2 - y1);
!     fillArc (x, y, arcWidth, arcHeight, 90, 90);
!     fillArc (x1, y, arcWidth, arcHeight, 0, 90);
!     fillArc (x2, y2, arcWidth, arcHeight, 270, 90);
!     fillArc (x, y2, arcWidth, arcHeight, 180, 90);
    }
  
!   public void drawString (String str, int x, int y)
    {
!     drawString (str, (float)x, (float)y);
    }
  
!   public void drawString (String str, float x, float y)
    {
!     GlyphVector gv = font.createGlyphVector (getFontRenderContext(), str);
!     drawGlyphVector (gv, x, y);
    }
  
!   public void drawString (AttributedCharacterIterator ci, int x, int y)
    {
!     drawString (ci, (float)x, (float)y);
    }
  
!   public void drawString (AttributedCharacterIterator ci, float x, float y)
    {
!     GlyphVector gv = font.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)
    {
!     int x1 = x + arcWidth, x2 = x + width - arcWidth;
!     int y1 = y + arcHeight, y2 = y + height - arcHeight;
!     fillRect (x1, y, x2 - x1, height);
!     fillRect (x, y1, width, y2 - y1);
!     fillArc (x, y, arcWidth, arcHeight, 90, 90);
!     fillArc (x1, y, arcWidth, arcHeight, 0, 90);
!     fillArc (x2, y2, arcWidth, arcHeight, 270, 90);
!     fillArc (x, y2, arcWidth, arcHeight, 180, 90);
    }
  
!   public Font getFont ()
    {
      return font;
    }
  
!   public FontMetrics getFontMetrics ()
    {
!     return Toolkit.getDefaultToolkit ().getFontMetrics (font);
    }
  
!   public FontMetrics getFontMetrics (Font f)
    {
!     return Toolkit.getDefaultToolkit ().getFontMetrics (f);
    }
  
!   public void setFont (Font f)
    {
!     if (f.getPeer() instanceof GdkClasspathFontPeer)
        font = f;
      else
        font = 
!         ((ClasspathToolkit)(Toolkit.getDefaultToolkit ()))
!         .getFont (f.getName(), f.getAttributes ());
! 
!     if (f != null && 
!         f.getPeer() instanceof GdkClasspathFontPeer)
!       cairoSetFont ((GdkClasspathFontPeer) f.getPeer());
    }
  
    public String toString()
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
- 
  }
--- 1185,1446 ----
  
    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)
!   {
!     throw new java.lang.UnsupportedOperationException();
    }
  
!   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)
    {
!     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)
    {
!     if (f.getPeer() instanceof GdkFontPeer)
        font = f;
      else
        font = 
!         ((ClasspathToolkit)(Toolkit.getDefaultToolkit()))
!         .getFont(f.getName(), f.getAttributes());    
    }
  
    public String toString()
    {
!     return  (getClass().getName()
!              + "[font=" + getFont().toString()
!              + ",color=" + fg.toString()
! 	     + "]");
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java	Thu Feb 17 07:48:22 2005
***************
*** 0 ****
--- 1,138 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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 GtkToolkit getToolkit()
+   {
+     return gdkScreenGraphicsDevice.getToolkit();
+   }
+ 
+   public GdkGraphicsConfiguration(GdkScreenGraphicsDevice dev)
+   {
+     this.gdkScreenGraphicsDevice = dev;
+     cm = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB).getColorModel();
+     bounds = getToolkit().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)
+   {
+     throw new java.lang.UnsupportedOperationException ();
+   }
+ 
+   public VolatileImage createCompatibleVolatileImage(int w, int h,
+                                                      ImageCapabilities caps)
+     throws java.awt.AWTException
+   {
+     throw new java.lang.UnsupportedOperationException ();
+   }
+ 
+   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);
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java	Thu Feb 17 07:48:22 2005
***************
*** 0 ****
--- 1,107 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.image.BufferedImage;
+ import java.util.Locale;
+ 
+ public class GdkGraphicsEnvironment extends GraphicsEnvironment
+ {
+   GtkToolkit gtkToolkit;
+ 
+   public GtkToolkit getToolkit()
+   {
+     return gtkToolkit;
+   }
+ 
+   public GdkGraphicsEnvironment (GtkToolkit tk)
+   {
+     super();
+     gtkToolkit = tk;
+   }
+ 
+   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-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java	Tue Dec  2 19:56:30 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java	Thu Feb 17 07:48:22 2005
***************
*** 1,52 ****
  /* GdkPixbufDecoder.java -- Image data decoding object
!    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., 59 Temple Place, Suite 330, Boston, MA
!    02111-1307 USA.
!    
!    Linking this library statically or dynamically with other modules is
!    making a combined work based on this library.  Thus, the terms and
!    conditions of the GNU General Public License cover the whole
!    combination.
!    
!    As a special exception, the copyright holders of this library give you
!    permission to link this library with independent modules to produce an
!    executable, regardless of the license terms of these independent
!    modules, and to copy and distribute the resulting executable under
!    terms of your choice, provided that you also meet, for each linked
!    independent module, the terms and conditions of the license of that
!    module.  An independent module is a module which is not derived from
!    or based on this library.  If you modify this library, you may extend
!    this exception to your version of the library, but you 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.io.FileDescriptor;
! import java.io.FileInputStream;
! import java.io.InputStream;
  import java.io.IOException;
  import java.net.URL;
! import java.util.Vector;
  import java.util.Hashtable;
! import gnu.classpath.Configuration;
  
  public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
  {
--- 1,74 ----
  /* 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., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
! 
! Linking this library statically or dynamically with other modules is
! making a combined work based on this library.  Thus, the terms and
! conditions of the GNU General Public License cover the whole
! combination.
! 
! As a special exception, the copyright holders of this library give you
! permission to link this library with independent modules to produce an
! executable, regardless of the license terms of these independent
! modules, and to copy and distribute the resulting executable under
! terms of your choice, provided that you also meet, for each linked
! independent module, the terms and conditions of the license of that
! module.  An independent module is a module which is not derived from
! or based on this library.  If you modify this library, you may extend
! this exception to your version of the library, but you 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
  {
*************** public class GdkPixbufDecoder extends gn
*** 58,95 ****
        }
      initStaticState ();
    }
!   native static void initStaticState ();
    private final int native_state = GtkGenericPeer.getUniqueInteger ();
  
    // the current set of ImageConsumers for this decoder
    Vector curr;
  
    // interface to GdkPixbuf
    native void initState ();
!   native void pumpBytes (byte bytes[], int len);
    native void finish ();
    
    // gdk-pixbuf provids data in RGBA format
    static final ColorModel cm = new DirectColorModel (32, 0xff000000, 
                                                       0x00ff0000, 
                                                       0x0000ff00, 
                                                       0x000000ff);
    public GdkPixbufDecoder (String filename)
    {
      super (filename);
-     initState ();
    }
    
    public GdkPixbufDecoder (URL url)
    {
      super (url);
-     initState ();
    }
  
    public GdkPixbufDecoder (byte[] imagedata, int imageoffset, int imagelength)
    {
      super (imagedata, imageoffset, imagelength);
-     initState ();
    }
  
    // called back by native side
--- 80,122 ----
        }
      initStaticState ();
    }
!   
!   static native void initStaticState();
    private final int native_state = GtkGenericPeer.getUniqueInteger ();
+   private boolean initialized = false;
  
    // the current set of ImageConsumers for this decoder
    Vector curr;
  
    // interface to GdkPixbuf
    native void initState ();
!   native void pumpBytes (byte[] bytes, int len);
    native void finish ();
+   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
*************** public class GdkPixbufDecoder extends gn
*** 135,140 ****
--- 162,168 ----
  
      byte bytes[] = new byte[4096];
      int len = 0;
+     initState();
      while ((len = is.read (bytes)) != -1)
        pumpBytes (bytes, len);
      
*************** public class GdkPixbufDecoder extends gn
*** 147,170 ****
      curr = null;
    }
  
!   // remaining helper class and static method is a convenience for the Gtk
!   // peers, for loading a BufferedImage in off a disk file. one would think
!   // this ought to be fairly straightforward, but it does not appear
!   // anywhere else I can find.
  
!   private static class BufferedImageBuilder implements ImageConsumer
    {
      BufferedImage bufferedImage;
      ColorModel defaultModel;
  
!     public BufferedImage getBufferedImage()
      {
!       return bufferedImage;
      }
  
!     public void setDimensions(int width, int height)
      {
!       bufferedImage = new BufferedImage (width, height, BufferedImage.TYPE_INT_ARGB);
      }
      
      public void setProperties(Hashtable props) {}
--- 175,523 ----
      curr = null;
    }
  
!   public void finalize()
!   {
!     finish();
!   }
  
! 
!   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)
!       throw new IllegalArgumentException("extension is 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 class GdkPixbufDecoder extends gn
*** 186,223 ****
                            ColorModel model, int[] pixels, 
                            int offset, int scansize)
      {
!       if (bufferedImage != null)
          {
  
!           if (model == null)
!             model = defaultModel;
  
!           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);
!         }
      }
  
!     public void imageComplete(int status) {}
    }
  
    public static BufferedImage createBufferedImage (String filename)
    {
!     BufferedImageBuilder bb = new BufferedImageBuilder ();
!     GdkPixbufDecoder dec = new GdkPixbufDecoder (filename);
!     dec.startProduction (bb);
!     return bb.getBufferedImage ();
    }
  }
--- 539,675 ----
                            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-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java	Thu Feb 17 07:48:22 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java	Thu Feb 17 07:48:22 2005
***************
*** 0 ****
--- 1,82 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.GraphicsConfiguration;
+ import java.awt.GraphicsDevice;
+ 
+ public class GdkScreenGraphicsDevice extends GraphicsDevice
+ {
+   GdkGraphicsEnvironment env;
+ 
+   public GtkToolkit getToolkit()
+   {
+     return env.getToolkit();
+   }
+ 
+   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);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java	Thu Feb 17 07:48:22 2005
***************
*** 0 ****
--- 1,434 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 Shape getOutline (AffineTransform tx)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   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-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkArg.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkArg.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkArg.java	Fri Jan 31 17:54:13 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkArg.java	Thu Jan  1 00:00:00 1970
***************
*** 1,61 ****
- /* GtkArg.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you 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;
- 
- public class GtkArg
- {
-   String name;
-   Object value;
- 
-   public GtkArg (String name, Object value)
-   {
-     this.name = name;
-     this.value = value;
-   }
- 
-   public String getName ()
-   {
-     return name;
-   }
- 
-   public Object getValue ()
-   {
-     return value;
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkArgList.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkArgList.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkArgList.java	Fri Jan 31 17:54:13 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkArgList.java	Thu Jan  1 00:00:00 1970
***************
*** 1,75 ****
- /* GtkArgList.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you 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.util.Vector;
- 
- public class GtkArgList extends Vector
- {
-   void add (GtkArg arg)
-   {
-     addElement (arg);
-   }
- 
-   void add (String name, boolean value)
-   {
-     addElement (new GtkArg (name, new Boolean (value)));
-   }
-     
-   void add (String name, int value)
-   {
-     addElement (new GtkArg (name, new Integer (value)));
-   }
- 
-   void add (String name, float value)
-   {
-     addElement (new GtkArg (name, new Float (value)));
-   }
- 
-   void add (String name, Object value)
-   {
-     addElement (new GtkArg (name, value));
-   }
- 
-   synchronized void setArgs (GtkComponentPeer cp)
-   {
-     for (int i = 0; i < elementCount; i++)
-       cp.set ((GtkArg)elementData[i]);
-   }
- }
-   
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java	Thu Dec 11 13:50:50 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java	Wed Feb 16 20:01:28 2005
***************
*** 1,5 ****
  /* GtkButtonPeer.java -- Implements ButtonPeer with GTK
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkButtonPeer.java -- Implements ButtonPeer with GTK
!    Copyright (C) 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package gnu.java.awt.peer.gtk;
*** 41,102 ****
  import java.awt.AWTEvent;
  import java.awt.Button;
  import java.awt.Component;
! import java.awt.Font;
! import java.awt.event.MouseEvent;
  import java.awt.event.KeyEvent;
  import java.awt.peer.ButtonPeer;
  
  public class GtkButtonPeer extends GtkComponentPeer
      implements ButtonPeer
  {
!   native void create ();
!   public native void connectJObject ();
    public native void connectSignals ();
  
!   native void gtkSetFont(String name, int style, int size);
    native void gtkWidgetSetForeground (int red, int green, int blue);
  
    public GtkButtonPeer (Button b)
    {
      super (b);
    }
  
    public void setLabel (String label) 
    {
!     set ("label", label);
    }
  
    public void handleEvent (AWTEvent e)
    {
!     if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ())
        {
  	MouseEvent me = (MouseEvent) e;
  	if (!me.isConsumed ()
! 	    && (me.getModifiers () & MouseEvent.BUTTON1_MASK) != 0)
! 	  postActionEvent (((Button)awtComponent).getActionCommand (), 
! 			   me.getModifiers ());
        }
  
      if (e.getID () == KeyEvent.KEY_PRESSED)
        {
  	KeyEvent ke = (KeyEvent) e;
  	if (!ke.isConsumed () && ke.getKeyCode () == KeyEvent.VK_SPACE)
! 	  postActionEvent (((Button)awtComponent).getActionCommand (),
! 			   ke.getModifiers ());
        }
  
      super.handleEvent (e);
    }
- 
-   public void getArgs (Component component, GtkArgList args)
-   {
-     super.getArgs (component, args);
- 
-     args.add ("label", ((Button)component).getLabel ());
-   }
- 
-   public void setFont (Font f)
-   {
-     gtkSetFont(f.getName(), f.getStyle(), f.getSize());
-   }
  }
--- 41,107 ----
  import java.awt.AWTEvent;
  import java.awt.Button;
  import java.awt.Component;
! import java.awt.Point;
  import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
  import java.awt.peer.ButtonPeer;
  
  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);
  
    public GtkButtonPeer (Button b)
    {
      super (b);
    }
  
+   void create ()
+   {
+     create (((Button) awtComponent).getLabel ());
+   }
+ 
    public void setLabel (String label) 
    {
!     gtkSetLabel(label);
    }
  
    public void handleEvent (AWTEvent e)
    {
!     if (e.getID () == MouseEvent.MOUSE_RELEASED && isEnabled ())
        {
  	MouseEvent me = (MouseEvent) e;
+ 	Point p = me.getPoint();
+ 	p.translate(((Component) me.getSource()).getX(),
+ 	            ((Component) me.getSource()).getY());
  	if (!me.isConsumed ()
! 	    && (me.getModifiersEx () & MouseEvent.BUTTON1_DOWN_MASK) != 0
! 	    && awtComponent.getBounds().contains(p))
!           postActionEvent (((Button) awtComponent).getActionCommand (), 
!                            me.getModifiersEx ());
        }
  
      if (e.getID () == KeyEvent.KEY_PRESSED)
        {
  	KeyEvent ke = (KeyEvent) e;
  	if (!ke.isConsumed () && ke.getKeyCode () == KeyEvent.VK_SPACE)
!           {
!             postActionEvent (((Button) awtComponent).getActionCommand (),
!                              ke.getModifiersEx ());
!             gtkActivate ();
!           }
        }
  
      super.handleEvent (e);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java	Sun Jul 13 15:09:20 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkCheckboxMenuItemPeer.java -- Implements CheckboxMenuItemPeer with GTK+
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkCheckboxMenuItemPeer.java -- Implements CheckboxMenuItemPeer with GTK+
!    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,46 ****
  package gnu.java.awt.peer.gtk;
  
  import java.awt.CheckboxMenuItem;
  import java.awt.peer.CheckboxMenuItemPeer;
- import java.awt.peer.MenuItemPeer;
  
  public class GtkCheckboxMenuItemPeer extends GtkMenuItemPeer
    implements CheckboxMenuItemPeer
--- 39,47 ----
  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
*************** public class GtkCheckboxMenuItemPeer ext
*** 53,57 ****
      setState (menu.getState ());
    }
  
!   native public void setState (boolean t);
  }
--- 54,69 ----
      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-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java	Thu Dec 11 13:50:50 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java	Wed Feb 16 20:01:28 2005
*************** package gnu.java.awt.peer.gtk;
*** 40,46 ****
  
  import java.awt.Checkbox;
  import java.awt.CheckboxGroup;
- import java.awt.Component;
  import java.awt.peer.CheckboxPeer;
  
  public class GtkCheckboxPeer extends GtkComponentPeer
--- 40,45 ----
*************** public class GtkCheckboxPeer extends Gtk
*** 51,87 ****
    // The current state of the GTK checkbox.
    private boolean currentState;  
  
!   public native void nativeCreate (GtkCheckboxGroupPeer group,
!                                    boolean state);
    public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group);
    public native void connectSignals ();
  
    public GtkCheckboxPeer (Checkbox c)
    {
      super (c);
    }
  
!   // We can't fully use the ordinary getArgs code here, due to
!   // oddities of this particular widget.  In particular we must be
!   // able to switch between a checkbutton and a radiobutton
!   // dynamically.
    public void create ()
    {
!     CheckboxGroup g = ((Checkbox) awtComponent).getCheckboxGroup ();
      old_group = GtkCheckboxGroupPeer.getCheckboxGroupPeer (g);
!     currentState = ((Checkbox)awtComponent).getState();
!     nativeCreate (old_group, currentState);
    }
  
    public void setState (boolean state)
    {
      if (currentState != state)
!       set ("active", state);
    }
  
    public void setLabel (String label)
    {
!     set ("label", label);
    }
  
    public void setCheckboxGroup (CheckboxGroup group)
--- 50,88 ----
    // The current state of the GTK checkbox.
    private boolean currentState;  
  
!   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)
    {
      if (currentState != state)
!       gtkToggleButtonSetActive (state);
    }
  
    public void setLabel (String label)
    {
!     gtkButtonSetLabel (label);
    }
  
    public void setCheckboxGroup (CheckboxGroup group)
*************** public class GtkCheckboxPeer extends Gtk
*** 97,109 ****
        }
    }
  
-   public void getArgs (Component component, GtkArgList args)
-   {
-     super.getArgs (component, args);
-     args.add ("active", ((Checkbox) component).getState ());
-     args.add ("label", ((Checkbox) component).getLabel ());
-   }
- 
    // Override the superclass postItemEvent so that the peer doesn't
    // need information that we have.
    public void postItemEvent (Object item, int stateChange)
--- 98,103 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java	Mon Jan  5 21:18:06 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkChoicePeer.java -- Implements ChoicePeer with GTK
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkChoicePeer.java -- Implements ChoicePeer with GTK
!    Copyright (C) 1998, 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.awt.peer.gtk;
  
- import java.awt.AWTEvent;
  import java.awt.Choice;
  import java.awt.event.ItemEvent;
  import java.awt.peer.ChoicePeer;
--- 38,43 ----
*************** public class GtkChoicePeer extends GtkCo
*** 58,82 ****
  	  items[i] = c.getItem (i);
  	  
  	append (items);
- 
-         // Must set our state before notifying listeners
- 	((Choice) awtComponent).select (c.getItem (0));
- 	postItemEvent (c.getItem (0), ItemEvent.SELECTED);
        }
    }
  
    native void create ();
  
    native void append (String items[]);
!   native int getHistory ();
    native void nativeAdd (String item, int index);
    native void nativeRemove (int index);
  
!   native public void select (int position);
   
    public void add (String item, int index)
    {
!     int before = getHistory();
      
      nativeAdd (item, index);
      
--- 57,82 ----
  	  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 ();
  
!   public native void select (int position);
   
    public void add (String item, int index)
    {
!     int before = nativeGetSelected();
      
      nativeAdd (item, index);
      
*************** public class GtkChoicePeer extends GtkCo
*** 92,102 ****
  
    public void remove (int index)
    {
!     int before = getHistory();
      int after;
      
      nativeRemove (index);
!     after = getHistory();
      
      /* Generate an ItemEvent if we are removing the currently selected item
         and there are at least one item left. */
--- 92,102 ----
  
    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. */
*************** public class GtkChoicePeer extends GtkCo
*** 110,116 ****
  
    public void removeAll ()
    {
!     nativeRemove (-1);
    }
    
    public void addItem (String item, int position)
--- 110,116 ----
  
    public void removeAll ()
    {
!     nativeRemoveAll();
    }
    
    public void addItem (String item, int position)
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkClipboard.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkClipboard.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkClipboard.java	Sun Jul 13 15:09:20 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkClipboard.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkClipboard.java
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkClipboard.java
!    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.datatransfer.ClipboardOw
*** 43,58 ****
  import java.awt.datatransfer.DataFlavor;
  import java.awt.datatransfer.StringSelection;
  import java.awt.datatransfer.Transferable;
  import java.io.InputStream;
  import java.io.InputStreamReader;
- import java.io.IOException;
  
  public class GtkClipboard extends Clipboard
  {
    /* the number of milliseconds that we'll wait around for the
       owner of the GDK_SELECTION_PRIMARY selection to convert 
       the requested data */
!   final static int SELECTION_RECEIVED_TIMEOUT = 5000;
  
    /* We currently only support transferring of text between applications */
    static String selection;
--- 43,58 ----
  import java.awt.datatransfer.DataFlavor;
  import java.awt.datatransfer.StringSelection;
  import java.awt.datatransfer.Transferable;
+ import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  
  public class GtkClipboard extends Clipboard
  {
    /* the number of milliseconds that we'll wait around for the
       owner of the GDK_SELECTION_PRIMARY selection to convert 
       the requested data */
!   static final int SELECTION_RECEIVED_TIMEOUT = 5000;
  
    /* We currently only support transferring of text between applications */
    static String selection;
*************** public class GtkClipboard extends Clipbo
*** 60,74 ****
  
    static boolean hasSelection = false;
  
!   protected 
!   GtkClipboard ()
    {
!     super ("System Clipboard");
!     initNativeState ();
    }
  
!   public Transferable 
!   getContents (Object requestor)
    {
      synchronized (this)
        {
--- 60,72 ----
  
    static boolean hasSelection = false;
  
!   protected GtkClipboard()
    {
!     super("System Clipboard");
!     initNativeState();
    }
  
!   public Transferable getContents(Object requestor)
    {
      synchronized (this)
        {
*************** public class GtkClipboard extends Clipbo
*** 77,148 ****
        }
  
      /* Java doesn't own the selection, so we need to ask X11 */
      synchronized (selectionLock)
        {
! 	requestStringConversion ();
  	try 
  	  {
! 	    selectionLock.wait (SELECTION_RECEIVED_TIMEOUT);
  	  } 
  	catch (InterruptedException e)
  	  {
  	    return null;
  	  }
  	
! 	return (selection == null) ? null : new StringSelection (selection);
        }
    }
  
!   void 
!   stringSelectionReceived (String newSelection)
    {
      synchronized (selectionLock)
        {
  	selection = newSelection;
! 	selectionLock.notify ();
        }
    }
  
    /* convert Java clipboard data into a String suitable for sending
       to another application */
!   synchronized String
!   stringSelectionHandler () throws IOException
    {
      String selection = null;
  
!     try {
!       if (contents.isDataFlavorSupported (DataFlavor.stringFlavor))
! 	selection = (String)contents.getTransferData (DataFlavor.stringFlavor);
!       else if (contents.isDataFlavorSupported (DataFlavor.plainTextFlavor))
! 	{
! 	  StringBuffer sbuf = new StringBuffer ();
! 	  InputStreamReader reader;
! 	  char readBuf[] = new char[512];
! 	  int numChars;
  	  
! 	  reader = new InputStreamReader 
! 	    ((InputStream) 
! 	     contents.getTransferData (DataFlavor.plainTextFlavor), "UNICODE");
  	  
! 	  while (true)
! 	    {
! 	      numChars = reader.read (readBuf);
! 	      if (numChars == -1)
! 		break;
! 	      sbuf.append (readBuf, 0, numChars);
! 	    }
  	  
! 	  selection = new String (sbuf);
! 	}
!     } catch (Exception e) { }
      
      return selection;
    }
  
!   public synchronized void
!   setContents (Transferable contents, ClipboardOwner owner)
    {
!     selectionGet ();
  
      this.contents = contents;
      this.owner = owner;
--- 75,150 ----
        }
  
      /* Java doesn't own the selection, so we need to ask X11 */
+     // XXX: Does this hold with Swing too ?
      synchronized (selectionLock)
        {
! 	requestStringConversion();
! 	
  	try 
  	  {
! 	    selectionLock.wait(SELECTION_RECEIVED_TIMEOUT);
  	  } 
  	catch (InterruptedException e)
  	  {
  	    return null;
  	  }
  	
! 	return selection == null ? null : new StringSelection(selection);
        }
    }
  
!   void stringSelectionReceived(String newSelection)
    {
      synchronized (selectionLock)
        {
  	selection = newSelection;
! 	selectionLock.notify();
        }
    }
  
    /* convert Java clipboard data into a String suitable for sending
       to another application */
!   synchronized String stringSelectionHandler() throws IOException
    {
      String selection = null;
  
!     try
!       {
! 	if (contents.isDataFlavorSupported(DataFlavor.stringFlavor))
! 	  selection = (String)contents.getTransferData(DataFlavor.stringFlavor);
! 	else if (contents.isDataFlavorSupported(DataFlavor.plainTextFlavor))
! 	  {
! 	    StringBuffer sbuf = new StringBuffer();
! 	    InputStreamReader reader;
! 	    char readBuf[] = new char[512];
! 	    int numChars;
  	  
! 	    reader = new InputStreamReader 
! 	      ((InputStream) 
! 	       contents.getTransferData(DataFlavor.plainTextFlavor), "UNICODE");
  	  
! 	    while (true)
! 	      {
! 		numChars = reader.read(readBuf);
! 		if (numChars == -1)
! 		  break;
! 		sbuf.append(readBuf, 0, numChars);
! 	      }
  	  
! 	    selection = new String(sbuf);
! 	  }
!       }
!     catch (Exception e)
!       {
!       }
      
      return selection;
    }
  
!   public synchronized void setContents(Transferable contents,
! 				       ClipboardOwner owner)
    {
!     selectionGet();
  
      this.contents = contents;
      this.owner = owner;
*************** public class GtkClipboard extends Clipbo
*** 150,169 ****
      hasSelection = true;
    }
  
!   synchronized
!   void selectionClear ()
    {
      hasSelection = false;
  
      if (owner != null)
        {
! 	owner.lostOwnership (this, contents);
  	owner = null;
  	contents = null;
        }
    }
  
!   native void initNativeState ();
!   native static void requestStringConversion ();
!   native static void selectionGet ();
  }
--- 152,170 ----
      hasSelection = true;
    }
  
!   synchronized void selectionClear()
    {
      hasSelection = false;
  
      if (owner != null)
        {
! 	owner.lostOwnership(this, contents);
  	owner = null;
  	contents = null;
        }
    }
  
!   native void initNativeState();
!   static native void requestStringConversion();
!   static native void selectionGet();
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java	Tue Jan 13 20:54:46 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkComponentPeer.java -- Implements ComponentPeer with GTK
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkComponentPeer.java -- Implements ComponentPeer with GTK
!    Copyright (C) 1998, 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.AWTEvent;
*** 42,52 ****
  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.Frame;
  import java.awt.Graphics;
  import java.awt.Graphics2D;
  import java.awt.GraphicsConfiguration;
--- 42,52 ----
  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;
*************** public class GtkComponentPeer extends Gt
*** 75,102 ****
  
    Insets insets;
  
    /* 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 ();
!   native static boolean modalHasGrab ();
  
    native int[] gtkWidgetGetForeground ();
    native int[] gtkWidgetGetBackground ();
-   native void gtkWidgetSetVisible (boolean b);
    native void gtkWidgetGetDimensions (int[] dim);
    native void gtkWidgetGetPreferredDimensions (int[] dim);
    native void gtkWidgetGetLocationOnScreen (int[] point);
    native void gtkWidgetSetCursor (int type);
    native void gtkWidgetSetBackground (int red, int green, int blue);
    native void gtkWidgetSetForeground (int red, int green, int blue);
  
    void create ()
    {
      throw new RuntimeException ();
    }
  
-   native void connectJObject ();
    native void connectSignals ();
  
    protected GtkComponentPeer (Component awtComponent)
--- 75,109 ----
  
    Insets insets;
  
+   boolean isInRepaint;
+ 
    /* 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 gtkWidgetGetLocationOnScreen (int[] point);
    native void gtkWidgetSetCursor (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 create ()
    {
      throw new RuntimeException ();
    }
  
    native void connectSignals ();
  
    protected GtkComponentPeer (Component awtComponent)
*************** public class GtkComponentPeer extends Gt
*** 105,133 ****
      this.awtComponent = awtComponent;
      insets = new Insets (0, 0, 0, 0);
  
!     /* temporary try/catch block until all peers use this creation method */
!     try {
!       create ();
!       
!       GtkArgList args = new GtkArgList ();
!       getArgs (awtComponent, args);
!       args.setArgs (this);
  
!       connectJObject ();
!       connectSignals ();
  
!       if (awtComponent.getForeground () != null)
! 	setForeground (awtComponent.getForeground ());
!       if (awtComponent.getBackground () != null)
! 	setBackground (awtComponent.getBackground ());
!       if (awtComponent.getFont() != null)
! 	setFont(awtComponent.getFont());
  
!       setCursor (awtComponent.getCursor ());
!       Rectangle bounds = awtComponent.getBounds ();
!       setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
  
!     } catch (RuntimeException ex) { ; }
    }
  
    public int checkImage (Image image, int width, int height, 
--- 112,194 ----
      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 ();
!   }
! 
!   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, 
*************** public class GtkComponentPeer extends Gt
*** 139,145 ****
  
    public Image createImage (ImageProducer producer) 
    {
!     return new GtkImage (producer, null);
    }
  
    public Image createImage (int width, int height)
--- 200,208 ----
  
    public Image createImage (ImageProducer producer) 
    {
!     GtkImage image = new GtkImage (producer, null);
!     producer.startProduction (image);
!     return image;
    }
  
    public Image createImage (int width, int height)
*************** public class GtkComponentPeer extends Gt
*** 154,159 ****
--- 217,225 ----
      else
        g = new GdkGraphics (width, height);
  
+     g.setColor(getBackground());
+     g.fillRect(0, 0, width, height);
+ 
      return new GtkOffScreenImage (null, g, width, height);
    }
  
*************** public class GtkComponentPeer extends Gt
*** 174,185 ****
  
    public FontMetrics getFontMetrics (Font font)
    {
!     return new GdkFontMetrics (font);
    }
  
    public Graphics getGraphics ()
    {
!     return null;
    }
  
    public Point getLocationOnScreen () 
--- 240,254 ----
  
    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 () 
*************** public class GtkComponentPeer extends Gt
*** 206,211 ****
--- 275,322 ----
    
    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 () 
*************** public class GtkComponentPeer extends Gt
*** 224,230 ****
  
    public void paint (Graphics g)
    {
-     awtComponent.paint (g);
    }
  
    public Dimension preferredSize ()
--- 335,340 ----
*************** public class GtkComponentPeer extends Gt
*** 271,281 ****
  
    public void repaint (long tm, int x, int y, int width, int height)
    {
!     q.postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
! 				 new Rectangle (x, y, width, height)));
    }
  
!   native public void requestFocus ();
  
    public void reshape (int x, int y, int width, int height) 
    {
--- 381,398 ----
  
    public void repaint (long tm, int x, int y, int width, int height)
    {
!     if (x == 0 && y == 0 && width == 0 && height == 0)
!       return;
! 
!     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) 
    {
*************** public class GtkComponentPeer extends Gt
*** 287,308 ****
      gtkWidgetSetBackground (c.getRed(), c.getGreen(), c.getBlue());
    }
  
!   native public void setNativeBounds (int x, int y, int width, int height);
  
    public void setBounds (int x, int y, int width, int height)
    {
      Component parent = awtComponent.getParent ();
!     
!     if (parent instanceof Window)
        {
  	Insets insets = ((Window) parent).getInsets ();
! 	// Convert from Java coordinates to GTK coordinates.
! 	setNativeBounds (x - insets.left, y - insets.top, width, height);
        }
      else
        setNativeBounds (x, y, width, height);
    }
  
    public void setCursor (Cursor cursor) 
    {
      gtkWidgetSetCursor (cursor.getType ());
--- 404,462 ----
      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)
    {
      Component parent = awtComponent.getParent ();
! 
!     // 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;
! 
! 	i = ((Container) parent).getInsets ();
! 
! 	x += parent.getX () + i.left;
! 	y += parent.getY () + i.top;
! 
! 	parent = parent.getParent ();
!       }
! 
!     // 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)
        {
  	Insets insets = ((Window) parent).getInsets ();
!         GtkWindowPeer peer = (GtkWindowPeer) parent.getPeer ();
!         int menuBarHeight = 0;
!         if (peer instanceof GtkFramePeer)
!           menuBarHeight = ((GtkFramePeer) peer).getMenuBarHeight ();
! 
!         // Convert from Java coordinates to GTK coordinates.
!         setNativeBounds (x - insets.left, y - insets.top + menuBarHeight,
!                          width, height);
        }
      else
        setNativeBounds (x, y, width, height);
    }
  
+   void setCursor ()
+   {
+     setCursor (awtComponent.getCursor ());
+   }
+ 
    public void setCursor (Cursor cursor) 
    {
      gtkWidgetSetCursor (cursor.getType ());
*************** public class GtkComponentPeer extends Gt
*** 310,316 ****
  
    public void setEnabled (boolean b)
    {
!     set ("sensitive", b);
    }
  
    public void setFont (Font f)
--- 464,470 ----
  
    public void setEnabled (boolean b)
    {
!     gtkWidgetSetSensitive (b);
    }
  
    public void setFont (Font f)
*************** public class GtkComponentPeer extends Gt
*** 318,323 ****
--- 472,478 ----
      // 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) 
*************** public class GtkComponentPeer extends Gt
*** 339,429 ****
  
    public void setVisible (boolean b)
    {
!     set ("visible", 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)
    {
!     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)
    {
!     q.postEvent (new KeyEvent (awtComponent, id, when, mods,
! 			       keyCode, keyChar, keyLocation));
    }
  
    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));
    }
  
-   public void getArgs (Component component, GtkArgList args)
-   {
-     args.add ("visible", component.isVisible ());
-     args.add ("sensitive", component.isEnabled ());
- 
-     ComponentPeer p;
- 
-     do
-       {
- 	component = component.getParent ();
- 	p = component.getPeer ();
-       } while (p instanceof java.awt.peer.LightweightPeer);
-     
-     if (p != null)
-       args.add ("parent", p);
-   }
- 
-   native void set (String name, String value);
-   native void set (String name, boolean value);
-   native void set (String name, int value);
-   native void set (String name, float value);
-   native void set (String name, Object value);
- 
-   void set (GtkArg arg)
-   {
-     String name = arg.getName ();
-     Object value = arg.getValue ();
- 
-     if (value instanceof Boolean)
-       set (name, ((Boolean)value).booleanValue ());
-     else if (value instanceof Integer)
-       set (name, ((Integer)value).intValue ());
-     else if (value instanceof Float)
-       set (name, ((Float)value).floatValue ());
-     else if (value instanceof String)
-       set (name, ((String) value));
-     else
-       set (name, value);
-   }
- 
    public GraphicsConfiguration getGraphicsConfiguration ()
    {
      // FIXME: just a stub for now.
--- 494,559 ----
  
    public void setVisible (boolean b)
    {
!     if (b)
!       show ();
!     else
!       hide ();
    }
  
!   public native void hide ();
!   public native void show ();
  
    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));
    }
  
    public GraphicsConfiguration getGraphicsConfiguration ()
    {
      // FIXME: just a stub for now.
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java	Tue Jan 13 17:55:20 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java	Wed Feb 16 20:01:31 2005
*************** exception statement from your version. *
*** 38,56 ****
  
  package gnu.java.awt.peer.gtk;
  
- import java.awt.AWTEvent;
  import java.awt.Color;
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Graphics;
  import java.awt.Insets;
! import java.awt.event.PaintEvent;
  import java.awt.peer.ContainerPeer;
  
  public class GtkContainerPeer extends GtkComponentPeer
    implements ContainerPeer
  {
    Container c;
  
    public GtkContainerPeer(Container c)
    {
--- 38,58 ----
  
  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;
+   boolean isValidating;
  
    public GtkContainerPeer(Container c)
    {
*************** public class GtkContainerPeer extends Gt
*** 58,79 ****
      this.c = c;
    }
  
!   public void beginValidate() 
    {
    }
  
!   public void endValidate() 
    {
! //      q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
! //  				 new Rectangle (x, y, width, height)));
! //      Graphics gc = getGraphics ();
! //      if (gc != null)
! //        {
! //  	awtComponent.update (gc);
! //  	gc.dispose ();
! //        }
! //      System.out.println ("got here");
! //      awtComponent.repaint ();
    }
  
    public Insets getInsets() 
--- 60,97 ----
      this.c = c;
    }
  
!   public void beginValidate ()
    {
+     isValidating = true;
    }
  
!   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 ();
!       }
! 
!     isValidating = false;
    }
  
    public Insets getInsets() 
*************** public class GtkContainerPeer extends Gt
*** 89,138 ****
    public void setBounds (int x, int y, int width, int height)
    {
      super.setBounds (x, y, width, height);
-     awtComponent.validate ();
    }
  
!   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 ();
! 
! 	      // 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;
!       }
    }
  
    public void beginLayout () { }
--- 107,129 ----
    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++)
!       {
!         GtkComponentPeer peer = (GtkComponentPeer) components[i].getPeer();
!         if (peer != null && ! peer.awtComponent.isFontSet())
!           peer.setFont(f);
!       }
    }
  
!   public Graphics getGraphics ()
    {
!     return super.getGraphics();
    }
  
    public void beginLayout () { }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java	Tue Jan 13 20:54:46 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java	Wed Feb 16 20:01:31 2005
*************** exception statement from your version. *
*** 38,46 ****
  
  package gnu.java.awt.peer.gtk;
  
- import java.awt.AWTEvent;
- import java.awt.Component;
  import java.awt.Dialog;
  import java.awt.peer.DialogPeer;
  
  public class GtkDialogPeer extends GtkWindowPeer
--- 38,47 ----
  
  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
*************** public class GtkDialogPeer extends GtkWi
*** 50,71 ****
    {
      super (dialog);
    }
  
!   void create ()
    {
!     // Create a decorated dialog window.
!     create (GDK_WINDOW_TYPE_HINT_DIALOG, true);
    }
  
!   public void getArgs (Component component, GtkArgList args)
    {
!     super.getArgs (component, args);
  
!     Dialog dialog = (Dialog) component;
  
!     args.add ("title", dialog.getTitle ());
!     args.add ("modal", dialog.isModal ());
!     args.add ("allow_shrink", dialog.isResizable ());
!     args.add ("allow_grow", dialog.isResizable ());
    }
  }
--- 51,94 ----
    {
      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 ()
    {
!     // Create a decorated dialog window.
!     create (GDK_WINDOW_TYPE_HINT_DIALOG, true);
  
!     Dialog dialog = (Dialog) awtComponent;
  
!     gtkWindowSetModal (dialog.isModal ());
!     setTitle (dialog.getTitle ());
!     setResizable (dialog.isResizable ());
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java	Thu Jan  8 21:12:25 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkFileDialogPeer.java -- Implements FileDialogPeer with GTK
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkFileDialogPeer.java -- Implements FileDialogPeer with GTK
!    Copyright (C) 1998, 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,49 ****
  
  package gnu.java.awt.peer.gtk;
  
- import java.awt.AWTEvent;
  import java.awt.Dialog;
  import java.awt.FileDialog;
  import java.awt.Graphics;
! import java.awt.event.WindowEvent;
  import java.awt.peer.FileDialogPeer;
  import java.io.FilenameFilter;
  
  public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
--- 38,49 ----
  
  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.peer.FileDialogPeer;
+ import java.io.File;
  import java.io.FilenameFilter;
  
  public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
*************** public class GtkFileDialogPeer extends G
*** 52,68 ****
    
    private String currentFile = null;
    private String currentDirectory = null;
  
!   native void create ();
  
    public GtkFileDialogPeer (FileDialog fd)
    {
      super (fd);
    }
  
!   native void connectJObject ();
!   native void connectSignals ();
!   native void nativeSetFile (String file);
  
    public void setFile (String fileName)
    {
--- 52,99 ----
    
    private String currentFile = null;
    private String currentDirectory = null;
+   private FilenameFilter filter;
  
!   native void create (GtkContainerPeer parent);
!   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 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);
!         ((GtkFileDialogPeer) this).setBoundsCallback ((Window) awtComponent,
!                                                       awtComponent.getX (),
!                                                       awtComponent.getY (),
!                                                       dims[0], dims[1]);
!       }
!     super.setComponentBounds ();
!   }
  
    public void setFile (String fileName)
    {
*************** public class GtkFileDialogPeer extends G
*** 80,105 ****
          return;
        }
  
!     // Remove any directory path from the filename
!     int sepIndex = fileName.lastIndexOf (FS);
!     if (sepIndex < 0)
        {
-         currentFile = fileName;
          nativeSetFile (fileName);
        }
      else
        {
!         if (fileName.length() > (sepIndex + 1))
! 	  {
! 	    String fn = fileName.substring (sepIndex + 1);
!             currentFile = fn;
!             nativeSetFile (fn);
! 	  }
! 	else
! 	  {
!             currentFile = "";
!             nativeSetFile ("");
! 	  }
        }
    }
  
--- 111,126 ----
          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 class GtkFileDialogPeer extends G
*** 120,139 ****
        }
        
      currentDirectory = directory;
! 
!     // Gtk expects the directory to end with a file separator
!     if (directory.substring (directory.length () - 1).equals (FS))
!       nativeSetFile (directory);
!     else
!       nativeSetFile (directory + FS);
    }
  
    public void setFilenameFilter (FilenameFilter filter)
    {
!     /* GTK has no filter callbacks yet.  It works by setting a pattern
!      * (see gtk_file_selection_complete), which we can't convert
!      * to the callback paradigm. With GTK-2.4 there will be a
!      * gtk_file_filter_add_custom function that we can use. */
    }
  
    public Graphics getGraphics ()
--- 141,165 ----
        }
        
      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. */
!   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 ()
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java	Wed Dec 31 08:58:30 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkFontPeer.java -- Implements FontPeer with GTK+
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkFontPeer.java -- Implements FontPeer with GTK+
!    Copyright (C) 1999, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,55 ****
  
  
  package gnu.java.awt.peer.gtk;
! import java.awt.peer.FontPeer;
! import java.awt.*;
! import java.awt.geom.*;
! import java.awt.font.*;
  import java.util.Locale;
  import java.util.ResourceBundle;
- import java.text.*;
- import gnu.java.awt.peer.ClasspathFontPeer;
  
  public class GtkFontPeer extends ClasspathFontPeer
  {
    private static ResourceBundle bundle;
!   
    static
    {
      try
--- 37,60 ----
  
  
  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
*************** public class GtkFontPeer extends Classpa
*** 62,76 ****
        }
    }
  
!   final private String Xname; // uses %d for font size.
  
    public GtkFontPeer (String name, int style)
    {
!     super(name, style, 12 /* kludge */);
  
      if (bundle != null)
!       Xname = bundle.getString (name.toLowerCase () + "." + style);
!     else
        {
  	String weight;
  	String slant;
--- 67,98 ----
        }
    }
  
!   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;
*************** public class GtkFontPeer extends Classpa
*** 90,97 ****
  	else
  	  spacing = "c";
  
!         Xname = "-*-*-" + weight + "-" + slant + "-normal-*-%d-*-*-*-" + spacing + "-*-*-*";
        }
    }
  
    public String getXLFD ()
--- 112,121 ----
  	else
  	  spacing = "c";
  
!         Xname = "-*-*-" + weight + "-" + slant + "-normal-*-*-" + size + "-*-*-" + spacing + "-*-*-*";
        }
+ 
+     this.Xname = Xname;
    }
  
    public String getXLFD ()
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java	Tue Jan 13 20:54:46 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java	Wed Feb 16 20:01:34 2005
***************
*** 1,5 ****
  /* GtkFramePeer.java -- Implements FramePeer with GTK
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkFramePeer.java -- Implements FramePeer with GTK
!    Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,68 ****
  
  package gnu.java.awt.peer.gtk;
  
- import java.awt.Component;
  import java.awt.Frame;
  import java.awt.Graphics;
- import java.awt.Graphics2D;
  import java.awt.Image;
  import java.awt.MenuBar;
  import java.awt.Rectangle;
  import java.awt.event.PaintEvent;
  import java.awt.peer.FramePeer;
  import java.awt.peer.MenuBarPeer;
  
  public class GtkFramePeer extends GtkWindowPeer
      implements FramePeer
  {
!   int menuBarHeight = 0;
!   native int getMenuBarHeight ();
  
!   native public void setMenuBarPeer (MenuBarPeer bar);
  
    public void setMenuBar (MenuBar bar)
    {
!     if (bar == null)
!       setMenuBarPeer (null);
!     else
!       setMenuBarPeer ((MenuBarPeer) bar.getPeer ());
    }
  
    public GtkFramePeer (Frame frame)
--- 38,150 ----
  
  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.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 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)
!   {
!     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)
*************** public class GtkFramePeer extends GtkWin
*** 74,95 ****
    {
      // Create a normal decorated window.
      create (GDK_WINDOW_TYPE_HINT_NORMAL, true);
-   }
  
!   public void getArgs (Component component, GtkArgList args)
!   {
!     super.getArgs (component, args);
  
!     Frame frame = (Frame) component;
  
!     args.add ("title", frame.getTitle ());
!     args.add ("allow_shrink", frame.isResizable ());
!     args.add ("allow_grow", frame.isResizable ());
    }
  
    public void setIconImage (Image image) 
    {
!       /* TODO: Waiting on Toolkit Image routines */
    }
  
    public Graphics getGraphics ()
--- 156,201 ----
    {
      // Create a normal decorated window.
      create (GDK_WINDOW_TYPE_HINT_NORMAL, true);
  
!     Frame frame = (Frame) awtComponent;
  
!     setMenuBar (frame.getMenuBar ());
  
!     setTitle (frame.getTitle ());
!     gtkWindowSetResizable (frame.isResizable ());
!     setIconImage(frame.getIconImage());
    }
  
+   native void nativeSetIconImageFromDecoder (GdkPixbufDecoder decoder);
+   native void nativeSetIconImageFromData (int[] pixels, int width, int height);
    public void setIconImage (Image image) 
    {
!       if (image != null && image instanceof GtkImage)
!         {
!           GtkImage img = (GtkImage) image;
!           // FIXME: Image should be loaded, but if not, do image loading here.
!           if (img.isLoaded())
!             {
!               if (img.getSource() instanceof GdkPixbufDecoder)
!                 {
!                   nativeSetIconImageFromDecoder((GdkPixbufDecoder) img.getSource());
!                 }
!               else
!                 {
!                   int[] pixels = img.getPixelCache();
!                   ColorModel model = img.getColorModel();
!                   int[] data = new int[pixels.length * 4];
!                   for (int i = 0; i < pixels.length; i++)
!                     {
!                       data[i * 4] = model.getRed(pixels[i]);
!                       data[i * 4 + 1] = model.getGreen(pixels[i]);
!                       data[i * 4 + 2] = model.getBlue(pixels[i]);
!                       data[i * 4 + 3] = model.getAlpha(pixels[i]);
!                     }
!                   nativeSetIconImageFromData(data, img.getWidth(null), img.getHeight(null));
!                 }
!             }
!         }
    }
  
    public Graphics getGraphics ()
*************** public class GtkFramePeer extends GtkWin
*** 102,110 ****
      g.translate (-insets.left, -insets.top);
      return g;
    }
  
!   // FIXME: When MenuBars work, override postConfigureEvent and
!   // setBounds to account for MenuBar dimensions.
  
    protected void postMouseEvent(int id, long when, int mods, int x, int y, 
  				int clickCount, boolean popupTrigger)
--- 208,243 ----
      g.translate (-insets.left, -insets.top);
      return g;
    }
+   
+   protected void postConfigureEvent (int x, int y, int width, int height)
+   {
+     int frame_x = x - insets.left;
+     // 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;
+     int frame_width = width + insets.left + insets.right;
+     // Ditto as above. 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_x != awtComponent.getX()
+         || frame_y != awtComponent.getY()
+         || frame_width != awtComponent.getWidth()
+         || frame_height != awtComponent.getHeight())
+       {
+         if (frame_width != awtComponent.getWidth() && menuBar != null
+             && width > 0)
+           setMenuBarWidth (menuBar, width);
  
!         setBoundsCallback ((Window) awtComponent,
!                            frame_x,
!                            frame_y,
!                            frame_width,
!                            frame_height);
! 
!         awtComponent.validate();
!       }
!   }
  
    protected void postMouseEvent(int id, long when, int mods, int x, int y, 
  				int clickCount, boolean popupTrigger)
*************** public class GtkFramePeer extends GtkWin
*** 116,125 ****
  
    protected void postExposeEvent (int x, int y, int width, int height)
    {
!     q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
! 				 new Rectangle (x + insets.left, 
! 						y + insets.top, 
! 						width, height)));
    }
  
    public int getState ()
--- 249,259 ----
  
    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 ()
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java	Sun Jul 13 15:09:20 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java	Wed Feb 16 20:01:35 2005
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package gnu.java.awt.peer.gtk;
  
  import java.awt.EventQueue;
+ import java.awt.Toolkit;
  import java.awt.event.ActionEvent;
  
  public class GtkGenericPeer
*************** public class GtkGenericPeer
*** 57,62 ****
--- 58,68 ----
    // Dispose of our native state.
    public native void dispose ();
  
+   static EventQueue q ()
+   {
+     return Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+   }
+ 
    protected GtkGenericPeer (Object awtWidget)
    {
      this.awtWidget = awtWidget;
*************** public class GtkGenericPeer
*** 70,76 ****
  
    protected void postActionEvent (String command, int mods) 
    {
!     q.postEvent (new ActionEvent (awtWidget, ActionEvent.ACTION_PERFORMED, 
  				  command, mods));
    }
  
--- 76,82 ----
  
    protected void postActionEvent (String command, int mods) 
    {
!     q().postEvent (new ActionEvent (awtWidget, ActionEvent.ACTION_PERFORMED, 
  				  command, mods));
    }
  
*************** public class GtkGenericPeer
*** 82,85 ****
--- 88,93 ----
      // Let's assume this will never wrap.
      return next_native_state++;
    }
+ 
+   native void gtkWidgetModifyFont (String name, int style, int size);
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkImage.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkImage.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkImage.java	Mon Dec  1 15:28:22 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkImage.java	Tue Nov 30 23:58:35 2004
*************** public class GtkImage extends Image impl
*** 89,94 ****
--- 89,106 ----
      this.observer = observer;
    }
  
+   public synchronized int[]
+   getPixelCache ()
+   {
+     return pixelCache;
+   }
+ 
+   public synchronized ColorModel
+   getColorModel ()
+   {
+     return model;
+   }
+ 
    public synchronized int 
    getWidth (ImageObserver observer)
    {
*************** public class GtkImage extends Image impl
*** 202,208 ****
    public synchronized void 
    setColorModel (ColorModel model)
    {
!     if (this.model == null || this.model == model)
        this.model = model;
      else
        isCacheable = false;
--- 214,220 ----
    public synchronized void 
    setColorModel (ColorModel model)
    {
!     if (this.model == null || this.model.equals(model))
        this.model = model;
      else
        isCacheable = false;
*************** public class GtkImage extends Image impl
*** 218,224 ****
  	     int offset, int scansize)
    {
      setPixels (x, y, width, height, cm, convertPixels (pixels), offset,
! 	       scansize);
  
      if (observer != null)
        observer.imageUpdate (this,
--- 230,236 ----
  	     int offset, int scansize)
    {
      setPixels (x, y, width, height, cm, convertPixels (pixels), offset,
!                scansize);
  
      if (observer != null)
        observer.imageUpdate (this,
*************** public class GtkImage extends Image impl
*** 235,249 ****
      if (!isCacheable)
        return;
  
!     if (cm != model || pixelCache == null)
        {
  	isCacheable = false;
  	return;
        }
  
!     if (scansize == width)
        {
! 	System.arraycopy (pixels, offset, 
  			  pixelCache, y * this.width + x,
  			  pixels.length - offset);
        }
--- 247,262 ----
      if (!isCacheable)
        return;
  
!     if (!cm.equals(model) || pixelCache == null)
        {
  	isCacheable = false;
  	return;
        }
  
!     if (scansize == width && height == 1)
        {
!         // Copy contents of pixels array into pixel cache.
! 	System.arraycopy (pixels, offset,
  			  pixelCache, y * this.width + x,
  			  pixels.length - offset);
        }
*************** public class GtkImage extends Image impl
*** 262,268 ****
      if (status == ImageConsumer.STATICIMAGEDONE && isCacheable)
        isLoaded = true;
  
!     if (status == ImageConsumer.SINGLEFRAMEDONE)
        isCacheable = false;
  
      if (observer != null)
--- 275,281 ----
      if (status == ImageConsumer.STATICIMAGEDONE && isCacheable)
        isLoaded = true;
  
!     if (status == ImageConsumer.SINGLEFRAME)
        isCacheable = false;
  
      if (observer != null)
*************** public class GtkImage extends Image impl
*** 277,283 ****
  				-1, -1, -1, -1);
        }
  
!     if (source != null)
        source.removeConsumer (this);
    }
  
--- 290,296 ----
  				-1, -1, -1, -1);
        }
  
!     if (source != null && status != ImageConsumer.SINGLEFRAME)
        source.removeConsumer (this);
    }
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkImagePainter.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkImagePainter.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkImagePainter.java	Sun Jul 13 15:09:20 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkImagePainter.java	Tue Nov 30 23:58:35 2004
*************** import java.awt.Color;
*** 42,47 ****
--- 42,48 ----
  import java.awt.Rectangle;
  import java.awt.image.ColorModel;
  import java.awt.image.ImageConsumer;
+ import java.awt.image.ImageObserver;
  import java.util.Hashtable;
  
  public class GtkImagePainter implements Runnable, ImageConsumer
*************** public class GtkImagePainter implements 
*** 57,66 ****
    boolean flipX, flipY;
    Rectangle clip;
    int s_width, s_height;
  
    public
    GtkImagePainter (GtkImage image, GdkGraphics gc, int x, int y, 
! 		   int width, int height, Color bgcolor)
    {
      this.image = image;
      this.gc = (GdkGraphics) gc.create ();
--- 58,68 ----
    boolean flipX, flipY;
    Rectangle clip;
    int s_width, s_height;
+   ImageObserver observer;
  
    public
    GtkImagePainter (GtkImage image, GdkGraphics gc, int x, int y, 
! 		   int width, int height, Color bgcolor, ImageObserver o)
    {
      this.image = image;
      this.gc = (GdkGraphics) gc.create ();
*************** public class GtkImagePainter implements 
*** 74,88 ****
      flipX = flipY = false;
      s_width = s_height = 0;
      clip = null;
  
!     new Thread (this).start ();
    }
  
    public
    GtkImagePainter (GtkImage image, GdkGraphics gc, 
  		   int dx1, int dy1, int dx2, int dy2,
  		   int sx1, int sy1, int sx2, int sy2,
! 		   Color bgcolor)
    {
      this.image = image;
      this.gc = (GdkGraphics) gc.create ();
--- 76,91 ----
      flipX = flipY = false;
      s_width = s_height = 0;
      clip = null;
+     observer = o;
  
!     run ();
    }
  
    public
    GtkImagePainter (GtkImage image, GdkGraphics gc, 
  		   int dx1, int dy1, int dx2, int dy2,
  		   int sx1, int sy1, int sx2, int sy2,
! 		   Color bgcolor, ImageObserver o)
    {
      this.image = image;
      this.gc = (GdkGraphics) gc.create ();
*************** public class GtkImagePainter implements 
*** 91,96 ****
--- 94,100 ----
      redBG = bgcolor.getRed ();
      greenBG = bgcolor.getGreen ();
      blueBG = bgcolor.getBlue ();
+     observer = o;
  
      this.width = Math.abs (dx2 - dx1);
      this.height = Math.abs (dy2 - dy1);
*************** public class GtkImagePainter implements 
*** 104,111 ****
      s_width = Math.abs (sx2 - sx1);
      s_height = Math.abs (sy2 - sy1);
      clip = new Rectangle (sx1, sy1, s_width, s_height);
!     
!     new Thread (this).start ();
    }
  
    public void
--- 108,115 ----
      s_width = Math.abs (sx2 - sx1);
      s_height = Math.abs (sy2 - sy1);
      clip = new Rectangle (sx1, sy1, s_width, s_height);
! 
!     run ();
    }
  
    public void
*************** public class GtkImagePainter implements 
*** 119,127 ****
    static int[] 
    convertPixels (int[] pixels, ColorModel model)
    {
      if (model.equals (ColorModel.getRGBdefault ()))
        return pixels;
!     
      int ret[] = new int[pixels.length];
  
      for (int i = 0; i < pixels.length; i++)
--- 123,136 ----
    static int[] 
    convertPixels (int[] pixels, ColorModel model)
    {
+     if (pixels == null || model == null)
+     {
+       return null;
+     }
+ 
      if (model.equals (ColorModel.getRGBdefault ()))
        return pixels;
! 
      int ret[] = new int[pixels.length];
  
      for (int i = 0; i < pixels.length; i++)
*************** public class GtkImagePainter implements 
*** 133,138 ****
--- 142,152 ----
    static int[]
    convertPixels (byte[] pixels, ColorModel model)
    {
+     if (pixels == null || model == null)
+     {
+       return null;
+     }
+ 
      int ret[] = new int[pixels.length];
  
      for (int i = 0; i < pixels.length; i++)
*************** public class GtkImagePainter implements 
*** 160,167 ****
  
  	offset += r.y * scansize + r.x;
  
- 	r.translate (-Math.abs (clip.x - startX), -Math.abs (clip.y - startY));
- 
  	width = r.width;
  	height = r.height;
  	x = r.x;
--- 174,179 ----
*************** public class GtkImagePainter implements 
*** 172,185 ****
  	        startX + x, startY + y,
  		width, height, convertPixels (pixels, model), offset,
  		scansize, affine);
    }
  
    public void 
    setPixels (int x, int y, int width, int height, ColorModel model, 
  	     byte[] pixels, int offset, int scansize)
    {
!     setPixels (x, y, width, height, model, convertPixels (pixels, model),
! 	       offset, scansize);
    }
  
    public void 
--- 184,202 ----
  	        startX + x, startY + y,
  		width, height, convertPixels (pixels, model), offset,
  		scansize, affine);
+ 
+     if (observer != null)
+       observer.imageUpdate (image,
+ 			    ImageObserver.SOMEBITS,
+ 			    x, y, width, height);
    }
  
    public void 
    setPixels (int x, int y, int width, int height, ColorModel model, 
  	     byte[] pixels, int offset, int scansize)
    {
!     setPixels (x, y, width, height, ColorModel.getRGBdefault(),
! 	       convertPixels (pixels, model), offset, scansize);
    }
  
    public void 
*************** public class GtkImagePainter implements 
*** 238,242 ****
--- 255,272 ----
    public void 
    imageComplete (int status)
    {
+     image.imageComplete(status);
+ 
+     if (observer != null)
+       {
+ 	if (status == ImageConsumer.IMAGEERROR)
+ 	  observer.imageUpdate (null,
+ 				ImageObserver.ERROR,
+ 				-1, -1, -1, -1);
+ 	else
+ 	  observer.imageUpdate (null,
+ 				ImageObserver.ALLBITS,
+ 				-1, -1, -1, -1);
+       }
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java	Tue Nov 11 17:04:46 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkLabelPeer.java -- Implements LabelPeer with GTK
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkLabelPeer.java -- Implements LabelPeer with GTK
!    Copyright (C) 1998, 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,66 ****
  
  package gnu.java.awt.peer.gtk;
  
- import java.awt.Component;
  import java.awt.Label;
  import java.awt.peer.LabelPeer;
  
  public class GtkLabelPeer extends GtkComponentPeer
      implements LabelPeer
  {
    void create ()
    {
      Label label = (Label) awtComponent;
      create (label.getText (), getGtkAlignment (label.getAlignment ()));
    }
  
-   native void create (String text, float alignment);
- 
    public GtkLabelPeer (Label l)
    {
      super (l);
    }
  
-   native public void setText (String text);
- 
-   native void nativeSetAlignment (float alignment);
    public void setAlignment (int alignment)
    {
      nativeSetAlignment (getGtkAlignment (alignment));
--- 38,67 ----
  
  package gnu.java.awt.peer.gtk;
  
  import java.awt.Label;
  import java.awt.peer.LabelPeer;
  
  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);
+ 
    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));
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkListPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkListPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkListPeer.java	Wed Dec 17 18:02:56 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkListPeer.java	Tue Nov 30 23:58:35 2004
*************** package gnu.java.awt.peer.gtk;
*** 41,60 ****
  import java.awt.AWTEvent;
  import java.awt.Dimension;
  import java.awt.List;
- import java.awt.event.MouseEvent;
  import java.awt.event.KeyEvent;
  import java.awt.peer.ListPeer;
  
  public class GtkListPeer extends GtkComponentPeer
    implements ListPeer
  {
! //    native void create (ComponentPeer parent, String [] items, boolean mode);
  
!   native void create ();
!   native void connectJObject ();
    native void connectSignals ();
  
!   native void getSize (int rows, int dims[]);
  
    public GtkListPeer (List list)
    {
--- 41,68 ----
  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)
    {
*************** public class GtkListPeer extends GtkComp
*** 85,102 ****
    
    public Dimension getMinimumSize (int rows)
    {
!     int dims[] = new int[2];
! 
!     getSize (rows, dims);
!     return (new Dimension (dims[0], dims[1]));
    }
  
    public Dimension getPreferredSize (int rows)
    {
!     int dims[] = new int[2];
! 
!     getSize (rows, dims);
!     return (new Dimension (dims[0], dims[1]));
    }
    
    public native int[] getSelectedIndexes ();
--- 93,104 ----
    
    public Dimension getMinimumSize (int rows)
    {
!     return minimumSize (rows);
    }
  
    public Dimension getPreferredSize (int rows)
    {
!     return preferredSize (rows);
    }
    
    public native int[] getSelectedIndexes ();
*************** public class GtkListPeer extends GtkComp
*** 104,115 ****
  
    public Dimension minimumSize (int rows)
    {
!     return (getMinimumSize (rows));
    }
  
    public Dimension preferredSize (int rows)
    {
!     return (getPreferredSize (rows));
    }
  
    public void removeAll ()
--- 106,125 ----
  
    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 ()
*************** public class GtkListPeer extends GtkComp
*** 129,148 ****
    {
      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.getModifiers () & MouseEvent.BUTTON1_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.getModifiers ());
  	  }
        }
  
--- 139,158 ----
    {
      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 ());
  	  }
        }
  
*************** public class GtkListPeer extends GtkComp
*** 151,161 ****
  	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.getModifiers ());
  	  }
        }
  
--- 161,172 ----
  	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 ());
  	  }
        }
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java	Fri Jan 31 17:54:13 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java	Thu Jan  1 00:00:00 1970
***************
*** 1,80 ****
- /* GtkMainThread.java -- Runs gtk_main()
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you 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;
- 
- public class GtkMainThread extends GtkGenericPeer implements Runnable
- {
-   private static Thread mainThread = null;
-   private static Object mainThreadLock = new Object();
- 
-   static native void gtkInit();
-   native void gtkMain();
-   
-   public GtkMainThread() 
-   {
-     super (null);
-     synchronized (mainThreadLock) 
-       {
- 	if (mainThread != null)
- 	  throw new IllegalStateException();
- 	mainThread = new Thread(this, "GtkMain");
-       }
-     
-     synchronized (this) 
-       {
- 	mainThread.start();
- 	try {
- 	  wait();
- 	} catch (InterruptedException e) { }
-       }
-   }
-   
-   public void run() 
-   {
-     synchronized (this) 
-       {
- 	gtkInit();
- 	notify();
-       }
-     gtkMain();
-   }
- }
- 
- 
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java	Sun Jul 13 15:09:20 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkMenuBarPeer.java -- Implements MenuBarPeer with GTK+
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkMenuBarPeer.java -- Implements MenuBarPeer with GTK+
!    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,45 ****
--- 38,47 ----
  
  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 GtkM
*** 53,71 ****
    public GtkMenuBarPeer (MenuBar target)
    {
      super (target);
-     create ();
    }
  
!   /* In Gnome, help menus are no longer right flushed. */
!   public void addHelpMenu (Menu menu)
    {
!     addMenu (menu);
    }
  
!   public void addMenu (Menu menu)
    {
!     addMenu ((MenuPeer) menu.getPeer ());
    }
  
!   native public void delMenu (int index);
  }
--- 55,80 ----
    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);
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java	Sun Jul 13 15:09:20 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java	Wed Feb 16 20:01:36 2005
*************** import java.awt.peer.MenuComponentPeer;
*** 43,54 ****
  public class GtkMenuComponentPeer extends GtkGenericPeer
    implements MenuComponentPeer
  {
!   public GtkMenuComponentPeer (Object awtWidget)
    {
!     super (awtWidget);
    }
  
!   public void dispose ()
    {
    }
  }
--- 43,63 ----
  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();
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java	Wed Oct  8 15:49:31 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkMenuItemPeer.java -- Implements MenuItemPeer with GTK+
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkMenuItemPeer.java -- Implements MenuItemPeer with GTK+
!    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,62 ****
  
  package gnu.java.awt.peer.gtk;
  
  import java.awt.Menu;
  import java.awt.MenuBar;
  import java.awt.MenuItem;
  import java.awt.peer.MenuItemPeer;
- import java.awt.peer.MenuComponentPeer;
- import java.awt.peer.MenuBarPeer;
  import java.awt.peer.MenuPeer;
  
  public class GtkMenuItemPeer extends GtkMenuComponentPeer
    implements MenuItemPeer
  {
    native void create (String label);
  
    public GtkMenuItemPeer (MenuItem item)
    {
      super (item);
-     create (item.getLabel ());
      setEnabled (item.isEnabled ());
      setParent (item);
    }
  
    void setParent (MenuItem item)
--- 38,86 ----
  
  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)
*************** public class GtkMenuItemPeer extends Gtk
*** 85,95 ****
      setEnabled (true);
    }
  
!   public void setEnabled (boolean b)
!   {
!     // do nothing, for now.
!   }
!   native public void setLabel (String label);
  
    protected void postMenuActionEvent ()
    {
--- 109,117 ----
      setEnabled (true);
    }
  
!   public native void setEnabled(boolean b);
! 
!   public native void setLabel(String label);
  
    protected void postMenuActionEvent ()
    {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java	Sun Jul 13 15:09:20 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkMenuPeer.java -- Implements MenuPeer with GTK+
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkMenuPeer.java -- Implements MenuPeer with GTK+
!    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Menu;
*** 43,50 ****
  import java.awt.MenuContainer;
  import java.awt.MenuItem;
  import java.awt.MenuShortcut;
- import java.awt.peer.MenuPeer;
  import java.awt.peer.MenuItemPeer;
  
  public class GtkMenuPeer extends GtkMenuItemPeer
    implements MenuPeer
--- 43,50 ----
  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
*************** public class GtkMenuPeer extends GtkMenu
*** 52,62 ****
--- 52,66 ----
    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 ());
*************** public class GtkMenuPeer extends GtkMenu
*** 95,104 ****
      addItem (item, key, shiftModifier);
    }
  
!   public void addSeparator ()
!   {
!     addItem (new MenuItem ("-"));
!   }
! 
!   native public void delItem (int index);
  }
--- 99,103 ----
      addItem (item, key, shiftModifier);
    }
  
!   public native void delItem(int index);
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkOffScreenImage.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkOffScreenImage.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkOffScreenImage.java	Sun Jul 13 15:09:20 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkOffScreenImage.java	Thu Sep  2 05:10:11 2004
*************** public class GtkOffScreenImage extends I
*** 76,82 ****
  
    public Graphics getGraphics ()
    {
!     return g;
    }
  
    public Object getProperty (String name, ImageObserver observer)
--- 76,85 ----
  
    public Graphics getGraphics ()
    {
!     if (g instanceof GdkGraphics2D)
!       return new GdkGraphics2D ((GdkGraphics2D) this.g);
!     else
!       return new GdkGraphics ((GdkGraphics) this.g);
    }
  
    public Object getProperty (String name, ImageObserver observer)
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkPanelPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkPanelPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkPanelPeer.java	Thu Dec 11 13:50:50 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkPanelPeer.java	Tue Nov 30 23:58:35 2004
*************** exception statement from your version. *
*** 38,55 ****
  
  package gnu.java.awt.peer.gtk;
  
  import java.awt.Panel;
  import java.awt.peer.PanelPeer;
  
  public class GtkPanelPeer extends GtkContainerPeer
    implements PanelPeer
  {
    native void create ();
-   native void connectJObject ();
-   native void connectSignals ();
  
    public GtkPanelPeer (Panel p)
    {
      super (p);
    }
  }
--- 38,68 ----
  
  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);
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java	Mon Jan  5 21:35:32 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkScrollPanePeer.java -- Implements ScrollPanePeer with GTK
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkScrollPanePeer.java -- Implements ScrollPanePeer with GTK
!    Copyright (C) 1998, 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,46 ****
  package gnu.java.awt.peer.gtk;
  
  import java.awt.Adjustable;
  import java.awt.ScrollPane;
- import java.awt.peer.ComponentPeer;
  import java.awt.peer.ScrollPanePeer;
  
  public class GtkScrollPanePeer extends GtkContainerPeer
--- 39,46 ----
  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
*************** public class GtkScrollPanePeer extends G
*** 53,59 ****
      create (awtComponent.getWidth (), awtComponent.getHeight ());
    }
  
!   native void gtkScrolledWindowSetScrollPosition(int x, int y);
    native void gtkScrolledWindowSetHScrollIncrement (int u);
    native void gtkScrolledWindowSetVScrollIncrement (int u);
  
--- 53,59 ----
      create (awtComponent.getWidth (), awtComponent.getHeight ());
    }
  
!   // native void gtkScrolledWindowSetScrollPosition(int x, int y);
    native void gtkScrolledWindowSetHScrollIncrement (int u);
    native void gtkScrolledWindowSetVScrollIncrement (int u);
  
*************** public class GtkScrollPanePeer extends G
*** 83,96 ****
        setPolicy (((ScrollPane) awtComponent).getScrollbarDisplayPolicy ());
    }
  
!   native public int getHScrollbarHeight ();
!   native public int getVScrollbarWidth ();
!   native public void setScrollPosition (int x, int y);
  
! //    public Dimension getPreferredSize ()
! //    {
! //      return new Dimension (60, 60);
! //    }
  
    public void setUnitIncrement (Adjustable adj, int u)
    {
--- 83,96 ----
        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)
    {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java	Thu Dec 11 13:50:50 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkScrollbarPeer.java -- Implements ScrollbarPeer with GTK+
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkScrollbarPeer.java -- Implements ScrollbarPeer with GTK+
!    Copyright (C) 1998, 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public class GtkScrollbarPeer extends Gt
*** 60,66 ****
  		      int min, int max, int stepIncr, int pageIncr,
  		      int visibleAmount);
  
-   native void connectJObject ();
    native void connectSignals ();
  
    public GtkScrollbarPeer (Scrollbar s)
--- 60,65 ----
*************** public class GtkScrollbarPeer extends Gt
*** 68,80 ****
      super (s);
    }
  
!   native public void setLineIncrement (int amount);
!   native public void setPageIncrement (int amount);
!   native public 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));
    }
--- 67,79 ----
      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-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java	Tue Jan 13 20:58:33 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java	Tue Nov 30 23:58:35 2004
*************** import java.awt.peer.TextAreaPeer;
*** 47,55 ****
  public class GtkTextAreaPeer extends GtkTextComponentPeer
    implements TextAreaPeer
  {
    native void create (int width, int height, int scrollbarVisibility);
  
!   native void gtkSetFont (String name, int style, int size);
  
    void create ()
    {
--- 47,59 ----
  public class GtkTextAreaPeer extends GtkTextComponentPeer
    implements 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 ();
  
    void create ()
    {
*************** public class GtkTextAreaPeer extends Gtk
*** 60,83 ****
      // GtkComponent.create.
      if (f == null)
        {
! 	f = new Font ("Fixed", Font.PLAIN, 12);
  	awtComponent.setFont (f);
        }
  
!     FontMetrics fm;
!     if (GtkToolkit.useGraphics2D ())
!       fm = new GdkClasspathFontPeerMetrics (f);
!     else
!       fm = new GdkFontMetrics (f);
  
      TextArea ta = ((TextArea) awtComponent);
!     int rows = ta.getRows ();
!     int cols = ta.getColumns ();
  
!     int width = cols * fm.getMaxAdvance ();
!     int height = rows * (fm.getMaxDescent () + fm.getMaxAscent ());
  
      create (width, height, ta.getScrollbarVisibility ());
    }
  
    public GtkTextAreaPeer (TextArea ta)
--- 64,87 ----
      // 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)
*************** public class GtkTextAreaPeer extends Gtk
*** 90,101 ****
  
    public Dimension getMinimumSize (int rows, int cols)
    {
!     return minimumSize (rows, cols);
    }
  
    public Dimension getPreferredSize (int rows, int cols)
    {
!     return preferredSize (rows, cols);
    }
  
    native int getHScrollbarHeight ();
--- 94,107 ----
  
    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 ();
*************** public class GtkTextAreaPeer extends Gtk
*** 105,112 ****
    public Dimension minimumSize (int rows, int cols)
    {
      TextArea ta = ((TextArea) awtComponent);
-     int hScrollbarHeight = 0;
-     int vScrollbarWidth = 0;
      int height = 0;
      int width = 0;
  
--- 111,116 ----
*************** public class GtkTextAreaPeer extends Gtk
*** 122,135 ****
      if (f == null)
        return new Dimension (width, height);
  
!     FontMetrics fm;
!     if (GtkToolkit.useGraphics2D ())
!       fm = new GdkClasspathFontPeerMetrics (f);
!     else
!       fm = new GdkFontMetrics (f);
  
!     width += cols * fm.getMaxAdvance ();
!     height += rows * (fm.getMaxDescent () + fm.getMaxAscent ());
  
      return new Dimension (width, height);
    }
--- 126,138 ----
      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 class GtkTextAreaPeer extends Gtk
*** 137,144 ****
    public Dimension preferredSize (int rows, int cols)
    {
      TextArea ta = ((TextArea) awtComponent);
-     int hScrollbarHeight = 0;
-     int vScrollbarWidth = 0;
      int height = 0;
      int width = 0;
  
--- 140,145 ----
*************** public class GtkTextAreaPeer extends Gtk
*** 154,167 ****
      if (f == null)
        return new Dimension (width, height);
  
!     FontMetrics fm;
!     if (GtkToolkit.useGraphics2D ())
!       fm = new GdkClasspathFontPeerMetrics (f);
!     else
!       fm = new GdkFontMetrics (f);
  
!     width += cols * fm.getMaxAdvance ();
!     height += rows * (fm.getMaxDescent () + fm.getMaxAscent ());
  
      return new Dimension (width, height);
    }
--- 155,167 ----
      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 class GtkTextAreaPeer extends Gtk
*** 175,183 ****
    {
      insert (str, pos);
    }
- 
-   public void setFont (Font f)
-   {
-     gtkSetFont (f.getName (), f.getStyle (), f.getSize ());
-   }
  }
--- 175,178 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java	Thu Dec 11 13:50:50 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java	Wed Feb 16 20:01:36 2005
*************** exception statement from your version. *
*** 38,48 ****
  
  package gnu.java.awt.peer.gtk;
  
- import java.awt.AWTEvent;
- import java.awt.Component;
  import java.awt.Rectangle;
  import java.awt.TextComponent;
- import java.awt.event.KeyEvent;
  import java.awt.event.TextEvent;
  import java.awt.peer.TextComponentPeer;
  
--- 38,45 ----
*************** public class GtkTextComponentPeer extend
*** 54,59 ****
--- 51,57 ----
      super (tc);
  
      setText (tc.getText ());
+     setCaretPosition(0);
    }
  
    public native void connectSignals ();
*************** public class GtkTextComponentPeer extend
*** 84,89 ****
  
    protected void postTextEvent ()
    {
!     q.postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
    }
  }
--- 82,87 ----
  
    protected void postTextEvent ()
    {
!     q().postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java	Wed Oct  8 23:38:44 2003
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java	Tue Nov 30 23:58:35 2004
*************** package gnu.java.awt.peer.gtk;
*** 41,46 ****
--- 41,47 ----
  import java.awt.AWTEvent;
  import java.awt.Dimension;
  import java.awt.Font;
+ import java.awt.FontMetrics;
  import java.awt.TextField;
  import java.awt.event.KeyEvent;
  import java.awt.peer.TextFieldPeer;
*************** import java.awt.peer.TextFieldPeer;
*** 48,61 ****
  public class GtkTextFieldPeer extends GtkTextComponentPeer
    implements TextFieldPeer
  {
  
! //    native void create (ComponentPeer parent, String text);
  
!   native void create ();
  
!   native void gtkEntryGetSize (int dims[]);
  
!   native void gtkSetFont(String name, int style, int size);
  
    public GtkTextFieldPeer (TextField tf)
    {
--- 49,86 ----
  public class GtkTextFieldPeer extends GtkTextComponentPeer
    implements TextFieldPeer
  {
+   native void create (int width);
+   native void gtkWidgetSetBackground (int red, int green, int blue);
+   native void gtkWidgetSetForeground (int red, int green, int blue);
  
!   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)
    {
*************** public class GtkTextFieldPeer extends Gt
*** 67,100 ****
  
    public Dimension getMinimumSize (int cols)
    {
!     int dims[] = new int[2];
! 
!     gtkEntryGetSize (dims);
! 
!     return (new Dimension (dims[0], dims[1]));
    }
  
    public Dimension getPreferredSize (int cols)
    {
!     int dims[] = new int[2];
! 
!     gtkEntryGetSize (dims);
! 
!     return (new Dimension (dims[0], dims[1]));
    }
-   
-   public native void setEchoChar (char c);
  
!   /* Deprecated */
  
    public Dimension minimumSize (int cols)
    {
!     return getMinimumSize (cols);
    }
  
    public Dimension preferredSize (int cols)
    {
!     return getPreferredSize (cols);
    }
  
    public void setEchoCharacter (char c)
--- 92,144 ----
  
    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)
*************** public class GtkTextFieldPeer extends Gt
*** 102,121 ****
      setEchoChar (c);
    }
  
-   public void setFont (Font f)
-   {
-     gtkSetFont(f.getName(), f.getStyle(), f.getSize());
-   }
- 
    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.getModifiers ());
        }
  
      super.handleEvent (e);
--- 146,160 ----
      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);
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java	Sat Jan 10 21:32:23 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java	Thu Feb 17 07:48:22 2005
***************
*** 1,5 ****
  /* GtkToolkit.java -- Implements an AWT Toolkit using GTK for peers
!    Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,68 ****
  
  package gnu.java.awt.peer.gtk;
  
  import java.awt.*;
  import java.awt.datatransfer.Clipboard;
  import java.awt.dnd.DragGestureEvent;
  import java.awt.dnd.peer.DragSourceContextPeer;
! import java.awt.font.TextAttribute;
  import java.awt.im.InputMethodHighlight;
  import java.awt.image.ColorModel;
  import java.awt.image.ImageObserver;
  import java.awt.image.ImageProducer;
  import java.awt.peer.*;
  import java.net.URL;
  import java.util.Hashtable;
  import java.util.Map;
- import java.util.MissingResourceException;
  import java.util.Properties;
! import gnu.java.awt.EmbeddedWindow;
! import gnu.java.awt.EmbeddedWindowSupport;
! import gnu.java.awt.peer.EmbeddedWindowPeer;
! import gnu.java.awt.peer.ClasspathFontPeer;
! import gnu.classpath.Configuration;
! import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
  
  /* 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. */
--- 38,78 ----
  
  package gnu.java.awt.peer.gtk;
  
+ import gnu.classpath.Configuration;
+ import gnu.java.awt.EmbeddedWindow;
+ import gnu.java.awt.EmbeddedWindowSupport;
+ 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.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. */
*************** import gnu.java.awt.peer.gtk.GdkPixbufDe
*** 74,88 ****
   * drawing contexts. Any other value will cause the older GdkGraphics
   * object to be used.
   */
- 
  public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
    implements EmbeddedWindowSupport
  {
-   GtkMainThread main;
    Hashtable containers = new Hashtable();
!   static EventQueue q = new EventQueue();
    static Clipboard systemClipboard;
- 
    static boolean useGraphics2dSet;
    static boolean useGraphics2d;
  
--- 84,95 ----
   * drawing contexts. Any other value will cause the older GdkGraphics
   * object to be used.
   */
  public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
    implements EmbeddedWindowSupport
  {
    Hashtable containers = new Hashtable();
!   static EventQueue q;
    static Clipboard systemClipboard;
    static boolean useGraphics2dSet;
    static boolean useGraphics2d;
  
*************** public class GtkToolkit extends gnu.java
*** 96,145 ****
      return useGraphics2d;
    }
  
    static
    {
      if (Configuration.INIT_LOAD_LIBRARY)
        System.loadLibrary("gtkpeer");
    }
  
    public GtkToolkit ()
    {
-     main = new GtkMainThread ();
      systemClipboard = new GtkClipboard ();
-     GtkGenericPeer.enableQueue (q);
    }
!   
!   native public void beep ();
!   native private void getScreenSizeDimensions (int[] xy);
    
    public int checkImage (Image image, int width, int height, 
  			 ImageObserver observer) 
    {
!     return ((GtkImage) image).checkImage ();
    }
  
    public Image createImage (String filename)
    {
!     return new GtkImage (new GdkPixbufDecoder (filename), null);
    }
  
    public Image createImage (URL url)
    {
!     return new GtkImage (new GdkPixbufDecoder (url), null);
    }
  
    public Image createImage (ImageProducer producer) 
    {
!     return new GtkImage (producer, null);
    }
  
    public Image createImage (byte[] imagedata, int imageoffset,
  			    int imagelength)
    {
!     return new GtkImage (new GdkPixbufDecoder (imagedata,
! 					       imageoffset,
! 					       imagelength),
! 			 null);
    }
  
    public ColorModel getColorModel () 
--- 103,315 ----
      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);
    }
  
    public GtkToolkit ()
    {
      systemClipboard = new GtkClipboard ();
    }
! 
!   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)
!       {        
!         status = ((GtkImage) image).checkImage ();
!       }
! 
!     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 (useGraphics2D())
!       return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (filename));
!     else
!       {
!         GdkPixbufDecoder d = new GdkPixbufDecoder (filename);
!         GtkImage image = new GtkImage (d, null);
!         d.startProduction (image);
!         return image;        
!       }
    }
  
    public Image createImage (URL url)
    {
!     if (useGraphics2D())
!       return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (url));
!     else
!       {
!         GdkPixbufDecoder d = new GdkPixbufDecoder (url);
!         GtkImage image = new GtkImage (d, null);
!         d.startProduction (image);
!         return image;        
!       }
    }
  
    public Image createImage (ImageProducer producer) 
    {
!     if (useGraphics2D())
!       return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (producer));
!     else
!       {
!         GtkImage image = new GtkImage (producer, null);
!         producer.startProduction (image);
!         return image;        
!       }
    }
  
    public Image createImage (byte[] imagedata, int imageoffset,
  			    int imagelength)
    {
!     if (useGraphics2D())
!       return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (imagedata,
!                                                    imageoffset, 
!                                                                         imagelength));
!     else
!       {
!         GdkPixbufDecoder d = new GdkPixbufDecoder (imagedata,
!                                                    imageoffset, 
!                                                    imagelength);
!         GtkImage image = new GtkImage (d, null);
!         d.startProduction (image);
!         return image;        
!       }
!   }
!   
!   /**
!    * 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);  
    }
  
    public ColorModel getColorModel () 
*************** public class GtkToolkit extends gnu.java
*** 156,177 ****
  			   "SansSerif" });
    }
  
    public FontMetrics getFontMetrics (Font font) 
    {
!     if (useGraphics2D())
!       return new GdkClasspathFontPeerMetrics (font);
!     else
!       return new GdkFontMetrics (font);
    }
  
    public Image getImage (String filename) 
    {
!     return new GtkImage (new GdkPixbufDecoder (filename), null);
    }
  
    public Image getImage (URL url) 
    {
!     return new GtkImage (new GdkPixbufDecoder (url), null);
    }
  
    public PrintJob getPrintJob (Frame frame, String jobtitle, Properties props) 
--- 326,387 ----
  			   "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) 
*************** public class GtkToolkit extends gnu.java
*** 179,187 ****
      return null;
    }
  
!   native public int getScreenResolution();
  
!   public Dimension getScreenSize () {
      int dim[] = new int[2];
      getScreenSizeDimensions(dim);
      return new Dimension(dim[0], dim[1]);
--- 389,398 ----
      return null;
    }
  
!   public native int getScreenResolution();
  
!   public Dimension getScreenSize ()
!   {
      int dim[] = new int[2];
      getScreenSizeDimensions(dim);
      return new Dimension(dim[0], dim[1]);
*************** public class GtkToolkit extends gnu.java
*** 220,226 ****
      return false;
    }
  
!   native public void sync ();
  
    protected void setComponentState (Component c, GtkComponentPeer cp)
    {
--- 431,437 ----
      return false;
    }
  
!   public native void sync();
  
    protected void setComponentState (Component c, GtkComponentPeer cp)
    {
*************** public class GtkToolkit extends gnu.java
*** 352,365 ****
     * @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) 
    {
!     try {
!       GtkFontPeer fp = new GtkFontPeer (name, style);
!       return fp;
!     } catch (MissingResourceException ex) {
!       return null;
!     }
    }
  
    /**
--- 563,582 ----
     * @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);
    }
  
    /**
*************** public class GtkToolkit extends gnu.java
*** 370,408 ****
  
    public ClasspathFontPeer getClasspathFontPeer (String name, Map attrs)
    {
!     if (useGraphics2D())
!       return new GdkClasspathFontPeer (name, attrs);
      else
        {
!         int style = Font.PLAIN;
! 
!         if (attrs.containsKey (TextAttribute.WEIGHT))
!           {
!             Float weight = (Float) attrs.get (TextAttribute.WEIGHT);
!             if (weight.floatValue () >= TextAttribute.WEIGHT_BOLD.floatValue ())
!               style += Font.BOLD;
!           }
!         
!         if (attrs.containsKey (TextAttribute.POSTURE))
!           {
!             Float posture = (Float) attrs.get (TextAttribute.POSTURE);
!             if (posture.floatValue () >= TextAttribute.POSTURE_OBLIQUE.floatValue ())
!               style += Font.ITALIC;
!           }
!         
!         return (ClasspathFontPeer) this.getFontPeer (name, style);
        }
    }
  
!   protected EventQueue getSystemEventQueueImpl() 
    {
!     return q;
    }
  
!   protected void loadSystemColors (int[] systemColors) 
    {
    }
  
    public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent e)
    {
      throw new Error("not implemented");
--- 587,629 ----
  
    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 class GtkToolkit extends gnu.java
*** 413,429 ****
      throw new Error("not implemented");
    }
  
    // ClasspathToolkit methods
  
    public GraphicsEnvironment getLocalGraphicsEnvironment()
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
!   public Font createFont(int format, java.io.InputStream stream)
    {
!     throw new java.lang.UnsupportedOperationException ();
    }
  
  
  } // class GtkToolkit
--- 634,670 ----
      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(this);
    }
  
!   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 native boolean nativeQueueEmpty();
+   public native void wakeNativeQueue();  
+   public native void iterateNativeQueue(EventQueue locked, boolean block);
  
  } // class GtkToolkit
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java	Tue Jan 13 20:54:46 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java	Tue Feb 22 06:13:02 2005
***************
*** 1,5 ****
  /* GtkWindowPeer.java -- Implements WindowPeer with GTK
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GtkWindowPeer.java -- Implements WindowPeer with GTK
!    Copyright (C) 1998, 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,89 ****
  package gnu.java.awt.peer.gtk;
  
  import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Window;
  import java.awt.Frame;
  import java.awt.event.WindowEvent;
  import java.awt.peer.WindowPeer;
  
  public class GtkWindowPeer extends GtkContainerPeer
    implements WindowPeer
  {
!   static protected final int GDK_WINDOW_TYPE_HINT_NORMAL = 0;
!   static protected final int GDK_WINDOW_TYPE_HINT_DIALOG = 1;
!   static protected final int GDK_WINDOW_TYPE_HINT_MENU = 2;
!   static protected final int GDK_WINDOW_TYPE_HINT_TOOLBAR = 3;
!   static protected final int GDK_WINDOW_TYPE_HINT_SPLASHSCREEN = 4;
!   static protected final int GDK_WINDOW_TYPE_HINT_UTILITY = 5;
!   static protected final int GDK_WINDOW_TYPE_HINT_DOCK = 6;
!   static protected final int GDK_WINDOW_TYPE_HINT_DESKTOP = 7;
  
    private boolean hasBeenShown = false;
    private int oldState = Frame.NORMAL;
  
!   native void create (int type, boolean decorated,
! 		      int width, int height,
! 		      GtkWindowPeer parent,
! 		      int[] insets);
  
    void create (int type, boolean decorated)
    {
      GtkWindowPeer parent_peer = null;
      Component parent = awtComponent.getParent();
-     int[] insets = new int [] { 0, 0, 0, 0 };
  
      if (parent != null)
        parent_peer = (GtkWindowPeer) awtComponent.getParent().getPeer();
  
!     create (type, decorated,
! 	    awtComponent.getWidth(),
! 	    awtComponent.getHeight(),
! 	    parent_peer,
! 	    insets);
! 
!     this.insets.top = insets [0];
!     this.insets.left = insets [1];
!     this.insets.bottom = insets [2];
!     this.insets.right = insets [3];
    }
  
    void create ()
--- 39,89 ----
  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);
! 
!   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)
    {
      GtkWindowPeer parent_peer = null;
      Component parent = awtComponent.getParent();
  
      if (parent != null)
        parent_peer = (GtkWindowPeer) awtComponent.getParent().getPeer();
  
!     create (type, decorated, parent_peer);
    }
  
    void create ()
*************** public class GtkWindowPeer extends GtkCo
*** 92,113 ****
      create (GDK_WINDOW_TYPE_HINT_NORMAL, false);
    }
  
!   native void connectJObject ();
!   native void connectSignals ();
  
!   public GtkWindowPeer (Window window)
    {
-     super (window);
    }
  
!   public void getArgs (Component component, GtkArgList args)
    {
!     args.add ("visible", component.isVisible ());
!     args.add ("sensitive", component.isEnabled ());
    }
  
!   native public void toBack ();
!   native public void toFront ();
  
    native void nativeSetBounds (int x, int y, int width, int height);
  
--- 92,116 ----
      create (GDK_WINDOW_TYPE_HINT_NORMAL, false);
    }
  
!   void setParent ()
!   {
!     setVisible (awtComponent.isVisible ());
!     setEnabled (awtComponent.isEnabled ());
!   }
  
!   void setVisibleAndEnabled ()
    {
    }
  
!   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);
  
*************** public class GtkWindowPeer extends GtkCo
*** 120,126 ****
  
    public void setTitle (String title)
    {
!     set ("title", title);
    }
  
    native void setSize (int width, int height);
--- 123,129 ----
  
    public void setTitle (String title)
    {
!     gtkWindowSetTitle (title);
    }
  
    native void setSize (int width, int height);
*************** public class GtkWindowPeer extends GtkCo
*** 132,139 ****
      // was resizable.
      setSize (awtComponent.getWidth() - insets.left - insets.right,
  	     awtComponent.getHeight() - insets.top - insets.bottom);
!     set ("allow_shrink", resizable);
!     set ("allow_grow", resizable);
    }
  
    native void setBoundsCallback (Window window,
--- 135,141 ----
      // was resizable.
      setSize (awtComponent.getWidth() - insets.left - insets.right,
  	     awtComponent.getHeight() - insets.top - insets.bottom);
!     gtkWindowSetResizable (resizable);
    }
  
    native void setBoundsCallback (Window window,
*************** public class GtkWindowPeer extends GtkCo
*** 160,169 ****
  	|| frame_y != awtComponent.getY()
  	|| frame_width != awtComponent.getWidth()
  	|| frame_height != awtComponent.getHeight())
!       setBoundsCallback ((Window) awtComponent,
! 			 frame_x, frame_y, frame_width, frame_height);
  
!     awtComponent.validate();
    }
  
    native void nativeSetVisible (boolean b);
--- 162,173 ----
  	|| frame_y != awtComponent.getY()
  	|| frame_width != awtComponent.getWidth()
  	|| frame_height != awtComponent.getHeight())
!       {
!         setBoundsCallback ((Window) awtComponent,
!                            frame_x, frame_y, frame_width, frame_height);
  
!         awtComponent.validate();
!       }
    }
  
    native void nativeSetVisible (boolean b);
*************** public class GtkWindowPeer extends GtkCo
*** 186,192 ****
  	// Post a WINDOW_OPENED event the first time this window is shown.
  	if (!hasBeenShown)
  	  {
! 	    q.postEvent (new WindowEvent ((Window) awtComponent, id,
  					  opposite));
  	    hasBeenShown = true;
  	  }
--- 190,196 ----
  	// Post a WINDOW_OPENED event the first time this window is shown.
  	if (!hasBeenShown)
  	  {
! 	    q().postEvent (new WindowEvent ((Window) awtComponent, id,
  					  opposite));
  	    hasBeenShown = true;
  	  }
*************** public class GtkWindowPeer extends GtkCo
*** 195,206 ****
        {
  	if (oldState != newState)
  	  {
! 	    q.postEvent (new WindowEvent ((Window) awtComponent, id, opposite,
  					  oldState, newState));
  	    oldState = newState;
  	  }
        }
      else
!       q.postEvent (new WindowEvent ((Window) awtComponent, id, opposite));
    }
  }
--- 199,210 ----
        {
  	if (oldState != newState)
  	  {
! 	    q().postEvent (new WindowEvent ((Window) awtComponent, id, opposite,
  					  oldState, newState));
  	    oldState = newState;
  	  }
        }
      else
!       q().postEvent (new WindowEvent ((Window) awtComponent, id, opposite));
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/TestAWT.java gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/TestAWT.java
*** gcc-3.4.3/libjava/gnu/java/awt/peer/gtk/TestAWT.java	Tue Jan 13 20:00:00 2004
--- gcc-4.0.0/libjava/gnu/java/awt/peer/gtk/TestAWT.java	Mon Jan 19 17:32:29 2004
*************** class DialogWindow extends Dialog implem
*** 272,277 ****
--- 272,278 ----
          public void windowClosing (WindowEvent e)
          {
            System.out.println ("Window Closing");
+ 	  text.setVisible (false);
            hide ();
          }
        });
*************** class DialogWindow extends Dialog implem
*** 305,311 ****
      cb.addActionListener(new ActionListener () {
        public void actionPerformed (ActionEvent e) 
  	{
! 	  dispose();
  	}
      });
      
--- 306,313 ----
      cb.addActionListener(new ActionListener () {
        public void actionPerformed (ActionEvent e) 
  	{
! 	  text.setVisible (false);
! 	  hide();
  	}
      });
      
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/BeanInfoEmbryo.java gcc-4.0.0/libjava/gnu/java/beans/BeanInfoEmbryo.java
*** gcc-3.4.3/libjava/gnu/java/beans/BeanInfoEmbryo.java	Sun Mar 24 21:32:13 2002
--- gcc-4.0.0/libjava/gnu/java/beans/BeanInfoEmbryo.java	Thu Nov 18 12:53:12 2004
*************** exception statement from your version. *
*** 38,47 ****
  
  package gnu.java.beans;
  
! import java.beans.*;
! import java.util.*;
! import gnu.java.lang.*;
! import java.lang.reflect.*;
  
  /**
   ** A BeanInfoEmbryo accumulates information about a Bean
--- 38,57 ----
  
  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
*************** import java.lang.reflect.*;
*** 59,65 ****
   **/
  
  public class BeanInfoEmbryo {
! 	Hashtable properties = new Hashtable();
  	Hashtable events = new Hashtable();
  	Vector methods = new Vector();
  
--- 69,78 ----
   **/
  
  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();
  
*************** public class BeanInfoEmbryo {
*** 78,86 ****
  
  		PropertyDescriptor[] Aproperties = new PropertyDescriptor[properties.size()];
  		int i = 0;
! 		Enumeration enum = properties.elements();
! 		while(enum.hasMoreElements()) {
! 			Aproperties[i] = (PropertyDescriptor)enum.nextElement();
  			if(defaultPropertyName != null && Aproperties[i].getName().equals(defaultPropertyName)) {
  				defaultProperty = i;
  			}
--- 91,99 ----
  
  		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;
  			}
*************** public class BeanInfoEmbryo {
*** 89,97 ****
  
  		EventSetDescriptor[] Aevents = new EventSetDescriptor[events.size()];
  		i = 0;
! 		enum = events.elements();
! 		while(enum.hasMoreElements()) {
! 			Aevents[i] = (EventSetDescriptor)enum.nextElement();
  			if(defaultEventName != null && Aevents[i].getName().equals(defaultEventName)) {
  				defaultEvent = i;
  			}
--- 102,110 ----
  
  		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;
  			}
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/DummyAppletContext.java gcc-4.0.0/libjava/gnu/java/beans/DummyAppletContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/DummyAppletContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/DummyAppletContext.java	Sat Feb 19 18:47:26 2005
***************
*** 0 ****
--- 1,200 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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);
+   private static final AudioClip DUMMY_CLIP = new DummyAudioClip();
+ 
+   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)
+   {
+     try
+       {
+ 	return (url.openConnection() != null ? DUMMY_CLIP : null);
+       }
+     catch (IOException ioe)
+       {
+ 	return null;
+       }
+   }
+ 
+   /** 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();
+   }
+ 
+   /** Dummy <code>AudioClip</code> implementation that does nothing but
+    * preventing <code>NullPointerException</code>S being thrown in programs
+    * that expect a valid <code>AudioClip</code> instance to be returned by
+    * their Applet.
+    *
+    * @author Robert Schuster
+    */
+   static class DummyAudioClip implements AudioClip
+   {
+     public void play()
+     {
+     }
+ 
+     public void stop()
+     {
+     }
+ 
+     public void loop()
+     {
+     }
+ 
+     public String toString()
+     {
+       return "DummyAudioClip never plays anything - implement javax.sound and make us happy :)";
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/DummyAppletStub.java gcc-4.0.0/libjava/gnu/java/beans/DummyAppletStub.java
*** gcc-3.4.3/libjava/gnu/java/beans/DummyAppletStub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/DummyAppletStub.java	Sat Feb 19 18:47:26 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/EmptyBeanInfo.java gcc-4.0.0/libjava/gnu/java/beans/EmptyBeanInfo.java
*** gcc-3.4.3/libjava/gnu/java/beans/EmptyBeanInfo.java	Tue Jan 22 22:39:49 2002
--- gcc-4.0.0/libjava/gnu/java/beans/EmptyBeanInfo.java	Thu Jan  1 00:00:00 1970
***************
*** 1,70 ****
- /* gnu.java.beans.EmptyBeanInfo
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you 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.*;
- 
- /**
-  ** EmptyBeanInfo is a BeanInfo that discloses no
-  ** information about the Bean and does not allow
-  ** Introspection.  The Introspector uses instances of this
-  ** class to create empty BeanInfos, but it could also be
-  ** used as a base class for BeanInfos that do not allow
-  ** Introspection and provide only a little bit of
-  ** information.<P>
-  **
-  ** @author John Keiser
-  ** @version 1.1.0, 30 Jul 1998
-  ** @see gnu.java.beans.ExplicitBeanInfo
-  ** @see java.beans.BeanInfo
-  **/
- 
- public class EmptyBeanInfo extends ExplicitBeanInfo {
- 	/** Create a new EmptyBeanInfo. **/
- 	public EmptyBeanInfo(Class beanClass) {
- 		super(new BeanDescriptor(beanClass,null),
- 		      new BeanInfo[0],
- 		      new PropertyDescriptor[0],
- 		      -1,
- 		      new EventSetDescriptor[0],
- 		      -1,
- 		      new MethodDescriptor[0],
- 		      null);
- 	}
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/ExplicitBeanInfo.java gcc-4.0.0/libjava/gnu/java/beans/ExplicitBeanInfo.java
*** gcc-3.4.3/libjava/gnu/java/beans/ExplicitBeanInfo.java	Tue Jan 22 22:39:49 2002
--- gcc-4.0.0/libjava/gnu/java/beans/ExplicitBeanInfo.java	Sat Oct 16 17:48:57 2004
***************
*** 1,5 ****
! /* gnu.java.beans.ExplicitBeanInfo
!    Copyright (C) 1998 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ExplicitBeanInfo.java --
!    Copyright (C) 1998, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.beans;
  
! import java.beans.*;
  
  /**
   ** ExplicitBeanInfo lets you specify in the constructor
--- 38,49 ----
  
  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
*************** public class ExplicitBeanInfo implements
*** 80,86 ****
  	protected BeanInfo[] additionalBeanInfo;
  
  	/** The set of icons. **/
! 	protected java.awt.Image[] icons;
  
  	public ExplicitBeanInfo(BeanDescriptor beanDescriptor,
  	                        BeanInfo[] additionalBeanInfo,
--- 85,91 ----
  	protected BeanInfo[] additionalBeanInfo;
  
  	/** The set of icons. **/
! 	protected Image[] icons;
  
  	public ExplicitBeanInfo(BeanDescriptor beanDescriptor,
  	                        BeanInfo[] additionalBeanInfo,
*************** public class ExplicitBeanInfo implements
*** 89,95 ****
  	                        EventSetDescriptor[] eventSetDescriptors,
  				int defaultEventIndex,
  	                        MethodDescriptor[] methodDescriptors,
! 				java.awt.Image[] icons) {
  		this.beanDescriptor = beanDescriptor;
  		this.additionalBeanInfo = additionalBeanInfo;
  		this.propertyDescriptors = propertyDescriptors;
--- 94,100 ----
  	                        EventSetDescriptor[] eventSetDescriptors,
  				int defaultEventIndex,
  	                        MethodDescriptor[] methodDescriptors,
! 				Image[] icons) {
  		this.beanDescriptor = beanDescriptor;
  		this.additionalBeanInfo = additionalBeanInfo;
  		this.propertyDescriptors = propertyDescriptors;
*************** public class ExplicitBeanInfo implements
*** 138,144 ****
  	/** Get Bean icons.
  	 ** @param iconType the type of icon
  	 **/
! 	public java.awt.Image getIcon(int iconType) {
! 		return icons != null ? icons[iconType] : null;
  	}
  }
--- 143,149 ----
  	/** Get Bean icons.
  	 ** @param iconType the type of icon
  	 **/
! 	public Image getIcon(int iconType) {
! 		return icons != null ? icons[iconType - 1] : null;
  	}
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/IntrospectionIncubator.java gcc-4.0.0/libjava/gnu/java/beans/IntrospectionIncubator.java
*** gcc-3.4.3/libjava/gnu/java/beans/IntrospectionIncubator.java	Wed Oct 29 15:22:01 2003
--- gcc-4.0.0/libjava/gnu/java/beans/IntrospectionIncubator.java	Mon Feb 21 22:40:35 2005
***************
*** 1,5 ****
  /* gnu.java.beans.IntrospectionIncubator
!    Copyright (C) 1998 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gnu.java.beans.IntrospectionIncubator
!    Copyright (C) 1998, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,54 ****
  
  package gnu.java.beans;
  
! import java.beans.*;
! import java.util.*;
! import java.lang.reflect.*;
! import gnu.java.lang.*;
  
  /**
   ** IntrospectionIncubator takes in a bunch of Methods, and
!  ** Introspects only those Methods you give it.
   **
   ** @author John Keiser
!  ** @version 1.1.0, 30 Jul 1998
   ** @see gnu.java.beans.ExplicitBeanInfo
   ** @see java.beans.BeanInfo
   **/
--- 38,69 ----
  
  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 {
*** 65,71 ****
  	public IntrospectionIncubator() {
  	}
  
! 	/* Paving the way for automatic Introspection */
  	public void addMethod(Method method) {
  		if(Modifier.isPublic(method.getModifiers())) {
  			String name = ClassHelper.getTruncatedName(method.getName());
--- 80,103 ----
  	public IntrospectionIncubator() {
  	}
  
! 	/** Examines the given method and files it in a suitable collection.
! 	 * It files the method as a property method if it finds:
! 	 * <lu>
! 	 * <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:
! 	 * <lu>
! 	 * <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());
*************** public class IntrospectionIncubator {
*** 73,102 ****
  			Class[] params = method.getParameterTypes();
  			boolean isVoid = retType.equals(java.lang.Void.TYPE);
  			Class methodClass = method.getDeclaringClass();
! 			if(propertyStopClass == null || (propertyStopClass.isAssignableFrom(methodClass) && !propertyStopClass.equals(methodClass))) {
! 				if(name.startsWith("is")
  				   && retType.equals(java.lang.Boolean.TYPE)
  				   && params.length == 0) {
  					addToPropertyHash(name,method,IS);
  				} else if(name.startsWith("get") && !isVoid) {
  					if(params.length == 0) {
  						addToPropertyHash(name,method,GET);
  					} else if(params.length == 1 && params[0].equals(java.lang.Integer.TYPE)) {
  						addToPropertyHash(name,method,GET_I);
  					} else {
  						otherMethods.addElement(method);
  					}
  				} else if(name.startsWith("set") && isVoid) {
  					if(params.length == 1) {
  						addToPropertyHash(name,method,SET);
  					} else if(params.length == 2 && params[0].equals(java.lang.Integer.TYPE)) {
  						addToPropertyHash(name,method,SET_I);
  					} else {
  						otherMethods.addElement(method);
  					}
  				}
  			}
! 			if(eventStopClass == null || (eventStopClass.isAssignableFrom(methodClass) && !eventStopClass.equals(methodClass))) {
  				if(name.startsWith("add")
  				          && isVoid
  				          && params.length == 1
--- 105,154 ----
  			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
*************** public class IntrospectionIncubator {
*** 109,117 ****
  					addToListenerHash(name,method,REMOVE);
  				}
  			}
! 			if(methodStopClass == null || (methodStopClass.isAssignableFrom(methodClass) && !methodStopClass.equals(methodClass))) {
  				otherMethods.addElement(method);
  			}
  		}
  	}
  
--- 161,172 ----
  					addToListenerHash(name,method,REMOVE);
  				}
  			}
! 			 
! 			if(isReachable(methodStopClass, methodClass)) {
! 				// files as reachable public method
  				otherMethods.addElement(method);
  			}
+ 			
  		}
  	}
  
*************** public class IntrospectionIncubator {
*** 278,284 ****
  		methods[funcType] = method;
  	}
  
- 
  	void addToListenerHash(String name, Method method, int funcType) {
  		String newName;
  		Class type;
--- 333,338 ----
*************** public class IntrospectionIncubator {
*** 306,311 ****
--- 360,385 ----
  		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))) {
*************** public class IntrospectionIncubator {
*** 323,328 ****
--- 397,410 ----
  	}
  }
  
+ /** 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;
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/decoder/AbstractContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/AbstractContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/AbstractContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/AbstractContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/AbstractCreatableObjectContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/AbstractCreatableObjectContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/AbstractCreatableObjectContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/AbstractCreatableObjectContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/AbstractElementHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/AbstractElementHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/AbstractElementHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/AbstractElementHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/AbstractObjectContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/AbstractObjectContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/AbstractObjectContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/AbstractObjectContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/ArrayContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/ArrayContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/ArrayContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/ArrayContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/ArrayHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/ArrayHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/ArrayHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/ArrayHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/AssemblyException.java gcc-4.0.0/libjava/gnu/java/beans/decoder/AssemblyException.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/AssemblyException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/AssemblyException.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/BooleanHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/BooleanHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/BooleanHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/BooleanHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 new Boolean(true);
+ 
+     if (number.equals("false"))
+       return new Boolean(false);
+ 
+     throw new AssemblyException(new IllegalArgumentException("Element contained no valid boolean value."));
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/decoder/ByteHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/ByteHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/ByteHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/ByteHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/CharHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/CharHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/CharHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/CharHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/ClassHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/ClassHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/ClassHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/ClassHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/ConstructorContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/ConstructorContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/ConstructorContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/ConstructorContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/Context.java gcc-4.0.0/libjava/gnu/java/beans/decoder/Context.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/Context.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/Context.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/DecoderContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/DecoderContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/DecoderContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/DecoderContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/DefaultExceptionListener.java gcc-4.0.0/libjava/gnu/java/beans/decoder/DefaultExceptionListener.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/DefaultExceptionListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/DefaultExceptionListener.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/DoubleHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/DoubleHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/DoubleHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/DoubleHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/DummyContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/DummyContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/DummyContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/DummyContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/DummyHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/DummyHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/DummyHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/DummyHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/ElementHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/ElementHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/ElementHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/ElementHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/FloatHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/FloatHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/FloatHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/FloatHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/GrowableArrayContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/GrowableArrayContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/GrowableArrayContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/GrowableArrayContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/IndexContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/IndexContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/IndexContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/IndexContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/IntHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/IntHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/IntHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/IntHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/JavaHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/JavaHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/JavaHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/JavaHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/LongHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/LongHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/LongHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/LongHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/MethodContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/MethodContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/MethodContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/MethodContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/MethodFinder.java gcc-4.0.0/libjava/gnu/java/beans/decoder/MethodFinder.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/MethodFinder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/MethodFinder.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/NullHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/NullHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/NullHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/NullHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/ObjectContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/ObjectContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/ObjectContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/ObjectContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/ObjectHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/ObjectHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/ObjectHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/ObjectHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/PersistenceParser.java gcc-4.0.0/libjava/gnu/java/beans/decoder/PersistenceParser.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/PersistenceParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/PersistenceParser.java	Sat Feb 19 18:47:27 2005
***************
*** 0 ****
--- 1,484 ----
+ /* gnu.java.beans.PersistenceParser
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.
+ 	 */
+ 	private 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-3.4.3/libjava/gnu/java/beans/decoder/PropertyContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/PropertyContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/PropertyContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/PropertyContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/ShortHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/ShortHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/ShortHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/ShortHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/SimpleHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/SimpleHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/SimpleHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/SimpleHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/StaticMethodContext.java gcc-4.0.0/libjava/gnu/java/beans/decoder/StaticMethodContext.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/StaticMethodContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/StaticMethodContext.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/StringHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/StringHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/StringHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/StringHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/decoder/VoidHandler.java gcc-4.0.0/libjava/gnu/java/beans/decoder/VoidHandler.java
*** gcc-3.4.3/libjava/gnu/java/beans/decoder/VoidHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/beans/decoder/VoidHandler.java	Sat Feb 19 18:47:27 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/beans/editors/ColorEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/ColorEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/ColorEditor.java	Tue Jan 22 22:39:50 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/ColorEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,45 ****
  
  package gnu.java.beans.editors;
  
- import java.beans.*;
  import java.awt.Color;
  
  /**
   ** NativeByteEditor is a property editor for the
--- 38,45 ----
  
  package gnu.java.beans.editors;
  
  import java.awt.Color;
+ import java.beans.PropertyEditorSupport;
  
  /**
   ** NativeByteEditor is a property editor for the
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/editors/FontEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/FontEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/FontEditor.java	Tue Jan 22 22:39:50 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/FontEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,45 ****
  
  package gnu.java.beans.editors;
  
- import java.beans.*;
  import java.awt.Font;
  
  /**
   ** FontEditor is a property editor for java.awt.Font.
--- 38,45 ----
  
  package gnu.java.beans.editors;
  
  import java.awt.Font;
+ import java.beans.PropertyEditorSupport;
  
  /**
   ** FontEditor is a property editor for java.awt.Font.
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/editors/NativeBooleanEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/NativeBooleanEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/NativeBooleanEditor.java	Sun Mar 24 21:32:14 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/NativeBooleanEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.beans.editors;
  
! import java.beans.*;
  
  /**
   ** NativeBooleanEditor is a property editor for the
--- 38,44 ----
  
  package gnu.java.beans.editors;
  
! import java.beans.PropertyEditorSupport;
  
  /**
   ** NativeBooleanEditor is a property editor for the
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/editors/NativeByteEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/NativeByteEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/NativeByteEditor.java	Tue Jan 22 22:39:50 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/NativeByteEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.beans.editors;
  
! import java.beans.*;
  
  /**
   ** NativeByteEditor is a property editor for the
--- 38,44 ----
  
  package gnu.java.beans.editors;
  
! import java.beans.PropertyEditorSupport;
  
  /**
   ** NativeByteEditor is a property editor for the
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/editors/NativeDoubleEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/NativeDoubleEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/NativeDoubleEditor.java	Tue Jan 22 22:39:50 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/NativeDoubleEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.beans.editors;
  
! import java.beans.*;
  
  /**
   ** NativeDoubleEditor is a property editor for the
--- 38,44 ----
  
  package gnu.java.beans.editors;
  
! import java.beans.PropertyEditorSupport;
  
  /**
   ** NativeDoubleEditor is a property editor for the
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/editors/NativeFloatEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/NativeFloatEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/NativeFloatEditor.java	Tue Jan 22 22:39:50 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/NativeFloatEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.beans.editors;
  
! import java.beans.*;
  
  /**
   ** NativeFloatEditor is a property editor for the
--- 38,44 ----
  
  package gnu.java.beans.editors;
  
! import java.beans.PropertyEditorSupport;
  
  /**
   ** NativeFloatEditor is a property editor for the
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/editors/NativeIntEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/NativeIntEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/NativeIntEditor.java	Tue Jan 22 22:39:50 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/NativeIntEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.beans.editors;
  
! import java.beans.*;
  
  /**
   ** NativeIntEditor is a property editor for the
--- 38,44 ----
  
  package gnu.java.beans.editors;
  
! import java.beans.PropertyEditorSupport;
  
  /**
   ** NativeIntEditor is a property editor for the
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/editors/NativeLongEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/NativeLongEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/NativeLongEditor.java	Tue Jan 22 22:39:50 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/NativeLongEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.beans.editors;
  
! import java.beans.*;
  
  /**
   ** NativeLongEditor is a property editor for the
--- 38,44 ----
  
  package gnu.java.beans.editors;
  
! import java.beans.PropertyEditorSupport;
  
  /**
   ** NativeLongEditor is a property editor for the
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/editors/NativeShortEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/NativeShortEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/NativeShortEditor.java	Tue Jan 22 22:39:50 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/NativeShortEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.beans.editors;
  
! import java.beans.*;
  
  /**
   ** NativeShortEditor is a property editor for the
--- 38,44 ----
  
  package gnu.java.beans.editors;
  
! import java.beans.PropertyEditorSupport;
  
  /**
   ** NativeShortEditor is a property editor for the
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/editors/StringEditor.java gcc-4.0.0/libjava/gnu/java/beans/editors/StringEditor.java
*** gcc-3.4.3/libjava/gnu/java/beans/editors/StringEditor.java	Tue Jan 22 22:39:50 2002
--- gcc-4.0.0/libjava/gnu/java/beans/editors/StringEditor.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.beans.editors;
  
! import java.beans.*;
  
  /**
   ** NativeByteEditor is a property editor for the
--- 38,44 ----
  
  package gnu.java.beans.editors;
  
! import java.beans.PropertyEditorSupport;
  
  /**
   ** NativeByteEditor is a property editor for the
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/beans/info/ComponentBeanInfo.java gcc-4.0.0/libjava/gnu/java/beans/info/ComponentBeanInfo.java
*** gcc-3.4.3/libjava/gnu/java/beans/info/ComponentBeanInfo.java	Tue Jan 22 22:39:51 2002
--- gcc-4.0.0/libjava/gnu/java/beans/info/ComponentBeanInfo.java	Thu Jan  1 00:00:00 1970
***************
*** 1,74 ****
- /* gnu.java.beans.info.ComponentBeanInfo
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you 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.info;
- 
- import gnu.java.beans.*;
- import java.beans.*;
- 
- /** BeanInfo class for java.awt.Component.
-  ** This provides a few properties, but that's
-  ** it.
-  ** @author John Keiser
-  ** @version 1.1.0, Aug 1 1998
-  **/
- public class ComponentBeanInfo extends SimpleBeanInfo {
- 	static PropertyDescriptor[] properties;
- 	static {
- 		try {
- 		properties = new PropertyDescriptor[6];
- 		properties[0] = new PropertyDescriptor("name",java.awt.Component.class);
- 		properties[1] = new PropertyDescriptor("background",java.awt.Component.class);
- 		properties[2] = new PropertyDescriptor("foreground",java.awt.Component.class);
- 		properties[3] = new PropertyDescriptor("font",java.awt.Component.class);
- 		properties[4] = new PropertyDescriptor("enabled",java.awt.Component.class);
- 		properties[5] = new PropertyDescriptor("visible",java.awt.Component.class);
- 		} catch(IntrospectionException E) {
- 			properties = null;
- 			throw new UnknownError("Could not introspect some java.awt.Component properties.");
- 		}
- 	}
- 	public ComponentBeanInfo() {
- 		super();
- 	}
- 
- 	public PropertyDescriptor[] getPropertyDescriptors() {
- 		return properties;
- 	}
- }
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/io/Base64InputStream.java gcc-4.0.0/libjava/gnu/java/io/Base64InputStream.java
*** gcc-3.4.3/libjava/gnu/java/io/Base64InputStream.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/io/Base64InputStream.java	Wed Feb 16 23:11:04 2005
***************
*** 1,5 ****
  /* Base64InputStream.java -- base-64 input stream.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Base64InputStream.java -- base-64 input stream.
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,47 ****
  
  package gnu.java.io;
  
  import java.io.FilterInputStream;
- import java.io.InputStream;
  import java.io.IOException;
! import java.io.EOFException;
  
  /**
   * A filter input stream that decodes data encoded in the Base-64
--- 38,48 ----
  
  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
*************** public class Base64InputStream extends F
*** 91,96 ****
--- 92,121 ----
      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.
    // ------------------------------------------------------------------------
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/io/ClassLoaderObjectInputStream.java gcc-4.0.0/libjava/gnu/java/io/ClassLoaderObjectInputStream.java
*** gcc-3.4.3/libjava/gnu/java/io/ClassLoaderObjectInputStream.java	Tue Jan 22 22:39:52 2002
--- gcc-4.0.0/libjava/gnu/java/io/ClassLoaderObjectInputStream.java	Thu Jul 29 08:59:38 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.io;
  
! import java.io.*;
  
  /**
   * ClassLoaderObjectInputStream is ObjectInputStream, with
--- 38,47 ----
  
  package gnu.java.io;
  
! import java.io.IOException;
! import java.io.InputStream;
! import java.io.ObjectInputStream;
! import java.io.StreamCorruptedException;
  
  /**
   * ClassLoaderObjectInputStream is ObjectInputStream, with
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/lang/CharData.java gcc-4.0.0/libjava/gnu/java/lang/CharData.java
*** gcc-3.4.3/libjava/gnu/java/lang/CharData.java	Wed Mar  6 18:54:39 2002
--- gcc-4.0.0/libjava/gnu/java/lang/CharData.java	Fri Jul  9 21:00:11 2004
*************** package gnu.java.lang;
*** 41,48 ****
  /**
   * This contains the info about the unicode characters, that
   * java.lang.Character needs.  It is generated automatically from
!  * <code>gnu/gcj/convert/UnicodeData-3.0.0.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.
   *
--- 41,49 ----
  /**
   * This contains the info about the unicode characters, that
   * java.lang.Character needs.  It is generated automatically from
!  * <code>gnu/gcj/convert/UnicodeData-3.0.0.txt</code> and
!  * <code>gnu/gcj/convert/SpecialCasing-2.txt</code>, by some
!  * perl scripts. These Unicode definition files 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.
   *
*************** package gnu.java.lang;
*** 54,66 ****
   * 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.  Finally, there is a listing for
!  * <code>TITLE</code> exceptions (most characters just have the same
!  * title case as upper case).
   *
   * @author scripts/unicode-muncher.pl (written by Jochen Hoenicke,
   *         Eric Blake)
   * @see Character
   */
  public interface CharData
  {
--- 55,72 ----
   * 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
  {
*************** public interface CharData
*** 82,274 ****
     * character gives the actual index into <code>DATA</code>.
     */
    String BLOCKS
!     = "\u01c2\u01c2\u01c1\u012c\u012b\u01a0\u01f8\u027e\u0201\u0290\u01b7"
!     + "\u02c9\u0157\u02a9\u023f\u01b8\u0101\u0257\u02f9\u02f9\u0370\u0363"
!     + "\ufe8f\u033e\uff85\uff65\ufdb5\ufda1\uffbd\u02be\uffbe\uffe9\ufea8"
!     + "\uff2e\u022f\ufea1\uff9d\ufe61\uffa9\ufb20\u00c3\u010d\u00fe\ufb61"
!     + "\ufb5a\u0105\u0103\u00f8\ufe8b\u0223\u0258\u01c1\u01f6\u01d6\ufee1"
!     + "\u0223\ufdaa\ufb55\u0163\ufe63\u00f6\u00fd\ufe03\ufde3\ufdc3\ufda3"
!     + "\ufd83\ufd63\ufd43\ufd23\ufd03\ufce3_J\u00a5\u0133\ufe08"
!     + "]\u014f\u01a2\uf669\u0123\u0122\uf8c1\ufe50\u0102\u0101\ufa43"
!     + "\ufc88\ufea7\u00c0\ufca1\ufb8f\uf47d\u0099\ufb11\ufe1a\ufd22\ufb29"
!     + "5\uf3b9\ufe51\ufcc8\uffb5\uf339\ufa92\uff85\uff35\ufa4e\uf766"
!     + "\uff25\ufad1\ufb63\ufc34\ufedf\uf763\ufcaa\ufa82\ufdb9\uf6e3\ufe3f"
!     + "\ufcc1\ufe49\uf7eb\uf70f\uf2e8\ufd99\uf5e3\uf964\ufbfc\ufd91\uf563"
!     + "\uf543\uf43c\uf436\uef6b\uf864\uf844\ufc52\uf804\uf7e4\ufc09\uf7a4"
!     + "\uee9c\ufb8a\uf744\uf7f4\uf704\uf7c4\uf78c\uf46b\uf4cc\uf72c\uf644"
!     + "\uf3fb\uf647\uf243\uf5c4\uf5a4\ueca1\uf563\uf544\uf524\uf504\uf4e4"
!     + "\uf4c4\uf4a4\uf484\uf464\uf444\uf424\uf404\uf3e4\uf3c4\uf3a4\uf384"
!     + "\uf364\uf344\uf324\uf283\uf771\uf2c4\uf2a4\uf731\ueec3\ueea3\uee83"
!     + "\uee63\uf1e4\uf49c\uf53f\ued49\uf2d1\uf144\ue8ed\ue81e\uf0e4\uf591"
!     + "\ued03\uece3\uecc3\ueca3\uec83\uec63\uec43\uec23\uec03\uebe3\uebc3"
!     + "\ueba3\ueb83\ueb63\ueb43\ueb23\ueb03\ueae3\ueac3\ueaa3\uea83\uea63"
!     + "\uea43\uea23\uea03\ue9e3\ue9c3\ue9a3\ue983\ue963\ue943\ue923\ue903"
!     + "\ue8e3\ue8c3\ue8a3\ue883\ue863\ue843\ue823\ue803\ue7e3\ue501\ue4e1"
!     + "\ue4c1\ue4a1\uefd1\ue461\ue441\ue427\uef81\uef51\uef51\uef51\uef51"
!     + "\uef41\ue1ad\uef40\uef40\uef40\ue1e0\ue37f\uef00\ue9d3\uebe5\ue4df"
!     + "\ueece\uef5f\ue490\uef3f\ueee3\uef76\uee6e\uef6a\uef77\uef72\uee8b"
!     + "\uefcd\uee77\uee1f\uee21\uef5f\uefd7\uee90\uefcd\uefdb\uef63\ue223"
!     + "\ue203\ue1e3\ued25\ued37\ued13\uef16\uef02\ued41\ued37\ued2d\uec25"
!     + "\uec05\uebe5\uebc5\uebc8\uea76\ueb63\ueb66\ue9b0\ueb05\ueae5\ue9e3"
!     + "\udf43\udf23\udf03\udee3\ue90a\uea1d\ueb52\ueb49\ueb3f\ueadf\ude03"
!     + "\udde3\ue925\ue905\ue8e5\ue8c5\ue8a5\ue885\ue865\ue845\udcc3\udca3"
!     + "\udc83\udc63\udc43\udc23\udc03\udbe3\udbc3\udba3\udb83\udb63\udb43"
!     + "\udb23\udb03\udae3\udac3\udaa3\uda83\uda63\uda43\uda23\uda03\ud9e3"
!     + "\ud9c3\ud9a3\ud983\ud963\ud943\ud923\ud903\ud8e3\ud8c3\ud8a3\ud883"
!     + "\ud863\ud843\ud823\ud803\ud7e3\ud7c3\ud7a3\ud783\ud763\ue2ab\ue285"
!     + "\ue265\ue26a\ue225\ue205\ue1e5\ue1c5\ue1a5\ue185\ue188\udd89\ue3a2"
!     + "\udfcd\ud923\ud904\ue342\ud8c3\ud8a4\udcd1\udcac\ud67b\ud824\ud804"
!     + "\ue262\ucede\ud403\ud3e3\ue110\ue0e3\ue1c5\ue0b1\ue0b1\ue158\udf11"
!     + "\ue02e\ue00d\udfed\udfcd\ude66\udf8d\udf6d\udf4f\udf2e\ud564\ud544"
!     + "\ud524\ud504\ud4e4\ud4c4\ud4a4\ud484\ud464\ud444\ud424\ud404\ud3e4"
!     + "\ud3c4\ud3a4\ud384\ud364\ud344\ud324\ud304\ud2e4\ud2c4\ud2a4\ud284"
!     + "\ud264\ud244\ud224\ud204\ud1e4\ud1c4\ud1a4\ud184\ud164\ud144\ud124"
!     + "\ud104\ud0e4\ud0c4\ud0a4\ud084\ud064\ud044\ud024\ud004\ucfe4\ucfc4"
!     + "\ucfa4\ucf84\ucf64\ucf44\ucf24\ucf04\ucee4\ucec4\ucea4\uce84\uce64"
!     + "\uce44\uce24\uce04\ucde4\ucdc4\ucda4\ucd84\ucd64\ucd44\ucd24\ucd04"
!     + "\ucce4\uccc4\ucca4\ucc84\ucc64\ucc44\ucc24\ucc04\ucbe4\ucbc4\ucba4"
!     + "\ucb84\ucb64\ucb44\ucb24\ucb04\ucae4\ucac4\ucaa4\uca84\uca64\uca44"
!     + "\uca24\uca04\uc9e4\uc9c4\uc9a4\uc984\uc964\uc944\uc924\uc904\uc8e4"
!     + "\uc8c4\uc8a4\uc884\uc864\uc844\uc824\uc804\uc7e4\uc7c4\uc7a4\uc784"
!     + "\uc764\uc744\uc724\uc704\uc6e4\uc6c4\uc6a4\uc684\uc664\uc644\uc624"
!     + "\uc604\uc5e4\uc5c4\uc5a4\uc584\uc564\uc544\uc524\uc504\uc4e4\uc4c4"
!     + "\uc4a4\uc484\uc464\uc444\uc424\uc404\uc3e4\uc3c4\uc3a4\uc384\uc364"
!     + "\uc344\uc324\uc304\uc2e4\uc2c4\uc2a4\uc284\uc264\uc244\uc224\uc204"
!     + "\uc1e4\uc1c4\uc1a4\uc184\uc164\uc144\uc124\uc104\uc0e4\uc0c4\uc0a4"
!     + "\uc084\uc064\uc044\uc024\uc004\ubfe4\ubfc4\ubfa4\ubf84\ubf64\ubf44"
!     + "\ubf24\ubf04\ubee4\ubec4\ubea4\ube84\ube64\ube44\ube24\ube04\ubde4"
!     + "\ubdc4\ubda4\ubd84\ubd64\ubd44\ubd24\ubd04\ubce4\ubcc4\ubca4\ubc84"
!     + "\ubc64\ubc44\ubc24\ubc04\ubbe4\ub2e0\ub803\ub7e3\ubb64\ubb44\ubb24"
!     + "\ubb04\ubae4\ubac4\ubaa4\uba84\uba64\uba44\uba24\uba04\ub9e4\ub9c4"
!     + "\ub9a4\ub984\ub964\ub944\ub924\ub904\ub8e4\ub8c4\ub8a4\ub884\ub864"
!     + "\ub844\ub824\ub804\ub7e4\ub7c4\ub7a4\ub784\ub764\ub744\ub724\ub704"
!     + "\ub6e4\ub6c4\ub6a4\ub684\ub664\ub644\ub624\ub604\ub5e4\ub5c4\ub5a4"
!     + "\ub584\ub564\ub544\ub524\ub504\ub4e4\ub4c4\ub4a4\ub484\ub464\ub444"
!     + "\ub424\ub404\ub3e4\ub3c4\ub3a4\ub384\ub364\ub344\ub324\ub304\ub2e4"
!     + "\ub2c4\ub2a4\ub284\ub264\ub244\ub224\ub204\ub1e4\ub1c4\ub1a4\ub184"
!     + "\ub164\ub144\ub124\ub104\ub0e4\ub0c4\ub0a4\ub084\ub064\ub044\ub024"
!     + "\ub004\uafe4\uafc4\uafa4\uaf84\uaf64\uaf44\uaf24\uaf04\uaee4\uaec4"
!     + "\uaea4\uae84\uae64\uae44\uae24\uae04\uade4\uadc4\uada4\uad84\uad64"
!     + "\uad44\uad24\uad04\uace4\uacc4\uaca4\uac84\uac64\uac44\uac24\uac04"
!     + "\uabe4\uabc4\uaba4\uab84\uab64\uab44\uab24\uab04\uaae4\uaac4\uaaa4"
!     + "\uaa84\uaa64\uaa44\uaa24\uaa04\ua9e4\ua9c4\ua9a4\ua984\ua964\ua944"
!     + "\ua924\ua904\ua8e4\ua8c4\ua8a4\ua884\ua864\ua844\ua824\ua804\ua7e4"
!     + "\ua7c4\ua7a4\ua784\ua764\ua744\ua724\ua704\ua6e4\ua6c4\ua6a4\ua684"
!     + "\ua664\ua644\ua624\ua604\ua5e4\ua5c4\ua5a4\ua584\ua564\ua544\ua524"
!     + "\ua504\ua4e4\ua4c4\ua4a4\ua484\ua464\ua444\ua424\ua404\ua3e4\ua3c4"
!     + "\ua3a4\ua384\ua364\ua344\ua324\ua304\ua2e4\ua2c4\ua2a4\ua284\ua264"
!     + "\ua244\ua224\ua204\ua1e4\ua1c4\ua1a4\ua184\ua164\ua144\ua124\ua104"
!     + "\ua0e4\ua0c4\ua0a4\ua084\ua064\ua044\ua024\ua004\u9fe4\u9fc4\u9fa4"
!     + "\u9f84\u9f64\u9f44\u9f24\u9f04\u9ee4\u9ec4\u9ea4\u9e84\u9e64\u9e44"
!     + "\u9e24\u9e04\u9de4\u9dc4\u9da4\u9d84\u9d64\u9d44\u9d24\u9d04\u9ce4"
!     + "\u9cc4\u9ca4\u9c84\u9c64\u9c44\u9c24\u9c04\u9be4\u9bc4\u9ba4\u9b84"
!     + "\u9b64\u9b44\u9b24\u9b04\u9ae4\u9ac4\u9aa4\u9a84\u9a64\u9a44\u9a24"
!     + "\u9a04\u99e4\u99c4\u99a4\u9984\u9964\u9944\u9924\u9904\u98e4\u98c4"
!     + "\u98a4\u9884\u9864\u9844\u9824\u9804\u97e4\u97c4\u97a4\u9784\u9764"
!     + "\u9744\u9724\u9704\u96e4\u96c4\u96a4\u9684\u9664\u9644\u9624\u9604"
!     + "\u95e4\u95c4\u95a4\u9584\u9564\u9544\u9524\u9504\u94e4\u94c4\u94a4"
!     + "\u9484\u9464\u9444\u9424\u9404\u93e4\u93c4\u93a4\u9384\u9364\u9344"
!     + "\u9324\u9304\u92e4\u92c4\u92a4\u9284\u9264\u9244\u9224\u9204\u91e4"
!     + "\u91c4\u91a4\u9184\u9164\u9144\u9124\u9104\u90e4\u90c4\u90a4\u9084"
!     + "\u9064\u9044\u9024\u9004\u8fe4\u8fc4\u8fa4\u8f84\u8f64\u8f44\u8f24"
!     + "\u8f04\u8ee4\u8ec4\u8ea4\u8e84\u8e64\u8e44\u8e24\u8e04\u8de4\u8dc4"
!     + "\u8da4\u8d84\u8d64\u8d44\u8d24\u8d04\u8ce4\u8cc4\u8ca4\u8c84\u8c64"
!     + "\u8c44\u8c24\u8c04\u8be4\u8bc4\u8ba4\u8b84\u8b64\u8b44\u8b24\u8b04"
!     + "\u8ae4\u8ac4\u8aa4\u8a84\u8a64\u8a44\u8a24\u8a04\u89e4\u89c4\u89a4"
!     + "\u8984\u8964\u8944\u8924\u8904\u88e4\u88c4\u88a4\u8884\u8864\u8844"
!     + "\u8824\u8804\u87e4\u87c4\u87a4\u8784\u8764\u8744\u8724\u8704\u86e4"
!     + "\u86c4\u86a4\u8684\u8664\u8644\u8624\u8604\u85e4\u85c4\u85a4\u8584"
!     + "\u8564\u8544\u8524\u8504\u84e4\u84c4\u84a4\u8484\u8464\u8444\u8424"
!     + "\u8404\u83e4\u83c4\u83a4\u8384\u8364\u8344\u8324\u8304\u82e4\u82c4"
!     + "\u82a4\u8284\u8264\u8244\u8224\u8204\u81e4\u81c4\u81a4\u8184\u8164"
!     + "\u8144\u8124\u8104\u80e4\u80c4\u80a4\u8084\u8064\u8044\u8024\u8004"
!     + "\u7fe4\u7fc4\u7fa4\u7f84\u7f64\u7f44\u7f24\u7f04\u7ee4\u7ec4\u7ea4"
!     + "\u7e84\u7e64\u7e44\u7e24\u7e04\u7de4\u7dc4\u7da4\u7d84\u7d64\u7d44"
!     + "\u7d24\u7d04\u7ce4\u7cc4\u7ca4\u7c84\u7c64\u7c44\u7c24\u7c04\u7be4"
!     + "\u7bc4\u7ba4\u7b84\u7b64\u7b44\u7b24\u7b04\u7ae4\u7ac4\u7aa4\u7a84"
!     + "\u7a64\u7a44\u7a24\u7a04\u79e4\u79c4\u79a4\u7984\u7964\u7944\u7924"
!     + "\u7904\u78e4\u78c4\u78a4\u7884\u7864\u7844\u7824\u7804\u77e4\u77c4"
!     + "\u77a4\u7784\u7764\u7744\u7724\u7704\u76e4\u76c4\u76a4\u7684\u7664"
!     + "\u7644\u7624\u7604\u75e4\u75c4\u75a4\u7584\u7564\u7544\u7524\u7504"
!     + "\u74e4\u74c4\u74a4\u7484\u7464\u7444\u7424\u7404\u73e4\u73c4\u73a4"
!     + "\u7384\u7364\u7344\u7324\u7304\u72e4\u72c4\u72a4\u7284\u7264\u7244"
!     + "\u7224\u7204\u71e4\u71c4\u71a4\u7184\u7164\u7144\u7124\u7104\u70e4"
!     + "\u70c4\u70a4\u7084\u7064\u7044\u7024\u7004\u6fe4\u6fc4\u6fa4\u6f84"
!     + "\u6f64\u6f44\u6f24\u6f04\u6ee4\u6ec4\u6ea4\u6e84\u6e64\u6e44\u6e24"
!     + "\u6e04\u6de4\u6dc4\u6da4\u6d84\u6d64\u6d44\u6d24\u6d04\u6ce4\u6cc4"
!     + "\u6ca4\u6c84\u6c64\u6c44\u6c24\u6c04\u6be4\u6bc4\u6ba4\u6b84\u6b64"
!     + "\u6b44\u6b24\u6b04\u6ae4\u6ac4\u6aa4\u6a84\u6a64\u6a44\u6a24\u6a04"
!     + "\u69e4\u60f0\u6603\u65e3\u6964\u6944\u6924\u6904\u68e4\u68c4\u68a4"
!     + "\u6884\u6864\u6844\u6824\u6804\u67e4\u67c4\u67a4\u6784\u6764\u6744"
!     + "\u6724\u6704\u66e4\u66c4\u66a4\u6684\u6664\u6644\u6624\u6604\u65e4"
!     + "\u65c4\u65a4\u6584\u6564\u6544\u6524\u6504\u6b20\u6ddb\u6e96\u60e3"
!     + "\u60c3\u60a3\u6083\u6063\u6043\u6023\u6003\u5fe3\u5fc3\u5fa3\u5f83"
!     + "\u5f63\u5f43\u5f23\u5f03\u5ee3\u5ec3\u5ea3\u5e83\u5e63\u5e43\u5e23"
!     + "\u5e03\u5de3\u5dc3\u5da3\u5d83\u5d63\u5d43\u5d23\u5d03\u5ce3\u5cc3"
!     + "\u5ca3\u5c83\u5c63\u5c43\u5c23\u5c03\u5be3\u5bc3\u5ba3\u5b83\u5b63"
!     + "\u5b43\u5b23\u5b03\u5ae3\u5ac3\u5aa3\u5a83\u5a63\u5a43\u5a23\u5a03"
!     + "\u59e3\u5d64\u5d44\u5d24\u5d04\u5ce4\u5cc4\u5ca4\u5c84\u5c64\u5c44"
!     + "\u5c24\u5c04\u5be4\u5bc4\u5ba4\u5b84\u5b64\u5b44\u5b24\u5b04\u5ae4"
!     + "\u5ac4\u5aa4\u5a84\u5a64\u5a44\u5a24\u5a04\u59e4\u59c4\u59a4\u5984"
!     + "\u5964\u5944\u5924\u5904\u58e4\u58c4\u58a4\u5884\u5864\u5844\u5824"
!     + "\u5804\u57e4\u57c4\u57a4\u5784\u5764\u5744\u5724\u5704\u56e4\u56c4"
!     + "\u56a4\u5684\u5664\u5644\u5624\u5604\u55e4\u55c4\u55a4\u5584\u5564"
!     + "\u5544\u5524\u5504\u54e4\u54c4\u54a4\u5484\u5464\u5444\u5424\u5404"
!     + "\u53e4\u53c4\u53a4\u5384\u5364\u5344\u5324\u5304\u52e4\u52c4\u52a4"
!     + "\u5284\u5264\u5244\u5224\u5204\u51e4\u51c4\u51a4\u5184\u5164\u5144"
!     + "\u5124\u5104\u50e4\u50c4\u50a4\u5084\u5064\u5044\u5024\u5004\u4fe4"
!     + "\u4fc4\u4fa4\u4f84\u4f64\u4f44\u4f24\u4f04\u4ee4\u4ec4\u4ea4\u4e84"
!     + "\u4e64\u4e44\u4e24\u4e04\u4de4\u4dc4\u4da4\u4d84\u4d64\u4d44\u4d24"
!     + "\u4d04\u4ce4\u4cc4\u4ca4\u4c84\u4c64\u4c44\u4c24\u4c04\u4be4\u4bc4"
!     + "\u4ba4\u4b84\u4b64\u4b44\u4b24\u4b04\u4ae4\u4ac4\u4aa4\u4a84\u4a64"
!     + "\u4a44\u4a24\u4a04\u49e4\u49c4\u49a4\u4984\u4964\u4944\u4924\u4904"
!     + "\u48e4\u48c4\u48a4\u4884\u4864\u4844\u4824\u4804\u47e4\u47c4\u47a4"
!     + "\u4784\u4764\u4744\u4724\u4704\u46e4\u46c4\u46a4\u4684\u4664\u4644"
!     + "\u4624\u4604\u45e4\u45c4\u45a4\u4584\u4564\u4544\u4524\u4504\u44e4"
!     + "\u44c4\u44a4\u4484\u4464\u4444\u4424\u4404\u43e4\u43c4\u43a4\u4384"
!     + "\u4364\u4344\u4324\u4304\u42e4\u42c4\u42a4\u4284\u4264\u4244\u4224"
!     + "\u4204\u41e4\u41c4\u41a4\u4184\u4164\u4144\u4124\u4104\u40e4\u40c4"
!     + "\u40a4\u4084\u4064\u4044\u4024\u4004\u3fe4\u3fc4\u3fa4\u3f84\u3f64"
!     + "\u3f44\u3f24\u3f04\u3ee4\u3ec4\u3ea4\u3e84\u3e64\u3e44\u3e24\u3e04"
!     + "\u3de4\u3dc4\u3da4\u3d84\u3d64\u3d44\u3d24\u3d04\u3ce4\u3cc4\u3ca4"
!     + "\u3c84\u3c64\u3c44\u3c24\u3c04\u3be4\u3bc4\u3ba4\u3b84\u3b64\u3b44"
!     + "\u3b24\u3b04\u3ae4\u3ac4\u3aa4\u3a84\u3a64\u3a44\u3a24\u3a04\u39e4"
!     + "\u39c4\u39a4\u3984\u3964\u3944\u3924\u3904\u38e4\u38c4\u38a4\u3884"
!     + "\u3864\u3844\u3824\u3804\u37e4\u37c4\u37a4\u3784\u3764\u3744\u3724"
!     + "\u3704\u36e4\u36c4\u36a4\u3684\u3664\u3644\u3624\u3604\u35e4\u35c4"
!     + "\u35a4\u3584\u3564\u3544\u3524\u3504\u34e4\u34c4\u34a4\u3484\u3464"
!     + "\u3444\u3424\u3404\u33e4\u33c4\u33a4\u3384\u3364\u3344\u3324\u3304"
!     + "\u32e4\u32c4\u32a4\u3284\u3264\u3244\u3224\u3204\u31e4\u28f2\u2e03"
!     + "\u2de3\u3c25\u3c05\u3be5\u3bc5\u3ba5\u3b85\u3b65\u3b45\u3b25\u3b05"
!     + "\u3ae5\u3ac5\u3aa5\u3a85\u3a65\u3a45\u3a25\u3a05\u39e5\u39c5\u39a5"
!     + "\u3985\u3965\u3945\u3925\u3905\u38e5\u38c5\u38a5\u3885\u3865\u3845"
!     + "\u3825\u3805\u37e5\u37c5\u37a5\u3785\u3765\u3745\u3725\u3705\u36e5"
!     + "\u36c5\u36a5\u3685\u3665\u3645\u3625\u3605\u35e5\u35c5\u35a5\u3585"
!     + "\u3565\u3545\u3525\u3505\u34e5\u34c5\u34a5\u3485\u3465\u3445\u3445"
!     + "\u3425\u3405\u33e5\u33c5\u33a5\u3385\u3365\u3345\u3325\u3305\u32e5"
!     + "\u32c5\u32a5\u3285\u3265\u3245\u3225\u3205\u31e5\u31c5\u31a5\u3185"
!     + "\u3165\u3145\u3125\u3105\u30e5\u30c5\u30a5\u3085\u3065\u3045\u3025"
!     + "\u3005\u2fe5\u2fc5\u2fa5\u2f85\u2f65\u2f45\u2f25\u2f05\u2ee5\u2ec5"
!     + "\u2ea5\u2e85\u2e65\u2e45\u2e25\u2e05\u2de5\u2dc5\u2da5\u2d85\u2d65"
!     + "\u2d45\u2d25\u2d05\u2ce5\u2cc5\u2ca5\u2c85\u2c65\u2c45\u2c25\u2c05"
!     + "\u2be5\u2bc5\u2ba5\u2b85\u2b65\u2b45\u2b25\u2b05\u2ae5\u2ac5\u2aa5"
!     + "\u2a85\u2a65\u2a45\u2a25\u2a05\u29e5\u29c5\u29a5\u2985\u2965\u2945"
!     + "\u2925\u2905\u28e5\u28c5\u28a5\u2885\u2865\u2845\u2825\u2805\u27e5"
!     + "\u27c5\u27a5\u2785\u2765\u2745\u2725\u2705\u26e5\u26c5\u26a5\u2685"
!     + "\u2665\u2645\u2625\u2605\u25e5\u25c5\u25a5\u2585\u2565\u2545\u2525"
!     + "\u2505\u24e5\u24c5\u24a5\u2485\u2465\u2445\u2425\u2405\u23e5\u23c5"
!     + "\u23a5\u2385\u2365\u2345\u2325\u2305\u22e5\u22c5\u22a5\u2285\u2265"
!     + "\u2245\u2225\u2205\u21e5\u21c5\u21a5\u2185\u2165\u2145\u2125\u2105"
!     + "\u20e5\u20c5\u20a5\u2085\u2065\u2045\u2025\u2005\u1fe5\u1fc5\u1fa5"
!     + "\u1f85\u1f65\u1f45\u1f25\u1f05\u1ee5\u1ec5\u1ea5\u1e85\u1e65\u1e45"
!     + "\u1e25\u1e05\u1de5\u1dc5\u1da5\u1d85\u1d65\u1d45\u1d25\u1d05\u1ce5"
!     + "\u1cc5\u1ca5\u1c85\u1c65\u1c45\u1c25\u1c05\u1be5\u1bc5\u1ba5\u1b85"
!     + "\u1b65\u1064\u1044\u1024\u1004\u0fe4\u0fc4\u0fa4\u0f84\u0f64\u0668"
!     + "\u0b83\u0b63\u0b43\u0b23\u0b03\u0ae3\u0a72\u1945\u0a51\u0d16\u0cf6"
!     + "\u0cac\u0ca3\u0c96\u0c76\u0c56\u0c36\u0c16\u0bf6\u0bd6\u0bb6\u0b96"
!     + "\u0b76\u0b58\u0b26\u0b16\u0ab2\u0ad6\u0a96\u02c2\u07c3\u1665\u1661"
!     + "\u03ff\u09f6\u09d6\u09b6\u05dc\u0bb2\u15a1\u0fc0\u01c0\u01b1\u09c5"
!     + "\u0826\u127f";
  
    /**
     * Information about each character.  The low order 5 bits form the
--- 88,280 ----
     * 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
*************** public interface CharData
*** 279,320 ****
     * as of Unicode version 3.2.0, but may soon become one.
     */
    String DATA
!     = "\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81"
!     + "\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002"
!     + "\u3e00\u3e00\u2f81\u3002\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3a05"
!     + "\u3a05\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05"
!     + "\u3e00\u3e00\u3e00\u3e00\u5a88\u5a88\u3e00\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00"
!     + "\u3e00\u3e00\u3e00\u5098\u3e00\u3e00\u3e00\u3e00\u4586\u3e00\u3e00"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00\u3e00\u3a05"
!     + "\u3a05\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u3e00\u3e00\u3e00\u3e00\u5102\u5102\u5102\u5102"
!     + "\u5102\u5102\u5102\u5102\u5102\u5102\u5102\u5102\u5102\u5102\u5102"
!     + "\u5102\u5102\u5102\u5102\u5102\u5102\u5102\u5102\u5102\u5102\u5102"
!     + "\u5102\u5102\u5102\u5102\u5102\u2902\u3e00\u5098\u2a14\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u4586\u4586\u4586\u4586\u4586\u4586\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4606\u4586\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u1a1b\u1a1b\u3e00\u3e00\u3e00\u3e00\u4504\u3e00\u3e00"
!     + "\u3e00\u0298\u3e00\u0298\u6515\u6596\u0298\u1a97\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u4504\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u4504\u4504\u1a1b\u1a1b\u1a1b\u1a1b"
!     + "\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u4504"
!     + "\u4504\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b"
!     + "\u1a1b\u1a1b\u1a1b\u1a1b\u2902\u7102\u2902\u3e00\u2902\u2902\u7301"
!     + "\u7301\u7301\u7301\u7203\u1a1b\u1a1b\u1a1b\u6c82\u6c82\u2902\u2902"
!     + "\u3e00\u3e00\u2902\u2902\u6d01\u6d01\u7381\u7381\u3e00\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"
--- 285,326 ----
     * 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"
*************** public interface CharData
*** 329,770 ****
      + "\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\u3e00\u0298\u0298\u0298\u0298\u0298\u0298\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\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\u3e00\u0298"
!     + "\u039a\u0318\u0298\u3e00\u3e00\u3e00\u3e00\u5305\u5305\u5305\u3e00"
!     + "\u5305\u3e00\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u5305\u3e00\u3e00\u3e00\u4586\u4586\u4586\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u3e00\u4f1c\u4f1c\u4e81\u4e81"
!     + "\u4e81\u4e81\u4e81\u4e81\u4e81\u4e81\u4e81\u4e81\u4e81\u4e81\u4e81"
!     + "\u4e81\u4e81\u4e81\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\u2902\u3281\u2f81\u3002\u2f81\u3002\u3301\u2f81\u3002\u3381"
!     + "\u3381\u2f81\u3002\u2902\u3401\u3481\u3501\u2f81\u3002\u3381\u3581"
!     + "\u3602\u3681\u3701\u2f81\u3002\u2902\u2902\u3681\u3781\u2902\u3801"
!     + "\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2902\u2f81"
!     + "\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002"
!     + "\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81"
!     + "\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u5b09\u5b89\u5c09\u5c89\u5d09\u5d89\u5e09"
!     + "\u5e89\u5f09\u5f89\u4586\u4586\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u1a1b\u1a1b\u4681"
!     + "\u0298\u4701\u4701\u4701\u3e00\u4781\u3e00\u4801\u4801\u2902\u2e01"
!     + "\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01"
!     + "\u2e01\u2e01\u2e01\u2e01\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82"
!     + "\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82"
!     + "\u2e82\u2e82\u2e82\u2e82\u2e82\u0c99\u2e82\u2e82\u2e82\u2e82\u2e82"
!     + "\u2e82\u2e82\u2f02\u2e82\u2e82\u4982\u2e82\u2e82\u2e82\u2e82\u2e82"
!     + "\u2e82\u2e82\u2e82\u2e82\u4a02\u4a82\u4a82\u3e00\u4b02\u4b82\u4c01"
!     + "\u4c01\u4c01\u4c82\u4d02\u2902\u3e00\u3e00\u2f81\u3002\u2f81\u3002"
!     + "\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81"
!     + "\u3002\u2902\u3b01\u3b83\u3c02\u2f81\u3002\u3d01\u3d81\u2f81\u3002"
!     + "\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81"
!     + "\u3002\u2f81\u3002\u3081\u3102\u2f81\u3002\u2f81\u3002\u2f81\u3002"
!     + "\u2902\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002"
!     + "\u2f81\u3002\u2f81\u3002\u2f81\u3002\u4d82\u4e02\u3c82\u2902\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u5a10\u5a10\u5a10\u5a10\u5a10\u5a10\u7d8b\u3e00\u3e00\u3e00\u7e0b"
!     + "\u7e8b\u7f0b\u7f8b\u800b\u808b\u0519\u0519\u0c99\u0455\u04d6\u2902"
!     + "\u3a05\u3a05\u3a05\u3a05\u3b01\u3b83\u3c02\u3b01\u3b83\u3c02\u3b01"
!     + "\u3b83\u3c02\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81"
!     + "\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u3c82\u2f81\u3002\u4f1c"
!     + "\u4586\u4586\u4586\u4586\u3e00\u4f87\u4f87\u3e00\u3e00\u2f81\u3002"
!     + "\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81"
!     + "\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002"
!     + "\u3181\u2f81\u3002\u2f81\u3002\u2f81\u3002\u3202\u2f81\u3002\u2f81"
!     + "\u3002\u2f81\u3002\u3881\u2f81\u3002\u3881\u2902\u2902\u2f81\u3002"
!     + "\u3881\u2f81\u3002\u3901\u3901\u2f81\u3002\u2f81\u3002\u3981\u2f81"
!     + "\u3002\u2902\u3a05\u2f81\u3002\u2902\u3a82\u4c01\u2f81\u3002\u2f81"
!     + "\u3002\u3e00\u3e00\u2f81\u3002\u3e00\u3e00\u2f81\u3002\u3e00\u3e00"
!     + "\u3e00\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002"
!     + "\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u0598\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u5298\u3e00\u3e00\u3e00\u5298\u5298\u5298\u5298\u5298"
!     + "\u5298\u5298\u5298\u5298\u5298\u5298\u5298\u5298\u5298\u3e00\u5a10"
!     + "\u5305\u4586\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u3e00\u3e00"
!     + "\u5a10\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01"
!     + "\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01"
!     + "\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01\u4c01"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u5b09\u5b89\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u2902\u2902\u2902\u3e82\u3f02\u2902\u3f82\u3f82\u2902\u4002\u2902"
!     + "\u4082\u2902\u2902\u2902\u2902\u3f82\u2902\u2902\u4102\u2902\u2902"
!     + "\u2902\u2902\u4182\u4202\u2902\u2902\u2902\u2902\u2902\u4202\u2902"
!     + "\u2902\u4282\u2902\u2902\u4302\u2902\u2902\u2902\u2902\u2902\u2902"
!     + "\u2902\u2902\u2902\u2902\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u2902\u2902\u2902\u2902\u2902\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u5205\u4586\u5205\u5205\u3e00\u5205\u5205"
!     + "\u3e00\u5205\u5205\u5205\u5205\u5205\u5205\u5205\u5205\u5205\u5205"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5298\u5305"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4f87\u4f87\u4586\u4f87"
!     + "\u4f87\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b\u2d8b"
!     + "\u2d8b\u828b\u4382\u2902\u2902\u4382\u2902\u2902\u2902\u2902\u4382"
!     + "\u2902\u4402\u4402\u2902\u2902\u2902\u2902\u2902\u2902\u4482\u2902"
!     + "\u2902\u2902\u2902\u2902\u2902\u2902\u2902\u2902\u2902\u2902\u2902"
!     + "\u2902\u2902\u3e00\u3e00\u4504\u4504\u4504\u4504\u4504\u4504\u4504"
!     + "\u4504\u4504\u1a1b\u1a1b\u4504\u4504\u4504\u4504\u4504\u1a1b\u1a1b"
!     + "\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u1a1b\u4504\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u5001\u5001\u5001\u5001\u5001\u5001\u5001\u5001"
!     + "\u5001\u5001\u5001\u5001\u5001\u5001\u5001\u5001\u5001\u5001\u5001"
!     + "\u5001\u5001\u5001\u5001\u3e00\u3e00\u4504\u5098\u5098\u5098\u5098"
!     + "\u5098\u5098\u2e01\u2e01\u3e00\u2e01\u2e01\u2e01\u2e01\u2e01\u2e01"
!     + "\u2e01\u2e01\u2e01\u4882\u4902\u4902\u4902\u2902\u2e82\u2e82\u2e82"
!     + "\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82\u2e82"
!     + "\u2e82\u2e82\u4e02\u4e02\u4e02\u4e02\u4e02\u4e02\u4e02\u4e02\u4e02"
!     + "\u4e02\u4e02\u4e02\u4e02\u4e02\u4e02\u4e02\u4586\u4586\u4586\u4586"
!     + "\u4586\u5098\u4586\u4586\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00"
!     + "\u3e00\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u3e00\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586"
!     + "\u3e00\u4586\u4586\u4586\u5198\u4586\u4586\u5198\u4586\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u5205\u5205"
!     + "\u5205\u5205\u5205\u5205\u5205\u5205\u5205\u5205\u5205\u5205\u5205"
!     + "\u5205\u5205\u5205\u3e00\u3e00\u3e00\u3e00\u3e00\u5205\u5205\u5205"
!     + "\u5198\u5198\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u5b89\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89"
!     + "\u630b\u638b\u640b\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u4586\u5a88\u3e00\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3e00\u3a05"
!     + "\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00\u3a05\u3a05\u3e00\u3a05\u3e00"
!     + "\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u5a88\u5a88\u5a88\u5a88\u3e00"
!     + "\u4586\u4586\u4586\u3e00\u4586\u4586\u4586\u4586\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u4586\u4586\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u4586\u5a88\u5a88\u3e00\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3a05\u3a05\u3e00\u3e00"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3e00\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00\u3e00\u5a88\u5a88"
!     + "\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3e00\u3e00\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00\u3e00\u5b09\u5b89"
!     + "\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u4f1c\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u5409\u5489\u5509\u5589\u5609\u5689\u5709\u5789\u5809"
!     + "\u5889\u0318\u5918\u5918\u5298\u3e00\u3e00\u4586\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u3e00\u3e00\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u5305"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u6515\u6596"
!     + "\u5384\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305\u5305"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u5a88"
!     + "\u5a88\u5098\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u4586\u4586\u5a88\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3e00\u3a05\u3e00\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u5098\u5098\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u4586\u4586\u4586"
!     + "\u4586\u4586\u5384\u5384\u4586\u4586\u289c\u4586\u4586\u4586\u4586"
!     + "\u3e00\u3e00\u0709\u0789\u0809\u0889\u0909\u0989\u0a09\u0a89\u0b09"
!     + "\u0b89\u5305\u5305\u5305\u599c\u599c\u3e00\u3a05\u3a05\u3a05\u3e00"
!     + "\u3a05\u3e00\u3a05\u3e00\u3e00\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05"
!     + "\u3a05\u4586\u3a05\u3a05\u4586\u4586\u4586\u4586\u4586\u4586\u3e00"
!     + "\u4586\u4586\u3a05\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00"
!     + "\u3e00\u3e00\u4586\u4586\u5a88\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u4586\u3a05\u5a88\u5a88"
!     + "\u5a88\u5a88\u5a88\u3e00\u4586\u5a88\u5a88\u3e00\u5a88\u5a88\u4586"
!     + "\u4586\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u5a88\u5a88\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3a05\u3e00\u5098\u5098\u5098"
!     + "\u5098\u5098\u5098\u5098\u5098\u5b89\u5c09\u5c89\u5d09\u5d89\u5e09"
!     + "\u5e89\u5f09\u5f89\u630b\u660b\u668b\u670b\u678b\u680b\u688b\u690b"
!     + "\u698b\u638b\u6a0b\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3e00\u3a05\u3a05\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3e00"
!     + "\u3e00\u4586\u3a05\u5a88\u4586\u4586\u4586\u4586\u4586\u4586\u4586"
!     + "\u4586\u5a88\u5a88\u5a88\u5a88\u4586\u3e00\u3e00\u3a05\u4586\u4586"
!     + "\u4586\u4586\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3e00\u3a05\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00"
!     + "\u4586\u3e00\u5a88\u5a88\u5a88\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3e00\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3e00\u3a05\u3a05"
!     + "\u3a05\u3a05\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u4586"
!     + "\u3a05\u3a05\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u3e00\u3e00"
!     + "\u3e00\u3e00\u039a\u039a\u039a\u039a\u039a\u039a\u039a\u039a\u039a"
!     + "\u039a\u039a\u039a\u039a\u039a\u039a\u039a\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3a05\u3a05\u4586\u4586\u5098\u5098\u5b09\u5b89\u5c09\u5c89"
!     + "\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u5098\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u0298\u0298\u0318\u039a\u0318\u0298\u0298\u6515\u6596\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\u5a10\u5a10\u5a10"
!     + "\u5a10\u3e00\u5b09\u5b89\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09"
!     + "\u5f89\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3e00\u3e00\u3e00\u3e00\u5a88\u4586\u4586\u4586\u4586\u3e00\u3e00"
!     + "\u5a88\u5a88\u3e00\u3e00\u5a88\u5a88\u4586\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u5a88\u3e00\u3e00\u3e00\u3e00\u3a05"
!     + "\u3a05\u3e00\u3a05\u3e00\u3e00\u3a05\u3a05\u3e00\u3a05\u3e00\u3e00"
!     + "\u3a05\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05"
!     + "\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3e00"
!     + "\u3a05\u3a05\u3e00\u3a05\u3a05\u3e00\u3e00\u4586\u3e00\u5a88\u5a88"
!     + "\u4586\u4586\u3e00\u3e00\u3e00\u3e00\u4586\u4586\u3e00\u3e00\u4586"
!     + "\u4586\u4586\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3e00\u3a05\u3a05"
!     + "\u4586\u4586\u3e00\u3e00\u5b09\u5b89\u5c09\u5c89\u5d09\u5d89\u5e09"
!     + "\u5e89\u5f09\u5f89\u3a05\u3a05\u039a\u039a\u600b\u608b\u610b\u618b"
!     + "\u620b\u628b\u4f1c\u3e00\u3e00\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3e00\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3e00\u3e00\u4586\u3a05\u5a88\u5a88\u4586\u4586\u4586\u4586"
!     + "\u4586\u3e00\u4586\u4586\u5a88\u3e00\u5a88\u5a88\u4586\u3e00\u3e00"
!     + "\u3a05\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u5b09\u5b89\u5c09\u5c89\u5d09\u5d89"
!     + "\u5e09\u5e89\u5f09\u5f89\u620b\u620b\u620b\u620b\u620b\u620b\u620b"
!     + "\u620b\u620b\u620b\u4f1c\u4586\u4f1c\u4586\u4f1c\u4586\u6515\u6596"
!     + "\u6515\u6596\u5a88\u5a88\u4586\u4586\u4586\u3e00\u3e00\u3e00\u5a88"
!     + "\u5a88\u3e00\u3e00\u5a88\u5a88\u4586\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u4586\u5a88\u3e00\u3e00\u3e00\u3e00\u3a05\u3a05"
!     + "\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05\u3e00\u5a88"
!     + "\u4586\u4586\u4586\u4586\u5a88\u4586\u3e00\u3e00\u3e00\u4586\u4586"
!     + "\u5a88\u4586\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u5a88\u5a88\u5a88\u4586\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u5a88\u5a88\u3e00\u3e00\u3e00\u5a88"
!     + "\u5a88\u5a88\u3e00\u5a88\u5a88\u5a88\u4586\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u5a88\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u4504\u3e00"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u3e00\u3e00\u5b09\u5b89\u5c09"
!     + "\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u3e00\u3e00\u3a05\u3a05"
!     + "\u3e00\u3e00\u3e00\u3e00\u5b09\u5b89\u5c09\u5c89\u5d09\u5d89\u5e09"
!     + "\u5e89\u5f09\u5f89\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u4586\u4586\u4586"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4f87"
!     + "\u4f87\u4f87\u5a88\u4586\u4586\u4586\u3e00\u3e00\u5a88\u5a88\u5a88"
!     + "\u3e00\u5a88\u5a88\u5a88\u4586\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u5a88\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00"
!     + "\u4586\u3e00\u3e00\u3e00\u3e00\u5a88\u5a88\u5a88\u4586\u4586\u4586"
!     + "\u3e00\u4586\u3e00\u5a88\u5a88\u5a88\u5a88\u5a88\u5a88\u5a88\u5a88"
!     + "\u4586\u5a88\u5a88\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586"
!     + "\u4586\u4586\u4586\u5098\u5098\u5098\u5098\u5098\u5098\u5098\u039a"
!     + "\u5098\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u4504"
!     + "\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u4586\u5098\u5b09\u5b89"
!     + "\u5c09\u5c89\u5d09\u5d89\u5e09\u5e89\u5f09\u5f89\u5098\u5098\u3e00"
!     + "\u3e00\u3e00\u3e00\u3a05\u4f1c\u4f1c\u4f1c\u5098\u5098\u5098\u5098"
!     + "\u5098\u5098\u5098\u5098\u64b8\u5098\u5098\u5098\u5098\u5098\u5098"
!     + "\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4586\u4586\u4f1c\u4f1c\u4f1c\u4f1c"
!     + "\u4f1c\u4f1c\u4586\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u3e00\u3e00"
!     + "\u4f1c\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u289c\u289c\u289c\u289c\u289c"
!     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u3e00\u3e00\u3e00\u3e00"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3e00\u3e00\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u1a97\u4504\u4504\u4504\u3e00\u5b09\u5b89\u5c09\u5c89\u5d09"
!     + "\u5d89\u5e09\u5e89\u5f09\u5f89\u5098\u5098\u5098\u5098\u5098\u5098"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u5a88\u5a88\u4586\u4586\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u020c\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u6515"
!     + "\u6596\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u5098\u5098\u5098\u6a8b\u6b0b\u6b8b\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u4586\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81"
!     + "\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002\u2f81\u3002"
!     + "\u2f81\u3002\u2902\u2902\u2902\u2902\u2902\u6c02\u3e00\u3e00\u3e00"
!     + "\u3e00\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82\u6d01\u6d01"
!     + "\u6d01\u6d01\u6d01\u6d01\u6d01\u6d01\u6c82\u6c82\u6c82\u6c82\u6c82"
!     + "\u6c82\u6c82\u6c82\u6d01\u6d01\u6d01\u6d01\u6d01\u6d01\u6d01\u6d01"
!     + "\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82\u3e00\u3e00\u6d01\u6d01\u6d01"
!     + "\u6d01\u6d01\u6d01\u3e00\u3e00\u2902\u6c82\u2902\u6c82\u2902\u6c82"
!     + "\u2902\u6c82\u3e00\u6d01\u3e00\u6d01\u3e00\u6d01\u3e00\u6d01\u6c82"
!     + "\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82\u6d01\u6d01\u6d01\u6d01"
!     + "\u6d01\u6d01\u6d01\u6d01\u6d82\u6d82\u6e02\u6e02\u6e02\u6e02\u6e82"
!     + "\u6e82\u6f02\u6f02\u6f82\u6f82\u7002\u7002\u3e00\u3e00\u6c82\u6c82"
!     + "\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82\u7083\u7083\u7083\u7083\u7083"
!     + "\u7083\u7083\u7083\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82\u6c82"
!     + "\u7083\u7083\u7083\u7083\u7083\u7083\u7083\u7083\u6c82\u6c82\u2902"
!     + "\u7102\u2902\u3e00\u2902\u2902\u6d01\u6d01\u7181\u7181\u7203\u1a1b"
!     + "\u7282\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\u6515\u0c99\u6596\u0c99\u3e00"
!     + "\u6c82\u6c82\u2902\u2902\u2902\u7402\u2902\u2902\u6d01\u6d01\u7481"
!     + "\u7481\u7501\u1a1b\u1a1b\u1a1b\u3e00\u3e00\u2902\u7102\u2902\u3e00"
!     + "\u2902\u2902\u7581\u7581\u7601\u7601\u7203\u1a1b\u1a1b\u3e00\u020c"
!     + "\u020c\u020c\u020c\u020c\u020c\u020c\u76ac\u020c\u020c\u020c\u770c"
!     + "\u5a10\u5a10\u7790\u7810\u2a14\u78b4\u2a14\u2a14\u2a14\u2a14\u0298"
!     + "\u0298\u791d\u799e\u6515\u791d\u791d\u799e\u6515\u791d\u0298\u0298"
!     + "\u0298\u0298\u0298\u0298\u0298\u0298\u7a0d\u7a8e\u7b10\u7b90\u7c10"
!     + "\u7c90\u7d10\u76ac\u0318\u0318\u0318\u0318\u0318\u0298\u0298\u0298"
!     + "\u0298\u29dd\u2d5e\u0298\u0298\u0298\u0298\u1a97\u7d8b\u2c8b\u2b0b"
!     + "\u2b8b\u7e0b\u7e8b\u7f0b\u7f8b\u800b\u808b\u0519\u0519\u0c99\u0455"
!     + "\u04d6\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00"
!     + "\u3e00\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
!     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
!     + "\u4c01\u289c\u289c\u289c\u289c\u4c01\u289c\u289c\u2902\u4c01\u4c01"
!     + "\u4c01\u2902\u2902\u4c01\u4c01\u4c01\u2902\u289c\u4c01\u289c\u289c"
!     + "\u289c\u4c01\u4c01\u4c01\u4c01\u4c01\u289c\u289c\ua08a\ua10a\ua18a"
!     + "\ua20a\ua28a\ua30a\ua38a\ua40a\ua48a\u4586\u4586\u4586\u4586\u4586"
!     + "\u4586\u2a14\u4504\u4504\u4504\u4504\u4504\u289c\u289c\ua50a\ua58a"
!     + "\ua60a\u3e00\u3e00\u3e00\u289c\u289c\u289c\u289c\u3e00\u289c\u289c"
!     + "\u289c\u289c\u3e00\u3e00\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\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u930a\u938a\u940a\u948a\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u0c99\u0c99"
!     + "\u0c99\u0c99\u0c99\u289c\u289c\u289c\u289c\u289c\u0c99\u0c99\u289c"
!     + "\u289c\u289c\u289c\u4c01\u289c\u8101\u289c\u4c01\u289c\u8181\u8201"
!     + "\u4c01\u4c01\u2a9c\u2902\u4c01\u4c01\u289c\u4c01\u2902\u3a05\u3a05"
!     + "\u3a05\u3a05\u2902\u289c\u3e00\u3e00\u3e00\u3e00\u3e00\u830a\u838a"
!     + "\u840a\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\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\u3e00"
      + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
      + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
-     + "\u289c\u289c\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
-     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
-     + "\u3e00\u3e00\u3e00\u3e00\u3e00\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\u4f1c\u4f1c\u4f1c\u4f1c"
-     + "\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
-     + "\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u3e00\u3e00\u3e00"
-     + "\u3e00\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
-     + "\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
-     + "\u4f1c\u9a9c\u9a9c\u9a9c\u9a9c\u9a9c\u9a9c\u9a9c\u9a9c\u9a9c\u9a9c"
-     + "\u9a9c\u9a9c\u9a9c\u9a9c\u9a9c\u9a9c\u9b1c\u9b1c\u9b1c\u9b1c\u9b1c"
-     + "\u9b1c\u9b1c\u9b1c\u9b1c\u9b1c\u9b1c\u9b1c\u9b1c\u9b1c\u9b1c\u9b1c"
-     + "\u7d8b\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
-     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
-     + "\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\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
-     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u039a\u039a\u0c99\u1a1b\u289c"
-     + "\u039a\u039a\u3e00\u289c\u0c99\u0c99\u0c99\u0c99\u289c\u289c\u3e00"
-     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u5a10\u5a10"
-     + "\u5a10\u289c\u289c\u3e00\u3e00\u289c\u289c\u289c\u289c\u289c\u289c"
-     + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u3e00"
      + "\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
!     + "\u289c\u289c\u289c\u3e00\u289c\u3e00\u289c\u289c\u289c\u289c\u3e00"
!     + "\u3e00\u3e00\u289c\u3e00\u289c\u289c\u289c\u289c\u289c\u289c\u289c"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u828b\u9b8b\u9c0b\u9c8b\u9d0b\u9d8b\u9e0b\u9e8b"
!     + "\u9f0b\u9f8b\u828b\u9b8b\u9c0b\u9c8b\u9d0b\u9d8b\u9e0b\u9e8b\u9f0b"
!     + "\u9f8b\u289c\u3e00\u3e00\u3e00\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\u4f1c\u289c\u289c\u289c\u289c\u289c"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u620b\u620b\u620b\u620b\u620b\u620b"
!     + "\u620b\u620b\u620b\u620b\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
!     + "\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
!     + "\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
!     + "\u4f1c\u4f1c\u4f1c\u3e00\u3e00\u3e00\u4f1c\u600b\u608b\u610b\u618b"
!     + "\ua68b\ua70b\ua78b\ua80b\ua88b\u630b\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
!     + "\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
!     + "\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
!     + "\u289c\u3e00\u289c\u289c\u289c\u3e00\u289c\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u2c8b"
!     + "\u2b0b\u2b8b\u7e0b\u7e8b\u7f0b\u7f8b\u800b\u808b\u950b\u958b\u960b"
!     + "\u968b\u970b\u978b\u980b\u988b\u990b\u998b\u9a0b\u2c8b\u2b0b\u2b8b"
!     + "\u7e0b\u7e8b\u7f0b\u7f8b\u800b\u808b\u950b\u958b\u960b\u968b\u970b"
!     + "\u978b\u980b\u988b\u990b\u998b\u9a0b\u4f1c\u4f1c\u4f1c\u4f1c\u020c"
!     + "\u0298\u0298\u0298\u289c\u4504\u3a05\ua00a\u0455\u04d6\u0455\u04d6"
!     + "\u0455\u04d6\u0455\u04d6\u0455\u04d6\u289c\u289c\u0455\u04d6\u0455"
!     + "\u04d6\u0455\u04d6\u0455\u04d6\u2a14\u6515\u6596\u6596\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3e00\u3e00\u3e00"
!     + "\u3e00\u4586\u4586\u1a1b\u1a1b\u4504\u4504\u3e00\u3a05\u3a05\u3a05"
!     + "\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05\u3a05"
!     + "\u3a05\u3e00\u4f1c\u4f1c\u620b\u620b\u620b\u620b\u4f1c\u4f1c\u4f1c"
!     + "\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c\u4f1c"
!     + "\u4f1c\u4f1c\u4f1c\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\ua913\ua913"
!     + "\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua913"
!     + "\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua913"
!     + "\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua913\ua992\ua992\ua992"
!     + "\ua992\ua992\ua992\ua992\ua992\ua992\ua992\ua992\ua992\ua992\ua992"
!     + "\ua992\ua992\ua992\ua992\ua992\ua992\ua992\ua992\ua992\ua992\ua992"
!     + "\ua992\ua992\ua992\ua992\ua992\ua992\ua992\u5205\u5205\u5205\u5205"
!     + "\u5205\u5205\u5205\u5205\u5205\u0519\u5205\u5205\u5205\u5205\u5205"
!     + "\u5205\u5205\u5205\u5205\u5205\u5205\u5205\u5205\u3e00\u5205\u5205"
!     + "\u5205\u5205\u5205\u3e00\u5205\u3e00\u4586\u4586\u4586\u4586\u3e00"
!     + "\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00\u3e00"
!     + "\u0298\u2a14\u2a14\u1a97\u1a97\u6515\u6596\u6515\u6596\u6515\u6596"
!     + "\u6515\u6596\u6515\u6596\u6515\u6596\u3e00\u3e00\u3e00\u3e00\u0298"
!     + "\u0298\u0298\u0298\u1a97\u1a97\u1a97\u0598\u0298\u0598\u3e00\u0298"
!     + "\u0598\u0298\u0298\u2a14\u6515\u6596\u6515\u6596\u6515\u6596\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\u6515\u0298\u6596\u1a1b\u1a97";
  
    /**
     * This is the attribute table for computing the numeric value of a
--- 335,777 ----
      + "\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
*************** public interface CharData
*** 789,816 ****
      + "\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\000\004"
!     + "\005\006\007\010\011\uffff\uffff\uffff\001\001\002"
!     + "\003\004\005\006\007\010\011\012\013\0142"
!     + "d\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 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.
     */
    String UPPER
      = "\000\000\000\000\000\000\000\000\000\000\000"
--- 796,826 ----
      + "\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"
*************** public interface CharData
*** 821,849 ****
      + "\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\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\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\000J"
!     + "Vd\u0080p~\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
--- 831,860 ----
      + "\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
*************** public interface CharData
*** 852,936 ****
     * 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\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\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\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.  At present, the value is in the range 0 - 18 if the
!    * character has a direction, otherwise it is -1.  Note that this is
!    * stored as an unsigned char since this is a String literal.
     */
    String DIRECTION
!     = "\011\013\012\014\014\015\005\005\015\015\005"
!     + "\007\005\004\003\003\003\003\003\003\003\003"
!     + "\003\003\015\015\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\015\015\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\007\015\000\015\015\005\003\003"
!     + "\000\003\015\015\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\uffff\000\000\000\000\000\000\000"
!     + "\000\000\000\000\000\000\000\010\010\000\000"
!     + "\000\000\000\000\000\000\000\000\000\000\000"
!     + "\000\000\000\000\000\010\000\000\000\001\001"
!     + "\002\002\002\006\006\006\006\006\006\006\006"
!     + "\006\006\006\002\011\000\000\000\000\000\000"
!     + "\000\000\000\000\000\000\000\000\000\000\000"
!     + "\000\000\000\000\015\015\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\011\000\001\015"
!     + "\015\015\014\012\016\020\022\017\021\003\003"
!     + "\003\003\003\003\003\000\000\000\015\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\003\003\003\003\003\003\003\003\003\003"
!     + "\003\000\000\015\015\015\015\015\015\015\015"
!     + "\015\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 character
     * can use <code>UPPER</code> to determine their titlecase).  The listing
!    * is a 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";
  }
--- 863,1001 ----
     * 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-3.4.3/libjava/gnu/java/lang/ClassHelper.java gcc-4.0.0/libjava/gnu/java/lang/ClassHelper.java
*** gcc-3.4.3/libjava/gnu/java/lang/ClassHelper.java	Tue Jun 17 12:01:37 2003
--- gcc-4.0.0/libjava/gnu/java/lang/ClassHelper.java	Thu Jul 29 08:59:39 2004
*************** exception statement from your version. *
*** 38,45 ****
  
  package gnu.java.lang;
  
! import java.util.*;
! import java.lang.reflect.*;
  
  /**
   * ClassHelper has various methods that ought to have been in Class.
--- 38,51 ----
  
  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.
*************** public class ClassHelper
*** 75,94 ****
      return name.substring(lastInd + 1);
    }
  
-   /**
-    * 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
-    */
-   public static String getPackagePortion(String name)
-   {
-     int lastInd = name.lastIndexOf('.');
-     if (lastInd == -1)
-       return "";
-     return name.substring(0, lastInd);
-   }
- 
    /** Cache of methods found in getAllMethods(). */
    private static Map allMethods = new HashMap();
  
--- 81,86 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/lang/MainThread.java gcc-4.0.0/libjava/gnu/java/lang/MainThread.java
*** gcc-3.4.3/libjava/gnu/java/lang/MainThread.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/lang/MainThread.java	Wed Mar 16 23:54:21 2005
***************
*** 0 ****
--- 1,132 ----
+ /* gnu.java.lang.MainThread
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.util.jar.Attributes;
+ import java.util.jar.JarFile;
+ 
+ /**
+  * MainThread is a Thread which uses the main() method of some class.
+  *
+  * @author John Keiser
+  * @author Tom Tromey (tromey@redhat.com)
+  */
+ final class MainThread extends Thread
+ {
+   // If the user links statically then we need to ensure that these
+   // classes are linked in.  Otherwise bootstrapping fails.  These
+   // classes are only referred to via Class.forName(), so we add an
+   // explicit mention of them here.
+   static final Class Kcert     = java.security.cert.Certificate.class;
+   static final Class Kfile     = gnu.java.net.protocol.file.Handler.class;
+   static final Class Khttp     = gnu.java.net.protocol.http.Handler.class;
+   static final Class Kjar      = gnu.java.net.protocol.jar.Handler.class;
+   static final Class Klocale   = gnu.java.locale.LocaleInformation.class;
+   static final Class Kcalendar = gnu.java.locale.Calendar.class;
+ 
+   // Private data.
+   private Class klass;
+   private String klass_name;
+   private String[] args;
+   private boolean is_jar;
+ 
+   public MainThread(Class k, String[] args)
+   {
+     super(null, null, "main");
+     klass = k;
+     this.args = args;
+   }
+ 
+   public MainThread(String classname, String[] args, boolean is_jar)
+   {
+     super (null, null, "main");
+     klass_name = classname;
+     this.args = args;
+     this.is_jar = is_jar;
+   }
+ 
+   public void run()
+   {
+     if (is_jar)
+       klass_name = getMain(klass_name);
+ 
+     if (klass == null)
+       {
+         try
+ 	  {
+ 	    klass = Class.forName(klass_name, true,
+ 				  ClassLoader.getSystemClassLoader());
+ 	  }
+ 	catch (ClassNotFoundException x)
+ 	  {
+ 	    NoClassDefFoundError ncdfe = new NoClassDefFoundError(klass_name);
+ 	    ncdfe.initCause(x);
+ 	    throw ncdfe;
+ 	  }
+       }
+ 
+     call_main();
+   }
+ 
+   private String getMain(String name)
+   {
+     String mainName = null;
+     try
+       {
+ 	JarFile j = new JarFile(name);
+ 	Attributes a = j.getManifest().getMainAttributes();
+ 	mainName = a.getValue(Attributes.Name.MAIN_CLASS);
+       }
+     catch (Exception e)
+       {
+ 	// Ignore.
+       }
+ 
+     if (mainName == null)
+       {
+ 	System.err.println("Failed to load Main-Class manifest attribute from "
+ 			   + name);
+ 	System.exit(1);
+       }
+     return mainName;
+   }
+ 
+   private native void call_main();
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/lang/natMainThread.cc gcc-4.0.0/libjava/gnu/java/lang/natMainThread.cc
*** gcc-3.4.3/libjava/gnu/java/lang/natMainThread.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/lang/natMainThread.cc	Sun Jul  4 15:27:05 2004
***************
*** 0 ****
--- 1,48 ----
+ // natMainThread.cc - Implementation of MainThread native methods.
+ 
+ /* Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #include <config.h>
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ 
+ #include <gcj/cni.h>
+ #include <jvm.h>
+ 
+ #include <gnu/java/lang/MainThread.h>
+ 
+ typedef void main_func (jobject);
+ 
+ void
+ gnu::java::lang::MainThread::call_main (void)
+ {
+   Utf8Const* main_signature = _Jv_makeUtf8Const ("([Ljava.lang.String;)V", 22);
+   Utf8Const* main_name = _Jv_makeUtf8Const ("main", 4);
+ 
+   _Jv_Method *meth = _Jv_LookupDeclaredMethod (klass, main_name,
+ 					       main_signature);
+ 
+   // Some checks from Java Spec section 12.1.4.
+   const char *msg = NULL;
+   if (meth == NULL)
+     msg = "no suitable method `main' in class";
+   else if (! ::java::lang::reflect::Modifier::isStatic(meth->accflags))
+     msg = "`main' must be static";
+   else if (! ::java::lang::reflect::Modifier::isPublic(meth->accflags))
+     msg =  "`main' must be public";
+   if (msg != NULL)
+     {
+       fprintf (stderr, "%s\n", msg);
+       ::exit(1);
+     }
+ 
+   main_func *real_main = (main_func *) meth->ncode;
+   (*real_main) (args);
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/locale/Calendar.java gcc-4.0.0/libjava/gnu/java/locale/Calendar.java
*** gcc-3.4.3/libjava/gnu/java/locale/Calendar.java	Tue Jan 22 22:39:56 2002
--- gcc-4.0.0/libjava/gnu/java/locale/Calendar.java	Thu Jul 29 08:59:39 2004
*************** exception statement from your version. *
*** 38,46 ****
  
  package gnu.java.locale;
  
  import java.util.ListResourceBundle;
  import java.util.Locale;
- import java.util.Date;
  
  /**
   * This class contains locale data for java.util.Calendar.<br>
--- 38,46 ----
  
  package gnu.java.locale;
  
+ import java.util.Date;
  import java.util.ListResourceBundle;
  import java.util.Locale;
  
  /**
   * This class contains locale data for java.util.Calendar.<br>
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/locale/Calendar_de.java gcc-4.0.0/libjava/gnu/java/locale/Calendar_de.java
*** gcc-3.4.3/libjava/gnu/java/locale/Calendar_de.java	Tue Jan 22 22:39:56 2002
--- gcc-4.0.0/libjava/gnu/java/locale/Calendar_de.java	Thu Jul 29 08:59:39 2004
*************** exception statement from your version. *
*** 38,45 ****
  
  package gnu.java.locale;
  
- import java.util.ListResourceBundle;
  import java.util.Calendar;
  
  /**
   * This class contains locale data for java.util.Calendar specific for 
--- 38,45 ----
  
  package gnu.java.locale;
  
  import java.util.Calendar;
+ import java.util.ListResourceBundle;
  
  /**
   * This class contains locale data for java.util.Calendar specific for 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/locale/Calendar_en.java gcc-4.0.0/libjava/gnu/java/locale/Calendar_en.java
*** gcc-3.4.3/libjava/gnu/java/locale/Calendar_en.java	Tue Jan 22 22:39:56 2002
--- gcc-4.0.0/libjava/gnu/java/locale/Calendar_en.java	Thu Jul 29 08:59:39 2004
*************** exception statement from your version. *
*** 39,45 ****
  package gnu.java.locale;
  
  import java.util.ListResourceBundle;
- import java.util.Calendar;
  
  /**
   * This class contains locale data for java.util.Calendar specific for 
--- 39,44 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/locale/Calendar_nl.java gcc-4.0.0/libjava/gnu/java/locale/Calendar_nl.java
*** gcc-3.4.3/libjava/gnu/java/locale/Calendar_nl.java	Tue Jan 22 22:39:56 2002
--- gcc-4.0.0/libjava/gnu/java/locale/Calendar_nl.java	Thu Jul 29 08:59:39 2004
*************** exception statement from your version. *
*** 38,45 ****
  
  package gnu.java.locale;
  
- import java.util.ListResourceBundle;
  import java.util.Calendar;
  
  /**
   * This class contains locale data for java.util.Calendar specific for 
--- 38,45 ----
  
  package gnu.java.locale;
  
  import java.util.Calendar;
+ import java.util.ListResourceBundle;
  
  /**
   * This class contains locale data for java.util.Calendar specific for 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/locale/LocaleInformation_de.java gcc-4.0.0/libjava/gnu/java/locale/LocaleInformation_de.java
*** gcc-3.4.3/libjava/gnu/java/locale/LocaleInformation_de.java	Sun Jul 13 15:00:20 2003
--- gcc-4.0.0/libjava/gnu/java/locale/LocaleInformation_de.java	Thu Jul 29 08:59:39 2004
*************** exception statement from your version. *
*** 39,45 ****
  package gnu.java.locale;
  
  import java.util.ListResourceBundle;
- import java.util.Calendar;
  
  /**
    * This class contains locale data for the German locale
--- 39,44 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/locale/LocaleInformation_en.java gcc-4.0.0/libjava/gnu/java/locale/LocaleInformation_en.java
*** gcc-3.4.3/libjava/gnu/java/locale/LocaleInformation_en.java	Sun Jul 13 15:00:20 2003
--- gcc-4.0.0/libjava/gnu/java/locale/LocaleInformation_en.java	Tue Feb 22 00:58:35 2005
*************** exception statement from your version. *
*** 39,46 ****
  package gnu.java.locale;
  
  import java.util.ListResourceBundle;
- import java.util.Calendar;
- import java.util.Date;
  
  /**
   * This class contains locale data for English.
--- 39,44 ----
*************** public class LocaleInformation_en extend
*** 161,167 ****
      { "shortWeekdays", shortWeekdays },
      { "ampms", ampms },
      { "eras", eras },
!     { "localPatternChars", "GyMdkHmsSEDFwWahKz" },
      { "zoneStrings", zoneStrings },
  
      { "shortDateFormat", "M/d/yy" },         // Java's Y2K bug.
--- 159,165 ----
      { "shortWeekdays", shortWeekdays },
      { "ampms", ampms },
      { "eras", eras },
!     { "localPatternChars", "GyMdkHmsSEDFwWahKzYeugAZ" },
      { "zoneStrings", zoneStrings },
  
      { "shortDateFormat", "M/d/yy" },         // Java's Y2K bug.
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/locale/LocaleInformation_nl.java gcc-4.0.0/libjava/gnu/java/locale/LocaleInformation_nl.java
*** gcc-3.4.3/libjava/gnu/java/locale/LocaleInformation_nl.java	Sun Jul 13 15:00:20 2003
--- gcc-4.0.0/libjava/gnu/java/locale/LocaleInformation_nl.java	Thu Jul 29 08:59:39 2004
*************** exception statement from your version. *
*** 39,46 ****
  package gnu.java.locale;
  
  import java.util.ListResourceBundle;
- import java.util.Calendar;
- import java.util.Date;
  
  /**
    * This class contains locale data for the Dutch locale
--- 39,44 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/math/MPN.java gcc-4.0.0/libjava/gnu/java/math/MPN.java
*** gcc-3.4.3/libjava/gnu/java/math/MPN.java	Tue Jan 22 22:39:57 2002
--- gcc-4.0.0/libjava/gnu/java/math/MPN.java	Sun May 30 13:31:32 2004
***************
*** 1,5 ****
  /* gnu.java.math.MPN
!    Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gnu.java.math.MPN
!    Copyright (C) 1999, 2000, 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public class MPN
*** 482,488 ****
    }
  
    /** Compare x[0:size-1] with y[0:size-1], treating them as unsigned integers.
!    * @result -1, 0, or 1 depending on if x<y, x==y, or x>y.
     * This is basically the same as gmp's mpn_cmp function.
     */
    public static int cmp (int[] x, int[] y, int size)
--- 482,488 ----
    }
  
    /** 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)
*************** public class MPN
*** 502,523 ****
      return 0;
    }
  
!   /** Compare x[0:xlen-1] with y[0:ylen-1], treating them as unsigned integers.
!    * @result -1, 0, or 1 depending on if x<y, x==y, or x>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 < count < 32
     */
- 
    public static int rshift (int[] dest, int[] x, int x_start,
  			    int len, int count)
    {
--- 502,525 ----
      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)
    {
*************** public class MPN
*** 535,545 ****
      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 <= count < 32
     * Same as rshift, but handles count==0 (and has no return value).
     */
    public static void rshift0 (int[] dest, int[] x, int x_start,
--- 537,548 ----
      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,
*************** public class MPN
*** 556,562 ****
    * @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] >> count).
    */
    public static long rshift_long (int[] x, int len, int count)
    {
--- 559,565 ----
    * @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)
    {
*************** public class MPN
*** 579,585 ****
    /* 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 < count < 32.
     * OK if dest==x.
     */
  
--- 582,588 ----
    /* 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 class MPN
*** 601,607 ****
      return retval;
    }
  
!   /** Return least i such that word&(1<<i). Assumes word!=0. */
  
    public static int findLowestBit (int word)
    {
--- 604,610 ----
      return retval;
    }
  
!   /** Return least i such that word &amp; (1&lt;&lt;i). Assumes word!=0. */
  
    public static int findLowestBit (int word)
    {
*************** public class MPN
*** 621,627 ****
      return i;
    }
  
!   /** Return least i such that words & (1<<i). Assumes there is such an i. */
  
    public static int findLowestBit (int[] words)
    {
--- 624,630 ----
      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)
    {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/BASE64.java gcc-4.0.0/libjava/gnu/java/net/BASE64.java
*** gcc-3.4.3/libjava/gnu/java/net/BASE64.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/BASE64.java	Tue Jan 11 20:19:53 2005
***************
*** 0 ****
--- 1,184 ----
+ /* BASE.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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];
+           }
+       }
+     /*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-3.4.3/libjava/gnu/java/net/CRLFInputStream.java gcc-4.0.0/libjava/gnu/java/net/CRLFInputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/CRLFInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/CRLFInputStream.java	Sat Feb 19 08:53:53 2005
***************
*** 0 ****
--- 1,205 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.FilterInputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ 
+ /**
+  * 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;
+ 
+   /**
+    * Buffer.
+    */
+   protected int buf = -1;
+ 
+   /**
+    * Buffer at time of mark.
+    */
+   protected int markBuf = -1;
+ 
+   /**
+    * Constructs a CR/LF input stream connected to the specified input
+    * stream.
+    */
+   public CRLFInputStream(InputStream in)
+   {
+     super(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;
+     if (buf != -1)
+       {
+         c = buf;
+         buf = -1;
+         return c;
+       }
+     else
+       {
+         c = super.read();
+         if (c == CR)
+           {
+             buf = super.read();
+             if (buf == LF)
+               {
+                 c = buf;
+                 buf = -1;
+               }
+           }
+       }
+     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
+   {
+     int shift = 0;
+     if (buf != -1)
+       {
+         // Push buf onto start of byte array
+         b[off] = (byte) buf;
+         off++;
+         len--;
+         buf = -1;
+         shift++;
+       }
+     int l = super.read(b, off, len);
+     l = removeCRLF(b, off - shift, l);
+     return l;
+   }
+ 
+   /**
+    * Indicates whether this stream supports the mark and reset methods.
+    */
+   public boolean markSupported()
+   {
+     return in.markSupported();
+   }
+ 
+   /**
+    * Marks the current position in this stream.
+    */
+   public void mark(int readlimit)
+   {
+     in.mark(readlimit);
+     markBuf = buf;
+   }
+ 
+   /**
+    * Repositions this stream to the position at the time the mark method was
+    * called.
+    */
+   public void reset()
+     throws IOException
+   {
+     in.reset();
+     buf = markBuf;
+   }
+ 
+   private int removeCRLF(byte[] b, int off, int len)
+   {
+     int end = off + len;
+     for (int i = off; i < end; i++)
+       {
+         if (b[i] == CR)
+           {
+             if (i + 1 == end)
+               {
+                 // This is the last byte, impossible to determine whether CRLF
+                 buf = CR;
+                 len--;
+               }
+             else if (b[i + 1] == LF)
+               {
+                 // Shift left
+                 end--;
+                 for (int j = i; j < end; j++)
+                   {
+                     b[j] = b[j + 1];
+                   }
+                   len--;
+                   end = off + len;
+               }
+           }
+       }
+     return len;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/CRLFOutputStream.java gcc-4.0.0/libjava/gnu/java/net/CRLFOutputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/CRLFOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/CRLFOutputStream.java	Sat Feb 19 08:53:53 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/DefaultContentHandlerFactory.java gcc-4.0.0/libjava/gnu/java/net/DefaultContentHandlerFactory.java
*** gcc-3.4.3/libjava/gnu/java/net/DefaultContentHandlerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/DefaultContentHandlerFactory.java	Fri Jul 23 14:25:41 2004
***************
*** 0 ****
--- 1,95 ----
+ /* DefaultContentHandlerFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.awt.Toolkit;
+ import java.io.IOException;
+ import java.net.ContentHandler;
+ import java.net.ContentHandlerFactory;
+ import java.net.URLConnection;
+ import java.util.Arrays;
+ import java.util.HashSet;
+ 
+ import gnu.java.awt.ClasspathToolkit;
+ 
+ /** Content Handler for Image types, using the AWT Toolkit's image decoder. */
+ class ImageHandler extends ContentHandler
+ {
+   static ImageHandler instance = new ImageHandler();
+   
+   public Object getContent(URLConnection urlc) throws IOException
+   {
+     ClasspathToolkit tk = (ClasspathToolkit) Toolkit.getDefaultToolkit();
+     java.awt.image.ImageProducer ip = tk.createImageProducer(urlc.getURL());
+     return ip;
+   }
+ }
+ 
+ /**
+  */
+ public class DefaultContentHandlerFactory implements ContentHandlerFactory
+ {
+   /** For now, hard code the list of types that we assume should
+    *  be supported by the Toolkit. ClasspathToolkit should perhaps provide
+    *  an API to express what Image MIME types the Toolkit understands.
+    */
+   private static String[] known_image_types =
+     {
+       "image/bmp",
+       "image/gif",
+       "image/jpeg",
+       "image/png",
+       "image/tiff",
+       "image/x-portable-anymap",
+       "image/x-cmu-raster",
+       "image/x-xbitmap",
+       "image/x-xpixmap"
+     };
+    
+   private static HashSet imageTypes
+     = new HashSet(Arrays.asList(known_image_types));
+ 
+   public ContentHandler createContentHandler(String mimeType)
+   {
+     if (imageTypes.contains(mimeType))
+       return ImageHandler.instance;
+     // Currently, only image types are handled.
+     return null;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/EmptyX509TrustManager.java gcc-4.0.0/libjava/gnu/java/net/EmptyX509TrustManager.java
*** gcc-3.4.3/libjava/gnu/java/net/EmptyX509TrustManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/EmptyX509TrustManager.java	Tue Jan 11 20:19:54 2005
***************
*** 0 ****
--- 1,69 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/GetLocalHostAction.java gcc-4.0.0/libjava/gnu/java/net/GetLocalHostAction.java
*** gcc-3.4.3/libjava/gnu/java/net/GetLocalHostAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/GetLocalHostAction.java	Sat Feb 19 08:53:53 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/LineInputStream.java gcc-4.0.0/libjava/gnu/java/net/LineInputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/LineInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/LineInputStream.java	Tue Jan 11 20:19:54 2005
***************
*** 0 ****
--- 1,198 ----
+ /* LineInputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.ByteArrayOutputStream;
+ import java.io.FilterInputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ 
+ /**
+  * 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;
+     blockReads = 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 MIN_LENGTH = 1024;
+             int len, pos;
+             
+             len = in.available();
+             len = (len < MIN_LENGTH) ? MIN_LENGTH : len;
+             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-3.4.3/libjava/gnu/java/net/PlainDatagramSocketImpl.java gcc-4.0.0/libjava/gnu/java/net/PlainDatagramSocketImpl.java
*** gcc-3.4.3/libjava/gnu/java/net/PlainDatagramSocketImpl.java	Sat Dec 20 23:04:44 2003
--- gcc-4.0.0/libjava/gnu/java/net/PlainDatagramSocketImpl.java	Mon Oct 18 10:14:23 2004
***************
*** 1,5 ****
  /* PlainDatagramSocketImpl.java -- Default DatagramSocket implementation
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PlainDatagramSocketImpl.java -- Default DatagramSocket implementation
!    Copyright (C) 1998, 1999, 2001, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 38,45 ----
  
  package gnu.java.net;
  
+ import gnu.classpath.Configuration;
+ 
  import java.io.IOException;
  import java.net.DatagramPacket;
  import java.net.DatagramSocketImpl;
*************** import java.net.NetworkInterface;
*** 47,53 ****
  import java.net.SocketAddress;
  import java.net.SocketException;
  import java.net.SocketOptions;
- import gnu.classpath.Configuration;
  
  /**
   * Written using on-line Java Platform 1.2 API Specification, as well
--- 49,54 ----
*************** import gnu.classpath.Configuration;
*** 60,67 ****
   * 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
  {
--- 61,68 ----
   * 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
  {
*************** public final class PlainDatagramSocketIm
*** 95,100 ****
--- 96,111 ----
     * 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();
  
    // FIXME: Is this necessary?  Could it help w/ DatagramSocket.getLocalAddress?
    // InetAddress address;
*************** public final class PlainDatagramSocketIm
*** 135,147 ****
     *
     * @exception SocketException If an error occurs
     */
!   protected native void bind(int lport, InetAddress laddr)
! 	throws SocketException;
  
!   protected native void connect (InetAddress i, int port)
! 	throws SocketException;
    
!   protected native void disconnect ();
    
    /**
     * Creates a new datagram socket
--- 146,158 ----
     *
     * @exception SocketException If an error occurs
     */
!   protected native void bind(int port, InetAddress addr)
!     throws SocketException;
  
!   protected native void connect(InetAddress addr, int port)
!     throws SocketException;
    
!   protected native void disconnect();
    
    /**
     * Creates a new datagram socket
*************** public final class PlainDatagramSocketIm
*** 150,158 ****
     */
    protected native void create() throws SocketException;
    
!   protected native int peek(InetAddress i) throws IOException;
    
!   protected native int peekData (DatagramPacket dp) throws IOException;
  
    /**
     * Sets the Time to Live value for the socket
--- 161,169 ----
     */
    protected native void create() throws SocketException;
    
!   protected native int peek(InetAddress addr) throws IOException;
    
!   protected native int peekData(DatagramPacket packet) throws IOException;
  
    /**
     * Sets the Time to Live value for the socket
*************** public final class PlainDatagramSocketIm
*** 179,185 ****
     *
     * @exception IOException If an error occurs
     */
!   protected native void send(DatagramPacket p) throws IOException;
  
    /**
     * Receives a UDP packet from the network
--- 190,196 ----
     *
     * @exception IOException If an error occurs
     */
!   protected native void send(DatagramPacket packet) throws IOException;
  
    /**
     * Receives a UDP packet from the network
*************** public final class PlainDatagramSocketIm
*** 188,194 ****
     *
     * @exception IOException IOException If an error occurs
     */
!   protected native void receive(DatagramPacket p) throws IOException;
  
    /**
     * Sets the value of an option on the socket
--- 199,205 ----
     *
     * @exception IOException IOException If an error occurs
     */
!   protected native void receive(DatagramPacket packet) throws IOException;
  
    /**
     * Sets the value of an option on the socket
*************** public final class PlainDatagramSocketIm
*** 198,204 ****
     *
     * @exception SocketException If an error occurs
     */
!   public native void setOption(int optID, Object value) throws SocketException;
  
    /**
     * Retrieves the value of an option on the socket
--- 209,216 ----
     *
     * @exception SocketException If an error occurs
     */
!   public native void setOption(int option_id, Object val)
!     throws SocketException;
  
    /**
     * Retrieves the value of an option on the socket
*************** public final class PlainDatagramSocketIm
*** 209,216 ****
     *
     * @exception SocketException If an error occurs
     */
!   public native Object getOption(int optID) throws SocketException;
!   
    /**
     * Joins or leaves a broadcasting group on a given network interface.
     * If the network interface is <code>null</code> the group is join/left on
--- 221,229 ----
     *
     * @exception SocketException If an error occurs
     */
!   public native Object getOption(int option_id)
!     throws SocketException;
! 
    /**
     * Joins or leaves a broadcasting group on a given network interface.
     * If the network interface is <code>null</code> the group is join/left on
*************** public final class PlainDatagramSocketIm
*** 222,229 ****
     *
     * @exception IOException If an error occurs.
     */
!   private native void mcastGrp(InetAddress inetAddr,
! 		  	       NetworkInterface netIf,
  		               boolean join)
      throws IOException;
  
--- 235,241 ----
     *
     * @exception IOException If an error occurs.
     */
!   private native void mcastGrp(InetAddress inetAddr, NetworkInterface netIf,
  		               boolean join)
      throws IOException;
  
*************** public final class PlainDatagramSocketIm
*** 267,275 ****
     *
     * @exception IOException If an error occurs
     */
!   protected void join(InetAddress inetaddr) throws IOException
    {
!     mcastGrp(inetaddr, null, true);
    }
  
    /**
--- 279,287 ----
     *
     * @exception IOException If an error occurs
     */
!   protected void join(InetAddress addr) throws IOException
    {
!     mcastGrp(addr, null, true);
    }
  
    /**
*************** public final class PlainDatagramSocketIm
*** 279,298 ****
     *
     * @exception IOException If an error occurs
     */
!   protected void leave(InetAddress inetaddr) throws IOException
    {
!     mcastGrp(inetaddr, null, false);
    }
  
!   protected void joinGroup (SocketAddress mcastaddr, NetworkInterface netIf)
! 	  throws IOException
    {
!     mcastGrp(((InetSocketAddress)mcastaddr).getAddress(), netIf, true);
    }
  
!   protected void leaveGroup (SocketAddress mcastaddr, NetworkInterface netIf)
! 	  throws IOException
    {
!     mcastGrp(((InetSocketAddress)mcastaddr).getAddress(), netIf, false);
    }
  }
--- 291,310 ----
     *
     * @exception IOException If an error occurs
     */
!   protected void leave(InetAddress addr) throws IOException
    {
!     mcastGrp(addr, null, false);
    }
  
!   protected void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
!     throws IOException
    {
!     mcastGrp(((InetSocketAddress) mcastaddr).getAddress(), netIf, true);
    }
  
!   protected void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
!     throws IOException
    {
!     mcastGrp(((InetSocketAddress) mcastaddr).getAddress(), netIf, false);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/PlainSocketImpl.java gcc-4.0.0/libjava/gnu/java/net/PlainSocketImpl.java
*** gcc-3.4.3/libjava/gnu/java/net/PlainSocketImpl.java	Tue Feb  3 14:50:58 2004
--- gcc-4.0.0/libjava/gnu/java/net/PlainSocketImpl.java	Thu Feb 17 18:59:55 2005
***************
*** 1,5 ****
  /* PlainSocketImpl.java -- Default socket implementation
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,5 ----
  /* 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.
*************** public final class PlainSocketImpl exten
*** 200,208 ****
     */
    public native Object getOption(int optID) throws SocketException;
  
!   public native void shutdownInput () throws IOException;
  
!   public native void shutdownOutput () throws IOException;
  
    /**
     * Creates a new socket that is not bound to any local address/port and
--- 200,220 ----
     */
    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
*************** public final class PlainSocketImpl exten
*** 212,218 ****
     *
     * @param stream true for a stream socket, false for a datagram socket
     */
!   protected native void create (boolean stream)  throws IOException;
  
    /**
     * Connects to the remote hostname and port specified as arguments.
--- 224,230 ----
     *
     * @param stream true for a stream socket, false for a datagram socket
     */
!   protected native void create(boolean stream) throws IOException;
  
    /**
     * Connects to the remote hostname and port specified as arguments.
*************** public final class PlainSocketImpl exten
*** 222,230 ****
     *
     * @exception IOException If an error occurs
     */
!   protected void connect (String host, int port) throws IOException
    {
!     connect (new InetSocketAddress (InetAddress.getByName(host), port), 0);
    }
  
    /**
--- 234,242 ----
     *
     * @exception IOException If an error occurs
     */
!   protected void connect(String host, int port) throws IOException
    {
!     connect(InetAddress.getByName(host), port);
    }
  
    /**
*************** public final class PlainSocketImpl exten
*** 235,247 ****
     *
     * @exception IOException If an error occurs
     */
!   protected void connect (InetAddress host, int port) throws IOException
    {
      connect (new InetSocketAddress (host, port), 0);
    }
  
!   protected native void connect (SocketAddress addr, int timeout)
!     throws IOException;
  
    /**
     * Binds to the specified port on the specified addr.  Note that this addr
--- 247,265 ----
     *
     * @exception IOException If an error occurs
     */
!   protected void connect(InetAddress host, int port) throws IOException
    {
      connect (new InetSocketAddress (host, port), 0);
    }
  
!   /**
!    * 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 native void connect(SocketAddress addr, int timeout) throws IOException;
  
    /**
     * Binds to the specified port on the specified addr.  Note that this addr
*************** public final class PlainSocketImpl exten
*** 252,258 ****
     *
     * @exception IOException If an error occurs
     */
!   protected native void bind (InetAddress host, int port) throws IOException;
  
    /**
     * Starts listening for connections on a socket. The queuelen parameter
--- 270,277 ----
     *
     * @exception IOException If an error occurs
     */
!   protected native void bind(InetAddress host, int port)
!     throws IOException;
  
    /**
     * Starts listening for connections on a socket. The queuelen parameter
*************** public final class PlainSocketImpl exten
*** 264,272 ****
     * 
     * @exception IOException If an error occurs
     */
!   protected native void listen (int backlog) throws IOException;
! 
!   private native void accept (PlainSocketImpl s) throws IOException;
  
    /**
     * Accepts a new connection on this socket and returns in in the 
--- 283,290 ----
     * 
     * @exception IOException If an error occurs
     */
!   protected native void listen(int queuelen)
!     throws IOException;
  
    /**
     * Accepts a new connection on this socket and returns in in the 
*************** public final class PlainSocketImpl exten
*** 274,284 ****
     *
     * @param impl The SocketImpl object to accept this connection.
     */
!   protected void accept (SocketImpl s) throws IOException
    {
!     accept((PlainSocketImpl) s);
    }
  
    /**
     * Returns the number of bytes that the caller can read from this socket
     * without blocking. 
--- 292,306 ----
     *
     * @param impl The SocketImpl object to accept this connection.
     */
!   protected void accept(SocketImpl impl)
!     throws IOException
    {
!     accept((PlainSocketImpl) impl);
    }
  
+   private native void accept(PlainSocketImpl impl)
+     throws IOException;
+ 
    /**
     * Returns the number of bytes that the caller can read from this socket
     * without blocking. 
*************** public final class PlainSocketImpl exten
*** 298,307 ****
     *
     * @exception IOException If an error occurs
     */
!   protected native void close () throws IOException;
  
!   protected native void sendUrgentData(int data)
!     throws IOException;
  
    /**
     * Returns an InputStream object for reading from this socket.  This will
--- 320,328 ----
     *
     * @exception IOException If an error occurs
     */
!   protected native void close() throws IOException;
  
!   protected native void sendUrgentData(int data) throws IOException;
  
    /**
     * Returns an InputStream object for reading from this socket.  This will
*************** public final class PlainSocketImpl exten
*** 336,379 ****
    }
  
    /**
!    * A stream which reads from the socket implementation.
     *
     * @author Nic Ferrier <nferrier@tapsellferrier.co.uk>
     */
    final class SocketInputStream
      extends InputStream
    {
!     public native int read() throws IOException;
! 
!     public native int read(byte[] buffer, int offset, int length)
!       throws IOException;
! 
!     public final void close() throws IOException
      {
!       PlainSocketImpl.this.close();
      }
  
!     public final int available() throws IOException
      {
!       return PlainSocketImpl.this.available();
      }
    }
  
!   /** A stream which writes to the socket implementation.
     *
     * @author Nic Ferrier  <nferrier@tapsellferrier.co.uk>
     */
    final class SocketOutputStream
      extends OutputStream
    {
!     public native void write(int c) throws IOException;
! 
!     public native void write(byte[] buffer, int offset, int length)
!       throws IOException;
! 
      public void close() throws IOException
      {
        PlainSocketImpl.this.close();
      }
    }
  }
--- 357,454 ----
    }
  
    /**
!    * 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 native int read() throws IOException;
+ 
+     /**
+      * 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 native int read(byte[] buf, int offset, int len) throws IOException;
    }
  
!   /**
!    * 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 native void write(int b) throws IOException;
+ 
+     /**
+      * 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 native void write(byte[] buf, int offset, int len) throws IOException;
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc gcc-4.0.0/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc
*** gcc-3.4.3/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc	Tue Dec 16 22:47:53 2003
--- gcc-4.0.0/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc	Tue Feb  1 19:22:47 2005
*************** gnu::java::net::PlainDatagramSocketImpl:
*** 286,291 ****
--- 286,293 ----
  void
  gnu::java::net::PlainDatagramSocketImpl::send (::java::net::DatagramPacket *p)
  {
+   JvSynchronize lock (SEND_LOCK);
+   
    // FIXME: Deal with Multicast and if the socket is connected.
    jint rport = p->getPort();
    union SockAddr u;
*************** gnu::java::net::PlainDatagramSocketImpl:
*** 327,332 ****
--- 329,336 ----
  void
  gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p)
  {
+   JvSynchronize lock (RECEIVE_LOCK);
+ 
    // FIXME: Deal with Multicast and if the socket is connected.
    union SockAddr u;
    socklen_t addrlen = sizeof(u);
*************** gnu::java::net::PlainDatagramSocketImpl:
*** 598,606 ****
          return;
  	
        case _Jv_IP_MULTICAST_LOOP_ :
!         throw new ::java::net::SocketException (
!           JvNewStringUTF ("IP_MULTICAST_LOOP: not yet implemented"));
!         return;
  	
        case _Jv_IP_TOS_ :
          if (::setsockopt (native_fd, SOL_SOCKET, IP_TOS, (char *) &val,
--- 602,628 ----
          return;
  	
        case _Jv_IP_MULTICAST_LOOP_ :
! 	haddress = ((::java::net::InetAddress *) value)->addr;
! 	len = haddress->length;
! 	if (len == 4)
! 	  {
! 	    level = IPPROTO_IP;
! 	    opname = IP_MULTICAST_LOOP;
! 	  }
! #if defined (HAVE_INET6) && defined (IPV6_MULTICAST_LOOP)
! 	else if (len == 16)
! 	  {
! 	    level = IPPROTO_IPV6;
! 	    opname = IPV6_MULTICAST_LOOP;
! 	  }
! #endif
! 	else
! 	  throw
! 	    new ::java::net::SocketException (JvNewStringUTF ("invalid address length"));
! 	if (::setsockopt (native_fd, level, opname, (char *) &val,
! 			  val_len) != 0)
! 	  goto error;
! 	return;
  	
        case _Jv_IP_TOS_ :
          if (::setsockopt (native_fd, SOL_SOCKET, IP_TOS, (char *) &val,
*************** gnu::java::net::PlainDatagramSocketImpl:
*** 627,632 ****
--- 649,655 ----
    socklen_t val_len = sizeof(val);
    union SockAddr u;
    socklen_t addrlen = sizeof(u);
+   int level, opname;
  
    switch (optID)
      {
*************** gnu::java::net::PlainDatagramSocketImpl:
*** 734,741 ****
          break;
  	
        case _Jv_IP_MULTICAST_LOOP_ :
! 	if (::getsockopt (native_fd, SOL_SOCKET, IP_MULTICAST_LOOP, (char *) &val,
! 	    &val_len) != 0)
  	  goto error;
  	return new ::java::lang::Boolean (val != 0);
  	
--- 757,803 ----
          break;
  	
        case _Jv_IP_MULTICAST_LOOP_ :
! 	// cache the local address
! 	if (localAddress == NULL)
! 	  {	
! 	    jbyteArray laddr;
! 	    if (::getsockname (native_fd, (sockaddr*) &u, &addrlen) != 0)
! 	      goto error;
! 	    if (u.address.sin_family == AF_INET)
! 	      {
! 		laddr = JvNewByteArray (4);
! 		memcpy (elements (laddr), &u.address.sin_addr, 4);
! 	      }
! #ifdef HAVE_INET6
!             else if (u.address.sin_family == AF_INET6)
! 	      {
! 		laddr = JvNewByteArray (16);
! 		memcpy (elements (laddr), &u.address6.sin6_addr, 16);
! 	      }
! #endif
! 	    else
! 	      throw new ::java::net::SocketException (
! 			      JvNewStringUTF ("invalid family"));
! 	    localAddress = new ::java::net::InetAddress (laddr, NULL);
! 	    
! 	  }
! 	if (localAddress->addr->length == 4) 
! 	  {
! 	    level = IPPROTO_IP;
! 	    opname = IP_MULTICAST_LOOP;
! 	  }
! #if defined (HAVE_INET6) && defined (IPV6_MULTICAST_LOOP)
! 	else if (localAddress->addr->length == 16)
! 	  {
! 	    level = IPPROTO_IPV6;
! 	    opname = IPV6_MULTICAST_LOOP;
! 	  }
! #endif
! 	else
! 	  throw
! 	    new ::java::net::SocketException (JvNewStringUTF ("invalid address length"));
! 	if (::getsockopt (native_fd, level, opname, (char *) &val,
! 			  &val_len) != 0)
  	  goto error;
  	return new ::java::lang::Boolean (val != 0);
  	
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc gcc-4.0.0/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc
*** gcc-3.4.3/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc	Mon Jul 12 01:58:10 2004
--- gcc-4.0.0/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc	Wed Mar 17 08:10:28 2004
***************
*** 1,4 ****
! /* Copyright (C) 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,4 ----
! /* Copyright (C) 2003  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 10,15 ****
--- 10,20 ----
  #include <platform.h>
  #include <string.h>
  
+ #if HAVE_BSTRING_H
+ // Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2
+ #include <bstring.h>
+ #endif
+ 
  #include <gnu/java/net/PlainDatagramSocketImpl.h>
  #include <java/io/IOException.h>
  #include <java/net/BindException.h>
*************** union SockAddr
*** 34,40 ****
--- 39,47 ----
  
  union McastReq
  {
+ #if HAVE_STRUCT_IP_MREQ
    struct ip_mreq mreq;
+ #endif
  #if HAVE_STRUCT_IPV6_MREQ
    struct ipv6_mreq mreq6;
  #endif
*************** gnu::java::net::PlainDatagramSocketImpl:
*** 266,271 ****
--- 273,280 ----
  void
  gnu::java::net::PlainDatagramSocketImpl::send (::java::net::DatagramPacket *p)
  {
+   JvSynchronize lock (SEND_LOCK);
+ 
    // FIXME: Deal with Multicast and if the socket is connected.
    jint rport = p->getPort();
    union SockAddr u;
*************** gnu::java::net::PlainDatagramSocketImpl:
*** 306,311 ****
--- 315,322 ----
  void
  gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p)
  {
+   JvSynchronize lock (RECEIVE_LOCK);
+ 
    // FIXME: Deal with Multicast and if the socket is connected.
    union SockAddr u;
    socklen_t addrlen = sizeof(u);
*************** gnu::java::net::PlainDatagramSocketImpl:
*** 399,411 ****
  					      jboolean join)
  {
    // FIXME: implement use of NetworkInterface
-   union McastReq u;
    jbyteArray haddress = inetaddr->addr;
-   jbyte *bytes = elements (haddress);
    int len = haddress->length;
    int level, opname;
    const char *ptr;
!   if (len == 4)
      {
        level = IPPROTO_IP;
        opname = join ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP;
--- 410,423 ----
  					      jboolean join)
  {
    // FIXME: implement use of NetworkInterface
    jbyteArray haddress = inetaddr->addr;
    int len = haddress->length;
    int level, opname;
    const char *ptr;
!   if (0)
!     ;
! #if HAVE_STRUCT_IP_MREQ
!   else if (len == 4)
      {
        level = IPPROTO_IP;
        opname = join ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP;
*************** gnu::java::net::PlainDatagramSocketImpl:
*** 416,421 ****
--- 428,434 ----
        len = sizeof (struct ip_mreq);
        ptr = (const char *) &u.mreq;
      }
+ #endif
  #if HAVE_STRUCT_IPV6_MREQ
    else if (len == 16)
      {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/natPlainSocketImplPosix.cc gcc-4.0.0/libjava/gnu/java/net/natPlainSocketImplPosix.cc
*** gcc-3.4.3/libjava/gnu/java/net/natPlainSocketImplPosix.cc	Tue Dec 16 22:47:53 2003
--- gcc-4.0.0/libjava/gnu/java/net/natPlainSocketImplPosix.cc	Tue Mar 15 16:43:41 2005
***************
*** 1,4 ****
! /* Copyright (C) 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,4 ----
! /* Copyright (C) 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** gnu::java::net::PlainSocketImpl::close()
*** 309,340 ****
    timeout = 0;
  }
  
  // Write a byte to the socket.
  void
  gnu::java::net::PlainSocketImpl$SocketOutputStream::write(jint b)
  {
!   jbyte d =(jbyte) b;
!   int r = 0;
! 
!   while (r != 1)
!     {
!       r = _Jv_write (this$0->native_fd, &d, 1);
!       if (r == -1)
!         {
!           if (::java::lang::Thread::interrupted())
!             {
!               ::java::io::InterruptedIOException *iioe
!                 = new ::java::io::InterruptedIOException 
!                 (JvNewStringLatin1 (strerror (errno)));
!               iioe->bytesTransferred = 0;
!               throw iioe;
!             }
!           // Some errors should not cause exceptions.
!           if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF)
!             throw new ::java::io::IOException (JvNewStringUTF (strerror (errno)));
!           break;
!         }
!     }
  }
  
  // Write some bytes to the socket.
--- 309,323 ----
    timeout = 0;
  }
  
+ static void
+ write_helper (jint native_fd, jbyte *bytes, jint len);
+ 
  // Write a byte to the socket.
  void
  gnu::java::net::PlainSocketImpl$SocketOutputStream::write(jint b)
  {
!   jbyte data = (jbyte) b;
!   write_helper (this$0->native_fd, &data, 1);
  }
  
  // Write some bytes to the socket.
*************** gnu::java::net::PlainSocketImpl$SocketOu
*** 346,357 ****
    if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
      throw new ::java::lang::ArrayIndexOutOfBoundsException;
  
!   jbyte *bytes = elements (b) + offset;
    int written = 0;
  
    while (len > 0)
      {
!       int r = _Jv_write (this$0->native_fd, bytes, len);
  
        if (r == -1)
          {
--- 329,345 ----
    if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
      throw new ::java::lang::ArrayIndexOutOfBoundsException;
  
!   write_helper (this$0->native_fd, elements (b) + offset * sizeof (jbyte), len);
! }
! 
! static void
! write_helper(jint native_fd, jbyte *bytes, jint len)
! {
    int written = 0;
  
    while (len > 0)
      {
!       int r = _Jv_write (native_fd, bytes, len);
  
        if (r == -1)
          {
*************** gnu::java::net::PlainSocketImpl::sendUrg
*** 382,442 ****
      "PlainSocketImpl: sending of urgent data not supported by this socket"));
  }
  
  // Read a single byte from the socket.
  jint
  gnu::java::net::PlainSocketImpl$SocketInputStream::read(void)
  {
!   jbyte b;
!   jint timeout = this$0->timeout;
!   jint native_fd = this$0->native_fd;
! 
!   // Do timeouts via select.
!   if (timeout > 0 && native_fd >= 0 && native_fd < FD_SETSIZE)
!     {
!       // Create the file descriptor set.
!       fd_set read_fds;
!       FD_ZERO (&read_fds);
!       FD_SET (native_fd,&read_fds);
!       // Create the timeout struct based on our internal timeout value.
!       struct timeval timeout_value;
!       timeout_value.tv_sec = timeout / 1000;
!       timeout_value.tv_usec = (timeout % 1000) * 1000;
!       // Select on the fds.
!       int sel_retval =
!         _Jv_select (native_fd + 1, &read_fds, NULL, NULL, &timeout_value);
!       // If select returns 0 we've waited without getting data...
!       // that means we've timed out.
!       if (sel_retval == 0)
!         throw new ::java::net::SocketTimeoutException
!           (JvNewStringUTF ("Read timed out") );
!       // If select returns ok we know we either got signalled or read some data...
!       // either way we need to try to read.
!     }
! 
!   int r = _Jv_read (native_fd, &b, 1);
! 
!   if (r == 0)
!     return -1;
! 
!   if (::java::lang::Thread::interrupted())
!     {
!       ::java::io::InterruptedIOException *iioe =
!         new ::java::io::InterruptedIOException
!         (JvNewStringUTF("Read interrupted"));
!       iioe->bytesTransferred = r == -1 ? 0 : r;
!       throw iioe;
!     }
!   else if (r == -1)
!     {
!       // Some errors cause us to return end of stream...
!       if (errno == ENOTCONN)
!         return -1;
  
!       // Other errors need to be signalled.
!       throw new ::java::io::IOException (JvNewStringUTF (strerror (errno)));
!     }
  
!   return b & 0xFF;
  }
  
  // Read count bytes into the buffer, starting at offset.
--- 370,388 ----
      "PlainSocketImpl: sending of urgent data not supported by this socket"));
  }
  
+ static jint
+ read_helper (jint native_fd, jint timeout, jbyte *bytes, jint count);
+ 
  // Read a single byte from the socket.
  jint
  gnu::java::net::PlainSocketImpl$SocketInputStream::read(void)
  {
!   jbyte data;
  
!   if (read_helper (this$0->native_fd, this$0->timeout, &data, 1) == 1)
!     return data & 0xFF;
  
!   return -1;
  }
  
  // Read count bytes into the buffer, starting at offset.
*************** jint
*** 444,453 ****
  gnu::java::net::PlainSocketImpl$SocketInputStream::read(jbyteArray buffer, jint offset, 
    jint count)
  {
!   jint native_fd = this$0->native_fd;
!   jint timeout = this$0->timeout;
! 
!   if (! buffer)
      throw new ::java::lang::NullPointerException;
  
    jsize bsize = JvGetArrayLength (buffer);
--- 390,396 ----
  gnu::java::net::PlainSocketImpl$SocketInputStream::read(jbyteArray buffer, jint offset, 
    jint count)
  {
!  if (! buffer)
      throw new ::java::lang::NullPointerException;
  
    jsize bsize = JvGetArrayLength (buffer);
*************** gnu::java::net::PlainSocketImpl$SocketIn
*** 455,462 ****
    if (offset < 0 || count < 0 || offset + count > bsize)
      throw new ::java::lang::ArrayIndexOutOfBoundsException;
  
!   jbyte *bytes = elements (buffer) + offset;
  
    // Do timeouts via select.
    if (timeout > 0 && native_fd >= 0 && native_fd < FD_SETSIZE)
      {
--- 398,415 ----
    if (offset < 0 || count < 0 || offset + count > bsize)
      throw new ::java::lang::ArrayIndexOutOfBoundsException;
  
!   return read_helper (this$0->native_fd, this$0->timeout,
! 		      elements (buffer) + offset * sizeof (jbyte), count);
! }
  
+ static jint
+ read_helper (jint native_fd, jint timeout, jbyte *bytes, jint count)
+ {
+   // If zero bytes were requested, short circuit so that recv
+   // doesn't signal EOF.
+   if (count == 0)
+     return 0;
+     
    // Do timeouts via select.
    if (timeout > 0 && native_fd >= 0 && native_fd < FD_SETSIZE)
      {
*************** jint
*** 515,521 ****
  gnu::java::net::PlainSocketImpl::available(void)
  {
  #if defined(FIONREAD) || defined(HAVE_SELECT)
!   long num = 0;
    int r = 0;
    bool num_set = false;
  
--- 468,474 ----
  gnu::java::net::PlainSocketImpl::available(void)
  {
  #if defined(FIONREAD) || defined(HAVE_SELECT)
!   int num = 0;
    int r = 0;
    bool num_set = false;
  
*************** gnu::java::net::PlainSocketImpl::setOpti
*** 689,697 ****
          return;
  	
        case _Jv_SO_REUSEADDR_ :
!         throw new ::java::net::SocketException (
!           JvNewStringUTF ("SO_REUSEADDR: not valid for TCP"));
!         return;
  
        case _Jv_SO_TIMEOUT_ :
          timeout = val;
--- 642,655 ----
          return;
  	
        case _Jv_SO_REUSEADDR_ :
! #if defined(SO_REUSEADDR)
! 	if (::setsockopt (native_fd, SOL_SOCKET, SO_REUSEADDR, (char *) &val,
! 	    val_len) != 0)
! 	  goto error;
! #else
!         throw new ::java::lang::InternalError (
!           JvNewStringUTF ("SO_REUSEADDR not supported"));
! #endif 
  
        case _Jv_SO_TIMEOUT_ :
          timeout = val;
*************** gnu::java::net::PlainSocketImpl::getOpti
*** 832,839 ****
        break;
  	
      case _Jv_SO_REUSEADDR_ :
!       throw new ::java::net::SocketException
!         (JvNewStringUTF ("SO_REUSEADDR: not valid for TCP"));
        break;
  
      case _Jv_SO_TIMEOUT_ :
--- 790,803 ----
        break;
  	
      case _Jv_SO_REUSEADDR_ :
! #if defined(SO_REUSEADDR)
!       if (::getsockopt (native_fd, SOL_SOCKET, SO_REUSEADDR, (char *) &val,
!                         &val_len) != 0)
!         goto error;    
! #else
!         throw new ::java::lang::InternalError (
!           JvNewStringUTF ("SO_REUSEADDR not supported"));
! #endif 
        break;
  
      case _Jv_SO_TIMEOUT_ :
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/natPlainSocketImplWin32.cc gcc-4.0.0/libjava/gnu/java/net/natPlainSocketImplWin32.cc
*** gcc-3.4.3/libjava/gnu/java/net/natPlainSocketImplWin32.cc	Tue Dec 16 22:57:06 2003
--- gcc-4.0.0/libjava/gnu/java/net/natPlainSocketImplWin32.cc	Tue Mar 22 22:56:19 2005
*************** jint
*** 491,496 ****
--- 491,501 ----
  gnu::java::net::PlainSocketImpl$SocketInputStream::read(jbyteArray buffer,
    jint offset, jint count)
  {
+   // If zero bytes were requested, short circuit so that recv
+   // doesn't signal EOF.
+   if (count == 0)
+     return 0;
+ 
    if (! buffer)
      throw new ::java::lang::NullPointerException;
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/file/Connection.java gcc-4.0.0/libjava/gnu/java/net/protocol/file/Connection.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/file/Connection.java	Tue Jan  6 15:00:11 2004
--- gcc-4.0.0/libjava/gnu/java/net/protocol/file/Connection.java	Fri Sep 10 11:06:38 2004
*************** exception statement from your version.  
*** 37,44 ****
--- 37,47 ----
  
  package gnu.java.net.protocol.file;
  
+ import gnu.java.security.action.GetPropertyAction;
+ 
  import java.io.BufferedInputStream;
  import java.io.BufferedOutputStream;
+ import java.io.ByteArrayInputStream;
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
*************** import java.net.ProtocolException;
*** 50,55 ****
--- 53,62 ----
  import java.net.URL;
  import java.net.URLConnection;
  import java.security.Permission;
+ import java.security.AccessController;
+ import java.text.SimpleDateFormat;
+ import java.util.Date;
+ import java.util.Locale;
  
  /**
   * This subclass of java.net.URLConnection models a URLConnection via
*************** public class Connection extends URLConne
*** 67,72 ****
--- 74,88 ----
    private static final String DEFAULT_PERMISSION = "read";
  
    /**
+    * HTTP-style DateFormat, used to format the last-modified header.
+    */
+   private static SimpleDateFormat dateFormat
+     = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'",
+                            new Locale ("En", "Us", "Unix"));
+ 
+   private static String lineSeparator;
+   
+   /**
     * This is a File object for this connection
     */
    private File file;
*************** public class Connection extends URLConne
*** 107,117 ****
      
      // If not connected, then file needs to be openned.
      file = new File (getURL().getFile());
!     if (doInput)
!       inputStream = new BufferedInputStream(new FileInputStream(file));
      
!     if (doOutput)
!       outputStream = new BufferedOutputStream(new FileOutputStream(file));
      
      connected = true;
    }
--- 123,160 ----
      
      // If not connected, then file needs to be openned.
      file = new File (getURL().getFile());
! 
!     if (! file.isDirectory())
!       {
! 	if (doInput)
! 	  inputStream = new BufferedInputStream(new FileInputStream(file));
      
! 	if (doOutput)
! 	  outputStream = new BufferedOutputStream(new FileOutputStream(file));
!       }
!     else
!       {
! 	if (doInput)
! 	  {
! 	    if (lineSeparator == null)
! 	      {
! 		GetPropertyAction getProperty = new GetPropertyAction("line.separator");
! 		lineSeparator = (String) AccessController.doPrivileged(getProperty);
! 	      }
! 	    
! 	    StringBuffer sb = new StringBuffer();
! 	    String[] files = file.list();
! 
! 	    for (int index = 0; index < files.length; ++index)
! 	       sb.append(files[index]).append(lineSeparator);
! 
! 	    inputStream = new ByteArrayInputStream(sb.toString().getBytes());
! 	  }
! 
! 	if (doOutput)
! 	  throw new ProtocolException
! 	    ("file: protocol does not support output on directories");
!       }
      
      connected = true;
    }
*************** public class Connection extends URLConne
*** 174,179 ****
--- 217,251 ----
  	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"))
+           return Long.toString(file.length());
+ 	else if (field.equals("last-modified"))
+ 	  {
+ 	    synchronized (dateFormat)
+ 	      {
+         	return dateFormat.format(new Date(file.lastModified()));
+ 	      }
+ 	  }
+       }
+     catch (IOException e)
+       {
+         // Fall through.
+       }
+     return null;
+   }
  
    /**
     * Get the length of content.
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/file/Handler.java gcc-4.0.0/libjava/gnu/java/net/protocol/file/Handler.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/file/Handler.java	Wed Nov 26 10:17:51 2003
--- gcc-4.0.0/libjava/gnu/java/net/protocol/file/Handler.java	Wed Sep 15 12:38:46 2004
***************
*** 1,5 ****
  /* Handler.java -- "file" protocol handler for java.net
!    Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** public class Handler extends URLStreamHa
*** 76,92 ****
      String host = url.getHost();
      if ((host != null) && (! host.equals("")))
        {
-         throw new IOException("ftp protocol handler not yet implemented.");
-         /*
  	// 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.
  	setURL (url, "ftp", url.getHost(), url.getPort(), url.getFile(),
! 		url.getRef());
! 	// Until the ftp protocol handler is written, this will cause
! 	// a NullPointerException.
  	return url.openConnection();
- 	*/
        }
  
      return new Connection(url);
--- 76,89 ----
      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);
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/ActiveModeDTP.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/ActiveModeDTP.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/ActiveModeDTP.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/ActiveModeDTP.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 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-3.4.3/libjava/gnu/java/net/protocol/ftp/BlockInputStream.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/BlockInputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/BlockInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/BlockInputStream.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 
+ /**
+  * 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-3.4.3/libjava/gnu/java/net/protocol/ftp/BlockOutputStream.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/BlockOutputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/BlockOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/BlockOutputStream.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/ftp/CompressedInputStream.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/CompressedInputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/CompressedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/CompressedInputStream.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 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-3.4.3/libjava/gnu/java/net/protocol/ftp/CompressedOutputStream.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/CompressedOutputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/CompressedOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/CompressedOutputStream.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/ftp/DTP.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/DTP.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/DTP.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/DTP.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 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-3.4.3/libjava/gnu/java/net/protocol/ftp/DTPInputStream.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/DTPInputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/DTPInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/DTPInputStream.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 
+ /**
+  * 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-3.4.3/libjava/gnu/java/net/protocol/ftp/DTPOutputStream.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/DTPOutputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/DTPOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/DTPOutputStream.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/ftp/FTPConnection.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/FTPConnection.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/FTPConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/FTPConnection.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 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-3.4.3/libjava/gnu/java/net/protocol/ftp/FTPException.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/FTPException.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/FTPException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/FTPException.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/ftp/FTPResponse.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/FTPResponse.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/FTPResponse.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/FTPResponse.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/ftp/FTPURLConnection.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/FTPURLConnection.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/FTPURLConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/FTPURLConnection.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 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-3.4.3/libjava/gnu/java/net/protocol/ftp/Handler.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/Handler.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/Handler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/Handler.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/ftp/PassiveModeDTP.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/PassiveModeDTP.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/PassiveModeDTP.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/PassiveModeDTP.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 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-3.4.3/libjava/gnu/java/net/protocol/ftp/StreamInputStream.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/StreamInputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/StreamInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/StreamInputStream.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 
+ /**
+  * 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-3.4.3/libjava/gnu/java/net/protocol/ftp/StreamOutputStream.java gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/StreamOutputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/StreamOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/StreamOutputStream.java	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/ftp/package.html gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/package.html
*** gcc-3.4.3/libjava/gnu/java/net/protocol/ftp/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/ftp/package.html	Sat Feb 19 08:53:52 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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-3.4.3/libjava/gnu/java/net/protocol/gcjlib/Connection.java gcc-4.0.0/libjava/gnu/java/net/protocol/gcjlib/Connection.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/gcjlib/Connection.java	Wed Oct  8 16:28:28 2003
--- gcc-4.0.0/libjava/gnu/java/net/protocol/gcjlib/Connection.java	Fri Jul 23 01:21:40 2004
*************** class Connection extends URLConnection
*** 61,64 ****
--- 61,83 ----
      connect();
      return new CoreInputStream(core);
    }
+   
+   public String getHeaderField(String field)
+   {
+     try
+       {
+ 	if (!connected)
+ 	  connect();
+ 
+ 	if (field.equals("content-type"))
+           return guessContentTypeFromName(name);
+ 	else if (field.equals("content-length"))
+           return Long.toString(core.length);
+       }
+     catch (IOException e)
+       {
+         // Fall through.
+       }
+     return null;
+   }  
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/Authenticator.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/Authenticator.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/Authenticator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/Authenticator.java	Tue Jan 11 20:19:54 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java	Tue Jan 11 20:19:54 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java	Tue Jan 11 20:19:54 2005
***************
*** 0 ****
--- 1,123 ----
+ /* Authenticator.java --ByteArrayResponseBodyReader.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * Simple response body reader that stores content in a byte array.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class ByteArrayResponseBodyReader
+   implements ResponseBodyReader
+ {
+ 
+   /**
+    * The content.
+    */
+   protected byte[] content;
+ 
+   /**
+    * The position in the content at which the next write will occur.
+    */
+   protected int pos;
+ 
+   /**
+    * The length of the buffer.
+    */
+   protected int len;
+ 
+   /**
+    * Constructs a new byte array response body reader.
+    */
+   public ByteArrayResponseBodyReader()
+   {
+     this(4096);
+   }
+   
+   /**
+    * Constructs a new byte array response body reader with the specified
+    * initial buffer size.
+    * @param size the initial buffer size
+    */
+   public ByteArrayResponseBodyReader(int size)
+   {
+     content = new byte[size];
+     pos = len = 0;
+   }
+ 
+   /**
+    * This reader accepts all responses.
+    */ 
+   public boolean accept(Request request, Response response)
+   {
+     return true;
+   }
+ 
+   public void read(byte[] buffer, int offset, int length)
+   {
+     int l = length - offset;
+     if (pos + l > content.length)
+       {
+         byte[] tmp = new byte[content.length * 2];
+         System.arraycopy(content, 0, tmp, 0, pos);
+         content = tmp;
+       }
+     System.arraycopy(buffer, offset, content, pos, l);
+     pos += l;
+     len = pos;
+   }
+ 
+   public void close()
+   {
+     pos = 0;
+   }
+ 
+   /**
+    * Retrieves the content of this reader as a byte array.
+    * The size of the returned array is the number of bytes read.
+    */
+   public byte[] toByteArray()
+   {
+     byte[] ret = new byte[len];
+     System.arraycopy(content, 0, ret, 0, len);
+     return ret;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/ChunkedInputStream.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/ChunkedInputStream.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/ChunkedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/ChunkedInputStream.java	Tue Jan 11 20:19:54 2005
***************
*** 0 ****
--- 1,172 ----
+ /* ChunkedInputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 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;
+ 
+   int size;
+   int count;
+   boolean meta;
+   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;
+         StringBuffer buf = new StringBuffer();
+         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 diff = length - offset;
+         int max = size - count;
+         max = (diff < max) ? diff : max;
+         int len = (max > 0) ? in.read(buffer, offset, max) : 0;
+         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-3.4.3/libjava/gnu/java/net/protocol/http/Connection.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/Connection.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/Connection.java	Sat Jan 24 21:21:26 2004
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/Connection.java	Thu Jan  1 00:00:00 1970
***************
*** 1,535 ****
- /* HttpURLConnection.java -- URLConnection class for HTTP protocol
-    Copyright (C) 1998, 1999, 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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you 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.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.InputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.net.HttpURLConnection;
- import java.net.ProtocolException;
- import java.net.Socket;
- import java.net.URL;
- import java.net.URLConnection;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import gnu.java.net.HeaderFieldHelper;
- 
- /**
-  * This subclass of java.net.URLConnection models a URLConnection via
-  * the HTTP protocol.
-  *
-  * Status: Minimal subset of functionality.  Proxies only partially
-  * handled; Redirects not yet handled.  FileNameMap handling needs to
-  * be considered.  useCaches, ifModifiedSince, and
-  * allowUserInteraction need consideration as well as doInput and
-  * doOutput.
-  * 
-  * @author Aaron M. Renn <arenn@urbanophile.com>
-  * @author Warren Levy <warrenl@cygnus.com>
-  */
- public final class Connection extends HttpURLConnection
- {
-   /**
-    * The socket we are connected to
-    */
-   private Socket socket;
-   private static int proxyPort = 80;
-   private static boolean proxyInUse = false;
-   private static String proxyHost = null;
- 
-   static 
-   {
-     // Recognize some networking properties listed at
-     // http://java.sun.com/j2se/1.4/docs/guide/net/properties.html.
-     String port = null;
-     proxyHost = System.getProperty("http.proxyHost");
-     if (proxyHost != null)
-       {
- 	proxyInUse = true;
- 	if ((port = System.getProperty("http.proxyPort")) != null)
- 	  {
- 	    try
- 	      {
- 		proxyPort = Integer.parseInt(port);
- 	      }
- 	    catch (Throwable t)
- 	      {
- 		// Nothing.  
- 	      }
- 	  }
-       }
-   }
- 
-   /**
-    * The InputStream for this connection.
-    */
-   private DataInputStream inputStream;
- 
-   /**
-    * The OutputStream for this connection
-    */
-   private OutputStream outputStream;
- 
-   /**
-    * bufferedOutputStream is a buffer to contain content of the HTTP request,
-    * and will be written to outputStream all at once
-    */
-   private ByteArrayOutputStream bufferedOutputStream;
- 
-   /**
-    * This object holds the request properties.
-    */
-   private HashMap requestProperties = new HashMap();
- 
-   /**
-    * This is the object that holds the header field information
-    */
-   private HeaderFieldHelper headers = new HeaderFieldHelper();
- 
-   /**
-    * Calls superclass constructor to initialize
-    */
-   protected Connection(URL url)
-   {
-     super(url);
- 
-     /* Set up some variables */
-     doOutput = false;
-   }
- 
-   /**
-    * Connects to the remote host, sends the request, and parses the reply
-    * code and header information returned
-    */
-   public void connect() throws IOException
-   {
-     // Call is ignored if already connected.
-     if (connected)
-       return;
- 
-     // Get address and port number.
-     int port;
-     if (proxyInUse)
-       {
- 	port = proxyPort;
- 	socket = new Socket(proxyHost, port);
-       }
-     else
-       {
- 	if ((port = url.getPort()) == -1)
- 	  port = 80;
- 	// Open socket and output stream.
- 	socket = new Socket(url.getHost(), port);
-       }
- 
-     inputStream =
-       new DataInputStream(new BufferedInputStream(socket.getInputStream()));
-     outputStream = new BufferedOutputStream (socket.getOutputStream());
- 
-     sendRequest();
-     receiveReply();
- 
-     connected = true;
-   }
- 
-   /**
-    * Disconnects from the remote server.
-    */
-   public void disconnect()
-   {
-     if (socket != null)
-       {
- 	try
- 	  {
- 	    socket.close();
- 	  }
- 	catch (IOException e)
- 	  {
- 	    // Ignore errors in closing socket.
- 	  }
- 	socket = null;
-       }
-   }
- 
-   /**
-    * Write HTTP request header and content to outputWriter.
-    */
-   void sendRequest() throws IOException
-   {
-     // Create PrintWriter for easier sending of headers.
-     PrintWriter outputWriter =
-       new PrintWriter(new OutputStreamWriter(outputStream, "8859_1")); 
-     
-     // Send request including any request properties that were set.
-     outputWriter.print (getRequestMethod() + " " + url.getFile()
-                         + " HTTP/1.1\r\n");
- 
-     // Set additional HTTP headers.
-     if (getRequestProperty ("Host") == null)
-       setRequestProperty ("Host", url.getHost());
-     
-     if (getRequestProperty ("Connection") == null)
-       setRequestProperty ("Connection", "Close");
-     
-     if (getRequestProperty ("user-agent") == null)
-       setRequestProperty ("user-agent", "gnu-libgcj/"
-                           + System.getProperty ("java.vm.version"));
-     
-     if (getRequestProperty ("accept") == null)
-       setRequestProperty ("accept", "*/*");
-     
-     if (getRequestProperty ("Content-type") == null)
-       setRequestProperty ("Content-type", "application/x-www-form-urlencoded");
- 
-     // Set correct content length.
-     if (bufferedOutputStream != null)
-       setRequestProperty ("Content-length", String.valueOf (bufferedOutputStream.size()));
- 
-     // Write all req_props name-value pairs to the output writer.
-     Iterator itr = getRequestProperties().entrySet().iterator();
- 
-     while (itr.hasNext())
-       {
-         Map.Entry e = (Map.Entry) itr.next();
-         outputWriter.print (e.getKey() + ": " + e.getValue() + "\r\n");
-       }
- 
-     // One more CR-LF indicates end of header.
-     outputWriter.print ("\r\n");
-     outputWriter.flush();
- 
-     // Write content
-     if (bufferedOutputStream != null)
-       {
- 	bufferedOutputStream.writeTo (outputStream);
- 	outputStream.flush();
-       }
-   }
- 
-   /**
-    * Read HTTP reply from inputStream.
-    */
-   private void receiveReply() throws IOException
-   {
-     // Parse the reply
-     String line = inputStream.readLine();
-     String saveline = line;
-     int idx = line.indexOf (" ");
- 
-     if ((idx == -1)
-         || (line.length() < (idx + 6)))
-       throw new IOException ("Server reply was unparseable: " + saveline);
- 
-     headers.addHeaderField (null, line);
- 
-     line = line.substring (idx + 1);
-     String code = line.substring (0, 3);
-     
-     try
-       {
-         responseCode = Integer.parseInt (code);
-       }
-     catch (NumberFormatException e)
-       {
-         throw new IOException ("Server reply was unparseable: " + saveline);
-       }
-     
-     responseMessage = line.substring (4);
- 
-     // Now read the header lines
-     String key = null, value = null;
-     
-     while (true)
-       {
-         line = inputStream.readLine();
-         
-         if (line.equals(""))
-           break;
- 
-         // Check for folded lines
-         if (line.startsWith (" ")
-             || line.startsWith("\t"))
-           {
-             // Trim off leading space
-             do
-               {
-                 if (line.length() == 1)
-                   throw new IOException("Server header lines were unparseable: "
-                                         + line);
- 
-                 line = line.substring (1);
-               }
-             while (line.startsWith(" ")
-                    || line.startsWith("\t"));
- 
-             value = value + " " + line;
-           }
-         else 
-           {
-             if (key != null)
-               {
-                 headers.addHeaderField (key.toLowerCase(), value);
-                 key = null;
-                 value = null;
-               }
- 
-             // Parse out key and value
-             idx = line.indexOf (":");
-             if ((idx == -1)
-                 || (line.length() < (idx + 2)))
-               throw new IOException ("Server header lines were unparseable: "
-                                      + line);
- 
-             key = line.substring (0, idx);
-             value = line.substring (idx + 1);
- 
-             // Trim off leading space
-             while (value.startsWith (" ")
-                    || value.startsWith ("\t"))
-               {
-                 if (value.length() == 1)
-                   throw new IOException ("Server header lines were unparseable: "
-                                          + line);
- 
-                 value = value.substring (1);
-               }
-           }
-       }
-     
-     if (key != null)
-       {
-         headers.addHeaderField (key.toLowerCase(), value.toLowerCase());
-       }
-   }
- 
-   /**
-    * Return a boolean indicating whether or not this connection is
-    * going through a proxy
-    *
-    * @return true if using a proxy, false otherwise
-    */
-   public boolean usingProxy()
-   {
-     return proxyInUse;
-   }
- 
-   /**
-    * Returns an InputStream for reading from this connection.  This stream
-    * will be "queued up" for reading just the contents of the requested file.
-    * Overrides URLConnection.getInputStream()
-    *
-    * @return An InputStream for this connection.
-    *
-    * @exception IOException If an error occurs
-    */
-   public InputStream getInputStream() throws IOException
-   {
-     if (!connected)
-       connect();
- 
-     if (!doInput)
-       throw new ProtocolException("Can't open InputStream if doInput is false");
-     
-     return inputStream;
-   }
- 
-   /**
-    * Returns on OutputStream for writing to this connection.
-    *
-    * @return An OutputStream for this connection.
-    *
-    * @exception IOException If an error occurs
-    */
-   public OutputStream getOutputStream() throws IOException
-   {
-     if (connected)
-       throw new ProtocolException
- 	("You cannot get an output stream for an existing http connection");
- 
-     if (!doOutput)
-       throw new ProtocolException
-         ("Want output stream while haven't setDoOutput(true)");
-     
-     if (bufferedOutputStream == null)
-       bufferedOutputStream = new ByteArrayOutputStream (256); //default is too small
-     
-     return bufferedOutputStream;
-   }
- 
-   /**
-    * Overrides java.net.HttpURLConnection.setRequestMethod() in order to
-    * restrict the available methods to only those we support.
-    *
-    * @param method The RequestMethod to use
-    *
-    * @exception ProtocolException If the specified method is not valid
-    */
-   public void setRequestMethod (String method) throws ProtocolException
-   {
-     method = method.toUpperCase();
-     
-     if (method.equals("GET")
-         || method.equals("HEAD")
-         || method.equals("POST"))
-       super.setRequestMethod (method);
-     else
-       throw new ProtocolException ("Unsupported or unknown request method " +
-                                    method);
-   }
- 
-   public void addRequestProperty(String key, String value)
-   {
-     if (connected)
-       throw new IllegalStateException("Already connected");
-     
-     String old = (String) requestProperties.put(key, value);
- 
-     if (old != null)
-       requestProperties.put(key, old + "," + value);
-   }
- 
-   public String getRequestProperty(String key)
-   {
-     if (connected)
-       throw new IllegalStateException("Already connected");
-     
-     return (String) requestProperties.get(key);
-   }
- 
-   public void setRequestProperty(String key, String value)
-   {
-     if (connected)
-       throw new IllegalStateException("Already connected");
-     
-     requestProperties.put(key, value);
-   }
- 
-   public Map getRequestProperties()
-   {
-     if (connected)
-       throw new IllegalStateException("Already connected");
-     
-     return requestProperties;
-   }
- 
-   public String getHeaderField(String name)
-   {
-     if (!connected)
-       try
-         {
- 	  connect();
- 	}
-       catch (IOException x)
-         {
- 	  return null;
- 	}
- 
-     return (String) headers.getHeaderFieldValueByKey(name.toLowerCase());
-   }
- 
-   public Map getHeaderFields()
-   {
-     if (!connected)
-       try
-         {
- 	  connect();
- 	}
-       catch (IOException x)
-         {
- 	  return null;
- 	}
- 
-     return headers.getHeaderFields();
-   }
- 
-   /**
-    * This method returns the header field value at the specified numeric
-    * index.
-    *
-    * @param n The index into the header field array
-    *
-    * @return The value of the specified header field, or <code>null</code>
-    * if the specified index is not valid.
-    */
-   public String getHeaderField(int n)
-   {
-     if (!connected)
-       try
-         {
- 	  connect();
- 	}
-       catch (IOException x)
-         {
- 	  return null;
- 	}
- 
-     return headers.getHeaderFieldValueByIndex (n);
-   }
- 
-   /**
-    * This method returns the header field key at the specified numeric
-    * index.
-    *
-    * @param n The index into the header field array
-    *
-    * @return The name of the header field key, or <code>null</code> if the
-    * specified index is not valid.
-    */
-   public String getHeaderFieldKey(int n)
-   {
-     if (!connected)
-       try
-         {
- 	  connect();
- 	}
-       catch (IOException x)
-         {
- 	  return null;
- 	}
- 
-     return headers.getHeaderFieldKeyByIndex (n);
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/Cookie.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/Cookie.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/Cookie.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/Cookie.java	Thu Feb 17 18:26:26 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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)
+   {
+     StringBuffer buf = new StringBuffer();
+     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-3.4.3/libjava/gnu/java/net/protocol/http/CookieManager.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/CookieManager.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/CookieManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/CookieManager.java	Tue Jan 11 20:19:54 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/http/Credentials.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/Credentials.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/Credentials.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/Credentials.java	Tue Jan 11 20:19:54 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/http/HTTPConnection.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/HTTPConnection.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/HTTPConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/HTTPConnection.java	Thu Feb 17 18:26:26 2005
***************
*** 0 ****
--- 1,699 ----
+ /* HTTPConnection.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.java.net.protocol.http.event.ConnectionEvent;
+ import gnu.java.net.protocol.http.event.ConnectionListener;
+ import gnu.java.net.protocol.http.event.RequestEvent;
+ import gnu.java.net.protocol.http.event.RequestListener;
+ import gnu.java.net.EmptyX509TrustManager;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.BufferedOutputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ 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.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 = initUserAgent();
+ 
+   private static String initUserAgent()
+   {
+     try
+       {
+         StringBuffer buf = new StringBuffer("libgcj");
+         buf.append(" (");
+         buf.append(System.getProperty("os.name"));
+         buf.append("; ");
+         buf.append(System.getProperty("os.arch"));
+         buf.append("; ");
+         buf.append(System.getProperty("user.language"));
+         buf.append(")");
+         return buf.toString();
+       }
+     catch (SecurityException e)
+       {
+         return "inetlib/1.1";
+       }
+   }
+ 
+   /**
+    * 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 connectionListeners;
+   private final List requestListeners;
+   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;
+ 
+   /**
+    * 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;
+     connectionListeners = new ArrayList(4);
+     requestListeners = new ArrayList(4);
+     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;
+   }
+ 
+   /**
+    * 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)
+           {
+             StringBuffer buf = new StringBuffer();
+             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());
+           }
+       }
+     fireRequestEvent(RequestEvent.REQUEST_CREATED, ret);
+     return ret;
+   }
+ 
+   /**
+    * Closes this connection.
+    */
+   public void close()
+     throws IOException
+   {
+     try
+       {
+         closeConnection();
+       }
+     finally
+       {
+         fireConnectionEvent(ConnectionEvent.CONNECTION_CLOSED);
+       }
+   }
+ 
+   /**
+    * Retrieves the socket associated with this connection.
+    * This creates the socket if necessary.
+    */
+   protected 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 InputStream getInputStream()
+     throws IOException
+   {
+     if (socket == null)
+       {
+         getSocket();
+       }
+     return in;
+   }
+ 
+   protected OutputStream getOutputStream()
+     throws IOException
+   {
+     if (socket == null)
+       {
+         getSocket();
+       }
+     return out;
+   }
+ 
+   /**
+    * Closes the underlying socket, if any.
+    */
+   protected 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()
+   {
+     StringBuffer buf = new StringBuffer();
+     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 --
+   
+   public void addConnectionListener(ConnectionListener l)
+   {
+     synchronized (connectionListeners)
+       {
+         connectionListeners.add(l);
+       }
+   }
+ 
+   public void removeConnectionListener(ConnectionListener l)
+   {
+     synchronized (connectionListeners)
+       {
+         connectionListeners.remove(l);
+       }
+   }
+ 
+   protected void fireConnectionEvent(int type)
+   {
+     ConnectionEvent event = new ConnectionEvent(this, type);
+     ConnectionListener[] l = null;
+     synchronized (connectionListeners)
+       {
+         l = new ConnectionListener[connectionListeners.size()];
+         connectionListeners.toArray(l);
+       }
+     for (int i = 0; i < l.length; i++)
+       {
+         switch (type)
+           {
+           case ConnectionEvent.CONNECTION_CLOSED:
+             l[i].connectionClosed(event);
+             break;
+           }
+       }
+   }
+ 
+   public void addRequestListener(RequestListener l)
+   {
+     synchronized (requestListeners)
+       {
+         requestListeners.add(l);
+       }
+   }
+ 
+   public void removeRequestListener(RequestListener l)
+   {
+     synchronized (requestListeners)
+       {
+         requestListeners.remove(l);
+       }
+   }
+ 
+   protected void fireRequestEvent(int type, Request request)
+   {
+     RequestEvent event = new RequestEvent(this, type, request);
+     RequestListener[] l = null;
+     synchronized (requestListeners)
+       {
+         l = new RequestListener[requestListeners.size()];
+         requestListeners.toArray(l);
+       }
+     for (int i = 0; i < l.length; i++)
+       {
+         switch (type)
+           {
+           case RequestEvent.REQUEST_CREATED:
+             l[i].requestCreated(event);
+             break;
+           case RequestEvent.REQUEST_SENDING:
+             l[i].requestSent(event);
+             break;
+           case RequestEvent.REQUEST_SENT:
+             l[i].requestSent(event);
+             break;
+           }
+       }
+   }
+ 
+   void addHandshakeCompletedListener(HandshakeCompletedListener l)
+   {
+     synchronized (handshakeCompletedListeners)
+       {
+         handshakeCompletedListeners.add(l);
+       }
+   }
+   void removeHandshakeCompletedListener(HandshakeCompletedListener l)
+   {
+     synchronized (handshakeCompletedListeners)
+       {
+         handshakeCompletedListeners.remove(l);
+       }
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/HTTPDateFormat.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/HTTPDateFormat.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/HTTPDateFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/HTTPDateFormat.java	Thu Feb 17 18:26:26 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/http/HTTPURLConnection.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/HTTPURLConnection.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/HTTPURLConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/HTTPURLConnection.java	Tue Jan 11 20:19:54 2005
***************
*** 0 ****
--- 1,649 ----
+ /* HTTPURLConnection.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ 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.Date;
+ import java.util.Collections;
+ 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 Map connectionPool = new LinkedHashMap();
+ 
+   /*
+    * The underlying connection.
+    */
+   private HTTPConnection connection;
+ 
+   private String proxyHostname;
+   private int proxyPort;
+   private String agent;
+   private boolean keepAlive;
+   private int maxConnections;
+ 
+   private Request request;
+   private Headers requestHeaders;
+   private ByteArrayOutputStream requestSink;
+   private boolean requestMethodSetExplicitly;
+ 
+   private Response response;
+   private ByteArrayInputStream responseSink;
+ 
+   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);
+           }
+         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);
+           }
+         ByteArrayResponseBodyReader reader = new ByteArrayResponseBodyReader();
+         request.setResponseBodyReader(reader);
+         if (creds != null)
+           {
+             request.setAuthenticator(new Authenticator() {
+               public Credentials getCredentials(String realm, int attempts)
+               {
+                 return (attempts < 2) ? creds : null;
+               }
+             });
+           }
+         response = request.dispatch();
+         if (response.getCodeClass() == 3 && getInstanceFollowRedirects())
+           {
+             // Follow redirect
+             String location = response.getHeader("Location");
+             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;
+               }
+             // Otherwise this is not an HTTP redirect, can't follow
+           }
+         else
+           {
+             responseSink = new ByteArrayInputStream(reader.toByteArray ());
+           }
+       }
+     while (retry);
+     connected = true;
+   }
+ 
+   /**
+    * Returns a connection, from the pool if necessary.
+    */
+   HTTPConnection getConnection(String host, int port, boolean secure)
+     throws IOException
+   {
+     HTTPConnection connection;
+     if (keepAlive)
+       {
+         StringBuffer buf = new StringBuffer(secure ? "https://" : "http://");
+         buf.append(host);
+         buf.append(':');
+         buf.append(port);
+         String key = buf.toString();
+         synchronized (connectionPool)
+           {
+             connection = (HTTPConnection) connectionPool.get(key);
+             if (connection == null)
+               {
+                 connection = new HTTPConnection(host, port, secure);
+                 // Good housekeeping
+                 if (connectionPool.size() == maxConnections)
+                   {
+                     // maxConnections must always be >= 1
+                     Object lru = connectionPool.keySet().iterator().next();
+                     connectionPool.remove(lru);
+                   }
+                 connectionPool.put(key, connection);
+               }
+           }
+       }
+     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 Map getHeaderFields()
+   {
+     if (!connected)
+       {
+         try
+           {
+             connect();
+           }
+         catch (IOException e)
+           {
+             return null;
+           }
+       }
+     Map headers = response.getHeaders();
+     Map ret = new LinkedHashMap();
+     ret.put("", 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 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
+       {
+         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-3.4.3/libjava/gnu/java/net/protocol/http/Handler.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/Handler.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/Handler.java	Sat Oct 18 12:24:56 2003
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/Handler.java	Tue Jan 11 20:19:54 2005
***************
*** 1,5 ****
! /* Handler.java -- HTTP protocol handler for java.net
!    Copyright (c) 1998, 1999, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Handler.java --
!    Copyright (C) 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  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.URLConnection;
*** 43,86 ****
  import java.net.URLStreamHandler;
  
  /**
!  * This is the protocol handler for the HTTP protocol.  It implements
!  * the abstract openConnection() method from URLStreamHandler by returning
!  * a new HttpURLConnection object (from this package).  All other 
!  * methods are inherited
   *
!  * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Warren Levy
!  * @author Anthony Green <green@redhat.com>
   */
! public class Handler extends URLStreamHandler
  {
-   /**
-    * A do nothing constructor
-    */
-   public Handler()
-   {
-   }
  
    /**
!    * This method returs a new HttpURLConnection 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);
    }
  
    /**
!    * Returns the default port for a URL parsed by this handler.
     */
!   protected int getDefaultPort()
    {
!     return 80;
    }
  
! } // class Handler
--- 44,73 ----
  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-3.4.3/libjava/gnu/java/net/protocol/http/Headers.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/Headers.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/Headers.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/Headers.java	Tue Jan 11 20:19:54 2005
***************
*** 0 ****
--- 1,363 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InputStream;
+ import java.io.IOException;
+ 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
+   implements Map
+ {
+ 
+   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();
+     }
+     
+   }
+ 
+   private LinkedHashMap headers;
+ 
+   public Headers()
+   {
+     headers = new LinkedHashMap();
+   }
+ 
+   public int size()
+   {
+     return headers.size();
+   }
+ 
+   public boolean isEmpty()
+   {
+     return headers.isEmpty();
+   }
+ 
+   public boolean containsKey(Object key)
+   {
+     return headers.containsKey(new Header((String) key));
+   }
+ 
+   public boolean containsValue(Object value)
+   {
+     return headers.containsValue(value);
+   }
+ 
+   public Object get(Object key)
+   {
+     return headers.get(new Header((String) key));
+   }
+ 
+   /**
+    * Returns the value of the specified header as a string.
+    */
+   public String getValue(String header)
+   {
+     return (String) headers.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 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 headers.put(new Header((String) key), value);
+   }
+ 
+   public Object remove(Object key)
+   {
+     return headers.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);
+         headers.put(new Header(key), value);
+       }
+   }
+   
+   public void clear()
+   {
+     headers.clear();
+   }
+ 
+   public Set keySet()
+   {
+     Set keys = headers.keySet();
+     Set ret = new LinkedHashSet();
+     for (Iterator i = keys.iterator(); i.hasNext(); )
+       {
+         ret.add(((Header) i.next()).name);
+       }
+     return ret;
+   }
+ 
+   public Collection values()
+   {
+     return headers.values();
+   }
+ 
+   public Set entrySet()
+   {
+     Set entries = headers.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;
+   }
+ 
+   public boolean equals(Object other)
+   {
+     return headers.equals(other);
+   }
+ 
+   public int hashCode()
+   {
+     return headers.hashCode();
+   }
+ 
+   /**
+    * 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;
+     StringBuffer value = new StringBuffer();
+     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
+             value.append(line.substring(0, len - 1));
+           }
+         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) == ' ');
+             value.append(line.substring(di, len - 1));
+           }
+       }
+   }
+   
+   private void addValue(String name, String value)
+   {
+     Header key = new Header(name);
+     String old = (String) headers.get(key);
+     if (old == null)
+       {
+         headers.put(key, value);
+       }
+     else
+       {
+         headers.put(key, old + ", " + value);
+       }
+   }
+   
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/Request.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/Request.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/Request.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/Request.java	Thu Feb 17 18:26:26 2005
***************
*** 0 ****
--- 1,914 ----
+ /* Request.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.protocol.http.event.RequestEvent;
+ import gnu.java.net.BASE64;
+ import gnu.java.net.LineInputStream;
+ 
+ import java.io.InputStream;
+ import java.io.IOException;
+ 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;
+ 
+   /**
+    * The response body reader.
+    */
+   protected ResponseBodyReader responseBodyReader;
+ 
+   /**
+    * 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 the response body reader.
+    * @param responseBodyReader the handler to receive notifications of
+    * response body content
+    */
+   public void setResponseBodyReader(ResponseBodyReader responseBodyReader)
+   {
+     this.responseBodyReader = responseBodyReader;
+   }
+ 
+   /**
+    * 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;
+             // Send request
+             connection.fireRequestEvent(RequestEvent.REQUEST_SENDING, this);
+             
+             // Get socket output and input streams
+             OutputStream out = connection.getOutputStream();
+             LineInputStream in =
+               new LineInputStream(connection.getInputStream());
+             // 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.write(CRLF.getBytes(US_ASCII));
+               }
+             out.flush();
+             // Sent event
+             connection.fireRequestEvent(RequestEvent.REQUEST_SENT, this);
+             // Get response
+             response = readResponse(in);
+             int sc = response.getCode();
+             if (sc == 401 && authenticator != null)
+               {
+                 if (authenticate(response, attempts++))
+                   {
+                     retry = true;
+                   }
+               }
+             else if (sc == 100 && expectingContinue)
+               {
+                 requestHeaders.remove("Expect");
+                 setHeader("Content-Length", Integer.toString(contentLength));
+                 expectingContinue = false;
+                 retry = true;
+               }
+           }
+         while (retry);
+       }
+     catch (IOException e)
+       {
+         connection.close();
+         throw e;
+       }
+     return response;
+   }
+     
+   Response readResponse(LineInputStream in)
+     throws IOException
+   {
+     String line;
+     int len;
+     
+     // Read response status line
+     line = in.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(in);
+     notifyHeaderHandlers(responseHeaders);
+     // Construct response
+     int codeClass = code / 100;
+     Response ret = new Response(majorVersion, minorVersion, code,
+                                 codeClass, message, responseHeaders);
+     switch (code)
+       {
+       case 204:
+       case 205:
+         break;
+       default:
+         // Does response body reader want body?
+         boolean notify = (responseBodyReader != null);
+         if (notify)
+           {
+             if (!responseBodyReader.accept(this, ret))
+               {
+                 notify = false;
+               }
+           }
+         readResponseBody(ret, in, notify);
+       }
+     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);
+           }
+       }
+   }
+ 
+   void readResponseBody(Response response, InputStream in,
+                         boolean notify)
+     throws IOException
+   {
+     byte[] buffer = new byte[4096];
+     int contentLength = -1;
+     Headers trailer = null;
+     
+     String transferCoding = response.getHeader("Transfer-Encoding");
+     if ("chunked".equalsIgnoreCase(transferCoding))
+       {
+         trailer = new Headers();
+         in = new ChunkedInputStream(in, trailer);
+       } 
+     else
+       {
+         contentLength = response.getIntHeader("Content-Length");
+       }
+     String contentCoding = response.getHeader("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);
+           }
+       }
+     
+     // Persistent connections are the default in HTTP/1.1
+     boolean doClose = "close".equalsIgnoreCase(getHeader("Connection")) ||
+       "close".equalsIgnoreCase(response.getHeader("Connection")) ||
+       (connection.majorVersion == 1 && connection.minorVersion == 0) ||
+       (response.majorVersion == 1 && response.minorVersion == 0);
+     
+     int count = contentLength;
+     int len = (count > -1) ? count : buffer.length;
+     len = (len > buffer.length) ? buffer.length : len;
+     while (len > -1)
+       {
+         len = in.read(buffer, 0, len);
+         if (len < 0)
+           {
+             // EOF
+             connection.closeConnection();
+             break;
+           }
+         if (notify)
+           {
+             responseBodyReader.read(buffer, 0, len);
+           }
+         if (count > -1)
+           {
+             count -= len;
+             if (count < 1)
+               {
+                 if (doClose)
+                   {
+                     connection.closeConnection();
+                   }
+                 break;
+               }
+           }
+       }
+     if (notify)
+       {
+         responseBodyReader.close();
+       }
+     if (trailer != null)
+       {
+         response.getHeaders().putAll(trailer);
+         notifyHeaderHandlers(trailer);
+       }
+   }
+ 
+   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;
+     StringBuffer buf = new StringBuffer();
+     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);
+     StringBuffer buf = new StringBuffer();
+     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;
+     StringBuffer buf = new StringBuffer();
+     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-3.4.3/libjava/gnu/java/net/protocol/http/RequestBodyWriter.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/RequestBodyWriter.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/RequestBodyWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/RequestBodyWriter.java	Tue Jan 11 20:19:54 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/http/Response.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/Response.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/Response.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/Response.java	Tue Jan 11 20:19:54 2005
***************
*** 0 ****
--- 1,185 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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;
+ 
+   /**
+    * 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>
+    */
+   protected final int codeClass;
+ 
+   /**
+    * Human-readable text of the response.
+    */
+   protected final String message;
+ 
+   /**
+    * The response headers.
+    */
+   protected final Headers headers;
+ 
+   /**
+    * Constructs a new response with the specified parameters.
+    */
+   protected Response(int majorVersion, int minorVersion, int code,
+                      int codeClass, String message,
+                      Headers headers)
+   {
+     this.majorVersion = majorVersion;
+     this.minorVersion = minorVersion;
+     this.code = code;
+     this.codeClass = codeClass;
+     this.message = message;
+     this.headers = headers;
+   }
+ 
+   /**
+    * 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.
+    * @see #codeClass
+    */
+   public int getCodeClass()
+   {
+     return codeClass;
+   }
+ 
+   /**
+    * 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 date.
+    * @param name the header name
+    */
+   public Date getDateHeader(String name)
+   {
+     return headers.getDateValue(name);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/ResponseBodyReader.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/ResponseBodyReader.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/ResponseBodyReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/ResponseBodyReader.java	Tue Jan 11 20:19:54 2005
***************
*** 0 ****
--- 1,70 ----
+ /* ResponseBodyReader.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 receiving notification of response body content.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public interface ResponseBodyReader
+ {
+ 
+   /**
+    * Indicate whether this reader is interested in the specified response.
+    * If it returns false, it will not receive body content notifications for
+    * that response.
+    */ 
+   boolean accept(Request request, Response response);
+ 
+   /**
+    * Receive notification of body content.
+    * @param buffer the content buffer
+    * @param offset the offset within the buffer that content starts
+    * @param length the length of the content
+    */
+   void read(byte[] buffer, int offset, int length);
+ 
+   /**
+    * Notifies the reader that the end of the content was reached.
+    */
+   void close();
+   
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/ResponseHeaderHandler.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/ResponseHeaderHandler.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/ResponseHeaderHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/ResponseHeaderHandler.java	Tue Jan 11 20:19:54 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/http/SimpleCookieManager.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/SimpleCookieManager.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/SimpleCookieManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/SimpleCookieManager.java	Tue Jan 11 20:19:54 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/net/protocol/http/event/ConnectionEvent.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/event/ConnectionEvent.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/event/ConnectionEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/event/ConnectionEvent.java	Tue Jan 11 20:19:55 2005
***************
*** 0 ****
--- 1,81 ----
+ /* ConnectionEvent.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.event;
+ 
+ import java.util.EventObject;
+ 
+ /**
+  * A connection event.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class ConnectionEvent
+   extends EventObject
+ {
+ 
+   /**
+    * The connection closed event type.
+    */
+   public static final int CONNECTION_CLOSED = 0;
+   
+   /**
+    * The type of this event.
+    */
+   protected int type;
+ 
+   /**
+    * Constructs a connection event with the specified source and type.
+    */
+   public ConnectionEvent(Object source, int type)
+   {
+     super(source);
+     this.type = type;
+   }
+ 
+   /**
+    * Returns the type of this event.
+    * @see #type
+    */
+   public int getType()
+   {
+     return type;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/event/ConnectionListener.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/event/ConnectionListener.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/event/ConnectionListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/event/ConnectionListener.java	Tue Jan 11 20:19:55 2005
***************
*** 0 ****
--- 1,58 ----
+ /* ConnectionListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * A connection listener.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public interface ConnectionListener
+   extends EventListener
+ {
+ 
+   /**
+    * Callback invoked when the associated connection is closed.
+    */
+   void connectionClosed(ConnectionEvent event);
+   
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/event/RequestEvent.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/event/RequestEvent.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/event/RequestEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/event/RequestEvent.java	Tue Jan 11 20:19:55 2005
***************
*** 0 ****
--- 1,107 ----
+ /* RequestEvent.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.event;
+ 
+ import gnu.java.net.protocol.http.Request;
+ 
+ import java.util.EventObject;
+ 
+ /**
+  * A request event.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public class RequestEvent
+   extends EventObject
+ {
+ 
+   /**
+    * The request created event type.
+    */
+   public static final int REQUEST_CREATED = 0;
+   
+   /**
+    * The request sending event type.
+    */
+   public static final int REQUEST_SENDING = 1;
+   
+   /**
+    * The request sent event type.
+    */
+   public static final int REQUEST_SENT = 2;
+   
+   /**
+    * The type of this event.
+    */
+   protected int type;
+ 
+   /**
+    * The request associated with this event.
+    */
+   protected Request request;
+ 
+   /**
+    * Constructs a request event with the specified source, type, and request.
+    */
+   public RequestEvent(Object source, int type, Request request)
+   {
+     super(source);
+     this.type = type;
+     this.request = request;
+   }
+ 
+   /**
+    * Returns the type of this event.
+    * @see #type
+    */
+   public int getType()
+   {
+     return type;
+   }
+ 
+   /**
+    * Returns the request associated with this event.
+    */
+   public Request getRequest()
+   {
+     return request;
+   }
+   
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/http/event/RequestListener.java gcc-4.0.0/libjava/gnu/java/net/protocol/http/event/RequestListener.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/http/event/RequestListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/net/protocol/http/event/RequestListener.java	Tue Jan 11 20:19:55 2005
***************
*** 0 ****
--- 1,70 ----
+ /* RequestListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.event;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * A request listener.
+  *
+  * @author Chris Burdess (dog@gnu.org)
+  */
+ public interface RequestListener
+   extends EventListener
+ {
+ 
+   /**
+    * Callback invoked when a request is created from the associated
+    * connection.
+    */
+   void requestCreated(RequestEvent event);
+ 
+   /**
+    * Callback invoked when the request has been initialised with all data
+    * and before sending this data to the server.
+    */
+   void requestSending(RequestEvent event);
+ 
+   /**
+    * Callback invoked after all request data has been sent to the server.
+    */
+   void requestSent(RequestEvent event);
+   
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/jar/Connection.java gcc-4.0.0/libjava/gnu/java/net/protocol/jar/Connection.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/jar/Connection.java	Sat Dec 20 22:54:26 2003
--- gcc-4.0.0/libjava/gnu/java/net/protocol/jar/Connection.java	Thu Feb 10 02:43:45 2005
***************
*** 1,5 ****
  /* Connection - jar url connection for java.net
!    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Connection - jar url connection for java.net
!    Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.net.MalformedURLException;
*** 49,63 ****
  import java.net.ProtocolException;
  import java.net.URL;
  import java.net.URLConnection;
! import java.util.Map;
! import java.util.Vector;
  import java.util.HashMap;
  import java.util.Hashtable;
! import java.util.jar.JarFile;
  import java.util.jar.JarEntry;
  import java.util.jar.JarInputStream;
- import java.util.zip.ZipFile;
  import java.util.zip.ZipEntry;
  
  /**
   * This subclass of java.net.JarURLConnection models a URLConnection via
--- 49,64 ----
  import java.net.ProtocolException;
  import java.net.URL;
  import java.net.URLConnection;
! import java.text.SimpleDateFormat;
! import java.util.Date;
  import java.util.HashMap;
  import java.util.Hashtable;
! import java.util.Locale;
  import java.util.jar.JarEntry;
+ import java.util.jar.JarFile;
  import java.util.jar.JarInputStream;
  import java.util.zip.ZipEntry;
+ import java.util.zip.ZipFile;
  
  /**
   * This subclass of java.net.JarURLConnection models a URLConnection via
*************** import java.util.zip.ZipEntry;
*** 68,77 ****
  public final class Connection extends JarURLConnection
  {
    private static Hashtable file_cache = new Hashtable();
    private JarFile jar_file;
  
    /**
!    * Cached JarURLConnection objects .
     */
    static HashMap connectionCache = new HashMap();
  
--- 69,86 ----
  public final class Connection extends JarURLConnection
  {
    private static Hashtable file_cache = new Hashtable();
+ 
+   /**
+    * HTTP-style DateFormat, used to format the last-modified header.
+    */
+   private static SimpleDateFormat dateFormat
+     = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'",
+                            new Locale ("En", "Us", "Unix"));
+ 
    private JarFile jar_file;
  
    /**
!    * Cached JarURLConnection objects.
     */
    static HashMap connectionCache = new HashMap();
  
*************** public final class Connection extends Ja
*** 213,348 ****
  	  fos.write(buf, 0, len);
          fos.close();
  	// Always verify the Manifest, open read only and delete when done.
! 	// XXX ZipFile.OPEN_DELETE not yet implemented.
! 	// jf = new JarFile(f, true, ZipFile.OPEN_READ | ZipFile.OPEN_DELETE);
! 	jar_file = new JarFile (f, true, ZipFile.OPEN_READ);
        }
  
      return jar_file;
    }
  
!   // Steal and borrow from protocol/file/Connection.java
! 
!   private Hashtable hdrHash = new Hashtable();
!   private Vector hdrVec = new Vector();
!   private boolean gotHeaders = false;
! 
!   // Override default method in URLConnection.
!   public String getHeaderField(String name)
    {
      try
        {
! 	getHeaders();
!       }
!     catch (IOException x)
!       {
! 	return null;
!       }
!     return (String) hdrHash.get(name.toLowerCase());
!   }
  
!   // Override default method in URLConnection.
!   public Map getHeaderFields()
!   {
!     try
!       {
!         getHeaders();
        }
!     catch (IOException x)
        {
!         return null;
        }
!     return hdrHash;
    }
  
!   // Override default method in URLConnection.
!   public String getHeaderField(int n)
    {
      try
        {
! 	getHeaders();
        }
!     catch (IOException x)
        {
! 	return null;
        }
-     if (n < hdrVec.size())
-       return getField((String) hdrVec.elementAt(n));
- 
-     return null;
    }
  
!   // Override default method in URLConnection.
!   public String getHeaderFieldKey(int n)
    {
      try
        {
! 	getHeaders();
!       }
!     catch (IOException x)
!       {
! 	return null;
        }
!     if (n < hdrVec.size())
!       return getKey((String) hdrVec.elementAt(n));
! 
!     return null;
!   }
! 
!   private String getKey(String str)
!   {
!     if (str == null)
!       return null;
!     int index = str.indexOf(':');
!     if (index >= 0)
!       return str.substring(0, index);
!     else
!       return null;
!   }
! 
!   private String getField(String str)
!   {
!     if (str == null)
!       return null;
!     int index = str.indexOf(':');
!     if (index >= 0)
!       return str.substring(index + 1).trim();
!     else
!       return str;
!   }
! 
!   private void getHeaders() throws IOException
!   {
!     if (gotHeaders)
!       return;
!     gotHeaders = true;
! 
!     connect();
! 
!     // Yes, it is overkill to use the hash table and vector here since
!     // we're only putting one header in the file, but in case we need
!     // to add others later and for consistency, we'll implement it this way.
! 
!     // Add the only header we know about right now:  Content-length.
!     long len = -1;
! 
!     if (getEntryName() == null)
!       if (jarFileURLConnection != null)
! 	len = jarFileURLConnection.getContentLength ();
!     else
        {
! 	JarEntry entry = getJarEntry();
! 	if (entry != null)
! 	  len = entry.getSize ();
        }
- 
-     String line = "Content-length: " + len;
-     hdrVec.addElement(line);
- 
-     // The key will never be null in this scenario since we build up the
-     // headers ourselves.  If we ever rely on getting a header from somewhere
-     // else, then we may have to check if the result of getKey() is null.
-     String key = getKey(line);
-     hdrHash.put(key.toLowerCase(), Long.toString(len));
    }
  }
--- 222,287 ----
  	  fos.write(buf, 0, len);
          fos.close();
  	// Always verify the Manifest, open read only and delete when done.
! 	jar_file = new JarFile (f, true,
! 				ZipFile.OPEN_READ | ZipFile.OPEN_DELETE);
        }
  
      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"))
! 	  {
! 	    synchronized (dateFormat)
! 	      {
!         	return dateFormat.format(new Date(getJarEntry().getTime()));
! 	      }
! 	  }
        }
!     catch (IOException e)
        {
!         // Fall through.
        }
!     return null;
    }
  
!   public int getContentLength()
    {
+     if (!connected)
+       return -1;
+ 
      try
        {
!         return (int) getJarEntry().getSize();
        }
!     catch (IOException e)
        {
! 	return -1;
        }
    }
  
!   public long getLastModified()
    {
+     if (!connected)
+       return -1;
+ 
      try
        {
! 	return getJarEntry().getTime();
        }
!     catch (IOException e)
        {
! 	return -1;
        }
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/net/protocol/jar/Handler.java gcc-4.0.0/libjava/gnu/java/net/protocol/jar/Handler.java
*** gcc-3.4.3/libjava/gnu/java/net/protocol/jar/Handler.java	Sat Dec 20 12:28:25 2003
--- gcc-4.0.0/libjava/gnu/java/net/protocol/jar/Handler.java	Fri Feb 20 17:19:03 2004
*************** public class Handler extends URLStreamHa
*** 86,93 ****
      // doing anything.
      String file = url.getFile();
      
!     if (file != null
!         && file != "")
        { //has context url
  	url_string = url_string.substring (start, end);
          if (url_string.startsWith("/"))
--- 86,92 ----
      // doing anything.
      String file = url.getFile();
      
!     if (!file.equals(""))
        { //has context url
  	url_string = url_string.substring (start, end);
          if (url_string.startsWith("/"))
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/ChannelReader.java gcc-4.0.0/libjava/gnu/java/nio/ChannelReader.java
*** gcc-3.4.3/libjava/gnu/java/nio/ChannelReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/nio/ChannelReader.java	Wed Feb 23 08:26:35 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., 59 Temple Place, Suite 330, Boston, MA
+  02111-1307 USA.
+ 
+  Linking this library statically or dynamically with other modules is
+  making a combined work based on this library.  Thus, the terms and
+  conditions of the GNU General Public License cover the whole
+  combination.
+ 
+  As a special exception, the copyright holders of this library give you
+  permission to link this library with independent modules to produce an
+  executable, regardless of the license terms of these independent
+  modules, and to copy and distribute the resulting executable under
+  terms of your choice, provided that you also meet, for each linked
+  independent module, the terms and conditions of the license of that
+  module.  An independent module is a module which is not derived from
+  or based on this library.  If you modify this library, you may extend
+  this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/nio/DatagramChannelImpl.java gcc-4.0.0/libjava/gnu/java/nio/DatagramChannelImpl.java
*** gcc-3.4.3/libjava/gnu/java/nio/DatagramChannelImpl.java	Tue Feb  3 21:53:54 2004
--- gcc-4.0.0/libjava/gnu/java/nio/DatagramChannelImpl.java	Thu Feb 26 17:17:19 2004
***************
*** 1,5 ****
  /* DatagramChannelImpl.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DatagramChannelImpl.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,47 ****
  
  package gnu.java.nio;
  
  import java.io.IOException;
  import java.net.DatagramPacket;
  import java.net.DatagramSocket;
! import gnu.java.net.PlainDatagramSocketImpl;
  import java.net.SocketAddress;
  import java.net.SocketTimeoutException;
  import java.nio.ByteBuffer;
--- 38,48 ----
  
  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;
*************** public final class DatagramChannelImpl e
*** 256,261 ****
--- 257,266 ----
      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();
*************** public final class DatagramChannelImpl e
*** 289,295 ****
        
      if (src.hasArray())
        {
!        src.position (src.position() + len);
        }
  
      return len;
--- 294,300 ----
        
      if (src.hasArray())
        {
! 	src.position (src.position() + len);
        }
  
      return len;
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/FileLockImpl.java gcc-4.0.0/libjava/gnu/java/nio/FileLockImpl.java
*** gcc-3.4.3/libjava/gnu/java/nio/FileLockImpl.java	Tue Dec  2 15:03:21 2003
--- gcc-4.0.0/libjava/gnu/java/nio/FileLockImpl.java	Fri Nov 12 19:15:25 2004
***************
*** 1,5 ****
! /* FileChannelImpl.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* FileLockImpl.java -- 
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,48 ****
  
  package gnu.java.nio;
  
! import java.io.FileDescriptor;
  import java.io.IOException;
- import java.nio.channels.FileChannel;
  import java.nio.channels.FileLock;
- import gnu.classpath.Configuration;
  
  /**
   * @author Michael Koch
--- 38,47 ----
  
  package gnu.java.nio;
  
! import gnu.java.nio.channels.FileChannelImpl;
! 
  import java.io.IOException;
  import java.nio.channels.FileLock;
  
  /**
   * @author Michael Koch
*************** import gnu.classpath.Configuration;
*** 50,86 ****
   */
  public class FileLockImpl extends FileLock
  {
!   static
!   {
!     // load the shared library needed for native methods.
!     if (Configuration.INIT_LOAD_LIBRARY)
!       {
!         System.loadLibrary ("javanio");
!       }
!   }
!   
!   private FileDescriptor fd;
!   private boolean released;
    
!   public FileLockImpl (FileDescriptor fd, FileChannel channel, long position,
                         long size, boolean shared)
    {
      super (channel, position, size, shared);
!     this.fd = fd;
!     this.released = false;
    }
    
    public boolean isValid ()
    {
!     return (released
!             || !channel ().isOpen ());
    }
  
-   private native void releaseImpl () throws IOException;
- 
    public synchronized void release () throws IOException
    {
!     releaseImpl ();
!     released = true;
    }
  }
--- 49,82 ----
   */
  public class FileLockImpl extends FileLock
  {
!   private FileChannelImpl ch;
    
!   public FileLockImpl (FileChannelImpl channel, long position,
                         long size, boolean shared)
    {
      super (channel, position, size, shared);
!     ch = channel;
!   }
! 
!   protected void finalize()
!   {
!     try
!       {
! 	release();
!       }
!     catch (IOException e)
!       {
! 	// Ignore this.
!       }
    }
    
    public boolean isValid ()
    {
!     return channel().isOpen();
    }
  
    public synchronized void release () throws IOException
    {
!     ch.unlock(position(), size());
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/NIODatagramSocket.java gcc-4.0.0/libjava/gnu/java/nio/NIODatagramSocket.java
*** gcc-3.4.3/libjava/gnu/java/nio/NIODatagramSocket.java	Sat Nov 22 15:13:01 2003
--- gcc-4.0.0/libjava/gnu/java/nio/NIODatagramSocket.java	Sat Oct 16 18:32:21 2004
*************** exception statement from your version. *
*** 39,45 ****
  package gnu.java.nio;
  
  import gnu.java.net.PlainDatagramSocketImpl;
! import java.io.IOException;
  import java.net.DatagramSocket;
  import java.nio.channels.DatagramChannel;
  
--- 39,45 ----
  package gnu.java.nio;
  
  import gnu.java.net.PlainDatagramSocketImpl;
! 
  import java.net.DatagramSocket;
  import java.nio.channels.DatagramChannel;
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/NIOServerSocket.java gcc-4.0.0/libjava/gnu/java/nio/NIOServerSocket.java
*** gcc-3.4.3/libjava/gnu/java/nio/NIOServerSocket.java	Thu Feb  5 15:59:18 2004
--- gcc-4.0.0/libjava/gnu/java/nio/NIOServerSocket.java	Wed Nov 24 10:44:15 2004
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package gnu.java.nio;
  
  import gnu.java.net.PlainSocketImpl;
+ 
  import java.io.IOException;
  import java.net.ServerSocket;
  import java.net.Socket;
*************** import java.nio.channels.ServerSocketCha
*** 46,52 ****
  import java.nio.channels.SocketChannel;
  
  /**
!  * @author Michael Koch
   */
  public final class NIOServerSocket extends ServerSocket
  {
--- 47,53 ----
  import java.nio.channels.SocketChannel;
  
  /**
!  * @author Michael Koch (konqueror@gmx.de)
   */
  public final class NIOServerSocket extends ServerSocket
  {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/PipeImpl.java gcc-4.0.0/libjava/gnu/java/nio/PipeImpl.java
*** gcc-3.4.3/libjava/gnu/java/nio/PipeImpl.java	Sun Oct 12 13:39:07 2003
--- gcc-4.0.0/libjava/gnu/java/nio/PipeImpl.java	Thu Feb 17 18:26:27 2005
***************
*** 1,5 ****
  /* PipeImpl.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PipeImpl.java -- 
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.nio.channels.spi.SelectorPro
*** 44,50 ****
  
  class PipeImpl extends Pipe
  {
!   public final class SourceChannelImpl extends Pipe.SourceChannel
    {
      private int native_fd;
      
--- 44,50 ----
  
  class PipeImpl extends Pipe
  {
!   public static final class SourceChannelImpl extends Pipe.SourceChannel
    {
      private int native_fd;
      
*************** class PipeImpl extends Pipe
*** 79,88 ****
        return read (srcs, 0, srcs.length);
      }
  
!     public final long read (ByteBuffer[] srcs, int offset, int len)
        throws IOException
      {
!       throw new Error ("Not implemented");
      }
  
      public final int getNativeFD()
--- 79,101 ----
        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()
*************** class PipeImpl extends Pipe
*** 91,97 ****
      }
    }
  
!   public final class SinkChannelImpl extends Pipe.SinkChannel
    {
      private int native_fd;
      
--- 104,110 ----
      }
    }
  
!   public static final class SinkChannelImpl extends Pipe.SinkChannel
    {
      private int native_fd;
      
*************** class PipeImpl extends Pipe
*** 120,135 ****
        throw new Error ("Not implemented");
      }
  
!     public final long write (ByteBuffer[] dsts)
        throws IOException
      {
!       return write (dsts, 0, dsts.length);
      }
  
!     public final long write (ByteBuffer[] dsts, int offset, int len)
        throws IOException
      {
!       throw new Error ("Not implemented");
      }
  
      public final int getNativeFD()
--- 133,159 ----
        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()
*************** class PipeImpl extends Pipe
*** 145,156 ****
      throws IOException
    {
      super();
!     nativeInit (provider);
    }
  
-   private native void nativeInit (SelectorProvider provider)
-     throws IOException;
-     
    public Pipe.SinkChannel sink()
    {
      return sink;
--- 169,177 ----
      throws IOException
    {
      super();
!     VMPipe.init (this, provider);
    }
  
    public Pipe.SinkChannel sink()
    {
      return sink;
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/SelectorImpl.java gcc-4.0.0/libjava/gnu/java/nio/SelectorImpl.java
*** gcc-3.4.3/libjava/gnu/java/nio/SelectorImpl.java	Sat Dec 20 15:33:24 2003
--- gcc-4.0.0/libjava/gnu/java/nio/SelectorImpl.java	Sat Feb 19 09:10:37 2005
***************
*** 1,5 ****
  /* SelectorImpl.java -- 
!    Copyright (C) 2002, 2003  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SelectorImpl.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  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.util.Collections;
*** 49,67 ****
  import java.util.HashSet;
  import java.util.Iterator;
  import java.util.Set;
- import gnu.classpath.Configuration;
  
  public class SelectorImpl extends AbstractSelector
  {
-   static
-   {
-     // load the shared library needed for native methods.
-     if (Configuration.INIT_LOAD_LIBRARY)
-       {
-         System.loadLibrary ("javanio");
-       }
-   }
-   
    private Set keys;
    private Set selected;
  
--- 50,58 ----
*************** public class SelectorImpl extends Abstra
*** 140,150 ****
      return select (0);
    }
  
-   // A timeout value of 0 means block forever.
-   private static native int implSelect (int[] read, int[] write,
-                                         int[] except, long timeout)
-     throws IOException;
- 
    private final int[] getFDsAsArray (int ops)
    {
      int[] result;
--- 131,136 ----
*************** public class SelectorImpl extends Abstra
*** 237,243 ****
              try
                {
                  begin();
!                 result = implSelect (read, write, except, timeout);
                }
              finally
                {
--- 223,229 ----
              try
                {
                  begin();
!                 result = VMSelector.select (read, write, except, timeout);
                }
              finally
                {
*************** public class SelectorImpl extends Abstra
*** 261,267 ****
                  if (unhandledWakeup)
                    {
                      unhandledWakeup = false;
!                     selectThread.interrupted ();
                    }
                  selectThread = null;
                }
--- 247,253 ----
                  if (unhandledWakeup)
                    {
                      unhandledWakeup = false;
!                     Thread.interrupted ();
                    }
                  selectThread = null;
                }
*************** public class SelectorImpl extends Abstra
*** 388,411 ****
      SelectionKeyImpl result;
      
      if (ch instanceof SocketChannelImpl)
!       {
!         SocketChannelImpl sc = (SocketChannelImpl) ch;
!         result = new SocketChannelSelectionKey (ch, this);
!       }
      else if (ch instanceof DatagramChannelImpl)
!       {
!         DatagramChannelImpl dc = (DatagramChannelImpl) ch;
!         result = new DatagramChannelSelectionKey (ch, this);
!       }
      else if (ch instanceof ServerSocketChannelImpl)
!       {
!         ServerSocketChannelImpl ssc = (ServerSocketChannelImpl) ch;
!         result = new ServerSocketChannelSelectionKey (ch, this);
!       }
      else
!       {
!         throw new InternalError ("No known channel type");
!       }
  
      synchronized (keys)
        {
--- 374,386 ----
      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)
        {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/ServerSocketChannelImpl.java gcc-4.0.0/libjava/gnu/java/nio/ServerSocketChannelImpl.java
*** gcc-3.4.3/libjava/gnu/java/nio/ServerSocketChannelImpl.java	Tue Feb  3 14:50:59 2004
--- gcc-4.0.0/libjava/gnu/java/nio/ServerSocketChannelImpl.java	Sat Oct 16 18:32:21 2004
***************
*** 1,5 ****
  /* ServerSocketChannelImpl.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ServerSocketChannelImpl.java -- 
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,50 ****
  
  package gnu.java.nio;
  
- import gnu.java.net.PlainSocketImpl;
  import java.io.IOException;
- import java.net.InetSocketAddress;
  import java.net.ServerSocket;
- import java.net.Socket;
- import java.net.SocketAddress;
- import java.net.SocketException;
  import java.net.SocketTimeoutException;
  import java.nio.channels.ClosedChannelException;
  import java.nio.channels.NotYetBoundException;
--- 38,45 ----
*************** public final class ServerSocketChannelIm
*** 69,75 ****
    {
      return serverSocket.getPlainSocketImpl().getNativeFD();
    }
!  
    public void finalizer()
    {
      if (connected)
--- 64,70 ----
    {
      return serverSocket.getPlainSocketImpl().getNativeFD();
    }
!   
    public void finalizer()
    {
      if (connected)
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/SocketChannelImpl.java gcc-4.0.0/libjava/gnu/java/nio/SocketChannelImpl.java
*** gcc-3.4.3/libjava/gnu/java/nio/SocketChannelImpl.java	Thu Feb  5 15:59:18 2004
--- gcc-4.0.0/libjava/gnu/java/nio/SocketChannelImpl.java	Mon Nov 22 20:32:56 2004
*************** exception statement from your version. *
*** 38,49 ****
  
  package gnu.java.nio;
  
! import java.io.InputStream;
  import java.io.IOException;
  import java.io.OutputStream;
- import java.net.InetAddress;
  import java.net.InetSocketAddress;
- import gnu.java.net.PlainSocketImpl;
  import java.net.Socket;
  import java.net.SocketAddress;
  import java.net.SocketTimeoutException;
--- 38,49 ----
  
  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.channels.ClosedChannelEx
*** 53,65 ****
  import java.nio.channels.ConnectionPendingException;
  import java.nio.channels.NoConnectionPendingException;
  import java.nio.channels.NotYetConnectedException;
  import java.nio.channels.UnresolvedAddressException;
  import java.nio.channels.UnsupportedAddressTypeException;
- import java.nio.channels.SocketChannel;
- import java.nio.channels.Selector;
- import java.nio.channels.SelectionKey;
  import java.nio.channels.spi.SelectorProvider;
- import gnu.classpath.Configuration;
  
  public final class SocketChannelImpl extends SocketChannel
  {
--- 53,64 ----
  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
  {
*************** public final class SocketChannelImpl ext
*** 183,189 ****
      // FIXME: Handle blocking/non-blocking mode.
  
      Selector selector = provider().openSelector();
!     register (selector, SelectionKey.OP_CONNECT);
  
      if (isBlocking())
        {
--- 182,188 ----
      // FIXME: Handle blocking/non-blocking mode.
  
      Selector selector = provider().openSelector();
!     register(selector, SelectionKey.OP_CONNECT);
  
      if (isBlocking())
        {
*************** public final class SocketChannelImpl ext
*** 217,223 ****
      return socket;
    }
  
!   public int read (ByteBuffer dst) throws IOException
    {
      if (!isConnected())
        throw new NotYetConnectedException();
--- 216,222 ----
      return socket;
    }
  
!   public int read(ByteBuffer dst) throws IOException
    {
      if (!isConnected())
        throw new NotYetConnectedException();
*************** public final class SocketChannelImpl ext
*** 228,239 ****
      int available = input.available();
      int len = dst.capacity() - dst.position();
  	
!     if (available == 0)
        return 0;
      
-     if (len > available)
-       len = available;
- 
      if (dst.hasArray())
        {
          offset = dst.arrayOffset() + dst.position();
--- 227,235 ----
      int available = input.available();
      int len = dst.capacity() - dst.position();
  	
!     if ((! isBlocking()) && available == 0)
        return 0;
      
      if (dst.hasArray())
        {
          offset = dst.arrayOffset() + dst.position();
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/VMPipe.java gcc-4.0.0/libjava/gnu/java/nio/VMPipe.java
*** gcc-3.4.3/libjava/gnu/java/nio/VMPipe.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/nio/VMPipe.java	Fri Sep 24 06:41:57 2004
***************
*** 0 ****
--- 1,64 ----
+ /* VMPipe.java -- Reference implementation for VM hooks used by PipeImpl
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.spi.SelectorProvider;
+ import gnu.classpath.Configuration;
+ 
+ /**
+  * This class contains the native methods for gnu.java.nio.PipeImpl
+  * As such, it needs help from the VM.
+  *
+  * @author Patrik Reali
+  */
+ final class VMPipe
+ {
+ 
+   static
+   {
+     // load the shared library needed for native methods.
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary ("javanio");
+       }
+   }
+ 
+   static native void init(PipeImpl self, SelectorProvider provider)
+     throws IOException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/VMSelector.java gcc-4.0.0/libjava/gnu/java/nio/VMSelector.java
*** gcc-3.4.3/libjava/gnu/java/nio/VMSelector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/nio/VMSelector.java	Fri Sep 24 06:41:57 2004
***************
*** 0 ****
--- 1,59 ----
+ /* VMSelector.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.classpath.Configuration;
+ import java.io.IOException;
+ 
+ public final class VMSelector
+ {
+   static
+   {
+     // load the shared library needed for native methods.
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary ("javanio");
+       }
+   }
+   
+   // A timeout value of 0 means block forever.
+   static native int select (int[] read, int[] write,
+                                         int[] except, long timeout)
+     throws IOException;
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/channels/FileChannelImpl.java gcc-4.0.0/libjava/gnu/java/nio/channels/FileChannelImpl.java
*** gcc-3.4.3/libjava/gnu/java/nio/channels/FileChannelImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/nio/channels/FileChannelImpl.java	Thu Mar 10 16:09:35 2005
***************
*** 0 ****
--- 1,507 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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;
+ 
+   private static native void init();
+ 
+   static
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+         System.loadLibrary("javanio");
+       }
+     
+     init();
+   }
+ 
+   /**
+    * 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 long pos;
+   private int mode;
+ 
+   public FileChannelImpl ()
+   {
+   }
+ 
+   /* Open a file.  MODE is a combination of the above mode flags. */
+   public FileChannelImpl (String path, int mode) throws FileNotFoundException
+   {
+     fd = open (path, mode);
+     this.mode = mode;
+   }
+ 
+   /* Used by init() (native code) */
+   FileChannelImpl (int fd, int mode)
+   {
+     this.fd = fd;
+     this.mode = mode;
+   }
+ 
+   public static FileChannelImpl in;
+   public static FileChannelImpl out;
+   public static FileChannelImpl err;
+ 
+   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
+   {
+     this.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 ();
+     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 ();
+ 
+     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 ();
+     
+     if (position < 0 || size < 0 || size > Integer.MAX_VALUE)
+       throw new IllegalArgumentException ();
+     return mapImpl(nmode, position, (int) size);
+   }
+ 
+   /**
+    * msync with the disk
+    */
+   public void force (boolean metaData) throws IOException
+   {
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+   }
+ 
+   // 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 ();
+ 
+     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 ();
+ 
+     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;
+   }
+ 
+   public FileLock tryLock (long position, long size, boolean shared)
+     throws IOException
+   {
+     if (position < 0
+         || size < 0)
+       throw new IllegalArgumentException ();
+ 
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+ 
+     if (shared && (mode & READ) == 0)
+       throw new NonReadableChannelException ();
+ 	
+     if (!shared && (mode & WRITE) == 0)
+       throw new NonWritableChannelException ();
+ 	
+     boolean completed = false;
+     
+     try
+       {
+ 	begin();
+         lock(position, size, shared, true);
+ 	completed = true;
+ 	return new FileLockImpl(this, position, size, shared);
+       }
+     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
+   {
+     if (position < 0
+         || size < 0)
+       throw new IllegalArgumentException ();
+ 
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+ 
+     boolean completed = false;
+ 
+     try
+       {
+ 	boolean lockable = lock(position, size, shared, false);
+ 	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 ();
+ 
+     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 ();
+ 
+     if (!isOpen ())
+       throw new ClosedChannelException ();
+ 
+     if ((mode & WRITE) == 0)
+        throw new NonWritableChannelException ();
+ 
+     if (size < size ())
+       implTruncate (size);
+ 
+     return this;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/channels/natFileChannelEcos.cc gcc-4.0.0/libjava/gnu/java/nio/channels/natFileChannelEcos.cc
*** gcc-3.4.3/libjava/gnu/java/nio/channels/natFileChannelEcos.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/nio/channels/natFileChannelEcos.cc	Sat Mar 20 06:06:12 2004
***************
*** 0 ****
--- 1,192 ----
+ // natFileDescriptor.cc - Native part of FileDescriptor class.
+ 
+ /* Copyright (C) 1998, 1999, 2001, 2002  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #include <config.h>
+ 
+ #include <errno.h>
+ #include <string.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/param.h>
+ 
+ #include <gcj/cni.h>
+ #include <jvm.h>
+ #include <java/io/FileDescriptor.h>
+ #include <java/io/SyncFailedException.h>
+ #include <java/io/IOException.h>
+ #include <java/io/EOFException.h>
+ #include <java/lang/ArrayIndexOutOfBoundsException.h>
+ #include <java/lang/NullPointerException.h>
+ #include <java/lang/String.h>
+ #include <java/io/FileNotFoundException.h>
+ #include <gnu/java/nio/MappedByteBufferImpl.h>
+ #include <java/nio/channels/FileChannel.h>
+ #include <java/nio/channels/FileLock.h>
+ #include <gnu/java/nio/channels/FileChannelImpl.h>
+ 
+ using gnu::gcj::RawData;
+ using java::io::IOException;
+ using gnu::java::nio::MappedByteBufferImpl;
+ using java::io::InterruptedIOException;
+ using java::io::FileNotFoundException;
+ using java::lang::ArrayIndexOutOfBoundsException;
+ using java::lang::NullPointerException;
+ using gnu::java::nio::channels::FileChannelImpl;
+ 
+ extern "C" void diag_write_char (char c);
+ 
+ static void 
+ diag_write (char *data, int len)
+ {
+   while (len > 0)
+     {
+       diag_write_char (*data++);
+       len--;
+     }
+ }
+ 
+ #define NO_FSYNC_MESSAGE "sync unsupported"
+ 
+ void
+ FileChannelImpl::init(void)
+ {
+   in = new FileChannelImpl((jint) 0, FileChannelImpl::READ);
+   out = new FileChannelImpl((jint) 1, FileChannelImpl::WRITE);
+   err = new FileChannelImpl((jint) 2, FileChannelImpl::WRITE);
+ }
+ 
+ #if 0
+ jboolean
+ FileChannelImpl::valid (void)
+ {
+   return true;
+ }
+ 
+ void
+ FileChannelImpl::sync (void)
+ {
+   // Some files don't support fsync.  We don't bother reporting these
+   // as errors.
+ #ifdef HAVE_FSYNC
+ #else
+   throw new SyncFailedException (JvNewStringLatin1 (NO_FSYNC_MESSAGE));
+ #endif
+ }
+ #endif
+ 
+ jint
+ FileChannelImpl::open (jstring, jint)
+ {
+   return fd;
+ }
+ 
+ void
+ FileChannelImpl::write (jint)
+ {
+   char d = (char) b;
+   ::diag_write (&d, 1);
+ }
+ 
+ void
+ FileChannelImpl::write (jbyteArray b, jint offset, jint len)
+ {
+   if (! b)
+     throw new NullPointerException;
+   if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
+     throw new ArrayIndexOutOfBoundsException;
+   char *bytes = (char *)elements (b) + offset;
+   ::diag_write (bytes, len);
+ }
+ 
+ void
+ FileChannelImpl::implCloseChannel (void)
+ {
+ }
+ 
+ void
+ FileChannelImpl::implTruncate (jlong)
+ {
+ }
+ 
+ void
+ FileChannelImpl::seek (jlong)
+ {
+ }
+ 
+ jlong
+ FileChannelImpl::size (void)
+ {
+   return 0;
+ }
+ 
+ jlong
+ FileChannelImpl::implPosition (void)
+ {
+   return 0;
+ }
+ 
+ jint
+ FileChannelImpl::read (void)
+ {
+   return 0;
+ }
+ 
+ jint
+ FileChannelImpl::read (jbyteArray buffer, jint offset, jint count)
+ {
+   return 0;
+ }
+ 
+ jint
+ FileChannelImpl::available (void)
+ {
+   return 0;
+ }
+ 
+ jboolean
+ FileChannelImpl::lock (jlong, jlong, jboolean, jboolean)
+ {
+   throw new IOException (JvNewStringLatin1
+     ("gnu.java.nio.FileChannelImpl.lock() not implemented"));
+ }
+ 
+ void
+ FileChannelImpl::unlock (jlong, jlong)
+ {
+   throw new IOException (JvNewStringLatin1
+     ("gnu.java.nio.channels.FileChannelImpl.unlock() not implemented"));
+ }
+ 
+ java::nio::MappedByteBuffer *
+ FileChannelImpl::mapImpl (jchar, jlong, jint)
+ {
+   return NULL;
+ }
+ 
+ void
+ MappedByteBufferImpl::unmapImpl ()
+ {
+ }
+ 
+ void
+ MappedByteBufferImpl::loadImpl ()
+ {
+ }
+ 
+ jboolean
+ MappedByteBufferImpl::isLoadedImpl ()
+ {
+   return true;
+ }
+ 
+ void
+ MappedByteBufferImpl::forceImpl ()
+ {
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/channels/natFileChannelPosix.cc gcc-4.0.0/libjava/gnu/java/nio/channels/natFileChannelPosix.cc
*** gcc-3.4.3/libjava/gnu/java/nio/channels/natFileChannelPosix.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/nio/channels/natFileChannelPosix.cc	Fri Nov 12 19:15:27 2004
***************
*** 0 ****
--- 1,545 ----
+ 
+ // natFileChannelImplPosix.cc - Native part of FileChannelImpl class.
+ 
+ /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #include <config.h>
+ #include <platform.h>
+ 
+ #include <gcj/cni.h>
+ #include <gcj/javaprims.h>
+ #include <jvm.h>
+ 
+ #include "posix.h"
+ 
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <sys/stat.h>
+ #include <sys/param.h>
+ 
+ #include <gnu/gcj/RawData.h>
+ #include <gnu/java/nio/FileLockImpl.h>
+ #include <gnu/java/nio/channels/FileChannelImpl.h>
+ #include <java/io/FileNotFoundException.h>
+ #include <java/io/IOException.h>
+ #include <java/io/SyncFailedException.h>
+ #include <java/io/InterruptedIOException.h>
+ #include <java/io/EOFException.h>
+ #include <java/lang/ArrayIndexOutOfBoundsException.h>
+ #include <java/lang/NullPointerException.h>
+ #include <java/lang/System.h>
+ #include <java/lang/String.h>
+ #include <java/lang/Thread.h>
+ #include <java/nio/ByteBuffer.h>
+ #include <java/nio/MappedByteBufferImpl.h>
+ #include <java/nio/channels/FileChannel.h>
+ #include <java/nio/channels/FileLock.h>
+ #include <gnu/java/nio/channels/FileChannelImpl.h>
+ 
+ #ifdef HAVE_SYS_IOCTL_H
+ #define BSD_COMP /* Get FIONREAD on Solaris2. */
+ #include <sys/ioctl.h>
+ #endif
+ 
+ // Pick up FIONREAD on Solaris 2.5.
+ #ifdef HAVE_SYS_FILIO_H
+ #include <sys/filio.h>
+ #endif
+ 
+ #ifdef HAVE_MMAP
+ #include <sys/mman.h>
+ 
+ // Use overload resolution to find out the argument types.
+ // E.g. Solaris 2.6 uses different argument types for munmap and msync.
+ // This is in case _POSIX_C_SOURCES is smaller than 3.
+ 
+ template <typename T_implPtr, typename T_implLen>
+ static inline int
+ munmap_adaptor(int (*munmap)(T_implPtr caddr, T_implLen sizet),
+ 		 void* caddr, size_t sizet)
+ {
+   return munmap ((T_implPtr) caddr, (T_implLen) sizet);
+ }
+ 
+ template <typename T_implPtr, typename T_implLen, typename T_msync>
+ static inline int
+ msync_adaptor(int (*msync)(T_implPtr caddr, T_implLen sizet, T_msync msynct),
+ 	      void* caddr, size_t sizet, int msynct)
+ {
+   return msync ((T_implPtr) caddr, (T_implLen) sizet, (T_msync) msynct);
+ }
+ #endif
+ 
+ using gnu::gcj::RawData;
+ using java::io::IOException;
+ using java::nio::MappedByteBufferImpl;
+ using java::io::InterruptedIOException;
+ using java::io::FileNotFoundException;
+ using java::lang::ArrayIndexOutOfBoundsException;
+ using gnu::java::nio::channels::FileChannelImpl;
+ 
+ #define NO_FSYNC_MESSAGE "sync unsupported"
+ 
+ void
+ FileChannelImpl::init(void)
+ {
+   in = new FileChannelImpl((jint) 0, FileChannelImpl::READ);
+   out = new FileChannelImpl((jint) 1, FileChannelImpl::WRITE);
+   err = new FileChannelImpl((jint) 2, FileChannelImpl::WRITE);
+ }
+ 
+ #if 0
+ jboolean
+ FileChannelImpl::valid (void)
+ {
+   struct stat sb;
+   return fd >= 0 && ::fstat (fd, &sb) == 0;
+ }
+ 
+ void
+ FileChannelImpl::sync (void)
+ {
+   // Some files don't support fsync.  We don't bother reporting these
+   // as errors.
+ #ifdef HAVE_FSYNC
+   if (::fsync (fd) && errno != EROFS && errno != EINVAL)
+     throw new SyncFailedException (JvNewStringLatin1 (strerror (errno)));
+ #else
+   throw new SyncFailedException (JvNewStringLatin1 (NO_FSYNC_MESSAGE));
+ #endif
+ }
+ #endif
+ 
+ jint
+ FileChannelImpl::open (jstring path, jint jflags)
+ {
+   fd = -1;
+   char *buf = (char *) _Jv_AllocBytes (_Jv_GetStringUTFLength (path) + 1);
+   jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
+   buf[total] = '\0';
+   int flags = 0;
+ #ifdef O_BINARY
+   flags |= O_BINARY;
+ #endif
+ 
+   JvAssert ((jflags & READ) || (jflags & WRITE));
+   int mode = 0666;
+   if ((jflags & READ) && (jflags & WRITE))
+     flags |= O_RDWR | O_CREAT;
+   else if ((jflags & READ))
+     flags |= O_RDONLY;
+   else
+     {
+       flags |= O_WRONLY | O_CREAT;
+       if ((jflags & APPEND))
+ 	flags |= O_APPEND;
+       else
+ 	flags |= O_TRUNC;
+ 
+       if ((jflags & EXCL))
+ 	{
+ 	  flags |= O_EXCL;
+ 	  // In this case we are making a temp file.
+ 	  mode = 0600;
+ 	}
+     }
+ 
+   if ((jflags & SYNC))
+     flags |= O_SYNC;
+ 
+   if ((jflags & DSYNC))
+     flags |= O_DSYNC;
+ 
+   int fd = ::open (buf, flags, mode);
+   if (fd == -1 && errno == EMFILE)
+     {
+       // Because finalize () calls close () we might be able to continue.
+       ::java::lang::System::gc ();
+       ::java::lang::System::runFinalization ();
+       fd = ::open (buf, flags, mode);
+     }
+   if (fd == -1)
+     {
+       char msg[MAXPATHLEN + 200];
+       // We choose the formatting here for JDK compatibility, believe
+       // it or not.
+       sprintf (msg, "%.*s (%.*s)",
+ 	       MAXPATHLEN + 150, buf,
+ 	       40, strerror (errno));
+       throw new ::java::io::FileNotFoundException (JvNewStringLatin1 (msg));
+     }
+ 
+   _Jv_platform_close_on_exec (fd);
+ 
+   return fd;
+ }
+ 
+ void
+ FileChannelImpl::write (jint b)
+ {
+   jbyte d = (jbyte) b;
+   int r = 0;
+   while (r != 1)
+     {
+       r = ::write (fd, &d, 1);
+       if (r == -1)
+         {
+ 	  if (::java::lang::Thread::interrupted())
+ 	    {
+ 	      ::java::io::InterruptedIOException *iioe
+ 		= new ::java::io::InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
+ 	      iioe->bytesTransferred = r == -1 ? 0 : r;
+ 	      throw iioe;
+ 	    }	    
+ 	  if (errno != EINTR)
+ 	    throw new IOException (JvNewStringLatin1 (strerror (errno)));
+ 	}
+     }
+   pos++;
+ }
+ 
+ void
+ FileChannelImpl::write (jbyteArray b, jint offset, jint len)
+ {
+   if (! b)
+     throw new ::java::lang::NullPointerException;
+   if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
+     throw new ArrayIndexOutOfBoundsException;
+   jbyte *bytes = elements (b) + offset;
+ 
+   int written = 0;
+   while (len > 0)
+     {
+       int r = ::write (fd, bytes, len);
+       if (r == -1)
+         {
+ 	  if (::java::lang::Thread::interrupted())
+ 	    {
+ 	      InterruptedIOException *iioe
+ 		= new InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
+ 	      iioe->bytesTransferred = written;
+ 	      throw iioe;
+ 	    }
+ 	  if (errno != EINTR)
+ 	    throw new IOException (JvNewStringLatin1 (strerror (errno)));
+ 	}
+ 
+       written += r;
+       len -= r;
+       bytes += r;
+       pos += r;
+     }
+ }
+ 
+ void
+ FileChannelImpl::implCloseChannel (void)
+ {
+   jint save = fd;
+   fd = -1;
+   if (::close (save))
+     throw new IOException (JvNewStringLatin1 (strerror (errno)));
+ }
+ 
+ void
+ FileChannelImpl::implTruncate (jlong size)
+ {
+   struct stat sb;
+ 
+ #ifdef HAVE_FTRUNCATE
+   if (::fstat (fd, &sb))
+     throw new IOException (JvNewStringLatin1 (strerror (errno)));
+ 
+   if ((jlong) sb.st_size == size) 
+     return;
+ 
+   // If the file is too short, we extend it.  We can't rely on
+   // ftruncate() extending the file.  So we lseek() to 1 byte less
+   // than we want, and then we write a single byte at the end.
+   if ((jlong) sb.st_size < size)
+     {
+       if (::lseek (fd, (off_t) (size - 1), SEEK_SET) == -1)
+ 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
+       char out = '\0';
+       int r = ::write (fd, &out, 1);
+       if (r <= 0 || ::lseek (fd, pos, SEEK_SET) == -1)
+ 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
+     }
+   else
+     {
+       if (::ftruncate (fd, (off_t) size))
+ 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
+       if (pos > size
+ 	  && ::lseek (fd, (off_t) size, SEEK_SET) == -1)
+ 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
+       pos = size;
+     }
+ #else /* HAVE_FTRUNCATE */
+   throw new IOException (JvNewStringLatin1 ("FileDescriptor.setLength not implemented"));
+ #endif /* HAVE_FTRUNCATE */
+ }
+ 
+ void
+ FileChannelImpl::seek (jlong newPos)
+ {
+   off_t r = ::lseek (fd, (off_t) newPos, SEEK_SET);
+   if (r == -1)
+     throw new IOException (JvNewStringLatin1 (strerror (errno)));
+   pos = r;
+ }
+ 
+ jlong
+ FileChannelImpl::size (void)
+ {
+   struct stat sb;
+   if (::fstat (fd, &sb))
+     throw new IOException (JvNewStringLatin1 (strerror (errno)));
+   return sb.st_size;
+ }
+ 
+ jlong
+ FileChannelImpl::implPosition (void)
+ {
+   return pos;
+ }
+ 
+ jint
+ FileChannelImpl::read (void)
+ {
+   jbyte b;
+   int r;
+   do
+     {
+       r = ::read (fd, &b, 1);
+       if (r == 0)
+ 	return -1;
+       if (r == -1)
+ 	{
+ 	  if (::java::lang::Thread::interrupted())
+ 	    {
+ 	      InterruptedIOException *iioe
+ 		= new InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
+ 	      iioe->bytesTransferred = r == -1 ? 0 : r;
+ 	      throw iioe;
+ 	    }
+ 	  if (errno != EINTR)
+ 	    throw new IOException (JvNewStringLatin1 (strerror (errno)));
+ 	}
+     }
+   while (r != 1);
+   pos++;
+   return b & 0xFF;
+ }
+ 
+ jint
+ FileChannelImpl::read (jbyteArray buffer, jint offset, jint count)
+ {
+   if (! buffer)
+     throw new ::java::lang::NullPointerException;
+   jsize bsize = JvGetArrayLength (buffer);
+   if (offset < 0 || count < 0 || offset + count > bsize)
+     throw new ::java::lang::ArrayIndexOutOfBoundsException;
+ 
+   // Must return 0 if an attempt is made to read 0 bytes.
+   if (count == 0)
+     return 0;
+ 
+   jbyte *bytes = elements (buffer) + offset;
+   int r;
+   do
+     {
+       r = ::read (fd, bytes, count);
+       if (r == 0)
+ 	return -1;
+       if (r == -1)
+ 	{
+ 	  if (::java::lang::Thread::interrupted())
+ 	    {
+ 	      InterruptedIOException *iioe
+ 		= new InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
+ 	      iioe->bytesTransferred = r == -1 ? 0 : r;
+ 	      throw iioe;
+ 	    }
+ 	  if (errno != EINTR)
+ 	    throw new IOException (JvNewStringLatin1 (strerror (errno)));
+ 	}
+     }
+   while (r <= 0);
+   pos += r;
+   return r;
+ }
+ 
+ jint
+ FileChannelImpl::available (void)
+ {
+ #if defined (FIONREAD) || defined (HAVE_SELECT) || defined (HAVE_FSTAT)
+   int num = 0;
+   int r = 0;
+   bool num_set = false;
+ 
+ #if defined (FIONREAD)
+   r = ::ioctl (fd, FIONREAD, &num);
+   if (r == -1 && errno == ENOTTY)
+     {
+       // If the ioctl doesn't work, we don't care.
+       r = 0;
+       num = 0;
+     }
+   else
+     num_set = true;
+ #elif defined (HAVE_SELECT)
+   if (fd < 0)
+     {
+       errno = EBADF;
+       r = -1;
+     }
+ #endif
+ 
+   if (r == -1)
+     {
+     posix_error:
+       throw new IOException (JvNewStringLatin1 (strerror (errno)));
+     }
+ 
+   // If we didn't get anything, and we have fstat, then see if see if
+   // we're reading a regular file.  On many systems, FIONREAD does not
+   // work on regular files; select() likewise returns a useless
+   // result.  This is run incorrectly when FIONREAD does work on
+   // regular files and we are at the end of the file.  However, this
+   // case probably isn't very important.
+ #if defined (HAVE_FSTAT)
+   if (! num_set)
+     {
+       struct stat sb;
+       off_t where = 0;
+       if (fstat (fd, &sb) != -1
+ 	  && S_ISREG (sb.st_mode)
+ 	  && (where = lseek (fd, 0, SEEK_CUR)) != (off_t) -1)
+ 	{
+ 	  num = (int) (sb.st_size - where);
+ 	  num_set = true;
+ 	}
+     }
+ #endif /* HAVE_FSTAT */
+ 
+ #if defined (HAVE_SELECT)
+   if (! num_set)
+     {
+       fd_set rd;
+       FD_ZERO (&rd);
+       FD_SET (fd, &rd);
+       struct timeval tv;
+       tv.tv_sec = 0;
+       tv.tv_usec = 0;
+       r = _Jv_select (fd + 1, &rd, NULL, NULL, &tv);
+       if (r == -1)
+ 	goto posix_error;
+       num = r == 0 ? 0 : 1;
+     }
+ #endif /* HAVE_SELECT */
+ 
+   return (jint) num;
+ #else
+   return 0;
+ #endif
+ }
+ 
+ jboolean
+ FileChannelImpl::lock
+ (jlong pos, jlong len, jboolean shared, jboolean wait)
+ {
+   struct flock lockdata;
+ 
+   lockdata.l_type = shared ? F_RDLCK : F_WRLCK;
+   lockdata.l_whence = SEEK_SET;
+   lockdata.l_start = pos;
+   lockdata.l_len = len;
+ 
+   if (::fcntl (fd, wait ? F_SETLKW : F_SETLK, &lockdata) == -1)
+     {
+       if (! wait && (errno == EACCES || errno == EAGAIN))
+ 	return false;
+       throw new IOException (JvNewStringLatin1 (strerror (errno)));
+     }
+   return true;
+ }
+ 
+ void
+ FileChannelImpl::unlock (jlong pos, jlong len)
+ {
+   struct flock lockdata;
+ 
+   lockdata.l_type = F_UNLCK;
+   lockdata.l_whence = SEEK_SET;
+   lockdata.l_start = pos;
+   lockdata.l_len = len;
+ 
+   if (::fcntl (fd, F_SETLK, &lockdata) == -1)
+     throw new IOException (JvNewStringLatin1 (strerror (errno)));
+ }
+ 
+ java::nio::MappedByteBuffer *
+ FileChannelImpl::mapImpl (jchar mmode, jlong position, jint size)
+ {
+ #if defined(HAVE_MMAP)
+   int prot, flags;
+   if (mmode == 'r')
+     {
+       prot = PROT_READ;
+       flags = MAP_PRIVATE;
+     }
+   else
+     {
+       prot = PROT_READ|PROT_WRITE;
+       flags = mmode == '+' ? MAP_SHARED : MAP_PRIVATE;
+     }
+   jint page_size = ::getpagesize();
+   jint offset = position & ~(page_size-1);
+   jint align = position - offset;
+   void* ptr = ::mmap(NULL, size + align, prot, flags, fd, offset);
+   MappedByteBufferImpl *buf
+     = new MappedByteBufferImpl ((RawData *) ((char *) ptr + align),
+ 				size, mmode == 'r');
+   if (ptr == (void *) MAP_FAILED)
+     throw new IOException (JvNewStringLatin1 (strerror (errno)));
+   buf->implPtr = reinterpret_cast<RawData*> (ptr);
+   buf->implLen = size+align;
+   return buf;
+ #else
+   throw new IOException (JvNewStringUTF ("mmap not implemented"));
+ #endif
+ }
+ 
+ void
+ MappedByteBufferImpl::unmapImpl ()
+ {
+ #if defined(HAVE_MMAP)
+   munmap_adaptor(munmap, implPtr, implLen);
+ #endif
+ }
+ 
+ void
+ MappedByteBufferImpl::loadImpl ()
+ {
+ }
+ 
+ jboolean
+ MappedByteBufferImpl::isLoadedImpl ()
+ {
+   return true;
+ }
+ 
+ void
+ MappedByteBufferImpl::forceImpl ()
+ {
+ #if defined(HAVE_MMAP)
+   ::msync_adaptor(msync, implPtr, implLen, MS_SYNC);
+ #endif
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/channels/natFileChannelWin32.cc gcc-4.0.0/libjava/gnu/java/nio/channels/natFileChannelWin32.cc
*** gcc-3.4.3/libjava/gnu/java/nio/channels/natFileChannelWin32.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/nio/channels/natFileChannelWin32.cc	Sun Feb 29 19:09:28 2004
***************
*** 0 ****
--- 1,432 ----
+ // natFileChannelImplWin32.cc - Native part of FileChannelImpl class.
+ 
+ /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004  Free Software 
+    Foundation, Inc.
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ // FIXME: In order to support interrupting of IO operations, we
+ // need to change to use the windows asynchronous IO functions
+ 
+ #include <config.h>
+ #include <platform.h>
+ 
+ #include <gcj/cni.h>
+ #include <gcj/javaprims.h>
+ #include <jvm.h>
+ 
+ #include <stdio.h>
+ 
+ #include <gnu/gcj/RawData.h>
+ #include <gnu/java/nio/FileLockImpl.h>
+ #include <gnu/java/nio/channels/FileChannelImpl.h>
+ #include <java/io/FileNotFoundException.h>
+ #include <java/io/IOException.h>
+ #include <java/io/SyncFailedException.h>
+ #include <java/io/InterruptedIOException.h>
+ #include <java/io/EOFException.h>
+ #include <java/lang/ArrayIndexOutOfBoundsException.h>
+ #include <java/lang/NullPointerException.h>
+ #include <java/lang/System.h>
+ #include <java/lang/String.h>
+ #include <java/lang/Thread.h>
+ #include <java/nio/ByteBuffer.h>
+ #include <java/nio/MappedByteBufferImpl.h>
+ #include <java/nio/channels/FileChannel.h>
+ #include <java/nio/channels/FileLock.h>
+ #include <gnu/java/nio/channels/FileChannelImpl.h>
+ 
+ using gnu::gcj::RawData;
+ using java::io::IOException;
+ using java::nio::MappedByteBufferImpl;
+ using java::io::InterruptedIOException;
+ using java::io::FileNotFoundException;
+ using java::lang::ArrayIndexOutOfBoundsException;
+ using gnu::java::nio::channels::FileChannelImpl;
+ 
+ #undef STRICT
+ 
+ static bool testCanUseGetHandleInfo()
+ {
+   /* Test to see whether GetHandleInformation can be used
+      for console input or screen buffers. This is better
+      a kludgy OS version check. */
+   DWORD dwFlags;
+   return GetHandleInformation (GetStdHandle (STD_INPUT_HANDLE),
+     &dwFlags) != 0;
+ }
+ 
+ // FIXME: casting a FILE (pointer) to a jint will not work on Win64 --
+ //        we should be using gnu.gcj.RawData's.
+ 
+ void
+ FileChannelImpl::init(void)
+ {
+   in = new FileChannelImpl((jint)(GetStdHandle (STD_INPUT_HANDLE)),
+ 			   FileChannelImpl::READ);
+   out = new FileChannelImpl((jint)(GetStdHandle (STD_OUTPUT_HANDLE)),
+ 			    FileChannelImpl::WRITE);
+   err = new FileChannelImpl((jint)(GetStdHandle (STD_ERROR_HANDLE)),
+ 			    FileChannelImpl::WRITE);
+ }
+ 
+ #if 0
+ FileChannelImpl::sync (void) {
+   if (! FlushFileBuffers ((HANDLE)fd))
+   {
+     DWORD dwErrorCode = GetLastError ();
+     throw new SyncFailedException (_Jv_WinStrError (dwErrorCode));
+   }
+ }
+ #endif
+ 
+ jint
+ FileChannelImpl::open (jstring path, jint jflags) {
+ 
+   HANDLE handle = NULL;
+   DWORD access = 0;
+   DWORD create = OPEN_EXISTING;
+   
+   JV_TEMP_STRING_WIN32(cpath, path)
+ 
+   JvAssert((jflags & READ) || (jflags & WRITE));
+ 
+   if ((jflags & READ) && (jflags & WRITE))
+     {
+       access = GENERIC_READ | GENERIC_WRITE;
+       if (jflags & EXCL)
+         create = CREATE_NEW; // this will raise error if file exists.
+       else
+         create = OPEN_ALWAYS; // equivalent to O_CREAT
+     }
+   else if (jflags & READ)
+     {
+       access = GENERIC_READ;
+       create = OPEN_EXISTING; // ignore EXCL
+     }
+   else
+     { 
+       access = GENERIC_WRITE;
+       if (jflags & EXCL)
+         create = CREATE_NEW;
+       else if (jflags & APPEND)
+         create = OPEN_ALWAYS;
+       else
+         create = CREATE_ALWAYS;
+     }
+ 
+   handle = CreateFile(cpath, access, FILE_SHARE_READ | FILE_SHARE_WRITE,
+     NULL, create, 0, NULL);
+ 
+   if (handle == INVALID_HANDLE_VALUE)
+     {
+        DWORD dwErrorCode = GetLastError ();
+        throw new FileNotFoundException (_Jv_WinStrError (cpath, dwErrorCode));
+     }
+ 
+   // For APPEND mode, move the file pointer to the end of the file.
+   if (jflags & APPEND)
+     {
+       DWORD low = SetFilePointer (handle, 0, NULL, FILE_END);
+       if ((low == (DWORD) 0xffffffff) && (GetLastError () != NO_ERROR)) 
+       {
+         DWORD dwErrorCode = GetLastError ();
+         throw new FileNotFoundException (_Jv_WinStrError (cpath, dwErrorCode));
+       }
+     }
+     
+   // Make this handle non-inheritable so that child
+   // processes don't inadvertently prevent us from
+   // closing this file.
+   _Jv_platform_close_on_exec (handle);
+ 
+   return (jint) handle;
+ }
+ 
+ void
+ FileChannelImpl::write (jint b)
+ {
+   DWORD bytesWritten;
+   jbyte buf = (jbyte)b;
+ 
+   if (WriteFile ((HANDLE)fd, &buf, 1, &bytesWritten, NULL))
+     {
+       if (::java::lang::Thread::interrupted())
+         {
+           InterruptedIOException *iioe = new InterruptedIOException (JvNewStringLatin1 ("write interrupted"));
+           iioe->bytesTransferred = bytesWritten;
+     throw iioe;
+         }
+       if (bytesWritten != 1)
+         _Jv_ThrowIOException ();
+     }
+   else
+     _Jv_ThrowIOException ();
+   // FIXME: loop until bytesWritten == 1
+ }
+ 
+ void
+ FileChannelImpl::write(jbyteArray b, jint offset, jint len)
+ {
+   if (! b)
+     throw new ::java::lang::NullPointerException;
+   if(offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
+     throw new ArrayIndexOutOfBoundsException;
+ 
+   jbyte *buf = elements (b) + offset;
+   DWORD bytesWritten;
+ 
+   if (WriteFile ((HANDLE)fd, buf, len, &bytesWritten, NULL))
+     {
+       if (::java::lang::Thread::interrupted())
+         {
+           InterruptedIOException *iioe = new InterruptedIOException (JvNewStringLatin1 ("write interrupted"));
+           iioe->bytesTransferred = bytesWritten;
+           throw iioe;
+         }
+     }
+   else
+     _Jv_ThrowIOException ();
+   // FIXME: loop until bytesWritten == len
+ }
+ 
+ void
+ FileChannelImpl::implCloseChannel (void)
+ {
+   HANDLE save = (HANDLE)fd;
+   fd = (jint)INVALID_HANDLE_VALUE;
+   if (! CloseHandle (save))
+     _Jv_ThrowIOException ();
+ }
+ 
+ void
+ FileChannelImpl::implTruncate (jlong size)
+ {
+   LONG liOrigFilePointer;
+   LONG liNewFilePointer;
+   LONG liEndFilePointer;
+ 
+   // Get the original file pointer.
+   if (SetFilePointer((HANDLE) fd, (LONG) 0, &liOrigFilePointer,
+          FILE_CURRENT) != (BOOL) 0
+       && (GetLastError() != NO_ERROR))
+     _Jv_ThrowIOException ();
+ 
+   // Get the length of the file.
+   if (SetFilePointer((HANDLE) fd, (LONG) 0, &liEndFilePointer,
+          FILE_END) != (BOOL) 0
+       && (GetLastError() != NO_ERROR))
+     _Jv_ThrowIOException ();
+ 
+   if ((jlong)liEndFilePointer == size)
+     {
+       // Restore the file pointer.
+       if (liOrigFilePointer != liEndFilePointer)
+   {
+     if (SetFilePointer((HANDLE) fd, liOrigFilePointer, &liNewFilePointer,
+            FILE_BEGIN) != (BOOL) 0
+         && (GetLastError() != NO_ERROR))
+       _Jv_ThrowIOException ();
+   }
+       return;
+     }
+ 
+   // Seek to the new end of file.
+   if (SetFilePointer((HANDLE) fd, (LONG) size, &liNewFilePointer,
+          FILE_BEGIN) != (BOOL) 0
+       && (GetLastError() != NO_ERROR))
+     _Jv_ThrowIOException ();
+ 
+   // Truncate the file at this point.
+   if (SetEndOfFile((HANDLE) fd) != (BOOL) 0 && (GetLastError() != NO_ERROR))
+     _Jv_ThrowIOException ();
+ 
+   if (liOrigFilePointer < liNewFilePointer)
+     {
+       // Restore the file pointer.
+       if (SetFilePointer((HANDLE) fd, liOrigFilePointer, &liNewFilePointer,
+         FILE_BEGIN) != (BOOL) 0
+         && (GetLastError() != NO_ERROR))
+         _Jv_ThrowIOException ();
+     }
+ }
+ 
+ void
+ FileChannelImpl::seek (jlong newPos)
+ {
+   LONG high = pos >> 32;
+   DWORD low = SetFilePointer ((HANDLE)fd, (DWORD)(0xffffffff & newPos), &high, FILE_BEGIN);
+   if ((low == 0xffffffff) && (GetLastError () != NO_ERROR))
+     _Jv_ThrowIOException ();
+ }
+ 
+ jlong
+ FileChannelImpl::implPosition (void)
+ {
+   LONG high = 0;
+   DWORD low = SetFilePointer ((HANDLE)fd, 0, &high, FILE_CURRENT);
+   if ((low == 0xffffffff) && (GetLastError() != NO_ERROR))
+     _Jv_ThrowIOException ();
+   return (((jlong)high) << 32L) | (jlong)low;
+ }
+ 
+ jlong
+ FileChannelImpl::size (void)
+ {
+   DWORD high;
+   DWORD low;
+ 
+   low = GetFileSize ((HANDLE)fd, &high);
+   // FIXME: Error checking
+   return (((jlong)high) << 32L) | (jlong)low;
+ }
+ 
+ jint
+ FileChannelImpl::read (void)
+ {
+   CHAR buf;
+   DWORD read;
+ 
+   if (! ReadFile ((HANDLE)fd, &buf, 1, &read, NULL))
+     {
+       if (GetLastError () == ERROR_BROKEN_PIPE)
+         return -1;
+       else
+         _Jv_ThrowIOException ();
+     }
+ 
+   if (! read)
+     return -1;
+   else
+     return (jint)(buf & 0xff);
+ }
+ 
+ jint
+ FileChannelImpl::read (jbyteArray buffer, jint offset, jint count)
+ {
+   if (! buffer)
+     throw new ::java::lang::NullPointerException;
+ 
+   jsize bsize = JvGetArrayLength (buffer);
+   if (offset < 0 || count < 0 || offset + count > bsize)
+     throw new ArrayIndexOutOfBoundsException;
+ 
+   // Must return 0 if an attempt is made to read 0 bytes.
+   if (count == 0)
+     return 0;
+ 
+   jbyte *bytes = elements (buffer) + offset;
+ 
+   DWORD read;
+   if (! ReadFile((HANDLE)fd, bytes, count, &read, NULL))
+     {
+       if (GetLastError () == ERROR_BROKEN_PIPE)
+         return -1;
+       else
+         _Jv_ThrowIOException ();
+     }
+ 
+   if (read == 0) return -1;
+ 
+   return (jint)read;
+ }
+ 
+ jint
+ FileChannelImpl::available (void)
+ {
+   // FIXME:
+   return size() - position();
+ }
+ 
+ jboolean
+ FileChannelImpl::lock
+ (jlong /*pos*/, jlong /*len*/, jboolean /*shared*/, jboolean /*wait*/)
+ {
+   throw new IOException (JvNewStringLatin1
+     ("FileChannel.lock() not implemented"));
+ }
+ 
+ void
+ FileChannelImpl::unlock (jlong /*pos*/, jlong /*len*/)
+ {
+   throw new IOException (JvNewStringLatin1
+     ("FileChannel.unlock() not implemented"));
+ }
+ 
+ java::nio::MappedByteBuffer *
+ FileChannelImpl::mapImpl (jchar mmode, jlong position, jint size)
+ {
+   SYSTEM_INFO siSysInfo;
+   GetSystemInfo(&siSysInfo); 
+   DWORD page_size = siSysInfo.dwPageSize;
+   jlong offset = position & ~(page_size-1);
+   jint align = position - offset;
+   jlong high = position + size;
+   jlong max_size;
+   if (mmode == '+')
+     max_size = high - offset;
+   else
+     max_size = 0;
+   DWORD access, protect;
+   if (mmode == 'r')
+     {
+       access = FILE_MAP_READ;
+       protect = PAGE_READONLY;
+     }
+   else if (mmode == '+')
+     {
+       access = FILE_MAP_WRITE;
+       protect = PAGE_READWRITE;
+     }
+   else
+     {
+       access = FILE_MAP_COPY;
+       protect = PAGE_WRITECOPY;
+     }
+   HANDLE hFileMapping = CreateFileMapping((HANDLE) fd,
+ 					  (LPSECURITY_ATTRIBUTES) NULL,
+ 					  protect,
+ 					  (DWORD) (max_size >> 32),
+ 					  (DWORD) max_size,
+ 					  (LPCTSTR) NULL);
+   if (hFileMapping == NULL)
+     throw new IOException();
+   void *ptr = MapViewOfFile(hFileMapping, access,
+ 			    (DWORD) (offset >> 32), (DWORD) offset,
+ 			    (SIZE_T) (high - offset));
+   if (ptr == NULL)
+     throw new IOException();
+   MappedByteBufferImpl *buf
+     = new MappedByteBufferImpl((RawData *) ((char *) ptr + align),
+ 			       size, mode == 'r');
+   buf->implPtr = reinterpret_cast<RawData*> (ptr);
+   buf->implLen = (jlong) (size_t) hFileMapping;
+   return buf;
+ }
+ 
+ void
+ MappedByteBufferImpl::unmapImpl ()
+ {
+   UnmapViewOfFile((void*)implPtr);
+   CloseHandle((HANDLE) (size_t) implLen);
+ }
+ 
+ void
+ MappedByteBufferImpl::loadImpl ()
+ {
+ }
+ 
+ jboolean
+ MappedByteBufferImpl::isLoadedImpl ()
+ {
+   return true;
+ }
+ 
+ void
+ MappedByteBufferImpl::forceImpl ()
+ {
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/charset/ISO_8859_1.java gcc-4.0.0/libjava/gnu/java/nio/charset/ISO_8859_1.java
*** gcc-3.4.3/libjava/gnu/java/nio/charset/ISO_8859_1.java	Mon Nov 11 07:36:41 2002
--- gcc-4.0.0/libjava/gnu/java/nio/charset/ISO_8859_1.java	Mon Feb  7 20:34:17 2005
***************
*** 1,5 ****
  /* ISO_8859_1.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ISO_8859_1.java -- 
!    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class ISO_8859_1 extends Charset
*** 53,59 ****
  {
    ISO_8859_1 ()
    {
!     super ("ISO-8859-1", new String[]{"ISO-LATIN-1"});
    }
  
    public boolean contains (Charset cs)
--- 53,80 ----
  {
    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)
*************** final class ISO_8859_1 extends Charset
*** 73,79 ****
  
    private static final class Decoder extends CharsetDecoder
    {
!     private Decoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
--- 94,101 ----
  
    private static final class Decoder extends CharsetDecoder
    {
!     // Package-private to avoid a trampoline constructor.
!     Decoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
*************** final class ISO_8859_1 extends Charset
*** 100,106 ****
  
    private static final class Encoder extends CharsetEncoder
    {
!     private Encoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
--- 122,129 ----
  
    private static final class Encoder extends CharsetEncoder
    {
!     // Package-private to avoid a trampoline constructor.
!     Encoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/charset/Provider.java gcc-4.0.0/libjava/gnu/java/nio/charset/Provider.java
*** gcc-3.4.3/libjava/gnu/java/nio/charset/Provider.java	Mon Nov 11 07:36:41 2002
--- gcc-4.0.0/libjava/gnu/java/nio/charset/Provider.java	Mon Feb  7 20:34:17 2005
***************
*** 1,5 ****
  /* Provider.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Provider.java -- 
!    Copyright (C) 2002, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Iterator;
*** 48,53 ****
--- 48,54 ----
   * {@link Charset#charsetForName} and * {@link Charset#availableCharsets}.
   *
   * @author Jesse Rosenstock
+  * @author Robert Schuster (thebohemian@gmx.net)
   * @see Charset
   */
  public final class Provider extends CharsetProvider
*************** public final class Provider extends Char
*** 63,74 ****
    }
  
    /**
!    * Map from charset name to charset canonical name.
     */
    private final HashMap canonicalNames;
  
    /**
!    * Map from 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.
     */
--- 64,77 ----
    }
  
    /**
!    * 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.
     */
*************** public final class Provider extends Char
*** 76,83 ****
  
    private Provider ()
    {
-     // FIXME: We might need to make the name comparison case insensitive.
-     // Verify this with the Sun JDK.
      canonicalNames = new HashMap ();
      charsets = new HashMap ();
  
--- 79,84 ----
*************** public final class Provider extends Char
*** 106,129 ****
                        .iterator ();
    }
  
    public Charset charsetForName (String charsetName)
    {
!     return (Charset) charsets.get (canonicalize (charsetName));
!   }
! 
!   private Object canonicalize (String charsetName)
!   {
!     Object o = canonicalNames.get (charsetName);
!     return o == null ? charsetName : o;
    }
  
    private void addCharset (Charset cs)
    {
!     String canonicalName = cs.name ();
      charsets.put (canonicalName, cs);
  
      for (Iterator i = cs.aliases ().iterator (); i.hasNext (); )
!       canonicalNames.put (i.next (), canonicalName);
    }
  
    public static synchronized Provider provider ()
--- 107,148 ----
                        .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)
    {
!     return (Charset) charsets.get(canonicalNames.get(charsetName.toLowerCase()));
    }
  
+   /**
+    * 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 ()
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/charset/US_ASCII.java gcc-4.0.0/libjava/gnu/java/nio/charset/US_ASCII.java
*** gcc-3.4.3/libjava/gnu/java/nio/charset/US_ASCII.java	Mon Nov 11 07:36:41 2002
--- gcc-4.0.0/libjava/gnu/java/nio/charset/US_ASCII.java	Mon Feb  7 20:34:17 2005
***************
*** 1,5 ****
  /* US_ASCII.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* US_ASCII.java -- 
!    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class US_ASCII extends Charset
*** 53,59 ****
  {
    US_ASCII ()
    {
!     super ("US-ASCII", new String[]{"ISO646-US"});
    }
  
    public boolean contains (Charset cs)
--- 53,81 ----
  {
    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)
*************** final class US_ASCII extends Charset
*** 73,79 ****
  
    private static final class Decoder extends CharsetDecoder
    {
!     private Decoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
--- 95,102 ----
  
    private static final class Decoder extends CharsetDecoder
    {
!     // Package-private to avoid a trampoline constructor.
!     Decoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
*************** final class US_ASCII extends Charset
*** 105,111 ****
  
    private static final class Encoder extends CharsetEncoder
    {
!     private Encoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
--- 128,135 ----
  
    private static final class Encoder extends CharsetEncoder
    {
!     // Package-private to avoid a trampoline constructor.
!     Encoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16.java gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16.java
*** gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16.java	Mon Nov 11 07:36:41 2002
--- gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16.java	Mon Feb  7 20:34:17 2005
***************
*** 1,5 ****
  /* UTF_16.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UTF_16.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,48 ****
  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-16 charset.
--- 35,46 ----
  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.
*************** final class UTF_16 extends Charset
*** 53,59 ****
  {
    UTF_16 ()
    {
!     super ("UTF-16", null);
    }
  
    public boolean contains (Charset cs)
--- 51,64 ----
  {
    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"
!     });
    }
  
    public boolean contains (Charset cs)
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16BE.java gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16BE.java
*** gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16BE.java	Mon Nov 11 07:36:41 2002
--- gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16BE.java	Mon Feb  7 20:34:17 2005
***************
*** 1,5 ****
  /* UTF_16BE.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UTF_16BE.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,48 ****
  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-16BE charset.
--- 35,46 ----
  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.
*************** final class UTF_16BE extends Charset
*** 53,59 ****
  {
    UTF_16BE ()
    {
!     super ("UTF-16BE", null);
    }
  
    public boolean contains (Charset cs)
--- 51,68 ----
  {
    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)
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16Decoder.java gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16Decoder.java
*** gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16Decoder.java	Mon Nov 11 07:36:41 2002
--- gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16Decoder.java	Mon May  3 19:52:27 2004
*************** final class UTF_16Decoder extends Charse
*** 144,167 ****
        }
    }
  
-   /**
-    * Writes <code>c</code> to <code>out</code> in the byte order
-    * specified by <code>byteOrder</code>.
-    **/
-   private void put (ByteBuffer out, char c)
-   {
-     if (byteOrder == BIG_ENDIAN)
-       {
-         out.put ((byte) (c >> 8));
-         out.put ((byte) (c & 0xFF));
-       }
-     else
-       {
-         out.put ((byte) (c & 0xFF));
-         out.put ((byte) (c >> 8));
-       }
-   }
- 
    protected void implReset ()
    {
      byteOrder = originalByteOrder;
--- 144,149 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16Encoder.java gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16Encoder.java
*** gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16Encoder.java	Mon Nov 11 07:36:41 2002
--- gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16Encoder.java	Sat Oct 16 17:58:01 2004
*************** final class UTF_16Encoder extends Charse
*** 63,69 ****
    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 });
--- 63,69 ----
    UTF_16Encoder (Charset cs, int byteOrder, boolean useByteOrderMark)
    {
      super (cs, 2.0f,
!            useByteOrderMark ? 2.0f : 4.0f,
             byteOrder == BIG_ENDIAN
               ? new byte[] { (byte) 0xFF, (byte) 0xFD }
               : new byte[] { (byte) 0xFD, (byte) 0xFF });
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16LE.java gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16LE.java
*** gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_16LE.java	Mon Nov 11 07:36:41 2002
--- gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_16LE.java	Mon Feb  7 20:34:17 2005
***************
*** 1,5 ****
  /* UTF_16LE.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UTF_16LE.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,48 ****
  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-16LE charset.
--- 35,46 ----
  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.
*************** final class UTF_16LE extends Charset
*** 53,59 ****
  {
    UTF_16LE ()
    {
!     super ("UTF-16LE", null);
    }
  
    public boolean contains (Charset cs)
--- 51,67 ----
  {
    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)
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_8.java gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_8.java
*** gcc-3.4.3/libjava/gnu/java/nio/charset/UTF_8.java	Mon Nov 11 07:36:41 2002
--- gcc-4.0.0/libjava/gnu/java/nio/charset/UTF_8.java	Wed Feb 16 23:33:02 2005
***************
*** 1,5 ****
  /* UTF_8.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UTF_8.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class UTF_8 extends Charset
*** 62,68 ****
  {
    UTF_8 ()
    {
!     super ("UTF-8", null);
    }
  
    public boolean contains (Charset cs)
--- 62,76 ----
  {
    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)
*************** final class UTF_8 extends Charset
*** 84,90 ****
  
    private static final class Decoder extends CharsetDecoder
    {
!     private Decoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
--- 92,99 ----
  
    private static final class Decoder extends CharsetDecoder
    {
!     // Package-private to avoid a trampoline constructor.
!     Decoder (Charset cs)
      {
        super (cs, 1.0f, 1.0f);
      }
*************** final class UTF_8 extends Charset
*** 92,98 ****
      protected CoderResult decodeLoop (ByteBuffer in, CharBuffer out)
      {
        // TODO: Optimize this in the case in.hasArray() / out.hasArray()
!       int inPos = 0;
        try
          {
            while (in.hasRemaining ())
--- 101,107 ----
      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 ())
*************** final class UTF_8 extends Charset
*** 171,177 ****
  
    private static final class Encoder extends CharsetEncoder
    {
!     private Encoder (Charset cs)
      {
        // According to
        // http://www-106.ibm.com/developerworks/unicode/library/utfencodingforms/index.html
--- 180,187 ----
  
    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
*************** final class UTF_8 extends Charset
*** 186,192 ****
  
      protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
      {
!       int inPos = 0;
        try
          {
            // TODO: Optimize this in the case in.hasArray() / out.hasArray()
--- 196,202 ----
  
      protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
      {
!       int inPos = in.position();
        try
          {
            // TODO: Optimize this in the case in.hasArray() / out.hasArray()
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/natFileLockImpl.cc gcc-4.0.0/libjava/gnu/java/nio/natFileLockImpl.cc
*** gcc-3.4.3/libjava/gnu/java/nio/natFileLockImpl.cc	Wed May 14 06:37:59 2003
--- gcc-4.0.0/libjava/gnu/java/nio/natFileLockImpl.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,25 ****
- // natFileLockImpl.cc
- 
- /* Copyright (C) 2003  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- #include <config.h>
- 
- #include <jvm.h>
- #include <errno.h>
- 
- #include <gnu/java/nio/FileLockImpl.h>
- #include <java/io/FileDescriptor.h>
- #include <java/io/IOException.h>
- 
- void
- gnu::java::nio::FileLockImpl::releaseImpl ()
- {
-   throw new ::java::io::IOException
-     (JvNewStringUTF ("releaseImpl not implemented"));
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/natPipeImplEcos.cc gcc-4.0.0/libjava/gnu/java/nio/natPipeImplEcos.cc
*** gcc-3.4.3/libjava/gnu/java/nio/natPipeImplEcos.cc	Tue Nov 11 11:49:12 2003
--- gcc-4.0.0/libjava/gnu/java/nio/natPipeImplEcos.cc	Fri Sep 24 06:41:57 2004
***************
*** 1,6 ****
  // natPipeImplEcos.cc
  
! /* Copyright (C) 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natPipeImplEcos.cc
  
! /* Copyright (C) 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 16,25 ****
  #include <unistd.h>
  
  #include <gnu/java/nio/PipeImpl.h>
  #include <java/io/IOException.h>
  
  void
! gnu::java::nio::PipeImpl::nativeInit (::java::nio::channels::spi::SelectorProvider*)
  {
    throw new ::java::io::IOException (JvNewStringUTF ("nativeInit() not implemented"));
  }
--- 16,27 ----
  #include <unistd.h>
  
  #include <gnu/java/nio/PipeImpl.h>
+ #include <gnu/java/nio/VMPipe.h>
  #include <java/io/IOException.h>
  
  void
! gnu::java::nio::VMPipe::init (gnu::java::nio::PipeImpl *self,
! 			      ::java::nio::channels::spi::SelectorProvider*)
  {
    throw new ::java::io::IOException (JvNewStringUTF ("nativeInit() not implemented"));
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/natPipeImplPosix.cc gcc-4.0.0/libjava/gnu/java/nio/natPipeImplPosix.cc
*** gcc-3.4.3/libjava/gnu/java/nio/natPipeImplPosix.cc	Tue Nov 11 11:49:12 2003
--- gcc-4.0.0/libjava/gnu/java/nio/natPipeImplPosix.cc	Fri Sep 24 06:41:57 2004
***************
*** 1,6 ****
  // natPipeImplPosix.cc
  
! /* Copyright (C) 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natPipeImplPosix.cc
  
! /* Copyright (C) 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 16,28 ****
  #include <unistd.h>
  
  #include <gnu/java/nio/PipeImpl.h>
  //#include <gnu/java/nio/PipeImpl$SinkChannelImpl.h>
  //#include <gnu/java/nio/PipeImpl$SourceChannelImpl.h>
  #include <java/io/IOException.h>
  #include <java/nio/channels/spi/SelectorProvider.h>
  
  void
! gnu::java::nio::PipeImpl::nativeInit (::java::nio::channels::spi::SelectorProvider* /*provider*/)
  {
    int filedes [2];
  
--- 16,30 ----
  #include <unistd.h>
  
  #include <gnu/java/nio/PipeImpl.h>
+ #include <gnu/java/nio/VMPipe.h>
  //#include <gnu/java/nio/PipeImpl$SinkChannelImpl.h>
  //#include <gnu/java/nio/PipeImpl$SourceChannelImpl.h>
  #include <java/io/IOException.h>
  #include <java/nio/channels/spi/SelectorProvider.h>
  
  void
! gnu::java::nio::VMPipe::init (gnu::java::nio::PipeImpl *self,
! 			      ::java::nio::channels::spi::SelectorProvider* /*provider*/)
  {
    int filedes [2];
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/natPipeImplWin32.cc gcc-4.0.0/libjava/gnu/java/nio/natPipeImplWin32.cc
*** gcc-3.4.3/libjava/gnu/java/nio/natPipeImplWin32.cc	Tue Nov 11 11:49:12 2003
--- gcc-4.0.0/libjava/gnu/java/nio/natPipeImplWin32.cc	Fri Sep 24 06:41:57 2004
***************
*** 1,6 ****
  // natPipeImplWin32.cc
  
! /* Copyright (C) 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natPipeImplWin32.cc
  
! /* Copyright (C) 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 16,28 ****
  #include <unistd.h>
  
  #include <gnu/java/nio/PipeImpl.h>
  //#include <gnu/java/nio/PipeImpl$SinkChannelImpl.h>
  //#include <gnu/java/nio/PipeImpl$SourceChannelImpl.h>
  #include <java/io/IOException.h>
  #include <java/nio/channels/spi/SelectorProvider.h>
  
  void
! gnu::java::nio::PipeImpl::nativeInit (::java::nio::channels::spi::SelectorProvider* /*provider*/)
  {
    int filedes [2];
  
--- 16,30 ----
  #include <unistd.h>
  
  #include <gnu/java/nio/PipeImpl.h>
+ #include <gnu/java/nio/VMPipe.h>
  //#include <gnu/java/nio/PipeImpl$SinkChannelImpl.h>
  //#include <gnu/java/nio/PipeImpl$SourceChannelImpl.h>
  #include <java/io/IOException.h>
  #include <java/nio/channels/spi/SelectorProvider.h>
  
  void
! gnu::java::nio::VMPipe::init (gnu::java::nio::PipeImpl *self,
! 			      ::java::nio::channels::spi::SelectorProvider* /*provider*/)
  {
    int filedes [2];
  
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/natSelectorImplEcos.cc gcc-4.0.0/libjava/gnu/java/nio/natSelectorImplEcos.cc
*** gcc-3.4.3/libjava/gnu/java/nio/natSelectorImplEcos.cc	Tue Nov 11 11:49:12 2003
--- gcc-4.0.0/libjava/gnu/java/nio/natSelectorImplEcos.cc	Fri Sep 24 06:41:57 2004
***************
*** 1,6 ****
  // natSelectorImplEcos.cc
  
! /* Copyright (C) 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natSelectorImplEcos.cc
  
! /* Copyright (C) 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 14,25 ****
  #include <errno.h>
  #include <string.h>
  
! #include <gnu/java/nio/SelectorImpl.h>
  #include <java/io/IOException.h>
  
  jint
! gnu::java::nio::SelectorImpl::implSelect (jintArray read, jintArray write,
!                                           jintArray except, jlong timeout)
  {
    throw new ::java::io::IOException (JvNewStringUTF ("implSelect() not implemented"));
  }
--- 14,25 ----
  #include <errno.h>
  #include <string.h>
  
! #include <gnu/java/nio/VMSelector.h>
  #include <java/io/IOException.h>
  
  jint
! gnu::java::nio::VMSelector::select (jintArray read, jintArray write,
!                                     jintArray except, jlong timeout)
  {
    throw new ::java::io::IOException (JvNewStringUTF ("implSelect() not implemented"));
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/natSelectorImplPosix.cc gcc-4.0.0/libjava/gnu/java/nio/natSelectorImplPosix.cc
*** gcc-3.4.3/libjava/gnu/java/nio/natSelectorImplPosix.cc	Thu Dec 11 15:35:13 2003
--- gcc-4.0.0/libjava/gnu/java/nio/natSelectorImplPosix.cc	Fri Sep 24 06:41:57 2004
***************
*** 1,6 ****
  // natSelectorImplPosix.cc
  
! /* Copyright (C) 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natSelectorImplPosix.cc
  
! /* Copyright (C) 2002, 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 14,20 ****
  #include <errno.h>
  #include <string.h>
  
! #include <gnu/java/nio/SelectorImpl.h>
  #include <java/io/InterruptedIOException.h>
  #include <java/io/IOException.h>
  #include <java/lang/Thread.h>
--- 14,20 ----
  #include <errno.h>
  #include <string.h>
  
! #include <gnu/java/nio/VMSelector.h>
  #include <java/io/InterruptedIOException.h>
  #include <java/io/IOException.h>
  #include <java/lang/Thread.h>
*************** helper_reset (jintArray& fdArray)
*** 60,67 ****
  }
  
  jint
! gnu::java::nio::SelectorImpl::implSelect (jintArray read, jintArray write,
!                                           jintArray except, jlong timeout)
  {
    jint result;
    int max_fd = 0;
--- 60,67 ----
  }
  
  jint
! gnu::java::nio::VMSelector::select (jintArray read, jintArray write,
!                                     jintArray except, jlong timeout)
  {
    jint result;
    int max_fd = 0;
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/nio/natSelectorImplWin32.cc gcc-4.0.0/libjava/gnu/java/nio/natSelectorImplWin32.cc
*** gcc-3.4.3/libjava/gnu/java/nio/natSelectorImplWin32.cc	Tue Dec 16 22:54:21 2003
--- gcc-4.0.0/libjava/gnu/java/nio/natSelectorImplWin32.cc	Fri Sep 24 06:41:57 2004
***************
*** 1,6 ****
  // natSelectorImplWin32.cc
  
! /* Copyright (C) 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natSelectorImplWin32.cc
  
! /* Copyright (C) 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 11,22 ****
  #include <config.h>
  #include <platform.h>
  
! #include <gnu/java/nio/SelectorImpl.h>
  #include <java/lang/Thread.h>
  
  jint
! gnu::java::nio::SelectorImpl::implSelect (jintArray read, jintArray write,
!                                           jintArray except, jlong timeout)
  {
    // FIXME: The API for implSelect is biased towards POSIX implementations.
    jint* pReadFD = elements (read);
--- 11,22 ----
  #include <config.h>
  #include <platform.h>
  
! #include <gnu/java/nio/VMSelector.h>
  #include <java/lang/Thread.h>
  
  jint
! gnu::java::nio::VMSelector::select (jintArray read, jintArray write,
!                                     jintArray except, jlong timeout)
  {
    // FIXME: The API for implSelect is biased towards POSIX implementations.
    jint* pReadFD = elements (read);
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/RMIMarshalledObjectOutputStream.java gcc-4.0.0/libjava/gnu/java/rmi/RMIMarshalledObjectOutputStream.java
*** gcc-3.4.3/libjava/gnu/java/rmi/RMIMarshalledObjectOutputStream.java	Thu Nov  7 18:01:04 2002
--- gcc-4.0.0/libjava/gnu/java/rmi/RMIMarshalledObjectOutputStream.java	Sat Oct 16 18:27:47 2004
***************
*** 1,5 ****
  /* gnu.java.rmi.RMIMarshalledObjectOutputStream
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gnu.java.rmi.RMIMarshalledObjectOutputStream
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,53 ****
  
  package gnu.java.rmi;
  
  import java.io.OutputStream;
  import java.io.ObjectOutputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
- import java.rmi.Remote;
- import java.rmi.server.ObjID;
- import java.rmi.server.RemoteStub;
- 
- import gnu.java.rmi.server.RMIObjectOutputStream;
- import gnu.java.rmi.server.UnicastServerRef;
  
  /**
   * This class is only for java.rmi.MarshalledObject to serialize object and 
--- 38,49 ----
  
  package gnu.java.rmi;
  
+ import gnu.java.rmi.server.RMIObjectOutputStream;
+ 
  import java.io.OutputStream;
  import java.io.ObjectOutputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  
  /**
   * This class is only for java.rmi.MarshalledObject to serialize object and 
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/dgc/DGCImpl.java gcc-4.0.0/libjava/gnu/java/rmi/dgc/DGCImpl.java
*** gcc-3.4.3/libjava/gnu/java/rmi/dgc/DGCImpl.java	Thu Nov  7 18:01:05 2002
--- gcc-4.0.0/libjava/gnu/java/rmi/dgc/DGCImpl.java	Thu Feb 17 18:26:27 2005
*************** import java.rmi.dgc.Lease;
*** 42,48 ****
  import java.rmi.dgc.VMID;
  import java.rmi.server.ObjID;
  import java.rmi.RemoteException;
- import java.rmi.server.UnicastRemoteObject;
  import java.rmi.server.RMISocketFactory;
  import gnu.java.rmi.server.UnicastServerRef;
  
--- 42,47 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/registry/RegistryImpl.java gcc-4.0.0/libjava/gnu/java/rmi/registry/RegistryImpl.java
*** gcc-3.4.3/libjava/gnu/java/rmi/registry/RegistryImpl.java	Thu Nov  7 18:01:05 2002
--- gcc-4.0.0/libjava/gnu/java/rmi/registry/RegistryImpl.java	Fri Feb 18 20:52:15 2005
***************
*** 1,5 ****
  /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005
!   Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public static void version() {
*** 109,115 ****
  			   + System.getProperty("java.vm.name")
  			   + ") "
  			   + System.getProperty("java.vm.version"));
! 	System.out.println("Copyright 2002 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);
--- 110,116 ----
  			   + System.getProperty("java.vm.name")
  			   + ") "
  			   + System.getProperty("java.vm.version"));
! 	System.out.println("Copyright 2005 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);
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/rmic/CompilerProcess.java gcc-4.0.0/libjava/gnu/java/rmi/rmic/CompilerProcess.java
*** gcc-3.4.3/libjava/gnu/java/rmi/rmic/CompilerProcess.java	Thu Sep 18 05:51:50 2003
--- gcc-4.0.0/libjava/gnu/java/rmi/rmic/CompilerProcess.java	Mon May 31 09:17:33 2004
*************** public abstract class CompilerProcess ex
*** 51,57 ****
     /**
      * This is used to compute the command line for the process.
      * Most compilers typically arrange their arguments as in
!     * <compiler name and arguments> <optional destination> <filename>.
      * This method builds an argument array out that. It should be used
      * to define computeArguments for those compilers that follow the
      * argument convention described above.
--- 51,57 ----
     /**
      * This is used to compute the command line for the process.
      * Most compilers typically arrange their arguments as in
!     * &lt;compiler name and arguments&gt; &lt;optional destination&gt; &lt;filename&gt;.
      * This method builds an argument array out that. It should be used
      * to define computeArguments for those compilers that follow the
      * argument convention described above.
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/rmic/RMIC.java gcc-4.0.0/libjava/gnu/java/rmi/rmic/RMIC.java
*** gcc-3.4.3/libjava/gnu/java/rmi/rmic/RMIC.java	Thu Sep 18 05:51:50 2003
--- gcc-4.0.0/libjava/gnu/java/rmi/rmic/RMIC.java	Fri Feb 18 20:52:15 2005
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* RMIC.java --
!    Copyright (c) 1996, 1997, 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 8,14 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,1084 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package gnu.java.rmi.rmic;
  
  import java.io.File;
  import java.io.FileWriter;
- import java.io.PrintWriter;
  import java.io.IOException;
  import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
  import java.rmi.RemoteException;
  import java.util.HashSet;
  import java.util.Iterator;
- import java.util.Arrays;
  import java.util.Set;
  
- import gnu.java.rmi.server.RMIHashes;
  
! public class RMIC {
  
! private String[] args;
! private int next;
! private Exception exception;
  
! private boolean keep = false;
! private boolean need11Stubs = true;
! private boolean need12Stubs = true;
! private boolean compile = true;
! private boolean verbose;
! private String destination;
  
! private PrintWriter out;
! private TabbedWriter ctrl;
  
! private Class clazz;
! private String classname;
! private String fullclassname;
! private MethodRef[] remotemethods;
! private String stubname;
! private String skelname;
! private int errorCount = 0;
  
! private Class mRemoteInterface;
! public RMIC(String[] a) {
! 	args = a;
! }
  
! public static void main(String args[]) {
! 	RMIC r = new RMIC(args);
! 	if (r.run() == false) {
! 		Exception exception = r.getException();
! 		if (exception != null) {
! 			exception.printStackTrace();
! 		}
! 		else {
! 			System.exit(1);
! 		}
! 	}
! }
  
! public boolean run() {
! 	parseOptions();
! 	if (next >= args.length) {
! 		error("no class names found");
! 	}
! 	for (int i = next; i < args.length; i++) {
! 		try {
! 			if (verbose) {
! 				System.out.println("[Processing class " + args[i] + ".class]");
! 			}
! 			processClass(args[i].replace(File.separatorChar, '.'));
! 		}
! 		catch (Exception e) {
! 			exception = e;
! 			return (false);
! 		}
! 	}
! 	return (true);
! }
  
! private boolean processClass(String classname) throws Exception {
! 	errorCount = 0;
! 	analyzeClass(classname);
! 	if(errorCount > 0) {
! 		System.exit(1);
! 	}
! 	generateStub();
! 	if (need11Stubs) {
! 		generateSkel();
! 	}
! 	if (compile) {
! 		compile(stubname.replace('.', File.separatorChar) + ".java");
! 		if (need11Stubs) {
! 			compile(skelname.replace('.', File.separatorChar) + ".java");
! 		}
! 	}
! 	if (!keep) {
! 		(new File(stubname.replace('.', File.separatorChar) + ".java")).delete();
! 		if (need11Stubs) {
! 			(new File(skelname.replace('.', File.separatorChar) + ".java")).delete();
! 		}
! 	}
! 	return (true);
! }
  
! private void analyzeClass(String cname) throws Exception {
! 	if(verbose){
! 			System.out.println("[analyze class "+cname+"]");
! 		}
! 	int p = cname.lastIndexOf('.');
! 	if (p != -1) {
! 		classname = cname.substring(p+1);
! 	}
! 	else {
! 		classname = cname;
! 	}
! 	fullclassname = cname;
  
! 	
! 	HashSet rmeths = new HashSet();
! 	findClass();
! 	
! 	// get the remote interface
! 	mRemoteInterface = getRemoteInterface(clazz);
! 	if(mRemoteInterface == null)
! 		return;
! 	if(verbose){
! 		System.out.println("[implements "+mRemoteInterface.getName()+"]");
! 	}
  
! 	// check if the methods of the remote interface declare RemoteExceptions
! 	Method[] meths = mRemoteInterface.getDeclaredMethods();
! 	for (int i = 0; i < meths.length; i++) {
! 		Class[] exceptions = meths[i].getExceptionTypes();
! 		int index = 0;
! 		for(;index < exceptions.length; index++){
! 			if(exceptions[index].equals(RemoteException.class)){
! 				break;
! 			}
! 		}
! 		if (index < exceptions.length) {
! 			rmeths.add(meths[i]);
! 		} else {
! 			logError("Method "+meths[i]+" does not throw a java.rmi.RemoteException");
! 		}
! 	}
  
  
! 	// Convert into a MethodRef array and sort them
! 	remotemethods = new MethodRef[rmeths.size()];
! 	int c = 0;
! 	for (Iterator i = rmeths.iterator(); i.hasNext(); ) {
! 		remotemethods[c++] = new MethodRef((Method)i.next());
! 	}
! 	Arrays.sort(remotemethods);
! }
  
! public Exception getException() {
! 	return (exception);
! }
  
! private void findClass() throws ClassNotFoundException {
! 	clazz = Class.forName(fullclassname, true, ClassLoader.getSystemClassLoader());
! }
  
! private void generateStub() throws IOException {
! 	stubname = fullclassname + "_Stub";
! 	String stubclassname = classname + "_Stub";
! 	ctrl = new TabbedWriter(new FileWriter((destination == null ? "" : destination + File.separator)
! 					       + stubname.replace('.', File.separatorChar)
! 					       + ".java"));
! 	out = new PrintWriter(ctrl);
  
! 	if (verbose) {
! 		System.out.println("[Generating class " + stubname + ".java]");
! 	}
  
! 	out.println("// Stub class generated by rmic - DO NOT EDIT!");
  	out.println();
! 	if (fullclassname != classname) {
! 		String pname = fullclassname.substring(0, fullclassname.lastIndexOf('.'));
! 		out.println("package " + pname + ";");
! 		out.println();
! 	}
  
- 	out.print("public final class " + stubclassname);
  	ctrl.indent();
! 	out.println("extends java.rmi.server.RemoteStub");
! 	
! 	// Output interfaces we implement
! 	out.print("implements ");
! 	/* Scan implemented interfaces, and only print remote interfaces. */ 
!         Class[] ifaces = clazz.getInterfaces(); 
! 	Set remoteIfaces = new HashSet();
!         for (int i = 0; i < ifaces.length; i++) {
! 		Class iface = ifaces[i];
! 		if (java.rmi.Remote.class.isAssignableFrom(iface)) {
! 			remoteIfaces.add(iface);
! 		}
! 	}
! 	Iterator iter = remoteIfaces.iterator();
! 	while (iter.hasNext()) {
! 		/* Print remote interface. */
! 		Class iface = (Class) iter.next();
! 		out.print(iface.getName());
  
! 		/* Print ", " if more remote interfaces follow. */
! 		if (iter.hasNext()) {
! 			out.print(", ");
! 		}
! 	}
  	ctrl.unindent();
! 	out.print("{");
  	ctrl.indent();
  
! 	// UID
! 	if (need12Stubs) {
! 		out.println("private static final long serialVersionUID = 2L;");
! 		out.println();
! 	}
  
! 	// InterfaceHash - don't know how to calculate this - XXX
! 	if (need11Stubs) {
! 		out.println("private static final long interfaceHash = " + RMIHashes.getInterfaceHash(clazz) + "L;");
! 		out.println();
! 		if (need12Stubs) {
! 			out.println("private static boolean useNewInvoke;");
! 			out.println();
! 		}
  
! 		// Operation table
! 		out.print("private static final java.rmi.server.Operation[] operations = {");
  
! 		ctrl.indent();
! 		for (int i = 0; i < remotemethods.length; i++) {
! 			Method m = remotemethods[i].meth;
! 			out.print("new java.rmi.server.Operation(\"");
! 			out.print(getPrettyName(m.getReturnType()) + " ");
! 			out.print(m.getName() + "(");
! 			// Output signature
! 			Class[] sig = m.getParameterTypes();
! 			for (int j = 0; j < sig.length; j++) {
! 				out.print(getPrettyName(sig[j]));
! 				if (j+1 < sig.length) {
! 					out.print(", ");
! 				}
! 			}
! 			out.print(")\")");
! 			if (i + 1 < remotemethods.length) {
! 				out.println(",");
! 			}
! 		}
! 		ctrl.unindent();
! 		out.println("};");
! 		out.println();
! 	}
  
! 	// Set of method references.
! 	if (need12Stubs) {
! 		for (int i = 0; i < remotemethods.length; i++) {
! 			Method m = remotemethods[i].meth;
! 			out.println("private static java.lang.reflect.Method $method_" + m.getName() + "_" + i + ";");
! 		}
  
! 		// Initialize the methods references.
! 		out.println();
! 		out.print("static {");
! 		ctrl.indent();
  
! 		out.print("try {");
  		ctrl.indent();
  
! 		if (need11Stubs) {
! 			out.println("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 });");
! 			out.println("useNewInvoke = true;");
! 		}
  
! 		for (int i = 0; i < remotemethods.length; i++) {
! 			Method m = remotemethods[i].meth;
! 			out.print("$method_" + m.getName() + "_" + i + " = ");
! 			out.print(mRemoteInterface.getName() + ".class.getMethod(\"" + m.getName() + "\"");
! 			out.print(", new java.lang.Class[] {");
! 			// Output signature
! 			Class[] sig = m.getParameterTypes();
! 			for (int j = 0; j < sig.length; j++) {
! 				out.print(getPrettyName(sig[j]) + ".class");
! 				if (j+1 < sig.length) {
! 					out.print(", ");
! 				}
! 			}
! 			out.println("});");
! 		}
  		ctrl.unindent();
  		out.println("}");
! 		out.print("catch (java.lang.NoSuchMethodException e) {");
  		ctrl.indent();
! 		if (need11Stubs) {
! 			out.print("useNewInvoke = false;");
! 		}
! 		else {
! 			out.print("throw new java.lang.NoSuchMethodError(\"stub class initialization failed\");");
! 		}
! 
! 		ctrl.unindent();
! 		out.print("}");
  
! 		ctrl.unindent();
! 		out.println("}");
  		out.println();
! 	}
! 
! 	// Constructors
! 	if (need11Stubs) {
! 		out.print("public " + stubclassname + "() {");
  		ctrl.indent();
! 		out.print("super();");
  		ctrl.unindent();
  		out.println("}");
! 	}
  
! 	if (need12Stubs) {
! 		out.print("public " + stubclassname + "(java.rmi.server.RemoteRef ref) {");
! 		ctrl.indent();
! 		out.print("super(ref);");
  		ctrl.unindent();
! 		out.println("}");
! 	}
! 
! 	// Method implementations
! 	for (int i = 0; i < remotemethods.length; i++) {
! 		Method m = remotemethods[i].meth;
! 		Class[] sig = m.getParameterTypes();
! 		Class returntype = m.getReturnType();
! 		Class[] except = sortExceptions(m.getExceptionTypes());
  
! 		out.println();
! 		out.print("public " + getPrettyName(returntype) + " " + m.getName() + "(");
! 		for (int j = 0; j < sig.length; j++) {
! 			out.print(getPrettyName(sig[j]));
! 			out.print(" $param_" + j);
! 			if (j+1 < sig.length) {
! 				out.print(", ");
! 			}
! 		}
! 		out.print(") ");
! 		out.print("throws ");
! 		for (int j = 0; j < except.length; j++) {
! 			out.print(getPrettyName(except[j]));
! 			if (j+1 < except.length) {
! 				out.print(", ");
! 			}
! 		}
! 		out.print(" {");
! 		ctrl.indent();
  
! 		out.print("try {");
! 		ctrl.indent();
  
! 		if (need12Stubs) {
! 			if (need11Stubs) {
! 				out.print("if (useNewInvoke) {");
! 				ctrl.indent();
! 			}
! 			if (returntype != Void.TYPE) {
! 				out.print("java.lang.Object $result = ");
! 			}
! 			out.print("ref.invoke(this, $method_" + m.getName() + "_" + i + ", ");
! 			if (sig.length == 0) {
! 				out.print("null, ");
! 			}
! 			else {
! 				out.print("new java.lang.Object[] {");
! 				for (int j = 0; j < sig.length; j++) {
! 					if (sig[j] == Boolean.TYPE) {
! 						out.print("new java.lang.Boolean($param_" + j + ")");
! 					}
! 					else if (sig[j] == Byte.TYPE) {
! 						out.print("new java.lang.Byte($param_" + j + ")");
! 					}
! 					else if (sig[j] == Character.TYPE) {
! 						out.print("new java.lang.Character($param_" + j + ")");
! 					}
! 					else if (sig[j] == Short.TYPE) {
! 						out.print("new java.lang.Short($param_" + j + ")");
! 					}
! 					else if (sig[j] == Integer.TYPE) {
! 						out.print("new java.lang.Integer($param_" + j + ")");
! 					}
! 					else if (sig[j] == Long.TYPE) {
! 						out.print("new java.lang.Long($param_" + j + ")");
! 					}
! 					else if (sig[j] == Float.TYPE) {
! 						out.print("new java.lang.Float($param_" + j + ")");
! 					}
! 					else if (sig[j] == Double.TYPE) {
! 						out.print("new java.lang.Double($param_" + j + ")");
! 					}
! 					else {
! 						out.print("$param_" + j);
! 					}
! 					if (j+1 < sig.length) {
! 						out.print(", ");
! 					}
! 				}
! 				out.print("}, ");
! 			}
! 			out.print(Long.toString(remotemethods[i].hash) + "L");
! 			out.print(");");
  
! 			if (returntype != Void.TYPE) {
! 				out.println();
! 				out.print("return (");
! 				if (returntype == Boolean.TYPE) {
! 					out.print("((java.lang.Boolean)$result).booleanValue()");
! 				}
! 				else if (returntype == Byte.TYPE) {
! 					out.print("((java.lang.Byte)$result).byteValue()");
! 				}
! 				else if (returntype == Character.TYPE) {
! 					out.print("((java.lang.Character)$result).charValue()");
! 				}
! 				else if (returntype == Short.TYPE) {
! 					out.print("((java.lang.Short)$result).shortValue()");
! 				}
! 				else if (returntype == Integer.TYPE) {
! 					out.print("((java.lang.Integer)$result).intValue()");
! 				}
! 				else if (returntype == Long.TYPE) {
! 					out.print("((java.lang.Long)$result).longValue()");
! 				}
! 				else if (returntype == Float.TYPE) {
! 					out.print("((java.lang.Float)$result).floatValue()");
! 				}
! 				else if (returntype == Double.TYPE) {
! 					out.print("((java.lang.Double)$result).doubleValue()");
! 				}
! 				else {
! 					out.print("(" + getPrettyName(returntype) + ")$result");
! 				}
! 				out.print(");");
! 			}
  
! 			if (need11Stubs) {
! 				ctrl.unindent();
! 				out.println("}");
! 				out.print("else {");
! 				ctrl.indent();
! 			}
! 		}
  
! 		if (need11Stubs) {
! 			out.println("java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, " + i + ", interfaceHash);");
! 			out.print("try {");
! 			ctrl.indent();
! 			out.print("java.io.ObjectOutput out = call.getOutputStream();");
! 			for (int j = 0; j < sig.length; j++) {
! 				out.println();
! 				if (sig[j] == Boolean.TYPE) {
! 					out.print("out.writeBoolean(");
! 				}
! 				else if (sig[j] == Byte.TYPE) {
! 					out.print("out.writeByte(");
! 				}
! 				else if (sig[j] == Character.TYPE) {
! 					out.print("out.writeChar(");
! 				}
! 				else if (sig[j] == Short.TYPE) {
! 					out.print("out.writeShort(");
! 				}
! 				else if (sig[j] == Integer.TYPE) {
! 					out.print("out.writeInt(");
! 				}
! 				else if (sig[j] == Long.TYPE) {
! 					out.print("out.writeLong(");
! 				}
! 				else if (sig[j] == Float.TYPE) {
! 					out.print("out.writeFloat(");
! 				}
! 				else if (sig[j] == Double.TYPE) {
! 					out.print("out.writeDouble(");
! 				}
! 				else {
! 					out.print("out.writeObject(");
! 				}
! 				out.print("$param_" + j + ");");
! 			}
! 			ctrl.unindent();
! 			out.println("}");
! 			out.print("catch (java.io.IOException e) {");
! 			ctrl.indent();
! 			out.print("throw new java.rmi.MarshalException(\"error marshalling arguments\", e);");
! 			ctrl.unindent();
! 			out.println("}");
! 			out.println("ref.invoke(call);");
! 			if (returntype != Void.TYPE) {
! 				out.println(getPrettyName(returntype) + " $result;");
! 			}
! 			out.print("try {");
! 			ctrl.indent();
! 			out.print("java.io.ObjectInput in = call.getInputStream();");
! 			boolean needcastcheck = false;
! 			if (returntype != Void.TYPE) {
! 				out.println();
! 				out.print("$result = ");
! 				if (returntype == Boolean.TYPE) {
! 					out.print("in.readBoolean();");
! 				}
! 				else if (returntype == Byte.TYPE) {
! 					out.print("in.readByte();");
! 				}
! 				else if (returntype == Character.TYPE) {
! 					out.print("in.readChar();");
! 				}
! 				else if (returntype == Short.TYPE) {
! 					out.print("in.readShort();");
! 				}
! 				else if (returntype == Integer.TYPE) {
! 					out.print("in.readInt();");
! 				}
! 				else if (returntype == Long.TYPE) {
! 					out.print("in.readLong();");
! 				}
! 				else if (returntype == Float.TYPE) {
! 					out.print("in.readFloat();");
! 				}
! 				else if (returntype == Double.TYPE) {
! 					out.print("in.readDouble();");
! 				}
! 				else {
! 					if (returntype != Object.class) {
! 						out.print("(" + getPrettyName(returntype) + ")");
! 					}
! 					else {
! 						needcastcheck = true;
! 					}
! 					out.print("in.readObject();");
! 				}
! 				out.println();
! 				out.print("return ($result);");
! 			}
! 			ctrl.unindent();
! 			out.println("}");
! 			out.print("catch (java.io.IOException e) {");
! 			ctrl.indent();
! 			out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling return\", e);");
! 			ctrl.unindent();
! 			out.println("}");
! 			if (needcastcheck) {
! 				out.print("catch (java.lang.ClassNotFoundException e) {");
! 				ctrl.indent();
! 				out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling return\", e);");
! 				ctrl.unindent();
! 				out.println("}");
! 			}
! 			out.print("finally {");
! 			ctrl.indent();
! 			out.print("ref.done(call);");
! 			ctrl.unindent();
! 			out.print("}");
  
! 			if (need12Stubs && need11Stubs) {
! 				ctrl.unindent();
! 				out.print("}");
! 			}
! 		}
  
! 		ctrl.unindent();
! 		out.print("}");
  
! 		boolean needgeneral = true;
! 		for (int j = 0; j < except.length; j++) {
! 			out.println();
! 			out.print("catch (" + getPrettyName(except[j]) + " e) {");
! 			ctrl.indent();
! 			out.print("throw e;");
! 			ctrl.unindent();
! 			out.print("}");
! 			if (except[j] == Exception.class) {
! 				needgeneral = false;
! 			}
! 		}
! 		if (needgeneral) {
! 			out.println();
! 			out.print("catch (java.lang.Exception e) {");
! 			ctrl.indent();
! 			out.print("throw new java.rmi.UnexpectedException(\"undeclared checked exception\", e);");
! 			ctrl.unindent();
! 			out.print("}");
! 		}
  
! 		ctrl.unindent();
! 		out.print("}");
! 		out.println();
! 	}
  
! 	ctrl.unindent();
! 	out.println("}");
  
! 	out.close();
! }
  
! private void generateSkel() throws IOException {
! 	skelname = fullclassname + "_Skel";
! 	String skelclassname = classname + "_Skel";
! 	ctrl = new TabbedWriter(new FileWriter((destination == null ? "" : destination + File.separator)
! 					       + skelname.replace('.', File.separatorChar)
! 					       + ".java"));
! 	out = new PrintWriter(ctrl);
  
! 	if (verbose) {
! 		System.out.println("[Generating class " + skelname + ".java]");
! 	}
  
! 	out.println("// Skel class generated by rmic - DO NOT EDIT!");
! 	out.println();
! 	if (fullclassname != classname) {
! 		String pname = fullclassname.substring(0, fullclassname.lastIndexOf('.'));
! 		out.println("package " + pname + ";");
! 		out.println();
! 	}
  
! 	out.print("public final class " + skelclassname);
! 	ctrl.indent();
! 	
! 	// Output interfaces we implement
! 	out.print("implements java.rmi.server.Skeleton");
  
! 	ctrl.unindent();
! 	out.print("{");
! 	ctrl.indent();
  
! 	// Interface hash - don't know how to calculate this - XXX
! 	out.println("private static final long interfaceHash = " + RMIHashes.getInterfaceHash(clazz) + "L;");
! 	out.println();
  
! 	// Operation table
! 	out.print("private static final java.rmi.server.Operation[] operations = {");
  
  	ctrl.indent();
! 	for (int i = 0; i < remotemethods.length; i++) {
! 		Method m = remotemethods[i].meth;
! 		out.print("new java.rmi.server.Operation(\"");
! 		out.print(getPrettyName(m.getReturnType()) + " ");
! 		out.print(m.getName() + "(");
! 		// Output signature
! 		Class[] sig = m.getParameterTypes();
! 		for (int j = 0; j < sig.length; j++) {
! 			out.print(getPrettyName(sig[j]));
! 			if (j+1 < sig.length) {
! 				out.print(", ");
! 			}
! 		}
! 		out.print("\")");
! 		if (i + 1 < remotemethods.length) {
! 			out.println(",");
! 		}
! 	}
  	ctrl.unindent();
! 	out.println("};");
  
! 	out.println();
  
! 	// getOperations method
! 	out.print("public java.rmi.server.Operation[] getOperations() {");
! 	ctrl.indent();
! 	out.print("return ((java.rmi.server.Operation[]) operations.clone());");
! 	ctrl.unindent();
! 	out.println("}");
  
! 	out.println();
  
! 	// Dispatch method
! 	out.print("public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash) throws java.lang.Exception {");
  	ctrl.indent();
  
! 	out.print("if (opnum < 0) {");
! 	ctrl.indent();
  
! 	for (int i = 0; i < remotemethods.length; i++) {
! 		out.print("if (hash == " + Long.toString(remotemethods[i].hash) + "L) {");
! 		ctrl.indent();
! 		out.print("opnum = " + i + ";");
! 		ctrl.unindent();
! 		out.println("}");
! 		out.print("else ");
! 	}
! 	out.print("{");
  	ctrl.indent();
! 	out.print("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");");
  	ctrl.unindent();
! 	out.print("}");
! 
  	ctrl.unindent();
  	out.println("}");
! 	out.print("else if (hash != interfaceHash) {");
  	ctrl.indent();
! 	out.print("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");");
  	ctrl.unindent();
  	out.println("}");
  
! 	out.println();
! 
! 	out.println(fullclassname + " server = (" + fullclassname + ")obj;");
! 	out.println("switch (opnum) {");
! 
! 	// Method dispatch
! 	for (int i = 0; i < remotemethods.length; i++) {
! 		Method m = remotemethods[i].meth;
! 		out.println("case " + i + ":");
! 		out.print("{");
! 		ctrl.indent();
! 
! 		Class[] sig = m.getParameterTypes();
! 		for (int j = 0; j < sig.length; j++) {
! 			out.print(getPrettyName(sig[j]));
! 			out.println(" $param_" + j + ";");
! 		}
! 
! 		out.print("try {");
! 		boolean needcastcheck = false;
! 		ctrl.indent();
! 		out.println("java.io.ObjectInput in = call.getInputStream();");
! 		for (int j = 0; j < sig.length; j++) {
! 			out.print("$param_" + j + " = ");
! 			if (sig[j] == Boolean.TYPE) {
! 				out.print("in.readBoolean();");
! 			}
! 			else if (sig[j] == Byte.TYPE) {
! 				out.print("in.readByte();");
! 			}
! 			else if (sig[j] == Character.TYPE) {
! 				out.print("in.readChar();");
! 			}
! 			else if (sig[j] == Short.TYPE) {
! 				out.print("in.readShort();");
! 			}
! 			else if (sig[j] == Integer.TYPE) {
! 				out.print("in.readInt();");
! 			}
! 			else if (sig[j] == Long.TYPE) {
! 				out.print("in.readLong();");
! 			}
! 			else if (sig[j] == Float.TYPE) {
! 				out.print("in.readFloat();");
! 			}
! 			else if (sig[j] == Double.TYPE) {
! 				out.print("in.readDouble();");
! 			}
! 			else {
! 				if (sig[j] != Object.class) {
! 					out.print("(" + getPrettyName(sig[j]) + ")");
! 					needcastcheck = true;
! 				}
! 				out.print("in.readObject();");
! 			}
! 			out.println();
! 		}
! 		ctrl.unindent();
! 		out.println("}");
! 		out.print("catch (java.io.IOException e) {");
! 		ctrl.indent();
! 		out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling arguments\", e);");
! 		ctrl.unindent();
! 		out.println("}");
! 		if (needcastcheck) {
! 			out.print("catch (java.lang.ClassCastException e) {");
! 			ctrl.indent();
! 			out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling arguments\", e);");
! 			ctrl.unindent();
! 			out.println("}");
! 		}
! 		out.print("finally {");
! 		ctrl.indent();
! 		out.print("call.releaseInputStream();");
! 		ctrl.unindent();
! 		out.println("}");
! 
! 		Class returntype = m.getReturnType();
! 		if (returntype != Void.TYPE) {
! 			out.print(getPrettyName(returntype) + " $result = ");
! 		}
! 		out.print("server." + m.getName() + "(");
! 		for (int j = 0; j < sig.length; j++) {
! 			out.print("$param_" + j);
! 			if (j + 1 < sig.length) {
! 				out.print(", ");
! 			}
! 		}
! 		out.println(");");
! 
! 		out.print("try {");
! 		ctrl.indent();
! 		out.print("java.io.ObjectOutput out = call.getResultStream(true);");
! 		if (returntype != Void.TYPE) {
! 			out.println();
! 			if (returntype == Boolean.TYPE) {
! 				out.print("out.writeBoolean($result);");
! 			}
! 			else if (returntype == Byte.TYPE) {
! 				out.print("out.writeByte($result);");
! 			}
! 			else if (returntype == Character.TYPE) {
! 				out.print("out.writeChar($result);");
! 			}
! 			else if (returntype == Short.TYPE) {
! 				out.print("out.writeShort($result);");
! 			}
! 			else if (returntype == Integer.TYPE) {
! 				out.print("out.writeInt($result);");
! 			}
! 			else if (returntype == Long.TYPE) {
! 				out.print("out.writeLong($result);");
! 			}
! 			else if (returntype == Float.TYPE) {
! 				out.print("out.writeFloat($result);");
! 			}
! 			else if (returntype == Double.TYPE) {
! 				out.print("out.writeDouble($result);");
! 			}
! 			else {
! 				out.print("out.writeObject($result);");
! 			}
! 		}
! 		ctrl.unindent();
! 		out.println("}");
! 		out.print("catch (java.io.IOException e) {");
! 		ctrl.indent();
! 		out.print("throw new java.rmi.MarshalException(\"error marshalling return\", e);");
! 		ctrl.unindent();
! 		out.println("}");
! 		out.print("break;");
! 
! 		ctrl.unindent();
! 		out.println("}");
! 		out.println();
! 	}
  
! 	out.print("default:");
  	ctrl.indent();
! 	out.print("throw new java.rmi.UnmarshalException(\"invalid method number\");");
  	ctrl.unindent();
! 	out.print("}");
! 
  	ctrl.unindent();
! 	out.print("}");
  
  	ctrl.unindent();
  	out.println("}");
  
! 	out.close();
! }
  
! private void compile(String name) throws Exception {
! 	Compiler comp = Compiler.getInstance();
! 	if (verbose) {
! 		System.out.println("[Compiling class " + name + "]");
! 	}
! 	comp.setDestination(destination);
! 	comp.compile(name);
! }
  
! private static String getPrettyName(Class cls) {
!         StringBuffer str = new StringBuffer();
!         for (int count = 0;; count++) {
!                 if (!cls.isArray()) {
!                         str.append(cls.getName());
!                         for (; count > 0; count--) {
!                                 str.append("[]");
!                         }
!                         return (str.toString());
!                 }
!                 cls = cls.getComponentType();
!         }
! }
  
  /**
   * Sort exceptions so the most general go last.
   */
! private Class[] sortExceptions(Class[] except) {
! 	for (int i = 0; i < except.length; i++) {
! 		for (int j = i+1; j < except.length; j++) {
! 			if (except[i].isAssignableFrom(except[j])) {
! 				Class tmp = except[i];
! 				except[i] = except[j];
! 				except[j] = tmp;
! 			}
! 		}
! 	}
! 	return (except);
! }
  
  /**
   * Process the options until we find the first argument.
   */
! private void parseOptions() {
! 	for (;;) {
! 		if (next >= args.length || args[next].charAt(0) != '-') {
! 			break;
! 		}
! 		String arg = args[next];
! 		next++;
  
! 		// Accept `--' options if they look long enough.
! 		if (arg.length() > 3 && arg.charAt(0) == '-'
! 		    && arg.charAt(1) == '-')
! 		  arg = arg.substring(1);
  
! 		if (arg.equals("-keep")) {
! 			keep = true;
! 		}
! 		else if (arg.equals("-keepgenerated")) {
! 			keep = true;
! 		}
! 		else if (arg.equals("-v1.1")) {
! 			need11Stubs = true;
! 			need12Stubs = false;
! 		}
! 		else if (arg.equals("-vcompat")) {
! 			need11Stubs = true;
! 			need12Stubs = true;
! 		}
! 		else if (arg.equals("-v1.2")) {
! 			need11Stubs = false;
! 			need12Stubs = true;
! 		}
! 		else if (arg.equals("-g")) {
! 		}
! 		else if (arg.equals("-depend")) {
! 		}
! 		else if (arg.equals("-nowarn")) {
! 		}
! 		else if (arg.equals("-verbose")) {
! 			verbose = true;
! 		}
! 		else if (arg.equals("-nocompile")) {
! 			compile = false;
! 		}
! 		else if (arg.equals("-classpath")) {
! 			next++;
! 		}
! 		else if (arg.equals("-help")) {
! 			usage();
! 		}
! 		else if (arg.equals("-version")) {
! 			System.out.println("rmic ("
! 					   + System.getProperty("java.vm.name")
! 					   + ") "
! 					   + System.getProperty("java.vm.version"));
! 			System.out.println();
! 			System.out.println("Copyright 2002 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);
! 		}
! 		else if (arg.equals("-d")) {
! 			destination = args[next];
! 			next++;
! 		}
! 		else if (arg.charAt(1) == 'J') {
! 		}
! 		else {
! 			error("unrecognized option `" + arg + "'");
! 		}
! 	}
! }
  
  /**
   * Looks for the java.rmi.Remote interface that that is implemented by theClazz.
!  * @param theClazz the class to look in  
   * @return the Remote interface of theClazz or null if theClazz does not implement a Remote interface
   */
! private Class getRemoteInterface(Class theClazz)
! {
! 	Class[] interfaces = theClazz.getInterfaces();
! 	for (int i = 0; i < interfaces.length; i++)
! 	{
! 		if (java.rmi.Remote.class.isAssignableFrom(interfaces[i]))
! 		{
! 			return interfaces[i];
! 		}
! 	}
! 	logError("Class "+ theClazz.getName()
! 			+ " is not a remote object. It does not implement an interface that is a java.rmi.Remote-interface.");
! 	return null;
! }
! 	
  /**
   * Prints an error to System.err and increases the error count.
   * @param theError
   */
! private void logError(String theError){
! 	errorCount++;
! 	System.err.println("error:"+theError);
! }
! 
! private static void error(String message) {
! 	System.err.println("rmic: " + message);
! 	System.err.println("Try `rmic --help' for more information.");
! 	System.exit(1);
! }
! 
! private static void usage() {
! 	System.out.println(
! "Usage: rmic [OPTION]... CLASS...\n" +
! "\n" +
! "	-keep 			Don't delete any intermediate files\n" +
! "	-keepgenerated 		Same as -keep\n" +
! "	-v1.1			Java 1.1 style stubs only\n" +
! "	-vcompat		Java 1.1 & Java 1.2 stubs\n" +
! "	-v1.2			Java 1.2 style stubs only\n" +
! "	-g *			Generated debugging information\n" +
! "	-depend *		Recompile out-of-date files\n" +
! "	-nowarn	*		Suppress warning messages\n" +
! "	-nocompile		Don't compile the generated files\n" +
! "	-verbose 		Output what's going on\n" +
! "	-classpath <path> *	Use given path as classpath\n" +
! "	-d <directory> 		Specify where to place generated classes\n" +
! "	-J<flag> *		Pass flag to Java\n" +
! "	-help			Print this help, then exit\n" +
! "	-version		Print version number, then exit\n" +
! "\n" +
! "  * Option currently ignored\n" +
! "Long options can be used with `--option' form as well."
! 	);
! 	System.exit(0);
! }
! 
! static class MethodRef
! 	implements Comparable {
  
! Method meth;
! String sig;
! long hash;
  
! MethodRef(Method m) {
! 	meth = m;
! 	// We match on the name - but what about overloading? - XXX
! 	sig = m.getName();
! 	hash = RMIHashes.getMethodHash(m);
! }
  
! public int compareTo(Object obj) {
! 	MethodRef that = (MethodRef)obj;
! 	return (this.sig.compareTo(that.sig));
! }
  
! }
  
  }
--- 36,1078 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package gnu.java.rmi.rmic;
  
+ import gnu.java.rmi.server.RMIHashes;
+ 
  import java.io.File;
  import java.io.FileWriter;
  import java.io.IOException;
+ import java.io.PrintWriter;
  import java.lang.reflect.Method;
  import java.rmi.RemoteException;
+ import java.util.Arrays;
  import java.util.HashSet;
  import java.util.Iterator;
  import java.util.Set;
  
  
! public class RMIC
! {
!   private String[] args;
!   private int next;
!   private Exception exception;
!   private boolean keep = false;
!   private boolean need11Stubs = true;
!   private boolean need12Stubs = true;
!   private boolean compile = true;
!   private boolean verbose;
!   private String destination;
!   private PrintWriter out;
!   private TabbedWriter ctrl;
!   private Class clazz;
!   private String classname;
!   private String fullclassname;
!   private MethodRef[] remotemethods;
!   private String stubname;
!   private String skelname;
!   private int errorCount = 0;
!   private Class mRemoteInterface;
  
!   public RMIC(String[] a)
!   {
!     args = a;
!   }
  
!   public static void main(String[] args)
!   {
!     RMIC r = new RMIC(args);
!     if (r.run() == false)
!       {
! 	Exception e = r.getException();
! 	if (e != null)
! 	  e.printStackTrace();
! 	else
! 	  System.exit(1);
!       }
!   }
  
!   public boolean run()
!   {
!     parseOptions();
!     if (next >= args.length)
!       error("no class names found");
!     for (int i = next; i < args.length; i++)
!       {
! 	try
! 	  {
! 	    if (verbose)
! 	      System.out.println("[Processing class " + args[i] + ".class]");
! 	    processClass(args[i].replace(File.separatorChar, '.'));
! 	  }
! 	catch (Exception e)
! 	  {
! 	    exception = e;
! 	    return (false);
! 	  }
!       }
!     return (true);
!   }
  
!   private boolean processClass(String classname) throws Exception
!   {
!     errorCount = 0;
!     analyzeClass(classname);
!     if (errorCount > 0)
!       System.exit(1);
!     generateStub();
!     if (need11Stubs)
!       generateSkel();
!     if (compile)
!       {
! 	compile(stubname.replace('.', File.separatorChar) + ".java");
! 	if (need11Stubs)
! 	  compile(skelname.replace('.', File.separatorChar) + ".java");
!       }
!     if (! keep)
!       {
! 	(new File(stubname.replace('.', File.separatorChar) + ".java")).delete();
! 	if (need11Stubs)
! 	  (new File(skelname.replace('.', File.separatorChar) + ".java"))
! 	  .delete();
!       }
!     return (true);
!   }
  
!   private void analyzeClass(String cname) throws Exception
!   {
!     if (verbose)
!       System.out.println("[analyze class " + cname + "]");
!     int p = cname.lastIndexOf('.');
!     if (p != -1)
!       classname = cname.substring(p + 1);
!     else
!       classname = cname;
!     fullclassname = cname;
  
!     HashSet rmeths = new HashSet();
!     findClass();
  
!     // get the remote interface
!     mRemoteInterface = getRemoteInterface(clazz);
!     if (mRemoteInterface == null)
!       return;
!     if (verbose)
!       System.out.println("[implements " + mRemoteInterface.getName() + "]");
  
!     // check if the methods of the remote interface declare RemoteExceptions
!     Method[] meths = mRemoteInterface.getDeclaredMethods();
!     for (int i = 0; i < meths.length; i++)
!       {
! 	Class[] exceptions = meths[i].getExceptionTypes();
! 	int index = 0;
! 	for (; index < exceptions.length; index++)
! 	  {
! 	    if (exceptions[index].equals(RemoteException.class))
! 	      break;
! 	  }
! 	if (index < exceptions.length)
! 	  rmeths.add(meths[i]);
! 	else
! 	  logError("Method " + meths[i]
! 	           + " does not throw a java.rmi.RemoteException");
!       }
  
!     // Convert into a MethodRef array and sort them
!     remotemethods = new MethodRef[rmeths.size()];
!     int c = 0;
!     for (Iterator i = rmeths.iterator(); i.hasNext();)
!       remotemethods[c++] = new MethodRef((Method) i.next());
!     Arrays.sort(remotemethods);
!   }
  
!   public Exception getException()
!   {
!     return (exception);
!   }
  
!   private void findClass() throws ClassNotFoundException
!   {
!     clazz =
!       Class.forName(fullclassname, true, ClassLoader.getSystemClassLoader());
!   }
  
+   private void generateStub() throws IOException
+   {
+     stubname = fullclassname + "_Stub";
+     String stubclassname = classname + "_Stub";
+     ctrl =
+       new TabbedWriter(new FileWriter((destination == null ? ""
+                                                            : destination
+                                                            + File.separator)
+                                       + stubname.replace('.',
+                                                          File.separatorChar)
+                                       + ".java"));
+     out = new PrintWriter(ctrl);
  
!     if (verbose)
!       System.out.println("[Generating class " + stubname + ".java]");
  
!     out.println("// Stub class generated by rmic - DO NOT EDIT!");
!     out.println();
!     if (fullclassname != classname)
!       {
! 	String pname =
! 	  fullclassname.substring(0, fullclassname.lastIndexOf('.'));
! 	out.println("package " + pname + ";");
! 	out.println();
!       }
  
!     out.print("public final class " + stubclassname);
!     ctrl.indent();
!     out.println("extends java.rmi.server.RemoteStub");
  
!     // Output interfaces we implement
!     out.print("implements ");
!     /* Scan implemented interfaces, and only print remote interfaces. */
!     Class[] ifaces = clazz.getInterfaces();
!     Set remoteIfaces = new HashSet();
!     for (int i = 0; i < ifaces.length; i++)
!       {
! 	Class iface = ifaces[i];
! 	if (java.rmi.Remote.class.isAssignableFrom(iface))
! 	  remoteIfaces.add(iface);
!       }
!     Iterator iter = remoteIfaces.iterator();
!     while (iter.hasNext())
!       {
! 	/* Print remote interface. */
! 	Class iface = (Class) iter.next();
! 	out.print(iface.getName());
  
! 	/* Print ", " if more remote interfaces follow. */
! 	if (iter.hasNext())
! 	  out.print(", ");
!       }
!     ctrl.unindent();
!     out.print("{");
!     ctrl.indent();
  
!     // UID
!     if (need12Stubs)
!       {
! 	out.println("private static final long serialVersionUID = 2L;");
  	out.println();
!       }
! 
!     // InterfaceHash - don't know how to calculate this - XXX
!     if (need11Stubs)
!       {
! 	out.println("private static final long interfaceHash = "
! 	            + RMIHashes.getInterfaceHash(clazz) + "L;");
! 	out.println();
! 	if (need12Stubs)
! 	  {
! 	    out.println("private static boolean useNewInvoke;");
! 	    out.println();
! 	  }
! 
! 	// Operation table
! 	out.print("private static final java.rmi.server.Operation[] operations = {");
  
  	ctrl.indent();
! 	for (int i = 0; i < remotemethods.length; i++)
! 	  {
! 	    Method m = remotemethods[i].meth;
! 	    out.print("new java.rmi.server.Operation(\"");
! 	    out.print(getPrettyName(m.getReturnType()) + " ");
! 	    out.print(m.getName() + "(");
! 	    // Output signature
! 	    Class[] sig = m.getParameterTypes();
! 	    for (int j = 0; j < sig.length; j++)
! 	      {
! 		out.print(getPrettyName(sig[j]));
! 		if (j + 1 < sig.length)
! 		  out.print(", ");
! 	      }
! 	    out.print(")\")");
! 	    if (i + 1 < remotemethods.length)
! 	      out.println(",");
! 	  }
! 	ctrl.unindent();
! 	out.println("};");
! 	out.println();
!       }
  
!     // Set of method references.
!     if (need12Stubs)
!       {
! 	for (int i = 0; i < remotemethods.length; i++)
! 	  {
! 	    Method m = remotemethods[i].meth;
! 	    out.println("private static java.lang.reflect.Method $method_"
! 	                + m.getName() + "_" + i + ";");
! 	  }
! 
! 	// Initialize the methods references.
! 	out.println();
! 	out.print("static {");
! 	ctrl.indent();
! 
! 	out.print("try {");
! 	ctrl.indent();
! 
! 	if (need11Stubs)
! 	  {
! 	    out.println("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 });");
! 	    out.println("useNewInvoke = true;");
! 	  }
! 
! 	for (int i = 0; i < remotemethods.length; i++)
! 	  {
! 	    Method m = remotemethods[i].meth;
! 	    out.print("$method_" + m.getName() + "_" + i + " = ");
! 	    out.print(mRemoteInterface.getName() + ".class.getMethod(\""
! 	              + m.getName() + "\"");
! 	    out.print(", new java.lang.Class[] {");
! 	    // Output signature
! 	    Class[] sig = m.getParameterTypes();
! 	    for (int j = 0; j < sig.length; j++)
! 	      {
! 		out.print(getPrettyName(sig[j]) + ".class");
! 		if (j + 1 < sig.length)
! 		  out.print(", ");
! 	      }
! 	    out.println("});");
! 	  }
  	ctrl.unindent();
! 	out.println("}");
! 	out.print("catch (java.lang.NoSuchMethodException e) {");
  	ctrl.indent();
+ 	if (need11Stubs)
+ 	  out.print("useNewInvoke = false;");
+ 	else
+ 	  out.print("throw new java.lang.NoSuchMethodError(\"stub class initialization failed\");");
  
! 	ctrl.unindent();
! 	out.print("}");
  
! 	ctrl.unindent();
! 	out.println("}");
! 	out.println();
!       }
  
!     // Constructors
!     if (need11Stubs)
!       {
! 	out.print("public " + stubclassname + "() {");
! 	ctrl.indent();
! 	out.print("super();");
! 	ctrl.unindent();
! 	out.println("}");
!       }
  
!     if (need12Stubs)
!       {
! 	out.print("public " + stubclassname
! 	          + "(java.rmi.server.RemoteRef ref) {");
! 	ctrl.indent();
! 	out.print("super(ref);");
! 	ctrl.unindent();
! 	out.println("}");
!       }
  
!     // Method implementations
!     for (int i = 0; i < remotemethods.length; i++)
!       {
! 	Method m = remotemethods[i].meth;
! 	Class[] sig = m.getParameterTypes();
! 	Class returntype = m.getReturnType();
! 	Class[] except = sortExceptions(m.getExceptionTypes());
  
! 	out.println();
! 	out.print("public " + getPrettyName(returntype) + " " + m.getName()
! 	          + "(");
! 	for (int j = 0; j < sig.length; j++)
! 	  {
! 	    out.print(getPrettyName(sig[j]));
! 	    out.print(" $param_" + j);
! 	    if (j + 1 < sig.length)
! 	      out.print(", ");
! 	  }
! 	out.print(") ");
! 	out.print("throws ");
! 	for (int j = 0; j < except.length; j++)
! 	  {
! 	    out.print(getPrettyName(except[j]));
! 	    if (j + 1 < except.length)
! 	      out.print(", ");
! 	  }
! 	out.print(" {");
! 	ctrl.indent();
  
! 	out.print("try {");
! 	ctrl.indent();
! 
! 	if (need12Stubs)
! 	  {
! 	    if (need11Stubs)
! 	      {
! 		out.print("if (useNewInvoke) {");
  		ctrl.indent();
+ 	      }
+ 	    if (returntype != Void.TYPE)
+ 	      out.print("java.lang.Object $result = ");
+ 	    out.print("ref.invoke(this, $method_" + m.getName() + "_" + i
+ 	              + ", ");
+ 	    if (sig.length == 0)
+ 	      out.print("null, ");
+ 	    else
+ 	      {
+ 		out.print("new java.lang.Object[] {");
+ 		for (int j = 0; j < sig.length; j++)
+ 		  {
+ 		    if (sig[j] == Boolean.TYPE)
+ 		      out.print("new java.lang.Boolean($param_" + j + ")");
+ 		    else if (sig[j] == Byte.TYPE)
+ 		      out.print("new java.lang.Byte($param_" + j + ")");
+ 		    else if (sig[j] == Character.TYPE)
+ 		      out.print("new java.lang.Character($param_" + j + ")");
+ 		    else if (sig[j] == Short.TYPE)
+ 		      out.print("new java.lang.Short($param_" + j + ")");
+ 		    else if (sig[j] == Integer.TYPE)
+ 		      out.print("new java.lang.Integer($param_" + j + ")");
+ 		    else if (sig[j] == Long.TYPE)
+ 		      out.print("new java.lang.Long($param_" + j + ")");
+ 		    else if (sig[j] == Float.TYPE)
+ 		      out.print("new java.lang.Float($param_" + j + ")");
+ 		    else if (sig[j] == Double.TYPE)
+ 		      out.print("new java.lang.Double($param_" + j + ")");
+ 		    else
+ 		      out.print("$param_" + j);
+ 		    if (j + 1 < sig.length)
+ 		      out.print(", ");
+ 		  }
+ 		out.print("}, ");
+ 	      }
+ 	    out.print(Long.toString(remotemethods[i].hash) + "L");
+ 	    out.print(");");
  
! 	    if (returntype != Void.TYPE)
! 	      {
! 		out.println();
! 		out.print("return (");
! 		if (returntype == Boolean.TYPE)
! 		  out.print("((java.lang.Boolean)$result).booleanValue()");
! 		else if (returntype == Byte.TYPE)
! 		  out.print("((java.lang.Byte)$result).byteValue()");
! 		else if (returntype == Character.TYPE)
! 		  out.print("((java.lang.Character)$result).charValue()");
! 		else if (returntype == Short.TYPE)
! 		  out.print("((java.lang.Short)$result).shortValue()");
! 		else if (returntype == Integer.TYPE)
! 		  out.print("((java.lang.Integer)$result).intValue()");
! 		else if (returntype == Long.TYPE)
! 		  out.print("((java.lang.Long)$result).longValue()");
! 		else if (returntype == Float.TYPE)
! 		  out.print("((java.lang.Float)$result).floatValue()");
! 		else if (returntype == Double.TYPE)
! 		  out.print("((java.lang.Double)$result).doubleValue()");
! 		else
! 		  out.print("(" + getPrettyName(returntype) + ")$result");
! 		out.print(");");
! 	      }
  
! 	    if (need11Stubs)
! 	      {
  		ctrl.unindent();
  		out.println("}");
! 		out.print("else {");
  		ctrl.indent();
! 	      }
! 	  }
  
! 	if (need11Stubs)
! 	  {
! 	    out.println("java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, "
! 	                + i + ", interfaceHash);");
! 	    out.print("try {");
! 	    ctrl.indent();
! 	    out.print("java.io.ObjectOutput out = call.getOutputStream();");
! 	    for (int j = 0; j < sig.length; j++)
! 	      {
  		out.println();
! 		if (sig[j] == Boolean.TYPE)
! 		  out.print("out.writeBoolean(");
! 		else if (sig[j] == Byte.TYPE)
! 		  out.print("out.writeByte(");
! 		else if (sig[j] == Character.TYPE)
! 		  out.print("out.writeChar(");
! 		else if (sig[j] == Short.TYPE)
! 		  out.print("out.writeShort(");
! 		else if (sig[j] == Integer.TYPE)
! 		  out.print("out.writeInt(");
! 		else if (sig[j] == Long.TYPE)
! 		  out.print("out.writeLong(");
! 		else if (sig[j] == Float.TYPE)
! 		  out.print("out.writeFloat(");
! 		else if (sig[j] == Double.TYPE)
! 		  out.print("out.writeDouble(");
! 		else
! 		  out.print("out.writeObject(");
! 		out.print("$param_" + j + ");");
! 	      }
! 	    ctrl.unindent();
! 	    out.println("}");
! 	    out.print("catch (java.io.IOException e) {");
! 	    ctrl.indent();
! 	    out.print("throw new java.rmi.MarshalException(\"error marshalling arguments\", e);");
! 	    ctrl.unindent();
! 	    out.println("}");
! 	    out.println("ref.invoke(call);");
! 	    if (returntype != Void.TYPE)
! 	      out.println(getPrettyName(returntype) + " $result;");
! 	    out.print("try {");
! 	    ctrl.indent();
! 	    out.print("java.io.ObjectInput in = call.getInputStream();");
! 	    boolean needcastcheck = false;
! 	    if (returntype != Void.TYPE)
! 	      {
! 		out.println();
! 		out.print("$result = ");
! 		if (returntype == Boolean.TYPE)
! 		  out.print("in.readBoolean();");
! 		else if (returntype == Byte.TYPE)
! 		  out.print("in.readByte();");
! 		else if (returntype == Character.TYPE)
! 		  out.print("in.readChar();");
! 		else if (returntype == Short.TYPE)
! 		  out.print("in.readShort();");
! 		else if (returntype == Integer.TYPE)
! 		  out.print("in.readInt();");
! 		else if (returntype == Long.TYPE)
! 		  out.print("in.readLong();");
! 		else if (returntype == Float.TYPE)
! 		  out.print("in.readFloat();");
! 		else if (returntype == Double.TYPE)
! 		  out.print("in.readDouble();");
! 		else
! 		  {
! 		    if (returntype != Object.class)
! 		      out.print("(" + getPrettyName(returntype) + ")");
! 		    else
! 		      needcastcheck = true;
! 		    out.print("in.readObject();");
! 		  }
! 		out.println();
! 		out.print("return ($result);");
! 	      }
! 	    ctrl.unindent();
! 	    out.println("}");
! 	    out.print("catch (java.io.IOException e) {");
! 	    ctrl.indent();
! 	    out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling return\", e);");
! 	    ctrl.unindent();
! 	    out.println("}");
! 	    if (needcastcheck)
! 	      {
! 		out.print("catch (java.lang.ClassNotFoundException e) {");
  		ctrl.indent();
! 		out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling return\", e);");
  		ctrl.unindent();
  		out.println("}");
! 	      }
! 	    out.print("finally {");
! 	    ctrl.indent();
! 	    out.print("ref.done(call);");
! 	    ctrl.unindent();
! 	    out.print("}");
  
! 	    if (need12Stubs && need11Stubs)
! 	      {
  		ctrl.unindent();
! 		out.print("}");
! 	      }
! 	  }
  
! 	ctrl.unindent();
! 	out.print("}");
  
! 	boolean needgeneral = true;
! 	for (int j = 0; j < except.length; j++)
! 	  {
! 	    out.println();
! 	    out.print("catch (" + getPrettyName(except[j]) + " e) {");
! 	    ctrl.indent();
! 	    out.print("throw e;");
! 	    ctrl.unindent();
! 	    out.print("}");
! 	    if (except[j] == Exception.class)
! 	      needgeneral = false;
! 	  }
! 	if (needgeneral)
! 	  {
! 	    out.println();
! 	    out.print("catch (java.lang.Exception e) {");
! 	    ctrl.indent();
! 	    out.print("throw new java.rmi.UnexpectedException(\"undeclared checked exception\", e);");
! 	    ctrl.unindent();
! 	    out.print("}");
! 	  }
  
! 	ctrl.unindent();
! 	out.print("}");
! 	out.println();
!       }
  
!     ctrl.unindent();
!     out.println("}");
  
!     out.close();
!   }
  
!   private void generateSkel() throws IOException
!   {
!     skelname = fullclassname + "_Skel";
!     String skelclassname = classname + "_Skel";
!     ctrl =
!       new TabbedWriter(new FileWriter((destination == null ? ""
!                                                            : destination
!                                                            + File.separator)
!                                       + skelname.replace('.',
!                                                          File.separatorChar)
!                                       + ".java"));
!     out = new PrintWriter(ctrl);
  
!     if (verbose)
!       System.out.println("[Generating class " + skelname + ".java]");
  
!     out.println("// Skel class generated by rmic - DO NOT EDIT!");
!     out.println();
!     if (fullclassname != classname)
!       {
! 	String pname =
! 	  fullclassname.substring(0, fullclassname.lastIndexOf('.'));
! 	out.println("package " + pname + ";");
! 	out.println();
!       }
  
!     out.print("public final class " + skelclassname);
!     ctrl.indent();
  
!     // Output interfaces we implement
!     out.print("implements java.rmi.server.Skeleton");
  
!     ctrl.unindent();
!     out.print("{");
!     ctrl.indent();
  
!     // Interface hash - don't know how to calculate this - XXX
!     out.println("private static final long interfaceHash = "
!                 + RMIHashes.getInterfaceHash(clazz) + "L;");
!     out.println();
  
!     // Operation table
!     out.print("private static final java.rmi.server.Operation[] operations = {");
  
!     ctrl.indent();
!     for (int i = 0; i < remotemethods.length; i++)
!       {
! 	Method m = remotemethods[i].meth;
! 	out.print("new java.rmi.server.Operation(\"");
! 	out.print(getPrettyName(m.getReturnType()) + " ");
! 	out.print(m.getName() + "(");
! 	// Output signature
! 	Class[] sig = m.getParameterTypes();
! 	for (int j = 0; j < sig.length; j++)
! 	  {
! 	    out.print(getPrettyName(sig[j]));
! 	    if (j + 1 < sig.length)
! 	      out.print(", ");
! 	  }
! 	out.print("\")");
! 	if (i + 1 < remotemethods.length)
! 	  out.println(",");
!       }
!     ctrl.unindent();
!     out.println("};");
  
!     out.println();
  
!     // getOperations method
!     out.print("public java.rmi.server.Operation[] getOperations() {");
!     ctrl.indent();
!     out.print("return ((java.rmi.server.Operation[]) operations.clone());");
!     ctrl.unindent();
!     out.println("}");
  
!     out.println();
  
!     // Dispatch method
!     out.print("public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash) throws java.lang.Exception {");
!     ctrl.indent();
  
!     out.print("if (opnum < 0) {");
!     ctrl.indent();
  
+     for (int i = 0; i < remotemethods.length; i++)
+       {
+ 	out.print("if (hash == " + Long.toString(remotemethods[i].hash)
+ 	          + "L) {");
  	ctrl.indent();
! 	out.print("opnum = " + i + ";");
  	ctrl.unindent();
! 	out.println("}");
! 	out.print("else ");
!       }
!     out.print("{");
!     ctrl.indent();
!     out.print("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");");
!     ctrl.unindent();
!     out.print("}");
  
!     ctrl.unindent();
!     out.println("}");
!     out.print("else if (hash != interfaceHash) {");
!     ctrl.indent();
!     out.print("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");");
!     ctrl.unindent();
!     out.println("}");
  
!     out.println();
  
!     out.println(fullclassname + " server = (" + fullclassname + ")obj;");
!     out.println("switch (opnum) {");
  
!     // Method dispatch
!     for (int i = 0; i < remotemethods.length; i++)
!       {
! 	Method m = remotemethods[i].meth;
! 	out.println("case " + i + ":");
! 	out.print("{");
  	ctrl.indent();
  
! 	Class[] sig = m.getParameterTypes();
! 	for (int j = 0; j < sig.length; j++)
! 	  {
! 	    out.print(getPrettyName(sig[j]));
! 	    out.println(" $param_" + j + ";");
! 	  }
  
! 	out.print("try {");
! 	boolean needcastcheck = false;
  	ctrl.indent();
! 	out.println("java.io.ObjectInput in = call.getInputStream();");
! 	for (int j = 0; j < sig.length; j++)
! 	  {
! 	    out.print("$param_" + j + " = ");
! 	    if (sig[j] == Boolean.TYPE)
! 	      out.print("in.readBoolean();");
! 	    else if (sig[j] == Byte.TYPE)
! 	      out.print("in.readByte();");
! 	    else if (sig[j] == Character.TYPE)
! 	      out.print("in.readChar();");
! 	    else if (sig[j] == Short.TYPE)
! 	      out.print("in.readShort();");
! 	    else if (sig[j] == Integer.TYPE)
! 	      out.print("in.readInt();");
! 	    else if (sig[j] == Long.TYPE)
! 	      out.print("in.readLong();");
! 	    else if (sig[j] == Float.TYPE)
! 	      out.print("in.readFloat();");
! 	    else if (sig[j] == Double.TYPE)
! 	      out.print("in.readDouble();");
! 	    else
! 	      {
! 		if (sig[j] != Object.class)
! 		  {
! 		    out.print("(" + getPrettyName(sig[j]) + ")");
! 		    needcastcheck = true;
! 		  }
! 		out.print("in.readObject();");
! 	      }
! 	    out.println();
! 	  }
  	ctrl.unindent();
! 	out.println("}");
! 	out.print("catch (java.io.IOException e) {");
! 	ctrl.indent();
! 	out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling arguments\", e);");
  	ctrl.unindent();
  	out.println("}");
! 	if (needcastcheck)
! 	  {
! 	    out.print("catch (java.lang.ClassCastException e) {");
! 	    ctrl.indent();
! 	    out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling arguments\", e);");
! 	    ctrl.unindent();
! 	    out.println("}");
! 	  }
! 	out.print("finally {");
  	ctrl.indent();
! 	out.print("call.releaseInputStream();");
  	ctrl.unindent();
  	out.println("}");
  
! 	Class returntype = m.getReturnType();
! 	if (returntype != Void.TYPE)
! 	  out.print(getPrettyName(returntype) + " $result = ");
! 	out.print("server." + m.getName() + "(");
! 	for (int j = 0; j < sig.length; j++)
! 	  {
! 	    out.print("$param_" + j);
! 	    if (j + 1 < sig.length)
! 	      out.print(", ");
! 	  }
! 	out.println(");");
  
! 	out.print("try {");
  	ctrl.indent();
! 	out.print("java.io.ObjectOutput out = call.getResultStream(true);");
! 	if (returntype != Void.TYPE)
! 	  {
! 	    out.println();
! 	    if (returntype == Boolean.TYPE)
! 	      out.print("out.writeBoolean($result);");
! 	    else if (returntype == Byte.TYPE)
! 	      out.print("out.writeByte($result);");
! 	    else if (returntype == Character.TYPE)
! 	      out.print("out.writeChar($result);");
! 	    else if (returntype == Short.TYPE)
! 	      out.print("out.writeShort($result);");
! 	    else if (returntype == Integer.TYPE)
! 	      out.print("out.writeInt($result);");
! 	    else if (returntype == Long.TYPE)
! 	      out.print("out.writeLong($result);");
! 	    else if (returntype == Float.TYPE)
! 	      out.print("out.writeFloat($result);");
! 	    else if (returntype == Double.TYPE)
! 	      out.print("out.writeDouble($result);");
! 	    else
! 	      out.print("out.writeObject($result);");
! 	  }
  	ctrl.unindent();
! 	out.println("}");
! 	out.print("catch (java.io.IOException e) {");
! 	ctrl.indent();
! 	out.print("throw new java.rmi.MarshalException(\"error marshalling return\", e);");
  	ctrl.unindent();
! 	out.println("}");
! 	out.print("break;");
  
  	ctrl.unindent();
  	out.println("}");
+ 	out.println();
+       }
  
!     out.print("default:");
!     ctrl.indent();
!     out.print("throw new java.rmi.UnmarshalException(\"invalid method number\");");
!     ctrl.unindent();
!     out.print("}");
  
!     ctrl.unindent();
!     out.print("}");
  
!     ctrl.unindent();
!     out.println("}");
! 
!     out.close();
!   }
! 
!   private void compile(String name) throws Exception
!   {
!     Compiler comp = Compiler.getInstance();
!     if (verbose)
!       System.out.println("[Compiling class " + name + "]");
!     comp.setDestination(destination);
!     comp.compile(name);
!   }
! 
!   private static String getPrettyName(Class cls)
!   {
!     StringBuffer str = new StringBuffer();
!     for (int count = 0;; count++)
!       {
! 	if (! cls.isArray())
! 	  {
! 	    str.append(cls.getName());
! 	    for (; count > 0; count--)
! 	      str.append("[]");
! 	    return (str.toString());
! 	  }
! 	cls = cls.getComponentType();
!       }
!   }
  
  /**
   * Sort exceptions so the most general go last.
   */
!   private Class[] sortExceptions(Class[] except)
!   {
!     for (int i = 0; i < except.length; i++)
!       {
! 	for (int j = i + 1; j < except.length; j++)
! 	  {
! 	    if (except[i].isAssignableFrom(except[j]))
! 	      {
! 		Class tmp = except[i];
! 		except[i] = except[j];
! 		except[j] = tmp;
! 	      }
! 	  }
!       }
!     return (except);
!   }
  
  /**
   * Process the options until we find the first argument.
   */
!   private void parseOptions()
!   {
!     for (;;)
!       {
! 	if (next >= args.length || args[next].charAt(0) != '-')
! 	  break;
! 	String arg = args[next];
! 	next++;
  
! 	// Accept `--' options if they look long enough.
! 	if (arg.length() > 3 && arg.charAt(0) == '-' && arg.charAt(1) == '-')
! 	  arg = arg.substring(1);
  
! 	if (arg.equals("-keep"))
! 	  keep = true;
! 	else if (arg.equals("-keepgenerated"))
! 	  keep = true;
! 	else if (arg.equals("-v1.1"))
! 	  {
! 	    need11Stubs = true;
! 	    need12Stubs = false;
! 	  }
! 	else if (arg.equals("-vcompat"))
! 	  {
! 	    need11Stubs = true;
! 	    need12Stubs = true;
! 	  }
! 	else if (arg.equals("-v1.2"))
! 	  {
! 	    need11Stubs = false;
! 	    need12Stubs = true;
! 	  }
! 	else if (arg.equals("-g"))
! 	  {
! 	  }
! 	else if (arg.equals("-depend"))
! 	  {
! 	  }
! 	else if (arg.equals("-nowarn"))
! 	  {
! 	  }
! 	else if (arg.equals("-verbose"))
! 	  verbose = true;
! 	else if (arg.equals("-nocompile"))
! 	  compile = false;
! 	else if (arg.equals("-classpath"))
! 	  next++;
! 	else if (arg.equals("-help"))
! 	  usage();
! 	else if (arg.equals("-version"))
! 	  {
! 	    System.out.println("rmic (" + System.getProperty("java.vm.name")
! 	                       + ") " + System.getProperty("java.vm.version"));
! 	    System.out.println();
! 	    System.out.println("Copyright 2005 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);
! 	  }
! 	else if (arg.equals("-d"))
! 	  {
! 	    destination = args[next];
! 	    next++;
! 	  }
! 	else if (arg.charAt(1) == 'J')
! 	  {
! 	  }
! 	else
! 	  error("unrecognized option `" + arg + "'");
!       }
!   }
  
  /**
   * Looks for the java.rmi.Remote interface that that is implemented by theClazz.
!  * @param theClazz the class to look in
   * @return the Remote interface of theClazz or null if theClazz does not implement a Remote interface
   */
!   private Class getRemoteInterface(Class theClazz)
!   {
!     Class[] interfaces = theClazz.getInterfaces();
!     for (int i = 0; i < interfaces.length; i++)
!       {
! 	if (java.rmi.Remote.class.isAssignableFrom(interfaces[i]))
! 	  return interfaces[i];
!       }
!     logError("Class " + theClazz.getName()
!              + " is not a remote object. It does not implement an interface that is a java.rmi.Remote-interface.");
!     return null;
!   }
! 
  /**
   * Prints an error to System.err and increases the error count.
   * @param theError
   */
!   private void logError(String theError)
!   {
!     errorCount++;
!     System.err.println("error:" + theError);
!   }
  
!   private static void error(String message)
!   {
!     System.err.println("rmic: " + message);
!     System.err.println("Try `rmic --help' for more information.");
!     System.exit(1);
!   }
  
!   private static void usage()
!   {
!     System.out.println("Usage: rmic [OPTION]... CLASS...\n" + "\n"
!                        + "	-keep 			Don't delete any intermediate files\n"
!                        + "	-keepgenerated 		Same as -keep\n"
!                        + "	-v1.1			Java 1.1 style stubs only\n"
!                        + "	-vcompat		Java 1.1 & Java 1.2 stubs\n"
!                        + "	-v1.2			Java 1.2 style stubs only\n"
!                        + "	-g *			Generated debugging information\n"
!                        + "	-depend *		Recompile out-of-date files\n"
!                        + "	-nowarn	*		Suppress warning messages\n"
!                        + "	-nocompile		Don't compile the generated files\n"
!                        + "	-verbose 		Output what's going on\n"
!                        + "	-classpath <path> *	Use given path as classpath\n"
!                        + "	-d <directory> 		Specify where to place generated classes\n"
!                        + "	-J<flag> *		Pass flag to Java\n"
!                        + "	-help			Print this help, then exit\n"
!                        + "	-version		Print version number, then exit\n" + "\n"
!                        + "  * Option currently ignored\n"
!                        + "Long options can be used with `--option' form as well.");
!     System.exit(0);
!   }
  
!   static class MethodRef
!     implements Comparable
!   {
!     Method meth;
!     String sig;
!     long hash;
  
!     MethodRef(Method m)
!     {
!       meth = m;
!       // We match on the name - but what about overloading? - XXX
!       sig = m.getName();
!       hash = RMIHashes.getMethodHash(m);
!     }
  
+     public int compareTo(Object obj)
+     {
+       MethodRef that = (MethodRef) obj;
+       return (this.sig.compareTo(that.sig));
+     }
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/server/ConnectionRunnerPool.java gcc-4.0.0/libjava/gnu/java/rmi/server/ConnectionRunnerPool.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/ConnectionRunnerPool.java	Thu Nov  7 18:01:05 2002
--- gcc-4.0.0/libjava/gnu/java/rmi/server/ConnectionRunnerPool.java	Thu Feb 17 18:26:27 2005
***************
*** 1,5 ****
  /* gnu.java.rmi.server.ConnectionRunnerPool
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gnu.java.rmi.server.ConnectionRunnerPool
!    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** class ConnectionRunnerPool
*** 95,101 ****
    private static int size = 5;
    private static int max_size = 10;
    
!   private static ArrayList freelist;
    
    private static ThreadGroup group = new ThreadGroup("pool");
    
--- 95,102 ----
    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");
    
*************** class ConnectionRunnerPool
*** 117,123 ****
      max_size = size;
    }
    
!   private synchronized static ConnectionRunner getConnectionRunner()
    {
      if(freelist.size() == 0){
        if(size < max_size){
--- 118,124 ----
      max_size = size;
    }
    
!   private static synchronized ConnectionRunner getConnectionRunner()
    {
      if(freelist.size() == 0){
        if(size < max_size){
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/server/RMIHashes.java gcc-4.0.0/libjava/gnu/java/rmi/server/RMIHashes.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/RMIHashes.java	Tue Oct  1 03:46:42 2002
--- gcc-4.0.0/libjava/gnu/java/rmi/server/RMIHashes.java	Sat Oct 16 18:27:49 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RMIHashes.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,50 ****
  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.lang.reflect.Method;
- import java.lang.Class;
- import gnu.java.io.NullOutputStream;
  import gnu.java.lang.reflect.TypeSignature;
! import java.security.MessageDigest;
! import java.security.DigestOutputStream;
! import java.io.DataOutputStream;
  import java.io.ByteArrayOutputStream;
  
  public class RMIHashes
  {
--- 35,49 ----
  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
  {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/server/RMIIncomingThread.java gcc-4.0.0/libjava/gnu/java/rmi/server/RMIIncomingThread.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/RMIIncomingThread.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/rmi/server/RMIIncomingThread.java	Sat Mar 20 20:30:56 2004
***************
*** 0 ****
--- 1,58 ----
+ /*
+   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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/rmi/server/RMIObjectInputStream.java gcc-4.0.0/libjava/gnu/java/rmi/server/RMIObjectInputStream.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/RMIObjectInputStream.java	Thu Nov  7 18:01:05 2002
--- gcc-4.0.0/libjava/gnu/java/rmi/server/RMIObjectInputStream.java	Sat Oct 16 18:27:49 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* RMIObjectInputStream.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,51 ****
  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.ObjectStreamClass;
- import java.io.ObjectInputStream;
  import java.io.InputStream;
  import java.io.IOException;
! import java.net.URL;
  import java.net.MalformedURLException;
  import java.rmi.server.RMIClassLoader;
- import java.lang.ClassNotFoundException;
- import java.lang.reflect.Proxy;
  
  public class RMIObjectInputStream
  	extends ObjectInputStream {
--- 36,51 ----
  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.InputStream;
  import java.io.IOException;
! 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 {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java gcc-4.0.0/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java	Thu Nov  7 18:01:05 2002
--- gcc-4.0.0/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java	Sat Oct 16 18:27:49 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* RMIObjectOutputStream.java -
!    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,49 ****
  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.ObjectOutputStream;
  import java.io.OutputStream;
- import java.io.IOException;
- import java.rmi.server.RMIClassLoader;
  import java.rmi.Remote;
  import java.rmi.server.RemoteStub;
! import java.rmi.server.ObjID;
  
  public class RMIObjectOutputStream
  	extends ObjectOutputStream {
--- 36,50 ----
  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.RemoteStub;
! import java.rmi.server.RMIClassLoader;
  
  public class RMIObjectOutputStream
  	extends ObjectOutputStream {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastConnection.java gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastConnection.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastConnection.java	Thu Nov  7 18:01:05 2002
--- gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastConnection.java	Sat Oct 16 18:27:49 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* UnicastConnection.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,54 ****
  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.lang.Runnable;
! import java.net.Socket;
! import java.net.ServerSocket;
  import java.io.DataInputStream;
  import java.io.DataOutputStream;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
! import java.io.BufferedInputStream;
! import java.io.BufferedOutputStream;
! import java.io.ObjectOutput;
! import java.io.ObjectInput;
! import java.io.IOException;
  import java.rmi.RemoteException;
  
  public class UnicastConnection 
--- 36,52 ----
  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 
*************** void acceptConnection() throws IOExcepti
*** 104,109 ****
--- 102,108 ----
  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
*************** DataOutputStream getDataOutputStream() t
*** 139,158 ****
  	return (dout);
  }
  
  ObjectInputStream getObjectInputStream() throws IOException {
  	if (oin == null) {
!         oin = new RMIObjectInputStream(din);
  	}
  	return (oin);
  }
  
  ObjectOutputStream getObjectOutputStream() throws IOException {
  	if (oout == null) {
! 		oout = new RMIObjectOutputStream(dout);
! 	}
  	return (oout);
  }
  
  void disconnect() {
  	try {
  	    if(oout != null)
--- 138,185 ----
  	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)
*************** public void run() {
*** 200,203 ****
--- 227,231 ----
      }while(true);
  }
  
+ 
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastConnectionManager.java gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastConnectionManager.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastConnectionManager.java	Fri Dec 26 16:13:01 2003
--- gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastConnectionManager.java	Thu Feb 17 18:26:27 2005
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* UnicastConnectionManager.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,73 ****
  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.RMISocketFactory;
! import java.rmi.server.RMIServerSocketFactory;
! import java.rmi.server.RMIClientSocketFactory;
! import java.rmi.RemoteException;
  import java.io.IOException;
  import java.io.ObjectOutput;
  import java.io.ObjectInput;
- import java.io.DataInputStream;
- import java.lang.Thread;
- import java.lang.Runnable;
  import java.net.InetAddress;
  import java.net.Socket;
  import java.net.ServerSocket;
  import java.net.UnknownHostException;
! 
  import java.util.ArrayList;
  import java.util.ConcurrentModificationException;
- import java.util.Enumeration;
  import java.util.Hashtable;
  import java.util.Iterator;
  
- import gnu.java.rmi.server.UnicastConnection;
- 
  public class UnicastConnectionManager
  	implements Runnable, ProtocolConstants {
  
  private static String localhost;
  // use different maps for server/client type UnicastConnectionManager
  private static Hashtable servers = new Hashtable();
! private static Hashtable clients = new Hashtable();
! private ArrayList connections; //client connection pool
  
  // make serverThread volatile for poll
  private volatile Thread serverThread;
--- 36,72 ----
  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.server.RMIIncomingThread;
! import gnu.java.rmi.server.UnicastConnection;
! 
  import java.io.IOException;
  import java.io.ObjectOutput;
  import java.io.ObjectInput;
  import java.net.InetAddress;
  import java.net.Socket;
  import java.net.ServerSocket;
  import java.net.UnknownHostException;
! import java.rmi.RemoteException;
! import java.rmi.server.RMISocketFactory;
! import java.rmi.server.RMIServerSocketFactory;
! import java.rmi.server.RMIClientSocketFactory;
  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;
*** 75,81 ****
  String serverName;
  int serverPort;
  
! static private Thread scavenger;
  
  // If client and server are in the same VM, serverobj represents server
  Object serverobj;
--- 74,81 ----
  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 UnicastConnectionManager(String 
*** 173,192 ****
  /**
    * Server UnicastConnectionManager constructor
    */
! private UnicastConnectionManager(int port, RMIServerSocketFactory ssf) {
  	try {
  		ssock = ssf.createServerSocket(port);
  		serverPort = ssock.getLocalPort();
  	}
! 	catch (IOException _) {
! 		try {
! 			ssock = ssf.createServerSocket(0);
! 			serverPort = ssock.getLocalPort();
! 		}
! 		catch (IOException __) {
! 			ssock = null;
! 			serverPort = 0;
! 		}
  	}
  	serverName = localhost;
  	serverFactory = ssf;
--- 173,188 ----
  /**
    * 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;
*************** public static synchronized UnicastConnec
*** 230,236 ****
   * Return a server connection manager which will accept connection on the
   * given port.
   */
! public static synchronized UnicastConnectionManager getInstance(int port, RMIServerSocketFactory ssf) {
  //System.out.println("getInstance: " + port + "," + ssf);
  	if (ssf == null) {
          ssf = defaultSocketFactory;
--- 226,232 ----
   * 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;
*************** public void run() {
*** 376,384 ****
  		try {
  //System.out.println("Waiting for connection on " + serverPort);
  			UnicastConnection conn = getServerConnection();
  			// use a thread pool to improve performance
              //ConnectionRunnerPool.dispatchConnection(conn);
!             (new Thread(conn)).start();
  		}
  		catch (Exception e) {
              e.printStackTrace();
--- 372,388 ----
  		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();
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastRef.java gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastRef.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastRef.java	Sat Sep 20 21:23:47 2003
--- gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastRef.java	Sat Mar 20 20:30:56 2004
*************** private Object invokeCommon(Remote obj, 
*** 116,122 ****
  		dout = conn.getDataOutputStream();
  		dout.writeByte(MESSAGE_CALL);
  
! 		out = conn.getObjectOutputStream();
  		
  		objid.write(out);
  		out.writeInt(opnum);
--- 116,122 ----
  		dout = conn.getDataOutputStream();
  		dout.writeByte(MESSAGE_CALL);
  
! 		out = conn.startObjectOutputStream(); // (re)start ObjectOutputStream
  		
  		objid.write(out);
  		out.writeInt(opnum);
*************** private Object invokeCommon(Remote obj, 
*** 146,164 ****
  			throw new RemoteException("Call not acked:" + returncode);
  		}
  
! 		in = conn.getObjectInputStream();
  		returncode = in.readUnsignedByte();
  		ack = UID.read(in);
  
  		Class cls = method.getReturnType();
-         if(cls == Void.TYPE){
-             returnval = null;
-             in.readObject();
-         }else
-             returnval = ((RMIObjectInputStream)in).readValue(cls);
  
  	}
! 	catch (IOException e3) {
  	    //for debug: e3.printStackTrace();
  		throw new RemoteException("call return failed: ", e3);
  	}
--- 146,167 ----
  			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);
  	}
*************** private Object invokeCommon(Remote obj, 
*** 174,180 ****
  	manager.discardConnection(conn);
  
  	if (returncode != RETURN_ACK && returnval != null) {
! 		throw (Exception)returnval;
  	}
  
  	return (returnval);
--- 177,184 ----
  	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);
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastRemoteCall.java gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastRemoteCall.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastRemoteCall.java	Fri Dec 26 16:13:01 2003
--- gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastRemoteCall.java	Sat Nov  6 23:38:51 2004
***************
*** 1,5 ****
  /* UnicastRemoteCall.java
!   Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UnicastRemoteCall.java
!   Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,57 ****
  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.lang.Exception;
  import java.io.DataInputStream;
  import java.io.DataOutputStream;
  import java.io.IOException;
- import java.io.ObjectOutput;
  import java.io.ObjectInput;
  import java.io.StreamCorruptedException;
- import java.rmi.server.RemoteCall;
  import java.rmi.RemoteException;
  import java.rmi.MarshalException;
  import java.rmi.UnmarshalException;
! import java.rmi.server.UID;
  import java.rmi.server.ObjID;
! import java.rmi.server.RemoteObject;
! 
  import java.util.Vector;
  
  public class UnicastRemoteCall
--- 35,55 ----
  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.RemoteException;
  import java.rmi.MarshalException;
  import java.rmi.UnmarshalException;
! import java.rmi.server.RemoteCall;
  import java.rmi.server.ObjID;
! import java.rmi.server.UID;
  import java.util.Vector;
  
  public class UnicastRemoteCall
*************** public class UnicastRemoteCall
*** 63,70 ****
    private Object object;
    private int opnum;
    private long hash;
!   private Vector vec;
!   private int ptr;
    private ObjID objid;
  
    private ObjectOutput oout;
--- 61,69 ----
    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;
*************** public class UnicastRemoteCall
*** 138,143 ****
--- 137,157 ----
        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)
*************** public class UnicastRemoteCall
*** 177,183 ****
  	DataOutputStream dout = conn.getDataOutputStream();
  	dout.write(MESSAGE_CALL);
  	
! 	oout = conn.getObjectOutputStream();
  	objid.write(oout);
  	oout.writeInt(opnum);
  	oout.writeLong(hash);
--- 191,197 ----
  	DataOutputStream dout = conn.getDataOutputStream();
  	dout.write(MESSAGE_CALL);
  	
! 	oout = conn.startObjectOutputStream(); // (re)start ObjectOutputStream
  	objid.write(oout);
  	oout.writeInt(opnum);
  	oout.writeLong(hash);
*************** public class UnicastRemoteCall
*** 194,200 ****
          if (din.readByte() != MESSAGE_CALL_ACK)
  	    throw new RemoteException("Call not acked");
  
!         oin = getInputStream();
          returncode = oin.readByte();
          UID.read(oin);
        }
--- 208,214 ----
          if (din.readByte() != MESSAGE_CALL_ACK)
  	    throw new RemoteException("Call not acked");
  
!         oin = startInputStream();
          returncode = oin.readByte();
          UID.read(oin);
        }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastServer.java gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastServer.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastServer.java	Fri Dec 26 16:13:01 2003
--- gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastServer.java	Sat Oct 16 18:27:49 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* UnicastServer.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,58 ****
  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.ObjectInputStream;
  import java.io.ObjectOutputStream;
! import java.io.IOException;
! import java.net.InetAddress;
! import java.util.Hashtable;
! import java.net.UnknownHostException;
  import java.rmi.Remote;
  import java.rmi.server.ObjID;
- import java.rmi.server.UnicastRemoteObject;
  import java.rmi.server.UID;
! import java.rmi.server.RemoteRef;
! import java.rmi.RemoteException;
! import java.rmi.NoSuchObjectException;
! import gnu.java.rmi.dgc.DGCImpl;
  
  public class UnicastServer
  	implements ProtocolConstants {
--- 36,57 ----
  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.Hashtable;
  
  public class UnicastServer
  	implements ProtocolConstants {
*************** public static void dispatch(UnicastConne
*** 99,111 ****
  	case MESSAGE_CALL:
  		incomingMessageCall(conn);
  		break;
  	default:
  		throw new Exception("bad method type");
  	}
  }
  
  private static void incomingMessageCall(UnicastConnection conn) throws IOException {
! 	ObjectInputStream in = conn.getObjectInputStream();
  
  	ObjID objid = ObjID.read(in);
  	int method = in.readInt();
--- 98,116 ----
  	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();
*************** private static void incomingMessageCall(
*** 130,135 ****
--- 135,144 ----
  			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("");
*************** private static void incomingMessageCall(
*** 138,150 ****
  
  	conn.getDataOutputStream().writeByte(MESSAGE_CALL_ACK);
  
! 	ObjectOutputStream out = conn.getObjectOutputStream();
  
  	out.writeByte(returncode);
  	(new UID()).write(out);
  	if(returnval != null && returncls != null)
  	    ((RMIObjectOutputStream)out).writeValue(returnval, returncls);
! 	else if (!(returnval instanceof RMIVoidValue))
  	    out.writeObject(returnval);
  
  	out.flush();
--- 147,164 ----
  
  	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-3.4.3/libjava/gnu/java/rmi/server/UnicastServerRef.java gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastServerRef.java
*** gcc-3.4.3/libjava/gnu/java/rmi/server/UnicastServerRef.java	Fri Dec 26 16:13:01 2003
--- gcc-4.0.0/libjava/gnu/java/rmi/server/UnicastServerRef.java	Sat Oct 16 18:27:49 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* UnicastServerRef.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,70 ****
  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.ServerSocket;
! import java.net.Socket;
! import java.net.InetAddress;
! import java.net.UnknownHostException;
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  import java.rmi.server.RemoteStub;
  import java.rmi.server.ObjID;
  import java.rmi.server.ServerRef;
  import java.rmi.server.RemoteRef;
  import java.rmi.server.ServerNotActiveException;
- import java.rmi.server.RMIClientSocketFactory;
  import java.rmi.server.RMIServerSocketFactory;
- import java.rmi.server.UID;
  import java.rmi.server.Skeleton;
- import java.rmi.server.RemoteCall;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Method;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.Thread;
- import java.lang.Exception;
- import java.io.IOException;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.ObjectInput;
- import java.io.ObjectOutput;
  import java.util.Hashtable;
  
  public class UnicastServerRef
--- 36,58 ----
  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.Method;
! import java.lang.reflect.InvocationTargetException;
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  import java.rmi.server.RemoteStub;
  import java.rmi.server.ObjID;
  import java.rmi.server.ServerRef;
+ import java.rmi.server.RemoteServer;
  import java.rmi.server.RemoteRef;
  import java.rmi.server.ServerNotActiveException;
  import java.rmi.server.RMIServerSocketFactory;
  import java.rmi.server.Skeleton;
  import java.util.Hashtable;
  
  public class UnicastServerRef
*************** UnicastServerRef()
*** 85,91 ****
  {
  }
  
! public UnicastServerRef(ObjID id, int port, RMIServerSocketFactory ssf) {
  	super(id);
  	manager = UnicastConnectionManager.getInstance(port, ssf);
  }
--- 73,79 ----
  {
  }
  
! public UnicastServerRef(ObjID id, int port, RMIServerSocketFactory ssf) throws RemoteException {
  	super(id);
  	manager = UnicastConnectionManager.getInstance(port, ssf);
  }
*************** public RemoteStub exportObject(Remote ob
*** 99,111 ****
  
  		// Find and install the stub
  		Class cls = obj.getClass();
! 		stub = (RemoteStub)getHelperClass(cls, "_Stub");
  		if (stub == null) {
  			throw new RemoteException("failed to export: " + cls);
  		}
  
  		// Find and install the skeleton (if there is one)
! 		skel = (Skeleton)getHelperClass(cls, "_Skel");
  
  		// Build hash of methods which may be called.
  		buildMethodHash(obj.getClass(), true);
--- 87,107 ----
  
  		// 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);
*************** public boolean unexportObject(Remote obj
*** 135,140 ****
--- 131,168 ----
      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();
*************** private Object getHelperClass(Class cls,
*** 176,183 ****
  	return (null);
  }
  
  public String getClientHost() throws ServerNotActiveException {
! 	throw new Error("Not implemented");
  }
  
  private void buildMethodHash(Class cls, boolean build) {
--- 204,213 ----
  	return (null);
  }
  
+ 
+ 
  public String getClientHost() throws ServerNotActiveException {
! 	return RemoteServer.getClientHost();
  }
  
  private void buildMethodHash(Class cls, boolean build) {
*************** public Object incomingMessageCall(Unicas
*** 241,247 ****
  		try{
  		    ret = meth.invoke(myself, args);
  		}catch(InvocationTargetException e){
! 		    throw (Exception)(e.getTargetException());
  		}
  		return ret;
  	}
--- 271,286 ----
  		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;
  	}
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/OID.java gcc-4.0.0/libjava/gnu/java/security/OID.java
*** gcc-3.4.3/libjava/gnu/java/security/OID.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/OID.java	Sun Oct 17 08:00:10 2004
***************
*** 1,5 ****
  /* OID.java -- numeric representation of an object identifier
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* OID.java -- numeric representation of an object identifier
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,52 ****
  
  package gnu.java.security;
  
! import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.InputStream;
  import java.io.IOException;
- 
  import java.util.StringTokenizer;
  
- import gnu.java.security.der.DEREncodingException;
- 
  /**
   * This immutable class represents an object identifier, or OID.
   *
--- 38,50 ----
  
  package gnu.java.security;
  
! import gnu.java.security.der.DEREncodingException;
! 
  import java.io.ByteArrayOutputStream;
  import java.io.InputStream;
  import java.io.IOException;
  import java.util.StringTokenizer;
  
  /**
   * This immutable class represents an object identifier, or OID.
   *
*************** import gnu.java.security.der.DEREncoding
*** 65,71 ****
   * <p>OIDs may be relative, in which case the first two elements of the
   * OID are omitted.
   *
!  * @author Casey Marshall (rsdio@metastatic.org)
   */
  public class OID implements Cloneable, Comparable, java.io.Serializable
  {
--- 63,69 ----
   * <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
  {
*************** public class OID implements Cloneable, C
*** 336,342 ****
  
    /* Nice idea, but possibly too expensive for whatever benefit it
     * provides.
!    
    public String getShortName()
    {
      return OIDTable.getShortName(this);
--- 334,340 ----
  
    /* Nice idea, but possibly too expensive for whatever benefit it
     * provides.
! 
    public String getShortName()
    {
      return OIDTable.getShortName(this);
*************** public class OID implements Cloneable, C
*** 391,398 ****
     */
    public boolean equals(Object o)
    {
!     if (this == o)
!       return true;
      return java.util.Arrays.equals(components, ((OID) o).components);
    }
  
--- 389,396 ----
     */
    public boolean equals(Object o)
    {
!     if (!(o instanceof OID))
!       return false;
      return java.util.Arrays.equals(components, ((OID) o).components);
    }
  
*************** public class OID implements Cloneable, C
*** 411,417 ****
     */
    public int compareTo(Object o)
    {
!     if (o == this)
        return 0;
      int[] components2 = ((OID) o).components;
      int len = Math.min(components.length, components2.length);
--- 409,415 ----
     */
    public int compareTo(Object o)
    {
!     if (equals(o))
        return 0;
      int[] components2 = ((OID) o).components;
      int len = Math.min(components.length, components2.length);
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/PolicyFile.java gcc-4.0.0/libjava/gnu/java/security/PolicyFile.java
*** gcc-3.4.3/libjava/gnu/java/security/PolicyFile.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/PolicyFile.java	Tue Feb 22 17:52:39 2005
***************
*** 0 ****
--- 1,667 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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;
+ 
+ /**
+  * 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 boolean DEBUG = true;
+   // Package-private to avoid a trampoline.
+   static void debug(String msg)
+   {
+     System.err.print(">> PolicyFile: ");
+     System.err.println(msg);
+   }
+ 
+   private static void debug(Throwable t)
+   {
+     System.err.println(">> PolicyFile");
+     t.printStackTrace(System.err);
+   }
+ 
+   private static final String DEFAULT_POLICY = System.getProperty("java.home")
+     + System.getProperty("file.separator") + "lib"
+     + System.getProperty("file.separator") + "security"
+     + System.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))
+           {
+             if (DEBUG) debug(cs+" -> "+codeSource);
+             PermissionCollection pc = (PermissionCollection) e.getValue();
+             for (Enumeration ee = pc.elements(); ee.hasMoreElements(); )
+               {
+                 perms.add((Permission) ee.nextElement());
+               }
+           }
+         else
+           if (DEBUG) debug(cs+" !-> "+codeSource);
+       }
+     if (DEBUG) debug ("returning permissions " + perms + " for " + codeSource);
+     return perms;
+   }
+ 
+   public void refresh()
+   {
+     cs2pc.clear();
+     List policyFiles = new LinkedList();
+     try
+       {
+         policyFiles.add(new File(DEFAULT_POLICY).toURL());
+         if (DEBUG) debug ("defualt policy is " + DEFAULT_POLICY);
+         policyFiles.addAll((List) AccessController.doPrivileged(
+           new PrivilegedExceptionAction()
+           {
+             public Object run() throws Exception
+             {
+               LinkedList l = new LinkedList();
+               for (int i = 1; ; i++)
+                 {
+                   String s = Security.getProperty("policy.file."+i);
+                   if (DEBUG) debug("policy.file."+i+"="+s);
+                   if (s == null)
+                     break;
+                   l.add(new URL(s));
+                 }
+               String s = System.getProperty("java.security.policy");
+               if (DEBUG) debug("java.security.policy="+s);
+               if (s != null)
+                 l.add(new URL(s));
+               return l;
+             }
+           }));
+       }
+     catch (PrivilegedActionException pae)
+       {
+         if (DEBUG) debug(pae);
+       }
+     catch (MalformedURLException mue)
+       {
+         if (DEBUG) debug(mue);
+       }
+     for (Iterator it = policyFiles.iterator(); it.hasNext(); )
+       {
+         try
+           {
+             URL url = (URL) it.next();
+             parse(url);
+           }
+         catch (IOException ioe)
+           {
+             if (DEBUG) debug(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
+   {
+     if (DEBUG) debug ("reading policy file from " + 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[0])));
+                     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[0])));
+                     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[0])));
+                 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-3.4.3/libjava/gnu/java/security/action/GetPropertyAction.java gcc-4.0.0/libjava/gnu/java/security/action/GetPropertyAction.java
*** gcc-3.4.3/libjava/gnu/java/security/action/GetPropertyAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/action/GetPropertyAction.java	Wed Jul 28 22:28:09 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/action/GetSecurityPropertyAction.java gcc-4.0.0/libjava/gnu/java/security/action/GetSecurityPropertyAction.java
*** gcc-3.4.3/libjava/gnu/java/security/action/GetSecurityPropertyAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/action/GetSecurityPropertyAction.java	Tue Nov 16 07:42:43 2004
***************
*** 0 ****
--- 1,76 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 extends GetPropertyAction
+ {
+   public GetSecurityPropertyAction()
+   {
+   }
+ 
+   public GetSecurityPropertyAction (String propName)
+   {
+     super (propName);
+   }
+ 
+   public GetSecurityPropertyAction(String propName, String defaultValue)
+   {
+     super (propName, defaultValue);
+   }
+ 
+   public Object run()
+   {
+     String val = Security.getProperty (name);
+     if (val == null)
+       val = value;
+     return val;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/action/SetAccessibleAction.java gcc-4.0.0/libjava/gnu/java/security/action/SetAccessibleAction.java
*** gcc-3.4.3/libjava/gnu/java/security/action/SetAccessibleAction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/action/SetAccessibleAction.java	Wed Jul 28 22:28:09 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/ber/BER.java gcc-4.0.0/libjava/gnu/java/security/ber/BER.java
*** gcc-3.4.3/libjava/gnu/java/security/ber/BER.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/ber/BER.java	Wed Feb 16 23:11:04 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/ber/BEREncodingException.java gcc-4.0.0/libjava/gnu/java/security/ber/BEREncodingException.java
*** gcc-3.4.3/libjava/gnu/java/security/ber/BEREncodingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/ber/BEREncodingException.java	Wed Feb 16 23:11:04 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/ber/BERReader.java gcc-4.0.0/libjava/gnu/java/security/ber/BERReader.java
*** gcc-3.4.3/libjava/gnu/java/security/ber/BERReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/ber/BERReader.java	Wed Feb 16 23:11:04 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/ber/BERValue.java gcc-4.0.0/libjava/gnu/java/security/ber/BERValue.java
*** gcc-3.4.3/libjava/gnu/java/security/ber/BERValue.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/ber/BERValue.java	Wed Feb 16 23:11:04 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/der/BitString.java gcc-4.0.0/libjava/gnu/java/security/der/BitString.java
*** gcc-3.4.3/libjava/gnu/java/security/der/BitString.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/der/BitString.java	Mon Aug 30 13:06:48 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** import java.util.Arrays;
*** 51,59 ****
   * <p>Where the "xxx" represents three bits that should be ignored, and
   * can have any value.
   *
!  * @author Casey Marshall (rsdio@metastatic.org)
   */
! public class BitString implements Cloneable, Comparable, java.io.Serializable
  {
  
    // Fields.
--- 51,59 ----
   * <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.
*************** public class BitString implements Clonea
*** 288,295 ****
  
    public boolean equals(Object o)
    {
!     if (this == o)
!       return true;
      BitString that = (BitString) o;
      // True for cloned instances.
      if (this.bytes == that.bytes && this.ignoredBits == that.ignoredBits)
--- 288,295 ----
  
    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)
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/der/DER.java gcc-4.0.0/libjava/gnu/java/security/der/DER.java
*** gcc-3.4.3/libjava/gnu/java/security/der/DER.java	Sat Oct 11 18:56:54 2003
--- gcc-4.0.0/libjava/gnu/java/security/der/DER.java	Mon Aug 30 13:06:48 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** package gnu.java.security.der;
*** 41,47 ****
  /**
   * The set of tags for DER types.
   *
!  * @author Casey Marshall (rsdio@metastatic.org)
   */
  public interface DER
  {
--- 41,47 ----
  /**
   * The set of tags for DER types.
   *
!  * @author Casey Marshall (csm@gnu.org)
   */
  public interface DER
  {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/der/DEREncodingException.java gcc-4.0.0/libjava/gnu/java/security/der/DEREncodingException.java
*** gcc-3.4.3/libjava/gnu/java/security/der/DEREncodingException.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/der/DEREncodingException.java	Mon Aug 30 14:30:44 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** public class DEREncodingException extend
*** 46,52 ****
    {
      super ();
    }
!   
    public DEREncodingException (String msg)
    {
      super (msg);
--- 46,52 ----
    {
      super ();
    }
! 
    public DEREncodingException (String msg)
    {
      super (msg);
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/der/DERReader.java gcc-4.0.0/libjava/gnu/java/security/der/DERReader.java
*** gcc-3.4.3/libjava/gnu/java/security/der/DERReader.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/der/DERReader.java	Wed Feb 16 23:11:05 2005
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** import java.io.IOException;
*** 47,57 ****
  
  import java.math.BigInteger;
  
- import java.nio.ByteBuffer;
- import java.nio.CharBuffer;
- import java.nio.charset.Charset;
- import java.nio.charset.CharsetDecoder;
- 
  import java.util.Calendar;
  import java.util.Date;
  import java.util.TimeZone;
--- 47,52 ----
*************** import gnu.java.security.OID;
*** 65,71 ****
   * to the calling application to determine if the data are structured
   * properly by inspecting the {@link DERValue} that is returned.
   *
!  * @author Casey Marshall (rsdio@metastatic.org)
   */
  public class DERReader implements DER
  {
--- 60,66 ----
   * 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
  {
*************** public class DERReader implements DER
*** 90,95 ****
--- 85,95 ----
      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.
     *
*************** public class DERReader implements DER
*** 123,128 ****
--- 123,133 ----
    // 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
*************** public class DERReader implements DER
*** 180,185 ****
--- 185,210 ----
      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.
    // ------------------------------------------------------------------------
  
*************** public class DERReader implements DER
*** 231,260 ****
        }
    }
  
!   private 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();
!   }
! 
!   private String makeString(int tag, byte[] value)
      throws IOException
    {
-     Charset charset = null;
      switch (tag & 0x1F)
        {
          case NUMERIC_STRING:
--- 256,264 ----
        }
    }
  
!   private static String makeString(int tag, byte[] value)
      throws IOException
    {
      switch (tag & 0x1F)
        {
          case NUMERIC_STRING:
*************** public class DERReader implements DER
*** 265,292 ****
          case GRAPHIC_STRING:
          case ISO646_STRING:
          case GENERAL_STRING:
!           charset = Charset.forName("ISO-8859-1");
!           break;
          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:
!           charset = Charset.forName("UTF-16BE");
!           break;
          case UTF8_STRING:
!           charset = Charset.forName("UTF-8");
!           break;
          default:
            throw new DEREncodingException("unknown string tag");
        }
!     if (charset == null)
!       throw new DEREncodingException("no decoder");
!     CharsetDecoder decoder = charset.newDecoder();
!     CharBuffer result = decoder.decode(ByteBuffer.wrap(value));
!     char[] buf = new char[result.remaining()];
!     result.get(buf);
!     return new String(buf);
    }
  
    private Date makeTime(int tag, byte[] value) throws IOException
--- 269,349 ----
          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
*************** public class DERReader implements DER
*** 335,341 ****
                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)
--- 392,398 ----
                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)
*************** public class DERReader implements DER
*** 362,374 ****
                  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)));
                }
            }
--- 419,431 ----
                  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)));
                }
            }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/der/DERValue.java gcc-4.0.0/libjava/gnu/java/security/der/DERValue.java
*** gcc-3.4.3/libjava/gnu/java/security/der/DERValue.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/der/DERValue.java	Mon Aug 30 13:06:48 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** public class DERValue implements DER
*** 48,62 ****
    // ------------------------------------------------------------------------
  
    private final int tagClass;
- 
    private final boolean constructed;
- 
    private final int tag;
- 
    private int length;
- 
    private final Object value;
- 
    private byte[] encoded;
  
    // Constructor.
--- 48,57 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/der/DERWriter.java gcc-4.0.0/libjava/gnu/java/security/der/DERWriter.java
*** gcc-3.4.3/libjava/gnu/java/security/der/DERWriter.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/der/DERWriter.java	Thu Feb 17 18:26:28 2005
***************
*** 1,5 ****
  /* DERWriter.java -- write Java types in DER format.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,65 ****
  
  package gnu.java.security.der;
  
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  
  import java.math.BigInteger;
  
- import java.nio.ByteBuffer;
- import java.nio.CharBuffer;
- import java.nio.charset.Charset;
- import java.nio.charset.CharsetEncoder;
- 
  import java.text.SimpleDateFormat;
  
- import java.util.BitSet;
  import java.util.Date;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Set;
  import java.util.TimeZone;
  
- import gnu.java.security.OID;
- 
  /**
   * Methods that allow various Java types to be written as a DER
   * (Distinguished Encoding Rules) stream to the specified output stream.
--- 38,59 ----
  
  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.
*************** import gnu.java.security.OID;
*** 71,77 ****
   * <p>This class only defines static methods; there are no instance
   * variables needed.
   *
!  * @author Casey Marshall (rsdio@metastatic.org)
   */
  public class DERWriter implements DER
  {
--- 65,71 ----
   * <p>This class only defines static methods; there are no instance
   * variables needed.
   *
!  * @author Casey Marshall (csm@gnu.org)
   */
  public class DERWriter implements DER
  {
*************** public class DERWriter implements DER
*** 87,93 ****
    // Class methods.
    // ------------------------------------------------------------------------
  
!   public static int write(OutputStream out, DERValue object) 
      throws IOException
    {
      out.write(object.getExternalTag());
--- 81,87 ----
    // Class methods.
    // ------------------------------------------------------------------------
  
!   public static int write(OutputStream out, DERValue object)
      throws IOException
    {
      out.write(object.getExternalTag());
*************** public class DERWriter implements DER
*** 231,237 ****
    private static int writeString(OutputStream out, int tag, String str)
      throws IOException
    {
-     Charset charset = null;
      byte[] b = null;
      switch (tag & 0x1F)
        {
--- 225,230 ----
*************** public class DERWriter implements DER
*** 243,275 ****
          case GRAPHIC_STRING:
          case ISO646_STRING:
          case GENERAL_STRING:
!           charset = Charset.forName("ISO-8859-1");
            break;
          case UNIVERSAL_STRING:
          case BMP_STRING:
!           charset = Charset.forName("UTF-16BE");
            break;
          case UTF8_STRING:
          default:
!           charset = Charset.forName("UTF-8");
            break;
        }
!     if (charset == null)
!       throw new DEREncodingException("no charset");
!     CharsetEncoder encoder = charset.newEncoder();
!     ByteBuffer result = encoder.encode(CharBuffer.wrap(str));
!     if (result.hasArray())
        {
!         b = result.array();
        }
!     else
        {
!         b = new byte[result.remaining()];
!         result.get(b);
        }
!     writeLength(out, b.length);
!     out.write(b);
!     return b.length;
    }
  
    private static int writeDate(OutputStream out, int tag, Date date)
--- 236,300 ----
          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)
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/pkcs/PKCS7SignedData.java gcc-4.0.0/libjava/gnu/java/security/pkcs/PKCS7SignedData.java
*** gcc-3.4.3/libjava/gnu/java/security/pkcs/PKCS7SignedData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/pkcs/PKCS7SignedData.java	Tue Feb 22 17:52:39 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/pkcs/SignerInfo.java gcc-4.0.0/libjava/gnu/java/security/pkcs/SignerInfo.java
*** gcc-3.4.3/libjava/gnu/java/security/pkcs/SignerInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/pkcs/SignerInfo.java	Tue Feb 22 17:52:40 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/provider/CollectionCertStoreImpl.java gcc-4.0.0/libjava/gnu/java/security/provider/CollectionCertStoreImpl.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/CollectionCertStoreImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/CollectionCertStoreImpl.java	Mon Nov 15 20:02:04 2004
***************
*** 0 ****
--- 1,103 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.Certificate;
+ import java.security.cert.CertSelector;
+ import java.security.cert.CRL;
+ import java.security.cert.CRLSelector;
+ import java.security.cert.CertStoreException;
+ import java.security.cert.CertStoreParameters;
+ import java.security.cert.CertStoreSpi;
+ 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-3.4.3/libjava/gnu/java/security/provider/DSAKeyPairGenerator.java gcc-4.0.0/libjava/gnu/java/security/provider/DSAKeyPairGenerator.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/DSAKeyPairGenerator.java	Sun Aug 11 12:08:03 2002
--- gcc-4.0.0/libjava/gnu/java/security/provider/DSAKeyPairGenerator.java	Mon May  3 19:52:27 2004
*************** exception statement from your version. *
*** 39,58 ****
  package gnu.java.security.provider;
  
  import java.math.BigInteger;
- import java.security.AlgorithmParameters;
  import java.security.AlgorithmParameterGenerator;
! import java.security.KeyPairGeneratorSpi;
  import java.security.KeyPair;
  import java.security.SecureRandom;
- import java.security.InvalidParameterException;
- import java.security.InvalidAlgorithmParameterException;
  import java.security.interfaces.DSAParams;
  import java.security.spec.AlgorithmParameterSpec;
  import java.security.spec.DSAParameterSpec;
  import java.util.Random;
  
- import gnu.java.security.util.Prime;
- 
  public class DSAKeyPairGenerator extends KeyPairGeneratorSpi 
  	implements java.security.interfaces.DSAKeyPairGenerator
  {
--- 39,56 ----
  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.SecureRandom;
  import java.security.interfaces.DSAParams;
  import java.security.spec.AlgorithmParameterSpec;
  import java.security.spec.DSAParameterSpec;
  import java.util.Random;
  
  public class DSAKeyPairGenerator extends KeyPairGeneratorSpi 
  	implements java.security.interfaces.DSAKeyPairGenerator
  {
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/provider/DSAParameters.java gcc-4.0.0/libjava/gnu/java/security/provider/DSAParameters.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/DSAParameters.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/provider/DSAParameters.java	Mon Oct 18 10:14:23 2004
***************
*** 1,5 ****
  /* DSAParameters.java --- DSA Parameters Implementation
!    Copyright (C) 1999,2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DSAParameters.java --- DSA Parameters Implementation
!    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,67 ****
  
  package gnu.java.security.provider;
  
! import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
- 
  import java.math.BigInteger;
- 
  import java.security.AlgorithmParametersSpi;
- import java.security.InvalidAlgorithmParameterException;
  import java.security.spec.AlgorithmParameterSpec;
  import java.security.spec.DSAParameterSpec;
  import java.security.spec.InvalidParameterSpecException;
- 
  import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- 
- import gnu.java.io.ASN1ParsingException;
- 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 gnu.java.security.der.DERWriter;
- 
- import gnu.java.security.util.Prime;
  
  /*
  	ASN.1 Encoding for DSA from rfc2459 
--- 38,57 ----
  
  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 
*************** public byte[] engineGetEncoded(String fo
*** 154,160 ****
  
  public String engineToString()
  {
- 	String lineSeparator = System.getProperty("line.seperator");
  	return ("q: " + q + " p: " + p + " g: " + g);
  }
  
--- 144,149 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/provider/DSASignature.java gcc-4.0.0/libjava/gnu/java/security/provider/DSASignature.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/DSASignature.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/provider/DSASignature.java	Sun Oct 17 08:00:11 2004
***************
*** 1,5 ****
! /* DSASignature.java
!    Copyright (C) 1999,2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* DSASignature.java --
!    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,48 ****
  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.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
- 
  import java.math.BigInteger;
- 
  import java.security.InvalidAlgorithmParameterException;
  import java.security.InvalidKeyException;
  import java.security.InvalidParameterException;
--- 35,51 ----
  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.SignatureSpi;
*** 57,74 ****
  import java.security.interfaces.DSAPrivateKey;
  import java.security.interfaces.DSAPublicKey;
  import java.security.spec.AlgorithmParameterSpec;
- 
  import java.util.ArrayList;
- import java.util.List;
  import java.util.Random;
  
- import gnu.java.io.ASN1ParsingException;
- 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 gnu.java.security.der.DERWriter;
- 
  public class DSASignature extends SignatureSpi
  {
    private DSAPublicKey publicKey;
--- 60,68 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/provider/EncodedKeyFactory.java gcc-4.0.0/libjava/gnu/java/security/provider/EncodedKeyFactory.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/EncodedKeyFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/EncodedKeyFactory.java	Thu Feb 17 18:26:29 2005
***************
*** 0 ****
--- 1,306 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.InvalidParameterSpecException;
+ import java.security.spec.InvalidKeySpecException;
+ 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-3.4.3/libjava/gnu/java/security/provider/Gnu.java gcc-4.0.0/libjava/gnu/java/security/provider/Gnu.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/Gnu.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/provider/Gnu.java	Sun Feb 20 22:30:49 2005
***************
*** 1,5 ****
  /* Gnu.java --- Gnu provider main class
!    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 37,111 ****
  
  
  package gnu.java.security.provider;
  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, X.509 Certificates");
  
!     // 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");
  
!     // Key Pair Generator
!     put("KeyPairGenerator.DSA",
!         gnu.java.security.provider.DSAKeyPairGenerator.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");
  
!     // Key Factory
!     put("KeyFactory.DSA",
!         gnu.java.security.provider.DSAKeyFactory.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");
  
!     // 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");
  
!     // Algorithm Parameters
!     put("AlgorithmParameters.DSA",
!         gnu.java.security.provider.DSAParameters.class.getName());
  
!     // 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.X.509",
!         gnu.java.security.provider.X509CertificateFactory.class.getName());
  
!     put("Alg.Alias.CertificateFactory.X509", "X.509");
    }
  }
--- 37,168 ----
  
  
  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");
  
!     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("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");
  
!         // 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");
  
!         // 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());
! 
!         return null;
!       }
!     });
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/provider/GnuDHPublicKey.java gcc-4.0.0/libjava/gnu/java/security/provider/GnuDHPublicKey.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/GnuDHPublicKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/GnuDHPublicKey.java	Thu Feb 17 18:26:29 2005
***************
*** 0 ****
--- 1,116 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.util.ArrayList;
+ 
+ import javax.crypto.interfaces.DHPublicKey;
+ import javax.crypto.spec.DHParameterSpec;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.BitString;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/provider/GnuDSAPrivateKey.java gcc-4.0.0/libjava/gnu/java/security/provider/GnuDSAPrivateKey.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/GnuDSAPrivateKey.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/provider/GnuDSAPrivateKey.java	Thu Feb 17 18:26:29 2005
***************
*** 1,5 ****
  /* GnuDSAPrivateKey.java --- Gnu DSA Private Key
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,56 ****
  
  package gnu.java.security.provider;
  
  import java.math.BigInteger;
  import java.security.interfaces.DSAPrivateKey;
  import java.security.interfaces.DSAParams;
  import java.security.spec.DSAParameterSpec;
  
  public class GnuDSAPrivateKey implements DSAPrivateKey
  {
    BigInteger x;
    BigInteger p;
    BigInteger q;
    BigInteger g;
  
!   public GnuDSAPrivateKey(BigInteger x, BigInteger p, BigInteger q, BigInteger g ) 
    {
      this.x = x;
      this.p = p;
--- 38,68 ----
  
  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.DSAPrivateKey;
  import java.security.interfaces.DSAParams;
  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;
*************** public class GnuDSAPrivateKey implements
*** 65,76 ****
  
    public String getFormat()
    {
!     return null;
    }
  
    public byte[] getEncoded()
    {
!     return null;
    }
  
    public DSAParams getParams()
--- 77,132 ----
  
    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()
*************** public class GnuDSAPrivateKey implements
*** 85,91 ****
  
    public String toString()
    {
!     return "GnuDSAPrivateKey: x=" + x.toString(16) + " p=" + p.toString(16)
!       + " q=" + q.toString(16) + " g=" + g.toString(16);
    }
  }
--- 141,150 ----
  
    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-3.4.3/libjava/gnu/java/security/provider/GnuDSAPublicKey.java gcc-4.0.0/libjava/gnu/java/security/provider/GnuDSAPublicKey.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/GnuDSAPublicKey.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/provider/GnuDSAPublicKey.java	Thu Feb 17 18:26:29 2005
***************
*** 1,5 ****
  /* GnuDSAPublicKey.java --- Gnu DSA Public Key
!    Copyright (C) 1999,2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,56 ****
  
  package gnu.java.security.provider;
  
  import java.math.BigInteger;
  import java.security.interfaces.DSAPublicKey;
  import java.security.interfaces.DSAParams;
  import java.security.spec.DSAParameterSpec;
  
  public class GnuDSAPublicKey implements DSAPublicKey
  {
    BigInteger y;
    BigInteger p;
    BigInteger q;
    BigInteger g;
  
!   public GnuDSAPublicKey(BigInteger y, BigInteger p, BigInteger q, BigInteger g ) 
    {
      this.y = y;
      this.p = p;
--- 38,69 ----
  
  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.DSAPublicKey;
  import java.security.interfaces.DSAParams;
  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;
*************** public class GnuDSAPublicKey implements 
*** 65,80 ****
  
    public String getFormat()
    {
!     return null;
    }
  
    public byte[] getEncoded()
    {
!     return null;
    }
  
    public DSAParams getParams()
    {
      return (DSAParams)(new DSAParameterSpec(p,q,g));
    }
  
--- 78,126 ----
  
    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 class GnuDSAPublicKey implements 
*** 85,91 ****
  
    public String toString()
    {
!     return "GnuDSAPublicKey: y=" + y.toString(16) + " p=" + p.toString(16)
!       + " q=" + q.toString(16) + " g=" + g.toString(16);
    }
  }
--- 131,140 ----
  
    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-3.4.3/libjava/gnu/java/security/provider/GnuRSAPrivateKey.java gcc-4.0.0/libjava/gnu/java/security/provider/GnuRSAPrivateKey.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/GnuRSAPrivateKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/GnuRSAPrivateKey.java	Mon Nov 15 20:02:04 2004
***************
*** 0 ****
--- 1,166 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.interfaces.RSAPrivateCrtKey;
+ import java.security.spec.RSAPrivateCrtKeySpec;
+ 
+ import java.util.ArrayList;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/provider/GnuRSAPublicKey.java gcc-4.0.0/libjava/gnu/java/security/provider/GnuRSAPublicKey.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/GnuRSAPublicKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/GnuRSAPublicKey.java	Mon Nov 15 20:02:04 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.interfaces.RSAPublicKey;
+ import java.security.spec.RSAPublicKeySpec;
+ import java.util.ArrayList;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.BitString;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/provider/MD2withRSA.java gcc-4.0.0/libjava/gnu/java/security/provider/MD2withRSA.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/MD2withRSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/MD2withRSA.java	Mon Nov 15 20:02:04 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/provider/MD4withRSA.java gcc-4.0.0/libjava/gnu/java/security/provider/MD4withRSA.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/MD4withRSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/MD4withRSA.java	Mon Nov 15 20:02:04 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/provider/MD5withRSA.java gcc-4.0.0/libjava/gnu/java/security/provider/MD5withRSA.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/MD5withRSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/MD5withRSA.java	Mon Nov 15 20:02:04 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java gcc-4.0.0/libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java	Thu Feb 17 18:26:29 2005
***************
*** 0 ****
--- 1,704 ----
+ /* PKIXCertPathValidatorImpl.java -- PKIX certificate path validator.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.X509CertSelectorImpl;
+ import gnu.java.security.x509.X509CRLSelectorImpl;
+ 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.CertificateException;
+ 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.CRL;
+ import java.security.cert.PKIXCertPathChecker;
+ import java.security.cert.PKIXCertPathValidatorResult;
+ import java.security.cert.PKIXParameters;
+ import java.security.cert.TrustAnchor;
+ import java.security.cert.X509Certificate;
+ import java.security.cert.X509CRL;
+ 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-3.4.3/libjava/gnu/java/security/provider/RSA.java gcc-4.0.0/libjava/gnu/java/security/provider/RSA.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/RSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/RSA.java	Mon Nov 15 20:02:04 2004
***************
*** 0 ****
--- 1,314 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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;
+ 
+ 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;
+ 
+ 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-3.4.3/libjava/gnu/java/security/provider/RSAKeyFactory.java gcc-4.0.0/libjava/gnu/java/security/provider/RSAKeyFactory.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/RSAKeyFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/RSAKeyFactory.java	Mon Nov 15 20:02:04 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/provider/SHA1withRSA.java gcc-4.0.0/libjava/gnu/java/security/provider/SHA1withRSA.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/SHA1withRSA.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/provider/SHA1withRSA.java	Mon Nov 15 20:02:04 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ import gnu.java.security.OID;
+ 
+ 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-3.4.3/libjava/gnu/java/security/provider/X509CertificateFactory.java gcc-4.0.0/libjava/gnu/java/security/provider/X509CertificateFactory.java
*** gcc-3.4.3/libjava/gnu/java/security/provider/X509CertificateFactory.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/provider/X509CertificateFactory.java	Mon Nov 15 20:02:04 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** import java.io.InputStream;
*** 44,59 ****
--- 44,64 ----
  import java.io.IOException;
  
  import java.security.cert.Certificate;
+ import java.security.cert.CertificateEncodingException;
  import java.security.cert.CertificateException;
  import java.security.cert.CertificateFactorySpi;
+ import java.security.cert.CertPath;
  import java.security.cert.CRL;
  import java.security.cert.CRLException;
  
  import java.util.Collection;
+ import java.util.Iterator;
  import java.util.LinkedList;
+ import java.util.List;
  
  import gnu.java.io.Base64InputStream;
  import gnu.java.security.x509.X509Certificate;
+ import gnu.java.security.x509.X509CertPath;
  import gnu.java.security.x509.X509CRL;
  
  public class X509CertificateFactory extends CertificateFactorySpi
*************** public class X509CertificateFactory exte
*** 87,93 ****
        }
      catch (IOException ioe)
        {
!         throw new CertificateException(ioe.toString());
        }
    }
  
--- 92,100 ----
        }
      catch (IOException ioe)
        {
!         CertificateException ce = new CertificateException(ioe.getMessage());
!         ce.initCause (ioe);
!         throw ce;
        }
    }
  
*************** public class X509CertificateFactory exte
*** 107,113 ****
            }
          catch (IOException ioe)
            {
!             throw new CertificateException(ioe.toString());
            }
        }
      return certs;
--- 114,122 ----
            }
          catch (IOException ioe)
            {
!             CertificateException ce = new CertificateException(ioe.getMessage());
!             ce.initCause (ioe);
!             throw ce;
            }
        }
      return certs;
*************** public class X509CertificateFactory exte
*** 121,127 ****
        }
      catch (IOException ioe)
        {
!         throw new CRLException(ioe.toString());
        }
    }
  
--- 130,138 ----
        }
      catch (IOException ioe)
        {
!         CRLException crle = new CRLException(ioe.getMessage());
!         crle.initCause (ioe);
!         throw crle;
        }
    }
  
*************** public class X509CertificateFactory exte
*** 141,158 ****
            }
          catch (IOException ioe)
            {
!             throw new CRLException(ioe.toString());
            }
        }
      return crls;
    }
  
    // Own methods.
    // ------------------------------------------------------------------------
  
    private X509Certificate generateCert(InputStream inStream)
      throws IOException, CertificateException
    {
      if (!inStream.markSupported())
        inStream = new BufferedInputStream(inStream, 8192);
      inStream.mark(20);
--- 152,195 ----
            }
          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);
*************** public class X509CertificateFactory exte
*** 211,216 ****
--- 248,255 ----
    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);
*************** public class X509CertificateFactory exte
*** 265,269 ****
          return new X509CRL(inStream);
        }
    }
- 
  }
--- 304,307 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/util/Prime.java gcc-4.0.0/libjava/gnu/java/security/util/Prime.java
*** gcc-3.4.3/libjava/gnu/java/security/util/Prime.java	Sun Aug 11 16:34:44 2002
--- gcc-4.0.0/libjava/gnu/java/security/util/Prime.java	Mon Aug 30 17:29:48 2004
***************
*** 1,5 ****
  /* Prime.java --- Prime number generation utilities
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Prime.java --- Prime number generation utilities
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public final class Prime
*** 55,66 ****
      BigInteger p = new BigInteger( (pmax + pmin)/2, new Random() );
      if( p.compareTo( BigInteger.valueOf( 1 ).shiftLeft( pmin ) ) <= 0 )
        {
! 	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.add( BigInteger.valueOf( 1 ) );
  
      for(;;)
        {
--- 55,66 ----
      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(;;)
        {
*************** public final class Prime
*** 76,82 ****
  	    // 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.add( BigInteger.valueOf( 1 ) );
  	    continue;
  	  }
  	
--- 76,82 ----
  	    // 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;
  	  }
  	
*************** public final class Prime
*** 122,128 ****
  
        //Step 4 - test for even
        if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)
! 	p.add( r );
  
        for(;;)
  	{
--- 122,128 ----
  
        //Step 4 - test for even
        if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)
! 	p = p.add( r );
  
        for(;;)
  	{
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/x509/GnuPKIExtension.java gcc-4.0.0/libjava/gnu/java/security/x509/GnuPKIExtension.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/GnuPKIExtension.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/GnuPKIExtension.java	Mon Nov 15 20:02:05 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.X509Extension;
+ import java.util.Collection;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.x509.ext.Extension;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/PolicyNodeImpl.java gcc-4.0.0/libjava/gnu/java/security/x509/PolicyNodeImpl.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/PolicyNodeImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/PolicyNodeImpl.java	Mon Nov 15 20:02:05 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/x509/Util.java gcc-4.0.0/libjava/gnu/java/security/x509/Util.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/Util.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/Util.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/x509/X500DistinguishedName.java gcc-4.0.0/libjava/gnu/java/security/x509/X500DistinguishedName.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/X500DistinguishedName.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/x509/X500DistinguishedName.java	Thu Feb 17 18:26:29 2005
***************
*** 1,5 ****
! /* X500DistinguishedName.java -- X.500 name.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,161 ****
  
  package gnu.java.security.x509;
  
! import java.io.ByteArrayInputStream;
! import java.io.ByteArrayOutputStream;
  import java.io.InputStream;
  import java.io.IOException;
! import java.io.StreamTokenizer;
  import java.io.StringReader;
  
  import java.security.Principal;
  
  import java.util.HashSet;
  import java.util.LinkedList;
  
- import gnu.java.io.ASN1ParsingException;
- 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;
  
! /**
!  * A X.500 distinguished name. Distinguished names are sequences of
!  * ATTRIB=VALUE pairs, where ATTRIB is one of the following:
!  *
!  * <table cellpadding="0" cellspacing="0" border="0">
!  * <tr>
!  * <th bgcolor="#CCCCFF" align="left">Name</th>
!  * <th bgcolor="#CCCCFF" align="left">X.500 AttributeType</th>
!  * <th bgcolor="#CCCCFF" align="left">ObjectIdentifier</th>
!  * </tr>
!  * <tr>
!  * <td align="left">CN</td>
!  * <td align="left">commonName</td>
!  * <td align="left">2.5.4.3</td>
!  * </tr>
!  * <tr>
!  * <td align="left">C</td>
!  * <td align="left">countryName</td>
!  * <td align="left">2.5.4.6</td>
!  * </tr>
!  * <tr>
!  * <td align="left">L</td>
!  * <td align="left">localityName</td>
!  * <td align="left">2.5.4.7</td>
!  * </tr>
!  * <tr>
!  * <td align="left">ST</td>
!  * <td align="left">stateOrProvinceName</td>
!  * <td align="left">2.5.4.8</td>
!  * </tr>
!  * <tr>
!  * <td align="left">STREET</td>
!  * <td align="left">streetAddress</td>
!  * <td align="left">2.5.4.9</td>
!  * </tr>
!  * <tr>
!  * <td align="left">O</td>
!  * <td align="left">organizationName</td>
!  * <td align="left">2.5.4.10</td>
!  * </tr>
!  * <tr>
!  * <td align="left">OU</td>
!  * <td align="left">organizationUnitName</td>
!  * <td align="left">2.5.4.11</td>
!  * </tr>
!  * <tr>
!  * <td align="left">DC</td>
!  * <td align="left">domainComponent</td>
!  * <td align="left">0.9.2342.19200300.100.1.25</td>
!  * </tr>
!  * <tr>
!  * <td align="left">UID</td>
!  * <td align="left">userid</td>
!  * <td align="left"0.9.2342.19200300.100.1.1></td>
!  * </tr>
!  * <tr>
!  * <td align="left">DNQ or DNQUALIFIER(*)</td>
!  * <td align="left">domainNameQualifier</td>
!  * <td align="left">2.5.4.46</td>
!  * </tr>
!  * <tr>
!  * <td align="left">SURNAME(*)</td>
!  * <td align="left">name</td>
!  * <td align="left">2.5.4.41</td>
!  * </tr>
!  * <tr>
!  * <td align="left">GIVENNAME(*)</td>
!  * <td align="left">givenName</td>
!  * <td align="left">2.5.4.42</td>
!  * </tr>
!  * <tr>
!  * <td align="left">INITIALS(*)</td>
!  * <td align="left">initials</td>
!  * <td align="left">2.5.4.43</td>
!  * </tr>
!  * <tr>
!  * <td align="left">EMAILADDRESS(*)</td>
!  * <td align="left">emailAddress</td>
!  * <td align="left">2.5.4.44</td>
!  * </tr>
!  * </table>
!  *
!  * <p><i>(*) = attributes not specified in RFC1779 or RFC2253, but
!  * recognized anyway.</i>
!  *
!  * <p>Distinguished names of this form are used in the lightweight
!  * directory access protocol (LDAP) and in the issuer and subject fields
!  * of X.509 certificates.
!  *
!  * @author Casey Marshall (rsdio@metastatic.org)
!  * @see javax.security.auth.x500.X500Principal
!  * @status DER decoding/encoding works, RFC1779 and RFC2253 need to be
!  *         made more robust.
!  */
! public class X500DistinguishedName
  {
  
    // 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");
--- 38,71 ----
  
  package gnu.java.security.x509;
  
! import java.io.EOFException;
  import java.io.InputStream;
  import java.io.IOException;
! 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;
  
  import gnu.java.security.der.DER;
  import gnu.java.security.der.DERReader;
  import gnu.java.security.der.DERValue;
! import gnu.java.security.OID;
  
! 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 class X500DistinguishedName
*** 174,824 ****
    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 String commonName;
!   private String country;
!   private String locality;
!   private String orgUnit;
!   private String organization;
!   private String street;
!   private String state;
!   private String title;
!   private String dnQualifier;
!   private String surname;
!   private String givenName;
!   private String initials;
!   private String generation;
!   private String email;
!   private String domainComponent;
!   private String userid;
! 
!   private String nameRFC1779;
!   private String nameRFC2253;
!   private String nameCanonical;
! 
!   private transient byte[] encoded;
  
    // Constructors.
!   // ------------------------------------------------------------------------
  
-   /**
-    * Create a new X500DistinguishedName from the RFC1779 or RFC2253
-    * encoded form.
-    *
-    * @param name The encoded name.
-    * @throws IllegalArgumentException If the name cannot be parsed.
-    */
    public X500DistinguishedName(String name)
    {
!     if (name == null)
!       throw new NullPointerException();
      try
        {
!         parseDN(name, true);
        }
!     catch (Exception e)
        {
!         parseDN(name, false);
        }
    }
  
-   /**
-    * Create a new X500DistinguishedName from the DER encoded bytes.
-    *
-    * @param encoded The encoded form.
-    * @throws IOException If the bytes are not a valid DER construct.
-    */
    public X500DistinguishedName(byte[] encoded) throws IOException
    {
!     this(new ByteArrayInputStream(encoded));
    }
  
-   /**
-    * Create a new X500DistinguishedName from the DER encoded bytes.
-    *
-    * @param encoded The encoded form.
-    * @throws IOException If the bytes are not a valid DER construct.
-    */
    public X500DistinguishedName(InputStream encoded) throws IOException
    {
!     parseDER(encoded);
    }
  
    // Instance methods.
!   // ------------------------------------------------------------------------
! 
!   public boolean equals(Object o)
!   {
!     return 
!       (commonName != null &&
!        commonName.equals(((X500DistinguishedName) o).commonName)) &&
!       (country != null &&
!        country.equals(((X500DistinguishedName) o).country)) &&
!       (locality != null &&
!        locality.equals(((X500DistinguishedName) o).locality)) &&
!       (orgUnit != null &&
!        orgUnit.equals(((X500DistinguishedName) o).orgUnit)) &&
!       (organization != null &&
!        organization.equals(((X500DistinguishedName) o).organization)) &&
!       (street != null &&
!        street.equals(((X500DistinguishedName) o).street)) &&
!       (state != null &&
!        state.equals(((X500DistinguishedName) o).state)) &&
!       (domainComponent != null &&
!        domainComponent.equals(((X500DistinguishedName) o).domainComponent)) &&
!       (title != null &&
!        title.equals(((X500DistinguishedName) o).title)) &&
!       (dnQualifier != null &&
!        dnQualifier.equals(((X500DistinguishedName) o).dnQualifier)) &&
!       (surname != null &&
!        surname.equals(((X500DistinguishedName) o).surname)) &&
!       (givenName != null &&
!        givenName.equals(((X500DistinguishedName) o).givenName)) &&
!       (initials != null &&
!        initials.equals(((X500DistinguishedName) o).initials)) &&
!       (generation != null &&
!        generation.equals(((X500DistinguishedName) o).generation)) &&
!       (email != null &&
!        email.equals(((X500DistinguishedName) o).email)) &&
!       (userid != null &&
!        userid.equals(((X500DistinguishedName) o).userid));
!   }
! 
!   public byte[] getEncoded()
!   {
!     if (encoded == null)
!       encoded = encodeDER();
!     return (byte[]) encoded.clone();
!   }
! 
!   private static String quote(String str)
!   {
!     if (str.indexOf(" ")  > 0 || str.indexOf("\f") > 0 ||
!         str.indexOf("\n") > 0 || str.indexOf("\r") > 0 ||
!         str.indexOf("\t") > 0)
!       str = '"' + str + '"';
!     // XXX needs regex
!     //return str.replaceAll("([,+\"\\<>;])", "\\\1");
!     return str;
!   }
! 
!   public String toRFC1779()
!   {
!     if (nameRFC1779 != null)
!       return nameRFC1779;
!     StringBuffer buf = new StringBuffer();
!     if (commonName != null)
!       buf.append("CN=").append(quote(commonName)).append(", ");
!     if (country != null)
!       buf.append("C=").append(quote(country)).append(", ");
!     if (locality != null)
!       buf.append("L=").append(quote(locality)).append(", ");
!     if (orgUnit != null)
!       buf.append("OU=").append(quote(orgUnit)).append(", ");
!     if (organization != null)
!       buf.append("O=").append(quote(organization)).append(", ");
!     if (street != null)
!       buf.append("STREET=").append(quote(street)).append(", ");
!     if (state != null)
!       buf.append("ST=").append(quote(state)).append(", ");
!     if (title != null)
!       buf.append(T).append("=").append(quote(title)).append(", ");
!     if (dnQualifier != null)
!       buf.append(DNQ).append("=").append(quote(dnQualifier)).append(", ");
!     if (surname != null)
!       buf.append(NAME).append("=").append(quote(surname)).append(", ");
!     if (givenName != null)
!       buf.append(GIVENNAME).append("=").append(quote(givenName)).append(", ");
!     if (initials != null)
!       buf.append(INITIALS).append("=").append(quote(initials)).append(", ");
!     if (generation != null)
!       buf.append(GENERATION).append("=").append(quote(generation)).append(", ");
!     if (email != null)
!       buf.append(EMAIL).append("=").append(quote(email)).append(", ");
!     if (domainComponent != null)
!       buf.append(DC).append("=").append(quote(domainComponent)).append(", ");
!     if (userid != null)
!       buf.append(UID).append("=").append(quote(userid)).append(", ");
!     // XXX escapes
!     return (nameRFC1779 = buf.substring(0, buf.length()-2));
!   }
! 
!   public String toRFC2253()
!   {
!     if (nameRFC2253 != null)
!       return nameRFC2253;
!     StringBuffer buf = new StringBuffer();
!     if (commonName != null)
!       buf.append("CN=").append(quote(commonName)).append(",");
!     if (country != null)
!       buf.append("C=").append(quote(country)).append(",");
!     if (locality != null)
!       buf.append("L=").append(quote(locality)).append(",");
!     if (orgUnit != null)
!       buf.append("OU=").append(quote(orgUnit)).append(",");
!     if (organization != null)
!       buf.append("O=").append(quote(organization)).append(",");
!     if (street != null)
!       buf.append("STREET=").append(quote(street)).append(",");
!     if (state != null)
!       buf.append("ST=").append(quote(state)).append(",");
!     if (title != null)
!       buf.append(T).append("=").append(quote(title)).append(",");
!     if (dnQualifier != null)
!       buf.append(DNQ).append("=").append(quote(dnQualifier)).append(",");
!     if (surname != null)
!       buf.append(NAME).append("=").append(quote(surname)).append(",");
!     if (givenName != null)
!       buf.append(GIVENNAME).append("=").append(quote(givenName)).append(",");
!     if (initials != null)
!       buf.append(INITIALS).append("=").append(quote(initials)).append(",");
!     if (generation != null)
!       buf.append(GENERATION).append("=").append(quote(generation)).append(",");
!     if (email != null)
!       buf.append(EMAIL).append("=").append(quote(email)).append(",");
!     if (domainComponent != null)
!       buf.append(DC).append("=").append(quote(domainComponent)).append(",");
!     if (userid != null)
!       buf.append(UID).append("=").append(quote(userid)).append(",");
!     // XXX escapes.
!     return (nameRFC2253 = buf.substring(0, buf.length()-1));
!   }
  
!   public String toCanonical()
    {
!     if (nameCanonical != null)
!       return nameCanonical;
!     nameCanonical = toRFC2253();
!     return nameCanonical; // XXX canonicalize
    }
  
!   public String getCommonName()
    {
!     return commonName;
    }
  
!   public String getCountry()
    {
!     return country;
    }
  
!   public String getLocality()
    {
!     return locality;
    }
  
!   public String getOrganizationalUnit()
    {
!     return orgUnit;
    }
  
!   public String getOrganization()
    {
!     return organization;
    }
  
!   public String getStreet()
    {
!     return street;
    }
  
!   public String getState()
    {
!     return state;
    }
  
!   public String getTitle()
    {
!     return title;
    }
  
!   public String getDNQualifier()
    {
!     return dnQualifier;
    }
  
!   public String getSurname()
    {
!     return surname;
    }
  
!   public String getGivenName()
    {
!     return givenName;
    }
  
!   public String getInitials()
    {
!     return initials;
    }
  
!   public String getGeneration()
    {
!     return generation;
    }
  
!   public String getEmail()
!   {
!     return email;
!   }
  
!   public String getDomain()
!   {
!     return domainComponent;
!   }
  
!   public String getUserID()
    {
!     return userid;
    }
  
!   // Own methods.
!   // ------------------------------------------------------------------------
! 
!   private static String unquote(String str)
    {
!     if (str.startsWith("\"") && str.endsWith("\""))
!       str = str.substring(1, str.length()-1);
!     // XXX needs regex
!     //return str.replaceAll("\\([,+\"\\<>;])", "\1");
!     return str;
    }
  
!   private void parseDN(String name, boolean rfc2253)
    {
!     if (name.length() == 0)
!       throw new IllegalArgumentException("zero-length distinguished name");
!     StreamTokenizer parse = new StreamTokenizer(new StringReader(name));
!     parse.resetSyntax();
!     parse.wordChars('\000', '~');
!     parse.ordinaryChar('#');
!     parse.ordinaryChar(',');
!     parse.ordinaryChar('=');
!     parse.ordinaryChar('<');
!     parse.ordinaryChar('>');
!     parse.ordinaryChar(';');
!     parse.ordinaryChar('\\');
!     parse.quoteChar('"');
!     String attrib = null;
!     String value = null;
!     int token, lastToken = ',';
!     while (true)
        {
!         try
            {
!             token = parse.nextToken();
            }
!         catch (IOException ioe)
            {
!             throw new IllegalArgumentException();
            }
!         switch (token)
            {
!             case StreamTokenizer.TT_WORD:
!               if (lastToken == ',' || lastToken == '+' ||
!                   (!rfc2253 && lastToken == ';'))
!                 attrib = parse.sval.trim();
!               else if (lastToken == '=')
!                 value = unquote(parse.sval.trim());
!               else
!                 throw new IllegalArgumentException();
!               break;
!             case '"':
!               if (lastToken == '=')
!                 value = parse.sval;
!               else
!                 throw new IllegalArgumentException();
!               break;
!             case ';':
!               if (rfc2253)
!                 throw new IllegalArgumentException();
!             case ',':
!             case '+':
!               if (attrib == null || value == null)
!                 throw new IllegalArgumentException("extraneous separator");
!               try
!                 {
!                   setAttribute(new OID(attrib), value);
!                 }
!               catch (Exception x)
!                 {
!                   setAttribute(attrib, value);
!                 }
!               attrib = null;
!               value = null;
!               break;
!             case '=':
!               break;
!             case StreamTokenizer.TT_EOF:
!               return;
!             default:
!               throw new IllegalArgumentException("unknown token " + (char)token
!                 + " (" + token + ")");
            }
-         lastToken = token;
        }
    }
  
!   private void parseDER(InputStream in) throws IOException
    {
-     DERReader der = new DERReader(in);
      DERValue name = der.read();
      if (!name.isConstructed())
!       throw new ASN1ParsingException("badly formed Name");
      int len = 0;
      while (len < name.getLength())
        {
          DERValue rdn = der.read();
!         if (rdn.getValue() != DER.CONSTRUCTED_VALUE)
!           throw new ASN1ParsingException("badly formed RDNSequence");
          int len2 = 0;
          while (len2 < rdn.getLength())
            {
              DERValue atav = der.read();
!             if (atav.getValue() != DER.CONSTRUCTED_VALUE)
!               throw new ASN1ParsingException(
!                 "badly formed AttributeTypeAndValue");
!             OID atype = (OID) der.read().getValue();
!             String aval = (String) der.read().getValue();
!             setAttribute(atype, aval);
!             len2 += 1 + atav.getLength()
!                  + DERWriter.definiteEncodingSize(atav.getLength());
            }
!         len += len2 + 1 + DERWriter.definiteEncodingSize(name.getLength());
        }
    }
  
!   private byte[] encodeDER()
    {
!     try
        {
!         LinkedList name = new LinkedList();
!         if (commonName != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, CN));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, commonName));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (country != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, C));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, country));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (locality != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, L));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, locality));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (orgUnit != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, OU));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, orgUnit));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (organization != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, O));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, organization));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (street != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, STREET));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, street));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (state != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, ST));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, state));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (title != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, T));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, title));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (dnQualifier != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, DNQ));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, dnQualifier));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (surname != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, NAME));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, surname));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (givenName != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, GIVENNAME));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, givenName));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (initials != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, INITIALS));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, initials));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (generation != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, GENERATION));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, generation));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (email != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, EMAIL));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, email));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (domainComponent != null)
!           {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, DC));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, domainComponent));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
!           }
!         if (userid != null)
            {
!             HashSet rdn = new HashSet();
!             LinkedList atav = new LinkedList();
!             atav.add(new DERValue(DER.OBJECT_IDENTIFIER, UID));
!             atav.add(new DERValue(DER.PRINTABLE_STRING, userid));
!             rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav));
!             name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn));
            }
!         ByteArrayOutputStream out = new ByteArrayOutputStream();
!         DERWriter.write(out, new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, name));
!         return out.toByteArray();
!       }
!     catch (IOException ioe)
!       {
!         throw new Error(ioe);
        }
!   }
! 
!   private void setAttribute(String atype, String aval)
!   {
!     if (atype.equals("CN"))
!       commonName = aval;
!     else if (atype.equals("C"))
!       country = aval;
!     else if (atype.equals("L"))
!       locality = aval;
!     else if (atype.equals("ST"))
!       state = aval;
!     else if (atype.equals("STREET"))
!       street = aval;
!     else if (atype.equals("O"))
!       organization = aval;
!     else if (atype.equals("OU"))
!       orgUnit = aval;
!     else if (atype.equals("T"))
!       title = aval;
!     else if (atype.equals("DNQ") || atype.equals("DNQUALIFIER"))
!       dnQualifier = aval;
!     else if (atype.equals("SURNAME"))
!       surname = aval;
!     else if (atype.equals("GIVENNAME"))
!       givenName = aval;
!     else if (atype.equals("INITIALS"))
!       initials = aval;
!     else if (atype.equals("GENERATION"))
!       generation = aval;
!     else if (atype.equals("EMAILADDRESS"))
!       email = aval;
!     else if (atype.equals("DC"))
!       domainComponent = aval;
!     else if (atype.equals("UID"))
!       userid = aval;
!     else
!       throw new IllegalArgumentException("unknown attribute " + atype);
!   }
! 
!   private void setAttribute(OID atype, String aval)
!   {
!     if (atype.equals(CN))
!       commonName = aval;
!     else if (atype.equals(C))
!       country = aval;
!     else if (atype.equals(L))
!       locality = aval;
!     else if (atype.equals(ST))
!       state = aval;
!     else if (atype.equals(STREET))
!       street = aval;
!     else if (atype.equals(O))
!       organization = aval;
!     else if (atype.equals(OU))
!       orgUnit = aval;
!     else if (atype.equals(T))
!       title = aval;
!     else if (atype.equals(DNQ))
!       dnQualifier = aval;
!     else if (atype.equals(NAME))
!       surname = aval;
!     else if (atype.equals(GIVENNAME))
!       givenName = aval;
!     else if (atype.equals(INITIALS))
!       initials = aval;
!     else if (atype.equals(GENERATION))
!       generation = aval;
!     else if (atype.equals(EMAIL))
!       email = aval;
!     else if (atype.equals(DC))
!       domainComponent = aval;
!     else if (atype.equals(UID))
!       userid = aval;
!     else
!       throw new IllegalArgumentException("unknown attribute " + atype);
    }
  }
--- 84,550 ----
    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-3.4.3/libjava/gnu/java/security/x509/X509CRL.java gcc-4.0.0/libjava/gnu/java/security/x509/X509CRL.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/X509CRL.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/x509/X509CRL.java	Thu Feb 17 18:26:30 2005
***************
*** 1,5 ****
  /* X509CRL.java -- X.509 certificate revocation list.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,55 ****
  
  package gnu.java.security.x509;
  
  import java.io.InputStream;
  import java.io.IOException;
- 
  import java.math.BigInteger;
- 
- import java.util.Calendar;
- import java.util.Collections;
- import java.util.Date;
- import java.util.HashSet;
- import java.util.HashMap;
- import java.util.Set;
- 
  import java.security.InvalidKeyException;
  import java.security.NoSuchAlgorithmException;
  import java.security.NoSuchProviderException;
--- 38,53 ----
  
  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.InputStream;
  import java.io.IOException;
  import java.math.BigInteger;
  import java.security.InvalidKeyException;
  import java.security.NoSuchAlgorithmException;
  import java.security.NoSuchProviderException;
*************** import java.security.Signature;
*** 59,87 ****
  import java.security.SignatureException;
  import java.security.cert.Certificate;
  import java.security.cert.CRLException;
! import java.security.cert.X509CRLEntry;
  
  import javax.security.auth.x500.X500Principal;
  
- import gnu.java.io.ASN1ParsingException;
- 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.der.DERWriter;
- 
  /**
   * X.509 certificate revocation lists.
   *
   * @author Casey Marshall (rsdio@metastatic.org)
   */
  public class X509CRL extends java.security.cert.X509CRL
  {
  
    // Constants and fields.
    // ------------------------------------------------------------------------
  
    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");
--- 57,94 ----
  import java.security.SignatureException;
  import java.security.cert.Certificate;
  import java.security.cert.CRLException;
! import java.util.Collection;
! import java.util.Collections;
! import java.util.Date;
! import java.util.HashSet;
! import java.util.HashMap;
! 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");
*************** public class X509CRL extends java.securi
*** 97,108 ****
    private byte[] algParams;
    private Date thisUpdate;
    private Date nextUpdate;
!   private X500Principal issuerDN;
    private HashMap revokedCerts;
    private HashMap extensions;
!   private HashSet critOids;
!   private HashSet nonCritOids;
!   
    private OID sigAlg;
    private byte[] sigAlgParams;
    private byte[] rawSig;
--- 104,113 ----
    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;
*************** public class X509CRL extends java.securi
*** 123,130 ****
      super();
      revokedCerts = new HashMap();
      extensions = new HashMap();
-     critOids = new HashSet();
-     nonCritOids = new HashSet();
      try
        {
          parse(encoded);
--- 128,133 ----
*************** public class X509CRL extends java.securi
*** 146,152 ****
  
    public boolean equals(Object o)
    {
!     return ((X509CRL) o).revokedCerts.equals(revokedCerts);
    }
  
    public int hashCode()
--- 149,157 ----
  
    public boolean equals(Object o)
    {
!     if (!(o instanceof X509CRL))
!       return false;
!     return ((X509CRL) o).getRevokedCertificates().equals(revokedCerts.values());
    }
  
    public int hashCode()
*************** public class X509CRL extends java.securi
*** 187,193 ****
  
    public X500Principal getIssuerX500Principal()
    {
!     return issuerDN;
    }
  
    public Date getThisUpdate()
--- 192,198 ----
  
    public X500Principal getIssuerX500Principal()
    {
!     return new X500Principal(issuerDN.getDer());
    }
  
    public Date getThisUpdate()
*************** public class X509CRL extends java.securi
*** 202,210 ****
      return null;
    }
  
!   public X509CRLEntry getRevokedCertificate(BigInteger serialNo)
    {
!     return (X509CRLEntry) revokedCerts.get(serialNo);
    }
  
    public Set getRevokedCertificates()
--- 207,215 ----
      return null;
    }
  
!   public java.security.cert.X509CRLEntry getRevokedCertificate(BigInteger serialNo)
    {
!     return (java.security.cert.X509CRLEntry) revokedCerts.get(serialNo);
    }
  
    public Set getRevokedCertificates()
*************** public class X509CRL extends java.securi
*** 252,284 ****
  
    public boolean hasUnsupportedCriticalExtension()
    {
!     return false; // XXX
    }
  
    public Set getCriticalExtensionOIDs()
    {
!     return Collections.unmodifiableSet(critOids);
    }
  
    public Set getNonCriticalExtensionOIDs()
    {
!     return Collections.unmodifiableSet(nonCritOids);
    }
  
    public byte[] getExtensionValue(String oid)
    {
!     byte[] ext = (byte[]) extensions.get(oid);
!     if (ext != null)
!       return (byte[]) ext.clone();
      return null;
    }
  
    // CRL methods.
!   // ------------------------------------------------------------------------
  
    public String toString()
    {
!     return gnu.java.security.x509.X509CRL.class.getName();
    }
  
    public boolean isRevoked(Certificate cert)
--- 257,324 ----
  
    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)
*************** public class X509CRL extends java.securi
*** 307,323 ****
  
    private void parse(InputStream in) throws Exception
    {
      DERReader der = new DERReader(in);
      DERValue val = der.read();
      if (!val.isConstructed())
!       throw new ASN1ParsingException("malformed CertificateList");
      encoded = val.getEncoded();
  
      val = der.read();
      if (!val.isConstructed())
!       throw new ASN1ParsingException("malformed TBSCertList");
      tbsCRLBytes = val.getEncoded();
  
      val = der.read();
      if (val.getValue() instanceof BigInteger)
        {
--- 347,369 ----
  
    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)
        {
*************** public class X509CRL extends java.securi
*** 326,403 ****
        }
      else
        version = 1;
  
      if (!val.isConstructed())
!       throw new ASN1ParsingException("malformed AlgorithmIdentifier");
      DERValue algIdVal = der.read();
      algId = (OID) algIdVal.getValue();
      if (val.getLength() > algIdVal.getEncodedLength())
        {
          val = der.read();
          algParams = val.getEncoded();
          if (val.isConstructed())
            in.skip(val.getLength());
        }
  
!     issuerDN = new X500Principal(in);
  
      thisUpdate = (Date) der.read().getValue();
  
      val = der.read();
      if (val.getValue() instanceof Date)
        {
          nextUpdate = (Date) val.getValue();
          val = der.read();
        }
      if (val.getTag() != 0)
        {
          int len = 0;
          while (len < val.getLength())
            {
!             X509CRLEntry entry =
!                new gnu.java.security.x509.X509CRLEntry(version, in);
              revokedCerts.put(entry.getSerialNumber(), entry);
              len += entry.getEncoded().length;
            }
        }
!     if (version >= 2 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 0)
        {
!         val = der.read();
          int len = 0;
!         while (len < val.getLength())
            {
              DERValue ext = der.read();
!             OID extId = (OID) der.read().getValue();
!             DERValue val2 = der.read();
!             Boolean crit = Boolean.valueOf(false);
!             if (val2.getValue() instanceof Boolean)
!               {
!                 crit = (Boolean) val2.getValue();
!                 val2 = der.read();
!               }
!             byte[] extVal = (byte[]) val2.getValue();
!             extensions.put(extId.toString(), extVal);
!             if (crit.booleanValue())
!               critOids.add(extId.toString());
!             else
!               nonCritOids.add(extId.toString());
              len += ext.getEncodedLength();
            }
        }
  
!     val = der.read();
      if (!val.isConstructed())
!       throw new ASN1ParsingException("malformed AlgorithmIdentifier");
      DERValue sigAlgVal = der.read();
      sigAlg = (OID) sigAlgVal.getValue();
      if (val.getLength() > sigAlgVal.getEncodedLength())
        {
          val = der.read();
          sigAlgParams = (byte[]) val.getEncoded();
          if (val.isConstructed())
            in.skip(val.getLength());
        }
      val = der.read();
      rawSig = val.getEncoded();
      signature = ((BitString) val.getValue()).toByteArray();
    }
--- 372,475 ----
        }
      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-3.4.3/libjava/gnu/java/security/x509/X509CRLEntry.java gcc-4.0.0/libjava/gnu/java/security/x509/X509CRLEntry.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/X509CRLEntry.java	Wed Apr 30 07:23:40 2003
--- gcc-4.0.0/libjava/gnu/java/security/x509/X509CRLEntry.java	Thu Feb 17 18:26:30 2005
***************
*** 1,5 ****
! /* X509CRLEntry.java -- entry in a X.509 CRL.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,61 ****
  
  package gnu.java.security.x509;
  
- import java.io.InputStream;
  import java.io.IOException;
  
  import java.math.BigInteger;
  
  import java.security.cert.CRLException;
  
  import java.util.Collections;
  import java.util.Date;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Set;
  
- import gnu.java.io.ASN1ParsingException;
  import gnu.java.security.OID;
! import gnu.java.security.der.DERReader;
! import gnu.java.security.der.DERValue;
! import gnu.java.security.der.DERWriter;
  
  /**
   * A single entry in a X.509 certificate revocation list.
--- 38,60 ----
  
  package gnu.java.security.x509;
  
  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;
  
  import gnu.java.security.OID;
! import gnu.java.security.der.*;
! import gnu.java.security.x509.ext.*;
  
  /**
   * A single entry in a X.509 certificate revocation list.
*************** import gnu.java.security.der.DERWriter;
*** 64,74 ****
--- 63,84 ----
   * @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;
  
*************** class X509CRLEntry extends java.security
*** 78,92 ****
    /** The date the certificate was revoked. */
    private Date revocationDate;
  
!   /** The encoded extensions. */
    private HashMap extensions;
  
-   /** The set of critical extension OIDs. */
-   private HashSet critOids;
- 
-   /** the set of non-critical extension OIDs. */
-   private HashSet nonCritOids;
- 
    // Constructor.
    // ------------------------------------------------------------------------
  
--- 88,96 ----
    /** The date the certificate was revoked. */
    private Date revocationDate;
  
!   /** The CRL entry extensions. */
    private HashMap extensions;
  
    // Constructor.
    // ------------------------------------------------------------------------
  
*************** class X509CRLEntry extends java.security
*** 99,111 ****
     * @throws CRLException If the ASN.1 structure is invalid.
     * @throws IOException  If the bytes cannot be read.
     */
!   X509CRLEntry(int version, InputStream encoded)
      throws CRLException, IOException
    {
      super();
      extensions = new HashMap();
-     critOids = new HashSet();
-     nonCritOids = new HashSet();
      try
        {
          parse(version, encoded);
--- 103,113 ----
     * @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);
*************** class X509CRLEntry extends java.security
*** 125,132 ****
  
    public boolean equals(Object o)
    {
!     return ((X509CRLEntry) o).serialNo.equals(serialNo) &&
!            ((X509CRLEntry) o).revocationDate.equals(revocationDate);
    }
  
    public int hashCode()
--- 127,136 ----
  
    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()
*************** class X509CRLEntry extends java.security
*** 157,235 ****
    public String toString()
    {
      return "X509CRLEntry serial=" + serialNo + " revocation date="
!       + revocationDate + " critExt=" + critOids + " ext=" + nonCritOids;
    }
  
    // X509Extension methods.
!   // ------------------------------------------------------------------------
  
    public boolean hasUnsupportedCriticalExtension()
    {
!     return false; // XXX
    }
  
    public Set getCriticalExtensionOIDs()
    {
!     return Collections.unmodifiableSet(critOids);
    }
  
    public Set getNonCriticalExtensionOIDs()
    {
!     return Collections.unmodifiableSet(nonCritOids);
    }
  
    public byte[] getExtensionValue(String oid)
    {
!     byte[] ext = (byte[]) extensions.get(oid);
!     if (ext != null)
!       return (byte[]) ext.clone();
      return null;
    }
  
    // Own methods.
!   // ------------------------------------------------------------------------
  
!   private void parse(int version, InputStream in) throws Exception
    {
!     DERReader der = new DERReader(in);
      DERValue entry = der.read();
      if (!entry.isConstructed())
!       throw new ASN1ParsingException("malformed revokedCertificate");
      encoded = entry.getEncoded();
      int len = 0;
      DERValue val = der.read();
      serialNo = (BigInteger) val.getValue();
!     len += DERWriter.definiteEncodingSize(val.getLength())
!          + val.getLength() + 1;
      val = der.read();
      revocationDate = (Date) val.getValue();
!     len += DERWriter.definiteEncodingSize(val.getLength())
!          + val.getLength() + 1;
  
      if (len < entry.getLength())
        {
          if (version < 2)
!           throw new ASN1ParsingException("extra data in CRL entry");
!         while (len < entry.getLength())
            {
              val = der.read();
              if (!val.isConstructed())
!               throw new ASN1ParsingException("malformed Extension");
!             OID extOid = (OID) der.read().getValue();
!             Boolean critical = Boolean.valueOf(false);
!             DERValue val2 = der.read();
!             if (val2.getValue() instanceof Boolean)
!               {
!                 critical = (Boolean) val2.getValue();
!                 val2 = der.read();
!               }
!             byte[] ext = (byte[]) val2.getValue();
!             extensions.put(extOid.toString(), ext);
!             if (critical.booleanValue())
!               critOids.add(extOid.toString());
!             else
!               nonCritOids.add(extOid.toString());
              len += val.getEncodedLength();
            }
        }
    }
--- 161,279 ----
    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-3.4.3/libjava/gnu/java/security/x509/X509CRLSelectorImpl.java gcc-4.0.0/libjava/gnu/java/security/x509/X509CRLSelectorImpl.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/X509CRLSelectorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/X509CRLSelectorImpl.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/security/x509/X509CertPath.java gcc-4.0.0/libjava/gnu/java/security/x509/X509CertPath.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/X509CertPath.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/X509CertPath.java	Mon Nov 15 20:02:06 2004
***************
*** 0 ****
--- 1,306 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ 
+ import java.math.BigInteger;
+ 
+ import java.security.cert.Certificate;
+ import java.security.cert.CertificateEncodingException;
+ import java.security.cert.CertificateException;
+ import java.security.cert.CertPath;
+ 
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ 
+ 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;
+ 
+ /**
+  * 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-3.4.3/libjava/gnu/java/security/x509/X509CertSelectorImpl.java gcc-4.0.0/libjava/gnu/java/security/x509/X509CertSelectorImpl.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/X509CertSelectorImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/X509CertSelectorImpl.java	Mon Nov 15 20:02:06 2004
***************
*** 0 ****
--- 1,199 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.Certificate;
+ import java.security.cert.CertSelector;
+ 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-3.4.3/libjava/gnu/java/security/x509/X509Certificate.java gcc-4.0.0/libjava/gnu/java/security/x509/X509Certificate.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/X509Certificate.java	Thu Jun 19 09:45:44 2003
--- gcc-4.0.0/libjava/gnu/java/security/x509/X509Certificate.java	Thu Feb 17 18:26:30 2005
***************
*** 1,5 ****
  /* X509Certificate.java -- X.509 certificate.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* X509Certificate.java -- X.509 certificate.
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,53 ****
  
  package gnu.java.security.x509;
  
- import java.io.ByteArrayInputStream;
  import java.io.InputStream;
  import java.io.IOException;
! import java.io.ObjectStreamException;
  import java.io.Serializable;
  
  import java.math.BigInteger;
  
- import java.net.InetAddress;
- 
  import java.security.AlgorithmParameters;
  import java.security.InvalidKeyException;
  import java.security.KeyFactory;
--- 38,51 ----
  
  package gnu.java.security.x509;
  
  import java.io.InputStream;
  import java.io.IOException;
! 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.cert.CertificateExp
*** 64,73 ****
  import java.security.cert.CertificateNotYetValidException;
  import java.security.cert.CertificateParsingException;
  
  import java.security.spec.DSAParameterSpec;
! import java.security.spec.DSAPublicKeySpec;
! import java.security.spec.RSAPublicKeySpec;
  
  import java.util.ArrayList;
  import java.util.Collection;
  import java.util.Collections;
--- 62,73 ----
  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.Arrays;
  import java.util.ArrayList;
  import java.util.Collection;
  import java.util.Collections;
*************** import java.util.Date;
*** 75,93 ****
  import java.util.HashMap;
  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;
  
- import gnu.java.io.ASN1ParsingException;
  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.der.DERWriter;
  
  /**
   * An implementation of X.509 certificates.
--- 75,89 ----
  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 javax.security.auth.x500.X500Principal;
  
  import gnu.java.security.OID;
! import gnu.java.security.der.*;
! import gnu.java.security.x509.ext.*;
  
  /**
   * An implementation of X.509 certificates.
*************** import gnu.java.security.der.DERWriter;
*** 95,159 ****
   * @author Casey Marshall (rsdio@metastatic.org)
   */
  public class X509Certificate extends java.security.cert.X509Certificate
!   implements Serializable
  {
  
    // Constants and fields.
    // ------------------------------------------------------------------------
  
!   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 static final OID ID_EXTENSION = new OID("2.5.29");
!   private static final OID ID_KEY_USAGE = ID_EXTENSION.getChild(15);
!   private static final OID ID_BASIC_CONSTRAINTS = ID_EXTENSION.getChild(19);
!   private static final OID ID_EXT_KEY_USAGE = ID_EXTENSION.getChild(37);
  
!   private static final int OTHER_NAME     = 0;
!   private static final int RFC882_NAME    = 1;
!   private static final int DNS_NAME       = 2;
!   private static final int X400_ADDRESS   = 3;
!   private static final int DIRECTORY_NAME = 4;
!   private static final int EDI_PARTY_NAME = 5;
!   private static final int URI            = 6;
!   private static final int IP_ADDRESS     = 7;
!   private static final int REGISTERED_ID  = 8;
  
    // This object SHOULD be serialized with an instance of
    // java.security.cert.Certificate.CertificateRep, thus all fields are
    // transient.
  
    // The encoded certificate.
!   private transient byte[] encoded;
  
    // TBSCertificate part.
!   private transient byte[] tbsCertBytes;
!   private transient int version;
!   private transient BigInteger serialNo;
!   private transient OID algId;
!   private transient byte[] algVal;
!   private transient X500Principal issuer;
!   private transient Date notBefore;
!   private transient Date notAfter;
!   private transient X500Principal subject;
!   private transient PublicKey subjectKey;
!   private transient BitString issuerUniqueId;
!   private transient BitString subjectUniqueId;
!   private transient HashMap extensions;
!   private transient HashSet critOids;
!   private transient HashSet nonCritOids;
!   
!   private transient BitString keyUsage;
!   private transient int basicConstraints = -1;
  
    // Signature.
!   private transient OID sigAlgId;
!   private transient byte[] sigAlgVal;
!   private transient byte[] signature;
  
    // Constructors.
    // ------------------------------------------------------------------------
--- 91,154 ----
   * @author Casey Marshall (rsdio@metastatic.org)
   */
  public class X509Certificate extends java.security.cert.X509Certificate
!   implements Serializable, GnuPKIExtension
  {
  
    // Constants and fields.
    // ------------------------------------------------------------------------
  
!   private static final boolean DEBUG = false;
!   private static void debug(String msg)
!   {
!     if (DEBUG)
!       {
!         System.err.print(">> X509Certificate: ");
!         System.err.println(msg);
!       }
!   }
!   private static void debug(Throwable t)
!   {
!     if (DEBUG)
!       {
!         System.err.print(">> X509Certificate: ");
!         t.printStackTrace();
!       }
!   }
  
!   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.
    // ------------------------------------------------------------------------
*************** public class X509Certificate extends jav
*** 173,194 ****
    {
      super();
      extensions = new HashMap();
-     critOids = new HashSet();
-     nonCritOids = new HashSet();
      try
        {
          parse(encoded);
        }
      catch (IOException ioe)
        {
          throw ioe;
        }
      catch (Exception e)
        {
!         throw new CertificateException(e.toString());
        }
    }
  
    // X509Certificate methods.
    // ------------------------------------------------------------------------
  
--- 168,196 ----
    {
      super();
      extensions = new HashMap();
      try
        {
          parse(encoded);
        }
      catch (IOException ioe)
        {
+         debug(ioe);
          throw ioe;
        }
      catch (Exception e)
        {
!         debug(e);
!         CertificateException ce = new CertificateException(e.getMessage());
!         ce.initCause (e);
!         throw ce;
        }
    }
  
+   protected X509Certificate()
+   {
+     extensions = new HashMap();
+   }
+ 
    // X509Certificate methods.
    // ------------------------------------------------------------------------
  
*************** public class X509Certificate extends jav
*** 202,210 ****
      throws CertificateExpiredException, CertificateNotYetValidException
    {
      if (date.compareTo(notBefore) < 0)
!       throw new CertificateNotYetValidException();
      if (date.compareTo(notAfter) > 0)
!       throw new CertificateExpiredException();
    }
  
    public int getVersion()
--- 204,216 ----
      throws CertificateExpiredException, CertificateNotYetValidException
    {
      if (date.compareTo(notBefore) < 0)
!       {
!         throw new CertificateNotYetValidException();
!       }
      if (date.compareTo(notAfter) > 0)
!       {
!         throw new CertificateExpiredException();
!       }
    }
  
    public int getVersion()
*************** public class X509Certificate extends jav
*** 219,240 ****
  
    public Principal getIssuerDN()
    {
!     return getIssuerX500Principal();
    }
  
    public X500Principal getIssuerX500Principal()
    {
!     return issuer;
    }
  
    public Principal getSubjectDN()
    {
!     return getSubjectX500Principal();
    }
  
    public X500Principal getSubjectX500Principal()
    {
!     return subject;
    }
  
    public Date getNotBefore()
--- 225,246 ----
  
    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()
*************** public class X509Certificate extends jav
*** 260,274 ****
    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";
-     // return sigAlgId.getShortName();
    }
  
    public String getSigAlgOID()
--- 266,287 ----
    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()
*************** public class X509Certificate extends jav
*** 284,358 ****
    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()
    {
!     if (keyUsage != null)
!       return keyUsage.toBooleanArray();
      return null;
    }
  
    public List getExtendedKeyUsage() throws CertificateParsingException
    {
!     byte[] ext = (byte[]) extensions.get("2.5.29.37");
!     if (ext == null)
!       return null;
!     LinkedList usages = new LinkedList();
!     try
        {
!         DERReader der = new DERReader(new ByteArrayInputStream(ext));
!         DERValue seq = der.read();
!         if (!seq.isConstructed())
!           throw new CertificateParsingException();
!         int len = 0;
!         while (len < seq.getLength())
            {
!             DERValue oid = der.read();
!             if (!(oid.getValue() instanceof OID))
!               throw new CertificateParsingException();
!             usages.add(oid.getValue().toString());
!             len += DERWriter.definiteEncodingSize(oid.getLength())
!                  + oid.getLength() + 1;
            }
        }
!     catch (IOException ioe)
!       {
!         throw new CertificateParsingException();
!       }
!     return usages;
    }
  
    public int getBasicConstraints()
    {
!     return basicConstraints;
    }
  
    public Collection getSubjectAlternativeNames()
      throws CertificateParsingException
    {
!     byte[] ext = getExtensionValue("2.5.29.17");
!     if (ext == null)
!       return null;
!     return getAltNames(ext);
    }
  
    public Collection getIssuerAlternativeNames()
      throws CertificateParsingException
    {
!     byte[] ext = getExtensionValue("2.5.29.18");
!     if (ext == null)
!       return null;
!     return getAltNames(ext);
    }
  
  // X509Extension methods.
--- 297,377 ----
    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 class X509Certificate extends jav
*** 360,371 ****
  
    public boolean hasUnsupportedCriticalExtension()
    {
!     for (Iterator it = critOids.iterator(); it.hasNext(); )
        {
!         String oid = (String) it.next();
!         if (!oid.equals("2.5.29.15") && !oid.equals("2.5.29.17") &&
!             !oid.equals("2.5.29.18") && !oid.equals("2.5.29.19") &&
!             !oid.equals("2.5.29.37"))
            return true;
        }
      return false;
--- 379,388 ----
  
    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 class X509Certificate extends jav
*** 373,396 ****
  
    public Set getCriticalExtensionOIDs()
    {
!     return Collections.unmodifiableSet(critOids);
    }
  
    public Set getNonCriticalExtensionOIDs()
    {
!     return Collections.unmodifiableSet(nonCritOids);
    }
  
    public byte[] getExtensionValue(String oid)
    {
!     byte[] ext = (byte[]) extensions.get(oid);
!     if (ext != null)
!       return (byte[]) ext.clone();
      return null;
    }
  
    // Certificate methods.
!   // ------------------------------------------------------------------------
  
    public byte[] getEncoded() throws CertificateEncodingException
    {
--- 390,442 ----
  
    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
    {
*************** public class X509Certificate extends jav
*** 398,404 ****
    }
  
    public void verify(PublicKey key)
!     throws CertificateException, NoSuchAlgorithmException, 
             InvalidKeyException, NoSuchProviderException, SignatureException
    {
      Signature sig = Signature.getInstance(sigAlgId.toString());
--- 444,450 ----
    }
  
    public void verify(PublicKey key)
!     throws CertificateException, NoSuchAlgorithmException,
             InvalidKeyException, NoSuchProviderException, SignatureException
    {
      Signature sig = Signature.getInstance(sigAlgId.toString());
*************** public class X509Certificate extends jav
*** 415,422 ****
  
    public String toString()
    {
!     // XXX say more than this.
!     return gnu.java.security.x509.X509Certificate.class.getName();
    }
  
    public PublicKey getPublicKey()
--- 461,510 ----
  
    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()
*************** public class X509Certificate extends jav
*** 424,434 ****
      return subjectKey;
    }
  
!   protected Object writeReplace() throws ObjectStreamException
    {
!     return super.writeReplace();
    }
!   
    // Own methods.
    // ------------------------------------------------------------------------
  
--- 512,536 ----
      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.
    // ------------------------------------------------------------------------
  
*************** public class X509Certificate extends jav
*** 438,505 ****
    private void doVerify(Signature sig, PublicKey key)
      throws CertificateException, InvalidKeyException, SignatureException
    {
      sig.initVerify(key);
      sig.update(tbsCertBytes);
      if (!sig.verify(signature))
-       throw new CertificateException("signature not validated");
-   }
- 
-   /**
-    * Read a GeneralNames structure.
-    */
-   private List getAltNames(byte[] encoded)
-     throws CertificateParsingException
-   {
-     LinkedList names = new LinkedList();
-     try
-       {
-         ByteArrayInputStream in = new ByteArrayInputStream(encoded);
-         DERReader der = new DERReader(in);
-         DERValue seq = der.read();
-         if (!seq.isConstructed())
-           throw new CertificateParsingException();
-         int len = 0;
-         while (len < seq.getLength())
-           {
-             DERValue name = der.read();
-             ArrayList pair = new ArrayList(2);
-             Object nameVal = null;
-             switch (name.getTag())
-               {
-                 case RFC882_NAME:
-                 case DNS_NAME:
-                 case URI:
-                   nameVal = new String((byte[]) name.getValue());
-                   break;
-                 case IP_ADDRESS:
-                   nameVal = InetAddress.getByAddress(
-                     (byte[]) name.getValue()).getHostAddress();
-                   break;
-                 case REGISTERED_ID:
-                   nameVal = new OID((byte[]) name.getValue());
-                   break;
-                 case OTHER_NAME:
-                 case X400_ADDRESS:
-                 case DIRECTORY_NAME:
-                 case EDI_PARTY_NAME:
-                   nameVal = name.getEncoded();
-                   break;
-                 default:
-                   throw new CertificateParsingException();
-               }
-             pair.add(new Integer(name.getTag()));
-             pair.add(nameVal);
-             names.add(pair);
-             if (name.isConstructed())
-               in.skip(name.getLength());
-             len += name.getEncodedLength();
-           }
-       }
-     catch (IOException ioe)
        {
!         throw new CertificateParsingException(ioe.toString());
        }
-     return Collections.unmodifiableList(names);
    }
  
    /**
--- 540,552 ----
    private void doVerify(Signature sig, PublicKey key)
      throws CertificateException, InvalidKeyException, SignatureException
    {
+     debug("verifying sig=" + sig + " key=" + key);
      sig.initVerify(key);
      sig.update(tbsCertBytes);
      if (!sig.verify(signature))
        {
!         throw new CertificateException("signature not validated");
        }
    }
  
    /**
*************** public class X509Certificate extends jav
*** 513,532 ****
  
      // Certificate ::= SEQUENCE {
      DERValue cert = der.read();
      this.encoded = cert.getEncoded();
      if (!cert.isConstructed())
!       throw new ASN1ParsingException("malformed Certificate");
  
      // TBSCertificate ::= SEQUENCE {
      DERValue tbsCert = der.read();
      if (tbsCert.getValue() != DER.CONSTRUCTED_VALUE)
!       throw new ASN1ParsingException("malformed TBSCertificate");
      tbsCertBytes = tbsCert.getEncoded();
  
      DERValue val = der.read();
      if (val.getTagClass() == DER.CONTEXT && val.getTag() == 0)
        {
-         // Version ::= INTEGER [0] { v1(0), v2(1), v3(2) }
          version = ((BigInteger) der.read().getValue()).intValue() + 1;
          val = der.read();
        }
--- 560,586 ----
  
      // Certificate ::= SEQUENCE {
      DERValue cert = der.read();
+     debug("start Certificate  len == " + 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();
+     debug("start TBSCertificate  len == " + 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();
        }
*************** public class X509Certificate extends jav
*** 534,696 ****
        {
          version = 1;
        }
      // SerialNumber ::= INTEGER
      serialNo = (BigInteger) val.getValue();
  
      // AlgorithmIdentifier ::= SEQUENCE {
      val = der.read();
      if (!val.isConstructed())
!       throw new ASN1ParsingException("malformed AlgorithmIdentifier");
      int certAlgLen = val.getLength();
      val = der.read();
      algId = (OID) val.getValue();
      if (certAlgLen > val.getEncodedLength())
        {
          val = der.read();
          if (val == null)
!           algVal = null;
          else
!           algVal = val.getEncoded();
          if (val.isConstructed())
!           encoded.skip(val.getLength());
        }
  
!     issuer = new X500Principal(encoded);
  
      if (!der.read().isConstructed())
!       throw new ASN1ParsingException("malformed Validity");
      notBefore = (Date) der.read().getValue();
      notAfter  = (Date) der.read().getValue();
  
!     subject = new X500Principal(encoded);
! 
!     if (!der.read().isConstructed())
!       throw new ASN1ParsingException("malformed SubjectPublicKeyInfo");
!    
!     val = der.read();
!     if (!val.isConstructed())
!       throw new ASN1ParsingException("malformed AlgorithmIdentifier");
!     int keyAlgLen = val.getLength();
!     val = der.read();
!     OID keyID = (OID) val.getValue();
!     byte[] keyParams = null;
!     if (keyAlgLen > val.getEncodedLength())
!       {
!         val = der.read();
!         keyParams = val.getEncoded();
!         if (algVal == null)
!           algVal = keyParams;
!         if (val.isConstructed())
!           encoded.skip(val.getLength());
!       }
      val = der.read();
!     byte[] keyVal = ((BitString) val.getValue()).toByteArray();
  
!     if (keyID.equals(ID_DSA))
!       {
!         AlgorithmParameters params = AlgorithmParameters.getInstance("DSA");
!         params.init(keyParams, "ASN.1");
!         KeyFactory keyFac = KeyFactory.getInstance("DSA");
!         DSAParameterSpec spec = (DSAParameterSpec)
!           params.getParameterSpec(DSAParameterSpec.class);
!         subjectKey = keyFac.generatePublic(new DSAPublicKeySpec(
!           (BigInteger) new DERReader(keyVal).read().getValue(),
!           spec.getP(), spec.getQ(), spec.getG()));
!       }
!     else if (keyID.equals(ID_RSA))
        {
!         KeyFactory keyFac = KeyFactory.getInstance("RSA");
!         DERReader rsaKey = new DERReader(keyVal);
!         if (!rsaKey.read().isConstructed())
!           throw new ASN1ParsingException("malformed RSAPublicKey");
!         subjectKey = keyFac.generatePublic(new RSAPublicKeySpec(
!           (BigInteger) rsaKey.read().getValue(),
!           (BigInteger) rsaKey.read().getValue()));
        }
!     else
!       throw new ASN1ParsingException("unknown key algorithm " + keyID);
  
      if (version > 1)
!       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);
          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);
          val = der.read();
        }
      if (version >= 3 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 3)
        {
          val = der.read();
          int len = 0;
          while (len < val.getLength())
            {
              DERValue ext = der.read();
!             OID extId = (OID) der.read().getValue();
!             DERValue val2 = der.read();
!             Boolean crit = Boolean.valueOf(false);
!             if (val2.getValue() instanceof Boolean)
!               {
!                 crit = (Boolean) val2.getValue();
!                 val2 = der.read();
!               }
!             byte[] extVal = (byte[]) val2.getValue();
!             extensions.put(extId.toString(), extVal);
!             if (crit.booleanValue())
!               critOids.add(extId.toString());
!             else
!               nonCritOids.add(extId.toString());
!             if (extId.equals(ID_KEY_USAGE))
!               {
!                 keyUsage = (BitString) DERReader.read(extVal).getValue();
!               }
!             else if (extId.equals(ID_BASIC_CONSTRAINTS))
!               {
!                 DERReader bc = new DERReader(extVal);
!                 DERValue constraints = bc.read();
!                 if (!constraints.isConstructed())
!                   throw new ASN1ParsingException("malformed BasicConstraints");
!                 if (constraints.getLength() > 0)
!                   {
!                     boolean ca = false;
!                     int constr = -1;
!                     val2 = bc.read();
!                     if (val2.getValue() instanceof Boolean)
!                       {
!                         ca = ((Boolean) val2.getValue()).booleanValue();
!                         if (constraints.getLength() > val2.getEncodedLength())
!                           val2 = bc.read();
!                       }
!                     if (val2.getValue() instanceof BigInteger)
!                       constr = ((BigInteger) val2.getValue()).intValue();
!                     basicConstraints = constr;
!                   }
!               }
              len += ext.getEncodedLength();
            }
        }
  
      val = der.read();
      if (!val.isConstructed())
!       throw new ASN1ParsingException("malformed AlgorithmIdentifier");
      int sigAlgLen = val.getLength();
      val = der.read();
      sigAlgId = (OID) val.getValue();
      if (sigAlgLen > val.getEncodedLength())
        {
          val = der.read();
          if (val.getValue() == null)
!           sigAlgVal = keyParams;
          else
!           sigAlgVal = (byte[]) val.getEncoded();
          if (val.isConstructed())
!           encoded.skip(val.getLength());
        }
      signature = ((BitString) der.read().getValue()).toByteArray();
    }
  }
--- 588,741 ----
        {
          version = 1;
        }
+     debug("read version == " + version);
+ 
      // SerialNumber ::= INTEGER
      serialNo = (BigInteger) val.getValue();
+     debug("read serial number == " + serialNo);
  
      // AlgorithmIdentifier ::= SEQUENCE {
      val = der.read();
      if (!val.isConstructed())
!       {
!         throw new IOException("malformed AlgorithmIdentifier");
!       }
      int certAlgLen = val.getLength();
+     debug("start AlgorithmIdentifier  len == " + certAlgLen);
      val = der.read();
+ 
+     //   algorithm    OBJECT IDENTIFIER,
      algId = (OID) val.getValue();
+     debug("read algorithm ID == " + 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());
!           }
!         debug("read algorithm parameters == " + algVal);
        }
  
!     // issuer   Name,
!     val = der.read();
!     issuer = new X500DistinguishedName(val.getEncoded());
!     der.skip(val.getLength());
!     debug("read issuer == " + issuer);
  
+     // Validity ::= SEQUENCE {
+     //   notBefore   Time,
+     //   notAfter    Time }
      if (!der.read().isConstructed())
!       {
!         throw new IOException("malformed Validity");
!       }
      notBefore = (Date) der.read().getValue();
      notAfter  = (Date) der.read().getValue();
+     debug("read notBefore == " + notBefore);
+     debug("read notAfter == " + notAfter);
  
!     // subject   Name,
      val = der.read();
!     subject = new X500DistinguishedName(val.getEncoded());
!     der.skip(val.getLength());
!     debug("read subject == " + 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());
!     debug("read subjectPublicKey == " + subjectKey);
  
      if (version > 1)
!       {
!         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);
+         debug("read issuerUniqueId == " + 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);
+         debug("read subjectUniqueId == " + subjectUniqueId);
          val = der.read();
        }
      if (version >= 3 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 3)
        {
          val = der.read();
+         debug("start Extensions  len == " + val.getLength());
          int len = 0;
          while (len < val.getLength())
            {
              DERValue ext = der.read();
!             debug("start extension  len == " + ext.getLength());
!             Extension e = new Extension(ext.getEncoded());
!             extensions.put(e.getOid(), e);
!             der.skip(ext.getLength());
              len += ext.getEncodedLength();
+             debug("count == " + len);
            }
        }
  
      val = der.read();
      if (!val.isConstructed())
!       {
!         throw new IOException("malformed AlgorithmIdentifier");
!       }
      int sigAlgLen = val.getLength();
+     debug("start AlgorithmIdentifier  len == " + sigAlgLen);
      val = der.read();
      sigAlgId = (OID) val.getValue();
+     debug("read algorithm id == " + 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());
!           }
!         debug("read parameters == " + sigAlgVal);
        }
      signature = ((BitString) der.read().getValue()).toByteArray();
+     debug("read signature ==\n" + Util.hexDump(signature, ">>>> "));
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java	Thu Feb 17 18:26:31 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.math.BigInteger;
+ 
+ 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;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/BasicConstraints.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/BasicConstraints.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/BasicConstraints.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/BasicConstraints.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.math.BigInteger;
+ import java.util.ArrayList;
+ import java.util.List;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ 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, new Boolean (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-3.4.3/libjava/gnu/java/security/x509/ext/CRLNumber.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/CRLNumber.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/CRLNumber.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/CRLNumber.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.math.BigInteger;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/CertificatePolicies.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/CertificatePolicies.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/CertificatePolicies.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/CertificatePolicies.java	Thu Feb 17 18:26:31 2005
***************
*** 0 ****
--- 1,190 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/ExtendedKeyUsage.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/ExtendedKeyUsage.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/ExtendedKeyUsage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/ExtendedKeyUsage.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.util.Collections;
+ import java.util.LinkedList;
+ import java.util.List;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/Extension.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/Extension.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/Extension.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/Extension.java	Mon Nov 15 20:02:06 2004
***************
*** 0 ****
--- 1,289 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.List;
+ 
+ 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;
+ 
+ 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, new Boolean (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 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-3.4.3/libjava/gnu/java/security/x509/ext/GeneralNames.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/GeneralNames.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/GeneralNames.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/GeneralNames.java	Mon Nov 15 20:02:06 2004
***************
*** 0 ****
--- 1,157 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.x509.X500DistinguishedName;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/IssuerAlternativeNames.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/IssuerAlternativeNames.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/IssuerAlternativeNames.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/IssuerAlternativeNames.java	Mon Nov 15 20:02:06 2004
***************
*** 0 ****
--- 1,76 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.util.List;
+ import gnu.java.security.OID;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/KeyUsage.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/KeyUsage.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/KeyUsage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/KeyUsage.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ 
+ 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;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/PolicyConstraint.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/PolicyConstraint.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/PolicyConstraint.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/PolicyConstraint.java	Thu Feb 17 18:26:31 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.math.BigInteger;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/PolicyMappings.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/PolicyMappings.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/PolicyMappings.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/PolicyMappings.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.util.Date;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ 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.getValue();
+         val = der.read();
+       }
+     else
+       notBefore = null;
+     if (val.getTagClass() == DER.APPLICATION || val.getTag() == 1)
+       {
+         notAfter = (Date) val.getValue();
+       }
+     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-3.4.3/libjava/gnu/java/security/x509/ext/ReasonCode.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/ReasonCode.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/ReasonCode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/ReasonCode.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.math.BigInteger;
+ 
+ import gnu.java.security.OID;
+ import gnu.java.security.der.DER;
+ import gnu.java.security.der.DERReader;
+ import gnu.java.security.der.DERValue;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/SubjectAlternativeNames.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/SubjectAlternativeNames.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/SubjectAlternativeNames.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/SubjectAlternativeNames.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ import java.util.List;
+ 
+ import gnu.java.security.OID;
+ 
+ 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-3.4.3/libjava/gnu/java/security/x509/ext/SubjectKeyIdentifier.java gcc-4.0.0/libjava/gnu/java/security/x509/ext/SubjectKeyIdentifier.java
*** gcc-3.4.3/libjava/gnu/java/security/x509/ext/SubjectKeyIdentifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/security/x509/ext/SubjectKeyIdentifier.java	Mon Nov 15 20:02:06 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 java.io.IOException;
+ 
+ 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;
+ 
+ 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-3.4.3/libjava/gnu/java/text/AttributedFormatBuffer.java gcc-4.0.0/libjava/gnu/java/text/AttributedFormatBuffer.java
*** gcc-3.4.3/libjava/gnu/java/text/AttributedFormatBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/text/AttributedFormatBuffer.java	Tue May  4 16:27:20 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/text/BaseBreakIterator.java gcc-4.0.0/libjava/gnu/java/text/BaseBreakIterator.java
*** gcc-3.4.3/libjava/gnu/java/text/BaseBreakIterator.java	Tue Jan 22 22:40:02 2002
--- gcc-4.0.0/libjava/gnu/java/text/BaseBreakIterator.java	Mon Oct 25 16:56:00 2004
***************
*** 1,5 ****
  /* BaseBreakIterator.java -- Base class for default BreakIterators
!    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BaseBreakIterator.java -- Base class for default BreakIterators
!    Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package gnu.java.text;
*** 40,45 ****
--- 40,46 ----
  
  import java.text.BreakIterator;
  import java.text.CharacterIterator;
+ import java.text.StringCharacterIterator;
  
  /**
   * @author Tom Tromey <tromey@cygnus.com>
*************** import java.text.CharacterIterator;
*** 48,53 ****
--- 49,62 ----
  
  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();
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/text/CharacterBreakIterator.java gcc-4.0.0/libjava/gnu/java/text/CharacterBreakIterator.java
*** gcc-3.4.3/libjava/gnu/java/text/CharacterBreakIterator.java	Tue Jan 22 22:40:02 2002
--- gcc-4.0.0/libjava/gnu/java/text/CharacterBreakIterator.java	Mon Oct 25 16:56:00 2004
***************
*** 1,5 ****
  /* CharacterBreakIterator.java - Default character BreakIterator.
!    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CharacterBreakIterator.java - Default character BreakIterator.
!    Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.text;
  
- import java.text.BreakIterator;
  import java.text.CharacterIterator;
  
  /**
--- 38,43 ----
*************** public class CharacterBreakIterator exte
*** 70,76 ****
  
    public CharacterBreakIterator ()
    {
-     iter = null;		// FIXME?
    }
  
    private CharacterBreakIterator (CharacterBreakIterator other)
--- 69,74 ----
*************** public class CharacterBreakIterator exte
*** 161,167 ****
      if (iter.getIndex() == iter.getBeginIndex())
        return DONE;
  
-     int start = iter.getBeginIndex();
      while (iter.getIndex() >= iter.getBeginIndex())
        {
  	char c = iter.previous();
--- 159,164 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/text/FormatBuffer.java gcc-4.0.0/libjava/gnu/java/text/FormatBuffer.java
*** gcc-3.4.3/libjava/gnu/java/text/FormatBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/text/FormatBuffer.java	Tue May  4 16:27:20 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/text/FormatCharacterIterator.java gcc-4.0.0/libjava/gnu/java/text/FormatCharacterIterator.java
*** gcc-3.4.3/libjava/gnu/java/text/FormatCharacterIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/text/FormatCharacterIterator.java	Sun Feb 20 11:26:49 2005
***************
*** 0 ****
--- 1,534 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 gnu.classpath.Configuration;
+ 
+ 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;
+   
+   /**
+    * 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 (Configuration.DEBUG)
+       System.out.println(s);
+   }
+ 
+   private void dumpTable()
+   {
+     int start_range = 0;
+     
+     if (!Configuration.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-3.4.3/libjava/gnu/java/text/LineBreakIterator.java gcc-4.0.0/libjava/gnu/java/text/LineBreakIterator.java
*** gcc-3.4.3/libjava/gnu/java/text/LineBreakIterator.java	Tue Jan 22 22:40:02 2002
--- gcc-4.0.0/libjava/gnu/java/text/LineBreakIterator.java	Mon Oct 25 16:56:00 2004
***************
*** 1,5 ****
  /* LineBreakIterator.java - Default word BreakIterator.
!    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LineBreakIterator.java - Default word BreakIterator.
!    Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.text;
  
- import java.text.BreakIterator;
  import java.text.CharacterIterator;
  
  /**
--- 38,43 ----
*************** public class LineBreakIterator extends B
*** 56,62 ****
  
    public LineBreakIterator ()
    {
-     iter = null;
    }
  
    private LineBreakIterator (LineBreakIterator other)
--- 55,60 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/text/SentenceBreakIterator.java gcc-4.0.0/libjava/gnu/java/text/SentenceBreakIterator.java
*** gcc-3.4.3/libjava/gnu/java/text/SentenceBreakIterator.java	Sun May 12 01:11:18 2002
--- gcc-4.0.0/libjava/gnu/java/text/SentenceBreakIterator.java	Mon Oct 25 16:56:00 2004
***************
*** 1,5 ****
  /* SentenceBreakIterator.java - Default sentence BreakIterator.
!    Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SentenceBreakIterator.java - Default sentence BreakIterator.
!    Copyright (C) 1999, 2001, 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.text;
  
- import java.text.BreakIterator;
  import java.text.CharacterIterator;
  
  /**
--- 38,43 ----
*************** public class SentenceBreakIterator exten
*** 56,62 ****
  
    public SentenceBreakIterator ()
    {
-     iter = null;
    }
  
    private SentenceBreakIterator (SentenceBreakIterator other)
--- 55,60 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/text/StringFormatBuffer.java gcc-4.0.0/libjava/gnu/java/text/StringFormatBuffer.java
*** gcc-3.4.3/libjava/gnu/java/text/StringFormatBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/java/text/StringFormatBuffer.java	Tue May  4 16:27:20 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/java/text/WordBreakIterator.java gcc-4.0.0/libjava/gnu/java/text/WordBreakIterator.java
*** gcc-3.4.3/libjava/gnu/java/text/WordBreakIterator.java	Tue Jan 22 22:40:02 2002
--- gcc-4.0.0/libjava/gnu/java/text/WordBreakIterator.java	Mon Oct 25 16:56:00 2004
***************
*** 1,5 ****
  /* WordBreakIterator.java - Default word BreakIterator.
!    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* WordBreakIterator.java - Default word BreakIterator.
!    Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package gnu.java.text;
  
- import java.text.BreakIterator;
  import java.text.CharacterIterator;
  
  /**
--- 38,43 ----
*************** public class WordBreakIterator extends B
*** 56,62 ****
  
    public WordBreakIterator ()
    {
-     iter = null;
    }
  
    private WordBreakIterator (WordBreakIterator other)
--- 55,60 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/util/DoubleEnumeration.java gcc-4.0.0/libjava/gnu/java/util/DoubleEnumeration.java
*** gcc-3.4.3/libjava/gnu/java/util/DoubleEnumeration.java	Tue Jan 22 22:40:03 2002
--- gcc-4.0.0/libjava/gnu/java/util/DoubleEnumeration.java	Mon May  3 19:52:28 2004
*************** exception statement from your version. *
*** 37,43 ****
  
  package gnu.java.util;
  
- import java.io.*;
  import java.util.Enumeration;
  import java.util.NoSuchElementException;
  
--- 37,42 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/java/util/prefs/NodeReader.java gcc-4.0.0/libjava/gnu/java/util/prefs/NodeReader.java
*** gcc-3.4.3/libjava/gnu/java/util/prefs/NodeReader.java	Thu Feb 13 07:45:58 2003
--- gcc-4.0.0/libjava/gnu/java/util/prefs/NodeReader.java	Mon May  3 19:52:28 2004
*************** exception statement from your version. *
*** 38,50 ****
  package gnu.java.util.prefs;
  
  import java.io.BufferedReader;
  import java.io.InputStream;
  import java.io.InputStreamReader;
- import java.io.InputStream;
- import java.io.IOException;
  import java.io.Reader;
! 
! import java.util.prefs.*;
  
  /**
   * Reads and imports preferences nodes from files.
--- 38,50 ----
  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.
diff -Nrcpad gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/DelegateFactory.java gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/DelegateFactory.java
*** gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/DelegateFactory.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/DelegateFactory.java	Thu Jan  1 00:00:00 1970
***************
*** 1,74 ****
- /* DelegateFactory.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but 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.HashMap;
- import javax.rmi.CORBA.Util;
- 
- public class DelegateFactory
- {
-   private static HashMap cache = new HashMap(4);
-     
-   public static synchronized Object getInstance(String type)
-     throws GetDelegateInstanceException
-   {
-     Object r = cache.get(type);
-     if (r != null)
-       return r;
-     String dcname = System.getProperty("javax.rmi.CORBA." + type + "Class");
-     if (dcname == null)
-       {
- 	//throw new DelegateException
- 	//  ("no javax.rmi.CORBA.XXXClass property sepcified.");
- 	dcname = "gnu.javax.rmi.CORBA." + type + "DelegateImpl";
-       }
-     try
-       {
- 	Class dclass = Class.forName(dcname);
- 	r = dclass.newInstance();
- 	cache.put(type, r);
- 	return r;
-       }
-     catch(Exception e)
-       {
- 	throw new GetDelegateInstanceException
- 	  ("Exception when trying to get delegate instance:" + dcname, e);
-       }
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java
*** gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/GetDelegateInstanceException.java	Thu Jan  1 00:00:00 1970
***************
*** 1,58 ****
- /* GetDelegateInstanceException.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but 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.io.PrintStream;
- import java.io.PrintWriter;
- 
- public class GetDelegateInstanceException
-   extends Exception
- {
-   private Throwable next;
-   
-   public GetDelegateInstanceException(String msg)
-   {
-     super(msg);
-   }
-   
-   public GetDelegateInstanceException(String msg, Throwable next)
-   {
-     super(msg, next);
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java
*** gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 1,133 ****
- /* PortableRemoteObjectDelegateImpl.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but 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.rmi.*;
- import java.rmi.server.*;
- import gnu.javax.rmi.*;
- import javax.rmi.CORBA.*;
- 
- public class PortableRemoteObjectDelegateImpl
-   implements PortableRemoteObjectDelegate
- {
-     
-   public PortableRemoteObjectDelegateImpl()
-   {
-   }
- 
-   public void connect(Remote remote, Remote remote1)
-     throws RemoteException
-   {
-     throw new Error("Not implemented for PortableRemoteObjectDelegateImpl");
-   }
-         
-   public void exportObject(Remote obj)
-     throws RemoteException
-   {
-     PortableServer.exportObject(obj);
-   }
- 
-   public Object narrow(Object narrowFrom, Class narrowTo)
-     throws ClassCastException
-   {
-     if (narrowTo == null)
-       throw new ClassCastException("Can't narrow to null class");
-     if (narrowFrom == null)
-       return null;
- 
-     Class fromClass = narrowFrom.getClass();
-     Object result = null;
-         
-     try
-       {
- 	if (narrowTo.isAssignableFrom(fromClass))
- 	  result = narrowFrom;
- 	else
- 	  {
- 	    System.out.println("We still haven't implement this case: narrow "
- 			       + narrowFrom + " of type " + fromClass + " to "
- 			       + narrowTo);
- 	    Class[] cs = fromClass.getInterfaces();
- 	    for (int i = 0; i < cs.length; i++)
- 	      System.out.println(cs[i]);
- 	    Exception e1 = new Exception();
- 	    try
- 	      {
- 		throw e1;
- 	      }
- 	    catch(Exception ee)
- 	      {
- 		ee.printStackTrace();
- 	      }
- 	    System.exit(2);
- 	    //throw new Error("We still haven't implement this case: narrow "
- 	    //                + narrowFrom + " of type " + fromClass + " to "
- 	    //                + narrowTo);
- 	    /*
- 	      ObjectImpl objimpl = (ObjectImpl)narrowFrom;
- 	      if(objimpl._is_a(PortableServer.getTypeName(narrowTo)))
- 	      result = PortableServer.getStubFromObjectImpl(objimpl, narrowTo);
- 	    */
- 	  }
-       }
-     catch(Exception e)
-       {
- 	result = null;
-       }
-         
-     if (result == null)
-       throw new ClassCastException("Can't narrow from "
- 				   + fromClass + " to " + narrowTo);
-             
-     return result;
-   }
-         
-   public Remote toStub(Remote obj)
-     throws NoSuchObjectException
-   {
-     return PortableServer.toStub(obj);
-   }
- 
-   public void unexportObject(Remote obj)
-     throws NoSuchObjectException
-   {
-     PortableServer.unexportObject(obj);
-   }
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/StubDelegateImpl.java gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/StubDelegateImpl.java
*** gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/StubDelegateImpl.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/StubDelegateImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 1,113 ****
- /* StubDelegateImpl.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but 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.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- //import org.omg.CORBA.portable.Delegate;
- //import org.omg.CORBA.portable.InputStream;
- //import org.omg.CORBA.portable.OutputStream;
- //import org.omg.CORBA_2_3.portable.ObjectImpl;
- //import org.omg.CORBA.portable.ObjectImpl;
- //import org.omg.CORBA.BAD_OPERATION;
- //import org.omg.CORBA.ORB;
- import java.rmi.RemoteException;
- import javax.rmi.CORBA.Stub;
- import javax.rmi.CORBA.StubDelegate;
- import javax.rmi.CORBA.Tie;
- import javax.rmi.CORBA.StubDelegate;
- 
- public class StubDelegateImpl
-   implements StubDelegate
- {
- 
-   private int hashCode;
-     
-   public StubDelegateImpl(){
-     hashCode = 0;   
-   }
-   // XXX javax.rmi.ORB -> org.omg.CORBA.ORB
-   public void connect(Stub self, javax.rmi.ORB orb)
-     throws RemoteException
-   {
-     throw new Error("Not implemented for StubDelegate");
-   }
- 
-   public boolean equals(Stub self, Object obj)
-   {
-     if(self == null || obj == null)
-       return self == obj;
-     if(!(obj instanceof Stub))
-       return false;
-     return self.hashCode() == ((Stub)obj).hashCode();
-   }
- 
-   public int hashCode(Stub self)
-   {
-     //FIX ME
-     return hashCode;
-   }
- 
-   public String toString(Stub self)
-   {
-     try
-       {
- 	return self._orb().object_to_string(self);
-       }
-     // XXX javax.rmi.BAD_OPERATION -> org.omg.CORBA.BAD_OPERATION
-     catch(javax.rmi.BAD_OPERATION bad_operation)
-       {
- 	return null;
-       }
-   }
- 
-   public void readObject(Stub self, ObjectInputStream s)
-     throws IOException, ClassNotFoundException
-   {
-     throw new Error("Not implemented for StubDelegate");
-   }
- 
-   public void writeObject(Stub self, ObjectOutputStream s)
-     throws IOException
-   {
-     throw new Error("Not implemented for StubDelegate");
-   }
-     
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/UtilDelegateImpl.java gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/UtilDelegateImpl.java
*** gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/UtilDelegateImpl.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/UtilDelegateImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 1,152 ****
- /* UtilDelegateImpl.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but 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.rmi.Remote;
- import java.rmi.RemoteException;
- import java.rmi.server.RMIClassLoader;
- import java.net.MalformedURLException;
- import java.io.*;
- //import org.omg.CORBA.ORB;
- //import org.omg.CORBA.SystemException;
- //import org.omg.CORBA.portable.InputStream;
- //import org.omg.CORBA.portable.OutputStream;
- import javax.rmi.CORBA.*;
- 
- public class UtilDelegateImpl
-   implements UtilDelegate
- {
-   // XXX javax.rmi.ORB -> org.omg.CORBA.ORB
-   public Object copyObject(Object obj, javax.rmi.ORB orb)
-     throws RemoteException
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
- 
-   // XXX javax.rmi.ORB -> org.omg.CORBA.ORB
-   public Object[] copyObjects(Object obj[], javax.rmi.ORB orb)
-     throws RemoteException
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
- 
-   public ValueHandler createValueHandler()
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
-     
-   public String getCodebase(Class clz)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
-     
-   public Tie getTie(Remote target)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
-     
-   public boolean isLocal(Stub stub)
-     throws RemoteException
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
- 
-   public Class loadClass(String className, String remoteCodebase,
- 		  	 ClassLoader loader)
-     throws ClassNotFoundException
-   {
-     try{
-       if (remoteCodebase == null)
- 	return RMIClassLoader.loadClass(className);
-       else
- 	return RMIClassLoader.loadClass(remoteCodebase, className);
-     }
-     catch (MalformedURLException e1)
-       {
- 	throw new ClassNotFoundException(className, e1);
-       }
-     catch(ClassNotFoundException e2)
-       {
- 	if(loader != null)
- 	  return loader.loadClass(className);
- 	else
- 	  return null;
-       }
-   }
- 
-   public RemoteException mapSystemException(SystemException ex)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
- 
-   public Object readAny(InputStream in)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
- 
-   public void registerTarget(Tie tie, Remote target)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
-     
-   public void unexportObject(Remote target)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
-     
-   public RemoteException wrapException(Throwable orig)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
-     
-   public void writeAbstractObject(OutputStream out, Object obj)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
-     
-   public void writeAny(OutputStream out, Object obj)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
- 
-   public void writeRemoteObject(OutputStream out, Object obj)
-   {
-     throw new Error("Not implemented for UtilDelegate");
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/ValueHandlerImpl.java gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/ValueHandlerImpl.java
*** gcc-3.4.3/libjava/gnu/javax/rmi/CORBA/ValueHandlerImpl.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/gnu/javax/rmi/CORBA/ValueHandlerImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 1,82 ****
- /* ValueHandlerImpl.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but 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.io.*;
- //import org.omg.CORBA.portable.InputStream;
- //import org.omg.CORBA.portable.OutputStream;
- //import org.omg.SendingContext.RunTime;
- import javax.rmi.CORBA.ValueHandler;
- 
- public class ValueHandlerImpl
-   implements ValueHandler
- {
- 
-   public String getRMIRepositoryID(Class clz)
-   {
-     throw new Error("Not implemented for ValueHandler");
-   }
- 
-   // XXX - Runtime -> RunTime
-   public Runtime getRunTimeCodeBase()
-   {
-     throw new Error("Not implemented for ValueHandler");
-   }
-     
-   public boolean isCustomMarshaled(Class clz)
-   {
-     throw new Error("Not implemented for ValueHandler");
-   }   
-     
-   // XXX - Runtime -> RunTime
-   public Serializable readValue(InputStream in, int offset, Class clz, String repositoryID, Runtime sender)
-   {
-     throw new Error("Not implemented for ValueHandler");
-   }
-     
-   public Serializable writeReplace(Serializable value)
-   {
-     throw new Error("Not implemented for ValueHandler");
-   }
-     
-   public void writeValue(OutputStream out, Serializable value)
-   {
-     throw new Error("Not implemented for ValueHandler");
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/javax/rmi/PortableServer.java gcc-4.0.0/libjava/gnu/javax/rmi/PortableServer.java
*** gcc-3.4.3/libjava/gnu/javax/rmi/PortableServer.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/gnu/javax/rmi/PortableServer.java	Thu Jan  1 00:00:00 1970
***************
*** 1,142 ****
- /* PortableServer.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but 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;
- 
- import java.util.Hashtable;
- import java.rmi.Remote;
- import java.rmi.RemoteException;
- import java.rmi.NoSuchObjectException;
- import java.rmi.server.ExportException;
- import java.rmi.server.UnicastRemoteObject;
- import java.rmi.server.RemoteStub;
- import javax.rmi.CORBA.*;
- //import org.omg.CORBA.portable.ObjectImpl;
- 
- /**
-  * The relationship of PortableRemoteObjectImpl with PortableServer
-  * is like that of UnicastRemoteObject with UnicastServer
-  */
- public class PortableServer
- {
-   static private Hashtable tieCache = new Hashtable();
-   static private Object NO_TIE = new Object();
-     
-   public static final synchronized void exportObject(Remote obj)
-     throws RemoteException
-   {
-     if(Util.getTie(obj) != null)
-       return;
-     
-     Tie tie = getTieFromRemote(obj);
-     if (tie != null)
-       Util.registerTarget(tie, obj);
-     else
-       UnicastRemoteObject.exportObject(obj);
-   }
-     
-   public static final void unexportObject(Remote obj)
-   {
-     if (Util.getTie(obj) != null)
-       Util.unexportObject(obj);
-     if (tieCache.get(obj) != null) //??
-       tieCache.remove(obj);
-   }
-   
-   public static final Remote toStub(Remote obj)
-     throws NoSuchObjectException
-   {
-     if (obj instanceof Stub || obj instanceof RemoteStub) 
-       return obj;
-     
-     Tie tie = Util.getTie(obj);
-     Remote stub;
-     if (tie != null)
-       stub = getStubFromTie(tie);
-     else
-       throw new NoSuchObjectException("Can't toStub an unexported object");
-     return stub;
-   }
-     
-   static synchronized Tie getTieFromRemote(Remote obj)
-   {
-     Object tie = tieCache.get(obj);
-     if (tie == null)
-       {
- 	tie = getTieFromClass(obj.getClass());
- 	if(tie == null)
- 	  tieCache.put(obj, NO_TIE);
- 	else
- 	  tieCache.put(obj, tie);
-       }
-     else
-       if(tie != NO_TIE)
- 	{
- 	  try
- 	    {
- 	      tie = obj.getClass().newInstance();
- 	    }
- 	  catch(Exception _)
- 	    {
- 	      tie = null;
- 	    }
- 	}
-       else //NO_TIE
- 	tie = null;
-                 
-     return (Tie)tie;
-   }
-   
-   static synchronized Tie getTieFromClass(Class clz)
-   {
-     //FIX ME
-     return null;
-   }
-     
-   public static Remote getStubFromTie(Tie tie)
-   {
-     //FIX ME
-     return null;
-   }
-   
-   public static Remote getStubFromObjectImpl(ObjectImpl objimpl, Class toClass)
-   {
-     //FIX ME
-     return null;
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/CharIndexed.java gcc-4.0.0/libjava/gnu/regexp/CharIndexed.java
*** gcc-3.4.3/libjava/gnu/regexp/CharIndexed.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/CharIndexed.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,84 ----
+ /* gnu/regexp/CharIndexed.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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();
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/CharIndexedCharArray.java gcc-4.0.0/libjava/gnu/regexp/CharIndexedCharArray.java
*** gcc-3.4.3/libjava/gnu/regexp/CharIndexedCharArray.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/CharIndexedCharArray.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,62 ----
+ /* gnu/regexp/CharIndexedCharArray.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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);
+     }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/CharIndexedInputStream.java gcc-4.0.0/libjava/gnu/regexp/CharIndexedInputStream.java
*** gcc-3.4.3/libjava/gnu/regexp/CharIndexedInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/CharIndexedInputStream.java	Fri Jul  9 13:27:27 2004
***************
*** 0 ****
--- 1,149 ----
+ /* gnu/regexp/CharIndexedInputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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);
+     }
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/CharIndexedString.java gcc-4.0.0/libjava/gnu/regexp/CharIndexedString.java
*** gcc-3.4.3/libjava/gnu/regexp/CharIndexedString.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/CharIndexedString.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,64 ----
+ /* gnu/regexp/CharIndexedString.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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);
+     }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/CharIndexedStringBuffer.java gcc-4.0.0/libjava/gnu/regexp/CharIndexedStringBuffer.java
*** gcc-3.4.3/libjava/gnu/regexp/CharIndexedStringBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/CharIndexedStringBuffer.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,62 ----
+ /* gnu/regexp/CharIndexedStringBuffer.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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());
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/MessagesBundle.properties gcc-4.0.0/libjava/gnu/regexp/MessagesBundle.properties
*** gcc-3.4.3/libjava/gnu/regexp/MessagesBundle.properties	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/MessagesBundle.properties	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,22 ----
+ # Localized error messages for gnu.regexp
+ 
+ # Prefix for REException messages
+ error.prefix=At position {0} in regular expression pattern:
+ 
+ # REException (parse error) messages
+ repeat.assertion=repeated token is zero-width assertion
+ repeat.chained=attempted to repeat a token that is already repeated
+ repeat.no.token=quantifier (?*+{}) without preceding token
+ repeat.empty.token=repeated token may be empty
+ unmatched.brace=unmatched brace
+ unmatched.bracket=unmatched bracket
+ unmatched.paren=unmatched parenthesis
+ interval.no.end=expected end of interval
+ class.no.end=expected end of character class
+ subexpr.no.end=expected end of subexpression
+ interval.order=interval minimum is greater than maximum
+ interval.error=interval is empty or contains illegal characters
+ ends.with.backslash=backslash at end of pattern
+ 
+ # RESyntax message
+ syntax.final=Syntax has been declared final and cannot be modified
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/MessagesBundle_fr.properties gcc-4.0.0/libjava/gnu/regexp/MessagesBundle_fr.properties
*** gcc-3.4.3/libjava/gnu/regexp/MessagesBundle_fr.properties	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/MessagesBundle_fr.properties	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,22 ----
+ # Localized error messages for gnu.regexp
+ 
+ # Prefix for REException messages
+ error.prefix=A l''index {0} dans le modèle d''expression régulière:
+ 
+ # REException (parse error) messages
+ repeat.assertion=l'élément répété est de largeur zéro
+ repeat.chained=tentative de répétition d'un élément déjà répété
+ repeat.no.token=quantifieur (?*+{}) sans élément précédent
+ repeat.empty.token=l'élément répété peut être vide
+ unmatched.brace=accolade inégalée
+ unmatched.bracket=crochet inégalé
+ unmatched.paren=parenthèse inégalée
+ interval.no.end=fin d'interval attendue
+ class.no.end=fin de classe de caractères attendue
+ subexpr.no.end=fin de sous-expression attendue
+ interval.order=l'interval minimum est supérieur à l'interval maximum
+ interval.error=l'interval est vide ou contient des caractères illégaux
+ ends.with.backslash=antislash à la fin du modèle
+ 
+ # RESyntax message
+ syntax.final=La syntaxe a été déclarée finale et ne peut pas être modifiée
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/RE.java gcc-4.0.0/libjava/gnu/regexp/RE.java
*** gcc-3.4.3/libjava/gnu/regexp/RE.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RE.java	Sun Feb 20 21:18:29 2005
***************
*** 0 ****
--- 1,1372 ----
+ /* gnu/regexp/RE.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+ 
+   /**
+    * Compilation flag. Do  not  differentiate  case.   Subsequent
+    * searches  using  this  RE will be case insensitive.
+    */
+   public static final int REG_ICASE = 2;
+ 
+   /**
+    * 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 = 4;
+ 
+   /**
+    * 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 = 8;
+ 
+   /**
+    * 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 = 16;
+ 
+   /**
+    * 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 = 32;
+ 
+   /**
+    * 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 = 64;
+ 
+   /**
+    * 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 = 128;
+ 
+   /** 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) {
+     super(subIndex);
+     firstToken = first;
+     lastToken = last;
+     numSubs = subs;
+     minimumLength = minLength;
+     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;
+ 
+     while (index < pLength) {
+       // read the next character unit (including backslash escapes)
+       index = getCharUnit(pattern,index,unit);
+ 
+       // 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))
+ 	     || (syntax.get(RESyntax.RE_NEWLINE_ALT) && (unit.ch == '\n') && !unit.bk) )
+ 	   && !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);
+ 	minimumLength = 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?
+ 
+       else if ((unit.ch == '{') && syntax.get(RESyntax.RE_INTERVALS) && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ unit.bk)) {
+ 	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);
+           if ((currentToken.getMinimumLength() == 0) && (minMax.second == Integer.MAX_VALUE))
+             throw new REException(getLocalizedMessage("repeat.empty.token"),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) {
+ 	Vector options = new Vector();
+ 	boolean negative = false;
+ 	char lastChar = 0;
+ 	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;
+ 	  if (++index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
+ 	}
+ 
+ 	while ((ch = pattern[index++]) != ']') {
+ 	  if ((ch == '-') && (lastChar != 0)) {
+ 	    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 {
+ 	      options.addElement(new RETokenRange(subIndex,lastChar,ch,insens));
+ 	      lastChar = 0;
+ 	      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;
+ 	    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;
+ 	      }
+ 	    }
+             else if ("nrt".indexOf(pattern[index]) != -1) {
+               switch (pattern[index]) {
+                 case 'n':
+                   asciiEsc = '\n';
+                   break;
+                 case 't':
+                   asciiEsc = '\t';
+                   break;
+                 case 'r':
+                   asciiEsc = '\r';
+                   break;
+               }
+             }
+ 	    if (lastChar != 0) options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ 	    
+ 	    if (posixID != -1) {
+ 	      options.addElement(new RETokenPOSIX(subIndex,posixID,insens,negate));
+ 	    } else if (asciiEsc != 0) {
+ 	      lastChar = asciiEsc;
+ 	    } else {
+ 	      lastChar = pattern[index];
+ 	    }
+ 	    ++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 (lastChar != 0) options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ 	    lastChar = ch;
+ 	  }
+ 	  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 (lastChar != 0) options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ 	    
+ 	// Create a new RETokenOneOf
+ 	addToken(currentToken);
+ 	options.trimToSize();
+ 	currentToken = new RETokenOneOf(subIndex,options,negative);
+       }
+ 
+       // SUBEXPRESSIONS
+       //  (...) | \(...\) depending on RE_NO_BK_PARENS
+ 
+       else if ((unit.ch == '(') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk)) {
+ 	boolean pure = false;
+ 	boolean comment = false;
+         boolean lookAhead = false;
+         boolean negativelh = 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 ':':
+ 	    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)) > 0)
+ 		&& !(nested == 0 && (unit.ch == ')') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk)) )
+ 	  if ((endIndex = nextIndex) >= pLength)
+ 	    throw new REException(getLocalizedMessage("subexpr.no.end"),REException.REG_ESUBREG,nextIndex);
+ 	  else if (unit.ch == '(' && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk))
+ 	    nested++;
+ 	  else if (unit.ch == ')' && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk))
+ 	    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) ? 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);
+ 	  }
+ 
+ 	  index = nextIndex;
+ 	} // 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))) {
+ 	throw new REException(getLocalizedMessage("unmatched.paren"),REException.REG_EPAREN,index);
+       }
+ 
+       // START OF LINE OPERATOR
+       //  ^
+ 
+       else if ((unit.ch == '^') && !unit.bk) {
+ 	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) {
+ 	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) {
+ 	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
+       //  *
+ 
+       else if ((unit.ch == '*') && !unit.bk) {
+ 	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);
+ 	if (currentToken.getMinimumLength() == 0)
+ 	  throw new REException(getLocalizedMessage("repeat.empty.token"),REException.REG_BADRPT,index);
+ 	currentToken = setRepeated(currentToken,0,Integer.MAX_VALUE,index);
+       }
+ 
+       // ONE-OR-MORE REPEAT OPERATOR
+       //  + | \+ depending on RE_BK_PLUS_QM
+       //  not available if RE_LIMITED_OPS is set
+ 
+       else if ((unit.ch == '+') && !syntax.get(RESyntax.RE_LIMITED_OPS) && (!syntax.get(RESyntax.RE_BK_PLUS_QM) ^ unit.bk)) {
+ 	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);
+ 	if (currentToken.getMinimumLength() == 0)
+ 	  throw new REException(getLocalizedMessage("repeat.empty.token"),REException.REG_BADRPT,index);
+ 	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)) {
+ 	if (currentToken == null) throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
+ 
+ 	// Check for stingy matching on RETokenRepeated
+ 	if (currentToken instanceof RETokenRepeated) {
+           if (syntax.get(RESyntax.RE_STINGY_OPS) && !((RETokenRepeated)currentToken).isStingy())
+             ((RETokenRepeated)currentToken).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);
+       }
+ 	
+       // BACKREFERENCE OPERATOR
+       //  \1 \2 ... \9
+       // not available if RE_NO_BK_REFS is set
+ 
+       else if (unit.bk && Character.isDigit(unit.ch) && !syntax.get(RESyntax.RE_NO_BK_REFS)) {
+ 	addToken(currentToken);
+ 	currentToken = new RETokenBackRef(subIndex,Character.digit(unit.ch,10),insens);
+       }
+ 
+       // 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);
+ 	}
+ 
+ 	// 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));
+ 	branches.trimToSize(); // compact the Vector
+ 	minimumLength = 0;
+ 	firstToken = lastToken = null;
+ 	addToken(new RETokenOneOf(subIndex,branches,false));
+     } 
+     else addToken(new RETokenEndSub(subIndex));
+ 
+   }
+ 
+   private static int getCharUnit(char[] input, int index, CharUnit unit) throws REException {
+     unit.ch = input[index++];
+     if (unit.bk = (unit.ch == '\\'))
+       if (index < input.length)
+ 	unit.ch = input[index++];
+       else throw new REException(getLocalizedMessage("ends.with.backslash"),REException.REG_ESCAPE,index);
+     return index;
+   }
+ 
+   /**
+    * 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;
+   }
+ 
+   /**
+    * 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) {
+       // 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 (match(input, mymatch)) {
+ 		  // Find longest match of them all to observe leftmost longest
+ 		  REMatch longest = mymatch;
+ 		  while ((mymatch = mymatch.next) != null) {
+ 		      if (mymatch.index > longest.index) {
+ 			  longest = mymatch;
+ 		      }
+ 		  }
+ 		  
+ 		  longest.end[0] = longest.index;
+ 		  longest.finish(input);
+ 		  return longest;
+ 	      }
+ 	  }
+ 	  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( ((eflags & REG_NO_INTERPOLATE) > 0) ?
+ 		   replace : m.substituteInto(replace) );
+     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( ((eflags & REG_NO_INTERPOLATE) > 0) ?
+ 		       replace : m.substituteInto(replace) );
+       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();
+   }
+   
+   /* Helper function for constructor */
+   private void addToken(REToken next) {
+     if (next == null) return;
+     minimumLength += next.getMinimumLength();
+     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);
+       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)) != 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-3.4.3/libjava/gnu/regexp/REException.java gcc-4.0.0/libjava/gnu/regexp/REException.java
*** gcc-3.4.3/libjava/gnu/regexp/REException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/REException.java	Tue Mar  9 19:14:23 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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-3.4.3/libjava/gnu/regexp/REFilterInputStream.java gcc-4.0.0/libjava/gnu/regexp/REFilterInputStream.java
*** gcc-3.4.3/libjava/gnu/regexp/REFilterInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/REFilterInputStream.java	Tue Mar  9 19:14:23 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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-3.4.3/libjava/gnu/regexp/REMatch.java gcc-4.0.0/libjava/gnu/regexp/REMatch.java
*** gcc-3.4.3/libjava/gnu/regexp/REMatch.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/REMatch.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,263 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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)
+ 
+     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) || (start[sub] == -1)) return "";
+ 	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>.
+      *
+      * @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);
+ 		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();
+     }
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/REMatchEnumeration.java gcc-4.0.0/libjava/gnu/regexp/REMatchEnumeration.java
*** gcc-3.4.3/libjava/gnu/regexp/REMatchEnumeration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/REMatchEnumeration.java	Tue Mar  9 19:14:23 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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-3.4.3/libjava/gnu/regexp/RESyntax.java gcc-4.0.0/libjava/gnu/regexp/RESyntax.java
*** gcc-3.4.3/libjava/gnu/regexp/RESyntax.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RESyntax.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,521 ----
+ /* gnu/regexp/RESyntax.java
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+ 
+   private static final int BIT_TOTAL                   = 25;
+ 
+   /**
+    * 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)              // (?#)
+ 	  .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
+ 	  .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-3.4.3/libjava/gnu/regexp/REToken.java gcc-4.0.0/libjava/gnu/regexp/REToken.java
*** gcc-3.4.3/libjava/gnu/regexp/REToken.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/REToken.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,86 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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 {
+ 
+   protected REToken next = null;
+   protected REToken uncle = null;
+   protected int subIndex;
+ 
+   protected REToken(int subIndex) {
+       this.subIndex = subIndex;
+   }
+ 
+   int getMinimumLength() {
+     return 0;
+   }
+ 
+   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-3.4.3/libjava/gnu/regexp/RETokenAny.java gcc-4.0.0/libjava/gnu/regexp/RETokenAny.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenAny.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenAny.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,73 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+   }
+ 
+     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-3.4.3/libjava/gnu/regexp/RETokenBackRef.java gcc-4.0.0/libjava/gnu/regexp/RETokenBackRef.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenBackRef.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenBackRef.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,72 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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) {
+ 	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++) {
+ 	    if (input.charAt(mymatch.index+i-b) != input.charAt(i)) {
+ 		return false;
+ 	    }
+ 	}
+ 	mymatch.index += e-b;
+ 	return next(input, mymatch);
+     }
+     
+     void dump(StringBuffer os) {
+ 	os.append('\\').append(num);
+     }
+ }
+ 
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/RETokenChar.java gcc-4.0.0/libjava/gnu/regexp/RETokenChar.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenChar.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenChar.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,91 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+   }
+   
+     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 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-3.4.3/libjava/gnu/regexp/RETokenEnd.java gcc-4.0.0/libjava/gnu/regexp/RETokenEnd.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenEnd.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenEnd.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,75 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+   }
+ 
+     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-3.4.3/libjava/gnu/regexp/RETokenEndSub.java gcc-4.0.0/libjava/gnu/regexp/RETokenEndSub.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenEndSub.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenEndSub.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,53 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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);
+     }
+     
+     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-3.4.3/libjava/gnu/regexp/RETokenLookAhead.java gcc-4.0.0/libjava/gnu/regexp/RETokenLookAhead.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenLookAhead.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenLookAhead.java	Sat Sep 25 19:04:34 2004
***************
*** 0 ****
--- 1,87 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+   }
+ 
+   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-3.4.3/libjava/gnu/regexp/RETokenOneOf.java gcc-4.0.0/libjava/gnu/regexp/RETokenOneOf.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenOneOf.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenOneOf.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,130 ----
+ /* gnu/regexp/RETokenOneOf.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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 RETokenOneOf extends REToken {
+   private Vector options;
+   private boolean negative;
+ 
+   // 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;
+   }
+ 
+   int getMinimumLength() {
+     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;
+   }
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+     if (negative && (input.charAt(mymatch.index) == CharIndexed.OUT_OF_BOUNDS)) 
+       return false;
+ 
+     REMatch newMatch = null;
+     REMatch last = null;
+     REToken tk;
+     boolean isMatch;
+     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
+ 	    if (negative) return false;
+ 
+ 	    if (next(input, tryMatch)) {
+ 		// Add tryMatch to list of possibilities.
+ 		if (last == null) {
+ 		    newMatch = tryMatch;
+ 		    last = tryMatch;
+ 		} else {
+ 		    last.next = tryMatch;
+ 		    last = tryMatch;
+ 		}
+ 	    } // next succeeds
+ 	} // is a match
+     } // try next option
+ 
+     if (newMatch != null) {
+ 	if (negative) {
+ 	    return false;
+ 	} else {
+ 	    // set contents of mymatch equal to newMatch
+ 
+ 	    // try each one that matched
+ 	    mymatch.assignFrom(newMatch);
+ 	    return true;
+ 	}
+     } else {
+ 	if (negative) {
+ 	    ++mymatch.index;
+ 	    return next(input, mymatch);
+ 	} else {
+ 	    return false;
+ 	}
+     }
+ 
+     // index+1 works for [^abc] lists, not for generic lookahead (--> index)
+   }
+ 
+   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-3.4.3/libjava/gnu/regexp/RETokenPOSIX.java gcc-4.0.0/libjava/gnu/regexp/RETokenPOSIX.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenPOSIX.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenPOSIX.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,144 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+     }
+ 
+     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-3.4.3/libjava/gnu/regexp/RETokenRange.java gcc-4.0.0/libjava/gnu/regexp/RETokenRange.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenRange.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenRange.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,69 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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);
+     this.lo = (insens = ins) ? Character.toLowerCase(lo) : lo;
+     this.hi = ins ? Character.toLowerCase(hi) : hi;
+   }
+ 
+   int getMinimumLength() {
+     return 1;
+   }
+ 
+     boolean match(CharIndexed input, REMatch mymatch) {
+ 	char c = input.charAt(mymatch.index);
+ 	if (c == CharIndexed.OUT_OF_BOUNDS) return false;
+ 	if (insens) c = Character.toLowerCase(c);
+ 	if ((c >= lo) && (c <= hi)) {
+ 	    ++mymatch.index;
+ 	    return next(input, mymatch);
+ 	}
+ 	return false;
+     }
+     
+   void dump(StringBuffer os) {
+     os.append(lo).append('-').append(hi);
+   }
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/regexp/RETokenRepeated.java gcc-4.0.0/libjava/gnu/regexp/RETokenRepeated.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenRepeated.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenRepeated.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,227 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+     
+     RETokenRepeated(int subIndex, REToken token, int min, int max) {
+ 	super(subIndex);
+ 	this.token = token;
+ 	this.min = min;
+ 	this.max = max;
+     }
+ 
+     /** Sets the minimal matching mode to true. */
+     void makeStingy() {
+ 	stingy = true;
+     }
+     
+     /** Queries if this token has minimal matching enabled. */
+     boolean isStingy() {
+ 	return stingy;
+     }
+     
+     /**
+      * 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());
+     }
+ 
+     // 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) {
+ 	// number of times we've matched so far
+ 	int numRepeats = 0; 
+ 	
+ 	// Possible positions for the next repeat to match at
+ 	REMatch newMatch = mymatch;
+ 	REMatch last = null;
+ 	REMatch current;
+ 
+ 	// Add the '0-repeats' index
+ 	// positions.elementAt(z) == position [] in input after <<z>> matches
+ 	Vector positions = new Vector();
+ 	positions.addElement(newMatch);
+ 	
+ 	// Declare variables used in loop
+ 	REMatch doables;
+ 	REMatch doablesLast;
+ 	REMatch recurrent;
+ 
+ 	do {
+ 	    // Check for stingy match for each possibility.
+ 	    if (stingy && (numRepeats >= min)) {
+ 		REMatch result = matchRest(input, newMatch);
+ 		if (result != null) {
+ 		    mymatch.assignFrom(result);
+ 		    return true;
+ 		}
+ 	    }
+ 
+ 	    doables = null;
+ 	    doablesLast = null;
+ 
+ 	    // try next repeat at all possible positions
+ 	    for (current = newMatch; current != null; current = current.next) {
+ 		recurrent = (REMatch) current.clone();
+ 		if (token.match(input, recurrent)) {
+ 		    // add all items in current to doables array
+ 		    if (doables == null) {
+ 			doables = recurrent;
+ 			doablesLast = recurrent;
+ 		    } else {
+ 			// Order these from longest to shortest
+ 			// Start by assuming longest (more repeats)
+ 			doablesLast.next = recurrent;
+ 		    }
+ 		    // Find new doablesLast
+ 		    while (doablesLast.next != null) {
+ 			doablesLast = doablesLast.next;
+ 		    }
+ 		}
+ 	    }
+ 	    // if none of the possibilities worked out, break out of do/while
+ 	    if (doables == null) break;
+ 	    
+ 	    // reassign where the next repeat can match
+ 	    newMatch = doables;
+ 	    
+ 	    // increment how many repeats we've successfully found
+ 	    ++numRepeats;
+ 	    
+ 	    positions.addElement(newMatch);
+ 	} while (numRepeats < max);
+ 	
+ 	// If there aren't enough repeats, then fail
+ 	if (numRepeats < min) return false;
+ 	
+ 	// We're greedy, but ease off until a true match is found 
+ 	int posIndex = positions.size();
+ 	
+ 	// 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 allResults = null;
+ 	REMatch allResultsLast = null;
+ 
+ 	REMatch results = null;
+ 	while (--posIndex >= min) {
+ 	    newMatch = (REMatch) positions.elementAt(posIndex);
+ 	    results = matchRest(input, newMatch);
+ 	    if (results != null) {
+ 		if (allResults == null) {
+ 		    allResults = results;
+ 		    allResultsLast = results;
+ 		} else {
+ 		    // Order these from longest to shortest
+ 		    // Start by assuming longest (more repeats)
+ 		    allResultsLast.next = results;
+ 		}
+ 		// Find new doablesLast
+ 		while (allResultsLast.next != null) {
+ 		    allResultsLast = allResultsLast.next;
+ 		}
+ 	    }
+ 	    // else did not match rest of the tokens, try again on smaller sample
+ 	}
+ 	if (allResults != null) {
+ 	    mymatch.assignFrom(allResults); // 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 doneIndex = null;
+ 	REMatch doneIndexLast = null;
+ 	// 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
+ 		if (doneIndex == null) {
+ 		    doneIndex = single;
+ 		    doneIndexLast = single;
+ 		} else {
+ 		    doneIndexLast.next = single;
+ 		}
+ 		// Find new doneIndexLast
+ 		while (doneIndexLast.next != null) {
+ 		    doneIndexLast = doneIndexLast.next;
+ 		}
+ 	    }
+ 	}
+ 	return doneIndex;
+     }
+ 
+     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-3.4.3/libjava/gnu/regexp/RETokenStart.java gcc-4.0.0/libjava/gnu/regexp/RETokenStart.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenStart.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenStart.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,87 ----
+ /*  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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+     }
+     
+     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-3.4.3/libjava/gnu/regexp/RETokenWordBoundary.java gcc-4.0.0/libjava/gnu/regexp/RETokenWordBoundary.java
*** gcc-3.4.3/libjava/gnu/regexp/RETokenWordBoundary.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/RETokenWordBoundary.java	Tue Mar  9 19:14:23 2004
***************
*** 0 ****
--- 1,104 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+     }
+     
+     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-3.4.3/libjava/gnu/regexp/UncheckedRE.java gcc-4.0.0/libjava/gnu/regexp/UncheckedRE.java
*** gcc-3.4.3/libjava/gnu/regexp/UncheckedRE.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/regexp/UncheckedRE.java	Tue Mar  9 19:14:23 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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-3.4.3/libjava/gnu/xml/aelfred2/ContentHandler2.java gcc-4.0.0/libjava/gnu/xml/aelfred2/ContentHandler2.java
*** gcc-3.4.3/libjava/gnu/xml/aelfred2/ContentHandler2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/aelfred2/ContentHandler2.java	Wed Feb  2 00:42:07 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/aelfred2/JAXPFactory.java gcc-4.0.0/libjava/gnu/xml/aelfred2/JAXPFactory.java
*** gcc-3.4.3/libjava/gnu/xml/aelfred2/JAXPFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/aelfred2/JAXPFactory.java	Tue Mar 29 20:13:49 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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, new Boolean(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-3.4.3/libjava/gnu/xml/aelfred2/SAXDriver.java gcc-4.0.0/libjava/gnu/xml/aelfred2/SAXDriver.java
*** gcc-3.4.3/libjava/gnu/xml/aelfred2/SAXDriver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/aelfred2/SAXDriver.java	Tue Mar 29 20:13:49 2005
***************
*** 0 ****
--- 1,1622 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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(), false));
+         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-3.4.3/libjava/gnu/xml/aelfred2/XmlParser.java gcc-4.0.0/libjava/gnu/xml/aelfred2/XmlParser.java
*** gcc-3.4.3/libjava/gnu/xml/aelfred2/XmlParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/aelfred2/XmlParser.java	Tue Mar 29 20:13:49 2005
***************
*** 0 ****
--- 1,5835 ----
+ /* XmlParser.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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.equals("CDATA") || type == null)
+           {
+             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++;
+                   }
+               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 an 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.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-3.4.3/libjava/gnu/xml/aelfred2/XmlReader.java gcc-4.0.0/libjava/gnu/xml/aelfred2/XmlReader.java
*** gcc-3.4.3/libjava/gnu/xml/aelfred2/XmlReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/aelfred2/XmlReader.java	Tue Mar 29 20:13:49 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/aelfred2/package.html gcc-4.0.0/libjava/gnu/xml/aelfred2/package.html
*** gcc-3.4.3/libjava/gnu/xml/aelfred2/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/aelfred2/package.html	Wed Feb  2 00:42:07 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-3.4.3/libjava/gnu/xml/dom/Consumer.java gcc-4.0.0/libjava/gnu/xml/dom/Consumer.java
*** gcc-3.4.3/libjava/gnu/xml/dom/Consumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/Consumer.java	Thu Feb 17 18:26:31 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DTDAttributeTypeInfo.java gcc-4.0.0/libjava/gnu/xml/dom/DTDAttributeTypeInfo.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DTDAttributeTypeInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DTDAttributeTypeInfo.java	Wed Feb  2 00:42:07 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DTDElementTypeInfo.java gcc-4.0.0/libjava/gnu/xml/dom/DTDElementTypeInfo.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DTDElementTypeInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DTDElementTypeInfo.java	Wed Feb  2 00:42:07 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomAttr.java gcc-4.0.0/libjava/gnu/xml/dom/DomAttr.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomAttr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomAttr.java	Wed Feb 16 19:25:02 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomCDATASection.java gcc-4.0.0/libjava/gnu/xml/dom/DomCDATASection.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomCDATASection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomCDATASection.java	Wed Feb 16 19:25:03 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomCharacterData.java gcc-4.0.0/libjava/gnu/xml/dom/DomCharacterData.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomCharacterData.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomCharacterData.java	Thu Feb 17 18:26:31 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomComment.java gcc-4.0.0/libjava/gnu/xml/dom/DomComment.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomComment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomComment.java	Wed Feb  2 00:42:07 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomDOMException.java gcc-4.0.0/libjava/gnu/xml/dom/DomDOMException.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomDOMException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomDOMException.java	Wed Feb 16 19:25:03 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomDoctype.java gcc-4.0.0/libjava/gnu/xml/dom/DomDoctype.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomDoctype.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomDoctype.java	Wed Feb 16 19:25:03 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomDocument.java gcc-4.0.0/libjava/gnu/xml/dom/DomDocument.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomDocument.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomDocument.java	Thu Feb 17 18:26:31 2005
***************
*** 0 ****
--- 1,1387 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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)
+   {
+     DomDoctype doctype = (DomDoctype) getDoctype();
+     
+     if (doctype == null || !doctype.hasIds()
+         || id == null || id.length() == 0)
+       {
+         return 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;
+             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;
+                       }
+                   }
+               }
+           }
+         
+         // 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
+       {
+         element = new DomElement(this, null, name);
+       }
+     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
+       {
+         return new DomAttr(this, null, name);
+       }
+   }
+ 
+   /**
+    * <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)
+   {
+     switch (source.getNodeType())
+       {
+       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)
+       {
+         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;
+       }
+     return null;
+   }
+ 
+   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-3.4.3/libjava/gnu/xml/dom/DomDocumentBuilder.java gcc-4.0.0/libjava/gnu/xml/dom/DomDocumentBuilder.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomDocumentBuilder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomDocumentBuilder.java	Thu Feb 17 18:26:31 2005
***************
*** 0 ****
--- 1,159 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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();
+     InputStream in = is.getByteStream();
+     if (in != null)
+       {
+         input.setByteStream(in);
+       }
+     else
+       {
+         input.setCharacterStream(is.getCharacterStream());
+       }
+     input.setPublicId(is.getPublicId());
+     input.setSystemId(is.getSystemId());
+     input.setEncoding(is.getEncoding());
+     return parser.parse(input);
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/dom/DomDocumentBuilderFactory.java gcc-4.0.0/libjava/gnu/xml/dom/DomDocumentBuilderFactory.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomDocumentBuilderFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomDocumentBuilderFactory.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomDocumentConfiguration.java gcc-4.0.0/libjava/gnu/xml/dom/DomDocumentConfiguration.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomDocumentConfiguration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomDocumentConfiguration.java	Wed Feb 16 19:25:03 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomDocumentFragment.java gcc-4.0.0/libjava/gnu/xml/dom/DomDocumentFragment.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomDocumentFragment.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomDocumentFragment.java	Wed Feb 16 19:25:03 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomElement.java gcc-4.0.0/libjava/gnu/xml/dom/DomElement.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomElement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomElement.java	Wed Feb 16 19:25:03 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomEntity.java gcc-4.0.0/libjava/gnu/xml/dom/DomEntity.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomEntity.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomEntity.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomEntityReference.java gcc-4.0.0/libjava/gnu/xml/dom/DomEntityReference.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomEntityReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomEntityReference.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomEvent.java gcc-4.0.0/libjava/gnu/xml/dom/DomEvent.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomEvent.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomExtern.java gcc-4.0.0/libjava/gnu/xml/dom/DomExtern.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomExtern.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomExtern.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomImpl.java gcc-4.0.0/libjava/gnu/xml/dom/DomImpl.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomImpl.java	Wed Feb 16 19:25:03 2005
***************
*** 0 ****
--- 1,261 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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));
+       }
+ 
+     // 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 = new DomDocument(this);
+     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;
+   }
+ 
+   // DOM Level 3
+   
+   public Object getFeature(String feature, String version)
+   {
+     if (hasFeature(feature, version))
+       {
+         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-3.4.3/libjava/gnu/xml/dom/DomIterator.java gcc-4.0.0/libjava/gnu/xml/dom/DomIterator.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomIterator.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomNSResolverContext.java gcc-4.0.0/libjava/gnu/xml/dom/DomNSResolverContext.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomNSResolverContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomNSResolverContext.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomNamedNodeMap.java gcc-4.0.0/libjava/gnu/xml/dom/DomNamedNodeMap.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomNamedNodeMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomNamedNodeMap.java	Wed Feb 16 19:25:03 2005
***************
*** 0 ****
--- 1,417 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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-3.4.3/libjava/gnu/xml/dom/DomNode.java gcc-4.0.0/libjava/gnu/xml/dom/DomNode.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomNode.java	Tue Mar 29 20:13:49 2005
***************
*** 0 ****
--- 1,2189 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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()
+     {
+       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) &&
+           getLocalName().equals(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-3.4.3/libjava/gnu/xml/dom/DomNodeIterator.java gcc-4.0.0/libjava/gnu/xml/dom/DomNodeIterator.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomNodeIterator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomNodeIterator.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomNotation.java gcc-4.0.0/libjava/gnu/xml/dom/DomNotation.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomNotation.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomNotation.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomNsNode.java gcc-4.0.0/libjava/gnu/xml/dom/DomNsNode.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomNsNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomNsNode.java	Wed Feb 16 19:25:03 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+   private 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-3.4.3/libjava/gnu/xml/dom/DomProcessingInstruction.java gcc-4.0.0/libjava/gnu/xml/dom/DomProcessingInstruction.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomProcessingInstruction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomProcessingInstruction.java	Wed Feb 16 19:25:03 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomText.java gcc-4.0.0/libjava/gnu/xml/dom/DomText.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomText.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomText.java	Wed Feb 16 19:25:03 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomXPathExpression.java gcc-4.0.0/libjava/gnu/xml/dom/DomXPathExpression.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomXPathExpression.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomXPathExpression.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomXPathNSResolver.java gcc-4.0.0/libjava/gnu/xml/dom/DomXPathNSResolver.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomXPathNSResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomXPathNSResolver.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/DomXPathResult.java gcc-4.0.0/libjava/gnu/xml/dom/DomXPathResult.java
*** gcc-3.4.3/libjava/gnu/xml/dom/DomXPathResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/DomXPathResult.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ImplementationList.java gcc-4.0.0/libjava/gnu/xml/dom/ImplementationList.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ImplementationList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ImplementationList.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ImplementationSource.java gcc-4.0.0/libjava/gnu/xml/dom/ImplementationSource.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ImplementationSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ImplementationSource.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/JAXPFactory.java gcc-4.0.0/libjava/gnu/xml/dom/JAXPFactory.java
*** gcc-3.4.3/libjava/gnu/xml/dom/JAXPFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/JAXPFactory.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ls/DomLSException.java gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSException.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ls/DomLSException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSException.java	Wed Feb 16 19:25:04 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ls/DomLSInput.java gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSInput.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ls/DomLSInput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSInput.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ls/DomLSOutput.java gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSOutput.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ls/DomLSOutput.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSOutput.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ls/DomLSParser.java gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSParser.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ls/DomLSParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSParser.java	Wed Feb 16 19:25:04 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ls/DomLSSerializer.java gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSSerializer.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ls/DomLSSerializer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ls/DomLSSerializer.java	Wed Feb 16 19:25:04 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ls/FilteredSAXEventSink.java gcc-4.0.0/libjava/gnu/xml/dom/ls/FilteredSAXEventSink.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ls/FilteredSAXEventSink.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ls/FilteredSAXEventSink.java	Wed Feb  2 00:42:08 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ls/ReaderInputStream.java gcc-4.0.0/libjava/gnu/xml/dom/ls/ReaderInputStream.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ls/ReaderInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ls/ReaderInputStream.java	Wed Feb  2 00:42:09 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/ls/SAXEventSink.java gcc-4.0.0/libjava/gnu/xml/dom/ls/SAXEventSink.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ls/SAXEventSink.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ls/SAXEventSink.java	Thu Mar 10 19:42:47 2005
***************
*** 0 ****
--- 1,540 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+       }
+     // 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;
+       }
+     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-3.4.3/libjava/gnu/xml/dom/ls/WriterOutputStream.java gcc-4.0.0/libjava/gnu/xml/dom/ls/WriterOutputStream.java
*** gcc-3.4.3/libjava/gnu/xml/dom/ls/WriterOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/ls/WriterOutputStream.java	Wed Feb  2 00:42:09 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/dom/package.html gcc-4.0.0/libjava/gnu/xml/dom/package.html
*** gcc-3.4.3/libjava/gnu/xml/dom/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/dom/package.html	Wed Feb  2 00:42:08 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-3.4.3/libjava/gnu/xml/pipeline/CallFilter.java gcc-4.0.0/libjava/gnu/xml/pipeline/CallFilter.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/CallFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/CallFilter.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/DomConsumer.java gcc-4.0.0/libjava/gnu/xml/pipeline/DomConsumer.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/DomConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/DomConsumer.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/EventConsumer.java gcc-4.0.0/libjava/gnu/xml/pipeline/EventConsumer.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/EventConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/EventConsumer.java	Wed Feb  2 00:42:09 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/EventFilter.java gcc-4.0.0/libjava/gnu/xml/pipeline/EventFilter.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/EventFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/EventFilter.java	Wed Feb  2 00:42:09 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/LinkFilter.java gcc-4.0.0/libjava/gnu/xml/pipeline/LinkFilter.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/LinkFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/LinkFilter.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/NSFilter.java gcc-4.0.0/libjava/gnu/xml/pipeline/NSFilter.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/NSFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/NSFilter.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/PipelineFactory.java gcc-4.0.0/libjava/gnu/xml/pipeline/PipelineFactory.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/PipelineFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/PipelineFactory.java	Wed Feb  2 00:42:09 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/TeeConsumer.java gcc-4.0.0/libjava/gnu/xml/pipeline/TeeConsumer.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/TeeConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/TeeConsumer.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/TextConsumer.java gcc-4.0.0/libjava/gnu/xml/pipeline/TextConsumer.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/TextConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/TextConsumer.java	Wed Feb  2 00:42:09 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/ValidationConsumer.java gcc-4.0.0/libjava/gnu/xml/pipeline/ValidationConsumer.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/ValidationConsumer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/ValidationConsumer.java	Sun Apr 17 02:34:47 2005
***************
*** 0 ****
--- 1,1929 ----
+ /* ValidationConsumer.java -- 
+    Copyright (C) 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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
+     //
+ 
+     // GCJ LOCAL: package private to work around gcj bug.
+     static 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-3.4.3/libjava/gnu/xml/pipeline/WellFormednessFilter.java gcc-4.0.0/libjava/gnu/xml/pipeline/WellFormednessFilter.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/WellFormednessFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/WellFormednessFilter.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/XIncludeFilter.java gcc-4.0.0/libjava/gnu/xml/pipeline/XIncludeFilter.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/XIncludeFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/XIncludeFilter.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/XsltFilter.java gcc-4.0.0/libjava/gnu/xml/pipeline/XsltFilter.java
*** gcc-3.4.3/libjava/gnu/xml/pipeline/XsltFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/XsltFilter.java	Thu Feb 17 18:26:32 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/pipeline/package.html gcc-4.0.0/libjava/gnu/xml/pipeline/package.html
*** gcc-3.4.3/libjava/gnu/xml/pipeline/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/pipeline/package.html	Wed Feb  2 00:42:09 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-3.4.3/libjava/gnu/xml/transform/AbstractNumberNode.java gcc-4.0.0/libjava/gnu/xml/transform/AbstractNumberNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/AbstractNumberNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/AbstractNumberNode.java	Wed Feb  2 00:42:09 2005
***************
*** 0 ****
--- 1,321 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 children, TemplateNode next,
+                      TemplateNode format, String lang,
+                      int letterValue, String groupingSeparator,
+                      int groupingSize)
+   {
+     super(children, next);
+     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 String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("format=");
+     buf.append(format);
+     buf.append(']');
+     return buf.toString();
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/ApplyImportsNode.java gcc-4.0.0/libjava/gnu/xml/transform/ApplyImportsNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ApplyImportsNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ApplyImportsNode.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,85 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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
+ {
+ 
+   ApplyImportsNode(TemplateNode children, TemplateNode next)
+   {
+     super(children, next);
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new ApplyImportsNode((children == null) ? null :
+                                 children.clone(stylesheet),
+                                 (next == null) ? null :
+                                 next.clone(stylesheet));
+   }
+   
+   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-3.4.3/libjava/gnu/xml/transform/ApplyTemplatesNode.java gcc-4.0.0/libjava/gnu/xml/transform/ApplyTemplatesNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ApplyTemplatesNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ApplyTemplatesNode.java	Wed Feb  2 00:42:09 2005
***************
*** 0 ****
--- 1,193 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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(TemplateNode children, TemplateNode next,
+                      Expr select, QName mode,
+                      List sortKeys, List withParams, boolean isDefault)
+   {
+     super(children, next);
+     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));
+       }
+     return new ApplyTemplatesNode((children == null) ? null :
+                                   children.clone(stylesheet),
+                                   (next == null) ? null :
+                                   next.clone(stylesheet),
+                                   select.clone(stylesheet),
+                                   mode, sortKeys2, withParams2, isDefault);
+   }
+ 
+   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)
+           {
+             // push the parameter context
+             stylesheet.bindings.push(false);
+             // set the parameters
+             for (Iterator i = withParams.iterator(); i.hasNext(); )
+               {
+                 WithParam p = (WithParam) i.next();
+                 Object value = p.getValue(stylesheet, mode, context, pos, len);
+                 stylesheet.bindings.set(p.name, value, false);
+               }
+           }
+         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)
+               {
+                 if (stylesheet.debug)
+                   {
+                     System.err.println("Applying " + t);
+                   }
+                 stylesheet.current = node;
+                 t.apply(stylesheet, effectiveMode, node, i + 1, l,
+                         parent, nextSibling);
+               }
+           }
+         if (withParams != null)
+           {
+             // pop the variable context
+             stylesheet.bindings.pop(false);
+           }
+       }
+     // apply-templates doesn't have processable children
+     if (next != null)
+       {
+         next.apply(stylesheet, mode,
+                    context, pos, len,
+                    parent, nextSibling);
+       }
+   }
+   
+   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-3.4.3/libjava/gnu/xml/transform/AttributeNode.java gcc-4.0.0/libjava/gnu/xml/transform/AttributeNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/AttributeNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/AttributeNode.java	Wed Feb  2 00:42:09 2005
***************
*** 0 ****
--- 1,246 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 children, TemplateNode next, TemplateNode name,
+                 TemplateNode namespace, Node source)
+   {
+     super(children, next);
+     this.name = name;
+     this.namespace = namespace;
+     this.source = source;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new AttributeNode((children == null) ? null :
+                              children.clone(stylesheet),
+                              (next == null) ? null : next.clone(stylesheet),
+                              name.clone(stylesheet),
+                              (namespace == null) ? null : 
+                              namespace.clone(stylesheet),
+                              source);
+   }
+ 
+   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 String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("name=");
+     buf.append(name);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/AttributeSet.java gcc-4.0.0/libjava/gnu/xml/transform/AttributeSet.java
*** gcc-3.4.3/libjava/gnu/xml/transform/AttributeSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/AttributeSet.java	Wed Feb  2 00:42:09 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/Bindings.java gcc-4.0.0/libjava/gnu/xml/transform/Bindings.java
*** gcc-3.4.3/libjava/gnu/xml/transform/Bindings.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/Bindings.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,242 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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
+ {
+ 
+   final Stylesheet stylesheet;
+ 
+   /**
+    * Global variables.
+    */
+   final LinkedList variables;
+ 
+   /**
+    * Parameter value stack.
+    */
+   final LinkedList parameters;
+ 
+   Bindings(Stylesheet stylesheet)
+   {
+     this.stylesheet = stylesheet;
+     variables = new LinkedList();
+     parameters = new LinkedList();
+     push(true);
+     push(false);
+   }
+ 
+   public Object clone()
+   {
+     try
+       {
+         return (Bindings) super.clone();
+       }
+     catch (CloneNotSupportedException e)
+       {
+         throw new Error(e.getMessage());
+       }
+   }
+ 
+   void push(boolean global)
+   {
+     if (global)
+       {
+         variables.addFirst(new HashMap());
+       }
+     else
+       {
+         parameters.addFirst(new HashMap());
+       }
+   }
+ 
+   void pop(boolean global)
+   {
+     if (global)
+       {
+         variables.removeFirst();
+       }
+     else
+       {
+         parameters.removeFirst();
+       }
+   }
+ 
+   public boolean containsKey(String name, boolean global)
+   {
+     Iterator i = global ? variables.iterator() : parameters.iterator();
+     while (i.hasNext())
+       {
+         Map ctx = (Map) i.next();
+         if (ctx.containsKey(name))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   public Object get(String name, Node context, int pos, int len)
+   {
+     //System.err.println("bindings.get: "+name);
+     //System.err.println("\t"+toString());
+     Object ret = null;
+     for (Iterator i = variables.iterator(); i.hasNext() && ret == null; )
+       {
+         Map vctx = (Map) i.next();
+         ret = vctx.get(name);
+       }
+     if (ret == null)
+       {
+         for (Iterator i = parameters.iterator(); i.hasNext() && ret == null; )
+           {
+             Map pctx = (Map) i.next();
+             ret = pctx.get(name);
+           }
+       }
+     /*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(String name, Object value, boolean global)
+   {
+     if (global)
+       {
+         Map context = (Map) variables.getFirst();
+         context.put(name, value);
+       }
+     else
+       {
+         Map context = (Map) parameters.getFirst();
+         context.put(name, value);
+       }
+   }
+ 
+   public Object resolveVariable(QName qName)
+   {
+     return get(qName.toString(), null, 1, 1);
+   }
+   
+   public String toString()
+   {
+     StringBuffer buf = new StringBuffer();
+     boolean next = false;
+     Collection seen = new HashSet();
+     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);
+               }
+           } 
+       }
+     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-3.4.3/libjava/gnu/xml/transform/CallTemplateNode.java gcc-4.0.0/libjava/gnu/xml/transform/CallTemplateNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/CallTemplateNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/CallTemplateNode.java	Wed Feb  2 00:42:09 2005
***************
*** 0 ****
--- 1,130 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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(TemplateNode children, TemplateNode next,
+                    QName name, List withParams)
+   {
+     super(children, next);
+     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));
+       }
+     return new CallTemplateNode((children == null) ? null :
+                                 children.clone(stylesheet),
+                                 (next == null) ? null :
+                                 next.clone(stylesheet),
+                                 name, withParams2);
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+                Node context, int pos, int len,
+                Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     if (withParams != null)
+       {
+         // push the parameter context
+         stylesheet.bindings.push(false);
+         // set the parameters
+         for (Iterator i = withParams.iterator(); i.hasNext(); )
+           {
+             WithParam p = (WithParam) i.next();
+             Object value = p.getValue(stylesheet, mode, context, pos, len);
+             stylesheet.bindings.set(p.name, value, false);
+           }
+       }
+     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(false);
+       }
+     // call-template doesn't have processable children
+     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-3.4.3/libjava/gnu/xml/transform/ChooseNode.java gcc-4.0.0/libjava/gnu/xml/transform/ChooseNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ChooseNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ChooseNode.java	Wed Feb  2 00:42:09 2005
***************
*** 0 ****
--- 1,93 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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
+ {
+ 
+   ChooseNode(TemplateNode children, TemplateNode next)
+   {
+     super(children, next);
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new ChooseNode((children == null) ? null :
+                           children.clone(stylesheet),
+                           (next == null) ? null :
+                           next.clone(stylesheet));
+   }
+ 
+   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-3.4.3/libjava/gnu/xml/transform/CommentNode.java gcc-4.0.0/libjava/gnu/xml/transform/CommentNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/CommentNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/CommentNode.java	Wed Feb  2 00:42:09 2005
***************
*** 0 ****
--- 1,115 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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
+ {
+ 
+   CommentNode(TemplateNode children, TemplateNode next)
+   {
+     super(children, next);
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new CommentNode((children == null) ? null :
+                            children.clone(stylesheet),
+                            (next == null) ? null :
+                            next.clone(stylesheet));
+   }
+ 
+   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-3.4.3/libjava/gnu/xml/transform/CopyNode.java gcc-4.0.0/libjava/gnu/xml/transform/CopyNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/CopyNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/CopyNode.java	Wed Feb  2 00:42:09 2005
***************
*** 0 ****
--- 1,179 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next, String uas)
+   {
+     super(children, next);
+     this.uas = uas;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new CopyNode((children == null) ? null :
+                         children.clone(stylesheet),
+                         (next == null) ? null :
+                         next.clone(stylesheet),
+                         uas);
+   }
+ 
+   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-3.4.3/libjava/gnu/xml/transform/CopyOfNode.java gcc-4.0.0/libjava/gnu/xml/transform/CopyOfNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/CopyOfNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/CopyOfNode.java	Wed Feb  2 00:42:09 2005
***************
*** 0 ****
--- 1,179 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next, Expr select)
+   {
+     super(children, next);
+     this.select = select;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new CopyOfNode((children == null) ? null :
+                           children.clone(stylesheet),
+                           (next == null) ? null :
+                           next.clone(stylesheet),
+                           select.clone(stylesheet));
+   }
+ 
+   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 String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("select=");
+     buf.append(select);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/CurrentFunction.java gcc-4.0.0/libjava/gnu/xml/transform/CurrentFunction.java
*** gcc-3.4.3/libjava/gnu/xml/transform/CurrentFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/CurrentFunction.java	Wed Feb  2 00:42:09 2005
***************
*** 0 ****
--- 1,98 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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 String toString()
+   {
+     return "current()";
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/DOMSourceLocator.java gcc-4.0.0/libjava/gnu/xml/transform/DOMSourceLocator.java
*** gcc-3.4.3/libjava/gnu/xml/transform/DOMSourceLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/DOMSourceLocator.java	Wed Feb  2 00:42:09 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/DocumentFunction.java gcc-4.0.0/libjava/gnu/xml/transform/DocumentFunction.java
*** gcc-3.4.3/libjava/gnu/xml/transform/DocumentFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/DocumentFunction.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,243 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/ElementAvailableFunction.java gcc-4.0.0/libjava/gnu/xml/transform/ElementAvailableFunction.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ElementAvailableFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ElementAvailableFunction.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,169 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.List;
+ import java.util.TreeSet;
+ 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;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/ElementNode.java gcc-4.0.0/libjava/gnu/xml/transform/ElementNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ElementNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ElementNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,279 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 children, TemplateNode next, TemplateNode name,
+               TemplateNode namespace, String uas, Node source)
+   {
+     super(children, next);
+     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)
+   {
+     return new ElementNode((children == null) ? null :
+                            children.clone(stylesheet),
+                            (next == null) ? null :
+                            next.clone(stylesheet),
+                            name.clone(stylesheet),
+                            (namespace == null) ? null :
+                            namespace.clone(stylesheet),
+                            uas, source);
+   }
+ 
+   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 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-3.4.3/libjava/gnu/xml/transform/ErrorListenerErrorHandler.java gcc-4.0.0/libjava/gnu/xml/transform/ErrorListenerErrorHandler.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ErrorListenerErrorHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ErrorListenerErrorHandler.java	Wed Feb  2 00:42:10 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/ForEachNode.java gcc-4.0.0/libjava/gnu/xml/transform/ForEachNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ForEachNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ForEachNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,149 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next, Expr select,
+               List sortKeys)
+   {
+     super(children, next);
+     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));
+       }
+     return new ForEachNode((children == null) ? null :
+                            children.clone(stylesheet),
+                            (next == null) ? null :
+                            next.clone(stylesheet),
+                            select.clone(stylesheet),
+                            sortKeys2);
+   }
+ 
+   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 String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("select=");
+     buf.append(select);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/FormatNumberFunction.java gcc-4.0.0/libjava/gnu/xml/transform/FormatNumberFunction.java
*** gcc-3.4.3/libjava/gnu/xml/transform/FormatNumberFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/FormatNumberFunction.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,132 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.List;
+ 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;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/FunctionAvailableFunction.java gcc-4.0.0/libjava/gnu/xml/transform/FunctionAvailableFunction.java
*** gcc-3.4.3/libjava/gnu/xml/transform/FunctionAvailableFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/FunctionAvailableFunction.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,175 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.List;
+ import java.util.TreeSet;
+ 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>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;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/GenerateIdFunction.java gcc-4.0.0/libjava/gnu/xml/transform/GenerateIdFunction.java
*** gcc-3.4.3/libjava/gnu/xml/transform/GenerateIdFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/GenerateIdFunction.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,126 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.List;
+ 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;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/IfNode.java gcc-4.0.0/libjava/gnu/xml/transform/IfNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/IfNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/IfNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,107 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next, Expr test)
+   {
+     super(children, next);
+     this.test = test;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new IfNode((children == null) ? null :
+                       children.clone(stylesheet),
+                       (next == null) ? null :
+                       next.clone(stylesheet),
+                       test.clone(stylesheet));
+   }
+ 
+   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 String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("test=");
+     buf.append(test);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/Key.java gcc-4.0.0/libjava/gnu/xml/transform/Key.java
*** gcc-3.4.3/libjava/gnu/xml/transform/Key.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/Key.java	Wed Feb  2 00:42:10 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/KeyFunction.java gcc-4.0.0/libjava/gnu/xml/transform/KeyFunction.java
*** gcc-3.4.3/libjava/gnu/xml/transform/KeyFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/KeyFunction.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,216 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/LiteralNode.java gcc-4.0.0/libjava/gnu/xml/transform/LiteralNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/LiteralNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/LiteralNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,225 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next, Node source)
+   {
+     super(children, next);
+     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)
+   {
+     return new LiteralNode((children == null) ? null :
+                            children.clone(stylesheet),
+                            (next == null) ? null :
+                            next.clone(stylesheet),
+                            source);
+   }
+ 
+   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--;
+                       }
+                   }
+               }
+             result = doc.adoptNode(result);
+             if (result == null)
+               {
+                 String msg = "Error adopting node to result tree";
+                 DOMSourceLocator l = new DOMSourceLocator(context);
+                 throw new TransformerException(msg, l);
+               }
+           }
+         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-3.4.3/libjava/gnu/xml/transform/MessageNode.java gcc-4.0.0/libjava/gnu/xml/transform/MessageNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/MessageNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/MessageNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,97 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next, boolean terminate)
+   {
+     super(children, next);
+     this.terminate = terminate;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new MessageNode((children == null) ? null :
+                            children.clone(stylesheet),
+                            (next == null) ? null :
+                            next.clone(stylesheet),
+                            terminate);
+   }
+ 
+   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-3.4.3/libjava/gnu/xml/transform/NodeNumberNode.java gcc-4.0.0/libjava/gnu/xml/transform/NodeNumberNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/NodeNumberNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/NodeNumberNode.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,258 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next,
+                  int level, Pattern count, Pattern from,
+                  TemplateNode format, String lang,
+                  int letterValue, String groupingSeparator, int groupingSize)
+   {
+     super(children, next, format, lang, letterValue, groupingSeparator,
+           groupingSize);
+     this.level = level;
+     this.count = count;
+     this.from = from;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new NodeNumberNode((children == null) ? null :
+                               children.clone(stylesheet),
+                               (next == null) ? null :
+                               next.clone(stylesheet),
+                               level,
+                               (count == null) ? null :
+                               (Pattern) count.clone(stylesheet),
+                               (from == null) ? from :
+                               (Pattern) from.clone(stylesheet),
+                               format, lang, letterValue,
+                               groupingSeparator, groupingSize);
+   }
+ 
+   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();
+             String nn = current.getLocalName();
+             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-3.4.3/libjava/gnu/xml/transform/NumberNode.java gcc-4.0.0/libjava/gnu/xml/transform/NumberNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/NumberNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/NumberNode.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,85 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next,
+              Expr value, TemplateNode format, String lang,
+              int letterValue, String groupingSeparator, int groupingSize)
+   {
+     super(children, next, format, lang, letterValue, groupingSeparator,
+           groupingSize);
+     this.value = value;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new NumberNode((children == null) ? null :
+                           children.clone(stylesheet),
+                           (next == null) ? null :
+                           next.clone(stylesheet),
+                           value.clone(stylesheet),
+                           format, lang, letterValue,
+                           groupingSeparator, groupingSize);
+   }
+ 
+   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-3.4.3/libjava/gnu/xml/transform/OtherwiseNode.java gcc-4.0.0/libjava/gnu/xml/transform/OtherwiseNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/OtherwiseNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/OtherwiseNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,93 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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
+ {
+ 
+   OtherwiseNode(TemplateNode children, TemplateNode next)
+   {
+     super(children, next);
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new OtherwiseNode((children == null) ? null :
+                              children.clone(stylesheet),
+                              (next == null) ? null :
+                              next.clone(stylesheet));
+   }
+ 
+   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-3.4.3/libjava/gnu/xml/transform/ParameterNode.java gcc-4.0.0/libjava/gnu/xml/transform/ParameterNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ParameterNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ParameterNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,156 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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
+ {
+ 
+   final String name;
+   final Expr select;
+   final boolean global;
+ 
+   ParameterNode(TemplateNode children, TemplateNode next,
+                 String name, Expr select, boolean global)
+   {
+     super(children, next);
+     this.name = name;
+     this.select = select;
+     this.global = global;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new ParameterNode((children == null) ? null :
+                              children.clone(stylesheet),
+                              (next == null) ? null :
+                              next.clone(stylesheet),
+                              name,
+                              select.clone(stylesheet),
+                              global);
+   }
+ 
+   void doApply(Stylesheet stylesheet, QName mode,
+              Node context, int pos, int len,
+              Node parent, Node nextSibling)
+     throws TransformerException
+   {
+     boolean apply = global || !stylesheet.bindings.containsKey(name, global);
+     if (apply)
+       {
+         // push the variable context
+         stylesheet.bindings.push(global);
+         // set the variable
+         Object value = getValue(stylesheet, mode, context, pos, len);
+         if (value != null)
+           {
+             stylesheet.bindings.set(name, value, global);
+           }
+       }
+     // 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);
+       }
+     if (apply)
+       {
+         // pop the variable context
+         stylesheet.bindings.pop(global);
+       }
+   }
+   
+   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 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);
+       }
+     if (global)
+       {
+         buf.append(",global");
+       }
+     buf.append(']');
+     return buf.toString();
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/ProcessingInstructionNode.java gcc-4.0.0/libjava/gnu/xml/transform/ProcessingInstructionNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ProcessingInstructionNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ProcessingInstructionNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,123 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next,
+                             String name)
+   {
+     super(children, next);
+     this.name = name;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new ProcessingInstructionNode((children == null) ? null :
+                                          children.clone(stylesheet),
+                                          (next == null) ? null :
+                                          next.clone(stylesheet),
+                                          name);
+   }
+ 
+   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-3.4.3/libjava/gnu/xml/transform/SAXSerializer.java gcc-4.0.0/libjava/gnu/xml/transform/SAXSerializer.java
*** gcc-3.4.3/libjava/gnu/xml/transform/SAXSerializer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/SAXSerializer.java	Wed Feb  2 00:42:10 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/SortKey.java gcc-4.0.0/libjava/gnu/xml/transform/SortKey.java
*** gcc-3.4.3/libjava/gnu/xml/transform/SortKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/SortKey.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,154 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/StreamSerializer.java gcc-4.0.0/libjava/gnu/xml/transform/StreamSerializer.java
*** gcc-3.4.3/libjava/gnu/xml/transform/StreamSerializer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/StreamSerializer.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,632 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.util.Collection;
+ import java.util.Collections;
+ import java.util.HashMap;
+ 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; // =
+ 
+   protected String encoding;
+   boolean compatibilityMode;
+   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();
+     compatibilityMode = true;
+     if (encoding.length() > 3)
+       {
+         String p = encoding.substring(0, 3);
+         if (p.equalsIgnoreCase("UTF") ||
+             p.equalsIgnoreCase("UCS"))
+           {
+             compatibilityMode = false;
+           }
+       }
+     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(final Node node, final OutputStream out,
+                  boolean convertToCdata)
+     throws IOException
+   {
+     if (out == null)
+       {
+         throw new NullPointerException("no output stream");
+       }
+     String value, prefix;
+     Node children;
+     Node next = node.getNextSibling();
+     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;
+               }
+             define(nsuri, node.getLocalName());
+           }
+         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))
+           {
+             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 &&
+                     "head".equalsIgnoreCase(ctx.getLocalName()))
+                   {
+                     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 &&
+                     "meta".equalsIgnoreCase(ctx.getLocalName()))
+                   {
+                     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);
+         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);
+       }
+     if (next != null)
+       {
+         serialize(next, out, convertToCdata);
+       }
+   }
+ 
+   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 UnsupportedEncodingException
+   {
+     if (compatibilityMode)
+       {
+         int len = text.length();
+         StringBuffer buf = null;
+         for (int i = 0; i < len; i++)
+           {
+             char c = text.charAt(i);
+             if (c >= 127)
+               {
+                 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);
+               }
+           }
+         if (buf != null)
+           {
+             text = buf.toString();
+           }
+       }
+     return text.getBytes(encoding);
+   }
+ 
+   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));
+               }
+             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());
+       }
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/Stylesheet.java gcc-4.0.0/libjava/gnu/xml/transform/Stylesheet.java
*** gcc-3.4.3/libjava/gnu/xml/transform/Stylesheet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/Stylesheet.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,1728 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.
+    */
+   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(null, null,
+                              new Selector(Selector.CHILD, tests),
+                              null, null, null, true);
+     builtInTextTemplate =
+       new ValueOfNode(null, null,
+                       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
+   {
+     for (Iterator i = variables.iterator(); i.hasNext(); )
+       {
+         ParameterNode var = (ParameterNode) i.next();
+         bindings.set(var.name,
+                      var.getValue(this, null, context, 1, 1),
+                      var.global);
+       }
+   }
+ 
+   // -- 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();
+   }
+   
+   // -- Template selection --
+   
+   TemplateNode getTemplate(QName mode, Node context, boolean applyImports)
+     throws TransformerException
+   {
+     //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
+         //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;
+         //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);
+     return new Template(this, name, match, parse(node.getFirstChild()),
+                         precedence, priority, mode);
+   }
+ 
+   /**
+    * output
+    */
+   final void parseOutput(Node node, NamedNodeMap attrs)
+     throws TransformerConfigurationException
+   {
+     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
+   {
+     if (node == null)
+       {
+         return;
+       }
+     current = node;
+     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);
+                 return;
+               }
+             else if ("template".equals(name))
+               {
+                 templates.addFirst(parseTemplate(node, attrs));
+               }
+             else if ("param".equals(name) ||
+                      "variable".equals(name))
+               {
+                 boolean global = "variable".equals(name);
+                 TemplateNode content = parse(node.getFirstChild());
+                 String paramName = getRequiredAttribute(attrs, "name", node);
+                 String select = getAttribute(attrs, "select");
+                 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);
+                     variables.add(new ParameterNode(null, null,
+                                                     paramName,
+                                                     expr, global));
+                   }
+                 else
+                   {
+                     variables.add(new ParameterNode(content, null,
+                                                     paramName,
+                                                     null, global));
+                   }
+                 bindings.set(paramName, content, global);
+               }
+             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);
+               }
+             parse(node.getNextSibling(), false);
+           }
+         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
+             parse(node.getNextSibling(), false);
+           }
+       }
+     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 QName getQName(String name)
+   {
+     QName qName = QName.valueOf(name);
+     String prefix = qName.getPrefix();
+     String uri = qName.getNamespaceURI();
+     if (prefix != null && (uri == null || uri.length() == 0))
+       {
+         uri = getNamespaceURI(prefix);
+         String localName = qName.getLocalPart();
+         qName = new QName(uri, localName, prefix);
+       }
+     return qName;
+   }
+ 
+   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);
+             ret = new ValueOfNode(null, ret, select, false);
+           }
+         else
+           {
+             // Verbatim text
+             ret = new LiteralNode(null, ret, doc.createTextNode(token));
+           }
+       }
+     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, Node children, Node next)
+     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()";
+       }
+     List sortKeys = parseSortKeys(children);
+     List withParams = parseWithParams(children);
+     Expr select = (Expr) xpath.compile(s);
+     return new ApplyTemplatesNode(null, parse(next),
+                                   select, mode,
+                                   sortKeys, withParams, false);
+   }
+ 
+   /**
+    * call-template
+    */
+   final TemplateNode parseCallTemplate(Node node, Node children, Node next)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String n = getRequiredAttribute(attrs, "name", node);
+     QName name = getQName(n);
+     List withParams = parseWithParams(children);
+     return new CallTemplateNode(null, parse(next), name,
+                                 withParams);
+   }
+   
+   /**
+    * value-of
+    */
+   final TemplateNode parseValueOf(Node node, Node children, Node next)
+     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(null, parse(next), select, d);
+   }
+   
+   /**
+    * for-each
+    */
+   final TemplateNode parseForEach(Node node, Node children, Node next)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String s = getRequiredAttribute(attrs, "select", node);
+     List sortKeys = parseSortKeys(children);
+     Expr select = (Expr) xpath.compile(s);
+     return new ForEachNode(parse(children), parse(next), select, sortKeys);
+   }
+   
+   /**
+    * if
+    */
+   final TemplateNode parseIf(Node node, Node children, Node next)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String t = getRequiredAttribute(attrs, "test", node);
+     Expr test = (Expr) xpath.compile(t);
+     return new IfNode(parse(children), parse(next), test);
+   }
+   
+   /**
+    * when
+    */
+   final TemplateNode parseWhen(Node node, Node children, Node next)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String t = getRequiredAttribute(attrs, "test", node);
+     Expr test = (Expr) xpath.compile(t);
+     return new WhenNode(parse(children), parse(next), test);
+   }
+   
+   /**
+    * element
+    */
+   final TemplateNode parseElement(Node node, Node children, Node next)
+     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);
+     return new ElementNode(parse(children), parse(next), n, ns, uas, node);
+   }
+ 
+   /**
+    * attribute
+    */
+   final TemplateNode parseAttribute(Node node, Node children, Node next)
+     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);
+     return new AttributeNode(parse(children), parse(next), n, ns, node);
+   }
+   
+   /**
+    * text
+    */
+   final TemplateNode parseText(Node node, Node children, Node next)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String doe = getAttribute(attrs, "disable-output-escaping");
+     boolean d = "yes".equals(doe);
+     return new TextNode(parse(children), parse(next), d);
+   }
+   
+   /**
+    * copy
+    */
+   final TemplateNode parseCopy(Node node, Node children, Node next)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String uas = getAttribute(attrs, "use-attribute-sets");
+     return new CopyNode(parse(children), parse(next), uas);
+   }
+   
+   /**
+    * processing-instruction
+    */
+   final TemplateNode parseProcessingInstruction(Node node, Node children,
+                                                 Node next)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String name = getRequiredAttribute(attrs, "name", node);
+     return new ProcessingInstructionNode(parse(children),
+                                          parse(next), name);
+   }
+   
+   /**
+    * number
+    */
+   final TemplateNode parseNumber(Node node, Node children, Node next)
+     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;
+     if (v != null && v.length() > 0)
+       {
+         Expr value = (Expr) xpath.compile(v);
+         return new NumberNode(parse(children), parse(next),
+                               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);
+               }
+           }
+         return new NodeNumberNode(parse(children), parse(next),
+                                   level, count, from,
+                                   format, lang,
+                                   letterValue, gs, gz2);
+       }
+   }
+   
+   /**
+    * copy-of
+    */
+   final TemplateNode parseCopyOf(Node node, Node children, Node next)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String s = getRequiredAttribute(attrs, "select", node);
+     Expr select = (Expr) xpath.compile(s);
+     return new CopyOfNode(parse(children), parse(next), select);
+   }
+   
+   /**
+    * message
+    */
+   final TemplateNode parseMessage(Node node, Node children, Node next)
+     throws TransformerConfigurationException, XPathExpressionException
+   {
+     NamedNodeMap attrs = node.getAttributes();
+     String t = getAttribute(attrs, "terminate");
+     boolean terminate = "yes".equals(t);
+     return new MessageNode(parse(children), parse(next), terminate);
+   }
+   
+   /**
+    * Parse template-level elements.
+    */
+   final TemplateNode parse(Node node)
+     throws TransformerConfigurationException
+   {
+     if (node == null)
+       {
+         return null;
+       }
+     // Hack to associate the document function with its declaring node
+     current = node;
+     Node children = node.getFirstChild();
+     Node next = node.getNextSibling();
+     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, children, next);
+               }
+             else if ("call-template".equals(name))
+               {
+                 return parseCallTemplate(node, children, next);
+               }
+             else if ("value-of".equals(name))
+               {
+                 return parseValueOf(node, children, next);
+               }
+             else if ("for-each".equals(name))
+               {
+                 return parseForEach(node, children, next);
+               }
+             else if ("if".equals(name))
+               {
+                 return parseIf(node, children, next);
+               }
+             else if ("choose".equals(name))
+               {
+                 return new ChooseNode(parse(children), parse(next));
+               }
+             else if ("when".equals(name))
+               {
+                 return parseWhen(node, children, next);
+               }
+             else if ("otherwise".equals(name))
+               {
+                 return new OtherwiseNode(parse(children), parse(next));
+               }
+             else if ("element".equals(name))
+               {
+                 return parseElement(node, children, next);
+               }
+             else if ("attribute".equals(name))
+               {
+                 return parseAttribute(node, children, next);
+               }
+             else if ("text".equals(name))
+               {
+                 return parseText(node, children, next);
+               }
+             else if ("copy".equals(name))
+               {
+                 return parseCopy(node, children, next);
+               }
+             else if ("processing-instruction".equals(name))
+               {
+                 return parseProcessingInstruction(node, children, next);
+               }
+             else if ("comment".equals(name))
+               {
+                 return new CommentNode(parse(children), parse(next));
+               }
+             else if ("number".equals(name))
+               {
+                 return parseNumber(node, children, next);
+               }
+             else if ("param".equals(name) ||
+                      "variable".equals(name))
+               {
+                 boolean global = "variable".equals(name);
+                 NamedNodeMap attrs = node.getAttributes();
+                 TemplateNode content = parse(children);
+                 String paramName = getRequiredAttribute(attrs, "name", node);
+                 String select = getAttribute(attrs, "select");
+                 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);
+                     return new ParameterNode(null, parse(next),
+                                              paramName, expr, global);
+                   }
+                 else
+                   {
+                     return new ParameterNode(content, parse(next),
+                                              paramName, null, global);
+                   }
+               }
+             else if ("copy-of".equals(name))
+               {
+                 return parseCopyOf(node, children, next);
+               }
+             else if ("message".equals(name))
+               {
+                 return parseMessage(node, children, next);
+               }
+             else if ("apply-imports".equals(name))
+               {
+                 return new ApplyImportsNode(parse(children), parse(next));
+               }
+             else
+               {
+                 // xsl:fallback
+                 // Pass over any other XSLT nodes
+                 return parse(next);
+               }
+           }
+         String prefix = node.getPrefix();
+         if (extensionElementPrefixes.contains(prefix))
+           {
+             // Pass over extension elements
+             return parse(next);
+           }
+         switch (node.getNodeType())
+           {
+           case Node.TEXT_NODE:
+             // Determine whether to strip whitespace
+             Text text = (Text) node;
+             if (!isPreserved(text))
+               {
+                 // Strip
+                 text.getParentNode().removeChild(text);
+                 return parse(next);
+               }
+             break;
+           case Node.COMMENT_NODE:
+             // Ignore comments
+             return parse(next);
+           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
+                 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);
+                     child = new AttributeNode(grandchild, child, n, ns, attr);
+                   }
+                 String ename = node.getNodeName();
+                 TemplateNode n = parseAttributeValueTemplate(ename, node);
+                 TemplateNode ns = (namespaceUri == null) ? null :
+                   parseAttributeValueTemplate(namespaceUri, node);
+                 return new ElementNode(child, parse(next),
+                                        n, ns, useAttributeSets,
+                                        node);
+               }
+             // Otherwise fall through
+             break;
+           }
+       }
+     catch (XPathExpressionException e)
+       {
+         DOMSourceLocator l = new DOMSourceLocator(node);
+         throw new TransformerConfigurationException(e.getMessage(), l, e);
+       }
+     return new LiteralNode(parse(children), parse(next), node);
+   }
+ 
+   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());
+             String name = 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-3.4.3/libjava/gnu/xml/transform/SystemPropertyFunction.java gcc-4.0.0/libjava/gnu/xml/transform/SystemPropertyFunction.java
*** gcc-3.4.3/libjava/gnu/xml/transform/SystemPropertyFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/SystemPropertyFunction.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,128 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/Template.java gcc-4.0.0/libjava/gnu/xml/transform/Template.java
*** gcc-3.4.3/libjava/gnu/xml/transform/Template.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/Template.java	Thu Feb 17 18:26:33 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/TemplateNode.java gcc-4.0.0/libjava/gnu/xml/transform/TemplateNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/TemplateNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/TemplateNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,115 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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();
+ 
+   final TemplateNode children;
+   final TemplateNode next;
+ 
+   TemplateNode(TemplateNode children, TemplateNode next)
+   {
+     this.children = children;
+     this.next = 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());
+       }
+     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);
+ 
+   /**
+    * 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-3.4.3/libjava/gnu/xml/transform/TemplatesImpl.java gcc-4.0.0/libjava/gnu/xml/transform/TemplatesImpl.java
*** gcc-3.4.3/libjava/gnu/xml/transform/TemplatesImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/TemplatesImpl.java	Thu Feb 17 18:26:33 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/TextNode.java gcc-4.0.0/libjava/gnu/xml/transform/TextNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/TextNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/TextNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,116 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next,
+            boolean disableOutputEscaping)
+   {
+     super(children, next);
+     this.disableOutputEscaping = disableOutputEscaping;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new TextNode((children == null) ? null :
+                         children.clone(stylesheet),
+                         (next == null) ? null :
+                         next.clone(stylesheet),
+                         disableOutputEscaping);
+   }
+ 
+   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-3.4.3/libjava/gnu/xml/transform/TransformerFactoryImpl.java gcc-4.0.0/libjava/gnu/xml/transform/TransformerFactoryImpl.java
*** gcc-3.4.3/libjava/gnu/xml/transform/TransformerFactoryImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/TransformerFactoryImpl.java	Wed Feb  2 00:42:10 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/TransformerImpl.java gcc-4.0.0/libjava/gnu/xml/transform/TransformerImpl.java
*** gcc-3.4.3/libjava/gnu/xml/transform/TransformerImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/TransformerImpl.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,580 ----
+ /* TransformerImpl.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.Properties;
+ 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(false);
+       }
+   }
+ 
+   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);
+     // TODO cdata-section-elements
+     // TODO 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);
+       }
+     // 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) // CDATA sections ?
+       {
+         if (!stylesheet.isPreserved((Text) node))
+           {
+             node.getParentNode().removeChild(node);
+           }
+       }
+     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;
+     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();
+                 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());
+               }
+           }
+         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)
+               {
+                 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(name, value, false);
+       }
+   }
+ 
+   public Object getParameter(String name)
+   {
+     if (stylesheet != null)
+       {
+         return stylesheet.bindings.get(name, null, 1, 1);
+       }
+     return null;
+   }
+ 
+   public void clearParameters()
+   {
+     if (stylesheet != null)
+       {
+         stylesheet.bindings.pop(false);
+         stylesheet.bindings.push(false);
+       }
+   }
+ 
+   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;
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/TransformerOutputProperties.java gcc-4.0.0/libjava/gnu/xml/transform/TransformerOutputProperties.java
*** gcc-3.4.3/libjava/gnu/xml/transform/TransformerOutputProperties.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/TransformerOutputProperties.java	Wed Feb  2 00:42:10 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/URIResolverEntityResolver.java gcc-4.0.0/libjava/gnu/xml/transform/URIResolverEntityResolver.java
*** gcc-3.4.3/libjava/gnu/xml/transform/URIResolverEntityResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/URIResolverEntityResolver.java	Wed Feb  2 00:42:10 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/UnparsedEntityUriFunction.java gcc-4.0.0/libjava/gnu/xml/transform/UnparsedEntityUriFunction.java
*** gcc-3.4.3/libjava/gnu/xml/transform/UnparsedEntityUriFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/UnparsedEntityUriFunction.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,118 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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;
+   }
+ 
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/ValueOfNode.java gcc-4.0.0/libjava/gnu/xml/transform/ValueOfNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/ValueOfNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/ValueOfNode.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,126 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.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(TemplateNode children, TemplateNode next, Expr select,
+               boolean disableOutputEscaping)
+   {
+     super(children, next);
+     this.select = select;
+     this.disableOutputEscaping = disableOutputEscaping;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new ValueOfNode((children == null) ? null :
+                            children.clone(stylesheet),
+                            (next == null) ? null :
+                            next.clone(stylesheet),
+                            select.clone(stylesheet),
+                            disableOutputEscaping);
+   }
+ 
+   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);
+     String value = Expr._string(context, ret);
+     //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 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-3.4.3/libjava/gnu/xml/transform/WhenNode.java gcc-4.0.0/libjava/gnu/xml/transform/WhenNode.java
*** gcc-3.4.3/libjava/gnu/xml/transform/WhenNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/WhenNode.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,110 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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(TemplateNode children, TemplateNode next, Expr test)
+   {
+     super(children, next);
+     this.test = test;
+   }
+ 
+   TemplateNode clone(Stylesheet stylesheet)
+   {
+     return new WhenNode((children == null) ? null :
+                         children.clone(stylesheet),
+                         (next == null) ? null :
+                         next.clone(stylesheet),
+                         test.clone(stylesheet));
+   }
+ 
+   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 String toString()
+   {
+     StringBuffer buf = new StringBuffer(getClass().getName());
+     buf.append('[');
+     buf.append("test=");
+     buf.append(test);
+     buf.append(']');
+     return buf.toString();
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/WithParam.java gcc-4.0.0/libjava/gnu/xml/transform/WithParam.java
*** gcc-3.4.3/libjava/gnu/xml/transform/WithParam.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/WithParam.java	Wed Feb  2 00:42:10 2005
***************
*** 0 ****
--- 1,110 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 String name;
+   final Expr select;
+   final TemplateNode content;
+ 
+   WithParam(String name, Expr select)
+   {
+     this.name = name;
+     this.select = select;
+     content = null;
+   }
+ 
+   WithParam(String 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));
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/transform/XSLComparator.java gcc-4.0.0/libjava/gnu/xml/transform/XSLComparator.java
*** gcc-3.4.3/libjava/gnu/xml/transform/XSLComparator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/XSLComparator.java	Wed Feb  2 00:42:10 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/transform/XSLURIResolver.java gcc-4.0.0/libjava/gnu/xml/transform/XSLURIResolver.java
*** gcc-3.4.3/libjava/gnu/xml/transform/XSLURIResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/XSLURIResolver.java	Thu Feb 17 18:26:33 2005
***************
*** 0 ****
--- 1,269 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 && 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));
+               }
+           }
+         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);
+               }
+           }
+         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-3.4.3/libjava/gnu/xml/transform/package.html gcc-4.0.0/libjava/gnu/xml/transform/package.html
*** gcc-3.4.3/libjava/gnu/xml/transform/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/transform/package.html	Wed Feb  2 00:42:10 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-3.4.3/libjava/gnu/xml/util/DoParse.java gcc-4.0.0/libjava/gnu/xml/util/DoParse.java
*** gcc-3.4.3/libjava/gnu/xml/util/DoParse.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/util/DoParse.java	Thu Feb 17 18:26:33 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/util/DomParser.java gcc-4.0.0/libjava/gnu/xml/util/DomParser.java
*** gcc-3.4.3/libjava/gnu/xml/util/DomParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/util/DomParser.java	Wed Feb  2 00:42:11 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/util/Resolver.java gcc-4.0.0/libjava/gnu/xml/util/Resolver.java
*** gcc-3.4.3/libjava/gnu/xml/util/Resolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/util/Resolver.java	Thu Feb 17 18:26:33 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/util/SAXNullTransformerFactory.java gcc-4.0.0/libjava/gnu/xml/util/SAXNullTransformerFactory.java
*** gcc-3.4.3/libjava/gnu/xml/util/SAXNullTransformerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/util/SAXNullTransformerFactory.java	Wed Feb 16 19:25:05 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/util/XCat.java gcc-4.0.0/libjava/gnu/xml/util/XCat.java
*** gcc-3.4.3/libjava/gnu/xml/util/XCat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/util/XCat.java	Wed Feb  2 00:42:11 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/util/XHTMLWriter.java gcc-4.0.0/libjava/gnu/xml/util/XHTMLWriter.java
*** gcc-3.4.3/libjava/gnu/xml/util/XHTMLWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/util/XHTMLWriter.java	Wed Feb  2 00:42:11 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/util/XMLWriter.java gcc-4.0.0/libjava/gnu/xml/util/XMLWriter.java
*** gcc-3.4.3/libjava/gnu/xml/util/XMLWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/util/XMLWriter.java	Wed Feb  2 00:42:11 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/util/package.html gcc-4.0.0/libjava/gnu/xml/util/package.html
*** gcc-3.4.3/libjava/gnu/xml/util/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/util/package.html	Wed Feb  2 00:42:11 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-3.4.3/libjava/gnu/xml/xpath/AndExpr.java gcc-4.0.0/libjava/gnu/xml/xpath/AndExpr.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/AndExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/AndExpr.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,81 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 String toString()
+   {
+     return lhs + " and " + rhs;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/ArithmeticExpr.java gcc-4.0.0/libjava/gnu/xml/xpath/ArithmeticExpr.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/ArithmeticExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/ArithmeticExpr.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,148 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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)
+           {
+             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)
+           {
+             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 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-3.4.3/libjava/gnu/xml/xpath/BooleanFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/BooleanFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/BooleanFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/BooleanFunction.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,89 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "boolean(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/CeilingFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/CeilingFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/CeilingFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/CeilingFunction.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,83 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "ceiling(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/ConcatFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/ConcatFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/ConcatFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/ConcatFunction.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,100 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 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-3.4.3/libjava/gnu/xml/xpath/Constant.java gcc-4.0.0/libjava/gnu/xml/xpath/Constant.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Constant.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Constant.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,92 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 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-3.4.3/libjava/gnu/xml/xpath/ContainsFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/ContainsFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/ContainsFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/ContainsFunction.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,86 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "contains(" + arg1 + "," + arg2 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/CountFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/CountFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/CountFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/CountFunction.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,82 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "count(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/DocumentOrderComparator.java gcc-4.0.0/libjava/gnu/xml/xpath/DocumentOrderComparator.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/DocumentOrderComparator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/DocumentOrderComparator.java	Wed Feb  2 00:42:11 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/xpath/EqualityExpr.java gcc-4.0.0/libjava/gnu/xml/xpath/EqualityExpr.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/EqualityExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/EqualityExpr.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,258 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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;
+         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 false;
+       }
+     /* 
+      * 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 String toString()
+   {
+     if (invert)
+       {
+         return lhs + " != " + rhs;
+       }
+     else
+       {
+         return lhs + " = " + rhs;
+       }
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/Expr.java gcc-4.0.0/libjava/gnu/xml/xpath/Expr.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Expr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Expr.java	Thu Feb 17 18:26:34 2005
***************
*** 0 ****
--- 1,474 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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);
+   
+   /* -- 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-3.4.3/libjava/gnu/xml/xpath/FalseFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/FalseFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/FalseFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/FalseFunction.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,66 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 String toString()
+   {
+     return "false()";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/FloorFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/FloorFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/FloorFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/FloorFunction.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,83 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "floor(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/Function.java gcc-4.0.0/libjava/gnu/xml/xpath/Function.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Function.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Function.java	Wed Feb  2 00:42:11 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/xpath/FunctionCall.java gcc-4.0.0/libjava/gnu/xml/xpath/FunctionCall.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/FunctionCall.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/FunctionCall.java	Thu Feb 17 18:26:34 2005
***************
*** 0 ****
--- 1,150 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 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-3.4.3/libjava/gnu/xml/xpath/IdFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/IdFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/IdFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/IdFunction.java	Wed Feb  2 00:42:11 2005
***************
*** 0 ****
--- 1,96 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "id(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/LangFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/LangFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/LangFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/LangFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,110 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "lang(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/LastFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/LastFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/LastFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/LastFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,67 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 String toString()
+   {
+     return "last()";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/LocalNameFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/LocalNameFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/LocalNameFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/LocalNameFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,87 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return (arg == null) ? "local-name()" : "local-name(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/NameFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/NameFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/NameFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/NameFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,95 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return (arg == null) ? "name()" : "name(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/NameTest.java gcc-4.0.0/libjava/gnu/xml/xpath/NameTest.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/NameTest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/NameTest.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,131 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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();
+     if (!equal(uri, node.getNamespaceURI()))
+       {
+         return false;
+       }
+     if (anyLocalName)
+       {
+         return true;
+       }
+     String localName = qName.getLocalPart();
+     return (localName.equals(node.getLocalName()));
+   }
+ 
+   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 String toString ()
+   {
+     if (any)
+       {
+         return "*";
+       }
+     return qName.toString();
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/NamespaceTest.java gcc-4.0.0/libjava/gnu/xml/xpath/NamespaceTest.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/NamespaceTest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/NamespaceTest.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,118 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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();
+     return (localName.equals(node.getLocalName()));
+   }
+ 
+   public Test clone(Object context)
+   {
+     return new NamespaceTest(qName, anyLocalName, any);
+   }
+ 
+   public String toString ()
+   {
+     if (any)
+       {
+         return "*";
+       }
+     return qName.toString();
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/NamespaceUriFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/NamespaceUriFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/NamespaceUriFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/NamespaceUriFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,87 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return (arg == null) ? "namespace-uri()" : "namespace-uri(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/NegativeExpr.java gcc-4.0.0/libjava/gnu/xml/xpath/NegativeExpr.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/NegativeExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/NegativeExpr.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,75 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 String toString()
+   {
+     return "-" + expr;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/NodeTypeTest.java gcc-4.0.0/libjava/gnu/xml/xpath/NodeTypeTest.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/NodeTypeTest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/NodeTypeTest.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,130 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 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-3.4.3/libjava/gnu/xml/xpath/NormalizeSpaceFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/NormalizeSpaceFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/NormalizeSpaceFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/NormalizeSpaceFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,99 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return (arg == null) ? "normalize-space()" : "normalize-space(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/NotFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/NotFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/NotFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/NotFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,81 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "not(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/NumberFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/NumberFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/NumberFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/NumberFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,96 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "number(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/OrExpr.java gcc-4.0.0/libjava/gnu/xml/xpath/OrExpr.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/OrExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/OrExpr.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,81 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 String toString()
+   {
+     return lhs + " or " + rhs;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/ParenthesizedExpr.java gcc-4.0.0/libjava/gnu/xml/xpath/ParenthesizedExpr.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/ParenthesizedExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/ParenthesizedExpr.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,84 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "(" + expr + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/Path.java gcc-4.0.0/libjava/gnu/xml/xpath/Path.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Path.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Path.java	Wed Feb  2 00:42:12 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/xpath/Pattern.java gcc-4.0.0/libjava/gnu/xml/xpath/Pattern.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Pattern.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Pattern.java	Wed Feb  2 00:42:12 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 for 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-3.4.3/libjava/gnu/xml/xpath/PositionFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/PositionFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/PositionFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/PositionFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,67 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 String toString()
+   {
+     return "position()";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/Predicate.java gcc-4.0.0/libjava/gnu/xml/xpath/Predicate.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Predicate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Predicate.java	Wed Feb 16 19:25:06 2005
***************
*** 0 ****
--- 1,79 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 String toString()
+   {
+     return "[" + expr + "]";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/RelationalExpr.java gcc-4.0.0/libjava/gnu/xml/xpath/RelationalExpr.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/RelationalExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/RelationalExpr.java	Thu Feb 17 18:26:34 2005
***************
*** 0 ****
--- 1,101 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 String toString()
+   {
+     return lhs + " " + (lt ? "<" : ">") + (eq ? "=" : "") + " " + rhs;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/Root.java gcc-4.0.0/libjava/gnu/xml/xpath/Root.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Root.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Root.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,81 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "/";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/RoundFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/RoundFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/RoundFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/RoundFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,90 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "round(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/Selector.java gcc-4.0.0/libjava/gnu/xml/xpath/Selector.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Selector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Selector.java	Thu Feb 17 18:26:34 2005
***************
*** 0 ****
--- 1,498 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 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:
+         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-3.4.3/libjava/gnu/xml/xpath/StartsWithFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/StartsWithFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/StartsWithFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/StartsWithFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,86 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "starts-with(" + arg1 + "," + arg2 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/Steps.java gcc-4.0.0/libjava/gnu/xml/xpath/Steps.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Steps.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Steps.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,240 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 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-3.4.3/libjava/gnu/xml/xpath/StringFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/StringFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/StringFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/StringFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,113 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return (arg == null) ? "string()" : "string(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/StringLengthFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/StringLengthFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/StringLengthFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/StringLengthFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,85 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return (arg == null) ? "string-length()" : "string-length(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/SubstringAfterFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/SubstringAfterFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/SubstringAfterFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/SubstringAfterFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,92 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "substring-after(" + arg1 + "," + arg2 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/SubstringBeforeFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/SubstringBeforeFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/SubstringBeforeFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/SubstringBeforeFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,91 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "substring-before(" + arg1 + "," + arg2 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/SubstringFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/SubstringFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/SubstringFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/SubstringFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,122 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return (arg3 == null) ? "substring(" + arg1 + "," + arg2 + ")" :
+       "substring(" + arg1 + "," + arg2 + "," + arg3 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/SumFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/SumFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/SumFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/SumFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,94 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "sum(" + arg + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/Test.java gcc-4.0.0/libjava/gnu/xml/xpath/Test.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/Test.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/Test.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,55 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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);
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/TranslateFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/TranslateFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/TranslateFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/TranslateFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,126 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return "translate(" + arg1 + "," + arg2 + "," + arg3 + ")";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/TrueFunction.java gcc-4.0.0/libjava/gnu/xml/xpath/TrueFunction.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/TrueFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/TrueFunction.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,66 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+ /**
+  * 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 String toString()
+   {
+     return "true()";
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/UnionExpr.java gcc-4.0.0/libjava/gnu/xml/xpath/UnionExpr.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/UnionExpr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/UnionExpr.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,102 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 String toString()
+   {
+     return lhs + " | " + rhs;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/VariableReference.java gcc-4.0.0/libjava/gnu/xml/xpath/VariableReference.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/VariableReference.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/VariableReference.java	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,88 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 String name;
+ 
+   public VariableReference(XPathVariableResolver resolver, String 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);
+           }
+         QName qname = QName.valueOf(name);
+         return resolver.resolveVariable(qname);
+       }
+     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 String toString()
+   {
+     return "$" + name;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/XPathFactoryImpl.java gcc-4.0.0/libjava/gnu/xml/xpath/XPathFactoryImpl.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/XPathFactoryImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/XPathFactoryImpl.java	Wed Feb  2 00:42:12 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/xpath/XPathImpl.java gcc-4.0.0/libjava/gnu/xml/xpath/XPathImpl.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/XPathImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/XPathImpl.java	Wed Feb  2 00:42:12 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gnu/xml/xpath/XPathParser.java gcc-4.0.0/libjava/gnu/xml/xpath/XPathParser.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/XPathParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/XPathParser.java	Thu Feb 17 18:26:34 2005
***************
*** 0 ****
--- 1,1461 ----
+ // created by jay 0.8 (c) 1998 Axel.Schreiner@informatik.uni-osnabrueck.de
+ 
+ 					// line 2 "XPathParser.y"
+ /* XPathParser.java -- An XPath 1.0 parser.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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 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 210 "-"
+ // %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 276 "XPathParser.y"
+   {
+       yyVal = new Root();
+     }
+   break;
+ case 5:
+ 					// line 280 "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 296 "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 321 "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 337 "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 361 "XPathParser.y"
+   {
+       yyVal = new Selector (Selector.CHILD, (List) yyVals[0+yyTop]);
+     }
+   break;
+ case 11:
+ 					// line 365 "XPathParser.y"
+   {
+       yyVal = new Selector (Selector.ATTRIBUTE, (List) yyVals[0+yyTop]);
+     }
+   break;
+ case 12:
+ 					// line 369 "XPathParser.y"
+   {
+       yyVal = new Selector (((Integer) yyVals[-2+yyTop]).intValue (), (List) yyVals[0+yyTop]);
+     }
+   break;
+ case 13:
+ 					// line 373 "XPathParser.y"
+   {
+       yyVal = new Selector (Selector.SELF, Collections.EMPTY_LIST);
+     }
+   break;
+ case 14:
+ 					// line 377 "XPathParser.y"
+   {
+       yyVal = new Selector (Selector.PARENT, Collections.EMPTY_LIST);
+     }
+   break;
+ case 15:
+ 					// line 384 "XPathParser.y"
+   {
+       List list = new ArrayList();
+       list.add(yyVals[0+yyTop]);
+       yyVal = list;
+     }
+   break;
+ case 16:
+ 					// line 390 "XPathParser.y"
+   {
+       List list = (List)yyVals[-1+yyTop];
+       list.add(yyVals[0+yyTop]);
+       yyVal = list;
+     }
+   break;
+ case 17:
+ 					// line 414 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.ANCESTOR);
+     }
+   break;
+ case 18:
+ 					// line 418 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.ANCESTOR_OR_SELF);
+     }
+   break;
+ case 19:
+ 					// line 422 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.ATTRIBUTE);
+     }
+   break;
+ case 20:
+ 					// line 426 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.CHILD);
+     }
+   break;
+ case 21:
+ 					// line 430 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.DESCENDANT);
+     }
+   break;
+ case 22:
+ 					// line 434 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.DESCENDANT_OR_SELF);
+     }
+   break;
+ case 23:
+ 					// line 438 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.FOLLOWING);
+     }
+   break;
+ case 24:
+ 					// line 442 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.FOLLOWING_SIBLING);
+     }
+   break;
+ case 25:
+ 					// line 446 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.NAMESPACE);
+     }
+   break;
+ case 26:
+ 					// line 450 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.PARENT);
+     }
+   break;
+ case 27:
+ 					// line 454 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.PRECEDING);
+     }
+   break;
+ case 28:
+ 					// line 458 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.PRECEDING_SIBLING);
+     }
+   break;
+ case 29:
+ 					// line 462 "XPathParser.y"
+   {
+       yyVal = new Integer(Selector.SELF);
+     }
+   break;
+ case 31:
+ 					// line 471 "XPathParser.y"
+   {
+       yyVal = new NodeTypeTest(Node.PROCESSING_INSTRUCTION_NODE, (String) yyVals[-1+yyTop]);
+     }
+   break;
+ case 32:
+ 					// line 476 "XPathParser.y"
+   {
+       yyVal = new NodeTypeTest(((Short) yyVals[-1+yyTop]).shortValue());
+     }
+   break;
+ case 33:
+ 					// line 483 "XPathParser.y"
+   {
+       yyVal = new Predicate((Expr) yyVals[-1+yyTop]);
+     }
+   break;
+ case 35:
+ 					// line 491 "XPathParser.y"
+   {
+       yyVal = new ParenthesizedExpr((Expr) yyVals[-1+yyTop]);
+     }
+   break;
+ case 36:
+ 					// line 495 "XPathParser.y"
+   {
+       yyVal = new Constant(yyVals[0+yyTop]);
+     }
+   break;
+ case 37:
+ 					// line 499 "XPathParser.y"
+   {
+       yyVal = new Constant(yyVals[0+yyTop]);
+     }
+   break;
+ case 39:
+ 					// line 507 "XPathParser.y"
+   {
+       yyVal = lookupFunction((String) yyVals[-2+yyTop], Collections.EMPTY_LIST);
+     }
+   break;
+ case 40:
+ 					// line 511 "XPathParser.y"
+   {
+       yyVal = lookupFunction((String) yyVals[-3+yyTop], (List) yyVals[-1+yyTop]);
+     }
+   break;
+ case 41:
+ 					// line 518 "XPathParser.y"
+   {
+       List list = new ArrayList();
+       list.add(yyVals[0+yyTop]);
+       yyVal = list;
+     }
+   break;
+ case 42:
+ 					// line 524 "XPathParser.y"
+   {
+       List list = (List) yyVals[0+yyTop];
+       list.add(0, yyVals[-2+yyTop]);
+       yyVal = list;
+     }
+   break;
+ case 44:
+ 					// line 534 "XPathParser.y"
+   {
+       yyVal = new UnionExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop]);
+     }
+   break;
+ case 47:
+ 					// line 543 "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 559 "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 584 "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 607 "XPathParser.y"
+   {
+       yyVal = new OrExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop]);
+     }
+   break;
+ case 54:
+ 					// line 615 "XPathParser.y"
+   {
+       yyVal = new AndExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop]);
+     }
+   break;
+ case 56:
+ 					// line 623 "XPathParser.y"
+   {
+       yyVal = new EqualityExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], false);
+     }
+   break;
+ case 57:
+ 					// line 627 "XPathParser.y"
+   {
+       yyVal = new EqualityExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], true);
+     }
+   break;
+ case 59:
+ 					// line 635 "XPathParser.y"
+   {
+       yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], true, false);
+     }
+   break;
+ case 60:
+ 					// line 639 "XPathParser.y"
+   {
+       yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], false, false);
+     }
+   break;
+ case 61:
+ 					// line 643 "XPathParser.y"
+   {
+       yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], true, true);
+     }
+   break;
+ case 62:
+ 					// line 647 "XPathParser.y"
+   {
+       yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], false, true);
+     }
+   break;
+ case 64:
+ 					// line 655 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.ADD);
+     }
+   break;
+ case 65:
+ 					// line 659 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.SUBTRACT);
+     }
+   break;
+ case 67:
+ 					// line 667 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.MULTIPLY);
+     }
+   break;
+ case 68:
+ 					// line 671 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.DIVIDE);
+     }
+   break;
+ case 69:
+ 					// line 675 "XPathParser.y"
+   {
+       yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.MODULO);
+     }
+   break;
+ case 71:
+ 					// line 683 "XPathParser.y"
+   {
+       yyVal = new NegativeExpr((Expr) yyVals[0+yyTop]);
+     }
+   break;
+ case 72:
+ 					// line 690 "XPathParser.y"
+   {
+       yyVal = new Double((String) yyVals[0+yyTop] + ".0");
+     }
+   break;
+ case 73:
+ 					// line 694 "XPathParser.y"
+   {
+       yyVal = new Double((String) yyVals[-1+yyTop] + ".0");
+     }
+   break;
+ case 74:
+ 					// line 698 "XPathParser.y"
+   {
+       yyVal = new Double((String) yyVals[-2+yyTop] + "." + (String) yyVals[0+yyTop]);
+     }
+   break;
+ case 75:
+ 					// line 702 "XPathParser.y"
+   {
+       yyVal = new Double("0." + (String) yyVals[0+yyTop]);
+     }
+   break;
+ case 77:
+ 					// line 731 "XPathParser.y"
+   {
+       yyVal = new VariableReference(variableResolver, (String) yyVals[0+yyTop]);
+     }
+   break;
+ case 78:
+ 					// line 738 "XPathParser.y"
+   {
+       yyVal = new NameTest(null, true, true);
+     }
+   break;
+ case 79:
+ 					// line 742 "XPathParser.y"
+   {
+       QName qName = getQName((String) yyVals[-2+yyTop]);
+       yyVal = new NameTest(qName, true, false);
+     }
+   break;
+ case 80:
+ 					// line 747 "XPathParser.y"
+   {
+       QName qName = getQName((String) yyVals[0+yyTop]);
+       yyVal = new NameTest(qName, false, false);
+     }
+   break;
+ case 82:
+ 					// line 756 "XPathParser.y"
+   {
+       yyVal = (String) yyVals[-2+yyTop] + ':' + (String) yyVals[0+yyTop];
+     }
+   break;
+ case 83:
+ 					// line 763 "XPathParser.y"
+   {
+       yyVal = new Short(Node.COMMENT_NODE);
+     }
+   break;
+ case 84:
+ 					// line 767 "XPathParser.y"
+   {
+       yyVal = new Short(Node.TEXT_NODE);
+     }
+   break;
+ case 85:
+ 					// line 771 "XPathParser.y"
+   {
+       yyVal = new Short(Node.PROCESSING_INSTRUCTION_NODE);
+     }
+   break;
+ case 86:
+ 					// line 775 "XPathParser.y"
+   {
+       yyVal = new Short((short) 0);
+     }
+   break;
+ 					// line 986 "-"
+         }
+         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 781 "XPathParser.y"
+ 
+ }
+ 					// line 1461 "-"
diff -Nrcpad gcc-3.4.3/libjava/gnu/xml/xpath/XPathParser.y gcc-4.0.0/libjava/gnu/xml/xpath/XPathParser.y
*** gcc-3.4.3/libjava/gnu/xml/xpath/XPathParser.y	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/XPathParser.y	Wed Feb  2 00:42:12 2005
***************
*** 0 ****
--- 1,782 ----
+ %{
+ /* XPathParser.java -- An XPath 1.0 parser.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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
+     {
+       $$ = new VariableReference(variableResolver, (String) $2);
+     }
+   ;
+ 
+ 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-3.4.3/libjava/gnu/xml/xpath/XPathTokenizer.java gcc-4.0.0/libjava/gnu/xml/xpath/XPathTokenizer.java
*** gcc-3.4.3/libjava/gnu/xml/xpath/XPathTokenizer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/gnu/xml/xpath/XPathTokenizer.java	Wed Feb  2 00:42:12 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/gtk-2.0.m4 gcc-4.0.0/libjava/gtk-2.0.m4
*** gcc-3.4.3/libjava/gtk-2.0.m4	Mon Jun 30 23:53:28 2003
--- gcc-4.0.0/libjava/gtk-2.0.m4	Thu Jan  1 00:00:00 1970
***************
*** 1,196 ****
- # Configure paths for GTK+
- # Owen Taylor     1997-2001
- 
- dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
- dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, 
- dnl pass to pkg-config
- dnl
- AC_DEFUN(AM_PATH_GTK_2_0,
- [dnl 
- dnl Get the cflags and libraries from pkg-config
- dnl
- AC_ARG_ENABLE(gtktest, [  --disable-gtktest       do not try to compile and run a test GTK+ program],
- 		    , enable_gtktest=yes)
- 
-   pkg_config_args=gtk+-2.0
-   for module in . $4
-   do
-       case "$module" in
-          gthread) 
-              pkg_config_args="$pkg_config_args gthread-2.0"
-          ;;
-       esac
-   done
- 
-   no_gtk=""
- 
-   AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
- 
-   if test x$PKG_CONFIG != xno ; then
-     if pkg-config --atleast-pkgconfig-version 0.7 ; then
-       :
-     else
-       echo *** pkg-config too old; version 0.7 or better required.
-       no_gtk=yes
-       PKG_CONFIG=no
-     fi
-   else
-     no_gtk=yes
-   fi
- 
-   min_gtk_version=ifelse([$1], ,2.0.0,$1)
-   AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version)
- 
-   if test x$PKG_CONFIG != xno ; then
-     ## don't try to run the test against uninstalled libtool libs
-     if $PKG_CONFIG --uninstalled $pkg_config_args; then
- 	  echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
- 	  enable_gtktest=no
-     fi
- 
-     if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then
- 	  :
-     else
- 	  no_gtk=yes
-     fi
-   fi
- 
-   if test x"$no_gtk" = x ; then
-     GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
-     GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
-     gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
-            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-     gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
-            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-     gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
-            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-     if test "x$enable_gtktest" = "xyes" ; then
-       ac_save_CFLAGS="$CFLAGS"
-       ac_save_LIBS="$LIBS"
-       CFLAGS="$CFLAGS $GTK_CFLAGS"
-       LIBS="$GTK_LIBS $LIBS"
- dnl
- dnl Now check if the installed GTK+ is sufficiently new. (Also sanity
- dnl checks the results of pkg-config to some extent)
- dnl
-       rm -f conf.gtktest
-       AC_TRY_RUN([
- #include <gtk/gtk.h>
- #include <stdio.h>
- #include <stdlib.h>
- 
- int 
- main ()
- {
-   int major, minor, micro;
-   char *tmp_version;
- 
-   system ("touch conf.gtktest");
- 
-   /* HP/UX 9 (%@#!) writes to sscanf strings */
-   tmp_version = g_strdup("$min_gtk_version");
-   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-      printf("%s, bad version string\n", "$min_gtk_version");
-      exit(1);
-    }
- 
-   if ((gtk_major_version != $gtk_config_major_version) ||
-       (gtk_minor_version != $gtk_config_minor_version) ||
-       (gtk_micro_version != $gtk_config_micro_version))
-     {
-       printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", 
-              $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
-              gtk_major_version, gtk_minor_version, gtk_micro_version);
-       printf ("*** was found! If pkg-config was correct, then it is best\n");
-       printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
-       printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
-       printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
-       printf("*** required on your system.\n");
-       printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
-       printf("*** to point to the correct configuration files\n");
-     } 
-   else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
- 	   (gtk_minor_version != GTK_MINOR_VERSION) ||
-            (gtk_micro_version != GTK_MICRO_VERSION))
-     {
-       printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
- 	     GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
-       printf("*** library (version %d.%d.%d)\n",
- 	     gtk_major_version, gtk_minor_version, gtk_micro_version);
-     }
-   else
-     {
-       if ((gtk_major_version > major) ||
-         ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
-         ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
-       {
-         return 0;
-        }
-      else
-       {
-         printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
-                gtk_major_version, gtk_minor_version, gtk_micro_version);
-         printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
- 	       major, minor, micro);
-         printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
-         printf("***\n");
-         printf("*** If you have already installed a sufficiently new version, this error\n");
-         printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
-         printf("*** being found. The easiest way to fix this is to remove the old version\n");
-         printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
-         printf("*** correct copy of pkg-config. (In this case, you will have to\n");
-         printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
-         printf("*** so that the correct libraries are found at run-time))\n");
-       }
-     }
-   return 1;
- }
- ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-        CFLAGS="$ac_save_CFLAGS"
-        LIBS="$ac_save_LIBS"
-      fi
-   fi
-   if test "x$no_gtk" = x ; then
-      AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version))
-      ifelse([$2], , :, [$2])     
-   else
-      AC_MSG_RESULT(no)
-      if test "$PKG_CONFIG" = "no" ; then
-        echo "*** A new enough version of pkg-config was not found."
-        echo "*** See http://pkgconfig.sourceforge.net"
-      else
-        if test -f conf.gtktest ; then
-         :
-        else
-           echo "*** Could not run GTK+ test program, checking why..."
- 	  ac_save_CFLAGS="$CFLAGS"
- 	  ac_save_LIBS="$LIBS"
-           CFLAGS="$CFLAGS $GTK_CFLAGS"
-           LIBS="$LIBS $GTK_LIBS"
-           AC_TRY_LINK([
- #include <gtk/gtk.h>
- #include <stdio.h>
- ],      [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
-         [ echo "*** The test program compiled, but did not run. This usually means"
-           echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
-           echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
-           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-           echo "*** is required on your system"
- 	  echo "***"
-           echo "*** If you have an old version installed, it is best to remove it, although"
-           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
-         [ echo "*** The test program failed to compile or link. See the file config.log for the"
-           echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."])
-           CFLAGS="$ac_save_CFLAGS"
-           LIBS="$ac_save_LIBS"
-        fi
-      fi
-      GTK_CFLAGS=""
-      GTK_LIBS=""
-      ifelse([$3], , :, [$3])
-   fi
-   AC_SUBST(GTK_CFLAGS)
-   AC_SUBST(GTK_LIBS)
-   rm -f conf.gtktest
- ])
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/include/Makefile.am gcc-4.0.0/libjava/include/Makefile.am
*** gcc-3.4.3/libjava/include/Makefile.am	Wed Apr  4 23:38:52 2001
--- gcc-4.0.0/libjava/include/Makefile.am	Mon Feb 14 21:08:08 2005
***************
*** 2,5 ****
  
  AUTOMAKE_OPTIONS = foreign
  
! include_HEADERS = jni.h jvmpi.h
--- 2,8 ----
  
  AUTOMAKE_OPTIONS = foreign
  
! # autoconf2.13's target_alias
! target_noncanonical = @target_noncanonical@
! 
! tool_include__HEADERS = jni.h jawt.h jawt_md.h jvmpi.h
diff -Nrcpad gcc-3.4.3/libjava/include/Makefile.in gcc-4.0.0/libjava/include/Makefile.in
*** gcc-3.4.3/libjava/include/Makefile.in	Tue Jan 13 17:37:23 2004
--- gcc-4.0.0/libjava/include/Makefile.in	Wed Apr  6 21:38:30 2005
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999 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.
--- 1,8 ----
! # 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.
***************
*** 10,110 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! 
! SHELL = @SHELL@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = ..
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AR = @AR@
  AS = @AS@
  BACKTRACESPEC = @BACKTRACESPEC@
  CAIRO_CFLAGS = @CAIRO_CFLAGS@
  CAIRO_LIBS = @CAIRO_LIBS@
  CC = @CC@
  CHECKREFSPEC = @CHECKREFSPEC@
! COMPPATH = @COMPPATH@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
  DIRLTDL = @DIRLTDL@
  DIVIDESPEC = @DIVIDESPEC@
! DLLTOOL = @DLLTOOL@
  EXCEPTIONSPEC = @EXCEPTIONSPEC@
  EXEEXT = @EXEEXT@
- EXTRA_CC_FILES = @EXTRA_CC_FILES@
  GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  GCDEPS = @GCDEPS@
  GCINCS = @GCINCS@
  GCJ = @GCJ@
  GCJFLAGS = @GCJFLAGS@
  GCJVERSION = @GCJVERSION@
  GCLIBS = @GCLIBS@
- GCOBJS = @GCOBJS@
  GCSPEC = @GCSPEC@
  GCTESTSPEC = @GCTESTSPEC@
  GLIB_CFLAGS = @GLIB_CFLAGS@
- GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
  GLIB_LIBS = @GLIB_LIBS@
! GLIB_MKENUMS = @GLIB_MKENUMS@
! GOBJECT_QUERY = @GOBJECT_QUERY@
  GTK_CFLAGS = @GTK_CFLAGS@
  GTK_LIBS = @GTK_LIBS@
  HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
- HAVE_LIB = @HAVE_LIB@
  IEEESPEC = @IEEESPEC@
  INCLTDL = @INCLTDL@
  INTERPRETER = @INTERPRETER@
  JC1GCSPEC = @JC1GCSPEC@
! LIB = @LIB@
  LIBART_CFLAGS = @LIBART_CFLAGS@
- LIBART_CONFIG = @LIBART_CONFIG@
  LIBART_LIBS = @LIBART_LIBS@
  LIBFFI = @LIBFFI@
  LIBFFIINCS = @LIBFFIINCS@
--- 12,146 ----
  # 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 $(tool_include__HEADERS)
+ 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)
+ CONFIG_HEADER = config.h $(top_builddir)/gcj/libgcj-config.h
+ CONFIG_CLEAN_FILES = platform.h java-gc.h java-threads.h java-signal.h \
+ 	java-signal-aux.h
+ 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)$(tool_include_dir)"
+ tool_include_HEADERS_INSTALL = $(INSTALL_HEADER)
+ HEADERS = $(tool_include__HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
  AR = @AR@
  AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
  BACKTRACESPEC = @BACKTRACESPEC@
  CAIRO_CFLAGS = @CAIRO_CFLAGS@
  CAIRO_LIBS = @CAIRO_LIBS@
  CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
  CHECKREFSPEC = @CHECKREFSPEC@
! CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
! CPP = @CPP@
! CPPFLAGS = @CPPFLAGS@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
  DIRLTDL = @DIRLTDL@
  DIVIDESPEC = @DIVIDESPEC@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXCEPTIONSPEC = @EXCEPTIONSPEC@
  EXEEXT = @EXEEXT@
  GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  GCDEPS = @GCDEPS@
  GCINCS = @GCINCS@
  GCJ = @GCJ@
+ GCJDEPMODE = @GCJDEPMODE@
  GCJFLAGS = @GCJFLAGS@
+ GCJH = @GCJH@
  GCJVERSION = @GCJVERSION@
  GCLIBS = @GCLIBS@
  GCSPEC = @GCSPEC@
  GCTESTSPEC = @GCTESTSPEC@
  GLIB_CFLAGS = @GLIB_CFLAGS@
  GLIB_LIBS = @GLIB_LIBS@
! GTK_AWT_FALSE = @GTK_AWT_FALSE@
! GTK_AWT_TRUE = @GTK_AWT_TRUE@
! GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
! GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
  GTK_CFLAGS = @GTK_CFLAGS@
  GTK_LIBS = @GTK_LIBS@
  HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
  IEEESPEC = @IEEESPEC@
  INCLTDL = @INCLTDL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
  INTERPRETER = @INTERPRETER@
+ JAVA_HOME = @JAVA_HOME@
+ JAVA_HOME_SET_FALSE = @JAVA_HOME_SET_FALSE@
+ JAVA_HOME_SET_TRUE = @JAVA_HOME_SET_TRUE@
  JC1GCSPEC = @JC1GCSPEC@
! LDFLAGS = @LDFLAGS@
  LIBART_CFLAGS = @LIBART_CFLAGS@
  LIBART_LIBS = @LIBART_LIBS@
  LIBFFI = @LIBFFI@
  LIBFFIINCS = @LIBFFIINCS@
*************** LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
*** 113,345 ****
  LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
  LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
  LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
  LIBICONV = @LIBICONV@
  LIBLTDL = @LIBLTDL@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
! LTLIB = @LTLIB@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
! OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
  PANGOFT2_LIBS = @PANGOFT2_LIBS@
  PERL = @PERL@
  PKG_CONFIG = @PKG_CONFIG@
! PLATFORMOBJS = @PLATFORMOBJS@
  RANLIB = @RANLIB@
  STRIP = @STRIP@
  SYSDEP_SOURCES = @SYSDEP_SOURCES@
  SYSTEMSPEC = @SYSTEMSPEC@
  SYS_ZLIBS = @SYS_ZLIBS@
  THREADCXXFLAGS = @THREADCXXFLAGS@
  THREADDEPS = @THREADDEPS@
  THREADINCS = @THREADINCS@
  THREADLDFLAGS = @THREADLDFLAGS@
  THREADLIBS = @THREADLIBS@
- THREADOBJS = @THREADOBJS@
  THREADSPEC = @THREADSPEC@
  TOOLKIT = @TOOLKIT@
  VERSION = @VERSION@
  ZINCS = @ZINCS@
  ZLIBS = @ZLIBS@
  ZLIBSPEC = @ZLIBSPEC@
  ZLIBTESTSPEC = @ZLIBTESTSPEC@
  gcc_version = @gcc_version@
! glibjava_CXX = @glibjava_CXX@
  here = @here@
  libgcj_basedir = @libgcj_basedir@
  mkinstalldirs = @mkinstalldirs@
  tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  toolexecmainlibdir = @toolexecmainlibdir@
- 
  AUTOMAKE_OPTIONS = foreign
  
- include_HEADERS = jni.h jvmpi.h
- CONFIG_HEADER = config.h ../gcj/libgcj-config.h
- CONFIG_CLEAN_FILES = 
- HEADERS =  $(include_HEADERS)
- 
- DIST_COMMON =  ./stamp-h1.in Makefile.am Makefile.in config.h.in
- 
- 
- DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
- 
- TAR = gtar
- GZIP_ENV = --best
- all: all-redirect
  .SUFFIXES:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile
  
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
  
  
  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
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES= CONFIG_HEADERS=include/config.h \
! 	     $(SHELL) ./config.status
! 	@echo timestamp > stamp-h1 2> /dev/null
! $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h1.in
! 	@if test ! -f $@; then \
! 		rm -f $(srcdir)/stamp-h1.in; \
! 		$(MAKE) $(srcdir)/stamp-h1.in; \
! 	else :; fi
! $(srcdir)/stamp-h1.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) 
  	cd $(top_srcdir) && $(AUTOHEADER)
! 	@echo timestamp > $(srcdir)/stamp-h1.in 2> /dev/null
! 
! mostlyclean-hdr:
! 
! clean-hdr:
  
  distclean-hdr:
! 	-rm -f config.h
  
! maintainer-clean-hdr:
  
! install-includeHEADERS: $(include_HEADERS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(includedir)
! 	@list='$(include_HEADERS)'; for p in $$list; do \
! 	  if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
! 	  echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p"; \
! 	  $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p; \
  	done
  
! uninstall-includeHEADERS:
  	@$(NORMAL_UNINSTALL)
! 	list='$(include_HEADERS)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(includedir)/$$p; \
  	done
  
  tags: TAGS
  
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
! 
! TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
! 
! subdir = include
  
  distdir: $(DISTFILES)
! 	here=`cd $(top_builddir) && pwd`; \
! 	top_distdir=`cd $(top_distdir) && pwd`; \
! 	distdir=`cd $(distdir) && pwd`; \
! 	cd $(top_srcdir) \
! 	  && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign include/Makefile
! 	@for file in $(DISTFILES); do \
! 	  d=$(srcdir); \
  	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
  	  else \
  	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
  	  fi; \
  	done
- info-am:
- info: info-am
- dvi-am:
- dvi: dvi-am
  check-am: all-am
  check: check-am
! installcheck-am:
! installcheck: installcheck-am
! all-recursive-am: config.h
! 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
! 
! install-exec-am:
  install-exec: install-exec-am
- 
- install-data-am: install-includeHEADERS
  install-data: install-data-am
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-am
- uninstall-am: uninstall-includeHEADERS
- uninstall: uninstall-am
- all-am: Makefile $(HEADERS) config.h
- all-redirect: all-am
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs:
- 	$(mkinstalldirs)  $(DESTDIR)$(includedir)
- 
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-hdr mostlyclean-tags mostlyclean-generic
  
! mostlyclean: mostlyclean-am
  
! clean-am:  clean-hdr clean-tags clean-generic mostlyclean-am
  
! clean: clean-am
  
! distclean-am:  distclean-hdr distclean-tags distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-am
  
! maintainer-clean-am:  maintainer-clean-hdr maintainer-clean-tags \
! 		maintainer-clean-generic distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
  maintainer-clean: maintainer-clean-am
  
! .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
! uninstall-includeHEADERS install-includeHEADERS tags mostlyclean-tags \
! distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
! dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
! install-exec-am install-exec install-data-am install-data install-am \
! install uninstall-am uninstall all-redirect all-am all installdirs \
! mostlyclean-generic distclean-generic clean-generic \
! maintainer-clean-generic clean mostlyclean distclean maintainer-clean
  
  
  # 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.
--- 149,546 ----
  LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
  LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
  LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
+ LIBGCJ_LD_SYMBOLIC = @LIBGCJ_LD_SYMBOLIC@
  LIBICONV = @LIBICONV@
  LIBLTDL = @LIBLTDL@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
! LTLIBICONV = @LTLIBICONV@
! LTLIBOBJS = @LTLIBOBJS@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
! NATIVE_FALSE = @NATIVE_FALSE@
! NATIVE_TRUE = @NATIVE_TRUE@
! NEEDS_DATA_START_FALSE = @NEEDS_DATA_START_FALSE@
! NEEDS_DATA_START_TRUE = @NEEDS_DATA_START_TRUE@
  OBJEXT = @OBJEXT@
+ ONESTEP_FALSE = @ONESTEP_FALSE@
+ ONESTEP_TRUE = @ONESTEP_TRUE@
  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@
  PERL = @PERL@
  PKG_CONFIG = @PKG_CONFIG@
! PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@
  RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
  STRIP = @STRIP@
+ SUPPLY_BACKTRACE_FALSE = @SUPPLY_BACKTRACE_FALSE@
+ SUPPLY_BACKTRACE_TRUE = @SUPPLY_BACKTRACE_TRUE@
  SYSDEP_SOURCES = @SYSDEP_SOURCES@
  SYSTEMSPEC = @SYSTEMSPEC@
  SYS_ZLIBS = @SYS_ZLIBS@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
  THREADCXXFLAGS = @THREADCXXFLAGS@
  THREADDEPS = @THREADDEPS@
  THREADINCS = @THREADINCS@
  THREADLDFLAGS = @THREADLDFLAGS@
  THREADLIBS = @THREADLIBS@
  THREADSPEC = @THREADSPEC@
  TOOLKIT = @TOOLKIT@
+ USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
+ 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@
+ USING_NOGC_TRUE = @USING_NOGC_TRUE@
+ USING_NO_THREADS_FALSE = @USING_NO_THREADS_FALSE@
+ USING_NO_THREADS_TRUE = @USING_NO_THREADS_TRUE@
+ USING_POSIX_PLATFORM_FALSE = @USING_POSIX_PLATFORM_FALSE@
+ USING_POSIX_PLATFORM_TRUE = @USING_POSIX_PLATFORM_TRUE@
+ USING_POSIX_THREADS_FALSE = @USING_POSIX_THREADS_FALSE@
+ USING_POSIX_THREADS_TRUE = @USING_POSIX_THREADS_TRUE@
+ USING_WIN32_PLATFORM_FALSE = @USING_WIN32_PLATFORM_FALSE@
+ USING_WIN32_PLATFORM_TRUE = @USING_WIN32_PLATFORM_TRUE@
+ USING_WIN32_THREADS_FALSE = @USING_WIN32_THREADS_FALSE@
+ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
  VERSION = @VERSION@
+ XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
+ XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
  ZINCS = @ZINCS@
+ ZIP = @ZIP@
  ZLIBS = @ZLIBS@
  ZLIBSPEC = @ZLIBSPEC@
  ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_GCJ = @ac_ct_GCJ@
+ 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__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
+ am__fastdepGCJ_TRUE = @am__fastdepGCJ_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@
+ 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@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
  libgcj_basedir = @libgcj_basedir@
+ libstdcxx_incdir = @libstdcxx_incdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
  mkinstalldirs = @mkinstalldirs@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ subdirs = @subdirs@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ 
+ # 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
+ tool_include__HEADERS = jni.h jawt.h jawt_md.h jvmpi.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) --foreign  include/Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  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:
! install-tool_include_HEADERS: $(tool_include__HEADERS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(tool_include_dir)" || $(mkdir_p) "$(DESTDIR)$(tool_include_dir)"
! 	@list='$(tool_include__HEADERS)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(tool_include_HEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(tool_include_dir)/$$f'"; \
! 	  $(tool_include_HEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(tool_include_dir)/$$f"; \
  	done
  
! uninstall-tool_include_HEADERS:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(tool_include__HEADERS)'; for p in $$list; do \
! 	  f=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(tool_include_dir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(tool_include_dir)/$$f"; \
  	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:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
! 	tags=; \
! 	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) config.h.in $(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:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
! 		$(TAGS_FILES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) config.h.in $(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
  check-am: all-am
  check: check-am
! all-am: Makefile $(HEADERS) config.h
! installdirs:
! 	for dir in "$(DESTDIR)$(tool_include_dir)"; do \
! 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
! 	done
! 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-hdr \
! 	distclean-libtool distclean-tags
  
! dvi: dvi-am
  
! dvi-am:
  
! html: html-am
  
! info: info-am
! 
! info-am:
! 
! install-data-am: install-tool_include_HEADERS
! 
! 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-tool_include_HEADERS
+ 
+ .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ 	clean-libtool ctags distclean distclean-generic distclean-hdr \
+ 	distclean-libtool 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 \
+ 	install-tool_include_HEADERS installcheck installcheck-am \
+ 	installdirs maintainer-clean maintainer-clean-generic \
+ 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ 	ps ps-am tags uninstall uninstall-am uninstall-info-am \
+ 	uninstall-tool_include_HEADERS
  
  # 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.
diff -Nrcpad gcc-3.4.3/libjava/include/boehm-gc.h gcc-4.0.0/libjava/include/boehm-gc.h
*** gcc-3.4.3/libjava/include/boehm-gc.h	Sat Dec 28 06:38:52 2002
--- gcc-4.0.0/libjava/include/boehm-gc.h	Sun Jan  2 03:35:55 2005
***************
*** 1,7 ****
  // -*- c++ -*-
  // boehm-gc.h - Defines for Boehm collector.
  
! /* Copyright (C) 1998, 1999, 2002  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,7 ----
  // -*- c++ -*-
  // boehm-gc.h - Defines for Boehm collector.
  
! /* Copyright (C) 1998, 1999, 2002, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 12,24 ****
  #ifndef __JV_BOEHM_GC__
  #define __JV_BOEHM_GC__
  
! #define JV_MARKOBJ_DECL void *_Jv_MarkObj (void *, void *, void *, void *)
! #define JV_MARKARRAY_DECL void *_Jv_MarkArray (void *, void *, void *, void *)
  
  extern "C"
  {
!   JV_MARKOBJ_DECL;
!   JV_MARKARRAY_DECL;
  }
  
  // Enough stuff to inline _Jv_AllocObj.  Ugly.
--- 12,24 ----
  #ifndef __JV_BOEHM_GC__
  #define __JV_BOEHM_GC__
  
! #define JV_MARKOBJ_DECL void *::_Jv_MarkObj (void *, void *, void *, void *)
! #define JV_MARKARRAY_DECL void *::_Jv_MarkArray (void *, void *, void *, void *)
  
  extern "C"
  {
!   void *_Jv_MarkObj (void *, void *, void *, void *);
!   void *_Jv_MarkArray (void *, void *, void *, void *);
  }
  
  // Enough stuff to inline _Jv_AllocObj.  Ugly.
*************** extern "C"
*** 26,31 ****
--- 26,33 ----
  #include <java/lang/Class.h>
  #include <string.h>
  
+ #include <gc_ext_config.h> // for THREAD_LOCAL_ALLOC
+ 
  extern "C" void * GC_gcj_malloc(size_t, void *);
  extern "C" void * GC_malloc_atomic(size_t);
  #ifdef THREAD_LOCAL_ALLOC
*************** extern "C" void * GC_local_gcj_malloc(si
*** 33,38 ****
--- 35,42 ----
  extern "C" void * GC_local_malloc_atomic(size_t);
  #endif
  
+ #ifndef LIBGCJ_GC_DEBUG
+ 
  inline void *
  _Jv_AllocObj (jsize size, jclass klass)
  {
*************** _Jv_AllocPtrFreeObj (jsize size, jclass 
*** 65,70 ****
--- 69,84 ----
    return obj;
  }
  
+ #else /* LIBGCJ_GC_DEBUG */
+ 
+ void *
+ _Jv_AllocObj (jsize size, jclass klass);
+ 
+ void *
+ _Jv_AllocPtrFreeObj (jsize size, jclass klass);
+ 
+ #endif /* LIBGCJ_GC_DEBUG */
+ 
  // _Jv_AllocBytes (jsize size) should go here, too.  But clients don't
  // usually include this header.
  
diff -Nrcpad gcc-3.4.3/libjava/include/config.h.in gcc-4.0.0/libjava/include/config.h.in
*** gcc-3.4.3/libjava/include/config.h.in	Tue Dec  2 22:26:49 2003
--- gcc-4.0.0/libjava/include/config.h.in	Sat Apr  2 02:30:40 2005
***************
*** 1,423 ****
! /* include/config.h.in.  Generated automatically from configure.in by autoheader.  */
  
! /* Define if using alloca.c.  */
! #undef C_ALLOCA
  
! /* 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.  */
  #undef CRAY_STACKSEG_END
  
! /* Define if you have alloca, as a function or macro.  */
  #undef HAVE_ALLOCA
  
! /* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
  #undef HAVE_ALLOCA_H
  
! /* Define if you have a working `mmap' system call.  */
! #undef HAVE_MMAP
  
! /* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */
! #undef HAVE_SYS_WAIT_H
  
! /* Define if your struct tm has tm_zone.  */
! #undef HAVE_TM_ZONE
  
! /* Define if you don't have tm_zone but do have the external array
!    tzname.  */
! #undef HAVE_TZNAME
  
! /* If using the C implementation of alloca, define if you know the
!    direction of stack growth for your system; otherwise it will be
!    automatically deduced at run-time.
!  STACK_DIRECTION > 0 => grows toward higher addresses
!  STACK_DIRECTION < 0 => grows toward lower addresses
!  STACK_DIRECTION = 0 => direction of growth unknown
!  */
! #undef STACK_DIRECTION
  
! /* Define if you have the ANSI C header files.  */
! #undef STDC_HEADERS
  
! /* Define if your <sys/time.h> declares struct tm.  */
! #undef TM_IN_SYS_TIME
  
! /* Define if the X Window System is missing or not being used.  */
! #undef X_DISPLAY_MISSING
  
! /* Define to `int' if `ssize_t' is not defined.  */
! #undef ssize_t
  
! /* Define if you have the access function.  */
! #undef HAVE_ACCESS
  
! /* Define if you have the chmod function.  */
! #undef HAVE_CHMOD
  
! /* Define if you have the execvp function.  */
  #undef HAVE_EXECVP
  
! /* Define if you have the fork function.  */
  #undef HAVE_FORK
  
! /* Define if you have the fstat function.  */
  #undef HAVE_FSTAT
  
! /* Define if you have the fsync function.  */
  #undef HAVE_FSYNC
  
! /* Define if you have the ftime function.  */
  #undef HAVE_FTIME
  
! /* Define if you have the ftruncate function.  */
  #undef HAVE_FTRUNCATE
  
! /* Define if you have the getcwd function.  */
  #undef HAVE_GETCWD
  
! /* Define if you have the gethostbyaddr_r function.  */
  #undef HAVE_GETHOSTBYADDR_R
  
! /* Define if you have the gethostbyname_r function.  */
  #undef HAVE_GETHOSTBYNAME_R
  
! /* Define if you have the gethostname function.  */
  #undef HAVE_GETHOSTNAME
  
! /* Define if you have the getpagesize function.  */
  #undef HAVE_GETPAGESIZE
  
! /* Define if you have the getpwuid_r function.  */
  #undef HAVE_GETPWUID_R
  
! /* Define if you have the gettimeofday function.  */
  #undef HAVE_GETTIMEOFDAY
  
! /* Define if you have the gmtime_r function.  */
  #undef HAVE_GMTIME_R
  
! /* Define if you have the inet_addr function.  */
  #undef HAVE_INET_ADDR
  
! /* Define if you have the inet_aton function.  */
  #undef HAVE_INET_ATON
  
! /* Define if you have the inet_ntoa function.  */
  #undef HAVE_INET_NTOA
  
! /* Define if you have the inet_pton function.  */
  #undef HAVE_INET_PTON
  
! /* Define if you have the ioctl function.  */
  #undef HAVE_IOCTL
  
! /* Define if you have the localtime_r function.  */
  #undef HAVE_LOCALTIME_R
  
! /* Define if you have the memcpy function.  */
  #undef HAVE_MEMCPY
  
! /* Define if you have the memmove function.  */
  #undef HAVE_MEMMOVE
  
! /* Define if you have the mkdir function.  */
  #undef HAVE_MKDIR
  
! /* Define if you have the nl_langinfo function.  */
  #undef HAVE_NL_LANGINFO
  
! /* Define if you have the open function.  */
  #undef HAVE_OPEN
  
! /* Define if you have the opendir function.  */
  #undef HAVE_OPENDIR
  
! /* Define if you have the pipe function.  */
  #undef HAVE_PIPE
  
! /* Define if you have the pthread_mutexattr_setkind_np function.  */
  #undef HAVE_PTHREAD_MUTEXATTR_SETKIND_NP
  
! /* Define if you have the pthread_mutexattr_settype function.  */
  #undef HAVE_PTHREAD_MUTEXATTR_SETTYPE
  
! /* Define if you have the readdir_r function.  */
  #undef HAVE_READDIR_R
  
! /* Define if you have the realpath function.  */
  #undef HAVE_REALPATH
  
! /* Define if you have the rename function.  */
  #undef HAVE_RENAME
  
! /* Define if you have the rmdir function.  */
  #undef HAVE_RMDIR
  
! /* Define if you have the sched_yield function.  */
  #undef HAVE_SCHED_YIELD
  
! /* Define if you have the select function.  */
  #undef HAVE_SELECT
  
! /* Define if you have the setlocale function.  */
  #undef HAVE_SETLOCALE
  
! /* Define if you have the sigaction function.  */
  #undef HAVE_SIGACTION
  
! /* Define if you have the sleep function.  */
  #undef HAVE_SLEEP
  
! /* Define if you have the stat function.  */
! #undef HAVE_STAT
! 
! /* Define if you have the strerror function.  */
! #undef HAVE_STRERROR
! 
! /* Define if you have the time function.  */
! #undef HAVE_TIME
! 
! /* Define if you have the uname function.  */
! #undef HAVE_UNAME
! 
! /* Define if you have the unlink function.  */
! #undef HAVE_UNLINK
! 
! /* Define if you have the usleep function.  */
! #undef HAVE_USLEEP
! 
! /* Define if you have the utime function.  */
! #undef HAVE_UTIME
! 
! /* Define if you have the <arpa/inet.h> header file.  */
! #undef HAVE_ARPA_INET_H
! 
! /* Define if you have the <bstring.h> header file.  */
! #undef HAVE_BSTRING_H
! 
! /* Define if you have the <dirent.h> header file.  */
! #undef HAVE_DIRENT_H
! 
! /* Define if you have the <dlfcn.h> header file.  */
! #undef HAVE_DLFCN_H
  
! /* Define if you have the <execinfo.h> header file.  */
! #undef HAVE_EXECINFO_H
  
! /* Define if you have the <fcntl.h> header file.  */
! #undef HAVE_FCNTL_H
  
! /* Define if you have the <inttypes.h> header file.  */
! #undef HAVE_INTTYPES_H
  
! /* Define if you have the <langinfo.h> header file.  */
! #undef HAVE_LANGINFO_H
  
! /* Define if you have the <locale.h> header file.  */
! #undef HAVE_LOCALE_H
  
! /* Define if you have the <net/if.h> header file.  */
! #undef HAVE_NET_IF_H
  
! /* Define if you have the <netdb.h> header file.  */
! #undef HAVE_NETDB_H
  
! /* Define if you have the <netinet/in.h> header file.  */
! #undef HAVE_NETINET_IN_H
  
! /* Define if you have the <pwd.h> header file.  */
! #undef HAVE_PWD_H
  
! /* Define if you have the <stdint.h> header file.  */
! #undef HAVE_STDINT_H
  
! /* Define if you have the <sys/config.h> header file.  */
  #undef HAVE_SYS_CONFIG_H
  
! /* Define if you have the <sys/filio.h> header file.  */
  #undef HAVE_SYS_FILIO_H
  
! /* Define if you have the <sys/ioctl.h> header file.  */
  #undef HAVE_SYS_IOCTL_H
  
! /* Define if you have the <sys/select.h> header file.  */
  #undef HAVE_SYS_SELECT_H
  
! /* Define if you have the <sys/socket.h> header file.  */
  #undef HAVE_SYS_SOCKET_H
  
! /* Define if you have the <sys/stat.h> header file.  */
  #undef HAVE_SYS_STAT_H
  
! /* Define if you have the <sys/time.h> header file.  */
  #undef HAVE_SYS_TIME_H
  
! /* Define if you have the <sys/types.h> header file.  */
  #undef HAVE_SYS_TYPES_H
  
! /* Define if you have the <unistd.h> header file.  */
! #undef HAVE_UNISTD_H
! 
! /* Name of package */
! #undef PACKAGE
! 
! /* Version number of package */
! #undef VERSION
! 
! /* Define if libltdl is in use. */
! #undef USE_LTDL
! 
! /* Define if system properties shouldn't be read from getenv(GCJ_PROPERTIES). */
! #undef DISABLE_GETENV_PROPERTIES
! 
! /* Define if we should ignore arguments to main(). */
! #undef DISABLE_MAIN_ARGS
! 
! /* Define if MinGW libgcj uses the Windows UNICODE OS API. */
! #undef MINGW_LIBGCJ_UNICODE
! 
! /* Define if if the synchronization code should try to avoid pthread_self calls by caching thread IDs in a hashtable. */
! #undef SLOW_PTHREAD_SELF
! 
! /* Define this if you want runtime debugging enabled. */
! #undef DEBUG
! 
! /* Define if you want a bytecode interpreter. */
! #undef INTERPRETER
! 
! /* Define if the compiler is configured for setjmp/longjmp exceptions. */
! #undef SJLJ_EXCEPTIONS
  
! /* Define if java.net native functions should be stubbed out. */
! #undef DISABLE_JAVA_NET
  
! /* Define if we're to use libffi. */
! #undef USE_LIBFFI
  
! /* Define if you are using JVMPI. */
! #undef ENABLE_JVMPI
  
! /* Indicate that linker is not able to 8-byte align static data */
! #undef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS
  
! /* Define if you're running eCos. */
! #undef ECOS
  
! /* Define if you have int32_t and uint32_t. */
! #undef HAVE_INT32_DEFINED
  
! /* Define if you have int32_t and uint32_t. */
! #undef HAVE_INT32_DEFINED
  
! /* Define if you have u_int32_t */
! #undef HAVE_BSD_INT32_DEFINED
  
! /* Define if you have u_int32_t */
! #undef HAVE_BSD_INT32_DEFINED
  
! /* Define is you have 'mktime' in <time.h> */
! #undef HAVE_MKTIME
  
! /* Define is you have 'localtime' in <time.h> */
! #undef HAVE_LOCALTIME
  
! /* Define if Boehm GC in use. */
! #undef HAVE_BOEHM_GC
  
! /* Define if using POSIX threads on Linux. */
! #undef LINUX_THREADS
  
! /* Define if using POSIX threads that have the mutexattr functions. */
! #undef HAVE_PTHREAD_MUTEXATTR_INIT
  
! /* Required define if using POSIX threads */
! #undef _REENTRANT
  
! /* Required define if using POSIX threads */
! #undef _POSIX_PTHREAD_SEMANTICS
  
  /* Define if hash synchronization is in use */
  #undef JV_HASH_SYNCHRONIZATION
  
! /* Define if you have memmove. */
! #undef HAVE_MEMMOVE
! 
! /* Define if you have memcpy. */
! #undef HAVE_MEMCPY
! 
! /* Define if you have strerror. */
! #undef HAVE_STRERROR
  
! /* Define if you have time. */
! #undef HAVE_TIME
  
! /* Define if you have the 'gmtime_r' function */
! #undef HAVE_GMTIME_R
  
! /* Define if you have the 'localtime_r' function. */
! #undef HAVE_LOCALTIME_R
  
! /* Define if usleep is declared in <unistd.h>. */
! #undef HAVE_USLEEP_DECL
  
! /* Define if using POSIX threads that have the mutexattr functions. */
! #undef HAVE_PTHREAD_MUTEXATTR_INIT
  
  /* Define if getuid() and friends are missing. */
  #undef NO_GETUID
  
! /* Define if your platform has a working backtrace() function. */
! #undef HAVE_BACKTRACE
! 
! /* Define if your platform has a working backtrace() function. */
! #undef HAVE_BACKTRACE
! 
! /* Define if your platform has a working backtrace() function. */
! #undef HAVE_BACKTRACE
! 
! /* Define if you have dladdr() */
! #undef HAVE_DLADDR
! 
! /* Define if you have /proc/self/exe */
! #undef HAVE_PROC_SELF_EXE
! 
! /* Define if you have /proc/self/exe */
! #undef HAVE_PROC_SELF_EXE
! 
! /* Define if you have the iconv() function. */
! #undef HAVE_ICONV
! 
! /* Define as const if the declaration of iconv() needs const. */
! #undef ICONV_CONST
! 
! /* Define if your <locale.h> file defines LC_MESSAGES. */
! #undef HAVE_LC_MESSAGES
! 
! /* Define if you have the 'gethostbyname_r' function. */
! #undef HAVE_GETHOSTBYNAME_R
! 
! /* Define if gethostbyname_r returns 'int'. */
! #undef GETHOSTBYNAME_R_RETURNS_INT
! 
! /* Required define if using POSIX threads */
! #undef _REENTRANT
  
! /* Define if struct hostent_data is defined in netdb.h */
! #undef HAVE_STRUCT_HOSTENT_DATA
  
! /* Define if you have the 'gethostbyaddr_r' function. */
! #undef HAVE_GETHOSTBYADDR_R
  
! /* Define if gethostbyaddr_r returns 'int'. */
! #undef GETHOSTBYADDR_R_RETURNS_INT
  
! /* Define if you have the 'gethostname' function. */
! #undef HAVE_GETHOSTNAME
  
! /* Define if gethostname is declared in <unistd.h>. */
! #undef HAVE_GETHOSTNAME_DECL
  
! /* Define if usleep is declared in <unistd.h>. */
! #undef HAVE_USLEEP_DECL
  
  /* Define if pthread_mutex_t has m_count member. */
  #undef PTHREAD_MUTEX_HAVE_M_COUNT
--- 1,416 ----
! /* include/config.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.
!    */
  #undef CRAY_STACKSEG_END
  
! /* Define to 1 if using `alloca.c'. */
! #undef C_ALLOCA
! 
! /* Define this if you want runtime debugging enabled. */
! #undef DEBUG
! 
! /* Define if system properties shouldn't be read from
!    getenv("GCJ_PROPERTIES"). */
! #undef DISABLE_GETENV_PROPERTIES
! 
! /* Define if java.net native functions should be stubbed out. */
! #undef DISABLE_JAVA_NET
! 
! /* Define if we should ignore arguments to main(). */
! #undef DISABLE_MAIN_ARGS
! 
! /* Define if you're running eCos. */
! #undef ECOS
! 
! /* Define if you are using JVMPI. */
! #undef ENABLE_JVMPI
! 
! /* Short GCJ version ID */
! #undef GCJVERSION
! 
! /* Define if gethostbyaddr_r returns 'int'. */
! #undef GETHOSTBYADDR_R_RETURNS_INT
! 
! /* Define if gethostbyname_r returns 'int'. */
! #undef GETHOSTBYNAME_R_RETURNS_INT
! 
! /* Define to 1 if you have the `access' function. */
! #undef HAVE_ACCESS
! 
! /* Define to 1 if you have `alloca', as a function or macro. */
  #undef HAVE_ALLOCA
  
! /* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
!    */
  #undef HAVE_ALLOCA_H
  
! /* Define to 1 if you have the <arpa/inet.h> header file. */
! #undef HAVE_ARPA_INET_H
  
! /* Define if your platform has a working backtrace() function. */
! #undef HAVE_BACKTRACE
  
! /* Define if Boehm GC in use. */
! #undef HAVE_BOEHM_GC
  
! /* Define if you have u_int32_t */
! #undef HAVE_BSD_INT32_DEFINED
  
! /* Define to 1 if you have the <bstring.h> header file. */
! #undef HAVE_BSTRING_H
  
! /* Define to 1 if you have the `chmod' function. */
! #undef HAVE_CHMOD
  
! /* Define to 1 if you have the <dirent.h> header file. */
! #undef HAVE_DIRENT_H
  
! /* Define if you have dladdr() */
! #undef HAVE_DLADDR
  
! /* Define to 1 if you have the <dlfcn.h> header file. */
! #undef HAVE_DLFCN_H
  
! /* Define if dlopen is available */
! #undef HAVE_DLOPEN
  
! /* Define to 1 if you have the <execinfo.h> header file. */
! #undef HAVE_EXECINFO_H
  
! /* Define to 1 if you have the `execvp' function. */
  #undef HAVE_EXECVP
  
! /* 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 `ftime' function. */
  #undef HAVE_FTIME
  
! /* Define to 1 if you have the `ftruncate' function. */
  #undef HAVE_FTRUNCATE
  
! /* Define to 1 if you have the `getcwd' function. */
  #undef HAVE_GETCWD
  
! /* Define if you have the 'gethostbyaddr_r' function. */
  #undef HAVE_GETHOSTBYADDR_R
  
! /* Define if you have the 'gethostbyname_r' function. */
  #undef HAVE_GETHOSTBYNAME_R
  
! /* Define if you have the 'gethostname' function. */
  #undef HAVE_GETHOSTNAME
  
! /* Define if gethostname is declared in <unistd.h>. */
! #undef HAVE_GETHOSTNAME_DECL
! 
! /* Define to 1 if you have the `getpagesize' function. */
  #undef HAVE_GETPAGESIZE
  
! /* Define to 1 if you have the `getpwuid_r' function. */
  #undef HAVE_GETPWUID_R
  
! /* Define to 1 if you have the `gettimeofday' function. */
  #undef HAVE_GETTIMEOFDAY
  
! /* Define to 1 if you have the `gmtime_r' function. */
  #undef HAVE_GMTIME_R
  
! /* Define if you have the iconv() function. */
! #undef HAVE_ICONV
! 
! /* Define if inet6 structures are defined in netinet/in.h. */
! #undef HAVE_INET6
! 
! /* Define to 1 if you have the `inet_addr' function. */
  #undef HAVE_INET_ADDR
  
! /* Define to 1 if you have the `inet_aton' function. */
  #undef HAVE_INET_ATON
  
! /* Define to 1 if you have the `inet_ntoa' function. */
  #undef HAVE_INET_NTOA
  
! /* Define to 1 if you have the `inet_pton' function. */
  #undef HAVE_INET_PTON
  
! /* Define if you have int32_t and uint32_t. */
! #undef HAVE_INT32_DEFINED
! 
! /* Define if <inttypes.h> is available */
! #undef HAVE_INTTYPES_H
! 
! /* Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h. */
! #undef HAVE_IN_ADDR_T
! 
! /* Define to 1 if you have the `ioctl' function. */
  #undef HAVE_IOCTL
  
! /* Define to 1 if you have the <langinfo.h> header file. */
! #undef HAVE_LANGINFO_H
! 
! /* Define if your <locale.h> file defines LC_MESSAGES. */
! #undef HAVE_LC_MESSAGES
! 
! /* Define to 1 if you have the <locale.h> header file. */
! #undef HAVE_LOCALE_H
! 
! /* Define is you have 'localtime' in <time.h> */
! #undef HAVE_LOCALTIME
! 
! /* Define to 1 if you have the `localtime_r' function. */
  #undef HAVE_LOCALTIME_R
  
! /* Define to 1 if you have the `memcpy' function. */
  #undef HAVE_MEMCPY
  
! /* Define to 1 if you have the `memmove' function. */
  #undef HAVE_MEMMOVE
  
! /* Define to 1 if you have the <memory.h> header file. */
! #undef HAVE_MEMORY_H
! 
! /* Define to 1 if you have the `mkdir' function. */
  #undef HAVE_MKDIR
  
! /* Define is you have 'mktime' in <time.h> */
! #undef HAVE_MKTIME
! 
! /* Define to 1 if you have a working `mmap' system call. */
! #undef HAVE_MMAP
! 
! /* Define to 1 if you have the <netdb.h> header file. */
! #undef HAVE_NETDB_H
! 
! /* Define to 1 if you have the <netinet/in.h> header file. */
! #undef HAVE_NETINET_IN_H
! 
! /* Define to 1 if you have the <net/if.h> header file. */
! #undef HAVE_NET_IF_H
! 
! /* Define to 1 if you have the `nl_langinfo' function. */
  #undef HAVE_NL_LANGINFO
  
! /* Define to 1 if you have the `open' function. */
  #undef HAVE_OPEN
  
! /* Define to 1 if you have the `opendir' function. */
  #undef HAVE_OPENDIR
  
! /* Define to 1 if you have the `pipe' function. */
  #undef HAVE_PIPE
  
! /* Define if you have /proc/self/exe */
! #undef HAVE_PROC_SELF_EXE
! 
! /* Define if using POSIX threads that have the mutexattr functions. */
! #undef HAVE_PTHREAD_MUTEXATTR_INIT
! 
! /* Define to 1 if you have the `pthread_mutexattr_setkind_np' function. */
  #undef HAVE_PTHREAD_MUTEXATTR_SETKIND_NP
  
! /* Define to 1 if you have the `pthread_mutexattr_settype' function. */
  #undef HAVE_PTHREAD_MUTEXATTR_SETTYPE
  
! /* Define to 1 if you have the <pwd.h> header file. */
! #undef HAVE_PWD_H
! 
! /* Define to 1 if you have the `readdir_r' function. */
  #undef HAVE_READDIR_R
  
! /* Define to 1 if you have the `realpath' function. */
  #undef HAVE_REALPATH
  
! /* Define to 1 if you have the `rename' function. */
  #undef HAVE_RENAME
  
! /* Define to 1 if you have the `rmdir' function. */
  #undef HAVE_RMDIR
  
! /* Define to 1 if you have the `sched_yield' function. */
  #undef HAVE_SCHED_YIELD
  
! /* Define to 1 if you have the `select' function. */
  #undef HAVE_SELECT
  
! /* Define to 1 if you have the `setlocale' function. */
  #undef HAVE_SETLOCALE
  
! /* Define to 1 if you have the `sigaction' function. */
  #undef HAVE_SIGACTION
  
! /* Define to 1 if you have the `sleep' function. */
  #undef HAVE_SLEEP
  
! /* Define it socklen_t typedef is in sys/socket.h. */
! #undef HAVE_SOCKLEN_T
  
! /* Define to 1 if you have the `stat' function. */
! #undef HAVE_STAT
  
! /* 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 <strings.h> header file. */
! #undef HAVE_STRINGS_H
  
! /* Define to 1 if you have the <string.h> header file. */
! #undef HAVE_STRING_H
  
! /* Define if struct hostent_data is defined in netdb.h */
! #undef HAVE_STRUCT_HOSTENT_DATA
  
! /* Define if struct ipv6_mreq is defined in netinet/in.h. */
! #undef HAVE_STRUCT_IPV6_MREQ
  
! /* Define if struct ip_mreq is defined in netinet/in.h. */
! #undef HAVE_STRUCT_IP_MREQ
  
! /* Define to 1 if `tm_zone' is member of `struct tm'. */
! #undef HAVE_STRUCT_TM_TM_ZONE
  
! /* 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/select.h> header file. */
  #undef HAVE_SYS_SELECT_H
  
! /* Define to 1 if you have the <sys/socket.h> header file. */
  #undef HAVE_SYS_SOCKET_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 <sys/wait.h> that is POSIX.1 compatible. */
! #undef HAVE_SYS_WAIT_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 to 1 if you have the `uname' function. */
! #undef HAVE_UNAME
  
! /* 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 `unlink' function. */
! #undef HAVE_UNLINK
  
! /* Define to 1 if you have the `usleep' function. */
! #undef HAVE_USLEEP
  
! /* Define if usleep is declared in <unistd.h>. */
! #undef HAVE_USLEEP_DECL
  
! /* Define to 1 if you have the `utime' function. */
! #undef HAVE_UTIME
  
! /* Define to 1 if you have the file `AC_File'. */
! #undef HAVE__PROC_SELF_EXE
  
! /* 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
  
! /* Define if you want a bytecode interpreter. */
! #undef INTERPRETER
  
! /* API compatibility version string */
! #undef JV_API_VERSION
  
  /* Define if hash synchronization is in use */
  #undef JV_HASH_SYNCHRONIZATION
  
! /* Define if <inttypes.h> is available */
! #undef JV_HAVE_INTTYPES_H
  
! /* Indicate that linker is not able to 8-byte align static data */
! #undef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS
  
! /* Compatibility version string */
! #undef JV_VERSION
  
! /* Define if we want to use debug calls into the garbage collector. */
! #undef LIBGCJ_GC_DEBUG
  
! /* Define if using POSIX threads on Linux. */
! #undef LINUX_THREADS
  
! /* Define if MinGW libgcj uses the Windows UNICODE OS API. */
! #undef MINGW_LIBGCJ_UNICODE
  
  /* Define if getuid() and friends are missing. */
  #undef NO_GETUID
  
! /* Define to 1 if your C compiler doesn't accept -c and -o together. */
! #undef NO_MINUS_C_MINUS_O
  
! /* 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 pthread_mutex_t has m_count member. */
  #undef PTHREAD_MUTEX_HAVE_M_COUNT
***************
*** 425,466 ****
  /* Define if pthread_mutex_t has __m_count member. */
  #undef PTHREAD_MUTEX_HAVE___M_COUNT
  
- /* Define if dlopen is available */
- #undef HAVE_DLOPEN
- 
  /* The number of bytes in type void * */
  #undef SIZEOF_VOID_P
  
! /* Short GCJ version ID */
! #undef GCJVERSION
  
! /* Define if <inttypes.h> is available */
! #undef HAVE_INTTYPES_H
  
! /* Define if <inttypes.h> is available */
! #undef JV_HAVE_INTTYPES_H
  
! /* Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h. */
! #undef HAVE_IN_ADDR_T
  
! /* Define if struct ip_mreq is defined in netinet/in.h. */
! #undef HAVE_STRUCT_IP_MREQ
  
! /* Define if struct ipv6_mreq is defined in netinet/in.h. */
! #undef HAVE_STRUCT_IPV6_MREQ
  
! /* Define if inet6 structures are defined in netinet/in.h. */
! #undef HAVE_INET6
  
! /* Define it socklen_t typedef is in sys/socket.h. */
! #undef HAVE_SOCKLEN_T
  
! /* Define if struct tm has tm_gmtoff field. */
! #undef STRUCT_TM_HAS_GMTOFF
  
! /* Define if global 'timezone' exists. */
! #undef HAVE_TIMEZONE
  
! /* Define if your platform has the global _timezone variable. */
! #undef HAVE_UNDERSCORE_TIMEZONE
  
--- 418,470 ----
  /* Define if pthread_mutex_t has __m_count member. */
  #undef PTHREAD_MUTEX_HAVE___M_COUNT
  
  /* The number of bytes in type void * */
  #undef SIZEOF_VOID_P
  
! /* Define if the compiler is configured for setjmp/longjmp exceptions. */
! #undef SJLJ_EXCEPTIONS
  
! /* Define if if the synchronization code should try to avoid pthread_self
!    calls by caching thread IDs in a hashtable. */
! #undef SLOW_PTHREAD_SELF
  
! /* If using the C implementation of alloca, define if you know the
!    direction of stack growth for your system; otherwise it will be
!    automatically deduced at run-time.
! 	STACK_DIRECTION > 0 => grows toward higher addresses
! 	STACK_DIRECTION < 0 => grows toward lower addresses
! 	STACK_DIRECTION = 0 => direction of growth unknown */
! #undef STACK_DIRECTION
  
! /* 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 your <sys/time.h> declares `struct tm'. */
! #undef TM_IN_SYS_TIME
  
! /* Define if we're to use libffi. */
! #undef USE_LIBFFI
  
! /* Define if libltdl is in use. */
! #undef USE_LTDL
  
! /* 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
  
+ /* Required define if using POSIX threads */
+ #undef _POSIX_PTHREAD_SEMANTICS
+ 
+ /* Required define if using POSIX threads */
+ #undef _REENTRANT
+ 
+ /* Define to `int' if <sys/types.h> does not define. */
+ #undef ssize_t
diff -Nrcpad gcc-3.4.3/libjava/include/darwin-signal.h gcc-4.0.0/libjava/include/darwin-signal.h
*** gcc-3.4.3/libjava/include/darwin-signal.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/include/darwin-signal.h	Thu Jul  1 04:09:07 2004
***************
*** 0 ****
--- 1,51 ----
+ /* darwin-signal.h - Catch runtime signals and turn them into exceptions,
+    on a Darwin system.  */
+ 
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ /* This file is really more of a specification.  The rest of the system
+    should be arranged so that this Just Works.  */
+ 
+ #ifndef JAVA_SIGNAL_H
+ # define JAVA_SIGNAL_H 1
+ 
+ #include <sys/types.h>
+ #include <stdio.h>
+ #include <signal.h>
+ 
+ typedef void (* SIG_PF)(int);
+ 
+ # define HANDLE_SEGV 1
+ # undef HANDLE_FPE
+ 
+ # define SIGNAL_HANDLER(_name)					\
+   static void _name (int _dummy __attribute__ ((unused)))
+ 
+ # define MAKE_THROW_FRAME(_exception)
+ 
+ # define INIT_SEGV				\
+   do {						\
+       struct sigaction sa;			\
+       sa.sa_handler = catch_segv;		\
+       sigemptyset (&sa.sa_mask);		\
+       sa.sa_flags = SA_NODEFER;			\
+       sigaction (SIGBUS, &sa, NULL);		\
+       sigaction (SIGSEGV, &sa, NULL);		\
+     } while (0)
+ 
+ # define INIT_FPE				\
+   do {						\
+       struct sigaction sa;			\
+       sa.sa_handler = catch_fpe;		\
+       sigemptyset (&sa.sa_mask);		\
+       sa.sa_flags = SA_NODEFER;			\
+       sigaction (SIGFPE, &sa, NULL);		\
+     } while (0)
+ 
+ #endif /* JAVA_SIGNAL_H */
diff -Nrcpad gcc-3.4.3/libjava/include/default-signal.h gcc-4.0.0/libjava/include/default-signal.h
*** gcc-3.4.3/libjava/include/default-signal.h	Fri Jun 13 12:20:45 2003
--- gcc-4.0.0/libjava/include/default-signal.h	Sun Sep 26 20:38:48 2004
*************** details.  */
*** 19,25 ****
  #include <signal.h>
  
  #define SIGNAL_HANDLER(_name)			\
! static void _name (int _dummy)
  
  #define INIT_SEGV						\
  do								\
--- 19,25 ----
  #include <signal.h>
  
  #define SIGNAL_HANDLER(_name)			\
! static void _name (int _dummy __attribute__ ((__unused__)))
  
  #define INIT_SEGV						\
  do								\
diff -Nrcpad gcc-3.4.3/libjava/include/execution.h gcc-4.0.0/libjava/include/execution.h
*** gcc-3.4.3/libjava/include/execution.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/include/execution.h	Thu Nov 25 03:47:00 2004
***************
*** 0 ****
--- 1,146 ----
+ // execution.h - Execution engines. -*- c++ -*-
+ 
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #ifndef __JAVA_EXECUTION_H__
+ #define __JAVA_EXECUTION_H__
+ 
+ // This represents one execution engine.  Note that we use function
+ // pointers and not virtual methods to avoid calls to
+ // __cxa_call_unexpected and the like.
+ struct _Jv_ExecutionEngine
+ {
+  public:
+ 
+   void (*unregister) (jclass);
+   // FIXME: probably should handle this elsewhere, see how
+   // interpreter does it.
+   bool (*need_resolve_string_fields) ();
+   void (*verify) (jclass);
+   void (*allocate_static_fields) (jclass, int);
+   void (*create_ncode) (jclass);
+   _Jv_ResolvedMethod *(*resolve_method) (_Jv_Method *, jclass,
+ 					 jboolean, jint);
+   void (*post_miranda_hook) (jclass);
+ };
+ 
+ // This handles all gcj-compiled code, including BC ABI.
+ struct _Jv_CompiledEngine : public _Jv_ExecutionEngine
+ {
+  public:
+ 
+   static void do_unregister (jclass)
+   {
+   }
+ 
+   static bool do_need_resolve_string_fields ()
+   {
+     return true;
+   }
+ 
+   static void do_verify (jclass klass)
+   {
+     _Jv_Linker::verify_type_assertions (klass);
+   }
+ 
+   static _Jv_ResolvedMethod *do_resolve_method (_Jv_Method *, jclass,
+ 						jboolean, jint)
+   {
+     return NULL;
+   }
+ 
+   static void do_allocate_static_fields (jclass, int)
+   {
+     // Compiled classes don't need this.
+   }
+ 
+   static void do_create_ncode (jclass)
+   {
+     // Not needed.
+   }
+ 
+   static void do_post_miranda_hook (jclass)
+   {
+     // Not needed.
+   }
+ 
+   _Jv_CompiledEngine ()
+   {
+     unregister = do_unregister;
+     need_resolve_string_fields = do_need_resolve_string_fields;
+     verify = do_verify;
+     allocate_static_fields = do_allocate_static_fields;
+     create_ncode = do_create_ncode;
+     resolve_method = do_resolve_method;
+     post_miranda_hook = do_post_miranda_hook;
+   }
+ 
+   // These operators make it so we don't have to link in libstdc++.
+   void *operator new (size_t bytes)
+   {
+     return _Jv_Malloc(bytes);
+   }
+ 
+   void operator delete (void *mem)
+   {
+     _Jv_Free(mem);
+   }
+ };
+ 
+ // This handles interpreted code.
+ class _Jv_InterpreterEngine : public _Jv_ExecutionEngine
+ {
+  public:
+ 
+   static void do_verify (jclass);
+   static void do_allocate_static_fields (jclass, int);
+   static void do_create_ncode (jclass);
+   static _Jv_ResolvedMethod *do_resolve_method (_Jv_Method *, jclass,
+ 						jboolean, jint);
+ 
+   static bool do_need_resolve_string_fields ()
+   {
+     return false;
+   }
+ 
+   static void do_unregister(jclass klass)
+   {
+     _Jv_UnregisterClass(klass);
+   }
+ 
+   static void do_post_miranda_hook (jclass);
+ 
+   _Jv_InterpreterEngine ()
+   {
+     unregister = do_unregister;
+     need_resolve_string_fields = do_need_resolve_string_fields;
+     verify = do_verify;
+     allocate_static_fields = do_allocate_static_fields;
+     create_ncode = do_create_ncode;
+     resolve_method = do_resolve_method;
+     post_miranda_hook = do_post_miranda_hook;
+   }
+ 
+   // These operators make it so we don't have to link in libstdc++.
+   void *operator new (size_t bytes)
+   {
+     return _Jv_Malloc(bytes);
+   }
+ 
+   void operator delete (void *mem)
+   {
+     _Jv_Free(mem);
+   }
+ };
+ 
+ 
+ extern _Jv_InterpreterEngine _Jv_soleInterpreterEngine;
+ extern _Jv_CompiledEngine _Jv_soleCompiledEngine;
+ 
+ #endif // __JAVA_EXECUTION_H__
diff -Nrcpad gcc-3.4.3/libjava/include/i386-signal.h gcc-4.0.0/libjava/include/i386-signal.h
*** gcc-3.4.3/libjava/include/i386-signal.h	Wed Jul 30 14:50:02 2003
--- gcc-4.0.0/libjava/include/i386-signal.h	Sun Sep 26 20:38:48 2004
*************** details.  */
*** 20,32 ****
  #define HANDLE_FPE 1
  
  #define SIGNAL_HANDLER(_name)	\
! static void _name (int _dummy)
  
  #define MAKE_THROW_FRAME(_exception)					\
  do									\
  {									\
    void **_p = (void **)&_dummy;						\
!   struct sigcontext_struct *_regs = (struct sigcontext_struct *)++_p;	\
  									\
    /* Advance the program counter so that it is after the start of the	\
       instruction:  the x86 exception handler expects			\
--- 20,32 ----
  #define HANDLE_FPE 1
  
  #define SIGNAL_HANDLER(_name)	\
! static void _name (int _dummy __attribute__ ((__unused__)))
  
  #define MAKE_THROW_FRAME(_exception)					\
  do									\
  {									\
    void **_p = (void **)&_dummy;						\
!   volatile struct sigcontext_struct *_regs = (struct sigcontext_struct *)++_p;	\
  									\
    /* Advance the program counter so that it is after the start of the	\
       instruction:  the x86 exception handler expects			\
*************** while (0)
*** 40,46 ****
  do									\
  {									\
    void **_p = (void **)&_dummy;						\
!   struct sigcontext_struct *_regs = (struct sigcontext_struct *)++_p;	\
  									\
    register unsigned char *_eip = (unsigned char *)_regs->eip;		\
  									\
--- 40,46 ----
  do									\
  {									\
    void **_p = (void **)&_dummy;						\
!   volatile struct sigcontext_struct *_regs = (struct sigcontext_struct *)++_p;\
  									\
    register unsigned char *_eip = (unsigned char *)_regs->eip;		\
  									\
diff -Nrcpad gcc-3.4.3/libjava/include/java-chartables.h gcc-4.0.0/libjava/include/java-chartables.h
*** gcc-3.4.3/libjava/include/java-chartables.h	Wed Mar  6 18:54:40 2002
--- gcc-4.0.0/libjava/include/java-chartables.h	Fri Jul  9 21:00:12 2004
*************** exception statement from your version. *
*** 74,284 ****
   * character gives the actual index into <code>data</code>.
   */
  static const jchar blocks[] = {
!     450, 450, 449, 300, 299, 416, 504, 638, 513, 656,
!     439, 713, 343, 681, 575, 440, 257, 599, 761, 761,
!     880, 867, 65167, 830, 65413, 65381, 64949, 64929, 65469, 702,
!     65470, 65513, 65192, 65326, 559, 65185, 65437, 65121, 65449, 64288,
!     195, 269, 254, 64353, 64346, 261, 259, 248, 65163, 547,
!     600, 449, 502, 470, 65249, 547, 64938, 64341, 355, 65123,
!     246, 253, 65027, 64995, 64963, 64931, 64899, 64867, 64835, 64803,
!     64771, 64739, 95, 74, 165, 307, 65032, 93, 335, 418,
!     63081, 291, 290, 63681, 65104, 258, 257, 64067, 64648, 65191,
!     192, 64673, 64399, 62589, 153, 64273, 65050, 64802, 64297, 53,
!     62393, 65105, 64712, 65461, 62265, 64146, 65413, 65333, 64078, 63334,
!     65317, 64209, 64355, 64564, 65247, 63331, 64682, 64130, 64953, 63203,
!     65087, 64705, 65097, 63467, 63247, 62184, 64921, 62947, 63844, 64508,
!     64913, 62819, 62787, 62524, 62518, 61291, 63588, 63556, 64594, 63492,
!     63460, 64521, 63396, 61084, 64394, 63300, 63476, 63236, 63428, 63372,
!     62571, 62668, 63276, 63044, 62459, 63047, 62019, 62916, 62884, 60577,
!     62819, 62788, 62756, 62724, 62692, 62660, 62628, 62596, 62564, 62532,
!     62500, 62468, 62436, 62404, 62372, 62340, 62308, 62276, 62244, 62083,
!     63345, 62148, 62116, 63281, 61123, 61091, 61059, 61027, 61924, 62620,
!     62783, 60745, 62161, 61764, 59629, 59422, 61668, 62865, 60675, 60643,
!     60611, 60579, 60547, 60515, 60483, 60451, 60419, 60387, 60355, 60323,
!     60291, 60259, 60227, 60195, 60163, 60131, 60099, 60067, 60035, 60003,
!     59971, 59939, 59907, 59875, 59843, 59811, 59779, 59747, 59715, 59683,
!     59651, 59619, 59587, 59555, 59523, 59491, 59459, 59427, 59395, 59363,
!     58625, 58593, 58561, 58529, 61393, 58465, 58433, 58407, 61313, 61265,
!     61265, 61265, 61265, 61249, 57773, 61248, 61248, 61248, 57824, 58239,
!     61184, 59859, 60389, 58591, 61134, 61279, 58512, 61247, 61155, 61302,
!     61038, 61290, 61303, 61298, 61067, 61389, 61047, 60959, 60961, 61279,
!     61399, 61072, 61389, 61403, 61283, 57891, 57859, 57827, 60709, 60727,
!     60691, 61206, 61186, 60737, 60727, 60717, 60453, 60421, 60389, 60357,
!     60360, 60022, 60259, 60262, 59824, 60165, 60133, 59875, 57155, 57123,
!     57091, 57059, 59658, 59933, 60242, 60233, 60223, 60127, 56835, 56803,
!     59685, 59653, 59621, 59589, 59557, 59525, 59493, 59461, 56515, 56483,
!     56451, 56419, 56387, 56355, 56323, 56291, 56259, 56227, 56195, 56163,
!     56131, 56099, 56067, 56035, 56003, 55971, 55939, 55907, 55875, 55843,
!     55811, 55779, 55747, 55715, 55683, 55651, 55619, 55587, 55555, 55523,
!     55491, 55459, 55427, 55395, 55363, 55331, 55299, 55267, 55235, 55203,
!     55171, 55139, 58027, 57989, 57957, 57962, 57893, 57861, 57829, 57797,
!     57765, 57733, 57736, 56713, 58274, 57293, 55587, 55556, 58178, 55491,
!     55460, 56529, 56492, 54907, 55332, 55300, 57954, 52958, 54275, 54243,
!     57616, 57571, 57797, 57521, 57521, 57688, 57105, 57390, 57357, 57325,
!     57293, 56934, 57229, 57197, 57167, 57134, 54628, 54596, 54564, 54532,
!     54500, 54468, 54436, 54404, 54372, 54340, 54308, 54276, 54244, 54212,
!     54180, 54148, 54116, 54084, 54052, 54020, 53988, 53956, 53924, 53892,
!     53860, 53828, 53796, 53764, 53732, 53700, 53668, 53636, 53604, 53572,
!     53540, 53508, 53476, 53444, 53412, 53380, 53348, 53316, 53284, 53252,
!     53220, 53188, 53156, 53124, 53092, 53060, 53028, 52996, 52964, 52932,
!     52900, 52868, 52836, 52804, 52772, 52740, 52708, 52676, 52644, 52612,
!     52580, 52548, 52516, 52484, 52452, 52420, 52388, 52356, 52324, 52292,
!     52260, 52228, 52196, 52164, 52132, 52100, 52068, 52036, 52004, 51972,
!     51940, 51908, 51876, 51844, 51812, 51780, 51748, 51716, 51684, 51652,
!     51620, 51588, 51556, 51524, 51492, 51460, 51428, 51396, 51364, 51332,
!     51300, 51268, 51236, 51204, 51172, 51140, 51108, 51076, 51044, 51012,
!     50980, 50948, 50916, 50884, 50852, 50820, 50788, 50756, 50724, 50692,
!     50660, 50628, 50596, 50564, 50532, 50500, 50468, 50436, 50404, 50372,
!     50340, 50308, 50276, 50244, 50212, 50180, 50148, 50116, 50084, 50052,
!     50020, 49988, 49956, 49924, 49892, 49860, 49828, 49796, 49764, 49732,
!     49700, 49668, 49636, 49604, 49572, 49540, 49508, 49476, 49444, 49412,
!     49380, 49348, 49316, 49284, 49252, 49220, 49188, 49156, 49124, 49092,
!     49060, 49028, 48996, 48964, 48932, 48900, 48868, 48836, 48804, 48772,
!     48740, 48708, 48676, 48644, 48612, 48580, 48548, 48516, 48484, 48452,
!     48420, 48388, 48356, 48324, 48292, 48260, 48228, 48196, 48164, 48132,
!     48100, 45792, 47107, 47075, 47972, 47940, 47908, 47876, 47844, 47812,
!     47780, 47748, 47716, 47684, 47652, 47620, 47588, 47556, 47524, 47492,
!     47460, 47428, 47396, 47364, 47332, 47300, 47268, 47236, 47204, 47172,
!     47140, 47108, 47076, 47044, 47012, 46980, 46948, 46916, 46884, 46852,
!     46820, 46788, 46756, 46724, 46692, 46660, 46628, 46596, 46564, 46532,
!     46500, 46468, 46436, 46404, 46372, 46340, 46308, 46276, 46244, 46212,
!     46180, 46148, 46116, 46084, 46052, 46020, 45988, 45956, 45924, 45892,
!     45860, 45828, 45796, 45764, 45732, 45700, 45668, 45636, 45604, 45572,
!     45540, 45508, 45476, 45444, 45412, 45380, 45348, 45316, 45284, 45252,
!     45220, 45188, 45156, 45124, 45092, 45060, 45028, 44996, 44964, 44932,
!     44900, 44868, 44836, 44804, 44772, 44740, 44708, 44676, 44644, 44612,
!     44580, 44548, 44516, 44484, 44452, 44420, 44388, 44356, 44324, 44292,
!     44260, 44228, 44196, 44164, 44132, 44100, 44068, 44036, 44004, 43972,
!     43940, 43908, 43876, 43844, 43812, 43780, 43748, 43716, 43684, 43652,
!     43620, 43588, 43556, 43524, 43492, 43460, 43428, 43396, 43364, 43332,
!     43300, 43268, 43236, 43204, 43172, 43140, 43108, 43076, 43044, 43012,
!     42980, 42948, 42916, 42884, 42852, 42820, 42788, 42756, 42724, 42692,
!     42660, 42628, 42596, 42564, 42532, 42500, 42468, 42436, 42404, 42372,
!     42340, 42308, 42276, 42244, 42212, 42180, 42148, 42116, 42084, 42052,
!     42020, 41988, 41956, 41924, 41892, 41860, 41828, 41796, 41764, 41732,
!     41700, 41668, 41636, 41604, 41572, 41540, 41508, 41476, 41444, 41412,
!     41380, 41348, 41316, 41284, 41252, 41220, 41188, 41156, 41124, 41092,
!     41060, 41028, 40996, 40964, 40932, 40900, 40868, 40836, 40804, 40772,
!     40740, 40708, 40676, 40644, 40612, 40580, 40548, 40516, 40484, 40452,
!     40420, 40388, 40356, 40324, 40292, 40260, 40228, 40196, 40164, 40132,
!     40100, 40068, 40036, 40004, 39972, 39940, 39908, 39876, 39844, 39812,
!     39780, 39748, 39716, 39684, 39652, 39620, 39588, 39556, 39524, 39492,
!     39460, 39428, 39396, 39364, 39332, 39300, 39268, 39236, 39204, 39172,
!     39140, 39108, 39076, 39044, 39012, 38980, 38948, 38916, 38884, 38852,
!     38820, 38788, 38756, 38724, 38692, 38660, 38628, 38596, 38564, 38532,
!     38500, 38468, 38436, 38404, 38372, 38340, 38308, 38276, 38244, 38212,
!     38180, 38148, 38116, 38084, 38052, 38020, 37988, 37956, 37924, 37892,
!     37860, 37828, 37796, 37764, 37732, 37700, 37668, 37636, 37604, 37572,
!     37540, 37508, 37476, 37444, 37412, 37380, 37348, 37316, 37284, 37252,
!     37220, 37188, 37156, 37124, 37092, 37060, 37028, 36996, 36964, 36932,
!     36900, 36868, 36836, 36804, 36772, 36740, 36708, 36676, 36644, 36612,
!     36580, 36548, 36516, 36484, 36452, 36420, 36388, 36356, 36324, 36292,
!     36260, 36228, 36196, 36164, 36132, 36100, 36068, 36036, 36004, 35972,
!     35940, 35908, 35876, 35844, 35812, 35780, 35748, 35716, 35684, 35652,
!     35620, 35588, 35556, 35524, 35492, 35460, 35428, 35396, 35364, 35332,
!     35300, 35268, 35236, 35204, 35172, 35140, 35108, 35076, 35044, 35012,
!     34980, 34948, 34916, 34884, 34852, 34820, 34788, 34756, 34724, 34692,
!     34660, 34628, 34596, 34564, 34532, 34500, 34468, 34436, 34404, 34372,
!     34340, 34308, 34276, 34244, 34212, 34180, 34148, 34116, 34084, 34052,
!     34020, 33988, 33956, 33924, 33892, 33860, 33828, 33796, 33764, 33732,
!     33700, 33668, 33636, 33604, 33572, 33540, 33508, 33476, 33444, 33412,
!     33380, 33348, 33316, 33284, 33252, 33220, 33188, 33156, 33124, 33092,
!     33060, 33028, 32996, 32964, 32932, 32900, 32868, 32836, 32804, 32772,
!     32740, 32708, 32676, 32644, 32612, 32580, 32548, 32516, 32484, 32452,
!     32420, 32388, 32356, 32324, 32292, 32260, 32228, 32196, 32164, 32132,
!     32100, 32068, 32036, 32004, 31972, 31940, 31908, 31876, 31844, 31812,
!     31780, 31748, 31716, 31684, 31652, 31620, 31588, 31556, 31524, 31492,
!     31460, 31428, 31396, 31364, 31332, 31300, 31268, 31236, 31204, 31172,
!     31140, 31108, 31076, 31044, 31012, 30980, 30948, 30916, 30884, 30852,
!     30820, 30788, 30756, 30724, 30692, 30660, 30628, 30596, 30564, 30532,
!     30500, 30468, 30436, 30404, 30372, 30340, 30308, 30276, 30244, 30212,
!     30180, 30148, 30116, 30084, 30052, 30020, 29988, 29956, 29924, 29892,
!     29860, 29828, 29796, 29764, 29732, 29700, 29668, 29636, 29604, 29572,
!     29540, 29508, 29476, 29444, 29412, 29380, 29348, 29316, 29284, 29252,
!     29220, 29188, 29156, 29124, 29092, 29060, 29028, 28996, 28964, 28932,
!     28900, 28868, 28836, 28804, 28772, 28740, 28708, 28676, 28644, 28612,
!     28580, 28548, 28516, 28484, 28452, 28420, 28388, 28356, 28324, 28292,
!     28260, 28228, 28196, 28164, 28132, 28100, 28068, 28036, 28004, 27972,
!     27940, 27908, 27876, 27844, 27812, 27780, 27748, 27716, 27684, 27652,
!     27620, 27588, 27556, 27524, 27492, 27460, 27428, 27396, 27364, 27332,
!     27300, 27268, 27236, 27204, 27172, 27140, 27108, 24816, 26115, 26083,
!     26980, 26948, 26916, 26884, 26852, 26820, 26788, 26756, 26724, 26692,
!     26660, 26628, 26596, 26564, 26532, 26500, 26468, 26436, 26404, 26372,
!     26340, 26308, 26276, 26244, 26212, 26180, 26148, 26116, 26084, 26052,
!     26020, 25988, 25956, 25924, 25892, 25860, 27424, 28123, 28310, 24803,
!     24771, 24739, 24707, 24675, 24643, 24611, 24579, 24547, 24515, 24483,
!     24451, 24419, 24387, 24355, 24323, 24291, 24259, 24227, 24195, 24163,
!     24131, 24099, 24067, 24035, 24003, 23971, 23939, 23907, 23875, 23843,
!     23811, 23779, 23747, 23715, 23683, 23651, 23619, 23587, 23555, 23523,
!     23491, 23459, 23427, 23395, 23363, 23331, 23299, 23267, 23235, 23203,
!     23171, 23139, 23107, 23075, 23043, 23011, 23908, 23876, 23844, 23812,
!     23780, 23748, 23716, 23684, 23652, 23620, 23588, 23556, 23524, 23492,
!     23460, 23428, 23396, 23364, 23332, 23300, 23268, 23236, 23204, 23172,
!     23140, 23108, 23076, 23044, 23012, 22980, 22948, 22916, 22884, 22852,
!     22820, 22788, 22756, 22724, 22692, 22660, 22628, 22596, 22564, 22532,
!     22500, 22468, 22436, 22404, 22372, 22340, 22308, 22276, 22244, 22212,
!     22180, 22148, 22116, 22084, 22052, 22020, 21988, 21956, 21924, 21892,
!     21860, 21828, 21796, 21764, 21732, 21700, 21668, 21636, 21604, 21572,
!     21540, 21508, 21476, 21444, 21412, 21380, 21348, 21316, 21284, 21252,
!     21220, 21188, 21156, 21124, 21092, 21060, 21028, 20996, 20964, 20932,
!     20900, 20868, 20836, 20804, 20772, 20740, 20708, 20676, 20644, 20612,
!     20580, 20548, 20516, 20484, 20452, 20420, 20388, 20356, 20324, 20292,
!     20260, 20228, 20196, 20164, 20132, 20100, 20068, 20036, 20004, 19972,
!     19940, 19908, 19876, 19844, 19812, 19780, 19748, 19716, 19684, 19652,
!     19620, 19588, 19556, 19524, 19492, 19460, 19428, 19396, 19364, 19332,
!     19300, 19268, 19236, 19204, 19172, 19140, 19108, 19076, 19044, 19012,
!     18980, 18948, 18916, 18884, 18852, 18820, 18788, 18756, 18724, 18692,
!     18660, 18628, 18596, 18564, 18532, 18500, 18468, 18436, 18404, 18372,
!     18340, 18308, 18276, 18244, 18212, 18180, 18148, 18116, 18084, 18052,
!     18020, 17988, 17956, 17924, 17892, 17860, 17828, 17796, 17764, 17732,
!     17700, 17668, 17636, 17604, 17572, 17540, 17508, 17476, 17444, 17412,
!     17380, 17348, 17316, 17284, 17252, 17220, 17188, 17156, 17124, 17092,
!     17060, 17028, 16996, 16964, 16932, 16900, 16868, 16836, 16804, 16772,
!     16740, 16708, 16676, 16644, 16612, 16580, 16548, 16516, 16484, 16452,
!     16420, 16388, 16356, 16324, 16292, 16260, 16228, 16196, 16164, 16132,
!     16100, 16068, 16036, 16004, 15972, 15940, 15908, 15876, 15844, 15812,
!     15780, 15748, 15716, 15684, 15652, 15620, 15588, 15556, 15524, 15492,
!     15460, 15428, 15396, 15364, 15332, 15300, 15268, 15236, 15204, 15172,
!     15140, 15108, 15076, 15044, 15012, 14980, 14948, 14916, 14884, 14852,
!     14820, 14788, 14756, 14724, 14692, 14660, 14628, 14596, 14564, 14532,
!     14500, 14468, 14436, 14404, 14372, 14340, 14308, 14276, 14244, 14212,
!     14180, 14148, 14116, 14084, 14052, 14020, 13988, 13956, 13924, 13892,
!     13860, 13828, 13796, 13764, 13732, 13700, 13668, 13636, 13604, 13572,
!     13540, 13508, 13476, 13444, 13412, 13380, 13348, 13316, 13284, 13252,
!     13220, 13188, 13156, 13124, 13092, 13060, 13028, 12996, 12964, 12932,
!     12900, 12868, 12836, 12804, 12772, 10482, 11779, 11747, 15397, 15365,
!     15333, 15301, 15269, 15237, 15205, 15173, 15141, 15109, 15077, 15045,
!     15013, 14981, 14949, 14917, 14885, 14853, 14821, 14789, 14757, 14725,
!     14693, 14661, 14629, 14597, 14565, 14533, 14501, 14469, 14437, 14405,
!     14373, 14341, 14309, 14277, 14245, 14213, 14181, 14149, 14117, 14085,
!     14053, 14021, 13989, 13957, 13925, 13893, 13861, 13829, 13797, 13765,
!     13733, 13701, 13669, 13637, 13605, 13573, 13541, 13509, 13477, 13445,
!     13413, 13381, 13381, 13349, 13317, 13285, 13253, 13221, 13189, 13157,
!     13125, 13093, 13061, 13029, 12997, 12965, 12933, 12901, 12869, 12837,
!     12805, 12773, 12741, 12709, 12677, 12645, 12613, 12581, 12549, 12517,
!     12485, 12453, 12421, 12389, 12357, 12325, 12293, 12261, 12229, 12197,
!     12165, 12133, 12101, 12069, 12037, 12005, 11973, 11941, 11909, 11877,
!     11845, 11813, 11781, 11749, 11717, 11685, 11653, 11621, 11589, 11557,
!     11525, 11493, 11461, 11429, 11397, 11365, 11333, 11301, 11269, 11237,
!     11205, 11173, 11141, 11109, 11077, 11045, 11013, 10981, 10949, 10917,
!     10885, 10853, 10821, 10789, 10757, 10725, 10693, 10661, 10629, 10597,
!     10565, 10533, 10501, 10469, 10437, 10405, 10373, 10341, 10309, 10277,
!     10245, 10213, 10181, 10149, 10117, 10085, 10053, 10021, 9989, 9957,
!     9925, 9893, 9861, 9829, 9797, 9765, 9733, 9701, 9669, 9637,
!     9605, 9573, 9541, 9509, 9477, 9445, 9413, 9381, 9349, 9317,
!     9285, 9253, 9221, 9189, 9157, 9125, 9093, 9061, 9029, 8997,
!     8965, 8933, 8901, 8869, 8837, 8805, 8773, 8741, 8709, 8677,
!     8645, 8613, 8581, 8549, 8517, 8485, 8453, 8421, 8389, 8357,
!     8325, 8293, 8261, 8229, 8197, 8165, 8133, 8101, 8069, 8037,
!     8005, 7973, 7941, 7909, 7877, 7845, 7813, 7781, 7749, 7717,
!     7685, 7653, 7621, 7589, 7557, 7525, 7493, 7461, 7429, 7397,
!     7365, 7333, 7301, 7269, 7237, 7205, 7173, 7141, 7109, 7077,
!     7045, 7013, 4196, 4164, 4132, 4100, 4068, 4036, 4004, 3972,
!     3940, 1640, 2947, 2915, 2883, 2851, 2819, 2787, 2674, 6469,
!     2641, 3350, 3318, 3244, 3235, 3222, 3190, 3158, 3126, 3094,
!     3062, 3030, 2998, 2966, 2934, 2904, 2854, 2838, 2738, 2774,
!     2710, 706, 1987, 5733, 5729, 1023, 2550, 2518, 2486, 1500,
!     2994, 5537, 4032, 448, 433, 2501, 2086, 4735,
    };
  /** Length of blocks. */
  static const int blocks_length = 2048;
--- 74,284 ----
   * character gives the actual index into <code>data</code>.
   */
  static const jchar blocks[] = {
!     450, 450, 449, 300, 299, 416, 504, 732, 607, 750,
!     533, 838, 732, 806, 700, 534, 351, 724, 886, 886,
!     886, 873, 65167, 836, 65413, 65381, 64949, 64929, 27, 708,
!     28, 71, 65192, 65420, 565, 65279, 26, 65215, 38, 64288,
!     65064, 275, 260, 64353, 64346, 267, 265, 254, 65288, 553,
!     606, 455, 508, 476, 64582, 553, 65063, 64341, 361, 64456,
!     252, 259, 64360, 64328, 64296, 64264, 64232, 64200, 64168, 64136,
!     64104, 64072, 101, 80, 171, 313, 65038, 99, 341, 424,
!     63081, 297, 296, 63775, 65110, 264, 263, 64192, 64654, 65197,
!     198, 64679, 64405, 62589, 159, 64279, 65056, 64808, 64303, 59,
!     62393, 65111, 64718, 65467, 62265, 64152, 65419, 65339, 64084, 63459,
!     65323, 64215, 64361, 64570, 65253, 62664, 64688, 64136, 64959, 62536,
!     65093, 64711, 65103, 63473, 63253, 62184, 64927, 62280, 63850, 64514,
!     64919, 62152, 62120, 62649, 62643, 61291, 63594, 63562, 64600, 63498,
!     63466, 64527, 63402, 61084, 64400, 63306, 63482, 63242, 63434, 63378,
!     62577, 62674, 63282, 63050, 62465, 63053, 61352, 62922, 62890, 60577,
!     62825, 62794, 62762, 62730, 62698, 62666, 62634, 62602, 62570, 62538,
!     62506, 62474, 62442, 62410, 62378, 62346, 62314, 62282, 62250, 62089,
!     63351, 62154, 62122, 63287, 60456, 60424, 60392, 60360, 61930, 62626,
!     62789, 60870, 62167, 61770, 59629, 59422, 61674, 62871, 60008, 59976,
!     59944, 59912, 59880, 59848, 59816, 59784, 59752, 59720, 59688, 59656,
!     59624, 59592, 59560, 59528, 59496, 59464, 59432, 59400, 59368, 59336,
!     59304, 59272, 59240, 59208, 59176, 59144, 59112, 59080, 59048, 59016,
!     58984, 58952, 58920, 58888, 58856, 58824, 58792, 58760, 58728, 58696,
!     58719, 58687, 58655, 58623, 61399, 58559, 58527, 58501, 61319, 61271,
!     61271, 61271, 61271, 61255, 57773, 61254, 61254, 61254, 57824, 58333,
!     61190, 59865, 60395, 57924, 61140, 61285, 57845, 61253, 61161, 61308,
!     61044, 61296, 61309, 61304, 61073, 61395, 61053, 60965, 60967, 61285,
!     61405, 61078, 61395, 61409, 61289, 57224, 57192, 57160, 60715, 60733,
!     60697, 61212, 61192, 60743, 60733, 60723, 60459, 60427, 60395, 60363,
!     60366, 60028, 60265, 60268, 59830, 60171, 60139, 59881, 56488, 56456,
!     56424, 56392, 59664, 59939, 60248, 60239, 60229, 60133, 56168, 56136,
!     59691, 59659, 59627, 59595, 59563, 59531, 59499, 59467, 55848, 55816,
!     55784, 55752, 55720, 55688, 55656, 55624, 55592, 55560, 55528, 55496,
!     55464, 55432, 55400, 55368, 55336, 55304, 55272, 55240, 55208, 55176,
!     55144, 55112, 55080, 55048, 55016, 54984, 54952, 54920, 54888, 54856,
!     54824, 54792, 54760, 54728, 54696, 54664, 54632, 54600, 54568, 54536,
!     54504, 54472, 58033, 57995, 57963, 57968, 57899, 57867, 57835, 57803,
!     57771, 57739, 57742, 56719, 58280, 57299, 55593, 55562, 58184, 55497,
!     55466, 56535, 56498, 54913, 55338, 55306, 57960, 52958, 53608, 53576,
!     57622, 57577, 57803, 57527, 57527, 57694, 57111, 57396, 57363, 57331,
!     57299, 56940, 57235, 57203, 57173, 57140, 54634, 54602, 54570, 54538,
!     54506, 54474, 54442, 54410, 54378, 54346, 54314, 54282, 54250, 54218,
!     54186, 54154, 54122, 54090, 54058, 54026, 53994, 53962, 53930, 53898,
!     53866, 53834, 53802, 53770, 53738, 53706, 53674, 53642, 53610, 53578,
!     53546, 53514, 53482, 53450, 53418, 53386, 53354, 53322, 53290, 53258,
!     53226, 53194, 53162, 53130, 53098, 53066, 53034, 53002, 52970, 52938,
!     52906, 52874, 52842, 52810, 52778, 52746, 52714, 52682, 52650, 52618,
!     52586, 52554, 52522, 52490, 52458, 52426, 52394, 52362, 52330, 52298,
!     52266, 52234, 52202, 52170, 52138, 52106, 52074, 52042, 52010, 51978,
!     51946, 51914, 51882, 51850, 51818, 51786, 51754, 51722, 51690, 51658,
!     51626, 51594, 51562, 51530, 51498, 51466, 51434, 51402, 51370, 51338,
!     51306, 51274, 51242, 51210, 51178, 51146, 51114, 51082, 51050, 51018,
!     50986, 50954, 50922, 50890, 50858, 50826, 50794, 50762, 50730, 50698,
!     50666, 50634, 50602, 50570, 50538, 50506, 50474, 50442, 50410, 50378,
!     50346, 50314, 50282, 50250, 50218, 50186, 50154, 50122, 50090, 50058,
!     50026, 49994, 49962, 49930, 49898, 49866, 49834, 49802, 49770, 49738,
!     49706, 49674, 49642, 49610, 49578, 49546, 49514, 49482, 49450, 49418,
!     49386, 49354, 49322, 49290, 49258, 49226, 49194, 49162, 49130, 49098,
!     49066, 49034, 49002, 48970, 48938, 48906, 48874, 48842, 48810, 48778,
!     48746, 48714, 48682, 48650, 48618, 48586, 48554, 48522, 48490, 48458,
!     48426, 48394, 48362, 48330, 48298, 48266, 48234, 48202, 48170, 48138,
!     48106, 45792, 46440, 46408, 47978, 47946, 47914, 47882, 47850, 47818,
!     47786, 47754, 47722, 47690, 47658, 47626, 47594, 47562, 47530, 47498,
!     47466, 47434, 47402, 47370, 47338, 47306, 47274, 47242, 47210, 47178,
!     47146, 47114, 47082, 47050, 47018, 46986, 46954, 46922, 46890, 46858,
!     46826, 46794, 46762, 46730, 46698, 46666, 46634, 46602, 46570, 46538,
!     46506, 46474, 46442, 46410, 46378, 46346, 46314, 46282, 46250, 46218,
!     46186, 46154, 46122, 46090, 46058, 46026, 45994, 45962, 45930, 45898,
!     45866, 45834, 45802, 45770, 45738, 45706, 45674, 45642, 45610, 45578,
!     45546, 45514, 45482, 45450, 45418, 45386, 45354, 45322, 45290, 45258,
!     45226, 45194, 45162, 45130, 45098, 45066, 45034, 45002, 44970, 44938,
!     44906, 44874, 44842, 44810, 44778, 44746, 44714, 44682, 44650, 44618,
!     44586, 44554, 44522, 44490, 44458, 44426, 44394, 44362, 44330, 44298,
!     44266, 44234, 44202, 44170, 44138, 44106, 44074, 44042, 44010, 43978,
!     43946, 43914, 43882, 43850, 43818, 43786, 43754, 43722, 43690, 43658,
!     43626, 43594, 43562, 43530, 43498, 43466, 43434, 43402, 43370, 43338,
!     43306, 43274, 43242, 43210, 43178, 43146, 43114, 43082, 43050, 43018,
!     42986, 42954, 42922, 42890, 42858, 42826, 42794, 42762, 42730, 42698,
!     42666, 42634, 42602, 42570, 42538, 42506, 42474, 42442, 42410, 42378,
!     42346, 42314, 42282, 42250, 42218, 42186, 42154, 42122, 42090, 42058,
!     42026, 41994, 41962, 41930, 41898, 41866, 41834, 41802, 41770, 41738,
!     41706, 41674, 41642, 41610, 41578, 41546, 41514, 41482, 41450, 41418,
!     41386, 41354, 41322, 41290, 41258, 41226, 41194, 41162, 41130, 41098,
!     41066, 41034, 41002, 40970, 40938, 40906, 40874, 40842, 40810, 40778,
!     40746, 40714, 40682, 40650, 40618, 40586, 40554, 40522, 40490, 40458,
!     40426, 40394, 40362, 40330, 40298, 40266, 40234, 40202, 40170, 40138,
!     40106, 40074, 40042, 40010, 39978, 39946, 39914, 39882, 39850, 39818,
!     39786, 39754, 39722, 39690, 39658, 39626, 39594, 39562, 39530, 39498,
!     39466, 39434, 39402, 39370, 39338, 39306, 39274, 39242, 39210, 39178,
!     39146, 39114, 39082, 39050, 39018, 38986, 38954, 38922, 38890, 38858,
!     38826, 38794, 38762, 38730, 38698, 38666, 38634, 38602, 38570, 38538,
!     38506, 38474, 38442, 38410, 38378, 38346, 38314, 38282, 38250, 38218,
!     38186, 38154, 38122, 38090, 38058, 38026, 37994, 37962, 37930, 37898,
!     37866, 37834, 37802, 37770, 37738, 37706, 37674, 37642, 37610, 37578,
!     37546, 37514, 37482, 37450, 37418, 37386, 37354, 37322, 37290, 37258,
!     37226, 37194, 37162, 37130, 37098, 37066, 37034, 37002, 36970, 36938,
!     36906, 36874, 36842, 36810, 36778, 36746, 36714, 36682, 36650, 36618,
!     36586, 36554, 36522, 36490, 36458, 36426, 36394, 36362, 36330, 36298,
!     36266, 36234, 36202, 36170, 36138, 36106, 36074, 36042, 36010, 35978,
!     35946, 35914, 35882, 35850, 35818, 35786, 35754, 35722, 35690, 35658,
!     35626, 35594, 35562, 35530, 35498, 35466, 35434, 35402, 35370, 35338,
!     35306, 35274, 35242, 35210, 35178, 35146, 35114, 35082, 35050, 35018,
!     34986, 34954, 34922, 34890, 34858, 34826, 34794, 34762, 34730, 34698,
!     34666, 34634, 34602, 34570, 34538, 34506, 34474, 34442, 34410, 34378,
!     34346, 34314, 34282, 34250, 34218, 34186, 34154, 34122, 34090, 34058,
!     34026, 33994, 33962, 33930, 33898, 33866, 33834, 33802, 33770, 33738,
!     33706, 33674, 33642, 33610, 33578, 33546, 33514, 33482, 33450, 33418,
!     33386, 33354, 33322, 33290, 33258, 33226, 33194, 33162, 33130, 33098,
!     33066, 33034, 33002, 32970, 32938, 32906, 32874, 32842, 32810, 32778,
!     32746, 32714, 32682, 32650, 32618, 32586, 32554, 32522, 32490, 32458,
!     32426, 32394, 32362, 32330, 32298, 32266, 32234, 32202, 32170, 32138,
!     32106, 32074, 32042, 32010, 31978, 31946, 31914, 31882, 31850, 31818,
!     31786, 31754, 31722, 31690, 31658, 31626, 31594, 31562, 31530, 31498,
!     31466, 31434, 31402, 31370, 31338, 31306, 31274, 31242, 31210, 31178,
!     31146, 31114, 31082, 31050, 31018, 30986, 30954, 30922, 30890, 30858,
!     30826, 30794, 30762, 30730, 30698, 30666, 30634, 30602, 30570, 30538,
!     30506, 30474, 30442, 30410, 30378, 30346, 30314, 30282, 30250, 30218,
!     30186, 30154, 30122, 30090, 30058, 30026, 29994, 29962, 29930, 29898,
!     29866, 29834, 29802, 29770, 29738, 29706, 29674, 29642, 29610, 29578,
!     29546, 29514, 29482, 29450, 29418, 29386, 29354, 29322, 29290, 29258,
!     29226, 29194, 29162, 29130, 29098, 29066, 29034, 29002, 28970, 28938,
!     28906, 28874, 28842, 28810, 28778, 28746, 28714, 28682, 28650, 28618,
!     28586, 28554, 28522, 28490, 28458, 28426, 28394, 28362, 28330, 28298,
!     28266, 28234, 28202, 28170, 28138, 28106, 28074, 28042, 28010, 27978,
!     27946, 27914, 27882, 27850, 27818, 27786, 27754, 27722, 27690, 27658,
!     27626, 27594, 27562, 27530, 27498, 27466, 27434, 27402, 27370, 27338,
!     27306, 27274, 27242, 27210, 27178, 27146, 27114, 24816, 25448, 25416,
!     26986, 26954, 26922, 26890, 26858, 26826, 26794, 26762, 26730, 26698,
!     26666, 26634, 26602, 26570, 26538, 26506, 26474, 26442, 26410, 26378,
!     26346, 26314, 26282, 26250, 26218, 26186, 26154, 26122, 26090, 26058,
!     26026, 25994, 25962, 25930, 25898, 25866, 27430, 28129, 28316, 24136,
!     24104, 24072, 24040, 24008, 23976, 23944, 23912, 23880, 23848, 23816,
!     23784, 23752, 23720, 23688, 23656, 23624, 23592, 23560, 23528, 23496,
!     23464, 23432, 23400, 23368, 23336, 23304, 23272, 23240, 23208, 23176,
!     23144, 23112, 23080, 23048, 23016, 22984, 22952, 22920, 22888, 22856,
!     22824, 22792, 22760, 22728, 22696, 22664, 22632, 22600, 22568, 22536,
!     22504, 22472, 22440, 22408, 22376, 22344, 23914, 23882, 23850, 23818,
!     23786, 23754, 23722, 23690, 23658, 23626, 23594, 23562, 23530, 23498,
!     23466, 23434, 23402, 23370, 23338, 23306, 23274, 23242, 23210, 23178,
!     23146, 23114, 23082, 23050, 23018, 22986, 22954, 22922, 22890, 22858,
!     22826, 22794, 22762, 22730, 22698, 22666, 22634, 22602, 22570, 22538,
!     22506, 22474, 22442, 22410, 22378, 22346, 22314, 22282, 22250, 22218,
!     22186, 22154, 22122, 22090, 22058, 22026, 21994, 21962, 21930, 21898,
!     21866, 21834, 21802, 21770, 21738, 21706, 21674, 21642, 21610, 21578,
!     21546, 21514, 21482, 21450, 21418, 21386, 21354, 21322, 21290, 21258,
!     21226, 21194, 21162, 21130, 21098, 21066, 21034, 21002, 20970, 20938,
!     20906, 20874, 20842, 20810, 20778, 20746, 20714, 20682, 20650, 20618,
!     20586, 20554, 20522, 20490, 20458, 20426, 20394, 20362, 20330, 20298,
!     20266, 20234, 20202, 20170, 20138, 20106, 20074, 20042, 20010, 19978,
!     19946, 19914, 19882, 19850, 19818, 19786, 19754, 19722, 19690, 19658,
!     19626, 19594, 19562, 19530, 19498, 19466, 19434, 19402, 19370, 19338,
!     19306, 19274, 19242, 19210, 19178, 19146, 19114, 19082, 19050, 19018,
!     18986, 18954, 18922, 18890, 18858, 18826, 18794, 18762, 18730, 18698,
!     18666, 18634, 18602, 18570, 18538, 18506, 18474, 18442, 18410, 18378,
!     18346, 18314, 18282, 18250, 18218, 18186, 18154, 18122, 18090, 18058,
!     18026, 17994, 17962, 17930, 17898, 17866, 17834, 17802, 17770, 17738,
!     17706, 17674, 17642, 17610, 17578, 17546, 17514, 17482, 17450, 17418,
!     17386, 17354, 17322, 17290, 17258, 17226, 17194, 17162, 17130, 17098,
!     17066, 17034, 17002, 16970, 16938, 16906, 16874, 16842, 16810, 16778,
!     16746, 16714, 16682, 16650, 16618, 16586, 16554, 16522, 16490, 16458,
!     16426, 16394, 16362, 16330, 16298, 16266, 16234, 16202, 16170, 16138,
!     16106, 16074, 16042, 16010, 15978, 15946, 15914, 15882, 15850, 15818,
!     15786, 15754, 15722, 15690, 15658, 15626, 15594, 15562, 15530, 15498,
!     15466, 15434, 15402, 15370, 15338, 15306, 15274, 15242, 15210, 15178,
!     15146, 15114, 15082, 15050, 15018, 14986, 14954, 14922, 14890, 14858,
!     14826, 14794, 14762, 14730, 14698, 14666, 14634, 14602, 14570, 14538,
!     14506, 14474, 14442, 14410, 14378, 14346, 14314, 14282, 14250, 14218,
!     14186, 14154, 14122, 14090, 14058, 14026, 13994, 13962, 13930, 13898,
!     13866, 13834, 13802, 13770, 13738, 13706, 13674, 13642, 13610, 13578,
!     13546, 13514, 13482, 13450, 13418, 13386, 13354, 13322, 13290, 13258,
!     13226, 13194, 13162, 13130, 13098, 13066, 13034, 13002, 12970, 12938,
!     12906, 12874, 12842, 12810, 12778, 10482, 11112, 11080, 15403, 15371,
!     15339, 15307, 15275, 15243, 15211, 15179, 15147, 15115, 15083, 15051,
!     15019, 14987, 14955, 14923, 14891, 14859, 14827, 14795, 14763, 14731,
!     14699, 14667, 14635, 14603, 14571, 14539, 14507, 14475, 14443, 14411,
!     14379, 14347, 14315, 14283, 14251, 14219, 14187, 14155, 14123, 14091,
!     14059, 14027, 13995, 13963, 13931, 13899, 13867, 13835, 13803, 13771,
!     13739, 13707, 13675, 13643, 13611, 13579, 13547, 13515, 13483, 13451,
!     13419, 13387, 13387, 13355, 13323, 13291, 13259, 13227, 13195, 13163,
!     13131, 13099, 13067, 13035, 13003, 12971, 12939, 12907, 12875, 12843,
!     12811, 12779, 12747, 12715, 12683, 12651, 12619, 12587, 12555, 12523,
!     12491, 12459, 12427, 12395, 12363, 12331, 12299, 12267, 12235, 12203,
!     12171, 12139, 12107, 12075, 12043, 12011, 11979, 11947, 11915, 11883,
!     11851, 11819, 11787, 11755, 11723, 11691, 11659, 11627, 11595, 11563,
!     11531, 11499, 11467, 11435, 11403, 11371, 11339, 11307, 11275, 11243,
!     11211, 11179, 11147, 11115, 11083, 11051, 11019, 10987, 10955, 10923,
!     10891, 10859, 10827, 10795, 10763, 10731, 10699, 10667, 10635, 10603,
!     10571, 10539, 10507, 10475, 10443, 10411, 10379, 10347, 10315, 10283,
!     10251, 10219, 10187, 10155, 10123, 10091, 10059, 10027, 9995, 9963,
!     9931, 9899, 9867, 9835, 9803, 9771, 9739, 9707, 9675, 9643,
!     9611, 9579, 9547, 9515, 9483, 9451, 9419, 9387, 9355, 9323,
!     9291, 9259, 9227, 9195, 9163, 9131, 9099, 9067, 9035, 9003,
!     8971, 8939, 8907, 8875, 8843, 8811, 8779, 8747, 8715, 8683,
!     8651, 8619, 8587, 8555, 8523, 8491, 8459, 8427, 8395, 8363,
!     8331, 8299, 8267, 8235, 8203, 8171, 8139, 8107, 8075, 8043,
!     8011, 7979, 7947, 7915, 7883, 7851, 7819, 7787, 7755, 7723,
!     7691, 7659, 7627, 7595, 7563, 7531, 7499, 7467, 7435, 7403,
!     7371, 7339, 7307, 7275, 7243, 7211, 7179, 7147, 7115, 7083,
!     7051, 7019, 4202, 4170, 4138, 4106, 4074, 4042, 4010, 3978,
!     3946, 1640, 2280, 2248, 2216, 2184, 2152, 2120, 2007, 6475,
!     1974, 3356, 3324, 3250, 3241, 3228, 3196, 3164, 3132, 3100,
!     3068, 3036, 3004, 2972, 2940, 2910, 2860, 2844, 2744, 2780,
!     2716, 706, 1320, 5739, 5735, 1023, 2556, 2524, 2492, 1625,
!     3000, 5543, 4038, 448, 433, 2507, 2092, 4741,
    };
  /** Length of blocks. */
  static const int blocks_length = 2048;
*************** static const int blocks_length = 2048;
*** 292,337 ****
   * as of Unicode version 3.2.0, but may soon become one.
   */
  static const jchar data[] = {
!     12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290,
!     12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290,
!     12161, 12290, 15872, 15872, 12161, 12290, 15872, 15872, 15872, 15872,
!     15872, 15872, 14853, 14853, 15872, 15872, 15872, 14853, 14853, 14853,
!     15872, 15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 15872, 14853, 14853, 14853, 15872, 15872, 15872, 15872, 23176,
!     23176, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 14853, 14853, 14853, 15872, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872,
!     15872, 15872, 20632, 15872, 15872, 15872, 15872, 17798, 15872, 15872,
!     14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872, 15872, 15872,
!     14853, 14853, 15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     15872, 15872, 15872, 15872, 20738, 20738, 20738, 20738, 20738, 20738,
!     20738, 20738, 20738, 20738, 20738, 20738, 20738, 20738, 20738, 20738,
!     20738, 20738, 20738, 20738, 20738, 20738, 20738, 20738, 20738, 20738,
!     20738, 20738, 20738, 20738, 20738, 10498, 15872, 20632, 10772, 15872,
!     15872, 15872, 15872, 15872, 15872, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798,
!     17926, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 6683, 6683, 15872,
!     15872, 15872, 15872, 17668, 15872, 15872, 15872, 664, 15872, 664,
!     25877, 26006, 664, 6807, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 17668, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 17668, 17668, 6683, 6683, 6683,
      6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683,
!     6683, 17668, 17668, 6683, 6683, 6683, 6683, 6683, 6683, 6683,
!     6683, 6683, 6683, 6683, 6683, 6683, 6683, 10498, 28930, 10498,
!     15872, 10498, 10498, 29441, 29441, 29441, 29441, 29187, 6683, 6683,
!     6683, 27778, 27778, 10498, 10498, 15872, 15872, 10498, 10498, 27905,
!     27905, 29569, 29569, 15872, 6683, 6683, 6683, 6914, 7042, 7170,
      7298, 7426, 7554, 7682, 7810, 7938, 8066, 8194, 8322, 8450,
      8578, 8706, 8834, 8962, 9090, 9218, 9346, 9474, 9602, 9730,
      9858, 9986, 10114, 1109, 3225, 1238, 3225, 15, 15, 15,
--- 292,337 ----
   * as of Unicode version 3.2.0, but may soon become one.
   */
  static const jchar data[] = {
!     12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418,
!     12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418,
!     12289, 12418, 16000, 16000, 12289, 12418, 16000, 16000, 16000, 16000,
!     16000, 16000, 14981, 14981, 16000, 16000, 16000, 14981, 14981, 14981,
!     16000, 16000, 16000, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 16000, 14981, 14981, 14981, 16000, 16000, 16000, 16000, 23432,
!     23432, 16000, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     16000, 14981, 14981, 14981, 16000, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000, 16000,
!     16000, 16000, 20888, 16000, 16000, 16000, 16000, 17926, 16000, 16000,
!     14981, 14981, 14981, 14981, 14981, 14981, 16000, 16000, 16000, 16000,
!     14981, 14981, 16000, 16000, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     16000, 16000, 16000, 16000, 20994, 20994, 20994, 20994, 20994, 20994,
!     20994, 20994, 20994, 20994, 20994, 20994, 20994, 20994, 20994, 20994,
!     20994, 20994, 20994, 20994, 20994, 20994, 20994, 20994, 20994, 20994,
!     20994, 20994, 20994, 20994, 20994, 11906, 16000, 20888, 10772, 16000,
!     16000, 16000, 16000, 16000, 16000, 17926, 17926, 17926, 17926, 17926,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     18054, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 6683, 6683, 16000,
!     16000, 16000, 16000, 17796, 16000, 16000, 16000, 664, 16000, 664,
!     26133, 26262, 664, 6807, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 17796, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 17796, 17796, 6683, 6683, 6683,
      6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683,
!     6683, 17796, 17796, 6683, 6683, 6683, 6683, 6683, 6683, 6683,
!     6683, 6683, 6683, 6683, 6683, 6683, 6683, 11906, 29314, 11906,
!     16000, 11906, 18690, 29825, 29825, 29825, 29825, 29571, 6683, 6683,
!     6683, 28034, 28034, 18690, 18690, 16000, 16000, 11906, 18690, 28161,
!     28161, 29953, 29953, 16000, 6683, 6683, 6683, 6914, 7042, 7170,
      7298, 7426, 7554, 7682, 7810, 7938, 8066, 8194, 8322, 8450,
      8578, 8706, 8834, 8962, 9090, 9218, 9346, 9474, 9602, 9730,
      9858, 9986, 10114, 1109, 3225, 1238, 3225, 15, 15, 15,
*************** static const jchar data[] = {
*** 347,835 ****
      4097, 4225, 4353, 4481, 4609, 4737, 4865, 4993, 5121, 5249,
      5377, 5505, 5633, 5761, 5889, 6017, 6145, 6273, 6401, 6529,
      1109, 664, 1238, 6683, 6807, 664, 664, 664, 3225, 1109,
!     1238, 15872, 664, 664, 664, 664, 664, 664, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 10284, 664, 922, 922,
      922, 922, 10396, 10396, 6683, 10396, 10498, 10717, 3225, 10772,
      10396, 6683, 10908, 1305, 11019, 11147, 6683, 11266, 10396, 664,
      6683, 11403, 10498, 11614, 11659, 11659, 11659, 664, 664, 1305,
!     1556, 3225, 3225, 3225, 15872, 664, 922, 792, 664, 15872,
!     15872, 15872, 15872, 21253, 21253, 21253, 15872, 21253, 15872, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 15872, 15872, 15872, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 17798, 17798, 17798, 15872, 20252, 20252,
!     20097, 20097, 20097, 20097, 20097, 20097, 20097, 20097, 20097, 20097,
!     20097, 20097, 20097, 20097, 20097, 20097, 11777, 11777, 11777, 11777,
      11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777,
      11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 3225,
!     11777, 11777, 11777, 11777, 11777, 11777, 11777, 10498, 12929, 12161,
!     12290, 12161, 12290, 13057, 12161, 12290, 13185, 13185, 12161, 12290,
!     10498, 13313, 13441, 13569, 12161, 12290, 13185, 13697, 13826, 13953,
!     14081, 12161, 12290, 10498, 10498, 13953, 14209, 10498, 14337, 12290,
!     12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 10498, 12161,
!     12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161,
!     12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161,
!     12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161,
!     12290, 15872, 15872, 15872, 15872, 15872, 15872, 23305, 23433, 23561,
!     23689, 23817, 23945, 24073, 24201, 24329, 24457, 17798, 17798, 14853,
!     14853, 14853, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 6683, 6683, 18049, 664, 18177, 18177, 18177,
!     15872, 18305, 15872, 18433, 18433, 10498, 11777, 11777, 11777, 11777,
      11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777,
!     11777, 11777, 11906, 11906, 11906, 11906, 11906, 11906, 11906, 11906,
!     11906, 11906, 11906, 11906, 11906, 11906, 11906, 11906, 11906, 11906,
!     11906, 11906, 11906, 11906, 11906, 3225, 11906, 11906, 11906, 11906,
!     11906, 11906, 11906, 12034, 11906, 11906, 18818, 11906, 11906, 11906,
!     11906, 11906, 11906, 11906, 11906, 11906, 18946, 19074, 19074, 15872,
!     19202, 19330, 19457, 19457, 19457, 19586, 19714, 10498, 15872, 15872,
!     12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290,
!     12161, 12290, 12161, 12290, 12161, 12290, 10498, 15105, 15235, 15362,
!     12161, 12290, 15617, 15745, 12161, 12290, 12161, 12290, 12161, 12290,
!     12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290,
!     12417, 12546, 12161, 12290, 12161, 12290, 12161, 12290, 10498, 12161,
!     12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161,
!     12290, 12161, 12290, 12161, 12290, 19842, 19970, 15490, 10498, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 23056, 23056, 23056, 23056, 23056, 23056, 32139, 15872, 15872,
!     15872, 32267, 32395, 32523, 32651, 32779, 32907, 1305, 1305, 3225,
!     1109, 1238, 10498, 14853, 14853, 14853, 14853, 15105, 15235, 15362,
!     15105, 15235, 15362, 15105, 15235, 15362, 12161, 12290, 12161, 12290,
!     12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290,
!     12161, 12290, 15490, 12161, 12290, 20252, 17798, 17798, 17798, 17798,
!     15872, 20359, 20359, 15872, 15872, 12161, 12290, 12161, 12290, 12161,
!     12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161,
!     12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12673,
!     12161, 12290, 12161, 12290, 12161, 12290, 12802, 12161, 12290, 12161,
!     12290, 12161, 12290, 14465, 12161, 12290, 14465, 10498, 10498, 12161,
!     12290, 14465, 12161, 12290, 14593, 14593, 12161, 12290, 12161, 12290,
!     14721, 12161, 12290, 10498, 14853, 12161, 12290, 10498, 14978, 19457,
!     12161, 12290, 12161, 12290, 15872, 15872, 12161, 12290, 15872, 15872,
!     12161, 12290, 15872, 15872, 15872, 12161, 12290, 12161, 12290, 12161,
!     12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161,
!     12290, 12161, 12290, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 1432, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     21144, 15872, 15872, 15872, 21144, 21144, 21144, 21144, 21144, 21144,
!     21144, 21144, 21144, 21144, 21144, 21144, 21144, 21144, 15872, 23056,
!     21253, 17798, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 15872, 15872, 23056, 19457, 19457, 19457, 19457, 19457, 19457,
!     19457, 19457, 19457, 19457, 19457, 19457, 19457, 19457, 19457, 19457,
!     19457, 19457, 19457, 19457, 19457, 19457, 19457, 19457, 19457, 19457,
!     19457, 19457, 19457, 19457, 19457, 19457, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 15872, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 15872, 14853, 15872, 15872, 15872, 15872,
!     15872, 23305, 23433, 23561, 23689, 23817, 23945, 24073, 24201, 24329,
!     24457, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 10498, 10498, 10498, 16002, 16130, 10498, 16258,
!     16258, 10498, 16386, 10498, 16514, 10498, 10498, 10498, 10498, 16258,
!     10498, 10498, 16642, 10498, 10498, 10498, 10498, 16770, 16898, 10498,
!     10498, 10498, 10498, 10498, 16898, 10498, 10498, 17026, 10498, 10498,
!     17154, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498,
!     10498, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 10498, 10498, 10498, 10498, 10498, 15872, 15872,
!     15872, 15872, 15872, 20997, 17798, 20997, 20997, 15872, 20997, 20997,
!     15872, 20997, 20997, 20997, 20997, 20997, 20997, 20997, 20997, 20997,
!     20997, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21144, 21253, 17798, 17798, 17798, 17798, 17798, 17798, 17798,
!     20359, 20359, 17798, 20359, 20359, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 11659, 11659, 11659,
!     11659, 11659, 11659, 11659, 11659, 11659, 11659, 11659, 11659, 33419,
!     17282, 10498, 10498, 17282, 10498, 10498, 10498, 10498, 17282, 10498,
!     17410, 17410, 10498, 10498, 10498, 10498, 10498, 10498, 17538, 10498,
!     10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498,
!     10498, 10498, 10498, 15872, 15872, 17668, 17668, 17668, 17668, 17668,
!     17668, 17668, 17668, 17668, 6683, 6683, 17668, 17668, 17668, 17668,
!     17668, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683,
!     17668, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 20481, 20481,
!     20481, 20481, 20481, 20481, 20481, 20481, 20481, 20481, 20481, 20481,
!     20481, 20481, 20481, 20481, 20481, 20481, 20481, 20481, 20481, 20481,
!     20481, 15872, 15872, 17668, 20632, 20632, 20632, 20632, 20632, 20632,
!     11777, 11777, 15872, 11777, 11777, 11777, 11777, 11777, 11777, 11777,
!     11777, 11777, 18562, 18690, 18690, 18690, 10498, 11906, 11906, 11906,
!     11906, 11906, 11906, 11906, 11906, 11906, 11906, 11906, 11906, 11906,
!     11906, 11906, 11906, 19970, 19970, 19970, 19970, 19970, 19970, 19970,
!     19970, 19970, 19970, 19970, 19970, 19970, 19970, 19970, 19970, 17798,
!     17798, 17798, 17798, 17798, 20632, 17798, 17798, 14853, 14853, 14853,
!     14853, 15872, 15872, 15872, 15872, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 15872, 17798, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 17798, 17798, 17798, 15872, 17798, 17798,
!     17798, 20888, 17798, 17798, 20888, 17798, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 20997, 20997, 20997,
!     20997, 20997, 20997, 20997, 20997, 20997, 20997, 20997, 20997, 20997,
!     20997, 20997, 20997, 15872, 15872, 15872, 15872, 15872, 20997, 20997,
!     20997, 20888, 20888, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 23433, 23561, 23689, 23817, 23945, 24073,
!     24201, 24329, 24457, 25355, 25483, 25611, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 17798,
!     23176, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872,
!     15872, 14853, 14853, 14853, 15872, 14853, 14853, 14853, 14853, 15872,
!     15872, 15872, 14853, 14853, 15872, 14853, 15872, 14853, 14853, 14853,
!     14853, 15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872,
!     15872, 15872, 15872, 15872, 17798, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 23176, 23176,
!     23176, 23176, 15872, 17798, 17798, 17798, 15872, 17798, 17798, 17798,
!     17798, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 17798, 17798,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 17798,
!     23176, 23176, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 15872, 15872, 14853, 14853, 15872, 15872, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 15872, 15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872, 15872, 15872,
!     23176, 23176, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 15872, 15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872,
!     14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872, 14853, 14853,
!     14853, 15872, 15872, 15872, 15872, 23305, 23433, 23561, 23689, 23817,
!     23945, 24073, 24201, 24329, 24457, 20252, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 21513, 21641, 21769, 21897, 22025, 22153, 22281, 22409, 22537,
!     22665, 792, 22808, 22808, 21144, 15872, 15872, 17798, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 15872, 15872, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 25877, 26006,
!     21380, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 23176, 23176, 20632, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 17798, 17798, 23176,
!     15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872, 14853,
!     15872, 14853, 14853, 14853, 15872, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 20632, 20632,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 17798, 17798, 17798,
!     17798, 17798, 21380, 21380, 17798, 17798, 10396, 17798, 17798, 17798,
!     17798, 15872, 15872, 1801, 1929, 2057, 2185, 2313, 2441, 2569,
!     2697, 2825, 2953, 21253, 21253, 21253, 22940, 22940, 15872, 14853,
!     14853, 14853, 15872, 14853, 15872, 14853, 15872, 15872, 14853, 14853,
!     15872, 14853, 14853, 14853, 14853, 17798, 14853, 14853, 17798, 17798,
!     17798, 17798, 17798, 17798, 15872, 17798, 17798, 14853, 15872, 15872,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 14853, 14853, 14853, 14853, 14853, 15872, 15872, 15872, 15872,
!     17798, 17798, 23176, 15872, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872, 17798, 14853,
!     23176, 23176, 23176, 23176, 23176, 15872, 17798, 23176, 23176, 15872,
!     23176, 23176, 17798, 17798, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 23176, 23176, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     14853, 15872, 20632, 20632, 20632, 20632, 20632, 20632, 20632, 20632,
!     23433, 23561, 23689, 23817, 23945, 24073, 24201, 24329, 24457, 25355,
!     26123, 26251, 26379, 26507, 26635, 26763, 26891, 27019, 25483, 27147,
!     15872, 15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 14853, 14853, 15872, 15872, 14853, 14853, 14853, 14853, 15872,
!     15872, 17798, 14853, 23176, 17798, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 23176, 23176, 23176, 23176, 17798, 15872, 15872, 14853,
!     17798, 17798, 17798, 17798, 15872, 15872, 15872, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 15872, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 15872, 14853, 15872, 15872, 15872, 14853,
!     14853, 14853, 14853, 15872, 15872, 17798, 15872, 23176, 23176, 23176,
!     15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872,
!     14853, 14853, 14853, 15872, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872,
!     14853, 15872, 14853, 14853, 14853, 14853, 15872, 15872, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 15872, 14853, 15872, 14853, 14853,
!     14853, 14853, 15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 17798, 14853, 14853, 17798, 17798, 17798, 17798, 17798, 17798,
!     17798, 15872, 15872, 15872, 15872, 922, 922, 922, 922, 922,
!     922, 922, 922, 922, 922, 922, 922, 922, 922, 922,
!     922, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 14853, 14853, 17798,
!     17798, 20632, 20632, 23305, 23433, 23561, 23689, 23817, 23945, 24073,
!     24201, 24329, 24457, 20632, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 664,
!     664, 792, 922, 792, 664, 664, 25877, 26006, 664, 1305,
!     1432, 1556, 1432, 1688, 1801, 1929, 2057, 2185, 2313, 2441,
!     2569, 2697, 2825, 2953, 1432, 664, 3225, 3225, 3225, 664,
!     664, 664, 664, 664, 664, 10772, 664, 664, 664, 664,
!     23056, 23056, 23056, 23056, 15872, 23305, 23433, 23561, 23689, 23817,
!     23945, 24073, 24201, 24329, 24457, 15872, 15872, 15872, 15872, 15872,
!     15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 15872, 14853, 14853, 14853, 14853, 14853, 15872, 15872, 15872,
!     15872, 23176, 17798, 17798, 17798, 17798, 15872, 15872, 23176, 23176,
!     15872, 15872, 23176, 23176, 17798, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 23176, 15872, 15872, 15872, 15872, 14853,
!     14853, 15872, 14853, 15872, 15872, 14853, 14853, 15872, 14853, 15872,
!     15872, 14853, 15872, 15872, 15872, 15872, 15872, 15872, 14853, 14853,
!     14853, 14853, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 14853, 14853, 15872, 14853, 14853, 15872, 14853, 14853, 15872,
!     15872, 17798, 15872, 23176, 23176, 17798, 17798, 15872, 15872, 15872,
!     15872, 17798, 17798, 15872, 15872, 17798, 17798, 17798, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 14853,
!     14853, 14853, 14853, 15872, 14853, 15872, 14853, 14853, 17798, 17798,
!     15872, 15872, 23305, 23433, 23561, 23689, 23817, 23945, 24073, 24201,
!     24329, 24457, 14853, 14853, 922, 922, 24587, 24715, 24843, 24971,
!     25099, 25227, 20252, 15872, 15872, 15872, 15872, 15872, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 15872, 14853, 14853, 15872, 14853,
!     14853, 14853, 14853, 14853, 15872, 15872, 17798, 14853, 23176, 23176,
!     17798, 17798, 17798, 17798, 17798, 15872, 17798, 17798, 23176, 15872,
!     23176, 23176, 17798, 15872, 15872, 14853, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 23305, 23433, 23561, 23689, 23817, 23945, 24073, 24201, 24329,
!     24457, 25099, 25099, 25099, 25099, 25099, 25099, 25099, 25099, 25099,
!     25099, 20252, 17798, 20252, 17798, 20252, 17798, 25877, 26006, 25877,
!     26006, 23176, 23176, 17798, 17798, 17798, 15872, 15872, 15872, 23176,
!     23176, 15872, 15872, 23176, 23176, 17798, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 17798, 23176, 15872, 15872, 15872, 15872,
!     14853, 14853, 15872, 14853, 14853, 14853, 14853, 14853, 15872, 14853,
!     14853, 15872, 23176, 17798, 17798, 17798, 17798, 23176, 17798, 15872,
!     15872, 15872, 17798, 17798, 23176, 17798, 15872, 15872, 15872, 15872,
!     15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 23176, 23176, 23176, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 23176, 23176, 15872, 15872, 15872, 23176, 23176, 23176,
!     15872, 23176, 23176, 23176, 17798, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 23176, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 14853, 14853, 14853, 14853, 14853, 15872, 17668,
!     15872, 17798, 17798, 17798, 17798, 17798, 17798, 15872, 15872, 23305,
!     23433, 23561, 23689, 23817, 23945, 24073, 24201, 24329, 24457, 15872,
!     15872, 14853, 14853, 15872, 15872, 15872, 15872, 23305, 23433, 23561,
!     23689, 23817, 23945, 24073, 24201, 24329, 24457, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 17798, 17798, 17798, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 17798, 17798, 20359, 20359, 20359, 23176,
!     17798, 17798, 17798, 15872, 15872, 23176, 23176, 23176, 15872, 23176,
!     23176, 23176, 17798, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 23176, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872, 15872,
!     15872, 17798, 15872, 15872, 15872, 15872, 23176, 23176, 23176, 17798,
!     17798, 17798, 15872, 17798, 15872, 23176, 23176, 23176, 23176, 23176,
!     23176, 23176, 23176, 17798, 23176, 23176, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 17798, 17798, 17798, 20632, 20632, 20632,
!     20632, 20632, 20632, 20632, 922, 20632, 15872, 15872, 15872, 14853,
!     14853, 14853, 14853, 14853, 14853, 17668, 17798, 17798, 17798, 17798,
!     17798, 17798, 17798, 17798, 20632, 23305, 23433, 23561, 23689, 23817,
!     23945, 24073, 24201, 24329, 24457, 20632, 20632, 15872, 15872, 15872,
!     15872, 14853, 20252, 20252, 20252, 20632, 20632, 20632, 20632, 20632,
!     20632, 20632, 20632, 25784, 20632, 20632, 20632, 20632, 20632, 20632,
!     20252, 20252, 20252, 20252, 20252, 17798, 17798, 20252, 20252, 20252,
!     20252, 20252, 20252, 17798, 20252, 20252, 20252, 20252, 20252, 20252,
!     15872, 15872, 20252, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 15872, 15872, 15872, 15872, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 15872, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     15872, 15872, 15872, 15872, 15872, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 6807, 17668, 17668, 17668, 15872, 23305, 23433, 23561,
!     23689, 23817, 23945, 24073, 24201, 24329, 24457, 20632, 20632, 20632,
!     20632, 20632, 20632, 14853, 14853, 14853, 14853, 14853, 14853, 23176,
!     23176, 17798, 17798, 15872, 15872, 15872, 15872, 15872, 15872, 524,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 25877, 26006, 15872, 15872,
!     15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 20632, 20632, 20632, 27275, 27403, 27531, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 17798, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 12161, 12290, 12161, 12290, 12161,
!     12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161, 12290, 12161,
!     12290, 12161, 12290, 12161, 12290, 12161, 12290, 10498, 10498, 10498,
!     10498, 10498, 27650, 15872, 15872, 15872, 15872, 27778, 27778, 27778,
!     27778, 27778, 27778, 27778, 27778, 27905, 27905, 27905, 27905, 27905,
!     27905, 27905, 27905, 27778, 27778, 27778, 27778, 27778, 27778, 27778,
!     27778, 27905, 27905, 27905, 27905, 27905, 27905, 27905, 27905, 27778,
!     27778, 27778, 27778, 27778, 27778, 15872, 15872, 27905, 27905, 27905,
!     27905, 27905, 27905, 15872, 15872, 10498, 27778, 10498, 27778, 10498,
!     27778, 10498, 27778, 15872, 27905, 15872, 27905, 15872, 27905, 15872,
!     27905, 27778, 27778, 27778, 27778, 27778, 27778, 27778, 27778, 27905,
!     27905, 27905, 27905, 27905, 27905, 27905, 27905, 28034, 28034, 28162,
!     28162, 28162, 28162, 28290, 28290, 28418, 28418, 28546, 28546, 28674,
!     28674, 15872, 15872, 27778, 27778, 27778, 27778, 27778, 27778, 27778,
!     27778, 28803, 28803, 28803, 28803, 28803, 28803, 28803, 28803, 27778,
!     27778, 27778, 27778, 27778, 27778, 27778, 27778, 28803, 28803, 28803,
!     28803, 28803, 28803, 28803, 28803, 27778, 27778, 10498, 28930, 10498,
!     15872, 10498, 10498, 27905, 27905, 29057, 29057, 29187, 6683, 29314,
!     6683, 6914, 7042, 7170, 7298, 7426, 7554, 7682, 7810, 7938,
!     8066, 8194, 8322, 8450, 8578, 8706, 8834, 8962, 9090, 9218,
!     9346, 9474, 9602, 9730, 9858, 9986, 10114, 25877, 3225, 26006,
!     3225, 15872, 27778, 27778, 10498, 10498, 10498, 29698, 10498, 10498,
!     27905, 27905, 29825, 29825, 29953, 6683, 6683, 6683, 15872, 15872,
!     10498, 28930, 10498, 15872, 10498, 10498, 30081, 30081, 30209, 30209,
!     29187, 6683, 6683, 15872, 524, 524, 524, 524, 524, 524,
!     524, 30380, 524, 524, 524, 30476, 23056, 23056, 30608, 30736,
!     10772, 30900, 10772, 10772, 10772, 10772, 664, 664, 31005, 31134,
!     25877, 31005, 31005, 31134, 25877, 31005, 664, 664, 664, 664,
!     664, 664, 664, 664, 31245, 31374, 31504, 31632, 31760, 31888,
!     32016, 30380, 792, 792, 792, 792, 792, 664, 664, 664,
!     664, 10717, 11614, 664, 664, 664, 664, 6807, 32139, 11403,
!     11019, 11147, 32267, 32395, 32523, 32651, 32779, 32907, 1305, 1305,
!     3225, 1109, 1238, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 15872, 15872, 15872, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 15872, 15872, 15872, 15872,
!     15872, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 19457, 10396,
!     10396, 10396, 10396, 19457, 10396, 10396, 10498, 19457, 19457, 19457,
!     10498, 10498, 19457, 19457, 19457, 10498, 10396, 19457, 10396, 10396,
!     10396, 19457, 19457, 19457, 19457, 19457, 10396, 10396, 41098, 41226,
!     41354, 41482, 41610, 41738, 41866, 41994, 42122, 17798, 17798, 17798,
!     17798, 17798, 17798, 10772, 17668, 17668, 17668, 17668, 17668, 10396,
!     10396, 42250, 42378, 42506, 15872, 15872, 15872, 10396, 10396, 10396,
!     10396, 15872, 10396, 10396, 10396, 10396, 15872, 15872, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 3225, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 3225, 3225, 10396, 10396,
!     3225, 10396, 3225, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 3225, 10396,
!     10396, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 37642, 37770, 37898, 38026, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 3225, 3225, 3225, 3225, 3225, 10396, 10396, 10396, 10396,
!     10396, 3225, 3225, 10396, 10396, 10396, 10396, 19457, 10396, 33025,
!     10396, 19457, 10396, 33153, 33281, 19457, 19457, 10908, 10498, 19457,
!     19457, 10396, 19457, 10498, 14853, 14853, 14853, 14853, 10498, 10396,
!     15872, 15872, 15872, 15872, 15872, 33546, 33674, 33802, 33930, 34058,
!     34186, 34314, 34442, 34570, 34698, 34826, 34954, 35082, 35210, 35338,
!     35466, 35594, 35722, 35850, 35978, 36106, 36234, 36362, 36490, 36618,
!     36746, 36874, 37002, 37130, 37258, 37386, 37514, 3225, 3225, 3161,
!     3161, 3225, 3225, 3161, 3161, 3161, 3161, 3161, 3161, 3161,
      3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161,
!     3161, 3161, 3225, 3225, 3225, 3225, 3225, 3161, 3161, 3161,
!     3161, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
!     3161, 3161, 3161, 3161, 3161, 3225, 3225, 3161, 3161, 3225,
!     3225, 3225, 3225, 3161, 3161, 3161, 3161, 3161, 3161, 3161,
!     3161, 3161, 3161, 3161, 3161, 3161, 3225, 3225, 3161, 3161,
!     3161, 3161, 3225, 3225, 3225, 3225, 3225, 3161, 3225, 3225,
!     3225, 3225, 3225, 3225, 3225, 10396, 10396, 3225, 10396, 10396,
!     3225, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 3225, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 15872, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
-     10396, 10396, 10396, 10396, 10396, 10396, 15872, 15872, 15872, 15872,
-     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
-     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
-     15872, 3225, 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3161,
-     3161, 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3161, 1305,
-     1305, 3225, 3161, 3161, 3225, 3225, 3225, 3161, 3161, 3161,
-     3161, 3225, 3161, 3225, 3161, 3225, 3225, 3225, 3225, 3161,
-     3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3225, 3225,
-     3225, 3225, 3225, 3161, 3225, 3161, 3161, 3161, 3161, 3161,
-     10396, 10396, 10396, 10396, 10396, 10396, 10396, 1109, 1238, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252,
!     20252, 20252, 20252, 15872, 15872, 15872, 15872, 20252, 20252, 20252,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 39580,
!     39580, 39580, 39580, 39580, 39580, 39580, 39580, 39580, 39580, 39580,
!     39580, 39580, 39580, 39580, 39580, 39708, 39708, 39708, 39708, 39708,
!     39708, 39708, 39708, 39708, 39708, 39708, 39708, 39708, 39708, 39708,
!     39708, 32139, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 3161, 3225, 3161, 3225, 3161, 3161, 3161,
!     3161, 3161, 3161, 3161, 3161, 3225, 3225, 3161, 3161, 3161,
      3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161,
!     3161, 3161, 3161, 3161, 3161, 3225, 3225, 3161, 3161, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 922, 922, 3225, 6683, 10396, 922, 922,
!     15872, 10396, 3225, 3225, 3225, 3225, 10396, 10396, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 23056, 23056,
!     23056, 10396, 10396, 15872, 15872, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 15872, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 15872, 10396, 15872, 10396,
!     10396, 10396, 10396, 15872, 15872, 15872, 10396, 15872, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 33419,
!     39819, 39947, 40075, 40203, 40331, 40459, 40587, 40715, 40843, 33419,
!     39819, 39947, 40075, 40203, 40331, 40459, 40587, 40715, 40843, 10396,
!     15872, 15872, 15872, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 3161, 3161, 3161, 3161, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 20252, 10396, 10396, 10396,
!     10396, 10396, 15872, 15872, 15872, 15872, 15872, 25099, 25099, 25099,
!     25099, 25099, 25099, 25099, 25099, 25099, 25099, 20252, 20252, 20252,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 15872,
!     15872, 15872, 20252, 24587, 24715, 24843, 24971, 42635, 42763, 42891,
!     43019, 43147, 25355, 20252, 20252, 20252, 20252, 20252, 20252, 20252,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252,
!     10396, 15872, 10396, 10396, 10396, 15872, 10396, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 11403, 11019, 11147, 32267, 32395, 32523, 32651, 32779,
!     32907, 38155, 38283, 38411, 38539, 38667, 38795, 38923, 39051, 39179,
!     39307, 39435, 11403, 11019, 11147, 32267, 32395, 32523, 32651, 32779,
!     32907, 38155, 38283, 38411, 38539, 38667, 38795, 38923, 39051, 39179,
!     39307, 39435, 20252, 20252, 20252, 20252, 524, 664, 664, 664,
!     10396, 17668, 14853, 40970, 1109, 1238, 1109, 1238, 1109, 1238,
!     1109, 1238, 1109, 1238, 10396, 10396, 1109, 1238, 1109, 1238,
!     1109, 1238, 1109, 1238, 10772, 25877, 26006, 26006, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 15872,
!     15872, 15872, 15872, 17798, 17798, 6683, 6683, 17668, 17668, 15872,
!     14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853, 14853,
!     14853, 14853, 14853, 14853, 14853, 15872, 20252, 20252, 25099, 25099,
!     25099, 25099, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252,
!     20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 20252, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 43283, 43283, 43283,
!     43283, 43283, 43283, 43283, 43283, 43283, 43283, 43283, 43283, 43283,
!     43283, 43283, 43283, 43283, 43283, 43283, 43283, 43283, 43283, 43283,
!     43283, 43283, 43283, 43283, 43283, 43283, 43283, 43283, 43283, 43410,
!     43410, 43410, 43410, 43410, 43410, 43410, 43410, 43410, 43410, 43410,
!     43410, 43410, 43410, 43410, 43410, 43410, 43410, 43410, 43410, 43410,
!     43410, 43410, 43410, 43410, 43410, 43410, 43410, 43410, 43410, 43410,
!     43410, 20997, 20997, 20997, 20997, 20997, 20997, 20997, 20997, 20997,
!     1305, 20997, 20997, 20997, 20997, 20997, 20997, 20997, 20997, 20997,
!     20997, 20997, 20997, 20997, 15872, 20997, 20997, 20997, 20997, 20997,
!     15872, 20997, 15872, 17798, 17798, 17798, 17798, 15872, 15872, 15872,
!     15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 664,
!     10772, 10772, 6807, 6807, 25877, 26006, 25877, 26006, 25877, 26006,
!     25877, 26006, 25877, 26006, 25877, 26006, 15872, 15872, 15872, 15872,
!     664, 664, 664, 664, 6807, 6807, 6807, 1432, 664, 1432,
!     15872, 664, 1432, 664, 664, 10772, 25877, 26006, 25877, 26006,
!     25877, 26006, 792, 664, 3329, 3457, 3585, 3713, 3841, 3969,
!     4097, 4225, 4353, 4481, 4609, 4737, 4865, 4993, 5121, 5249,
!     5377, 5505, 5633, 5761, 5889, 6017, 6145, 6273, 6401, 6529,
!     25877, 664, 26006, 6683, 6807,
    };
  /** Length of data. */
! static const int data_length = 5345;
  
  /**
   * This is the attribute table for computing the numeric value of a
--- 347,836 ----
      4097, 4225, 4353, 4481, 4609, 4737, 4865, 4993, 5121, 5249,
      5377, 5505, 5633, 5761, 5889, 6017, 6145, 6273, 6401, 6529,
      1109, 664, 1238, 6683, 6807, 664, 664, 664, 3225, 1109,
!     1238, 16000, 664, 664, 664, 664, 664, 664, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 10284, 664, 922, 922,
      922, 922, 10396, 10396, 6683, 10396, 10498, 10717, 3225, 10772,
      10396, 6683, 10908, 1305, 11019, 11147, 6683, 11266, 10396, 664,
      6683, 11403, 10498, 11614, 11659, 11659, 11659, 664, 664, 1305,
!     1556, 3225, 3225, 3225, 16000, 664, 922, 792, 664, 16000,
!     16000, 16000, 16000, 21509, 21509, 21509, 16000, 21509, 16000, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 16000, 16000, 16000, 17926, 17926, 17926, 17926, 17926,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 16000, 20508, 20508,
!     20353, 20353, 20353, 20353, 20353, 20353, 20353, 20353, 20353, 20353,
!     20353, 20353, 20353, 20353, 20353, 20353, 11777, 11777, 11777, 11777,
      11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777,
      11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 3225,
!     11777, 11777, 11777, 11777, 11777, 11777, 11777, 11906, 11906, 11906,
!     18690, 18690, 11906, 11906, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 11906, 11906, 11906, 11906,
!     11906, 16000, 16000, 16000, 16000, 16000, 21253, 17926, 21253, 21253,
!     16000, 21253, 21253, 16000, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21400, 21509, 17926, 17926, 17926, 17926,
!     17926, 17926, 17926, 20615, 20615, 17926, 20615, 20615, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     11659, 11659, 11659, 11659, 11659, 11659, 11659, 11659, 11659, 11659,
!     11659, 11659, 33803, 12418, 12289, 12418, 12289, 12418, 12289, 12418,
!     12289, 12418, 11906, 12289, 12418, 12289, 12418, 12289, 12418, 12289,
!     12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289,
!     12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289,
!     12418, 12289, 12418, 12289, 12418, 16000, 16000, 16000, 16000, 16000,
!     16000, 23561, 23689, 23817, 23945, 24073, 24201, 24329, 24457, 24585,
!     24713, 17926, 17926, 14981, 14981, 14981, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 6683, 6683, 18177,
!     664, 18305, 18305, 18305, 16000, 18433, 16000, 18561, 18561, 18690,
      11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777,
!     11777, 11777, 11777, 11777, 11777, 11777, 12034, 12034, 12034, 12034,
!     12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034,
!     12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 3225,
!     12034, 12034, 12034, 12034, 12034, 12034, 12034, 12162, 12034, 12034,
!     19074, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034,
!     19202, 19330, 19330, 16000, 19458, 19586, 19713, 19713, 19713, 19842,
!     19970, 10498, 16000, 16000, 12289, 12418, 12289, 12418, 12289, 12418,
!     12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418,
!     11906, 15233, 15363, 15490, 12289, 12418, 15745, 15873, 12289, 12418,
!     12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418,
!     12289, 12418, 12289, 12418, 12545, 12674, 12289, 12418, 12289, 12418,
!     12289, 12418, 10498, 12289, 12418, 12289, 12418, 12289, 12418, 12289,
!     12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 20098,
!     20226, 15618, 10498, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 23312, 23312, 23312, 23312, 23312,
!     23312, 32523, 16000, 16000, 16000, 32651, 32779, 32907, 33035, 33163,
!     33291, 1305, 1305, 3225, 1109, 1238, 10498, 13057, 12289, 12418,
!     12289, 12418, 13185, 12289, 12418, 13313, 13313, 12289, 12418, 10498,
!     13441, 13569, 13697, 12289, 12418, 13313, 13825, 13954, 14081, 14209,
!     12289, 12418, 10498, 10498, 14081, 14337, 10498, 14465, 14981, 14981,
!     14981, 14981, 15233, 15363, 15490, 15233, 15363, 15490, 15233, 15363,
!     15490, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289,
!     12418, 12289, 12418, 12289, 12418, 12289, 12418, 15618, 12289, 12418,
!     20508, 17926, 17926, 17926, 17926, 16000, 20615, 20615, 16000, 16000,
!     12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418,
!     12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418,
!     12289, 12418, 12289, 12418, 12801, 12289, 12418, 12289, 12418, 12289,
!     12418, 12930, 12289, 12418, 12289, 12418, 12289, 12418, 14593, 12289,
!     12418, 14593, 10498, 10498, 12289, 12418, 14593, 12289, 12418, 14721,
!     14721, 12289, 12418, 12289, 12418, 14849, 12289, 12418, 10498, 14981,
!     12289, 12418, 10498, 15106, 19713, 12289, 12418, 12289, 12418, 16000,
!     16000, 12289, 12418, 16000, 16000, 12289, 12418, 16000, 16000, 16000,
!     12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418,
!     12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     1432, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 21400, 16000, 16000, 16000, 21400,
!     21400, 21400, 21400, 21400, 21400, 21400, 21400, 21400, 21400, 21400,
!     21400, 21400, 21400, 16000, 23312, 21509, 17926, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 16000, 16000, 23312, 19713,
!     19713, 19713, 19713, 19713, 19713, 19713, 19713, 19713, 19713, 19713,
!     19713, 19713, 19713, 19713, 19713, 19713, 19713, 19713, 19713, 19713,
!     19713, 19713, 19713, 19713, 19713, 19713, 19713, 19713, 19713, 19713,
!     19713, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000,
!     14981, 16000, 16000, 16000, 16000, 16000, 23561, 23689, 23817, 23945,
!     24073, 24201, 24329, 24457, 24585, 24713, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 10498, 10498,
!     10498, 16130, 16258, 10498, 16386, 16386, 10498, 16514, 10498, 16642,
!     10498, 10498, 10498, 10498, 16386, 10498, 10498, 16770, 10498, 10498,
!     10498, 10498, 16898, 17026, 10498, 10498, 10498, 10498, 10498, 17026,
!     10498, 10498, 17154, 10498, 10498, 17282, 10498, 10498, 10498, 10498,
!     10498, 10498, 10498, 10498, 10498, 10498, 17410, 10498, 10498, 17410,
!     10498, 10498, 10498, 10498, 17410, 10498, 17538, 17538, 10498, 10498,
!     10498, 10498, 10498, 10498, 17666, 10498, 10498, 10498, 10498, 10498,
!     10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 16000,
!     16000, 17796, 17796, 17796, 17796, 17796, 17796, 17796, 17796, 17796,
!     6683, 6683, 17796, 17796, 17796, 17796, 17796, 6683, 6683, 6683,
!     6683, 6683, 6683, 6683, 6683, 6683, 17796, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 20737, 20737, 20737, 20737, 20737, 20737,
!     20737, 20737, 20737, 20737, 20737, 20737, 20737, 20737, 20737, 20737,
!     20737, 20737, 20737, 20737, 20737, 20737, 20737, 16000, 16000, 17796,
!     20888, 20888, 20888, 20888, 20888, 20888, 11777, 11777, 16000, 11777,
!     11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 18818, 18946,
!     18946, 18946, 18690, 12034, 12034, 12034, 12034, 12034, 12034, 12034,
!     12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 20226,
!     20226, 20226, 20226, 20226, 20226, 20226, 20226, 20226, 20226, 20226,
!     20226, 20226, 20226, 20226, 20226, 17926, 17926, 17926, 17926, 17926,
!     20888, 17926, 17926, 14981, 14981, 14981, 14981, 16000, 16000, 16000,
!     16000, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 16000,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     17926, 17926, 17926, 16000, 17926, 17926, 17926, 21144, 17926, 17926,
!     21144, 17926, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 16000,
!     16000, 16000, 16000, 16000, 21253, 21253, 21253, 21144, 21144, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     23689, 23817, 23945, 24073, 24201, 24329, 24457, 24585, 24713, 25611,
!     25739, 25867, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 17926, 23432, 16000, 14981, 14981,
!     14981, 14981, 14981, 14981, 16000, 16000, 16000, 14981, 14981, 14981,
!     16000, 14981, 14981, 14981, 14981, 16000, 16000, 16000, 14981, 14981,
!     16000, 14981, 16000, 14981, 14981, 14981, 14981, 16000, 16000, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 16000, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 16000, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 16000, 16000, 16000, 16000, 16000, 16000,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     17926, 17926, 17926, 17926, 23432, 23432, 23432, 23432, 16000, 17926,
!     17926, 17926, 16000, 17926, 17926, 17926, 17926, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 17926, 17926, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 17926, 23432, 23432, 16000, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000, 16000, 14981,
!     14981, 16000, 16000, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 16000, 16000, 16000, 16000,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 16000, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 16000, 16000, 16000, 16000, 23432, 23432, 16000, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000, 16000, 16000,
!     14981, 14981, 14981, 14981, 14981, 14981, 16000, 16000, 14981, 14981,
!     14981, 14981, 14981, 14981, 16000, 16000, 14981, 14981, 14981, 14981,
!     14981, 14981, 16000, 16000, 14981, 14981, 14981, 16000, 16000, 16000,
!     16000, 23561, 23689, 23817, 23945, 24073, 24201, 24329, 24457, 24585,
!     24713, 20508, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 21769, 21897, 22025,
!     22153, 22281, 22409, 22537, 22665, 22793, 22921, 792, 23064, 23064,
!     21400, 16000, 16000, 17926, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     16000, 16000, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 26133, 26262, 21636, 21509, 21509, 21509,
!     21509, 21509, 21509, 21509, 21509, 21509, 21509, 17926, 17926, 17926,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 23432,
!     23432, 20888, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 17926, 17926, 23432, 16000, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 16000, 14981, 16000, 14981, 14981, 14981,
!     16000, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 20888, 20888, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 17926, 17926, 17926, 17926, 17926, 21636, 21636,
!     17926, 17926, 10396, 17926, 17926, 17926, 17926, 16000, 16000, 1801,
!     1929, 2057, 2185, 2313, 2441, 2569, 2697, 2825, 2953, 21509,
!     21509, 21509, 23196, 23196, 16000, 14981, 14981, 14981, 16000, 14981,
!     16000, 14981, 16000, 16000, 14981, 14981, 16000, 14981, 14981, 14981,
!     14981, 17926, 14981, 14981, 17926, 17926, 17926, 17926, 17926, 17926,
!     16000, 17926, 17926, 14981, 16000, 16000, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 16000, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 16000, 14981, 14981, 14981,
!     14981, 14981, 16000, 16000, 16000, 16000, 17926, 17926, 23432, 16000,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 16000, 16000, 17926, 14981, 23432, 23432, 23432, 23432,
!     23432, 16000, 17926, 23432, 23432, 16000, 23432, 23432, 17926, 17926,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 23432, 23432, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 14981, 16000, 20888, 20888,
!     20888, 20888, 20888, 20888, 20888, 20888, 23689, 23817, 23945, 24073,
!     24201, 24329, 24457, 24585, 24713, 25611, 26379, 26507, 26635, 26763,
!     26891, 27019, 27147, 27275, 25739, 27403, 16000, 16000, 16000, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 16000, 14981, 14981, 16000,
!     16000, 14981, 14981, 14981, 14981, 16000, 16000, 17926, 14981, 23432,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 23432, 23432,
!     23432, 23432, 17926, 16000, 16000, 14981, 17926, 17926, 17926, 17926,
!     16000, 16000, 16000, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 16000, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     16000, 14981, 16000, 16000, 16000, 14981, 14981, 14981, 14981, 16000,
!     16000, 17926, 16000, 23432, 23432, 23432, 16000, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 16000, 14981, 14981, 14981, 16000,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 16000, 14981, 16000, 14981, 14981,
!     14981, 14981, 16000, 16000, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 16000, 14981, 16000, 14981, 14981, 14981, 14981, 16000, 16000,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 17926, 14981, 14981,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 16000, 16000, 16000,
!     16000, 922, 922, 922, 922, 922, 922, 922, 922, 922,
!     922, 922, 922, 922, 922, 922, 922, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 14981, 14981, 17926, 17926, 20888, 20888, 23561,
!     23689, 23817, 23945, 24073, 24201, 24329, 24457, 24585, 24713, 20888,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 664, 664, 792, 922, 792,
!     664, 664, 26133, 26262, 664, 1305, 1432, 1556, 1432, 1688,
!     1801, 1929, 2057, 2185, 2313, 2441, 2569, 2697, 2825, 2953,
!     1432, 664, 3225, 3225, 3225, 664, 664, 664, 664, 664,
!     664, 10772, 664, 664, 664, 664, 23312, 23312, 23312, 23312,
!     16000, 23561, 23689, 23817, 23945, 24073, 24201, 24329, 24457, 24585,
!     24713, 16000, 16000, 16000, 16000, 16000, 16000, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 16000, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000, 14981, 14981,
!     14981, 14981, 14981, 16000, 16000, 16000, 16000, 23432, 17926, 17926,
!     17926, 17926, 16000, 16000, 23432, 23432, 16000, 16000, 23432, 23432,
!     17926, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     23432, 16000, 16000, 16000, 16000, 14981, 14981, 16000, 14981, 16000,
!     16000, 14981, 14981, 16000, 14981, 16000, 16000, 14981, 16000, 16000,
!     16000, 16000, 16000, 16000, 14981, 14981, 14981, 14981, 16000, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 16000, 14981, 14981, 16000,
!     14981, 14981, 16000, 14981, 14981, 16000, 16000, 17926, 16000, 23432,
!     23432, 17926, 17926, 16000, 16000, 16000, 16000, 17926, 17926, 16000,
!     16000, 17926, 17926, 17926, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 14981, 14981, 14981, 14981, 16000,
!     14981, 16000, 14981, 14981, 17926, 17926, 16000, 16000, 23561, 23689,
!     23817, 23945, 24073, 24201, 24329, 24457, 24585, 24713, 14981, 14981,
!     922, 922, 24843, 24971, 25099, 25227, 25355, 25483, 20508, 16000,
!     16000, 16000, 16000, 16000, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 16000, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 16000, 14981, 14981, 16000, 14981, 14981, 14981, 14981, 14981,
!     16000, 16000, 17926, 14981, 23432, 23432, 17926, 17926, 17926, 17926,
!     17926, 16000, 17926, 17926, 23432, 16000, 23432, 23432, 17926, 16000,
!     16000, 14981, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 23561, 23689, 23817,
!     23945, 24073, 24201, 24329, 24457, 24585, 24713, 25355, 25355, 25355,
!     25355, 25355, 25355, 25355, 25355, 25355, 25355, 20508, 17926, 20508,
!     17926, 20508, 17926, 26133, 26262, 26133, 26262, 23432, 23432, 17926,
!     17926, 17926, 16000, 16000, 16000, 23432, 23432, 16000, 16000, 23432,
!     23432, 17926, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     17926, 23432, 16000, 16000, 16000, 16000, 14981, 14981, 16000, 14981,
!     14981, 14981, 14981, 14981, 16000, 14981, 14981, 16000, 23432, 17926,
!     17926, 17926, 17926, 23432, 17926, 16000, 16000, 16000, 17926, 17926,
!     23432, 17926, 16000, 16000, 16000, 16000, 16000, 16000, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 23432, 23432,
!     23432, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 23432, 23432,
!     16000, 16000, 16000, 23432, 23432, 23432, 16000, 23432, 23432, 23432,
!     17926, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     23432, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 14981,
!     14981, 14981, 14981, 14981, 16000, 17796, 16000, 17926, 17926, 17926,
!     17926, 17926, 17926, 16000, 16000, 23561, 23689, 23817, 23945, 24073,
!     24201, 24329, 24457, 24585, 24713, 16000, 16000, 14981, 14981, 16000,
!     16000, 16000, 16000, 23561, 23689, 23817, 23945, 24073, 24201, 24329,
!     24457, 24585, 24713, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 17926,
!     17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     17926, 17926, 20615, 20615, 20615, 23432, 17926, 17926, 17926, 16000,
!     16000, 23432, 23432, 23432, 16000, 23432, 23432, 23432, 17926, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 23432, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 16000, 16000, 16000, 17926, 16000, 16000,
!     16000, 16000, 23432, 23432, 23432, 17926, 17926, 17926, 16000, 17926,
!     16000, 23432, 23432, 23432, 23432, 23432, 23432, 23432, 23432, 17926,
!     23432, 23432, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     17926, 17926, 17926, 20888, 20888, 20888, 20888, 20888, 20888, 20888,
!     922, 20888, 16000, 16000, 16000, 14981, 14981, 14981, 14981, 14981,
!     14981, 17796, 17926, 17926, 17926, 17926, 17926, 17926, 17926, 17926,
!     20888, 23561, 23689, 23817, 23945, 24073, 24201, 24329, 24457, 24585,
!     24713, 20888, 20888, 16000, 16000, 16000, 16000, 14981, 20508, 20508,
!     20508, 20888, 20888, 20888, 20888, 20888, 20888, 20888, 20888, 26040,
!     20888, 20888, 20888, 20888, 20888, 20888, 20508, 20508, 20508, 20508,
!     20508, 17926, 17926, 20508, 20508, 20508, 20508, 20508, 20508, 17926,
!     20508, 20508, 20508, 20508, 20508, 20508, 16000, 16000, 20508, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 10396, 16000, 16000, 16000,
!     16000, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 16000, 16000, 16000, 16000,
!     16000, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 6807, 17796,
!     17796, 17796, 16000, 23561, 23689, 23817, 23945, 24073, 24201, 24329,
!     24457, 24585, 24713, 20888, 20888, 20888, 20888, 20888, 20888, 14981,
!     14981, 14981, 14981, 14981, 14981, 23432, 23432, 17926, 17926, 16000,
!     16000, 16000, 16000, 16000, 16000, 524, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 26133, 26262, 16000, 16000, 16000, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 20888, 20888,
!     20888, 27531, 27659, 27787, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 17926, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289,
!     12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289,
!     12418, 12289, 12418, 11906, 11906, 11906, 11906, 11906, 27906, 16000,
!     16000, 16000, 16000, 28034, 28034, 28034, 28034, 28034, 28034, 28034,
!     28034, 28161, 28161, 28161, 28161, 28161, 28161, 28161, 28161, 28034,
!     28034, 28034, 28034, 28034, 28034, 28034, 28034, 28161, 28161, 28161,
!     28161, 28161, 28161, 28161, 28161, 28034, 28034, 28034, 28034, 28034,
!     28034, 16000, 16000, 28161, 28161, 28161, 28161, 28161, 28161, 16000,
!     16000, 11906, 28034, 18690, 28034, 18690, 28034, 18690, 28034, 16000,
!     28161, 16000, 28161, 16000, 28161, 16000, 28161, 28034, 28034, 28034,
!     28034, 28034, 28034, 28034, 28034, 28161, 28161, 28161, 28161, 28161,
!     28161, 28161, 28161, 28290, 28290, 28418, 28418, 28418, 28418, 28546,
!     28546, 28674, 28674, 28802, 28802, 28930, 28930, 16000, 16000, 29058,
!     29058, 29058, 29058, 29058, 29058, 29058, 29058, 29187, 29187, 29187,
!     29187, 29187, 29187, 29187, 29187, 29058, 29058, 29058, 29058, 29058,
!     29058, 29058, 29058, 29187, 29187, 29187, 29187, 29187, 29187, 29187,
!     29187, 28034, 28034, 11906, 29314, 11906, 16000, 11906, 18690, 28161,
!     28161, 29441, 29441, 29571, 6683, 29698, 6683, 6914, 7042, 7170,
!     7298, 7426, 7554, 7682, 7810, 7938, 8066, 8194, 8322, 8450,
!     8578, 8706, 8834, 8962, 9090, 9218, 9346, 9474, 9602, 9730,
!     9858, 9986, 10114, 26133, 3225, 26262, 3225, 16000, 28034, 28034,
!     18690, 18690, 11906, 30082, 11906, 18690, 28161, 28161, 30209, 30209,
!     30337, 6683, 6683, 6683, 16000, 16000, 11906, 29314, 11906, 16000,
!     11906, 18690, 30465, 30465, 30593, 30593, 29571, 6683, 6683, 16000,
!     524, 524, 524, 524, 524, 524, 524, 30764, 524, 524,
!     524, 30860, 23312, 23312, 30992, 31120, 10772, 31284, 10772, 10772,
!     10772, 10772, 664, 664, 31389, 31518, 26133, 31389, 31389, 31518,
!     26133, 31389, 664, 664, 664, 664, 664, 664, 664, 664,
!     31629, 31758, 31888, 32016, 32144, 32272, 32400, 30764, 792, 792,
!     792, 792, 792, 664, 664, 664, 664, 10717, 11614, 664,
!     664, 664, 664, 6807, 32523, 11403, 11019, 11147, 32651, 32779,
!     32907, 33035, 33163, 33291, 1305, 1305, 3225, 1109, 1238, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 16000,
!     16000, 16000, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 16000, 16000, 16000, 16000, 16000, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 19713, 10396, 10396, 10396, 10396, 19713,
!     10396, 10396, 10498, 19713, 19713, 19713, 10498, 10498, 19713, 19713,
!     19713, 10498, 10396, 19713, 10396, 10396, 10396, 19713, 19713, 19713,
!     19713, 19713, 10396, 10396, 41482, 41610, 41738, 41866, 41994, 42122,
!     42250, 42378, 42506, 17926, 17926, 17926, 17926, 17926, 17926, 10772,
!     17796, 17796, 17796, 17796, 17796, 10396, 10396, 42634, 42762, 42890,
!     16000, 16000, 16000, 10396, 10396, 10396, 10396, 16000, 10396, 10396,
!     10396, 10396, 16000, 16000, 10396, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 10396, 3225, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
+     10396, 10396, 3225, 3225, 10396, 10396, 3225, 10396, 3225, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 3225, 10396, 10396, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 38026, 38154, 38282, 38410, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 3225, 3225, 3225,
!     3225, 3225, 10396, 10396, 10396, 10396, 10396, 3225, 3225, 10396,
!     10396, 10396, 10396, 19713, 10396, 33409, 10396, 19713, 10396, 33537,
!     33665, 19713, 19713, 10908, 10498, 19713, 19713, 10396, 19713, 10498,
!     14981, 14981, 14981, 14981, 10498, 10396, 16000, 16000, 16000, 16000,
!     16000, 33930, 34058, 34186, 34314, 34442, 34570, 34698, 34826, 34954,
!     35082, 35210, 35338, 35466, 35594, 35722, 35850, 35978, 36106, 36234,
!     36362, 36490, 36618, 36746, 36874, 37002, 37130, 37258, 37386, 37514,
!     37642, 37770, 37898, 3225, 3225, 3161, 3161, 3225, 3225, 3161,
      3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161,
!     3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3225, 3225,
!     3225, 3225, 3225, 3161, 3161, 3161, 3161, 3225, 3225, 3225,
!     3225, 3225, 3225, 3225, 3225, 3225, 3161, 3161, 3161, 3161,
!     3161, 3225, 3225, 3161, 3161, 3225, 3225, 3225, 3225, 3161,
!     3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161,
!     3161, 3161, 3225, 3225, 3161, 3161, 3161, 3161, 3225, 3225,
!     3225, 3225, 3225, 3161, 3225, 3225, 3225, 3225, 3225, 3225,
!     3225, 10396, 10396, 3225, 10396, 10396, 3225, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 3225, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 10396, 16000, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 3225, 3161, 3161,
!     3161, 3161, 3225, 3225, 3225, 3161, 3161, 3161, 3161, 3161,
!     3161, 3225, 3225, 3225, 3161, 1305, 1305, 3225, 3161, 3161,
!     3225, 3225, 3225, 3161, 3161, 3161, 3161, 3225, 3161, 3225,
!     3161, 3225, 3225, 3225, 3225, 3161, 3161, 3161, 3161, 3161,
!     3161, 3161, 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3161,
!     3225, 3161, 3161, 3161, 3161, 3161, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 1109, 1238, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 16000,
!     16000, 16000, 16000, 20508, 20508, 20508, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 39964, 39964, 39964, 39964, 39964,
!     39964, 39964, 39964, 39964, 39964, 39964, 39964, 39964, 39964, 39964,
!     39964, 40092, 40092, 40092, 40092, 40092, 40092, 40092, 40092, 40092,
!     40092, 40092, 40092, 40092, 40092, 40092, 40092, 32523, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 3161,
!     3225, 3161, 3225, 3161, 3161, 3161, 3161, 3161, 3161, 3161,
!     3161, 3225, 3225, 3161, 3161, 3161, 3161, 3161, 3161, 3161,
      3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161,
!     3161, 3225, 3225, 3161, 3161, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 922,
!     922, 3225, 6683, 10396, 922, 922, 16000, 10396, 3225, 3225,
!     3225, 3225, 10396, 10396, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 23312, 23312, 23312, 10396, 10396, 16000,
!     16000, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 10396, 16000, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 16000, 10396, 16000, 10396, 10396, 10396, 10396, 16000,
!     16000, 16000, 10396, 16000, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 33803, 40203, 40331, 40459, 40587,
!     40715, 40843, 40971, 41099, 41227, 33803, 40203, 40331, 40459, 40587,
!     40715, 40843, 40971, 41099, 41227, 10396, 16000, 16000, 16000, 10396,
!     10396, 10396, 10396, 10396, 10396, 10396, 10396, 3161, 3161, 3161,
!     3161, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
      10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396,
!     10396, 10396, 20508, 10396, 10396, 10396, 10396, 10396, 16000, 16000,
!     16000, 16000, 16000, 25355, 25355, 25355, 25355, 25355, 25355, 25355,
!     25355, 25355, 25355, 20508, 20508, 20508, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 16000, 16000, 16000, 20508, 24843,
!     24971, 25099, 25227, 43019, 43147, 43275, 43403, 43531, 25611, 20508,
!     20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 20508, 10396, 16000, 10396, 10396,
!     10396, 16000, 10396, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 11403, 11019,
!     11147, 32651, 32779, 32907, 33035, 33163, 33291, 38539, 38667, 38795,
!     38923, 39051, 39179, 39307, 39435, 39563, 39691, 39819, 11403, 11019,
!     11147, 32651, 32779, 32907, 33035, 33163, 33291, 38539, 38667, 38795,
!     38923, 39051, 39179, 39307, 39435, 39563, 39691, 39819, 20508, 20508,
!     20508, 20508, 524, 664, 664, 664, 10396, 17796, 14981, 41354,
!     1109, 1238, 1109, 1238, 1109, 1238, 1109, 1238, 1109, 1238,
!     10396, 10396, 1109, 1238, 1109, 1238, 1109, 1238, 1109, 1238,
!     10772, 26133, 26262, 26262, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 16000, 16000, 16000, 16000, 17926,
!     17926, 6683, 6683, 17796, 17796, 16000, 14981, 14981, 14981, 14981,
!     14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981, 14981,
!     14981, 16000, 20508, 20508, 25355, 25355, 25355, 25355, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508, 20508,
!     20508, 20508, 20508, 20508, 20508, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 43667, 43667, 43667, 43667, 43667, 43667, 43667,
!     43667, 43667, 43667, 43667, 43667, 43667, 43667, 43667, 43667, 43667,
!     43667, 43667, 43667, 43667, 43667, 43667, 43667, 43667, 43667, 43667,
!     43667, 43667, 43667, 43667, 43667, 43794, 43794, 43794, 43794, 43794,
!     43794, 43794, 43794, 43794, 43794, 43794, 43794, 43794, 43794, 43794,
!     43794, 43794, 43794, 43794, 43794, 43794, 43794, 43794, 43794, 43794,
!     43794, 43794, 43794, 43794, 43794, 43794, 43794, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 1305, 21253, 21253, 21253,
!     21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253, 21253,
!     16000, 21253, 21253, 21253, 21253, 21253, 16000, 21253, 16000, 17926,
!     17926, 17926, 17926, 16000, 16000, 16000, 16000, 16000, 16000, 16000,
!     16000, 16000, 16000, 16000, 16000, 664, 10772, 10772, 6807, 6807,
!     26133, 26262, 26133, 26262, 26133, 26262, 26133, 26262, 26133, 26262,
!     26133, 26262, 16000, 16000, 16000, 16000, 664, 664, 664, 664,
!     6807, 6807, 6807, 1432, 664, 1432, 16000, 664, 1432, 664,
!     664, 10772, 26133, 26262, 26133, 26262, 26133, 26262, 792, 664,
!     3329, 3457, 3585, 3713, 3841, 3969, 4097, 4225, 4353, 4481,
!     4609, 4737, 4865, 4993, 5121, 5249, 5377, 5505, 5633, 5761,
!     5889, 6017, 6145, 6273, 6401, 6529, 26133, 664, 26262, 6683,
!     6807,
    };
  /** Length of data. */
! static const int data_length = 5351;
  
  /**
   * This is the attribute table for computing the numeric value of a
*************** static const jshort numValue[] = {
*** 849,872 ****
      -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
-     1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1,
-     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3,
-     4, -1, 16, 10, 100, 1000, -1, -1, -1, 20, 30, 40, 50,
-     60, 70, 80, 90, 10000, 17, 18, 19, -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, -1, -1, -1,
!     -1, -1, -1, -1, 0, 4, 5, 6, 7, 8, 9, -1, -1,
!     -1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
!     12, 50, 100, 500, 1000, 1, 2, 3, 4, 5, 6, 7, 8,
!     9, 10, 11, 12, 50, 100, 500, 1000, 1000, 5000, 10000, -1, 10,
!     11, 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, -1, 2,
!     3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4,
!     5, 6, 7, 8, 9, 10, 20, 30, 5, 6, 7, 8, 9,
!     -1, -1,
    };
  /** Length of numValue. */
! static const int numValue_length = 340;
  
  /**
   * This is the attribute table for computing the uppercase representation
--- 850,873 ----
      -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, -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, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1,
+     -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1,
+     2, 3, 4, -1, 16, 10, 100, 1000, -1, -1, -1, 20, 30,
+     40, 50, 60, 70, 80, 90, 10000, 17, 18, 19, -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, -1,
!     -1, -1, -1, -1, -1, -1, -1, 0, 4, 5, 6, 7, 8,
!     9, -1, -1, -1, 1, 1, 2, 3, 4, 5, 6, 7, 8,
!     9, 10, 11, 12, 50, 100, 500, 1000, 1, 2, 3, 4, 5,
!     6, 7, 8, 9, 10, 11, 12, 50, 100, 500, 1000, 1000, 5000,
!     10000, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
!     -1, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1,
!     2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 5, 6,
!     7, 8, 9, -1, -1,
    };
  /** Length of numValue. */
! static const int numValue_length = 343;
  
  /**
   * This is the attribute table for computing the uppercase representation
*************** static const jshort upper[] = {
*** 881,909 ****
      0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32,
      -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32,
      -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0,
!     0, 0, -32, 121, 0, -1, 0, -232, 0, -300, 0, 0, 0,
!     0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0,
!     56, 0, -1, -2, -79, 0, 0, 0, -210, -206, -205, -202, -203,
!     -207, -209, -211, -213, -214, -218, -217, -219, 0, 0, 84, 0, 0,
!     0, 0, -38, -37, -31, -64, -63, -62, -57, 0, -47, -54, -86,
!     -80, 0, 0, 0, 0, 0, -48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-     0, 0, 0, 0, 0, 0, 0, 0, -59, 8, 0, 74, 86,
-     100, 128, 112, 126, 0, 9, 0, 0, -7205, 0, 0, 7, 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, 0, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, -16, -16, -16, -16, -16, -16, -16, -16,
!     -16, -16, -16, -16, -16, -16, -16, -16, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, 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,
    };
  /** Length of upper. */
! static const int upper_length = 340;
  
  /**
   * This is the attribute table for computing the lowercase representation
--- 882,910 ----
      0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32,
      -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32,
      -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0,
!     0, 0, 0, -32, 121, 0, -1, 0, -232, 0, -300, 0, 0,
!     0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0,
!     0, 56, 0, -1, -2, -79, 0, 0, 0, -210, -206, -205, -202,
!     -203, -207, -209, -211, -213, -214, -218, -217, -219, 0, 0, 84, 0,
!     0, 0, 0, 0, -38, -37, -31, -64, -63, -62, -57, 0, -47,
!     -54, -86, -80, 0, 0, 0, 0, 0, -48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 8, 0,
+     74, 86, 100, 128, 112, 126, 8, 0, 9, 0, 0, -7205, 0,
+     0, 7, 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, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, -16, -16, -16, -16, -16,
!     -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, -26, 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,
    };
  /** Length of upper. */
! static const int upper_length = 343;
  
  /**
   * This is the attribute table for computing the lowercase representation
*************** static const jshort lower[] = {
*** 918,946 ****
      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, 0, 0, 0, 0, 0, 0,
!     0, 32, 0, 0, 1, 0, -199, 0, -121, 0, 210, 206, 205,
!     79, 202, 203, 207, 0, 211, 209, 213, 214, 218, 217, 219, 0,
!     0, 2, 1, 0, 0, -97, -56, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 37,
!     64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
!     0, 80, 0, 0, 48, 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, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 0, 0,
!     0, 0, 0, 0, -8, 0, -74, -9, 0, -86, -100, 0, -112,
!     -7, -128, -126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7517, -8383,
!     -8262, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
!     16, 16, 16, 16, 16, 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, 26, 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,
    };
  /** Length of lower. */
! static const int lower_length = 340;
  
  /**
   * This is the attribute table for computing the directionality class
--- 919,947 ----
      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, 0, 0, 0, 0, 0, 0,
!     0, 32, 0, 0, 0, 1, 0, -199, 0, -121, 0, 210, 206,
!     205, 79, 202, 203, 207, 0, 211, 209, 213, 214, 218, 217, 219,
!     0, 0, 2, 1, 0, 0, -97, -56, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38,
!     37, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 80, 0, 0, 48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8,
!     0, 0, 0, 0, 0, 0, 0, -8, 0, -74, -9, 0, -86,
!     -100, 0, -112, -7, -128, -126, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
!     0, -7517, -8383, -8262, 0, 16, 16, 16, 16, 16, 16, 16, 16,
!     16, 16, 16, 16, 16, 16, 16, 16, 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,
!     26, 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,
    };
  /** Length of lower. */
! static const int lower_length = 343;
  
  /**
   * This is the attribute table for computing the directionality class
*************** static const int lower_length = 340;
*** 948,973 ****
   * character has a direction, otherwise it is -1.
   */
  static const jbyte direction[] = {
!     9, 11, 10, 12, 12, 13, 5, 5, 13, 13, 5, 7, 5, 4, 3, 3, 3, 3, 3, 3, 3,
!     3, 3, 3, 13, 13, 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, 13, 13, 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, 7, 13, 0, 13,
!     13, 5, 3, 3, 0, 3, 13, 13, 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, -1, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 1, 1, 2, 2, 2,
!     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 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, 12, 9, 0, 1, 13, 13, 13, 12, 10, 14, 16, 18, 15, 17, 3,
!     3, 3, 3, 3, 3, 3, 0, 0, 0, 13, 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, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 13, 13, 13, 13,
!     13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0,
    };
  /** Length of direction. */
! static const int direction_length = 340;
  
  /**
   * This is the listing of titlecase special cases (all other character
--- 949,974 ----
   * character has a direction, otherwise it is -1.
   */
  static const jbyte direction[] = {
!     36, 44, 40, 48, 48, 52, 20, 20, 52, 52, 20, 28, 20, 16, 12, 12, 12, 12, 12, 12, 12,
!     12, 12, 12, 52, 52, 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, 52, 52, 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, 28, 52, 0, 52,
!     52, 20, 12, 12, 0, 12, 52, 52, 0, 1, 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, -4,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 0, 0, 0, 0, 2,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 4, 4, 8,
!     8, 8, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 8, 36, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
!     1, 0, 0, 0, 0, 0, 0, 0, 0, 48, 36, 0, 4, 52, 52, 52, 48, 40, 56, 64, 72,
!     60, 68, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 52, 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, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 52,
!     52, 52, 52, 52, 52, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
!     0, 0, 0, 0, 0, 0, 0,
    };
  /** Length of direction. */
! static const int direction_length = 343;
  
  /**
   * This is the listing of titlecase special cases (all other character
diff -Nrcpad gcc-3.4.3/libjava/include/java-interp.h gcc-4.0.0/libjava/include/java-interp.h
*** gcc-3.4.3/libjava/include/java-interp.h	Wed Jul 14 00:24:06 2004
--- gcc-4.0.0/libjava/include/java-interp.h	Thu Mar 17 00:15:55 2005
***************
*** 1,6 ****
  // java-interp.h - Header file for the bytecode interpreter.  -*- c++ -*-
  
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // java-interp.h - Header file for the bytecode interpreter.  -*- c++ -*-
  
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 22,43 ****
  #include <java/lang/Class.h>
  #include <java/lang/ClassLoader.h>
  #include <java/lang/reflect/Modifier.h>
- #include <gnu/gcj/runtime/StackTrace.h>
  
  extern "C" {
  #include <ffi.h>
  }
  
- extern inline jboolean
- _Jv_IsInterpretedClass (jclass c)
- {
-   return (c->accflags & java::lang::reflect::Modifier::INTERPRETED) != 0;
- }
- 
  struct _Jv_ResolvedMethod;
  
  void _Jv_InitInterpreter ();
! void _Jv_DefineClass (jclass, jbyteArray, jint, jint);
  
  void _Jv_InitField (jobject, jclass, int);
  void * _Jv_AllocMethodInvocation (jsize size);
--- 22,37 ----
  #include <java/lang/Class.h>
  #include <java/lang/ClassLoader.h>
  #include <java/lang/reflect/Modifier.h>
  
  extern "C" {
  #include <ffi.h>
  }
  
  struct _Jv_ResolvedMethod;
  
  void _Jv_InitInterpreter ();
! void _Jv_DefineClass (jclass, jbyteArray, jint, jint,
! 		      java::security::ProtectionDomain *);
  
  void _Jv_InitField (jobject, jclass, int);
  void * _Jv_AllocMethodInvocation (jsize size);
*************** int  _Jv_count_arguments (_Jv_Utf8Const 
*** 45,53 ****
  			  jboolean staticp = true);
  void _Jv_VerifyMethod (_Jv_InterpMethod *method);
  
- /* FIXME: this should really be defined in some more generic place */
- #define ROUND(V, A) (((((unsigned) (V))-1) | ((A)-1))+1)
- 
  /* the interpreter is written in C++, primarily because it makes it easy for
   * the entire thing to be "friend" with class Class. */
  
--- 39,44 ----
*************** class _Jv_MethodBase
*** 81,87 ****
  {
  protected:
    // The class which defined this method.
!   _Jv_InterpClass *defining_class;
  
    // The method description.
    _Jv_Method *self;
--- 72,78 ----
  {
  protected:
    // The class which defined this method.
!   jclass defining_class;
  
    // The method description.
    _Jv_Method *self;
*************** protected:
*** 89,99 ****
    // Size of raw arguments.
    _Jv_ushort args_raw_size;
  
!   // Chain of addresses to fill in.  See _Jv_Defer_Resolution.
!   void *deferred;
! 
!   friend void _Jv_Defer_Resolution (void *cl, _Jv_Method *meth, void **);
!   friend void _Jv_PrepareClass(jclass);
  
  public:
    _Jv_Method *get_method ()
--- 80,86 ----
    // Size of raw arguments.
    _Jv_ushort args_raw_size;
  
!   friend class _Jv_InterpreterEngine;
  
  public:
    _Jv_Method *get_method ()
*************** class _Jv_InterpMethod : public _Jv_Meth
*** 151,206 ****
    friend class _Jv_BytecodeVerifier;
    friend class gnu::gcj::runtime::NameFinder;
    friend class gnu::gcj::runtime::StackTrace;
! 
!   friend void _Jv_PrepareClass(jclass);
  
  #ifdef JV_MARKOBJ_DECL
    friend JV_MARKOBJ_DECL;
  #endif
  };
  
! class _Jv_InterpClass : public java::lang::Class
  {
    _Jv_MethodBase **interpreted_methods;
    _Jv_ushort        *field_initializers;
  
    friend class _Jv_ClassReader;
    friend class _Jv_InterpMethod;
!   friend void  _Jv_PrepareClass(jclass);
!   friend void  _Jv_PrepareMissingMethods (jclass base2, jclass iface_class);
    friend void  _Jv_InitField (jobject, jclass, int);
  #ifdef JV_MARKOBJ_DECL
    friend JV_MARKOBJ_DECL;
  #endif
  
    friend _Jv_MethodBase ** _Jv_GetFirstMethod (_Jv_InterpClass *klass);
-   friend void _Jv_Defer_Resolution (void *cl, _Jv_Method *meth, void **);
  };
  
- // We have an interpreted class CL and we're trying to find the
- // address of the ncode of a method METH.  That interpreted class
- // hasn't yet been prepared, so we defer fixups until they are ready.
- // To do this, we create a chain of fixups that will be resolved by
- // _Jv_PrepareClass.
- extern inline void 
- _Jv_Defer_Resolution (void *cl, _Jv_Method *meth, void **address)
- {
-   int i;
-   _Jv_InterpClass *self = (_Jv_InterpClass *)cl;
-   for (i = 0; i < self->method_count; i++)
-     {
-       _Jv_Method *m = &self->methods[i];
-       if (m == meth)
- 	{
- 	  _Jv_MethodBase *imeth = self->interpreted_methods[i];
- 	  *address = imeth->deferred;
- 	  imeth->deferred = address;
- 	  return;
- 	}
-     }
-   return;
- }    
- 
  extern inline _Jv_MethodBase **
  _Jv_GetFirstMethod (_Jv_InterpClass *klass)
  {
--- 138,167 ----
    friend class _Jv_BytecodeVerifier;
    friend class gnu::gcj::runtime::NameFinder;
    friend class gnu::gcj::runtime::StackTrace;
!   friend class _Jv_InterpreterEngine;
!   
  
  #ifdef JV_MARKOBJ_DECL
    friend JV_MARKOBJ_DECL;
  #endif
  };
  
! class _Jv_InterpClass
  {
    _Jv_MethodBase **interpreted_methods;
    _Jv_ushort        *field_initializers;
  
    friend class _Jv_ClassReader;
    friend class _Jv_InterpMethod;
!   friend class _Jv_InterpreterEngine;
    friend void  _Jv_InitField (jobject, jclass, int);
  #ifdef JV_MARKOBJ_DECL
    friend JV_MARKOBJ_DECL;
  #endif
  
    friend _Jv_MethodBase ** _Jv_GetFirstMethod (_Jv_InterpClass *klass);
  };
  
  extern inline _Jv_MethodBase **
  _Jv_GetFirstMethod (_Jv_InterpClass *klass)
  {
*************** class _Jv_JNIMethod : public _Jv_MethodB
*** 238,244 ****
    void *ncode ();
  
    friend class _Jv_ClassReader;
!   friend void _Jv_PrepareClass(jclass);
  
  public:
    // FIXME: this is ugly.
--- 199,209 ----
    void *ncode ();
  
    friend class _Jv_ClassReader;
!   friend class _Jv_InterpreterEngine;
! 
! #ifdef JV_MARKOBJ_DECL
!   friend JV_MARKOBJ_DECL;
! #endif
  
  public:
    // FIXME: this is ugly.
diff -Nrcpad gcc-3.4.3/libjava/include/java-props.h gcc-4.0.0/libjava/include/java-props.h
*** gcc-3.4.3/libjava/include/java-props.h	Mon Aug 21 06:05:19 2000
--- gcc-4.0.0/libjava/include/java-props.h	Sat Apr  2 02:30:40 2005
*************** typedef struct
*** 21,29 ****
  
  // Set to NULL-terminated list of properties set at compile time.
  extern const char **_Jv_Compiler_Properties;
! 
! // The JAR file to add to the beginning of java.class.path.
! extern const char *_Jv_Jar_Class_Path;
  
  // Properties taken from the user's environment.
  extern property_pair *_Jv_Environment_Properties;
--- 21,27 ----
  
  // Set to NULL-terminated list of properties set at compile time.
  extern const char **_Jv_Compiler_Properties;
! extern int _Jv_Properties_Count;
  
  // Properties taken from the user's environment.
  extern property_pair *_Jv_Environment_Properties;
diff -Nrcpad gcc-3.4.3/libjava/include/java-stack.h gcc-4.0.0/libjava/include/java-stack.h
*** gcc-3.4.3/libjava/include/java-stack.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/include/java-stack.h	Thu Nov 25 03:47:00 2004
***************
*** 0 ****
--- 1,84 ----
+ // java-stack.h - Definitions for unwinding & inspecting the call stack.
+ 
+ /* Copyright (C) 2003  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #ifndef __JV_STACKTRACE_H__
+ #define __JV_STACKTRACE_H__
+ 
+ #include <unwind.h>
+ 
+ #include <gcj/cni.h>
+ #include <gcj/javaprims.h>
+ 
+ #include <java-interp.h>
+ 
+ #include <java/lang/Class.h>
+ #include <java/lang/StackTraceElement.h>
+ #include <java/lang/Throwable.h>
+ 
+ #include <gnu/gcj/runtime/NameFinder.h>
+ 
+ using namespace gnu::gcj::runtime;
+ 
+ enum _Jv_FrameType
+ {
+   frame_native,
+   frame_interpreter
+ };
+ 
+ #ifdef INTERPRETER
+ struct _Jv_InterpFrameInfo
+ {
+   _Jv_InterpMethod *meth;
+   pc_t pc;
+ };
+ #endif
+ 
+ union _Jv_FrameInfo
+ {
+ };
+ 
+ struct _Jv_StackFrame
+ {
+   _Jv_FrameType type;   /* Native or interpreted.  */
+   union {
+ #ifdef INTERPRETER
+     _Jv_InterpFrameInfo interp;
+ #endif
+     void *ip;  
+   };
+ //  _Jv_FrameInfo info;   /* Frame-type specific data.  */
+   jclass klass;
+   _Jv_Method *meth;
+ };
+ 
+ class _Jv_StackTrace
+ {
+ private:
+   int length;
+   _Jv_StackFrame frames[];
+ 
+   static void UpdateNCodeMap ();
+   static jclass ClassForIP (void *ip, void **ncode);
+   static void FillInFrameInfo (_Jv_StackFrame *frame);
+   static void getLineNumberForFrame(_Jv_StackFrame *frame, NameFinder *finder, 
+ 			     jstring *sourceFileName, jint *lineNum);
+   
+   static _Unwind_Reason_Code UnwindTraceFn (struct _Unwind_Context *context, 
+     void *state_ptr);
+ 
+ public:
+   static _Jv_StackTrace *GetStackTrace (void);
+   static JArray< ::java::lang::StackTraceElement *>*
+     GetStackTraceElements (_Jv_StackTrace *trace, 
+     java::lang::Throwable *throwable);
+   static jclass GetCallingClass (void);
+ };
+ 
+ #endif /* __JV_STACKTRACE_H__ */
diff -Nrcpad gcc-3.4.3/libjava/include/jawt.h gcc-4.0.0/libjava/include/jawt.h
*** gcc-3.4.3/libjava/include/jawt.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/include/jawt.h	Mon Mar  7 19:58:41 2005
***************
*** 0 ****
--- 1,98 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the 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_DrawingSurfaceInfo
+ {
+   void* platformInfo;
+ };
+ 
+ struct _JAWT_DrawingSurface
+ {
+   jint (JNICALL* Lock) (struct _JAWT_DrawingSurface*);
+   void (JNICALL* Unlock) (struct _JAWT_DrawingSurface*);
+ 
+   struct _JAWT_DrawingSurfaceInfo* (JNICALL* GetDrawingSurfaceInfo) (struct _JAWT_DrawingSurface*);
+   void (JNICALL* FreeDrawingSurfaceInfo) (struct _JAWT_DrawingSurfaceInfo*);
+ 
+   struct _JAWT_DrawingSurfaceInfo* surface_info;
+ 
+   /* FIXME: also include bounding rectangle of drawing surface. */
+   /* FIXME: also include current clipping region. */
+ };
+ 
+ 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*);
+ };
+ 
+ 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-3.4.3/libjava/include/jawt_md.h gcc-4.0.0/libjava/include/jawt_md.h
*** gcc-3.4.3/libjava/include/jawt_md.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/include/jawt_md.h	Mon Mar  7 19:58:41 2005
***************
*** 0 ****
--- 1,64 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the 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
+ {
+   Display* display;
+   Drawable drawable;
+   VisualID visualID;
+ };
+ 
+ typedef struct _JAWT_X11DrawingSurfaceInfo JAWT_X11DrawingSurfaceInfo;
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif /* __jawt_md_h__ */
diff -Nrcpad gcc-3.4.3/libjava/include/jni.h gcc-4.0.0/libjava/include/jni.h
*** gcc-3.4.3/libjava/include/jni.h	Wed Nov 12 05:56:44 2003
--- gcc-4.0.0/libjava/include/jni.h	Fri Jan 14 07:36:27 2005
***************
*** 1,4 ****
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,4 ----
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** typedef struct _Jv_JavaVM JavaVM;
*** 44,50 ****
  # ifdef __GNUC__
  
  /* If we're using gcc, we can use a platform-independent scheme to get
!    the right integer types.  */
  typedef int    jbyte  __attribute__((__mode__(__QI__)));
  typedef int    jshort __attribute__((__mode__(__HI__)));
  typedef int    jint   __attribute__((__mode__(__SI__)));
--- 44,52 ----
  # ifdef __GNUC__
  
  /* If we're using gcc, we can use a platform-independent scheme to get
!    the right integer types.  FIXME: this is not always correct, for
!    instance on the c4x it will be wrong -- it depends on whether
!    QImode is 8 bits.  */
  typedef int    jbyte  __attribute__((__mode__(__QI__)));
  typedef int    jshort __attribute__((__mode__(__HI__)));
  typedef int    jint   __attribute__((__mode__(__SI__)));
*************** typedef union jvalue
*** 240,251 ****
    jobject  l;
  } jvalue;
  
- #ifdef __cplusplus
- typedef void * (*_Jv_func) (...);
- #else
- typedef void * (*_Jv_func) ();
- #endif
- 
  /* This structure is used when registering native methods.  */
  typedef struct
  {
--- 242,247 ----
*************** typedef struct
*** 256,265 ****
  
  struct JNINativeInterface
  {
!   _Jv_func reserved0;
!   _Jv_func reserved1;
!   _Jv_func reserved2;
!   _Jv_func reserved3;
  
    jint     (JNICALL *GetVersion)                   (JNIEnv *);
    jclass   (JNICALL *DefineClass)                  (JNIEnv *, const char *,
--- 252,261 ----
  
  struct JNINativeInterface
  {
!   void *reserved0;
!   void *reserved1;
!   void *reserved2;
!   void *reserved3;
  
    jint     (JNICALL *GetVersion)                   (JNIEnv *);
    jclass   (JNICALL *DefineClass)                  (JNIEnv *, const char *,
*************** struct JNINativeInterface
*** 561,567 ****
    const char * (JNICALL *GetStringUTFChars) (JNIEnv *, jstring, jboolean *);
    void     (JNICALL *ReleaseStringUTFChars) (JNIEnv *, jstring, const char *);
    jsize    (JNICALL *GetArrayLength)       (JNIEnv *, jarray);
!   jarray   (JNICALL *NewObjectArray)       (JNIEnv *, jsize, jclass, jobject);
    jobject  (JNICALL *GetObjectArrayElement) (JNIEnv *, jobjectArray, jsize);
    void     (JNICALL *SetObjectArrayElement) (JNIEnv *, jobjectArray, jsize,
  					     jobject);
--- 557,563 ----
    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);
*************** private:
*** 697,702 ****
--- 693,702 ----
    /* The chain of local frames.  */
    struct _Jv_JNI_LocalFrame *locals;
  
+   /* The bottom-most element of the chain, initialized with the env and
+      reused between non-nesting JNI calls.  */
+   struct _Jv_JNI_LocalFrame *bottom_locals;
+ 
  public:
    jint GetVersion ()
    { return p->GetVersion (this); }
*************** public:
*** 1386,1392 ****
    jsize GetArrayLength (jarray val0)
    { return p->GetArrayLength (this, val0); }
  
!   jarray NewObjectArray (jsize val0, jclass cl1, jobject obj2)
    { return p->NewObjectArray (this, val0, cl1, obj2); }
  
    jobject GetObjectArrayElement (jobjectArray val0, jsize val1)
--- 1386,1392 ----
    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)
*************** public:
*** 1574,1582 ****
  
  struct JNIInvokeInterface
  {
!   _Jv_func reserved0;
!   _Jv_func reserved1;
!   _Jv_func reserved2;
  
    jint (JNICALL *DestroyJavaVM)         (JavaVM *);
    jint (JNICALL *AttachCurrentThread)   (JavaVM *, void **, void *);
--- 1574,1582 ----
  
  struct JNIInvokeInterface
  {
!   void *reserved0;
!   void *reserved1;
!   void *reserved2;
  
    jint (JNICALL *DestroyJavaVM)         (JavaVM *);
    jint (JNICALL *AttachCurrentThread)   (JavaVM *, void **, void *);
diff -Nrcpad gcc-3.4.3/libjava/include/jvm.h gcc-4.0.0/libjava/include/jvm.h
*** gcc-3.4.3/libjava/include/jvm.h	Wed Jul 14 00:30:43 2004
--- gcc-4.0.0/libjava/include/jvm.h	Sat Apr  2 02:30:40 2005
***************
*** 1,6 ****
  // jvm.h - Header file for private implementation information. -*- c++ -*-
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // jvm.h - Header file for private implementation information. -*- c++ -*-
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 30,35 ****
--- 30,38 ----
  #include <gcj/cni.h>
  #include <gcj/field.h>
  
+ /* Macro for possible unused arguments.  */
+ #define MAYBE_UNUSED __attribute__((__unused__))
+ 
  /* Structure of the virtual table.  */
  struct _Jv_VTable
  {
*************** struct _Jv_VTable
*** 76,87 ****
  // to keep this up to date by hand.
  #define NUM_OBJECT_METHODS 5
  
- // This structure is the type of an array's vtable.
- struct _Jv_ArrayVTable : public _Jv_VTable
- {
-   vtable_elt extra_method[NUM_OBJECT_METHODS - 1];
- };
- 
  union _Jv_word
  {
    jobject o;
--- 79,84 ----
*************** union _Jv_word2
*** 111,116 ****
--- 108,125 ----
    jdouble d;
  };                              
  
+ union _Jv_value
+ {
+   jbyte byte_value;
+   jshort short_value;
+   jchar char_value;
+   jint int_value;
+   jlong long_value;
+   jfloat float_value;
+   jdouble double_value;
+   jobject object_value;
+ };
+ 
  // An instance of this type is used to represent a single frame in a
  // backtrace.  If the interpreter has been built, we also include
  // information about the interpreted method.
*************** inline _Jv_TempUTFString::~_Jv_TempUTFSt
*** 222,230 ****
    char utfstr##_buf[utfstr##_len <= 256 ? utfstr##_len : 0]; \
    _Jv_TempUTFString utfstr(utfstr##thejstr, sizeof(utfstr##_buf)==0 ? 0 : utfstr##_buf)
  
- // FIXME: remove this define.
- #define StringClass java::lang::String::class$
- 
  namespace gcj
  {
    /* Some constants used during lookup of special class methods.  */
--- 231,236 ----
*************** namespace gcj
*** 235,242 ****
--- 241,293 ----
    
    /* Set to true by _Jv_CreateJavaVM. */
    extern bool runtimeInitialized;
+ 
+   /* Print out class names as they are initialized. */
+   extern bool verbose_class_flag;
  }
  
+ // This class handles all aspects of class preparation and linking.
+ class _Jv_Linker
+ {
+ private:
+   static _Jv_Field *find_field_helper(jclass, _Jv_Utf8Const *, _Jv_Utf8Const *,
+ 				      jclass *);
+   static _Jv_Field *find_field(jclass, jclass, _Jv_Utf8Const *,
+ 			       _Jv_Utf8Const *);
+   static void prepare_constant_time_tables(jclass);
+   static jshort get_interfaces(jclass, _Jv_ifaces *);
+   static void link_symbol_table(jclass);
+   static void link_exception_table(jclass);
+   static void layout_interface_methods(jclass);
+   static void layout_vtable_methods(jclass);
+   static void set_vtable_entries(jclass, _Jv_VTable *);
+   static void make_vtable(jclass);
+   static void ensure_fields_laid_out(jclass);
+   static void ensure_class_linked(jclass);
+   static void ensure_supers_installed(jclass);
+   static void add_miranda_methods(jclass, jclass);
+   static void ensure_method_table_complete(jclass);
+   static void verify_class(jclass);
+   static jshort find_iindex(jclass *, jshort *, jshort);
+   static jshort indexof(void *, void **, jshort);
+   static int get_alignment_from_class(jclass);
+   static void generate_itable(jclass, _Jv_ifaces *, jshort *);
+   static jshort append_partial_itable(jclass, jclass, void **, jshort);
+   static _Jv_Method *search_method_in_class (jclass, jclass,
+ 					     _Jv_Utf8Const *,
+ 					     _Jv_Utf8Const *);
+ 
+ public:
+ 
+   static bool has_field_p (jclass, _Jv_Utf8Const *);
+   static void print_class_loaded (jclass);
+   static void resolve_class_ref (jclass, jclass *);
+   static void wait_for_state(jclass, int);
+   static _Jv_word resolve_pool_entry (jclass, int);
+   static void resolve_field (_Jv_Field *, java::lang::ClassLoader *);
+   static void verify_type_assertions (jclass);
+ };
+ 
  /* Type of pointer used as finalizer.  */
  typedef void _Jv_FinalizerFunc (jobject);
  
*************** extern "C" void JvRunMain (jclass klass,
*** 323,328 ****
--- 374,382 ----
  void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, 
  		  bool is_jar);
  
+ void _Jv_RunMain (struct _Jv_VMInitArgs *vm_args, jclass klass,
+                   const char *name, int argc, const char **argv, bool is_jar);
+ 
  // Delayed until after _Jv_AllocBytes is declared.
  //
  // Note that we allocate this as unscanned memory -- the vtables
*************** static inline jboolean _Jv_isVirtualMeth
*** 340,346 ****
  {
    using namespace java::lang::reflect;
    return (((meth->accflags & (Modifier::STATIC | Modifier::PRIVATE)) == 0)
!           && meth->name->data[0] != '<');
  }
  
  // This function is used to determine the hash code of an object.
--- 394,400 ----
  {
    using namespace java::lang::reflect;
    return (((meth->accflags & (Modifier::STATIC | Modifier::PRIVATE)) == 0)
!           && meth->name->first() != '<');
  }
  
  // This function is used to determine the hash code of an object.
*************** extern "C" void *_Jv_LookupInterfaceMeth
*** 399,408 ****
                                                 int meth_idx);
  extern "C" void _Jv_CheckArrayStore (jobject array, jobject obj);
  extern "C" void _Jv_RegisterClass (jclass klass);
! extern "C" void _Jv_RegisterClasses (jclass *classes);
  extern "C" void _Jv_RegisterResource (void *vptr);
  extern void _Jv_UnregisterClass (_Jv_Utf8Const*, java::lang::ClassLoader*);
- extern void _Jv_ResolveField (_Jv_Field *, java::lang::ClassLoader*);
  
  extern jclass _Jv_FindClass (_Jv_Utf8Const *name,
  			     java::lang::ClassLoader *loader);
--- 453,463 ----
                                                 int meth_idx);
  extern "C" void _Jv_CheckArrayStore (jobject array, jobject obj);
  extern "C" void _Jv_RegisterClass (jclass klass);
! extern "C" void _Jv_RegisterClasses (const jclass *classes);
! extern "C" void _Jv_RegisterClasses_Counted (const jclass *classes,
! 					     size_t count);
  extern "C" void _Jv_RegisterResource (void *vptr);
  extern void _Jv_UnregisterClass (_Jv_Utf8Const*, java::lang::ClassLoader*);
  
  extern jclass _Jv_FindClass (_Jv_Utf8Const *name,
  			     java::lang::ClassLoader *loader);
*************** extern jboolean _Jv_CheckAccess (jclass 
*** 419,425 ****
  extern jobject _Jv_CallAnyMethodA (jobject obj, jclass return_type,
  				   jmethodID meth, jboolean is_constructor,
  				   JArray<jclass> *parameter_types,
! 				   jobjectArray args);
  
  union jvalue;
  extern void _Jv_CallAnyMethodA (jobject obj,
--- 474,481 ----
  extern jobject _Jv_CallAnyMethodA (jobject obj, jclass return_type,
  				   jmethodID meth, jboolean is_constructor,
  				   JArray<jclass> *parameter_types,
! 				   jobjectArray args,
! 				   jclass iface = NULL);
  
  union jvalue;
  extern void _Jv_CallAnyMethodA (jobject obj,
*************** extern void _Jv_CallAnyMethodA (jobject 
*** 430,436 ****
  				JArray<jclass> *parameter_types,
  				jvalue *args,
  				jvalue *result,
! 				jboolean is_jni_call = true);
  
  extern jobject _Jv_NewMultiArray (jclass, jint ndims, jint* dims)
    __attribute__((__malloc__));
--- 486,493 ----
  				JArray<jclass> *parameter_types,
  				jvalue *args,
  				jvalue *result,
! 				jboolean is_jni_call = true,
! 				jclass iface = NULL);
  
  extern jobject _Jv_NewMultiArray (jclass, jint ndims, jint* dims)
    __attribute__((__malloc__));
*************** extern void _Jv_JNI_Init (void);
*** 470,475 ****
--- 527,538 ----
  _Jv_JNIEnv *_Jv_GetCurrentJNIEnv ();
  void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *);
  
+ /* Free a JNIEnv. */
+ void _Jv_FreeJNIEnv (_Jv_JNIEnv *);
+ 
+ /* Free a JNIEnv. */
+ void _Jv_FreeJNIEnv (_Jv_JNIEnv *);
+ 
  struct _Jv_JavaVM;
  _Jv_JavaVM *_Jv_GetJavaVM (); 
  
*************** extern void (*_Jv_JVMPI_Notify_THREAD_ST
*** 506,509 ****
--- 569,601 ----
  extern void (*_Jv_JVMPI_Notify_THREAD_END) (JVMPI_Event *event);
  #endif
  
+ /* FIXME: this should really be defined in some more generic place */
+ #define ROUND(V, A) (((((unsigned) (V))-1) | ((A)-1))+1)
+ 
+ extern void _Jv_RegisterBootstrapPackages ();
+ 
+ 
+ // This is used to find ABI versions we recognize.
+ #define GCJ_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 10)
+ #define GCJ_BINARYCOMPAT_ADDITION 5
+ 
+ inline bool
+ _Jv_CheckABIVersion (unsigned long value)
+ {
+   // For this release, recognize just our defined C++ ABI and our
+   // defined BC ABI.  (In the future we may recognize past BC ABIs as
+   // well.)
+   return (value == GCJ_VERSION
+ 	  || value == (GCJ_VERSION + GCJ_BINARYCOMPAT_ADDITION));
+ }
+ 
+ // It makes the source cleaner if we simply always define this
+ // function.  If the interpreter is not built, it will never return
+ // 'true'.
+ extern inline jboolean
+ _Jv_IsInterpretedClass (jclass c)
+ {
+   return (c->accflags & java::lang::reflect::Modifier::INTERPRETED) != 0;
+ }
+ 
  #endif /* __JAVA_JVM_H__ */
diff -Nrcpad gcc-3.4.3/libjava/include/mips-signal.h gcc-4.0.0/libjava/include/mips-signal.h
*** gcc-3.4.3/libjava/include/mips-signal.h	Wed Oct 22 16:35:16 2003
--- gcc-4.0.0/libjava/include/mips-signal.h	Sun Sep 26 20:38:49 2004
***************
*** 1,7 ****
  // mips-signal.h - Catch runtime signals and turn them into exceptions
  // on an mips based Linux system. 
  
! /* Copyright (C) 1998, 1999, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,7 ----
  // mips-signal.h - Catch runtime signals and turn them into exceptions
  // on an mips based Linux system. 
  
! /* Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004 Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 22,28 ****
     sys/ucontext.h included by java-signal.h from prims.cc */
  
  #define HANDLE_SEGV 1
! #undef HANDLE_FPE
  
  /* The third parameter to the signal handler points to something with
   * this structure defined in asm/ucontext.h, but the name clashes with
--- 22,28 ----
     sys/ucontext.h included by java-signal.h from prims.cc */
  
  #define HANDLE_SEGV 1
! #define HANDLE_FPE 1
  
  /* The third parameter to the signal handler points to something with
   * this structure defined in asm/ucontext.h, but the name clashes with
*************** struct kernel_sigaction {
*** 54,60 ****
  
  
  #define SIGNAL_HANDLER(_name) \
! static void _name (int _dummy, siginfo_t *_info, sig_ucontext_t *_arg)
  
  /*
   *  MIPS leaves pc pointing at the faulting instruction, but the
--- 54,62 ----
  
  
  #define SIGNAL_HANDLER(_name) \
! static void _name (int _dummy __attribute__ ((__unused__)), \
! 		   siginfo_t *_info __attribute__ ((__unused__)), \
! 		   sig_ucontext_t *_arg __attribute__ ((__unused__)))
  
  /*
   *  MIPS leaves pc pointing at the faulting instruction, but the
*************** do                                      
*** 83,89 ****
      syscall (SYS_sigaction, SIGSEGV, &kact, NULL);   \
    }                                                  \
  while (0)
! 								
  
  #endif /* JAVA_SIGNAL_H */
    
--- 85,103 ----
      syscall (SYS_sigaction, SIGSEGV, &kact, NULL);   \
    }                                                  \
  while (0)
! 
! #define INIT_FPE                                     \
! do                                                   \
!   {                                                  \
!     struct kernel_sigaction kact;                    \
!     kact.k_sa_handler = catch_fpe;                   \
!     kact.k_sa_flags = SA_SIGINFO | SA_NODEFER;       \
!     sigemptyset (&kact.k_sa_mask);                   \
!     syscall (SYS_sigaction, SIGFPE, &kact, NULL);    \
!   }                                                  \
! while (0)
! 
! #undef HANDLE_DIVIDE_OVERFLOW
  
  #endif /* JAVA_SIGNAL_H */
    
diff -Nrcpad gcc-3.4.3/libjava/include/no-threads.h gcc-4.0.0/libjava/include/no-threads.h
*** gcc-3.4.3/libjava/include/no-threads.h	Tue Oct 21 04:46:19 2003
--- gcc-4.0.0/libjava/include/no-threads.h	Wed Dec  1 21:44:09 2004
***************
*** 1,7 ****
  // -*- c++ -*-
  // no-threads.h - Defines for using no threads.
  
! /* Copyright (C) 1998, 1999  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,7 ----
  // -*- c++ -*-
  // no-threads.h - Defines for using no threads.
  
! /* Copyright (C) 1998, 1999, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** _Jv_CondNotifyAll (_Jv_ConditionVariable
*** 75,81 ****
  // Mutexes.
  //
  
! inline int _Jv_MutexCheckMonitor (_Jv_Mutex_t *mu)
  {
    return 0;
  }
--- 75,81 ----
  // Mutexes.
  //
  
! inline int _Jv_MutexCheckMonitor (_Jv_Mutex_t *)
  {
    return 0;
  }
*************** _Jv_Thread_t *
*** 111,117 ****
  _Jv_ThreadInitData (java::lang::Thread *);
  
  inline void
! _Jv_ThreadDestroyData (_Jv_Thread_t *data)
  {
  }
  
--- 111,117 ----
  _Jv_ThreadInitData (java::lang::Thread *);
  
  inline void
! _Jv_ThreadDestroyData (_Jv_Thread_t *)
  {
  }
  
*************** _Jv_ThreadSetPriority (_Jv_Thread_t *, j
*** 133,139 ****
  }
  
  inline void
! _Jv_ThreadRegister (_Jv_Thread_t *data)
  {
  }
  
--- 133,139 ----
  }
  
  inline void
! _Jv_ThreadRegister (_Jv_Thread_t *)
  {
  }
  
diff -Nrcpad gcc-3.4.3/libjava/include/pa-signal.h gcc-4.0.0/libjava/include/pa-signal.h
*** gcc-3.4.3/libjava/include/pa-signal.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/include/pa-signal.h	Fri Jul  9 03:39:35 2004
***************
*** 0 ****
--- 1,61 ----
+ // pa-signal.h - Catch runtime signals and turn them into exceptions.
+ 
+ /* Copyright (C) 1998, 1999, 2000  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #ifndef JAVA_SIGNAL_H
+ #define JAVA_SIGNAL_H 1
+ 
+ #include <signal.h>
+ #include <ucontext.h>
+ #include <sys/syscall.h>
+ 
+ #define HANDLE_SEGV 1
+ #define HANDLE_FPE 1
+ 
+ #define SIGNAL_HANDLER(_name) 					\
+ static void _Jv_##_name (int _dummy, siginfo_t *_info, void *arg)
+ 
+ #define MAKE_THROW_FRAME(_exception)				\
+ do								\
+ {								\
+   struct ucontext *uc = (struct ucontext *)arg;			\
+   struct sigcontext *sc = &uc->uc_mcontext;			\
+   (void)_dummy;							\
+   (void)_info;							\
+   /* Advance the program counter so that it is after the start 	\
+      of the instruction:  the exception handler expects		\
+      the PC to point to the instruction after a call. */	\
+   sc->sc_iaoq[0] = sc->sc_iaoq[1];				\
+   sc->sc_iaoq[1] += 4;						\
+ }								\
+ while (0)
+ 
+ #define INIT_SEGV						\
+ do								\
+   {								\
+     struct sigaction act;					\
+     act.sa_sigaction = _Jv_catch_segv;      			\
+     sigemptyset (&act.sa_mask);					\
+     act.sa_flags = SA_SIGINFO;	       				\
+     syscall (SYS_rt_sigaction, SIGSEGV, &act, NULL, _NSIG / 8);	\
+   }								\
+ while (0)  
+ 
+ #define INIT_FPE						\
+ do								\
+   { 								\
+     struct sigaction act;					\
+     act.sa_sigaction = _Jv_catch_fpe;				\
+     sigemptyset (&act.sa_mask);					\
+     act.sa_flags = SA_SIGINFO;		       			\
+     syscall (SYS_rt_sigaction, SIGFPE, &act, NULL, _NSIG / 8);	\
+   }								\
+ while (0)  
+ 
+ #endif /* JAVA_SIGNAL_H */
diff -Nrcpad gcc-3.4.3/libjava/include/posix-threads.h gcc-4.0.0/libjava/include/posix-threads.h
*** gcc-3.4.3/libjava/include/posix-threads.h	Tue Oct 21 04:46:19 2003
--- gcc-4.0.0/libjava/include/posix-threads.h	Mon Oct 11 17:49:39 2004
*************** _Jv_ThreadSelf (void)
*** 241,263 ****
  
  #ifdef __alpha__
  
! #ifdef __FreeBSD__
! #include <machine/pal.h>
! #define PAL_rduniq PAL_rdunique
! #elif defined (__osf__)
! #include <machine/pal.h>
! #else
! #include <asm/pal.h>
! #endif
! 
! typedef unsigned long _Jv_ThreadId_t;
  
  inline _Jv_ThreadId_t
  _Jv_ThreadSelf (void)
  {
!   register unsigned long id __asm__("$0");
!   __asm__ ("call_pal %1" : "=r"(id) : "i"(PAL_rduniq));
!   return id;
  }
  
  #define JV_SELF_DEFINED
--- 241,252 ----
  
  #ifdef __alpha__
  
! typedef void *_Jv_ThreadId_t;
  
  inline _Jv_ThreadId_t
  _Jv_ThreadSelf (void)
  {
!   return __builtin_thread_pointer ();
  }
  
  #define JV_SELF_DEFINED
diff -Nrcpad gcc-3.4.3/libjava/include/s390-signal.h gcc-4.0.0/libjava/include/s390-signal.h
*** gcc-3.4.3/libjava/include/s390-signal.h	Fri Jun 13 12:20:45 2003
--- gcc-4.0.0/libjava/include/s390-signal.h	Wed Jul 14 13:09:09 2004
*************** details.  */
*** 15,39 ****
  
  #include <signal.h>
  #include <sys/syscall.h>
  
  #define HANDLE_SEGV 1
! #undef HANDLE_FPE
  
  #define SIGNAL_HANDLER(_name)	\
! static void _name (int /* _signal */, struct sigcontext _sc)
  
! #define MAKE_THROW_FRAME(_exception)					\
  do									\
  {									\
!   /* Advance the program counter so that it is after the start of the	\
!      instruction:  the s390 exception handler expects the PSW to point 	\
!      to the instruction after a call. */				\
!   _sc.sregs->regs.psw.addr += 2;					\
  									\
  }									\
  while (0)
  
- 
  /* For an explanation why we cannot simply use sigaction to
     install the handlers, see i386-signal.h.  */
  
--- 15,184 ----
  
  #include <signal.h>
  #include <sys/syscall.h>
+ #include <ucontext.h>
+ #include <limits.h>
  
  #define HANDLE_SEGV 1
! #define HANDLE_FPE 1
  
  #define SIGNAL_HANDLER(_name)	\
! static void _name (int, siginfo_t *_si __attribute__((unused)), \
! 		   ucontext_t *_uc __attribute__((unused)))
  
! /* We no longer need to fiddle with the PSW address in the signal handler;
!    this is now all handled correctly in MD_FALLBACK_FRAME_STATE_FOR.  */
! #define MAKE_THROW_FRAME(_exception)
! 
! 
! /* According to the JVM spec, "if the dividend is the negative integer 
!    of the smallest magnitude and the divisor is -1, then overflow occurs 
!    and the result is equal to the dividend.  Despite the overflow, no 
!    exception occurs".
! 
!    We handle this by inspecting the instruction which generated the signal,
!    and if dividend and divisor are as above, we simply return from the signal
!    handler.  This causes execution to continue after the instruction.  
!    Before returning, we the set result registers as expected.  */
! 
! #define HANDLE_DIVIDE_OVERFLOW						\
  do									\
  {									\
!   unsigned char *_eip = (unsigned char *)				\
!     __builtin_extract_return_addr (_si->si_addr);			\
!   unsigned long *_regs = _uc->uc_mcontext.gregs;			\
!   int _r1, _r2, _d2, _x2, _b2;						\
! 									\
!   /* First, a couple of helper routines to decode instructions.  */	\
!   struct _decode 							\
!     {									\
!       /* Decode RR instruction format.  */				\
!       static inline int _is_rr (unsigned char *_eip, 			\
! 				unsigned char _op,			\
! 				int *_r1, int *_r2) 			\
!       {									\
! 	if (_eip[0] == _op)						\
! 	  {								\
! 	    *_r1 = _eip[1] >> 4;					\
! 	    *_r2 = _eip[1] & 0xf;					\
! 	    return 1;							\
! 	  }								\
! 	return 0;							\
!       }									\
! 									\
!       /* Decode RX instruction format.  */				\
!       static inline int _is_rx (unsigned char *_eip,			\
! 				unsigned char _op,			\
! 				int *_r1, int *_d2, int *_x2, int *_b2) \
!       {									\
! 	if (_eip[0] == _op)						\
! 	  {								\
! 	    *_r1 = _eip[1] >> 4;					\
! 	    *_x2 = _eip[1] & 0xf;					\
! 	    *_b2 = _eip[2] >> 4;					\
! 	    *_d2 = ((_eip[2] & 0xf) << 8) + _eip[3];			\
! 	    return 1;							\
! 	  }								\
! 	return 0;							\
!       }									\
! 									\
!       /* Decode RRE instruction format.  */				\
!       static inline int _is_rre (unsigned char *_eip,			\
! 				 unsigned char _op1, unsigned char _op2,\
! 				 int *_r1, int *_r2)			\
!       {									\
! 	if (_eip[0] == _op1 && _eip[1] == _op2)				\
! 	  {								\
! 	    *_r1 = _eip[3] >> 4;					\
! 	    *_r2 = _eip[3] & 0xf;					\
! 	    return 1;							\
! 	  }								\
! 	return 0;							\
!       }									\
! 									\
!       /* Decode RXY instruction format.  */				\
!       static inline int _is_rxy (unsigned char *_eip,			\
! 				 unsigned char _op1, unsigned char _op2,\
! 				 int *_r1, int *_d2, int *_x2, int *_b2)\
!       {									\
! 	if (_eip[0] == _op1 && _eip[5] == _op2)				\
! 	  {								\
! 	    *_r1 = _eip[1] >> 4;					\
! 	    *_x2 = _eip[1] & 0xf;					\
! 	    *_b2 = _eip[2] >> 4;					\
! 	    *_d2 = ((_eip[2] & 0xf) << 8) + _eip[3] + (_eip[4] << 12);	\
! 	    /* We have a 20-bit signed displacement.  */		\
! 	    *_d2 = (*_d2 ^ 0x80000) - 0x80000;				\
! 	    return 1;							\
! 	  }								\
! 	return 0;							\
!       }									\
! 									\
!       /* Compute effective address.  */					\
!       static inline unsigned long _eff (unsigned long *_regs,		\
! 					long _d, int _x, int _b)	\
!       {									\
! 	return _d + (_x? _regs[_x] : 0) + (_b? _regs[_b] : 0);		\
!       }									\
!     };									\
! 									\
! 									\
!   /* DR r1,r2 */							\
!   if (_decode::_is_rr (_eip, 0x1d, &_r1, &_r2)				\
!       && (int) _regs[_r1] == -1 && (int) _regs[_r1+1] == INT_MIN	\
!       && (int) _regs[_r2] == -1)					\
!     {									\
!       _regs[_r1] &= ~0xffffffff;					\
!       return;								\
!     }									\
!  									\
!   /* D r1,d2(x2,b2) */							\
!   if (_decode::_is_rx (_eip, 0x5d, &_r1, &_d2, &_x2, &_b2)		\
!       && (int) _regs[_r1] == -1 && (int) _regs[_r1+1] == INT_MIN	\
!       && *(int *) _decode::_eff (_regs, _d2, _x2, _b2) == -1)		\
!     {									\
!       _regs[_r1] &= ~0xffffffff;					\
!       return;								\
!     }									\
! 									\
!   /* DSGR r1,r2 */							\
!   if (_decode::_is_rre (_eip, 0xb9, 0x0d, &_r1, &_r2)			\
!       && (long) _regs[_r1+1] == LONG_MIN				\
!       && (long) _regs[_r2] == -1L)					\
!     {									\
!       _regs[_r1] = 0;							\
!       return;								\
!     }									\
! 									\
!   /* DSGFR r1,r2 */							\
!   if (_decode::_is_rre (_eip, 0xb9, 0x1d, &_r1, &_r2)			\
!       && (long) _regs[_r1+1] == LONG_MIN				\
!       && (int) _regs[_r2] == -1)					\
!     {									\
!       _regs[_r1] = 0;							\
!       return;								\
!     }									\
! 									\
!   /* DSG r1,d2(x2,b2) */						\
!   if (_decode::_is_rxy (_eip, 0xe3, 0x0d, &_r1, &_d2, &_x2, &_b2)	\
!       && (long) _regs[_r1+1] == LONG_MIN				\
!       && *(long *) _decode::_eff (_regs, _d2, _x2, _b2) == -1L)		\
!     {									\
!       _regs[_r1] = 0;							\
!       return;								\
!     }									\
! 									\
!   /* DSGF r1,d2(x2,b2) */						\
!   if (_decode::_is_rxy (_eip, 0xe3, 0x1d, &_r1, &_d2, &_x2, &_b2)	\
!       && (long) _regs[_r1+1] == LONG_MIN				\
!       && *(int *) _decode::_eff (_regs, _d2, _x2, _b2) == -1)		\
!     {									\
!       _regs[_r1] = 0;							\
!       return;								\
!     }									\
  									\
  }									\
  while (0)
  
  /* For an explanation why we cannot simply use sigaction to
     install the handlers, see i386-signal.h.  */
  
*************** while (0)
*** 43,49 ****
     visible to us in a header file so we define it here.  */
  
  struct old_s390_kernel_sigaction {
! 	void (*k_sa_handler) (int, struct sigcontext);
  	unsigned long k_sa_mask;
  	unsigned long k_sa_flags;
  	void (*sa_restorer) (void);
--- 188,194 ----
     visible to us in a header file so we define it here.  */
  
  struct old_s390_kernel_sigaction {
! 	void (*k_sa_handler) (int, siginfo_t *, ucontext_t *);
  	unsigned long k_sa_mask;
  	unsigned long k_sa_flags;
  	void (*sa_restorer) (void);
*************** do							\
*** 55,61 ****
      struct old_s390_kernel_sigaction kact;		\
      kact.k_sa_handler = catch_segv;			\
      kact.k_sa_mask = 0;					\
!     kact.k_sa_flags = 0;				\
      syscall (SYS_sigaction, SIGSEGV, &kact, NULL);	\
    }							\
  while (0)  
--- 200,206 ----
      struct old_s390_kernel_sigaction kact;		\
      kact.k_sa_handler = catch_segv;			\
      kact.k_sa_mask = 0;					\
!     kact.k_sa_flags = SA_SIGINFO;			\
      syscall (SYS_sigaction, SIGSEGV, &kact, NULL);	\
    }							\
  while (0)  
*************** do								\
*** 66,72 ****
      struct old_s390_kernel_sigaction kact;			\
      kact.k_sa_handler = catch_fpe;				\
      kact.k_sa_mask = 0;						\
!     kact.k_sa_flags = 0;					\
      syscall (SYS_sigaction, SIGFPE, &kact, NULL);		\
    }								\
  while (0)  
--- 211,217 ----
      struct old_s390_kernel_sigaction kact;			\
      kact.k_sa_handler = catch_fpe;				\
      kact.k_sa_mask = 0;						\
!     kact.k_sa_flags = SA_SIGINFO;				\
      syscall (SYS_sigaction, SIGFPE, &kact, NULL);		\
    }								\
  while (0)  
diff -Nrcpad gcc-3.4.3/libjava/include/sh-signal.h gcc-4.0.0/libjava/include/sh-signal.h
*** gcc-3.4.3/libjava/include/sh-signal.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/include/sh-signal.h	Thu Oct 21 10:44:39 2004
***************
*** 0 ****
--- 1,96 ----
+ // sh-signal.h - Catch runtime signals and turn them into exceptions
+ // on a SuperH based Linux system.
+ 
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ 
+ #ifndef JAVA_SIGNAL_H
+ #define JAVA_SIGNAL_H 1
+ 
+ #include <signal.h>
+ #include <sys/syscall.h>
+ 
+ #define HANDLE_SEGV 1
+ #define HANDLE_FPE 1
+ 
+ /* The third parameter to the signal handler points to something with
+  * this structure defined in asm/ucontext.h, but the name clashes with
+  * struct ucontext from sys/ucontext.h so this private copy is used.  */
+ typedef struct _sig_ucontext {
+   unsigned long uc_flags;
+   struct _sig_ucontext *uc_link;
+   stack_t uc_stack;
+   struct sigcontext uc_mcontext;
+   sigset_t uc_sigmask;
+ } sig_ucontext_t;
+ 
+ #define SIGNAL_HANDLER(_name)						\
+   static void _name (int , siginfo_t *, sig_ucontext_t *_uc)
+ 
+ /* SH either leaves PC pointing at a faulting instruction or the
+    following instruction, depending on the signal.  SEGV always does
+    the former, so we adjust the saved PC to point to the following
+    instruction. This is what the handler in libgcc expects.  */
+ 
+ #ifdef __SH5__
+ #define MAKE_THROW_FRAME(_exception)					\
+ do									\
+   {									\
+     volatile struct sigcontext *_sc = &_uc->uc_mcontext;		\ 
+     _sc->sc_pc += 4;							\
+   }									\
+ while (0)
+ #else
+ #define MAKE_THROW_FRAME(_exception)					\
+ do									\
+   {									\
+     volatile struct sigcontext *_sc = &_uc->uc_mcontext;		\ 
+     _sc->sc_pc += 2;							\
+   }									\
+ while (0)
+ #endif
+ 
+ /* For an explanation why we cannot simply use sigaction to
+    install the handlers, see i386-signal.h.  */
+ 
+ /* We use kernel_old_sigaction here because we're calling the kernel
+    directly rather than via glibc.  The sigaction structure that the
+    syscall uses is a different shape from the one in userland and not
+    visible to us in a header file so we define it here.  */
+ 
+ struct kernel_old_sigaction {
+   void (*k_sa_handler) (int, siginfo_t *, sig_ucontext_t *);
+   unsigned long k_sa_mask;
+   unsigned long k_sa_flags;
+   void (*k_sa_restorer) (void);
+ };
+ 
+ #define INIT_SEGV							\
+ do									\
+   {									\
+     struct kernel_old_sigaction kact;					\
+     kact.k_sa_handler = catch_segv;					\
+     kact.k_sa_mask = 0;							\
+     kact.k_sa_flags = SA_SIGINFO | SA_NODEFER;				\
+     syscall (SYS_sigaction, SIGSEGV, &kact, NULL);			\
+   }									\
+ while (0)  
+ 
+ #define INIT_FPE							\
+ do									\
+   {									\
+     struct kernel_old_sigaction kact;					\
+     kact.k_sa_handler = catch_fpe;					\
+     kact.k_sa_mask = 0;							\
+     kact.k_sa_flags = SA_SIGINFO | SA_NODEFER;				\
+     syscall (SYS_sigaction, SIGFPE, &kact, NULL);			\
+   }									\
+ while (0)
+ 
+ #endif /* JAVA_SIGNAL_H */
diff -Nrcpad gcc-3.4.3/libjava/include/sparc-signal.h gcc-4.0.0/libjava/include/sparc-signal.h
*** gcc-3.4.3/libjava/include/sparc-signal.h	Fri Jun 13 12:20:45 2003
--- gcc-4.0.0/libjava/include/sparc-signal.h	Sun Sep 26 20:38:49 2004
*************** details.  */
*** 18,24 ****
  #define HANDLE_FPE 1
  
  #define SIGNAL_HANDLER(_name) 						\
! static void _name (int _dummy, siginfo_t *_info, void *arg)
  
  #ifdef __arch64__
  #define FLUSH_REGISTER_WINDOWS					\
--- 18,26 ----
  #define HANDLE_FPE 1
  
  #define SIGNAL_HANDLER(_name) 						\
! static void _name (int _dummy __attribute__ ((__unused__)), \
! 		   siginfo_t *_info __attribute__ ((__unused__)), \
! 		   void *arg __attribute__ ((__unused__)))
  
  #ifdef __arch64__
  #define FLUSH_REGISTER_WINDOWS					\
diff -Nrcpad gcc-3.4.3/libjava/include/win32-threads.h gcc-4.0.0/libjava/include/win32-threads.h
*** gcc-3.4.3/libjava/include/win32-threads.h	Tue Oct 21 04:46:19 2003
--- gcc-4.0.0/libjava/include/win32-threads.h	Sat Sep 11 19:13:51 2004
*************** details.  */
*** 13,18 ****
--- 13,19 ----
  #ifndef __JV_WIN32_THREADS__
  #define __JV_WIN32_THREADS__
  
+ #define WIN32_LEAN_AND_MEAN
  #include <windows.h>
  
  //
*************** typedef void _Jv_ThreadStartFunc (java::
*** 75,80 ****
--- 76,82 ----
  // Condition variables.
  //
  
+ #define _Jv_HaveCondDestroy
  int _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, jlong millis, jint nanos);
  void _Jv_CondInit (_Jv_ConditionVariable_t *cv);
  void _Jv_CondDestroy (_Jv_ConditionVariable_t *cv);
diff -Nrcpad gcc-3.4.3/libjava/include/win32.h gcc-4.0.0/libjava/include/win32.h
*** gcc-3.4.3/libjava/include/win32.h	Tue Dec 16 22:54:22 2003
--- gcc-4.0.0/libjava/include/win32.h	Sun Aug  1 04:29:31 2004
*************** details.  */
*** 22,27 ****
--- 22,29 ----
  
  // Includes
  #define WIN32_LEAN_AND_MEAN
+ // Force Winsock 2 interface.
+ #include <winsock2.h>
  #include <windows.h>
  #undef WIN32_LEAN_AND_MEAN
  #undef STRICT
diff -Nrcpad gcc-3.4.3/libjava/include/x86_64-signal.h gcc-4.0.0/libjava/include/x86_64-signal.h
*** gcc-3.4.3/libjava/include/x86_64-signal.h	Fri Jan 23 17:39:12 2004
--- gcc-4.0.0/libjava/include/x86_64-signal.h	Sun Feb  8 17:35:51 2004
*************** while (0)  
*** 84,90 ****
  
  #else /* __x86_64__ */
  
! /* This is for the 32-bit subsystem on on x86-64.  */
  
  #define sigcontext_struct sigcontext
  #include <java-signal-aux.h>
--- 84,90 ----
  
  #else /* __x86_64__ */
  
! /* This is for the 32-bit subsystem on x86-64.  */
  
  #define sigcontext_struct sigcontext
  #include <java-signal-aux.h>
diff -Nrcpad gcc-3.4.3/libjava/interpret.cc gcc-4.0.0/libjava/interpret.cc
*** gcc-3.4.3/libjava/interpret.cc	Wed Jul 14 00:24:05 2004
--- gcc-4.0.0/libjava/interpret.cc	Wed Jan  5 19:03:10 2005
***************
*** 1,6 ****
  // interpret.cc - Code for the interpreter
  
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // interpret.cc - Code for the interpreter
  
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 11,16 ****
--- 11,17 ----
  /* Author: Kresten Krab Thorup <krab@gnu.org>  */
  
  #include <config.h>
+ #include <platform.h>
  
  // Define this to get the direct-threaded interpreter.  If undefined,
  // we revert to a basic bytecode interpreter.  The former is faster
*************** details.  */
*** 38,46 ****
--- 39,53 ----
  #include <java/lang/Thread.h>
  #include <java-insns.h>
  #include <java-signal.h>
+ #include <java/lang/ClassFormatError.h>
+ #include <execution.h>
+ #include <java/lang/reflect/Modifier.h>
  
  #ifdef INTERPRETER
  
+ // Execution engine for interpreted code.
+ _Jv_InterpreterEngine _Jv_soleInterpreterEngine;
+ 
  #include <stdlib.h>
  
  using namespace gcj;
*************** static void throw_null_pointer_exception
*** 54,59 ****
--- 61,71 ----
    __attribute__ ((__noreturn__));
  #endif
  
+ static void throw_class_format_error (jstring msg)
+ 	__attribute__ ((__noreturn__));
+ static void throw_class_format_error (char *msg)
+ 	__attribute__ ((__noreturn__));
+ 
  #ifdef DIRECT_THREADED
  // Lock to ensure that methods are not compiled concurrently.
  // We could use a finer-grained lock here, however it is not safe to use
*************** _Jv_InterpMethod::compile (const void * 
*** 765,772 ****
        exc[i].start_pc.p = &insns[pc_mapping[exc[i].start_pc.i]];
        exc[i].end_pc.p = &insns[pc_mapping[exc[i].end_pc.i]];
        exc[i].handler_pc.p = &insns[pc_mapping[exc[i].handler_pc.i]];
!       jclass handler = (_Jv_ResolvePoolEntry (defining_class,
! 					      exc[i].handler_type.i)).clazz;
        exc[i].handler_type.p = handler;
      }
  
--- 777,785 ----
        exc[i].start_pc.p = &insns[pc_mapping[exc[i].start_pc.i]];
        exc[i].end_pc.p = &insns[pc_mapping[exc[i].end_pc.i]];
        exc[i].handler_pc.p = &insns[pc_mapping[exc[i].handler_pc.i]];
!       jclass handler
! 	= (_Jv_Linker::resolve_pool_entry (defining_class,
! 					     exc[i].handler_type.i)).clazz;
        exc[i].handler_type.p = handler;
      }
  
*************** _Jv_InterpMethod::compile (const void * 
*** 774,791 ****
  }
  #endif /* DIRECT_THREADED */
  
! // This function exists so that the stack-tracing code can find the
! // boundaries of the interpreter.
! void
! _Jv_StartOfInterpreter (void)
! {
! }
  
  void
  _Jv_InterpMethod::run (void *retp, ffi_raw *args)
  {
    using namespace java::lang::reflect;
  
    // FRAME_DESC registers this particular invocation as the top-most
    // interpreter frame.  This lets the stack tracing code (for
    // Throwable) print information about the method being interpreted
--- 787,811 ----
  }
  #endif /* DIRECT_THREADED */
  
! // These exist so that the stack-tracing code can find the boundaries
! // of the interpreter.
! void *_Jv_StartOfInterpreter;
! void *_Jv_EndOfInterpreter;
! extern "C" void *_Unwind_FindEnclosingFunction (void *pc);
  
  void
  _Jv_InterpMethod::run (void *retp, ffi_raw *args)
  {
    using namespace java::lang::reflect;
  
+   // Record the address of the start of this member function in
+   // _Jv_StartOfInterpreter.  Such a write to a global variable
+   // without acquiring a lock is correct iff reads and writes of words
+   // in memory are atomic, but Java requires that anyway.
+  foo:
+   if (_Jv_StartOfInterpreter == NULL)
+     _Jv_StartOfInterpreter = _Unwind_FindEnclosingFunction (&&foo);
+ 
    // FRAME_DESC registers this particular invocation as the top-most
    // interpreter frame.  This lets the stack tracing code (for
    // Throwable) print information about the method being interpreted
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 1106,1118 ****
        {
  	int index = GET2U ();
  
! 	/* _Jv_ResolvePoolEntry returns immediately if the value already
! 	 * is resolved.  If we want to clutter up the code here to gain
! 	 * a little performance, then we can check the corresponding bit
! 	 * JV_CONSTANT_ResolvedFlag in the tag directly.  For now, I
! 	 * don't think it is worth it.  */
  
! 	rmeth = (_Jv_ResolvePoolEntry (defining_class, index)).rmethod;
  
  	sp -= rmeth->stack_item_count;
  	// We don't use NULLCHECK here because we can't rely on that
--- 1126,1139 ----
        {
  	int index = GET2U ();
  
! 	/* _Jv_Linker::resolve_pool_entry returns immediately if the
! 	 * value already is resolved.  If we want to clutter up the
! 	 * code here to gain a little performance, then we can check
! 	 * the corresponding bit JV_CONSTANT_ResolvedFlag in the tag
! 	 * directly.  For now, I don't think it is worth it.  */
  
! 	rmeth = (_Jv_Linker::resolve_pool_entry (defining_class,
! 						   index)).rmethod;
  
  	sp -= rmeth->stack_item_count;
  	// We don't use NULLCHECK here because we can't rely on that
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 1176,1182 ****
  	ffi_cif *cif = &rmeth->cif;
  	ffi_raw *raw = (ffi_raw*) sp;
  
! 	jdouble rvalue;
  
  #if FFI_NATIVE_RAW_API
  	/* We assume that this is only implemented if it's correct	*/
--- 1197,1203 ----
  	ffi_cif *cif = &rmeth->cif;
  	ffi_raw *raw = (ffi_raw*) sp;
  
! 	_Jv_value rvalue;
  
  #if FFI_NATIVE_RAW_API
  	/* We assume that this is only implemented if it's correct	*/
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 1192,1202 ****
  	 * so those are checked before the switch */
  	if (rtype == FFI_TYPE_POINTER)
  	  {
! 	    PUSHA (*(jobject*)&rvalue);
  	  }
  	else if (rtype == FFI_TYPE_SINT32)
  	  {
! 	    PUSHI (*(jint*)&rvalue);
  	  }
  	else if (rtype == FFI_TYPE_VOID)
  	  {
--- 1213,1223 ----
  	 * so those are checked before the switch */
  	if (rtype == FFI_TYPE_POINTER)
  	  {
! 	    PUSHA (rvalue.object_value);
  	  }
  	else if (rtype == FFI_TYPE_SINT32)
  	  {
! 	    PUSHI (rvalue.int_value);
  	  }
  	else if (rtype == FFI_TYPE_VOID)
  	  {
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 1207,1242 ****
  	    switch (rtype)
  	      {
  	      case FFI_TYPE_SINT8:
! 		{
! 		  jbyte value = (*(jint*)&rvalue) & 0xff;
! 		  PUSHI (value);
! 		}
  		break;
  
  	      case FFI_TYPE_SINT16:
! 		{
! 		  jshort value = (*(jint*)&rvalue) & 0xffff;
! 		  PUSHI (value);
! 		}
  		break;
  
  	      case FFI_TYPE_UINT16:
! 		{
! 		  jint value = (*(jint*)&rvalue) & 0xffff;
! 		  PUSHI (value);
! 		}
  		break;
  
  	      case FFI_TYPE_FLOAT:
! 		PUSHF (*(jfloat*)&rvalue);
  		break;
  
  	      case FFI_TYPE_DOUBLE:
! 		PUSHD (rvalue);
  		break;
  
  	      case FFI_TYPE_SINT64:
! 		PUSHL (*(jlong*)&rvalue);
  		break;
  
  	      default:
--- 1228,1254 ----
  	    switch (rtype)
  	      {
  	      case FFI_TYPE_SINT8:
! 		PUSHI ((jbyte)(rvalue.int_value & 0xff));
  		break;
  
  	      case FFI_TYPE_SINT16:
! 		PUSHI ((jshort)(rvalue.int_value & 0xffff));
  		break;
  
  	      case FFI_TYPE_UINT16:
! 		PUSHI (rvalue.int_value & 0xffff);
  		break;
  
  	      case FFI_TYPE_FLOAT:
! 	        PUSHF (rvalue.float_value);
  		break;
  
  	      case FFI_TYPE_DOUBLE:
! 	        PUSHD (rvalue.double_value);
  		break;
  
  	      case FFI_TYPE_SINT64:
! 	        PUSHL (rvalue.long_value);
  		break;
  
  	      default:
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2075,2085 ****
        NEXT_INSN;
  
      insn_dcmpl:
!       tmpval = 1;
        goto dcmp;
  
      insn_dcmpg:
!       tmpval = -1;
  
      dcmp:
        {
--- 2087,2097 ----
        NEXT_INSN;
  
      insn_dcmpl:
!       tmpval = -1;
        goto dcmp;
  
      insn_dcmpg:
!       tmpval = 1;
  
      dcmp:
        {
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2411,2417 ****
      insn_getstatic:
        {
  	jint fieldref_index = GET2U ();
! 	_Jv_ResolvePoolEntry (defining_class, fieldref_index);
  	_Jv_Field *field = pool_data[fieldref_index].field;
  
  	if ((field->flags & Modifier::STATIC) == 0)
--- 2423,2429 ----
      insn_getstatic:
        {
  	jint fieldref_index = GET2U ();
! 	_Jv_Linker::resolve_pool_entry (defining_class, fieldref_index);
  	_Jv_Field *field = pool_data[fieldref_index].field;
  
  	if ((field->flags & Modifier::STATIC) == 0)
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2428,2464 ****
  	    switch (type->size_in_bytes)
  	      {
  	      case 1:
! 		PUSHI (*(jbyte*) (field->u.addr));
  		newinsn = AMPAMP (getstatic_resolved_1);
  		break;
  
  	      case 2:
  		if (type == JvPrimClass (char))
  		  {
! 		    PUSHI(*(jchar*) (field->u.addr));
  		    newinsn = AMPAMP (getstatic_resolved_char);
  		  }
  		else
  		  {
! 		    PUSHI(*(jshort*) (field->u.addr));
  		    newinsn = AMPAMP (getstatic_resolved_short);
  		  }
  		break;
  
  	      case 4:
! 		PUSHI(*(jint*) (field->u.addr));
  		newinsn = AMPAMP (getstatic_resolved_4);
  		break;
  
  	      case 8:
! 		PUSHL(*(jlong*) (field->u.addr));
  		newinsn = AMPAMP (getstatic_resolved_8);
  		break;
  	      }
  	  }
  	else
  	  {
! 	    PUSHA(*(jobject*) (field->u.addr));
  	    newinsn = AMPAMP (getstatic_resolved_obj);
  	  }
  
--- 2440,2476 ----
  	    switch (type->size_in_bytes)
  	      {
  	      case 1:
! 		PUSHI (*field->u.byte_addr);
  		newinsn = AMPAMP (getstatic_resolved_1);
  		break;
  
  	      case 2:
  		if (type == JvPrimClass (char))
  		  {
! 		    PUSHI (*field->u.char_addr);
  		    newinsn = AMPAMP (getstatic_resolved_char);
  		  }
  		else
  		  {
! 		    PUSHI (*field->u.short_addr);
  		    newinsn = AMPAMP (getstatic_resolved_short);
  		  }
  		break;
  
  	      case 4:
! 	        PUSHI(*field->u.int_addr);
  		newinsn = AMPAMP (getstatic_resolved_4);
  		break;
  
  	      case 8:
! 	        PUSHL(*field->u.long_addr);
  		newinsn = AMPAMP (getstatic_resolved_8);
  		break;
  	      }
  	  }
  	else
  	  {
! 	    PUSHA(*field->u.object_addr);
  	    newinsn = AMPAMP (getstatic_resolved_obj);
  	  }
  
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2498,2504 ****
      insn_getfield:
        {
  	jint fieldref_index = GET2U ();
! 	_Jv_ResolvePoolEntry (defining_class, fieldref_index);
  	_Jv_Field *field = pool_data[fieldref_index].field;
  
  	if ((field->flags & Modifier::STATIC) != 0)
--- 2510,2516 ----
      insn_getfield:
        {
  	jint fieldref_index = GET2U ();
! 	_Jv_Linker::resolve_pool_entry (defining_class, fieldref_index);
  	_Jv_Field *field = pool_data[fieldref_index].field;
  
  	if ((field->flags & Modifier::STATIC) != 0)
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2514,2555 ****
  	NULLCHECK(obj);
  
  	void *newinsn = NULL;
  	if (type->isPrimitive ())
  	  {
  	    switch (type->size_in_bytes)
  	      {
  	      case 1:
! 		PUSHI (*(jbyte*) ((char*)obj + field_offset));
  		newinsn = AMPAMP (getfield_resolved_1);
  		break;
  
  	      case 2:
  		if (type == JvPrimClass (char))
  		  {
! 		    PUSHI (*(jchar*) ((char*)obj + field_offset));
  		    newinsn = AMPAMP (getfield_resolved_char);
  		  }
  		else
  		  {
! 		    PUSHI (*(jshort*) ((char*)obj + field_offset));
  		    newinsn = AMPAMP (getfield_resolved_short);
  		  }
  		break;
  
  	      case 4:
! 		PUSHI (*(jint*) ((char*)obj + field_offset));
  		newinsn = AMPAMP (getfield_resolved_4);
  		break;
  
  	      case 8:
! 		PUSHL(*(jlong*) ((char*)obj + field_offset));
  		newinsn = AMPAMP (getfield_resolved_8);
  		break;
  	      }
  	  }
  	else
  	  {
! 	    PUSHA(*(jobject*) ((char*)obj + field_offset));
  	    newinsn = AMPAMP (getfield_resolved_obj);
  	  }
  
--- 2526,2568 ----
  	NULLCHECK(obj);
  
  	void *newinsn = NULL;
+ 	_Jv_value *val = (_Jv_value *) ((char *)obj + field_offset);
  	if (type->isPrimitive ())
  	  {
  	    switch (type->size_in_bytes)
  	      {
  	      case 1:
! 	        PUSHI (val->byte_value);
  		newinsn = AMPAMP (getfield_resolved_1);
  		break;
  
  	      case 2:
  		if (type == JvPrimClass (char))
  		  {
! 		    PUSHI (val->char_value);
  		    newinsn = AMPAMP (getfield_resolved_char);
  		  }
  		else
  		  {
! 		    PUSHI (val->short_value);
  		    newinsn = AMPAMP (getfield_resolved_short);
  		  }
  		break;
  
  	      case 4:
! 		PUSHI (val->int_value);
  		newinsn = AMPAMP (getfield_resolved_4);
  		break;
  
  	      case 8:
! 	        PUSHL (val->long_value);
  		newinsn = AMPAMP (getfield_resolved_8);
  		break;
  	      }
  	  }
  	else
  	  {
! 	    PUSHA (val->object_value);
  	    newinsn = AMPAMP (getfield_resolved_obj);
  	  }
  
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2613,2619 ****
      insn_putstatic:
        {
  	jint fieldref_index = GET2U ();
! 	_Jv_ResolvePoolEntry (defining_class, fieldref_index);
  	_Jv_Field *field = pool_data[fieldref_index].field;
  
  	jclass type = field->type;
--- 2626,2632 ----
      insn_putstatic:
        {
  	jint fieldref_index = GET2U ();
! 	_Jv_Linker::resolve_pool_entry (defining_class, fieldref_index);
  	_Jv_Field *field = pool_data[fieldref_index].field;
  
  	jclass type = field->type;
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2631,2637 ****
  	      case 1:
  		{
  		  jint value = POPI();
! 		  *(jbyte*) (field->u.addr) = value;
  		  newinsn = AMPAMP (putstatic_resolved_1);
  		  break;
  		}
--- 2644,2650 ----
  	      case 1:
  		{
  		  jint value = POPI();
! 		  *field->u.byte_addr = value;
  		  newinsn = AMPAMP (putstatic_resolved_1);
  		  break;
  		}
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2639,2645 ****
  	      case 2:
  		{
  		  jint value = POPI();
! 		  *(jchar*) (field->u.addr) = value;
  		  newinsn = AMPAMP (putstatic_resolved_2);
  		  break;
  		}
--- 2652,2658 ----
  	      case 2:
  		{
  		  jint value = POPI();
! 		  *field->u.char_addr = value;
  		  newinsn = AMPAMP (putstatic_resolved_2);
  		  break;
  		}
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2647,2653 ****
  	      case 4:
  		{
  		  jint value = POPI();
! 		  *(jint*) (field->u.addr) = value;
  		  newinsn = AMPAMP (putstatic_resolved_4);
  		  break;
  		}
--- 2660,2666 ----
  	      case 4:
  		{
  		  jint value = POPI();
! 		  *field->u.int_addr = value;
  		  newinsn = AMPAMP (putstatic_resolved_4);
  		  break;
  		}
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2655,2661 ****
  	      case 8:
  		{
  		  jlong value = POPL();
! 		  *(jlong*) (field->u.addr) = value;
  		  newinsn = AMPAMP (putstatic_resolved_8);
  		  break;
  		}
--- 2668,2674 ----
  	      case 8:
  		{
  		  jlong value = POPL();
! 		  *field->u.long_addr = value;
  		  newinsn = AMPAMP (putstatic_resolved_8);
  		  break;
  		}
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2664,2670 ****
  	else
  	  {
  	    jobject value = POPA();
! 	    *(jobject*) (field->u.addr) = value;
  	    newinsn = AMPAMP (putstatic_resolved_obj);
  	  }
  
--- 2677,2683 ----
  	else
  	  {
  	    jobject value = POPA();
! 	    *field->u.object_addr = value;
  	    newinsn = AMPAMP (putstatic_resolved_obj);
  	  }
  
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2700,2706 ****
      insn_putfield:
        {
  	jint fieldref_index = GET2U ();
! 	_Jv_ResolvePoolEntry (defining_class, fieldref_index);
  	_Jv_Field *field = pool_data[fieldref_index].field;
  
  	jclass type = field->type;
--- 2713,2719 ----
      insn_putfield:
        {
  	jint fieldref_index = GET2U ();
! 	_Jv_Linker::resolve_pool_entry (defining_class, fieldref_index);
  	_Jv_Field *field = pool_data[fieldref_index].field;
  
  	jclass type = field->type;
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2826,2832 ****
        {
  	int index = GET2U ();
  
! 	rmeth = (_Jv_ResolvePoolEntry (defining_class, index)).rmethod;
  
  	sp -= rmeth->stack_item_count;
  
--- 2839,2846 ----
        {
  	int index = GET2U ();
  
! 	rmeth = (_Jv_Linker::resolve_pool_entry (defining_class,
! 						   index)).rmethod;
  
  	sp -= rmeth->stack_item_count;
  
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2864,2870 ****
        {
  	int index = GET2U ();
  
! 	rmeth = (_Jv_ResolvePoolEntry (defining_class, index)).rmethod;
  
  	sp -= rmeth->stack_item_count;
  
--- 2878,2885 ----
        {
  	int index = GET2U ();
  
! 	rmeth = (_Jv_Linker::resolve_pool_entry (defining_class,
! 						   index)).rmethod;
  
  	sp -= rmeth->stack_item_count;
  
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2893,2899 ****
        {
  	int index = GET2U ();
  
! 	rmeth = (_Jv_ResolvePoolEntry (defining_class, index)).rmethod;
  
  	sp -= rmeth->stack_item_count;
  
--- 2908,2915 ----
        {
  	int index = GET2U ();
  
! 	rmeth = (_Jv_Linker::resolve_pool_entry (defining_class,
! 						   index)).rmethod;
  
  	sp -= rmeth->stack_item_count;
  
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2936,2947 ****
      insn_new:
        {
  	int index = GET2U ();
! 	jclass klass = (_Jv_ResolvePoolEntry (defining_class, index)).clazz;
! 	// We initialize here because otherwise `size_in_bytes' may
! 	// not be set correctly, leading us to pass `0' as the size.
! 	// FIXME: fix in the allocator?  There is a PR for this.
! 	_Jv_InitClass (klass);
! 	jobject res = _Jv_AllocObject (klass, klass->size_in_bytes);
  	PUSHA (res);
  
  #ifdef DIRECT_THREADED
--- 2952,2960 ----
      insn_new:
        {
  	int index = GET2U ();
! 	jclass klass = (_Jv_Linker::resolve_pool_entry (defining_class,
! 							  index)).clazz;
! 	jobject res = _Jv_AllocObject (klass);
  	PUSHA (res);
  
  #ifdef DIRECT_THREADED
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2955,2961 ****
      new_resolved:
        {
  	jclass klass = (jclass) AVAL ();
! 	jobject res = _Jv_AllocObject (klass, klass->size_in_bytes);
  	PUSHA (res);
        }
        NEXT_INSN;
--- 2968,2974 ----
      new_resolved:
        {
  	jclass klass = (jclass) AVAL ();
! 	jobject res = _Jv_AllocObject (klass);
  	PUSHA (res);
        }
        NEXT_INSN;
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 2973,2979 ****
      insn_anewarray:
        {
  	int index = GET2U ();
! 	jclass klass = (_Jv_ResolvePoolEntry (defining_class, index)).clazz;
  	int size  = POPI();
  	jobject result = _Jv_NewObjectArray (size, klass, 0);
  	PUSHA (result);
--- 2986,2993 ----
      insn_anewarray:
        {
  	int index = GET2U ();
! 	jclass klass = (_Jv_Linker::resolve_pool_entry (defining_class,
! 							  index)).clazz;
  	int size  = POPI();
  	jobject result = _Jv_NewObjectArray (size, klass, 0);
  	PUSHA (result);
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 3015,3021 ****
        {
  	jobject value = POPA();
  	jint index = GET2U ();
! 	jclass to = (_Jv_ResolvePoolEntry (defining_class, index)).clazz;
  
  	if (value != NULL && ! to->isInstance (value))
  	  throw new java::lang::ClassCastException (to->getName());
--- 3029,3036 ----
        {
  	jobject value = POPA();
  	jint index = GET2U ();
! 	jclass to = (_Jv_Linker::resolve_pool_entry (defining_class,
! 						       index)).clazz;
  
  	if (value != NULL && ! to->isInstance (value))
  	  throw new java::lang::ClassCastException (to->getName());
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 3045,3051 ****
        {
  	jobject value = POPA();
  	jint index = GET2U ();
! 	jclass to = (_Jv_ResolvePoolEntry (defining_class, index)).clazz;
  	PUSHI (to->isInstance (value));
  
  #ifdef DIRECT_THREADED
--- 3060,3067 ----
        {
  	jobject value = POPA();
  	jint index = GET2U ();
! 	jclass to = (_Jv_Linker::resolve_pool_entry (defining_class,
! 						       index)).clazz;
  	PUSHI (to->isInstance (value));
  
  #ifdef DIRECT_THREADED
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 3107,3113 ****
  	int dim        = GET1U ();
  
  	jclass type    
! 	  = (_Jv_ResolvePoolEntry (defining_class, kind_index)).clazz;
  	jint *sizes    = (jint*) __builtin_alloca (sizeof (jint)*dim);
  
  	for (int i = dim - 1; i >= 0; i--)
--- 3123,3130 ----
  	int dim        = GET1U ();
  
  	jclass type    
! 	  = (_Jv_Linker::resolve_pool_entry (defining_class,
! 					       kind_index)).clazz;
  	jint *sizes    = (jint*) __builtin_alloca (sizeof (jint)*dim);
  
  	for (int i = dim - 1; i >= 0; i--)
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 3153,3158 ****
--- 3170,3179 ----
  	    LOADI (wide);
  	    NEXT_INSN;
  
+ 	  case op_fload:
+ 	    LOADF (wide);
+ 	    NEXT_INSN;
+ 
  	  case op_aload:
  	    LOADA (wide);
  	    NEXT_INSN;
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 3204,3211 ****
  #else
  	      jclass handler = NULL;
  	      if (exc[i].handler_type.i != 0)
! 		handler = (_Jv_ResolvePoolEntry (defining_class,
! 						 exc[i].handler_type.i)).clazz;
  #endif /* DIRECT_THREADED */
  
  	      if (handler == NULL || handler->isAssignableFrom (exc_class))
--- 3225,3232 ----
  #else
  	      jclass handler = NULL;
  	      if (exc[i].handler_type.i != 0)
! 		handler = (_Jv_Linker::resolve_pool_entry (defining_class,
! 							     exc[i].handler_type.i)).clazz;
  #endif /* DIRECT_THREADED */
  
  	      if (handler == NULL || handler->isAssignableFrom (exc_class))
*************** _Jv_InterpMethod::run (void *retp, ffi_r
*** 3227,3239 ****
      }
  }
  
- // This function exists so that the stack-tracing code can find the
- // boundaries of the interpreter.
- void
- _Jv_EndOfInterpreter (void)
- {
- }
- 
  static void
  throw_internal_error (char *msg)
  {
--- 3248,3253 ----
*************** throw_null_pointer_exception ()
*** 3258,3261 ****
--- 3272,3818 ----
  }
  #endif
  
+ /** Do static initialization for fields with a constant initializer */
+ void
+ _Jv_InitField (jobject obj, jclass klass, int index)
+ {
+   using namespace java::lang::reflect;
+ 
+   if (obj != 0 && klass == 0)
+     klass = obj->getClass ();
+ 
+   if (!_Jv_IsInterpretedClass (klass))
+     return;
+ 
+   _Jv_InterpClass *iclass = (_Jv_InterpClass*)klass->aux_info;
+ 
+   _Jv_Field * field = (&klass->fields[0]) + index;
+ 
+   if (index > klass->field_count)
+     throw_internal_error ("field out of range");
+ 
+   int init = iclass->field_initializers[index];
+   if (init == 0)
+     return;
+ 
+   _Jv_Constants *pool = &klass->constants;
+   int tag = pool->tags[init];
+ 
+   if (! field->isResolved ())
+     throw_internal_error ("initializing unresolved field");
+ 
+   if (obj==0 && ((field->flags & Modifier::STATIC) == 0))
+     throw_internal_error ("initializing non-static field with no object");
+ 
+   void *addr = 0;
+ 
+   if ((field->flags & Modifier::STATIC) != 0)
+     addr = (void*) field->u.addr;
+   else
+     addr = (void*) (((char*)obj) + field->u.boffset);
+ 
+   switch (tag)
+     {
+     case JV_CONSTANT_String:
+       {
+ 	jstring str;
+ 	str = _Jv_NewStringUtf8Const (pool->data[init].utf8);
+ 	pool->data[init].string = str;
+ 	pool->tags[init] = JV_CONSTANT_ResolvedString;
+       }
+       /* fall through */
+ 
+     case JV_CONSTANT_ResolvedString:
+       if (! (field->type == &java::lang::String::class$
+  	     || field->type == &java::lang::Class::class$))
+ 	throw_class_format_error ("string initialiser to non-string field");
+ 
+       *(jstring*)addr = pool->data[init].string;
+       break;
+ 
+     case JV_CONSTANT_Integer:
+       {
+ 	int value = pool->data[init].i;
+ 
+ 	if (field->type == JvPrimClass (boolean))
+ 	  *(jboolean*)addr = (jboolean)value;
+ 	
+ 	else if (field->type == JvPrimClass (byte))
+ 	  *(jbyte*)addr = (jbyte)value;
+ 	
+ 	else if (field->type == JvPrimClass (char))
+ 	  *(jchar*)addr = (jchar)value;
+ 
+ 	else if (field->type == JvPrimClass (short))
+ 	  *(jshort*)addr = (jshort)value;
+ 	
+ 	else if (field->type == JvPrimClass (int))
+ 	  *(jint*)addr = (jint)value;
+ 
+ 	else
+ 	  throw_class_format_error ("erroneous field initializer");
+       }  
+       break;
+ 
+     case JV_CONSTANT_Long:
+       if (field->type != JvPrimClass (long))
+ 	throw_class_format_error ("erroneous field initializer");
+ 
+       *(jlong*)addr = _Jv_loadLong (&pool->data[init]);
+       break;
+ 
+     case JV_CONSTANT_Float:
+       if (field->type != JvPrimClass (float))
+ 	throw_class_format_error ("erroneous field initializer");
+ 
+       *(jfloat*)addr = pool->data[init].f;
+       break;
+ 
+     case JV_CONSTANT_Double:
+       if (field->type != JvPrimClass (double))
+ 	throw_class_format_error ("erroneous field initializer");
+ 
+       *(jdouble*)addr = _Jv_loadDouble (&pool->data[init]);
+       break;
+ 
+     default:
+       throw_class_format_error ("erroneous field initializer");
+     }
+ }
+ 
+ inline static unsigned char*
+ skip_one_type (unsigned char* ptr)
+ {
+   int ch = *ptr++;
+ 
+   while (ch == '[')
+     { 
+       ch = *ptr++;
+     }
+   
+   if (ch == 'L')
+     {
+       do { ch = *ptr++; } while (ch != ';');
+     }
+ 
+   return ptr;
+ }
+ 
+ static ffi_type*
+ get_ffi_type_from_signature (unsigned char* ptr)
+ {
+   switch (*ptr) 
+     {
+     case 'L':
+     case '[':
+       return &ffi_type_pointer;
+       break;
+ 
+     case 'Z':
+       // On some platforms a bool is a byte, on others an int.
+       if (sizeof (jboolean) == sizeof (jbyte))
+ 	return &ffi_type_sint8;
+       else
+ 	{
+ 	  JvAssert (sizeof (jbyte) == sizeof (jint));
+ 	  return &ffi_type_sint32;
+ 	}
+       break;
+ 
+     case 'B':
+       return &ffi_type_sint8;
+       break;
+       
+     case 'C':
+       return &ffi_type_uint16;
+       break;
+ 	  
+     case 'S': 
+       return &ffi_type_sint16;
+       break;
+ 	  
+     case 'I':
+       return &ffi_type_sint32;
+       break;
+ 	  
+     case 'J':
+       return &ffi_type_sint64;
+       break;
+ 	  
+     case 'F':
+       return &ffi_type_float;
+       break;
+ 	  
+     case 'D':
+       return &ffi_type_double;
+       break;
+ 
+     case 'V':
+       return &ffi_type_void;
+       break;
+     }
+ 
+   throw_internal_error ("unknown type in signature");
+ }
+ 
+ /* this function yields the number of actual arguments, that is, if the
+  * function is non-static, then one is added to the number of elements
+  * found in the signature */
+ 
+ int 
+ _Jv_count_arguments (_Jv_Utf8Const *signature,
+ 		     jboolean staticp)
+ {
+   unsigned char *ptr = (unsigned char*) signature->chars();
+   int arg_count = staticp ? 0 : 1;
+ 
+   /* first, count number of arguments */
+ 
+   // skip '('
+   ptr++;
+ 
+   // count args
+   while (*ptr != ')')
+     {
+       ptr = skip_one_type (ptr);
+       arg_count += 1;
+     }
+ 
+   return arg_count;
+ }
+ 
+ /* This beast will build a cif, given the signature.  Memory for
+  * the cif itself and for the argument types must be allocated by the
+  * caller.
+  */
+ 
+ static int 
+ init_cif (_Jv_Utf8Const* signature,
+ 	  int arg_count,
+ 	  jboolean staticp,
+ 	  ffi_cif *cif,
+ 	  ffi_type **arg_types,
+ 	  ffi_type **rtype_p)
+ {
+   unsigned char *ptr = (unsigned char*) signature->chars();
+ 
+   int arg_index = 0;		// arg number
+   int item_count = 0;		// stack-item count
+ 
+   // setup receiver
+   if (!staticp)
+     {
+       arg_types[arg_index++] = &ffi_type_pointer;
+       item_count += 1;
+     }
+ 
+   // skip '('
+   ptr++;
+ 
+   // assign arg types
+   while (*ptr != ')')
+     {
+       arg_types[arg_index++] = get_ffi_type_from_signature (ptr);
+ 
+       if (*ptr == 'J' || *ptr == 'D')
+ 	item_count += 2;
+       else
+ 	item_count += 1;
+ 
+       ptr = skip_one_type (ptr);
+     }
+ 
+   // skip ')'
+   ptr++;
+   ffi_type *rtype = get_ffi_type_from_signature (ptr);
+ 
+   ptr = skip_one_type (ptr);
+   if (ptr != (unsigned char*)signature->chars() + signature->len())
+     throw_internal_error ("did not find end of signature");
+ 
+   if (ffi_prep_cif (cif, FFI_DEFAULT_ABI,
+ 		    arg_count, rtype, arg_types) != FFI_OK)
+     throw_internal_error ("ffi_prep_cif failed");
+ 
+   if (rtype_p != NULL)
+     *rtype_p = rtype;
+ 
+   return item_count;
+ }
+ 
+ #if FFI_NATIVE_RAW_API
+ #   define FFI_PREP_RAW_CLOSURE ffi_prep_raw_closure
+ #   define FFI_RAW_SIZE ffi_raw_size
+ #else
+ #   define FFI_PREP_RAW_CLOSURE ffi_prep_java_raw_closure
+ #   define FFI_RAW_SIZE ffi_java_raw_size
+ #endif
+ 
+ /* we put this one here, and not in interpret.cc because it
+  * calls the utility routines _Jv_count_arguments 
+  * which are static to this module.  The following struct defines the
+  * layout we use for the stubs, it's only used in the ncode method. */
+ 
+ typedef struct {
+   ffi_raw_closure  closure;
+   ffi_cif   cif;
+   ffi_type *arg_types[0];
+ } ncode_closure;
+ 
+ typedef void (*ffi_closure_fun) (ffi_cif*,void*,ffi_raw*,void*);
+ 
+ void *
+ _Jv_InterpMethod::ncode ()
+ {
+   using namespace java::lang::reflect;
+ 
+   if (self->ncode != 0)
+     return self->ncode;
+ 
+   jboolean staticp = (self->accflags & Modifier::STATIC) != 0;
+   int arg_count = _Jv_count_arguments (self->signature, staticp);
+ 
+   ncode_closure *closure =
+     (ncode_closure*)_Jv_AllocBytes (sizeof (ncode_closure)
+ 					+ arg_count * sizeof (ffi_type*));
+ 
+   init_cif (self->signature,
+ 	    arg_count,
+ 	    staticp,
+ 	    &closure->cif,
+ 	    &closure->arg_types[0],
+ 	    NULL);
+ 
+   ffi_closure_fun fun;
+ 
+   args_raw_size = FFI_RAW_SIZE (&closure->cif);
+ 
+   JvAssert ((self->accflags & Modifier::NATIVE) == 0);
+ 
+   if ((self->accflags & Modifier::SYNCHRONIZED) != 0)
+     {
+       if (staticp)
+ 	fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_class;
+       else
+ 	fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_object; 
+     }
+   else
+     {
+       if (staticp)
+ 	fun = (ffi_closure_fun)&_Jv_InterpMethod::run_class;
+       else
+ 	fun = (ffi_closure_fun)&_Jv_InterpMethod::run_normal;
+     }
+ 
+   FFI_PREP_RAW_CLOSURE (&closure->closure,
+ 		        &closure->cif, 
+ 		        fun,
+ 		        (void*)this);
+ 
+   self->ncode = (void*)closure;
+   return self->ncode;
+ }
+ 
+ void *
+ _Jv_JNIMethod::ncode ()
+ {
+   using namespace java::lang::reflect;
+ 
+   if (self->ncode != 0)
+     return self->ncode;
+ 
+   jboolean staticp = (self->accflags & Modifier::STATIC) != 0;
+   int arg_count = _Jv_count_arguments (self->signature, staticp);
+ 
+   ncode_closure *closure =
+     (ncode_closure*)_Jv_AllocBytes (sizeof (ncode_closure)
+ 				    + arg_count * sizeof (ffi_type*));
+ 
+   ffi_type *rtype;
+   init_cif (self->signature,
+ 	    arg_count,
+ 	    staticp,
+ 	    &closure->cif,
+ 	    &closure->arg_types[0],
+ 	    &rtype);
+ 
+   ffi_closure_fun fun;
+ 
+   args_raw_size = FFI_RAW_SIZE (&closure->cif);
+ 
+   // Initialize the argument types and CIF that represent the actual
+   // underlying JNI function.
+   int extra_args = 1;
+   if ((self->accflags & Modifier::STATIC))
+     ++extra_args;
+   jni_arg_types = (ffi_type **) _Jv_AllocBytes ((extra_args + arg_count)
+ 						* sizeof (ffi_type *));
+   int offset = 0;
+   jni_arg_types[offset++] = &ffi_type_pointer;
+   if ((self->accflags & Modifier::STATIC))
+     jni_arg_types[offset++] = &ffi_type_pointer;
+   memcpy (&jni_arg_types[offset], &closure->arg_types[0],
+ 	  arg_count * sizeof (ffi_type *));
+ 
+   if (ffi_prep_cif (&jni_cif, _Jv_platform_ffi_abi,
+ 		    extra_args + arg_count, rtype,
+ 		    jni_arg_types) != FFI_OK)
+     throw_internal_error ("ffi_prep_cif failed for JNI function");
+ 
+   JvAssert ((self->accflags & Modifier::NATIVE) != 0);
+ 
+   // FIXME: for now we assume that all native methods for
+   // interpreted code use JNI.
+   fun = (ffi_closure_fun) &_Jv_JNIMethod::call;
+ 
+   FFI_PREP_RAW_CLOSURE (&closure->closure,
+ 			&closure->cif, 
+ 			fun,
+ 			(void*) this);
+ 
+   self->ncode = (void *) closure;
+   return self->ncode;
+ }
+ 
+ static void
+ throw_class_format_error (jstring msg)
+ {
+   throw (msg
+ 	 ? new java::lang::ClassFormatError (msg)
+ 	 : new java::lang::ClassFormatError);
+ }
+ 
+ static void
+ throw_class_format_error (char *msg)
+ {
+   throw_class_format_error (JvNewStringLatin1 (msg));
+ }
+ 
+ 
+ 
+ void
+ _Jv_InterpreterEngine::do_verify (jclass klass)
+ {
+   _Jv_InterpClass *iclass = (_Jv_InterpClass *) klass->aux_info;
+   for (int i = 0; i < klass->method_count; i++)
+     {
+       using namespace java::lang::reflect;
+       _Jv_MethodBase *imeth = iclass->interpreted_methods[i];
+       _Jv_ushort accflags = klass->methods[i].accflags;
+       if ((accflags & (Modifier::NATIVE | Modifier::ABSTRACT)) == 0)
+ 	{
+ 	  _Jv_InterpMethod *im = reinterpret_cast<_Jv_InterpMethod *> (imeth);
+ 	  _Jv_VerifyMethod (im);
+ 	}
+     }
+ }
+ 
+ void
+ _Jv_InterpreterEngine::do_create_ncode (jclass klass)
+ {
+   _Jv_InterpClass *iclass = (_Jv_InterpClass *) klass->aux_info;
+   for (int i = 0; i < klass->method_count; i++)
+     {
+       // Just skip abstract methods.  This is particularly important
+       // because we don't resize the interpreted_methods array when
+       // miranda methods are added to it.
+       if ((klass->methods[i].accflags
+ 	   & java::lang::reflect::Modifier::ABSTRACT)
+ 	  != 0)
+ 	continue;
+ 
+       _Jv_MethodBase *imeth = iclass->interpreted_methods[i];
+ 
+       if ((klass->methods[i].accflags & java::lang::reflect::Modifier::NATIVE)
+ 	  != 0)
+ 	{
+ 	  // You might think we could use a virtual `ncode' method in
+ 	  // the _Jv_MethodBase and unify the native and non-native
+ 	  // cases.  Well, we can't, because we don't allocate these
+ 	  // objects using `new', and thus they don't get a vtable.
+ 	  _Jv_JNIMethod *jnim = reinterpret_cast<_Jv_JNIMethod *> (imeth);
+ 	  klass->methods[i].ncode = jnim->ncode ();
+ 	}
+       else if (imeth != 0)		// it could be abstract
+ 	{
+ 	  _Jv_InterpMethod *im = reinterpret_cast<_Jv_InterpMethod *> (imeth);
+ 	  klass->methods[i].ncode = im->ncode ();
+ 	}
+     }
+ }
+ 
+ void
+ _Jv_InterpreterEngine::do_allocate_static_fields (jclass klass,
+ 						  int static_size)
+ {
+   _Jv_InterpClass *iclass = (_Jv_InterpClass *) klass->aux_info;
+ 
+   char *static_data = (char *) _Jv_AllocBytes (static_size);
+   memset (static_data, 0, static_size);
+ 
+   for (int i = 0; i < klass->field_count; i++)
+     {
+       _Jv_Field *field = &klass->fields[i];
+ 
+       if ((field->flags & java::lang::reflect::Modifier::STATIC) != 0)
+ 	{
+ 	  field->u.addr  = static_data + field->u.boffset;
+ 	      
+ 	  if (iclass->field_initializers[i] != 0)
+ 	    {
+ 	      _Jv_Linker::resolve_field (field, klass->loader);
+ 	      _Jv_InitField (0, klass, i);
+ 	    }
+ 	}
+     }
+ 
+   // Now we don't need the field_initializers anymore, so let the
+   // collector get rid of it.
+   iclass->field_initializers = 0;
+ }
+ 
+ _Jv_ResolvedMethod *
+ _Jv_InterpreterEngine::do_resolve_method (_Jv_Method *method, jclass klass,
+ 					  jboolean staticp, jint vtable_index)
+ {
+   int arg_count = _Jv_count_arguments (method->signature, staticp);
+ 
+   _Jv_ResolvedMethod* result = (_Jv_ResolvedMethod*)
+     _Jv_AllocBytes (sizeof (_Jv_ResolvedMethod)
+ 		    + arg_count*sizeof (ffi_type*));
+ 
+   result->stack_item_count
+     = init_cif (method->signature,
+ 		arg_count,
+ 		staticp,
+ 		&result->cif,
+ 		&result->arg_types[0],
+ 		NULL);
+ 
+   result->vtable_index        = vtable_index;
+   result->method              = method;
+   result->klass               = klass;
+ 
+   return result;
+ }
+ 
+ void
+ _Jv_InterpreterEngine::do_post_miranda_hook (jclass klass)
+ {
+   _Jv_InterpClass *iclass = (_Jv_InterpClass *) klass->aux_info;
+   for (int i = 0; i < klass->method_count; i++)
+     {
+       // Just skip abstract methods.  This is particularly important
+       // because we don't resize the interpreted_methods array when
+       // miranda methods are added to it.
+       if ((klass->methods[i].accflags
+ 	   & java::lang::reflect::Modifier::ABSTRACT)
+ 	  != 0)
+ 	continue;
+       // Miranda method additions mean that the `methods' array moves.
+       // We cache a pointer into this array, so we have to update.
+       iclass->interpreted_methods[i]->self = &klass->methods[i];
+     }
+ }
+ 
  #endif // INTERPRETER
diff -Nrcpad gcc-3.4.3/libjava/java/applet/Applet.java gcc-4.0.0/libjava/java/applet/Applet.java
*** gcc-3.4.3/libjava/java/applet/Applet.java	Sun Nov 10 00:16:42 2002
--- gcc-4.0.0/libjava/java/applet/Applet.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* Applet.java -- Java base applet class
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Applet.java -- Java base applet class
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.ObjectInputStream;
*** 48,53 ****
--- 48,54 ----
  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.AccessibleSta
*** 62,69 ****
   * 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
   */
--- 63,70 ----
   * 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
*** 77,82 ****
--- 78,89 ----
    /** 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.
     *
*************** public class Applet extends Panel
*** 106,111 ****
--- 113,121 ----
    public final void setStub(AppletStub stub)
    {
      this.stub = stub;
+ 
+     if (width != 0 && height != 0)
+       stub.appletResize (width, height);
    }
  
    /**
*************** public class Applet extends Panel
*** 173,179 ****
     */
    public void resize(int width, int height)
    {
!     stub.appletResize(width, height);
    }
  
    /**
--- 183,195 ----
     */
    public void resize(int width, int height)
    {
!     if (stub == null)
!       {
!         this.width = width;
!         this.height = height;
!       }
!     else
!       stub.appletResize(width, height);
    }
  
    /**
*************** public class Applet extends Panel
*** 228,238 ****
    {
      try
        {
!         return getImage(new URL(url, name));
        }
      catch (MalformedURLException e)
        {
!         return null;
        }
    }
  
--- 244,254 ----
    {
      try
        {
! 	return getImage(new URL(url, name));
        }
      catch (MalformedURLException e)
        {
! 	return null;
        }
    }
  
*************** public class Applet extends Panel
*** 284,294 ****
    {
      try
        {
!         return getAudioClip(new URL(url, name));
        }
      catch (MalformedURLException e)
        {
!         return null;
        }
    }
  
--- 300,310 ----
    {
      try
        {
! 	return getAudioClip(new URL(url, name));
        }
      catch (MalformedURLException e)
        {
! 	return null;
        }
    }
  
*************** public class Applet extends Panel
*** 343,349 ****
      AudioClip ac = getAudioClip(url);
      try
        {
!         ac.play();
        }
      catch (Exception ignored)
        {
--- 359,365 ----
      AudioClip ac = getAudioClip(url);
      try
        {
! 	ac.play();
        }
      catch (Exception ignored)
        {
*************** public class Applet extends Panel
*** 364,370 ****
    {
      try
        {
!         getAudioClip(url, name).play();
        }
      catch (Exception ignored)
        {
--- 380,386 ----
    {
      try
        {
! 	getAudioClip(url, name).play();
        }
      catch (Exception ignored)
        {
*************** public class Applet extends Panel
*** 461,467 ****
     * 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
--- 477,483 ----
     * 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
*************** public class Applet extends Panel
*** 500,506 ****
      {
        AccessibleStateSet s = super.getAccessibleStateSet();
        if (isActive())
!         s.add(AccessibleState.ACTIVE);
        return s;
      }
    } // class AccessibleApplet
--- 516,522 ----
      {
        AccessibleStateSet s = super.getAccessibleStateSet();
        if (isActive())
! 	s.add(AccessibleState.ACTIVE);
        return s;
      }
    } // class AccessibleApplet
diff -Nrcpad gcc-3.4.3/libjava/java/applet/AppletContext.java gcc-4.0.0/libjava/java/applet/AppletContext.java
*** gcc-3.4.3/libjava/java/applet/AppletContext.java	Thu Nov 14 20:35:27 2002
--- gcc-4.0.0/libjava/java/applet/AppletContext.java	Thu Sep 23 18:24:00 2004
***************
*** 1,5 ****
  /* AppletContext.java -- access the applet's runtime environment
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AppletContext.java -- access the applet's runtime environment
!    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,46 ****
  package java.applet;
  
  import java.awt.Image;
- import java.io.InputStream;
  import java.io.IOException;
  import java.net.URL;
  import java.util.Enumeration;
  import java.util.Iterator;
--- 39,46 ----
  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;
diff -Nrcpad gcc-3.4.3/libjava/java/applet/AppletStub.java gcc-4.0.0/libjava/java/applet/AppletStub.java
*** gcc-3.4.3/libjava/java/applet/AppletStub.java	Sun Nov 10 00:16:42 2002
--- gcc-4.0.0/libjava/java/applet/AppletStub.java	Thu Sep 23 18:24:00 2004
***************
*** 1,5 ****
  /* AppletStub.java -- low level interface to the browser
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AppletStub.java -- low level interface to the browser
!    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  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;
diff -Nrcpad gcc-3.4.3/libjava/java/applet/AudioClip.java gcc-4.0.0/libjava/java/applet/AudioClip.java
*** gcc-3.4.3/libjava/java/applet/AudioClip.java	Sun Nov 10 00:16:42 2002
--- gcc-4.0.0/libjava/java/applet/AudioClip.java	Thu Sep 23 18:24:00 2004
***************
*** 1,5 ****
  /* AudioClip.java -- play an audio clip in an applet
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 38,44 ----
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/AWTError.java gcc-4.0.0/libjava/java/awt/AWTError.java
*** gcc-3.4.3/libjava/java/awt/AWTError.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/AWTError.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* AWTError.java -- A serious AWT error occurred.
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AWTError.java -- A serious AWT error occurred.
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/AWTEvent.java gcc-4.0.0/libjava/java/awt/AWTEvent.java
*** gcc-3.4.3/libjava/java/awt/AWTEvent.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/AWTEvent.java	Thu Feb 17 07:48:23 2005
*************** import java.util.EventObject;
*** 50,57 ****
   * 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
   */
--- 50,57 ----
   * 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 E
*** 231,245 ****
    }
  
    /**
!    * Returns a string representation of this event. This is in the format
!    * <code>getClass().getName() + '[' + paramString() + "] on "
!    * + source</code>.
     *
!    * @return a string representation of this event
     */
!   public String toString()
    {
!     return getClass().getName() + "[" + paramString() + "] on " + source;
    }
  
    /**
--- 231,253 ----
    }
  
    /**
!    * 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 = null;
! 
!     if (source instanceof Component)
!       string = getClass ().getName () + "[" + paramString () + "] on "
!         + ((Component) source).getName ();
!     else if (source instanceof MenuComponent)
!       string = getClass ().getName () + "[" + paramString () + "] on "
!         + ((MenuComponent) source).getName ();
! 
!     return string;
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/awt/AWTEventMulticaster.java gcc-4.0.0/libjava/java/awt/AWTEventMulticaster.java
*** gcc-3.4.3/libjava/java/awt/AWTEventMulticaster.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/AWTEventMulticaster.java	Thu Feb 17 07:48:23 2005
*************** import java.util.EventListener;
*** 107,114 ****
   * 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
   */
--- 107,114 ----
   * 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
*** 181,187 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void componentResized(ComponentEvent e)
    {
--- 181,187 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void componentResized(ComponentEvent e)
    {
*************** public class AWTEventMulticaster
*** 193,199 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void componentMoved(ComponentEvent e)
    {
--- 193,199 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void componentMoved(ComponentEvent e)
    {
*************** public class AWTEventMulticaster
*** 205,211 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void componentShown(ComponentEvent e)
    {
--- 205,211 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void componentShown(ComponentEvent e)
    {
*************** public class AWTEventMulticaster
*** 217,223 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void componentHidden(ComponentEvent e)
    {
--- 217,223 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void componentHidden(ComponentEvent e)
    {
*************** public class AWTEventMulticaster
*** 229,235 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void componentAdded(ContainerEvent e)
    {
--- 229,235 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void componentAdded(ContainerEvent e)
    {
*************** public class AWTEventMulticaster
*** 241,247 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void componentRemoved(ContainerEvent e)
    {
--- 241,247 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void componentRemoved(ContainerEvent e)
    {
*************** public class AWTEventMulticaster
*** 253,259 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void focusGained(FocusEvent e)
    {
--- 253,259 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void focusGained(FocusEvent e)
    {
*************** public class AWTEventMulticaster
*** 265,271 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void focusLost(FocusEvent e)
    {
--- 265,271 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void focusLost(FocusEvent e)
    {
*************** public class AWTEventMulticaster
*** 277,283 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void keyTyped(KeyEvent e)
    {
--- 277,283 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void keyTyped(KeyEvent e)
    {
*************** public class AWTEventMulticaster
*** 289,295 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void keyPressed(KeyEvent e)
    {
--- 289,295 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void keyPressed(KeyEvent e)
    {
*************** public class AWTEventMulticaster
*** 301,307 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void keyReleased(KeyEvent e)
    {
--- 301,307 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void keyReleased(KeyEvent e)
    {
*************** public class AWTEventMulticaster
*** 313,319 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void mouseClicked(MouseEvent e)
    {
--- 313,319 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void mouseClicked(MouseEvent e)
    {
*************** public class AWTEventMulticaster
*** 325,331 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void mousePressed(MouseEvent e)
    {
--- 325,331 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void mousePressed(MouseEvent e)
    {
*************** public class AWTEventMulticaster
*** 337,343 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void mouseReleased(MouseEvent e)
    {
--- 337,343 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void mouseReleased(MouseEvent e)
    {
*************** public class AWTEventMulticaster
*** 349,355 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void mouseEntered(MouseEvent e)
    {
--- 349,355 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void mouseEntered(MouseEvent e)
    {
*************** public class AWTEventMulticaster
*** 361,367 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void mouseExited(MouseEvent e)
    {
--- 361,367 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void mouseExited(MouseEvent e)
    {
*************** public class AWTEventMulticaster
*** 373,379 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void mouseDragged(MouseEvent e)
    {
--- 373,379 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void mouseDragged(MouseEvent e)
    {
*************** public class AWTEventMulticaster
*** 385,391 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void mouseMoved(MouseEvent e)
    {
--- 385,391 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void mouseMoved(MouseEvent e)
    {
*************** public class AWTEventMulticaster
*** 397,403 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void windowOpened(WindowEvent e)
    {
--- 397,403 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void windowOpened(WindowEvent e)
    {
*************** public class AWTEventMulticaster
*** 409,415 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void windowClosing(WindowEvent e)
    {
--- 409,415 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void windowClosing(WindowEvent e)
    {
*************** public class AWTEventMulticaster
*** 421,427 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void windowClosed(WindowEvent e)
    {
--- 421,427 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void windowClosed(WindowEvent e)
    {
*************** public class AWTEventMulticaster
*** 433,439 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void windowIconified(WindowEvent e)
    {
--- 433,439 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void windowIconified(WindowEvent e)
    {
*************** public class AWTEventMulticaster
*** 445,451 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void windowDeiconified(WindowEvent e)
    {
--- 445,451 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void windowDeiconified(WindowEvent e)
    {
*************** public class AWTEventMulticaster
*** 457,463 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void windowActivated(WindowEvent e)
    {
--- 457,463 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void windowActivated(WindowEvent e)
    {
*************** public class AWTEventMulticaster
*** 469,475 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void windowDeactivated(WindowEvent e)
    {
--- 469,475 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void windowDeactivated(WindowEvent e)
    {
*************** public class AWTEventMulticaster
*** 481,487 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     * @since 1.4
     */
    public void windowStateChanged(WindowEvent e)
--- 481,487 ----
     * 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)
*************** public class AWTEventMulticaster
*** 494,500 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     * @since 1.4
     */
    public void windowGainedFocus(WindowEvent e)
--- 494,500 ----
     * 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)
*************** public class AWTEventMulticaster
*** 507,513 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     * @since 1.4
     */
    public void windowLostFocus(WindowEvent e)
--- 507,513 ----
     * 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)
*************** public class AWTEventMulticaster
*** 520,526 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void actionPerformed(ActionEvent e)
    {
--- 520,526 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void actionPerformed(ActionEvent e)
    {
*************** public class AWTEventMulticaster
*** 532,538 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void itemStateChanged(ItemEvent e)
    {
--- 532,538 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void itemStateChanged(ItemEvent e)
    {
*************** public class AWTEventMulticaster
*** 544,550 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void adjustmentValueChanged(AdjustmentEvent e)
    {
--- 544,550 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void adjustmentValueChanged(AdjustmentEvent e)
    {
*************** public class AWTEventMulticaster
*** 556,562 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     */
    public void textValueChanged(TextEvent e)
    {
--- 556,562 ----
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param e the event to handle
     */
    public void textValueChanged(TextEvent e)
    {
*************** public class AWTEventMulticaster
*** 568,574 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     * @since 1.2
     */
    public void inputMethodTextChanged(InputMethodEvent e)
--- 568,574 ----
     * 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)
*************** public class AWTEventMulticaster
*** 581,587 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     * @since 1.2
     */
    public void caretPositionChanged(InputMethodEvent e)
--- 581,587 ----
     * 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)
*************** public class AWTEventMulticaster
*** 594,600 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     * @since 1.3
     */
    public void hierarchyChanged(HierarchyEvent e)
--- 594,600 ----
     * 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)
*************** public class AWTEventMulticaster
*** 607,613 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     * @since 1.3
     */
    public void ancestorMoved(HierarchyEvent e)
--- 607,613 ----
     * 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)
*************** public class AWTEventMulticaster
*** 620,626 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     * @since 1.3
     */
    public void ancestorResized(HierarchyEvent e)
--- 620,626 ----
     * 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)
*************** public class AWTEventMulticaster
*** 633,639 ****
     * Handles this event by dispatching it to the "a" and "b" listener
     * instances.
     *
!    * @param event the event to handle
     * @since 1.4
     */
    public void mouseWheelMoved(MouseWheelEvent e)
--- 633,639 ----
     * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/awt/AWTException.java gcc-4.0.0/libjava/java/awt/AWTException.java
*** gcc-3.4.3/libjava/java/awt/AWTException.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/AWTException.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* AWTException.java -- Generic AWT exception
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AWTException.java -- Generic AWT exception
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/AWTKeyStroke.java gcc-4.0.0/libjava/java/awt/AWTKeyStroke.java
*** gcc-3.4.3/libjava/java/awt/AWTKeyStroke.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/AWTKeyStroke.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* AWTKeyStroke.java -- an immutable key stroke
!    Copyright (C) 2002 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AWTKeyStroke.java -- an immutable key stroke
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** import java.security.AccessController;
*** 48,56 ****
  import java.security.PrivilegedAction;
  import java.security.PrivilegedActionException;
  import java.security.PrivilegedExceptionAction;
- import java.util.Map;
  import java.util.HashMap;
  import java.util.LinkedHashMap;
  import java.util.StringTokenizer;
  
  /**
--- 48,56 ----
  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;
  
  /**
*************** import java.util.StringTokenizer;
*** 63,69 ****
   * 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
--- 63,69 ----
   * 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 Ser
*** 393,407 ****
     * </code>      
     *
     * @param s the string to parse
     * @return the specified keystroke
-    * @throws NullPointerException if s is null
-    * @throws IllegalArgumentException if s cannot be parsed
     */
    public static AWTKeyStroke getAWTKeyStroke(String s)
    {
      StringTokenizer t = new StringTokenizer(s, " ");
      if (! t.hasMoreTokens())
!       throw new IllegalArgumentException();
      int modifiers = 0;
      boolean released = false;
      String token = null;
--- 393,408 ----
     * </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;
*************** public class AWTKeyStroke implements Ser
*** 409,421 ****
        {
          token = t.nextToken();
          if ("shift".equals(token))
!           modifiers |= KeyEvent.SHIFT_MASK | KeyEvent.SHIFT_DOWN_MASK;
          else if ("ctrl".equals(token) || "control".equals(token))
!           modifiers |= KeyEvent.CTRL_MASK | KeyEvent.CTRL_DOWN_MASK;
          else if ("meta".equals(token))
!           modifiers |= KeyEvent.META_MASK | KeyEvent.META_DOWN_MASK;
          else if ("alt".equals(token))
!           modifiers |= KeyEvent.ALT_MASK | KeyEvent.ALT_DOWN_MASK;
          else if ("button1".equals(token))
            modifiers |= KeyEvent.BUTTON1_DOWN_MASK;
          else if ("button2".equals(token))
--- 410,422 ----
        {
          token = t.nextToken();
          if ("shift".equals(token))
!           modifiers |= KeyEvent.SHIFT_DOWN_MASK;
          else if ("ctrl".equals(token) || "control".equals(token))
!           modifiers |= KeyEvent.CTRL_DOWN_MASK;
          else if ("meta".equals(token))
!           modifiers |= KeyEvent.META_DOWN_MASK;
          else if ("alt".equals(token))
!           modifiers |= KeyEvent.ALT_DOWN_MASK;
          else if ("button1".equals(token))
            modifiers |= KeyEvent.BUTTON1_DOWN_MASK;
          else if ("button2".equals(token))
*************** public class AWTKeyStroke implements Ser
*** 432,438 ****
                                           KeyEvent.VK_UNDEFINED, modifiers,
                                           false);
                }
!             throw new IllegalArgumentException();
            }
          else if ("pressed".equals(token))
            {
--- 433,440 ----
                                           KeyEvent.VK_UNDEFINED, modifiers,
                                           false);
                }
!             throw new IllegalArgumentException("Invalid 'typed' argument '"
! 			    		       + s + "'");
            }
          else if ("pressed".equals(token))
            {
*************** public class AWTKeyStroke implements Ser
*** 453,460 ****
      while (t.hasMoreTokens());
      // Now token contains the VK name we must parse.
      Integer code = (Integer) vktable.get(token);
!     if (code == null || t.hasMoreTokens())
!       throw new IllegalArgumentException();
      return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, code.intValue(),
                             modifiers, released);
    }
--- 455,465 ----
      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);
    }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/AWTPermission.java gcc-4.0.0/libjava/java/awt/AWTPermission.java
*** gcc-3.4.3/libjava/java/awt/AWTPermission.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/AWTPermission.java	Thu Feb 17 07:48:23 2005
*************** import java.security.BasicPermission;
*** 79,88 ****
   * <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
   */
--- 79,88 ----
   * <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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/ActiveEvent.java gcc-4.0.0/libjava/java/awt/ActiveEvent.java
*** gcc-3.4.3/libjava/java/awt/ActiveEvent.java	Sat Oct 11 17:19:45 2003
--- gcc-4.0.0/libjava/java/awt/ActiveEvent.java	Thu Feb 17 07:48:23 2005
*************** package java.awt;
*** 47,53 ****
   * 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
   */
--- 47,53 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Adjustable.java gcc-4.0.0/libjava/java/awt/Adjustable.java
*** gcc-3.4.3/libjava/java/awt/Adjustable.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/Adjustable.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* Adjustable.java -- Objects with a numeric adjustment scale
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Adjustable.java -- Objects with a numeric adjustment scale
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.AdjustmentListener
*** 44,50 ****
   * 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
   */
--- 44,50 ----
   * 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
*** 157,163 ****
     * Adds a listener that will receive adjustment events for this object.
     *
     * @param listener the adjustment listener to add
!    * @see AdjustmentEvent
     */
    void addAdjustmentListener(AdjustmentListener listener);
  
--- 157,163 ----
     * 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);
  
*************** public interface Adjustable
*** 165,171 ****
     * Removes an adjustment listener from this object.
     *
     * @param listener the adjustment listener to remove
!    * @see AdjustmentEvent
     */
    void removeAdjustmentListener(AdjustmentListener listener);
  } // interface Adjustable
--- 165,171 ----
     * 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-3.4.3/libjava/java/awt/AlphaComposite.java gcc-4.0.0/libjava/java/awt/AlphaComposite.java
*** gcc-3.4.3/libjava/java/awt/AlphaComposite.java	Thu Jan  2 00:14:22 2003
--- gcc-4.0.0/libjava/java/awt/AlphaComposite.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* AlphaComposite.java -- provides a context for performing alpha compositing
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AlphaComposite.java -- provides a context for performing alpha compositing
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Map;
*** 44,50 ****
  
  /**
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Composite
   * @see CompositeContext
   * @since 1.3
--- 44,50 ----
  
  /**
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Composite
   * @see CompositeContext
   * @since 1.3
diff -Nrcpad gcc-3.4.3/libjava/java/awt/AttributeValue.java gcc-4.0.0/libjava/java/awt/AttributeValue.java
*** gcc-3.4.3/libjava/java/awt/AttributeValue.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/AttributeValue.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* AttributeValue.java -- parent of type-safe enums of attributes
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AttributeValue.java -- parent of type-safe enums of attributes
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 44,50 ****
   * <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
  {
--- 44,50 ----
   * <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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/BasicStroke.java gcc-4.0.0/libjava/java/awt/BasicStroke.java
*** gcc-3.4.3/libjava/java/awt/BasicStroke.java	Sat Sep 20 21:30:39 2003
--- gcc-4.0.0/libjava/java/awt/BasicStroke.java	Wed Feb 16 20:01:46 2005
***************
*** 1,5 ****
  /* BasicStroke.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BasicStroke.java -- 
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public class BasicStroke implements Stro
*** 48,53 ****
--- 48,54 ----
    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;
*************** public class BasicStroke implements Stro
*** 69,75 ****
     * 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 dash_phase is negative and dash is not null.
     *
     * @exception IllegalArgumentException If one input parameter doesn't meet
     * its needs.
--- 70,76 ----
     * 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 class BasicStroke implements Stro
*** 208,218 ****
      return phase;
    }
  
    public int hashCode()
    {
!     throw new Error("not implemented");
    }
  
    public boolean equals(Object o)
    {
      if (! (o instanceof BasicStroke))
--- 209,242 ----
      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))
diff -Nrcpad gcc-3.4.3/libjava/java/awt/BorderLayout.java gcc-4.0.0/libjava/java/awt/BorderLayout.java
*** gcc-3.4.3/libjava/java/awt/BorderLayout.java	Sun Nov 10 23:11:21 2002
--- gcc-4.0.0/libjava/java/awt/BorderLayout.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* BorderLayout.java -- A layout manager class
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BorderLayout.java -- A layout manager class
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 43,49 ****
    * 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
  {
--- 43,49 ----
    * 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
  {
*************** addLayoutComponent(Component component, 
*** 349,355 ****
    if (constraints != null && ! (constraints instanceof String))
      throw new IllegalArgumentException("Constraint must be a string");
  
!   String str = (String)constraints;
  
    if (str == null || str.equals(CENTER))
      center = component;
--- 349,376 ----
    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;
*************** addLayoutComponent(Component component, 
*** 376,402 ****
  /*************************************************************************/
  
  /**
-   * 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)
- {
-   addLayoutComponent(component, constraints);
- }
- 
- /*************************************************************************/
- 
- /**
    * Removes the specified component from the layout.
    *
    * @param component The component to remove from the layout.
--- 397,402 ----
*************** layoutContainer(Container target)
*** 592,603 ****
  
        int x1 = i.left;
        int x2 = x1 + w.width + hgap;
!       int x3 = t.width - i.right - e.width;
        int ww = t.width - i.right - i.left;
  
        int y1 = i.top;
        int y2 = y1 + n.height + vgap;
!       int y3 = t.height - i.bottom - s.height;
        int hh = y3-y2-vgap;
  
        setBounds(center, x2, y2, x3-x2-hgap, hh);
--- 592,612 ----
  
        int x1 = i.left;
        int x2 = x1 + w.width + hgap;
!       int x3;
!       if (t.width <= i.right + e.width)
!         x3 = x2 + w.width + hgap;
!       else
!         x3 = t.width - i.right - e.width;
        int ww = t.width - i.right - i.left;
  
        int y1 = i.top;
        int y2 = y1 + n.height + vgap;
!       int midh = Math.max(e.height, Math.max(w.height, c.height));
!       int y3;
!       if (t.height <= i.bottom + s.height)
!         y3 = y2 + midh + vgap;
!       else
!         y3 = t.height - i.bottom - s.height;
        int hh = y3-y2-vgap;
  
        setBounds(center, x2, y2, x3-x2-hgap, hh);
*************** private static final int PREF = 2;
*** 637,643 ****
  private Dimension
  calcCompSize(Component comp, int what)
  {
!   if (comp == null)
      return new Dimension(0, 0);
    if (what == MIN)
      return comp.getMinimumSize();
--- 646,652 ----
  private Dimension
  calcCompSize(Component comp, int what)
  {
!   if (comp == null || !comp.isVisible())
      return new Dimension(0, 0);
    if (what == MIN)
      return comp.getMinimumSize();
diff -Nrcpad gcc-3.4.3/libjava/java/awt/BufferCapabilities.java gcc-4.0.0/libjava/java/awt/BufferCapabilities.java
*** gcc-3.4.3/libjava/java/awt/BufferCapabilities.java	Thu Jan  2 00:14:22 2003
--- gcc-4.0.0/libjava/java/awt/BufferCapabilities.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* BufferCapabilities.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BufferCapabilities.java -- 
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
  /**
   * Needs documentation...
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see BufferStrategy#getCapabilities()
   * @see GraphicsConfiguration#getCapabilities()
   * @since 1.4
--- 41,47 ----
  /**
   * Needs documentation...
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see BufferStrategy#getCapabilities()
   * @see GraphicsConfiguration#getCapabilities()
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Button.java gcc-4.0.0/libjava/java/awt/Button.java
*** gcc-3.4.3/libjava/java/awt/Button.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/Button.java	Mon Feb 21 16:12:10 2005
***************
*** 1,5 ****
  /* Button.java -- AWT button widget
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Button.java -- AWT button widget
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.peer.ButtonPeer;
*** 44,56 ****
  import java.lang.reflect.Array;
  import java.util.EventListener;
  
  /**
    * 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
  {
  
  /*
--- 44,63 ----
  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
  {
  
  /*
*************** private String label;
*** 81,86 ****
--- 88,196 ----
  // 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
+   {
+     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;
+     }
+   }
+ 
  /*************************************************************************/
  
  /*
*************** private transient ActionListener action_
*** 96,102 ****
  public
  Button()
  {
!   this(null);
  }
  
  /*************************************************************************/
--- 206,212 ----
  public
  Button()
  {
!   this("");
  }
  
  /*************************************************************************/
*************** public synchronized void
*** 148,153 ****
--- 258,264 ----
  setLabel(String label)
  {
    this.label = label;
+   actionCommand = label;
    if (peer != null)
      {
        ButtonPeer bp = (ButtonPeer) peer;
*************** removeActionListener(ActionListener list
*** 209,214 ****
--- 320,332 ----
    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[])
*************** removeActionListener(ActionListener list
*** 216,225 ****
                                         ActionListener.class);
    }
  
! /** Returns all registered EventListers of the given listenerType. 
   * listenerType must be a subclass of EventListener, or a 
   * ClassClassException is thrown.
   *
   * @exception ClassCastException If listenerType doesn't specify a class or
   * interface that implements @see java.util.EventListener.
   *
--- 334,348 ----
                                         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.
   *
*************** dispatchEventImpl(AWTEvent e)
*** 304,312 ****
  protected String
  paramString()
  {
!   return ("label=" + getLabel() + ",actionCommand=" + getActionCommand()
! 	  + "," + super.paramString());
  }
  
  } // class Button 
  
--- 427,464 ----
  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-3.4.3/libjava/java/awt/Canvas.java gcc-4.0.0/libjava/java/awt/Canvas.java
*** gcc-3.4.3/libjava/java/awt/Canvas.java	Tue Jan 22 22:40:04 2002
--- gcc-4.0.0/libjava/java/awt/Canvas.java	Thu Feb 17 07:48:23 2005
***************
*** 1,4 ****
! /* Copyright (C) 1999, 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Canvas.java --
!    Copyright (C) 1999, 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,53 ****
  
  package java.awt;
  
  import java.awt.peer.ComponentPeer;
  
! public class Canvas extends Component implements java.io.Serializable
  {
    transient GraphicsConfiguration graphicsConfiguration;
  
    /**
     * Initializes a new instance of <code>Canvas</code>.
     */
!   public Canvas() { }
  
    public Canvas(GraphicsConfiguration graphicsConfiguration)
    {
      this.graphicsConfiguration = graphicsConfiguration;
--- 38,98 ----
  
  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;
*************** public class Canvas extends Component im
*** 71,79 ****
    }
  
    /**
!    * Repaints the canvas window.  This method should be overriden by 
     * a subclass to do something useful, as this method simply paints
     * the window with the background color.
     */
    public void paint(Graphics gfx)
    {
--- 116,126 ----
    }
  
    /**
!    * 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)
    {
*************** public class Canvas extends Component im
*** 86,91 ****
      gfx.fillRect(0, 0, size.width, size.height);
    }
  
!   // Serialization constant
!   private static final long serialVersionUID = -2284879212465893870L;
  }
--- 133,215 ----
      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;
!   }
! 
!   /**
!    * 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-3.4.3/libjava/java/awt/CardLayout.java gcc-4.0.0/libjava/java/awt/CardLayout.java
*** gcc-3.4.3/libjava/java/awt/CardLayout.java	Wed Jan 15 22:47:04 2003
--- gcc-4.0.0/libjava/java/awt/CardLayout.java	Tue Nov 30 23:58:38 2004
***************
*** 1,6 ****
! // CardLayout.java - Card-based layout engine
! 
! /* Copyright (C) 1999, 2000, 2002, 2003  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* CardLayout.java -- Card-based layout engine
!    Copyright (C) 1999, 2000, 2002, 2003, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,59 ****
  
  package java.awt;
  
  import java.util.Enumeration;
  import java.util.Hashtable;
- import java.io.Serializable;
  
! /** 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
  {
!   static final long serialVersionUID = -4328196481005934313L;
  
    /**
     * Initializes a new instance of <code>CardLayout</code> with horizontal
--- 38,59 ----
  
  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
*************** public class CardLayout implements Layou
*** 67,72 ****
--- 67,73 ----
    /**
     * 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 class CardLayout implements Layou
*** 77,87 ****
      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>
     */
--- 78,91 ----
      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 class CardLayout implements Layou
*** 90,111 ****
      if (! (constraints instanceof String))
        throw new IllegalArgumentException ("Object " + constraints
  					  + " is not a string");
!     tab.put (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)
    {
!     addLayoutComponent (comp, name);
    }
  
!   /** Cause the first component in the container to be displayed.
     * @param parent The parent container
     */
    public void first (Container parent)
--- 94,122 ----
      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)
*************** public class CardLayout implements Layou
*** 113,155 ****
      gotoComponent (parent, FIRST);
    }
  
!   /** Return this layout manager's 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
     */
    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
     */
    public float getLayoutAlignmentY (Container parent)
    {
      return Component.CENTER_ALIGNMENT;
    }
  
!   /** Return this layout manager's 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)
--- 124,186 ----
      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)
*************** public class CardLayout implements Layou
*** 185,192 ****
        }
    }
  
!   /** Get the maximum layout size of the container.
     * @param target The parent container
     */
    public Dimension maximumLayoutSize (Container target)
    {
--- 216,227 ----
        }
    }
  
!   /**
!    * Get the maximum layout size of the container.
!    * 
     * @param target The parent container
+    *
+    * @return the maximum layout size
     */
    public Dimension maximumLayoutSize (Container target)
    {
*************** public class CardLayout implements Layou
*** 195,211 ****
      return getSize (target, MAX);
    }
  
!   /** Get the minimum layout size of the container.
     * @param target The parent container
     */
    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)
--- 230,252 ----
      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)
*************** public class CardLayout implements Layou
*** 213,229 ****
      gotoComponent (parent, NEXT);
    }
  
!   /** Get the preferred layout size of the container.
!    * @param target The parent container
     */
    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)
--- 254,276 ----
      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)
*************** public class CardLayout implements Layou
*** 231,237 ****
      gotoComponent (parent, PREV);
    }
  
!   /** Remove the indicated component from this layout manager.
     * @param comp The component to remove
     */
    public void removeLayoutComponent (Component comp)
--- 278,286 ----
      gotoComponent (parent, PREV);
    }
  
!   /**
!    * Remove the indicated component from this layout manager.
!    * 
     * @param comp The component to remove
     */
    public void removeLayoutComponent (Component comp)
*************** public class CardLayout implements Layou
*** 243,254 ****
  	if (tab.get (key) == comp)
  	  {
  	    tab.remove (key);
  	    break;
  	  }
        }
    }
  
!   /** Set this layout manager's horizontal gap.
     * @param hgap The new gap
     */
    public void setHgap (int hgap)
--- 292,307 ----
  	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)
*************** public class CardLayout implements Layou
*** 256,262 ****
      this.hgap = hgap;
    }
  
!   /** Set this layout manager's vertical gap.
     * @param vgap The new gap
     */
    public void setVgap (int vgap)
--- 309,317 ----
      this.hgap = hgap;
    }
  
!   /**
!    * Set this layout manager's vertical gap.
!    * 
     * @param vgap The new gap
     */
    public void setVgap (int vgap)
*************** public class CardLayout implements Layou
*** 264,271 ****
      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
     */
--- 319,328 ----
      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 class CardLayout implements Layou
*** 300,306 ****
      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
     */
--- 357,365 ----
      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
     */
*************** public class CardLayout implements Layou
*** 311,316 ****
--- 370,382 ----
  	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)
*************** public class CardLayout implements Layou
*** 405,417 ****
    private Hashtable tab;
  
    // These constants are used by the private gotoComponent method.
!   private int FIRST = 0;
!   private int LAST = 1;
!   private int NEXT = 2;
!   private int PREV = 3;
  
    // These constants are used by the private getSize method.
!   private int MIN = 0;
!   private int MAX = 1;
!   private int PREF = 2;
  }
--- 471,483 ----
    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-3.4.3/libjava/java/awt/Checkbox.java gcc-4.0.0/libjava/java/awt/Checkbox.java
*** gcc-3.4.3/libjava/java/awt/Checkbox.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/Checkbox.java	Mon Feb 21 21:41:28 2005
***************
*** 1,5 ****
  /* Checkbox.java -- An AWT checkbox widget
!    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Checkbox.java -- An AWT checkbox widget
!    Copyright (C) 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.ItemListener;
*** 43,56 ****
  import java.awt.peer.CheckboxPeer;
  import java.io.Serializable;
  
  /**
   * 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, Serializable
  {
  
  // FIXME: Need readObject/writeObject for this.
--- 43,65 ----
  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.
*************** private boolean state;
*** 86,91 ****
--- 95,312 ----
  // 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;
+   }
+ 
+ }
+ 
  /*************************************************************************/
  
  /*
*************** paramString()
*** 392,395 ****
  	  + "," + super.paramString());
  }
  
! } // class Checkbox 
--- 613,648 ----
  	  + "," + 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-3.4.3/libjava/java/awt/CheckboxGroup.java gcc-4.0.0/libjava/java/awt/CheckboxGroup.java
*** gcc-3.4.3/libjava/java/awt/CheckboxGroup.java	Tue Jan 22 22:40:04 2002
--- gcc-4.0.0/libjava/java/awt/CheckboxGroup.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* CheckboxGroup.java -- A grouping class for checkboxes.
!    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CheckboxGroup.java -- A grouping class for checkboxes.
!    Copyright (C) 1999, 2000, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 43,49 ****
    * 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
  {
--- 43,49 ----
    * 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
  {
*************** CheckboxGroup()
*** 95,102 ****
  public Checkbox
  getSelectedCheckbox()
  {
!   return(selectedCheckbox);
! } 
  
  /*************************************************************************/
  
--- 95,102 ----
  public Checkbox
  getSelectedCheckbox()
  {
!   return getCurrent ();
! }
  
  /*************************************************************************/
  
*************** getCurrent()
*** 126,142 ****
  public void
  setSelectedCheckbox(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);
  }
  
  /*************************************************************************/
--- 126,132 ----
  public void
  setSelectedCheckbox(Checkbox selectedCheckbox)
  {
!   setCurrent (selectedCheckbox);
  }
  
  /*************************************************************************/
*************** setSelectedCheckbox(Checkbox selectedChe
*** 153,159 ****
  public void
  setCurrent(Checkbox selectedCheckbox)
  {
!   setSelectedCheckbox(selectedCheckbox);
  }
  
  /*************************************************************************/
--- 143,159 ----
  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);
  }
  
  /*************************************************************************/
diff -Nrcpad gcc-3.4.3/libjava/java/awt/CheckboxMenuItem.java gcc-4.0.0/libjava/java/awt/CheckboxMenuItem.java
*** gcc-3.4.3/libjava/java/awt/CheckboxMenuItem.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/CheckboxMenuItem.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* CheckboxMenuItem.java -- A menu option with a checkbox on it.
!    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.awt;
*** 41,57 ****
  import java.awt.event.ItemEvent;
  import java.awt.event.ItemListener;
  import java.awt.peer.CheckboxMenuItemPeer;
- import java.awt.peer.MenuItemPeer;
  import java.util.EventListener;
  
  /**
    * 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
  {
  
  /*
--- 41,62 ----
  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
  {
  
  /*
*************** setState(boolean state)
*** 175,181 ****
    * 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.
    *
!   * @param An array with this menu item's label if it has a state of on,
    * or <code>null</code> otherwise.
    */
  public Object[]
--- 180,186 ----
    * 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()
*** 198,209 ****
  public synchronized void
  addNotify()
  {
!   if (peer != null)
!     {
!       // This choice of toolkit seems unsatisfying, but I'm not sure
!       // what else to do.
!       peer = getToolkit().createCheckboxMenuItem(this);
!     }
    super.addNotify ();
  }
  
--- 203,211 ----
  public synchronized void
  addNotify()
  {
!   if (peer == null)
!     peer = getToolkit().createCheckboxMenuItem(this);
! 
    super.addNotify ();
  }
  
*************** processItemEvent(ItemEvent event)
*** 272,277 ****
--- 274,287 ----
  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 
*************** paramString()
*** 319,323 ****
--- 329,355 ----
    {
      return (ItemListener[]) getListeners (ItemListener.class);
    }
+ 
+ 
+   protected class AccessibleAWTCheckboxMenuItem extends AccessibleAWTMenuItem
+     implements AccessibleAction, AccessibleValue
+   {
+     // I think the base class provides the necessary implementation
+   }
+   
+   /**
+    * 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-3.4.3/libjava/java/awt/Choice.java gcc-4.0.0/libjava/java/awt/Choice.java
*** gcc-3.4.3/libjava/java/awt/Choice.java	Mon Jan  5 21:18:06 2004
--- gcc-4.0.0/libjava/java/awt/Choice.java	Wed Feb 16 20:01:47 2005
***************
*** 1,5 ****
  /* Choice.java -- Java choice button widget.
!    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Choice.java -- Java choice button widget.
!    Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 45,56 ****
  import java.util.EventListener;
  import java.util.Vector;
  
  /**
    * This class implements a drop down choice list.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
    */
! public class Choice extends Component implements ItemSelectable, Serializable
  {
  
  /*
--- 45,62 ----
  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
  {
  
  /*
*************** private int selectedIndex = -1;
*** 79,84 ****
--- 85,192 ----
  // 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;
+     }
+   }
+ 
  /*************************************************************************/
  
  /*
*************** private ItemListener item_listeners;
*** 111,117 ****
  public int
  getItemCount()
  {
!   return(pItems.size());
  }
  
  /*************************************************************************/
--- 219,225 ----
  public int
  getItemCount()
  {
!   return countItems ();
  }
  
  /*************************************************************************/
*************** add(String item)
*** 169,174 ****
--- 277,284 ----
        ChoicePeer cp = (ChoicePeer) peer;
        cp.add (item, i);
      }
+   else if (selectedIndex == -1) 
+     select(0);
  }
  
  /*************************************************************************/
*************** insert(String item, int index)
*** 218,223 ****
--- 328,335 ----
        ChoicePeer cp = (ChoicePeer) peer;
        cp.add (item, index);
      }
+   else if (selectedIndex == -1 || selectedIndex >= index)
+     select(0);
  }
  
  /*************************************************************************/
*************** remove(int index)
*** 261,266 ****
--- 373,385 ----
        ChoicePeer cp = (ChoicePeer) peer;
        cp.remove (index);
      }
+   else
+     {
+       if (getItemCount() == 0)
+ 	selectedIndex = -1;
+       else if (index == selectedIndex)
+ 	select(0);
+     }
  
    if (selectedIndex > index)
      --selectedIndex;
*************** paramString()
*** 501,504 ****
--- 620,637 ----
    {
      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-3.4.3/libjava/java/awt/Color.java gcc-4.0.0/libjava/java/awt/Color.java
*** gcc-3.4.3/libjava/java/awt/Color.java	Wed Aug 13 03:19:24 2003
--- gcc-4.0.0/libjava/java/awt/Color.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* Color.java -- represents a color in Java
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Color.java -- represents a color in Java
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 53,59 ****
   * <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
--- 53,59 ----
   * <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
*************** public class Color implements Paint, Ser
*** 319,325 ****
    {
      if ((red & 255) != red || (green & 255) != green || (blue & 255) != blue
          || (alpha & 255) != alpha)
!       throw new IllegalArgumentException("Bad RGB values");
      value = (alpha << 24) | (red << 16) | (green << 8) | blue;
      falpha = 1;
      cs = null;
--- 319,330 ----
    {
      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;
*************** public class Color implements Paint, Ser
*** 501,507 ****
  
    /**
     * 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 alpha value in
     * 24-31.
     *
     * @return the RGB value for this color
--- 506,512 ----
  
    /**
     * 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
*************** public class Color implements Paint, Ser
*** 767,775 ****
          if (red == max)
            array[0] = (green - blue) / delta;
          else if (green == max)
!           array[0] = 1 / 3 + (blue - red) / delta;
          else
!           array[0] = 2 / 3 + (red - green) / delta;
          if (array[0] < 0)
            array[0]++;
        }
--- 772,780 ----
          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]++;
        }
*************** public class Color implements Paint, Ser
*** 950,956 ****
     * object, regardless of the parameters. Subclasses, however, may have a
     * mutable result.
     *
!    * @param cm the requested color model, ignored
     * @param deviceBounds the bounding box in device coordinates, ignored
     * @param userBounds the bounding box in user coordinates, ignored
     * @param xform the bounds transformation, ignored
--- 955,961 ----
     * 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
*************** public class Color implements Paint, Ser
*** 962,969 ****
                                      AffineTransform xform,
                                      RenderingHints hints)
    {
!     if (context == null)
!       context = new ColorPaintContext(value);
      return context;
    }
  
--- 967,974 ----
                                      AffineTransform xform,
                                      RenderingHints hints)
    {
!     if (context == null || !context.getColorModel().equals(cm))
!       context = new ColorPaintContext(cm,value);
      return context;
    }
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/ColorPaintContext.java gcc-4.0.0/libjava/java/awt/ColorPaintContext.java
*** gcc-3.4.3/libjava/java/awt/ColorPaintContext.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/ColorPaintContext.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* ColorPaintContext.java -- context for painting solid colors
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ColorPaintContext.java -- context for painting solid colors
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.image.Raster;
*** 46,52 ****
   * 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
  {
--- 46,52 ----
   * 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
  {
*************** class ColorPaintContext implements Paint
*** 55,69 ****
     * SystemColor.
     */
    final int color;
  
    /**
     * Create the context for a given color.
     *
!    * @param c the solid color to use
     */
!   ColorPaintContext(int c)
    {
!     color = c;
    }
  
    /**
--- 55,85 ----
     * SystemColor.
     */
    final int color;
+   final ColorModel colorModel;
+ 
+   private ColorRaster cachedRaster;
  
+   
    /**
     * Create the context for a given color.
     *
!    * @param c 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 c The solid color to use.
!    */
!   ColorPaintContext(ColorModel cm,int colorRGB)
!   {
!     color = colorRGB;
!     colorModel = cm;
    }
  
    /**
*************** class ColorPaintContext implements Paint
*** 75,88 ****
    }
  
    /**
!    * Return the color model of this context. This ignores the model passed
!    * in the request, since colors are always in sRGB.
     *
     * @return the context color model
     */
    public ColorModel getColorModel()
    {
!     return ColorModel.getRGBdefault();
    }
  
    /**
--- 91,103 ----
    }
  
    /**
!    * Return the color model of this context. 
     *
     * @return the context color model
     */
    public ColorModel getColorModel()
    {
!     return colorModel;
    }
  
    /**
*************** class ColorPaintContext implements Paint
*** 94,103 ****
     * @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)
    {
!     // XXX Implement. Sun uses undocumented implementation class
!     // sun.awt.image.IntegerInterleavedRaster.
!     throw new Error("not implemented");
    }
  } // class ColorPaintContext
--- 109,195 ----
     * @param h 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-3.4.3/libjava/java/awt/Component.java gcc-4.0.0/libjava/java/awt/Component.java
*** gcc-3.4.3/libjava/java/awt/Component.java	Wed Nov 12 22:03:49 2003
--- gcc-4.0.0/libjava/java/awt/Component.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* Component.java -- a graphics component
!    Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Component.java -- a graphics component
!    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  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;
*** 46,61 ****
  import java.awt.event.HierarchyBoundsListener;
  import java.awt.event.HierarchyEvent;
  import java.awt.event.HierarchyListener;
! import java.awt.event.KeyEvent;
! import java.awt.event.KeyListener;
  import java.awt.event.InputMethodEvent;
  import java.awt.event.InputMethodListener;
  import java.awt.event.MouseEvent;
  import java.awt.event.MouseListener;
  import java.awt.event.MouseMotionListener;
- import java.awt.event.MouseWheelListener;
  import java.awt.event.MouseWheelEvent;
  import java.awt.event.PaintEvent;
  import java.awt.im.InputContext;
  import java.awt.im.InputMethodRequests;
  import java.awt.image.BufferStrategy;
--- 47,64 ----
  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.peer.ComponentPeer;
*** 67,74 ****
  import java.awt.peer.LightweightPeer;
  import java.beans.PropertyChangeListener;
  import java.beans.PropertyChangeSupport;
- import java.io.ObjectInputStream;
  import java.io.IOException;
  import java.io.ObjectOutputStream;
  import java.io.PrintStream;
  import java.io.PrintWriter;
--- 70,77 ----
  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.util.Iterator;
*** 81,86 ****
--- 84,90 ----
  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.AccessibleSta
*** 105,111 ****
   * 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.
   *
!  * <p><pre>
   * import java.awt.*;
   * import java.awt.event.*;
   * import java.io.Serializable;
--- 109,115 ----
   * 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;
*************** import javax.accessibility.AccessibleSta
*** 127,132 ****
--- 131,137 ----
   *     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
*************** import javax.accessibility.AccessibleSta
*** 135,141 ****
   * present but commented out.
   *
   * @author original author unknown
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.0
   * @status still missing 1.4 support
   */
--- 140,146 ----
   * 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
*** 289,295 ****
     * @see #getLocale()
     * @see #setLocale(Locale)
     */
!   Locale locale;
  
    /**
     * True if the object should ignore repaint events (usually because it is
--- 294,300 ----
     * @see #getLocale()
     * @see #setLocale(Locale)
     */
!   Locale locale = Locale.getDefault ();
  
    /**
     * True if the object should ignore repaint events (usually because it is
*************** public abstract class Component
*** 382,399 ****
    boolean focusable = true;
  
    /**
!    * Tracks whether this component uses default focus traversal, or has a
!    * different policy.
     *
-    * @see #isFocusTraversableOverridden()
     * @since 1.4
     */
    int isFocusTraversableOverridden;
  
    /**
!    * 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)
--- 387,404 ----
    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)
*************** public abstract class Component
*** 556,561 ****
--- 561,572 ----
    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;
*************** public abstract class Component
*** 773,787 ****
     * events).
     *
     * @param enabled true to enable this component
     * @see #isEnabled()
     * @see #isLightweight()
     * @since 1.1
     */
!   public void setEnabled(boolean b)
    {
!     this.enabled = b;
!     if (peer != null)
!       peer.setEnabled(b);
    }
  
    /**
--- 784,798 ----
     * events).
     *
     * @param enabled true to enable this component
+    * 
     * @see #isEnabled()
     * @see #isLightweight()
+    * 
     * @since 1.1
     */
!   public void setEnabled(boolean enabled)
    {
!     enable(enabled);
    }
  
    /**
*************** public abstract class Component
*** 791,808 ****
     */
    public void enable()
    {
!     setEnabled(true);
    }
  
    /**
     * Enables or disables this component.
     *
     * @param enabled true to enable this component
     * @deprecated use {@link #setEnabled(boolean)} instead
     */
!   public void enable(boolean b)
    {
!     setEnabled(b);
    }
  
    /**
--- 802,825 ----
     */
    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();
    }
  
    /**
*************** public abstract class Component
*** 812,818 ****
     */
    public void disable()
    {
!     setEnabled(false);
    }
  
    /**
--- 829,837 ----
     */
    public void disable()
    {
!     this.enabled = false;
!     if (peer != null)
!       peer.setEnabled (false);
    }
  
    /**
*************** public abstract class Component
*** 848,865 ****
     * 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 b)
    {
      // 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.
!     if (b)
!       show();
!     else
!       hide();
    }
  
    /**
--- 867,883 ----
     * 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);
    }
  
    /**
*************** public abstract class Component
*** 869,888 ****
     */
    public void show()
    {
!     if (peer != null)
!       peer.setVisible(true);
!     this.visible = true;
    }
  
    /**
     * Makes this component visible or invisible.
     *
     * @param visible true to make this component visible
     * @deprecated use {@link #setVisible(boolean)} instead
     */
!   public void show(boolean b)
    {
!     setVisible(b);
    }
  
    /**
--- 887,922 ----
     */
    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;
!         if (peer != null)
!           peer.setVisible(true);
!         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();
    }
  
    /**
*************** public abstract class Component
*** 892,900 ****
     */
    public void hide()
    {
!     if (peer != null)
!       peer.setVisible(false);
!     this.visible = false;
    }
  
    /**
--- 926,941 ----
     */
    public void hide()
    {
!     if (isVisible())
!       {
!         if (peer != null)
!           peer.setVisible(false);
!         this.visible = false;
!         invalidate();
!         ComponentEvent ce =
!           new ComponentEvent(this,ComponentEvent.COMPONENT_HIDDEN);
!         getToolkit().getSystemEventQueue().postEvent(ce);
!       }
    }
  
    /**
*************** public abstract class Component
*** 908,914 ****
    {
      if (foreground != null)
        return foreground;
!     return parent == null ? null : parent.getForeground();
    }
  
    /**
--- 949,955 ----
    {
      if (foreground != null)
        return foreground;
!     return parent == null ? SystemColor.windowText : parent.getForeground();
    }
  
    /**
*************** public abstract class Component
*** 949,955 ****
    {
      if (background != null)
        return background;
!     return parent == null ? null : parent.getBackground();
    }
  
    /**
--- 990,996 ----
    {
      if (background != null)
        return background;
!     return parent == null ? SystemColor.window : parent.getBackground();
    }
  
    /**
*************** public abstract class Component
*** 962,969 ****
     */
    public void setBackground(Color c)
    {
      firePropertyChange("background", background, c);
!     if (peer != null)
        peer.setBackground(c);
      background = c;
    }
--- 1003,1013 ----
     */
    public void setBackground(Color c)
    {
+     // If c is null, inherit from closest ancestor whose bg is set.
+     if (c == null && parent != null)
+       c = parent.getBackground();
      firePropertyChange("background", background, c);
!     if (peer != null && c != null)
        peer.setBackground(c);
      background = c;
    }
*************** public abstract class Component
*** 991,1012 ****
    {
      if (font != null)
        return font;
!     return parent == null ? null : parent.getFont();
    }
  
    /**
     * Sets the font for this component to the specified font. This is a bound
     * property.
     *
!    * @param font the new font for this component
     * @see #getFont()
     */
!   public void setFont(Font f)
    {
!     firePropertyChange("font", font, f);
      if (peer != null)
!       peer.setFont(f);
!     font = f;
    }
  
    /**
--- 1035,1066 ----
    {
      if (font != null)
        return font;
! 
!     if (parent != null)
!       return parent.getFont ();
!     else
!       return new Font ("Dialog", Font.PLAIN, 12);
    }
  
    /**
     * 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 (font == newFont)
!       return;
!     
!     Font oldFont = font;
!     font = newFont;
      if (peer != null)
!       peer.setFont(font);
!     firePropertyChange("font", oldFont, newFont);
!     invalidate();
    }
  
    /**
*************** public abstract class Component
*** 1026,1032 ****
     *
     * @return the locale for this component
     * @throws IllegalComponentStateException if it has no locale or parent
!    * @see setLocale(Locale)
     * @since 1.1
     */
    public Locale getLocale()
--- 1080,1086 ----
     *
     * @return the locale for this component
     * @throws IllegalComponentStateException if it has no locale or parent
!    * @see #setLocale(Locale)
     * @since 1.1
     */
    public Locale getLocale()
*************** public abstract class Component
*** 1043,1054 ****
     * Sets the locale for this component to the specified locale. This is a
     * bound property.
     *
!    * @param locale the new locale for this component
     */
!   public void setLocale(Locale l)
    {
!     firePropertyChange("locale", locale, l);
!     locale = l;
      // New writing/layout direction or more/less room for localized labels.
      invalidate();
    }
--- 1097,1112 ----
     * 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();
    }
*************** public abstract class Component
*** 1078,1084 ****
     */
    public Point getLocation()
    {
!     return new Point(x, y);
    }
  
    /**
--- 1136,1142 ----
     */
    public Point getLocation()
    {
!     return location ();
    }
  
    /**
*************** public abstract class Component
*** 1105,1111 ****
     */
    public Point location()
    {
!     return getLocation();
    }
  
    /**
--- 1163,1169 ----
     */
    public Point location()
    {
!     return new Point (x, y);
    }
  
    /**
*************** public abstract class Component
*** 1120,1132 ****
     */
    public void setLocation(int x, int y)
    {
!     if (this.x == x && this.y == y)
!       return;
!     invalidate();
!     this.x = x;
!     this.y = y;
!     if (peer != null)
!       peer.setBounds(x, y, width, height);
    }
  
    /**
--- 1178,1184 ----
     */
    public void setLocation(int x, int y)
    {
!     move (x, y);
    }
  
    /**
*************** public abstract class Component
*** 1140,1146 ****
     */
    public void move(int x, int y)
    {
!     setLocation(x, y);
    }
  
    /**
--- 1192,1198 ----
     */
    public void move(int x, int y)
    {
!     setBounds(x, y, this.width, this.height);
    }
  
    /**
*************** public abstract class Component
*** 1168,1174 ****
     */
    public Dimension getSize()
    {
!     return new Dimension(width, height);
    }
  
    /**
--- 1220,1226 ----
     */
    public Dimension getSize()
    {
!     return size ();
    }
  
    /**
*************** public abstract class Component
*** 1179,1185 ****
     */
    public Dimension size()
    {
!     return getSize();
    }
  
    /**
--- 1231,1237 ----
     */
    public Dimension size()
    {
!     return new Dimension (width, height);
    }
  
    /**
*************** public abstract class Component
*** 1192,1204 ****
     */
    public void setSize(int width, int height)
    {
!     if (this.width == width && this.height == height)
!       return;
!     invalidate();
!     this.width = width;
!     this.height = height;
!     if (peer != null)
!       peer.setBounds(x, y, width, height);
    }
  
    /**
--- 1244,1250 ----
     */
    public void setSize(int width, int height)
    {
!     resize (width, height);
    }
  
    /**
*************** public abstract class Component
*** 1210,1216 ****
     */
    public void resize(int width, int height)
    {
!     setSize(width, height);
    }
  
    /**
--- 1256,1262 ----
     */
    public void resize(int width, int height)
    {
!     setBounds(this.x, this.y, width, height);
    }
  
    /**
*************** public abstract class Component
*** 1224,1230 ****
     */
    public void setSize(Dimension d)
    {
!     setSize(d.width, d.height);
    }
  
    /**
--- 1270,1276 ----
     */
    public void setSize(Dimension d)
    {
!     resize (d);
    }
  
    /**
*************** public abstract class Component
*** 1236,1242 ****
     */
    public void resize(Dimension d)
    {
!     setSize(d.width, d.height);
    }
  
    /**
--- 1282,1288 ----
     */
    public void resize(Dimension d)
    {
!     resize (d.width, d.height);
    }
  
    /**
*************** public abstract class Component
*** 1251,1257 ****
     */
    public Rectangle getBounds()
    {
!     return new Rectangle(x, y, width, height);
    }
  
    /**
--- 1297,1303 ----
     */
    public Rectangle getBounds()
    {
!     return bounds ();
    }
  
    /**
*************** public abstract class Component
*** 1264,1270 ****
     */
    public Rectangle bounds()
    {
!     return getBounds();
    }
  
    /**
--- 1310,1316 ----
     */
    public Rectangle bounds()
    {
!     return new Rectangle (x, y, width, height);
    }
  
    /**
*************** public abstract class Component
*** 1284,1298 ****
     */
    public void setBounds(int x, int y, int w, int h)
    {
!     if (this.x == x && this.y == y && width == w && height == h)
!       return;
!     invalidate();
!     this.x = x;
!     this.y = y;
!     width = w;
!     height = h;
!     if (peer != null)
!       peer.setBounds(x, y, w, h);
    }
  
    /**
--- 1330,1336 ----
     */
    public void setBounds(int x, int y, int w, int h)
    {
!     reshape (x, y, w, h);
    }
  
    /**
*************** public abstract class Component
*** 1301,1313 ****
     *
     * @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
     * @deprecated use {@link #setBounds(int, int, int, int)} instead
     */
    public void reshape(int x, int y, int width, int height)
    {
!     setBounds(x, y, width, height);
    }
  
    /**
--- 1339,1406 ----
     *
     * @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 ())
!       {
!         boolean shouldRepaintParent = false;
!         boolean shouldRepaintSelf = false;
! 
!         if (parent != null)
!           {
!             Rectangle parentBounds = parent.getBounds();
!             Rectangle oldBounds = new Rectangle(parent.getX() + oldx,
!                                                 parent.getY() + oldy,
!                                                 oldwidth, oldheight);
!             Rectangle newBounds = new Rectangle(parent.getX() + x,
!                                                 parent.getY() + y,
!                                                 width, height);
!             shouldRepaintParent = parentBounds.intersects(oldBounds);
!             shouldRepaintSelf = parentBounds.intersects(newBounds);
!           }
! 
!         if (shouldRepaintParent && parent != null)
!           parent.repaint(oldx, oldy, oldwidth, oldheight);
!         if (shouldRepaintSelf)
!           repaint();
!       }
! 
!     // 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);
!       }
    }
  
    /**
*************** public abstract class Component
*** 1324,1330 ****
     */
    public void setBounds(Rectangle r)
    {
!     setBounds(r.x, r.y, r.width, r.height);
    }
  
    /**
--- 1417,1423 ----
     */
    public void setBounds(Rectangle r)
    {
!     setBounds (r.x, r.y, r.width, r.height);
    }
  
    /**
*************** public abstract class Component
*** 1555,1561 ****
     */
    public void doLayout()
    {
!     // nothing to do unless we're a container
    }
  
    /**
--- 1648,1654 ----
     */
    public void doLayout()
    {
!     layout ();
    }
  
    /**
*************** public abstract class Component
*** 1566,1572 ****
     */
    public void layout()
    {
!     doLayout();
    }
  
    /**
--- 1659,1665 ----
     */
    public void layout()
    {
!     // Nothing to do unless we're a container.
    }
  
    /**
*************** public abstract class Component
*** 1697,1702 ****
--- 1790,1798 ----
     */
    public void paint(Graphics g)
    {
+     // Paint the heavyweight peer
+     if (!isLightweight() && peer != null)
+       peer.paint(g);
    }
  
    /**
*************** public abstract class Component
*** 1708,1734 ****
     * relative to this component. Subclasses should call either
     * <code>super.update(g)</code> or <code>paint(g)</code>.
     *
!    * @param graphics the graphics context for this update
     * @see #paint(Graphics)
     * @see #repaint()
     */
    public void update(Graphics g)
    {
      paint(g);
    }
  
    /**
     * Paints this entire component, including any sub-components.
     *
!    * @param graphics the graphics context for this paint job
     * @see #paint(Graphics)
     */
    public void paintAll(Graphics g)
    {
      if (! visible)
        return;
-     if (peer != null)
-       peer.paint(g);
      paint(g);
    }
  
--- 1804,1839 ----
     * 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()
     */
    public void update(Graphics g)
    {
+     if (!isLightweight())
+       {
+         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);
    }
  
*************** public abstract class Component
*** 1784,1791 ****
     * @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 w the width of the region to repaint
!    * @param h the height of the region to repaint
     * @see #update(Graphics)
     */
    public void repaint(long tm, int x, int y, int width, int height)
--- 1889,1896 ----
     * @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)
*************** public abstract class Component
*** 1805,1811 ****
     * done in a different manner from painting. However, the implementation
     * in this class simply calls the <code>paint()</code> method.
     *
!    * @param graphics the graphics context of the print device
     * @see #paint(Graphics)
     */
    public void print(Graphics g)
--- 1910,1917 ----
     * 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)
*************** public abstract class Component
*** 1819,1825 ****
     * painting. However, the implementation in this class simply calls the
     * <code>paintAll()</code> method.
     *
!    * @param graphics the graphics context of the print device
     * @see #paintAll(Graphics)
     */
    public void printAll(Graphics g)
--- 1925,1932 ----
     * 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)
*************** public abstract class Component
*** 1837,1843 ****
     *
     * <p>The coordinate system used depends on the particular flags.
     *
!    * @param image 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
--- 1944,1950 ----
     *
     * <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
*************** public abstract class Component
*** 1851,1857 ****
     * @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#update(Image, int, int, int, int, int)
     */
    public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h)
    {
--- 1958,1964 ----
     * @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)
    {
*************** public abstract class Component
*** 1993,1999 ****
     * @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)
--- 2100,2106 ----
     * @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)
*************** public abstract class Component
*** 2011,2017 ****
     * @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)
--- 2118,2124 ----
     * @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)
*************** public abstract class Component
*** 2030,2036 ****
     * @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)
--- 2137,2143 ----
     * @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)
*************** public abstract class Component
*** 2061,2067 ****
     */
    public boolean contains(int x, int y)
    {
!     return x >= 0 && y >= 0 && x < width && y < height;
    }
  
    /**
--- 2168,2174 ----
     */
    public boolean contains(int x, int y)
    {
!     return inside (x, y);
    }
  
    /**
*************** public abstract class Component
*** 2075,2081 ****
     */
    public boolean inside(int x, int y)
    {
!     return contains(x, y);
    }
  
    /**
--- 2182,2188 ----
     */
    public boolean inside(int x, int y)
    {
!     return x >= 0 && y >= 0 && x < width && y < height;
    }
  
    /**
*************** public abstract class Component
*** 2090,2096 ****
     */
    public boolean contains(Point p)
    {
!     return contains(p.x, p.y);
    }
  
    /**
--- 2197,2203 ----
     */
    public boolean contains(Point p)
    {
!     return contains (p.x, p.y);
    }
  
    /**
*************** public abstract class Component
*** 2105,2111 ****
     */
    public Component getComponentAt(int x, int y)
    {
!     return contains(x, y) ? this : null;
    }
  
    /**
--- 2212,2218 ----
     */
    public Component getComponentAt(int x, int y)
    {
!     return locate (x, y);
    }
  
    /**
*************** public abstract class Component
*** 2120,2126 ****
     */
    public Component locate(int x, int y)
    {
!     return getComponentAt(x, y);
    }
  
    /**
--- 2227,2233 ----
     */
    public Component locate(int x, int y)
    {
!     return contains (x, y) ? this : null;
    }
  
    /**
*************** public abstract class Component
*** 2136,2153 ****
     */
    public Component getComponentAt(Point p)
    {
!     return getComponentAt(p.x, p.y);
    }
  
    /**
!    * AWT 1.0 event dispatcher.
     *
!    * @param e the event to dispatch
!    * @deprecated use {@link #dispatchEvent(AWTEvent)} instead
     */
!   public void deliverEvent(Event e)
    {
!     // XXX Add backward compatibility handling.
    }
  
    /**
--- 2243,2263 ----
     */
    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);
    }
  
    /**
*************** public abstract class Component
*** 2169,2184 ****
    }
  
    /**
!    * AWT 1.0 event dispatcher.
     *
!    * @param e the event to dispatch
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #dispatchEvent(AWTEvent)} instead
     */
!   public boolean postEvent(Event e)
    {
!     // XXX Add backward compatibility handling.
!     return false;
    }
  
    /**
--- 2279,2302 ----
    }
  
    /**
!    * 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;
    }
  
    /**
*************** public abstract class Component
*** 2192,2200 ****
     * @see #getComponentListeners()
     * @since 1.1
     */
!   public synchronized void addComponentListener(ComponentListener l)
    {
!     componentListener = AWTEventMulticaster.add(componentListener, l);
      if (componentListener != null)
        enableEvents(AWTEvent.COMPONENT_EVENT_MASK);
    }
--- 2310,2318 ----
     * @see #getComponentListeners()
     * @since 1.1
     */
!   public synchronized void addComponentListener(ComponentListener listener)
    {
!     componentListener = AWTEventMulticaster.add(componentListener, listener);
      if (componentListener != null)
        enableEvents(AWTEvent.COMPONENT_EVENT_MASK);
    }
*************** public abstract class Component
*** 2209,2217 ****
     * @see #getComponentListeners()
     * @since 1.1
     */
!   public synchronized void removeComponentListener(ComponentListener l)
    {
!     componentListener = AWTEventMulticaster.remove(componentListener, l);
    }
  
    /**
--- 2327,2335 ----
     * @see #getComponentListeners()
     * @since 1.1
     */
!   public synchronized void removeComponentListener(ComponentListener listener)
    {
!     componentListener = AWTEventMulticaster.remove(componentListener, listener);
    }
  
    /**
*************** public abstract class Component
*** 2240,2248 ****
     * @see #getFocusListeners()
     * @since 1.1
     */
!   public synchronized void addFocusListener(FocusListener l)
    {
!     focusListener = AWTEventMulticaster.add(focusListener, l);
      if (focusListener != null)
        enableEvents(AWTEvent.FOCUS_EVENT_MASK);
    }
--- 2358,2366 ----
     * @see #getFocusListeners()
     * @since 1.1
     */
!   public synchronized void addFocusListener(FocusListener listener)
    {
!     focusListener = AWTEventMulticaster.add(focusListener, listener);
      if (focusListener != null)
        enableEvents(AWTEvent.FOCUS_EVENT_MASK);
    }
*************** public abstract class Component
*** 2257,2265 ****
     * @see #getFocusListeners()
     * @since 1.1
     */
!   public synchronized void removeFocusListener(FocusListener l)
    {
!     focusListener = AWTEventMulticaster.remove(focusListener, l);
    }
  
    /**
--- 2375,2383 ----
     * @see #getFocusListeners()
     * @since 1.1
     */
!   public synchronized void removeFocusListener(FocusListener listener)
    {
!     focusListener = AWTEventMulticaster.remove(focusListener, listener);
    }
  
    /**
*************** public abstract class Component
*** 2287,2295 ****
     * @see #getHierarchyListeners()
     * @since 1.3
     */
!   public synchronized void addHierarchyListener(HierarchyListener l)
    {
!     hierarchyListener = AWTEventMulticaster.add(hierarchyListener, l);
      if (hierarchyListener != null)
        enableEvents(AWTEvent.HIERARCHY_EVENT_MASK);
    }
--- 2405,2413 ----
     * @see #getHierarchyListeners()
     * @since 1.3
     */
!   public synchronized void addHierarchyListener(HierarchyListener listener)
    {
!     hierarchyListener = AWTEventMulticaster.add(hierarchyListener, listener);
      if (hierarchyListener != null)
        enableEvents(AWTEvent.HIERARCHY_EVENT_MASK);
    }
*************** public abstract class Component
*** 2304,2312 ****
     * @see #getHierarchyListeners()
     * @since 1.3
     */
!   public synchronized void removeHierarchyListener(HierarchyListener l)
    {
!     hierarchyListener = AWTEventMulticaster.remove(hierarchyListener, l);
    }
  
    /**
--- 2422,2430 ----
     * @see #getHierarchyListeners()
     * @since 1.3
     */
!   public synchronized void removeHierarchyListener(HierarchyListener listener)
    {
!     hierarchyListener = AWTEventMulticaster.remove(hierarchyListener, listener);
    }
  
    /**
*************** public abstract class Component
*** 2336,2345 ****
     * @since 1.3
     */
    public synchronized void
!     addHierarchyBoundsListener(HierarchyBoundsListener l)
    {
      hierarchyBoundsListener =
!       AWTEventMulticaster.add(hierarchyBoundsListener, l);
      if (hierarchyBoundsListener != null)
        enableEvents(AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK);
    }
--- 2454,2463 ----
     * @since 1.3
     */
    public synchronized void
!     addHierarchyBoundsListener(HierarchyBoundsListener listener)
    {
      hierarchyBoundsListener =
!       AWTEventMulticaster.add(hierarchyBoundsListener, listener);
      if (hierarchyBoundsListener != null)
        enableEvents(AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK);
    }
*************** public abstract class Component
*** 2355,2364 ****
     * @since 1.3
     */
    public synchronized void
!     removeHierarchyBoundsListener(HierarchyBoundsListener l)
    {
      hierarchyBoundsListener =
!       AWTEventMulticaster.remove(hierarchyBoundsListener, l);
    }
  
    /**
--- 2473,2482 ----
     * @since 1.3
     */
    public synchronized void
!     removeHierarchyBoundsListener(HierarchyBoundsListener listener)
    {
      hierarchyBoundsListener =
!       AWTEventMulticaster.remove(hierarchyBoundsListener, listener);
    }
  
    /**
*************** public abstract class Component
*** 2387,2395 ****
     * @see #getKeyListeners()
     * @since 1.1
     */
!   public synchronized void addKeyListener(KeyListener l)
    {
!     keyListener = AWTEventMulticaster.add(keyListener, l);
      if (keyListener != null)
        enableEvents(AWTEvent.KEY_EVENT_MASK);
    }
--- 2505,2513 ----
     * @see #getKeyListeners()
     * @since 1.1
     */
!   public synchronized void addKeyListener(KeyListener listener)
    {
!     keyListener = AWTEventMulticaster.add(keyListener, listener);
      if (keyListener != null)
        enableEvents(AWTEvent.KEY_EVENT_MASK);
    }
*************** public abstract class Component
*** 2404,2412 ****
     * @see #getKeyListeners()
     * @since 1.1
     */
!   public synchronized void removeKeyListener(KeyListener l)
    {
!     keyListener = AWTEventMulticaster.remove(keyListener, l);
    }
  
    /**
--- 2522,2530 ----
     * @see #getKeyListeners()
     * @since 1.1
     */
!   public synchronized void removeKeyListener(KeyListener listener)
    {
!     keyListener = AWTEventMulticaster.remove(keyListener, listener);
    }
  
    /**
*************** public abstract class Component
*** 2434,2442 ****
     * @see #getMouseListeners()
     * @since 1.1
     */
!   public synchronized void addMouseListener(MouseListener l)
    {
!     mouseListener = AWTEventMulticaster.add(mouseListener, l);
      if (mouseListener != null)
        enableEvents(AWTEvent.MOUSE_EVENT_MASK);
    }
--- 2552,2560 ----
     * @see #getMouseListeners()
     * @since 1.1
     */
!   public synchronized void addMouseListener(MouseListener listener)
    {
!     mouseListener = AWTEventMulticaster.add(mouseListener, listener);
      if (mouseListener != null)
        enableEvents(AWTEvent.MOUSE_EVENT_MASK);
    }
*************** public abstract class Component
*** 2451,2459 ****
     * @see #getMouseListeners()
     * @since 1.1
     */
!   public synchronized void removeMouseListener(MouseListener l)
    {
!     mouseListener = AWTEventMulticaster.remove(mouseListener, l);
    }
  
    /**
--- 2569,2577 ----
     * @see #getMouseListeners()
     * @since 1.1
     */
!   public synchronized void removeMouseListener(MouseListener listener)
    {
!     mouseListener = AWTEventMulticaster.remove(mouseListener, listener);
    }
  
    /**
*************** public abstract class Component
*** 2481,2489 ****
     * @see #getMouseMotionListeners()
     * @since 1.1
     */
!   public synchronized void addMouseMotionListener(MouseMotionListener l)
    {
!     mouseMotionListener = AWTEventMulticaster.add(mouseMotionListener, l);
      if (mouseMotionListener != null)
        enableEvents(AWTEvent.MOUSE_EVENT_MASK);
    }
--- 2599,2607 ----
     * @see #getMouseMotionListeners()
     * @since 1.1
     */
!   public synchronized void addMouseMotionListener(MouseMotionListener listener)
    {
!     mouseMotionListener = AWTEventMulticaster.add(mouseMotionListener, listener);
      if (mouseMotionListener != null)
        enableEvents(AWTEvent.MOUSE_EVENT_MASK);
    }
*************** public abstract class Component
*** 2498,2506 ****
     * @see #getMouseMotionListeners()
     * @since 1.1
     */
!   public synchronized void removeMouseMotionListener(MouseMotionListener l)
    {
!     mouseMotionListener = AWTEventMulticaster.remove(mouseMotionListener, l);
    }
  
    /**
--- 2616,2624 ----
     * @see #getMouseMotionListeners()
     * @since 1.1
     */
!   public synchronized void removeMouseMotionListener(MouseMotionListener listener)
    {
!     mouseMotionListener = AWTEventMulticaster.remove(mouseMotionListener, listener);
    }
  
    /**
*************** public abstract class Component
*** 2530,2538 ****
     * @see #getMouseWheelListeners()
     * @since 1.4
     */
!   public synchronized void addMouseWheelListener(MouseWheelListener l)
    {
!     mouseWheelListener = AWTEventMulticaster.add(mouseWheelListener, l);
      if (mouseWheelListener != null)
        enableEvents(AWTEvent.MOUSE_WHEEL_EVENT_MASK);
    }
--- 2648,2656 ----
     * @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);
    }
*************** public abstract class Component
*** 2548,2556 ****
     * @see #getMouseWheelListeners()
     * @since 1.4
     */
!   public synchronized void removeMouseWheelListener(MouseWheelListener l)
    {
!     mouseWheelListener = AWTEventMulticaster.remove(mouseWheelListener, l);
    }
  
    /**
--- 2666,2674 ----
     * @see #getMouseWheelListeners()
     * @since 1.4
     */
!   public synchronized void removeMouseWheelListener(MouseWheelListener listener)
    {
!     mouseWheelListener = AWTEventMulticaster.remove(mouseWheelListener, listener);
    }
  
    /**
*************** public abstract class Component
*** 2580,2588 ****
     * @see #getInputMethodRequests()
     * @since 1.2
     */
!   public synchronized void addInputMethodListener(InputMethodListener l)
    {
!     inputMethodListener = AWTEventMulticaster.add(inputMethodListener, l);
      if (inputMethodListener != null)
        enableEvents(AWTEvent.INPUT_METHOD_EVENT_MASK);
    }
--- 2698,2706 ----
     * @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);
    }
*************** public abstract class Component
*** 2597,2605 ****
     * @see #getInputMethodRequests()
     * @since 1.2
     */
!   public synchronized void removeInputMethodListener(InputMethodListener l)
    {
!     inputMethodListener = AWTEventMulticaster.remove(inputMethodListener, l);
    }
  
    /**
--- 2715,2723 ----
     * @see #getInputMethodRequests()
     * @since 1.2
     */
!   public synchronized void removeInputMethodListener(InputMethodListener listener)
    {
!     inputMethodListener = AWTEventMulticaster.remove(inputMethodListener, listener);
    }
  
    /**
*************** public abstract class Component
*** 2761,2767 ****
     * Processes the specified event. In this class, this method simply
     * calls one of the more specific event handlers.
     *
!    * @param event the event to process
     * @throws NullPointerException if e is null
     * @see #processComponentEvent(ComponentEvent)
     * @see #processFocusEvent(FocusEvent)
--- 2879,2885 ----
     * 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)
*************** public abstract class Component
*** 2782,2789 ****
  
      if (e instanceof FocusEvent)
        processFocusEvent((FocusEvent) e);
-     else if (e instanceof PaintEvent)
-       processPaintEvent((PaintEvent) e);
      else if (e instanceof MouseWheelEvent)
        processMouseWheelEvent((MouseWheelEvent) e);
      else if (e instanceof MouseEvent)
--- 2900,2905 ----
*************** public abstract class Component
*** 2814,2820 ****
     * enabled. This method passes the event along to any listeners
     * that are attached.
     *
!    * @param event the <code>ComponentEvent</code> to process
     * @throws NullPointerException if e is null
     * @see ComponentListener
     * @see #addComponentListener(ComponentListener)
--- 2930,2936 ----
     * 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)
*************** public abstract class Component
*** 2847,2853 ****
     * enabled. This method passes the event along to any listeners
     * that are attached.
     *
!    * @param event the <code>FocusEvent</code> to process
     * @throws NullPointerException if e is null
     * @see FocusListener
     * @see #addFocusListener(FocusListener)
--- 2963,2969 ----
     * 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)
*************** public abstract class Component
*** 2858,2863 ****
--- 2974,2980 ----
    {
      if (focusListener == null)
        return;
+ 
      switch (e.id)
        {
          case FocusEvent.FOCUS_GAINED:
*************** public abstract class Component
*** 2874,2880 ****
     * enabled. This method passes the event along to any listeners
     * that are attached.
     *
!    * @param event the <code>KeyEvent</code> to process
     * @throws NullPointerException if e is null
     * @see KeyListener
     * @see #addKeyListener(KeyListener)
--- 2991,2997 ----
     * 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)
*************** public abstract class Component
*** 2904,2910 ****
     * enabled. This method passes the event along to any listeners
     * that are attached.
     *
!    * @param event the <code>MouseEvent</code> to process
     * @throws NullPointerException if e is null
     * @see MouseListener
     * @see #addMouseListener(MouseListener)
--- 3021,3027 ----
     * 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)
*************** public abstract class Component
*** 2933,2938 ****
--- 3050,3056 ----
            mouseListener.mouseReleased(e);
          break;
        }
+       e.consume();
    }
  
    /**
*************** public abstract class Component
*** 2940,2946 ****
     * enabled. This method passes the event along to any listeners
     * that are attached.
     *
!    * @param event the <code>MouseMotionEvent</code> to process
     * @throws NullPointerException if e is null
     * @see MouseMotionListener
     * @see #addMouseMotionListener(MouseMotionListener)
--- 3058,3064 ----
     * 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)
*************** public abstract class Component
*** 2960,2965 ****
--- 3078,3084 ----
            mouseMotionListener.mouseMoved(e);
          break;
        }
+       e.consume();
    }
  
    /**
*************** public abstract class Component
*** 2967,2973 ****
     * enabled. This method passes the event along to any listeners that are
     * attached.
     *
!    * @param event the <code>MouseWheelEvent</code> to process
     * @throws NullPointerException if e is null
     * @see MouseWheelListener
     * @see #addMouseWheelListener(MouseWheelListener)
--- 3086,3092 ----
     * 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)
*************** public abstract class Component
*** 2978,2984 ****
--- 3097,3106 ----
    {
      if (mouseWheelListener != null
          && e.id == MouseEvent.MOUSE_WHEEL)
+     {
        mouseWheelListener.mouseWheelMoved(e);
+       e.consume();
+     }	
    }
  
    /**
*************** public abstract class Component
*** 2986,2992 ****
     * enabled. This method passes the event along to any listeners that are
     * attached.
     *
!    * @param event the <code>InputMethodEvent</code> to process
     * @throws NullPointerException if e is null
     * @see InputMethodListener
     * @see #addInputMethodListener(InputMethodListener)
--- 3108,3114 ----
     * 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)
*************** public abstract class Component
*** 3013,3019 ****
     * are enabled. This method passes the event along to any listeners that are
     * attached.
     *
!    * @param event the <code>HierarchyEvent</code> to process
     * @throws NullPointerException if e is null
     * @see HierarchyListener
     * @see #addHierarchyListener(HierarchyListener)
--- 3135,3141 ----
     * 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)
*************** public abstract class Component
*** 3033,3039 ****
     * are enabled. This method passes the event along to any listeners that are
     * attached.
     *
!    * @param event the <code>HierarchyEvent</code> to process
     * @throws NullPointerException if e is null
     * @see HierarchyBoundsListener
     * @see #addHierarchyBoundsListener(HierarchyBoundsListener)
--- 3155,3161 ----
     * 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)
*************** public abstract class Component
*** 3056,3203 ****
    }
  
    /**
!    * AWT 1.0 event processor.
     *
     * @param evt the event to handle
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processEvent(AWTEvent)} instead
     */
!   public boolean handleEvent(Event evt)
    {
!     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 mouse event.
     *
     * @param evt the event to handle
     * @param x the x coordinate, ignored
     * @param y the y coordinate, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processMouseEvent(MouseEvent)} instead
     */
    public boolean mouseDown(Event evt, int x, int y)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 mouse event.
     *
     * @param evt the event to handle
     * @param x the x coordinate, ignored
     * @param y the y coordinate, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processMouseMotionEvent(MouseEvent)} instead
     */
    public boolean mouseDrag(Event evt, int x, int y)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 mouse event.
     *
     * @param evt the event to handle
     * @param x the x coordinate, ignored
     * @param y the y coordinate, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processMouseEvent(MouseEvent)} instead
     */
    public boolean mouseUp(Event evt, int x, int y)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 mouse event.
     *
     * @param evt the event to handle
     * @param x the x coordinate, ignored
     * @param y the y coordinate, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processMouseMotionEvent(MouseEvent)} instead
     */
    public boolean mouseMove(Event evt, int x, int y)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 mouse event.
     *
     * @param evt the event to handle
     * @param x the x coordinate, ignored
     * @param y the y coordinate, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processMouseEvent(MouseEvent)} instead
     */
    public boolean mouseEnter(Event evt, int x, int y)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 mouse event.
     *
     * @param evt the event to handle
     * @param x the x coordinate, ignored
     * @param y the y coordinate, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processMouseEvent(MouseEvent)} instead
     */
    public boolean mouseExit(Event evt, int x, int y)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 key press event.
     *
     * @param evt the event to handle
     * @param key the key pressed, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processKeyEvent(KeyEvent)} instead
     */
    public boolean keyDown(Event evt, int key)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 key press event.
     *
     * @param evt the event to handle
     * @param key the key pressed, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processKeyEvent(KeyEvent)} instead
     */
    public boolean keyUp(Event evt, int key)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 action event processor.
     *
     * @param evt the event to handle
     * @param what the object acted on, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated in classes which support actions, use
     *             <code>processActionEvent(ActionEvent)</code> instead
     */
    public boolean action(Event evt, Object what)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
--- 3178,3376 ----
    }
  
    /**
!    * 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;
    }
  
*************** public abstract class Component
*** 3235,3270 ****
     */
    public void removeNotify()
    {
!     if (peer != null)
!       peer.dispose();
      peer = null;
    }
  
    /**
!    * AWT 1.0 focus event.
     *
     * @param evt the event to handle
     * @param what the Object focused, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processFocusEvent(FocusEvent)} instead
     */
    public boolean gotFocus(Event evt, Object what)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
    /**
!    * AWT 1.0 focus event.
     *
     * @param evt the event to handle
     * @param what the Object focused, ignored
!    * @return false: since the method was deprecated, the return has no meaning
     * @deprecated use {@link #processFocusEvent(FocusEvent)} instead
     */
    public boolean lostFocus(Event evt, Object what)
    {
-     // XXX Add backward compatibility handling.
      return false;
    }
  
--- 3408,3451 ----
     */
    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.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;
    }
  
*************** public abstract class Component
*** 3279,3285 ****
     */
    public boolean isFocusTraversable()
    {
!     return enabled && visible && (peer == null || peer.isFocusTraversable());
    }
  
    /**
--- 3460,3466 ----
     */
    public boolean isFocusTraversable()
    {
!     return enabled && visible && (peer == null || isLightweight() || peer.isFocusTraversable());
    }
  
    /**
*************** public abstract class Component
*** 3294,3300 ****
    }
  
    /**
!    * Specify whether this component can receive focus.
     *
     * @param focusable the new focusable status
     * @since 1.4
--- 3475,3485 ----
    }
  
    /**
!    * 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 abstract class Component
*** 3303,3318 ****
    {
      firePropertyChange("focusable", this.focusable, focusable);
      this.focusable = focusable;
    }
  
    /**
!    * Sets the focus traversal keys for a given type of focus events. 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 defauts are:
     * <table>
     *   <th><td>Identifier</td><td>Meaning</td><td>Default</td></th>
     *   <tr><td>KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS</td>
--- 3488,3509 ----
    {
      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>
*************** public abstract class Component
*** 3325,3334 ****
     *     <td>Go up a traversal cycle</td><td>None</td></tr>
     * </table>
     *
!    * <p>Specifying null allows inheritance from the parent, or from the current
!    * KeyboardFocusManager default set. 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
--- 3516,3528 ----
     *     <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
*************** public abstract class Component
*** 3343,3349 ****
    public void setFocusTraversalKeys(int id, Set keystrokes)
    {
      if (keystrokes == null)
!       throw new IllegalArgumentException();
      Set sa;
      Set sb;
      String name;
--- 3537,3560 ----
    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;
*************** public abstract class Component
*** 3371,3420 ****
          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
     * @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.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;
    }
--- 3582,3646 ----
          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;
    }
*************** public abstract class Component
*** 3423,3691 ****
     * 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.UP_CYCLE_TRAVERSAL_KEYS)
!       throw new IllegalArgumentException();
      return focusTraversalKeys != null && focusTraversalKeys[id] != null;
    }
  
    /**
!    * Sets whether focus traversal keys are enabled, which consumes traversal
!    * keys and performs the focus event automatically.
     *
     * @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;
    }
  
    /**
!    * Tests whether focus traversal keys are enabled. If they are, then focus
!    * traversal keys are consumed and focus events performed automatically,
!    * without the component seeing the keystrokes.
     *
!    * @return true if focus traversal is enabled
!    * @see #setFocusTraversalKeysEnabled(boolean)
!    * @see #setFocusTraversalKeys(int, Set)
!    * @see #getFocusTraversalKeys(int)
     * @since 1.4
     */
!   public boolean getFocusTraversalKeysEnabled()
    {
      return focusTraversalKeysEnabled;
    }
  
    /**
!    * Requests that this component be given focus. 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, visible, and focusable,
!    * and the top-level Window must be able to receive focus. Thus, this
!    * request may fail, or be delayed until the window receives focus. It is
!    * recommended that <code>requestFocusInWindow</code> be used where
!    * possible to be more platform-independent.
     *
!    * @see #requestFocusInWindow()
     * @see FocusEvent
!    * @see #addFocusListener(FocusListener)
!    * @see #isFocusable()
!    * @see #isDisplayable()
!    * @see KeyboardFocusManager#clearGlobalFocusOwner()
     */
!   public void requestFocus()
    {
!     // If there's no peer then this component can't get the focus. We
!     // treat it as a silent rejection of the request.
!     if (peer != null)
!       peer.requestFocus();
    }
  
    /**
!    * Requests that this component be given focus. 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, visible, and focusable,
!    * and the top-level Window must be able to receive focus. Thus, this
!    * request may fail, or be delayed until the window receives focus. It is
!    * recommended that <code>requestFocusInWindow</code> be used where
!    * possible to be more platform-independent.
     *
!    * <p>If the return value is false, the request is guaranteed to fail. If
!    * it is true, it will likely succeed unless the action is vetoed or
!    * something in the native windowing system intervenes. The temporary flag,
!    * and thus this method in general, is not designed for public use; rather
!    * it is a hook for lightweight components to notify their container in
!    * an attempt to reduce the amount of repainting necessary.
     *
     * @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)
    {
!     // XXX Implement correctly.
!     requestFocus();
      return true;
    }
  
    /**
!    * Requests that this component be given focus, if it resides in the
!    * top-level window which already has focus. 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, visible, and focusable,
!    * and the top-level Window must be focused.
     *
!    * <p>If the return value is false, the request is guaranteed to fail. If
!    * it is true, it will likely succeed unless the action is vetoed or
!    * something in the native windowing system intervenes. The temporary flag,
!    * and thus this method in general, is not designed for public use; rather
!    * it is a hook for lightweight components to notify their container in
!    * an attempt to reduce the amount of repainting necessary.
     *
     * @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()
    {
!     // XXX Implement correctly.
!     requestFocus();
!     return true;
    }
  
    /**
!    * Requests that this component be given focus, if it resides in the
!    * top-level window which already has focus. 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, visible, and focusable,
!    * and the top-level Window must be focused.
     *
!    * <p>If the return value is false, the request is guaranteed to fail. If
!    * it is true, it will likely succeed unless the action is vetoed or
!    * something in the native windowing system intervenes. The temporary flag,
!    * and thus this method in general, is not designed for public use; rather
!    * it is a hook for lightweight components to notify their container in
!    * an attempt to reduce the amount of repainting necessary.
     *
     * @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)
    {
!     // XXX Implement correctly.
!     requestFocus();
!     return true;
    }
  
    /**
!    * 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()
    {
!     Component next;
!     if (parent == null)
!       next = findNextFocusComponent(null);
!     else
!       next = parent.findNextFocusComponent(this);
!     if (next != null && next != this)
!       next.requestFocus();
    }
  
    /**
!    * 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()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
  
    /**
!    * 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.
     *
!    * @deprecated use {@link #transferFocus()} instead
     */
!   public void nextFocus()
    {
!     transferFocus();
    }
  
    /**
!    * 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()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
  
    /**
!    * 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()
     * @since 1.4
     */
!   public void transferFocusUpCycle()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
  
    /**
!    * 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()
    {
!     return isFocusOwner();
    }
  
    /**
--- 3649,4108 ----
     * 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 = 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,
!                                                          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;
    }
  
    /**
*************** public abstract class Component
*** 3696,3710 ****
     */
    public boolean isFocusOwner()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
  
    /**
     * Adds the specified popup menu to this component.
     *
!    * @param menu the popup menu to be added
     * @see #remove(MenuComponent)
     * @since 1.1
     */
    public synchronized void add(PopupMenu popup)
--- 4113,4128 ----
     */
    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)
*************** public abstract class Component
*** 3712,3723 ****
      if (popups == null)
        popups = new Vector();
      popups.add(popup);
    }
  
    /**
     * Removes the specified popup menu from this component.
     *
!    * @param menu the popup menu to remove
     * @see #add(PopupMenu)
     * @since 1.1
     */
--- 4130,4147 ----
      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 abstract class Component
*** 3739,3746 ****
      String name = getName();
      if (name != null)
        param.append(name).append(",");
!     param.append(width).append("x").append(height).append("+").append(x)
!       .append("+").append(y);
      if (! isValid())
        param.append(",invalid");
      if (! isVisible())
--- 4163,4170 ----
      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())
*************** public abstract class Component
*** 3778,3784 ****
    /**
     * Prints a listing of this component to the specified print stream.
     *
!    * @param stream the <code>PrintStream</code> to print to
     */
    public void list(PrintStream out)
    {
--- 4202,4208 ----
    /**
     * 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)
    {
*************** public abstract class Component
*** 3789,3795 ****
     * Prints a listing of this component to the specified print stream,
     * starting at the specified indentation point.
     *
!    * @param stream the <code>PrintStream</code> to print to
     * @param indent the indentation point
     */
    public void list(PrintStream out, int indent)
--- 4213,4219 ----
     * 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)
*************** public abstract class Component
*** 3802,3808 ****
    /**
     * Prints a listing of this component to the specified print writer.
     *
!    * @param writer the <code>PrintWrinter</code> to print to
     * @since 1.1
     */
    public void list(PrintWriter out)
--- 4226,4232 ----
    /**
     * 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)
*************** public abstract class Component
*** 3814,3820 ****
     * Prints a listing of this component to the specified print writer,
     * starting at the specified indentation point.
     *
!    * @param writer the <code>PrintWriter</code> to print to
     * @param indent the indentation point
     * @since 1.1
     */
--- 4238,4244 ----
     * 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
     */
*************** p   * <li>the set of backward traversal 
*** 4108,4122 ****
    }
  
    /**
!    * Implementation of dispatchEvent. Allows trusted package classes to
!    * dispatch additional events first.
     *
     * @param e the event to dispatch
     */
!   void dispatchEventImpl(AWTEvent e)
    {
      if (eventTypeEnabled (e.id))
!       processEvent(e);
    }
  
    /**
--- 4532,4769 ----
    }
  
    /**
!    * 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;
!               }
!           }
!         processEvent (e);
!       }
    }
  
    /**
*************** p   * <li>the set of backward traversal 
*** 4147,4152 ****
--- 4794,4801 ----
        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);
*************** p   * <li>the set of backward traversal 
*** 4220,4264 ****
    }
  
    /**
-    * Does the work for a paint event.
-    *
-    * @param event the event to process
-    */
-   private void processPaintEvent(PaintEvent event)
-   {
-     // Can't do graphics without peer
-     if (peer == null)
-       return;
- 
-     Graphics gfx = getGraphics();
-     try
-       {
- 	Shape clip = event.getUpdateRect();
- 	gfx.setClip(clip);
- 
- 	switch (event.id)
- 	  {
- 	  case PaintEvent.PAINT:
- 	    paint(gfx);
- 	    break;
- 	  case PaintEvent.UPDATE:
- 	    update(gfx);
- 	    break;
- 	  default:
- 	    throw new IllegalArgumentException("unknown paint event");
- 	  }
-       }
-     finally
-       {
- 	gfx.dispose();
-       }
-   }
- 
-   /**
     * 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.
     *
     * @param child the component making the request
     * @return the next component to focus on
     */
--- 4869,4880 ----
    }
  
    /**
     * 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
     */
*************** p   * <li>the set of backward traversal 
*** 4333,4339 ****
    /**
     * This class provides accessibility support for subclasses of container.
     *
!    * @author Eric Blake <ebb9@email.byu.edu>
     * @since 1.3
     * @status updated to 1.4
     */
--- 4949,4955 ----
    /**
     * This class provides accessibility support for subclasses of container.
     *
!    * @author Eric Blake (ebb9@email.byu.edu)
     * @since 1.3
     * @status updated to 1.4
     */
*************** p   * <li>the set of backward traversal 
*** 4819,4841 ****
       * 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();
      }
  
      /**
--- 5435,5457 ----
       * 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 ();
      }
  
      /**
*************** p   * <li>the set of backward traversal 
*** 4861,4867 ****
      /**
       * Converts component changes into property changes.
       *
!      * @author Eric Blake <ebb9@email.byu.edu>
       * @since 1.3
       * @status updated to 1.4
       */
--- 5477,5483 ----
      /**
       * Converts component changes into property changes.
       *
!      * @author Eric Blake (ebb9@email.byu.edu)
       * @since 1.3
       * @status updated to 1.4
       */
*************** p   * <li>the set of backward traversal 
*** 4918,4924 ****
      /**
       * Converts focus changes into property changes.
       *
!      * @author Eric Blake <ebb9@email.byu.edu>
       * @since 1.3
       * @status updated to 1.4
       */
--- 5534,5540 ----
      /**
       * Converts focus changes into property changes.
       *
!      * @author Eric Blake (ebb9@email.byu.edu)
       * @since 1.3
       * @status updated to 1.4
       */
*************** p   * <li>the set of backward traversal 
*** 4958,4964 ****
    /**
     * This class provides support for blitting offscreen surfaces.
     *
!    * @author Eric Blake <ebb9@email.byu.edu>
     * @since 1.4
     * @XXX Shell class, to allow compilation. This needs documentation and
     * correct implementation.
--- 5574,5580 ----
    /**
     * This class provides support for blitting offscreen surfaces.
     *
!    * @author Eric Blake (ebb9@email.byu.edu)
     * @since 1.4
     * @XXX Shell class, to allow compilation. This needs documentation and
     * correct implementation.
*************** p   * <li>the set of backward traversal 
*** 4994,5000 ****
     * This class provides support for flipping component buffers. It is only
     * designed for use by Canvas and Window.
     *
!    * @author Eric Blake <ebb9@email.byu.edu>
     * @since 1.4
     * @XXX Shell class, to allow compilation. This needs documentation and
     * correct implementation.
--- 5610,5616 ----
     * This class provides support for flipping component buffers. It is only
     * designed for use by Canvas and Window.
     *
!    * @author Eric Blake (ebb9@email.byu.edu)
     * @since 1.4
     * @XXX Shell class, to allow compilation. This needs documentation and
     * correct implementation.
diff -Nrcpad gcc-3.4.3/libjava/java/awt/ComponentOrientation.java gcc-4.0.0/libjava/java/awt/ComponentOrientation.java
*** gcc-3.4.3/libjava/java/awt/ComponentOrientation.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/ComponentOrientation.java	Thu Feb 17 07:48:23 2005
*************** import java.util.ResourceBundle;
*** 67,73 ****
   * 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
   */
--- 67,73 ----
   * 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 
*** 171,183 ****
    }
  
    /**
!    * Gets an orientation from a resource bundle. This tries the following:<ol>
     * <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>
!    * <ol>
     *
     * @param bdl the bundle to use
     * @return the orientation
--- 171,185 ----
    }
  
    /**
!    * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Composite.java gcc-4.0.0/libjava/java/awt/Composite.java
*** gcc-3.4.3/libjava/java/awt/Composite.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/Composite.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* Composite.java -- graphics formed from composite layers
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Composite.java -- graphics formed from composite layers
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.image.ColorModel;
*** 50,56 ****
   * 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)
--- 50,56 ----
   * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/awt/CompositeContext.java gcc-4.0.0/libjava/java/awt/CompositeContext.java
*** gcc-3.4.3/libjava/java/awt/CompositeContext.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/java/awt/CompositeContext.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* Composite.java -- the context for compositing graphics layers
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Composite.java -- the context for compositing graphics layers
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.image.WritableRaster;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Container.java gcc-4.0.0/libjava/java/awt/Container.java
*** gcc-3.4.3/libjava/java/awt/Container.java	Thu Jan  8 03:52:52 2004
--- gcc-4.0.0/libjava/java/awt/Container.java	Mon Feb 21 16:12:11 2005
***************
*** 1,5 ****
  /* Container.java -- parent container class in AWT
!    Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,57 ****
  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.AWTEventListener;
  import java.awt.event.ContainerEvent;
  import java.awt.event.ContainerListener;
- import java.awt.event.MouseEvent;
  import java.awt.event.KeyEvent;
  import java.awt.peer.ContainerPeer;
  import java.awt.peer.LightweightPeer;
  import java.beans.PropertyChangeListener;
  import java.beans.PropertyChangeSupport;
  import java.io.PrintStream;
  import java.io.PrintWriter;
  import java.io.Serializable;
  import java.util.EventListener;
  import java.util.Set;
  import javax.accessibility.Accessible;
  
  /**
   * A generic window toolkit object that acts as a container for other objects.
--- 35,65 ----
  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.ContainerEvent;
  import java.awt.event.ContainerListener;
  import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
  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 javax.swing.SwingUtilities;
  
  /**
   * A generic window toolkit object that acts as a container for other objects.
*************** import javax.accessibility.Accessible;
*** 59,65 ****
   * list or bottom of the stacking order.
   *
   * @author original author unknown
!  * @author Eric Blake <ebb9@email.byu.edu>
   *
   * @since 1.0
   *
--- 67,73 ----
   * list or bottom of the stacking order.
   *
   * @author original author unknown
!  * @author Eric Blake (ebb9@email.byu.edu)
   *
   * @since 1.0
   *
*************** public class Container extends Component
*** 92,97 ****
--- 100,120 ----
    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 class Container extends Component
*** 106,112 ****
     */
    public int getComponentCount()
    {
!     return ncomponents;
    }
  
    /**
--- 129,135 ----
     */
    public int getComponentCount()
    {
!     return countComponents ();
    }
  
    /**
*************** public class Container extends Component
*** 118,130 ****
     */
    public int countComponents()
    {
!     return getComponentCount();
    }
  
    /**
     * Returns the component at the specified index.
     *
!    * @param index The index of the component to retrieve.
     *
     * @return The requested component.
     *
--- 141,153 ----
     */
    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.
     *
*************** public class Container extends Component
*** 186,195 ****
     */
    public Insets getInsets()
    {
!     if (peer == null)
!       return new Insets(0, 0, 0, 0);
!     
!     return ((ContainerPeer) peer).getInsets();
    }
  
    /**
--- 209,215 ----
     */
    public Insets getInsets()
    {
!     return insets ();
    }
  
    /**
*************** public class Container extends Component
*** 201,214 ****
     */
    public Insets insets()
    {
!     return getInsets();
    }
  
    /**
     * Adds the specified component to this container at the end of the
     * component list.
     *
!    * @param component The component to add to the container.
     *
     * @return The same component that was added.
     */
--- 221,237 ----
     */
    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 class Container extends Component
*** 224,230 ****
     * <code>add(Component, Object)</code>.
     *
     * @param name The name of the component to be added.
!    * @param component The component to be added.
     *
     * @return The same component that was added.
     *
--- 247,253 ----
     * <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.
     *
*************** public class Container extends Component
*** 240,246 ****
     * Adds the specified component to this container at the specified index
     * in the component list.
     *
!    * @param component 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.
     *
--- 263,269 ----
     * 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.
     *
*************** public class Container extends Component
*** 259,265 ****
     * component list.  The layout manager will use the specified constraints
     * when laying out this component.
     *
!    * @param component The component to be added to this container.
     * @param constraints The layout constraints for this component.
     */
    public void add(Component comp, Object constraints)
--- 282,288 ----
     * 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)
*************** public class Container extends Component
*** 272,278 ****
     * in the component list.  The layout manager will use the specified
     * constraints when layout out this component.
     *
!    * @param component 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.
--- 295,301 ----
     * 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.
*************** public class Container extends Component
*** 291,297 ****
     * method.  Any subclass doing this must call the superclass version of
     * this method in order to ensure proper functioning of the container.
     *
!    * @param component 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
--- 314,320 ----
     * 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
*************** public class Container extends Component
*** 317,324 ****
          comp.parent = this;
          if (peer != null)
            {
-             comp.addNotify();
-             
              if (comp.isLightweight ())
  	      {
  		enableEvents (comp.eventMask);
--- 340,345 ----
*************** public class Container extends Component
*** 366,376 ****
                layoutMgr.addLayoutComponent(null, comp);
            }
  
!         // Post event to notify of adding the container.
!         ContainerEvent ce = new ContainerEvent(this,
!                                                ContainerEvent.COMPONENT_ADDED,
!                                                comp);
!         getToolkit().getSystemEventQueue().postEvent(ce);
        }
    }
  
--- 387,400 ----
                layoutMgr.addLayoutComponent(null, comp);
            }
  
!         if (isShowing ())
!           {
!             // Post event to notify of adding the component.
!             ContainerEvent ce = new ContainerEvent(this,
!                                                    ContainerEvent.COMPONENT_ADDED,
!                                                    comp);
!             getToolkit().getSystemEventQueue().postEvent(ce);
!           }
        }
    }
  
*************** public class Container extends Component
*** 396,406 ****
          if (layoutMgr != null)
            layoutMgr.removeLayoutComponent(r);
  
!         // Post event to notify of adding the container.
!         ContainerEvent ce = new ContainerEvent(this,
!                                                ContainerEvent.COMPONENT_REMOVED,
!                                                r);
!         getToolkit().getSystemEventQueue().postEvent(ce);
        }
    }
  
--- 420,435 ----
          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);
!           }
        }
    }
  
*************** public class Container extends Component
*** 463,470 ****
     */
    public void doLayout()
    {
!     if (layoutMgr != null)
!       layoutMgr.layoutContainer(this);
    }
  
    /**
--- 492,498 ----
     */
    public void doLayout()
    {
!     layout ();
    }
  
    /**
*************** public class Container extends Component
*** 474,480 ****
     */
    public void layout()
    {
!     doLayout();
    }
  
    /**
--- 502,509 ----
     */
    public void layout()
    {
!     if (layoutMgr != null)
!       layoutMgr.layoutContainer (this);
    }
  
    /**
*************** public class Container extends Component
*** 501,506 ****
--- 530,549 ----
    }
  
    /**
+    * Recursively invalidates the container tree.
+    */
+   void invalidateTree()
+   {
+     for (int i = 0; i < ncomponents; i++)
+       {
+         Component comp = component[i];
+         comp.invalidate();
+         if (comp instanceof Container)
+           ((Container) comp).invalidateTree();
+       }
+   }
+ 
+   /**
     * Recursively validates the container tree, recomputing any invalid
     * layouts.
     */
*************** public class Container extends Component
*** 516,525 ****
          cPeer.beginValidate();
        }
  
-     doLayout();
      for (int i = 0; i < ncomponents; ++i)
        {
          Component comp = component[i];
          if (! comp.isValid())
            {
              if (comp instanceof Container)
--- 559,577 ----
          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)
*************** public class Container extends Component
*** 534,541 ****
        }
  
      /* children will call invalidate() when they are layed out. It
!        is therefore imporant that valid is not set to true
!        before after the children has been layed out. */
      valid = true;
  
      if (cPeer != null)
--- 586,593 ----
        }
  
      /* 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)
*************** public class Container extends Component
*** 545,551 ****
    public void setFont(Font f)
    {
      super.setFont(f);
!     // FIXME, should invalidate all children with font == null
    }
  
    /**
--- 597,606 ----
    public void setFont(Font f)
    {
      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();
    }
  
    /**
*************** public class Container extends Component
*** 555,561 ****
     */
    public Dimension getPreferredSize()
    {
!       return preferredSize();
    }
  
    /**
--- 610,616 ----
     */
    public Dimension getPreferredSize()
    {
!     return preferredSize ();
    }
  
    /**
*************** public class Container extends Component
*** 567,576 ****
     */
    public Dimension preferredSize()
    {
!       if (layoutMgr != null)
! 	  return layoutMgr.preferredLayoutSize(this);
!       else
! 	  return super.preferredSize();
    }
  
    /**
--- 622,631 ----
     */
    public Dimension preferredSize()
    {
!     if (layoutMgr != null)
!       return layoutMgr.preferredLayoutSize (this);
!     else
!       return super.preferredSize ();
    }
  
    /**
*************** public class Container extends Component
*** 580,586 ****
     */
    public Dimension getMinimumSize()
    {
!       return minimumSize();
    }
  
    /**
--- 635,641 ----
     */
    public Dimension getMinimumSize()
    {
!     return minimumSize ();
    }
  
    /**
*************** public class Container extends Component
*** 592,601 ****
     */
    public Dimension minimumSize()
    {
!       if (layoutMgr != null)
! 	  return layoutMgr.minimumLayoutSize(this);
!       else
! 	  return super.minimumSize();
    }
  
    /**
--- 647,656 ----
     */
    public Dimension minimumSize()
    {
!     if (layoutMgr != null)
!       return layoutMgr.minimumLayoutSize (this);
!     else
!       return super.minimumSize ();
    }
  
    /**
*************** public class Container extends Component
*** 657,670 ****
     * a superclass method so that lightweight components are properly
     * drawn.
     *
!    * @param graphics The graphics context for this paint job.
     */
    public void paint(Graphics g)
    {
      if (!isShowing())
        return;
      super.paint(g);
!     visitChildren(g, GfxPaintVisitor.INSTANCE, true);
    }
  
    /**
--- 712,728 ----
     * 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;
+     // Paint self first.
      super.paint(g);
!     // Visit heavyweights as well, in case they were
!     // erased when we cleared the background for this container.
!     visitChildren(g, GfxPaintVisitor.INSTANCE, false);
    }
  
    /**
*************** public class Container extends Component
*** 674,688 ****
     * a superclass method so that lightweight components are properly
     * drawn.
     *
!    * @param graphics The graphics context for this update.
     */
    public void update(Graphics g)
    {
-     Rectangle clip = g.getClipBounds();
-     if (clip == null)
-       g.clearRect(0, 0, width, height);
-     else
-       g.clearRect(clip.x, clip.y, clip.width, clip.height);
      super.update(g);
    }
  
--- 732,741 ----
     * a superclass method so that lightweight components are properly
     * drawn.
     *
!    * @param g The graphics context for this update.
     */
    public void update(Graphics g)
    {
      super.update(g);
    }
  
*************** public class Container extends Component
*** 693,699 ****
     * a superclass method so that lightweight components are properly
     * drawn.
     *
!    * @param graphics The graphics context for this print job.
     */
    public void print(Graphics g)
    {
--- 746,752 ----
     * a superclass method so that lightweight components are properly
     * drawn.
     *
!    * @param g The graphics context for this print job.
     */
    public void print(Graphics g)
    {
*************** public class Container extends Component
*** 704,710 ****
    /**
     * Paints all of the components in this container.
     *
!    * @param graphics The graphics context for this paint job.
     */
    public void paintComponents(Graphics g)
    {
--- 757,763 ----
    /**
     * Paints all of the components in this container.
     *
!    * @param g The graphics context for this paint job.
     */
    public void paintComponents(Graphics g)
    {
*************** public class Container extends Component
*** 715,721 ****
    /**
     * Prints all of the components in this container.
     *
!    * @param graphics The graphics context for this print job.
     */
    public void printComponents(Graphics g)
    {
--- 768,774 ----
    /**
     * Prints all of the components in this container.
     *
!    * @param g The graphics context for this print job.
     */
    public void printComponents(Graphics g)
    {
*************** public class Container extends Component
*** 729,737 ****
     *
     * @param listener The listener to add.
     */
!   public synchronized void addContainerListener(ContainerListener l)
    {
!     containerListener = AWTEventMulticaster.add(containerListener, l);
    }
  
    /**
--- 782,790 ----
     *
     * @param listener The listener to add.
     */
!   public synchronized void addContainerListener(ContainerListener listener)
    {
!     containerListener = AWTEventMulticaster.add(containerListener, listener);
    }
  
    /**
*************** public class Container extends Component
*** 740,748 ****
     *
     * @param listener The listener to remove.
     */
!   public synchronized void removeContainerListener(ContainerListener l)
    {
!     containerListener = AWTEventMulticaster.remove(containerListener, l);
    }
  
    /**
--- 793,801 ----
     *
     * @param listener The listener to remove.
     */
!   public synchronized void removeContainerListener(ContainerListener listener)
    {
!     containerListener = AWTEventMulticaster.remove(containerListener, listener);
    }
  
    /**
*************** public class Container extends Component
*** 778,784 ****
     * <code>ContainerEvent</code>, otherwise it calls the superclass
     * method.
     *
!    * @param event The event to be processed.
     */
    protected void processEvent(AWTEvent e)
    {
--- 831,837 ----
     * <code>ContainerEvent</code>, otherwise it calls the superclass
     * method.
     *
!    * @param e The event to be processed.
     */
    protected void processEvent(AWTEvent e)
    {
*************** public class Container extends Component
*** 792,798 ****
     * Called when a container event occurs if container events are enabled.
     * This method calls any registered listeners.
     *
!    * @param event The event that occurred.
     */
    protected void processContainerEvent(ContainerEvent e)
    {
--- 845,851 ----
     * 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)
    {
*************** public class Container extends Component
*** 813,824 ****
    /**
     * AWT 1.0 event processor.
     *
!    * @param event The event that occurred.
     *
     * @deprecated use {@link #dispatchEvent(AWTEvent)} instead
     */
    public void deliverEvent(Event e)
    {
    }
  
    /**
--- 866,887 ----
    /**
     * 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);
+           }
+       }
    }
  
    /**
*************** public class Container extends Component
*** 837,859 ****
     */
    public Component getComponentAt(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;
!       }
    }
  
    /**
--- 900,906 ----
     */
    public Component getComponentAt(int x, int y)
    {
!     return locate (x, y);
    }
  
    /**
*************** public class Container extends Component
*** 864,870 ****
     * unless the point does not exist within this container, in which
     * case <code>null</code> is returned.
     *
!    * @param point The point to return the component at.
     *
     * @return The component containing the specified point, or <code>null</code>
     * if there is no such point.
--- 911,918 ----
     * 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.
*************** public class Container extends Component
*** 873,879 ****
     */
    public Component locate(int x, int y)
    {
!     return getComponentAt(x, y);
    }
  
    /**
--- 921,943 ----
     */
    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;
!       }
    }
  
    /**
*************** public class Container extends Component
*** 884,896 ****
     * unless the point does not exist within this container, in which
     * case <code>null</code> is returned.
     *
!    * @param point 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)
--- 948,960 ----
     * 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)
*************** public class Container extends Component
*** 960,966 ****
     * Tests whether or not the specified component is contained within
     * this components subtree.
     *
!    * @param component The component to test.
     *
     * @return <code>true</code> if this container is an ancestor of the
     * specified component, <code>false</code> otherwise.
--- 1024,1030 ----
     * 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 class Container extends Component
*** 988,1005 ****
     */
    protected String paramString()
    {
!     String param = super.paramString();
!     if (layoutMgr != null)
!       param = param + "," + layoutMgr.getClass().getName();
  
!     return param;
    }
  
    /**
     * Writes a listing of this container to the specified stream starting
     * at the specified indentation point.
     *
!    * @param stream The <code>PrintStream</code> to write to.
     * @param indent The indentation point.
     */
    public void list(PrintStream out, int indent)
--- 1052,1072 ----
     */
    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)
*************** public class Container extends Component
*** 1016,1022 ****
     * Writes a listing of this container to the specified stream starting
     * at the specified indentation point.
     *
!    * @param stream The <code>PrintWriter</code> to write to.
     * @param indent The indentation point.
     */
    public void list(PrintWriter out, int indent)
--- 1083,1089 ----
     * 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)
*************** public class Container extends Component
*** 1054,1062 ****
        throw new IllegalArgumentException ();
  
      if (keystrokes == null)
!       throw new IllegalArgumentException ();
  
!     throw new Error ("not implemented");
    }
    
    /**
--- 1121,1209 ----
        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[3];
! 
!     keystrokes = Collections.unmodifiableSet (new HashSet (keystrokes));
!     firePropertyChange (name, focusTraversalKeys[id], keystrokes);
! 
!     focusTraversalKeys[id] = keystrokes;
    }
    
    /**
*************** public class Container extends Component
*** 1071,1077 ****
     *
     * @since 1.4
     */
!   public Set getFocusTraversalKeys(int id)
    {
      if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
          id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
--- 1218,1224 ----
     *
     * @since 1.4
     */
!   public Set getFocusTraversalKeys (int id)
    {
      if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
          id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
*************** public class Container extends Component
*** 1079,1087 ****
          id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS)
        throw new IllegalArgumentException ();
  
!     return null;
    }
!   
    /**
     * Returns whether the Set of focus traversal keys for the given focus
     * traversal operation has been explicitly defined for this Container.
--- 1226,1243 ----
          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.
*************** public class Container extends Component
*** 1096,1102 ****
     *
     * @since 1.4
     */
!   public boolean areFocusTraversalKeysSet(int id)
    {
      if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
          id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
--- 1252,1258 ----
     *
     * @since 1.4
     */
!   public boolean areFocusTraversalKeysSet (int id)
    {
      if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS &&
          id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS &&
*************** public class Container extends Component
*** 1104,1146 ****
          id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS)
        throw new IllegalArgumentException ();
  
!     return false;
    }
!   
!   public boolean isFocusCycleRoot(Container c)
    {
      return false;
    }
!   
!   public void transferFocusBackward()
!   {
!   }
!   
!   public void setFocusTraversalPolicy(FocusTraversalPolicy policy)
    {
    }
!   
!   public FocusTraversalPolicy getFocusTraversalPolicy()
    {
!     return null;
    }
!   
!   public boolean isFocusTraversalPolicySet()
    {
!     return false;
    }
!   
!   public void setFocusCycleRoot(boolean focusCycleRoot)
    {
    }
!   
!   public boolean isFocusCycleRoot()
    {
!     return false;
    }
!   
!   public void transferFocusDownCycle()
    {
    }
  
    /**
--- 1260,1407 ----
          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.
!    *
!    * @return 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);
    }
  
    /**
*************** public class Container extends Component
*** 1204,1211 ****
          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);
--- 1465,1476 ----
          for (int i = ncomponents - 1; i >= 0; --i)
            {
              Component comp = component[i];
+             // If we're visiting heavyweights as well,
+             // don't recurse into Containers here. This avoids
+             // painting the same nested child multiple times.
              boolean applicable = comp.isVisible()
!               && (comp.isLightweight()
!                   || !lightweightOnly && ! (comp instanceof Container));
  
              if (applicable)
                visitChild(gfx, visitor, comp);
*************** public class Container extends Component
*** 1233,1238 ****
--- 1498,1504 ----
      Rectangle oldClip = gfx.getClipBounds();
      if (oldClip == null)
        oldClip = bounds;
+ 
      Rectangle clip = oldClip.intersection(bounds);
  
      if (clip.isEmpty()) return;
*************** public class Container extends Component
*** 1259,1268 ****
    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
--- 1525,1535 ----
    void dispatchEventImpl(AWTEvent e)
    {
      // Give lightweight dispatcher a chance to handle it.
!     if (eventTypeEnabled (e.id)
!         && dispatcher != null 
          && dispatcher.handleEvent (e))
        return;
!     
      if ((e.id <= ContainerEvent.CONTAINER_LAST
               && e.id >= ContainerEvent.CONTAINER_FIRST)
          && (containerListener != null
*************** public class Container extends Component
*** 1336,1346 ****
  
                  // 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);
!                     dispatcher.enableEvents (component[i].eventMask);
                    }	
  	  
  
--- 1603,1612 ----
  
                  // If we're not lightweight, and we just got a lightweight
                  // child, we need a lightweight dispatcher to feed it events.
!                 if (! this.isLightweight()) 
                    {
!                     if (dispatcher == null)
!                       dispatcher = new LightweightDispatcher (this);
                    }	
  	  
  
*************** public class Container extends Component
*** 1352,1357 ****
--- 1618,1678 ----
        }
    }
  
+   /**
+    * 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
*************** public class Container extends Component
*** 1365,1396 ****
  
    static class GfxPaintVisitor extends GfxVisitor
    {
-     public void visit(Component c, Graphics gfx) { c.paint(gfx); }
      public static final GfxVisitor INSTANCE = new GfxPaintVisitor();
    }
  
    static class GfxPrintVisitor extends GfxVisitor
    {
-     public void visit(Component c, Graphics gfx) { c.print(gfx); }
      public static final GfxVisitor INSTANCE = new GfxPrintVisitor();
    }
  
    static class GfxPaintAllVisitor extends GfxVisitor
    {
-     public void visit(Component c, Graphics gfx) { c.paintAll(gfx); }
      public static final GfxVisitor INSTANCE = new GfxPaintAllVisitor();
    }
  
    static class GfxPrintAllVisitor extends GfxVisitor
    {
-     public void visit(Component c, Graphics gfx) { c.printAll(gfx); }
      public static final GfxVisitor INSTANCE = new GfxPrintAllVisitor();
    }
  
    /**
     * This class provides accessibility support for subclasses of container.
     *
!    * @author Eric Blake <ebb9@email.byu.edu>
     *
     * @since 1.3
     */
--- 1686,1733 ----
  
    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
     */
*************** public class Container extends Component
*** 1479,1485 ****
       * 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
       */
--- 1816,1822 ----
       * 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
       */
*************** public class Container extends Component
*** 1516,1522 ****
            (ACCESSIBLE_CHILD_PROPERTY, e.getChild(), null);
        }
      } // class AccessibleContainerHandler
!   } // class AccessibleAWTPanel
  } // class Container
  
  /**
--- 1853,1859 ----
            (ACCESSIBLE_CHILD_PROPERTY, e.getChild(), null);
        }
      } // class AccessibleContainerHandler
!   } // class AccessibleAWTContainer
  } // class Container
  
  /**
*************** class LightweightDispatcher implements S
*** 1530,1651 ****
  {
    private static final long serialVersionUID = 5184291520170872969L;
    private Container nativeContainer;
-   private Component focus;
    private Cursor nativeCursor;
    private long eventMask;
    
    private transient Component mouseEventTarget;
    
    LightweightDispatcher(Container c)
    {
      nativeContainer = c;
    }
  
!   void dispose()
!   {
!   }
! 
!   void enableEvents(long l)
!   {
!     eventMask |= l;
!   }
! 
!   void mouseExit (MouseEvent me, int x, int y)
!   {
!   }
! 
!   void acquireComponentForMouseEvent (MouseEvent me)
    {
      int x = me.getX ();
      int y = me.getY ();
  
!     Component candidate = mouseEventTarget;
! 
!     boolean candidate_is_container_with_children = 
! 	    ((candidate != null)
! 	     && (candidate instanceof Container)
! 	     && (((Container)candidate).getComponentCount () > 0));
! 
!     boolean candidate_does_not_contain_point =
! 	    ((candidate != null)
! 	     && (! candidate.contains (x - candidate.getX (),
!                                  y - candidate.getY ())));
! 
!     if (candidate == null
!         || candidate_is_container_with_children
!         || candidate_does_not_contain_point)
!   {
!         // Try to reacquire.
!         candidate = nativeContainer.findComponentAt (x, y);
!   }
  
!     if (mouseEventTarget != null
!         && mouseEventTarget != candidate)
!   {
!         int nx = x - mouseEventTarget.getX ();
!         int ny = y - mouseEventTarget.getY ();
!         MouseEvent exited = new MouseEvent (mouseEventTarget, 
!                                             MouseEvent.MOUSE_EXITED,
!                                             me.getWhen (), 
!                                             me.getModifiers (), 
!                                             nx, ny,
!                                             me.getClickCount (),
!                                             me.isPopupTrigger (),
!                                             me.getButton ());
!         mouseEventTarget.dispatchEvent (exited); 
!         mouseEventTarget = null;
!   }
  
      if (candidate != null)
! 	    {
!         // Possibly set new state.
          if (candidate.isLightweight() 
              && candidate != nativeContainer
!             && candidate != mouseEventTarget)
!   {
! 			
!             mouseEventTarget = candidate;
! 			
!             int nx = x - mouseEventTarget.getX ();
!             int ny = y - mouseEventTarget.getY ();
! 			
!             // If acquired, enter it.
!             MouseEvent entered = new MouseEvent (mouseEventTarget, 
                                                   MouseEvent.MOUSE_ENTERED,
                                                   me.getWhen (), 
!                                                  me.getModifiers (), 
!                                                  nx, ny,
                                                   me.getClickCount (),
                                                   me.isPopupTrigger (),
                                                   me.getButton ());
!             mouseEventTarget.dispatchEvent (entered);
            }
! 	    }
    }
  
!   boolean handleEvent (AWTEvent e)
    {
-     if ((eventMask & e.getID ()) == 0)
- 	    return false;
- 
      if (e instanceof MouseEvent)
!   {
          MouseEvent me = (MouseEvent) e;
-         acquireComponentForMouseEvent (me);
  
!         if (mouseEventTarget != null)
            {
!             Component oldSource = (Component) me.getSource ();
!             me.setSource (mouseEventTarget);
!             mouseEventTarget.dispatchEvent (me);
!             me.setSource (oldSource);
            }
! 	    }
!     else if (e instanceof KeyEvent && focus != null)
!   {
!         focus.processKeyEvent ((KeyEvent) e);
! 	    }
!       
      return e.isConsumed();
    }
  
--- 1867,2022 ----
  {
    private static final long serialVersionUID = 5184291520170872969L;
    private Container nativeContainer;
    private Cursor nativeCursor;
    private long eventMask;
    
    private transient Component mouseEventTarget;
+   private transient Component pressedComponent;
+   private transient Component lastComponentEntered;
+   private transient int pressCount;
    
    LightweightDispatcher(Container c)
    {
      nativeContainer = c;
    }
  
!   void acquireComponentForMouseEvent(MouseEvent me)
    {
      int x = me.getX ();
      int y = me.getY ();
  
!     // Find the candidate which should receive this event.
!     Component parent = nativeContainer;
!     Component candidate = null;
!     Point p = me.getPoint();
!     while (candidate == null && parent != null)
!       {
!         candidate =
!           SwingUtilities.getDeepestComponentAt(parent, p.x, p.y);
!         if (candidate == null || (candidate.eventMask & me.getID()) == 0)
!         {
!           candidate = null;
!           p = SwingUtilities.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 (SwingUtilities.isDescendingFrom(lastComponentEntered, nativeContainer))
+         {
+           Point tp = 
+             SwingUtilities.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 = SwingUtilities.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);
            }
!       }
! 
!     if (me.getID() == MouseEvent.MOUSE_RELEASED
!         || me.getID() == MouseEvent.MOUSE_PRESSED && pressCount > 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_RELEASED
!       //   - MOUSE_PRESSED: another button pressed while the first is held down
!       //   - MOUSE_DRAGGED
!       if (SwingUtilities.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;
!         else if (pressCount == 0)
!           pressedComponent = null;
!       }
    }
  
!   boolean handleEvent(AWTEvent e)
    {
      if (e instanceof MouseEvent)
!       {
          MouseEvent me = (MouseEvent) e;
  
!         acquireComponentForMouseEvent(me);
! 	
!         // Avoid dispatching ENTERED and EXITED events twice.
!         if (mouseEventTarget != null
!             && mouseEventTarget.isShowing()
!             && e.getID() != MouseEvent.MOUSE_ENTERED
!             && e.getID() != MouseEvent.MOUSE_EXITED)
            {
!             MouseEvent newEvt = 
!               SwingUtilities.convertMouseEvent(nativeContainer, me, 
!                                                mouseEventTarget);
!             mouseEventTarget.dispatchEvent(newEvt);
! 
!             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;
!                   break;
!               }
!               if (newEvt.isConsumed())
!                 e.consume();
            }
!       }
!     
      return e.isConsumed();
    }
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java gcc-4.0.0/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java
*** gcc-3.4.3/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java	Mon Mar 24 13:50:32 2003
--- gcc-4.0.0/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java	Thu Feb 17 07:48:23 2005
***************
*** 1,5 ****
  /* ContainerOrderFocusTraversalPolicy.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ContainerOrderFocusTraversalPolicy.java -- 
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
--- 41,63 ----
  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
*************** public class ContainerOrderFocusTraversa
*** 52,63 ****
     */
    static final long serialVersionUID = 486933713763926351L;
  
    private boolean implicitDownCycleTraversal = true;
  
    /**
     * Creates the <code>ContainerOrderFocusTraversalPolicy</code> object.
     */
!   public ContainerOrderFocusTraversalPolicy()
    {
      // Nothing to do here
    }
--- 68,82 ----
     */
    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
    }
*************** public class ContainerOrderFocusTraversa
*** 66,102 ****
     * Returns the Component that should receive the focus after current.
     * root must be a focus cycle root of current.
     *
     * @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
!         || current == null)
!       throw new IllegalArgumentException ();
!     
!     return null;
    }
  
    /**
!    * Returns the Component that should receive the focus before current.
!    * root must be a focus cycle root of current.
     *
     * @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
!         || current == null)
!       throw new IllegalArgumentException ();
  
!     return null;
    }
  
    /**
     * Returns the first Component of root that should receive the focus.
     *
     * @exception IllegalArgumentException If root is null.
     */
    public Component getFirstComponent(Container root)
--- 85,280 ----
     * 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)
*************** public class ContainerOrderFocusTraversa
*** 117,134 ****
        {
          Component component = componentArray [i];
  	
          if (component instanceof Container)
            {
!             Component result = getLastComponent ((Container) component);
  
              if (result != null)
                return result;
            }
-         else
-           {
-             if (accept (component))
-               return component;
-           }
        }
  
      return null;
--- 295,310 ----
        {
          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;
*************** public class ContainerOrderFocusTraversa
*** 137,145 ****
    /**
     * Returns the last Component of root that should receive the focus.
     *
     * @exception IllegalArgumentException If root is null.
     */
!   public Component getLastComponent(Container root)
    {
      if (root == null)
        throw new IllegalArgumentException ();
--- 313,326 ----
    /**
     * 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 ();
*************** public class ContainerOrderFocusTraversa
*** 153,162 ****
  
      Component[] componentArray = root.getComponents ();
      
!     for (int i = componentArray.length - 1; i >= 0; i++)
        {
          Component component = componentArray [i];
  	
          if (component instanceof Container)
            {
              Component result = getLastComponent ((Container) component);
--- 334,346 ----
  
      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);
*************** public class ContainerOrderFocusTraversa
*** 164,174 ****
              if (result != null)
                return result;
            }
-         else
-           {
-             if (accept (component))
-               return component;
-           }
        }
  
      return null;
--- 348,353 ----
*************** public class ContainerOrderFocusTraversa
*** 177,204 ****
    /**
     * Returns the default Component of root that should receive the focus.
     *
     * @exception IllegalArgumentException If root is null.
     */
!   public Component getDefaultComponent(Container root)
    {
      return getFirstComponent (root);
    }
  
!   public void setImplicitDownCycleTraversal(boolean value)
    {
      implicitDownCycleTraversal = value;
    }
  
!   public boolean getImplicitDownCycleTraversal()
    {
      return implicitDownCycleTraversal;
    }
  
!   protected boolean accept(Component current)
    {
      return (current.visible
!             && current.isDisplayable()
              && current.enabled
              && current.focusable);
    }
! } // class ContainerOrderFocusTraversalPolicy
--- 356,413 ----
    /**
     * 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-3.4.3/libjava/java/awt/DefaultFocusTraversalPolicy.java gcc-4.0.0/libjava/java/awt/DefaultFocusTraversalPolicy.java
*** gcc-3.4.3/libjava/java/awt/DefaultFocusTraversalPolicy.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/DefaultFocusTraversalPolicy.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* DefaultFocusTraversalPolicy.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultFocusTraversalPolicy.java -- 
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,55 ****
  package java.awt;
  
  /**
!  * STUB CLASS ONLY
   */
  public class DefaultFocusTraversalPolicy
    extends ContainerOrderFocusTraversalPolicy
  {
!   public DefaultFocusTraversalPolicy()
    {
    }
  
!   protected boolean accept(Component comp)
    {
!     throw new Error("not implemented");
    }
! } // class DefaultFocusTraversalPolicy
--- 39,109 ----
  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-3.4.3/libjava/java/awt/DefaultKeyboardFocusManager.java gcc-4.0.0/libjava/java/awt/DefaultKeyboardFocusManager.java
*** gcc-3.4.3/libjava/java/awt/DefaultKeyboardFocusManager.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/DefaultKeyboardFocusManager.java	Wed Feb 16 20:01:50 2005
***************
*** 1,5 ****
  /* DefaultKeyboardFocusManager.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultKeyboardFocusManager.java -- 
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,96 ****
  
  package java.awt;
  
  import java.awt.event.KeyEvent;
  
! /**
!  * STUB CLASS ONLY
!  */
  public class DefaultKeyboardFocusManager extends KeyboardFocusManager
  {
!   public DefaultKeyboardFocusManager()
    {
    }
  
!   public boolean dispatchEvent(AWTEvent e)
    {
-     throw new Error("not implemented");
    }
!   public boolean dispatchKeyEvent(KeyEvent e)
    {
!     throw new Error("not implemented");
    }
!   public boolean postProcessKeyEvent(KeyEvent e)
    {
!     throw new Error("not implemented");
    }
!   public void processKeyEvent(Component comp, KeyEvent e)
    {
!     throw new Error("not implemented");
    }
!   protected void enqueueKeyEvents(long after, Component comp)
    {
!     throw new Error("not implemented");
    }
!   protected void dequeueKeyEvents(long after, Component comp)
    {
!     throw new Error("not implemented");
    }
!   protected void discardKeyEvents(Component comp)
    {
!     throw new Error("not implemented");
    }
!   public void focusPreviousComponent(Component comp)
    {
!     throw new Error("not implemented");
    }
!   public void focusNextComponent(Component comp)
    {
!     throw new Error("not implemented");
    }
!   public void upFocusCycle(Component comp)
    {
!     throw new Error("not implemented");
    }
!   public void downFocusCycle(Container cont)
    {
!     throw new Error("not implemented");
    }
  } // class DefaultKeyboardFocusManager
--- 38,503 ----
  
  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 ();
+     }
    }
  
!   /** 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.
!             Container parent = target.getParent ();
! 
!             while (parent != null
!                    && !(parent instanceof Window))
!               parent = parent.getParent ();
! 
!             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).
!     AWTKeyStroke oppositeKeystroke = AWTKeyStroke.getAWTKeyStroke (e.getKeyCode (),
!                                                                    e.getModifiersEx (),
!                                                                    !(e.id == KeyEvent.KEY_RELEASED));
! 
!     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))
!       {
!         focusNextComponent (comp);
!         e.consume ();
!       }
!     else if (backwardKeystrokes.contains (eventKeystroke))
!       {
!         focusPreviousComponent (comp);
!         e.consume ();
!       }
!     else if (upKeystrokes.contains (eventKeystroke))
!       {
!         upFocusCycle (comp);
!         e.consume ();
!       }
!     else if (comp instanceof Container
!              && downKeystrokes.contains (eventKeystroke))
!       {
!         downFocusCycle ((Container) comp);
!         e.consume ();
!       }
!     else if (forwardKeystrokes.contains (oppositeKeystroke)
!              || backwardKeystrokes.contains (oppositeKeystroke)
!              || upKeystrokes.contains (oppositeKeystroke)
!              || (comp instanceof Container &&
!                  downKeystrokes.contains (oppositeKeystroke)))
!       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-3.4.3/libjava/java/awt/Dialog.java gcc-4.0.0/libjava/java/awt/Dialog.java
*** gcc-3.4.3/libjava/java/awt/Dialog.java	Tue Jan 13 02:56:18 2004
--- gcc-4.0.0/libjava/java/awt/Dialog.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Dialog.java -- An AWT dialog box
!    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Dialog.java -- An AWT dialog box
!    Copyright (C) 1999, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 40,50 ****
  
  import java.awt.peer.DialogPeer;
  
  /**
   * A dialog box widget class.
   *
!  * @author Aaron M. Renn <arenn@urbanophile.com>
!  * @author Tom Tromey <tromey@redhat.com>
   */
  public class Dialog extends Window
  {
--- 40,55 ----
  
  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
  {
*************** Dialog(Frame parent)
*** 123,130 ****
    * parent and modality, that is resizable and which has no title.
    *
    * @param parent The parent frame of this dialog box.
!   * @param modal <true> 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
--- 128,135 ----
    * 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
*************** Dialog(Frame parent, String title)
*** 164,171 ****
    *
    * @param parent The parent frame of this dialog box.
    * @param title The title string for this dialog box.
!   * @param modal <true> if this dialog box is modal, <code>false</code>
!   * otherwise.
    *
    * @exception IllegalArgumentException If owner is null or
    * GraphicsEnvironment.isHeadless() returns true.
--- 169,176 ----
    *
    * @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.
*************** Dialog(Frame parent, String title, boole
*** 183,190 ****
   *
   * @param parent The parent frame of this dialog box.
   * @param title The title string for this dialog box.
!  * @param modal <true> 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
--- 188,195 ----
   *
   * @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
*************** paramString()
*** 511,515 ****
--- 516,553 ----
  
      this.undecorated = undecorated;
    }
+   
+   protected class AccessibleAWTDialog extends AccessibleAWTWindow
+   {
+     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-3.4.3/libjava/java/awt/Dimension.java gcc-4.0.0/libjava/java/awt/Dimension.java
*** gcc-3.4.3/libjava/java/awt/Dimension.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/Dimension.java	Thu Feb 17 07:48:24 2005
*************** import java.io.Serializable;
*** 53,61 ****
   * 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
--- 53,61 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/DisplayMode.java gcc-4.0.0/libjava/java/awt/DisplayMode.java
*** gcc-3.4.3/libjava/java/awt/DisplayMode.java	Sat Jan 11 00:51:29 2003
--- gcc-4.0.0/libjava/java/awt/DisplayMode.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* DisplayMode.java -- a description of display mode configurations
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DisplayMode.java -- a description of display mode configurations
!    Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 43,49 ****
   * 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
--- 43,49 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Event.java gcc-4.0.0/libjava/java/awt/Event.java
*** gcc-3.4.3/libjava/java/awt/Event.java	Sun Nov 10 00:16:42 2002
--- gcc-4.0.0/libjava/java/awt/Event.java	Thu Jul 22 15:35:47 2004
*************** public class Event implements java.io.Se
*** 163,169 ****
  
    protected String paramString ()
    {
!     return "id=" + id + ",x=" + x + ",y=" + y + "target=" + target;
    }
  
    public boolean shiftDown() 
--- 163,170 ----
  
    protected String paramString ()
    {
!     return "id=" + id + ",x=" + x + ",y=" + y
!       + ",target=" + target + ",arg=" + arg;
    }
  
    public boolean shiftDown() 
diff -Nrcpad gcc-3.4.3/libjava/java/awt/EventDispatchThread.java gcc-4.0.0/libjava/java/awt/EventDispatchThread.java
*** gcc-3.4.3/libjava/java/awt/EventDispatchThread.java	Fri Jan 16 16:15:49 2004
--- gcc-4.0.0/libjava/java/awt/EventDispatchThread.java	Wed Feb 16 20:01:51 2005
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* EventDispatchThread.java -
!    Copyright (C) 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 34,58 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- /** @author Bryce McKinlay */
- 
- /* Status: believed complete, but untested. */
- 
  package java.awt;
  
  class EventDispatchThread extends Thread
  {
!   private static int dispatchThreadNum = 1;
  
    private EventQueue queue;
  
    EventDispatchThread(EventQueue queue)
    {
      super();
!     setName("AWT-EventQueue-" + dispatchThreadNum++);
      this.queue = queue;
      setPriority(NORM_PRIORITY + 1);
-     start();
    }
  
    public void run()
--- 35,58 ----
  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()
*************** class EventDispatchThread extends Thread
*** 62,74 ****
          try
  	{
  	  AWTEvent evt = queue.getNextEvent();
! 	  if (isInterrupted ())
! 	    {
! 	      // We are interrupted when we should finish executing
! 	      return;
! 	    }
! 	  queue.dispatchEvent(evt);
  	}
  	catch (InterruptedException ie)
  	{
  	  // We are interrupted when we should finish executing
--- 62,84 ----
          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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/EventQueue.java gcc-4.0.0/libjava/java/awt/EventQueue.java
*** gcc-3.4.3/libjava/java/awt/EventQueue.java	Fri Jan 16 16:15:49 2004
--- gcc-4.0.0/libjava/java/awt/EventQueue.java	Thu Feb 17 07:48:24 2005
***************
*** 1,4 ****
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* EventQueue.java --
!    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,45 ****
--- 38,49 ----
  
  package java.awt;
  
+ import gnu.java.awt.ClasspathToolkit;
+ 
  import java.awt.event.ActionEvent;
  import java.awt.event.InputEvent;
  import java.awt.event.InvocationEvent;
+ import java.awt.event.WindowEvent;
  import java.lang.reflect.InvocationTargetException;
  import java.util.EmptyStackException;
  
*************** public class EventQueue
*** 71,76 ****
--- 75,109 ----
    private long lastWhen = System.currentTimeMillis();
  
    private EventDispatchThread dispatchThread = new EventDispatchThread(this);
+   private boolean shutdown = false;
+ 
+   private long lastNativeQueueAccess = 0;
+   private long humanLatencyThreshold = 100;
+ 
+   synchronized 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
+     
+     if (peekEvent() == null
+         && ((ClasspathToolkit) Toolkit.getDefaultToolkit()).nativeQueueEmpty())
+       {
+         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 class EventQueue
*** 93,101 ****
    {
      if (next != null)
        return next.getNextEvent();
  
      while (next_in == next_out)
!       wait();
  
      AWTEvent res = queue[next_out];
  
--- 126,176 ----
    {
      if (next != null)
        return next.getNextEvent();
+     
+     ClasspathToolkit tk = ((ClasspathToolkit) Toolkit.getDefaultToolkit());
+     long curr = System.currentTimeMillis();
+ 
+     if (! tk.nativeQueueEmpty() &&
+         (curr - lastNativeQueueAccess > humanLatencyThreshold))
+       {
+         tk.iterateNativeQueue(this, false);
+         lastNativeQueueAccess = curr;
+       }
  
      while (next_in == next_out)
!       {
!         // Only the EventDispatchThread associated with the top of the stack is
!         // allowed to get events from the native source; everyone else just
!         // waits on the head of the queue.
! 
!         if (isDispatchThread())
!           {
!             // 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();
! 
!             tk.iterateNativeQueue(this, true);
!             lastNativeQueueAccess = System.currentTimeMillis();
!           }
!         else
!           {
!             try
!               {
!                 wait();
!               }
!             catch (InterruptedException ie)
!               {
!               }
!           }
!       }
  
      AWTEvent res = queue[next_out];
  
*************** public class EventQueue
*** 155,166 ****
    /**
     * Posts a new event to the queue.
     *
!    * @param event The event to post to the queue.
     *
     * @exception NullPointerException If event is null.
     */
    public synchronized void postEvent(AWTEvent evt)
    {
      if (next != null)
        {
          next.postEvent(evt);
--- 230,244 ----
    /**
     * 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);
*************** public class EventQueue
*** 212,217 ****
--- 290,311 ----
          next_out = 0;
          next_in = oldQueue.length;
        }
+     
+     if (dispatchThread == null || !dispatchThread.isAlive())
+       {
+         dispatchThread = new EventDispatchThread(this);
+         dispatchThread.start();
+       }
+ 
+     // Window events might represent the closing of a window, which
+     // might cause the end of the dispatch thread's life, so we'll wake
+     // it up here to give it a chance to check for shutdown.
+ 
+     if (!isDispatchThread() 
+         || (evt.getID() == WindowEvent.WINDOW_CLOSED)
+         || (evt.getID() == WindowEvent.WINDOW_CLOSING))
+       ((ClasspathToolkit) Toolkit.getDefaultToolkit()).wakeNativeQueue();
+ 
      notify();
    }
  
*************** public class EventQueue
*** 231,240 ****
    public static void invokeAndWait(Runnable runnable)
      throws InterruptedException, InvocationTargetException
    {
      EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); 
      Thread current = Thread.currentThread();
-     if (current == eq.dispatchThread)
-       throw new Error("Can't call invokeAndWait from event dispatch thread");
  
      InvocationEvent ie = 
        new InvocationEvent(eq, runnable, current, true);
--- 325,335 ----
    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);
*************** public class EventQueue
*** 293,300 ****
    public static AWTEvent getCurrentEvent()
    {
      EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); 
!     if (Thread.currentThread() != eq.dispatchThread)
!       return null;
      return eq.currentEvent;
    }
  
--- 388,405 ----
    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;
    }
  
*************** public class EventQueue
*** 348,377 ****
      if (prev == null)
        throw new EmptyStackException();
  
!     // Don't synchronize both this and prev at the same time, or deadlock could
!     // occur.
      synchronized (prev)
        {
!         prev.next = null;
!       }
  
!     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;
  
!         // Tell our EventDispatchThread that it can end execution
!         dispatchThread.interrupt ();
! 	dispatchThread = null;
        }
    }
  
--- 453,487 ----
      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;
  
!             ((ClasspathToolkit) Toolkit.getDefaultToolkit()).wakeNativeQueue();
!             setShutdown(true);
! 	    dispatchThread = null;
!             this.notifyAll();
!           }
        }
    }
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/FileDialog.java gcc-4.0.0/libjava/java/awt/FileDialog.java
*** gcc-3.4.3/libjava/java/awt/FileDialog.java	Mon Jan  5 21:23:12 2004
--- gcc-4.0.0/libjava/java/awt/FileDialog.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* FileDialog.java -- A filename selection dialog box
!    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,54 ****
  package java.awt;
  
  import java.awt.peer.FileDialogPeer;
- import java.awt.peer.DialogPeer;
  import java.io.FilenameFilter;
  
  /**
    * 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 java.io.Serializable
  {
  
  /*
--- 39,54 ----
  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
  {
  
  /*
*************** setFile(String file)
*** 261,267 ****
  /**
    * Returns the filename filter being used by this dialog.
    *
!   * @param The filename filter being used by this dialog.
    */
  public FilenameFilter
  getFilenameFilter()
--- 261,267 ----
  /**
    * Returns the filename filter being used by this dialog.
    *
!   * @return The filename filter being used by this dialog.
    */
  public FilenameFilter
  getFilenameFilter()
diff -Nrcpad gcc-3.4.3/libjava/java/awt/FlowLayout.java gcc-4.0.0/libjava/java/awt/FlowLayout.java
*** gcc-3.4.3/libjava/java/awt/FlowLayout.java	Fri Dec 19 20:11:56 2003
--- gcc-4.0.0/libjava/java/awt/FlowLayout.java	Tue Nov 30 23:58:38 2004
***************
*** 1,6 ****
! // FlowLayout.java - Grid-based layout engine
! 
! /* Copyright (C) 1999, 2000, 2001, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* FlowLayout.java -- Grid-based layout engine
!    Copyright (C) 1999, 2000, 2001, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 47,53 ****
   * 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
--- 46,52 ----
   * 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
*************** public class FlowLayout implements Layou
*** 69,76 ****
    // Serialization constant
    private static final long serialVersionUID = -7262534875583282631L;
  
!   /** Add a new component to the layout.  This particular implementation
     * does nothing.
     */
    public void addLayoutComponent (String name, Component comp)
    {
--- 68,79 ----
    // 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)
    {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Font.java gcc-4.0.0/libjava/java/awt/Font.java
*** gcc-3.4.3/libjava/java/awt/Font.java	Wed Dec 31 08:58:30 2003
--- gcc-4.0.0/libjava/java/awt/Font.java	Mon Feb 21 16:12:12 2005
***************
*** 1,5 ****
  /* Font.java -- Font object
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Font.java -- Font object
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,72 ****
  
  package java.awt;
  
  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.io.InputStream;
  import java.io.IOException;
  import java.io.Serializable;
  import java.util.Locale;
  import java.util.Map;
- import java.util.HashMap;
  import java.util.StringTokenizer;
- import java.text.CharacterIterator;
- import java.text.AttributedCharacterIterator;
- import java.text.StringCharacterIterator;
- 
- import gnu.java.awt.ClasspathToolkit;
- import gnu.java.awt.peer.ClasspathFontPeer;
  
  /**
!   * 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
  {
  
--- 38,70 ----
  
  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.geom.AffineTransform;
  import java.awt.geom.Rectangle2D;
  import java.awt.peer.FontPeer;
  import java.io.IOException;
+ import java.io.InputStream;
  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
  {
  
*************** public static final int HANGING_BASELINE
*** 163,168 ****
--- 161,186 ----
     */
    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 pixels.
+    *
+    * @since 1.0
+    */
+   protected int size;
+ 
+   /**
+    * 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;
*************** private static final long serialVersionU
*** 229,241 ****
          {
            tokenval = Integer.parseInt(token);
          }
!       catch(NumberFormatException e) { ; }
  
        if (tokenval != 0)
          size = tokenval;
      }
  
!     return getFontFromToolkit (name, attrsToMap (style, size));
  }
  
    /* These methods delegate to the toolkit. */
--- 247,266 ----
          {
            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. */
*************** private static final long serialVersionU
*** 245,267 ****
      return (ClasspathToolkit)(Toolkit.getDefaultToolkit ());
    }
  
-   protected static Map attrsToMap(int style, int size)
-   {
-     Map attrs = new HashMap();
-     attrs.put (TextAttribute.SIZE, new Float ((float)size));
-     
-     if ((style & BOLD) == BOLD)
-       attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
-     else
-       attrs.put (TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR);
- 
-     if ((style & ITALIC) == ITALIC)
-       attrs.put (TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
-     else
-       attrs.put (TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR);
-     return attrs;
-   }
- 
    /* Every factory method in Font should eventually call this. */
    protected static Font getFontFromToolkit (String name, Map attribs)
    {
--- 270,275 ----
*************** private static final long serialVersionU
*** 281,287 ****
    * Returns a <code>Font</code> object from the passed property name.
    *
    * @param propname The name of the system property.
!   * @param default 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.
--- 289,295 ----
    * 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.
*************** private static final long serialVersionU
*** 326,345 ****
  
    public Font (String name, int style, int size)
    {
!     this.peer = getPeerFromToolkit (name, attrsToMap (style, size));
    }
  
    public Font (Map attrs)
! {
!     this.peer = getPeerFromToolkit (null, attrs);
! }
  
    /* This extra constructor is here to permit ClasspathToolkit and to build
       a font with a "logical name" as well as attrs.  */
    public Font (String name, Map attrs)
! {
      this.peer = getPeerFromToolkit (name, attrs);
! }
  
  /*************************************************************************/
  
--- 334,360 ----
  
    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);
    }
  
    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.  */
    public 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();
      this.peer = getPeerFromToolkit (name, attrs);
!   }
  
  /*************************************************************************/
  
*************** private static final long serialVersionU
*** 625,631 ****
    * GlyphVector} with a mapped glyph for each input glyph code. 
    *
    * @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.
--- 640,646 ----
    * 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.
*************** private static final long serialVersionU
*** 646,651 ****
--- 661,682 ----
  
  /**
    * 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.
*************** private static final long serialVersionU
*** 698,703 ****
--- 729,755 ----
  }
  
  /**
+   * 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.
    *
*************** equals(Object obj)
*** 1224,1236 ****
  public String
  toString()
  {
!   return(getClass().getName() 
!          + "(logical=" + getName () 
!          + ",family=" + getFamily ()
!          + ",face=" + getFontName ()
!          + ",style=" + getStyle ()
!          + ",size=" + getSize ()
!          + ",transform=" + getTransform () + ")");
  }
  
  
--- 1276,1303 ----
  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 () + "]";
  }
  
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/FontFormatException.java gcc-4.0.0/libjava/java/awt/FontFormatException.java
*** gcc-3.4.3/libjava/java/awt/FontFormatException.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/FontFormatException.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* FontFormatException.java -- the specified font is bad
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FontFormatException.java -- the specified font is bad
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
  /**
   * Thrown when a specified font is bad.
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Font
   * @since 1.3
   * @status updated to 1.4
--- 41,47 ----
  /**
   * Thrown when a specified font is bad.
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Font
   * @since 1.3
   * @status updated to 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/awt/FontMetrics.java gcc-4.0.0/libjava/java/awt/FontMetrics.java
*** gcc-3.4.3/libjava/java/awt/FontMetrics.java	Tue Jan 22 22:58:08 2002
--- gcc-4.0.0/libjava/java/awt/FontMetrics.java	Tue Nov 30 23:58:38 2004
*************** exception statement from your version. *
*** 38,43 ****
--- 38,47 ----
  
  package java.awt;
  
+ import java.awt.font.FontRenderContext;
+ import java.awt.font.LineMetrics;
+ import java.text.CharacterIterator;
+ 
  // FIXME: I leave many methods basically unimplemented.  This
  // should be reviewed.
  
*************** package java.awt;
*** 47,58 ****
    * least the following methods:
    * <p>
    * <ul>
!   * <li>getAscent
!   * <li>getDescent
!   * <li>getLeading()
!   * <li>getMaxAdvance()
!   * <li>charWidth(char)
!   * <li>charsWidth(char[], int, int)
    * </ul>
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
--- 51,62 ----
    * least the following methods:
    * <p>
    * <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)
*************** getMaxAscent()
*** 195,201 ****
  public int
  getMaxDescent()
  {
!   return(getDescent());
  }
  
  /*************************************************************************/
--- 199,205 ----
  public int
  getMaxDescent()
  {
!   return getMaxDecent ();
  }
  
  /*************************************************************************/
*************** getMaxDescent()
*** 212,218 ****
  public int
  getMaxDecent()
  {
!   return(getMaxDescent());
  }
  
  /*************************************************************************/
--- 216,222 ----
  public int
  getMaxDecent()
  {
!   return getDescent ();
  }
  
  /*************************************************************************/
*************** charsWidth(char buf[], int offset, int l
*** 292,299 ****
  {
    int total_width = 0;
    for (int i = offset; i < len; i++)
!     total_width = charWidth(buf[i]);
! 
    return(total_width);
  }
  
--- 296,302 ----
  {
    int total_width = 0;
    for (int i = offset; i < len; i++)
!     total_width += charWidth(buf[i]);
    return(total_width);
  }
  
*************** bytesWidth(byte buf[], int offset, int l
*** 328,334 ****
  public int[]
  getWidths()
  {
!   return(new int[256]);
  }
  
  /*************************************************************************/
--- 331,342 ----
  public int[]
  getWidths()
  {
!   int [] result = new int[256];
!   for(char i = 0; i < 256; i++)
!   {
!     result[i]= charWidth(i);
!   }
!   return(result);
  }
  
  /*************************************************************************/
*************** toString()
*** 345,349 ****
  	  + ",descent=" + getDescent() + ",height=" + getHeight() + "]");
  }
  
- } // class FontMetrics 
  
--- 353,463 ----
  	  + ",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 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);
+ }
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Frame.java gcc-4.0.0/libjava/java/awt/Frame.java
*** gcc-3.4.3/libjava/java/awt/Frame.java	Fri Sep 19 19:27:58 2003
--- gcc-4.0.0/libjava/java/awt/Frame.java	Mon Feb 21 16:12:13 2005
***************
*** 1,5 ****
  /* Frame.java -- AWT toplevel window
!    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Frame.java -- AWT toplevel window
!    Copyright (C) 1999, 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,47 ****
  package java.awt;
  
  import java.awt.peer.FramePeer;
! import java.util.Enumeration;
  import java.util.Vector;
  
  /**
    * This class is a top-level window with a title bar and window
    * decorations.
--- 39,54 ----
  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.
*************** import java.util.Vector;
*** 50,60 ****
    */
  public class Frame extends Window implements MenuContainer
  {
- 
- /*
-  * Static Variables
-  */
- 
  /**
    * Constant for the default cursor.
    * @deprecated Replaced by <code>Cursor.DEFAULT_CURSOR</code> instead.
--- 57,62 ----
*************** public static final int NORMAL = 0;
*** 148,159 ****
  // Serialization version constant
  private static final long serialVersionUID = 2673458971256075116L;
  
- /*************************************************************************/
- 
- /*
-  * Instance Variables
-  */
- 
  /**
    * @serial The version of the class data being serialized
    * // FIXME: what is this value?
--- 150,155 ----
*************** private String title = "";
*** 208,218 ****
     */
    private boolean undecorated = false;
  
! /*************************************************************************/
! 
! /*
!  * Constructors
!  */
  
  /**
    * Initializes a new instance of <code>Frame</code> that is not visible
--- 204,213 ----
     */
    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
*************** public
*** 222,231 ****
  Frame()
  {
    this("");
  }
  
- /*************************************************************************/
- 
  /**
    * Initializes a new instance of <code>Frame</code> that is not visible
    * and has the specified title.
--- 217,225 ----
  Frame()
  {
    this("");
+   noteFrame(this);
  }
  
  /**
    * Initializes a new instance of <code>Frame</code> that is not visible
    * and has the specified title.
*************** Frame(String title)
*** 239,244 ****
--- 233,239 ----
    this.title = title;
    // Top-level frames are initially invisible.
    visible = false;
+   noteFrame(this);
  }
  
  public
*************** Frame(GraphicsConfiguration gc)
*** 246,251 ****
--- 241,247 ----
  {
    super(gc);
    visible = false;
+   noteFrame(this);
  }
  
  public
*************** Frame(String title, GraphicsConfiguratio
*** 254,267 ****
    super(gc);
    setTitle(title);
    visible = false;
  }
  
- /*************************************************************************/
- 
- /*
-  * Instance Methods
-  */
- 
  /**
    * Returns this frame's title string.
    *
--- 250,258 ----
    super(gc);
    setTitle(title);
    visible = false;
+   noteFrame(this);
  }
  
  /**
    * Returns this frame's title string.
    *
*************** getTitle()
*** 273,280 ****
    return(title);
  }
  
- /*************************************************************************/
- 
  /*
   * Sets this frame's title to the specified value.
   *
--- 264,269 ----
*************** setTitle(String title)
*** 288,295 ****
      ((FramePeer) peer).setTitle(title);
  }
  
- /*************************************************************************/
- 
  /**
    * Returns this frame's icon.
    *
--- 277,282 ----
*************** getIconImage()
*** 302,309 ****
    return(icon);
  }
  
- /*************************************************************************/
- 
  /**
    * Sets this frame's icon to the specified value.
    *
--- 289,294 ----
*************** setIconImage(Image icon)
*** 317,324 ****
      ((FramePeer) peer).setIconImage(icon);
  }
  
- /*************************************************************************/
- 
  /**
    * Returns this frame's menu bar.
    *
--- 302,307 ----
*************** getMenuBar()
*** 331,338 ****
    return(menuBar);
  }
  
- /*************************************************************************/
- 
  /**
    * Sets this frame's menu bar.
    *
--- 314,319 ----
*************** getMenuBar()
*** 341,353 ****
  public synchronized void
  setMenuBar(MenuBar menuBar)
  {
-   this.menuBar = menuBar;
    if (peer != null)
      ((FramePeer) peer).setMenuBar(menuBar);
  }
  
- /*************************************************************************/
- 
  /**
    * Tests whether or not this frame is resizable.  This will be 
    * <code>true</code> by default.
--- 322,339 ----
  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.
*************** isResizable()
*** 361,368 ****
    return(resizable);
  }
  
- /*************************************************************************/
- 
  /**
    * Sets the resizability of this frame to the specified value.
    *
--- 347,352 ----
*************** setResizable(boolean resizable)
*** 377,384 ****
      ((FramePeer) peer).setResizable(resizable);
  }
  
- /*************************************************************************/
- 
  /**
    * Returns the cursor type of the cursor for this window.  This will
    * be one of the constants in this class.
--- 361,366 ----
*************** getCursorType()
*** 393,400 ****
    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.
--- 375,380 ----
*************** setCursor(int type)
*** 409,416 ****
    setCursor(new Cursor(type));
  }
  
- /*************************************************************************/
- 
  /**
    * Removes the specified component from this frame's menu.
    *
--- 389,394 ----
*************** remove(MenuComponent menu)
*** 422,460 ****
    menuBar.remove(menu);
  }
  
- /*************************************************************************/
- 
  /**
    * Notifies this frame that it should create its native peer.
    */
  public void
  addNotify()
  {
    if (peer == null)
      peer = getToolkit ().createFrame (this);
    super.addNotify();
  }
  
! /*************************************************************************/
  
! /**
!   * Returns a debugging string describing this window.
!   *
!   * @return A debugging string describing this window.
!   */
! protected String
! paramString()
  {
!   return(getClass().getName());
  }
  
! public static Frame[]
! getFrames()
  {
!   //Frame[] array = new Frames[frames.size()];
!   //return frames.toArray(array);
!   String msg = "FIXME: can't be implemented without weak references";
!   throw new UnsupportedOperationException(msg);
  }
  
    public void setState (int state)
--- 400,519 ----
    menuBar.remove(menu);
  }
  
  /**
    * Notifies this frame that it should create its native peer.
    */
+ private static void fireDummyEvent()
+ {
+   EventQueue.invokeLater(new Runnable()
+     {
+       public void run()
+       {
+ 	// Do nothing here.
+       }
+     });
+ }
+ 
  public void
  addNotify()
  {
+   if (menuBar != null)
+     menuBar.addNotify();
    if (peer == null)
      peer = getToolkit ().createFrame (this);
+ 
+   // We now know there's a Frame (us) with a live peer, so we can start the
+   // fundamental queue and dispatch thread, by inserting a dummy event.
+   if (parent != null && parent.isDisplayable())
+     fireDummyEvent();
+   
    super.addNotify();
  }
  
! public void removeNotify()
! {
!   if (menuBar != null)
!     menuBar.removeNotify();
!   super.removeNotify();
  
!   // By now we've been disconnected from the peer, and the peer set to
!   // null.  This is formally the same as saying "we just became
!   // un-displayable", so we wake up the event queue with a dummy event to
!   // see if it's time to shut down.
!   fireDummyEvent();
! }
! 
!   /**
!    * 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)
*************** getFrames()
*** 538,542 ****
  
      this.undecorated = undecorated;
    }
- } // class Frame 
  
--- 597,648 ----
  
      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
+   {
+     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-3.4.3/libjava/java/awt/Graphics.java gcc-4.0.0/libjava/java/awt/Graphics.java
*** gcc-3.4.3/libjava/java/awt/Graphics.java	Wed Jun 11 10:37:47 2003
--- gcc-4.0.0/libjava/java/awt/Graphics.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Graphics.java -- Abstract Java drawing class
!    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Graphics.java -- Abstract Java drawing class
!    Copyright (C) 1999, 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.text.AttributedCharacterIter
*** 46,52 ****
    * devices such as the screen or printers.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy <warrenl@cygnus.com>
    */
  public abstract class Graphics
  {
--- 46,52 ----
    * devices such as the screen or printers.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy (warrenl@cygnus.com)
    */
  public abstract class Graphics
  {
*************** getClipRect()
*** 243,249 ****
    * 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.
    */
--- 243,249 ----
    * 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.
    */
*************** getClip();
*** 279,285 ****
  /**
    * Sets the clipping region to the specified <code>Shape</code>.
    *
!   * @param shape The new clipping region.
    */
  public abstract void
  setClip(Shape clip);
--- 279,285 ----
  /**
    * Sets the clipping region to the specified <code>Shape</code>.
    *
!   * @param clip The new clipping region.
    */
  public abstract void
  setClip(Shape clip);
*************** clearRect(int x, int y, int width, int h
*** 371,377 ****
    * @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 arcHeigth The height of the corner arcs.
    */
  public abstract void
  drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight);
--- 371,377 ----
    * @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);
*************** drawRoundRect(int x, int y, int width, i
*** 386,392 ****
    * @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 arcHeigth The height of the corner arcs.
    */
  public abstract void
  fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight);
--- 386,392 ----
    * @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);
*************** draw3DRect(int x, int y, int width, int 
*** 417,423 ****
    drawLine(x1, y2, x1, y1);
    setColor(br);
    drawLine(x2, y1, x2, y2);
!   drawLine(x2, y1, x1, y2);
    setColor(color);
  }
  
--- 417,423 ----
    drawLine(x1, y2, x1, y1);
    setColor(br);
    drawLine(x2, y1, x2, y2);
!   drawLine(x2, y2, x1, y2);
    setColor(color);
  }
  
*************** fillOval(int x, int y, int width, int he
*** 480,486 ****
    * @param arcAngle The extent of the arc.
    */
  public abstract void
! drawArc(int x, int y, int width, int height, int startAngle, int arcAngle);
  
  /*************************************************************************/
  
--- 480,486 ----
    * @param arcAngle The extent of the arc.
    */
  public abstract void
! drawArc(int x, int y, int width, int height, int arcStart, int arcAngle);
  
  /*************************************************************************/
  
*************** drawArc(int x, int y, int width, int hei
*** 498,504 ****
    * @param arcAngle The extent of the arc.
    */
  public abstract void
! fillArc(int x, int y, int width, int height, int startAngle, int arcAngle);
  
  /*************************************************************************/
  
--- 498,504 ----
    * @param arcAngle The extent of the arc.
    */
  public abstract void
! fillArc(int x, int y, int width, int height, int arcStart, int arcAngle);
  
  /*************************************************************************/
  
*************** finalize()
*** 732,745 ****
  /*************************************************************************/
  
  /**
!   * Returns a string representation of this object.
!   *
!   * @param A string representation of this object. 
!   */
  public String
  toString()
  {
!   return(super.toString());
  }
  
  public boolean
--- 732,745 ----
  /*************************************************************************/
  
  /**
!  * Returns a string representation of this object.
!  *
!  * @return A string representation of this object. 
!  */
  public String
  toString()
  {
!   return getClass ().getName () + "[font=" + getFont () + ",color=" + getColor () + "]";
  }
  
  public boolean
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Graphics2D.java gcc-4.0.0/libjava/java/awt/Graphics2D.java
*** gcc-3.4.3/libjava/java/awt/Graphics2D.java	Wed Feb 19 09:46:43 2003
--- gcc-4.0.0/libjava/java/awt/Graphics2D.java	Thu Feb 17 07:48:24 2005
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,4 ----
! /* Copyright (C) 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 34,39 ****
--- 34,40 ----
  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;
*** 41,56 ****
  import java.awt.geom.AffineTransform;
  import java.awt.image.BufferedImage;
  import java.awt.image.BufferedImageOp;
- import java.awt.image.RenderedImage;
  import java.awt.image.ImageObserver;
  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
  {
--- 42,55 ----
  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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/GraphicsConfigTemplate.java gcc-4.0.0/libjava/java/awt/GraphicsConfigTemplate.java
*** gcc-3.4.3/libjava/java/awt/GraphicsConfigTemplate.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/GraphicsConfigTemplate.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* GraphicsConfigTemplate.java -- a template for selecting configurations
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GraphicsConfigTemplate.java -- a template for selecting configurations
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/GraphicsConfiguration.java gcc-4.0.0/libjava/java/awt/GraphicsConfiguration.java
*** gcc-3.4.3/libjava/java/awt/GraphicsConfiguration.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/GraphicsConfiguration.java	Thu Feb 17 07:48:24 2005
*************** import java.awt.image.VolatileImage;
*** 53,59 ****
   * 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
--- 53,59 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/GraphicsDevice.java gcc-4.0.0/libjava/java/awt/GraphicsDevice.java
*** gcc-3.4.3/libjava/java/awt/GraphicsDevice.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/GraphicsDevice.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* GraphicsDevice.java -- information about a graphics device
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GraphicsDevice.java -- information about a graphics device
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/GraphicsEnvironment.java gcc-4.0.0/libjava/java/awt/GraphicsEnvironment.java
*** gcc-3.4.3/libjava/java/awt/GraphicsEnvironment.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/GraphicsEnvironment.java	Tue Nov 30 23:58:38 2004
***************
*** 1,5 ****
  /* GraphicsEnvironment.java -- information about the graphics environment
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GraphicsEnvironment.java -- information about the graphics environment
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 38,45 ----
  
  package java.awt;
  
+ import gnu.java.awt.ClasspathToolkit;
+ 
  import java.awt.image.BufferedImage;
  import java.util.Locale;
  
*************** import java.util.Locale;
*** 46,52 ****
   * 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
--- 48,54 ----
   * 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
*************** public abstract class GraphicsEnvironmen
*** 70,76 ****
     */
    public static GraphicsEnvironment getLocalGraphicsEnvironment()
    {
!     throw new Error("not implemented");
    }
  
    /**
--- 72,80 ----
     */
    public static GraphicsEnvironment getLocalGraphicsEnvironment()
    {
!     ClasspathToolkit tk;
!     tk = ((ClasspathToolkit) Toolkit.getDefaultToolkit ());
!     return tk.getLocalGraphicsEnvironment ();
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/awt/GridBagConstraints.java gcc-4.0.0/libjava/java/awt/GridBagConstraints.java
*** gcc-3.4.3/libjava/java/awt/GridBagConstraints.java	Thu Feb 13 07:02:12 2003
--- gcc-4.0.0/libjava/java/awt/GridBagConstraints.java	Tue Nov 30 23:58:38 2004
***************
*** 1,6 ****
! // GridBagConstraints.java - Constraints for GridBag layout manager
! 
! /* Copyright (C) 2000, 2001, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* GridBagConstraints.java -- Constraints for GridBag layout manager
!    Copyright (C) 2000, 2001, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,48 ****
  
  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;
--- 40,49 ----
  
  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;
diff -Nrcpad gcc-3.4.3/libjava/java/awt/GridBagLayout.java gcc-4.0.0/libjava/java/awt/GridBagLayout.java
*** gcc-3.4.3/libjava/java/awt/GridBagLayout.java	Fri Nov 14 22:44:29 2003
--- gcc-4.0.0/libjava/java/awt/GridBagLayout.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* GridBagLayout - Layout manager for components according to GridBagConstraints
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,49 ****
  package java.awt;
  
  import java.io.Serializable;
  import java.util.Hashtable;
  
  /**
!  * @author Michael Koch <konqueror@gmx.de>
!  * @author Jeroen Frijters <jeroen@frijters.net>
   */
  public class GridBagLayout
      implements Serializable, LayoutManager2
--- 39,51 ----
  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
*************** public class GridBagLayout
*** 54,60 ****
--- 56,69 ----
      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 class GridBagLayout
*** 66,71 ****
--- 75,81 ----
      public GridBagLayout ()
      {
  	this.comptable = new Hashtable();
+ 	this.internalcomptable = new Hashtable();
  	this.defaultConstraints= new GridBagConstraints();
      }
  
*************** public class GridBagLayout
*** 149,155 ****
  
      public void layoutContainer (Container parent)
      {
! 	arrangeGrid (parent);
      }
  
      public float getLayoutAlignmentX (Container target)
--- 159,165 ----
  
      public void layoutContainer (Container parent)
      {
!       arrangeGrid (parent);
      }
  
      public float getLayoutAlignmentX (Container target)
*************** public class GridBagLayout
*** 213,218 ****
--- 223,242 ----
  	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 class GridBagLayout
*** 302,308 ****
       */
      protected void AdjustForGravity (GridBagConstraints gbc, Rectangle rect)
      {
! 	adjustForGravity (gbc, rect);
      }
  
      /**
--- 326,333 ----
       */
      protected void AdjustForGravity (GridBagConstraints gbc, Rectangle rect)
      {
!       // FIXME
!       throw new Error ("Not implemented");
      }
  
      /**
*************** public class GridBagLayout
*** 310,316 ****
       */
      protected void ArrangeGrid (Container parent)
      {
! 	arrangeGrid (parent);
      }
  
      /**
--- 335,450 ----
       */
      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);
      }
  
      /**
*************** public class GridBagLayout
*** 318,324 ****
       */
      protected GridBagLayoutInfo GetLayoutInfo (Container parent, int sizeflag)
      {
! 	return getLayoutInfo (parent, sizeflag);
      }
  
      /**
--- 452,820 ----
       */
      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));
!                           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;
      }
  
      /**
*************** public class GridBagLayout
*** 326,332 ****
       */
      protected Dimension GetMinSize (Container parent, GridBagLayoutInfo info)
      {
! 	return getMinSize (parent, info);
      }
  
      /**
--- 822,834 ----
       */
      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);
      }
  
      /**
*************** public class GridBagLayout
*** 334,364 ****
       */
      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);
      }
  
      private void calcCellSizes (int[] sizes, double[] weights, int range)
      {
! 	int diff = range - sumIntArray (sizes);
  
! 	if (diff == 0)
! 	    return;
!     
! 	double weight = sumDoubleArray (weights);
  
! 	for (int i = 0; i < sizes.length; i++)
! 	{
! 	    sizes [i] += (int) (((double) diff) * weights [i] / weight );
  
! 	    if (sizes [i] < 0)
! 		sizes [i] = 0;
! 	}
      }
  
      private void dumpLayoutInfo (GridBagLayoutInfo info)
--- 836,1006 ----
       */
      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
!         {
!           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)
*************** public class GridBagLayout
*** 404,519 ****
       */
      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 = lookupConstraints (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.preferredSize();
! 
! 	    // 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);
! 
      }
  
      /**
--- 1046,1052 ----
       */
      protected void arrangeGrid (Container parent)
      {
!       ArrangeGrid (parent);
      }
  
      /**
*************** public class GridBagLayout
*** 521,680 ****
       */
      protected GridBagLayoutInfo getLayoutInfo (Container parent, int sizeflag)
      {
! 	if (sizeflag != MINSIZE && sizeflag != PREFERREDSIZE)
! 	    throw new IllegalArgumentException();
! 
! 	Dimension parentDim = parent.size();
! 	Insets parentInsets = parent.insets();
! 	parentDim.width -= parentInsets.left + parentInsets.right;
! 	parentDim.height -= parentInsets.top + parentInsets.bottom;
!    
! 	int x = 0;
! 	int y = 0;
! 	int max_x = 0;
! 	int max_y = 0;
! 
! 	// first we figure out how many rows/columns
! 	Component[] components = parent.getComponents();
! 	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 = lookupConstraints (component);
! 		
! 	    if(constraints.gridx == GridBagConstraints.RELATIVE)
! 		constraints.gridx = x;
! 
! 	    if(constraints.gridy == GridBagConstraints.RELATIVE)
! 		constraints.gridy = y;
! 		
! 	    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));
! 
! 	    if(constraints.gridwidth == GridBagConstraints.REMAINDER)
! 	    {
! 		x = 0;
! 		y++;
! 	    }
! 	    else
! 	    {
! 		x = constraints.gridx + Math.max(1, constraints.gridwidth);
! 		y = constraints.gridy;
! 	    }
! 	}
! 	
! 	GridBagLayoutInfo info = new GridBagLayoutInfo(max_x, max_y);
! 
! 	for (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 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 = lookupConstraints (component);
! 
! 		// first we fix up any REMAINDER cells
! 		if(constraints.gridwidth == GridBagConstraints.REMAINDER)
! 		{
! 		    constraints.gridwidth = max_x - constraints.gridx;
! 		}
! 		if(constraints.gridheight == GridBagConstraints.REMAINDER)
! 		{
! 		    constraints.gridheight = max_y - constraints.gridy;
! 		}
! 
! 		if(constraints.gridx + constraints.gridwidth - 1 == x)
! 		{
! 		    int width = (sizeflag == PREFERREDSIZE) ?
! 			component.preferredSize().width :
! 			component.minimumSize().width;
! 		    if(constraints.insets != null)
! 		    {
! 			width += constraints.insets.left + constraints.insets.right;
! 		    }
! 		    width += constraints.ipadx;
! 		    for(int w = 1; w < constraints.gridwidth; w++)
! 		    {
! 			width -= info.colWidths[x - w];
! 		    }
! 		    info.colWidths[x] = Math.max(info.colWidths[x], width);
! 		    info.colWeights[x] =
! 			Math.max(info.colWeights[x], constraints.weightx);
! 		}
! 	    }
! 	}
! 
! 	for (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];
! 	    }
! 	    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 = lookupConstraints (component);
! 
! 		if(constraints.gridy + constraints.gridheight - 1 == y)
! 		{
! 		    int height = (sizeflag == PREFERREDSIZE) ?
! 			component.preferredSize().height :
! 			component.minimumSize().height;
! 		    if(constraints.insets != null)
! 		    {
! 			height += constraints.insets.top + constraints.insets.bottom;
! 		    } 
! 		    height += constraints.ipady;
! 		    for(int h = 1; h < constraints.gridheight; h++)
! 		    {
! 			height -= info.rowHeights[y - h];
! 		    }
! 		    info.rowHeights[y] = Math.max(info.rowHeights[y], height);
! 		    info.rowWeights[y] =
! 			Math.max(info.rowWeights[y], constraints.weighty);
! 		}
! 	    }
! 	}
! 
! 	calcCellSizes (info.colWidths, info.colWeights, parentDim.width);
! 	calcCellSizes (info.rowHeights, info.rowWeights, parentDim.height);
! 
! 	int totalWidth = sumIntArray(info.colWidths);
! 	int totalHeight = sumIntArray(info.rowHeights);
! 	info.pos_x = parentInsets.left + (parentDim.width - totalWidth) / 2;
! 	info.pos_y = parentInsets.top + (parentDim.height - totalHeight) / 2;
! 
! 	// DEBUG
! 	//dumpLayoutInfo (info);
! 
! 	return info;
      }
  
      /**
--- 1054,1060 ----
       */
      protected GridBagLayoutInfo getLayoutInfo (Container parent, int sizeflag)
      {
!       return GetLayoutInfo (parent, sizeflag);
      }
  
      /**
*************** public class GridBagLayout
*** 682,688 ****
       */
      protected void adjustForGravity (GridBagConstraints gbc, Rectangle rect)
      {
! 	// FIXME
! 	throw new Error ("Not implemented");
      }
  }
--- 1062,1067 ----
       */
      protected void adjustForGravity (GridBagConstraints gbc, Rectangle rect)
      {
!       AdjustForGravity (gbc, rect);
      }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/GridBagLayoutInfo.java gcc-4.0.0/libjava/java/awt/GridBagLayoutInfo.java
*** gcc-3.4.3/libjava/java/awt/GridBagLayoutInfo.java	Fri Jul 25 12:50:44 2003
--- gcc-4.0.0/libjava/java/awt/GridBagLayoutInfo.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* GridBagLayoutInfo -
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GridBagLayoutInfo -
!    Copyright (C) 2003, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
  import java.io.Serializable;
  
  /**
!  * @author Michael Koch <konqueror@gmx.de>
   */
  class GridBagLayoutInfo implements Serializable
  {
--- 41,47 ----
  import java.io.Serializable;
  
  /**
!  * @author Michael Koch (konqueror@gmx.de)
   */
  class GridBagLayoutInfo implements Serializable
  {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/GridLayout.java gcc-4.0.0/libjava/java/awt/GridLayout.java
*** gcc-3.4.3/libjava/java/awt/GridLayout.java	Sun Nov 10 23:11:21 2002
--- gcc-4.0.0/libjava/java/awt/GridLayout.java	Thu Feb 17 07:48:24 2005
***************
*** 1,6 ****
! // GridLayout.java - Grid-based layout engine
! 
! /* Copyright (C) 1999, 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* GridLayout.java -- Grid-based layout engine
!    Copyright (C) 1999, 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 53,59 ****
   * 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
--- 52,58 ----
   * 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
*************** public class GridLayout implements Layou
*** 63,69 ****
    /** Add a new component to the layout.  This particular implementation
     * does nothing.
     * @param name The name of the component to add.
!    * @param component The component to add.
     */
    public void addLayoutComponent (String name, Component comp)
    {
--- 62,68 ----
    /** 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)
    {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/HeadlessException.java gcc-4.0.0/libjava/java/awt/HeadlessException.java
*** gcc-3.4.3/libjava/java/awt/HeadlessException.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/HeadlessException.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* HeadlessException.java -- operation not possible in headless environment
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* HeadlessException.java -- operation not possible in headless environment
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 42,48 ****
   * 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
   */
--- 42,48 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/IllegalComponentStateException.java gcc-4.0.0/libjava/java/awt/IllegalComponentStateException.java
*** gcc-3.4.3/libjava/java/awt/IllegalComponentStateException.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/IllegalComponentStateException.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* IllegalComponentStateException.java -- bad component state
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* IllegalComponentStateException.java -- bad component state
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Image.java gcc-4.0.0/libjava/java/awt/Image.java
*** gcc-3.4.3/libjava/java/awt/Image.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/Image.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Image.java -- superclass for images
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Image.java -- superclass for images
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package java.awt;
  
! import java.awt.image.AreaAveragingScaleFilter;
  import java.awt.image.ImageObserver;
  import java.awt.image.ImageProducer;
  import java.awt.image.ReplicateScaleFilter;
--- 38,44 ----
  
  package java.awt;
  
! import java.awt.image.FilteredImageSource;
  import java.awt.image.ImageObserver;
  import java.awt.image.ImageProducer;
  import java.awt.image.ReplicateScaleFilter;
*************** import java.awt.image.ReplicateScaleFilt
*** 46,52 ****
  /**
   * 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
   */
--- 46,52 ----
  /**
   * 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
*** 179,185 ****
     */
    public Image getScaledInstance(int width, int height, int flags)
    {
!     throw new Error("not implemented");
    }
  
    /**
--- 179,198 ----
     */
    public Image getScaledInstance(int width, int height, int flags)
    {
!     switch (flags)
!     {
!       case SCALE_DEFAULT:
!       case SCALE_FAST:
!       case SCALE_REPLICATE:
!         ImageProducer producer =
!           new FilteredImageSource(this.getSource(),
!                                   new ReplicateScaleFilter(width, height));
!         return Toolkit.getDefaultToolkit().createImage(producer);
!       case SCALE_SMOOTH:
!       case SCALE_AREA_AVERAGING:
!       default:
!         throw new Error("not implemented");
!     }
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Insets.java gcc-4.0.0/libjava/java/awt/Insets.java
*** gcc-3.4.3/libjava/java/awt/Insets.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/Insets.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Insets.java -- information about a container border
!    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Insets.java -- information about a container border
!    Copyright (C) 1999, 2000, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 43,50 ****
  /**
   * 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
--- 43,50 ----
  /**
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/ItemSelectable.java gcc-4.0.0/libjava/java/awt/ItemSelectable.java
*** gcc-3.4.3/libjava/java/awt/ItemSelectable.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/ItemSelectable.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* ItemSelectable.java -- items that can be selected
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ItemSelectable.java -- items that can be selected
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.ItemListener;
*** 44,50 ****
   * 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
   */
--- 44,50 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/JobAttributes.java gcc-4.0.0/libjava/java/awt/JobAttributes.java
*** gcc-3.4.3/libjava/java/awt/JobAttributes.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/JobAttributes.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* JobAttributes.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JobAttributes.java -- 
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
  /**
   * Needs documentation...
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.3
   * @status updated to 1.4, lacks documentation
   */
--- 41,47 ----
  /**
   * Needs documentation...
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.3
   * @status updated to 1.4, lacks documentation
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/KeyEventDispatcher.java gcc-4.0.0/libjava/java/awt/KeyEventDispatcher.java
*** gcc-3.4.3/libjava/java/awt/KeyEventDispatcher.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/KeyEventDispatcher.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* KeyEventDispatcher.java -- dispatches key events
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyEventDispatcher.java -- dispatches key events
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.KeyEvent;
*** 50,56 ****
   * 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
--- 50,56 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/KeyEventPostProcessor.java gcc-4.0.0/libjava/java/awt/KeyEventPostProcessor.java
*** gcc-3.4.3/libjava/java/awt/KeyEventPostProcessor.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/KeyEventPostProcessor.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* KeyEventPostProcessor.java -- performs actions after a key event dispatch
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyEventPostProcessor.java -- performs actions after a key event dispatch
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.KeyEvent;
*** 50,56 ****
   * 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
--- 50,56 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/KeyboardFocusManager.java gcc-4.0.0/libjava/java/awt/KeyboardFocusManager.java
*** gcc-3.4.3/libjava/java/awt/KeyboardFocusManager.java	Thu Feb 13 07:02:12 2003
--- gcc-4.0.0/libjava/java/awt/KeyboardFocusManager.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* KeyboardFocusManager.java -- manage component focusing via the keyboard
!    Copyright (C) 2002 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyboardFocusManager.java -- manage component focusing via the keyboard
!    Copyright (C) 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 38,44 ----
  
  package java.awt;
  
+ import java.awt.event.FocusEvent;
  import java.awt.event.KeyEvent;
  import java.beans.PropertyChangeListener;
  import java.beans.PropertyChangeSupport;
*************** import java.beans.PropertyVetoException;
*** 45,72 ****
  import java.beans.VetoableChangeListener;
  import java.beans.VetoableChangeSupport;
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.HashSet;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Set;
  
  /**
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.4
-  * @status partially updated to 1.4, needs documentation.
   */
  public abstract class KeyboardFocusManager
    implements KeyEventDispatcher, KeyEventPostProcessor
  {
    public static final int FORWARD_TRAVERSAL_KEYS = 0;
    public static final int BACKWARD_TRAVERSAL_KEYS = 1;
    public static final int UP_CYCLE_TRAVERSAL_KEYS = 2;
    public static final int DOWN_CYCLE_TRAVERSAL_KEYS = 3;
  
    private static final Set DEFAULT_FORWARD_KEYS;
    private static final Set DEFAULT_BACKWARD_KEYS;
    static
    {
      Set s = new HashSet();
--- 46,148 ----
  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();
*************** public abstract class KeyboardFocusManag
*** 83,314 ****
      DEFAULT_BACKWARD_KEYS = Collections.unmodifiableSet(s);
    }
  
!   private static KeyboardFocusManager current
!     = new DefaultKeyboardFocusManager();
  
!   // XXX Not implemented correctly. I think a good implementation here may
!   // be to have permanentFocusOwner be null, and fall back to focusOwner,
!   // unless a temporary focus change is in effect.
!   private static Component focusOwner;
!   private static Component permanentFocusOwner;
  
!   private static Window focusedWindow;
!   private static Window activeWindow;
!   private static Container focusCycleRoot;
  
    private FocusTraversalPolicy defaultPolicy;
!   private Set[] defaultFocusKeys = new Set[] {
      DEFAULT_FORWARD_KEYS, DEFAULT_BACKWARD_KEYS,
      Collections.EMPTY_SET, Collections.EMPTY_SET
    };
  
!   private final PropertyChangeSupport propertyChangeSupport
!     = new PropertyChangeSupport(this);
!   private final VetoableChangeSupport vetoableChangeSupport
!     = new VetoableChangeSupport(this);
    private final ArrayList keyEventDispatchers = new ArrayList();
    private final ArrayList keyEventPostProcessors = new ArrayList();
  
! 
!   public KeyboardFocusManager()
    {
    }
  
!   public static KeyboardFocusManager getCurrentKeyboardFocusManager()
    {
!     // XXX Need a way to divide this into contexts.
!     return current;
    }
  
!   public static void setCurrentKeyboardFocusManager(KeyboardFocusManager m)
    {
!     SecurityManager sm = System.getSecurityManager();
      if (sm != null)
!       sm.checkPermission(new AWTPermission("replaceKeyboardFocusManager"));
!     // XXX Need a way to divide this into contexts.
!     current = m == null ? new DefaultKeyboardFocusManager() : m;
    }
  
!   public Component getFocusOwner()
    {
!     // XXX Need an easy way to test if this thread is in the context of the
!     // global focus owner, to avoid creating the exception in the first place.
!     try
!       {
!         return getGlobalFocusOwner();
!       }
!     catch (SecurityException e)
!       {
!         return null;
!       }
    }
  
!   protected Component getGlobalFocusOwner()
    {
!     // XXX Need a way to test if this thread is in the context of the focus
!     // owner, and throw a SecurityException if that is the case.
!     // XXX Implement.
!     return focusOwner;
    }
  
!   protected void setGlobalFocusOwner(Component owner)
    {
-     // XXX Should this send focus events to the components involved?
      if (owner == null || owner.focusable)
        {
!         firePropertyChange("focusOwner", focusOwner, owner);
!         try
            {
!             fireVetoableChange("focusOwner", focusOwner, owner);
!             focusOwner = owner;
            }
!         catch (PropertyVetoException e)
            {
            }
        }
    }
  
!   public void clearGlobalFocusOwner()
!   {
!     // XXX Is this enough?
!     setGlobalFocusOwner(null);
!   }
! 
!   public Component getPermanentFocusOwner()
    {
!     // XXX Need an easy way to test if this thread is in the context of the
!     // global focus owner, to avoid creating the exception in the first place.
!     try
!       {
!         return getGlobalPermanentFocusOwner();
!       }
!     catch (SecurityException e)
!       {
!         return null;
!       }
    }
  
!   protected Component getGlobalPermanentFocusOwner()
    {
!     // XXX Need a way to test if this thread is in the context of the focus
!     // owner, and throw a SecurityException if that is the case.
!     // XXX Implement.
!     return permanentFocusOwner == null ? focusOwner : permanentFocusOwner;
    }
  
!   protected void setGlobalPermanentFocusOwner(Component focusOwner)
    {
-     // XXX Should this send focus events to the components involved?
      if (focusOwner == null || focusOwner.focusable)
!       {
!         firePropertyChange("permanentFocusOwner", permanentFocusOwner,
!                            focusOwner);
!         try
!           {
!             fireVetoableChange("permanentFocusOwner", permanentFocusOwner,
!                                focusOwner);
!             permanentFocusOwner = focusOwner;
!           }
!         catch (PropertyVetoException e)
!           {
!           }
!       }
    }
  
!   public Window getFocusedWindow()
    {
!     // XXX Need an easy way to test if this thread is in the context of the
!     // global focus owner, to avoid creating the exception in the first place.
!     try
!       {
!         return getGlobalFocusedWindow();
!       }
!     catch (SecurityException e)
!       {
!         return null;
!       }
    }
  
!   protected Window getGlobalFocusedWindow()
    {
!     // XXX Need a way to test if this thread is in the context of the focus
!     // owner, and throw a SecurityException if that is the case.
!     // XXX Implement.
!     return focusedWindow;
    }
  
!   protected void setGlobalFocusedWindow(Window window)
    {
-     // XXX Should this send focus events to the windows involved?
      if (window == null || window.focusable)
!       {
!         firePropertyChange("focusedWindow", focusedWindow, window);
!         try
!           {
!             fireVetoableChange("focusedWindow", focusedWindow, window);
!             focusedWindow = window;
!           }
!         catch (PropertyVetoException e)
!           {
!           }
!       }
    }
  
    public Window getActiveWindow()
    {
!     // XXX Need an easy way to test if this thread is in the context of the
!     // global focus owner, to avoid creating the exception in the first place.
!     try
!       {
!         return getGlobalActiveWindow();
!       }
!     catch (SecurityException e)
!       {
!         return null;
!       }
    }
  
    protected Window getGlobalActiveWindow()
    {
!     // XXX Need a way to test if this thread is in the context of the focus
!     // owner, and throw a SecurityException if that is the case.
!     // XXX Implement.
!     return activeWindow;
    }
  
    protected void setGlobalActiveWindow(Window window)
    {
!     // XXX Should this send focus events to the windows involved?
!     firePropertyChange("activeWindow", activeWindow, window);
!     try
!       {
!         fireVetoableChange("activeWindow", activeWindow, window);
!         activeWindow = window;
!       }
!     catch (PropertyVetoException e)
!       {
!       }
    }
  
!   public FocusTraversalPolicy getDefaultFocusTraversalPolicy()
    {
      if (defaultPolicy == null)
!       defaultPolicy = new DefaultFocusTraversalPolicy();
      return defaultPolicy;
    }
  
!   public void setDefaultFocusTraversalPolicy(FocusTraversalPolicy policy)
    {
      if (policy == null)
!       throw new IllegalArgumentException();
!     firePropertyChange("defaultFocusTraversalPolicy", defaultPolicy, policy);
      defaultPolicy = policy;
    }
  
!   public void setDefaultFocusTraversalKeys(int id, Set keystrokes)
    {
      if (keystrokes == null)
!       throw new IllegalArgumentException();
      Set sa;
      Set sb;
      Set sc;
--- 159,574 ----
      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 FocusTraveralPolicy} 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;
*************** public abstract class KeyboardFocusManag
*** 340,420 ****
          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;
    }
  
!   public Set getDefaultFocusTraversalKeys(int id)
    {
      if (id < FORWARD_TRAVERSAL_KEYS || id > DOWN_CYCLE_TRAVERSAL_KEYS)
!       throw new IllegalArgumentException();
      return defaultFocusKeys[id];
    }
  
!   public Container getCurrentFocusCycleRoot()
    {
!     // XXX Need an easy way to test if this thread is in the context of the
!     // global focus owner, to avoid creating the exception in the first place.
!     try
!       {
!         return getGlobalCurrentFocusCycleRoot();
!       }
!     catch (SecurityException e)
!       {
!         return null;
!       }
    }
  
!   protected Container getGlobalCurrentFocusCycleRoot()
    {
!     // XXX Need a way to test if this thread is in the context of the focus
!     // owner, and throw a SecurityException if that is the case.
!     // XXX Implement.
!     return focusCycleRoot;
    }
  
!   public void setGlobalCurrentFocusCycleRoot(Container cycleRoot)
    {
!     firePropertyChange("currentFocusCycleRoot", focusCycleRoot, cycleRoot);
!     focusCycleRoot = cycleRoot;
    }
  
    public void addPropertyChangeListener(PropertyChangeListener l)
    {
      if (l != null)
        propertyChangeSupport.addPropertyChangeListener(l);
    }
  
    public void removePropertyChangeListener(PropertyChangeListener l)
    {
      if (l != null)
        propertyChangeSupport.removePropertyChangeListener(l);
    }
  
    public PropertyChangeListener[] getPropertyChangeListeners()
    {
      return propertyChangeSupport.getPropertyChangeListeners();
    }
  
    public void addPropertyChangeListener(String name, PropertyChangeListener l)
    {
      if (l != null)
        propertyChangeSupport.addPropertyChangeListener(name, l);
    }
  
    public void removePropertyChangeListener(String name,
                                             PropertyChangeListener l)
    {
--- 600,776 ----
          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)
    {
*************** public abstract class KeyboardFocusManag
*** 422,460 ****
--- 778,894 ----
        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)
    {
*************** public abstract class KeyboardFocusManag
*** 462,556 ****
        vetoableChangeSupport.removeVetoableChangeListener(name, l);
    }
  
    public VetoableChangeListener[] getVetoableChangeListeners(String name)
    {
      return vetoableChangeSupport.getVetoableChangeListeners(name);
    }
  
    protected void fireVetoableChange(String name, Object o, Object n)
      throws PropertyVetoException
    {
      vetoableChangeSupport.fireVetoableChange(name, o, n);
    }
  
    public void addKeyEventDispatcher(KeyEventDispatcher dispatcher)
    {
      if (dispatcher != null)
        keyEventDispatchers.add(dispatcher);
    }
  
    public void removeKeyEventDispatcher(KeyEventDispatcher dispatcher)
    {
      keyEventDispatchers.remove(dispatcher);
    }
  
!   protected List getKeyEventDispatchers()
    {
!     return (List) keyEventDispatchers.clone();
    }
  
!   public void addKeyEventPostProcessor(KeyEventPostProcessor postProcessor)
    {
      if (postProcessor != null)
!       keyEventPostProcessors.add(postProcessor);
    }
  
!   public void removeKeyEventPostProcessor(KeyEventPostProcessor postProcessor)
    {
!     keyEventPostProcessors.remove(postProcessor);
    }
  
!   protected List getKeyEventPostProcessors()
    {
!     return (List) keyEventPostProcessors.clone();
    }
  
!   public abstract boolean dispatchEvent(AWTEvent e);
  
!   public final void redispatchEvent(Component target, AWTEvent e)
    {
!     throw new Error("not implemented");
    }
  
!   public abstract boolean dispatchKeyEvent(KeyEvent e);
  
!   public abstract boolean postProcessKeyEvent(KeyEvent e);
  
!   public abstract void processKeyEvent(Component focused, KeyEvent e);
  
!   protected abstract void enqueueKeyEvents(long after, Component untilFocused);
  
!   protected abstract void dequeueKeyEvents(long after, Component untilFocused);
  
!   protected abstract void discardKeyEvents(Component comp);
  
    public abstract void focusNextComponent(Component comp);
  
    public abstract void focusPreviousComponent(Component comp);
  
    public abstract void upFocusCycle(Component comp);
  
    public abstract void downFocusCycle(Container cont);
  
    public final void focusNextComponent()
    {
!     focusNextComponent(focusOwner);
    }
  
    public final void focusPreviousComponent()
    {
!     focusPreviousComponent(focusOwner);
    }
  
    public final void upFocusCycle()
    {
!     upFocusCycle(focusOwner);
    }
  
    public final void downFocusCycle()
    {
      if (focusOwner instanceof Container
!         && ((Container) focusOwner).isFocusCycleRoot())
!       downFocusCycle((Container) focusOwner);
    }
! } // class KeyboardFocusManager
--- 896,1436 ----
        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
!    * @see setGlobalPermanentFocusOwner
!    * @see setGlobalFocusedWindow
!    * @see setGlobalActiveWindow
!    * @see setGlobalCurrentFocusCycleRoot
!    */
!   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-3.4.3/libjava/java/awt/Label.java gcc-4.0.0/libjava/java/awt/Label.java
*** gcc-3.4.3/libjava/java/awt/Label.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/Label.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Label.java -- Java label widget
!    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Label.java -- Java label widget
!    Copyright (C) 1999, 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,52 ****
  package java.awt;
  
  import java.awt.peer.LabelPeer;
  import javax.accessibility.Accessible;
  
  /**
    * This component is used for displaying simple text strings that cannot
!   * be edited.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Tom Tromey <tromey@cygnus.com>
    */
  public class Label extends Component implements Accessible
  {
--- 39,56 ----
  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
  {
*************** addNotify()
*** 240,246 ****
  /**
    * Returns a parameter string useful for debugging.
    *
!   * @param A debugging string.
    */
  protected String
  paramString()
--- 244,250 ----
  /**
    * Returns a parameter string useful for debugging.
    *
!   * @return A debugging string.
    */
  protected String
  paramString()
*************** paramString()
*** 249,253 ****
--- 253,314 ----
  	  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-3.4.3/libjava/java/awt/LayoutManager.java gcc-4.0.0/libjava/java/awt/LayoutManager.java
*** gcc-3.4.3/libjava/java/awt/LayoutManager.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/LayoutManager.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* LayoutManager.java -- lay out elements in a Container
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LayoutManager.java -- lay out elements in a Container
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
  /**
   * 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
--- 41,47 ----
  /**
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/LayoutManager2.java gcc-4.0.0/libjava/java/awt/LayoutManager2.java
*** gcc-3.4.3/libjava/java/awt/LayoutManager2.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/LayoutManager2.java	Tue Nov 30 23:58:41 2004
*************** package java.awt;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
*************** public interface LayoutManager2 extends 
*** 52,63 ****
  {
    /**
     * Adds the specified component to the layout, with the specified
!    * constraint object.
     *
     * @param component the component to add
!    * @param constraint the constraint to satisfy
     */
!   void addLayoutComponent(Component component, Object contraint);
  
    /**
     * Determines the maximum size of the specified target container.
--- 52,63 ----
  {
    /**
     * 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.
diff -Nrcpad gcc-3.4.3/libjava/java/awt/List.java gcc-4.0.0/libjava/java/awt/List.java
*** gcc-3.4.3/libjava/java/awt/List.java	Fri Dec 19 02:53:36 2003
--- gcc-4.0.0/libjava/java/awt/List.java	Wed Feb 16 20:01:52 2005
***************
*** 1,5 ****
  /* List.java -- A listbox widget
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* List.java -- A listbox widget
!    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.ItemListener;
*** 45,51 ****
--- 45,57 ----
  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
*************** private ItemListener item_listeners;
*** 105,110 ****
--- 111,117 ----
  // The list of ActionListeners for this object.
  private ActionListener action_listeners;
  
+ 
  /*************************************************************************/
  
  /*
*************** List()
*** 129,135 ****
    * Initializes a new instance of <code>List</code> with the specified
    * number of visible lines and multi-select disabled.
    *
!   * @param lines The number of visible lines in the list.
    *
    * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
    */
--- 136,142 ----
    * 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.
    */
*************** List(int rows)
*** 145,151 ****
    * Initializes a new instance of <code>List</code> with the specified
    * number of lines and the specified multi-select setting.
    *
!   * @param lines The number of visible lines in the list.
    * @param multipleMode <code>true</code> if multiple lines can be selected
    * simultaneously, <code>false</code> otherwise.
    *
--- 152,158 ----
    * 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.
    *
*************** List(int rows, boolean multipleMode)
*** 175,181 ****
  public int
  getItemCount()
  {
!   return(items.size());
  }
  
  /*************************************************************************/
--- 182,188 ----
  public int
  getItemCount()
  {
!   return countItems ();
  }
  
  /*************************************************************************/
*************** getItemCount()
*** 191,197 ****
  public int
  countItems()
  {
!   return(getItemCount());
  }
  
  /*************************************************************************/
--- 198,204 ----
  public int
  countItems()
  {
!   return items.size ();
  }
  
  /*************************************************************************/
*************** getRows()
*** 249,255 ****
  public boolean
  isMultipleMode()
  {
!   return(multipleMode);
  }
  
  /*************************************************************************/
--- 256,262 ----
  public boolean
  isMultipleMode()
  {
!   return allowsMultipleSelections ();
  }
  
  /*************************************************************************/
*************** isMultipleMode()
*** 266,272 ****
  public boolean
  allowsMultipleSelections()
  {
!   return(multipleMode);
  }
  
  /*************************************************************************/
--- 273,279 ----
  public boolean
  allowsMultipleSelections()
  {
!   return multipleMode;
  }
  
  /*************************************************************************/
*************** allowsMultipleSelections()
*** 281,292 ****
  public void
  setMultipleMode(boolean multipleMode)
  {
!   this.multipleMode = multipleMode;
!   if (peer != null)
!     {
!       ListPeer l = (ListPeer) peer;
!       l.setMultipleMode (multipleMode);
!     }
  }
  
  /*************************************************************************/
--- 288,294 ----
  public void
  setMultipleMode(boolean multipleMode)
  {
!   setMultipleSelections (multipleMode);
  }
  
  /*************************************************************************/
*************** setMultipleMode(boolean multipleMode)
*** 303,309 ****
  public void
  setMultipleSelections(boolean multipleMode)
  {
!   setMultipleMode(multipleMode);
  }
  
  /*************************************************************************/
--- 305,315 ----
  public void
  setMultipleSelections(boolean multipleMode)
  {
!   this.multipleMode = multipleMode;
! 
!   ListPeer peer = (ListPeer) getPeer ();
!   if (peer != null)
!     peer.setMultipleMode (multipleMode);
  }
  
  /*************************************************************************/
*************** setMultipleSelections(boolean multipleMo
*** 316,322 ****
  public Dimension
  getMinimumSize()
  {
!   return(getMinimumSize(rows));
  }
  
  /*************************************************************************/
--- 322,328 ----
  public Dimension
  getMinimumSize()
  {
!   return getMinimumSize (getRows ());
  }
  
  /*************************************************************************/
*************** getMinimumSize()
*** 332,338 ****
  public Dimension
  minimumSize()
  {
!   return(getMinimumSize(rows));
  }
  
  /*************************************************************************/
--- 338,344 ----
  public Dimension
  minimumSize()
  {
!   return minimumSize (getRows ());
  }
  
  /*************************************************************************/
*************** minimumSize()
*** 348,358 ****
  public Dimension
  getMinimumSize(int rows)
  {
!   ListPeer lp = (ListPeer)getPeer();
!   if (lp != null)
!     return(lp.minimumSize(rows));
!   else
!     return(new Dimension(0,0));
  }
  
  /*************************************************************************/
--- 354,360 ----
  public Dimension
  getMinimumSize(int rows)
  {
!   return minimumSize (rows);
  }
  
  /*************************************************************************/
*************** getMinimumSize(int rows)
*** 371,377 ****
  public Dimension
  minimumSize(int rows)
  {
!   return(getMinimumSize(rows));
  }
  
  /*************************************************************************/
--- 373,383 ----
  public Dimension
  minimumSize(int rows)
  {
!   ListPeer peer = (ListPeer) getPeer ();
!   if (peer != null)
!     return peer.minimumSize (rows);
!   else
!     return new Dimension (0, 0);
  }
  
  /*************************************************************************/
*************** minimumSize(int rows)
*** 384,390 ****
  public Dimension
  getPreferredSize()
  {
!   return(getPreferredSize(rows));
  }
  
  /*************************************************************************/
--- 390,396 ----
  public Dimension
  getPreferredSize()
  {
!   return getPreferredSize (getRows ());
  }
  
  /*************************************************************************/
*************** getPreferredSize()
*** 400,406 ****
  public Dimension
  preferredSize()
  {
!   return(getPreferredSize(rows));
  }
  
  /*************************************************************************/
--- 406,412 ----
  public Dimension
  preferredSize()
  {
!   return preferredSize (getRows ());
  }
  
  /*************************************************************************/
*************** preferredSize()
*** 416,426 ****
  public Dimension
  getPreferredSize(int rows)
  {
!   ListPeer lp = (ListPeer)getPeer();
!   if (lp != null)
!     return(lp.preferredSize(rows));
!   else
!     return(new Dimension(0,0));
  }
  
  /*************************************************************************/
--- 422,428 ----
  public Dimension
  getPreferredSize(int rows)
  {
!   return preferredSize (rows);
  }
  
  /*************************************************************************/
*************** getPreferredSize(int rows)
*** 439,445 ****
  public Dimension
  preferredSize(int rows)
  {
!   return(getPreferredSize(rows));
  }
  
  /*************************************************************************/
--- 441,451 ----
  public Dimension
  preferredSize(int rows)
  {
!   ListPeer peer = (ListPeer) getPeer ();
!   if (peer != null)
!     return peer.preferredSize (rows);
!   else
!     return new Dimension (0, 0);
  }
  
  /*************************************************************************/
*************** preferredSize(int rows)
*** 452,458 ****
  public void
  add(String item)
  {
!   add(item, -1);
  }
  
  /*************************************************************************/
--- 458,464 ----
  public void
  add(String item)
  {
!   add (item, -1);
  }
  
  /*************************************************************************/
*************** add(String item)
*** 467,473 ****
  public void
  addItem(String item)
  {
!   addItem(item, -1);
  }
  
  /*************************************************************************/
--- 473,479 ----
  public void
  addItem(String item)
  {
!   addItem (item, -1);
  }
  
  /*************************************************************************/
*************** addItem(String item)
*** 484,499 ****
  public void
  add(String item, int index)
  {
!   if ((index == -1) || (index >= items.size()))
!     items.addElement(item);
!   else
!     items.insertElementAt(item, index);
! 
!   if (peer != null)
!     {
!       ListPeer l = (ListPeer) peer;
!       l.add (item, index);
!     }
  }
  
  /*************************************************************************/
--- 490,496 ----
  public void
  add(String item, int index)
  {
!   addItem (item, index);
  }
  
  /*************************************************************************/
*************** add(String item, int index)
*** 512,518 ****
  public void
  addItem(String item, int index)
  {
!   add(item, index);
  }
  
  /*************************************************************************/
--- 509,522 ----
  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);
  }
  
  /*************************************************************************/
*************** addItem(String item, int index)
*** 529,535 ****
  public void
  delItem(int index) throws IllegalArgumentException
  {
!   remove(index);
  }
  
  /*************************************************************************/
--- 533,543 ----
  public void
  delItem(int index) throws IllegalArgumentException
  {
!   items.removeElementAt (index);
! 
!   ListPeer peer = (ListPeer) getPeer ();
!   if (peer != null)
!     peer.delItems (index, index);
  }
  
  /*************************************************************************/
*************** delItem(int index) throws IllegalArgumen
*** 544,555 ****
  public void
  remove(int index) throws IllegalArgumentException
  {
!   items.removeElementAt (index);
!   if (peer != null)
!     {
!       ListPeer l = (ListPeer) peer;
!       l.delItems (index, index);
!     }
  }
  
  /*************************************************************************/
--- 552,558 ----
  public void
  remove(int index) throws IllegalArgumentException
  {
!   delItem (index);
  }
  
  /*************************************************************************/
*************** remove(String item) throws IllegalArgume
*** 613,624 ****
  public synchronized void
  removeAll()
  {
!   items.clear();
!   if (peer != null)
!     {
!       ListPeer l = (ListPeer) peer;
!       l.removeAll ();
!     }
  }
  
  /*************************************************************************/
--- 616,622 ----
  public synchronized void
  removeAll()
  {
!   clear ();
  }
  
  /*************************************************************************/
*************** removeAll()
*** 631,637 ****
  public void
  clear()
  {
!   removeAll();
  }
  
  /*************************************************************************/
--- 629,639 ----
  public void
  clear()
  {
!   items.clear();
! 
!   ListPeer peer = (ListPeer) getPeer ();
!   if (peer != null)
!     peer.removeAll ();
  }
  
  /*************************************************************************/
*************** getSelectedObjects()
*** 782,794 ****
  public boolean
  isIndexSelected(int index)
  {
!   int[] indexes = getSelectedIndexes();
! 
!   for (int i = 0; i < indexes.length; i++)
!     if (indexes[i] == index)
!       return(true);
! 
!   return(false);
  }
  
  /*************************************************************************/
--- 784,790 ----
  public boolean
  isIndexSelected(int index)
  {
!   return isSelected (index);
  }
  
  /*************************************************************************/
*************** isIndexSelected(int index)
*** 807,813 ****
  public boolean
  isSelected(int index)
  {
!   return(isIndexSelected(index));
  }
  
  /*************************************************************************/
--- 803,815 ----
  public boolean
  isSelected(int index)
  {
!   int[] indexes = getSelectedIndexes ();
! 
!   for (int i = 0; i < indexes.length; i++)
!     if (indexes[i] == index)
!       return true;
! 
!   return false;
  }
  
  /*************************************************************************/
*************** paramString()
*** 1080,1083 ****
--- 1082,1263 ----
    {
      return (ItemListener[]) getListeners (ItemListener.class);
    }
+   
+   // Accessibility internal class 
+   protected class AccessibleAWTList extends AccessibleAWTComponent
+     implements AccessibleSelection, ItemListener, ActionListener
+   {
+     protected class AccessibleAWTListChild extends AccessibleAWTComponent
+       implements Accessible
+     {
+       private int index;
+       private List parent;
+       
+       public AccessibleAWTListChild(List parent, int indexInParent)
+       {
+         this.parent = parent;
+         index = indexInParent;
+         if (parent == null)
+           index = -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(index))
+           states.add(AccessibleState.SELECTED);
+         return states;
+       }
+       
+       public int getAccessibleIndexInParent()
+       {
+         return index;
+       }
+ 
+     }
+     
+     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-3.4.3/libjava/java/awt/MediaTracker.java gcc-4.0.0/libjava/java/awt/MediaTracker.java
*** gcc-3.4.3/libjava/java/awt/MediaTracker.java	Wed Nov 12 00:37:34 2003
--- gcc-4.0.0/libjava/java/awt/MediaTracker.java	Tue Nov 30 23:58:41 2004
***************
*** 1,5 ****
  /* MediaTracker.java -- Class used for keeping track of images
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MediaTracker.java -- Class used for keeping track of images
!    Copyright (C) 1999, 2002i, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.awt;
  
- import java.util.ArrayList;
  import java.awt.image.ImageObserver;
  
  /**
    * This class is used for keeping track of the status of various media
--- 38,45 ----
  
  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
*************** public class MediaTracker implements jav
*** 81,92 ****
          status = ERRORED | COMPLETE;
        else if ((flags & ALLBITS) != 0)
          status = COMPLETE;
!       else
          status = LOADING;
!       
!       synchronized (MediaTracker.this)
        {
! 	MediaTracker.this.notifyAll();
        }
        // If status is not COMPLETE then we need more updates.
        return (status & COMPLETE) == 0;
--- 81,97 ----
          status = ERRORED | COMPLETE;
        else if ((flags & ALLBITS) != 0)
          status = COMPLETE;
!       else if ((flags & SOMEBITS) != 0)
          status = LOADING;
!       else
!         status = 0;
! 
!       if ((status & COMPLETE) == COMPLETE)
        {
!         synchronized (MediaTracker.this)
!         {
!           MediaTracker.this.notifyAll();
!         }
        }
        // If status is not COMPLETE then we need more updates.
        return (status & COMPLETE) == 0;
*************** public class MediaTracker implements jav
*** 106,112 ****
      e.next = head;
      head = e;
      // Start tracking image status.
!     target.checkImage(image, e);
    }
  
    public void addImage(Image image, int id, int width, int height)
--- 111,118 ----
      e.next = head;
      head = e;
      // Start tracking image status.
!     int flags = target.checkImage(image, e);
!     e.imageUpdate(image, flags, -1, -1, -1, -1);
    }
  
    public void addImage(Image image, int id, int width, int height)
*************** public class MediaTracker implements jav
*** 119,125 ****
      e.height = height;
      head = e;
      // Start tracking image status.
!     target.checkImage(image, width, height, e);
    }
  
    public boolean checkAll()
--- 125,132 ----
      e.height = height;
      head = e;
      // Start tracking image status.
!     int flags = target.checkImage(image, width, height, e);
!     e.imageUpdate(image, flags, -1, -1, width, height);
    }
  
    public boolean checkAll()
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Menu.java gcc-4.0.0/libjava/java/awt/Menu.java
*** gcc-3.4.3/libjava/java/awt/Menu.java	Wed Jun 11 10:37:47 2003
--- gcc-4.0.0/libjava/java/awt/Menu.java	Wed Feb 16 20:01:52 2005
***************
*** 1,5 ****
  /* Menu.java -- A Java AWT Menu
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Menu.java -- A Java AWT Menu
!    Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 40,47 ****
--- 40,51 ----
  
  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.
    *
*************** private Vector items = new Vector();
*** 71,87 ****
  /**
    * @serial Flag indicating whether or not this menu is a tear off
    */
! private boolean isTearOff;
  
  /**
    * @serial Indicates whether or not this is a help menu.
    */
  private boolean isHelpMenu;
  
! // From the serialization spec.  FIXME: what should it be?
! private int menuSerializedDataVersion;
  
! static final MenuItem separator = new MenuItem("-");
  
  /*************************************************************************/
  
--- 75,94 ----
  /**
    * @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 = "-";
  
  /*************************************************************************/
  
*************** Menu(String label, boolean isTearOff)
*** 133,139 ****
  {
    super(label);
  
!   this.isTearOff = isTearOff;
  
    if (label.equals("Help"))
      isHelpMenu = true;
--- 140,146 ----
  {
    super(label);
  
!   tearOff = isTearOff;
  
    if (label.equals("Help"))
      isHelpMenu = true;
*************** Menu(String label, boolean isTearOff)
*** 157,163 ****
  public boolean
  isTearOff()
  {
!   return(isTearOff);
  }
  
  /*************************************************************************/
--- 164,170 ----
  public boolean
  isTearOff()
  {
!   return(tearOff);
  }
  
  /*************************************************************************/
*************** isTearOff()
*** 170,176 ****
  public int
  getItemCount()
  {
!   return(items.size());
  }
  
  /**
--- 177,183 ----
  public int
  getItemCount()
  {
!   return countItems ();
  }
  
  /**
*************** getItemCount()
*** 182,188 ****
   */
  public int countItems ()
  {
!   return getItemCount ();
  }
   
  /*************************************************************************/
--- 189,195 ----
   */
  public int countItems ()
  {
!   return items.size ();
  }
   
  /*************************************************************************/
*************** add(String label)
*** 250,257 ****
    * @param item The menu item to add.
    * @param index The index of the menu item.
    *
-   * XXX: FIXME
-   *
    * @exception IllegalArgumentException If the index is less than zero.
    * @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
    */
--- 257,262 ----
*************** insert(MenuItem item, int index)
*** 261,272 ****
    if (index < 0)
      throw new IllegalArgumentException("Index is less than zero");
  
!   items.insertElementAt(item, index);
  
!   MenuPeer mp = (MenuPeer)getPeer();
!   // FIXME: Need to add a peer method here.
! //    if (mp != null)
! //      mp.insertItem(item, index);
  }
  
  /*************************************************************************/
--- 266,291 ----
    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);
  }
  
  /*************************************************************************/
*************** insert(String label, int index)
*** 294,300 ****
  public void
  addSeparator()
  {
!   add(separator);
  }
  
  /*************************************************************************/
--- 313,319 ----
  public void
  addSeparator()
  {
!   add(new MenuItem(separatorLabel));
  }
  
  /*************************************************************************/
*************** addSeparator()
*** 304,318 ****
    *
    * @param index The index at which to insert a separator bar.
    *
-   * XXX: FIXME
-   *
    * @exception IllegalArgumentException If the index is less than zero.
    * @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
    */
  public void
  insertSeparator(int index)
  {
!   insert(separator, index);
  }
  
  /*************************************************************************/
--- 323,335 ----
    *
    * @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);
  }
  
  /*************************************************************************/
*************** remove(int index)
*** 338,344 ****
  
  /**
    * Removes the specifed item from the menu.  If the specified component
!   * does not exist, this method does nothing. // FIXME: Right?
    *
    * @param item The component to remove.
    */
--- 355,361 ----
  
  /**
    * Removes the specifed item from the menu.  If the specified component
!   * does not exist, this method does nothing.
    *
    * @param item The component to remove.
    */
*************** removeAll()
*** 376,383 ****
  public void
  addNotify()
  {
!   if (peer != null)
      peer = getToolkit().createMenu(this);
    super.addNotify ();
  }
  
--- 393,406 ----
  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 ();
  }
  
*************** addNotify()
*** 389,394 ****
--- 412,423 ----
  public void
  removeNotify()
  {
+   Enumeration e = items.elements();
+   while (e.hasMoreElements())
+   {
+     MenuItem mi = (MenuItem) e.nextElement();
+     mi.removeNotify();
+   }
    super.removeNotify();
  }
  
*************** removeNotify()
*** 402,412 ****
  public String
  paramString()
  {
!   return (",isTearOff=" + isTearOff + ",isHelpMenu=" + isHelpMenu
  	  + super.paramString());
  }
  
! // Accessibility API not yet implemented.
! // public AccessibleContext getAccessibleContext()
  
  } // class Menu
--- 431,468 ----
  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
!   {
!     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-3.4.3/libjava/java/awt/MenuBar.java gcc-4.0.0/libjava/java/awt/MenuBar.java
*** gcc-3.4.3/libjava/java/awt/MenuBar.java	Thu Jan  2 00:14:22 2003
--- gcc-4.0.0/libjava/java/awt/MenuBar.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* MenuBar.java -- An AWT menu bar class
!    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 45,58 ****
  import java.util.Enumeration;
  import java.util.Vector;
  
  /**
    * This class implements a menu bar in the AWT system.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Tom Tromey <tromey@redhat.com>
    */
  public class MenuBar extends MenuComponent
!   implements MenuContainer, Serializable
  {
  
  /*
--- 45,63 ----
  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
  {
  
  /*
*************** private Menu helpMenu;
*** 78,83 ****
--- 83,96 ----
    */
  private Vector menus = new Vector();
  
+   /**
+    * The accessible context for this component.
+    *
+    * @see #getAccessibleContext()
+    * @serial ignored.
+    */
+   private transient AccessibleContext accessibleContext;
+ 
  /*************************************************************************/
  
  /*
*************** getHelpMenu()
*** 118,124 ****
  /**
    * Sets the help menu for this menu bar.
    *
!   * @param helpMenu The new help menu for this menu bar.
    */
  public synchronized void
  setHelpMenu(Menu menu)
--- 131,137 ----
  /**
    * Sets the help menu for this menu bar.
    *
!   * @param menu The new help menu for this menu bar.
    */
  public synchronized void
  setHelpMenu(Menu menu)
*************** setHelpMenu(Menu menu)
*** 128,144 ****
        helpMenu.removeNotify ();
        helpMenu.parent = null;
      }
  
    if (menu.parent != null)
      menu.parent.remove (menu);
-   if (menu.parent != null)
-     menu.parent.remove (menu);
    menu.parent = this;
  
    if (peer != null)
      {
!       MenuBarPeer mp = (MenuBarPeer) peer;
!       mp.addHelpMenu (menu);
      }
  }
  
--- 141,157 ----
        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(Menu menu)
*** 163,170 ****
  
    if (peer != null)
      {
!       MenuBarPeer mp = (MenuBarPeer) peer;
!       mp.addMenu (menu);
      }
  
    return(menu);
--- 176,182 ----
  
    if (peer != null)
      {
!       menu.addNotify();
      }
  
    return(menu);
*************** remove(MenuComponent menu)
*** 219,226 ****
  public int
  getMenuCount()
  {
!   // FIXME: How does the help menu fit in here?
!   return(menus.size());
  }
  
  /*************************************************************************/
--- 231,237 ----
  public int
  getMenuCount()
  {
!   return countMenus ();
  }
  
  /*************************************************************************/
*************** getMenuCount()
*** 235,241 ****
  public int
  countMenus()
  {
!   return(getMenuCount());
  }
  
  /*************************************************************************/
--- 246,252 ----
  public int
  countMenus()
  {
!   return menus.size () + (getHelpMenu () == null ? 0 : 1);
  }
  
  /*************************************************************************/
*************** countMenus()
*** 243,248 ****
--- 254,261 ----
  /**
    * 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.
*************** addNotify()
*** 263,268 ****
--- 276,292 ----
  {
    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);
+   }
  }
  
  /*************************************************************************/
*************** addNotify()
*** 273,278 ****
--- 297,308 ----
  public void
  removeNotify()
  {
+   Enumeration e = menus.elements();
+   while (e.hasMoreElements())
+   {
+     Menu mi = (Menu) e.nextElement();
+     mi.removeNotify();
+   }
    super.removeNotify();
  }
  
*************** deleteShortcut(MenuShortcut shortcut)
*** 341,344 ****
--- 371,423 ----
      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-3.4.3/libjava/java/awt/MenuComponent.java gcc-4.0.0/libjava/java/awt/MenuComponent.java
*** gcc-3.4.3/libjava/java/awt/MenuComponent.java	Tue Dec 16 20:08:01 2003
--- gcc-4.0.0/libjava/java/awt/MenuComponent.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* MenuComponent.java -- Superclass of all AWT menu components
!    Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,52 ****
  
  package java.awt;
  
  import java.awt.peer.MenuComponentPeer;
  import java.io.Serializable;
  
! // FIXME: Java 1.0 event model unimplemented
  
  /**
!   * This is the superclass of all non-menu AWT widgets. 
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
    */
  public abstract class MenuComponent implements Serializable
  {
--- 38,61 ----
  
  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
  {
*************** public abstract class MenuComponent impl
*** 59,89 ****
  private static final long serialVersionUID = -4536902356223894379L;
  
  /*************************************************************************/
! 
  /*
   * Instance Variables
   */
  
!   // FIXME: missing serialized fields `nameExplicitlySet',
!   // `newEventsOnly', and `accessibleContext'.
  
! // The font for this component
! private Font font;
  
! // The name of the component
! private String name;
  
! // The parent of this component
! transient MenuContainer parent;
  
! // The native peer for this componet
! transient MenuComponentPeer peer;
  
! // The synchronization locking object for this component
! private transient Object tree_lock = this;
  
! // The toolkit for this object
! private static transient Toolkit toolkit = Toolkit.getDefaultToolkit();
  
  /*************************************************************************/
  
--- 68,168 ----
  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.
!    */
!   private transient FocusListener focusListener;
  
  /*************************************************************************/
  
*************** MenuComponent()
*** 117,123 ****
  public Font
  getFont()
  {
!   return(font);
  }
  
  /*************************************************************************/
--- 196,208 ----
  public Font
  getFont()
  {
!   if (font != null)
!     return font;
! 
!   if (parent != null)
!     return parent.getFont ();
! 
!   return null;
  }
  
  /*************************************************************************/
*************** public void
*** 157,162 ****
--- 242,248 ----
  setName(String name)
  {
    this.name = name;
+   nameExplicitlySet = true;
  }
  
  /*************************************************************************/
*************** setTreeLock(Object tree_lock)
*** 260,272 ****
    * AWT 1.0 event dispatcher.
    *
    * @deprecated Deprecated in favor of <code>dispatchEvent()</code>.
    */
  public boolean
  postEvent(Event event)
  {
!   return(false);
  }
- 
  /*************************************************************************/
  
  /**
--- 346,359 ----
    * 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;
  }
  /*************************************************************************/
  
  /**
*************** postEvent(Event event)
*** 274,290 ****
    *
    * @param event The event to dispatch
    */
! public final void
! dispatchEvent(AWTEvent event)
  {
    // See comment in Component.dispatchEvent().
    dispatchEventImpl(event);
  }
  
! void
! dispatchEventImpl(AWTEvent e)
  {
    // This is overridden by subclasses that support events.
  }
  
  /*************************************************************************/
--- 361,395 ----
    *
    * @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);
  }
  
  /*************************************************************************/
*************** dispatchEventImpl(AWTEvent e)
*** 298,303 ****
--- 403,427 ----
  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;
+             }
+         }
+     }
  }
  
  /*************************************************************************/
*************** toString()
*** 316,330 ****
  /*************************************************************************/
  
  /**
!   * Returns a debugging string for this component
!   */
  protected String
  paramString()
  {
    return "name=" + getName();
  }
  
! // Accessibility API not yet implemented.
! // public AccessibleContext getAccessibleContext()
  
! } // class Component
--- 440,1323 ----
  /*************************************************************************/
  
  /**
!  * 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 #getEnabled()
!    */
!   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-3.4.3/libjava/java/awt/MenuContainer.java gcc-4.0.0/libjava/java/awt/MenuContainer.java
*** gcc-3.4.3/libjava/java/awt/MenuContainer.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/MenuContainer.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* MenuContainer.java -- container for menu items
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MenuContainer.java -- container for menu items
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
  /**
   * This interface is a container for menu components.
   *
!  * @author Aaron M. Renn <arenn@urbanophile.com>
   * @since 1.0
   * @status updated to 1.4
   */
--- 41,47 ----
  /**
   * This interface is a container for menu components.
   *
!  * @author Aaron M. Renn (arenn@urbanophile.com)
   * @since 1.0
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/MenuItem.java gcc-4.0.0/libjava/java/awt/MenuItem.java
*** gcc-3.4.3/libjava/java/awt/MenuItem.java	Thu Dec  4 19:31:01 2003
--- gcc-4.0.0/libjava/java/awt/MenuItem.java	Wed Feb 16 20:01:53 2005
***************
*** 1,5 ****
  /* MenuItem.java -- An item in a menu
!    Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 45,61 ****
  import java.lang.reflect.Array;
  import java.util.EventListener;
  
  /**
    * This class represents an item in a menu.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
    */
  public class MenuItem extends MenuComponent
!   implements Serializable
  {
  
- // FIXME: The enabled event mask is not used at this time.
- 
  /*
   * Static Variables
   */
--- 45,65 ----
  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
   */
*************** private String actionCommand;
*** 77,83 ****
  /**
    * @serial Indicates whether or not this menu item is enabled.
    */
! private boolean enabled;
  
  /**
    * @serial The mask of events that are enabled for this menu item.
--- 81,87 ----
  /**
    * @serial Indicates whether or not this menu item is enabled.
    */
! private boolean enabled = true;
  
  /**
    * @serial The mask of events that are enabled for this menu item.
*************** private MenuShortcut shortcut;
*** 97,102 ****
--- 101,210 ----
  // The list of action listeners for this menu item.
  private transient ActionListener action_listeners;
  
+   protected class AccessibleAWTMenuItem
+     extends MenuComponent.AccessibleAWTMenuComponent
+     implements AccessibleAction, AccessibleValue
+   {
+     /** 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)
+     {
+       if (number.intValue() == 0)
+ 	{
+ 	  setEnabled(false);
+ 	  return false;
+ 	}
+     
+       setEnabled(true);
+       return true;
+     }
+ 
+     /* (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);
+     }
+   
+   }
+ 
+ 
  /*************************************************************************/
  
  /*
*************** isEnabled()
*** 202,216 ****
  public synchronized void
  setEnabled(boolean enabled)
  {
!   if (enabled == this.enabled)
!     return;
! 
!   this.enabled = enabled;
!   if (peer != null)
!     {
!       MenuItemPeer mp = (MenuItemPeer) peer;
!       mp.setEnabled (enabled);
!     }
  }
  
  /*************************************************************************/
--- 310,316 ----
  public synchronized void
  setEnabled(boolean enabled)
  {
!   enable (enabled);
  }
  
  /*************************************************************************/
*************** setEnabled(boolean enabled)
*** 226,232 ****
  public void
  enable(boolean enabled)
  {
!   setEnabled(enabled);
  }
  
  /*************************************************************************/
--- 326,335 ----
  public void
  enable(boolean enabled)
  {
!   if (enabled)
!     enable ();
!   else
!     disable ();
  }
  
  /*************************************************************************/
*************** enable(boolean enabled)
*** 239,245 ****
  public void
  enable()
  {
!   setEnabled(true);
  }
  
  /*************************************************************************/
--- 342,353 ----
  public void
  enable()
  {
!   if (enabled)
!     return;
! 
!   this.enabled = true;
!   if (peer != null)
!     ((MenuItemPeer) peer).setEnabled (true);
  }
  
  /*************************************************************************/
*************** enable()
*** 252,258 ****
  public void
  disable()
  {
!   setEnabled(false);
  }
  
  /*************************************************************************/
--- 360,371 ----
  public void
  disable()
  {
!   if (!enabled)
!     return;
! 
!   this.enabled = false;
!   if (peer != null)
!     ((MenuItemPeer) peer).setEnabled (false);
  }
  
  /*************************************************************************/
*************** deleteShortcut()
*** 305,311 ****
  public String
  getActionCommand()
  {
!   return(actionCommand);
  }
  
  /*************************************************************************/
--- 418,427 ----
  public String
  getActionCommand()
  {
!   if (actionCommand == null)
!     return label;
!   else
!     return actionCommand;
  }
  
  /*************************************************************************/
*************** disableEvents(long events)
*** 361,367 ****
  public void
  addNotify()
  {
!   if (peer != null)
      peer = getToolkit ().createMenuItem (this);
  }
  
--- 477,483 ----
  public void
  addNotify()
  {
!   if (peer == null)
      peer = getToolkit ().createMenuItem (this);
  }
  
*************** dispatchEventImpl(AWTEvent e)
*** 416,421 ****
--- 532,542 ----
        && (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);
  }
  
  /**
*************** protected void
*** 442,448 ****
  processActionEvent(ActionEvent event)
  {
    if (action_listeners != null)
!     action_listeners.actionPerformed(event);
  }
  
  /*************************************************************************/
--- 563,572 ----
  processActionEvent(ActionEvent event)
  {
    if (action_listeners != null)
!     {
!       event.setSource(this);
!       action_listeners.actionPerformed(event);
!     }
  }
  
  /*************************************************************************/
*************** paramString()
*** 459,465 ****
  	  ",actionCommand=" + actionCommand + "," + super.paramString());
  }
  
! // Accessibility API not yet implemented.
! // public AccessibleContext getAccessibleContext()
  
  } // class MenuItem 
--- 583,600 ----
  	  ",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-3.4.3/libjava/java/awt/PageAttributes.java gcc-4.0.0/libjava/java/awt/PageAttributes.java
*** gcc-3.4.3/libjava/java/awt/PageAttributes.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/PageAttributes.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* PageAttributes.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PageAttributes.java -- 
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Locale;
*** 43,49 ****
  /**
   * Missing Documentation
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.3
   * @status updated to 1.4, but missing documentation
   */
--- 43,49 ----
  /**
   * Missing Documentation
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.3
   * @status updated to 1.4, but missing documentation
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Paint.java gcc-4.0.0/libjava/java/awt/Paint.java
*** gcc-3.4.3/libjava/java/awt/Paint.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/Paint.java	Thu Feb 17 07:48:24 2005
*************** import java.awt.image.ColorModel;
*** 48,54 ****
   * 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
--- 48,54 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/PaintContext.java gcc-4.0.0/libjava/java/awt/PaintContext.java
*** gcc-3.4.3/libjava/java/awt/PaintContext.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/PaintContext.java	Thu Feb 17 07:48:24 2005
*************** import java.awt.image.ColorModel;
*** 42,48 ****
  import java.awt.image.Raster;
  
  /**
!  * @author Warren Levy <warrenl@cygnus.com>
   * @see Paint
   * @since 1.1
   * @status updated to 1.4
--- 42,48 ----
  import java.awt.image.Raster;
  
  /**
!  * @author Warren Levy (warrenl@cygnus.com)
   * @see Paint
   * @since 1.1
   * @status updated to 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Panel.java gcc-4.0.0/libjava/java/awt/Panel.java
*** gcc-3.4.3/libjava/java/awt/Panel.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/Panel.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Panel.java -- Simple container object
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Panel.java -- Simple container object
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.accessibility.AccessibleRol
*** 46,53 ****
   * 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
--- 46,53 ----
   * 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 imp
*** 62,67 ****
--- 62,80 ----
    /** 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 class Panel extends Container imp
*** 114,120 ****
     * 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
--- 127,133 ----
     * 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
*************** public class Panel extends Container imp
*** 141,145 ****
      {
        return AccessibleRole.PANEL;
      }
!   } // class AccessibleAWTPanel
! } // class Panel 
--- 154,173 ----
      {
        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-3.4.3/libjava/java/awt/Point.java gcc-4.0.0/libjava/java/awt/Point.java
*** gcc-3.4.3/libjava/java/awt/Point.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/Point.java	Thu Feb 17 07:48:24 2005
*************** import java.io.Serializable;
*** 50,58 ****
   * 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
   */
--- 50,58 ----
   * 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 imple
*** 95,101 ****
     * Initializes a new instance of <code>Point</code> with coordinates
     * identical to the coordinates of the specified points.
     *
!    * @param point the point to copy the coordinates from
     * @throws NullPointerException if p is null
     */
    public Point(Point p)
--- 95,101 ----
     * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Polygon.java gcc-4.0.0/libjava/java/awt/Polygon.java
*** gcc-3.4.3/libjava/java/awt/Polygon.java	Mon Dec  8 22:59:51 2003
--- gcc-4.0.0/libjava/java/awt/Polygon.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Polygon.java -- class representing a polygon
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Polygon.java -- class representing a polygon
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  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;
*** 56,63 ****
   * 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
   */
--- 57,64 ----
   * 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, S
*** 100,116 ****
     */
    protected Rectangle bounds;
  
!   /**
!    * Cached flattened version - condense points and parallel lines, so the
!    * result has area if there are >= 3 condensed vertices. flat[0] is the
!    * number of condensed points, and (flat[odd], flat[odd+1]) form the
!    * condensed points.
!    *
!    * @see #condense()
!    * @see #contains(double, double)
!    * @see #contains(double, double, double, double)
!    */
!   private transient int[] condensed;
  
    /**
     * Initializes an empty polygon.
--- 101,108 ----
     */
    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 class Polygon implements Shape, S
*** 168,174 ****
    public void invalidate()
    {
      bounds = null;
-     condensed = null;
    }
  
    /**
--- 160,165 ----
*************** public class Polygon implements Shape, S
*** 184,198 ****
      int i = npoints;
      while (--i >= 0)
        {
!         xpoints[i] += dx;
!         ypoints[i] += dy;
        }
      if (bounds != null)
        {
!         bounds.x += dx;
!         bounds.y += dy;
        }
-     condensed = null;
    }
  
    /**
--- 175,188 ----
      int i = npoints;
      while (--i >= 0)
        {
! 	xpoints[i] += dx;
! 	ypoints[i] += dy;
        }
      if (bounds != null)
        {
! 	bounds.x += dx;
! 	bounds.y += dy;
        }
    }
  
    /**
*************** public class Polygon implements Shape, S
*** 206,250 ****
    {
      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;
!           }
        }
-     condensed = null;
    }
  
    /**
--- 196,239 ----
    {
      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;
! 	  }
        }
    }
  
    /**
*************** public class Polygon implements Shape, S
*** 258,288 ****
     */
    public Rectangle getBounds()
    {
!     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, maxy, maxx - minx, maxy - miny);
!       }
!     return bounds;
    }
  
    /**
--- 247,253 ----
     */
    public Rectangle getBounds()
    {
!     return getBoundingBox();
    }
  
    /**
*************** public class Polygon implements Shape, S
*** 296,302 ****
     */
    public Rectangle getBoundingBox()
    {
!     return getBounds();
    }
  
    /**
--- 261,291 ----
     */
    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;
    }
  
    /**
*************** public class Polygon implements Shape, S
*** 365,428 ****
     */
    public boolean contains(double x, double y)
    {
!     // First, the obvious bounds checks.
!     if (! condense() || ! getBounds().contains(x, y))
!       return false;
!     // A point is contained if a ray to (-inf, y) crosses an odd number
!     // of segments. This must obey the semantics of Shape when the point is
!     // exactly on a segment or vertex: a point is inside only if the adjacent
!     // point in the increasing x or y direction is also inside. Note that we
!     // are guaranteed that the condensed polygon has area, and no consecutive
!     // segments with identical slope.
!     boolean inside = false;
!     int limit = condensed[0];
!     int curx = condensed[(limit << 1) - 1];
!     int cury = condensed[limit << 1];
!     for (int i = 1; i <= limit; i++)
!       {
!         int priorx = curx;
!         int priory = cury;
!         curx = condensed[(i << 1) - 1];
!         cury = condensed[i << 1];
!         if ((priorx > x && curx > x) // Left of segment, or NaN.
!             || (priory > y && cury > y) // Below segment, or NaN.
!             || (priory < y && cury < y)) // Above segment.
!           continue;
!         if (priory == cury) // Horizontal segment, y == cury == priory
!           {
!             if (priorx < x && curx < x) // Right of segment.
!               {
!                 inside = ! inside;
!                 continue;
!               }
!             // Did we approach this segment from above or below?
!             // This mess is necessary to obey rules of Shape.
!             priory = condensed[((limit + i - 2) % limit) << 1];
!             boolean above = priory > cury;
!             if ((curx == x && (curx > priorx || above))
!                 || (priorx == x && (curx < priorx || ! above))
!                 || (curx > priorx && ! above) || above)
!               inside = ! inside;
!             continue;
!           }
!         if (priorx == x && priory == y) // On prior vertex.
!           continue;
!         if (priorx == curx // Vertical segment.
!             || (priorx < x && curx < x)) // Right of segment.
!           {
!             inside = ! inside;
!             continue;
!           }
!         // The point is inside the segment's bounding box, compare slopes.
!         double leftx = curx > priorx ? priorx : curx;
!         double lefty = curx > priorx ? priory : cury;
!         double slopeseg = (double) (cury - priory) / (curx - priorx);
!         double slopepoint = (double) (y - lefty) / (x - leftx);
!         if ((slopeseg > 0 && slopeseg > slopepoint)
!             || slopeseg < slopepoint)
!           inside = ! inside;
!       }
!     return inside;
    }
  
    /**
--- 354,360 ----
     */
    public boolean contains(double x, double y)
    {
!     return ((evaluateCrossings(x, y, false, BIG_VALUE) & 1) != 0);
    }
  
    /**
*************** public class Polygon implements Shape, S
*** 453,519 ****
     */
    public boolean intersects(double x, double y, double w, double h)
    {
!     // First, the obvious bounds checks.
!     if (w <= 0 || h <= 0 || npoints == 0 ||
!         ! getBounds().intersects(x, y, w, h))
!       return false; // Disjoint bounds.
!     if ((x <= bounds.x && x + w >= bounds.x + bounds.width
!          && y <= bounds.y && y + h >= bounds.y + bounds.height)
!         || contains(x, y))
!       return true; // Rectangle contains the polygon, or one point matches.
!     // If any vertex is in the rectangle, the two might intersect.
!     int curx = 0;
!     int cury = 0;
!     for (int i = 0; i < npoints; i++)
!       {
!         curx = xpoints[i];
!         cury = ypoints[i];
!         if (curx >= x && curx < x + w && cury >= y && cury < y + h
!             && contains(curx, cury)) // Boundary check necessary.
!           return true;
!       }
!     // Finally, if at least one of the four bounding lines intersect any
!     // segment of the polygon, return true. Be careful of the semantics of
!     // Shape; coinciding lines do not necessarily return true.
!     for (int i = 0; i < npoints; i++)
!       {
!         int priorx = curx;
!         int priory = cury;
!         curx = xpoints[i];
!         cury = ypoints[i];
!         if (priorx == curx) // Vertical segment.
!           {
!             if (curx < x || curx >= x + w) // Outside rectangle.
!               continue;
!             if ((cury >= y + h && priory <= y)
!                 || (cury <= y && priory >= y + h))
!               return true; // Bisects rectangle.
!             continue;
!           }
!         if (priory == cury) // Horizontal segment.
!           {
!             if (cury < y || cury >= y + h) // Outside rectangle.
!               continue;
!             if ((curx >= x + w && priorx <= x)
!                 || (curx <= x && priorx >= x + w))
!               return true; // Bisects rectangle.
!             continue;
!           }
!         // Slanted segment.
!         double slope = (double) (cury - priory) / (curx - priorx);
!         double intersect = slope * (x - curx) + cury;
!         if (intersect > y && intersect < y + h) // Intersects left edge.
!           return true;
!         intersect = slope * (x + w - curx) + cury;
!         if (intersect > y && intersect < y + h) // Intersects right edge.
!           return true;
!         intersect = (y - cury) / slope + curx;
!         if (intersect > x && intersect < x + w) // Intersects bottom edge.
!           return true;
!         intersect = (y + h - cury) / slope + cury;
!         if (intersect > x && intersect < x + w) // Intersects top edge.
!           return true;
!       }
      return false;
    }
  
--- 385,401 ----
     */
    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;
    }
  
*************** public class Polygon implements Shape, S
*** 547,605 ****
     */
    public boolean contains(double x, double y, double w, double h)
    {
!     // First, the obvious bounds checks.
!     if (w <= 0 || h <= 0 || ! contains(x, y)
!         || ! bounds.contains(x, y, w, h))
        return false;
!     // Now, if any of the four bounding lines intersects a polygon segment,
!     // return false. The previous check had the side effect of setting
!     // the condensed array, which we use. Be careful of the semantics of
!     // Shape; coinciding lines do not necessarily return false.
!     int limit = condensed[0];
!     int curx = condensed[(limit << 1) - 1];
!     int cury = condensed[limit << 1];
!     for (int i = 1; i <= limit; i++)
!       {
!         int priorx = curx;
!         int priory = cury;
!         curx = condensed[(i << 1) - 1];
!         cury = condensed[i << 1];
!         if (curx > x && curx < x + w && cury > y && cury < y + h)
!           return false; // Vertex is in rectangle.
!         if (priorx == curx) // Vertical segment.
!           {
!             if (curx < x || curx > x + w) // Outside rectangle.
!               continue;
!             if ((cury >= y + h && priory <= y)
!                 || (cury <= y && priory >= y + h))
!               return false; // Bisects rectangle.
!             continue;
!           }
!         if (priory == cury) // Horizontal segment.
!           {
!             if (cury < y || cury > y + h) // Outside rectangle.
!               continue;
!             if ((curx >= x + w && priorx <= x)
!                 || (curx <= x && priorx >= x + w))
!               return false; // Bisects rectangle.
!             continue;
!           }
!         // Slanted segment.
!         double slope = (double) (cury - priory) / (curx - priorx);
!         double intersect = slope * (x - curx) + cury;
!         if (intersect > y && intersect < y + h) // Intersects left edge.
!           return false;
!         intersect = slope * (x + w - curx) + cury;
!         if (intersect > y && intersect < y + h) // Intersects right edge.
!           return false;
!         intersect = (y - cury) / slope + curx;
!         if (intersect > x && intersect < x + w) // Intersects bottom edge.
!           return false;
!         intersect = (y + h - cury) / slope + cury;
!         if (intersect > x && intersect < x + w) // Intersects top edge.
!           return false;
!       }
!     return true;
    }
  
    /**
--- 429,449 ----
     */
    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;
    }
  
    /**
*************** public class Polygon implements Shape, S
*** 631,677 ****
    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;
!       }
!     };
    }
  
    /**
--- 475,521 ----
    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;
! 	}
!       };
    }
  
    /**
*************** public class Polygon implements Shape, S
*** 684,690 ****
     * path iterator is not either.
     *
     * @param transform an optional transform to apply to the iterator
!    * @param double the maximum distance for deviation from the real boundary
     * @return a new iterator over the boundary
     * @since 1.2
     */
--- 528,534 ----
     * 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 class Polygon implements Shape, S
*** 695,751 ****
    }
  
    /**
!    * Helper for contains, which caches a condensed version of the polygon.
!    * This condenses all colinear points, so that consecutive segments in
!    * the condensed version always have different slope.
     *
!    * @return true if the condensed polygon has area
     * @see #condensed
     * @see #contains(double, double)
     */
!   private boolean condense()
    {
!     if (npoints <= 2)
!       return false;
!     if (condensed != null)
!       return condensed[0] > 2;
!     condensed = new int[npoints * 2 + 1];
!     int curx = xpoints[npoints - 1];
!     int cury = ypoints[npoints - 1];
!     double curslope = Double.NaN;
!     int count = 0;
!   outer:
!     for (int i = 0; i < npoints; i++)
        {
!         int priorx = curx;
!         int priory = cury;
!         double priorslope = curslope;
!         curx = xpoints[i];
!         cury = ypoints[i];
!         while (curx == priorx && cury == priory)
!           {
!             if (++i == npoints)
!               break outer;
!             curx = xpoints[i];
!             cury = ypoints[i];
!           }
!         curslope = (curx == priorx ? Double.POSITIVE_INFINITY
!                     : (double) (cury - priory) / (curx - priorx));
!         if (priorslope == curslope)
!           {
!             if (count > 1 && condensed[(count << 1) - 3] == curx
!                 && condensed[(count << 1) - 2] == cury)
!               {
!                 count--;
!                 continue;
!               }
!           }
!         else
!           count++;
!         condensed[(count << 1) - 1] = curx;
!         condensed[count << 1] = cury;
        }
!     condensed[0] = count;
!     return count > 2;
    }
  } // class Polygon
--- 539,613 ----
    }
  
    /**
!    * 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 #condensed
     * @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-3.4.3/libjava/java/awt/PopupMenu.java gcc-4.0.0/libjava/java/awt/PopupMenu.java
*** gcc-3.4.3/libjava/java/awt/PopupMenu.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/PopupMenu.java	Wed Feb 16 20:01:53 2005
***************
*** 1,5 ****
  /* PopupMenu.java -- An AWT popup menu
!    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PopupMenu.java -- An AWT popup menu
!    Copyright (C) 1999, 2000, 2001, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,46 ****
  
  package java.awt;
  
- import java.awt.peer.MenuPeer;
  import java.awt.peer.PopupMenuPeer;
  
  /**
    * This class implement an AWT popup menu widget
    *
--- 38,48 ----
  
  package java.awt;
  
  import java.awt.peer.PopupMenuPeer;
  
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ 
  /**
    * This class implement an AWT popup menu widget
    *
*************** PopupMenu(String label)
*** 105,111 ****
  public void
  addNotify()
  {
!   if (peer != null)
      peer = getToolkit ().createPopupMenu (this);
    super.addNotify ();
  }
--- 107,113 ----
  public void
  addNotify()
  {
!   if (peer == null)
      peer = getToolkit ().createPopupMenu (this);
    super.addNotify ();
  }
*************** addNotify()
*** 123,128 ****
--- 125,132 ----
  public void
  show(Component component, int x, int y)
  {
+   if (getPeer() == null)
+     this.addNotify();
    PopupMenuPeer pmp = (PopupMenuPeer)getPeer();
    if (pmp != null)
      {
*************** show(Component component, int x, int y)
*** 134,138 ****
--- 138,169 ----
      }
  }
  
+   protected class AccessibleAWTPopupMenu extends AccessibleAWTMenu
+   {
+     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-3.4.3/libjava/java/awt/PrintGraphics.java gcc-4.0.0/libjava/java/awt/PrintGraphics.java
*** gcc-3.4.3/libjava/java/awt/PrintGraphics.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/PrintGraphics.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* PrintGraphics.java -- a print graphics context
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PrintGraphics.java -- a print graphics context
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
  /**
   * 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
   */
--- 41,47 ----
  /**
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/PrintJob.java gcc-4.0.0/libjava/java/awt/PrintJob.java
*** gcc-3.4.3/libjava/java/awt/PrintJob.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/PrintJob.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* PrintJob.java -- A print job class
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PrintJob.java -- A print job class
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
  /**
   * 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
--- 41,47 ----
  /**
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Rectangle.java gcc-4.0.0/libjava/java/awt/Rectangle.java
*** gcc-3.4.3/libjava/java/awt/Rectangle.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/Rectangle.java	Thu Feb 17 07:48:24 2005
*************** import java.io.Serializable;
*** 57,65 ****
   * 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
   */
--- 57,65 ----
   * 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 Rectangle
*** 281,290 ****
     */
    public void setBounds(Rectangle r)
    {
!     x = r.x;
!     y = r.y;
!     width = r.width;
!     height = r.height;
    }
  
    /**
--- 281,287 ----
     */
    public void setBounds(Rectangle r)
    {
!     setBounds (r.x, r.y, r.width, r.height);
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 298,307 ****
     */
    public void setBounds(int x, int y, int width, int height)
    {
!     this.x = x;
!     this.y = y;
!     this.width = width;
!     this.height = height;
    }
  
    /**
--- 295,301 ----
     */
    public void setBounds(int x, int y, int width, int height)
    {
!     reshape (x, y, width, height);
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 333,339 ****
     */
    public void reshape(int x, int y, int width, int height)
    {
!     setBounds(x, y, width, height);
    }
  
    /**
--- 327,336 ----
     */
    public void reshape(int x, int y, int width, int height)
    {
!     this.x = x;
!     this.y = y;
!     this.width = width;
!     this.height = height;
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 341,347 ****
     * its upper left corner.
     *
     * @return the point where this rectangle is located
!    * @see setLocation(Point)
     * @since 1.1
     */
    public Point getLocation()
--- 338,344 ----
     * its upper left corner.
     *
     * @return the point where this rectangle is located
!    * @see #setLocation(Point)
     * @since 1.1
     */
    public Point getLocation()
*************** public class Rectangle extends Rectangle
*** 360,367 ****
     */
    public void setLocation(Point p)
    {
!     this.x = p.x;
!     this.y = p.y;
    }
  
    /**
--- 357,363 ----
     */
    public void setLocation(Point p)
    {
!     setLocation (p.x, p.y);
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 374,381 ****
     */
    public void setLocation(int x, int y)
    {
!     this.x = x;
!     this.y = y;
    }
  
    /**
--- 370,376 ----
     */
    public void setLocation(int x, int y)
    {
!     move (x, y);
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 388,394 ****
     */
    public void move(int x, int y)
    {
!     setLocation(x, y);
    }
  
    /**
--- 383,390 ----
     */
    public void move(int x, int y)
    {
!     this.x = x;
!     this.y = y;
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 426,433 ****
     */
    public void setSize(Dimension d)
    {
!     width = d.width;
!     height = d.height;
    }
  
    /**
--- 422,428 ----
     */
    public void setSize(Dimension d)
    {
!     setSize (d.width, d.height);
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 439,446 ****
     */
    public void setSize(int width, int height)
    {
!     this.width = width;
!     this.height = height;
    }
  
    /**
--- 434,440 ----
     */
    public void setSize(int width, int height)
    {
!     resize (width, height);
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 452,458 ****
     */
    public void resize(int width, int height)
    {
!     setSize(width, height);
    }
  
    /**
--- 446,453 ----
     */
    public void resize(int width, int height)
    {
!     this.width = width;
!     this.height = height;
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 469,477 ****
     */
    public boolean contains(Point p)
    {
!     return width > 0 && height > 0
!       && p.x >= x && p.x < x + width
!       && p.y >= y && p.y < y + height;
    }
  
    /**
--- 464,470 ----
     */
    public boolean contains(Point p)
    {
!     return contains (p.x, p.y);
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 487,495 ****
     */
    public boolean contains(int x, int y)
    {
!     return width > 0 && height > 0
!       && x >= this.x && x < this.x + width
!       && y >= this.y && y < this.y + height;
    }
  
    /**
--- 480,486 ----
     */
    public boolean contains(int x, int y)
    {
!     return inside (x, y);
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 504,512 ****
     */
    public boolean contains(Rectangle r)
    {
!     return width > 0 && height > 0 && r.width > 0 && r.height > 0
!       && r.x >= x && r.x + r.width <= x + width
!       && r.y >= y && r.y + r.height <= y + height;
    }
  
    /**
--- 495,501 ----
     */
    public boolean contains(Rectangle r)
    {
!     return contains (r.x, r.y, r.width, r.height);
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 537,543 ****
     */
    public boolean inside(int x, int y)
    {
!     return contains(x, y);
    }
  
    /**
--- 526,534 ----
     */
    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;
    }
  
    /**
*************** public class Rectangle extends Rectangle
*** 551,557 ****
     */
    public boolean intersects(Rectangle r)
    {
!     return width > 0 && height > 0 && r.width > 0 && r.height > 0
        && r.x < x + width && r.x + r.width > x
        && r.y < y + height && r.y + r.height > y;
    }
--- 542,548 ----
     */
    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;
    }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/RenderingHints.java gcc-4.0.0/libjava/java/awt/RenderingHints.java
*** gcc-3.4.3/libjava/java/awt/RenderingHints.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/RenderingHints.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* RenderingHints.java --
!    Copyright (C) 2000, 2001, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* RenderingHints.java --
!    Copyright (C) 2000, 2001, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,78 ****
  import java.util.Collection;
  import java.util.Collections;
  import java.util.HashMap;
  import java.util.Map;
  import java.util.Set;
  
  /**
!  * NEEDS DOCUMENTATION
   *
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
!  * @author Eric Blake <ebb9@email.byu.edu>
   */
  public class RenderingHints implements Map, Cloneable
  {
    public abstract static class Key
    {
      private final int key;
  
      protected Key(int privateKey)
      {
        key = privateKey;
      }
  
      public abstract boolean isCompatibleValue(Object value);
  
      protected final int intKey()
      {
        return key;
      }
  
      public final int hashCode()
      {
        return System.identityHashCode(this);
      }
  
      public final boolean equals(Object other)
      {
        return this == other;
--- 41,115 ----
  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;
*************** public class RenderingHints implements M
*** 96,106 ****
--- 133,156 ----
        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;
*************** public class RenderingHints implements M
*** 109,210 ****
--- 159,503 ----
  
    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";
  
*************** public class RenderingHints implements M
*** 250,275 ****
                                       VALUE_STROKE_PURE);
    }
  
    public RenderingHints(Map init)
    {
!     putAll(init);
    }
  
    public RenderingHints(Key key, Object value)
    {
      put(key, value);
    }
  
    public int size()
    {
      return hintMap.size();
    }
  
    public boolean isEmpty()
    {
      return hintMap.isEmpty();
    }
  
    public boolean containsKey(Object key)
    {
      if (key == null)
--- 543,601 ----
                                       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.
+    * 
+    * @return A boolean.
+    */
    public boolean containsKey(Object key)
    {
      if (key == null)
*************** public class RenderingHints implements M
*** 277,292 ****
--- 603,644 ----
      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.
+    * 
+    * @param key  the key.
+    * 
+    * @return The value.
+    */
    public Object get(Object key)
    {
      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)
*************** public class RenderingHints implements M
*** 296,346 ****
      return hintMap.put(key, value);
    }
  
    public void add(RenderingHints hints)
    {
      hintMap.putAll(hints);
    }
  
    public void clear()
    {
      hintMap.clear();
    }
  
    public Object remove(Object key)
    {
!     return remove((Key) key);
    }
  
    public void putAll(Map m)
    {
      hintMap.putAll(m);
    }
  
    public Set keySet()
    {
      return hintMap.keySet();
    }
  
    public Collection values()
    {
      return hintMap.values();
    }
  
    public Set entrySet()
    {
      return Collections.unmodifiableSet(hintMap.entrySet());
    }
  
    public boolean equals(Object o)
    {
      return hintMap.equals(o);
    }
  
    public int hashCode()
    {
      return hintMap.hashCode();
    }
  
    public Object clone()
    {
      try
--- 648,772 ----
      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
*************** public class RenderingHints implements M
*** 355,360 ****
--- 781,791 ----
        }
    }
  
+   /**
+    * Returns a string representation of this instance.
+    * 
+    * @return A string.
+    */
    public String toString()
    {
      return hintMap.toString();
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Robot.java gcc-4.0.0/libjava/java/awt/Robot.java
*** gcc-3.4.3/libjava/java/awt/Robot.java	Wed Jun 11 10:37:47 2003
--- gcc-4.0.0/libjava/java/awt/Robot.java	Tue Feb 22 06:18:59 2005
***************
*** 1,5 ****
! /* Robot.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Robot.java -- a native input event generator
!    Copyright (C) 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,149 ****
  
  package java.awt;
  
  import java.awt.image.BufferedImage;
  
  /**
   * @since 1.3
   */
- /** STUB CLASS ONLY */
  public class Robot
  {
-   private GraphicsDevice screen;
    private boolean waitForIdle;
    private int autoDelay;
!   
    /**
!    * Creates a <code>Robot</code> object.
!    * 
!    * @exception AWTException If GraphicsEnvironment.isHeadless() returns true.
!    * @exception SecurityException If createRobot permission is not granted.
     */
!   public Robot() throws AWTException
    {
!     throw new Error("not implemented");
    }
  
    /**
!    * Creates a <code>Robot</code> object.
!    * 
!    * @exception AWTException If GraphicsEnvironment.isHeadless() returns true.
!    * @exception IllegalArgumentException If <code>screen</code> is not a screen
!    * GraphicsDevice.
!    * @exception SecurityException If createRobot permission is not granted.
     */
!   public Robot(GraphicsDevice screen) throws AWTException
    {
!     this();
!     this.screen = screen;
    }
  
    public void mouseMove(int x, int y)
    {
    }
  
!   public void mousePress(int buttons)
    {
    }
  
    public void mouseRelease(int buttons)
    {
    }
  
!   public void mouseWheel(int wheelAmt)
    {
    }
  
!   public void keyPress(int keycode)
    {
    }
  
!   public void keyRelease(int keycode)
    {
    }
!   
!   public Color getPixelColor(int x, int y)
    {
!     return null;
    }
  
!   public BufferedImage createScreenCapture(Rectangle screen)
    {
!     return null;
    }
!   
!   public boolean isAutoWaitForIdle()
    {
      return waitForIdle;
    }
!   
!   public void setAutoWaitForIdle(boolean value)
    {
!     waitForIdle = value;
    }
!   
!   public int getAutoDelay()
    {
      return autoDelay;
    }
!   
!   public void setAutoDelay(int ms)
    {
!     if (ms < 0 || ms > 60000)
!       throw new IllegalArgumentException();
!     
      autoDelay = ms;
    }
  
!   public void delay(int ms)
    {
      if (ms < 0 || ms > 60000)
!       throw new IllegalArgumentException();
    }
  
!   public void waitForIdle()
    {
    }
  
!   public String toString()
    {
!     return "unimplemented";
    }
! } // class Robot
--- 38,423 ----
  
  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 AWTEvents} 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 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 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");
+ 
+     EventQueue q = Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+     try
+       {
+ 	q.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-3.4.3/libjava/java/awt/ScrollPane.java gcc-4.0.0/libjava/java/awt/ScrollPane.java
*** gcc-3.4.3/libjava/java/awt/ScrollPane.java	Mon Jan  5 21:35:32 2004
--- gcc-4.0.0/libjava/java/awt/ScrollPane.java	Wed Feb 16 20:01:53 2005
***************
*** 1,5 ****
  /* ScrollPane.java -- Scrolling window
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ScrollPane.java -- Scrolling window
!    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 41,47 ****
--- 41,50 ----
  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 
*************** ScrollPane(int scrollbarDisplayPolicy)
*** 157,162 ****
--- 160,168 ----
      }
  
    wheelScrollingEnabled = true;
+ 
+   // Default size.
+   setSize(100,100);
  }
  
  /*************************************************************************/
*************** addNotify()
*** 400,405 ****
--- 406,420 ----
  
    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);
+   }
  }
  
  /*************************************************************************/
*************** removeNotify()
*** 446,455 ****
  public void
  doLayout()
  {
!   Component[] list = getComponents();
    if ((list != null) && (list.length > 0))
      {
!       Dimension dim = list[0].getPreferredSize();
        Dimension vp = getViewportSize ();
  
        if (dim.width < vp.width)
--- 461,485 ----
  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)
*************** doLayout()
*** 462,497 ****
        if (peer != null)
  	peer.childResized (dim.width, dim.height);
  
!       list[0].resize (dim);
  
!       Point p = getScrollPosition();
        if (p.x > dim.width)
          p.x = dim.width;
        if (p.y > dim.height)
          p.y = dim.height;
  
!       setScrollPosition(p);
      }
  }
  
  /*************************************************************************/
  
  /**
-   * 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()
- {
-   doLayout();
- }
- 
- /*************************************************************************/
- 
- /**
    * 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.
--- 492,512 ----
        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.
*************** printComponents(Graphics graphics)
*** 527,533 ****
  public String
  paramString()
  {
!   return(getClass().getName());
  }
  
    /**
--- 542,560 ----
  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();
  }
  
    /**
*************** paramString()
*** 562,566 ****
--- 589,615 ----
    {
      wheelScrollingEnabled = enable;
    }
+   
+   protected class AccessibleAWTScrollPane extends AccessibleAWTContainer
+   {
+     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-3.4.3/libjava/java/awt/Scrollbar.java gcc-4.0.0/libjava/java/awt/Scrollbar.java
*** gcc-3.4.3/libjava/java/awt/Scrollbar.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/Scrollbar.java	Wed Feb 16 20:01:54 2005
***************
*** 1,5 ****
  /* Scrollbar.java -- AWT Scrollbar widget
!    Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,730 ****
  
  package java.awt;
  
- import java.awt.event.AdjustmentListener;
  import java.awt.event.AdjustmentEvent;
  import java.awt.peer.ScrollbarPeer;
  import java.util.EventListener;
- import javax.accessibility.Accessible;
- 
- /**
-   * This class implements a scrollbar widget.
-   *
-   * @author Aaron M. Renn (arenn@urbanophile.com)
-   * @author Tom Tromey <tromey@cygnus.com>
-   */
- public class Scrollbar extends Component implements Accessible,
-                                                     Adjustable
- {
- 
- // FIXME: Serialization readObject/writeObject
- 
- /*
-  * Static Variables
-  */
- 
- /**
-   * 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;
  
! private transient boolean valueIsAdjusting = false;
! 
! /*************************************************************************/
! 
! /*
!  * Constructors
!  */
! 
! /**
!   * 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;
! 
!   pageIncrement = (maximum - minimum) / 5;
!   if (pageIncrement == 0)
!     pageIncrement = 1;
! }
! 
! /*************************************************************************/
! 
! /*
!  * Instance Methods
   */
! 
! /**
!   * 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(visibleAmount);
! }
  
! /*************************************************************************/
  
! /**
!   * 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(getVisibleAmount());
! }
  
! /*************************************************************************/
  
! /**
!   * Sets the width of the scrollbar's thumb, in units relative to the
!   * maximum and minimum value of the scrollbar.
!   *
!   * @param visibileAmount 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;
  
!   this.value = value;
!   this.visibleAmount = visibleAmount;
!   this.minimum = minimum;
!   this.maximum = maximum;
  
!   ScrollbarPeer sp = (ScrollbarPeer)getPeer();
!   if (sp != null)
!     sp.setValues(value, visibleAmount, minimum, maximum);
  
!   int range = maximum - minimum;
!   if (lineIncrement > range)
!     {
!       if (range == 0)
!         lineIncrement = 1;
!       else
!         lineIncrement = range;
  
!       if (sp != null)
!         sp.setLineIncrement(lineIncrement);
!     }
  
!   if (pageIncrement > range)
!     {
!       if (range == 0)
!         pageIncrement = 1;
!       else
!         pageIncrement = range;
  
!       if (sp != null)
!         sp.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(lineIncrement);
! }
  
! /*************************************************************************/
  
! /**
!   * 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)
! {
!   if (unitIncrement < 0)
!     throw new IllegalArgumentException("Unit increment less than zero.");
  
!   int range = maximum - minimum;
!   if (unitIncrement > range)
!     {
!       if (range == 0)
!         unitIncrement = 1;
!       else
!         unitIncrement = range;
!     }
  
!   if (unitIncrement == lineIncrement)
!     return;
  
!   lineIncrement = unitIncrement;
  
!   ScrollbarPeer sp = (ScrollbarPeer)getPeer();
!   if (sp != null)
!     sp.setLineIncrement(lineIncrement);
! }
  
! /*************************************************************************/
  
! /**
!   * 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)
! {
!   setUnitIncrement(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(pageIncrement);
! }
  
! /*************************************************************************/
  
! /**
!   * 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)
! {
!   if (blockIncrement < 0)
!     throw new IllegalArgumentException("Block increment less than zero.");
  
!   int range = maximum - minimum;
!   if (blockIncrement > range)
!     {
!       if (range == 0)
!         blockIncrement = 1;
!       else
!         blockIncrement = range;
!     }
  
!   if (blockIncrement == pageIncrement)
!     return;
  
!   pageIncrement = blockIncrement;
  
!   ScrollbarPeer sp = (ScrollbarPeer)getPeer();
!   if (sp != null)
!     sp.setPageIncrement(pageIncrement);
! }
  
! /*************************************************************************/
  
! /**
!   * 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)
! {
!   setBlockIncrement(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);
    }
  
    /**
--- 39,647 ----
  
  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);
    }
  
    /**
*************** paramString()
*** 732,738 ****
     *
     * @since 1.4
     */
!   public boolean getValueIsAdjusting ()
    {
      return valueIsAdjusting;
    }
--- 649,655 ----
     *
     * @since 1.4
     */
!   public boolean getValueIsAdjusting()
    {
      return valueIsAdjusting;
    }
*************** paramString()
*** 742,750 ****
     *
     * @since 1.4
     */
!   public void setValueIsAdjusting (boolean valueIsAdjusting)
    {
      this.valueIsAdjusting = valueIsAdjusting;
    }
- } // class Scrollbar 
  
--- 659,825 ----
     *
     * @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-3.4.3/libjava/java/awt/Shape.java gcc-4.0.0/libjava/java/awt/Shape.java
*** gcc-3.4.3/libjava/java/awt/Shape.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/Shape.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Shape.java -- the classic Object-Oriented shape interface
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Shape.java -- the classic Object-Oriented shape interface
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.geom.Rectangle2D;
*** 54,64 ****
   * 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 FlatteningPathIterator
!  * @see GeneralPath
   * @since 1.0
   * @status updated to 1.4
   */
--- 54,64 ----
   * 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
*** 109,123 ****
     * 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 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 Area
     * @since 1.2
     */
    boolean intersects(double x, double y, double w, double h);
--- 109,123 ----
     * 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);
*************** public interface Shape
*** 126,133 ****
     * 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 Area} class can
!    * be used for more precise answers.
     *
     * @param r the rectangle
     * @return true if the rectangle intersects this shape
--- 126,133 ----
     * 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
*************** public interface Shape
*** 141,155 ****
     * 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 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 Area
     * @since 1.2
     */
    boolean contains(double x, double y, double w, double h);
--- 141,155 ----
     * 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);
*************** public interface Shape
*** 158,165 ****
     * 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 Area} class can
!    * be used for more precise answers.
     *
     * @param r the rectangle
     * @return true if the rectangle is contained in this shape
--- 158,165 ----
     * 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
*************** public interface Shape
*** 195,201 ****
     * iterations from future changes to the boundary, and document this fact.
     *
     * @param transform an optional transform to apply to the iterator
!    * @param double the maximum distance for deviation from the real boundary
     * @return a new iterator over the boundary
     * @since 1.2
     */
--- 195,201 ----
     * 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
     */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Stroke.java gcc-4.0.0/libjava/java/awt/Stroke.java
*** gcc-3.4.3/libjava/java/awt/Stroke.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/Stroke.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Stroke.java -- a stroked outline of a shape
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Stroke.java -- a stroked outline of a shape
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/SystemColor.java gcc-4.0.0/libjava/java/awt/SystemColor.java
*** gcc-3.4.3/libjava/java/awt/SystemColor.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/SystemColor.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* SystemColor.java -- access dynamic system color values
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SystemColor.java -- access dynamic system color values
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,46 ****
  
  package java.awt;
  
- import java.awt.image.ColorModel;
  import java.awt.geom.AffineTransform;
  import java.awt.geom.Rectangle2D;
  import java.io.Serializable;
  
  /**
--- 38,46 ----
  
  package java.awt;
  
  import java.awt.geom.AffineTransform;
  import java.awt.geom.Rectangle2D;
+ import java.awt.image.ColorModel;
  import java.io.Serializable;
  
  /**
*************** import java.io.Serializable;
*** 52,59 ****
   * 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
   */
--- 52,59 ----
   * 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 C
*** 72,78 ****
  
    /**
     * Array index of the desktop color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #desktop
     */
--- 72,78 ----
  
    /**
     * Array index of the desktop color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #desktop
     */
*************** public final class SystemColor extends C
*** 80,86 ****
  
    /**
     * Array index of the active caption color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #activeCaption
     */
--- 80,86 ----
  
    /**
     * Array index of the active caption color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #activeCaption
     */
*************** public final class SystemColor extends C
*** 88,94 ****
  
    /**
     * Array index of the active caption text color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #activeCaptionText
     */
--- 88,94 ----
  
    /**
     * Array index of the active caption text color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #activeCaptionText
     */
*************** public final class SystemColor extends C
*** 96,102 ****
  
    /**
     * Array index of the active caption border color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #activeCaptionBorder
     */
--- 96,102 ----
  
    /**
     * Array index of the active caption border color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #activeCaptionBorder
     */
*************** public final class SystemColor extends C
*** 104,110 ****
  
    /**
     * Array index of the inactive caption color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #inactiveCaption
     */
--- 104,110 ----
  
    /**
     * Array index of the inactive caption color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #inactiveCaption
     */
*************** public final class SystemColor extends C
*** 112,118 ****
  
    /**
     * Array index of the inactive caption text color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #inactiveCaptionText
     */
--- 112,118 ----
  
    /**
     * Array index of the inactive caption text color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #inactiveCaptionText
     */
*************** public final class SystemColor extends C
*** 120,126 ****
  
    /**
     * Array index of the inactive caption border color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #inactiveCaptionBorder
     */
--- 120,126 ----
  
    /**
     * Array index of the inactive caption border color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #inactiveCaptionBorder
     */
*************** public final class SystemColor extends C
*** 128,134 ****
  
    /**
     * Array index of the window background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #window
     */
--- 128,134 ----
  
    /**
     * Array index of the window background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #window
     */
*************** public final class SystemColor extends C
*** 136,142 ****
  
    /**
     * Array index of the window border color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #windowBorder
     */
--- 136,142 ----
  
    /**
     * Array index of the window border color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #windowBorder
     */
*************** public final class SystemColor extends C
*** 144,150 ****
  
    /**
     * Array index of the window text color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #windowText
     */
--- 144,150 ----
  
    /**
     * Array index of the window text color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #windowText
     */
*************** public final class SystemColor extends C
*** 152,158 ****
  
    /**
     * Array index of the menu background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #menu
     */
--- 152,158 ----
  
    /**
     * Array index of the menu background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #menu
     */
*************** public final class SystemColor extends C
*** 160,166 ****
  
    /**
     * Array index of the menu text color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #menuText
     */
--- 160,166 ----
  
    /**
     * Array index of the menu text color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #menuText
     */
*************** public final class SystemColor extends C
*** 168,174 ****
  
    /**
     * Array index of the text background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #text
     */
--- 168,174 ----
  
    /**
     * Array index of the text background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #text
     */
*************** public final class SystemColor extends C
*** 176,182 ****
  
    /**
     * Array index of the text foreground color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #textText
    */
--- 176,182 ----
  
    /**
     * Array index of the text foreground color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #textText
    */
*************** public final class SystemColor extends C
*** 184,190 ****
  
    /**
     * Array index of the highlighted text background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #textHighlight
     */
--- 184,190 ----
  
    /**
     * Array index of the highlighted text background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #textHighlight
     */
*************** public final class SystemColor extends C
*** 192,198 ****
  
    /**
     * Array index of the highlighted text foreground color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #textHighlightText
     */
--- 192,198 ----
  
    /**
     * Array index of the highlighted text foreground color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #textHighlightText
     */
*************** public final class SystemColor extends C
*** 200,206 ****
  
    /**
     * Array index of the inactive text foreground color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #textInactiveText
     */
--- 200,206 ----
  
    /**
     * Array index of the inactive text foreground color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #textInactiveText
     */
*************** public final class SystemColor extends C
*** 208,214 ****
  
    /**
     * Array index of the control background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #control
     */
--- 208,214 ----
  
    /**
     * Array index of the control background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #control
     */
*************** public final class SystemColor extends C
*** 216,222 ****
  
    /**
     * Array index of the control text color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #controlText
     */
--- 216,222 ----
  
    /**
     * Array index of the control text color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #controlText
     */
*************** public final class SystemColor extends C
*** 224,230 ****
  
    /**
     * Array index of the highlighted control background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #controlHighlight
     */
--- 224,230 ----
  
    /**
     * Array index of the highlighted control background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #controlHighlight
     */
*************** public final class SystemColor extends C
*** 232,238 ****
  
    /**
     * Array index of the lightly highlighted control background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #controlLtHighlight
     */
--- 232,238 ----
  
    /**
     * Array index of the lightly highlighted control background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #controlLtHighlight
     */
*************** public final class SystemColor extends C
*** 240,246 ****
  
    /**
     * Array index of the shadowed control background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #controlShadow
     */
--- 240,246 ----
  
    /**
     * Array index of the shadowed control background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #controlShadow
     */
*************** public final class SystemColor extends C
*** 248,254 ****
  
    /**
     * Array index of the darkly shadowed control background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #controlDkShadow
     */
--- 248,254 ----
  
    /**
     * Array index of the darkly shadowed control background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #controlDkShadow
     */
*************** public final class SystemColor extends C
*** 256,262 ****
  
    /**
     * Array index of the scrollbar background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #scrollbar
     */
--- 256,262 ----
  
    /**
     * Array index of the scrollbar background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #scrollbar
     */
*************** public final class SystemColor extends C
*** 264,270 ****
  
    /**
     * Array index of the info background color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #info
     */
--- 264,270 ----
  
    /**
     * Array index of the info background color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #info
     */
*************** public final class SystemColor extends C
*** 272,278 ****
  
    /**
     * Array index of the info text color.  Used by
!    * {@link Toolkit#loadSystemColors()}.
     *
     * @see #infoText
     */
--- 272,278 ----
  
    /**
     * Array index of the info text color.  Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     *
     * @see #infoText
     */
*************** public final class SystemColor extends C
*** 280,286 ****
  
    /**
     * The number of system colors. Used by
!    * {@link Toolkit#loadSystemColors()}.
     */
    public static final int NUM_COLORS = 26;
  
--- 280,286 ----
  
    /**
     * The number of system colors. Used by
!    * {@link Toolkit#loadSystemColors(int[])}.
     */
    public static final int NUM_COLORS = 26;
  
*************** public final class SystemColor extends C
*** 427,433 ****
     * 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, ignored
     * @param deviceBounds the bounding box in device coordinates, ignored
     * @param userBounds the bounding box in user coordinates, ignored
     * @param xform the bounds transformation, ignored
--- 427,433 ----
     * 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
*************** public final class SystemColor extends C
*** 441,448 ****
    {
      Toolkit.getDefaultToolkit().loadSystemColors(colors);
      int color = colors[value] | ALPHA_MASK;
!     if (context == null || color != context.color)
!       context = new ColorPaintContext(color);
      return context;
    }    
  
--- 441,448 ----
    {
      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;
    }    
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/TextArea.java gcc-4.0.0/libjava/java/awt/TextArea.java
*** gcc-3.4.3/libjava/java/awt/TextArea.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/TextArea.java	Wed Feb 16 20:01:54 2005
***************
*** 1,5 ****
! /* TextArea.java -- A multi-line text entry widget
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* TextArea.java -- A multi-line text entry component
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,565 ****
  
  package java.awt;
  
  import java.awt.peer.ComponentPeer;
  import java.awt.peer.TextAreaPeer;
  
! /**
!   * This implements a multi-line text entry widget.
!   *
!   * @author Aaron M. Renn (arenn@urbanophile.com)
!   */
! public class TextArea extends TextComponent implements java.io.Serializable
! {
! 
! /*
!  * Static Variables
!  */
! 
! /**
!   * Use both horiztonal and vertical scroll bars.
!   */
! public static final int SCROLLBARS_BOTH = 0;
! 
! /**
!   * Use vertical scroll bars only.
!   */
! public static final int SCROLLBARS_VERTICAL_ONLY = 1;
! 
! /**
!   * Use horizatonal scroll bars only.
!   */
! public static final int SCROLLBARS_HORIZONTAL_ONLY = 2;
! 
! /**
!   * Use no scrollbars.
!   */
! public static final int SCROLLBARS_NONE = 3;
! 
! // Serialization constant
! private static final long serialVersionUID = 3692302836626095722L;
! 
! /*************************************************************************/
! 
! /*
!  * Instance Variables
!  */
! 
! /**
!   * @serial The number of columns in this text area.
!   */
! private int columns;
  
- /**
-   * @serial The number of rows in this text area.
-   */
- private int rows;
  
  /**
!   * @serial The type of scrollbars to display, which will be one of
!   * the contstants from this class.
!   */
! private int scrollbarVisibility;
! 
! /*************************************************************************/
! 
! /*
!  * Constructors
   */
! 
! /**
!   * Initialize a new instance of <code>TextArea</code> that is empty
!   * and is one row and one column.  Both horizontal and vertical
!   * scrollbars will be used.
!   *
!   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
!   */
! public
! TextArea()
! {
!   this("", 1, 1, SCROLLBARS_BOTH);
! }
! 
! /*************************************************************************/
! 
! /**
!   * Initializes a new instance of <code>TextArea</code> that 
!   * contains the specified string.  Both horizontal and veritcal
!   * scrollbars will be used.
!   *
!   * @param text The text to display in this text area.
!   *
!   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
!   */
! public
! TextArea(String text)
! {
!   this(text, 1, text.length(), SCROLLBARS_BOTH);
! }
! 
! /*************************************************************************/
! 
! /**
!   * Initializes a new instance of <code>TextArea</code> that is empty
!   * and has the specified number of rows and columns.  Both
!   * horizontal and vertical scrollbars will be used.
!   *
!   * @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);
! }
! 
! /*************************************************************************/
! 
! /**
!   * Initializes a new instance of <code>TextArea</code> that is the
!   * specified size and has 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);
! }
! 
! /*************************************************************************/
! 
! /** 
!   * Initializes a new instance of <code>TextArea</code> with the
!   * specified values.  The scrollbar visibility value must be one
!   * of the constants in this class.
!   *
!   * @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 Which scrollbars to display.
!   *
!   * @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 < 1) || (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;
! }
  
! /*************************************************************************/
  
! /*
!  * Instance Variables
!  */
  
! /**
!   * 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 number of rows in the field.
!   *
!   * @return The number of rows in the field.
!   */
! public int
! getRows()
! {
!   return(rows);
! }
  
! /*************************************************************************/
  
! /**
!   * Sets the number of rows in this field to the specified value.
!   *
!   * @param rows The new number of rows in the field.
!   *
!   * @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;
!   // FIXME: How to we communicate this to our peer?
! }
  
! /*************************************************************************/
  
! /**
!   * Returns the minimum size for this text field.
!   *
!   * @return The minimum size for this text field.
!   */
! public Dimension
! getMinimumSize()
! {
!   return(getMinimumSize(getRows(), getColumns()));
! }
  
! /*************************************************************************/
  
! /**
!   * Returns the minimum size of a text field with the specified number
!   * of rows and columns.
!   *
!   * @param rows The number of rows to get the minimum size for.
!   * @param columns The number of columns to get the minimum size for.
!   */
! public Dimension
! getMinimumSize(int rows, int columns)
! {
!   TextAreaPeer tap = (TextAreaPeer)getPeer();
!   if (tap == null)
!     return(null); // FIXME: What do we do if there is no peer?
  
!   return(tap.getMinimumSize(rows, columns));
! }
  
! /*************************************************************************/
  
! /**
!   * Returns the minimum size for this text field.
!   *
!   * @return The minimum size for this text field.
!   *
!   * @deprecated This method is depcreated in favor of
!   * <code>getMinimumSize()</code>.
!   */
! public Dimension
! minimumSize()
! {
!   return(getMinimumSize(getRows(), getColumns()));
! }
  
! /*************************************************************************/
  
! /**
!   * Returns the minimum size of a text field with the specified number
!   * of rows and columns.
!   *
!   * @param rows The number of rows to get the minimum size for.
!   * @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 rows, int columns)
! {
!   return(getMinimumSize(rows, columns));
! }
  
! /*************************************************************************/
  
! /**
!   * Returns the preferred size for this text field.
!   *
!   * @return The preferred size for this text field.
!   */
! public Dimension
! getPreferredSize()
! {
!   return(getPreferredSize(getRows(), getColumns()));
! }
  
! /*************************************************************************/
  
! /**
!   * Returns the preferred size of a text field with the specified number
!   * of rows and columns.
!   *
!   * @param rows The number of rows to get the preferred size for.
!   * @param columns The number of columns to get the preferred size for.
!   */
! public Dimension
! getPreferredSize(int rows, int columns)
! {
!   TextAreaPeer tap = (TextAreaPeer)getPeer();
!   if (tap == null)
!     {
!       // Sun's JDK just seems to return Dimension(0,0) in this case.
!       // we do the same.
!       return new Dimension(0, 0);
!     }
  
!   return(tap.getPreferredSize(rows, 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(getPreferredSize(getRows(), getColumns()));
! }
  
! /*************************************************************************/
  
! /**
!   * Returns the preferred size of a text field with the specified number
!   * of rows and columns.
!   *
!   * @param rows The number of rows to get the preferred size for.
!   * @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 rows, int columns)
! {
!   return(getPreferredSize(rows, columns));
! }
  
! /*************************************************************************/
  
! /**
!   * Returns one of the constants from this class indicating which
!   * types of scrollbars this object uses, if any.
!   *
!   * @return The scrollbar type constant for this object.
!   */
! public int
! getScrollbarVisibility()
! {
!   return(scrollbarVisibility);
! }
  
! /*************************************************************************/
  
! /**
!   * Notify this object that it should create its native peer.
!   */
! public void
! addNotify()
! {
!   if (getPeer() != null)
!     return;
  
!   setPeer((ComponentPeer)getToolkit().createTextArea(this));
! }
  
! /*************************************************************************/
  
! /**
!   * Appends the specified text to the end of the current text.
!   *
!   * @param text The text to append.
!   */
! public void
! append(String str)
! {
!   TextAreaPeer tap = (TextAreaPeer)getPeer();
!   if (tap == null) 
!     return;
  
!   tap.insert(str, tap.getText().length());
! }
  
! /*************************************************************************/
  
! /**
!   * Appends the specified text to the end of the current text.
!   *
!   * @param text The text to append.
!   *
!   * @deprecated This method is deprecated in favor of 
!   * <code>append()</code>.
!   */
! public void
! appendText(String text)
! {
!   append(text);
! }
!  
! /*************************************************************************/
  
! /**
!   * Inserts the specified text at the specified location.
!   *
!   * @param text The text to insert.
!   * @param pos The insert position.
!   */
! public void
! insert(String text, int pos)
! {
!   TextAreaPeer tap = (TextAreaPeer)getPeer();
!   if (tap == null)
!     return;
  
!   tap.insert(text, pos);
! }
  
! /*************************************************************************/
  
! /**
!   * Inserts the specified text at the specified location.
!   *
!   * @param text The text to insert.
!   * @param pos The insert position.
!   *
!   * @deprecated This method is depcreated in favor of <code>insert()</code>.
!   */
! public void
! insertText(String text, int pos)
! {
!   insert(text, pos);
! }
  
! /*************************************************************************/
  
! /**
!   * Replaces the text bounded by the specified start and end positions
!   * with the specified text.
!   *
!   * @param text 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 text, int start, int end)
! {
!   TextAreaPeer tap = (TextAreaPeer)getPeer();
!   if (tap == null)
!     return;
  
!   tap.replaceRange(text, start, end);
! }
  
! /*************************************************************************/
  
! /**
!   * Replaces the text bounded by the specified start and end positions
!   * with the specified text.
!   *
!   * @param text 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 text, int start, int end)
! {
!   replaceRange(text, start, end);
! }
  
! /*************************************************************************/
  
! /**
!   * Returns a debugging string for this text area.
!   *
!   * @return A debugging string for this text area.
!   */
! protected String
! paramString()
! {
!   return(getClass().getName() + "(rows=" + getRows() + ",columns=" +
!          getColumns() + ",scrollbars=" + getScrollbarVisibility() +
!          ")");
  }
- 
- } // class TextArea 
- 
--- 38,629 ----
  
  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
!   {
!     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-3.4.3/libjava/java/awt/TextComponent.java gcc-4.0.0/libjava/java/awt/TextComponent.java
*** gcc-3.4.3/libjava/java/awt/TextComponent.java	Thu Dec  4 19:31:01 2003
--- gcc-4.0.0/libjava/java/awt/TextComponent.java	Wed Feb 16 20:01:54 2005
*************** package java.awt;
*** 41,50 ****
  import java.awt.event.TextEvent;
  import java.awt.event.TextListener;
  import java.awt.peer.TextComponentPeer;
- import java.awt.peer.ComponentPeer;
  import java.io.Serializable;
  import java.util.EventListener;
  
  /**
    * This class provides common functionality for widgets than 
    * contain text.
--- 41,58 ----
  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.
*************** import java.util.EventListener;
*** 52,58 ****
    * @author Aaron M. Renn (arenn@urbanophile.com)
    */
  public class TextComponent extends Component
!   implements Serializable
  {
  
  /*
--- 60,66 ----
    * @author Aaron M. Renn (arenn@urbanophile.com)
    */
  public class TextComponent extends Component
!   implements Serializable, Accessible
  {
  
  /*
*************** private String text;
*** 91,96 ****
--- 99,317 ----
    */
  protected transient TextListener textListener;
  
+   protected class AccessibleAWTTextComponent
+     extends AccessibleAWTComponent
+     implements AccessibleText, TextListener
+   {
+     // 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
+       
+     }
+     
+   }
+ 
  /*************************************************************************/
  
  /*
*************** setText(String text)
*** 142,147 ****
--- 363,369 ----
    TextComponentPeer tcp = (TextComponentPeer)getPeer();
    if (tcp != null)
      tcp.setText(text);
+   setCaretPosition(0);
  }
  
  /*************************************************************************/
*************** setSelectionEnd(int selectionEnd)
*** 234,244 ****
    * specified start and end positions.  Illegal values for these
    * positions are silently fixed.
    *
!   * @param startSelection The new start position for the selected text.
!   * @param endSelection The new end position for the selected text.
    */
  public synchronized void
! select(int selectionStart, int endSelection)
  {
    if (selectionStart < 0)
      selectionStart = 0;
--- 456,466 ----
    * 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;
*************** paramString()
*** 468,472 ****
--- 690,734 ----
    {
      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.
+   private synchronized int
+   getIndexAtPoint(Point p)
+   {
+     TextComponentPeer tcp = (TextComponentPeer)getPeer();
+     if (tcp != null)
+       return tcp.getIndexAtPoint(p.x, p.y);
+     return -1;
+   }
+   
+   private synchronized Rectangle
+   getCharacterBounds(int i)
+   {
+     TextComponentPeer tcp = (TextComponentPeer)getPeer();
+     if (tcp != null)
+       return tcp.getCharacterBounds(i);
+     return null;
+   }
+   
+   
+ 
+ 
  } // class TextComponent
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/TextField.java gcc-4.0.0/libjava/java/awt/TextField.java
*** gcc-3.4.3/libjava/java/awt/TextField.java	Thu Jun  5 19:58:39 2003
--- gcc-4.0.0/libjava/java/awt/TextField.java	Tue Nov 30 23:58:42 2004
***************
*** 1,5 ****
  /* TextField.java -- A one line text entry field
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TextField.java -- A one line text entry field
!    Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt;
*** 40,49 ****
  
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
- import java.awt.peer.TextFieldPeer;
  import java.awt.peer.ComponentPeer;
  import java.util.EventListener;
  
  /**
    * This class implements a single line text entry field widget
    *
--- 40,52 ----
  
  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
    *
*************** getEchoChar()
*** 212,222 ****
  public void
  setEchoChar(char echoChar)
  {
!   this.echoChar = echoChar;
! 
!   TextFieldPeer tfp = (TextFieldPeer)getPeer();
!   if (tfp != null)
!     tfp.setEchoChar(echoChar);
  }
  
  /*************************************************************************/
--- 215,221 ----
  public void
  setEchoChar(char echoChar)
  {
!   setEchoCharacter (echoChar);
  }
  
  /*************************************************************************/
*************** setEchoChar(char echoChar)
*** 233,239 ****
  public void
  setEchoCharacter(char echoChar)
  {
!   setEchoChar(echoChar);
  }
  
  /*************************************************************************/
--- 232,242 ----
  public void
  setEchoCharacter(char echoChar)
  {
!   this.echoChar = echoChar;
! 
!   TextFieldPeer peer = (TextFieldPeer) getPeer ();
!   if (peer != null)
!     peer.setEchoChar (echoChar);
  }
  
  /*************************************************************************/
*************** echoCharIsSet()
*** 264,270 ****
  public Dimension
  getMinimumSize()
  {
!   return(getMinimumSize(getColumns()));
  }
  
  /*************************************************************************/
--- 267,273 ----
  public Dimension
  getMinimumSize()
  {
!   return getMinimumSize (getColumns ());
  }
  
  /*************************************************************************/
*************** getMinimumSize()
*** 278,288 ****
  public Dimension
  getMinimumSize(int columns)
  {
!   TextFieldPeer tfp = (TextFieldPeer)getPeer();
!   if (tfp == null)
!     return(null); // FIXME: What do we do if there is no peer?
! 
!   return(tfp.getMinimumSize(columns));
  }
  
  /*************************************************************************/
--- 281,287 ----
  public Dimension
  getMinimumSize(int columns)
  {
!   return minimumSize (columns);
  }
  
  /*************************************************************************/
*************** getMinimumSize(int columns)
*** 292,304 ****
    *
    * @return The minimum size for this text field.
    *
!   * @deprecated This method is depcreated in favor of
    * <code>getMinimumSize()</code>.
    */
  public Dimension
  minimumSize()
  {
!   return(getMinimumSize(getColumns()));
  }
  
  /*************************************************************************/
--- 291,303 ----
    *
    * @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 ());
  }
  
  /*************************************************************************/
*************** minimumSize()
*** 315,321 ****
  public Dimension
  minimumSize(int columns)
  {
!   return(getMinimumSize(columns));
  }
  
  /*************************************************************************/
--- 314,324 ----
  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);
  }
  
  /*************************************************************************/
*************** minimumSize(int columns)
*** 328,334 ****
  public Dimension
  getPreferredSize()
  {
!   return(getPreferredSize(getColumns()));
  }
  
  /*************************************************************************/
--- 331,337 ----
  public Dimension
  getPreferredSize()
  {
!   return getPreferredSize (getColumns ());
  }
  
  /*************************************************************************/
*************** getPreferredSize()
*** 342,353 ****
  public Dimension
  getPreferredSize(int columns)
  {
!   TextFieldPeer tfp = (TextFieldPeer)getPeer();
!   if (tfp == null)
!     {
!       return new Dimension(0, 0);
!     }
!   return(tfp.getPreferredSize(columns));
  }
  
  /*************************************************************************/
--- 345,351 ----
  public Dimension
  getPreferredSize(int columns)
  {
!   return preferredSize (columns);
  }
  
  /*************************************************************************/
*************** getPreferredSize(int columns)
*** 363,369 ****
  public Dimension
  preferredSize()
  {
!   return(getPreferredSize(getColumns()));
  }
  
  /*************************************************************************/
--- 361,367 ----
  public Dimension
  preferredSize()
  {
!   return preferredSize (getColumns ());
  }
  
  /*************************************************************************/
*************** preferredSize()
*** 380,386 ****
  public Dimension
  preferredSize(int columns)
  {
!   return(getPreferredSize(columns));
  }
  
  /*************************************************************************/
--- 378,388 ----
  public Dimension
  preferredSize(int columns)
  {
!   TextFieldPeer peer = (TextFieldPeer) getPeer ();
!   if (peer == null)
!     return new Dimension (0, 0);
! 
!   return peer.getPreferredSize (columns);
  }
  
  /*************************************************************************/
*************** paramString()
*** 518,521 ****
--- 520,541 ----
    {
      return (ActionListener[]) getListeners (ActionListener.class);
    }
+ 
+   protected class AccessibleAWTTextField extends AccessibleAWTTextComponent
+   {
+     protected AccessibleAWTTextField()
+     {
+     }
+     
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       return super.getAccessibleStateSet();
+     }
+   }
+   
+   public AccessibleContext getAccessibleContext()
+   {
+     return new AccessibleAWTTextField();
+   }
+ 
  } // class TextField
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Toolkit.java gcc-4.0.0/libjava/java/awt/Toolkit.java
*** gcc-3.4.3/libjava/java/awt/Toolkit.java	Thu Sep 18 22:37:48 2003
--- gcc-4.0.0/libjava/java/awt/Toolkit.java	Thu Feb 17 07:48:24 2005
***************
*** 1,5 ****
  /* Toolkit.java -- AWT Toolkit superclass
!    Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** import java.awt.image.ImageObserver;
*** 52,59 ****
  import java.awt.image.ImageProducer;
  import java.awt.peer.ButtonPeer;
  import java.awt.peer.CanvasPeer;
- import java.awt.peer.CheckboxPeer;
  import java.awt.peer.CheckboxMenuItemPeer;
  import java.awt.peer.ChoicePeer;
  import java.awt.peer.DialogPeer;
  import java.awt.peer.FileDialogPeer;
--- 53,60 ----
  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.FramePeer;
*** 62,74 ****
  import java.awt.peer.LabelPeer;
  import java.awt.peer.LightweightPeer;
  import java.awt.peer.ListPeer;
- import java.awt.peer.MenuPeer;
  import java.awt.peer.MenuBarPeer;
  import java.awt.peer.MenuItemPeer;
  import java.awt.peer.PanelPeer;
  import java.awt.peer.PopupMenuPeer;
- import java.awt.peer.ScrollbarPeer;
  import java.awt.peer.ScrollPanePeer;
  import java.awt.peer.TextAreaPeer;
  import java.awt.peer.TextFieldPeer;
  import java.awt.peer.WindowPeer;
--- 63,75 ----
  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.util.Properties;
*** 90,96 ****
   * 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
  {
--- 91,97 ----
   * 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
  {
*************** public abstract class Toolkit
*** 365,379 ****
  
    /**
     * Copies the current system colors into the specified array.  This is
!    * the interface used by the <code>SystemColors</code> class.
     *
!    * @param colors The array to copy the system colors into.
     *
     * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
     */
    protected void loadSystemColors(int systemColors[])
    {
!     // XXX Implement.
    }
  
    /**
--- 366,411 ----
  
    /**
     * 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;
    }
  
    /**
*************** public abstract class Toolkit
*** 494,499 ****
--- 526,535 ----
          toolkit = (Toolkit) obj;
          return toolkit;
        }
+     catch (ThreadDeath death)
+       {
+         throw death;
+       }
      catch (Throwable t)
        {
  	AWTError e = new AWTError("Cannot load AWT toolkit: " + toolkit_name);
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Transparency.java gcc-4.0.0/libjava/java/awt/Transparency.java
*** gcc-3.4.3/libjava/java/awt/Transparency.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/Transparency.java	Thu Feb 17 07:48:24 2005
*************** package java.awt;
*** 40,46 ****
  /**
   * A common transparency mode for layering graphics.
   *
!  * @author Warren Levy <warrenl@cygnus.com>
   * @since 1.1
   * @status updated to 1.4
   */
--- 40,46 ----
  /**
   * A common transparency mode for layering graphics.
   *
!  * @author Warren Levy (warrenl@cygnus.com)
   * @since 1.1
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/Window.java gcc-4.0.0/libjava/java/awt/Window.java
*** gcc-3.4.3/libjava/java/awt/Window.java	Fri Oct 24 19:40:29 2003
--- gcc-4.0.0/libjava/java/awt/Window.java	Mon Feb 21 21:41:28 2005
***************
*** 1,5 ****
  /* Window.java --
!    Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Window.java --
!    Copyright (C) 1999, 2000, 2002, 2003, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 38,46 ----
  
  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.WindowStateListene
*** 45,63 ****
  import java.awt.peer.WindowPeer;
  import java.lang.ref.Reference;
  import java.lang.ref.WeakReference;
- import java.util.Iterator;
  import java.util.EventListener;
  import java.util.Locale;
  import java.util.ResourceBundle;
  import java.util.Vector;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  
  /**
   * 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
  {
--- 48,70 ----
  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
  {
*************** public class Window extends Container im
*** 80,86 ****
    private transient WindowFocusListener windowFocusListener;
    private transient WindowStateListener windowStateListener;
    private transient GraphicsConfiguration graphicsConfiguration;
!   private transient AccessibleContext accessibleContext;
  
    /** 
     * This (package access) constructor is used by subclasses that want
--- 87,117 ----
    private transient WindowFocusListener windowFocusListener;
    private transient WindowStateListener windowStateListener;
    private transient GraphicsConfiguration graphicsConfiguration;
! 
!   private transient boolean shown;
! 
!   private 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
!   {
!     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
*************** public class Window extends Container im
*** 91,97 ****
--- 122,158 ----
    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));
+                 }
+             }
+         }
+       });
    }
  
    Window(GraphicsConfiguration gc)
*************** public class Window extends Container im
*** 104,110 ****
     * Initializes a new instance of <code>Window</code> with the specified
     * parent.  The window will initially be invisible.
     *
!    * @param parent 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
--- 165,171 ----
     * 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
*************** public class Window extends Container im
*** 162,173 ****
          && gc.getDevice().getType() != GraphicsDevice.TYPE_RASTER_SCREEN)
        throw new IllegalArgumentException ("gc must be from a screen device");
  
!     // FIXME: until we implement this, it just causes AWT to crash.
! //     if (gc == null)
! //       graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment()
! //         .getDefaultScreenDevice()
! //         .getDefaultConfiguration();
! //     else
        graphicsConfiguration = gc;
    }
  
--- 223,233 ----
          && 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;
    }
  
*************** public class Window extends Container im
*** 241,246 ****
--- 301,323 ----
      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()
*************** public class Window extends Container im
*** 550,556 ****
     * <code>processWindowEvent()</code> is called to process the event,
     * otherwise the superclass version of this method is invoked.
     *
!    * @param event The event to process.
     */
    protected void processEvent(AWTEvent evt)
    {
--- 627,633 ----
     * <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)
    {
*************** public class Window extends Container im
*** 566,572 ****
     * invoked if it is enabled via <code>enableEvents()</code> or if
     * a listener has been added.
     *
!    * @param event The event to process.
     */
    protected void processWindowEvent(WindowEvent evt)
    {
--- 643,649 ----
     * 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)
    {
*************** public class Window extends Container im
*** 617,624 ****
--- 694,727 ----
  	  }
        }
    }
+   
+   /**
+    * 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.
*************** public class Window extends Container im
*** 626,648 ****
     * @return The component that has focus, or <code>null</code> if no
     * component has focus.
     */
!   public Component getFocusOwner()
    {
!     // FIXME
!     return null;
    }
  
    /**
     * Post a Java 1.0 event to the event queue.
     *
!    * @param event The event to post.
     *
     * @deprecated
     */
    public boolean postEvent(Event e)
    {
!     // FIXME
!     return false;
    }
  
    /**
--- 729,771 ----
     * @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 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);
    }
  
    /**
*************** public class Window extends Container im
*** 656,661 ****
--- 779,800 ----
      return super.isShowing();
    }
  
+   public void setLocationRelativeTo (Component c)
+   {
+     if (c == null || !c.isShowing ())
+       {
+         int x = 0;
+         int y = 0;
+ 
+         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();
+         Point center = ge.getCenterPoint ();
+         x = center.x - (width / 2);
+         y = center.y - (height / 2);
+         setLocation (x, y);
+       }
+     // FIXME: handle case where component is non-null.
+   }
+ 
    /**
     * @since 1.2
     *
*************** public class Window extends Container im
*** 673,688 ****
     */
    public void applyResourceBundle(String rbName)
    {
!     ResourceBundle rb = ResourceBundle.getBundle(rbName);
      if (rb != null)
        applyResourceBundle(rb);    
    }
  
    public AccessibleContext getAccessibleContext()
    {
!     // FIXME
!     //return null;
!     throw new Error ("Not implemented");
    }
  
    /** 
--- 812,835 ----
     */
    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;
    }
  
    /** 
*************** public class Window extends Container im
*** 784,792 ****
--- 931,968 ----
      if (this.x == x && this.y == y && width == w && height == h)
        return;
      invalidate();
+     boolean resized = width != w || height != h;
+     boolean moved = this.x != x || this.y != y;
      this.x = x;
      this.y = y;
      width = w;
      height = h;
+     if (resized && isShowing ())
+       {
+         ComponentEvent ce =
+           new ComponentEvent(this, ComponentEvent.COMPONENT_RESIZED);
+         getToolkit().getSystemEventQueue().postEvent(ce);
+       }
+     if (moved && isShowing ())
+       {
+         ComponentEvent ce =
+           new ComponentEvent(this, ComponentEvent.COMPONENT_MOVED);
+         getToolkit().getSystemEventQueue().postEvent(ce);
+       }
+   }
+ 
+   /**
+    * 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-3.4.3/libjava/java/awt/color/CMMException.java gcc-4.0.0/libjava/java/awt/color/CMMException.java
*** gcc-3.4.3/libjava/java/awt/color/CMMException.java	Thu Jan  2 00:14:23 2003
--- gcc-4.0.0/libjava/java/awt/color/CMMException.java	Thu Feb 17 07:48:25 2005
***************
*** 1,5 ****
  /* CMMException.java -- error in the native CMM
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CMMException.java -- error in the native CMM
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.color;
*** 41,47 ****
  /**
    * 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
--- 41,47 ----
  /**
    * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/color/ColorSpace.java gcc-4.0.0/libjava/java/awt/color/ColorSpace.java
*** gcc-3.4.3/libjava/java/awt/color/ColorSpace.java	Tue Jun 24 10:50:20 2003
--- gcc-4.0.0/libjava/java/awt/color/ColorSpace.java	Thu Feb 17 07:48:25 2005
*************** import java.io.Serializable;
*** 43,49 ****
  /**
   * NEEDS DOCUMENTATION
   *
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   * @since 1.2
   */
  public abstract class ColorSpace implements Serializable
--- 43,49 ----
  /**
   * NEEDS DOCUMENTATION
   *
!  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
   * @since 1.2
   */
  public abstract class ColorSpace implements Serializable
diff -Nrcpad gcc-3.4.3/libjava/java/awt/color/ICC_ColorSpace.java gcc-4.0.0/libjava/java/awt/color/ICC_ColorSpace.java
*** gcc-3.4.3/libjava/java/awt/color/ICC_ColorSpace.java	Thu Feb 13 19:28:32 2003
--- gcc-4.0.0/libjava/java/awt/color/ICC_ColorSpace.java	Thu Feb 17 07:48:25 2005
***************
*** 1,5 ****
  /* ICC_ColorSpace.java -- the canonical color space implementation
!    Copyright (C) 2000, 2002 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ICC_ColorSpace.java -- the canonical color space implementation
!    Copyright (C) 2000, 2002, 2004 Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,47 ****
  
  package java.awt.color;
  
  /**
!  * NEEDS DOCUMENTATION
   *
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   * @since 1.2
   */
  public class ICC_ColorSpace extends ColorSpace
--- 38,82 ----
  
  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
*************** public class ICC_ColorSpace extends Colo
*** 82,87 ****
--- 117,129 ----
    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
*************** public class ICC_ColorSpace extends Colo
*** 89,98 ****
     */
    public ICC_ColorSpace(ICC_Profile profile)
    {
!     super(CS_sRGB, profile.getNumComponents());
      thisProfile = profile;
    }
  
    public ICC_Profile getProfile()
    {
      return thisProfile;
--- 131,148 ----
     */
    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;
*************** public class ICC_ColorSpace extends Colo
*** 107,117 ****
     */
    public float[] toRGB(float[] colorvalue)
    {
!     if (colorvalue.length < numComponents)
!       throw new IllegalArgumentException ();
!       
!     // FIXME: Always assumes sRGB:
!     return colorvalue;
    }
  
    /**
--- 157,163 ----
     */
    public float[] toRGB(float[] colorvalue)
    {
!     return converter.toRGB(colorvalue);
    }
  
    /**
*************** public class ICC_ColorSpace extends Colo
*** 123,133 ****
     */
    public float[] fromRGB(float[] rgbvalue)
    {
!     if (rgbvalue.length < 3)
!       throw new IllegalArgumentException ();
!     
!     // FIXME: Always assumes sRGB:
!     return rgbvalue;
    }
  
    /**
--- 169,175 ----
     */
    public float[] fromRGB(float[] rgbvalue)
    {
!     return converter.fromRGB(rgbvalue);
    }
  
    /**
*************** public class ICC_ColorSpace extends Colo
*** 139,146 ****
     */
    public float[] toCIEXYZ(float[] colorvalue)
    {
!     // FIXME: Not implemented
!     throw new UnsupportedOperationException();
    }
  
    /**
--- 181,187 ----
     */
    public float[] toCIEXYZ(float[] colorvalue)
    {
!     return converter.toCIEXYZ(colorvalue);
    }
  
    /**
*************** public class ICC_ColorSpace extends Colo
*** 152,159 ****
     */
    public float[] fromCIEXYZ(float[] colorvalue)
    {
!     // FIXME: Not implemented
!     throw new UnsupportedOperationException();
    }
  
    /**
--- 193,204 ----
     */
    public float[] fromCIEXYZ(float[] colorvalue)
    {
!     return converter.fromCIEXYZ(colorvalue);
!   }
! 
!   public boolean isCS_sRGB()
!   {
!     return converter instanceof SrgbConverter;
    }
  
    /**
*************** public class ICC_ColorSpace extends Colo
*** 167,175 ****
     */
    public float getMinValue(int idx)
    {
!     if (type == TYPE_Lab && (idx == 1 || idx == 2))
!       return -128;
!     if (idx < 0 || idx >= numComponents)
        throw new IllegalArgumentException();
      return 0;
    }
--- 212,222 ----
     */
    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;
    }
*************** public class ICC_ColorSpace extends Colo
*** 185,201 ****
     */
    public float getMaxValue(int idx)
    {
!     if (type == TYPE_XYZ && idx >= 0 && idx <= 2)
        return 1 + 32767 / 32768f;
!     else if (type == TYPE_Lab)
        {
!         if (idx == 0)
!           return 100;
!         if (idx == 1 || idx == 2)
!           return 127;
        }
!     if (idx < 0 || idx >= numComponents)
        throw new IllegalArgumentException();
      return 1;
    }
  } // class ICC_ColorSpace
--- 232,314 ----
     */
    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-3.4.3/libjava/java/awt/color/ICC_Profile.java gcc-4.0.0/libjava/java/awt/color/ICC_Profile.java
*** gcc-3.4.3/libjava/java/awt/color/ICC_Profile.java	Thu Jan  2 00:14:23 2003
--- gcc-4.0.0/libjava/java/awt/color/ICC_Profile.java	Thu Feb 17 07:48:25 2005
***************
*** 1,5 ****
  /* ICC_Profile.java -- color space profiling
!    Copyright (C) 2000, 2002 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ICC_Profile.java -- color space profiling
!    Copyright (C) 2000, 2002, 2004 Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,56 ****
  
  package java.awt.color;
  
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
- import java.io.InputStream;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.ObjectStreamException;
  import java.io.OutputStream;
  import java.io.Serializable;
  
  /**
!  * STUBBED
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   * @since 1.2
   */
  public class ICC_Profile implements Serializable
--- 38,85 ----
  
  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
*************** public class ICC_Profile implements Seri
*** 60,65 ****
--- 89,97 ----
     */
    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 class ICC_Profile implements Seri
*** 68,159 ****
    public static final int CLASS_ABSTRACT = 5;
    public static final int CLASS_NAMEDCOLOR = 6;
  
!   public static final int icSigXYZData = 1482250784;
!   public static final int icSigLabData = 1281450528;
!   public static final int icSigLuvData = 1282766368;
!   public static final int icSigYCbCrData = 1497588338;
!   public static final int icSigYxyData = 1501067552;
!   public static final int icSigRgbData = 1380401696;
!   public static final int icSigGrayData = 1196573017;
!   public static final int icSigHsvData = 1213421088;
!   public static final int icSigHlsData = 1212961568;
!   public static final int icSigCmykData = 1129142603;
!   public static final int icSigCmyData = 1129142560;
!   public static final int icSigSpace2CLR = 843271250;
!   public static final int icSigSpace3CLR = 860048466;
!   public static final int icSigSpace4CLR = 876825682;
!   public static final int icSigSpace5CLR = 893602898;
!   public static final int icSigSpace6CLR = 910380114;
!   public static final int icSigSpace7CLR = 927157330;
!   public static final int icSigSpace8CLR = 943934546;
!   public static final int icSigSpace9CLR = 960711762;
!   public static final int icSigSpaceACLR = 1094929490;
!   public static final int icSigSpaceBCLR = 1111706706;
!   public static final int icSigSpaceCCLR = 1128483922;
!   public static final int icSigSpaceDCLR = 1145261138;
!   public static final int icSigSpaceECLR = 1162038354;
!   public static final int icSigSpaceFCLR = 1178815570;
  
!   public static final int icSigInputClass = 1935896178;
!   public static final int icSigDisplayClass = 1835955314;
!   public static final int icSigOutputClass = 1886549106;
!   public static final int icSigLinkClass = 1818848875;
!   public static final int icSigAbstractClass = 1633842036;
!   public static final int icSigColorSpaceClass = 1936744803;
!   public static final int icSigNamedColorClass = 1852662636;
  
    public static final int icPerceptual = 0;
    public static final int icRelativeColorimetric = 1;
    public static final int icSaturation = 2;
    public static final int icAbsoluteColorimetric = 3;
  
!   public static final int icSigHead = 1751474532;
!   public static final int icSigAToB0Tag = 1093812784;
!   public static final int icSigAToB1Tag = 1093812785;
!   public static final int icSigAToB2Tag = 1093812786;
!   public static final int icSigBlueColorantTag = 1649957210;
!   public static final int icSigBlueTRCTag = 1649693251;
!   public static final int icSigBToA0Tag = 1110589744;
!   public static final int icSigBToA1Tag = 1110589745;
!   public static final int icSigBToA2Tag = 1110589746;
!   public static final int icSigCalibrationDateTimeTag = 1667329140;
!   public static final int icSigCharTargetTag = 1952543335;
!   public static final int icSigCopyrightTag = 1668313716;
!   public static final int icSigCrdInfoTag = 1668441193;
!   public static final int icSigDeviceMfgDescTag = 1684893284;
!   public static final int icSigDeviceModelDescTag = 1684890724;
!   public static final int icSigDeviceSettingsTag = 1684371059;
!   public static final int icSigGamutTag = 1734438260;
!   public static final int icSigGrayTRCTag = 1800688195;
!   public static final int icSigGreenColorantTag = 1733843290;
!   public static final int icSigGreenTRCTag = 1733579331;
!   public static final int icSigLuminanceTag = 1819635049;
!   public static final int icSigMeasurementTag = 1835360627;
!   public static final int icSigMediaBlackPointTag = 1651208308;
!   public static final int icSigMediaWhitePointTag = 2004119668;
!   public static final int icSigNamedColor2Tag = 1852009522;
!   public static final int icSigOutputResponseTag = 1919251312;
!   public static final int icSigPreview0Tag = 1886545200;
!   public static final int icSigPreview1Tag = 1886545201;
!   public static final int icSigPreview2Tag = 1886545202;
!   public static final int icSigProfileDescriptionTag = 1684370275;
!   public static final int icSigProfileSequenceDescTag = 1886610801;
!   public static final int icSigPs2CRD0Tag = 1886610480;
!   public static final int icSigPs2CRD1Tag = 1886610481;
!   public static final int icSigPs2CRD2Tag = 1886610482;
!   public static final int icSigPs2CRD3Tag = 1886610483;
!   public static final int icSigPs2CSATag = 1886597747;
!   public static final int icSigPs2RenderingIntentTag = 1886597737;
!   public static final int icSigRedColorantTag = 1918392666;
!   public static final int icSigRedTRCTag = 1918128707;
!   public static final int icSigScreeningDescTag = 1935897188;
!   public static final int icSigScreeningTag = 1935897198;
!   public static final int icSigTechnologyTag = 1952801640;
!   public static final int icSigUcrBgTag = 1650877472;
!   public static final int icSigViewingCondDescTag = 1987405156;
!   public static final int icSigViewingConditionsTag = 1986618743;
!   public static final int icSigChromaticityTag = 1667789421;
  
    public static final int icHdrSize = 0;
    public static final int icHdrCmmId = 4;
    public static final int icHdrVersion = 8;
--- 100,210 ----
    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 class ICC_Profile implements Seri
*** 171,299 ****
    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;
  
    /**
     * @serial
     */
!   final int iccProfileSerializedDataVersion = 1;
  
!   transient int profileID;
  
    ICC_Profile(int profileID)
    {
!     this.profileID = profileID;
    }
  
    protected void finalize()
    {
-     // XXX What resources should we free?
    }
  
    public static ICC_Profile getInstance(byte[] data)
    {
!     throw new Error("not implemented");
    }
  
    public static ICC_Profile getInstance(int cspace)
    {
      return new ICC_Profile(cspace);
    }
  
!   public static ICC_Profile getInstance(String filename) throws IOException
    {
      return getInstance(new FileInputStream(filename));
    }
  
!   public static ICC_Profile getInstance(InputStream in) throws IOException
    {
!     throw new Error("not implemented");
    }
  
    public int getMajorVersion()
    {
!     throw new Error("not implemented");
    }
  
    public int getMinorVersion()
    {
!     throw new Error("not implemented");
    }
  
    public int getProfileClass()
    {
!     throw new Error("not implemented");
    }
  
    public int getColorSpaceType()
    {
!     throw new Error("not implemented");
    }
  
    public int getPCSType()
    {
!     throw new Error("not implemented");
    }
  
    public void write(String filename) throws IOException
    {
!     write(new FileOutputStream(filename));
    }
  
    public void write(OutputStream out) throws IOException
    {
!     throw new Error("not implemented");
    }
  
    public byte[] getData()
    {
!     throw new Error("not implemented");
    }
  
    public byte[] getData(int tagSignature)
    {
!     throw new Error("not implemented");
    }
  
    public void setData(int tagSignature, byte[] data)
    {
!     throw new Error("not implemented");
    }
  
    public int getNumComponents()
    {
!     switch (profileID)
        {
        case ColorSpace.CS_sRGB:
        case ColorSpace.CS_LINEAR_RGB:
        case ColorSpace.CS_CIEXYZ:
! 	return 3;
        case ColorSpace.CS_GRAY:
! 	return 1;
!       case ColorSpace.CS_PYCC: // have no clue about this one
        default:
! 	throw new UnsupportedOperationException("profile not implemented");
        }
    }
  
!   protected Object readResolve() throws ObjectStreamException
    {
!     throw new Error("not implemented");
    }
  
!   private void readObject(ObjectInputStream s)
!     throws IOException, ClassNotFoundException
    {
!     throw new Error("not implemented");
    }
  
!   private void writeObject(ObjectOutputStream s) throws IOException
    {
!     throw new Error("not implemented");
    }
  } // class ICC_Profile
--- 222,1244 ----
    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.
+    *
+    * @throws IllegalArgumentException if the profile data is an invalid
+    * v2 profile.
+    *
+    * @param data - the profile data
+    * @return An ICC_Profile object
+    */
    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.
!    *
!    * @throws IllegalArgumentException if the profile data is an invalid
!    * v2 profile.
!    * @throws IOException if the file could not be read.
!    *
!    * @param filename - the file name of the profile file.
!    * @return An ICC_Profile object
!    */
!   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.
!    *
!    * @throws IllegalArgumentException if the profile data is an invalid
!    * v2 profile.
!    * @throws IOException if the stream could not be read.
!    *
!    * @param in - the input stream to read the profile from.
!    * @return An ICC_Profile object
!    */
!   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-3.4.3/libjava/java/awt/color/ICC_ProfileGray.java gcc-4.0.0/libjava/java/awt/color/ICC_ProfileGray.java
*** gcc-3.4.3/libjava/java/awt/color/ICC_ProfileGray.java	Sun Nov 10 00:16:42 2002
--- gcc-4.0.0/libjava/java/awt/color/ICC_ProfileGray.java	Tue Nov 30 23:58:42 2004
***************
*** 1,5 ****
  /* ICC_ProfileGray.java -- the ICC profile for a Gray colorspace
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,45 ****
  package java.awt.color;
  
  /**
!  * STUBBED
   * @since 1.2
   */
  public class ICC_ProfileGray extends ICC_Profile
--- 39,60 ----
  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
*************** public class ICC_ProfileGray extends ICC
*** 48,71 ****
     * Compatible with JDK 1.2+.
     */
    private static final long serialVersionUID = -1124721290732002649L;
  
!   ICC_ProfileGray()
    {
!     super(ColorSpace.CS_GRAY);
    }
  
    public float[] getMediaWhitePoint()
    {
!     return null;
    }
  
    public float getGamma()
    {
!     return 0;
    }
  
    public short[] getTRC()
    {
!     return null;
    }
  } // class ICC_ProfileGray
--- 63,133 ----
     * 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-3.4.3/libjava/java/awt/color/ICC_ProfileRGB.java gcc-4.0.0/libjava/java/awt/color/ICC_ProfileRGB.java
*** gcc-3.4.3/libjava/java/awt/color/ICC_ProfileRGB.java	Sun Nov 10 00:16:42 2002
--- gcc-4.0.0/libjava/java/awt/color/ICC_ProfileRGB.java	Tue Nov 30 23:58:42 2004
***************
*** 1,5 ****
  /* ICC_ProfileRGB.java -- the ICC profile for a RGB colorspace
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,45 ****
  package java.awt.color;
  
  /**
!  * STUBBED
   * @since 1.2
   */
  public class ICC_ProfileRGB extends ICC_Profile
--- 39,72 ----
  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
*************** public class ICC_ProfileRGB extends ICC_
*** 50,80 ****
    private static final long serialVersionUID = 8505067385152579334L;
  
    public static final int REDCOMPONENT = 0;
    public static final int GREENCOMPONENT = 1;
    public static final int BLUECOMPONENT = 2;
  
!   ICC_ProfileRGB()
    {
!     super(ColorSpace.CS_sRGB);
    }
  
    public float[] getMediaWhitePoint()
    {
!     return null;
    }
  
    public float[][] getMatrix()
    {
!     return null;
    }
  
    public float getGamma(int component)
    {
!     return 0;
    }
  
    public short[] getTRC(int component)
    {
!     return null;
    }
  } // class ICC_ProfileRGB
--- 77,227 ----
    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-3.4.3/libjava/java/awt/color/ProfileDataException.java gcc-4.0.0/libjava/java/awt/color/ProfileDataException.java
*** gcc-3.4.3/libjava/java/awt/color/ProfileDataException.java	Thu Jan  2 00:14:23 2003
--- gcc-4.0.0/libjava/java/awt/color/ProfileDataException.java	Thu Feb 17 07:48:25 2005
***************
*** 1,5 ****
  /* ProfileDataException.java -- error in processing an ICC_Profile
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ProfileDataException.java -- error in processing an ICC_Profile
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.color;
*** 42,48 ****
    * 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
--- 42,48 ----
    * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/datatransfer/Clipboard.java gcc-4.0.0/libjava/java/awt/datatransfer/Clipboard.java
*** gcc-3.4.3/libjava/java/awt/datatransfer/Clipboard.java	Thu Jan  2 00:14:23 2003
--- gcc-4.0.0/libjava/java/awt/datatransfer/Clipboard.java	Tue Nov 30 23:58:43 2004
*************** exception statement from your version. *
*** 39,140 ****
  package java.awt.datatransfer;
  
  /**
!   * This class allows data to be transferred using a cut and paste type
!   * mechanism.
!   *
!   * @author Aaron M. Renn (arenn@urbanophile.com)
!   */
! public class Clipboard
! {
! 
! /*
!  * Instance Variables
!  */
! 
! /**
!   * The data being transferred.
!   */
! protected Transferable contents;
! 
! /**
!   * The owner of this clipboard.
!   */
! protected ClipboardOwner owner;
! 
! // The clipboard name
! private String name;
! 
! /*************************************************************************/
! 
! /*
!  * Constructors
   */
! 
! /**
!   * Initializes a new instance of <code>Clipboard</code> with the
!   * specified name.
!   *
!   * @param name The clipboard name.
!   */
! public 
! Clipboard(String name)
  {
!   this.name = name;
! }
! 
! /*************************************************************************/
  
! /*
!  * Instance Methods
!  */
  
! /**
!   * Returns the name of the clipboard.
!   */
! public String
! getName()
! {
!   return(name);
! }
  
! /*************************************************************************/
  
! /**
!   * Returns the contents of the clipboard.
!   *
!   * @param requestor The object requesting the contents.
!   *
!   * @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 lostOwnership is called on the current owner.
!   * XXX - is this called with the old or new contents.
!   *
!   * @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)
! {
!   if (this.owner != owner)
!     if (this.owner != null)
!       this.owner.lostOwnership(this, contents);
   
!   this.owner = owner;
!   this.contents = contents;
  }
  
- } // class Clipboard
- 
--- 39,114 ----
  package java.awt.datatransfer;
  
  /**
!  * This class allows data to be transferred using a cut and paste type
!  * mechanism.
!  *
!  * @author Aaron M. Renn (arenn@urbanophile.com)
   */
! public class Clipboard
  {
!   /**
!    * The data being transferred.
!    */
!   protected Transferable contents;
  
!   /**
!    * The owner of this clipboard.
!    */
!   protected ClipboardOwner owner;
  
!   // The clipboard name
!   private String name;
  
!   /**
!    * 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.
!    *
!    * @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 lostOwnership is called on the current owner.
!    * XXX - is this called with the old or new contents.
!    *
!    * @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)
!   {
!     if (this.owner != owner)
!       if (this.owner != null)
!         this.owner.lostOwnership(this, contents);
   
!     this.owner = owner;
!     this.contents = contents;
!   }
  }
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/datatransfer/ClipboardOwner.java gcc-4.0.0/libjava/java/awt/datatransfer/ClipboardOwner.java
*** gcc-3.4.3/libjava/java/awt/datatransfer/ClipboardOwner.java	Sat Oct 11 17:19:45 2003
--- gcc-4.0.0/libjava/java/awt/datatransfer/ClipboardOwner.java	Tue Nov 30 23:58:43 2004
*************** public interface ClipboardOwner
*** 53,58 ****
     * @param contents The contents of the clipboard which are no longer owned.
     */
    void lostOwnership (Clipboard clipboard, Transferable contents); 
! 
! } // interface ClipboardOwner
  
--- 53,57 ----
     * @param contents The contents of the clipboard which are no longer owned.
     */
    void lostOwnership (Clipboard clipboard, Transferable contents); 
! }
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/datatransfer/DataFlavor.java gcc-4.0.0/libjava/java/awt/datatransfer/DataFlavor.java
*** gcc-3.4.3/libjava/java/awt/datatransfer/DataFlavor.java	Mon Dec  8 23:37:58 2003
--- gcc-4.0.0/libjava/java/awt/datatransfer/DataFlavor.java	Tue Nov 30 23:58:43 2004
***************
*** 1,5 ****
  /* DataFlavor.java -- A type of data to transfer via the clipboard.
!    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,49 ****
  package java.awt.datatransfer;
  
  import java.io.ByteArrayInputStream;
  import java.io.InputStream;
  import java.io.InputStreamReader;
- import java.io.IOException;
- import java.io.ObjectOutput;
  import java.io.ObjectInput;
  import java.io.Reader;
  import java.io.StringReader;
  import java.io.UnsupportedEncodingException;
--- 39,49 ----
  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;
*************** public class DataFlavor implements java.
*** 60,70 ****
  {
    static final long serialVersionUID = 8367026044764648243L;
  
! // FIXME: Serialization: Need to write methods for.
! 
! /*
!  * Static Variables
!  */
  
  /**
   * This is the data flavor used for tranferring plain text.  The MIME
--- 60,66 ----
  {
    static final long serialVersionUID = 8367026044764648243L;
  
!   // FIXME: Serialization: Need to write methods for.
  
  /**
   * This is the data flavor used for tranferring plain text.  The MIME
*************** public static final DataFlavor stringFla
*** 90,95 ****
--- 86,95 ----
   */
  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;
  
  /**
*************** public static final String javaSerialize
*** 105,111 ****
   * being transferred.
   */
  public static final String javaJVMLocalObjectMimeType =
!   "application/x-java-jvm-local-object";
  
  /**
   * This is the MIME type used to transfer a link to a remote object.
--- 105,111 ----
   * 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.
*************** DataFlavor(Class representationClass, St
*** 270,276 ****
  /**
   * Initializes a new instance of <code>DataFlavor</code> with the
   * specified MIME type and description.  If the MIME type has a
!  * "class=<rep class>" 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
--- 270,276 ----
  /**
   * 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
*************** getRepresentationClassFromMime(String mi
*** 319,325 ****
  /**
   * Initializes a new instance of <code>DataFlavor</code> with the
   * specified MIME type and description.  If the MIME type has a
!  * "class=<rep class>" 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
--- 319,325 ----
  /**
   * 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
*************** getRepresentationClassFromMime(String mi
*** 328,334 ****
   *
   * @param mimeType The MIME type for this flavor.
   * @param humanPresentableName The display name of this flavor.
-  * @param classLoader The class loader for finding classes.
   *
   * @exception IllegalArgumentException If the representation class
   * specified cannot be loaded.
--- 328,333 ----
*************** isMimeTypeEqual(String mimeType)
*** 529,535 ****
   * @return <code>true</code> if the flavor's MIME type is equal to this 
   * object's MIME type, <code>false</code> otherwise.
   */
! public boolean
  isMimeTypeEqual(DataFlavor flavor)
  {
    return(isMimeTypeEqual(flavor.getMimeType()));
--- 528,534 ----
   * @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()));
*************** isMimeTypeSerializedObject()
*** 555,561 ****
   * Tests whether or not this flavor has a representation class of
   * <code>java.io.InputStream</code>.
   *
!  * @param <code>true</code> if the representation class of this flavor
   * is <code>java.io.InputStream</code>, <code>false</code> otherwise.
   */
  public boolean
--- 554,560 ----
   * 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()
*** 570,576 ****
   * Tests whether the representation class for this flavor is
   * serializable.
   *
!  * @param <code>true</code> if the representation class is serializable,
   * <code>false</code> otherwise.
   */
  public boolean
--- 569,575 ----
   * 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
*************** equals(DataFlavor flavor)
*** 709,718 ****
   * are met:
   * <p>
   * <ul>
!  * <li>The object is not <code>null</code>.
!  * <li>The object is an instance of <code>DataFlavor</code>.
   * <li>The object's MIME type and representation class are equal to
!  * this object's.
   * </ul>
   *
   * @param obj The <code>Object</code> to test against.
--- 708,717 ----
   * 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.
diff -Nrcpad gcc-3.4.3/libjava/java/awt/datatransfer/FlavorTable.java gcc-4.0.0/libjava/java/awt/datatransfer/FlavorTable.java
*** gcc-3.4.3/libjava/java/awt/datatransfer/FlavorTable.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/datatransfer/FlavorTable.java	Thu Feb 17 07:48:25 2005
***************
*** 1,5 ****
  /* FlavorTable.java -- A relaxed mapping between flavors
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FlavorTable.java -- A relaxed mapping between flavors
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.List;
*** 45,51 ****
   * 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
   */
--- 45,51 ----
   * 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 Fla
*** 66,73 ****
     * list should be sorted from best to worst. The list must be modifiable
     * without affecting this table.
     *
!    * @param native the native to look up, or null to return all flavors
     * @return the sorted list of flavors
     */
    List getFlavorsForNative(String name);
! } // interface FlavorTable
--- 66,73 ----
     * 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-3.4.3/libjava/java/awt/datatransfer/MimeTypeParseException.java gcc-4.0.0/libjava/java/awt/datatransfer/MimeTypeParseException.java
*** gcc-3.4.3/libjava/java/awt/datatransfer/MimeTypeParseException.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/datatransfer/MimeTypeParseException.java	Thu Feb 17 07:48:26 2005
***************
*** 1,5 ****
  /* MimeTypeParseException.java -- thrown when MIME string couldn't be parsed
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.awt.datatransfer;
*** 41,47 ****
  /**
    * MIME string couldn't be parsed correctly.
    *
!   * @author Mark Wielaard <mark@klomp.org>
    * @status updated to 1.4
    */
  public class MimeTypeParseException extends Exception
--- 41,47 ----
  /**
    * MIME string couldn't be parsed correctly.
    *
!   * @author Mark Wielaard (mark@klomp.org)
    * @status updated to 1.4
    */
  public class MimeTypeParseException extends Exception
diff -Nrcpad gcc-3.4.3/libjava/java/awt/datatransfer/StringSelection.java gcc-4.0.0/libjava/java/awt/datatransfer/StringSelection.java
*** gcc-3.4.3/libjava/java/awt/datatransfer/StringSelection.java	Mon Dec  8 23:56:43 2003
--- gcc-4.0.0/libjava/java/awt/datatransfer/StringSelection.java	Tue Nov 30 23:58:43 2004
***************
*** 1,5 ****
  /* StringSelection.java -- Clipboard handler for text.
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* StringSelection.java -- Clipboard handler for text.
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.awt.datatransfer;
  
- import java.io.StringReader;
  import java.io.IOException;
  
  /**
    * This class transfers a string as plain text using the clipboard.
--- 38,45 ----
  
  package java.awt.datatransfer;
  
  import java.io.IOException;
+ import java.io.StringReader;
  
  /**
    * This class transfers a string as plain text using the clipboard.
*************** static final DataFlavor[] supported_flav
*** 68,93 ****
  // This is the data to transfer
  private String data;
  
! /*************************************************************************/
! 
! /*
!  * Constructors
!  */
! 
! /**
!   * Transfer the specfied string as text.
!   */
! public
! StringSelection(String data)
! {
!   this.data = data;
! }
! 
! /*************************************************************************/
! 
! /*
!  * Instance Methods
!  */
  
  /**
    * Returns a list of supported data flavors.
--- 68,82 ----
  // 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.
diff -Nrcpad gcc-3.4.3/libjava/java/awt/datatransfer/SystemFlavorMap.java gcc-4.0.0/libjava/java/awt/datatransfer/SystemFlavorMap.java
*** gcc-3.4.3/libjava/java/awt/datatransfer/SystemFlavorMap.java	Thu Jan  2 00:14:23 2003
--- gcc-4.0.0/libjava/java/awt/datatransfer/SystemFlavorMap.java	Tue Nov 30 23:58:43 2004
***************
*** 1,5 ****
  /* SystemFlavorMap.java -- Maps between native flavor names and MIME types.
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,46 ****
  package java.awt.datatransfer;
  
  import java.util.HashMap;
- import java.util.Map;
  import java.util.List;
  
  /**
    * This class maps between native platform type names and DataFlavors.
--- 39,46 ----
  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.
diff -Nrcpad gcc-3.4.3/libjava/java/awt/datatransfer/Transferable.java gcc-4.0.0/libjava/java/awt/datatransfer/Transferable.java
*** gcc-3.4.3/libjava/java/awt/datatransfer/Transferable.java	Sat Oct 11 17:19:45 2003
--- gcc-4.0.0/libjava/java/awt/datatransfer/Transferable.java	Thu Feb 17 07:48:26 2005
***************
*** 1,5 ****
  /* Transferable.java -- Data transfer source
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Transferable.java -- Data transfer source
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.IOException;
*** 43,49 ****
  /**
   * 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
   */
--- 43,49 ----
  /**
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/datatransfer/UnsupportedFlavorException.java gcc-4.0.0/libjava/java/awt/datatransfer/UnsupportedFlavorException.java
*** gcc-3.4.3/libjava/java/awt/datatransfer/UnsupportedFlavorException.java	Fri Aug  9 04:26:14 2002
--- gcc-4.0.0/libjava/java/awt/datatransfer/UnsupportedFlavorException.java	Thu Feb 17 07:48:26 2005
***************
*** 1,5 ****
  /* UnsupportedFlavorException.java -- ata flavor is not valid
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UnsupportedFlavorException.java -- ata flavor is not valid
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.datatransfer;
*** 41,47 ****
  /**
   * 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
   */
--- 41,47 ----
  /**
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/Autoscroll.java gcc-4.0.0/libjava/java/awt/dnd/Autoscroll.java
*** gcc-3.4.3/libjava/java/awt/dnd/Autoscroll.java	Sat Oct 11 17:19:45 2003
--- gcc-4.0.0/libjava/java/awt/dnd/Autoscroll.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* Autoscroll.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Autoscroll.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,51 ****
  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.Insets;
  
  /**
   * 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
   */
--- 35,52 ----
  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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DnDConstants.java gcc-4.0.0/libjava/java/awt/dnd/DnDConstants.java
*** gcc-3.4.3/libjava/java/awt/dnd/DnDConstants.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/dnd/DnDConstants.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DnDConstants.java -- constants for drag-and-drop operations
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DnDConstants.java -- constants for drag-and-drop operations
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.dnd;
*** 42,48 ****
   * 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
   */
--- 42,48 ----
   * 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
*** 69,72 ****
  
    /** A synonym for {@link #ACTION_LINK}. */
    public static final int ACTION_REFERENCE = ACTION_LINK;
! } // class DnDConstants
--- 69,77 ----
  
    /** A synonym for {@link #ACTION_LINK}. */
    public static final int ACTION_REFERENCE = ACTION_LINK;
! 
!   private DnDConstants()
!   {
!     // Do nothing here.
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DragGestureListener.java gcc-4.0.0/libjava/java/awt/dnd/DragGestureListener.java
*** gcc-3.4.3/libjava/java/awt/dnd/DragGestureListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/dnd/DragGestureListener.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DragGestureListener.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DragGestureListener.java --
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DragSourceAdapter.java gcc-4.0.0/libjava/java/awt/dnd/DragSourceAdapter.java
*** gcc-3.4.3/libjava/java/awt/dnd/DragSourceAdapter.java	Thu Oct  3 14:40:43 2002
--- gcc-4.0.0/libjava/java/awt/dnd/DragSourceAdapter.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DragSourceAdapter.java -- drag-and-drop listener adapter
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DragSourceAdapter.java -- drag-and-drop listener adapter
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.dnd;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DragSourceDropEvent.java gcc-4.0.0/libjava/java/awt/dnd/DragSourceDropEvent.java
*** gcc-3.4.3/libjava/java/awt/dnd/DragSourceDropEvent.java	Mon Feb 17 15:26:30 2003
--- gcc-4.0.0/libjava/java/awt/dnd/DragSourceDropEvent.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DragSourceDragEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DragSourceDragEvent.java --
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  package java.awt.dnd;
  
  /**
!  * @author Michael Koch <konqueror@gmx.de>
   * @since 1.2
   *
   * Written using JDK 1.4.1 Online API
--- 38,44 ----
  package java.awt.dnd;
  
  /**
!  * @author Michael Koch (konqueror@gmx.de)
   * @since 1.2
   *
   * Written using JDK 1.4.1 Online API
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DragSourceListener.java gcc-4.0.0/libjava/java/awt/dnd/DragSourceListener.java
*** gcc-3.4.3/libjava/java/awt/dnd/DragSourceListener.java	Thu Nov  7 08:45:17 2002
--- gcc-4.0.0/libjava/java/awt/dnd/DragSourceListener.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DragSourceListener.java -- listen to events during the drag
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DragSourceListener.java -- listen to events during the drag
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 46,52 ****
   * 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
   */
--- 46,52 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DragSourceMotionListener.java gcc-4.0.0/libjava/java/awt/dnd/DragSourceMotionListener.java
*** gcc-3.4.3/libjava/java/awt/dnd/DragSourceMotionListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/dnd/DragSourceMotionListener.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DragSourceMotionListener.java -- tracks motion in the drag source
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DragSourceMotionListener.java -- tracks motion in the drag source
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DropTarget.java gcc-4.0.0/libjava/java/awt/dnd/DropTarget.java
*** gcc-3.4.3/libjava/java/awt/dnd/DropTarget.java	Mon Mar 24 13:12:55 2003
--- gcc-4.0.0/libjava/java/awt/dnd/DropTarget.java	Wed Feb 16 20:02:01 2005
***************
*** 1,5 ****
  /* DropTarget.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DropTarget.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
  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.Component;
  import java.awt.GraphicsEnvironment;
  import java.awt.HeadlessException;
  import java.awt.datatransfer.FlavorMap;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
--- 35,47 ----
  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;
*************** public class DropTarget
*** 204,218 ****
    /**
     * Adds a new <code>DropTargetListener</code>.
     * 
!    * @exception TooManyListenersException If there is already a
!    * <code>DropTargetListener</code>.
     */
    public void addDropTargetListener (DropTargetListener dtl)
      throws TooManyListenersException
    {
-     if (dtl != null)
-       throw new TooManyListenersException ();
-     
      dropTargetListener = dtl;
    }
  
--- 205,218 ----
    /**
     * 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;
    }
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DropTargetAdapter.java gcc-4.0.0/libjava/java/awt/dnd/DropTargetAdapter.java
*** gcc-3.4.3/libjava/java/awt/dnd/DropTargetAdapter.java	Thu Oct  3 14:40:43 2002
--- gcc-4.0.0/libjava/java/awt/dnd/DropTargetAdapter.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DragSourceAdapter.java -- drag-and-drop listener adapter
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DragSourceAdapter.java -- drag-and-drop listener adapter
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.dnd;
*** 43,49 ****
   * 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
   */
--- 43,49 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DropTargetContext.java gcc-4.0.0/libjava/java/awt/dnd/DropTargetContext.java
*** gcc-3.4.3/libjava/java/awt/dnd/DropTargetContext.java	Mon Mar 24 13:12:55 2003
--- gcc-4.0.0/libjava/java/awt/dnd/DropTargetContext.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DropTargetContext.java --
!    Copyright (C) 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DropTargetContext.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,54 ****
  
  package java.awt.dnd;
  
- import java.awt.dnd.peer.DropTargetContextPeer;
- import java.io.Serializable;
- import java.io.IOException;
  import java.awt.Component;
  import java.awt.datatransfer.DataFlavor;
  import java.awt.datatransfer.Transferable;
  import java.awt.datatransfer.UnsupportedFlavorException;
  import java.util.Arrays;
  import java.util.List;
  
  /**
!  * @author Michael Koch <konqueror@gmx.de>
   * @since 1.2
   */
  public class DropTargetContext implements Serializable
--- 37,53 ----
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DropTargetDragEvent.java gcc-4.0.0/libjava/java/awt/dnd/DropTargetDragEvent.java
*** gcc-3.4.3/libjava/java/awt/dnd/DropTargetDragEvent.java	Mon Feb 17 15:26:30 2003
--- gcc-4.0.0/libjava/java/awt/dnd/DropTargetDragEvent.java	Tue Nov 30 23:58:43 2004
***************
*** 1,5 ****
  /* DropTargetDragEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DropTargetDragEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.List;
  import java.awt.Point;
  import java.awt.datatransfer.DataFlavor;
  
  /**
   * @since 1.2
--- 35,46 ----
  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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/DropTargetListener.java gcc-4.0.0/libjava/java/awt/dnd/DropTargetListener.java
*** gcc-3.4.3/libjava/java/awt/dnd/DropTargetListener.java	Mon Feb 17 15:26:30 2003
--- gcc-4.0.0/libjava/java/awt/dnd/DropTargetListener.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DropTargetListener.java -- listen to events during the drop
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DropTargetListener.java -- listen to events during the drop
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.dnd;
*** 41,47 ****
  import java.util.EventListener;
  
  /**
!  * @author Michael Koch <konqueror@gmx.de>
   * @since 1.2
   * @status updated to 1.4
   */
--- 41,47 ----
  import java.util.EventListener;
  
  /**
!  * @author Michael Koch (konqueror@gmx.de)
   * @since 1.2
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/InvalidDnDOperationException.java gcc-4.0.0/libjava/java/awt/dnd/InvalidDnDOperationException.java
*** gcc-3.4.3/libjava/java/awt/dnd/InvalidDnDOperationException.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/dnd/InvalidDnDOperationException.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* InvalidDnDOperationException.java -- thrown when drag-and-drop fails
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InvalidDnDOperationException.java -- thrown when drag-and-drop fails
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.dnd;
*** 43,49 ****
   * 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
   */
--- 43,49 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/MouseDragGestureRecognizer.java gcc-4.0.0/libjava/java/awt/dnd/MouseDragGestureRecognizer.java
*** gcc-3.4.3/libjava/java/awt/dnd/MouseDragGestureRecognizer.java	Sun Mar  2 19:24:49 2003
--- gcc-4.0.0/libjava/java/awt/dnd/MouseDragGestureRecognizer.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* MouseDragGestureRecognizer.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MouseDragGestureRecognizer.java --
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.MouseListener;
*** 43,49 ****
  import java.awt.event.MouseMotionListener;
  
  /**
!  * @author Michael Koch <konqueror@gmx.de>
   */
  public abstract class MouseDragGestureRecognizer 
    extends DragGestureRecognizer
--- 43,49 ----
  import java.awt.event.MouseMotionListener;
  
  /**
!  * @author Michael Koch (konqueror@gmx.de)
   */
  public abstract class MouseDragGestureRecognizer 
    extends DragGestureRecognizer
diff -Nrcpad gcc-3.4.3/libjava/java/awt/dnd/peer/DropTargetContextPeer.java gcc-4.0.0/libjava/java/awt/dnd/peer/DropTargetContextPeer.java
*** gcc-3.4.3/libjava/java/awt/dnd/peer/DropTargetContextPeer.java	Sat Oct 11 17:19:45 2003
--- gcc-4.0.0/libjava/java/awt/dnd/peer/DropTargetContextPeer.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* DropTargetContextPeer.java -- interface for drag-and-drop peers
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DropTargetContextPeer.java -- interface for drag-and-drop peers
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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;
  import java.awt.datatransfer.DataFlavor;
  import java.awt.datatransfer.Transferable;
  import java.awt.dnd.InvalidDnDOperationException;
  
  
--- 35,46 ----
  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;
  
  
*************** import java.awt.dnd.InvalidDnDOperationE
*** 49,55 ****
   * 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
  {
--- 50,56 ----
   * 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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/AWTEventListener.java gcc-4.0.0/libjava/java/awt/event/AWTEventListener.java
*** gcc-3.4.3/libjava/java/awt/event/AWTEventListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/AWTEventListener.java	Thu Feb 17 07:48:27 2005
***************
*** 1,5 ****
  /* AWTEventListener.java -- listen for all events in the AWT system
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.util.EventListener;
*** 46,52 ****
   * 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)
--- 46,52 ----
   * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/AWTEventListenerProxy.java gcc-4.0.0/libjava/java/awt/event/AWTEventListenerProxy.java
*** gcc-3.4.3/libjava/java/awt/event/AWTEventListenerProxy.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/AWTEventListenerProxy.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* AWTEventListenerProxy.java -- wrapper/filter for AWTEventListener
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AWTEventListenerProxy.java -- wrapper/filter for AWTEventListener
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListenerProxy;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ActionEvent.java gcc-4.0.0/libjava/java/awt/event/ActionEvent.java
*** gcc-3.4.3/libjava/java/awt/event/ActionEvent.java	Mon Jul  7 19:56:03 2003
--- gcc-4.0.0/libjava/java/awt/event/ActionEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* ActionEvent.java -- an action has been triggered
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ActionEvent.java -- an action has been triggered
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.EventQueue;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ActionListener.java gcc-4.0.0/libjava/java/awt/event/ActionListener.java
*** gcc-3.4.3/libjava/java/awt/event/ActionListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/ActionListener.java	Tue Nov 30 23:58:45 2004
*************** import java.util.EventListener;
*** 43,49 ****
  /**
   * 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
--- 43,49 ----
  /**
   * 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 
*** 55,59 ****
     *
     * @param event the <code>ActionEvent</code> that occurred
     */
!   void actionPerformed(ActionEvent e);
! } // interface ActionListener
--- 55,59 ----
     *
     * @param event the <code>ActionEvent</code> that occurred
     */
!   void actionPerformed(ActionEvent event);
! }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/AdjustmentEvent.java gcc-4.0.0/libjava/java/awt/event/AdjustmentEvent.java
*** gcc-3.4.3/libjava/java/awt/event/AdjustmentEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/AdjustmentEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* AdjustmentEvent.java -- an adjustable value was changed
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AdjustmentEvent.java -- an adjustable value was changed
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,51 ****
  
  package java.awt.event;
  
- import java.awt.Adjustable;
  import java.awt.AWTEvent;
  
  /**
   * 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
--- 38,51 ----
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/AdjustmentListener.java gcc-4.0.0/libjava/java/awt/event/AdjustmentListener.java
*** gcc-3.4.3/libjava/java/awt/event/AdjustmentListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/AdjustmentListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* AdjustmentListener.java -- listen for adjustment events
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AdjustmentListener.java -- listen for adjustment events
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 43,49 ****
  /**
   * Interface for classes that listen for adjustment events.
   *
!  * @author Aaron M. Renn <arenn@urbanophile.com>
   * @since 1.1
   * @status updated to 1.4
   */
--- 43,49 ----
  /**
   * Interface for classes that listen for adjustment events.
   *
!  * @author Aaron M. Renn (arenn@urbanophile.com)
   * @since 1.1
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ComponentAdapter.java gcc-4.0.0/libjava/java/awt/event/ComponentAdapter.java
*** gcc-3.4.3/libjava/java/awt/event/ComponentAdapter.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/ComponentAdapter.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* ComponentAdapter.java -- convenience class for writing component listeners
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ComponentAdapter.java -- convenience class for writing component listeners
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.event;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ComponentEvent.java gcc-4.0.0/libjava/java/awt/event/ComponentEvent.java
*** gcc-3.4.3/libjava/java/awt/event/ComponentEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/ComponentEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* ComponentEvent.java -- notification of events for components
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ComponentEvent.java -- notification of events for components
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Component;
*** 48,54 ****
   * 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
--- 48,54 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ComponentListener.java gcc-4.0.0/libjava/java/awt/event/ComponentListener.java
*** gcc-3.4.3/libjava/java/awt/event/ComponentListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/ComponentListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* ComponentListener.java -- receive all events for a component
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ComponentListener.java -- receive all events for a component
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ContainerAdapter.java gcc-4.0.0/libjava/java/awt/event/ContainerAdapter.java
*** gcc-3.4.3/libjava/java/awt/event/ContainerAdapter.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/ContainerAdapter.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* ContainerAdapter.java -- convenience class for writing container listeners
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ContainerAdapter.java -- convenience class for writing container listeners
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.event;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ContainerEvent.java gcc-4.0.0/libjava/java/awt/event/ContainerEvent.java
*** gcc-3.4.3/libjava/java/awt/event/ContainerEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/ContainerEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* ContainerEvent.java -- components added/removed from a container
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ContainerEvent.java -- components added/removed from a container
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Container;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ContainerListener.java gcc-4.0.0/libjava/java/awt/event/ContainerListener.java
*** gcc-3.4.3/libjava/java/awt/event/ContainerListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/ContainerListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* ContainerListener.java -- listen for container events
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ContainerListener.java -- listen for container events
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/FocusAdapter.java gcc-4.0.0/libjava/java/awt/event/FocusAdapter.java
*** gcc-3.4.3/libjava/java/awt/event/FocusAdapter.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/FocusAdapter.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* FocusAdapter.java -- convenience class for writing focus listeners
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FocusAdapter.java -- convenience class for writing focus listeners
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.event;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/FocusEvent.java gcc-4.0.0/libjava/java/awt/event/FocusEvent.java
*** gcc-3.4.3/libjava/java/awt/event/FocusEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/FocusEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* FocusEvent.java -- generated for a focus change
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FocusEvent.java -- generated for a focus change
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Component;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/FocusListener.java gcc-4.0.0/libjava/java/awt/event/FocusListener.java
*** gcc-3.4.3/libjava/java/awt/event/FocusListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/FocusListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* FocusListener.java -- listen for focus changes
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FocusListener.java -- listen for focus changes
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/HierarchyBoundsAdapter.java gcc-4.0.0/libjava/java/awt/event/HierarchyBoundsAdapter.java
*** gcc-3.4.3/libjava/java/awt/event/HierarchyBoundsAdapter.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/HierarchyBoundsAdapter.java	Tue Nov 30 23:58:45 2004
*************** public abstract class HierarchyBoundsAda
*** 63,69 ****
     *
     * @param event the event, ignored in this implementation
     */
!   public void ancestorMoved(HierarchyEvent e)
    {
    }
  
--- 63,69 ----
     *
     * @param event the event, ignored in this implementation
     */
!   public void ancestorMoved(HierarchyEvent event)
    {
    }
  
*************** public abstract class HierarchyBoundsAda
*** 72,78 ****
     *
     * @param event the event, ignored in this implementation
     */
!   public void ancestorResized(HierarchyEvent e)
    {
    }
! } // class HierarchyBoundsAdapter
--- 72,78 ----
     *
     * @param event the event, ignored in this implementation
     */
!   public void ancestorResized(HierarchyEvent event)
    {
    }
! }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/InputEvent.java gcc-4.0.0/libjava/java/awt/event/InputEvent.java
*** gcc-3.4.3/libjava/java/awt/event/InputEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/InputEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* InputEvent.java -- common superclass of component input events
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,52 ****
  
  package java.awt.event;
  
- import java.awt.Component;
  import gnu.java.awt.EventModifier;
  
  /**
   * 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
--- 38,53 ----
  
  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
*************** public abstract class InputEvent extends
*** 349,354 ****
--- 350,356 ----
     * 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
     */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/InputMethodEvent.java gcc-4.0.0/libjava/java/awt/event/InputMethodEvent.java
*** gcc-3.4.3/libjava/java/awt/event/InputMethodEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/InputMethodEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* InputMethodEvent.java -- events from a text input method
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InputMethodEvent.java -- events from a text input method
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.text.AttributedCharacterIter
*** 49,55 ****
  /**
   * 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
--- 49,55 ----
  /**
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/InputMethodListener.java gcc-4.0.0/libjava/java/awt/event/InputMethodListener.java
*** gcc-3.4.3/libjava/java/awt/event/InputMethodListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/InputMethodListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* InputMethodListener.java -- listen for input method events
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InputMethodListener.java -- listen for input method events
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/InvocationEvent.java gcc-4.0.0/libjava/java/awt/event/InvocationEvent.java
*** gcc-3.4.3/libjava/java/awt/event/InvocationEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/InvocationEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* InvocationEvent.java -- call a runnable when dispatched
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InvocationEvent.java -- call a runnable when dispatched
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.awt.event;
  
- import java.awt.ActiveEvent;
  import java.awt.AWTEvent;
  import java.awt.EventQueue;
  
  /**
--- 38,45 ----
  
  package java.awt.event;
  
  import java.awt.AWTEvent;
+ import java.awt.ActiveEvent;
  import java.awt.EventQueue;
  
  /**
*************** import java.awt.EventQueue;
*** 48,54 ****
   * <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)
--- 48,54 ----
   * <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)
*************** public class InvocationEvent extends AWT
*** 189,196 ****
          }
      else
        runnable.run();
!     if (notifier != null)
!       notifier.notifyAll();
    }
  
    /**
--- 189,201 ----
          }
      else
        runnable.run();
! 
!     Object o = notifier;
!     if (o != null)
!       synchronized(o)
! 	{
! 	  o.notifyAll();
! 	}
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ItemEvent.java gcc-4.0.0/libjava/java/awt/event/ItemEvent.java
*** gcc-3.4.3/libjava/java/awt/event/ItemEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/ItemEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* ItemEvent.java -- event for item state changes
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ItemEvent.java -- event for item state changes
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.ItemSelectable;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/ItemListener.java gcc-4.0.0/libjava/java/awt/event/ItemListener.java
*** gcc-3.4.3/libjava/java/awt/event/ItemListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/ItemListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* ItemListener.java -- listen for item events
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ItemListener.java -- listen for item events
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/KeyAdapter.java gcc-4.0.0/libjava/java/awt/event/KeyAdapter.java
*** gcc-3.4.3/libjava/java/awt/event/KeyAdapter.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/KeyAdapter.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* KeyAdapter.java -- convenience class for writing key listeners
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyAdapter.java -- convenience class for writing key listeners
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.event;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/KeyEvent.java gcc-4.0.0/libjava/java/awt/event/KeyEvent.java
*** gcc-3.4.3/libjava/java/awt/event/KeyEvent.java	Tue Aug  5 18:04:09 2003
--- gcc-4.0.0/libjava/java/awt/event/KeyEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* KeyEvent.java -- event for key presses
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyEvent.java -- event for key presses
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,47 ****
  
  package java.awt.event;
  
  import java.awt.Component;
  import java.io.IOException;
  import java.io.ObjectInputStream;
- import gnu.java.awt.EventModifier;
  
  /**
   * This event is generated when a key is pressed or released. There are two
--- 38,48 ----
  
  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
*************** import gnu.java.awt.EventModifier;
*** 69,76 ****
   * 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
--- 70,77 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/KeyListener.java gcc-4.0.0/libjava/java/awt/event/KeyListener.java
*** gcc-3.4.3/libjava/java/awt/event/KeyListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/KeyListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* KeyListener.java -- listen for keyboard presses
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyListener.java -- listen for keyboard presses
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/MouseAdapter.java gcc-4.0.0/libjava/java/awt/event/MouseAdapter.java
*** gcc-3.4.3/libjava/java/awt/event/MouseAdapter.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/MouseAdapter.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* MouseAdapter.java -- convenience class for writing mouse listeners
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MouseAdapter.java -- convenience class for writing mouse listeners
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.event;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/MouseEvent.java gcc-4.0.0/libjava/java/awt/event/MouseEvent.java
*** gcc-3.4.3/libjava/java/awt/event/MouseEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/MouseEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* MouseEvent.java -- a mouse event
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MouseEvent.java -- a mouse event
!    Copyright (C) 1999, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,48 ****
  
  package java.awt.event;
  
  import java.awt.Component;
  import java.awt.Point;
  import java.io.IOException;
  import java.io.ObjectInputStream;
- import gnu.java.awt.EventModifier;
  
  /**
   * This event is generated for a mouse event. There are three main categories
--- 38,49 ----
  
  package java.awt.event;
  
+ import gnu.java.awt.EventModifier;
+ 
  import java.awt.Component;
  import java.awt.Point;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  
  /**
   * This event is generated for a mouse event. There are three main categories
*************** import gnu.java.awt.EventModifier;
*** 62,69 ****
   * 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
--- 63,70 ----
   * 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
*************** public class MouseEvent extends InputEve
*** 220,230 ****
      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;
        }
    }
  
--- 221,231 ----
      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;
        }
    }
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/MouseListener.java gcc-4.0.0/libjava/java/awt/event/MouseListener.java
*** gcc-3.4.3/libjava/java/awt/event/MouseListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/MouseListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* MouseListener.java -- listen for mouse clicks and crossing component edges
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.util.EventListener;
*** 48,54 ****
   * 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
--- 48,54 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/MouseMotionAdapter.java gcc-4.0.0/libjava/java/awt/event/MouseMotionAdapter.java
*** gcc-3.4.3/libjava/java/awt/event/MouseMotionAdapter.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/MouseMotionAdapter.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* MouseMotionAdapter.java -- convenience class for mouse motion listeners
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MouseMotionAdapter.java -- convenience class for mouse motion listeners
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.event;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/MouseMotionListener.java gcc-4.0.0/libjava/java/awt/event/MouseMotionListener.java
*** gcc-3.4.3/libjava/java/awt/event/MouseMotionListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/MouseMotionListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* MouseMotionListener.java -- listen to mouse motion events
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MouseMotionListener.java -- listen to mouse motion events
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/MouseWheelEvent.java gcc-4.0.0/libjava/java/awt/event/MouseWheelEvent.java
*** gcc-3.4.3/libjava/java/awt/event/MouseWheelEvent.java	Thu Jun  5 19:58:40 2003
--- gcc-4.0.0/libjava/java/awt/event/MouseWheelEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* MouseWheelEvent.java -- a mouse wheel event
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MouseWheelEvent.java -- a mouse wheel event
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Component;
*** 57,63 ****
   * "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)
--- 57,63 ----
   * "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)
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/MouseWheelListener.java gcc-4.0.0/libjava/java/awt/event/MouseWheelListener.java
*** gcc-3.4.3/libjava/java/awt/event/MouseWheelListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/MouseWheelListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* MouseWheelListener.java -- listen for mouse wheel events
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MouseWheelListener.java -- listen for mouse wheel events
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/PaintEvent.java gcc-4.0.0/libjava/java/awt/event/PaintEvent.java
*** gcc-3.4.3/libjava/java/awt/event/PaintEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/PaintEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* PaintEvent.java -- an area of the screen needs to be repainted
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.awt.Rectangle;
*** 46,52 ****
   * 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
   */
--- 46,52 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/TextEvent.java gcc-4.0.0/libjava/java/awt/event/TextEvent.java
*** gcc-3.4.3/libjava/java/awt/event/TextEvent.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/TextEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* TextEvent.java -- event for text changes
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TextEvent.java -- event for text changes
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.AWTEvent;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/TextListener.java gcc-4.0.0/libjava/java/awt/event/TextListener.java
*** gcc-3.4.3/libjava/java/awt/event/TextListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/TextListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* TextListener.java -- listen for text changes
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TextListener.java -- listen for text changes
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/WindowAdapter.java gcc-4.0.0/libjava/java/awt/event/WindowAdapter.java
*** gcc-3.4.3/libjava/java/awt/event/WindowAdapter.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/WindowAdapter.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* WindowAdapter.java -- convenience class for writing window listeners
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* WindowAdapter.java -- convenience class for writing window listeners
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.event;
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/WindowEvent.java gcc-4.0.0/libjava/java/awt/event/WindowEvent.java
*** gcc-3.4.3/libjava/java/awt/event/WindowEvent.java	Thu Jan  2 00:14:23 2003
--- gcc-4.0.0/libjava/java/awt/event/WindowEvent.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* WindowEvent.java -- window change event
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* WindowEvent.java -- window change event
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Window;
*** 48,54 ****
   * 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
--- 48,54 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/WindowFocusListener.java gcc-4.0.0/libjava/java/awt/event/WindowFocusListener.java
*** gcc-3.4.3/libjava/java/awt/event/WindowFocusListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/WindowFocusListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* WindowFocusListener.java -- listens for window focus events
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* WindowFocusListener.java -- listens for window focus events
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/WindowListener.java gcc-4.0.0/libjava/java/awt/event/WindowListener.java
*** gcc-3.4.3/libjava/java/awt/event/WindowListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/WindowListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* WindowListener.java -- listens for window events
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* WindowListener.java -- listens for window events
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/event/WindowStateListener.java gcc-4.0.0/libjava/java/awt/event/WindowStateListener.java
*** gcc-3.4.3/libjava/java/awt/event/WindowStateListener.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/event/WindowStateListener.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* WindowStateListener.java -- listens for window state changes
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* WindowStateListener.java -- listens for window state changes
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/font/TextAttribute.java gcc-4.0.0/libjava/java/awt/font/TextAttribute.java
*** gcc-3.4.3/libjava/java/awt/font/TextAttribute.java	Mon Mar 31 09:55:09 2003
--- gcc-4.0.0/libjava/java/awt/font/TextAttribute.java	Thu Feb 24 07:15:55 2005
***************
*** 1,5 ****
! /* TextAttribute.java
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* TextAttribute.java --
!    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.font;
*** 41,123 ****
  import java.io.InvalidObjectException;
  import java.text.AttributedCharacterIterator;
  
  public final class TextAttribute extends AttributedCharacterIterator.Attribute
  {
    private static final long serialVersionUID = 7744112784117861702L;
    
    public static final TextAttribute BACKGROUND =
!     new TextAttribute ("BACKGROUND");
    public static final TextAttribute BIDI_EMBEDDING =
!     new TextAttribute ("BIDI_EMBEDDING");
    public static final TextAttribute CHAR_REPLACEMENT =
!     new TextAttribute ("CHAR_REPLACEMENT");
!   public static final TextAttribute FAMILY = new TextAttribute ("FAMILY");
!   public static final TextAttribute FONT = new TextAttribute ("FONT");
!   public static final TextAttribute FOREGROUND =
!     new TextAttribute ("FOREGROUND");
    public static final TextAttribute INPUT_METHOD_HIGHLIGHT =
!     new TextAttribute ("INPUT_METHOD_HIGHLIGHT");
    public static final TextAttribute INPUT_METHOD_UNDERLINE =
!     new TextAttribute ("INPUT_METHOD_UNDERLINE");
    public static final TextAttribute JUSTIFICATION =
!     new TextAttribute ("JUSTIFICATION");
!   public static final Float JUSTIFICATION_FULL = new Float (1.0);
!   public static final Float JUSTIFICATION_NONE = new Float (0.0);
    public static final TextAttribute NUMERIC_SHAPING =
!     new TextAttribute ("NUMERIC_SHAPING");
!   public static final TextAttribute POSTURE = new TextAttribute ("POSTURE");
!   public static final Float POSTURE_OBLIQUE = new Float (0.2);
!   public static final Float POSTURE_REGULAR = new Float (0.0);
    public static final TextAttribute RUN_DIRECTION =
!     new TextAttribute ("RUN_DIRECTION");
!   public static final Boolean RUN_DIRECTION_LTR = new Boolean (true);
!   public static final Boolean RUN_DIRECTION_RTL = new Boolean (false);
!   public static final TextAttribute SIZE = new TextAttribute ("SIZE");
    public static final TextAttribute STRIKETHROUGH =
!     new TextAttribute ("STRIKETHROUGH");
!   public static final Boolean STRIKETHROUGH_ON = new Boolean (true);
    public static final TextAttribute SUPERSCRIPT =
!     new TextAttribute ("SUPERSCRIPT");
!   public static final Integer SUPERSCRIPT_SUB = new Integer (-1);
!   public static final Integer SUPERSCRIPT_SUPER = new Integer (1);
    public static final TextAttribute SWAP_COLORS =
!     new TextAttribute ("SWAP_COLORS");
!   public static final Boolean SWAP_COLORS_ON = new Boolean (true);
!   public static final TextAttribute TRANSFORM = new TextAttribute ("TRANSFORM");
!   public static final TextAttribute UNDERLINE = new TextAttribute ("UNDERLINE");
!   public static final Integer UNDERLINE_LOW_DASHED = new Integer (0);
!   public static final Integer UNDERLINE_LOW_DOTTED = new Integer (0);
!   public static final Integer UNDERLINE_LOW_GRAY = new Integer (0);
!   public static final Integer UNDERLINE_LOW_ONE_PIXEL = new Integer (0);
!   public static final Integer UNDERLINE_LOW_TWO_PIXEL = new Integer (0);
!   public static final Integer UNDERLINE_ON = new Integer (0);
!   public static final TextAttribute WEIGHT = new TextAttribute ("WEIGHT");
!   public static final Float WEIGHT_BOLD = new Float (2.0);
!   public static final Float WEIGHT_DEMIBOLD = new Float (1.75);
!   public static final Float WEIGHT_DEMILIGHT = new Float (0.875);
!   public static final Float WEIGHT_EXTRA_LIGHT = new Float (0.5);
!   public static final Float WEIGHT_EXTRABOLD = new Float (2.5);
!   public static final Float WEIGHT_HEAVY = new Float (2.25);
!   public static final Float WEIGHT_LIGHT = new Float (0.75);
!   public static final Float WEIGHT_MEDIUM = new Float (1.5);
!   public static final Float WEIGHT_REGULAR = new Float (1.0);
!   public static final Float WEIGHT_SEMIBOLD = new Float (1.25);
!   public static final Float WEIGHT_ULTRABOLD = new Float (2.75);
!   public static final TextAttribute WIDTH = new TextAttribute ("");
!   public static final Float WIDTH_CONDENSED = new Float (0.75);
!   public static final Float WIDTH_EXTENDED = new Float (1.5);
!   public static final Float WIDTH_REGULAR = new Float (1.0);
!   public static final Float WIDTH_SEMI_CONDENSED = new Float (0.875);
!   public static final Float WIDTH_SEMI_EXTENDED = new Float (1.25);
!              
!   protected TextAttribute (String name)
    {
!     super (name);
    }
    
!   protected Object readResolve ()
      throws InvalidObjectException
    {
!     throw new Error ("not implemented");
    }
  }
--- 41,309 ----
  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-3.4.3/libjava/java/awt/font/TextHitInfo.java gcc-4.0.0/libjava/java/awt/font/TextHitInfo.java
*** gcc-3.4.3/libjava/java/awt/font/TextHitInfo.java	Mon Mar 10 13:21:38 2003
--- gcc-4.0.0/libjava/java/awt/font/TextHitInfo.java	Thu Feb 17 07:48:28 2005
***************
*** 1,5 ****
  /* TextHitInfo.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TextHitInfo.java -- 
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  package java.awt.font;
  
  /**
!  * @author John Leuner <jewel@debian.org>
   */
  public final class TextHitInfo
  {
--- 38,44 ----
  package java.awt.font;
  
  /**
!  * @author John Leuner (jewel@debian.org)
   */
  public final class TextHitInfo
  {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/font/TextLayout.java gcc-4.0.0/libjava/java/awt/font/TextLayout.java
*** gcc-3.4.3/libjava/java/awt/font/TextLayout.java	Fri Nov 21 00:10:28 2003
--- gcc-4.0.0/libjava/java/awt/font/TextLayout.java	Tue Nov 30 23:58:46 2004
***************
*** 1,5 ****
! /* TextLayout.java
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* TextLayout.java --
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,54 ****
  
  package java.awt.font;
  
  import java.awt.Font;
  import java.awt.Graphics2D;
  import java.awt.Shape;
  import java.awt.geom.AffineTransform;
  import java.awt.geom.Rectangle2D;
- import java.text.CharacterIterator;
  import java.text.AttributedCharacterIterator;
  import java.text.AttributedString;
  import java.util.Map;
- import java.awt.font.TextAttribute;
- 
  
  /**
   * @author Michael Koch
--- 38,55 ----
  
  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
*************** import java.awt.font.TextAttribute;
*** 56,61 ****
--- 57,63 ----
  public final class TextLayout implements Cloneable
  {
    public static final CaretPolicy DEFAULT_CARET_POLICY = new CaretPolicy ();
+   ClasspathTextLayoutPeer peer;
  
    public static class CaretPolicy
    {
*************** public final class TextLayout implements
*** 67,103 ****
      public TextHitInfo getStrongCaret (TextHitInfo hit1, TextHitInfo hit2,
                                         TextLayout layout)
      {
!       throw new Error ("not implemented");
      }
    }
  
-   private AttributedString attributedString;
-   private FontRenderContext fontRenderContext;
-   
    public TextLayout (AttributedCharacterIterator text, FontRenderContext frc)
    {    
!     attributedString = new AttributedString (text);
!     fontRenderContext = frc;
    }
  
    public TextLayout (String string, Font font, FontRenderContext frc) 
    {
!     attributedString = new AttributedString (string);
!     attributedString.addAttribute (TextAttribute.FONT, font);
!     fontRenderContext = frc;
    }
  
!   public TextLayout (String string, Map attributes, FontRenderContext frc) 
    {
!     attributedString = new AttributedString (string, attributes);
!     fontRenderContext = frc;
    }
  
    protected Object clone ()
    {
      try
        {
!         return super.clone ();
        }
      catch (CloneNotSupportedException e)
        {
--- 69,107 ----
      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)
        {
*************** public final class TextLayout implements
*** 107,252 ****
    }
  
  
-   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 void draw (Graphics2D g2, float x, float y) 
    {
!     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 boolean equals (Object obj)
--- 111,119 ----
    }
  
  
    public void draw (Graphics2D g2, float x, float y) 
    {
!     peer.draw(g2, x, y);
    }
  
    public boolean equals (Object obj)
*************** public final class TextLayout implements
*** 259,465 ****
  
    public boolean equals (TextLayout tl)
    {
!     throw new Error ("not implemented");
    }
  
    public float getAdvance ()
    {
!     throw new Error ("not implemented");
    }
  
    public float getAscent ()
    {
!     throw new Error ("not implemented");
    }
  
    public byte getBaseline ()
    {
!     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()
    {
!     throw new Error ("not implemented");
    }
  
    public float[] getCaretInfo (TextHitInfo hit)
    {
!     throw new Error ("not implemented");
    }
  
    public float[] getCaretInfo (TextHitInfo hit, Rectangle2D bounds)
    {
!     throw new Error ("not implemented");
    }
  
    public Shape getCaretShape (TextHitInfo hit)
    {
!     throw new Error ("not implemented");
    }
  
    public Shape getCaretShape (TextHitInfo hit, Rectangle2D bounds)
    {
!     throw new Error ("not implemented");
    }
  
    public Shape[] getCaretShapes (int offset)
    {
!     throw new Error ("not implemented");
    }
  
    public Shape[] getCaretShapes (int offset, Rectangle2D bounds)
    {
!     throw new Error ("not implemented");
    }
  
    public Shape[] getCaretShapes (int offset, Rectangle2D bounds,
                                   TextLayout.CaretPolicy policy)
    {
!     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 getDescent ()
    {
!     throw new Error ("not implemented");
    }
  
    public TextLayout getJustifiedLayout (float justificationWidth)
    {
!     throw new Error ("not implemented");
    }
  
    public float getLeading ()
    {
!     throw new Error ("not implemented");
    }
  
    public Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint)
    {
!     throw new Error ("not implemented");
    }
  
    public Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint,
                                           Rectangle2D bounds)
    {
!     throw new Error ("not implemented");
    }
  
    public int[] getLogicalRangesForVisualSelection (TextHitInfo firstEndpoint,
                                                     TextHitInfo secondEndpoint)
    {
!     throw new Error ("not implemented");
    }
  
    public TextHitInfo getNextLeftHit (int offset)
    {
!     throw new Error ("not implemented");
    }
  
    public TextHitInfo getNextLeftHit (int offset, TextLayout.CaretPolicy policy)
    {
!     throw new Error ("not implemented");
    }
  
    public TextHitInfo getNextLeftHit (TextHitInfo hit)
    {
!     throw new Error ("not implemented");
    }
  
    public TextHitInfo getNextRightHit (int offset)
    {
!     throw new Error ("not implemented");
    }
  
    public TextHitInfo getNextRightHit (int offset, TextLayout.CaretPolicy policy)
    {
!     throw new Error ("not implemented");
    }
  
    public TextHitInfo getNextRightHit (TextHitInfo hit)
    {
!     throw new Error ("not implemented");
    }
  
    public Shape getOutline (AffineTransform tx)
    {
!     throw new Error ("not implemented");
    }
  
    public float getVisibleAdvance ()
    {
!     throw new Error ("not implemented");
    }
  
    public Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
                                          TextHitInfo secondEndpoint)
    {
!     throw new Error ("not implemented");
    }
  
    public Shape getVisualHighlightShape (TextHitInfo firstEndpoint,
                                          TextHitInfo secondEndpoint,
                                          Rectangle2D bounds)
    {
!     throw new Error ("not implemented");
    }
  
    public TextHitInfo getVisualOtherHit (TextHitInfo hit)
    {
!     throw new Error ("not implemented");
    }
  
    protected void handleJustify (float justificationWidth)
    {
!     throw new Error ("not implemented");
    }
  
    public int hashCode ()
    {
!     throw new Error ("not implemented");
    }
  
    public TextHitInfo hitTestChar (float x, float y)
    {
!     throw new Error ("not implemented");
    }
  
    public TextHitInfo hitTestChar (float x, float y, Rectangle2D bounds)
    {
!     throw new Error ("not implemented");
    }
  
    public boolean isLeftToRight ()
    {
!     throw new Error ("not implemented");
    }
  
    public boolean isVertical ()
    {
!     throw new Error ("not implemented");
    }
  
    public String toString ()
    {
!     throw new Error ("not implemented");
    }
  }
--- 126,332 ----
  
    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-3.4.3/libjava/java/awt/font/TransformAttribute.java gcc-4.0.0/libjava/java/awt/font/TransformAttribute.java
*** gcc-3.4.3/libjava/java/awt/font/TransformAttribute.java	Mon Feb 17 15:26:30 2003
--- gcc-4.0.0/libjava/java/awt/font/TransformAttribute.java	Tue Feb 22 19:07:40 2005
***************
*** 1,5 ****
! /* TransformAttribute.java
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* TransformAttribute.java --
!    Copyright (C) 2003, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.geom.AffineTransform;
*** 42,47 ****
--- 42,54 ----
  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
*************** public final class TransformAttribute im
*** 50,69 ****
  
    private AffineTransform affineTransform;
    
    public TransformAttribute (AffineTransform transform) 
    {
!     if (transform != null)
        {
!         this.affineTransform = new AffineTransform (transform);
        }
    }
  
    public AffineTransform getTransform ()
    {
!     return affineTransform;
    }
  
    /**
     * @since 1.4
     */
    public boolean isIdentity ()
--- 57,96 ----
  
    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 ()
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/AffineTransform.java gcc-4.0.0/libjava/java/awt/geom/AffineTransform.java
*** gcc-3.4.3/libjava/java/awt/geom/AffineTransform.java	Wed Sep 17 19:06:55 2003
--- gcc-4.0.0/libjava/java/awt/geom/AffineTransform.java	Tue Nov 30 23:58:46 2004
***************
*** 1,5 ****
  /* AffineTransform.java -- transform coordinates between two 2-D spaces
!    Copyright (C) 2000, 2001, 2002 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 57,66 ****
   * [ 1 ]   [  0   0   1  ] [ 1 ]   [          1          ]
   * </pre>
   * The bottom row of the matrix is constant, so a transform can be uniquely
!  * represented (as in 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
   */
--- 57,67 ----
   * [ 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 
*** 226,232 ****
    private double m00;
  
    /**
!    * The Y coordinate scaling element of the transform matrix.
     *
     * @serial matrix[1,0]
     */
--- 227,233 ----
    private double m00;
  
    /**
!    * The Y coordinate shearing element of the transform matrix.
     *
     * @serial matrix[1,0]
     */
*************** public class AffineTransform implements 
*** 240,246 ****
    private double m01;
  
    /**
!    * The Y coordinate shearing element of the transform matrix.
     *
     * @serial matrix[1,1]
     */
--- 241,247 ----
    private double m01;
  
    /**
!    * The Y coordinate scaling element of the transform matrix.
     *
     * @serial matrix[1,1]
     */
*************** public class AffineTransform implements 
*** 517,522 ****
--- 518,525 ----
     * 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
*************** public class AffineTransform implements 
*** 738,747 ****
     */
    public void shear(double shx, double shy)
    {
!     double n00 = m00 + shx * m01;
!     double n01 = shx * m00 + m01;
!     double n10 = m10 * shy + m11;
!     double n11 = shx * m10 + m11;
      m00 = n00;
      m01 = n01;
      m10 = n10;
--- 741,750 ----
     */
    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;
*************** public class AffineTransform implements 
*** 996,1001 ****
--- 999,1036 ----
     * 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 class AffineTransform implements 
*** 1006,1013 ****
      double det = getDeterminant();
      if (det == 0)
        throw new NoninvertibleTransformException("can't invert transform");
!     return new AffineTransform(m11 / det, -m10 / det, m01 / det, -m00 / det,
!                                -m02, -m12);
    }
  
    /**
--- 1041,1055 ----
      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);
    }
  
    /**
*************** public class AffineTransform implements 
*** 1066,1074 ****
     * transformation, so that no result will overwrite a point that has not yet
     * been evaluated.
     *
!    * @param src the array of source points
     * @param srcOff the starting offset into src
!    * @param dst 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
--- 1108,1116 ----
     * 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
*************** public class AffineTransform implements 
*** 1100,1108 ****
     * transformation, so that no result will overwrite a point that has not yet
     * been evaluated.
     *
!    * @param src the array of source points
     * @param srcOff the starting offset into src
!    * @param dst 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
--- 1142,1150 ----
     * 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
*************** public class AffineTransform implements 
*** 1132,1140 ****
     * storing the results in another array. This will not create a destination
     * array.
     *
!    * @param src the array of source points
     * @param srcOff the starting offset into src
!    * @param dst 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
--- 1174,1182 ----
     * 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
*************** public class AffineTransform implements 
*** 1157,1165 ****
     * storing the results in another array. This will not create a destination
     * array.
     *
!    * @param src the array of source points
     * @param srcOff the starting offset into src
!    * @param dst 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
--- 1199,1207 ----
     * 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
*************** public class AffineTransform implements 
*** 1192,1208 ****
    public Point2D inverseTransform(Point2D src, Point2D dst)
      throws NoninvertibleTransformException
    {
!     double det = getDeterminant();
!     if (det == 0)
!       throw new NoninvertibleTransformException("couldn't invert transform");
!     if (dst == null)
!       dst = new Point2D.Double();
!     double x = src.getX();
!     double y = src.getY();
!     double nx = (m11 * x + -m10 * y) / det - m02;
!     double ny = (m01 * x + -m00 * y) / det - m12;
!     dst.setLocation(nx, ny);
!     return dst;
    }
  
    /**
--- 1234,1240 ----
    public Point2D inverseTransform(Point2D src, Point2D dst)
      throws NoninvertibleTransformException
    {
!     return createInverse().transform(src, dst);
    }
  
    /**
*************** public class AffineTransform implements 
*** 1212,1220 ****
     * transformation, so that no result will overwrite a point that has not yet
     * been evaluated.
     *
!    * @param src the array of source points
     * @param srcOff the starting offset into src
!    * @param dst 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
--- 1244,1252 ----
     * 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
*************** public class AffineTransform implements 
*** 1226,1248 ****
                                 double[] dstPts, int dstOff, int num)
      throws NoninvertibleTransformException
    {
!     double det = getDeterminant();
!     if (det == 0)
!       throw new NoninvertibleTransformException("couldn't invert transform");
!     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++] = (m11 * x + -m10 * y) / det - m02;
!         dstPts[dstOff++] = (m01 * x + -m00 * y) / det - m12;
!       }
    }
  
    /**
--- 1258,1264 ----
                                 double[] dstPts, int dstOff, int num)
      throws NoninvertibleTransformException
    {
!     createInverse().transform(srcPts, srcOff, dstPts, dstOff, num);
    }
  
    /**
*************** public class AffineTransform implements 
*** 1283,1291 ****
     * [ y' ]   [ m10 m11 ] [ y ] = [ m10 * x + m11 * y ]
     * </pre>
     *
!    * @param src the array of source points
     * @param srcOff the starting offset into src
!    * @param dst 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
--- 1299,1307 ----
     * [ 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
*************** public class AffineTransform implements 
*** 1317,1328 ****
     * which only stores points in float precision.
     *
     * @param src the shape source to transform
!    * @return the shape, transformed by this
!    * @throws NullPointerException if src is null
     * @see GeneralPath#transform(AffineTransform)
     */
    public Shape createTransformedShape(Shape src)
    {
      GeneralPath p = new GeneralPath(src);
      p.transform(this);
      return p;
--- 1333,1346 ----
     * 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;
*************** public class AffineTransform implements 
*** 1406,1412 ****
     * Compares two transforms for equality. This returns true if they have the
     * same matrix values.
     *
!    * @param o the transform to compare
     * @return true if it is equal
     */
    public boolean equals(Object obj)
--- 1424,1430 ----
     * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/Arc2D.java gcc-4.0.0/libjava/java/awt/geom/Arc2D.java
*** gcc-3.4.3/libjava/java/awt/geom/Arc2D.java	Wed Sep 17 19:06:55 2003
--- gcc-4.0.0/libjava/java/awt/geom/Arc2D.java	Tue Nov 30 23:58:46 2004
***************
*** 1,5 ****
  /* Arc2D.java -- represents an arc in 2-D space
!    Copyright (C) 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Arc2D.java -- represents an arc in 2-D space
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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
--- 35,45 ----
  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
*************** import java.util.NoSuchElementException;
*** 50,58 ****
   * 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>
   * @since 1.2
-  * @status updated to 1.4, but still missing functionality
   */
  public abstract class Arc2D extends RectangularShape
  {
--- 50,58 ----
   * 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
  {
*************** public abstract class Arc2D extends Rect
*** 154,161 ****
     * extent sweeps counterclockwise (from the positive x-axis to the negative
     * y-axis).
     *
!    * @param x the new x coordinate of the lower left of the bounding box
!    * @param y the new y coordinate of the lower 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
--- 154,161 ----
     * 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
*************** public abstract class Arc2D extends Rect
*** 171,177 ****
     * extent sweeps counterclockwise (from the positive x-axis to the negative
     * y-axis).
     *
!    * @param p the lower 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
--- 171,177 ----
     * 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
*************** public abstract class Arc2D extends Rect
*** 179,189 ****
     * @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);
    }
  
    /**
--- 179,188 ----
     * @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);
    }
  
    /**
*************** public abstract class Arc2D extends Rect
*** 200,207 ****
     */
    public void setArc(Rectangle2D r, double start, double extent, int type)
    {
!     setArc(r.getX(), r.getY(), r.getWidth(), r.getHeight(),
!            start, extent, type);
    }
  
    /**
--- 199,205 ----
     */
    public void setArc(Rectangle2D r, double start, double extent, int type)
    {
!     setArc(r.getX(), r.getY(), r.getWidth(), r.getHeight(), start, extent, type);
    }
  
    /**
*************** public abstract class Arc2D extends Rect
*** 212,219 ****
     */
    public void setArc(Arc2D a)
    {
!     setArc(a.getX(), a.getY(), a.getWidth(), a.getHeight(),
!            a.getAngleStart(), a.getAngleExtent(), a.getArcType());
    }
  
    /**
--- 210,217 ----
     */
    public void setArc(Arc2D a)
    {
!     setArc(a.getX(), a.getY(), a.getWidth(), a.getHeight(), a.getAngleStart(),
!            a.getAngleExtent(), a.getArcType());
    }
  
    /**
*************** public abstract class Arc2D extends Rect
*** 230,237 ****
     * @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);
    }
--- 228,235 ----
     * @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);
    }
*************** public abstract class Arc2D extends Rect
*** 252,259 ****
     */
    public void setArcByTangent(Point2D p1, Point2D p2, Point2D p3, double r)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
  
    /**
--- 250,299 ----
     */
    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());
    }
  
    /**
*************** public abstract class Arc2D extends Rect
*** 287,293 ****
      // Normalize.
      double x = p.getX() - (getX() + getWidth() / 2);
      double y = p.getY() - (getY() + getHeight() / 2);
!     setAngleStart(Math.toDegrees(Math.atan2(y, x)));
    }
  
    /**
--- 327,333 ----
      // Normalize.
      double x = p.getX() - (getX() + getWidth() / 2);
      double y = p.getY() - (getY() + getHeight() / 2);
!     setAngleStart(Math.toDegrees(Math.atan2(-y, x)));
    }
  
    /**
*************** public abstract class Arc2D extends Rect
*** 312,319 ****
      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);
--- 352,359 ----
      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);
*************** public abstract class Arc2D extends Rect
*** 413,420 ****
     * @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.
--- 453,460 ----
     * @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.
*************** public abstract class Arc2D extends Rect
*** 426,452 ****
    public boolean containsAngle(double a)
    {
      double start = getAngleStart();
!     double end = start + getAngleExtent();
  
      start %= 360;
!     if (start < 0)
        start += 360;
  
      end %= 360;
!     if (end < 0)
        end += 360;
  
      a %= 360;
!     if (a < 0)
        a += 360;
  
!     return a >= start && a <= end;
    }
  
    /**
     * Determines if the arc contains the given point. If the bounding box
     * is empty, then this will return false.
     *
     * @param x the x coordinate to test
     * @param y the y coordinate to test
     * @return true if the point is inside the arc
--- 466,509 ----
    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 abstract class Arc2D extends Rect
*** 455,469 ****
    {
      double w = getWidth();
      double h = getHeight();
!     if (w <= 0 || h <= 0)
        return false;
!     // XXX Finish implementing.
!     throw new Error("not implemented");
    }
  
    /**
     * Tests if a given rectangle intersects 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
--- 512,561 ----
    {
      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
*************** public abstract class Arc2D extends Rect
*** 472,483 ****
     */
    public boolean intersects(double x, double y, double w, double h)
    {
!     double mw = getWidth();
!     double mh = getHeight();
!     if (mw <= 0 || mh <= 0 || w <= 0 || h <= 0)
        return false;
!     // XXX Finish implementing.
!     throw new Error("not implemented");
    }
  
    /**
--- 564,657 ----
     */
    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;
    }
  
    /**
*************** public abstract class Arc2D extends Rect
*** 491,502 ****
     */
    public boolean contains(double x, double y, double w, double h)
    {
!     double mw = getWidth();
!     double mh = getHeight();
!     if (mw <= 0 || mh <= 0 || w <= 0 || h <= 0)
        return false;
!     // XXX Finish implementing.
!     throw new Error("not implemented");
    }
  
    /**
--- 665,701 ----
     */
    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;
    }
  
    /**
*************** public abstract class Arc2D extends Rect
*** 527,533 ****
     * 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
    {
--- 726,732 ----
     * 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
    {
*************** public abstract class Arc2D extends Rect
*** 567,595 ****
       * @param a the arc
       * @param xform the transform
       */
!     ArcIterator(Arc2D a, AffineTransform xform)
      {
        this.xform = xform;
        x = a.getX();
        y = a.getY();
        w = a.getWidth();
        h = a.getHeight();
!       start = a.getAngleStart() * (Math.PI / 180);
!       extent = a.getAngleExtent() * (Math.PI / 180);
        type = a.type;
-       double e = extent < 0 ? -extent : extent;
        if (w < 0 || h < 0)
!         limit = -1;
!       else if (e == 0)
!         limit = type;
!       else if (e <= Math.PI / 2.0)
!         limit = type + 1;
!       else if (e <= Math.PI)
!         limit = type + 2;
!       else if (e <= 3.0 * (Math.PI / 2.0))
!         limit = type + 3;
        else
!         limit = type + 4;
      }
  
      /**
--- 766,802 ----
       * @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;
      }
  
      /**
*************** public abstract class Arc2D extends Rect
*** 598,604 ****
       * @param e the ellipse
       * @param xform the transform
       */
!     ArcIterator(Ellipse2D e, AffineTransform xform)
      {
        this.xform = xform;
        x = e.getX();
--- 805,811 ----
       * @param e the ellipse
       * @param xform the transform
       */
!     public ArcIterator(Ellipse2D e, AffineTransform xform)
      {
        this.xform = xform;
        x = e.getX();
*************** public abstract class Arc2D extends Rect
*** 606,612 ****
        w = e.getWidth();
        h = e.getHeight();
        start = 0;
!       extent = -2 * Math.PI;
        type = CHORD;
        limit = (w < 0 || h < 0) ? -1 : 5;
      }
--- 813,819 ----
        w = e.getWidth();
        h = e.getHeight();
        start = 0;
!       extent = 2 * Math.PI;
        type = CHORD;
        limit = (w < 0 || h < 0) ? -1 : 5;
      }
*************** public abstract class Arc2D extends Rect
*** 650,658 ****
      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;
      }
  
--- 857,865 ----
      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;
      }
  
*************** public abstract class Arc2D extends Rect
*** 666,713 ****
       */
      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) || (type == CHORD))
          {
!           if (type == PIE)
!             {
!               coords[0] = xmid;
!               coords[1] = ymid;
!             }
!           else if (type == CHORD)
!             {
!               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_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);
  
--- 873,910 ----
       */
      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);
  
*************** public abstract class Arc2D extends Rect
*** 717,730 ****
  
        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].
--- 914,927 ----
  
        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].
*************** public abstract class Arc2D extends Rect
*** 733,763 ****
        // 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;
      }
--- 930,958 ----
        // 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;
      }
*************** public abstract class Arc2D extends Rect
*** 766,772 ****
    /**
     * This class implements an arc in double precision.
     *
!    * @author Eric Blake <ebb9@email.byu.edu
     * @since 1.2
     */
    public static class Double extends Arc2D
--- 961,967 ----
    /**
     * This class implements an arc in double precision.
     *
!    * @author Eric Blake (ebb9@email.byu.edu)
     * @since 1.2
     */
    public static class Double extends Arc2D
*************** public abstract class Arc2D extends Rect
*** 820,827 ****
       * @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;
--- 1015,1022 ----
       * @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;
*************** public abstract class Arc2D extends Rect
*** 831,837 ****
        this.start = start;
        this.extent = extent;
      }
!       
      /**
       * Create a new arc with the given dimensions.
       *
--- 1026,1032 ----
        this.start = start;
        this.extent = extent;
      }
! 
      /**
       * Create a new arc with the given dimensions.
       *
*************** public abstract class Arc2D extends Rect
*** 935,942 ****
       * @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;
--- 1130,1137 ----
       * @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;
*************** public abstract class Arc2D extends Rect
*** 960,966 ****
      /**
       * Sets the extent angle of the arc.
       *
!      * @param start the new extent angle
       */
      public void setAngleExtent(double extent)
      {
--- 1155,1161 ----
      /**
       * Sets the extent angle of the arc.
       *
!      * @param extent the new extent angle
       */
      public void setAngleExtent(double extent)
      {
*************** public abstract class Arc2D extends Rect
*** 985,991 ****
    /**
     * This class implements an arc in float precision.
     *
!    * @author Eric Blake <ebb9@email.byu.edu
     * @since 1.2
     */
    public static class Float extends Arc2D
--- 1180,1186 ----
    /**
     * This class implements an arc in float precision.
     *
!    * @author Eric Blake (ebb9@email.byu.edu)
     * @since 1.2
     */
    public static class Float extends Arc2D
*************** public abstract class Arc2D extends Rect
*** 1039,1046 ****
       * @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;
--- 1234,1241 ----
       * @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;
*************** public abstract class Arc2D extends Rect
*** 1050,1056 ****
        this.start = start;
        this.extent = extent;
      }
!       
      /**
       * Create a new arc with the given dimensions.
       *
--- 1245,1251 ----
        this.start = start;
        this.extent = extent;
      }
! 
      /**
       * Create a new arc with the given dimensions.
       *
*************** public abstract class Arc2D extends Rect
*** 1069,1075 ****
        width = (float) r.getWidth();
        height = (float) r.getHeight();
        this.start = start;
!       this.extent = extent;
      }
  
      /**
--- 1264,1270 ----
        width = (float) r.getWidth();
        height = (float) r.getHeight();
        this.start = start;
!       this.extent = (float) extent;
      }
  
      /**
*************** public abstract class Arc2D extends Rect
*** 1154,1161 ****
       * @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;
--- 1349,1356 ----
       * @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;
*************** public abstract class Arc2D extends Rect
*** 1179,1185 ****
      /**
       * Sets the extent angle of the arc.
       *
!      * @param start the new extent angle
       */
      public void setAngleExtent(double extent)
      {
--- 1374,1380 ----
      /**
       * Sets the extent angle of the arc.
       *
!      * @param extent the new extent angle
       */
      public void setAngleExtent(double extent)
      {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/Area.java gcc-4.0.0/libjava/java/awt/geom/Area.java
*** gcc-3.4.3/libjava/java/awt/geom/Area.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/geom/Area.java	Wed Feb 16 20:02:03 2005
***************
*** 1,5 ****
  /* Area.java -- represents a shape built by constructive area geometry
!    Copyright (C) 2002 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Area.java -- represents a shape built by constructive area geometry
!    Copyright (C) 2002, 2004 Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,108 ****
  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;
  
  /**
!  * STUBS ONLY
!  * XXX Implement and document.
   */
  public class Area implements Shape, Cloneable
  {
    public Area()
    {
    }
    public Area(Shape s)
    {
    }
!   public void add(Area a)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
!   public void subtract(Area a)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
!   public void intersect(Area a)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
!   public void exclusiveOr(Area a)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public void reset()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public boolean isEmpty()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public boolean isPolygonal()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public boolean isRectangular()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public boolean isSingular()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public Rectangle2D getBounds2D()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public Rectangle getBounds()
    {
      return getBounds2D().getBounds();
--- 35,682 ----
  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
+    */
+   private Vector solids;
+ 
+   /**
+    * Segment vectors containing solid areas and holes
+    */
+   private 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();
*************** public class Area implements Shape, Clon
*** 118,183 ****
    {
      try
        {
!         return super.clone();
        }
      catch (CloneNotSupportedException e)
        {
!         throw (Error) new InternalError().initCause(e); // Impossible
        }
    }
  
!   public boolean equals(Area a)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
  
    public void transform(AffineTransform at)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public Area createTransformedArea(AffineTransform at)
    {
      Area a = (Area) clone();
      a.transform(at);
      return a;
    }
    public boolean contains(double x, double y)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public boolean contains(Point2D p)
    {
      return contains(p.getX(), p.getY());
    }
    public boolean contains(double x, double y, double w, double h)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public boolean contains(Rectangle2D r)
    {
      return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
    }
  
    public boolean intersects(double x, double y, double w, double h)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public boolean intersects(Rectangle2D r)
    {
      return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
    }
    public PathIterator getPathIterator(AffineTransform at)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public PathIterator getPathIterator(AffineTransform at, double flatness)
    {
      return new FlatteningPathIterator(getPathIterator(at), flatness);
    }
  } // class Area
--- 692,3305 ----
    {
      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 c1 - 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.
+    */
+   private 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.
+    */
+   private 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.
+    */
+   private 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.
+    */
+   private 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'
+    */
+   private 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-3.4.3/libjava/java/awt/geom/CubicCurve2D.java gcc-4.0.0/libjava/java/awt/geom/CubicCurve2D.java
*** gcc-3.4.3/libjava/java/awt/geom/CubicCurve2D.java	Mon Jan  5 19:19:29 2004
--- gcc-4.0.0/libjava/java/awt/geom/CubicCurve2D.java	Thu Feb 17 07:48:29 2005
***************
*** 1,5 ****
  /* CubicCurve2D.java -- represents a parameterized cubic curve in 2-D space
!    Copyright (C) 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,41 ****
  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;
--- 35,40 ----
*************** import java.util.NoSuchElementException;
*** 53,64 ****
   * @author Eric Blake (ebb9@email.byu.edu)
   * @author Graydon Hoare (graydon@redhat.com)
   * @author Sascha Brawer (brawer@dandelis.ch)
   *
   * @since 1.2
   */
! public abstract class CubicCurve2D
!   implements Shape, Cloneable
  {
    /**
     * Constructs a new CubicCurve2D. Typical users will want to
     * construct instances of a subclass, such as {@link
--- 52,66 ----
   * @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
*************** public abstract class CubicCurve2D
*** 68,154 ****
    {
    }
  
- 
    /**
     * 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.
--- 70,143 ----
*************** public abstract class CubicCurve2D
*** 183,189 ****
    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.
--- 172,177 ----
*************** public abstract class CubicCurve2D
*** 206,218 ****
     */
    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.
--- 194,204 ----
     */
    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.
*************** public abstract class CubicCurve2D
*** 232,242 ****
     */
    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.
--- 218,227 ----
     */
    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.
*************** public abstract class CubicCurve2D
*** 258,269 ****
     */
    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.
--- 243,252 ----
     */
    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.
*************** public abstract class CubicCurve2D
*** 276,282 ****
               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
--- 259,264 ----
*************** public abstract class CubicCurve2D
*** 309,315 ****
                      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
--- 291,296 ----
*************** public abstract class CubicCurve2D
*** 340,346 ****
      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
--- 321,326 ----
*************** public abstract class CubicCurve2D
*** 374,386 ****
     */
    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
--- 354,364 ----
     */
    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
*************** public abstract class CubicCurve2D
*** 420,426 ****
                                     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
--- 398,403 ----
*************** public abstract class CubicCurve2D
*** 441,447 ****
                           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
--- 418,423 ----
*************** public abstract class CubicCurve2D
*** 458,469 ****
     */
    public double getFlatness()
    {
!     return Math.sqrt(getFlatnessSq(getX1(), getY1(), getCtrlX1(),
!                                    getCtrlY1(), getCtrlX2(), getCtrlY2(),
!                                    getX2(), getY2()));
    }
  
- 
    /**
     * Subdivides this curve into two halves.
     *
--- 434,443 ----
     */
    public double getFlatness()
    {
!     return Math.sqrt(getFlatnessSq(getX1(), getY1(), getCtrlX1(), getCtrlY1(),
!                                    getCtrlX2(), getCtrlY2(), getX2(), getY2()));
    }
  
    /**
     * Subdivides this curve into two halves.
     *
*************** public abstract class CubicCurve2D
*** 482,490 ****
    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);
--- 456,466 ----
    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);
*************** public abstract class CubicCurve2D
*** 492,498 ****
        right.setCurve(d, 6);
    }
  
- 
    /**
     * Subdivides a cubic curve into two halves.
     *
--- 468,473 ----
*************** public abstract class CubicCurve2D
*** 510,522 ****
     * 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.
--- 485,496 ----
     * 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.
*************** public abstract class CubicCurve2D
*** 563,580 ****
     * 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, src_C1_y, src_C2_x, src_C2_y;
!     double left_P1_x, left_P1_y;
!     double left_C1_x, left_C1_y, left_C2_x, left_C2_y;
!     double right_C1_x, right_C1_y, right_C2_x, right_C2_y;
!     double right_P2_x, right_P2_y;
!     double Mid_x, Mid_y; // Mid = left.P2 = right.P1
  
      left_P1_x = src[srcOff];
      left_P1_y = src[srcOff + 1];
--- 537,565 ----
     * 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];
*************** public abstract class CubicCurve2D
*** 599,629 ****
      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
--- 584,613 ----
      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
*************** public abstract class CubicCurve2D
*** 658,668 ****
     * @see #solveCubic(double[], double[])
     * @see QuadCurve2D#solveQuadratic(double[],double[])
     *
!    * @author <a href="mailto:bjg@network-theory.com">Brian Gough</a>
     * (original C implementation in the <a href=
     * "http://www.gnu.org/software/gsl/">GNU Scientific Library</a>)
     *
!    * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
     * (adaptation to Java)
     */
    public static int solveCubic(double[] eqn)
--- 642,652 ----
     * @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)
*************** public abstract class CubicCurve2D
*** 670,676 ****
      return solveCubic(eqn, eqn);
    }
  
- 
    /**
     * Finds the non-complex roots of a cubic equation. The following
     * equation is being solved:
--- 654,659 ----
*************** public abstract class CubicCurve2D
*** 706,716 ****
     * result of -1 indicates that the equation is constant (i.e.,
     * always or never zero).
     *
!    * @author <a href="mailto:bjg@network-theory.com">Brian Gough</a>
     * (original C implementation in the <a href=
     * "http://www.gnu.org/software/gsl/">GNU Scientific Library</a>)
     *
!    * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
     * (adaptation to Java)
     */
    public static int solveCubic(double[] eqn, double[] res)
--- 689,699 ----
     * result of -1 indicates that the equation is constant (i.e.,
     * always or never zero).
     *
!    * @author Brain Gouph (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)
*************** public abstract class CubicCurve2D
*** 727,735 ****
      // 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, b, c, q, r, Q, R;
!     double c3, Q3, R2, CR2, CQ3;
  
      // If the cubic coefficient is zero, we have a quadratic equation.
      c3 = eqn[3];
--- 710,728 ----
      // 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];
*************** public abstract class CubicCurve2D
*** 755,973 ****
      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 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;contained&#x201d; in a CubicCurve2D.
     */
    public boolean contains(double x, double y)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
!   }
  
  
    /**
!    * Determines whether a point lies 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;contained&#x201d; in a CubicCurve2D.
     */
    public boolean contains(Point2D p)
    {
      return contains(p.getX(), p.getY());
    }
  
! 
    public boolean intersects(double x, double y, double w, double h)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
!   }
  
  
    public boolean intersects(Rectangle2D r)
    {
      return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
    }
  
! 
    public boolean contains(double x, double y, double w, double h)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
!   }
  
  
    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. 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 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.
     *
--- 748,1014 ----
      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.
     *
*************** public abstract class CubicCurve2D
*** 976,990 ****
    public Object clone()
    {
      try
!     {
!       return super.clone();
!     }
      catch (CloneNotSupportedException e)
!     {
!       throw (Error) new InternalError().initCause(e); // Impossible
!     }
    }
  
  
    /**
     * A two-dimensional curve that is parameterized with a cubic
--- 1017,1134 ----
    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
*************** public abstract class CubicCurve2D
*** 996,1052 ****
     * @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
--- 1140,1187 ----
     * @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
*************** public abstract class CubicCurve2D
*** 1056,1062 ****
      {
      }
  
- 
      /**
       * Constructs a new CubicCurve2D that stores its coordinate values
       * in double-precision floating-point format, specifying the
--- 1191,1196 ----
*************** public abstract class CubicCurve2D
*** 1089,1096 ****
       * @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;
--- 1223,1230 ----
       * @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;
*************** public abstract class CubicCurve2D
*** 1102,1108 ****
        this.y2 = y2;
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s start
       * point.
--- 1236,1241 ----
*************** public abstract class CubicCurve2D
*** 1112,1118 ****
        return x1;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s start
       * point.
--- 1245,1250 ----
*************** public abstract class CubicCurve2D
*** 1122,1128 ****
        return y1;
      }
  
- 
      /**
       * Returns the curve&#x2019;s start point.
       */
--- 1254,1259 ----
*************** public abstract class CubicCurve2D
*** 1131,1137 ****
        return new Point2D.Double(x1, y1);
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s first
       * control point.
--- 1262,1267 ----
*************** public abstract class CubicCurve2D
*** 1141,1147 ****
        return ctrlx1;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s first
       * control point.
--- 1271,1276 ----
*************** public abstract class CubicCurve2D
*** 1151,1157 ****
        return ctrly1;
      }
  
- 
      /**
       * Returns the curve&#x2019;s first control point.
       */
--- 1280,1285 ----
*************** public abstract class CubicCurve2D
*** 1160,1166 ****
        return new Point2D.Double(ctrlx1, ctrly1);
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s second
       * control point.
--- 1288,1293 ----
*************** public abstract class CubicCurve2D
*** 1170,1176 ****
        return ctrlx2;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s second
       * control point.
--- 1297,1302 ----
*************** public abstract class CubicCurve2D
*** 1180,1186 ****
        return ctrly2;
      }
  
- 
      /**
       * Returns the curve&#x2019;s second control point.
       */
--- 1306,1311 ----
*************** public abstract class CubicCurve2D
*** 1189,1195 ****
        return new Point2D.Double(ctrlx2, ctrly2);
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s end
       * point.
--- 1314,1319 ----
*************** public abstract class CubicCurve2D
*** 1199,1205 ****
        return x2;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s end
       * point.
--- 1323,1328 ----
*************** public abstract class CubicCurve2D
*** 1209,1215 ****
        return y2;
      }
  
- 
      /**
       * Returns the curve&#x2019;s end point.
       */
--- 1332,1337 ----
*************** public abstract class CubicCurve2D
*** 1218,1224 ****
        return new Point2D.Double(x2, y2);
      }
  
- 
      /**
       * Changes the curve geometry, separately specifying each coordinate
       * value.
--- 1340,1345 ----
*************** public abstract class CubicCurve2D
*** 1263,1269 ****
        this.y2 = y2;
      }
  
- 
      /**
       * Determines the smallest rectangle that encloses the
       * curve&#x2019;s start, end and control points. As the
--- 1384,1389 ----
*************** public abstract class CubicCurve2D
*** 1284,1290 ****
      }
    }
  
- 
    /**
     * A two-dimensional curve that is parameterized with a cubic
     * function and stores coordinate values in single-precision
--- 1404,1409 ----
*************** public abstract class CubicCurve2D
*** 1295,1351 ****
     * @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
--- 1414,1461 ----
     * @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
*************** public abstract class CubicCurve2D
*** 1355,1361 ****
      {
      }
  
- 
      /**
       * Constructs a new CubicCurve2D that stores its coordinate values
       * in single-precision floating-point format, specifying the
--- 1465,1470 ----
*************** public abstract class CubicCurve2D
*** 1388,1395 ****
       * @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;
--- 1497,1504 ----
       * @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;
*************** public abstract class CubicCurve2D
*** 1401,1407 ****
        this.y2 = y2;
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s start
       * point.
--- 1510,1515 ----
*************** public abstract class CubicCurve2D
*** 1411,1417 ****
        return x1;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s start
       * point.
--- 1519,1524 ----
*************** public abstract class CubicCurve2D
*** 1421,1427 ****
        return y1;
      }
  
- 
      /**
       * Returns the curve&#x2019;s start point.
       */
--- 1528,1533 ----
*************** public abstract class CubicCurve2D
*** 1430,1436 ****
        return new Point2D.Float(x1, y1);
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s first
       * control point.
--- 1536,1541 ----
*************** public abstract class CubicCurve2D
*** 1440,1446 ****
        return ctrlx1;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s first
       * control point.
--- 1545,1550 ----
*************** public abstract class CubicCurve2D
*** 1450,1456 ****
        return ctrly1;
      }
  
- 
      /**
       * Returns the curve&#x2019;s first control point.
       */
--- 1554,1559 ----
*************** public abstract class CubicCurve2D
*** 1459,1465 ****
        return new Point2D.Float(ctrlx1, ctrly1);
      }
  
- 
      /**
       * Returns the <i>s</i> coordinate of the curve&#x2019;s second
       * control point.
--- 1562,1567 ----
*************** public abstract class CubicCurve2D
*** 1469,1475 ****
        return ctrlx2;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s second
       * control point.
--- 1571,1576 ----
*************** public abstract class CubicCurve2D
*** 1479,1485 ****
        return ctrly2;
      }
  
- 
      /**
       * Returns the curve&#x2019;s second control point.
       */
--- 1580,1585 ----
*************** public abstract class CubicCurve2D
*** 1488,1494 ****
        return new Point2D.Float(ctrlx2, ctrly2);
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s end
       * point.
--- 1588,1593 ----
*************** public abstract class CubicCurve2D
*** 1498,1504 ****
        return x2;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s end
       * point.
--- 1597,1602 ----
*************** public abstract class CubicCurve2D
*** 1508,1514 ****
        return y2;
      }
  
- 
      /**
       * Returns the curve&#x2019;s end point.
       */
--- 1606,1611 ----
*************** public abstract class CubicCurve2D
*** 1517,1523 ****
        return new Point2D.Float(x2, y2);
      }
  
- 
      /**
       * Changes the curve geometry, separately specifying each coordinate
       * value as a double-precision floating-point number.
--- 1614,1619 ----
*************** public abstract class CubicCurve2D
*** 1562,1568 ****
        this.y2 = (float) y2;
      }
  
- 
      /**
       * Changes the curve geometry, separately specifying each coordinate
       * value as a single-precision floating-point number.
--- 1658,1663 ----
*************** public abstract class CubicCurve2D
*** 1594,1601 ****
       * @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;
--- 1689,1696 ----
       * @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;
*************** public abstract class CubicCurve2D
*** 1607,1613 ****
        this.y2 = y2;
      }
  
- 
      /**
       * Determines the smallest rectangle that encloses the
       * curve&#x2019;s start, end and control points. As the
--- 1702,1707 ----
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/Dimension2D.java gcc-4.0.0/libjava/java/awt/geom/Dimension2D.java
*** gcc-3.4.3/libjava/java/awt/geom/Dimension2D.java	Tue Jan 14 21:21:34 2003
--- gcc-4.0.0/libjava/java/awt/geom/Dimension2D.java	Thu Feb 17 07:48:29 2005
*************** package java.awt.geom;
*** 42,49 ****
   * 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
   */
--- 42,49 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/Ellipse2D.java gcc-4.0.0/libjava/java/awt/geom/Ellipse2D.java
*** gcc-3.4.3/libjava/java/awt/geom/Ellipse2D.java	Fri Aug  9 04:26:15 2002
--- gcc-4.0.0/libjava/java/awt/geom/Ellipse2D.java	Thu Feb 17 07:48:29 2005
***************
*** 1,5 ****
  /* Ellipse2D.java -- represents an ellipse in 2-D space
!    Copyright (C) 2000, 2002 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Ellipse2D.java -- represents an ellipse in 2-D space
!    Copyright (C) 2000, 2002, 2004 Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,94 ****
  
  package java.awt.geom;
  
  /**
!  * @author Tom Tromey <tromey@cygnus.com>
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.2
-  * @status still needs documentation
   */
  public abstract class Ellipse2D extends RectangularShape
  {
    protected Ellipse2D()
    {
    }
  
    public boolean contains(double x, double y)
    {
      double rx = getWidth() / 2;
      double ry = getHeight() / 2;
!     double tx = (x - getCenterX()) / rx;
!     double ty = (y - getCenterY()) / ry;
!     return tx * tx + ty * ty <= 1.0;
    }
  
    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));
    }
  
    public PathIterator getPathIterator(AffineTransform at)
    {
      // An ellipse is just a complete arc.
      return new Arc2D.ArcIterator(this, at);
    }
  
    public boolean intersects(double x, double y, double w, double h)
    {
!     // fixme
      return false;
    }
  
    public static class Double extends Ellipse2D
    {
      public double height;
      public double width;
      public double x;
      public double y;
  
      public Double()
      {
      }
  
      public Double(double x, double y, double w, double h)
      {
        this.x = x;
--- 37,189 ----
  
  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;
*************** public abstract class Ellipse2D extends 
*** 97,132 ****
--- 192,263 ----
        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;
*************** public abstract class Ellipse2D extends 
*** 136,152 ****
--- 267,315 ----
      }
    } // 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;
*************** public abstract class Ellipse2D extends 
*** 155,190 ****
--- 318,389 ----
        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;
*************** public abstract class Ellipse2D extends 
*** 193,198 ****
--- 392,407 ----
        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;
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/GeneralPath.java gcc-4.0.0/libjava/java/awt/geom/GeneralPath.java
*** gcc-3.4.3/libjava/java/awt/geom/GeneralPath.java	Tue Oct 21 13:18:22 2003
--- gcc-4.0.0/libjava/java/awt/geom/GeneralPath.java	Tue Nov 30 23:58:47 2004
***************
*** 1,5 ****
  /* GeneralPath.java -- represents a shape built from subpaths
!    Copyright (C) 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GeneralPath.java -- represents a shape built from subpaths
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** package java.awt.geom;
*** 41,50 ****
  import java.awt.Rectangle;
  import java.awt.Shape;
  
  /**
!  * STUBS ONLY
!  * XXX Implement and document. Note that Sun's implementation only expects
!  * float precision, not double.
   */
  public final class GeneralPath implements Shape, Cloneable
  {
--- 41,81 ----
  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 final class GeneralPath implement
*** 52,86 ****
    public static final int WIND_NON_ZERO = PathIterator.WIND_NON_ZERO;
  
    /** Initial size if not specified. */
!   private static final int INIT_SIZE = 20;
  
    /** The winding rule. */
    private int rule;
    /**
!    * The path type in points. Note that points[index] maps to
!    * types[index >> 1]; the control points of quad and cubic paths map as
     * well but are ignored.
     */
    private byte[] types;
    /**
     * The list of all points seen. Since you can only append floats, it makes
!    * sense for this to be a float[]. I have no idea why Sun didn't choose to
     * allow a general path of double precision points.
     */
!   private float[] points;
    /** The index of the most recent moveto point, or null. */
    private int subpath = -1;
    /** The next available index into points. */
    private int index;
  
    public GeneralPath()
    {
      this(WIND_NON_ZERO, INIT_SIZE);
    }
    public GeneralPath(int rule)
    {
      this(rule, INIT_SIZE);
    }
    public GeneralPath(int rule, int capacity)
    {
      if (rule != WIND_EVEN_ODD && rule != WIND_NON_ZERO)
--- 83,145 ----
    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. */
    private 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.
     */
    private 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.
     */
!   private float[] xpoints;
!   private float[] ypoints;
! 
    /** The index of the most recent moveto point, or null. */
    private int subpath = -1;
+ 
    /** The next available index into points. */
    private 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)
*************** public final class GeneralPath implement
*** 88,155 ****
      this.rule = rule;
      if (capacity < INIT_SIZE)
        capacity = INIT_SIZE;
!     types = new byte[capacity >> 1];
!     points = new float[capacity];
    }
    public GeneralPath(Shape s)
    {
!     types = new byte[INIT_SIZE >> 1];
!     points = new float[INIT_SIZE];
      PathIterator pi = s.getPathIterator(null);
      setWindingRule(pi.getWindingRule());
      append(pi, false);
    }
  
    public void moveTo(float x, float y)
    {
      subpath = index;
!     ensureSize(index + 2);
!     types[index >> 1] = PathIterator.SEG_MOVETO;
!     points[index++] = x;
!     points[index++] = y;
    }
    public void lineTo(float x, float y)
    {
!     ensureSize(index + 2);
!     types[index >> 1] = PathIterator.SEG_LINETO;
!     points[index++] = x;
!     points[index++] = y;
    }
    public void quadTo(float x1, float y1, float x2, float y2)
    {
!     ensureSize(index + 4);
!     types[index >> 1] = PathIterator.SEG_QUADTO;
!     points[index++] = x1;
!     points[index++] = y1;
!     points[index++] = x2;
!     points[index++] = y2;
    }
!   public void curveTo(float x1, float y1, float x2, float y2,
!                       float x3, float y3)
    {
!     ensureSize(index + 6);
!     types[index >> 1] = PathIterator.SEG_CUBICTO;
!     points[index++] = x1;
!     points[index++] = y1;
!     points[index++] = x2;
!     points[index++] = y2;
!     points[index++] = x3;
!     points[index++] = y3;
    }
    public void closePath()
    {
!     ensureSize(index + 2);
!     types[index >> 1] = PathIterator.SEG_CLOSE;
!     points[index++] = points[subpath];
!     points[index++] = points[subpath + 1];
    }
  
    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
--- 147,258 ----
      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
*************** public final class GeneralPath implement
*** 158,164 ****
     *
     * @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
--- 261,267 ----
     *
     * @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
*************** public final class GeneralPath implement
*** 171,220 ****
    {
      // 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 >= 2) && (types[(index - 2) >> 2] == PathIterator.SEG_CLOSE)
!             && (f[0] == points[index - 2]) && (f[1] == points[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();
-     }
    }
  
! 
    public int getWindingRule()
    {
      return rule;
    }
    public void setWindingRule(int rule)
    {
      if (rule != WIND_EVEN_ODD && rule != WIND_NON_ZERO)
--- 274,328 ----
    {
      // 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)
*************** public final class GeneralPath implement
*** 222,243 ****
      this.rule = rule;
    }
  
    public Point2D getCurrentPoint()
    {
      if (subpath < 0)
        return null;
!     return new Point2D.Float(points[index - 2], points[index - 1]);
    }
    public void reset()
    {
      subpath = -1;
      index = 0;
    }
  
    public void transform(AffineTransform xform)
    {
!     xform.transform(points, 0, points, 0, index >> 1);
    }
    public Shape createTransformedShape(AffineTransform xform)
    {
      GeneralPath p = new GeneralPath(this);
--- 330,377 ----
      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);
*************** public final class GeneralPath implement
*** 245,329 ****
      return p;
    }
  
    public Rectangle getBounds()
    {
      return getBounds2D().getBounds();
    }
    public Rectangle2D getBounds2D()
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
  
    public boolean contains(double x, double y)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public boolean contains(Point2D p)
    {
      return contains(p.getX(), p.getY());
    }
    public boolean contains(double x, double y, double w, double h)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    public boolean contains(Rectangle2D r)
    {
      return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
    }
  
    public boolean intersects(double x, double y, double w, double h)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
    }
    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 */ 2,
!       /* 1: SEG_LINETO */ 2,
!       /* 2: SEG_QUADTO */ 4,
!       /* 3: SEG_CUBICTO */ 6,
!       /* 4: SEG_CLOSE */ 0
!     };
! 
  
      /**
       * The GeneralPath whose segments are being iterated.
       */
      private 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.
--- 379,552 ----
      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.
       */
      private 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.
*************** public final class GeneralPath implement
*** 338,344 ****
        this.transform = transform;
      }
  
- 
      /**
       * Returns the current winding rule of the GeneralPath.
       */
--- 561,566 ----
*************** public final class GeneralPath implement
*** 347,353 ****
        return path.rule;
      }
  
- 
      /**
       * Determines whether the iterator has reached the last segment in
       * the path.
--- 569,574 ----
*************** public final class GeneralPath implement
*** 357,363 ****
        return pos >= path.index;
      }
  
- 
      /**
       * Advances the iterator position by one segment.
       */
--- 578,583 ----
*************** public final class GeneralPath implement
*** 365,434 ****
      {
        int seg;
  
!       /* Increment pos by the number of coordinate values. Note that
!        * we store two values even for a SEG_CLOSE segment, which is
!        * why we increment pos at least by 2. 
         */
!       seg = path.types[pos >> 1];
        if (seg == SEG_CLOSE)
!         pos += 2;
        else
!         pos += NUM_COORDS[seg];
      }
  
- 
      /**
       * Returns the current segment in float coordinates.
       */
      public int currentSegment(float[] coords)
      {
!       int seg, numCoords;
  
!       seg = path.types[pos >> 1];
        numCoords = NUM_COORDS[seg];
        if (numCoords > 0)
!       {
!         if (transform == null)
!           System.arraycopy(path.points, pos, coords, 0, numCoords);
!         else
!           transform.transform(/* src */ path.points, /* srcOffset */ pos,
!                               /* dest */ coords, /* destOffset */ 0,
!                               /* numPoints */ numCoords >> 1);
!       }
        return seg;
      }
  
- 
      /**
       * Returns the current segment in double coordinates.
       */
      public int currentSegment(double[] coords)
      {
!       int seg, numCoords;
  
!       seg = path.types[pos >> 1];
        numCoords = NUM_COORDS[seg];
        if (numCoords > 0)
-       {
-         if (transform == null)
          {
!           // System.arraycopy throws an exception if the source and destination
!           // array are not of the same primitive type.
!           for (int i = 0; i < numCoords; i++)
!             coords[i] = (double) path.points[pos + i];
          }
-         else
-           transform.transform(/* src */ path.points, /* srcOffset */ pos,
-                               /* dest */ coords, /* destOffset */ 0,
-                               /* numPoints */ numCoords >> 1);
-       }
        return seg;
      }
    }
  
- 
    /**
!    * Creates a PathIterator for iterating along the segments of this path.
     *
     * @param at an affine transformation for projecting the returned
     * points, or <code>null</code> to let the created iterator return
--- 585,656 ----
      {
        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
*************** public final class GeneralPath implement
*** 439,453 ****
      return new GeneralPathIterator(this, at);
    }
  
! 
    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
     *
--- 661,677 ----
      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
     *
*************** public final class GeneralPath implement
*** 461,477 ****
      return new GeneralPath(this);
    }
  
    private void ensureSize(int size)
    {
      if (subpath < 0)
        throw new IllegalPathStateException("need initial moveto");
!     if (size <= points.length)
        return;
!     byte[] b = new byte[points.length];
!     System.arraycopy(types, 0, b, 0, index >> 1);
      types = b;
!     float[] f = new float[points.length << 1];
!     System.arraycopy(points, 0, f, 0, index);
!     points = f;
    }
  } // class GeneralPath
--- 685,951 ----
      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-3.4.3/libjava/java/awt/geom/IllegalPathStateException.java gcc-4.0.0/libjava/java/awt/geom/IllegalPathStateException.java
*** gcc-3.4.3/libjava/java/awt/geom/IllegalPathStateException.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/geom/IllegalPathStateException.java	Thu Feb 17 07:48:29 2005
*************** package java.awt.geom;
*** 41,47 ****
   * 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
   */
--- 41,47 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/Line2D.java gcc-4.0.0/libjava/java/awt/geom/Line2D.java
*** gcc-3.4.3/libjava/java/awt/geom/Line2D.java	Fri Jul 18 19:20:33 2003
--- gcc-4.0.0/libjava/java/awt/geom/Line2D.java	Thu Feb 17 07:48:29 2005
*************** import java.util.NoSuchElementException;
*** 46,53 ****
   * 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>
   * @since 1.2
   * @status updated to 1.4
   */
--- 46,54 ----
   * 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 
*** 235,245 ****
    }
  
    /**
!    * 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
--- 236,292 ----
    }
  
    /**
!    * 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
*************** public abstract class Line2D implements 
*** 249,264 ****
     * @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 beta = (((y1 - y3) * (x4 - x3) + (x1 - x3) * (y4 - y3))
!                    / ((y2 - y1) * (x4 - x3) + (x2 - x1) * (y4 - y3)));
!     if (beta < 0.0 || beta > 1.0)
!       return false;
!     double alpha = (x1 + beta * (x2 - x1) - x3) / (x4 - x3);
!     return alpha >= 0.0 && alpha <= 1.0;
    }
  
    /**
--- 296,359 ----
     * @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));
!     } 
    }
  
    /**
*************** public abstract class Line2D implements 
*** 772,778 ****
    /**
     * 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
     */
--- 867,873 ----
    /**
     * 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 abstract class Line2D implements 
*** 922,928 ****
    /**
     * 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
     */
--- 1017,1023 ----
    /**
     * 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
     */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/NoninvertibleTransformException.java gcc-4.0.0/libjava/java/awt/geom/NoninvertibleTransformException.java
*** gcc-3.4.3/libjava/java/awt/geom/NoninvertibleTransformException.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/geom/NoninvertibleTransformException.java	Thu Feb 17 07:48:29 2005
*************** package java.awt.geom;
*** 42,48 ****
   * <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
   */
--- 42,48 ----
   * <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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/PathIterator.java gcc-4.0.0/libjava/java/awt/geom/PathIterator.java
*** gcc-3.4.3/libjava/java/awt/geom/PathIterator.java	Fri Jan  9 08:58:56 2004
--- gcc-4.0.0/libjava/java/awt/geom/PathIterator.java	Thu Feb 17 07:48:29 2005
*************** package java.awt.geom;
*** 44,53 ****
   * 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 Shape
!  * @see Stroke
   * @see FlatteningPathIterator
   * @since 1.2
   * @status updated to 1.4
--- 44,53 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/Point2D.java gcc-4.0.0/libjava/java/awt/geom/Point2D.java
*** gcc-3.4.3/libjava/java/awt/geom/Point2D.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/geom/Point2D.java	Thu Feb 17 07:48:29 2005
***************
*** 1,5 ****
  /* Point2D.java -- generic point in 2-D space
!    Copyright (C) 1999, 2000, 2002 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Point2D.java -- generic point in 2-D space
!    Copyright (C) 1999, 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package java.awt.geom;
  
  /**
*************** package java.awt.geom;
*** 42,49 ****
   * 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
   */
--- 43,50 ----
   * 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
*** 52,58 ****
    /**
     * The default constructor.
     *
!    * @see Point
     * @see Point2D.Float
     * @see Point2D.Double
     */
--- 53,59 ----
    /**
     * The default constructor.
     *
!    * @see java.awt.Point
     * @see Point2D.Float
     * @see Point2D.Double
     */
*************** public abstract class Point2D implements
*** 120,126 ****
     * @param y2 the y coordinate of point 2
     * @return the distance from (x1,y1) to (x2,y2)
     */
!   static public double distance(double x1, double y1, double x2, double y2)
    {
      return Math.sqrt(distanceSq(x1, y1, x2, y2));
    }
--- 121,127 ----
     * @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));
    }
*************** public abstract class Point2D implements
*** 228,234 ****
    /**
     * 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
     */
--- 229,235 ----
    /**
     * 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 abstract class Point2D implements
*** 306,312 ****
    /**
     * 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
     */
--- 307,313 ----
    /**
     * 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
     */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/QuadCurve2D.java gcc-4.0.0/libjava/java/awt/geom/QuadCurve2D.java
*** gcc-3.4.3/libjava/java/awt/geom/QuadCurve2D.java	Mon Jan  5 19:19:29 2004
--- gcc-4.0.0/libjava/java/awt/geom/QuadCurve2D.java	Thu Feb 17 07:48:29 2005
***************
*** 1,5 ****
  /* QuadCurve2D.java -- represents a parameterized quadratic curve in 2-D space
!    Copyright (C) 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,48 ****
  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.
--- 35,46 ----
*************** import java.util.NoSuchElementException;
*** 53,64 ****
   * @author Eric Blake (ebb9@email.byu.edu)
   * @author Graydon Hoare (graydon@redhat.com)
   * @author Sascha Brawer (brawer@dandelis.ch)
   *
   * @since 1.2
   */
! public abstract class QuadCurve2D
!   implements Shape, Cloneable
  {
    /**
     * Constructs a new QuadCurve2D. Typical users will want to
     * construct instances of a subclass, such as {@link
--- 51,65 ----
   * @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
*************** public abstract class QuadCurve2D
*** 68,134 ****
    {
    }
  
- 
    /**
     * 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.
--- 69,125 ----
*************** public abstract class QuadCurve2D
*** 154,160 ****
    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.
--- 145,150 ----
*************** public abstract class QuadCurve2D
*** 174,185 ****
     */
    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.
--- 164,173 ----
     */
    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.
*************** public abstract class QuadCurve2D
*** 198,208 ****
     */
    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.
--- 186,194 ----
     */
    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.
*************** public abstract class QuadCurve2D
*** 223,234 ****
     */
    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.
     *
--- 209,219 ----
     */
    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.
     *
*************** public abstract class QuadCurve2D
*** 236,246 ****
     */
    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
--- 221,230 ----
     */
    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
*************** public abstract class QuadCurve2D
*** 267,273 ****
      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
--- 251,256 ----
*************** public abstract class QuadCurve2D
*** 294,300 ****
      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
--- 277,282 ----
*************** public abstract class QuadCurve2D
*** 328,334 ****
                                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
--- 310,315 ----
*************** public abstract class QuadCurve2D
*** 362,368 ****
                              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
--- 343,348 ----
*************** public abstract class QuadCurve2D
*** 378,389 ****
     */
    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
--- 358,367 ----
     */
    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
*************** public abstract class QuadCurve2D
*** 399,410 ****
     */
    public double getFlatness()
    {
!     return Line2D.ptSegDist(getX1(), getY1(),
!                             getX2(), getY2(),
!                             getCtrlX(), getCtrlY());
    }
  
- 
    /**
     * Subdivides this curve into two halves.
     *
--- 377,386 ----
     */
    public double getFlatness()
    {
!     return Line2D.ptSegDist(getX1(), getY1(), getX2(), getY2(), getCtrlX(),
!                             getCtrlY());
    }
  
    /**
     * Subdivides this curve into two halves.
     *
*************** public abstract class QuadCurve2D
*** 423,430 ****
    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);
--- 399,409 ----
    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);
*************** public abstract class QuadCurve2D
*** 432,438 ****
        right.setCurve(d, 4);
    }
  
- 
    /**
     * Subdivides a quadratic curve into two halves.
     *
--- 411,416 ----
*************** public abstract class QuadCurve2D
*** 456,462 ****
      src.subdivide(left, right);
    }
  
- 
    /**
     * Subdivides a quadratic curve into two halves, passing all
     * coordinates in an array.
--- 434,439 ----
*************** public abstract class QuadCurve2D
*** 500,510 ****
     * 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, y1, xc, yc, x2, y2;
  
      x1 = src[srcOff];
      y1 = src[srcOff + 1];
--- 477,491 ----
     * 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];
*************** public abstract class QuadCurve2D
*** 514,529 ****
      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;
--- 495,510 ----
      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;
*************** public abstract class QuadCurve2D
*** 533,555 ****
      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
--- 514,535 ----
      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
*************** public abstract class QuadCurve2D
*** 582,592 ****
     * result of -1 indicates that the equation is constant (i.e.,
     * always or never zero).
     *
!    * @author <a href="mailto:bjg@network-theory.com">Brian Gough</a>
     * (original C implementation in the <a href=
     * "http://www.gnu.org/software/gsl/">GNU Scientific Library</a>)
     *
!    * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
     * (adaptation to Java)
     */
    public static int solveQuadratic(double[] eqn)
--- 562,572 ----
     * result of -1 indicates that the equation is constant (i.e.,
     * always or never zero).
     *
!    * @author Brain Gouph (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)
*************** public abstract class QuadCurve2D
*** 594,600 ****
      return solveQuadratic(eqn, eqn);
    }
  
- 
    /**
     * Finds the non-complex roots of a quadratic equation. The
     * following equation is being solved:
--- 574,579 ----
*************** public abstract class QuadCurve2D
*** 628,638 ****
     * result of -1 indicates that the equation is constant (i.e.,
     * always or never zero).
     *
!    * @author <a href="mailto:bjg@network-theory.com">Brian Gough</a>
     * (original C implementation in the <a href=
     * "http://www.gnu.org/software/gsl/">GNU Scientific Library</a>)
     *
!    * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
     * (adaptation to Java)
     */
    public static int solveQuadratic(double[] eqn, double[] res)
--- 607,617 ----
     * result of -1 indicates that the equation is constant (i.e.,
     * always or never zero).
     *
!    * @author Brian Gouph (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)
*************** public abstract class QuadCurve2D
*** 649,656 ****
      // 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, b, c, disc;
  
      c = eqn[0];
      b = eqn[1];
--- 628,637 ----
      // 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];
*************** public abstract class QuadCurve2D
*** 661,673 ****
      // 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;
  
--- 642,654 ----
      // 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;
  
*************** public abstract class QuadCurve2D
*** 675,770 ****
        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, 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 lies inside the area that is 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;contained&#x201d; in a QuadCurve2D.
     */
    public boolean contains(double x, double y)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
!   }
  
  
    /**
!    * Determines whether a point lies inside the area that is 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;contained&#x201d; in a QuadCurve2D.
     */
    public boolean contains(Point2D p)
    {
      return contains(p.getX(), p.getY());
    }
  
! 
    public boolean intersects(double x, double y, double w, double h)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
!   }
  
  
    public boolean intersects(Rectangle2D r)
    {
      return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
    }
  
! 
    public boolean contains(double x, double y, double w, double h)
    {
!     // XXX Implement.
!     throw new Error("not implemented");
!   }
  
  
    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
--- 656,804 ----
        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
*************** public abstract class QuadCurve2D
*** 780,876 ****
      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.
     *
--- 814,898 ----
      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.
     *
*************** public abstract class QuadCurve2D
*** 879,893 ****
    public Object clone()
    {
      try
!     {
!       return super.clone();
!     }
      catch (CloneNotSupportedException e)
!     {
!       throw (Error) new InternalError().initCause(e); // Impossible
!     }
    }
  
  
    /**
     * A two-dimensional curve that is parameterized with a quadratic
--- 901,1006 ----
    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
*************** public abstract class QuadCurve2D
*** 899,943 ****
     * @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
--- 1012,1049 ----
     * @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
*************** public abstract class QuadCurve2D
*** 947,953 ****
      {
      }
  
- 
      /**
       * Constructs a new QuadCurve2D that stores its coordinate values
       * in double-precision floating-point format, specifying the
--- 1053,1058 ----
*************** public abstract class QuadCurve2D
*** 971,978 ****
       * @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;
--- 1076,1083 ----
       * @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;
*************** public abstract class QuadCurve2D
*** 982,988 ****
        this.y2 = y2;
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s start
       * point.
--- 1087,1092 ----
*************** public abstract class QuadCurve2D
*** 992,998 ****
        return x1;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s start
       * point.
--- 1096,1101 ----
*************** public abstract class QuadCurve2D
*** 1002,1008 ****
        return y1;
      }
  
- 
      /**
       * Returns the curve&#x2019;s start point.
       */
--- 1105,1110 ----
*************** public abstract class QuadCurve2D
*** 1011,1017 ****
        return new Point2D.Double(x1, y1);
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s control
       * point.
--- 1113,1118 ----
*************** public abstract class QuadCurve2D
*** 1021,1027 ****
        return ctrlx;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s control
       * point.
--- 1122,1127 ----
*************** public abstract class QuadCurve2D
*** 1031,1037 ****
        return ctrly;
      }
  
- 
      /**
       * Returns the curve&#x2019;s control point.
       */
--- 1131,1136 ----
*************** public abstract class QuadCurve2D
*** 1040,1046 ****
        return new Point2D.Double(ctrlx, ctrly);
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s end
       * point.
--- 1139,1144 ----
*************** public abstract class QuadCurve2D
*** 1050,1056 ****
        return x2;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s end
       * point.
--- 1148,1153 ----
*************** public abstract class QuadCurve2D
*** 1060,1066 ****
        return y2;
      }
  
- 
      /**
       * Returns the curve&#x2019;s end point.
       */
--- 1157,1162 ----
*************** public abstract class QuadCurve2D
*** 1069,1075 ****
        return new Point2D.Double(x2, y2);
      }
  
- 
      /**
       * Changes the geometry of the curve.
       *
--- 1165,1170 ----
*************** public abstract class QuadCurve2D
*** 1102,1108 ****
        this.y2 = y2;
      }
  
- 
      /**
       * Determines the smallest rectangle that encloses the
       * curve&#x2019;s start, end and control point. As the
--- 1197,1202 ----
*************** public abstract class QuadCurve2D
*** 1123,1129 ****
      }
    }
  
- 
    /**
     * A two-dimensional curve that is parameterized with a quadratic
     * function and stores coordinate values in single-precision
--- 1217,1222 ----
*************** public abstract class QuadCurve2D
*** 1134,1178 ****
     * @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
--- 1227,1264 ----
     * @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
*************** public abstract class QuadCurve2D
*** 1182,1188 ****
      {
      }
  
- 
      /**
       * Constructs a new QuadCurve2D that stores its coordinate values
       * in single-precision floating-point format, specifying the
--- 1268,1273 ----
*************** public abstract class QuadCurve2D
*** 1206,1213 ****
       * @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;
--- 1291,1297 ----
       * @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;
*************** public abstract class QuadCurve2D
*** 1217,1223 ****
        this.y2 = y2;
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s start
       * point.
--- 1301,1306 ----
*************** public abstract class QuadCurve2D
*** 1227,1233 ****
        return x1;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s start
       * point.
--- 1310,1315 ----
*************** public abstract class QuadCurve2D
*** 1237,1243 ****
        return y1;
      }
  
- 
      /**
       * Returns the curve&#x2019;s start point.
       */
--- 1319,1324 ----
*************** public abstract class QuadCurve2D
*** 1246,1252 ****
        return new Point2D.Float(x1, y1);
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s control
       * point.
--- 1327,1332 ----
*************** public abstract class QuadCurve2D
*** 1256,1262 ****
        return ctrlx;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s control
       * point.
--- 1336,1341 ----
*************** public abstract class QuadCurve2D
*** 1266,1272 ****
        return ctrly;
      }
  
- 
      /**
       * Returns the curve&#x2019;s control point.
       */
--- 1345,1350 ----
*************** public abstract class QuadCurve2D
*** 1275,1281 ****
        return new Point2D.Float(ctrlx, ctrly);
      }
  
- 
      /**
       * Returns the <i>x</i> coordinate of the curve&#x2019;s end
       * point.
--- 1353,1358 ----
*************** public abstract class QuadCurve2D
*** 1285,1291 ****
        return x2;
      }
  
- 
      /**
       * Returns the <i>y</i> coordinate of the curve&#x2019;s end
       * point.
--- 1362,1367 ----
*************** public abstract class QuadCurve2D
*** 1295,1301 ****
        return y2;
      }
  
- 
      /**
       * Returns the curve&#x2019;s end point.
       */
--- 1371,1376 ----
*************** public abstract class QuadCurve2D
*** 1304,1310 ****
        return new Point2D.Float(x2, y2);
      }
  
- 
      /**
       * Changes the geometry of the curve, specifying coordinate values
       * as double-precision floating-point numbers.
--- 1379,1384 ----
*************** public abstract class QuadCurve2D
*** 1338,1344 ****
        this.y2 = (float) y2;
      }
  
- 
      /**
       * Changes the geometry of the curve, specifying coordinate values
       * as single-precision floating-point numbers.
--- 1412,1417 ----
*************** public abstract class QuadCurve2D
*** 1361,1368 ****
       * @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;
--- 1434,1441 ----
       * @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;
*************** public abstract class QuadCurve2D
*** 1372,1378 ****
        this.y2 = y2;
      }
  
- 
      /**
       * Determines the smallest rectangle that encloses the
       * curve&#x2019;s start, end and control point. As the
--- 1445,1450 ----
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/Rectangle2D.java gcc-4.0.0/libjava/java/awt/geom/Rectangle2D.java
*** gcc-3.4.3/libjava/java/awt/geom/Rectangle2D.java	Thu Sep 25 14:38:00 2003
--- gcc-4.0.0/libjava/java/awt/geom/Rectangle2D.java	Wed Feb 16 20:02:04 2005
***************
*** 1,5 ****
  /* Rectangle2D.java -- generic rectangles in 2-D space
!    Copyright (C) 2000, 2001, 2002 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Rectangle2D.java -- generic rectangles in 2-D space
!    Copyright (C) 2000, 2001, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** import java.util.NoSuchElementException;
*** 49,86 ****
   * 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 < r.x).
     *
!    * @see #outcode()
     */
    public static final int OUT_LEFT = 1;
  
    /**
!    * The point lies above the rectangle (p.y < r.y).
     *
!    * @see #outcode()
     */
    public static final int OUT_TOP = 2;
  
    /**
!    * The point lies right of the rectangle (p.x > r.maxX).
     *
!    * @see #outcode()
     */
    public static final int OUT_RIGHT = 4;
  
    /**
!    * The point lies below of the rectangle (p.y > r.maxY).
     *
!    * @see #outcode()
     */
    public static final int OUT_BOTTOM = 8;
  
--- 49,86 ----
   * 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;
  
*************** public abstract class Rectangle2D extend
*** 335,342 ****
     * 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(double newx, double newy)
    {
--- 335,342 ----
     * 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)
    {
*************** public abstract class Rectangle2D extend
*** 368,374 ****
     *
     * @param r the rectangle to add to this rectangle
     * @throws NullPointerException if r is null
!    * @see #union(Rectangle2D)
     */
    public void add(Rectangle2D r)
    {
--- 368,374 ----
     *
     * @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)
    {
*************** public abstract class Rectangle2D extend
*** 382,388 ****
     * safe; modifications to the rectangle do not affect the results of this
     * path instance.
     *
!    * @param transform an optional transform to apply to the iterator
     * @return a new iterator over the boundary
     * @since 1.2
     */
--- 382,388 ----
     * 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 abstract class Rectangle2D extend
*** 490,497 ****
     * path instance. As the rectangle is already flat, the flatness parameter
     * is ignored.
     *
!    * @param transform an optional transform to apply to the iterator
!    * @param double the maximum distance for deviation from the real boundary
     * @return a new iterator over the boundary
     * @since 1.2
     */
--- 490,497 ----
     * 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 abstract class Rectangle2D extend
*** 508,514 ****
     *   + 37 * Double.doubleToLongBits(getY())
     *   + 43 * Double.doubleToLongBits(getWidth())
     *   + 47 * Double.doubleToLongBits(getHeight());
!    * return (int) ((l >> 32) ^ l);
     * </pre>
     *
     * @return the hashcode
--- 508,514 ----
     *   + 37 * Double.doubleToLongBits(getY())
     *   + 43 * Double.doubleToLongBits(getWidth())
     *   + 47 * Double.doubleToLongBits(getHeight());
!    * return (int) ((l &gt;&gt; 32) ^ l);
     * </pre>
     *
     * @return the hashcode
*************** public abstract class Rectangle2D extend
*** 543,549 ****
    /**
     * 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
     */
--- 543,549 ----
    /**
     * 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 abstract class Rectangle2D extend
*** 747,758 ****
        return getClass().getName() + "[x=" + x + ",y=" + y + ",w=" + width
          + ",h=" + height + ']';
      }
!   } // class Double
  
    /**
     * 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
     */
--- 747,758 ----
        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 abstract class Rectangle2D extend
*** 988,992 ****
        return getClass().getName() + "[x=" + x + ",y=" + y + ",w=" + width
          + ",h=" + height + ']';
      }
!   } // class Float
! } // class Rectangle2D
--- 988,992 ----
        return getClass().getName() + "[x=" + x + ",y=" + y + ",w=" + width
          + ",h=" + height + ']';
      }
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/RectangularShape.java gcc-4.0.0/libjava/java/awt/geom/RectangularShape.java
*** gcc-3.4.3/libjava/java/awt/geom/RectangularShape.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/geom/RectangularShape.java	Thu Feb 17 07:48:29 2005
*************** import java.awt.Shape;
*** 46,53 ****
   * 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
--- 46,53 ----
   * 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
*************** public abstract class RectangularShape i
*** 354,360 ****
     * threadsafe if and only if the iterator returned by
     * {@link #getPathIterator(AffineTransform)} is as well.
     *
!    * @param transform 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
--- 354,360 ----
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/RoundRectangle2D.java gcc-4.0.0/libjava/java/awt/geom/RoundRectangle2D.java
*** gcc-3.4.3/libjava/java/awt/geom/RoundRectangle2D.java	Fri Sep 26 15:14:21 2003
--- gcc-4.0.0/libjava/java/awt/geom/RoundRectangle2D.java	Thu Feb 17 07:48:29 2005
***************
*** 1,5 ****
  /* RoundRectangle2D.java -- represents a rectangle with rounded corners
!    Copyright (C) 2000, 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* RoundRectangle2D.java -- represents a rectangle with rounded corners
!    Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** package java.awt.geom;
*** 39,46 ****
  
  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
--- 39,47 ----
  
  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
*************** public abstract class RoundRectangle2D e
*** 60,71 ****
     * @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()
    {
    }
  
--- 61,72 ----
     * @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()
    {
    }
  
*************** public abstract class RoundRectangle2D e
*** 87,94 ****
      // 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));
!     double aw = getArcWidth();
!     double ah = getArcHeight();
      if (dx > aw || dy > ah)
        return true;
  
--- 88,98 ----
      // 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;
  
*************** public abstract class RoundRectangle2D e
*** 112,119 ****
    {
      // We have to check all four points here (for ordinary rectangles
      // we can just check opposing corners).
!     return (contains(x, y) && contains(x + w, h)
!             && contains(x, y + h) && contains(x + w, y + h));
    }
  
    /** Return a new path iterator which iterates over this rectangle.
--- 116,123 ----
    {
      // 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.
*************** public abstract class RoundRectangle2D e
*** 128,281 ****
      final double arcwidth = getArcWidth();
      final double archeight = getArcHeight();
      return new PathIterator()
!     {
!       /** We iterate clockwise around the rectangle, starting in the
!        * upper left.  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] = minx;
! 	    temp[1] = miny + archeight;
! 	    break;
! 	  case 1:
! 	    temp[0] = minx + arcwidth;
! 	    temp[1] = miny;
! 	    break;
! 	  case 2:
! 	    temp[0] = maxx - arcwidth;
! 	    temp[1] = maxy;
! 	    break;
! 	  case 3:
! 	    temp[0] = maxx;
! 	    temp[1] = miny + archeight;
! 	    break;
! 	  case 4:
! 	    temp[0] = maxx;
! 	    temp[1] = maxy - archeight;
! 	    break;
! 	  case 5:
! 	    temp[0] = maxx - arcwidth;
! 	    temp[1] = maxy;
! 	    break;
! 	  case 6:
! 	    temp[0] = minx + arcwidth;
! 	    temp[1] = maxy;
! 	    break;
! 	  case 7:
! 	    temp[0] = minx;
! 	    temp[1] = maxy - archeight;
! 	    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);
! 	    arc.setFrameFromDiagonal(x1, y1, temp[0], temp[1]);
! 	    arc.setAngles(x1, y1, temp[0], temp[1]);
! 	    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.
--- 132,292 ----
      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.
*************** public abstract class RoundRectangle2D e
*** 286,299 ****
     */
    public boolean intersects(double x, double y, double w, double h)
    {
!     // Here we can use the same code we use for an ordinary rectangle.
!     double mx = getX();
!     double mw = getWidth();
!     if (x < mx || x >= mx + mw || x + w < mx || x + w >= mx + mw)
!       return false;
!     double my = getY();
!     double mh = getHeight();
!     return y >= my && y < my + mh && y + h >= my && y + h < my + mh;
    }
  
    /** Set the boundary of this round rectangle.
--- 297,305 ----
     */
    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.
*************** public abstract class RoundRectangle2D e
*** 315,321 ****
    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
--- 321,327 ----
    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
*************** public abstract class RoundRectangle2D e
*** 353,360 ****
       * @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;
--- 359,366 ----
       * @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;
*************** public abstract class RoundRectangle2D e
*** 405,411 ****
      }
  
      public void setRoundRect(double x, double y, double w, double h,
!                               double arcWidth, double arcHeight)
      {
        this.x = x;
        this.y = y;
--- 411,417 ----
      }
  
      public void setRoundRect(double x, double y, double w, double h,
!                              double arcWidth, double arcHeight)
      {
        this.x = x;
        this.y = y;
*************** public abstract class RoundRectangle2D e
*** 451,458 ****
       * @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;
--- 457,464 ----
       * @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;
*************** public abstract class RoundRectangle2D e
*** 503,509 ****
      }
  
      public void setRoundRect(float x, float y, float w, float h,
!                               float arcWidth, float arcHeight)
      {
        this.x = x;
        this.y = y;
--- 509,515 ----
      }
  
      public void setRoundRect(float x, float y, float w, float h,
!                              float arcWidth, float arcHeight)
      {
        this.x = x;
        this.y = y;
*************** public abstract class RoundRectangle2D e
*** 514,520 ****
      }
  
      public void setRoundRect(double x, double y, double w, double h,
!                               double arcWidth, double arcHeight)
      {
        this.x = (float) x;
        this.y = (float) y;
--- 520,526 ----
      }
  
      public void setRoundRect(double x, double y, double w, double h,
!                              double arcWidth, double arcHeight)
      {
        this.x = (float) x;
        this.y = (float) y;
diff -Nrcpad gcc-3.4.3/libjava/java/awt/geom/doc-files/Area-1.png gcc-4.0.0/libjava/java/awt/geom/doc-files/Area-1.png
*** gcc-3.4.3/libjava/java/awt/geom/doc-files/Area-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/geom/doc-files/Area-1.png	Tue Nov 16 15:28:57 2004
***************
*** 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-3.4.3/libjava/java/awt/geom/doc-files/Ellipse-1.png gcc-4.0.0/libjava/java/awt/geom/doc-files/Ellipse-1.png
*** gcc-3.4.3/libjava/java/awt/geom/doc-files/Ellipse-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/geom/doc-files/Ellipse-1.png	Tue Nov 16 15:28:57 2004
***************
*** 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-3.4.3/libjava/java/awt/geom/doc-files/GeneralPath-1.png gcc-4.0.0/libjava/java/awt/geom/doc-files/GeneralPath-1.png
*** gcc-3.4.3/libjava/java/awt/geom/doc-files/GeneralPath-1.png	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/geom/doc-files/GeneralPath-1.png	Tue Nov 16 15:28:57 2004
***************
*** 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-3.4.3/libjava/java/awt/im/InputContext.java gcc-4.0.0/libjava/java/awt/im/InputContext.java
*** gcc-3.4.3/libjava/java/awt/im/InputContext.java	Fri Jul 11 18:27:54 2003
--- gcc-4.0.0/libjava/java/awt/im/InputContext.java	Thu Feb 17 07:48:29 2005
***************
*** 1,5 ****
  /* InputContext.java -- provides the context for text input
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,56 ****
  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.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.InputStreamReader;
  import java.io.IOException;
  import java.net.URL;
  import java.util.ArrayList;
  import java.util.Enumeration;
  import java.util.HashMap;
  import java.util.Locale;
- import gnu.java.util.EmptyEnumeration;
  
  /**
   * Provides a context for controlling input methods and keyboard layouts.
--- 35,58 ----
  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.util.ArrayList;
  import java.util.Enumeration;
  import java.util.HashMap;
  import java.util.Locale;
  
  /**
   * Provides a context for controlling input methods and keyboard layouts.
*************** import gnu.java.util.EmptyEnumeration;
*** 72,78 ****
   * 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
--- 74,80 ----
   * 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
*************** public class InputContext
*** 86,105 ****
    private static final ArrayList descriptors = new ArrayList();
    static
    {
!     Enumeration enum;
      try
        {
!         enum = ClassLoader.getSystemResources
            ("META_INF/services/java.awt.im.spi.InputMethodDescriptor");
        }
      catch (IOException ex)
        {
          // XXX Should we do something else?
!         enum = EmptyEnumeration.getInstance();
        }
!     while (enum.hasMoreElements())
        {
!         URL url = (URL) enum.nextElement();
          BufferedReader in;
          String line;
          try
--- 88,107 ----
    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;
          String line;
          try
*************** public class InputContext
*** 125,131 ****
                    }
                  line = in.readLine().trim();
                }
!             catch (IOException e)
                {
                  continue outer;
                }
--- 127,133 ----
                    }
                  line = in.readLine().trim();
                }
!             catch (IOException ex)
                {
                  continue outer;
                }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/im/InputMethodHighlight.java gcc-4.0.0/libjava/java/awt/im/InputMethodHighlight.java
*** gcc-3.4.3/libjava/java/awt/im/InputMethodHighlight.java	Thu Jan  2 00:14:24 2003
--- gcc-4.0.0/libjava/java/awt/im/InputMethodHighlight.java	Thu Feb 17 07:48:29 2005
***************
*** 1,5 ****
  /* InputMethodHighlight.java -- highlights the current text selection
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InputMethodHighlight.java -- highlights the current text selection
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Map;
*** 52,58 ****
   * AttributedCharacterIterators, and may be wrapped in Annotations to separate
   * text segments.
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see AttributedCharacterIterators
   * @see Annotation
   * @since 1.2
--- 52,58 ----
   * AttributedCharacterIterators, and may be wrapped in Annotations to separate
   * text segments.
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see AttributedCharacterIterators
   * @see Annotation
   * @since 1.2
diff -Nrcpad gcc-3.4.3/libjava/java/awt/im/InputMethodRequests.java gcc-4.0.0/libjava/java/awt/im/InputMethodRequests.java
*** gcc-3.4.3/libjava/java/awt/im/InputMethodRequests.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/im/InputMethodRequests.java	Thu Feb 17 07:48:29 2005
***************
*** 1,5 ****
  /* InputMethodRequests.java -- handles text insertion via input methods
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InputMethodRequests.java -- handles text insertion via input methods
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.text.AttributedCharacterIter
*** 51,57 ****
   * 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
--- 51,57 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/im/InputSubset.java gcc-4.0.0/libjava/java/awt/im/InputSubset.java
*** gcc-3.4.3/libjava/java/awt/im/InputSubset.java	Wed Jun 11 13:47:49 2003
--- gcc-4.0.0/libjava/java/awt/im/InputSubset.java	Thu Feb 17 07:48:29 2005
***************
*** 1,5 ****
  /* InputSubset.java -- subsets of Unicode important in text input
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.awt.im;
*** 42,48 ****
   * 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
   */
--- 42,48 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/im/spi/InputMethod.java gcc-4.0.0/libjava/java/awt/im/spi/InputMethod.java
*** gcc-3.4.3/libjava/java/awt/im/spi/InputMethod.java	Fri Aug  9 04:29:59 2002
--- gcc-4.0.0/libjava/java/awt/im/spi/InputMethod.java	Thu Feb 17 07:48:30 2005
***************
*** 1,5 ****
  /* InputMethod.java -- defines an interface for complex text input
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InputMethod.java -- defines an interface for complex text input
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Locale;
*** 51,57 ****
   * <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
   */
--- 51,57 ----
   * <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
*** 162,168 ****
     * called on a previous client.</li>
     * </ul>
     *
!    * @param the client window's current bounds, or null
     */
    void notifyClientWindowChange(Rectangle bounds);
  
--- 162,168 ----
     * called on a previous client.</li>
     * </ul>
     *
!    * @param bounds the client window's current bounds, or null
     */
    void notifyClientWindowChange(Rectangle bounds);
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/im/spi/InputMethodContext.java gcc-4.0.0/libjava/java/awt/im/spi/InputMethodContext.java
*** gcc-3.4.3/libjava/java/awt/im/spi/InputMethodContext.java	Fri Aug  9 04:29:59 2002
--- gcc-4.0.0/libjava/java/awt/im/spi/InputMethodContext.java	Tue Nov 30 23:58:49 2004
***************
*** 1,5 ****
  /* InputMethodContext.java -- communication between an input method and client
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InputMethodContext.java -- communication between an input method and client
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,47 ****
  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.Window;
  import java.awt.font.TextHitInfo;
  import java.awt.im.InputMethodRequests;
  import java.text.AttributedCharacterIterator;
  import javax.swing.JFrame;
  
  /**
--- 35,48 ----
  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.Window;
  import java.awt.font.TextHitInfo;
  import java.awt.im.InputMethodRequests;
  import java.text.AttributedCharacterIterator;
+ 
  import javax.swing.JFrame;
  
  /**
*************** import javax.swing.JFrame;
*** 49,55 ****
   * 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
   */
--- 50,56 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/im/spi/InputMethodDescriptor.java gcc-4.0.0/libjava/java/awt/im/spi/InputMethodDescriptor.java
*** gcc-3.4.3/libjava/java/awt/im/spi/InputMethodDescriptor.java	Sat Oct 11 17:19:46 2003
--- gcc-4.0.0/libjava/java/awt/im/spi/InputMethodDescriptor.java	Thu Feb 17 07:48:30 2005
***************
*** 1,5 ****
  /* InputMethodDescriptor.java -- enables loading and use of an input method
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.util.Locale;
*** 45,51 ****
   * 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
   */
--- 45,51 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/AffineTransformOp.java gcc-4.0.0/libjava/java/awt/image/AffineTransformOp.java
*** gcc-3.4.3/libjava/java/awt/image/AffineTransformOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/AffineTransformOp.java	Tue Nov 30 23:58:49 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/BandCombineOp.java gcc-4.0.0/libjava/java/awt/image/BandCombineOp.java
*** gcc-3.4.3/libjava/java/awt/image/BandCombineOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/BandCombineOp.java	Thu Feb 17 07:48:30 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/BandedSampleModel.java gcc-4.0.0/libjava/java/awt/image/BandedSampleModel.java
*** gcc-3.4.3/libjava/java/awt/image/BandedSampleModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/BandedSampleModel.java	Thu Feb 17 07:48:30 2005
***************
*** 0 ****
--- 1,537 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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;
+ 
+   public BandedSampleModel(int dataType, int w, int h, int numBands)
+   {
+     super(dataType, w, h, 1, w, 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)
+   {
+     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];
+       }
+ 
+     if (bands.length > bankIndices.length)
+       throw new
+ 	RasterFormatException("BandedSampleModel createSubsetSampleModel too"
+ 			      +" many bands");
+     
+     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, 0, 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;
+     for (y=0; y<h; y++)
+       {
+ 	for (x=0; x<w;)
+ 	  {
+ 	    for (int b=0; b < numBands; b++)
+ 	      {
+ 		int offset = bandOffsets[b] + y * scanlineStride + x;
+ 		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;
+     for (y=0; y<h; y++)
+       {
+ 	for (x=0; x<w;)
+ 	  {
+ 	    int offset = bandOffsets[b] + y * scanlineStride + x;
+ 	    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[0];
+ 	      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[0];
+ 	      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[0];
+ 	      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[0];
+ 	      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[0];
+ 	      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[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)
+   {
+     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-3.4.3/libjava/java/awt/image/BufferedImage.java gcc-4.0.0/libjava/java/awt/image/BufferedImage.java
*** gcc-3.4.3/libjava/java/awt/image/BufferedImage.java	Thu Sep 25 18:35:44 2003
--- gcc-4.0.0/libjava/java/awt/image/BufferedImage.java	Tue Nov 30 23:58:49 2004
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002, 2003  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BufferedImage.java --
!    Copyright (C) 2000, 2002, 2003, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,52 ****
  
  package java.awt.image;
  
  import java.awt.Graphics;
  import java.awt.Graphics2D;
  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;
- import gnu.java.awt.ComponentDataBlitOp;
  
  /**
   * A buffered image always starts at coordinates (0, 0).
--- 38,57 ----
  
  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.HashSet;
  import java.util.Hashtable;
+ import java.util.Iterator;
  import java.util.Vector;
  
  /**
   * A buffered image always starts at coordinates (0, 0).
*************** import gnu.java.awt.ComponentDataBlitOp;
*** 56,62 ****
   * 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
--- 61,67 ----
   * 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
*************** public class BufferedImage extends Image
*** 76,95 ****
                            TYPE_BYTE_BINARY    = 12,
                            TYPE_BYTE_INDEXED   = 13;
    
!   final static int[] bits3 = { 8, 8, 8 };
!   final static int[] bits4 = { 8, 8, 8 };
!   final static int[] bits1byte = { 8 };
!   final static int[] bits1ushort = { 16 };
    
!   final static int[] masks_int = { 0x00ff0000,
  				   0x0000ff00,
  				   0x000000ff,
  				   DataBuffer.TYPE_INT };
!   final static int[] masks_565 = { 0xf800,
  				   0x07e0,
  				   0x001f,
  				   DataBuffer.TYPE_USHORT};
!   final static int[] masks_555 = { 0x7c00,
  				   0x03e0,
  				   0x001f,
  				   DataBuffer.TYPE_USHORT};
--- 81,100 ----
                            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};
*************** public class BufferedImage extends Image
*** 255,261 ****
    public WritableRaster copyData(WritableRaster dest)
    {
      if (dest == null)
!       dest = raster.createCompatibleWritableRaster();
  
      int x = dest.getMinX();
      int y = dest.getMinY();
--- 260,267 ----
    public WritableRaster copyData(WritableRaster dest)
    {
      if (dest == null)
!       dest = raster.createCompatibleWritableRaster(getMinX(), getMinY(),
!                                                    getWidth(),getHeight());
  
      int x = dest.getMinX();
      int y = dest.getMinY();
*************** public class BufferedImage extends Image
*** 282,289 ****
  
    public Graphics2D createGraphics()
    {
!     throw new UnsupportedOperationException("not implemented");
!     // will require a lot of effort to implement
    }
  
    public void flush() {
--- 288,296 ----
  
    public Graphics2D createGraphics()
    {
!     GraphicsEnvironment env;
!     env = GraphicsEnvironment.getLocalGraphicsEnvironment ();
!     return env.createGraphics (this);
    }
  
    public void flush() {
*************** public class BufferedImage extends Image
*** 439,445 ****
      
    public ImageProducer getSource()
    {
!     throw new UnsupportedOperationException("not implemented");
    }
    
    public Vector getSources()
--- 446,502 ----
      
    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)
!         {
!           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);
! 
!           Iterator i = consumers.iterator();
!           while(i.hasNext())
!             {
!               ImageConsumer c = (ImageConsumer) i.next();
!               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()
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/BufferedImageFilter.java gcc-4.0.0/libjava/java/awt/image/BufferedImageFilter.java
*** gcc-3.4.3/libjava/java/awt/image/BufferedImageFilter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/BufferedImageFilter.java	Tue Nov 30 23:58:49 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/ByteLookupTable.java gcc-4.0.0/libjava/java/awt/image/ByteLookupTable.java
*** gcc-3.4.3/libjava/java/awt/image/ByteLookupTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/ByteLookupTable.java	Thu Feb 17 07:48:30 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/ColorConvertOp.java gcc-4.0.0/libjava/java/awt/image/ColorConvertOp.java
*** gcc-3.4.3/libjava/java/awt/image/ColorConvertOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/ColorConvertOp.java	Tue Nov 30 23:58:49 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/ColorModel.java gcc-4.0.0/libjava/java/awt/image/ColorModel.java
*** gcc-3.4.3/libjava/java/awt/image/ColorModel.java	Wed Jun 25 11:23:33 2003
--- gcc-4.0.0/libjava/java/awt/image/ColorModel.java	Tue Nov 30 23:58:49 2004
***************
*** 1,4 ****
! /* Copyright (C) 1999, 2000, 2002, 2003  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ColorModel.java --
!    Copyright (C) 1999, 2000, 2002, 2003, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,46 ****
  
  package java.awt.image;
  
  import java.awt.Point;
  import java.awt.Transparency;
  import java.awt.color.ColorSpace;
! import gnu.java.awt.Buffers;
  
  /**
   * A color model operates with colors in several formats:
--- 38,50 ----
  
  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:
*************** import gnu.java.awt.Buffers;
*** 75,82 ****
   *
   * </ul>
   *
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
!  * @author C. Brian Jones <cbj@gnu.org>
   */
  public abstract class ColorModel implements Transparency
  {
--- 79,86 ----
   *
   * </ul>
   *
!  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
!  * @author C. Brian Jones (cbj@gnu.org)
   */
  public abstract class ColorModel implements Transparency
  {
*************** public abstract class ColorModel impleme
*** 107,113 ****
     * Constructs the default color model.  The default color model 
     * can be obtained by calling <code>getRGBdefault</code> of this
     * class.
!    * @param b the number of bits wide used for bit size of pixel values
     */
    public ColorModel(int bits)
    {
--- 111,117 ----
     * 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)
    {
*************** public abstract class ColorModel impleme
*** 155,160 ****
--- 159,190 ----
      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.
*************** public abstract class ColorModel impleme
*** 166,172 ****
     */
    public static ColorModel getRGBdefault()
    {
!     return new DirectColorModel(8, 0xff0000, 0xff00, 0xff, 0xff000000);
    }
  
    public final boolean hasAlpha()
--- 196,202 ----
     */
    public static ColorModel getRGBdefault()
    {
!     return new DirectColorModel(32, 0xff0000, 0xff00, 0xff, 0xff000000);
    }
  
    public final boolean hasAlpha()
*************** public abstract class ColorModel impleme
*** 293,299 ****
     * 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.
     */
    public int getRed(Object inData)
--- 323,329 ----
     * 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)
*************** public abstract class ColorModel impleme
*** 507,546 ****
     * <code>(pixel == cm.getDataElement(cm.getComponents(pixel, null,
     * 0), 0))</code>.
     *
!    * This method is typically overriden in subclasses to provide a
!    * more efficient implementation.
     *
!    * @param 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.
     *
     * @return pixel value encoded according to the color model.
     */
    public int getDataElement(int[] components, int offset)
    {
!     // subclasses has to implement this method.
      throw new UnsupportedOperationException();
    }
  
    public int getDataElement (float[] components, int offset)
    {
!     // subclasses has to implement this method.
!     throw new UnsupportedOperationException();
    }
    
    public Object getDataElements(int[] components, int offset, Object obj)
    {
!     // subclasses has to implement this method.
      throw new UnsupportedOperationException();
    }
  
!   public int getDataElements (float[] components, Object obj)
    {
!     // subclasses has to implement this method.
!     throw new UnsupportedOperationException();
    }
!   
    public boolean equals(Object obj)
    {
      if (!(obj instanceof ColorModel)) return false;
--- 537,625 ----
     * <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 ArrayIndexOutOfBounds
!    * @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;
*************** public abstract class ColorModel impleme
*** 551,558 ****
        (transferType == o.transferType) &&
        (transparency == o.transparency) &&
        (hasAlpha == o.hasAlpha) &&
!       (isAlphaPremultiplied == isAlphaPremultiplied) &&
!       (bits.equals(o.bits)) &&
        (cspace.equals(o.cspace));
    }
  
--- 630,637 ----
        (transferType == o.transferType) &&
        (transparency == o.transparency) &&
        (hasAlpha == o.hasAlpha) &&
!       (isAlphaPremultiplied == o.isAlphaPremultiplied) &&
!       Arrays.equals(bits, o.bits) &&
        (cspace.equals(o.cspace));
    }
  
*************** public abstract class ColorModel impleme
*** 597,603 ****
      return null;
    }
      
!   // Typically overridden
    public boolean isCompatibleRaster(Raster raster)
    {
      SampleModel sampleModel = raster.getSampleModel();
--- 676,686 ----
      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();
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/ComponentColorModel.java gcc-4.0.0/libjava/java/awt/image/ComponentColorModel.java
*** gcc-3.4.3/libjava/java/awt/image/ComponentColorModel.java	Thu Jun  5 19:58:40 2003
--- gcc-4.0.0/libjava/java/awt/image/ComponentColorModel.java	Tue Nov 30 23:58:49 2004
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ComponentColorModel.java --
!    Copyright (C) 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,45 ****
  
  package java.awt.image;
  
  import java.awt.Point;
  import java.awt.color.ColorSpace;
- import gnu.java.awt.Buffers;
  
  public class ComponentColorModel extends ColorModel
  {
--- 38,47 ----
  
  package java.awt.image;
  
+ import gnu.java.awt.Buffers;
+ 
  import java.awt.Point;
  import java.awt.color.ColorSpace;
  
  public class ComponentColorModel extends ColorModel
  {
*************** public class ComponentColorModel extends
*** 60,65 ****
--- 62,93 ----
  	  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();
*************** public class ComponentColorModel extends
*** 95,106 ****
    }
  
  
-   /* FIXME: Is the values returned from toRGB() in the [0.0, 1.0] or the
-      [0.0, 256) range? 
-      
-      we assume it is in the [0.0, 1.0] range along with the
-      other color spaces. */
-   
    /* Note, it's OK to pass a to large array to toRGB(). Extra
       elements are ignored. */
    
--- 123,128 ----
*************** public class ComponentColorModel extends
*** 292,310 ****
      return Raster.createWritableRaster(sm, origin);
    }
  
    public SampleModel createCompatibleSampleModel(int w, int h)
    {
!     int pixelStride = getNumComponents();
!     
!     /* TODO: Maybe we don't need to create a new offset array each
!        time, but rather use the same array every time. */
!     int[] bandOffsets = new int[pixelStride];
!     for (int i=0; i<pixelStride; i++) bandOffsets[i] = i;
!     return new ComponentSampleModel(transferType, w, h,
! 				    pixelStride, pixelStride*w,
! 				    bandOffsets);
    }
  
    public boolean isCompatibleSampleModel(SampleModel sm)
    {
      return 
--- 314,369 ----
      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 
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/ComponentSampleModel.java gcc-4.0.0/libjava/java/awt/image/ComponentSampleModel.java
*** gcc-3.4.3/libjava/java/awt/image/ComponentSampleModel.java	Tue Jan 22 22:40:10 2002
--- gcc-4.0.0/libjava/java/awt/image/ComponentSampleModel.java	Thu Feb 17 07:48:30 2005
*************** import gnu.java.awt.Buffers;
*** 41,47 ****
  /* FIXME: This class does not yet support data type TYPE_SHORT */
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   */
  public class ComponentSampleModel extends SampleModel
  {
--- 41,62 ----
  /* 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
  {
*************** public class ComponentSampleModel extend
*** 86,91 ****
--- 101,107 ----
      this.bandOffsets = bandOffsets;
      this.bankIndices = bankIndices;
  
+     this.numBanks = 0;
      for (int b=0; b<bankIndices.length; b++)
        this.numBanks = Math.max(this.numBanks, bankIndices[b]+1);
  
*************** public class ComponentSampleModel extend
*** 249,254 ****
--- 265,282 ----
  	      }
  	    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;
*************** public class ComponentSampleModel extend
*** 260,267 ****
  		outInt[b] = inInt.getData(bankIndices[b])[dOffset];
  	      }
  	    return outInt;
! 		
! 	    // FIXME: Fill in the other possible types.
  	  default:
  	      throw new IllegalStateException("unknown transfer type " +
  					      getTransferType());
--- 288,318 ----
  		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());
*************** public class ComponentSampleModel extend
*** 349,355 ****
      if (scanlineStride == rowSize)
        {
  	// Collapse scan lines:
! 	scanlineStride = rowSize *= h;
  	h = 1;
        }
  
--- 400,406 ----
      if (scanlineStride == rowSize)
        {
  	// Collapse scan lines:
! 	rowSize *= h;
  	h = 1;
        }
  
*************** public class ComponentSampleModel extend
*** 433,438 ****
--- 484,499 ----
  	  
  	  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;
*************** public class ComponentSampleModel extend
*** 443,448 ****
--- 504,529 ----
  	  
  	  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");
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/ConvolveOp.java gcc-4.0.0/libjava/java/awt/image/ConvolveOp.java
*** gcc-3.4.3/libjava/java/awt/image/ConvolveOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/ConvolveOp.java	Tue Nov 30 23:58:50 2004
***************
*** 0 ****
--- 1,341 ----
+ /* Copyright (C) 2004 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ /*
+  * Created on Nov 1, 2004
+  *
+  * TODO To change the template for this generated file go to
+  * Window - Preferences - Java - Code Style - Code Templates
+  */
+ 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;
+   }
+   
+   /**
+    * @return The convolution kernel.
+    */
+   public Kernel getKernel()
+   {
+     return kernel;
+   }
+ 
+   /* (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.numBands != dest.numBands)
+       throw new ImagingOpException(null);
+     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);
+ 
+     // 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-3.4.3/libjava/java/awt/image/CropImageFilter.java gcc-4.0.0/libjava/java/awt/image/CropImageFilter.java
*** gcc-3.4.3/libjava/java/awt/image/CropImageFilter.java	Thu Jan 24 01:05:12 2002
--- gcc-4.0.0/libjava/java/awt/image/CropImageFilter.java	Tue Nov 30 23:58:50 2004
***************
*** 1,5 ****
  /* CropImageFilter.java -- Java class for cropping image filter
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CropImageFilter.java -- Java class for cropping image filter
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,47 ****
  
  package java.awt.image;
  
  import java.util.Hashtable;
  
  /**
-  * <br>
   * Currently this filter does almost nothing and needs to be implemented.
   *
   * @author C. Brian Jones (cbj@gnu.org) 
--- 38,47 ----
  
  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 Ima
*** 92,98 ****
       */
      public void setProperties(Hashtable props)
      {
! //  	props.put("filters", "ReplicateScaleFilter");
  	consumer.setProperties(props);
      }
  
--- 92,98 ----
       */
      public void setProperties(Hashtable props)
      {
!   	props.put("filters", "CropImageFilter");
  	consumer.setProperties(props);
      }
  
*************** public class CropImageFilter extends Ima
*** 113,119 ****
      public void setPixels(int x, int y, int w, int h, 
  	   ColorModel model, byte[] pixels, int offset, int scansize)
      {
! 	consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
      }
  
      /**
--- 113,139 ----
      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];
! 	    }
! 	    
! 	    consumer.setPixels(bounds.x, bounds.y,
! 	                       bounds.width, bounds.height,
! 	                       model, cropped, 0, bounds.width);
! 	}
      }
  
      /**
*************** public class CropImageFilter extends Ima
*** 133,139 ****
      public void setPixels(int x, int y, int w, int h, 
             ColorModel model, int[] pixels, int offset, int scansize)
      {
! 	consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
      }
  
  }
--- 153,179 ----
      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];
! 	    }
! 	    
! 	    consumer.setPixels(bounds.x, bounds.y,
! 	                       bounds.width, bounds.height,
! 	                       model, cropped, 0, bounds.width);
! 	}
      }
  
  }
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/DataBuffer.java gcc-4.0.0/libjava/java/awt/image/DataBuffer.java
*** gcc-3.4.3/libjava/java/awt/image/DataBuffer.java	Tue Jan 22 22:40:10 2002
--- gcc-4.0.0/libjava/java/awt/image/DataBuffer.java	Thu Feb 17 07:48:30 2005
*************** package java.awt.image;
*** 41,56 ****
   * 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
  {
    public static final int TYPE_BYTE      =  0;
    public static final int TYPE_USHORT    =  1;
    public static final int TYPE_SHORT     =  2;
    public static final int TYPE_INT       =  3;
    public static final int TYPE_FLOAT     =  4;
    public static final int TYPE_DOUBLE    =  5;
    public static final int TYPE_UNDEFINED = 32;
    
    /** The type of the data elements stored in the data buffer.  */
--- 41,89 ----
   * 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 representng a data type that uses <code>byte</code> primitives
+    * as the storage unit.
+    */
    public static final int TYPE_BYTE      =  0;
+ 
+   /**
+    * A constant representng a data type that uses <code>short</code> 
+    * primitives as the storage unit.
+    */
    public static final int TYPE_USHORT    =  1;
+ 
+   /**
+    * A constant representng a data type that uses <code>short</code> 
+    * primitives as the storage unit.
+    */
    public static final int TYPE_SHORT     =  2;
+ 
+   /**
+    * A constant representng a data type that uses <code>int</code> 
+    * primitives as the storage unit.
+    */
    public static final int TYPE_INT       =  3;
+   
+   /**
+    * A constant representng a data type that uses <code>float</code> 
+    * primitives as the storage unit.
+    */
    public static final int TYPE_FLOAT     =  4;
+ 
+   /**
+    * A constant representng a data type that uses <code>double</code> 
+    * primitives as the storage unit.
+    */
    public static final int TYPE_DOUBLE    =  5;
+ 
+   /**
+    * A constant representng an undefined data type.
+    */
    public static final int TYPE_UNDEFINED = 32;
    
    /** The type of the data elements stored in the data buffer.  */
*************** public abstract class DataBuffer
*** 68,85 ****
--- 101,157 ----
    /** 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);
      
*************** public abstract class DataBuffer
*** 88,93 ****
--- 160,183 ----
      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) 
*************** public abstract class DataBuffer
*** 99,104 ****
--- 189,205 ----
      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)
*************** public abstract class DataBuffer
*** 118,138 ****
--- 219,263 ----
        }
    }
  
+   /**
+    * 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)
*************** public abstract class DataBuffer
*** 144,203 ****
--- 269,434 ----
      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-3.4.3/libjava/java/awt/image/DataBufferByte.java gcc-4.0.0/libjava/java/awt/image/DataBufferByte.java
*** gcc-3.4.3/libjava/java/awt/image/DataBufferByte.java	Fri Jun 27 20:53:01 2003
--- gcc-4.0.0/libjava/java/awt/image/DataBufferByte.java	Thu Feb 17 07:48:30 2005
*************** package java.awt.image;
*** 47,65 ****
     code is a maintenance nightmare.  */
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   */
  public final class DataBufferByte extends DataBuffer
  {
    private byte[] data;
    private byte[][] bankData;
    
    public DataBufferByte(int size)
    {
!     super(TYPE_BYTE, size);
      data = new byte[size];
    }
  
    public DataBufferByte(int size, int numBanks)
    {
      super(TYPE_BYTE, size, numBanks);
--- 47,80 ----
     code is a maintenance nightmare.  */
  
  /**
!  * @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);
*************** public final class DataBufferByte extend
*** 67,84 ****
      data = bankData[0];
    }
  
    public DataBufferByte(byte[] dataArray, int size)
    {
!     super(TYPE_BYTE, size);
      data = dataArray;
    }
      
    public DataBufferByte(byte[] dataArray, int size, int offset)
    {
      super(TYPE_BYTE, size, 1, offset);
      data = dataArray;
    }
  
    public DataBufferByte(byte[][] dataArray, int size)
    {
      super(TYPE_BYTE, size, dataArray.length);
--- 82,134 ----
      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);
*************** public final class DataBufferByte extend
*** 86,91 ****
--- 136,152 ----
      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);
*************** public final class DataBufferByte extend
*** 93,129 ****
--- 154,240 ----
      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-3.4.3/libjava/java/awt/image/DataBufferDouble.java gcc-4.0.0/libjava/java/awt/image/DataBufferDouble.java
*** gcc-3.4.3/libjava/java/awt/image/DataBufferDouble.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/DataBufferDouble.java	Thu Feb 17 07:48:30 2005
***************
*** 0 ****
--- 1,285 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.  */
+ 
+ /**
+  * @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] = (double) 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]] = (double) 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-3.4.3/libjava/java/awt/image/DataBufferFloat.java gcc-4.0.0/libjava/java/awt/image/DataBufferFloat.java
*** gcc-3.4.3/libjava/java/awt/image/DataBufferFloat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/DataBufferFloat.java	Thu Feb 17 07:48:30 2005
***************
*** 0 ****
--- 1,283 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.  */
+ 
+ /**
+  * @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] = (float) 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]] = (float) 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-3.4.3/libjava/java/awt/image/DataBufferInt.java gcc-4.0.0/libjava/java/awt/image/DataBufferInt.java
*** gcc-3.4.3/libjava/java/awt/image/DataBufferInt.java	Fri Jun 27 20:53:01 2003
--- gcc-4.0.0/libjava/java/awt/image/DataBufferInt.java	Thu Feb 17 07:48:30 2005
*************** package java.awt.image;
*** 47,65 ****
     code is a maintenance nightmare.  */
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   */
  public final class DataBufferInt extends DataBuffer
  {
    private int[] data;
    private int[][] bankData;
    
    public DataBufferInt(int size)
    {
!     super(TYPE_INT, size);
      data = new int[size];
    }
  
    public DataBufferInt(int size, int numBanks)
    {
      super(TYPE_INT, size, numBanks);
--- 47,80 ----
     code is a maintenance nightmare.  */
  
  /**
!  * @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);
*************** public final class DataBufferInt extends
*** 67,84 ****
      data = bankData[0];
    }
    
    public DataBufferInt(int[] dataArray, int size)
    {
!     super(TYPE_INT, size);
      data = dataArray;
    }
      
    public DataBufferInt(int[] dataArray, int size, int offset)
    {
      super(TYPE_INT, size, 1, offset);
      data = dataArray;
    }
    
    public DataBufferInt(int[][] dataArray, int size)
    {
      super(TYPE_INT, size, dataArray.length);
--- 82,134 ----
      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);
*************** public final class DataBufferInt extends
*** 86,91 ****
--- 136,152 ----
      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);
*************** public final class DataBufferInt extends
*** 93,131 ****
      data = bankData[0];
    }
  
    public int[] getData()
    {
      return data;
    }
      
    public int[] getData(int bank)
    {
      return bankData[bank];
    }
    
    public int[][] getBankData()
    {
      return bankData;
    }
    
    public int getElem(int i)
    {
      return data[i+offset];
    }
  
    public int getElem(int bank, int i)
    {
      // get unsigned int as int
      return bankData[bank][i+offsets[bank]];
    }
  
    public void setElem(int i, int val)
    {
!     data[i+offset] = (int) val;
    }
    
    public void setElem(int bank, int i, int val)
    {
!     bankData[bank][i+offsets[bank]] = (int) val;
    }
  }
--- 154,241 ----
      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-3.4.3/libjava/java/awt/image/DataBufferShort.java gcc-4.0.0/libjava/java/awt/image/DataBufferShort.java
*** gcc-3.4.3/libjava/java/awt/image/DataBufferShort.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/DataBufferShort.java	Thu Feb 17 07:48:30 2005
***************
*** 0 ****
--- 1,242 ----
+ /* DataBufferShort.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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.  */
+ 
+ /**
+  * @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-3.4.3/libjava/java/awt/image/DataBufferUShort.java gcc-4.0.0/libjava/java/awt/image/DataBufferUShort.java
*** gcc-3.4.3/libjava/java/awt/image/DataBufferUShort.java	Fri Jun 27 20:53:01 2003
--- gcc-4.0.0/libjava/java/awt/image/DataBufferUShort.java	Thu Feb 17 07:48:30 2005
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* DataBufferUShort.java --
!    Copyright (C) 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** package java.awt.image;
*** 47,65 ****
     code is a maintenance nightmare.  */
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   */
  public final class DataBufferUShort extends DataBuffer
  {
    private short[] data;
    private short[][] bankData;
    
    public DataBufferUShort(int size)
    {
!     super(TYPE_USHORT, size);
      data = new short[size];
    }
  
    public DataBufferUShort(int size, int numBanks)
    {
      super(TYPE_USHORT, size, numBanks);
--- 48,81 ----
     code is a maintenance nightmare.  */
  
  /**
!  * @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);
*************** public final class DataBufferUShort exte
*** 67,84 ****
      data = bankData[0];
    }
  
    public DataBufferUShort(short[] dataArray, int size)
    {
!     super(TYPE_USHORT, size);
      data = dataArray;
    }
      
    public DataBufferUShort(short[] dataArray, int size, int offset)
    {
      super(TYPE_USHORT, size, 1, offset);
      data = dataArray;
    }
  
    public DataBufferUShort(short[][] dataArray, int size)
    {
      super(TYPE_USHORT, size, dataArray.length);
--- 83,135 ----
      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);
*************** public final class DataBufferUShort exte
*** 86,91 ****
--- 137,153 ----
      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);
*************** public final class DataBufferUShort exte
*** 93,129 ****
--- 155,241 ----
      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-3.4.3/libjava/java/awt/image/DirectColorModel.java gcc-4.0.0/libjava/java/awt/image/DirectColorModel.java
*** gcc-3.4.3/libjava/java/awt/image/DirectColorModel.java	Fri Jun 27 20:53:01 2003
--- gcc-4.0.0/libjava/java/awt/image/DirectColorModel.java	Tue Nov 30 23:58:50 2004
***************
*** 1,4 ****
! /* Copyright (C) 1999, 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* DirectColorModel.java --
!    Copyright (C) 1999, 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,49 ****
  
  package java.awt.image;
  
  import java.awt.Point;
  import java.awt.Transparency;
  import java.awt.color.ColorSpace;
- import gnu.java.awt.Buffers;
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   * @author C. Brian Jones (cbj@gnu.org)
   * @author Mark Benvenuto (mcb54@columbia.edu)
   */
--- 38,51 ----
  
  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 Pa
*** 56,66 ****
     * most likely order of alpha, red, green, blue from the most significant
     * byte to the least significant byte.
     * 
!    * @param bits 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)
    {
--- 58,67 ----
     * 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)
    {
*************** public class DirectColorModel extends Pa
*** 78,87 ****
     * most likely order of red, green, blue from the most significant
     * byte to the least significant byte.
     * 
!    * @param bits 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, int amask)
--- 79,89 ----
     * 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)
*************** public class DirectColorModel extends Pa
*** 162,168 ****
      return extractAndScaleSample(pixel, 3);
    }
  
!   private final int extractAndNormalizeSample(int pixel, int component)
    {
      int value = extractAndScaleSample(pixel, component);
      if (hasAlpha() && isAlphaPremultiplied())
--- 164,170 ----
      return extractAndScaleSample(pixel, 3);
    }
  
!   private int extractAndNormalizeSample(int pixel, int component)
    {
      int value = extractAndScaleSample(pixel, component);
      if (hasAlpha() && isAlphaPremultiplied())
*************** public class DirectColorModel extends Pa
*** 170,176 ****
      return value;
    }
  
!   private final int extractAndScaleSample(int pixel, int component)
    {
      int field = pixel & getMask(component);
      int to8BitShift =
--- 172,178 ----
      return value;
    }
  
!   private int extractAndScaleSample(int pixel, int component)
    {
      int field = pixel & getMask(component);
      int to8BitShift =
*************** public class DirectColorModel extends Pa
*** 303,309 ****
     * @param highBit the position of the most significant bit in the
     * val parameter.
     */
!   private final int valueToField(int val, int component, int highBit)
    {
      int toFieldShift = 
        getComponentSize(component) + shifts[component] - highBit;
--- 305,311 ----
     * @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;
*************** public class DirectColorModel extends Pa
*** 317,323 ****
     * Converts a 16 bit value to the correct field bits based on the
     * information derived from the field masks.
     */
!   private final int value16ToField(int val, int component)
    {
      int toFieldShift = getComponentSize(component) + shifts[component] - 16;
      return (toFieldShift>0) ?
--- 319,325 ----
     * 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) ?
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/ImagingOpException.java gcc-4.0.0/libjava/java/awt/image/ImagingOpException.java
*** gcc-3.4.3/libjava/java/awt/image/ImagingOpException.java	Thu Dec  4 19:31:01 2003
--- gcc-4.0.0/libjava/java/awt/image/ImagingOpException.java	Thu Feb 17 07:48:30 2005
***************
*** 1,5 ****
  /* ImagingOpException.java -- indicates an imaging filter failure
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ImagingOpException.java -- indicates an imaging filter failure
!    Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.image;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/IndexColorModel.java gcc-4.0.0/libjava/java/awt/image/IndexColorModel.java
*** gcc-3.4.3/libjava/java/awt/image/IndexColorModel.java	Mon Sep 29 11:28:58 2003
--- gcc-4.0.0/libjava/java/awt/image/IndexColorModel.java	Wed Feb 16 20:02:06 2005
*************** exception statement from your version. *
*** 38,44 ****
--- 38,66 ----
  
  package java.awt.image;
  
+ import java.awt.color.ColorSpace;
+ import java.math.BigInteger;
+ 
  /**
+  * Color model similar to pseudo visual in X11.
+  *
+  * 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.
+  *
+  * The IndexColorModel supports a map of valid pixels, allowing the
+  * representation of holes in the the color map.  The valid map is represented
+  * as a BigInteger where each bit indicates the validity of the map entry with
+  * the same index.
+  * 
+  * 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.
+  *
+  * IndexColorModel supports anywhere from 1 to 16 bit index values.  The
+  * allowed transfer types are DataBuffer.TYPE_BYTE and DataBuffer.TYPE_USHORT.
+  *
   * @author C. Brian Jones (cbj@gnu.org) 
   */
  public class IndexColorModel extends ColorModel
*************** public class IndexColorModel extends Col
*** 47,52 ****
--- 69,75 ----
    private boolean opaque;
    private int trans = -1;
    private int[] rgb;
+   private BigInteger validBits = BigInteger.ZERO;
  
    /**
     * Each array much contain <code>size</code> elements.  For each 
*************** public class IndexColorModel extends Col
*** 102,108 ****
    public IndexColorModel(int bits, int size, byte[] reds, byte[] greens,
                           byte[] blues, byte[] alphas)
    {
!     super (bits);
      map_size = size;
      opaque = (alphas == null);
  
--- 125,133 ----
    public IndexColorModel(int bits, int size, byte[] reds, byte[] greens,
                           byte[] blues, byte[] alphas)
    {
!     // FIXME: This super() constructor should not be used since it can give
!     // the wrong value for hasAlpha() which is final and cannot be overloaded
!     super(bits); 
      map_size = size;
      opaque = (alphas == null);
  
*************** public class IndexColorModel extends Col
*** 127,132 ****
--- 152,160 ----
                        | (blues[i] & 0xff));
            }
        }
+ 
+     // Generate a bigint with 1's for every pixel
+     validBits = validBits.setBit(size).subtract(BigInteger.ONE);
    }
  
    /**
*************** public class IndexColorModel extends Col
*** 140,145 ****
--- 168,174 ----
     * @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 < 1, bits > 16, or size < 1.
     */
    public IndexColorModel (int bits, int size, byte[] cmap, int start, 
                            boolean hasAlpha)
*************** public class IndexColorModel extends Col
*** 148,172 ****
    }
  
    /**
!    * Each array much contain <code>size</code> elements.  For each 
!    * array, the i-th color is described by reds[i], greens[i], 
!    * blues[i], alphas[i], unless alphas is not specified, 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
     */
    public IndexColorModel (int bits, int size, byte[] cmap, int start, 
                            boolean hasAlpha, int trans)
    {
      super (bits);
      map_size = size;
      opaque = !hasAlpha;
      this.trans = trans;
    }
  
    public final int getMapSize ()
--- 177,331 ----
    }
  
    /**
!    * 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 < 1, bits > 16, or size < 1.
     */
    public IndexColorModel (int bits, int size, byte[] cmap, int start, 
                            boolean hasAlpha, int trans)
    {
      super (bits);
+     if (bits > 16)
+       throw new IllegalArgumentException("bits > 16");
+     if (size < 1)
+       throw new IllegalArgumentException("size < 1");
+     map_size = size;
+     opaque = !hasAlpha;
+     this.trans = trans;
+ 
+     rgb = new int[size];
+     if (hasAlpha)
+     {
+       for (int i = 0; i < size; i++)
+         rgb[i] =
+ 	  // alpha
+ 	  ((cmap[4 * i + 3 + start] & 0xff) << 24
+ 	   // red
+ 	   | ((cmap[4 * i + start] & 0xff) << 16)
+ 	   // green
+ 	   | ((cmap[4 * i + 1 + start] & 0xff) << 8)
+ 	   // blue
+ 	   | (cmap[4 * i + 2 + start] & 0xff));
+     }
+     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));
+     }
+ 
+     // 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 DataBuffer.TYPE_BYTE or DataBuffer.TYPE_USHORT
+    * @throws IllegalArgumentException if bits < 1, bits > 16, or size < 1.
+    * @throws IllegalArgumentException if transferType is something other than
+    * TYPE_BYTE or TYPE_USHORT.
+    */
+   public IndexColorModel (int bits, int size, int[] cmap, int start, 
+                           boolean hasAlpha, int trans, int transferType)
+   {
+     super(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, 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;
      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.
+    * 
+    * 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.
+    * 
+    * 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 DataBuffer.TYPE_BYTE or DataBuffer.TYPE_USHORT
+    * @throws IllegalArgumentException if bits < 1, bits > 16, or size < 1.
+    * @throws IllegalArgumentException if transferType is something other than
+    * TYPE_BYTE or TYPE_USHORT.
+    */
+   public IndexColorModel (int bits, int size, int[] cmap, int start, 
+                           int transferType, BigInteger validBits)
+   {
+     super(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, 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);
    }
  
    public final int getMapSize ()
*************** public class IndexColorModel extends Col
*** 259,268 ****
     */
    public final int getAlpha (int pixel)
    {
!     if (pixel < map_size)
! 	    return (int) ((generateMask (3) & rgb[pixel]) >> (3 * pixel_bits));
!     
!     return 0;
    }
  
    /**
--- 418,427 ----
     */
    public final int getAlpha (int pixel)
    {
!     if (opaque || pixel >= map_size)
!       return 255;
! 
!     return (int) ((generateMask (3) & rgb[pixel]) >> (3 * pixel_bits));
    }
  
    /**
*************** public class IndexColorModel extends Col
*** 279,289 ****
      return 0;
    }
      
!   //pixel_bits is number of bits to be in generated mask
    private int generateMask (int offset)
    {
      return (((2 << pixel_bits ) - 1) << (pixel_bits * offset));
    }
  
  }
  
--- 438,516 ----
      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);
!   }
!     
!    //pixel_bits is number of bits to be in generated mask
    private int generateMask (int offset)
    {
      return (((2 << pixel_bits ) - 1) << (pixel_bits * offset));
    }
  
+   /** Return true if pixel is valid, false otherwise. */
+   public boolean isValid(int pixel)
+   {
+     return validBits.testBit(pixel);
+   }
+   
+   /** Return true if all pixels are valid, false otherwise. */
+   public boolean isValid()
+   {
+     // Generate a bigint with 1's for every pixel
+     BigInteger allbits = new BigInteger("0");
+     allbits.setBit(map_size);
+     allbits.subtract(new BigInteger("1"));
+     return allbits.equals(validBits);
+   }
+   
+   /** 
+    * Returns a BigInteger where each bit represents an entry in the color
+    * model.  If the bit is on, the entry is valid.
+    */
+   public BigInteger getValidPixels()
+   {
+     return validBits;
+   }
+   
+   /**
+    * Construct a BufferedImage with rgb pixel values from a 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-3.4.3/libjava/java/awt/image/Kernel.java gcc-4.0.0/libjava/java/awt/image/Kernel.java
*** gcc-3.4.3/libjava/java/awt/image/Kernel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/Kernel.java	Thu Feb 17 07:48:30 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/LookupOp.java gcc-4.0.0/libjava/java/awt/image/LookupOp.java
*** gcc-3.4.3/libjava/java/awt/image/LookupOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/LookupOp.java	Tue Nov 30 23:58:50 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/LookupTable.java gcc-4.0.0/libjava/java/awt/image/LookupTable.java
*** gcc-3.4.3/libjava/java/awt/image/LookupTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/LookupTable.java	Thu Feb 17 07:48:30 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/MemoryImageSource.java gcc-4.0.0/libjava/java/awt/image/MemoryImageSource.java
*** gcc-3.4.3/libjava/java/awt/image/MemoryImageSource.java	Mon Jul 14 05:33:30 2003
--- gcc-4.0.0/libjava/java/awt/image/MemoryImageSource.java	Wed Feb 16 20:02:07 2005
***************
*** 1,5 ****
! /* MemoryImageSource.java -- Java class for providing image data 
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* MemoryImageSource.java -- Java class for providing image data
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,334 ****
  
  package java.awt.image;
  
- import java.awt.Image;
- import java.util.Enumeration;
  import java.util.Hashtable;
  
! public class MemoryImageSource implements ImageProducer 
  {
!     private boolean animated = false;
!     private boolean fullbuffers = false;
!     private int pixeli[], width, height, offset, scansize;
!     private byte pixelb[];
!     private ColorModel cm;
!     private Hashtable props, consumers = new Hashtable();
! 
!     /**
!        Constructs an ImageProducer from memory
!     */
!     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 = new byte[ max  * height ];
! 	System.arraycopy( pix, 0, pixelb, 0, max * height );
!     }
!     /**
!        Constructs an ImageProducer from memory
!     */
!     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 = new int[ max  * height ];
! 	System.arraycopy( pix, 0, pixeli, 0, max * height );
!     }
!     /**
!        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.containsKey(ic))
! 	    return;
! 
! 	consumers.put(ic, 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.containsKey(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.remove(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.containsKey(ic))) {
! 	    consumers.put(ic, ic);
! 	}        
! 	Enumeration e = consumers.elements();
! 	for( ; e.hasMoreElements(); ) {
! 		ic = (ImageConsumer)e.nextElement();
! 		sendPicture( ic );
! 		ic.imageComplete( ImageConsumer.SINGLEFRAME );
! 	    }	
  
!     }
  
!     /**
!      * 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;
! 		Enumeration e = consumers.elements();
! 		for( ; e.hasMoreElements(); ) {
! 			ic = (ImageConsumer)e.nextElement();
! 			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);
! 	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;
! 		    Enumeration e = consumers.elements();
! 		    for( ; e.hasMoreElements(); ) {
! 			    ic = (ImageConsumer)e.nextElement();
! 			    ic.setHints( ImageConsumer.TOPDOWNLEFTRIGHT );
! 			    if( props != null ) {
! 				ic.setProperties( props );
! 			    }
! 			    if( pixeli != null ) {
! 				ic.setPixels( 0, 0, width, height, cm, pixeli, offset, scansize );
! 			    } else {
! 				ic.setPixels( 0, 0, width, height, cm, pixelb, offset, scansize );
! 			    }
! 			    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;
! 		    Enumeration e = consumers.elements();
! 		    for( ; e.hasMoreElements(); ) {
! 			    ic = (ImageConsumer)e.nextElement();
! 			    ic.setHints( ImageConsumer.TOPDOWNLEFTRIGHT );
! 			    if( props != null ) {
! 				ic.setProperties( props );
! 			    }
! 			    if( pixeli != null ) {
! 				ic.setPixels( 0, 0, width, height, cm, pixeli, offset, scansize );
! 			    } else {
! 				ic.setPixels( 0, 0, width, height, cm, pixelb, offset, scansize );
! 			    }
! 			    if( framenotify == true )
! 				ic.imageComplete( ImageConsumer.SINGLEFRAME );
! 		    }
! 		}     
! 	    }
!     }
  
!     public synchronized void newPixels(byte newpix[],
! 				       ColorModel newmodel,
! 				       int offset,
! 				       int scansize)
  
!     {
! 	if( animated == true )
! 	    {
! 		//FIXME
! 	    }
!     }
  
!     public synchronized void newPixels(int newpix[],
! 				       ColorModel newmodel,
! 				       int offset,
! 				       int scansize)
  
!     {
! 	if( animated == true )
! 	    {
! 		//FIXME
! 	    }
!     }
  
  }
--- 38,373 ----
  
  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.SINGLEFRAME);
! 	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-3.4.3/libjava/java/awt/image/MultiPixelPackedSampleModel.java gcc-4.0.0/libjava/java/awt/image/MultiPixelPackedSampleModel.java
*** gcc-3.4.3/libjava/java/awt/image/MultiPixelPackedSampleModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/MultiPixelPackedSampleModel.java	Thu Feb 17 07:48:30 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/PackedColorModel.java gcc-4.0.0/libjava/java/awt/image/PackedColorModel.java
*** gcc-3.4.3/libjava/java/awt/image/PackedColorModel.java	Tue Jan 22 22:40:10 2002
--- gcc-4.0.0/libjava/java/awt/image/PackedColorModel.java	Thu Feb 17 07:48:31 2005
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,4 ----
! /* Copyright (C) 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 34,47 ****
  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.color.ColorSpace;
- import gnu.java.awt.BitMaskExtent;
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   */
  public abstract class PackedColorModel extends ColorModel
  {
--- 34,49 ----
  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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/PixelGrabber.java gcc-4.0.0/libjava/java/awt/image/PixelGrabber.java
*** gcc-3.4.3/libjava/java/awt/image/PixelGrabber.java	Mon Dec  1 15:28:22 2003
--- gcc-4.0.0/libjava/java/awt/image/PixelGrabber.java	Tue Nov 30 23:58:50 2004
***************
*** 1,39 ****
  /* PixelGrabber.java -- retrieve a subset of an image's data
!    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., 59 Temple Place, Suite 330, Boston, MA
!    02111-1307 USA.
  
!    Linking this library statically or dynamically with other modules is
!    making a combined work based on this library.  Thus, the terms and
!    conditions of the GNU General Public License cover the whole
!    combination.
  
!    As a special exception, the copyright holders of this library give you
!    permission to link this library with independent modules to produce an
!    executable, regardless of the license terms of these independent
!    modules, and to copy and distribute the resulting executable under
!    terms of your choice, provided that you also meet, for each linked
!    independent module, the terms and conditions of the license of that
!    module.  An independent module is a module which is not derived from
!    or based on this library.  If you modify this library, you may extend
!    this exception to your version of the library, but you 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;
--- 1,39 ----
  /* 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., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
  
! Linking this library statically or dynamically with other modules is
! making a combined work based on this library.  Thus, the terms and
! conditions of the GNU General Public License cover the whole
! combination.
  
! As a special exception, the copyright holders of this library give you
! permission to link this library with independent modules to produce an
! executable, regardless of the license terms of these independent
! modules, and to copy and distribute the resulting executable under
! terms of your choice, provided that you also meet, for each linked
! independent module, the terms and conditions of the license of that
! module.  An independent module is a module which is not derived from
! or based on this library.  If you modify this library, you may extend
! this exception to your version of the library, but you 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;
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/PixelInterleavedSampleModel.java gcc-4.0.0/libjava/java/awt/image/PixelInterleavedSampleModel.java
*** gcc-3.4.3/libjava/java/awt/image/PixelInterleavedSampleModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/PixelInterleavedSampleModel.java	Thu Feb 17 07:48:31 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/RGBImageFilter.java gcc-4.0.0/libjava/java/awt/image/RGBImageFilter.java
*** gcc-3.4.3/libjava/java/awt/image/RGBImageFilter.java	Sat Oct 11 17:19:46 2003
--- gcc-4.0.0/libjava/java/awt/image/RGBImageFilter.java	Thu Feb 17 07:48:31 2005
***************
*** 1,5 ****
  /* RGBImageFilter.java -- Java class for filtering Pixels by RGB values
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.awt.image;
*** 42,52 ****
   * 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 = ColorModel.getRGBdefault();
  
      protected ColorModel newmodel;
      
--- 42,52 ----
   * 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;
      
*************** public abstract class RGBImageFilter ext
*** 79,85 ****
--- 79,89 ----
  
  	if( ( model instanceof IndexColorModel) && canFilterIndexColorModel  ) {
  		newmodel = filterIndexColorModel( (IndexColorModel) model );
+ 		consumer.setColorModel(newmodel);
  	    }
+ 	else {
+ 		consumer.setColorModel(ColorModel.getRGBdefault());
+ 	}
      }
      
      /**
*************** public abstract class RGBImageFilter ext
*** 126,132 ****
  
      private int makeColor( byte a, byte r, byte g, byte b )
      {
! 	return ( 0xff000000 & (a << 24) | 0xff0000 & (r << 16) | 0xff00 & (b << 8) | 0xff & g ); 
      }
  
      /**
--- 130,136 ----
  
      private int makeColor( byte a, byte r, byte g, byte b )
      {
! 	return ( 0xff000000 & (a << 24) | 0xff0000 & (r << 16) | 0xff00 & (g << 8) | 0xff & b ); 
      }
  
      /**
*************** public abstract class RGBImageFilter ext
*** 136,159 ****
         @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 filterRGBPixels(int x,
! 				int y,
! 				int w,
! 				int h,
! 				int[] pixels,
! 				int off,
! 				int scansize)
      {
! 	int xp, yp;
! 
! 	for( xp = x; xp < ( x + w); xp++ )
! 	    for( yp = y; yp < (y + h); yp++ )
! 		 pixels[ off + yp * scansize + xp ] = filterRGB( xp, yp, pixels[ off + yp * scansize + xp ] );
      }
  
  
--- 140,158 ----
         @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 xp = x; xp < (x + w); xp++)
! 	for (int yp = y; yp < (y + h); yp++)
! 	  {
! 	    pixels[offset] = filterRGB(xp, yp, pixels[offset]);
! 	    offset++;
! 	  }
      }
  
  
*************** public abstract class RGBImageFilter ext
*** 172,186 ****
       * @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 ) {
  	    consumer.setPixels(x, y, w, h, newmodel, pixels, offset, scansize);
! 	} else {
! 	    //FIXME
! 	    //convert to proper CM
! 	    int pixelsi[] = new int[ pixels.length / 4 ];
! 	    filterRGBPixels( x, y, w, h, pixelsi, offset, scansize );
  	}
      }
  
--- 171,189 ----
       * @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)
! 	{
  	    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 );
! 	    consumer.setPixels(x, y, w, h, ColorModel.getRGBdefault(), intPixels, offset, scansize);
  	}
      }
  
*************** public abstract class RGBImageFilter ext
*** 199,233 ****
       * @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 ) {
  	    consumer.setPixels(x, y, w, h, newmodel, pixels, offset, scansize);
! 	} else {
  	    convertColorModelToDefault( x, y, w, h, model, pixels, offset, scansize );
  	    filterRGBPixels( x, y, w, h, pixels, offset, scansize );
  	}
      }
  
!     private void convertColorModelToDefault( int x, int y, int w, int h, 
! 	    ColorModel model, int pixels[], int offset, int scansize)
! 	{
! 	int xp, yp;
  
! 	for( xp = x; xp < ( x + w); xp++ )
! 	    for( yp = y; yp < (y + h); yp++ )
! 		 pixels[ offset + yp * scansize + xp ] =  makeColorbyDefaultCM( pixels[ offset + yp * scansize + xp ] );
! 	    
! 	}
!     private int makeColorbyDefaultCM( int rgb ) 
! 	{
! 	    return makeColor( origmodel.getRed( rgb ), origmodel.getGreen( rgb ), origmodel.getGreen( rgb ), origmodel.getBlue( rgb ) );
! 	}
  
  
      private int makeColor( int a, int r, int g, int b )
      {
! 	return (int)( 0xff000000 & (a << 24) | 0xff0000 & (r << 16) | 0xff00 & (b << 8) | 0xff & g ); 
      }
  
  
--- 202,254 ----
       * @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)
! 	{
  	    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 );
+ 	    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 ); 
      }
  
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/Raster.java gcc-4.0.0/libjava/java/awt/image/Raster.java
*** gcc-3.4.3/libjava/java/awt/image/Raster.java	Thu Sep 25 18:35:44 2003
--- gcc-4.0.0/libjava/java/awt/image/Raster.java	Thu Feb 17 07:48:31 2005
*************** import java.awt.Point;
*** 41,47 ****
  import java.awt.Rectangle;
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   */
  public class Raster
  {
--- 41,47 ----
  import java.awt.Rectangle;
  
  /**
!  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
   */
  public class Raster
  {
*************** public class Raster
*** 128,135 ****
  						  int w, int h, int bands,
  						  Point location)
    {
!     // FIXME: Implement;
!     throw new UnsupportedOperationException("not implemented yet");
    }
  
    public static WritableRaster createBandedRaster(int dataType,
--- 128,135 ----
  						  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,
*************** public class Raster
*** 139,146 ****
  						  int[] bandOffsets,
  						  Point location)
    {
!     // FIXME: Implement;
!     throw new UnsupportedOperationException("not implemented yet");
    }
    
    public static WritableRaster createPackedRaster(int dataType,
--- 139,147 ----
  						  int[] bandOffsets,
  						  Point location)
    {
!     SampleModel sm = new BandedSampleModel(dataType, w, h, scanlineStride,
! 					   bankIndices, bandOffsets);
!     return createWritableRaster(sm, location);
    }
    
    public static WritableRaster createPackedRaster(int dataType,
*************** public class Raster
*** 154,159 ****
--- 155,189 ----
      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,
*************** public class Raster
*** 175,182 ****
  				    int[] bandOffsets,
  				    Point location)
    {
!     // FIXME: Implement;
!     throw new UnsupportedOperationException("not implemented yet");
    }
    
    public static WritableRaster
--- 205,214 ----
  				    int[] bandOffsets,
  				    Point location)
    {
!     SampleModel sm = new BandedSampleModel(dataBuffer.getDataType(),
! 					   w, h, scanlineStride,
! 					   bankIndices, bandOffsets);
!     return createWritableRaster(sm, dataBuffer, location);
    }
    
    public static WritableRaster
*************** public class Raster
*** 184,190 ****
  		     int w, int h,
  		     int scanlineStride,
  		     int[] bandMasks,
! 		     Point location) {
      SampleModel sm =
        new SinglePixelPackedSampleModel(dataBuffer.getDataType(),
  				       w, h,
--- 216,223 ----
  		     int w, int h,
  		     int scanlineStride,
  		     int[] bandMasks,
! 		     Point location)
!  {
      SampleModel sm =
        new SinglePixelPackedSampleModel(dataBuffer.getDataType(),
  				       w, h,
*************** public class Raster
*** 192,197 ****
--- 225,243 ----
  				       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)
*************** public class Raster
*** 329,334 ****
--- 375,385 ----
      return height;
    }
  
+   public final int getNumBands()
+   {
+     return numBands;
+   }
+     
    public final int getNumDataElements()
    {
      return numDataElements;
*************** public class Raster
*** 452,455 ****
--- 503,546 ----
  				  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-3.4.3/libjava/java/awt/image/RasterFormatException.java gcc-4.0.0/libjava/java/awt/image/RasterFormatException.java
*** gcc-3.4.3/libjava/java/awt/image/RasterFormatException.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/image/RasterFormatException.java	Thu Feb 17 07:48:31 2005
***************
*** 1,5 ****
  /* RasterFormatException.java -- indicates invalid layout in Raster
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* RasterFormatException.java -- indicates invalid layout in Raster
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.image;
*** 42,48 ****
   * 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
   */
--- 42,48 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/RasterOp.java gcc-4.0.0/libjava/java/awt/image/RasterOp.java
*** gcc-3.4.3/libjava/java/awt/image/RasterOp.java	Sat Oct 11 17:19:46 2003
--- gcc-4.0.0/libjava/java/awt/image/RasterOp.java	Tue Nov 30 23:58:50 2004
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,4 ----
! /* Copyright (C) 2000, 2002, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 34,44 ****
  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.geom.Point2D;
  import java.awt.geom.Rectangle2D;
- import java.awt.RenderingHints;
  
  public interface RasterOp {
  
--- 34,45 ----
  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 {
  
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/ReplicateScaleFilter.java gcc-4.0.0/libjava/java/awt/image/ReplicateScaleFilter.java
*** gcc-3.4.3/libjava/java/awt/image/ReplicateScaleFilter.java	Thu Jan 24 01:05:12 2002
--- gcc-4.0.0/libjava/java/awt/image/ReplicateScaleFilter.java	Wed Feb 16 20:02:07 2005
*************** public class ReplicateScaleFilter extend
*** 104,110 ****
       */
      public void setDimensions(int width, int height)
      {
! 	consumer.setDimensions(width, height);
      }
  
      /**
--- 104,130 ----
       */
      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));
! 	}
! 
! 	consumer.setDimensions(destWidth, destHeight);
      }
  
      /**
*************** public class ReplicateScaleFilter extend
*** 136,142 ****
      public void setPixels(int x, int y, int w, int h, 
  	   ColorModel model, byte[] pixels, int offset, int scansize)
      {
! 	consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
      }
  
      /**
--- 156,173 ----
      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);
! 
! 	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);
      }
  
      /**
*************** public class ReplicateScaleFilter extend
*** 156,163 ****
      public void setPixels(int x, int y, int w, int h, 
             ColorModel model, int[] pixels, int offset, int scansize)
      {
! 	consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
      }
  
  }
  
--- 187,244 ----
      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);
! 
! 	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-3.4.3/libjava/java/awt/image/RescaleOp.java gcc-4.0.0/libjava/java/awt/image/RescaleOp.java
*** gcc-3.4.3/libjava/java/awt/image/RescaleOp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/RescaleOp.java	Tue Nov 30 23:58:50 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/SampleModel.java gcc-4.0.0/libjava/java/awt/image/SampleModel.java
*** gcc-3.4.3/libjava/java/awt/image/SampleModel.java	Tue Jan 22 22:40:10 2002
--- gcc-4.0.0/libjava/java/awt/image/SampleModel.java	Thu Feb 17 07:48:31 2005
*************** exception statement from your version. *
*** 37,43 ****
  package java.awt.image;
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   */
  public abstract class SampleModel
  {
--- 37,43 ----
  package java.awt.image;
  
  /**
!  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
   */
  public abstract class SampleModel
  {
*************** public abstract class SampleModel
*** 58,64 ****
  
    public SampleModel(int dataType, int w, int h, int numBands)
    {
!     if ((w<=0) || (h<=0)) throw new IllegalArgumentException();
  	
      // FIXME: How can an int be greater than Integer.MAX_VALUE?
      // FIXME: How do we identify an unsupported data type?
--- 58,66 ----
  
    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?
*************** public abstract class SampleModel
*** 68,74 ****
      this.height = h;
      this.numBands = numBands;  
    }
! 
    public final int getWidth()
    {
      return width;
--- 70,76 ----
      this.height = h;
      this.numBands = numBands;  
    }
!   
    public final int getWidth()
    {
      return width;
*************** public abstract class SampleModel
*** 454,459 ****
--- 456,472 ----
  
      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();
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/ShortLookupTable.java gcc-4.0.0/libjava/java/awt/image/ShortLookupTable.java
*** gcc-3.4.3/libjava/java/awt/image/ShortLookupTable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/awt/image/ShortLookupTable.java	Thu Feb 17 07:48:31 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you 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-3.4.3/libjava/java/awt/image/SinglePixelPackedSampleModel.java gcc-4.0.0/libjava/java/awt/image/SinglePixelPackedSampleModel.java
*** gcc-3.4.3/libjava/java/awt/image/SinglePixelPackedSampleModel.java	Fri Jan  9 08:58:57 2004
--- gcc-4.0.0/libjava/java/awt/image/SinglePixelPackedSampleModel.java	Thu Feb 17 07:48:31 2005
***************
*** 1,4 ****
! /* Copyright (C) 2000, 2002, 2003  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,4 ----
! /* Copyright (C) 2000, 2002, 2003, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** import gnu.java.awt.BitMaskExtent;
*** 40,46 ****
  import gnu.java.awt.Buffers;
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   */
  public class SinglePixelPackedSampleModel extends SampleModel
  {
--- 40,46 ----
  import gnu.java.awt.Buffers;
  
  /**
!  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
   */
  public class SinglePixelPackedSampleModel extends SampleModel
  {
*************** public class SinglePixelPackedSampleMode
*** 59,64 ****
--- 59,74 ----
  				      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;
*************** public class SinglePixelPackedSampleMode
*** 162,167 ****
--- 172,234 ----
  			   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)
    {
*************** public class SinglePixelPackedSampleMode
*** 201,207 ****
      int samples = data.getElem(offset);
      return (samples & bitMasks[b]) >>> bitOffsets[b];
    }
! 
    public void setDataElements(int x, int y, Object obj, DataBuffer data)
    {
      int offset = scanlineStride*y + x + data.getOffset();
--- 268,318 ----
      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();
*************** public class SinglePixelPackedSampleMode
*** 273,278 ****
--- 384,422 ----
      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;
*************** public class SinglePixelPackedSampleMode
*** 282,285 ****
--- 426,449 ----
      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-3.4.3/libjava/java/awt/image/WritableRaster.java gcc-4.0.0/libjava/java/awt/image/WritableRaster.java
*** gcc-3.4.3/libjava/java/awt/image/WritableRaster.java	Thu Sep 25 18:35:44 2003
--- gcc-4.0.0/libjava/java/awt/image/WritableRaster.java	Thu Feb 17 07:48:31 2005
*************** import java.awt.Point;
*** 41,47 ****
  import java.awt.Rectangle;
  
  /**
!  * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
   */
  public class WritableRaster extends Raster
  {
--- 41,47 ----
  import java.awt.Rectangle;
  
  /**
!  * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
   */
  public class WritableRaster extends Raster
  {
diff -Nrcpad gcc-3.4.3/libjava/java/awt/image/renderable/RenderContext.java gcc-4.0.0/libjava/java/awt/image/renderable/RenderContext.java
*** gcc-3.4.3/libjava/java/awt/image/renderable/RenderContext.java	Fri Aug  9 04:29:59 2002
--- gcc-4.0.0/libjava/java/awt/image/renderable/RenderContext.java	Tue Feb  3 17:10:56 2004
*************** public class RenderContext implements Cl
*** 87,110 ****
  
    public void preConcatenateTransform(AffineTransform pre)
    {
!     xform.preConcatenate(pre);
    }
  
!   /** @deprecated Sun can't spell concatenate */
    public void preConcetenateTransform(AffineTransform pre)
    {
!     preConcetenateTransform(pre);
    }
  
    public void concatenateTransform(AffineTransform post)
    {
!     xform.concatenate(post);
    }
  
!   /** @deprecated Sun can't spell concatenate */
    public void concetenateTransform(AffineTransform post)
    {
!     concatenateTransform(post);
    }
  
    public AffineTransform getTransform()
--- 87,110 ----
  
    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()
diff -Nrcpad gcc-3.4.3/libjava/java/awt/peer/MenuBarPeer.java gcc-4.0.0/libjava/java/awt/peer/MenuBarPeer.java
*** gcc-3.4.3/libjava/java/awt/peer/MenuBarPeer.java	Sat Oct 11 18:11:03 2003
--- gcc-4.0.0/libjava/java/awt/peer/MenuBarPeer.java	Thu Sep  2 05:10:17 2004
*************** import java.awt.Menu;
*** 43,49 ****
  public interface MenuBarPeer extends MenuComponentPeer
  {
    void addHelpMenu(Menu menu);
-   void addMenu(Menu menu);
    void delMenu(int index);
  } // interface MenuBarPeer 
  
--- 43,48 ----
diff -Nrcpad gcc-3.4.3/libjava/java/awt/peer/MenuPeer.java gcc-4.0.0/libjava/java/awt/peer/MenuPeer.java
*** gcc-3.4.3/libjava/java/awt/peer/MenuPeer.java	Sat Oct 11 18:11:03 2003
--- gcc-4.0.0/libjava/java/awt/peer/MenuPeer.java	Fri Apr 16 18:44:43 2004
*************** import java.awt.MenuItem;
*** 43,49 ****
  public interface MenuPeer extends MenuItemPeer
  {
    void addItem (MenuItem item);
-   void addSeparator ();
    void delItem (int index);
  }
  
--- 43,48 ----
diff -Nrcpad gcc-3.4.3/libjava/java/awt/peer/RobotPeer.java gcc-4.0.0/libjava/java/awt/peer/RobotPeer.java
*** gcc-3.4.3/libjava/java/awt/peer/RobotPeer.java	Sat Oct 11 18:11:03 2003
--- gcc-4.0.0/libjava/java/awt/peer/RobotPeer.java	Wed Feb 16 20:02:10 2005
*************** import java.awt.Rectangle;
*** 43,54 ****
  public interface RobotPeer
  {
    void mouseMove (int x, int y);
!   void mousePress (int x);
!   void mouseRelease (int x);
!   void mouseWheel (int x);
!   void keyPress (int x);
!   void keyRelease (int x);
    int getRGBPixel (int x, int y);
!   int[] getRGBPixels (Rectangle r);
  } // interface RobotPeer
  
--- 43,54 ----
  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-3.4.3/libjava/java/awt/print/Book.java gcc-4.0.0/libjava/java/awt/print/Book.java
*** gcc-3.4.3/libjava/java/awt/print/Book.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/print/Book.java	Wed Feb 16 20:02:13 2005
***************
*** 1,5 ****
  /* Book.java -- A mixed group of pages to print.
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Book.java -- A mixed group of pages to print.
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.print;
*** 41,188 ****
  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
! {
! 
! /*
!  * Instance Variables
!  */
! 
! // Painter objects for the book
! Vector printables = new Vector();
! 
! // Page formats for the book
! Vector page_formats = new Vector();
! 
! /*************************************************************************/
! 
! /*
!  * Constructors
   */
! 
! /** 
!   * 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_numbers 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_numbers 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 painter, PageFormat page_format, int num_pages)
! {
!   for (int i = 0; i < num_pages; i++)
!     {
!       printables.addElement(painter);
!       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.
!   *
!   * @param 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);
  }
- 
- } // class Book
- 
--- 41,159 ----
  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-3.4.3/libjava/java/awt/print/Printable.java gcc-4.0.0/libjava/java/awt/print/Printable.java
*** gcc-3.4.3/libjava/java/awt/print/Printable.java	Sat Oct 11 18:16:31 2003
--- gcc-4.0.0/libjava/java/awt/print/Printable.java	Tue Nov 30 23:58:50 2004
***************
*** 1,5 ****
  /* Printable.java -- Renders a page to the print device
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Printable.java -- Renders a page to the print device
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,90 ****
  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
  {
  
! /*
!  * Static Variables
!  */
! 
! /**
!   * This value is returned by the <code>print()</code> method to indicate
!   * that the requested page number does not exist.
!   */
! int NO_SUCH_PAGE = 0;
! 
! /**
!   * This value is returned by the <code>print()</code> method to indicate
!   * that the requested page exists and has been printed.
!   */
! int PAGE_EXISTS = 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;
! 
! } // interface Printable
  
--- 35,80 ----
  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-3.4.3/libjava/java/awt/print/PrinterAbortException.java gcc-4.0.0/libjava/java/awt/print/PrinterAbortException.java
*** gcc-3.4.3/libjava/java/awt/print/PrinterAbortException.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/print/PrinterAbortException.java	Thu Feb 17 07:48:31 2005
***************
*** 1,5 ****
  /* PrinterAbortException.java -- Indicates the print job was aborted
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PrinterAbortException.java -- Indicates the print job was aborted
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.print;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/print/PrinterException.java gcc-4.0.0/libjava/java/awt/print/PrinterException.java
*** gcc-3.4.3/libjava/java/awt/print/PrinterException.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/print/PrinterException.java	Thu Feb 17 07:48:31 2005
***************
*** 1,5 ****
  /* PrinterException.java -- generic problem in the printing subsystem
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PrinterException.java -- generic problem in the printing subsystem
!    Copyright (C) 1999, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.awt.print;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/print/PrinterIOException.java gcc-4.0.0/libjava/java/awt/print/PrinterIOException.java
*** gcc-3.4.3/libjava/java/awt/print/PrinterIOException.java	Fri Aug  9 04:26:16 2002
--- gcc-4.0.0/libjava/java/awt/print/PrinterIOException.java	Thu Feb 17 07:48:31 2005
***************
*** 1,5 ****
  /* PrinterIOException.java -- The print job encountered an I/O error
!    Copyright (C) 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.IOException;
*** 44,51 ****
   * 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
--- 44,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/awt/print/PrinterJob.java gcc-4.0.0/libjava/java/awt/print/PrinterJob.java
*** gcc-3.4.3/libjava/java/awt/print/PrinterJob.java	Thu Jun  5 19:58:40 2003
--- gcc-4.0.0/libjava/java/awt/print/PrinterJob.java	Wed Feb 16 20:02:13 2005
***************
*** 1,5 ****
  /* PrinterJob.java -- This job is the printer control class
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,256 ****
  
  package java.awt.print;
  
! /**
!   * This class controls printing.
!   *
!   * @author Aaron M. Renn (arenn@urbanophile.com)
!   */
! public abstract class PrinterJob
! {
  
! /*
!  * Class Methods
!  */
  
  /**
!   * 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);
! }
! 
! /*************************************************************************/
! 
! /*
!  * Constructors
   */
! 
! /**
!   * Initializes a new instance of <code>PrinterJob</code>. 
!   */
! public
! PrinterJob()
  {
!   ;
! }
! 
! /*************************************************************************/
! 
! /*
!  * Instance Methods
!  */
! 
! /**
!   * 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.
!   *
!   * @param <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);
  
! /*************************************************************************/
  
! /**
!   * Prints the pages.
!   */
! public abstract void print () throws PrinterException;
  
! /**
!   * 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();
  
! /*************************************************************************/
  
! /**
!   * 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);
  
! } // class PrinterJob
  
--- 38,285 ----
  
  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;
  
!   /**
!    * Prints the pages.
!    */
!   public abstract void print () throws PrinterException;
  
!   /**
!    * Prints the page with given attributes.
!    */
!   public abstract void print (PrintRequestAttributeSet attributes)
!     throws PrinterException;
  
!   /**
!    * 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 abstract boolean printDialog(PrintRequestAttributeSet attributes)
!     throws HeadlessException;
  
!   /**
!    * 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-3.4.3/libjava/java/beans/AppletInitializer.java gcc-4.0.0/libjava/java/beans/AppletInitializer.java
*** gcc-3.4.3/libjava/java/beans/AppletInitializer.java	Sat Oct 11 18:18:22 2003
--- gcc-4.0.0/libjava/java/beans/AppletInitializer.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* java.beans.AppletInitializer
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.beans.AppletInitializer
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.beans.beancontext.BeanContex
*** 45,51 ****
   * 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
--- 45,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/beans/BeanDescriptor.java gcc-4.0.0/libjava/java/beans/BeanDescriptor.java
*** gcc-3.4.3/libjava/java/beans/BeanDescriptor.java	Thu Dec  4 19:36:13 2003
--- gcc-4.0.0/libjava/java/beans/BeanDescriptor.java	Thu Mar 11 14:36:14 2004
***************
*** 1,5 ****
  /* java.beans.BeanDescriptor
!    Copyright (C) 1998 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.beans.BeanDescriptor
!    Copyright (C) 1998, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public class BeanDescriptor extends Feat
*** 67,72 ****
--- 67,80 ----
  	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. **/
diff -Nrcpad gcc-3.4.3/libjava/java/beans/Beans.java gcc-4.0.0/libjava/java/beans/Beans.java
*** gcc-3.4.3/libjava/java/beans/Beans.java	Mon Mar 17 15:21:45 2003
--- gcc-4.0.0/libjava/java/beans/Beans.java	Sat Feb 19 18:47:29 2005
***************
*** 1,5 ****
  /* java.beans.Beans
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.beans.Beans
!    Copyright (C) 1998, 1999, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,56 ****
  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.io.ClassLoaderObjectInputStream;
! import java.io.InputStream;
  import java.io.IOException;
  import java.io.ObjectInputStream;
! import java.applet.Applet;
  
  /**
   * <code>Beans</code> provides some helper methods that allow the basic
   * operations of Bean-ness.
   *
   * @author John Keiser
   * @since 1.1
!  * @version 1.1.0, 29 Jul 1998
   *
   */
  public class Beans
--- 35,60 ----
  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
*************** public class Beans
*** 65,260 ****
     */
    public Beans()
    {
!     // Do nothing here.
    }
  
!   /**
!    * Allows you to instantiate a Bean.  This method takes
!    * a ClassLoader from which to read the Bean and the
!    * name of the Bean.<P>
!    *
!    * The Bean name should be a dotted name, like a class.
!    * It can represent several things.  Beans will search
!    * for the Bean using the name like this:<P>
!    * <OL>
!    * <LI>Searches for a serialized instance of the Bean
!    * using getResource(), mangling the Bean name by
!    * replacing the dots with slashes and appending .ser
!    * (for example, gnu.beans.BlahDeBlah would cause
!    * Beans to search for gnu/beans/BlahDeBlah.ser using
!    * getResource()).</LI>
!    * <LI>Searches for the Bean class using the beanName,
!    * and then instantiates it with the no-arg constructor.
!    * At that point, if it is an Applet, it provides it
!    * with AppletContext and AppletStub, and then calls
!    * init().</LI>
!    * </OL>
!    *
!    * @param cl the ClassLoader to use, or <CODE>null</CODE>
!    *        to use the default ClassLoader.
!    * @param beanName the name of the Bean.
!    *
!    * @return the Bean.
!    *
!    * @XXX
!    */
!   public static Object instantiate (ClassLoader cl, String beanName)
!     throws IOException, ClassNotFoundException
!   {
!     Object bean;
!     InputStream serStream;
!     
!     if (cl == null)
!       {
!         serStream = ClassLoader.getSystemResourceAsStream
!           (beanName.replace ('.','/')+".ser");
!       }
!     else
!       {
!         serStream = cl.getResourceAsStream (beanName.replace ('.', '/')
!                                             + ".ser");
!       }
!     
!     if (serStream != null)
!       {
!         if(cl == null)
!           {
!             ObjectInputStream ois = new ObjectInputStream(serStream);
!             bean = ois.readObject();
!           }
!         else
!           {
!             ClassLoaderObjectInputStream ois =
!               new ClassLoaderObjectInputStream (serStream, cl);
              bean = ois.readObject();
-           }
-       }
-     else if(cl == null)
-       {
-         Class beanClass = Class.forName(beanName);
-         try
-           {
-             bean = beanClass.newInstance();
-           }
-         catch(IllegalAccessException E)
-           {
-             bean = null;
-           }
-         catch(InstantiationException E)
-           {
-             bean = null;
-           }
-       }
-     else
-       {
-         Class beanClass = cl.loadClass(beanName);
-         try
-           {
-             bean = beanClass.newInstance();
-           }
-         catch(IllegalAccessException E)
-           {
-             bean = null;
-           }
-         catch(InstantiationException E)
-           {
-             bean = null;
-           }
-       }
  
!     if(bean instanceof Applet)
!       {
!         Applet a = (Applet)bean;
!         //a.setAppletContext(???);
!         //a.setStub(???);
!         if(serStream == null)
!           {
!             a.init();
!           }
!       }
  
!     return bean;
!   }
  
!   /**
!    * Get 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;
!   }
  
!   /**
!    * Determine 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);
!   }
  
!   /**
!    * Find out whether the GUI is available to use.
!    * Defaults to true.
!    *
!    * @return whether the GUI is available to use.
!    */
!   public static boolean isGuiAvailable()
!   {
!     return guiAvailable;
!   }
  
!   /**
!    * Find out whether it is design time.  Design time means
!    * we are in a RAD tool.
!    * Defaults to false.
!    *
!    * @return whether it is design time.
!    */
!   public static boolean isDesignTime()
!   {
!     return designTime;
!   }
  
!   /**
!    * Set 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;
!   }
  
-   /**
-    * Set 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;
-   }
  }
--- 69,368 ----
     */
    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-3.4.3/libjava/java/beans/EventHandler.java gcc-4.0.0/libjava/java/beans/EventHandler.java
*** gcc-3.4.3/libjava/java/beans/EventHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/beans/EventHandler.java	Thu Sep 30 14:54:12 2004
***************
*** 0 ****
--- 1,389 ----
+ /* java.beans.EventHandler
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+ 
+ /**
+  * class EventHandler
+  *
+  * EventHandler forms a bridge between dynamically created listeners and
+  * arbitrary properties and methods.  The idea is that a Proxy that implements
+  * a listener class calls the EventHandler when a listener method is called.
+  * The Proxy calls invoke(), which dispatches the event to a method, called
+  * the action, in another object, called the target.
+  *
+  * The event passed to the listener method is used to access a prespecified
+  * property, which in turn is passed to the action method.
+  * 
+  * Normally, call EventHandler.create(), which constructs an EventHandler and
+  * a Proxy for the listener interface.  When the listenerMethod gets called on
+  * the proxy, it in turn calls invoke on the attached EventHandler.  The
+  * invoke call extracts the bean property from the event object and passes it
+  * to the action method of target object.
+  *
+  * TODO: Add examples of using this thing.
+  * 
+  * @author Jerry Quinn (jlquinn@optonline.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;
+ 
+   // 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.
+    *
+    * Typical creation is done with the create method, not by newing an
+    * EventHandler.
+    *
+    * 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.
+    *
+    *
+    *
+    * @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;
+     this.action = action;	// Turn this into a method or do we wait till
+ 				// runtime
+     property = eventPropertyName;
+     listenerMethod = listenerMethodName;
+   }
+ 
+   /**
+    * Return the event property name.
+    */
+   public String getEventPropertyName()
+   {
+     return property;
+   }
+ 
+   /**
+    * Return the listener's method name.
+    */
+   public String getListenerMethodName()
+   {
+     return listenerMethod;
+   }
+ 
+   /**
+    * Return the target object.
+    */
+   public Object getTarget()
+   {
+     return target;
+   }
+ 
+   /**
+    * Return 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)
+     throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
+   {
+     // Use the event object when the property name to extract is null.
+     if (prop == null)
+       return new Object[] {o, o.getClass()};
+ 
+     // 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 e)
+       {
+ 	// Look for regular property getter getProperty
+ 	getter = o.getClass().getMethod("get" + capitalize(prop),
+ 						 null);
+       }
+     Object val = getter.invoke(o, null);
+ 
+     if (rest != null)
+       return getProperty(val, rest);
+ 
+     return new Object[] {val, getter.getReturnType()};
+   }
+ 
+ 
+   /**
+    * Invoke the event handler.
+    *
+    * Proxy is the object that was used, method is the method that was invoked
+    * on object, and arguments is the set of arguments passed to this method.
+    * We assume that the first argument is the event to extract a property
+    * from.
+    *
+    * Assuming that method matches the listener method specified when creating
+    * this EventHandler, the desired property is extracted from this argument.
+    * The property is passed to target.setAction(), if possible.  Otherwise
+    * target.action() is called, where action is the string fed to the
+    * constructor.
+    *
+    * For now we punt on indexed properties.  Sun docs are not clear to me
+    * about this.
+    *
+    * @param proxy The proxy object that had method invoked on it.
+    * @param method The method that was invoked.
+    * @param arguments Arguments to method.
+    * @return Result of invoking target.action on the event property
+    */
+   public Object invoke(Object proxy, Method method, Object[] arguments)
+     throws Exception
+   {
+     // Do we actually need the proxy?
+     if (method == null)
+       throw new RuntimeException("Invoking null method");
+ 
+     // 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;
+ 
+     // Extract the first arg from arguments and do getProperty on arg
+     if (arguments == null || arguments.length == 0)
+       return null;
+     Object event = arguments[0]; // We hope :-)
+ 
+     // Obtain 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 val = v[0];
+     Class propertyType = (Class) v[1];
+ 
+     // Find the actual method of target to invoke.  We can't do this in the
+     // constructor since we don't know the type of the property we extracted
+     // from the event then.
+     //
+     // action can be either a property or a method.  Sun's docs seem to imply
+     // that action should be treated as a property first, and then a method,
+     // but don't specifically say it.
+     //
+     // XXX check what happens with native type wrappers.  The better thing to
+     // do is look at the return type of the method
+     Method actionMethod;
+     try
+       {
+ 	// Look for a property setter for action.
+ 	actionMethod = 
+ 	  target.getClass().getMethod("set" + capitalize(action),
+ 				      new Class[] {propertyType});
+       }
+     catch (NoSuchMethodException e)
+       {
+ 	// If action as property didn't work, try as method.
+ 	try
+ 	  {
+ 	    actionMethod = 
+ 	      target.getClass().getMethod(action, new Class[] {propertyType});
+ 	  }
+ 	catch (NoSuchMethodException e1)
+ 	  {
+ 	    // When event property is null, we may call action with no args
+ 	    if (property == null)
+ 	      {
+ 		actionMethod =
+ 		  target.getClass().getMethod(action, null);
+ 		return actionMethod.invoke(target, null);
+ 	      }
+ 	    else
+ 	      throw e1;
+ 	  }
+       }
+ 
+     // Invoke target.action(property)
+     return actionMethod.invoke(target, new Object[] {val});
+   }
+ 
+   /**
+    * Construct a new object to dispatch events.
+    *
+    * Equivalent to:
+    * create(listenerInterface, target, action, null, null)
+    *
+    * I.e. all listenerInterface methods are mapped to
+    * target.action(EventObject) or target.action(), if the first doesn't
+    * exist.
+    *
+    * @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);
+   }
+ 
+   /**
+    * Construct a new object to dispatch events.
+    *
+    * Equivalent to:
+    * create(listenerInterface, target, action, eventPropertyName, null)
+    *
+    * I.e. all listenerInterface methods are mapped to
+    * target.action(event.getEventPropertyName)
+    * 
+    *
+    * @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);
+   }
+ 
+ 
+   /**
+    * Construct a new object to dispatch events.
+    *
+    * This creates an object that acts as a proxy for the method
+    * listenerMethodName in listenerInterface.  When the listener method is
+    * activated, the object extracts eventPropertyName from the event.  Then it
+    * passes the property to the method target.setAction, or target.action if
+    * action is not a property with a setter.
+    *
+    * For example, EventHandler.create(MouseListener.class, test, "pushed",
+    * "button", "mouseClicked") generates a proxy object that implements
+    * MouseListener, at least for the method mouseClicked().  The other methods
+    * of MouseListener are null operations.  When mouseClicked is invoked, the
+    * generated object extracts the button property from the MouseEvent,
+    * i.e. event.getButton(), and calls test.setPushed() with the result.  So under
+    * the covers the following happens:
+    *
+    * <CODE>
+    * object.mouseClicked(MouseEvent e) { test.setPushed(e.getButton()); }
+    * </CODE>
+    *
+    * The Sun spec specifies a hierarchical property naming scheme.  Generally
+    * if the property is a.b.c, this corresponds to event.getA().getB().getC()
+    * or event.getA().getB().isC().  I don't see how you specify an indexed
+    * property, though.  This may be a limitation of the Sun implementation as
+    * well.  The spec doesn't seem to address it.
+    * 
+    * If eventPropertyName is null, EventHandler instead uses the event object
+    * in place of a property, i.e. it calls target.action(EventObject).  If
+    * there is no method named action taking an EventObject argument,
+    * EventHandler looks for a method target.action() taking no arguments.
+    *
+    * If listenerMethodName is null, every method in listenerInterface gets
+    * mapped to target.action, rather than the specified listener method.
+    * 
+    * @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-3.4.3/libjava/java/beans/EventSetDescriptor.java gcc-4.0.0/libjava/java/beans/EventSetDescriptor.java
*** gcc-3.4.3/libjava/java/beans/EventSetDescriptor.java	Thu Dec  4 19:36:13 2003
--- gcc-4.0.0/libjava/java/beans/EventSetDescriptor.java	Thu Sep 30 14:54:12 2004
*************** exception statement from your version. *
*** 38,47 ****
  
  package java.beans;
  
  import java.lang.reflect.Method;
  import java.lang.reflect.Modifier;
  import java.util.Vector;
- import gnu.java.lang.ClassHelper;
  
  /**
   ** EventSetDescriptor describes the hookup between an event source
--- 38,48 ----
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/beans/ExceptionListener.java gcc-4.0.0/libjava/java/beans/ExceptionListener.java
*** gcc-3.4.3/libjava/java/beans/ExceptionListener.java	Mon Jul 15 16:05:13 2002
--- gcc-4.0.0/libjava/java/beans/ExceptionListener.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* ExceptionListener.java -- listen for recoverable internal exceptions
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ExceptionListener.java -- listen for recoverable internal exceptions
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.beans;
*** 42,48 ****
   * 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
   */
--- 42,48 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/beans/Expression.java gcc-4.0.0/libjava/java/beans/Expression.java
*** gcc-3.4.3/libjava/java/beans/Expression.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/beans/Expression.java	Tue Jun 29 01:39:36 2004
***************
*** 0 ****
--- 1,133 ----
+ /* java.beans.Expression
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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-3.4.3/libjava/java/beans/Introspector.java gcc-4.0.0/libjava/java/beans/Introspector.java
*** gcc-3.4.3/libjava/java/beans/Introspector.java	Thu Dec  4 19:36:13 2003
--- gcc-4.0.0/libjava/java/beans/Introspector.java	Thu Sep 30 14:54:12 2004
*************** package java.beans;
*** 41,49 ****
  import gnu.java.beans.BeanInfoEmbryo;
  import gnu.java.beans.ExplicitBeanInfo;
  import gnu.java.beans.IntrospectionIncubator;
  import java.util.Hashtable;
  import java.util.Vector;
- import gnu.java.lang.ClassHelper;
  
  /**
   * Introspector is the class that does the bulk of the
--- 41,50 ----
  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
*************** import gnu.java.lang.ClassHelper;
*** 65,71 ****
   * 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 <bean class name>BeanInfo in different
   * packages, first searching the bean class's package
   * and then moving on to search the beanInfoSearchPath.<P>
   *
--- 66,72 ----
   * 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>
   *
*************** import gnu.java.lang.ClassHelper;
*** 113,126 ****
   *     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.</CODE></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.</CODE></LI>
   * <LI>If there is a
   *     <CODE>public &lt;type&gt; getXXX()</CODE> method,
   *     then XXX is a read-only property of type
--- 114,127 ----
   *     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
diff -Nrcpad gcc-3.4.3/libjava/java/beans/PropertyChangeEvent.java gcc-4.0.0/libjava/java/beans/PropertyChangeEvent.java
*** gcc-3.4.3/libjava/java/beans/PropertyChangeEvent.java	Mon Jul 15 16:05:13 2002
--- gcc-4.0.0/libjava/java/beans/PropertyChangeEvent.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* PropertyChangeEvent.java -- describes a change in a property
!    Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.util.EventObject;
*** 55,61 ****
   * information.
   *
   * @author John Keiser
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.1
   * @status udpated to 1.4
   */
--- 55,61 ----
   * information.
   *
   * @author John Keiser
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.1
   * @status udpated to 1.4
   */
*************** public class PropertyChangeEvent extends
*** 105,112 ****
     *
     * @param source the Bean containing the property
     * @param propertyName the property's name
!    * @param oldValue the old value of the property
!    * @param newValue the new value of the property
     * @throws IllegalArgumentException if source is null
     */
    public PropertyChangeEvent(Object source, String propertyName,
--- 105,112 ----
     *
     * @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,
diff -Nrcpad gcc-3.4.3/libjava/java/beans/PropertyChangeListenerProxy.java gcc-4.0.0/libjava/java/beans/PropertyChangeListenerProxy.java
*** gcc-3.4.3/libjava/java/beans/PropertyChangeListenerProxy.java	Mon Jul 15 16:05:13 2002
--- gcc-4.0.0/libjava/java/beans/PropertyChangeListenerProxy.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* PropertyChangeListenerProxy.java -- adds a name to a property listener
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PropertyChangeListenerProxy.java -- adds a name to a property listener
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListenerProxy;
*** 45,51 ****
   * 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
   */
--- 45,51 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/beans/PropertyChangeSupport.java gcc-4.0.0/libjava/java/beans/PropertyChangeSupport.java
*** gcc-3.4.3/libjava/java/beans/PropertyChangeSupport.java	Mon Jul 15 16:05:13 2002
--- gcc-4.0.0/libjava/java/beans/PropertyChangeSupport.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* PropertyChangeSupport.java -- support to manage property change listeners
!    Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.util.Vector;
*** 57,63 ****
   * is thread-safe.
   *
   * @author John Keiser
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.1
   * @status updated to 1.4
   */
--- 57,63 ----
   * is thread-safe.
   *
   * @author John Keiser
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.1
   * @status updated to 1.4
   */
*************** public class PropertyChangeSupport imple
*** 89,95 ****
     *
     * @serial the serialization format
     */
!   private final int propertyChangeSupportSerializedDataVersion = 2;
  
    /**
     * The list of all registered property listeners. If this instance was
--- 89,95 ----
     *
     * @serial the serialization format
     */
!   private static final int propertyChangeSupportSerializedDataVersion = 2;
  
    /**
     * The list of all registered property listeners. If this instance was
diff -Nrcpad gcc-3.4.3/libjava/java/beans/PropertyDescriptor.java gcc-4.0.0/libjava/java/beans/PropertyDescriptor.java
*** gcc-3.4.3/libjava/java/beans/PropertyDescriptor.java	Thu Dec  4 19:36:13 2003
--- gcc-4.0.0/libjava/java/beans/PropertyDescriptor.java	Tue Feb 22 14:06:53 2005
***************
*** 1,5 ****
  /* java.beans.PropertyDescriptor
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.beans.PropertyDescriptor
!    Copyright (C) 1998, 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,41 ****
  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;
--- 35,40 ----
*************** import java.lang.reflect.Method;
*** 58,374 ****
   ** </OL>
   **
   ** @author John Keiser
!  ** @since JDK1.1
!  ** @version 1.1.0, 26 Jul 1998
   **/
  
! 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>
!    **
!    ** <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 an is" + caps + 
! 				       " or get" + caps + " method");
      }
!     if (setMethod == null) {
!       throw new IntrospectionException("Cannot find a " + caps + " method");
      }
!     checkMethods();
!   }
!   
!   /** 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.
!    ** @param setMethodName the name of the set method.
!    ** @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);
      }
!     checkMethods();
!   }
!   
!   /** 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 method.
!    ** @param setMethod the set method.
!    ** @exception IntrospectionException if the methods are not found 
!    **            or invalid.
!    **/
!   public PropertyDescriptor(String name, Method getMethod, Method setMethod)
!     throws IntrospectionException 
!   {
!     setName(name);
!     this.getMethod = getMethod;
!     this.setMethod = setMethod;
!     if (getMethod != null) {
!       this.propertyType = getMethod.getReturnType();
!     } 
!     else if (setMethod != null) {
!       this.propertyType = setMethod.getParameterTypes()[0];
      }
-     checkMethods();
-   }
-   
-   /** 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;
-   }
-   
-   /** Get the set method.  Why they call it writeMethod here and
-    ** set everywhere else is beyond me.
-    **/
-   public Method getWriteMethod() {
-     return setMethod;
-   }
-   
-   /** 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);
      }
-   }
  
!   private void checkMethods() 
!     throws IntrospectionException
!   {
!     if (getMethod != null) {
!       if (getMethod.getParameterTypes().length > 0) {
! 	throw new IntrospectionException("get method has parameters");
!       }
!       this.propertyType = getMethod.getReturnType();
!       if (propertyType == Void.TYPE) {
! 	throw new IntrospectionException("get method has void return type");
!       }
      }
!     if (setMethod != null) {
!       if (setMethod.getParameterTypes().length != 1) {
! 	String msg = "set method does not have exactly one parameter"; 
! 	throw new IntrospectionException(msg);
!       }
!       if (getMethod == null) {
! 	propertyType = setMethod.getParameterTypes()[0];
!       }
!       else {
! 	if (!propertyType.equals(setMethod.getParameterTypes()[0])) {
! 	  String msg = "set and get methods do not share the same type";
! 	  throw new IntrospectionException(msg);
! 	}
! 	if ((!getMethod.getDeclaringClass().
! 	     isAssignableFrom(setMethod.getDeclaringClass())) &&
! 	    (!setMethod.getDeclaringClass().
! 	     isAssignableFrom(getMethod.getDeclaringClass()))) {
! 	  String msg = "set and get methods are not in the same class.";
! 	  throw new IntrospectionException(msg);
! 	}
!       }
      }
!   }
  }
--- 57,583 ----
   ** </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;
!     }
! 
!     /** 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-3.4.3/libjava/java/beans/PropertyEditor.java gcc-4.0.0/libjava/java/beans/PropertyEditor.java
*** gcc-3.4.3/libjava/java/beans/PropertyEditor.java	Sat Oct 11 18:18:22 2003
--- gcc-4.0.0/libjava/java/beans/PropertyEditor.java	Tue Apr 20 10:37:07 2004
*************** package java.beans;
*** 77,83 ****
   **       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>
!  **   <LU>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
--- 77,83 ----
   **       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
diff -Nrcpad gcc-3.4.3/libjava/java/beans/PropertyEditorManager.java gcc-4.0.0/libjava/java/beans/PropertyEditorManager.java
*** gcc-3.4.3/libjava/java/beans/PropertyEditorManager.java	Mon Jul 14 05:33:30 2003
--- gcc-4.0.0/libjava/java/beans/PropertyEditorManager.java	Thu Sep 30 14:54:13 2004
*************** exception statement from your version. *
*** 38,44 ****
  
  package java.beans;
  
- import gnu.java.lang.ClassHelper;
  import gnu.java.beans.editors.ColorEditor;
  import gnu.java.beans.editors.FontEditor;
  import gnu.java.beans.editors.NativeBooleanEditor;
--- 38,43 ----
*************** import gnu.java.beans.editors.NativeIntE
*** 49,54 ****
--- 48,55 ----
  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;
  
*************** import java.awt.Font;
*** 60,78 ****
   * 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>
   *
!  * <STRONG>Spec Suggestion:</STRONG> Perhaps an editor for
   * Filename or something like it should be provided.  As well
!  * as char.
   *
   * @author John Keiser
   * @since 1.1
--- 61,80 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/beans/PropertyEditorSupport.java gcc-4.0.0/libjava/java/beans/PropertyEditorSupport.java
*** gcc-3.4.3/libjava/java/beans/PropertyEditorSupport.java	Tue Jan 22 22:40:11 2002
--- gcc-4.0.0/libjava/java/beans/PropertyEditorSupport.java	Wed Nov 17 08:17:20 2004
***************
*** 1,5 ****
  /* java.beans.PropertyEditorSupport
!    Copyright (C) 1998 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,206 ****
  
  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
!  ** @since JDK1.1
!  ** @version 1.1.0, 29 Jul 1998
!  **/
  
! public class PropertyEditorSupport implements PropertyEditor {
! 	Object eventSource;
! 	Object val;
! 	PropertyChangeSupport pSupport;
  
! 	/** Call this constructor when you are deriving from
! 	 ** PropertyEditorSupport.
! 	 **/
! 	protected PropertyEditorSupport() {
! 		this.eventSource = this;
! 		this.pSupport = new PropertyChangeSupport(this);
! 	}
  
! 	/** Call this constructor when you are using
! 	 ** PropertyEditorSupport as a helper object.
! 	 ** @param eventSource the source to use when firing
! 	 **        property change events.
! 	 **/
! 	protected PropertyEditorSupport(Object eventSource) {
! 		this.eventSource = eventSource;
! 		this.pSupport = new PropertyChangeSupport(this);
! 	}
  
! 	/** Set the current value of the property.
! 	 ** <STRONG>Implementation Note</STRONG> Sun does not
! 	 ** state what exactly this version of the method does.
! 	 ** Thus, in this implementation, it sets the value, and
! 	 ** then if the old and new values are different, it
! 	 ** fires a property change event with no property name
! 	 ** and the old and new values.
! 	 ** @param val the new value for the property.
! 	 **/
! 	public void setValue(Object val) {
! 		Object oldVal = val;
! 		this.val = val;
! 		if(!oldVal.equals(val)) {
! 			pSupport.firePropertyChange(null,oldVal,val);
! 		}
! 	}
  
! 	/** Get the current value of the property.
! 	 ** @return the current value of the property.
! 	 **/
! 	public Object getValue() {
! 		return val;
! 	}
  
! 	/** Get whether this object is paintable or not.
! 	 ** @return <CODE>false</CODE>
! 	 **/
! 	public boolean isPaintable() {
! 		return false;
! 	}
  
! 	/** Paint this object.  This class does nothing in
! 	 ** this method.
! 	 **/
! 	public void paintValue(java.awt.Graphics g, java.awt.Rectangle r) {
! 	}
  
! 	/** Get 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 "@$#^";
! 	}
  
! 	/** Get 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 val != null ? val.toString() : "null";
! 	}
  
! 	/** Set 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;
! 	}
  
! 	/** Return a custom component to edit the value.
! 	 ** @return <CODE>null</CODE> in this class.
! 	 **/
! 	public java.awt.Component getCustomEditor() {
! 		return null;
! 	}
  
! 	/** Find 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;
! 	}
  
! 	/** Add a property change listener to this property editor.
! 	 ** @param l the listener to add.
! 	 **/
! 	public void addPropertyChangeListener(PropertyChangeListener l) {
! 		pSupport.addPropertyChangeListener(l);
! 	}
  
! 	/** Remove a property change listener from this property editor.
! 	 ** @param l the listener to remove.
! 	 **/
! 	public void removePropertyChangeListener(PropertyChangeListener l) {
! 		pSupport.removePropertyChangeListener(l);
! 	}
  
  
! 	/** Notify people that we've changed, although we don't
! 	 ** tell them just how.  The only thing I can think of to
! 	 ** send in the event is the new value (since the old value
! 	 ** is unavailable and there is no property name).
! 	 ** I confess I do not understand the point of this method.
! 	 **/
! 	public void firePropertyChange() {
! 		pSupport.firePropertyChange(null,null,val);
! 	}
! }
  
--- 38,265 ----
  
  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-3.4.3/libjava/java/beans/Statement.java gcc-4.0.0/libjava/java/beans/Statement.java
*** gcc-3.4.3/libjava/java/beans/Statement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/beans/Statement.java	Wed Jun 30 22:47:39 2004
***************
*** 0 ****
--- 1,326 ----
+ /* java.beans.Statement
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+  
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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;
+ 
+ /**
+  * 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
+ {
+   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;
+ 
+   /**
+    * Constructs a statement 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 Statement(Object target, String methodName, Object[] arguments)
+   {
+     this.target = target;
+     this.methodName = methodName;
+     this.arguments = arguments;
+   }
+ 
+   /**
+    * 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();
+ 	    System.out.println("ptypeslen = " + ptypes.length);
+ 	    System.out.println("ptypes = " + ptypes);
+ 	    System.out.println("ctor = " + ctors[i].getName());
+ 	    for (int j=0; j < ptypes.length; j++) {
+ 	      System.out.println("param = " + ptypes[i].getName());
+      
+ 	    }
+ 	      
+ 	    
+ 	    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()
+   {
+     String result = target.getClass().getName() + "." + methodName + "(";
+     String sep = "";
+     for (int i = 0; i < arguments.length; i++)
+       {
+ 	result = result + sep + arguments[i].getClass().getName();
+ 	sep = ", ";
+       }
+     result = result + ")";
+     return result;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/beans/VetoableChangeListenerProxy.java gcc-4.0.0/libjava/java/beans/VetoableChangeListenerProxy.java
*** gcc-3.4.3/libjava/java/beans/VetoableChangeListenerProxy.java	Mon Jul 15 16:05:13 2002
--- gcc-4.0.0/libjava/java/beans/VetoableChangeListenerProxy.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* VetoableChangeListenerProxy.java -- adds a name to a vetoable listener
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* VetoableChangeListenerProxy.java -- adds a name to a vetoable listener
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListenerProxy;
*** 45,51 ****
   * 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
   */
--- 45,51 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/beans/VetoableChangeSupport.java gcc-4.0.0/libjava/java/beans/VetoableChangeSupport.java
*** gcc-3.4.3/libjava/java/beans/VetoableChangeSupport.java	Mon Jul 15 16:05:13 2002
--- gcc-4.0.0/libjava/java/beans/VetoableChangeSupport.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* VetoableChangeSupport.java -- support to manage vetoable change listeners
!    Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.util.Vector;
*** 57,63 ****
   * is thread-safe.
   *
   * @author John Keiser
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.1
   * @status updated to 1.4
   */
--- 57,63 ----
   * is thread-safe.
   *
   * @author John Keiser
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.1
   * @status updated to 1.4
   */
*************** public class VetoableChangeSupport imple
*** 89,95 ****
     *
     * @serial the serialization format
     */
!   private final int vetoableChangeSupportSerializedDataVersion = 2;
  
    /**
     * The list of all registered vetoable listeners. If this instance was
--- 89,95 ----
     *
     * @serial the serialization format
     */
!   private static final int vetoableChangeSupportSerializedDataVersion = 2;
  
    /**
     * The list of all registered vetoable listeners. If this instance was
diff -Nrcpad gcc-3.4.3/libjava/java/beans/XMLDecoder.java gcc-4.0.0/libjava/java/beans/XMLDecoder.java
*** gcc-3.4.3/libjava/java/beans/XMLDecoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/beans/XMLDecoder.java	Sat Feb 19 18:47:29 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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-3.4.3/libjava/java/beans/beancontext/BeanContext.java gcc-4.0.0/libjava/java/beans/beancontext/BeanContext.java
*** gcc-3.4.3/libjava/java/beans/beancontext/BeanContext.java	Sat Oct 11 18:19:44 2003
--- gcc-4.0.0/libjava/java/beans/beancontext/BeanContext.java	Thu Sep 30 14:54:13 2004
*************** exception statement from your version. *
*** 38,49 ****
  
  package java.beans.beancontext;
  
- import java.util.Collection;
- import java.beans.Visibility;
  import java.beans.DesignMode;
! import java.net.URL;
! import java.io.InputStream;
  import java.io.IOException;
  
  /**
   * Acts as a container for sub-beans and as a sub-bean,
--- 38,49 ----
  
  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,
diff -Nrcpad gcc-3.4.3/libjava/java/beans/beancontext/BeanContextChild.java gcc-4.0.0/libjava/java/beans/beancontext/BeanContextChild.java
*** gcc-3.4.3/libjava/java/beans/beancontext/BeanContextChild.java	Sat Oct 11 18:19:44 2003
--- gcc-4.0.0/libjava/java/beans/beancontext/BeanContextChild.java	Thu Sep 30 14:54:13 2004
*************** exception statement from your version. *
*** 39,46 ****
  package java.beans.beancontext;
  
  import java.beans.PropertyChangeListener;
- import java.beans.VetoableChangeListener;
  import java.beans.PropertyVetoException;
  
  /**
   * Beans implement this to get information about the execution environment and
--- 39,46 ----
  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
diff -Nrcpad gcc-3.4.3/libjava/java/beans/beancontext/BeanContextChildSupport.java gcc-4.0.0/libjava/java/beans/beancontext/BeanContextChildSupport.java
*** gcc-3.4.3/libjava/java/beans/beancontext/BeanContextChildSupport.java	Sat Oct 11 18:19:44 2003
--- gcc-4.0.0/libjava/java/beans/beancontext/BeanContextChildSupport.java	Thu Sep 30 14:54:13 2004
*************** exception statement from your version. *
*** 38,48 ****
  
  package java.beans.beancontext;
  
- import java.beans.PropertyChangeListener;
- import java.beans.VetoableChangeListener;
- import java.beans.PropertyVetoException;
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeSupport;
  import java.beans.VetoableChangeSupport;
  import java.io.Serializable;
  
--- 38,48 ----
  
  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;
  
*************** import java.io.Serializable;
*** 59,65 ****
   * @since 1.2
   * @see java.beans.beancontext.BeanContextChild
   */
- 
  public class BeanContextChildSupport
    implements BeanContextChild, BeanContextServicesListener, Serializable
  {
--- 59,64 ----
diff -Nrcpad gcc-3.4.3/libjava/java/beans/beancontext/BeanContextMembershipEvent.java gcc-4.0.0/libjava/java/beans/beancontext/BeanContextMembershipEvent.java
*** gcc-3.4.3/libjava/java/beans/beancontext/BeanContextMembershipEvent.java	Tue Jan 22 22:40:12 2002
--- gcc-4.0.0/libjava/java/beans/beancontext/BeanContextMembershipEvent.java	Thu Sep 30 14:54:13 2004
***************
*** 1,5 ****
  /* java.beans.beancontext.BeanContextMembershipEvent
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.beans.beancontext.BeanContextMembershipEvent
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.beans.beancontext;
  
- import java.util.Collection;
  import java.util.Arrays;
  import java.util.Iterator;
  
  /**
--- 38,45 ----
  
  package java.beans.beancontext;
  
  import java.util.Arrays;
+ import java.util.Collection;
  import java.util.Iterator;
  
  /**
*************** import java.util.Iterator;
*** 48,57 ****
   * of the listener interface was called.
   *
   * @author John Keiser
!  * @since JDK1.2
   * @see java.beans.beancontext.BeanContextMembershipListener
   */
- 
  public class BeanContextMembershipEvent extends BeanContextEvent {
  	/**
  	 * The children that were added or removed.
--- 48,56 ----
   * 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.
diff -Nrcpad gcc-3.4.3/libjava/java/beans/beancontext/BeanContextServiceProvider.java gcc-4.0.0/libjava/java/beans/beancontext/BeanContextServiceProvider.java
*** gcc-3.4.3/libjava/java/beans/beancontext/BeanContextServiceProvider.java	Sat Oct 11 18:19:44 2003
--- gcc-4.0.0/libjava/java/beans/beancontext/BeanContextServiceProvider.java	Tue Apr 20 10:37:07 2004
*************** import java.util.Iterator;
*** 62,75 ****
  public interface BeanContextServiceProvider {
  	/**
  	 * Get a service.
! 	 * Called from <code>BeanContextServices.getService().
! 	 * <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.
  	 *
--- 62,73 ----
  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.
  	 *
diff -Nrcpad gcc-3.4.3/libjava/java/io/BufferedInputStream.java gcc-4.0.0/libjava/java/io/BufferedInputStream.java
*** gcc-3.4.3/libjava/java/io/BufferedInputStream.java	Tue Jan 22 22:40:13 2002
--- gcc-4.0.0/libjava/java/io/BufferedInputStream.java	Tue Mar 15 16:43:41 2005
***************
*** 1,5 ****
  /* BufferedInputStream.java -- An input stream that implements buffering
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BufferedInputStream.java -- An input stream that implements buffering
!    Copyright (C) 1998, 1999, 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.io;
*** 60,66 ****
   * does.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Warren Levy <warrenl@cygnus.com>
   */
  public class BufferedInputStream extends FilterInputStream
  {
--- 60,67 ----
   * 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
  {
*************** public class BufferedInputStream extends
*** 79,91 ****
     * 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 = 0;
  
    /**
     * 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 = 0;
  
    /**
     * The value of <code>pos</code> when the <code>mark()</code> method was
--- 80,92 ----
     * 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
*************** public class BufferedInputStream extends
*** 100,106 ****
     * After this may bytes are read, the <code>reset()</code> method
     * may not be called successfully.
     */
!   protected int marklimit = 0;
  
    /**
     * This method initializes a new <code>BufferedInputStream</code> that will
--- 101,114 ----
     * 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
*************** public class BufferedInputStream extends
*** 130,135 ****
--- 138,146 ----
      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;
    }
  
    /**
*************** public class BufferedInputStream extends
*** 147,153 ****
     */
    public synchronized int available() throws IOException
    {
!     return count - pos + super.available();
    }
  
    /**
--- 158,164 ----
     */
    public synchronized int available() throws IOException
    {
!     return count - pos + in.available();
    }
  
    /**
*************** public class BufferedInputStream extends
*** 160,166 ****
    {
      // Free up the array memory.
      buf = null;
!     super.close();
    }
  
    /**
--- 171,179 ----
    {
      // Free up the array memory.
      buf = null;
!     pos = count = 0;
!     markpos = -1;
!     in.close();
    }
  
    /**
*************** public class BufferedInputStream extends
*** 216,234 ****
      if (pos >= count && !refill())
        return -1;	// EOF
  
!     if (markpos >= 0 && pos - markpos > marklimit)
!       markpos = -1;
! 
!     return ((int) 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.  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.
     *
--- 229,247 ----
      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.
     *
*************** public class BufferedInputStream extends
*** 245,264 ****
     */
    public synchronized int read(byte[] b, int off, int len) throws IOException
    {
!     if (off < 0 || len < 0 || off + len > b.length)
        throw new IndexOutOfBoundsException();
  
      if (pos >= count && !refill())
        return -1;		// No bytes were read before EOF.
  
!     int remain = Math.min(count - pos, len);
!     System.arraycopy(buf, pos, b, off, remain);
!     pos += remain;
  
!     if (markpos >= 0 && pos - markpos > marklimit)
!       markpos = -1;
  
!     return remain;
    }
  
    /**
--- 258,289 ----
     */
    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 && in.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;
    }
  
    /**
*************** public class BufferedInputStream extends
*** 271,283 ****
     * 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 < 0)
!       throw new IOException();
  
      pos = markpos;
    }
--- 296,308 ----
     * 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;
    }
*************** public class BufferedInputStream extends
*** 295,357 ****
     */
    public synchronized long skip(long n) throws IOException
    {
      final long origN = n;
  
      while (n > 0L)
        {
! 	if (pos >= count && !refill())
! 	  if (n < origN)
! 	    break;
! 	  else
! 	    return -1;	// No bytes were read before EOF.
  
  	int numread = (int) Math.min((long) (count - pos), n);
  	pos += numread;
  	n -= numread;
- 
-         if (markpos >= 0 && pos - markpos > marklimit)
-           markpos = -1;
        }
  
      return origN - n;
    }
  
    /**
!    * Called to refill the buffer (when count is equal or greater the pos).
!    * Package local so BufferedReader can call it when needed.
     *
!    * @return <code>true</code> when <code>buf</code> can be (partly) refilled,
!    *         <code>false</code> otherwise.
     */
    boolean refill() throws IOException
    {
!     if (markpos < 0)
!       count = pos = 0;
!     else if (markpos > 0)
        {
!         // Shift the marked bytes (if any) to the beginning of the array
! 	// but don't grow it.  This saves space in case a reset is done
! 	// before we reach the max capacity of this array.
!         System.arraycopy(buf, markpos, buf, 0, count - markpos);
! 	count -= markpos;
! 	pos -= markpos;
! 	markpos = 0;
        }
!     else if (marklimit >= buf.length)	// BTW, markpos == 0
        {
! 	// Need to grow the buffer now to have room for marklimit bytes.
! 	// Note that the new buffer is one greater than marklimit.
! 	// This is so that there will be one byte past marklimit to be read
! 	// before having to call refill again, thus allowing marklimit to be
! 	// invalidated.  That way refill doesn't have to check marklimit.
! 	byte[] newbuf = new byte[marklimit + 1];
! 	System.arraycopy(buf, 0, newbuf, 0, count);
  	buf = newbuf;
        }
  
!     int numread = super.read(buf, count, buf.length - count);
  
!     if (numread < 0)	// EOF
        return false;
  
      count += numread;
--- 320,387 ----
     */
    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)
!           {
!             if (markpos == -1)
!               {
!                 // Buffer is empty and no mark is set, skip on the
!                 // underlying stream.
!                 n -= in.skip(n);
!                 break;
!               }
!             else if (!refill())
!               break;
!           }
  
  	int numread = (int) Math.min((long) (count - pos), n);
  	pos += numread;
  	n -= numread;
        }
  
      return origN - n;
    }
  
+   // GCJ LOCAL: package-private for use by InputStreamReader
    /**
!    * 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).
     */
    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 = in.read(buf, count, bufferSize);
  
!     if (numread <= 0)	// EOF
        return false;
  
      count += numread;
diff -Nrcpad gcc-3.4.3/libjava/java/io/BufferedReader.java gcc-4.0.0/libjava/java/io/BufferedReader.java
*** gcc-3.4.3/libjava/java/io/BufferedReader.java	Sun Dec 28 11:54:17 2003
--- gcc-4.0.0/libjava/java/io/BufferedReader.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* BufferedReader.java
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 
       Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,5 ----
  /* BufferedReader.java
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
       Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** package java.io;
*** 55,62 ****
   * 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
  {
--- 55,62 ----
   * 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
  {
*************** public class BufferedReader extends Read
*** 89,94 ****
--- 89,99 ----
    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.
      *
*************** public class BufferedReader extends Read
*** 107,113 ****
     * @param in The subordinate stream to read from
     * @param size The buffer size to use
     *
!    * @exception IllegalArgumentException if size &lt;&eq; 0
     */
    public BufferedReader(Reader in, int size)
    {
--- 112,118 ----
     * @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)
    {
*************** public class BufferedReader extends Read
*** 439,445 ****
      int i = lineEnd(limit);
      if (i < limit)
        {
! 	String str = new String(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
--- 444,450 ----
      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
*************** public class BufferedReader extends Read
*** 450,456 ****
  	    pos++;
  	return str;
        }
!     StringBuffer sbuf = new StringBuffer(200);
      sbuf.append(buffer, pos, i - pos);
      pos = i;
      // We only want to return null when no characters were read before
--- 455,464 ----
  	    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
*************** public class BufferedReader extends Read
*** 500,506 ****
     * <code>skip</code> method on the underlying stream to skip the 
     * remaining chars.
     *
!    * @param numChars The requested number of chars to skip
     *
     * @return The actual number of chars skipped.
     *
--- 508,514 ----
     * <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.
     *
*************** public class BufferedReader extends Read
*** 525,536 ****
  	// 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.
- 	int ch;
  	if (pos > limit)
! 	  if ((ch = read()) < 0)
! 	    return 0;
! 	  else
! 	    --pos; 
  
  	int avail = limit - pos;
  
--- 533,545 ----
  	// 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;
  
diff -Nrcpad gcc-3.4.3/libjava/java/io/BufferedWriter.java gcc-4.0.0/libjava/java/io/BufferedWriter.java
*** gcc-3.4.3/libjava/java/io/BufferedWriter.java	Sun Apr 20 22:47:43 2003
--- gcc-4.0.0/libjava/java/io/BufferedWriter.java	Tue Jul 20 15:51:11 2004
*************** package java.io;
*** 44,64 ****
   */
  
  /**
!   * 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 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.
--- 44,87 ----
   */
  
  /**
!  * 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.
*************** public class BufferedWriter extends Writ
*** 78,95 ****
     * @param out The underlying <code>Writer</code> to write data to
     * @param size The size of the internal buffer
     */
!   public BufferedWriter (Writer ox, int size)
    {
!     super (ox);
!     out = ox;
!     buffer = new char[size];
!     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
     */
    public void close () throws IOException
    {
--- 101,120 ----
     * @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
    {
*************** public class BufferedWriter extends Writ
*** 138,144 ****
     * is filled as a result of this write request, it will be flushed to the
     * underlying output stream.
     *
!    * @param b The char of data to be written, passed as an int
     *
     * @exception IOException If an error occurs
     */
--- 163,169 ----
     * 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 class BufferedWriter extends Writ
*** 226,232 ****
    }
  
    // This should only be called with the lock held.
!   private final void localFlush () throws IOException
    {
      if (count > 0)
        {
--- 251,257 ----
    }
  
    // This should only be called with the lock held.
!   private void localFlush () throws IOException
    {
      if (count > 0)
        {
*************** public class BufferedWriter extends Writ
*** 234,261 ****
  	count = 0;
        }
    }
- 
-   /**
-    * 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 is the default buffer size
-    */
-   private static final int DEFAULT_BUFFER_SIZE = 8192;
  }
--- 259,262 ----
diff -Nrcpad gcc-3.4.3/libjava/java/io/ByteArrayInputStream.java gcc-4.0.0/libjava/java/io/ByteArrayInputStream.java
*** gcc-3.4.3/libjava/java/io/ByteArrayInputStream.java	Tue Jan 22 22:40:13 2002
--- gcc-4.0.0/libjava/java/io/ByteArrayInputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* ByteArrayInputStream.java -- Read an array as a stream
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 41,47 ****
  /**
    * 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
--- 41,47 ----
  /**
    * 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
*************** public class ByteArrayInputStream extend
*** 83,89 ****
     * bytes supplied to the reader.  Please use caution in changing the 
     * contents of the buffer while this stream is open.
     *
!    * @param buf The byte array buffer this stream will read from.
     */
    public ByteArrayInputStream(byte[] buffer)
    {
--- 83,89 ----
     * 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)
    {
*************** public class ByteArrayInputStream extend
*** 105,111 ****
     * bytes supplied to the reader.  Please use caution in changing the 
     * contents of the buffer while this stream is open.
     *
!    * @param buf 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
     */
--- 105,111 ----
     * 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 class ByteArrayInputStream extend
*** 146,157 ****
     * 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 readAheadLimit)
    {
!     // readAheadLimit is ignored per Java Class Lib. book, p.220.
      mark = pos;
    }
  
--- 146,157 ----
     * 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;
    }
  
*************** public class ByteArrayInputStream extend
*** 197,215 ****
     * <p>
     * This method does not block.
     *
!    * @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.
     */
!   public synchronized int read(byte[] b, int off, int len)
    {
      if (pos >= count)
        return -1;
  
!     int numBytes = Math.min(count - pos, len);
!     System.arraycopy(buf, pos, b, off, numBytes);
      pos += numBytes;
      return numBytes;
    }
--- 197,215 ----
     * <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;
    }
*************** public class ByteArrayInputStream extend
*** 234,250 ****
     * position the stream at the end of the buffer.  The actual number
     * of bytes skipped is returned.
     *
!    * @param num_bytes The requested number of bytes to skip
     *
     * @return The actual number of bytes skipped.
     */
!   public synchronized long skip(long n)
    {
      // 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), n < 0 ? 0L : n);
      pos += numBytes;
      return numBytes;
    }
--- 234,250 ----
     * 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-3.4.3/libjava/java/io/ByteArrayOutputStream.java gcc-4.0.0/libjava/java/io/ByteArrayOutputStream.java
*** gcc-3.4.3/libjava/java/io/ByteArrayOutputStream.java	Sat Nov  8 13:41:20 2003
--- gcc-4.0.0/libjava/java/io/ByteArrayOutputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* BufferedReader.java
!    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BufferedReader.java
!    Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.io;
*** 66,72 ****
    * 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
--- 66,72 ----
    * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/CharArrayReader.java gcc-4.0.0/libjava/java/io/CharArrayReader.java
*** gcc-3.4.3/libjava/java/io/CharArrayReader.java	Sun Dec 28 11:54:17 2003
--- gcc-4.0.0/libjava/java/io/CharArrayReader.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* CharArrayReader.java -- Read an array of characters as a stream
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 42,48 ****
    * 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
  {
--- 42,48 ----
    * 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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/io/CharArrayWriter.java gcc-4.0.0/libjava/java/io/CharArrayWriter.java
*** gcc-3.4.3/libjava/java/io/CharArrayWriter.java	Sun Mar 23 19:11:18 2003
--- gcc-4.0.0/libjava/java/io/CharArrayWriter.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* CharArrayWriter.java -- Write chars to a buffer
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 50,57 ****
    * following two properties:
    * <p>
    * <ul>
!   * <li><xmp>gnu.java.io.CharArrayWriter.initialBufferSize</xmp>
!   * <li><xmp>gnu.java.io.CharArrayWriter.bufferIncrementSize</xmp>
    * </ul>
    * <p>
    * There is a constructor that specified the initial buffer size and
--- 50,57 ----
    * 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
*************** package java.io;
*** 60,66 ****
    * <p>
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Tom Tromey <tromey@cygnus.com>
    */
  public class CharArrayWriter extends Writer
  {
--- 60,66 ----
    * <p>
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Tom Tromey (tromey@cygnus.com)
    */
  public class CharArrayWriter extends Writer
  {
*************** public class CharArrayWriter extends Wri
*** 249,255 ****
     * application programmers by setting their initial buffer size big
     * enough to hold everything if possible.
     */
!   private final void resize (int len)
    {
      if (count + len >= buf.length)
        {
--- 249,255 ----
     * 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)
        {
diff -Nrcpad gcc-3.4.3/libjava/java/io/CharConversionException.java gcc-4.0.0/libjava/java/io/CharConversionException.java
*** gcc-3.4.3/libjava/java/io/CharConversionException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/CharConversionException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* CharConversionException.java -- Character conversion exceptions
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CharConversionException.java -- Character conversion exceptions
!    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.io;
*** 43,49 ****
   * 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
   */
--- 43,49 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/io/DataInput.java gcc-4.0.0/libjava/java/io/DataInput.java
*** gcc-3.4.3/libjava/java/io/DataInput.java	Sun Apr 20 22:47:43 2003
--- gcc-4.0.0/libjava/java/io/DataInput.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* DataInput.java -- Interface for reading data from a stream
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 48,54 ****
   * into Java primitive types. 
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Warren Levy <warrenl@cygnus.com>
   */
  public interface DataInput
  {
--- 48,54 ----
   * into Java primitive types. 
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Warren Levy (warrenl@cygnus.com)
   */
  public interface DataInput
  {
*************** public interface DataInput
*** 360,366 ****
     * 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
--- 360,366 ----
     * 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
*************** public interface DataInput
*** 375,393 ****
     * then they would be converted to a Java <code>char</code> like so:
     *
     * <code>
!    * (char)(((byte1 & 0x0F) << 12) + ((byte2 & 0x3F) + (byte3 & 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>\<llll>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>.
     * 
!    * @returns The <code>String</code> read
     *
     * @exception EOFException If end of file is reached before reading the 
     * String
--- 375,393 ----
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/DataInputStream.java gcc-4.0.0/libjava/java/io/DataInputStream.java
*** gcc-3.4.3/libjava/java/io/DataInputStream.java	Tue May 20 11:53:10 2003
--- gcc-4.0.0/libjava/java/io/DataInputStream.java	Thu Feb 17 07:48:32 2005
*************** package java.io;
*** 50,57 ****
   *
   * @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
--- 50,57 ----
   *
   * @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
*************** public class DataInputStream extends Fil
*** 277,292 ****
     * buffer
     * @exception IOException If any other error occurs
     */
!   public final void readFully (byte[] b, int off, int len) throws IOException
    {
      while (len > 0)
        {
  	// in.read will block until some data is available.
! 	int numread = in.read (b, off, len);
  	if (numread < 0)
  	  throw new EOFException ();
  	len -= numread;
! 	off += numread;
        }
    }
  
--- 277,295 ----
     * 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;
        }
    }
  
*************** public class DataInputStream extends Fil
*** 648,654 ****
     *
     * @see DataInput#readUTF
     */
!   public final static String readUTF (DataInput in) throws IOException
    {
      final int UTFlen = in.readUnsignedShort ();
      byte[] buf = new byte [UTFlen];
--- 651,657 ----
     *
     * @see DataInput#readUTF
     */
!   public static final String readUTF(DataInput in) throws IOException
    {
      final int UTFlen = in.readUnsignedShort ();
      byte[] buf = new byte [UTFlen];
diff -Nrcpad gcc-3.4.3/libjava/java/io/DataOutput.java gcc-4.0.0/libjava/java/io/DataOutput.java
*** gcc-3.4.3/libjava/java/io/DataOutput.java	Sun Apr 20 22:47:43 2003
--- gcc-4.0.0/libjava/java/io/DataOutput.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* DataOutput.java -- Interface for writing data from a stream
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 49,55 ****
   * by classes implementing the <code>DataInput</code> interface. 
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Tom Tromey <tromey@cygnus.com>
   *
   * @see DataInput
   */
--- 49,55 ----
   * by classes implementing the <code>DataInput</code> interface. 
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Tom Tromey (tromey@cygnus.com)
   *
   * @see DataInput
   */
diff -Nrcpad gcc-3.4.3/libjava/java/io/DataOutputStream.java gcc-4.0.0/libjava/java/io/DataOutputStream.java
*** gcc-3.4.3/libjava/java/io/DataOutputStream.java	Fri May  9 07:10:58 2003
--- gcc-4.0.0/libjava/java/io/DataOutputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* DataOutputStream.java -- Writes primitive Java datatypes to streams
!    Copyright (C) 1998, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 51,58 ****
   *
   * @see DataInputStream
   *
!  * @author Aaron M. Renn <arenn@urbanophile.com>
!  * @author Tom Tromey <tromey@cygnus.com>
   */
  public class DataOutputStream extends FilterOutputStream implements DataOutput
  {
--- 51,58 ----
   *
   * @see DataInputStream
   *
!  * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Tom Tromey (tromey@cygnus.com)
   */
  public class DataOutputStream extends FilterOutputStream implements DataOutput
  {
*************** public class DataOutputStream extends Fi
*** 404,410 ****
     *
     * @see DataInput#readUTF
     */
!   public synchronized final void writeUTF (String value) throws IOException
    {
      int len = value.length();
      int sum = 0;
--- 404,410 ----
     *
     * @see DataInput#readUTF
     */
!   public final synchronized void writeUTF(String value) throws IOException
    {
      int len = value.length();
      int sum = 0;
diff -Nrcpad gcc-3.4.3/libjava/java/io/EOFException.java gcc-4.0.0/libjava/java/io/EOFException.java
*** gcc-3.4.3/libjava/java/io/EOFException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/EOFException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* EOFException.java -- unexpected end of file exception
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 47,53 ****
   * 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
--- 47,53 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/Externalizable.java gcc-4.0.0/libjava/java/io/Externalizable.java
*** gcc-3.4.3/libjava/java/io/Externalizable.java	Sat Oct 11 18:38:12 2003
--- gcc-4.0.0/libjava/java/io/Externalizable.java	Tue Feb 22 18:58:50 2005
*************** package java.io;
*** 60,67 ****
   */
  public interface Externalizable extends Serializable
  {
-   long serialVersionUID = -282491828744381764L;
- 
    /**
     * 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
--- 60,65 ----
diff -Nrcpad gcc-3.4.3/libjava/java/io/File.java gcc-4.0.0/libjava/java/io/File.java
*** gcc-3.4.3/libjava/java/io/File.java	Wed Oct 22 08:47:12 2003
--- gcc-4.0.0/libjava/java/io/File.java	Fri Jan 14 21:12:46 2005
***************
*** 1,5 ****
  /* File.java -- Class representing a file on disk
!    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 40,47 ----
  package java.io;
  
  import java.net.MalformedURLException;
+ import java.net.URI;
+ import java.net.URISyntaxException;
  import java.net.URL;
  import gnu.classpath.Configuration;
  import gnu.gcj.runtime.FileDeleter;
*************** import gnu.gcj.runtime.FileDeleter;
*** 54,61 ****
   * 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
  {
--- 57,64 ----
   * 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
  {
*************** public class File implements Serializabl
*** 88,93 ****
--- 91,97 ----
     * An example separator string would be "/" on the GNU system.
     */
    public static final String separator = System.getProperty("file.separator");
+   private static final String dupSeparator = separator + separator;
  
    /**
     * This is the first character of the file separator string.  On many
*************** public class File implements Serializabl
*** 115,127 ****
    static final String tmpdir = System.getProperty("java.io.tmpdir");
    static int maxPathLen;
    static boolean caseSensitive;
-   static String dupSeparator = separator + separator;
    
    static
    {
      if (Configuration.INIT_LOAD_LIBRARY)
        {
!         System.loadLibrary ("javaio");
        }
      
      init_native();
--- 119,130 ----
    static final String tmpdir = System.getProperty("java.io.tmpdir");
    static int maxPathLen;
    static boolean caseSensitive;
    
    static
    {
      if (Configuration.INIT_LOAD_LIBRARY)
        {
!         System.loadLibrary("javaio");
        }
      
      init_native();
*************** public class File implements Serializabl
*** 187,193 ****
     * the path of this <code>File</code> object if an only if that file
     * does not already exist.
     * <p>
!    * A <code>SecurityManager</code>checkWrite</code> check is done prior
     * to performing this action.
     *
     * @return <code>true</code> if the file was created, <code>false</code> if
--- 190,196 ----
     * 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
*************** public class File implements Serializabl
*** 224,230 ****
      SecurityManager s = System.getSecurityManager();
      
      if (s != null)
!       s.checkDelete (path);
      
      return performDelete();
    }
--- 227,233 ----
      SecurityManager s = System.getSecurityManager();
      
      if (s != null)
!       s.checkDelete(path);
      
      return performDelete();
    }
*************** public class File implements Serializabl
*** 244,250 ****
     * @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;
--- 247,253 ----
     * @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;
*************** public class File implements Serializabl
*** 252,260 ****
      File other = (File) obj;
  
      if (caseSensitive)
!       return path.equals (other.path);
      else
!       return path.equalsIgnoreCase (other.path);
    }
  
    /**
--- 255,263 ----
      File other = (File) obj;
  
      if (caseSensitive)
!       return path.equals(other.path);
      else
!       return path.equalsIgnoreCase(other.path);
    }
  
    /**
*************** public class File implements Serializabl
*** 277,283 ****
     *
     * @param name The path name of the file
     */
!   public File (String name)
    {
      path = normalizePath (name);
    }
--- 280,286 ----
     *
     * @param name The path name of the file
     */
!   public File(String name)
    {
      path = normalizePath (name);
    }
*************** public class File implements Serializabl
*** 288,294 ****
      // On Windows, convert any '/' to '\'.  This appears to be the same logic
      // that Sun's Win32 Java performs.
      if (separatorChar == '\\')
!       p = p.replace ('/', '\\');
  
      int dupIndex = p.indexOf(dupSeparator);
      int plen = p.length();
--- 291,305 ----
      // 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();
*************** public class File implements Serializabl
*** 354,371 ****
     * @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 && 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
        path = normalizePath(name);
--- 365,405 ----
     * @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);
*************** public class File implements Serializabl
*** 381,392 ****
     * @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 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
--- 415,443 ----
     * @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
*************** public class File implements Serializabl
*** 448,454 ****
     */
    public File getAbsoluteFile()
    {
!     return new File (getAbsolutePath());
    }
  
    /**
--- 499,505 ----
     */
    public File getAbsoluteFile()
    {
!     return new File(getAbsolutePath());
    }
  
    /**
*************** public class File implements Serializabl
*** 479,485 ****
     */
    public File getCanonicalFile() throws IOException
    {
!     return new File (getCanonicalPath());
    }
  
    /**
--- 530,536 ----
     */
    public File getCanonicalFile() throws IOException
    {
!     return new File(getCanonicalPath());
    }
  
    /**
*************** public class File implements Serializabl
*** 582,588 ****
     * This method returns a <code>File</code> object representing the parent
     * file of this one.
     *
!    * @param A <code>File</code> for the parent of this object.  
     * <code>null</code>
     * will be returned if this object does not have a parent.
     *
--- 633,639 ----
     * 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.
     *
*************** public class File implements Serializabl
*** 591,597 ****
    public File getParentFile()
    {
      String parent = getParent();
!     return parent != null ? new File (parent) : null;
    }
  
    /**
--- 642,648 ----
    public File getParentFile()
    {
      String parent = getParent();
!     return parent != null ? new File(parent) : null;
    }
  
    /**
*************** public class File implements Serializabl
*** 748,754 ****
     * @exception SecurityException If read access is not allowed to the 
     * directory by the <code>SecurityManager</code>
     */
!   public String[] list (FilenameFilter filter)
    {
      checkRead();
      return (String[]) performList (filter, null, String.class);
--- 799,805 ----
     * @exception SecurityException If read access is not allowed to the 
     * directory by the <code>SecurityManager</code>
     */
!   public String[] list(FilenameFilter filter)
    {
      checkRead();
      return (String[]) performList (filter, null, String.class);
*************** public class File implements Serializabl
*** 826,832 ****
     *
     * @since 1.2
     */
!   public File[] listFiles (FilenameFilter filter)
    {
      checkRead();
      return (File[]) performList (filter, null, File.class);
--- 877,883 ----
     *
     * @since 1.2
     */
!   public File[] listFiles(FilenameFilter filter)
    {
      checkRead();
      return (File[]) performList (filter, null, File.class);
*************** public class File implements Serializabl
*** 856,862 ****
     *
     * @since 1.2
     */
!   public File[] listFiles (FileFilter filter)
    {
      checkRead();
      return (File[]) performList (null, filter, File.class);
--- 907,913 ----
     *
     * @since 1.2
     */
!   public File[] listFiles(FileFilter filter)
    {
      checkRead();
      return (File[]) performList (null, filter, File.class);
*************** public class File implements Serializabl
*** 874,879 ****
--- 925,951 ----
    }
  
    /**
+    * @return A <code>URI</code> for this object.
+    */
+   public URI toURI()
+   {
+     String abspath = getAbsolutePath();
+ 
+     if (isDirectory())
+       abspath = abspath + separator;
+         
+     try
+       {
+ 	return new URI("file", abspath.replace(separatorChar, '/'), null);
+       }
+     catch (URISyntaxException use)
+       {
+         // Can't happen.
+ 	throw new RuntimeException(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.
*************** public class File implements Serializabl
*** 982,989 ****
     *
     * @since 1.2
     */
!   public static File createTempFile (String prefix, String suffix,
! 				     File directory)
      throws IOException
    {
      // Grab the system temp directory if necessary
--- 1054,1061 ----
     *
     * @since 1.2
     */
!   public static File createTempFile(String prefix, String suffix,
! 				    File directory)
      throws IOException
    {
      // Grab the system temp directory if necessary
*************** public class File implements Serializabl
*** 991,1011 ****
        {
          String dirname = tmpdir;
          if (dirname == null)
!           throw new IOException ("Cannot determine system temporary directory"); 
  	
!         directory = new File (dirname);
          if (!directory.exists())
!           throw new IOException ("System temporary directory "
!                                  + directory.getName() + " does not exist.");
          if (!directory.isDirectory())
!           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)
--- 1063,1083 ----
        {
          String dirname = tmpdir;
          if (dirname == null)
!           throw new IOException("Cannot determine system temporary directory"); 
  	
!         directory = new File(dirname);
          if (!directory.exists())
!           throw new IOException("System temporary directory "
!                                 + directory.getName() + " does not exist.");
          if (!directory.isDirectory())
!           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)
*************** public class File implements Serializabl
*** 1066,1071 ****
--- 1138,1144 ----
     */
    public boolean setReadOnly()
    {
+     // Do a security check before trying to do anything else.
      checkWrite();
      return performSetReadOnly();
    }
*************** public class File implements Serializabl
*** 1146,1155 ****
     * this operation
     * @exception IOException If an error occurs
     */
!   public static File createTempFile (String prefix, String suffix)
      throws IOException
    {
!     return createTempFile (prefix, suffix, null);
    }
  
    /**
--- 1219,1228 ----
     * this operation
     * @exception IOException If an error occurs
     */
!   public static File createTempFile(String prefix, String suffix)
      throws IOException
    {
!     return createTempFile(prefix, suffix, null);
    }
  
    /**
*************** public class File implements Serializabl
*** 1168,1174 ****
     *
     * @since 1.2
     */
!   public int compareTo (File other)
    {
      if (caseSensitive)
        return path.compareTo (other.path);
--- 1241,1247 ----
     *
     * @since 1.2
     */
!   public int compareTo(File other)
    {
      if (caseSensitive)
        return path.compareTo (other.path);
*************** public class File implements Serializabl
*** 1197,1205 ****
     *
     * @since 1.2
     */
!   public int compareTo (Object obj)
    {
!     return compareTo ((File) obj);
    }
  
    /*
--- 1270,1278 ----
     *
     * @since 1.2
     */
!   public int compareTo(Object obj)
    {
!     return compareTo((File) obj);
    }
  
    /*
*************** public class File implements Serializabl
*** 1219,1225 ****
     * @exception SecurityException If write access is not allowed to the 
     * file by the <code>SecurityMananger</code>.
     */
!   public synchronized boolean renameTo (File dest)
    {
      SecurityManager s = System.getSecurityManager();
      String sname = getName();
--- 1292,1298 ----
     * @exception SecurityException If write access is not allowed to the 
     * file by the <code>SecurityMananger</code>.
     */
!   public synchronized boolean renameTo(File dest)
    {
      SecurityManager s = System.getSecurityManager();
      String sname = getName();
*************** public class File implements Serializabl
*** 1253,1259 ****
     *
     * @since 1.2
     */
!   public boolean setLastModified (long time) 
    {
      if (time < 0)
        throw new IllegalArgumentException("Negative modification time: " + time);
--- 1326,1332 ----
     *
     * @since 1.2
     */
!   public boolean setLastModified(long time) 
    {
      if (time < 0)
        throw new IllegalArgumentException("Negative modification time: " + time);
*************** public class File implements Serializabl
*** 1268,1274 ****
      SecurityManager s = System.getSecurityManager();
      
      if (s != null)
!       s.checkWrite (path);
    }
  
    private void checkRead()
--- 1341,1347 ----
      SecurityManager s = System.getSecurityManager();
      
      if (s != null)
!       s.checkWrite(path);
    }
  
    private void checkRead()
*************** public class File implements Serializabl
*** 1277,1288 ****
      SecurityManager s = System.getSecurityManager();
      
      if (s != null)
!       s.checkRead (path);
    }
  
    /** 
!    * Add this File to the set of files to be deleted upon normal
!    * termination.
     *
     * @exception SecurityException If deleting of the file is not allowed
     *
--- 1350,1363 ----
      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
     *
*************** public class File implements Serializabl
*** 1299,1311 ****
      FileDeleter.add (this);
    }
  
!   private void writeObject (ObjectOutputStream oos) throws IOException
    {
      oos.defaultWriteObject();
!     oos.writeChar (separatorChar);
    }
  
!   private void readObject (ObjectInputStream ois)
      throws ClassNotFoundException, IOException
    {
      ois.defaultReadObject();
--- 1374,1386 ----
      FileDeleter.add (this);
    }
  
!   private void writeObject(ObjectOutputStream oos) throws IOException
    {
      oos.defaultWriteObject();
!     oos.writeChar(separatorChar);
    }
  
!   private void readObject(ObjectInputStream ois)
      throws ClassNotFoundException, IOException
    {
      ois.defaultReadObject();
*************** public class File implements Serializabl
*** 1315,1321 ****
      char oldSeparatorChar = ois.readChar();
      
      if (oldSeparatorChar != separatorChar)
!       path = path.replace (oldSeparatorChar, separatorChar);
    }
    
  } // class File
--- 1390,1396 ----
      char oldSeparatorChar = ois.readChar();
      
      if (oldSeparatorChar != separatorChar)
!       path = path.replace(oldSeparatorChar, separatorChar);
    }
    
  } // class File
diff -Nrcpad gcc-3.4.3/libjava/java/io/FileDescriptor.java gcc-4.0.0/libjava/java/io/FileDescriptor.java
*** gcc-3.4.3/libjava/java/io/FileDescriptor.java	Tue May 13 09:13:31 2003
--- gcc-4.0.0/libjava/java/io/FileDescriptor.java	Mon Feb 21 08:31:01 2005
***************
*** 1,108 ****
! // FileDescriptor.java - Open file or device
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
!    This file is part of libgcj.
  
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
  
  package java.io;
  
  /**
!  * @author Tom Tromey <tromey@cygnus.com>
   * @date September 24, 1998 
   */
- 
- /* 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
-  */
- 
- // For now we assume a POSIXy file system.  This can be changed later
- // if need be.
  public final class FileDescriptor
  {
  
!   public static final FileDescriptor in = null;
!   public static final FileDescriptor out = null;
!   public static final FileDescriptor err = null;
! 
!   private static native void init();
!   static
!   {
!     init();
!   }
! 
!   public native void sync () throws SyncFailedException;
!   public native boolean valid ();
  
!   // These are mode values for open().
!   static final int READ   = 1;
!   static final int WRITE  = 2;
!   static final int APPEND = 4;
!   // EXCL is used only when making a temp file.
!   static final int EXCL   = 8;
!   static final int SYNC   = 16;
!   static final int DSYNC  = 32;
  
!   // These are WHENCE values for seek.
!   static final int SET = 0;
!   static final int CUR = 1;
  
!   // This constructor is specified to create an invalid descriptor.
!   public FileDescriptor ()
    {
    }
  
!   // Open a file.  MODE is a combination of the above mode flags.
!   FileDescriptor (String path, int mode) throws FileNotFoundException
    {
!     fd = open (path, mode);
    }
  
-   native int open (String path, int mode) throws FileNotFoundException;
-   native void write (int b) throws IOException;
-   native void write (byte[] b, int offset, int len)
-     throws IOException, NullPointerException, IndexOutOfBoundsException;
-   native void close () throws IOException;
-   native void setLength (long pos) throws IOException;
-   // EOF_TRUNC is true if a request to seek past the end of file
-   // should actually stop at the end of file.  If false, then a seek
-   // past the end is ok (and if a subsequent write occurs the file
-   // will grow).
-   native int seek (long pos, int whence, boolean eof_trunc) throws IOException;
-   native long getLength () throws IOException;
-   native long getFilePointer () throws IOException;
-   native int read () throws IOException;
-   native int read (byte[] bytes, int offset, int len) throws IOException;
-   native int available () throws IOException;
- 
  
!   // When collected, close.
!   protected void finalize () throws Throwable
    {
!     if (valid ())
!       close ();
    }
  
!   // Attach to an already-opened file.  This is not private because we
!   // need access to it from other packages, for instance java.net.
!   // Ordinarily that wouldn't work, either, but in our case we know
!   // the access comes from C++, where "package private" is translated
!   // into "public".  Eww.
!   FileDescriptor (int desc)
    {
!     fd = desc;
    }
- 
-   // 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 long position = 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., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
! 
! Linking this library statically or dynamically with other modules is
! making a combined work based on this library.  Thus, the terms and
! conditions of the GNU General Public License cover the whole
! combination.
! 
! As a special exception, the copyright holders of this library give you
! permission to link this library with independent modules to produce an
! executable, regardless of the license terms of these independent
! modules, and to copy and distribute the resulting executable under
! terms of your choice, provided that you also meet, for each linked
! independent module, the terms and conditions of the license of that
! module.  An independent module is a module which is not derived from
! or based on this library.  If you modify this library, you may extend
! this exception to your version of the library, but 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-3.4.3/libjava/java/io/FileInputStream.java gcc-4.0.0/libjava/java/io/FileInputStream.java
*** gcc-3.4.3/libjava/java/io/FileInputStream.java	Fri Dec 26 21:11:03 2003
--- gcc-4.0.0/libjava/java/io/FileInputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* FileInputStream.java -- An input stream that reads from disk files.
!    Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.io;
  
  import java.nio.channels.FileChannel;
- import java.nio.channels.FileChannelImpl;
  
  /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
   * "The Java Language Specification", ISBN 0-201-63451-1
--- 38,46 ----
  
  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
*************** import java.nio.channels.FileChannelImpl
*** 50,57 ****
  /**
   * 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
  {
--- 51,58 ----
  /**
   * 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
  {
*************** public class FileInputStream extends Inp
*** 60,66 ****
     */
    private FileDescriptor fd;
  
!   private FileChannel ch;  /* cached associated file-channel */
  
    /**
     * This method initializes a <code>FileInputStream</code> to read from the
--- 61,67 ----
     */
    private FileDescriptor fd;
  
!   private FileChannelImpl ch;
  
    /**
     * This method initializes a <code>FileInputStream</code> to read from the
*************** public class FileInputStream extends Inp
*** 107,113 ****
      if (file.isDirectory())
        throw new FileNotFoundException(file.getPath() + " is a directory");
  
!     fd = new FileDescriptor(file.getPath(), FileDescriptor.READ);
    }
  
    /**
--- 108,114 ----
      if (file.isDirectory())
        throw new FileNotFoundException(file.getPath() + " is a directory");
  
!     ch = new FileChannelImpl (file.getPath(), FileChannelImpl.READ);
    }
  
    /**
*************** public class FileInputStream extends Inp
*** 121,127 ****
     * An exception is 
     * thrown if reading is not allowed.
     *
!    * @param fd The <code>FileDescriptor</code> object this stream 
     * should read from
     *
     * @exception SecurityException If read access to the file is not allowed
--- 122,128 ----
     * 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 class FileInputStream extends Inp
*** 133,138 ****
--- 134,145 ----
        s.checkRead(fdObj);
  
      fd = fdObj;
+     ch = (FileChannelImpl) fdObj.channel;
+   }
+ 
+   FileInputStream(FileChannelImpl ch)
+   {
+     this.ch = ch;
    }
  
    /**
*************** public class FileInputStream extends Inp
*** 156,162 ****
     */
    public int available() throws IOException
    {
!     return fd.available();
    }
  
    /**
--- 163,169 ----
     */
    public int available() throws IOException
    {
!     return ch.available();
    }
  
    /**
*************** public class FileInputStream extends Inp
*** 168,175 ****
     */
    public void close() throws IOException
    {
!     if (fd.valid())
!       fd.close();
    }
  
    protected void finalize() throws IOException
--- 175,181 ----
     */
    public void close() throws IOException
    {
!     ch.close();
    }
  
    protected void finalize() throws IOException
*************** public class FileInputStream extends Inp
*** 189,197 ****
     */
    public final FileDescriptor getFD() throws IOException
    {
!     if (!fd.valid())
!       throw new IOException();
!     return fd;
    }
  
    /**
--- 195,206 ----
     */
    public final FileDescriptor getFD() throws IOException
    {
!     synchronized (this)
!       {
! 	if (fd == null)
! 	  fd = new FileDescriptor (ch);
! 	return fd;
!       }
    }
  
    /**
*************** public class FileInputStream extends Inp
*** 207,213 ****
     */
    public int read() throws IOException
    {
!     return fd.read();
    }
  
    /**
--- 216,222 ----
     */
    public int read() throws IOException
    {
!     return ch.read();
    }
  
    /**
*************** public class FileInputStream extends Inp
*** 258,264 ****
          || offset + len > buf.length)
        throw new ArrayIndexOutOfBoundsException();
  
!     return fd.read(buf, offset, len);
    }
  
    /**
--- 267,273 ----
          || offset + len > buf.length)
        throw new ArrayIndexOutOfBoundsException();
  
!     return ch.read(buf, offset, len);
    }
  
    /**
*************** public class FileInputStream extends Inp
*** 281,289 ****
      if (numBytes == 0)
        return 0;
  
!     long curPos = fd.getFilePointer ();
!     long newPos = fd.seek (numBytes, FileDescriptor.CUR, true);
!     return newPos - curPos;
    }
  
    /**
--- 290,298 ----
      if (numBytes == 0)
        return 0;
  
!     long oldPos = ch.position ();
!     ch.position(oldPos + numBytes);
!     return ch.position() - oldPos;
    }
  
    /**
*************** public class FileInputStream extends Inp
*** 294,302 ****
     */
    public synchronized FileChannel getChannel () 
    {
-     if (ch == null)
-       ch = new FileChannelImpl (fd, false, this);
-     
      return ch;
    }
  
--- 303,308 ----
diff -Nrcpad gcc-3.4.3/libjava/java/io/FileNotFoundException.java gcc-4.0.0/libjava/java/io/FileNotFoundException.java
*** gcc-3.4.3/libjava/java/io/FileNotFoundException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/FileNotFoundException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* FileNotFoundException.java -- the requested file could not be found
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 43,50 ****
   * 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
--- 43,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/FileOutputStream.java gcc-4.0.0/libjava/java/io/FileOutputStream.java
*** gcc-3.4.3/libjava/java/io/FileOutputStream.java	Sun Jul 13 16:53:05 2003
--- gcc-4.0.0/libjava/java/io/FileOutputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* FileOutputStream.java -- Writes to a file on disk.
!    Copyright (C) 1998, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.io;
  
  import java.nio.channels.FileChannel;
- import java.nio.channels.FileChannelImpl;
  
  /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
   * "The Java Language Specification", ISBN 0-201-63451-1
--- 38,46 ----
  
  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
*************** import java.nio.channels.FileChannelImpl
*** 50,63 ****
   * 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 FileChannel ch; /* cached associated file-channel */
  
    /**
     * This method initializes a <code>FileOutputStream</code> object to write
--- 51,64 ----
   * 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
*************** public class FileOutputStream extends Ou
*** 71,77 ****
     * one exists) with the name of the file to be opened.  An exception is
     * thrown if writing is not allowed. 
     *
!    * @param name 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
     *
--- 72,78 ----
     * 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
     *
*************** public class FileOutputStream extends Ou
*** 81,93 ****
    public FileOutputStream (String path, boolean append)
      throws SecurityException, FileNotFoundException
    {
!     SecurityManager s = System.getSecurityManager();
!     if (s != null)
!       s.checkWrite(path);
!     fd = new FileDescriptor (path, (append
! 				    ? FileDescriptor.WRITE
! 				      | FileDescriptor.APPEND
! 				    : FileDescriptor.WRITE));
    }
  
    /**
--- 82,88 ----
    public FileOutputStream (String path, boolean append)
      throws SecurityException, FileNotFoundException
    {
!     this (new File(path), append);
    }
  
    /**
*************** public class FileOutputStream extends Ou
*** 100,106 ****
     * one exists) with the name of the file to be opened.  An exception is
     * thrown if writing is not allowed. 
     *
!    * @param name 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
--- 95,101 ----
     * 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 class FileOutputStream extends Ou
*** 130,136 ****
    public FileOutputStream (File file)
      throws SecurityException, FileNotFoundException
    {
!     this (file.getPath(), false);
    }
  
    /**
--- 125,131 ----
    public FileOutputStream (File file)
      throws SecurityException, FileNotFoundException
    {
!     this (file, false);
    }
  
    /**
*************** public class FileOutputStream extends Ou
*** 156,162 ****
    public FileOutputStream (File file, boolean append)
      throws FileNotFoundException
    {
!     this (file.getPath(), append);
    }
  
    /**
--- 151,167 ----
    public FileOutputStream (File file, boolean append)
      throws FileNotFoundException
    {
!     SecurityManager s = System.getSecurityManager();
!     if (s != null)
!       s.checkWrite(file.getPath());
! 
!     if (file.isDirectory())
!       throw new FileNotFoundException(file.getPath() + " is a directory");
! 
!    ch = new FileChannelImpl (file.getPath(), (append
! 				     ? FileChannelImpl.WRITE
! 				     | FileChannelImpl.APPEND
! 				     : FileChannelImpl.WRITE));
    }
  
    /**
*************** public class FileOutputStream extends Ou
*** 171,177 ****
     * one exists) with the specified <code>FileDescriptor</code> as an argument.
     * An exception is thrown if writing is not allowed. 
     *
!    * @param file The <code>FileDescriptor</code> this stream should write to
     *
     * @exception SecurityException If write access to the file is not allowed
     */
--- 176,182 ----
     * 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 class FileOutputStream extends Ou
*** 188,193 ****
--- 193,204 ----
        s.checkWrite(fdObj);
  
      fd = fdObj;
+     ch = (FileChannelImpl) fdObj.channel;
+   }
+ 
+   FileOutputStream(FileChannelImpl ch)
+   {
+     this.ch = ch;
    }
  
    protected void finalize () throws IOException
*************** public class FileOutputStream extends Ou
*** 206,214 ****
     */
    public final FileDescriptor getFD () throws IOException
    {
!     if (! fd.valid())
!       throw new IOException ();
!     return fd;
    }
  
    /**
--- 217,228 ----
     */
    public final FileDescriptor getFD () throws IOException
    {
!     synchronized (this)
!       {
! 	if (fd == null)
! 	  fd = new FileDescriptor (ch);
! 	return fd;
!       }
    }
  
    /**
*************** public class FileOutputStream extends Ou
*** 220,226 ****
     */
    public void write (int b) throws IOException
    {
!     fd.write (b);
    }
  
    /**
--- 234,240 ----
     */
    public void write (int b) throws IOException
    {
!     ch.write (b);
    }
  
    /**
*************** public class FileOutputStream extends Ou
*** 255,261 ****
          || offset + len > buf.length)
        throw new ArrayIndexOutOfBoundsException ();
      
!     fd.write (buf, offset, len);
    }
  
    /**
--- 269,275 ----
          || offset + len > buf.length)
        throw new ArrayIndexOutOfBoundsException ();
      
!     ch.write (buf, offset, len);
    }
  
    /**
*************** public class FileOutputStream extends Ou
*** 267,274 ****
     */
    public void close () throws IOException
    {
!     if (fd.valid())
!       fd.close();
    }
  
    /**
--- 281,287 ----
     */
    public void close () throws IOException
    {
!     ch.close();
    }
  
    /**
*************** public class FileOutputStream extends Ou
*** 279,287 ****
     */
    public synchronized FileChannel getChannel() 
    {
-     if (ch == null)
-       ch = new FileChannelImpl (fd, true, this);
- 
      return ch;
    }
  
--- 292,297 ----
diff -Nrcpad gcc-3.4.3/libjava/java/io/FilePermission.java gcc-4.0.0/libjava/java/io/FilePermission.java
*** gcc-3.4.3/libjava/java/io/FilePermission.java	Thu Dec  4 20:09:57 2003
--- gcc-4.0.0/libjava/java/io/FilePermission.java	Sat Nov  6 23:07:45 2004
***************
*** 1,5 ****
  /* java.lang.FilePermission
!    Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.lang.FilePermission
!    Copyright (C) 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public final class FilePermission extend
*** 46,304 ****
  
    private static final String CURRENT_DIRECTORY = 
      System.getProperty("user.dir");
!   private boolean usingPerms = false;
    private boolean readPerm = false;
    private boolean writePerm = false;
    private boolean executePerm = false;
    private boolean deletePerm = false;
!   private String actionsString;
!   
!   private void cachePerms() 
    {
-     // While race conditions could occur, they don't matter at all.
-     
      String action;
      int i = actionsString.indexOf(',');
      int startI = 0;
!     while(i != -1) 
        {
!         action = actionsString.substring(startI,i);
!         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;
        
!         startI = i+1;
!         i = actionsString.indexOf(',',startI);
        }
!     
!     action = actionsString.substring(startI);
!     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;
    }
!   
!   /** 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.
!    ** FIXME: what to do when the file string is malformed?
!    **/
    public FilePermission(String pathExpression, String actionsString) 
    {
      super(pathExpression);
      this.actionsString = actionsString;
    }
    
!   /** 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;
!     if(!usingPerms)
!       cachePerms();
!     if(!p.usingPerms)
!       p.cachePerms();
!     
      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) 
    {
      FilePermission fp;
!     
!     if(!(p instanceof FilePermission))
        return false;
!     
!     fp = (FilePermission)p;
!     
      String f1 = getName();
      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 */
! 	      String sub2 = f2.substring(sub1.length()+1);
! 	      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 '-':
!           sub1 = f1.substring(0,f1.length() - 2); // chop off "/-"
!           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;
! /* Looks redundant with default case and won't compile anyway - arenn
!     case File.separatorChar:
!       if(f2.charAt(f2.length()) == File.separatorChar) {
! 	if(!f2.equals(f1))
  	  return false;
!       } else {
! 	if(!f2.equals(f1.substring(0,f1.length()-1)))
  	  return false;
        }
!       break;
! */
!         default:
!           if(f2.charAt(f2.length()) == File.separatorChar) 
!             {
!               if(!f1.equals(f2.substring(0,f2.length()-1)))
! 	        return false;
!             } 
!           else 
!             {
! 	      if(!f1.equals(f2))
! 	        return false;
!             }
!          break;
!       }
!     
!     if(!usingPerms)
!       cachePerms();
!     if(!fp.usingPerms)
!       fp.cachePerms();
!     
!     if(readPerm && !fp.readPerm)
        return false;
!     if(writePerm && !fp.writePerm)
        return false;
!     if(executePerm && !fp.executePerm)
        return false;
!     if(deletePerm && !fp.deletePerm)
        return false;
      
      return true;
    }
! } // class FilePermission
! 
--- 46,289 ----
  
    private static final String CURRENT_DIRECTORY = 
      System.getProperty("user.dir");
! 
    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) 
    {
      FilePermission fp;
! 
!     if (! (p instanceof FilePermission))
        return false;
! 
!     fp = (FilePermission) p;
! 
      String f1 = getName();
      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 (readPerm && ! fp.readPerm)
        return false;
!     if (writePerm && ! fp.writePerm)
        return false;
!     if (executePerm && ! fp.executePerm)
        return false;
!     if (deletePerm && ! fp.deletePerm)
        return false;
      
      return true;
    }
! }
diff -Nrcpad gcc-3.4.3/libjava/java/io/FileWriter.java gcc-4.0.0/libjava/java/io/FileWriter.java
*** gcc-3.4.3/libjava/java/io/FileWriter.java	Sun Mar 23 19:11:19 2003
--- gcc-4.0.0/libjava/java/io/FileWriter.java	Tue Nov 16 11:30:11 2004
***************
*** 1,5 ****
  /* FileWriter.java -- Convenience class for writing to files.
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 49,144 ****
    * <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
  {
- 
-   /*
-    * Constructors
-    */
-    
    /**
!     * 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 SecurityException If writing to this file is forbidden by the
!     *                          <code>SecurityManager</code>.
!     * @param 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.
!     *
!     * @param SecurityException If writing to this file is forbidden by the
!     *                          <code>SecurityManager</code>.
!     * @param 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
!     *
!     * @param 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
!     *
!     * @param SecurityException If writing to this file is forbidden by the
!     *                          <code>SecurityManager</code>.
!     * @param 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 determin 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.
!     *
!     * @param SecurityException If writing to this file is forbidden by the
!     *                          <code>SecurityManager</code>.
!     * @param IOException If any other error occurs
!     */
    public FileWriter(String name, boolean append) throws IOException
    {
      super(new FileOutputStream(name, append));
    }
! 
! } // class FileWriter
! 
--- 49,137 ----
    * <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 determin 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-3.4.3/libjava/java/io/FilenameFilter.java gcc-4.0.0/libjava/java/io/FilenameFilter.java
*** gcc-3.4.3/libjava/java/io/FilenameFilter.java	Mon Apr  7 12:25:08 2003
--- gcc-4.0.0/libjava/java/io/FilenameFilter.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* FilenameFilter.java -- Filter a list of filenames
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 53,59 ****
   * 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)
--- 53,59 ----
   * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/io/FilterInputStream.java gcc-4.0.0/libjava/java/io/FilterInputStream.java
*** gcc-3.4.3/libjava/java/io/FilterInputStream.java	Sun Mar 23 19:11:19 2003
--- gcc-4.0.0/libjava/java/io/FilterInputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* FilterInputStream.java -- Base class for classes that filter input
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 65,71 ****
    * <code>InputStream read(byte[])</code> method.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy <warrenl@cygnus.com>
    */
  public class FilterInputStream extends InputStream
  {
--- 65,71 ----
    * <code>InputStream read(byte[])</code> method.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy (warrenl@cygnus.com)
    */
  public class FilterInputStream extends InputStream
  {
*************** public class FilterInputStream extends I
*** 104,110 ****
      */
    public boolean markSupported()
    {
!     return(in.markSupported());
    }
  
    /**
--- 104,110 ----
      */
    public boolean markSupported()
    {
!     return in.markSupported();
    }
  
    /**
*************** public class FilterInputStream extends I
*** 126,132 ****
      */
    public int available() throws IOException
    {
!     return(in.available());
    }
  
    /**
--- 126,132 ----
      */
    public int available() throws IOException
    {
!     return in.available();
    }
  
    /**
*************** public class FilterInputStream extends I
*** 138,146 ****
      *
      * @exception IOException If an error occurs
      */
!   public long skip(long num_bytes) throws IOException
    {
!     return(in.skip(num_bytes));
    }
  
    /**
--- 138,146 ----
      *
      * @exception IOException If an error occurs
      */
!   public long skip(long numBytes) throws IOException
    {
!     return in.skip(numBytes);
    }
  
    /**
*************** public class FilterInputStream extends I
*** 152,158 ****
      */
    public int read() throws IOException
    {
!     return(in.read());
    }
  
    /**
--- 152,158 ----
      */
    public int read() throws IOException
    {
!     return in.read();
    }
  
    /**
*************** public class FilterInputStream extends I
*** 170,176 ****
      */
    public int read(byte[] buf) throws IOException
    {
!     return(read(buf, 0, buf.length));
    }
  
    /**
--- 170,176 ----
      */
    public int read(byte[] buf) throws IOException
    {
!     return read(buf, 0, buf.length);
    }
  
    /**
*************** public class FilterInputStream extends I
*** 186,192 ****
      */
    public int read(byte[] buf, int offset, int len) throws IOException
    {
!     return(in.read(buf, offset, len));
    }
  
    /**
--- 186,192 ----
      */
    public int read(byte[] buf, int offset, int len) throws IOException
    {
!     return in.read(buf, offset, len);
    }
  
    /**
*************** public class FilterInputStream extends I
*** 200,205 ****
    {
      in.close();
    }
! 
! } // class FilterInputStream
! 
--- 200,203 ----
    {
      in.close();
    }
! }
diff -Nrcpad gcc-3.4.3/libjava/java/io/FilterOutputStream.java gcc-4.0.0/libjava/java/io/FilterOutputStream.java
*** gcc-3.4.3/libjava/java/io/FilterOutputStream.java	Sun Mar 23 19:11:19 2003
--- gcc-4.0.0/libjava/java/io/FilterOutputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* FilterOutputStream.java -- Parent class for output streams that filter
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 52,58 ****
    * underlying stream.  Subclasses provide actual filtering.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Tom Tromey <tromey@cygnus.com>
    */
  public class FilterOutputStream extends OutputStream
  {
--- 52,58 ----
    * underlying stream.  Subclasses provide actual filtering.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Tom Tromey (tromey@cygnus.com)
    */
  public class FilterOutputStream extends OutputStream
  {
diff -Nrcpad gcc-3.4.3/libjava/java/io/FilterReader.java gcc-4.0.0/libjava/java/io/FilterReader.java
*** gcc-3.4.3/libjava/java/io/FilterReader.java	Sun Mar 23 19:11:19 2003
--- gcc-4.0.0/libjava/java/io/FilterReader.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* FilterReader.java -- Base class for char stream classes that filter input
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 59,65 ****
    * <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
  {
--- 59,65 ----
    * <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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/io/FilterWriter.java gcc-4.0.0/libjava/java/io/FilterWriter.java
*** gcc-3.4.3/libjava/java/io/FilterWriter.java	Sun Mar 23 19:11:19 2003
--- gcc-4.0.0/libjava/java/io/FilterWriter.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* FilterWriter.java -- Parent class for output streams that filter
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 52,58 ****
    * 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
  {
--- 52,58 ----
    * 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
  {
*************** public abstract class FilterWriter exten
*** 72,78 ****
      */
    protected FilterWriter(Writer out)
    {
!     super(out);
      this.out = out;
    }
  
--- 72,78 ----
      */
    protected FilterWriter(Writer out)
    {
!     super(out.lock);
      this.out = out;
    }
  
diff -Nrcpad gcc-3.4.3/libjava/java/io/IOException.java gcc-4.0.0/libjava/java/io/IOException.java
*** gcc-3.4.3/libjava/java/io/IOException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/IOException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* IOException.java -- Generic input/output exception
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* IOException.java -- Generic input/output exception
!    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.io;
*** 45,51 ****
    * 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
--- 45,51 ----
    * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/InputStream.java gcc-4.0.0/libjava/java/io/InputStream.java
*** gcc-3.4.3/libjava/java/io/InputStream.java	Tue Jan 22 22:40:14 2002
--- gcc-4.0.0/libjava/java/io/InputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* InputStream.java -- Base class for input
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InputStream.java -- Base class for input
!    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.io;
*** 46,52 ****
    * or network connection.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy <warrenl@cygnus.com>
    */
  public abstract class InputStream
  {
--- 46,52 ----
    * or network connection.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy (warrenl@cygnus.com)
    */
  public abstract class InputStream
  {
*************** public abstract class InputStream
*** 105,111 ****
     * @param readLimit The number of bytes that can be read before the
     *                  mark becomes invalid
     */
!   public void mark(int readlimit)
    {
      // Do nothing
    }
--- 105,111 ----
     * @param readLimit The number of bytes that can be read before the
     *                  mark becomes invalid
     */
!   public void mark(int readLimit)
    {
      // Do nothing
    }
*************** public abstract class InputStream
*** 117,123 ****
     * 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
--- 117,123 ----
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/InputStreamReader.java gcc-4.0.0/libjava/java/io/InputStreamReader.java
*** gcc-3.4.3/libjava/java/io/InputStreamReader.java	Fri May  9 07:10:58 2003
--- gcc-4.0.0/libjava/java/io/InputStreamReader.java	Wed Mar  9 21:20:43 2005
***************
*** 1,5 ****
  /* InputStreamReader.java -- Reader than transforms bytes to chars
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import gnu.gcj.convert.*;
*** 56,73 ****
   * 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>
   * <p>
   * It is recommended that applications do not use 
--- 56,73 ----
   * 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 
*************** import gnu.gcj.convert.*;
*** 82,88 ****
   * @see InputStream
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner <bothner@cygnus.com>
   * @date April 22, 1998.  
   */
  public class InputStreamReader extends Reader
--- 82,88 ----
   * @see InputStream
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner (bothner@cygnus.com)
   * @date April 22, 1998.  
   */
  public class InputStreamReader extends Reader
*************** public class InputStreamReader extends R
*** 170,176 ****
     * by this object.  If the stream has been closed, this method is allowed
     * to return <code>null</code>.
     *
!    * @param The current encoding name
     */
    public String getEncoding()
    {
--- 170,176 ----
     * 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()
    {
*************** public class InputStreamReader extends R
*** 231,240 ****
  	int wavail = wcount - wpos;
  	if (wavail <= 0)
  	  {
! 	    // Nothing waiting, so refill our buffer.
! 	    if (! refill ())
! 	      return -1;
! 	    wavail = wcount - wpos;
  	  }
  
  	if (length > wavail)
--- 231,238 ----
  	int wavail = wcount - wpos;
  	if (wavail <= 0)
  	  {
! 	    // Nothing waiting, so refill their buffer.
! 	    return refill(buf, offset, length);
  	  }
  
  	if (length > wavail)
*************** public class InputStreamReader extends R
*** 262,306 ****
  	int wavail = wcount - wpos;
  	if (wavail <= 0)
  	  {
! 	    // Nothing waiting, so refill our buffer.
! 	    if (! refill ())
  	      return -1;
  	  }
  
  	return work[wpos++];
        }
    }
  
!   // Read more bytes and convert them into the WORK buffer.
!   // Return false on EOF.
!   private boolean refill () throws IOException
    {
-     wcount = wpos = 0;
- 
-     if (work == null)
-       work = new char[100];
- 
      for (;;)
        {
  	// We have knowledge of the internals of BufferedInputStream
  	// here.  Eww.
- 	in.mark (0);
  	// BufferedInputStream.refill() can only be called when
  	// `pos>=count'.
  	boolean r = in.pos < in.count || in.refill ();
- 	in.reset ();
  	if (! r)
! 	  return false;
  	converter.setInput(in.buf, in.pos, in.count);
! 	int count = converter.read (work, wpos, work.length - wpos);
  	in.skip(converter.inpos - in.pos);
  	if (count > 0)
! 	  {
! 	    wcount += count;
! 	    return true;
! 	  }
        }
    }
! 
! } // class InputStreamReader
! 
--- 260,297 ----
  	int wavail = wcount - wpos;
  	if (wavail <= 0)
  	  {
! 	    // Nothing waiting, so refill our internal buffer.
! 	    wpos = wcount = 0;
! 	    if (work == null)
! 	       work = new char[100];
! 	    int count = refill(work, 0, work.length);
! 	    if (count == -1)
  	      return -1;
+ 	    wcount += count;
  	  }
  
  	return work[wpos++];
        }
    }
  
!   // Read more bytes and convert them into the specified buffer.
!   // Returns the number of converted characters or -1 on EOF.
!   private int refill(char[] buf, int offset, int length) throws IOException
    {
      for (;;)
        {
  	// We have knowledge of the internals of BufferedInputStream
  	// here.  Eww.
  	// BufferedInputStream.refill() can only be called when
  	// `pos>=count'.
  	boolean r = in.pos < in.count || in.refill ();
  	if (! r)
! 	  return -1;
  	converter.setInput(in.buf, in.pos, in.count);
! 	int count = converter.read(buf, offset, length);
  	in.skip(converter.inpos - in.pos);
  	if (count > 0)
! 	  return count;
        }
    }
! }
diff -Nrcpad gcc-3.4.3/libjava/java/io/InterruptedIOException.java gcc-4.0.0/libjava/java/io/InterruptedIOException.java
*** gcc-3.4.3/libjava/java/io/InterruptedIOException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/InterruptedIOException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* InterruptedIOException.java -- an I/O operation was interrupted
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 43,50 ****
    * 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
    */
--- 43,50 ----
    * 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
    */
diff -Nrcpad gcc-3.4.3/libjava/java/io/LineNumberInputStream.java gcc-4.0.0/libjava/java/io/LineNumberInputStream.java
*** gcc-3.4.3/libjava/java/io/LineNumberInputStream.java	Sun Mar 23 19:11:19 2003
--- gcc-4.0.0/libjava/java/io/LineNumberInputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* LineNumberInputStream.java -- An input stream which counts line numbers
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 67,73 ****
   * 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
  {
--- 67,73 ----
   * 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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/io/LineNumberReader.java gcc-4.0.0/libjava/java/io/LineNumberReader.java
*** gcc-3.4.3/libjava/java/io/LineNumberReader.java	Tue Dec 30 13:21:16 2003
--- gcc-4.0.0/libjava/java/io/LineNumberReader.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* LineNumberReader.java -- A character input stream which counts line numbers
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 52,60 ****
   * 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
--- 52,60 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/ObjectInputStream.java gcc-4.0.0/libjava/java/io/ObjectInputStream.java
*** gcc-3.4.3/libjava/java/io/ObjectInputStream.java	Fri Jan  9 08:58:58 2004
--- gcc-4.0.0/libjava/java/io/ObjectInputStream.java	Tue Feb 22 03:13:31 2005
***************
*** 1,5 ****
  /* ObjectInputStream.java -- Class used to read serialized objects
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,61 ****
  
  package java.io;
  
  import java.lang.reflect.Array;
  import java.lang.reflect.Modifier;
  import java.lang.reflect.Proxy;
- import java.security.PrivilegedAction;
  import java.security.AccessController;
  import java.util.Arrays;
  import java.util.Hashtable;
  import java.util.Vector;
  
- 
- import gnu.java.io.ObjectIdentityWrapper;
- import gnu.java.lang.reflect.TypeSignature;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.lang.reflect.InvocationTargetException;
- 
- import gnu.classpath.Configuration;
- 
  public class ObjectInputStream extends InputStream
    implements ObjectInput, ObjectStreamConstants
  {
--- 39,60 ----
  
  package java.io;
  
+ import gnu.classpath.Configuration;
+ 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.Vector;
  
  public class ObjectInputStream extends InputStream
    implements ObjectInput, ObjectStreamConstants
  {
*************** public class ObjectInputStream extends I
*** 138,144 ****
      this.isDeserializing = true;
  
      byte marker = this.realInputStream.readByte();
!     dumpElement("MARKER: 0x" + Integer.toHexString(marker) + " ");
  
      try
        {
--- 137,146 ----
      this.isDeserializing = true;
  
      byte marker = this.realInputStream.readByte();
! 
!     depth += 2;
! 
!     if(dump) dumpElement("MARKER: 0x" + Integer.toHexString(marker) + " ");
  
      try
        {
*************** public class ObjectInputStream extends I
*** 155,179 ****
  	  case TC_BLOCKDATALONG:
  	    {
  	      if (marker == TC_BLOCKDATALONG)
! 		dumpElementln("BLOCKDATALONG");
  	      else
! 		dumpElementln("BLOCKDATA");
  	      readNextBlock(marker);
  	      throw new StreamCorruptedException("Unexpected blockData");
  	    }
  
  	  case TC_NULL:
  	    {
! 	      dumpElementln("NULL");
  	      ret_val = null;
  	      break;
  	    }
  
  	  case TC_REFERENCE:
  	    {
! 	      dumpElement("REFERENCE ");
  	      Integer oid = new Integer(this.realInputStream.readInt());
! 	      dumpElementln(Integer.toHexString(oid.intValue()));
  	      ret_val = ((ObjectIdentityWrapper)
  			 this.objectLookupTable.get(oid)).object;
  	      break;
--- 157,181 ----
  	  case TC_BLOCKDATALONG:
  	    {
  	      if (marker == TC_BLOCKDATALONG)
! 		{ if(dump) dumpElementln("BLOCKDATALONG"); }
  	      else
! 		{ if(dump) dumpElementln("BLOCKDATA"); }
  	      readNextBlock(marker);
  	      throw new StreamCorruptedException("Unexpected blockData");
  	    }
  
  	  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;
*************** public class ObjectInputStream extends I
*** 181,187 ****
  
  	  case TC_CLASS:
  	    {
! 	      dumpElementln("CLASS");
  	      ObjectStreamClass osc = (ObjectStreamClass)readObject();
  	      Class clazz = osc.forClass();
  	      assignNewHandle(clazz);
--- 183,189 ----
  
  	  case TC_CLASS:
  	    {
! 	      if(dump) dumpElementln("CLASS");
  	      ObjectStreamClass osc = (ObjectStreamClass)readObject();
  	      Class clazz = osc.forClass();
  	      assignNewHandle(clazz);
*************** public class ObjectInputStream extends I
*** 191,197 ****
  
  	  case TC_PROXYCLASSDESC:
  	    {
! 	      dumpElementln("PROXYCLASS");
  	      int n_intf = this.realInputStream.readInt();
  	      String[] intfs = new String[n_intf];
  	      for (int i = 0; i < n_intf; i++)
--- 193,199 ----
  
  	  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++)
*************** public class ObjectInputStream extends I
*** 242,306 ****
  	  case TC_STRING:
  	  case TC_LONGSTRING:
  	    {
! 	      dumpElement("STRING=");
  	      String s = this.realInputStream.readUTF();
! 	      dumpElementln(s);
! 	      ret_val = processResolution(s, assignNewHandle(s));
  	      break;
  	    }
  
  	  case TC_ARRAY:
  	    {
! 	      dumpElementln("ARRAY");
  	      ObjectStreamClass osc = (ObjectStreamClass)readObject();
  	      Class componentType = osc.forClass().getComponentType();
! 	      dumpElement("ARRAY LENGTH=");
  	      int length = this.realInputStream.readInt();
! 	      dumpElementln (length + "; COMPONENT TYPE=" + componentType);
  	      Object array = Array.newInstance(componentType, length);
  	      int handle = assignNewHandle(array);
  	      readArrayElements(array, componentType);
! 	      for (int i = 0, len = Array.getLength(array); i < len; i++)
! 		dumpElementln("  ELEMENT[" + i + "]=" + Array.get(array, i));
! 	      ret_val = processResolution(array, handle);
  	      break;
  	    }
  
  	  case TC_OBJECT:
  	    {
! 	      dumpElementln("OBJECT");
  	      ObjectStreamClass osc = (ObjectStreamClass)readObject();
  	      Class clazz = osc.forClass();
  	      
! 	      if (!Serializable.class.isAssignableFrom(clazz))
  		throw new NotSerializableException
  		  (clazz + " is not Serializable, and thus cannot be deserialized.");
  	      
! 	      if (Externalizable.class.isAssignableFrom(clazz))
  		{
! 		  Externalizable obj = null;
! 		  
! 		  try
! 		    {
! 		      obj = (Externalizable)clazz.newInstance();
! 		    }
! 		  catch (InstantiationException e)
! 		    {
! 		      throw new ClassNotFoundException
! 			("Instance of " + clazz + " could not be created");
! 		    }
! 		  catch (IllegalAccessException e)
! 		    {
! 		      throw new ClassNotFoundException
! 			("Instance of " + clazz + " could not be created because class or "
! 			 + "zero-argument constructor is not accessible");
! 		    }
! 		  catch (NoSuchMethodError e)
! 		    {
! 		      throw new ClassNotFoundException
! 			("Instance of " + clazz
! 			 + " could not be created because zero-argument constructor is not defined");
! 		    }
  		  
  		  int handle = assignNewHandle(obj);
  		  
--- 244,287 ----
  	  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);
  		  
*************** public class ObjectInputStream extends I
*** 313,339 ****
  		  obj.readExternal(this);
  		  
  		  if (read_from_blocks)
! 		    setBlockDataMode(oldmode);
  		  
! 		  ret_val = processResolution(obj, handle);
  		  break;
! 		} // end if (Externalizable.class.isAssignableFrom (clazz))
! 	      
! 	      // find the first non-serializable, non-abstract
! 	      // class in clazz's inheritance hierarchy
! 	      Class first_nonserial = clazz.getSuperclass();
! 	      while (Serializable.class.isAssignableFrom(first_nonserial)
! 		     || Modifier.isAbstract(first_nonserial.getModifiers()))
! 		first_nonserial = first_nonserial.getSuperclass();
! 	      
! 	      Object obj = null;
! 	      obj = newObject(clazz, first_nonserial);
! 	      
! 	      if (obj == null)
! 		throw new ClassNotFoundException
! 		  ("Instance of " + clazz + " could not be created");
  	      
  	      int handle = assignNewHandle(obj);
  	      this.currentObject = obj;
  	      ObjectStreamClass[] hierarchy =
  		inputGetObjectStreamClasses(clazz);
--- 294,316 ----
  		  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;
+ 	      
  	      this.currentObject = obj;
  	      ObjectStreamClass[] hierarchy =
  		inputGetObjectStreamClasses(clazz);
*************** public class ObjectInputStream extends I
*** 342,402 ****
  		{
  		  this.currentObjectStreamClass = hierarchy[i];
  		  
! 		  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
  		  
! 		  if (this.currentObjectStreamClass.hasReadMethod())
  		    {
  		      fieldsAlreadyRead = false;
  		      boolean oldmode = setBlockDataMode(true);
! 		      callReadMethod(obj, this.currentObjectStreamClass);
  		      setBlockDataMode(oldmode);
! 		      dumpElement("ENDBLOCKDATA? ");
  		      try
  			{
! 			  // FIXME: XXX: This try block is to catch EOF which is
! 			  // thrown for some objects.  That indicates a bug in the logic.
  			  if (this.realInputStream.readByte() != TC_ENDBLOCKDATA)
  			    throw new IOException
  			      ("No end of block data seen for class with readObject (ObjectInputStream) method.");
! 			  dumpElementln("yes");
! 			}
! 		      catch (EOFException e)
! 			{
! 			  dumpElementln("no, got EOFException");
  			}
  		      catch (IOException e)
  			{
! 			  dumpElementln("no, got IOException");
  			}
  		    }
- 		  else
- 		    {
- 		      readFields(obj, currentObjectStreamClass);
- 		    }
  		}
  
! 	      this.currentObject = null;
! 	      this.currentObjectStreamClass = null;
! 	      ret_val = processResolution(obj, handle);
  	      break;
  	    }
  
  	  case TC_RESET:
! 	    dumpElementln("RESET");
  	    clearHandles();
  	    ret_val = readObject();
  	    break;
  
  	  case TC_EXCEPTION:
  	    {
! 	      dumpElement("EXCEPTION=");
  	      Exception e = (Exception)readObject();
! 	      dumpElementln(e.toString());
  	      clearHandles();
  	      throw new WriteAbortedException("Exception thrown during writing of stream", e);
  	    }
--- 319,388 ----
  		{
  		  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
  			{
! 			  // FIXME: XXX: This try block is to
! 			  // catch EOF which is thrown for some
! 			  // objects.  That indicates a bug in
! 			  // the logic.
! 
  			  if (this.realInputStream.readByte() != TC_ENDBLOCKDATA)
  			    throw new IOException
  			      ("No end of block data seen for class with readObject (ObjectInputStream) method.");
! 			  if(dump) dumpElementln("yes");
  			}
+ // 		      catch (EOFException e)
+ // 			{
+ // 			  if(dump) dumpElementln("no, got EOFException");
+ // 			}
  		      catch (IOException e)
  			{
! 			  if(dump) dumpElementln("no, got IOException");
  			}
  		    }
  		}
  
! 	      this.currentObject = prevObject;
! 	      this.currentObjectStreamClass = prevObjectStreamClass;
! 	      ret_val = processResolution(osc, obj, handle);
! 		  
  	      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);
  	    }
*************** public class ObjectInputStream extends I
*** 411,416 ****
--- 397,404 ----
  	
  	this.isDeserializing = was_deserializing;
  	
+ 	depth -= 2;
+ 	
  	if (! was_deserializing)
  	  {
  	    if (validators.size() > 0)
*************** public class ObjectInputStream extends I
*** 422,427 ****
--- 410,474 ----
    }
  
    /**
+    * 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
*************** public class ObjectInputStream extends I
*** 440,466 ****
    protected ObjectStreamClass readClassDescriptor()
      throws ClassNotFoundException, IOException
    {
!     dumpElement("CLASSDESC NAME=");
      String name = this.realInputStream.readUTF();
!     dumpElement(name + "; UID=");
      long uid = this.realInputStream.readLong ();
!     dumpElement(Long.toHexString(uid) + "; FLAGS=");
      byte flags = this.realInputStream.readByte ();
!     dumpElement(Integer.toHexString(flags) + "; FIELD COUNT=");
      short field_count = this.realInputStream.readShort();
!     dumpElementln(Short.toString(field_count));
      ObjectStreamField[] fields = new ObjectStreamField[field_count];
      ObjectStreamClass osc = new ObjectStreamClass(name, uid,
  						  flags, fields);
      assignNewHandle(osc);
  	      
      for (int i = 0; i < field_count; i++)
        {
! 	dumpElement("  TYPE CODE=");
  	char type_code = (char)this.realInputStream.readByte();
! 	dumpElement(type_code + "; FIELD NAME=");
  	String field_name = this.realInputStream.readUTF();
! 	dumpElementln(field_name);
  	String class_name;
  		  
  	// If the type code is an array or an object we must
--- 487,516 ----
    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);
+ 
+     if (callersClassLoader == null)
+       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
*************** public class ObjectInputStream extends I
*** 473,501 ****
  	  class_name = String.valueOf(type_code);
  		  
  	fields[i] =
! 	  new ObjectStreamField(field_name, class_name, currentLoader());
        }
  	      
      /* Now that fields have been read we may resolve the class
       * (and read annotation if needed). */
!     Class clazz = resolveClass(osc);
!     
!     for (int i = 0; i < field_count; i++)
        {
! 	Field f;
! 	
! 	try
! 	  {
! 	    f = clazz.getDeclaredField(fields[i].getName());
! 	    if (f != null && !f.getType().equals(fields[i].getType()))
! 	      throw new InvalidClassException
! 		("invalid field type for " + fields[i].getName() + " in class "
! 		 + name + " (requested was \"" + fields[i].getType()
! 		 + " and found \"" + f.getType() + "\")"); 
! 	  }
! 	catch (NoSuchFieldException _)
! 	  {
! 	  }
        }
  
      boolean oldmode = setBlockDataMode(true);
--- 523,561 ----
  	  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;
!     try
        {
! 	clazz = resolveClass(osc);
!       }
!     catch (ClassNotFoundException cnfe)
!       {
! 	// Maybe it was an primitive class?
! 	if (name.equals("void"))
! 	  clazz = Void.TYPE;
! 	else if (name.equals("boolean"))
! 	  clazz = Boolean.TYPE;
! 	else if (name.equals("byte"))
! 	  clazz = Byte.TYPE;
! 	else if (name.equals("short"))
! 	  clazz = Short.TYPE;
! 	else if (name.equals("char"))
! 	  clazz = Character.TYPE;
! 	else if (name.equals("int"))
! 	  clazz = Integer.TYPE;
! 	else if (name.equals("long"))
! 	  clazz = Long.TYPE;
! 	else if (name.equals("float"))
! 	  clazz = Float.TYPE;
! 	else if (name.equals("double"))
! 	  clazz = Double.TYPE;
! 	else
! 	  throw cnfe;
        }
  
      boolean oldmode = setBlockDataMode(true);
*************** public class ObjectInputStream extends I
*** 503,508 ****
--- 563,679 ----
      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;
    }
  
*************** public class ObjectInputStream extends I
*** 599,605 ****
    protected Class resolveClass(ObjectStreamClass osc)
      throws ClassNotFoundException, IOException
    {
!     return Class.forName(osc.getName(), true, currentLoader());
    }
  
    /**
--- 770,785 ----
    protected Class resolveClass(ObjectStreamClass osc)
      throws ClassNotFoundException, IOException
    {
!     if (callersClassLoader == null)
!       {
! 	callersClassLoader = currentLoader ();
! 	if (Configuration.DEBUG && dump)
! 	  {
! 	    dumpElementln ("CallersClassLoader = " + callersClassLoader);
! 	  }
!       }
! 
!     return Class.forName(osc.getName(), true, callersClassLoader);
    }
  
    /**
*************** public class ObjectInputStream extends I
*** 632,639 ****
     */
    private ObjectStreamClass lookupClass(Class clazz)
    {
!     ObjectStreamClass oclazz;
  
      oclazz = (ObjectStreamClass)classLookupTable.get(clazz);
      if (oclazz == null)
        return ObjectStreamClass.lookup(clazz);
--- 812,821 ----
     */
    private ObjectStreamClass lookupClass(Class clazz)
    {
!     if (clazz == null)
!       return null;
  
+     ObjectStreamClass oclazz;
      oclazz = (ObjectStreamClass)classLookupTable.get(clazz);
      if (oclazz == null)
        return ObjectStreamClass.lookup(clazz);
*************** public class ObjectInputStream extends I
*** 763,773 ****
    protected void readStreamHeader()
      throws IOException, StreamCorruptedException
    {
!     dumpElement("STREAM MAGIC ");
      if (this.realInputStream.readShort() != STREAM_MAGIC)
        throw new StreamCorruptedException("Invalid stream magic number");
  
!     dumpElementln("STREAM VERSION ");
      if (this.realInputStream.readShort() != STREAM_VERSION)
        throw new StreamCorruptedException("Invalid stream version number");
    }
--- 945,955 ----
    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 class ObjectInputStream extends I
*** 1005,1011 ****
     *
     * XXX: finish up comments
     */
!   public static abstract class GetField
    {
      public abstract ObjectStreamClass getObjectStreamClass();
  
--- 1187,1193 ----
     *
     * XXX: finish up comments
     */
!   public abstract static class GetField
    {
      public abstract ObjectStreamClass getObjectStreamClass();
  
*************** public class ObjectInputStream extends I
*** 1045,1051 ****
     * 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 alterate the deserializing object.
     *
     * @return A valid freshly created 'GetField' instance to get access to
     * the deserialized stream.
--- 1227,1233 ----
     * 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.
*************** public class ObjectInputStream extends I
*** 1192,1201 ****
  
  	  int off = field.getOffset();
  
! 	  return (long)(((prim_field_data[off++] & 0xFF) << 56)
! 			| ((prim_field_data[off++] & 0xFF) << 48)
! 			| ((prim_field_data[off++] & 0xFF) << 40)
! 			| ((prim_field_data[off++] & 0xFF) << 32)
  			| ((prim_field_data[off++] & 0xFF) << 24)
  			| ((prim_field_data[off++] & 0xFF) << 16)
  			| ((prim_field_data[off++] & 0xFF) << 8)
--- 1374,1383 ----
  
  	  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)
*************** public class ObjectInputStream extends I
*** 1229,1238 ****
  	  int off = field.getOffset();
  
  	  return Double.longBitsToDouble
! 	    ( (long) (((prim_field_data[off++] & 0xFF) << 56)
! 		      | ((prim_field_data[off++] & 0xFF) << 48)
! 		      | ((prim_field_data[off++] & 0xFF) << 40)
! 		      | ((prim_field_data[off++] & 0xFF) << 32)
  		      | ((prim_field_data[off++] & 0xFF) << 24)
  		      | ((prim_field_data[off++] & 0xFF) << 16)
  		      | ((prim_field_data[off++] & 0xFF) << 8)
--- 1411,1420 ----
  	  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)
*************** public class ObjectInputStream extends I
*** 1375,1394 ****
      return this.nextOID++;
    }
  
!   private Object processResolution(Object obj, int handle)
      throws IOException
    {
!     if (obj instanceof Serializable)
        {
-         Method m = null; 
  	try
  	  {
! 	    Class classArgs[] = {};
! 	    m = getMethod(obj.getClass(), "readResolve", classArgs);
! 	    obj = m.invoke(obj, new Object[] {});	
! 	  }
! 	catch (NoSuchMethodException ignore)
! 	  {
  	  }
  	catch (IllegalAccessException ignore)
  	  {
--- 1557,1574 ----
      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)
  	  {
*************** public class ObjectInputStream extends I
*** 1422,1436 ****
    {
      if (marker == TC_BLOCKDATA)
        {
! 	dumpElement("BLOCK DATA SIZE=");
  	this.blockDataBytes = this.realInputStream.readUnsignedByte();
! 	dumpElementln (Integer.toString(this.blockDataBytes));
        }
      else if (marker == TC_BLOCKDATALONG)
        {
! 	dumpElement("BLOCK DATA LONG SIZE=");
  	this.blockDataBytes = this.realInputStream.readInt();
! 	dumpElementln (Integer.toString(this.blockDataBytes));
        }
      else
        {
--- 1602,1616 ----
    {
      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
        {
*************** public class ObjectInputStream extends I
*** 1517,1678 ****
    private void readFields (Object obj, ObjectStreamClass stream_osc)
      throws ClassNotFoundException, IOException
    {
!     ObjectStreamField[] stream_fields = stream_osc.fields;
!     ObjectStreamField[] real_fields =
!       lookupClass(stream_osc.forClass()).fields;
! 
!     boolean default_initialize, set_value;
!     String field_name = null;
!     Class type = null;
!     ObjectStreamField stream_field = null;
!     ObjectStreamField real_field = null;
!     int stream_idx = 0;
!     int real_idx = 0;
  
!     while (stream_idx < stream_fields.length
! 	   && real_idx < real_fields.length)
        {
! 	default_initialize = false;
! 	set_value = true;
  
! 	if (stream_idx == stream_fields.length)
! 	  default_initialize = true;
! 	else
  	  {
! 	    stream_field = stream_fields[stream_idx];
! 	    type = stream_field.getType();
  	  }
- 
- 	if (real_idx == real_fields.length)
- 	  set_value = false;
  	else
  	  {
- 	    real_field = real_fields[real_idx];
- 	    type = real_field.getType();
  	    field_name = real_field.getName();
! 	  }
! 
! 	if (set_value && !default_initialize)
! 	  {
! 	    int comp_val =
! 	      real_field.compareTo (stream_field);
! 
! 	    if (comp_val < 0)
! 	      {
! 		default_initialize = true;
! 		real_idx++;
! 	      }
! 	    else if (comp_val > 0)
! 	      {
! 		set_value = false;
! 		stream_idx++;
! 	      }
! 	    else
! 	      {
! 		real_idx++;
! 		stream_idx++;
! 	      }
! 	  }
! 
! 	if (stream_field.getOffset() < 0)
! 	  {
! 	    default_initialize = true;
! 	    set_value = false;
  	  }
  	
! 	if (!stream_field.isToSet()) 
! 	  set_value = false;
! 
! 	try
! 	  {
! 	    if (type == Boolean.TYPE)
! 	      {
! 		boolean value =
! 		  default_initialize ? false : this.realInputStream.readBoolean();
! 		if (!default_initialize && set_value)
! 		  dumpElementln("  " + field_name + ": " + value);
! 		if (set_value)
! 		  setBooleanField(obj, stream_osc.forClass(), field_name, value);
! 	      }
! 	    else if (type == Byte.TYPE)
! 	      {
! 		byte value =
! 		  default_initialize ? 0 : this.realInputStream.readByte();
! 		if (!default_initialize && set_value)
! 		  dumpElementln("  " + field_name + ": " + value);
! 		if (set_value)
! 		  setByteField(obj, stream_osc.forClass(), field_name, value);
! 	      }
! 	    else if (type == Character.TYPE)
! 	      {
! 		char value =
! 		  default_initialize ? (char)0 : this.realInputStream.readChar();
! 		if (!default_initialize && set_value)
! 		  dumpElementln("  " + field_name + ": " + value);
! 		if (set_value)
! 		  setCharField(obj, stream_osc.forClass(), field_name, value);
! 	      }
! 	    else if (type == Double.TYPE)
! 	      {
! 		double value =
! 		  default_initialize ? 0 : this.realInputStream.readDouble();
! 		if (!default_initialize && set_value)
! 		  dumpElementln("  " + field_name + ": " + value);
! 		if (set_value)
! 		  setDoubleField(obj, stream_osc.forClass(), field_name, value);
! 	      }
! 	    else if (type == Float.TYPE)
! 	      {
! 		float value =
! 		  default_initialize ? 0 : this.realInputStream.readFloat();
! 		if (!default_initialize && set_value)
! 		  dumpElementln("  " + field_name + ": " + value);
! 		if (set_value)
! 		  setFloatField(obj, stream_osc.forClass(), field_name, value);
! 	      }
! 	    else if (type == Integer.TYPE)
! 	      {
! 		int value =
! 		  default_initialize ? 0 : this.realInputStream.readInt();
! 		if (!default_initialize && set_value)
! 		  dumpElementln("  " + field_name + ": " + value);
! 		if (set_value)
! 		  setIntField(obj, stream_osc.forClass(), field_name, value);
! 	      }
! 	    else if (type == Long.TYPE)
! 	      {
! 		long value =
! 		  default_initialize ? 0 : this.realInputStream.readLong();
! 		if (!default_initialize && set_value)
! 		  dumpElementln("  " + field_name + ": " + value);
! 		if (set_value)
! 		  setLongField(obj, stream_osc.forClass(), field_name, value);
! 	      }
! 	    else if (type == Short.TYPE)
! 	      {
! 		short value =
! 		  default_initialize ? (short)0 : this.realInputStream.readShort();
! 		if (!default_initialize && set_value)
! 		  dumpElementln("  " + field_name + ": " + value);
! 		if (set_value)
! 		  setShortField(obj, stream_osc.forClass(), field_name, value);
! 	      }
! 	    else
! 	      {
! 		Object value =
! 		  default_initialize ? null : readObject();
! 		if (set_value)
! 		  setObjectField(obj, stream_osc.forClass(), field_name,
! 				  real_field.getTypeString(), value);
! 	      }
! 	  }
! 	catch (NoSuchFieldError e)
  	  {
! 	    dumpElementln("XXXX " + field_name + " does not exist.");
  	  }
        }
    }
! 
    // Toggles writing primitive data to block-data buffer.
    private boolean setBlockDataMode (boolean on)
    {
--- 1697,1821 ----
    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)
    {
*************** public class ObjectInputStream extends I
*** 1688,1704 ****
  
    // 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, Class constructor_class)
    {
      try
        {
! 	Object obj = allocateObject (real_class);
! 	callConstructor (constructor_class, obj);
! 	return obj;
        }
      catch (InstantiationException e)
        {
! 	return null;
        }
    }
  
--- 1831,1849 ----
  
    // 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 allocateObject(real_class, constructor.getDeclaringClass(), constructor);
        }
      catch (InstantiationException e)
        {
!         throw new ClassNotFoundException
! 		("Instance of " + real_class + " could not be created");
        }
    }
  
*************** public class ObjectInputStream extends I
*** 1728,1804 ****
     * @param sm SecurityManager instance which should be called.
     * @return The current class loader in the calling stack.
     */
!   private static ClassLoader currentClassLoader (SecurityManager sm)
!   {
!     // FIXME: This is too simple.
!     return ClassLoader.getSystemClassLoader ();
!   }
! 
!   /**
!    * This method tries to access a precise field called in the
!    * specified class. Before accessing the field, it tries to
!    * gain control on this field. If the field is either declared as 
!    * not persistent or transient then it returns null
!    * immediately.
!    *
!    * @param klass Class to get the field from.
!    * @param name Name of the field to access.
!    * @return Field instance representing the requested field.
!    * @throws NoSuchFieldException if the field does not exist.
!    */
!   private Field getField(Class klass, String name)
!     throws java.lang.NoSuchFieldException
!   {
!     final Field f = klass.getDeclaredField(name);
!     ObjectStreamField sf = lookupClass(klass).getField(name);
!     
!     AccessController.doPrivileged(new PrivilegedAction()
!       {
! 	public Object run()
! 	{
! 	  f.setAccessible(true);
! 	  return null;
! 	}
!       });
! 
!     /* We do not want to modify transient fields. They should
!      * be left to 0.
!      * N.B.: Not valid if the field is in serialPersistentFields. 
!      */
!     if (Modifier.isTransient(f.getModifiers()) && !sf.isPersistent())
!       return null;
!    
!     return f;
!   }
! 
!   private static Method getMethod (Class klass, String name, Class args[])
!     throws java.lang.NoSuchMethodException
!   {
!     final Method m = klass.getDeclaredMethod(name, args);
!     AccessController.doPrivileged(new PrivilegedAction()
!       {
! 	public Object run()
! 	{
! 	  m.setAccessible(true);
! 	  return null;
! 	}
!       });
!     return m;
!   }
  
!   private void callReadMethod (Object obj, ObjectStreamClass osc) throws IOException
    {
-     Class klass = osc.forClass();
      try
        {
! 	Class classArgs[] = {ObjectInputStream.class};
! 	Method m = getMethod (klass, "readObject", classArgs);
! 	Object args[] = {this};
! 	m.invoke(obj, args);
!       }
!     catch (NoSuchMethodException nsme)
!       {
! 	// Nothing.
        }
      catch (InvocationTargetException x)
        {
--- 1873,1886 ----
     * @param sm SecurityManager instance which should be called.
     * @return The current class loader in the calling stack.
     */
!   private static native ClassLoader currentClassLoader (SecurityManager sm);
  
!   private void callReadMethod (Method readObject, Class klass, Object obj)
!     throws ClassNotFoundException, IOException
    {
      try
        {
! 	readObject.invoke(obj, new Object[] { this });
        }
      catch (InvocationTargetException x)
        {
*************** public class ObjectInputStream extends I
*** 1808,1813 ****
--- 1890,1897 ----
  	  throw (RuntimeException) exception;
  	if (exception instanceof IOException)
  	  throw (IOException) exception;
+         if (exception instanceof ClassNotFoundException)
+           throw (ClassNotFoundException) exception;
  
  	throw new IOException("Exception thrown from readObject() on " +
  			       klass + ": " + exception.getClass().getName());
*************** public class ObjectInputStream extends I
*** 1822,2091 ****
      prereadFields = null;
    }
      
!   private native Object allocateObject (Class clazz)
      throws InstantiationException;
  
-   private native void callConstructor (Class clazz, Object obj);
- 
-   /**
-    * This method writes a "boolean" value <code>val</code> in the specified field
-    * of the instance <code>obj</code> of the type <code>klass</code>.
-    *
-    * @param obj Instance to setup.
-    * @param klass Class type of the specified instance.
-    * @param field_name Name of the field in the specified class type.
-    * @param val The boolean value to write into the field.
-    * @throws InvalidClassException if the specified field has not the required type.
-    * @throws IOException if there is no field of that name in the specified class.
-    */
-   private void setBooleanField(Object obj, Class klass, String field_name,
- 				boolean val) throws IOException, InvalidClassException
-   {
-     try
-       {
- 	Field f = getField(klass, field_name);
- 	f.setBoolean(obj, val);
-       }
-     catch (IllegalArgumentException _)
-       {
- 	throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
-       }
-     catch (Exception _)
-       {
-       }    
-   }
- 
-   /**
-    * This method writes a "byte" value <code>val</code> in the specified field
-    * of the instance <code>obj</code> of the type <code>klass</code>.
-    *
-    * @param obj Instance to setup.
-    * @param klass Class type of the specified instance.
-    * @param field_name Name of the field in the specified class type.
-    * @param val The byte value to write into the field.
-    * @throws InvalidClassException if the specified field has not the required type.
-    * @throws IOException if there is no field of that name in the specified class.
-    */
-   private void setByteField(Object obj, Class klass, String field_name,
- 			     byte val) throws IOException, InvalidClassException
-   {
-     try
-       {
- 	Field f = getField(klass, field_name);
- 	f.setByte(obj, val);
-       }
-     catch (IllegalArgumentException _)
-       {
- 	throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
-       }
-     catch (Exception _)
-       {
-       }    
-   }
- 
-   /**
-    * This method writes a "character" value <code>val</code> in the specified field
-    * of the instance <code>obj</code> of the type <code>klass</code>.
-    *
-    * @param obj Instance to setup.
-    * @param klass Class type of the specified instance.
-    * @param field_name Name of the field in the specified class type.
-    * @param val The character value to write into the field.
-    * @throws InvalidClassException if the specified field has not the required type.
-    * @throws IOException if there is no field of that name in the specified class.
-    */
-   private void setCharField(Object obj, Class klass, String field_name,
- 			     char val) throws IOException, InvalidClassException
-   {
-     try
-       {
- 	Field f = getField(klass, field_name);
- 	f.setChar(obj, val);
-       }
-     catch (IllegalArgumentException _)
-       {
- 	throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
-       }
-     catch (Exception _)
-       {
-       }    
-   }
- 
-   /**
-    * This method writes a "double" value <code>val</code> in the specified field
-    * of the instance <code>obj</code> of the type <code>klass</code>.
-    *
-    * @param obj Instance to setup.
-    * @param klass Class type of the specified instance.
-    * @param field_name Name of the field in the specified class type.
-    * @param val The double value to write into the field.
-    * @throws InvalidClassException if the specified field has not the required type.
-    * @throws IOException if there is no field of that name in the specified class.
-    */
-   private void setDoubleField(Object obj, Class klass, String field_name,
- 			       double val) throws IOException, InvalidClassException
-   {
-     try
-       {
- 	Field f = getField(klass, field_name);
- 	f.setDouble(obj, val);
-       }
-     catch (IllegalArgumentException _)
-       {
- 	throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
-       }
-     catch (Exception _)
-       {
-       }    
-   }
- 
-   /**
-    * This method writes a "float" value <code>val</code> in the specified field
-    * of the instance <code>obj</code> of the type <code>klass</code>.
-    *
-    * @param obj Instance to setup.
-    * @param klass Class type of the specified instance.
-    * @param field_name Name of the field in the specified class type.
-    * @param val The float value to write into the field.
-    * @throws InvalidClassException if the specified field has not the required type.
-    * @throws IOException if there is no field of that name in the specified class.
-    */
-   private void setFloatField(Object obj, Class klass, String field_name,
- 			      float val) throws IOException, InvalidClassException
-   {
-     try
-       {
- 	Field f = getField(klass, field_name);
- 	f.setFloat(obj, val);
-       }
-     catch (IllegalArgumentException _)
-       {
- 	throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
-       }
-     catch (Exception _)
-       {
-       }    
-   }
- 
-   /**
-    * This method writes an "integer" value <code>val</code> in the specified field
-    * of the instance <code>obj</code> of the type <code>klass</code>.
-    *
-    * @param obj Instance to setup.
-    * @param klass Class type of the specified instance.
-    * @param field_name Name of the field in the specified class type.
-    * @param val The integer value to write into the field.
-    * @throws InvalidClassException if the specified field has not the required type.
-    * @throws IOException if there is no field of that name in the specified class.
-    */
-   private void setIntField(Object obj, Class klass, String field_name,
- 			    int val) throws IOException, InvalidClassException
-   {
-     try
-       {
- 	Field f = getField(klass, field_name);
- 	f.setInt(obj, val);
-       }
-     catch (IllegalArgumentException _)
-       {
- 	throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
-       }
-     catch (Exception _)
-       {
-       }    
-   }
- 
-   /**
-    * This method writes the long value <code>val</code> in the specified field
-    * of the instance <code>obj</code> of the type <code>klass</code>.
-    *
-    * @param obj Instance to setup.
-    * @param klass Class type of the specified instance.
-    * @param field_name Name of the field in the specified class type.
-    * @param val The long value to write into the field.
-    * @throws InvalidClassException if the specified field has not the required type.
-    * @throws IOException if there is no field of that name in the specified class.
-    */
-   private void setLongField(Object obj, Class klass, String field_name,
- 			     long val) throws IOException, InvalidClassException
-   {
-     try
-       {
- 	Field f = getField(klass, field_name);
- 	f.setLong(obj, val);
-       }
-     catch (IllegalArgumentException _)
-       {
- 	throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
-       }
-     catch (Exception _)
-       {
-       }    
-   }
- 
-   /**
-    * This method writes a "short" value <code>val</code> in the specified field
-    * of the instance <code>obj</code> of the type <code>klass</code>.
-    *
-    * @param obj Instance to setup.
-    * @param klass Class type of the specified instance.
-    * @param field_name Name of the field in the specified class type.
-    * @param val The short value to write into the field.
-    * @throws InvalidClassException if the specified field has not the required type.
-    * @throws IOException if there is no field of that name in the specified class.
-    */
-   private void setShortField(Object obj, Class klass, String field_name,
- 			      short val) throws IOException, InvalidClassException
-   {
-     try
-       {
- 	Field f = getField(klass, field_name);
- 	f.setShort(obj, val);
-       }
-     catch (IllegalArgumentException _)
-       {
- 	throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
-       }
-     catch (Exception _)
-       {
-       }    
-   }
- 
-   /**
-    * This method writes an "object" value <code>val</code> in the specified field
-    * of the instance <code>obj</code> of the type <code>klass</code>.
-    *
-    * @param obj Instance to setup.
-    * @param klass Class type of the specified instance.
-    * @param field_name Name of the field in the specified class type.
-    * @param val The "object" value to write into the field.
-    * @throws InvalidClassException if the specified field has not the required type.
-    * @throws IOException if there is no field of that name in the specified class.
-    */
-   private void setObjectField(Object obj, Class klass, String field_name,
- 			       String type_code, Object val) throws IOException, InvalidClassException
-   {
-     try
-       {
-  	Field f = getField(klass, field_name);
- 	ObjectStreamField of = new ObjectStreamField(field_name, f.getType());
- 	
- 	if (of.getTypeString() == null ||
- 	    !of.getTypeString().equals(type_code))
-           throw new InvalidClassException("incompatible field type for " + klass.getName() + "." + field_name);
-  	f.set(obj, val);
-       }
-     catch (InvalidClassException e)
-       {
- 	throw e;
-       }
-     catch (Exception _)
-       {
-       }
-   }
- 
    private static final int BUFFER_SIZE = 1024;
-   private static final Class[] readObjectParams = { ObjectInputStream.class };
  
    private DataInputStream realInputStream;
    private DataInputStream dataInputStream;
--- 1906,1915 ----
      prereadFields = null;
    }
      
!   private native Object allocateObject(Class clazz, Class constr_clazz, Constructor constructor)
      throws InstantiationException;
  
    private static final int BUFFER_SIZE = 1024;
  
    private DataInputStream realInputStream;
    private DataInputStream dataInputStream;
*************** public class ObjectInputStream extends I
*** 2106,2123 ****
    private Hashtable classLookupTable;
    private GetField prereadFields;
  
    private static boolean dump;
  
    private void dumpElement (String msg)
    {
!     if (Configuration.DEBUG && dump)  
!       System.out.print(msg);
    }
    
    private void dumpElementln (String msg)
    {
!     if (Configuration.DEBUG && dump)
!       System.out.println(msg);
    }
  
    static
--- 1930,1952 ----
    private Hashtable classLookupTable;
    private GetField prereadFields;
  
+   private ClassLoader callersClassLoader;
    private static boolean dump;
  
+   // The nesting depth for debugging output
+   private int depth = 0;
+ 
    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() + ": ");
    }
  
    static
*************** public class ObjectInputStream extends I
*** 2127,2150 ****
  	System.loadLibrary ("javaio");
        }
    }
- }
  
! 
! // used to keep a prioritized list of object validators
! 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;
    }
  }
--- 1956,1979 ----
  	System.loadLibrary ("javaio");
        }
    }
  
!   // 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-3.4.3/libjava/java/io/ObjectOutputStream.java gcc-4.0.0/libjava/java/io/ObjectOutputStream.java
*** gcc-3.4.3/libjava/java/io/ObjectOutputStream.java	Wed Dec 31 11:04:21 2003
--- gcc-4.0.0/libjava/java/io/ObjectOutputStream.java	Tue Feb 22 03:13:34 2005
***************
*** 1,5 ****
  /* ObjectOutputStream.java -- Class used to write serialized objects
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* ObjectOutputStream.java -- Class used to write serialized objects
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,55 ****
  
  package java.io;
  
  import java.lang.reflect.Array;
  import java.lang.reflect.Field;
- import java.lang.reflect.Method;
  import java.lang.reflect.InvocationTargetException;
! import java.security.PrivilegedAction;
  import java.security.AccessController;
  import java.util.Hashtable;
  
- import gnu.java.io.ObjectIdentityWrapper;
- import gnu.java.lang.reflect.TypeSignature;
- import gnu.classpath.Configuration;
- 
  /**
   * An <code>ObjectOutputStream</code> can be used to write objects
   * as well as primitive data in a platform-independent manner to an
--- 39,56 ----
  
  package java.io;
  
+ import gnu.classpath.Configuration;
+ 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
*************** public class ObjectOutputStream extends 
*** 144,149 ****
--- 145,157 ----
      protocolVersion = defaultProtocolVersion;
      useSubclassMethod = false;
      writeStreamHeader();
+ 
+     if (Configuration.DEBUG)
+       {
+ 	String val = System.getProperty("gcj.dumpobjects");
+ 	if (val != null && !val.equals(""))
+ 	  dump = true;
+       }
    }
  
    /**
*************** public class ObjectOutputStream extends 
*** 172,181 ****
--- 180,197 ----
    {
      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
*************** public class ObjectOutputStream extends 
*** 204,210 ****
  	      {
  		Class cl = (Class)obj;
  		ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject(cl);
- 		assignNewHandle(obj);
  		realOutput.writeByte(TC_CLASS);
  		if (!osc.isProxyClass)
  		  {
--- 220,225 ----
*************** public class ObjectOutputStream extends 
*** 225,230 ****
--- 240,246 ----
  		    
  		    writeObject(osc.getSuper());
  		  }
+ 		assignNewHandle(obj);
  		break;
  	      }
  
*************** public class ObjectOutputStream extends 
*** 234,239 ****
--- 250,260 ----
  		break;
  	      }
  
+ 	    Class clazz = obj.getClass();
+ 	    ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject(clazz);
+ 	    if (osc == null)
+ 	      throw new NotSerializableException(clazz.getName());
+ 	    
  	    if ((replacementEnabled || obj instanceof Serializable)
  		&& ! replaceDone)
  	      {
*************** public class ObjectOutputStream extends 
*** 241,259 ****
  		
  		if (obj instanceof Serializable)
  		  {
- 		    Method m = null;
  		    try
  		      {
! 			Class classArgs[] = {};
! 			m = getMethod(obj.getClass(), "writeReplace",
! 				      classArgs);
! 			// m can't be null by definition since an
! 			// exception would have been thrown so a check
! 			// for null is not needed.
! 			obj = m.invoke(obj, new Object[] {});
! 		      }
! 		    catch (NoSuchMethodException ignore)
! 		      {
  		      }
  		    catch (IllegalAccessException ignore)
  		      {
--- 262,272 ----
  		
  		if (obj instanceof Serializable)
  		  {
  		    try
  		      {
!                         Method m = osc.writeReplaceMethod;
!                         if (m != null)
!                             obj = m.invoke(obj, new Object[0]);
  		      }
  		    catch (IllegalAccessException ignore)
  		      {
*************** public class ObjectOutputStream extends 
*** 278,288 ****
  		break;
  	      }
  
- 	    Class clazz = obj.getClass();
- 	    ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject(clazz);
- 	    if (osc == null)
- 	      throw new NotSerializableException(clazz.getName());
- 	    
  	    if (clazz.isArray ())
  	      {
  		realOutput.writeByte(TC_ARRAY);
--- 291,296 ----
*************** public class ObjectOutputStream extends 
*** 318,323 ****
--- 326,333 ----
  
  	    if (obj instanceof Serializable)
  	      {
+ 		Object prevObject = this.currentObject;
+ 		ObjectStreamClass prevObjectStreamClass = this.currentObjectStreamClass;
  		currentObject = obj;
  		ObjectStreamClass[] hierarchy =
  		  ObjectStreamClass.getObjectStreamClasses(clazz);
*************** public class ObjectOutputStream extends 
*** 329,345 ****
  		    fieldsAlreadyWritten = false;
  		    if (currentObjectStreamClass.hasWriteMethod())
  		      {
  			setBlockDataMode(true);
  			callWriteMethod(obj, currentObjectStreamClass);
  			setBlockDataMode(false);
  			realOutput.writeByte(TC_ENDBLOCKDATA);
  		      }
  		    else
! 		      writeFields(obj, currentObjectStreamClass);
  		  }
  
! 		currentObject = null;
! 		currentObjectStreamClass = null;
  		currentPutField = null;
  		break;
  	      }
--- 339,363 ----
  		    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;
  	      }
*************** public class ObjectOutputStream extends 
*** 360,371 ****
  	setBlockDataMode(false);
  	try
  	  {
  	    writeObject(e);
  	  }
  	catch (IOException ioe)
  	  {
! 	    throw new StreamCorruptedException
! 	      ("Exception " + ioe + " thrown while exception was being written to stream.");
  	  }
  
  	reset (true);
--- 378,399 ----
  	setBlockDataMode(false);
  	try
  	  {
+ 	    if (Configuration.DEBUG)
+ 	      {
+ 		e.printStackTrace(System.out);
+ 	      }
  	    writeObject(e);
  	  }
  	catch (IOException ioe)
  	  {
! 	    StreamCorruptedException ex = 
! 	      new StreamCorruptedException
! 	      (ioe + " thrown while exception was being written to stream.");
! 	    if (Configuration.DEBUG)
! 	      {
! 		ex.printStackTrace(System.out);
! 	      }
! 	    throw ex;
  	  }
  
  	reset (true);
*************** public class ObjectOutputStream extends 
*** 375,380 ****
--- 403,412 ----
        {
  	isSerializing = was_serializing;
  	setBlockDataMode(old_mode);
+ 	depth -= 2;
+ 
+ 	if (dump)
+ 	  dumpElementln ("END: " + obj);
        }
    }
  
*************** public class ObjectOutputStream extends 
*** 853,859 ****
     *
     * XXX: finish up comments
     */
!   public static abstract class PutField
    {
      public abstract void put (String name, boolean value);
      public abstract void put (String name, byte value);
--- 885,891 ----
     *
     * 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 class ObjectOutputStream extends 
*** 1171,1176 ****
--- 1203,1211 ----
  	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)
*************** public class ObjectOutputStream extends 
*** 1196,1202 ****
  
  
    // Toggles writing primitive data to block-data buffer.
!   private boolean setBlockDataMode(boolean on) throws IOException
    {
      if (on == writeDataAsBlocks)
        return on;
--- 1231,1238 ----
  
  
    // 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;
*************** public class ObjectOutputStream extends 
*** 1217,1234 ****
    private void callWriteMethod(Object obj, ObjectStreamClass osc)
      throws IOException
    {
-     Class klass = osc.forClass();
      currentPutField = null;
      try
        {
! 	Class classArgs[] = {ObjectOutputStream.class};
! 	Method m = getMethod(klass, "writeObject", classArgs);
! 	Object args[] = {this};
! 	m.invoke(obj, args);	
!       }
!     catch (NoSuchMethodException nsme)
!       {
! 	// Nothing.
        }
      catch (InvocationTargetException x)
        {
--- 1253,1263 ----
    private void callWriteMethod(Object obj, ObjectStreamClass osc)
      throws IOException
    {
      currentPutField = null;
      try
        {
!         Object args[] = {this};
!         osc.writeObjectMethod.invoke(obj, args);
        }
      catch (InvocationTargetException x)
        {
*************** public class ObjectOutputStream extends 
*** 1241,1247 ****
  
  	IOException ioe
  	  = new IOException("Exception thrown from writeObject() on " +
! 			    klass + ": " + exception.getClass().getName());
  	ioe.initCause(exception);
  	throw ioe;
        }
--- 1270,1277 ----
  
  	IOException ioe
  	  = new IOException("Exception thrown from writeObject() on " +
! 			    osc.forClass().getName() + ": " +
!                             exception.getClass().getName());
  	ioe.initCause(exception);
  	throw ioe;
        }
*************** public class ObjectOutputStream extends 
*** 1249,1255 ****
        {
  	IOException ioe
  	  = new IOException("Failure invoking writeObject() on " +
! 			    klass + ": " + x.getClass().getName());
  	ioe.initCause(x);
  	throw ioe;
        }
--- 1279,1286 ----
        {
  	IOException ioe
  	  = new IOException("Failure invoking writeObject() on " +
! 			    osc.forClass().getName() + ": " +
! 			    x.getClass().getName());
  	ioe.initCause(x);
  	throw ioe;
        }
*************** public class ObjectOutputStream extends 
*** 1474,1493 ****
        }    
    }
  
!   private static Field getField (Class klass, String name)
      throws java.io.InvalidClassException
    {
      try
        {
  	final Field f = klass.getDeclaredField(name);
! 	AccessController.doPrivileged(new PrivilegedAction()
! 	  {
! 	    public Object run()
! 	    {
! 	      f.setAccessible(true);
! 	      return null;
! 	    }
! 	  });
  	return f;
        }
      catch (java.lang.NoSuchFieldException e)
--- 1505,1518 ----
        }    
    }
  
!   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)
*************** public class ObjectOutputStream extends 
*** 1497,1519 ****
        }
    }
  
!   private static Method getMethod (Class klass, String name, Class[] args)
!     throws java.lang.NoSuchMethodException
    {
!     final Method m = klass.getDeclaredMethod(name, args);
!     AccessController.doPrivileged(new PrivilegedAction()
!       {
! 	public Object run()
! 	{
! 	  m.setAccessible(true);
! 	  return null;
! 	}
!       });
!     return m;
    }
  
    // this value comes from 1.2 spec, but is used in 1.1 as well
!   private final static int BUFFER_SIZE = 1024;
  
    private static int defaultProtocolVersion = PROTOCOL_VERSION_2;
  
--- 1522,1537 ----
        }
    }
  
!   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;
  
*************** public class ObjectOutputStream extends 
*** 1524,1530 ****
    private byte[] blockData;
    private int blockDataCount;
    private Object currentObject;
!   private ObjectStreamClass currentObjectStreamClass;
    private PutField currentPutField;
    private boolean fieldsAlreadyWritten;
    private boolean replacementEnabled;
--- 1542,1549 ----
    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;
*************** public class ObjectOutputStream extends 
*** 1533,1538 ****
--- 1552,1564 ----
    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;
  
    static
    {
diff -Nrcpad gcc-3.4.3/libjava/java/io/ObjectStreamClass.java gcc-4.0.0/libjava/java/io/ObjectStreamClass.java
*** gcc-3.4.3/libjava/java/io/ObjectStreamClass.java	Tue Dec 30 15:51:15 2003
--- gcc-4.0.0/libjava/java/io/ObjectStreamClass.java	Tue Feb 22 03:45:18 2005
***************
*** 2,62 ****
     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., 59 Temple Place, Suite 330, Boston, MA
!    02111-1307 USA.
  
!    Linking this library statically or dynamically with other modules is
!    making a combined work based on this library.  Thus, the terms and
!    conditions of the GNU General Public License cover the whole
!    combination.
  
!    As a special exception, the copyright holders of this library give you
!    permission to link this library with independent modules to produce an
!    executable, regardless of the license terms of these independent
!    modules, and to copy and distribute the resulting executable under
!    terms of your choice, provided that you also meet, for each linked
!    independent module, the terms and conditions of the license of that
!    module.  An independent module is a module which is not derived from
!    or based on this library.  If you modify this library, you may extend
!    this exception to your version of the library, but 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.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.DigestOutputStream;
  import java.security.MessageDigest;
  import java.security.NoSuchAlgorithmException;
  import java.security.Security;
  import java.util.Arrays;
  import java.util.Comparator;
  import java.util.Hashtable;
  import java.util.Vector;
- import gnu.java.io.NullOutputStream;
- import gnu.java.lang.reflect.TypeSignature;
- import gnu.java.security.provider.Gnu;
- 
  
  public class ObjectStreamClass implements Serializable
  {
--- 2,65 ----
     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., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
  
! Linking this library statically or dynamically with other modules is
! making a combined work based on this library.  Thus, the terms and
! conditions of the GNU General Public License cover the whole
! combination.
  
! As a special exception, the copyright holders of this library give you
! permission to link this library with independent modules to produce an
! executable, regardless of the license terms of these independent
! modules, and to copy and distribute the resulting executable under
! terms of your choice, provided that you also meet, for each linked
! independent module, the terms and conditions of the license of that
! module.  An independent module is a module which is not derived from
! or based on this library.  If you modify this library, you may extend
! this exception to your version of the library, but 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
  {
*************** public class ObjectStreamClass implement
*** 102,118 ****
        }
    }
  
- 
    /**
     * Returns the name of the class that this
     * <code>ObjectStreamClass</code> represents.
     */
    public String getName()
    {
      return name;
    }
  
- 
    /**
     * Returns the class that this <code>ObjectStreamClass</code>
     * represents.  Null could be returned if this
--- 105,121 ----
        }
    }
  
    /**
     * 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
*************** public class ObjectStreamClass implement
*** 127,150 ****
      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
     */
    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.
!   // XXX doc
    public ObjectStreamField[] getFields()
    {
      ObjectStreamField[] copy = new ObjectStreamField[ fields.length ];
--- 130,156 ----
      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 ];
*************** public class ObjectStreamClass implement
*** 152,158 ****
      return copy;
    }
  
- 
    // XXX doc
    // Can't do binary search since fields is sorted by name and
    // primitiveness.
--- 158,163 ----
*************** public class ObjectStreamClass implement
*** 164,170 ****
      return null;
    }
  
- 
    /**
     * Returns a textual representation of this
     * <code>ObjectStreamClass</code> object including the name of the
--- 169,174 ----
*************** public class ObjectStreamClass implement
*** 179,185 ****
      return "java.io.ObjectStreamClass< " + name + ", " + uid + " >";
    }
  
- 
    // Returns true iff the class that this ObjectStreamClass represents
    // has the following method:
    //
--- 183,188 ----
*************** public class ObjectStreamClass implement
*** 192,220 ****
      return (flags & ObjectStreamConstants.SC_WRITE_METHOD) != 0;
    }
  
- 
-   // Returns true iff the class that this ObjectStreamClass represents
-   // has the following method:
-   //
-   // private void readObject (ObjectOutputStream)
-   //
-   // This method is used by the class to override default
-   // serialization behavior.
-   boolean hasReadMethod()
-   {
-     try
-       {
- 	Class[] readObjectParams = { ObjectInputStream.class };
- 	forClass().getDeclaredMethod("readObject", readObjectParams);
- 	return true;
-       }
-     catch (NoSuchMethodException e)
-       {
- 	return false;
-       }
-   }
- 
- 
    // Returns true iff the class that this ObjectStreamClass represents
    // implements Serializable but does *not* implement Externalizable.
    boolean isSerializable()
--- 195,200 ----
*************** public class ObjectStreamClass implement
*** 306,311 ****
--- 286,293 ----
    {
      this.clazz = cl;
  
+     cacheMethods();
+ 
      long class_uid = getClassUID(cl);
      if (uid == 0)
        uid = class_uid;
*************** public class ObjectStreamClass implement
*** 346,352 ****
  	i = 0; j = 0; k = 0;
  	while (i < fields.length && j < exportedFields.length)
  	  {
! 	    int comp = fields[i].getName().compareTo(exportedFields[j].getName());
  
  	    if (comp < 0)
  	      {
--- 328,334 ----
  	i = 0; j = 0; k = 0;
  	while (i < fields.length && j < exportedFields.length)
  	  {
! 	    int comp = fields[i].compareTo(exportedFields[j]);
  
  	    if (comp < 0)
  	      {
*************** public class ObjectStreamClass implement
*** 363,372 ****
--- 345,371 ----
  		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" +
*************** public class ObjectStreamClass implement
*** 452,457 ****
--- 451,505 ----
        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 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);
+     readResolveMethod = findMethod(methods, "readResolve",
+ 				   new Class[0], Object.class, false);
+     writeReplaceMethod = findMethod(methods, "writeReplace",
+                                     new Class[0], Object.class, false);
+   }
  
    private ObjectStreamClass(Class cl)
    {
*************** public class ObjectStreamClass implement
*** 460,465 ****
--- 508,514 ----
      isProxyClass = Proxy.isProxyClass(cl);
  
      clazz = cl;
+     cacheMethods();
      name = cl.getName();
      setFlags(cl);
      setFields(cl);
*************** public class ObjectStreamClass implement
*** 479,498 ****
        // only set this bit if CL is NOT Externalizable
        flags |= ObjectStreamConstants.SC_SERIALIZABLE;
  
!     try
!       {
! 	Method writeMethod = cl.getDeclaredMethod("writeObject",
! 						  writeMethodArgTypes);
! 	int modifiers = writeMethod.getModifiers();
! 
! 	if (writeMethod.getReturnType() == Void.TYPE
! 	    && Modifier.isPrivate(modifiers)
! 	    && !Modifier.isStatic(modifiers))
! 	  flags |= ObjectStreamConstants.SC_WRITE_METHOD;
!       }
!     catch(NoSuchMethodException oh_well)
!       {
!       }
    }
  
  
--- 528,535 ----
        // only set this bit if CL is NOT Externalizable
        flags |= ObjectStreamConstants.SC_SERIALIZABLE;
  
!     if (writeObjectMethod != null)
!       flags |= ObjectStreamConstants.SC_WRITE_METHOD;
    }
  
  
*************** public class ObjectStreamClass implement
*** 500,505 ****
--- 537,544 ----
    // clazz.
    private void setFields(Class cl)
    {
+     SetAccessibleAction setAccessible = new SetAccessibleAction();
+ 
      if (!isSerializable() || isExternalizable())
        {
  	fields = NO_FIELDS;
*************** public class ObjectStreamClass implement
*** 508,517 ****
  
      try
        {
! 	Field serialPersistentFields =
  	  cl.getDeclaredField("serialPersistentFields");
! 	serialPersistentFields.setAccessible(true);
! 	int modifiers = serialPersistentFields.getModifiers();
  
  	if (Modifier.isStatic(modifiers)
  	    && Modifier.isFinal(modifiers)
--- 547,557 ----
  
      try
        {
! 	final Field f =
  	  cl.getDeclaredField("serialPersistentFields");
! 	setAccessible.setMember(f);
! 	AccessController.doPrivileged(setAccessible);
! 	int modifiers = f.getModifiers();
  
  	if (Modifier.isStatic(modifiers)
  	    && Modifier.isFinal(modifiers)
*************** public class ObjectStreamClass implement
*** 521,526 ****
--- 561,579 ----
  	    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;
  	      }
*************** public class ObjectStreamClass implement
*** 553,564 ****
      for (int from = 0, to = 0; from < all_fields.length; from++)
        if (all_fields[from] != null)
  	{
! 	  Field f = all_fields[from];
! 	  fields[to] = new ObjectStreamField(f.getName(), f.getType());
  	  to++;
  	}
  
      Arrays.sort(fields);
      calculateOffsets();
    }
  
--- 606,627 ----
      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();
    }
  
*************** public class ObjectStreamClass implement
*** 571,578 ****
  	// 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.
! 	Field suid = cl.getDeclaredField("serialVersionUID");
! 	suid.setAccessible(true);
  	int modifiers = suid.getModifiers();
  
  	if (Modifier.isStatic(modifiers)
--- 634,642 ----
  	// 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)
*************** public class ObjectStreamClass implement
*** 742,751 ****
  
      fieldsArray = new ObjectStreamField[ o.length ];
      System.arraycopy(o, 0, fieldsArray, 0, o.length);
!     
      return fieldsArray;
    }
  
    public static final ObjectStreamField[] NO_FIELDS = {};
  
    private static Hashtable classLookupTable = new Hashtable();
--- 806,863 ----
  
      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();
*************** public class ObjectStreamClass implement
*** 769,808 ****
    int primFieldSize = -1;  // -1 if not yet calculated
    int objectFieldCount;
  
    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
! 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
! 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;
    }
  }
--- 881,929 ----
    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-3.4.3/libjava/java/io/ObjectStreamException.java gcc-4.0.0/libjava/java/io/ObjectStreamException.java
*** gcc-3.4.3/libjava/java/io/ObjectStreamException.java	Mon Apr  7 12:25:08 2003
--- gcc-4.0.0/libjava/java/io/ObjectStreamException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* ObjectStreamException.java -- Superclass of all serialization exceptions
!    Copyright (C) 1998, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 44,50 ****
   * 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
   */
--- 44,50 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/io/ObjectStreamField.java gcc-4.0.0/libjava/java/io/ObjectStreamField.java
*** gcc-3.4.3/libjava/java/io/ObjectStreamField.java	Sat Dec 20 22:36:02 2003
--- gcc-4.0.0/libjava/java/io/ObjectStreamField.java	Tue Feb 22 03:13:34 2005
***************
*** 1,5 ****
  /* ObjectStreamField.java -- Class used to store name and class of fields
!    Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 40,45 ****
--- 40,49 ----
  
  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
*************** public class ObjectStreamField implement
*** 54,59 ****
--- 58,70 ----
    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 
*************** public class ObjectStreamField implement
*** 75,80 ****
--- 86,92 ----
     *
     * @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)
    {
*************** public class ObjectStreamField implement
*** 89,95 ****
   
    /**
     * 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.
--- 101,107 ----
   
    /**
     * 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.
*************** public class ObjectStreamField implement
*** 105,111 ****
        }
      catch(ClassNotFoundException e)
        {
-         type = Object.class; //FIXME: ???
        }
    }
    
--- 117,122 ----
*************** public class ObjectStreamField implement
*** 128,134 ****
        }
      catch(ClassNotFoundException e)
        {
-         type = Object.class; // ALSO FIXME 
        }
    }
  
--- 139,144 ----
*************** public class ObjectStreamField implement
*** 176,182 ****
    public String getTypeString ()
    {
      // use intern()
!     if (this.type.isPrimitive())
        return null;
      return typename.intern();
    }
--- 186,192 ----
    public String getTypeString ()
    {
      // use intern()
!     if (isPrimitive())
        return null;
      return typename.intern();
    }
*************** public class ObjectStreamField implement
*** 225,236 ****
     */
    public boolean isPrimitive ()
    {
!     return type.isPrimitive ();
    }
  
!   public int compareTo (Object o)
    {
!     ObjectStreamField f = (ObjectStreamField)o;
      boolean this_is_primitive = isPrimitive ();
      boolean f_is_primitive = f.isPrimitive ();
  
--- 235,253 ----
     */
    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 ();
  
*************** public class ObjectStreamField implement
*** 284,290 ****
    }
  
    /**
!    * This methods returns true if the field is marked as to be
     * set.
     *
     * @return True if it is to be set, false in the other cases.
--- 301,307 ----
    }
  
    /**
!    * 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.
*************** public class ObjectStreamField implement
*** 295,303 ****
      return toset;
    }
  
    public String toString ()
    {
      return "ObjectStreamField< " + type + " " + name + " >";
    }
- }
  
--- 312,412 ----
      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-3.4.3/libjava/java/io/OptionalDataException.java gcc-4.0.0/libjava/java/io/OptionalDataException.java
*** gcc-3.4.3/libjava/java/io/OptionalDataException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/OptionalDataException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* OptionalDataException.java -- indicates unexpected data in serialized stream
!    Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 50,56 ****
   * </ul>
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Warren Levy <warrenl@cygnus.com>
   * @since 1.1
   * @status updated to 1.4
   */
--- 50,56 ----
   * </ul>
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Warren Levy (warrenl@cygnus.com)
   * @since 1.1
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/io/OutputStream.java gcc-4.0.0/libjava/java/io/OutputStream.java
*** gcc-3.4.3/libjava/java/io/OutputStream.java	Tue Jan 22 22:40:14 2002
--- gcc-4.0.0/libjava/java/io/OutputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* OutputStream.java -- Base class for byte output streams
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 46,52 ****
    * 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
  {
--- 46,52 ----
    * 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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/io/OutputStreamWriter.java gcc-4.0.0/libjava/java/io/OutputStreamWriter.java
*** gcc-3.4.3/libjava/java/io/OutputStreamWriter.java	Sat Jun  7 18:35:00 2003
--- gcc-4.0.0/libjava/java/io/OutputStreamWriter.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* OutputStreamWriter.java -- Writer that converts chars to bytes
!    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import gnu.gcj.convert.UnicodeToBytes;
*** 70,76 ****
   * </ul>
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner <bothner@cygnus.com>
   * @date April 17, 1998.  
   */
  public class OutputStreamWriter extends Writer
--- 70,76 ----
   * </ul>
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner (bothner@cygnus.com)
   * @date April 17, 1998.  
   */
  public class OutputStreamWriter extends Writer
*************** public class OutputStreamWriter extends 
*** 287,293 ****
    /**
     * This method writes a single character to the output stream.
     *
!    * @param c The char to write, passed as an int.
     *
     * @exception IOException If an error occurs
     */
--- 287,293 ----
    /**
     * 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
     */
diff -Nrcpad gcc-3.4.3/libjava/java/io/PipedInputStream.java gcc-4.0.0/libjava/java/io/PipedInputStream.java
*** gcc-3.4.3/libjava/java/io/PipedInputStream.java	Tue Mar 18 06:00:25 2003
--- gcc-4.0.0/libjava/java/io/PipedInputStream.java	Fri Apr  1 20:04:19 2005
***************
*** 1,5 ****
  /* PipedInputStream.java -- Read portion of piped streams.
!    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,46 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  // 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.
  
- package java.io;
- 
  /**
    * An input stream that reads its bytes from an output stream
    * to which it is connected. 
--- 35,46 ----
  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. 
*************** public class PipedInputStream extends In
*** 151,164 ****
    * This method receives a byte of input from the source PipedOutputStream.
    * If the internal circular buffer is full, this method blocks.
    *
!   * @param byte_received 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 b) throws IOException
    {
!     read_buf[0] = (byte) (b & 0xff);
      receive (read_buf, 0, 1);
    }
  
--- 151,164 ----
    * 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);
    }
  
*************** public class PipedInputStream extends In
*** 226,247 ****
    }
    
    /**
!     * 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.  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 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.
      */
    public int read() throws IOException
    {
--- 226,242 ----
    }
    
    /**
!     * 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
    {
*************** public class PipedInputStream extends In
*** 252,262 ****
      // if this method is never called.
  
      int r = read(read_buf, 0, 1);
! 
!     if (r == -1)
!       return -1;
!     else
!       return read_buf[0];
    }
    
    /**
--- 247,253 ----
      // if this method is never called.
  
      int r = read(read_buf, 0, 1);
!     return r != -1 ? (read_buf[0] & 0xff) : -1;
    }
    
    /**
*************** public class PipedInputStream extends In
*** 277,283 ****
      * @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)
--- 268,274 ----
      * @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)
diff -Nrcpad gcc-3.4.3/libjava/java/io/PipedOutputStream.java gcc-4.0.0/libjava/java/io/PipedOutputStream.java
*** gcc-3.4.3/libjava/java/io/PipedOutputStream.java	Tue Feb  4 21:07:15 2003
--- gcc-4.0.0/libjava/java/io/PipedOutputStream.java	Tue Nov 16 11:30:11 2004
*************** public class PipedOutputStream extends O
*** 129,149 ****
      * <code>PipedInputStream</code> to which this object is connected has
      * a buffer that cannot hold all of the bytes to be written.
      *
!     * @param buf 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[] b, int off, int len) throws IOException
    {
      if (sink == null)
        throw new IOException ("Not connected");
      if (closed)
        throw new IOException ("Pipe closed");
        
!     sink.receive (b, off, len);
    }
  
    /**
--- 129,149 ----
      * <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);
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/io/PipedReader.java gcc-4.0.0/libjava/java/io/PipedReader.java
*** gcc-3.4.3/libjava/java/io/PipedReader.java	Tue Mar 18 06:00:25 2003
--- gcc-4.0.0/libjava/java/io/PipedReader.java	Tue Nov 16 11:30:11 2004
*************** public class PipedReader extends Reader
*** 123,129 ****
      * This stream is then ready for reading.  If this stream is already
      * connected or has been previously closed, then an exception is thrown
      *
!     * @param src The <code>PipedWriter</code> to connect this stream to
      *
      * @exception IOException If this PipedReader or <code>source</code> 
      *                        has been connected already.
--- 123,129 ----
      * 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 class PipedReader extends Reader
*** 218,228 ****
      * 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 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.
      */
    public int read() throws IOException
    {
--- 218,224 ----
      * 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
    {
*************** public class PipedReader extends Reader
*** 233,243 ****
      // if this method is never called.
  
      int r = read(read_buf, 0, 1);
! 
!     if (r == -1)
!       return -1;
!     else
!       return read_buf[0];
    }
    
    /**
--- 229,235 ----
      // if this method is never called.
  
      int r = read(read_buf, 0, 1);
!     return r != -1 ? read_buf[0] : -1;
    }
    
    /**
*************** public class PipedReader extends Reader
*** 256,262 ****
      * @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)
--- 248,254 ----
      * @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)
diff -Nrcpad gcc-3.4.3/libjava/java/io/PipedWriter.java gcc-4.0.0/libjava/java/io/PipedWriter.java
*** gcc-3.4.3/libjava/java/io/PipedWriter.java	Tue Feb  4 21:07:15 2003
--- gcc-4.0.0/libjava/java/io/PipedWriter.java	Tue Nov 16 11:30:11 2004
*************** public class PipedWriter extends Writer
*** 128,148 ****
      * <code>PipedReader</code> to which this object is connected has
      * a buffer that cannot hold all of the chars to be written.
      *
!     * @param buf 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[] b, int off, int len) throws IOException
    {
      if (sink == null)
        throw new IOException ("Not connected");
      if (closed)
        throw new IOException ("Pipe closed");
        
!     sink.receive (b, off, len);
    }
  
    /**
--- 128,148 ----
      * <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);
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/io/PrintStream.java gcc-4.0.0/libjava/java/io/PrintStream.java
*** gcc-3.4.3/libjava/java/io/PrintStream.java	Mon Dec  8 12:45:59 2003
--- gcc-4.0.0/libjava/java/io/PrintStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* PrintStream.java -- OutputStream for printing output
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import gnu.gcj.convert.UnicodeToBytes;
*** 55,62 ****
   * <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
  {
--- 55,62 ----
   * <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
  {
*************** public class PrintStream extends FilterO
*** 279,285 ****
     * values are printed as "true" and <code>false</code> values are printed
     * as "false".
     *
!    * @param b The <code>boolean</code> value to print
     */
    public void print (boolean bool)
    {
--- 279,285 ----
     * 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)
    {
*************** public class PrintStream extends FilterO
*** 369,375 ****
     * This method prints an array of characters to the stream.  The actual
     * value printed depends on the system default encoding.
     *
!    * @param s The array of characters to print.
     */
    public void print (char[] charArray)
    {
--- 369,375 ----
     * 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)
    {
*************** public class PrintStream extends FilterO
*** 393,399 ****
     * <p>
     * This method prints a line termination sequence after printing the value.
     *
!    * @param b The <code>boolean</code> value to print
     */
    public void println (boolean bool)
    {
--- 393,399 ----
     * <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)
    {
*************** public class PrintStream extends FilterO
*** 499,505 ****
     * <p>
     * This method prints a line termination sequence after printing the value.
     *
!    * @param s The array of characters to print.
     */
    public void println (char[] charArray)
    {
--- 499,505 ----
     * <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)
    {
*************** public class PrintStream extends FilterO
*** 511,517 ****
     * enabled, printing a newline character will cause the stream to be
     * flushed after the character is written.
     * 
!    * @param b The byte to be written
     */
    public void write (int oneByte)
    {
--- 511,517 ----
     * 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)
    {
diff -Nrcpad gcc-3.4.3/libjava/java/io/PrintWriter.java gcc-4.0.0/libjava/java/io/PrintWriter.java
*** gcc-3.4.3/libjava/java/io/PrintWriter.java	Tue May 20 09:13:19 2003
--- gcc-4.0.0/libjava/java/io/PrintWriter.java	Thu Feb 17 07:48:32 2005
*************** package java.io;
*** 54,61 ****
   * 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
--- 54,61 ----
   * 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
*************** public class PrintWriter extends Writer
*** 86,92 ****
     */
    public PrintWriter(Writer wr)
    {
!     super(wr);
      this.out = wr;
    }
  
--- 86,92 ----
     */
    public PrintWriter(Writer wr)
    {
!     super(wr.lock);
      this.out = wr;
    }
  
*************** public class PrintWriter extends Writer
*** 102,108 ****
     */
    public PrintWriter(Writer wr, boolean autoflush)
    {
!     super(wr);
      this.out = wr;
      this.autoflush = autoflush;
    }
--- 102,108 ----
     */
    public PrintWriter(Writer wr, boolean autoflush)
    {
!     super(wr.lock);
      this.out = wr;
      this.autoflush = autoflush;
    }
diff -Nrcpad gcc-3.4.3/libjava/java/io/PushbackInputStream.java gcc-4.0.0/libjava/java/io/PushbackInputStream.java
*** gcc-3.4.3/libjava/java/io/PushbackInputStream.java	Sun May 25 11:40:18 2003
--- gcc-4.0.0/libjava/java/io/PushbackInputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* PushbackInputStream.java -- An input stream that can unread bytes
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 49,55 ****
    * <p>
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy <warrenl@cygnus.com>
    */
  public class PushbackInputStream extends FilterInputStream
  {
--- 49,55 ----
    * <p>
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy (warrenl@cygnus.com)
    */
  public class PushbackInputStream extends FilterInputStream
  {
*************** public class PushbackInputStream extends
*** 263,269 ****
    /**
     * This method pushed back bytes from the passed in array into the
     * pushback buffer.  The bytes from <code>b[offset]</code> to
!    * <cdoe>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.
--- 263,269 ----
    /**
     * 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.
*************** public class PushbackInputStream extends
*** 302,308 ****
     * <code>skip</code> method on the underlying <code>InputStream</code> to 
     * skip additional bytes if necessary.
     *
!    * @param numBytes The requested number of bytes to skip
     *
     * @return The actual number of bytes skipped.
     *
--- 302,308 ----
     * <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.
     *
diff -Nrcpad gcc-3.4.3/libjava/java/io/PushbackReader.java gcc-4.0.0/libjava/java/io/PushbackReader.java
*** gcc-3.4.3/libjava/java/io/PushbackReader.java	Sun Mar 23 19:11:19 2003
--- gcc-4.0.0/libjava/java/io/PushbackReader.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* PushbackReader.java -- An character stream that can unread chars
!    Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 49,55 ****
   * by the creator of the stream.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Warren Levy <warrenl@cygnus.com>
   */
  public class PushbackReader extends FilterReader
  {
--- 49,55 ----
   * by the creator of the stream.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Warren Levy (warrenl@cygnus.com)
   */
  public class PushbackReader extends FilterReader
  {
*************** public class PushbackReader extends Filt
*** 266,298 ****
     * of the chars requested, the remaining chars are read from the 
     * underlying stream.
     *
!    * @param buf The array into which the chars read should be stored
     * @param offset 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.
     *
     * @exception IOException If an error occurs.
     */
!   public synchronized int read(char[] b, int offset, int len) throws IOException
    {
      synchronized (lock)
        {
  	if (buf == null)
            throw new IOException("stream closed");
  
! 	if (offset < 0 || len < 0 || offset + len > b.length)
            throw new ArrayIndexOutOfBoundsException();
  
! 	int numBytes = Math.min(buf.length - pos, len);
  	if (numBytes > 0)
  	  {
! 	    System.arraycopy (buf, pos, b, offset, numBytes);
  	    pos += numBytes;
  	    return numBytes;
  	  }
  
! 	return super.read(b, offset, len);
        }
    }
  
--- 266,299 ----
     * 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);
        }
    }
  
*************** public class PushbackReader extends Filt
*** 353,382 ****
     * If the pushback buffer cannot hold all of the requested chars, an
     * exception is thrown.
     *
!    * @param buf The char array to be pushed back
     * @param offset The index into the array where the chars to be push start
!    * @param len The number of chars to be pushed.
     *
     * @exception IOException If the pushback buffer is full
     */
!   public synchronized void unread(char[] b, int offset, int len)
      throws IOException
    {
      synchronized (lock)
        {
  	if (buf == null)
            throw new IOException("stream closed");
! 	if (pos < len)
  	  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(b, offset, 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;
        }
    }
  }
--- 354,383 ----
     * 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-3.4.3/libjava/java/io/RandomAccessFile.java gcc-4.0.0/libjava/java/io/RandomAccessFile.java
*** gcc-3.4.3/libjava/java/io/RandomAccessFile.java	Sun Jul 13 16:53:05 2003
--- gcc-4.0.0/libjava/java/io/RandomAccessFile.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* RandomAccessFile.java -- Class supporting random file I/O
!    Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.io;
  
  import java.nio.channels.FileChannel;
- import java.nio.channels.FileChannelImpl;
  
  /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
   * "The Java Language Specification", ISBN 0-201-63451-1
--- 38,46 ----
  
  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
*************** import java.nio.channels.FileChannelImpl
*** 54,72 ****
   * <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 FileDescriptor fd;
    // The corresponding input and output streams.
    private DataOutputStream out;
    private DataInputStream in;
    
-   private FileChannel ch; /* cached associated file-channel */
    
    /**
     * This method initializes a new instance of <code>RandomAccessFile</code>
--- 55,73 ----
   * <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>
*************** public class RandomAccessFile implements
*** 119,136 ****
    {
      int fdmode;
      if (mode.equals("r"))
!       fdmode = FileDescriptor.READ;
      else if (mode.equals("rw"))
!       fdmode = FileDescriptor.READ | FileDescriptor.WRITE;
      else if (mode.equals("rws"))
        {
! 	fdmode = (FileDescriptor.READ | FileDescriptor.WRITE
! 		  | FileDescriptor.SYNC);
        }
      else if (mode.equals("rwd"))
        {
! 	fdmode = (FileDescriptor.READ | FileDescriptor.WRITE
! 		  | FileDescriptor.DSYNC);
        }
      else
        throw new IllegalArgumentException ("invalid mode: " + mode);
--- 120,137 ----
    {
      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);
*************** public class RandomAccessFile implements
*** 141,151 ****
        {
          s.checkRead(fileName);
  
!         if ((fdmode & FileDescriptor.WRITE) != 0)
            s.checkWrite(fileName);
        }
  
!     fd = new FileDescriptor (fileName, fdmode);
      out = new DataOutputStream (new FileOutputStream (fd));
      in = new DataInputStream (new FileInputStream (fd));
    }
--- 142,153 ----
        {
          s.checkRead(fileName);
  
!         if ((fdmode & FileChannelImpl.WRITE) != 0)
            s.checkWrite(fileName);
        }
  
!     ch = new FileChannelImpl (fileName, fdmode);
!     fd = new FileDescriptor(ch);
      out = new DataOutputStream (new FileOutputStream (fd));
      in = new DataInputStream (new FileInputStream (fd));
    }
*************** public class RandomAccessFile implements
*** 158,165 ****
     */
    public void close () throws IOException
    {
!     if (fd.valid())
!       fd.close();
    }
  
    /**
--- 160,166 ----
     */
    public void close () throws IOException
    {
!     ch.close();
    }
  
    /**
*************** public class RandomAccessFile implements
*** 172,181 ****
     */
    public final FileDescriptor getFD () throws IOException
    {
!     if (! fd.valid())
!       throw new IOException ();
! 
!     return fd;
    }
  
    /**
--- 173,184 ----
     */
    public final FileDescriptor getFD () throws IOException
    {
!     synchronized (this)
!       {
! 	if (fd == null)
! 	  fd = new FileDescriptor (ch);
! 	return fd;
!       }
    }
  
    /**
*************** public class RandomAccessFile implements
*** 188,212 ****
     */
    public long getFilePointer () throws IOException
    {
!     return fd.getFilePointer();
    }
  
    /**
!    * 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.  If the current
!    * length of the file is shorter than the specified length, the file
!    * is extended with bytes of an undefined value.
!    *  <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
    {
!     fd.setLength (newLen);
    }
  
    /**
--- 191,229 ----
     */
    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);
!       }
    }
  
    /**
*************** public class RandomAccessFile implements
*** 218,224 ****
     */
    public long length () throws IOException
    {
!     return fd.getLength ();
    }
  
    /**
--- 235,241 ----
     */
    public long length () throws IOException
    {
!     return ch.size();
    }
  
    /**
*************** public class RandomAccessFile implements
*** 239,245 ****
     * bytes are stored starting at the beginning of the array and up to 
     * <code>buf.length</code> bytes can be read.
     *
!    * @param buf The buffer to read bytes from the file into
     *
     * @return The actual number of bytes read or -1 if end of file
     *
--- 256,262 ----
     * 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
     *
*************** public class RandomAccessFile implements
*** 254,260 ****
     * 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 buf 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
     *
--- 271,277 ----
     * 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
     *
*************** public class RandomAccessFile implements
*** 316,327 ****
     * 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 & 0xFF) << 8) | (byte2 & 0xFF)</code>
     * <p>
     * This method can read a <code>char</code> written by an object 
     * implementing the
--- 333,344 ----
     * 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
*************** public class RandomAccessFile implements
*** 397,403 ****
     * throws an exception if there is not enough data left in the stream to
     * fill the buffer
     *
!    * @param buf The buffer into which to read the data
     *
     * @exception EOFException If end of file is reached before filling the 
     * buffer
--- 414,420 ----
     * 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
*************** public class RandomAccessFile implements
*** 417,425 ****
     * available and throws an exception if there is not enough data left in 
     * the stream to read <code>len</code> bytes.
     *
!    * @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
--- 434,442 ----
     * 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
*************** public class RandomAccessFile implements
*** 443,450 ****
     * 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 0 to 65535.
     * <p>
--- 460,467 ----
     * 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>
*************** public class RandomAccessFile implements
*** 507,516 ****
     * transformed to an <code>long</code> in the following manner:
     * <p>
     * <code>
!    * (long)((((long)byte1 & 0xFF) << 56) + (((long)byte2 & 0xFF) << 48) + 
!    * (((long)byte3 & 0xFF) << 40) + (((long)byte4 & 0xFF) << 32) + 
!    * (((long)byte5 & 0xFF) << 24) + (((long)byte6 & 0xFF) << 16) + 
!    * (((long)byte7 & 0xFF) << 8) + ((long)byte9 & 0xFF)))</code>
     * <p>
     * The value returned is in the range of 0 to 65535.
     * <p>
--- 524,533 ----
     * 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>
*************** public class RandomAccessFile implements
*** 537,548 ****
     * 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>
--- 554,565 ----
     * 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>
*************** public class RandomAccessFile implements
*** 595,601 ****
     * 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>
--- 612,618 ----
     * 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>
*************** public class RandomAccessFile implements
*** 702,708 ****
     */
    public void seek (long pos) throws IOException
    {
!     fd.seek (pos, FileDescriptor.SET, false);
    }
  
    /**
--- 719,725 ----
     */
    public void seek (long pos) throws IOException
    {
!     ch.position(pos);
    }
  
    /**
*************** public class RandomAccessFile implements
*** 726,742 ****
      if (numBytes == 0)
        return 0;
      
!     long curPos = fd.getFilePointer ();
!     long newPos = fd.seek (numBytes, FileDescriptor.CUR, true);
!     
!     return (int) (newPos - curPos);
    }
  
    /**
     * 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 The byte of data to write, passed as an int.
     *
     * @exception IOException If an error occurs
     */
--- 743,762 ----
      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 class RandomAccessFile implements
*** 749,755 ****
     * 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 buf The array of bytes to write to the file
     */
    public void write (byte[] buffer) throws IOException
    {
--- 769,775 ----
     * 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
    {
*************** public class RandomAccessFile implements
*** 760,766 ****
     * This method writes <code>len</code> bytes to the file from the specified
     * array starting at index <code>offset</code> into the array.
     *
!    * @param buf 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
     *
--- 780,786 ----
     * 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
     *
*************** public class RandomAccessFile implements
*** 776,782 ****
     * 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 b The <code>boolean</code> value to write to the stream
     *
     * @exception IOException If an error occurs
     */
--- 796,802 ----
     * 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 class RandomAccessFile implements
*** 789,856 ****
     * This method writes a Java <code>byte</code> value to the underlying
     * output stream.
     *
!    * @param b 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 v) throws IOException
    {
!     out.writeByte(v);
    }
  
    /**
     * This method writes a Java <code>short</code> to the stream, high byte
     * first.  This method requires two bytes to encode the value.
     *
!    * @param s 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 v) throws IOException
    {
!     out.writeShort(v);
    }
  
    /**
     * This method writes a single <code>char</code> value to the stream,
     * high byte first.
     *
!    * @param v The <code>char</code> value to write, passed as 
     * an <code>int</code>.
     *
     * @exception IOException If an error occurs
     */
!   public final void writeChar (int v) throws IOException
    {
!     out.writeChar(v);
    }
  
    /**
     * This method writes a Java <code>int</code> to the stream, high bytes
     * first.  This method requires four bytes to encode the value.
     *
!    * @param v The <code>int</code> value to write to the stream.
     *
     * @exception IOException If an error occurs
     */
!   public final void writeInt (int v) throws IOException
    {
!     out.writeInt(v);
    }
  
    /**
     * This method writes a Java <code>long</code> to the stream, high bytes
     * first.  This method requires eight bytes to encode the value.
     *
!    * @param v The <code>long</code> value to write to the stream.
     *
     * @exception IOException If an error occurs
     */
!   public final void writeLong (long v) throws IOException
    {
!     out.writeLong(v);
    }
  
    /**
--- 809,876 ----
     * 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);
    }
  
    /**
*************** public class RandomAccessFile implements
*** 861,875 ****
     * then writing this <code>int</code> value to the stream exactly the same
     * as the <code>writeInt()</code> method does.
     *
!    * @param v The floating point number to write to the stream.
     *
     * @exception IOException If an error occurs
     *
     * @see #writeInt(int)
     */
!   public final void writeFloat (float v) throws IOException
    {
!     out.writeFloat(v);
    }
  
    /**
--- 881,895 ----
     * 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);
    }
  
    /**
*************** public class RandomAccessFile implements
*** 880,895 ****
     * then writing this <code>long</code> value to the stream exactly the same
     * as the <code>writeLong()</code> method does.
     *
!    * @param v 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 v) throws IOException
    {
!     out.writeDouble(v);
    }
  
    /**
--- 900,915 ----
     * 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);
    }
  
    /**
*************** public class RandomAccessFile implements
*** 897,909 ****
     * stream.  One byte is written for each character in the <code>String</code>.
     * The high eight bits of each character are discarded.
     *
!    * @param s The <code>String</code> to write to the stream
     *
     * @exception IOException If an error occurs
     */
!   public final void writeBytes (String s) throws IOException
    {
!     out.writeBytes(s);
    }
    
    /**
--- 917,929 ----
     * 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);
    }
    
    /**
*************** public class RandomAccessFile implements
*** 911,923 ****
     * stream.  There will be two bytes for each character value.  The high
     * byte of the character will be written first.
     *
!    * @param s The <code>String</code> to write to the stream.
     *
     * @exception IOException If an error occurs
     */
!   public final void writeChars (String s) throws IOException
    {
!     out.writeChars(s);
    }
    
    /**
--- 931,943 ----
     * 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);
    }
    
    /**
*************** public class RandomAccessFile implements
*** 945,957 ****
     * character value are stored in bits 0-5 of byte three, with the high bits
     * of that byte set to "10".
     *
!    * @param s The <code>String</code> to write to the output in UTF format
     *
     * @exception IOException If an error occurs
     */
!   public final void writeUTF (String s) throws IOException
    {
!     out.writeUTF(s);
    }
    
    /**
--- 965,977 ----
     * 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);
    }
    
    /**
*************** public class RandomAccessFile implements
*** 962,972 ****
     */
    public final synchronized FileChannel getChannel ()
    {
-     if (ch == null)
-       ch = new FileChannelImpl (fd, true, this);
- 
      return ch;
    }
! 
! } // class RandomAccessFile
! 
--- 982,987 ----
     */
    public final synchronized FileChannel getChannel ()
    {
      return ch;
    }
! }
diff -Nrcpad gcc-3.4.3/libjava/java/io/Reader.java gcc-4.0.0/libjava/java/io/Reader.java
*** gcc-3.4.3/libjava/java/io/Reader.java	Tue Mar 18 06:00:25 2003
--- gcc-4.0.0/libjava/java/io/Reader.java	Thu Feb 17 07:48:32 2005
*************** package java.io;
*** 49,55 ****
   * 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) 
   */
--- 49,55 ----
   * 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
*** 103,109 ****
     *
     * @param buf The array into which the chars read should be stored
     * @param offset 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.
     *
--- 103,109 ----
     *
     * @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.
     *
*************** public abstract class Reader
*** 189,195 ****
      * <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 
--- 189,195 ----
      * <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 
*************** public abstract class Reader
*** 243,249 ****
      * override this method to provide a more efficient implementation where
      * one exists.
      *
!     * @param num_chars The requested number of chars to skip
      *
      * @return The actual number of chars skipped.
      *
--- 243,249 ----
      * 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.
      *
diff -Nrcpad gcc-3.4.3/libjava/java/io/SequenceInputStream.java gcc-4.0.0/libjava/java/io/SequenceInputStream.java
*** gcc-3.4.3/libjava/java/io/SequenceInputStream.java	Tue Jan 22 22:40:14 2002
--- gcc-4.0.0/libjava/java/io/SequenceInputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* SequenceInputStream.java -- Reads multiple input streams in sequence
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.util.Enumeration;
*** 61,67 ****
    * 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
  {
--- 61,67 ----
    * 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
  {
*************** public class SequenceInputStream extends
*** 71,78 ****
    /** Secondary input stream; not used if constructed w/ enumeration. */
    private InputStream in2;
  
!   /** The enum handle; not used if constructed w/ 2 explicit input streams. */
!   private Enumeration enum;
  
   /**
    * This method creates a new <code>SequenceInputStream</code> that obtains
--- 71,78 ----
    /** 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
*************** public class SequenceInputStream extends
*** 84,91 ****
    */
    public SequenceInputStream(Enumeration e)
    {
!     enum = e;
!     in = (InputStream) enum.nextElement();
      in2 = null;
    }
  
--- 84,91 ----
    */
    public SequenceInputStream(Enumeration e)
    {
!     this.e = e;
!     in = (InputStream) e.nextElement();
      in2 = null;
    }
  
*************** public class SequenceInputStream extends
*** 204,213 ****
    {
      InputStream nextIn = null;
  
!     if (enum != null)
        {
!         if (enum.hasMoreElements())
! 	  nextIn = (InputStream) enum.nextElement();
        }
      else
        if (in2 != null)
--- 204,213 ----
    {
      InputStream nextIn = null;
  
!     if (e != null)
        {
!         if (e.hasMoreElements())
! 	  nextIn = (InputStream) e.nextElement();
        }
      else
        if (in2 != null)
diff -Nrcpad gcc-3.4.3/libjava/java/io/Serializable.java gcc-4.0.0/libjava/java/io/Serializable.java
*** gcc-3.4.3/libjava/java/io/Serializable.java	Sat Oct 11 18:38:12 2003
--- gcc-4.0.0/libjava/java/io/Serializable.java	Tue Feb 22 18:58:50 2005
***************
*** 1,5 ****
  /* Serializable.java -- Interface to indicate a class may be serialized
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 47,55 ****
    * the implementing class may be serialized.
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy <warrenl@cygnus.com>
    */
  public interface Serializable
  {
-   long serialVersionUID = 1196656838076753133L;
  } // interface Serializable
--- 47,54 ----
    * 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-3.4.3/libjava/java/io/SerializablePermission.java gcc-4.0.0/libjava/java/io/SerializablePermission.java
*** gcc-3.4.3/libjava/java/io/SerializablePermission.java	Sun Mar 23 19:11:19 2003
--- gcc-4.0.0/libjava/java/io/SerializablePermission.java	Tue Apr 20 11:37:41 2004
*************** import java.security.BasicPermission;
*** 48,56 ****
    * 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><code>enableSubstitution</code> - Allows substitution of one object
!   * for another during serialization or deserialization.
    * </ul>
    *
    * @see java.security.BasicPermission
--- 48,56 ----
    * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/StreamCorruptedException.java gcc-4.0.0/libjava/java/io/StreamCorruptedException.java
*** gcc-3.4.3/libjava/java/io/StreamCorruptedException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/StreamCorruptedException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* StreamCorruptedException.java -- Error in stream during serialization
!    Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 43,49 ****
   * 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
   */
--- 43,49 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/io/StreamTokenizer.java gcc-4.0.0/libjava/java/io/StreamTokenizer.java
*** gcc-3.4.3/libjava/java/io/StreamTokenizer.java	Sun Nov 16 21:15:55 2003
--- gcc-4.0.0/libjava/java/io/StreamTokenizer.java	Thu Feb 17 07:48:32 2005
*************** package java.io;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
*************** public class StreamTokenizer
*** 73,84 ****
     * The rules are as follows:
     * <ul>
     * <li>For a token consisting of a single ordinary character, this is the 
!    *     value of that character.
!    * <li>For a quoted string, this is the value of the quote character
!    * <li>For a word, this is TT_WORD
!    * <li>For a number, this is TT_NUMBER
!    * <li>For the end of the line, this is TT_EOL
!    * <li>For the end of the stream, this is TT_EOF
     * </ul>
     */
    public int ttype = TT_NONE;
--- 73,84 ----
     * 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;
*************** public class StreamTokenizer
*** 122,128 ****
     * them.  For details on how this method operates by default, see
     * <code>StreamTokenizer(Reader)</code>.
     *
!    * @param in The <code>InputStream</code> to read from
     *
     * @deprecated Since JDK 1.1.
     */
--- 122,128 ----
     * 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 class StreamTokenizer
*** 141,156 ****
     * following manner:
     * <ul>
     * <li>The values 'A' through 'Z', 'a' through 'z' and 0xA0 through 0xFF
!    *     are initialized as alphabetic
!    * <li>The values 0x00 through 0x20 are initialized as whitespace
!    * <li>The values '\'' and '"' are initialized as quote characters
!    * <li>'/' is a comment character
!    * <li>Numbers will be parsed
!    * <li>EOL is not treated as significant
!    * <li>C  and C++ (//) comments are not recognized
     * </ul>
     *
!    * @param in The <code>Reader</code> to read chars from
     */
    public StreamTokenizer(Reader r)
    {
--- 141,156 ----
     * 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)
    {
*************** public class StreamTokenizer
*** 170,176 ****
     * This method sets the comment attribute on the specified
     * character.  Other attributes for the character are cleared.
     *
!    * @param c The character to set the comment attribute for, passed as an int
     */
    public void commentChar(int ch)
    {
--- 170,176 ----
     * 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)
    {
*************** public class StreamTokenizer
*** 251,263 ****
     * 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>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>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
--- 251,263 ----
     * 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
*************** public class StreamTokenizer
*** 266,275 ****
     * 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>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>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
--- 266,275 ----
     * 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
*************** public class StreamTokenizer
*** 280,297 ****
     * (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>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>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>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.
     * </ul>
     *
     * @return The token type
--- 280,297 ----
     * (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
*************** public class StreamTokenizer
*** 517,523 ****
     * quote, or comment) will be set on this character.  This character will
     * parse as its own token.
     *
!    * @param c The character to make ordinary, passed as an int
     */
    public void ordinaryChar(int ch)
    {
--- 517,523 ----
     * 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)
    {
*************** public class StreamTokenizer
*** 533,541 ****
     * range parse as its own token.
     *
     * @param low The low end of the range of values to set the whitespace
!    *            attribute for
!    * @param high The high end of the range of values to set the whitespace
!    *            attribute for
     */
    public void ordinaryChars(int low, int hi)
    {
--- 533,541 ----
     * 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)
    {
*************** public class StreamTokenizer
*** 575,581 ****
     * This method sets the quote attribute on the specified character.
     * Other attributes for the character are cleared.
     *
!    * @param c The character to set the quote attribute for, passed as an int.
     */
    public void quoteChar(int ch)
    {
--- 575,581 ----
     * 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)
    {
*************** public class StreamTokenizer
*** 635,649 ****
     * 'x' is determined as follows.
     * <p>
     * <ul>
!    * <li>If no token has been read, then 'x' is "NOTHING" and 'n' is 0
!    * <li>If <code>ttype</code> is TT_EOF, then 'x' is "EOF"
!    * <li>If <code>ttype</code> is TT_EOL, then 'x' is "EOL"
!    * <li>If <code>ttype</code> is TT_WORD, then 'x' is <code>sval</code>
     * <li>If <code>ttype</code> is TT_NUMBER, then 'x' is "n=strnval" where
!    * 'strnval' is <code>String.valueOf(nval)</code>.
     * <li>If <code>ttype</code> is a quote character, then 'x' is
!    * <code>sval</code>
!    * <li>For all other cases, 'x' is <code>ttype</code>
     * </ul>
     */
    public String toString()
--- 635,649 ----
     * '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()
*************** public class StreamTokenizer
*** 670,678 ****
     * specified range, range terminators included.
     *
     * @param low The low end of the range of values to set the whitespace
!    *            attribute for
!    * @param high The high end of the range of values to set the whitespace
!    *             attribute for
     */
    public void whitespaceChars(int low, int hi)
    {
--- 670,678 ----
     * 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)
    {
*************** public class StreamTokenizer
*** 692,700 ****
     * specified range, range terminators included.
     *
     * @param low The low end of the range of values to set the alphabetic
!    *            attribute for
!    * @param high The high end of the range of values to set the alphabetic
!    *             attribute for
     */
    public void wordChars(int low, int hi)
    {
--- 692,700 ----
     * 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)
    {
diff -Nrcpad gcc-3.4.3/libjava/java/io/StringBufferInputStream.java gcc-4.0.0/libjava/java/io/StringBufferInputStream.java
*** gcc-3.4.3/libjava/java/io/StringBufferInputStream.java	Tue Jan 22 22:40:14 2002
--- gcc-4.0.0/libjava/java/io/StringBufferInputStream.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* StringBufferInputStream.java -- Read an String as a stream
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 65,71 ****
    * @deprecated
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy <warrenl@cygnus.com>
    */
  public class StringBufferInputStream extends InputStream
  {
--- 65,71 ----
    * @deprecated
    *
    * @author Aaron M. Renn (arenn@urbanophile.com)
!   * @author Warren Levy (warrenl@cygnus.com)
    */
  public class StringBufferInputStream extends InputStream
  {
diff -Nrcpad gcc-3.4.3/libjava/java/io/StringReader.java gcc-4.0.0/libjava/java/io/StringReader.java
*** gcc-3.4.3/libjava/java/io/StringReader.java	Tue Mar 18 06:00:25 2003
--- gcc-4.0.0/libjava/java/io/StringReader.java	Tue Nov 16 11:30:12 2004
*************** package java.io;
*** 52,58 ****
   * 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
--- 52,58 ----
   * 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
*************** public class StringReader extends Reader
*** 74,80 ****
     * 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 StringReader(String buffer)
    {
--- 74,80 ----
     * 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)
    {
*************** public class StringReader extends Reader
*** 185,191 ****
      * 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 num_chars The requested number of chars to skip
      *
      * @return The actual number of chars skipped.
      */
--- 185,191 ----
      * 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.
      */
diff -Nrcpad gcc-3.4.3/libjava/java/io/StringWriter.java gcc-4.0.0/libjava/java/io/StringWriter.java
*** gcc-3.4.3/libjava/java/io/StringWriter.java	Tue Feb  4 21:07:15 2003
--- gcc-4.0.0/libjava/java/io/StringWriter.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* StringWriter.java -- Writes bytes to a StringBuffer
!    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 47,53 ****
    * 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
  {
--- 47,53 ----
    * 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
  {
*************** public class StringWriter extends Writer
*** 60,65 ****
--- 60,67 ----
    /**
     * 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
    {
diff -Nrcpad gcc-3.4.3/libjava/java/io/SyncFailedException.java gcc-4.0.0/libjava/java/io/SyncFailedException.java
*** gcc-3.4.3/libjava/java/io/SyncFailedException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/SyncFailedException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* SyncFailedException.java -- a file sync failed
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SyncFailedException.java -- a file sync failed
!    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.io;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/UTFDataFormatException.java gcc-4.0.0/libjava/java/io/UTFDataFormatException.java
*** gcc-3.4.3/libjava/java/io/UTFDataFormatException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/UTFDataFormatException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* UTFDataFormatException.java -- thrown on bad format in UTF data
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 43,49 ****
   * 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
--- 43,49 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/io/UnsupportedEncodingException.java gcc-4.0.0/libjava/java/io/UnsupportedEncodingException.java
*** gcc-3.4.3/libjava/java/io/UnsupportedEncodingException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/UnsupportedEncodingException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* UnsupportedEncodingException.java -- the requested encoding isn't supported
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 43,49 ****
   * not supported.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner <bothner@cygnus.com>
   * @since 1.1
   * @status updated to 1.4
   */
--- 43,49 ----
   * not supported.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner (bothner@cygnus.com)
   * @since 1.1
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/io/VMObjectStreamClass.java gcc-4.0.0/libjava/java/io/VMObjectStreamClass.java
*** gcc-3.4.3/libjava/java/io/VMObjectStreamClass.java	Mon Jan 20 06:46:28 2003
--- gcc-4.0.0/libjava/java/io/VMObjectStreamClass.java	Tue Feb 22 03:13:34 2005
*************** exception statement from your version. *
*** 38,44 ****
  
  package java.io;
  
! import java.lang.reflect.Method;
  
  final class VMObjectStreamClass
  {
--- 38,44 ----
  
  package java.io;
  
! import java.lang.reflect.Field;
  
  final class VMObjectStreamClass
  {
*************** final class VMObjectStreamClass
*** 47,50 ****
--- 47,140 ----
      * (a.k.a. <clinit>).
      */
    static native boolean hasClassInitializer (Class clazz);
+ 
+   /**
+    * Sets the value of the specified "double" field, allowing final values 
+    * to be assigned.
+    *
+    * @param field Field to set the value.
+    * @param obj Instance which will have its field set.
+    * @param val Value to put in the field.
+    */
+   static native void setDoubleNative(Field field, Object obj, double val);
+ 
+   /**
+    * Sets the value of the specified "float" field, allowing final values 
+    * to be assigned.
+    *
+    * @param field Field to set the value.
+    * @param obj Instance which will have its field set.
+    * @param val Value to put in the field.
+    */
+   static native void setFloatNative(Field field, Object obj, float val);
+ 
+   /**
+    * Sets the value of the specified "long" field, allowing final values 
+    * to be assigned.
+    *
+    * @param field Field to set the value.
+    * @param obj Instance which will have its field set.
+    * @param val Value to put in the field.
+    */
+   static native void setLongNative(Field field, Object obj, long val);
+   
+   /**
+    * Sets the value of the specified "int" field, allowing final values 
+    * to be assigned.
+    *
+    * @param field Field to set the value.
+    * @param obj Instance which will have its field set.
+    * @param val Value to put in the field.
+    */
+   static native void setIntNative(Field field, Object obj, int val);
+   
+   /**
+    * Sets the value of the specified "short" field, allowing final values 
+    * to be assigned.
+    *
+    * @param field Field to set the value.
+    * @param obj Instance which will have its field set.
+    * @param val Value to put in the field.
+    */
+   static native void setShortNative(Field field, Object obj, short val);
+ 
+   /**
+    * Sets the value of the specified "char" field, allowing final values 
+    * to be assigned.
+    *
+    * @param field Field to set the value.
+    * @param obj Instance which will have its field set.
+    * @param val Value to put in the field.
+    */
+   static native void setCharNative(Field field, Object obj, char val);
+ 
+   /**
+    * Sets the value of the specified "byte" field, allowing final values 
+    * to be assigned.
+    *
+    * @param field Field to set the value.
+    * @param obj Instance which will have its field set.
+    * @param val Value to put in the field.
+    */
+   static native void setByteNative(Field field, Object obj, byte val);
+ 
+   /**
+    * Sets the value of the specified "boolean" field, allowing final values 
+    * to be assigned.
+    *
+    * @param field Field to set the value.
+    * @param obj Instance which will have its field set.
+    * @param val Value to put in the field.
+    */
+   static native void setBooleanNative(Field field, Object obj, boolean val);
+ 
+   /**
+    * Sets the value of the specified object field, allowing final values 
+    * to be assigned.
+    *
+    * @param field Field to set the value.
+    * @param obj Instance which will have its field set.
+    * @param val Value to put in the field.
+    */
+   static native void setObjectNative(Field field, Object obj, Object val);
  }
diff -Nrcpad gcc-3.4.3/libjava/java/io/WriteAbortedException.java gcc-4.0.0/libjava/java/io/WriteAbortedException.java
*** gcc-3.4.3/libjava/java/io/WriteAbortedException.java	Sat Jun 15 18:59:15 2002
--- gcc-4.0.0/libjava/java/io/WriteAbortedException.java	Thu Feb 17 07:48:32 2005
***************
*** 1,5 ****
  /* WriteAbortedException.java -- wraps an exception thrown while writing
!    Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 44,50 ****
    * 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
    */
--- 44,50 ----
    * 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 exten
*** 81,87 ****
    /**
     * This method returns a message indicating what went wrong, in this
     * format:
!    * <code>super.getMessage() + (detail == null ? "" : "; " + detail)<code>.
     *
     * @return the chained message
     */
--- 81,87 ----
    /**
     * This method returns a message indicating what went wrong, in this
     * format:
!    * <code>super.getMessage() + (detail == null ? "" : "; " + detail)</code>.
     *
     * @return the chained message
     */
diff -Nrcpad gcc-3.4.3/libjava/java/io/Writer.java gcc-4.0.0/libjava/java/io/Writer.java
*** gcc-3.4.3/libjava/java/io/Writer.java	Mon Mar 24 08:27:28 2003
--- gcc-4.0.0/libjava/java/io/Writer.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Writer.java -- Base class for character output streams
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.io;
*** 51,57 ****
   * 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
  {
--- 51,57 ----
   * 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
  {
*************** public abstract class Writer
*** 75,85 ****
     * This method initializes a <code>Writer</code> that will synchronize
     * on the specified <code>Object</code>.
     *
!    * @param obj The <code>Object</code> to use for synchronizing critical
!    *            sections
     */
    protected Writer(Object lock)
    {
      this.lock = lock;
    }
  
--- 75,88 ----
     * 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;
    }
  
*************** public abstract class Writer
*** 157,163 ****
     *
     * @param str The <code>String</code> whose chars are to be written.
     *
!    * @param IOException If an error occurs
     */
    public void write(String str) throws IOException
    {
--- 160,166 ----
     *
     * @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
    {
diff -Nrcpad gcc-3.4.3/libjava/java/io/natFileDescriptorEcos.cc gcc-4.0.0/libjava/java/io/natFileDescriptorEcos.cc
*** gcc-3.4.3/libjava/java/io/natFileDescriptorEcos.cc	Tue May 13 09:13:31 2003
--- gcc-4.0.0/libjava/java/io/natFileDescriptorEcos.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,138 ****
- // natFileDescriptor.cc - Native part of FileDescriptor class.
- 
- /* Copyright (C) 1998, 1999, 2001, 2002  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- #include <config.h>
- 
- #include <errno.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/param.h>
- 
- #include <gcj/cni.h>
- #include <jvm.h>
- #include <java/io/FileDescriptor.h>
- #include <java/io/SyncFailedException.h>
- #include <java/io/IOException.h>
- #include <java/io/EOFException.h>
- #include <java/lang/ArrayIndexOutOfBoundsException.h>
- #include <java/lang/NullPointerException.h>
- #include <java/lang/String.h>
- #include <java/io/FileNotFoundException.h>
- 
- extern "C" void diag_write_char (char c);
- 
- static void 
- diag_write (char *data, int len)
- {
-   while (len > 0)
-     {
-       diag_write_char (*data++);
-       len--;
-     }
- }
- 
- #define NO_FSYNC_MESSAGE "sync unsupported"
- 
- void
- java::io::FileDescriptor::init(void)
- {
-   in = new java::io::FileDescriptor(0);
-   out = new java::io::FileDescriptor(1);
-   err = new java::io::FileDescriptor(2);
- }
- 
- jboolean
- java::io::FileDescriptor::valid (void)
- {
-   return true;
- }
- 
- void
- java::io::FileDescriptor::sync (void)
- {
-   // Some files don't support fsync.  We don't bother reporting these
-   // as errors.
- #ifdef HAVE_FSYNC
- #else
-   throw new SyncFailedException (JvNewStringLatin1 (NO_FSYNC_MESSAGE));
- #endif
- }
- 
- jint
- java::io::FileDescriptor::open (jstring path, jint jflags)
- {
-   return fd;
- }
- 
- void
- java::io::FileDescriptor::write (jint b)
- {
-   char d = (char) b;
-   ::diag_write (&d, 1);
- }
- 
- void
- java::io::FileDescriptor::write (jbyteArray b, jint offset, jint len)
- {
-   if (! b)
-     throw new java::lang::NullPointerException;
-   if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
-     throw new java::lang::ArrayIndexOutOfBoundsException;
-   char *bytes = (char *)elements (b) + offset;
-   ::diag_write (bytes, len);
- }
- 
- void
- java::io::FileDescriptor::close (void)
- {
- }
- 
- void
- java::io::FileDescriptor::setLength (long)
- {
- }
- 
- jint
- java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean)
- {
-   JvAssert (whence == SET || whence == CUR);
-   return 0;
- }
- 
- jlong
- java::io::FileDescriptor::getLength (void)
- {
-   return 0;
- }
- 
- jlong
- java::io::FileDescriptor::getFilePointer (void)
- {
-   return 0;
- }
- 
- jint
- java::io::FileDescriptor::read (void)
- {
-   return 0;
- }
- 
- jint
- java::io::FileDescriptor::read (jbyteArray buffer, jint offset, jint count)
- {
-   return 0;
- }
- 
- jint
- java::io::FileDescriptor::available (void)
- {
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/java/io/natFileDescriptorPosix.cc gcc-4.0.0/libjava/java/io/natFileDescriptorPosix.cc
*** gcc-3.4.3/libjava/java/io/natFileDescriptorPosix.cc	Sat Jul 26 00:40:50 2003
--- gcc-4.0.0/libjava/java/io/natFileDescriptorPosix.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,422 ****
- // natFileDescriptor.cc - Native part of FileDescriptor class.
- 
- /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- #include <config.h>
- 
- #include "posix.h"
- 
- #include <errno.h>
- #include <stdio.h>
- #include <string.h>
- #include <sys/stat.h>
- #include <sys/param.h>
- 
- #ifdef HAVE_SYS_IOCTL_H
- #define BSD_COMP /* Get FIONREAD on Solaris2. */
- #include <sys/ioctl.h>
- #endif
- 
- // Pick up FIONREAD on Solaris 2.5.
- #ifdef HAVE_SYS_FILIO_H
- #include <sys/filio.h>
- #endif
- 
- #include <gcj/cni.h>
- #include <jvm.h>
- #include <java/io/FileDescriptor.h>
- #include <java/io/SyncFailedException.h>
- #include <java/io/IOException.h>
- #include <java/io/InterruptedIOException.h>
- #include <java/io/EOFException.h>
- #include <java/lang/ArrayIndexOutOfBoundsException.h>
- #include <java/lang/NullPointerException.h>
- #include <java/lang/System.h>
- #include <java/lang/String.h>
- #include <java/lang/Thread.h>
- #include <java/io/FileNotFoundException.h>
- 
- #define NO_FSYNC_MESSAGE "sync unsupported"
- 
- void
- java::io::FileDescriptor::init (void)
- {
-   in = new java::io::FileDescriptor(0);
-   out = new java::io::FileDescriptor(1);
-   err = new java::io::FileDescriptor(2);
- }
- 
- jboolean
- java::io::FileDescriptor::valid (void)
- {
-   struct stat sb;
-   return fd >= 0 && ::fstat (fd, &sb) == 0;
- }
- 
- void
- java::io::FileDescriptor::sync (void)
- {
-   // Some files don't support fsync.  We don't bother reporting these
-   // as errors.
- #ifdef HAVE_FSYNC
-   if (::fsync (fd) && errno != EROFS && errno != EINVAL)
-     throw new SyncFailedException (JvNewStringLatin1 (strerror (errno)));
- #else
-   throw new SyncFailedException (JvNewStringLatin1 (NO_FSYNC_MESSAGE));
- #endif
- }
- 
- jint
- java::io::FileDescriptor::open (jstring path, jint jflags)
- {
-   char *buf = (char *) _Jv_AllocBytes (_Jv_GetStringUTFLength (path) + 1);
-   jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
-   buf[total] = '\0';
-   int flags = 0;
- #ifdef O_BINARY
-   flags |= O_BINARY;
- #endif
- 
-   JvAssert ((jflags & READ) || (jflags & WRITE));
-   int mode = 0666;
-   if ((jflags & READ) && (jflags & WRITE))
-     flags |= O_RDWR | O_CREAT;
-   else if ((jflags & READ))
-     flags |= O_RDONLY;
-   else
-     {
-       flags |= O_WRONLY | O_CREAT;
-       if ((jflags & APPEND))
- 	flags |= O_APPEND;
-       else
- 	flags |= O_TRUNC;
- 
-       if ((jflags & EXCL))
- 	{
- 	  flags |= O_EXCL;
- 	  // In this case we are making a temp file.
- 	  mode = 0600;
- 	}
-     }
- 
-   if ((jflags & SYNC))
-     flags |= O_SYNC;
- 
-   if ((jflags & DSYNC))
-     flags |= O_DSYNC;
- 
-   int fd = ::open (buf, flags, mode);
-   if (fd == -1 && errno == EMFILE)
-     {
-       // Because finalize () calls close () we might be able to continue.
-       java::lang::System::gc ();
-       java::lang::System::runFinalization ();
-       fd = ::open (buf, flags, mode);
-     }
-   if (fd == -1)
-     {
-       char msg[MAXPATHLEN + 200];
-       // We choose the formatting here for JDK compatibility, believe
-       // it or not.
-       sprintf (msg, "%s (%s)", buf, strerror (errno));
-       throw new FileNotFoundException (JvNewStringLatin1 (msg));
-     }
- 
-   _Jv_platform_close_on_exec (fd);
- 
-   return fd;
- }
- 
- void
- java::io::FileDescriptor::write (jint b)
- {
-   jbyte d = (jbyte) b;
-   int r = 0;
-   while (r != 1)
-     {
-       r = ::write (fd, &d, 1);
-       if (r == -1)
-         {
- 	  if (java::lang::Thread::interrupted())
- 	    {
- 	      InterruptedIOException *iioe
- 		= new InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
- 	      iioe->bytesTransferred = r == -1 ? 0 : r;
- 	      throw iioe;
- 	    }	    
- 	  if (errno != EINTR)
- 	    throw new IOException (JvNewStringLatin1 (strerror (errno)));
- 	}
-     }
-   position++;
- }
- 
- void
- java::io::FileDescriptor::write (jbyteArray b, jint offset, jint len)
- {
-   if (! b)
-     throw new java::lang::NullPointerException;
-   if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
-     throw new java::lang::ArrayIndexOutOfBoundsException;
-   jbyte *bytes = elements (b) + offset;
- 
-   int written = 0;
-   while (len > 0)
-     {
-       int r = ::write (fd, bytes, len);
-       if (r == -1)
-         {
- 	  if (java::lang::Thread::interrupted())
- 	    {
- 	      InterruptedIOException *iioe
- 		= new InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
- 	      iioe->bytesTransferred = written;
- 	      throw iioe;
- 	    }
- 	  if (errno != EINTR)
- 	    throw new IOException (JvNewStringLatin1 (strerror (errno)));
- 	}
- 
-       written += r;
-       len -= r;
-       bytes += r;
-       position += r;
-     }
- }
- 
- void
- java::io::FileDescriptor::close (void)
- {
-   jint save = fd;
-   fd = -1;
-   if (::close (save))
-     throw new IOException (JvNewStringLatin1 (strerror (errno)));
- }
- 
- void
- java::io::FileDescriptor::setLength (jlong pos)
- {
-   struct stat sb;
- 
- #ifdef HAVE_FTRUNCATE
-   if (::fstat (fd, &sb))
-     throw new IOException (JvNewStringLatin1 (strerror (errno)));
- 
-   if ((jlong) sb.st_size == pos) 
-     return;
- 
-   // If the file is too short, we extend it.  We can't rely on
-   // ftruncate() extending the file.  So we lseek() to 1 byte less
-   // than we want, and then we write a single byte at the end.
-   if ((jlong) sb.st_size < pos)
-     {
-       if (::lseek (fd, (off_t) (pos - 1), SEEK_SET) == -1)
- 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
-       char out = '\0';
-       int r = ::write (fd, &out, 1);
-       if (r <= 0 || ::lseek (fd, position, SEEK_SET) == -1)
- 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
-     }
-   else
-     {
-       if (::ftruncate (fd, (off_t) pos))
- 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
-       position = pos;
-     }
- #else /* HAVE_FTRUNCATE */
-   throw new IOException (JvNewStringLatin1 ("FileDescriptor.setLength not implemented"));
- #endif /* HAVE_FTRUNCATE */
- }
- 
- jint
- java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc)
- {
-   JvAssert (whence == SET || whence == CUR);
- 
-   if (eof_trunc)
-     {
-       jlong len = getLength ();
-       if (whence == SET)
- 	{
- 	  if (pos > len)
- 	    pos = len;
- 	}
-       else
- 	{
- 	  jlong here = getFilePointer ();
- 	  if (here + pos > len)
- 	    {
- 	      pos = len;
- 	      whence = SET;
- 	    }
- 	}
-     }
- 
-   off_t r = ::lseek (fd, (off_t) pos, whence == SET ? SEEK_SET : SEEK_CUR);
-   if (r == -1)
-     throw new IOException (JvNewStringLatin1 (strerror (errno)));
-   position = r;
-   return r;
- }
- 
- jlong
- java::io::FileDescriptor::getLength (void)
- {
-   struct stat sb;
-   if (::fstat (fd, &sb))
-     throw new IOException (JvNewStringLatin1 (strerror (errno)));
-   return sb.st_size;
- }
- 
- jlong
- java::io::FileDescriptor::getFilePointer (void)
- {
-   return position;
- }
- 
- jint
- java::io::FileDescriptor::read (void)
- {
-   jbyte b;
-   int r;
-   do
-     {
-       r = ::read (fd, &b, 1);
-       if (r == 0)
- 	return -1;
-       if (r == -1)
- 	{
- 	  if (java::lang::Thread::interrupted())
- 	    {
- 	      InterruptedIOException *iioe
- 		= new InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
- 	      iioe->bytesTransferred = r == -1 ? 0 : r;
- 	      throw iioe;
- 	    }
- 	  if (errno != EINTR)
- 	    throw new IOException (JvNewStringLatin1 (strerror (errno)));
- 	}
-     }
-   while (r != 1);
-   position++;
-   return b & 0xFF;
- }
- 
- jint
- java::io::FileDescriptor::read (jbyteArray buffer, jint offset, jint count)
- {
-   if (! buffer)
-     throw new java::lang::NullPointerException;
-   jsize bsize = JvGetArrayLength (buffer);
-   if (offset < 0 || count < 0 || offset + count > bsize)
-     throw new java::lang::ArrayIndexOutOfBoundsException;
- 
-   // Must return 0 if an attempt is made to read 0 bytes.
-   if (count == 0)
-     return 0;
- 
-   jbyte *bytes = elements (buffer) + offset;
-   int r;
-   do
-     {
-       r = ::read (fd, bytes, count);
-       if (r == 0)
- 	return -1;
-       if (r == -1)
- 	{
- 	  if (java::lang::Thread::interrupted())
- 	    {
- 	      InterruptedIOException *iioe
- 		= new InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
- 	      iioe->bytesTransferred = r == -1 ? 0 : r;
- 	      throw iioe;
- 	    }
- 	  if (errno != EINTR)
- 	    throw new IOException (JvNewStringLatin1 (strerror (errno)));
- 	}
-     }
-   while (r <= 0);
-   position += r;
-   return r;
- }
- 
- jint
- java::io::FileDescriptor::available (void)
- {
- #if defined (FIONREAD) || defined (HAVE_SELECT) || defined (HAVE_FSTAT)
-   long num = 0;
-   int r = 0;
-   bool num_set = false;
- 
- #if defined (FIONREAD)
-   r = ::ioctl (fd, FIONREAD, &num);
-   if (r == -1 && errno == ENOTTY)
-     {
-       // If the ioctl doesn't work, we don't care.
-       r = 0;
-       num = 0;
-     }
-   else
-     num_set = true;
- #elif defined (HAVE_SELECT)
-   if (fd < 0)
-     {
-       errno = EBADF;
-       r = -1;
-     }
- #endif
- 
-   if (r == -1)
-     {
-     posix_error:
-       throw new IOException (JvNewStringLatin1 (strerror (errno)));
-     }
- 
-   // If we didn't get anything, and we have fstat, then see if see if
-   // we're reading a regular file.  On many systems, FIONREAD does not
-   // work on regular files; select() likewise returns a useless
-   // result.  This is run incorrectly when FIONREAD does work on
-   // regular files and we are at the end of the file.  However, this
-   // case probably isn't very important.
- #if defined (HAVE_FSTAT)
-   if (! num_set)
-     {
-       struct stat sb;
-       off_t where = 0;
-       if (fstat (fd, &sb) != -1
- 	  && S_ISREG (sb.st_mode)
- 	  && (where = lseek (fd, 0, SEEK_CUR)) != (off_t) -1)
- 	{
- 	  num = (long) (sb.st_size - where);
- 	  num_set = true;
- 	}
-     }
- #endif /* HAVE_FSTAT */
- 
- #if defined (HAVE_SELECT)
-   if (! num_set)
-     {
-       fd_set rd;
-       FD_ZERO (&rd);
-       FD_SET (fd, &rd);
-       struct timeval tv;
-       tv.tv_sec = 0;
-       tv.tv_usec = 0;
-       r = _Jv_select (fd + 1, &rd, NULL, NULL, &tv);
-       if (r == -1)
- 	goto posix_error;
-       num = r == 0 ? 0 : 1;
-     }
- #endif /* HAVE_SELECT */
- 
-   return (jint) num;
- #else
-   return 0;
- #endif
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/java/io/natFileDescriptorWin32.cc gcc-4.0.0/libjava/java/io/natFileDescriptorWin32.cc
*** gcc-3.4.3/libjava/java/io/natFileDescriptorWin32.cc	Tue Dec  2 22:26:49 2003
--- gcc-4.0.0/libjava/java/io/natFileDescriptorWin32.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,352 ****
- // natFileDescriptorWin32.cc - Native part of FileDescriptor class.
- 
- /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software 
-    Foundation, Inc.
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- // FIXME: In order to support interrupting of IO operations, we
- // need to change to use the windows asynchronous IO functions
- 
- #include <config.h>
- #include <platform.h>
- 
- #include <stdio.h>
- #include <string.h>
- 
- #undef STRICT
- 
- #include <java/io/FileDescriptor.h>
- #include <java/io/SyncFailedException.h>
- #include <java/io/IOException.h>
- #include <java/io/InterruptedIOException.h>
- #include <java/io/EOFException.h>
- #include <java/lang/ArrayIndexOutOfBoundsException.h>
- #include <java/lang/NullPointerException.h>
- #include <java/lang/String.h>
- #include <java/lang/Thread.h>
- #include <java/io/FileNotFoundException.h>
- 
- static bool testCanUseGetHandleInfo()
- {
-   /* Test to see whether GetHandleInformation can be used
-      for console input or screen buffers. This is better
-      a kludgy OS version check. */
-   DWORD dwFlags;
-   return GetHandleInformation (GetStdHandle (STD_INPUT_HANDLE),
-     &dwFlags) != 0;
- }
- 
- // FIXME: casting a FILE (pointer) to a jint will not work on Win64 --
- //        we should be using gnu.gcj.RawData's.
- 
- void
- java::io::FileDescriptor::init(void)
- {
-   in = new java::io::FileDescriptor((jint)(GetStdHandle (STD_INPUT_HANDLE)));
-   out = new java::io::FileDescriptor((jint)(GetStdHandle (STD_OUTPUT_HANDLE)));
-   err = new java::io::FileDescriptor((jint)(GetStdHandle (STD_ERROR_HANDLE)));
- }
- 
- jboolean
- java::io::FileDescriptor::valid (void) {
-   static bool bCanUseGetHandleInfo = testCanUseGetHandleInfo();
-   if (bCanUseGetHandleInfo)
-   {
-     /* As with UNIX, a "file" descriptor can be one of
-        a gazillion possible underlying things like a pipe
-        or socket, so we can't get too fancy here. */
-     DWORD dwFlags;
-     HANDLE h = (HANDLE) fd;
-     return GetHandleInformation (h, &dwFlags) != 0;
-   }
-   else
-   {
-     /* Can't use GetHandleInformation() for console handles on < WinNT 5. */
-     return true;
-   }
- }
- 
- void
- java::io::FileDescriptor::sync (void) {
-   if (! FlushFileBuffers ((HANDLE)fd))
-   {
-     DWORD dwErrorCode = GetLastError ();
-     throw new SyncFailedException (_Jv_WinStrError (dwErrorCode));
-   }
- }
- 
- jint
- java::io::FileDescriptor::open (jstring path, jint jflags) {
- 
-   HANDLE handle = NULL;
-   DWORD access = 0;
-   DWORD create = OPEN_EXISTING;
-   
-   JV_TEMP_STRING_WIN32(cpath, path)
- 
-   JvAssert((jflags & READ) || (jflags & WRITE));
- 
-   if ((jflags & READ) && (jflags & WRITE))
-     {
-       access = GENERIC_READ | GENERIC_WRITE;
-       if (jflags & EXCL)
-         create = CREATE_NEW; // this will raise error if file exists.
-       else
-         create = OPEN_ALWAYS; // equivalent to O_CREAT
-     }
-   else if (jflags & READ)
-     {
-       access = GENERIC_READ;
-       create = OPEN_EXISTING; // ignore EXCL
-     }
-   else
-     { 
-       access = GENERIC_WRITE;
-       if (jflags & EXCL)
-         create = CREATE_NEW;
-       else if (jflags & APPEND)
-         create = OPEN_ALWAYS;
-       else
-         create = CREATE_ALWAYS;
-     }
- 
-   handle = CreateFile(cpath, access, FILE_SHARE_READ | FILE_SHARE_WRITE,
-     NULL, create, 0, NULL);
- 
-   if (handle == INVALID_HANDLE_VALUE)
-     {
-        DWORD dwErrorCode = GetLastError ();
-        throw new FileNotFoundException (_Jv_WinStrError (cpath, dwErrorCode));
-     }
- 
-   // For APPEND mode, move the file pointer to the end of the file.
-   if (jflags & APPEND)
-     {
-       DWORD low = SetFilePointer (handle, 0, NULL, FILE_END);
-       if ((low == 0xffffffff) && (GetLastError () != NO_ERROR)) 
-       {
-         DWORD dwErrorCode = GetLastError ();
-         throw new FileNotFoundException (_Jv_WinStrError (cpath, dwErrorCode));
-       }
-     }
-     
-   // Make this handle non-inheritable so that child
-   // processes don't inadvertently prevent us from
-   // closing this file.
-   _Jv_platform_close_on_exec (handle);
- 
-   return (jint) handle;
- }
- 
- void
- java::io::FileDescriptor::write (jint b)
- {
-   DWORD bytesWritten;
-   jbyte buf = (jbyte)b;
- 
-   if (WriteFile ((HANDLE)fd, &buf, 1, &bytesWritten, NULL))
-     {
-       if (java::lang::Thread::interrupted())
-         {
-           InterruptedIOException *iioe = new InterruptedIOException (JvNewStringLatin1 ("write interrupted"));
-           iioe->bytesTransferred = bytesWritten;
-     throw iioe;
-         }
-       if (bytesWritten != 1)
-         _Jv_ThrowIOException ();
-     }
-   else
-     _Jv_ThrowIOException ();
-   // FIXME: loop until bytesWritten == 1
- }
- 
- void
- java::io::FileDescriptor::write(jbyteArray b, jint offset, jint len)
- {
-   if (! b)
-     throw new java::lang::NullPointerException;
-   if(offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
-     throw new java::lang::ArrayIndexOutOfBoundsException;
- 
-   jbyte *buf = elements (b) + offset;
-   DWORD bytesWritten;
- 
-   if (WriteFile ((HANDLE)fd, buf, len, &bytesWritten, NULL))
-     {
-       if (java::lang::Thread::interrupted())
-         {
-           InterruptedIOException *iioe = new InterruptedIOException (JvNewStringLatin1 ("write interrupted"));
-           iioe->bytesTransferred = bytesWritten;
-           throw iioe;
-         }
-     }
-   else
-     _Jv_ThrowIOException ();
-   // FIXME: loop until bytesWritten == len
- }
- 
- void
- java::io::FileDescriptor::close (void)
- {
-   HANDLE save = (HANDLE)fd;
-   fd = (jint)INVALID_HANDLE_VALUE;
-   if (! CloseHandle (save))
-     _Jv_ThrowIOException ();
- }
- 
- void
- java::io::FileDescriptor::setLength(jlong pos)
- {
-   LONG liOrigFilePointer;
-   LONG liNewFilePointer;
-   LONG liEndFilePointer;
- 
-   // Get the original file pointer.
-   if (SetFilePointer((HANDLE) fd, (LONG) 0, &liOrigFilePointer,
-          FILE_CURRENT) != (BOOL) 0
-       && (GetLastError() != NO_ERROR))
-     _Jv_ThrowIOException ();
- 
-   // Get the length of the file.
-   if (SetFilePointer((HANDLE) fd, (LONG) 0, &liEndFilePointer,
-          FILE_END) != (BOOL) 0
-       && (GetLastError() != NO_ERROR))
-     _Jv_ThrowIOException ();
- 
-   if ((jlong)liEndFilePointer == pos)
-     {
-       // Restore the file pointer.
-       if (liOrigFilePointer != liEndFilePointer)
-   {
-     if (SetFilePointer((HANDLE) fd, liOrigFilePointer, &liNewFilePointer,
-            FILE_BEGIN) != (BOOL) 0
-         && (GetLastError() != NO_ERROR))
-       _Jv_ThrowIOException ();
-   }
-       return;
-     }
- 
-   // Seek to the new end of file.
-   if (SetFilePointer((HANDLE) fd, (LONG) pos, &liNewFilePointer,
-          FILE_BEGIN) != (BOOL) 0
-       && (GetLastError() != NO_ERROR))
-     _Jv_ThrowIOException ();
- 
-   // Truncate the file at this point.
-   if (SetEndOfFile((HANDLE) fd) != (BOOL) 0 && (GetLastError() != NO_ERROR))
-     _Jv_ThrowIOException ();
- 
-   if (liOrigFilePointer < liNewFilePointer)
-     {
-       // Restore the file pointer.
-       if (SetFilePointer((HANDLE) fd, liOrigFilePointer, &liNewFilePointer,
-         FILE_BEGIN) != (BOOL) 0
-         && (GetLastError() != NO_ERROR))
-         _Jv_ThrowIOException ();
-     }
- }
- 
- jint
- java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc)
- {
-   JvAssert (whence == SET || whence == CUR);
- 
-   jlong len = getLength();
-   jlong here = getFilePointer();
- 
-   if (eof_trunc
-       && ((whence == SET && pos > len) || (whence == CUR && here + pos > len)))
-     {
-       whence = SET;
-       pos = len;
-     }
- 
-   LONG high = pos >> 32;
-   DWORD low = SetFilePointer ((HANDLE)fd, (DWORD)(0xffffffff & pos), &high, whence == SET ? FILE_BEGIN : FILE_CURRENT);
-   if ((low == 0xffffffff) && (GetLastError () != NO_ERROR))
-     _Jv_ThrowIOException ();
-   return low;
- }
- 
- jlong
- java::io::FileDescriptor::getFilePointer(void)
- {
-   LONG high = 0;
-   DWORD low = SetFilePointer ((HANDLE)fd, 0, &high, FILE_CURRENT);
-   if ((low == 0xffffffff) && (GetLastError() != NO_ERROR))
-     _Jv_ThrowIOException ();
-   return (((jlong)high) << 32L) | (jlong)low;
- }
- 
- jlong
- java::io::FileDescriptor::getLength(void)
- {
-   DWORD high;
-   DWORD low;
- 
-   low = GetFileSize ((HANDLE)fd, &high);
-   // FIXME: Error checking
-   return (((jlong)high) << 32L) | (jlong)low;
- }
- 
- jint
- java::io::FileDescriptor::read(void)
- {
-   CHAR buf;
-   DWORD read;
- 
-   if (! ReadFile ((HANDLE)fd, &buf, 1, &read, NULL))
-     {
-       if (GetLastError () == ERROR_BROKEN_PIPE)
-         return -1;
-       else
-         _Jv_ThrowIOException ();
-     }
- 
-   if (! read)
-     return -1;
-   else
-     return (jint)(buf & 0xff);
- }
- 
- jint
- java::io::FileDescriptor::read(jbyteArray buffer, jint offset, jint count)
- {
-   if (! buffer)
-     throw new java::lang::NullPointerException;
- 
-   jsize bsize = JvGetArrayLength (buffer);
-   if (offset < 0 || count < 0 || offset + count > bsize)
-     throw new java::lang::ArrayIndexOutOfBoundsException;
- 
-   // Must return 0 if an attempt is made to read 0 bytes.
-   if (count == 0)
-     return 0;
- 
-   jbyte *bytes = elements (buffer) + offset;
- 
-   DWORD read;
-   if (! ReadFile((HANDLE)fd, bytes, count, &read, NULL))
-     {
-       if (GetLastError () == ERROR_BROKEN_PIPE)
-         return -1;
-       else
-         _Jv_ThrowIOException ();
-     }
- 
-   if (read == 0) return -1;
- 
-   return (jint)read;
- }
- 
- jint
- java::io::FileDescriptor::available(void)
- {
-   // FIXME:
-   return getLength() - getFilePointer();
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/java/io/natObjectInputStream.cc gcc-4.0.0/libjava/java/io/natObjectInputStream.cc
*** gcc-3.4.3/libjava/java/io/natObjectInputStream.cc	Fri Feb 28 11:38:56 2003
--- gcc-4.0.0/libjava/java/io/natObjectInputStream.cc	Tue Feb 22 03:13:34 2005
*************** details.  */
*** 12,17 ****
--- 12,18 ----
  
  #include <gcj/cni.h>
  #include <jvm.h>
+ #include <gcj/method.h>
  
  #include <java/io/ObjectInputStream$GetField.h>
  #include <java/io/ObjectInputStream.h>
*************** details.  */
*** 19,24 ****
--- 20,29 ----
  #include <java/lang/Class.h>
  #include <java/lang/reflect/Modifier.h>
  #include <java/lang/reflect/Method.h>
+ #include <java/lang/ArrayIndexOutOfBoundsException.h>
+ #include <java/lang/SecurityManager.h>
+ #include <java/lang/reflect/Constructor.h>
+ #include <java/lang/reflect/Method.h>
  
  #ifdef DEBUG
  #include <java/lang/System.h>
*************** details.  */
*** 26,32 ****
  #endif
  
  jobject
! java::io::ObjectInputStream::allocateObject (jclass klass)
  {
    jobject obj = NULL;
    using namespace java::lang::reflect;
--- 31,38 ----
  #endif
  
  jobject
! java::io::ObjectInputStream::allocateObject (jclass klass, jclass,
!   ::java::lang::reflect::Constructor *ctr)
  {
    jobject obj = NULL;
    using namespace java::lang::reflect;
*************** java::io::ObjectInputStream::allocateObj
*** 38,59 ****
  	obj = NULL;	
        else
  	{
! 	  obj = JvAllocObject (klass);
! 	}
      }
    catch (jthrowable t)
      {
        return NULL;
      }
  
!   return obj;
! }
! 
  
- void 
- java::io::ObjectInputStream::callConstructor (jclass klass, jobject obj)
- { 
-   jstring init_name = JvNewStringLatin1 ("<init>");
    // This is a bit inefficient, and a bit of a hack, since we don't
    // actually use the Method and since what is returned isn't
    // technically a Method.  We can't use Method.invoke as it looks up
--- 44,59 ----
  	obj = NULL;	
        else
  	{
! 	  obj = _Jv_AllocObject (klass);
! 	}	
      }
    catch (jthrowable t)
      {
        return NULL;
      }
  
!   jmethodID meth = _Jv_FromReflectedConstructor (ctr);
  
    // This is a bit inefficient, and a bit of a hack, since we don't
    // actually use the Method and since what is returned isn't
    // technically a Method.  We can't use Method.invoke as it looks up
*************** java::io::ObjectInputStream::callConstru
*** 61,71 ****
    JArray<jclass> *arg_types
      = (JArray<jclass> *) JvNewObjectArray (0, &java::lang::Class::class$,
  					   NULL);
!   java::lang::reflect::Method *m = klass->getPrivateMethod (init_name,
! 							    arg_types);
    // We lie about this being a constructor.  If we put `true' here
    // then _Jv_CallAnyMethodA would try to allocate the object for us.
-   jmethodID meth = (jmethodID) ((char *) (klass->methods)
- 				+ m->offset);
    _Jv_CallAnyMethodA (obj, JvPrimClass (void), meth, false, arg_types, NULL);
  }
--- 61,77 ----
    JArray<jclass> *arg_types
      = (JArray<jclass> *) JvNewObjectArray (0, &java::lang::Class::class$,
  					   NULL);
! 
    // We lie about this being a constructor.  If we put `true' here
    // then _Jv_CallAnyMethodA would try to allocate the object for us.
    _Jv_CallAnyMethodA (obj, JvPrimClass (void), meth, false, arg_types, NULL);
+ 
+   return obj;
+ }
+ 
+ java::lang::ClassLoader*
+ java::io::ObjectInputStream::currentClassLoader (::java::lang::SecurityManager *sm)
+ {
+   return sm->currentClassLoader ();
  }
+ 
diff -Nrcpad gcc-3.4.3/libjava/java/io/natVMObjectStreamClass.cc gcc-4.0.0/libjava/java/io/natVMObjectStreamClass.cc
*** gcc-3.4.3/libjava/java/io/natVMObjectStreamClass.cc	Mon Jan 20 06:46:28 2003
--- gcc-4.0.0/libjava/java/io/natVMObjectStreamClass.cc	Tue Feb 22 03:13:34 2005
*************** details.  */
*** 13,23 ****
--- 13,87 ----
  
  #include <java/io/VMObjectStreamClass.h>
  #include <java/lang/Class.h>
+ #include <java/lang/reflect/Field.h>
+ 
+ using namespace java::lang::reflect;
  
  jboolean
  java::io::VMObjectStreamClass::hasClassInitializer (jclass klass)
  {
+   if (klass->isPrimitive())
+     return false;
    _Jv_Method *meth = _Jv_GetMethodLocal(klass, gcj::clinit_name,
  					       gcj::void_signature);
    return (meth != NULL);
  }
+ 
+ void
+ java::io::VMObjectStreamClass::setDoubleNative (Field *f, jobject obj, 
+ 						jdouble val)
+ {
+   f->setDouble (NULL, obj, val, false);
+ }
+ 
+ void 
+ java::io::VMObjectStreamClass::setFloatNative (Field *f, jobject obj, 
+ 					       jfloat val)
+ {
+   f->setFloat (NULL, obj, val, false);
+ }
+ 
+ void
+ java::io::VMObjectStreamClass::setLongNative (Field *f, jobject obj, jlong val)
+ {
+   f->setLong (NULL, obj, val, false);
+ }
+ 
+ void
+ java::io::VMObjectStreamClass::setIntNative (Field *f, jobject obj, jint val)
+ {
+   f->setInt (NULL, obj, val, false);
+ }
+ 
+ void
+ java::io::VMObjectStreamClass::setShortNative (Field *f, jobject obj, 
+ 					       jshort val)
+ {
+   f->setShort (NULL, obj, val, false);
+ }
+ 
+ void
+ java::io::VMObjectStreamClass::setCharNative (Field *f, jobject obj, jchar val)
+ {
+   f->setChar (NULL, obj, val, false);
+ }
+ 
+ void
+ java::io::VMObjectStreamClass::setByteNative (Field *f, jobject obj, jbyte val)
+ {
+   f->setByte (NULL, obj, val, false);
+ }
+ 
+ void
+ java::io::VMObjectStreamClass::setBooleanNative (Field *f, jobject obj,
+ 						 jboolean val)
+ {
+   f->setBoolean (NULL, obj, val, false);
+ }
+ 
+ void
+ java::io::VMObjectStreamClass::setObjectNative (Field *f, jobject obj, 
+ 						jobject val)
+ {
+   f->set (NULL, obj, val, f->getType(), false);
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/AbstractMethodError.java gcc-4.0.0/libjava/java/lang/AbstractMethodError.java
*** gcc-3.4.3/libjava/java/lang/AbstractMethodError.java	Sat Jun 15 19:45:30 2002
--- gcc-4.0.0/libjava/java/lang/AbstractMethodError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* AbstractMethodError.java -- thrown if an abstract method is invoked
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 46,52 ****
   * reflecting on methods.
   *
   * @author Brian Jones
!  * @author Tom Tromey <tromey@cygnus.com>
   * @status updated to 1.4
   */
  public class AbstractMethodError extends IncompatibleClassChangeError
--- 46,52 ----
   * reflecting on methods.
   *
   * @author Brian Jones
!  * @author Tom Tromey (tromey@cygnus.com)
   * @status updated to 1.4
   */
  public class AbstractMethodError extends IncompatibleClassChangeError
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ArithmeticException.java gcc-4.0.0/libjava/java/lang/ArithmeticException.java
*** gcc-3.4.3/libjava/java/lang/ArithmeticException.java	Sat Jun 15 19:45:30 2002
--- gcc-4.0.0/libjava/java/lang/ArithmeticException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* ArithmeticException.java -- exception thrown to indicate conditions
     like divide by zero.
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 48,54 ****
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @status updated to 1.4
   */
  public class ArithmeticException extends RuntimeException
--- 48,54 ----
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @status updated to 1.4
   */
  public class ArithmeticException extends RuntimeException
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ArrayIndexOutOfBoundsException.java gcc-4.0.0/libjava/java/lang/ArrayIndexOutOfBoundsException.java
*** gcc-3.4.3/libjava/java/lang/ArrayIndexOutOfBoundsException.java	Sat Jun 15 19:45:30 2002
--- gcc-4.0.0/libjava/java/lang/ArrayIndexOutOfBoundsException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* ArrayIndexOutOfBoundsException.java -- exception thrown when accessing
     an illegal index.
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 48,54 ****
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @status updated to 1.4
   */
  public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException
--- 48,54 ----
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @status updated to 1.4
   */
  public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ArrayStoreException.java gcc-4.0.0/libjava/java/lang/ArrayStoreException.java
*** gcc-3.4.3/libjava/java/lang/ArrayStoreException.java	Sat Jun 15 19:45:30 2002
--- gcc-4.0.0/libjava/java/lang/ArrayStoreException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* ArrayStoreException.java -- exception thrown to when trying to store an
     object into an array of a different type.
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 48,54 ****
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @status updated to 1.4
   */
  public class ArrayStoreException extends RuntimeException
--- 48,54 ----
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @status updated to 1.4
   */
  public class ArrayStoreException extends RuntimeException
diff -Nrcpad gcc-3.4.3/libjava/java/lang/AssertionError.java gcc-4.0.0/libjava/java/lang/AssertionError.java
*** gcc-3.4.3/libjava/java/lang/AssertionError.java	Mon Sep 16 09:46:36 2002
--- gcc-4.0.0/libjava/java/lang/AssertionError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* AssertionError.java -- indication of a failed assertion
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AssertionError.java -- indication of a failed assertion
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.lang;
*** 47,53 ****
   * 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
   */
--- 47,53 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Boolean.java gcc-4.0.0/libjava/java/lang/Boolean.java
*** gcc-3.4.3/libjava/java/lang/Boolean.java	Thu Jun 13 18:16:24 2002
--- gcc-4.0.0/libjava/java/lang/Boolean.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Boolean.java -- object wrapper for boolean
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Boolean.java -- object wrapper for boolean
!    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 45,51 ****
   * <code>boolean</code> values.
   *
   * @author Paul Fisher
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.0
   * @status updated to 1.4
   */
--- 45,51 ----
   * <code>boolean</code> values.
   *
   * @author Paul Fisher
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.0
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Byte.java gcc-4.0.0/libjava/java/lang/Byte.java
*** gcc-3.4.3/libjava/java/lang/Byte.java	Sat Jun 15 19:45:30 2002
--- gcc-4.0.0/libjava/java/lang/Byte.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Byte.java -- object wrapper for byte
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Byte.java -- object wrapper for byte
!    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.lang;
*** 48,54 ****
   * @author Paul Fisher
   * @author John Keiser
   * @author Per Bothner
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.1
   * @status updated to 1.4
   */
--- 48,54 ----
   * @author Paul Fisher
   * @author John Keiser
   * @author Per Bothner
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.1
   * @status updated to 1.4
   */
*************** public final class Byte extends Number i
*** 147,153 ****
     *
     * @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>
     */
--- 147,153 ----
     *
     * @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>
     */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/CharSequence.java gcc-4.0.0/libjava/java/lang/CharSequence.java
*** gcc-3.4.3/libjava/java/lang/CharSequence.java	Sat Jun 15 19:45:30 2002
--- gcc-4.0.0/libjava/java/lang/CharSequence.java	Tue Apr 20 12:30:18 2004
*************** public interface CharSequence
*** 78,84 ****
    int length();
  
    /**
!    * Returns a new <code>CharSequence</char> of the indicated range.
     *
     * @param begin the start index (inclusive)
     * @param end the end index (exclusive)
--- 78,84 ----
    int length();
  
    /**
!    * Returns a new <code>CharSequence</code> of the indicated range.
     *
     * @param begin the start index (inclusive)
     * @param end the end index (exclusive)
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Character.java gcc-4.0.0/libjava/java/lang/Character.java
*** gcc-3.4.3/libjava/java/lang/Character.java	Tue Dec  3 20:13:43 2002
--- gcc-4.0.0/libjava/java/lang/Character.java	Wed Nov 24 13:33:01 2004
*************** import java.io.Serializable;
*** 66,75 ****
   * <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>
   * @since 1.0
   * @status updated to 1.4
   */
--- 66,75 ----
   * <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)
   * @since 1.0
   * @status updated to 1.4
   */
*************** public final class Character implements 
*** 79,85 ****
     * A subset of Unicode blocks.
     *
     * @author Paul N. Fisher
!    * @author Eric Blake <ebb9@email.byu.edu>
     * @since 1.2
     */
    public static class Subset
--- 79,85 ----
     * A subset of Unicode blocks.
     *
     * @author Paul N. Fisher
!    * @author Eric Blake (ebb9@email.byu.edu)
     * @since 1.2
     */
    public static class Subset
*************** public final class Character implements 
*** 201,207 ****
       * Basic Latin.
       * '\u0000' - '\u007F'.
       */
!     public final static UnicodeBlock BASIC_LATIN
        = new UnicodeBlock('\u0000', '\u007F',
                           "BASIC_LATIN");
  
--- 201,207 ----
       * Basic Latin.
       * '\u0000' - '\u007F'.
       */
!     public static final UnicodeBlock BASIC_LATIN
        = new UnicodeBlock('\u0000', '\u007F',
                           "BASIC_LATIN");
  
*************** public final class Character implements 
*** 209,215 ****
       * Latin-1 Supplement.
       * '\u0080' - '\u00FF'.
       */
!     public final static UnicodeBlock LATIN_1_SUPPLEMENT
        = new UnicodeBlock('\u0080', '\u00FF',
                           "LATIN_1_SUPPLEMENT");
  
--- 209,215 ----
       * Latin-1 Supplement.
       * '\u0080' - '\u00FF'.
       */
!     public static final UnicodeBlock LATIN_1_SUPPLEMENT
        = new UnicodeBlock('\u0080', '\u00FF',
                           "LATIN_1_SUPPLEMENT");
  
*************** public final class Character implements 
*** 217,223 ****
       * Latin Extended-A.
       * '\u0100' - '\u017F'.
       */
!     public final static UnicodeBlock LATIN_EXTENDED_A
        = new UnicodeBlock('\u0100', '\u017F',
                           "LATIN_EXTENDED_A");
  
--- 217,223 ----
       * Latin Extended-A.
       * '\u0100' - '\u017F'.
       */
!     public static final UnicodeBlock LATIN_EXTENDED_A
        = new UnicodeBlock('\u0100', '\u017F',
                           "LATIN_EXTENDED_A");
  
*************** public final class Character implements 
*** 225,231 ****
       * Latin Extended-B.
       * '\u0180' - '\u024F'.
       */
!     public final static UnicodeBlock LATIN_EXTENDED_B
        = new UnicodeBlock('\u0180', '\u024F',
                           "LATIN_EXTENDED_B");
  
--- 225,231 ----
       * Latin Extended-B.
       * '\u0180' - '\u024F'.
       */
!     public static final UnicodeBlock LATIN_EXTENDED_B
        = new UnicodeBlock('\u0180', '\u024F',
                           "LATIN_EXTENDED_B");
  
*************** public final class Character implements 
*** 233,239 ****
       * IPA Extensions.
       * '\u0250' - '\u02AF'.
       */
!     public final static UnicodeBlock IPA_EXTENSIONS
        = new UnicodeBlock('\u0250', '\u02AF',
                           "IPA_EXTENSIONS");
  
--- 233,239 ----
       * IPA Extensions.
       * '\u0250' - '\u02AF'.
       */
!     public static final UnicodeBlock IPA_EXTENSIONS
        = new UnicodeBlock('\u0250', '\u02AF',
                           "IPA_EXTENSIONS");
  
*************** public final class Character implements 
*** 241,247 ****
       * Spacing Modifier Letters.
       * '\u02B0' - '\u02FF'.
       */
!     public final static UnicodeBlock SPACING_MODIFIER_LETTERS
        = new UnicodeBlock('\u02B0', '\u02FF',
                           "SPACING_MODIFIER_LETTERS");
  
--- 241,247 ----
       * Spacing Modifier Letters.
       * '\u02B0' - '\u02FF'.
       */
!     public static final UnicodeBlock SPACING_MODIFIER_LETTERS
        = new UnicodeBlock('\u02B0', '\u02FF',
                           "SPACING_MODIFIER_LETTERS");
  
*************** public final class Character implements 
*** 249,255 ****
       * Combining Diacritical Marks.
       * '\u0300' - '\u036F'.
       */
!     public final static UnicodeBlock COMBINING_DIACRITICAL_MARKS
        = new UnicodeBlock('\u0300', '\u036F',
                           "COMBINING_DIACRITICAL_MARKS");
  
--- 249,255 ----
       * Combining Diacritical Marks.
       * '\u0300' - '\u036F'.
       */
!     public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS
        = new UnicodeBlock('\u0300', '\u036F',
                           "COMBINING_DIACRITICAL_MARKS");
  
*************** public final class Character implements 
*** 257,263 ****
       * Greek.
       * '\u0370' - '\u03FF'.
       */
!     public final static UnicodeBlock GREEK
        = new UnicodeBlock('\u0370', '\u03FF',
                           "GREEK");
  
--- 257,263 ----
       * Greek.
       * '\u0370' - '\u03FF'.
       */
!     public static final UnicodeBlock GREEK
        = new UnicodeBlock('\u0370', '\u03FF',
                           "GREEK");
  
*************** public final class Character implements 
*** 265,271 ****
       * Cyrillic.
       * '\u0400' - '\u04FF'.
       */
!     public final static UnicodeBlock CYRILLIC
        = new UnicodeBlock('\u0400', '\u04FF',
                           "CYRILLIC");
  
--- 265,271 ----
       * Cyrillic.
       * '\u0400' - '\u04FF'.
       */
!     public static final UnicodeBlock CYRILLIC
        = new UnicodeBlock('\u0400', '\u04FF',
                           "CYRILLIC");
  
*************** public final class Character implements 
*** 273,279 ****
       * Armenian.
       * '\u0530' - '\u058F'.
       */
!     public final static UnicodeBlock ARMENIAN
        = new UnicodeBlock('\u0530', '\u058F',
                           "ARMENIAN");
  
--- 273,279 ----
       * Armenian.
       * '\u0530' - '\u058F'.
       */
!     public static final UnicodeBlock ARMENIAN
        = new UnicodeBlock('\u0530', '\u058F',
                           "ARMENIAN");
  
*************** public final class Character implements 
*** 281,287 ****
       * Hebrew.
       * '\u0590' - '\u05FF'.
       */
!     public final static UnicodeBlock HEBREW
        = new UnicodeBlock('\u0590', '\u05FF',
                           "HEBREW");
  
--- 281,287 ----
       * Hebrew.
       * '\u0590' - '\u05FF'.
       */
!     public static final UnicodeBlock HEBREW
        = new UnicodeBlock('\u0590', '\u05FF',
                           "HEBREW");
  
*************** public final class Character implements 
*** 289,295 ****
       * Arabic.
       * '\u0600' - '\u06FF'.
       */
!     public final static UnicodeBlock ARABIC
        = new UnicodeBlock('\u0600', '\u06FF',
                           "ARABIC");
  
--- 289,295 ----
       * Arabic.
       * '\u0600' - '\u06FF'.
       */
!     public static final UnicodeBlock ARABIC
        = new UnicodeBlock('\u0600', '\u06FF',
                           "ARABIC");
  
*************** public final class Character implements 
*** 298,304 ****
       * '\u0700' - '\u074F'.
       * @since 1.4
       */
!     public final static UnicodeBlock SYRIAC
        = new UnicodeBlock('\u0700', '\u074F',
                           "SYRIAC");
  
--- 298,304 ----
       * '\u0700' - '\u074F'.
       * @since 1.4
       */
!     public static final UnicodeBlock SYRIAC
        = new UnicodeBlock('\u0700', '\u074F',
                           "SYRIAC");
  
*************** public final class Character implements 
*** 307,313 ****
       * '\u0780' - '\u07BF'.
       * @since 1.4
       */
!     public final static UnicodeBlock THAANA
        = new UnicodeBlock('\u0780', '\u07BF',
                           "THAANA");
  
--- 307,313 ----
       * '\u0780' - '\u07BF'.
       * @since 1.4
       */
!     public static final UnicodeBlock THAANA
        = new UnicodeBlock('\u0780', '\u07BF',
                           "THAANA");
  
*************** public final class Character implements 
*** 315,321 ****
       * Devanagari.
       * '\u0900' - '\u097F'.
       */
!     public final static UnicodeBlock DEVANAGARI
        = new UnicodeBlock('\u0900', '\u097F',
                           "DEVANAGARI");
  
--- 315,321 ----
       * Devanagari.
       * '\u0900' - '\u097F'.
       */
!     public static final UnicodeBlock DEVANAGARI
        = new UnicodeBlock('\u0900', '\u097F',
                           "DEVANAGARI");
  
*************** public final class Character implements 
*** 323,329 ****
       * Bengali.
       * '\u0980' - '\u09FF'.
       */
!     public final static UnicodeBlock BENGALI
        = new UnicodeBlock('\u0980', '\u09FF',
                           "BENGALI");
  
--- 323,329 ----
       * Bengali.
       * '\u0980' - '\u09FF'.
       */
!     public static final UnicodeBlock BENGALI
        = new UnicodeBlock('\u0980', '\u09FF',
                           "BENGALI");
  
*************** public final class Character implements 
*** 331,337 ****
       * Gurmukhi.
       * '\u0A00' - '\u0A7F'.
       */
!     public final static UnicodeBlock GURMUKHI
        = new UnicodeBlock('\u0A00', '\u0A7F',
                           "GURMUKHI");
  
--- 331,337 ----
       * Gurmukhi.
       * '\u0A00' - '\u0A7F'.
       */
!     public static final UnicodeBlock GURMUKHI
        = new UnicodeBlock('\u0A00', '\u0A7F',
                           "GURMUKHI");
  
*************** public final class Character implements 
*** 339,345 ****
       * Gujarati.
       * '\u0A80' - '\u0AFF'.
       */
!     public final static UnicodeBlock GUJARATI
        = new UnicodeBlock('\u0A80', '\u0AFF',
                           "GUJARATI");
  
--- 339,345 ----
       * Gujarati.
       * '\u0A80' - '\u0AFF'.
       */
!     public static final UnicodeBlock GUJARATI
        = new UnicodeBlock('\u0A80', '\u0AFF',
                           "GUJARATI");
  
*************** public final class Character implements 
*** 347,353 ****
       * Oriya.
       * '\u0B00' - '\u0B7F'.
       */
!     public final static UnicodeBlock ORIYA
        = new UnicodeBlock('\u0B00', '\u0B7F',
                           "ORIYA");
  
--- 347,353 ----
       * Oriya.
       * '\u0B00' - '\u0B7F'.
       */
!     public static final UnicodeBlock ORIYA
        = new UnicodeBlock('\u0B00', '\u0B7F',
                           "ORIYA");
  
*************** public final class Character implements 
*** 355,361 ****
       * Tamil.
       * '\u0B80' - '\u0BFF'.
       */
!     public final static UnicodeBlock TAMIL
        = new UnicodeBlock('\u0B80', '\u0BFF',
                           "TAMIL");
  
--- 355,361 ----
       * Tamil.
       * '\u0B80' - '\u0BFF'.
       */
!     public static final UnicodeBlock TAMIL
        = new UnicodeBlock('\u0B80', '\u0BFF',
                           "TAMIL");
  
*************** public final class Character implements 
*** 363,369 ****
       * Telugu.
       * '\u0C00' - '\u0C7F'.
       */
!     public final static UnicodeBlock TELUGU
        = new UnicodeBlock('\u0C00', '\u0C7F',
                           "TELUGU");
  
--- 363,369 ----
       * Telugu.
       * '\u0C00' - '\u0C7F'.
       */
!     public static final UnicodeBlock TELUGU
        = new UnicodeBlock('\u0C00', '\u0C7F',
                           "TELUGU");
  
*************** public final class Character implements 
*** 371,377 ****
       * Kannada.
       * '\u0C80' - '\u0CFF'.
       */
!     public final static UnicodeBlock KANNADA
        = new UnicodeBlock('\u0C80', '\u0CFF',
                           "KANNADA");
  
--- 371,377 ----
       * Kannada.
       * '\u0C80' - '\u0CFF'.
       */
!     public static final UnicodeBlock KANNADA
        = new UnicodeBlock('\u0C80', '\u0CFF',
                           "KANNADA");
  
*************** public final class Character implements 
*** 379,385 ****
       * Malayalam.
       * '\u0D00' - '\u0D7F'.
       */
!     public final static UnicodeBlock MALAYALAM
        = new UnicodeBlock('\u0D00', '\u0D7F',
                           "MALAYALAM");
  
--- 379,385 ----
       * Malayalam.
       * '\u0D00' - '\u0D7F'.
       */
!     public static final UnicodeBlock MALAYALAM
        = new UnicodeBlock('\u0D00', '\u0D7F',
                           "MALAYALAM");
  
*************** public final class Character implements 
*** 388,394 ****
       * '\u0D80' - '\u0DFF'.
       * @since 1.4
       */
!     public final static UnicodeBlock SINHALA
        = new UnicodeBlock('\u0D80', '\u0DFF',
                           "SINHALA");
  
--- 388,394 ----
       * '\u0D80' - '\u0DFF'.
       * @since 1.4
       */
!     public static final UnicodeBlock SINHALA
        = new UnicodeBlock('\u0D80', '\u0DFF',
                           "SINHALA");
  
*************** public final class Character implements 
*** 396,402 ****
       * Thai.
       * '\u0E00' - '\u0E7F'.
       */
!     public final static UnicodeBlock THAI
        = new UnicodeBlock('\u0E00', '\u0E7F',
                           "THAI");
  
--- 396,402 ----
       * Thai.
       * '\u0E00' - '\u0E7F'.
       */
!     public static final UnicodeBlock THAI
        = new UnicodeBlock('\u0E00', '\u0E7F',
                           "THAI");
  
*************** public final class Character implements 
*** 404,410 ****
       * Lao.
       * '\u0E80' - '\u0EFF'.
       */
!     public final static UnicodeBlock LAO
        = new UnicodeBlock('\u0E80', '\u0EFF',
                           "LAO");
  
--- 404,410 ----
       * Lao.
       * '\u0E80' - '\u0EFF'.
       */
!     public static final UnicodeBlock LAO
        = new UnicodeBlock('\u0E80', '\u0EFF',
                           "LAO");
  
*************** public final class Character implements 
*** 412,418 ****
       * Tibetan.
       * '\u0F00' - '\u0FFF'.
       */
!     public final static UnicodeBlock TIBETAN
        = new UnicodeBlock('\u0F00', '\u0FFF',
                           "TIBETAN");
  
--- 412,418 ----
       * Tibetan.
       * '\u0F00' - '\u0FFF'.
       */
!     public static final UnicodeBlock TIBETAN
        = new UnicodeBlock('\u0F00', '\u0FFF',
                           "TIBETAN");
  
*************** public final class Character implements 
*** 421,427 ****
       * '\u1000' - '\u109F'.
       * @since 1.4
       */
!     public final static UnicodeBlock MYANMAR
        = new UnicodeBlock('\u1000', '\u109F',
                           "MYANMAR");
  
--- 421,427 ----
       * '\u1000' - '\u109F'.
       * @since 1.4
       */
!     public static final UnicodeBlock MYANMAR
        = new UnicodeBlock('\u1000', '\u109F',
                           "MYANMAR");
  
*************** public final class Character implements 
*** 429,435 ****
       * Georgian.
       * '\u10A0' - '\u10FF'.
       */
!     public final static UnicodeBlock GEORGIAN
        = new UnicodeBlock('\u10A0', '\u10FF',
                           "GEORGIAN");
  
--- 429,435 ----
       * Georgian.
       * '\u10A0' - '\u10FF'.
       */
!     public static final UnicodeBlock GEORGIAN
        = new UnicodeBlock('\u10A0', '\u10FF',
                           "GEORGIAN");
  
*************** public final class Character implements 
*** 437,443 ****
       * Hangul Jamo.
       * '\u1100' - '\u11FF'.
       */
!     public final static UnicodeBlock HANGUL_JAMO
        = new UnicodeBlock('\u1100', '\u11FF',
                           "HANGUL_JAMO");
  
--- 437,443 ----
       * Hangul Jamo.
       * '\u1100' - '\u11FF'.
       */
!     public static final UnicodeBlock HANGUL_JAMO
        = new UnicodeBlock('\u1100', '\u11FF',
                           "HANGUL_JAMO");
  
*************** public final class Character implements 
*** 446,452 ****
       * '\u1200' - '\u137F'.
       * @since 1.4
       */
!     public final static UnicodeBlock ETHIOPIC
        = new UnicodeBlock('\u1200', '\u137F',
                           "ETHIOPIC");
  
--- 446,452 ----
       * '\u1200' - '\u137F'.
       * @since 1.4
       */
!     public static final UnicodeBlock ETHIOPIC
        = new UnicodeBlock('\u1200', '\u137F',
                           "ETHIOPIC");
  
*************** public final class Character implements 
*** 455,461 ****
       * '\u13A0' - '\u13FF'.
       * @since 1.4
       */
!     public final static UnicodeBlock CHEROKEE
        = new UnicodeBlock('\u13A0', '\u13FF',
                           "CHEROKEE");
  
--- 455,461 ----
       * '\u13A0' - '\u13FF'.
       * @since 1.4
       */
!     public static final UnicodeBlock CHEROKEE
        = new UnicodeBlock('\u13A0', '\u13FF',
                           "CHEROKEE");
  
*************** public final class Character implements 
*** 464,470 ****
       * '\u1400' - '\u167F'.
       * @since 1.4
       */
!     public final static UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS
        = new UnicodeBlock('\u1400', '\u167F',
                           "UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS");
  
--- 464,470 ----
       * '\u1400' - '\u167F'.
       * @since 1.4
       */
!     public static final UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS
        = new UnicodeBlock('\u1400', '\u167F',
                           "UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS");
  
*************** public final class Character implements 
*** 473,479 ****
       * '\u1680' - '\u169F'.
       * @since 1.4
       */
!     public final static UnicodeBlock OGHAM
        = new UnicodeBlock('\u1680', '\u169F',
                           "OGHAM");
  
--- 473,479 ----
       * '\u1680' - '\u169F'.
       * @since 1.4
       */
!     public static final UnicodeBlock OGHAM
        = new UnicodeBlock('\u1680', '\u169F',
                           "OGHAM");
  
*************** public final class Character implements 
*** 482,488 ****
       * '\u16A0' - '\u16FF'.
       * @since 1.4
       */
!     public final static UnicodeBlock RUNIC
        = new UnicodeBlock('\u16A0', '\u16FF',
                           "RUNIC");
  
--- 482,488 ----
       * '\u16A0' - '\u16FF'.
       * @since 1.4
       */
!     public static final UnicodeBlock RUNIC
        = new UnicodeBlock('\u16A0', '\u16FF',
                           "RUNIC");
  
*************** public final class Character implements 
*** 491,497 ****
       * '\u1780' - '\u17FF'.
       * @since 1.4
       */
!     public final static UnicodeBlock KHMER
        = new UnicodeBlock('\u1780', '\u17FF',
                           "KHMER");
  
--- 491,497 ----
       * '\u1780' - '\u17FF'.
       * @since 1.4
       */
!     public static final UnicodeBlock KHMER
        = new UnicodeBlock('\u1780', '\u17FF',
                           "KHMER");
  
*************** public final class Character implements 
*** 500,506 ****
       * '\u1800' - '\u18AF'.
       * @since 1.4
       */
!     public final static UnicodeBlock MONGOLIAN
        = new UnicodeBlock('\u1800', '\u18AF',
                           "MONGOLIAN");
  
--- 500,506 ----
       * '\u1800' - '\u18AF'.
       * @since 1.4
       */
!     public static final UnicodeBlock MONGOLIAN
        = new UnicodeBlock('\u1800', '\u18AF',
                           "MONGOLIAN");
  
*************** public final class Character implements 
*** 508,514 ****
       * Latin Extended Additional.
       * '\u1E00' - '\u1EFF'.
       */
!     public final static UnicodeBlock LATIN_EXTENDED_ADDITIONAL
        = new UnicodeBlock('\u1E00', '\u1EFF',
                           "LATIN_EXTENDED_ADDITIONAL");
  
--- 508,514 ----
       * Latin Extended Additional.
       * '\u1E00' - '\u1EFF'.
       */
!     public static final UnicodeBlock LATIN_EXTENDED_ADDITIONAL
        = new UnicodeBlock('\u1E00', '\u1EFF',
                           "LATIN_EXTENDED_ADDITIONAL");
  
*************** public final class Character implements 
*** 516,522 ****
       * Greek Extended.
       * '\u1F00' - '\u1FFF'.
       */
!     public final static UnicodeBlock GREEK_EXTENDED
        = new UnicodeBlock('\u1F00', '\u1FFF',
                           "GREEK_EXTENDED");
  
--- 516,522 ----
       * Greek Extended.
       * '\u1F00' - '\u1FFF'.
       */
!     public static final UnicodeBlock GREEK_EXTENDED
        = new UnicodeBlock('\u1F00', '\u1FFF',
                           "GREEK_EXTENDED");
  
*************** public final class Character implements 
*** 524,530 ****
       * General Punctuation.
       * '\u2000' - '\u206F'.
       */
!     public final static UnicodeBlock GENERAL_PUNCTUATION
        = new UnicodeBlock('\u2000', '\u206F',
                           "GENERAL_PUNCTUATION");
  
--- 524,530 ----
       * General Punctuation.
       * '\u2000' - '\u206F'.
       */
!     public static final UnicodeBlock GENERAL_PUNCTUATION
        = new UnicodeBlock('\u2000', '\u206F',
                           "GENERAL_PUNCTUATION");
  
*************** public final class Character implements 
*** 532,538 ****
       * Superscripts and Subscripts.
       * '\u2070' - '\u209F'.
       */
!     public final static UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS
        = new UnicodeBlock('\u2070', '\u209F',
                           "SUPERSCRIPTS_AND_SUBSCRIPTS");
  
--- 532,538 ----
       * Superscripts and Subscripts.
       * '\u2070' - '\u209F'.
       */
!     public static final UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS
        = new UnicodeBlock('\u2070', '\u209F',
                           "SUPERSCRIPTS_AND_SUBSCRIPTS");
  
*************** public final class Character implements 
*** 540,546 ****
       * Currency Symbols.
       * '\u20A0' - '\u20CF'.
       */
!     public final static UnicodeBlock CURRENCY_SYMBOLS
        = new UnicodeBlock('\u20A0', '\u20CF',
                           "CURRENCY_SYMBOLS");
  
--- 540,546 ----
       * Currency Symbols.
       * '\u20A0' - '\u20CF'.
       */
!     public static final UnicodeBlock CURRENCY_SYMBOLS
        = new UnicodeBlock('\u20A0', '\u20CF',
                           "CURRENCY_SYMBOLS");
  
*************** public final class Character implements 
*** 548,554 ****
       * Combining Marks for Symbols.
       * '\u20D0' - '\u20FF'.
       */
!     public final static UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS
        = new UnicodeBlock('\u20D0', '\u20FF',
                           "COMBINING_MARKS_FOR_SYMBOLS");
  
--- 548,554 ----
       * Combining Marks for Symbols.
       * '\u20D0' - '\u20FF'.
       */
!     public static final UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS
        = new UnicodeBlock('\u20D0', '\u20FF',
                           "COMBINING_MARKS_FOR_SYMBOLS");
  
*************** public final class Character implements 
*** 556,562 ****
       * Letterlike Symbols.
       * '\u2100' - '\u214F'.
       */
!     public final static UnicodeBlock LETTERLIKE_SYMBOLS
        = new UnicodeBlock('\u2100', '\u214F',
                           "LETTERLIKE_SYMBOLS");
  
--- 556,562 ----
       * Letterlike Symbols.
       * '\u2100' - '\u214F'.
       */
!     public static final UnicodeBlock LETTERLIKE_SYMBOLS
        = new UnicodeBlock('\u2100', '\u214F',
                           "LETTERLIKE_SYMBOLS");
  
*************** public final class Character implements 
*** 564,570 ****
       * Number Forms.
       * '\u2150' - '\u218F'.
       */
!     public final static UnicodeBlock NUMBER_FORMS
        = new UnicodeBlock('\u2150', '\u218F',
                           "NUMBER_FORMS");
  
--- 564,570 ----
       * Number Forms.
       * '\u2150' - '\u218F'.
       */
!     public static final UnicodeBlock NUMBER_FORMS
        = new UnicodeBlock('\u2150', '\u218F',
                           "NUMBER_FORMS");
  
*************** public final class Character implements 
*** 572,578 ****
       * Arrows.
       * '\u2190' - '\u21FF'.
       */
!     public final static UnicodeBlock ARROWS
        = new UnicodeBlock('\u2190', '\u21FF',
                           "ARROWS");
  
--- 572,578 ----
       * Arrows.
       * '\u2190' - '\u21FF'.
       */
!     public static final UnicodeBlock ARROWS
        = new UnicodeBlock('\u2190', '\u21FF',
                           "ARROWS");
  
*************** public final class Character implements 
*** 580,586 ****
       * Mathematical Operators.
       * '\u2200' - '\u22FF'.
       */
!     public final static UnicodeBlock MATHEMATICAL_OPERATORS
        = new UnicodeBlock('\u2200', '\u22FF',
                           "MATHEMATICAL_OPERATORS");
  
--- 580,586 ----
       * Mathematical Operators.
       * '\u2200' - '\u22FF'.
       */
!     public static final UnicodeBlock MATHEMATICAL_OPERATORS
        = new UnicodeBlock('\u2200', '\u22FF',
                           "MATHEMATICAL_OPERATORS");
  
*************** public final class Character implements 
*** 588,594 ****
       * Miscellaneous Technical.
       * '\u2300' - '\u23FF'.
       */
!     public final static UnicodeBlock MISCELLANEOUS_TECHNICAL
        = new UnicodeBlock('\u2300', '\u23FF',
                           "MISCELLANEOUS_TECHNICAL");
  
--- 588,594 ----
       * Miscellaneous Technical.
       * '\u2300' - '\u23FF'.
       */
!     public static final UnicodeBlock MISCELLANEOUS_TECHNICAL
        = new UnicodeBlock('\u2300', '\u23FF',
                           "MISCELLANEOUS_TECHNICAL");
  
*************** public final class Character implements 
*** 596,602 ****
       * Control Pictures.
       * '\u2400' - '\u243F'.
       */
!     public final static UnicodeBlock CONTROL_PICTURES
        = new UnicodeBlock('\u2400', '\u243F',
                           "CONTROL_PICTURES");
  
--- 596,602 ----
       * Control Pictures.
       * '\u2400' - '\u243F'.
       */
!     public static final UnicodeBlock CONTROL_PICTURES
        = new UnicodeBlock('\u2400', '\u243F',
                           "CONTROL_PICTURES");
  
*************** public final class Character implements 
*** 604,610 ****
       * Optical Character Recognition.
       * '\u2440' - '\u245F'.
       */
!     public final static UnicodeBlock OPTICAL_CHARACTER_RECOGNITION
        = new UnicodeBlock('\u2440', '\u245F',
                           "OPTICAL_CHARACTER_RECOGNITION");
  
--- 604,610 ----
       * Optical Character Recognition.
       * '\u2440' - '\u245F'.
       */
!     public static final UnicodeBlock OPTICAL_CHARACTER_RECOGNITION
        = new UnicodeBlock('\u2440', '\u245F',
                           "OPTICAL_CHARACTER_RECOGNITION");
  
*************** public final class Character implements 
*** 612,618 ****
       * Enclosed Alphanumerics.
       * '\u2460' - '\u24FF'.
       */
!     public final static UnicodeBlock ENCLOSED_ALPHANUMERICS
        = new UnicodeBlock('\u2460', '\u24FF',
                           "ENCLOSED_ALPHANUMERICS");
  
--- 612,618 ----
       * Enclosed Alphanumerics.
       * '\u2460' - '\u24FF'.
       */
!     public static final UnicodeBlock ENCLOSED_ALPHANUMERICS
        = new UnicodeBlock('\u2460', '\u24FF',
                           "ENCLOSED_ALPHANUMERICS");
  
*************** public final class Character implements 
*** 620,626 ****
       * Box Drawing.
       * '\u2500' - '\u257F'.
       */
!     public final static UnicodeBlock BOX_DRAWING
        = new UnicodeBlock('\u2500', '\u257F',
                           "BOX_DRAWING");
  
--- 620,626 ----
       * Box Drawing.
       * '\u2500' - '\u257F'.
       */
!     public static final UnicodeBlock BOX_DRAWING
        = new UnicodeBlock('\u2500', '\u257F',
                           "BOX_DRAWING");
  
*************** public final class Character implements 
*** 628,634 ****
       * Block Elements.
       * '\u2580' - '\u259F'.
       */
!     public final static UnicodeBlock BLOCK_ELEMENTS
        = new UnicodeBlock('\u2580', '\u259F',
                           "BLOCK_ELEMENTS");
  
--- 628,634 ----
       * Block Elements.
       * '\u2580' - '\u259F'.
       */
!     public static final UnicodeBlock BLOCK_ELEMENTS
        = new UnicodeBlock('\u2580', '\u259F',
                           "BLOCK_ELEMENTS");
  
*************** public final class Character implements 
*** 636,642 ****
       * Geometric Shapes.
       * '\u25A0' - '\u25FF'.
       */
!     public final static UnicodeBlock GEOMETRIC_SHAPES
        = new UnicodeBlock('\u25A0', '\u25FF',
                           "GEOMETRIC_SHAPES");
  
--- 636,642 ----
       * Geometric Shapes.
       * '\u25A0' - '\u25FF'.
       */
!     public static final UnicodeBlock GEOMETRIC_SHAPES
        = new UnicodeBlock('\u25A0', '\u25FF',
                           "GEOMETRIC_SHAPES");
  
*************** public final class Character implements 
*** 644,650 ****
       * Miscellaneous Symbols.
       * '\u2600' - '\u26FF'.
       */
!     public final static UnicodeBlock MISCELLANEOUS_SYMBOLS
        = new UnicodeBlock('\u2600', '\u26FF',
                           "MISCELLANEOUS_SYMBOLS");
  
--- 644,650 ----
       * Miscellaneous Symbols.
       * '\u2600' - '\u26FF'.
       */
!     public static final UnicodeBlock MISCELLANEOUS_SYMBOLS
        = new UnicodeBlock('\u2600', '\u26FF',
                           "MISCELLANEOUS_SYMBOLS");
  
*************** public final class Character implements 
*** 652,658 ****
       * Dingbats.
       * '\u2700' - '\u27BF'.
       */
!     public final static UnicodeBlock DINGBATS
        = new UnicodeBlock('\u2700', '\u27BF',
                           "DINGBATS");
  
--- 652,658 ----
       * Dingbats.
       * '\u2700' - '\u27BF'.
       */
!     public static final UnicodeBlock DINGBATS
        = new UnicodeBlock('\u2700', '\u27BF',
                           "DINGBATS");
  
*************** public final class Character implements 
*** 661,667 ****
       * '\u2800' - '\u28FF'.
       * @since 1.4
       */
!     public final static UnicodeBlock BRAILLE_PATTERNS
        = new UnicodeBlock('\u2800', '\u28FF',
                           "BRAILLE_PATTERNS");
  
--- 661,667 ----
       * '\u2800' - '\u28FF'.
       * @since 1.4
       */
!     public static final UnicodeBlock BRAILLE_PATTERNS
        = new UnicodeBlock('\u2800', '\u28FF',
                           "BRAILLE_PATTERNS");
  
*************** public final class Character implements 
*** 670,676 ****
       * '\u2E80' - '\u2EFF'.
       * @since 1.4
       */
!     public final static UnicodeBlock CJK_RADICALS_SUPPLEMENT
        = new UnicodeBlock('\u2E80', '\u2EFF',
                           "CJK_RADICALS_SUPPLEMENT");
  
--- 670,676 ----
       * '\u2E80' - '\u2EFF'.
       * @since 1.4
       */
!     public static final UnicodeBlock CJK_RADICALS_SUPPLEMENT
        = new UnicodeBlock('\u2E80', '\u2EFF',
                           "CJK_RADICALS_SUPPLEMENT");
  
*************** public final class Character implements 
*** 679,685 ****
       * '\u2F00' - '\u2FDF'.
       * @since 1.4
       */
!     public final static UnicodeBlock KANGXI_RADICALS
        = new UnicodeBlock('\u2F00', '\u2FDF',
                           "KANGXI_RADICALS");
  
--- 679,685 ----
       * '\u2F00' - '\u2FDF'.
       * @since 1.4
       */
!     public static final UnicodeBlock KANGXI_RADICALS
        = new UnicodeBlock('\u2F00', '\u2FDF',
                           "KANGXI_RADICALS");
  
*************** public final class Character implements 
*** 688,694 ****
       * '\u2FF0' - '\u2FFF'.
       * @since 1.4
       */
!     public final static UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS
        = new UnicodeBlock('\u2FF0', '\u2FFF',
                           "IDEOGRAPHIC_DESCRIPTION_CHARACTERS");
  
--- 688,694 ----
       * '\u2FF0' - '\u2FFF'.
       * @since 1.4
       */
!     public static final UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS
        = new UnicodeBlock('\u2FF0', '\u2FFF',
                           "IDEOGRAPHIC_DESCRIPTION_CHARACTERS");
  
*************** public final class Character implements 
*** 696,702 ****
       * CJK Symbols and Punctuation.
       * '\u3000' - '\u303F'.
       */
!     public final static UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION
        = new UnicodeBlock('\u3000', '\u303F',
                           "CJK_SYMBOLS_AND_PUNCTUATION");
  
--- 696,702 ----
       * CJK Symbols and Punctuation.
       * '\u3000' - '\u303F'.
       */
!     public static final UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION
        = new UnicodeBlock('\u3000', '\u303F',
                           "CJK_SYMBOLS_AND_PUNCTUATION");
  
*************** public final class Character implements 
*** 704,710 ****
       * Hiragana.
       * '\u3040' - '\u309F'.
       */
!     public final static UnicodeBlock HIRAGANA
        = new UnicodeBlock('\u3040', '\u309F',
                           "HIRAGANA");
  
--- 704,710 ----
       * Hiragana.
       * '\u3040' - '\u309F'.
       */
!     public static final UnicodeBlock HIRAGANA
        = new UnicodeBlock('\u3040', '\u309F',
                           "HIRAGANA");
  
*************** public final class Character implements 
*** 712,718 ****
       * Katakana.
       * '\u30A0' - '\u30FF'.
       */
!     public final static UnicodeBlock KATAKANA
        = new UnicodeBlock('\u30A0', '\u30FF',
                           "KATAKANA");
  
--- 712,718 ----
       * Katakana.
       * '\u30A0' - '\u30FF'.
       */
!     public static final UnicodeBlock KATAKANA
        = new UnicodeBlock('\u30A0', '\u30FF',
                           "KATAKANA");
  
*************** public final class Character implements 
*** 720,726 ****
       * Bopomofo.
       * '\u3100' - '\u312F'.
       */
!     public final static UnicodeBlock BOPOMOFO
        = new UnicodeBlock('\u3100', '\u312F',
                           "BOPOMOFO");
  
--- 720,726 ----
       * Bopomofo.
       * '\u3100' - '\u312F'.
       */
!     public static final UnicodeBlock BOPOMOFO
        = new UnicodeBlock('\u3100', '\u312F',
                           "BOPOMOFO");
  
*************** public final class Character implements 
*** 728,734 ****
       * Hangul Compatibility Jamo.
       * '\u3130' - '\u318F'.
       */
!     public final static UnicodeBlock HANGUL_COMPATIBILITY_JAMO
        = new UnicodeBlock('\u3130', '\u318F',
                           "HANGUL_COMPATIBILITY_JAMO");
  
--- 728,734 ----
       * Hangul Compatibility Jamo.
       * '\u3130' - '\u318F'.
       */
!     public static final UnicodeBlock HANGUL_COMPATIBILITY_JAMO
        = new UnicodeBlock('\u3130', '\u318F',
                           "HANGUL_COMPATIBILITY_JAMO");
  
*************** public final class Character implements 
*** 736,742 ****
       * Kanbun.
       * '\u3190' - '\u319F'.
       */
!     public final static UnicodeBlock KANBUN
        = new UnicodeBlock('\u3190', '\u319F',
                           "KANBUN");
  
--- 736,742 ----
       * Kanbun.
       * '\u3190' - '\u319F'.
       */
!     public static final UnicodeBlock KANBUN
        = new UnicodeBlock('\u3190', '\u319F',
                           "KANBUN");
  
*************** public final class Character implements 
*** 745,751 ****
       * '\u31A0' - '\u31BF'.
       * @since 1.4
       */
!     public final static UnicodeBlock BOPOMOFO_EXTENDED
        = new UnicodeBlock('\u31A0', '\u31BF',
                           "BOPOMOFO_EXTENDED");
  
--- 745,751 ----
       * '\u31A0' - '\u31BF'.
       * @since 1.4
       */
!     public static final UnicodeBlock BOPOMOFO_EXTENDED
        = new UnicodeBlock('\u31A0', '\u31BF',
                           "BOPOMOFO_EXTENDED");
  
*************** public final class Character implements 
*** 753,759 ****
       * Enclosed CJK Letters and Months.
       * '\u3200' - '\u32FF'.
       */
!     public final static UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS
        = new UnicodeBlock('\u3200', '\u32FF',
                           "ENCLOSED_CJK_LETTERS_AND_MONTHS");
  
--- 753,759 ----
       * 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");
  
*************** public final class Character implements 
*** 761,767 ****
       * CJK Compatibility.
       * '\u3300' - '\u33FF'.
       */
!     public final static UnicodeBlock CJK_COMPATIBILITY
        = new UnicodeBlock('\u3300', '\u33FF',
                           "CJK_COMPATIBILITY");
  
--- 761,767 ----
       * CJK Compatibility.
       * '\u3300' - '\u33FF'.
       */
!     public static final UnicodeBlock CJK_COMPATIBILITY
        = new UnicodeBlock('\u3300', '\u33FF',
                           "CJK_COMPATIBILITY");
  
*************** public final class Character implements 
*** 770,776 ****
       * '\u3400' - '\u4DB5'.
       * @since 1.4
       */
!     public final static UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
        = new UnicodeBlock('\u3400', '\u4DB5',
                           "CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A");
  
--- 770,776 ----
       * '\u3400' - '\u4DB5'.
       * @since 1.4
       */
!     public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
        = new UnicodeBlock('\u3400', '\u4DB5',
                           "CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A");
  
*************** public final class Character implements 
*** 778,784 ****
       * CJK Unified Ideographs.
       * '\u4E00' - '\u9FFF'.
       */
!     public final static UnicodeBlock CJK_UNIFIED_IDEOGRAPHS
        = new UnicodeBlock('\u4E00', '\u9FFF',
                           "CJK_UNIFIED_IDEOGRAPHS");
  
--- 778,784 ----
       * CJK Unified Ideographs.
       * '\u4E00' - '\u9FFF'.
       */
!     public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS
        = new UnicodeBlock('\u4E00', '\u9FFF',
                           "CJK_UNIFIED_IDEOGRAPHS");
  
*************** public final class Character implements 
*** 787,793 ****
       * '\uA000' - '\uA48F'.
       * @since 1.4
       */
!     public final static UnicodeBlock YI_SYLLABLES
        = new UnicodeBlock('\uA000', '\uA48F',
                           "YI_SYLLABLES");
  
--- 787,793 ----
       * '\uA000' - '\uA48F'.
       * @since 1.4
       */
!     public static final UnicodeBlock YI_SYLLABLES
        = new UnicodeBlock('\uA000', '\uA48F',
                           "YI_SYLLABLES");
  
*************** public final class Character implements 
*** 796,802 ****
       * '\uA490' - '\uA4CF'.
       * @since 1.4
       */
!     public final static UnicodeBlock YI_RADICALS
        = new UnicodeBlock('\uA490', '\uA4CF',
                           "YI_RADICALS");
  
--- 796,802 ----
       * '\uA490' - '\uA4CF'.
       * @since 1.4
       */
!     public static final UnicodeBlock YI_RADICALS
        = new UnicodeBlock('\uA490', '\uA4CF',
                           "YI_RADICALS");
  
*************** public final class Character implements 
*** 804,810 ****
       * Hangul Syllables.
       * '\uAC00' - '\uD7A3'.
       */
!     public final static UnicodeBlock HANGUL_SYLLABLES
        = new UnicodeBlock('\uAC00', '\uD7A3',
                           "HANGUL_SYLLABLES");
  
--- 804,810 ----
       * Hangul Syllables.
       * '\uAC00' - '\uD7A3'.
       */
!     public static final UnicodeBlock HANGUL_SYLLABLES
        = new UnicodeBlock('\uAC00', '\uD7A3',
                           "HANGUL_SYLLABLES");
  
*************** public final class Character implements 
*** 812,818 ****
       * Surrogates Area.
       * '\uD800' - '\uDFFF'.
       */
!     public final static UnicodeBlock SURROGATES_AREA
        = new UnicodeBlock('\uD800', '\uDFFF',
                           "SURROGATES_AREA");
  
--- 812,818 ----
       * Surrogates Area.
       * '\uD800' - '\uDFFF'.
       */
!     public static final UnicodeBlock SURROGATES_AREA
        = new UnicodeBlock('\uD800', '\uDFFF',
                           "SURROGATES_AREA");
  
*************** public final class Character implements 
*** 820,826 ****
       * Private Use Area.
       * '\uE000' - '\uF8FF'.
       */
!     public final static UnicodeBlock PRIVATE_USE_AREA
        = new UnicodeBlock('\uE000', '\uF8FF',
                           "PRIVATE_USE_AREA");
  
--- 820,826 ----
       * Private Use Area.
       * '\uE000' - '\uF8FF'.
       */
!     public static final UnicodeBlock PRIVATE_USE_AREA
        = new UnicodeBlock('\uE000', '\uF8FF',
                           "PRIVATE_USE_AREA");
  
*************** public final class Character implements 
*** 828,834 ****
       * CJK Compatibility Ideographs.
       * '\uF900' - '\uFAFF'.
       */
!     public final static UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS
        = new UnicodeBlock('\uF900', '\uFAFF',
                           "CJK_COMPATIBILITY_IDEOGRAPHS");
  
--- 828,834 ----
       * CJK Compatibility Ideographs.
       * '\uF900' - '\uFAFF'.
       */
!     public static final UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS
        = new UnicodeBlock('\uF900', '\uFAFF',
                           "CJK_COMPATIBILITY_IDEOGRAPHS");
  
*************** public final class Character implements 
*** 836,842 ****
       * Alphabetic Presentation Forms.
       * '\uFB00' - '\uFB4F'.
       */
!     public final static UnicodeBlock ALPHABETIC_PRESENTATION_FORMS
        = new UnicodeBlock('\uFB00', '\uFB4F',
                           "ALPHABETIC_PRESENTATION_FORMS");
  
--- 836,842 ----
       * Alphabetic Presentation Forms.
       * '\uFB00' - '\uFB4F'.
       */
!     public static final UnicodeBlock ALPHABETIC_PRESENTATION_FORMS
        = new UnicodeBlock('\uFB00', '\uFB4F',
                           "ALPHABETIC_PRESENTATION_FORMS");
  
*************** public final class Character implements 
*** 844,850 ****
       * Arabic Presentation Forms-A.
       * '\uFB50' - '\uFDFF'.
       */
!     public final static UnicodeBlock ARABIC_PRESENTATION_FORMS_A
        = new UnicodeBlock('\uFB50', '\uFDFF',
                           "ARABIC_PRESENTATION_FORMS_A");
  
--- 844,850 ----
       * Arabic Presentation Forms-A.
       * '\uFB50' - '\uFDFF'.
       */
!     public static final UnicodeBlock ARABIC_PRESENTATION_FORMS_A
        = new UnicodeBlock('\uFB50', '\uFDFF',
                           "ARABIC_PRESENTATION_FORMS_A");
  
*************** public final class Character implements 
*** 852,858 ****
       * Combining Half Marks.
       * '\uFE20' - '\uFE2F'.
       */
!     public final static UnicodeBlock COMBINING_HALF_MARKS
        = new UnicodeBlock('\uFE20', '\uFE2F',
                           "COMBINING_HALF_MARKS");
  
--- 852,858 ----
       * Combining Half Marks.
       * '\uFE20' - '\uFE2F'.
       */
!     public static final UnicodeBlock COMBINING_HALF_MARKS
        = new UnicodeBlock('\uFE20', '\uFE2F',
                           "COMBINING_HALF_MARKS");
  
*************** public final class Character implements 
*** 860,866 ****
       * CJK Compatibility Forms.
       * '\uFE30' - '\uFE4F'.
       */
!     public final static UnicodeBlock CJK_COMPATIBILITY_FORMS
        = new UnicodeBlock('\uFE30', '\uFE4F',
                           "CJK_COMPATIBILITY_FORMS");
  
--- 860,866 ----
       * CJK Compatibility Forms.
       * '\uFE30' - '\uFE4F'.
       */
!     public static final UnicodeBlock CJK_COMPATIBILITY_FORMS
        = new UnicodeBlock('\uFE30', '\uFE4F',
                           "CJK_COMPATIBILITY_FORMS");
  
*************** public final class Character implements 
*** 868,874 ****
       * Small Form Variants.
       * '\uFE50' - '\uFE6F'.
       */
!     public final static UnicodeBlock SMALL_FORM_VARIANTS
        = new UnicodeBlock('\uFE50', '\uFE6F',
                           "SMALL_FORM_VARIANTS");
  
--- 868,874 ----
       * Small Form Variants.
       * '\uFE50' - '\uFE6F'.
       */
!     public static final UnicodeBlock SMALL_FORM_VARIANTS
        = new UnicodeBlock('\uFE50', '\uFE6F',
                           "SMALL_FORM_VARIANTS");
  
*************** public final class Character implements 
*** 876,882 ****
       * Arabic Presentation Forms-B.
       * '\uFE70' - '\uFEFE'.
       */
!     public final static UnicodeBlock ARABIC_PRESENTATION_FORMS_B
        = new UnicodeBlock('\uFE70', '\uFEFE',
                           "ARABIC_PRESENTATION_FORMS_B");
  
--- 876,882 ----
       * Arabic Presentation Forms-B.
       * '\uFE70' - '\uFEFE'.
       */
!     public static final UnicodeBlock ARABIC_PRESENTATION_FORMS_B
        = new UnicodeBlock('\uFE70', '\uFEFE',
                           "ARABIC_PRESENTATION_FORMS_B");
  
*************** public final class Character implements 
*** 884,890 ****
       * Halfwidth and Fullwidth Forms.
       * '\uFF00' - '\uFFEF'.
       */
!     public final static UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS
        = new UnicodeBlock('\uFF00', '\uFFEF',
                           "HALFWIDTH_AND_FULLWIDTH_FORMS");
  
--- 884,890 ----
       * Halfwidth and Fullwidth Forms.
       * '\uFF00' - '\uFFEF'.
       */
!     public static final UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS
        = new UnicodeBlock('\uFF00', '\uFFEF',
                           "HALFWIDTH_AND_FULLWIDTH_FORMS");
  
*************** public final class Character implements 
*** 892,898 ****
       * Specials.
       * '\uFEFF', '\uFFF0' - '\uFFFD'.
       */
!     public final static UnicodeBlock SPECIALS
        = new UnicodeBlock('\uFFF0', '\uFFFD',
                           "SPECIALS");
  
--- 892,898 ----
       * Specials.
       * '\uFEFF', '\uFFF0' - '\uFFFD'.
       */
!     public static final UnicodeBlock SPECIALS
        = new UnicodeBlock('\uFFF0', '\uFFFD',
                           "SPECIALS");
  
*************** public final class Character implements 
*** 2080,2086 ****
    public static char forDigit(int digit, int radix)
    {
      if (radix < MIN_RADIX || radix > MAX_RADIX
! 	|| digit < 0 || digit >= radix)
        return '\0';
      return (char) (digit < 10 ? ('0' + digit) : ('a' - 10 + digit));
    }
--- 2080,2086 ----
    public static char forDigit(int digit, int radix)
    {
      if (radix < MIN_RADIX || radix > MAX_RADIX
!         || digit < 0 || digit >= radix)
        return '\0';
      return (char) (digit < 10 ? ('0' + digit) : ('a' - 10 + digit));
    }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Class.h gcc-4.0.0/libjava/java/lang/Class.h
*** gcc-3.4.3/libjava/java/lang/Class.h	Wed Dec  3 21:26:59 2003
--- gcc-4.0.0/libjava/java/lang/Class.h	Thu Mar 17 00:15:49 2005
***************
*** 1,6 ****
  // Class.h - Header file for java.lang.Class.  -*- c++ -*-
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // Class.h - Header file for java.lang.Class.  -*- c++ -*-
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 14,19 ****
--- 14,20 ----
  
  #pragma interface
  
+ #include <stddef.h>
  #include <java/lang/Object.h>
  #include <java/lang/String.h>
  #include <java/net/URL.h>
*************** details.  */
*** 24,30 ****
  
  // We declare these here to avoid including gcj/cni.h.
  extern "C" void _Jv_InitClass (jclass klass);
! extern "C" void _Jv_RegisterClasses (jclass *classes);
  
  // This must be predefined with "C" linkage.
  extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface, 
--- 25,33 ----
  
  // We declare these here to avoid including gcj/cni.h.
  extern "C" void _Jv_InitClass (jclass klass);
! extern "C" void _Jv_RegisterClasses (const jclass *classes);
! extern "C" void _Jv_RegisterClasses_Counted (const jclass *classes,
! 					     size_t count);
  
  // This must be predefined with "C" linkage.
  extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface, 
*************** enum
*** 39,52 ****
  
    JV_STATE_PRELOADING = 1,	// Can do _Jv_FindClass.
    JV_STATE_LOADING = 3,		// Has super installed.
!   JV_STATE_LOADED = 5,		// Is complete.
!     
    JV_STATE_COMPILED = 6,	// This was a compiled class.
  
    JV_STATE_PREPARED = 7,	// Layout & static init done.
    JV_STATE_LINKED = 9,		// Strings interned.
  
!   JV_STATE_IN_PROGRESS = 10,	// <Clinit> running.
  
    JV_STATE_ERROR = 12,
  
--- 42,56 ----
  
    JV_STATE_PRELOADING = 1,	// Can do _Jv_FindClass.
    JV_STATE_LOADING = 3,		// Has super installed.
!   JV_STATE_READ = 4,		// Has been completely defined.
!   JV_STATE_LOADED = 5,		// Has Miranda methods defined.
! 
    JV_STATE_COMPILED = 6,	// This was a compiled class.
  
    JV_STATE_PREPARED = 7,	// Layout & static init done.
    JV_STATE_LINKED = 9,		// Strings interned.
  
!   JV_STATE_IN_PROGRESS = 10,	// <clinit> running.
  
    JV_STATE_ERROR = 12,
  
*************** struct _Jv_Field;
*** 57,62 ****
--- 61,70 ----
  struct _Jv_VTable;
  union _Jv_word;
  struct _Jv_ArrayVTable;
+ class _Jv_Linker;
+ class _Jv_ExecutionEngine;
+ class _Jv_CompiledEngine;
+ class _Jv_InterpreterEngine;
  
  struct _Jv_Constants
  {
*************** union _Jv_IDispatchTable
*** 104,110 ****
    } iface;
  };
  
! // Used by _Jv_GetInterfaces ()
  struct _Jv_ifaces
  {
    jclass *list;
--- 112,118 ----
    } iface;
  };
  
! // Used by _Jv_Linker::get_interfaces ()
  struct _Jv_ifaces
  {
    jclass *list;
*************** struct _Jv_CatchClass
*** 137,146 ****
--- 145,256 ----
    _Jv_Utf8Const *classname;
  };
  
+ // Possible values for the assertion_code field in the type assertion table.
+ enum
+ {
+   JV_ASSERT_END_OF_TABLE = 0,
+   JV_ASSERT_TYPES_COMPATIBLE = 1,
+   JV_ASSERT_IS_INSTANTIABLE = 2
+ };
+ 
+ // Entry in the type assertion table, used to validate type constraints
+ // for binary compatibility.
+ struct _Jv_TypeAssertion
+ {
+   jint assertion_code;
+   _Jv_Utf8Const *op1;
+   _Jv_Utf8Const *op2;
+ };
+ 
  #define JV_PRIMITIVE_VTABLE ((_Jv_VTable *) -1)
  
  #define JV_CLASS(Obj) ((jclass) (*(_Jv_VTable **) Obj)->clas)
  
+ // Forward declarations for friends of java::lang::Class
+ 
+ // Friend functions implemented in natClass.cc.
+ _Jv_Method *_Jv_GetMethodLocal (jclass klass, _Jv_Utf8Const *name,
+ 				_Jv_Utf8Const *signature);
+ jboolean _Jv_IsAssignableFrom (jclass, jclass);
+ jboolean _Jv_IsAssignableFromSlow (jclass, jclass);
+ jboolean _Jv_InterfaceAssignableFrom (jclass, jclass);
+ 
+ _Jv_Method* _Jv_LookupDeclaredMethod (jclass, _Jv_Utf8Const *, 
+ 				      _Jv_Utf8Const*, jclass * = NULL);
+ jfieldID JvGetFirstInstanceField (jclass);
+ jint JvNumInstanceFields (jclass);
+ jfieldID JvGetFirstStaticField (jclass);
+ jint JvNumStaticFields (jclass);
+ 
+ jobject _Jv_AllocObject (jclass);
+ void *_Jv_AllocObj (jint, jclass);
+ void *_Jv_AllocPtrFreeObj (jint, jclass);
+ void *_Jv_AllocArray (jint, jclass);
+ 
+ bool _Jv_getInterfaceMethod(jclass, jclass&, int&, 
+ 			    const _Jv_Utf8Const*,
+ 			    const _Jv_Utf8Const*);
+ 
+ jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv *, jclass, jfieldID,
+ 				  jboolean);
+ jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID,
+ 				   jboolean);
+ jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);
+ 
+ jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);
+ jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);
+ jint JvNumMethods (jclass);
+ jmethodID JvGetFirstMethod (jclass);
+ 
+ // Friend classes and functions to implement the ClassLoader
+ class java::lang::ClassLoader;
+ class java::lang::VMClassLoader;
+ 
+ class java::io::ObjectOutputStream;
+ class java::io::ObjectInputStream;
+ class java::io::ObjectStreamClass;
+ 
+ void _Jv_RegisterClassHookDefault (jclass klass);
+ void _Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
+ void _Jv_UnregisterInitiatingLoader (jclass,java::lang::ClassLoader*);
+ void _Jv_UnregisterClass (jclass);
+ jclass _Jv_FindClass (_Jv_Utf8Const *name,
+ 		      java::lang::ClassLoader *loader);
+ jclass _Jv_FindClassInCache (_Jv_Utf8Const *name);
+ jclass _Jv_PopClass (void);
+ void _Jv_PushClass (jclass k);
+ void _Jv_NewArrayClass (jclass element,
+ 			java::lang::ClassLoader *loader,
+ 			_Jv_VTable *array_vtable = 0);
+ jclass _Jv_NewClass (_Jv_Utf8Const *name, jclass superclass,
+ 		     java::lang::ClassLoader *loader);
+ void _Jv_InitNewClassFields (jclass klass);
+ 
+ // Friend functions and classes in prims.cc
+ void _Jv_InitPrimClass (jclass, char *, char, int);
+ jstring _Jv_GetMethodString (jclass, _Jv_Method *, jclass = NULL);
+ 
+ jboolean _Jv_CheckAccess (jclass self_klass, jclass other_klass,
+ 			  jint flags);
+ jclass _Jv_GetArrayClass (jclass klass, java::lang::ClassLoader *loader);
+ 
+ jboolean _Jv_IsInterpretedClass (jclass);
+ 
+ #ifdef INTERPRETER
+ void _Jv_InitField (jobject, jclass, int);
+ 
+ class _Jv_ClassReader;	
+ class _Jv_InterpClass;
+ class _Jv_InterpMethod;
+ #endif
+ 
+ class _Jv_BytecodeVerifier;
+ class gnu::gcj::runtime::StackTrace;
+ class java::io::VMObjectStreamClass;
+ 
+ void _Jv_sharedlib_register_hook (jclass klass);
+ 
+ 
  class java::lang::Class : public java::lang::Object
  {
  public:
*************** public:
*** 207,219 ****
    void setSigners(JArray<jobject> *);
  
    inline jclass getSuperclass (void)
!     {
!       return superclass;
!     }
  
    inline jboolean isArray (void)
      {
!       return name->data[0] == '[';
      }
  
    inline jclass getComponentType (void)
--- 317,334 ----
    void setSigners(JArray<jobject> *);
  
    inline jclass getSuperclass (void)
!   {
!     return superclass;
!   }
! 
!   inline jclass getInterface (jint n)
!   {
!     return interfaces[n];
!   }
  
    inline jboolean isArray (void)
      {
!       return name->first() == '[';
      }
  
    inline jclass getComponentType (void)
*************** public:
*** 242,250 ****
  
    // FIXME: this probably shouldn't be public.
    jint size (void)
!     {
!       return size_in_bytes;
!     }
      
    // finalization
    void finalize ();
--- 357,372 ----
  
    // FIXME: this probably shouldn't be public.
    jint size (void)
!   {
!     return size_in_bytes;
!   }
! 
!   // The index of the first method we declare ourself (as opposed to
!   // inheriting).
!   inline jint firstMethodIndex (void)
!   {
!     return vtable_method_count - method_count;
!   }
      
    // finalization
    void finalize ();
*************** private:   
*** 263,306 ****
  
    static jstring getPackagePortion (jstring);
  
!   // Friend functions implemented in natClass.cc.
!   friend _Jv_Method *_Jv_GetMethodLocal (jclass klass, _Jv_Utf8Const *name,
! 					 _Jv_Utf8Const *signature);
!   friend jboolean _Jv_IsAssignableFrom(jclass, jclass);
!   friend jboolean _Jv_InterfaceAssignableFrom (jclass, jclass);
!   friend void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface, 
! 					     int method_idx);
! 
!   inline friend void 
!   _Jv_InitClass (jclass klass)
    {
!     if (__builtin_expect (klass->state == JV_STATE_DONE, true))
!       return;
!     klass->initializeClass ();  
    }
  
!   friend _Jv_Method* _Jv_LookupDeclaredMethod (jclass, _Jv_Utf8Const *, 
! 					       _Jv_Utf8Const*);
!   friend jfieldID JvGetFirstInstanceField (jclass);
!   friend jint JvNumInstanceFields (jclass);
!   friend jfieldID JvGetFirstStaticField (jclass);
!   friend jint JvNumStaticFields (jclass);
  
!   friend jobject _Jv_AllocObject (jclass, jint);
!   friend void *_Jv_AllocObj (jint, jclass);
!   friend void *_Jv_AllocPtrFreeObj (jint, jclass);
!   friend void *_Jv_AllocArray (jint, jclass);
  
!   friend jobject _Jv_JNI_ToReflectedField (_Jv_JNIEnv *, jclass, jfieldID,
! 					   jboolean);
!   friend jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID,
! 					    jboolean);
!   friend jfieldID _Jv_FromReflectedField (java::lang::reflect::Field *);
  
!   friend jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);
!   friend jmethodID _Jv_FromReflectedConstructor (java::lang::reflect::Constructor *);
!   friend jint JvNumMethods (jclass);
!   friend jmethodID JvGetFirstMethod (jclass);
  
    // Friends classes and functions to implement the ClassLoader
    friend class java::lang::ClassLoader;
--- 385,429 ----
  
    static jstring getPackagePortion (jstring);
  
!   void set_state (jint nstate)
    {
!     state = nstate;
!     notifyAll ();
    }
  
!   // Friend functions implemented in natClass.cc.
!   friend _Jv_Method *::_Jv_GetMethodLocal (jclass klass, _Jv_Utf8Const *name,
! 					   _Jv_Utf8Const *signature);
!   friend jboolean (::_Jv_IsAssignableFrom) (jclass, jclass);
!   friend jboolean (::_Jv_IsAssignableFromSlow) (jclass, jclass);
!   friend jboolean (::_Jv_InterfaceAssignableFrom) (jclass, jclass);
!   friend void *::_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface, 
! 					       int method_idx);
  
!   friend void ::_Jv_InitClass (jclass klass);
  
!   friend _Jv_Method* ::_Jv_LookupDeclaredMethod (jclass, _Jv_Utf8Const *, 
! 						 _Jv_Utf8Const*, jclass *);
!   friend jfieldID (::JvGetFirstInstanceField) (jclass);
!   friend jint (::JvNumInstanceFields) (jclass);
!   friend jfieldID (::JvGetFirstStaticField) (jclass);
!   friend jint (::JvNumStaticFields) (jclass);
  
!   friend jobject (::_Jv_AllocObject) (jclass);
!   friend void *::_Jv_AllocObj (jint, jclass);
!   friend void *::_Jv_AllocPtrFreeObj (jint, jclass);
!   friend void *::_Jv_AllocArray (jint, jclass);
! 
!   friend jobject (::_Jv_JNI_ToReflectedField) (_Jv_JNIEnv *, jclass, jfieldID,
! 					       jboolean);
!   friend jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID,
! 						jboolean);
!   friend jfieldID (::_Jv_FromReflectedField) (java::lang::reflect::Field *);
! 
!   friend jmethodID (::_Jv_FromReflectedMethod) (java::lang::reflect::Method *);
!   friend jmethodID (::_Jv_FromReflectedConstructor) (java::lang::reflect::Constructor *);
!   friend jint (::JvNumMethods) (jclass);
!   friend jmethodID (::JvGetFirstMethod) (jclass);
  
    // Friends classes and functions to implement the ClassLoader
    friend class java::lang::ClassLoader;
*************** private:   
*** 310,396 ****
    friend class java::io::ObjectInputStream;
    friend class java::io::ObjectStreamClass;
  
!   friend void _Jv_WaitForState (jclass, int);
!   friend void _Jv_RegisterClasses (jclass *classes);
!   friend void _Jv_RegisterClassHookDefault (jclass klass);
!   friend void _Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
!   friend void _Jv_UnregisterClass (jclass);
!   friend jclass _Jv_FindClass (_Jv_Utf8Const *name,
! 			       java::lang::ClassLoader *loader);
!   friend jclass _Jv_FindClassInCache (_Jv_Utf8Const *name,
! 				      java::lang::ClassLoader *loader);
!   friend jclass _Jv_PopClass (void);
!   friend void _Jv_PushClass (jclass k);
!   friend void _Jv_NewArrayClass (jclass element,
! 				 java::lang::ClassLoader *loader,
! 				 _Jv_VTable *array_vtable = 0);
!   friend jclass _Jv_NewClass (_Jv_Utf8Const *name, jclass superclass,
! 			      java::lang::ClassLoader *loader);
!   friend void _Jv_InitNewClassFields (jclass klass);
  
    // in prims.cc
!   friend void _Jv_InitPrimClass (jclass, char *, char, int, _Jv_ArrayVTable *);
  
!   friend void _Jv_PrepareCompiledClass (jclass);
!   friend void _Jv_PrepareConstantTimeTables (jclass);
!   friend jshort _Jv_GetInterfaces (jclass, _Jv_ifaces *);
!   friend void _Jv_GenerateITable (jclass, _Jv_ifaces *, jshort *);
!   friend jstring _Jv_GetMethodString(jclass, _Jv_Utf8Const *);
!   friend jshort _Jv_AppendPartialITable (jclass, jclass, void **, jshort);
!   friend jshort _Jv_FindIIndex (jclass *, jshort *, jshort);
!   friend void _Jv_LinkSymbolTable (jclass);
!   friend void _Jv_LayoutVTableMethods (jclass klass);
!   friend void _Jv_SetVTableEntries (jclass, _Jv_VTable *, jboolean *);
!   friend void _Jv_MakeVTable (jclass);
!   friend void _Jv_linkExceptionClassTable (jclass);
  
!   friend jboolean _Jv_CheckAccess (jclass self_klass, jclass other_klass,
  				   jint flags);
  
!   // Return array class corresponding to element type KLASS, creating it if
!   // necessary.
!   inline friend jclass
!   _Jv_GetArrayClass (jclass klass, java::lang::ClassLoader *loader)
!   {
!     extern void _Jv_NewArrayClass (jclass element,
! 				   java::lang::ClassLoader *loader,
! 				   _Jv_VTable *array_vtable = 0);
!     if (__builtin_expect (!klass->arrayclass, false))
!       _Jv_NewArrayClass (klass, loader);
!     return klass->arrayclass;
!   }
  
! #ifdef INTERPRETER
!   friend jboolean _Jv_IsInterpretedClass (jclass);
!   friend void _Jv_InitField (jobject, jclass, _Jv_Field*);
!   friend void _Jv_InitField (jobject, jclass, int);
!   friend _Jv_word _Jv_ResolvePoolEntry (jclass, int);
!   friend _Jv_Method *_Jv_SearchMethodInClass (jclass cls, jclass klass, 
!                         		      _Jv_Utf8Const *method_name, 
! 					      _Jv_Utf8Const *method_signature);
  
!   friend void _Jv_PrepareClass (jclass);
!   friend void _Jv_PrepareMissingMethods (jclass base, jclass iface_class);
  
!   friend void _Jv_Defer_Resolution (void *cl, _Jv_Method *meth, void **);
!   
!   friend class _Jv_ClassReader;	
!   friend class _Jv_InterpClass;
!   friend class _Jv_InterpMethod;
  #endif
  
  #ifdef JV_MARKOBJ_DECL
    friend JV_MARKOBJ_DECL;
  #endif
  
!   friend class _Jv_BytecodeVerifier;
    friend class gnu::gcj::runtime::StackTrace;
    friend class java::io::VMObjectStreamClass;
  
!   friend void _Jv_sharedlib_register_hook (jclass klass);
  
!   // Chain for class pool.
!   jclass next;
    // Name of class.
    _Jv_Utf8Const *name;
    // Access flags for class.
--- 433,501 ----
    friend class java::io::ObjectInputStream;
    friend class java::io::ObjectStreamClass;
  
!   friend void ::_Jv_RegisterClasses (const jclass *classes);
!   friend void ::_Jv_RegisterClasses_Counted (const jclass *classes, 
! 					     size_t count);
!   friend void ::_Jv_RegisterClassHookDefault (jclass klass);
!   friend void ::_Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
!   friend void ::_Jv_UnregisterInitiatingLoader (jclass,java::lang::ClassLoader*);
!   friend void ::_Jv_UnregisterClass (jclass);
!   friend jclass (::_Jv_FindClass) (_Jv_Utf8Const *name,
! 				   java::lang::ClassLoader *loader);
!   friend jclass (::_Jv_FindClassInCache) (_Jv_Utf8Const *name);
!   friend jclass (::_Jv_PopClass) (void);
!   friend void ::_Jv_PushClass (jclass k);
!   friend void ::_Jv_NewArrayClass (jclass element,
! 				   java::lang::ClassLoader *loader,
! 				   _Jv_VTable *array_vtable);
!   friend jclass (::_Jv_NewClass) (_Jv_Utf8Const *name, jclass superclass,
! 				  java::lang::ClassLoader *loader);
!   friend void ::_Jv_InitNewClassFields (jclass klass);
  
    // in prims.cc
!   friend void ::_Jv_InitPrimClass (jclass, char *, char, int);
  
!   friend jstring (::_Jv_GetMethodString) (jclass, _Jv_Method *, jclass);
  
!   friend jboolean (::_Jv_CheckAccess) (jclass self_klass, jclass other_klass,
  				   jint flags);
+   
+   friend bool (::_Jv_getInterfaceMethod) (jclass, jclass&, int&, 
+ 					  const _Jv_Utf8Const*,
+ 					  const _Jv_Utf8Const*);
  
!   friend jclass (::_Jv_GetArrayClass) (jclass klass,
! 				       java::lang::ClassLoader *loader);
  
!   friend jboolean (::_Jv_IsInterpretedClass) (jclass);
  
! #ifdef INTERPRETER
!   friend void ::_Jv_InitField (jobject, jclass, int);
  
!   friend class ::_Jv_ClassReader;	
!   friend class ::_Jv_InterpClass;
!   friend class ::_Jv_InterpMethod;
  #endif
  
  #ifdef JV_MARKOBJ_DECL
    friend JV_MARKOBJ_DECL;
  #endif
  
!   friend class ::_Jv_BytecodeVerifier;
    friend class gnu::gcj::runtime::StackTrace;
    friend class java::io::VMObjectStreamClass;
  
!   friend class ::_Jv_Linker;
!   friend class ::_Jv_ExecutionEngine;
!   friend class ::_Jv_CompiledEngine;
!   friend class ::_Jv_InterpreterEngine;
  
!   friend void ::_Jv_sharedlib_register_hook (jclass klass);
! 
!   // Chain for class pool.  This also doubles as the ABI version
!   // number.  It is only used for this purpose at class registration
!   // time, and only for precompiled classes.
!   jclass next_or_version;
    // Name of class.
    _Jv_Utf8Const *name;
    // Access flags for class.
*************** private:   
*** 421,428 ****
--- 526,537 ----
    _Jv_OffsetTable *otable;
    // Offset table symbols.
    _Jv_MethodSymbol *otable_syms;
+   // Address table
    _Jv_AddressTable *atable;
    _Jv_MethodSymbol *atable_syms;
+   // Interface table
+   _Jv_AddressTable *itable;
+   _Jv_MethodSymbol *itable_syms;
    _Jv_CatchClass *catch_classes;
    // Interfaces implemented by this class.
    jclass *interfaces;
*************** private:   
*** 445,454 ****
--- 554,592 ----
    jclass arrayclass;
    // Security Domain to which this class belongs (or null).
    java::security::ProtectionDomain *protectionDomain;
+   // Pointer to the type assertion table for this class.
+   _Jv_TypeAssertion *assertion_table;
    // Signers of this class (or null).
    JArray<jobject> *hack_signers;
    // Used by Jv_PopClass and _Jv_PushClass to communicate with StackTrace.
    jclass chain;
+   // Additional data, specific to the generator (JIT, native,
+   // interpreter) of this class.
+   void *aux_info;
+   // Execution engine.
+   _Jv_ExecutionEngine *engine;
  };
  
+ // Inline functions that are friends of java::lang::Class
+ 
+ inline void _Jv_InitClass (jclass klass)
+ {
+   if (__builtin_expect (klass->state == JV_STATE_DONE, true))
+     return;
+   klass->initializeClass ();  
+ }
+ 
+ // Return array class corresponding to element type KLASS, creating it if
+ // necessary.
+ inline jclass
+ _Jv_GetArrayClass (jclass klass, java::lang::ClassLoader *loader)
+ {
+   extern void _Jv_NewArrayClass (jclass element,
+ 				 java::lang::ClassLoader *loader,
+ 				 _Jv_VTable *array_vtable = 0);
+   if (__builtin_expect (!klass->arrayclass, false))
+     _Jv_NewArrayClass (klass, loader);
+   return klass->arrayclass;
+ }
+ 
  #endif /* __JAVA_LANG_CLASS_H__ */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Class.java gcc-4.0.0/libjava/java/lang/Class.java
*** gcc-3.4.3/libjava/java/lang/Class.java	Wed Oct 22 19:29:27 2003
--- gcc-4.0.0/libjava/java/lang/Class.java	Thu Feb 17 07:48:33 2005
***************
*** 1,71 ****
! // Class.java - Representation of a Java class.
  
! /* Copyright (C) 1998, 1999, 2000, 2002, 2003  Free Software Foundation
  
!    This file is part of libgcj.
  
! This software is copyrighted work licensed under the terms of the
! Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
! details.  */
  
  package java.lang;
! import java.io.Serializable;
  import java.io.InputStream;
! import java.lang.reflect.*;
! import java.security.*;
  import java.util.Arrays;
  import java.util.HashSet;
  
  /**
!  * @author Tom Tromey <tromey@cygnus.com>
!  * @date October 1, 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.
!  * plus gcj compiler sources (to determine object layout)
!  * Status:  Sufficient for our purposes, but some methods missing
!  * and some not implemented.
   */
- 
  public final class Class implements Serializable
  {
    public static native Class forName (String className)
      throws ClassNotFoundException;
!   /** @since 1.2 */
    public static native Class forName (String className, boolean initialize,
  				      ClassLoader loader)
      throws ClassNotFoundException;
    public native Class[] getClasses ();
    public native ClassLoader getClassLoader ();
    public native Class getComponentType ();
  
!   public native Constructor getConstructor (Class[] parameterTypes)
!     throws NoSuchMethodException, SecurityException;
  
    // This is used to implement getConstructors and
    // getDeclaredConstructors.
!   private native Constructor[] _getConstructors (boolean declared)
!     throws SecurityException;
  
!   public Constructor[] getConstructors () throws SecurityException
    {
!     return _getConstructors (false);
    }
  
!   public native Constructor getDeclaredConstructor (Class[] parameterTypes)
!     throws NoSuchMethodException, SecurityException;
  
!   public native Class[] getDeclaredClasses () throws SecurityException;
  
!   public Constructor[] getDeclaredConstructors () throws SecurityException
    {
!     return _getConstructors (true);
    }
  
!   public native Field getDeclaredField (String fieldName)
!     throws NoSuchFieldException, SecurityException;
  
    /**
     * Get all the declared fields in this class, but not those inherited from
--- 1,282 ----
! /* Class.java -- Representation of a Java class.
!    Copyright (C) 1998, 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., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
! 
! Linking this library statically or dynamically with other modules is
! making a combined work based on this library.  Thus, the terms and
! conditions of the GNU General Public License cover the whole
! combination.
! 
! As a special exception, the copyright holders of this library give you
! permission to link this library with independent modules to produce an
! executable, regardless of the license terms of these independent
! modules, and to copy and distribute the resulting executable under
! terms of your choice, provided that you also meet, for each linked
! independent module, the terms and conditions of the license of that
! module.  An independent module is a module which is not derived from
! or based on this library.  If you modify this library, you may extend
! this exception to your version of the library, but 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.InputStream;
! import java.io.Serializable;
! import java.lang.reflect.Constructor;
! import java.lang.reflect.Field;
! import java.lang.reflect.Member;
! import java.lang.reflect.Method;
! import java.net.URL;
! import java.security.ProtectionDomain;
  import java.util.Arrays;
  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 (and null "system" ClassLoader, incidentally).  The name of an
!  * array class is <code>[&lt;signature format&gt;;</code> ... 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
  {
+   /**
+    * Class is non-instantiable from Java code; only the VM can create
+    * instances of this class.
+    */
+   private Class ()
+   {
+   }
+ 
+   // Initialize the class.
+   private native void initializeClass ();
+ 
+   // finalization
+   protected native void finalize () throws Throwable;
+ 
+   /**
+    * 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 native Class forName (String className)
      throws ClassNotFoundException;
! 
!   /**
!    * 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
!    * @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 native Class forName (String className, boolean initialize,
  				      ClassLoader loader)
      throws ClassNotFoundException;
+   
+   /**
+    * 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 native Class[] getClasses ();
+   
+   /**
+    * Get the ClassLoader that loaded this class.  If it was loaded by the
+    * system classloader, this method will return null. If there is a security
+    * manager, and the caller's class loader does not match 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 native ClassLoader getClassLoader ();
+   
+   /**
+    * 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 native Class getComponentType ();
  
!   /**
!    * 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 native Constructor getConstructor(Class[] args)
!     throws NoSuchMethodException;
  
    // This is used to implement getConstructors and
    // getDeclaredConstructors.
!   private native Constructor[] _getConstructors (boolean declared);
  
!   /**
!    * 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()
    {
!     return _getConstructors(false);
    }
  
!   /**
!    * 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 native Constructor getDeclaredConstructor(Class[] args)
!     throws 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 native Class[] getDeclaredClasses();
  
!   /**
!    * 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()
    {
!     return _getConstructors(true);
    }
  
!   /**
!    * 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 native Field getDeclaredField(String fieldName)
!     throws NoSuchFieldException;
  
    /**
     * Get all the declared fields in this class, but not those inherited from
*************** public final class Class implements Seri
*** 87,125 ****
  
    native Field[] getDeclaredFields (boolean publicOnly);
  
!   private native Method _getDeclaredMethod (String methodName,
! 					    Class[] parameterTypes);
  
!   public Method getDeclaredMethod (String methodName, Class[] parameterTypes)
!     throws NoSuchMethodException, SecurityException
    {
      memberAccessCheck(Member.DECLARED);
  
      if ("<init>".equals(methodName) || "<clinit>".equals(methodName))
        throw new NoSuchMethodException(methodName);
  
!     Method m = _getDeclaredMethod(methodName, parameterTypes);
!     if (m == null)
!       throw new NoSuchMethodException (methodName);
!     return m;
    }
  
!   public native Method[] getDeclaredMethods () throws SecurityException;
! 
    // This is marked as unimplemented in the JCL book.
    public native Class getDeclaringClass ();
  
    private native Field getField (String fieldName, int hash)
!     throws NoSuchFieldException, SecurityException;
  
!   public Field getField (String fieldName)
!     throws NoSuchFieldException, SecurityException
    {
!     memberAccessCheck (Member.PUBLIC);
!     Field fld = getField(fieldName, fieldName.hashCode());
!     if (fld == null)
        throw new NoSuchFieldException(fieldName);
!     return fld;
    }
  
    /**
--- 298,394 ----
  
    native Field[] getDeclaredFields (boolean publicOnly);
  
!   private native Method _getDeclaredMethod(String methodName, Class[] args);
  
!   /**
!    * 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 "<init>" in the class file) and class initializers
!    * (name "<clinit>") 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[] args)
!     throws NoSuchMethodException
    {
      memberAccessCheck(Member.DECLARED);
  
      if ("<init>".equals(methodName) || "<clinit>".equals(methodName))
        throw new NoSuchMethodException(methodName);
  
!     Method match = _getDeclaredMethod(methodName, args);
!     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 native Method[] getDeclaredMethods();
!  
!   /**
!    * 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
!    */
    // This is marked as unimplemented in the JCL book.
    public native Class getDeclaringClass ();
  
    private native Field getField (String fieldName, int hash)
!     throws NoSuchFieldException;
  
!   /**
!    * 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 = getField(fieldName, fieldName.hashCode());
!     if (field == null)
        throw new NoSuchFieldException(fieldName);
!     return field;
    }
  
    /**
*************** public final class Class implements Seri
*** 162,167 ****
--- 431,437 ----
     * 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()
*************** public final class Class implements Seri
*** 176,259 ****
  	  pkg = name.substring(0, idx);
  	return cl.getPackage(pkg);
        }
!     else
!       return null;
    }
  
    public native Class[] getInterfaces ();
  
!   private final native void getSignature (StringBuffer buffer);
!   private static final native String getSignature (Class[] parameterTypes,
! 						   boolean is_construtor);
  
!   public native Method _getMethod (String methodName, Class[] parameterTypes);
  
!   public Method getMethod (String methodName, Class[] parameterTypes)
!     throws NoSuchMethodException, SecurityException
    {
      memberAccessCheck(Member.PUBLIC);
  
      if ("<init>".equals(methodName) || "<clinit>".equals(methodName))
        throw new NoSuchMethodException(methodName);
  
!     Method m = _getMethod(methodName, parameterTypes);
!     if (m == null)
!       throw new NoSuchMethodException (methodName);
!     return m;
    }
  
    private native int _getMethods (Method[] result, int offset);
!   public native Method[] getMethods () throws SecurityException;
  
    public native int getModifiers ();
    public native String getName ();
  
!   public java.net.URL getResource (String resourceName)
    {
!     String name = resourcePath (resourceName);
!     ClassLoader loader = getClassLoader ();
      if (loader == null)
!       return ClassLoader.getSystemResource (name);
!     else
!       return loader.getResource (name);
    }
  
!   public java.io.InputStream getResourceAsStream (String resourceName)
    {
!     String name = resourcePath (resourceName);
!     ClassLoader loader = getClassLoader ();
      if (loader == null)
!       return ClassLoader.getSystemResourceAsStream (name);
!     else
!       return loader.getResourceAsStream (name);
    }
  
!   private String resourcePath (String resourceName)
    {
!     if (resourceName.startsWith ("/"))
!       return resourceName.substring (1);
  
      Class c = this;
!     while (c.isArray ())
!       c = c.getComponentType ();
  
!     String packageName = c.getName ().replace ('.', '/');
!     int end = packageName.lastIndexOf ('/');
!     if (end == -1)
!       return resourceName;
!     else
!       return packageName.substring (0, end+1) + resourceName;
    }
  
    public native Object[] getSigners ();
    native void setSigners(Object[] signers);
  
    public native Class getSuperclass ();
    public native boolean isArray ();
!   public native boolean isAssignableFrom (Class cls);
!   public native boolean isInstance (Object obj);
    public native boolean isInterface ();
    public native boolean isPrimitive ();
    public native Object newInstance ()
      throws InstantiationException, IllegalAccessException;
  
--- 446,737 ----
  	  pkg = name.substring(0, idx);
  	return cl.getPackage(pkg);
        }
!     return null;
    }
  
+   /**
+    * 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 native Class[] getInterfaces ();
  
!   private final native void getSignature(StringBuffer buffer);
!   private static final native String getSignature(Class[] args,
! 						  boolean is_construtor);
  
!   public native Method _getMethod(String methodName, Class[] args);
  
!   /**
!    * 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 "<init>" in the class file) and class
!    * initializers (name "<clinit>") 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[] args)
!     throws NoSuchMethodException
    {
      memberAccessCheck(Member.PUBLIC);
  
      if ("<init>".equals(methodName) || "<clinit>".equals(methodName))
        throw new NoSuchMethodException(methodName);
  
!     Method method = _getMethod(methodName, args);
!     if (method == null)
!       throw new NoSuchMethodException(methodName);
!     return method;
    }
  
    private native int _getMethods (Method[] result, int offset);
!   
!   /**
!    * 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 native Method[] getMethods();
  
+   /**
+    * 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 Modifer
+    * @since 1.1
+    */
    public native int getModifiers ();
+   
+   /**
+    * Get the name of this class, separated by dots for package separators.
+    * Primitive types and arrays are encoded as:
+    * <pre>
+    * boolean             Z
+    * byte                B
+    * char                C
+    * short               S
+    * int                 I
+    * long                J
+    * float               F
+    * double              D
+    * void                V
+    * array type          [<em>element type</em>
+    * class or interface, alone: &lt;dotted name&gt;
+    * class or interface, as element type: L&lt;dotted name&gt;;
+    *
+    * @return the name of this class
+    */
    public native String getName ();
  
!   /**
!    * 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 it is passed on to getResource() as is.  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 it is passed on to getResource() as is.  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.startsWith("/"))
!       return resourceName.substring(1);
  
      Class c = this;
!     while (c.isArray())
!       c = c.getComponentType();
  
!     String packageName = c.getName().replace('.', '/');
!     int end = packageName.lastIndexOf('/');
!     if (end != -1)
!       return packageName.substring(0, end + 1) + resourceName;
!     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 native Object[] getSigners ();
+   
+   /**
+    * Set the signers of this class.
+    *
+    * @param signers the signers of this class
+    */
    native void setSigners(Object[] 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 native Class getSuperclass ();
+   
+   /**
+    * Return whether this class is an array type.
+    *
+    * @return whether this class is an array type
+    * @since 1.1
+    */
    public native boolean isArray ();
!   
!   /**
!    * 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 native boolean isAssignableFrom (Class 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 native boolean isInstance (Object 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 native boolean isInterface ();
+   
+   /**
+    * 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 native boolean isPrimitive ();
+   
+   /**
+    * 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 native Object newInstance ()
      throws InstantiationException, IllegalAccessException;
  
*************** public final class Class implements Seri
*** 262,275 ****
    private native ProtectionDomain getProtectionDomain0();
  
    /**
!    * 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.
     *
!    * @exception SecurityException if a security manager exists and the caller
     * does not have <code>RuntimePermission("getProtectionDomain")</code>.
!    *
     * @since 1.2
     */
    public ProtectionDomain getProtectionDomain()
--- 740,754 ----
    private native ProtectionDomain getProtectionDomain0();
  
    /**
!    * 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.
     *
!    * @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()
*************** public final class Class implements Seri
*** 286,296 ****
        return protectionDomain;
    }
  
!   public String toString ()
    {
!     if (isPrimitive ())
!       return getName ();
!     return (isInterface () ? "interface " : "class ") + getName ();
    }
  
    /**
--- 765,782 ----
        return protectionDomain;
    }
  
!   /**
!    * 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();
    }
  
    /**
*************** public final class Class implements Seri
*** 362,378 ****
      return c.defaultAssertionStatus;
    }
  
-   // Don't allow new classes to be made.
-   private Class ()
-   {
-   }
- 
-   // Initialize the class.
-   private native void initializeClass ();
- 
-   // finalization
-   protected native void finalize () throws Throwable;
- 
    /**
     * Strip the last portion of the name (after the last dot).
     *
--- 848,853 ----
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ClassCastException.java gcc-4.0.0/libjava/java/lang/ClassCastException.java
*** gcc-3.4.3/libjava/java/lang/ClassCastException.java	Sat Jun 15 19:45:30 2002
--- gcc-4.0.0/libjava/java/lang/ClassCastException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* ClassCastException.java -- exception thrown on bad cast
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 47,53 ****
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @status updated to 1.4
   */
  public class ClassCastException extends RuntimeException
--- 47,53 ----
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @status updated to 1.4
   */
  public class ClassCastException extends RuntimeException
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ClassCircularityError.java gcc-4.0.0/libjava/java/lang/ClassCircularityError.java
*** gcc-3.4.3/libjava/java/lang/ClassCircularityError.java	Sat Jun 15 19:45:30 2002
--- gcc-4.0.0/libjava/java/lang/ClassCircularityError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* ClassCircularityError.java -- thrown when linking circular classes
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ClassLoader.java gcc-4.0.0/libjava/java/lang/ClassLoader.java
*** gcc-3.4.3/libjava/java/lang/ClassLoader.java	Thu Oct  9 16:24:55 2003
--- gcc-4.0.0/libjava/java/lang/ClassLoader.java	Wed Apr  6 22:40:52 2005
***************
*** 1,5 ****
  /* ClassLoader.java -- responsible for loading classes into the VM
!    Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,46 ****
  
  package java.lang;
  
! import java.io.InputStream;
  import java.io.IOException;
! import java.lang.reflect.Constructor;
  import java.net.URL;
  import java.security.CodeSource;
  import java.security.PermissionCollection;
--- 38,48 ----
  
  package java.lang;
  
! import gnu.java.util.DoubleEnumeration;
! import gnu.java.util.EmptyEnumeration;
! 
  import java.io.IOException;
! import java.io.InputStream;
  import java.net.URL;
  import java.security.CodeSource;
  import java.security.PermissionCollection;
*************** import java.security.ProtectionDomain;
*** 49,56 ****
  import java.util.Enumeration;
  import java.util.HashMap;
  import java.util.Map;
- import gnu.java.util.DoubleEnumeration;
- import gnu.java.util.EmptyEnumeration;
  
  /**
   * The ClassLoader is a way of customizing the way Java gets its classes
--- 51,56 ----
*************** import gnu.java.util.EmptyEnumeration;
*** 109,115 ****
   *
   * @author John Keiser
   * @author Mark Wielaard
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Class
   * @since 1.0
   * @status still missing 1.4 functionality
--- 109,115 ----
   *
   * @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
*** 122,134 ****
     * is not private in order to allow native code (and trusted subclasses)
     * access to this field.
     */
!   final Map loadedClasses = new HashMap();
  
    /**
     * All packages defined by this classloader. It is not private in order to
     * allow native code (and trusted subclasses) access to this field.
     */
!   final Map definedPackages = new HashMap();
  
    /**
     * The classloader that is consulted before this classloader.
--- 122,134 ----
     * is not private in order to allow native code (and trusted subclasses)
     * access to this field.
     */
!   final HashMap loadedClasses = new HashMap();
  
    /**
     * 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.
*************** public abstract class ClassLoader
*** 249,255 ****
     * 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.
     *
     * @param name the name of the class relative to this ClassLoader
     * @return the loaded class
--- 249,255 ----
     * 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
*************** public abstract class ClassLoader
*** 260,279 ****
      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)</code>). 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.
     *
     * @param name the fully qualified name of the class to load
     * @param resolve whether or not to resolve the class
--- 260,282 ----
      return loadClass(name, false);
    }
  
+   private native Class loadClassFromSig(String name)
+     throws ClassNotFoundException;
+ 
    /**
     * 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
*************** public abstract class ClassLoader
*** 283,312 ****
    protected synchronized Class loadClass(String name, boolean resolve)
      throws ClassNotFoundException
    {
!     // Have we already loaded this class?
!     Class c = findLoadedClass(name);
!     if (c != null)
!       return c;
! 
!     // 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;
--- 286,322 ----
    protected synchronized Class loadClass(String name, boolean resolve)
      throws ClassNotFoundException
    {
!     // Arrays are handled specially.
!     Class c;
!     if (name.charAt(0) == '[')
!       c = loadClassFromSig(name);
!     else
        {
! 	// Have we already loaded this 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;
*************** public abstract class ClassLoader
*** 335,341 ****
     *   {
     *     String packageName = name.substring(0, lastDot);
     *     // Look if the package already exists
!    *     if (getPackage(pkg) == null)
     *       {
     *         // define the package
     *         definePackage(packageName, ...);
--- 345,351 ----
     *   {
     *     String packageName = name.substring(0, lastDot);
     *     // Look if the package already exists
!    *     if (getPackage(packageName) == null)
     *       {
     *         // define the package
     *         definePackage(packageName, ...);
*************** public abstract class ClassLoader
*** 384,390 ****
     * <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
--- 394,400 ----
     * <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
*************** public abstract class ClassLoader
*** 407,413 ****
     * 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.
--- 417,423 ----
     * 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.
*************** public abstract class ClassLoader
*** 435,442 ****
        domain = defaultProtectionDomain;
      if (! initialized)
        throw new SecurityException("attempt to define class from uninitialized class loader");
      Class retval = VMClassLoader.defineClass(this, name, data,
!                                              offset, len, domain);
      loadedClasses.put(retval.getName(), retval);
      return retval;
    }
--- 445,453 ----
        domain = defaultProtectionDomain;
      if (! initialized)
        throw new SecurityException("attempt to define class from uninitialized class loader");
+     
      Class retval = VMClassLoader.defineClass(this, name, data,
! 					     offset, len, domain);
      loadedClasses.put(retval.getName(), retval);
      return retval;
    }
*************** public abstract class ClassLoader
*** 475,480 ****
--- 486,492 ----
     * <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 abstract class ClassLoader
*** 554,566 ****
     * 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() 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.
     *
     * @param name the resource name
     * @return an enumaration of all resources found
--- 566,578 ----
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ClassNotFoundException.java gcc-4.0.0/libjava/java/lang/ClassNotFoundException.java
*** gcc-3.4.3/libjava/java/lang/ClassNotFoundException.java	Mon Jun 17 19:15:22 2002
--- gcc-4.0.0/libjava/java/lang/ClassNotFoundException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* ClassNotFoundException.java -- thrown when class definition cannot be found
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 43,49 ****
   * 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)
--- 43,49 ----
   * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/lang/CloneNotSupportedException.java gcc-4.0.0/libjava/java/lang/CloneNotSupportedException.java
*** gcc-3.4.3/libjava/java/lang/CloneNotSupportedException.java	Sat Jun 15 19:45:30 2002
--- gcc-4.0.0/libjava/java/lang/CloneNotSupportedException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* CloneNotSupportedException.java -- thrown when an object cannot be cloned
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 60,67 ****
   * </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
--- 60,67 ----
   * </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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Cloneable.java gcc-4.0.0/libjava/java/lang/Cloneable.java
*** gcc-3.4.3/libjava/java/lang/Cloneable.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/Cloneable.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Cloneable.java -- Interface for marking objects cloneable by Object.clone()
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 65,72 ****
   * <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
--- 65,72 ----
   * <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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Comparable.java gcc-4.0.0/libjava/java/lang/Comparable.java
*** gcc-3.4.3/libjava/java/lang/Comparable.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/Comparable.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Comparable.java -- Interface for comparaing objects to obtain an ordering
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 52,69 ****
   *
   * <p>Lists, arrays, and sets of objects that implement this interface can
   * be sorted automatically, without the need for an explicit
!  * {@link 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 Comparator
!  * @see Collections#sort(List)
!  * @see Arrays#sort(Object[])
!  * @see SortedSet
!  * @see SortedMap
!  * @see TreeSet
!  * @see TreeMap
   * @since 1.2
   * @status updated to 1.4
   */
--- 52,70 ----
   *
   * <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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Compiler.java gcc-4.0.0/libjava/java/lang/Compiler.java
*** gcc-3.4.3/libjava/java/lang/Compiler.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/Compiler.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Compiler.java -- placeholder for Java-to-native runtime compilers
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 50,56 ****
   *
   * <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)
--- 50,56 ----
   *
   * <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)
*************** public final class Compiler
*** 76,87 ****
     */
    public static boolean compileClass(Class oneClass)
    {
!     // Never succeed.
!     return false;
    }
  
    /**
!    * 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
--- 76,86 ----
     */
    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
*************** public final class Compiler
*** 90,97 ****
     */
    public static boolean compileClasses(String classNames)
    {
!     // Note the incredibly lame interface.  Always fail.
!     return false;
    }
  
    /**
--- 89,95 ----
     */
    public static boolean compileClasses(String classNames)
    {
!     return VMCompiler.compileClasses(classNames);
    }
  
    /**
*************** public final class Compiler
*** 105,112 ****
     */
    public static Object command(Object arg)
    {
!     // Our implementation defines this to a no-op.
!     return null;
    }
  
    /**
--- 103,109 ----
     */
    public static Object command(Object arg)
    {
!     return VMCompiler.command(arg);
    }
  
    /**
*************** public final class Compiler
*** 116,121 ****
--- 113,119 ----
     */
    public static void enable()
    {
+     VMCompiler.enable();
    }
  
    /**
*************** public final class Compiler
*** 124,128 ****
--- 122,127 ----
     */
    public static void disable()
    {
+     VMCompiler.disable();
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Double.java gcc-4.0.0/libjava/java/lang/Double.java
*** gcc-3.4.3/libjava/java/lang/Double.java	Tue Sep 23 21:42:40 2003
--- gcc-4.0.0/libjava/java/lang/Double.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Double.java -- object wrapper for double
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,41 ****
  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;
--- 36,41 ----
*************** import gnu.classpath.Configuration;
*** 48,55 ****
   * 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
   */
--- 48,55 ----
   * 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
*** 243,249 ****
     * @see #NEGATIVE_INFINITY
     * @since 1.2
     */
!   public static native double parseDouble(String s);
  
    /**
     * Return <code>true</code> if the <code>double</code> has the same
--- 243,249 ----
     * @see #NEGATIVE_INFINITY
     * @since 1.2
     */
!   public static native double parseDouble(String str);
  
    /**
     * Return <code>true</code> if the <code>double</code> has the same
*************** public final class Double extends Number
*** 392,400 ****
     * <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
--- 392,400 ----
     * <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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Error.java gcc-4.0.0/libjava/java/lang/Error.java
*** gcc-3.4.3/libjava/java/lang/Error.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/Error.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Error.java -- Indication of fatal abnormal conditions
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 49,56 ****
   * 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
   */
--- 49,56 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Exception.java gcc-4.0.0/libjava/java/lang/Exception.java
*** gcc-3.4.3/libjava/java/lang/Exception.java	Fri May 24 10:40:42 2002
--- gcc-4.0.0/libjava/java/lang/Exception.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* Exception.java -- generic exception thrown to indicate an exceptional
     condition has occurred.
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 47,54 ****
   * 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
--- 47,54 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ExceptionInInitializerError.java gcc-4.0.0/libjava/java/lang/ExceptionInInitializerError.java
*** gcc-3.4.3/libjava/java/lang/ExceptionInInitializerError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/ExceptionInInitializerError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* ExceptionInInitializerError.java -- thrown when class initialization fails
     with an uncaught exception
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 48,55 ****
   * 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
   */
--- 48,55 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Float.java gcc-4.0.0/libjava/java/lang/Float.java
*** gcc-3.4.3/libjava/java/lang/Float.java	Fri Nov 21 13:24:28 2003
--- gcc-4.0.0/libjava/java/lang/Float.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Float.java -- object wrapper for float
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 46,53 ****
   * 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
   */
--- 47,54 ----
   * 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 
*** 239,249 ****
     * @see #NEGATIVE_INFINITY
     * @since 1.2
     */
!   public static float parseFloat(String s)
    {
      // XXX Rounding parseDouble() causes some errors greater than 1 ulp from
      // the infinitely precise decimal.
!     return (float) Double.parseDouble(s);
    }
  
    /**
--- 240,250 ----
     * @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);
    }
  
    /**
*************** public final class Float extends Number 
*** 390,398 ****
     * <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
--- 391,399 ----
     * <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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/IllegalAccessError.java gcc-4.0.0/libjava/java/lang/IllegalAccessError.java
*** gcc-3.4.3/libjava/java/lang/IllegalAccessError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/IllegalAccessError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* IllegalAccessError.java -- thrown when linking to an inaccessible member
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 47,53 ****
   * application.
   *
   * @author Brian Jones
!  * @author Tom Tromey <tromey@cygnus.com>
   * @status updated to 1.4
   */
  public class IllegalAccessError extends IncompatibleClassChangeError
--- 47,53 ----
   * application.
   *
   * @author Brian Jones
!  * @author Tom Tromey (tromey@cygnus.com)
   * @status updated to 1.4
   */
  public class IllegalAccessError extends IncompatibleClassChangeError
diff -Nrcpad gcc-3.4.3/libjava/java/lang/IllegalAccessException.java gcc-4.0.0/libjava/java/lang/IllegalAccessException.java
*** gcc-3.4.3/libjava/java/lang/IllegalAccessException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/IllegalAccessException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* IllegalAccessException.java -- thrown on attempt to reflect on
     inaccessible data
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 45,51 ****
   * 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)
--- 45,51 ----
   * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/lang/IllegalArgumentException.java gcc-4.0.0/libjava/java/lang/IllegalArgumentException.java
*** gcc-3.4.3/libjava/java/lang/IllegalArgumentException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/IllegalArgumentException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* IllegalArgumentException.java -- thrown when a method is passed an
     illegal or inappropriate argument
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 46,52 ****
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @status updated to 1.4
   */
  public class IllegalArgumentException extends RuntimeException
--- 46,52 ----
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @status updated to 1.4
   */
  public class IllegalArgumentException extends RuntimeException
diff -Nrcpad gcc-3.4.3/libjava/java/lang/IllegalMonitorStateException.java gcc-4.0.0/libjava/java/lang/IllegalMonitorStateException.java
*** gcc-3.4.3/libjava/java/lang/IllegalMonitorStateException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/IllegalMonitorStateException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* IllegalMonitorStateException.java -- thrown when trying to wait or
     notify a monitor that is not owned
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 49,55 ****
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @status updated to 1.4
   */
  public class IllegalMonitorStateException extends RuntimeException
--- 49,55 ----
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @status updated to 1.4
   */
  public class IllegalMonitorStateException extends RuntimeException
diff -Nrcpad gcc-3.4.3/libjava/java/lang/IllegalStateException.java gcc-4.0.0/libjava/java/lang/IllegalStateException.java
*** gcc-3.4.3/libjava/java/lang/IllegalStateException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/IllegalStateException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* IllegalStateException.java -- thrown when invoking a method at
     an illegal or inappropriate time
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 50,56 ****
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @since 1.1
   * @status updated to 1.4
   */
--- 50,56 ----
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @since 1.1
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/IllegalThreadStateException.java gcc-4.0.0/libjava/java/lang/IllegalThreadStateException.java
*** gcc-3.4.3/libjava/java/lang/IllegalThreadStateException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/IllegalThreadStateException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* IllegalThreadStateException.java -- thrown when trying to manipulate a
     Thread when it is not in an appropriate state
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/IncompatibleClassChangeError.java gcc-4.0.0/libjava/java/lang/IncompatibleClassChangeError.java
*** gcc-3.4.3/libjava/java/lang/IncompatibleClassChangeError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/IncompatibleClassChangeError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* IncompatibleClassChangeError.java -- thrown for binary incompatible classes
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 44,50 ****
   * incompatible way.
   *
   * @author Brian Jones
!  * @author Tom Tromey <tromey@cygnus.com>
   * @status updated to 1.4
   */
  public class IncompatibleClassChangeError extends LinkageError
--- 44,50 ----
   * incompatible way.
   *
   * @author Brian Jones
!  * @author Tom Tromey (tromey@cygnus.com)
   * @status updated to 1.4
   */
  public class IncompatibleClassChangeError extends LinkageError
diff -Nrcpad gcc-3.4.3/libjava/java/lang/IndexOutOfBoundsException.java gcc-4.0.0/libjava/java/lang/IndexOutOfBoundsException.java
*** gcc-3.4.3/libjava/java/lang/IndexOutOfBoundsException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/IndexOutOfBoundsException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* IndexOutOfBoundsException.java -- thrown for an invalid index
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/InheritableThreadLocal.java gcc-4.0.0/libjava/java/lang/InheritableThreadLocal.java
*** gcc-3.4.3/libjava/java/lang/InheritableThreadLocal.java	Tue Aug 26 23:14:07 2003
--- gcc-4.0.0/libjava/java/lang/InheritableThreadLocal.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* InheritableThreadLocal -- a ThreadLocal which inherits values across threads
!    Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.util.WeakHashMap;
*** 55,62 ****
   * 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
--- 55,62 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/InstantiationError.java gcc-4.0.0/libjava/java/lang/InstantiationError.java
*** gcc-3.4.3/libjava/java/lang/InstantiationError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/InstantiationError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* InstantiationError.java -- thrown when the linker cannot create an instance
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 46,52 ****
   * with the previously compiled application.
   *
   * @author Brian Jones
!  * @author Tom Tromey <tromey@cygnus.com>
   * @status updated to 1.4
   */
  public class InstantiationError extends IncompatibleClassChangeError
--- 46,52 ----
   * with the previously compiled application.
   *
   * @author Brian Jones
!  * @author Tom Tromey (tromey@cygnus.com)
   * @status updated to 1.4
   */
  public class InstantiationError extends IncompatibleClassChangeError
diff -Nrcpad gcc-3.4.3/libjava/java/lang/InstantiationException.java gcc-4.0.0/libjava/java/lang/InstantiationException.java
*** gcc-3.4.3/libjava/java/lang/InstantiationException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/InstantiationException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* InstantiationException.java -- thrown when reflection cannot create an
     instance
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 44,50 ****
   * 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
   */
--- 44,50 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Integer.java gcc-4.0.0/libjava/java/lang/Integer.java
*** gcc-3.4.3/libjava/java/lang/Integer.java	Thu Jun 13 18:16:25 2002
--- gcc-4.0.0/libjava/java/lang/Integer.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Integer.java -- object wrapper for int
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Integer.java -- object wrapper for int
!    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.lang;
*** 48,54 ****
   * @author Paul Fisher
   * @author John Keiser
   * @author Warren Levy
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.0
   * @status updated to 1.4
   */
--- 48,54 ----
   * @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 final class Integer extends Numbe
*** 220,228 ****
     * 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>int</code>
     * @throws NumberFormatException if <code>s</code> cannot be parsed as an
     *         <code>int</code>
     */
--- 220,228 ----
     * 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 final class Integer extends Numbe
*** 414,420 ****
     * 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)
--- 414,420 ----
     * 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)
*************** public final class Integer extends Numbe
*** 461,467 ****
     * 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 an <code>Integer</code>
     * @throws NumberFormatException if <code>s</code> cannot be parsed as a
     *         <code>int</code>
--- 461,467 ----
     * 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>
diff -Nrcpad gcc-3.4.3/libjava/java/lang/InternalError.java gcc-4.0.0/libjava/java/lang/InternalError.java
*** gcc-3.4.3/libjava/java/lang/InternalError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/InternalError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* InternalError.java -- thrown when the VM encounters an internal error
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 43,49 ****
   * 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
--- 43,49 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/InterruptedException.java gcc-4.0.0/libjava/java/lang/InterruptedException.java
*** gcc-3.4.3/libjava/java/lang/InterruptedException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/InterruptedException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* InterruptedException.java -- thrown when a thread is interrupted
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 44,50 ****
   * <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)
--- 44,50 ----
   * <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)
diff -Nrcpad gcc-3.4.3/libjava/java/lang/LinkageError.java gcc-4.0.0/libjava/java/lang/LinkageError.java
*** gcc-3.4.3/libjava/java/lang/LinkageError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/LinkageError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* LinkageError.java -- thrown when classes valid at separate compile times
     cannot be linked to each other
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 45,51 ****
   * linked to one another.
   *
   * @author Brian Jones
!  * @author Tom Tromey <tromey@cygnus.com>
   * @status updated to 1.4
   */
  public class LinkageError extends Error
--- 45,51 ----
   * linked to one another.
   *
   * @author Brian Jones
!  * @author Tom Tromey (tromey@cygnus.com)
   * @status updated to 1.4
   */
  public class LinkageError extends Error
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Long.java gcc-4.0.0/libjava/java/lang/Long.java
*** gcc-3.4.3/libjava/java/lang/Long.java	Thu Jun 13 18:16:25 2002
--- gcc-4.0.0/libjava/java/lang/Long.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Long.java -- object wrapper for long
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Long.java -- object wrapper for long
!    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.lang;
*** 48,54 ****
   * @author Paul Fisher
   * @author John Keiser
   * @author Warren Levy
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.0
   * @status updated to 1.4
   */
--- 48,54 ----
   * @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 final class Long extends Number i
*** 223,231 ****
     * 'L' as the last character is only valid in radices 22 or greater, where
     * it is a digit and not a type indicator.
     *
!    * @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>long</code>
     * @throws NumberFormatException if <code>s</code> cannot be parsed as a
     *         <code>long</code>
     */
--- 223,231 ----
     * '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 final class Long extends Number i
*** 306,312 ****
     * <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 s 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>
--- 306,312 ----
     * <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>
*************** public final class Long extends Number i
*** 455,461 ****
     * 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)
--- 455,461 ----
     * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Math.java gcc-4.0.0/libjava/java/lang/Math.java
*** gcc-3.4.3/libjava/java/lang/Math.java	Wed Oct  8 19:00:21 2003
--- gcc-4.0.0/libjava/java/lang/Math.java	Fri Oct 22 17:14:09 2004
*************** exception statement from your version. *
*** 38,46 ****
  
  package java.lang;
  
- import java.util.Random;
  import gnu.classpath.Configuration;
  
  /**
   * Helper class containing useful mathematical functions and constants.
   * <P>
--- 38,47 ----
  
  package java.lang;
  
  import gnu.classpath.Configuration;
  
+ import java.util.Random;
+ 
  /**
   * Helper class containing useful mathematical functions and constants.
   * <P>
*************** import gnu.classpath.Configuration;
*** 50,56 ****
   *
   * @author Paul Fisher
   * @author John Keiser
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.0
   */
  public final class Math
--- 51,57 ----
   *
   * @author Paul Fisher
   * @author John Keiser
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.0
   */
  public final class Math
*************** public final class Math
*** 297,303 ****
     * @param a the angle (in radians)
     * @return sin(a)
     */
!   public native static double sin(double a);
  
    /**
     * The trigonometric function <em>cos</em>. The cosine of NaN or infinity is
--- 298,304 ----
     * @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
*************** public final class Math
*** 306,312 ****
     * @param a the angle (in radians)
     * @return cos(a)
     */
!   public native static double cos(double a);
  
    /**
     * The trigonometric function <em>tan</em>. The tangent of NaN or infinity
--- 307,313 ----
     * @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
*************** public final class Math
*** 316,322 ****
     * @param a the angle (in radians)
     * @return tan(a)
     */
!   public native static double tan(double a);
  
    /**
     * The trigonometric function <em>arcsin</em>. The range of angles returned
--- 317,323 ----
     * @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
*************** public final class Math
*** 327,333 ****
     * @param a the sin to turn back into an angle
     * @return arcsin(a)
     */
!   public native static double asin(double a);
  
    /**
     * The trigonometric function <em>arccos</em>. The range of angles returned
--- 328,334 ----
     * @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
*************** public final class Math
*** 338,344 ****
     * @param a the cos to turn back into an angle
     * @return arccos(a)
     */
!   public native static double acos(double a);
  
    /**
     * The trigonometric function <em>arcsin</em>. The range of angles returned
--- 339,345 ----
     * @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
*************** public final class Math
*** 350,356 ****
     * @return arcsin(a)
     * @see #atan2(double, double)
     */
!   public native static double atan(double a);
  
    /**
     * A special version of the trigonometric function <em>arctan</em>, for
--- 351,357 ----
     * @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
*************** public final class Math
*** 399,405 ****
     * @return <em>theta</em> in the conversion of (x, y) to (r, theta)
     * @see #atan(double)
     */
!   public native static double atan2(double y, double x);
  
    /**
     * Take <em>e</em><sup>a</sup>.  The opposite of <code>log()</code>. If the
--- 400,406 ----
     * @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
*************** public final class Math
*** 413,419 ****
     * @see #log(double)
     * @see #pow(double, double)
     */
!   public native static double exp(double a);
  
    /**
     * Take ln(a) (the natural log).  The opposite of <code>exp()</code>. If the
--- 414,420 ----
     * @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
*************** public final class Math
*** 429,435 ****
     * @return the natural log of <code>a</code>
     * @see #exp(double)
     */
!   public native static double log(double a);
  
    /**
     * Take a square root. If the argument is NaN or negative, the result is
--- 430,436 ----
     * @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
*************** public final class Math
*** 443,449 ****
     * @return the square root of the argument
     * @see #pow(double, double)
     */
!   public native static double sqrt(double a);
  
    /**
     * Raise a number to a power. Special cases:<ul>
--- 444,450 ----
     * @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>
*************** public final class Math
*** 513,519 ****
     * @param b the power to raise it to
     * @return a<sup>b</sup>
     */
!   public native static double pow(double a, double b);
  
    /**
     * Get the IEEE 754 floating point remainder on two numbers. This is the
--- 514,520 ----
     * @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
*************** public final class Math
*** 529,535 ****
     * @return the IEEE 754-defined floating point remainder of x/y
     * @see #rint(double)
     */
!   public native static double IEEEremainder(double x, double y);
  
    /**
     * Take the nearest integer that is that is greater than or equal to the
--- 530,536 ----
     * @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
*************** public final class Math
*** 540,546 ****
     * @param a the value to act upon
     * @return the nearest integer &gt;= <code>a</code>
     */
!   public native static double ceil(double a);
  
    /**
     * Take the nearest integer that is that is less than or equal to the
--- 541,547 ----
     * @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
*************** public final class Math
*** 550,556 ****
     * @param a the value to act upon
     * @return the nearest integer &lt;= <code>a</code>
     */
!   public native static double floor(double a);
  
    /**
     * Take the nearest integer to the argument.  If it is exactly between
--- 551,557 ----
     * @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
*************** public final class Math
*** 560,570 ****
     * @param a the value to act upon
     * @return the nearest integer to <code>a</code>
     */
!   public native static double rint(double a);
  
    /**
     * Take the nearest integer to the argument.  This is equivalent to
!    * <code>(int) Math.floor(a + 0.5f). 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.
     *
--- 561,571 ----
     * @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.
     *
diff -Nrcpad gcc-3.4.3/libjava/java/lang/NegativeArraySizeException.java gcc-4.0.0/libjava/java/lang/NegativeArraySizeException.java
*** gcc-3.4.3/libjava/java/lang/NegativeArraySizeException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/NegativeArraySizeException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,6 ****
  /* NegativeArraySizeException.java -- thrown on attempt to create array
     with a negative size
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 48,54 ****
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @status updated to 1.4
   */
  public class NegativeArraySizeException extends RuntimeException
--- 48,54 ----
   * </pre>
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @status updated to 1.4
   */
  public class NegativeArraySizeException extends RuntimeException
diff -Nrcpad gcc-3.4.3/libjava/java/lang/NoClassDefFoundError.java gcc-4.0.0/libjava/java/lang/NoClassDefFoundError.java
*** gcc-3.4.3/libjava/java/lang/NoClassDefFoundError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/NoClassDefFoundError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* NoClassDefFoundError.java -- thrown when a ClassLoader cannot find a class
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 47,53 ****
   * 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
--- 47,53 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/NoSuchFieldError.java gcc-4.0.0/libjava/java/lang/NoSuchFieldError.java
*** gcc-3.4.3/libjava/java/lang/NoSuchFieldError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/NoSuchFieldError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* NoSuchFieldError.java -- thrown when the linker does not find a field
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 45,51 ****
   * using binary incompatible class versions.
   *
   * @author Brian Jones
!  * @author Tom Tromey <tromey@cygnus.com>
   * @status updated to 1.4
   */
  public class NoSuchFieldError extends IncompatibleClassChangeError
--- 45,51 ----
   * using binary incompatible class versions.
   *
   * @author Brian Jones
!  * @author Tom Tromey (tromey@cygnus.com)
   * @status updated to 1.4
   */
  public class NoSuchFieldError extends IncompatibleClassChangeError
diff -Nrcpad gcc-3.4.3/libjava/java/lang/NoSuchFieldException.java gcc-4.0.0/libjava/java/lang/NoSuchFieldException.java
*** gcc-3.4.3/libjava/java/lang/NoSuchFieldException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/NoSuchFieldException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* NoSuchFieldException.java -- thrown when reflecting a non-existant field
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 43,49 ****
   * 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
   */
--- 43,49 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/NoSuchMethodError.java gcc-4.0.0/libjava/java/lang/NoSuchMethodError.java
*** gcc-3.4.3/libjava/java/lang/NoSuchMethodError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/NoSuchMethodError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* NoSuchMethodError.java -- thrown when the linker does not find a method
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 45,51 ****
   * using binary incompatible class versions.
   *
   * @author Brian Jones
!  * @author Tom Tromey <tromey@cygnus.com>
   * @status updated to 1.4
   */
  public class NoSuchMethodError extends IncompatibleClassChangeError
--- 45,51 ----
   * using binary incompatible class versions.
   *
   * @author Brian Jones
!  * @author Tom Tromey (tromey@cygnus.com)
   * @status updated to 1.4
   */
  public class NoSuchMethodError extends IncompatibleClassChangeError
diff -Nrcpad gcc-3.4.3/libjava/java/lang/NoSuchMethodException.java gcc-4.0.0/libjava/java/lang/NoSuchMethodException.java
*** gcc-3.4.3/libjava/java/lang/NoSuchMethodException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/NoSuchMethodException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* NoSuchMethodException.java -- thrown when reflecting a non-existant method
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 43,49 ****
   * 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
--- 43,49 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/NullPointerException.java gcc-4.0.0/libjava/java/lang/NullPointerException.java
*** gcc-3.4.3/libjava/java/lang/NullPointerException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/NullPointerException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* NullPointerException.java -- thrown when using null instead of an object
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 53,59 ****
   * <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
--- 53,59 ----
   * <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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Number.java gcc-4.0.0/libjava/java/lang/Number.java
*** gcc-3.4.3/libjava/java/lang/Number.java	Thu Jun 13 18:16:25 2002
--- gcc-4.0.0/libjava/java/lang/Number.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Number.java =- abstract superclass of numeric objects
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Number.java =- abstract superclass of numeric objects
!    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 51,57 ****
   * @author Paul Fisher
   * @author John Keiser
   * @author Warren Levy
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.0
   * @status updated to 1.4
   */
--- 51,57 ----
   * @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 
*** 69,75 ****
      '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'
    };
  
    /**
--- 69,75 ----
      '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',
    };
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/lang/NumberFormatException.java gcc-4.0.0/libjava/java/lang/NumberFormatException.java
*** gcc-3.4.3/libjava/java/lang/NumberFormatException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/NumberFormatException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* NumberFormatException.java -- thrown when parsing a bad string as a number
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 44,50 ****
   * has the wrong format.
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @status updated to 1.4
   */
  public class NumberFormatException extends IllegalArgumentException
--- 44,50 ----
   * has the wrong format.
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @status updated to 1.4
   */
  public class NumberFormatException extends IllegalArgumentException
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Object.h gcc-4.0.0/libjava/java/lang/Object.h
*** gcc-3.4.3/libjava/java/lang/Object.h	Tue Oct 21 04:46:19 2003
--- gcc-4.0.0/libjava/java/lang/Object.h	Tue Feb 22 18:29:43 2005
***************
*** 1,6 ****
  // Object.h - Header file for java.lang.Object.  -*- c++ -*-
  
! /* Copyright (C) 1998, 1999, 2000, 2001  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // Object.h - Header file for java.lang.Object.  -*- c++ -*-
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 15,20 ****
--- 15,22 ----
  
  #include <gcj/javaprims.h>
  
+ extern "Java"
+ {
  // This class is mainly here as a kludge to get G++ to allocate two
  // extra entries in each vtable.
  struct _JvObjectPrefix
*************** protected:
*** 27,32 ****
--- 29,42 ----
      virtual void nacd_2 (void) {}; // Actually the GC bitmap marking descriptor.
  # endif
  };
+ }
+ 
+ // Forward declarations for friends of java::lang::Object
+ void _Jv_MonitorEnter (jobject obj);
+ void _Jv_MonitorExit (jobject obj);
+ void _Jv_InitializeSyncMutex (void);
+ void _Jv_FinalizeObject (jobject obj);
+ bool _Jv_ObjectCheckMonitor (jobject obj);
  
  class java::lang::Object : public _JvObjectPrefix
  {
*************** public:
*** 45,55 ****
    void wait (void);
    void wait (jlong timeout);
  
!   friend void _Jv_MonitorEnter (jobject obj);
!   friend void _Jv_MonitorExit (jobject obj);
!   friend void _Jv_InitializeSyncMutex (void);
!   friend void _Jv_FinalizeObject (jobject obj);
!   friend bool _Jv_ObjectCheckMonitor (jobject obj);
  
  #ifdef JV_MARKOBJ_DECL
    friend JV_MARKOBJ_DECL;
--- 55,65 ----
    void wait (void);
    void wait (jlong timeout);
  
!   friend void ::_Jv_MonitorEnter (jobject obj);
!   friend void ::_Jv_MonitorExit (jobject obj);
!   friend void ::_Jv_InitializeSyncMutex (void);
!   friend void ::_Jv_FinalizeObject (jobject obj);
!   friend bool ::_Jv_ObjectCheckMonitor (jobject obj);
  
  #ifdef JV_MARKOBJ_DECL
    friend JV_MARKOBJ_DECL;
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Object.java gcc-4.0.0/libjava/java/lang/Object.java
*** gcc-3.4.3/libjava/java/lang/Object.java	Tue Mar  7 19:55:26 2000
--- gcc-4.0.0/libjava/java/lang/Object.java	Tue Nov 16 21:37:29 2004
***************
*** 1,19 ****
! // Object.java - The root of all evil.
  
! /* Copyright (C) 1998, 1999, 2000  Free Software Foundation
  
!    This file is part of libgcj.
  
! This software is copyrighted work licensed under the terms of the
! Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
! details.  */
  
! package java.lang;
  
! /**
!  * @author Tom Tromey <tromey@cygnus.com>
!  * @date September 30, 1998 
!  */
  
  /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
   * "The Java Language Specification", ISBN 0-201-63451-1
--- 1,43 ----
! /* java.lang.Object - The universal superclass in Java
!    Copyright (C) 1998, 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., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
  
! Linking this library statically or dynamically with other modules is
! making a combined work based on this library.  Thus, the terms and
! conditions of the GNU General Public License cover the whole
! combination.
  
! As a special exception, the copyright holders of this library give you
! permission to link this library with independent modules to produce an
! executable, regardless of the license terms of these independent
! modules, and to copy and distribute the resulting executable under
! terms of your choice, provided that you also meet, for each linked
! independent module, the terms and conditions of the license of that
! module.  An independent module is a module which is not derived from
! or based on this library.  If you modify this library, you may extend
! this exception to your version of the library, but 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;
  
  /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
   * "The Java Language Specification", ISBN 0-201-63451-1
*************** package java.lang;
*** 22,70 ****
   * Status:  Complete to version 1.1
   */
  
  public class Object
  {
    // This must come first.  See _JvObjectPrefix in Object.h.
    protected void finalize () throws Throwable
    {
    }
  
!   public final native Class getClass ();
!   public native int hashCode ();
!   public final native void notify ();
!   public final native void notifyAll ();
!   public final native void wait (long timeout, int nanos)
      throws InterruptedException;
  
!   public boolean equals (Object obj)
    {
      return this == obj;
    }
  
!   public Object ()
    {
    }
  
!   public String toString ()
    {
      return getClass().getName() + '@' + Integer.toHexString(hashCode());
    }
  
!   public final void wait () throws InterruptedException
    {
!     wait (0, 0);
    }
  
!   public final void wait (long timeout) throws InterruptedException
    {
!     wait (timeout, 0);
    }
  
!   protected native Object clone () throws CloneNotSupportedException;
  
    // This initializes the sync_info member.  It is here for
    // completeness (some day we'll be able to auto-generate Object.h).
!   private final native void sync_init ();
  
    // Note that we don't mention the sync_info field here.  If we do,
    // jc1 will not work correctly.
--- 46,510 ----
   * Status:  Complete to version 1.1
   */
  
+ /**
+  * 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
  {
+   /**
+    * 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
+    */
    // This must come first.  See _JvObjectPrefix in Object.h.
    protected void finalize () throws Throwable
    {
    }
  
!   /**
!    * 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 native Class getClass();
! 
!   /**
!    * 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 native int hashCode();
! 
!   /**
!    * 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()}, 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 native void notify();
!   
!   /**
!    * 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()}, 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 native void notifyAll();
! 
!   /**
!    * 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 native void wait(long timeout, int nanos)
      throws InterruptedException;
  
!   /**
!    * 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;
    }
  
!   /**
!    * 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.
!    */
!   public Object()
    {
    }
  
!   /**
!    * 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());
    }
  
!   /**
!    * 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 InterruptedException
    {
!     wait(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 timeout 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 timeout) throws InterruptedException
    {
!     wait(timeout, 0);
    }
  
!   /**
!    * 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 native Object clone() throws CloneNotSupportedException;
  
    // This initializes the sync_info member.  It is here for
    // completeness (some day we'll be able to auto-generate Object.h).
!   private final native void sync_init();
  
    // Note that we don't mention the sync_info field here.  If we do,
    // jc1 will not work correctly.
diff -Nrcpad gcc-3.4.3/libjava/java/lang/OutOfMemoryError.java gcc-4.0.0/libjava/java/lang/OutOfMemoryError.java
*** gcc-3.4.3/libjava/java/lang/OutOfMemoryError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/OutOfMemoryError.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* OutOfMemoryError.java -- thrown when a memory allocation fails
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 44,50 ****
   * by the garbage collector.
   *
   * @author Brian Jones
!  * @author Tom Tromey <tromey@cygnus.com>
   * @status updated to 1.4
   */
  public class OutOfMemoryError extends VirtualMachineError
--- 44,50 ----
   * by the garbage collector.
   *
   * @author Brian Jones
!  * @author Tom Tromey (tromey@cygnus.com)
   * @status updated to 1.4
   */
  public class OutOfMemoryError extends VirtualMachineError
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Package.java gcc-4.0.0/libjava/java/lang/Package.java
*** gcc-3.4.3/libjava/java/lang/Package.java	Tue Jan  6 08:34:58 2004
--- gcc-4.0.0/libjava/java/lang/Package.java	Mon Jan 10 19:39:26 2005
***************
*** 1,5 ****
  /* Package.java -- information about a package
!    Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Package.java -- information about a package
!    Copyright (C) 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.net.URL;
*** 41,46 ****
--- 41,47 ----
  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
*************** import java.util.StringTokenizer;
*** 63,69 ****
   * 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
--- 64,70 ----
   * 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
*************** import java.util.StringTokenizer;
*** 72,99 ****
  public class Package
  {
    /** The name of the Package */
!   final private String name;
  
    /** The name if the implementation */
!   final private String implTitle;
  
    /** The vendor that wrote this implementation */
!   final private String implVendor;
  
    /** The version of this implementation */
!   final private String implVersion;
  
    /** The name of the specification */
!   final private String specTitle;
  
    /** The name of the specification designer */
!   final private String specVendor;
  
    /** The version of this specification */
!   final private String specVersion;
  
    /** If sealed the origin of the package classes, otherwise null */
!   final private URL sealed;
  
    /**
     * A package local constructor for the Package class. All parameters except
--- 73,100 ----
  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
*************** public class Package
*** 227,233 ****
     * <code>getSpecificationVersion</code>.
     *
     * @param version the (minimal) desired version of the specification
!    * @throws NumberFormatException if either version string is invalid
     * @throws NullPointerException if either version string is null
     */
    public boolean isCompatibleWith(String version)
--- 228,237 ----
     * <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)
*************** public class Package
*** 270,276 ****
    {
      // Get the caller's classloader
      ClassLoader cl = VMSecurityManager.currentClassLoader();
!     return cl != null ? cl.getPackage(name) : null;
    }
  
    /**
--- 274,280 ----
    {
      // Get the caller's classloader
      ClassLoader cl = VMSecurityManager.currentClassLoader();
!     return cl != null ? cl.getPackage(name) : VMClassLoader.getPackage(name);
    }
  
    /**
*************** public class Package
*** 284,293 ****
      // Get the caller's classloader
      Class c = VMSecurityManager.getClassContext()[1];
      ClassLoader cl = c.getClassLoader();
!     // Sun's implementation returns the packages loaded by the bootstrap
!     // classloader if cl is null, but right now our bootstrap classloader
!     // does not create any Packages.
!     return cl != null ? cl.getPackages() : new Package[0];
    }
  
    /**
--- 288,294 ----
      // Get the caller's classloader
      Class c = VMSecurityManager.getClassContext()[1];
      ClassLoader cl = c.getClassLoader();
!     return cl != null ? cl.getPackages() : VMClassLoader.getPackages();
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/lang/PosixProcess.java gcc-4.0.0/libjava/java/lang/PosixProcess.java
*** gcc-3.4.3/libjava/java/lang/PosixProcess.java	Wed Aug 14 01:07:59 2002
--- gcc-4.0.0/libjava/java/lang/PosixProcess.java	Thu Aug 12 16:20:10 2004
***************
*** 1,6 ****
  // PosixProcess.java - Subclass of Process for POSIX systems.
! 
! /* Copyright (C) 1998, 1999  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,5 ----
  // PosixProcess.java - Subclass of Process for POSIX systems.
! /* Copyright (C) 1998, 1999, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 11,86 ****
  package java.lang;
  
  import java.io.File;
  import java.io.InputStream;
  import java.io.OutputStream;
! import java.io.IOException;
  
  /**
   * @author Tom Tromey <tromey@cygnus.com>
   * @date May 3, 1999
   */
  
  // This is entirely internal to our implementation.
- 
  // This file is copied to `ConcreteProcess.java' before compilation.
  // Hence the class name apparently does not match the file name.
  final class ConcreteProcess extends Process
  {
!   public native void destroy ();
  
!   public int exitValue ()
    {
!     if (! hasExited)
!       throw new IllegalThreadStateException("Process has not exited");
      return status;
    }
  
!   public InputStream getErrorStream ()
    {
!     return errorStream;
    }
  
!   public InputStream getInputStream ()
    {
!     return inputStream;
    }
  
!   public OutputStream getOutputStream ()
    {
      return outputStream;
    }
  
!   public native int waitFor () throws InterruptedException;
  
!   // This is used for actual initialization, as we can't write a
!   // native constructor.
!   public native void startProcess (String[] progarray,
!                                    String[] envp,
!                                    File dir)
!     throws IOException;
  
    // This file is copied to `ConcreteProcess.java' before
    // compilation.  Hence the constructor name apparently does not
    // match the file name.
!   public ConcreteProcess (String[] progarray,
!                           String[] envp,
!                           File dir)
!     throws IOException
    {
!     startProcess (progarray, envp, dir);
    }
  
!   // The process id.  This is cast to a pid_t on the native side.
    private long pid;
  
!   // True when child has exited.
!   private boolean hasExited;
  
!   // The exit status, if the child has exited.
!   private int status;
  
!   // The streams.
    private InputStream errorStream;
    private InputStream inputStream;
    private OutputStream outputStream;
  }
--- 10,475 ----
  package java.lang;
  
  import java.io.File;
+ import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
! import java.util.HashMap;
! import java.util.LinkedList;
! import java.util.List;
! import java.util.Map;
! 
  
  /**
   * @author Tom Tromey <tromey@cygnus.com>
   * @date May 3, 1999
+  * @author David Daney <ddaney@avtrex.com> Rewrote using
+  * ProcessManager
   */
  
  // This is entirely internal to our implementation.
  // This file is copied to `ConcreteProcess.java' before compilation.
  // Hence the class name apparently does not match the file name.
  final class ConcreteProcess extends Process
  {
!   static class ProcessManager extends Thread
!   {
!     /**
!      * A list of {@link ConcreteProcess ConcreteProcesses} to be
!      * started.  The queueLock object is used as the lock Object
!      * for all process related operations. To avoid dead lock
!      * ensure queueLock is obtained before ConcreteProcess.
!      */
!     List queue = new LinkedList();
!     private Map pidToProcess = new HashMap();
!     private boolean ready = false;
!     private long reaperPID;
  
!     ProcessManager()
!     {
!       super("ProcessManager");
!       // Don't keep the (main) process from exiting on our account.
!       this.setDaemon(true);
!     }
! 
!     /**
!      * Get the ConcreteProcess object with the given pid and
!      * remove it from the map.  This method is called from the
!      * native code for {@link #reap()).  The mapping is removed so
!      * the ConcreteProcesses can be GCed after they terminate.
!      *
!      * @param p The pid of the process.
!      */
!     private ConcreteProcess removeProcessFromMap(long p)
!     {
!       return (ConcreteProcess) pidToProcess.remove(new Long(p));
!     }
! 
!     /**
!      * Put the given ConcreteProcess in the map using the Long
!      * value of its pid as the key.
!      *
!      * @param p The ConcreteProcess.
!      */
!     void addProcessToMap(ConcreteProcess p)
!     {
!       pidToProcess.put(new Long(p.pid), p);
!     }
! 
!     /**
!      * Queue up the ConcreteProcess and awake the ProcessManager.
!      * The ProcessManager will start the ConcreteProcess from its
!      * thread so it can be reaped when it terminates.
!      *
!      * @param p The ConcreteProcess.
!      */
!     void startExecuting(ConcreteProcess p)
!     {
!       synchronized (queueLock)
!         {
! 	  queue.add(p);
! 	  signalReaper(); // If blocked in waitForSignal().
! 	  queueLock.notifyAll(); // If blocked in wait();
!         }
!     }
! 
!     /**
!      * Block until the ProcessManager thread is ready to accept
!      * commands.
!      */
!     void waitUntilReady()
!     {
!       synchronized (this)
!         {
! 	  try
! 	    {
! 	      while (! ready)
! 		wait();
! 	    }
! 	  catch (InterruptedException ie)
! 	    {
! 	      // Ignore.
! 	    }
!         }
!     }
! 
!     /**
!      * Main Process starting/reaping loop.
!      */
!     public void run()
!     {
!       init();
!       // Now ready to accept requests.
!       synchronized (this)
!         {
! 	  ready = true;
! 	  this.notifyAll();
!         }
! 
!       for (;;)
!         {
! 	  try
! 	    {
! 	      synchronized (queueLock)
! 	        {
! 		  boolean haveMoreChildren = reap();
! 		  if (! haveMoreChildren && queue.size() == 0)
! 		    {
! 		      // This reaper thread could exit, but we
! 		      // keep it alive for a while in case
! 		      // someone wants to start more Processes.
! 		      try
! 		        {
! 			  queueLock.wait(1000L);
! 			  if (queue.size() == 0)
! 			    {
! 			      processManager = null;
! 			      return; // Timed out.
! 			    }
! 		        }
! 		      catch (InterruptedException ie)
! 		        {
! 			  // Ignore and exit the thread.
! 			  return;
! 		        }
! 		    }
! 		  while (queue.size() > 0)
! 		    {
! 		      ConcreteProcess p = (ConcreteProcess) queue.remove(0);
! 		      p.spawn(this);
! 		    }
! 	        }
! 
! 	      // Wait for a SIGCHLD from either an exiting
! 	      // process or the startExecuting() method.  This
! 	      // is done outside of the synchronized block to
! 	      // allow other threads to enter and submit more
! 	      // jobs.
! 	      waitForSignal();
! 	    }
! 	  catch (Exception ex)
! 	    {
! 	      ex.printStackTrace(System.err);
! 	    }
!         }
!     }
! 
!     /**
!      * Setup native signal handlers and other housekeeping things.
!      *
!      */
!     private native void init();
! 
!     /**
!      * Block waiting for SIGCHLD.
!      *
!      */
!     private native void waitForSignal();
! 
!     /**
!      * Try to reap as many children as possible without blocking.
!      *
!      * @return true if more live children exist.
!      *
!      */
!     private native boolean reap();
! 
!     /**
!      * Send SIGCHLD to the reaper thread.
!      */
!     private native void signalReaper();
!   }
! 
!   public void destroy()
    {
!     // Synchronized on the queueLock.  This ensures that the reaper
!     // thread cannot be doing a wait() on the child.
!     // Otherwise there would be a race where the OS could
!     // create a process with the same pid between the wait()
!     // and the update of the state which would cause a kill to
!     // the wrong process.
!     synchronized (queueLock)
!       {
! 	synchronized (this)
! 	  {
! 	    // If there is no ProcessManager we cannot kill.
! 	    if (state != STATE_TERMINATED)
! 	      {
! 		if (processManager == null)
! 		  throw new InternalError();
! 		nativeDestroy();
! 	      }
! 	  }
!       }
!   }
! 
!   private native void nativeDestroy();
! 
!   public int exitValue()
!   {
!     synchronized (this)
!       {
! 	if (state != STATE_TERMINATED)
! 	  throw new IllegalThreadStateException("Process has not exited");
!       }
      return status;
    }
  
!   /**
!    * Called by native code when process exits.
!    *
!    * Already synchronized (this).  Close any streams that we can to
!    * conserve file descriptors.
!    *
!    * The outputStream can be closed as any future writes will
!    * generate an IOException due to EPIPE.
!    *
!    * The inputStream and errorStream can only be closed if the user
!    * has not obtained a reference to them AND they have no bytes
!    * available.  Since the process has terminated they will never have
!    * any more data available and can safely be replaced by
!    * EOFInputStreams.
!    */
!   void processTerminationCleanup()
    {
!     try
!       {
!         outputStream.close();
!       }
!     catch (IOException ioe)
!       {
!         // Ignore.
!       }
!     try
!       {
!         if (returnedErrorStream == null && errorStream.available() == 0)
!           {
!             errorStream.close();
!             errorStream = null;
!           }
!       }
!     catch (IOException ioe)
!       {
!         // Ignore.
!       }
!     try
!       {
!         if (returnedInputStream == null && inputStream.available() == 0)
!           {
!             inputStream.close();
!             inputStream = null;
!           }
!       }
!     catch (IOException ioe)
!       {
!         // Ignore.
!       }
    }
  
!   public synchronized InputStream getErrorStream()
    {
!     if (returnedErrorStream != null)
!       return returnedErrorStream;
! 
!     if (errorStream == null)
!       returnedErrorStream = EOFInputStream.instance;
!     else
!       returnedErrorStream = errorStream;
!             
!     return returnedErrorStream;
    }
  
!   public synchronized InputStream getInputStream()
!   {
!     if (returnedInputStream != null)
!       return returnedInputStream;
! 
!     if (inputStream == null)
!       returnedInputStream = EOFInputStream.instance;
!     else
!       returnedInputStream = inputStream;
!             
!     return returnedInputStream;
!   }
! 
!   public OutputStream getOutputStream()
    {
      return outputStream;
    }
  
!   public int waitFor() throws InterruptedException
!   {
!     synchronized (this)
!       {
! 	while (state != STATE_TERMINATED)
! 	  wait();
!       }
!     return status;
!   }
  
!   /**
!    * Start this process running.  This should only be called by the
!    * ProcessManager.
!    *
!    * @param pm The ProcessManager that made the call.
!    */
!   void spawn(ProcessManager pm)
!   {
!     synchronized (this)
!       {
! 	// Do the fork/exec magic.
! 	nativeSpawn();
! 	// There is no race with reap() in the pidToProcess map
! 	// because this is always called from the same thread
! 	// doing the reaping.
! 	pm.addProcessToMap(this);
! 	state = STATE_RUNNING;
! 	// Notify anybody waiting on state change.
! 	this.notifyAll();
!       }
!   }
! 
!   /**
!    * Do the fork and exec.
!    */
!   private native void nativeSpawn();
  
    // This file is copied to `ConcreteProcess.java' before
    // compilation.  Hence the constructor name apparently does not
    // match the file name.
!   ConcreteProcess(String[] progarray, String[] envp, File dir)
!            throws IOException
    {
!     // Check to ensure there is something to run, and avoid
!     // dereferencing null pointers in native code.
!     if (progarray[0] == null)
!       throw new NullPointerException();
! 
!     this.progarray = progarray;
!     this.envp = envp;
!     this.dir = dir;
! 
!     // Start a ProcessManager if there is not one already running.
!     synchronized (queueLock)
!       {
! 	if (processManager == null)
! 	  {
! 	    processManager = new ProcessManager();
! 	    processManager.start();
! 	    processManager.waitUntilReady();
! 	  }
! 
! 	// Queue this ConcreteProcess for starting by the ProcessManager.
! 	processManager.startExecuting(this);
!       }
! 
!     // Wait until ProcessManager has started us.
!     synchronized (this)
!       {
! 	while (state == STATE_WAITING_TO_START)
! 	  {
! 	    try
! 	      {
! 		wait();
! 	      }
! 	    catch (InterruptedException ie)
! 	      {
! 		// FIXME: What to do when interrupted while blocking in a constructor?
! 		// Ignore.
! 	      }
! 	  }
!       }
! 
!     // If there was a problem, re-throw it.
!     if (exception != null)
!       {
! 	if (exception instanceof IOException)
! 	  {
! 	    IOException ioe = new IOException(exception.toString());
! 	    ioe.initCause(exception);
! 	    throw ioe;
! 	  }
! 
! 	// Not an IOException.  Something bad happened.
! 	InternalError ie = new InternalError(exception.toString());
! 	ie.initCause(exception);
! 	throw ie;
!       }
! 
!     // If we get here, all is well, the Process has started.
    }
  
!   private String[] progarray;
!   private String[] envp;
!   private File dir;
! 
!   /** Set by the ProcessManager on problems starting. */
!   private Throwable exception;
! 
!   /** The process id.  This is cast to a pid_t on the native side. */
    private long pid;
  
!   // FIXME: Why doesn't the friend declaration in ConcreteProcess.h
!   // allow ConcreteProcess$ProcessManager native code access these
!   // when they are private?
  
!   /** Before the process is forked. */
!   static final int STATE_WAITING_TO_START = 0;
  
!   /** After the fork. */
!   static final int STATE_RUNNING = 1;
! 
!   /** After exit code has been collected. */
!   static final int STATE_TERMINATED = 2;
! 
!   /** One of STATE_WAITING_TO_START, STATE_RUNNING, STATE_TERMINATED. */
!   int state;
! 
!   /** The exit status, if the child has exited. */
!   int status;
! 
!   /** The streams. */
    private InputStream errorStream;
    private InputStream inputStream;
    private OutputStream outputStream;
+ 
+   /** InputStreams obtained by the user.  Not null indicates that the
+    *  user has obtained the stream.
+    */
+   private InputStream returnedErrorStream;
+   private InputStream returnedInputStream;
+ 
+   /**
+    * Lock Object for all processManager related locking.
+    */
+   private static Object queueLock = new Object();
+   private static ProcessManager processManager;
+ 
+   static class EOFInputStream extends InputStream
+   {
+     static EOFInputStream instance = new EOFInputStream();
+     public int read()
+     {
+       return -1;
+     }
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Process.java gcc-4.0.0/libjava/java/lang/Process.java
*** gcc-3.4.3/libjava/java/lang/Process.java	Wed Mar 19 12:15:04 2003
--- gcc-4.0.0/libjava/java/lang/Process.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Process.java - Represent spawned system process
!    Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.lang;
  
- import java.io.OutputStream;
  import java.io.InputStream;
  
  /**
   * An instance of a subclass of <code>Process</code> is created by the
--- 39,46 ----
  
  package java.lang;
  
  import java.io.InputStream;
+ import java.io.OutputStream;
  
  /**
   * An instance of a subclass of <code>Process</code> is created by the
*************** import java.io.InputStream;
*** 60,66 ****
   * 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
--- 61,67 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Runnable.java gcc-4.0.0/libjava/java/lang/Runnable.java
*** gcc-3.4.3/libjava/java/lang/Runnable.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/Runnable.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Runnable -- interface for a method tied to an Object; often for Threads
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 45,51 ****
   * override run.
   *
   * @author Paul Fisher
!  * @author Tom Tromey <tromey@cygnus.com>
   * @see Thread
   * @since 1.0
   * @status updated to 1.4
--- 45,51 ----
   * override run.
   *
   * @author Paul Fisher
!  * @author Tom Tromey (tromey@cygnus.com)
   * @see Thread
   * @since 1.0
   * @status updated to 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Runtime.java gcc-4.0.0/libjava/java/lang/Runtime.java
*** gcc-3.4.3/libjava/java/lang/Runtime.java	Mon Jul 21 01:54:05 2003
--- gcc-4.0.0/libjava/java/lang/Runtime.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* Runtime.java -- access to the VM process
!    Copyright (C) 1998, 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Runtime.java -- access to the VM process
!    Copyright (C) 1998, 2002, 2003, 2004 Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.IOException;
  import java.io.OutputStream;
  import java.util.HashSet;
  import java.util.Iterator;
--- 35,46 ----
  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.IOException;
+ import java.io.InputStream;
  import java.io.OutputStream;
  import java.util.HashSet;
  import java.util.Iterator;
*************** import java.util.StringTokenizer;
*** 51,58 ****
   * Runtime represents the Virtual Machine.
   *
   * @author John Keiser
!  * @author Eric Blake <ebb9@email.byu.edu>
!  * @status still missing 1.4 functionality
   */
  // No idea why this class isn't final, since you can't build a subclass!
  public class Runtime
--- 52,59 ----
   * 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
*************** public class Runtime
*** 79,104 ****
     * treated as read-only.
     *
     * No matter what class you start initialization with, it defers to the
!    * superclass, therefore Object.<clinit> will be the first Java code
     * executed. From there, the bootstrap sequence, up to the point that
     * native libraries are loaded (as of March 24, when I traced this
     * manually) is as follows:
     *
!    * Object.<clinit> uses a String literal, possibly triggering initialization
!    *  String.<clinit> calls WeakHashMap.<init>, triggering initialization
     *   AbstractMap, WeakHashMap, WeakHashMap$1 have no dependencies
!    *  String.<clinit> calls CaseInsensitiveComparator.<init>, triggering
     *      initialization
     *   CaseInsensitiveComparator has no dependencies
!    * Object.<clinit> calls System.loadLibrary, triggering initialization
!    *  System.<clinit> calls System.loadLibrary
     *  System.loadLibrary calls Runtime.getRuntime, triggering initialization
!    *   Runtime.<clinit> calls Properties.<init>, triggering initialization
     *    Dictionary, Hashtable, and Properties have no dependencies
!    *   Runtime.<clinit> calls insertSystemProperties; the VM must make sure
!    *      that there are not any harmful dependencies
!    *   Runtime.<clinit> calls Runtime.<init>
!    *    Runtime.<init> calls StringTokenizer.<init>, triggering initialization
     *     StringTokenizer has no dependencies
     *  System.loadLibrary calls Runtime.loadLibrary
     *   Runtime.loadLibrary should be able to load the library, although it
--- 80,106 ----
     * treated as read-only.
     *
     * No matter what class you start initialization with, it defers to the
!    * superclass, therefore Object.&lt;clinit&gt; will be the first Java code
     * executed. From there, the bootstrap sequence, up to the point that
     * native libraries are loaded (as of March 24, when I traced this
     * manually) is as follows:
     *
!    * Object.&lt;clinit&gt; uses a String literal, possibly triggering initialization
!    *  String.&lt;clinit&gt; calls WeakHashMap.&lt;init&gt;, triggering initialization
     *   AbstractMap, WeakHashMap, WeakHashMap$1 have no dependencies
!    *  String.&lt;clinit&gt; calls CaseInsensitiveComparator.&lt;init&gt;, triggering
     *      initialization
     *   CaseInsensitiveComparator has no dependencies
!    * Object.&lt;clinit&gt; calls System.loadLibrary, triggering initialization
!    *  System.&lt;clinit&gt; calls System.loadLibrary
     *  System.loadLibrary calls Runtime.getRuntime, triggering initialization
!    *   Runtime.&lt;clinit&gt; calls Properties.&lt;init&gt;, triggering initialization
     *    Dictionary, Hashtable, and Properties have no dependencies
!    *   Runtime.&lt;clinit&gt; calls VMRuntime.insertSystemProperties, triggering
!    *      initialization of VMRuntime; the VM must make sure that there are
!    *      not any harmful dependencies
!    *   Runtime.&lt;clinit&gt; calls Runtime.&lt;init&gt;
!    *    Runtime.&lt;init&gt; calls StringTokenizer.&lt;init&gt;, triggering initialization
     *     StringTokenizer has no dependencies
     *  System.loadLibrary calls Runtime.loadLibrary
     *   Runtime.loadLibrary should be able to load the library, although it
*************** public class Runtime
*** 106,113 ****
--- 108,117 ----
     *       ClassLoader first
     */
    static Properties defaultProperties = new Properties();
+ 
    static
    {
+     init();
      insertSystemProperties(defaultProperties);
    }
  
*************** public class Runtime
*** 148,154 ****
      // work.
      libpath = new String[0];
  
-     init ();
    }
  
    /**
--- 152,157 ----
*************** public class Runtime
*** 170,182 ****
     *
     * <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>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>.
     *
     * @param status the status to exit with
     * @throws SecurityException if permission is denied
--- 173,185 ----
     *
     * <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
*************** public class Runtime
*** 237,243 ****
                        }
                  try
                    {
!                     exitSequence.sleep(1); // Give other threads a chance.
                    }
                  catch (InterruptedException e)
                    {
--- 240,246 ----
                        }
                  try
                    {
!                     Thread.sleep(1); // Give other threads a chance.
                    }
                  catch (InterruptedException e)
                    {
*************** public class Runtime
*** 285,307 ****
     * <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>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>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.
     *
     * @param hook an initialized, unstarted Thread
     * @throws IllegalArgumentException if the hook is already registered or run
--- 288,310 ----
     * <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
*************** public class Runtime
*** 334,340 ****
    /**
     * 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
--- 337,343 ----
    /**
     * 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
*************** public class Runtime
*** 408,414 ****
  
    /**
     * 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
--- 411,417 ----
  
    /**
     * 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
*************** public class Runtime
*** 635,643 ****
     * <code>System.mapLibraryName(libname)</code>. There may be a security
     * check, of <code>checkLink</code>.
     *
!    * @param filename the file to load
     * @throws SecurityException if permission is denied
     * @throws UnsatisfiedLinkError if the library is not found
     * @see System#mapLibraryName(String)
     * @see ClassLoader#findLibrary(String)
     */
--- 638,648 ----
     * <code>System.mapLibraryName(libname)</code>. There may be a security
     * check, of <code>checkLink</code>.
     *
!    * @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 class Runtime
*** 704,713 ****
    native boolean loadLibraryInternal(String libname);
  
    /**
!    * A helper for the constructor which does some internal native
     * initialization.
     */
!   private native void init ();
  
    /**
     * Map a system-independent "short name" to the full file name, and append
--- 709,718 ----
    native boolean loadLibraryInternal(String libname);
  
    /**
!    * A helper for Runtime static initializer which does some internal native
     * initialization.
     */
!   private static native void init ();
  
    /**
     * Map a system-independent "short name" to the full file name, and append
*************** public class Runtime
*** 731,738 ****
     * @param dir the directory to use, may be null
     * @return the newly created process
     * @throws NullPointerException if cmd or env have null elements
     */
!   native Process execInternal(String[] cmd, String[] env, File dir);
  
    /**
     * Get the system properties. This is done here, instead of in System,
--- 736,746 ----
     * @param dir the directory to use, may be null
     * @return the newly created process
     * @throws NullPointerException if cmd or env have null elements
+    * @throws IOException if the exec fails
     */
!   native Process execInternal(String[] cmd, String[] env, File dir)
!     throws IOException;
!     
  
    /**
     * Get the system properties. This is done here, instead of in System,
diff -Nrcpad gcc-3.4.3/libjava/java/lang/RuntimeException.java gcc-4.0.0/libjava/java/lang/RuntimeException.java
*** gcc-3.4.3/libjava/java/lang/RuntimeException.java	Sun Jun 16 21:15:35 2002
--- gcc-4.0.0/libjava/java/lang/RuntimeException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* RuntimeException.java -- root of all unchecked exceptions
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 45,52 ****
   * 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
--- 45,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/RuntimePermission.java gcc-4.0.0/libjava/java/lang/RuntimePermission.java
*** gcc-3.4.3/libjava/java/lang/RuntimePermission.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/RuntimePermission.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* RuntimePermission.java -- permission for a secure runtime action
!    Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.security.BasicPermission;
*** 118,124 ****
   *       access to in the system</td>
   *   <td>rogue code can stop arbitrary threads</td></tr>
   * <tr>
!  *   <td><code>modifyThreadGroup</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>,
--- 118,124 ----
   *       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>,
*************** import java.security.BasicPermission;
*** 141,147 ****
   *   <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>
--- 141,147 ----
   *   <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>
*************** import java.security.BasicPermission;
*** 166,172 ****
   * </table>
   *
   * @author Brian Jones
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see BasicPermission
   * @see Permission
   * @see SecurityManager
--- 166,172 ----
   * </table>
   *
   * @author Brian Jones
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see BasicPermission
   * @see Permission
   * @see SecurityManager
diff -Nrcpad gcc-3.4.3/libjava/java/lang/SecurityException.java gcc-4.0.0/libjava/java/lang/SecurityException.java
*** gcc-3.4.3/libjava/java/lang/SecurityException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/SecurityException.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* SecurityException.java -- thrown to indicate a security violation
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 44,50 ****
   * deemed unsafe by the current security policies.
   *
   * @author Brian Jones
!  * @author Warren Levy <warrenl@cygnus.com>
   * @see SecurityManager
   * @status updated to 1.4
   */
--- 44,50 ----
   * deemed unsafe by the current security policies.
   *
   * @author Brian Jones
!  * @author Warren Levy (warrenl@cygnus.com)
   * @see SecurityManager
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/SecurityManager.java gcc-4.0.0/libjava/java/lang/SecurityManager.java
*** gcc-3.4.3/libjava/java/lang/SecurityManager.java	Tue Jan  6 08:34:58 2004
--- gcc-4.0.0/libjava/java/lang/SecurityManager.java	Thu Feb 17 07:48:33 2005
***************
*** 1,5 ****
  /* SecurityManager.java -- security checks for privileged actions
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.util.PropertyPermission;
*** 86,92 ****
   * // 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
--- 86,92 ----
   * // 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
*************** import java.util.PropertyPermission;
*** 101,107 ****
   * subclassing this class.
   *
   * @author John Keiser
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see ClassLoader
   * @see SecurityException
   * @see #checkTopLevelWindow(Object)
--- 101,107 ----
   * subclassing this class.
   *
   * @author John Keiser
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see ClassLoader
   * @see SecurityException
   * @see #checkTopLevelWindow(Object)
*************** public class SecurityManager
*** 174,186 ****
     * 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:<br><nl>
     * <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>
!    * </nl>
     * 
     * @return the most recent non-system ClassLoader on the execution stack
     * @deprecated use {@link #checkPermission(Permission)} instead
--- 174,188 ----
     * 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
*************** public class SecurityManager
*** 194,206 ****
     * 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:<br><nl>
     * <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>
!    * </nl>
     * 
     * @return the most recent non-system Class on the execution stack
     * @deprecated use {@link #checkPermission(Permission)} instead
--- 196,210 ----
     * 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
*************** public class SecurityManager
*** 231,243 ****
     * 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:<br><nl>
     * <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>
!    * </nl>
     * 
     * @return the index of the most recent non-system Class on the stack
     * @deprecated use {@link #checkPermission(Permission)} instead
--- 235,249 ----
     * 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
*************** public class SecurityManager
*** 318,324 ****
    public void checkPermission(Permission perm)
    {
      // XXX Should be: AccessController.checkPermission(perm);
!     throw new SecurityException("Operation not allowed");
    }
  
    /**
--- 324,330 ----
    public void checkPermission(Permission perm)
    {
      // XXX Should be: AccessController.checkPermission(perm);
!     //.throw new SecurityException("Operation not allowed");
    }
  
    /**
*************** public class SecurityManager
*** 365,372 ****
     * 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") 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
--- 371,378 ----
     * 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
*************** public class SecurityManager
*** 375,383 ****
     * <code>RuntimePermission("modifyThread")</code>, return silently, so that
     * core classes (the Classpath library!) can modify any thread.
     *
!    * @param t the other Thread to check
     * @throws SecurityException if permission is denied
!    * @throws NullPointerException if t is null
     * @see Thread#stop()
     * @see Thread#suspend()
     * @see Thread#resume()
--- 381,389 ----
     * <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()
*************** public class SecurityManager
*** 385,393 ****
     * @see Thread#setName(String)
     * @see Thread#setDaemon(boolean)
     */
!   public void checkAccess(Thread t)
    {
!     if (t.group != null && t.group.getParent() != null)
        checkPermission(new RuntimePermission("modifyThread"));
    }
  
--- 391,400 ----
     * @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"));
    }
  
*************** public class SecurityManager
*** 397,404 ****
     * 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") 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
--- 404,411 ----
     * 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
*************** public class SecurityManager
*** 546,552 ****
      //   throw new SecurityException("Missing context");
      // AccessControlContext ac = (AccessControlContext) context;
      // ac.checkPermission(new FilePermission(filename, "read"));
!     throw new SecurityException("Cannot read files via file names.");
    }
  
    /**
--- 553,559 ----
      //   throw new SecurityException("Missing context");
      // AccessControlContext ac = (AccessControlContext) context;
      // ac.checkPermission(new FilePermission(filename, "read"));
!     // throw new SecurityException("Cannot read files via file names.");
    }
  
    /**
*************** public class SecurityManager
*** 650,662 ****
     * @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 securityContext)
    {
      // XXX Should be:
      // if (! (context instanceof AccessControlContext))
--- 657,671 ----
     * @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)
    {
      // XXX Should be:
      // if (! (context instanceof AccessControlContext))
*************** public class SecurityManager
*** 668,674 ****
      //   // Use the toString() hack to do the null check.
      //   ac.checkPermission(new SocketPermission(host.toString + ":" +port,
      //                                           "connect"));
!     throw new SecurityException("Cannot make network connections.");
    }
  
    /**
--- 677,683 ----
      //   // Use the toString() hack to do the null check.
      //   ac.checkPermission(new SocketPermission(host.toString + ":" +port,
      //                                           "connect"));
!     // throw new SecurityException("Cannot make network connections.");
    }
  
    /**
*************** public class SecurityManager
*** 775,783 ****
--- 784,795 ----
     * 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)
*************** public class SecurityManager
*** 861,868 ****
     */
    public void checkAwtEventQueueAccess()
    {
!     // Should be: checkPermission(new AWTPermission("accessEventQueue"));
!     throw new SecurityException("Cannot access the AWT event queue.");
    }
  
    /**
--- 873,879 ----
     */
    public void checkAwtEventQueueAccess()
    {
!     checkPermission(new AWTPermission("accessEventQueue"));
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Short.java gcc-4.0.0/libjava/java/lang/Short.java
*** gcc-3.4.3/libjava/java/lang/Short.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/Short.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* Short.java -- object wrapper for short
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Short.java -- object wrapper for short
!    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.lang;
*** 47,53 ****
   *
   * @author Paul Fisher
   * @author John Keiser
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.1
   * @status updated to 1.4
   */
--- 47,53 ----
   *
   * @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 
*** 60,72 ****
  
    /**
     * 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;
  
--- 60,72 ----
  
    /**
     * 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;
  
*************** public final class Short extends Number 
*** 144,150 ****
     *
     * @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>
     */
--- 144,150 ----
     *
     * @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>
     */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/StackOverflowError.java gcc-4.0.0/libjava/java/lang/StackOverflowError.java
*** gcc-3.4.3/libjava/java/lang/StackOverflowError.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/StackOverflowError.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* StackOverflowError.java -- thrown when the stack depth is exceeded
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 43,49 ****
   * 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
--- 43,49 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/StackTraceElement.java gcc-4.0.0/libjava/java/lang/StackTraceElement.java
*** gcc-3.4.3/libjava/java/lang/StackTraceElement.java	Fri Jul 12 12:52:44 2002
--- gcc-4.0.0/libjava/java/lang/StackTraceElement.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* StackTraceElement.java -- One function call or call stack element
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 46,57 ****
   * 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 class StackTraceElement implements Serializable
  {
    /**
     * Compatible with JDK 1.4+.
--- 46,57 ----
   * 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+.
*************** public class StackTraceElement implement
*** 77,83 ****
     *
     * @serial the enclosing class, if known
     */
!   private final String className;
  
    /**
     * The method name in the class, null if unknown.
--- 77,83 ----
     *
     * @serial the enclosing class, if known
     */
!   private final String declaringClass;
  
    /**
     * The method name in the class, null if unknown.
*************** public class StackTraceElement implement
*** 106,112 ****
    {
      this.fileName = fileName;
      this.lineNumber = lineNumber;
!     this.className = className;
      this.methodName = methodName;
      this.isNative = isNative;
    }
--- 106,112 ----
    {
      this.fileName = fileName;
      this.lineNumber = lineNumber;
!     this.declaringClass = className;
      this.methodName = methodName;
      this.isNative = isNative;
    }
*************** public class StackTraceElement implement
*** 142,148 ****
     */
    public String getClassName()
    {
!     return className;
    }
  
    /**
--- 142,148 ----
     */
    public String getClassName()
    {
!     return declaringClass;
    }
  
    /**
*************** public class StackTraceElement implement
*** 183,191 ****
    public String toString()
    {
      StringBuffer sb = new StringBuffer();
!     if (className != null)
        {
!         sb.append(className);
          if (methodName != null)
            sb.append('.');
        }
--- 183,191 ----
    public String toString()
    {
      StringBuffer sb = new StringBuffer();
!     if (declaringClass != null)
        {
!         sb.append(declaringClass);
          if (methodName != null)
            sb.append('.');
        }
*************** public class StackTraceElement implement
*** 217,223 ****
      StackTraceElement e = (StackTraceElement) o;
      return equals(fileName, e.fileName)
        && lineNumber == e.lineNumber
!       && equals(className, e.className)
        && equals(methodName, e.methodName);
    }
  
--- 217,223 ----
      StackTraceElement e = (StackTraceElement) o;
      return equals(fileName, e.fileName)
        && lineNumber == e.lineNumber
!       && equals(declaringClass, e.declaringClass)
        && equals(methodName, e.methodName);
    }
  
*************** public class StackTraceElement implement
*** 230,236 ****
     */
    public int hashCode()
    {
!     return hashCode(fileName) ^ lineNumber ^ hashCode(className)
        ^ hashCode(methodName);
    }
  
--- 230,236 ----
     */
    public int hashCode()
    {
!     return hashCode(fileName) ^ lineNumber ^ hashCode(declaringClass)
        ^ hashCode(methodName);
    }
  
*************** public class StackTraceElement implement
*** 241,247 ****
     * @param o2 the second object
     * @return o1 == null ? o2 == null : o1.equals(o2)
     */
!   private static final boolean equals(Object o1, Object o2)
    {
      return o1 == null ? o2 == null : o1.equals(o2);
    }
--- 241,247 ----
     * @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);
    }
*************** public class StackTraceElement implement
*** 252,258 ****
     * @param o the object to hash
     * @return o1 == null ? 0 : o1.hashCode()
     */
!   private static final int hashCode(Object o)
    {
      return o == null ? 0 : o.hashCode();
    }
--- 252,258 ----
     * @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-3.4.3/libjava/java/lang/StrictMath.java gcc-4.0.0/libjava/java/lang/StrictMath.java
*** gcc-3.4.3/libjava/java/lang/StrictMath.java	Wed Oct  8 19:00:21 2003
--- gcc-4.0.0/libjava/java/lang/StrictMath.java	Mon Oct 18 10:41:56 2004
*************** exception statement from your version. *
*** 51,59 ****
  
  package java.lang;
  
- import java.util.Random;
  import gnu.classpath.Configuration;
  
  /**
   * Helper class containing useful mathematical functions and constants.
   * This class mirrors {@link Math}, but is 100% portable, because it uses
--- 51,60 ----
  
  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
*************** import gnu.classpath.Configuration;
*** 69,75 ****
   * 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
--- 70,76 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/String.java gcc-4.0.0/libjava/java/lang/String.java
*** gcc-3.4.3/libjava/java/lang/String.java	Mon Jul 28 16:12:00 2003
--- gcc-4.0.0/libjava/java/lang/String.java	Tue Nov 23 21:33:01 2004
***************
*** 1,5 ****
  /* String.java -- immutable character sequences; the object of string literals
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,5 ----
  /* String.java -- immutable character sequences; the object of string literals
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 39,46 ****
  
  package java.lang;
  
- import java.io.UnsupportedEncodingException;
  import java.io.Serializable;
  import java.lang.Comparable;
  import java.util.Comparator;
  import java.util.Locale;
--- 39,46 ----
  
  package java.lang;
  
  import java.io.Serializable;
+ import java.io.UnsupportedEncodingException;
  import java.lang.Comparable;
  import java.util.Comparator;
  import java.util.Locale;
*************** import java.util.regex.PatternSyntaxExce
*** 68,75 ****
   * 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
   */
--- 68,75 ----
   * 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
   */
*************** public final class String implements Ser
*** 207,213 ****
     * @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 > data.length)
     *         (while unspecified, this is a StringIndexOutOfBoundsException)
     */
    public String(char[] data, int offset, int count)
--- 207,213 ----
     * @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 &gt; data.length)
     *         (while unspecified, this is a StringIndexOutOfBoundsException)
     */
    public String(char[] data, int offset, int count)
*************** public final class String implements Ser
*** 221,227 ****
     * corresponding byte b, is created in the new String as if by performing:
     *
     * <pre>
!    * c = (char) (((hibyte & 0xff) << 8) | (b & 0xff))
     * </pre>
     *
     * @param ascii array of integer values
--- 221,227 ----
     * 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
*************** public final class String implements Ser
*** 230,236 ****
     * @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 > ascii.length)
     *         (while unspecified, this is a StringIndexOutOfBoundsException)
     * @see #String(byte[])
     * @see #String(byte[], String)
--- 230,236 ----
     * @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 &gt; ascii.length)
     *         (while unspecified, this is a StringIndexOutOfBoundsException)
     * @see #String(byte[])
     * @see #String(byte[], String)
*************** public final class String implements Ser
*** 250,256 ****
     * as if by performing:
     *
     * <pre>
!    * c = (char) (((hibyte & 0xff) << 8) | (b & 0xff))
     * </pre>
     *
     * @param ascii array of integer values
--- 250,256 ----
     * as if by performing:
     *
     * <pre>
!    * c = (char) (((hibyte &amp; 0xff) &lt;&lt; 8) | (b &amp; 0xff))
     * </pre>
     *
     * @param ascii array of integer values
*************** public final class String implements Ser
*** 613,619 ****
     * character of the string. This is unsatisfactory for locale-based
     * comparison, in which case you should use {@link java.text.Collator}.
     *
!    * @param s the string to compare against
     * @return the comparison
     * @see Collator#compare(String, String)
     * @since 1.2
--- 613,619 ----
     * 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 final class String implements Ser
*** 632,638 ****
     *
     * @param toffset index to start comparison at for this String
     * @param other String to compare region to this String
!    * @param oofset 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
--- 632,638 ----
     *
     * @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 final class String implements Ser
*** 678,684 ****
     * Predicate which determines if this String starts with a given prefix.
     * If the prefix is an empty String, true is returned.
     *
!    * @param prefex String to compare
     * @return true if this String starts with the prefix
     * @throws NullPointerException if prefix is null
     * @see #startsWith(String, int)
--- 678,684 ----
     * 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 final class String implements Ser
*** 840,865 ****
     * @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 > end (while unspecified, this is a
     *         StringIndexOutOfBoundsException)
     */
!   public native String substring(int beginIndex, int endIndex);
  
    /**
     * 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(beginIndex, endIndex)</code>.
     *
!    * @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 > end
     * @since 1.4
     */
!   public CharSequence subSequence(int beginIndex, int endIndex)
    {
!     return substring(beginIndex, endIndex);
    }
  
    /**
--- 840,865 ----
     * @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 (while unspecified, this is a
     *         StringIndexOutOfBoundsException)
     */
!   public native String substring(int begin, int end);
  
    /**
     * 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);
    }
  
    /**
*************** public final class String implements Ser
*** 1129,1135 ****
     * @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 > data.length)
     *         (while unspecified, this is a StringIndexOutOfBoundsException)
     * @see #String(char[], int, int)
     */
--- 1129,1135 ----
     * @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 &gt; data.length)
     *         (while unspecified, this is a StringIndexOutOfBoundsException)
     * @see #String(char[], int, int)
     */
*************** public final class String implements Ser
*** 1146,1152 ****
     * @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 > data.length)
     *         (while unspecified, this is a StringIndexOutOfBoundsException)
     * @see #String(char[], int, int)
     */
--- 1146,1152 ----
     * @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 &gt; data.length)
     *         (while unspecified, this is a StringIndexOutOfBoundsException)
     * @see #String(char[], int, int)
     */
*************** public final class String implements Ser
*** 1254,1258 ****
    private native void init(byte[] chars, int offset, int count, String enc)
      throws UnsupportedEncodingException;
    private native void init(gnu.gcj.runtime.StringBuffer buffer);
-   private static native void rehash();
  }
--- 1254,1257 ----
diff -Nrcpad gcc-3.4.3/libjava/java/lang/StringBuffer.java gcc-4.0.0/libjava/java/lang/StringBuffer.java
*** gcc-3.4.3/libjava/java/lang/StringBuffer.java	Thu Oct 16 21:35:41 2003
--- gcc-4.0.0/libjava/java/lang/StringBuffer.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* StringBuffer.java -- Growable strings
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 66,72 ****
   * @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
--- 67,73 ----
   * @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 implemen
*** 108,114 ****
    /**
     * The default capacity of a buffer.
     */
!   private final static int DEFAULT_CAPACITY = 16;
  
    /**
     * Create a new StringBuffer with default capacity 16.
--- 109,115 ----
    /**
     * The default capacity of a buffer.
     */
!   private static final int DEFAULT_CAPACITY = 16;
  
    /**
     * Create a new StringBuffer with default capacity 16.
*************** public final class StringBuffer implemen
*** 205,214 ****
      if (newLength < 0)
        throw new StringIndexOutOfBoundsException(newLength);
  
      ensureCapacity_unsynchronized(newLength);
!     while (count < newLength)
!       value[count++] = '\0';
!     count = newLength;
    }
  
    /**
--- 206,231 ----
      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';
!       }
    }
  
    /**
*************** public final class StringBuffer implemen
*** 379,385 ****
    /**
     * Append the <code>char</code> to this <code>StringBuffer</code>.
     *
!    * @param c the <code>char</code> to append
     * @return this <code>StringBuffer</code>
     */
    public synchronized StringBuffer append(char ch)
--- 396,402 ----
    /**
     * 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)
diff -Nrcpad gcc-3.4.3/libjava/java/lang/StringIndexOutOfBoundsException.java gcc-4.0.0/libjava/java/lang/StringIndexOutOfBoundsException.java
*** gcc-3.4.3/libjava/java/lang/StringIndexOutOfBoundsException.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/StringIndexOutOfBoundsException.java	Thu Feb 17 07:48:34 2005
***************
*** 1,6 ****
  /* StringIndexOutOfBoundsException.java -- thrown to indicate attempt to
     exceed string bounds
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 46,52 ****
   * 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
--- 46,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/System.java gcc-4.0.0/libjava/java/lang/System.java
*** gcc-3.4.3/libjava/java/lang/System.java	Wed Sep 24 01:56:56 2003
--- gcc-4.0.0/libjava/java/lang/System.java	Mon Oct 18 11:09:11 2004
***************
*** 1,5 ****
  /* System.java -- useful methods to interface with the system
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* System.java -- useful methods to interface with the system
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 39,46 ----
  
  package java.lang;
  
+ import gnu.classpath.Configuration;
+ 
  import java.io.BufferedInputStream;
  import java.io.BufferedOutputStream;
  import java.io.FileDescriptor;
*************** import java.io.InputStream;
*** 47,60 ****
  import java.io.PrintStream;
  import java.util.Properties;
  import java.util.PropertyPermission;
- import gnu.classpath.Configuration;
  
  /**
   * 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
   */
--- 50,62 ----
  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
*** 97,102 ****
--- 99,118 ----
  	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);
+       }
+ 
      defaultProperties.put("gnu.cpu.endian",
  			  isWordsBigEndian() ? "big" : "little");
  
*************** public final class System
*** 117,123 ****
     */
    // Note that we use clone here and not new.  Some programs assume
    // that the system properties do not have a parent.
!   private static Properties properties
      = (Properties) Runtime.defaultProperties.clone();
  
    /**
--- 133,139 ----
     */
    // Note that we use clone here and not new.  Some programs assume
    // that the system properties do not have a parent.
!   static Properties properties
      = (Properties) Runtime.defaultProperties.clone();
  
    /**
*************** public final class System
*** 147,153 ****
    /**
     * 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 stderr and C++ cerr variables, which
     * typically output error messages to the screen, but may be used to pipe
--- 163,169 ----
    /**
     * 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
*************** public final class System
*** 310,360 ****
     *
     * <p>The required properties include:
     * <dl>
!    * <dt>java.version         <dd>Java version number
!    * <dt>java.vendor          <dd>Java vendor specific string
!    * <dt>java.vendor.url      <dd>Java vendor URL
!    * <dt>java.home            <dd>Java installation directory
!    * <dt>java.vm.specification.version <dd>VM Spec version
!    * <dt>java.vm.specification.vendor  <dd>VM Spec vendor
!    * <dt>java.vm.specification.name    <dd>VM Spec name
!    * <dt>java.vm.version      <dd>VM implementation version
!    * <dt>java.vm.vendor       <dd>VM implementation vendor
!    * <dt>java.vm.name         <dd>VM implementation name
!    * <dt>java.specification.version    <dd>Java Runtime Environment version
!    * <dt>java.specification.vendor     <dd>Java Runtime Environment vendor
!    * <dt>java.specification.name       <dd>Java Runtime Environment name
!    * <dt>java.class.version   <dd>Java class version number
!    * <dt>java.class.path      <dd>Java classpath
!    * <dt>java.library.path    <dd>Path for finding Java libraries
!    * <dt>java.io.tmpdir       <dd>Default temp file path
!    * <dt>java.compiler        <dd>Name of JIT to use
!    * <dt>java.ext.dirs        <dd>Java extension path
!    * <dt>os.name              <dd>Operating System Name
!    * <dt>os.arch              <dd>Operating System Architecture
!    * <dt>os.version           <dd>Operating System Version
!    * <dt>file.separator       <dd>File separator ("/" on Unix)
!    * <dt>path.separator       <dd>Path separator (":" on Unix)
!    * <dt>line.separator       <dd>Line separator ("\n" on Unix)
!    * <dt>user.name            <dd>User account name
!    * <dt>user.home            <dd>User home directory
!    * <dt>user.dir             <dd>User's current working directory
     * </dl>
     *
     * In addition, gnu defines several other properties, where ? stands for
     * each character in '0' through '9':
     * <dl>
!    * <dl> gnu.classpath.vm.shortname <dd> Succinct version of the VM name;
!    *      used for finding property files in file system
!    * <dl> gnu.classpath.home.url <dd> Base URL; used for finding
!    *      property files in file system
!    * <dt> gnu.cpu.endian      <dd>big or little
!    * <dt> gnu.java.io.encoding_scheme_alias.ISO-8859-?   <dd>8859_?
!    * <dt> gnu.java.io.encoding_scheme_alias.iso-8859-?   <dd>8859_?
!    * <dt> gnu.java.io.encoding_scheme_alias.iso8859_?    <dd>8859_?
!    * <dt> gnu.java.io.encoding_scheme_alias.iso-latin-_? <dd>8859_?
!    * <dt> gnu.java.io.encoding_scheme_alias.latin?       <dd>8859_?
!    * <dt> gnu.java.io.encoding_scheme_alias.UTF-8        <dd>UTF8
!    * <dt> gnu.java.io.encoding_scheme_alias.utf-8        <dd>UTF8
     * </dl>
     *
     * @return the system properties, will never be null
--- 326,378 ----
     *
     * <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.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>
!    * <dt>gnu.java.io.encoding_scheme_alias.utf-8</dt>        <dd>UTF8</dd>
     * </dl>
     *
     * @return the system properties, will never be null
*************** public final class System
*** 451,468 ****
    }
  
    /**
!    * This used to get an environment variable, but following Sun's lead,
!    * it now throws an Error. Use <code>getProperty</code> instead.
     *
     * @param name the name of the environment variable
!    * @return this does not return
!    * @throws Error this is not supported
!    * @deprecated use {@link #getProperty(String)}; getenv is not supported
     */
    public static String getenv(String name)
    {
!     throw new Error("getenv no longer supported, use properties instead: "
!                     + name);
    }
  
    /**
--- 469,490 ----
    }
  
    /**
!    * Gets the value of an environment variable.
     *
     * @param name the name of the environment variable
!    * @return the string value of the variable
!    * @throws NullPointerException
!    * @throws SecurityException if permission is denied
!    * @since 1.5
     */
    public static String getenv(String name)
    {
!     if (name == null)
!       throw new NullPointerException();
!     SecurityManager sm = Runtime.securityManager; // Be thread-safe.
!     if (sm != null)
!       sm.checkPermission(new RuntimePermission("getenv."+name));
!     return getenv0(name);
    }
  
    /**
*************** public final class System
*** 599,602 ****
--- 621,631 ----
     * @see #setErr(PrintStream)
     */
    private static native void setErr0(PrintStream err);
+ 
+   /**
+    * Gets the value of an environment variable.
+    *
+    * @see #getenv(String)
+    */
+   static native String getenv0(String name);
  } // class System
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Thread.java gcc-4.0.0/libjava/java/lang/Thread.java
*** gcc-3.4.3/libjava/java/lang/Thread.java	Tue Oct 21 04:46:19 2003
--- gcc-4.0.0/libjava/java/lang/Thread.java	Thu Jan 13 20:26:38 2005
***************
*** 1,21 ****
! // Thread.java - Thread class.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation
  
!    This file is part of libgcj.
  
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
  
  package java.lang;
  
  import gnu.gcj.RawData;
  
  /* 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.
   */
--- 1,51 ----
! /* Thread -- an independent thread of executable code
!    Copyright (C) 1998, 1999, 2000, 2001, 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., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
! 
! Linking this library statically or dynamically with other modules is
! making a combined work based on this library.  Thus, the terms and
! conditions of the GNU General Public License cover the whole
! combination.
! 
! As a special exception, the copyright holders of this library give you
! permission to link this library with independent modules to produce an
! executable, regardless of the license terms of these independent
! modules, and to copy and distribute the resulting executable under
! terms of your choice, provided that you also meet, for each linked
! independent module, the terms and conditions of the license of that
! module.  An independent module is a module which is not derived from
! or based on this library.  If you modify this library, you may extend
! this exception to your version of the library, but 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.gcj.RawData;
+ import gnu.gcj.RawDataManaged;
  
  /* 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.
   */
*************** import gnu.gcj.RawData;
*** 50,56 ****
   *
   * @author Tom Tromey
   * @author John Keiser
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Runnable
   * @see Runtime#exit(int)
   * @see #run()
--- 80,86 ----
   *
   * @author Tom Tromey
   * @author John Keiser
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Runnable
   * @see Runtime#exit(int)
   * @see #run()
*************** import gnu.gcj.RawData;
*** 61,74 ****
   */
  public class Thread implements Runnable
  {
-   /** The maximum priority for a Thread. */
-   public final static int MAX_PRIORITY = 10;
- 
    /** The minimum priority for a Thread. */
!   public final static int MIN_PRIORITY = 1;
  
    /** The priority a Thread gets by default. */
!   public final static int NORM_PRIORITY = 5;
  
    /**
     * Get the number of active threads in the current Thread's ThreadGroup.
--- 91,375 ----
   */
  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 group this thread belongs to. This is set to null by
!    * ThreadGroup.removeThread when the thread dies.
!    */
!   ThreadGroup group;
! 
!   /** The object to run(), null if this is the target. */
!   private Runnable runnable;
! 
!   /** The thread name, non-null. */
!   String name;
! 
!   /** Whether the thread is a daemon. */
!   private boolean daemon;
! 
!   /** The thread priority, 1 to 10. */
!   private int priority;
! 
!   boolean interrupt_flag;
!   private boolean alive_flag;
!   private boolean startable_flag;
! 
!   /** The context classloader for this Thread. */
!   private ClassLoader contextClassLoader;
! 
!   // This describes the top-most interpreter frame for this thread.
!   RawData interp_frame;
! 
!   // Our native data - points to an instance of struct natThread.
!   private RawDataManaged data;
! 
!   /**
!    * 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, null, gen_name());
!   }
! 
!   /**
!    * 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, gen_name());
!   }
! 
!   /**
!    * 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);
!   }
! 
!   /**
!    * 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, gen_name());
!   }
! 
!   /**
!    * 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);
!   }
! 
!   /**
!    * 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);
!   }
! 
!   /**
!    * 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(currentThread(), group, target, name);
!   }
! 
!   /**
!    * 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)
!   {
!     // Just ignore stackSize for now.
!     this(currentThread(), group, target, name);
!   }
! 
!   private Thread (Thread current, ThreadGroup g, Runnable r, String n)
!   {
!     // Make sure the current thread may create a new thread.
!     checkAccess();
!     
!     // The Class Libraries book says ``threadName cannot be null''.  I
!     // take this to mean NullPointerException.
!     if (n == null)
!       throw new NullPointerException ();
!       
!     if (g == null)
!       {
! 	// If CURRENT is null, then we are bootstrapping the first thread. 
! 	// Use ThreadGroup.root, the main threadgroup.
! 	if (current == null)
! 	  group = ThreadGroup.root;
! 	else
! 	  group = current.getThreadGroup();
!       }
!     else
!       group = g;
!       
!     data = null;
!     interrupt_flag = false;
!     alive_flag = false;
!     startable_flag = true;
! 
!     if (current != null)
!       {
! 	group.checkAccess();
! 
! 	daemon = current.isDaemon();
!         int gmax = group.getMaxPriority();
! 	int pri = current.getPriority();
! 	priority = (gmax < pri ? gmax : pri);
! 	contextClassLoader = current.contextClassLoader;
! 	InheritableThreadLocal.newChildThread(this);
!       }
!     else
!       {
! 	daemon = false;
! 	priority = NORM_PRIORITY;
!       }
! 
!     name = n;
!     group.addThread(this);
!     runnable = r;
! 
!     initialize_native ();
!   }
  
    /**
     * Get the number of active threads in the current Thread's ThreadGroup.
*************** public class Thread implements Runnable
*** 78,86 ****
     * @return the number of active threads in the current ThreadGroup
     * @see ThreadGroup#activeCount()
     */
!   public static int activeCount ()
    {
!     return currentThread().getThreadGroup().activeCount();
    }
  
    /**
--- 379,387 ----
     * @return the number of active threads in the current ThreadGroup
     * @see ThreadGroup#activeCount()
     */
!   public static int activeCount()
    {
!     return currentThread().group.activeCount();
    }
  
    /**
*************** public class Thread implements Runnable
*** 90,100 ****
     * @throws SecurityException if the current Thread cannot modify this Thread
     * @see SecurityManager#checkAccess(Thread)
     */
!   public final void checkAccess ()
    {
!     SecurityManager s = System.getSecurityManager();
!     if (s != null)
!       s.checkAccess(this);
    }
  
    /**
--- 391,401 ----
     * @throws SecurityException if the current Thread cannot modify this Thread
     * @see SecurityManager#checkAccess(Thread)
     */
!   public final void checkAccess()
    {
!     SecurityManager sm = System.getSecurityManager();
!     if (sm != null)
!       sm.checkAccess(this);
    }
  
    /**
*************** public class Thread implements Runnable
*** 105,124 ****
     * @throws IllegalThreadStateException if this Thread is not suspended
     * @deprecated pointless, since suspend is deprecated
     */
!   public native int countStackFrames ();
  
    /**
     * Get the currently executing Thread.
     *
     * @return the currently executing Thread
     */
!   public static native Thread currentThread ();
  
    /**
     * Originally intended to destroy this thread, this method was never
     * implemented by Sun, and is hence a no-op.
     */
!   public native void destroy ();
    
    /**
     * Print a stack trace of the current thread to stderr using the same
--- 406,428 ----
     * @throws IllegalThreadStateException if this Thread is not suspended
     * @deprecated pointless, since suspend is deprecated
     */
!   public native int countStackFrames();
  
    /**
     * Get the currently executing Thread.
     *
     * @return the currently executing Thread
     */
!   public static native Thread 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
*************** public class Thread implements Runnable
*** 126,134 ****
     *
     * @see Throwable#printStackTrace()
     */
!   public static void dumpStack ()
    {
!     (new Exception ("Stack trace")).printStackTrace ();
    }
  
    /**
--- 430,438 ----
     *
     * @see Throwable#printStackTrace()
     */
!   public static void dumpStack()
    {
!     (new Exception("Stack trace")).printStackTrace();
    }
  
    /**
*************** public class Thread implements Runnable
*** 145,153 ****
     * @see #activeCount()
     * @see SecurityManager#checkAccess(ThreadGroup)
     */
!   public static int enumerate (Thread[] threads)
    {
!     return currentThread().group.enumerate(threads);
    }
    
    /**
--- 449,457 ----
     * @see #activeCount()
     * @see SecurityManager#checkAccess(ThreadGroup)
     */
!   public static int enumerate(Thread[] array)
    {
!     return currentThread().group.enumerate(array);
    }
    
    /**
*************** public class Thread implements Runnable
*** 155,161 ****
     *
     * @return this Thread's name
     */
!   public final String getName ()
    {
      return name;
    }
--- 459,465 ----
     *
     * @return this Thread's name
     */
!   public final String getName()
    {
      return name;
    }
*************** public class Thread implements Runnable
*** 165,171 ****
     *
     * @return the Thread's priority
     */
!   public final int getPriority ()
    {
      return priority;
    }
--- 469,475 ----
     *
     * @return the Thread's priority
     */
!   public final int getPriority()
    {
      return priority;
    }
*************** public class Thread implements Runnable
*** 176,194 ****
     *
     * @return this Thread's ThreadGroup
     */
!   public final ThreadGroup getThreadGroup ()
    {
      return group;
    }
  
    /**
!    * Return true if this Thread holds the object's lock, false otherwise.
     *
     * @param obj the object to test lock ownership on.
!    * @throws NullPointerException if obj is null.
     * @since 1.4
     */
!   public static native boolean holdsLock (Object obj);
  
    /**
     * Interrupt this Thread. First, there is a security check,
--- 480,500 ----
     *
     * @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 native boolean holdsLock(Object obj);
  
    /**
     * Interrupt this Thread. First, there is a security check,
*************** public class Thread implements Runnable
*** 212,218 ****
     *
     * @throws SecurityException if you cannot modify this Thread
     */
!   public native void interrupt ();
  
    /**
     * Determine whether the current Thread has been interrupted, and clear
--- 518,524 ----
     *
     * @throws SecurityException if you cannot modify this Thread
     */
!   public native void interrupt();
  
    /**
     * Determine whether the current Thread has been interrupted, and clear
*************** public class Thread implements Runnable
*** 221,239 ****
     * @return whether the current Thread has been interrupted
     * @see #isInterrupted()
     */
!   public static boolean interrupted ()
    {
!     return currentThread().isInterrupted (true);
    }
  
    /**
     * Determine whether the given Thread has been interrupted, but leave
     * the <i>interrupted status</i> alone in the process.
     *
!    * @return whether the current Thread has been interrupted
     * @see #interrupted()
     */
!   public boolean isInterrupted ()
    {
      return interrupt_flag;
    }
--- 527,545 ----
     * @return whether the current Thread has been interrupted
     * @see #isInterrupted()
     */
!   public static boolean interrupted()
    {
!     return currentThread().isInterrupted(true);
    }
  
    /**
     * 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()
    {
      return interrupt_flag;
    }
*************** public class Thread implements Runnable
*** 244,250 ****
     *
     * @return whether this Thread is alive
     */
!   public final boolean isAlive ()
    {
      return alive_flag;
    }
--- 550,556 ----
     *
     * @return whether this Thread is alive
     */
!   public final boolean isAlive()
    {
      return alive_flag;
    }
*************** public class Thread implements Runnable
*** 255,263 ****
     * @return whether this is a daemon Thread or not
     * @see #setDaemon(boolean)
     */
!   public final boolean isDaemon ()
    {
!     return daemon_flag;
    }
  
    /**
--- 561,569 ----
     * @return whether this is a daemon Thread or not
     * @see #setDaemon(boolean)
     */
!   public final boolean isDaemon()
    {
!     return daemon;
    }
  
    /**
*************** public class Thread implements Runnable
*** 266,274 ****
     * @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);
    }
  
    /**
--- 572,580 ----
     * @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);
    }
  
    /**
*************** public class Thread implements Runnable
*** 278,286 ****
     * @throws InterruptedException if the Thread is interrupted; it's
     *         <i>interrupted status</i> will be cleared
     */
!   public final void join (long timeout) throws InterruptedException
    {
!     join (timeout, 0);
    }
  
    /**
--- 584,592 ----
     * @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);
    }
  
    /**
*************** public class Thread implements Runnable
*** 299,316 ****
     * @throws IllegalArgumentException if ns is invalid
     * @XXX A ThreadListener would be nice, to make this efficient.
     */
!   public final native void join (long timeout, int nanos)
      throws InterruptedException;
  
    /**
     * Resume a suspended thread.
     *
!    * @see #resume()
     * @deprecated pointless, since suspend is deprecated
     */
!   public final native void resume ();
  
!   private final native void finish_ ();
  
    /**
     * Determine whether the given Thread has been interrupted, but leave
--- 605,624 ----
     * @throws IllegalArgumentException if ns is invalid
     * @XXX A ThreadListener would be nice, to make this efficient.
     */
!   public final native void join(long ms, int ns)
      throws InterruptedException;
  
    /**
     * Resume a suspended thread.
     *
!    * @throws SecurityException if you cannot resume the Thread
!    * @see #checkAccess()
!    * @see #suspend()
     * @deprecated pointless, since suspend is deprecated
     */
!   public final native void resume();
  
!   private final native void finish_();
  
    /**
     * Determine whether the given Thread has been interrupted, but leave
*************** public class Thread implements Runnable
*** 319,325 ****
     * @return whether the current Thread has been interrupted
     * @see #interrupted()
     */
!   private boolean isInterrupted (boolean clear_flag)
    {
      boolean r = interrupt_flag;
      if (clear_flag && r)
--- 627,633 ----
     * @return whether the current Thread has been interrupted
     * @see #interrupted()
     */
!   private boolean isInterrupted(boolean clear_flag)
    {
      boolean r = interrupt_flag;
      if (clear_flag && r)
*************** public class Thread implements Runnable
*** 339,345 ****
     * @see #start()
     * @see #Thread(ThreadGroup, Runnable, String)
     */
!   public void run ()
    {
      if (runnable != null)
        runnable.run();
--- 647,653 ----
     * @see #start()
     * @see #Thread(ThreadGroup, Runnable, String)
     */
!   public void run()
    {
      if (runnable != null)
        runnable.run();
*************** public class Thread implements Runnable
*** 357,368 ****
     * @see #isDaemon()
     * @see #checkAccess()
     */
!   public final void setDaemon (boolean status)
    {
-     checkAccess ();
      if (!startable_flag)
!       throw new IllegalThreadStateException ();
!     daemon_flag = status;
    }
  
    /**
--- 665,676 ----
     * @see #isDaemon()
     * @see #checkAccess()
     */
!   public final void setDaemon(boolean daemon)
    {
      if (!startable_flag)
!       throw new IllegalThreadStateException();
!     checkAccess();
!     this.daemon = daemon;
    }
  
    /**
*************** public class Thread implements Runnable
*** 381,430 ****
     */
    public synchronized ClassLoader getContextClassLoader()
    {
!     if (context_class_loader == null)
!       context_class_loader = ClassLoader.getSystemClassLoader ();
  
!     SecurityManager s = System.getSecurityManager();
      // FIXME: we can't currently find the caller's class loader.
      ClassLoader callers = null;
!     if (s != null && callers != null)
        {
  	// See if the caller's class loader is the same as or an
  	// ancestor of this thread's class loader.
! 	while (callers != null && callers != context_class_loader)
  	  {
  	    // FIXME: should use some internal version of getParent
  	    // that avoids security checks.
! 	    callers = callers.getParent ();
  	  }
  
! 	if (callers != context_class_loader)
! 	  s.checkPermission (new RuntimePermission ("getClassLoader"));
        }
  
!     return context_class_loader;
    }
  
    /**
!    * 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 void setContextClassLoader(ClassLoader cl)
    {
!     SecurityManager s = System.getSecurityManager ();
!     if (s != null)
!       s.checkPermission (new RuntimePermission ("setContextClassLoader"));
!     context_class_loader = cl;
    }
  
    /**
--- 689,736 ----
     */
    public synchronized ClassLoader getContextClassLoader()
    {
!     if (contextClassLoader == null)
!       contextClassLoader = ClassLoader.getSystemClassLoader();
  
!     SecurityManager sm = System.getSecurityManager();
      // FIXME: we can't currently find the caller's class loader.
      ClassLoader callers = null;
!     if (sm != null && callers != null)
        {
  	// See if the caller's class loader is the same as or an
  	// ancestor of this thread's class loader.
! 	while (callers != null && callers != contextClassLoader)
  	  {
  	    // FIXME: should use some internal version of getParent
  	    // that avoids security checks.
! 	    callers = callers.getParent();
  	  }
  
! 	if (callers != contextClassLoader)
! 	  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 = System.getSecurityManager();
!     if (sm != null)
!       sm.checkPermission(new RuntimePermission("setContextClassLoader"));
!     this.contextClassLoader = classloader;
    }
  
    /**
*************** public class Thread implements Runnable
*** 435,466 ****
     * @throws NullPointerException if name is null
     * @throws SecurityException if you cannot modify this Thread
     */
!   public final void setName (String n)
    {
!     checkAccess ();
      // The Class Libraries book says ``threadName cannot be null''.  I
      // take this to mean NullPointerException.
!     if (n == null)
!       throw new NullPointerException ();
!     name = n;
    }
  
    /**
!    * 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 native void setPriority (int newPriority);
  
    /**
     * Suspend the current Thread's execution for the specified amount of
--- 741,761 ----
     * @throws NullPointerException if name is null
     * @throws SecurityException if you cannot modify this Thread
     */
!   public final 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();
!     this.name = name;
    }
  
    /**
!    * Causes the currently executing thread object to temporarily pause
!    * and allow other threads to execute.
     */
!   public static native void yield();
  
    /**
     * Suspend the current Thread's execution for the specified amount of
*************** public class Thread implements Runnable
*** 474,482 ****
     * @see #notify()
     * @see #wait(long)
     */
!   public static void sleep (long timeout) throws InterruptedException
    {
!     sleep (timeout, 0);
    }
  
    /**
--- 769,777 ----
     * @see #notify()
     * @see #wait(long)
     */
!   public static void sleep(long ms) throws InterruptedException
    {
!     sleep(ms, 0);
    }
  
    /**
*************** public class Thread implements Runnable
*** 499,505 ****
     * @see #notify()
     * @see #wait(long, int)
     */
!   public static native void sleep (long timeout, int nanos)
      throws InterruptedException;
  
    /**
--- 794,800 ----
     * @see #notify()
     * @see #wait(long, int)
     */
!   public static native void sleep(long timeout, int nanos)
      throws InterruptedException;
  
    /**
*************** public class Thread implements Runnable
*** 512,518 ****
     * @throws IllegalThreadStateException if the thread has already started
     * @see #run()
     */
!   public native void start ();
  
    /**
     * Cause this Thread to stop abnormally because of the throw of a ThreadDeath
--- 807,813 ----
     * @throws IllegalThreadStateException if the thread has already started
     * @see #run()
     */
!   public native void start();
  
    /**
     * Cause this Thread to stop abnormally because of the throw of a ThreadDeath
*************** public class Thread implements Runnable
*** 537,547 ****
     * @see SecurityManager#checkPermission(Permission)
     * @deprecated unsafe operation, try not to use
     */
!   public final void stop ()
    {
      // Argument doesn't matter, because this is no longer
      // supported.
!     stop (null);
    }
  
    /**
--- 832,842 ----
     * @see SecurityManager#checkPermission(Permission)
     * @deprecated unsafe operation, try not to use
     */
!   public final void stop()
    {
      // Argument doesn't matter, because this is no longer
      // supported.
!     stop(null);
    }
  
    /**
*************** public class Thread implements Runnable
*** 571,577 ****
     * @see SecurityManager#checkPermission(Permission)
     * @deprecated unsafe operation, try not to use
     */
!   public final native void stop (Throwable e);
  
    /**
     * Suspend this Thread.  It will not come back, ever, unless it is resumed.
--- 866,872 ----
     * @see SecurityManager#checkPermission(Permission)
     * @deprecated unsafe operation, try not to use
     */
!   public final native void stop(Throwable t);
  
    /**
     * Suspend this Thread.  It will not come back, ever, unless it is resumed.
*************** public class Thread implements Runnable
*** 585,866 ****
     * @see #resume()
     * @deprecated unsafe operation, try not to use
     */
!   public final native void suspend ();
! 
!   private final native void initialize_native ();
! 
!   private final native static String gen_name ();
! 
!   /**
!    * 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 g, Runnable r, String n)
!   {
!     this (currentThread (), g, r, n);
!   }
! 
!   /**
!    * 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 g, Runnable r, String n, long size)
!   {
!     // Just ignore stackSize for now.
!     this (currentThread (), g, r, n);
!   }
! 
!   private Thread (Thread current, ThreadGroup g, Runnable r, String n)
!   {
!     // The Class Libraries book says ``threadName cannot be null''.  I
!     // take this to mean NullPointerException.
!     if (n == null)
!       throw new NullPointerException ();
!       
!     if (g == null)
!       {
! 	// If CURRENT is null, then we are bootstrapping the first thread. 
! 	// Use ThreadGroup.root, the main threadgroup.
! 	if (current == null)
! 	  group = ThreadGroup.root;
! 	else
! 	  group = current.getThreadGroup();
!       }
!     else
!       group = g;
!       
!     data = null;
!     interrupt_flag = false;
!     alive_flag = false;
!     startable_flag = true;
! 
!     if (current != null)
!       {
! 	group.checkAccess();
! 
! 	daemon_flag = current.isDaemon();
!         int gmax = group.getMaxPriority();
! 	int pri = current.getPriority();
! 	priority = (gmax < pri ? gmax : pri);
! 	context_class_loader = current.context_class_loader;
! 	InheritableThreadLocal.newChildThread(this);
!       }
!     else
!       {
! 	daemon_flag = false;
! 	priority = NORM_PRIORITY;
!       }
! 
!     name = n;
!     group.addThread(this);
!     runnable = r;
! 
!     initialize_native ();
!   }
! 
!   /**
!    * 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, null, gen_name ());
!   }
! 
!   /**
!    * 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 r)
!   {
!     this (null, r, gen_name ());
!   }
! 
!   /**
!    * 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 n)
!   {
!     this (null, null, n);
!   }
! 
!   /**
!    * 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 thread group.
!    * @param      target   the object whose <code>run</code> method is called.
!    * @exception  SecurityException  if the current thread cannot create a
!    *             thread in the specified thread group.
!    * @see        java.lang.Thread#Thread(java.lang.ThreadGroup,
!    *             java.lang.Runnable, java.lang.String)
!    */
!   public Thread (ThreadGroup g, Runnable r)
!   {
!     this (g, r, gen_name ());
!   }
! 
!   /**
!    * Allocates a new <code>Thread</code> object. This constructor has
!    * the same effect as <code>Thread(group, null, name)</code>
!    *
!    * @param      group   the thread group.
!    * @param      name    the name of the new thread.
!    * @exception  SecurityException  if the current thread cannot create a
!    *               thread in the specified thread group.
!    * @see        java.lang.Thread#Thread(java.lang.ThreadGroup,
!    *          java.lang.Runnable, java.lang.String)
!    */
!   public Thread (ThreadGroup g, String n)
!   {
!     this (g, null, n);
!   }
  
    /**
!    * Allocates a new <code>Thread</code> object. This constructor has
!    * the same effect as <code>Thread(null, target, name)</code>.
     *
!    * @param   target   the object whose <code>run</code> method is called.
!    * @param   name     the name of the new thread.
!    * @see     java.lang.Thread#Thread(java.lang.ThreadGroup,
!    *          java.lang.Runnable, java.lang.String)
     */
!   public Thread (Runnable r, String n)
!   {
!     this (null, r, n);
!   }
  
    /**
     * Returns a string representation of this thread, including the
     * thread's name, priority, and thread group.
     *
!    * @return  a string representation of this thread.
     */
!   public String toString ()
    {
!     return "Thread[" + name + "," + priority + "," + 
!       (group == null ? "" : group.getName()) + "]";
    }
  
!   /**
!    * Causes the currently executing thread object to temporarily pause
!    * and allow other threads to execute.
!    */
!   public static native void yield ();
! 
!   // Private data.
!   ThreadGroup group;
!   String name;
!   private Runnable runnable;
!   private int priority;
!   private boolean daemon_flag;
!   boolean interrupt_flag;
!   private boolean alive_flag;
!   private boolean startable_flag;
!   private ClassLoader context_class_loader;
! 
!   // This describes the top-most interpreter frame for this thread.
!   RawData interp_frame;
  
!   // Our native data - points to an instance of struct natThread.
!   private Object data;
  }
--- 880,917 ----
     * @see #resume()
     * @deprecated unsafe operation, try not to use
     */
!   public final native void 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 native void setPriority(int newPriority);
  
    /**
     * 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()) + "]");
    }
  
!   private final native void initialize_native();
  
!   private final native static String gen_name();
  }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ThreadDeath.java gcc-4.0.0/libjava/java/lang/ThreadDeath.java
*** gcc-3.4.3/libjava/java/lang/ThreadDeath.java	Sat Jun 15 19:45:31 2002
--- gcc-4.0.0/libjava/java/lang/ThreadDeath.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* ThreadDeath.java - special exception registering Thread death
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 48,54 ****
   * deprecated Thread.stop() method.
   *
   * @author John Keiser
!  * @author Tom Tromey <tromey@cygnus.com>
   * @see Thread#stop()
   * @status updated to 1.4
   */
--- 48,54 ----
   * deprecated Thread.stop() method.
   *
   * @author John Keiser
!  * @author Tom Tromey (tromey@cygnus.com)
   * @see Thread#stop()
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ThreadGroup.java gcc-4.0.0/libjava/java/lang/ThreadGroup.java
*** gcc-3.4.3/libjava/java/lang/ThreadGroup.java	Tue Aug 26 23:14:07 2003
--- gcc-4.0.0/libjava/java/lang/ThreadGroup.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* ThreadGroup -- a group of Threads
!    Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ThreadGroup -- a group of Threads
!    Copyright (C) 1998, 2000, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Vector;
*** 48,54 ****
   * @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
--- 48,54 ----
   * @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
*** 238,253 ****
     * Check whether this ThreadGroup is an ancestor of the specified
     * ThreadGroup, or if they are the same.
     *
!    * @param g the group to test on
     * @return whether this ThreadGroup is a parent of the specified group
     */
!   public final boolean parentOf(ThreadGroup tg)
    {
!     while (tg != null)
        {
!         if (tg == this)
            return true;
!         tg = tg.parent;
        }
      return false;
    }
--- 238,253 ----
     * 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;
    }
*************** public class ThreadGroup
*** 535,541 ****
     * manner.
     *
     * @param thread the thread that exited
!    * @param exception the uncaught exception
     * @throws NullPointerException if t is null
     * @see ThreadDeath
     * @see System#err
--- 535,541 ----
     * manner.
     *
     * @param thread the thread that exited
!    * @param t the uncaught throwable
     * @throws NullPointerException if t is null
     * @see ThreadDeath
     * @see System#err
*************** public class ThreadGroup
*** 684,690 ****
    {
      if (groups == null)
        return;
!     System.out.print(indentation + this);
      indentation += "    ";
      int i = threads.size();
      while (--i >= 0)
--- 684,690 ----
    {
      if (groups == null)
        return;
!     System.out.println(indentation + this);
      indentation += "    ";
      int i = threads.size();
      while (--i >= 0)
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ThreadLocal.java gcc-4.0.0/libjava/java/lang/ThreadLocal.java
*** gcc-3.4.3/libjava/java/lang/ThreadLocal.java	Tue Aug 26 23:14:07 2003
--- gcc-4.0.0/libjava/java/lang/ThreadLocal.java	Mon Oct 18 10:41:56 2004
*************** import java.util.Collections;
*** 41,46 ****
--- 41,47 ----
  import java.util.Map;
  import java.util.WeakHashMap;
  
+ 
  /**
   * ThreadLocal objects have a different state associated with every
   * Thread that accesses them. Every access to the ThreadLocal object
*************** import java.util.WeakHashMap;
*** 51,58 ****
--- 52,62 ----
   * <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
   * {
*************** import java.util.WeakHashMap;
*** 65,84 ****
   *     };
   * ...
   * }
!  * </pre></br>
   *
!  * 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>When a Thread is garbage collected all references to values of
   * the ThreadLocal objects associated with that Thread are removed.
   *
!  * @author Mark Wielaard <mark@klomp.org>
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.2
   * @status updated to 1.4
   */
--- 69,90 ----
   *     };
   * ...
   * }
!  * </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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Throwable.java gcc-4.0.0/libjava/java/lang/Throwable.java
*** gcc-3.4.3/libjava/java/lang/Throwable.java	Fri Oct  4 16:47:36 2002
--- gcc-4.0.0/libjava/java/lang/Throwable.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* java.lang.Throwable -- Root class for all Exceptions and Errors
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 37,49 ****
  
  package java.lang;
  
- import java.io.Serializable;
- import java.io.PrintWriter;
  import java.io.PrintStream;
! import java.io.ObjectOutputStream;
! import java.io.ObjectInputStream;
! import java.io.IOException;
! import java.io.OutputStream;
  
  /**
   * Throwable is the superclass of all exceptions that can be raised.
--- 37,45 ----
  
  package java.lang;
  
  import java.io.PrintStream;
! import java.io.PrintWriter;
! import java.io.Serializable;
  
  /**
   * Throwable is the superclass of all exceptions that can be raised.
*************** import java.io.OutputStream;
*** 102,108 ****
   * @author John Keiser
   * @author Mark Wielaard
   * @author Tom Tromey
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.0
   * @status updated to 1.4
   */
--- 98,104 ----
   * @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 Serial
*** 392,398 ****
     * then a line starting with three spaces and the string "... X more" is
     * printed, where X is the number of remaining stackframes.
     *
!    * @param w the PrintWriter to write the trace to
     * @since 1.1
     */
    public void printStackTrace (PrintWriter pw)
--- 388,394 ----
     * 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)
*************** public class Throwable implements Serial
*** 400,406 ****
      pw.print(stackTraceString());
    }
  
!   private static final String nl = System.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.
--- 396,415 ----
      pw.print(stackTraceString());
    }
  
!   /*
!    * We use inner class to avoid a static initializer in this basic class.
!    */
!   private static class StaticData
!   {
!     static final String nl;
! 
!     static
!     {
!       // Access package private properties field to prevent Security check.
!       nl = System.properties.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.
*************** public class Throwable implements Serial
*** 453,458 ****
--- 462,468 ----
    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);
diff -Nrcpad gcc-3.4.3/libjava/java/lang/UnsatisfiedLinkError.java gcc-4.0.0/libjava/java/lang/UnsatisfiedLinkError.java
*** gcc-3.4.3/libjava/java/lang/UnsatisfiedLinkError.java	Sat Jun 15 19:45:32 2002
--- gcc-4.0.0/libjava/java/lang/UnsatisfiedLinkError.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* UnsatisfiedLinkError.java -- thrown when a native method cannot be loaded
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 44,50 ****
   * cannot be found by the Java Virtual Machine.
   *
   * @author Brian Jones
!  * @author Tom Tromey <tromey@cygnus.com>
   * @see Runtime
   * @status updated to 1.4
   */
--- 44,50 ----
   * cannot be found by the Java Virtual Machine.
   *
   * @author Brian Jones
!  * @author Tom Tromey (tromey@cygnus.com)
   * @see Runtime
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/UnsupportedOperationException.java gcc-4.0.0/libjava/java/lang/UnsupportedOperationException.java
*** gcc-3.4.3/libjava/java/lang/UnsupportedOperationException.java	Sat Jun 15 19:45:32 2002
--- gcc-4.0.0/libjava/java/lang/UnsupportedOperationException.java	Thu Feb 17 07:48:34 2005
***************
*** 1,6 ****
  /* UnsupportedOperationException.java -- thrown when an operation is not
     supported
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang;
*** 43,49 ****
   * 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>
   * @since 1.2
   * @status updated to 1.4
   */
--- 43,49 ----
   * 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)
   * @since 1.2
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/VMClassLoader.java gcc-4.0.0/libjava/java/lang/VMClassLoader.java
*** gcc-3.4.3/libjava/java/lang/VMClassLoader.java	Thu Oct  2 15:34:28 2003
--- gcc-4.0.0/libjava/java/lang/VMClassLoader.java	Wed Apr  6 21:38:30 2005
***************
*** 1,6 ****
  /* VMClassLoader.java -- Reference implementation of native interface
     required by ClassLoader
!    Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* VMClassLoader.java -- Reference implementation of native interface
     required by ClassLoader
!    Copyright (C) 1998, 2001, 2002, 2003, 2004, 2005 Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,56 ****
  
  package java.lang;
  
! import java.security.ProtectionDomain;
! import java.net.URL;
! import java.io.IOException;
! import java.util.Enumeration;
! import java.util.Map;
! import java.util.HashMap;
  import java.lang.reflect.Constructor;
  import java.security.AllPermission;
  import java.security.Permission;
  import java.security.Permissions;
  import java.security.ProtectionDomain;
! 
! import gnu.java.util.EmptyEnumeration;
  
  /**
   * java.lang.VMClassLoader is a package-private helper for VMs to implement
--- 38,60 ----
  
  package java.lang;
  
! import gnu.java.util.EmptyEnumeration;
  import java.lang.reflect.Constructor;
+ import java.io.File;
+ import java.io.IOException;
+ import java.net.URL;
+ import java.net.URLClassLoader;
  import java.security.AllPermission;
  import java.security.Permission;
  import java.security.Permissions;
  import java.security.ProtectionDomain;
! import java.util.ArrayList;
! import java.util.Enumeration;
! import java.util.HashMap;
! import java.util.HashSet;
! import java.util.Map;
! import java.util.StringTokenizer;
! import gnu.gcj.runtime.BootClassLoader;
  
  /**
   * java.lang.VMClassLoader is a package-private helper for VMs to implement
*************** final class VMClassLoader
*** 78,83 ****
--- 82,104 ----
      unknownProtectionDomain = new ProtectionDomain(null, permissions);  
    }
  
+   static final HashMap definedPackages = new HashMap();
+ 
+   // This is a helper for handling java.endorsed.dirs.  It is null
+   // until we've initialized the system, at which point it is created.
+   static BootClassLoader bootLoader;
+ 
+   // This keeps track of shared libraries we've already tried to load.
+   private static HashSet tried_libraries;
+ 
+   // Holds one of the LIB_* constants; used to determine how shared
+   // library loads are done.
+   private static int lib_control;
+ 
+   private static final int LIB_FULL = 0;
+   private static final int LIB_CACHE = 1;
+   private static final int LIB_NEVER = 2;
+ 
    /**
     * Helper to define a class using a string of bytes. This assumes that
     * the security checks have already been performed, if necessary.
*************** final class VMClassLoader
*** 99,142 ****
  					ProtectionDomain pd)
      throws ClassFormatError;
  
-   static final native void linkClass0 (Class klass);
-   static final native void markClassErrorState0 (Class klass);
- 
    /**
     * Helper to resolve all references to other classes from this class.
     *
     * @param c the class to resolve
     */
!   static final void resolveClass(Class clazz)
    {
!     synchronized (clazz)
        {
! 	try
! 	  {
! 	    linkClass0 (clazz);
! 	  }
! 	catch (Throwable x)
! 	  {
! 	    markClassErrorState0 (clazz);
! 
! 	    LinkageError e;
! 	    if (x instanceof LinkageError)
! 	      e = (LinkageError) x;
! 	    else if (x instanceof ClassNotFoundException)
! 	      {
! 		e = new NoClassDefFoundError("while resolving class: "
! 					     + clazz.getName());
! 		e.initCause (x);
! 	      }
! 	    else
! 	      {
! 		e = new LinkageError ("unexpected exception during linking: "
! 				      + clazz.getName());
! 		e.initCause (x);
! 	      }
! 	    throw e;
! 	  }
        }
    }
  
    /**
--- 120,150 ----
  					ProtectionDomain pd)
      throws ClassFormatError;
  
    /**
     * Helper to resolve all references to other classes from this class.
     *
     * @param c the class to resolve
     */
!   static final native void resolveClass(Class clazz);
! 
!   static final void transformException(Class clazz, Throwable x)
    {
!     LinkageError e;
!     if (x instanceof LinkageError)
!       e = (LinkageError) x;
!     else if (x instanceof ClassNotFoundException)
        {
! 	e = new NoClassDefFoundError("while resolving class: "
! 				     + clazz.getName());
! 	e.initCause (x);
        }
+     else
+       {
+ 	e = new LinkageError ("unexpected exception during linking: "
+ 			      + clazz.getName());
+ 	e.initCause (x);
+       }
+     throw e;
    }
  
    /**
*************** final class VMClassLoader
*** 162,167 ****
--- 170,177 ----
     */
    static URL getResource(String name)
    {
+     if (bootLoader != null)
+       return bootLoader.bootGetResource(name);
      return null;
    }
  
*************** final class VMClassLoader
*** 177,182 ****
--- 187,194 ----
     */
    static Enumeration getResources(String name) throws IOException
    {
+     if (bootLoader != null)
+       return bootLoader.bootGetResources(name);
      return EmptyEnumeration.getInstance();
    }
  
*************** final class VMClassLoader
*** 188,196 ****
     * @param name the name to find
     * @return the named package, if it exists
     */
!   static Package getPackage(String name)
    {
!     return null;
    }
  
    /**
--- 200,208 ----
     * @param name the name to find
     * @return the named package, if it exists
     */
!   static synchronized Package getPackage(String name)
    {
!     return (Package) definedPackages.get(name);
    }
  
    /**
*************** final class VMClassLoader
*** 200,208 ****
     *
     * @return all named packages, if any exist
     */
!   static Package[] getPackages()
    {
!     return new Package[0];
    }
  
    /**
--- 212,244 ----
     *
     * @return all named packages, if any exist
     */
!   static synchronized Package[] getPackages()
    {
!     Package[] packages = new Package[definedPackages.size()];
!     return (Package[]) definedPackages.values().toArray(packages);
!   }
! 
!   // Define a package for something loaded natively.
!   static synchronized void definePackageForNative(String className)
!   {
!     int lastDot = className.lastIndexOf('.');
!     if (lastDot != -1)
!       {
! 	String packageName = className.substring(0, lastDot);
! 	if (getPackage(packageName) == null)
! 	  {
! 	    // FIXME: this assumes we're defining the core, which
! 	    // isn't necessarily so.  We could detect this and set up
! 	    // appropriately.  We could also look at a manifest file
! 	    // compiled into the .so.
! 	    Package p = new Package(packageName,
! 				    "Java Platform API Specification",
! 				    "GNU", "1.4", "gcj", "GNU",
! 				    null, // FIXME: gcj version.
! 				    null);
! 	    definedPackages.put(packageName, p);
! 	  }
!       }
    }
  
    /**
*************** final class VMClassLoader
*** 272,277 ****
--- 308,339 ----
  
    static native ClassLoader getSystemClassLoaderInternal();
  
+   static native void initBootLoader(String libdir);
+ 
+   static void initialize(String libdir)
+   {
+     initBootLoader(libdir);
+ 
+     String p
+       = System.getProperty ("gnu.gcj.runtime.VMClassLoader.library_control",
+ 			    "");
+     if ("never".equals(p))
+       lib_control = LIB_NEVER;
+     else if ("cache".equals(p))
+       lib_control = LIB_CACHE;
+     else if ("full".equals(p))
+       lib_control = LIB_FULL;
+     else
+       lib_control = LIB_CACHE;
+ 
+     tried_libraries = new HashSet();
+   }
+ 
+   /**
+    * Possibly load a .so and search it for classes.
+    */
+   static native Class nativeFindClass(String name);
+ 
    static ClassLoader getSystemClassLoader()
    {
      // This method is called as the initialization of systemClassLoader,
*************** final class VMClassLoader
*** 289,302 ****
  	    default_sys
  	      = (ClassLoader) c.newInstance(new Object[] { default_sys });
  	  }
! 	catch (Exception e)
  	  {
! 	    System.err.println("Requested system classloader "
! 			       + loader + " failed, using "
! 			       + "gnu.gcj.runtime.VMClassLoader");
! 	    e.printStackTrace();
  	  }
        }
      return default_sys;
    }
  }
--- 351,363 ----
  	    default_sys
  	      = (ClassLoader) c.newInstance(new Object[] { default_sys });
  	  }
! 	catch (Exception ex)
  	  {
! 	    throw new Error("Failed to load requested system classloader "
! 			       + loader, ex);
  	  }
        }
+ 
      return default_sys;
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/VMCompiler.java gcc-4.0.0/libjava/java/lang/VMCompiler.java
*** gcc-3.4.3/libjava/java/lang/VMCompiler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/lang/VMCompiler.java	Mon Mar 21 21:02:30 2005
***************
*** 0 ****
--- 1,367 ----
+ /* VMClassLoader.java -- Reference implementation of compiler interface
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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.FileOutputStream;
+ import java.io.InputStreamReader;
+ import java.security.MessageDigest;
+ import java.security.ProtectionDomain;
+ import java.security.NoSuchAlgorithmException;
+ import java.util.WeakHashMap;
+ import java.util.HashSet;
+ import java.util.Enumeration;
+ import java.util.StringTokenizer;
+ import java.util.Vector;
+ import gnu.gcj.runtime.SharedLibHelper;
+ import gnu.gcj.runtime.PersistentByteMap;
+ 
+ /**
+  * This class is just a per-VM reflection of java.lang.Compiler.
+  * All methods are defined identically.
+  */
+ final class VMCompiler
+ {
+   // True if we want to use gcj-jit.
+   public static boolean useCompiler = true;
+ 
+   // True if we're able to use gcj-jit.
+   public static final boolean canUseCompiler;
+ 
+   // Compiler to use.
+   public static String gcjJitCompiler;
+ 
+   // Compiler options.
+   public static String gcjJitCompilerOptions;
+ 
+   // Temporary directory to use.
+   public static String gcjJitTmpdir;
+ 
+   // This maps a ClassLoader to a set of SharedLibHelper objects that
+   // it has used.  We do things this way to ensure that a
+   // SharedLibHelper is collected if and only if the ClassLoader is.
+   private static WeakHashMap sharedHelperMap = new WeakHashMap();
+ 
+   private static Vector precompiledMapFiles;
+ 
+   // We create a single MD5 engine and then clone it whenever we want
+   // a new one.  This is simpler than trying to find a new one each
+   // time, and it avoids potential deadlocks due to class loader
+   // oddities.
+   private static final MessageDigest md5Digest;
+ 
+   static
+   {
+     try
+       {
+ 	md5Digest = MessageDigest.getInstance("MD5");
+       }
+     catch (NoSuchAlgorithmException _)
+       {
+ 	md5Digest = null;
+       }
+   }
+ 
+   static
+   {
+     gcjJitCompiler = System.getProperty("gnu.gcj.jit.compiler");
+     if (gcjJitCompiler == null)
+       canUseCompiler = false;
+     else
+       {
+ 	gcjJitCompilerOptions = System.getProperty("gnu.gcj.jit.options",
+ 						   "-g");
+ 	gcjJitTmpdir = System.getProperty("gnu.gcj.jit.cachedir");
+ 	// Note that we *don't* choose java.io.tmpdir as a default --
+ 	// that would allow easy attacks against the VM.
+ 	if (gcjJitTmpdir == null)
+ 	  canUseCompiler = false;
+ 	else
+ 	  canUseCompiler = true;
+       }
+ 
+     String prop = System.getProperty ("gnu.gcj.precompiled.db.path");
+     if (prop != null)
+       {
+ 	precompiledMapFiles = new Vector();
+ 	// Add the 
+ 	StringTokenizer st
+ 	  = new StringTokenizer (prop,
+ 				 System.getProperty ("path.separator", ":"));
+ 	{
+ 	  while (st.hasMoreElements ()) 
+ 	    {  
+ 	      String e = st.nextToken ();
+ 	      try
+ 		{
+ 		  PersistentByteMap map 
+ 		    = new PersistentByteMap
+ 		    (e, PersistentByteMap.AccessMode.READ_ONLY);
+ 		  precompiledMapFiles.add(map);
+ 		}
+ 	      catch (IllegalArgumentException _)
+ 		{
+ 		  // Not a map file	      
+ 		}
+ 	      catch (java.io.IOException _)
+ 		{
+ 		}
+ 	      catch (java.nio.BufferUnderflowException _)
+ 		{
+ 		  // Invalid map file.
+ 		}
+ 	    }
+ 	}
+       }
+   }
+ 
+   /**
+    * Don't allow new `Compiler's to be made.
+    */
+   private VMCompiler()
+   {
+   }
+ 
+   private static Class loadSharedLibrary(ClassLoader loader,
+ 					 String fileName,
+ 					 ProtectionDomain domain,
+ 					 String className)
+   {
+     Class c = null;
+     SharedLibHelper helper 
+ 	= SharedLibHelper.findHelper (loader, fileName, domain.getCodeSource(), 
+ 				      domain, false);
+     c = helper.findClass (className);
+     if (c != null)
+       {
+ 	HashSet hs = (HashSet) sharedHelperMap.get(loader);
+ 	if (hs == null)
+ 	  {
+ 	    hs = new HashSet();
+ 	    sharedHelperMap.put(loader, hs);
+ 	  }
+ 	hs.add(helper);
+       }
+     return c;
+   }
+ 
+   /**
+    * Compile a class given the bytes for it.  Returns the Class, or
+    * null if compilation failed or otherwise could not be done.
+    */
+   public static Class compileClass(ClassLoader loader,
+ 				   String name, byte[] data,
+ 				   int offset, int len,
+ 				   ProtectionDomain domain)
+   {
+     if (precompiledMapFiles == null
+ 	&& (! useCompiler || ! canUseCompiler))
+       return null;
+ 
+     byte digest[];
+ 
+     try
+       {
+ 	MessageDigest md = (MessageDigest) md5Digest.clone();
+ 	digest = md.digest(data);
+       }
+     catch (CloneNotSupportedException _)
+       {
+ 	// Can't happen.
+ 	return null;
+       }
+     catch (NullPointerException _)
+       {
+ 	// If md5Digest==null -- but really this should never happen
+ 	// either, since the MD5 digest is in libgcj.
+ 	return null;
+       }
+ 
+     // We use lookaside cache files to determine whether these bytes
+     // correspond to a class file that is part of a precompiled DSO.
+     if (precompiledMapFiles != null)
+       {
+ 	try
+ 	  {
+ 	    Enumeration elements = precompiledMapFiles.elements();
+ 	    while (elements.hasMoreElements())
+ 	      {
+ 		PersistentByteMap map = (PersistentByteMap)elements.nextElement();
+ 		byte[] soName = map.get(digest);
+ 		if (soName != null)
+ 		  return loadSharedLibrary(loader, 
+ 					   new String(soName), 
+ 					   domain, name);
+ 	      }
+ 	  }
+ 	catch (Exception _)
+ 	  {
+ 	  }
+ 	catch (UnknownError _)
+ 	  {
+ 	    // SharedLibHelper will throw UnknownError if the dlopen
+ 	    // fails for some reason.  We ignore it and continue on.
+ 	  }
+       }
+  
+     if (! useCompiler || ! canUseCompiler)
+       return null;
+ 
+     try
+       {
+ 	// FIXME: Make sure that the class represented by the
+ 	// bytes in DATA really is the class named in NAME.  Make
+ 	// sure it's not "java.*".
+ 	StringBuffer hexBytes = new StringBuffer(gcjJitTmpdir);
+ 	hexBytes.append(File.separatorChar);
+ 	int digestLength = digest.length;
+ 	for (int i = 0; i < digestLength; ++i)
+ 	  hexBytes.append(Integer.toHexString(digest[i] & 0xff));
+ 
+ 	// FIXME: use System.mapLibraryName?
+ 	// I'm thinking we should use that, plus a class specified
+ 	// via a property that determines lookup policy.
+ 	File soFile = new File(hexBytes + ".so");
+ 	if (soFile.isFile())
+           return loadSharedLibrary (loader, soFile.toString(), domain,
+ 				    name);
+ 
+ 	File classFile = new File(hexBytes + ".class");
+ 	classFile.delete();
+ 	if (classFile.createNewFile() != true)	  
+ 	  return null;
+ 
+ 	FileOutputStream f = new FileOutputStream (classFile);
+ 	// FIXME: race condition if bytes change... ?
+ 	f.write(data, offset, len);
+ 
+ 	// Invoke the compiler.
+ 	StringBuffer command = new StringBuffer(gcjJitCompiler);
+ 	command.append(" ");
+ 	command.append(classFile);
+ 	command.append(" ");
+ 	command.append(gcjJitCompilerOptions);
+ 	// These options are required.
+ 	command.append(" -findirect-dispatch -fjni -shared -fPIC -o ");
+ 	command.append(soFile);
+ 	Process p = Runtime.getRuntime().exec(command.toString());
+ 
+ 	// Read the process' stderr into a string.
+ 	StringBuffer err = new StringBuffer();
+ 	InputStreamReader stderr = new InputStreamReader (p.getErrorStream());
+ 	char[] inBuf = new char[500];
+ 	int bytesRead;
+ 	while ((bytesRead = stderr.read (inBuf)) != -1)
+ 	  err.append(inBuf, 0, bytesRead);
+ 
+ 	if (p.waitFor() != 0)
+ 	  {
+ 	    // FIXME: we could log err.toString() somewhere...
+ 	    return null;
+ 	  }
+ 
+ 	return loadSharedLibrary(loader, soFile.toString(), domain, name);
+       }
+     catch (Exception _)
+       {
+ 	return null;
+       }
+   }
+ 
+   /**
+    * 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)
+   {
+     // Never succeed.
+     return false;
+   }
+ 
+   /**
+    * 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)
+   {
+     // Note the incredibly lame interface.  Always fail.
+     return false;
+   }
+ 
+   /**
+    * 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)
+   {
+     // Our implementation defines this to a no-op.
+     return null;
+   }
+ 
+   /**
+    * 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()
+   {
+     useCompiler = true;
+   }
+ 
+   /**
+    * Calling <code>Compiler.disable()</code> will cause the compiler
+    * to be suspended; provided that a compiler even exists.
+    */
+   public static void disable()
+   {
+     useCompiler = false;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/VMSecurityManager.java gcc-4.0.0/libjava/java/lang/VMSecurityManager.java
*** gcc-3.4.3/libjava/java/lang/VMSecurityManager.java	Thu Dec  5 00:49:29 2002
--- gcc-4.0.0/libjava/java/lang/VMSecurityManager.java	Thu Nov 25 03:47:04 2004
*************** class VMSecurityManager
*** 54,64 ****
      // The docs above are wrong.  See the online docs.
      // FIXME this implementation is a bit wrong too -- the docs say we
      // must also consider ancestors of the system class loader.
      Class[] classStack = getClassContext ();
      for (int i = 0; i < classStack.length; i++)
        {
  	ClassLoader loader = classStack[i].getClassLoader();
! 	if (loader != null)
  	  return loader;
        }
  
--- 54,65 ----
      // The docs above are wrong.  See the online docs.
      // FIXME this implementation is a bit wrong too -- the docs say we
      // must also consider ancestors of the system class loader.
+     ClassLoader systemClassLoader = VMClassLoader.getSystemClassLoader();
      Class[] classStack = getClassContext ();
      for (int i = 0; i < classStack.length; i++)
        {
  	ClassLoader loader = classStack[i].getClassLoader();
! 	if (loader != null && loader != systemClassLoader)
  	  return loader;
        }
  
diff -Nrcpad gcc-3.4.3/libjava/java/lang/VMThrowable.java gcc-4.0.0/libjava/java/lang/VMThrowable.java
*** gcc-3.4.3/libjava/java/lang/VMThrowable.java	Tue Dec  3 13:50:04 2002
--- gcc-4.0.0/libjava/java/lang/VMThrowable.java	Fri Apr  9 04:39:24 2004
***************
*** 1,5 ****
  /* java.lang.VMThrowable -- VM support methods for Throwable.
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.lang.VMThrowable -- VM support methods for Throwable.
!    Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class VMThrowable
*** 96,103 ****
      if (trace != null)
        {
  	NameFinder nameFinder = new NameFinder();
! 	result = nameFinder.lookup(t, trace.stackTraceAddrs(), 
! 				   trace.length());
  	nameFinder.close();
        }
      else
--- 96,102 ----
      if (trace != null)
        {
  	NameFinder nameFinder = new NameFinder();
! 	result = nameFinder.lookup(t, trace);
  	nameFinder.close();
        }
      else
diff -Nrcpad gcc-3.4.3/libjava/java/lang/VerifyError.java gcc-4.0.0/libjava/java/lang/VerifyError.java
*** gcc-3.4.3/libjava/java/lang/VerifyError.java	Sat Jun 15 19:45:32 2002
--- gcc-4.0.0/libjava/java/lang/VerifyError.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* VerifyError.java -- thrown when a class fails verification
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 43,49 ****
   * 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
--- 43,49 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/VirtualMachineError.java gcc-4.0.0/libjava/java/lang/VirtualMachineError.java
*** gcc-3.4.3/libjava/java/lang/VirtualMachineError.java	Sat Jun 15 19:45:32 2002
--- gcc-4.0.0/libjava/java/lang/VirtualMachineError.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* VirtualMachineError.java -- thrown when the Virtual Machine has a problem
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/Void.java gcc-4.0.0/libjava/java/lang/Void.java
*** gcc-3.4.3/libjava/java/lang/Void.java	Thu Jun 13 18:16:26 2002
--- gcc-4.0.0/libjava/java/lang/Void.java	Mon Oct 18 10:41:56 2004
*************** this exception to your version of the li
*** 35,53 ****
  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.
   *
   * @author Paul Fisher
   * @author John Keiser
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.1
   * @status updated to 1.4
   */
--- 35,53 ----
  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
*** 62,66 ****
    /**
     * Void is non-instantiable.
     */
!   private Void() { }
  }
--- 62,68 ----
    /**
     * Void is non-instantiable.
     */
!   private Void()
!   {
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/ieeefp.h gcc-4.0.0/libjava/java/lang/ieeefp.h
*** gcc-3.4.3/libjava/java/lang/ieeefp.h	Wed Apr 16 18:32:06 2003
--- gcc-4.0.0/libjava/java/lang/ieeefp.h	Thu Oct 21 09:36:47 2004
***************
*** 32,37 ****
--- 32,45 ----
  #define __IEEE_BIG_ENDIAN
  #endif
  
+ #ifdef __m32r__
+ #ifdef __LITTLE_ENDIAN__
+ #define __IEEE_LITTLE_ENDIAN
+ #else
+ #define __IEEE_BIG_ENDIAN
+ #endif
+ #endif
+ 
  #if defined(__m68k__) || defined(__mc68000__)
  #define __IEEE_BIG_ENDIAN
  #endif
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natClass.cc gcc-4.0.0/libjava/java/lang/natClass.cc
*** gcc-3.4.3/libjava/java/lang/natClass.cc	Wed Dec  3 21:26:59 2003
--- gcc-4.0.0/libjava/java/lang/natClass.cc	Thu Feb 17 19:17:08 2005
***************
*** 1,6 ****
  // natClass.cc - Implementation of java.lang.Class native methods.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,7 ----
  // natClass.cc - Implementation of java.lang.Class native methods.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005  
!    Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 13,18 ****
--- 14,20 ----
  #include <limits.h>
  #include <string.h>
  #include <stddef.h>
+ #include <stdio.h>
  
  #pragma implementation "Class.h"
  
*************** details.  */
*** 55,63 ****
--- 57,69 ----
  #include <gcj/method.h>
  #include <gnu/gcj/runtime/MethodRef.h>
  #include <gnu/gcj/RawData.h>
+ #include <java/lang/VerifyError.h>
  
  #include <java-cpool.h>
  #include <java-interp.h>
+ #include <java-assert.h>
+ #include <execution.h>
+ 
  
  
  using namespace gcj;
*************** java::lang::Class::forName (jstring clas
*** 79,85 ****
      throw new java::lang::ClassNotFoundException (className);
  
    jclass klass = (buffer[0] == '[' 
! 		  ? _Jv_FindClassFromSignature (name->data, loader)
  		  : _Jv_FindClass (name, loader));
  
    if (klass == NULL)
--- 85,91 ----
      throw new java::lang::ClassNotFoundException (className);
  
    jclass klass = (buffer[0] == '[' 
! 		  ? _Jv_FindClassFromSignature (name->chars(), loader)
  		  : _Jv_FindClass (name, loader));
  
    if (klass == NULL)
*************** java::lang::Class::getClassLoader (void)
*** 151,157 ****
    // `null' instead.
    if (isPrimitive ())
      return NULL;
!   return loader ? loader : ClassLoader::getSystemClassLoader ();
  }
  
  java::lang::reflect::Constructor *
--- 157,163 ----
    // `null' instead.
    if (isPrimitive ())
      return NULL;
!   return loader ? loader : ClassLoader::systemClassLoader;
  }
  
  java::lang::reflect::Constructor *
*************** java::lang::Class::getDeclaredMethods (v
*** 439,448 ****
  jstring
  java::lang::Class::getName (void)
  {
!   char buffer[name->length + 1];  
!   memcpy (buffer, name->data, name->length); 
!   buffer[name->length] = '\0';
!   return _Jv_NewStringUTF (buffer);
  }
  
  JArray<jclass> *
--- 445,451 ----
  jstring
  java::lang::Class::getName (void)
  {
!   return name->toString();
  }
  
  JArray<jclass> *
*************** java::lang::Class::getInterfaces (void)
*** 484,490 ****
    jobjectArray r = JvNewObjectArray (interface_count, getClass (), NULL);
    jobject *data = elements (r);
    for (int i = 0; i < interface_count; ++i)
!     data[i] = interfaces[i];
    return reinterpret_cast<JArray<jclass> *> (r);
  }
  
--- 487,498 ----
    jobjectArray r = JvNewObjectArray (interface_count, getClass (), NULL);
    jobject *data = elements (r);
    for (int i = 0; i < interface_count; ++i)
!     {
!       typedef unsigned int uaddr __attribute__ ((mode (pointer)));
!       data[i] = interfaces[i];
!       if ((uaddr)data[i] < (uaddr)constants.size)
! 	fprintf (stderr, "ERROR !!!\n");
!     }
    return reinterpret_cast<JArray<jclass> *> (r);
  }
  
*************** java::lang::Class::_getMethod (jstring n
*** 494,500 ****
    jstring partial_sig = getSignature (param_types, false);
    jint p_len = partial_sig->length();
    _Jv_Utf8Const *utf_name = _Jv_makeUtf8Const (name);
!   for (Class *klass = this; klass; klass = klass->getSuperclass())
      {
        int i = klass->isPrimitive () ? 0 : klass->method_count;
        while (--i >= 0)
--- 502,509 ----
    jstring partial_sig = getSignature (param_types, false);
    jint p_len = partial_sig->length();
    _Jv_Utf8Const *utf_name = _Jv_makeUtf8Const (name);
! 
!    for (Class *klass = this; klass; klass = klass->getSuperclass())
      {
        int i = klass->isPrimitive () ? 0 : klass->method_count;
        while (--i >= 0)
*************** java::lang::Class::newInstance (void)
*** 690,696 ****
    if (! meth)
      throw new java::lang::InstantiationException (getName());
  
!   jobject r = JvAllocObject (this);
    ((void (*) (jobject)) meth->ncode) (r);
    return r;
  }
--- 699,705 ----
    if (! meth)
      throw new java::lang::InstantiationException (getName());
  
!   jobject r = _Jv_AllocObject (this);
    ((void (*) (jobject)) meth->ncode) (r);
    return r;
  }
*************** java::lang::Class::newInstance (void)
*** 698,707 ****
  void
  java::lang::Class::finalize (void)
  {
! #ifdef INTERPRETER
!   JvAssert (_Jv_IsInterpretedClass (this));
!   _Jv_UnregisterClass (this);
! #endif
  }
  
  // This implements the initialization process for a class.  From Spec
--- 707,713 ----
  void
  java::lang::Class::finalize (void)
  {
!   engine->unregister(this);
  }
  
  // This implements the initialization process for a class.  From Spec
*************** java::lang::Class::finalize (void)
*** 709,775 ****
  void
  java::lang::Class::initializeClass (void)
  {
!   // short-circuit to avoid needless locking.
    if (state == JV_STATE_DONE)
      return;
  
!   // Step 1.
!   _Jv_MonitorEnter (this);
! 
!   if (state < JV_STATE_LINKED)
!     {    
! #ifdef INTERPRETER
!       if (_Jv_IsInterpretedClass (this))
! 	{
! 	  // this can throw exceptions, so exit the monitor as a precaution.
! 	  _Jv_MonitorExit (this);
! 	  java::lang::VMClassLoader::resolveClass (this);
! 	  _Jv_MonitorEnter (this);
! 	}
!       else
! #endif
!         {
! 	  _Jv_PrepareCompiledClass (this);
! 	}
!     }
! 
!   // Step 2.
!   java::lang::Thread *self = java::lang::Thread::currentThread();
!   // FIXME: `self' can be null at startup.  Hence this nasty trick.
!   self = (java::lang::Thread *) ((long) self | 1);
!   while (state == JV_STATE_IN_PROGRESS && thread && thread != self)
!     wait ();
  
!   // Steps 3 &  4.
!   if (state == JV_STATE_DONE)
!     {
!       _Jv_MonitorExit (this);
!       return;
!     }
!   if (state == JV_STATE_IN_PROGRESS)
!     {
!       _Jv_MonitorExit (this);
  
!       /* Initialization in progress.  The class is linked now,
!          so ensure internal tables are built.  */
!       _Jv_PrepareConstantTimeTables (this);
!       _Jv_MakeVTable(this);
!       _Jv_LinkSymbolTable(this);
  
        return;
-     }
  
!   // Step 5.
!   if (state == JV_STATE_ERROR)
!     {
!       _Jv_MonitorExit (this);
        throw new java::lang::NoClassDefFoundError (getName());
-     }
  
!   // Step 6.
!   thread = self;
!   state = JV_STATE_IN_PROGRESS;
!   _Jv_MonitorExit (this);
  
    // Step 7.
    if (! isInterface () && superclass)
--- 715,751 ----
  void
  java::lang::Class::initializeClass (void)
  {
!   // Short-circuit to avoid needless locking.
    if (state == JV_STATE_DONE)
      return;
  
!   // Step 1.  We introduce a new scope so we can synchronize more
!   // easily.
!   {
!     JvSynchronize sync (this);
  
!     if (state < JV_STATE_LINKED)
!       java::lang::VMClassLoader::resolveClass (this);
  
!     // Step 2.
!     java::lang::Thread *self = java::lang::Thread::currentThread();
!     self = (java::lang::Thread *) ((long) self | 1);
!     while (state == JV_STATE_IN_PROGRESS && thread && thread != self)
!       wait ();
  
+     // Steps 3 &  4.
+     if (state == JV_STATE_DONE || state == JV_STATE_IN_PROGRESS)
        return;
  
!     // Step 5.
!     if (state == JV_STATE_ERROR)
        throw new java::lang::NoClassDefFoundError (getName());
  
!     // Step 6.
!     thread = self;
!     _Jv_Linker::wait_for_state (this, JV_STATE_LINKED);
!     state = JV_STATE_IN_PROGRESS;
!   }
  
    // Step 7.
    if (! isInterface () && superclass)
*************** java::lang::Class::initializeClass (void
*** 781,804 ****
        catch (java::lang::Throwable *except)
  	{
  	  // Caught an exception.
! 	  _Jv_MonitorEnter (this);
  	  state = JV_STATE_ERROR;
  	  notifyAll ();
- 	  _Jv_MonitorExit (this);
  	  throw except;
  	}
      }
  
-   _Jv_PrepareConstantTimeTables (this);
- 
-   if (vtable == NULL)
-     _Jv_MakeVTable(this);
- 
-   if (otable || atable)
-     _Jv_LinkSymbolTable(this);
- 
-   _Jv_linkExceptionClassTable (this);
- 
    // Steps 8, 9, 10, 11.
    try
      {
--- 757,769 ----
        catch (java::lang::Throwable *except)
  	{
  	  // Caught an exception.
! 	  JvSynchronize sync (this);
  	  state = JV_STATE_ERROR;
  	  notifyAll ();
  	  throw except;
  	}
      }
  
    // Steps 8, 9, 10, 11.
    try
      {
*************** java::lang::Class::initializeClass (void
*** 820,836 ****
  	      except = t;
  	    }
  	}
!       _Jv_MonitorEnter (this);
        state = JV_STATE_ERROR;
        notifyAll ();
-       _Jv_MonitorExit (this);
        throw except;
      }
  
!   _Jv_MonitorEnter (this);
    state = JV_STATE_DONE;
    notifyAll ();
!   _Jv_MonitorExit (this);
  }
  
  
--- 785,875 ----
  	      except = t;
  	    }
  	}
! 
!       JvSynchronize sync (this);
        state = JV_STATE_ERROR;
        notifyAll ();
        throw except;
      }
  
!   JvSynchronize sync (this);
    state = JV_STATE_DONE;
    notifyAll ();
! }
! 
! // Only used by serialization
! java::lang::reflect::Field *
! java::lang::Class::getPrivateField (jstring name)
! {
!   int hash = name->hashCode ();
! 
!   java::lang::reflect::Field* rfield;
!   for (int i = 0;  i < field_count;  i++)
!     {
!       _Jv_Field *field = &fields[i];
!       if (! _Jv_equal (field->name, name, hash))
! 	continue;
!       rfield = new java::lang::reflect::Field ();
!       rfield->offset = (char*) field - (char*) fields;
!       rfield->declaringClass = this;
!       rfield->name = name;
!       return rfield;
!     }
!   jclass superclass = getSuperclass();
!   if (superclass == NULL)
!     return NULL;
!   rfield = superclass->getPrivateField(name);
!   for (int i = 0; i < interface_count && rfield == NULL; ++i)
!     rfield = interfaces[i]->getPrivateField (name);
!   return rfield;
! }
! 
! // Only used by serialization
! java::lang::reflect::Method *
! java::lang::Class::getPrivateMethod (jstring name, JArray<jclass> *param_types)
! {
!   jstring partial_sig = getSignature (param_types, false);
!   jint p_len = partial_sig->length();
!   _Jv_Utf8Const *utf_name = _Jv_makeUtf8Const (name);
!   for (Class *klass = this; klass; klass = klass->getSuperclass())
!     {
!       int i = klass->isPrimitive () ? 0 : klass->method_count;
!       while (--i >= 0)
! 	{
! 	  if (_Jv_equalUtf8Consts (klass->methods[i].name, utf_name)
! 	      && _Jv_equaln (klass->methods[i].signature, partial_sig, p_len))
! 	    {
! 	      // Found it.
! 	      using namespace java::lang::reflect;
! 
! 	      Method *rmethod = new Method ();
! 	      rmethod->offset = ((char *) (&klass->methods[i])
! 				 - (char *) klass->methods);
! 	      rmethod->declaringClass = klass;
! 	      return rmethod;
! 	    }
! 	}
!     }
!   throw new java::lang::NoSuchMethodException (name);
! }
! 
! // Private accessor method for Java code to retrieve the protection domain.
! java::security::ProtectionDomain *
! java::lang::Class::getProtectionDomain0 ()
! {
!   return protectionDomain;
! }
! 
! JArray<jobject> *
! java::lang::Class::getSigners()
! {
!   return hack_signers;
! }
! 
! void
! java::lang::Class::setSigners(JArray<jobject> *s)
! {
!   hack_signers = s;
  }
  
  
*************** _Jv_GetMethodLocal (jclass klass, _Jv_Ut
*** 856,869 ****
  
  _Jv_Method *
  _Jv_LookupDeclaredMethod (jclass klass, _Jv_Utf8Const *name,
!                           _Jv_Utf8Const *signature)
  {
    for (; klass; klass = klass->getSuperclass())
      {
        _Jv_Method *meth = _Jv_GetMethodLocal (klass, name, signature);
  
        if (meth)
!         return meth;
      }
  
    return NULL;
--- 895,913 ----
  
  _Jv_Method *
  _Jv_LookupDeclaredMethod (jclass klass, _Jv_Utf8Const *name,
!                           _Jv_Utf8Const *signature,
! 			  jclass *declarer_result)
  {
    for (; klass; klass = klass->getSuperclass())
      {
        _Jv_Method *meth = _Jv_GetMethodLocal (klass, name, signature);
  
        if (meth)
! 	{
! 	  if (declarer_result)
! 	    *declarer_result = klass;
! 	  return meth;
! 	}
      }
  
    return NULL;
*************** _Jv_FindMethodInCache (jclass klass,
*** 885,891 ****
                         _Jv_Utf8Const *name,
                         _Jv_Utf8Const *signature)
  {
!   int index = name->hash & MCACHE_SIZE;
    _Jv_mcache *mc = method_cache + index;
    _Jv_Method *m = mc->method;
  
--- 929,935 ----
                         _Jv_Utf8Const *name,
                         _Jv_Utf8Const *signature)
  {
!   int index = name->hash16 () & MCACHE_SIZE;
    _Jv_mcache *mc = method_cache + index;
    _Jv_Method *m = mc->method;
  
*************** _Jv_AddMethodToCache (jclass klass,
*** 903,909 ****
  {
    _Jv_MonitorEnter (&java::lang::Class::class$); 
  
!   int index = method->name->hash & MCACHE_SIZE;
  
    method_cache[index].method = method;
    method_cache[index].klass = klass;
--- 947,953 ----
  {
    _Jv_MonitorEnter (&java::lang::Class::class$); 
  
!   int index = method->name->hash16 () & MCACHE_SIZE;
  
    method_cache[index].method = method;
    method_cache[index].klass = klass;
*************** _Jv_LookupInterfaceMethod (jclass klass,
*** 929,941 ****
  
        if (Modifier::isStatic(meth->accflags))
  	throw new java::lang::IncompatibleClassChangeError
! 	  (_Jv_GetMethodString (klass, meth->name));
        if (Modifier::isAbstract(meth->accflags))
  	throw new java::lang::AbstractMethodError
! 	  (_Jv_GetMethodString (klass, meth->name));
        if (! Modifier::isPublic(meth->accflags))
  	throw new java::lang::IllegalAccessError
! 	  (_Jv_GetMethodString (klass, meth->name));
  
        _Jv_AddMethodToCache (klass, meth);
  
--- 973,985 ----
  
        if (Modifier::isStatic(meth->accflags))
  	throw new java::lang::IncompatibleClassChangeError
! 	  (_Jv_GetMethodString (klass, meth));
        if (Modifier::isAbstract(meth->accflags))
  	throw new java::lang::AbstractMethodError
! 	  (_Jv_GetMethodString (klass, meth));
        if (! Modifier::isPublic(meth->accflags))
  	throw new java::lang::IllegalAccessError
! 	  (_Jv_GetMethodString (klass, meth));
  
        _Jv_AddMethodToCache (klass, meth);
  
*************** _Jv_CheckArrayStore (jobject arr, jobjec
*** 1084,1970 ****
      }
  }
  
! #define INITIAL_IOFFSETS_LEN 4
! #define INITIAL_IFACES_LEN 4
! 
! static _Jv_IDispatchTable null_idt = { {SHRT_MAX, 0, NULL} };
! 
! // Generate tables for constant-time assignment testing and interface
! // method lookup. This implements the technique described by Per Bothner
! // <per@bothner.com> on the java-discuss mailing list on 1999-09-02:
! // http://gcc.gnu.org/ml/java/1999-q3/msg00377.html
! void 
! _Jv_PrepareConstantTimeTables (jclass klass)
! {  
!   if (klass->isPrimitive () || klass->isInterface ())
!     return;
!   
!   // Short-circuit in case we've been called already.
!   if ((klass->idt != NULL) || klass->depth != 0)
!     return;
! 
!   // Calculate the class depth and ancestor table. The depth of a class 
!   // is how many "extends" it is removed from Object. Thus the depth of 
!   // java.lang.Object is 0, but the depth of java.io.FilterOutputStream 
!   // is 2. Depth is defined for all regular and array classes, but not 
!   // interfaces or primitive types.
!    
!   jclass klass0 = klass;
!   jboolean has_interfaces = 0;
!   while (klass0 != &java::lang::Object::class$)
!     {
!       has_interfaces += klass0->interface_count;
!       klass0 = klass0->superclass;
!       klass->depth++;
!     }
! 
!   // We do class member testing in constant time by using a small table 
!   // of all the ancestor classes within each class. The first element is 
!   // a pointer to the current class, and the rest are pointers to the 
!   // classes ancestors, ordered from the current class down by decreasing 
!   // depth. We do not include java.lang.Object in the table of ancestors, 
!   // since it is redundant.
! 	
!   klass->ancestors = (jclass *) _Jv_Malloc (klass->depth * sizeof (jclass));
!   klass0 = klass;
!   for (int index = 0; index < klass->depth; index++)
!     {
!       klass->ancestors[index] = klass0;
!       klass0 = klass0->superclass;
!     }
!     
!   if (java::lang::reflect::Modifier::isAbstract (klass->accflags))
!     return;
!   
!   // Optimization: If class implements no interfaces, use a common
!   // predefined interface table.
!   if (!has_interfaces)
!     {
!       klass->idt = &null_idt;
!       return;
!     }
! 
!   klass->idt = 
!     (_Jv_IDispatchTable *) _Jv_Malloc (sizeof (_Jv_IDispatchTable));
!     
!   _Jv_ifaces ifaces;
! 
!   ifaces.count = 0;
!   ifaces.len = INITIAL_IFACES_LEN;
!   ifaces.list = (jclass *) _Jv_Malloc (ifaces.len * sizeof (jclass *));
! 
!   int itable_size = _Jv_GetInterfaces (klass, &ifaces);
! 
!   if (ifaces.count > 0)
!     {
!       klass->idt->cls.itable = 
! 	(void **) _Jv_Malloc (itable_size * sizeof (void *));
!       klass->idt->cls.itable_length = itable_size;
!           
!       jshort *itable_offsets = 
! 	(jshort *) _Jv_Malloc (ifaces.count * sizeof (jshort));
! 
!       _Jv_GenerateITable (klass, &ifaces, itable_offsets);
! 
!       jshort cls_iindex = 
! 	_Jv_FindIIndex (ifaces.list, itable_offsets, ifaces.count);
! 
!       for (int i=0; i < ifaces.count; i++)
! 	{
! 	  ifaces.list[i]->idt->iface.ioffsets[cls_iindex] =
! 	    itable_offsets[i];
! 	}
! 
!       klass->idt->cls.iindex = cls_iindex;	    
! 
!       _Jv_Free (ifaces.list);
!       _Jv_Free (itable_offsets);
!     }
!   else 
!     {
!       klass->idt->cls.iindex = SHRT_MAX;
!     }
! }
! 
! // Return index of item in list, or -1 if item is not present.
! inline jshort
! _Jv_IndexOf (void *item, void **list, jshort list_len)
  {
!   for (int i=0; i < list_len; i++)
      {
!       if (list[i] == item)
!         return i;
      }
-   return -1;
- }
  
! // Find all unique interfaces directly or indirectly implemented by klass.
! // Returns the size of the interface dispatch table (itable) for klass, which 
! // is the number of unique interfaces plus the total number of methods that 
! // those interfaces declare. May extend ifaces if required.
! jshort
! _Jv_GetInterfaces (jclass klass, _Jv_ifaces *ifaces)
! {
!   jshort result = 0;
!   
!   for (int i=0; i < klass->interface_count; i++)
!     {
!       jclass iface = klass->interfaces[i];
! 
!       /* Make sure interface is linked.  */
!       _Jv_WaitForState(iface, JV_STATE_LINKED);
  
!       if (_Jv_IndexOf (iface, (void **) ifaces->list, ifaces->count) == -1)
!         {
! 	  if (ifaces->count + 1 >= ifaces->len)
! 	    {
! 	      /* Resize ifaces list */
! 	      ifaces->len = ifaces->len * 2;
! 	      ifaces->list = (jclass *) _Jv_Realloc (ifaces->list, 
! 	                     ifaces->len * sizeof(jclass));
! 	    }
! 	  ifaces->list[ifaces->count] = iface;
! 	  ifaces->count++;
  
! 	  result += _Jv_GetInterfaces (klass->interfaces[i], ifaces);
! 	}
!     }
!     
!   if (klass->isInterface())
!     {
!       result += klass->method_count + 1;
!     }
!   else
      {
!       if (klass->superclass)
!         {
! 	  result += _Jv_GetInterfaces (klass->superclass, ifaces);
! 	}
!     }
!   return result;
! }
! 
! // Fill out itable in klass, resolving method declarations in each ifaces.
! // itable_offsets is filled out with the position of each iface in itable,
! // such that itable[itable_offsets[n]] == ifaces.list[n].
! void
! _Jv_GenerateITable (jclass klass, _Jv_ifaces *ifaces, jshort *itable_offsets)
! {
!   void **itable = klass->idt->cls.itable;
!   jshort itable_pos = 0;
! 
!   for (int i=0; i < ifaces->count; i++)
!     { 
!       jclass iface = ifaces->list[i];
!       itable_offsets[i] = itable_pos;
!       itable_pos = _Jv_AppendPartialITable (klass, iface, itable, itable_pos);
!       
!       /* Create interface dispatch table for iface */
!       if (iface->idt == NULL)
! 	{
! 	  iface->idt = 
! 	    (_Jv_IDispatchTable *) _Jv_Malloc (sizeof (_Jv_IDispatchTable));
  
! 	  // The first element of ioffsets is its length (itself included).
! 	  jshort *ioffsets = 
! 	    (jshort *) _Jv_Malloc (INITIAL_IOFFSETS_LEN * sizeof (jshort));
! 	  ioffsets[0] = INITIAL_IOFFSETS_LEN;
! 	  for (int i=1; i < INITIAL_IOFFSETS_LEN; i++)
! 	    ioffsets[i] = -1;
  
! 	  iface->idt->iface.ioffsets = ioffsets;	    
! 	}
      }
! }
! 
! // Format method name for use in error messages.
! jstring
! _Jv_GetMethodString (jclass klass, _Jv_Utf8Const *name)
! {
!   jstring r = JvNewStringUTF (klass->name->data);
!   r = r->concat (JvNewStringUTF ("."));
!   r = r->concat (JvNewStringUTF (name->data));
!   return r;
! }
! 
! void 
! _Jv_ThrowNoSuchMethodError ()
! {
!   throw new java::lang::NoSuchMethodError;
! }
! 
! // Each superinterface of a class (i.e. each interface that the class
! // directly or indirectly implements) has a corresponding "Partial
! // Interface Dispatch Table" whose size is (number of methods + 1) words.
! // The first word is a pointer to the interface (i.e. the java.lang.Class
! // instance for that interface).  The remaining words are pointers to the
! // actual methods that implement the methods declared in the interface,
! // in order of declaration.
! //
! // Append partial interface dispatch table for "iface" to "itable", at
! // position itable_pos.
! // Returns the offset at which the next partial ITable should be appended.
! jshort
! _Jv_AppendPartialITable (jclass klass, jclass iface, void **itable, 
!                          jshort pos)
! {
!   using namespace java::lang::reflect;
! 
!   itable[pos++] = (void *) iface;
!   _Jv_Method *meth;
!   
!   for (int j=0; j < iface->method_count; j++)
!     {
!       meth = NULL;
!       for (jclass cl = klass; cl; cl = cl->getSuperclass())
!         {
! 	  meth = _Jv_GetMethodLocal (cl, iface->methods[j].name,
! 				     iface->methods[j].signature);
! 		 
! 	  if (meth)
! 	    break;
! 	}
! 
!       if (meth && (meth->name->data[0] == '<'))
! 	{
! 	  // leave a placeholder in the itable for hidden init methods.
!           itable[pos] = NULL;	
! 	}
!       else if (meth)
!         {
! 	  if (Modifier::isStatic(meth->accflags))
! 	    throw new java::lang::IncompatibleClassChangeError
! 	      (_Jv_GetMethodString (klass, meth->name));
! 	  if (Modifier::isAbstract(meth->accflags))
! 	    throw new java::lang::AbstractMethodError
! 	      (_Jv_GetMethodString (klass, meth->name));
! 	  if (! Modifier::isPublic(meth->accflags))
! 	    throw new java::lang::IllegalAccessError
! 	      (_Jv_GetMethodString (klass, meth->name));
  
! 	  itable[pos] = meth->ncode;
! 	}
!       else
!         {
! 	  // The method doesn't exist in klass. Binary compatibility rules
! 	  // permit this, so we delay the error until runtime using a pointer
! 	  // to a method which throws an exception.
! 	  itable[pos] = (void *) _Jv_ThrowNoSuchMethodError;
! 	}
!       pos++;
!     }
!     
!   return pos;
  }
  
! static _Jv_Mutex_t iindex_mutex;
! static bool iindex_mutex_initialized = false;
! 
! // We need to find the correct offset in the Class Interface Dispatch 
! // Table for a given interface. Once we have that, invoking an interface 
! // method just requires combining the Method's index in the interface 
! // (known at compile time) to get the correct method.  Doing a type test 
! // (cast or instanceof) is the same problem: Once we have a possible Partial 
! // Interface Dispatch Table, we just compare the first element to see if it 
! // matches the desired interface. So how can we find the correct offset?  
! // Our solution is to keep a vector of candiate offsets in each interface 
! // (idt->iface.ioffsets), and in each class we have an index 
! // (idt->cls.iindex) used to select the correct offset from ioffsets.
  //
! // Calculate and return iindex for a new class. 
! // ifaces is a vector of num interfaces that the class implements.
! // offsets[j] is the offset in the interface dispatch table for the
! // interface corresponding to ifaces[j].
! // May extend the interface ioffsets if required.
! jshort
! _Jv_FindIIndex (jclass *ifaces, jshort *offsets, jshort num)
! {
!   int i;
!   int j;
!   
!   // Acquire a global lock to prevent itable corruption in case of multiple 
!   // classes that implement an intersecting set of interfaces being linked
!   // simultaneously. We can assume that the mutex will be initialized
!   // single-threaded.
!   if (! iindex_mutex_initialized)
!     {
!       _Jv_MutexInit (&iindex_mutex);
!       iindex_mutex_initialized = true;
!     }
!   
!   _Jv_MutexLock (&iindex_mutex);
!   
!   for (i=1;; i++)  /* each potential position in ioffsets */
!     {
!       for (j=0;; j++)  /* each iface */
!         {
! 	  if (j >= num)
! 	    goto found;
! 	  if (i >= ifaces[j]->idt->iface.ioffsets[0])
! 	    continue;
! 	  int ioffset = ifaces[j]->idt->iface.ioffsets[i];
! 	  /* We can potentially share this position with another class. */
! 	  if (ioffset >= 0 && ioffset != offsets[j])
! 	    break; /* Nope. Try next i. */	  
! 	}
!     }
!   found:
!   for (j = 0; j < num; j++)
!     {
!       int len = ifaces[j]->idt->iface.ioffsets[0];
!       if (i >= len) 
! 	{
! 	  /* Resize ioffsets. */
! 	  int newlen = 2 * len;
! 	  if (i >= newlen)
! 	    newlen = i + 3;
! 	  jshort *old_ioffsets = ifaces[j]->idt->iface.ioffsets;
! 	  jshort *new_ioffsets = (jshort *) _Jv_Realloc (old_ioffsets, 
! 	                                  newlen * sizeof(jshort));	  
! 	  new_ioffsets[0] = newlen;
! 
! 	  while (len < newlen)
! 	    new_ioffsets[len++] = -1;
! 	  
! 	  ifaces[j]->idt->iface.ioffsets = new_ioffsets;
! 	}
!       ifaces[j]->idt->iface.ioffsets[i] = offsets[j];
!     }
! 
!   _Jv_MutexUnlock (&iindex_mutex);
! 
!   return i;
! }
! 
! // Only used by serialization
! java::lang::reflect::Field *
! java::lang::Class::getPrivateField (jstring name)
! {
!   int hash = name->hashCode ();
! 
!   java::lang::reflect::Field* rfield;
!   for (int i = 0;  i < field_count;  i++)
!     {
!       _Jv_Field *field = &fields[i];
!       if (! _Jv_equal (field->name, name, hash))
! 	continue;
!       rfield = new java::lang::reflect::Field ();
!       rfield->offset = (char*) field - (char*) fields;
!       rfield->declaringClass = this;
!       rfield->name = name;
!       return rfield;
!     }
!   jclass superclass = getSuperclass();
!   if (superclass == NULL)
!     return NULL;
!   rfield = superclass->getPrivateField(name);
!   for (int i = 0; i < interface_count && rfield == NULL; ++i)
!     rfield = interfaces[i]->getPrivateField (name);
!   return rfield;
! }
! 
! // Only used by serialization
! java::lang::reflect::Method *
! java::lang::Class::getPrivateMethod (jstring name, JArray<jclass> *param_types)
  {
!   jstring partial_sig = getSignature (param_types, false);
!   jint p_len = partial_sig->length();
!   _Jv_Utf8Const *utf_name = _Jv_makeUtf8Const (name);
!   for (Class *klass = this; klass; klass = klass->getSuperclass())
      {
!       int i = klass->isPrimitive () ? 0 : klass->method_count;
        while (--i >= 0)
  	{
  	  if (_Jv_equalUtf8Consts (klass->methods[i].name, utf_name)
! 	      && _Jv_equaln (klass->methods[i].signature, partial_sig, p_len))
  	    {
  	      // Found it.
  	      using namespace java::lang::reflect;
  
! 	      Method *rmethod = new Method ();
! 	      rmethod->offset = ((char *) (&klass->methods[i])
! 				 - (char *) klass->methods);
! 	      rmethod->declaringClass = klass;
! 	      return rmethod;
! 	    }
! 	}
!     }
!   throw new java::lang::NoSuchMethodException (name);
! }
! 
! // Private accessor method for Java code to retrieve the protection domain.
! java::security::ProtectionDomain *
! java::lang::Class::getProtectionDomain0 ()
! {
!   return protectionDomain;
! }
! 
! JArray<jobject> *
! java::lang::Class::getSigners()
! {
!   return hack_signers;
! }
! 
! void
! java::lang::Class::setSigners(JArray<jobject> *s)
! {
!   hack_signers = s;
! }
! 
! // Functions for indirect dispatch (symbolic virtual binding) support.
! 
! // There are two tables, atable and otable.  atable is an array of
! // addresses, and otable is an array of offsets, and these are used
! // for static and virtual members respectively.
! 
! // {a,o}table_syms is an array of _Jv_MethodSymbols.  Each such symbol
! // is a tuple of {classname, member name, signature}.
! // _Jv_LinkSymbolTable() scans these two arrays and fills in the
! // corresponding atable and otable with the addresses of static
! // members and the offsets of virtual members.
! 
! // The offset (in bytes) for each resolved method or field is placed
! // at the corresponding position in the virtual method offset table
! // (klass->otable). 
! 
! // The same otable and atable may be shared by many classes.
! 
! void
! _Jv_LinkSymbolTable(jclass klass)
! {
!   //// FIXME: Need to lock the tables ////
!   
!   int index = 0;
!   _Jv_MethodSymbol sym;
!   if (klass->otable == NULL
!       || klass->otable->state != 0)
!     goto atable;
!    
!   klass->otable->state = 1;
! 
!   for (index = 0; sym = klass->otable_syms[index], sym.name != NULL; index++)
!     {
!       // FIXME: Why are we passing NULL as the class loader?
!       jclass target_class = _Jv_FindClass (sym.class_name, NULL);
!       _Jv_Method *meth = NULL;            
! 
!       const _Jv_Utf8Const *signature = sym.signature;
! 
!       {
! 	static char *bounce = (char *)_Jv_ThrowNoSuchMethodError;
! 	ptrdiff_t offset = (char *)(klass->vtable) - bounce;
! 	klass->otable->offsets[index] = offset;
!       }
! 
!       if (target_class == NULL)
! 	continue;
! 
!       if (target_class->isInterface())
! 	{
! 	  // FIXME: This does not yet fully conform to binary compatibility
! 	  // rules. It will break if a declaration is moved into a 
! 	  // superinterface.
! 	  for (jclass cls = target_class; cls != 0; cls = cls->getSuperclass ())
! 	    {
! 	      for (int i=0; i < cls->method_count; i++)
! 		{
! 		  meth = &cls->methods[i];
! 		  if (_Jv_equalUtf8Consts (sym.name, meth->name)
! 		      && _Jv_equalUtf8Consts (signature, meth->signature))
! 		    {
! 		      klass->otable->offsets[index] = i + 1;
! 		      goto found;
! 		    }
! 		}
! 	    
! 	    }
! 	found:
! 	  continue;
! 	}
! 
!       // We're looking for a field or a method, and we can tell
!       // which is needed by looking at the signature.
!       if (signature->length >= 2
! 	  && signature->data[0] == '(')
! 	{
!  	  // If the target class does not have a vtable_method_count yet, 
! 	  // then we can't tell the offsets for its methods, so we must lay 
! 	  // it out now.
! 	  if (target_class->vtable_method_count == -1)
! 	    {
! 	      JvSynchronize sync (target_class);
! 	      _Jv_LayoutVTableMethods (target_class);
! 	    }
! 		
! 	  meth = _Jv_LookupDeclaredMethod(target_class, sym.name, 
! 					  sym.signature);
! 		
! 	  if (meth != NULL)
! 	    {
! 	      klass->otable->offsets[index] = 
! 		_Jv_VTable::idx_to_offset (meth->index);	      
! 	    }
! 
! 	  continue;
! 	}
! 
!       // try fields
!       {
! 	_Jv_Field *the_field = NULL;
! 
! 	for (jclass cls = target_class; cls != 0; cls = cls->getSuperclass ())
! 	  {
! 	    for (int i = 0; i < cls->field_count; i++)
! 	      {
! 		_Jv_Field *field = &cls->fields[i];
! 		if (! _Jv_equalUtf8Consts (field->name, sym.name))
! 		  continue;
! 
! 		// FIXME: What access checks should we perform here?
! // 		if (_Jv_CheckAccess (klass, cls, field->flags))
! // 		  {
! 
! 		if (!field->isResolved ())
! 		  _Jv_ResolveField (field, cls->loader);
! 
! // 		if (field_type != 0 && field->type != field_type)
! // 		  throw new java::lang::LinkageError
! // 		    (JvNewStringLatin1 
! // 		     ("field type mismatch with different loaders"));
! 
! 		the_field = field;
! 		goto end_of_field_search;
! 	      }
! 	  }
!       end_of_field_search:
! 	if (the_field != NULL)
! 	  {
! 	    if (the_field->flags & 0x0008 /* Modifier::STATIC */)
! 	      {	      
! 		throw new java::lang::IncompatibleClassChangeError;
! 	      }
! 	    else
! 	      {
! 		klass->otable->offsets[index] = the_field->u.boffset;
! 	      }
! 	  }
! 	else
! 	  {
! 	    throw new java::lang::NoSuchFieldError
! 	      (_Jv_NewStringUtf8Const (sym.name));
! 	  }
!       }
!     }
! 
!  atable:
!   if (klass->atable == NULL
!       || klass->atable->state != 0)
!     return;
! 
!   klass->atable->state = 1;
! 
!   for (index = 0; sym = klass->atable_syms[index], sym.name != NULL; index++)
!     {
!       // FIXME: Why are we passing NULL as the class loader?
!       jclass target_class = _Jv_FindClass (sym.class_name, NULL);
!       _Jv_Method *meth = NULL;            
!       const _Jv_Utf8Const *signature = sym.signature;
! 
!       // ??? Setting this pointer to null will at least get us a
!       // NullPointerException
!       klass->atable->addresses[index] = NULL;
!       
!       if (target_class == NULL)
! 	continue;
!       
!       // We're looking for a static field or a static method, and we
!       // can tell which is needed by looking at the signature.
!       if (signature->length >= 2
! 	  && signature->data[0] == '(')
! 	{
!  	  // If the target class does not have a vtable_method_count yet, 
! 	  // then we can't tell the offsets for its methods, so we must lay 
! 	  // it out now.
! 	  if (target_class->vtable_method_count == -1)
! 	    {
! 	      JvSynchronize sync (target_class);
! 	      _Jv_LayoutVTableMethods (target_class);
! 	    }
! 	  
! 	  meth = _Jv_LookupDeclaredMethod(target_class, sym.name, 
! 					  sym.signature);
! 	  
! 	  if (meth != NULL)
! 	    {
! 	      if (meth->ncode) // Maybe abstract?
! 		klass->atable->addresses[index] = meth->ncode;
! #ifdef INTERPRETER
! 	      else if (_Jv_IsInterpretedClass (target_class))
! 		_Jv_Defer_Resolution (target_class, meth, 
! 				      &klass->atable->addresses[index]);
! #endif
! 	    }
! 	  else
! 	    klass->atable->addresses[index] = (void *)_Jv_ThrowNoSuchMethodError;
! 
! 	  continue;
! 	}
! 
!       // try fields
!       {
! 	_Jv_Field *the_field = NULL;
! 
! 	for (jclass cls = target_class; cls != 0; cls = cls->getSuperclass ())
! 	  {
! 	    for (int i = 0; i < cls->field_count; i++)
! 	      {
! 		_Jv_Field *field = &cls->fields[i];
! 		if (! _Jv_equalUtf8Consts (field->name, sym.name))
! 		  continue;
! 
! 		// FIXME: What access checks should we perform here?
! // 		if (_Jv_CheckAccess (klass, cls, field->flags))
! // 		  {
! 
! 		if (!field->isResolved ())
! 		  _Jv_ResolveField (field, cls->loader);
! 		
! // 		if (field_type != 0 && field->type != field_type)
! // 		  throw new java::lang::LinkageError
! // 		    (JvNewStringLatin1 
! // 		     ("field type mismatch with different loaders"));
! 
! 		the_field = field;
! 		goto end_of_static_field_search;
! 	      }
! 	  }
!       end_of_static_field_search:
! 	if (the_field != NULL)
! 	  {
! 	    if (the_field->flags & 0x0008 /* Modifier::STATIC */)
! 	      {	      
! 		klass->atable->addresses[index] = the_field->u.addr;
! 	      }
! 	    else
! 	      {
! 		throw new java::lang::IncompatibleClassChangeError;
! 	      }
! 	  }
! 	else
! 	  {
! 	    throw new java::lang::NoSuchFieldError
! 	      (_Jv_NewStringUtf8Const (sym.name));
! 	  }
!       }
!     }
! }
! 
! 
! // For each catch_record in the list of caught classes, fill in the
! // address field.
! void 
! _Jv_linkExceptionClassTable (jclass self)
! {
!   struct _Jv_CatchClass *catch_record = self->catch_classes;
!   if (!catch_record || catch_record->classname)
!     return;  
!   catch_record++;
!   while (catch_record->classname)
!     {
!       jclass target_class = _Jv_FindClass (catch_record->classname,  
! 					   self->getClassLoaderInternal ());
!       *catch_record->address = target_class;
!       catch_record++;
!     }
!   self->catch_classes->classname = (_Jv_Utf8Const *)-1;
! }
!   
! // This is put in empty vtable slots.
! static void
! _Jv_abstractMethodError (void)
! {
!   throw new java::lang::AbstractMethodError();
! }
! 
! // Prepare virtual method declarations in KLASS, and any superclasses as 
! // required, by determining their vtable index, setting method->index, and
! // finally setting the class's vtable_method_count. Must be called with the
! // lock for KLASS held.
! void
! _Jv_LayoutVTableMethods (jclass klass)
! {
!   if (klass->vtable != NULL || klass->isInterface() 
!       || klass->vtable_method_count != -1)
!     return;
! 
!   jclass superclass = klass->superclass;
! 
!   typedef unsigned int uaddr __attribute__ ((mode (pointer)));
  
!   // If superclass looks like a constant pool entry,
!   // resolve it now.
!   if ((uaddr)superclass < (uaddr)klass->constants.size)
!     {
!       if (klass->state < JV_STATE_LINKED)
! 	{
! 	  _Jv_Utf8Const *name = klass->constants.data[(int)superclass].utf8;
! 	  superclass = _Jv_FindClass (name, klass->loader);
! 	  if (! superclass)
! 	    {
! 	      jstring str = _Jv_NewStringUTF (name->data);
! 	      throw new java::lang::NoClassDefFoundError (str);
  	    }
  	}
-       else
- 	superclass = klass->constants.data[(int)superclass].clazz;
-     }
- 
-   if (superclass != NULL && superclass->vtable_method_count == -1)
-     {
-       JvSynchronize sync (superclass);
-       _Jv_LayoutVTableMethods (superclass);
-     }
- 
-   int index = (superclass == NULL ? 0 : superclass->vtable_method_count);
- 
-   for (int i = 0; i < klass->method_count; ++i)
-     {
-       _Jv_Method *meth = &klass->methods[i];
-       _Jv_Method *super_meth = NULL;
- 
-       if (! _Jv_isVirtualMethod (meth))
- 	continue;
- 
-       // FIXME: Must check that we don't override:
-       // - Package-private method where superclass is in different package.
-       // - Final or less-accessible declaration in superclass (check binary 
-       //   spec, do we allocate new vtable entry or put throw node in vtable?)
-       // - Static or private method in superclass.
- 
-       if (superclass != NULL)
- 	{
- 	  super_meth = _Jv_LookupDeclaredMethod (superclass, meth->name, 
- 						 meth->signature);
- 	}
- 
-       if (super_meth)
-         meth->index = super_meth->index;
-       else
- 	meth->index = index++;
      }
  
!   klass->vtable_method_count = index;
! }
! 
! // Set entries in VTABLE for virtual methods declared in KLASS. If
! // KLASS has an immediate abstract parent, recursively do its methods
! // first.  FLAGS is used to determine which slots we've actually set.
! void
! _Jv_SetVTableEntries (jclass klass, _Jv_VTable *vtable, jboolean *flags)
! {
!   using namespace java::lang::reflect;
! 
!   jclass superclass = klass->getSuperclass();
! 
!   if (superclass != NULL && (superclass->getModifiers() & Modifier::ABSTRACT))
!     _Jv_SetVTableEntries (superclass, vtable, flags);
! 
!   for (int i = klass->method_count - 1; i >= 0; i--)
!     {
!       _Jv_Method *meth = &klass->methods[i];
!       if (meth->index == (_Jv_ushort) -1)
! 	continue;
!       if ((meth->accflags & Modifier::ABSTRACT))
! 	{
! 	  vtable->set_method(meth->index, (void *) &_Jv_abstractMethodError);
! 	  flags[meth->index] = false;
! 	}
!       else
! 	{
! 	  vtable->set_method(meth->index, meth->ncode);
! 	  flags[meth->index] = true;
! 	}
!     }
! }
! 
! // Allocate and lay out the virtual method table for KLASS. This will also
! // cause vtables to be generated for any non-abstract superclasses, and
! // virtual method layout to occur for any abstract superclasses. Must be
! // called with monitor lock for KLASS held.
! void
! _Jv_MakeVTable (jclass klass)
! {
!   using namespace java::lang::reflect;  
! 
!   if (klass->vtable != NULL || klass->isInterface() 
!       || (klass->accflags & Modifier::ABSTRACT))
!     return;
! 
!   //  out before we can create a vtable. 
!   if (klass->vtable_method_count == -1)
!     _Jv_LayoutVTableMethods (klass);
! 
!   // Allocate the new vtable.
!   _Jv_VTable *vtable = _Jv_VTable::new_vtable (klass->vtable_method_count);
!   klass->vtable = vtable;
! 
!   jboolean flags[klass->vtable_method_count];
!   for (int i = 0; i < klass->vtable_method_count; ++i)
!     flags[i] = false;
! 
!   // Copy the vtable of the closest non-abstract superclass.
!   jclass superclass = klass->superclass;
!   if (superclass != NULL)
      {
!       while ((superclass->accflags & Modifier::ABSTRACT) != 0)
! 	superclass = superclass->superclass;
! 
!       if (superclass->vtable == NULL)
! 	{
! 	  JvSynchronize sync (superclass);
! 	  _Jv_MakeVTable (superclass);
! 	}
! 
!       for (int i = 0; i < superclass->vtable_method_count; ++i)
  	{
! 	  vtable->set_method (i, superclass->vtable->get_method (i));
! 	  flags[i] = true;
  	}
      }
  
!   // Set the class pointer and GC descriptor.
!   vtable->clas = klass;
!   vtable->gc_descr = _Jv_BuildGCDescr (klass);
! 
!   // For each virtual declared in klass and any immediate abstract 
!   // superclasses, set new vtable entry or override an old one.
!   _Jv_SetVTableEntries (klass, vtable, flags);
! 
!   // It is an error to have an abstract method in a concrete class.
!   if (! (klass->accflags & Modifier::ABSTRACT))
!     {
!       for (int i = 0; i < klass->vtable_method_count; ++i)
! 	if (! flags[i])
! 	  {
! 	    using namespace java::lang;
! 	    while (klass != NULL)
! 	      {
! 		for (int j = 0; j < klass->method_count; ++j)
! 		  {
! 		    if (klass->methods[i].index == i)
! 		      {
! 			StringBuffer *buf = new StringBuffer ();
! 			buf->append (_Jv_NewStringUtf8Const (klass->methods[i].name));
! 			buf->append ((jchar) ' ');
! 			buf->append (_Jv_NewStringUtf8Const (klass->methods[i].signature));
! 			throw new AbstractMethodError (buf->toString ());
! 		      }
! 		  }
! 		klass = klass->getSuperclass ();
! 	      }
! 	    // Couldn't find the name, which is weird.
! 	    // But we still must throw the error.
! 	    throw new AbstractMethodError ();
! 	  }
!     }
  }
--- 1128,1231 ----
      }
  }
  
! jboolean
! _Jv_IsAssignableFromSlow (jclass target, jclass source)
  {
!   // First, strip arrays.
!   while (target->isArray ())
      {
!       // If target is array, source must be as well.
!       if (! source->isArray ())
!        return false;
!       target = target->getComponentType ();
!       source = source->getComponentType ();
      }
  
!   // Quick success.
!   if (target == &java::lang::Object::class$)
!     return true;
  
!   // Ensure that the classes have their supers installed.
!   _Jv_Linker::wait_for_state (source, JV_STATE_LOADING);
!   _Jv_Linker::wait_for_state (target, JV_STATE_LOADING);
  
!   do
      {
!       if (source == target)
!        return true;
  
!       if (target->isPrimitive () || source->isPrimitive ())
!        return false;
  
!       if (target->isInterface ())
!        {
!          for (int i = 0; i < source->interface_count; ++i)
!            {
!              // We use a recursive call because we also need to
!              // check superinterfaces.
!              if (_Jv_IsAssignableFromSlow (target, source->getInterface (i)))
!                return true;
!            }
!        }
!       source = source->getSuperclass ();
      }
!   while (source != NULL);
  
!   return false;
  }
  
! // Lookup an interface method by name.  This is very similar to
! // purpose to _getMethod, but the interfaces are quite different.  It
! // might be a good idea for _getMethod to call this function.
  //
! // Return true of the method is found, with the class in FOUND_CLASS
! // and the index in INDEX.
! bool
! _Jv_getInterfaceMethod (jclass search_class, jclass &found_class, int &index,
! 			const _Jv_Utf8Const *utf_name,  
! 			const _Jv_Utf8Const *utf_sig)
  {
!    for (jclass klass = search_class; klass; klass = klass->getSuperclass())
      {
!       // FIXME: Throw an exception?
!       if (!klass->isInterface ())
! 	return false;
!       
!       int i = klass->method_count;
        while (--i >= 0)
  	{
  	  if (_Jv_equalUtf8Consts (klass->methods[i].name, utf_name)
! 	      && _Jv_equalUtf8Consts (klass->methods[i].signature, utf_sig))
  	    {
  	      // Found it.
  	      using namespace java::lang::reflect;
  
! 	      // FIXME: Method must be public.  Throw an exception?
! 	      if (! Modifier::isPublic (klass->methods[i].accflags))
! 		break;
  
! 	      found_class = klass;
! 	      // Interface method indexes count from 1.
! 	      index = i+1;
! 	      return true;
  	    }
  	}
      }
  
!   // If we haven't found a match, and this class is an interface, then
!   // check all the superinterfaces.
!   if (search_class->isInterface())
      {
!       for (int i = 0; i < search_class->interface_count; ++i)
  	{
! 	  using namespace java::lang::reflect;
! 	  bool found = _Jv_getInterfaceMethod (search_class->interfaces[i], 
! 					   found_class, index,
! 					   utf_name, utf_sig);
! 	  if (found)
! 	    return true;
  	}
      }
  
!   return false;
  }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natClassLoader.cc gcc-4.0.0/libjava/java/lang/natClassLoader.cc
*** gcc-3.4.3/libjava/java/lang/natClassLoader.cc	Fri Jan  9 17:10:43 2004
--- gcc-4.0.0/libjava/java/lang/natClassLoader.cc	Thu Apr 14 15:39:52 2005
***************
*** 1,6 ****
  // natClassLoader.cc - Implementation of java.lang.ClassLoader native methods.
  
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natClassLoader.cc - Implementation of java.lang.ClassLoader native methods.
  
! /* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 13,22 ****
--- 13,24 ----
  #include <config.h>
  
  #include <stdlib.h>
+ #include <stdio.h>
  #include <string.h>
  
  #include <gcj/cni.h>
  #include <jvm.h>
+ #include <execution.h>
  
  #include <java-threads.h>
  #include <java-interp.h>
*************** details.  */
*** 24,38 ****
  #include <java/lang/Character.h>
  #include <java/lang/Thread.h>
  #include <java/lang/ClassLoader.h>
- #include <gnu/gcj/runtime/VMClassLoader.h>
  #include <java/lang/InternalError.h>
  #include <java/lang/IllegalAccessError.h>
  #include <java/lang/LinkageError.h>
- #include <java/lang/ClassFormatError.h>
  #include <java/lang/NoClassDefFoundError.h>
  #include <java/lang/ClassNotFoundException.h>
  #include <java/lang/ClassCircularityError.h>
  #include <java/lang/IncompatibleClassChangeError.h>
  #include <java/lang/VirtualMachineError.h>
  #include <java/lang/VMClassLoader.h>
  #include <java/lang/reflect/Modifier.h>
--- 26,39 ----
  #include <java/lang/Character.h>
  #include <java/lang/Thread.h>
  #include <java/lang/ClassLoader.h>
  #include <java/lang/InternalError.h>
  #include <java/lang/IllegalAccessError.h>
  #include <java/lang/LinkageError.h>
  #include <java/lang/NoClassDefFoundError.h>
  #include <java/lang/ClassNotFoundException.h>
  #include <java/lang/ClassCircularityError.h>
  #include <java/lang/IncompatibleClassChangeError.h>
+ #include <java/lang/ClassFormatError.h>
  #include <java/lang/VirtualMachineError.h>
  #include <java/lang/VMClassLoader.h>
  #include <java/lang/reflect/Modifier.h>
*************** details.  */
*** 40,354 ****
  #include <java/lang/StringBuffer.h>
  #include <java/io/Serializable.h>
  #include <java/lang/Cloneable.h>
  
! /////////// java.lang.ClassLoader native methods ////////////
! 
! java::lang::Class *
! java::lang::VMClassLoader::defineClass (java::lang::ClassLoader *loader,
! 					jstring name,
! 					jbyteArray data, 
! 					jint offset,
! 					jint length,
! 					java::security::ProtectionDomain *pd)
! {
! #ifdef INTERPRETER
!   jclass klass;
!   klass = (jclass) JvAllocObject (&java::lang::Class::class$,
! 				  sizeof (_Jv_InterpClass));
! 
!   // Synchronize on the class, so that it is not attempted initialized
!   // until we're done loading.
!   JvSynchronize sync (klass);
! 
!   // Record the defining loader.  For the system class loader, we
!   // record NULL.
!   if (loader != java::lang::ClassLoader::getSystemClassLoader())
!     klass->loader = loader;
! 
!   if (name != 0)
!     {
!       _Jv_Utf8Const *name2 = _Jv_makeUtf8Const (name);
! 
!       if (! _Jv_VerifyClassName (name2))
! 	throw new java::lang::ClassFormatError
! 	  (JvNewStringLatin1 ("erroneous class name"));
! 
!       klass->name = name2;
!     }
! 
!   try
!     {
!       _Jv_DefineClass (klass, data, offset, length);
!     }
!   catch (java::lang::Throwable *ex)
!     {
!       klass->state = JV_STATE_ERROR;
!       klass->notifyAll ();
! 
!       _Jv_UnregisterClass (klass);
! 
!       // If EX is not a ClassNotFoundException, that's ok, because we
!       // account for the possibility in defineClass().
!       throw ex;
!     }
!     
!   klass->protectionDomain = pd;
! 
!   // if everything proceeded sucessfully, we're loaded.
!   JvAssert (klass->state == JV_STATE_LOADED);
! 
!   return klass;
  
! #else // INTERPRETER
  
!   return 0;
! #endif
! }
  
! // Finish linking a class.  Only called from ClassLoader::resolveClass.
! void
! java::lang::VMClassLoader::linkClass0 (java::lang::Class *klass)
! {
!   _Jv_WaitForState (klass, JV_STATE_LINKED);
! }
  
! void
! java::lang::VMClassLoader::markClassErrorState0 (java::lang::Class *klass)
! {
!   klass->state = JV_STATE_ERROR;
!   klass->notifyAll ();
! }
  
- java::lang::ClassLoader *
- java::lang::VMClassLoader::getSystemClassLoaderInternal()
- {
-   _Jv_InitClass (&gnu::gcj::runtime::VMClassLoader::class$);
-   return gnu::gcj::runtime::VMClassLoader::instance;
- }
  
! jclass
! java::lang::VMClassLoader::getPrimitiveClass (jchar type)
! {
!   char sig[2];
!   sig[0] = (char) type;
!   sig[1] = '\0';
!   return _Jv_FindClassFromSignature (sig, NULL);
! }
  
  jclass
! java::lang::VMClassLoader::loadClass(jstring name, jboolean resolve)
! {
!   _Jv_Utf8Const *utf = _Jv_makeUtf8Const (name);
!   // FIXME: we culd make _Jv_FindClassFromSignature a template.
!   jclass klass = _Jv_FindClassInCache (utf, NULL);
!   if (klass && resolve)
!     _Jv_InitClass (klass);
!   return klass;
! }
! 
! void
! _Jv_WaitForState (jclass klass, int state)
! {
!   if (klass->state >= state)
!     return;
!   
!   _Jv_MonitorEnter (klass) ;
! 
!   if (state == JV_STATE_LINKED)
!     {
!       // Must call _Jv_PrepareCompiledClass while holding the class
!       // mutex.
! #ifdef INTERPRETER
!       if (_Jv_IsInterpretedClass (klass))
! 	_Jv_PrepareClass (klass);
! #endif
!       _Jv_PrepareCompiledClass (klass);
!       _Jv_MonitorExit (klass);
!       return;
!     }
! 	
!   java::lang::Thread *self = java::lang::Thread::currentThread();
! 
!   // this is similar to the strategy for class initialization.
!   // if we already hold the lock, just leave.
!   while (klass->state <= state
! 	 && klass->thread 
! 	 && klass->thread != self)
!     klass->wait ();
! 
!   _Jv_MonitorExit (klass);
! 
!   if (klass->state == JV_STATE_ERROR)
!     throw new java::lang::LinkageError;
! }
! 
! typedef unsigned int uaddr __attribute__ ((mode (pointer)));
! 
! /** This function does class-preparation for compiled classes.  
!     NOTE: It contains replicated functionality from
!     _Jv_ResolvePoolEntry, and this is intentional, since that function
!     lives in resolve.cc which is entirely conditionally compiled.
!  */
! void
! _Jv_PrepareCompiledClass (jclass klass)
  {
!   if (klass->state >= JV_STATE_LINKED)
!     return;
! 
!   // Short-circuit, so that mutually dependent classes are ok.
!   klass->state = JV_STATE_LINKED;
! 
!   _Jv_Constants *pool = &klass->constants;
! 
!   // Resolve class constants first, since other constant pool
!   // entries may rely on these.
!   for (int index = 1; index < pool->size; ++index)
!     {
!       if (pool->tags[index] == JV_CONSTANT_Class)
! 	{
! 	  _Jv_Utf8Const *name = pool->data[index].utf8;
! 	  
! 	  jclass found;
! 	  if (name->data[0] == '[')
! 	    found = _Jv_FindClassFromSignature (&name->data[0],
! 						klass->loader);
! 	  else
! 	    found = _Jv_FindClass (name, klass->loader);
! 		
! 	  if (! found)
! 	    {
! 	      jstring str = _Jv_NewStringUTF (name->data);
! 	      throw new java::lang::NoClassDefFoundError (str);
! 	    }
! 
! 	  pool->data[index].clazz = found;
! 	  pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
! 	}
!     }
! 
!   // If superclass looks like a constant pool entry,
!   // resolve it now.
!   if ((uaddr) klass->superclass < pool->size)
!     klass->superclass = pool->data[(int) klass->superclass].clazz;
! 
!   // Likewise for interfaces.
!   for (int i = 0; i < klass->interface_count; i++)
!     if ((uaddr) klass->interfaces[i] < pool->size)
!       klass->interfaces[i] = pool->data[(int) klass->interfaces[i]].clazz;
! 
!   // Resolve the remaining constant pool entries.
!   for (int index = 1; index < pool->size; ++index)
!     {
!       if (pool->tags[index] == JV_CONSTANT_String)
! 	{
! 	  jstring str;
! 
! 	  str = _Jv_NewStringUtf8Const (pool->data[index].utf8);
! 	  pool->data[index].o = str;
! 	  pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
! 	}
!     }
! 
! #ifdef INTERPRETER
!   // FIXME: although the comment up top says that this function is
!   // only called for compiled classes, it is actually called for every
!   // class.
!   if (! _Jv_IsInterpretedClass (klass))
!     {
! #endif /* INTERPRETER */
!       jfieldID f = JvGetFirstStaticField (klass);
!       for (int n = JvNumStaticFields (klass); n > 0; --n)
! 	{
! 	  int mod = f->getModifiers ();
! 	  // If we have a static String field with a non-null initial
! 	  // value, we know it points to a Utf8Const.
! 	  _Jv_ResolveField(f, klass->loader);
! 	  if (f->getClass () == &java::lang::String::class$
! 	      && java::lang::reflect::Modifier::isStatic (mod))
! 	    {
! 	      jstring *strp = (jstring *) f->u.addr;
! 	      if (*strp)
! 		*strp = _Jv_NewStringUtf8Const ((_Jv_Utf8Const *) *strp);
! 	    }
! 	  f = f->getNextField ();
! 	}
! #ifdef INTERPRETER
!     }
! #endif /* INTERPRETER */
! 
!   klass->notifyAll ();
! 
!   _Jv_PushClass (klass);
  }
  
- 
- //
- //  A single class can have many "initiating" class loaders,
- //  and a single "defining" class loader.  The Defining
- //  class loader is what is returned from Class.getClassLoader()
- //  and is used when loading dependent classes during resolution.
- //  The set of initiating class loaders are used to ensure
- //  safety of linking, and is maintained in the hash table
- //  "initiated_classes".  A defining classloader is by definition also
- //  initiating, so we only store classes in this table if they have more
- //  than one class loader associated.
- //
- 
- 
- // Size of local hash table.
- #define HASH_LEN 1013
- 
- // Hash function for Utf8Consts.
- #define HASH_UTF(Utf) (((Utf)->hash) % HASH_LEN)
- 
- struct _Jv_LoaderInfo
- {
-   _Jv_LoaderInfo          *next;
-   java::lang::Class       *klass;
-   java::lang::ClassLoader *loader;
- };
- 
- static _Jv_LoaderInfo *initiated_classes[HASH_LEN];
- static jclass loaded_classes[HASH_LEN];
- 
- // This is the root of a linked list of classes
- 
  
  
  jclass
! _Jv_FindClassInCache (_Jv_Utf8Const *name, java::lang::ClassLoader *loader)
  {
    JvSynchronize sync (&java::lang::Class::class$);
    jint hash = HASH_UTF (name);
  
-   if (loader && loader == java::lang::ClassLoader::getSystemClassLoader())
-     loader = NULL;
- 
-   // first, if LOADER is a defining loader, then it is also initiating
    jclass klass;
!   for (klass = loaded_classes[hash]; klass; klass = klass->next)
      {
!       if (loader == klass->loader && _Jv_equalUtf8Consts (name, klass->name))
  	break;
      }
  
-   // otherwise, it may be that the class in question was defined
-   // by some other loader, but that the loading was initiated by 
-   // the loader in question.
-   if (!klass)
-     {
-       _Jv_LoaderInfo *info;
-       for (info = initiated_classes[hash]; info; info = info->next)
- 	{
- 	  if (loader == info->loader
- 	      && _Jv_equalUtf8Consts (name, info->klass->name))
- 	    {
- 	      klass = info->klass;
- 	      break;
- 	    }
- 	}
-     }
- 
    return klass;
  }
  
--- 41,97 ----
  #include <java/lang/StringBuffer.h>
  #include <java/io/Serializable.h>
  #include <java/lang/Cloneable.h>
+ #include <java/util/HashMap.h>
+ #include <gnu/gcj/runtime/BootClassLoader.h>
  
! // Size of local hash table.
! #define HASH_LEN 1013
  
! // Hash function for Utf8Consts.
! #define HASH_UTF(Utf) ((Utf)->hash16() % HASH_LEN)
  
! static jclass loaded_classes[HASH_LEN];
  
! // This is the root of a linked list of classes
! static jclass stack_head;
  
! // While bootstrapping we keep a list of classes we found, so that we
! // can register their packages.  There aren't many of these so we
! // just keep a small buffer here and abort if we overflow.
! #define BOOTSTRAP_CLASS_LIST_SIZE 20
! static jclass bootstrap_class_list[BOOTSTRAP_CLASS_LIST_SIZE];
! static int bootstrap_index;
  
  
! 
  
  jclass
! java::lang::ClassLoader::loadClassFromSig(jstring name)
  {
!   int len = _Jv_GetStringUTFLength (name);
!   char sig[len + 1];
!   _Jv_GetStringUTFRegion (name, 0, name->length(), sig);
!   return _Jv_FindClassFromSignature(sig, this);
  }
  
  
  
+ // This tries to find a class in our built-in cache.  This cache is
+ // used only for classes which are linked in to the executable or
+ // loaded via dlopen().
  jclass
! _Jv_FindClassInCache (_Jv_Utf8Const *name)
  {
    JvSynchronize sync (&java::lang::Class::class$);
    jint hash = HASH_UTF (name);
  
    jclass klass;
!   for (klass = loaded_classes[hash]; klass; klass = klass->next_or_version)
      {
!       if (_Jv_equalUtf8Consts (name, klass->name))
  	break;
      }
  
    return klass;
  }
  
*************** _Jv_UnregisterClass (jclass the_class)
*** 359,404 ****
    jint hash = HASH_UTF(the_class->name);
  
    jclass *klass = &(loaded_classes[hash]);
!   for ( ; *klass; klass = &((*klass)->next))
      {
        if (*klass == the_class)
  	{
! 	  *klass = (*klass)->next;
  	  break;
  	}
      }
- 
-   _Jv_LoaderInfo **info = &(initiated_classes[hash]);
-   for ( ; ; info = &((*info)->next))
-     {
-       while (*info && (*info)->klass == the_class)
- 	{
- 	  _Jv_LoaderInfo *old = *info;
- 	  *info = (*info)->next;
- 	  _Jv_Free (old);
- 	}
- 
-       if (*info == NULL)
- 	break;
-     }
  }
  
  void
  _Jv_RegisterInitiatingLoader (jclass klass, java::lang::ClassLoader *loader)
  {
!   if (loader && loader == java::lang::ClassLoader::getSystemClassLoader())
!     loader = NULL;
! 
!   // This information can't be visible to the GC.
!   _Jv_LoaderInfo *info
!     = (_Jv_LoaderInfo *) _Jv_Malloc (sizeof(_Jv_LoaderInfo));
!   jint hash = HASH_UTF(klass->name);
  
!   JvSynchronize sync (&java::lang::Class::class$);
!   info->loader = loader;
!   info->klass  = klass;
!   info->next   = initiated_classes[hash];
!   initiated_classes[hash] = info;
  }
  
  // This function is called many times during startup, before main() is
--- 102,134 ----
    jint hash = HASH_UTF(the_class->name);
  
    jclass *klass = &(loaded_classes[hash]);
!   for ( ; *klass; klass = &((*klass)->next_or_version))
      {
        if (*klass == the_class)
  	{
! 	  *klass = (*klass)->next_or_version;
  	  break;
  	}
      }
  }
  
+ // Register an initiating class loader for a given class.
  void
  _Jv_RegisterInitiatingLoader (jclass klass, java::lang::ClassLoader *loader)
  {
!   if (! loader)
!     loader = java::lang::ClassLoader::systemClassLoader;
!   loader->loadedClasses->put(klass->name->toString(), klass);
! }
  
! // If we found an error while defining an interpreted class, we must
! // go back and unregister it.
! void
! _Jv_UnregisterInitiatingLoader (jclass klass, java::lang::ClassLoader *loader)
! {
!   if (! loader)
!     loader = java::lang::ClassLoader::systemClassLoader;
!   loader->loadedClasses->remove(klass->name->toString());
  }
  
  // This function is called many times during startup, before main() is
*************** _Jv_RegisterInitiatingLoader (jclass kla
*** 407,424 ****
  // class chain.  At all other times, the caller should synchronize on
  // Class::class$.
  void
! _Jv_RegisterClasses (jclass *classes)
  {
    for (; *classes; ++classes)
      {
        jclass klass = *classes;
  
!       (*_Jv_RegisterClassHook) (klass);
  
!       // registering a compiled class causes
!       // it to be immediately "prepared".  
!       if (klass->state == JV_STATE_NOTHING)
! 	klass->state = JV_STATE_COMPILED;
      }
  }
  
--- 137,164 ----
  // class chain.  At all other times, the caller should synchronize on
  // Class::class$.
  void
! _Jv_RegisterClasses (const jclass *classes)
  {
    for (; *classes; ++classes)
      {
        jclass klass = *classes;
  
!       if (_Jv_CheckABIVersion ((unsigned long) klass->next_or_version))
! 	(*_Jv_RegisterClassHook) (klass);
!     }
! }
  
! // This is a version of _Jv_RegisterClasses that takes a count.
! void
! _Jv_RegisterClasses_Counted (const jclass * classes, size_t count)
! {
!   size_t i;
!   for (i = 0; i < count; i++)
!     {
!       jclass klass = classes[i];
! 
!       if (_Jv_CheckABIVersion ((unsigned long) klass->next_or_version))
! 	(*_Jv_RegisterClassHook) (klass);
      }
  }
  
*************** _Jv_RegisterClassHookDefault (jclass kla
*** 427,436 ****
  {
    jint hash = HASH_UTF (klass->name);
  
-   jclass check_class = loaded_classes[hash];
- 
    // If the class is already registered, don't re-register it.
!   while (check_class != NULL)
      {
        if (check_class == klass)
  	{
--- 167,176 ----
  {
    jint hash = HASH_UTF (klass->name);
  
    // If the class is already registered, don't re-register it.
!   for (jclass check_class = loaded_classes[hash];
!        check_class != NULL;
!        check_class = check_class->next_or_version)
      {
        if (check_class == klass)
  	{
*************** _Jv_RegisterClassHookDefault (jclass kla
*** 440,446 ****
  	  // We size-limit MESSAGE so that you can't trash the stack.
  	  char message[200];
  	  strcpy (message, TEXT);
! 	  strncpy (message + sizeof (TEXT) - 1, klass->name->data,
  		   sizeof (message) - sizeof (TEXT));
  	  message[sizeof (message) - 1] = '\0';
  	  if (! gcj::runtimeInitialized)
--- 180,186 ----
  	  // We size-limit MESSAGE so that you can't trash the stack.
  	  char message[200];
  	  strcpy (message, TEXT);
! 	  strncpy (message + sizeof (TEXT) - 1, klass->name->chars(),
  		   sizeof (message) - sizeof (TEXT));
  	  message[sizeof (message) - 1] = '\0';
  	  if (! gcj::runtimeInitialized)
*************** _Jv_RegisterClassHookDefault (jclass kla
*** 451,461 ****
  	      throw new java::lang::VirtualMachineError (str);
  	    }
  	}
- 
-       check_class = check_class->next;
      }
  
!   klass->next = loaded_classes[hash];
    loaded_classes[hash] = klass;
  }
  
--- 191,202 ----
  	      throw new java::lang::VirtualMachineError (str);
  	    }
  	}
      }
  
!   // FIXME: this is really bogus!
!   if (! klass->engine)
!     klass->engine = &_Jv_soleCompiledEngine;
!   klass->next_or_version = loaded_classes[hash];
    loaded_classes[hash] = klass;
  }
  
*************** _Jv_RegisterClass (jclass klass)
*** 478,531 ****
  jclass
  _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader)
  {
!   jclass klass = _Jv_FindClassInCache (name, loader);
  
    if (! klass)
      {
-       jstring sname = _Jv_NewStringUTF (name->data);
- 
-       java::lang::ClassLoader *sys
- 	= java::lang::ClassLoader::getSystemClassLoader ();
- 
        if (loader)
  	{
! 	  // Load using a user-defined loader, jvmspec 5.3.2
! 	  klass = loader->loadClass(sname, false);
  
  	  // If "loader" delegated the loadClass operation to another
  	  // loader, explicitly register that it is also an initiating
  	  // loader of the given class.
! 	  java::lang::ClassLoader *delegate = (loader == sys
  					       ? NULL
  					       : loader);
  	  if (klass && klass->getClassLoaderInternal () != delegate)
  	    _Jv_RegisterInitiatingLoader (klass, loader);
  	}
!       else 
  	{
  	  // Load using the bootstrap loader jvmspec 5.3.1.
! 	  klass = sys->loadClass (sname, false); 
  
  	  // Register that we're an initiating loader.
  	  if (klass)
  	    _Jv_RegisterInitiatingLoader (klass, 0);
  	}
      }
    else
      {
!       // we need classes to be in the hash while
!       // we're loading, so that they can refer to themselves. 
!       _Jv_WaitForState (klass, JV_STATE_LOADED);
      }
  
    return klass;
  }
  
  jclass
  _Jv_NewClass (_Jv_Utf8Const *name, jclass superclass,
  	      java::lang::ClassLoader *loader)
  {
!   jclass ret = (jclass) JvAllocObject (&java::lang::Class::class$);
    ret->name = name;
    ret->superclass = superclass;
    ret->loader = loader;
--- 219,313 ----
  jclass
  _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader)
  {
!   // See if the class was already loaded by this loader.  This handles
!   // initiating loader checks, as we register classes with their
!   // initiating loaders.
! 
!   // Note: this is incorrect, but compatible with older GCJ usage.
!   java::lang::ClassLoader *boot = java::lang::ClassLoader::systemClassLoader;
!   java::lang::ClassLoader *real = loader;
!   if (! real)
!     real = boot;
!   jstring sname = name->toString();
!   // We might still be bootstrapping the VM, in which case there
!   // won't be a bootstrap class loader yet.
!   jclass klass = real ? real->findLoadedClass (sname) : NULL;
  
    if (! klass)
      {
        if (loader)
  	{
! 	  // Load using a user-defined loader, jvmspec 5.3.2.
! 	  // Note that we explicitly must call the single-argument form.
! 	  klass = loader->loadClass(sname);
  
  	  // If "loader" delegated the loadClass operation to another
  	  // loader, explicitly register that it is also an initiating
  	  // loader of the given class.
! 	  java::lang::ClassLoader *delegate = (loader == boot
  					       ? NULL
  					       : loader);
  	  if (klass && klass->getClassLoaderInternal () != delegate)
  	    _Jv_RegisterInitiatingLoader (klass, loader);
  	}
!       else if (boot)
  	{
  	  // Load using the bootstrap loader jvmspec 5.3.1.
! 	  // klass = java::lang::VMClassLoader::loadClass (sname, false); 
! 	  // Note again that we're actually using the system loader here.
! 	  klass = boot->loadClass (sname);
  
  	  // Register that we're an initiating loader.
  	  if (klass)
  	    _Jv_RegisterInitiatingLoader (klass, 0);
  	}
+       else
+ 	{
+ 	  // Not even a bootstrap loader, try the built-in cache.
+ 	  klass = _Jv_FindClassInCache (name);
+ 
+ 	  if (klass)
+ 	    {
+ 	      bool found = false;
+ 	      for (int i = 0; i < bootstrap_index; ++i)
+ 		{
+ 		  if (bootstrap_class_list[i] == klass)
+ 		    {
+ 		      found = true;
+ 		      break;
+ 		    }
+ 		}
+ 	      if (! found)
+ 		{
+ 		  if (bootstrap_index == BOOTSTRAP_CLASS_LIST_SIZE)
+ 		    abort ();
+ 		  bootstrap_class_list[bootstrap_index++] = klass;
+ 		}
+ 	    }
+ 	}
      }
    else
      {
!       // We need classes to be in the hash while we're loading, so
!       // that they can refer to themselves.
!       _Jv_Linker::wait_for_state (klass, JV_STATE_LOADED);
      }
  
    return klass;
  }
  
+ void
+ _Jv_RegisterBootstrapPackages ()
+ {
+   for (int i = 0; i < bootstrap_index; ++i)
+     java::lang::VMClassLoader::definePackageForNative(bootstrap_class_list[i]->getName());
+ }
+ 
  jclass
  _Jv_NewClass (_Jv_Utf8Const *name, jclass superclass,
  	      java::lang::ClassLoader *loader)
  {
!   jclass ret = (jclass) _Jv_AllocObject (&java::lang::Class::class$);
    ret->name = name;
    ret->superclass = superclass;
    ret->loader = loader;
*************** _Jv_NewArrayClass (jclass element, java:
*** 562,568 ****
        len = 3;
      }
    else
!     len = element->name->length + 5;
  
    {
      char signature[len];
--- 344,350 ----
        len = 3;
      }
    else
!     len = element->name->len() + 5;
  
    {
      char signature[len];
*************** _Jv_NewArrayClass (jclass element, java:
*** 575,582 ****
        }
      else
        {
! 	size_t length = element->name->length;
! 	const char *const name = element->name->data;
  	if (name[0] != '[')
  	  signature[index++] = 'L';
  	memcpy (&signature[index], name, length);
--- 357,364 ----
        }
      else
        {
! 	size_t length = element->name->len();
! 	const char *const name = element->name->chars();
  	if (name[0] != '[')
  	  signature[index++] = 'L';
  	memcpy (&signature[index], name, length);
*************** _Jv_NewArrayClass (jclass element, java:
*** 628,634 ****
    // cache one and reuse it. It is not necessary to synchronize this.
    if (!array_idt)
      {
!       _Jv_PrepareConstantTimeTables (array_class);
        array_idt = array_class->idt;
        array_depth = array_class->depth;
        array_ancestors = array_class->ancestors;
--- 410,416 ----
    // cache one and reuse it. It is not necessary to synchronize this.
    if (!array_idt)
      {
!       _Jv_Linker::wait_for_state(array_class, JV_STATE_PREPARED);
        array_idt = array_class->idt;
        array_depth = array_class->depth;
        array_ancestors = array_class->ancestors;
*************** _Jv_NewArrayClass (jclass element, java:
*** 642,660 ****
  
    using namespace java::lang::reflect;
    {
!     // Array classes are "abstract final"...
!     _Jv_ushort accflags = Modifier::FINAL | Modifier::ABSTRACT;
!     // ... and inherit accessibility from element type, per vmspec 5.3.3.2
!     accflags |= (element->accflags & Modifier::PUBLIC);
!     accflags |= (element->accflags & Modifier::PROTECTED);
!     accflags |= (element->accflags & Modifier::PRIVATE);      
      array_class->accflags = accflags;
    }
  
    // An array class has no visible instance fields. "length" is invisible to 
    // reflection.
  
!   // say this class is initialized and ready to go!
    array_class->state = JV_STATE_DONE;
  
    // vmspec, section 5.3.3 describes this
--- 424,442 ----
  
    using namespace java::lang::reflect;
    {
!     // Array classes are "abstract final" and inherit accessibility
!     // from element type, per vmspec 5.3.3.2
!     _Jv_ushort accflags = (Modifier::FINAL | Modifier::ABSTRACT
! 			   | (element->accflags
! 			      & (Modifier::PUBLIC | Modifier::PROTECTED
! 				 | Modifier::PRIVATE)));
      array_class->accflags = accflags;
    }
  
    // An array class has no visible instance fields. "length" is invisible to 
    // reflection.
  
!   // Say this class is initialized and ready to go!
    array_class->state = JV_STATE_DONE;
  
    // vmspec, section 5.3.3 describes this
*************** _Jv_NewArrayClass (jclass element, java:
*** 664,671 ****
    element->arrayclass = array_class;
  }
  
- static jclass stack_head;
- 
  // These two functions form a stack of classes.   When a class is loaded
  // it is pushed onto the stack by the class loader; this is so that
  // StackTrace can quickly determine which classes have been loaded.
--- 446,451 ----
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natDouble.cc gcc-4.0.0/libjava/java/lang/natDouble.cc
*** gcc-3.4.3/libjava/java/lang/natDouble.cc	Wed Nov 26 18:02:34 2003
--- gcc-4.0.0/libjava/java/lang/natDouble.cc	Sat Apr  2 01:28:28 2005
***************
*** 1,6 ****
  // natDouble.cc - Implementation of java.lang.Double native methods.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natDouble.cc - Implementation of java.lang.Double native methods.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** java::lang::Double::parseDouble(jstring 
*** 167,177 ****
      length--;
  
    // The String could end with a f/F/d/D which is valid but we don't need.
    if (length > 0)
      {
        jchar last = str->charAt(length-1);
        if (last == 'f' || last == 'F' || last == 'd' || last == 'D')
! 	length--;
      }
  
    jsize start = 0;
--- 167,181 ----
      length--;
  
    // The String could end with a f/F/d/D which is valid but we don't need.
+   bool saw_trailer = false;
    if (length > 0)
      {
        jchar last = str->charAt(length-1);
        if (last == 'f' || last == 'F' || last == 'd' || last == 'D')
! 	{
! 	  length--;
! 	  saw_trailer = true;
! 	}
      }
  
    jsize start = 0;
*************** java::lang::Double::parseDouble(jstring 
*** 186,191 ****
--- 190,206 ----
        jsize blength = _Jv_GetStringUTFRegion (str, start, length, data);
        data[blength] = 0; 
  
+       if (! saw_trailer)
+ 	{
+ 	  if (! strcmp (data, "NaN") || ! strcmp (data, "+NaN")
+ 	      || ! strcmp (data, "-NaN"))
+ 	    return NaN;
+ 	  else if (! strcmp (data, "Infinity") || ! strcmp (data, "+Infinity"))
+ 	    return POSITIVE_INFINITY;
+ 	  else if (! strcmp (data, "-Infinity"))
+ 	    return NEGATIVE_INFINITY;
+ 	}
+ 
        struct _Jv_reent reent;  
        memset (&reent, 0, sizeof reent);
  
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natObject.cc gcc-4.0.0/libjava/java/lang/natObject.cc
*** gcc-3.4.3/libjava/java/lang/natObject.cc	Thu Oct 23 21:48:36 2003
--- gcc-4.0.0/libjava/java/lang/natObject.cc	Wed Jan  5 05:09:09 2005
*************** java::lang::Object::clone (void)
*** 98,104 ****
  	throw new CloneNotSupportedException;
  
        size = klass->size();
!       r = JvAllocObject (klass, size);
      }
  
    memcpy ((void *) r, (void *) this, size);
--- 98,104 ----
  	throw new CloneNotSupportedException;
  
        size = klass->size();
!       r = _Jv_AllocObject (klass);
      }
  
    memcpy ((void *) r, (void *) this, size);
*************** _Jv_MonitorExit (jobject obj)
*** 267,272 ****
--- 267,274 ----
  bool
  _Jv_ObjectCheckMonitor (jobject obj)
  {
+   if (__builtin_expect (INIT_NEEDED (obj), false))
+     obj->sync_init ();
    _Jv_SyncInfo *si = (_Jv_SyncInfo *) obj->sync_info;
    return _Jv_MutexCheckMonitor (&si->mutex);
  }
*************** _Jv_ObjectCheckMonitor (jobject obj)
*** 286,291 ****
--- 288,296 ----
  // operations is already ridiculous, and would become worse if we
  // went through the proper intermediaries.
  #else
+ # ifdef LIBGCJ_GC_DEBUG
+ #   define GC_DEBUG
+ # endif
  # include "gc.h"
  #endif
  
*************** struct hash_entry {
*** 423,440 ****
    				// are protected by the lightweight
    				// lock itself), and any heavy_monitor
    				// structures attached to it.
! #   define HEAVY	2	// There may be heavyweight locks
! 				// associated with this cache entry.
  				// The lightweight entry is still valid,
    				// if the leading bits of the address
    				// field are nonzero.
!  				// Set if heavy_count is > 0 .
    				// Stored redundantly so a single
    				// compare-and-swap works in the easy case.
  #   define REQUEST_CONVERSION 4 // The lightweight lock is held.  But
    				// one or more other threads have tried
    				// to acquire the lock, and hence request
    				// conversion to heavyweight status.
  #   define FLAGS (LOCKED | HEAVY | REQUEST_CONVERSION)
    volatile _Jv_ThreadId_t light_thr_id;
  				// Thr_id of holder of lightweight lock.
--- 428,458 ----
    				// are protected by the lightweight
    				// lock itself), and any heavy_monitor
    				// structures attached to it.
! #   define HEAVY	2	// Heavyweight locks associated with this
!   				// hash entry may be held.
  				// The lightweight entry is still valid,
    				// if the leading bits of the address
    				// field are nonzero.
!   				// If the LOCKED bit is clear, then this is
!  				// set exactly when heavy_count is > 0 .
    				// Stored redundantly so a single
    				// compare-and-swap works in the easy case.
+   				// If HEAVY is not set, it is safe to use
+   				// an available lightweight lock entry
+   				// without checking if there is an existing
+   				// heavyweight lock for the same object.
+   				// (There may be one, but it won't be held
+   				// or waited for.)
  #   define REQUEST_CONVERSION 4 // The lightweight lock is held.  But
    				// one or more other threads have tried
    				// to acquire the lock, and hence request
    				// conversion to heavyweight status.
+   				// The heavyweight lock is already allocated.
+   				// Threads requesting conversion are
+   				// waiting on the condition variable associated
+   				// with the heavyweight lock.
+   				// Not used for conversion due to
+   				// Object.wait() calls.
  #   define FLAGS (LOCKED | HEAVY | REQUEST_CONVERSION)
    volatile _Jv_ThreadId_t light_thr_id;
  				// Thr_id of holder of lightweight lock.
*************** struct hash_entry {
*** 447,458 ****
    volatile unsigned short light_count;
  				// Number of times the lightweight lock
    				// is held minus one.  Zero if lightweight
!   				// lock is not held.
    unsigned short heavy_count; 	// Total number of times heavyweight locks
    				// associated with this hash entry are held
    				// or waiting to be acquired.
    				// Threads in wait() are included eventhough
    				// they have temporarily released the lock.
    struct heavy_lock * heavy_locks;
    				// Chain of heavy locks.  Protected
    				// by lockbit for he.  Locks may
--- 465,483 ----
    volatile unsigned short light_count;
  				// Number of times the lightweight lock
    				// is held minus one.  Zero if lightweight
!   				// lock is not held.  Only updated by
!   				// lightweight lock holder or, in one
!   				// case, while holding the LOCKED bit in
!   				// a state in which there can be no
!   				// lightweight lock holder.
    unsigned short heavy_count; 	// Total number of times heavyweight locks
    				// associated with this hash entry are held
    				// or waiting to be acquired.
    				// Threads in wait() are included eventhough
    				// they have temporarily released the lock.
+   				// Protected by LOCKED bit.
+   				// Threads requesting conversion to heavyweight
+   				// status are also included.
    struct heavy_lock * heavy_locks;
    				// Chain of heavy locks.  Protected
    				// by lockbit for he.  Locks may
*************** hash_entry light_locks[JV_SYNC_TABLE_SZ]
*** 492,504 ****
       fprintf(stderr, "lock hash entry = %p, index = %d, address = 0x%lx\n"
  		     "\tlight_thr_id = 0x%lx, light_count = %d, "
  		     "heavy_count = %d\n\theavy_locks:", he,
! 		     he - light_locks, he -> address, he -> light_thr_id,
  		     he -> light_count, he -> heavy_count);
       print_hl_list(he -> heavy_locks);
       fprintf(stderr, "\n");
    }
  #endif /* LOCK_DEBUG */
  
  static bool mp = false; // Known multiprocesssor.
  
  // Wait for roughly 2^n units, touching as little memory as possible.
--- 517,579 ----
       fprintf(stderr, "lock hash entry = %p, index = %d, address = 0x%lx\n"
  		     "\tlight_thr_id = 0x%lx, light_count = %d, "
  		     "heavy_count = %d\n\theavy_locks:", he,
! 		     he - light_locks, (unsigned long)(he -> address),
! 		     (unsigned long)(he -> light_thr_id),
  		     he -> light_count, he -> heavy_count);
       print_hl_list(he -> heavy_locks);
       fprintf(stderr, "\n");
    }
  #endif /* LOCK_DEBUG */
  
+ #ifdef LOCK_LOG
+   // Log locking operations.  For debugging only.
+   // Logging is intended to be as unintrusive as possible.
+   // Log calls are made after an operation completes, and hence
+   // may not completely reflect actual synchronization ordering.
+   // The choice of events to log is currently a bit haphazard.
+   // The intent is that if we have to track down any other bugs
+   // inthis code, we extend the logging as appropriate.
+   typedef enum
+   {
+     ACQ_LIGHT, ACQ_LIGHT2, ACQ_HEAVY, ACQ_HEAVY2, PROMOTE, REL_LIGHT,
+     REL_HEAVY, REQ_CONV, PROMOTE2, WAIT_START, WAIT_END, NOTIFY, NOTIFY_ALL
+   } event_type;
+ 
+   struct lock_history
+   {
+     event_type tp;
+     obj_addr_t addr;  // Often includes flags.
+     _Jv_ThreadId_t thr;
+   };
+      
+   const int LOG_SIZE = 128;	// Power of 2.
+ 
+   lock_history lock_log[LOG_SIZE];
+ 
+   volatile obj_addr_t log_next = 0;
+   			   // Next location in lock_log.
+   			   // Really an int, but we need compare_and_swap.
+ 
+   static void add_log_entry(event_type t, obj_addr_t a, _Jv_ThreadId_t th)
+   {
+     obj_addr_t my_entry;
+     obj_addr_t next_entry;
+     do
+       {
+ 	my_entry = log_next;
+ 	next_entry = ((my_entry + 1) & (LOG_SIZE - 1));
+       }
+     while (!compare_and_swap(&log_next, my_entry, next_entry));
+     lock_log[my_entry].tp = t;
+     lock_log[my_entry].addr = a;
+     lock_log[my_entry].thr = th;
+   }
+ 
+ # define LOG(t, a, th) add_log_entry(t, a, th)
+ #else /* !LOCK_LOG */
+ # define LOG(t, a, th)
+ #endif
+ 
  static bool mp = false; // Known multiprocesssor.
  
  // Wait for roughly 2^n units, touching as little memory as possible.
*************** heavy_lock_obj_finalization_proc (void *
*** 656,661 ****
--- 731,738 ----
  // Remove all heavy locks on the list.  Note that the only possible way
  // in which a lock may still be in use is if it's in the process of
  // being unlocked.
+ // FIXME:  Why does this unlock the hash entry?  I think that
+ // could now be done more cleanly in MonitorExit.
  static void
  remove_all_heavy (hash_entry *he, obj_addr_t new_address_val)
  {
*************** retry:
*** 799,804 ****
--- 876,882 ----
        // Count fields are set correctly.  Heavy_count was also zero,
        // but can change asynchronously.
        // This path is hopefully both fast and the most common.
+       LOG(ACQ_LIGHT, addr, self);
        return;
      }
    address = he -> address;
*************** retry:
*** 822,836 ****
  	}
        else
  	{
  	  // Lightweight lock is held, but by somone else.
            // Spin a few times.  This avoids turning this into a heavyweight
      	  // lock if the current holder is about to release it.
            for (unsigned int i = 0; i < N_SPINS; ++i)
  	    {
! 	      if ((he -> address & ~LOCKED) != (address & ~LOCKED)) goto retry;
  	      spin(i);
              }
- 	  address &= ~LOCKED;
  	  if (!compare_and_swap(&(he -> address), address, address | LOCKED ))
  	    {
  	      wait_unlocked(he);      
--- 900,916 ----
  	}
        else
  	{
+ 	  JvAssert(!(address & LOCKED));
  	  // Lightweight lock is held, but by somone else.
            // Spin a few times.  This avoids turning this into a heavyweight
      	  // lock if the current holder is about to release it.
+ 	  // FIXME: Does this make sense on a uniprocessor, where
+ 	  // it actually yields?  It's probably cheaper to convert.
            for (unsigned int i = 0; i < N_SPINS; ++i)
  	    {
! 	      if ((he -> address & ~LOCKED) != address) goto retry;
  	      spin(i);
              }
  	  if (!compare_and_swap(&(he -> address), address, address | LOCKED ))
  	    {
  	      wait_unlocked(he);      
*************** retry:
*** 845,850 ****
--- 925,931 ----
  	  JvAssert(he -> address == address | LOCKED );
  	  release_set(&(he -> address), (address | REQUEST_CONVERSION | HEAVY));
  				// release lock on he
+ 	  LOG(REQ_CONV, (address | REQUEST_CONVERSION | HEAVY), self);
  	  while ((he -> address & ~FLAGS) == (address & ~FLAGS))
  	    {
  	      // Once converted, the lock has to retain heavyweight
*************** retry:
*** 862,869 ****
          }
      }
    obj_addr_t was_heavy = (address & HEAVY);
!   address &= ~LOCKED;
!   if (!compare_and_swap(&(he -> address), address, (address | LOCKED )))
      {
        wait_unlocked(he);
        goto retry;
--- 943,950 ----
          }
      }
    obj_addr_t was_heavy = (address & HEAVY);
!   if ((address & LOCKED) ||
!       !compare_and_swap(&(he -> address), address, (address | LOCKED )))
      {
        wait_unlocked(he);
        goto retry;
*************** retry:
*** 876,886 ****
  	// Can't convert a nonexistent lightweight lock.
        heavy_lock *hl;
        hl = (was_heavy? find_heavy(addr, he) : 0);
        if (0 == hl)
          {
  	  // It is OK to use the lighweight lock, since either the
  	  // heavyweight lock does not exist, or none of the
! 	  // heavyweight locks currently exist.  Future threads
  	  // trying to acquire the lock will see the lightweight
  	  // one first and use that.
  	  he -> light_thr_id = self;  // OK, since nobody else can hold
--- 957,968 ----
  	// Can't convert a nonexistent lightweight lock.
        heavy_lock *hl;
        hl = (was_heavy? find_heavy(addr, he) : 0);
+         // The CAS succeeded, so was_heavy is still accurate.
        if (0 == hl)
          {
  	  // It is OK to use the lighweight lock, since either the
  	  // heavyweight lock does not exist, or none of the
! 	  // heavyweight locks are currently in use.  Future threads
  	  // trying to acquire the lock will see the lightweight
  	  // one first and use that.
  	  he -> light_thr_id = self;  // OK, since nobody else can hold
*************** retry:
*** 888,893 ****
--- 970,976 ----
  	  JvAssert(he -> light_count == 0);
  	  JvAssert(was_heavy == (he -> address & HEAVY));
  	  release_set(&(he -> address), (addr | was_heavy));
+ 	  LOG(ACQ_LIGHT2, addr | was_heavy, self);
          }
        else
  	{
*************** retry:
*** 895,900 ****
--- 978,984 ----
  	  ++ (he -> heavy_count);
  	  JvAssert(0 == (address & ~HEAVY));
            release_set(&(he -> address), HEAVY);
+ 	  LOG(ACQ_HEAVY, addr | was_heavy, self);
            _Jv_MutexLock(&(hl->si.mutex));
  	  keep_live(addr);
          }
*************** retry:
*** 908,913 ****
--- 992,998 ----
        heavy_lock *hl = get_heavy(addr, he);
        ++ (he -> heavy_count);
        release_set(&(he -> address), address | HEAVY);
+       LOG(ACQ_HEAVY2, address | HEAVY, self);
        _Jv_MutexLock(&(hl->si.mutex));
        keep_live(addr);
      }
*************** retry:
*** 956,962 ****
  	      he -> light_thr_id = INVALID_THREAD_ID;
                if (compare_and_swap_release(&(he -> address), address,
  					   address & HEAVY))
! 	        return;
  	      else
  		{
  	          he -> light_thr_id = light_thr_id; // Undo prior damage.
--- 1041,1050 ----
  	      he -> light_thr_id = INVALID_THREAD_ID;
                if (compare_and_swap_release(&(he -> address), address,
  					   address & HEAVY))
! 		{
! 		  LOG(REL_LIGHT, address & HEAVY, self);
! 	          return;
! 		}
  	      else
  		{
  	          he -> light_thr_id = light_thr_id; // Undo prior damage.
*************** retry:
*** 976,983 ****
  #	  ifdef LOCK_DEBUG
  	    fprintf(stderr, "Lightweight lock held by other thread\n\t"
  			    "light_thr_id = 0x%lx, self = 0x%lx, "
! 			    "address = 0x%lx, pid = %d\n",
! 			    light_thr_id, self, address, getpid());
  	    print_he(he);
  	    for(;;) {}
  #	  endif
--- 1064,1072 ----
  #	  ifdef LOCK_DEBUG
  	    fprintf(stderr, "Lightweight lock held by other thread\n\t"
  			    "light_thr_id = 0x%lx, self = 0x%lx, "
! 			    "address = 0x%lx, heavy_count = %d, pid = %d\n",
! 			    light_thr_id, self, (unsigned long)address,
! 			    he -> heavy_count, getpid());
  	    print_he(he);
  	    for(;;) {}
  #	  endif
*************** retry:
*** 1031,1036 ****
--- 1120,1126 ----
  	// lock.
        he -> light_thr_id = INVALID_THREAD_ID;
        release_set(&(he -> address), HEAVY);
+       LOG(PROMOTE, address, self);
  	  	// lightweight lock now unused.
        _Jv_CondNotifyAll(&(hl->si.condition), &(hl->si.mutex));
        _Jv_MutexUnlock(&(hl->si.mutex));
*************** retry:
*** 1052,1057 ****
--- 1142,1148 ----
  	print_he(he);
  	for(;;) {}
  #     endif
+       release_set(&(he -> address), address);
        throw new java::lang::IllegalMonitorStateException(
  			JvNewStringLatin1("current thread not owner"));
      }
*************** retry:
*** 1091,1096 ****
--- 1182,1188 ----
        release_set(&(he -> address), address);
        _Jv_MutexUnlock(&(hl->si.mutex));
      }
+   LOG(REL_HEAVY, addr, self);
    keep_live(addr);
  }     
  
*************** _Jv_ObjectCheckMonitor (jobject obj)
*** 1106,1117 ****
    obj_addr_t address;
    unsigned hash = JV_SYNC_HASH(addr);
    hash_entry * he = light_locks + hash;
-   _Jv_ThreadId_t self = _Jv_ThreadSelf();
  
    JvAssert(!(addr & FLAGS));
  retry:
    // Acquire the hash table entry lock
!   address = ((he -> address) & ~LOCKED);
    if (!compare_and_swap(&(he -> address), address, address | LOCKED))
      {
        wait_unlocked(he);
--- 1198,1216 ----
    obj_addr_t address;
    unsigned hash = JV_SYNC_HASH(addr);
    hash_entry * he = light_locks + hash;
  
    JvAssert(!(addr & FLAGS));
+   address = he -> address;
+   // Try it the easy way first:
+     if (address == 0) return true;
+     _Jv_ThreadId_t self = _Jv_ThreadSelf();
+     if ((address & ~(HEAVY | REQUEST_CONVERSION)) == addr)
+ 	// Fails if entry is LOCKED.
+ 	// I can't asynchronously become or stop being the holder.
+ 	return he -> light_thr_id != self;
  retry:
    // Acquire the hash table entry lock
!   address &= ~LOCKED;
    if (!compare_and_swap(&(he -> address), address, address | LOCKED))
      {
        wait_unlocked(he);
*************** retry:
*** 1120,1128 ****
  
    bool not_mine;
  
!   if (!(address & ~FLAGS))
!     not_mine = true;
!   else if ((address & ~FLAGS) == addr)
      not_mine = (he -> light_thr_id != self);
    else
      {
--- 1219,1225 ----
  
    bool not_mine;
  
!   if ((address & ~FLAGS) == addr)
      not_mine = (he -> light_thr_id != self);
    else
      {
*************** retry:
*** 1163,1169 ****
        wait_unlocked(he);
        goto retry;
      }
!   // address does not have the lock bit set.  We hold the lock on he.
    if ((address & ~FLAGS) == addr)
      {
        // Convert to heavyweight.
--- 1260,1266 ----
        wait_unlocked(he);
        goto retry;
      }
!   // address did not have the lock bit set.  We now hold the lock on he.
    if ((address & ~FLAGS) == addr)
      {
        // Convert to heavyweight.
*************** retry:
*** 1188,1195 ****
  	// Again release the he lock after acquiring the mutex.
          he -> light_thr_id = INVALID_THREAD_ID;
  	release_set(&(he -> address), HEAVY);  // lightweight lock now unused.
  	if (address & REQUEST_CONVERSION)
! 	  _Jv_CondNotify (&(hl->si.condition), &(hl->si.mutex));
      }
    else /* We should hold the heavyweight lock. */
      {
--- 1285,1299 ----
  	// Again release the he lock after acquiring the mutex.
          he -> light_thr_id = INVALID_THREAD_ID;
  	release_set(&(he -> address), HEAVY);  // lightweight lock now unused.
+ 	LOG(PROMOTE2, addr, self);
  	if (address & REQUEST_CONVERSION)
! 	  _Jv_CondNotifyAll (&(hl->si.condition), &(hl->si.mutex));
! 	  // Since we do this before we do a CondWait, we guarantee that
! 	  // threads waiting on requested conversion are awoken before
! 	  // a real wait on the same condition variable.
! 	  // No other notification can occur in the interim, since
! 	  // we hold the heavy lock, and notifications are made
! 	  // without acquiring it.
      }
    else /* We should hold the heavyweight lock. */
      {
*************** retry:
*** 1208,1213 ****
--- 1312,1318 ----
  	}
        JvAssert(address & HEAVY);
      }
+   LOG(WAIT_START, addr, self);
    switch (_Jv_CondWait (&(hl->si.condition), &(hl->si.mutex), timeout, nanos))
      {
        case _JV_NOT_OWNER:
*************** retry:
*** 1217,1222 ****
--- 1322,1328 ----
  	if (Thread::interrupted ())
  	  throw new InterruptedException;        
      }
+   LOG(WAIT_END, addr, self);
  }
  
  void
*************** retry:
*** 1251,1257 ****
    hl = find_heavy(addr, he);
    // Hl can't disappear since we point to the underlying object.
    // It's important that we release the lock bit before the notify, since
!   // otherwise we will try to wake up thee target while we still hold the
    // bit.  This results in lock bit contention, which we don't handle
    // terribly well.
    release_set(&(he -> address), address); // unlock
--- 1357,1363 ----
    hl = find_heavy(addr, he);
    // Hl can't disappear since we point to the underlying object.
    // It's important that we release the lock bit before the notify, since
!   // otherwise we will try to wake up the target while we still hold the
    // bit.  This results in lock bit contention, which we don't handle
    // terribly well.
    release_set(&(he -> address), address); // unlock
*************** retry:
*** 1261,1267 ****
--- 1367,1376 ----
                                                ("current thread not owner"));
        return;
      }
+   // We know that we hold the heavyweight lock at this point,
+   // and the lightweight lock is not in use.
    result = _Jv_CondNotify(&(hl->si.condition), &(hl->si.mutex));
+   LOG(NOTIFY, addr, self);
    keep_live(addr);
    if (__builtin_expect (result, 0))
      throw new IllegalMonitorStateException(JvNewStringLatin1 
*************** retry:
*** 1305,1310 ****
--- 1414,1420 ----
                                                ("current thread not owner"));
      }
    result = _Jv_CondNotifyAll(&(hl->si.condition), &(hl->si.mutex));
+   LOG(NOTIFY_ALL, addr, self);
    if (__builtin_expect (result, 0))
      throw new IllegalMonitorStateException(JvNewStringLatin1 
                                                ("current thread not owner"));
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natPosixProcess.cc gcc-4.0.0/libjava/java/lang/natPosixProcess.cc
*** gcc-3.4.3/libjava/java/lang/natPosixProcess.cc	Wed Feb  4 00:04:20 2004
--- gcc-4.0.0/libjava/java/lang/natPosixProcess.cc	Tue Sep 14 20:09:31 2004
*************** details.  */
*** 21,81 ****
  #include <string.h>
  #include <stdlib.h>
  #include <stdio.h>
  
  #include <gcj/cni.h>
  #include <jvm.h>
  
  #include <java/lang/ConcreteProcess.h>
  #include <java/lang/IllegalThreadStateException.h>
  #include <java/lang/InterruptedException.h>
  #include <java/lang/NullPointerException.h>
  #include <java/lang/Thread.h>
  #include <java/io/File.h>
  #include <java/io/FileDescriptor.h>
  #include <java/io/FileInputStream.h>
  #include <java/io/FileOutputStream.h>
  #include <java/io/IOException.h>
  #include <java/lang/OutOfMemoryError.h>
  
! extern char **environ;
! 
! void
! java::lang::ConcreteProcess::destroy (void)
! {
!   if (! hasExited)
!     {
!       // Really kill it.
!       kill ((pid_t) pid, SIGKILL);
!     }
! }
! 
! jint
! java::lang::ConcreteProcess::waitFor (void)
! {
!   if (! hasExited)
!     {
!       int wstat;
!       int r = waitpid ((pid_t) pid, &wstat, 0);
! 
!       if (r == -1)
!         {
! 	  if (java::lang::Thread::interrupted())
! 	    throw new InterruptedException (JvNewStringLatin1 (strerror
! 	      (errno)));
! 	}
!       else
! 	{
! 	  hasExited = true;
! 
! 	  if (WIFEXITED (wstat))
! 	    status = WEXITSTATUS (wstat);
! 	  else
! 	    status = -1;
! 	}
!     }
  
!   return status;
! }
  
  static char *
  new_string (jstring string)
--- 21,50 ----
  #include <string.h>
  #include <stdlib.h>
  #include <stdio.h>
+ #include <unistd.h>
+ #include <pthread.h>
  
  #include <gcj/cni.h>
  #include <jvm.h>
  
+ #include <java/lang/ConcreteProcess$ProcessManager.h>
  #include <java/lang/ConcreteProcess.h>
  #include <java/lang/IllegalThreadStateException.h>
+ #include <java/lang/InternalError.h>
  #include <java/lang/InterruptedException.h>
  #include <java/lang/NullPointerException.h>
  #include <java/lang/Thread.h>
  #include <java/io/File.h>
  #include <java/io/FileDescriptor.h>
+ #include <gnu/java/nio/channels/FileChannelImpl.h>
  #include <java/io/FileInputStream.h>
  #include <java/io/FileOutputStream.h>
  #include <java/io/IOException.h>
  #include <java/lang/OutOfMemoryError.h>
  
! using gnu::java::nio::channels::FileChannelImpl;
  
! extern char **environ;
  
  static char *
  new_string (jstring string)
*************** myclose (int &fd)
*** 117,130 ****
    fd = -1;
  }
  
  void
! java::lang::ConcreteProcess::startProcess (jstringArray progarray,
! 					   jstringArray envp,
! 					   java::io::File *dir)
  {
!   using namespace java::io;
  
!   hasExited = false;
  
    // Initialize all locals here to make cleanup simpler.
    char **args = NULL;
--- 86,218 ----
    fd = -1;
  }
  
+ // There has to be a signal handler in order to be able to
+ // sigwait() on SIGCHLD.  The information passed is ignored as it
+ // will be recovered by the waitpid() call.
+ static void
+ sigchld_handler (int)
+ {
+   // Ignore.
+ }
+ 
+ 
+ // Get ready to enter the main reaper thread loop.
  void
! java::lang::ConcreteProcess$ProcessManager::init ()
  {
!   using namespace java::lang;
!   // Remenber our PID so other threads can kill us.
!   reaperPID = (jlong) pthread_self ();
  
!   // SIGCHLD is blocked in all threads in posix-threads.cc.
!   // Setup the SIGCHLD handler.
!   struct sigaction sa;
!   memset (&sa, 0, sizeof (sa));
! 
!   sa.sa_handler = sigchld_handler;
!   // We only want signals when the things exit.
!   sa.sa_flags = SA_NOCLDSTOP;
! 
!   if (-1 == sigaction (SIGCHLD, &sa, NULL))
!     goto error;
! 
!   // All OK.
!   return;
! 
! error:
!   throw new InternalError (JvNewStringUTF (strerror (errno)));
! }
! 
! void
! java::lang::ConcreteProcess$ProcessManager::waitForSignal ()
! {
!   // Wait for SIGCHLD
!   sigset_t mask;
!   pthread_sigmask (0, NULL, &mask);
!   sigdelset (&mask, SIGCHLD);
! 
!   // Use sigsuspend() instead of sigwait() as sigwait() doesn't play
!   // nicely with the GC's use of signals.
!   sigsuspend (&mask);
! 
!   // Do not check sigsuspend return value.  The only legitimate return
!   // is EINTR, but there is a known kernel bug affecting alpha-linux
!   // wrt sigsuspend+handler+sigreturn that can result in a return value
!   // of __NR_sigsuspend and errno unset.  Don't fail unnecessarily on
!   // older kernel versions.
! 
!   // All OK.
!   return;
! }
! 
! jboolean java::lang::ConcreteProcess$ProcessManager::reap ()
! {
!   using namespace java::lang;
! 
!   pid_t pid;
! 
!   for (;;)
!     {
!       // Get the return code from a dead child process.
!       int status;
!       pid = waitpid ((pid_t) - 1, &status, WNOHANG);
!       if (pid == -1)
! 	{
! 	  if (errno == ECHILD)
! 	    return false;
! 	  else
! 	    goto error;
! 	}
! 
!       if (pid == 0)
!         return true;   // No children to wait for.
! 
!       // Look up the process in our pid map.
!       ConcreteProcess * process = removeProcessFromMap ((jlong) pid);
! 
!       if (process)
! 	{
! 	  JvSynchronize sync (process);
! 	  process->status = WIFEXITED (status) ? WEXITSTATUS (status) : -1;
! 	  process->state = ConcreteProcess::STATE_TERMINATED;
!           process->processTerminationCleanup();
! 	  process->notifyAll ();
! 	}
!       else
! 	{
! 	  // Unknown child.  How did this happen?
! 	  fprintf (stderr, "Reaped unknown child pid = %ld\n", (long) pid);
! 	}
!     }
! 
! error:
!   throw new InternalError (JvNewStringUTF (strerror (errno)));
! }
! 
! void
! java::lang::ConcreteProcess$ProcessManager::signalReaper ()
! {
!   int c = pthread_kill ((pthread_t) reaperPID, SIGCHLD);
!   if (c == 0)
!     return;
!   // pthread_kill() failed.
!   throw new InternalError (JvNewStringUTF (strerror (c)));
! }
! 
! void
! java::lang::ConcreteProcess::nativeDestroy ()
! {
!   int c = kill ((pid_t) pid, SIGKILL);
!   if (c == 0)
!     return;
!   // kill() failed.
!   throw new InternalError (JvNewStringUTF (strerror (errno)));
! }
! 
! void
! java::lang::ConcreteProcess::nativeSpawn ()
! {
!   using namespace java::io;
  
    // Initialize all locals here to make cleanup simpler.
    char **args = NULL;
*************** java::lang::ConcreteProcess::startProces
*** 139,145 ****
    errp[1] = -1;
    msgp[0] = -1;
    msgp[1] = -1;
-   java::lang::Throwable *exc = NULL;
    errorStream = NULL;
    inputStream = NULL;
    outputStream = NULL;
--- 227,232 ----
*************** java::lang::ConcreteProcess::startProces
*** 147,154 ****
    try
      {
        // Transform arrays to native form.
!       args = (char **) _Jv_Malloc ((progarray->length + 1)
! 				   * sizeof (char *));
  
        // Initialize so we can gracefully recover.
        jstring *elts = elements (progarray);
--- 234,240 ----
    try
      {
        // Transform arrays to native form.
!     args = (char **) _Jv_Malloc ((progarray->length + 1) * sizeof (char *));
  
        // Initialize so we can gracefully recover.
        jstring *elts = elements (progarray);
*************** java::lang::ConcreteProcess::startProces
*** 182,205 ****
        // status.
        if (pipe (inp) || pipe (outp) || pipe (errp) || pipe (msgp)
  	  || fcntl (msgp[1], F_SETFD, FD_CLOEXEC))
! 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
  
        // We create the streams before forking.  Otherwise if we had an
        // error while creating the streams we would have run the child
        // with no way to communicate with it.
!       errorStream = new FileInputStream (new FileDescriptor (errp[0]));
!       inputStream = new FileInputStream (new FileDescriptor (inp[0]));
!       outputStream = new FileOutputStream (new FileDescriptor (outp[1]));
  
        // We don't use vfork() because that would cause the local
        // environment to be set by the child.
-       if ((pid = (jlong) fork ()) == -1)
- 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
  
!       if (pid == 0)
  	{
  	  // Child process, so remap descriptors, chdir and exec.
- 
  	  if (envp)
  	    {
  	      // Preserve PATH and LD_LIBRARY_PATH unless specified
--- 268,299 ----
        // status.
        if (pipe (inp) || pipe (outp) || pipe (errp) || pipe (msgp)
  	  || fcntl (msgp[1], F_SETFD, FD_CLOEXEC))
!       throw new IOException (JvNewStringUTF (strerror (errno)));
  
        // We create the streams before forking.  Otherwise if we had an
        // error while creating the streams we would have run the child
        // with no way to communicate with it.
!     errorStream =
!       new FileInputStream (new
!                            FileChannelImpl (errp[0], FileChannelImpl::READ));
!     inputStream =
!       new FileInputStream (new
!                            FileChannelImpl (inp[0], FileChannelImpl::READ));
!     outputStream =
!       new FileOutputStream (new FileChannelImpl (outp[1],
!                                              FileChannelImpl::WRITE));
  
        // We don't use vfork() because that would cause the local
        // environment to be set by the child.
  
!     // Use temporary for fork result to avoid dirtying an extra page.
!     pid_t pid_tmp;
!     if ((pid_tmp = fork ()) == -1)
!       throw new IOException (JvNewStringUTF (strerror (errno)));
! 
!     if (pid_tmp == 0)
  	{
  	  // Child process, so remap descriptors, chdir and exec.
  	  if (envp)
  	    {
  	      // Preserve PATH and LD_LIBRARY_PATH unless specified
*************** java::lang::ConcreteProcess::startProces
*** 209,224 ****
  	      environ = env;
  	      if (path_val && getenv ("PATH") == NULL)
  		{
! 		  char *path_env = (char *) _Jv_Malloc (strlen (path_val)
! 							+ 5 + 1);
  		  strcpy (path_env, "PATH=");
  		  strcat (path_env, path_val);
  		  putenv (path_env);
  		}
  	      if (ld_path_val && getenv ("LD_LIBRARY_PATH") == NULL)
  		{
! 		  char *ld_path_env
! 		    = (char *) _Jv_Malloc (strlen (ld_path_val) + 16 + 1);
  		  strcpy (ld_path_env, "LD_LIBRARY_PATH=");
  		  strcat (ld_path_env, ld_path_val);
  		  putenv (ld_path_env);
--- 303,318 ----
  	      environ = env;
  	      if (path_val && getenv ("PATH") == NULL)
  		{
! 		char *path_env =
!                   (char *) _Jv_Malloc (strlen (path_val) + 5 + 1);
  		  strcpy (path_env, "PATH=");
  		  strcat (path_env, path_val);
  		  putenv (path_env);
  		}
  	      if (ld_path_val && getenv ("LD_LIBRARY_PATH") == NULL)
  		{
! 		char *ld_path_env =
!                   (char *) _Jv_Malloc (strlen (ld_path_val) + 16 + 1);
  		  strcpy (ld_path_env, "LD_LIBRARY_PATH=");
  		  strcat (ld_path_env, ld_path_val);
  		  putenv (ld_path_env);
*************** java::lang::ConcreteProcess::startProces
*** 261,266 ****
--- 355,362 ----
  
        // Parent.  Close extra file descriptors and mark ours as
        // close-on-exec.
+       pid = (jlong) pid_tmp;
+ 
        myclose (outp[0]);
        myclose (inp[1]);
        myclose (errp[1]);
*************** java::lang::ConcreteProcess::startProces
*** 269,277 ****
        char c;
        int r = read (msgp[0], &c, 1);
        if (r == -1)
! 	throw new IOException (JvNewStringLatin1 (strerror (errno)));
        else if (r != 0)
! 	throw new IOException (JvNewStringLatin1 (strerror (c)));
      }
    catch (java::lang::Throwable *thrown)
      {
--- 365,373 ----
        char c;
        int r = read (msgp[0], &c, 1);
        if (r == -1)
!       throw new IOException (JvNewStringUTF (strerror (errno)));
        else if (r != 0)
!       throw new IOException (JvNewStringUTF (strerror (c)));
      }
    catch (java::lang::Throwable *thrown)
      {
*************** java::lang::ConcreteProcess::startProces
*** 321,335 ****
        myclose (errp[1]);
        myclose (msgp[1]);
  
!       exc = thrown;
      }
  
    myclose (msgp[0]);
    cleanup (args, env, path);
  
!   if (exc != NULL)
!     throw exc;
!   else
      {
        fcntl (outp[1], F_SETFD, FD_CLOEXEC);
        fcntl (inp[0], F_SETFD, FD_CLOEXEC);
--- 417,429 ----
        myclose (errp[1]);
        myclose (msgp[1]);
  
!     exception = thrown;
      }
  
    myclose (msgp[0]);
    cleanup (args, env, path);
  
!   if (exception == NULL)
      {
        fcntl (outp[1], F_SETFD, FD_CLOEXEC);
        fcntl (inp[0], F_SETFD, FD_CLOEXEC);
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natRuntime.cc gcc-4.0.0/libjava/java/lang/natRuntime.cc
*** gcc-3.4.3/libjava/java/lang/natRuntime.cc	Tue Dec 16 21:48:23 2003
--- gcc-4.0.0/libjava/java/lang/natRuntime.cc	Tue Apr 19 11:40:24 2005
***************
*** 1,6 ****
  // natRuntime.cc - Implementation of native side of Runtime class.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natRuntime.cc - Implementation of native side of Runtime class.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** java::lang::Runtime::_load (jstring path
*** 163,169 ****
  
    if (do_search)
      {
!       ClassLoader *sys = ClassLoader::getSystemClassLoader();
        ClassLoader *look = NULL;
        gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace(10);
        try
--- 163,169 ----
  
    if (do_search)
      {
!       ClassLoader *sys = ClassLoader::systemClassLoader;
        ClassLoader *look = NULL;
        gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace(10);
        try
*************** java::lang::Runtime::insertSystemPropert
*** 388,395 ****
  	newprops->put(JvNewStringLatin1 (Prop), JvNewStringLatin1 (Val))
  
    // A mixture of the Java Product Versioning Specification
!   // (introduced in 1.2), and earlier versioning properties.
!   SET ("java.version", GCJVERSION);
    SET ("java.vendor", "Free Software Foundation, Inc.");
    SET ("java.vendor.url", "http://gcc.gnu.org/java/");
    SET ("java.class.version", "46.0");
--- 388,398 ----
  	newprops->put(JvNewStringLatin1 (Prop), JvNewStringLatin1 (Val))
  
    // A mixture of the Java Product Versioning Specification
!   // (introduced in 1.2), and earlier versioning properties.  Some
!   // programs rely on seeing values that they expect, so we claim to
!   // be a 1.4-ish VM for their sake.
!   SET ("java.version", JV_VERSION);
!   SET ("java.runtime.version", JV_VERSION);
    SET ("java.vendor", "Free Software Foundation, Inc.");
    SET ("java.vendor.url", "http://gcc.gnu.org/java/");
    SET ("java.class.version", "46.0");
*************** java::lang::Runtime::insertSystemPropert
*** 399,405 ****
    SET ("java.vm.version", __VERSION__);
    SET ("java.vm.vendor", "Free Software Foundation, Inc.");
    SET ("java.vm.name", "GNU libgcj");
!   SET ("java.specification.version", "1.3");
    SET ("java.specification.name", "Java(tm) Platform API Specification");
    SET ("java.specification.vendor", "Sun Microsystems Inc.");
  
--- 402,408 ----
    SET ("java.vm.version", __VERSION__);
    SET ("java.vm.vendor", "Free Software Foundation, Inc.");
    SET ("java.vm.name", "GNU libgcj");
!   SET ("java.specification.version", JV_API_VERSION);
    SET ("java.specification.name", "Java(tm) Platform API Specification");
    SET ("java.specification.vendor", "Sun Microsystems Inc.");
  
*************** java::lang::Runtime::insertSystemPropert
*** 417,423 ****
    // part we do this because most people specify only --prefix and
    // nothing else when installing gcj.  Plus, people are free to
    // redefine `java.home' with `-D' if necessary.
!   SET ("java.home", PREFIX);
    SET ("gnu.classpath.home", PREFIX);
    // This is set to $(libdir) because we use this to find .security
    // files at runtime.
--- 420,426 ----
    // part we do this because most people specify only --prefix and
    // nothing else when installing gcj.  Plus, people are free to
    // redefine `java.home' with `-D' if necessary.
!   SET ("java.home", JAVA_HOME);
    SET ("gnu.classpath.home", PREFIX);
    // This is set to $(libdir) because we use this to find .security
    // files at runtime.
*************** java::lang::Runtime::insertSystemPropert
*** 433,440 ****
    if (! uname (&u))
      {
        SET ("os.name", u.sysname);
-       SET ("os.arch", u.machine);
        SET ("os.version", u.release);
      }
    else
      {
--- 436,453 ----
    if (! uname (&u))
      {
        SET ("os.name", u.sysname);
        SET ("os.version", u.release);
+ 
+       // Normalize x86 architecture names to "i386" (except on Windows, which 
+       // is handled in win32.cc).
+       if (u.machine[0] == 'i'
+ 	  && u.machine[1] != 0
+ 	  && u.machine[2] == '8'
+ 	  && u.machine[3] == '6'
+ 	  && u.machine[4] == 0)
+ 	SET ("os.arch", "i386");
+       else
+ 	SET ("os.arch", u.machine);
      }
    else
      {
*************** java::lang::Runtime::insertSystemPropert
*** 534,542 ****
        SET ("user.region", "US");
      }  
  
    // Set some properties according to whatever was compiled in with
!   // `-D'.
!   for (int i = 0; _Jv_Compiler_Properties[i]; ++i)
      {
        const char *s, *p;
        // Find the `='.
--- 547,571 ----
        SET ("user.region", "US");
      }  
  
+   // The java extensions directory.
+   SET ("java.ext.dirs", JAVA_EXT_DIRS);
+ 
+   // The endorsed directories that libgcj knows about by default.
+   // This is a way to get other jars into the boot class loader
+   // without overriding java.endorsed.dirs.
+   SET ("gnu.gcj.runtime.endorsed.dirs", GCJ_ENDORSED_DIRS);
+ 
+   // The path to libgcj's boot classes
+   SET ("sun.boot.class.path", BOOT_CLASS_PATH);
+ 
+   // If there is a default system database, set it.
+   SET ("gnu.gcj.precompiled.db.path", LIBGCJ_DEFAULT_DATABASE);
+ 
    // Set some properties according to whatever was compiled in with
!   // `-D'.  Important: after this point, the only properties that
!   // should be set are those which either the user cannot meaningfully
!   // override, or which augment whatever value the user has provided.
!   for (int i = 0; i < _Jv_Properties_Count; ++i)
      {
        const char *s, *p;
        // Find the `='.
*************** java::lang::Runtime::insertSystemPropert
*** 562,594 ****
      }
  #endif
  
-   if (_Jv_Jar_Class_Path)
-     newprops->put(JvNewStringLatin1 ("java.class.path"),
-  		  JvNewStringLatin1 (_Jv_Jar_Class_Path));
-   else
-     {
-       // FIXME: find libgcj.zip and append its path?
-       char *classpath = ::getenv("CLASSPATH");
-       jstring cp = newprops->getProperty (JvNewStringLatin1("java.class.path"));
-       java::lang::StringBuffer *sb = new java::lang::StringBuffer ();
-       
-       if (classpath)
- 	{
- 	  sb->append (JvNewStringLatin1 (classpath));
- 	  sb->append (_Jv_platform_path_separator);
- 	}
-       if (cp != NULL)
- 	sb->append (cp);
-       else
- 	sb->append ((jchar) '.');
-       
-       newprops->put(JvNewStringLatin1 ("java.class.path"),
- 		      sb->toString ());
-     }
- 
-   // The path to libgcj's boot classes
-   SET ("sun.boot.class.path", BOOT_CLASS_PATH);
- 
    // The name used to invoke this process (argv[0] in C).
    SET ("gnu.gcj.progname", _Jv_GetSafeArg (0));
  
--- 591,596 ----
*************** java::lang::Runtime::insertSystemPropert
*** 613,618 ****
--- 615,639 ----
        // LD_LIBRARY_PATH, etc.
        SET ("java.library.path", "");
      }
+ 
+   // If java.class.path is still not set then set it according to the
+   // CLASSPATH environment variable if given.  See gij.cc main () and
+   // prims.cc _Jv_CreateJavaVM () for all the ways this could have
+   // been set much earlier.
+   // If CLASSPATH isn't set or if the path is empty fall back to "."
+   path = newprops->getProperty(JvNewStringLatin1("java.class.path"));
+   if (!path)
+     {
+       char *classpath = getenv("CLASSPATH");
+       if (classpath && classpath[0] != 0)
+ 	{
+ 	  path = JvNewStringLatin1 (classpath);
+ 	  newprops->put(JvNewStringLatin1 ("java.class.path"), path);
+ 	}
+     }
+ 
+   if (!path || path->length() == 0)
+     SET ("java.class.path", ".");
  }
  
  java::lang::Process *
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natString.cc gcc-4.0.0/libjava/java/lang/natString.cc
*** gcc-3.4.3/libjava/java/lang/natString.cc	Thu Oct 16 21:28:23 2003
--- gcc-4.0.0/libjava/java/lang/natString.cc	Thu Nov 25 03:47:05 2004
***************
*** 1,6 ****
  // natString.cc - Implementation of java.lang.String native methods.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natString.cc - Implementation of java.lang.String native methods.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** static int strhash_size = 0;  /* Number 
*** 56,62 ****
  jstring*
  _Jv_StringFindSlot (jchar* data, jint len, jint hash)
  {
!   JvSynchronize sync (&StringClass);
  
    int start_index = hash & (strhash_size - 1);
    int deleted_index = -1;
--- 56,62 ----
  jstring*
  _Jv_StringFindSlot (jchar* data, jint len, jint hash)
  {
!   JvSynchronize sync (&java::lang::String::class$);
  
    int start_index = hash & (strhash_size - 1);
    int deleted_index = -1;
*************** _Jv_StringGetSlot (jstring str)
*** 116,125 ****
    return _Jv_StringFindSlot(data, length, hashChars (data, length));
  }
  
! void
! java::lang::String::rehash()
  {
!   JvSynchronize sync (&StringClass);
  
    if (strhash == NULL)
      {
--- 116,125 ----
    return _Jv_StringFindSlot(data, length, hashChars (data, length));
  }
  
! static void
! rehash ()
  {
!   JvSynchronize sync (&java::lang::String::class$);
  
    if (strhash == NULL)
      {
*************** java::lang::String::rehash()
*** 166,172 ****
  jstring
  java::lang::String::intern()
  {
!   JvSynchronize sync (&StringClass);
    if (3 * strhash_count >= 2 * strhash_size)
      rehash();
    jstring* ptr = _Jv_StringGetSlot(this);
--- 166,172 ----
  jstring
  java::lang::String::intern()
  {
!   JvSynchronize sync (&java::lang::String::class$);
    if (3 * strhash_count >= 2 * strhash_size)
      rehash();
    jstring* ptr = _Jv_StringGetSlot(this);
*************** java::lang::String::intern()
*** 193,199 ****
  void
  _Jv_FinalizeString (jobject obj)
  {
!   JvSynchronize sync (&StringClass);
  
    // We might not actually have intern()d any strings at all, if
    // we're being called from Reference.
--- 193,199 ----
  void
  _Jv_FinalizeString (jobject obj)
  {
!   JvSynchronize sync (&java::lang::String::class$);
  
    // We might not actually have intern()d any strings at all, if
    // we're being called from Reference.
*************** _Jv_NewStringUtf8Const (Utf8Const* str)
*** 285,293 ****
      }
    chrs -= length;
  
!   JvSynchronize sync (&StringClass);
    if (3 * strhash_count >= 2 * strhash_size)
!     java::lang::String::rehash();
    jstring* ptr = _Jv_StringFindSlot (chrs, length, hash);
    if (*ptr != NULL && *ptr != DELETED_STRING)
      return (jstring) UNMASK_PTR (*ptr);
--- 285,293 ----
      }
    chrs -= length;
  
!   JvSynchronize sync (&java::lang::String::class$);
    if (3 * strhash_count >= 2 * strhash_size)
!     rehash();
    jstring* ptr = _Jv_StringFindSlot (chrs, length, hash);
    if (*ptr != NULL && *ptr != DELETED_STRING)
      return (jstring) UNMASK_PTR (*ptr);
*************** java::lang::String::valueOf (jint num)
*** 402,431 ****
  }
  
  jstring
- _Jv_AllocString(jsize len)
- {
-   jsize sz = sizeof(java::lang::String) + len * sizeof(jchar);
- 
-   // We assert that for strings allocated this way, the data field
-   // will always point to the object itself.  Thus there is no reason
-   // for the garbage collector to scan any of it.
-   // Furthermore, we're about to overwrite the string data, so
-   // initialization of the object is not an issue.
- #ifdef ENABLE_JVMPI
-   jstring obj = (jstring) _Jv_AllocPtrFreeObject(&StringClass, sz);
- #else
-   // Class needs no initialization, and there is no finalizer, so
-   // we can go directly to the collector's allocator interface.
-   jstring obj = (jstring) _Jv_AllocPtrFreeObj(sz, &StringClass);
- #endif
-   obj->data = obj;
-   obj->boffset = sizeof(java::lang::String);
-   obj->count = len;
-   obj->cachedHashCode = 0;
-   return obj;
- }
- 
- jstring
  _Jv_NewString(const jchar *chars, jsize len)
  {
    jstring str = _Jv_AllocString(len);
--- 402,407 ----
*************** java::lang::String::equals(jobject anObj
*** 550,556 ****
      return false;
    if (anObject == this)
      return true;
!   if (anObject->getClass() != &StringClass)
      return false;
    jstring other = (jstring) anObject;
    if (count != other->count)
--- 526,532 ----
      return false;
    if (anObject == this)
      return true;
!   if (anObject->getClass() != &java::lang::String::class$)
      return false;
    jstring other = (jstring) anObject;
    if (count != other->count)
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natSystem.cc gcc-4.0.0/libjava/java/lang/natSystem.cc
*** gcc-3.4.3/libjava/java/lang/natSystem.cc	Wed Jul 23 15:31:43 2003
--- gcc-4.0.0/libjava/java/lang/natSystem.cc	Tue Jun 15 13:43:33 2004
*************** java::lang::System::isWordsBigEndian (vo
*** 142,144 ****
--- 142,157 ----
    u.lval = 1;
    return u.cval == 0;
  }
+ 
+ jstring
+ java::lang::System::getenv0 (jstring name)
+ {
+   jint len = _Jv_GetStringUTFLength (name);
+   char buf[len + 1];
+   jsize total = JvGetStringUTFRegion (name, 0, name->length(), buf);
+   buf[total] = '\0';
+   const char *value = ::getenv (buf);
+   if (value == NULL)
+     return NULL;
+   return JvNewStringUTF (value);
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natThread.cc gcc-4.0.0/libjava/java/lang/natThread.cc
*** gcc-3.4.3/libjava/java/lang/natThread.cc	Tue Oct 21 04:46:19 2003
--- gcc-4.0.0/libjava/java/lang/natThread.cc	Fri Jan 14 07:36:27 2005
*************** details.  */
*** 16,21 ****
--- 16,22 ----
  #include <jvm.h>
  #include <java-threads.h>
  
+ #include <gnu/gcj/RawDataManaged.h>
  #include <java/lang/Thread.h>
  #include <java/lang/ThreadGroup.h>
  #include <java/lang/IllegalArgumentException.h>
*************** java::lang::Thread::initialize_native (v
*** 59,69 ****
  {
    natThread *nt = (natThread *) _Jv_AllocBytes (sizeof (natThread));
    
!   // The native thread data is kept in a Object field, not a RawData, so that
!   // the GC allocator can be used and a finalizer run after the thread becomes
!   // unreachable. Note that this relies on the GC's ability to finalize 
!   // non-Java objects. FIXME?
!   data = reinterpret_cast<jobject> (nt);
    
    // Register a finalizer to clean up the native thread resources.
    _Jv_RegisterFinalizer (data, finalize_native);
--- 60,66 ----
  {
    natThread *nt = (natThread *) _Jv_AllocBytes (sizeof (natThread));
    
!   data = (gnu::gcj::RawDataManaged *) nt;
    
    // Register a finalizer to clean up the native thread resources.
    _Jv_RegisterFinalizer (data, finalize_native);
*************** finalize_native (jobject ptr)
*** 81,86 ****
--- 78,90 ----
  {
    natThread *nt = (natThread *) ptr;
    _Jv_ThreadDestroyData (nt->thread);
+ #ifdef _Jv_HaveCondDestroy
+   _Jv_CondDestroy (&nt->join_cond);
+ #endif
+ #ifdef _Jv_HaveMutexDestroy
+   _Jv_MutexDestroy (&nt->join_mutex);
+ #endif
+   _Jv_FreeJNIEnv(nt->jni_env);
  }
  
  jint
*************** java::lang::Thread::currentThread (void)
*** 98,112 ****
    return _Jv_ThreadCurrent ();
  }
  
- void
- java::lang::Thread::destroy (void)
- {
-   // NOTE: This is marked as unimplemented in the JDK 1.2
-   // documentation.
-   throw new UnsupportedOperationException
-     (JvNewStringLatin1 ("Thread.destroy unimplemented"));
- }
- 
  jboolean
  java::lang::Thread::holdsLock (jobject obj)
  {
--- 102,107 ----
*************** java::lang::Thread::holdsLock (jobject o
*** 118,123 ****
--- 113,119 ----
  void
  java::lang::Thread::interrupt (void)
  {
+   checkAccess ();
    natThread *nt = (natThread *) data;
    _Jv_ThreadInterrupt (nt->thread);
  }
*************** java::lang::Thread::start (void)
*** 327,332 ****
--- 323,329 ----
  void
  java::lang::Thread::stop (java::lang::Throwable *)
  {
+   checkAccess ();
    throw new UnsupportedOperationException
      (JvNewStringLatin1 ("Thread.stop unimplemented"));
  }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natVMClassLoader.cc gcc-4.0.0/libjava/java/lang/natVMClassLoader.cc
*** gcc-3.4.3/libjava/java/lang/natVMClassLoader.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/lang/natVMClassLoader.cc	Wed Apr  6 21:38:31 2005
***************
*** 0 ****
--- 1,227 ----
+ // natVMClassLoader.cc - VMClassLoader native methods
+ 
+ /* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ /* Author: Kresten Krab Thorup <krab@gnu.org>  */
+ 
+ #include <config.h>
+ 
+ #include <stdlib.h>
+ #include <string.h>
+ 
+ #include <gcj/cni.h>
+ #include <jvm.h>
+ 
+ #include <java-threads.h>
+ #include <java-interp.h>
+ 
+ #include <java/lang/VMClassLoader.h>
+ #include <java/lang/VMCompiler.h>
+ #include <gnu/gcj/runtime/ExtensionClassLoader.h>
+ #include <gnu/gcj/runtime/SystemClassLoader.h>
+ #include <gnu/gcj/runtime/BootClassLoader.h>
+ #include <java/lang/ClassLoader.h>
+ #include <java/lang/Class.h>
+ #include <java/lang/Throwable.h>
+ #include <java/security/ProtectionDomain.h>
+ #include <java/lang/ClassFormatError.h>
+ #include <java/lang/StringBuffer.h>
+ #include <java/lang/Runtime.h>
+ #include <java/util/HashSet.h>
+ 
+ void
+ java::lang::VMClassLoader::resolveClass (jclass klass)
+ {
+   JvSynchronize sync (klass);
+   try
+     {
+       _Jv_Linker::wait_for_state (klass, JV_STATE_LINKED);
+     }
+   catch (java::lang::Throwable *x)
+     {
+       klass->set_state(JV_STATE_ERROR);
+       transformException(klass, x);
+     }
+ }
+ 
+ java::lang::Class *
+ java::lang::VMClassLoader::defineClass (java::lang::ClassLoader *loader,
+ 					jstring name,
+ 					jbyteArray data, 
+ 					jint offset,
+ 					jint length,
+ 					java::security::ProtectionDomain *pd)
+ {
+   jclass klass = VMCompiler::compileClass(loader, name, data,
+ 					  offset, length, pd);
+ 
+ #ifdef INTERPRETER
+   if (klass == NULL)
+     {
+       klass = new java::lang::Class ();
+ 
+       // Synchronize on the class, so that it is not attempted initialized
+       // until we're done loading.
+       JvSynchronize sync (klass);
+ 
+       // Record the defining loader.  For the bootstrap class loader,
+       // we record NULL.
+       if (loader != bootLoader)
+ 	klass->loader = loader;
+ 
+       if (name != 0)
+ 	{
+ 	  _Jv_Utf8Const *name2 = _Jv_makeUtf8Const (name);
+ 
+ 	  if (! _Jv_VerifyClassName (name2))
+ 	    throw new java::lang::ClassFormatError
+ 	      (JvNewStringLatin1 ("erroneous class name"));
+ 
+ 	  klass->name = name2;
+ 	}
+ 
+       try
+ 	{
+ 	  _Jv_DefineClass (klass, data, offset, length, pd);
+ 	}
+       catch (java::lang::Throwable *ex)
+ 	{
+ 	  klass->state = JV_STATE_ERROR;
+ 	  klass->notifyAll ();
+ 
+ 	  _Jv_UnregisterInitiatingLoader (klass, klass->loader);
+ 
+ 	  // If EX is not a ClassNotFoundException, that's ok, because we
+ 	  // account for the possibility in defineClass().
+ 	  throw ex;
+ 	}
+ 
+       // if everything proceeded sucessfully, we're loaded.
+       JvAssert (klass->state == JV_STATE_LOADED);
+     }
+ #endif // INTERPRETER
+ 
+   return klass;
+ }
+ 
+ java::lang::ClassLoader *
+ java::lang::VMClassLoader::getSystemClassLoaderInternal()
+ {
+   _Jv_InitClass (&gnu::gcj::runtime::ExtensionClassLoader::class$);
+   return gnu::gcj::runtime::ExtensionClassLoader::system_instance;
+ }
+ 
+ jclass
+ java::lang::VMClassLoader::getPrimitiveClass (jchar type)
+ {
+   char sig[2];
+   sig[0] = (char) type;
+   sig[1] = '\0';
+   // Note: this cannot return NULL, since the input is always correct.
+   return _Jv_FindClassFromSignature (sig, NULL);
+ }
+ 
+ void
+ java::lang::VMClassLoader::initBootLoader(jstring libdir)
+ {
+   bootLoader = new gnu::gcj::runtime::BootClassLoader(libdir);
+ }
+ 
+ jclass
+ java::lang::VMClassLoader::nativeFindClass (jstring name)
+ {
+   jclass klass = NULL;
+ 
+   if (lib_control != LIB_NEVER)
+     {
+       // Turn `gnu.pkg.quux' into `lib-gnu-pkg-quux'.  Then search for
+       // a module named (eg, on Linux) `lib-gnu-pkg-quux.so', followed
+       // by `lib-gnu-pkg.so' and `lib-gnu.so'.  If loading one of
+       // these causes the class to appear in the cache, then use it.
+       java::lang::StringBuffer *sb
+ 	= new java::lang::StringBuffer (JvNewStringLatin1("lib-"));
+       // Skip inner classes
+       jstring cn;
+       jint ci = name->indexOf('$');
+       if (ci == -1)
+ 	cn = name;
+       else
+ 	cn = name->substring (0, ci);
+       jstring so_base_name
+ 	= (sb->append (cn)->toString ())->replace ('.', '-');
+ 
+       using namespace ::java::lang;
+       Runtime *rt = Runtime::getRuntime();
+ 
+       _Jv_Utf8Const *name_u = NULL;
+ 
+       // Compare against `3' because that is the length of "lib".
+       while (! klass && so_base_name && so_base_name->length() > 3)
+ 	{
+ 	  if (lib_control == LIB_CACHE)
+ 	    {
+ 	      // If we've already tried this name, we're done.
+ 	      if (tried_libraries->contains(so_base_name))
+ 		break;
+ 	      tried_libraries->add(so_base_name);
+ 	    }
+ 
+ 	  jboolean loaded = rt->loadLibraryInternal (so_base_name);
+ 
+ 	  jint nd = so_base_name->lastIndexOf ('-');
+ 	  if (nd == -1)
+ 	    so_base_name = NULL;
+ 	  else
+ 	    so_base_name = so_base_name->substring (0, nd);
+ 
+ 	  if (loaded)
+ 	    {
+ 	      if (name_u == NULL)
+ 		name_u = _Jv_makeUtf8Const (name);
+ 	      klass = _Jv_FindClassInCache (name_u);
+ 	    }
+ 	}
+     }
+ 
+   if (klass)
+     definePackageForNative(name);
+ 
+   return klass;
+ }
+ 
+ jclass
+ java::lang::VMClassLoader::loadClass(jstring name, jboolean resolve)
+ {
+   // We try the boot loader first, so that the endorsed directory
+   // overrides compiled-in classes.
+   jclass klass = NULL;
+   if (bootLoader)
+     klass = bootLoader->bootLoadClass(name);
+   if (! klass)
+     {
+       _Jv_Utf8Const *utf = _Jv_makeUtf8Const (name);
+       klass = _Jv_FindClassInCache (utf);
+     }
+   if (! klass)
+     klass = nativeFindClass(name);
+   if (klass)
+     {
+       // We never want to return a class without its supers linked.
+       // It isn't clear from the spec, but this is what other
+       // implementations do in practice.
+       if (resolve)
+ 	_Jv_InitClass (klass);
+       else
+ 	_Jv_Linker::wait_for_state (klass, JV_STATE_LOADING);
+ 
+       definePackageForNative(name);
+     }
+ 
+   return klass;
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/natWin32Process.cc gcc-4.0.0/libjava/java/lang/natWin32Process.cc
*** gcc-3.4.3/libjava/java/lang/natWin32Process.cc	Tue Dec  2 22:26:49 2003
--- gcc-4.0.0/libjava/java/lang/natWin32Process.cc	Sun Feb 29 19:14:20 2004
*************** details.  */
*** 25,30 ****
--- 25,33 ----
  #include <java/io/FileOutputStream.h>
  #include <java/io/IOException.h>
  #include <java/lang/OutOfMemoryError.h>
+ #include <gnu/java/nio/channels/FileChannelImpl.h>
+ 
+ using gnu::java::nio::channels::FileChannelImpl;
  
  void
  java::lang::ConcreteProcess::cleanup (void)
*************** java::lang::ConcreteProcess::startProces
*** 282,293 ****
        ChildProcessPipe aChildStdOut(ChildProcessPipe::OUTPUT);
        ChildProcessPipe aChildStdErr(ChildProcessPipe::OUTPUT);
  
!       outputStream = new FileOutputStream (new FileDescriptor (
!                            (jint) aChildStdIn.getParentHandle ()));
!       inputStream = new FileInputStream (new FileDescriptor (
!                            (jint) aChildStdOut.getParentHandle ()));
!       errorStream = new FileInputStream (new FileDescriptor (
!                            (jint) aChildStdErr.getParentHandle ()));
  
        // Now create the child process.
        PROCESS_INFORMATION pi;
--- 285,299 ----
        ChildProcessPipe aChildStdOut(ChildProcessPipe::OUTPUT);
        ChildProcessPipe aChildStdErr(ChildProcessPipe::OUTPUT);
  
!       outputStream = new FileOutputStream (new FileChannelImpl (
!                            (jint) aChildStdIn.getParentHandle (),
! 			   FileChannelImpl::WRITE));
!       inputStream = new FileInputStream (new FileChannelImpl (
!                            (jint) aChildStdOut.getParentHandle (),
! 			   FileChannelImpl::READ));
!       errorStream = new FileInputStream (new FileChannelImpl (
!                            (jint) aChildStdErr.getParentHandle (),
! 			   FileChannelImpl::READ));
  
        // Now create the child process.
        PROCESS_INFORMATION pi;
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/AccessibleObject.java gcc-4.0.0/libjava/java/lang/reflect/AccessibleObject.java
*** gcc-3.4.3/libjava/java/lang/reflect/AccessibleObject.java	Sun Oct 26 02:28:45 2003
--- gcc-4.0.0/libjava/java/lang/reflect/AccessibleObject.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* java.lang.reflect.AccessibleObject
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.lang.reflect.AccessibleObject
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.lang.reflect;
*** 46,53 ****
   * 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
--- 46,53 ----
   * 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
*************** public class AccessibleObject
*** 133,139 ****
     *
     * @throws SecurityException if permission is denied
     */
!   private static final void checkPermission()
    {
      SecurityManager sm = System.getSecurityManager();
      if (sm != null)
--- 133,139 ----
     *
     * @throws SecurityException if permission is denied
     */
!   private static void checkPermission()
    {
      SecurityManager sm = System.getSecurityManager();
      if (sm != null)
*************** public class AccessibleObject
*** 148,154 ****
     * @throws SecurityException if flag is true and this is a constructor
     * for <code>java.lang.Class</code>.
     */
!   private final void secureSetAccessible(boolean flag)
    {
      if (flag &&
          (this instanceof Constructor
--- 148,154 ----
     * @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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/Array.java gcc-4.0.0/libjava/java/lang/reflect/Array.java
*** gcc-3.4.3/libjava/java/lang/reflect/Array.java	Wed Jan  7 18:46:18 2004
--- gcc-4.0.0/libjava/java/lang/reflect/Array.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* java.lang.reflect.Array - manipulate arrays by reflection
!    Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import gnu.classpath.Configuration;
*** 63,70 ****
   * 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
--- 63,70 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/Field.java gcc-4.0.0/libjava/java/lang/reflect/Field.java
*** gcc-3.4.3/libjava/java/lang/reflect/Field.java	Mon Jul 21 01:54:06 2003
--- gcc-4.0.0/libjava/java/lang/reflect/Field.java	Tue Feb 22 03:13:35 2005
*************** public final class Field extends Accessi
*** 23,28 ****
--- 23,31 ----
    // Offset in bytes from the start of declaringClass's fields array.
    private int offset;
  
+   // The Class (or primitive TYPE) of this field.
+   private Class type;
+ 
    // This is instantiated by Class sometimes, but it uses C++ and
    // avoids the Java protection check.
    Field ()
*************** public final class Field extends Accessi
*** 136,211 ****
    public void setByte (Object obj, byte b)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setByte(null, obj, b);
    }
  
    public void setShort (Object obj,  short s)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setShort(null, obj, s);
    }
  
    public void setInt (Object obj, int i)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setInt(null, obj, i);
    }
  
    public void setLong (Object obj, long l)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setLong(null, obj, l);
    }
  
    public void setFloat (Object obj, float f)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setFloat(null, obj, f);
    }
  
    public void setDouble (Object obj, double d)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setDouble(null, obj, d);
    }
  
    public void setChar (Object obj, char c)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setChar(null, obj, c);
    }
  
    public void setBoolean (Object obj, boolean b)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setBoolean(null, obj, b);
    }
  
!   private native void setByte (Class caller, Object obj, byte b)
      throws IllegalArgumentException, IllegalAccessException;
  
!   private native void setShort (Class caller, Object obj, short s)
      throws IllegalArgumentException, IllegalAccessException;
  
!   private native void setInt (Class caller, Object obj, int i)
      throws IllegalArgumentException, IllegalAccessException;
  
!   private native void setLong (Class caller, Object obj, long l)
      throws IllegalArgumentException, IllegalAccessException;
  
!   private native void setFloat (Class caller, Object obj, float f)
      throws IllegalArgumentException, IllegalAccessException;
  
!   private native void setDouble (Class caller, Object obj, double d)
      throws IllegalArgumentException, IllegalAccessException;
  
!   private native void setChar (Class caller, Object obj, char c)
      throws IllegalArgumentException, IllegalAccessException;
  
!   private native void setBoolean (Class caller, Object obj, boolean b)
      throws IllegalArgumentException, IllegalAccessException;
  
!   private native void set (Class caller, Object obj, Object val, Class type)
      throws IllegalArgumentException, IllegalAccessException;
  
    public void set (Object object, Object value)
--- 139,217 ----
    public void setByte (Object obj, byte b)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setByte(null, obj, b, true);
    }
  
    public void setShort (Object obj,  short s)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setShort(null, obj, s, true);
    }
  
    public void setInt (Object obj, int i)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setInt(null, obj, i, true);
    }
  
    public void setLong (Object obj, long l)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setLong(null, obj, l, true);
    }
  
    public void setFloat (Object obj, float f)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setFloat(null, obj, f, true);
    }
  
    public void setDouble (Object obj, double d)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setDouble(null, obj, d, true);
    }
  
    public void setChar (Object obj, char c)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setChar(null, obj, c, true);
    }
  
    public void setBoolean (Object obj, boolean b)
      throws IllegalArgumentException, IllegalAccessException
    {
!     setBoolean(null, obj, b, true);
    }
  
!   native void setByte (Class caller, Object obj, byte b, boolean checkFinal)
      throws IllegalArgumentException, IllegalAccessException;
  
!   native void setShort (Class caller, Object obj, short s, boolean checkFinal)
      throws IllegalArgumentException, IllegalAccessException;
  
!   native void setInt (Class caller, Object obj, int i, boolean checkFinal)  
      throws IllegalArgumentException, IllegalAccessException;
  
!   native void setLong (Class caller, Object obj, long l, boolean checkFinal)
      throws IllegalArgumentException, IllegalAccessException;
  
!   native void setFloat (Class caller, Object obj, float f, boolean checkFinal)
      throws IllegalArgumentException, IllegalAccessException;
  
!   native void setDouble (Class caller, Object obj, double d,
! 			 boolean checkFinal)
      throws IllegalArgumentException, IllegalAccessException;
  
!   native void setChar (Class caller, Object obj, char c, boolean checkFinal)
      throws IllegalArgumentException, IllegalAccessException;
  
!   native void setBoolean (Class caller, Object obj, boolean b,
! 			  boolean checkFinal)
      throws IllegalArgumentException, IllegalAccessException;
  
!   native void set (Class caller, Object obj, Object val, Class type, 
! 		   boolean checkFinal)
      throws IllegalArgumentException, IllegalAccessException;
  
    public void set (Object object, Object value)
*************** public final class Field extends Accessi
*** 219,241 ****
    {
      Class type = getType();
      if (! type.isPrimitive())
!       set(caller, object, value, type);
      else if (value instanceof Byte)
!       setByte(caller, object, ((Byte) value).byteValue());
      else if (value instanceof Short)
!       setShort (caller, object, ((Short) value).shortValue());
      else if (value instanceof Integer)
!       setInt(caller, object, ((Integer) value).intValue());
      else if (value instanceof Long)
!       setLong(caller, object, ((Long) value).longValue());
      else if (value instanceof Float)
!       setFloat(caller, object, ((Float) value).floatValue());
      else if (value instanceof Double)
!       setDouble(caller, object, ((Double) value).doubleValue());
      else if (value instanceof Character)
!       setChar(caller, object, ((Character) value).charValue());
      else if (value instanceof Boolean)
!       setBoolean(caller, object, ((Boolean) value).booleanValue());
      else
        throw new IllegalArgumentException();
    }
--- 225,247 ----
    {
      Class type = getType();
      if (! type.isPrimitive())
!       set(caller, object, value, type, true);
      else if (value instanceof Byte)
!       setByte(caller, object, ((Byte) value).byteValue(), true);
      else if (value instanceof Short)
!       setShort (caller, object, ((Short) value).shortValue(), true);
      else if (value instanceof Integer)
!       setInt(caller, object, ((Integer) value).intValue(), true);
      else if (value instanceof Long)
!       setLong(caller, object, ((Long) value).longValue(), true);
      else if (value instanceof Float)
!       setFloat(caller, object, ((Float) value).floatValue(), true);
      else if (value instanceof Double)
!       setDouble(caller, object, ((Double) value).doubleValue(), true);
      else if (value instanceof Character)
!       setChar(caller, object, ((Character) value).charValue(), true);
      else if (value instanceof Boolean)
!       setBoolean(caller, object, ((Boolean) value).booleanValue(), true);
      else
        throw new IllegalArgumentException();
    }
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/InvocationHandler.java gcc-4.0.0/libjava/java/lang/reflect/InvocationHandler.java
*** gcc-3.4.3/libjava/java/lang/reflect/InvocationHandler.java	Mon Sep 30 05:19:09 2002
--- gcc-4.0.0/libjava/java/lang/reflect/InvocationHandler.java	Tue Apr 20 12:30:19 2004
*************** package java.lang.reflect;
*** 49,85 ****
   * 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>
   *
!  * Hints for implementing this class:<br>
   * <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>
   *
   * @see Proxy
   * @see UndeclaredThrowableException
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.3
   * @status updated to 1.4
   */
--- 49,86 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/InvocationTargetException.java gcc-4.0.0/libjava/java/lang/reflect/InvocationTargetException.java
*** gcc-3.4.3/libjava/java/lang/reflect/InvocationTargetException.java	Sat Jun 15 19:45:33 2002
--- gcc-4.0.0/libjava/java/lang/reflect/InvocationTargetException.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* InvocationTargetException.java -- Wrapper exception for reflection
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang.reflect;
*** 45,52 ****
   * 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
--- 45,52 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/Member.java gcc-4.0.0/libjava/java/lang/reflect/Member.java
*** gcc-3.4.3/libjava/java/lang/reflect/Member.java	Tue Jan 22 22:40:20 2002
--- gcc-4.0.0/libjava/java/lang/reflect/Member.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* java.lang.reflect.Member - common query methods in reflection
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.lang.reflect;
*** 44,51 ****
   * 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
--- 44,51 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/Modifier.java gcc-4.0.0/libjava/java/lang/reflect/Modifier.java
*** gcc-3.4.3/libjava/java/lang/reflect/Modifier.java	Thu Dec 19 19:31:54 2002
--- gcc-4.0.0/libjava/java/lang/reflect/Modifier.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* java.lang.reflect.Modifier
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.lang.reflect.Modifier
!    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.lang.reflect;
*** 50,57 ****
   * 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()
--- 50,57 ----
   * 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()
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/Proxy.java gcc-4.0.0/libjava/java/lang/reflect/Proxy.java
*** gcc-3.4.3/libjava/java/lang/reflect/Proxy.java	Thu Sep 25 20:46:14 2003
--- gcc-4.0.0/libjava/java/lang/reflect/Proxy.java	Tue Feb 22 21:11:28 2005
***************
*** 1,5 ****
  /* Proxy.java -- build a proxy class that implements reflected interfaces
!    Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,52 ****
  
  package java.lang.reflect;
  
  import java.io.Serializable;
  import java.security.ProtectionDomain;
- import java.util.Map;
  import java.util.HashMap;
- import java.util.Set;
  import java.util.HashSet;
  import java.util.Iterator;
! import gnu.classpath.Configuration;
! import gnu.java.lang.reflect.TypeSignature;
  
  /**
   * This class allows you to dynamically create an instance of any (or
--- 38,53 ----
  
  package java.lang.reflect;
  
+ import gnu.classpath.Configuration;
+ 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
*************** import gnu.java.lang.reflect.TypeSignatu
*** 153,159 ****
   * @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
   */
--- 154,160 ----
   * @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 Serializab
*** 211,245 ****
     * Returns the proxy {@link Class} for the given ClassLoader and array
     * of interfaces, dynamically generating it if necessary.
     *
!    * There are several restrictions on this method, the violation of
     * which will result in an IllegalArgumentException or
!    * NullPointerException:
     * <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.
     *
     * @param loader the class loader to define the proxy class in; null
     *        implies the bootstrap class loader
--- 212,247 ----
     * 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
*************** public class Proxy implements Serializab
*** 457,463 ****
     * Helper class for mapping unique ClassLoader and interface combinations
     * to proxy classes.
     *
!    * @author Eric Blake <ebb9@email.byu.edu>
     */
    private static final class ProxyType
    {
--- 459,465 ----
     * Helper class for mapping unique ClassLoader and interface combinations
     * to proxy classes.
     *
!    * @author Eric Blake (ebb9@email.byu.edu)
     */
    private static final class ProxyType
    {
*************** public class Proxy implements Serializab
*** 563,569 ****
     * 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
    {
--- 565,571 ----
     * 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
    {
*************** public class Proxy implements Serializab
*** 716,728 ****
     * 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>
     */
    private static final class ProxyData
    {
      /**
!      * The package this class is in.  Possibly null, meaning the unnamed
!      * package.
       */
      String pack;
  
--- 718,730 ----
     * 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)
     */
    private 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;
  
*************** public class Proxy implements Serializab
*** 753,759 ****
      /**
       * For unique id's
       */
!     private static int count = 0;
  
      /**
       * The id of this proxy class
--- 755,761 ----
      /**
       * For unique id's
       */
!     private static int count;
  
      /**
       * The id of this proxy class
*************** public class Proxy implements Serializab
*** 768,785 ****
      }
  
      /**
!      * Return the name of a package given the name of a class.
!      * Returns null if no package.  We use this in preference to
       * using Class.getPackage() to avoid problems with ClassLoaders
       * that don't set the package.
       */
!     static String getPackage(Class k)
      {
        String name = k.getName();
        int idx = name.lastIndexOf('.');
!       if (idx >= 0)
! 	return name.substring(0, idx);
!       return null;
      }
  
      /**
--- 770,786 ----
      }
  
      /**
!      * 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);
      }
  
      /**
*************** public class Proxy implements Serializab
*** 870,876 ****
     * 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
    {
--- 871,877 ----
     * 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
    {
*************** public class Proxy implements Serializab
*** 960,967 ****
        // access_flags
        putU2(Modifier.SUPER | Modifier.FINAL | Modifier.PUBLIC);
        // this_class
!       qualName = ((data.pack == null ? "" : data.pack + '.')
!                   + "$Proxy" + data.id);
        putU2(classInfo(TypeSignature.getEncodingOfClass(qualName, false)));
        // super_class
        putU2(classInfo("java/lang/reflect/Proxy"));
--- 961,967 ----
        // 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"));
*************** public class Proxy implements Serializab
*** 1303,1309 ****
       *        implies the bootstrap class loader
       * @return the proxy class Class object
       */
!     final Class generate(ClassLoader loader)
      {
        byte[] bytecode = new byte[pool.length() + stream.length()];
        // More efficient to bypass calling charAt() repetitively.
--- 1303,1309 ----
       *        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.
*************** public class Proxy implements Serializab
*** 1324,1361 ****
  
        try
          {
-           // XXX Do we require more native support here?
- 
            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);
! 
!           // Bypass the security check of setAccessible(true), since this
!           // is trusted code. But note the comment above about the security
!           // risk of doing this outside a synchronized block.
            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);
-           m.flag = false;
  
            // Finally, initialize the m field of the proxy class, before
            // returning it.
- 
-           // No security risk here, since clazz has not been exposed yet,
-           // so user code cannot grab the same reflection object.
            Field f = clazz.getDeclaredField("m");
            f.flag = true;
            // we can share the array, because it is not publicized
            f.set(null, methods);
-           f.flag = false;
  
            return clazz;
          }
!       catch (Throwable e)
          {
            // assert false;
            throw (Error) new InternalError("Unexpected: " + e).initCause(e);
--- 1324,1353 ----
  
        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);
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/ReflectPermission.java gcc-4.0.0/libjava/java/lang/reflect/ReflectPermission.java
*** gcc-3.4.3/libjava/java/lang/reflect/ReflectPermission.java	Tue Jan 22 22:40:20 2002
--- gcc-4.0.0/libjava/java/lang/reflect/ReflectPermission.java	Thu Feb 17 07:48:34 2005
***************
*** 1,5 ****
  /* ReflectPermission.java - named permission for reflaction
!    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ReflectPermission.java - named permission for reflaction
!    Copyright (C) 2000, 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,49 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  /* 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.
   */
  
- package java.lang.reflect;
- 
- import java.security.BasicPermission;
- 
  /**
   * This class implements permissions for reflection.  This is a named
   * permission, and the only defined name is suppressAccessChecks, which
--- 35,49 ----
  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
*************** import java.security.BasicPermission;
*** 66,73 ****
   *  </tr>
   * </table>
   *
!  * @author Tom Tromey <tromey@redhat.com>
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.2
   * @status updated to 1.4
   */
--- 66,73 ----
   *  </tr>
   * </table>
   *
!  * @author Tom Tromey (tromey@redhat.com)
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.2
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/UndeclaredThrowableException.java gcc-4.0.0/libjava/java/lang/reflect/UndeclaredThrowableException.java
*** gcc-3.4.3/libjava/java/lang/reflect/UndeclaredThrowableException.java	Mon Sep 30 05:19:09 2002
--- gcc-4.0.0/libjava/java/lang/reflect/UndeclaredThrowableException.java	Thu Feb 17 07:48:34 2005
***************
*** 1,6 ****
  /* UndeclaredThrowableException.java -- wraps an undeclared checked exception
     thrown by a Proxy invocation handler
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.lang.reflect;
*** 50,56 ****
   * exception, never {@link Error} or {@link RuntimeException},
   * which are unchecked.
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Proxy
   * @see InvocationHandler
   * @since 1.3
--- 50,56 ----
   * exception, never {@link Error} or {@link RuntimeException},
   * which are unchecked.
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Proxy
   * @see InvocationHandler
   * @since 1.3
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/natField.cc gcc-4.0.0/libjava/java/lang/reflect/natField.cc
*** gcc-3.4.3/libjava/java/lang/reflect/natField.cc	Sat Oct 25 06:49:20 2003
--- gcc-4.0.0/libjava/java/lang/reflect/natField.cc	Tue Feb 22 03:13:35 2005
***************
*** 1,6 ****
  // natField.cc - Implementation of java.lang.reflect.Field native methods.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natField.cc - Implementation of java.lang.reflect.Field native methods.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** java::lang::reflect::Field::getName ()
*** 45,58 ****
  jclass
  java::lang::reflect::Field::getType ()
  {
!   jfieldID fld = _Jv_FromReflectedField (this);
!   JvSynchronize sync (declaringClass);
!   _Jv_ResolveField (fld, declaringClass->getClassLoaderInternal ());
!   return fld->type;
  }
  
  static void*
! getAddr (java::lang::reflect::Field* field, jclass caller, jobject obj)
  {
    // FIXME: we know CALLER is NULL here.  At one point we planned to
    // have the compiler insert the caller as a hidden argument in some
--- 45,63 ----
  jclass
  java::lang::reflect::Field::getType ()
  {
!   if (type == NULL)
!     {
!       jfieldID fld = _Jv_FromReflectedField (this);
!       JvSynchronize sync (declaringClass);
!       _Jv_Linker::resolve_field (fld, declaringClass->getClassLoaderInternal ());
!       type = fld->type;
!     }
!   return type;
  }
  
  static void*
! getAddr (java::lang::reflect::Field* field, jclass caller, jobject obj,
!          jboolean checkFinal)
  {
    // FIXME: we know CALLER is NULL here.  At one point we planned to
    // have the compiler insert the caller as a hidden argument in some
*************** getAddr (java::lang::reflect::Field* fie
*** 63,68 ****
--- 68,79 ----
    
    jfieldID fld = _Jv_FromReflectedField (field);
    _Jv_ushort flags = fld->getModifiers();
+ 
+   // Setting a final field is usually not allowed.
+   if (checkFinal
+       && field->getModifiers() & java::lang::reflect::Modifier::FINAL)
+     throw new java::lang::IllegalAccessException(JvNewStringUTF 
+       ("Field is final"));
    
    // Check accessibility, if required.
    if (! (Modifier::isPublic (flags) || field->isAccessible()))
*************** getDouble (jclass cls, void* addr)
*** 180,235 ****
  jboolean
  java::lang::reflect::Field::getBoolean (jclass caller, jobject obj)
  {
!   return ::getBoolean (this->getType(), getAddr (this, caller, obj));
  }
  
  jchar
  java::lang::reflect::Field::getChar (jclass caller, jobject obj)
  {
!   return ::getChar (this->getType(), getAddr (this, caller, obj));
  }
  
  jbyte
  java::lang::reflect::Field::getByte (jclass caller, jobject obj)
  {
!   return ::getByte (this->getType(), getAddr (this, caller, obj));
  }
  
  jshort
  java::lang::reflect::Field::getShort (jclass caller, jobject obj)
  {
!   return ::getShort (this->getType(), getAddr (this, caller, obj));
  }
  
  jint
  java::lang::reflect::Field::getInt (jclass caller, jobject obj)
  {
!   return ::getInt (this->getType(), getAddr (this, caller, obj));
  }
  
  jlong
  java::lang::reflect::Field::getLong (jclass caller, jobject obj)
  {
!   return ::getLong (this->getType(), getAddr (this, caller, obj));
  }
  
  jfloat
  java::lang::reflect::Field::getFloat (jclass caller, jobject obj)
  {
!   return ::getFloat (this->getType(), getAddr (this, caller, obj));
  }
  
  jdouble
  java::lang::reflect::Field::getDouble (jclass caller, jobject obj)
  {
!   return ::getDouble (this->getType(), getAddr (this, caller, obj));
  }
  
  jobject
  java::lang::reflect::Field::get (jclass caller, jobject obj)
  {
    jclass type = this->getType();
!   void* addr = getAddr (this, caller, obj);
    if (! type->isPrimitive ())
      return * (jobject*) addr;
    if (type == JvPrimClass (double))
--- 191,246 ----
  jboolean
  java::lang::reflect::Field::getBoolean (jclass caller, jobject obj)
  {
!   return ::getBoolean (this->getType(), getAddr (this, caller, obj, false));
  }
  
  jchar
  java::lang::reflect::Field::getChar (jclass caller, jobject obj)
  {
!   return ::getChar (this->getType(), getAddr (this, caller, obj, false));
  }
  
  jbyte
  java::lang::reflect::Field::getByte (jclass caller, jobject obj)
  {
!   return ::getByte (this->getType(), getAddr (this, caller, obj, false));
  }
  
  jshort
  java::lang::reflect::Field::getShort (jclass caller, jobject obj)
  {
!   return ::getShort (this->getType(), getAddr (this, caller, obj, false));
  }
  
  jint
  java::lang::reflect::Field::getInt (jclass caller, jobject obj)
  {
!   return ::getInt (this->getType(), getAddr (this, caller, obj, false));
  }
  
  jlong
  java::lang::reflect::Field::getLong (jclass caller, jobject obj)
  {
!   return ::getLong (this->getType(), getAddr (this, caller, obj, false));
  }
  
  jfloat
  java::lang::reflect::Field::getFloat (jclass caller, jobject obj)
  {
!   return ::getFloat (this->getType(), getAddr (this, caller, obj, false));
  }
  
  jdouble
  java::lang::reflect::Field::getDouble (jclass caller, jobject obj)
  {
!   return ::getDouble (this->getType(), getAddr (this, caller, obj, false));
  }
  
  jobject
  java::lang::reflect::Field::get (jclass caller, jobject obj)
  {
    jclass type = this->getType();
!   void* addr = getAddr (this, caller, obj, false);
    if (! type->isPrimitive ())
      return * (jobject*) addr;
    if (type == JvPrimClass (double))
*************** java::lang::reflect::Field::get (jclass 
*** 257,272 ****
    throw new java::lang::IllegalArgumentException;
  }
  
- static void*
- setAddr (java::lang::reflect::Field* field, jclass caller, jobject obj)
- {
-   void *addr = getAddr(field, caller, obj);
-   if  (!field->isAccessible()
- 	&& field->getModifiers() & java::lang::reflect::Modifier::FINAL)
-     throw new java::lang::IllegalAccessException();
-   return addr;
- }
- 
  static void
  setBoolean (jclass type, void *addr, jboolean value)
  {
--- 268,273 ----
*************** setDouble (jclass type, void *addr, jdou
*** 378,434 ****
  }
  
  void
! java::lang::reflect::Field::setBoolean (jclass caller, jobject obj, jboolean b)
  {
!   ::setBoolean (this->getType(), setAddr (this, caller, obj), b);
  }
  
  void
! java::lang::reflect::Field::setChar (jclass caller, jobject obj, jchar c)
  {
!   ::setChar (this->getType(), setAddr (this, caller, obj), c);
  }
  
  void
! java::lang::reflect::Field::setByte (jclass caller, jobject obj, jbyte b)
  {
!   ::setByte (this->getType(), setAddr (this, caller, obj), b);
  }
  
  void
! java::lang::reflect::Field::setShort (jclass caller, jobject obj, jshort s)
  {
!   ::setShort (this->getType(), setAddr (this, caller, obj), s);
  }
  
  void
! java::lang::reflect::Field::setInt (jclass caller, jobject obj, jint i)
  {
!   ::setInt (this->getType(), setAddr (this, caller, obj), i);
  }
  
  void
! java::lang::reflect::Field::setLong (jclass caller, jobject obj, jlong l)
  {
!   ::setLong (this->getType(), setAddr (this, caller, obj), l);
  }
  void
! java::lang::reflect::Field::setFloat (jclass caller, jobject obj, jfloat f)
  {
!   ::setFloat (this->getType(), setAddr (this, caller, obj), f);
  }
  
  void
! java::lang::reflect::Field::setDouble (jclass caller, jobject obj, jdouble d)
  {
!   ::setDouble (this->getType(), setAddr (this, caller, obj), d);
  }
  
  void
  java::lang::reflect::Field::set (jclass caller, jobject object, jobject value,
! 				 jclass type)
  {
!   void* addr = setAddr (this, caller, object);
    if (value != NULL && ! _Jv_IsInstanceOf (value, type))
      throw new java::lang::IllegalArgumentException;
    * (jobject*) addr = value;
--- 379,444 ----
  }
  
  void
! java::lang::reflect::Field::setBoolean (jclass caller, jobject obj, jboolean b,
! 					jboolean checkFinal)
  {
!   ::setBoolean (this->getType(), getAddr (this, caller, obj, checkFinal), b);
  }
  
  void
! java::lang::reflect::Field::setChar (jclass caller, jobject obj, jchar c,
! 				     jboolean checkFinal)
  {
!   ::setChar (this->getType(), getAddr (this, caller, obj, checkFinal), c);
  }
  
  void
! java::lang::reflect::Field::setByte (jclass caller, jobject obj, jbyte b,
! 				     jboolean checkFinal)
  {
!   ::setByte (this->getType(), getAddr (this, caller, obj, checkFinal), b);
  }
  
  void
! java::lang::reflect::Field::setShort (jclass caller, jobject obj, jshort s,
! 				      jboolean checkFinal)
  {
!   ::setShort (this->getType(), getAddr (this, caller, obj, checkFinal), s);
  }
  
  void
! java::lang::reflect::Field::setInt (jclass caller, jobject obj, jint i,
! 				    jboolean checkFinal)
  {
!   ::setInt (this->getType(), getAddr (this, caller, obj, checkFinal), i);
  }
  
  void
! java::lang::reflect::Field::setLong (jclass caller, jobject obj, jlong l,
! 				     jboolean checkFinal)
  {
!   ::setLong (this->getType(), getAddr (this, caller, obj, checkFinal), l);
  }
+ 
  void
! java::lang::reflect::Field::setFloat (jclass caller, jobject obj, jfloat f,
! 				      jboolean checkFinal)
  {
!   ::setFloat (this->getType(), getAddr (this, caller, obj, checkFinal), f);
  }
  
  void
! java::lang::reflect::Field::setDouble (jclass caller, jobject obj, jdouble d,
! 				       jboolean checkFinal)
  {
!   ::setDouble (this->getType(), getAddr (this, caller, obj, checkFinal), d);
  }
  
  void
  java::lang::reflect::Field::set (jclass caller, jobject object, jobject value,
! 				 jclass type, jboolean checkFinal)
  {
!   void* addr = getAddr (this, caller, object, checkFinal);
    if (value != NULL && ! _Jv_IsInstanceOf (value, type))
      throw new java::lang::IllegalArgumentException;
    * (jobject*) addr = value;
diff -Nrcpad gcc-3.4.3/libjava/java/lang/reflect/natMethod.cc gcc-4.0.0/libjava/java/lang/reflect/natMethod.cc
*** gcc-3.4.3/libjava/java/lang/reflect/natMethod.cc	Thu Feb 26 15:21:11 2004
--- gcc-4.0.0/libjava/java/lang/reflect/natMethod.cc	Thu Feb 17 19:17:08 2005
***************
*** 1,6 ****
  // natMethod.cc - Native code for Method class.
  
! /* Copyright (C) 1998, 1999, 2000, 2001 , 2002, 2003 Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natMethod.cc - Native code for Method class.
  
! /* Copyright (C) 1998, 1999, 2000, 2001 , 2002, 2003, 2004, 2005 Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 30,35 ****
--- 30,36 ----
  #include <java/lang/Double.h>
  #include <java/lang/IllegalAccessException.h>
  #include <java/lang/IllegalArgumentException.h>
+ #include <java/lang/IncompatibleClassChangeError.h>
  #include <java/lang/NullPointerException.h>
  #include <java/lang/ArrayIndexOutOfBoundsException.h>
  #include <java/lang/VirtualMachineError.h>
*************** jobject
*** 143,168 ****
  java::lang::reflect::Method::invoke (jobject obj, jobjectArray args)
  {
    using namespace java::lang::reflect;
    
    if (parameter_types == NULL)
      getType ();
      
    jmethodID meth = _Jv_FromReflectedMethod (this);
  
-   jclass objClass;
-   
    if (Modifier::isStatic(meth->accflags))
      {
        // We have to initialize a static class.  It is safe to do this
        // here and not in _Jv_CallAnyMethodA because JNI initializes a
        // class whenever a method lookup is done.
        _Jv_InitClass (declaringClass);
-       objClass = declaringClass;
      }
    else
      {
!       objClass = JV_CLASS (obj);
!      
        if (! _Jv_IsAssignableFrom (declaringClass, objClass))
          throw new java::lang::IllegalArgumentException;
      }
--- 144,166 ----
  java::lang::reflect::Method::invoke (jobject obj, jobjectArray args)
  {
    using namespace java::lang::reflect;
+   jclass iface = NULL;
    
    if (parameter_types == NULL)
      getType ();
      
    jmethodID meth = _Jv_FromReflectedMethod (this);
  
    if (Modifier::isStatic(meth->accflags))
      {
        // We have to initialize a static class.  It is safe to do this
        // here and not in _Jv_CallAnyMethodA because JNI initializes a
        // class whenever a method lookup is done.
        _Jv_InitClass (declaringClass);
      }
    else
      {
!       jclass objClass = JV_CLASS (obj);
        if (! _Jv_IsAssignableFrom (declaringClass, objClass))
          throw new java::lang::IllegalArgumentException;
      }
*************** java::lang::reflect::Method::invoke (job
*** 184,195 ****
  	{
  	}
  
!       if (! _Jv_CheckAccess(caller, objClass, meth->accflags))
  	throw new IllegalAccessException;
      }
  
    return _Jv_CallAnyMethodA (obj, return_type, meth, false,
! 			     parameter_types, args);
  }
  
  jint
--- 182,196 ----
  	{
  	}
  
!       if (! _Jv_CheckAccess(caller, declaringClass, meth->accflags))
  	throw new IllegalAccessException;
      }
  
+   if (declaringClass->isInterface())
+     iface = declaringClass;
+   
    return _Jv_CallAnyMethodA (obj, return_type, meth, false,
! 			     parameter_types, args, iface);
  }
  
  jint
*************** _Jv_GetTypesFromSignature (jmethodID met
*** 243,249 ****
  
    _Jv_Utf8Const* sig = method->signature;
    java::lang::ClassLoader *loader = declaringClass->getClassLoaderInternal();
!   char *ptr = sig->data;
    int numArgs = 0;
    /* First just count the number of parameters. */
    for (; ; ptr++)
--- 244,250 ----
  
    _Jv_Utf8Const* sig = method->signature;
    java::lang::ClassLoader *loader = declaringClass->getClassLoaderInternal();
!   char *ptr = sig->chars();
    int numArgs = 0;
    /* First just count the number of parameters. */
    for (; ; ptr++)
*************** _Jv_GetTypesFromSignature (jmethodID met
*** 280,286 ****
    JArray<jclass> *args = (JArray<jclass> *)
      JvNewObjectArray (numArgs, &java::lang::Class::class$, NULL);
    jclass* argPtr = elements (args);
!   for (ptr = sig->data; *ptr != '\0'; ptr++)
      {
        int num_arrays = 0;
        jclass type;
--- 281,287 ----
    JArray<jclass> *args = (JArray<jclass> *)
      JvNewObjectArray (numArgs, &java::lang::Class::class$, NULL);
    jclass* argPtr = elements (args);
!   for (ptr = sig->chars(); *ptr != '\0'; ptr++)
      {
        int num_arrays = 0;
        jclass type;
*************** _Jv_CallAnyMethodA (jobject obj,
*** 341,347 ****
  		    JArray<jclass> *parameter_types,
  		    jvalue *args,
  		    jvalue *result,
! 		    jboolean is_jni_call)
  {
    using namespace java::lang::reflect;
    
--- 342,349 ----
  		    JArray<jclass> *parameter_types,
  		    jvalue *args,
  		    jvalue *result,
! 		    jboolean is_jni_call,
! 		    jclass iface)
  {
    using namespace java::lang::reflect;
    
*************** _Jv_CallAnyMethodA (jobject obj,
*** 375,381 ****
    // the JDK 1.2 docs specify that the new object must be allocated
    // before argument conversions are done.
    if (is_constructor)
!     obj = JvAllocObject (return_type);
  
    const int size_per_arg = sizeof(jvalue);
    ffi_cif cif;
--- 377,383 ----
    // the JDK 1.2 docs specify that the new object must be allocated
    // before argument conversions are done.
    if (is_constructor)
!     obj = _Jv_AllocObject (return_type);
  
    const int size_per_arg = sizeof(jvalue);
    ffi_cif cif;
*************** _Jv_CallAnyMethodA (jobject obj,
*** 478,484 ****
        && (_Jv_ushort)-1 != meth->index)
      {
        _Jv_VTable *vtable = *(_Jv_VTable **) obj;
!       ncode = vtable->get_method (meth->index);
      }
    else
      {
--- 480,510 ----
        && (_Jv_ushort)-1 != meth->index)
      {
        _Jv_VTable *vtable = *(_Jv_VTable **) obj;
!       if (iface == NULL)
! 	{
! 	  if (is_jni_call && Modifier::isAbstract (meth->accflags))
! 	    {
! 	      // With JNI we don't know if this is an interface call
! 	      // or a call to an abstract method.  Look up the method
! 	      // by name, the slow way.
! 	      _Jv_Method *concrete_meth
! 		= _Jv_LookupDeclaredMethod (vtable->clas,
! 					    meth->name,
! 					    meth->signature,
! 					    NULL);
! 	      if (concrete_meth == NULL
! 		  || concrete_meth->ncode == NULL
! 		  || Modifier::isAbstract(concrete_meth->accflags))
! 		throw new java::lang::IncompatibleClassChangeError
! 		  (_Jv_GetMethodString (vtable->clas, meth));
! 	      ncode = concrete_meth->ncode;
! 	    }
! 	  else
! 	    ncode = vtable->get_method (meth->index);
! 	}
!       else
! 	ncode = _Jv_LookupInterfaceMethodIdx (vtable->clas, iface,
! 					      meth->index);
      }
    else
      {
*************** _Jv_CallAnyMethodA (jobject obj,
*** 553,559 ****
  		    jmethodID meth,
  		    jboolean is_constructor,
  		    JArray<jclass> *parameter_types,
! 		    jobjectArray args)
  {
    if (parameter_types->length == 0 && args == NULL)
      {
--- 579,586 ----
  		    jmethodID meth,
  		    jboolean is_constructor,
  		    JArray<jclass> *parameter_types,
! 		    jobjectArray args,
! 		    jclass iface)
  {
    if (parameter_types->length == 0 && args == NULL)
      {
*************** _Jv_CallAnyMethodA (jobject obj,
*** 621,627 ****
    _Jv_CallAnyMethodA (obj, return_type, meth, is_constructor,
    		      _Jv_isVirtualMethod (meth),
  		      parameter_types, argvals, &ret_value,
! 		      false);
  
    jobject r;
  #define VAL(Wrapper, Field)  (new Wrapper (ret_value.Field))
--- 648,654 ----
    _Jv_CallAnyMethodA (obj, return_type, meth, is_constructor,
    		      _Jv_isVirtualMethod (meth),
  		      parameter_types, argvals, &ret_value,
! 		      false, iface);
  
    jobject r;
  #define VAL(Wrapper, Field)  (new Wrapper (ret_value.Field))
diff -Nrcpad gcc-3.4.3/libjava/java/math/BigDecimal.java gcc-4.0.0/libjava/java/math/BigDecimal.java
*** gcc-3.4.3/libjava/java/math/BigDecimal.java	Fri Aug  1 15:07:49 2003
--- gcc-4.0.0/libjava/java/math/BigDecimal.java	Sat Oct 16 17:51:45 2004
*************** exception statement from your version. *
*** 37,64 ****
  
  package java.math;
  
- import java.math.BigInteger;
- 
  public class BigDecimal extends Number implements Comparable
  {
    private BigInteger intVal;
    private int scale;
    private static final long serialVersionUID = 6108874887143696463L;
  
!   private final static BigDecimal ZERO = 
      new BigDecimal (BigInteger.valueOf (0), 0);
  
!   private final static BigDecimal ONE = 
      new BigDecimal (BigInteger.valueOf (1), 0);
  
!   public final static int ROUND_UP = 0;
!   public final static int ROUND_DOWN = 1;
!   public final static int ROUND_CEILING = 2;
!   public final static int ROUND_FLOOR = 3;
!   public final static int ROUND_HALF_UP = 4;
!   public final static int ROUND_HALF_DOWN = 5;
!   public final static int ROUND_HALF_EVEN = 6;
!   public final static int ROUND_UNNECESSARY = 7;
  
    public BigDecimal (BigInteger num) 
    {
--- 37,62 ----
  
  package java.math;
  
  public class BigDecimal extends Number implements Comparable
  {
    private BigInteger intVal;
    private int scale;
    private static final long serialVersionUID = 6108874887143696463L;
  
!   private static final BigDecimal ZERO = 
      new BigDecimal (BigInteger.valueOf (0), 0);
  
!   private static final BigDecimal ONE = 
      new BigDecimal (BigInteger.valueOf (1), 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) 
    {
*************** public class BigDecimal extends Number i
*** 271,277 ****
        return newScale == 0 ? ZERO : new BigDecimal (ZERO.intVal, newScale);
      
      // Ensure that pow gets a non-negative value.
-     int valScale = val.scale;
      BigInteger valIntVal = val.intVal;
      int power = newScale - (scale - val.scale);
      if (power < 0)
--- 269,274 ----
diff -Nrcpad gcc-3.4.3/libjava/java/math/BigInteger.java gcc-4.0.0/libjava/java/math/BigInteger.java
*** gcc-3.4.3/libjava/java/math/BigInteger.java	Tue Nov 11 12:22:18 2003
--- gcc-4.0.0/libjava/java/math/BigInteger.java	Thu Feb 17 07:48:35 2005
***************
*** 1,5 ****
  /* java.math.BigInteger -- Arbitary precision integers
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,72 ****
  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.util.Random;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
! import java.io.IOException;
! 
! /**
!  * @author Warren Levy <warrenl@cygnus.com>
!  * @date December 20, 1999.
!  */
  
  /**
   * 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).
   *
!  * 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. */
!   transient private int ival;
!   transient private int[] words;
  
    // Serialization fields.
    private int bitCount = -1;
--- 35,70 ----
  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;
*************** public class BigInteger extends Number i
*** 338,344 ****
        }
    }
  
!   private final boolean isNegative()
    {
      return (words == null ? ival : words[ival - 1]) < 0;
    }
--- 336,342 ----
        }
    }
  
!   private boolean isNegative()
    {
      return (words == null ? ival : words[ival - 1]) < 0;
    }
*************** public class BigInteger extends Number i
*** 389,400 ****
      return compareTo(this, val) > 0 ? this : val;
    }
  
!   private final boolean isZero()
    {
      return words == null && ival == 0;
    }
  
!   private final boolean isOne()
    {
      return words == null && ival == 1;
    }
--- 387,398 ----
      return compareTo(this, val) > 0 ? this : val;
    }
  
!   private boolean isZero()
    {
      return words == null && ival == 0;
    }
  
!   private boolean isOne()
    {
      return words == null && ival == 1;
    }
*************** public class BigInteger extends Number i
*** 440,446 ****
    }
  
    /** Add two ints, yielding a BigInteger. */
!   private static final BigInteger add(int x, int y)
    {
      return valueOf((long) x + (long) y);
    }
--- 438,444 ----
    }
  
    /** Add two ints, yielding a BigInteger. */
!   private static BigInteger add(int x, int y)
    {
      return valueOf((long) x + (long) y);
    }
*************** public class BigInteger extends Number i
*** 480,492 ****
    }
  
    /** Destructively add an int to this. */
!   private final void setAdd(int y)
    {
      setAdd(this, y);
    }
  
    /** Destructively set the value of this to a long. */
!   private final void set(long y)
    {
      int i = (int) y;
      if ((long) i == y)
--- 478,490 ----
    }
  
    /** 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)
*************** public class BigInteger extends Number i
*** 505,518 ****
  
    /** Destructively set the value of this to the given words.
    * The words array is reused, not copied. */
!   private final void set(int[] words, int length)
    {
      this.ival = length;
      this.words = words;
    }
  
    /** Destructively set the value of this to that of y. */
!   private final void set(BigInteger y)
    {
      if (y.words == null)
        set(y.ival);
--- 503,516 ----
  
    /** 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);
*************** public class BigInteger extends Number i
*** 572,578 ****
      return add(this, val, -1);
    }
  
!   private static final BigInteger times(BigInteger x, int y)
    {
      if (y == 0)
        return ZERO;
--- 570,576 ----
      return add(this, val, -1);
    }
  
!   private static BigInteger times(BigInteger x, int y)
    {
      if (y == 0)
        return ZERO;
*************** public class BigInteger extends Number i
*** 604,610 ****
      return result.canonicalize();
    }
  
!   private static final BigInteger times(BigInteger x, BigInteger y)
    {
      if (y.words == null)
        return times(x, y.ival);
--- 602,608 ----
      return result.canonicalize();
    }
  
!   private static BigInteger times(BigInteger x, BigInteger y)
    {
      if (y.words == null)
        return times(x, y.ival);
*************** public class BigInteger extends Number i
*** 1016,1022 ****
      return BigInteger.make(rwords, rlen);
    }
  
!   private static final int[] euclidInv(int a, int b, int prevDiv)
    {
      if (b == 0)
        throw new ArithmeticException("not invertible");
--- 1014,1020 ----
      return BigInteger.make(rwords, rlen);
    }
  
!   private static int[] euclidInv(int a, int b, int prevDiv)
    {
      if (b == 0)
        throw new ArithmeticException("not invertible");
*************** public class BigInteger extends Number i
*** 1033,1040 ****
      return xy;
    }
  
!   private static final void euclidInv(BigInteger a, BigInteger b,
!                                       BigInteger prevDiv, BigInteger[] xy)
    {
      if (b.isZero())
        throw new ArithmeticException("not invertible");
--- 1031,1038 ----
      return xy;
    }
  
!   private static void euclidInv(BigInteger a, BigInteger b,
!                                 BigInteger prevDiv, BigInteger[] xy)
    {
      if (b.isZero())
        throw new ArithmeticException("not invertible");
*************** public class BigInteger extends Number i
*** 1184,1190 ****
    }
  
    /** Calculate Greatest Common Divisor for non-negative ints. */
!   private static final int gcd(int a, int b)
    {
      // Euclid's algorithm, copied from libg++.
      int tmp;
--- 1182,1188 ----
    }
  
    /** Calculate Greatest Common Divisor for non-negative ints. */
!   private static int gcd(int a, int b)
    {
      // Euclid's algorithm, copied from libg++.
      int tmp;
*************** public class BigInteger extends Number i
*** 1786,1792 ****
    }
  
    /** Destructively negate this. */
!   private final void setNegative()
    {
      setNegative(this);
    }
--- 1784,1790 ----
    }
  
    /** Destructively negate this. */
!   private void setNegative()
    {
      setNegative(this);
    }
diff -Nrcpad gcc-3.4.3/libjava/java/net/Authenticator.java gcc-4.0.0/libjava/java/net/Authenticator.java
*** gcc-3.4.3/libjava/java/net/Authenticator.java	Sun May 25 11:40:19 2003
--- gcc-4.0.0/libjava/java/net/Authenticator.java	Tue Apr 20 13:05:09 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 37,54 ****
  
  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
--- 37,55 ----
  
  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
*************** public abstract class Authenticator
*** 106,113 ****
     */
  
    /**
!     * 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)
--- 107,114 ----
     */
  
    /**
!     * 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)
*************** public abstract class Authenticator
*** 115,123 ****
      *
      * @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();
--- 116,124 ----
      *
      * @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();
*************** public abstract class Authenticator
*** 125,162 ****
        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));
    }
  
    /**
--- 126,165 ----
        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);
    }
  
    /**
*************** public abstract class Authenticator
*** 175,195 ****
      * @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();
--- 178,201 ----
      * @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();
*************** public abstract class Authenticator
*** 197,203 ****
        sm.checkPermission(new NetPermission("requestPasswordAuthentication"));
  
      if (defaultAuthenticator == null)
!       return(null);
  
      defaultAuthenticator.host = host;
      defaultAuthenticator.addr = addr;
--- 203,209 ----
        sm.checkPermission(new NetPermission("requestPasswordAuthentication"));
  
      if (defaultAuthenticator == null)
!       return null;
  
      defaultAuthenticator.host = host;
      defaultAuthenticator.addr = addr;
*************** public abstract class Authenticator
*** 206,212 ****
      defaultAuthenticator.prompt = prompt;
      defaultAuthenticator.scheme = scheme;
  
!     return(defaultAuthenticator.getPasswordAuthentication());
    }
  
    /*
--- 212,218 ----
      defaultAuthenticator.prompt = prompt;
      defaultAuthenticator.scheme = scheme;
  
!     return defaultAuthenticator.getPasswordAuthentication();
    }
  
    /*
*************** public abstract class Authenticator
*** 232,238 ****
      */
    protected final InetAddress getRequestingSite()
    {
!     return(addr);
    }
  
    /**
--- 238,244 ----
      */
    protected final InetAddress getRequestingSite()
    {
!     return addr;
    }
  
    /**
*************** public abstract class Authenticator
*** 240,263 ****
     * 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);
    }
  
    /**
--- 246,269 ----
     * 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;
    }
  
    /**
*************** public abstract class Authenticator
*** 268,285 ****
      */
    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);
    }
  
    /**
--- 274,291 ----
      */
    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;
    }
  
    /**
*************** public abstract class Authenticator
*** 289,295 ****
      */
    protected final String getRequestingScheme()
    {
!     return(scheme);
    }
  
    /**
--- 295,301 ----
      */
    protected final String getRequestingScheme()
    {
!     return scheme;
    }
  
    /**
*************** public abstract class Authenticator
*** 302,309 ****
      */
    protected PasswordAuthentication getPasswordAuthentication()
    {
!     return(null);
    }
- 
  } // class Authenticator
- 
--- 308,313 ----
      */
    protected PasswordAuthentication getPasswordAuthentication()
    {
!     return null;
    }
  } // class Authenticator
diff -Nrcpad gcc-3.4.3/libjava/java/net/BindException.java gcc-4.0.0/libjava/java/net/BindException.java
*** gcc-3.4.3/libjava/java/net/BindException.java	Tue Aug 27 17:47:26 2002
--- gcc-4.0.0/libjava/java/net/BindException.java	Sun Oct 17 08:29:51 2004
*************** exception statement from your version. *
*** 37,48 ****
  
  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
   */
--- 37,49 ----
  
  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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/net/ConnectException.java gcc-4.0.0/libjava/java/net/ConnectException.java
*** gcc-3.4.3/libjava/java/net/ConnectException.java	Sat Jun 15 19:45:34 2002
--- gcc-4.0.0/libjava/java/net/ConnectException.java	Sun Oct 17 08:29:51 2004
*************** this exception to your version of the li
*** 35,50 ****
  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
   */
--- 35,50 ----
  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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/net/ContentHandler.java gcc-4.0.0/libjava/java/net/ContentHandler.java
*** gcc-3.4.3/libjava/java/net/ContentHandler.java	Sun May 25 11:40:19 2003
--- gcc-4.0.0/libjava/java/net/ContentHandler.java	Sun Oct 17 08:29:51 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** import java.io.IOException;
*** 47,61 ****
  
  /**
    * 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
  {
--- 47,61 ----
  
  /**
    * 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
  {
*************** public abstract class ContentHandler
*** 66,73 ****
    /**
      * Default, no-argument constructor.
      */
!   public ContentHandler() 
!   { 
    }
  
    /*
--- 66,73 ----
    /**
      * Default, no-argument constructor.
      */
!   public ContentHandler()
!   {
    }
  
    /*
*************** public abstract class ContentHandler
*** 75,84 ****
     */
  
    /**
!     * 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.
--- 75,84 ----
     */
  
    /**
!     * 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.
*************** public abstract class ContentHandler
*** 87,102 ****
      *
      * @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.
--- 87,102 ----
      *
      * @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.
*************** public abstract class ContentHandler
*** 113,127 ****
    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
--- 113,126 ----
    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-3.4.3/libjava/java/net/ContentHandlerFactory.java gcc-4.0.0/libjava/java/net/ContentHandlerFactory.java
*** gcc-3.4.3/libjava/java/net/ContentHandlerFactory.java	Sat Oct 11 18:39:35 2003
--- gcc-4.0.0/libjava/java/net/ContentHandlerFactory.java	Sun Oct 17 08:29:51 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,56 ****
  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
  {
--- 35,55 ----
  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
  {
*************** public interface ContentHandlerFactory
*** 63,68 ****
      * @return The <code>ContentHandler</code> for the passed in MIME type
      */
    ContentHandler createContentHandler(String mimeType);
- 
  } // interface ContentHandlerFactory
- 
--- 62,65 ----
diff -Nrcpad gcc-3.4.3/libjava/java/net/DatagramPacket.java gcc-4.0.0/libjava/java/net/DatagramPacket.java
*** gcc-3.4.3/libjava/java/net/DatagramPacket.java	Thu Dec  4 10:59:56 2003
--- gcc-4.0.0/libjava/java/net/DatagramPacket.java	Sun Oct 17 08:29:52 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  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).
*************** package java.net;
*** 61,67 ****
   * 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.
   */
--- 62,68 ----
   * 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
*** 86,92 ****
     * The maximal length of the buffer.
     */
    int maxlen;
!   
    /**
     * The address to which the packet should be sent or from which it
     * was received.
--- 87,93 ----
     * The maximal length of the buffer.
     */
    int maxlen;
! 
    /**
     * The address to which the packet should be sent or from which it
     * was received.
*************** public final class DatagramPacket
*** 134,147 ****
     *
     * @param buf A buffer containing the data to send
     * @param offset The offset into the buffer to start writing from.
!    * @param len The length of the buffer (must be &lt;= buf.length)
!    * @param addr 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);
--- 135,148 ----
     *
     * @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);
*************** public final class DatagramPacket
*** 177,184 ****
     * @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");
--- 178,184 ----
     * @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");
*************** public final class DatagramPacket
*** 272,287 ****
    /**
     * This sets the address to which the data packet will be transmitted.
     *
!    * @param addr The destination address
     *
     * @since 1.1
     */
!   public synchronized void setAddress(InetAddress iaddr)
    {
!     if (iaddr == null)
!       throw new NullPointerException("Null address");
! 
!     address = iaddr;
    }
  
    /**
--- 272,284 ----
    /**
     * 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;
    }
  
    /**
*************** public final class DatagramPacket
*** 291,302 ****
     *
     * @since 1.1
     */
!   public synchronized void setPort(int iport)
    {
!     if (iport < 0 || iport > 65535)
!       throw new IllegalArgumentException("Invalid port: " + iport);
  
!     port = iport;
    }
  
    /**
--- 288,299 ----
     *
     * @since 1.1
     */
!   public synchronized void setPort(int port)
    {
!     if (port < 0 || port > 65535)
!       throw new IllegalArgumentException("Invalid port: " + port);
  
!     this.port = port;
    }
  
    /**
*************** public final class DatagramPacket
*** 324,335 ****
     * 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);
    }
  
    /**
--- 321,332 ----
     * 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);
    }
  
    /**
*************** public final class DatagramPacket
*** 360,366 ****
    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)
--- 357,362 ----
*************** public final class DatagramPacket
*** 372,378 ****
    }
  
    /**
!    * Sets the length of the data in the buffer. 
     *
     * @param length The new length.  (Where len &lt;= buf.length)
     *
--- 368,374 ----
    }
  
    /**
!    * Sets the length of the data in the buffer.
     *
     * @param length The new length.  (Where len &lt;= buf.length)
     *
*************** public final class DatagramPacket
*** 387,393 ****
        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;
--- 383,389 ----
        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-3.4.3/libjava/java/net/DatagramSocket.java gcc-4.0.0/libjava/java/net/DatagramSocket.java
*** gcc-3.4.3/libjava/java/net/DatagramSocket.java	Tue Feb  3 21:53:55 2004
--- gcc-4.0.0/libjava/java/net/DatagramSocket.java	Sun Oct 17 08:29:52 2004
***************
*** 1,5 ****
  /* DatagramSocket.java -- A class to model UDP sockets
!    Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* DatagramSocket.java -- A class to model UDP sockets
!    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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 8,14 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,67 ****
  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.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
  {
    /**
--- 36,67 ----
  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.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
  {
    /**
*************** public class DatagramSocket
*** 69,75 ****
     * variable is null, a default factory is used.
     */
    private static DatagramSocketImplFactory factory;
! 	  
    /**
     * This is the implementation object used by this socket.
     */
--- 69,75 ----
     * variable is null, a default factory is used.
     */
    private static DatagramSocketImplFactory factory;
! 
    /**
     * This is the implementation object used by this socket.
     */
*************** public class DatagramSocket
*** 96,110 ****
    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");
--- 96,110 ----
    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");
*************** public class DatagramSocket
*** 115,121 ****
    }
  
    /**
!    * 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.
--- 115,121 ----
    }
  
    /**
!    * 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.
*************** public class DatagramSocket
*** 128,134 ****
    }
  
    /**
!    * 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.
--- 128,134 ----
    }
  
    /**
!    * 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.
*************** public class DatagramSocket
*** 143,149 ****
    }
  
    /**
!    * 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.
--- 143,149 ----
    }
  
    /**
!    * 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.
*************** public class DatagramSocket
*** 159,165 ****
    }
  
    /**
!    * 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.
--- 159,165 ----
    }
  
    /**
!    * 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.
*************** public class DatagramSocket
*** 170,204 ****
     *
     * @since 1.4
     */
!   public DatagramSocket (SocketAddress address) throws SocketException
    {
      String propVal = System.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;
--- 170,205 ----
     *
     * @since 1.4
     */
!   public DatagramSocket(SocketAddress address) throws SocketException
    {
      String propVal = System.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;
*************** public class DatagramSocket
*** 211,217 ****
  	throw new SocketException(e.getMessage());
        }
    }
!   
    /**
     * Closes this datagram socket.
     */
--- 212,218 ----
  	throw new SocketException(e.getMessage());
        }
    }
! 
    /**
     * Closes this datagram socket.
     */
*************** public class DatagramSocket
*** 219,225 ****
    {
      if (isClosed())
        return;
!     
      try
        {
  	getImpl().close();
--- 220,226 ----
    {
      if (isClosed())
        return;
! 
      try
        {
  	getImpl().close();
*************** public class DatagramSocket
*** 247,256 ****
    }
  
    /**
!    * 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
--- 248,257 ----
    }
  
    /**
!    * 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 class DatagramSocket
*** 264,270 ****
     * 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
--- 265,271 ----
     * 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 class DatagramSocket
*** 276,300 ****
  
    /**
     * 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 (isClosed())
        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)
        {
--- 277,302 ----
  
    /**
     * 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)
        {
*************** public class DatagramSocket
*** 303,309 ****
      catch (SocketException e)
        {
  	// This cannot happen as we are bound.
!         return null;
        }
  
      return localAddr;
--- 305,311 ----
      catch (SocketException e)
        {
  	// This cannot happen as we are bound.
! 	return null;
        }
  
      return localAddr;
*************** public class DatagramSocket
*** 318,324 ****
    {
      if (isClosed())
        return -1;
! 	      
      try
        {
  	return getImpl().getLocalPort();
--- 320,326 ----
    {
      if (isClosed())
        return -1;
! 
      try
        {
  	return getImpl().getLocalPort();
*************** public class DatagramSocket
*** 337,343 ****
     * @return The current timeout in milliseconds.
     *
     * @exception SocketException If an error occurs.
!    * 
     * @since 1.1
     */
    public synchronized int getSoTimeout() throws SocketException
--- 339,345 ----
     * @return The current timeout in milliseconds.
     *
     * @exception SocketException If an error occurs.
!    *
     * @since 1.1
     */
    public synchronized int getSoTimeout() throws SocketException
*************** public class DatagramSocket
*** 347,353 ****
  
      Object buf = getImpl().getOption(SocketOptions.SO_TIMEOUT);
  
!     if (buf instanceof Integer) 
        return ((Integer) buf).intValue();
  
      throw new SocketException("unexpected type");
--- 349,355 ----
  
      Object buf = getImpl().getOption(SocketOptions.SO_TIMEOUT);
  
!     if (buf instanceof Integer)
        return ((Integer) buf).intValue();
  
      throw new SocketException("unexpected type");
*************** public class DatagramSocket
*** 368,374 ****
    {
      if (isClosed())
        throw new SocketException("socket is closed");
!     
      if (timeout < 0)
        throw new IllegalArgumentException("Invalid timeout: " + timeout);
  
--- 370,376 ----
    {
      if (isClosed())
        throw new SocketException("socket is closed");
! 
      if (timeout < 0)
        throw new IllegalArgumentException("Invalid timeout: " + timeout);
  
*************** public class DatagramSocket
*** 390,396 ****
    {
      if (isClosed())
        throw new SocketException("socket is closed");
!     
      Object buf = getImpl().getOption(SocketOptions.SO_SNDBUF);
  
      if (buf instanceof Integer)
--- 392,398 ----
    {
      if (isClosed())
        throw new SocketException("socket is closed");
! 
      Object buf = getImpl().getOption(SocketOptions.SO_SNDBUF);
  
      if (buf instanceof Integer)
*************** public class DatagramSocket
*** 415,424 ****
    {
      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));
    }
  
--- 417,426 ----
    {
      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));
    }
  
*************** public class DatagramSocket
*** 439,445 ****
        throw new SocketException("socket is closed");
  
      Object buf = getImpl().getOption(SocketOptions.SO_RCVBUF);
!   
      if (buf instanceof Integer)
        return ((Integer) buf).intValue();
  
--- 441,447 ----
        throw new SocketException("socket is closed");
  
      Object buf = getImpl().getOption(SocketOptions.SO_RCVBUF);
! 
      if (buf instanceof Integer)
        return ((Integer) buf).intValue();
  
*************** public class DatagramSocket
*** 455,461 ****
     *
     * @exception SocketException If an error occurs.
     * @exception IllegalArgumentException If size is 0 or negative.
!    * 
     * @since 1.2
     */
    public void setReceiveBufferSize(int size) throws SocketException
--- 457,463 ----
     *
     * @exception SocketException If an error occurs.
     * @exception IllegalArgumentException If size is 0 or negative.
!    *
     * @since 1.2
     */
    public void setReceiveBufferSize(int size) throws SocketException
*************** public class DatagramSocket
*** 474,480 ****
     * 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.
     *
--- 476,482 ----
     * 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.
     *
*************** public class DatagramSocket
*** 488,497 ****
    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)
--- 490,499 ----
    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)
*************** public class DatagramSocket
*** 499,511 ****
  
      try
        {
!         getImpl().connect (address, port);
!         remoteAddress = address;
!         remotePort = port;
        }
      catch (SocketException e)
        {
!         // This means simply not connected or connect not implemented.
        }
    }
  
--- 501,513 ----
  
      try
        {
! 	getImpl().connect(address, port);
! 	remoteAddress = address;
! 	remotePort = port;
        }
      catch (SocketException e)
        {
! 	// This means simply not connected or connect not implemented.
        }
    }
  
*************** public class DatagramSocket
*** 513,524 ****
     * 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
--- 515,526 ----
     * 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
*************** public class DatagramSocket
*** 553,580 ****
     * @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 ethod 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 ());
    }
  
    /**
--- 555,580 ----
     * @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());
    }
  
    /**
*************** public class DatagramSocket
*** 596,628 ****
    {
      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);
    }
--- 596,626 ----
    {
      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);
    }
*************** public class DatagramSocket
*** 639,650 ****
     *
     * @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");
  
--- 637,647 ----
     *
     * @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");
  
*************** public class DatagramSocket
*** 654,685 ****
      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;
        }
    }
  
--- 651,682 ----
      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;
        }
    }
  
*************** public class DatagramSocket
*** 687,693 ****
     * Checks if the datagram socket is closed.
     *
     * @return True if socket is closed, false otherwise.
!    * 
     * @since 1.4
     */
    public boolean isClosed()
--- 684,690 ----
     * Checks if the datagram socket is closed.
     *
     * @return True if socket is closed, false otherwise.
!    *
     * @since 1.4
     */
    public boolean isClosed()
*************** public class DatagramSocket
*** 697,705 ****
  
    /**
     * Returns the datagram channel assoziated with this datagram socket.
!    * 
     * @return The associated <code>DatagramChannel</code> object or null
!    * 
     * @since 1.4
     */
    public DatagramChannel getChannel()
--- 694,702 ----
  
    /**
     * Returns the datagram channel assoziated with this datagram socket.
!    *
     * @return The associated <code>DatagramChannel</code> object or null
!    *
     * @since 1.4
     */
    public DatagramChannel getChannel()
*************** public class DatagramSocket
*** 717,739 ****
     *
     * @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()
--- 714,736 ----
     *
     * @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()
*************** public class DatagramSocket
*** 743,751 ****
  
    /**
     * Returns the connection state of the socket.
!    * 
     * @return True if socket is connected, false otherwise.
!    * 
     * @since 1.4
     */
    public boolean isConnected()
--- 740,748 ----
  
    /**
     * Returns the connection state of the socket.
!    *
     * @return True if socket is connected, false otherwise.
!    *
     * @since 1.4
     */
    public boolean isConnected()
*************** public class DatagramSocket
*** 756,787 ****
    /**
     * 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());
    }
  
    /**
--- 753,784 ----
    /**
     * 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());
    }
  
    /**
*************** public class DatagramSocket
*** 798,804 ****
      if (isClosed())
        throw new SocketException("socket is closed");
  
!     getImpl().setOption (SocketOptions.SO_REUSEADDR, new Boolean (on));
    }
  
    /**
--- 795,801 ----
      if (isClosed())
        throw new SocketException("socket is closed");
  
!     getImpl().setOption(SocketOptions.SO_REUSEADDR, Boolean.valueOf(on));
    }
  
    /**
*************** public class DatagramSocket
*** 807,813 ****
     * @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
--- 804,810 ----
     * @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
*************** public class DatagramSocket
*** 815,822 ****
      if (isClosed())
        throw new SocketException("socket is closed");
  
!     Object buf = getImpl().getOption (SocketOptions.SO_REUSEADDR);
!   
      if (buf instanceof Boolean)
        return ((Boolean) buf).booleanValue();
  
--- 812,819 ----
      if (isClosed())
        throw new SocketException("socket is closed");
  
!     Object buf = getImpl().getOption(SocketOptions.SO_REUSEADDR);
! 
      if (buf instanceof Boolean)
        return ((Boolean) buf).booleanValue();
  
*************** public class DatagramSocket
*** 825,831 ****
  
    /**
     * Enables/Disables SO_BROADCAST
!    * 
     * @param enable True if SO_BROADCAST should be enabled, false otherwise.
     *
     * @exception SocketException If an error occurs
--- 822,828 ----
  
    /**
     * Enables/Disables SO_BROADCAST
!    *
     * @param enable True if SO_BROADCAST should be enabled, false otherwise.
     *
     * @exception SocketException If an error occurs
*************** public class DatagramSocket
*** 837,852 ****
      if (isClosed())
        throw new SocketException("socket is closed");
  
!     getImpl().setOption(SocketOptions.SO_BROADCAST, new Boolean(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
--- 834,849 ----
      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
*************** public class DatagramSocket
*** 855,861 ****
        throw new SocketException("socket is closed");
  
      Object buf = getImpl().getOption(SocketOptions.SO_BROADCAST);
!   
      if (buf instanceof Boolean)
        return ((Boolean) buf).booleanValue();
  
--- 852,858 ----
        throw new SocketException("socket is closed");
  
      Object buf = getImpl().getOption(SocketOptions.SO_BROADCAST);
! 
      if (buf instanceof Boolean)
        return ((Boolean) buf).booleanValue();
  
*************** public class DatagramSocket
*** 871,881 ****
     * @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");
--- 868,877 ----
     * @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");
*************** public class DatagramSocket
*** 883,907 ****
      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)
--- 879,903 ----
      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)
*************** public class DatagramSocket
*** 909,915 ****
  
      throw new SocketException("unexpected type");
    }
!   
    /**
     * Sets the datagram socket implementation factory for the application
     *
--- 905,911 ----
  
      throw new SocketException("unexpected type");
    }
! 
    /**
     * Sets the datagram socket implementation factory for the application
     *
*************** public class DatagramSocket
*** 920,930 ****
     * @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)
--- 916,926 ----
     * @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)
diff -Nrcpad gcc-3.4.3/libjava/java/net/DatagramSocketImpl.java gcc-4.0.0/libjava/java/net/DatagramSocketImpl.java
*** gcc-3.4.3/libjava/java/net/DatagramSocketImpl.java	Sun Jun  8 09:25:54 2003
--- gcc-4.0.0/libjava/java/net/DatagramSocketImpl.java	Sun Oct 17 08:29:52 2004
***************
*** 1,5 ****
  /* 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.
--- 1,5 ----
  /* 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.
*************** this exception to your version of the li
*** 36,46 ****
  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.FileDescriptor;
  
  /**
   * This abstract class models a datagram socket implementation.  An
--- 36,46 ----
  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
*************** import java.io.FileDescriptor;
*** 53,64 ****
   * 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
     */
--- 53,63 ----
   * 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
     */
*************** public abstract class DatagramSocketImpl
*** 103,109 ****
     * 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
--- 102,108 ----
     * 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
*************** public abstract class DatagramSocketImpl
*** 118,136 ****
    /**
     * 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
--- 117,135 ----
    /**
     * 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
*************** public abstract class DatagramSocketImpl
*** 169,185 ****
     *
     * @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
    }
--- 168,185 ----
     *
     * @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
    }
*************** public abstract class DatagramSocketImpl
*** 199,206 ****
     * This method returns the current Time to Live (TTL) setting on this
     * socket.  <b>Use <code>getTimeToLive()</code></b> instead.
     *
     * @exception IOException If an error occurs
!    * @deprecated
     */
    protected abstract byte getTTL() throws IOException;
  
--- 199,209 ----
     * 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;
  
*************** public abstract class DatagramSocketImpl
*** 218,223 ****
--- 221,228 ----
     * 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;
*************** public abstract class DatagramSocketImpl
*** 242,276 ****
  
    /**
     * 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
     */
    protected FileDescriptor getFileDescriptor()
    {
--- 247,283 ----
  
    /**
     * 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()
    {
*************** public abstract class DatagramSocketImpl
*** 279,284 ****
--- 286,293 ----
  
    /**
     * Returns the local port this socket is bound to
+    *
+    * @return the local port
     */
    protected int getLocalPort()
    {
diff -Nrcpad gcc-3.4.3/libjava/java/net/DatagramSocketImplFactory.java gcc-4.0.0/libjava/java/net/DatagramSocketImplFactory.java
*** gcc-3.4.3/libjava/java/net/DatagramSocketImplFactory.java	Sat Oct 11 18:39:35 2003
--- gcc-4.0.0/libjava/java/net/DatagramSocketImplFactory.java	Sun Oct 17 08:29:52 2004
***************
*** 1,4 ****
! /* DatagramSocketImplFactory.java
     Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* DatagramSocketImplFactory.java --
     Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 37,52 ****
  
  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
--- 37,52 ----
  
  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
*************** public interface DatagramSocketImplFacto
*** 57,61 ****
     * @return A DatagramSocketImpl object
     */
    DatagramSocketImpl createDatagramSocketImpl();
- 
  } // interface DatagramSocketImplFactory
--- 57,60 ----
diff -Nrcpad gcc-3.4.3/libjava/java/net/FileNameMap.java gcc-4.0.0/libjava/java/net/FileNameMap.java
*** gcc-3.4.3/libjava/java/net/FileNameMap.java	Sat Oct 11 18:39:35 2003
--- gcc-4.0.0/libjava/java/net/FileNameMap.java	Sun Oct 17 08:29:52 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,55 ****
  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
--- 35,54 ----
  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
*************** public interface FileNameMap
*** 63,68 ****
      * @return The MIME type for the filename passed in.
      */
    String getContentTypeFor(String filename);
- 
  } // interface FileNameMap
- 
--- 62,65 ----
diff -Nrcpad gcc-3.4.3/libjava/java/net/HttpURLConnection.java gcc-4.0.0/libjava/java/net/HttpURLConnection.java
*** gcc-3.4.3/libjava/java/net/HttpURLConnection.java	Thu Jun 19 15:08:22 2003
--- gcc-4.0.0/libjava/java/net/HttpURLConnection.java	Sun Oct 17 08:29:52 2004
***************
*** 1,5 ****
! /* 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.
--- 1,5 ----
! /* 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 
*** 8,14 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 8,14 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** General Public License for more details.
*** 17,23 ****
  You should have received a copy of the GNU General Public License
  along with GNU Classpath; see the file COPYING.  If not, write to the
  Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA. 
  
  Linking this library statically or dynamically with other modules is
  making a combined work based on this library.  Thus, the terms and
--- 17,23 ----
  You should have received a copy of the GNU General Public License
  along with GNU Classpath; see the file COPYING.  If not, write to the
  Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
  
  Linking this library statically or dynamically with other modules is
  making a combined work based on this library.  Thus, the terms and
*************** this exception to your version of the li
*** 36,49 ****
  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.InputStream;
  import java.io.IOException;
  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).
--- 36,49 ----
  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).
*************** import java.security.Permission;
*** 51,62 ****
   */
  
  /**
!  * 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
   *
--- 51,62 ----
   */
  
  /**
!  * 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
   *
*************** public abstract class HttpURLConnection 
*** 73,99 ****
     * 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;
--- 73,99 ----
     * 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;
*************** public abstract class HttpURLConnection 
*** 102,121 ****
     * 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 */
  
--- 102,120 ----
     * 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 */
  
*************** public abstract class HttpURLConnection 
*** 123,144 ****
     * 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.
--- 122,143 ----
     * 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 abstract class HttpURLConnection 
*** 149,212 ****
     * 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.
--- 148,210 ----
     * 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 abstract class HttpURLConnection 
*** 218,245 ****
     * 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 */
  
    /**
--- 216,242 ----
     * 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 */
  
    /**
*************** public abstract class HttpURLConnection 
*** 247,262 ****
     *
     * @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;
--- 244,259 ----
     *
     * @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;
*************** public abstract class HttpURLConnection 
*** 294,301 ****
    /**
     * This is a list of valid request methods, separated by "|" characters.
     */
!   private static String valid_methods
!       = "|GET|POST|HEAD|OPTIONS|PUT|DELETE|TRACE|";
  
    // Instance Variables
  
--- 291,298 ----
    /**
     * 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
  
*************** public abstract class HttpURLConnection 
*** 312,318 ****
    /**
     * The response message string received from the server.
     */
!   protected String responseMessage = null;
  
    /**
     * If this instance should follow redirect requests.
--- 309,315 ----
    /**
     * The response message string received from the server.
     */
!   protected String responseMessage;
  
    /**
     * If this instance should follow redirect requests.
*************** public abstract class HttpURLConnection 
*** 320,330 ****
    protected boolean instanceFollowRedirects = followRedirects;
  
    /**
!    * Whether we alreadt got a valid response code for this connection.
!    * Used by <code>getResponceCode()</code> and
     * <code>getResponseMessage()</code>.
     */
!   private boolean gotResponseVals = false;
  
    /**
     * Create an HttpURLConnection for the specified URL
--- 317,327 ----
    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
*************** public abstract class HttpURLConnection 
*** 335,350 ****
    {
      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();
--- 332,347 ----
    {
      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();
*************** public abstract class HttpURLConnection 
*** 370,376 ****
    }
  
    /**
!    * Returns a boolean indicating whether or not HTTP redirects will 
     * automatically be followed or not.
     *
     * @return true if redirects will be followed, false otherwise
--- 367,373 ----
    }
  
    /**
!    * 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 abstract class HttpURLConnection 
*** 383,398 ****
    /**
     * Returns the value of this HttpURLConnection's instanceFollowRedirects
     * field
     */
!   public boolean getInstanceFollowRedirects ()
    {
      return instanceFollowRedirects;
    }
  
    /**
     * Sets the value of this HttpURLConnection's instanceFollowRedirects field
     */
!   public void setInstanceFollowRedirects (boolean follow)
    {
      instanceFollowRedirects = follow;
    }
--- 380,399 ----
    /**
     * 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;
    }
*************** public abstract class HttpURLConnection 
*** 401,406 ****
--- 402,409 ----
     * 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 abstract class HttpURLConnection 
*** 414,420 ****
        this.method = method;
      else
        throw new ProtocolException("Invalid HTTP request method: " + method);
- 
    }
  
    /**
--- 417,422 ----
*************** public abstract class HttpURLConnection 
*** 439,445 ****
     */
    public int getResponseCode() throws IOException
    {
!     if (!gotResponseVals)
        getResponseVals();
      return responseCode;
    }
--- 441,447 ----
     */
    public int getResponseCode() throws IOException
    {
!     if (! gotResponseVals)
        getResponseVals();
      return responseCode;
    }
*************** public abstract class HttpURLConnection 
*** 455,461 ****
     */
    public String getResponseMessage() throws IOException
    {
!     if (!gotResponseVals)
        getResponseVals();
      return responseMessage;
    }
--- 457,463 ----
     */
    public String getResponseMessage() throws IOException
    {
!     if (! gotResponseVals)
        getResponseVals();
      return responseMessage;
    }
*************** public abstract class HttpURLConnection 
*** 464,472 ****
    {
      // 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
--- 466,474 ----
    {
      // 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
*************** public abstract class HttpURLConnection 
*** 474,480 ****
        {
  	// 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.
--- 476,482 ----
        {
  	// 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.
*************** public abstract class HttpURLConnection 
*** 483,489 ****
  	    return;
  	  }
  
! 	int firstSpc, nextSpc;
  	firstSpc = respField.indexOf(' ');
  	nextSpc = respField.indexOf(' ', firstSpc + 1);
  	responseMessage = respField.substring(nextSpc + 1);
--- 485,492 ----
  	    return;
  	  }
  
! 	int firstSpc;
! 	int nextSpc;
  	firstSpc = respField.indexOf(' ');
  	nextSpc = respField.indexOf(' ', firstSpc + 1);
  	responseMessage = respField.substring(nextSpc + 1);
*************** public abstract class HttpURLConnection 
*** 505,510 ****
--- 508,515 ----
     * 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
*************** public abstract class HttpURLConnection 
*** 514,522 ****
      int port = url.getPort();
      if (port == -1)
        port = 80;
!     
      host = host + ":" + port;
!     
      return new SocketPermission(host, "connect");
    }
  
--- 519,527 ----
      int port = url.getPort();
      if (port == -1)
        port = 80;
! 
      host = host + ":" + port;
! 
      return new SocketPermission(host, "connect");
    }
  
*************** public abstract class HttpURLConnection 
*** 529,580 ****
     *
     * @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
     */
!   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);
    }
  }
--- 534,589 ----
     *
     * @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-3.4.3/libjava/java/net/Inet4Address.java gcc-4.0.0/libjava/java/net/Inet4Address.java
*** gcc-3.4.3/libjava/java/net/Inet4Address.java	Tue Nov 11 12:22:18 2003
--- gcc-4.0.0/libjava/java/net/Inet4Address.java	Thu Feb  3 17:44:20 2005
***************
*** 1,5 ****
! /* Inet4Address.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Inet4Address.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** package java.net;
*** 41,80 ****
  import java.io.ObjectStreamException;
  import java.util.Arrays;
  
- /**
-  * @author Michael Koch
-  * @date August 3, 2002.
-  */
- 
  /*
   * 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)
!  * Status: Believed complete and correct.
   */
- 
  public final class Inet4Address extends InetAddress
  {
    static final long serialVersionUID = 3286316764910316507L;
  
    /**
     * needed for serialization
     */
!   private Object writeReplace () throws ObjectStreamException
    {
!     return new InetAddress (addr, hostName);
    }
! 
    /**
!    * Creates a Inet4Address
!    * 
!    * @param addr The IP address
!    * @param host The Hostname
     */
    Inet4Address(byte[] addr, String host)
    {
!     super (addr, host);
    }
  
    /**
--- 41,81 ----
  import java.io.ObjectStreamException;
  import java.util.Arrays;
  
  /*
   * 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 hostname The hostname of this IP address.
     */
    Inet4Address(byte[] addr, String host)
    {
!     super(addr, host);
    }
  
    /**
*************** public final class Inet4Address extends 
*** 82,118 ****
     *
     * @since 1.1
     */
!   public boolean isMulticastAddress ()
    {
!     return (addr [0] & 0xF0) == 0xE0;
    }
!   
    /**
     * Checks if this address is a loopback address
     */
!   public boolean isLoopbackAddress ()
    {
!     return addr [0] == 0x7F;
    }
!  
    /**
     * Checks if this address is a wildcard address
     *
     * @since 1.4
     */
!   public boolean isAnyLocalAddress ()
    {
      byte[] anylocal = { 0, 0, 0, 0 };
!     
      return Arrays.equals(addr, anylocal);
    }
  
    /**
     * Checks if this address is a link local address
!    * 
     * @since 1.4
     */
!   public boolean isLinkLocalAddress ()
    {
      // XXX: This seems to not exist with IPv4 addresses
      return false;
--- 83,119 ----
     *
     * @since 1.1
     */
!   public boolean isMulticastAddress()
    {
!     return (addr[0] & 0xF0) == 0xE0;
    }
! 
    /**
     * Checks if this address is a loopback address
     */
!   public boolean isLoopbackAddress()
    {
!     return addr[0] == 0x7F;
    }
! 
    /**
     * Checks if this address is a wildcard address
     *
     * @since 1.4
     */
!   public boolean isAnyLocalAddress()
    {
      byte[] anylocal = { 0, 0, 0, 0 };
! 
      return Arrays.equals(addr, anylocal);
    }
  
    /**
     * Checks if this address is a link local address
!    *
     * @since 1.4
     */
!   public boolean isLinkLocalAddress()
    {
      // XXX: This seems to not exist with IPv4 addresses
      return false;
*************** public final class Inet4Address extends 
*** 120,155 ****
  
    /**
     * Checks if this address is a site local address
!    * 
     * @since 1.4
     */
!   public boolean isSiteLocalAddress ()
    {
      // 10.0.0.0/8
!     if (addr [0] == 0x0A)
        return true;
  
      // XXX: Suns JDK 1.4.1 (on Linux) seems to have a bug here:
      // it says 172.16.0.0 - 172.255.255.255 are site local addresses
      //
      // 172.16.0.0/12
!     if (addr [0] == 0xAC && (addr [1] & 0xF0) == 0x01)
        return true;
  
      // 192.168.0.0/16
!     if (addr [0] == 0xC0 && addr [1] == 0xA8)
        return true;
!    
      // XXX: Do we need to check more addresses here ?
      return false;
    }
  
    /**
     * Checks if this multicast address has global scope
!    * 
     * @since 1.4
     */
!   public boolean isMCGlobal ()
    {
      // XXX: This seems to net exist with IPv4 addresses
      return false;
--- 121,156 ----
  
    /**
     * Checks if this address is a site local address
!    *
     * @since 1.4
     */
!   public boolean isSiteLocalAddress()
    {
      // 10.0.0.0/8
!     if (addr[0] == 0x0A)
        return true;
  
      // XXX: Suns JDK 1.4.1 (on Linux) seems to have a bug here:
      // it says 172.16.0.0 - 172.255.255.255 are site local addresses
      //
      // 172.16.0.0/12
!     if (addr[0] == 0xAC && (addr[1] & 0xF0) == 0x01)
        return true;
  
      // 192.168.0.0/16
!     if (addr[0] == 0xC0 && addr[1] == 0xA8)
        return true;
! 
      // XXX: Do we need to check more addresses here ?
      return false;
    }
  
    /**
     * Checks if this multicast address has global scope
!    *
     * @since 1.4
     */
!   public boolean isMCGlobal()
    {
      // XXX: This seems to net exist with IPv4 addresses
      return false;
*************** public final class Inet4Address extends 
*** 157,276 ****
  
    /**
     * Checks if this multicast address has node scope
!    * 
     * @since 1.4
     */
!   public boolean isMCNodeLocal ()
    {
      // XXX: This seems to net exist with IPv4 addresses
      return false;
    }
!   
    /**
     * Checks if this multicast address has link scope
!    * 
     * @since 1.4
     */
!   public boolean isMCLinkLocal ()
    {
!     if (!isMulticastAddress ())
        return false;
!     
!     return (addr [0] == 0xE0)
! 	   && (addr [1] == 0x00)
! 	   && (addr [2] == 0x00);
    }
!   
    /**
     * Checks if this multicast address has site scope
!    * 
     * @since 1.4
     */
!   public boolean isMCSiteLocal ()
    {
      // XXX: This seems to net exist with IPv4 addresses
      return false;
    }
!   
    /**
     * Checks if this multicast address has organization scope
!    * 
     * @since 1.4
     */
!   public boolean isMCOrgLocal ()
    {
      // XXX: This seems to net exist with IPv4 addresses
      return false;
    }
!   
    /**
     * Returns the address of the current instance
     */
!   public byte[] getAddress ()
    {
!     return addr;
    }
!   
    /**
     * Returns the address as string
!    * 
     * @since 1.0.2
     */
!   public String getHostAddress ()
    {
!     StringBuffer sbuf = new StringBuffer (40);
      int len = addr.length;
      int i = 0;
!     
!     for ( ;  ; )
        {
! 	sbuf.append (addr [i] & 0xFF);
  	i++;
! 	
  	if (i == len)
  	  break;
! 	
! 	sbuf.append ('.');
        }
!     
!     return sbuf.toString ();
    }
!   
    /**
     * 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;
    }
  } // class Inet4Address
--- 158,275 ----
  
    /**
     * Checks if this multicast address has node scope
!    *
     * @since 1.4
     */
!   public boolean isMCNodeLocal()
    {
      // XXX: This seems to net exist with IPv4 addresses
      return false;
    }
! 
    /**
     * Checks if this multicast address has link scope
!    *
     * @since 1.4
     */
!   public boolean isMCLinkLocal()
    {
!     if (! isMulticastAddress())
        return false;
! 
!     return (addr[0] == 0xE0) && (addr[1] == 0x00) && (addr[2] == 0x00);
    }
! 
    /**
     * Checks if this multicast address has site scope
!    *
     * @since 1.4
     */
!   public boolean isMCSiteLocal()
    {
      // XXX: This seems to net exist with IPv4 addresses
      return false;
    }
! 
    /**
     * Checks if this multicast address has organization scope
!    *
     * @since 1.4
     */
!   public boolean isMCOrgLocal()
    {
      // XXX: This seems to net exist with IPv4 addresses
      return false;
    }
! 
    /**
     * 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()
    {
!     StringBuffer sbuf = new StringBuffer(40);
      int len = addr.length;
      int i = 0;
! 
!     for (;;)
        {
! 	sbuf.append(addr[i] & 0xFF);
  	i++;
! 
  	if (i == len)
  	  break;
! 
! 	sbuf.append('.');
        }
! 
!     return sbuf.toString();
    }
! 
    /**
     * 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;
    }
  } // class Inet4Address
diff -Nrcpad gcc-3.4.3/libjava/java/net/Inet6Address.java gcc-4.0.0/libjava/java/net/Inet6Address.java
*** gcc-3.4.3/libjava/java/net/Inet6Address.java	Tue Nov 11 12:22:18 2003
--- gcc-4.0.0/libjava/java/net/Inet6Address.java	Thu Feb  3 17:44:20 2005
***************
*** 1,5 ****
! /* Inet6Address.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** package java.net;
*** 40,56 ****
  
  import java.util.Arrays;
  
- /**
-  * @author Michael Koch
-  * @date August 3, 2002.
-  */
- 
  /*
   * Written using on-line Java Platform 1.4 API Specification and
   * RFC 1884 (http://www.ietf.org/rfc/rfc1884.txt)
!  * Status: Believed complete and correct.
   */
- 
  public final class Inet6Address extends InetAddress
  {
    static final long serialVersionUID = 6880410070516793377L;
--- 40,52 ----
  
  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;
*************** public final class Inet6Address extends 
*** 59,271 ****
     * 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);
!     this.ipaddress = 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 ipaddress;
    }
!   
    /**
     * 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);
!         boolean empty = sbuf.length () == 0;
! 	
!         if (empty)
!           {
!             if (i > 0)
!               sbuf.append ("::");
!           }
!         else
!           sbuf.append (':');
  
!         if (x != 0 || i >= 14)
!           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;
  
!     Inet6Address tmp = (Inet6Address) obj;
! 
!     return super.equals (tmp)
!            && this.ipaddress == tmp.ipaddress;
    }
!   
    /**
     * 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;
--- 55,259 ----
     * 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-3.4.3/libjava/java/net/InetAddress.java gcc-4.0.0/libjava/java/net/InetAddress.java
*** gcc-3.4.3/libjava/java/net/InetAddress.java	Sun Nov 30 21:02:56 2003
--- gcc-4.0.0/libjava/java/net/InetAddress.java	Thu Feb  3 17:44:20 2005
***************
*** 1,5 ****
  /* InetAddress.java -- Class to model an Internet address
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InetAddress.java -- Class to model an Internet address
!    Copyright (C) 1998, 1999, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package java.net;
  
  import gnu.classpath.Configuration;
+ 
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
*************** import java.io.Serializable;
*** 50,61 ****
   * 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.
   *
!  * @author Aaron M. Renn <arenn@urbanophile.com>
   * @author Per Bothner
   *
   * @specnote This class is not final since JK 1.4
--- 51,62 ----
   * 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
*************** import java.io.Serializable;
*** 63,75 ****
  public class InetAddress implements Serializable
  {
    private static final long serialVersionUID = 3286316764910316507L;
!   
    /**
     * Dummy InetAddress, used to bind socket to any (all) network interfaces.
     */
    static InetAddress ANY_IF;
      
!   private static final byte[] localhostAddress = { 127, 0, 0, 1 };
  
    private static InetAddress localhost = null;
  
--- 64,79 ----
  public class InetAddress implements Serializable
  {
    private static final long serialVersionUID = 3286316764910316507L;
! 
    /**
     * Dummy InetAddress, used to bind socket to any (all) network interfaces.
     */
    static InetAddress ANY_IF;
      
!   private static final byte[] loopbackAddress = { 127, 0, 0, 1 };
! 
!   private static final InetAddress loopback 
!     = new Inet4Address(loopbackAddress, "localhost");
  
    private static InetAddress localhost = null;
  
*************** public class InetAddress implements Seri
*** 77,88 ****
    {
      // load the shared library needed for name resolution
      if (Configuration.INIT_LOAD_LIBRARY)
!       {
!         System.loadLibrary ("javanet");
!       }
      
      byte[] zeros = { 0, 0, 0, 0 };
!     ANY_IF = new InetAddress (zeros, "0.0.0.0");
    }
  
    /**
--- 81,90 ----
    {
      // load the shared library needed for name resolution
      if (Configuration.INIT_LOAD_LIBRARY)
!       System.loadLibrary("javanet");
      
      byte[] zeros = { 0, 0, 0, 0 };
!     ANY_IF = new Inet4Address(zeros, "0.0.0.0");
    }
  
    /**
*************** public class InetAddress implements Seri
*** 101,107 ****
     * The name of the host for this address.
     */
    String hostName;
!   
    /**
     * The field 'family' seems to be the AF_ value.
     * FIXME: Much of the code in the other java.net classes does not make
--- 103,109 ----
     * The name of the host for this address.
     */
    String hostName;
! 
    /**
     * The field 'family' seems to be the AF_ value.
     * FIXME: Much of the code in the other java.net classes does not make
*************** public class InetAddress implements Seri
*** 117,143 ****
     * only by static methods in this class.
     *
     * @param ipaddr The IP number of this address as an array of bytes
-    */
-   InetAddress (byte[] address)
-   {
-     this (address, null);
-   }
- 
-   /**
-    * Initializes this object's addr instance variable from the passed in
-    * int 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[] address, String hostname)
    {
!     addr = address;
      hostName = hostname;
      
!     if (address != null)
!       family = getFamily (address);
    }
  
    /**
--- 119,133 ----
     * 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;
      
!     if (ipaddr != null)
!       family = getFamily(ipaddr);
    }
  
    /**
*************** public class InetAddress implements Seri
*** 153,160 ****
    {
      // Mask against high order bits of 1110
      if (addr.length == 4)
!       return (addr [0] & 0xF0) == 0xE0;
!     
      // Mask against high order bits of 11111111
      if (addr.length == 16)
        return addr [0] == (byte) 0xFF;
--- 143,150 ----
    {
      // Mask against high order bits of 1110
      if (addr.length == 4)
!       return (addr[0] & 0xF0) == 0xE0;
! 
      // Mask against high order bits of 11111111
      if (addr.length == 16)
        return addr [0] == (byte) 0xFF;
*************** public class InetAddress implements Seri
*** 164,231 ****
  
    /**
     * 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] == 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] == 0x0A)
        return true;
  
      // XXX: Suns JDK 1.4.1 (on Linux) seems to have a bug here:
      // it says 172.16.0.0 - 172.255.255.255 are site local addresses
- 
      // 172.16.0.0/12
!     if (addr [0] == 0xAC
!         && (addr [1] & 0xF0) == 0x01)
        return true;
  
      // 192.168.0.0/16
!     if (addr [0] == 0xC0
!         && addr [1] == 0xA8)
        return true;
  
      // XXX: Do we need to check more addresses here ?
--- 154,215 ----
  
    /**
     * 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] == 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] == 0x0A)
        return true;
  
      // XXX: Suns JDK 1.4.1 (on Linux) seems to have a bug here:
      // it says 172.16.0.0 - 172.255.255.255 are site local addresses
      // 172.16.0.0/12
!     if (addr[0] == 0xAC && (addr[1] & 0xF0) == 0x01)
        return true;
  
      // 192.168.0.0/16
!     if (addr[0] == 0xC0 && addr[1] == 0xA8)
        return true;
  
      // XXX: Do we need to check more addresses here ?
*************** public class InetAddress implements Seri
*** 234,281 ****
  
    /**
     * 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 reoutine 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 reoutine 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] == 0xE0
! 	    && addr [1] == 0x00
! 	    && addr [2] == 0x00);
    }
  
    /**
--- 218,260 ----
  
    /**
     * 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 reoutine 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 reoutine 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] == 0xE0 && addr[1] == 0x00 && addr[2] == 0x00);
    }
  
    /**
*************** public class InetAddress implements Seri
*** 287,293 ****
    {
      // This is the IPv4 implementation.
      // Any class derived from InetAddress should override this.
- 
      // XXX: This seems to not exist with IPv4 addresses
      return false;
    }
--- 266,271 ----
*************** public class InetAddress implements Seri
*** 295,308 ****
    /**
     * Utility reoutine 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;
    }
--- 273,285 ----
    /**
     * Utility reoutine 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;
    }
*************** public class InetAddress implements Seri
*** 315,323 ****
     */
    public String getHostName()
    {
!     if (hostName == null)
!       lookup (null, this, false);
  
      return hostName;
    }
  
--- 292,303 ----
     */
    public String getHostName()
    {
!     if (hostName != null)
!       return hostName;
  
+     // Lookup hostname and set field.
+     lookup (null, this, false);
+     
      return hostName;
    }
  
*************** public class InetAddress implements Seri
*** 333,339 ****
        {
          try
  	  {
!             sm.checkConnect (hostName, -1);
  	  }
  	catch (SecurityException e)
  	  {
--- 313,319 ----
        {
          try
  	  {
!             sm.checkConnect(hostName, -1);
  	  }
  	catch (SecurityException e)
  	  {
*************** public class InetAddress implements Seri
*** 342,348 ****
        }
  
      // Try to find the FDQN now
!     InetAddress address = new InetAddress (getAddress(), null);
      return address.getHostName();
    }
  
--- 322,335 ----
        }
  
      // 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();
    }
  
*************** public class InetAddress implements Seri
*** 384,390 ****
    }
  
    /**
!    * 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
--- 371,377 ----
    }
  
    /**
!    * 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
*************** public class InetAddress implements Seri
*** 393,399 ****
     */
    public String getHostAddress()
    {
!     StringBuffer sb = new StringBuffer (40);
      int len = addr.length;
      int i = 0;
      
--- 380,387 ----
     */
    public String getHostAddress()
    {
!     StringBuffer sb = new StringBuffer(40);
! 
      int len = addr.length;
      int i = 0;
      
*************** public class InetAddress implements Seri
*** 432,446 ****
      
      for ( ; ; )
        {
!         sb.append (addr [i] & 0xff);
! 	i++;
  	
! 	if (i == len)
! 	  break;
  	
! 	sb.append ('.');
        }
!     
      return sb.toString();
    }
  
--- 420,434 ----
      
      for ( ; ; )
        {
!         sb.append(addr[i] & 0xff);
!         i++;
  	
!         if (i == len)
!           break;
  	
!         sb.append('.');
        }
! 
      return sb.toString();
    }
  
*************** public class InetAddress implements Seri
*** 457,466 ****
      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;
    }
  
--- 445,454 ----
      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;
    }
  
*************** public class InetAddress implements Seri
*** 474,484 ****
     * @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
--- 462,472 ----
     * @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
*************** public class InetAddress implements Seri
*** 486,499 ****
      // 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;
    }
  
--- 474,487 ----
      // 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;
    }
  
*************** public class InetAddress implements Seri
*** 506,520 ****
     */
    public String toString()
    {
!     String host;
!     String address = getHostAddress();
!     
!     if (hostName != null)
!       host = hostName;
!     else
!       host = address;
!     
!     return host + "/" + address;
    }
  
    /**
--- 494,502 ----
     */
    public String toString()
    {
!     String addr = getHostAddress();
!     String host = (hostName != null) ? hostName : addr;
!     return host + "/" + addr;
    }
  
    /**
*************** public class InetAddress implements Seri
*** 529,538 ****
     *
     * @since 1.4
     */
!   public static InetAddress getByAddress (byte[] addr)
      throws UnknownHostException
    {
!     return getByAddress (null, addr);
    }
  
    /**
--- 511,520 ----
     *
     * @since 1.4
     */
!   public static InetAddress getByAddress(byte[] addr)
      throws UnknownHostException
    {
!     return getByAddress(null, addr);
    }
  
    /**
*************** public class InetAddress implements Seri
*** 546,563 ****
     *
     * @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 host is a valid numeric IP address, return the numeric address.
     * Otherwise, return null.
--- 528,545 ----
     *
     * @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 host is a valid numeric IP address, return the numeric address.
     * Otherwise, return null.
*************** public class InetAddress implements Seri
*** 573,584 ****
     * 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, 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 machine.
!    * 
     * @return The address of the host as an InetAddress object.
     *
     * @exception UnknownHostException If no IP address for the host could
--- 555,567 ----
     * 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
*************** public class InetAddress implements Seri
*** 586,604 ****
     * @exception SecurityException If a security manager exists and its
     * checkConnect method doesn't allow the operation
     */
!   public static InetAddress getByName (String hostname)
      throws UnknownHostException
    {
      SecurityManager s = System.getSecurityManager();
      if (s != null)
!       s.checkConnect (hostname, -1);
!    
!     // Default to current host if necessary
!     if (hostname == null)
!       return getLocalHost();
  
      // Assume that the host string is an IP address
!     byte[] address = aton (hostname);
      if (address != null)
        {
          if (address.length == 4)
--- 569,588 ----
     * @exception SecurityException If a security manager exists and its
     * checkConnect method doesn't allow the operation
     */
!   public static InetAddress getByName(String hostname)
      throws UnknownHostException
    {
+     // If null or the empty string is supplied, the loopback address
+     // is returned. Note that this is permitted without a security check.
+     if (hostname == null || hostname.length() == 0)
+       return loopback;
+ 
      SecurityManager s = System.getSecurityManager();
      if (s != null)
!       s.checkConnect(hostname, -1);
  
      // Assume that the host string is an IP address
!     byte[] address = aton(hostname);
      if (address != null)
        {
          if (address.length == 4)
*************** public class InetAddress implements Seri
*** 619,628 ****
  	else
            throw new UnknownHostException ("Address has invalid length");
        }
!    
      // Try to resolve the host by DNS
!     InetAddress[] addresses = getAllByName (hostname);
!     return addresses [0];
    }
  
    /**
--- 603,613 ----
  	else
            throw new UnknownHostException ("Address has invalid length");
        }
! 
      // Try to resolve the host by DNS
!     InetAddress result = new InetAddress(null, null);
!     lookup (hostname, result, false);
!     return result;
    }
  
    /**
*************** public class InetAddress implements Seri
*** 632,653 ****
     * 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 @param hostname The name of the desired host, or null for the
!    * local machine.
     *
     * @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);
  
      // Check if hostname is an IP address
      byte[] address = aton (hostname);
--- 617,643 ----
     * 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
    {
+     // If null or the empty string is supplied, the loopback address
+     // is returned. Note that this is permitted without a security check.
+     if (hostname == null || hostname.length() == 0)
+       return new InetAddress[] {loopback};
+ 
      SecurityManager s = System.getSecurityManager();
      if (s != null)
!       s.checkConnect(hostname, -1);
  
      // Check if hostname is an IP address
      byte[] address = aton (hostname);
*************** public class InetAddress implements Seri
*** 657,667 ****
  	result [0] = new InetAddress (address, null);
  	return result;
        }
!    
      // Try to resolve the hostname by DNS
      return lookup (hostname, null, true);
    }
  
    private static native String getLocalHostname();
  
    /**
--- 647,665 ----
  	result [0] = new InetAddress (address, null);
  	return result;
        }
! 
      // Try to resolve the hostname by DNS
      return lookup (hostname, null, true);
    }
  
+   /**
+    * This native method looks up the hostname of the local machine
+    * we are on.  If the actual hostname cannot be determined, then the
+    * value "localhost" will be used.  This native method wrappers the
+    * "gethostname" function.
+    *
+    * @return The local hostname.
+    */
    private static native String getLocalHostname();
  
    /**
*************** public class InetAddress implements Seri
*** 681,687 ****
      // However, if there is a security manager, and the cached result
      // is other than "localhost", we need to check again.
      if (localhost == null
! 	|| (s != null && localhost.addr != localhostAddress))
        getLocalHost (s);
      
      return localhost;
--- 679,685 ----
      // However, if there is a security manager, and the cached result
      // is other than "localhost", we need to check again.
      if (localhost == null
! 	|| (s != null && ! localhost.isLoopbackAddress()))
        getLocalHost (s);
      
      return localhost;
*************** public class InetAddress implements Seri
*** 716,722 ****
  	  }
        }
      
!     if (hostname != null)
        {
  	try
  	  {
--- 714,720 ----
  	  }
        }
      
!     if (hostname != null && hostname.length() != 0)
        {
  	try
  	  {
*************** public class InetAddress implements Seri
*** 727,735 ****
  	  {
  	  }
        }
      
      if (localhost == null)
!       localhost = new InetAddress (localhostAddress, "localhost");
    }
  
    /**
--- 725,735 ----
  	  {
  	  }
        }
+     else
+       throw new UnknownHostException();
      
      if (localhost == null)
!       localhost = new InetAddress (loopbackAddress, "localhost");
    }
  
    /**
*************** public class InetAddress implements Seri
*** 739,755 ****
    {
      // 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);
!     
      // Ignore family from serialized data.  Since the saved address is 32 bits
      // the deserialized object will have an IPv4 address i.e. AF_INET family.
      // FIXME: An alternative is to call the aton method on the deserialized
--- 739,755 ----
    {
      // 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);
! 
      // Ignore family from serialized data.  Since the saved address is 32 bits
      // the deserialized object will have an IPv4 address i.e. AF_INET family.
      // FIXME: An alternative is to call the aton method on the deserialized
*************** public class InetAddress implements Seri
*** 758,773 ****
      family = getFamily (addr);
    }
  
!   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 | (((int) addr [i]) & 0xFF);
!     
      oos.defaultWriteObject();
    }
  }
--- 758,773 ----
      family = getFamily (addr);
    }
  
!   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 | (((int) addr[i]) & 0xFF);
! 
      oos.defaultWriteObject();
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/net/InetSocketAddress.java gcc-4.0.0/libjava/java/net/InetSocketAddress.java
*** gcc-3.4.3/libjava/java/net/InetSocketAddress.java	Wed Nov 26 10:41:02 2003
--- gcc-4.0.0/libjava/java/net/InetSocketAddress.java	Tue Apr 20 13:05:09 2004
***************
*** 1,4 ****
! /* InetSocketAddress.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* InetSocketAddress.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,57 ****
  
  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.
     */
--- 37,57 ----
  
  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.
     */
*************** public class InetSocketAddress extends S
*** 66,75 ****
     * Port of host.
     */
    private int port;
!     
    /**
     * Constructs an InetSocketAddress instance.
!    * 
     * @param addr Address of the socket
     * @param port Port if the socket
     *
--- 66,75 ----
     * Port of host.
     */
    private int port;
! 
    /**
     * Constructs an InetSocketAddress instance.
!    *
     * @param addr Address of the socket
     * @param port Port if the socket
     *
*************** public class InetSocketAddress extends S
*** 79,112 ****
      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 addr Address of the socket
!    * @param port Port if the socket
     *
     * @exception IllegalArgumentException If the port number is illegal
     */
--- 79,111 ----
      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 class InetSocketAddress extends S
*** 114,162 ****
      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;
    }
  
--- 113,160 ----
      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;
    }
  
*************** public class InetSocketAddress extends S
*** 190,196 ****
    {
      return port;
    }
!     
    /**
     * Returns the hashcode of the <code>InetSocketAddress</code>
     *
--- 188,194 ----
    {
      return port;
    }
! 
    /**
     * Returns the hashcode of the <code>InetSocketAddress</code>
     *
*************** public class InetSocketAddress extends S
*** 210,216 ****
    {
      return addr == null;
    }
!     
    /**
     * Returns the <code>InetSocketAddress</code> as string
     *
--- 208,214 ----
    {
      return addr == null;
    }
! 
    /**
     * Returns the <code>InetSocketAddress</code> as string
     *
diff -Nrcpad gcc-3.4.3/libjava/java/net/JarURLConnection.java gcc-4.0.0/libjava/java/net/JarURLConnection.java
*** gcc-3.4.3/libjava/java/net/JarURLConnection.java	Sat Dec 20 22:54:26 2003
--- gcc-4.0.0/libjava/java/net/JarURLConnection.java	Mon Oct 18 10:14:24 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,58 ****
  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.jar.Attributes;
  import java.util.jar.JarEntry;
  import java.util.jar.JarFile;
  import java.util.jar.JarInputStream;
  import java.util.jar.Manifest;
  import java.util.zip.ZipEntry;
! import java.security.cert.Certificate;
  
  /**
   * 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:<standard URL pointing to jar file>!/file/within/jarfile
   * <p> for example:
   * <p>
   * jar:http://www.urbanophile.com/java/foo.jar!/com/urbanophile/bar.class
--- 35,58 ----
  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.JarInputStream;
  import java.util.jar.Manifest;
  import java.util.zip.ZipEntry;
! 
  
  /**
   * 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
*************** import java.security.cert.Certificate;
*** 66,73 ****
   * 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
--- 66,73 ----
   * 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 e
*** 96,125 ****
    /**
     * Creates a JarURLConnection from an URL object
     *
!    * @param URL 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);
    }
  
    /**
--- 96,124 ----
    /**
     * 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);
    }
  
    /**
*************** public abstract class JarURLConnection e
*** 128,134 ****
     *
     * @return The remote URL
     */
!   public URL getJarFileURL ()
    {
      return jarFileURL;
    }
--- 127,133 ----
     *
     * @return The remote URL
     */
!   public URL getJarFileURL()
    {
      return jarFileURL;
    }
*************** public abstract class JarURLConnection e
*** 140,158 ****
     *
     * @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
    {
      JarFile jarfile = null;
  
--- 139,157 ----
     *
     * @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
    {
      JarFile jarfile = null;
  
*************** public abstract class JarURLConnection e
*** 203,209 ****
     *
     * @exception IOException If an error occurs
     */
!   public abstract JarFile getJarFile () throws IOException;
  
    /**
     * Returns an array of Certificate objects for the jar file entry specified
--- 202,208 ----
     *
     * @exception IOException If an error occurs
     */
!   public abstract JarFile getJarFile() throws IOException;
  
    /**
     * Returns an array of Certificate objects for the jar file entry specified
*************** public abstract class JarURLConnection e
*** 213,222 ****
     *
     * @exception IOException If an error occurs
     */
!   public Certificate[] getCertificates () throws IOException
    {
      JarEntry entry = getJarEntry();
!     
      return entry != null ? entry.getCertificates() : null;
    }
  
--- 212,221 ----
     *
     * @exception IOException If an error occurs
     */
!   public Certificate[] getCertificates() throws IOException
    {
      JarEntry entry = getJarEntry();
! 
      return entry != null ? entry.getCertificates() : null;
    }
  
*************** public abstract class JarURLConnection e
*** 228,237 ****
     *
     * @exception IOException If an error occurs
     */
!   public Attributes getMainAttributes () throws IOException
    {
      Manifest manifest = getManifest();
!     
      return manifest != null ? manifest.getMainAttributes() : null;
    }
  
--- 227,236 ----
     *
     * @exception IOException If an error occurs
     */
!   public Attributes getMainAttributes() throws IOException
    {
      Manifest manifest = getManifest();
! 
      return manifest != null ? manifest.getMainAttributes() : null;
    }
  
*************** public abstract class JarURLConnection e
*** 244,250 ****
     *
     * @exception IOException If an error occurs
     */
!   public Attributes getAttributes () throws IOException
    {
      JarEntry entry = getJarEntry();
  
--- 243,249 ----
     *
     * @exception IOException If an error occurs
     */
!   public Attributes getAttributes() throws IOException
    {
      JarEntry entry = getJarEntry();
  
*************** public abstract class JarURLConnection e
*** 259,265 ****
     *
     * @exception IOException If an error occurs
     */
!   public Manifest getManifest () throws IOException
    {
      JarFile file = getJarFile();
  
--- 258,264 ----
     *
     * @exception IOException If an error occurs
     */
!   public Manifest getManifest() throws IOException
    {
      JarFile file = getJarFile();
  
diff -Nrcpad gcc-3.4.3/libjava/java/net/MalformedURLException.java gcc-4.0.0/libjava/java/net/MalformedURLException.java
*** gcc-3.4.3/libjava/java/net/MalformedURLException.java	Sat Jun 15 19:45:34 2002
--- gcc-4.0.0/libjava/java/net/MalformedURLException.java	Sun Oct 17 08:29:52 2004
*************** package java.net;
*** 39,50 ****
  
  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
--- 39,51 ----
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/net/MulticastSocket.java gcc-4.0.0/libjava/java/net/MulticastSocket.java
*** gcc-3.4.3/libjava/java/net/MulticastSocket.java	Wed Nov 26 14:33:41 2003
--- gcc-4.0.0/libjava/java/net/MulticastSocket.java	Sun Oct 17 08:29:52 2004
*************** GNU Classpath is free software; you can 
*** 8,14 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 8,14 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** package java.net;
*** 41,66 ****
  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.
--- 41,66 ----
  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 Dat
*** 111,120 ****
      if (address != null)
        bind(address);
    }
!   
    /**
     * Returns the interface being used for multicast packets
!    * 
     * @return The multicast interface
     *
     * @exception SocketException If an error occurs
--- 111,120 ----
      if (address != null)
        bind(address);
    }
! 
    /**
     * Returns the interface being used for multicast packets
!    *
     * @return The multicast interface
     *
     * @exception SocketException If an error occurs
*************** public class MulticastSocket extends Dat
*** 131,137 ****
     * 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
--- 131,137 ----
     * 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
*************** public class MulticastSocket extends Dat
*** 153,160 ****
  
    /**
     * 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
--- 153,160 ----
  
    /**
     * 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
*************** public class MulticastSocket extends Dat
*** 189,200 ****
    /**
     * 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)
--- 189,200 ----
    /**
     * 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)
*************** public class MulticastSocket extends Dat
*** 203,215 ****
      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);
    }
  
    /**
--- 203,215 ----
      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);
    }
  
    /**
*************** public class MulticastSocket extends Dat
*** 220,237 ****
     * @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;
    }
--- 220,236 ----
     * @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;
    }
*************** public class MulticastSocket extends Dat
*** 239,245 ****
    /**
     * 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
--- 238,244 ----
    /**
     * 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
*************** public class MulticastSocket extends Dat
*** 255,266 ****
      if (isClosed())
        throw new SocketException("socket is closed");
  
!     getImpl().setOption (SocketOptions.IP_MULTICAST_LOOP, new Boolean (disable));
    }
  
    /**
!    * Checks if local loopback mode is enabled or not
     *
     * @exception SocketException If an error occurs
     *
     * @since 1.4
--- 254,268 ----
      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 class MulticastSocket extends Dat
*** 270,280 ****
      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");
    }
  
--- 272,282 ----
      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");
    }
  
*************** public class MulticastSocket extends Dat
*** 303,314 ****
  
    /**
     * 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
--- 305,316 ----
  
    /**
     * 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
*************** public class MulticastSocket extends Dat
*** 323,332 ****
    }
  
    /**
!    * Joins the specified mulitcast group.
     *
-    * @param addr 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
--- 325,334 ----
    }
  
    /**
!    * 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 class MulticastSocket extends Dat
*** 349,355 ****
    /**
     * Leaves the specified multicast group
     *
!    * @param addr The address of the group to leave
     *
     * @exception IOException If an error occurs
     * @exception SecurityException If a security manager exists and its
--- 351,357 ----
    /**
     * 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
*************** public class MulticastSocket extends Dat
*** 377,383 ****
     * @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
--- 379,385 ----
     * @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
*************** public class MulticastSocket extends Dat
*** 395,420 ****
        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
--- 397,422 ----
        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
*************** public class MulticastSocket extends Dat
*** 433,449 ****
        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
--- 435,451 ----
        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
*************** public class MulticastSocket extends Dat
*** 458,464 ****
     *
     * @deprecated
     */
!   public synchronized void send(DatagramPacket p, byte ttl) throws IOException
    {
      if (isClosed())
        throw new SocketException("socket is closed");
--- 460,467 ----
     *
     * @deprecated
     */
!   public synchronized void send(DatagramPacket packet, byte ttl)
!     throws IOException
    {
      if (isClosed())
        throw new SocketException("socket is closed");
*************** public class MulticastSocket extends Dat
*** 466,483 ****
      SecurityManager s = System.getSecurityManager();
      if (s != null)
        {
!         InetAddress addr = p.getAddress();
!         if (addr.isMulticastAddress())
!           s.checkPermission (new SocketPermission
!                              (addr.getHostName () + p.getPort (),
!                               "accept,connect"));
!         else
!           s.checkConnect(addr.getHostAddress(), p.getPort());
        }
  
      int oldttl = getImpl().getTimeToLive();
      getImpl().setTimeToLive(((int) ttl) & 0xFF);
!     getImpl().send(p);
      getImpl().setTimeToLive(oldttl);
    }
! } // class MulticastSocket
--- 469,486 ----
      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-3.4.3/libjava/java/net/NetPermission.java gcc-4.0.0/libjava/java/net/NetPermission.java
*** gcc-3.4.3/libjava/java/net/NetPermission.java	Mon May 26 12:58:02 2003
--- gcc-4.0.0/libjava/java/net/NetPermission.java	Tue Apr 20 13:05:09 2004
*************** package java.net;
*** 39,60 ****
  
  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>requestPasswordAuthentication - Grants the ability to ask the
!  * authentication facility for the user's password.
!  * <li>specifyStreamHandler - Grants the permission to specify the 
!  * stream handler class used when loading from a URL.
   * </ul>
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
--- 39,61 ----
  
  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
*** 75,82 ****
    }
  
    /**
!    * 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
--- 76,83 ----
    }
  
    /**
!    * 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
diff -Nrcpad gcc-3.4.3/libjava/java/net/NetworkInterface.java gcc-4.0.0/libjava/java/net/NetworkInterface.java
*** gcc-3.4.3/libjava/java/net/NetworkInterface.java	Mon May  3 19:32:36 2004
--- gcc-4.0.0/libjava/java/net/NetworkInterface.java	Thu Feb 17 07:48:35 2005
***************
*** 1,5 ****
! /* NetworkInterface.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,43 ****
--- 35,45 ----
  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.Configuration;
+ 
  import java.util.Enumeration;
  import java.util.Vector;
  
*************** import java.util.Vector;
*** 48,78 ****
   * 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
  {
    static
!   {
!     if (Configuration.INIT_LOAD_LIBRARY)
!       {
! 	System.loadLibrary ("javanet");
!       }
!   }
  
    private String name;
-   
    private Vector inetAddresses;
  
!   private NetworkInterface (String name, InetAddress address)
    {
      this.name = name;
!     this.inetAddresses = new Vector (1, 1);
!     this.inetAddresses.add (address);
    }
  
!   private native static Vector getRealNetworkInterfaces ()
      throws SocketException;
  
    /**
--- 50,77 ----
   * 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
  {
    static
!     {
!       if (Configuration.INIT_LOAD_LIBRARY)
! 	System.loadLibrary("javanet");
!     }
  
    private String name;
    private Vector inetAddresses;
  
!   private NetworkInterface(String name, InetAddress address)
    {
      this.name = name;
!     this.inetAddresses = new Vector(1, 1);
!     this.inetAddresses.add(address);
    }
  
!   private static native Vector getRealNetworkInterfaces()
      throws SocketException;
  
    /**
*************** public final class NetworkInterface
*** 80,132 ****
     *
     * @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)
  	  {
  	  }
!     }
  
!     return tmpInetAddresses.elements ();
    }
  
    /**
!    *  Returns the display name of the interface
     *
!    *  @return The display name of the interface
     */
!   public String getDisplayName ()
    {
      return name;
    }
--- 79,132 ----
     *
     * @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;
    }
*************** public final class NetworkInterface
*** 142,202 ****
     * @exception SocketException If an error occurs
     * @exception NullPointerException If the specified name is null
     */
!   public static NetworkInterface getByName (String name)
      throws SocketException
    {
!     Vector networkInterfaces = getRealNetworkInterfaces ();
  
!     for (Enumeration e = networkInterfaces.elements ();
!          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
     *
!    *  @exception SocketException If an error occurs
!    *  @exception NullPointerException If the specified addess is null
     */
!   public static NetworkInterface getByInetAddress (InetAddress addr)
      throws SocketException
    {
!     Vector networkInterfaces = getRealNetworkInterfaces ();
!     
!     for (Enumeration interfaces = networkInterfaces.elements ();
!          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");
    }
  
    /**
!    *  Return an <code>Enumeration</code> of all available network interfaces
     *
!    *  @exception SocketException If an error occurs
     */
!   public static Enumeration getNetworkInterfaces ()
!     throws SocketException
    {
      Vector networkInterfaces = getRealNetworkInterfaces();
  
--- 142,203 ----
     * @exception SocketException If an error occurs
     * @exception NullPointerException If the specified name is null
     */
!   public static NetworkInterface getByName(String name)
      throws SocketException
    {
!     Vector networkInterfaces = getRealNetworkInterfaces();
  
!     for (Enumeration e = networkInterfaces.elements(); 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
    {
!     Vector networkInterfaces = getRealNetworkInterfaces();
! 
!     for (Enumeration interfaces = networkInterfaces.elements();
!          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");
    }
  
    /**
!    * 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 = getRealNetworkInterfaces();
  
*************** public final class NetworkInterface
*** 207,255 ****
    }
  
    /**
!    *  Checks if the current instance is equal to obj
     *
!    *  @param obj The object to compare with
!    */ 
!   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
     */
!   public int hashCode ()
    {
      // FIXME: hash correctly
!     return name.hashCode () + inetAddresses.hashCode ();
    }
  
    /**
!    *  Returns a string representation of the interface
     */
!   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;
    }
! } // class NetworkInterface
--- 208,261 ----
    }
  
    /**
!    * 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-3.4.3/libjava/java/net/NoRouteToHostException.java gcc-4.0.0/libjava/java/net/NoRouteToHostException.java
*** gcc-3.4.3/libjava/java/net/NoRouteToHostException.java	Sat Jun 15 19:45:34 2002
--- gcc-4.0.0/libjava/java/net/NoRouteToHostException.java	Sun Oct 17 08:29:53 2004
*************** this exception to your version of the li
*** 35,49 ****
  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
    */
--- 35,49 ----
  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
    */
diff -Nrcpad gcc-3.4.3/libjava/java/net/PasswordAuthentication.java gcc-4.0.0/libjava/java/net/PasswordAuthentication.java
*** gcc-3.4.3/libjava/java/net/PasswordAuthentication.java	Mon May 26 12:58:02 2003
--- gcc-4.0.0/libjava/java/net/PasswordAuthentication.java	Sun Oct 17 08:29:53 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 37,108 ****
  
  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
  {
-   /*
-    * Instance Variables
-    */
- 
    /**
!     * The username 
!     */
    private String username;
  
    /**
!     * The password
!     */
!   private char[] password;
! 
!   /*************************************************************************/
! 
!   /*
!    * Constructors
     */
  
    /**
!     * 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;
    }
  
-   /*************************************************************************/
- 
-   /*
-    * Instance Methods
-    */
- 
    /**
!     * 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);
    }
! 
! } // class PasswordAuthentication
! 
--- 37,92 ----
  
  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-3.4.3/libjava/java/net/PortUnreachableException.java gcc-4.0.0/libjava/java/net/PortUnreachableException.java
*** gcc-3.4.3/libjava/java/net/PortUnreachableException.java	Wed Aug 21 18:54:07 2002
--- gcc-4.0.0/libjava/java/net/PortUnreachableException.java	Sun Oct 17 08:29:53 2004
*************** exception statement from your version. *
*** 37,47 ****
  
  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
   */
--- 37,48 ----
  
  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 ex
*** 69,72 ****
      super(message);
    }
  } // class PortUnreachableException
- 
--- 70,72 ----
diff -Nrcpad gcc-3.4.3/libjava/java/net/ProtocolException.java gcc-4.0.0/libjava/java/net/ProtocolException.java
*** gcc-3.4.3/libjava/java/net/ProtocolException.java	Sat Jun 15 19:45:34 2002
--- gcc-4.0.0/libjava/java/net/ProtocolException.java	Sun Oct 17 08:29:53 2004
*************** package java.net;
*** 39,51 ****
  
  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
--- 39,52 ----
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/net/ServerSocket.java gcc-4.0.0/libjava/java/net/ServerSocket.java
*** gcc-3.4.3/libjava/java/net/ServerSocket.java	Sun Jul 11 16:42:28 2004
--- gcc-4.0.0/libjava/java/net/ServerSocket.java	Sun Oct 17 08:29:54 2004
***************
*** 1,5 ****
  /* ServerSocket.java -- Class for implementing server side sockets
!    Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* ServerSocket.java -- Class for implementing server side sockets
!    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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 8,14 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,48 ****
  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.
   */
--- 36,50 ----
  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.
   */
*************** import java.nio.channels.ServerSocketCha
*** 54,60 ****
   * 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)
--- 56,62 ----
   * 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)
*************** public class ServerSocket
*** 77,110 ****
     * True if socket is bound.
     */
    private boolean bound;
!   
    /*
     * 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
--- 79,114 ----
     * True if socket is bound.
     */
    private boolean bound;
! 
    /*
     * 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 class ServerSocket
*** 125,137 ****
     * 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);
    }
--- 129,140 ----
     * 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);
    }
*************** public class ServerSocket
*** 149,156 ****
     * @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);
    }
--- 152,158 ----
     * @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);
    }
*************** public class ServerSocket
*** 172,184 ****
     *
     * @since 1.1
     */
!   public ServerSocket (int port, int backlog, InetAddress bindAddr)
      throws IOException
    {
      this();
  
      // bind/listen socket
!     bind (new InetSocketAddress (bindAddr, port), backlog);
    }
  
    /**
--- 174,186 ----
     *
     * @since 1.1
     */
!   public ServerSocket(int port, int backlog, InetAddress bindAddr)
      throws IOException
    {
      this();
  
      // bind/listen socket
!     bind(new InetSocketAddress(bindAddr, port), backlog);
    }
  
    /**
*************** public class ServerSocket
*** 190,210 ****
     * @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
--- 192,211 ----
     * @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
*************** public class ServerSocket
*** 212,237 ****
     *
     * @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());
--- 213,239 ----
     *
     * @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());
*************** public class ServerSocket
*** 240,260 ****
        }
      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
     *
--- 242,262 ----
        }
      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
     *
*************** public class ServerSocket
*** 262,278 ****
     */
    public InetAddress getInetAddress()
    {
!     if (!isBound())
        return null;
!     
      try
        {
!         return (InetAddress) impl.getOption (SocketOptions.SO_BINDADDR);
        }
      catch (SocketException e)
        {
!         // This never happens as we are bound.
!         return null;
        }
    }
  
--- 264,280 ----
     */
    public InetAddress getInetAddress()
    {
!     if (! isBound())
        return null;
! 
      try
        {
! 	return (InetAddress) impl.getOption(SocketOptions.SO_BINDADDR);
        }
      catch (SocketException e)
        {
! 	// This never happens as we are bound.
! 	return null;
        }
    }
  
*************** public class ServerSocket
*** 283,312 ****
     */
    public int getLocalPort()
    {
!     if (!isBound())
        return -1;
!     
      return impl.getLocalPort();
    }
  
    /**
     * Returns the local socket address
     *
     * @since 1.4
     */
    public SocketAddress getLocalSocketAddress()
    {
!     if (!isBound())
        return null;
!     
      return new InetSocketAddress(getInetAddress(), getLocalPort());
    }
  
    /**
!    * Accepts a new connection and returns a connected <code>Socket</code> 
!    * instance representing that connection.  This method will block until a 
     * connection is available.
     *
     * @exception IOException If an error occurs
     * @exception SecurityException If a security manager exists and its
     * checkListen method doesn't allow the operation
--- 285,318 ----
     */
    public int getLocalPort()
    {
!     if (! isBound())
        return -1;
! 
      return impl.getLocalPort();
    }
  
    /**
     * Returns the local socket address
     *
+    * @return the local socket address, null if not bound
+    * 
     * @since 1.4
     */
    public SocketAddress getLocalSocketAddress()
    {
!     if (! isBound())
        return null;
! 
      return new InetSocketAddress(getInetAddress(), getLocalPort());
    }
  
    /**
!    * 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
*************** public class ServerSocket
*** 315,333 ****
     * @exception SocketTimeoutException If a timeout was previously set with
     * setSoTimeout and the timeout has been reached
     */
!   public Socket accept () throws IOException
    {
!     SecurityManager sm = System.getSecurityManager ();
      if (sm != null)
!       sm.checkListen (impl.getLocalPort ());
  
      Socket socket = new Socket();
!     implAccept (socket);
      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.
     *
--- 321,357 ----
     * @exception SocketTimeoutException If a timeout was previously set with
     * setSoTimeout and the timeout has been reached
     */
!   public Socket accept() throws IOException
    {
!     SecurityManager sm = System.getSecurityManager();
      if (sm != null)
!       sm.checkListen(impl.getLocalPort());
  
      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.
     *
*************** public class ServerSocket
*** 339,359 ****
     *
     * @since 1.1
     */
!   protected final void implAccept (Socket socket)
!     throws IOException
    {
      if (isClosed())
        throw new SocketException("ServerSocket is closed");
!     
      // 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;
    }
--- 363,381 ----
     *
     * @since 1.1
     */
!   protected final void implAccept(Socket socket) throws IOException
    {
      if (isClosed())
        throw new SocketException("ServerSocket is closed");
! 
      // 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;
    }
*************** public class ServerSocket
*** 363,373 ****
     *
     * @exception IOException If an error occurs
     */
!   public void close () throws IOException
    {
      if (isClosed())
        return;
!     
      impl.close();
      impl = null;
      bound = false;
--- 385,395 ----
     *
     * @exception IOException If an error occurs
     */
!   public void close() throws IOException
    {
      if (isClosed())
        return;
! 
      impl.close();
      impl = null;
      bound = false;
*************** public class ServerSocket
*** 382,387 ****
--- 404,411 ----
     *
     * The socket only has a ServerSocketChannel if its created
     * by ServerSocketChannel.open.
+    *
+    * @return the associated socket channel, null if none exists
     * 
     * @since 1.4
     */
*************** public class ServerSocket
*** 392,397 ****
--- 416,423 ----
  
    /**
     * Returns true when the socket is bound, otherwise false
+    *
+    * @return true if socket is bound, false otherwise
     * 
     * @since 1.4
     */
*************** public class ServerSocket
*** 402,407 ****
--- 428,435 ----
  
    /**
     * Returns true if the socket is closed, otherwise false
+    *
+    * @return true if socket is closed, false otherwise
     * 
     * @since 1.4
     */
*************** public class ServerSocket
*** 412,418 ****
  
    /**
     * 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.
     *
--- 440,446 ----
  
    /**
     * 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.
     *
*************** public class ServerSocket
*** 422,432 ****
     *
     * @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");
  
--- 450,460 ----
     *
     * @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");
  
*************** public class ServerSocket
*** 445,579 ****
     *
     * @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
     * 
     * @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, new Boolean (on));
    }
  
    /**
     * Checks if the SO_REUSEADDR option is enabled
!    * 
     * @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
     *
     * @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;
--- 473,607 ----
     *
     * @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-3.4.3/libjava/java/net/Socket.java gcc-4.0.0/libjava/java/net/Socket.java
*** gcc-3.4.3/libjava/java/net/Socket.java	Sun Jul 11 16:42:28 2004
--- gcc-4.0.0/libjava/java/net/Socket.java	Wed Nov 17 12:08:31 2004
***************
*** 1,5 ****
  /* Socket.java -- Client socket implementation
!    Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 8,14 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,49 ****
  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.InputStream;
  import java.io.IOException;
  import java.io.OutputStream;
- import java.nio.channels.SocketChannel;
  import java.nio.channels.IllegalBlockingModeException;
  
  /* Written using on-line Java Platform 1.2 API Specification.
   * Status:  I believe all methods are implemented.
--- 36,51 ----
  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.
*************** import java.nio.channels.IllegalBlocking
*** 55,65 ****
   * <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.
   *
--- 57,67 ----
   * <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.
   *
*************** public class Socket
*** 81,87 ****
    SocketImpl impl;
  
    /**
!    * True if socket implementation was created by calling their create() method.
     */
    // package-private because ServerSocket.implAccept() needs to access it.
    boolean implCreated;
--- 83,90 ----
    SocketImpl impl;
  
    /**
!    * True if socket implementation was created by calling their
!    * create() method.
     */
    // package-private because ServerSocket.implAccept() needs to access it.
    boolean implCreated;
*************** public class Socket
*** 102,115 ****
    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();
--- 105,118 ----
    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();
*************** public class Socket
*** 120,126 ****
    /**
     * 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
--- 123,129 ----
    /**
     * 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
*************** public class Socket
*** 134,140 ****
     *
     * @since 1.1
     */
!   protected Socket (SocketImpl impl) throws SocketException
    {
      if (impl == null)
        this.impl = new PlainSocketImpl();
--- 137,143 ----
     *
     * @since 1.1
     */
!   protected Socket(SocketImpl impl) throws SocketException
    {
      if (impl == null)
        this.impl = new PlainSocketImpl();
*************** public class Socket
*** 143,149 ****
    }
  
    /**
!    * 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
--- 146,152 ----
    }
  
    /**
!    * 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
*************** public class Socket
*** 155,168 ****
     * @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
--- 158,171 ----
     * @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
*************** public class Socket
*** 172,186 ****
     * @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.
--- 175,188 ----
     * @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.
*************** public class Socket
*** 195,209 ****
     *
     * @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
--- 197,211 ----
     *
     * @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
*************** public class Socket
*** 217,232 ****
     *
     * @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
--- 219,234 ----
     *
     * @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
*************** public class Socket
*** 241,260 ****
     * @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
--- 243,263 ----
     * @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
*************** public class Socket
*** 264,270 ****
     * @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);
    }
--- 267,274 ----
     * @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);
    }
*************** public class Socket
*** 297,320 ****
  
      // 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.
    }
  
!   // This has to be accessible from java.net.ServerSocket.
!   SocketImpl getImpl()
!     throws SocketException
    {
      try
        {
! 	if (!implCreated)
  	  {
  	    impl.create(true);
  	    implCreated = true;
--- 301,322 ----
  
      // 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;
*************** public class Socket
*** 337,346 ****
     * @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");
--- 339,348 ----
     * @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");
*************** public class Socket
*** 348,383 ****
      // 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.
     *
--- 350,385 ----
      // 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.
     *
*************** public class Socket
*** 387,399 ****
     * @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);
    }
  
    /**
--- 389,400 ----
     * @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);
    }
  
    /**
*************** public class Socket
*** 402,408 ****
     * 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
--- 403,409 ----
     * 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
*************** public class Socket
*** 410,424 ****
     * @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");
  
--- 411,425 ----
     * @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");
  
*************** public class Socket
*** 426,457 ****
      // 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);
  
      try
        {
!         getImpl().connect (endpoint, timeout);
        }
      catch (IOException exception)
        {
!         close ();
!         throw exception;
        }
      catch (RuntimeException exception)
        {
!         close ();
!         throw exception;
        }
      catch (Error error)
        {
!         close ();
!         throw error;
        }
    }
  
--- 427,457 ----
      // 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);
  
      try
        {
! 	getImpl().connect(endpoint, timeout);
        }
      catch (IOException exception)
        {
! 	close();
! 	throw exception;
        }
      catch (RuntimeException exception)
        {
! 	close();
! 	throw exception;
        }
      catch (Error error)
        {
! 	close();
! 	throw error;
        }
    }
  
*************** public class Socket
*** 461,469 ****
     *
     * @return The remote address this socket is connected to
     */
!   public InetAddress getInetAddress ()
    {
!     if (!isConnected())
        return null;
  
      try
--- 461,469 ----
     *
     * @return The remote address this socket is connected to
     */
!   public InetAddress getInetAddress()
    {
!     if (! isConnected())
        return null;
  
      try
*************** public class Socket
*** 480,505 ****
  
    /**
     * Returns the local address to which this socket is bound.  If this socket
!    * is not connected, then <code>null</code> is returned.
     *
     * @return The local address
     *
     * @since 1.1
     */
!   public InetAddress getLocalAddress ()
    {
      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
--- 480,509 ----
  
    /**
     * Returns the local address to which this socket is bound.  If this socket
!    * is not connected, then a wildcard address, for which
!    * @see 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
*************** public class Socket
*** 516,541 ****
  
    /**
     * Returns the port number of the remote end of the socket connection.  If
!    * this socket is not connected, then -1 is returned.
     *
     * @return The remote port this socket is connected to
     */
!   public int getPort ()
    {
!     if (!isConnected())
        return 0;
  
      try
        {
! 	if (getImpl() != null)
! 	  return getImpl().getPort();
        }
      catch (SocketException e)
        {
  	// This cannot happen as we are connected.
        }
  
!     return -1;
    }
  
    /**
--- 520,544 ----
  
    /**
     * 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;
    }
  
    /**
*************** public class Socket
*** 544,554 ****
     *
     * @return The local port
     */
!   public int getLocalPort ()
    {
!     if (!isBound())
        return -1;
!     
      try
        {
  	if (getImpl() != null)
--- 547,557 ----
     *
     * @return The local port
     */
!   public int getLocalPort()
    {
!     if (! isBound())
        return -1;
! 
      try
        {
  	if (getImpl() != null)
*************** public class Socket
*** 563,583 ****
    }
  
    /**
!    * If the socket is already bound this returns the local SocketAddress,
!    * otherwise null
     *
     * @since 1.4
     */
    public SocketAddress getLocalSocketAddress()
    {
!     if (!isBound())
        return null;
!     
!     InetAddress addr = getLocalAddress ();
  
      try
        {
! 	return new InetSocketAddress (addr, getImpl().getLocalPort());
        }
      catch (SocketException e)
        {
--- 566,587 ----
    }
  
    /**
!    * 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)
        {
*************** public class Socket
*** 587,605 ****
    }
  
    /**
!    * If the socket is already connected this returns the remote SocketAddress,
!    * otherwise null
     *
     * @since 1.4
     */
    public SocketAddress getRemoteSocketAddress()
    {
!     if (!isConnected ())
        return null;
  
      try
        {
! 	return new InetSocketAddress (getImpl().getInetAddress (), getImpl().getPort ());
        }
      catch (SocketException e)
        {
--- 591,611 ----
    }
  
    /**
!    * 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)
        {
*************** public class Socket
*** 615,628 ****
     *
     * @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();
    }
  
--- 621,634 ----
     *
     * @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();
    }
  
*************** public class Socket
*** 633,674 ****
     *
     * @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, new Boolean(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
--- 639,680 ----
     *
     * @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 class Socket
*** 677,693 ****
    {
      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
--- 683,699 ----
    {
      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
*************** public class Socket
*** 695,701 ****
     * (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
--- 701,707 ----
     * (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
*************** public class Socket
*** 707,731 ****
    {
      if (isClosed())
        throw new SocketException("socket is closed");
!     
!     if (on == true)
        {
!         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, new Boolean(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
--- 713,735 ----
    {
      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
*************** public class Socket
*** 733,739 ****
     * 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
--- 737,743 ----
     * 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
*************** public class Socket
*** 744,754 ****
    {
      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;
    }
--- 748,758 ----
    {
      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;
    }
*************** public class Socket
*** 763,840 ****
     *
     * @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, new Boolean(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));
    }
  
--- 767,844 ----
     *
     * @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));
    }
  
*************** public class Socket
*** 843,868 ****
     * 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;
    }
--- 847,872 ----
     * 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;
    }
*************** public class Socket
*** 879,892 ****
     *
     * @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));
    }
  
--- 883,896 ----
     *
     * @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));
    }
  
*************** public class Socket
*** 901,915 ****
     *
     * @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");
    }
--- 905,919 ----
     *
     * @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");
    }
*************** public class Socket
*** 926,939 ****
     *
     * @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));
    }
  
--- 930,943 ----
     *
     * @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));
    }
  
*************** public class Socket
*** 948,962 ****
     *
     * @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");
    }
--- 952,966 ----
     *
     * @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");
    }
*************** public class Socket
*** 971,982 ****
     *
     * @since 1.3
     */
!   public void setKeepAlive (boolean on) throws SocketException
    {
      if (isClosed())
        throw new SocketException("socket is closed");
!     
!     getImpl().setOption(SocketOptions.SO_KEEPALIVE, new Boolean(on));
    }
  
    /**
--- 975,986 ----
     *
     * @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));
    }
  
    /**
*************** public class Socket
*** 989,1003 ****
     *
     * @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");
    }
--- 993,1007 ----
     *
     * @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");
    }
*************** public class Socket
*** 1007,1017 ****
     *
     * @exception IOException If an error occurs
     */
!   public synchronized void close ()  throws IOException
    {
      if (isClosed())
        return;
!     
      getImpl().close();
      impl = null;
      bound = false;
--- 1011,1021 ----
     *
     * @exception IOException If an error occurs
     */
!   public synchronized void close() throws IOException
    {
      if (isClosed())
        return;
! 
      getImpl().close();
      impl = null;
      bound = false;
*************** public class Socket
*** 1025,1039 ****
     *
     * @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)
        {
--- 1029,1042 ----
     *
     * @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)
        {
*************** public class Socket
*** 1044,1062 ****
    }
  
    /**
!    * 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.
     *
     * @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
--- 1047,1067 ----
    }
  
    /**
!    * 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
*************** public class Socket
*** 1085,1091 ****
    {
      if (isClosed())
        throw new SocketException("socket is closed");
!     
      getImpl().shutdownInput();
      inputShutdown = true;
    }
--- 1090,1096 ----
    {
      if (isClosed())
        throw new SocketException("socket is closed");
! 
      getImpl().shutdownInput();
      inputShutdown = true;
    }
*************** public class Socket
*** 1101,1107 ****
    {
      if (isClosed())
        throw new SocketException("socket is closed");
!     
      getImpl().shutdownOutput();
      outputShutdown = true;
    }
--- 1106,1112 ----
    {
      if (isClosed())
        throw new SocketException("socket is closed");
! 
      getImpl().shutdownOutput();
      outputShutdown = true;
    }
*************** public class Socket
*** 1109,1115 ****
    /**
     * Returns the socket channel associated with this socket.
     *
!    * It returns null if no associated socket exists.
     *
     * @since 1.4
     */
--- 1114,1121 ----
    /**
     * Returns the socket channel associated with this socket.
     *
!    * @return the associated socket channel,
!    * null if no associated channel exists
     *
     * @since 1.4
     */
*************** public class Socket
*** 1127,1181 ****
     *
     * @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 set.
!    * 
     * @exception SocketException If an error occurs
     *
     * @since 1.4
     */
!   public void setReuseAddress (boolean on) throws SocketException
    {
!     getImpl().setOption (SocketOptions.SO_REUSEADDR, new Boolean (on));
    }
  
    /**
     * 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");
    }
  
    /**
--- 1133,1192 ----
     *
     * @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");
    }
  
    /**
*************** public class Socket
*** 1190,1204 ****
     *
     * @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));
    }
  
    /**
--- 1201,1215 ----
     *
     * @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));
    }
  
    /**
*************** public class Socket
*** 1208,1218 ****
     *
     * @since 1.4
     */
!   public boolean isConnected ()
    {
      try
        {
! 	return getImpl().getInetAddress () != null;
        }
      catch (SocketException e)
        {
--- 1219,1232 ----
     *
     * @since 1.4
     */
!   public boolean isConnected()
    {
      try
        {
! 	if (getImpl() == null)
! 	  return false;
! 
! 	return getImpl().getInetAddress() != null;
        }
      catch (SocketException e)
        {
*************** public class Socket
*** 1227,1245 ****
     *
     * @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;
    }
--- 1241,1259 ----
     *
     * @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;
    }
*************** public class Socket
*** 1248,1257 ****
     * Checks if the socket's input stream is shutdown
     *
     * @return True if input is shut down.
!    * 
     * @since 1.4
     */
!   public boolean isInputShutdown ()
    {
      return inputShutdown;
    }
--- 1262,1271 ----
     * Checks if the socket's input stream is shutdown
     *
     * @return True if input is shut down.
!    *
     * @since 1.4
     */
!   public boolean isInputShutdown()
    {
      return inputShutdown;
    }
*************** public class Socket
*** 1260,1269 ****
     * Checks if the socket's output stream is shutdown
     *
     * @return True if output is shut down.
!    * 
     * @since 1.4
     */
!   public boolean isOutputShutdown ()
    {
      return outputShutdown;
    }
--- 1274,1283 ----
     * 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-3.4.3/libjava/java/net/SocketAddress.java gcc-4.0.0/libjava/java/net/SocketAddress.java
*** gcc-3.4.3/libjava/java/net/SocketAddress.java	Tue Jan 14 21:44:48 2003
--- gcc-4.0.0/libjava/java/net/SocketAddress.java	Tue Apr 20 13:05:09 2004
***************
*** 1,4 ****
! /* SocketAddress.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* SocketAddress.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** package java.net;
*** 39,45 ****
  
  import java.io.Serializable;
  
! /** 
   * Abstract base class for InetSocketAddress.
   * InetSocketAddress is to my knowledge the only derived
   * class. [Ronald]
--- 39,46 ----
  
  import java.io.Serializable;
  
! 
! /**
   * Abstract base class for InetSocketAddress.
   * InetSocketAddress is to my knowledge the only derived
   * class. [Ronald]
diff -Nrcpad gcc-3.4.3/libjava/java/net/SocketException.java gcc-4.0.0/libjava/java/net/SocketException.java
*** gcc-3.4.3/libjava/java/net/SocketException.java	Sat Jun 15 19:45:34 2002
--- gcc-4.0.0/libjava/java/net/SocketException.java	Sun Oct 17 08:29:55 2004
*************** package java.net;
*** 39,50 ****
  
  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
   */
--- 39,51 ----
  
  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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/net/SocketImpl.java gcc-4.0.0/libjava/java/net/SocketImpl.java
*** gcc-3.4.3/libjava/java/net/SocketImpl.java	Fri Aug  1 21:08:33 2003
--- gcc-4.0.0/libjava/java/net/SocketImpl.java	Sun Oct 17 08:29:55 2004
*************** this exception to your version of the li
*** 36,49 ****
  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.InputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  
  /* Written using on-line Java Platform 1.2 API Specification.
   * Believed complete and correct.
   */
--- 36,49 ----
  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.
   */
*************** import java.io.OutputStream;
*** 62,68 ****
   * a factory.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner <bothner@cygnus.com>
   */
  public abstract class SocketImpl implements SocketOptions
  {
--- 62,68 ----
   * a factory.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner (bothner@cygnus.com)
   */
  public abstract class SocketImpl implements SocketOptions
  {
*************** public abstract class SocketImpl impleme
*** 113,119 ****
     *
     * @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.
--- 113,120 ----
     *
     * @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.
*************** public abstract class SocketImpl impleme
*** 153,159 ****
     *
     * @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
--- 154,161 ----
     *
     * @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
*************** public abstract class SocketImpl impleme
*** 220,245 ****
     *
     * @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.
     *
     * @since 1.4
     */
    protected boolean supportsUrgentData()
--- 222,259 ----
     *
     * @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()
*************** public abstract class SocketImpl impleme
*** 248,254 ****
      // sending urgend data.
      return false;
    }
!   
    /**
     * Sends one byte of urgent data to the socket.
     *
--- 262,268 ----
      // sending urgend data.
      return false;
    }
! 
    /**
     * Sends one byte of urgent data to the socket.
     *
*************** public abstract class SocketImpl impleme
*** 258,272 ****
     *
     * @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
--- 272,288 ----
     *
     * @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
*************** public abstract class SocketImpl impleme
*** 276,285 ****
     */
    public String toString()
    {
!     return "[addr=" + ((address == null) ? "0.0.0.0/0.0.0.0" :
!  		       address.toString())
! 	    + ",port=" + port
! 	    + ",localport=" + localport + "]";
    }
  
    /**
--- 292,300 ----
     */
    public String toString()
    {
!     return "[addr="
!            + ((address == null) ? "0.0.0.0/0.0.0.0" : address.toString())
!            + ",port=" + port + ",localport=" + localport + "]";
    }
  
    /**
*************** public abstract class SocketImpl impleme
*** 288,296 ****
     *
     * @exception IOException if an error occurs
     */
!   protected void shutdownInput () throws IOException
    {
!     throw new IOException ("Not implemented in this socket class");
    }
  
    /**
--- 303,311 ----
     *
     * @exception IOException if an error occurs
     */
!   protected void shutdownInput() throws IOException
    {
!     throw new IOException("Not implemented in this socket class");
    }
  
    /**
*************** public abstract class SocketImpl impleme
*** 299,306 ****
     *
     * @exception IOException if an error occurs
     */
!   protected void shutdownOutput () throws IOException
    {
!     throw new IOException ("Not implemented in this socket class");
    }
  }
--- 314,321 ----
     *
     * @exception IOException if an error occurs
     */
!   protected void shutdownOutput() throws IOException
    {
!     throw new IOException("Not implemented in this socket class");
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/net/SocketImplFactory.java gcc-4.0.0/libjava/java/net/SocketImplFactory.java
*** gcc-3.4.3/libjava/java/net/SocketImplFactory.java	Sat Oct 11 18:39:35 2003
--- gcc-4.0.0/libjava/java/net/SocketImplFactory.java	Sun Oct 17 08:29:55 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,53 ****
  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
  {
--- 35,52 ----
  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
  {
*************** public interface SocketImplFactory
*** 57,62 ****
      * @return A <code>SocketImpl</code> object
      */
    SocketImpl createSocketImpl();
- 
  } // interface SocketImplFactory
- 
--- 56,59 ----
diff -Nrcpad gcc-3.4.3/libjava/java/net/SocketOptions.java gcc-4.0.0/libjava/java/net/SocketOptions.java
*** gcc-3.4.3/libjava/java/net/SocketOptions.java	Sat Oct 11 18:39:35 2003
--- gcc-4.0.0/libjava/java/net/SocketOptions.java	Sun Oct 17 08:29:56 2004
***************
*** 1,5 ****
  /* 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.
--- 1,5 ----
  /* 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 
*** 8,14 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 8,14 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,57 ****
  
  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
--- 38,57 ----
  
  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
*************** public interface SocketOptions
*** 163,168 ****
     * @exception SocketException If an error occurs
     */
    Object getOption(int optionId) throws SocketException;
- 
  } // interface SocketOptions
- 
--- 163,166 ----
diff -Nrcpad gcc-3.4.3/libjava/java/net/SocketPermission.java gcc-4.0.0/libjava/java/net/SocketPermission.java
*** gcc-3.4.3/libjava/java/net/SocketPermission.java	Wed Oct 29 10:53:19 2003
--- gcc-4.0.0/libjava/java/net/SocketPermission.java	Sun Oct 17 08:29:56 2004
***************
*** 1,5 ****
  /* SocketPermission.java -- Class modeling permissions for socket operations
!    Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 41,46 ****
--- 41,47 ----
  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
*************** import java.security.PermissionCollectio
*** 64,81 ****
   * value for a port (respectively) is used by default.  Here are some
   * examples:
   * <p><ul>
!  * <li>8080 - Represents port 8080 only
!  * <li>2000-3000 - Represents ports 2000 through 3000 inclusive
!  * <li>-4000 - Represents ports 0 through 4000 inclusive
!  * <li>1024- - Represents ports 1024 through 65535 inclusive
   * </ul><p>
   * The permission list is a comma separated list of individual permissions.
   * These individual permissions are:
   * <p>
!  * accept<br>
!  * connect<br>
!  * listen<br>
!  * resolve<br>
   * <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
--- 65,84 ----
   * 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
*************** import java.security.PermissionCollectio
*** 103,114 ****
   *
   * @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
     */
--- 106,117 ----
   *
   * @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
     */
*************** public final class SocketPermission exte
*** 120,126 ****
    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
--- 123,129 ----
    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
*************** public final class SocketPermission exte
*** 136,164 ****
  
    /**
     * 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
--- 139,167 ----
  
    /**
     * 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 final class SocketPermission exte
*** 192,219 ****
  
      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());
    }
  
    /**
--- 195,222 ----
  
      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();
    }
  
    /**
*************** public final class SocketPermission exte
*** 226,255 ****
    {
      // FIXME: Implement
  
!     return (null);
    }
  
    /**
     * Returns true if the permission object passed it is implied by the
!    * this permission.  This will be true if 
!    * <p><ul>
!    * <li>The argument is of type <code>SocketPermission</code>
!    * <li>The actions list of the argument are in this object's actions
!    * <li>The port range of the argument is within this objects port range
!    * <li>The hostname is equal to or a subset of this objects hostname
     * </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>The argument's canonical hostname is equal to this object's.
     * <li>The argument's canonical name matches this domains hostname with
!    * wildcards
     * </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)
--- 229,260 ----
    {
      // 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)
*************** public final class SocketPermission exte
*** 260,345 ****
      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, ourlastport = 0, theirfirstport = 0, 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, theirhost;
  
      // Get ours
      if (hostport.indexOf(":") == -1)
--- 265,359 ----
      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)
*************** public final class SocketPermission exte
*** 355,391 ****
  
      // Are they equal?
      if (ourhost.equals(theirhost))
!       return (true);
  
      // Try the canonical names
!     String ourcanonical = null, 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);
    }
  }
--- 369,408 ----
  
      // 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-3.4.3/libjava/java/net/SocketTimeoutException.java gcc-4.0.0/libjava/java/net/SocketTimeoutException.java
*** gcc-3.4.3/libjava/java/net/SocketTimeoutException.java	Wed Aug 21 18:54:07 2002
--- gcc-4.0.0/libjava/java/net/SocketTimeoutException.java	Sun Oct 17 08:29:56 2004
*************** package java.net;
*** 39,48 ****
  
  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
   */
--- 39,49 ----
  
  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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/net/URI.java gcc-4.0.0/libjava/java/net/URI.java
*** gcc-3.4.3/libjava/java/net/URI.java	Mon May  5 05:10:47 2003
--- gcc-4.0.0/libjava/java/net/URI.java	Wed Feb  9 02:56:03 2005
***************
*** 1,5 ****
! /* URI.java - An URI class
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* URI.java -- An URI class
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,82 ****
  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;
  
  /**
!  * @author Michael Koch <konqueror@gmx.de>
   * @since 1.4
   */
! public final class URI
!   implements Comparable, Serializable
  {
    static final long serialVersionUID = -6052424284110960213L;
  
!   String string;
!   private String scheme;
!   private String schemeSpecificPart;
!   private String authority;
!   private String userInfo;
!   private String host;
!   private int port;
!   private String path;
!   private String query;
!   private String fragment;
  
!   private void readObject (ObjectInputStream is)
      throws ClassNotFoundException, IOException
    {
    }
  
!   private void writeObject (ObjectOutputStream is)
!     throws IOException
    {
    }
  
!   private void parseURI (String str)
!     throws URISyntaxException
    {
    }
!   
    /**
     * Creates an URI from the given string
     *
--- 35,412 ----
  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;
  
  /**
!  * @author Ito Kazumitsu (ito.kazumitsu@hitachi-cable.co.jp)
!  * @author Dalibor Topic (robilad@kaffe.org)
!  * @author Michael Koch (konqueror@gmx.de)
   * @since 1.4
   */
! public final class URI implements Comparable, Serializable
  {
    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 =
!     "^(([^:/?#]+):)?((//([^/?#]*))?([^?#]*)(\\?([^#]*))?)?(#(.*))?";
  
!   private static final String AUTHORITY_REGEXP =
!     "^((([^?#]*)@)?([^?#:]*)(:([^?#]*)))?";
! 
!   /**
!    * Valid characters (taken from rfc2396)
!    */
!   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 RFC2396_MARK = "-_.!~*'()";
!   private static final String RFC2396_UNRESERVED =
!     RFC2396_ALPHANUM + RFC2396_MARK;
!   private static final String RFC2396_REG_NAME =
!     RFC2396_UNRESERVED + "$,;:@&=+";
!   private static final String RFC2396_PCHAR = RFC2396_UNRESERVED + ":@&=+$,";
!   private static final String RFC2396_SEGMENT = RFC2396_PCHAR + ";";
!   private static final String RFC2396_PATH_SEGMENTS = RFC2396_SEGMENT + "/";
! 
!   /**
!    * 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;
!   
!   private static final int AUTHORITY_USERINFO_GROUP = 3;
!   private static final int AUTHORITY_HOST_GROUP = 4;
!   private static final int AUTHORITY_PORT_GROUP = 6;
!   
!   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;
! 
!   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);
    }
  
!   private static String getURIGroup(Matcher match, int group)
    {
+     String matched = match.group(group);
+     return matched.length() == 0 ? null : 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
!   {
!     Pattern pattern = Pattern.compile(URI_REGEXP);
!     Matcher matcher = pattern.matcher(str);
!     
!     if (matcher.matches())
!       {
! 	scheme = getURIGroup(matcher, SCHEME_GROUP);
! 	rawSchemeSpecificPart = getURIGroup(matcher, SCHEME_SPEC_PART_GROUP);
! 	rawAuthority = getURIGroup(matcher, AUTHORITY_GROUP);
! 	rawPath = getURIGroup(matcher, PATH_GROUP);
! 	rawQuery = getURIGroup(matcher, QUERY_GROUP);
! 	rawFragment = getURIGroup(matcher, FRAGMENT_GROUP);
!       }
!     else
!       throw new URISyntaxException(str, "doesn't match URI regular expression");
! 
!     if (rawAuthority != null)
!       {
! 	pattern = Pattern.compile(AUTHORITY_REGEXP);
! 	matcher = 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
! 		      (str, "doesn't match URI regular expression");
! 		  use.initCause(e);
! 		  throw use;
! 		}
! 	  }
! 	else
! 	  throw new URISyntaxException(str, "doesn't match URI regular expression");
!       }
! 
!     // We must eagerly unquote the parts, because this is the only time
!     // we may throw an exception.
!     schemeSpecificPart = unquote(rawSchemeSpecificPart);
!     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 > 127)
! 	  throw new URISyntaxException(str, "Invalid character");
! 	if (c == '%')
! 	  {
! 	    if (i + 2 >= str.length())
! 	      throw new URISyntaxException(str, "Invalid quoted character");
! 	    String hex = "0123456789ABCDEF";
! 	    int hi = hex.indexOf(str.charAt(++i));
! 	    int lo = hex.indexOf(str.charAt(++i));
! 	    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)
!   {
!     // FIXME: unimplemented.
!     return str;
!   }
! 
!   /**
!    * 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, RFC2396_REG_NAME);
!   }
! 
!   /**
!    * Quote characters in str that are not part of legalCharacters.
!    *
!    * Replace illegal characters by encoding their UTF-8
!    * representation as "%" + hex code for each resulting
!    * UTF-8 character.
!    *
!    * @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)
! 	  {
! 	    String hex = "0123456789ABCDEF";
! 	    if (c <= 127)
! 	      sb.append('%').append(hex.charAt(c / 16)).append(hex.charAt(c % 16));
! 	    else
! 	      {
! 		try
! 		  {
! 		    // this is far from optimal, but it works
! 		    byte[] utf8 = str.substring(i, i + 1).getBytes("utf-8");
! 		    for (int j = 0; j < utf8.length; j++)
! 		      sb.append('%').append(hex.charAt((utf8[j] & 0xff) / 16))
! 		        .append(hex.charAt((utf8[j] & 0xff) % 16));
! 		  }
! 		catch (java.io.UnsupportedEncodingException x)
! 		  {
! 		    throw (Error) new InternalError().initCause(x);
! 		  }
! 	      }
! 	  }
! 	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)
!   {
!     // FIXME: unimplemented.
!     return str;
!   }
! 
!   /**
!    * 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, RFC2396_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)
!   {
!     // FIXME: unimplemented.
!     return str;
!   }
! 
    /**
     * Creates an URI from the given string
     *
*************** public final class URI
*** 85,95 ****
     * @exception URISyntaxException If the given string violates RFC 2396
     * @exception NullPointerException If str is null
     */
!   public URI (String str)
!     throws URISyntaxException
    {
    }
!  
    /**
     * Create an URI from the given components
     *
--- 415,426 ----
     * @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
     *
*************** public final class URI
*** 103,112 ****
     *
     * @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
    {
    }
  
    /**
--- 434,453 ----
     *
     * @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)));
+ 
+     parseServerAuthority();
    }
  
    /**
*************** public final class URI
*** 116,129 ****
     * @param authority The authority
     * @param path The apth
     * @param query The query
!    * @param fragment The fragmen
     *
     * @exception URISyntaxException If the given string violates RFC 2396
     */
!   public URI (String scheme, String authority, String path, String query,
! 	     String fragment)
!     throws URISyntaxException
    {
    }
  
    /**
--- 457,474 ----
     * @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)));
    }
  
    /**
*************** public final class URI
*** 136,144 ****
     *
     * @exception URISyntaxException If the given string violates RFC 2396
     */
!   public URI (String scheme, String host, String path, String fragment)
      throws URISyntaxException
    {
    }
  
    /**
--- 481,490 ----
     *
     * @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);
    }
  
    /**
*************** public final class URI
*** 150,158 ****
     *
     * @exception URISyntaxException If the given string violates RFC 2396
     */
!   public URI (String scheme, String ssp, String fragment)
      throws URISyntaxException
    {
    }
  
    /**
--- 496,507 ----
     *
     * @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)));
    }
  
    /**
*************** public final class URI
*** 163,171 ****
     * @exception IllegalArgumentException If the given string violates RFC 2396
     * @exception NullPointerException If str is null
     */
!   public static URI create (String str)
    {
!     return null;
    }
  
    /**
--- 512,528 ----
     * @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);
!       }
    }
  
    /**
*************** public final class URI
*** 174,181 ****
     *
     * @exception URISyntaxException If the given string violates RFC 2396
     */
!   public URI parseServerAuthority ()
!      throws URISyntaxException
    {
      return null;
    }
--- 531,537 ----
     *
     * @exception URISyntaxException If the given string violates RFC 2396
     */
!   public URI parseServerAuthority() throws URISyntaxException
    {
      return null;
    }
*************** public final class URI
*** 183,189 ****
    /**
     * Returns a normalizes versions of the URI
     */
!   public URI normalize ()
    {
      return null;
    }
--- 539,545 ----
    /**
     * Returns a normalizes versions of the URI
     */
!   public URI normalize()
    {
      return null;
    }
*************** public final class URI
*** 193,205 ****
     *
     * @param uri The URI to resolve against this URI
     *
!    * @return The resulting URI
     *
     * @exception NullPointerException If uri is null
     */
!   public URI resolve (URI uri)
!   { 
!     return null;
    }
  
    /**
--- 549,604 ----
     *
     * @param uri The URI to resolve against this URI
     *
!    * @return The resulting URI, or null when it couldn't be resolved
!    * for some reason.
     *
     * @exception 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 = basepath.toString();
! 		//  FIXME We must normalize the path here.
! 		//  Normalization process omitted.
! 	      }
! 	  }
! 	return new URI(this.scheme, authority, path, query, fragment);
!       }
!     catch (URISyntaxException e)
!       {
! 	return null;
!       }
    }
  
    /**
*************** public final class URI
*** 213,222 ****
     * violates RFC 2396
     * @exception NullPointerException If uri is null
     */
!   public URI resolve (String str)
!     throws IllegalArgumentException
    {
!     return null;
    }
  
    /**
--- 612,620 ----
     * violates RFC 2396
     * @exception NullPointerException If uri is null
     */
!   public URI resolve(String str) throws IllegalArgumentException
    {
!     return resolve(create(str));
    }
  
    /**
*************** public final class URI
*** 228,234 ****
     *
     * @exception NullPointerException If uri is null
     */
!   public URI relativize (URI uri)
    {
      return null;
    }
--- 626,632 ----
     *
     * @exception NullPointerException If uri is null
     */
!   public URI relativize(URI uri)
    {
      return null;
    }
*************** public final class URI
*** 240,255 ****
     * not be found, or if some other error occurred while constructing the URL
     * @exception IllegalArgumentException If the URI is not absolute
     */
!   public URL toURL ()
!     throws IllegalArgumentException, MalformedURLException
    {
!     return null;
    }
  
    /**
     * Returns the scheme of the URI
     */
!   public String getScheme ()
    {
      return scheme;
    }
--- 638,655 ----
     * not be found, or if some other error occurred while constructing the URL
     * @exception 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;
    }
*************** public final class URI
*** 257,328 ****
    /**
     * Tells whether this URI is absolute or not
     */
!   public boolean isAbsolute ()
    {
!     return false;
    }
  
    /**
     * Tell whether this URI is opaque or not
     */
!   public boolean isOpaque ()
    {
!     return false;
    }
  
    /**
     * 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 null;
    }
  
    /**
     * Returns the decoded scheme specific part of this URI.
     */
!   public String getSchemeSpecificPart ()
    {
!     return null;
    }
  
    /**
     * Returns the rae authority part of this URI
     */
!   public String getRawAuthority ()
    {
!     return authority;
    }
  
    /**
     * Returns the decoded authority part of this URI
     */
!   public String getAuthority ()
    {
!     return null;
    }
  
    /**
     * Returns the raw user info part of this URI
     */
!   public String getRawUserInfo ()
    {
!     return userInfo;
    }
  
    /**
     * Returns the decoded user info part of this URI
     */
!   public String getUserInfo ()
    {
!     return null;
    }
  
    /**
     * Returns the hostname of the URI
     */
!   public String getHost ()
    {
      return host;
    }
--- 657,728 ----
    /**
     * 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 rae 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;
    }
*************** public final class URI
*** 330,336 ****
    /**
     * Returns the port number of the URI
     */
!   public int getPort ()
    {
      return port;
    }
--- 730,736 ----
    /**
     * Returns the port number of the URI
     */
!   public int getPort()
    {
      return port;
    }
*************** public final class URI
*** 338,386 ****
    /**
     * Returns the raw path part of this URI
     */
!   public String getRawPath ()
    {
!     return path;
    }
  
    /**
     * Returns the path of the URI
     */
!   public String getPath ()
    {
!     return null;
    }
  
    /**
     * Returns the raw query part of this URI
     */
!   public String getRawQuery ()
    {
!     return query;
    }
  
    /**
     * Returns the query of the URI
     */
!   public String getQuery ()
    {
!     return null;
    }
  
    /**
     * Return the raw fragment part of this URI
     */
!   public String getRawFragment ()
    {
!     return fragment;
    }
  
    /**
     * Returns the fragment of the URI
     */
!   public String getFragment ()
    {
!     return null;
    }
  
    /**
--- 738,786 ----
    /**
     * 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;
    }
  
    /**
*************** public final class URI
*** 396,402 ****
    /**
     * Computes the hascode of the URI
     */
!   public int hashCode ()
    {
      return 0;
    }
--- 796,802 ----
    /**
     * Computes the hascode of the URI
     */
!   public int hashCode()
    {
      return 0;
    }
*************** public final class URI
*** 408,415 ****
     *
     * @exception ClassCastException If given object ist not an URI
     */
!   public int compareTo (Object obj)
!     throws ClassCastException
    {
      return 0;
    }
--- 808,814 ----
     *
     * @exception ClassCastException If given object ist not an URI
     */
!   public int compareTo(Object obj) throws ClassCastException
    {
      return 0;
    }
*************** public final class URI
*** 417,431 ****
    /**
     * Returns the URI as string
     */
!   public String toString ()
    {
!     return "";
    }
  
    /**
     * Returns the URI as US-ASCII string
     */
!   public String toASCIIString ()
    {
      return "";
    }
--- 816,834 ----
    /**
     * Returns the URI as string
     */
!   public String toString()
    {
!     return (getScheme() == null ? "" : getScheme() + ":")
!            + (getRawAuthority() == null ? "" : "//" + getRawAuthority())
!            + (getRawPath() == null ? "" : getRawPath())
!            + (getRawQuery() == null ? "" : "?" + getRawQuery())
!            + (getRawFragment() == null ? "" : "#" + getRawFragment());
    }
  
    /**
     * Returns the URI as US-ASCII string
     */
!   public String toASCIIString()
    {
      return "";
    }
diff -Nrcpad gcc-3.4.3/libjava/java/net/URISyntaxException.java gcc-4.0.0/libjava/java/net/URISyntaxException.java
*** gcc-3.4.3/libjava/java/net/URISyntaxException.java	Wed Aug 21 18:54:07 2002
--- gcc-4.0.0/libjava/java/net/URISyntaxException.java	Sun Oct 17 08:29:56 2004
*************** exception statement from your version. *
*** 37,46 ****
  
  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
--- 37,47 ----
  
  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 
*** 137,143 ****
     */
    public String getMessage()
    {
!     return super.getMessage() + (index >= 0 ? " at index " + index : "")
!       + ": " + input;
    }
  }
--- 138,144 ----
     */
    public String getMessage()
    {
!     return (super.getMessage() + (index >= 0 ? " at index " + index : "")
!            + ": " + input);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/net/URL.java gcc-4.0.0/libjava/java/net/URL.java
*** gcc-3.4.3/libjava/java/net/URL.java	Wed Dec 31 10:55:40 2003
--- gcc-4.0.0/libjava/java/net/URL.java	Mon Apr  4 17:58:28 2005
***************
*** 1,5 ****
  /* URL.java -- Uniform Resource Locator Class
!    Copyright (C) 1998, 1999, 2000, 2002, 2003  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 8,14 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,52 ****
  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.InputStream;
  import java.io.IOException;
! import java.io.Serializable;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  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).
--- 36,56 ----
  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).
*************** import java.util.StringTokenizer;
*** 56,62 ****
  /**
    * 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>
--- 60,66 ----
  /**
    * 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>
*************** import java.util.StringTokenizer;
*** 74,80 ****
    * 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
--- 78,84 ----
    * 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
*************** import java.util.StringTokenizer;
*** 87,93 ****
    * <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
--- 91,97 ----
    * <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
*************** import java.util.StringTokenizer;
*** 113,128 ****
    * 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|sun.net.www.protocol";
!   
    /**
     * The name of the protocol for this URL.
     * The protocol is always stored in lower case.
--- 117,135 ----
    * 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 =
!     "org.metastatic.jessie|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.
*************** public final class URL implements Serial
*** 141,150 ****
    private String host;
  
    /**
     * 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>.
--- 148,162 ----
    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>.
*************** public final class URL implements Serial
*** 159,165 ****
    /**
     * This is the hashCode for this URL
     */
!   private int hashCode = 0;
  
    /**
     * The protocol handler in use for this URL
--- 171,177 ----
    /**
     * This is the hashCode for this URL
     */
!   private int hashCode;
  
    /**
     * The protocol handler in use for this URL
*************** public final class URL implements Serial
*** 171,177 ****
     * where we keep track of it.
     */
    private static URLStreamHandlerFactory factory;
- 
    private static final long serialVersionUID = -7627629688361524110L;
  
    /**
--- 183,188 ----
*************** public final class URL implements Serial
*** 187,204 ****
  
    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
--- 198,215 ----
  
    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
*************** public final class URL implements Serial
*** 231,241 ****
      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.
--- 242,251 ----
      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.
*************** public final class URL implements Serial
*** 254,285 ****
     *
     * @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");
!     this.protocol = protocol.toLowerCase();
  
      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 = null;
  
      int hashAt = file.indexOf('#');
      if (hashAt < 0)
--- 264,297 ----
     *
     * @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)
*************** public final class URL implements Serial
*** 292,298 ****
  	this.file = file.substring(0, hashAt);
  	this.ref = file.substring(hashAt + 1);
        }
!     hashCode = hashCode();			// Used for serialization.
    }
  
    /**
--- 304,310 ----
  	this.file = file.substring(0, hashAt);
  	this.ref = file.substring(hashAt + 1);
        }
!     hashCode = hashCode(); // Used for serialization.
    }
  
    /**
*************** public final class URL implements Serial
*** 309,315 ****
     */
    public URL(String spec) throws MalformedURLException
    {
!     this((URL) null, spec, (URLStreamHandler) null);
    }
  
    /**
--- 321,327 ----
     */
    public URL(String spec) throws MalformedURLException
    {
!     this((URL) null, spec != null ? spec : "", (URLStreamHandler) null);
    }
  
    /**
*************** public final class URL implements Serial
*** 325,331 ****
     * @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
--- 337,343 ----
     * @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
*************** public final class URL implements Serial
*** 340,346 ****
     * 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>
--- 352,358 ----
     * 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>
*************** public final class URL implements Serial
*** 372,378 ****
       * 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.
--- 384,390 ----
       * 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.
*************** public final class URL implements Serial
*** 380,392 ****
      // 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;
!     if ((colon = spec.indexOf("://", 1)) > 0 &&
! 	! spec.regionMatches(colon, "://:", 0, 4))
        context = null;
  
!     int slash;
!     if ((colon = spec.indexOf(':')) > 0 &&
! 	(colon < (slash = spec.indexOf('/')) || slash < 0))
        {
  	// Protocol specified in spec string.
  	protocol = spec.substring(0, colon).toLowerCase();
--- 392,405 ----
      // 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();
*************** public final class URL implements Serial
*** 396,401 ****
--- 409,415 ----
  	    host = context.host;
  	    port = context.port;
  	    file = context.file;
+             userInfo = context.userInfo;
  	    if (file == null || file.length() == 0)
  	      file = "/";
  	    authority = context.authority;
*************** public final class URL implements Serial
*** 410,437 ****
  	host = context.host;
  	port = context.port;
  	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");
  
      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 '#'
--- 424,453 ----
  	host = context.host;
  	port = context.port;
  	file = context.file;
+         userInfo = context.userInfo;
  	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");
! 
!     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 '#'
*************** public final class URL implements Serial
*** 441,475 ****
      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 url 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);
    }
  
    /**
--- 457,491 ----
      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);
    }
  
    /**
*************** public final class URL implements Serial
*** 482,488 ****
     *
     * @since 1.3
     */
!   public final Object getContent() throws IOException
    {
      return openConnection().getContent();
    }
--- 498,504 ----
     *
     * @since 1.3
     */
!   public Object getContent() throws IOException
    {
      return openConnection().getContent();
    }
*************** public final class URL implements Serial
*** 496,502 ****
     *
     * @exception IOException If an error occurs
     */
!   public final Object getContent (Class[] classes) throws IOException
    {
      // FIXME: implement this
      return getContent();
--- 512,518 ----
     *
     * @exception IOException If an error occurs
     */
!   public Object getContent(Class[] classes) throws IOException
    {
      // FIXME: implement this
      return getContent();
*************** public final class URL implements Serial
*** 507,513 ****
     * Defined as <code>path[?query]</code>.
     * Returns the empty string if there is no file portion.
     *
!    * @return The filename specified in this URL.
     */
    public String getFile()
    {
--- 523,529 ----
     * 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()
    {
*************** public final class URL implements Serial
*** 518,530 ****
     * Returns the path of the URL. This is the part of the file before any '?'
     * character.
     *
!    * @return The path specified in this URL.
!    * 
     * @since 1.3
     */
    public String getPath()
    {
!     int quest = (file == null) ? -1 : file.indexOf('?');
      return quest < 0 ? getFile() : file.substring(0, quest);
    }
  
--- 534,550 ----
     * 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);
    }
  
*************** public final class URL implements Serial
*** 532,538 ****
     * Returns the authority of the URL
     *
     * @return The authority specified in this URL.
!    * 
     * @since 1.3
     */
    public String getAuthority()
--- 552,558 ----
     * Returns the authority of the URL
     *
     * @return The authority specified in this URL.
!    *
     * @since 1.3
     */
    public String getAuthority()
*************** public final class URL implements Serial
*** 602,609 ****
     *
     * @return the user at a particular host or null when no user defined.
     */
!   public String getUserInfo ()
    {
      int at = (host == null) ? -1 : host.indexOf('@');
      return at < 0 ? null : host.substring(0, at);
    }
--- 622,631 ----
     *
     * @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);
    }
*************** public final class URL implements Serial
*** 614,620 ****
     *
     * @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());
--- 636,642 ----
     *
     * @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());
*************** public final class URL implements Serial
*** 628,636 ****
    public int hashCode()
    {
      if (hashCode != 0)
!       return hashCode;		// Use cached value if available.
      else
!       return ph.hashCode (this);
    }
  
    /**
--- 650,658 ----
    public int hashCode()
    {
      if (hashCode != 0)
!       return hashCode; // Use cached value if available.
      else
!       return ph.hashCode(this);
    }
  
    /**
*************** public final class URL implements Serial
*** 652,661 ****
     * from that connection
     *
     * @return An <code>InputStream</code> for this URL.
!    * 
     * @exception IOException If an error occurs
     */
!   public final InputStream openStream() throws IOException
    {
      return openConnection().getInputStream();
    }
--- 674,683 ----
     * 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();
    }
*************** public final class URL implements Serial
*** 670,685 ****
     *
     * @return true if URL matches this URL's file, false otherwise
     */
!   public boolean sameFile(URL other)
    {
!     return ph.sameFile(this, other);
    }
  
    /**
     * 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.
     *
     * @param protocol The protocol name for this URL
     * @param host The hostname or IP address for this URL
--- 692,708 ----
     *
     * @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
*************** public final class URL implements Serial
*** 688,713 ****
     * @param ref The anchor portion of this URL.
     */
    protected void set(String protocol, String host, int port, String file,
! 		     String ref)
    {
!     // TBD: Theoretically, a poorly written StreamHandler could pass an
!     // invalid protocol.  It will cause the handler to be set to null
!     // thus overriding a valid handler.  Callers of this method should
!     // be aware of this.
!     this.ph = getURLStreamHandler(protocol);
!     this.protocol = protocol.toLowerCase();
!     this.authority = null;
      this.port = port;
      this.host = host;
      this.file = file;
      this.ref = ref;
!     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.
     *
     * @param protocol The protocol name for this URL.
     * @param host The hostname or IP address for this URL.
--- 711,749 ----
     * @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.
*************** public final class URL implements Serial
*** 720,746 ****
     *
     * @since 1.3
     */
!   protected void set(String protocol, String host, int port,
! 		     String authority, String userInfo,
! 		     String path, String query, String ref)
    {
!     // TBD: Theoretically, a poorly written StreamHandler could pass an
!     // invalid protocol.  It will cause the handler to be set to null
!     // thus overriding a valid handler.  Callers of this method should
!     // be aware of this.
!     this.ph = getURLStreamHandler(protocol);
!     this.protocol = protocol.toLowerCase();
!     if (userInfo == null)
!       this.host = host;
!     else
!       this.host = userInfo + "@" + host;
      this.port = port;
      if (query == null)
        this.file = path;
      else
        this.file = path + "?" + query;
      this.ref = ref;
!     hashCode = hashCode();			// Used for serialization.
    }
  
    /**
--- 756,786 ----
     *
     * @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.
    }
  
    /**
*************** public final class URL implements Serial
*** 754,761 ****
     * @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");
--- 794,800 ----
     * @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");
*************** public final class URL implements Serial
*** 782,788 ****
  
    /**
     * 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
--- 821,827 ----
  
    /**
     * 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 final class URL implements Serial
*** 801,828 ****
     *
     * @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);
        }
!     else if (protocol.equals ("core"))
        {
   	ph = new gnu.java.net.protocol.core.Handler();
        }
!     else if (protocol.equals ("file"))
        {
  	// This is an interesting case.  It's tempting to think that we
  	// could call Class.forName ("gnu.java.net.protocol.file.Handler") to
--- 840,866 ----
     *
     * @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);
        }
!     else if (protocol.equals("core"))
        {
   	ph = new gnu.java.net.protocol.core.Handler();
        }
!     else if (protocol.equals("file"))
        {
  	// This is an interesting case.  It's tempting to think that we
  	// could call Class.forName ("gnu.java.net.protocol.file.Handler") to
*************** public final class URL implements Serial
*** 850,893 ****
  
  	// 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, "|");
!         
  	do
!           {
!             String clsName = (pkgPrefix.nextToken() + "."
! 			      + protocol + ".Handler");
!          
!             try
!               {
!                 Object obj = Class.forName (clsName).newInstance();
! 	    
!                 if (!(obj instanceof URLStreamHandler))
!                   continue;
!                 else
!                   ph = (URLStreamHandler) obj;
!               }
!             catch (Exception e)
                {
!                 // Can't instantiate; handler still null,
! 		// go on to next element.
                }
!           }
! 	while ((! (ph instanceof URLStreamHandler))
!                && pkgPrefix.hasMoreTokens());
        }
  
      // Update the hashtable with the new protocol handler.
!     if (ph != null
!         && cache_handlers)
!       if (ph instanceof URLStreamHandler)
! 	ph_cache.put (protocol, ph);
!       else
! 	ph = null;
  
      return ph;
    }
--- 888,937 ----
  
  	// 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;
    }
diff -Nrcpad gcc-3.4.3/libjava/java/net/URLClassLoader.java gcc-4.0.0/libjava/java/net/URLClassLoader.java
*** gcc-3.4.3/libjava/java/net/URLClassLoader.java	Thu Aug 28 22:17:37 2003
--- gcc-4.0.0/libjava/java/net/URLClassLoader.java	Wed Mar  9 19:36:55 2005
***************
*** 1,5 ****
  /* URLClassLoader.java --  ClassLoader that loads classes from one or more URLs
!    Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 8,14 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** import java.io.EOFException;
*** 43,66 ****
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FilePermission;
- import java.io.InputStream;
  import java.io.IOException;
! import java.security.AccessController;
  import java.security.AccessControlContext;
  import java.security.CodeSource;
- import java.security.SecureClassLoader;
- import java.security.PrivilegedAction;
  import java.security.PermissionCollection;
  import java.security.cert.Certificate;
  import java.util.Enumeration;
- import java.util.Vector;
  import java.util.HashMap;
  import java.util.jar.Attributes;
  import java.util.jar.JarEntry;
  import java.util.jar.JarFile;
  import java.util.jar.Manifest;
  import gnu.gcj.runtime.SharedLibHelper;
  
  /**
   * A secure class loader that can load classes and resources from
   * multiple locations.  Given an array of <code>URL</code>s this class
--- 44,70 ----
  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;
  import gnu.gcj.runtime.SharedLibHelper;
  
+ 
  /**
   * A secure class loader that can load classes and resources from
   * multiple locations.  Given an array of <code>URL</code>s this class
*************** import gnu.gcj.runtime.SharedLibHelper;
*** 118,124 ****
   * @author Mark Wielaard (mark@klomp.org)
   * @author Wu Gansha (gansha.wu@intel.com)
   */
-  
  public class URLClassLoader extends SecureClassLoader
  {
    // Class Variables
--- 122,127 ----
*************** public class URLClassLoader extends Secu
*** 130,136 ****
     * 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
--- 133,139 ----
     * 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
*************** public class URLClassLoader extends Secu
*** 144,155 ****
    private final Vector urls = new Vector();
  
    /**
!    * Store pre-parsed information for each url into this vector 
!    * each element is a URL loader, corresponding to the URL of 
!    * the same index in "urls"
     */
    private final Vector urlinfos = new Vector();
!     
    /** Factory used to get the protocol handlers of the URLs */
    private final URLStreamHandlerFactory factory;
  
--- 147,159 ----
    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;
  
*************** public class URLClassLoader extends Secu
*** 161,172 ****
    private final AccessControlContext securityContext;
  
    // Helper classes
!  
!   /** 
     * A <code>URLLoader</code> contains all logic to load resources from a
     * given base <code>URL</code>.
     */
!   static abstract class URLLoader
    {
      /**
       * Our classloader to get info from if needed.
--- 165,176 ----
    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.
*************** public class URLClassLoader extends Secu
*** 189,197 ****
  
      URLLoader(URLClassLoader classloader, URL baseURL)
      {
        this.classloader = classloader;
        this.baseURL = baseURL;
!       this.noCertCodeSource = new CodeSource(baseURL, null);
      }
  
      /**
--- 193,206 ----
  
      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);
      }
  
      /**
*************** public class URLClassLoader extends Secu
*** 221,236 ****
      {
        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>.
     */
!   static abstract class Resource
    {
      final URLLoader loader;
      final String name;
--- 230,250 ----
      {
        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;
      final String name;
*************** public class URLClassLoader extends Secu
*** 249,257 ****
      {
        Certificate[] certs = getCertificates();
        if (certs == null)
! 	return loader.noCertCodeSource;
        else
! 	return new CodeSource(loader.baseURL, certs);
      }
  
      /**
--- 263,271 ----
      {
        Certificate[] certs = getCertificates();
        if (certs == null)
!         return loader.noCertCodeSource;
        else
!         return new CodeSource(loader.baseURL, certs);
      }
  
      /**
*************** public class URLClassLoader extends Secu
*** 285,294 ****
     * A <code>JarURLLoader</code> is a type of <code>URLLoader</code>
     * only loading from jar url.
     */
!   final static 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
  
      public JarURLLoader(URLClassLoader classloader, URL baseURL)
      {
--- 299,310 ----
     * 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)
      {
*************** public class URLClassLoader extends Secu
*** 302,317 ****
        sb.append("!/");
        String jarURL = sb.toString();
  
        URL baseJarURL = null;
        JarFile jarfile = null;
        try
  	{
! 	  baseJarURL
! 	    = new URL(null, jarURL, classloader.getURLStreamHandler("jar"));
! 	  jarfile
! 	    = ((JarURLConnection) baseJarURL.openConnection()).getJarFile();
  	}
!       catch (IOException ioe) { /* ignored */ }
  
        this.baseJarURL = baseJarURL;
        this.jarfile = jarfile;
--- 318,366 ----
        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;
*************** public class URLClassLoader extends Secu
*** 321,352 ****
      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;
! 	}
      }
    }
  
!   final static class JarURLResource extends Resource
    {
      private final JarEntry entry;
  
--- 370,406 ----
      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;
  
*************** public class URLClassLoader extends Secu
*** 358,398 ****
  
      InputStream getInputStream() throws IOException
      {
!       return ((JarURLLoader)loader).jarfile.getInputStream(entry);
      }
  
      int getLength()
      {
!       return (int)entry.getSize();
      }
  
      Certificate[] getCertificates()
      {
!       return entry.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.
     */
!   final static class RemoteURLLoader extends URLLoader
    {
!     final private String protocol;
  
      RemoteURLLoader(URLClassLoader classloader, URL url)
      {
--- 412,456 ----
  
      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)
      {
*************** public class URLClassLoader extends Secu
*** 407,454 ****
      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.
     */
!   final static class RemoteResource extends Resource
    {
!     final private URL url;
!     final private InputStream stream;
!     final private int length;
  
      RemoteResource(RemoteURLLoader loader, String name, URL url,
! 		   InputStream stream, int length)
      {
        super(loader, name);
        this.url = url;
--- 465,512 ----
      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, name);
        this.url = url;
*************** public class URLClassLoader extends Secu
*** 482,490 ****
  
      SoURLLoader(URLClassLoader classloader, URL url)
      {
!       super(classloader, url);
        helper = SharedLibHelper.findHelper(classloader, url.getFile(),
! 					  noCertCodeSource);
      }
  
      Class getClass(String className)
--- 540,553 ----
  
      SoURLLoader(URLClassLoader classloader, URL url)
      {
!       this(classloader, url, url);
!     }
! 
!     SoURLLoader(URLClassLoader classloader, URL url, URL overrideURL)
!     {
!       super(classloader, url, overrideURL);
        helper = SharedLibHelper.findHelper(classloader, url.getFile(),
! 					  noCertCodeSource, true);
      }
  
      Class getClass(String className)
*************** public class URLClassLoader extends Secu
*** 533,541 ****
     * A <code>FileURLLoader</code> is a type of <code>URLLoader</code>
     * only loading from file url.
     */
!   final static class FileURLLoader extends URLLoader
    {
!     File dir;   //the file for this file url
  
      FileURLLoader(URLClassLoader classloader, URL url)
      {
--- 596,604 ----
     * 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)
      {
*************** public class URLClassLoader extends Secu
*** 547,559 ****
      Resource getResource(String name)
      {
        File file = new File(dir, name);
!       if (file.exists() && !file.isDirectory())
! 	return new FileResource(this, name, file);
        return null;
      }
    }
  
!   final static class FileResource extends Resource
    {
      final File file;
  
--- 610,622 ----
      Resource getResource(String name)
      {
        File file = new File(dir, name);
!       if (file.exists() && ! file.isDirectory())
!         return new FileResource(this, name, file);
        return null;
      }
    }
  
!   static final class FileResource extends Resource
    {
      final File file;
  
*************** public class URLClassLoader extends Secu
*** 567,594 ****
      {
        return new FileInputStream(file);
      }
!                         
      public int getLength()
      {
!       return (int)file.length();
      }
  
      public URL getURL()
      {
        try
! 	{
! 	  return new URL(loader.baseURL, name,
! 			 loader.classloader.getURLStreamHandler("file"));
! 	}
!       catch(MalformedURLException e)
! 	{
! 	  InternalError ie = new InternalError();
! 	  ie.initCause(e);
! 	  throw ie;
! 	}
      }
    }
!     
    // Constructors
  
    /**
--- 630,657 ----
      {
        return new FileInputStream(file);
      }
! 
      public int getLength()
      {
!       return (int) file.length();
      }
  
      public URL getURL()
      {
        try
!         {
!           return new URL(loader.baseURL, name,
!                          loader.classloader.getURLStreamHandler("file"));
!         }
!       catch (MalformedURLException e)
!         {
!           InternalError ie = new InternalError();
!           ie.initCause(e);
!           throw ie;
!         }
      }
    }
! 
    // Constructors
  
    /**
*************** public class URLClassLoader extends Secu
*** 642,648 ****
     * load classes and resources (after using the supplied parent ClassLoader).
     * @exception SecurityException if the SecurityManager disallows the
     * creation of a ClassLoader.
!    * @exception SecurityException 
     * @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
--- 705,711 ----
     * load classes and resources (after using the supplied parent ClassLoader).
     * @exception SecurityException if the SecurityManager disallows the
     * creation of a ClassLoader.
!    * @exception SecurityException
     * @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
*************** public class URLClassLoader extends Secu
*** 658,665 ****
      addURLs(urls);
    }
  
    /**
!    * 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
--- 721,729 ----
      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
*************** public class URLClassLoader extends Secu
*** 671,678 ****
     *
     * @param securityContext the security context of the unprivileged code.
     */
!   private URLClassLoader(ClassLoader parent,
! 			 AccessControlContext securityContext)
    {
      super(parent);
      this.factory = null;
--- 735,741 ----
     *
     * @param securityContext the security context of the unprivileged code.
     */
!   URLClassLoader(ClassLoader parent, AccessControlContext securityContext)
    {
      super(parent);
      this.factory = null;
*************** public class URLClassLoader extends Secu
*** 690,696 ****
     * protocol handlers of the supplied URLs.
     * @exception SecurityException if the SecurityManager disallows the
     * creation of a ClassLoader.
!    * @exception SecurityException 
     * @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
--- 753,759 ----
     * protocol handlers of the supplied URLs.
     * @exception SecurityException if the SecurityManager disallows the
     * creation of a ClassLoader.
!    * @exception SecurityException
     * @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
*************** public class URLClassLoader extends Secu
*** 698,706 ****
     * @param factory Used to get the protocol handler for the URLs.
     * @see SecureClassLoader
     */
!   public URLClassLoader(URL[] urls,
! 			ClassLoader parent,
! 			URLStreamHandlerFactory factory)
      throws SecurityException
    {
      super(parent);
--- 761,768 ----
     * @param factory Used to get the protocol handler for the URLs.
     * @see SecureClassLoader
     */
!   public URLClassLoader(URL[] urls, ClassLoader parent,
!                         URLStreamHandlerFactory factory)
      throws SecurityException
    {
      super(parent);
*************** public class URLClassLoader extends Secu
*** 709,720 ****
      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));
        }
    }
  
--- 771,782 ----
      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));
        }
    }
  
*************** public class URLClassLoader extends Secu
*** 726,764 ****
     */
    protected void addURL(URL newUrl)
    {
      addURLImpl(newUrl);
    }
  
    private void addURLImpl(URL newUrl)
    {
!     synchronized(urlloaders)
        {
! 	if (newUrl == null)
! 	  return; // Silently ignore...
!         
! 	// 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 ("gcjlib".equals(protocol))
  	      loader = new SoURLLoader(this, newUrl);
  	    else 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);
! 	  }
  
- 	urls.add(newUrl);
  	urlinfos.add(loader);
        }
    }
  
--- 788,844 ----
     */
    protected void addURL(URL newUrl)
    {
+     urls.add(newUrl);
      addURLImpl(newUrl);
    }
  
    private void addURLImpl(URL newUrl)
    {
!     synchronized (urlloaders)
        {
!         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 ("gcjlib".equals(protocol))
  	      loader = new SoURLLoader(this, newUrl);
  	    else 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);
+ 	      }
+ 	  }
+ 
        }
    }
  
*************** public class URLClassLoader extends Secu
*** 769,780 ****
    private void addURLs(URL[] newUrls)
    {
      for (int i = 0; i < newUrls.length; i++)
!     {
!       addURLImpl(newUrls[i]);
!     }
    }
  
!   /** 
     * Defines a Package based on the given name and the supplied manifest
     * information. The manifest indicates the tile, version and
     * vendor information of the specification and implementation and wheter the
--- 849,858 ----
    private void addURLs(URL[] newUrls)
    {
      for (int i = 0; i < newUrls.length; i++)
!       addURL(newUrls[i]);
    }
  
!   /**
     * Defines a Package based on the given name and the supplied manifest
     * information. The manifest indicates the tile, version and
     * vendor information of the specification and implementation and wheter the
*************** public class URLClassLoader extends Secu
*** 789,810 ****
     * @param url the code source url to seal the package
     * @return the defined Package
     */
!   protected Package definePackage(String name, Manifest manifest, URL url) 
      throws IllegalArgumentException
    {
      Attributes attr = manifest.getMainAttributes();
!     String specTitle =
!       attr.getValue(Attributes.Name.SPECIFICATION_TITLE); 
!     String specVersion =
!       attr.getValue(Attributes.Name.SPECIFICATION_VERSION); 
!     String specVendor =
!       attr.getValue(Attributes.Name.SPECIFICATION_VENDOR); 
!     String implTitle =
!       attr.getValue(Attributes.Name.IMPLEMENTATION_TITLE); 
!     String implVersion =
!       attr.getValue(Attributes.Name.IMPLEMENTATION_VERSION); 
!     String implVendor =
!       attr.getValue(Attributes.Name.IMPLEMENTATION_VENDOR);
  
      // Look if the Manifest indicates that this package is sealed
      // XXX - most likely not completely correct!
--- 867,882 ----
     * @param url the code source url to seal the package
     * @return the defined Package
     */
!   protected Package definePackage(String name, Manifest manifest, URL url)
      throws IllegalArgumentException
    {
      Attributes attr = manifest.getMainAttributes();
!     String specTitle = attr.getValue(Attributes.Name.SPECIFICATION_TITLE);
!     String specVersion = attr.getValue(Attributes.Name.SPECIFICATION_VERSION);
!     String specVendor = attr.getValue(Attributes.Name.SPECIFICATION_VENDOR);
!     String implTitle = attr.getValue(Attributes.Name.IMPLEMENTATION_TITLE);
!     String implVersion = attr.getValue(Attributes.Name.IMPLEMENTATION_VERSION);
!     String implVendor = attr.getValue(Attributes.Name.IMPLEMENTATION_VENDOR);
  
      // Look if the Manifest indicates that this package is sealed
      // XXX - most likely not completely correct!
*************** public class URLClassLoader extends Secu
*** 813,825 ****
      // 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, specVersion, specVendor,
! 			 implTitle, implVersion, implVendor, url);
    }
  
    /**
--- 885,895 ----
      // 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, specVersion, specVendor, implTitle,
!                          implVersion, implVendor, url);
    }
  
    /**
*************** public class URLClassLoader extends Secu
*** 836,842 ****
    {
      // Just try to find the resource by the (almost) same name
      String resourceName = className.replace('.', '/') + ".class";
!     int max = urls.size();
      Resource resource = null;
      for (int i = 0; i < max && resource == null; i++)
        {
--- 906,912 ----
    {
      // Just try to find the resource by the (almost) same name
      String resourceName = className.replace('.', '/') + ".class";
!     int max = urlinfos.size();
      Resource resource = null;
      for (int i = 0; i < max && resource == null; i++)
        {
*************** public class URLClassLoader extends Secu
*** 851,864 ****
  	resource = loader.getResource(resourceName);
        }
      if (resource == null)
!       throw new ClassNotFoundException(className + " not found in " + urls);
  
      // 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();
  	int length = resource.getLength();
  	if (length != -1)
  	  {
--- 921,934 ----
  	resource = loader.getResource(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();
  	int length = resource.getLength();
  	if (length != -1)
  	  {
*************** public class URLClassLoader extends Secu
*** 866,872 ****
  	    // 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)
--- 936,942 ----
  	    // 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)
*************** public class URLClassLoader extends Secu
*** 880,886 ****
  	    // 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)
  	      {
--- 950,956 ----
  	    // 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)
  	      {
*************** public class URLClassLoader extends Secu
*** 889,940 ****
  		  out.write(b, 0, l);
  	      }
  	    data = out.toByteArray();
! 	  }
! 	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();
! 	if (sm != null && securityContext != null)
! 	  {
! 	    return (Class)AccessController.doPrivileged
! 	      (new PrivilegedAction()
! 		{
! 		  public Object run()
! 		  {
! 		    return defineClass(className, classData,
! 				       0, classData.length,
! 				       source);
! 		  }
! 		}, securityContext);
! 	  }
! 	else
! 	  return defineClass(className, classData,
! 			     0, classData.length,
! 			     source);
        }
      catch (IOException ioe)
        {
! 	throw new ClassNotFoundException(className, ioe);
        }
    }
  
--- 959,1049 ----
  		  out.write(b, 0, l);
  	      }
  	    data = out.toByteArray();
!           }
!         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);
! 
!         super.setSigners(result, resource.getCertificates());
!         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 (urlloaders)
!       {
! 	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;
        }
    }
  
*************** public class URLClassLoader extends Secu
*** 947,962 ****
     */
    private Resource findURLResource(String resourceName)
    {
!     int max = urls.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;
    }
--- 1056,1071 ----
     */
    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;
    }
*************** public class URLClassLoader extends Secu
*** 972,978 ****
      Resource resource = findURLResource(resourceName);
      if (resource != null)
        return resource.getURL();
!     
      // Resource not found
      return null;
    }
--- 1081,1087 ----
      Resource resource = findURLResource(resourceName);
      if (resource != null)
        return resource.getURL();
! 
      // Resource not found
      return null;
    }
*************** public class URLClassLoader extends Secu
*** 992,1006 ****
      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;
    }
--- 1101,1115 ----
      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;
    }
*************** public class URLClassLoader extends Secu
*** 1014,1029 ****
     * @return a (possible empty) enumeration of URLs where the resource can be
     * found
     */
!   public Enumeration findResources(String resourceName) throws IOException
    {
      Vector resources = new Vector();
!     int max = urls.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();
    }
--- 1123,1139 ----
     * @return a (possible empty) enumeration of URLs where the resource can be
     * found
     */
!   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();
    }
*************** public class URLClassLoader extends Secu
*** 1052,1092 ****
    {
      // 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
--- 1162,1202 ----
    {
      // 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
*************** public class URLClassLoader extends Secu
*** 1106,1115 ****
     * @param urls the initial URLs used to resolve classes and
     * resources
     *
     * @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);
--- 1216,1227 ----
     * @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);
*************** public class URLClassLoader extends Secu
*** 1124,1134 ****
     * resources
     * @param parent the parent 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();
--- 1236,1247 ----
     * 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();
*************** public class URLClassLoader extends Secu
*** 1136,1159 ****
        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;
        }
    }
  }
--- 1249,1272 ----
        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-3.4.3/libjava/java/net/URLConnection.java gcc-4.0.0/libjava/java/net/URLConnection.java
*** gcc-3.4.3/libjava/java/net/URLConnection.java	Tue Jan  6 08:54:20 2004
--- gcc-4.0.0/libjava/java/net/URLConnection.java	Tue Sep 28 11:02:35 2004
***************
*** 1,5 ****
  /* URLConnection.java -- Abstract superclass for reading from URL's
!    Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.net;
  
- import java.io.InputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  import java.security.AllPermission;
  import java.security.Permission;
--- 38,45 ----
  
  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.util.Map;
*** 53,65 ****
  import java.util.StringTokenizer;
  import gnu.gcj.io.MimeTypes;
  
  /**
   * 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
--- 53,65 ----
  import java.util.StringTokenizer;
  import gnu.gcj.io.MimeTypes;
  
+ 
  /**
   * 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
*************** import gnu.gcj.io.MimeTypes;
*** 88,95 ****
   * 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
  {
--- 88,95 ----
   * 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
  {
*************** public abstract class URLConnection
*** 99,122 ****
     * 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 = false;
!   
    /**
     * 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.
--- 99,125 ----
     * 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;
  
+   private static ContentHandlerFactory defaultFactory
+     = new gnu.java.net.DefaultContentHandlerFactory();
+ 
    /**
     * This variable determines whether or not interaction is allowed with
     * the user.  For example, to prompt for a username and password.
*************** public abstract class URLConnection
*** 127,144 ****
     * Indicates whether or not a connection has been established to the
     * destination specified in the URL
     */
!   protected boolean connected = false;
!   
    /**
     * 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 = false;
!   
    /**
     * 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
--- 130,147 ----
     * 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
*************** public abstract class URLConnection
*** 158,164 ****
     * 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 = 0L;
  
    /**
     * This is the URL associated with this connection
--- 161,167 ----
     * 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
*************** public abstract class URLConnection
*** 166,173 ****
    protected URL url;
  
    private static Hashtable handlers = new Hashtable();
!   private static SimpleDateFormat dateFormat1, dateFormat2, dateFormat3;
!   private static boolean dateformats_initialized = false;
  
    /**
     * Creates a URL connection to a given URL. A real connection is not made.
--- 169,179 ----
    protected URL url;
  
    private static Hashtable handlers = new Hashtable();
!   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.
*************** public abstract class URLConnection
*** 188,193 ****
--- 194,201 ----
    /**
     * Establishes the actual connection to the URL associated with this
     * connection object
+    *
+    * @exception IOException if an error occurs
     */
    public abstract void connect() throws IOException;
  
*************** public abstract class URLConnection
*** 230,236 ****
    /**
     * 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()
--- 238,244 ----
    /**
     * 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()
*************** public abstract class URLConnection
*** 295,301 ****
     * Returns a String representing the value of the header field having
     * the named key.  Returns null if the header field does not exist.
     *
!    * @param The key of the header field
     *
     * @return The value of the header field as a String
     */
--- 303,309 ----
     * 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 abstract class URLConnection
*** 307,313 ****
  
    /**
     * Returns a map of all sent header fields
!    * 
     * @since 1.4
     */
    public Map getHeaderFields()
--- 315,323 ----
  
    /**
     * Returns a map of all sent header fields
!    *
!    * @return all header fields
!    *
     * @since 1.4
     */
    public Map getHeaderFields()
*************** public abstract class URLConnection
*** 330,347 ****
     */
    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;
        }
    }
  
--- 340,357 ----
     */
    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;
        }
    }
  
*************** public abstract class URLConnection
*** 357,381 ****
     * @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 ();
!     
      long result = defaultValue;
!     String str = getHeaderField (name);
!     
      if (str != null)
        {
! 	Date date;
! 	if ((date = dateFormat1.parse (str, new ParsePosition (0))) != null)
! 	  result = date.getTime ();
! 	else if ((date = dateFormat2.parse (str, new ParsePosition (0))) != null)
! 	  result = date.getTime ();
! 	else if ((date = dateFormat3.parse (str, new ParsePosition (0))) != null)
! 	  result = date.getTime ();
        }
!     
      return result;
    }
  
--- 367,396 ----
     * @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;
    }
  
*************** public abstract class URLConnection
*** 385,419 ****
     * 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 InputStream.  Images usually return
!    * a class that implements ImageProducer.  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 ContentHandlerFactory
!    * is set, then that object is called to load a content handler, otherwise
!    * a class called gnu.java.net.content.<content_type> is tried.
!    * The default class will also be used if the content handler factory returns
!    * a null content handler.
     *
!    * @exception IOException If an error occurs
     * @exception UnknownServiceException If the protocol does not support the
!    * content type
     */
    public Object getContent() throws IOException
    {
--- 400,440 ----
     * 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>
!    *
!    * @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
    {
*************** public abstract class URLConnection
*** 425,441 ****
      // guessContentTypeFromName() and guessContentTypeFromStream methods
      // as well as FileNameMap class & fileNameMap field & get/set methods.
      String type = getContentType();
!     ContentHandler ch = setContentHandler(type);
  
!     if (ch == null)
!       return getInputStream();
  
!     return ch.getContent(this);
    }
  
    /**
     * Retrieves the content of this URLConnection
     *
     * @exception IOException If an error occurs
     * @exception UnknownServiceException If the protocol does not support the
     * content type
--- 446,464 ----
      // 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
+    *
     * @exception IOException If an error occurs
     * @exception UnknownServiceException If the protocol does not support the
     * content type
*************** public abstract class URLConnection
*** 443,449 ****
    public Object getContent(Class[] classes) throws IOException
    {
      // FIXME: implement this
!     return getContent ();
    }
  
    /**
--- 466,472 ----
    public Object getContent(Class[] classes) throws IOException
    {
      // FIXME: implement this
!     return getContent();
    }
  
    /**
*************** public abstract class URLConnection
*** 480,487 ****
    public InputStream getInputStream() throws IOException
    {
      // Subclasses for specific protocols override this.
!     throw new UnknownServiceException("Protocol " + url.getProtocol() +
! 			" does not support input.");
    }
  
    /**
--- 503,510 ----
    public InputStream getInputStream() throws IOException
    {
      // Subclasses for specific protocols override this.
!     throw new UnknownServiceException("Protocol " + url.getProtocol()
!                                       + " does not support input.");
    }
  
    /**
*************** public abstract class URLConnection
*** 496,509 ****
    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()
--- 519,532 ----
    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()
*************** public abstract class URLConnection
*** 515,521 ****
     * 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.
!    * 
     * @param input <code>true</code> if input is to be done,
     * <code>false</code> otherwise
     *
--- 538,544 ----
     * 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.
!    *
     * @param input <code>true</code> if input is to be done,
     * <code>false</code> otherwise
     *
*************** public abstract class URLConnection
*** 524,530 ****
    public void setDoInput(boolean input)
    {
      if (connected)
!       throw new IllegalStateException ("Already connected");
  
      doInput = input;
    }
--- 547,553 ----
    public void setDoInput(boolean input)
    {
      if (connected)
!       throw new IllegalStateException("Already connected");
  
      doInput = input;
    }
*************** public abstract class URLConnection
*** 553,559 ****
    public void setDoOutput(boolean output)
    {
      if (connected)
!       throw new IllegalStateException ("Already connected");
  
      doOutput = output;
    }
--- 576,582 ----
    public void setDoOutput(boolean output)
    {
      if (connected)
!       throw new IllegalStateException("Already connected");
  
      doOutput = output;
    }
*************** public abstract class URLConnection
*** 628,634 ****
    public void setUseCaches(boolean usecaches)
    {
      if (connected)
!       throw new IllegalStateException ("Already connected");
  
      useCaches = usecaches;
    }
--- 651,657 ----
    public void setUseCaches(boolean usecaches)
    {
      if (connected)
!       throw new IllegalStateException("Already connected");
  
      useCaches = usecaches;
    }
*************** public abstract class URLConnection
*** 659,665 ****
    public void setIfModifiedSince(long ifmodifiedsince)
    {
      if (connected)
!       throw new IllegalStateException ("Already connected");
  
      ifModifiedSince = ifmodifiedsince;
    }
--- 682,688 ----
    public void setIfModifiedSince(long ifmodifiedsince)
    {
      if (connected)
!       throw new IllegalStateException("Already connected");
  
      ifModifiedSince = ifmodifiedsince;
    }
*************** public abstract class URLConnection
*** 695,703 ****
     *
     * @param use true to use caches if possible by default, false otherwise
     */
!   public void setDefaultUseCaches(boolean defaultusecaches)
    {
!     defaultUseCaches = defaultusecaches;
    }
  
    /**
--- 718,726 ----
     *
     * @param use true to use caches if possible by default, false otherwise
     */
!   public void setDefaultUseCaches(boolean use)
    {
!     defaultUseCaches = use;
    }
  
    /**
*************** public abstract class URLConnection
*** 705,727 ****
     *
     * @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.
    }
--- 728,750 ----
     *
     * @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.
    }
*************** public abstract class URLConnection
*** 735,754 ****
     *
     * @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.
    }
--- 758,777 ----
     *
     * @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.
    }
*************** public abstract class URLConnection
*** 768,774 ****
    public String getRequestProperty(String key)
    {
      if (connected)
!       throw new IllegalStateException ("Already connected");
  
      // Overridden by subclasses that support reading header fields from the
      // request.
--- 791,797 ----
    public String getRequestProperty(String key)
    {
      if (connected)
!       throw new IllegalStateException("Already connected");
  
      // Overridden by subclasses that support reading header fields from the
      // request.
*************** public abstract class URLConnection
*** 787,793 ****
    public Map getRequestProperties()
    {
      if (connected)
!       throw new IllegalStateException ("Already connected");
  
      // Overridden by subclasses that support reading header fields from the
      // request.
--- 810,816 ----
    public Map getRequestProperties()
    {
      if (connected)
!       throw new IllegalStateException("Already connected");
  
      // Overridden by subclasses that support reading header fields from the
      // request.
*************** public abstract class URLConnection
*** 807,813 ****
     *
     * @see URLConnection#setRequestProperty(String key, String value)
     */
!   public static void setDefaultRequestProperty (String key, String value)
    {
      // This method does nothing since JDK 1.3.
    }
--- 830,836 ----
     *
     * @see URLConnection#setRequestProperty(String key, String value)
     */
!   public static void setDefaultRequestProperty(String key, String value)
    {
      // This method does nothing since JDK 1.3.
    }
*************** public abstract class URLConnection
*** 820,826 ****
     * @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.
     *
--- 843,849 ----
     * @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.
     *
*************** public abstract class URLConnection
*** 844,853 ****
     * @exception SecurityException If a security manager exists and its
     * checkSetFactory method doesn't allow the operation
     */
!   public static synchronized void setContentHandlerFactory
!                                     (ContentHandlerFactory fac)
    {
!     if (factory != null)
        throw new Error("ContentHandlerFactory already set");
  
      // Throw an exception if an extant security mgr precludes
--- 867,875 ----
     * @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
*************** public abstract class URLConnection
*** 856,862 ****
      if (s != null)
        s.checkSetFactory();
  
!     factory = fac;
    }
  
    /**
--- 878,884 ----
      if (s != null)
        s.checkSetFactory();
  
!     URLConnection.factory = factory;
    }
  
    /**
*************** public abstract class URLConnection
*** 873,892 ****
     */
    public static String guessContentTypeFromName(String filename)
    {
!     int dot = filename.lastIndexOf (".");
      
      if (dot != -1)
        {
  	if (dot == filename.length())
! 	  return ("application/octet-stream");
  	else
! 	  filename = filename.substring (dot + 1);
        }
      
!     String type = MimeTypes.getMimeTypeFromExtension (filename);
      
      if (type == null)
!       return("application/octet-stream");
  
      return type;
    }
--- 895,914 ----
     */
    public static String guessContentTypeFromName(String filename)
    {
!     int dot = filename.lastIndexOf(".");
      
      if (dot != -1)
        {
  	if (dot == filename.length())
! 	  return "application/octet-stream";
  	else
! 	  filename = filename.substring(dot + 1);
        }
      
!     String type = MimeTypes.getMimeTypeFromExtension(filename);
      
      if (type == null)
!       return"application/octet-stream";
  
      return type;
    }
*************** public abstract class URLConnection
*** 895,901 ****
     * 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
--- 917,923 ----
     * 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
*************** public abstract class URLConnection
*** 937,948 ****
     *
     * @exception SecurityException If a security manager exists and its
     * checkSetFactory method doesn't allow the operation
!    * 
     * @since 1.2
     */
    public static void setFileNameMap(FileNameMap map)
    {
!     // Throw an exception if an extant security mgr precludes
      // setting the factory.
      SecurityManager s = System.getSecurityManager();
      if (s != null)
--- 959,970 ----
     *
     * @exception SecurityException If a security manager exists and its
     * checkSetFactory method doesn't allow the operation
!    *
     * @since 1.2
     */
    public static void setFileNameMap(FileNameMap map)
    {
!     // Throw an exception if an extant security manager precludes
      // setting the factory.
      SecurityManager s = System.getSecurityManager();
      if (s != null)
*************** public abstract class URLConnection
*** 951,964 ****
      fileNameMap = map;
    }
  
!   private ContentHandler setContentHandler(String contentType)
    {
-     ContentHandler handler;
- 
      // No content type so just handle it as the default.
!     if (contentType == null || contentType == "")
        return null;
  
      // See if a handler has been cached for this content type.
      // For efficiency, if a content type has been searched for but not
      // found, it will be in the hash table but as the contentType String
--- 973,986 ----
      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;
+ 
      // See if a handler has been cached for this content type.
      // For efficiency, if a content type has been searched for but not
      // found, it will be in the hash table but as the contentType String
*************** public abstract class URLConnection
*** 969,980 ****
        else
  	return null;
  
!     // If a non-default factory has been set, use it to find the content type.
      if (factory != null)
        handler = factory.createContentHandler(contentType);
  
!     // Non-default factory may have returned null or a factory wasn't set.
!     // Use the default search algorithm to find a handler for this content type.
      if (handler == null)
        {
  	// Get the list of packages to check and append our default handler
--- 991,1007 ----
        else
  	return null;
  
!     // If a non-default factory has been set, use it.
      if (factory != null)
        handler = factory.createContentHandler(contentType);
  
!     // Now try default factory. Using this factory to instantiate built-in
!     // content handlers is preferable  
!     if (handler == null)
!       handler = defaultFactory.createContentHandler(contentType);
! 
!     // User-set factory has not returned a handler. Use the default search 
!     // algorithm.
      if (handler == null)
        {
  	// Get the list of packages to check and append our default handler
*************** public abstract class URLConnection
*** 983,993 ****
  	// ever be needed (or available).
  	String propVal = System.getProperty("java.content.handler.pkgs");
  	propVal = (propVal == null) ? "" : (propVal + "|");
! 	propVal = propVal + "gnu.gcj.content|sun.net.www.content";
  
  	// Replace the '/' character in the content type with '.' and
  	// all other non-alphabetic, non-numeric characters with '_'.
- 	StringTokenizer pkgPrefix = new StringTokenizer(propVal, "|");
  	char[] cArray = contentType.toCharArray();
  	for (int i = 0; i < cArray.length; i++)
  	  {
--- 1010,1019 ----
  	// ever be needed (or available).
  	String propVal = System.getProperty("java.content.handler.pkgs");
  	propVal = (propVal == null) ? "" : (propVal + "|");
! 	propVal = propVal + "gnu.java.net.content|sun.net.www.content";
  
  	// Replace the '/' character in the content type with '.' and
  	// all other non-alphabetic, non-numeric characters with '_'.
  	char[] cArray = contentType.toCharArray();
  	for (int i = 0; i < cArray.length; i++)
  	  {
*************** public abstract class URLConnection
*** 1001,1006 ****
--- 1027,1033 ----
  	String contentClass = new String(cArray);
  
  	// See if a class of this content type exists in any of the packages.
+ 	StringTokenizer pkgPrefix = new StringTokenizer(propVal, "|");
  	do
  	  {
  	    String facName = pkgPrefix.nextToken() + "." + contentClass;
*************** public abstract class URLConnection
*** 1019,1025 ****
        }
  
      // Update the hashtable with the new content handler.
!     if (handler != null && handler instanceof ContentHandler)
        {
  	handlers.put(contentType, handler);
  	return handler;
--- 1046,1052 ----
        }
  
      // Update the hashtable with the new content handler.
!     if (handler instanceof ContentHandler)
        {
  	handlers.put(contentType, handler);
  	return handler;
*************** public abstract class URLConnection
*** 1034,1051 ****
    // 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 synchronized void initializeDateFormats()
    {
      if (dateformats_initialized)
        return;
  
      Locale locale = new Locale("En", "Us", "Unix");
!     dateFormat1 = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'", 
!                                        locale);
!     dateFormat2 = new SimpleDateFormat("EEEE, dd-MMM-yy hh:mm:ss 'GMT'", 
!                                        locale);
!     dateFormat3 = new SimpleDateFormat("EEE MMM d hh:mm:ss yyyy", locale);
      dateformats_initialized = true;
    }
! } // class URLConnection
! 
--- 1061,1078 ----
    // 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-3.4.3/libjava/java/net/URLDecoder.java gcc-4.0.0/libjava/java/net/URLDecoder.java
*** gcc-3.4.3/libjava/java/net/URLDecoder.java	Sun Mar  2 20:11:13 2003
--- gcc-4.0.0/libjava/java/net/URLDecoder.java	Sun Oct 17 08:29:57 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** package java.net;
*** 39,46 ****
  
  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
--- 39,47 ----
  
  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
*************** import java.io.UnsupportedEncodingExcept
*** 56,62 ****
   *
   * @since 1.2
   *
!  * @author Warren Levy <warrenl@cygnus.com>
   * @author Aaron M. Renn (arenn@urbanophile.com) (documentation comments)
   * @author Mark Wielaard (mark@klomp.org)
   */
--- 57,63 ----
   *
   * @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
*** 65,71 ****
    /**
     * Public contructor. Note that this class has only static methods.
     */
!   public URLDecoder ()
    {
    }
  
--- 66,72 ----
    /**
     * Public contructor. Note that this class has only static methods.
     */
!   public URLDecoder()
    {
    }
  
*************** public class URLDecoder
*** 84,95 ****
    {
      try
        {
!         return decode(s, "UTF-8");
        }
      catch (UnsupportedEncodingException uee)
        {
!         // Should never happen since UTF-8 encoding should always be supported
!         return s;
        }
    }
  
--- 85,96 ----
    {
      try
        {
! 	return decode(s, "UTF-8");
        }
      catch (UnsupportedEncodingException uee)
        {
! 	// Should never happen since UTF-8 encoding should always be supported
! 	return s;
        }
    }
  
*************** public class URLDecoder
*** 120,126 ****
    {
      // 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;
--- 121,127 ----
    {
      // 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;
*************** public class URLDecoder
*** 134,145 ****
  	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
--- 135,146 ----
  	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
*************** public class URLDecoder
*** 147,153 ****
  	    while (start < i)
  	      {
  		String sub = str.substring(start + 1, start + 3);
! 		bytes[index] = (byte)Integer.parseInt(sub, 16);
  		index++;
  		start += 3;
  	      }
--- 148,154 ----
  	    while (start < i)
  	      {
  		String sub = str.substring(start + 1, start + 3);
! 		bytes[index] = (byte) Integer.parseInt(sub, 16);
  		index++;
  		start += 3;
  	      }
*************** public class URLDecoder
*** 176,180 ****
  
      return result.toString();
    }
- 
  } // class URLDecoder
--- 177,180 ----
diff -Nrcpad gcc-3.4.3/libjava/java/net/URLEncoder.java gcc-4.0.0/libjava/java/net/URLEncoder.java
*** gcc-3.4.3/libjava/java/net/URLEncoder.java	Tue Jul 22 18:03:47 2003
--- gcc-4.0.0/libjava/java/net/URLEncoder.java	Sun Oct 17 08:29:57 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** package java.net;
*** 39,67 ****
  
  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
  {
    /**
--- 39,68 ----
  
  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
  {
    /**
*************** public class URLEncoder
*** 82,92 ****
        {
  	// 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;
        }
    }
--- 83,93 ----
        {
  	// 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;
        }
    }
*************** public class URLEncoder
*** 114,155 ****
  
      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;
!     }
    }
  
    /**
--- 115,156 ----
  
      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;
!       }
    }
  
    /**
*************** public class URLEncoder
*** 160,176 ****
     */
    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
--- 161,178 ----
     */
    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
*************** public class URLEncoder
*** 179,182 ****
     * leading 0.
     */
    private static final String hex = "0123456789ABCDEF";
! } // class URLEncoder
--- 181,184 ----
     * leading 0.
     */
    private static final String hex = "0123456789ABCDEF";
! }
diff -Nrcpad gcc-3.4.3/libjava/java/net/URLStreamHandler.java gcc-4.0.0/libjava/java/net/URLStreamHandler.java
*** gcc-3.4.3/libjava/java/net/URLStreamHandler.java	Wed Nov 26 21:25:41 2003
--- gcc-4.0.0/libjava/java/net/URLStreamHandler.java	Thu Nov 18 20:24:33 2004
***************
*** 1,5 ****
  /* URLStreamHandler.java -- Abstract superclass for all protocol handlers
!    Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** this exception to your version of the li
*** 35,45 ****
  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.File;
  
  /*
   * Written using on-line Java Platform 1.2 API Specification, as well
--- 35,45 ----
  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
*************** import java.io.File;
*** 57,63 ****
   * 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
--- 57,63 ----
   * 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
*************** import java.io.File;
*** 71,77 ****
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
   * @author Warren Levy (warrenl@cygnus.com)
!  * 
   * @see URL
   */
  public abstract class URLStreamHandler
--- 71,77 ----
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
   * @author Warren Levy (warrenl@cygnus.com)
!  *
   * @see URL
   */
  public abstract class URLStreamHandler
*************** public abstract class URLStreamHandler
*** 79,85 ****
    /**
     * Creates a URLStreamHander
     */
!   public URLStreamHandler ()
    {
    }
  
--- 79,85 ----
    /**
     * Creates a URLStreamHander
     */
!   public URLStreamHandler()
    {
    }
  
*************** public abstract class URLStreamHandler
*** 96,102 ****
     *
     * @exception IOException If an error occurs
     */
!   protected abstract URLConnection openConnection(URL u)
      throws IOException;
  
    /**
--- 96,102 ----
     *
     * @exception IOException If an error occurs
     */
!   protected abstract URLConnection openConnection(URL url)
      throws IOException;
  
    /**
*************** public abstract class URLStreamHandler
*** 109,116 ****
     * 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
--- 109,116 ----
     * 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
*************** public abstract class URLStreamHandler
*** 126,153 ****
      int port = url.getPort();
      String file = url.getFile();
      String ref = url.getRef();
      
!     if (spec.regionMatches (start, "//", 0, 2))
        {
  	String genuineHost;
  	int hostEnd;
! 	int colon, at_host;
  
  	start += 2;
! 	int slash = spec.indexOf ('/', start);
! 	if (slash >= 0) 
  	  hostEnd = slash;
!         else
  	  hostEnd = end;
  
! 	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);
  	else
  	  genuineHost = host;
  
--- 126,168 ----
      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;
  
*************** public abstract class URLStreamHandler
*** 157,226 ****
  	// 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.
!         char sepChar = '/';
!         int lastSlash = file.lastIndexOf (sepChar);
!         if (lastSlash < 0 && File.separatorChar != sepChar
!             && url.getProtocol ().equals ("file"))
!           {
!             // On Windows, even '\' is allowed in a "file" URL.
!             sepChar = File.separatorChar;
!             lastSlash = file.lastIndexOf (sepChar);
!           }
!         
!         file = file.substring(0, lastSlash)
!                 + sepChar + spec.substring (start, end);
  
!         if (url.getProtocol ().equals ("file"))
!           {
!             // For "file" URLs constructed relative to a context, we
!             // need to canonicalise the file path.
!             try
!               {
! 		boolean endsWithSlash = file.charAt(file.length() - 1) == '/';
!                 file = new File (file).getCanonicalPath ();
! 		if (endsWithSlash
! 		    && file.charAt(file.length() - 1) != '/')
! 		  file += '/';
!               }
!             catch (IOException e)
!               {
! 		// Do nothing.
!               }
!           }
  
  	ref = null;
        }
--- 172,222 ----
  	// 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;
        }
*************** public abstract class URLStreamHandler
*** 237,249 ****
  	  }
        }
  
      // 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, file, ref);
    }
!   
    /*
     * Canonicalize a filename.
     */
--- 233,255 ----
  	  }
        }
  
+     // 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.
     */
*************** public abstract class URLStreamHandler
*** 251,257 ****
    {
      // 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
--- 257,262 ----
*************** public abstract class URLStreamHandler
*** 270,276 ****
  	else
  	  break;
        }
!     return file; 
    }
  
    /**
--- 275,281 ----
  	else
  	  break;
        }
!     return file;
    }
  
    /**
*************** public abstract class URLStreamHandler
*** 278,284 ****
     *
     * @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
--- 283,289 ----
     *
     * @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
*************** public abstract class URLStreamHandler
*** 287,305 ****
    {
      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, s2;
      s1 = url1.getProtocol();
      s2 = url2.getProtocol();
      if (s1 != s2 && (s1 == null || ! s1.equals(s2)))
--- 292,312 ----
    {
      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)))
*************** public abstract class URLStreamHandler
*** 333,339 ****
     * #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);
    }
--- 340,346 ----
     * #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);
    }
*************** public abstract class URLStreamHandler
*** 355,362 ****
     * 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);
    }
--- 362,369 ----
     * 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);
    }
*************** public abstract class URLStreamHandler
*** 372,403 ****
     *
     * @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 ()))));
    }
  
    /**
--- 379,407 ----
     *
     * @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()))));
    }
  
    /**
*************** public abstract class URLStreamHandler
*** 410,428 ****
     *
     * @exception UnknownHostException If an unknown host is found
     */
!   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;
    }
--- 414,432 ----
     *
     * @exception UnknownHostException If an unknown host is found
     */
!   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;
    }
*************** public abstract class URLStreamHandler
*** 435,450 ****
     *
     * @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)
        {
--- 439,454 ----
     *
     * @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)
        {
*************** public abstract class URLStreamHandler
*** 458,464 ****
     *
     * @return The default port number.
     */
!   protected int getDefaultPort ()
    {
      return -1;
    }
--- 462,468 ----
     *
     * @return The default port number.
     */
!   protected int getDefaultPort()
    {
      return -1;
    }
*************** public abstract class URLStreamHandler
*** 468,482 ****
     * 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 ();
    }
  
    /**
--- 472,485 ----
     * 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();
    }
  
    /**
*************** public abstract class URLStreamHandler
*** 488,514 ****
     *
     * @return A string representation of the url
     */
!   protected String toExternalForm(URL u)
    {
!     String protocol, host, file, ref, user;
!     int port;
! 
!     protocol = u.getProtocol();
! 
!     // JDK 1.2 online doc infers that host could be null because it
!     // explicitly states that file cannot be null, but is silent on host.
!     host = u.getHost();
!     if (host == null)
!       host = "";
  
!     port = u.getPort();
!     file = u.getFile();
!     ref = u.getRef();
!     user = u.getUserInfo();
  
      // Guess a reasonable size for the string buffer so we have to resize
      // at most once.
!     int size = protocol.length() + host.length() + file.length() + 24;
      StringBuffer sb = new StringBuffer(size);
  
      if (protocol != null && protocol.length() > 0)
--- 491,514 ----
     *
     * @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 != null && protocol.length() > 0)
*************** public abstract class URLStreamHandler
*** 516,532 ****
  	sb.append(protocol);
  	sb.append(":");
        }
! 
!     if (host.length() != 0)
        {
! 	sb.append("//");
! 	if (user != null && !"".equals(user))
! 	  sb.append(user).append('@');
! 	sb.append(host);
! 
!         // Append port if port was in URL spec.
!         if (port >= 0)
!           sb.append(':').append(port);
        }
  
      sb.append(file);
--- 516,525 ----
  	sb.append(protocol);
  	sb.append(":");
        }
!     
!     if (authority.length() != 0)
        {
! 	sb.append("//").append(authority);
        }
  
      sb.append(file);
diff -Nrcpad gcc-3.4.3/libjava/java/net/URLStreamHandlerFactory.java gcc-4.0.0/libjava/java/net/URLStreamHandlerFactory.java
*** gcc-3.4.3/libjava/java/net/URLStreamHandlerFactory.java	Mon Oct 13 05:03:39 2003
--- gcc-4.0.0/libjava/java/net/URLStreamHandlerFactory.java	Sun Oct 17 08:29:57 2004
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 37,67 ****
  
  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
- 
--- 37,65 ----
  
  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-3.4.3/libjava/java/net/UnknownHostException.java gcc-4.0.0/libjava/java/net/UnknownHostException.java
*** gcc-3.4.3/libjava/java/net/UnknownHostException.java	Sat Jun 15 19:45:34 2002
--- gcc-4.0.0/libjava/java/net/UnknownHostException.java	Sun Oct 17 08:29:57 2004
*************** package java.net;
*** 39,51 ****
  
  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
   */
--- 39,52 ----
  
  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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/net/UnknownServiceException.java gcc-4.0.0/libjava/java/net/UnknownServiceException.java
*** gcc-3.4.3/libjava/java/net/UnknownServiceException.java	Sat Jun 15 19:45:34 2002
--- gcc-4.0.0/libjava/java/net/UnknownServiceException.java	Sun Oct 17 08:29:57 2004
*************** package java.net;
*** 39,52 ****
  
  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
--- 39,53 ----
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/net/natInetAddressPosix.cc gcc-4.0.0/libjava/java/net/natInetAddressPosix.cc
*** gcc-3.4.3/libjava/java/net/natInetAddressPosix.cc	Sun Nov 30 21:02:56 2003
--- gcc-4.0.0/libjava/java/net/natInetAddressPosix.cc	Sat Aug 14 05:04:52 2004
*************** java::net::InetAddress::lookup (jstring 
*** 167,173 ****
  #else
        // FIXME: this is insufficient if some other piece of code calls
        // this gethostbyname.
!       JvSynchronize sync (java::net::InetAddress::localhostAddress);
        hptr = gethostbyname (hostname);
  #endif /* HAVE_GETHOSTBYNAME_R */
      }
--- 167,173 ----
  #else
        // FIXME: this is insufficient if some other piece of code calls
        // this gethostbyname.
!       JvSynchronize sync (java::net::InetAddress::loopbackAddress);
        hptr = gethostbyname (hostname);
  #endif /* HAVE_GETHOSTBYNAME_R */
      }
*************** java::net::InetAddress::lookup (jstring 
*** 221,227 ****
  #else /* HAVE_GETHOSTBYADDR_R */
        // FIXME: this is insufficient if some other piece of code calls
        // this gethostbyaddr.
!       JvSynchronize sync (java::net::InetAddress::localhostAddress);
        hptr = gethostbyaddr (val, len, type);
  #endif /* HAVE_GETHOSTBYADDR_R */
      }
--- 221,227 ----
  #else /* HAVE_GETHOSTBYADDR_R */
        // FIXME: this is insufficient if some other piece of code calls
        // this gethostbyaddr.
!       JvSynchronize sync (java::net::InetAddress::loopbackAddress);
        hptr = gethostbyaddr (val, len, type);
  #endif /* HAVE_GETHOSTBYADDR_R */
      }
*************** java::net::InetAddress::lookup (jstring 
*** 229,241 ****
      {
        if (!all)
          host = JvNewStringUTF (hptr->h_name);
-       java::lang::SecurityException *ex = checkConnect (host);
-       if (ex != NULL)
- 	{
- 	  if (iaddr == NULL || iaddr->addr == NULL)
- 	    throw ex;
- 	  hptr = NULL;
- 	}
      }
    if (hptr == NULL)
      {
--- 229,234 ----
diff -Nrcpad gcc-3.4.3/libjava/java/net/natInetAddressWin32.cc gcc-4.0.0/libjava/java/net/natInetAddressWin32.cc
*** gcc-3.4.3/libjava/java/net/natInetAddressWin32.cc	Sun Nov 30 21:02:56 2003
--- gcc-4.0.0/libjava/java/net/natInetAddressWin32.cc	Sat Aug 14 05:04:52 2004
*************** java::net::InetAddress::lookup (jstring 
*** 60,66 ****
  
        // FIXME: this is insufficient if some other piece of code calls
        // this gethostbyname.
!       JvSynchronize sync (java::net::InetAddress::localhostAddress);
        hptr = gethostbyname (hostname);
      }
    else
--- 60,66 ----
  
        // FIXME: this is insufficient if some other piece of code calls
        // this gethostbyname.
!       JvSynchronize sync (java::net::InetAddress::loopbackAddress);
        hptr = gethostbyname (hostname);
      }
    else
*************** java::net::InetAddress::lookup (jstring 
*** 87,93 ****
  
        // FIXME: this is insufficient if some other piece of code calls
        // this gethostbyaddr.
!       JvSynchronize sync (java::net::InetAddress::localhostAddress);
        hptr = gethostbyaddr (val, len, type);
      }
    if (hptr != NULL)
--- 87,93 ----
  
        // FIXME: this is insufficient if some other piece of code calls
        // this gethostbyaddr.
!       JvSynchronize sync (java::net::InetAddress::loopbackAddress);
        hptr = gethostbyaddr (val, len, type);
      }
    if (hptr != NULL)
diff -Nrcpad gcc-3.4.3/libjava/java/net/natNetworkInterfaceWin32.cc gcc-4.0.0/libjava/java/net/natNetworkInterfaceWin32.cc
*** gcc-3.4.3/libjava/java/net/natNetworkInterfaceWin32.cc	Tue Dec  2 22:26:50 2003
--- gcc-4.0.0/libjava/java/net/natNetworkInterfaceWin32.cc	Sun Sep  5 03:36:19 2004
*************** determineGetRealNetworkInterfacesFN ()
*** 116,122 ****
  ::java::util::Vector*
  java::net::NetworkInterface::getRealNetworkInterfaces ()
  {
!   static PfnGetRealNetworkInterfaces pfn =
      determineGetRealNetworkInterfacesFN ();
      
    jstring arIFName[MAX_INTERFACES];
--- 116,131 ----
  ::java::util::Vector*
  java::net::NetworkInterface::getRealNetworkInterfaces ()
  {
!   // This next declaration used to be a static local,
!   // but this introduced a dependency on libsupc++ due
!   // to _cxa_guard_acquire and _cxa_guard_release.
!   // When Win95 is gone and we eventually get rid of
!   // winsock2GetRealNetworkInterfaces, we can rework
!   // all of this. Alternatively, we could move this all
!   // to win32.cc and initialize this at startup time,
!   // but that seems more trouble than it's worth at
!   // the moment.
!   PfnGetRealNetworkInterfaces pfn =
      determineGetRealNetworkInterfacesFN ();
      
    jstring arIFName[MAX_INTERFACES];
diff -Nrcpad gcc-3.4.3/libjava/java/nio/Buffer.java gcc-4.0.0/libjava/java/nio/Buffer.java
*** gcc-3.4.3/libjava/java/nio/Buffer.java	Mon Oct 13 04:45:03 2003
--- gcc-4.0.0/libjava/java/nio/Buffer.java	Fri Jan  7 11:32:05 2005
***************
*** 1,5 ****
  /* Buffer.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Buffer.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,54 ****
  
  package java.nio;
  
  public abstract class Buffer
  {
    int cap = 0;
    int limit = 0;
    int pos = 0;
    int mark = -1;
  
!   // Creates a new Buffer.
!   //
!   // Should be package private.
!   //
    Buffer (int capacity, int limit, int position, int mark)
    {
      if (capacity < 0)
--- 38,61 ----
  
  package java.nio;
  
+ import gnu.gcj.RawData;
+ 
+ /**
+  * @since 1.4
+  */
  public abstract class Buffer
  {
    int cap = 0;
    int limit = 0;
    int pos = 0;
    int mark = -1;
+   RawData address;
  
!   /**
!    * Creates a new Buffer.
!    *
!    * Should be package private.
!    */
    Buffer (int capacity, int limit, int position, int mark)
    {
      if (capacity < 0)
*************** public abstract class Buffer
*** 69,74 ****
--- 76,83 ----
    
    /**
     * Retrieves the capacity of the buffer.
+    *
+    * @return the capacity of the buffer
     */
    public final int capacity ()
    {
*************** public abstract class Buffer
*** 77,82 ****
--- 86,93 ----
  
    /**
     * Clears the buffer.
+    *
+    * @return this buffer
     */
    public final Buffer clear ()
    {
*************** public abstract class Buffer
*** 88,93 ****
--- 99,106 ----
      
    /**
     * Flips the buffer.
+    *
+    * @return this buffer
     */
    public final Buffer flip ()
    {
*************** public abstract class Buffer
*** 99,104 ****
--- 112,120 ----
      
    /**
     * 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 ()
    {
*************** public abstract class Buffer
*** 107,117 ****
--- 123,137 ----
  
    /**
     * 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 ()
    {
*************** public abstract class Buffer
*** 124,129 ****
--- 144,151 ----
     * @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 abstract class Buffer
*** 132,142 ****
      if ((newLimit < 0) || (newLimit > cap))
        throw new IllegalArgumentException ();
  
!     if (newLimit <= mark)
          mark = -1;
  
      if (pos > newLimit)
!         pos = newLimit - 1;
  
      limit = newLimit;
      return this;
--- 154,164 ----
      if ((newLimit < 0) || (newLimit > cap))
        throw new IllegalArgumentException ();
  
!     if (newLimit < mark)
          mark = -1;
  
      if (pos > newLimit)
!         pos = newLimit;
  
      limit = newLimit;
      return this;
*************** public abstract class Buffer
*** 144,149 ****
--- 166,173 ----
  
    /**
     * Sets this buffer's mark at its position.
+    *
+    * @return this buffer
     */
    public final Buffer mark ()
    {
*************** public abstract class Buffer
*** 153,158 ****
--- 177,184 ----
  
    /**
     * Retrieves the current position of this buffer.
+    *
+    * @return the current position of this buffer
     */
    public final int position ()
    {
*************** public abstract class Buffer
*** 165,171 ****
     * 
     * @param newPosition The new position value; must be non-negative and no
     * larger than the current limit.
!    * 
     * @exception IllegalArgumentException If the preconditions on newPosition
     * do not hold
     */
--- 191,199 ----
     * 
     * @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 abstract class Buffer
*** 183,188 ****
--- 211,218 ----
  
    /**
     * Returns the number of elements between the current position and the limit.
+    *
+    * @return the number of remaining elements
     */
    public final int remaining()
    {
*************** public abstract class Buffer
*** 191,197 ****
  
    /**
     * Resets this buffer's position to the previously-marked position.
!    * 
     * @exception InvalidMarkException If the mark has not been set.
     */
    public final Buffer reset()
--- 221,229 ----
  
    /**
     * 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()
*************** public abstract class Buffer
*** 206,211 ****
--- 238,245 ----
    /**
     * Rewinds this buffer. The position is set to zero and the mark
     * is discarded.
+    *
+    * @return this buffer
     */
    public final Buffer rewind()
    {
*************** public abstract class Buffer
*** 213,216 ****
--- 247,361 ----
      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-3.4.3/libjava/java/nio/ByteBuffer.java gcc-4.0.0/libjava/java/nio/ByteBuffer.java
*** gcc-3.4.3/libjava/java/nio/ByteBuffer.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/ByteBuffer.java	Fri Oct 22 17:14:16 2004
*************** package java.nio;
*** 44,50 ****
  public abstract class ByteBuffer extends Buffer
    implements Comparable
  {
!   private ByteOrder endian = ByteOrder.BIG_ENDIAN;
  
    int array_offset;
    byte[] backing_buffer;
--- 44,50 ----
  public abstract class ByteBuffer extends Buffer
    implements Comparable
  {
!   ByteOrder endian = ByteOrder.BIG_ENDIAN;
  
    int array_offset;
    byte[] backing_buffer;
*************** public abstract class ByteBuffer extends
*** 52,67 ****
    ByteBuffer (int capacity, int limit, int position, int mark)
    {
      super (capacity, limit, position, mark);
-     array_offset = 0;
    }
  
-   ByteBuffer (byte[] buffer, int offset, int capacity, int limit, int position, int mark)
-   {
-     super (capacity, limit, position, mark);
-     this.backing_buffer = buffer;
-     this.array_offset = offset;
-   }
-   
    /**
     * Allocates a new direct byte buffer.
     */ 
--- 52,59 ----
*************** public abstract class ByteBuffer extends
*** 75,81 ****
     */
    public static ByteBuffer allocate (int capacity)
    {
!     return new ByteBufferImpl (capacity);
    }
  
    /**
--- 67,73 ----
     */
    public static ByteBuffer allocate (int capacity)
    {
!     return wrap(new byte[capacity], 0, capacity);
    }
  
    /**
*************** public abstract class ByteBuffer extends
*** 85,92 ****
     * @exception IndexOutOfBoundsException If the preconditions on the offset
     * and length parameters do not hold
     */
!   final public static ByteBuffer wrap (byte[] array, int offset, int length)
    {
      return new ByteBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
    }
  
--- 77,92 ----
     * @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);
    }
  
*************** public abstract class ByteBuffer extends
*** 94,107 ****
     * Wraps a <code>byte</code> array into a <code>ByteBuffer</code>
     * object.
     */
!   final public static ByteBuffer wrap (byte[] array)
    {
      return wrap (array, 0, array.length);
    }
    
    /**
!    * This method transfers <code>bytes<code> from this buffer into the given
!    * destination array.
     *
     * @param dst The destination array
     * @param offset The offset within the array of the first <code>byte</code>
--- 94,108 ----
     * 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>
*************** public abstract class ByteBuffer extends
*** 110,126 ****
     * must be non-negative and no larger than dst.length - offset.
     *
     * @exception BufferUnderflowException If there are fewer than length
!    * <code>bytes</code> 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)
    {
!     if ((offset < 0)
!         || (offset > dst.length)
!         || (length < 0)
!         || (length > (dst.length - offset)))
!       throw new IndexOutOfBoundsException ();
  
      for (int i = offset; i < offset + length; i++)
        {
--- 111,124 ----
     * 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++)
        {
*************** public abstract class ByteBuffer extends
*** 131,143 ****
    }
  
    /**
!    * This method transfers <code>bytes<code> 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>bytes</code> remaining in this buffer.
     */
    public ByteBuffer get (byte[] dst)
    {
--- 129,141 ----
    }
  
    /**
!    * 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)
    {
*************** public abstract class ByteBuffer extends
*** 146,157 ****
  
    /**
     * Writes the content of the the <code>ByteBUFFER</code> src
!    * into the buffer.
     *
     * @param src The source data.
     *
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>bytes<code> in the source buffer.
     * @exception IllegalArgumentException If the source buffer is this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
--- 144,156 ----
  
    /**
     * 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 abstract class ByteBuffer extends
*** 160,173 ****
      if (src == this)
        throw new IllegalArgumentException ();
  
!     if (src.remaining () > remaining ())
!       throw new BufferOverflowException ();
  
      if (src.remaining () > 0)
        {
          byte[] toPut = new byte [src.remaining ()];
          src.get (toPut);
!         src.put (toPut);
        }
  
      return this;
--- 159,171 ----
      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;
*************** public abstract class ByteBuffer extends
*** 175,181 ****
  
    /**
     * Writes the content of the the <code>byte array</code> src
!    * into the buffer.
     *
     * @param src The array to copy into the buffer.
     * @param offset The offset within the array of the first byte to be read;
--- 173,180 ----
  
    /**
     * 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;
*************** public abstract class ByteBuffer extends
*** 184,201 ****
     * 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>bytes<code> 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)
    {
!     if ((offset < 0) ||
!         (offset > src.length) ||
!         (length < 0) ||
!         (length > src.length - offset))
!       throw new IndexOutOfBoundsException ();
  
      for (int i = offset; i < offset + length; i++)
        put (src [i]);
--- 183,197 ----
     * 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]);
*************** public abstract class ByteBuffer extends
*** 210,216 ****
     * @param src The array to copy into the buffer.
     * 
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>bytes<code> in the source array.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public final ByteBuffer put (byte[] src)
--- 206,212 ----
     * @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)
*************** public abstract class ByteBuffer extends
*** 240,247 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return backing_buffer;
    }
--- 236,242 ----
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     checkIfReadOnly();
      
      return backing_buffer;
    }
*************** public abstract class ByteBuffer extends
*** 258,276 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return array_offset;
    }
  
    /**
     * Calculates a hash code for this buffer.
     */
    public int hashCode ()
    {
!     // FIXME: Check what SUN calculates here.
!     return super.hashCode ();
    }
  
    /**
--- 253,286 ----
      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;
    }
  
    /**
*************** public abstract class ByteBuffer extends
*** 294,325 ****
     */
    public int compareTo (Object obj)
    {
!     ByteBuffer a = (ByteBuffer) obj;
! 
!     if (a.remaining () != remaining ())
!       return 1;
! 
!     if (! hasArray () ||
!         ! a.hasArray ())
!       {
!         return 1;
!       }
! 
!     int r = remaining ();
!     int i1 = position ();
!     int i2 = a.position ();
  
!     for (int i = 0; i < r; i++)
        {
!         int t = (int) (get (i1) - a.get (i2));
! 
!         if (t != 0)
!           {
!             return (int) t;
!           }
        }
! 
!     return 0;
    }
  
    /**
--- 304,330 ----
     */
    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();
    }
  
    /**
*************** public abstract class ByteBuffer extends
*** 344,350 ****
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>bytes</code> in this buffer.
     */
    public abstract byte get ();
  
--- 349,355 ----
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>byte</code>s in this buffer.
     */
    public abstract byte get ();
  
*************** public abstract class ByteBuffer extends
*** 353,359 ****
     * and then increments the position.
     *
     * @exception BufferOverflowException If there no remaining 
!    * <code>bytes</code> in this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public abstract ByteBuffer put (byte b);
--- 358,364 ----
     * 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);
diff -Nrcpad gcc-3.4.3/libjava/java/nio/ByteBufferHelper.java gcc-4.0.0/libjava/java/nio/ByteBufferHelper.java
*** gcc-3.4.3/libjava/java/nio/ByteBufferHelper.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/ByteBufferHelper.java	Thu Feb 17 07:48:36 2005
***************
*** 1,5 ****
  /* ByteBufferImpl.java -- 
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ByteBufferImpl.java -- 
!    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,73 ****
  package java.nio;
  
  /**
!  * @author Michael Koch <konqueror@gmx.de>
   */
  final class ByteBufferHelper
  {
-   private static void checkRemainingForRead (ByteBuffer buffer, int bytes)
-   {
-     if (buffer.remaining() < bytes)
-       throw new BufferUnderflowException();
-   }
-   
-   private static void checkRemainingForWrite (ByteBuffer buffer, int bytes)
-   {
-     if (buffer.remaining() < bytes)
-       throw new BufferOverflowException();
-   }
- 
-   private static void checkAvailableForRead (ByteBuffer buffer,
- 					     int index, int bytes)
-   {
-     if (buffer.limit() < (index + bytes))
-       throw new BufferUnderflowException();
-   }
-   
-   private static void checkAvailableForWrite (ByteBuffer buffer,
- 					      int index, int bytes)
-   {
-     if (buffer.limit() < (index + bytes))
-       throw new BufferOverflowException();
-   }
-   
    public static char getChar (ByteBuffer buffer, ByteOrder order)
    {
      return (char) getShort (buffer, order);
--- 38,47 ----
  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);
*************** final class ByteBufferHelper
*** 91,97 ****
  
    public static short getShort (ByteBuffer buffer, ByteOrder order)
    {
!     checkRemainingForRead (buffer, 2);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
--- 65,71 ----
  
    public static short getShort (ByteBuffer buffer, ByteOrder order)
    {
!     buffer.checkForUnderflow(2);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
*************** final class ByteBufferHelper
*** 105,111 ****
    
    public static void putShort (ByteBuffer buffer, short value, ByteOrder order)
    {
!     checkRemainingForWrite (buffer, 2);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
--- 79,85 ----
    
    public static void putShort (ByteBuffer buffer, short value, ByteOrder order)
    {
!     buffer.checkForOverflow(2);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
*************** final class ByteBufferHelper
*** 122,129 ****
    public static short getShort (ByteBuffer buffer,
  				      int index, ByteOrder order)
    {
-     checkAvailableForRead (buffer, index, 2);
- 
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
          return (short) ((buffer.get (index) & 0xff)
--- 96,101 ----
*************** final class ByteBufferHelper
*** 137,144 ****
    public static void putShort (ByteBuffer buffer, int index,
  			       short value, ByteOrder order)
    {
-     checkAvailableForWrite (buffer, index, 2);
- 
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
          buffer.put (index, (byte) value);
--- 109,114 ----
*************** final class ByteBufferHelper
*** 153,159 ****
  
    public static int getInt (ByteBuffer buffer, ByteOrder order)
    {
!     checkRemainingForRead (buffer, 4);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
--- 123,129 ----
  
    public static int getInt (ByteBuffer buffer, ByteOrder order)
    {
!     buffer.checkForUnderflow(4);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
*************** final class ByteBufferHelper
*** 171,177 ****
    
    public static void putInt (ByteBuffer buffer, int value, ByteOrder order)
    {
!     checkRemainingForWrite (buffer, 4);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
--- 141,147 ----
    
    public static void putInt (ByteBuffer buffer, int value, ByteOrder order)
    {
!     buffer.checkForOverflow(4);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
*************** final class ByteBufferHelper
*** 191,198 ****
    
    public static int getInt (ByteBuffer buffer, int index, ByteOrder order)
    {
-     checkAvailableForRead (buffer, index, 4);
- 
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
          return ((buffer.get (index) & 0xff)
--- 161,166 ----
*************** final class ByteBufferHelper
*** 210,217 ****
    public static void putInt (ByteBuffer buffer, int index,
  				   int value, ByteOrder order)
    {
-     checkAvailableForWrite (buffer, index, 4);
- 
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
          buffer.put (index, (byte) value);
--- 178,183 ----
*************** final class ByteBufferHelper
*** 230,236 ****
  
    public static long getLong (ByteBuffer buffer, ByteOrder order)
    {
!     checkRemainingForRead (buffer, 8);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
--- 196,202 ----
  
    public static long getLong (ByteBuffer buffer, ByteOrder order)
    {
!     buffer.checkForUnderflow(8);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
*************** final class ByteBufferHelper
*** 256,262 ****
    
    public static void putLong (ByteBuffer buffer, long value, ByteOrder order)
    {
!     checkRemainingForWrite (buffer, 8);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
--- 222,228 ----
    
    public static void putLong (ByteBuffer buffer, long value, ByteOrder order)
    {
!     buffer.checkForOverflow(8);
  
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
*************** final class ByteBufferHelper
*** 284,291 ****
    
    public static long getLong (ByteBuffer buffer, int index, ByteOrder order)
    {
-     checkAvailableForRead (buffer, index, 8);
- 
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
          return ((buffer.get (index) & 0xff)
--- 250,255 ----
*************** final class ByteBufferHelper
*** 311,318 ****
    public static void putLong (ByteBuffer buffer, int index,
  				    long value, ByteOrder order)
    {
-     checkAvailableForWrite (buffer, index, 8);
- 
      if (order == ByteOrder.LITTLE_ENDIAN)
        {
          buffer.put (index, (byte) value);
--- 275,280 ----
*************** final class ByteBufferHelper
*** 365,371 ****
  
    public static void putDouble (ByteBuffer buffer, double value, ByteOrder order)
    {
!     putLong (buffer, Double.doubleToLongBits (value), order);
    }
    
    public static double getDouble (ByteBuffer buffer, int index, ByteOrder order)
--- 327,333 ----
  
    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)
*************** final class ByteBufferHelper
*** 376,381 ****
    public static void putDouble (ByteBuffer buffer, int index,
  				double value, ByteOrder order)
    {
!     putLong (buffer, index, Double.doubleToLongBits (value), order);
    }
  } // ByteBufferHelper
--- 338,344 ----
    public static void putDouble (ByteBuffer buffer, int index,
  				double value, ByteOrder order)
    {
!     putLong (buffer, index, Double.doubleToRawLongBits (value), order);
    }
  } // ByteBufferHelper
+ 
diff -Nrcpad gcc-3.4.3/libjava/java/nio/ByteBufferImpl.java gcc-4.0.0/libjava/java/nio/ByteBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/ByteBufferImpl.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/ByteBufferImpl.java	Thu Feb 17 18:13:03 2005
***************
*** 1,5 ****
  /* ByteBufferImpl.java -- 
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ByteBufferImpl.java -- 
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class ByteBufferImpl extends ByteB
*** 45,89 ****
  {
    private boolean readOnly;
  
-   ByteBufferImpl (int capacity)
-   {
-     this (new byte [capacity], 0, capacity, capacity, 0, -1, false);
-   }
-   
    ByteBufferImpl (byte[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
    {
!     super (buffer, offset, capacity, limit, position, mark);
      this.readOnly = readOnly;
    }
    
    public CharBuffer asCharBuffer ()
    {
!     return new CharViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
    public ShortBuffer asShortBuffer ()
    {
!     return new ShortViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
    public IntBuffer asIntBuffer ()
    {
!     return new IntViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
    public LongBuffer asLongBuffer ()
    {
!     return new LongViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
    public FloatBuffer asFloatBuffer ()
    {
!     return new FloatViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
    public DoubleBuffer asDoubleBuffer ()
    {
!     return new DoubleViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
    public boolean isReadOnly ()
--- 45,86 ----
  {
    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 ()
*************** final class ByteBufferImpl extends ByteB
*** 106,113 ****
--- 103,119 ----
      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)
        {
*************** final class ByteBufferImpl extends ByteB
*** 116,121 ****
--- 122,132 ----
  	position(count);
  	limit(capacity());
        }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
      return this;
    }
    
*************** final class ByteBufferImpl extends ByteB
*** 125,135 ****
    }
  
    /**
!    * Relative get method. Reads the next <code>byte</code> from the buffer.
     */
!   final public byte get ()
    {
!     byte result = backing_buffer [position ()];
      position (position () + 1);
      return result;
    }
--- 136,152 ----
    }
  
    /**
!    * 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 ()
    {
!     checkForUnderflow();
! 
!     byte result = backing_buffer [position () + array_offset];
      position (position () + 1);
      return result;
    }
*************** final class ByteBufferImpl extends ByteB
*** 137,152 ****
    /**
     * Relative put method. Writes <code>value</code> to the next position
     * in the buffer.
!    * 
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
!   final public ByteBuffer put (byte value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
! 	  	    
!     backing_buffer [position ()] = value;
!     position (position () + 1);
      return this;
    }
    
--- 154,172 ----
    /**
     * 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)
    {
!     checkIfReadOnly();
!     checkForOverflow();
! 
!     int pos = position();
!     backing_buffer [pos + array_offset] = value;
!     position (pos + 1);
      return this;
    }
    
*************** final class ByteBufferImpl extends ByteB
*** 157,311 ****
     * @exception IndexOutOfBoundsException If index is negative or not smaller
     * than the buffer's limit.
     */
!   final public byte get (int index)
    {
!     return backing_buffer [index];
    }
    
    /**
!    * Absolute put method. Writes <code>value</value> 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.
     */
!   final public ByteBuffer put (int index, byte value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
!     	    
!     backing_buffer [index] = value;
      return this;
    }
    
!   final public char getChar ()
    {
      return ByteBufferHelper.getChar(this, order());
    }
    
!   final public ByteBuffer putChar (char value)
    {
      ByteBufferHelper.putChar(this, value, order());
      return this;
    }
    
!   final public char getChar (int index)
    {
      return ByteBufferHelper.getChar(this, index, order());
    }
    
!   final public ByteBuffer putChar (int index, char value)
    {
      ByteBufferHelper.putChar(this, index, value, order());
      return this;
    }
  
!   final public short getShort ()
    {
      return ByteBufferHelper.getShort(this, order());
    }
    
!   final public ByteBuffer putShort (short value)
    {
      ByteBufferHelper.putShort(this, value, order());
      return this;
    }
    
!   final public short getShort (int index)
    {
      return ByteBufferHelper.getShort(this, index, order());
    }
    
!   final public ByteBuffer putShort (int index, short value)
    {
      ByteBufferHelper.putShort(this, index, value, order());
      return this;
    }
  
!   final public int getInt ()
    {
      return ByteBufferHelper.getInt(this, order());
    }
    
!   final public ByteBuffer putInt (int value)
    {
      ByteBufferHelper.putInt(this, value, order());
      return this;
    }
    
!   final public int getInt (int index)
    {
      return ByteBufferHelper.getInt(this, index, order());
    }
    
!   final public ByteBuffer putInt (int index, int value)
    {
      ByteBufferHelper.putInt(this, index, value, order());
      return this;
    }
  
!   final public long getLong ()
    {
      return ByteBufferHelper.getLong(this, order());
    }
    
!   final public ByteBuffer putLong (long value)
    {
      ByteBufferHelper.putLong (this, value, order());
      return this;
    }
    
!   final public long getLong (int index)
    {
      return ByteBufferHelper.getLong (this, index, order());
    }
    
!   final public ByteBuffer putLong (int index, long value)
    {
      ByteBufferHelper.putLong (this, index, value, order());
      return this;
    }
  
!   final public float getFloat ()
    {
      return ByteBufferHelper.getFloat (this, order());
    }
    
!   final public ByteBuffer putFloat (float value)
    {
      ByteBufferHelper.putFloat (this, value, order());
      return this;
    }
    
!   public final float getFloat (int index)
    {
      return ByteBufferHelper.getFloat (this, index, order());
    }
  
!   final public ByteBuffer putFloat (int index, float value)
    {
      ByteBufferHelper.putFloat (this, index, value, order());
      return this;
    }
  
!   final public double getDouble ()
    {
      return ByteBufferHelper.getDouble (this, order());
    }
  
!   final public ByteBuffer putDouble (double value)
    {
      ByteBufferHelper.putDouble (this, value, order());
      return this;
    }
    
!   final public double getDouble (int index)
    {
      return ByteBufferHelper.getDouble (this, index, order());
    }
    
!   final public ByteBuffer putDouble (int index, double value)
    {
      ByteBufferHelper.putDouble (this, index, value, order());
      return this;
--- 177,333 ----
     * @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)
    {
      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-3.4.3/libjava/java/nio/ByteOrder.java gcc-4.0.0/libjava/java/nio/ByteOrder.java
*** gcc-3.4.3/libjava/java/nio/ByteOrder.java	Tue Oct 21 12:55:02 2003
--- gcc-4.0.0/libjava/java/nio/ByteOrder.java	Tue Nov 16 11:30:12 2004
***************
*** 1,5 ****
  /* ByteOrder.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ByteOrder.java -- 
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,74 ****
  
  package java.nio;
  
- import gnu.classpath.Configuration;
- 
  /**
!  * @author Michael Koch
   * @since 1.4
   */
  public final class ByteOrder
  {
!   public static final ByteOrder BIG_ENDIAN     = new ByteOrder();
!   public static final ByteOrder LITTLE_ENDIAN  = new ByteOrder();
  
-   static
-   {
-     // load the shared library needed for native methods.
-     if (Configuration.INIT_LOAD_LIBRARY)
-       {
-         System.loadLibrary ("javanio");
-       }
-   }
-   
    /**
     * Returns the native byte order of the platform currently running.
     */
!   public static ByteOrder nativeOrder ()
    {
!     return (System.getProperty ("gnu.cpu.endian") == "big"
              ? BIG_ENDIAN : LITTLE_ENDIAN);
    }
  
    /**
     * Returns a string representation of the byte order.
     */
    public String toString()
    {
--- 38,74 ----
  
  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()
    {
*************** public final class ByteOrder
*** 76,82 ****
    }
  
    // This class can only be instantiated here.
!   private ByteOrder ()
    {
    }
  }
--- 76,82 ----
    }
  
    // This class can only be instantiated here.
!   private ByteOrder()
    {
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/CharBuffer.java gcc-4.0.0/libjava/java/nio/CharBuffer.java
*** gcc-3.4.3/libjava/java/nio/CharBuffer.java	Tue May 20 08:58:31 2003
--- gcc-4.0.0/libjava/java/nio/CharBuffer.java	Fri Oct 22 17:14:17 2004
***************
*** 1,5 ****
  /* CharBuffer.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CharBuffer.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class CharBuffer extends
*** 53,65 ****
      array_offset = 0;
    }
  
-   CharBuffer (char[] buffer, int offset, int capacity, int limit, int position, int mark)
-   {
-     super (capacity, limit, position, mark);
-     this.backing_buffer = buffer;
-     this.array_offset = offset;
-   }
- 
    /**
     * Allocates a new <code>CharBuffer</code> object with a given capacity.
     */
--- 53,58 ----
*************** public abstract class CharBuffer extends
*** 72,132 ****
     * Wraps a <code>char</code> array into a <code>CharBuffer</code>
     * object.
     *
     * @exception IndexOutOfBoundsException If the preconditions on the offset
     * and length parameters do not hold
     */
!   final public static 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.
     */
!   final public static CharBuffer wrap (CharSequence a)
    {
!     return wrap (a, 0, a.length ());
    }
    
    /**
     * Wraps a character sequence into a <code>CharBuffer</code> object.
     * 
     * @exception IndexOutOfBoundsException If the preconditions on the offset
     * and length parameters do not hold
     */
!   final public static CharBuffer wrap (CharSequence a, int offset, int length)
    {
      // FIXME: implement better handling of java.lang.String.
      // Probably share data with String via reflection.
  	  
!     if ((offset < 0)
!         || (offset > a.length ())
!         || (length < 0)
!         || (length > (a.length () - offset)))
!       throw new IndexOutOfBoundsException ();
      
!     char [] buffer = new char [a.length ()];
      
!     for (int i = offset; i < length; i++)
!       {
!         buffer [i] = a.charAt (i);
!       }
      
!     return wrap (buffer, offset, length).asReadOnlyBuffer ();
    }
  
    /**
     * Wraps a <code>char</code> array into a <code>CharBuffer</code>
     * object.
     */
!   final public static CharBuffer wrap (char[] array)
    {
!     return wrap (array, 0, array.length);
    }
    
    /**
!    * This method transfers <code>chars<code> from this buffer into the given
!    * destination array.
     *
     * @param dst The destination array
     * @param offset The offset within the array of the first <code>char</code>
--- 65,145 ----
     * 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>
*************** public abstract class CharBuffer extends
*** 135,146 ****
     * must be non-negative and no larger than dst.length - offset.
     *
     * @exception BufferUnderflowException If there are fewer than length
!    * <code>chars</code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        {
          dst [i] = get ();
--- 148,162 ----
     * 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 ();
*************** public abstract class CharBuffer extends
*** 150,162 ****
    }
  
    /**
!    * This method transfers <code>chars<code> 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>chars</code> remaining in this buffer.
     */
    public CharBuffer get (char[] dst)
    {
--- 166,178 ----
    }
  
    /**
!    * 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)
    {
*************** public abstract class CharBuffer extends
*** 165,176 ****
  
    /**
     * Writes the content of the the <code>CharBUFFER</code> src
!    * into the buffer.
     *
     * @param src The source data.
     *
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>chars<code> in the source buffer.
     * @exception IllegalArgumentException If the source buffer is this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
--- 181,193 ----
  
    /**
     * 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 abstract class CharBuffer extends
*** 179,192 ****
      if (src == this)
        throw new IllegalArgumentException ();
  
!     if (src.remaining () > remaining ())
!       throw new BufferOverflowException ();
  
      if (src.remaining () > 0)
        {
          char[] toPut = new char [src.remaining ()];
          src.get (toPut);
!         src.put (toPut);
        }
  
      return this;
--- 196,208 ----
      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;
*************** public abstract class CharBuffer extends
*** 194,200 ****
  
    /**
     * Writes the content of the the <code>char array</code> src
!    * into the buffer.
     *
     * @param src The array to copy into the buffer.
     * @param offset The offset within the array of the first byte to be read;
--- 210,217 ----
  
    /**
     * 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;
*************** public abstract class CharBuffer extends
*** 203,224 ****
     * 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>chars<code> 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)
    {
!     if (offset < 0
!         || offset >= src.length
!         || length < 0
!         || length > (src.length - offset))
!       throw new IndexOutOfBoundsException ();
!      
!     // Put nothing into this buffer when not enough space left.
!     if (length > remaining ())
!       throw new BufferOverflowException ();
  		    
      for (int i = offset; i < offset + length; i++)
        put (src [i]);
--- 220,234 ----
     * 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]);
*************** public abstract class CharBuffer extends
*** 233,239 ****
     * @param src The array to copy into the buffer.
     * 
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>chars<code> in the source array.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public final CharBuffer put (char[] src)
--- 243,249 ----
     * @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)
*************** public abstract class CharBuffer extends
*** 263,271 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
!     
      return backing_buffer;
    }
  
--- 273,280 ----
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     checkIfReadOnly();
! 
      return backing_buffer;
    }
  
*************** public abstract class CharBuffer extends
*** 281,299 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return array_offset;
    }
  
    /**
     * Calculates a hash code for this buffer.
     */
    public int hashCode ()
    {
!     // FIXME: Check what SUN calculates here.
!     return super.hashCode ();
    }
  
    /**
--- 290,321 ----
      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;
    }
  
    /**
*************** public abstract class CharBuffer extends
*** 317,348 ****
     */
    public int compareTo (Object obj)
    {
!     CharBuffer a = (CharBuffer) obj;
! 
!     if (a.remaining () != remaining ())
!       return 1;
! 
!     if (! hasArray () ||
!         ! a.hasArray ())
!       {
!         return 1;
!       }
! 
!     int r = remaining ();
!     int i1 = position ();
!     int i2 = a.position ();
  
!     for (int i = 0; i < r; i++)
        {
!         int t = (int) (get (i1) - a.get (i2));
! 
!         if (t != 0)
!           {
!             return (int) t;
!           }
        }
! 
!     return 0;
    }
  
    /**
--- 339,365 ----
     */
    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();
    }
  
    /**
*************** public abstract class CharBuffer extends
*** 355,361 ****
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>chars</code> in this buffer.
     */
    public abstract char get ();
  
--- 372,378 ----
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>char</code>s in this buffer.
     */
    public abstract char get ();
  
*************** public abstract class CharBuffer extends
*** 364,370 ****
     * and then increments the position.
     *
     * @exception BufferOverflowException If there no remaining 
!    * <code>chars</code> in this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public abstract CharBuffer put (char b);
--- 381,387 ----
     * 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);
diff -Nrcpad gcc-3.4.3/libjava/java/nio/CharBufferImpl.java gcc-4.0.0/libjava/java/nio/CharBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/CharBufferImpl.java	Fri Jun 27 13:34:11 2003
--- gcc-4.0.0/libjava/java/nio/CharBufferImpl.java	Thu Feb 17 18:13:04 2005
***************
*** 1,5 ****
  /* CharBufferImpl.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CharBufferImpl.java -- 
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class CharBufferImpl extends CharB
*** 52,58 ****
    
    CharBufferImpl (char[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
    {
!     super (buffer, offset, capacity, limit, position, mark);
      this.readOnly = readOnly;
    }
    
--- 52,60 ----
    
    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;
    }
    
*************** final class CharBufferImpl extends CharB
*** 85,90 ****
--- 87,94 ----
    
    public CharBuffer compact ()
    {
+     checkIfReadOnly();
+     mark = -1;
      int copied = 0;
      
      while (remaining () > 0)
*************** final class CharBufferImpl extends CharB
*** 94,99 ****
--- 98,104 ----
        }
  
      position (copied);
+     limit(capacity());
      return this;
    }
    
*************** final class CharBufferImpl extends CharB
*** 102,108 ****
      return false;
    }
  
!   final public CharSequence subSequence (int start, int end)
    {
      if (start < 0
          || start > length ()
--- 107,113 ----
      return false;
    }
  
!   public CharSequence subSequence (int start, int end)
    {
      if (start < 0
          || start > length ()
*************** final class CharBufferImpl extends CharB
*** 114,123 ****
    }
    
    /**
!    * Relative get method. Reads the next <code>char</code> from the buffer.
     */
!   final public char get ()
    {
      char result = backing_buffer [position ()];
      position (position () + 1);
      return result;
--- 119,134 ----
    }
    
    /**
!    * 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 ()
    {
+     checkForUnderflow();
+ 
      char result = backing_buffer [position ()];
      position (position () + 1);
      return result;
*************** final class CharBufferImpl extends CharB
*** 129,138 ****
     * 
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
!   final public CharBuffer put (char value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
  	  	    
      backing_buffer [position ()] = value;
      position (position () + 1);
--- 140,148 ----
     * 
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
!   public CharBuffer put (char value)
    {
!     checkIfReadOnly();
  	  	    
      backing_buffer [position ()] = value;
      position (position () + 1);
*************** final class CharBufferImpl extends CharB
*** 143,182 ****
     * Absolute get method. Reads the <code>char</code> at position
     * <code>index</code>.
     *
     * @exception IndexOutOfBoundsException If index is negative or not smaller
     * than the buffer's limit.
     */
!   final public char get (int index)
    {
!     if (index < 0
!         || index >= limit ())
!       throw new IndexOutOfBoundsException ();
      
      return backing_buffer [index];
    }
    
    /**
!    * Absolute put method. Writes <code>value</value> 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.
     */
!   final public CharBuffer put (int index, char value)
    {
!     if (index < 0
!         || index >= limit ())
!       throw new IndexOutOfBoundsException ();
!     
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
      	    
      backing_buffer [index] = value;
      return this;
    }
    
!   final public ByteOrder order ()
    {
      return ByteOrder.nativeOrder ();
    }
--- 153,188 ----
     * 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];
    }
    
    /**
!    * 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] = value;
      return this;
    }
    
!   public ByteOrder order ()
    {
      return ByteOrder.nativeOrder ();
    }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/CharViewBufferImpl.java gcc-4.0.0/libjava/java/nio/CharViewBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/CharViewBufferImpl.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/CharViewBufferImpl.java	Thu Feb 17 18:13:04 2005
*************** class CharViewBufferImpl extends CharBuf
*** 46,62 ****
    private boolean readOnly;
    private ByteOrder endian;
    
    public CharViewBufferImpl (ByteBuffer bb, int offset, int capacity,
  			     int limit, int position, int mark,
  			     boolean readOnly, ByteOrder endian)
    {
!     super (limit >> 1, limit >> 1, position >> 1, mark >> 1);
      this.bb = bb;
      this.offset = offset;
      this.readOnly = readOnly;
      this.endian = endian;
    }
  
    public char get ()
    {
      int p = position();
--- 46,82 ----
    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();
*************** class CharViewBufferImpl extends CharBuf
*** 65,70 ****
--- 85,99 ----
      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);
*************** class CharViewBufferImpl extends CharBuf
*** 93,98 ****
--- 122,132 ----
          position (count);
          limit (capacity ());
        }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
      return this;
    }
    
diff -Nrcpad gcc-3.4.3/libjava/java/nio/DirectByteBufferImpl.java gcc-4.0.0/libjava/java/nio/DirectByteBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/DirectByteBufferImpl.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/DirectByteBufferImpl.java	Sun Apr  3 08:11:26 2005
*************** exception statement from your version. *
*** 38,323 ****
  
  package java.nio;
  
- import gnu.classpath.Configuration;
  import gnu.gcj.RawData;
  
! class DirectByteBufferImpl extends ByteBuffer
  {
!   static
    {
!     // load the shared library needed for native methods.
!     if (Configuration.INIT_LOAD_LIBRARY)
!       {
!         System.loadLibrary ("javanio");
!       }
    }
-   
-   RawData address;
-   private int offset;
-   private boolean readOnly;
  
!   public DirectByteBufferImpl (RawData address, long len)
    {
!     this (address, 0, (int) len, (int) len, 0, -1, false);
    }
    
!   public DirectByteBufferImpl (RawData address, int offset, int capacity,
!                                int limit, int position, int mark,
!                                boolean readOnly)
    {
!     super (capacity, limit, position, mark);
      this.address = address;
-     this.offset = offset;
-     this.readOnly = readOnly;
    }
  
!   private static native RawData allocateImpl (int capacity);
!   private static native void freeImpl (RawData address);
!   
!   protected void finalize () throws Throwable
    {
!     freeImpl (address);
    }
    
!   public static ByteBuffer allocateDirect (int capacity)
    {
!     RawData address = allocateImpl (capacity);
  
!     if (address == null)
!       throw new InternalError ("Not enough memory to create direct buffer");
!     
!     return new DirectByteBufferImpl (address, 0, capacity, capacity, 0, -1, false);
    }
-   
-   private native byte getImpl (int index);
-   private native void putImpl (int index, byte value);
  
!   public byte get ()
    {
!     byte result = getImpl (position () + offset);
!     position (position () + 1);
!     return result;
    }
  
!   public byte get (int index)
    {
!     return getImpl (index);
    }
  
!   public ByteBuffer put (byte value)
    {
!     putImpl (position (), value);
!     position (position () + 1);
      return this;
    }
    
!   public ByteBuffer put (int index, byte value)
    {
!     putImpl (index, value);
      return this;
    }
    
!   native void shiftDown (int dst_offset, int src_offset, int count);
! 
!   public ByteBuffer compact ()
    {
      int pos = position();
      if (pos > 0)
        {
  	int count = remaining();
! 	shiftDown(0, pos, count);
  	position(count);
  	limit(capacity());
        }
      return this;
    }
  
!   public ByteBuffer duplicate ()
    {
!     return new DirectByteBufferImpl (
!       address, offset, capacity (), limit (), position (), -1, isReadOnly ());
    }
  
!   public ByteBuffer slice ()
    {
!     return new DirectByteBufferImpl (address, position () + offset, remaining (), remaining (), 0, -1, isReadOnly ());
    }
  
!   public ByteBuffer asReadOnlyBuffer ()
    {
!     return new DirectByteBufferImpl (
!       address, offset, capacity (), limit (), position (), -1, true);
    }
  
!   public boolean isReadOnly ()
    {
!     return readOnly;
    }
  
!   public boolean isDirect ()
    {
      return true;
    }
  
!   public CharBuffer asCharBuffer ()
    {
!     return new CharViewBufferImpl (this, position (), remaining (), remaining (), 0, -1, isReadOnly (), order());
    }
!   
!   public DoubleBuffer asDoubleBuffer ()
    {
!     return new DoubleViewBufferImpl (this, position (), remaining (), remaining (), 0, -1, isReadOnly (), order());
    }
!   
!   public FloatBuffer asFloatBuffer ()
    {
!     return new FloatViewBufferImpl (this, position (), remaining (), remaining (), 0, -1, isReadOnly (), order());
    }
!   
!   public IntBuffer asIntBuffer ()
    {
!     return new IntViewBufferImpl (this, position (), remaining (), remaining (), 0, -1, isReadOnly (), order());
    }
!   
!   public LongBuffer asLongBuffer ()
    {
!     return new LongViewBufferImpl (this, position (), remaining (), remaining (), 0, -1, isReadOnly (), order());
    }
!   
!   public ShortBuffer asShortBuffer ()
    {
!     return new ShortViewBufferImpl (this, position (), remaining (), remaining (), 0, -1, isReadOnly (), order());
    }
!   
!   final public char getChar ()
    {
      return ByteBufferHelper.getChar(this, order());
    }
    
!   final public ByteBuffer putChar (char value)
    {
      ByteBufferHelper.putChar(this, value, order());
      return this;
    }
    
!   final public char getChar (int index)
    {
      return ByteBufferHelper.getChar(this, index, order());
    }
    
!   final public ByteBuffer putChar (int index, char value)
    {
      ByteBufferHelper.putChar(this, index, value, order());
      return this;
    }
  
!   final public short getShort ()
    {
      return ByteBufferHelper.getShort(this, order());
    }
    
!   final public ByteBuffer putShort (short value)
    {
      ByteBufferHelper.putShort(this, value, order());
      return this;
    }
    
!   final public short getShort (int index)
    {
      return ByteBufferHelper.getShort(this, index, order());
    }
    
!   final public ByteBuffer putShort (int index, short value)
    {
      ByteBufferHelper.putShort(this, index, value, order());
      return this;
    }
  
!   final public int getInt ()
    {
      return ByteBufferHelper.getInt(this, order());
    }
    
!   final public ByteBuffer putInt (int value)
    {
      ByteBufferHelper.putInt(this, value, order());
      return this;
    }
    
!   final public int getInt (int index)
    {
      return ByteBufferHelper.getInt(this, index, order());
    }
    
!   final public ByteBuffer putInt (int index, int value)
    {
      ByteBufferHelper.putInt(this, index, value, order());
      return this;
    }
  
!   final public long getLong ()
    {
      return ByteBufferHelper.getLong(this, order());
    }
    
!   final public ByteBuffer putLong (long value)
    {
!     ByteBufferHelper.putLong (this, value, order());
      return this;
    }
    
!   final public long getLong (int index)
    {
!     return ByteBufferHelper.getLong (this, index, order());
    }
    
!   final public ByteBuffer putLong (int index, long value)
    {
!     ByteBufferHelper.putLong (this, index, value, order());
      return this;
    }
  
!   final public float getFloat ()
    {
!     return ByteBufferHelper.getFloat (this, order());
    }
    
!   final public ByteBuffer putFloat (float value)
    {
!     ByteBufferHelper.putFloat (this, value, order());
      return this;
    }
    
!   public final float getFloat (int index)
    {
!     return ByteBufferHelper.getFloat (this, index, order());
    }
  
!   final public ByteBuffer putFloat (int index, float value)
    {
!     ByteBufferHelper.putFloat (this, index, value, order());
      return this;
    }
  
!   final public double getDouble ()
    {
!     return ByteBufferHelper.getDouble (this, order());
    }
  
!   final public ByteBuffer putDouble (double value)
    {
!     ByteBufferHelper.putDouble (this, value, order());
      return this;
    }
    
!   final public double getDouble (int index)
    {
!     return ByteBufferHelper.getDouble (this, index, order());
    }
    
!   final public ByteBuffer putDouble (int index, double value)
    {
!     ByteBufferHelper.putDouble (this, index, value, order());
      return this;
    }
  }
--- 38,431 ----
  
  package java.nio;
  
  import gnu.gcj.RawData;
  
! 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, RawData 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(RawData address, int capacity)
!     {
!       super(address, capacity);
!     }
!     
!     ReadWrite(Object owner, RawData 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(RawData address, int capacity)
!   {
!     super(capacity, capacity, 0, -1);
!     this.owner = null;
!     this.address = address;
    }
    
!   DirectByteBufferImpl(Object owner, RawData 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;
    }
    
!   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-3.4.3/libjava/java/nio/DoubleBuffer.java gcc-4.0.0/libjava/java/nio/DoubleBuffer.java
*** gcc-3.4.3/libjava/java/nio/DoubleBuffer.java	Tue May 20 08:58:31 2003
--- gcc-4.0.0/libjava/java/nio/DoubleBuffer.java	Fri Oct 22 17:14:17 2004
***************
*** 1,5 ****
  /* DoubleBuffer.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DoubleBuffer.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class DoubleBuffer exten
*** 53,65 ****
      array_offset = 0;
    }
  
-   DoubleBuffer (double[] buffer, int offset, int capacity, int limit, int position, int mark)
-   {
-     super (capacity, limit, position, mark);
-     this.backing_buffer = buffer;
-     this.array_offset = offset;
-   }
- 
    /**
     * Allocates a new <code>DoubleBuffer</code> object with a given capacity.
     */
--- 53,58 ----
*************** public abstract class DoubleBuffer exten
*** 75,81 ****
     * @exception IndexOutOfBoundsException If the preconditions on the offset
     * and length parameters do not hold
     */
!   final public static DoubleBuffer wrap (double[] array, int offset, int length)
    {
      return new DoubleBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
    }
--- 68,74 ----
     * @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);
    }
*************** public abstract class DoubleBuffer exten
*** 84,97 ****
     * Wraps a <code>double</code> array into a <code>DoubleBuffer</code>
     * object.
     */
!   final public static DoubleBuffer wrap (double[] array)
    {
      return wrap (array, 0, array.length);
    }
    
    /**
!    * This method transfers <code>doubles<code> from this buffer into the given
!    * destination array.
     *
     * @param dst The destination array
     * @param offset The offset within the array of the first <code>double</code>
--- 77,91 ----
     * 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>
*************** public abstract class DoubleBuffer exten
*** 100,111 ****
     * must be non-negative and no larger than dst.length - offset.
     *
     * @exception BufferUnderflowException If there are fewer than length
!    * <code>doubles</code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        {
          dst [i] = get ();
--- 94,108 ----
     * 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 ();
*************** public abstract class DoubleBuffer exten
*** 115,127 ****
    }
  
    /**
!    * This method transfers <code>doubles<code> 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>doubles</code> remaining in this buffer.
     */
    public DoubleBuffer get (double[] dst)
    {
--- 112,124 ----
    }
  
    /**
!    * 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)
    {
*************** public abstract class DoubleBuffer exten
*** 130,141 ****
  
    /**
     * Writes the content of the the <code>DoubleBUFFER</code> src
!    * into the buffer.
     *
     * @param src The source data.
     *
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>doubles<code> in the source buffer.
     * @exception IllegalArgumentException If the source buffer is this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
--- 127,139 ----
  
    /**
     * 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 abstract class DoubleBuffer exten
*** 144,157 ****
      if (src == this)
        throw new IllegalArgumentException ();
  
!     if (src.remaining () > remaining ())
!       throw new BufferOverflowException ();
  
      if (src.remaining () > 0)
        {
          double[] toPut = new double [src.remaining ()];
          src.get (toPut);
!         src.put (toPut);
        }
  
      return this;
--- 142,154 ----
      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;
*************** public abstract class DoubleBuffer exten
*** 159,165 ****
  
    /**
     * Writes the content of the the <code>double array</code> src
!    * into the buffer.
     *
     * @param src The array to copy into the buffer.
     * @param offset The offset within the array of the first byte to be read;
--- 156,163 ----
  
    /**
     * 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;
*************** public abstract class DoubleBuffer exten
*** 168,180 ****
     * 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>doubles<code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        put (src [i]);
  
--- 166,181 ----
     * 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]);
  
*************** public abstract class DoubleBuffer exten
*** 188,194 ****
     * @param src The array to copy into the buffer.
     * 
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>doubles<code> in the source array.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public final DoubleBuffer put (double[] src)
--- 189,195 ----
     * @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)
*************** public abstract class DoubleBuffer exten
*** 218,225 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return backing_buffer;
    }
--- 219,225 ----
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     checkIfReadOnly();
      
      return backing_buffer;
    }
*************** public abstract class DoubleBuffer exten
*** 236,254 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return array_offset;
    }
  
    /**
     * Calculates a hash code for this buffer.
     */
    public int hashCode ()
    {
!     // FIXME: Check what SUN calculates here.
!     return super.hashCode ();
    }
  
    /**
--- 236,269 ----
      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);
    }
  
    /**
*************** public abstract class DoubleBuffer exten
*** 272,303 ****
     */
    public int compareTo (Object obj)
    {
!     DoubleBuffer a = (DoubleBuffer) obj;
! 
!     if (a.remaining () != remaining ())
!       return 1;
! 
!     if (! hasArray () ||
!         ! a.hasArray ())
!       {
!         return 1;
!       }
! 
!     int r = remaining ();
!     int i1 = position ();
!     int i2 = a.position ();
  
!     for (int i = 0; i < r; i++)
        {
!         int t = (int) (get (i1) - a.get (i2));
! 
!         if (t != 0)
!           {
!             return (int) t;
!           }
        }
! 
!     return 0;
    }
  
    /**
--- 287,313 ----
     */
    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();
    }
  
    /**
*************** public abstract class DoubleBuffer exten
*** 310,316 ****
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>doubles</code> in this buffer.
     */
    public abstract double get ();
  
--- 320,326 ----
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>double</code>s in this buffer.
     */
    public abstract double get ();
  
*************** public abstract class DoubleBuffer exten
*** 319,325 ****
     * and then increments the position.
     *
     * @exception BufferOverflowException If there no remaining 
!    * <code>doubles</code> in this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public abstract DoubleBuffer put (double b);
--- 329,335 ----
     * 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);
diff -Nrcpad gcc-3.4.3/libjava/java/nio/DoubleBufferImpl.java gcc-4.0.0/libjava/java/nio/DoubleBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/DoubleBufferImpl.java	Fri Jun 27 13:34:11 2003
--- gcc-4.0.0/libjava/java/nio/DoubleBufferImpl.java	Thu Feb 17 18:13:05 2005
***************
*** 1,5 ****
  /* DoubleBufferImpl.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DoubleBufferImpl.java -- 
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class DoubleBufferImpl extends Dou
*** 52,58 ****
    
    DoubleBufferImpl (double[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
    {
!     super (buffer, offset, capacity, limit, position, mark);
      this.readOnly = readOnly;
    }
    
--- 52,60 ----
    
    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;
    }
    
*************** final class DoubleBufferImpl extends Dou
*** 78,83 ****
--- 80,87 ----
    
    public DoubleBuffer compact ()
    {
+     checkIfReadOnly();
+     mark = -1;
      int copied = 0;
      
      while (remaining () > 0)
*************** final class DoubleBufferImpl extends Dou
*** 87,92 ****
--- 91,97 ----
        }
  
      position (copied);
+     limit(capacity());
      return this;
    }
    
*************** final class DoubleBufferImpl extends Dou
*** 96,105 ****
    }
  
    /**
!    * Relative get method. Reads the next <code>double</code> from the buffer.
     */
!   final public double get ()
    {
      double result = backing_buffer [position ()];
      position (position () + 1);
      return result;
--- 101,116 ----
    }
  
    /**
!    * 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;
*************** final class DoubleBufferImpl extends Dou
*** 108,120 ****
    /**
     * Relative put method. Writes <code>value</code> to the next position
     * in the buffer.
!    * 
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
!   final public DoubleBuffer put (double value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
  	  	    
      backing_buffer [position ()] = value;
      position (position () + 1);
--- 119,133 ----
    /**
     * 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);
*************** final class DoubleBufferImpl extends Dou
*** 128,156 ****
     * @exception IndexOutOfBoundsException If index is negative or not smaller
     * than the buffer's limit.
     */
!   final public double get (int index)
    {
      return backing_buffer [index];
    }
    
    /**
!    * Absolute put method. Writes <code>value</value> 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.
     */
!   final public DoubleBuffer put (int index, double value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
!     	    
      backing_buffer [index] = value;
      return this;
    }
    
!   final public ByteOrder order ()
    {
      return ByteOrder.nativeOrder ();
    }
--- 141,171 ----
     * @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-3.4.3/libjava/java/nio/DoubleViewBufferImpl.java gcc-4.0.0/libjava/java/nio/DoubleViewBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/DoubleViewBufferImpl.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/DoubleViewBufferImpl.java	Thu Feb 17 18:13:05 2005
*************** exception statement from your version. *
*** 38,44 ****
  
  package java.nio;
  
! class DoubleViewBufferImpl extends DoubleBuffer
  {
    /** Position in bb (i.e. a byte offset) where this buffer starts. */
    private int offset;
--- 38,44 ----
  
  package java.nio;
  
! final class DoubleViewBufferImpl extends DoubleBuffer
  {
    /** Position in bb (i.e. a byte offset) where this buffer starts. */
    private int offset;
*************** class DoubleViewBufferImpl extends Doubl
*** 46,62 ****
    private boolean readOnly;
    private ByteOrder endian;
    
    public DoubleViewBufferImpl (ByteBuffer bb, int offset, int capacity,
                                 int limit, int position, int mark,
                                 boolean readOnly, ByteOrder endian)
    {
!     super (limit >> 3, limit >> 3, position >> 3, mark >> 3);
      this.bb = bb;
      this.offset = offset;
      this.readOnly = readOnly;
      this.endian = endian;
    }
  
    public double get ()
    {
      int p = position();
--- 46,82 ----
    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();
*************** class DoubleViewBufferImpl extends Doubl
*** 65,70 ****
--- 85,97 ----
      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);
*************** class DoubleViewBufferImpl extends Doubl
*** 93,98 ****
--- 120,130 ----
          position (count);
          limit (capacity ());
        }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
      return this;
    }
    
diff -Nrcpad gcc-3.4.3/libjava/java/nio/FloatBuffer.java gcc-4.0.0/libjava/java/nio/FloatBuffer.java
*** gcc-3.4.3/libjava/java/nio/FloatBuffer.java	Tue May 20 08:58:31 2003
--- gcc-4.0.0/libjava/java/nio/FloatBuffer.java	Fri Oct 22 17:14:17 2004
***************
*** 1,5 ****
  /* FloatBuffer.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FloatBuffer.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class FloatBuffer extend
*** 53,65 ****
      array_offset = 0;
    }
  
-   FloatBuffer (float[] buffer, int offset, int capacity, int limit, int position, int mark)
-   {
-     super (capacity, limit, position, mark);
-     this.backing_buffer = buffer;
-     this.array_offset = offset;
-   }
- 
    /**
     * Allocates a new <code>FloatBuffer</code> object with a given capacity.
     */
--- 53,58 ----
*************** public abstract class FloatBuffer extend
*** 75,81 ****
     * @exception IndexOutOfBoundsException If the preconditions on the offset
     * and length parameters do not hold
     */
!   final public static FloatBuffer wrap (float[] array, int offset, int length)
    {
      return new FloatBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
    }
--- 68,74 ----
     * @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);
    }
*************** public abstract class FloatBuffer extend
*** 84,97 ****
     * Wraps a <code>float</code> array into a <code>FloatBuffer</code>
     * object.
     */
!   final public static FloatBuffer wrap (float[] array)
    {
      return wrap (array, 0, array.length);
    }
    
    /**
!    * This method transfers <code>floats<code> from this buffer into the given
!    * destination array.
     *
     * @param dst The destination array
     * @param offset The offset within the array of the first <code>float</code>
--- 77,91 ----
     * 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>
*************** public abstract class FloatBuffer extend
*** 100,111 ****
     * must be non-negative and no larger than dst.length - offset.
     *
     * @exception BufferUnderflowException If there are fewer than length
!    * <code>floats</code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        {
          dst [i] = get ();
--- 94,108 ----
     * 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 ();
*************** public abstract class FloatBuffer extend
*** 115,127 ****
    }
  
    /**
!    * This method transfers <code>floats<code> 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>floats</code> remaining in this buffer.
     */
    public FloatBuffer get (float[] dst)
    {
--- 112,124 ----
    }
  
    /**
!    * 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)
    {
*************** public abstract class FloatBuffer extend
*** 130,141 ****
  
    /**
     * Writes the content of the the <code>FloatBUFFER</code> src
!    * into the buffer.
     *
     * @param src The source data.
     *
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>floats<code> in the source buffer.
     * @exception IllegalArgumentException If the source buffer is this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
--- 127,139 ----
  
    /**
     * 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 abstract class FloatBuffer extend
*** 144,157 ****
      if (src == this)
        throw new IllegalArgumentException ();
  
!     if (src.remaining () > remaining ())
!       throw new BufferOverflowException ();
  
      if (src.remaining () > 0)
        {
          float[] toPut = new float [src.remaining ()];
          src.get (toPut);
!         src.put (toPut);
        }
  
      return this;
--- 142,154 ----
      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;
*************** public abstract class FloatBuffer extend
*** 159,165 ****
  
    /**
     * Writes the content of the the <code>float array</code> src
!    * into the buffer.
     *
     * @param src The array to copy into the buffer.
     * @param offset The offset within the array of the first byte to be read;
--- 156,163 ----
  
    /**
     * 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;
*************** public abstract class FloatBuffer extend
*** 168,180 ****
     * 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>floats<code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        put (src [i]);
  
--- 166,181 ----
     * 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]);
  
*************** public abstract class FloatBuffer extend
*** 188,194 ****
     * @param src The array to copy into the buffer.
     * 
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>floats<code> in the source array.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public final FloatBuffer put (float[] src)
--- 189,195 ----
     * @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)
*************** public abstract class FloatBuffer extend
*** 218,225 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return backing_buffer;
    }
--- 219,225 ----
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     checkIfReadOnly();
      
      return backing_buffer;
    }
*************** public abstract class FloatBuffer extend
*** 236,254 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return array_offset;
    }
  
    /**
     * Calculates a hash code for this buffer.
     */
    public int hashCode ()
    {
!     // FIXME: Check what SUN calculates here.
!     return super.hashCode ();
    }
  
    /**
--- 236,269 ----
      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;
    }
  
    /**
*************** public abstract class FloatBuffer extend
*** 272,303 ****
     */
    public int compareTo (Object obj)
    {
!     FloatBuffer a = (FloatBuffer) obj;
! 
!     if (a.remaining () != remaining ())
!       return 1;
! 
!     if (! hasArray () ||
!         ! a.hasArray ())
!       {
!         return 1;
!       }
! 
!     int r = remaining ();
!     int i1 = position ();
!     int i2 = a.position ();
  
!     for (int i = 0; i < r; i++)
        {
!         int t = (int) (get (i1) - a.get (i2));
! 
!         if (t != 0)
!           {
!             return (int) t;
!           }
        }
! 
!     return 0;
    }
  
    /**
--- 287,313 ----
     */
    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();
    }
  
    /**
*************** public abstract class FloatBuffer extend
*** 310,316 ****
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>floats</code> in this buffer.
     */
    public abstract float get ();
  
--- 320,326 ----
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>float</code>s in this buffer.
     */
    public abstract float get ();
  
*************** public abstract class FloatBuffer extend
*** 319,325 ****
     * and then increments the position.
     *
     * @exception BufferOverflowException If there no remaining 
!    * <code>floats</code> in this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public abstract FloatBuffer put (float b);
--- 329,335 ----
     * 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);
diff -Nrcpad gcc-3.4.3/libjava/java/nio/FloatBufferImpl.java gcc-4.0.0/libjava/java/nio/FloatBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/FloatBufferImpl.java	Fri Jun 27 13:34:11 2003
--- gcc-4.0.0/libjava/java/nio/FloatBufferImpl.java	Thu Feb 17 18:13:05 2005
***************
*** 1,5 ****
  /* FloatBufferImpl.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FloatBufferImpl.java -- 
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class FloatBufferImpl extends Floa
*** 52,58 ****
    
    FloatBufferImpl (float[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
    {
!     super (buffer, offset, capacity, limit, position, mark);
      this.readOnly = readOnly;
    }
    
--- 52,60 ----
    
    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;
    }
    
*************** final class FloatBufferImpl extends Floa
*** 78,83 ****
--- 80,87 ----
    
    public FloatBuffer compact ()
    {
+     checkIfReadOnly();
+     mark = -1;
      int copied = 0;
      
      while (remaining () > 0)
*************** final class FloatBufferImpl extends Floa
*** 87,92 ****
--- 91,97 ----
        }
  
      position (copied);
+     limit(capacity());
      return this;
    }
    
*************** final class FloatBufferImpl extends Floa
*** 96,105 ****
    }
  
    /**
!    * Relative get method. Reads the next <code>float</code> from the buffer.
     */
!   final public float get ()
    {
      float result = backing_buffer [position ()];
      position (position () + 1);
      return result;
--- 101,116 ----
    }
  
    /**
!    * 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;
*************** final class FloatBufferImpl extends Floa
*** 109,121 ****
     * Relative put method. Writes <code>value</code> to the next position
     * in the buffer.
     * 
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
!   final public FloatBuffer put (float value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
! 	  	    
      backing_buffer [position ()] = value;
      position (position () + 1);
      return this;
--- 120,134 ----
     * 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;
*************** final class FloatBufferImpl extends Floa
*** 128,156 ****
     * @exception IndexOutOfBoundsException If index is negative or not smaller
     * than the buffer's limit.
     */
!   final public float get (int index)
    {
      return backing_buffer [index];
    }
    
    /**
!    * Absolute put method. Writes <code>value</value> 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.
     */
!   final public FloatBuffer put (int index, float value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
!     	    
      backing_buffer [index] = value;
      return this;
    }
    
!   final public ByteOrder order ()
    {
      return ByteOrder.nativeOrder ();
    }
--- 141,171 ----
     * @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-3.4.3/libjava/java/nio/FloatViewBufferImpl.java gcc-4.0.0/libjava/java/nio/FloatViewBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/FloatViewBufferImpl.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/FloatViewBufferImpl.java	Thu Feb 17 18:13:05 2005
*************** exception statement from your version. *
*** 38,44 ****
  
  package java.nio;
  
! class FloatViewBufferImpl extends FloatBuffer
  {
    /** Position in bb (i.e. a byte offset) where this buffer starts. */
    private int offset;
--- 38,44 ----
  
  package java.nio;
  
! final class FloatViewBufferImpl extends FloatBuffer
  {
    /** Position in bb (i.e. a byte offset) where this buffer starts. */
    private int offset;
*************** class FloatViewBufferImpl extends FloatB
*** 46,62 ****
    private boolean readOnly;
    private ByteOrder endian;
    
    public FloatViewBufferImpl (ByteBuffer bb, int offset, int capacity,
  			      int limit, int position, int mark,
  			      boolean readOnly, ByteOrder endian)
    {
!     super (limit >> 2, limit >> 2, position >> 2, mark >> 2);
      this.bb = bb;
      this.offset = offset;
      this.readOnly = readOnly;
      this.endian = endian;
    }
  
    public float get ()
    {
      int p = position();
--- 46,82 ----
    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();
*************** class FloatViewBufferImpl extends FloatB
*** 65,70 ****
--- 85,97 ----
      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);
*************** class FloatViewBufferImpl extends FloatB
*** 93,98 ****
--- 120,130 ----
          position (count);
          limit (capacity ());
        }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
      return this;
    }
    
diff -Nrcpad gcc-3.4.3/libjava/java/nio/IntBuffer.java gcc-4.0.0/libjava/java/nio/IntBuffer.java
*** gcc-3.4.3/libjava/java/nio/IntBuffer.java	Tue May 20 08:58:31 2003
--- gcc-4.0.0/libjava/java/nio/IntBuffer.java	Fri Oct 22 17:14:17 2004
***************
*** 1,5 ****
  /* IntBuffer.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* IntBuffer.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class IntBuffer extends 
*** 53,65 ****
      array_offset = 0;
    }
  
-   IntBuffer (int[] buffer, int offset, int capacity, int limit, int position, int mark)
-   {
-     super (capacity, limit, position, mark);
-     this.backing_buffer = buffer;
-     this.array_offset = offset;
-   }
- 
    /**
     * Allocates a new <code>IntBuffer</code> object with a given capacity.
     */
--- 53,58 ----
*************** public abstract class IntBuffer extends 
*** 75,81 ****
     * @exception IndexOutOfBoundsException If the preconditions on the offset
     * and length parameters do not hold
     */
!   final public static IntBuffer wrap (int[] array, int offset, int length)
    {
      return new IntBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
    }
--- 68,74 ----
     * @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);
    }
*************** public abstract class IntBuffer extends 
*** 84,97 ****
     * Wraps a <code>int</code> array into a <code>IntBuffer</code>
     * object.
     */
!   final public static IntBuffer wrap (int[] array)
    {
      return wrap (array, 0, array.length);
    }
    
    /**
!    * This method transfers <code>ints<code> from this buffer into the given
!    * destination array.
     *
     * @param dst The destination array
     * @param offset The offset within the array of the first <code>int</code>
--- 77,91 ----
     * 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>
*************** public abstract class IntBuffer extends 
*** 100,111 ****
     * must be non-negative and no larger than dst.length - offset.
     *
     * @exception BufferUnderflowException If there are fewer than length
!    * <code>ints</code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        {
          dst [i] = get ();
--- 94,108 ----
     * 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 ();
*************** public abstract class IntBuffer extends 
*** 115,127 ****
    }
  
    /**
!    * This method transfers <code>ints<code> 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>ints</code> remaining in this buffer.
     */
    public IntBuffer get (int[] dst)
    {
--- 112,124 ----
    }
  
    /**
!    * 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)
    {
*************** public abstract class IntBuffer extends 
*** 130,141 ****
  
    /**
     * Writes the content of the the <code>IntBUFFER</code> src
!    * into the buffer.
     *
     * @param src The source data.
     *
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>ints<code> in the source buffer.
     * @exception IllegalArgumentException If the source buffer is this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
--- 127,139 ----
  
    /**
     * 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 abstract class IntBuffer extends 
*** 144,157 ****
      if (src == this)
        throw new IllegalArgumentException ();
  
!     if (src.remaining () > remaining ())
!       throw new BufferOverflowException ();
  
      if (src.remaining () > 0)
        {
          int[] toPut = new int [src.remaining ()];
          src.get (toPut);
!         src.put (toPut);
        }
  
      return this;
--- 142,154 ----
      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;
*************** public abstract class IntBuffer extends 
*** 159,165 ****
  
    /**
     * Writes the content of the the <code>int array</code> src
!    * into the buffer.
     *
     * @param src The array to copy into the buffer.
     * @param offset The offset within the array of the first byte to be read;
--- 156,163 ----
  
    /**
     * 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;
*************** public abstract class IntBuffer extends 
*** 168,180 ****
     * 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>ints<code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        put (src [i]);
  
--- 166,181 ----
     * 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]);
  
*************** public abstract class IntBuffer extends 
*** 188,194 ****
     * @param src The array to copy into the buffer.
     * 
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>ints<code> in the source array.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public final IntBuffer put (int[] src)
--- 189,195 ----
     * @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)
*************** public abstract class IntBuffer extends 
*** 218,225 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return backing_buffer;
    }
--- 219,225 ----
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     checkIfReadOnly();
      
      return backing_buffer;
    }
*************** public abstract class IntBuffer extends 
*** 236,254 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return array_offset;
    }
  
    /**
     * Calculates a hash code for this buffer.
     */
    public int hashCode ()
    {
!     // FIXME: Check what SUN calculates here.
!     return super.hashCode ();
    }
  
    /**
--- 236,269 ----
      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;
    }
  
    /**
*************** public abstract class IntBuffer extends 
*** 272,303 ****
     */
    public int compareTo (Object obj)
    {
!     IntBuffer a = (IntBuffer) obj;
! 
!     if (a.remaining () != remaining ())
!       return 1;
! 
!     if (! hasArray () ||
!         ! a.hasArray ())
!       {
!         return 1;
!       }
! 
!     int r = remaining ();
!     int i1 = position ();
!     int i2 = a.position ();
  
!     for (int i = 0; i < r; i++)
        {
!         int t = (int) (get (i1) - a.get (i2));
! 
!         if (t != 0)
!           {
!             return (int) t;
!           }
        }
! 
!     return 0;
    }
  
    /**
--- 287,313 ----
     */
    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();
    }
  
    /**
*************** public abstract class IntBuffer extends 
*** 310,316 ****
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>ints</code> in this buffer.
     */
    public abstract int get ();
  
--- 320,326 ----
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>int</code>s in this buffer.
     */
    public abstract int get ();
  
*************** public abstract class IntBuffer extends 
*** 319,325 ****
     * and then increments the position.
     *
     * @exception BufferOverflowException If there no remaining 
!    * <code>ints</code> in this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public abstract IntBuffer put (int b);
--- 329,335 ----
     * 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);
diff -Nrcpad gcc-3.4.3/libjava/java/nio/IntBufferImpl.java gcc-4.0.0/libjava/java/nio/IntBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/IntBufferImpl.java	Fri Jun 27 13:34:11 2003
--- gcc-4.0.0/libjava/java/nio/IntBufferImpl.java	Thu Feb 17 18:13:06 2005
***************
*** 1,5 ****
  /* IntBufferImpl.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* IntBufferImpl.java -- 
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class IntBufferImpl extends IntBuf
*** 52,58 ****
    
    IntBufferImpl (int[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
    {
!     super (buffer, offset, capacity, limit, position, mark);
      this.readOnly = readOnly;
    }
    
--- 52,60 ----
    
    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;
    }
    
*************** final class IntBufferImpl extends IntBuf
*** 78,83 ****
--- 80,87 ----
    
    public IntBuffer compact ()
    {
+     checkIfReadOnly();
+     mark = -1;
      int copied = 0;
      
      while (remaining () > 0)
*************** final class IntBufferImpl extends IntBuf
*** 87,92 ****
--- 91,97 ----
        }
  
      position (copied);
+     limit(capacity());
      return this;
    }
    
*************** final class IntBufferImpl extends IntBuf
*** 96,105 ****
    }
  
    /**
!    * Relative get method. Reads the next <code>int</code> from the buffer.
     */
!   final public int get ()
    {
      int result = backing_buffer [position ()];
      position (position () + 1);
      return result;
--- 101,116 ----
    }
  
    /**
!    * 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;
*************** final class IntBufferImpl extends IntBuf
*** 108,121 ****
    /**
     * Relative put method. Writes <code>value</code> to the next position
     * in the buffer.
!    * 
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
!   final public IntBuffer put (int value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
! 	  	    
      backing_buffer [position ()] = value;
      position (position () + 1);
      return this;
--- 119,134 ----
    /**
     * 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;
*************** final class IntBufferImpl extends IntBuf
*** 128,156 ****
     * @exception IndexOutOfBoundsException If index is negative or not smaller
     * than the buffer's limit.
     */
!   final public int get (int index)
    {
      return backing_buffer [index];
    }
    
    /**
!    * Absolute put method. Writes <code>value</value> 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.
     */
!   final public IntBuffer put (int index, int value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
!     	    
      backing_buffer [index] = value;
      return this;
    }
    
!   final public ByteOrder order ()
    {
      return ByteOrder.nativeOrder ();
    }
--- 141,171 ----
     * @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-3.4.3/libjava/java/nio/IntViewBufferImpl.java gcc-4.0.0/libjava/java/nio/IntViewBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/IntViewBufferImpl.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/IntViewBufferImpl.java	Thu Feb 17 18:13:06 2005
*************** exception statement from your version. *
*** 38,44 ****
  
  package java.nio;
  
! class IntViewBufferImpl extends IntBuffer
  {
    /** Position in bb (i.e. a byte offset) where this buffer starts. */
    private int offset;
--- 38,44 ----
  
  package java.nio;
  
! final class IntViewBufferImpl extends IntBuffer
  {
    /** Position in bb (i.e. a byte offset) where this buffer starts. */
    private int offset;
*************** class IntViewBufferImpl extends IntBuffe
*** 46,62 ****
    private boolean readOnly;
    private ByteOrder endian;
    
    public IntViewBufferImpl (ByteBuffer bb, int offset, int capacity,
  			    int limit, int position, int mark,
  			    boolean readOnly, ByteOrder endian)
    {
!     super (limit >> 2, limit >> 2, position >> 2, mark >> 2);
      this.bb = bb;
      this.offset = offset;
      this.readOnly = readOnly;
      this.endian = endian;
    }
  
    public int get ()
    {
      int p = position();
--- 46,82 ----
    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();
*************** class IntViewBufferImpl extends IntBuffe
*** 65,70 ****
--- 85,97 ----
      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);
*************** class IntViewBufferImpl extends IntBuffe
*** 93,98 ****
--- 120,130 ----
          position (count);
          limit (capacity ());
        }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
      return this;
    }
    
diff -Nrcpad gcc-3.4.3/libjava/java/nio/LongBuffer.java gcc-4.0.0/libjava/java/nio/LongBuffer.java
*** gcc-3.4.3/libjava/java/nio/LongBuffer.java	Tue May 20 08:58:31 2003
--- gcc-4.0.0/libjava/java/nio/LongBuffer.java	Fri Oct 22 17:14:17 2004
***************
*** 1,5 ****
  /* LongBuffer.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LongBuffer.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class LongBuffer extends
*** 53,65 ****
      array_offset = 0;
    }
  
-   LongBuffer (long[] buffer, int offset, int capacity, int limit, int position, int mark)
-   {
-     super (capacity, limit, position, mark);
-     this.backing_buffer = buffer;
-     this.array_offset = offset;
-   }
- 
    /**
     * Allocates a new <code>LongBuffer</code> object with a given capacity.
     */
--- 53,58 ----
*************** public abstract class LongBuffer extends
*** 75,81 ****
     * @exception IndexOutOfBoundsException If the preconditions on the offset
     * and length parameters do not hold
     */
!   final public static LongBuffer wrap (long[] array, int offset, int length)
    {
      return new LongBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
    }
--- 68,74 ----
     * @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);
    }
*************** public abstract class LongBuffer extends
*** 84,97 ****
     * Wraps a <code>long</code> array into a <code>LongBuffer</code>
     * object.
     */
!   final public static LongBuffer wrap (long[] array)
    {
      return wrap (array, 0, array.length);
    }
    
    /**
!    * This method transfers <code>longs<code> from this buffer into the given
!    * destination array.
     *
     * @param dst The destination array
     * @param offset The offset within the array of the first <code>long</code>
--- 77,91 ----
     * 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>
*************** public abstract class LongBuffer extends
*** 100,111 ****
     * must be non-negative and no larger than dst.length - offset.
     *
     * @exception BufferUnderflowException If there are fewer than length
!    * <code>longs</code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        {
          dst [i] = get ();
--- 94,108 ----
     * 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 ();
*************** public abstract class LongBuffer extends
*** 115,127 ****
    }
  
    /**
!    * This method transfers <code>longs<code> 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>longs</code> remaining in this buffer.
     */
    public LongBuffer get (long[] dst)
    {
--- 112,124 ----
    }
  
    /**
!    * 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)
    {
*************** public abstract class LongBuffer extends
*** 130,141 ****
  
    /**
     * Writes the content of the the <code>LongBUFFER</code> src
!    * into the buffer.
     *
     * @param src The source data.
     *
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>longs<code> in the source buffer.
     * @exception IllegalArgumentException If the source buffer is this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
--- 127,139 ----
  
    /**
     * 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 abstract class LongBuffer extends
*** 144,157 ****
      if (src == this)
        throw new IllegalArgumentException ();
  
!     if (src.remaining () > remaining ())
!       throw new BufferOverflowException ();
  
      if (src.remaining () > 0)
        {
          long[] toPut = new long [src.remaining ()];
          src.get (toPut);
!         src.put (toPut);
        }
  
      return this;
--- 142,154 ----
      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;
*************** public abstract class LongBuffer extends
*** 159,165 ****
  
    /**
     * Writes the content of the the <code>long array</code> src
!    * into the buffer.
     *
     * @param src The array to copy into the buffer.
     * @param offset The offset within the array of the first byte to be read;
--- 156,163 ----
  
    /**
     * 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;
*************** public abstract class LongBuffer extends
*** 168,180 ****
     * 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>longs<code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        put (src [i]);
  
--- 166,181 ----
     * 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]);
  
*************** public abstract class LongBuffer extends
*** 188,194 ****
     * @param src The array to copy into the buffer.
     * 
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>longs<code> in the source array.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public final LongBuffer put (long[] src)
--- 189,195 ----
     * @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)
*************** public abstract class LongBuffer extends
*** 218,225 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return backing_buffer;
    }
--- 219,225 ----
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     checkIfReadOnly();
      
      return backing_buffer;
    }
*************** public abstract class LongBuffer extends
*** 236,254 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return array_offset;
    }
  
    /**
     * Calculates a hash code for this buffer.
     */
    public int hashCode ()
    {
!     // FIXME: Check what SUN calculates here.
!     return super.hashCode ();
    }
  
    /**
--- 236,269 ----
      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);
    }
  
    /**
*************** public abstract class LongBuffer extends
*** 272,303 ****
     */
    public int compareTo (Object obj)
    {
!     LongBuffer a = (LongBuffer) obj;
! 
!     if (a.remaining () != remaining ())
!       return 1;
! 
!     if (! hasArray () ||
!         ! a.hasArray ())
!       {
!         return 1;
!       }
! 
!     int r = remaining ();
!     int i1 = position ();
!     int i2 = a.position ();
  
!     for (int i = 0; i < r; i++)
        {
!         int t = (int) (get (i1) - a.get (i2));
! 
!         if (t != 0)
!           {
!             return (int) t;
!           }
        }
! 
!     return 0;
    }
  
    /**
--- 287,313 ----
     */
    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();
    }
  
    /**
*************** public abstract class LongBuffer extends
*** 310,316 ****
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>longs</code> in this buffer.
     */
    public abstract long get ();
  
--- 320,326 ----
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>long</code>s in this buffer.
     */
    public abstract long get ();
  
*************** public abstract class LongBuffer extends
*** 319,325 ****
     * and then increments the position.
     *
     * @exception BufferOverflowException If there no remaining 
!    * <code>longs</code> in this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public abstract LongBuffer put (long b);
--- 329,335 ----
     * 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);
diff -Nrcpad gcc-3.4.3/libjava/java/nio/LongBufferImpl.java gcc-4.0.0/libjava/java/nio/LongBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/LongBufferImpl.java	Fri Jun 27 13:34:12 2003
--- gcc-4.0.0/libjava/java/nio/LongBufferImpl.java	Thu Feb 17 18:13:07 2005
***************
*** 1,5 ****
  /* LongBufferImpl.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LongBufferImpl.java -- 
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class LongBufferImpl extends LongB
*** 52,58 ****
    
    LongBufferImpl (long[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
    {
!     super (buffer, offset, capacity, limit, position, mark);
      this.readOnly = readOnly;
    }
    
--- 52,60 ----
    
    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;
    }
    
*************** final class LongBufferImpl extends LongB
*** 78,83 ****
--- 80,87 ----
    
    public LongBuffer compact ()
    {
+     checkIfReadOnly();
+     mark = -1;
      int copied = 0;
      
      while (remaining () > 0)
*************** final class LongBufferImpl extends LongB
*** 87,92 ****
--- 91,97 ----
        }
  
      position (copied);
+     limit(capacity());
      return this;
    }
    
*************** final class LongBufferImpl extends LongB
*** 96,105 ****
    }
  
    /**
!    * Relative get method. Reads the next <code>long</code> from the buffer.
     */
!   final public long get ()
    {
      long result = backing_buffer [position ()];
      position (position () + 1);
      return result;
--- 101,116 ----
    }
  
    /**
!    * 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;
*************** final class LongBufferImpl extends LongB
*** 108,121 ****
    /**
     * Relative put method. Writes <code>value</code> to the next position
     * in the buffer.
!    * 
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
!   final public LongBuffer put (long value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
! 	  	    
      backing_buffer [position ()] = value;
      position (position () + 1);
      return this;
--- 119,134 ----
    /**
     * 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;
*************** final class LongBufferImpl extends LongB
*** 128,156 ****
     * @exception IndexOutOfBoundsException If index is negative or not smaller
     * than the buffer's limit.
     */
!   final public long get (int index)
    {
      return backing_buffer [index];
    }
    
    /**
!    * Absolute put method. Writes <code>value</value> 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.
     */
!   final public LongBuffer put (int index, long value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
!     	    
      backing_buffer [index] = value;
      return this;
    }
    
!   final public ByteOrder order ()
    {
      return ByteOrder.nativeOrder ();
    }
--- 141,171 ----
     * @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-3.4.3/libjava/java/nio/LongViewBufferImpl.java gcc-4.0.0/libjava/java/nio/LongViewBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/LongViewBufferImpl.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/LongViewBufferImpl.java	Thu Feb 17 18:13:07 2005
*************** exception statement from your version. *
*** 38,44 ****
  
  package java.nio;
  
! class LongViewBufferImpl extends LongBuffer
  {
    /** Position in bb (i.e. a byte offset) where this buffer starts. */
    private int offset;
--- 38,44 ----
  
  package java.nio;
  
! final class LongViewBufferImpl extends LongBuffer
  {
    /** Position in bb (i.e. a byte offset) where this buffer starts. */
    private int offset;
*************** class LongViewBufferImpl extends LongBuf
*** 46,62 ****
    private boolean readOnly;
    private ByteOrder endian;
    
    public LongViewBufferImpl (ByteBuffer bb, int offset, int capacity,
  			     int limit, int position, int mark,
  			     boolean readOnly, ByteOrder endian)
    {
!     super (limit >> 3, limit >> 3, position >> 3, mark >> 3);
      this.bb = bb;
      this.offset = offset;
      this.readOnly = readOnly;
      this.endian = endian;
    }
  
    public long get ()
    {
      int p = position();
--- 46,82 ----
    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();
*************** class LongViewBufferImpl extends LongBuf
*** 65,70 ****
--- 85,97 ----
      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);
*************** class LongViewBufferImpl extends LongBuf
*** 93,98 ****
--- 120,130 ----
          position (count);
          limit (capacity ());
        }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
      return this;
    }
    
diff -Nrcpad gcc-3.4.3/libjava/java/nio/MappedByteBuffer.java gcc-4.0.0/libjava/java/nio/MappedByteBuffer.java
*** gcc-3.4.3/libjava/java/nio/MappedByteBuffer.java	Mon Oct 13 04:45:03 2003
--- gcc-4.0.0/libjava/java/nio/MappedByteBuffer.java	Sat Oct 16 18:06:02 2004
***************
*** 1,5 ****
  /* MappedByteBuffer.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MappedByteBuffer.java -- 
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,71 ****
  package java.nio;
  
  /**
!  * @author Michael Koch
   * @since 1.4
   */
  public abstract class MappedByteBuffer extends ByteBuffer
  {
-   private boolean loaded = false;
-   
    MappedByteBuffer (int capacity, int limit, int position, int mark)
    {
      super (capacity, limit, position, mark);
    }
    
    public final MappedByteBuffer force ()
    {
!     // FIXME: Flush to disk here.
      return this;
    }
      
    public final boolean isLoaded ()
    {
!     return loaded;
    }
      
    public final MappedByteBuffer load ()
    {
!     // FIXME: Try to load all pages into memory.
!     loaded = true;
      return this;
    }
  }
--- 39,89 ----
  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 () { unmapImpl(); }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/MappedByteBufferImpl.java gcc-4.0.0/libjava/java/nio/MappedByteBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/MappedByteBufferImpl.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/MappedByteBufferImpl.java	Thu Feb 17 18:13:07 2005
*************** exception statement from your version. *
*** 38,306 ****
  
  package java.nio;
  
- import java.io.IOException;
- import java.nio.channels.FileChannelImpl;
  import gnu.gcj.RawData;
  
! public class MappedByteBufferImpl extends MappedByteBuffer
  {
    boolean readOnly;
-   RawData map_address;
-   public FileChannelImpl ch;
-   
-   public MappedByteBufferImpl (FileChannelImpl ch) throws IOException
-   {
-     super ((int) ch.size (), (int) ch.size (), 0, -1);
-     
-     this.ch = ch;
-     map_address = ch.map_address;
-     long si = ch.size () / 1;
-     limit ((int) si);
-   }
  
!   public MappedByteBufferImpl (FileChannelImpl ch, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
    {
!     super (capacity, limit, position, mark);
! 
!     this.ch = ch;
!     this.array_offset = offset;
      this.readOnly = readOnly;
    }
!   
!   public boolean isReadOnly ()
    {
      return readOnly;
    }
    
!   public static byte getImpl (FileChannelImpl ch, int index,
! 			      int limit, RawData map_address)
    {
!     throw new Error ("Not implemented");
    }
!   
!   public static void putImpl (FileChannelImpl ch, int index,
! 			      int limit, byte value, RawData map_address)
    {
!     throw new Error ("Not implemented");
    }
  
!   public byte get ()
    {
!     byte result = get (position());
!     position (position() + 1);
!     return result;
    }
  
!   public ByteBuffer put (byte value)
    {
!     put (position(), value);
!     position (position() + 1);
      return this;
    }
  
!   public byte get (int index)
    {
!     return getImpl (ch, index, limit (), map_address);
!   }
  
!   public ByteBuffer put (int index, byte value)
!   {
!     putImpl (ch, index, limit (), value, map_address);
      return this;
    }
  
!   public ByteBuffer compact ()
    {
      int pos = position();
      if (pos > 0)
        {
  	int count = remaining();
! 	shiftDown(0, pos, count);
  	position(count);
  	limit(capacity());
        }
      return this;
    }
  
!   public boolean isDirect ()
    {
      return true;
    }
  
!   public ByteBuffer slice ()
    {
!     throw new Error ("Not implemented");
    }
  
!   public ByteBuffer duplicate ()
    {
!     throw new Error ("Not implemented");
    }
  
!   public ByteBuffer asReadOnlyBuffer ()
    {
!     throw new Error ("Not implemented");
    }
  
!   public CharBuffer asCharBuffer ()
    {
!     return new CharViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
!   public ShortBuffer asShortBuffer ()
    {
!     return new ShortViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
!   public IntBuffer asIntBuffer ()
    {
!     return new IntViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
!   
!   public LongBuffer asLongBuffer ()
    {
!     return new LongViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
!   public FloatBuffer asFloatBuffer ()
    {
!     return new FloatViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
!   public DoubleBuffer asDoubleBuffer ()
    {
!     return new DoubleViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
    }
  
!   final public char getChar ()
    {
      return ByteBufferHelper.getChar(this, order());
    }
    
!   final public ByteBuffer putChar (char value)
    {
      ByteBufferHelper.putChar(this, value, order());
      return this;
    }
    
!   final public char getChar (int index)
    {
      return ByteBufferHelper.getChar(this, index, order());
    }
    
!   final public ByteBuffer putChar (int index, char value)
    {
      ByteBufferHelper.putChar(this, index, value, order());
      return this;
    }
  
!   final public short getShort ()
    {
      return ByteBufferHelper.getShort(this, order());
    }
    
!   final public ByteBuffer putShort (short value)
    {
      ByteBufferHelper.putShort(this, value, order());
      return this;
    }
    
!   final public short getShort (int index)
    {
      return ByteBufferHelper.getShort(this, index, order());
    }
    
!   final public ByteBuffer putShort (int index, short value)
    {
      ByteBufferHelper.putShort(this, index, value, order());
      return this;
    }
  
!   final public int getInt ()
    {
      return ByteBufferHelper.getInt(this, order());
    }
    
!   final public ByteBuffer putInt (int value)
    {
      ByteBufferHelper.putInt(this, value, order());
      return this;
    }
    
!   final public int getInt (int index)
    {
      return ByteBufferHelper.getInt(this, index, order());
    }
    
!   final public ByteBuffer putInt (int index, int value)
    {
      ByteBufferHelper.putInt(this, index, value, order());
      return this;
    }
  
!   final public long getLong ()
    {
      return ByteBufferHelper.getLong(this, order());
    }
    
!   final public ByteBuffer putLong (long value)
    {
!     ByteBufferHelper.putLong (this, value, order());
      return this;
    }
    
!   final public long getLong (int index)
    {
!     return ByteBufferHelper.getLong (this, index, order());
    }
    
!   final public ByteBuffer putLong (int index, long value)
    {
!     ByteBufferHelper.putLong (this, index, value, order());
      return this;
    }
  
!   final public float getFloat ()
    {
!     return ByteBufferHelper.getFloat (this, order());
    }
    
!   final public ByteBuffer putFloat (float value)
    {
!     ByteBufferHelper.putFloat (this, value, order());
      return this;
    }
    
!   public final float getFloat (int index)
    {
!     return ByteBufferHelper.getFloat (this, index, order());
    }
  
!   final public ByteBuffer putFloat (int index, float value)
    {
!     ByteBufferHelper.putFloat (this, index, value, order());
      return this;
    }
  
!   final public double getDouble ()
    {
!     return ByteBufferHelper.getDouble (this, order());
    }
  
!   final public ByteBuffer putDouble (double value)
    {
!     ByteBufferHelper.putDouble (this, value, order());
      return this;
    }
    
!   final public double getDouble (int index)
    {
!     return ByteBufferHelper.getDouble (this, index, order());
    }
    
!   final public ByteBuffer putDouble (int index, double value)
    {
!     ByteBufferHelper.putDouble (this, index, value, order());
      return this;
    }
  }
--- 38,360 ----
  
  package java.nio;
  
  import gnu.gcj.RawData;
  
! 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 RawData 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(RawData 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-3.4.3/libjava/java/nio/ShortBuffer.java gcc-4.0.0/libjava/java/nio/ShortBuffer.java
*** gcc-3.4.3/libjava/java/nio/ShortBuffer.java	Tue May 20 08:58:31 2003
--- gcc-4.0.0/libjava/java/nio/ShortBuffer.java	Fri Oct 22 17:14:18 2004
***************
*** 1,5 ****
  /* ShortBuffer.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ShortBuffer.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class ShortBuffer extend
*** 53,65 ****
      array_offset = 0;
    }
  
-   ShortBuffer (short[] buffer, int offset, int capacity, int limit, int position, int mark)
-   {
-     super (capacity, limit, position, mark);
-     this.backing_buffer = buffer;
-     this.array_offset = offset;
-   }
- 
    /**
     * Allocates a new <code>ShortBuffer</code> object with a given capacity.
     */
--- 53,58 ----
*************** public abstract class ShortBuffer extend
*** 75,81 ****
     * @exception IndexOutOfBoundsException If the preconditions on the offset
     * and length parameters do not hold
     */
!   final public static ShortBuffer wrap (short[] array, int offset, int length)
    {
      return new ShortBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
    }
--- 68,74 ----
     * @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);
    }
*************** public abstract class ShortBuffer extend
*** 84,97 ****
     * Wraps a <code>short</code> array into a <code>ShortBuffer</code>
     * object.
     */
!   final public static ShortBuffer wrap (short[] array)
    {
      return wrap (array, 0, array.length);
    }
    
    /**
!    * This method transfers <code>shorts<code> from this buffer into the given
!    * destination array.
     *
     * @param dst The destination array
     * @param offset The offset within the array of the first <code>short</code>
--- 77,91 ----
     * 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>
*************** public abstract class ShortBuffer extend
*** 100,111 ****
     * must be non-negative and no larger than dst.length - offset.
     *
     * @exception BufferUnderflowException If there are fewer than length
!    * <code>shorts</code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        {
          dst [i] = get ();
--- 94,108 ----
     * 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 ();
*************** public abstract class ShortBuffer extend
*** 115,127 ****
    }
  
    /**
!    * This method transfers <code>shorts<code> 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>shorts</code> remaining in this buffer.
     */
    public ShortBuffer get (short[] dst)
    {
--- 112,124 ----
    }
  
    /**
!    * 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)
    {
*************** public abstract class ShortBuffer extend
*** 130,141 ****
  
    /**
     * Writes the content of the the <code>ShortBUFFER</code> src
!    * into the buffer.
     *
     * @param src The source data.
     *
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>shorts<code> in the source buffer.
     * @exception IllegalArgumentException If the source buffer is this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
--- 127,139 ----
  
    /**
     * 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 abstract class ShortBuffer extend
*** 144,157 ****
      if (src == this)
        throw new IllegalArgumentException ();
  
!     if (src.remaining () > remaining ())
!       throw new BufferOverflowException ();
  
      if (src.remaining () > 0)
        {
          short[] toPut = new short [src.remaining ()];
          src.get (toPut);
!         src.put (toPut);
        }
  
      return this;
--- 142,154 ----
      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;
*************** public abstract class ShortBuffer extend
*** 159,165 ****
  
    /**
     * Writes the content of the the <code>short array</code> src
!    * into the buffer.
     *
     * @param src The array to copy into the buffer.
     * @param offset The offset within the array of the first byte to be read;
--- 156,163 ----
  
    /**
     * 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;
*************** public abstract class ShortBuffer extend
*** 168,180 ****
     * 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>shorts<code> 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)
    {
      for (int i = offset; i < offset + length; i++)
        put (src [i]);
  
--- 166,181 ----
     * 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]);
  
*************** public abstract class ShortBuffer extend
*** 188,194 ****
     * @param src The array to copy into the buffer.
     * 
     * @exception BufferOverflowException If there is insufficient space in this
!    * buffer for the remaining <code>shorts<code> in the source array.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public final ShortBuffer put (short[] src)
--- 189,195 ----
     * @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)
*************** public abstract class ShortBuffer extend
*** 218,225 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return backing_buffer;
    }
--- 219,225 ----
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     checkIfReadOnly();
      
      return backing_buffer;
    }
*************** public abstract class ShortBuffer extend
*** 236,254 ****
      if (backing_buffer == null)
        throw new UnsupportedOperationException ();
  
!     if (isReadOnly ())
!       throw new ReadOnlyBufferException ();
      
      return array_offset;
    }
  
    /**
     * Calculates a hash code for this buffer.
     */
    public int hashCode ()
    {
!     // FIXME: Check what SUN calculates here.
!     return super.hashCode ();
    }
  
    /**
--- 236,269 ----
      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;
    }
  
    /**
*************** public abstract class ShortBuffer extend
*** 272,303 ****
     */
    public int compareTo (Object obj)
    {
!     ShortBuffer a = (ShortBuffer) obj;
! 
!     if (a.remaining () != remaining ())
!       return 1;
! 
!     if (! hasArray () ||
!         ! a.hasArray ())
!       {
!         return 1;
!       }
! 
!     int r = remaining ();
!     int i1 = position ();
!     int i2 = a.position ();
  
!     for (int i = 0; i < r; i++)
        {
!         int t = (int) (get (i1) - a.get (i2));
! 
!         if (t != 0)
!           {
!             return (int) t;
!           }
        }
! 
!     return 0;
    }
  
    /**
--- 287,313 ----
     */
    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();
    }
  
    /**
*************** public abstract class ShortBuffer extend
*** 310,316 ****
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>shorts</code> in this buffer.
     */
    public abstract short get ();
  
--- 320,326 ----
     * and then increments the position.
     *
     * @exception BufferUnderflowException If there are no remaining
!    * <code>short</code>s in this buffer.
     */
    public abstract short get ();
  
*************** public abstract class ShortBuffer extend
*** 319,325 ****
     * and then increments the position.
     *
     * @exception BufferOverflowException If there no remaining 
!    * <code>shorts</code> in this buffer.
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
    public abstract ShortBuffer put (short b);
--- 329,335 ----
     * 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);
diff -Nrcpad gcc-3.4.3/libjava/java/nio/ShortBufferImpl.java gcc-4.0.0/libjava/java/nio/ShortBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/ShortBufferImpl.java	Fri Jun 27 13:34:12 2003
--- gcc-4.0.0/libjava/java/nio/ShortBufferImpl.java	Thu Feb 17 18:13:07 2005
***************
*** 1,5 ****
  /* ShortBufferImpl.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ShortBufferImpl.java -- 
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** final class ShortBufferImpl extends Shor
*** 52,58 ****
    
    ShortBufferImpl (short[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
    {
!     super (buffer, offset, capacity, limit, position, mark);
      this.readOnly = readOnly;
    }
    
--- 52,60 ----
    
    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;
    }
    
*************** final class ShortBufferImpl extends Shor
*** 78,83 ****
--- 80,87 ----
    
    public ShortBuffer compact ()
    {
+     checkIfReadOnly();
+     mark = -1;
      int copied = 0;
      
      while (remaining () > 0)
*************** final class ShortBufferImpl extends Shor
*** 87,92 ****
--- 91,97 ----
        }
  
      position (copied);
+     limit(capacity());
      return this;
    }
    
*************** final class ShortBufferImpl extends Shor
*** 96,105 ****
    }
  
    /**
!    * Relative get method. Reads the next <code>short</code> from the buffer.
     */
!   final public short get ()
    {
      short result = backing_buffer [position ()];
      position (position () + 1);
      return result;
--- 101,116 ----
    }
  
    /**
!    * 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;
*************** final class ShortBufferImpl extends Shor
*** 108,121 ****
    /**
     * Relative put method. Writes <code>value</code> to the next position
     * in the buffer.
!    * 
     * @exception ReadOnlyBufferException If this buffer is read-only.
     */
!   final public ShortBuffer put (short value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
! 	  	    
      backing_buffer [position ()] = value;
      position (position () + 1);
      return this;
--- 119,134 ----
    /**
     * 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;
*************** final class ShortBufferImpl extends Shor
*** 128,156 ****
     * @exception IndexOutOfBoundsException If index is negative or not smaller
     * than the buffer's limit.
     */
!   final public short get (int index)
    {
      return backing_buffer [index];
    }
    
    /**
!    * Absolute put method. Writes <code>value</value> 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.
     */
!   final public ShortBuffer put (int index, short value)
    {
!     if (readOnly)
!       throw new ReadOnlyBufferException ();
!     	    
      backing_buffer [index] = value;
      return this;
    }
    
!   final public ByteOrder order ()
    {
      return ByteOrder.nativeOrder ();
    }
--- 141,171 ----
     * @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-3.4.3/libjava/java/nio/ShortViewBufferImpl.java gcc-4.0.0/libjava/java/nio/ShortViewBufferImpl.java
*** gcc-3.4.3/libjava/java/nio/ShortViewBufferImpl.java	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/ShortViewBufferImpl.java	Thu Feb 17 18:13:07 2005
*************** exception statement from your version. *
*** 38,62 ****
  
  package java.nio;
  
! 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;
    
    public ShortViewBufferImpl (ByteBuffer bb, int offset, int capacity,
  			      int limit, int position, int mark,
  			      boolean readOnly, ByteOrder endian)
    {
!     super (limit >> 1, limit >> 1, position >> 1, mark >> 1);
      this.bb = bb;
      this.offset = offset;
      this.readOnly = readOnly;
      this.endian = endian;
    }
  
    public short get ()
    {
      int p = position();
--- 38,82 ----
  
  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();
*************** class ShortViewBufferImpl extends ShortB
*** 65,70 ****
--- 85,97 ----
      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);
*************** class ShortViewBufferImpl extends ShortB
*** 93,98 ****
--- 120,130 ----
          position (count);
          limit (capacity ());
        }
+     else
+       {
+ 	position(limit());
+ 	limit(capacity());
+       }
      return this;
    }
    
diff -Nrcpad gcc-3.4.3/libjava/java/nio/VMDirectByteBuffer.java gcc-4.0.0/libjava/java/nio/VMDirectByteBuffer.java
*** gcc-3.4.3/libjava/java/nio/VMDirectByteBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/nio/VMDirectByteBuffer.java	Wed Nov 24 10:44:17 2004
***************
*** 0 ****
--- 1,53 ----
+ /* VMDirectByteBuffer.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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.Configuration;
+ import gnu.gcj.RawData;
+ 
+ final class VMDirectByteBuffer
+ {
+   static native RawData allocate (int capacity);
+   static native void free(RawData address);
+   static native byte get(RawData address, int index);
+   static native void get(RawData address, int index, byte[] dst, int offset, int length);
+   static native void put(RawData address, int index, byte value);
+   static native RawData adjustAddress(RawData address, int offset);
+   static native void shiftDown(RawData address, int dst_offset, int src_offset, int count);
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/AlreadyConnectedException.java gcc-4.0.0/libjava/java/nio/channels/AlreadyConnectedException.java
*** gcc-3.4.3/libjava/java/nio/channels/AlreadyConnectedException.java	Wed Nov 13 13:52:47 2002
--- gcc-4.0.0/libjava/java/nio/channels/AlreadyConnectedException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* AlreadyConnectedException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* AlreadyConnectedException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/AsynchronousCloseException.java gcc-4.0.0/libjava/java/nio/channels/AsynchronousCloseException.java
*** gcc-3.4.3/libjava/java/nio/channels/AsynchronousCloseException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/AsynchronousCloseException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* AsynchronousCloseException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* AsynchronousCloseException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/ByteChannel.java gcc-4.0.0/libjava/java/nio/channels/ByteChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/ByteChannel.java	Mon Oct  7 07:59:12 2002
--- gcc-4.0.0/libjava/java/nio/channels/ByteChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* ByteChannel.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* ByteChannel.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,43 ****
  
  package java.nio.channels;
  
! public interface ByteChannel
!   extends ReadableByteChannel, WritableByteChannel
  {
  }
--- 37,43 ----
  
  package java.nio.channels;
  
! public interface ByteChannel extends ReadableByteChannel,
!                                      WritableByteChannel
  {
  }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/CancelledKeyException.java gcc-4.0.0/libjava/java/nio/channels/CancelledKeyException.java
*** gcc-3.4.3/libjava/java/nio/channels/CancelledKeyException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/CancelledKeyException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* CancelledKeyException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* CancelledKeyException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/Channel.java gcc-4.0.0/libjava/java/nio/channels/Channel.java
*** gcc-3.4.3/libjava/java/nio/channels/Channel.java	Sat Oct 11 18:45:10 2003
--- gcc-4.0.0/libjava/java/nio/channels/Channel.java	Thu Feb 17 07:48:38 2005
***************
*** 1,5 ****
! /* Channel.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Channel.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  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
*** 43,48 ****
--- 44,52 ----
  {
    /**
     * Tells whether this channel is open or not
+    *
+    * @return <code>true</code>if channel is open,
+    * <code>false</code> otherwise
     */
    boolean isOpen();
  
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/Channels.java gcc-4.0.0/libjava/java/nio/channels/Channels.java
*** gcc-3.4.3/libjava/java/nio/channels/Channels.java	Fri Dec 19 20:42:00 2003
--- gcc-4.0.0/libjava/java/nio/channels/Channels.java	Wed Feb 23 08:26:36 2005
***************
*** 1,5 ****
! /* Channels.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Channels.java --
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
--- 35,52 ----
  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.ChannelInputStream;
  import gnu.java.nio.ChannelOutputStream;
+ import gnu.java.nio.ChannelReader;
  import gnu.java.nio.InputStreamChannel;
  import gnu.java.nio.OutputStreamChannel;
+ import gnu.java.nio.channels.FileChannelImpl;
+ 
+ import java.io.FileInputStream;
+ import java.io.FileOutputStream;
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.io.Reader;
*************** import java.nio.charset.Charset;
*** 49,75 ****
  import java.nio.charset.CharsetDecoder;
  import java.nio.charset.CharsetEncoder;
  
  /**
   * @since 1.4
   */
! public final class Channels 
  {
    /**
     * Constructs a stream that reads bytes from the given channel.
     */
    public static InputStream newInputStream(ReadableByteChannel ch)
    {
      return new ChannelInputStream(ch);
    }
!   
    /**
     * Constructs a stream that writes bytes to the given channel.
     */
!   public static OutputStream newOutputStream(WritableByteChannel ch) 
    {
      return new ChannelOutputStream(ch);
    }
!   
    /**
     * Constructs a channel that reads bytes from the given stream.
     */
--- 55,98 ----
  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)
    {
+     if (ch instanceof FileChannelImpl)
+       return newInputStream((FileChannelImpl) ch);
      return new ChannelInputStream(ch);
    }
! 
    /**
     * Constructs a stream that writes bytes to the given channel.
     */
!   public static OutputStream newOutputStream(WritableByteChannel ch)
    {
+     if (ch instanceof FileChannelImpl)
+       return newOutputStream((FileChannelImpl) ch);
      return new ChannelOutputStream(ch);
    }
! 
!   static native FileInputStream newInputStream(FileChannelImpl ch);
! 
!   static native FileOutputStream newOutputStream(FileChannelImpl ch);
! 
    /**
     * Constructs a channel that reads bytes from the given stream.
     */
*************** public final class Channels 
*** 77,99 ****
    {
      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)
    {
!     throw new Error ("not implemented");
    }
  
    /**
--- 100,122 ----
    {
      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);
    }
  
    /**
*************** public final class Channels 
*** 103,121 ****
     * @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)
    {
!     throw new Error ("not implemented");
    }
  
    /**
--- 126,145 ----
     * @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");
    }
  
    /**
*************** public final class Channels 
*** 125,133 ****
     * @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);
    }
  }
--- 149,156 ----
     * @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-3.4.3/libjava/java/nio/channels/ClosedByInterruptException.java gcc-4.0.0/libjava/java/nio/channels/ClosedByInterruptException.java
*** gcc-3.4.3/libjava/java/nio/channels/ClosedByInterruptException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/ClosedByInterruptException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* ClosedByInterruptException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* ClosedByInterruptException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/ClosedChannelException.java gcc-4.0.0/libjava/java/nio/channels/ClosedChannelException.java
*** gcc-3.4.3/libjava/java/nio/channels/ClosedChannelException.java	Mon Nov 18 13:22:55 2002
--- gcc-4.0.0/libjava/java/nio/channels/ClosedChannelException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* ClosedChannelException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* ClosedChannelException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** package java.nio.channels;
*** 39,44 ****
--- 39,45 ----
  
  import java.io.IOException;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/ClosedSelectorException.java gcc-4.0.0/libjava/java/nio/channels/ClosedSelectorException.java
*** gcc-3.4.3/libjava/java/nio/channels/ClosedSelectorException.java	Mon Nov 18 13:22:55 2002
--- gcc-4.0.0/libjava/java/nio/channels/ClosedSelectorException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* ClosedSelectorException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* ClosedSelectorException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/ConnectionPendingException.java gcc-4.0.0/libjava/java/nio/channels/ConnectionPendingException.java
*** gcc-3.4.3/libjava/java/nio/channels/ConnectionPendingException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/ConnectionPendingException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* ConnectionPendingException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* ConnectionPendingException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/DatagramChannel.java gcc-4.0.0/libjava/java/nio/channels/DatagramChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/DatagramChannel.java	Tue Feb 11 06:48:53 2003
--- gcc-4.0.0/libjava/java/nio/channels/DatagramChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* DatagramChannel.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* DatagramChannel.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** import java.nio.ByteBuffer;
*** 44,62 ****
  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);
    }
  
    /**
--- 44,62 ----
  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);
    }
  
    /**
*************** public abstract class DatagramChannel
*** 64,103 ****
     *
     * @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.
     *
--- 64,103 ----
     *
     * @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.
     *
*************** public abstract class DatagramChannel
*** 111,117 ****
     * @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;
  
    /**
--- 111,117 ----
     * @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;
  
    /**
*************** public abstract class DatagramChannel
*** 119,125 ****
     *
     * @exception IOException If an error occurs
     */
!   public abstract DatagramChannel disconnect () throws IOException;
  
    /**
     * Tells whether or not this channel's socket is connected.
--- 119,125 ----
     *
     * @exception IOException If an error occurs
     */
!   public abstract DatagramChannel disconnect() throws IOException;
  
    /**
     * Tells whether or not this channel's socket is connected.
*************** public abstract class DatagramChannel
*** 127,148 ****
     * @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.
     *
--- 127,148 ----
     * @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.
     *
*************** public abstract class DatagramChannel
*** 156,163 ****
     * @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.
     *
--- 156,164 ----
     * @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.
     *
*************** public abstract class DatagramChannel
*** 171,199 ****
     * @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;
  
    /**
--- 172,200 ----
     * @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;
  
    /**
*************** public abstract class DatagramChannel
*** 202,209 ****
     * @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;
!   }    
  }
--- 203,210 ----
     * @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-3.4.3/libjava/java/nio/channels/FileChannel.java gcc-4.0.0/libjava/java/nio/channels/FileChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/FileChannel.java	Fri Jun 27 13:34:12 2003
--- gcc-4.0.0/libjava/java/nio/channels/FileChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* FileChannel.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* FileChannel.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** import java.nio.ByteBuffer;
*** 42,47 ****
--- 42,48 ----
  import java.nio.MappedByteBuffer;
  import java.nio.channels.spi.AbstractInterruptibleChannel;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
*************** public abstract class FileChannel extend
*** 52,61 ****
    public static class MapMode
    {
      int m;
! 
!     public static MapMode READ_ONLY  = new MapMode(0);
!     public static MapMode READ_WRITE = new MapMode(1);
!     public static MapMode PRIVATE    = new MapMode(2);
  
      /**
       * Initializes the MapMode.
--- 53,61 ----
    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.
*************** public abstract class FileChannel extend
*** 68,79 ****
      /**
       * 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";
      }
--- 68,79 ----
      /**
       * 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";
      }
*************** public abstract class FileChannel extend
*** 82,88 ****
    /**
     * Initializes the channel.
     */
!   protected FileChannel ()
    {
    }
  
--- 82,88 ----
    /**
     * Initializes the channel.
     */
!   protected FileChannel()
    {
    }
  
*************** public abstract class FileChannel extend
*** 102,135 ****
  
    /**
     * 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.
--- 102,133 ----
  
    /**
     * 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.
*************** public abstract class FileChannel extend
*** 145,151 ****
     * @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.
--- 143,150 ----
     * @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.
*************** public abstract class FileChannel extend
*** 154,166 ****
     */
    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;
  
    /**
--- 153,165 ----
     */
    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;
  
    /**
*************** public abstract class FileChannel extend
*** 168,181 ****
     *
     * @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;
    }
--- 167,178 ----
     *
     * @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;
    }
*************** public abstract class FileChannel extend
*** 186,192 ****
     * @exception IOException If an I/O error occurs.
     */
    public abstract int read(ByteBuffer dst) throws IOException;
!   
    /**
     * Reads data from the channel.
     *
--- 183,189 ----
     * @exception IOException If an I/O error occurs.
     */
    public abstract int read(ByteBuffer dst) throws IOException;
! 
    /**
     * Reads data from the channel.
     *
*************** public abstract class FileChannel extend
*** 201,208 ****
     * @exception NonReadableChannelException If this channel was not opened for
     * reading.
     */
!   public abstract int read(ByteBuffer dst, long position) throws IOException;
!   
    /**
     * Closes the channel.
     *
--- 198,206 ----
     * @exception NonReadableChannelException If this channel was not opened for
     * reading.
     */
!   public abstract int read(ByteBuffer dst, long position)
!     throws IOException;
! 
    /**
     * Closes the channel.
     *
*************** public abstract class FileChannel extend
*** 238,246 ****
     * 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);
    }
  
    /**
--- 236,244 ----
     * 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);
    }
  
    /**
*************** public abstract class FileChannel extend
*** 263,269 ****
     * @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;
  
    /**
--- 261,267 ----
     * @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;
  
    /**
*************** public abstract class FileChannel extend
*** 276,284 ****
     * 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);
    }
  
    /**
--- 274,282 ----
     * 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);
    }
  
    /**
*************** public abstract class FileChannel extend
*** 293,299 ****
     * 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;
  
    /**
--- 291,297 ----
     * 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;
  
    /**
*************** public abstract class FileChannel extend
*** 302,308 ****
     * @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.
--- 300,306 ----
     * @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.
*************** public abstract class FileChannel extend
*** 311,317 ****
     * @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
--- 309,316 ----
     * @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
*************** public abstract class FileChannel extend
*** 331,338 ****
     * @exception NonWritableChannelException If the target channel was not
     * opened for writing.
     */
!   public abstract long transferTo (long position, long count,
!                                    WritableByteChannel target)
      throws IOException;
  
    /**
--- 330,337 ----
     * @exception NonWritableChannelException If the target channel was not
     * opened for writing.
     */
!   public abstract long transferTo(long position, long count,
!                                   WritableByteChannel target)
      throws IOException;
  
    /**
*************** public abstract class FileChannel extend
*** 352,359 ****
     * @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>.
--- 351,358 ----
     * @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>.
*************** public abstract class FileChannel extend
*** 364,368 ****
     * @exception NonWritableChannelException If this channel was not opened for
     * writing.
     */
!   public abstract FileChannel truncate (long size) throws IOException;
  }
--- 363,367 ----
     * @exception NonWritableChannelException If this channel was not opened for
     * writing.
     */
!   public abstract FileChannel truncate(long size) throws IOException;
  }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/FileChannelImpl.java gcc-4.0.0/libjava/java/nio/channels/FileChannelImpl.java
*** gcc-3.4.3/libjava/java/nio/channels/FileChannelImpl.java	Fri Dec 19 19:06:34 2003
--- gcc-4.0.0/libjava/java/nio/channels/FileChannelImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 1,408 ****
- /* FileChannelImpl.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but 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.EOFException;
- import java.io.FileDescriptor;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.RandomAccessFile;
- import java.nio.ByteBuffer;
- import java.nio.MappedByteBuffer;
- import java.nio.MappedByteBufferImpl;
- import gnu.classpath.Configuration;
- import gnu.gcj.RawData;
- 
- /**
-  * 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 class FileChannelImpl extends FileChannel
- {
-   static
-   {
-     // load the shared library needed for native methods.
-     if (Configuration.INIT_LOAD_LIBRARY)
-       {
-         System.loadLibrary ("javanio");
-       }
-   }
-   
-   public RawData map_address;
-   
-   int length;
-   FileDescriptor fd;
-   MappedByteBuffer buf;
-   Object file_obj; // just to keep it live...
- 
-   public FileChannelImpl (FileDescriptor fd, boolean write, Object obj)
-   {
-     if (!(obj instanceof RandomAccessFile)
-         && !(obj instanceof FileInputStream)
-         && !(obj instanceof FileOutputStream))
-       throw new InternalError ();
- 
-     this.fd = fd;
-     this.file_obj = obj;
-   }
- 
-   public FileChannelImpl ()
-   {
-     this (new FileDescriptor (), true, null);
-   }
- 
-   private native long implPosition ();
-   private native FileChannel implPosition (long newPosition);
-   private native FileChannel implTruncate (long size);
-   
-   private native RawData nio_mmap_file (long pos, long size, int mode);
-   private native void nio_unmmap_file (RawData map_address, int size);
-   private native void nio_msync (RawData map_address, int length);
- 
-   public native long size () throws IOException;
-     
-   protected void implCloseChannel() throws IOException
-   {
-     if (map_address != null)
-       {
-         nio_unmmap_file (map_address, (int) length);
-         map_address = null;
-       }
- 
-     if (file_obj instanceof RandomAccessFile)
-       {
-         RandomAccessFile o = (RandomAccessFile) file_obj;
-         o.close();
-       }
-     else if (file_obj instanceof FileInputStream)
-       {
-         FileInputStream o = (FileInputStream) file_obj;
-         o.close();
-       }
-     else if (file_obj instanceof FileOutputStream)
-       {
-         FileOutputStream o = (FileOutputStream) file_obj;
-         o.close();
-       }
-   }
- 
-   public int read (ByteBuffer dst) throws IOException
-   {
-     // Check if file is mapped into memory.
-     if (buf != null)
-       {
- 	// FIXME: implement this
-         throw new Error ("Accessing mapped buffers not implemented.");
-       }
- 
-     // File not mapped, access it directly.
-     return implRead (dst);
-   }
- 
-   public int read (ByteBuffer dst, long position)
-     throws IOException
-   {
-     if (position < 0)
-       throw new IllegalArgumentException ();
- 
-     if (!isOpen ())
-       throw new ClosedChannelException ();
-    
-     if (file_obj instanceof FileOutputStream)
-       throw new NonReadableChannelException ();
- 
-     int result;
-     long oldPosition;
- 
-     oldPosition = implPosition ();
-     position (position);
-     result = implRead (dst);
-     implPosition (oldPosition);
-     
-     return result;
-   }
- 
-   private int implRead (ByteBuffer dst) throws IOException
-   {
-     int result;
-     byte[] buffer = new byte [dst.remaining ()];
-     
-     result = implRead (buffer, 0, buffer.length);
- 
-     if (result > 0)
-       dst.put (buffer, 0, result);
- 
-     return result;
-   }
-   
-   private native int implRead (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
-   {
-     // Check if file is mapped into memory.
-     if (buf != null)
-       {
- 	// FIXME: implement this
-         throw new Error ("Accessing mapped buffers not implemented.");
-       }
-     
-     // File not mapped, access it directly.
-     return implWrite (src);
-   }
-     
-   public int write (ByteBuffer src, long position)
-     throws IOException
-   {
-     if (position < 0)
-       throw new IllegalArgumentException ();
- 
-     if (!isOpen ())
-       throw new ClosedChannelException ();
-     
-     if (file_obj instanceof FileInputStream)
-        throw new NonWritableChannelException ();
- 
-     int result;
-     long oldPosition;
- 
-     oldPosition = implPosition ();
-     position (position);
-     result = implWrite (src);
-     implPosition (oldPosition);
-     
-     return result;
-   }
- 
-   private int implWrite (ByteBuffer src) throws IOException
-   {
-     byte[] buffer = new byte [src.remaining ()];
-     
-     src.get (buffer, 0, buffer.length);
-     return implWrite (buffer, 0, buffer.length);
-   }
-   
-   private native int implWrite (byte[] buffer, int offset, int length)
-     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 MappedByteBuffer map (FileChannel.MapMode mode, long position,
-                                long size)
-     throws IOException
-   {
-     if ((mode != MapMode.READ_ONLY
-          && mode != MapMode.READ_WRITE
-          && mode != MapMode.PRIVATE)
-         || position < 0
-         || size < 0
-         || size > Integer.MAX_VALUE)
-       throw new IllegalArgumentException ();
-     
-     // FIXME: Make this working.
-     int cmode = mode.m;
-     map_address = nio_mmap_file (position, size, cmode);
-     length = (int) size;
-     buf = new MappedByteBufferImpl (this);
-     return buf;
-   }
- 
-   static MappedByteBuffer create_direct_mapped_buffer (RawData map_address,
-                                                        long length)
-     throws IOException
-   {
-     FileChannelImpl ch = new FileChannelImpl ();
-     ch.map_address = map_address;
-     ch.length = (int) length;
-     ch.buf = new MappedByteBufferImpl (ch);
-     return ch.buf;			 
-   }
- 
-   /**
-    * msync with the disk
-    */
-   public void force (boolean metaData) throws IOException
-   {
-     if (!isOpen ())
-       throw new ClosedChannelException ();
- 
-     // FIXME: What to do with metaData ?
-     
-     nio_msync (map_address, length);
-   }
- 
-   public long transferTo (long position, long count, WritableByteChannel target)
-     throws IOException
-   {
-     if (position < 0
-         || count < 0)
-       throw new IllegalArgumentException ();
- 
-     if (!isOpen ())
-       throw new ClosedChannelException ();
- 
-     if (file_obj instanceof FileOutputStream)
-        throw new NonReadableChannelException ();
-    
-     // XXX: count needs to be casted from long to int. Dataloss ?
-     ByteBuffer buffer = ByteBuffer.allocate ((int) count);
-     read (buffer, position);
-     buffer.flip();
-     return target.write (buffer);
-   }
- 
-   public long transferFrom (ReadableByteChannel src, long position, long count)
-     throws IOException
-   {
-     if (position < 0
-         || count < 0)
-       throw new IllegalArgumentException ();
- 
-     if (!isOpen ())
-       throw new ClosedChannelException ();
- 
-     if (file_obj instanceof FileInputStream)
-        throw new NonWritableChannelException ();
- 
-     // XXX: count needs to be casted from long to int. Dataloss ?
-     ByteBuffer buffer = ByteBuffer.allocate ((int) count);
-     src.read (buffer);
-     buffer.flip();
-     return write (buffer, position);
-   }
- 
-   public FileLock lock (long position, long size, boolean shared)
-     throws IOException
-   {
-     if (position < 0
-         || size < 0)
-       throw new IllegalArgumentException ();
- 
-     if (!isOpen ())
-       throw new ClosedChannelException ();
- 
-     if (shared &&
-         file_obj instanceof FileOutputStream)
-       throw new NonReadableChannelException ();
- 	
-     if (!shared &&
-         file_obj instanceof FileInputStream)
-       throw new NonWritableChannelException ();
- 	
-     throw new Error ("Not implemented");
-   }
-   
-   public FileLock tryLock (long position, long size, boolean shared)
-     throws IOException
-   {
-     if (position < 0
-         || size < 0)
-       throw new IllegalArgumentException ();
- 
-     if (!isOpen ())
-       throw new ClosedChannelException ();
- 
-     throw new Error ("Not implemented");
-   }
- 
-   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 ();
- 
-     if (!isOpen ())
-       throw new ClosedChannelException ();
- 
-     return implPosition (newPosition);
-   }
-   
-   public FileChannel truncate (long size)
-     throws IOException
-   {
-     if (size < 0)
-       throw new IllegalArgumentException ();
- 
-     if (!isOpen ())
-       throw new ClosedChannelException ();
- 
-     if (file_obj instanceof FileInputStream)
-        throw new NonWritableChannelException ();
- 
-     return implTruncate (size);
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/FileLock.java gcc-4.0.0/libjava/java/nio/channels/FileLock.java
*** gcc-3.4.3/libjava/java/nio/channels/FileLock.java	Wed May 14 06:37:59 2003
--- gcc-4.0.0/libjava/java/nio/channels/FileLock.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* FileLock.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* FileLock.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** package java.nio.channels;
*** 39,44 ****
--- 39,45 ----
  
  import java.io.IOException;
  
+ 
  /**
   * @since 1.4
   */
*************** public abstract class FileLock
*** 48,89 ****
    long position;
    long size;
    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;
    }
--- 49,89 ----
    long position;
    long size;
    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;
    }
*************** public abstract class FileLock
*** 91,105 ****
    /**
     * 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;
--- 91,105 ----
    /**
     * 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;
*************** public abstract class FileLock
*** 114,128 ****
     * 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;
    }
--- 114,128 ----
     * 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;
    }
*************** public abstract class FileLock
*** 130,136 ****
    /**
     * Returns a string describing the range, type, and validity of this lock.
     */
!   public final String toString ()
    {
      return "file-lock:pos=" + position + "size=" + size;
    }
--- 130,136 ----
    /**
     * Returns a string describing the range, type, and validity of this lock.
     */
!   public final String toString()
    {
      return "file-lock:pos=" + position + "size=" + size;
    }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/FileLockInterruptionException.java gcc-4.0.0/libjava/java/nio/channels/FileLockInterruptionException.java
*** gcc-3.4.3/libjava/java/nio/channels/FileLockInterruptionException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/FileLockInterruptionException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* FileLockInterruptionException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* FileLockInterruptionException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** package java.nio.channels;
*** 39,44 ****
--- 39,45 ----
  
  import java.io.IOException;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/GatheringByteChannel.java gcc-4.0.0/libjava/java/nio/channels/GatheringByteChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/GatheringByteChannel.java	Sat Oct 11 18:45:10 2003
--- gcc-4.0.0/libjava/java/nio/channels/GatheringByteChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* GatheringByteChannel.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* GatheringByteChannel.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,47 ****
  
  package java.nio.channels;
  
- import java.nio.ByteBuffer;
  import java.io.IOException;
  
! public interface GatheringByteChannel
!   extends WritableByteChannel
  {
    /**
     * Writes a sequence of bytes to this channel from a subsequence of
--- 37,47 ----
  
  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
*************** public interface GatheringByteChannel
*** 59,67 ****
     * @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
     *
--- 59,67 ----
     * @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
     *
*************** public interface GatheringByteChannel
*** 75,79 ****
     * @exception NonWritableChannelException If this channel was not opened for
     * writing
     */
!   long write (ByteBuffer[] srcs) throws IOException;
  }
--- 75,79 ----
     * @exception NonWritableChannelException If this channel was not opened for
     * writing
     */
!   long write(ByteBuffer[] srcs) throws IOException;
  }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/IllegalBlockingModeException.java gcc-4.0.0/libjava/java/nio/channels/IllegalBlockingModeException.java
*** gcc-3.4.3/libjava/java/nio/channels/IllegalBlockingModeException.java	Wed Sep 25 09:05:53 2002
--- gcc-4.0.0/libjava/java/nio/channels/IllegalBlockingModeException.java	Thu Feb 17 07:48:38 2005
***************
*** 1,5 ****
! /* IllegalBlockingModeException.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* IllegalBlockingModeException.java --
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  package java.nio.channels;
  
  /**
!  * @author Michael Koch <konqueror@gmx.de>
   * @since 1.4
   *
   * Written using JDK 1.4.1 Online API from Sun
--- 37,45 ----
  
  package java.nio.channels;
  
+ 
  /**
!  * @author Michael Koch (konqueror@gmx.de)
   * @since 1.4
   *
   * Written using JDK 1.4.1 Online API from Sun
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/IllegalSelectorException.java gcc-4.0.0/libjava/java/nio/channels/IllegalSelectorException.java
*** gcc-3.4.3/libjava/java/nio/channels/IllegalSelectorException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/IllegalSelectorException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* IllegalSelectorException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* IllegalSelectorException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/InterruptibleChannel.java gcc-4.0.0/libjava/java/nio/channels/InterruptibleChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/InterruptibleChannel.java	Mon Oct  7 07:59:12 2002
--- gcc-4.0.0/libjava/java/nio/channels/InterruptibleChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* InterruptibleChannel.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* InterruptibleChannel.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** package java.nio.channels;
*** 39,44 ****
--- 39,45 ----
  
  import java.io.IOException;
  
+ 
  public interface InterruptibleChannel extends Channel
  {
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/NoConnectionPendingException.java gcc-4.0.0/libjava/java/nio/channels/NoConnectionPendingException.java
*** gcc-3.4.3/libjava/java/nio/channels/NoConnectionPendingException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/NoConnectionPendingException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* NoConnectionPendingException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* NoConnectionPendingException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/NonReadableChannelException.java gcc-4.0.0/libjava/java/nio/channels/NonReadableChannelException.java
*** gcc-3.4.3/libjava/java/nio/channels/NonReadableChannelException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/NonReadableChannelException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* NonReadableChannelException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* NonReadableChannelException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/NonWritableChannelException.java gcc-4.0.0/libjava/java/nio/channels/NonWritableChannelException.java
*** gcc-3.4.3/libjava/java/nio/channels/NonWritableChannelException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/NonWritableChannelException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* NonWritableChannelException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* NonWritableChannelException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/NotYetBoundException.java gcc-4.0.0/libjava/java/nio/channels/NotYetBoundException.java
*** gcc-3.4.3/libjava/java/nio/channels/NotYetBoundException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/NotYetBoundException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* NotYetBoundException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* NotYetBoundException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/NotYetConnectedException.java gcc-4.0.0/libjava/java/nio/channels/NotYetConnectedException.java
*** gcc-3.4.3/libjava/java/nio/channels/NotYetConnectedException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/NotYetConnectedException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* NotYetConnectedException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* NotYetConnectedException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/OverlappingFileLockException.java gcc-4.0.0/libjava/java/nio/channels/OverlappingFileLockException.java
*** gcc-3.4.3/libjava/java/nio/channels/OverlappingFileLockException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/OverlappingFileLockException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* OverlappingFileLockException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* OverlappingFileLockException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/Pipe.java gcc-4.0.0/libjava/java/nio/channels/Pipe.java
*** gcc-3.4.3/libjava/java/nio/channels/Pipe.java	Tue Feb 11 06:48:53 2003
--- gcc-4.0.0/libjava/java/nio/channels/Pipe.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* Pipe.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* Pipe.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** import java.io.IOException;
*** 41,62 ****
  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);
      }
  
      /**
--- 41,62 ----
  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);
      }
  
      /**
*************** public abstract class Pipe
*** 64,85 ****
       *
       * 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);
      }
  
      /**
--- 64,84 ----
       *
       * 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);
      }
  
      /**
*************** public abstract class Pipe
*** 87,93 ****
       *
       * The only valid operation on this channel is @see SelectionKey.OP_READ.
       */
!     public final int validOps ()
      {
        return SelectionKey.OP_READ;
      }
--- 86,92 ----
       *
       * The only valid operation on this channel is @see SelectionKey.OP_READ.
       */
!     public final int validOps()
      {
        return SelectionKey.OP_READ;
      }
*************** public abstract class Pipe
*** 102,113 ****
  
    /**
     * Opens a pipe.
!    * 
     * @exception IOException If an error occurs
     */
    public static Pipe open() throws IOException
    {
!     return SelectorProvider.provider ().openPipe();
    }
  
    /**
--- 101,112 ----
  
    /**
     * Opens a pipe.
!    *
     * @exception IOException If an error occurs
     */
    public static Pipe open() throws IOException
    {
!     return SelectorProvider.provider().openPipe();
    }
  
    /**
*************** public abstract class Pipe
*** 118,122 ****
    /**
     * Returns a pipe's source channel
     */
!   public abstract Pipe.SourceChannel source();   
  }
--- 117,121 ----
    /**
     * Returns a pipe's source channel
     */
!   public abstract Pipe.SourceChannel source();
  }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/ReadableByteChannel.java gcc-4.0.0/libjava/java/nio/channels/ReadableByteChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/ReadableByteChannel.java	Sat Oct 11 18:45:10 2003
--- gcc-4.0.0/libjava/java/nio/channels/ReadableByteChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,5 ****
! /* ReadableByteChannel.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ReadableByteChannel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.nio.channels;
*** 40,50 ****
--- 40,55 ----
  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
*************** public interface ReadableByteChannel ext
*** 55,59 ****
     * @exception NonReadableChannelException If this channel was not opened for
     * reading
     */
!   int read (ByteBuffer dst) throws IOException;
  }
--- 60,64 ----
     * @exception NonReadableChannelException If this channel was not opened for
     * reading
     */
!   int read(ByteBuffer dst) throws IOException;
  }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/ScatteringByteChannel.java gcc-4.0.0/libjava/java/nio/channels/ScatteringByteChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/ScatteringByteChannel.java	Sat Oct 11 18:45:10 2003
--- gcc-4.0.0/libjava/java/nio/channels/ScatteringByteChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* ScatteringByteChannel.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* ScatteringByteChannel.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,47 ****
  
  package java.nio.channels;
  
- import java.nio.ByteBuffer;
  import java.io.IOException;
  
! public interface ScatteringByteChannel
!   extends ReadableByteChannel
  {
    /**
     * Reads a sequence of bytes from this channel into a subsequence of the
--- 37,47 ----
  
  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
*************** public interface ScatteringByteChannel
*** 59,65 ****
     * @exception NonReadableChannelException If this channel was not opened for
     * reading
     */
!   long read (ByteBuffer[] srcs, int offset, int length)
      throws IOException;
  
    /**
--- 59,65 ----
     * @exception NonReadableChannelException If this channel was not opened for
     * reading
     */
!   long read(ByteBuffer[] srcs, int offset, int length)
      throws IOException;
  
    /**
*************** public interface ScatteringByteChannel
*** 75,79 ****
     * @exception NonReadableChannelException If this channel was not opened for
     * reading
     */
!   long read (ByteBuffer[] srcs) throws IOException;
  }
--- 75,79 ----
     * @exception NonReadableChannelException If this channel was not opened for
     * reading
     */
!   long read(ByteBuffer[] srcs) throws IOException;
  }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/SelectableChannel.java gcc-4.0.0/libjava/java/nio/channels/SelectableChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/SelectableChannel.java	Tue Feb 11 06:48:53 2003
--- gcc-4.0.0/libjava/java/nio/channels/SelectableChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* SelectableChannel.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* SelectableChannel.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** import java.io.IOException;
*** 41,102 ****
  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.
--- 41,102 ----
  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.
*************** public abstract class SelectableChannel
*** 108,119 ****
     * @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.
--- 108,119 ----
     * @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.
*************** public abstract class SelectableChannel
*** 130,138 ****
     * @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.
     */
--- 130,138 ----
     * @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.
     */
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/SelectionKey.java gcc-4.0.0/libjava/java/nio/channels/SelectionKey.java
*** gcc-3.4.3/libjava/java/nio/channels/SelectionKey.java	Tue Feb 11 06:50:13 2003
--- gcc-4.0.0/libjava/java/nio/channels/SelectionKey.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* SelectionKey.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* SelectionKey.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,164 ****
  
  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 ();
  }
--- 37,164 ----
  
  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-3.4.3/libjava/java/nio/channels/Selector.java gcc-4.0.0/libjava/java/nio/channels/Selector.java
*** gcc-3.4.3/libjava/java/nio/channels/Selector.java	Mon Nov 18 14:31:39 2002
--- gcc-4.0.0/libjava/java/nio/channels/Selector.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* Selector.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* Selector.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** import java.io.IOException;
*** 41,46 ****
--- 41,47 ----
  import java.nio.channels.spi.SelectorProvider;
  import java.util.Set;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
*************** public abstract class Selector
*** 53,133 ****
    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 ();
  }
--- 54,134 ----
    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-3.4.3/libjava/java/nio/channels/ServerSocketChannel.java gcc-4.0.0/libjava/java/nio/channels/ServerSocketChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/ServerSocketChannel.java	Fri Jun 27 13:34:12 2003
--- gcc-4.0.0/libjava/java/nio/channels/ServerSocketChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* ServerSocketChannel.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* ServerSocketChannel.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** this exception to your version of the li
*** 35,63 ****
  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.nio.channels.spi.AbstractSelectableChannel;
- import java.nio.channels.spi.SelectorProvider;
  import java.io.IOException;
  import java.net.ServerSocket;
  
  /**
   * @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.
     *
--- 35,62 ----
  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.
     *
*************** public abstract class ServerSocketChanne
*** 72,99 ****
     * @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;
!   } 
  }
--- 71,98 ----
     * @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-3.4.3/libjava/java/nio/channels/SocketChannel.java gcc-4.0.0/libjava/java/nio/channels/SocketChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/SocketChannel.java	Tue Feb 11 06:48:53 2003
--- gcc-4.0.0/libjava/java/nio/channels/SocketChannel.java	Sun Nov 21 20:19:59 2004
***************
*** 1,5 ****
! /* SocketChannel.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* SocketChannel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,77 ****
  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.nio.channels.spi.AbstractSelectableChannel;
- import java.nio.channels.spi.SelectorProvider;
- import java.nio.ByteBuffer;
  import java.io.IOException;
  import java.net.Socket;
  import java.net.SocketAddress;
  
  /**
!  * @author Michael Koch
   * @since 1.4
   */
! abstract public class SocketChannel extends AbstractSelectableChannel
    implements ByteChannel, ScatteringByteChannel, GatheringByteChannel
  {
    /**
!    * Initializes this socket.
     */
!   protected SocketChannel (SelectorProvider provider)
    {
!     super (provider);
    }
!  
    /**
     * Opens a socket channel.
     *
     * @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.
     *
     * @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
--- 35,82 ----
  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
*************** abstract public class SocketChannel exte
*** 84,155 ****
     * @exception UnsupportedAddressTypeException If the type of the given remote
     * address is not supported.
     */
!   public static SocketChannel open (SocketAddress remote) throws IOException
    {
!     SocketChannel ch = open ();
! 	
!     if (ch.connect (remote))
!       {
!       }
!     
      return ch;
    }
!     
    /**
     * Reads data from the channel.
     *
     * @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.
     *
     * @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.
     */
!   public final int validOps ()
    {
!     return SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE;
    }
  
    /**
     * Reads data from the channel.
     *
     * @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.
     *
     * @exception AlreadyConnectedException If this channel is already connected.
     * @exception AsynchronousCloseException If this channel is already connected.
     * @exception ClosedByInterruptException If another thread interrupts the
--- 89,168 ----
     * @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
*************** abstract public class SocketChannel exte
*** 166,173 ****
     * @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.
     *
--- 179,187 ----
     * @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.
     *
*************** abstract public class SocketChannel exte
*** 180,225 ****
     * @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.
     *
     * @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.
     */
!   public abstract Socket socket ();
!   
    /**
     * Writes data to the channel.
     *
     * @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.
     *
     * @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;
  }
--- 194,248 ----
     * @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-3.4.3/libjava/java/nio/channels/UnresolvedAddressException.java gcc-4.0.0/libjava/java/nio/channels/UnresolvedAddressException.java
*** gcc-3.4.3/libjava/java/nio/channels/UnresolvedAddressException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/UnresolvedAddressException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* UnresolvedAddressException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* UnresolvedAddressException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/UnsupportedAddressTypeException.java gcc-4.0.0/libjava/java/nio/channels/UnsupportedAddressTypeException.java
*** gcc-3.4.3/libjava/java/nio/channels/UnsupportedAddressTypeException.java	Thu Nov 21 10:45:14 2002
--- gcc-4.0.0/libjava/java/nio/channels/UnsupportedAddressTypeException.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* UnsupportedAddressTypeException.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* UnsupportedAddressTypeException.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  package java.nio.channels;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/WritableByteChannel.java gcc-4.0.0/libjava/java/nio/channels/WritableByteChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/WritableByteChannel.java	Sat Oct 11 18:45:10 2003
--- gcc-4.0.0/libjava/java/nio/channels/WritableByteChannel.java	Tue Apr 20 15:27:37 2004
***************
*** 1,4 ****
! /* WritableByteChannel.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* WritableByteChannel.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** package java.nio.channels;
*** 40,47 ****
  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
--- 40,47 ----
  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
*************** public interface WritableByteChannel
*** 56,60 ****
     * @exception NonWritableChannelException If this channel was not opened for
     * writing
     */
!   int write (ByteBuffer src) throws IOException;
  }
--- 56,60 ----
     * @exception NonWritableChannelException If this channel was not opened for
     * writing
     */
!   int write(ByteBuffer src) throws IOException;
  }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/natChannels.cc gcc-4.0.0/libjava/java/nio/channels/natChannels.cc
*** gcc-3.4.3/libjava/java/nio/channels/natChannels.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/nio/channels/natChannels.cc	Wed Mar  3 23:50:02 2004
***************
*** 0 ****
--- 1,36 ----
+ // natChannels.cc - Native part of Channels class.
+ 
+ /* Copyright (C) 2004  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #include <config.h>
+ #include <gcj/cni.h>
+ 
+ #include <java/nio/channels/Channels.h>
+ #include <java/io/FileInputStream.h>
+ #include <java/io/FileOutputStream.h>
+ #include <gnu/java/nio/channels/FileChannelImpl.h>
+ 
+ using java::nio::channels::Channels;
+ using java::io::FileInputStream;
+ using java::io::FileOutputStream;
+ using gnu::java::nio::channels::FileChannelImpl;
+ 
+ FileInputStream*
+ Channels::newInputStream(FileChannelImpl* ch)
+ {
+   // Needs to be native to bypass Java access protection.
+   return new FileInputStream (ch);
+ }
+ 
+ FileOutputStream*
+ Channels::newOutputStream(FileChannelImpl* ch)
+ {
+   // Needs to be native to bypass Java access protection.
+   return new FileOutputStream (ch);
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/natFileChannelImpl.cc gcc-4.0.0/libjava/java/nio/channels/natFileChannelImpl.cc
*** gcc-3.4.3/libjava/java/nio/channels/natFileChannelImpl.cc	Sun Jul 13 16:53:05 2003
--- gcc-4.0.0/libjava/java/nio/channels/natFileChannelImpl.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,94 ****
- // natFileChannelImpl.cc
- 
- /* Copyright (C) 2003  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- #include <config.h>
- 
- #include <jvm.h>
- 
- #include <errno.h>
- #include <string.h>
- #include <sys/types.h>
- 
- #ifdef HAVE_UNISTD_H
- #include <unistd.h>
- #endif
- 
- #ifdef HAVE_FCNTL_H
- #include <fcntl.h>
- #endif
- 
- #include <gnu/gcj/RawData.h>
- #include <java/io/FileDescriptor.h>
- #include <java/io/IOException.h>
- #include <java/nio/ByteBuffer.h>
- #include <java/nio/channels/FileChannel.h>
- #include <java/nio/channels/FileChannelImpl.h>
- 
- jlong
- java::nio::channels::FileChannelImpl::size ()
- {
-   return fd->getLength ();
- }
- 
- jlong
- java::nio::channels::FileChannelImpl::implPosition ()
- {
-   return fd->getFilePointer ();
- }
- 
- java::nio::channels::FileChannel*
- java::nio::channels::FileChannelImpl::implPosition (jlong newPosition)
- {
-   fd->seek (newPosition, ::java::io::FileDescriptor::SET, true);
-   return this;
- }
- 
- jint
- java::nio::channels::FileChannelImpl::implRead (JArray<jbyte>* buffer,
-                                                 jint offset, jint len)
- {
-   return fd->read (buffer, offset, len);
- }
- 
- jint
- java::nio::channels::FileChannelImpl::implWrite (JArray<jbyte>* buffer,
-                                                  jint offset, jint len)
- {
-   fd->write (buffer, offset, len);
-   return len;
- }
- 
- java::nio::channels::FileChannel*
- java::nio::channels::FileChannelImpl::implTruncate (jlong size)
- {
-   fd->setLength (size);
-   return this;
- }
- 
- gnu::gcj::RawData*
- java::nio::channels::FileChannelImpl::nio_mmap_file (jlong /*pos*/, jlong /*size*/,
-                                                      jint /*mode*/)
- {
-   throw new ::java::io::IOException (JvNewStringUTF ("mmap not implemented"));
- }
- 
- void
- java::nio::channels::FileChannelImpl::nio_unmmap_file (gnu::gcj::RawData* /*address*/,
- 				                       jint /*size*/)
- {
-   throw new ::java::io::IOException (JvNewStringUTF ("munmap not implemented"));
- }
- 
- void
- java::nio::channels::FileChannelImpl::nio_msync (gnu::gcj::RawData* /*map_address*/,
-                                                  jint /*length*/)
- {
-   throw new ::java::io::IOException (JvNewStringUTF ("msync not implemented"));
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/java/nio/channels/spi/AbstractInterruptibleChannel.java gcc-4.0.0/libjava/java/nio/channels/spi/AbstractInterruptibleChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/spi/AbstractInterruptibleChannel.java	Sat Feb 14 18:44:11 2004
--- gcc-4.0.0/libjava/java/nio/channels/spi/AbstractInterruptibleChannel.java	Tue Apr 20 15:27:38 2004
***************
*** 1,5 ****
  /* AbstractInterruptibleChannel.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractInterruptibleChannel.java -- 
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.nio.channels.AsynchronousClo
*** 42,47 ****
--- 42,48 ----
  import java.nio.channels.Channel;
  import java.nio.channels.InterruptibleChannel;
  
+ 
  /**
   * @author Michael Koch
   * @since 1.4
*************** public abstract class AbstractInterrupti
*** 54,78 ****
    /**
     * 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();
--- 55,79 ----
    /**
     * 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();
*************** public abstract class AbstractInterrupti
*** 81,109 ****
  
    /**
     * Marks the end of an I/O operation that might block indefinitely.
!    * 
     * @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
    {
!   }   
  
    /**
     * Closes the channel.
!    * 
     * @exception IOException If an error occurs
     */
!   protected abstract void implCloseChannel () throws IOException;
  
    /**
     * Tells whether or not this channel is open.
     */
!   public final boolean isOpen ()
    {
!     return !closed;
    }
  }
--- 82,119 ----
  
    /**
     * 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-3.4.3/libjava/java/nio/channels/spi/AbstractSelectableChannel.java gcc-4.0.0/libjava/java/nio/channels/spi/AbstractSelectableChannel.java
*** gcc-3.4.3/libjava/java/nio/channels/spi/AbstractSelectableChannel.java	Tue Feb  3 14:50:59 2004
--- gcc-4.0.0/libjava/java/nio/channels/spi/AbstractSelectableChannel.java	Wed Nov 24 10:44:18 2004
***************
*** 1,5 ****
  /* AbstractSelectableChannel.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractSelectableChannel.java
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  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.SelectableChann
*** 43,92 ****
  import java.nio.channels.SelectionKey;
  import java.nio.channels.Selector;
  import java.util.LinkedList;
- import java.util.List;
  import java.util.ListIterator;
  
  public abstract class AbstractSelectableChannel extends SelectableChannel
  {
-   private int registered;
    private boolean blocking = true;
    private Object LOCK = new Object();
    private SelectorProvider provider;
!   private LinkedList keys;
  
    /**
     * Initializes the channel
     */
!   protected AbstractSelectableChannel (SelectorProvider provider)
    {
      this.provider = provider;
-     this.keys = new LinkedList();
    }
  
    /**
     * Retrieves the object upon which the configureBlocking and register
     * methods synchronize.
     */
!   public final Object blockingLock ()
    {
      return LOCK;
    }
!     
    /**
     * Adjusts this channel's blocking mode.
     */
!   public final SelectableChannel configureBlocking (boolean blocking)
      throws IOException
    {
      synchronized (blockingLock())
        {
!         if (this.blocking != blocking)
!           {
!             implConfigureBlocking(blocking);
!             this.blocking = blocking;
!           }
        }
!     
      return this;
    }
  
--- 44,100 ----
  import java.nio.channels.SelectionKey;
  import java.nio.channels.Selector;
  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;
    }
  
*************** public abstract class AbstractSelectable
*** 95,119 ****
     *
     * @exception IOException If an error occurs
     */
!   protected final void implCloseChannel () throws IOException
    {
!     implCloseSelectableChannel ();
    }
  
    /**
     * Closes this selectable channel.
     */
!   protected abstract void implCloseSelectableChannel () throws IOException;
!   
    /**
     * Adjusts this channel's blocking mode.
     */
!   protected abstract void implConfigureBlocking (boolean block)
      throws IOException;
  
    /**
     * Tells whether or not every I/O operation on this channel will block
     * until it completes.
     */
    public final boolean isBlocking()
    {
--- 103,136 ----
     *
     * @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()
    {
*************** public abstract class AbstractSelectable
*** 123,212 ****
    /**
     * Tells whether or not this channel is currently registered with
     * any selectors.
     */
    public final boolean isRegistered()
    {
!     return !keys.isEmpty();
    }
  
    /**
     * Retrieves the key representing the channel's registration with the
     * given selector.
     */
    public final SelectionKey keyFor(Selector selector)
    {
      try
        {
!         return register (selector, 0, null);
        }
      catch (Exception e)
        {
!         return null;
        }
    }
  
    /**
     * Returns the provider that created this channel.
     */
!   public final SelectorProvider provider ()
    {
      return provider;
    }
  
!   private SelectionKey locate (Selector selector)
    {
!     if (keys == null)
!       return null;
!     
!     ListIterator it = keys.listIterator ();
!     
!     while (it.hasNext ())
        {
!         SelectionKey key = (SelectionKey) it.next();
!         
!     	if (key.selector() == selector)
!           return key;
        }
-     
-     return null;
-   }
  
!   private void add (SelectionKey key)
!   {
!     keys.add (key);
    }
  
    /**
     * Registers this channel with the given selector, returning a selection key.
     *
     * @exception ClosedChannelException If the channel is already closed.
     */
!   public final SelectionKey register (Selector selin, int ops, Object att)
      throws ClosedChannelException
    {
!     if (!isOpen ())
        throw new ClosedChannelException();
  
      SelectionKey key = null;
      AbstractSelector selector = (AbstractSelector) selin;
  
      synchronized (blockingLock())
        {
!         key = locate (selector);
  
!         if (key != null)
!           {
!             key.attach (att);
!           }
!         else
!           {
!             key = selector.register (this, ops, att);
!     		
!             if (key != null)
!               add (key);
!           }
        }
  
      return key;
    }
  }
--- 140,256 ----
    /**
     * 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.
     */
!   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())
        {
! 	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-3.4.3/libjava/java/nio/channels/spi/AbstractSelectionKey.java gcc-4.0.0/libjava/java/nio/channels/spi/AbstractSelectionKey.java
*** gcc-3.4.3/libjava/java/nio/channels/spi/AbstractSelectionKey.java	Thu Oct  9 17:34:10 2003
--- gcc-4.0.0/libjava/java/nio/channels/spi/AbstractSelectionKey.java	Tue Apr 20 15:27:38 2004
***************
*** 1,5 ****
! /* AbstractSelectionKey.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* AbstractSelectionKey.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.nio.channels.spi;
*** 39,77 ****
  
  import java.nio.channels.SelectionKey;
  
  /**
   * @since 1.4
   */
! public abstract class AbstractSelectionKey
!   extends SelectionKey
  {
!   private boolean cancelled = false;
  
    /**
     * Initializes the key.
     */
!   protected AbstractSelectionKey ()
    {
    }
  
    /**
     * Cancels this key.
     */
!   public final void cancel ()
    {
      if (isValid())
        {
! 	// FIXME: implement this.
! 	//selector().cancelledKeys().add (this);
!         cancelled = true;
        }
    }
  
    /**
     * Tells whether this key is valid or not.
     */
!   public final boolean isValid ()
    {
!     return !cancelled;
    }
  }
--- 39,78 ----
  
  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-3.4.3/libjava/java/nio/channels/spi/AbstractSelector.java gcc-4.0.0/libjava/java/nio/channels/spi/AbstractSelector.java
*** gcc-3.4.3/libjava/java/nio/channels/spi/AbstractSelector.java	Sat Dec 20 15:33:24 2003
--- gcc-4.0.0/libjava/java/nio/channels/spi/AbstractSelector.java	Tue Apr 20 15:27:38 2004
***************
*** 1,5 ****
! /* AbstractSelector.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* AbstractSelector.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,83 ****
  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.Set;
  import java.util.HashSet;
  
  public abstract class AbstractSelector extends Selector
  {
!   private boolean closed = false;
    private SelectorProvider provider;
    private HashSet cancelledKeys;
  
    /**
     * Initializes the slector.
     */
!   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.
     */
!   public final boolean isOpen ()
    {
      return ! closed;
    }
--- 35,87 ----
  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;
    }
*************** public abstract class AbstractSelector e
*** 95,132 ****
    protected final void end()
    {
    }
!     
!   public final SelectorProvider provider ()
    {
      return provider;
    }
  
    protected final Set cancelledKeys()
    {
!     if (!isOpen())
        throw new ClosedSelectorException();
  
      return cancelledKeys;
    }
  
!   final void cancelKey (AbstractSelectionKey key)
    {
      synchronized (cancelledKeys)
        {
!         cancelledKeys.remove(key);
        }
    }
  
    /**
     * Closes the channel.
     */
!   protected abstract void implCloseSelector () throws IOException;
  
!   protected abstract SelectionKey register (AbstractSelectableChannel ch,
!                                             int ops, Object att);   
  
!   protected final void deregister (AbstractSelectionKey key)
    {
!     // FIXME
    }
  }
--- 99,167 ----
    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-3.4.3/libjava/java/nio/channels/spi/SelectorProvider.java gcc-4.0.0/libjava/java/nio/channels/spi/SelectorProvider.java
*** gcc-3.4.3/libjava/java/nio/channels/spi/SelectorProvider.java	Sun Oct 12 13:39:07 2003
--- gcc-4.0.0/libjava/java/nio/channels/spi/SelectorProvider.java	Sat Oct 16 18:06:03 2004
***************
*** 1,5 ****
  /* SelectorProvider.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SelectorProvider.java
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,49 ****
--- 38,51 ----
  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
*************** import java.nio.channels.SocketChannel;
*** 51,126 ****
  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.
     */
!   public abstract DatagramChannel openDatagramChannel () throws IOException;
!   
    /**
     * Opens a pipe.
     */
!   public abstract Pipe openPipe () throws IOException;
!   
    /**
     * Opens a selector.
     */
!   public abstract AbstractSelector openSelector () throws IOException;
!   
    /**
     * Opens a server socket channel.
     */
!   public abstract ServerSocketChannel openServerSocketChannel ()
      throws IOException;
!   
    /**
     * Opens a socket channel.
     */
!   public abstract SocketChannel openSocketChannel () throws IOException;
!     
    /**
     * Returns the system-wide default selector provider for this invocation
     * of the Java virtual machine.
     */
!   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;
    }
  }
--- 53,151 ----
  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-3.4.3/libjava/java/nio/charset/Charset.java gcc-4.0.0/libjava/java/nio/charset/Charset.java
*** gcc-3.4.3/libjava/java/nio/charset/Charset.java	Tue May 13 10:25:00 2003
--- gcc-4.0.0/libjava/java/nio/charset/Charset.java	Sat Feb 19 09:10:38 2005
***************
*** 1,5 ****
  /* Charset.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Charset.java -- 
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,42 ****
--- 35,45 ----
  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.java.nio.charset.Provider;
+ 
  import java.nio.ByteBuffer;
  import java.nio.CharBuffer;
  import java.nio.charset.spi.CharsetProvider;
*************** import java.util.Locale;
*** 47,53 ****
  import java.util.Set;
  import java.util.SortedMap;
  import java.util.TreeMap;
- import gnu.java.nio.charset.Provider;
  
  /**
   * @author Jesse Rosenstock
--- 50,55 ----
*************** public abstract class Charset implements
*** 115,126 ****
    {
      return charsetForName (charsetName) != null;
    }
!  
    public static Charset forName (String charsetName)
    {
      Charset cs = charsetForName (charsetName);
      if (cs == null)
        throw new UnsupportedCharsetException (charsetName);
      return cs;
    }
  
--- 117,145 ----
    {
      return charsetForName (charsetName) != null;
    }
! 
!   /**
!    * Returns the Charset instance for the charset of the given name.
!    * 
!    * @param charsetName
!    * @return
!    * @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);
+     cachedDecoder = null;
+     cachedEncoder = null;
      return cs;
    }
  
*************** public abstract class Charset implements
*** 128,146 ****
     * 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);
      return provider ().charsetForName (charsetName);
    }
  
!   public static SortedMap availableCharsets ()
    {
!     TreeMap charsets = new TreeMap (String.CASE_INSENSITIVE_ORDER);
  
      for (Iterator i = provider ().charsets (); i.hasNext (); )
        {
--- 147,165 ----
     * 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);
      return provider ().charsetForName (charsetName);
    }
  
!   public static SortedMap availableCharsets()
    {
!     TreeMap charsets = new TreeMap(String.CASE_INSENSITIVE_ORDER);
  
      for (Iterator i = provider ().charsets (); i.hasNext (); )
        {
*************** public abstract class Charset implements
*** 148,162 ****
          charsets.put (cs.name (), cs);
        }
  
!     return Collections.unmodifiableSortedMap (charsets);
    }
  
    // XXX: we need to support multiple providers, reading them from
    // java.nio.charset.spi.CharsetProvider in the resource directory
    // META-INF/services
!   private static final CharsetProvider provider ()
    {
!     return Provider.provider ();
    }
  
    public final String name ()
--- 167,181 ----
          charsets.put (cs.name (), cs);
        }
  
!     return Collections.unmodifiableSortedMap(charsets);
    }
  
    // XXX: we need to support multiple providers, reading them from
    // java.nio.charset.spi.CharsetProvider in the resource directory
    // META-INF/services
!   private static CharsetProvider provider()
    {
!     return Provider.provider();
    }
  
    public final String name ()
diff -Nrcpad gcc-3.4.3/libjava/java/nio/charset/CharsetDecoder.java gcc-4.0.0/libjava/java/nio/charset/CharsetDecoder.java
*** gcc-3.4.3/libjava/java/nio/charset/CharsetDecoder.java	Wed Nov 13 12:21:26 2002
--- gcc-4.0.0/libjava/java/nio/charset/CharsetDecoder.java	Sat Jul 17 08:43:43 2004
*************** public abstract class CharsetDecoder
*** 129,134 ****
--- 129,135 ----
      if (cr.isError ())
        cr.throwException ();
  
+     reset();
      out.flip ();
      return out;
    }
diff -Nrcpad gcc-3.4.3/libjava/java/nio/charset/CoderResult.java gcc-4.0.0/libjava/java/nio/charset/CoderResult.java
*** gcc-3.4.3/libjava/java/nio/charset/CoderResult.java	Mon Nov 18 21:31:12 2002
--- gcc-4.0.0/libjava/java/nio/charset/CoderResult.java	Sat Nov  6 23:22:05 2004
***************
*** 1,5 ****
  /* CoderResult.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CoderResult.java -- 
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public class CoderResult
*** 82,88 ****
    private final int type;
    private final int length;
  
!   private CoderResult (int type, int length)
    {
      this.type = type;
      this.length = length;
--- 82,89 ----
    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 class CoderResult
*** 157,175 ****
    {
      private final HashMap cache;
  
!     private Cache ()
      {
!       // If we didn't synchronize on this, then cache would be initialized
!       // without holding a lock.  Undefined behavior would occur if the
!       // first thread to call get(int) was not the same as the one that
!       // called the constructor.
!       synchronized (this)
!         {
!           cache = new HashMap ();
!         }
      }
  
!     private synchronized CoderResult get (int length)
      {
        if (length <= 0)
          throw new IllegalArgumentException ("Non-positive length");
--- 158,171 ----
    {
      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");
diff -Nrcpad gcc-3.4.3/libjava/java/nio/charset/IllegalCharsetNameException.java gcc-4.0.0/libjava/java/nio/charset/IllegalCharsetNameException.java
*** gcc-3.4.3/libjava/java/nio/charset/IllegalCharsetNameException.java	Tue Feb 11 06:46:15 2003
--- gcc-4.0.0/libjava/java/nio/charset/IllegalCharsetNameException.java	Thu Apr 22 06:41:36 2004
*************** public class IllegalCharsetNameException
*** 48,57 ****
     */
    private static final long serialVersionUID = 1457525358470002989L;
    
!   String charsetName;
    
    /**
     * Creates the exception
     */
    public IllegalCharsetNameException (String charsetName)
    {
--- 48,59 ----
     */
    private static final long serialVersionUID = 1457525358470002989L;
    
!   private String charsetName;
    
    /**
     * Creates the exception
+    *
+    * @param charsetName name of the illegal charset
     */
    public IllegalCharsetNameException (String charsetName)
    {
*************** public class IllegalCharsetNameException
*** 61,66 ****
--- 63,70 ----
  
    /**
     * Retrieves the illegal charset name
+    *
+    * @return the illegal charset name
     */
    public String getCharsetName ()
    {
diff -Nrcpad gcc-3.4.3/libjava/java/nio/charset/MalformedInputException.java gcc-4.0.0/libjava/java/nio/charset/MalformedInputException.java
*** gcc-3.4.3/libjava/java/nio/charset/MalformedInputException.java	Mon Nov 11 07:12:07 2002
--- gcc-4.0.0/libjava/java/nio/charset/MalformedInputException.java	Thu Apr 22 06:41:36 2004
*************** public class MalformedInputException ext
*** 46,51 ****
--- 46,53 ----
    
    /**
     * Creates the exception
+    *
+    * @param inputLength the position of malformed input in the input stream
     */
    public MalformedInputException (int inputLength)
    {
*************** public class MalformedInputException ext
*** 54,60 ****
    }
  
    /**
!    * Retrieves the illegal charset name
     */
    public int getInputLength ()
    {
--- 56,64 ----
    }
  
    /**
!    * Retrieves the position of the malformed input in the input stream.
!    *
!    * @return the position
     */
    public int getInputLength ()
    {
*************** public class MalformedInputException ext
*** 63,68 ****
--- 67,74 ----
  
    /**
     * Returns the detail message string of this throwable
+    *
+    * @return the message
     */
    public String getMessage ()
    {
diff -Nrcpad gcc-3.4.3/libjava/java/nio/charset/spi/CharsetProvider.java gcc-4.0.0/libjava/java/nio/charset/spi/CharsetProvider.java
*** gcc-3.4.3/libjava/java/nio/charset/spi/CharsetProvider.java	Fri Nov  1 12:03:40 2002
--- gcc-4.0.0/libjava/java/nio/charset/spi/CharsetProvider.java	Thu Feb 17 07:48:39 2005
*************** package java.nio.charset.spi;
*** 40,45 ****
--- 40,46 ----
  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
*************** import java.util.Iterator;
*** 51,57 ****
   * 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
--- 52,58 ----
   * 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
*** 82,87 ****
--- 83,90 ----
    /**
     * 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);
diff -Nrcpad gcc-3.4.3/libjava/java/nio/natDirectByteBufferImpl.cc gcc-4.0.0/libjava/java/nio/natDirectByteBufferImpl.cc
*** gcc-3.4.3/libjava/java/nio/natDirectByteBufferImpl.cc	Sun Feb  8 21:18:37 2004
--- gcc-4.0.0/libjava/java/nio/natDirectByteBufferImpl.cc	Wed Nov 24 10:44:17 2004
***************
*** 1,6 ****
  // natDirectByteBufferImpl.cc
  
! /* Copyright (C) 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // natDirectByteBufferImpl.cc
  
! /* Copyright (C) 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 16,54 ****
  #include <stdlib.h>
  
  #include <gnu/gcj/RawData.h>
! #include <java/nio/DirectByteBufferImpl.h>
  
! gnu::gcj::RawData*
! java::nio::DirectByteBufferImpl::allocateImpl (jint capacity)
  {
    return reinterpret_cast<gnu::gcj::RawData*> (::malloc (capacity));
  }
  
  void
! java::nio::DirectByteBufferImpl::freeImpl (gnu::gcj::RawData* address)
  {
    ::free (reinterpret_cast<void*> (address));
  }
  
  jbyte
! java::nio::DirectByteBufferImpl::getImpl (jint index)
  {
!   jbyte* pointer = reinterpret_cast<jbyte*> (address) + offset + index;
    return *pointer;
  }
  
  void
! java::nio::DirectByteBufferImpl::putImpl (jint index, jbyte value)
  {
!   jbyte* pointer = reinterpret_cast<jbyte*> (address) + offset + index;
    *pointer = value;
  }
  
  void
! java::nio::DirectByteBufferImpl::shiftDown
! (jint dst_offset, jint src_offset, jint count)
  {
!   jbyte* dst = reinterpret_cast<jbyte*> (address) + offset + dst_offset;
!   jbyte* src = reinterpret_cast<jbyte*> (address) + offset + src_offset;
    ::memmove(dst, src, count);
  }
--- 16,72 ----
  #include <stdlib.h>
  
  #include <gnu/gcj/RawData.h>
! #include <java/nio/VMDirectByteBuffer.h>
  
! using gnu::gcj::RawData;
! 
! RawData*
! java::nio::VMDirectByteBuffer::allocate (jint capacity)
  {
    return reinterpret_cast<gnu::gcj::RawData*> (::malloc (capacity));
  }
  
  void
! java::nio::VMDirectByteBuffer::free (gnu::gcj::RawData* address)
  {
    ::free (reinterpret_cast<void*> (address));
  }
  
  jbyte
! java::nio::VMDirectByteBuffer::get (RawData* address, jint index)
  {
!   jbyte* pointer = reinterpret_cast<jbyte*> (address) + index;
    return *pointer;
  }
  
  void
! java::nio::VMDirectByteBuffer::get (RawData* address, jint index,
! 				    jbyteArray dst, jint offset, jint length)
  {
!   jbyte* src = reinterpret_cast<jbyte*> (address) + index;
!   memcpy (elements (dst) + offset, src, length);
! }
! 
! void
! java::nio::VMDirectByteBuffer::put (gnu::gcj::RawData* address,
! 				    jint index, jbyte value)
! {
!   jbyte* pointer = reinterpret_cast<jbyte*> (address) + index;
    *pointer = value;
  }
  
+ RawData*
+ java::nio::VMDirectByteBuffer::adjustAddress (RawData* address, jint offset)
+ {
+   jbyte* start = reinterpret_cast<jbyte*> (address) + offset;
+   return reinterpret_cast<RawData*>(start);
+ }
+ 
  void
! java::nio::VMDirectByteBuffer::shiftDown (RawData* address, jint dst_offset,
! 					  jint src_offset, jint count)
  {
!   jbyte* dst = reinterpret_cast<jbyte*> (address) + dst_offset;
!   jbyte* src = reinterpret_cast<jbyte*> (address) + src_offset;
    ::memmove(dst, src, count);
  }
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/MarshalledObject.java gcc-4.0.0/libjava/java/rmi/MarshalledObject.java
*** gcc-3.4.3/libjava/java/rmi/MarshalledObject.java	Tue Nov 11 12:22:19 2003
--- gcc-4.0.0/libjava/java/rmi/MarshalledObject.java	Thu Oct 21 20:14:01 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* MarshalledObject.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,55 ****
  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.Serializable;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
  import gnu.java.rmi.RMIMarshalledObjectInputStream;
  import gnu.java.rmi.RMIMarshalledObjectOutputStream;
  
  /**
   * FIXME - doc missing
   */
! public final class MarshalledObject
!   extends Object implements Serializable 
  {
-   
    //The following fields are from Java API Documentation "Serialized form"
    private static final long serialVersionUID = 8988374069173025854L;
    byte[] objBytes;
--- 35,54 ----
  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;
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/Naming.java gcc-4.0.0/libjava/java/rmi/Naming.java
*** gcc-3.4.3/libjava/java/rmi/Naming.java	Fri Dec 26 23:23:55 2003
--- gcc-4.0.0/libjava/java/rmi/Naming.java	Thu Nov 18 15:26:38 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Naming.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,57 ****
  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.URL;
- import java.rmi.registry.Registry;
  import java.rmi.registry.LocateRegistry;
  
  public final class Naming {
  
! /** <pre>
   * 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:
!  * 
!  *   //host:port/service-name
   *  
   * The port is optional.
!  * </pre>
   * @param name the service name and location
   * @return Remote-object that implements the named service
   * @throws NotBoundException if no object implements the service
--- 35,64 ----
  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.URL;
  import java.rmi.registry.LocateRegistry;
+ import java.rmi.registry.Registry;
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/RMISecurityManager.java gcc-4.0.0/libjava/java/rmi/RMISecurityManager.java
*** gcc-3.4.3/libjava/java/rmi/RMISecurityManager.java	Fri Mar 21 08:48:14 2003
--- gcc-4.0.0/libjava/java/rmi/RMISecurityManager.java	Sat Oct 16 18:27:50 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RMISecurityManager.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/Remote.java gcc-4.0.0/libjava/java/rmi/Remote.java
*** gcc-3.4.3/libjava/java/rmi/Remote.java	Tue Jan 22 22:40:24 2002
--- gcc-4.0.0/libjava/java/rmi/Remote.java	Sat Oct 16 18:27:50 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Remote.java
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/RemoteException.java gcc-4.0.0/libjava/java/rmi/RemoteException.java
*** gcc-3.4.3/libjava/java/rmi/RemoteException.java	Sun Jun 16 20:55:56 2002
--- gcc-4.0.0/libjava/java/rmi/RemoteException.java	Tue Apr 20 14:44:51 2004
*************** public class RemoteException extends IOE
*** 99,105 ****
     * 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
     */
--- 99,105 ----
     * 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
     */
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/Activatable.java gcc-4.0.0/libjava/java/rmi/activation/Activatable.java
*** gcc-3.4.3/libjava/java/rmi/activation/Activatable.java	Fri Mar 21 09:00:29 2003
--- gcc-4.0.0/libjava/java/rmi/activation/Activatable.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Activatable.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,53 ****
  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.server.RemoteServer;
  import java.rmi.server.RMIClientSocketFactory;
  import java.rmi.server.RMIServerSocketFactory;
! import java.rmi.RemoteException;
! import java.rmi.Remote;
! import java.rmi.NoSuchObjectException;
! import java.rmi.MarshalledObject;
! 
! public abstract class Activatable
! 	extends RemoteServer {
  
  static final long serialVersionUID = -3120617863591563455L;
  
  protected Activatable(String location, MarshalledObject data, boolean restart, int port) throws ActivationException, RemoteException {
--- 35,53 ----
  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 {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/ActivationDesc.java gcc-4.0.0/libjava/java/rmi/activation/ActivationDesc.java
*** gcc-3.4.3/libjava/java/rmi/activation/ActivationDesc.java	Wed Oct  2 21:21:37 2002
--- gcc-4.0.0/libjava/java/rmi/activation/ActivationDesc.java	Sat Oct 16 18:27:50 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ActivationDecc.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/ActivationException.java gcc-4.0.0/libjava/java/rmi/activation/ActivationException.java
*** gcc-3.4.3/libjava/java/rmi/activation/ActivationException.java	Mon Jun 17 19:11:34 2002
--- gcc-4.0.0/libjava/java/rmi/activation/ActivationException.java	Tue Apr 20 14:44:52 2004
*************** public class ActivationException extends
*** 94,100 ****
     * 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
     */
--- 94,100 ----
     * 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
     */
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/ActivationGroup.java gcc-4.0.0/libjava/java/rmi/activation/ActivationGroup.java
*** gcc-3.4.3/libjava/java/rmi/activation/ActivationGroup.java	Fri Mar 21 09:00:29 2003
--- gcc-4.0.0/libjava/java/rmi/activation/ActivationGroup.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ActivationGroup.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,51 ****
  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.server.UnicastRemoteObject;
- import java.rmi.RemoteException;
- import java.rmi.Remote;
  import java.rmi.MarshalledObject;
  
! public abstract class ActivationGroup
! 	extends UnicastRemoteObject
! 	implements ActivationInstantiator {
! 
  static final long serialVersionUID = -7696947875314805420L;
  
  protected ActivationGroup(ActivationGroupID groupID) throws RemoteException {
--- 35,51 ----
  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 {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/ActivationGroupDesc.java gcc-4.0.0/libjava/java/rmi/activation/ActivationGroupDesc.java
*** gcc-3.4.3/libjava/java/rmi/activation/ActivationGroupDesc.java	Fri Mar 21 09:00:29 2003
--- gcc-4.0.0/libjava/java/rmi/activation/ActivationGroupDesc.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ActivationGroupDesc.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.util.Properties;
  import java.rmi.MarshalledObject;
  
  public final class ActivationGroupDesc implements Serializable
  {
--- 35,46 ----
  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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/ActivationGroupID.java gcc-4.0.0/libjava/java/rmi/activation/ActivationGroupID.java
*** gcc-3.4.3/libjava/java/rmi/activation/ActivationGroupID.java	Wed Oct  2 21:21:37 2002
--- gcc-4.0.0/libjava/java/rmi/activation/ActivationGroupID.java	Sat Oct 16 18:27:50 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ActivationGroupID.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/ActivationID.java gcc-4.0.0/libjava/java/rmi/activation/ActivationID.java
*** gcc-3.4.3/libjava/java/rmi/activation/ActivationID.java	Wed Oct  2 21:21:37 2002
--- gcc-4.0.0/libjava/java/rmi/activation/ActivationID.java	Sat Oct 16 18:27:50 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ActivationID.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/ActivationInstantiator.java gcc-4.0.0/libjava/java/rmi/activation/ActivationInstantiator.java
*** gcc-3.4.3/libjava/java/rmi/activation/ActivationInstantiator.java	Sat Oct 11 18:42:06 2003
--- gcc-4.0.0/libjava/java/rmi/activation/ActivationInstantiator.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ActivationInstantiator.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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;
- import java.rmi.MarshalledObject;
  
  public interface ActivationInstantiator
    extends Remote
--- 35,46 ----
  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
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/ActivationMonitor.java gcc-4.0.0/libjava/java/rmi/activation/ActivationMonitor.java
*** gcc-3.4.3/libjava/java/rmi/activation/ActivationMonitor.java	Sat Oct 11 18:42:06 2003
--- gcc-4.0.0/libjava/java/rmi/activation/ActivationMonitor.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ActivationMonitor.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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;
- import java.rmi.MarshalledObject;
  
  public interface ActivationMonitor extends Remote
  {
--- 35,46 ----
  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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/ActivationSystem.java gcc-4.0.0/libjava/java/rmi/activation/ActivationSystem.java
*** gcc-3.4.3/libjava/java/rmi/activation/ActivationSystem.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/activation/ActivationSystem.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ActivationSystem.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  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;
*** 42,48 ****
  
  public interface ActivationSystem extends Remote
  {
!   int SYSTEM_PORT = 0; // XXX
  
    ActivationID registerObject (ActivationDesc desc)
      throws ActivationException, UnknownGroupException, RemoteException;
--- 43,49 ----
  
  public interface ActivationSystem extends Remote
  {
!   int SYSTEM_PORT = 1098;
  
    ActivationID registerObject (ActivationDesc desc)
      throws ActivationException, UnknownGroupException, RemoteException;
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/activation/Activator.java gcc-4.0.0/libjava/java/rmi/activation/Activator.java
*** gcc-3.4.3/libjava/java/rmi/activation/Activator.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/activation/Activator.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Activator.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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;
- import java.rmi.MarshalledObject;
  
  public interface Activator
    extends Remote
--- 35,46 ----
  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
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/dgc/DGC.java gcc-4.0.0/libjava/java/rmi/dgc/DGC.java
*** gcc-3.4.3/libjava/java/rmi/dgc/DGC.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/dgc/DGC.java	Sat Oct 16 18:27:50 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* DGC.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/dgc/Lease.java gcc-4.0.0/libjava/java/rmi/dgc/Lease.java
*** gcc-3.4.3/libjava/java/rmi/dgc/Lease.java	Tue Jan 22 22:40:26 2002
--- gcc-4.0.0/libjava/java/rmi/dgc/Lease.java	Sat Oct 16 18:27:50 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Lease.java
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  package java.rmi.dgc;
  
  import java.io.Serializable;
- import java.rmi.dgc.VMID;
  
  public final class Lease
  	implements Serializable {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/dgc/VMID.java gcc-4.0.0/libjava/java/rmi/dgc/VMID.java
*** gcc-3.4.3/libjava/java/rmi/dgc/VMID.java	Mon Mar 31 11:07:24 2003
--- gcc-4.0.0/libjava/java/rmi/dgc/VMID.java	Sat Oct 16 18:27:50 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* VMID.java
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/registry/LocateRegistry.java gcc-4.0.0/libjava/java/rmi/registry/LocateRegistry.java
*** gcc-3.4.3/libjava/java/rmi/registry/LocateRegistry.java	Tue Jan 22 22:40:28 2002
--- gcc-4.0.0/libjava/java/rmi/registry/LocateRegistry.java	Thu Nov 18 15:26:39 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* LocateRegistry.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,57 ****
  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.io.IOException;
  import java.rmi.RemoteException;
  import java.rmi.server.RMIClientSocketFactory;
  import java.rmi.server.RMIServerSocketFactory;
  import java.rmi.server.RMISocketFactory;
  import java.rmi.server.RemoteRef;
- import java.rmi.server.ObjID;
- import java.net.Socket;
- 
- import gnu.java.rmi.server.UnicastRef;
- import gnu.java.rmi.server.UnicastServerRef;
- import gnu.java.rmi.registry.RegistryImpl;
- import gnu.java.rmi.registry.RegistryImpl_Stub;
  
  public final class LocateRegistry {
  
  public static Registry getRegistry() throws RemoteException {
  	return (getRegistry("localhost", Registry.REGISTRY_PORT));
--- 35,59 ----
  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));
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/registry/Registry.java gcc-4.0.0/libjava/java/rmi/registry/Registry.java
*** gcc-3.4.3/libjava/java/rmi/registry/Registry.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/registry/Registry.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Registry.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,47 ****
  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.NotBoundException;
  import java.rmi.AccessException;
  import java.rmi.AlreadyBoundException;
  import java.rmi.Remote;
  
  public interface Registry extends Remote
  {
--- 35,48 ----
  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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/registry/RegistryHandler.java gcc-4.0.0/libjava/java/rmi/registry/RegistryHandler.java
*** gcc-3.4.3/libjava/java/rmi/registry/RegistryHandler.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/registry/RegistryHandler.java	Sat Oct 16 18:27:51 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RegistryHandler.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/LoaderHandler.java gcc-4.0.0/libjava/java/rmi/server/LoaderHandler.java
*** gcc-3.4.3/libjava/java/rmi/server/LoaderHandler.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/server/LoaderHandler.java	Sat Oct 16 18:27:51 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* LoaderHandler.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/LogStream.java gcc-4.0.0/libjava/java/rmi/server/LogStream.java
*** gcc-3.4.3/libjava/java/rmi/server/LogStream.java	Mon Mar 31 06:49:33 2003
--- gcc-4.0.0/libjava/java/rmi/server/LogStream.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* LogStream.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.PrintStream;
  import java.io.OutputStream;
! import java.io.IOException;
  
  /**
   * @deprecated
--- 35,45 ----
  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
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/ObjID.java gcc-4.0.0/libjava/java/rmi/server/ObjID.java
*** gcc-3.4.3/libjava/java/rmi/server/ObjID.java	Tue Jan 22 22:40:29 2002
--- gcc-4.0.0/libjava/java/rmi/server/ObjID.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ObjID.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,54 ****
  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.Serializable;
- import java.io.ObjectOutput;
- import java.io.ObjectInput;
- import java.io.IOException;
- import java.lang.Math;
  import java.io.DataInput;
  import java.io.DataOutput;
! import java.util.Random;
! 
! public final class ObjID
! 	implements Serializable {
  
  static final long serialVersionUID = -6386392263968365220L;
  
  private static long next = 0x8000000000000000L;
--- 35,52 ----
  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;
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/Operation.java gcc-4.0.0/libjava/java/rmi/server/Operation.java
*** gcc-3.4.3/libjava/java/rmi/server/Operation.java	Mon Mar 31 06:49:33 2003
--- gcc-4.0.0/libjava/java/rmi/server/Operation.java	Sat Oct 16 18:27:51 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Operation.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RMIClassLoader.java gcc-4.0.0/libjava/java/rmi/server/RMIClassLoader.java
*** gcc-3.4.3/libjava/java/rmi/server/RMIClassLoader.java	Tue Nov 11 12:22:19 2003
--- gcc-4.0.0/libjava/java/rmi/server/RMIClassLoader.java	Thu Nov 18 15:26:39 2004
***************
*** 1,6 ****
! /* RMIClassLoader.java
!   Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003
!   Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* RMIClassLoader.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.StringTokenizer;
*** 55,63 ****
   */
  public class RMIClassLoader
  {
!   static private class MyClassLoader extends URLClassLoader
    {
!     private MyClassLoader (URL[] urls, ClassLoader parent, String annotation)
      {
        super (urls, parent);
        this.annotation = annotation;
--- 55,69 ----
   */
  public class RMIClassLoader
  {
!   /**
!    * This class isn't intended to be instantiated.
!    */
!   private RMIClassLoader() {}
! 
!   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;
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RMIClassLoaderSpi.java gcc-4.0.0/libjava/java/rmi/server/RMIClassLoaderSpi.java
*** gcc-3.4.3/libjava/java/rmi/server/RMIClassLoaderSpi.java	Thu Jan  2 00:14:24 2003
--- gcc-4.0.0/libjava/java/rmi/server/RMIClassLoaderSpi.java	Sat Oct 16 18:27:51 2004
***************
*** 1,5 ****
! /* RMIClassLoaderSpi.java
!   Copyright (c) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RMIClassLoaderSpi.java --
!    Copyright (c) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RMIClientSocketFactory.java gcc-4.0.0/libjava/java/rmi/server/RMIClientSocketFactory.java
*** gcc-3.4.3/libjava/java/rmi/server/RMIClientSocketFactory.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/server/RMIClientSocketFactory.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RMIClientSocketFactory.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,44 ****
  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.Socket;
  import java.io.IOException;
  
  public interface RMIClientSocketFactory
  {
--- 35,45 ----
  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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RMIFailureHandler.java gcc-4.0.0/libjava/java/rmi/server/RMIFailureHandler.java
*** gcc-3.4.3/libjava/java/rmi/server/RMIFailureHandler.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/server/RMIFailureHandler.java	Sat Oct 16 18:27:51 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RMIFailureHandler.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RMIServerSocketFactory.java gcc-4.0.0/libjava/java/rmi/server/RMIServerSocketFactory.java
*** gcc-3.4.3/libjava/java/rmi/server/RMIServerSocketFactory.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/server/RMIServerSocketFactory.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RMIServerSocketFactory.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,44 ****
  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.ServerSocket;
  import java.io.IOException;
  
  public interface RMIServerSocketFactory
  {
--- 35,45 ----
  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
  {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RMISocketFactory.java gcc-4.0.0/libjava/java/rmi/server/RMISocketFactory.java
*** gcc-3.4.3/libjava/java/rmi/server/RMISocketFactory.java	Fri Mar 21 09:00:29 2003
--- gcc-4.0.0/libjava/java/rmi/server/RMISocketFactory.java	Fri Oct 22 17:14:21 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RMISocketFactory.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,53 ****
  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.Socket;
- import java.net.ServerSocket;
- import java.io.IOException;
  import gnu.java.rmi.server.RMIDefaultSocketFactory;
  
  public abstract class RMISocketFactory
    implements RMIClientSocketFactory, RMIServerSocketFactory
  {
!   static private RMISocketFactory defaultFactory;
!   static private RMISocketFactory currentFactory;
!   static private RMIFailureHandler currentHandler;
  
    static
      {
--- 35,55 ----
  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
      {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RemoteCall.java gcc-4.0.0/libjava/java/rmi/server/RemoteCall.java
*** gcc-3.4.3/libjava/java/rmi/server/RemoteCall.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/server/RemoteCall.java	Thu Oct 21 20:14:02 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RemoteCall.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
  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.lang.Exception;
  import java.io.IOException;
- import java.io.ObjectOutput;
  import java.io.ObjectInput;
  import java.io.StreamCorruptedException;
  
  /**
--- 35,46 ----
  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;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RemoteObject.java gcc-4.0.0/libjava/java/rmi/server/RemoteObject.java
*** gcc-3.4.3/libjava/java/rmi/server/RemoteObject.java	Thu Nov  7 18:01:04 2002
--- gcc-4.0.0/libjava/java/rmi/server/RemoteObject.java	Sat Feb 19 09:10:39 2005
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RemoteObject.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,62 ****
  
  package java.rmi.server;
  
! import java.io.Serializable;
! import java.rmi.Remote;
! import java.rmi.NoSuchObjectException;
! import java.rmi.UnmarshalException;
! import java.rmi.server.RemoteRef;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
! import java.io.IOException;
! import java.lang.ClassNotFoundException;
! import java.lang.InstantiationException;
! import java.lang.IllegalAccessException;
  import java.lang.reflect.Constructor;
  
  public abstract class RemoteObject
  	implements Remote, Serializable {
  
! public static final long serialVersionUID = -3215090123894869218l;
  
  protected transient RemoteRef ref;
  
  protected RemoteObject() {
  	this(null);
  }
--- 37,61 ----
  
  package java.rmi.server;
  
! import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
! import java.io.Serializable;
  import java.lang.reflect.Constructor;
+ 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);
  }
*************** public RemoteRef getRef() {
*** 69,89 ****
  	return (ref);
  }
  
    public static Remote toStub(Remote obj) throws NoSuchObjectException 
    {
!     Class cls = obj.getClass();
!     String classname = cls.getName();
!     ClassLoader cl = cls.getClassLoader();
!     try 
!       {
! 	Class scls = cl.loadClass(classname + "_Stub");
! 	// JDK 1.2 stubs
! 	Class[] stubprototype = new Class[] { RemoteRef.class };
! 	Constructor con = scls.getConstructor(stubprototype);
! 	return (Remote)(con.newInstance(new Object[]{obj}));
!       }
!     catch (Exception e) {}
!     throw new NoSuchObjectException(obj.getClass().getName());
    }
  
  public int hashCode() {
--- 68,91 ----
  	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() {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RemoteRef.java gcc-4.0.0/libjava/java/rmi/server/RemoteRef.java
*** gcc-3.4.3/libjava/java/rmi/server/RemoteRef.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/server/RemoteRef.java	Tue Feb 22 18:58:51 2005
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RemoteRef.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,51 ****
  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.lang.reflect.Method;
  import java.io.Externalizable;
  import java.rmi.Remote;
  import java.rmi.RemoteException;
- import java.io.ObjectOutput;
  
  public interface RemoteRef extends Externalizable
  {
!   long serialVersionUID = 0;
    
    String packagePrefix = "gnu.java.rmi.server";
  
--- 35,52 ----
  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;
    
    String packagePrefix = "gnu.java.rmi.server";
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RemoteServer.java gcc-4.0.0/libjava/java/rmi/server/RemoteServer.java
*** gcc-3.4.3/libjava/java/rmi/server/RemoteServer.java	Mon Sep 16 09:46:36 2002
--- gcc-4.0.0/libjava/java/rmi/server/RemoteServer.java	Thu Oct 21 20:14:03 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RemoteServer.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,48 ****
  
  package java.rmi.server;
  
  import java.io.OutputStream;
  import java.io.PrintStream;
  
! public abstract class RemoteServer
! 	extends RemoteObject {
! 
  private static final long serialVersionUID = -4100238210092549637L;
  
  protected RemoteServer() {
--- 37,49 ----
  
  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() {
*************** protected RemoteServer(RemoteRef ref) {
*** 54,60 ****
  }
  
  public static String getClientHost() throws ServerNotActiveException {
! 	throw new Error("Not implemented");
  }
  
  public static void setLog(OutputStream out) {
--- 55,68 ----
  }
  
  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) {
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/RemoteStub.java gcc-4.0.0/libjava/java/rmi/server/RemoteStub.java
*** gcc-3.4.3/libjava/java/rmi/server/RemoteStub.java	Mon Mar 31 06:49:33 2003
--- gcc-4.0.0/libjava/java/rmi/server/RemoteStub.java	Sat Oct 16 18:27:51 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* RemoteStub.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/ServerCloneException.java gcc-4.0.0/libjava/java/rmi/server/ServerCloneException.java
*** gcc-3.4.3/libjava/java/rmi/server/ServerCloneException.java	Mon Jun 17 19:11:39 2002
--- gcc-4.0.0/libjava/java/rmi/server/ServerCloneException.java	Tue Apr 20 14:44:53 2004
*************** public class ServerCloneException extend
*** 89,95 ****
     * 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
     */
--- 89,95 ----
     * 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
     */
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/ServerRef.java gcc-4.0.0/libjava/java/rmi/server/ServerRef.java
*** gcc-3.4.3/libjava/java/rmi/server/ServerRef.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/server/ServerRef.java	Tue Feb 22 18:58:51 2005
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ServerRef.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,50 ****
  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;
- import java.rmi.server.RemoteStub;
- import java.rmi.server.ServerNotActiveException;
  
  public interface ServerRef extends RemoteRef
  {
!   long serialVersionUID = 0;
  
    RemoteStub exportObject(Remote obj, Object data) throws RemoteException;
  
--- 35,49 ----
  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;
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/Skeleton.java gcc-4.0.0/libjava/java/rmi/server/Skeleton.java
*** gcc-3.4.3/libjava/java/rmi/server/Skeleton.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/server/Skeleton.java	Sat Oct 16 18:27:51 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Skeleton.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  package java.rmi.server;
  
  import java.rmi.Remote;
- import java.rmi.server.RemoteCall;
  
  /**
   * @deprecated
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/SkeletonMismatchException.java gcc-4.0.0/libjava/java/rmi/server/SkeletonMismatchException.java
*** gcc-3.4.3/libjava/java/rmi/server/SkeletonMismatchException.java	Mon Jun 17 19:11:40 2002
--- gcc-4.0.0/libjava/java/rmi/server/SkeletonMismatchException.java	Sat Oct 16 18:27:51 2004
***************
*** 1,5 ****
  /* 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.
  
--- 1,5 ----
  /* 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.
  
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/UID.java gcc-4.0.0/libjava/java/rmi/server/UID.java
*** gcc-3.4.3/libjava/java/rmi/server/UID.java	Tue Jan 22 22:40:29 2002
--- gcc-4.0.0/libjava/java/rmi/server/UID.java	Sat Feb 19 09:10:39 2005
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* UID.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,54 ****
  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.Serializable;
- import java.io.DataOutput;
  import java.io.DataInput;
  import java.io.IOException;
! import java.util.Random;
! import java.lang.Thread;
! import java.lang.InterruptedException;
! 
! public final class UID
! 	implements Serializable {
  
! public static final long serialVersionUID = 1086053664494604050L;
  
  private static final Object lock = UID.class;
  private static long baseTime = System.currentTimeMillis();
--- 35,51 ----
  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 short count;
*** 65,71 ****
   */
  public UID() {
  	synchronized (lock) {
! 		if (count == Short.MAX_VALUE) {
  			long newtime;
  			for (;;) {
  				newtime = System.currentTimeMillis();
--- 62,68 ----
   */
  public UID() {
  	synchronized (lock) {
! 		if (nextCount == Short.MAX_VALUE) {
  			long newtime;
  			for (;;) {
  				newtime = System.currentTimeMillis();
diff -Nrcpad gcc-3.4.3/libjava/java/rmi/server/UnicastRemoteObject.java gcc-4.0.0/libjava/java/rmi/server/UnicastRemoteObject.java
*** gcc-3.4.3/libjava/java/rmi/server/UnicastRemoteObject.java	Fri Jun 27 15:58:42 2003
--- gcc-4.0.0/libjava/java/rmi/server/UnicastRemoteObject.java	Wed Feb 16 18:51:22 2005
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* UnicastRemoteObject.java --
!    Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,53 ****
  
  package java.rmi.server;
  
- import java.rmi.RemoteException;
- import java.rmi.Remote;
- import java.rmi.server.RemoteRef;
- import java.rmi.NoSuchObjectException;
  import gnu.java.rmi.server.UnicastServerRef;
- import gnu.java.rmi.server.UnicastServer;
  
! 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;
--- 38,51 ----
  
  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;
*************** public static RemoteStub exportObject(Re
*** 100,106 ****
        {
  	sref = new UnicastServerRef(new ObjID (), port, ssf);
        }
!     return (sref.exportObject (obj)); 
    }
  
    /**
--- 98,106 ----
        {
  	sref = new UnicastServerRef(new ObjID (), port, ssf);
        }
!     Remote stub = sref.exportObject (obj); 
!     addStub(obj, stub);
!     return stub;
    }
  
    /**
*************** public static RemoteStub exportObject(Re
*** 118,129 ****
    {
      if (obj instanceof RemoteObject)
        {
  	UnicastServerRef sref = (UnicastServerRef)((RemoteObject)obj).getRef();
  	return sref.unexportObject(obj, force);
        }
      else
!       //FIX ME
!       ;
      return true;
    }
  
--- 118,132 ----
    {
      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-3.4.3/libjava/java/rmi/server/Unreferenced.java gcc-4.0.0/libjava/java/rmi/server/Unreferenced.java
*** gcc-3.4.3/libjava/java/rmi/server/Unreferenced.java	Sat Oct 11 18:42:07 2003
--- gcc-4.0.0/libjava/java/rmi/server/Unreferenced.java	Sat Oct 16 18:27:51 2004
***************
*** 1,5 ****
! /*
!   Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Unreferenced.java --
!    Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
diff -Nrcpad gcc-3.4.3/libjava/java/security/AccessControlContext.java gcc-4.0.0/libjava/java/security/AccessControlContext.java
*** gcc-3.4.3/libjava/java/security/AccessControlContext.java	Tue Jan 22 22:40:30 2002
--- gcc-4.0.0/libjava/java/security/AccessControlContext.java	Fri Jul  9 15:43:01 2004
***************
*** 1,5 ****
  /* AccessControlContext.java --- Access Control Context Class
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessControlContext.java --- Access Control Context Class
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,55 ****
  package java.security;
  
  /**
!    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 JDK 1.2
   */
  public final class AccessControlContext
  {
--- 38,55 ----
  package java.security;
  
  /**
!  * 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
  {
*************** public final class AccessControlContext
*** 57,67 ****
    private 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)
    {
--- 57,67 ----
    private 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)
    {
*************** public final class AccessControlContext
*** 91,102 ****
    }
  
    /**
!      Construct a new AccessControlContext with the specified
!      ProtectionDomains and DomainCombiner
! 
!      @param context The ProtectionDomains to use
! 
!      @since JDK 1.3
     */
    public AccessControlContext(AccessControlContext acc,
  			      DomainCombiner combiner)
--- 91,100 ----
    }
  
    /**
!    * Construct a new AccessControlContext with the specified
!    * ProtectionDomains and DomainCombiner
!    *
!    * @since 1.3
     */
    public AccessControlContext(AccessControlContext acc,
  			      DomainCombiner combiner)
*************** public final class AccessControlContext
*** 106,114 ****
    }
  
    /**
!      Returns the Domain Combiner associated with the AccessControlContext
! 
!      @returns the DomainCombiner
     */
    public DomainCombiner getDomainCombiner()
    {
--- 104,112 ----
    }
  
    /**
!    * Returns the Domain Combiner associated with the AccessControlContext
!    *
!    * @return the DomainCombiner
     */
    public DomainCombiner getDomainCombiner()
    {
*************** public final class AccessControlContext
*** 116,127 ****
    }
  
    /**
!      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
    {
--- 114,125 ----
    }
  
    /**
!    * 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
    {
*************** public final class AccessControlContext
*** 133,146 ****
    }
  
    /**
!      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)
    {
--- 131,144 ----
    }
  
    /**
!    * 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)
    {
*************** public final class AccessControlContext
*** 160,168 ****
    }
  
    /**
!      Computes a hash code of this class
! 
!      @return a hash code representing this class
     */
    public int hashCode()
    {
--- 158,166 ----
    }
  
    /**
!    * Computes a hash code of this class
!    *
!    * @return a hash code representing this class
     */
    public int hashCode()
    {
diff -Nrcpad gcc-3.4.3/libjava/java/security/AccessControlException.java gcc-4.0.0/libjava/java/security/AccessControlException.java
*** gcc-3.4.3/libjava/java/security/AccessControlException.java	Fri May 24 11:57:08 2002
--- gcc-4.0.0/libjava/java/security/AccessControlException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* AccessControlException.java -- Permission is denied
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessControlException.java -- Permission is denied
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 42,48 ****
   * 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
   */
--- 42,48 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/security/AccessController.java gcc-4.0.0/libjava/java/security/AccessController.java
*** gcc-3.4.3/libjava/java/security/AccessController.java	Fri May 24 11:57:10 2002
--- gcc-4.0.0/libjava/java/security/AccessController.java	Tue Apr 20 14:44:54 2004
***************
*** 1,5 ****
  /* AccessController.java --- Access control context and permission checker
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessController.java --- Access control context and permission checker
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public final class AccessController
*** 91,97 ****
     *
     * @param action the <code>PrivilegedAction</code> whose <code>run()</code>
     * should be be called.
!    * @returns the result of the <code>action.run()</code> method.
     */
    public static Object doPrivileged(PrivilegedAction action)
    {
--- 91,97 ----
     *
     * @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)
    {
*************** public final class AccessController
*** 110,116 ****
     * should be be called.
     * @param context the <code>AccessControlContext</code> whose protection
     * domains should be added to the protection domain of the calling class.
!    * @returns the result of the <code>action.run()</code> method.
     */
    public static Object doPrivileged(PrivilegedAction action,
  				    AccessControlContext context)
--- 110,116 ----
     * 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)
*************** public final class AccessController
*** 130,136 ****
     *
     * @param action the <code>PrivilegedExceptionAction</code> whose
     * <code>run()</code> should be be called.
!    * @returns the result of the <code>action.run()</code> method.
     * @exception PrivilegedActionException wrapped around any exception that
     * is thrown in the <code>run()</code> method.
     */
--- 130,136 ----
     *
     * @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 exception that
     * is thrown in the <code>run()</code> method.
     */
*************** public final class AccessController
*** 162,168 ****
     * <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.
!    * @returns the result of the <code>action.run()</code> method.
     * @exception PrivilegedActionException wrapped around any exception that
     * is thrown in the <code>run()</code> method.
     */
--- 162,168 ----
     * <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 exception that
     * is thrown in the <code>run()</code> method.
     */
diff -Nrcpad gcc-3.4.3/libjava/java/security/AlgorithmParameterGenerator.java gcc-4.0.0/libjava/java/security/AlgorithmParameterGenerator.java
*** gcc-3.4.3/libjava/java/security/AlgorithmParameterGenerator.java	Wed Apr 30 07:23:41 2003
--- gcc-4.0.0/libjava/java/security/AlgorithmParameterGenerator.java	Tue Feb 22 21:35:03 2005
***************
*** 1,5 ****
  /* AlgorithmParameterGenerator.java --- Algorithm Parameter Generator
!    Copyright (C) 1999, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AlgorithmParameterGenerator.java --- Algorithm Parameter Generator
!    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
  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;
  
  import gnu.java.security.Engine;
  
  /**
   * <p>The <code>AlgorithmParameterGenerator</code> class is used to generate a
   * set of parameters to be used with a certain algorithm. Parameter generators
--- 35,47 ----
  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
*************** import gnu.java.security.Engine;
*** 67,73 ****
   *  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>
--- 68,74 ----
   *  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>
*************** public class AlgorithmParameterGenerator
*** 140,146 ****
          {
            return getInstance(algorithm, p[i]);
          }
!       catch (NoSuchAlgorithmException ignored) {}
  
      throw new NoSuchAlgorithmException(algorithm);
    }
--- 141,150 ----
          {
            return getInstance(algorithm, p[i]);
          }
!       catch (NoSuchAlgorithmException e)
! 	{
! 	  // Ignore.
! 	}
  
      throw new NoSuchAlgorithmException(algorithm);
    }
*************** public class AlgorithmParameterGenerator
*** 170,176 ****
  
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException();
  
      return getInstance(algorithm, p);
    }
--- 174,180 ----
  
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException(provider);
  
      return getInstance(algorithm, p);
    }
diff -Nrcpad gcc-3.4.3/libjava/java/security/AlgorithmParameters.java gcc-4.0.0/libjava/java/security/AlgorithmParameters.java
*** gcc-3.4.3/libjava/java/security/AlgorithmParameters.java	Wed Apr 30 07:23:41 2003
--- gcc-4.0.0/libjava/java/security/AlgorithmParameters.java	Tue Feb 22 21:35:03 2005
***************
*** 1,5 ****
  /* AlgorithmParameters.java --- Algorithm Parameters Implementation Class
!    Copyright (C) 1999, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AlgorithmParameters.java --- Algorithm Parameters Implementation Class
!    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,48 ****
  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.InvalidParameterSpecException;
! import java.security.spec.AlgorithmParameterSpec;
! import java.io.IOException;
  
  import gnu.java.security.Engine;
  
  /**
   * <p>This class is used as an opaque representation of cryptographic
   * parameters.</p>
--- 35,49 ----
  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>
*************** import gnu.java.security.Engine;
*** 71,77 ****
   * parameter specification or parameter encoding.</p>
   *
   * <p>A transparent parameter specification is obtained from an
!  * <ocde>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>
   *
--- 72,78 ----
   * 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>
   *
*************** public class AlgorithmParameters
*** 136,147 ****
      throws NoSuchAlgorithmException
    {
      Provider[] p = Security.getProviders();
      for (int i = 0; i < p.length; i++)
        try
          {
            return getInstance(algorithm, p[i]);
          }
!       catch (NoSuchAlgorithmException ignored) {}
  
      throw new NoSuchAlgorithmException(algorithm);
    }
--- 137,152 ----
      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);
    }
*************** public class AlgorithmParameters
*** 173,179 ****
      
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException();
  
      return getInstance(algorithm, p);
    }
--- 178,184 ----
      
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException(provider);
  
      return getInstance(algorithm, p);
    }
diff -Nrcpad gcc-3.4.3/libjava/java/security/AlgorithmParametersSpi.java gcc-4.0.0/libjava/java/security/AlgorithmParametersSpi.java
*** gcc-3.4.3/libjava/java/security/AlgorithmParametersSpi.java	Tue Jan 22 22:40:30 2002
--- gcc-4.0.0/libjava/java/security/AlgorithmParametersSpi.java	Thu Oct 21 20:21:03 2004
***************
*** 1,5 ****
  /* AlgorithmParametersSpi.java --- Algorithm Parameters SPI
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AlgorithmParametersSpi.java --- Algorithm Parameters SPI
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,113 ****
  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.InvalidParameterSpecException;
! import java.security.spec.AlgorithmParameterSpec;
  import java.io.IOException;
  
  /**
!    AlgorithmParametersSpi is the Service Provider Interface
!    for the Algorithm Parameters class. This class is used
!    to manage the algorithm parameters.
! 
!    @since JDK 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)
--- 35,117 ----
  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)
*************** public abstract class AlgorithmParameter
*** 115,145 ****
  
  
    /**
!      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();
  }
--- 119,149 ----
  
  
    /**
!    * 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-3.4.3/libjava/java/security/AllPermission.java gcc-4.0.0/libjava/java/security/AllPermission.java
*** gcc-3.4.3/libjava/java/security/AllPermission.java	Fri May 24 11:57:11 2002
--- gcc-4.0.0/libjava/java/security/AllPermission.java	Sun Feb 20 21:18:30 2005
***************
*** 1,5 ****
  /* AllPermission.java -- Permission to do anything
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AllPermission.java -- Permission to do anything
!    Copyright (C) 1998, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,53 ****
  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;
- import java.util.Collections;
  import gnu.java.util.EmptyEnumeration;
  
  /**
   * 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
--- 35,55 ----
  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
*************** public final class AllPermission extends
*** 133,196 ****
    {
      return new AllPermissionCollection();
    }
- } // class AllPermission
- 
- /**
-  * Implements AllPermission.newPermissionCollection, and obeys serialization
-  * of JDK.
-  *
-  * @author Eric Blake <ebb9@email.byu.edu>
-  */
- 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
--- 135,198 ----
    {
      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-3.4.3/libjava/java/security/BasicPermission.java gcc-4.0.0/libjava/java/security/BasicPermission.java
*** gcc-3.4.3/libjava/java/security/BasicPermission.java	Sat Jun 14 05:45:12 2003
--- gcc-4.0.0/libjava/java/security/BasicPermission.java	Sun Feb 20 21:18:30 2005
***************
*** 1,5 ****
  /* BasicPermission.java -- implements a simple named permission
!    Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.Hashtable;
  import java.util.Enumeration;
  
  /**
   * This class implements a simple model for named permissions without an
--- 35,46 ----
  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
*************** import java.util.Enumeration;
*** 57,64 ****
   * <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
--- 58,65 ----
   * <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
*************** import java.util.Enumeration;
*** 71,78 ****
   * @since 1.1
   * @status updated to 1.4
   */
! public abstract class BasicPermission extends Permission
    implements Serializable
  {
    /**
     * Compatible with JDK 1.1+.
--- 72,80 ----
   * @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+.
*************** public abstract class BasicPermission ex
*** 80,88 ****
    private static final long serialVersionUID = 6279438298436773498L;
  
    /**
!    * Create a new instance with the specified permission name. If the name
!    * is empty, or contains an illegal wildcard character, an exception is
!    * thrown.
     *
     * @param name the name of this permission
     * @throws NullPointerException if name is null
--- 82,89 ----
    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
*************** public abstract class BasicPermission ex
*** 91,102 ****
    public BasicPermission(String name)
    {
      super(name);
!     if (name.indexOf("*") != -1)
!       {
!         if ((! name.endsWith(".*") && ! name.equals("*"))
!             || name.indexOf("*") != name.lastIndexOf("*"))
!           throw new IllegalArgumentException("Bad wildcard: " + name);
!       }
      if ("".equals(name))
        throw new IllegalArgumentException("Empty name");
    }
--- 92,102 ----
    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");
    }
*************** public abstract class BasicPermission ex
*** 198,308 ****
    {
      return new BasicPermissionCollection(getClass());
    }
- } // class BasicPermission
- 
- /**
-  * Implements AllPermission.newPermissionCollection, and obeys serialization
-  * of JDK.
-  *
-  * @author Eric Blake <ebb9@email.byu.edu>
-  */
- 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
--- 198,308 ----
    {
      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-3.4.3/libjava/java/security/Certificate.java gcc-4.0.0/libjava/java/security/Certificate.java
*** gcc-3.4.3/libjava/java/security/Certificate.java	Fri Jun 27 16:11:26 2003
--- gcc-4.0.0/libjava/java/security/Certificate.java	Thu Oct 21 20:21:03 2004
***************
*** 1,5 ****
  /* Certificate.java -- deprecated interface for modeling digital certificates
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Certificate.java -- deprecated interface for modeling digital certificates
!    Copyright (C) 1998, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,46 ****
  
  package java.security;
  
  import java.io.InputStream;
  import java.io.OutputStream;
- import java.io.IOException;
  
  /**
   * This interface models a digital certificate which verifies the
--- 38,46 ----
  
  package java.security;
  
+ import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  
  /**
   * This interface models a digital certificate which verifies the
diff -Nrcpad gcc-3.4.3/libjava/java/security/CodeSource.java gcc-4.0.0/libjava/java/security/CodeSource.java
*** gcc-3.4.3/libjava/java/security/CodeSource.java	Fri May 24 11:57:12 2002
--- gcc-4.0.0/libjava/java/security/CodeSource.java	Thu Oct 21 20:21:03 2004
***************
*** 1,5 ****
  /* CodeSource.java -- Code location and certifcates
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CodeSource.java -- Code location and certifcates
!    Copyright (C) 1998, 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.IOException;
*** 43,55 ****
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
- import java.net.URL;
  import java.net.SocketPermission;
  // Note that this overrides Certificate in this package.
  import java.security.cert.Certificate;
- import java.security.cert.CertificateFactory;
  import java.security.cert.CertificateEncodingException;
  import java.security.cert.CertificateException;
  import java.util.Arrays;
  import java.util.HashSet;
  import java.util.Iterator;
--- 43,55 ----
  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;
*************** import java.util.Iterator;
*** 59,66 ****
   * 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
   */
--- 59,66 ----
   * 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 Seria
*** 159,175 ****
     * 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<br><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
--- 159,180 ----
     * 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
*************** public class CodeSource implements Seria
*** 183,201 ****
     *             location file must start with this object's location file
     *             with the '/' character appended to it.</li>
     *         </ul></li>
!    *     </ol>
     * </ol>
     *
     * <p>For example, each of these locations imply the location
!    * "http://java.sun.com/classes/foo.jar":<ul>
     * <pre>
     * http:
     * http://*.sun.com/classes/*
     * http://java.sun.com/classes/-
     * http://java.sun.com/classes/foo.jar
     * </pre>
!    * Note that the code source with null location and null certificates implies
!    * all other code sources.
     *
     * @param cs the <code>CodeSource</code> to test against this object
     * @return true if this specified <code>CodeSource</code> is implied
--- 188,208 ----
     *             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 class CodeSource implements Seria
*** 245,251 ****
    /**
     * 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 "<no certificates>"),
     * followed by <code>")"</code>.
     *
     * @return a <code>String</code> for this object
--- 252,258 ----
    /**
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/DigestException.java gcc-4.0.0/libjava/java/security/DigestException.java
*** gcc-3.4.3/libjava/java/security/DigestException.java	Fri May 24 11:57:12 2002
--- gcc-4.0.0/libjava/java/security/DigestException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* DigestException.java -- A generic message digest exception
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DigestException.java -- A generic message digest exception
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 41,47 ****
   * 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
--- 41,47 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/DigestInputStream.java gcc-4.0.0/libjava/java/security/DigestInputStream.java
*** gcc-3.4.3/libjava/java/security/DigestInputStream.java	Tue Dec  2 15:52:07 2003
--- gcc-4.0.0/libjava/java/security/DigestInputStream.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* DigestInputStream.java --- An Input stream tied to a message digest
!    Copyright (C) 1999, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,62 ****
  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.MessageDigest;
! import java.io.InputStream;
  import java.io.FilterInputStream;
  import java.io.IOException;
  
  /**
!    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;
  
--- 35,63 ----
  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;
  
*************** public class DigestInputStream extends F
*** 64,75 ****
    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)
    {
--- 65,76 ----
    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)
    {
*************** public class DigestInputStream extends F
*** 79,87 ****
    }
  
    /**
!      Returns the MessageDigest associated with this DigestInputStream 
! 
!      @return The MessageDigest used to hash this stream
     */
    public MessageDigest getMessageDigest()
    {
--- 80,88 ----
    }
  
    /**
!    * Returns the MessageDigest associated with this DigestInputStream 
!    *
!    * @return The MessageDigest used to hash this stream
     */
    public MessageDigest getMessageDigest()
    {
*************** public class DigestInputStream extends F
*** 89,97 ****
    }
  
    /**
!      Sets the current MessageDigest to current parameter
! 
!      @param digest A MessageDigest to associate with this stream
     */
    public void setMessageDigest(MessageDigest digest)
    {
--- 90,98 ----
    }
  
    /**
!    * Sets the current MessageDigest to current parameter
!    *
!    * @param digest A MessageDigest to associate with this stream
     */
    public void setMessageDigest(MessageDigest digest)
    {
*************** public class DigestInputStream extends F
*** 99,113 ****
    }
  
    /** 
!      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
    {
--- 100,114 ----
    }
  
    /** 
!    * 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
    {
*************** public class DigestInputStream extends F
*** 120,137 ****
    }
  
    /** 
!      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
    {
--- 121,138 ----
    }
  
    /** 
!    * 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
    {
*************** public class DigestInputStream extends F
*** 144,153 ****
    }
  
    /**
!      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)
    {
--- 145,154 ----
    }
  
    /**
!    * 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)
    {
*************** public class DigestInputStream extends F
*** 155,163 ****
    }
  
    /**
!      Converts the input stream and underlying message digest to a string.
! 
!      @return A string representing the input stream and message digest.
     */
    public String toString()
    {
--- 156,164 ----
    }
  
    /**
!    * Converts the input stream and underlying message digest to a string.
!    *
!    * @return A string representing the input stream and message digest.
     */
    public String toString()
    {
diff -Nrcpad gcc-3.4.3/libjava/java/security/DigestOutputStream.java gcc-4.0.0/libjava/java/security/DigestOutputStream.java
*** gcc-3.4.3/libjava/java/security/DigestOutputStream.java	Fri May 24 11:57:13 2002
--- gcc-4.0.0/libjava/java/security/DigestOutputStream.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* DigestOutputStream.java --- An output stream tied to a message digest
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,62 ****
  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.OutputStream;
  import java.io.FilterOutputStream;
  import java.io.IOException;
  
  /**
!    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;
  
--- 35,63 ----
  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;
  
*************** public class DigestOutputStream extends 
*** 64,75 ****
    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)
    {
--- 65,76 ----
    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)
    {
*************** public class DigestOutputStream extends 
*** 78,86 ****
    }
  
    /**
!      Returns the MessageDigest associated with this DigestOutputStream
! 
!      @return The MessageDigest used to hash this stream
     */
    public MessageDigest getMessageDigest()
    {
--- 79,87 ----
    }
  
    /**
!    * Returns the MessageDigest associated with this DigestOutputStream
!    *
!    * @return The MessageDigest used to hash this stream
     */
    public MessageDigest getMessageDigest()
    {
*************** public class DigestOutputStream extends 
*** 88,96 ****
    }
  
    /**
!      Sets the current MessageDigest to current parameter
! 
!      @param digest A MessageDigest to associate with this stream
     */
    public void setMessageDigest(MessageDigest digest)
    {
--- 89,97 ----
    }
  
    /**
!    * Sets the current MessageDigest to current parameter
!    *
!    * @param digest A MessageDigest to associate with this stream
     */
    public void setMessageDigest(MessageDigest digest)
    {
*************** public class DigestOutputStream extends 
*** 99,111 ****
  
  
    /**
!      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
    {
--- 100,112 ----
  
  
    /**
!    * 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
    {
*************** public class DigestOutputStream extends 
*** 116,130 ****
    }
  
    /**
!      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
    {
--- 117,131 ----
    }
  
    /**
!    * 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
    {
*************** public class DigestOutputStream extends 
*** 135,144 ****
    }
  
    /**
!      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)
    {
--- 136,145 ----
    }
  
    /**
!    * 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)
    {
*************** public class DigestOutputStream extends 
*** 146,154 ****
    }
  
    /**
!      Converts the output stream and underlying message digest to a string.
! 
!      @return A string representing the output stream and message digest.
     */
    public String toString()
    {
--- 147,155 ----
    }
  
    /**
!    * Converts the output stream and underlying message digest to a string.
!    *
!    * @return A string representing the output stream and message digest.
     */
    public String toString()
    {
diff -Nrcpad gcc-3.4.3/libjava/java/security/DummyKeyPairGenerator.java gcc-4.0.0/libjava/java/security/DummyKeyPairGenerator.java
*** gcc-3.4.3/libjava/java/security/DummyKeyPairGenerator.java	Sun Nov 17 00:10:24 2002
--- gcc-4.0.0/libjava/java/security/DummyKeyPairGenerator.java	Mon Aug 30 10:25:37 2004
*************** final class DummyKeyPairGenerator extend
*** 51,61 ****
  
    public Object clone() throws CloneNotSupportedException
    {
-     if (!(kpgSpi instanceof Cloneable))
-       throw new CloneNotSupportedException();
- 
      KeyPairGenerator result = new DummyKeyPairGenerator
! 	    ((KeyPairGeneratorSpi) kpgSpi.clone(), this.getAlgorithm());
      result.provider = this.getProvider();
      return result;
    }
--- 51,58 ----
  
    public Object clone() throws CloneNotSupportedException
    {
      KeyPairGenerator result = new DummyKeyPairGenerator
!             ((KeyPairGeneratorSpi) kpgSpi.clone(), this.getAlgorithm());
      result.provider = this.getProvider();
      return result;
    }
diff -Nrcpad gcc-3.4.3/libjava/java/security/DummyMessageDigest.java gcc-4.0.0/libjava/java/security/DummyMessageDigest.java
*** gcc-3.4.3/libjava/java/security/DummyMessageDigest.java	Sun Nov 17 00:10:24 2002
--- gcc-4.0.0/libjava/java/security/DummyMessageDigest.java	Mon Aug 30 10:25:37 2004
*************** final class DummyMessageDigest extends M
*** 49,59 ****
  
    public Object clone() throws CloneNotSupportedException
    {
-     if (!(mdSpi instanceof Cloneable))
-       throw new CloneNotSupportedException();
- 
      MessageDigest result = new DummyMessageDigest
! 	((MessageDigestSpi) mdSpi.clone(), this.getAlgorithm());
      result.provider = this.getProvider();
      return result;
    }
--- 49,56 ----
  
    public Object clone() throws CloneNotSupportedException
    {
      MessageDigest result = new DummyMessageDigest
!         ((MessageDigestSpi) mdSpi.clone(), this.getAlgorithm());
      result.provider = this.getProvider();
      return result;
    }
diff -Nrcpad gcc-3.4.3/libjava/java/security/DummySignature.java gcc-4.0.0/libjava/java/security/DummySignature.java
*** gcc-3.4.3/libjava/java/security/DummySignature.java	Sun Nov 17 00:10:24 2002
--- gcc-4.0.0/libjava/java/security/DummySignature.java	Mon Aug 30 10:25:37 2004
*************** final class DummySignature extends Signa
*** 49,59 ****
  
    public Object clone() throws CloneNotSupportedException
    {
-     if (!(sigSpi instanceof Cloneable))
-       throw new CloneNotSupportedException();
- 
      Signature result = new DummySignature
! 	    ((SignatureSpi) sigSpi.clone(), this.getAlgorithm());
      result.provider = this.getProvider();
      return result;
    }
--- 49,56 ----
  
    public Object clone() throws CloneNotSupportedException
    {
      Signature result = new DummySignature
!             ((SignatureSpi) sigSpi.clone(), this.getAlgorithm());
      result.provider = this.getProvider();
      return result;
    }
diff -Nrcpad gcc-3.4.3/libjava/java/security/GeneralSecurityException.java gcc-4.0.0/libjava/java/security/GeneralSecurityException.java
*** gcc-3.4.3/libjava/java/security/GeneralSecurityException.java	Fri May 24 11:57:13 2002
--- gcc-4.0.0/libjava/java/security/GeneralSecurityException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* GeneralSecurityException.java -- Common superclass of security exceptions
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GeneralSecurityException.java -- Common superclass of security exceptions
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 46,52 ****
   * (<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
--- 46,52 ----
   * (<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
diff -Nrcpad gcc-3.4.3/libjava/java/security/Guard.java gcc-4.0.0/libjava/java/security/Guard.java
*** gcc-3.4.3/libjava/java/security/Guard.java	Fri May 24 11:57:14 2002
--- gcc-4.0.0/libjava/java/security/Guard.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* Guard.java -- Check access to a guarded object
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Guard.java -- Check access to a guarded object
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 41,47 ****
   * 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
--- 41,47 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/GuardedObject.java gcc-4.0.0/libjava/java/security/GuardedObject.java
*** gcc-3.4.3/libjava/java/security/GuardedObject.java	Fri May 24 11:57:14 2002
--- gcc-4.0.0/libjava/java/security/GuardedObject.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* GuardedObject.java -- An object protected by a Guard
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.io.IOException;
  import java.io.ObjectOutputStream;
  
  /**
   * This class is an object that is guarded by a <code>Guard</code> object.
--- 35,46 ----
  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.
*************** import java.io.ObjectOutputStream;
*** 49,55 ****
   * <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
   */
--- 50,56 ----
   * <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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/security/Identity.java gcc-4.0.0/libjava/java/security/Identity.java
*** gcc-3.4.3/libjava/java/security/Identity.java	Sat May 10 07:12:47 2003
--- gcc-4.0.0/libjava/java/security/Identity.java	Wed Oct 20 07:21:47 2004
*************** public abstract class Identity implement
*** 151,157 ****
     * @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)
--- 151,157 ----
     * @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 abstract class Identity implement
*** 269,275 ****
     */
    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);
--- 269,275 ----
     */
    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);
diff -Nrcpad gcc-3.4.3/libjava/java/security/IdentityScope.java gcc-4.0.0/libjava/java/security/IdentityScope.java
*** gcc-3.4.3/libjava/java/security/IdentityScope.java	Sat May 10 07:12:47 2003
--- gcc-4.0.0/libjava/java/security/IdentityScope.java	Mon Oct 18 12:22:50 2004
*************** import java.util.Enumeration;
*** 71,77 ****
  public abstract class IdentityScope extends Identity
  {
    private static final long serialVersionUID = -2337346281189773310L;
!   private static IdentityScope systemScope = null;
  
    /**
     * This constructor is used for serialization only and should not be used by
--- 71,77 ----
  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
*************** public abstract class IdentityScope exte
*** 123,129 ****
    }
  
    /**
!    * <p>Sets the system's identity scope.</p>
     *
     * <p>First, if there is a security manager, its <code>checkSecurityAccess()
     * </code> method is called with <code>"setSystemScope"</code> as its argument
--- 123,129 ----
    }
  
    /**
!    * 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
*************** public abstract class IdentityScope exte
*** 131,137 ****
     *
     * @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)
--- 131,137 ----
     *
     * @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)
diff -Nrcpad gcc-3.4.3/libjava/java/security/InvalidAlgorithmParameterException.java gcc-4.0.0/libjava/java/security/InvalidAlgorithmParameterException.java
*** gcc-3.4.3/libjava/java/security/InvalidAlgorithmParameterException.java	Fri May 24 11:57:14 2002
--- gcc-4.0.0/libjava/java/security/InvalidAlgorithmParameterException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,6 ****
  /* InvalidAlgorithmParameterException.java -- an invalid parameter to a
     security algorithm
!    Copyright (C) 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.security;
*** 41,47 ****
  /**
   * Thrown for an invalid security algorithm parameter.
   *
!  * @author Warren Levy <warrenl@cygnus.com>
   * @since 1.2
   * @status updated to 1.4
   */
--- 41,47 ----
  /**
   * Thrown for an invalid security algorithm parameter.
   *
!  * @author Warren Levy (warrenl@cygnus.com)
   * @since 1.2
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/security/InvalidKeyException.java gcc-4.0.0/libjava/java/security/InvalidKeyException.java
*** gcc-3.4.3/libjava/java/security/InvalidKeyException.java	Fri May 24 11:57:15 2002
--- gcc-4.0.0/libjava/java/security/InvalidKeyException.java	Thu Feb 17 07:48:39 2005
*************** package java.security;
*** 40,46 ****
  /**
   * Thrown for an invalid key.
   *
!  * @author Warren Levy <warrenl@cygnus.com>
   * @status updated to 1.4
   */
  public class InvalidKeyException extends KeyException
--- 40,46 ----
  /**
   * Thrown for an invalid key.
   *
!  * @author Warren Levy (warrenl@cygnus.com)
   * @status updated to 1.4
   */
  public class InvalidKeyException extends KeyException
diff -Nrcpad gcc-3.4.3/libjava/java/security/InvalidParameterException.java gcc-4.0.0/libjava/java/security/InvalidParameterException.java
*** gcc-3.4.3/libjava/java/security/InvalidParameterException.java	Fri May 24 11:57:15 2002
--- gcc-4.0.0/libjava/java/security/InvalidParameterException.java	Thu Feb 17 07:48:39 2005
*************** package java.security;
*** 41,47 ****
   * 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
--- 41,47 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/Key.java gcc-4.0.0/libjava/java/security/Key.java
*** gcc-3.4.3/libjava/java/security/Key.java	Sat Oct 11 19:00:04 2003
--- gcc-4.0.0/libjava/java/security/Key.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* Key.java -- A abstract representation of a digital key
!    Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 47,53 ****
   * 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
--- 47,53 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/KeyException.java gcc-4.0.0/libjava/java/security/KeyException.java
*** gcc-3.4.3/libjava/java/security/KeyException.java	Fri May 24 11:57:16 2002
--- gcc-4.0.0/libjava/java/security/KeyException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* KeyException.java -- Thrown when there is a problem with a key
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.security;
*** 40,46 ****
  /**
   * 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
   */
--- 40,46 ----
  /**
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/security/KeyFactory.java gcc-4.0.0/libjava/java/security/KeyFactory.java
*** gcc-3.4.3/libjava/java/security/KeyFactory.java	Wed Apr 30 07:23:41 2003
--- gcc-4.0.0/libjava/java/security/KeyFactory.java	Tue Feb 22 21:35:03 2005
***************
*** 1,5 ****
  /* KeyFactory.java --- Key Factory Class
!    Copyright (C) 1999, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyFactory.java --- Key Factory Class
!    Copyright (C) 1999, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,48 ****
  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.KeySpec;
! import java.security.spec.InvalidKeySpecException;
! import java.security.NoSuchAlgorithmException;
  
  import gnu.java.security.Engine;
  
  /**
   * <p>Key factories are used to convert keys (opaque cryptographic keys of type
   * {@link Key}) into key specifications (transparent representations of the
--- 35,48 ----
  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
*************** public class KeyFactory
*** 132,138 ****
          {
            return getInstance(algorithm, p[i]);
          }
!       catch (NoSuchAlgorithmException ignored) {}
  
      throw new NoSuchAlgorithmException(algorithm);
    }
--- 132,141 ----
          {
            return getInstance(algorithm, p[i]);
          }
!       catch (NoSuchAlgorithmException e)
! 	{
! 	  // Ignore.
! 	}
  
      throw new NoSuchAlgorithmException(algorithm);
    }
*************** public class KeyFactory
*** 160,166 ****
  
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException();
  
      return getInstance(algorithm, p);
    }
--- 163,169 ----
  
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException(provider);
  
      return getInstance(algorithm, p);
    }
diff -Nrcpad gcc-3.4.3/libjava/java/security/KeyFactorySpi.java gcc-4.0.0/libjava/java/security/KeyFactorySpi.java
*** gcc-3.4.3/libjava/java/security/KeyFactorySpi.java	Tue Jan 22 22:40:30 2002
--- gcc-4.0.0/libjava/java/security/KeyFactorySpi.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* KeyFactorySpi.java --- Key Factory Service Provider Interface
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyFactorySpi.java --- Key Factory Service Provider Interface
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,130 ****
  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.KeySpec;
  import java.security.spec.InvalidKeySpecException;
  
  /**
!    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;
--- 35,132 ----
  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-3.4.3/libjava/java/security/KeyManagementException.java gcc-4.0.0/libjava/java/security/KeyManagementException.java
*** gcc-3.4.3/libjava/java/security/KeyManagementException.java	Fri May 24 11:57:17 2002
--- gcc-4.0.0/libjava/java/security/KeyManagementException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* KeyManagementException.java -- an exception in key management
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyManagementException.java -- an exception in key management
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 41,47 ****
   * 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
   */
--- 41,47 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/security/KeyPairGenerator.java gcc-4.0.0/libjava/java/security/KeyPairGenerator.java
*** gcc-3.4.3/libjava/java/security/KeyPairGenerator.java	Wed Apr 30 07:23:41 2003
--- gcc-4.0.0/libjava/java/security/KeyPairGenerator.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* KeyPairGenerator.java --- Key Pair Generator Class
!    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyPairGenerator.java --- Key Pair Generator Class
!    Copyright (C) 1999, 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
  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;
  
  import gnu.java.security.Engine;
  
  /**
   * <p>The <code>KeyPairGenerator</code> class is used to generate pairs of
   * public and private keys. Key pair generators are constructed using the
--- 35,47 ----
  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
*************** import gnu.java.security.Engine;
*** 56,98 ****
   * 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.)<br/><br/>
!  *
!  *    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.<br/><br/>
   *
!  *    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.<br/></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
--- 57,98 ----
   * 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
*************** public abstract class KeyPairGenerator e
*** 174,180 ****
            {
              return getInstance(algorithm, p[i]);
  	  }
!         catch (NoSuchAlgorithmException ignored) {}
        }
  
      throw new NoSuchAlgorithmException(algorithm);
--- 174,183 ----
            {
              return getInstance(algorithm, p[i]);
  	  }
! 	catch (NoSuchAlgorithmException e)
! 	  {
! 	    // Ignored.
! 	  }
        }
  
      throw new NoSuchAlgorithmException(algorithm);
diff -Nrcpad gcc-3.4.3/libjava/java/security/KeyPairGeneratorSpi.java gcc-4.0.0/libjava/java/security/KeyPairGeneratorSpi.java
*** gcc-3.4.3/libjava/java/security/KeyPairGeneratorSpi.java	Sun Nov 17 00:10:24 2002
--- gcc-4.0.0/libjava/java/security/KeyPairGeneratorSpi.java	Thu Nov 18 15:26:39 2004
*************** public abstract class KeyPairGeneratorSp
*** 92,109 ****
    public abstract KeyPair generateKeyPair();
  
    /**
!      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
    {
!     if (this instanceof Cloneable)
!       return super.clone();
!     else
!       throw new CloneNotSupportedException();
    }
  }
--- 92,102 ----
    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-3.4.3/libjava/java/security/KeyStore.java gcc-4.0.0/libjava/java/security/KeyStore.java
*** gcc-3.4.3/libjava/java/security/KeyStore.java	Wed Apr 30 07:23:41 2003
--- gcc-4.0.0/libjava/java/security/KeyStore.java	Tue Feb 22 21:35:03 2005
***************
*** 1,5 ****
  /* KeyStore.java --- Key Store Class
!    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyStore.java --- Key Store Class
!    Copyright (C) 1999, 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,50 ****
  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.InputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  import java.security.cert.CertificateException;
  import java.util.Date;
  import java.util.Enumeration;
  
- import gnu.java.security.Engine;
- 
  /**
   * Keystore represents an in-memory collection of keys and 
   * certificates. There are two types of entries:
--- 35,52 ----
  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:
*************** public class KeyStore
*** 129,136 ****
            {
              return getInstance(type, p[i]);
            }
!         catch (KeyStoreException ignore)
            {
            }
        }
  
--- 131,139 ----
            {
              return getInstance(type, p[i]);
            }
!         catch (KeyStoreException e)
            {
+ 	    // Ignore.
            }
        }
  
*************** public class KeyStore
*** 161,167 ****
  
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException();
  
      return getInstance(type, p);
    }
--- 164,170 ----
  
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException(provider);
  
      return getInstance(type, p);
    }
*************** public class KeyStore
*** 208,214 ****
  
    /**
     * Returns the default KeyStore type. This method looks up the
!    * type in <JAVA_HOME>/lib/security/java.security with the 
     * property "keystore.type" or if that fails then "jks" .
     */
    public static final String getDefaultType()
--- 211,217 ----
  
    /**
     * 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()
diff -Nrcpad gcc-3.4.3/libjava/java/security/KeyStoreException.java gcc-4.0.0/libjava/java/security/KeyStoreException.java
*** gcc-3.4.3/libjava/java/security/KeyStoreException.java	Fri May 24 11:57:17 2002
--- gcc-4.0.0/libjava/java/security/KeyStoreException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* KeyStoreException.java -- Indicates a problem with the key store
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.security;
*** 40,46 ****
  /**
   * Indicates a problem with the key store.
   *
!  * @author Aaron M. Renn <arenn@urbanophile.com>
   * @since 1.2
   * @status updated to 1.4
   */
--- 40,46 ----
  /**
   * Indicates a problem with the key store.
   *
!  * @author Aaron M. Renn (arenn@urbanophile.com)
   * @since 1.2
   * @status updated to 1.4
   */
diff -Nrcpad gcc-3.4.3/libjava/java/security/KeyStoreSpi.java gcc-4.0.0/libjava/java/security/KeyStoreSpi.java
*** gcc-3.4.3/libjava/java/security/KeyStoreSpi.java	Tue Jan 22 22:40:30 2002
--- gcc-4.0.0/libjava/java/security/KeyStoreSpi.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* KeyStoreSpi.java --- Key Store Service Provider Interface
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyStoreSpi.java --- Key Store Service Provider Interface
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,135 ****
  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.InputStream;
  import java.io.IOException;
  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 JDK 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,
--- 35,137 ----
  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,
*************** public abstract class KeyStoreSpi
*** 138,154 ****
      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.
--- 140,156 ----
      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.
*************** public abstract class KeyStoreSpi
*** 157,169 ****
  
  
    /**
!      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.
--- 159,171 ----
  
  
    /**
!    * 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.
*************** public abstract class KeyStoreSpi
*** 171,272 ****
      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;
--- 173,274 ----
      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-3.4.3/libjava/java/security/MessageDigest.java gcc-4.0.0/libjava/java/security/MessageDigest.java
*** gcc-3.4.3/libjava/java/security/MessageDigest.java	Wed Apr 30 07:23:41 2003
--- gcc-4.0.0/libjava/java/security/MessageDigest.java	Wed Oct 20 07:21:47 2004
*************** public abstract class MessageDigest exte
*** 102,110 ****
    /**
     * 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)
--- 102,110 ----
    /**
     * 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)
*************** public abstract class MessageDigest exte
*** 134,144 ****
      Provider[] p = Security.getProviders();
      for (int i = 0; i < p.length; i++)
        {
! 	try
  	  {
! 	    return getInstance(algorithm, p[i]);
  	  }
- 	catch (NoSuchAlgorithmException ignored) {}
        }
  
      throw new NoSuchAlgorithmException(algorithm);
--- 134,147 ----
      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);
*************** public abstract class MessageDigest exte
*** 206,222 ****
        }
      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
        {
--- 209,225 ----
        }
      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
        {
*************** public abstract class MessageDigest exte
*** 335,341 ****
  
      for (int i = digesta.length - 1; i >= 0; --i)
        if (digesta[i] != digestb[i])
! 	return false;
  
      return true;
    }
--- 338,344 ----
  
      for (int i = digesta.length - 1; i >= 0; --i)
        if (digesta[i] != digestb[i])
!         return false;
  
      return true;
    }
*************** public abstract class MessageDigest exte
*** 383,392 ****
     */
    public Object clone() throws CloneNotSupportedException
    {
!     if (this instanceof Cloneable)
!       return super.clone();
!     else
!       throw new CloneNotSupportedException();
    }
  
    private String digestToString()
--- 386,392 ----
     */
    public Object clone() throws CloneNotSupportedException
    {
!     return super.clone();
    }
  
    private String digestToString()
*************** public abstract class MessageDigest exte
*** 400,411 ****
      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();
--- 400,411 ----
      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-3.4.3/libjava/java/security/MessageDigestSpi.java gcc-4.0.0/libjava/java/security/MessageDigestSpi.java
*** gcc-3.4.3/libjava/java/security/MessageDigestSpi.java	Tue Jan 22 22:40:30 2002
--- gcc-4.0.0/libjava/java/security/MessageDigestSpi.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* MessageDigestSpi.java --- The message digest service provider interface.
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MessageDigestSpi.java --- The message digest service provider interface.
!    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 40,59 ****
  /**
     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
  {
--- 40,59 ----
  /**
     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
  {
*************** public abstract class MessageDigestSpi
*** 126,132 ****
      if (engineGetDigestLength() > len)
        throw new DigestException("Buffer is too small.");
  
!     byte tmp[] = engineDigest();
      if (tmp.length > len)
        throw new DigestException("Buffer is too small");
  
--- 126,132 ----
      if (engineGetDigestLength() > len)
        throw new DigestException("Buffer is too small.");
  
!     byte[] tmp = engineDigest();
      if (tmp.length > len)
        throw new DigestException("Buffer is too small");
  
*************** public abstract class MessageDigestSpi
*** 135,141 ****
    }
  
    /**
!      Resets the digest engine. Reinitializes internal variables 
       and clears sensitive data.
     */
    protected abstract void engineReset();
--- 135,141 ----
    }
  
    /**
!      Resets the digest engine. Reinitializes internal variables
       and clears sensitive data.
     */
    protected abstract void engineReset();
*************** public abstract class MessageDigestSpi
*** 150,158 ****
     */
    public Object clone() throws CloneNotSupportedException
    {
!     if (this instanceof Cloneable)
!       return super.clone();
!     else
!       throw new CloneNotSupportedException();
    }
  }
--- 150,155 ----
     */
    public Object clone() throws CloneNotSupportedException
    {
!     return super.clone();
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/security/NoSuchAlgorithmException.java gcc-4.0.0/libjava/java/security/NoSuchAlgorithmException.java
*** gcc-3.4.3/libjava/java/security/NoSuchAlgorithmException.java	Fri May 24 11:57:19 2002
--- gcc-4.0.0/libjava/java/security/NoSuchAlgorithmException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* NoSuchAlgorithmException.java -- an algorithm was not available
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NoSuchAlgorithmException.java -- an algorithm was not available
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 41,47 ****
   * 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
--- 41,47 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/NoSuchProviderException.java gcc-4.0.0/libjava/java/security/NoSuchProviderException.java
*** gcc-3.4.3/libjava/java/security/NoSuchProviderException.java	Fri May 24 11:57:19 2002
--- gcc-4.0.0/libjava/java/security/NoSuchProviderException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* NoSuchProviderException.java -- thrown when a provider is not found
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.security;
*** 41,47 ****
   * 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
--- 41,47 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/Permission.java gcc-4.0.0/libjava/java/security/Permission.java
*** gcc-3.4.3/libjava/java/security/Permission.java	Fri May 24 11:57:19 2002
--- gcc-4.0.0/libjava/java/security/Permission.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* Permission.java -- The superclass for all permission objects
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 61,67 ****
   * <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
--- 61,67 ----
   * <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
diff -Nrcpad gcc-3.4.3/libjava/java/security/PermissionCollection.java gcc-4.0.0/libjava/java/security/PermissionCollection.java
*** gcc-3.4.3/libjava/java/security/PermissionCollection.java	Fri May 24 11:57:19 2002
--- gcc-4.0.0/libjava/java/security/PermissionCollection.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* PermissionCollection.java -- A collection of permission objects
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PermissionCollection.java -- A collection of permission objects
!    Copyright (C) 1998, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Enumeration;
*** 67,74 ****
   * 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
--- 67,74 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/Permissions.java gcc-4.0.0/libjava/java/security/Permissions.java
*** gcc-3.4.3/libjava/java/security/Permissions.java	Fri May 24 11:57:20 2002
--- gcc-4.0.0/libjava/java/security/Permissions.java	Sun Feb 20 21:18:30 2005
***************
*** 1,5 ****
  /* Permissions.java -- a collection of permission collections
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.Hashtable;
  import java.util.Enumeration;
  import java.util.NoSuchElementException;
  
  /**
--- 35,46 ----
  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;
  
  /**
*************** import java.util.NoSuchElementException;
*** 52,59 ****
   * 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
--- 53,60 ----
   * 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
*************** public final class Permissions extends P
*** 71,82 ****
     */
    private PermissionCollection allPermission;
  
    /**
     * This is the <code>Hashtable</code> that contains our collections.
     *
     * @serial maps Class to PermissionCollection
     */
!   private final Hashtable perms = new Hashtable();
  
    /**
     * This method initializes a new instance of <code>Permissions</code>.
--- 72,84 ----
     */
    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 final class Permissions extends P
*** 186,243 ****
        }
      };
    }
- } // class Permissions
- 
- /**
-  * Implements the permission collection for all permissions without one of
-  * their own, and obeys serialization of JDK.
-  *
-  * @author Eric Blake <ebb9@email.byu.edu>
-  */
- 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
!    */
!   public boolean implies(Permission perm)
!   {
!     return perms.get(perm) != null;
!   }
  
!   /**
!    * Return the elements.
!    *
!    * @return the elements
!    */
!   public Enumeration elements()
!   {
!     return perms.elements();
!   }
  } // class Permissions
--- 188,254 ----
        }
      };
    }
  
    /**
!    * 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-3.4.3/libjava/java/security/Policy.java gcc-4.0.0/libjava/java/security/Policy.java
*** gcc-3.4.3/libjava/java/security/Policy.java	Sat Apr 19 20:54:55 2003
--- gcc-4.0.0/libjava/java/security/Policy.java	Fri Oct 22 17:14:22 2004
***************
*** 1,5 ****
  /* Policy.java --- Policy Manager Class
!    Copyright (C) 1999, 2003, Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Policy.java --- Policy Manager Class
!    Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Map;
*** 95,101 ****
   */
  public abstract class Policy
  {
!   static private Policy currentPolicy = null;
  
    /** Map of ProtectionDomains to PermissionCollections for this instance. */
    private Map pd2pc = null;
--- 95,101 ----
   */
  public abstract class Policy
  {
!   private static Policy currentPolicy;
  
    /** Map of ProtectionDomains to PermissionCollections for this instance. */
    private Map pd2pc = null;
*************** public abstract class Policy
*** 191,197 ****
              {
                currentPolicy = (Policy) Class.forName(pp).newInstance();
              }
!           catch (Exception ignored) {}
  
          if (currentPolicy == null)
            currentPolicy = new gnu.java.security.provider.DefaultPolicy();
--- 191,200 ----
              {
                currentPolicy = (Policy) Class.forName(pp).newInstance();
              }
! 	  catch (Exception e)
! 	    {
! 	      // Ignored.
! 	    }
  
          if (currentPolicy == null)
            currentPolicy = new gnu.java.security.provider.DefaultPolicy();
diff -Nrcpad gcc-3.4.3/libjava/java/security/Principal.java gcc-4.0.0/libjava/java/security/Principal.java
*** gcc-3.4.3/libjava/java/security/Principal.java	Fri May 24 11:57:21 2002
--- gcc-4.0.0/libjava/java/security/Principal.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* Principal.java -- A security entity
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Principal.java -- A security entity
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/PrivateKey.java gcc-4.0.0/libjava/java/security/PrivateKey.java
*** gcc-3.4.3/libjava/java/security/PrivateKey.java	Sat Oct 11 19:00:04 2003
--- gcc-4.0.0/libjava/java/security/PrivateKey.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* PrivateKey.java -- tagging interface for all private keys
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.security;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/PrivilegedActionException.java gcc-4.0.0/libjava/java/security/PrivilegedActionException.java
*** gcc-3.4.3/libjava/java/security/PrivilegedActionException.java	Fri May 24 11:57:21 2002
--- gcc-4.0.0/libjava/java/security/PrivilegedActionException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* PrivilegedActionException.java -- wrap an exception in a privileged action
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.security;
*** 43,50 ****
   * <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)
--- 43,50 ----
   * <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)
diff -Nrcpad gcc-3.4.3/libjava/java/security/ProtectionDomain.java gcc-4.0.0/libjava/java/security/ProtectionDomain.java
*** gcc-3.4.3/libjava/java/security/ProtectionDomain.java	Sat Apr 19 20:54:55 2003
--- gcc-4.0.0/libjava/java/security/ProtectionDomain.java	Sun Sep 26 14:47:41 2004
***************
*** 1,5 ****
  /* ProtectionDomain.java -- A security domain
!    Copyright (C) 1998, 2003, Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ProtectionDomain.java -- A security domain
!    Copyright (C) 1998, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public class ProtectionDomain
*** 83,89 ****
     */
    public ProtectionDomain(CodeSource codesource, PermissionCollection permissions)
    {
!     this(codesource, permissions, null, null, false);
    }
  
    /**
--- 83,89 ----
     */
    public ProtectionDomain(CodeSource codesource, PermissionCollection permissions)
    {
!     this(codesource, permissions, null, null, true);
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/security/ProviderException.java gcc-4.0.0/libjava/java/security/ProviderException.java
*** gcc-3.4.3/libjava/java/security/ProviderException.java	Fri May 24 11:57:22 2002
--- gcc-4.0.0/libjava/java/security/ProviderException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* ProviderException.java -- Generic security provider runtime exception
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ProviderException.java -- Generic security provider runtime exception
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 41,47 ****
   * 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
--- 41,47 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/PublicKey.java gcc-4.0.0/libjava/java/security/PublicKey.java
*** gcc-3.4.3/libjava/java/security/PublicKey.java	Sat Oct 11 19:00:04 2003
--- gcc-4.0.0/libjava/java/security/PublicKey.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* PublicKey.java -- tagging interface for all public keys
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.security;
*** 41,47 ****
   * 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
--- 41,47 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/SecureClassLoader.java gcc-4.0.0/libjava/java/security/SecureClassLoader.java
*** gcc-3.4.3/libjava/java/security/SecureClassLoader.java	Wed Apr 30 07:23:41 2003
--- gcc-4.0.0/libjava/java/security/SecureClassLoader.java	Wed Feb 16 18:51:23 2005
***************
*** 1,5 ****
  /* SecureClassLoader.java --- A Secure Class Loader
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SecureClassLoader.java --- A Secure Class Loader
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,53 ****
  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 JDK 1.2
! 
!    @author Mark Benvenuto
   */
  public class SecureClassLoader extends ClassLoader
  {
    protected SecureClassLoader(ClassLoader parent)
    {
      super(parent);
--- 38,55 ----
  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);
*************** public class SecureClassLoader extends C
*** 64,90 ****
    }
  
    /** 
!      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)
    {
-     // FIXME: Need to cache ProtectionDomains according to 1.3 docs.
      if (cs != null)
        {
! 	ProtectionDomain protectionDomain
! 		= new ProtectionDomain(cs, getPermissions(cs));
  	return super.defineClass(name, b, off, len, protectionDomain);
        } 
      else
--- 66,110 ----
    }
  
    /** 
!    * 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
*************** public class SecureClassLoader extends C
*** 92,109 ****
    }
  
    /**
!      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.getPolicy();
      return policy.getPermissions(cs);
    }
  }
--- 112,128 ----
    }
  
    /**
!    * 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-3.4.3/libjava/java/security/SecureRandom.java gcc-4.0.0/libjava/java/security/SecureRandom.java
*** gcc-3.4.3/libjava/java/security/SecureRandom.java	Sat May 10 07:12:47 2003
--- gcc-4.0.0/libjava/java/security/SecureRandom.java	Tue Feb 22 21:35:03 2005
***************
*** 1,5 ****
  /* SecureRandom.java --- Secure Random class implementation
!    Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SecureRandom.java --- Secure Random class implementation
!    Copyright (C) 1999, 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,48 ****
  
  package java.security;
  
- import java.io.Serializable;
- import java.util.Random;
- import java.util.Enumeration;
- 
  import gnu.java.security.Engine;
  
  /**
   * An interface to a cryptographically secure pseudo-random number
   * generator (PRNG). Random (or at least unguessable) numbers are used
--- 37,47 ----
  
  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
*************** import gnu.java.security.Engine;
*** 50,56 ****
   * 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
--- 49,55 ----
   * 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
*************** public class SecureRandom extends Random
*** 88,100 ****
     */
    public SecureRandom()
    {
!     Provider p[] = Security.getProviders();
  
      //Format of Key: SecureRandom.algname
      String key;
  
      String classname = null;
!     int i, flag = 0;
      Enumeration e;
      for (i = 0; i < p.length; i++)
        {
--- 87,99 ----
     */
    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++)
        {
*************** public class SecureRandom extends Random
*** 113,119 ****
                          provider = p[i];
                          return;
                        }
!                     catch (Throwable ignore) { }
                    }
                }
            }
--- 112,125 ----
                          provider = p[i];
                          return;
                        }
!                     catch (ThreadDeath death)
!                       {
!                         throw death;
!                       }
!                     catch (Throwable t)
! 		      {
! 			// Ignore.
! 		      }
                    }
                }
            }
*************** public class SecureRandom extends Random
*** 168,185 ****
     * @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 ignored)
            {
            }
        }
  
--- 174,193 ----
     * @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.
            }
        }
  
*************** public class SecureRandom extends Random
*** 210,216 ****
  
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException();
      
      return getInstance(algorithm, p);
    }
--- 218,224 ----
  
      Provider p = Security.getProvider(provider);
      if (p == null)
!       throw new NoSuchProviderException(provider);
      
      return getInstance(algorithm, p);
    }
*************** public class SecureRandom extends Random
*** 285,291 ****
      // Therefore we test.
      if (secureRandomSpi != null)
        {
!         byte tmp[] = { (byte) (0xff & (seed >> 56)),
  		       (byte) (0xff & (seed >> 48)),
  		       (byte) (0xff & (seed >> 40)),
  		       (byte) (0xff & (seed >> 32)),
--- 293,299 ----
      // Therefore we test.
      if (secureRandomSpi != null)
        {
!         byte[] tmp = { (byte) (0xff & (seed >> 56)),
  		       (byte) (0xff & (seed >> 48)),
  		       (byte) (0xff & (seed >> 40)),
  		       (byte) (0xff & (seed >> 32)),
*************** public class SecureRandom extends Random
*** 325,331 ****
      if (numBits == 0)
        return 0;
  
!     byte tmp[] = new byte[numBits / 8 + (1 * (numBits % 8))];
  
      secureRandomSpi.engineNextBytes(tmp);
      randomBytesUsed += tmp.length;
--- 333,339 ----
      if (numBits == 0)
        return 0;
  
!     byte[] tmp = new byte[numBits / 8 + (1 * (numBits % 8))];
  
      secureRandomSpi.engineNextBytes(tmp);
      randomBytesUsed += tmp.length;
*************** public class SecureRandom extends Random
*** 350,356 ****
     */
    public static byte[] getSeed(int numBytes)
    {
!     byte tmp[] = new byte[numBytes];
  
      new Random().nextBytes(tmp);
      return tmp;
--- 358,364 ----
     */
    public static byte[] getSeed(int numBytes)
    {
!     byte[] tmp = new byte[numBytes];
  
      new Random().nextBytes(tmp);
      return tmp;
diff -Nrcpad gcc-3.4.3/libjava/java/security/SecureRandomSpi.java gcc-4.0.0/libjava/java/security/SecureRandomSpi.java
*** gcc-3.4.3/libjava/java/security/SecureRandomSpi.java	Sat May 10 07:12:47 2003
--- gcc-4.0.0/libjava/java/security/SecureRandomSpi.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* SecureRandomSpi.java --- Secure Random Service Provider Interface
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SecureRandomSpi.java --- Secure Random Service Provider Interface
!    Copyright (C) 1999, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 46,52 ****
  
     @since JDK 1.2       
  
!    @author Mark Benvenuto <ivymccough@worldnet.att.net>
   */
  public abstract class SecureRandomSpi implements Serializable
  {
--- 46,52 ----
  
     @since JDK 1.2       
  
!    @author Mark Benvenuto (ivymccough@worldnet.att.net)
   */
  public abstract class SecureRandomSpi implements Serializable
  {
diff -Nrcpad gcc-3.4.3/libjava/java/security/Security.java gcc-4.0.0/libjava/java/security/Security.java
*** gcc-3.4.3/libjava/java/security/Security.java	Tue Dec  2 17:31:46 2003
--- gcc-4.0.0/libjava/java/security/Security.java	Tue Nov 16 21:31:55 2004
***************
*** 1,5 ****
  /* Security.java --- Java base security class implementation
!    Copyright (C) 1999, 2001, 2002, 2003, Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Security.java --- Java base security class implementation
!    Copyright (C) 1999, 2001, 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,47 ****
  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.FileNotFoundException;
! import java.io.InputStream;
  import java.io.IOException;
  import java.net.URL;
- import java.security.Provider;
  import java.util.Collections;
  import java.util.Enumeration;
  import java.util.HashMap;
--- 35,50 ----
  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.action.GetPropertyAction;
! 
! 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.Vector;
*** 57,65 ****
   * 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 extends Object
  {
    private static final String ALG_ALIAS = "Alg.Alias.";
  
--- 60,68 ----
   * 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.";
  
*************** public final class Security extends Obje
*** 68,76 ****
    
    static
      {
!       String base = System.getProperty ("gnu.classpath.home.url");
!       String vendor = System.getProperty ("gnu.classpath.vm.shortname");
!     
        // Try VM specific security file
        boolean loaded = loadProviders (base, vendor);
      
--- 71,81 ----
    
    static
      {
!       GetPropertyAction getProp = new GetPropertyAction("gnu.classpath.home.url");
!       String base = (String) AccessController.doPrivileged(getProp);
!       getProp = new GetPropertyAction("gnu.classpath.vm.shortname");
!       String vendor = (String) AccessController.doPrivileged(getProp);
! 
        // Try VM specific security file
        boolean loaded = loadProviders (base, vendor);
      
*************** public final class Security extends Obje
*** 78,97 ****
        if (!loadProviders (base, "classpath")
  	  && !loaded
  	  && providers.size() == 0)
!         {
! 	  // No providers found and both security files failed to load properly.
! 	  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()
    {
--- 83,109 ----
        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()
    {
*************** public final class Security extends Obje
*** 150,156 ****
  	result = false;
        }
  
!     return false;
    }
  
    /**
--- 162,168 ----
  	result = false;
        }
  
!     return result;
    }
  
    /**
*************** public final class Security extends Obje
*** 237,243 ****
      int max = providers.size ();
      for (int i = 0; i < max; i++)
        {
! 	if (((Provider) providers.elementAt(i)).getName() == provider.getName())
  	  return -1;
        }
  
--- 249,255 ----
      int max = providers.size ();
      for (int i = 0; i < max; i++)
        {
! 	if (((Provider) providers.elementAt(i)).getName().equals(provider.getName()))
  	  return -1;
        }
  
*************** public final class Security extends Obje
*** 312,318 ****
      int max = providers.size ();
      for (int i = 0; i < max; i++)
        {
! 	if (((Provider) providers.elementAt(i)).getName() == name)
  	  {
  	    providers.remove(i);
  	    break;
--- 324,330 ----
      int max = providers.size ();
      for (int i = 0; i < max; i++)
        {
! 	if (((Provider) providers.elementAt(i)).getName().equals(name))
  	  {
  	    providers.remove(i);
  	    break;
*************** public final class Security extends Obje
*** 328,334 ****
     */
    public static Provider[] getProviders()
    {
!     Provider array[] = new Provider[providers.size ()];
      providers.copyInto (array);
      return array;
    }
--- 340,346 ----
     */
    public static Provider[] getProviders()
    {
!     Provider[] array = new Provider[providers.size ()];
      providers.copyInto (array);
      return array;
    }
*************** public final class Security extends Obje
*** 349,355 ****
      for (int i = 0; i < max; i++)
        {
  	p = (Provider) providers.elementAt(i);
! 	if (p.getName() == name)
  	  return p;
        }
      return null;
--- 361,367 ----
      for (int i = 0; i < max; i++)
        {
  	p = (Provider) providers.elementAt(i);
! 	if (p.getName().equals(name))
  	  return p;
        }
      return null;
*************** public final class Security extends Obje
*** 411,417 ****
     * 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 & 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
--- 423,429 ----
     * 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
*************** public final class Security extends Obje
*** 466,472 ****
     * formats:</p>
     *
     * <ul>
!    *    <li><p>&lt;crypto_service>.&lt;algorithm_or_type></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
--- 478,484 ----
     * 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
*************** public final class Security extends Obje
*** 475,484 ****
     *    provider that supplied a CertificateFactory implementation for X.509
     *    certificates.</p></li>
     *
!    *    <li><p>&lt;crypto_service>.&lt;algorithm_or_type> &lt;attribute_name>:&lt;attribute_value></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>
!    *    and the &lt;attribute_name>.</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
--- 487,496 ----
     *    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
*************** public final class Security extends Obje
*** 530,546 ****
    * of the following two formats:</p>
    *
    * <ul>
!   *    <li><p>&lt;crypto_service>.&lt;algorithm_or_type></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>.&lt;algorithm_or_type> &lt;attribute_name></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> and
!   *    the &lt;attribute_name>.</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
--- 542,558 ----
    * 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
*************** public final class Security extends Obje
*** 670,676 ****
      outer: for (int r = 0; r < 3; r++) // guard against circularity
        {
          serviceDotAlgorithm = (svc+"."+String.valueOf(algo)).trim();
!         inner: for (it = p.keySet().iterator(); it.hasNext(); )
            {
              key = (String) it.next();
              if (key.equalsIgnoreCase(serviceDotAlgorithm)) // eureka
--- 682,688 ----
      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
diff -Nrcpad gcc-3.4.3/libjava/java/security/Signature.java gcc-4.0.0/libjava/java/security/Signature.java
*** gcc-3.4.3/libjava/java/security/Signature.java	Wed Apr 30 07:23:41 2003
--- gcc-4.0.0/libjava/java/security/Signature.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* Signature.java --- Signature Class
!    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Signature.java --- Signature Class
!    Copyright (C) 1999, 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,48 ****
  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.cert.Certificate;
  import java.security.cert.X509Certificate;
  import java.security.spec.AlgorithmParameterSpec;
  
- import gnu.java.security.Engine;
- 
  /**
   * <p>This <code>Signature</code> class is used to provide applications the
   * functionality of a digital signature algorithm. Digital signatures are used
--- 35,49 ----
  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
*************** import gnu.java.security.Engine;
*** 83,102 ****
   * 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
--- 84,103 ----
   * 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
*************** import gnu.java.security.Engine;
*** 105,111 ****
   * 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
  {
--- 106,112 ----
   * 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
  {
*************** public abstract class Signature extends 
*** 177,183 ****
            {
              return getInstance(algorithm, p[i]);
            }
!         catch (NoSuchAlgorithmException ignored) {}
        }
  
      throw new NoSuchAlgorithmException(algorithm);
--- 178,187 ----
            {
              return getInstance(algorithm, p[i]);
            }
! 	catch (NoSuchAlgorithmException e)
! 	  {
! 	    // Ignored.
! 	  }
        }
  
      throw new NoSuchAlgorithmException(algorithm);
*************** public abstract class Signature extends 
*** 206,212 ****
    {
      if (provider == null || provider.length() == 0)
        throw new IllegalArgumentException("Illegal provider");
!     
      Provider p = Security.getProvider(provider);
      if (p == null)
        throw new NoSuchProviderException(provider);
--- 210,216 ----
    {
      if (provider == null || provider.length() == 0)
        throw new IllegalArgumentException("Illegal provider");
! 
      Provider p = Security.getProvider(provider);
      if (p == null)
        throw new NoSuchProviderException(provider);
*************** public abstract class Signature extends 
*** 251,266 ****
  
      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;
--- 255,270 ----
  
      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;
*************** public abstract class Signature extends 
*** 313,321 ****
      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());
--- 317,325 ----
      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());
*************** public abstract class Signature extends 
*** 368,377 ****
    public final byte[] sign() throws SignatureException
    {
      if (state == SIGN)
!       {
!         state = UNINITIALIZED;
!         return engineSign();
!       }
      else
        throw new SignatureException();
    }
--- 372,378 ----
    public final byte[] sign() throws SignatureException
    {
      if (state == SIGN)
!       return engineSign();
      else
        throw new SignatureException();
    }
*************** public abstract class Signature extends 
*** 398,407 ****
      throws SignatureException
    {
      if (state == SIGN)
!       {
!         state = UNINITIALIZED;
!         return engineSign(outbuf, offset, len);
!       }
      else
        throw new SignatureException();
    }
--- 399,405 ----
      throws SignatureException
    {
      if (state == SIGN)
!       return engineSign(outbuf, offset, len);
      else
        throw new SignatureException();
    }
*************** public abstract class Signature extends 
*** 425,434 ****
    public final boolean verify(byte[]signature) throws SignatureException
    {
      if (state == VERIFY)
!       {
!         state = UNINITIALIZED;
!         return engineVerify(signature);
!       }
      else
        throw new SignatureException();
    }
--- 423,429 ----
    public final boolean verify(byte[]signature) throws SignatureException
    {
      if (state == VERIFY)
!       return engineVerify(signature);
      else
        throw new SignatureException();
    }
*************** public abstract class Signature extends 
*** 464,470 ****
        throw new SignatureException("illegal state");
  
      if (signature == null)
!       throw new IllegalArgumentException("signaure is null");
      if (offset < 0)
        throw new IllegalArgumentException("offset is less than 0");
      if (length < 0)
--- 459,465 ----
        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)
*************** public abstract class Signature extends 
*** 472,478 ****
      if (offset + length < signature.length)
        throw new IllegalArgumentException("range is out of bounds");
  
-     state = UNINITIALIZED;
      return engineVerify(signature, offset, length);
    }
  
--- 467,472 ----
*************** public abstract class Signature extends 
*** 637,642 ****
     */
    public Object clone() throws CloneNotSupportedException
    {
!     throw new CloneNotSupportedException();
    }
  }
--- 631,636 ----
     */
    public Object clone() throws CloneNotSupportedException
    {
!     return super.clone();
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/security/SignatureException.java gcc-4.0.0/libjava/java/security/SignatureException.java
*** gcc-3.4.3/libjava/java/security/SignatureException.java	Fri May 24 11:57:24 2002
--- gcc-4.0.0/libjava/java/security/SignatureException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* SignatureException.java -- Generic error in signature
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SignatureException.java -- Generic error in signature
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security;
*** 41,47 ****
   * 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
--- 41,47 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/SignatureSpi.java gcc-4.0.0/libjava/java/security/SignatureSpi.java
*** gcc-3.4.3/libjava/java/security/SignatureSpi.java	Sat Apr 19 20:54:55 2003
--- gcc-4.0.0/libjava/java/security/SignatureSpi.java	Thu Feb 17 07:48:39 2005
*************** import java.security.spec.AlgorithmParam
*** 49,55 ****
   * 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
   */
--- 49,55 ----
   * 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
*** 165,171 ****
    protected int engineSign(byte[] outbuf, int offset, int len)
      throws SignatureException
    {
!     byte tmp[] = engineSign();
      if (tmp.length > len)
        throw new SignatureException("Invalid Length");
  
--- 165,171 ----
    protected int engineSign(byte[] outbuf, int offset, int len)
      throws SignatureException
    {
!     byte[] tmp = engineSign();
      if (tmp.length > len)
        throw new SignatureException("Invalid Length");
  
*************** public abstract class SignatureSpi
*** 263,269 ****
     */
    protected AlgorithmParameters engineGetParameters()
    {
!     throw new UnsupportedOperationException();    
    }
  
    /**
--- 263,269 ----
     */
    protected AlgorithmParameters engineGetParameters()
    {
!     throw new UnsupportedOperationException();
    }
  
    /**
*************** public abstract class SignatureSpi
*** 279,285 ****
     * @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
--- 279,285 ----
     * @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
*************** public abstract class SignatureSpi
*** 297,302 ****
     */
    public Object clone() throws CloneNotSupportedException
    {
!     throw new CloneNotSupportedException();
    }
  }
--- 297,302 ----
     */
    public Object clone() throws CloneNotSupportedException
    {
!     return super.clone();
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/security/SignedObject.java gcc-4.0.0/libjava/java/security/SignedObject.java
*** gcc-3.4.3/libjava/java/security/SignedObject.java	Sat May 10 07:12:47 2003
--- gcc-4.0.0/libjava/java/security/SignedObject.java	Thu Feb 17 07:48:39 2005
*************** import java.io.Serializable;
*** 98,104 ****
   * <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,
--- 98,104 ----
   * <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,
*************** import java.io.Serializable;
*** 123,129 ****
   *  of signatures, resembling a chain of authorization and delegation.</li>
   * </ul>
   *
!  * @author Mark Benvenuto <ivymccough@worldnet.att.net>
   * @since 1.2
   * @see Signature
   */
--- 123,129 ----
   *  of signatures, resembling a chain of authorization and delegation.</li>
   * </ul>
   *
!  * @author Mark Benvenuto (ivymccough@worldnet.att.net)
   * @since 1.2
   * @see Signature
   */
diff -Nrcpad gcc-3.4.3/libjava/java/security/Signer.java gcc-4.0.0/libjava/java/security/Signer.java
*** gcc-3.4.3/libjava/java/security/Signer.java	Sat May 10 07:12:47 2003
--- gcc-4.0.0/libjava/java/security/Signer.java	Thu Feb 17 07:48:39 2005
*************** package java.security;
*** 45,51 ****
   * 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>.
--- 45,51 ----
   * 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>.
diff -Nrcpad gcc-3.4.3/libjava/java/security/UnrecoverableKeyException.java gcc-4.0.0/libjava/java/security/UnrecoverableKeyException.java
*** gcc-3.4.3/libjava/java/security/UnrecoverableKeyException.java	Fri May 24 11:57:24 2002
--- gcc-4.0.0/libjava/java/security/UnrecoverableKeyException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* UnrecoverableKeyException.java -- Cannot recover a key from the key store
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.security;
*** 41,47 ****
   * 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
   */
--- 41,47 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/security/UnresolvedPermission.java gcc-4.0.0/libjava/java/security/UnresolvedPermission.java
*** gcc-3.4.3/libjava/java/security/UnresolvedPermission.java	Fri May 24 11:57:25 2002
--- gcc-4.0.0/libjava/java/security/UnresolvedPermission.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* UnresolvedPermission.java -- Placeholder for unresolved permissions
!    Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UnresolvedPermission.java -- Placeholder for unresolved permissions
!    Copyright (C) 1998, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,51 ****
  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;
  // 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.Hashtable;
- import java.util.Vector;
  import java.util.Enumeration;
  import java.util.NoSuchElementException;
  
  /**
   * This class is used to hold instances of all permissions that cannot
--- 35,51 ----
  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
*************** public final class UnresolvedPermission 
*** 207,213 ****
   * Implements the permission collection for unresolved permissions, and
   * obeys serialization of JDK.
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   */
  class UnresolvedPermissionCollection extends PermissionCollection
  {
--- 207,213 ----
   * Implements the permission collection for unresolved permissions, and
   * obeys serialization of JDK.
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   */
  class UnresolvedPermissionCollection extends PermissionCollection
  {
*************** class UnresolvedPermissionCollection ext
*** 216,228 ****
     */
    private static final long serialVersionUID = -7176153071733132400L;
  
    /**
     * Hashtable where we store permissions.
     *
     * @serial map of typename to a Vector of permissions (you'd think Sun
     *         would document this better!)
     */
!   private final Hashtable permissions = new Hashtable();
  
    /**
     * Add a permission.
--- 216,229 ----
     */
    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.
diff -Nrcpad gcc-3.4.3/libjava/java/security/acl/AclNotFoundException.java gcc-4.0.0/libjava/java/security/acl/AclNotFoundException.java
*** gcc-3.4.3/libjava/java/security/acl/AclNotFoundException.java	Fri May 24 11:57:27 2002
--- gcc-4.0.0/libjava/java/security/acl/AclNotFoundException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* AclNotFoundException.java -- thrown when an ACL is not found
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.security.acl;
*** 41,47 ****
   * 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
--- 41,47 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/acl/LastOwnerException.java gcc-4.0.0/libjava/java/security/acl/LastOwnerException.java
*** gcc-3.4.3/libjava/java/security/acl/LastOwnerException.java	Fri May 24 11:57:28 2002
--- gcc-4.0.0/libjava/java/security/acl/LastOwnerException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* LastOwnerException.java -- User attempted to delete last ACL owner
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.security.acl;
*** 41,47 ****
   * 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
   */
--- 41,47 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/security/acl/NotOwnerException.java gcc-4.0.0/libjava/java/security/acl/NotOwnerException.java
*** gcc-3.4.3/libjava/java/security/acl/NotOwnerException.java	Fri May 24 11:57:29 2002
--- gcc-4.0.0/libjava/java/security/acl/NotOwnerException.java	Thu Feb 17 07:48:39 2005
***************
*** 1,5 ****
  /* NotOwnerException.java -- Attempt to modify an unowned ACL
!    Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NotOwnerException.java -- Attempt to modify an unowned ACL
!    Copyright (C) 1998, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.security.acl;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/CertPath.java gcc-4.0.0/libjava/java/security/cert/CertPath.java
*** gcc-3.4.3/libjava/java/security/cert/CertPath.java	Fri May 24 11:57:31 2002
--- gcc-4.0.0/libjava/java/security/cert/CertPath.java	Thu Feb 17 07:48:40 2005
***************
*** 1,5 ****
  /* CertPath.java -- a sequence of certificates
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CertPath.java -- a sequence of certificates
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.List;
*** 54,60 ****
   * 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
   */
--- 54,60 ----
   * 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 implement
*** 63,69 ****
    /**
     * The serialized representation of a path.
     *
!    * @author Eric Blake <ebb9@email.byu.edu>
     */
    protected static class CertPathRep implements Serializable
    {
--- 63,69 ----
    /**
     * The serialized representation of a path.
     *
!    * @author Eric Blake (ebb9@email.byu.edu)
     */
    protected static class CertPathRep implements Serializable
    {
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/CertPathBuilder.java gcc-4.0.0/libjava/java/security/cert/CertPathBuilder.java
*** gcc-3.4.3/libjava/java/security/cert/CertPathBuilder.java	Wed Apr 30 07:23:42 2003
--- gcc-4.0.0/libjava/java/security/cert/CertPathBuilder.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* CertPathBuilder.java -- bulids CertPath objects from Certificates.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CertPathBuilder.java -- bulids CertPath objects from Certificates.
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,51 ****
  
  package java.security.cert;
  
  import java.security.InvalidAlgorithmParameterException;
  import java.security.NoSuchAlgorithmException;
  import java.security.NoSuchProviderException;
  import java.security.Provider;
  import java.security.Security;
  
- import gnu.java.security.Engine;
- 
  /**
   * This class builds certificate paths (also called certificate chains),
   * which can be used to establish trust for a particular certificate by
--- 38,51 ----
  
  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
*************** public class CertPathBuilder
*** 130,137 ****
            {
              return getInstance(algorithm, p[i]);
            }
!         catch (NoSuchAlgorithmException ignored)
            {
            }
        }
  
--- 130,138 ----
            {
              return getInstance(algorithm, p[i]);
            }
!         catch (NoSuchAlgorithmException e)
            {
+ 	    // Ignored.
            }
        }
  
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/CertPathBuilderException.java gcc-4.0.0/libjava/java/security/cert/CertPathBuilderException.java
*** gcc-3.4.3/libjava/java/security/cert/CertPathBuilderException.java	Fri May 24 11:57:32 2002
--- gcc-4.0.0/libjava/java/security/cert/CertPathBuilderException.java	Thu Feb 17 07:48:40 2005
***************
*** 1,6 ****
  /* CertPathBuilderException.java -- wraps an exception during certificate
     path building
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* CertPathBuilderException.java -- wraps an exception during certificate
     path building
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.security.GeneralSecurityExce
*** 47,53 ****
   * 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
--- 47,53 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/CertPathValidator.java gcc-4.0.0/libjava/java/security/cert/CertPathValidator.java
*** gcc-3.4.3/libjava/java/security/cert/CertPathValidator.java	Wed Apr 30 07:23:42 2003
--- gcc-4.0.0/libjava/java/security/cert/CertPathValidator.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* CertPathValidator -- validates certificate paths.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CertPathValidator -- validates certificate paths.
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 38,45 ----
  
  package java.security.cert;
  
+ import gnu.java.security.Engine;
+ 
  import java.security.AccessController;
  import java.security.InvalidAlgorithmParameterException;
  import java.security.NoSuchAlgorithmException;
*************** import java.security.PrivilegedAction;
*** 46,53 ****
  import java.security.Provider;
  import java.security.Security;
  
- import gnu.java.security.Engine;
- 
  /**
   * Generic interface to classes that validate certificate paths.
   *
--- 48,53 ----
*************** public class CertPathValidator {
*** 142,149 ****
            {
              return getInstance(algorithm, p[i]);
            }
!         catch (NoSuchAlgorithmException ignored)
            {
            }
        }
      throw new NoSuchAlgorithmException(algorithm);
--- 142,150 ----
            {
              return getInstance(algorithm, p[i]);
            }
!         catch (NoSuchAlgorithmException e)
            {
+ 	    // Ignored.
            }
        }
      throw new NoSuchAlgorithmException(algorithm);
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/CertPathValidatorException.java gcc-4.0.0/libjava/java/security/cert/CertPathValidatorException.java
*** gcc-3.4.3/libjava/java/security/cert/CertPathValidatorException.java	Fri May 24 11:57:32 2002
--- gcc-4.0.0/libjava/java/security/cert/CertPathValidatorException.java	Thu Feb 17 07:48:40 2005
***************
*** 1,6 ****
  /* CertPathValidatorException.java -- wraps an exception during validation
     of a CertPath
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** import java.security.GeneralSecurityExce
*** 48,54 ****
   * 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
--- 48,54 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/CertStore.java gcc-4.0.0/libjava/java/security/cert/CertStore.java
*** gcc-3.4.3/libjava/java/security/cert/CertStore.java	Tue Nov 11 12:22:19 2003
--- gcc-4.0.0/libjava/java/security/cert/CertStore.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* CertStore -- stores and retrieves certificates.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CertStore -- stores and retrieves certificates.
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,54 ****
  
  package java.security.cert;
  
  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;
  
- import gnu.java.security.Engine;
- 
  /**
   * A CertStore is a read-only repository for certificates and
   * certificate revocation lists.
--- 38,53 ----
  
  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.
*************** public class CertStore
*** 146,153 ****
            {
              return getInstance(type, params, p[i]);
            }
!         catch (NoSuchAlgorithmException ignored)
            {
            }
        }
  
--- 145,153 ----
            {
              return getInstance(type, params, p[i]);
            }
!         catch (NoSuchAlgorithmException e)
            {
+ 	    // Ignored.
            }
        }
  
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/CertStoreException.java gcc-4.0.0/libjava/java/security/cert/CertStoreException.java
*** gcc-3.4.3/libjava/java/security/cert/CertStoreException.java	Fri May 24 11:57:32 2002
--- gcc-4.0.0/libjava/java/security/cert/CertStoreException.java	Thu Feb 17 07:48:40 2005
***************
*** 1,5 ****
  /* CertStoreException.java -- wraps an exception during certificate storage
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CertStoreException.java -- wraps an exception during certificate storage
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.security.GeneralSecurityExce
*** 47,53 ****
   * <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
--- 47,53 ----
   * <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
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/Certificate.java gcc-4.0.0/libjava/java/security/cert/Certificate.java
*** gcc-3.4.3/libjava/java/security/cert/Certificate.java	Sat May 10 07:12:48 2003
--- gcc-4.0.0/libjava/java/security/cert/Certificate.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* Certificate.java --- Certificate class
!    Copyright (C) 1999,2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Certificate.java --- Certificate class
!    Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,53 ****
  
  package java.security.cert;
  
- import java.security.PublicKey;
- import java.security.NoSuchAlgorithmException;
- import java.security.InvalidKeyException;
- import java.security.NoSuchProviderException;
- import java.security.SignatureException;
- import java.io.ObjectInputStream;
  import java.io.ByteArrayInputStream;
  import java.io.InvalidObjectException;
  import java.io.ObjectStreamException;
  import java.io.Serializable;
  
  /**
   * The Certificate class is an abstract class used to manage 
--- 38,52 ----
  
  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 
*************** public abstract class Certificate implem
*** 116,123 ****
  	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] )
--- 115,122 ----
  	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] )
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/CertificateFactory.java gcc-4.0.0/libjava/java/security/cert/CertificateFactory.java
*** gcc-3.4.3/libjava/java/security/cert/CertificateFactory.java	Wed Apr 30 07:23:42 2003
--- gcc-4.0.0/libjava/java/security/cert/CertificateFactory.java	Tue Feb 22 21:35:04 2005
***************
*** 1,5 ****
  /* CertificateFactory.java -- Certificate Factory Class
!    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CertificateFactory.java -- Certificate Factory Class
!    Copyright (C) 1999, 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,56 ****
  
  package java.security.cert;
  
  import java.security.NoSuchAlgorithmException;
  import java.security.NoSuchProviderException;
  import java.security.Provider;
  import java.security.Security;
- 
- import java.io.InputStream;
- 
  import java.util.Collection;
  import java.util.Iterator;
  import java.util.List;
  
- import gnu.java.security.Engine;
- 
  /**
   * This class implements the CertificateFactory class interface used to
   * generate certificates, certificate revocation lists (CRLs), and certificate
--- 38,54 ----
  
  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
*************** public class CertificateFactory
*** 110,117 ****
            {
              return getInstance(type, p[i]);
            }
!         catch (CertificateException ignored)
            {
            }
        }
  
--- 108,116 ----
            {
              return getInstance(type, p[i]);
            }
!         catch (CertificateException e)
            {
+ 	    // Ignored.
            }
        }
  
*************** public class CertificateFactory
*** 139,145 ****
    {
      Provider p = Security.getProvider(provider);
      if( p == null)
!       throw new NoSuchProviderException();
  
      return getInstance(type, p);
    }
--- 138,144 ----
    {
      Provider p = Security.getProvider(provider);
      if( p == null)
!       throw new NoSuchProviderException(provider);
  
      return getInstance(type, p);
    }
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/PolicyQualifierInfo.java gcc-4.0.0/libjava/java/security/cert/PolicyQualifierInfo.java
*** gcc-3.4.3/libjava/java/security/cert/PolicyQualifierInfo.java	Fri Jun 27 16:11:27 2003
--- gcc-4.0.0/libjava/java/security/cert/PolicyQualifierInfo.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* PolicyQualifierInfo.java -- policy qualifier info object.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PolicyQualifierInfo.java -- policy qualifier info object.
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,54 ****
  
  package java.security.cert;
  
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- 
  import gnu.java.io.ASN1ParsingException;
  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 gnu.java.security.der.DERWriter;
  
  /**
   * The PolicyQualifierInfo X.509 certificate extension.
--- 38,50 ----
  
  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.
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/TrustAnchor.java gcc-4.0.0/libjava/java/security/cert/TrustAnchor.java
*** gcc-3.4.3/libjava/java/security/cert/TrustAnchor.java	Wed Apr 30 07:23:42 2003
--- gcc-4.0.0/libjava/java/security/cert/TrustAnchor.java	Mon Nov 15 20:02:08 2004
***************
*** 1,5 ****
  /* TrustAnchor.java -- an ultimately-trusted certificate.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,50 ****
  
  package java.security.cert;
  
! import java.io.ByteArrayInputStream;
! import java.io.IOException;
  
  import java.security.PublicKey;
  
- import gnu.java.security.x509.X500DistinguishedName;
- 
  /**
   * An ultimately-trusted certificate to serve as the root of a
   * certificate chain.
--- 38,47 ----
  
  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.
*************** public class TrustAnchor
*** 143,149 ****
    public final String getCAName()
    {
      if (caName != null)
!       return caName.toRFC2253();
      return null;
    }
  
--- 140,146 ----
    public final String getCAName()
    {
      if (caName != null)
!       return caName.toString();
      return null;
    }
  
*************** public class TrustAnchor
*** 182,188 ****
    {
      if (trustedCert == null)
        return "[ Trusted CA Public Key=" + caKey + ", Trusted CA Issuer Name="
!         + caName.toRFC2253() + " ]";
      return "[ Trusted CA Certificate=" + trustedCert + " ]";
    }
  }
--- 179,185 ----
    {
      if (trustedCert == null)
        return "[ Trusted CA Public Key=" + caKey + ", Trusted CA Issuer Name="
!         + caName.toString() + " ]";
      return "[ Trusted CA Certificate=" + trustedCert + " ]";
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/X509CRL.java gcc-4.0.0/libjava/java/security/cert/X509CRL.java
*** gcc-3.4.3/libjava/java/security/cert/X509CRL.java	Wed Apr 30 07:23:42 2003
--- gcc-4.0.0/libjava/java/security/cert/X509CRL.java	Thu Oct 21 20:21:04 2004
***************
*** 1,5 ****
  /* X509CRL.java --- X.509 Certificate Revocation List
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* X509CRL.java --- X.509 Certificate Revocation List
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,48 ****
  
  
  package java.security.cert;
  import java.math.BigInteger;
- import java.security.Principal;
- import java.security.PublicKey;
- import java.security.NoSuchAlgorithmException;
  import java.security.InvalidKeyException;
  import java.security.NoSuchProviderException;
  import java.security.SignatureException;
  import java.util.Date;
  import java.util.Set;
--- 37,49 ----
  
  
  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;
*************** public abstract class X509CRL extends CR
*** 126,133 ****
  	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] )
--- 127,134 ----
  	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] )
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/X509CRLEntry.java gcc-4.0.0/libjava/java/security/cert/X509CRLEntry.java
*** gcc-3.4.3/libjava/java/security/cert/X509CRLEntry.java	Tue Jan 22 22:40:33 2002
--- gcc-4.0.0/libjava/java/security/cert/X509CRLEntry.java	Wed Oct 20 07:21:49 2004
*************** exception statement from your version. *
*** 37,42 ****
--- 37,43 ----
  
  
  package java.security.cert;
+ 
  import java.math.BigInteger;
  import java.util.Date;
  
*************** public abstract class X509CRLEntry imple
*** 96,103 ****
  	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] )
--- 97,104 ----
  	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] )
diff -Nrcpad gcc-3.4.3/libjava/java/security/cert/X509CRLSelector.java gcc-4.0.0/libjava/java/security/cert/X509CRLSelector.java
*** gcc-3.4.3/libjava/java/security/cert/X509CRLSelector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/security/cert/X509CRLSelector.java	Thu Oct 21 20:21:04 2004
***************
*** 0 ****
--- 1,442 ----
+ /* 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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.action.GetPropertyAction;
+ 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.security.AccessController;
+ 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());
+     GetPropertyAction getProp = new GetPropertyAction("line.separator");
+     String nl = (String) AccessController.doPrivileged(getProp);
+     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-3.4.3/libjava/java/security/cert/X509CertSelector.java gcc-4.0.0/libjava/java/security/cert/X509CertSelector.java
*** gcc-3.4.3/libjava/java/security/cert/X509CertSelector.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/security/cert/X509CertSelector.java	Thu Oct 21 20:21:04 2004
***************
*** 0 ****
--- 1,1108 ----
+ /* X509CertSelector.java -- selects X.509 certificates 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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.OID;
+ import gnu.java.security.action.GetPropertyAction;
+ 
+ import java.io.IOException;
+ import java.math.BigInteger;
+ import java.security.AccessController;
+ 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.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());
+     GetPropertyAction getProp = new GetPropertyAction("line.separator");
+     String nl = (String) AccessController.doPrivileged(getProp);
+     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-3.4.3/libjava/java/security/cert/X509Certificate.java gcc-4.0.0/libjava/java/security/cert/X509Certificate.java
*** gcc-3.4.3/libjava/java/security/cert/X509Certificate.java	Sat May 10 07:12:48 2003
--- gcc-4.0.0/libjava/java/security/cert/X509Certificate.java	Wed Oct 20 07:21:49 2004
*************** package java.security.cert;
*** 40,50 ****
  
  import java.math.BigInteger;
  import java.security.Principal;
- import java.security.PublicKey;
- import java.security.NoSuchAlgorithmException;
- import java.security.InvalidKeyException;
- import java.security.NoSuchProviderException;
- import java.security.SignatureException;
  import java.util.Date;
  
  /**
--- 40,45 ----
diff -Nrcpad gcc-3.4.3/libjava/java/security/interfaces/DSAKeyPairGenerator.java gcc-4.0.0/libjava/java/security/interfaces/DSAKeyPairGenerator.java
*** gcc-3.4.3/libjava/java/security/interfaces/DSAKeyPairGenerator.java	Sat Oct 11 19:00:07 2003
--- gcc-4.0.0/libjava/java/security/interfaces/DSAKeyPairGenerator.java	Tue May  4 21:40:42 2004
***************
*** 1,5 ****
  /* DSAKeyPairGenerator.java -- Initialize a DSA key generator
!    Copyright (C) 1998 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DSAKeyPairGenerator.java -- Initialize a DSA key generator
!    Copyright (C) 1998, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  package java.security.interfaces;
  
- import java.security.SecureRandom;
  import java.security.InvalidParameterException;
  
  /**
   * This interface contains methods for intializing a Digital Signature
--- 37,44 ----
  
  package java.security.interfaces;
  
  import java.security.InvalidParameterException;
+ import java.security.SecureRandom;
  
  /**
   * This interface contains methods for intializing a Digital Signature
diff -Nrcpad gcc-3.4.3/libjava/java/security/interfaces/DSAPrivateKey.java gcc-4.0.0/libjava/java/security/interfaces/DSAPrivateKey.java
*** gcc-3.4.3/libjava/java/security/interfaces/DSAPrivateKey.java	Sat Oct 11 19:00:07 2003
--- gcc-4.0.0/libjava/java/security/interfaces/DSAPrivateKey.java	Tue Feb 22 18:58:52 2005
***************
*** 1,5 ****
  /* DSAPublicKey.java -- A Digital Signature Algorithm private key
!    Copyright (C) 1998, 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DSAPublicKey.java -- A Digital Signature Algorithm private key
!    Copyright (C) 1998, 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  package java.security.interfaces;
  
- import java.security.PrivateKey;
  import java.math.BigInteger;
  
  /**
   * This interface models a Digital Signature Algorithm (DSA) private key
--- 37,44 ----
  
  package java.security.interfaces;
  
  import java.math.BigInteger;
+ import java.security.PrivateKey;
  
  /**
   * This interface models a Digital Signature Algorithm (DSA) private key
*************** import java.math.BigInteger;
*** 50,55 ****
--- 50,60 ----
  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-3.4.3/libjava/java/security/interfaces/DSAPublicKey.java gcc-4.0.0/libjava/java/security/interfaces/DSAPublicKey.java
*** gcc-3.4.3/libjava/java/security/interfaces/DSAPublicKey.java	Sat Oct 11 19:00:07 2003
--- gcc-4.0.0/libjava/java/security/interfaces/DSAPublicKey.java	Tue Feb 22 18:58:52 2005
***************
*** 1,5 ****
  /* DSAPublicKey.java -- A Digital Signature Algorithm public key
!    Copyright (C) 1998, 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DSAPublicKey.java -- A Digital Signature Algorithm public key
!    Copyright (C) 1998, 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  package java.security.interfaces;
  
- import java.security.PublicKey;
  import java.math.BigInteger;
  
  /**
   * This interface models a Digital Signature Algorithm (DSA) public key
--- 37,44 ----
  
  package java.security.interfaces;
  
  import java.math.BigInteger;
+ import java.security.PublicKey;
  
  /**
   * This interface models a Digital Signature Algorithm (DSA) public key
*************** import java.math.BigInteger;
*** 50,55 ****
--- 50,60 ----
  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-3.4.3/libjava/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java gcc-4.0.0/libjava/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java
*** gcc-3.4.3/libjava/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java	Sat Apr 19 20:54:55 2003
--- gcc-4.0.0/libjava/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java	Tue Feb 22 18:58:52 2005
*************** public interface RSAMultiPrimePrivateCrt
*** 54,59 ****
--- 54,60 ----
  {
    // Constants
    // --------------------------------------------------------------------------
+   long serialVersionUID = 618058533534628008L;
  
    // Methods
    // --------------------------------------------------------------------------
diff -Nrcpad gcc-3.4.3/libjava/java/security/interfaces/RSAPrivateCrtKey.java gcc-4.0.0/libjava/java/security/interfaces/RSAPrivateCrtKey.java
*** gcc-3.4.3/libjava/java/security/interfaces/RSAPrivateCrtKey.java	Sat Oct 11 19:00:07 2003
--- gcc-4.0.0/libjava/java/security/interfaces/RSAPrivateCrtKey.java	Tue Feb 22 18:58:52 2005
*************** import java.math.BigInteger;
*** 49,54 ****
--- 49,56 ----
   */
  public interface RSAPrivateCrtKey extends RSAPrivateKey
  {
+   long serialVersionUID = -5682214253527700368L;
+ 
    /**
     * Returns the public exponent for this key
     *
diff -Nrcpad gcc-3.4.3/libjava/java/security/interfaces/RSAPrivateKey.java gcc-4.0.0/libjava/java/security/interfaces/RSAPrivateKey.java
*** gcc-3.4.3/libjava/java/security/interfaces/RSAPrivateKey.java	Sat Oct 11 19:00:07 2003
--- gcc-4.0.0/libjava/java/security/interfaces/RSAPrivateKey.java	Tue Feb 22 18:58:52 2005
***************
*** 1,5 ****
  /* RSAPrivateKey.java -- An RSA private key
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* RSAPrivateKey.java -- An RSA private key
!    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  package java.security.interfaces;
  
- import java.security.PrivateKey;
  import java.math.BigInteger;
  
  /**
   * This interface provides access to information about an RSA private key.
--- 37,44 ----
  
  package java.security.interfaces;
  
  import java.math.BigInteger;
+ import java.security.PrivateKey;
  
  /**
   * This interface provides access to information about an RSA private key.
*************** import java.math.BigInteger;
*** 49,54 ****
--- 49,56 ----
   */
  public interface RSAPrivateKey extends PrivateKey, RSAKey
  {
+   long serialVersionUID = 5187144804936595022L;
+ 
    /**
     * Returns the private exponent value for this key
     *
diff -Nrcpad gcc-3.4.3/libjava/java/security/interfaces/RSAPublicKey.java gcc-4.0.0/libjava/java/security/interfaces/RSAPublicKey.java
*** gcc-3.4.3/libjava/java/security/interfaces/RSAPublicKey.java	Sat Oct 11 19:00:07 2003
--- gcc-4.0.0/libjava/java/security/interfaces/RSAPublicKey.java	Tue Feb 22 18:58:52 2005
***************
*** 1,5 ****
  /* RSAPublicKey.java -- An RSA public key
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* RSAPublicKey.java -- An RSA public key
!    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  package java.security.interfaces;
  
- import java.security.PublicKey;
  import java.math.BigInteger;
  
  /**
   * This interface provides access to information about an RSA public key.
--- 37,44 ----
  
  package java.security.interfaces;
  
  import java.math.BigInteger;
+ import java.security.PublicKey;
  
  /**
   * This interface provides access to information about an RSA public key.
*************** import java.math.BigInteger;
*** 49,54 ****
--- 49,56 ----
   */
  public interface RSAPublicKey extends PublicKey, RSAKey
  {
+   long serialVersionUID = -8727434096241101194L;
+ 
    /**
     * Returns the public exponent value for this key
     *
diff -Nrcpad gcc-3.4.3/libjava/java/security/spec/DSAParameterSpec.java gcc-4.0.0/libjava/java/security/spec/DSAParameterSpec.java
*** gcc-3.4.3/libjava/java/security/spec/DSAParameterSpec.java	Tue Dec  3 18:46:59 2002
--- gcc-4.0.0/libjava/java/security/spec/DSAParameterSpec.java	Sat Nov  6 16:32:56 2004
***************
*** 1,5 ****
  /* DSAParameterSpec.java --- DSA Parameter Specificaton class
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DSAParameterSpec.java --- DSA Parameter Specificaton class
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,100 ****
  
  
  package java.security.spec;
! import java.security.interfaces.DSAParams;
  import java.math.BigInteger;
  
  /**
! 	DSA Parameter class Specification. Used to maintain the DSA
! 	Parameters.
! 
! 	@since JDK 1.2
! 
! 	@author Mark Benvenuto
  */
! public class DSAParameterSpec extends Object 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;
    }
! 
! }
--- 37,101 ----
  
  
  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-3.4.3/libjava/java/security/spec/DSAPrivateKeySpec.java gcc-4.0.0/libjava/java/security/spec/DSAPrivateKeySpec.java
*** gcc-3.4.3/libjava/java/security/spec/DSAPrivateKeySpec.java	Tue Dec  3 18:46:59 2002
--- gcc-4.0.0/libjava/java/security/spec/DSAPrivateKeySpec.java	Tue Apr 20 14:44:57 2004
***************
*** 1,5 ****
  /* DSAPrivateKeySpec.java --- DSA Private Key Specificaton class
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DSAPrivateKeySpec.java --- DSA Private Key Specificaton class
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.math.BigInteger;
*** 47,53 ****
  
  	@author Mark Benvenuto
  */
! public class DSAPrivateKeySpec extends Object implements KeySpec 
  {
    private BigInteger x = null;
    private BigInteger p = null;
--- 47,53 ----
  
  	@author Mark Benvenuto
  */
! public class DSAPrivateKeySpec implements KeySpec 
  {
    private BigInteger x = null;
    private BigInteger p = null;
diff -Nrcpad gcc-3.4.3/libjava/java/security/spec/DSAPublicKeySpec.java gcc-4.0.0/libjava/java/security/spec/DSAPublicKeySpec.java
*** gcc-3.4.3/libjava/java/security/spec/DSAPublicKeySpec.java	Wed Apr 30 07:23:42 2003
--- gcc-4.0.0/libjava/java/security/spec/DSAPublicKeySpec.java	Tue Apr 20 14:44:58 2004
***************
*** 1,5 ****
  /* DSAPublicKeySpec.java --- DSA Public Key Specificaton class
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DSAPublicKeySpec.java --- DSA Public Key Specificaton class
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.math.BigInteger;
*** 47,53 ****
  
  	@author Mark Benvenuto
  */
! public class DSAPublicKeySpec extends Object implements KeySpec 
  {
    private BigInteger y = null;
    private BigInteger p = null;
--- 47,53 ----
  
  	@author Mark Benvenuto
  */
! public class DSAPublicKeySpec implements KeySpec 
  {
    private BigInteger y = null;
    private BigInteger p = null;
diff -Nrcpad gcc-3.4.3/libjava/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java gcc-4.0.0/libjava/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
*** gcc-3.4.3/libjava/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java	Sat Apr 19 20:54:55 2003
--- gcc-4.0.0/libjava/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java	Wed Oct 20 07:21:49 2004
*************** exception statement from your version. *
*** 38,44 ****
  package java.security.spec;
  
  import java.math.BigInteger;
- import java.security.spec.RSAOtherPrimeInfo;
  
  /**
   * This class specifies an RSA multi-prime private key, as defined in the
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/java/sql/Array.java gcc-4.0.0/libjava/java/sql/Array.java
*** gcc-3.4.3/libjava/java/sql/Array.java	Sat Oct 11 18:49:51 2003
--- gcc-4.0.0/libjava/java/sql/Array.java	Tue Apr 20 14:44:59 2004
*************** public interface Array 
*** 165,177 ****
    /**
     * 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 <cod>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.
     *
     * @param offset The index into the array to start returning elements from.
     * @param length The requested number of elements to return.
--- 165,177 ----
    /**
     * 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.
diff -Nrcpad gcc-3.4.3/libjava/java/sql/DatabaseMetaData.java gcc-4.0.0/libjava/java/sql/DatabaseMetaData.java
*** gcc-3.4.3/libjava/java/sql/DatabaseMetaData.java	Mon Oct 13 05:03:39 2003
--- gcc-4.0.0/libjava/java/sql/DatabaseMetaData.java	Tue Apr 20 14:44:59 2004
*************** public interface DatabaseMetaData 
*** 412,418 ****
     * 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.
     */
--- 412,418 ----
     * 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.
     */
*************** public interface DatabaseMetaData 
*** 433,440 ****
     * This method tests whether or not the database treats mixed case
     * identifiers as all upper case.
     *
!    * @exception <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;
--- 433,440 ----
     * 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;
*************** public interface DatabaseMetaData 
*** 443,450 ****
     * This method tests whether or not the database treats mixed case
     * identifiers as all lower case.
     *
!    * @exception <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;
--- 443,450 ----
     * 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;
*************** public interface DatabaseMetaData 
*** 473,480 ****
     * This method tests whether or not the database treats mixed case
     * quoted identifiers as all upper case.
     *
!    * @exception <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;
--- 473,480 ----
     * 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;
*************** public interface DatabaseMetaData 
*** 483,490 ****
     * This method tests whether or not the database treats mixed case
     * quoted identifiers as all lower case.
     *
!    * @exception <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;
--- 483,490 ----
     * 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;
*************** public interface DatabaseMetaData 
*** 1377,1394 ****
     * <p>
     * <ol>
     * <li>PROCEDURE_CAT - The catalog the procedure is in, which may be 
!    * <code>null</code>.
     * <li>PROCEDURE_SCHEM - The schema the procedures is in, which may be
!    * <code>null</code>.
!    * <li>PROCEDURE_NAME - The name of the procedure.
!    * <li>Unused
!    * <li>Unused
!    * <li>Unused
!    * <li>REMARKS - A description of the procedure
     * <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>).
     * </ol>
     *
     * @param catalog The name of the catalog to return stored procedured from,
--- 1377,1394 ----
     * <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,
*************** public interface DatabaseMetaData 
*** 1409,1435 ****
     * <p>
     * <ol>
     * <li>PROCEDURE_CAT - The catalog the procedure is in, which may be 
!    * <code>null</code>.
     * <li>PROCEDURE_SCHEM - The schema the procedures is in, which may be
!    * <code>null</code>.
!    * <li>PROCEDURE_NAME - The name of the procedure.
!    * <li>COLUMN_NAME - The name of the column
     * <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>DATA_TYPE - The SQL type of the column. This is one of the constants
!    * defined in <code>Types</code>.
!    * <li>TYPE_NAME - The string name of the data type for this column.
!    * <li>PRECISION - The precision of the column.
!    * <li>LENGTH - The length of the column in bytes
!    * <li>SCALE - The scale of the column.
!    * <li>RADIX - The radix of the column.
     * <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>REMARKS - A description of the column.
     * </ol>
     *
     * @param catalog The name of the catalog to return stored procedured from,
--- 1409,1435 ----
     * <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,
*************** public interface DatabaseMetaData 
*** 1448,1461 ****
    /**
     * This method returns a list of the requested table as 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>TABLE_SCHEM - The schema the table is in, which may be <code>null</code>.
!    * <li>TABLE_NAME - The name of the table.
     * <li>TABLE_TYPE - A string describing the table type.  This will be one
!    * of the values returned by the <code>getTableTypes()</code> method.
!    * <li>REMARKS - Comments about the table.
     * </ol>
     * 
     * @param catalog The name of the catalog to return tables from,
--- 1448,1461 ----
    /**
     * 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,
*************** public interface DatabaseMetaData 
*** 1507,1535 ****
     * <p>
     * <ol>
     * <li>TABLE_CAT - The catalog the table is in, which may be 
!    * <code>null</code>.
     * <li>TABLE_SCHEM - The schema the tables is in, which may be
!    * <code>null</code>.
!    * <li>TABLE_NAME - The name of the table.
!    * <li>COLUMN_NAME - The name of the column
     * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
!    * defined in <code>Types</code>.
!    * <li>TYPE_NAME - The string name of the data type for this column.
!    * <li>COLUMN_SIZE - The size of the column.
!    * <li>Unused
!    * <li>NUM_PREC_RADIX - The radix of the column.
     * <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>REMARKS - A description of the column.
!    * <li>COLUMN_DEF - The default value for the column, may be <code>null</code>.
!    * <li>SQL_DATA_TYPE - Unused
!    * <li>SQL_DATETIME_SUB - Unused
     * <li>CHAR_OCTET_LENGTH - For character columns, the maximum number of bytes
!    * in the column.
!    * <li>ORDINAL_POSITION - The index of the column in the table.
     * <li>IS_NULLABLE - "NO" means no, "YES" means maybe, and an empty string
!    * means unknown.
     * </ol>
     *
     * @param catalog The name of the catalog to return table from,
--- 1507,1535 ----
     * <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,
*************** public interface DatabaseMetaData 
*** 1548,1566 ****
     * 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:
!    * <p>
     * <ol>
     * <li>TABLE_CAT - The catalog the table is in, which may be 
!    * <code>null</code>.
     * <li>TABLE_SCHEM - The schema the tables is in, which may be
!    * <code>null</code>.
!    * <li>TABLE_NAME - The name of the table.
!    * <li>COLUMN_NAME - The name of the column.
!    * <li>GRANTOR - The entity that granted the access.
!    * <li>GRANTEE - The entity granted the access.
!    * <li>PRIVILEGE - The name of the privilege granted.
     * <li>IS_GRANTABLE - "YES" if the grantee can grant the privilege to
!    * others, "NO" if not, and <code>null</code> if unknown.
     * </ol>
     *
     * @param catalog The catalog to retrieve information from, or the empty string
--- 1548,1566 ----
     * 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
*************** public interface DatabaseMetaData 
*** 1580,1597 ****
     * 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:
!    * <p>
     * <ol>
     * <li>TABLE_CAT - The catalog the table is in, which may be 
!    * <code>null</code>.
     * <li>TABLE_SCHEM - The schema the tables is in, which may be
!    * <code>null</code>.
!    * <li>TABLE_NAME - The name of the table.
!    * <li>GRANTOR - The entity that granted the access.
!    * <li>GRANTEE - The entity granted the access.
!    * <li>PRIVILEGE - The name of the privilege granted.
     * <li>IS_GRANTABLE - "YES" if the grantee can grant the privilege to
!    * others, "NO" if not, and <code>null</code> if unknown.
     * </ol>
     *
     * @param catalog The catalog to retrieve information from, or the empty string
--- 1580,1597 ----
     * 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
*************** public interface DatabaseMetaData 
*** 1611,1632 ****
     * 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:
!    * <p>
     * <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>COLUMN_NAME - The name of the column.
     * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
!    * defined in <code>Types</code>.
!    * <li>TYPE_NAME - The string name of the data type for this column.
!    * <li>COLUMN_SIZE - The precision of the columns
!    * <li>BUFFER_LENGTH - Unused
!    * <li>DECIMAL_DIGITS - The scale of the column.
     * <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>).
     * </ol>
     *
     * @param catalog The catalog to retrieve information from, or the empty string
--- 1611,1632 ----
     * 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
*************** public interface DatabaseMetaData 
*** 1649,1668 ****
     * 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:
!    * <p>
     * <ol>
!    * <li>SCOPE - Unused
!    * <li>COLUMN_NAME - The name of the column.
     * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
!    * defined in <code>Types</code>.
!    * <li>TYPE_NAME - The string name of the data type for this column.
!    * <li>COLUMN_SIZE - The precision of the columns
!    * <li>BUFFER_LENGTH - Unused
!    * <li>DECIMAL_DIGITS - The scale of the column.
     * <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>).
     * </ol>
     *
     * @param catalog The catalog to retrieve information from, or the empty string
--- 1649,1668 ----
     * 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
*************** public interface DatabaseMetaData 
*** 1681,1694 ****
    /**
     * This method returns a list of a table's primary key columns.  These
     * are returned as a <code>ResultSet</code> with the following columns.
!    * <p>
     * <ol>
!    * <li>TABLE_CAT - The catalog of the table, which may be <code>null</code>.
!    * <li>TABLE_SCHEM - The schema of the table, which may be <code>null</code>.
!    * <li>TABLE_NAME - The name of the table.
!    * <li>COLUMN_NAME - The name of the column.
!    * <li>KEY_SEQ - The sequence number of the column within the primary key.
!    * <li>PK_NAME - The name of the primary key, which may be <code>null</code>.
     * </ol>
     *
     * @param catalog The catalog to retrieve information from, or the empty string
--- 1681,1694 ----
    /**
     * 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
*************** public interface DatabaseMetaData 
*** 1707,1738 ****
    /**
     * This method returns a list of the table's foreign keys.  These are
     * returned as a <code>ResultSet</code> with the following columns:
!    * <p>
     * <ol>
!    * <li>PKTABLE_CAT - The catalog of the table the key was imported from.
!    * <li>PKTABLE_SCHEM - The schema of the table the key was imported from.
!    * <li>PKTABLE_NAME - The name of the table the key was imported from.
!    * <li>PKCOLUMN_NAME - The name of the column that was imported.
!    * <li>FKTABLE_CAT - The foreign key catalog name.
!    * <li>FKTABLE_SCHEM - The foreign key schema name.
!    * <li>FKTABLE_NAME - The foreign key table name.
!    * <li>FKCOLUMN_NAME - The foreign key column name.
!    * <li>KEY_SEQ - The sequence number of the column within the foreign key.
     * <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>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>FK_NAME - The name of the foreign key.
!    * <li>PK_NAME - The name of the primary key.
     * <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>).
     * </ol>
     *
     * @param catalog The catalog to retrieve information from, or the empty string
--- 1707,1738 ----
    /**
     * 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
*************** public interface DatabaseMetaData 
*** 1753,1784 ****
     * 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:
!    * <p>
     * <ol>
!    * <li>PKTABLE_CAT - The catalog of the table the key was imported from.
!    * <li>PKTABLE_SCHEM - The schema of the table the key was imported from.
!    * <li>PKTABLE_NAME - The name of the table the key was imported from.
!    * <li>PKCOLUMN_NAME - The name of the column that was imported.
!    * <li>FKTABLE_CAT - The foreign key catalog name.
!    * <li>FKTABLE_SCHEM - The foreign key schema name.
!    * <li>FKTABLE_NAME - The foreign key table name.
!    * <li>FKCOLUMN_NAME - The foreign key column name.
!    * <li>KEY_SEQ - The sequence number of the column within the foreign key.
     * <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>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>FK_NAME - The name of the foreign key.
!    * <li>PK_NAME - The name of the primary key.
     * <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>).
     * </ol>
     *
     * @param catalog The catalog to retrieve information from, or the empty string
--- 1753,1784 ----
     * 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
*************** public interface DatabaseMetaData 
*** 1797,1828 ****
     * 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:
!    * <p>
     * <ol>
!    * <li>PKTABLE_CAT - The catalog of the table the key was imported from.
!    * <li>PKTABLE_SCHEM - The schema of the table the key was imported from.
!    * <li>PKTABLE_NAME - The name of the table the key was imported from.
!    * <li>PKCOLUMN_NAME - The name of the column that was imported.
!    * <li>FKTABLE_CAT - The foreign key catalog name.
!    * <li>FKTABLE_SCHEM - The foreign key schema name.
!    * <li>FKTABLE_NAME - The foreign key table name.
!    * <li>FKCOLUMN_NAME - The foreign key column name.
!    * <li>KEY_SEQ - The sequence number of the column within the foreign key.
     * <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>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>FK_NAME - The name of the foreign key.
!    * <li>PK_NAME - The name of the primary key.
     * <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>).
     * </ol>
     *
     * @param primCatalog The catalog to retrieve information from, or the empty string
--- 1797,1828 ----
     * 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
*************** public interface DatabaseMetaData 
*** 1850,1885 ****
     * 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:
!    * <p>
     * <ol>
!    * <li>TYPE_NAME - The name of the data type.
     * <li>DATA_TYPE - A data type constant from <code>Types</code> for this
!    * type.
!    * <li>PRECISION - The maximum precision of this type.
     * <li>LITERAL_PREFIX - Prefix value used to quote a literal, which may be
!    * <code>null</code>.
     * <li>LITERAL_SUFFIX - Suffix value used to quote a literal, which may be
!    * <code>null</code>.
     * <li>CREATE_PARAMS - The parameters used to create the type, which may be
!    * <code>null</code>.
     * <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>CASE_SENSITIVE - Whether or not the value is case sensitive.
     * <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>UNSIGNED_ATTRIBUTE - Is the value of this type unsigned.
!    * <li>FIXED_PREC_SCALE - Whether or not this type can be used for money.
!    * <li>AUTO_INCREMENT - Whether or not this type supports auto-incrementing.
!    * <li>LOCAL_TYPE_NAME - A localized name for this data type.
!    * <li>MINIMUM_SCALE - The minimum scale supported by this type.
!    * <li>MAXIMUM_SCALE - The maximum scale supported by this type.
!    * <li>SQL_DATA_TYPE - Unused.
!    * <li>SQL_DATETIME_SUB - Unused.
!    * <li>NUM_PREC_RADIX - The radix of this data type.
     * </ol>
     * 
     * @return A <code>ResultSet</code> with the list of available data types.
--- 1850,1885 ----
     * 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.
*************** public interface DatabaseMetaData 
*** 1890,1919 ****
    /**
     * This method returns information about a tables indices and statistics.
     * It is returned as a <code>ResultSet</code> with the following columns:
!    * <p>
     * <ol>
!    * <li>TABLE_CAT - The catalog of the table, which may be <code>null</code>.
!    * <li>TABLE_SCHEM - The schema of the table, which may be <code>null</code>.
!    * <li>TABLE_NAME - The name of the table.
!    * <li>NON_UNIQUE - Are index values non-unique?
!    * <li>INDEX_QUALIFIER The index catalog, which may be <code>null</code>
!    * <li>INDEX_NAME - The name of the index.
     * <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>ORDINAL_POSITION - The sequence number of this column in the index.
!    * This will be 0 when the index type is <code>tableIndexStatistic</code>.
!    * <li>COLUMN_NAME - The name of this column in the index.
     * <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>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>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>FILTER_CONDITION - The filter condition for this index, which may be
!    * <code>null</code>.
     * </ol>
     *
     * @param catalog The catalog to retrieve information from, or the empty string
--- 1890,1919 ----
    /**
     * 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
*************** public interface DatabaseMetaData 
*** 2093,2108 ****
    /**
     * This method returns the list of user defined data types in use.  These
     * are returned as a <code>ResultSet</code> with the following columns:
!    * <p>
     * <ol>
!    * <li>TYPE_CAT - The catalog name, which may be <code>null</code>.
!    * <li>TYPE_SCEHM - The schema name, which may be <code>null</code>.
!    * <li>TYPE_NAME - The user defined data type name.
!    * <li>CLASS_NAME - The Java class name this type maps to.
     * <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>REMARKS - Comments about this data type.
     * </ol>
     *
     * @param catalog The catalog to retrieve information from, or the empty string
--- 2093,2108 ----
    /**
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/sql/DriverManager.java gcc-4.0.0/libjava/java/sql/DriverManager.java
*** gcc-3.4.3/libjava/java/sql/DriverManager.java	Sat Apr 19 21:17:50 2003
--- gcc-4.0.0/libjava/java/sql/DriverManager.java	Fri Apr 23 07:57:47 2004
***************
*** 1,5 ****
  /* DriverManager.java -- Manage JDBC drivers
!    Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DriverManager.java -- Manage JDBC drivers
!    Copyright (C) 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.PrintStream;
*** 41,48 ****
  import java.io.PrintWriter;
  import java.util.Enumeration;
  import java.util.Properties;
- import java.util.Vector;
  import java.util.StringTokenizer;
  
  /**
    * This class manages the JDBC drivers in the system. It maintains a
--- 41,48 ----
  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
diff -Nrcpad gcc-3.4.3/libjava/java/sql/ResultSet.java gcc-4.0.0/libjava/java/sql/ResultSet.java
*** gcc-3.4.3/libjava/java/sql/ResultSet.java	Sat Oct 11 18:49:51 2003
--- gcc-4.0.0/libjava/java/sql/ResultSet.java	Tue Apr 20 14:45:00 2004
*************** import java.util.Map;
*** 48,61 ****
  /**
   * 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>
!  * Note that a result set is invalidated if the statement that returned
!  * it is closed.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
   */
--- 48,61 ----
  /**
   * 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)
   */
diff -Nrcpad gcc-3.4.3/libjava/java/sql/Timestamp.java gcc-4.0.0/libjava/java/sql/Timestamp.java
*** gcc-3.4.3/libjava/java/sql/Timestamp.java	Tue Nov 11 12:22:19 2003
--- gcc-4.0.0/libjava/java/sql/Timestamp.java	Wed Oct 20 08:09:24 2004
***************
*** 1,5 ****
  /* Time.java -- Wrapper around java.util.Date
!    Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Time.java -- Wrapper around java.util.Date
!    Copyright (C) 1999, 2000, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 38,44 ----
  
  package java.sql;
  
+ import java.text.DecimalFormat;
  import java.text.ParseException;
  import java.text.SimpleDateFormat;
  
*************** public class Timestamp extends java.util
*** 58,65 ****
    /**
     * Used for parsing and formatting this date.
     */
!   private static SimpleDateFormat sdf =
      new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  
    /**
      * The nanosecond value for this object
--- 59,68 ----
    /**
     * 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
*************** public class Timestamp extends java.util
*** 96,102 ****
  
      try
        {
! 	java.util.Date d = (java.util.Date)sdf.parseObject(str);
  
  	if (d == null)
  	  throw new IllegalArgumentException(str);
--- 99,109 ----
  
      try
        {
!         java.util.Date d;
!         synchronized (dateFormat)
! 	  {
! 	    d = (java.util.Date) dateFormat.parseObject(str);
! 	  }
  
  	if (d == null)
  	  throw new IllegalArgumentException(str);
*************** public class Timestamp extends java.util
*** 133,146 ****
  
    /**
     * 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 Timestamp(long date)
    {
!     super(date);
    }
  
    /**
--- 140,163 ----
  
    /**
     * 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);
    }
  
    /**
*************** public class Timestamp extends java.util
*** 150,156 ****
     */
    public String toString()
    {
!     return sdf.format(this) + "." + getNanos();
    }
  
    /**
--- 167,183 ----
     */
    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);
!       }
    }
  
    /**
*************** public class Timestamp extends java.util
*** 182,193 ****
     */
    public boolean before(Timestamp ts)
    {
!     if (ts.getTime() > getTime())
!       return true;
! 
!     if (ts.getNanos() > getNanos())
        return true;
- 
      return false;
    }
  
--- 209,218 ----
     */
    public boolean before(Timestamp ts)
    {
!     long time1 = getTime();
!     long time2 = ts.getTime();
!     if (time1 < time2 || (time1 == time2 && getNanos() < ts.getNanos()))
        return true;
      return false;
    }
  
*************** public class Timestamp extends java.util
*** 202,213 ****
     */
    public boolean after(Timestamp ts)
    {
!     if (ts.getTime() < getTime())
!       return true;
! 
!     if (ts.getNanos() < getNanos())
        return true;
- 
      return false;
    }
  
--- 227,236 ----
     */
    public boolean after(Timestamp ts)
    {
!     long time1 = getTime();
!     long time2 = ts.getTime();
!     if (time1 > time2 || (time1 == time2 && getNanos() > ts.getNanos()))
        return true;
      return false;
    }
  
diff -Nrcpad gcc-3.4.3/libjava/java/text/AttributedCharacterIterator.java gcc-4.0.0/libjava/java/text/AttributedCharacterIterator.java
*** gcc-3.4.3/libjava/java/text/AttributedCharacterIterator.java	Wed Oct 15 13:57:00 2003
--- gcc-4.0.0/libjava/java/text/AttributedCharacterIterator.java	Wed Oct 20 08:09:25 2004
***************
*** 1,5 ****
  /* AttributedCharacterIterator.java -- Iterate over attributes
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AttributedCharacterIterator.java -- Iterate over attributes
!    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,47 ****
  
  package java.text;
  
- import java.io.Serializable;
  import java.io.InvalidObjectException;
! import java.util.Set;
  import java.util.Map;
  
  /**
   * This interface extends the <code>CharacterIterator</code> interface
--- 38,47 ----
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/text/AttributedString.java gcc-4.0.0/libjava/java/text/AttributedString.java
*** gcc-3.4.3/libjava/java/text/AttributedString.java	Tue Jan 22 22:40:37 2002
--- gcc-4.0.0/libjava/java/text/AttributedString.java	Wed Oct 20 08:09:25 2004
***************
*** 1,5 ****
  /* AttributedString.java -- Models text with attributes
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AttributedString.java -- Models text with attributes
!    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,46 ****
  
  package java.text;
  
! import java.util.Iterator;
  import java.util.Hashtable;
! import java.util.HashSet;
  import java.util.Map;
  import java.util.Set;
  
--- 38,48 ----
  
  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;
  
*************** AttributedString(AttributedCharacterIter
*** 218,247 ****
    // Get the valid attribute list
    Set all_attribs = aci.getAllAttributeKeys();
    if (attributes != null)
!     {
!       Set valid_attribs = new HashSet();
!       Iterator iter = all_attribs.iterator();
!       while (iter.hasNext())
!         {
!           Object obj = iter.next();
! 
!           int i;
!           for (i = 0; i < attributes.length; i++)
!             if (obj.equals(attributes[0]))
!               break;
! 
!           if (i == attributes.length)
!             continue;
! 
!           valid_attribs.add(obj);
!         }
! 
!       all_attribs = valid_attribs;
!     } 
  
    // Loop through and extract the attributes
    char c = aci.setIndex(begin_index);
  
    do
      { 
        sb.append(c);
--- 220,231 ----
    // 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_index);
  
+   ArrayList accum = new ArrayList();
    do
      { 
        sb.append(c);
*************** AttributedString(AttributedCharacterIter
*** 290,306 ****
            Map new_map = new Hashtable();
            new_map.put(attrib, attrib_obj);
  
!           // Add it to the attribute list.  Yes this is a bad way to do things.
!           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(new_map, rs, rl);
          }
  
        c = aci.next();
      }
    while(c != CharacterIterator.DONE);
  
    sci = new StringCharacterIterator(sb.toString());
  }
  
--- 274,290 ----
            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());
  }
  
*************** AttributedString(AttributedCharacterIter
*** 319,325 ****
  public void
  addAttribute(AttributedCharacterIterator.Attribute attrib, Object value)
  {
!   addAttribute(attrib, value, 0, sci.getEndIndex() - 1);
  }
  
  /*************************************************************************/
--- 303,309 ----
  public void
  addAttribute(AttributedCharacterIterator.Attribute attrib, Object value)
  {
!   addAttribute(attrib, value, 0, sci.getEndIndex());
  }
  
  /*************************************************************************/
*************** addAttribute(AttributedCharacterIterator
*** 329,335 ****
    * of the string.
    *
    * @param attrib The attribute to add.
!   * @param value The value of the attribute.
    * @param begin_index The beginning index of the subrange.
    * @param end_index The ending index of the subrange.
    *
--- 313,319 ----
    * of the string.
    *
    * @param attrib The attribute to add.
!   * @param value The value of the attribute, which may be null.
    * @param begin_index The beginning index of the subrange.
    * @param end_index The ending index of the subrange.
    *
*************** addAttribute(AttributedCharacterIterator
*** 342,351 ****
    if (attrib == null)
      throw new IllegalArgumentException("null attribute");
  
!   Hashtable ht = new Hashtable();
!   ht.put(attrib, value);
  
!   addAttributes(ht, begin_index, end_index);
  }
  
  /*************************************************************************/
--- 326,335 ----
    if (attrib == null)
      throw new IllegalArgumentException("null attribute");
  
!   HashMap hm = new HashMap();
!   hm.put(attrib, value);
  
!   addAttributes(hm, begin_index, end_index);
  }
  
  /*************************************************************************/
*************** addAttributes(Map attributes, int begin_
*** 388,395 ****
  public AttributedCharacterIterator
  getIterator()
  {
!   return(new AttributedStringIterator(sci, attribs, 0, sci.getEndIndex() - 1,
!                                       null));
  }
  
  /*************************************************************************/
--- 372,378 ----
  public AttributedCharacterIterator
  getIterator()
  {
!   return(new AttributedStringIterator(sci, attribs, 0, sci.getEndIndex(), null));
  }
  
  /*************************************************************************/
*************** getIterator()
*** 408,414 ****
  public AttributedCharacterIterator
  getIterator(AttributedCharacterIterator.Attribute[] attributes)
  {
!   return(getIterator(attributes, 0, sci.getEndIndex() - 1));
  }
  
  /*************************************************************************/
--- 391,397 ----
  public AttributedCharacterIterator
  getIterator(AttributedCharacterIterator.Attribute[] attributes)
  {
!   return(getIterator(attributes, 0, sci.getEndIndex()));
  }
  
  /*************************************************************************/
diff -Nrcpad gcc-3.4.3/libjava/java/text/AttributedStringIterator.java gcc-4.0.0/libjava/java/text/AttributedStringIterator.java
*** gcc-3.4.3/libjava/java/text/AttributedStringIterator.java	Tue Jan 22 22:40:37 2002
--- gcc-4.0.0/libjava/java/text/AttributedStringIterator.java	Wed May  5 07:35:49 2004
***************
*** 1,5 ****
  /* AttributedStringIterator.java -- Class to iterate over AttributedString
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AttributedStringIterator.java -- Class to iterate over AttributedString
!    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,48 ****
  
  package java.text;
  
- import java.util.Set;
- import java.util.HashSet;
- import java.util.Map;
  import java.util.HashMap;
  import java.util.Iterator;
  
  /**
    * This class implements the AttributedCharacterIterator interface.  It
--- 38,48 ----
  
  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
*************** getAllAttributeKeys()
*** 179,186 ****
    if (attribs == null)
      return(s);
  
!   for (int i = 0; i < attribs.length; i++)
      {
        Set key_set = attribs[i].attribs.keySet();
        Iterator iter = key_set.iterator();
        while (iter.hasNext())
--- 179,190 ----
    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())
*************** getRunLimit(AttributedCharacterIterator.
*** 217,255 ****
  public synchronized int
  getRunLimit(Set attribute_set)
  {
!   int orig_index = ci.getIndex();
!   int run_limit;
  
!   do  
      {
!       run_limit = ci.getIndex();
! 
!       Map attribute_map = getAttributes();
! 
!       boolean found = false;
!       Iterator iter = attribute_set.iterator();
!       while(iter.hasNext()) 
!         if (!attribute_map.containsKey(iter.next()))
!           {
!             found = true;
!             break;
!           }
! 
!       if (found)
!         break;
      }
!   while (ci.next() != CharacterIterator.DONE);
! 
!   boolean hit_end = (ci.previous() == CharacterIterator.DONE);
! 
!   ci.setIndex(orig_index);
! 
!   if (run_limit == orig_index)
!     return(-1); // No characters match the given attributes
! //  else if (!hit_end)
! //    --run_limit;
! 
!   return(run_limit); 
  }
  
  /*************************************************************************/
--- 221,248 ----
  public synchronized int
  getRunLimit(Set attribute_set)
  {
!   boolean hit = false;
!   int runLimit = ci.getEndIndex ();
!   int pos = ci.getIndex ();
  
!   for (int i = 0; i < attribs.length; ++i)
      {
!       if (pos >= attribs[i].begin_index &&
!           pos <= attribs[i].end_index)
!         {
!           Iterator iter = attribute_set.iterator();
!           while(iter.hasNext()) 
!             if (attribs[i].attribs.containsKey(iter.next()))
!               {
!                 hit = true;
!                 runLimit = Math.min(runLimit, attribs[i].end_index);
!               }
!         }
      }
!   if (hit)
!     return runLimit;
!   else
!     return -1;
  }
  
  /*************************************************************************/
*************** getRunStart(AttributedCharacterIterator.
*** 277,311 ****
  public int
  getRunStart(Set attribute_set)
  {
!   int orig_index = ci.getIndex();
!   int run_start;
  
!   do  
      {
!       run_start = ci.getIndex();
! 
!       Map attribute_map = getAttributes();
! 
!       Iterator iter = attribute_set.iterator();
!       while(iter.hasNext())
!         if (!attribute_map.containsKey(iter.next()))
!           break;
! 
!       if (iter.hasNext())
!         break;
      }
!   while (ci.previous() != CharacterIterator.DONE);
! 
!   boolean hit_beginning = (ci.previous() == CharacterIterator.DONE);
! 
!   ci.setIndex(orig_index);
! 
!   if (run_start == orig_index)
!     return(-1); // No characters match the given attributes
!   else if (!hit_beginning)
!     ++run_start;
! 
!   return(run_start); 
  }
  
  /*************************************************************************/
--- 270,297 ----
  public int
  getRunStart(Set attribute_set)
  {
!   boolean hit = false;
!   int runBegin = 0;
!   int pos = ci.getIndex ();
  
!   for (int i = 0; i < attribs.length; ++i)
      {
!       if (pos >= attribs[i].begin_index &&
!           pos <= attribs[i].end_index)
!         {
!           Iterator iter = attribute_set.iterator();
!           while(iter.hasNext()) 
!             if (attribs[i].attribs.containsKey(iter.next()))
!               {
!                 hit = true;
!                 runBegin = Math.max(runBegin, attribs[i].begin_index);
!               }
!         }
      }
!   if (hit)
!     return runBegin;
!   else
!     return -1;
  }
  
  /*************************************************************************/
*************** getAttribute(AttributedCharacterIterator
*** 327,333 ****
            // Check for attribute match and range match
            if (obj.equals(attrib))
              if ((ci.getIndex() >= attribs[i].begin_index) &&
!                 (ci.getIndex() <= attribs[i].end_index))
                return(attribs[i].attribs.get(obj));
          }
      }
--- 313,319 ----
            // Check for attribute match and range match
            if (obj.equals(attrib))
              if ((ci.getIndex() >= attribs[i].begin_index) &&
!                 (ci.getIndex() < attribs[i].end_index))
                return(attribs[i].attribs.get(obj));
          }
      }
*************** getAttributes()
*** 351,357 ****
    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);
      }
  
--- 337,343 ----
    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);
      }
  
diff -Nrcpad gcc-3.4.3/libjava/java/text/BreakIterator.java gcc-4.0.0/libjava/java/text/BreakIterator.java
*** gcc-3.4.3/libjava/java/text/BreakIterator.java	Wed Apr 30 13:22:45 2003
--- gcc-4.0.0/libjava/java/text/BreakIterator.java	Thu Feb 17 07:48:40 2005
***************
*** 1,5 ****
  /* BreakIterator.java -- Breaks text into elements
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BreakIterator.java -- Breaks text into elements
!    Copyright (C) 1998, 1999, 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.ResourceBundle;
*** 49,55 ****
   * type is created by calling one of the static factory methods, not
   * by directly calling a constructor.
   *
!  * @author Tom Tromey <tromey@cygnus.com>
   * @author Aaron M. Renn (arenn@urbanophile.com)
   * @date March 19, 1999
   */
--- 49,59 ----
   * 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
   */
*************** public abstract class BreakIterator impl
*** 136,142 ****
        {
  	ResourceBundle res
  	  = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
! 				     loc);
  	className = res.getString(type);
        }
      catch (MissingResourceException x)
--- 140,146 ----
        {
  	ResourceBundle res
  	  = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
! 				     loc, ClassLoader.getSystemClassLoader());
  	className = res.getString(type);
        }
      catch (MissingResourceException x)
diff -Nrcpad gcc-3.4.3/libjava/java/text/ChoiceFormat.java gcc-4.0.0/libjava/java/text/ChoiceFormat.java
*** gcc-3.4.3/libjava/java/text/ChoiceFormat.java	Tue Jul  2 19:43:02 2002
--- gcc-4.0.0/libjava/java/text/ChoiceFormat.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* ChoiceFormat.java -- Format over a range of numbers
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** import java.util.Vector;
*** 45,51 ****
   * 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] <= X < 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>
--- 46,52 ----
   * 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>
*************** formats = { "file", "files" }</pre>
*** 70,76 ****
   * 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
   */
--- 71,77 ----
   * 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
   */
*************** public class ChoiceFormat extends Number
*** 196,205 ****
     * 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>The specified object is an instance of <code>ChoiceFormat</code>.
     * <li>The termination ranges and format strings are identical to
!    *     this object's. 
     * </ul>
     *
     * @param obj The object to test for equality against.
--- 197,206 ----
     * 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.
*************** public class ChoiceFormat extends Number
*** 440,446 ****
      this.choiceLimits = (double[]) choiceLimits.clone();
    }
  
!   private final void quoteString (StringBuffer dest, String text)
    {
      int max = text.length();
      for (int i = 0; i < max; ++i)
--- 441,447 ----
      this.choiceLimits = (double[]) choiceLimits.clone();
    }
  
!   private void quoteString (StringBuffer dest, String text)
    {
      int max = text.length();
      for (int i = 0; i < max; ++i)
diff -Nrcpad gcc-3.4.3/libjava/java/text/CollationElementIterator.java gcc-4.0.0/libjava/java/text/CollationElementIterator.java
*** gcc-3.4.3/libjava/java/text/CollationElementIterator.java	Wed Jan  7 18:40:07 2004
--- gcc-4.0.0/libjava/java/text/CollationElementIterator.java	Mon Feb 21 16:12:16 2005
***************
*** 1,5 ****
  /* CollationElementIterator.java -- Walks through collation elements
!    Copyright (C) 1998, 1999, 2001, 2002, 2003  Free Software Foundation
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CollationElementIterator.java -- Walks through collation elements
!    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004  Free Software Foundation
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 38,45 ----
  
  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.
*************** package java.text;
*** 51,59 ****
   * <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
  {
--- 53,61 ----
   * <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
  {
*************** public final class CollationElementItera
*** 74,86 ****
    String text;
  
    /**
     * This is the index into the String where we are currently scanning.
     */
    int textIndex;
  
!   // A piece of lookahead.
!   boolean lookahead_set;
!   int lookahead;
  
    /**
     * This method initializes a new instance of <code>CollationElementIterator</code>
--- 76,100 ----
    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>
*************** public final class CollationElementItera
*** 97,102 ****
--- 111,143 ----
      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).
*************** public final class CollationElementItera
*** 107,116 ****
     */
    public int next()
    {
!     if (textIndex == text.length())
        return NULLORDER;
  
!     return collator.ceiNext (this);
    }
  
    /**
--- 148,176 ----
     */
    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();
    }
  
    /**
*************** public final class CollationElementItera
*** 121,127 ****
     *
     * @return The primary order value of the specified collation value.  This is the high 16 bits.
     */
!   public static final int primaryOrder(int order)
    {
      // From the JDK 1.2 spec.
      return order >>> 16;
--- 181,187 ----
     *
     * @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;
*************** public final class CollationElementItera
*** 129,138 ****
  
    /**
     * This method resets the internal position pointer to read from the
!    * beginning of the <code>String again.
     */
    public void reset()
    {
      textIndex = 0;
    }
  
--- 189,199 ----
  
    /**
     * 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;
    }
  
*************** public final class CollationElementItera
*** 144,150 ****
     *
     * @return The secondary order value of the specified collation value.  This is the bits 8-15.
     */
!   public static final short secondaryOrder(int order)
    {
      // From the JDK 1.2 spec.
      return (short) ((order >>> 8) & 255);
--- 205,211 ----
     *
     * @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);
*************** public final class CollationElementItera
*** 158,164 ****
     *
     * @return The tertiary order value of the specified collation value.  This is the low eight bits.
     */
!   public static final short tertiaryOrder(int order)
    {
      // From the JDK 1.2 spec.
      return (short) (order & 255);
--- 219,225 ----
     *
     * @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);
*************** public final class CollationElementItera
*** 174,183 ****
     */
    public void setText(String text)
    {
      this.text = text;
!     this.textIndex = 0;
!     this.lookahead_set = false;
!     this.lookahead = 0;
    }
  
    /**
--- 235,409 ----
     */
    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());
    }
  
    /**
*************** public final class CollationElementItera
*** 192,195 ****
--- 418,467 ----
    {
      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
+    *
+    * @param The maximum length of an expansion sequence.
+    */
+   public int getMaxExpansion(int value)
+   {
+     return 1;
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/text/CollationKey.java gcc-4.0.0/libjava/java/text/CollationKey.java
*** gcc-3.4.3/libjava/java/text/CollationKey.java	Wed Jan  7 18:40:08 2004
--- gcc-4.0.0/libjava/java/text/CollationKey.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* CollationKey.java -- Precomputed collation value
!    Copyright (C) 1998, 1999, 2000, 2003  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CollationKey.java -- Precomputed collation value
!    Copyright (C) 1998, 1999, 2000, 2003, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.text;
*** 59,66 ****
   * <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
--- 59,66 ----
   * <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
*************** public final class CollationKey implemen
*** 78,101 ****
    /**
     * This is the bit value for this key.
     */
!   private int[] key;
  
!   CollationKey(Collator collator, CollationElementIterator iter,
! 	       String originalText, int strength)
    {
      this.collator = collator;
      this.originalText = originalText;
! 
!     // Compute size of required array.
!     int size = 0;
!     while (RuleBasedCollator.next(iter, strength)
! 	   != CollationElementIterator.NULLORDER)
!       ++size;
! 
!     iter.reset();
!     key = new int[size];
!     for (int i = 0; i < size; i++)
!       key[i] = RuleBasedCollator.next(iter, strength);
    }
  
    /**
--- 78,90 ----
    /**
     * 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;
    }
  
    /**
*************** public final class CollationKey implemen
*** 140,151 ****
     * this object.  This will be true if and only if:
     * <p>
     * <ul>
!    * <li>The specified object must not be <code>null</code>
!    * <li>The specified object is an instance of <code>CollationKey</code>.
     * <li>The specified object was created from the same <code>Collator</code>
!    * as this object.
     * <li>The specified object has the same source string and bit key as
!    * this object.
     * </ul>
     *
     * @param obj The <code>Object</code> to test for equality.
--- 129,140 ----
     * 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.
*************** public final class CollationKey implemen
*** 205,219 ****
     */
    public byte[] toByteArray()
    {
!     byte[] r = new byte[4 * key.length];
!     int off = 0;
!     for (int i = 0; i < key.length; ++i)
!       {
! 	r[off++] = (byte) ((key[i] >>> 24) & 255);
! 	r[off++] = (byte) ((key[i] >>> 16) & 255);
! 	r[off++] = (byte) ((key[i] >>>  8) & 255);
! 	r[off++] = (byte) ((key[i]       ) & 255);
!       }
!     return r;
    }
  }
--- 194,199 ----
     */
    public byte[] toByteArray()
    {
!     return key;
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/text/Collator.java gcc-4.0.0/libjava/java/text/Collator.java
*** gcc-3.4.3/libjava/java/text/Collator.java	Fri Oct  4 08:48:02 2002
--- gcc-4.0.0/libjava/java/text/Collator.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* Collator.java -- Perform locale dependent String comparisons.
!    Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,47 ****
  
  package java.text;
  
  import java.util.Locale;
  import java.util.MissingResourceException;
  import java.util.ResourceBundle;
- import java.util.Comparator;
  
  /**
   * This class is the abstract superclass of classes which perform 
--- 38,47 ----
  
  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 
*************** import java.util.Comparator;
*** 64,70 ****
   * 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
   */
--- 64,70 ----
   * 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
   */
*************** public abstract class Collator implement
*** 183,192 ****
     * 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>The specified object is an instance of <code>Collator</code>.
     * <li>The specified object has the same strength and decomposition
!    * settings as this object.
     * </ul>
     *
     * @param obj The <code>Object</code> to test for equality against
--- 183,192 ----
     * 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
*************** public abstract class Collator implement
*** 303,309 ****
      try
        {
  	res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
! 				       loc);
  	pattern = res.getString("collation_rules");
        }
      catch (MissingResourceException x)
--- 303,309 ----
      try
        {
  	res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
! 				       loc, ClassLoader.getSystemClassLoader());
  	pattern = res.getString("collation_rules");
        }
      catch (MissingResourceException x)
diff -Nrcpad gcc-3.4.3/libjava/java/text/DateFormat.java gcc-4.0.0/libjava/java/text/DateFormat.java
*** gcc-3.4.3/libjava/java/text/DateFormat.java	Tue Dec  2 13:13:23 2003
--- gcc-4.0.0/libjava/java/text/DateFormat.java	Tue Feb 22 13:02:09 2005
***************
*** 1,5 ****
  /* DateFormat.java -- Class for formatting/parsing date/times
!    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** import java.util.ResourceBundle;
*** 47,53 ****
  import java.util.TimeZone;
  
  /**
!  * @author Per Bothner <bothner@cygnus.com>
   * @date October 25, 1998.
   */
  /* Written using "Java Class Libraries", 2nd edition, plus online
--- 48,54 ----
  import java.util.TimeZone;
  
  /**
!  * @author Per Bothner (bothner@cygnus.com)
   * @date October 25, 1998.
   */
  /* Written using "Java Class Libraries", 2nd edition, plus online
*************** public abstract class DateFormat extends
*** 69,97 ****
  
    /* These constants need to have these exact values.  They
     * correspond to index positions within the localPatternChars
!    * string for a given locale.  For example, the US locale uses
!    * the string "GyMdkHmsSEDFwWahKz", where 'G' is the character
!    * for era, 'y' for year, and so on down to 'z' for time zone.
     */
    public static final int ERA_FIELD = 0;
    public static final int YEAR_FIELD = 1;
    public static final int MONTH_FIELD = 2;
    public static final int DATE_FIELD = 3;
    public static final int HOUR_OF_DAY1_FIELD = 4;
    public static final int HOUR_OF_DAY0_FIELD = 5;
    public static final int MINUTE_FIELD = 6;
    public static final int SECOND_FIELD = 7;
    public static final int MILLISECOND_FIELD = 8;
    public static final int DAY_OF_WEEK_FIELD = 9;
    public static final int DAY_OF_YEAR_FIELD = 10;
    public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11;
    public static final int WEEK_OF_YEAR_FIELD = 12;
    public static final int WEEK_OF_MONTH_FIELD = 13;
    public static final int AM_PM_FIELD = 14;
    public static final int HOUR1_FIELD = 15;
    public static final int HOUR0_FIELD = 16;
    public static final int TIMEZONE_FIELD = 17;
! 
  
    public static class Field extends Format.Field
    {
--- 70,290 ----
  
    /* 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
    {
*************** public abstract class DateFormat extends
*** 135,148 ****
  	= new Field("hour0", Calendar.HOUR);
      public static final DateFormat.Field TIME_ZONE
  	= new Field("timezone", Calendar.ZONE_OFFSET);
!  
!     public 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
      };
  
      // For deserialization
--- 328,355 ----
  	= 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
*************** public abstract class DateFormat extends
*** 196,204 ****
     * object:
     * <P>
     * <ul>
!    * <li>Is not <code>null</code>.
!    * <li>Is an instance of <code>DateFormat</code>.
!    * <li>Has the same numberFormat field value as this object.
     * </ul>
     *
     * @param obj The object to test for equality against.
--- 403,411 ----
     * object:
     * <P>
     * <ul>
!    * <li>Is not <code>null</code>.</li>
!    * <li>Is an instance of <code>DateFormat</code>.</li>
!    * <li>Has the same numberFormat field value as this object.</li>
     * </ul>
     *
     * @param obj The object to test for equality against.
*************** public abstract class DateFormat extends
*** 287,293 ****
     * This method returns a list of available locales supported by this
     * class.
     */
!   public static Locale[] getAvailableLocales ()
    {
      // FIXME
      Locale[] l = new Locale[1];
--- 494,500 ----
     * This method returns a list of available locales supported by this
     * class.
     */
!   public static Locale[] getAvailableLocales()
    {
      // FIXME
      Locale[] l = new Locale[1];
*************** public abstract class DateFormat extends
*** 308,331 ****
      return calendar;
    }
  
!   private static final DateFormat computeInstance (int style, Locale loc,
! 						   boolean use_date,
! 						   boolean use_time)
    {
      return computeInstance (style, style, loc, use_date, use_time);
    }
  
!   private static final 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);
        }
      catch (MissingResourceException x)
        {
--- 515,535 ----
      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)
        {
*************** public abstract class DateFormat extends
*** 591,596 ****
--- 795,801 ----
    /**
     * 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 abstract class DateFormat extends
*** 604,610 ****
  	int index = pos.getErrorIndex();
  	if (index < 0)
  	  index = pos.getIndex();
! 	throw new ParseException("invalid Date syntax", index);
        }
      return result;
    }
--- 809,816 ----
  	int index = pos.getErrorIndex();
  	if (index < 0)
  	  index = pos.getIndex();
! 	throw new ParseException("invalid Date syntax in \""
! 				 + source + '\"', index);
        }
      return result;
    }
diff -Nrcpad gcc-3.4.3/libjava/java/text/DateFormatSymbols.java gcc-4.0.0/libjava/java/text/DateFormatSymbols.java
*** gcc-3.4.3/libjava/java/text/DateFormatSymbols.java	Tue Aug 26 22:42:36 2003
--- gcc-4.0.0/libjava/java/text/DateFormatSymbols.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
! /* ChoiceFormat.java -- Format over a range of numbers
!    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* 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.
  
*************** import java.util.ResourceBundle;
*** 45,51 ****
  /**
   * 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.
--- 45,51 ----
  /**
   * 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.
*************** public class DateFormatSymbols implement
*** 98,104 ****
    public DateFormatSymbols (Locale locale) throws MissingResourceException
    {
      ResourceBundle res
!       = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation", locale);
  
      ampms = res.getStringArray ("ampms");
      eras = res.getStringArray ("eras");
--- 98,105 ----
    public DateFormatSymbols (Locale locale) throws MissingResourceException
    {
      ResourceBundle res
!       = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation", locale,
!       				 ClassLoader.getSystemClassLoader());
  
      ampms = res.getStringArray ("ampms");
      eras = res.getStringArray ("eras");
*************** public class DateFormatSymbols implement
*** 245,255 ****
     * the array contains five values:
     * <P>
     * <ul>
!    * <li>0 - The non-localized time zone id string.
!    * <li>1 - The long name of the time zone (standard time).
!    * <li>2 - The short name of the time zone (standard time).
!    * <li>3 - The long name of the time zone (daylight savings time).
!    * <li>4 - the short name of the time zone (daylight savings time).
     *
     * @return The list of time zone display strings.
     */
--- 246,257 ----
     * 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 class DateFormatSymbols implement
*** 386,396 ****
     * the array contains five values:
     * <P>
     * <ul>
!    * <li>0 - The non-localized time zone id string.
!    * <li>1 - The long name of the time zone (standard time).
!    * <li>2 - The short name of the time zone (standard time).
!    * <li>3 - The long name of the time zone (daylight savings time).
!    * <li>4 - the short name of the time zone (daylight savings time).
     *
     * @return The list of time zone display strings.
     */
--- 388,399 ----
     * 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 class DateFormatSymbols implement
*** 438,452 ****
     * This will be true if and only if the specified object:
     * <p>
     * <ul>
!    * <li> Is not <code>null</code>.
!    * <li> Is an instance of <code>DateFormatSymbols</code>.
!    * <li> Contains identical formatting symbols to this object.
     * </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)
    {
--- 441,455 ----
     * 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)
    {
diff -Nrcpad gcc-3.4.3/libjava/java/text/DecimalFormat.java gcc-4.0.0/libjava/java/text/DecimalFormat.java
*** gcc-3.4.3/libjava/java/text/DecimalFormat.java	Wed Nov 19 12:06:38 2003
--- gcc-4.0.0/libjava/java/text/DecimalFormat.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* DecimalFormat.java -- Formats and parses numbers
!    Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DecimalFormat.java -- Formats and parses numbers
!    Copyright (C) 1999, 2000, 2001, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,51 ****
  
  package java.text;
  
  import java.util.Currency;
  import java.util.Locale;
- import java.util.MissingResourceException;
- import java.util.ResourceBundle;
- import java.io.ObjectInputStream;
- import java.io.IOException;
  
  /**
!  * @author Tom Tromey <tromey@cygnus.com>
   * @date March 4, 1999
   */
  /* Written using "Java Class Libraries", 2nd edition, plus online
--- 37,56 ----
  
  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
*************** public class DecimalFormat extends Numbe
*** 58,112 ****
  {
    // This is a helper for applyPatternWithSymbols.  It reads a prefix
    // or a suffix.  It can cause some side-effects.
!   private final int scanFix (String pattern, int index, StringBuffer buf,
! 			     String patChars, DecimalFormatSymbols syms,
! 			     boolean is_suffix)
    {
      int len = pattern.length();
!     buf.setLength(0);
      boolean multiplierSet = false;
      while (index < len)
        {
  	char c = pattern.charAt(index);
  	if (c == '\'' && index + 1 < len
  	    && pattern.charAt(index + 1) == '\'')
  	  {
  	    buf.append(c);
! 	    ++index;
  	  }
! 	else if (c == '\'' && index + 2 < len
! 		 && pattern.charAt(index + 2) == '\'')
  	  {
! 	    buf.append(pattern.charAt(index + 1));
! 	    index += 2;
  	  }
  	else if (c == '\u00a4')
  	  {
  	    if (index + 1 < len && pattern.charAt(index + 1) == '\u00a4')
  	      {
! 		buf.append(syms.getInternationalCurrencySymbol());
! 		++index;
  	      }
  	    else
! 	      buf.append(syms.getCurrencySymbol());
  	  }
! 	else if (is_suffix && c == syms.getPercent())
  	  {
  	    if (multiplierSet)
  	      throw new IllegalArgumentException ("multiplier already set " +
  						  "- index: " + index);
  	    multiplierSet = true;
  	    multiplier = 100;
! 	    buf.append(c);
  	  }
! 	else if (is_suffix && c == syms.getPerMill())
  	  {
  	    if (multiplierSet)
  	      throw new IllegalArgumentException ("multiplier already set " +
  						  "- index: " + index);
  	    multiplierSet = true;
  	    multiplier = 1000;
! 	    buf.append(c);
  	  }
  	else if (patChars.indexOf(c) != -1)
  	  {
--- 63,128 ----
  {
    // 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')
  	  {
  	    if (index + 1 < len && pattern.charAt(index + 1) == '\u00a4')
  	      {
! 		buf.append(syms.getInternationalCurrencySymbol(), NumberFormat.Field.CURRENCY);
! 		index++;
  	      }
  	    else
! 	      buf.append(syms.getCurrencySymbol(), NumberFormat.Field.CURRENCY);
  	  }
! 	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)
  	  {
*************** public class DecimalFormat extends Numbe
*** 115,130 ****
  	  }
  	else
  	  buf.append(c);
! 	++index;
        }
  
      return index;
    }
  
    // A helper which reads a number format.
!   private final int scanFormat (String pattern, int index,
! 				String patChars, DecimalFormatSymbols syms,
! 				boolean is_positive)
    {
      int max = pattern.length();
  
--- 131,148 ----
  	  }
  	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();
  
*************** public class DecimalFormat extends Numbe
*** 259,264 ****
--- 277,292 ----
  	    useExponentialNotation = true;
  	    minExponentDigits = (byte) zeroCount;
  	  }
+ 
+ 	maximumIntegerDigits = groupingSize;
+ 	groupingSize = 0;
+ 	if (maximumIntegerDigits > minimumIntegerDigits && maximumIntegerDigits > 0)
+ 	  {
+ 	    minimumIntegerDigits = 1;
+ 	    exponentRound = maximumIntegerDigits;
+ 	  }
+ 	else
+ 	  exponentRound = 1;
        }
  
      return index;
*************** public class DecimalFormat extends Numbe
*** 266,272 ****
  
    // This helper function creates a string consisting of all the
    // characters which can appear in a pattern and must be quoted.
!   private final String patternChars (DecimalFormatSymbols syms)
    {
      StringBuffer buf = new StringBuffer ();
      buf.append(syms.getDecimalSeparator());
--- 294,300 ----
  
    // 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());
*************** public class DecimalFormat extends Numbe
*** 285,292 ****
      return buf.toString();
    }
  
!   private final void applyPatternWithSymbols (String pattern,
! 					      DecimalFormatSymbols syms)
    {
      // Initialize to the state the parser expects.
      negativePrefix = "";
--- 313,319 ----
      return buf.toString();
    }
  
!   private void applyPatternWithSymbols(String pattern, DecimalFormatSymbols syms)
    {
      // Initialize to the state the parser expects.
      negativePrefix = "";
*************** public class DecimalFormat extends Numbe
*** 300,320 ****
      useExponentialNotation = false;
      groupingUsed = false;
      maximumFractionDigits = 0;
!     maximumIntegerDigits = 309;
      minimumFractionDigits = 0;
      minimumIntegerDigits = 1;
  
!     StringBuffer buf = new StringBuffer ();
      String patChars = patternChars (syms);
  
      int max = pattern.length();
      int index = scanFix (pattern, 0, buf, patChars, syms, false);
!     positivePrefix = buf.toString();
  
      index = scanFormat (pattern, index, patChars, syms, true);
  
      index = scanFix (pattern, index, buf, patChars, syms, true);
!     positiveSuffix = buf.toString();
  
      if (index == pattern.length())
        {
--- 327,353 ----
      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())
        {
*************** public class DecimalFormat extends Numbe
*** 329,342 ****
  					      "expected - index: " + index);
  
  	index = scanFix (pattern, index + 1, buf, patChars, syms, false);
! 	negativePrefix = buf.toString();
  
  	// 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);
! 	negativeSuffix = buf.toString();
  
  	if (index != pattern.length())
  	  throw new IllegalArgumentException ("end of pattern expected " +
--- 362,381 ----
  					      "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 " +
*************** public class DecimalFormat extends Numbe
*** 385,391 ****
      applyPattern (pattern);
    }
  
!   private final boolean equals (String s1, String s2)
    {
      if (s1 == null || s2 == null)
        return s1 == s2;
--- 424,430 ----
      applyPattern (pattern);
    }
  
!   private boolean equals(String s1, String s2)
    {
      if (s1 == null || s2 == null)
        return s1 == s2;
*************** public class DecimalFormat extends Numbe
*** 409,447 ****
  	    && useExponentialNotation == dup.useExponentialNotation);
    }
  
!   public StringBuffer format (double number, StringBuffer dest,
! 			      FieldPosition fieldPos)
    {
      // A very special case.
      if (Double.isNaN(number))
        {
  	dest.append(symbols.getNaN());
! 	if (fieldPos != null && fieldPos.getField() == INTEGER_FIELD)
  	  {
  	    int index = dest.length();
  	    fieldPos.setBeginIndex(index - symbols.getNaN().length());
  	    fieldPos.setEndIndex(index);
  	  }
! 	return dest;
        }
  
      boolean is_neg = number < 0;
      if (is_neg)
        {
  	if (negativePrefix != null)
! 	  dest.append(negativePrefix);
  	else
  	  {
! 	    dest.append(symbols.getMinusSign());
! 	    dest.append(positivePrefix);
  	  }
  	number = - number;
        }
      else
!       dest.append(positivePrefix);
  
      int integerBeginIndex = dest.length();
      int integerEndIndex = 0;
      if (Double.isInfinite (number))
        {
  	dest.append(symbols.getInfinity());
--- 448,490 ----
  	    && useExponentialNotation == dup.useExponentialNotation);
    }
  
!   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(negativePrefix, negativePrefixRanges, negativePrefixAttrs);
  	else
  	  {
! 	    dest.append(symbols.getMinusSign(), NumberFormat.Field.SIGN);
! 	    dest.append(positivePrefix, positivePrefixRanges, positivePrefixAttrs);
  	  }
  	number = - number;
        }
      else
!       dest.append(positivePrefix, positivePrefixRanges, positivePrefixAttrs);
  
      int integerBeginIndex = dest.length();
      int integerEndIndex = 0;
+     int zeroStart = symbols.getZeroDigit() - '0';
+ 
      if (Double.isInfinite (number))
        {
  	dest.append(symbols.getInfinity());
*************** public class DecimalFormat extends Numbe
*** 457,462 ****
--- 500,506 ----
  	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));
*************** public class DecimalFormat extends Numbe
*** 468,500 ****
  	baseNumber += 5 * Math.pow(10.0, - maximumFractionDigits - 1);
  
  	int index = dest.length();
! 	double intPart = Math.floor(baseNumber);
! 	int count = 0;
! 	while (count < maximumIntegerDigits
! 	       && (intPart > 0 || count < minimumIntegerDigits))
  	  {
! 	    long dig = (long) (intPart % 10);
! 	    intPart = Math.floor(intPart / 10);
  
  	    // 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;
  	  }
  
  	integerEndIndex = dest.length();
! 
  	int decimal_index = integerEndIndex;
  	int consecutive_zeros = 0;
  	int total_digits = 0;
  
  	// Strip integer part from NUMBER.
  	double fracPart = baseNumber - Math.floor(baseNumber);
  	for (count = 0;
! 	     count < maximumFractionDigits
  	       && (fracPart != 0 || count < minimumFractionDigits);
  	     ++count)
  	  {
--- 512,568 ----
  	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)
  	  {
*************** public class DecimalFormat extends Numbe
*** 517,577 ****
  				    total_digits - minimumFractionDigits);
  	if (extra_zeros > 0)
  	  {
! 	    dest.setLength(dest.length() - extra_zeros);
  	    total_digits -= extra_zeros;
  	  }
  
! 	// If required, add the decimal symbol.
! 	if (decimalSeparatorAlwaysShown
! 	    || total_digits > 0)
  	  {
! 	    dest.insert(decimal_index, symbols.getDecimalSeparator());
! 	    if (fieldPos != null && fieldPos.getField() == FRACTION_FIELD)
! 	      {
! 		fieldPos.setBeginIndex(decimal_index + 1);
! 		fieldPos.setEndIndex(dest.length());
! 	      }
  	  }
  
  	// Finally, print the exponent.
  	if (useExponentialNotation)
  	  {
! 	    dest.append(symbols.getExponential());
  	    if (exponent < 0)
  	      {
! 		dest.append (symbols.getMinusSign ());
  		exponent = - exponent;
  	      }
  	    index = dest.length();
  	    for (count = 0;
! 		 exponent > 0 || count < minExponentDigits;
  		 ++count)
  	      {
! 		long dig = exponent % 10;
! 		exponent /= 10;
! 		dest.insert(index, (char) (symbols.getZeroDigit() + dig));
  	      }
  	  }
        }
  
!     if (fieldPos != null && fieldPos.getField() == INTEGER_FIELD)
        {
  	fieldPos.setBeginIndex(integerBeginIndex);
  	fieldPos.setEndIndex(integerEndIndex);
        }
  
!     dest.append((is_neg && negativeSuffix != null)
! 		? negativeSuffix
! 		: positiveSuffix);
      return dest;
    }
  
    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)
--- 585,672 ----
  				    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(negativeSuffix, negativeSuffixRanges, negativeSuffixAttrs);
!     else
!       dest.append(positiveSuffix, 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)
*************** public class DecimalFormat extends Numbe
*** 701,714 ****
  
    public Number parse (String str, ParsePosition pos)
    {
!     // Our strategy is simple: copy the text into a buffer,
!     // translating or omitting locale-specific information.  Then
!     // let Double or Long convert the number for us.
  
      boolean is_neg = false;
      int index = pos.getIndex();
!     StringBuffer 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);
--- 796,814 ----
  
    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);
*************** public class DecimalFormat extends Numbe
*** 746,758 ****
      // FIXME: handle Inf and NaN.
  
      // FIXME: do we have to respect minimum digits?
!     // What about leading zeros?  What about multiplier?
  
      int start_index = index;
      int max = str.length();
!     int last = index + maximumIntegerDigits;
      if (last > 0 && max > last)
        max = last;
      char zero = symbols.getZeroDigit();
      int last_group = -1;
      boolean int_part = true;
--- 846,870 ----
      // 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;
*************** public class DecimalFormat extends Numbe
*** 771,782 ****
  		pos.setErrorIndex(index);
  		return null;
  	      }
! 	    last_group = index;
  	  }
  	else if (c >= zero && c <= zero + 9)
  	  {
  	    buf.append((char) (c - zero + '0'));
- 	    exp_part = false;
  	  }
  	else if (parseIntegerOnly)
  	  break;
--- 883,893 ----
  		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;
*************** public class DecimalFormat extends Numbe
*** 789,802 ****
  		pos.setErrorIndex(index);
  		return null;
  	      }
! 	    buf.append('.');
  	    int_part = false;
  	  }
  	else if (c == symbols.getExponential())
  	  {
! 	    buf.append('E');
  	    int_part = false;
  	    exp_part = true;
  	  }
  	else if (exp_part
  		 && (c == '+' || c == '-' || c == symbols.getMinusSign()))
--- 900,915 ----
  		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()))
*************** public class DecimalFormat extends Numbe
*** 840,855 ****
        }
  
      String suffix = is_neg ? ns : positiveSuffix;
      if (is_neg)
!       buf.insert(0, '-');
  
!     String t = buf.toString();
      Number result = null;
!     try
        {
! 	result = new Long (t);
        }
!     catch (NumberFormatException x1)
        {
  	try
  	  {
--- 953,1063 ----
        }
  
      String suffix = is_neg ? ns : positiveSuffix;
+     long multiplier = 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
  	  {
*************** public class DecimalFormat extends Numbe
*** 940,946 ****
      positiveSuffix = newValue;
    }
  
!   private final void quoteFix (StringBuffer buf, String text, String patChars)
    {
      int len = text.length();
      for (int index = 0; index < len; ++index)
--- 1148,1154 ----
      positiveSuffix = newValue;
    }
  
!   private void quoteFix(StringBuffer buf, String text, String patChars)
    {
      int len = text.length();
      for (int index = 0; index < len; ++index)
*************** public class DecimalFormat extends Numbe
*** 957,970 ****
        }
    }
  
!   private final 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: 0);
      for (int i = 0; i < total_digits - minimumIntegerDigits; ++i)
        mainPattern.append(syms.getDigit());
      for (int i = total_digits - minimumIntegerDigits; i < total_digits; ++i)
--- 1165,1178 ----
        }
    }
  
!   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)
*************** public class DecimalFormat extends Numbe
*** 1018,1032 ****
--- 1226,1247 ----
      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;
diff -Nrcpad gcc-3.4.3/libjava/java/text/DecimalFormatSymbols.java gcc-4.0.0/libjava/java/text/DecimalFormatSymbols.java
*** gcc-3.4.3/libjava/java/text/DecimalFormatSymbols.java	Thu Nov 27 09:49:22 2003
--- gcc-4.0.0/libjava/java/text/DecimalFormatSymbols.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* DecimalFormatSymbols.java -- Format symbols used by DecimalFormat
!    Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DecimalFormatSymbols.java -- Format symbols used by DecimalFormat
!    Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,50 ****
  
  package java.text;
  
  import java.io.Serializable;
  import java.util.Currency;
  import java.util.Locale;
  import java.util.MissingResourceException;
  import java.util.ResourceBundle;
- import java.io.ObjectInputStream;
- import java.io.IOException;
  
  /**
   * This class is a container for the symbols used by 
--- 38,50 ----
  
  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 
*************** import java.io.IOException;
*** 52,58 ****
   * 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)
   * @date February 24, 1999
   */
--- 52,58 ----
   * 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)
   * @date February 24, 1999
   */
*************** public final class DecimalFormatSymbols 
*** 83,90 ****
      this (Locale.getDefault());
    }
  
!   private final String safeGetString (ResourceBundle bundle,
! 				      String name, String def)
    {
      if (bundle != null)
        {
--- 83,90 ----
      this (Locale.getDefault());
    }
  
!   private String safeGetString(ResourceBundle bundle,
!                                String name, String def)
    {
      if (bundle != null)
        {
*************** public final class DecimalFormatSymbols 
*** 99,106 ****
      return def;
    }
  
!   private final char safeGetChar (ResourceBundle bundle,
! 				  String name, char def)
    {
      String r = null;
      if (bundle != null)
--- 99,106 ----
      return def;
    }
  
!   private char safeGetChar(ResourceBundle bundle,
!                            String name, char def)
    {
      String r = null;
      if (bundle != null)
*************** public final class DecimalFormatSymbols 
*** 130,136 ****
      try
        {
  	res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
! 				       loc);
        }
      catch (MissingResourceException x)
        {
--- 130,136 ----
      try
        {
  	res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
! 		loc, ClassLoader.getSystemClassLoader());
        }
      catch (MissingResourceException x)
        {
*************** public final class DecimalFormatSymbols 
*** 167,175 ****
     * regard to the specified object:
     * <p>
     * <ul>
!    * <li>It is not <code>null</code>.
!    * <li>It is an instance of <code>DecimalFormatSymbols</code>
!    * <li>All of its symbols are identical to the symbols in this object.
     * </ul>
     *
     * @return <code>true</code> if the specified object is equal to this
--- 167,175 ----
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/text/FieldPosition.java gcc-4.0.0/libjava/java/text/FieldPosition.java
*** gcc-3.4.3/libjava/java/text/FieldPosition.java	Tue Dec  2 15:56:52 2003
--- gcc-4.0.0/libjava/java/text/FieldPosition.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* FieldPosition.java -- Keeps track of field positions while formatting
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.text;
*** 45,51 ****
   * typically define constant values for the field identifiers.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner <bothner@cygnus.com>
   */
  public class FieldPosition
  {
--- 45,51 ----
   * typically define constant values for the field identifiers.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner (bothner@cygnus.com)
   */
  public class FieldPosition
  {
*************** public class FieldPosition
*** 72,84 ****
    /**
     * This method initializes a new instance of <code>FieldPosition</code>
     * to have the specified field attribute. The attribute will be used as
!    * an id.
     *
     * @param field The field format attribute.
     */
    public FieldPosition (Format.Field field)
    {
!     this.field_attribute = field;
    }
  
    /**
--- 72,84 ----
    /**
     * 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);
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/text/Format.java gcc-4.0.0/libjava/java/text/Format.java
*** gcc-3.4.3/libjava/java/text/Format.java	Thu Dec 11 16:12:47 2003
--- gcc-4.0.0/libjava/java/text/Format.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* Format.java -- Abstract superclass for formatting/parsing strings.
!    Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,47 ****
  
  package java.text;
  
! import java.util.Set;
! import java.util.Map;
! import java.util.HashSet;
! import java.util.HashMap;
  import java.io.Serializable;
  
  /**
--- 38,45 ----
  
  package java.text;
  
! import gnu.java.text.FormatCharacterIterator;
! 
  import java.io.Serializable;
  
  /**
*************** import java.io.Serializable;
*** 59,75 ****
   * 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
  {
    static final long serialVersionUID = -299282585814624189L;
  
    public static class Field extends AttributedCharacterIterator.Attribute
    {
      static final long serialVersionUID = 276966692217360283L;
     
!     public Field(String name)
      {
        super(name);
      }
--- 57,76 ----
   * 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);
      }
*************** public abstract class Format implements 
*** 123,129 ****
     * This method parses a <code>String</code> and converts the parsed 
     * contents into an <code>Object</code>.
     *
!    * @param str The <code>String to parse.
     *
     * @return The resulting <code>Object</code>.
     *
--- 124,130 ----
     * 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>.
     *
diff -Nrcpad gcc-3.4.3/libjava/java/text/FormatCharacterIterator.java gcc-4.0.0/libjava/java/text/FormatCharacterIterator.java
*** gcc-3.4.3/libjava/java/text/FormatCharacterIterator.java	Thu Nov 27 09:43:02 2003
--- gcc-4.0.0/libjava/java/text/FormatCharacterIterator.java	Thu Jan  1 00:00:00 1970
***************
*** 1,469 ****
- /* FormatCharacter.java -- Implementation of AttributedCharacterIterator for 
-    formatters.
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but 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.Set;
- import java.util.HashSet;
- import java.util.Map;
- import java.util.HashMap;
- 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
-  */
- class FormatCharacterIterator implements AttributedCharacterIterator
- {
-   private String formattedString;
-   private int charIndex;
-   private int attributeIndex;
-   private int[] ranges;
-   private HashMap[] attributes;
-   
-   /**
-    * 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.
-    */
-   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>.
-    */
-   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.
-    */
-   protected void mergeAttributes (HashMap[] attributes, int[] ranges)
-   {
-     Vector new_ranges = new Vector();
-     Vector new_attributes = new Vector();
-     int i = 0, j = 0;
- 
-     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();
-       }
-     
-   }
- 
-   /**
-    * 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.
-    */
-   protected 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.
-    */
-   protected 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.
-    */
-   protected void append (String text)
-   {
-     append (text, null);
-   }  
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/java/text/MessageFormat.java gcc-4.0.0/libjava/java/text/MessageFormat.java
*** gcc-3.4.3/libjava/java/text/MessageFormat.java	Wed Jan 14 19:45:11 2004
--- gcc-4.0.0/libjava/java/text/MessageFormat.java	Sun Feb 20 21:18:30 2005
***************
*** 1,5 ****
  /* MessageFormat.java - Localized message formatting.
!    Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MessageFormat.java - Localized message formatting.
!    Copyright (C) 1999, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,233 ****
  
  package java.text;
  
  import java.util.Date;
  import java.util.Locale;
  import java.util.Vector;
  
! /**
!  * @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.
!  */
! 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;
! 	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;
  
! 	if (type.equals("time"))
! 	  format = DateFormat.getTimeInstance(val, loc);
! 	else
! 	  format = DateFormat.getDateInstance(val, loc);
  
! 	if (style != null && val == DateFormat.DEFAULT)
! 	  {
! 	    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);
!       }
    }
- }
  
- public class MessageFormat extends Format
- {
    private static final long serialVersionUID = 6479157306784022952L;
  
    // 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 final int scanString (String pat, int index,
! 				       StringBuffer buffer)
    {
      int max = pat.length();
      buffer.setLength(0);
      for (; index < max; ++index)
        {
  	char c = pat.charAt(index);
! 	if (c == '\'' && index + 2 < max && pat.charAt(index + 2) == '\'')
  	  {
! 	    buffer.append(pat.charAt(index + 1));
! 	    index += 2;
  	  }
! 	else if (c == '\'' && index + 1 < max
! 		 && pat.charAt(index + 1) == '\'')
  	  {
  	    buffer.append(c);
  	    ++index;
  	  }
  	else if (c == '{')
  	  break;
- 	else if (c == '}')
- 	  throw new IllegalArgumentException("Found '}' without '{'");
  	else
  	  buffer.append(c);
        }
      return index;
    }
  
    // This helper retrieves a single part of a format element.  Returns
    // the index of the terminating character.
!   private static final int scanFormatElement (String pat, int index,
! 					      StringBuffer buffer,
! 					      char term)
    {
      int max = pat.length();
      buffer.setLength(0);
      int brace_depth = 1;
  
      for (; index < max; ++index)
        {
  	char c = pat.charAt(index);
! 	if (c == '\'' && index + 2 < max && pat.charAt(index + 2) == '\'')
  	  {
! 	    buffer.append(c);
! 	    buffer.append(pat.charAt(index + 1));
! 	    buffer.append(c);
! 	    index += 2;
  	  }
  	else if (c == '\'' && index + 1 < max
  		 && pat.charAt(index + 1) == '\'')
  	  {
  	    buffer.append(c);
  	    ++index;
  	  }
  	else if (c == '{')
! 	  {
! 	    buffer.append(c);
! 	    ++brace_depth;
! 	  }
  	else if (c == '}')
  	  {
  	    if (--brace_depth == 0)
  	      break;
- 	    buffer.append(c);
  	  }
  	// Check for TERM after braces, because TERM might be `}'.
  	else if (c == term)
  	  break;
! 	else
! 	  buffer.append(c);
        }
      return index;
    }
  
    // This is used to parse a format element and whatever non-format
    // text might trail it.
!   private static final int scanFormat (String pat, int index,
! 				       StringBuffer buffer, Vector elts,
! 				       Locale locale)
    {
      MessageFormatElement mfe = new MessageFormatElement ();
      elts.addElement(mfe);
--- 38,283 ----
  
  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;
! 	  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;
  
! 	  if (type.equals("time"))
! 	    format = DateFormat.getTimeInstance(val, loc);
! 	  else
! 	    format = DateFormat.getDateInstance(val, loc);
  
! 	  if (style != null && val == DateFormat.DEFAULT)
! 	    {
! 	      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);
*************** public class MessageFormat extends Forma
*** 245,251 ****
        }
      catch (NumberFormatException nfx)
        {
! 	throw new IllegalArgumentException("Failed to parse integer string");
        }
  
      // Extract the element format.
--- 295,303 ----
        }
      catch (NumberFormatException nfx)
        {
! 	IllegalArgumentException iae = new IllegalArgumentException(pat);
! 	iae.initCause(nfx);
! 	throw iae;
        }
  
      // Extract the element format.
*************** public class MessageFormat extends Forma
*** 326,337 ****
     * @param aPattern 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.format(arguments, sb, fp).toString();
    }
  
    /**
--- 378,405 ----
     * @param aPattern The pattern used when formatting.
     * @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 aPattern 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();
    }
  
    /**
*************** public class MessageFormat extends Forma
*** 342,375 ****
     * @param fp A FieldPosition object (it is ignored).
     */
    public final StringBuffer format (Object arguments[], StringBuffer appendBuf,
! 				    FieldPosition ignore)
    {
      appendBuf.append(leader);
  
      for (int i = 0; i < elements.length; ++i)
        {
! 	if (elements[i].argNumber >= arguments.length)
! 	  throw new IllegalArgumentException("Not enough arguments given");
  
! 	Object thisArg = arguments[elements[i].argNumber];
  
  	Format formatter = null;
! 	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 (formatter != null)
  	  {
--- 410,469 ----
     * @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)
  	  {
*************** public class MessageFormat extends Forma
*** 377,422 ****
  	    if (formatter instanceof ChoiceFormat)
  	      {
  		StringBuffer buf = new StringBuffer ();
! 		formatter.format(thisArg, buf, ignore);
  		MessageFormat mf = new MessageFormat ();
  		mf.setLocale(locale);
  		mf.applyPattern(buf.toString());
! 		mf.format(arguments, appendBuf, ignore);
  	      }
  	    else
! 	      formatter.format(thisArg, appendBuf, ignore);
  	  }
  
  	appendBuf.append(elements[i].trailer);
        }
! 
      return appendBuf;
    }
  
    /**
!    * Returns the pattern with the formatted objects.
     *
!    * @param source The object to be formatted.
!    * @param result The StringBuffer where the text is appened.
!    * @param fp A FieldPosition object (it is ignored).
     */
!   public final StringBuffer format (Object singleArg, StringBuffer appendBuf,
! 				    FieldPosition ignore)
    {
!     Object[] args;
! 
!     if (singleArg instanceof Object[])
!       {
! 	// This isn't specified in any manual, but it follows the
! 	// JDK implementation.
! 	args = (Object[]) singleArg;
!       }
!     else
!       {
! 	args = new Object[1];
! 	args[0] = singleArg;
!       }
!     return format (args, appendBuf, ignore);
    }
  
    /**
--- 471,533 ----
  	    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);
    }
  
    /**
*************** public class MessageFormat extends Forma
*** 478,483 ****
--- 589,603 ----
      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.
*************** public class MessageFormat extends Forma
*** 628,633 ****
--- 748,819 ----
      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.
diff -Nrcpad gcc-3.4.3/libjava/java/text/NumberFormat.java gcc-4.0.0/libjava/java/text/NumberFormat.java
*** gcc-3.4.3/libjava/java/text/NumberFormat.java	Fri Dec 19 10:00:02 2003
--- gcc-4.0.0/libjava/java/text/NumberFormat.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* NumberFormat.java -- Formats and parses numbers
!    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package java.text;
  
- import java.io.InvalidObjectException;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.util.Currency;
--- 38,45 ----
  
  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.ResourceBundle;
*** 59,65 ****
   * 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
   */
--- 59,65 ----
   * 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
   */
*************** public abstract class NumberFormat exten
*** 302,316 ****
      return list;
    }
  
!   private static final NumberFormat computeInstance (Locale loc,
! 						     String resource,
! 						     String def)
    {
      ResourceBundle res;
      try
        {
  	res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",
! 				       loc);
        }
      catch (MissingResourceException x)
        {
--- 302,315 ----
      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)
        {
*************** public abstract class NumberFormat exten
*** 794,800 ****
     *
     * @since 1.4
     */
!   public void setCurreny(Currency currency)
    {
      if (currency == null)
        throw new NullPointerException("currency may not be null");
--- 793,799 ----
     *
     * @since 1.4
     */
!   public void setCurrency(Currency currency)
    {
      if (currency == null)
        throw new NullPointerException("currency may not be null");
diff -Nrcpad gcc-3.4.3/libjava/java/text/ParseException.java gcc-4.0.0/libjava/java/text/ParseException.java
*** gcc-3.4.3/libjava/java/text/ParseException.java	Sat Jun 15 18:38:00 2002
--- gcc-4.0.0/libjava/java/text/ParseException.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* ParseException.java -- an error occurred while parsing
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.text;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/text/ParsePosition.java gcc-4.0.0/libjava/java/text/ParsePosition.java
*** gcc-3.4.3/libjava/java/text/ParsePosition.java	Tue Jan 22 22:40:37 2002
--- gcc-4.0.0/libjava/java/text/ParsePosition.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* ParsePosition.java -- Keep track of position while parsing.
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.text;
*** 43,49 ****
   * operations.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner <bothner@cygnus.com>
   */
  public class ParsePosition
  {
--- 43,49 ----
   * operations.
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Per Bothner (bothner@cygnus.com)
   */
  public class ParsePosition
  {
*************** public class ParsePosition
*** 116,125 ****
     * all of 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>ParsePosition</code>.
     * <li>The specified object has the same index and error index as
!    *     this object.  
     * </ul>
     *
     * @param obj The <code>Object</code> to test for equality against
--- 116,125 ----
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/text/RuleBasedCollator.java gcc-4.0.0/libjava/java/text/RuleBasedCollator.java
*** gcc-3.4.3/libjava/java/text/RuleBasedCollator.java	Wed Jan  7 18:40:08 2004
--- gcc-4.0.0/libjava/java/text/RuleBasedCollator.java	Mon Feb 21 16:12:16 2005
***************
*** 1,5 ****
  /* RuleBasedCollator.java -- Concrete Collator Class
!    Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.Enumeration;
! import java.util.Hashtable;
! import java.util.Vector;
  
  /* Written using "Java Class Libraries", 2nd edition, plus online
   * API docs for JDK 1.2 from http://www.javasoft.com.
--- 35,45 ----
  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.
*************** import java.util.Vector;
*** 56,64 ****
   * <p>
   * Rules take the form of a <code>String</code> with the following syntax
   * <ul>
!  * <li> Modifier: '@' 
!  * <li> Relation: '&lt;' | ';' | ',' | '=' : <text>
!  * <li> Reset: '&amp;' : <text>
   * </ul>
   * The modifier character indicates that accents sort backward as is the
   * case with French.  The modifier applies to all rules <b>after</b>
--- 56,64 ----
   * <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>
*************** import java.util.Vector;
*** 69,80 ****
   * the following meanings:
   * <ul>
   * <li>'&lt;' - The text argument is greater than the prior term at the primary
!  * difference level.
   * <li>';' - The text argument is greater than the prior term at the secondary
!  * difference level.
   * <li>',' - The text argument is greater than the prior term at the tertiary
!  * difference level.
!  * <li>'=' - The text argument is equal to the prior term
   * </ul>
   * <p>
   * As for the text argument itself, this is any sequence of Unicode
--- 69,80 ----
   * 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
*************** import java.util.Vector;
*** 131,145 ****
   * A <code>ParseException</code> will be thrown for any of the following
   * conditions:
   * <ul>
!  * <li>Unquoted punctuation characters in a text argument.
!  * <li>A relational or reset operator not followed by a text argument
   * <li>A reset operator where the text argument is not present in
!  * the previous rule string section.
   * </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
  {
--- 131,145 ----
   * 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
  {
*************** public class RuleBasedCollator extends C
*** 147,178 ****
     * 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.
     */
!   final class CollationElement
    {
      String key;
!     char relation;
  
!     CollationElement(String key, char relation)
      {
        this.key = key;
!       this.relation = relation;
      }
    }
  
!   // True if we are using French-style accent ordering.
!   private boolean frenchAccents;
  
    /**
     * This the the original rule string.
     */
    private String rules;
  
!   // This maps strings onto collation values.
!   private Hashtable map;
!   
!   // An entry in this hash means that more lookahead is required for
!   // the prefix string.
!   private Hashtable prefixes;
    
    /**
     * This method initializes a new instance of <code>RuleBasedCollator</code>
--- 147,250 ----
     * 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>
*************** public class RuleBasedCollator extends C
*** 192,319 ****
      
      this.rules = rules;
  
!     // We keep each rule in order in a vector.  At the end we traverse
!     // the vector and compute collation values from it.
!     int insertion_index = 0;
!     Vector vec = new Vector ();
  
      int index;
!     StringBuffer argument = new StringBuffer();
!     int len = rules.length();
  
!     for (index = 0; index < len; ++index)
        {
! 	char c = rules.charAt(index);
  
- 	// Just skip whitespace.
- 	if (Character.isWhitespace(c))
- 	  continue;
  
! 	// Modifier.
! 	if (c == '@')
  	  {
! 	    frenchAccents = true;
! 	    continue;
  	  }
  
! 	// Check for relation or reset operator.
! 	if (! (c == '<' || c == ';' || c == ',' || c == '=' || c == '&'))
! 	  throw new ParseException ("invalid character", index);
! 
! 	++index;
! 	while (index < len)
  	  {
! 	    if (! Character.isWhitespace(rules.charAt(index)))
! 	      break;
! 	    ++index;
  	  }
! 	if (index == len)
! 	  throw new ParseException ("missing argument", index);
  
! 	int save = index;
! 	index = text_argument (rules, index, argument);
! 	if (argument.length() == 0)
! 	  throw new ParseException ("invalid character", save);
! 	String arg = argument.toString();
! 	int item_index = -1;
!         
!         for (int j = 0; j < vec.size(); ++j)
!           {
!             CollationElement e = (CollationElement) vec.elementAt (j);
  
!             if (arg.equals (e.key))
!               {
!                 item_index = j;
!                 break;
!               }
!           }
  	
! 	if (c != '&')
  	  {
! 	    // If the argument already appears in the vector, then we
! 	    // must remove it in order to re-order.
! 	    if (item_index != -1)
! 	      {
! 		vec.removeElementAt(item_index);
! 		if (insertion_index >= item_index)
! 		  --insertion_index;
! 	      }
! 	    CollationElement r = new CollationElement (arg, c);
! 	    vec.insertElementAt(r, insertion_index);
! 	    ++insertion_index;
  	  }
! 	else
  	  {
! 	    // Reset.
! 	    if (item_index == -1)
! 	      throw
! 		new ParseException ("argument to reset not previously seen",
! 				    save);
! 	    insertion_index = item_index + 1;
  	  }
  
! 	// Ugly: in this case the resulting INDEX comes from
! 	// text_argument, which returns the index of the next
! 	// character we should examine.
! 	--index;
!       }
! 
!     // Now construct a hash table that maps strings onto their
!     // collation values.
!     int primary = 0;
!     int secondary = 0;
!     int tertiary = 0;
!     this.map = new Hashtable ();
!     this.prefixes = new Hashtable ();
!     Enumeration e = vec.elements();
!     while (e.hasMoreElements())
!       {
! 	CollationElement r = (CollationElement) e.nextElement();
! 	switch (r.relation)
  	  {
  	  case '<':
! 	    ++primary;
! 	    secondary = 0;
! 	    tertiary = 0;
  	    break;
  	  case ';':
! 	    ++secondary;
! 	    tertiary = 0;
  	    break;
  	  case ',':
! 	    ++tertiary;
  	    break;
  	  case '=':
  	    break;
  	  }
- 	// This must match CollationElementIterator.
- 	map.put(r.key, new Integer (primary << 16
- 				    | secondary << 8 | tertiary));
  
! 	// Make a map of all lookaheads we might need.
! 	for (int i = r.key.length() - 1; i >= 1; --i)
! 	  prefixes.put(r.key.substring(0, i), Boolean.TRUE);
        }
    }
  
    /**
--- 264,576 ----
      
      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 priviledge 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;
    }
  
    /**
*************** public class RuleBasedCollator extends C
*** 323,412 ****
     */
    public Object clone()
    {
!     RuleBasedCollator c = (RuleBasedCollator) super.clone ();
!     c.map = (Hashtable) map.clone ();
!     c.prefixes = (Hashtable) map.clone ();
!     return c;
    }
  
!   // A helper for CollationElementIterator.next().
!   int ceiNext (CollationElementIterator cei)
    {
!     if (cei.lookahead_set)
!       {
! 	cei.lookahead_set = false;
! 	return cei.lookahead;
!       }
  
!     int save = cei.textIndex;
!     int max = cei.text.length();
!     String s = null;
  
!     // It is possible to have a case where `abc' has a mapping, but
!     // neither `ab' nor `abd' do.  In this case we must treat `abd' as
!     // nothing special.
!     boolean found = false;
  
!     int i;
!     for (i = save + 1; i <= max; ++i)
        {
! 	s = cei.text.substring(save, i);
! 	if (prefixes.get(s) == null)
! 	  break;
! 	found = true;
!       }
!     // Assume s != null.
  
!     Object obj = map.get(s);
!     // The special case.
!     while (found && obj == null && s.length() > 1)
!       {
! 	--i;
! 	s = cei.text.substring(save, i);
! 	obj = map.get(s);
        }
  
!     // Update state.
!     cei.textIndex = i;
  
!     if (obj == null)
!       {
! 	// This idea, and the values, come from JDK.
! 	// assert (s.length() == 1)
! 	cei.lookahead_set = true;
! 	cei.lookahead = s.charAt(0) << 8;
! 	return 0x7fff << 16;
!       }
  
!     return ((Integer) obj).intValue();
    }
  
!   // A helper for compareTo() that returns the next character that has
!   // a nonzero ordering at the indicated strength.  This is also used
!   // in CollationKey.
!   static final int next (CollationElementIterator iter, int strength)
    {
!     while (true)
        {
! 	int os = iter.next();
! 	if (os == CollationElementIterator.NULLORDER)
! 	  return os;
! 	int c = 0;
! 	switch (strength)
! 	  {
! 	  case PRIMARY:
! 	    c = os & ~0xffff;
! 	    break;
! 	  case SECONDARY:
! 	    c = os & ~0x00ff;
! 	    break;
! 	  case TERTIARY:
! 	  case IDENTICAL:
! 	    c = os;
! 	    break;
! 	  }
! 	if (c != 0)
! 	  return c;
        }
    }
  
--- 580,709 ----
     */
    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);
        }
    }
  
*************** public class RuleBasedCollator extends C
*** 425,458 ****
    public int compare(String source, String target)
    {
      CollationElementIterator cs, ct;
  
!     cs = new CollationElementIterator(this, source);
!     ct = new CollationElementIterator(this, target);
  
      for(;;)
        {
! 	int os = next (cs, strength);
! 	int ot = next (ct, strength);
  
! 	if (os == CollationElementIterator.NULLORDER
! 	    && ot == CollationElementIterator.NULLORDER)
! 	  break;
! 	else if (os == CollationElementIterator.NULLORDER)
  	  {
! 	    // Source string is shorter, so return "less than".
  	    return -1;
  	  }
! 	else if (ot == CollationElementIterator.NULLORDER)
  	  {
! 	    // Target string is shorter, so return "greater than".
! 	    return 1;
  	  }
  
! 	if (os != ot)
! 	  return os - ot;
!       }
  
!     return 0;
    }
  
    /**
--- 722,836 ----
    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);    
!       }
    }
  
    /**
*************** public class RuleBasedCollator extends C
*** 467,479 ****
     */
    public boolean equals(Object obj)
    {
!     if (! (obj instanceof RuleBasedCollator) || ! super.equals(obj))
        return false;
!     RuleBasedCollator rbc = (RuleBasedCollator) obj;
!     // FIXME: this is probably wrong.  Instead we should compare maps
!     // directly.
!     return (frenchAccents == rbc.frenchAccents
! 	    && rules.equals(rbc.rules));
    }
  
    /**
--- 845,898 ----
     */
    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);
    }
  
    /**
*************** public class RuleBasedCollator extends C
*** 489,501 ****
     */
    public CollationElementIterator getCollationElementIterator(String source)
    {
!     int len = source.length();
!     StringBuffer expand = new StringBuffer(len);
!     
!     for (int index = 0; index < len; ++index)
!       decomposeCharacter(source.charAt(index), expand);
!     
!     return new CollationElementIterator(this, expand.toString());
    }
  
    /**
--- 908,914 ----
     */
    public CollationElementIterator getCollationElementIterator(String source)
    {
!     return new CollationElementIterator(this, source);
    }
  
    /**
*************** public class RuleBasedCollator extends C
*** 517,523 ****
  	 c = source.next())
        decomposeCharacter(c, expand);
  
!     return new CollationElementIterator(this, expand.toString());
    }
  
    /**
--- 930,936 ----
  	 c = source.next())
        decomposeCharacter(c, expand);
  
!     return getCollationElementIterator(expand.toString());
    }
  
    /**
*************** public class RuleBasedCollator extends C
*** 533,540 ****
     */
    public CollationKey getCollationKey(String source)
    {
!     return new CollationKey(this, getCollationElementIterator(source), source,
! 			    strength);
    }
  
    /**
--- 946,997 ----
     */
    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);
    }
  
    /**
*************** public class RuleBasedCollator extends C
*** 555,598 ****
     */
    public int hashCode()
    {
!     return (frenchAccents ? 1231 : 1237
! 	    ^ rules.hashCode()
! 	    ^ map.hashCode()
! 	    ^ prefixes.hashCode());
!   }
! 
!   private final boolean is_special (char c)
!   {
!     // Rules from JCL book.
!     return ((c >= 0x0021 && c <= 0x002f)
! 	    || (c >= 0x003a && c <= 0x0040)
! 	    || (c >= 0x005b && c <= 0x0060)
! 	    || (c >= 0x007b && c <= 0x007e));
!   }
! 
!   private final int text_argument (String rules, int index,
! 				   StringBuffer result)
!   {
!     result.setLength(0);
!     int len = rules.length();
!     while (index < len)
!       {
! 	char c = rules.charAt (index);
! 	if (c == '\''
!             && index + 2 < len
! 	    && rules.charAt (index + 2) == '\'')
!           {
!             result.append (rules.charAt (index + 1));
!             index += 2;
!           }
! 	else if (is_special (c))
! 	  return index;
!         else if (!Character.isWhitespace (c))
!           result.append (c);
!         
!         ++index;
!       }
!     return index;
    }
- 
  }
--- 1012,1017 ----
     */
    public int hashCode()
    {
!     return System.identityHashCode(this);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/text/SimpleDateFormat.java gcc-4.0.0/libjava/java/text/SimpleDateFormat.java
*** gcc-3.4.3/libjava/java/text/SimpleDateFormat.java	Tue Dec  2 16:15:15 2003
--- gcc-4.0.0/libjava/java/text/SimpleDateFormat.java	Wed Mar 23 21:36:24 2005
***************
*** 1,6 ****
  /* SimpleDateFormat.java -- A class for parsing/formating simple 
     date constructs
!    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,7 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 40,53 ----
  
  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;
*** 46,54 ****
  import java.util.Iterator;
  import java.util.Locale;
  import java.util.TimeZone;
! import java.util.SimpleTimeZone;
! import java.io.ObjectInputStream;
! import java.io.IOException;
  
  /**
   * SimpleDateFormat provides convenient methods for parsing and formatting
--- 55,62 ----
  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
*************** import java.io.IOException;
*** 56,89 ****
   */
  public class SimpleDateFormat extends DateFormat 
  {
!   /** A pair class used by SimpleDateFormat as a compiled representation
!    *  of a format string.
     */
!   private class FieldSizePair 
    {
!     public int field;
!     public int size;
  
!     /** Constructs a pair with the given field and size values */
!     public FieldSizePair(int f, int s) {
        field = f;
        size = s;
      }
    }
  
    private transient ArrayList tokens;
!   private DateFormatSymbols formatData;  // formatData
    private Date defaultCenturyStart;
    private transient int defaultCentury;
    private String pattern;
    private int serialVersionOnStream = 1; // 0 indicates JDK1.1.3 or earlier
    private static final long serialVersionUID = 4774881970558875024L;
  
!   // This string is specified in the JCL.  We set it here rather than
!   // do a DateFormatSymbols(Locale.US).getLocalPatternChars() since
!   // someone could theoretically change those values (though unlikely).
!   private static final String standardChars = "GyMdkHmsSEDFwWahKz";
  
    private void readObject(ObjectInputStream stream)
      throws IOException, ClassNotFoundException
    {
--- 64,253 ----
   */
  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,
!      */
!     private int field;
  
!     /**
!      * The size of the character sequence.
!      */
!     private 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
    {
*************** public class SimpleDateFormat extends Da
*** 99,107 ****
  
      // Set up items normally taken care of by the constructor.
      tokens = new ArrayList();
!     compileFormat(pattern);
    }
  
    private void compileFormat(String pattern) 
    {
      // Any alphabetical characters are treated as pattern characters
--- 263,287 ----
  
      // 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
*************** public class SimpleDateFormat extends Da
*** 110,133 ****
      char thisChar;
      int pos;
      int field;
!     FieldSizePair current = null;
  
      for (int i=0; i<pattern.length(); i++) {
        thisChar = pattern.charAt(i);
!       field = formatData.getLocalPatternChars().indexOf(thisChar);
        if (field == -1) {
  	current = null;
  	if ((thisChar >= 'A' && thisChar <= 'Z')
  	    || (thisChar >= 'a' && thisChar <= 'z')) {
! 	  // Not a valid letter
! 	  tokens.add(new FieldSizePair(-1,0));
  	} else if (thisChar == '\'') {
  	  // Quoted text section; skip to next single quote
  	  pos = pattern.indexOf('\'',i+1);
  	  if (pos == -1) {
! 	    // This ought to be an exception, but spec does not
! 	    // let us throw one.
! 	    tokens.add(new FieldSizePair(-1,0));
  	  }
  	  if ((pos+1 < pattern.length()) && (pattern.charAt(pos+1) == '\'')) {
  	    tokens.add(pattern.substring(i+1,pos+1));
--- 290,314 ----
      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);
  	  if (pos == -1) {
! 	    throw new IllegalArgumentException("Quotes starting at character "
! 					       + i + " not closed.");
  	  }
  	  if ((pos+1 < pattern.length()) && (pattern.charAt(pos+1) == '\'')) {
  	    tokens.add(pattern.substring(i+1,pos+1));
*************** public class SimpleDateFormat extends Da
*** 144,163 ****
  	if ((current != null) && (field == current.field)) {
  	  current.size++;
  	} else {
! 	  current = new FieldSizePair(field,1);
  	  tokens.add(current);
  	}
        }
      }
    }
  
    public String toString() 
    {
!     StringBuffer output = new StringBuffer();
!     Iterator i = tokens.iterator();
!     while (i.hasNext()) {
!       output.append(i.next().toString());
!     }
      return output.toString();
    }
  
--- 325,362 ----
  	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();
    }
  
*************** public class SimpleDateFormat extends Da
*** 184,194 ****
      numberFormat = NumberFormat.getInstance(locale);
      numberFormat.setGroupingUsed (false);
      numberFormat.setParseIntegerOnly (true);
    }
    
    /**
!    * Creates a date formatter using the specified pattern, with the default
!    * DateFormatSymbols for the default locale.
     */
    public SimpleDateFormat(String pattern) 
    {
--- 383,398 ----
      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) 
    {
*************** public class SimpleDateFormat extends Da
*** 196,203 ****
    }
  
    /**
!    * Creates a date formatter using the specified pattern, with the default
!    * DateFormatSymbols for the given locale.
     */
    public SimpleDateFormat(String pattern, Locale locale) 
    {
--- 400,412 ----
    }
  
    /**
!    * 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) 
    {
*************** public class SimpleDateFormat extends Da
*** 211,221 ****
      numberFormat = NumberFormat.getInstance(locale);
      numberFormat.setGroupingUsed (false);
      numberFormat.setParseIntegerOnly (true);
    }
  
    /**
!    * Creates a date formatter using the specified pattern. The
!    * specified DateFormatSymbols will be used when formatting.
     */
    public SimpleDateFormat(String pattern, DateFormatSymbols formatData)
    {
--- 420,437 ----
      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)
    {
*************** public class SimpleDateFormat extends Da
*** 223,239 ****
      calendar = new GregorianCalendar();
      computeCenturyStart ();
      tokens = new ArrayList();
      this.formatData = formatData;
      compileFormat(pattern);
      this.pattern = pattern;
      numberFormat = NumberFormat.getInstance();
      numberFormat.setGroupingUsed (false);
      numberFormat.setParseIntegerOnly (true);
    }
  
-   // What is the difference between localized and unlocalized?  The
-   // docs don't say.
- 
    /**
     * This method returns a string with the formatting pattern being used
     * by this object.  This string is unlocalized.
--- 439,455 ----
      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.
*************** public class SimpleDateFormat extends Da
*** 254,260 ****
    public String toLocalizedPattern()
    {
      String localChars = formatData.getLocalPatternChars();
!     return applyLocalizedPattern (pattern, standardChars, localChars);
    }
  
    /**
--- 470,476 ----
    public String toLocalizedPattern()
    {
      String localChars = formatData.getLocalPatternChars();
!     return translateLocalizedPattern(pattern, standardChars, localChars);
    }
  
    /**
*************** public class SimpleDateFormat extends Da
*** 262,267 ****
--- 478,485 ----
     * 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)
    {
*************** public class SimpleDateFormat extends Da
*** 275,290 ****
     * object.  This string is localized.
     *
     * @param pattern The new format pattern.
     */
    public void applyLocalizedPattern(String pattern)
    {
      String localChars = formatData.getLocalPatternChars();
!     pattern = applyLocalizedPattern (pattern, localChars, standardChars);
      applyPattern(pattern);
    }
  
!   private String applyLocalizedPattern(String pattern,
! 				       String oldChars, String newChars)
    {
      int len = pattern.length();
      StringBuffer buf = new StringBuffer(len);
--- 493,526 ----
     * 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);
*************** public class SimpleDateFormat extends Da
*** 332,345 ****
    }
  
    /**
!    * This method returns the format symbol information used for parsing
!    * and formatting dates.
     *
!    * @return The date format symbols.
     */
    public DateFormatSymbols getDateFormatSymbols()
    {
!     return formatData;
    }
  
    /**
--- 568,581 ----
    }
  
    /**
!    * 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();
    }
  
    /**
*************** public class SimpleDateFormat extends Da
*** 347,355 ****
--- 583,597 ----
     * 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;
     }
  
*************** public class SimpleDateFormat extends Da
*** 358,370 ****
     * object.  This will be true if and only if the specified object:
     * <p>
     * <ul>
!    * <li>Is not <code>null</code>.
!    * <li>Is an instance of <code>SimpleDateFormat</code>.
     * <li>Is equal to this object at the superclass (i.e., <code>DateFormat</code>)
!    *     level.
!    * <li>Has the same formatting pattern.
!    * <li>Is using the same formatting symbols.
!    * <li>Is using the same century for two digit years.
     * </ul>
     *
     * @param obj The object to compare for equality against.
--- 600,612 ----
     * 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 obj The object to compare for equality against.
*************** public class SimpleDateFormat extends Da
*** 411,519 ****
     * appending to the specified StringBuffer.  The input StringBuffer
     * is returned as output for convenience.
     */
!   public StringBuffer format(Date date, StringBuffer buffer, FieldPosition pos)
    {
      String temp;
      calendar.setTime(date);
!     
!     // go through ArrayList, filling in fields where applicable, else toString
!     Iterator i = tokens.iterator();
!     while (i.hasNext()) {
!       Object o = i.next();
!       if (o instanceof FieldSizePair) {
! 	FieldSizePair p = (FieldSizePair) o;
! 	int beginIndex = buffer.length();
! 	switch (p.field) {
! 	case ERA_FIELD:
! 	  buffer.append(formatData.eras[calendar.get(Calendar.ERA)]);
! 	  break;
! 	case YEAR_FIELD:
! 	  // If we have two digits, then we truncate.  Otherwise, we
! 	  // use the size of the pattern, and zero pad.
! 	  if (p.size == 2)
! 	    {
! 	      temp = String.valueOf(calendar.get(Calendar.YEAR));
! 	      buffer.append(temp.substring(temp.length() - 2));
! 	    }
! 	  else
! 	    withLeadingZeros(calendar.get(Calendar.YEAR), p.size, buffer);
! 	  break;
! 	case MONTH_FIELD:
! 	  if (p.size < 3)
! 	    withLeadingZeros(calendar.get(Calendar.MONTH)+1,p.size,buffer);
! 	  else if (p.size < 4)
! 	    buffer.append(formatData.shortMonths[calendar.get(Calendar.MONTH)]);
! 	  else
! 	    buffer.append(formatData.months[calendar.get(Calendar.MONTH)]);
! 	  break;
! 	case DATE_FIELD:
! 	  withLeadingZeros(calendar.get(Calendar.DATE),p.size,buffer);
! 	  break;
! 	case HOUR_OF_DAY1_FIELD: // 1-24
! 	  withLeadingZeros(((calendar.get(Calendar.HOUR_OF_DAY)+23)%24)+1,p.size,buffer);
! 	  break;
! 	case HOUR_OF_DAY0_FIELD: // 0-23
! 	  withLeadingZeros(calendar.get(Calendar.HOUR_OF_DAY),p.size,buffer);
! 	  break;
! 	case MINUTE_FIELD:
! 	  withLeadingZeros(calendar.get(Calendar.MINUTE),p.size,buffer);
! 	  break;
! 	case SECOND_FIELD:
! 	  withLeadingZeros(calendar.get(Calendar.SECOND),p.size,buffer);
! 	  break;
! 	case MILLISECOND_FIELD:
! 	  withLeadingZeros(calendar.get(Calendar.MILLISECOND),p.size,buffer);
! 	  break;
! 	case DAY_OF_WEEK_FIELD:
! 	  if (p.size < 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:
! 	  withLeadingZeros(calendar.get(Calendar.DAY_OF_YEAR),p.size,buffer);
! 	  break;
! 	case DAY_OF_WEEK_IN_MONTH_FIELD:
! 	  withLeadingZeros(calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH),p.size,buffer);
! 	  break;
! 	case WEEK_OF_YEAR_FIELD:
! 	  withLeadingZeros(calendar.get(Calendar.WEEK_OF_YEAR),p.size,buffer);
! 	  break;
! 	case WEEK_OF_MONTH_FIELD:
! 	  withLeadingZeros(calendar.get(Calendar.WEEK_OF_MONTH),p.size,buffer);
! 	  break;
! 	case AM_PM_FIELD:
! 	  buffer.append(formatData.ampms[calendar.get(Calendar.AM_PM)]);
! 	  break;
! 	case HOUR1_FIELD: // 1-12
! 	  withLeadingZeros(((calendar.get(Calendar.HOUR)+11)%12)+1,p.size,buffer);
! 	  break;
! 	case HOUR0_FIELD: // 0-11
! 	  withLeadingZeros(calendar.get(Calendar.HOUR),p.size,buffer);
! 	  break;
! 	case TIMEZONE_FIELD:
! 	  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, p.size > 3 ? TimeZone.LONG : TimeZone.SHORT);
! 	  buffer.append(zoneID);
! 	  break;
! 	default:
! 	  throw new IllegalArgumentException("Illegal pattern character");
! 	}
! 	if (pos != null && p.field == pos.getField())
  	  {
! 	    pos.setBeginIndex(beginIndex);
! 	    pos.setEndIndex(buffer.length());
! 	  }
!       } else {
! 	buffer.append(o.toString());
        }
!     }
      return buffer;
    }
  
!   private void withLeadingZeros(int value, int length, StringBuffer buffer) 
    {
      String valStr = String.valueOf(value);
      for (length -= valStr.length(); length > 0; length--)
--- 653,830 ----
     * 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 = 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--)
*************** public class SimpleDateFormat extends Da
*** 521,527 ****
      buffer.append(valStr);
    }
  
!   private final boolean expect (String source, ParsePosition pos, char ch)
    {
      int x = pos.getIndex();
      boolean r = x < source.length() && source.charAt(x) == ch;
--- 832,838 ----
      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;
*************** public class SimpleDateFormat extends Da
*** 550,781 ****
      boolean saw_timezone = false;
      int quote_start = -1;
      boolean is2DigitYear = false;
!     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 first = fmt_index;
! 	while (++fmt_index < fmt_max && pattern.charAt(fmt_index) == ch)
! 	  ;
! 	int fmt_count = fmt_index - first;
! 
! 	// 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;
! 	String[] match = null;
! 	int offset = 0;
! 	boolean maybe2DigitYear = false;
! 	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;
! 	    match = (fmt_count <= 3
! 		     ? formatData.getShortWeekdays()
! 		     : formatData.getWeekdays());
! 	    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;
! 		match = (fmt_count <= 3
! 			 ? formatData.getShortMonths()
! 			 : formatData.getMonths());
  	      }
! 	    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;
! 	    break;
! 	  case 'H':
! 	    calendar_field = Calendar.HOUR_OF_DAY;
! 	    break;
! 	  case 'k':
! 	    calendar_field = Calendar.HOUR_OF_DAY;
! 	    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;
! 	    match = formatData.getAmPmStrings();
! 	    break;
! 	  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.DST_OFFSET;
! 	    String[][] zoneStrings = formatData.getZoneStrings();
! 	    int zoneCount = zoneStrings.length;
! 	    int index = pos.getIndex();
! 	    boolean found_zone = false;
! 	    for (int j = 0;  j < zoneCount;  j++)
  	      {
! 		String[] strings = zoneStrings[j];
! 		int k;
! 		for (k = 1; 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]);
! 		    calendar.set (Calendar.ZONE_OFFSET, tz.getRawOffset ());
! 		    offset = 0;
! 		    if (k > 2 && tz instanceof SimpleTimeZone)
  		      {
! 			SimpleTimeZone stz = (SimpleTimeZone) tz;
! 			offset = stz.getDSTSavings ();
  		      }
- 		    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 (match != null)
! 	  {
! 	    index = pos.getIndex();
! 	    int i;
! 	    for (i = offset; i < match.length; ++i)
  	      {
! 		if (dateStr.startsWith(match[i], index))
! 		  break;
  	      }
! 	    if (i == match.length)
  	      {
! 		pos.setErrorIndex(index);
! 		return null;
  	      }
! 	    pos.setIndex(index + match[i].length());
! 	    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;
! 	  }
  
! 	// 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 = defaultCentury + calendar.get(Calendar.YEAR);
! 	calendar.set(Calendar.YEAR, year);
! 	if (calendar.getTime().compareTo(defaultCenturyStart) < 0)
! 	  calendar.set(Calendar.YEAR, year + 100);      
!       }
! 
!     try
!       {
  	if (! saw_timezone)
  	  {
  	    // Use the real rules to determine whether or not this
--- 861,1137 ----
      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));
! 		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
*************** public class SimpleDateFormat extends Da
*** 790,795 ****
--- 1146,1214 ----
          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)
+   {
+     Pattern pattern =
+       Pattern.compile("(GMT)?([+-])([012])?([0-9]):?([0-9]{2})");
+     Matcher matcher = pattern.matcher(zoneString);
+     if (matcher.matches())
+       {
+ 	int sign = matcher.group(2).equals("+") ? 1 : -1;
+ 	int hour = (Integer.parseInt(matcher.group(3)) * 10)
+ 	  + Integer.parseInt(matcher.group(4));
+ 	int minutes = Integer.parseInt(matcher.group(5));
+ 
+ 	if (hour > 23)
+ 	  return null;
+ 
+ 	int offset = sign * ((hour * 60) + minutes) * 60000;
+ 	return new Integer(offset);
+       }
+     else if (zoneString.startsWith("GMT"))
+       {
+ 	return new Integer(0);
+       }
+     return null;
    }
  
    // Compute the start of the current century as defined by
*************** public class SimpleDateFormat extends Da
*** 800,803 ****
--- 1219,1237 ----
      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-3.4.3/libjava/java/text/StringCharacterIterator.java gcc-4.0.0/libjava/java/text/StringCharacterIterator.java
*** gcc-3.4.3/libjava/java/text/StringCharacterIterator.java	Tue Jan 22 22:40:37 2002
--- gcc-4.0.0/libjava/java/text/StringCharacterIterator.java	Thu Feb 17 07:48:41 2005
***************
*** 1,5 ****
  /* StringCharacterIterator.java -- Iterate over a character range in a string
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.text;
*** 46,52 ****
   * the index to be set. 
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Tom Tromey <tromey@cygnus.com>
   */
  public final class StringCharacterIterator implements CharacterIterator
  {
--- 46,52 ----
   * the index to be set. 
   *
   * @author Aaron M. Renn (arenn@urbanophile.com)
!  * @author Tom Tromey (tromey@cygnus.com)
   */
  public final class StringCharacterIterator implements CharacterIterator
  {
*************** public final class StringCharacterIterat
*** 314,323 ****
     * object.  This will be true if and only if the specified object:
     * <p>
     * <ul>
!    * <li>is not <code>null</code>.
!    * <li>is an instance of <code>StringCharacterIterator</code>
!    * <li>has the same text as this object
!    * <li>has the same beginning, ending, and current index as this object.
     * </ul>
     *
     * @param obj The object to test for equality against.
--- 314,323 ----
     * 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.
diff -Nrcpad gcc-3.4.3/libjava/java/util/AbstractCollection.java gcc-4.0.0/libjava/java/util/AbstractCollection.java
*** gcc-3.4.3/libjava/java/util/AbstractCollection.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/AbstractCollection.java	Thu Feb 17 07:48:42 2005
***************
*** 1,5 ****
  /* AbstractCollection.java -- Abstract implementation of most of Collection
!    Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.lang.reflect.Array;
*** 61,67 ****
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Collection
   * @see AbstractSet
   * @see AbstractList
--- 61,67 ----
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Collection
   * @see AbstractSet
   * @see AbstractList
*************** public abstract class AbstractCollection
*** 129,139 ****
     * @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 this collection does not support null,
!    *         or if the specified collection is null
!    * @throws ClassCastException if an object in c is of the wrong type
!    * @throws IllegalArgumentException if some aspect of an object in c prevents
!    *         it from being added
     * @see #add(Object)
     */
    public boolean addAll(Collection c)
--- 129,141 ----
     * @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)
*************** public abstract class AbstractCollection
*** 268,273 ****
--- 270,276 ----
     * @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)
*************** public abstract class AbstractCollection
*** 288,295 ****
--- 291,300 ----
     * @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();
*************** public abstract class AbstractCollection
*** 316,321 ****
--- 321,327 ----
     * @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)
*************** public abstract class AbstractCollection
*** 337,344 ****
--- 343,352 ----
     * @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();
diff -Nrcpad gcc-3.4.3/libjava/java/util/AbstractList.java gcc-4.0.0/libjava/java/util/AbstractList.java
*** gcc-3.4.3/libjava/java/util/AbstractList.java	Tue Jun 18 15:39:43 2002
--- gcc-4.0.0/libjava/java/util/AbstractList.java	Thu Feb 17 07:48:43 2005
***************
*** 1,5 ****
  /* AbstractList.java -- Abstract implementation of most of List
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 59,65 ****
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Collection
   * @see List
   * @see AbstractSequentialList
--- 59,65 ----
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Collection
   * @see List
   * @see AbstractSequentialList
*************** public abstract class AbstractList exten
*** 85,91 ****
     * <code>add(int, Object)</code> and <code>remove(int)</code> methods.
     * Otherwise, this field may be ignored.
     */
!   protected int modCount;
  
    /**
     * The main constructor, for use by subclasses.
--- 85,91 ----
     * <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.
*************** while (i.hasNext())
*** 308,325 ****
--- 308,350 ----
        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();
*************** while (i.hasNext())
*** 329,334 ****
--- 354,371 ----
          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();
*************** while (i.hasNext())
*** 405,428 ****
--- 442,499 ----
        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();
*************** while (i.hasNext())
*** 432,437 ****
--- 503,517 ----
          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();
*************** while (i.hasNext())
*** 441,458 ****
--- 521,567 ----
          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();
*************** while (i.hasNext())
*** 465,470 ****
--- 574,597 ----
          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();
*************** while (i.hasNext())
*** 473,478 ****
--- 600,619 ----
          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();
*************** while (i.hasNext())
*** 519,524 ****
--- 660,667 ----
     *
     * @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)
    {
*************** while (i.hasNext())
*** 608,934 ****
      return new SubList(this, fromIndex, toIndex);
    }
  
- } // class AbstractList
- 
- 
- /**
-  * 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>
-  */
- 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 the value is out of range
!    */
!   // 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 the value is out of range
!    */
!   // 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
!    */
!   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
!    */
!   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
!    */
!   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
!    */
!   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
!    */
!   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
!    */
!   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
!    */
!   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
!    */
!   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
!    */
!   public ListIterator listIterator(final int index)
!   {
!     checkMod();
!     checkBoundsInclusive(index);
  
!     return new ListIterator()
      {
!       private final ListIterator i = backingList.listIterator(index + offset);
!       private int position = index;
  
!       public boolean hasNext()
        {
!         checkMod();
!         return position < size;
!       }
  
!       public boolean hasPrevious()
!       {
!         checkMod();
!         return position > 0;
!       }
  
!       public Object next()
!       {
!         if (position == size)
!           throw new NoSuchElementException();
!         position++;
!         return i.next();
!       }
  
!       public Object previous()
!       {
!         if (position == 0)
!           throw new NoSuchElementException();
!         position--;
!         return i.previous();
!       }
  
!       public int nextIndex()
!       {
!         return i.nextIndex() - offset;
!       }
  
!       public int previousIndex()
!       {
!         return i.previousIndex() - offset;
!       }
  
!       public void remove()
!       {
!         i.remove();
!         size--;
!         position = nextIndex();
!         modCount = backingList.modCount;
!       }
  
!       public void set(Object o)
!       {
!         i.set(o);
!       }
  
-       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>
-  */
- 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
--- 751,1225 ----
      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-3.4.3/libjava/java/util/AbstractMap.java gcc-4.0.0/libjava/java/util/AbstractMap.java
*** gcc-3.4.3/libjava/java/util/AbstractMap.java	Sun Nov 10 22:06:49 2002
--- gcc-4.0.0/libjava/java/util/AbstractMap.java	Thu Feb 17 07:48:43 2005
***************
*** 1,5 ****
  /* AbstractMap.java -- Abstract implementation of most of Map
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 53,59 ****
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Map
   * @see Collection
   * @see HashMap
--- 53,59 ----
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Map
   * @see Collection
   * @see HashMap
*************** public abstract class AbstractMap implem
*** 92,97 ****
--- 92,112 ----
    }
  
    /**
+    * 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
*************** public abstract class AbstractMap implem
*** 153,160 ****
     * 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 <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
--- 168,176 ----
     * 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
*************** public abstract class AbstractMap implem
*** 171,191 ****
    }
  
    /**
-    * 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();
- 
-   /**
     * 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>
--- 187,192 ----
*************** public abstract class AbstractMap implem
*** 277,308 ****
--- 278,352 ----
      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();
*************** public abstract class AbstractMap implem
*** 343,353 ****
     *
     * @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)
     */
    public void putAll(Map m)
--- 387,399 ----
     *
     * @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)
*************** public abstract class AbstractMap implem
*** 372,378 ****
     * implementations override it for efficiency.
     *
     * @param key the key to remove
!    * @return the value the key mapped to, or null if not present
     * @throws UnsupportedOperationException if deletion is unsupported
     * @see Iterator#remove()
     */
--- 418,426 ----
     * 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 abstract class AbstractMap implem
*** 461,492 ****
--- 509,584 ----
      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();
*************** public abstract class AbstractMap implem
*** 530,538 ****
     * life much easier.
     *
     * @author Jon Zeppieri
!    * @author Eric Blake <ebb9@email.byu.edu>
     */
    // XXX - FIXME Use fully qualified implements as gcj 3.1 workaround.
    static class BasicMapEntry implements Map.Entry
    {
      /**
--- 622,631 ----
     * 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
    {
      /**
*************** public abstract class AbstractMap implem
*** 627,633 ****
       *
       * @param newVal the new value to store
       * @return the old value
!      * @throws NullPointerException if the map forbids null values
       */
      public Object setValue(Object newVal)
      {
--- 720,732 ----
       *
       * @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)
      {
diff -Nrcpad gcc-3.4.3/libjava/java/util/AbstractSequentialList.java gcc-4.0.0/libjava/java/util/AbstractSequentialList.java
*** gcc-3.4.3/libjava/java/util/AbstractSequentialList.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/AbstractSequentialList.java	Thu Feb 17 07:48:43 2005
***************
*** 1,5 ****
  /* AbstractSequentialList.java -- List implementation for sequential access
!    Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 61,67 ****
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Collection
   * @see List
   * @see AbstractList
--- 61,67 ----
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Collection
   * @see List
   * @see AbstractList
*************** public abstract class AbstractSequential
*** 105,111 ****
     * @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 void add(int index, Object o)
    {
--- 105,113 ----
     * @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)
    {
*************** public abstract class AbstractSequential
*** 137,142 ****
--- 139,146 ----
     * @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)
*************** public abstract class AbstractSequential
*** 214,219 ****
--- 218,225 ----
     *         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)
    {
diff -Nrcpad gcc-3.4.3/libjava/java/util/AbstractSet.java gcc-4.0.0/libjava/java/util/AbstractSet.java
*** gcc-3.4.3/libjava/java/util/AbstractSet.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/AbstractSet.java	Thu Feb 17 07:48:43 2005
***************
*** 1,5 ****
  /* AbstractSet.java -- Abstract implementation of most of Set
!    Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 48,54 ****
   * 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
--- 48,54 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/ArrayList.java gcc-4.0.0/libjava/java/util/ArrayList.java
*** gcc-3.4.3/libjava/java/util/ArrayList.java	Sun Nov  3 20:27:31 2002
--- gcc-4.0.0/libjava/java/util/ArrayList.java	Thu Feb 17 07:48:43 2005
***************
*** 1,6 ****
  /* ArrayList.java -- JDK1.2's answer to Vector; this is an array-backed
     implementation of the List interface
!    Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,49 ****
  
  package java.util;
  
- import java.lang.reflect.Array;
- import java.io.Serializable;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  
  /**
   * An array-backed implementation of the List interface.  This implements
--- 39,49 ----
  
  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
*************** import java.io.ObjectOutputStream;
*** 72,78 ****
   *
   * @author Jon A. Zeppieri
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Collection
   * @see List
   * @see LinkedList
--- 72,78 ----
   *
   * @author Jon A. Zeppieri
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Collection
   * @see List
   * @see LinkedList
*************** public class ArrayList extends AbstractL
*** 120,126 ****
    }
  
    /**
!    * Construct a new ArrayList with the default capcity (16).
     */
    public ArrayList()
    {
--- 120,126 ----
    }
  
    /**
!    * Construct a new ArrayList with the default capacity (16).
     */
    public ArrayList()
    {
*************** public class ArrayList extends AbstractL
*** 311,317 ****
    }
  
    /**
!    * Sets the element at the specified index.
     *
     * @param index the index at which the element is being set
     * @param e the element to be set
--- 311,318 ----
    }
  
    /**
!    * 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
*************** public class ArrayList extends AbstractL
*** 328,333 ****
--- 329,335 ----
  
    /**
     * 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 class ArrayList extends AbstractL
*** 344,349 ****
--- 346,352 ----
    /**
     * 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
*************** public class ArrayList extends AbstractL
*** 397,403 ****
    /**
     * 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.
     *
     * @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
--- 400,407 ----
    /**
     * 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
*************** public class ArrayList extends AbstractL
*** 410,416 ****
  
    /**
     * Add all elements in the supplied collection, inserting them beginning
!    * at the specified index.
     *
     * @param index the index at which the elements will be inserted
     * @param c the Collection containing the elements to be inserted
--- 414,421 ----
  
    /**
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/Arrays.java gcc-4.0.0/libjava/java/util/Arrays.java
*** gcc-3.4.3/libjava/java/util/Arrays.java	Wed Sep 10 18:11:05 2003
--- gcc-4.0.0/libjava/java/util/Arrays.java	Thu Feb 17 07:48:43 2005
***************
*** 1,5 ****
  /* Arrays.java -- Utility class with methods to operate on arrays
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** import java.lang.reflect.Array;
*** 58,64 ****
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Comparable
   * @see Comparator
   * @since 1.2
--- 59,65 ----
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Comparable
   * @see Comparator
   * @since 1.2
*************** public class Arrays
*** 934,940 ****
  
  
  // 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.
--- 935,941 ----
  
  
  // 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.
*************** public class Arrays
*** 968,973 ****
--- 969,976 ----
    {
      if (fromIndex > toIndex)
        throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
      qsort(a, fromIndex, toIndex - fromIndex);
    }
  
*************** public class Arrays
*** 1018,1024 ****
    /**
     * Performs a recursive modified quicksort.
     *
!    * @param a the array to sort
     * @param from the start index (inclusive)
     * @param count the number of elements to sort
     */
--- 1021,1027 ----
    /**
     * 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
     */
*************** public class Arrays
*** 1028,1034 ****
      if (count <= 7)
        {
          for (int i = from + 1; i < from + count; i++)
!           for (int j = i; j > 0 && array[j - 1] > array[j]; j--)
              swap(j, j - 1, array);
          return;
        }
--- 1031,1037 ----
      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;
        }
*************** public class Arrays
*** 1130,1135 ****
--- 1133,1140 ----
    {
      if (fromIndex > toIndex)
        throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
      qsort(a, fromIndex, toIndex - fromIndex);
    }
  
*************** public class Arrays
*** 1180,1186 ****
    /**
     * Performs a recursive modified quicksort.
     *
!    * @param a the array to sort
     * @param from the start index (inclusive)
     * @param count the number of elements to sort
     */
--- 1185,1191 ----
    /**
     * 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
     */
*************** public class Arrays
*** 1190,1196 ****
      if (count <= 7)
        {
          for (int i = from + 1; i < from + count; i++)
!           for (int j = i; j > 0 && array[j - 1] > array[j]; j--)
              swap(j, j - 1, array);
          return;
        }
--- 1195,1201 ----
      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;
        }
*************** public class Arrays
*** 1292,1297 ****
--- 1297,1304 ----
    {
      if (fromIndex > toIndex)
        throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
      qsort(a, fromIndex, toIndex - fromIndex);
    }
  
*************** public class Arrays
*** 1342,1348 ****
    /**
     * Performs a recursive modified quicksort.
     *
!    * @param a the array to sort
     * @param from the start index (inclusive)
     * @param count the number of elements to sort
     */
--- 1349,1355 ----
    /**
     * 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
     */
*************** public class Arrays
*** 1352,1359 ****
      if (count <= 7)
        {
          for (int i = from + 1; i < from + count; i++)
!           for (int j = i; j > 0 && array[j - 1] > array[j]; j--)
!             swap(j, j - 1, array);
          return;
        }
  
--- 1359,1366 ----
      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;
        }
  
*************** public class Arrays
*** 1454,1459 ****
--- 1461,1468 ----
    {
      if (fromIndex > toIndex)
        throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
      qsort(a, fromIndex, toIndex - fromIndex);
    }
  
*************** public class Arrays
*** 1516,1522 ****
    /**
     * Performs a recursive modified quicksort.
     *
!    * @param a the array to sort
     * @param from the start index (inclusive)
     * @param count the number of elements to sort
     */
--- 1525,1531 ----
    /**
     * 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
     */
*************** public class Arrays
*** 1526,1532 ****
      if (count <= 7)
        {
          for (int i = from + 1; i < from + count; i++)
!           for (int j = i; j > 0 && array[j - 1] > array[j]; j--)
              swap(j, j - 1, array);
          return;
        }
--- 1535,1541 ----
      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;
        }
*************** public class Arrays
*** 1628,1633 ****
--- 1637,1644 ----
    {
      if (fromIndex > toIndex)
        throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
      qsort(a, fromIndex, toIndex - fromIndex);
    }
  
*************** public class Arrays
*** 1690,1696 ****
    /**
     * Performs a recursive modified quicksort.
     *
!    * @param a the array to sort
     * @param from the start index (inclusive)
     * @param count the number of elements to sort
     */
--- 1701,1707 ----
    /**
     * 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
     */
*************** public class Arrays
*** 1700,1706 ****
      if (count <= 7)
        {
          for (int i = from + 1; i < from + count; i++)
!           for (int j = i; j > 0 && array[j - 1] > array[j]; j--)
              swap(j, j - 1, array);
          return;
        }
--- 1711,1717 ----
      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;
        }
*************** public class Arrays
*** 1802,1807 ****
--- 1813,1820 ----
    {
      if (fromIndex > toIndex)
        throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
      qsort(a, fromIndex, toIndex - fromIndex);
    }
  
*************** public class Arrays
*** 1854,1860 ****
    /**
     * Performs a recursive modified quicksort.
     *
!    * @param a the array to sort
     * @param from the start index (inclusive)
     * @param count the number of elements to sort
     */
--- 1867,1873 ----
    /**
     * 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
     */
*************** public class Arrays
*** 1865,1871 ****
        {
          for (int i = from + 1; i < from + count; i++)
            for (int j = i;
!                j > 0 && Float.compare(array[j - 1], array[j]) > 0;
                 j--)
              {
                swap(j, j - 1, array);
--- 1878,1884 ----
        {
          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);
*************** public class Arrays
*** 1970,1975 ****
--- 1983,1990 ----
    {
      if (fromIndex > toIndex)
        throw new IllegalArgumentException();
+     if (fromIndex < 0)
+       throw new ArrayIndexOutOfBoundsException();
      qsort(a, fromIndex, toIndex - fromIndex);
    }
  
*************** public class Arrays
*** 2022,2028 ****
    /**
     * Performs a recursive modified quicksort.
     *
!    * @param a the array to sort
     * @param from the start index (inclusive)
     * @param count the number of elements to sort
     */
--- 2037,2043 ----
    /**
     * 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
     */
*************** public class Arrays
*** 2033,2039 ****
        {
          for (int i = from + 1; i < from + count; i++)
            for (int j = i;
!                j > 0 && Double.compare(array[j - 1], array[j]) > 0;
                 j--)
              {
                swap(j, j - 1, array);
--- 2048,2054 ----
        {
          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);
*************** public class Arrays
*** 2203,2208 ****
--- 2218,2225 ----
      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
*************** public class Arrays
*** 2341,2347 ****
     * 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
--- 2358,2364 ----
     * 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
*************** public class Arrays
*** 2374,2389 ****
--- 2391,2426 ----
        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];
*************** public class Arrays
*** 2391,2424 ****
        return old;
      }
  
      public boolean contains(Object o)
      {
        return lastIndexOf(o) >= 0;
      }
  
      public int indexOf(Object o)
      {
        int size = a.length;
        for (int i = 0; i < size; i++)
!         if (this.equals(o, a[i]))
            return i;
        return -1;
      }
  
      public int lastIndexOf(Object o)
      {
        int i = a.length;
        while (--i >= 0)
!         if (this.equals(o, a[i]))
            return i;
        return -1;
      }
  
      public Object[] toArray()
      {
        return (Object[]) a.clone();
      }
  
      public Object[] toArray(Object[] array)
      {
        int size = a.length;
--- 2428,2499 ----
        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;
diff -Nrcpad gcc-3.4.3/libjava/java/util/BitSet.java gcc-4.0.0/libjava/java/util/BitSet.java
*** gcc-3.4.3/libjava/java/util/BitSet.java	Sun Jun 16 21:15:42 2002
--- gcc-4.0.0/libjava/java/util/BitSet.java	Thu Feb 17 07:48:43 2005
***************
*** 1,5 ****
  /* BitSet.java -- A vector of bits.
!    Copyright (C) 1998, 1999, 2000, 2001  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 61,68 ****
   * 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
--- 61,68 ----
   * 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
*************** public class BitSet implements Cloneable
*** 133,139 ****
     * Performs the logical AND operation on this bit set and the
     * complement of the given <code>set</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.
     *
     * @param set the second bit set
     * @throws NullPointerException if set is null
--- 133,140 ----
     * Performs the logical AND operation on this bit set and the
     * complement of the given <code>set</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 set the second bit set
     * @throws NullPointerException if set is null
*************** public class BitSet implements Cloneable
*** 210,216 ****
     *
     * @param from the start range (inclusive)
     * @param to the end range (exclusive)
!    * @throws IndexOutOfBoundsException if from &lt; 0 || from &gt; to
     * @since 1.4
     */
    public void clear(int from, int to)
--- 211,218 ----
     *
     * @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)
*************** public class BitSet implements Cloneable
*** 304,310 ****
     *
     * @param from the low index (inclusive)
     * @param to the high index (exclusive)
!    * @throws IndexOutOfBoundsException if from &gt; to || from &lt; 0
     * @since 1.4
     */
    public void flip(int from, int to)
--- 306,313 ----
     *
     * @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)
*************** public class BitSet implements Cloneable
*** 352,358 ****
     *
     * @param from the low index (inclusive)
     * @param to the high index (exclusive)
!    * @throws IndexOutOfBoundsException if from &gt; to || from &lt; 0
     * @since 1.4
     */
    public BitSet get(int from, int to)
--- 355,362 ----
     *
     * @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)
*************** public class BitSet implements Cloneable
*** 618,624 ****
     *
     * @param from the start range (inclusive)
     * @param to the end range (exclusive)
!    * @throws IndexOutOfBoundsException if from &lt; 0 || from &gt; to
     * @since 1.4
     */
    public void set(int from, int to)
--- 622,629 ----
     *
     * @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)
*************** public class BitSet implements Cloneable
*** 649,655 ****
     * @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
     * @since 1.4
     */
    public void set(int from, int to, boolean value)
--- 654,661 ----
     * @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)
*************** public class BitSet implements Cloneable
*** 726,732 ****
     *
     * @param lastElt the size needed for the bits array
     */
!   private final void ensure(int lastElt)
    {
      if (lastElt >= bits.length)
        {
--- 732,738 ----
     *
     * @param lastElt the size needed for the bits array
     */
!   private void ensure(int lastElt)
    {
      if (lastElt >= bits.length)
        {
diff -Nrcpad gcc-3.4.3/libjava/java/util/Calendar.java gcc-4.0.0/libjava/java/util/Calendar.java
*** gcc-3.4.3/libjava/java/util/Calendar.java	Tue Dec  9 16:17:01 2003
--- gcc-4.0.0/libjava/java/util/Calendar.java	Wed Mar 23 21:36:23 2005
***************
*** 1,5 ****
! /* java.util.Calendar
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Calendar.java --
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,48 ****
  
  package java.util;
  
- import java.lang.reflect.InvocationTargetException;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  
  /**
   * This class is an abstract base class for Calendars, which can be
--- 38,49 ----
  
  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
*************** import java.io.Serializable;
*** 50,56 ****
   * 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
--- 51,57 ----
   * 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
*************** import java.io.Serializable;
*** 77,89 ****
   * 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>
   *
--- 78,90 ----
   * 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>
   *
*************** day_of_week + week_of_year</pre>
*** 91,97 ****
   *
   * 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
--- 92,98 ----
   *
   * 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
*************** day_of_week + week_of_year</pre>
*** 100,106 ****
   * @see Date
   * @see GregorianCalendar
   * @see TimeZone
!  * @see java.text.DateFormat 
   */
  public abstract class Calendar implements Serializable, Cloneable
  {
--- 101,107 ----
   * @see Date
   * @see GregorianCalendar
   * @see TimeZone
!  * @see java.text.DateFormat
   */
  public abstract class Calendar implements Serializable, Cloneable
  {
*************** public abstract class Calendar implement
*** 108,150 ****
--- 109,160 ----
     * 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
*************** public abstract class Calendar implement
*** 152,193 ****
     * 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.
     */
--- 162,212 ----
     * 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 abstract class Calendar implement
*** 197,222 ****
--- 216,247 ----
     * 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 abstract class Calendar implement
*** 226,275 ****
--- 251,312 ----
     * 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 abstract class Calendar implement
*** 280,285 ****
--- 317,323 ----
     * Useful constant for 12-hour clock.
     */
    public static final int AM = 0;
+ 
    /**
     * Useful constant for 12-hour clock.
     */
*************** public abstract class Calendar implement
*** 291,311 ****
--- 329,353 ----
     * @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.
*************** public abstract class Calendar implement
*** 331,337 ****
  
    /**
     * Sets what the first day of week is.  This is used for
!    * WEEK_OF_MONTH and WEEK_OF_YEAR fields. 
     * @serial
     */
    private int firstDayOfWeek;
--- 373,379 ----
  
    /**
     * Sets what the first day of week is.  This is used for
!    * WEEK_OF_MONTH and WEEK_OF_YEAR fields.
     * @serial
     */
    private int firstDayOfWeek;
*************** public abstract class Calendar implement
*** 346,358 ****
    private int minimalDaysInFirstWeek;
  
    /**
!    * The version of the serialized data on the stream. 
     * <dl><dt>0 or not present</dt>
     * <dd> JDK 1.1.5 or later.</dd>
!    * <dl><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>
     * @since JDK1.1.6
     * @serial
     */
--- 388,407 ----
    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
     */
*************** public abstract class Calendar implement
*** 370,382 ****
    private static final String bundleName = "gnu.java.locale.Calendar";
  
    /**
!    * 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);
    }
  
    /**
--- 419,432 ----
    private static final String bundleName = "gnu.java.locale.Calendar";
  
    /**
!    * 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());
    }
  
    /**
*************** public abstract class Calendar implement
*** 402,409 ****
      ResourceBundle rb = getBundle(locale);
  
      firstDayOfWeek = ((Integer) rb.getObject("firstDayOfWeek")).intValue();
!     minimalDaysInFirstWeek =
!       ((Integer) rb.getObject("minimalDaysInFirstWeek")).intValue();
    }
  
    /**
--- 452,460 ----
      ResourceBundle rb = getBundle(locale);
  
      firstDayOfWeek = ((Integer) rb.getObject("firstDayOfWeek")).intValue();
!     minimalDaysInFirstWeek = ((Integer) rb.getObject("minimalDaysInFirstWeek"))
!                              .intValue();
!     clear();
    }
  
    /**
*************** public abstract class Calendar implement
*** 436,441 ****
--- 487,504 ----
    }
  
    /**
+    * 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.
*************** public abstract class Calendar implement
*** 443,471 ****
     */
    public static synchronized Calendar getInstance(TimeZone zone, Locale locale)
    {
!     String calendarClassName = null;
!     ResourceBundle rb = getBundle(locale);
!     calendarClassName = rb.getString("calendarClass");
!     if (calendarClassName != null)
        {
! 	try
  	  {
! 	    Class calendarClass = Class.forName(calendarClassName);
! 	    if (Calendar.class.isAssignableFrom(calendarClass))
  	      {
! 		return (Calendar) calendarClass.getConstructor(
! 		  new Class[] { TimeZone.class, Locale.class}
! 		).newInstance(new Object[] {zone, locale} );
  	      }
  	  }
! 	catch (ClassNotFoundException ex) {}
! 	catch (IllegalAccessException ex) {}
! 	catch (NoSuchMethodException ex) {}
! 	catch (InstantiationException ex) {}
! 	catch (InvocationTargetException ex) {}
! 	// XXX should we ignore these errors or throw an exception ?
        }
!     return new GregorianCalendar(zone, locale);
    }
  
    /**
--- 506,563 ----
     */
    public static synchronized Calendar getInstance(TimeZone zone, Locale locale)
    {
!     Class calendarClass = (Class) cache.get(locale);
!     Throwable exception = null;
! 
!     try
        {
! 	if (calendarClass == null)
  	  {
! 	    ResourceBundle rb = getBundle(locale);
! 	    String calendarClassName = rb.getString("calendarClass");
! 
! 	    if (calendarClassName != 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);
    }
  
    /**
*************** public abstract class Calendar implement
*** 489,495 ****
     * 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();
  
--- 581,587 ----
     * 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();
  
*************** public abstract class Calendar implement
*** 500,506 ****
     */
    public final Date getTime()
    {
!     if (!isTimeSet)
        computeTime();
      return new Date(time);
    }
--- 592,598 ----
     */
    public final Date getTime()
    {
!     if (! isTimeSet)
        computeTime();
      return new Date(time);
    }
*************** public abstract class Calendar implement
*** 521,527 ****
     */
    public long getTimeInMillis()
    {
!     if (!isTimeSet)
        computeTime();
      return time;
    }
--- 613,619 ----
     */
    public long getTimeInMillis()
    {
!     if (! isTimeSet)
        computeTime();
      return time;
    }
*************** public abstract class Calendar implement
*** 534,542 ****
     */
    public void setTimeInMillis(long time)
    {
      this.time = time;
      isTimeSet = true;
-     computeFields();
    }
  
    /**
--- 626,634 ----
     */
    public void setTimeInMillis(long time)
    {
+     clear();
      this.time = time;
      isTimeSet = true;
    }
  
    /**
*************** public abstract class Calendar implement
*** 544,567 ****
     * if they are invalid.
     * @param field the time field. One of the time field constants.
     * @return the value of the specified field
!    *
     * @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.
     */
    protected final int internalGet(int field)
    {
--- 636,664 ----
     * 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)
    {
*************** public abstract class Calendar implement
*** 573,598 ****
     * the time in milliseconds.
     * @param field the time field. One of the time field constants
     * @param value the value to be set.
!    *
     * @specnote Not final since JDK 1.4
     */
    public void set(int field, int value)
    {
      isTimeSet = false;
      fields[field] = value;
      isSet[field] = true;
      switch (field)
        {
!       case YEAR:
!       case MONTH:
!       case DATE:
  	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;
  	break;
        case AM_PM:
  	isSet[HOUR_OF_DAY] = false;
  	break;
        case HOUR_OF_DAY:
--- 670,754 ----
     * 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:
*************** public abstract class Calendar implement
*** 600,608 ****
--- 756,771 ----
  	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;
    }
  
    /**
*************** public abstract class Calendar implement
*** 623,628 ****
--- 786,795 ----
      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.
    }
  
    /**
*************** public abstract class Calendar implement
*** 652,659 ****
     * @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;
--- 819,826 ----
     * @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;
*************** public abstract class Calendar implement
*** 667,694 ****
    {
      isTimeSet = false;
      areFieldsSet = false;
      for (int i = 0; i < FIELD_COUNT; i++)
!       {
! 	isSet[i] = false;
! 	fields[i] = 0;
!       }
    }
  
    /**
     * Clears the values of the specified time field.
     * @param field the time field. One of the time field constants.
     */
    public final void clear(int field)
    {
      isTimeSet = false;
      areFieldsSet = false;
      isSet[field] = false;
!     fields[field] = 0;
    }
  
    /**
     * Determines if the specified field has a valid value.
     * @return true if the specified field has a value.
     */
    public final boolean isSet(int field)
    {
--- 834,876 ----
    {
      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)
    {
*************** public abstract class Calendar implement
*** 697,714 ****
  
    /**
     * Fills any unset fields in the time field list
!    * @return true if the specified field has a value.  
     */
    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).
--- 879,896 ----
  
    /**
     * Fills any unset fields in the time field list
!    * @return true if the specified field has a value.
     */
    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 abstract class Calendar implement
*** 716,727 ****
    public boolean equals(Object o)
    {
      return (o instanceof Calendar)
!       && getTimeInMillis() == ((Calendar) o).getTimeInMillis();
    }
  
    /**
     * Returns a hash code for this calendar.
!    * @return a hash code, which fullfits the general contract of 
     * <code>hashCode()</code>
     */
    public int hashCode()
--- 898,909 ----
    public boolean equals(Object o)
    {
      return (o instanceof Calendar)
!            && getTimeInMillis() == ((Calendar) o).getTimeInMillis();
    }
  
    /**
     * Returns a hash code for this calendar.
!    * @return a hash code, which fullfits the general contract of
     * <code>hashCode()</code>
     */
    public int hashCode()
*************** public abstract class Calendar implement
*** 731,737 ****
    }
  
    /**
!    * 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.
--- 913,919 ----
    }
  
    /**
!    * 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.
*************** public abstract class Calendar implement
*** 744,750 ****
    }
  
    /**
!    * 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.
--- 926,932 ----
    }
  
    /**
!    * 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.
*************** public abstract class Calendar implement
*** 762,781 ****
     * 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.
     */
    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.
     */
    public abstract void roll(int field, boolean up);
  
--- 944,969 ----
     * 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);
  
*************** public abstract class Calendar implement
*** 788,794 ****
     *
     * @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.  
     * @since JDK1.2
     */
    public void roll(int field, int amount)
--- 976,985 ----
     *
     * @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)
*************** public abstract class Calendar implement
*** 805,811 ****
        }
    }
  
- 
    /**
     * Sets the time zone to the specified value.
     * @param zone the new time zone
--- 996,1001 ----
*************** public abstract class Calendar implement
*** 849,855 ****
  
    /**
     * 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)
--- 1039,1045 ----
  
    /**
     * 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)
*************** public abstract class Calendar implement
*** 859,865 ****
  
    /**
     * 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()
--- 1049,1055 ----
  
    /**
     * 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()
*************** public abstract class Calendar implement
*** 903,909 ****
     */
    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.
--- 1093,1098 ----
*************** public abstract class Calendar implement
*** 915,921 ****
     * 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);
  
--- 1104,1110 ----
     * 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);
  
*************** public abstract class Calendar implement
*** 924,943 ****
     * 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.
     * @since jdk1.2
     */
!   // FIXME: XXX: Not abstract in JDK 1.2.
!   public abstract int getActualMinimum(int field);
  
    /**
     * 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.  
     * @since jdk1.2
     */
!   // FIXME: XXX: Not abstract in JDK 1.2.
!   public abstract int getActualMaximum(int field);
  
    /**
     * Return a clone of this object.
--- 1113,1162 ----
     * 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 abstract class Calendar implement
*** 948,954 ****
        {
  	Calendar cal = (Calendar) super.clone();
  	cal.fields = (int[]) fields.clone();
! 	cal.isSet = (boolean[])isSet.clone();
  	return cal;
        }
      catch (CloneNotSupportedException ex)
--- 1167,1173 ----
        {
  	Calendar cal = (Calendar) super.clone();
  	cal.fields = (int[]) fields.clone();
! 	cal.isSet = (boolean[]) isSet.clone();
  	return cal;
        }
      catch (CloneNotSupportedException ex)
*************** public abstract class Calendar implement
*** 957,972 ****
        }
    }
  
!   private final static 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
--- 1176,1194 ----
        }
    }
  
!   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
*************** public abstract class Calendar implement
*** 1009,1015 ****
     * says, that it could be omitted.  */
    private void writeObject(ObjectOutputStream stream) throws IOException
    {
!     if (!isTimeSet)
        computeTime();
      stream.defaultWriteObject();
    }
--- 1231,1237 ----
     * says, that it could be omitted.  */
    private void writeObject(ObjectOutputStream stream) throws IOException
    {
!     if (! isTimeSet)
        computeTime();
      stream.defaultWriteObject();
    }
*************** public abstract class Calendar implement
*** 1021,1027 ****
      throws IOException, ClassNotFoundException
    {
      stream.defaultReadObject();
!     if (!isTimeSet)
        computeTime();
  
      if (serialVersionOnStream > 1)
--- 1243,1249 ----
      throws IOException, ClassNotFoundException
    {
      stream.defaultReadObject();
!     if (! isTimeSet)
        computeTime();
  
      if (serialVersionOnStream > 1)
*************** public abstract class Calendar implement
*** 1030,1036 ****
  	// 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;
--- 1252,1257 ----
diff -Nrcpad gcc-3.4.3/libjava/java/util/Collection.java gcc-4.0.0/libjava/java/util/Collection.java
*** gcc-3.4.3/libjava/java/util/Collection.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/Collection.java	Thu Feb 17 07:48:43 2005
***************
*** 1,5 ****
  /* Collection.java -- Interface that represents a collection of objects
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 66,72 ****
   * 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
--- 66,72 ----
   * 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
*************** public interface Collection
*** 94,99 ****
--- 94,101 ----
     *   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 interface Collection
*** 108,113 ****
--- 110,118 ----
     *   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.
     */
*************** public interface Collection
*** 129,134 ****
--- 134,143 ----
     * @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);
  
*************** public interface Collection
*** 137,142 ****
--- 146,156 ----
     *
     * @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);
  
*************** public interface Collection
*** 198,203 ****
--- 212,221 ----
     *   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);
  
*************** public interface Collection
*** 205,213 ****
--- 223,237 ----
     * 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);
  
*************** public interface Collection
*** 215,223 ****
--- 239,253 ----
     * 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);
  
diff -Nrcpad gcc-3.4.3/libjava/java/util/Collections.java gcc-4.0.0/libjava/java/util/Collections.java
*** gcc-3.4.3/libjava/java/util/Collections.java	Tue Jun 18 15:39:49 2002
--- gcc-4.0.0/libjava/java/util/Collections.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Collections.java -- Utility class with methods to operate on collections
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 54,66 ****
   * 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
--- 55,67 ----
   * 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
*************** public class Collections
*** 74,80 ****
    /**
     * Constant used to decide cutoff for when a non-RandomAccess list should
     * be treated as sequential-access. Basically, quadratic behavior is
!    * acceptible 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;
--- 75,81 ----
    /**
     * 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;
*************** public class Collections
*** 87,93 ****
     * and exceeds a large (unspecified) size should be sequential.
     *
     * @param l the list to check
!    * @return true if it should be treated as sequential-access
     */
    private static boolean isSequential(List l)
    {
--- 88,94 ----
     * 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)
    {
*************** public class Collections
*** 111,117 ****
     * 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
--- 112,118 ----
     * 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
*************** public class Collections
*** 130,135 ****
--- 131,137 ----
  
      /**
       * The size: always 0!
+      * @return 0.
       */
      public int size()
      {
*************** public class Collections
*** 138,143 ****
--- 140,146 ----
  
      /**
       * 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()
*************** public class Collections
*** 149,154 ****
--- 152,159 ----
      // 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)
      {
*************** public class Collections
*** 157,162 ****
--- 162,170 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 165,170 ****
--- 173,180 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 173,178 ****
--- 183,189 ----
  
      /**
       * The hashcode is always 0.
+      * @return 0.
       */
      public int hashCode()
      {
*************** public class Collections
*** 180,186 ****
      }
  
      /**
!      * Always succeeds with false result.
       */
      public boolean remove(Object o)
      {
--- 191,199 ----
      }
  
      /**
!      * Always succeeds with a <code>false</code> result.
!      * @param o The object to remove.
!      * @return <code>false</code>.
       */
      public boolean remove(Object o)
      {
*************** public class Collections
*** 188,194 ****
      }
  
      /**
!      * Always succeeds with false result.
       */
      public boolean removeAll(Collection c)
      {
--- 201,210 ----
      }
  
      /**
!      * 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)
      {
*************** public class Collections
*** 196,202 ****
      }
  
      /**
!      * Always succeeds with false result.
       */
      public boolean retainAll(Collection c)
      {
--- 212,221 ----
      }
  
      /**
!      * 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)
      {
*************** public class Collections
*** 205,210 ****
--- 224,230 ----
  
      /**
       * The array is always empty.
+      * @return A new array with a size of 0.
       */
      public Object[] toArray()
      {
*************** public class Collections
*** 213,218 ****
--- 233,241 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 223,228 ****
--- 246,253 ----
  
      /**
       * The string never changes.
+      *
+      * @return the string "[]".
       */
      public String toString()
      {
*************** public class Collections
*** 241,247 ****
     * 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
--- 266,272 ----
     * 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
*************** public class Collections
*** 260,265 ****
--- 285,291 ----
  
      /**
       * The size is always 0.
+      * @return 0.
       */
      public int size()
      {
*************** public class Collections
*** 267,273 ****
      }
  
      /**
!      * No matter the index, it is out of bounds.
       */
      public Object get(int index)
      {
--- 293,305 ----
      }
  
      /**
!      * 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)
      {
*************** public class Collections
*** 278,283 ****
--- 310,317 ----
      // 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)
      {
*************** public class Collections
*** 286,291 ****
--- 320,328 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 293,299 ****
      }
  
      /**
!      * Equal only if the other set is empty.
       */
      public boolean equals(Object o)
      {
--- 330,339 ----
      }
  
      /**
!      * 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)
      {
*************** public class Collections
*** 302,307 ****
--- 342,348 ----
  
      /**
       * The hashcode is always 1.
+      * @return 1.
       */
      public int hashCode()
      {
*************** public class Collections
*** 310,315 ****
--- 351,358 ----
  
      /**
       * Returns -1.
+      * @param o The object to search for.
+      * @return -1.
       */
      public int indexOf(Object o)
      {
*************** public class Collections
*** 318,323 ****
--- 361,368 ----
  
      /**
       * Returns -1.
+      * @param o The object to search for.
+      * @return -1.
       */
      public int lastIndexOf(Object o)
      {
*************** public class Collections
*** 325,331 ****
      }
  
      /**
!      * Always succeeds with false result.
       */
      public boolean remove(Object o)
      {
--- 370,378 ----
      }
  
      /**
!      * Always succeeds with <code>false</code> result.
!      * @param o The object to remove.
!      * @return -1.
       */
      public boolean remove(Object o)
      {
*************** public class Collections
*** 333,339 ****
      }
  
      /**
!      * Always succeeds with false result.
       */
      public boolean removeAll(Collection c)
      {
--- 380,389 ----
      }
  
      /**
!      * 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)
      {
*************** public class Collections
*** 341,347 ****
      }
  
      /**
!      * Always succeeds with false result.
       */
      public boolean retainAll(Collection c)
      {
--- 391,400 ----
      }
  
      /**
!      * 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)
      {
*************** public class Collections
*** 350,355 ****
--- 403,409 ----
  
      /**
       * The array is always empty.
+      * @return A new array with a size of 0.
       */
      public Object[] toArray()
      {
*************** public class Collections
*** 358,363 ****
--- 412,420 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 368,373 ****
--- 425,432 ----
  
      /**
       * The string never changes.
+      *
+      * @return the string "[]".
       */
      public String toString()
      {
*************** public class Collections
*** 385,391 ****
     * 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
--- 444,450 ----
     * 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
*************** public class Collections
*** 404,409 ****
--- 463,469 ----
  
      /**
       * There are no entries.
+      * @return The empty set.
       */
      public Set entrySet()
      {
*************** public class Collections
*** 414,419 ****
--- 474,481 ----
      // 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)
      {
*************** public class Collections
*** 422,427 ****
--- 484,491 ----
  
      /**
       * No entries!
+      * @param value The value to search for.
+      * @return <code>false</code>.
       */
      public boolean containsValue(Object value)
      {
*************** public class Collections
*** 430,435 ****
--- 494,502 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 438,443 ****
--- 505,512 ----
  
      /**
       * No mappings, so this returns null.
+      * @param o The key of the object to retrieve.
+      * @return null. 
       */
      public Object get(Object o)
      {
*************** public class Collections
*** 446,451 ****
--- 515,521 ----
  
      /**
       * The hashcode is always 0.
+      * @return 0.
       */
      public int hashCode()
      {
*************** public class Collections
*** 454,459 ****
--- 524,530 ----
  
      /**
       * No entries.
+      * @return The empty set.
       */
      public Set keySet()
      {
*************** public class Collections
*** 462,467 ****
--- 533,540 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 470,475 ****
--- 543,549 ----
  
      /**
       * Size is always 0.
+      * @return 0.
       */
      public int size()
      {
*************** public class Collections
*** 479,484 ****
--- 553,559 ----
      /**
       * 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()
      {
*************** public class Collections
*** 487,492 ****
--- 562,569 ----
  
      /**
       * The string never changes.
+      *
+      * @return the string "[]".
       */
      public String toString()
      {
*************** public class Collections
*** 574,587 ****
        {
  	ListIterator itr = l.listIterator();
          int i = 0;
          while (low <= hi)
            {
              pos = (low + hi) >> 1;
              if (i < pos)
!               for ( ; i != pos; i++, itr.next());
              else
!               for ( ; i != pos; i--, itr.previous());
! 	    final int d = compare(key, itr.next(), c);
  	    if (d == 0)
                return pos;
  	    else if (d < 0)
--- 651,676 ----
        {
  	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(key, o, c);
  	    if (d == 0)
                return pos;
  	    else if (d < 0)
*************** public class Collections
*** 651,660 ****
--- 740,763 ----
      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();
*************** public class Collections
*** 855,861 ****
     * 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
--- 958,964 ----
     * 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
*************** public class Collections
*** 894,899 ****
--- 997,1003 ----
  
      /**
       * The size is fixed.
+      * @return The size of the list.
       */
      public int size()
      {
*************** public class Collections
*** 902,907 ****
--- 1006,1014 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 914,919 ****
--- 1021,1028 ----
      // 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)
      {
*************** public class Collections
*** 922,927 ****
--- 1031,1038 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 930,935 ****
--- 1041,1049 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 938,943 ****
--- 1052,1062 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 948,953 ****
--- 1067,1074 ----
  
      /**
       * The array is easy.
+      * @return An array of size n filled with copies of
+      *         the element used by this list.
       */
      public Object[] toArray()
      {
*************** public class Collections
*** 958,963 ****
--- 1079,1085 ----
  
      /**
       * The string is easy to generate.
+      * @return A string representation of the list.
       */
      public String toString()
      {
*************** public class Collections
*** 977,988 ****
     * @param list the list to iterate over
     * @param oldval the element to replace
     * @param newval the new value for the element
!    * @return true if a replacement occurred
     * @throws UnsupportedOperationException if the list iterator does not allow
     *         for the set operation
!    * @throws ClassCastException newval is of a type which cannot be added
     *         to the list
!    * @throws IllegalArgumentException some other aspect of newval stops
     *         it being added to the list
     * @since 1.4
     */
--- 1099,1110 ----
     * @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 class Collections
*** 1041,1053 ****
    /**
     * The object for {@link #reverseOrder()}.
     */
!   static private 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
--- 1163,1175 ----
    /**
     * 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
*************** public class Collections
*** 1055,1061 ****
      /**
       * Compatible with JDK 1.4.
       */
!     static private final long serialVersionUID = 7207038068494060240L;
  
      /**
       * A private constructor adds overhead.
--- 1177,1183 ----
      /**
       * Compatible with JDK 1.4.
       */
!     private static final long serialVersionUID = 7207038068494060240L;
  
      /**
       * A private constructor adds overhead.
*************** public class Collections
*** 1110,1115 ****
--- 1232,1239 ----
    public static void rotate(List list, int distance)
    {
      int size = list.size();
+     if (size == 0)
+       return;
      distance %= size;
      if (distance == 0)
        return;
*************** public class Collections
*** 1260,1266 ****
     * 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
--- 1384,1390 ----
     * 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
*************** public class Collections
*** 1288,1293 ****
--- 1412,1418 ----
  
      /**
       * The size: always 1!
+      * @return 1.
       */
      public int size()
      {
*************** public class Collections
*** 1301,1313 ****
--- 1426,1455 ----
      {
        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)
*************** public class Collections
*** 1319,1324 ****
--- 1461,1475 ----
              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();
*************** public class Collections
*** 1330,1335 ****
--- 1481,1489 ----
      // 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)
      {
*************** public class Collections
*** 1338,1343 ****
--- 1492,1501 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 1351,1356 ****
--- 1509,1516 ----
  
      /**
       * The hash is just that of the element.
+      * 
+      * @return The hashcode of the element.
       */
      public int hashCode()
      {
*************** public class Collections
*** 1359,1364 ****
--- 1519,1526 ----
  
      /**
       * Returning an array is simple.
+      *
+      * @return An array containing the element.
       */
      public Object[] toArray()
      {
*************** public class Collections
*** 1367,1372 ****
--- 1529,1537 ----
  
      /**
       * Obvious string.
+      *
+      * @return The string surrounded by enclosing
+      *         square brackets.
       */
      public String toString()
      {
*************** public class Collections
*** 1393,1399 ****
     * 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
--- 1558,1564 ----
     * 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
*************** public class Collections
*** 1420,1425 ****
--- 1585,1591 ----
  
      /**
       * The size: always 1!
+      * @return 1.
       */
      public int size()
      {
*************** public class Collections
*** 1428,1433 ****
--- 1594,1605 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 1440,1445 ****
--- 1612,1620 ----
      // 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)
      {
*************** public class Collections
*** 1448,1453 ****
--- 1623,1632 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 1461,1466 ****
--- 1640,1648 ----
  
      /**
       * Speed up the hashcode computation.
+      *
+      * @return The hashcode of the list, based
+      *         on the hashcode of the singleton element.
       */
      public int hashCode()
      {
*************** public class Collections
*** 1469,1474 ****
--- 1651,1659 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 1477,1482 ****
--- 1662,1670 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 1485,1490 ****
--- 1673,1686 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 1499,1504 ****
--- 1695,1702 ----
  
      /**
       * Returning an array is simple.
+      *
+      * @return An array containing the element.
       */
      public Object[] toArray()
      {
*************** public class Collections
*** 1507,1512 ****
--- 1705,1713 ----
  
      /**
       * Obvious string.
+      *
+      * @return The string surrounded by enclosing
+      *         square brackets. 
       */
      public String toString()
      {
*************** public class Collections
*** 1533,1539 ****
     * The implementation of {@link #singletonMap(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
--- 1734,1740 ----
     * The implementation of {@link #singletonMap(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
*************** public class Collections
*** 1573,1584 ****
--- 1774,1796 ----
  
      /**
       * 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();
*************** public class Collections
*** 1591,1596 ****
--- 1803,1812 ----
      // 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)
      {
*************** public class Collections
*** 1599,1604 ****
--- 1815,1824 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 1607,1612 ****
--- 1827,1836 ----
  
      /**
       * 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)
      {
*************** public class Collections
*** 1615,1620 ****
--- 1839,1847 ----
  
      /**
       * Calculate the hashcode directly.
+      *
+      * @return The hashcode computed from the singleton key
+      *         and the singleton value.
       */
      public int hashCode()
      {
*************** public class Collections
*** 1623,1628 ****
--- 1850,1857 ----
  
      /**
       * Return the keyset.
+      *
+      * @return A singleton containing the key.
       */
      public Set keySet()
      {
*************** public class Collections
*** 1633,1638 ****
--- 1862,1869 ----
  
      /**
       * The size: always 1!
+      *
+      * @return 1.
       */
      public int size()
      {
*************** public class Collections
*** 1642,1647 ****
--- 1873,1880 ----
      /**
       * 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()
      {
*************** public class Collections
*** 1652,1657 ****
--- 1885,1893 ----
  
      /**
       * Obvious string.
+      *
+      * @return A string containing the string representations of the key
+      *         and its associated value.
       */
      public String toString()
      {
*************** public class Collections
*** 1699,1709 ****
    {
      Object[] a = l.toArray();
      Arrays.sort(a, c);
!     ListIterator i = l.listIterator(a.length);
!     for (int pos = a.length; --pos >= 0; )
        {
! 	i.previous();
! 	i.set(a[pos]);
        }
    }
  
--- 1935,1945 ----
    {
      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]);
        }
    }
  
*************** public class Collections
*** 1763,1769 ****
     * 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
--- 1999,2005 ----
     * 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
*************** public class Collections
*** 1812,1817 ****
--- 2048,2069 ----
        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)
*************** public class Collections
*** 1820,1825 ****
--- 2072,2094 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1828,1833 ****
--- 2097,2109 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1836,1841 ****
--- 2112,2129 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1844,1849 ****
--- 2132,2151 ----
          }
      }
  
+     /**
+      * Checks for the existence of each object in cl
+      * within the underlying collection, first obtaining
+      * a lock on the mutex.
+      *
+      * @param cl 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)
*************** public class Collections
*** 1852,1857 ****
--- 2154,2166 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1860,1865 ****
--- 2169,2182 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1868,1873 ****
--- 2185,2204 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1876,1881 ****
--- 2207,2228 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1884,1889 ****
--- 2231,2253 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1892,1897 ****
--- 2256,2268 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1900,1905 ****
--- 2271,2284 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1908,1913 ****
--- 2287,2309 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1916,1921 ****
--- 2312,2323 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1930,1936 ****
     * 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
    {
--- 2332,2338 ----
     * 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
    {
*************** public class Collections
*** 1955,1960 ****
--- 2357,2369 ----
        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)
*************** public class Collections
*** 1963,1968 ****
--- 2372,2385 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 1971,1976 ****
--- 2388,2408 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2019,2025 ****
     * 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
--- 2451,2457 ----
     * 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
*************** public class Collections
*** 2058,2063 ****
--- 2490,2514 ----
        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)
*************** public class Collections
*** 2066,2071 ****
--- 2517,2539 ----
          }
      }
  
+   /**
+    * Add an element to the end of the underlying list (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 o the object 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)
*************** public class Collections
*** 2074,2079 ****
--- 2542,2559 ----
          }
      }
  
+    /**
+     * 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)
*************** public class Collections
*** 2082,2087 ****
--- 2562,2575 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2090,2095 ****
--- 2578,2592 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2098,2103 ****
--- 2595,2614 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2106,2111 ****
--- 2617,2634 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2114,2119 ****
--- 2637,2652 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2122,2127 ****
--- 2655,2677 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2130,2135 ****
--- 2680,2696 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2138,2143 ****
--- 2699,2722 ----
          }
      }
  
+   /**
+    * 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)
*************** public class Collections
*** 2146,2151 ****
--- 2725,2748 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2160,2166 ****
     * 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
--- 2757,2763 ----
     * 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
*************** public class Collections
*** 2191,2196 ****
--- 2788,2812 ----
        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)
*************** public class Collections
*** 2206,2212 ****
     * 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
--- 2822,2828 ----
     * 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
*************** public class Collections
*** 2228,2233 ****
--- 2844,2867 ----
        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)
*************** public class Collections
*** 2235,2240 ****
--- 2869,2883 ----
            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)
*************** public class Collections
*** 2243,2248 ****
--- 2886,2899 ----
          }
      }
  
+     /**
+       * 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)
*************** public class Collections
*** 2251,2256 ****
--- 2902,2917 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2259,2264 ****
--- 2920,2932 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2267,2272 ****
--- 2935,2959 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2310,2316 ****
     * 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
    {
--- 2997,3003 ----
     * 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
    {
*************** public class Collections
*** 2373,2378 ****
--- 3060,3071 ----
        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)
*************** public class Collections
*** 2381,2386 ****
--- 3074,3089 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2389,2394 ****
--- 3092,3111 ----
          }
      }
  
+   /**
+    * 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)
*************** public class Collections
*** 2411,2416 ****
--- 3128,3142 ----
          {
            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)
*************** public class Collections
*** 2418,2423 ****
--- 3144,3156 ----
                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)
*************** public class Collections
*** 2425,2430 ****
--- 3158,3170 ----
                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)
*************** public class Collections
*** 2432,2437 ****
--- 3172,3187 ----
                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)
*************** public class Collections
*** 2439,2444 ****
--- 3189,3211 ----
                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)
*************** public class Collections
*** 2446,2451 ****
--- 3213,3225 ----
                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)
*************** public class Collections
*** 2461,2472 ****
            {
              entries = new SynchronizedSet(mutex, m.entrySet())
              {
!               public Iterator iterator()
                {
                  synchronized (super.mutex)
                    {
                      return new SynchronizedIterator(super.mutex, c.iterator())
                      {
                        public Object next()
                        {
                          synchronized (super.mutex)
--- 3235,3262 ----
            {
              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)
*************** public class Collections
*** 2482,2487 ****
--- 3272,3287 ----
        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)
*************** public class Collections
*** 2490,2495 ****
--- 3290,3310 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2498,2503 ****
--- 3313,3325 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2506,2511 ****
--- 3328,3339 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2514,2519 ****
--- 3342,3360 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2524,2529 ****
--- 3365,3388 ----
        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)
*************** public class Collections
*** 2532,2537 ****
--- 3391,3410 ----
          }
      }
  
+     /**
+      * 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 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)
+      */
      public void putAll(Map map)
      {
        synchronized (mutex)
*************** public class Collections
*** 2540,2545 ****
--- 3413,3433 ----
          }
      }
  
+     /**
+      * 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 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.
+      */
      public Object remove(Object o)
      {
        synchronized (mutex)
*************** public class Collections
*** 2548,2553 ****
--- 3436,3449 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2556,2561 ****
--- 3452,3464 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2564,2569 ****
--- 3467,3486 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2610,2616 ****
     * 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
--- 3527,3533 ----
     * 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
*************** public class Collections
*** 2640,2645 ****
--- 3557,3572 ----
        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)
*************** public class Collections
*** 2648,2653 ****
--- 3575,3588 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2696,2702 ****
     * 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
--- 3631,3637 ----
     * 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
*************** public class Collections
*** 2735,2740 ****
--- 3670,3682 ----
        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)
*************** public class Collections
*** 2743,2748 ****
--- 3685,3697 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2751,2756 ****
--- 3700,3724 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2759,2764 ****
--- 3727,3739 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2767,2772 ****
--- 3742,3765 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2775,2780 ****
--- 3768,3789 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2818,2824 ****
     * 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
--- 3827,3833 ----
     * 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
*************** public class Collections
*** 2857,2862 ****
--- 3866,3878 ----
        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)
*************** public class Collections
*** 2865,2870 ****
--- 3881,3893 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2873,2878 ****
--- 3896,3920 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2881,2886 ****
--- 3923,3935 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2889,2894 ****
--- 3938,3961 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2898,2903 ****
--- 3965,3986 ----
          }
      }
  
+     /**
+      * 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)
*************** public class Collections
*** 2912,2918 ****
     * 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}.
     * <p>
     *
     * Since the collection might be a List or a Set, and those have incompatible
--- 3995,4003 ----
     * 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
*************** public class Collections
*** 2934,2940 ****
     * 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
--- 4019,4025 ----
     * 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
*************** public class Collections
*** 2962,3032 ****
--- 4047,4245 ----
          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 c 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();
*************** public class Collections
*** 3037,3043 ****
     * The implementation of the various iterator methods in the
     * unmodifiable classes.
     *
!    * @author Eric Blake <ebb9@email.byu.edu>
     */
    private static class UnmodifiableIterator implements Iterator
    {
--- 4250,4256 ----
     * The implementation of the various iterator methods in the
     * unmodifiable classes.
     *
!    * @author Eric Blake (ebb9@email.byu.edu)
     */
    private static class UnmodifiableIterator implements Iterator
    {
*************** public class Collections
*** 3055,3070 ****
        this.i = i;
      }
  
      public Object next()
      {
        return i.next();
      }
! 
      public boolean hasNext()
      {
        return i.hasNext();
      }
  
      public void remove()
      {
        throw new UnsupportedOperationException();
--- 4268,4304 ----
        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();
*************** public class Collections
*** 3076,3081 ****
--- 4310,4318 ----
     * "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
*************** public class Collections
*** 3099,3105 ****
     * 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
--- 4336,4342 ----
     * 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
*************** public class Collections
*** 3128,3188 ****
--- 4365,4548 ----
        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));
*************** public class Collections
*** 3194,3200 ****
     * 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
--- 4554,4560 ----
     * 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
*************** public class Collections
*** 3218,3224 ****
    /**
     * The implementation of {@link UnmodifiableList#listIterator()}.
     *
!    * @author Eric Blake <ebb9@email.byu.edu>
     */
    private static final class UnmodifiableListIterator
      extends UnmodifiableIterator implements ListIterator
--- 4578,4584 ----
    /**
     * The implementation of {@link UnmodifiableList#listIterator()}.
     *
!    * @author Eric Blake (ebb9@email.byu.edu)
     */
    private static final class UnmodifiableListIterator
      extends UnmodifiableIterator implements ListIterator
*************** public class Collections
*** 3239,3269 ****
--- 4599,4675 ----
        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();
*************** public class Collections
*** 3275,3280 ****
--- 4681,4689 ----
     * 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
*************** public class Collections
*** 3293,3299 ****
     * 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
    {
--- 4702,4708 ----
     * 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
    {
*************** public class Collections
*** 3335,3355 ****
--- 4744,4805 ----
          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)
*************** public class Collections
*** 3361,3367 ****
       * 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
--- 4811,4817 ----
       * 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
*************** public class Collections
*** 3385,3415 ****
--- 4835,4916 ----
        {
          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();
*************** public class Collections
*** 3420,3450 ****
--- 4921,5002 ----
        }
      } // 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)
*************** public class Collections
*** 3452,3477 ****
--- 5004,5071 ----
        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)
*************** public class Collections
*** 3485,3490 ****
--- 5079,5087 ----
     * "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
*************** public class Collections
*** 3503,3509 ****
     * 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
--- 5100,5106 ----
     * 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
*************** public class Collections
*** 3523,3533 ****
--- 5120,5142 ----
        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();
*************** public class Collections
*** 3539,3544 ****
--- 5148,5156 ----
     * "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
*************** public class Collections
*** 3557,3563 ****
     * 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
--- 5169,5175 ----
     * 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
*************** public class Collections
*** 3585,3615 ****
--- 5197,5315 ----
        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));
*************** public class Collections
*** 3621,3626 ****
--- 5321,5329 ----
     * "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
*************** public class Collections
*** 3639,3645 ****
     * 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
--- 5342,5348 ----
     * 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
*************** public class Collections
*** 3667,3697 ****
--- 5370,5490 ----
        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));
diff -Nrcpad gcc-3.4.3/libjava/java/util/Comparator.java gcc-4.0.0/libjava/java/util/Comparator.java
*** gcc-3.4.3/libjava/java/util/Comparator.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/Comparator.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Comparator.java -- Interface for objects that specify an ordering
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 60,66 ****
   * Serializable.
   *
   * @author Original author unknown
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Comparable
   * @see TreeMap
   * @see TreeSet
--- 60,66 ----
   * Serializable.
   *
   * @author Original author unknown
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Comparable
   * @see TreeMap
   * @see TreeSet
*************** public interface Comparator
*** 84,90 ****
     *   <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:
--- 84,90 ----
     *   <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:
diff -Nrcpad gcc-3.4.3/libjava/java/util/ConcurrentModificationException.java gcc-4.0.0/libjava/java/util/ConcurrentModificationException.java
*** gcc-3.4.3/libjava/java/util/ConcurrentModificationException.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/ConcurrentModificationException.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* ConcurrentModificationException.java -- Data structure concurrently modified
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ConcurrentModificationException.java -- Data structure concurrently modified
!    Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.util;
*** 52,59 ****
   * 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
--- 52,59 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/Currency.java gcc-4.0.0/libjava/java/util/Currency.java
*** gcc-3.4.3/libjava/java/util/Currency.java	Wed Oct 29 16:07:59 2003
--- gcc-4.0.0/libjava/java/util/Currency.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Currency.java -- Representation of a currency
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Currency.java -- Representation of a currency
!    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** or based on this library.  If you modify
*** 34,83 ****
  this exception to your version of the library, but 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.util.ResourceBundle;
- import java.util.Locale;
  import java.text.NumberFormat;
  
! public final class Currency implements Serializable
  {
    static final long serialVersionUID = -158308464356906721L;
  
!   private Locale locale;
!   private ResourceBundle res;
  
!   // For deserialization
!   private Currency ()
    {
    }
  
!   private Currency (Locale loc)
    {
-     this.locale = loc;
-     this.res = ResourceBundle.getBundle ("gnu.java.locale.LocaleInformation", locale);
    }
  
    /**
!    * Returns the ISO4217 currency code of this currency.
     *
!    * @return a <code>String</code> containing currency code.
     */
!   public String getCurrencyCode ()
    {
      try
        {
! 	return res.getString ("intlCurrencySymbol");
        }
      catch (Exception _)
        {
! 	return null;
        }
    }
  
    /**
!    * @return number of digits after decimal separator for this currency.
     */   
    public int getDefaultFractionDigits ()
    {
--- 34,170 ----
  this exception to your version of the library, but 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.ObjectStreamException;
  import java.io.Serializable;
  import java.text.NumberFormat;
  
! /**
!  * 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 locale associated with this currency.
!    *
!    * @see #Currency(java.util.Locale)
!    * @see #getInstance(java.util.Locale)
!    * @see #getSymbol(java.util.Locale)
!    * @serial ignored.
!    */
!   private transient Locale locale;
  
!   /**
!    * The resource bundle which maps the currency to
!    * a ISO 4217 currency code.
!    *
!    * @see #getCurrencyCode()
!    * @serial ignored.
!    */
!   private transient ResourceBundle res;
! 
!   /**
!    * The ISO 4217 currency code associated with this
!    * particular instance.
!    *
!    * @see #getCurrencyCode()
!    * @serial the ISO 4217 currency code
!    */
!   private String currencyCode;
! 
!   /**
!    * A cache of <code>Currency</code> instances to
!    * ensure the singleton nature of this class.  The key
!    * is the locale of the currency.
!    *
!    * @see #getInstance(java.util.Locale)
!    * @see #readResolve()
!    * @serial ignored.
!    */
!   private static transient Map cache;
! 
!   /**
!    * Instantiates the cache.
!    */
!   static
    {
+     cache = new HashMap();
    }
  
!   /**
!    * 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.
     */
!   private Currency (Locale loc)
    {
+     this.locale = loc;
+     this.res = ResourceBundle.getBundle ("gnu.java.locale.LocaleInformation", 
+       locale, ClassLoader.getSystemClassLoader());
+     /* Retrieve the ISO4217 currency code */
      try
        {
! 	currencyCode = res.getString ("intlCurrencySymbol");
        }
      catch (Exception _)
        {
! 	currencyCode = null;
        }
    }
  
    /**
!    * 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 ()
    {
*************** public final class Currency implements S
*** 88,135 ****
      
    /**
     * Builds a new currency instance for this locale.
     *
     * @param locale a <code>Locale</code> instance.
-    * 
     * @return a new <code>Currency</code> instance.
     */ 
    public static Currency getInstance (Locale locale)
    {
!     return new Currency (locale);
    }
  
    /**
     * Builds the currency corresponding to the specified currency code.
     *
     * @param currencyCode a string representing a currency code.
-    *
     * @return a new <code>Currency</code> instance.
     */
    public static Currency getInstance (String currencyCode)
    {
!     Locale[] all_locales = Locale.getAvailableLocales ();
      
!     for (int i=0;i<all_locales.length;i++)
        {
! 	Currency test_currency = getInstance (all_locales[i]);
  	
! 	if (test_currency.getCurrencyCode() != null &&
! 	    test_currency.getCurrencyCode().equals(currencyCode))
! 	  return test_currency;
        }
!     
!     return null;
    }
  
    /**
!    * This method returns the currency symbol.
     *
!    * @return the currency symbol.
     */
    public String getSymbol()
    {
      try
        {
  	return res.getString ("currencySymbol");
        }
      catch (Exception _)
--- 175,261 ----
      
    /**
     * 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;
! 
!     /* Attempt to get the currency from the cache */
!     newCurrency = (Currency) cache.get(locale);
!     if (newCurrency == null)
!       {
!         /* Create the currency for this locale */
!         newCurrency = new Currency (locale);
!         /* Cache it */
!         cache.put(locale, newCurrency);
!       }
!     /* 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 = Locale.getAvailableLocales ();
      
!     for (int i = 0;i < allLocales.length; i++)
        {
! 	Currency testCurrency = getInstance (allLocales[i]);
  	
! 	if (testCurrency.getCurrencyCode() != null &&
! 	    testCurrency.getCurrencyCode().equals(currencyCode))
! 	  return testCurrency;
        }
!     /* 
!      * 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.");
    }
  
    /**
!    * This method returns the symbol which precedes or follows a
!    * value in this particular currency.  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()
    {
      try
        {
+         /* What does this return if there is no mapping? */
  	return res.getString ("currencySymbol");
        }
      catch (Exception _)
*************** public final class Currency implements S
*** 139,161 ****
    }
  
    /**
!    * This methods returns the currency symbol expressed in the specified locale.
     *
     * @param locale the locale to express the symbol in.
!    * @return the currency symbol.
     */
    public String getSymbol(Locale locale)
    {
      // TODO. The behaviour is unclear if locale != this.locale.
      // First we need to implement fully LocaleInformation*.java
      try
        {
! 	ResourceBundle res = ResourceBundle.getBundle ("gnu.java.locale.LocaleInformation", locale);
  
! 	if (res.equals(this.res))
! 	  return res.getString ("currencySymbol");
  	else
! 	  return res.getString ("intlCurrencySymbol");
        }
      catch (Exception e1)
        {
--- 265,315 ----
    }
  
    /**
!    * <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)
    {
      // TODO. The behaviour is unclear if locale != this.locale.
      // First we need to implement fully LocaleInformation*.java
+ 
+     /* 
+      * FIXME: My reading of how this method works has this implementation
+      * as wrong.  It should return a value relating to how the specified
+      * locale handles the symbol for this currency.  This implementation
+      * seems to just do a variation of getInstance(locale).
+      */
      try
        {
! 	ResourceBundle localeResource = 
! 	  ResourceBundle.getBundle ("gnu.java.locale.LocaleInformation", 
! 				    locale, Currency.class.getClassLoader());
  
! 	if (localeResource.equals(res))
! 	  return localeResource.getString ("currencySymbol");
  	else
! 	  return localeResource.getString ("intlCurrencySymbol");
        }
      catch (Exception e1)
        {
*************** public final class Currency implements S
*** 177,189 ****
     */
    public String toString()
    {
!     try
!       {
! 	return res.getString ("intlCurrencySymbol");
!       }
!     catch (Exception _)
!       {
! 	return "(unknown currency)";
!       }
    }
  }
--- 331,355 ----
     */
    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-3.4.3/libjava/java/util/Date.java gcc-4.0.0/libjava/java/util/Date.java
*** gcc-3.4.3/libjava/java/util/Date.java	Sun Jan  4 00:32:49 2004
--- gcc-4.0.0/libjava/java/util/Date.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* java.util.Date
!    Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.util.Date
!    Copyright (C) 1998, 1999, 2000, 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,66 ****
  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 specific time in milliseconds since the epoch.
   * The epoch is 1970, January 1 00:00:00.0000 UTC.  
   *
-  * Date is intended to reflect universal time coordinate (UTC), but doesn't
-  * handle the leap seconds.
-  *
-  * Prior to jdk 1.1 this class was the sole Time class and had also 
-  * calendar functionality.  But this can't be localized, so a new Calendar
-  * class was created, that you should use instead.  The functions which
-  * get or return a year, month, day etc. are all deprecated and shouldn't be
-  * used.  Use Calendar instead.
-  * 
   * @see Calendar
   * @see GregorianCalendar
   * @see java.text.DateFormat
   * @author Jochen Hoenicke
!  * @author Per Bothner <bothner@cygnus.com>
   */
! public class Date implements Cloneable, Comparable, java.io.Serializable
  {
    /**
     * This is the serialization UID for this class
     */
    private static final long serialVersionUID = 7523967970034938905L;
  
--- 35,116 ----
  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;
+ 
  /**
+  * <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;
  
*************** public class Date implements Cloneable, 
*** 70,75 ****
--- 120,136 ----
    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()
*************** public class Date implements Cloneable, 
*** 79,84 ****
--- 140,146 ----
  
    /**
     * Creates a new Date Object representing the given time.
+    *
     * @param time the time in milliseconds since the epoch.
     */
    public Date(long time)
*************** public class Date implements Cloneable, 
*** 88,123 ****
  
    /**
     * Creates a new Date Object representing the given time.
     * @deprecated use <code>new GregorianCalendar(year+1900, month,
!    * day)</code> instead.  
     */
    public Date(int year, int month, int day)
    {
!     time = new GregorianCalendar(year + 1900, month, day).getTimeInMillis();
    }
  
    /**
     * Creates a new Date Object representing the given time.
     * @deprecated use <code>new GregorianCalendar(year+1900, month,
!    * day, hour, min)</code> instead.  
     */
    public Date(int year, int month, int day, int hour, int min)
    {
!     time =
!       new GregorianCalendar(year + 1900, month, day, hour,
! 			    min).getTimeInMillis();
    }
  
    /**
     * Creates a new Date Object representing the given time.
     * @deprecated use <code>new GregorianCalendar(year+1900, month,
!    * day)</code> instead.  
     */
    public Date(int year, int month, int day, int hour, int min, int sec)
    {
!     time =
!       new GregorianCalendar(year + 1900, month, day, hour, min,
! 			    sec).getTimeInMillis();
    }
  
    /**
--- 150,203 ----
  
    /**
     * 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();
    }
  
    /**
*************** public class Date implements Cloneable, 
*** 131,136 ****
--- 211,223 ----
      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
*************** public class Date implements Cloneable, 
*** 144,151 ****
    }
  
    /**
!    * @deprecated Use Calendar with a UTC TimeZone instead.
!    * @return the time in millis since the epoch.
     */
    public static long UTC(int year, int month, int date,
  			 int hrs, int min, int sec)
--- 231,252 ----
    }
  
    /**
!    * 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 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).
!    * @return the time in milliseconds since the epoch.
     */
    public static long UTC(int year, int month, int date,
  			 int hrs, int min, int sec)
*************** public class Date implements Cloneable, 
*** 158,164 ****
    }
  
    /**
!    * Gets the time represented by this Object
     * @return the time in milliseconds since the epoch.
     */
    public long getTime()
--- 259,266 ----
    }
  
    /**
!    * Gets the time represented by this object.
!    *
     * @return the time in milliseconds since the epoch.
     */
    public long getTime()
*************** public class Date implements Cloneable, 
*** 167,174 ****
    }
  
    /**
     * @deprecated use
!    * Calendar.get(Calendar.ZONE_OFFSET)+Calendar.get(Calendar.DST_OFFSET)
     * 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
--- 269,282 ----
    }
  
    /**
+    * 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
*************** public class Date implements Cloneable, 
*** 178,190 ****
    {
      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 represented.
!    * @param time the time in milliseconds since the epoch.  */
    public void setTime(long time)
    {
      this.time = time;
--- 286,300 ----
    {
      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;
*************** public class Date implements Cloneable, 
*** 192,199 ****
  
    /**
     * 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)
--- 302,310 ----
  
    /**
     * 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)
*************** public class Date implements Cloneable, 
*** 203,208 ****
--- 314,320 ----
  
    /**
     * 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 class Date implements Cloneable, 
*** 214,221 ****
  
    /**
     * Compares two dates for equality.
     * @param obj the object to compare.
!    * @return true, if obj is a Date object and the date represented
     * by obj is exactly the same as the time represented by this
     * object.  
     */
--- 326,334 ----
  
    /**
     * 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 class Date implements Cloneable, 
*** 226,231 ****
--- 339,345 ----
  
    /**
     * 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
*************** public class Date implements Cloneable, 
*** 238,246 ****
    }
  
    /**
!    * Compares this Date to another.  This behaves like
!    * <code>compareTo(Date)</code>, but it may throw a
!    * <code>ClassCastException</code>
     * @param obj the other date.
     * @return 0, if the date represented
     * by obj is exactly the same as the time represented by this
--- 352,362 ----
    }
  
    /**
!    * 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
*************** public class Date implements Cloneable, 
*** 253,270 ****
      return compareTo((Date) obj);
    }
  
    public int hashCode()
    {
      return (int) time ^ (int) (time >>> 32);
    }
  
!   private static final String[] weekNames = { "Sun", "Mon", "Tue", "Wed",
! 					      "Thu", "Fri", "Sat" };
! 
!   private static final String[] monthNames = { "Jan", "Feb", "Mar", "Apr",
! 					       "May", "Jun", "Jul", "Aug",
! 					       "Sep", "Oct", "Nov", "Dec" };
! 
    public String toString()
    {
      Calendar cal = Calendar.getInstance();
--- 369,441 ----
      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();
*************** public class Date implements Cloneable, 
*** 286,301 ****
        year.substring(year.length() - 4);
    }
  
!   /** Format this object in a locale-specific way.
     * @deprecated Use DateFormat.format(Date)
     */
    public String toLocaleString()
    {
      return java.text.DateFormat.getInstance().format(this);
    }
  
!   /** Format this object in a standard format in the GMT timezone.
     * @deprecated Use DateFormat.format(Date) with a GMT TimeZone.
     */
    public String toGMTString()
    {
--- 457,522 ----
        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()
    {
*************** public class Date implements Cloneable, 
*** 304,309 ****
--- 525,538 ----
      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
    {
*************** public class Date implements Cloneable, 
*** 328,333 ****
--- 557,570 ----
      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.
*************** public class Date implements Cloneable, 
*** 346,351 ****
--- 583,594 ----
      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.
*************** public class Date implements Cloneable, 
*** 362,370 ****
      return false;
    }
  
!   /** Parse a String and return the time it represents.
     * @param s The String to parse.
     * @deprecated Use DateFormat.parse(String)
     */
    public static long parse(String string)
    {
--- 605,729 ----
      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 s 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)
    {
*************** public class Date implements Cloneable, 
*** 460,466 ****
  			int curYear = 1900 + new Date().getYear();
  			int firstYear = curYear - 80;
  			year = firstYear / 100 * 100 + num;
- 			int yx = year;
  			if (year < firstYear)
  			  year += 100;
  		      }
--- 819,824 ----
*************** public class Date implements Cloneable, 
*** 579,587 ****
    }
  
    /**
     * @return the year minus 1900 represented by this date object.
     * @deprecated Use Calendar instead of Date, and use get(Calendar.YEAR)
!    * instead.  Note about the 1900 difference in year.
     */
    public int getYear()
    {
--- 937,950 ----
    }
  
    /**
+    * 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()
    {
*************** public class Date implements Cloneable, 
*** 591,601 ****
    }
  
    /**
!    * Sets the year to year minus 1900, not changing the other fields.
     * @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.  
     */
    public void setYear(int year)
    {
--- 954,978 ----
    }
  
    /**
!    * 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)
    {
*************** public class Date implements Cloneable, 
*** 606,614 ****
--- 983,996 ----
    }
  
    /**
+    * 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()
    {
*************** public class Date implements Cloneable, 
*** 618,627 ****
    }
  
    /**
!    * Sets the month to the given value, not changing the other fields.
!    * @param month the month, zero based.
     * @deprecated Use Calendar instead of Date, and use
!    * set(Calendar.MONTH, month) instead. 
     */
    public void setMonth(int month)
    {
--- 1000,1025 ----
    }
  
    /**
!    * 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)
    {
*************** public class Date implements Cloneable, 
*** 632,640 ****
--- 1030,1043 ----
    }
  
    /**
+    * 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()
    {
*************** public class Date implements Cloneable, 
*** 644,653 ****
    }
  
    /**
!    * Sets the date to the given value, not changing the other fields.
     * @param date the date.
     * @deprecated Use Calendar instead of Date, and use
     * set(Calendar.DATE, date) instead. 
     */
    public void setDate(int date)
    {
--- 1047,1072 ----
    }
  
    /**
!    * 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)
    {
*************** public class Date implements Cloneable, 
*** 658,666 ****
--- 1077,1089 ----
    }
  
    /**
+    * 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()
    {
*************** public class Date implements Cloneable, 
*** 671,679 ****
--- 1094,1107 ----
    }
  
    /**
+    * 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()
    {
*************** public class Date implements Cloneable, 
*** 683,692 ****
    }
  
    /**
!    * Sets the hours to the given value, not changing the other fields.
     * @param hours the hours.
     * @deprecated Use Calendar instead of Date, and use
!    * set(Calendar.HOUR_OF_DAY, hours) instead. 
     */
    public void setHours(int hours)
    {
--- 1111,1132 ----
    }
  
    /**
!    * 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)
    {
*************** public class Date implements Cloneable, 
*** 697,705 ****
--- 1137,1150 ----
    }
  
    /**
+    * 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()
    {
*************** public class Date implements Cloneable, 
*** 709,718 ****
    }
  
    /**
!    * Sets the minutes to the given value, not changing the other fields.
     * @param minutes the minutes.
     * @deprecated Use Calendar instead of Date, and use
     * set(Calendar.MINUTE, minutes) instead. 
     */
    public void setMinutes(int minutes)
    {
--- 1154,1175 ----
    }
  
    /**
!    * 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)
    {
*************** public class Date implements Cloneable, 
*** 723,731 ****
--- 1180,1193 ----
    }
  
    /**
+    * 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()
    {
*************** public class Date implements Cloneable, 
*** 735,744 ****
    }
  
    /**
!    * Sets the seconds to the given value, not changing the other fields.
     * @param seconds the seconds.
     * @deprecated Use Calendar instead of Date, and use
!    * set(Calendar.SECOND, seconds) instead. 
     */
    public void setSeconds(int seconds)
    {
--- 1197,1218 ----
    }
  
    /**
!    * 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)
    {
*************** public class Date implements Cloneable, 
*** 749,773 ****
    }
  
    /**
!    * Reads an Object from the stream.
     */
!   private void readObject(java.io.ObjectInputStream input)
!     throws java.io.IOException, ClassNotFoundException
    {
      input.defaultReadObject();
      time = input.readLong();
    }
  
    /**
!    * Writes an Object to 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().
     */
!   private void writeObject(java.io.ObjectOutputStream output)
!     throws java.io.IOException
    {
      output.defaultWriteObject();
      output.writeLong(time);
    }
  }
--- 1223,1261 ----
    }
  
    /**
!    * 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-3.4.3/libjava/java/util/EmptyStackException.java gcc-4.0.0/libjava/java/util/EmptyStackException.java
*** gcc-3.4.3/libjava/java/util/EmptyStackException.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/EmptyStackException.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* EmptyStackException.java -- Attempt to pop from an empty stack
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 47,54 ****
   * 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
--- 47,54 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/Enumeration.java gcc-4.0.0/libjava/java/util/Enumeration.java
*** gcc-3.4.3/libjava/java/util/Enumeration.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/Enumeration.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Enumeration.java -- Interface for enumerating lists of objects
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 52,59 ****
   * 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
--- 52,59 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/EventListener.java gcc-4.0.0/libjava/java/util/EventListener.java
*** gcc-3.4.3/libjava/java/util/EventListener.java	Mon Jun 17 21:31:57 2002
--- gcc-4.0.0/libjava/java/util/EventListener.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* EventListener.java -- tagging interface for all event listeners
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 45,51 ****
   * <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
   */
--- 45,51 ----
   * <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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/util/EventListenerProxy.java gcc-4.0.0/libjava/java/util/EventListenerProxy.java
*** gcc-3.4.3/libjava/java/util/EventListenerProxy.java	Mon Jun 17 21:31:58 2002
--- gcc-4.0.0/libjava/java/util/EventListenerProxy.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* EventListenerProxy.java -- abstract wrapper for event listeners
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* EventListenerProxy.java -- abstract wrapper for event listeners
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.util;
*** 44,50 ****
   * 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
   */
--- 44,50 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/util/EventObject.java gcc-4.0.0/libjava/java/util/EventObject.java
*** gcc-3.4.3/libjava/java/util/EventObject.java	Mon Jun 17 21:31:58 2002
--- gcc-4.0.0/libjava/java/util/EventObject.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* EventObject.java -- represents an event on an object
!    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 43,49 ****
  /**
   * Represents Events fired by Objects.
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see EventListener
   * @since 1.1
   * @status updated to 1.4
--- 43,49 ----
  /**
   * Represents Events fired by Objects.
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see EventListener
   * @since 1.1
   * @status updated to 1.4
diff -Nrcpad gcc-3.4.3/libjava/java/util/GregorianCalendar.java gcc-4.0.0/libjava/java/util/GregorianCalendar.java
*** gcc-3.4.3/libjava/java/util/GregorianCalendar.java	Tue Dec 30 19:56:49 2003
--- gcc-4.0.0/libjava/java/util/GregorianCalendar.java	Wed Mar 23 21:36:23 2005
***************
*** 1,5 ****
  /* java.util.GregorianCalendar
!    Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* java.util.GregorianCalendar
!    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,67 ****
  
  package java.util;
  
  /**
   * 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.
-  * This change date is different from country to country, you can set it with
-  * <code>setGregorianChange</code>
-  *
   * 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).  The non existing days that were omited when the change took
!  * place are interpreted as gregorian date
!  *
!  * There are to eras available for the Gregorian calendar, namely BC and AD.
   *
   * @see Calendar
   * @see TimeZone
   */
  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).
     */
--- 39,143 ----
  
  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 class GregorianCalendar extends C
*** 72,80 ****
--- 148,162 ----
     * This is locale dependent; the default for most catholic
     * countries 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;
  
+   /**
+    * For compatability with Sun's JDK.
+    */
    static final long serialVersionUID = -8125100834729963327L;
  
    /**
*************** public class GregorianCalendar extends C
*** 83,119 ****
    private static final String bundleName = "gnu.java.locale.Calendar";
  
    /**
!    * get resource bundle:
!    * The resources should be loaded via this method only. Iff an application
!    * uses this method, the resourcebundle is required. --Fridi. 
     */
!   private static ResourceBundle getBundle(Locale locale) 
!   {
!     return ResourceBundle.getBundle(bundleName, locale);
!   }
  
    /**
     * 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)
--- 165,210 ----
    private static final String bundleName = "gnu.java.locale.Calendar";
  
    /**
!    * 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)
*************** public class GregorianCalendar extends C
*** 124,138 ****
    /**
     * 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)
    {
      super(zone, locale);
!     ResourceBundle rb = getBundle(locale);
      gregorianCutover = ((Date) rb.getObject("gregorianCutOver")).getTime();
-     setTimeInMillis(System.currentTimeMillis());
    }
  
    /**
--- 215,245 ----
    /**
     * 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);
!     ResourceBundle rb = ResourceBundle.getBundle(bundleName, locale,
!                                                  ClassLoader
!                                                  .getSystemClassLoader());
      gregorianCutover = ((Date) rb.getObject("gregorianCutOver")).getTime();
    }
  
    /**
*************** public class GregorianCalendar extends C
*** 144,156 ****
     */
    public GregorianCalendar(int year, int month, int day)
    {
!     super();
      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.
--- 251,264 ----
     */
    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.
*************** public class GregorianCalendar extends C
*** 159,171 ****
     */
    public GregorianCalendar(int year, int month, int day, int hour, int minute)
    {
!     super();
      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.
--- 267,280 ----
     */
    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.
*************** public class GregorianCalendar extends C
*** 173,182 ****
     * @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)
    {
!     super();
      set(year, month, day, hour, minute, second);
    }
  
--- 282,291 ----
     * @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);
    }
  
*************** public class GregorianCalendar extends C
*** 185,190 ****
--- 294,300 ----
     * 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)
*************** public class GregorianCalendar extends C
*** 194,199 ****
--- 304,310 ----
  
    /**
     * Gets the date of the switch from Julian dates to Gregorian dates.
+    *
     * @return the date of the change.
     */
    public final Date getGregorianChange()
*************** public class GregorianCalendar extends C
*** 202,283 ****
    }
  
    /**
     * 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 skiped and you give that year
!    * (well...).<br>
!    *
!    * The year should be positive and you can't give an ERA.  But
!    * remember that before 4 BC there wasn't a consistent leap year
!    * rule, so who cares.
     *
!    * @param year a year use nonnegative value for BC.
!    * @return true, if the given year is a leap year, false otherwise.  */
    public boolean isLeapYear(int year)
    {
      if ((year & 3) != 0)
-       // Only years divisible by 4 can be leap years
        return false;
  
!     // compute the linear day of the 29. February of that year.
!     // The 13 is the number of days, that were omitted in the Gregorian
!     // Calender until the epoch.
!     int julianDay = (((year-1) * (365*4+1)) >> 2) + (31+29 - 
!         (((1970-1) * (365*4+1)) / 4 + 1 - 13));
!     
!     // If that day is smaller than the gregorianChange the julian
!     // rule applies:  This is a leap year since it is divisible by 4.
!     if (julianDay * (24 * 60 * 60 * 1000L) < gregorianCutover)
        return true;
  
      return ((year % 100) != 0 || (year % 400) == 0);
    }
  
    /**
!    * Get the linear time in milliseconds since the epoch.  If you
!    * specify a nonpositive year it is interpreted as BC as
!    * following: 0 is 1 BC, -1 is 2 BC and so on.  The date is
!    * interpreted as gregorian if the change occurred before that date.
     *
!    * @param year the year of the date.
!    * @param dayOfYear the day of year of the date; 1 based.
!    * @param millis the millisecond in that day.
!    * @return the days since the epoch, may be negative.  */
!   private long getLinearTime(int year, int dayOfYear, int millis)
    {
!     // 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).
!     int julianDay = ((year * (365 * 4 + 1)) >> 2) + dayOfYear -
!       ((1970 * (365 * 4 + 1)) / 4 + 1 - 13);
!     long time = julianDay * (24 * 60 * 60 * 1000L) + millis;
  
!     if (time >= gregorianCutover)
!       {
! 	// 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.
! 	// And on and after the leap day, the leap day has already been
! 	// included in dayOfYear. 
! 	int gregOffset = (year / 400) - (year / 100) + 2;
! 	if (isLeapYear (year, true))
! 	  --gregOffset;
! 	time += gregOffset * (24 * 60 * 60 * 1000L);
!       }
!     return time;
    }
  
!   private int getWeekDay(int year, int dayOfYear)
    {
!     int day =
!       (int) (getLinearTime(year, dayOfYear, 0) / (24 * 60 * 60 * 1000L));
  
      // The epoch was a thursday.
      int weekday = (day + THURSDAY) % 7;
--- 313,398 ----
    }
  
    /**
+    * <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;
*************** public class GregorianCalendar extends C
*** 287,501 ****
    }
  
    /**
!    * Calculate the dayOfYear from the fields array.  
!    * The relativeDays is used, to account for weeks that begin before
!    * the gregorian change and end after it.<br>
!    *
!    * We return two values, the first is used to determine, if we
!    * should use Gregorian calendar or Julian calendar, in case of
!    * the change year, the second is a relative day after the given
!    * day.  This is necessary for week calculation in the year in
!    * which gregorian change occurs. <br>
!    *
!    * @param year the year, negative for BC.
!    * @return an array of two int values, the first containing a reference
!    * day of current year, the second a relative count since this reference
!    * day.  */
!   private int[] getDayOfYear(int year)
    {
!     if (isSet[MONTH])
!       {
! 	int dayOfYear;
! 	if (fields[MONTH] > FEBRUARY)
! 	  {
  
! 	    // The months after February are regular:
! 	    // 9 is an offset found by try and error.
! 	    dayOfYear = (fields[MONTH] * (31 + 30 + 31 + 30 + 31) - 9) / 5;
! 	    if (isLeapYear(year))
! 	      dayOfYear++;
! 	  }
! 	else
! 	    dayOfYear = 31 * fields[MONTH];
  
! 	if (isSet[DAY_OF_MONTH])
! 	  {
! 	    return new int[]
! 	    {
! 	    dayOfYear + fields[DAY_OF_MONTH], 0};
! 	  }
! 	if (isSet[WEEK_OF_MONTH] && isSet[DAY_OF_WEEK])
! 	  {
! 	    // the weekday of the first day in that month is:
! 	    int weekday = getWeekDay(year, ++dayOfYear);
  
! 	    return new int[]
! 	    {
! 	      dayOfYear,
! 		// the day of week in the first week
! 		// (weeks starting on sunday) is:
! 	      fields[DAY_OF_WEEK] - weekday +
! 		// Now jump to the right week and correct the possible
! 		// error made by assuming sunday is the first week day.
! 	      7 * (fields[WEEK_OF_MONTH]
! 		   + (fields[DAY_OF_WEEK] < getFirstDayOfWeek()? 0 : -1)
! 		   + (weekday < getFirstDayOfWeek()? -1 : 0))};
! 	  }
! 	if (isSet[DAY_OF_WEEK] && isSet[DAY_OF_WEEK_IN_MONTH])
! 	  {
! 	    // the weekday of the first day in that month is:
! 	    int weekday = getWeekDay(year, ++dayOfYear);
! 	    return new int[] { 
! 		  dayOfYear,
! 		  fields[DAY_OF_WEEK] - weekday +
! 		  7 * (fields[DAY_OF_WEEK_IN_MONTH]
! 		       + (fields[DAY_OF_WEEK] < weekday ? 0 : -1))};
! 	  }
        }
  
!     // MONTH + something did not succeed.
!     if (isSet[DAY_OF_YEAR])
        {
! 	return new int[] {0, fields[DAY_OF_YEAR]};
        }
-       
-     if (isSet[DAY_OF_WEEK] && isSet[WEEK_OF_YEAR])
-       {
- 	int dayOfYear = getMinimalDaysInFirstWeek();
- 	// the weekday of the day, that begins the first week 
- 	// in that year is:
- 	int weekday = getWeekDay(year, dayOfYear);
  
! 	return new int[] { 
! 	    dayOfYear,
! 	      // the day of week in the first week
! 	      // (weeks starting on sunday) is:
! 	    fields[DAY_OF_WEEK] - weekday
! 	      // Now jump to the right week and correct the possible
! 	      // error made by assuming sunday is the first week day.
! 	    + 7 * (fields[WEEK_OF_YEAR]
! 		   + (fields[DAY_OF_WEEK] < getFirstDayOfWeek()? 0 : -1)
! 		   + (weekday < getFirstDayOfWeek()? -1 : 0))};
        }
  
!     // As last resort return Jan, 1st.
!     return new int[] {1, 0};
    }
  
    /**
     * Converts the time field values (<code>fields</code>) to
!    * milliseconds since the epoch UTC (<code>time</code>). 
     */
    protected synchronized void computeTime()
    {
!     int era = isSet[ERA] ? fields[ERA] : AD;
!     int year = isSet[YEAR] ? fields[YEAR] : 1970;
!     if (era == BC)
!       year = 1 - year;
! 
!     int[] daysOfYear = getDayOfYear(year);
  
      int hour = 0;
!     if (isSet[HOUR_OF_DAY])
!       hour = fields[HOUR_OF_DAY];
!     else if (isSet[HOUR])
        {
! 	hour = fields[HOUR];
!         if (isSet[AM_PM] && fields[AM_PM] == PM)
! 	  if (hour != 12) /* not Noon */
!             hour += 12;
! 	/* Fix the problem of the status of 12:00 AM (midnight). */
! 	if (isSet[AM_PM] && fields[AM_PM] == AM && hour == 12)
! 	  hour = 0;
        }
  
!     int minute = isSet[MINUTE] ? fields[MINUTE] : 0;
!     int second = isSet[SECOND] ? fields[SECOND] : 0;
!     int millis = isSet[MILLISECOND] ? fields[MILLISECOND] : 0;
!     int millisInDay;
  
!     if (isLenient())
        {
! 	// prevent overflow
! 	long allMillis = (((hour * 60L) + minute) * 60L + second) * 1000L
! 	  + millis;
! 	daysOfYear[1] += allMillis / (24 * 60 * 60 * 1000L);
! 	millisInDay = (int) (allMillis % (24 * 60 * 60 * 1000L));
        }
      else
        {
! 	if (hour < 0 || hour >= 24 || minute < 0 || minute > 59
! 	    || second < 0 || second > 59 || millis < 0 || millis >= 1000)
! 	  throw new IllegalArgumentException();
! 	millisInDay = (((hour * 60) + minute) * 60 + second) * 1000 + millis;
        }
-     time = getLinearTime(year, daysOfYear[0], millisInDay);
  
!     // Add the relative days after calculating the linear time, to
!     // get right behaviour when jumping over the gregorianCutover.
!     time += daysOfYear[1] * (24 * 60 * 60 * 1000L);
  
  
!     TimeZone zone = getTimeZone();
!     int rawOffset = isSet[ZONE_OFFSET]
!       ? fields[ZONE_OFFSET] : zone.getRawOffset();
  
!     int dayOfYear = daysOfYear[0] + daysOfYear[1];
!     int month = (dayOfYear * 5 + 3) / (31 + 30 + 31 + 30 + 31);
!     int day = (6 + (dayOfYear * 5 + 3) % (31 + 30 + 31 + 30 + 31)) / 5;
!     int weekday = ((int) (time / (24 * 60 * 60 * 1000L)) + THURSDAY) % 7;
      if (weekday <= 0)
        weekday += 7;
!     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;
!   }
  
!   /**
!    * Determines if the given year is a leap year.  
!    *
!    * The year should be positive and you can't give an ERA.  But
!    * remember that before 4 BC there wasn't a consistent leap year
!    * rule, so who cares.
!    *
!    * @param year a year use nonnegative value for BC.
!    * @param gregorian if true, use gregorian leap year rule.
!    * @return true, if the given year is a leap year, false otherwise.  */
!   private boolean isLeapYear(int year, boolean gregorian)
!   {
!     if ((year & 3) != 0)
!       // Only years divisible by 4 can be leap years
!       return false;
  
!     if (!gregorian)
!       return true;
  
!     // We rely on AD area here.
!     return ((year % 100) != 0 || (year % 400) == 0);
    }
  
    /**
     * 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 True, if we should use Gregorian rules.
!    * @return the days since the epoch, may be negative.  */
!   private int 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).
!     int julianDay = ((year * (365 * 4 + 1)) >> 2) + dayOfYear -
!       ((1970 * (365 * 4 + 1)) / 4 + 1 - 13);
  
      if (gregorian)
        {
--- 402,725 ----
    }
  
    /**
!    * 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)
        {
*************** public class GregorianCalendar extends C
*** 508,518 ****
  	//
  	// 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 = (year / 400) - (year / 100) + 2;
! 	if (isLeapYear (year, true) && dayOfYear < 31 + 29)
! 	  --gregOffset;
! 	julianDay += gregOffset;
        }
      return julianDay;
    }
  
--- 732,744 ----
  	//
  	// 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;
    }
  
*************** public class GregorianCalendar extends C
*** 520,544 ****
     * 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.  
     */
!   private void calculateDay(int day, boolean gregorian)
    {
!     // the epoch is a Thursday.
!     int weekday = (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 to big.
!     int year = 1970 + (gregorian
! 		       ? ((day - 100) * 400) / (365 * 400 + 100 - 4 + 1)
! 		       : ((day - 100) * 4) / (365 * 4 + 1));
      if (day >= 0)
        year++;
  
!     int firstDayOfYear = getLinearDay(year, 1, gregorian);
  
      // Now look in which year day really lies.
      if (day < firstDayOfYear)
--- 746,773 ----
     * 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)
*************** public class GregorianCalendar extends C
*** 547,555 ****
  	firstDayOfYear = getLinearDay(year, 1, gregorian);
        }
  
!     day -= firstDayOfYear - 1;	// day of year,  one based.
  
!     fields[DAY_OF_YEAR] = day;
      if (year <= 0)
        {
  	fields[ERA] = BC;
--- 776,784 ----
  	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;
*************** public class GregorianCalendar extends C
*** 561,576 ****
  	fields[YEAR] = year;
        }
  
!     int leapday = isLeapYear(year, gregorian) ? 1 : 0;
      if (day <= 31 + 28 + leapday)
        {
! 	fields[MONTH] = day / 32;	// 31->JANUARY, 32->FEBRUARY
! 	fields[DAY_OF_MONTH] = day - 31 * fields[MONTH];
        }
      else
        {
  	// A few more magic formulas
! 	int scaledDay = (day - leapday) * 5 + 8;
  	fields[MONTH] = scaledDay / (31 + 30 + 31 + 30 + 31);
  	fields[DAY_OF_MONTH] = (scaledDay % (31 + 30 + 31 + 30 + 31)) / 5 + 1;
        }
--- 790,805 ----
  	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;
        }
*************** public class GregorianCalendar extends C
*** 579,585 ****
    /**
     * Converts the milliseconds since the epoch UTC
     * (<code>time</code>) to time fields
!    * (<code>fields</code>). 
     */
    protected synchronized void computeFields()
    {
--- 808,814 ----
    /**
     * Converts the milliseconds since the epoch UTC
     * (<code>time</code>) to time fields
!    * (<code>fields</code>).
     */
    protected synchronized void computeFields()
    {
*************** public class GregorianCalendar extends C
*** 589,613 ****
      fields[ZONE_OFFSET] = zone.getRawOffset();
      long localTime = time + fields[ZONE_OFFSET];
  
!     int day = (int) (localTime / (24 * 60 * 60 * 1000L));
      int millisInDay = (int) (localTime % (24 * 60 * 60 * 1000L));
      if (millisInDay < 0)
        {
  	millisInDay += (24 * 60 * 60 * 1000);
  	day--;
        }
  
!     calculateDay(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(++day, gregorian);
        }
  
      fields[DAY_OF_WEEK_IN_MONTH] = (fields[DAY_OF_MONTH] + 6) / 7;
--- 818,843 ----
      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;
*************** public class GregorianCalendar extends C
*** 622,638 ****
      // 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 == 0) ? 12 : hour;
      fields[HOUR_OF_DAY] = hourOfDay;
      millisInDay %= (60 * 60 * 1000);
      fields[MINUTE] = millisInDay / (60 * 1000);
--- 852,867 ----
      // 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);
*************** public class GregorianCalendar extends C
*** 640,705 ****
      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;
! 
    }
  
    /**
!    * Compares the given calender 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).
!    * @XXX Should we check if time zones, locale, cutover etc. are equal?
     */
    public boolean equals(Object o)
    {
!     if (!(o instanceof GregorianCalendar))
        return false;
  
      GregorianCalendar cal = (GregorianCalendar) o;
      return (cal.getTimeInMillis() == getTimeInMillis());
    }
  
- //     /**
- //      * Compares the given calender 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 calender o.
- //      */
- //     public boolean before(Object o) {
- //         if (!(o instanceof GregorianCalendar))
- //             return false;
- 
- //         GregorianCalendar cal = (GregorianCalendar) o;
- //         return (cal.getTimeInMillis() < getTimeInMillis());
- //     }
- 
- //     /**
- //      * Compares the given calender 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 calender o.
- //      */
- //     public boolean after(Object o) {
- //         if (!(o instanceof GregorianCalendar))
- //             return false;
- 
- //         GregorianCalendar cal = (GregorianCalendar) o;
- //         return (cal.getTimeInMillis() > 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.
     */
    public void add(int field, int amount)
    {
--- 869,911 ----
      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;
    }
  
    /**
!    * 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.getTimeInMillis() == 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 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)
    {
*************** public class GregorianCalendar extends C
*** 720,737 ****
  	    fields[MONTH] += 12;
  	    fields[YEAR]--;
  	  }
- 	isTimeSet = false;
  	int maxDay = getActualMaximum(DAY_OF_MONTH);
  	if (fields[DAY_OF_MONTH] > maxDay)
! 	  {
! 	    fields[DAY_OF_MONTH] = maxDay;
! 	    isTimeSet = false;
! 	  }
  	break;
        case DAY_OF_MONTH:
        case DAY_OF_YEAR:
        case DAY_OF_WEEK:
! 	if (!isTimeSet)
  	  computeTime();
  	time += amount * (24 * 60 * 60 * 1000L);
  	areFieldsSet = false;
--- 926,941 ----
  	    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;
*************** public class GregorianCalendar extends C
*** 739,816 ****
        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:
! 	complete();
! 	fields[ZONE_OFFSET] += amount;
! 	time -= amount;
! 	break;
!       case DST_OFFSET:
! 	complete();
! 	fields[DST_OFFSET] += amount;
! 	isTimeSet = false;
! 	break;
!       default:
! 	throw new IllegalArgumentException
! 	  ("Unknown Calendar field: " + 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.
     */
    public void roll(int field, boolean up)
    {
      roll(field, up ? 1 : -1);
    }
  
    private void cleanUpAfterRoll(int field, int delta)
    {
      switch (field)
--- 943,1023 ----
        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)
*************** public class GregorianCalendar extends C
*** 828,834 ****
  	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;
--- 1035,1040 ----
*************** public class GregorianCalendar extends C
*** 837,843 ****
  	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;
--- 1043,1048 ----
*************** public class GregorianCalendar extends C
*** 869,875 ****
  	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);
--- 1074,1079 ----
*************** public class GregorianCalendar extends C
*** 883,889 ****
  	isSet[AM_PM] = false;
  	time += delta * (60 * 60 * 1000L);
  	break;
- 
        case MINUTE:
  	time += delta * (60 * 1000L);
  	break;
--- 1087,1092 ----
*************** public class GregorianCalendar extends C
*** 903,913 ****
     * 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.
     */
    public void roll(int field, int amount)
    {
--- 1106,1121 ----
     * 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)
    {
*************** public class GregorianCalendar extends C
*** 932,949 ****
      cleanUpAfterRoll(field, newval - oldval);
    }
  
!   private static final int[] minimums =
!       { BC,       1,  0,  0, 1,  1,   1,   SUNDAY, 1, 
!         AM,  1,  0,  1,  1,   1, -(12*60*60*1000),               0 };
  
!   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 the time field. One of the time field constants.
!    * @return the smallest value.
     */
    public int getMinimum(int field)
    {
--- 1140,1171 ----
      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)
    {
*************** public class GregorianCalendar extends C
*** 952,958 ****
  
    /**
     * 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 int getMaximum(int field)
--- 1174,1181 ----
  
    /**
     * 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)
*************** public class GregorianCalendar extends C
*** 960,970 ****
      return maximums[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 int getGreatestMinimum(int field)
    {
--- 1183,1196 ----
      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)
    {
*************** public class GregorianCalendar extends C
*** 975,984 ****
  
    /**
     * 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.  
!    * @since jdk1.2
     */
    public int getLeastMaximum(int field)
    {
--- 1201,1215 ----
  
    /**
     * 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)
    {
*************** public class GregorianCalendar extends C
*** 1002,1011 ****
     * 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.
     * @param field the time field. One of the time field constants.
     * @return the actual minimum value.
!    * @since jdk1.2
     */
    public int getActualMinimum(int field)
    {
--- 1233,1244 ----
     * 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)
    {
*************** public class GregorianCalendar extends C
*** 1014,1020 ****
  	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];
--- 1247,1253 ----
  	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];
*************** public class GregorianCalendar extends C
*** 1030,1071 ****
     * 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.
     * @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);
  	  if (minimalDays - (7 + firstWeekday - getFirstDayOfWeek()) % 7 < 1)
! 	    return week + 1;
! 	}
! 	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;
--- 1263,1313 ----
     * 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;
*************** public class GregorianCalendar extends C
*** 1074,1102 ****
  	    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];
        }
--- 1316,1344 ----
  	    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-3.4.3/libjava/java/util/HashMap.java gcc-4.0.0/libjava/java/util/HashMap.java
*** gcc-3.4.3/libjava/java/util/HashMap.java	Sun Dec  7 23:00:49 2003
--- gcc-4.0.0/libjava/java/util/HashMap.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* HashMap.java -- a class providing a basic hashtable data structure,
     mapping Object --> Object
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** exception statement from your version. *
*** 40,48 ****
  package java.util;
  
  import java.io.IOException;
- import java.io.Serializable;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  
  // 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
--- 40,48 ----
  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
*************** import java.io.ObjectOutputStream;
*** 85,91 ****
   * @author Jon Zeppieri
   * @author Jochen Hoenicke
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Object#hashCode()
   * @see Collection
   * @see Map
--- 85,91 ----
   * @author Jon Zeppieri
   * @author Jochen Hoenicke
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Object#hashCode()
   * @see Collection
   * @see Map
*************** public class HashMap extends AbstractMap
*** 160,166 ****
     * 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
    {
--- 160,166 ----
     * 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
    {
*************** public class HashMap extends AbstractMap
*** 743,760 ****
            {
              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;
            }
        }
--- 743,751 ----
            {
              int idx = hash(e.key);
              HashEntry dest = buckets[idx];
              HashEntry next = e.next;
!             e.next = buckets[idx];
!             buckets[idx] = e;
              e = next;
            }
        }
diff -Nrcpad gcc-3.4.3/libjava/java/util/HashSet.java gcc-4.0.0/libjava/java/util/HashSet.java
*** gcc-3.4.3/libjava/java/util/HashSet.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/HashSet.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* HashSet.java -- a class providing a HashMap-backed Set
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,47 ****
  package java.util;
  
  import java.io.IOException;
- import java.io.Serializable;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  
  /**
   * This class provides a HashMap-backed implementation of the Set interface.
--- 39,47 ----
  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.
*************** import java.io.ObjectOutputStream;
*** 66,72 ****
   * non-deterministic behavior.
   *
   * @author Jon Zeppieri
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Collection
   * @see Set
   * @see TreeSet
--- 66,72 ----
   * non-deterministic behavior.
   *
   * @author Jon Zeppieri
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Collection
   * @see Set
   * @see TreeSet
diff -Nrcpad gcc-3.4.3/libjava/java/util/Hashtable.java gcc-4.0.0/libjava/java/util/Hashtable.java
*** gcc-3.4.3/libjava/java/util/Hashtable.java	Sun Dec  7 23:00:49 2003
--- gcc-4.0.0/libjava/java/util/Hashtable.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* Hashtable.java -- a class providing a basic hashtable data structure,
     mapping Object --> Object
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* Hashtable.java -- a class providing a basic hashtable 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.
  
*************** exception statement from your version. *
*** 39,47 ****
  package java.util;
  
  import java.io.IOException;
- import java.io.Serializable;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  
  // 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
--- 39,47 ----
  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
*************** import java.io.ObjectOutputStream;
*** 91,97 ****
   * @author Jon Zeppieri
   * @author Warren Levy
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see HashMap
   * @see TreeMap
   * @see IdentityHashMap
--- 91,97 ----
   * @author Jon Zeppieri
   * @author Warren Levy
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see HashMap
   * @see TreeMap
   * @see IdentityHashMap
diff -Nrcpad gcc-3.4.3/libjava/java/util/IdentityHashMap.java gcc-4.0.0/libjava/java/util/IdentityHashMap.java
*** gcc-3.4.3/libjava/java/util/IdentityHashMap.java	Tue Dec  9 16:17:01 2003
--- gcc-4.0.0/libjava/java/util/IdentityHashMap.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* IdentityHashMap.java -- a class providing a hashtable data structure,
     mapping Object --> Object, which uses object identity for hashing.
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 78,85 ****
   * 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
--- 78,85 ----
   * 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
*************** public class IdentityHashMap extends Abs
*** 492,498 ****
          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 << 1 + 2];
          Arrays.fill(table, emptyslot);
          size = 0;
          threshold = (table.length >>> 3) * 3;
--- 492,498 ----
          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;
*************** public class IdentityHashMap extends Abs
*** 676,685 ****
     * 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 final class IdentityIterator implements Iterator
    {
      /**
       * The type of this Iterator: {@link #KEYS}, {@link #VALUES},
--- 676,685 ----
     * 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},
*************** public class IdentityHashMap extends Abs
*** 769,775 ****
     * 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
    {
--- 769,775 ----
     * 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
    {
*************** public class IdentityHashMap extends Abs
*** 878,884 ****
       * @throws ConcurrentModificationException if the entry was invalidated
       *         by modifying the Map or calling Iterator.remove()
       */
!     public final String toString()
      {
        if (knownMod != modCount || table[loc] == tombstone)
          throw new ConcurrentModificationException();
--- 878,884 ----
       * @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();
diff -Nrcpad gcc-3.4.3/libjava/java/util/Iterator.java gcc-4.0.0/libjava/java/util/Iterator.java
*** gcc-3.4.3/libjava/java/util/Iterator.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/Iterator.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Iterator.java -- Interface for iterating over collections
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Iterator.java -- Interface for iterating over collections
!    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.util;
*** 47,53 ****
   * 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
--- 47,53 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/LinkedHashMap.java gcc-4.0.0/libjava/java/util/LinkedHashMap.java
*** gcc-3.4.3/libjava/java/util/LinkedHashMap.java	Sun Nov 10 22:06:49 2002
--- gcc-4.0.0/libjava/java/util/LinkedHashMap.java	Sat Feb 19 03:18:20 2005
*************** public class LinkedHashMap extends HashM
*** 412,418 ****
      e.next = buckets[idx];
      buckets[idx] = e;
      if (callRemove && removeEldestEntry(root))
!       remove(root);
    }
  
    /**
--- 412,418 ----
      e.next = buckets[idx];
      buckets[idx] = e;
      if (callRemove && removeEldestEntry(root))
!       remove(root.key);
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/util/LinkedHashSet.java gcc-4.0.0/libjava/java/util/LinkedHashSet.java
*** gcc-3.4.3/libjava/java/util/LinkedHashSet.java	Tue Jan 22 22:40:38 2002
--- gcc-4.0.0/libjava/java/util/LinkedHashSet.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* LinkedHashSet.java -- a set backed by a LinkedHashMap, for linked
     list traversal.
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** import java.io.Serializable;
*** 78,84 ****
   * {@link ConcurrentModificationException} rather than exhibit
   * non-deterministic behavior.
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Object#hashCode()
   * @see Collection
   * @see Set
--- 78,84 ----
   * {@link ConcurrentModificationException} rather than exhibit
   * non-deterministic behavior.
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Object#hashCode()
   * @see Collection
   * @see Set
diff -Nrcpad gcc-3.4.3/libjava/java/util/LinkedList.java gcc-4.0.0/libjava/java/util/LinkedList.java
*** gcc-3.4.3/libjava/java/util/LinkedList.java	Wed Oct  8 15:30:44 2003
--- gcc-4.0.0/libjava/java/util/LinkedList.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* LinkedList.java -- Linked list implementation of the List interface
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 37,46 ****
  
  
  package java.util;
- import java.io.Serializable;
- import java.io.ObjectOutputStream;
- import java.io.ObjectInputStream;
  import java.io.IOException;
  import java.lang.reflect.Array;
  
  /**
--- 37,46 ----
  
  
  package java.util;
  import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
  import java.lang.reflect.Array;
  
  /**
*************** import java.lang.reflect.Array;
*** 63,69 ****
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see List
   * @see ArrayList
   * @see Vector
--- 63,69 ----
   *
   * @author Original author unknown
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see List
   * @see ArrayList
   * @see Vector
*************** public class LinkedList extends Abstract
*** 750,756 ****
     * 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
    {
--- 750,756 ----
     * 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
    {
diff -Nrcpad gcc-3.4.3/libjava/java/util/List.java gcc-4.0.0/libjava/java/util/List.java
*** gcc-3.4.3/libjava/java/util/List.java	Tue Jun 18 15:39:55 2002
--- gcc-4.0.0/libjava/java/util/List.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* List.java -- An ordered collection which allows indexed access
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 66,72 ****
   * hashCode or equals.
   *
   * @author Original author unknown
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Collection
   * @see Set
   * @see ArrayList
--- 66,72 ----
   * hashCode or equals.
   *
   * @author Original author unknown
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Collection
   * @see Set
   * @see ArrayList
*************** public interface List extends Collection
*** 97,102 ****
--- 97,104 ----
     *         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);
  
*************** public interface List extends Collection
*** 113,118 ****
--- 115,122 ----
     *         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);
  
*************** public interface List extends Collection
*** 134,139 ****
--- 138,145 ----
     *         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)
     */
*************** public interface List extends Collection
*** 155,160 ****
--- 161,168 ----
     * @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);
*************** public interface List extends Collection
*** 175,180 ****
--- 183,192 ----
     *
     * @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);
  
*************** public interface List extends Collection
*** 184,189 ****
--- 196,205 ----
     * @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);
*************** while (i.hasNext())
*** 240,246 ****
     *
     * @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
     */
    int indexOf(Object o);
  
--- 256,266 ----
     *
     * @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);
  
*************** while (i.hasNext())
*** 263,269 ****
     * 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
     */
    int lastIndexOf(Object o);
  
--- 283,293 ----
     * 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);
  
*************** while (i.hasNext())
*** 310,315 ****
--- 334,343 ----
     *         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);
  
*************** while (i.hasNext())
*** 322,327 ****
--- 350,359 ----
     * @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)
     */
*************** while (i.hasNext())
*** 337,342 ****
--- 369,378 ----
     * @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)
     */
*************** while (i.hasNext())
*** 355,360 ****
--- 391,398 ----
     *         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);
  
*************** while (i.hasNext())
*** 381,388 ****
     * @return a List backed by a subsection of this list
     * @throws IndexOutOfBoundsException if fromIndex &lt; 0
     *         || toIndex &gt; size() || fromIndex &gt; toIndex
-    * @throws IllegalArgumentException if fromIndex &gt; toIndex (according to
-    *         AbstractList). Don't you love Sun's inconsistent specifications?
     */
    List subList(int fromIndex, int toIndex);
  
--- 419,424 ----
diff -Nrcpad gcc-3.4.3/libjava/java/util/ListIterator.java gcc-4.0.0/libjava/java/util/ListIterator.java
*** gcc-3.4.3/libjava/java/util/ListIterator.java	Tue Jan 22 22:40:39 2002
--- gcc-4.0.0/libjava/java/util/ListIterator.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* ListIterator.java -- Extended Iterator for iterating over ordered lists
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 51,57 ****
   * or <code>previous</code>.
   *
   * @author Original author unknown
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Collection
   * @see List
   * @see Iterator
--- 51,57 ----
   * or <code>previous</code>.
   *
   * @author Original author unknown
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Collection
   * @see List
   * @see Iterator
*************** public interface ListIterator extends It
*** 127,138 ****
     * by nextIndex() and previousIndex() are incremented.
     *
     * @param o the object to insert into the list
!    * @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 UnsupportedOperationException if this ListIterator does not
!    *         support the add operation
     */
    void add(Object o);
  
--- 127,138 ----
     * 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);
  
diff -Nrcpad gcc-3.4.3/libjava/java/util/ListResourceBundle.java gcc-4.0.0/libjava/java/util/ListResourceBundle.java
*** gcc-3.4.3/libjava/java/util/ListResourceBundle.java	Tue Jun 18 15:39:55 2002
--- gcc-4.0.0/libjava/java/util/ListResourceBundle.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* ListResourceBundle -- a resource bundle build around a list
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 72,78 ****
  }</pre>
   *
   * @author Jochen Hoenicke
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Locale
   * @see PropertyResourceBundle
   * @since 1.1
--- 72,78 ----
  }</pre>
   *
   * @author Jochen Hoenicke
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Locale
   * @see PropertyResourceBundle
   * @since 1.1
diff -Nrcpad gcc-3.4.3/libjava/java/util/Locale.java gcc-4.0.0/libjava/java/util/Locale.java
*** gcc-3.4.3/libjava/java/util/Locale.java	Thu Sep 18 06:34:00 2003
--- gcc-4.0.0/libjava/java/util/Locale.java	Mon Jan 10 18:26:59 2005
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  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.Serializable;
*** 74,80 ****
   * @see java.text.Collator
   * @author Jochen Hoenicke
   * @author Paul Fisher
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @since 1.1
   * @status updated to 1.4
   */
--- 75,81 ----
   * @see java.text.Collator
   * @author Jochen Hoenicke
   * @author Paul Fisher
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @since 1.1
   * @status updated to 1.4
   */
*************** public final class Locale implements Ser
*** 186,192 ****
     *
     * @serial should be -1 in serial streams
     */
!   private int hashcode;
  
    /**
     * The default locale. Except for during bootstrapping, this should never be
--- 187,193 ----
     *
     * @serial should be -1 in serial streams
     */
!   private transient int hashcode;
  
    /**
     * The default locale. Except for during bootstrapping, this should never be
*************** public final class Locale implements Ser
*** 233,239 ****
        {
          language = convertLanguage(language).intern();
          country = country.toUpperCase().intern();
!         variant = variant.toUpperCase().intern();
        }
      this.language = language;
      this.country = country;
--- 234,240 ----
        {
          language = convertLanguage(language).intern();
          country = country.toUpperCase().intern();
!         variant = variant.intern();
        }
      this.language = language;
      this.country = country;
*************** public final class Locale implements Ser
*** 321,327 ****
     * Returns a list of all 2-letter uppercase country codes as defined
     * in ISO 3166.
     *
!    * @return a list of acceptible country codes
     */
    public static String[] getISOCountries()
    {
--- 322,328 ----
     * 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()
    {
*************** public final class Locale implements Ser
*** 416,422 ****
     * @return the string representation of this Locale
     * @see #getDisplayName()
     */
!   public final String toString()
    {
      if (language.length() == 0 && country.length() == 0)
        return "";
--- 417,423 ----
     * @return the string representation of this Locale
     * @see #getDisplayName()
     */
!   public String toString()
    {
      if (language.length() == 0 && country.length() == 0)
        return "";
*************** public final class Locale implements Ser
*** 436,441 ****
--- 437,443 ----
     */
    public String getISO3Language()
    {
+     // We know all strings are interned so we can use '==' for better performance.
      if (language == "")
        return "";
      int index
*************** public final class Locale implements Ser
*** 472,477 ****
--- 474,480 ----
     */
    public String getISO3Country()
    {
+     // We know all strings are interned so we can use '==' for better performance.
      if (country == "")
        return "";
      int index
*************** public final class Locale implements Ser
*** 520,526 ****
     * @return the language name of this locale localized to the default locale,
     *         with the ISO code as backup
     */
!   public final String getDisplayLanguage()
    {
      return getDisplayLanguage(defaultLocale);
    }
--- 523,529 ----
     * @return the language name of this locale localized to the default locale,
     *         with the ISO code as backup
     */
!   public String getDisplayLanguage()
    {
      return getDisplayLanguage(defaultLocale);
    }
*************** public final class Locale implements Ser
*** 558,564 ****
     * @return the country name of this locale localized to the given locale,
     *         with the ISO code as backup
     */
!   public final String getDisplayCountry()
    {
      return getDisplayCountry(defaultLocale);
    }
--- 561,567 ----
     * @return the country name of this locale localized to the given locale,
     *         with the ISO code as backup
     */
!   public String getDisplayCountry()
    {
      return getDisplayCountry(defaultLocale);
    }
*************** public final class Locale implements Ser
*** 596,602 ****
     * @return the variant code of this locale localized to the given locale,
     *         with the ISO code as backup
     */
!   public final String getDisplayVariant()
    {
      return getDisplayVariant(defaultLocale);
    }
--- 599,605 ----
     * @return the variant code of this locale localized to the given locale,
     *         with the ISO code as backup
     */
!   public String getDisplayVariant()
    {
      return getDisplayVariant(defaultLocale);
    }
*************** public final class Locale implements Ser
*** 635,641 ****
     *
     * @return String version of this locale, suitable for display to the user
     */
!   public final String getDisplayName()
    {
      return getDisplayName(defaultLocale);
    }
--- 638,644 ----
     *
     * @return String version of this locale, suitable for display to the user
     */
!   public String getDisplayName()
    {
      return getDisplayName(defaultLocale);
    }
*************** public final class Locale implements Ser
*** 707,716 ****
     *
     * @return the hashcode
     */
!   public synchronized int hashCode()
    {
-     // This method is synchronized because writeObject() might reset
-     // the hashcode.
      return hashcode;
    }
  
--- 710,717 ----
     *
     * @return the hashcode
     */
!   public int hashCode()
    {
      return hashcode;
    }
  
*************** public final class Locale implements Ser
*** 729,738 ****
        return false;
      Locale l = (Locale) obj;
  
-     // ??? We might also want to add:
-     //        hashCode() == l.hashCode()
-     // But this is a synchronized method.  Is the overhead worth it?
-     // Measure this to make a decision.
      return (language == l.language
              && country == l.country
              && variant == l.variant);
--- 730,735 ----
*************** public final class Locale implements Ser
*** 743,759 ****
     *
     * @param output the stream to write to
     * @throws IOException if the write fails
!    * @serialData the hashcode should always be written as -1, and recomputed
!    *      when reading it back
     */
!   private synchronized void writeObject(ObjectOutputStream output)
      throws IOException
    {
!     // Synchronized so that hashCode() doesn't get wrong value.
!     int tmpHashcode = hashcode;
!     hashcode = -1;
!     output.defaultWriteObject();
!     hashcode = tmpHashcode;
    }
  
    /**
--- 740,758 ----
     *
     * @param output 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);
    }
  
    /**
*************** public final class Locale implements Ser
*** 764,773 ****
     * @throws ClassNotFoundException if reading fails
     * @serialData the hashCode is always invalid and must be recomputed
     */
!   private void readObject(ObjectInputStream input)
      throws IOException, ClassNotFoundException
    {
!     input.defaultReadObject();
      hashcode = language.hashCode() ^ country.hashCode() ^ variant.hashCode();
    }
  } // class Locale
--- 763,775 ----
     * @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-3.4.3/libjava/java/util/Map.java gcc-4.0.0/libjava/java/util/Map.java
*** gcc-3.4.3/libjava/java/util/Map.java	Sat Oct 11 18:52:30 2003
--- gcc-4.0.0/libjava/java/util/Map.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* Map.java: interface Map -- An object that maps keys to values
               interface Map.Entry -- an Entry in a Map
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.util;
*** 68,74 ****
   * normally fail with a non-empty argument.
   *
   * @author Original author unknown
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see HashMap
   * @see TreeMap
   * @see Hashtable
--- 68,74 ----
   * normally fail with a non-empty argument.
   *
   * @author Original author unknown
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see HashMap
   * @see TreeMap
   * @see Hashtable
*************** public interface Map
*** 106,111 ****
--- 106,115 ----
     *
     * @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);
  
*************** public interface Map
*** 164,170 ****
     * @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)
     */
    Object put(Object key, Object value);
--- 168,175 ----
     * @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);
*************** public interface Map
*** 222,231 ****
     * 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
     */
!   Object remove(Object o);
  
    /**
     * Returns the number of key-value mappings in the map. If there are more
--- 227,240 ----
     * 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
*************** public interface Map
*** 258,270 ****
     * 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
     */
!   static interface Entry
    {
      /**
       * Get the key corresponding to this entry.
--- 267,279 ----
     * 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.
diff -Nrcpad gcc-3.4.3/libjava/java/util/MissingResourceException.java gcc-4.0.0/libjava/java/util/MissingResourceException.java
*** gcc-3.4.3/libjava/java/util/MissingResourceException.java	Sun Jun 16 21:15:42 2002
--- gcc-4.0.0/libjava/java/util/MissingResourceException.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* MissingResourceException.java -- thrown for a missing resource
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 42,48 ****
   * 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
--- 42,48 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/NoSuchElementException.java gcc-4.0.0/libjava/java/util/NoSuchElementException.java
*** gcc-3.4.3/libjava/java/util/NoSuchElementException.java	Tue Jan 22 22:40:39 2002
--- gcc-4.0.0/libjava/java/util/NoSuchElementException.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* NoSuchElementException.java -- Attempt to access element that does not exist
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 51,58 ****
   * 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
--- 51,58 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/Observable.java gcc-4.0.0/libjava/java/util/Observable.java
*** gcc-3.4.3/libjava/java/util/Observable.java	Tue Jun 18 15:39:56 2002
--- gcc-4.0.0/libjava/java/util/Observable.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Observable.java -- an object to be observed
!    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 47,54 ****
   * 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
   */
--- 47,54 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/util/Observer.java gcc-4.0.0/libjava/java/util/Observer.java
*** gcc-3.4.3/libjava/java/util/Observer.java	Sat Oct 11 18:52:30 2003
--- gcc-4.0.0/libjava/java/util/Observer.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Observer.java -- an object that will be informed of changes in an Observable
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 42,48 ****
   * 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
   */
--- 42,48 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/util/Properties.java gcc-4.0.0/libjava/java/util/Properties.java
*** gcc-3.4.3/libjava/java/util/Properties.java	Tue Aug 26 22:42:36 2003
--- gcc-4.0.0/libjava/java/util/Properties.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Properties.java -- a set of persistent properties
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,51 ****
  
  package java.util;
  
  import java.io.IOException;
  import java.io.InputStream;
- import java.io.BufferedReader;
  import java.io.InputStreamReader;
  import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.io.PrintStream;
  import java.io.OutputStreamWriter;
  
  /**
   * A set of persistent properties, which can be saved or loaded from a stream.
--- 38,51 ----
  
  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;
  
  /**
   * A set of persistent properties, which can be saved or loaded from a stream.
*************** s16=1,3</pre>
*** 86,92 ****
   * 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
   */
--- 86,92 ----
   * 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
   */
*************** label   = Name:\\u0020</pre>
*** 188,204 ****
        {
          char c = 0;
          int pos = 0;
!         // If empty line or begins with a comment character, skip this line.
!         if (line.length() == 0
! 	    || line.charAt(0) == '#' || line.charAt(0) == '!')
!           continue;
! 
          while (pos < line.length()
                 && Character.isWhitespace(c = line.charAt(pos)))
            pos++;
  
!         // If line is empty skip this line.
!         if (pos == line.length())
            continue;
  
          // The characters up to the next Whitespace, ':', or '='
--- 188,201 ----
        {
          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 '='
diff -Nrcpad gcc-3.4.3/libjava/java/util/PropertyPermission.java gcc-4.0.0/libjava/java/util/PropertyPermission.java
*** gcc-3.4.3/libjava/java/util/PropertyPermission.java	Tue Apr 29 11:36:34 2003
--- gcc-4.0.0/libjava/java/util/PropertyPermission.java	Mon Feb 21 16:12:17 2005
***************
*** 1,5 ****
  /* PropertyPermission.java -- permission to get and set System properties
!    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,50 ****
  
  package java.util;
  
! import java.security.Permission;
! import java.security.BasicPermission;
! import java.security.PermissionCollection;
! import java.io.ObjectStreamField;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
! import java.io.IOException;
  
  /**
   * This class represents the permission to access and modify a property.<br>
--- 38,50 ----
  
  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>
*************** public final class PropertyPermission ex
*** 154,170 ****
        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);
!     }
    }
  
    /**
--- 154,171 ----
        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);
!       }
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/util/PropertyPermissionCollection.java gcc-4.0.0/libjava/java/util/PropertyPermissionCollection.java
*** gcc-3.4.3/libjava/java/util/PropertyPermissionCollection.java	Tue Jun 18 15:39:59 2002
--- gcc-4.0.0/libjava/java/util/PropertyPermissionCollection.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* PropertyPermissionCollection.java -- a collection of PropertyPermissions
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PropertyPermissionCollection.java -- a collection of PropertyPermissions
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.security.PermissionCollectio
*** 47,53 ****
   * 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
--- 47,53 ----
   * 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
*************** class PropertyPermissionCollection exten
*** 103,112 ****
    /**
     * Returns true if this collection implies the given permission. This even
     * returns true for this case:
!    * <p>
! <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
--- 103,114 ----
    /**
     * 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
*************** collection.implies(new PropertyPermissio
*** 145,151 ****
                return true;
            }
  
!         prefixLength = name.lastIndexOf('.', prefixLength);
          if (prefixLength < 0)
            return false;
          name = name.substring(0, prefixLength + 1) + '*';
--- 147,153 ----
                return true;
            }
  
!         prefixLength = name.lastIndexOf('.', prefixLength - 1);
          if (prefixLength < 0)
            return false;
          name = name.substring(0, prefixLength + 1) + '*';
diff -Nrcpad gcc-3.4.3/libjava/java/util/PropertyResourceBundle.java gcc-4.0.0/libjava/java/util/PropertyResourceBundle.java
*** gcc-3.4.3/libjava/java/util/PropertyResourceBundle.java	Tue Aug 26 22:42:37 2003
--- gcc-4.0.0/libjava/java/util/PropertyResourceBundle.java	Tue Apr 20 14:45:06 2004
*************** import java.io.InputStream;
*** 54,60 ****
   *
   * 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>
   *
--- 54,60 ----
   *
   * 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>
   *
diff -Nrcpad gcc-3.4.3/libjava/java/util/RandomAccess.java gcc-4.0.0/libjava/java/util/RandomAccess.java
*** gcc-3.4.3/libjava/java/util/RandomAccess.java	Tue Jan 22 22:40:39 2002
--- gcc-4.0.0/libjava/java/util/RandomAccess.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* RandomAccess.java -- A tagging interface that lists can use to tailor
     operations to the correct algorithm
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.util;
*** 53,59 ****
   * <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
--- 53,59 ----
   * <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
diff -Nrcpad gcc-3.4.3/libjava/java/util/ResourceBundle.java gcc-4.0.0/libjava/java/util/ResourceBundle.java
*** gcc-3.4.3/libjava/java/util/ResourceBundle.java	Tue Apr 29 11:36:34 2003
--- gcc-4.0.0/libjava/java/util/ResourceBundle.java	Thu Nov 25 19:20:17 2004
***************
*** 1,5 ****
  /* ResourceBundle -- aids in loading resource bundles
!    Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* ResourceBundle -- aids in loading resource bundles
!    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,48 ****
  
  package java.util;
  
  import java.lang.ref.Reference;
  import java.lang.ref.SoftReference;
- import java.io.InputStream;
- import java.io.IOException;
- import gnu.classpath.Configuration;
  
  /**
   * A resource bundle contains locale-specific data. If you need localized
--- 39,48 ----
  
  package java.util;
  
+ import java.io.IOException;
+ import java.io.InputStream;
  import java.lang.ref.Reference;
  import java.lang.ref.SoftReference;
  
  /**
   * A resource bundle contains locale-specific data. If you need localized
*************** import gnu.classpath.Configuration;
*** 51,57 ****
   * <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>).
   *
--- 51,57 ----
   * <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>).
   *
*************** public abstract class ResourceBundle
*** 106,117 ****
    private static native ClassLoader getCallingClassLoader();
  
    /**
!    * The resource bundle cache. This is a two-level hash map: The key
!    * is the class loader, the value is a new HashMap. The key of this
!    * second hash map is the localized name, the value is a soft
!    * references to the resource bundle.
     */
!   private static Map resourceBundleCache;
  
    /**
     * The last default Locale we saw. If this ever changes then we have to
--- 106,114 ----
    private static native ClassLoader getCallingClassLoader();
  
    /**
!    * The resource bundle cache.
     */
!   private static Map bundleCache;
  
    /**
     * The last default Locale we saw. If this ever changes then we have to
*************** public abstract class ResourceBundle
*** 173,187 ****
    public final Object getObject(String key)
    {
      for (ResourceBundle bundle = this; bundle != null; bundle = bundle.parent)
!       try
!         {
!           Object o = bundle.handleGetObject(key);
!           if (o != null)
!             return o;
!         }
!       catch (MissingResourceException ex)
!         {
!         }
   
      throw new MissingResourceException("Key not found", getClass().getName(),
  				       key);
--- 170,180 ----
    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;
!       }
   
      throw new MissingResourceException("Key not found", getClass().getName(),
  				       key);
*************** public abstract class ResourceBundle
*** 221,230 ****
     * @throws MissingResourceException if the resource bundle can't be found
     * @throws NullPointerException if baseName is null
     */
!   public static final ResourceBundle getBundle(String baseName)
    {
!     return getBundle(baseName, Locale.getDefault(),
!                      getCallingClassLoader());
    }
  
    /**
--- 214,225 ----
     * @throws MissingResourceException if the resource bundle can't be found
     * @throws NullPointerException if baseName is null
     */
!   public static ResourceBundle getBundle(String baseName)
    {
!     ClassLoader cl = getCallingClassLoader();
!     if (cl == null)
!       cl = ClassLoader.getSystemClassLoader();
!     return getBundle(baseName, Locale.getDefault(), cl);
    }
  
    /**
*************** public abstract class ResourceBundle
*** 239,249 ****
     * @throws MissingResourceException if the resource bundle can't be found
     * @throws NullPointerException if baseName or locale is null
     */
!   public static final ResourceBundle getBundle(String baseName,
!                                                Locale locale)
    {
!     return getBundle(baseName, locale, getCallingClassLoader());
    }
  
    /**
     * Get the appropriate ResourceBundle for the given locale. The following
--- 234,295 ----
     * @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 = 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
*************** public abstract class ResourceBundle
*** 251,268 ****
     *
     * <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:<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:<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>
--- 297,318 ----
     *
     * <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>
*************** public abstract class ResourceBundle
*** 277,283 ****
     * 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>For example, suppose the following class and property files are
     * provided: MyResources.class, MyResources_fr_CH.properties,
--- 327,333 ----
     * 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,
*************** public abstract class ResourceBundle
*** 286,295 ****
     * 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>Calling getBundle with the shown locale argument values instantiates
!    * resource bundles from the following sources:<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
--- 336,347 ----
     * 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
*************** public abstract class ResourceBundle
*** 301,308 ****
     * <li>Locale("es", "ES"): result MyResources_es_ES.class, parent
     *   MyResources.class</li>
     * </ul>
!    * The file MyResources_fr_CH.properties is never used because it is hidden
!    * by MyResources_fr_CH.class.
     *
     * @param baseName the name of the ResourceBundle
     * @param locale A locale
--- 353,361 ----
     * <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
*************** public abstract class ResourceBundle
*** 314,395 ****
     */
    // This method is synchronized so that the cache is properly
    // handled.
!   public static final synchronized ResourceBundle getBundle
      (String baseName, Locale locale, ClassLoader classLoader)
    {
!     // This implementation searches the bundle in the reverse direction
!     // and builds the parent chain on the fly.
      Locale defaultLocale = Locale.getDefault();
      if (defaultLocale != lastDefaultLocale)
        {
! 	resourceBundleCache = new HashMap();
  	lastDefaultLocale = defaultLocale;
        }
-     HashMap cache = (HashMap) resourceBundleCache.get(classLoader);
-     StringBuffer sb = new StringBuffer(60);
-     sb.append(baseName).append('_').append(locale);
-     String name = sb.toString();
  
!     if (cache == null)
        {
!         cache = new HashMap();
!         resourceBundleCache.put(classLoader, cache);
        }
!     else if (cache.containsKey(name))
        {
! 	Reference ref = (Reference) cache.get(name);
! 	ResourceBundle result = null;
! 	// If REF is null, that means that we added a `null' value to
! 	// the hash map.  That means we failed to find the bundle
! 	// previously, and we cached that fact.  The JDK does this, so
! 	// it must be ok.
! 	if (ref == null)
! 	  throw new MissingResourceException("Bundle " + baseName
! 					     + " not found",
! 					     baseName, "");
! 	else
! 	  {
! 	    ResourceBundle rb = (ResourceBundle) ref.get();
! 	    if (rb != null)
! 	      {
! 		// RB should already have the right parent, except if
! 		// something very strange happened.
! 		return rb;
! 	      }
! 	    // If RB is null, then we previously found it but it was
! 	    // collected.  So we try again.
! 	  }
        }
  
!     // It is ok if this returns null.  We aren't required to have the
!     // base bundle.
!     ResourceBundle baseBundle = tryBundle(baseName, emptyLocale,
!                                           classLoader, null, cache);
  
!     // Now use our locale, followed by the default locale.  We only
!     // need to try the default locale if our locale is different, and
!     // if our locale failed to yield a result other than the base
!     // bundle.
!     ResourceBundle bundle = tryLocalBundle(baseName, locale,
!                                            classLoader, baseBundle, cache);
!     if (bundle == baseBundle && !locale.equals(defaultLocale))
!       {
! 	bundle = tryLocalBundle(baseName, defaultLocale,
! 				classLoader, baseBundle, cache);
! 	// We need to record that the argument locale maps to the
! 	// bundle we just found.  If we didn't find a bundle, record
! 	// that instead.
! 	if (bundle == null)
! 	  cache.put(name, null);
  	else
! 	  cache.put(name, new SoftReference(bundle));
        }
  
!     if (bundle == null)
!       throw new MissingResourceException("Bundle " + baseName + " not found",
! 					 baseName, "");
! 
!     return bundle;
    }
  
    /**
--- 367,426 ----
     */
    // 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",
! 				       baseName, "");
    }
  
    /**
*************** public abstract class ResourceBundle
*** 418,462 ****
     * Tries to load a class or a property file with the specified name.
     *
     * @param localizedName the name
-    * @param locale the locale, that must be used exactly
     * @param classloader the classloader
-    * @param bundle the backup (parent) bundle
     * @return the resource bundle if it was loaded, otherwise the backup
     */
!   private static final ResourceBundle tryBundle(String localizedName,
!                                                 Locale locale,
!                                                 ClassLoader classloader,
!                                                 ResourceBundle bundle,
!                                                 HashMap cache)
    {
!     // First look into the cache.
!     if (cache.containsKey(localizedName))
!       {
! 	Reference ref = (Reference) cache.get(localizedName);
! 	ResourceBundle result = null;
! 	// If REF is null, that means that we added a `null' value to
! 	// the hash map.  That means we failed to find the bundle
! 	// previously, and we cached that fact.  The JDK does this, so
! 	// it must be ok.
! 	if (ref == null)
! 	  return null;
! 	else
! 	  {
! 	    ResourceBundle rb = (ResourceBundle) ref.get();
! 	    if (rb != null)
! 	      {
! 		// RB should already have the right parent, except if
! 		// something very strange happened.
! 		return rb;
! 	      }
! 	    // If RB is null, then we previously found it but it was
! 	    // collected.  So we try again.
! 	  }
!       }
! 
!     // foundBundle holds exact matches for the localizedName resource
!     // bundle, which may later be cached.
!     ResourceBundle foundBundle = null;
      try
        {
          Class rbClass;
--- 449,461 ----
     * 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;
*************** public abstract class ResourceBundle
*** 464,562 ****
            rbClass = Class.forName(localizedName);
          else
            rbClass = classloader.loadClass(localizedName);
!         foundBundle = (ResourceBundle) rbClass.newInstance();
!         foundBundle.parent = bundle;
!         foundBundle.locale = locale;
!       }
!     catch (Exception ex)
!       {
!         // ignore them all
! 	foundBundle = null;
        }
!     if (foundBundle == null)
        {
  	try
  	  {
  	    InputStream is;
! 	    final String resourceName
  	      = localizedName.replace('.', '/') + ".properties";
  	    if (classloader == null)
  	      is = ClassLoader.getSystemResourceAsStream(resourceName);
  	    else
  	      is = classloader.getResourceAsStream(resourceName);
  	    if (is != null)
! 	      {
! 		foundBundle = new PropertyResourceBundle(is);
! 		foundBundle.parent = bundle;
! 		foundBundle.locale = locale;
! 	      }
  	  }
  	catch (IOException ex)
  	  {
  	  }
        }
  
!     // Put the result into the hash table.  If we didn't find anything
!     // here, we record our parent bundle.  If we record `null' that means
!     // nothing, not even the base, was found.
!     if (foundBundle == null)
!       foundBundle = bundle;
!     if (foundBundle == null)
!       cache.put(localizedName, null);
!     else
!       cache.put(localizedName, new SoftReference(foundBundle));
!     return foundBundle;
    }
  
    /**
     * Tries to load a the bundle for a given locale, also loads the backup
     * locales with the same language.
     *
!    * @param name the name
     * @param locale the locale
     * @param classloader the classloader
     * @param bundle the backup (parent) bundle
     * @return the resource bundle if it was loaded, otherwise the backup
     */
!   private static final ResourceBundle tryLocalBundle(String baseName,
! 						     Locale locale,
!                                                      ClassLoader classloader,
!                                                      ResourceBundle bundle,
!                                                      HashMap cache)
    {
!     final String language = locale.getLanguage();
!     final String country = locale.getCountry();
!     final String variant = locale.getVariant();
  
!     StringBuffer sb = new StringBuffer(60);
!     sb.append(baseName);
!     sb.append('_');
  
      if (language.length() > 0)
        {
  	sb.append(language);
! 	bundle = tryBundle(sb.toString(), new Locale(language),
! 			   classloader, bundle, cache);
!       }
!     // If LANGUAGE was empty, we still need to try the other
!     // components, and the `_' is required.
!     sb.append('_');
! 
!     if (country.length() > 0)
!       {
! 	sb.append(country);
! 	bundle = tryBundle(sb.toString(), new Locale(language, country),
! 			   classloader, bundle, cache);
        }
-     sb.append('_');
  
!     if (variant.length() > 0)
        {
! 	sb.append(variant);
! 	bundle = tryBundle(sb.toString(), locale,
! 			   classloader, bundle, cache);
        }
! 
!     return bundle;
    }
  }
--- 463,580 ----
            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, "");
+ 	    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 bundle the backup (parent) bundle
+    * @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-3.4.3/libjava/java/util/Set.java gcc-4.0.0/libjava/java/util/Set.java
*** gcc-3.4.3/libjava/java/util/Set.java	Tue Jan 22 22:40:39 2002
--- gcc-4.0.0/libjava/java/util/Set.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Set.java -- A collection that prohibits duplicates
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Set.java -- A collection that prohibits duplicates
!    Copyright (C) 1998, 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.util;
*** 53,59 ****
   * 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
--- 53,59 ----
   * 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
*************** public interface Set extends Collection
*** 118,123 ****
--- 118,127 ----
     *
     * @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);
  
*************** public interface Set extends Collection
*** 129,134 ****
--- 133,142 ----
     * @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);
*************** public interface Set extends Collection
*** 148,153 ****
--- 156,162 ----
     * 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();
  
*************** public interface Set extends Collection
*** 174,179 ****
--- 183,192 ----
     * @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);
  
*************** public interface Set extends Collection
*** 186,191 ****
--- 199,208 ----
     * @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);
*************** public interface Set extends Collection
*** 199,204 ****
--- 216,225 ----
     * @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);
diff -Nrcpad gcc-3.4.3/libjava/java/util/SimpleTimeZone.java gcc-4.0.0/libjava/java/util/SimpleTimeZone.java
*** gcc-3.4.3/libjava/java/util/SimpleTimeZone.java	Fri Dec 19 11:01:05 2003
--- gcc-4.0.0/libjava/java/util/SimpleTimeZone.java	Tue Feb 22 13:02:11 2005
***************
*** 1,5 ****
  /* java.util.SimpleTimeZone
!    Copyright (C) 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* java.util.SimpleTimeZone
!    Copyright (C) 1998, 1999, 2000, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,43 ****
--- 38,44 ----
  
  package java.util;
  
+ 
  /**
   * This class represents a simple time zone offset and handles
   * daylight savings.  It can only handle one daylight savings rule, so
*************** package java.util;
*** 49,62 ****
   * lying in the AD era.
   *
   * @see Calendar
!  * @see GregorianCalender 
   * @author Jochen Hoenicke
   */
  public class SimpleTimeZone extends TimeZone
  {
    /**
     * The raw time zone offset in milliseconds to GMT, ignoring
!    * daylight savings.  
     * @serial
     */
    private int rawOffset;
--- 50,63 ----
   * lying in the AD era.
   *
   * @see Calendar
!  * @see GregorianCalender
   * @author Jochen Hoenicke
   */
  public class SimpleTimeZone extends TimeZone
  {
    /**
     * The raw time zone offset in milliseconds to GMT, ignoring
!    * daylight savings.
     * @serial
     */
    private int rawOffset;
*************** public class SimpleTimeZone extends Time
*** 70,92 ****
    /**
     * 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.
     * @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>
--- 71,92 ----
    /**
     * 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>
*************** public class SimpleTimeZone extends Time
*** 119,125 ****
  
    /**
     * The month in which daylight savings start.  This is one of the
!    * constants Calendar.JANUARY, ..., Calendar.DECEMBER.  
     * @serial
     */
    private int startMonth;
--- 119,125 ----
  
    /**
     * The month in which daylight savings start.  This is one of the
!    * constants Calendar.JANUARY, ..., Calendar.DECEMBER.
     * @serial
     */
    private int startMonth;
*************** public class SimpleTimeZone extends Time
*** 128,157 ****
     * 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;
!    
    /**
     * The month in which daylight savings ends.  This is one of the
!    * constants Calendar.JANUARY, ..., Calendar.DECEMBER.  
     * @serial
!    */   
    private int endMonth;
  
    /**
--- 128,165 ----
     * 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;
  
    /**
*************** public class SimpleTimeZone extends Time
*** 159,165 ****
     * It can take the same values as startMode.
     * @serial
     * @see #startMode
!    */   
    private int endMode;
  
    /**
--- 167,173 ----
     * It can take the same values as startMode.
     * @serial
     * @see #startMode
!    */
    private int endMode;
  
    /**
*************** public class SimpleTimeZone extends Time
*** 168,191 ****
     * @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 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
--- 176,206 ----
     * @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
*************** public class SimpleTimeZone extends Time
*** 195,202 ****
     * @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.
--- 210,220 ----
     * @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.
*************** public class SimpleTimeZone extends Time
*** 210,215 ****
--- 228,234 ----
     * 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.
*************** public class SimpleTimeZone extends Time
*** 217,233 ****
     * When streaming out this class it is always written in the latest
     * version.
     * @serial
!    * @since JDK1.1.4 
     */
!   private int serialVersionOnStream = 1;
! 
    private static final long serialVersionUID = -403250971215465050L;
  
    /**
     * 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)
    {
--- 236,268 ----
     * 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)
    {
*************** public class SimpleTimeZone extends Time
*** 241,247 ****
     * 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>
--- 276,282 ----
     * 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>
*************** public class SimpleTimeZone extends Time
*** 264,275 ****
     * 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
--- 299,310 ----
     * 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
*************** public class SimpleTimeZone extends Time
*** 280,305 ****
     * @param startTime A time in millis in standard time.
     * @param endMonth The end month of daylight savings; use the
     * constants in Calendar.
!    * @param endday 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.  */
!   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;
    }
  
--- 315,340 ----
     * @param startTime A time in millis in standard time.
     * @param endMonth The end month of daylight savings; use the
     * constants in Calendar.
!    * @param endday 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;
    }
  
*************** public class SimpleTimeZone extends Time
*** 310,325 ****
     *
     * @param dstSavings the amount of savings for daylight savings
     * time in milliseconds.  This must be positive.
     */
!   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;
    }
--- 345,401 ----
     *
     * @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;
    }
*************** public class SimpleTimeZone extends Time
*** 349,354 ****
--- 425,433 ----
     */
    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)
        {
*************** public class SimpleTimeZone extends Time
*** 377,383 ****
        }
    }
  
- 
    /**
     * Sets the daylight savings start rule.  You must also set the
     * end rule with <code>setEndRule</code> or the result of
--- 456,461 ----
*************** public class SimpleTimeZone extends Time
*** 396,417 ****
    {
      this.startMode = checkRule(month, day, dayOfWeek);
      this.startMonth = month;
!     // FIXME: XXX: JDK 1.2 allows negative values and has 2 new variations
!     // of this method.
!     this.startDay = Math.abs(day);
      this.startDayOfWeek = Math.abs(dayOfWeek);
!     this.startTime = time;
      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 rawOffset The time offset from GMT.
-    * @param id  The identifier of this time zone.
     * @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.
--- 474,562 ----
    {
      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.
*************** public class SimpleTimeZone extends Time
*** 422,437 ****
    {
      this.endMode = checkRule(month, day, dayOfWeek);
      this.endMonth = month;
!     // FIXME: XXX: JDK 1.2 allows negative values and has 2 new variations
!     // of this method.
!     this.endDay = Math.abs(day);
      this.endDayOfWeek = Math.abs(dayOfWeek);
!     this.endTime = time;
      useDaylight = true;
    }
  
    /**
!    * 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.
     *
--- 567,653 ----
    {
      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
!    */
!   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 dayOfWeek A day of week, when daylight savings ends.
!    * @param time A time in millis in standard time.
!    * @see #setStartRule
!    */
!   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.
     *
*************** public class SimpleTimeZone extends Time
*** 441,487 ****
     * <code>offset = cal.get(Calendar.ZONE_OFFSET)
     * + cal.get(Calendar.DST_OFFSET);</code>
     *
-    * You could also use in
-    *
     * This version doesn't suffer this inaccuracy.
     *
     * @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 be matching the
!    * other fields.
     * @param millis the millis in the day (in local standard time)
!    * @return the time zone offset in milliseconds.  */
!   public int getOffset(int era, int year, int month,
! 		       int day, int dayOfWeek, int millis)
    {
      // 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,
! 				     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;
    }
--- 657,711 ----
     * <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;
    }
*************** public class SimpleTimeZone extends Time
*** 510,516 ****
     * 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()
--- 734,740 ----
     * 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()
*************** public class SimpleTimeZone extends Time
*** 530,536 ****
    {
      if (dstSavings <= 0)
        throw new IllegalArgumentException("illegal value for dstSavings");
!     
      this.dstSavings = dstSavings;
    }
  
--- 754,760 ----
    {
      if (dstSavings <= 0)
        throw new IllegalArgumentException("illegal value for dstSavings");
! 
      this.dstSavings = dstSavings;
    }
  
*************** public class SimpleTimeZone extends Time
*** 544,572 ****
    }
  
    /**
!    * Returns the number of days in the given month.  It does always
!    * use the Gregorian leap year rule.  
     * @param month The month, zero based; use one of the Calendar constants.
     * @param year  The year.
     */
    private int getDaysInMonth(int month, int year)
    {
-     // Most of this is copied from GregorianCalendar.getActualMaximum()
      if (month == Calendar.FEBRUARY)
        {
! 	return ((year & 3) == 0 && (year % 100 != 0 || year % 400 == 0))
! 	  ? 29 : 28;
        }
-     else if (month < Calendar.AUGUST)
-         return 31 - (month & 1);
      else
!       return 30 + (month & 1);
    }
  
    /**
     * 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 cheking).
     * @param calMonth the month of the date to check.
     * @param calDay the day of month of the date to check.
     * @param calDayOfWeek the day of week of the date to check.
--- 768,801 ----
    }
  
    /**
!    * 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 calDay the day of month of the date to check.
     * @param calDayOfWeek the day of week of the date to check.
*************** public class SimpleTimeZone extends Time
*** 574,596 ****
     * @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.
--- 803,821 ----
     * @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.
*************** public class SimpleTimeZone extends Time
*** 605,611 ****
  	  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);
--- 830,836 ----
  	  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);
*************** public class SimpleTimeZone extends Time
*** 614,620 ****
  	  // 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
--- 839,844 ----
*************** public class SimpleTimeZone extends Time
*** 627,635 ****
  	  // 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
--- 851,859 ----
  	  // 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
*************** public class SimpleTimeZone extends Time
*** 637,643 ****
  	  //  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;
  
--- 861,866 ----
*************** public class SimpleTimeZone extends Time
*** 646,671 ****
  
  	  // 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 -= 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);
    }
--- 869,893 ----
  
  	  // 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);
    }
*************** public class SimpleTimeZone extends Time
*** 684,721 ****
    /**
     * 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
! 	    && endMonth == zone.endMonth
! 	    && endDay == zone.endDay
! 	    && endDayOfWeek == zone.endDayOfWeek
! 	    && endTime == zone.endTime);
    }
  
    /**
--- 906,940 ----
    /**
     * 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);
    }
  
    /**
*************** public class SimpleTimeZone extends Time
*** 730,751 ****
    {
      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
! 	    && endMonth == zone.endMonth
! 	    && endDay == zone.endDay
! 	    && endDayOfWeek == zone.endDayOfWeek && endTime == zone.endTime);
    }
  
    /**
--- 949,969 ----
    {
      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);
    }
  
    /**
*************** public class SimpleTimeZone extends Time
*** 756,778 ****
    {
      // 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
! 	 + ",endMode=" + endMode
! 	 + ",endMonth=" + endMonth
! 	 + ",endDay=" + endDay
! 	 + ",endDayOfWeek=" + endDayOfWeek
! 	 + ",endTime=" + endTime : "") + "]";
    }
  
    /**
--- 974,990 ----
    {
      // 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 : "") + "]";
    }
  
    /**
*************** public class SimpleTimeZone extends Time
*** 789,795 ****
  	dstSavings = 60 * 60 * 1000;
  	endMode = DOW_IN_MONTH_MODE;
  	startMode = DOW_IN_MONTH_MODE;
! 	serialVersionOnStream = 1;
        }
      else
        {
--- 1001,1009 ----
  	dstSavings = 60 * 60 * 1000;
  	endMode = DOW_IN_MONTH_MODE;
  	startMode = DOW_IN_MONTH_MODE;
! 	startTimeMode = WALL_TIME;
! 	endTimeMode = WALL_TIME;
! 	serialVersionOnStream = 2;
        }
      else
        {
*************** public class SimpleTimeZone extends Time
*** 815,843 ****
     * <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;
--- 1029,1059 ----
     * <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;
*************** public class SimpleTimeZone extends Time
*** 846,852 ****
        {
        case DOM_MODE:
  	endDayOfWeek = Calendar.SUNDAY;
! 	// fall through
        case DOW_GE_DOM_MODE:
        case DOW_LE_DOM_MODE:
  	endDay = (endDay + 6) / 7;
--- 1062,1069 ----
        {
        case DOM_MODE:
  	endDayOfWeek = Calendar.SUNDAY;
! 
!       // fall through
        case DOW_GE_DOM_MODE:
        case DOW_LE_DOM_MODE:
  	endDay = (endDay + 6) / 7;
diff -Nrcpad gcc-3.4.3/libjava/java/util/SortedMap.java gcc-4.0.0/libjava/java/util/SortedMap.java
*** gcc-3.4.3/libjava/java/util/SortedMap.java	Tue Jan 22 22:40:39 2002
--- gcc-4.0.0/libjava/java/util/SortedMap.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* SortedMap.java -- A map that makes guarantees about the order of its keys
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** package java.util;
*** 61,67 ****
   * 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
--- 61,67 ----
   * 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
*************** public interface SortedMap extends Map
*** 86,91 ****
--- 86,92 ----
     * Returns the first (lowest sorted) key in the map.
     *
     * @return the first key
+    * @throws NoSuchElementException if this map is empty.
     */
    Object firstKey();
  
*************** public interface SortedMap extends Map
*** 96,105 ****
     * <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 is not
!    * included; if you want the endpoint, pass the successor object in to
!    * toKey.  For example, for Strings, you can request
!    * <code>headMap(limit + "\0")</code>.
     *
     * @param toKey the exclusive upper range of the submap
     * @return the submap
--- 97,106 ----
     * <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
*************** public interface SortedMap extends Map
*** 115,120 ****
--- 116,122 ----
     * Returns the last (highest sorted) key in the map.
     *
     * @return the last key
+    * @throws NoSuchElementException if this map is empty.
     */
    Object lastKey();
  
*************** public interface SortedMap extends Map
*** 128,136 ****
     * 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 the successor
!    * object in instead.  For example, for Strings, you can request
!    * <code>subMap(lowlimit + "\0", highlimit + "\0")</code> to reverse
     * the inclusiveness of both endpoints.
     *
     * @param fromKey the inclusive lower range of the submap
--- 130,139 ----
     * 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
*************** public interface SortedMap extends Map
*** 152,161 ****
     * <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 is
!    * included; if you do not want the endpoint, pass the successor object in
!    * to fromKey.  For example, for Strings, you can request
!    * <code>tailMap(limit + "\0")</code>.
     *
     * @param fromKey the inclusive lower range of the submap
     * @return the submap
--- 155,164 ----
     * <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
diff -Nrcpad gcc-3.4.3/libjava/java/util/SortedSet.java gcc-4.0.0/libjava/java/util/SortedSet.java
*** gcc-3.4.3/libjava/java/util/SortedSet.java	Tue Jan 22 22:40:39 2002
--- gcc-4.0.0/libjava/java/util/SortedSet.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* SortedSet.java -- A set that makes guarantees about the order of its
     elements
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.util;
*** 50,56 ****
   * <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 Set interface.  If not,
   * the results are well-defined, but probably not what you wanted.
   * <p>
   *
--- 50,56 ----
   * <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>
   *
*************** package java.util;
*** 63,69 ****
   * enforce this.
   *
   * @author Original author unknown
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Set
   * @see TreeSet
   * @see SortedMap
--- 63,69 ----
   * enforce this.
   *
   * @author Original author unknown
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Set
   * @see TreeSet
   * @see SortedMap
*************** public interface SortedSet extends Set
*** 85,93 ****
    Comparator comparator();
  
    /**
!    * Returns the first (lowest sorted) element in the map.
     *
     * @return the first element
     */
    Object first();
  
--- 85,94 ----
    Comparator comparator();
  
    /**
!    * Returns the first (lowest sorted) element in the set.
     *
     * @return the first element
+    * @throws NoSuchElementException if the set is empty.
     */
    Object first();
  
*************** public interface SortedSet extends Set
*** 98,107 ****
     * <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 is not
!    * included; if you want the endpoint, pass the successor object in to
!    * toElement.  For example, for Strings, you can request
!    * <code>headSet(limit + "\0")</code>.
     *
     * @param toElement the exclusive upper range of the subset
     * @return the subset
--- 99,108 ----
     * <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
*************** public interface SortedSet extends Set
*** 109,123 ****
     *         contents
     * @throws IllegalArgumentException if this is a subSet, and toElement is out
     *         of range
!    * @throws NullPointerException if toElement is null but the map does not
     *         allow null elements
     */
    SortedSet headSet(Object toElement);
  
    /**
!    * Returns the last (highest sorted) element in the map.
     *
     * @return the last element
     */
    Object last();
  
--- 110,125 ----
     *         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();
  
*************** public interface SortedSet extends Set
*** 131,139 ****
     * 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 the successor
!    * object in instead.  For example, for Strings, you can request
!    * <code>subSet(lowlimit + "\0", highlimit + "\0")</code> to reverse
     * the inclusiveness of both endpoints.
     *
     * @param fromElement the inclusive lower range of the subset
--- 133,142 ----
     * 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
*************** public interface SortedSet extends Set
*** 155,164 ****
     * <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 is
!    * included; if you do not want the endpoint, pass the successor object in
!    * to fromElement.  For example, for Strings, you can request
!    * <code>tailSet(limit + "\0")</code>.
     *
     * @param fromElement the inclusive lower range of the subset
     * @return the subset
--- 158,167 ----
     * <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
diff -Nrcpad gcc-3.4.3/libjava/java/util/Stack.java gcc-4.0.0/libjava/java/util/Stack.java
*** gcc-3.4.3/libjava/java/util/Stack.java	Tue Jan 22 22:40:39 2002
--- gcc-4.0.0/libjava/java/util/Stack.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* Stack.java - Class that provides a Last In First Out (LIFO)
     datatype, known more commonly as a Stack
!    Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.util;
*** 50,57 ****
   * 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
--- 50,57 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/StringTokenizer.java gcc-4.0.0/libjava/java/util/StringTokenizer.java
*** gcc-3.4.3/libjava/java/util/StringTokenizer.java	Tue Jun 18 15:40:01 2002
--- gcc-4.0.0/libjava/java/util/StringTokenizer.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* StringTokenizer -- breaks a String into tokens
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* StringTokenizer -- breaks a String into tokens
!    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.util;
*** 54,60 ****
   * single character.
   *
   * @author Jochen Hoenicke
!  * @author Warren Levy <warrenl@cygnus.com>
   * @see java.io.StreamTokenizer
   * @status updated to 1.4
   */
--- 54,60 ----
   * single character.
   *
   * @author Jochen Hoenicke
!  * @author Warren Levy (warrenl@cygnus.com)
   * @see java.io.StreamTokenizer
   * @status updated to 1.4
   */
*************** public class StringTokenizer implements 
*** 196,202 ****
  
    /**
     * 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()
--- 196,202 ----
  
    /**
     * 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 class StringTokenizer implements 
*** 208,214 ****
  
    /**
     * 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
--- 208,214 ----
  
    /**
     * 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/TimeZone.java gcc-4.0.0/libjava/java/util/TimeZone.java
*** gcc-3.4.3/libjava/java/util/TimeZone.java	Thu Dec 18 16:43:02 2003
--- gcc-4.0.0/libjava/java/util/TimeZone.java	Tue Feb 22 00:58:36 2005
***************
*** 1,5 ****
  /* java.util.TimeZone
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
     Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,5 ----
  /* java.util.TimeZone
!    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
     Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 38,45 ****
  
  
  package java.util;
  import java.text.DateFormatSymbols;
- import gnu.classpath.Configuration;
  
  /**
   * This class represents a time zone offset and handles daylight savings.
--- 38,47 ----
  
  
  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.
*************** public abstract class TimeZone implement
*** 82,125 ****
     * The default time zone, as returned by getDefault.
     */
    private static TimeZone defaultZone0;
!   /* initialize this static field lazily to overhead if
!    * it is not needed: 
     */
!   private static synchronized TimeZone defaultZone() {
      /* Look up default timezone */
      if (defaultZone0 == null) 
        {
! 	if (Configuration.INIT_LOAD_LIBRARY)
! 	  {
! 	    System.loadLibrary("javautil");
! 	  }
! 	String tzid = System.getProperty("user.timezone");
! 	
! 	if (tzid == null)
! 	  tzid = getDefaultTimeZoneId();
! 	
! 	if (tzid == null)
! 	  tzid = "GMT";
! 	
! 	defaultZone0 = getTimeZone(tzid);
        }
      return defaultZone0; 
    }
! 
! 
    private static final long serialVersionUID = 3581463369166924961L;
  
    /**
!    * Hashtable for timezones by ID.  
     */
!   private static Hashtable timezones0;
    /* initialize this static field lazily to overhead if
     * it is not needed: 
     */
!   private static synchronized Hashtable timezones() {
!     if (timezones0==null) 
        {
! 	Hashtable timezones = new Hashtable();
  	timezones0 = timezones;
  
  	TimeZone tz;
--- 84,145 ----
     * 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;
*************** public abstract class TimeZone implement
*** 427,432 ****
--- 447,453 ----
  	   Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
  	   Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
  	timezones0.put("CET", tz);
+ 	timezones0.put("CEST", tz);
  	timezones0.put("ECT", tz);
  	timezones0.put("MET", tz);
  	timezones0.put("Africa/Ceuta", tz);
*************** public abstract class TimeZone implement
*** 783,799 ****
      return timezones0;
    }
  
! 
!   /* This method returns us a time zone id string which is in the
!      form <standard zone name><GMT offset><daylight time zone name>.
!      The GMT offset is in seconds, except where it is evenly divisible
!      by 3600, then it is in hours.  If the zone does not observe
!      daylight time, then the daylight zone name is omitted.  Examples:
!      in Chicago, the timezone would be CST6CDT.  In Indianapolis 
!      (which does not have Daylight Savings Time) the string would
!      be EST5
     */
!   private static native String getDefaultTimeZoneId();
  
    /**
     * Gets the time zone offset, for current date, modified in case of 
--- 804,936 ----
      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)[(daylight time zone name)]]</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>
!    * 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)
!   {
!     // First find start of GMT offset info and any Daylight zone name.
!     int startGMToffset = 0;
!     int sysTimeZoneIdLength = sysTimeZoneId.length();
!     for (int i = 0; i < sysTimeZoneIdLength && startGMToffset == 0; i++)
!       {
! 	char c = sysTimeZoneId.charAt(i);
! 	if (Character.isDigit(c))
! 	  startGMToffset = i;
! 	else if ((c == '+' || c == '-')
! 		 && i + 1 < sysTimeZoneIdLength
! 		 && Character.isDigit(sysTimeZoneId.charAt(i + 1)))
! 	  startGMToffset = i;
!       }
!     
!     String tzBasename;
!     if (startGMToffset == 0)
!       tzBasename = sysTimeZoneId;
!     else
!       tzBasename = sysTimeZoneId.substring (0, startGMToffset);
!     
!     int startDaylightZoneName = 0;
!     for (int i = sysTimeZoneIdLength - 1;
! 	 i >= 0 && !Character.isDigit(sysTimeZoneId.charAt(i)); --i)
!       startDaylightZoneName = i;
!     
!     boolean useDaylightTime = startDaylightZoneName > 0;
!     
!     // Integer.parseInt() doesn't handle leading +.
!     if (sysTimeZoneId.charAt(startGMToffset) == '+')
!       startGMToffset++;
!     
!     int gmtOffset = 0;
!     if (startGMToffset > 0)
!       {
! 	gmtOffset = Integer.parseInt
! 	  (startDaylightZoneName == 0
! 	   ? sysTimeZoneId.substring(startGMToffset)
! 	   : sysTimeZoneId.substring(startGMToffset,
! 				     startDaylightZoneName));
! 	
! 	// Offset could be in hours or seconds.  Convert to millis.
! 	// The offset is given as the time to add to local time to get GMT
! 	// we need the time to add to GMT to get localtime.
! 	if (Math.abs(gmtOffset) < 24)
! 	  gmtOffset *= 60 * 60;
! 	gmtOffset *= -1000;
!       }
!     
!     // Try to be optimistic and get the timezone that matches the base name.
!     // If we only have the base name then just accept this timezone.
!     // Otherwise check the gmtOffset and day light attributes.
!     TimeZone tz = (TimeZone) timezones().get(tzBasename);
!     if (tz != null
! 	&& (tzBasename == sysTimeZoneId
! 	    || (tz.getRawOffset() == gmtOffset
! 		&& tz.useDaylightTime() == useDaylightTime)))
!       return tz;
!     
!     // Maybe there is one with the daylight zone name?
!     if (useDaylightTime)
!       {
! 	String daylightZoneName;
! 	daylightZoneName = sysTimeZoneId.substring(startDaylightZoneName);
! 	if (!daylightZoneName.equals(tzBasename))
! 	  {
! 	    tz = (TimeZone) timezones().get(tzBasename);
! 	    if (tz != null
! 		&& tz.getRawOffset() == gmtOffset
! 		&& tz.useDaylightTime())
! 	      return tz;
! 	  }
!       }
!     
!     // If no match, see if a valid timezone has similar attributes as this
!     // and then use it instead. We take the first one that looks OKish.
!     if (startGMToffset > 0)
!       {
! 	String[] ids = getAvailableIDs(gmtOffset);
! 	for (int i = 0; i < ids.length; i++)
! 	  {
! 	    tz = (TimeZone) timezones().get(ids[i]);
! 	    if (tz.useDaylightTime() == useDaylightTime)
! 	      return tz;
! 	  }
!       }
!     
!     return null;
!   }
  
    /**
     * Gets the time zone offset, for current date, modified in case of 
*************** public abstract class TimeZone implement
*** 853,861 ****
--- 990,1002 ----
     * 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;
    }
  
*************** public abstract class TimeZone implement
*** 1139,1154 ****
    /**
     * Returns the time zone under which the host is running.  This
     * can be changed with setDefault.
!    * @return the time zone for this host.
     * @see #setDefault
     */
    public static TimeZone getDefault()
    {
!     return defaultZone();
    }
  
    public static void setDefault(TimeZone zone)
    {
      defaultZone0 = zone;
    }
  
--- 1280,1297 ----
    /**
     * 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;
    }
  
diff -Nrcpad gcc-3.4.3/libjava/java/util/Timer.java gcc-4.0.0/libjava/java/util/Timer.java
*** gcc-3.4.3/libjava/java/util/Timer.java	Thu Sep 18 13:09:53 2003
--- gcc-4.0.0/libjava/java/util/Timer.java	Fri Apr  1 17:38:57 2005
*************** public class Timer
*** 74,80 ****
    private static final class TaskQueue
    {
      /** Default size of this queue */
!     private final int DEFAULT_SIZE = 32;
  
      /** Whether to return null when there is nothing in the queue */
      private boolean nullOnEmpty;
--- 74,80 ----
    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;
*************** public class Timer
*** 343,351 ****
  		{
  		  task.run();
  		}
  	      catch (Throwable t)
! 		{		
! 		  /* ignore all errors */
  		}
  	    }
  
--- 343,358 ----
  		{
  		  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();
  		}
  	    }
  
*************** public class Timer
*** 376,382 ****
  
    // Number of Timers created.
    // Used for creating nice Thread names.
!   private static int nr = 0;
  
    // The queue that all the tasks are put in.
    // Given to the scheduler
--- 383,389 ----
  
    // 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/TooManyListenersException.java gcc-4.0.0/libjava/java/util/TooManyListenersException.java
*** gcc-3.4.3/libjava/java/util/TooManyListenersException.java	Sun Jun 16 21:15:42 2002
--- gcc-4.0.0/libjava/java/util/TooManyListenersException.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* TooManyListenersException.java -- thrown when a unicast event can't accept
     another Listener
!    Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** package java.util;
*** 46,52 ****
   * single event listener.
   *
   * @author Jochen Hoenicke
!  * @author Warren Levy <warrenl@cygnus.com>
   * @see EventListener
   * @see EventObject
   * @since 1.1
--- 46,52 ----
   * single event listener.
   *
   * @author Jochen Hoenicke
!  * @author Warren Levy (warrenl@cygnus.com)
   * @see EventListener
   * @see EventObject
   * @since 1.1
diff -Nrcpad gcc-3.4.3/libjava/java/util/TreeMap.java gcc-4.0.0/libjava/java/util/TreeMap.java
*** gcc-3.4.3/libjava/java/util/TreeMap.java	Sun Oct 26 02:48:31 2003
--- gcc-4.0.0/libjava/java/util/TreeMap.java	Thu Feb 17 07:48:44 2005
***************
*** 1,6 ****
  /* TreeMap.java -- a class providing a basic Red-Black Tree data structure,
     mapping Object --> Object
!    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,48 ****
  
  package java.util;
  
- import java.io.Serializable;
- import java.io.ObjectOutputStream;
- import java.io.ObjectInputStream;
  import java.io.IOException;
  
  /**
   * This class provides a red-black tree implementation of the SortedMap
--- 39,48 ----
  
  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
*************** import java.io.IOException;
*** 78,84 ****
   *
   * @author Jon Zeppieri
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Map
   * @see HashMap
   * @see Hashtable
--- 78,84 ----
   *
   * @author Jon Zeppieri
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Map
   * @see HashMap
   * @see Hashtable
*************** public class TreeMap extends AbstractMap
*** 130,136 ****
    /**
     * The root node of this TreeMap.
     */
!   private transient Node root = nil;
  
    /**
     * The size of this TreeMap. Package visible for use by nested classes.
--- 130,136 ----
    /**
     * The root node of this TreeMap.
     */
!   private transient Node root;
  
    /**
     * The size of this TreeMap. Package visible for use by nested classes.
*************** public class TreeMap extends AbstractMap
*** 160,166 ****
     * 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
    {
--- 160,166 ----
     * 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
    {
*************** public class TreeMap extends AbstractMap
*** 213,218 ****
--- 213,219 ----
    public TreeMap(Comparator c)
    {
      comparator = c;
+     fabricateTree(0);
    }
  
    /**
*************** public class TreeMap extends AbstractMap
*** 851,857 ****
    private void fabricateTree(final int count)
    {
      if (count == 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
--- 852,862 ----
    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
*************** public class TreeMap extends AbstractMap
*** 1377,1383 ****
     * 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
    {
--- 1382,1388 ----
     * 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
    {
*************** public class TreeMap extends AbstractMap
*** 1485,1491 ****
     * 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
    {
--- 1490,1496 ----
     * 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
    {
*************** public class TreeMap extends AbstractMap
*** 1531,1537 ****
       * @param key the key to check
       * @return true if the key is in range
       */
!     final boolean keyInRange(Object key)
      {
        return ((minKey == nil || compare(key, minKey) >= 0)
                && (maxKey == nil || compare(key, maxKey) < 0));
--- 1536,1542 ----
       * @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));
diff -Nrcpad gcc-3.4.3/libjava/java/util/TreeSet.java gcc-4.0.0/libjava/java/util/TreeSet.java
*** gcc-3.4.3/libjava/java/util/TreeSet.java	Tue Jan 22 22:40:39 2002
--- gcc-4.0.0/libjava/java/util/TreeSet.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* TreeSet.java -- a class providing a TreeMap-backed SortedSet
!    Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,47 ****
  package java.util;
  
  import java.io.IOException;
- import java.io.Serializable;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  
  /**
   * This class provides a TreeMap-backed implementation of the SortedSet
--- 39,47 ----
  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
*************** import java.io.ObjectOutputStream;
*** 67,73 ****
   *
   * @author Jon Zeppieri
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Collection
   * @see Set
   * @see HashSet
--- 67,73 ----
   *
   * @author Jon Zeppieri
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Collection
   * @see Set
   * @see HashSet
diff -Nrcpad gcc-3.4.3/libjava/java/util/VMTimeZone.java gcc-4.0.0/libjava/java/util/VMTimeZone.java
*** gcc-3.4.3/libjava/java/util/VMTimeZone.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/util/VMTimeZone.java	Sat Sep 25 22:21:51 2004
***************
*** 0 ****
--- 1,345 ----
+ /* java.util.VMTimeZone
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but 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.Configuration;
+ 
+ import java.io.*;
+ 
+ /**
+  *
+  */
+ final class VMTimeZone
+ {
+   static
+   {
+     if (Configuration.INIT_LOAD_LIBRARY)
+       {
+ 	System.loadLibrary("javautil");
+       }
+   }
+ 		
+   /**
+    * This method returns a time zone id string which is in the form
+    * (standard zone name) or (standard zone name)(GMT offset) or
+    * (standard zone name)(GMT offset)(daylight time zone name).  The
+    * GMT offset can be in seconds, or where it is evenly divisible by
+    * 3600, then it can be in hours.  The offset must be the time to
+    * add to the local time to get GMT.  If a offset is given and the
+    * time zone observes daylight saving then the (daylight time zone
+    * name) must also be given (otherwise it is assumed the time zone
+    * does not observe any daylight savings).
+    * <p>
+    * The result of this method is given to the method
+    * TimeZone.getDefaultTimeZone(String) which tries to map the time
+    * zone id to a known TimeZone.  See that method on how the returned
+    * String is mapped to a real TimeZone object.
+    * <p>
+    * The reference implementation which is made for GNU/Posix like
+    * systems calls <code>System.getenv("TZ")</code>,
+    * <code>readTimeZoneFile("/etc/timezone")</code>,
+    * <code>readtzFile("/etc/localtime")</code> and finally
+    * <code>getSystemTimeZoneId()</code> till a supported TimeZone is
+    * found through <code>TimeZone.getDefaultTimeZone(String)</code>.
+    * If every method fails <code>null</code> is returned (which means
+    * the TimeZone code will fall back on GMT as default time zone).
+    * <p>
+    * Note that this method is called inside a
+    * <code>AccessController.doPrivileged()</code> block and runs with
+    * the priviliges of the java.util system classes.  It will only be
+    * called when the default time zone is not yet set, the system
+    * property user.timezone isn't set and it is requested for the
+    * first time.
+    */
+   static TimeZone getDefaultTimeZoneId()
+   {
+     TimeZone zone = null;
+ 
+     // See if TZ environment variable is set and accessible.
+     String tzid = System.getenv("TZ");
+     if (tzid != null && !tzid.equals(""))
+       zone = TimeZone.getDefaultTimeZone(tzid);
+ 
+     // Try to parse /etc/timezone.
+     if (zone == null)
+       {
+ 	tzid = readTimeZoneFile("/etc/timezone");
+ 	if (tzid != null && !tzid.equals(""))
+ 	  zone = TimeZone.getDefaultTimeZone(tzid);
+       }
+     
+     // Try to parse /etc/localtime
+     if (zone == null)
+       {
+ 	tzid = readtzFile("/etc/localtime");
+ 	if (tzid != null && !tzid.equals(""))
+ 	  zone = TimeZone.getDefaultTimeZone(tzid);
+       }
+ 
+     // Try some system specific way
+     if (zone == null)
+       {
+ 	tzid = getSystemTimeZoneId();
+ 	if (tzid != null && !tzid.equals(""))
+ 	  zone = TimeZone.getDefaultTimeZone(tzid);
+       }
+ 
+     return zone;
+   }
+ 
+   /**
+    * Tries to read the time zone name from a file. Only the first
+    * consecutive letters, digits, slashes, dashes and underscores are
+    * read from the file. If the file cannot be read or an IOException
+    * occurs null is returned.
+    * <p>
+    * The /etc/timezone file is not standard, but a lot of systems have
+    * it. If it exist the first line always contains a string
+    * describing the timezone of the host of domain. Some systems
+    * contain a /etc/TIMEZONE file which is used to set the TZ
+    * environment variable (which is checked before /etc/timezone is
+    * read).
+    */
+   private static String readTimeZoneFile(String file)
+   {
+     File f = new File(file);
+     if (!f.exists())
+       return null;
+ 
+     InputStreamReader isr = null;
+     try
+       {
+ 	FileInputStream fis = new FileInputStream(f);
+ 	BufferedInputStream bis = new BufferedInputStream(fis);
+ 	isr = new InputStreamReader(bis);
+ 	
+ 	StringBuffer sb = new StringBuffer();
+ 	int i = isr.read();
+ 	while (i != -1)
+ 	  {
+ 	    char c = (char) i;
+ 	    if (Character.isLetter(c) || Character.isDigit(c)
+ 		|| c == '/' || c == '-' || c == '_')
+ 	      {
+ 		sb.append(c);
+ 		i = isr.read();
+ 	      }
+ 	    else
+ 	      break;
+ 	  }
+ 	return sb.toString();
+       }
+     catch (IOException ioe)
+       {
+ 	// Parse error, not a proper tzfile.
+ 	return null;
+       }
+     finally
+       {
+ 	try
+ 	  {
+ 	    if (isr != null)
+ 	      isr.close();
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	    // Error while close, nothing we can do.
+ 	  }
+       }
+   }
+ 
+   /**
+    * Tries to read a file as a "standard" tzfile and return a time
+    * zone id string as expected by <code>getDefaultTimeZone(String)</code>.
+    * If the file doesn't exist, an IOException occurs or it isn't a tzfile
+    * that can be parsed null is returned.
+    * <p>
+    * The tzfile structure (as also used by glibc) is described in the Olson
+    * tz database archive as can be found at
+    * <code>ftp://elsie.nci.nih.gov/pub/</code>.
+    * <p>
+    * At least the following platforms support the tzdata file format
+    * and /etc/localtime (GNU/Linux, Darwin, Solaris and FreeBSD at
+    * least). Some systems (like Darwin) don't start the file with the
+    * required magic bytes 'TZif', this implementation can handle
+    * that).
+    */
+   private static String readtzFile(String file)
+   {
+     File f = new File(file);
+     if (!f.exists())
+       return null;
+     
+     DataInputStream dis = null;
+     try
+       {
+         FileInputStream fis = new FileInputStream(f);
+         BufferedInputStream bis = new BufferedInputStream(fis);
+         dis = new DataInputStream(bis);
+ 	
+         // Make sure we are reading a tzfile.
+         byte[] tzif = new byte[4];
+         dis.readFully(tzif);
+         if (tzif[0] == 'T' && tzif[1] == 'Z'
+             && tzif[2] == 'i' && tzif[3] == 'f')
+ 	  // Reserved bytes, ttisgmtcnt, ttisstdcnt and leapcnt
+ 	  skipFully(dis, 16 + 3 * 4);
+ 	else
+ 	  // Darwin has tzdata files that don't start with the TZif marker
+ 	  skipFully(dis, 16 + 3 * 4 - 4);
+ 	
+ 	int timecnt = dis.readInt();
+ 	int typecnt = dis.readInt();
+ 	if (typecnt > 0)
+ 	  {
+ 	    int charcnt = dis.readInt();
+ 	    // Transition times plus indexed transition times.
+ 	    skipFully(dis, timecnt * (4 + 1));
+ 	    
+ 	    // Get last gmt_offset and dst/non-dst time zone names.
+ 	    int abbrind = -1;
+ 	    int dst_abbrind = -1;
+ 	    int gmt_offset = 0;
+ 	    while (typecnt-- > 0)
+ 	      {
+ 		// gmtoff
+ 		int offset = dis.readInt();
+ 		int dst = dis.readByte();
+ 		if (dst == 0)
+ 		  {
+ 		    abbrind = dis.readByte();
+ 		    gmt_offset = offset;
+ 		  }
+ 		else
+ 		  dst_abbrind = dis.readByte();
+ 	      }
+ 	    
+ 	    // gmt_offset is the offset you must add to UTC/GMT to
+ 	    // get the local time, we need the offset to add to
+ 	    // the local time to get UTC/GMT.
+ 	    gmt_offset *= -1;
+ 	    
+ 	    // Turn into hours if possible.
+ 	    if (gmt_offset % 3600 == 0)
+ 	      gmt_offset /= 3600;
+ 	    
+ 	    if (abbrind >= 0)
+ 	      {
+ 		byte[] names = new byte[charcnt];
+ 		dis.readFully(names);
+ 		int j = abbrind;
+ 		while (j < charcnt && names[j] != 0)
+ 		  j++;
+ 		
+ 		String zonename = new String(names, abbrind, j - abbrind,
+ 					     "ASCII");
+ 		
+ 		String dst_zonename;
+ 		if (dst_abbrind >= 0)
+ 		  {
+ 		    j = dst_abbrind;
+ 		    while (j < charcnt && names[j] != 0)
+ 		      j++;
+ 		    dst_zonename = new String(names, dst_abbrind,
+ 					      j - dst_abbrind, "ASCII");
+ 		  }
+ 		else
+ 		  dst_zonename = "";
+ 		
+ 		// Only use gmt offset when necessary.
+ 		// Also special case GMT+/- timezones.
+ 		String offset_string;
+ 		if ("".equals(dst_zonename)
+ 		    && (gmt_offset == 0
+ 			|| zonename.startsWith("GMT+")
+ 			|| zonename.startsWith("GMT-")))
+ 		  offset_string = "";
+ 		else
+ 		  offset_string = Integer.toString(gmt_offset);
+ 		
+ 		String id = zonename + offset_string + dst_zonename;
+ 		
+ 		return id;
+ 	      }
+ 	  }
+ 	
+ 	// Something didn't match while reading the file.
+ 	return null;
+       }
+     catch (IOException ioe)
+       {
+ 	// Parse error, not a proper tzfile.
+ 	return null;
+       }
+     finally
+       {
+ 	try
+ 	  {
+ 	    if (dis != null)
+ 	      dis.close();
+ 	  }
+ 	catch(IOException ioe)
+ 	  {
+ 	    // Error while close, nothing we can do.
+ 	  }
+       }
+   }
+   
+   /**
+    * Skips the requested number of bytes in the given InputStream.
+    * Throws EOFException if not enough bytes could be skipped.
+    * Negative numbers of bytes to skip are ignored.
+    */
+   private static void skipFully(InputStream is, long l) throws IOException
+   {
+     while (l > 0)
+       {
+         long k = is.skip(l);
+         if (k <= 0)
+           throw new EOFException();
+         l -= k;
+       }
+   }
+ 
+   /**
+    * Tries to get the system time zone id through native code.
+    */
+   private static native String getSystemTimeZoneId();
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/util/Vector.java gcc-4.0.0/libjava/java/util/Vector.java
*** gcc-3.4.3/libjava/java/util/Vector.java	Sun Apr  7 07:40:49 2002
--- gcc-4.0.0/libjava/java/util/Vector.java	Thu Feb 17 07:48:44 2005
***************
*** 1,5 ****
  /* Vector.java -- Class that provides growable arrays.
!    Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  
  package java.util;
! import java.lang.reflect.Array;
  import java.io.Serializable;
  
  /**
   * The <code>Vector</code> classes implements growable arrays of Objects.
--- 37,46 ----
  
  
  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.
*************** import java.io.Serializable;
*** 70,76 ****
   *
   * @author Scott G. Miller
   * @author Bryce McKinlay
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Collection
   * @see List
   * @see ArrayList
--- 72,78 ----
   *
   * @author Scott G. Miller
   * @author Bryce McKinlay
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Collection
   * @see List
   * @see ArrayList
*************** public class Vector extends AbstractList
*** 912,915 ****
--- 914,931 ----
      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-3.4.3/libjava/java/util/WeakHashMap.java gcc-4.0.0/libjava/java/util/WeakHashMap.java
*** gcc-3.4.3/libjava/java/util/WeakHashMap.java	Fri Aug  1 21:30:14 2003
--- gcc-4.0.0/libjava/java/util/WeakHashMap.java	Fri Apr 23 06:36:05 2004
***************
*** 1,6 ****
  /* 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 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** exception statement from your version. *
*** 39,46 ****
  
  package java.util;
  
- import java.lang.ref.WeakReference;
  import java.lang.ref.ReferenceQueue;
  
  /**
   * A weak hash map has only weak references to the key. This means that it
--- 39,46 ----
  
  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
diff -Nrcpad gcc-3.4.3/libjava/java/util/jar/Attributes.java gcc-4.0.0/libjava/java/util/jar/Attributes.java
*** gcc-3.4.3/libjava/java/util/jar/Attributes.java	Sun Nov 10 21:13:44 2002
--- gcc-4.0.0/libjava/java/util/jar/Attributes.java	Tue Feb 15 22:38:59 2005
***************
*** 1,5 ****
  /* Attributes.java -- Represents attribute name/value pairs from a Manifest
!    Copyright (C) 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** public class Attributes implements Clone
*** 85,110 ****
     * 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:
     * <ul>
!    * <li> Must contain at least one character
!    * <li> The first character must be alphanumeric (a-z, A-Z, 0-9)
!    * <li> All other characters must be alphanumeric, a '-' or a '_'
     * </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.
     *
     * @since 1.2
     * @author Mark Wielaard (mark@klomp.org)
     */
    public static class Name
    {
- 
-     // Fields
- 
      // General Main Attributes
  
      /**
--- 85,120 ----
     * 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
  
      /**
*************** public class Attributes implements Clone
*** 112,132 ****
       * the version of this Manifest file.
       */
      public static final Name MANIFEST_VERSION = new Name("Manifest-Version");
!     /**
!      * General main attribute -
!      * tool and version that created this Manifest file.
!      */
!     public static final Name CREATED_BY = new Name("Created-By");
      /**
       * General main attribute -
       * the version of the jar file signature.
       */
      public static final Name SIGNATURE_VERSION
        = new Name("Signature-Version");
      /**
       * General main attribute -
!      * (relative) URLs of the libraries/classpaths that the Classes in
!      * this jar file depend on.
       */
      public static final Name CLASS_PATH = new Name("Class-Path");
  
--- 122,139 ----
       * 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");
  
*************** public class Attributes implements Clone
*** 145,159 ****
       * Manifest manifest file with the following Names:
       * <ul>
       * <li> &lt;extension&gt;-Extension-Name:
!      * unique name of the extension
       * <li> &lt;extension&gt;-Specification-Version:
!      * minimum specification version
       * <li> &lt;extension&gt;-Implementation-Version:
!      * minimum implementation version
       * <li> &lt;extension&gt;-Implementation-Vendor-Id:
!      * unique id of implementation vendor
       * <li> &lt;extension&gt;-Implementation-URL:
!      * where the latest version of the extension library can be found
       * </ul>
       */
      public static final Name EXTENSION_LIST = new Name("Extension-List");
--- 152,166 ----
       * 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");
*************** public class Attributes implements Clone
*** 163,168 ****
--- 170,176 ----
       * 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 class Attributes implements Clone
*** 170,217 ****
--- 178,233 ----
      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
*************** public class Attributes implements Clone
*** 219,224 ****
--- 235,241 ----
       */
      public static final Name SPECIFICATION_VENDOR
        = new Name("Specification-Vendor");
+ 
      /**
       * Package sealing -
       * whether (all) package(s) is(/are) sealed. Value is either "true"
*************** public class Attributes implements Clone
*** 232,252 ****
       */
      public static final Name CONTENT_TYPE = new Name("Content-Type");
  
-     /**
-      * Bean objects attribute -
-      * whether the entry is a Java Bean. Value is either "true" or "false".
-      */
-     public static final Name JAVA_BEAN = new Name("Java-Bean");
- 
-     /**
-      * Signing attribute -
-      * application specific signing attribute. Must be understood by
-      * the manifest parser when present to validate the jar (entry).
-      */
-     public static final Name MAGIC = new Name("Magic");
- 
      /** The (lowercase) String representation of this Name */
      private final String name;
      /** The original String given to the constructor */
      private final String origName;
  
--- 249,257 ----
       */
      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;
  
diff -Nrcpad gcc-3.4.3/libjava/java/util/jar/JarFile.java gcc-4.0.0/libjava/java/util/jar/JarFile.java
*** gcc-3.4.3/libjava/java/util/jar/JarFile.java	Fri Feb  7 21:33:05 2003
--- gcc-4.0.0/libjava/java/util/jar/JarFile.java	Mon Feb 21 20:29:00 2005
***************
*** 1,5 ****
  /* JarFile.java - Representation of a jar file
!    Copyright (C) 2000, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JarFile.java - Representation of a jar file
!    Copyright (C) 2000, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,50 ****
  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.ZipEntry;
! import java.util.zip.ZipException;
! import java.util.zip.ZipFile;
  import java.io.File;
  import java.io.FileNotFoundException;
! import java.io.InputStream;
  import java.io.IOException;
  import java.util.Enumeration;
  
  /**
   * Representation of a jar file.
--- 35,75 ----
  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.
*************** import java.util.Enumeration;
*** 52,62 ****
   * 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).
-  * <p>
-  * XXX - verification of Manifest signatures is not yet implemented.
   *
   * @since 1.2
   * @author Mark Wielaard (mark@klomp.org)
   */
  public class JarFile extends ZipFile
  {
--- 77,87 ----
   * 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
  {
*************** public class JarFile extends ZipFile
*** 65,70 ****
--- 90,118 ----
    /** 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.
*************** public class JarFile extends ZipFile
*** 72,82 ****
    private Manifest manifest;
  
    /** Whether to verify the manifest and all entries. */
!   private boolean verify;
  
    /** Whether the has already been loaded. */
    private boolean manifestRead = false;
  
    // Constructors
  
    /**
--- 120,153 ----
    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
  
    /**
*************** public class JarFile extends ZipFile
*** 235,256 ****
     */
    public Enumeration entries() throws IllegalStateException
    {
!     return new JarEnumeration(super.entries());
    }
  
    /**
     * Wraps a given Zip Entries Enumeration. For every zip entry a
     * JarEntry is created and the corresponding Attributes are looked up.
-    * XXX - Should also look up the certificates.
     */
!   private class JarEnumeration implements Enumeration
    {
  
      private final Enumeration entries;
  
!     JarEnumeration(Enumeration e)
      {
        entries = e;
      }
  
      public boolean hasMoreElements()
--- 306,328 ----
     */
    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()
*************** public class JarFile extends ZipFile
*** 265,271 ****
        Manifest manifest;
        try
  	{
! 	  manifest = getManifest();
  	}
        catch (IOException ioe)
  	{
--- 337,343 ----
        Manifest manifest;
        try
  	{
! 	  manifest = jarfile.getManifest();
  	}
        catch (IOException ioe)
  	{
*************** public class JarFile extends ZipFile
*** 276,282 ****
  	{
  	  jar.attr = manifest.getAttributes(jar.getName());
  	}
!       // XXX jar.certs
        return jar;
      }
    }
--- 348,383 ----
  	{
  	  jar.attr = manifest.getAttributes(jar.getName());
  	}
! 
!       synchronized(jarfile)
! 	{
! 	  if (!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;
      }
    }
*************** public class JarFile extends ZipFile
*** 286,292 ****
     * It actually returns a JarEntry not a zipEntry
     * @param name XXX
     */
!   public ZipEntry getEntry(String name)
    {
      ZipEntry entry = super.getEntry(name);
      if (entry != null)
--- 387,393 ----
     * 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)
*************** public class JarFile extends ZipFile
*** 305,311 ****
  	if (manifest != null)
  	  {
  	    jarEntry.attr = manifest.getAttributes(name);
! 	    // XXX jarEntry.certs
  	  }
  	return jarEntry;
        }
--- 406,438 ----
  	if (manifest != null)
  	  {
  	    jarEntry.attr = manifest.getAttributes(name);
!           }
! 
! 	if (!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;
        }
*************** public class JarFile extends ZipFile
*** 313,327 ****
    }
  
    /**
!    * XXX should verify the inputstream
!    * @param entry XXX
     * @exception ZipException XXX
     * @exception IOException XXX
     */
    public synchronized InputStream getInputStream(ZipEntry entry) throws
      ZipException, IOException
    {
!     return super.getInputStream(entry);	// XXX verify
    }
  
    /**
--- 440,471 ----
    }
  
    /**
!    * 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);
!       }
    }
  
    /**
*************** public class JarFile extends ZipFile
*** 342,352 ****
     * Returns the manifest for this JarFile or null when the JarFile does not
     * contain a manifest file.
     */
!   public Manifest getManifest() throws IOException
    {
      if (!manifestRead)
        manifest = readManifest();
  
      return manifest;
    }
  }
--- 486,1058 ----
     * 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.
+   private 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-3.4.3/libjava/java/util/jar/JarInputStream.java gcc-4.0.0/libjava/java/util/jar/JarInputStream.java
*** gcc-3.4.3/libjava/java/util/jar/JarInputStream.java	Mon Oct 27 11:02:43 2003
--- gcc-4.0.0/libjava/java/util/jar/JarInputStream.java	Fri Apr 23 06:36:05 2004
***************
*** 1,5 ****
  /* JarInputStream.java - InputStream for reading jar files
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JarInputStream.java - InputStream for reading jar files
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  package java.util.jar;
  
- import java.io.InputStream;
  import java.io.IOException;
  import java.util.zip.ZipEntry;
  import java.util.zip.ZipInputStream;
  
--- 37,44 ----
  
  package java.util.jar;
  
  import java.io.IOException;
+ import java.io.InputStream;
  import java.util.zip.ZipEntry;
  import java.util.zip.ZipInputStream;
  
diff -Nrcpad gcc-3.4.3/libjava/java/util/jar/JarOutputStream.java gcc-4.0.0/libjava/java/util/jar/JarOutputStream.java
*** gcc-3.4.3/libjava/java/util/jar/JarOutputStream.java	Tue Jan 22 22:40:41 2002
--- gcc-4.0.0/libjava/java/util/jar/JarOutputStream.java	Fri Apr 23 06:36:05 2004
***************
*** 1,5 ****
  /* JarOutputStream.java - OutputStream for writing jar files
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JarOutputStream.java - OutputStream for writing jar files
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  package java.util.jar;
  
- import java.io.OutputStream;
  import java.io.IOException;
  import java.util.zip.ZipEntry;
  import java.util.zip.ZipOutputStream;
  
--- 37,44 ----
  
  package java.util.jar;
  
  import java.io.IOException;
+ import java.io.OutputStream;
  import java.util.zip.ZipEntry;
  import java.util.zip.ZipOutputStream;
  
diff -Nrcpad gcc-3.4.3/libjava/java/util/jar/Manifest.java gcc-4.0.0/libjava/java/util/jar/Manifest.java
*** gcc-3.4.3/libjava/java/util/jar/Manifest.java	Tue Jun 18 15:40:16 2002
--- gcc-4.0.0/libjava/java/util/jar/Manifest.java	Fri Apr 23 06:36:05 2004
***************
*** 1,5 ****
! /* Attributes.java -- Reads, writes and manipulaties jar manifest files
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Manifest.java -- Reads, writes and manipulaties jar manifest files
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.InputStreamReader;
*** 45,56 ****
  import java.io.OutputStream;
  import java.io.OutputStreamWriter;
  import java.io.PrintWriter;
- import java.io.Reader;
- import java.io.Writer;
  import java.util.Hashtable;
  import java.util.Iterator;
  import java.util.Map;
- import java.util.Set;
  
  /**
   * Reads, writes and manipulaties jar manifest files.
--- 45,53 ----
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/ConsoleHandler.java gcc-4.0.0/libjava/java/util/logging/ConsoleHandler.java
*** gcc-3.4.3/libjava/java/util/logging/ConsoleHandler.java	Sat Jun 21 10:31:55 2003
--- gcc-4.0.0/libjava/java/util/logging/ConsoleHandler.java	Wed Oct 20 07:53:26 2004
***************
*** 1,7 ****
! /* ConsoleHandler.java
!    -- a class for publishing log messages to System.err
! 
! Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 35,43 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
--- 33,39 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
*************** package java.util.logging;
*** 67,73 ****
   *
   * <li><code>java.util.logging.ConsoleHandler.encoding</code> - specifies
   *     the name of the character encoding. Default value:
!  *     the default platform encoding.
   *
   * </ul>
   *
--- 63,69 ----
   *
   * <li><code>java.util.logging.ConsoleHandler.encoding</code> - specifies
   *     the name of the character encoding. Default value:
!  *     the default platform encoding.</li>
   *
   * </ul>
   *
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/ErrorManager.java gcc-4.0.0/libjava/java/util/logging/ErrorManager.java
*** gcc-3.4.3/libjava/java/util/logging/ErrorManager.java	Tue Oct 21 13:25:46 2003
--- gcc-4.0.0/libjava/java/util/logging/ErrorManager.java	Wed Oct 20 07:53:26 2004
***************
*** 1,8 ****
! /* 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.
  
--- 1,7 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 36,44 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
--- 35,41 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/FileHandler.java gcc-4.0.0/libjava/java/util/logging/FileHandler.java
*** gcc-3.4.3/libjava/java/util/logging/FileHandler.java	Sat Jun 21 10:31:55 2003
--- gcc-4.0.0/libjava/java/util/logging/FileHandler.java	Thu Feb 17 07:48:45 2005
***************
*** 1,7 ****
! /* FileHandler.java
!    -- a class for publishing log messages to log files
! 
! Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 35,49 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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.IOException;
  import java.io.File;
  import java.io.FileOutputStream;
  
  /**
   * A <code>FileHandler</code> publishes log records to a set of log
--- 33,46 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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.IOException;
  
  /**
   * A <code>FileHandler</code> publishes log records to a set of log
*************** public class FileHandler
*** 406,412 ****
     * 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.
--- 403,409 ----
     * 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.
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/Filter.java gcc-4.0.0/libjava/java/util/logging/Filter.java
*** gcc-3.4.3/libjava/java/util/logging/Filter.java	Fri Jan  9 08:58:59 2004
--- gcc-4.0.0/libjava/java/util/logging/Filter.java	Wed Oct 20 07:53:26 2004
***************
*** 1,8 ****
! /* Filter.java
!    -- an interface for filters that decide whether a LogRecord should
!       be published or discarded
! 
! Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 36,44 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
--- 34,40 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/Formatter.java gcc-4.0.0/libjava/java/util/logging/Formatter.java
*** gcc-3.4.3/libjava/java/util/logging/Formatter.java	Sat Jun 21 10:31:55 2003
--- gcc-4.0.0/libjava/java/util/logging/Formatter.java	Wed Oct 20 07:53:27 2004
***************
*** 1,8 ****
! /* Formatter.java
!    -- a class for formatting log messages by localizing message texts
!       and performing substitution of parameters
! 
! Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,7 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 36,50 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
  import java.text.MessageFormat;
  
  /**
   * A <code>Formatter</code> supports handlers by localizing
--- 35,47 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/Handler.java gcc-4.0.0/libjava/java/util/logging/Handler.java
*** gcc-3.4.3/libjava/java/util/logging/Handler.java	Fri Jul 18 16:08:38 2003
--- gcc-4.0.0/libjava/java/util/logging/Handler.java	Thu Nov 18 15:26:41 2004
***************
*** 1,7 ****
! /* Handler.java
!    -- a class for publishing log messages
! 
! Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Handler.java -- a class for publishing log messages
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** module.  An independent module is a modu
*** 35,49 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
- import java.security.AccessController;
  
  /**
   * A <code>Handler</code> publishes <code>LogRecords</code> to
--- 33,44 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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
*************** h.setFormatter(h.getFormatter());</pre>
*** 90,95 ****
--- 85,91 ----
     * supposed to provide a Formatter, but this is what the specification
     * says.
     */
+   protected Handler()
    {
      level = Level.ALL;
    }
*************** h.setFormatter(h.getFormatter());</pre>
*** 379,385 ****
     */
    public boolean isLoggable(LogRecord record)
    {
!     if (record.getLevel().intValue() <= level.intValue())
        return false;
      
      if (filter != null)
--- 375,381 ----
     */
    public boolean isLoggable(LogRecord record)
    {
!     if (record.getLevel().intValue() < level.intValue())
        return false;
      
      if (filter != null)
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/Level.java gcc-4.0.0/libjava/java/util/logging/Level.java
*** gcc-3.4.3/libjava/java/util/logging/Level.java	Sat Jun 21 10:31:55 2003
--- gcc-4.0.0/libjava/java/util/logging/Level.java	Thu Feb 17 07:48:45 2005
***************
*** 1,5 ****
  /* Level.java -- a class for indicating logging levels
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Level.java -- a class for indicating logging levels
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** module.  An independent module is a modu
*** 33,48 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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 class for indicating logging levels.  A number of commonly used
   * levels is pre-defined (such as <code>java.util.logging.Level.INFO</code>),
--- 33,46 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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>),
*************** import java.util.ResourceBundle;
*** 50,59 ****
   * purposes, however, applications can sub-class Level in order to define
   * custom logging levels.
   *
!  * @author Sascha Brawer <brawer@acm.org>
   */
! public class Level
!   implements java.io.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,
--- 48,56 ----
   * 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,
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/LogManager.java gcc-4.0.0/libjava/java/util/logging/LogManager.java
*** gcc-3.4.3/libjava/java/util/logging/LogManager.java	Fri Jan  9 08:58:59 2004
--- gcc-4.0.0/libjava/java/util/logging/LogManager.java	Wed Oct 20 07:53:27 2004
***************
*** 1,8 ****
! /* LogManager.java
!    -- a class for maintaining Loggers and managing configuration
!       properties
! 
! Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* LogManager.java -- a class for maintaining Loggers and managing
!    configuration properties
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** module.  An independent module is a modu
*** 36,44 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
  
--- 34,41 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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
*** 46,59 ****
  import java.beans.PropertyChangeSupport;
  import java.io.IOException;
  import java.io.InputStream;
  import java.net.URL;
  import java.util.Collections;
- import java.util.Properties;
  import java.util.Enumeration;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.StringTokenizer;
- import java.lang.ref.WeakReference;
  
  /**
   * The <code>LogManager</code> maintains a hierarchical namespace
--- 43,56 ----
  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
*************** import java.lang.ref.WeakReference;
*** 67,79 ****
   * <code>java.util.logging.LogManager</code> is initialized.
   * The configuration process includes the subsequent steps:
   *
!  * <ol>
   * <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>.
--- 64,75 ----
   * <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>.
*************** import java.lang.ref.WeakReference;
*** 91,104 ****
   *     {@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>
!  * </ol>
   *
   * @author Sascha Brawer (brawer@acm.org)
   */
--- 87,99 ----
   *     {@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>
   *
   * @author Sascha Brawer (brawer@acm.org)
   */
*************** public class LogManager
*** 259,268 ****
     *
     * @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)
--- 254,263 ----
     *
     * @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)
*************** public class LogManager
*** 353,358 ****
--- 348,354 ----
    private synchronized Logger findAncestor(Logger child)
    {
      String childName = child.getName();
+     int    childNameLength = childName.length();
      Logger best = rootLogger;
      int    bestNameLength = 0;
  
*************** public class LogManager
*** 368,376 ****
        candName = (String) iter.next();
        candNameLength = candName.length();
  
!       if ((candNameLength > bestNameLength)
  	  && childName.startsWith(candName)
! 	  && (childName.charAt(candNameLength) == '.'))
        {
          cand = (Logger) ((WeakReference) loggers.get(candName)).get();
  	if ((cand == null) || (cand == child))
--- 364,373 ----
        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))
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/LogRecord.java gcc-4.0.0/libjava/java/util/logging/LogRecord.java
*** gcc-3.4.3/libjava/java/util/logging/LogRecord.java	Sat Jun 21 10:31:54 2003
--- gcc-4.0.0/libjava/java/util/logging/LogRecord.java	Fri Oct 22 17:14:27 2004
***************
*** 1,7 ****
! /* LogRecord.java
!    -- a class for the state associated with individual logging events
! 
! Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 35,43 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
--- 34,40 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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 class LogRecord
*** 384,397 ****
    /**
     * The last used sequence number for any LogRecord.
     */
!   private static long lastSeqNum = 0;
  
  
    /**
     * Allocates a sequence number for a new LogRecord.  This class
     * method is only called by the LogRecord constructor.
     */
!   private synchronized static long allocateSeqNum()
    {
      lastSeqNum += 1;
      return lastSeqNum;
--- 381,394 ----
    /**
     * 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;
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/Logger.java gcc-4.0.0/libjava/java/util/logging/Logger.java
*** gcc-3.4.3/libjava/java/util/logging/Logger.java	Sun Aug 31 16:52:16 2003
--- gcc-4.0.0/libjava/java/util/logging/Logger.java	Mon Feb 21 18:19:01 2005
***************
*** 1,7 ****
! /* Logger.java
!    -- a class for logging messages
! 
! Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Logger.java -- a class for logging messages
!    Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** module.  An independent module is a modu
*** 35,50 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
- import java.util.MissingResourceException;
  import java.util.List;
  
  /**
   * A Logger is used for logging information about events. Usually, there
--- 33,46 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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
*************** public class Logger
*** 1173,1189 ****
     * That should be the initial caller of a logging method.
     * @return caller of the initial looging method
     */
!   private StackTraceElement getCallerStackFrame()
!   {
!     Throwable t = new Throwable();
!     StackTraceElement[] stackTrace = t.getStackTrace();
!     int index = 0;
!     // skip to stackentries until this class
!     while(!stackTrace[index].getClassName().equals(getClass().getName())){index++;}
!     // skip the stackentries of this class
!     while(stackTrace[index].getClassName().equals(getClass().getName())){index++;}
! 
!     return stackTrace[index];
!   }
!   
  }
--- 1169,1173 ----
     * That should be the initial caller of a logging method.
     * @return caller of the initial looging method
     */
!   private native StackTraceElement getCallerStackFrame();
  }
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/LoggingPermission.java gcc-4.0.0/libjava/java/util/logging/LoggingPermission.java
*** gcc-3.4.3/libjava/java/util/logging/LoggingPermission.java	Sat Jun 21 10:31:55 2003
--- gcc-4.0.0/libjava/java/util/logging/LoggingPermission.java	Wed Oct 20 07:53:27 2004
*************** module.  An independent module is a modu
*** 33,41 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
--- 33,39 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/MemoryHandler.java gcc-4.0.0/libjava/java/util/logging/MemoryHandler.java
*** gcc-3.4.3/libjava/java/util/logging/MemoryHandler.java	Sat Jun 21 10:31:55 2003
--- gcc-4.0.0/libjava/java/util/logging/MemoryHandler.java	Wed Oct 20 07:53:27 2004
***************
*** 1,7 ****
! /* MemoryHandler.java
!    -- a class for buffering log messages in a memory buffer
! 
! Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 35,44 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
  
--- 33,39 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
  
*************** package java.util.logging;
*** 53,80 ****
   * 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)
--- 48,69 ----
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/SimpleFormatter.java gcc-4.0.0/libjava/java/util/logging/SimpleFormatter.java
*** gcc-3.4.3/libjava/java/util/logging/SimpleFormatter.java	Sun Aug 31 16:52:16 2003
--- gcc-4.0.0/libjava/java/util/logging/SimpleFormatter.java	Wed Oct 20 07:53:27 2004
***************
*** 1,7 ****
! /* SimpleFormatter.java
!    -- a class for formatting log records into short human-readable messages
! 
! Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 35,49 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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.Date;
  import java.text.DateFormat;
  
  /**
   * A <code>SimpleFormatter</code> formats log records into
--- 34,46 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/SocketHandler.java gcc-4.0.0/libjava/java/util/logging/SocketHandler.java
*** gcc-3.4.3/libjava/java/util/logging/SocketHandler.java	Sat Jun 21 10:31:55 2003
--- gcc-4.0.0/libjava/java/util/logging/SocketHandler.java	Wed Oct 20 07:53:27 2004
***************
*** 1,7 ****
! /* 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.
  
--- 1,5 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 35,43 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
--- 33,39 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
*************** package java.util.logging;
*** 68,74 ****
   *
   * <li><code>java.util.SocketHandler.encoding</code> - specifies
   *     the name of the character encoding. Default value:
!  *     the default platform encoding.
   *
   * <li><code>java.util.SocketHandler.host</code> - specifies
   *     the name of the host to which records are published.
--- 64,70 ----
   *
   * <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.
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/StreamHandler.java gcc-4.0.0/libjava/java/util/logging/StreamHandler.java
*** gcc-3.4.3/libjava/java/util/logging/StreamHandler.java	Sat Jun 21 10:31:55 2003
--- gcc-4.0.0/libjava/java/util/logging/StreamHandler.java	Wed Oct 20 07:53:27 2004
***************
*** 1,7 ****
! /* 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.
  
--- 1,6 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 35,43 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
--- 34,40 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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;
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/XMLFormatter.java gcc-4.0.0/libjava/java/util/logging/XMLFormatter.java
*** gcc-3.4.3/libjava/java/util/logging/XMLFormatter.java	Fri Jan  9 08:58:59 2004
--- gcc-4.0.0/libjava/java/util/logging/XMLFormatter.java	Fri Oct 22 17:14:27 2004
***************
*** 1,7 ****
! /* XMLFormatter.java
!    -- a class for formatting log messages into a standard XML format
! 
! Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
! /* 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.
  
*************** module.  An independent module is a modu
*** 35,51 ****
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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.Date;
  import java.util.ResourceBundle;
- import java.text.MessageFormat;
- import java.text.SimpleDateFormat;
  
  /**
   * An <code>XMLFormatter</code> formats LogRecords into
--- 34,47 ----
  or based on this library.  If you modify this library, you may extend
  this exception to your version of the library, but 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
*************** public class XMLFormatter
*** 102,111 ****
     * @param content the element content, or <code>null</code> to
     *        have no output whatsoever appended to <code>buf</code>.
     */
!   private static final void appendTag(StringBuffer buf,
! 				      int indent,
! 				      String tag,
! 				      String content)
    {
      int i;
  
--- 98,105 ----
     * @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;
  
*************** public class XMLFormatter
*** 179,188 ****
     *
     * @param content the element content.
     */
!   private static final void appendTag(StringBuffer buf,
! 				      int indent,
! 				      String tag,
! 				      long content)
    {
      appendTag(buf, indent, tag, Long.toString(content));
    }
--- 173,180 ----
     *
     * @param content the element content.
     */
!   private static void appendTag(StringBuffer buf, int indent,
!                                 String tag, long content)
    {
      appendTag(buf, indent, tag, Long.toString(content));
    }
diff -Nrcpad gcc-3.4.3/libjava/java/util/logging/natLogger.cc gcc-4.0.0/libjava/java/util/logging/natLogger.cc
*** gcc-3.4.3/libjava/java/util/logging/natLogger.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/util/logging/natLogger.cc	Mon Feb 21 18:19:01 2005
***************
*** 0 ****
--- 1,55 ----
+ // natLogger.cc - Native part of Logger class.
+ 
+ /* Copyright (C) 1998, 1999, 2000, 2001  Free Software Foundation
+ 
+    This Logger is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the Logger "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #include <config.h>
+ #include <platform.h>
+ 
+ #include <string.h>
+ 
+ #pragma implementation "Logger.h"
+ 
+ #include <gcj/cni.h>
+ #include <jvm.h>
+ 
+ 
+ #include <java/lang/Object.h>
+ #include <java/lang/Class.h>
+ #include <java/util/logging/Logger.h>
+ #include <java/lang/StackTraceElement.h>
+ #include <java/lang/ArrayIndexOutOfBoundsException.h>
+ 
+ java::lang::StackTraceElement* 
+ java::util::logging::Logger::getCallerStackFrame ()
+ {
+   gnu::gcj::runtime::StackTrace *t 
+     = new gnu::gcj::runtime::StackTrace(4);
+   java::lang::Class *klass = NULL;
+   int i = 2;
+   try
+     {
+       // skip until this class
+       while ((klass = t->classAt (i)) != getClass())
+ 	i++;
+       // skip the stackentries of this class
+       while ((klass = t->classAt (i)) == getClass() || klass == NULL)
+ 	i++;
+     }
+   catch (::java::lang::ArrayIndexOutOfBoundsException *e)
+     {
+       // FIXME: RuntimeError
+     }
+ 
+   java::lang::StackTraceElement *e 
+     = new java::lang::StackTraceElement
+     (JvNewStringUTF (""), 0, 
+      klass->getName(), t->methodAt(i), false);
+ 
+   return e;
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/util/natTimeZone.cc gcc-4.0.0/libjava/java/util/natTimeZone.cc
*** gcc-3.4.3/libjava/java/util/natTimeZone.cc	Wed Feb 19 16:28:37 2003
--- gcc-4.0.0/libjava/java/util/natTimeZone.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,170 ****
- // natTimeZone.cc -- Native side of TimeZone class.
- 
- /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- #include <config.h>
- #include <platform.h>
- 
- #include <gcj/cni.h>
- #include <jvm.h>
- 
- #include <java/util/TimeZone.h>
- #include <java/lang/Character.h>
- #include <java/lang/Integer.h>
- 
- #include <stdio.h>
- 
- #if TIME_WITH_SYS_TIME
- # include <sys/time.h>
- # include <time.h>
- #else
- # if HAVE_SYS_TIME_H
- #  include <sys/time.h>
- # else
- #  include <time.h>
- # endif
- #endif
- 
- #include <string.h>
- 
- /*
-  * This method returns a time zone string that is used by init_properties
-  * to set the default timezone property 'user.timezone'.  That value is
-  * used by default as a key into the timezone table used by the
-  * java::util::TimeZone class.
-  */
- static jstring
- getSystemTimeZone (void)
- {
-   struct tm *tim;
-   time_t current_time;
-   long tzoffset;
-   const char *tz1, *tz2;
-   char *tzid;
- 
-   current_time = time(0);
- 
-   mktime(tim = localtime(&current_time));
- #ifdef STRUCT_TM_HAS_GMTOFF
-   // tm_gmtoff is secs EAST of UTC.
-   tzoffset = -(tim->tm_gmtoff) + tim->tm_isdst * 3600L;
- #elif HAVE_UNDERSCORE_TIMEZONE
-   tzoffset = _timezone;
- #elif HAVE_TIMEZONE
-   // timezone is secs WEST of UTC.
-   tzoffset = timezone;	
- #else
-   // FIXME: there must be another global if neither tm_gmtoff nor timezone
-   // is available, esp. if tzname is valid.
-   // Richard Earnshaw <rearnsha@arm.com> has suggested using difftime to
-   // calculate between gmtime and localtime (and accounting for possible
-   // daylight savings time) as an alternative.
-   tzoffset = 0L;
- #endif
- 
- #ifdef HAVE_TM_ZONE
-   tz1 = tim->tm_zone;
-   tz2 = "";
- #elif defined (HAVE_TZNAME)
-   tz1 = tzname[0];
-   tz2 = strcmp (tzname[0], tzname[1]) ? tzname[1] : "";
- #else
-   // Some targets have no concept of timezones.
-   tz1 = "???";
-   tz2 = tz1;
- #endif
- 
-   if ((tzoffset % 3600) == 0)
-     tzoffset = tzoffset / 3600;
- 
-   tzid = (char*) _Jv_Malloc (strlen(tz1) + strlen(tz2) + 6);
-   sprintf(tzid, "%s%ld%s", tz1, tzoffset, tz2);
-   jstring retval = JvNewStringUTF (tzid);
-   _Jv_Free (tzid);
- 
-   return retval;
- }
- 
- // Get the System Timezone as reported by the OS.  It should be in
- // the form PST8PDT so we'll need to parse it and check that it's valid.
- // FIXME: Using the code from Classpath for generating the System
- // Timezone IMO is suboptimal because it ignores whether the rules for
- // DST match up.
- jstring
- java::util::TimeZone::getDefaultTimeZoneId ()
- {
-   jstring sysTimeZoneId = getSystemTimeZone ();
- 
-   using namespace java::lang;
- 
-   // Check if this is a valid timezone.  Make sure the IDs match
-   // since getTimeZone returns GMT if no match is found.
-   TimeZone *tz = TimeZone::getTimeZone (sysTimeZoneId);
-   if (tz->getID ()->equals (sysTimeZoneId))
-     return sysTimeZoneId;
- 
-   // Check if the base part of sysTimeZoneId is a valid timezone that
-   // matches with daylight usage and rawOffset.  Make sure the IDs match
-   // since getTimeZone returns GMT if no match is found.
-   // First find start of GMT offset info and any Daylight zone name.
-   int startGMToffset = 0;
-   int sysTimeZoneIdLength = sysTimeZoneId->length();
-   for (int i = 0; i < sysTimeZoneIdLength && startGMToffset == 0; i++)
-     {
-       if (Character::isDigit (sysTimeZoneId->charAt (i)))
- 	startGMToffset = i;
-     }
- 
-   int startDaylightZoneName = 0;
-   jboolean usesDaylight = false;
-   for (int i = sysTimeZoneIdLength - 1;
-        i >= 0 && !Character::isDigit (sysTimeZoneId->charAt (i)); --i)
-     {
-       startDaylightZoneName = i;
-     }
-   if (startDaylightZoneName > 0)
-     usesDaylight = true;
- 
-   int GMToffset
-     = Integer::parseInt (startDaylightZoneName == 0 ?
- 			 sysTimeZoneId->substring (startGMToffset) :
- 			 sysTimeZoneId->substring (startGMToffset,
- 						   startDaylightZoneName));
- 
-   // Offset could be in hours or seconds.  Convert to millis.
-   if (GMToffset < 24)
-     GMToffset *= 60 * 60;
-   GMToffset *= -1000;
- 
-   jstring tzBasename = sysTimeZoneId->substring (0, startGMToffset);
-   tz = TimeZone::getTimeZone (tzBasename);
-   if (tz->getID ()->equals (tzBasename) && tz->getRawOffset () == GMToffset)
-     {
-       jboolean tzUsesDaylight = tz->useDaylightTime ();
-       if (usesDaylight && tzUsesDaylight || !usesDaylight && !tzUsesDaylight)
- 	return tzBasename;
-     }
- 
-   // If no match, see if a valid timezone has the same attributes as this
-   // and then use it instead.
-   jstringArray IDs = TimeZone::getAvailableIDs (GMToffset);
-   jstring *elts = elements (IDs);
-   for (int i = 0; i < IDs->length; ++i)
-     {
-       // FIXME: The daylight savings rules may not match the rules
-       // for the desired zone.
-       jboolean IDusesDaylight =
- 	TimeZone::getTimeZone (elts[i])->useDaylightTime ();
-       if (usesDaylight && IDusesDaylight || !usesDaylight && !IDusesDaylight)
- 	return elts[i];
-     }
- 
-   // If all else fails, return null.
-   return NULL;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/java/util/natVMTimeZone.cc gcc-4.0.0/libjava/java/util/natVMTimeZone.cc
*** gcc-3.4.3/libjava/java/util/natVMTimeZone.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/java/util/natVMTimeZone.cc	Sat Sep 25 22:21:51 2004
***************
*** 0 ****
--- 1,145 ----
+ // natVMTimeZone.cc -- Native side of VMTimeZone class.
+ 
+ /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+    Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #include <config.h>
+ #include <platform.h>
+ 
+ #include <gcj/cni.h>
+ #include <jvm.h>
+ 
+ #include <java/util/VMTimeZone.h>
+ #include <java/lang/Character.h>
+ #include <java/lang/Integer.h>
+ 
+ #include <stdio.h>
+ 
+ #if TIME_WITH_SYS_TIME
+ # include <sys/time.h>
+ # include <time.h>
+ #else
+ # if HAVE_SYS_TIME_H
+ #  include <sys/time.h>
+ # else
+ #  include <time.h>
+ # endif
+ #endif
+ 
+ #include <string.h>
+ 
+ /**
+  * This method returns a time zone id string which is in the form
+  * (standard zone name) or (standard zone name)(GMT offset) or
+  * (standard zone name)(GMT offset)(daylight time zone name).  The
+  * GMT offset can be in seconds, or where it is evenly divisible by
+  * 3600, then it can be in hours.  The offset must be the time to
+  * add to the local time to get GMT.  If a offset is given and the
+  * time zone observes daylight saving then the (daylight time zone
+  * name) must also be given (otherwise it is assumed the time zone
+  * does not observe any daylight savings).
+  * <p>
+  * The result of this method is given to getDefaultTimeZone(String)
+  * which tries to map the time zone id to a known TimeZone.  See
+  * that method on how the returned String is mapped to a real
+  * TimeZone object.
+  */
+ jstring
+ java::util::VMTimeZone::getSystemTimeZoneId()
+ {
+   struct tm tim;
+ #ifndef HAVE_LOCALTIME_R
+   struct tm *lt_tim;
+ #endif
+ #ifdef HAVE_TM_ZONE
+   int month;
+ #endif
+   time_t current_time;
+   long tzoffset;
+   const char *tz1, *tz2;
+   char *tzid;
+ 
+   time(&current_time);
+ #ifdef HAVE_LOCALTIME_R
+   localtime_r(&current_time, &tim);
+ #else
+   /* Fall back on non-thread safe localtime. */
+   lt_tim = localtime(&current_time);
+   memcpy(&tim, lt_tim, sizeof (struct tm));
+ #endif
+   mktime(&tim);
+ 
+ #ifdef HAVE_TM_ZONE
+   /* We will cycle through the months to make sure we hit dst. */
+   month = tim.tm_mon;
+   tz1 = tz2 = NULL;
+   while (tz1 == NULL || tz2 == NULL)
+     {
+       if (tim.tm_isdst > 0)
+         tz2 = tim.tm_zone;
+       else if (tz1 == NULL)
+         {
+           tz1 = tim.tm_zone;
+           month = tim.tm_mon;
+         }
+ 
+       if (tz1 == NULL || tz2 == NULL)
+         {
+           tim.tm_mon++;
+           tim.tm_mon %= 12;
+         }
+ 
+       if (tim.tm_mon == month && tz2 == NULL)
+         tz2 = "";
+       else
+         mktime(&tim);
+     }
+   /* We want to make sure the tm struct we use later on is not dst. */
+   tim.tm_mon = month;
+   mktime(&tim);
+ #elif defined (HAVE_TZNAME)
+   /* If dst is never used, tzname[1] is the empty string. */
+   tzset();
+   tz1 = tzname[0];
+   tz2 = tzname[1];
+ #else
+   /* Some targets have no concept of timezones. Assume GMT without dst. */
+   tz1 = "GMT";
+   tz2 = "";
+ #endif
+ 
+ #ifdef STRUCT_TM_HAS_GMTOFF
+   /* tm_gmtoff is the number of seconds that you must add to GMT to get
+      local time, we need the number of seconds to add to the local time
+      to get GMT. */
+   tzoffset = -1L * tim.tm_gmtoff;
+ #elif HAVE_UNDERSCORE_TIMEZONE
+   tzoffset = _timezone;
+ #elif HAVE_TIMEZONE
+   /* timezone is secs WEST of UTC. */
+   tzoffset = timezone;	
+ #else
+   /* FIXME: there must be another global if neither tm_gmtoff nor timezone
+      is available, esp. if tzname is valid.
+      Richard Earnshaw <rearnsha@arm.com> has suggested using difftime to
+      calculate between gmtime and localtime (and accounting for possible
+      daylight savings time) as an alternative. */
+   tzoffset = 0L;
+ #endif
+ 
+   if ((tzoffset % 3600) == 0)
+     tzoffset = tzoffset / 3600;
+ 
+   tzid = (char*) _Jv_Malloc (strlen(tz1) + strlen(tz2) + 6);
+   sprintf(tzid, "%s%ld%s", tz1, tzoffset, tz2);
+   jstring retval = JvNewStringUTF (tzid);
+   _Jv_Free (tzid);
+ 
+   return retval;
+ }
diff -Nrcpad gcc-3.4.3/libjava/java/util/prefs/AbstractPreferences.java gcc-4.0.0/libjava/java/util/prefs/AbstractPreferences.java
*** gcc-3.4.3/libjava/java/util/prefs/AbstractPreferences.java	Thu Dec 18 16:48:33 2003
--- gcc-4.0.0/libjava/java/util/prefs/AbstractPreferences.java	Tue Feb 22 21:11:29 2005
***************
*** 1,5 ****
! /* AbstractPreferences - Partial implementation of a Preference node
!    Copyright (C) 2001, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* AbstractPreferences -- Partial implementation of a Preference node
!    Copyright (C) 2001, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,50 ****
  
  package java.util.prefs;
  
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.OutputStream;
- import java.util.Iterator;
  import java.util.HashMap;
  import java.util.TreeSet;
- import gnu.java.util.prefs.NodeWriter;
  
  /**
   * Partial implementation of a Preference node.
--- 38,51 ----
  
  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.
*************** public abstract class AbstractPreference
*** 118,124 ****
              throw new IllegalArgumentException("Illegal name argument '"
                                                 + name
                                                 + "' (parent is "
!                                                + parent == null ? "" : "not "
                                                 + "null)");
          this.parent = parent;
          this.name = name;
--- 119,125 ----
              throw new IllegalArgumentException("Illegal name argument '"
                                                 + name
                                                 + "' (parent is "
!                                                + (parent == null ? "" : "not ")
                                                 + "null)");
          this.parent = parent;
          this.name = name;
*************** public abstract class AbstractPreference
*** 549,554 ****
--- 550,557 ----
              String value;
              try {
                  value = getSpi(key);
+             } catch (ThreadDeath death) {
+                 throw death;
              } catch (Throwable t) {
                  value = null;
              }
*************** public abstract class AbstractPreference
*** 1196,1202 ****
       * @exception BackingStoreException when the backing store cannot be     
       *            reached
       */
!     abstract protected String[] keysSpi() throws BackingStoreException;
       
      /**
       * Returns the value associated with the key in this preferences node or
--- 1199,1205 ----
       * @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
*************** public abstract class AbstractPreference
*** 1206,1212 ****
       * key is valid, not null and that the node has not been removed.
       * <code>key()</code> will catch any exceptions that this method throws.
       */
!     abstract protected String getSpi(String key);
  
      /**
       * Sets the value of the given preferences entry for this node.
--- 1209,1215 ----
       * 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.
*************** public abstract class AbstractPreference
*** 1219,1225 ****
       * Called by <code>put()</code> with this node locked after checking that
       * key and value are valid and non-null.
       */
!     abstract protected void putSpi(String key, String value);
  
      /**
       * Removes the given key entry from this preferences node.
--- 1222,1228 ----
       * 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.
*************** public abstract class AbstractPreference
*** 1232,1238 ****
       * Called by <code>remove()</code> with this node locked after checking
       * that the key is valid and non-null.
       */
!     abstract protected void removeSpi(String key);
  
      /**
       * Writes all entries of this preferences node that have not yet been
--- 1235,1241 ----
       * 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
*************** public abstract class AbstractPreference
*** 1244,1250 ****
       * <p>
       * Called (indirectly) by <code>flush()</code> with this node locked.
       */
!     abstract protected void flushSpi() throws BackingStoreException;
  
      /**
       * Writes all entries of this preferences node that have not yet been
--- 1247,1253 ----
       * <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
*************** public abstract class AbstractPreference
*** 1256,1262 ****
       * <p>
       * Called (indirectly) by <code>sync()</code> with this node locked.
       */
!     abstract protected void syncSpi() throws BackingStoreException;
  
      /**
       * Clears this node from this VM and removes it from the backing store.
--- 1259,1265 ----
       * <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.
*************** public abstract class AbstractPreference
*** 1265,1269 ****
       * Called (indirectly) by <code>removeNode()</code> with this node locked
       * after all the sub nodes of this node have already been removed.
       */
!     abstract protected void removeNodeSpi() throws BackingStoreException;
  }
--- 1268,1272 ----
       * 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-3.4.3/libjava/java/util/prefs/BackingStoreException.java gcc-4.0.0/libjava/java/util/prefs/BackingStoreException.java
*** gcc-3.4.3/libjava/java/util/prefs/BackingStoreException.java	Thu Feb 13 07:45:58 2003
--- gcc-4.0.0/libjava/java/util/prefs/BackingStoreException.java	Thu Feb 17 07:48:45 2005
***************
*** 1,6 ****
  /* BackingStoreException.java - chained exception thrown when backing store
     fails
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* 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.
  
*************** exception statement from your version. *
*** 38,46 ****
  
  package java.util.prefs;
  
- import java.io.ObjectOutputStream;
- import java.io.ObjectInputStream;
  import java.io.NotSerializableException;
  
  /**
   * Chained exception thrown when backing store fails. This exception is
--- 38,46 ----
  
  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
*************** import java.io.NotSerializableException;
*** 52,58 ****
   * <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
   */
--- 52,58 ----
   * <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
   */
diff -Nrcpad gcc-3.4.3/libjava/java/util/prefs/InvalidPreferencesFormatException.java gcc-4.0.0/libjava/java/util/prefs/InvalidPreferencesFormatException.java
*** gcc-3.4.3/libjava/java/util/prefs/InvalidPreferencesFormatException.java	Thu Feb 13 07:45:58 2003
--- gcc-4.0.0/libjava/java/util/prefs/InvalidPreferencesFormatException.java	Thu Feb 17 07:48:46 2005
***************
*** 1,6 ****
  /* InvalidPreferencesFormatException - indicates reading prefs from stream
     failed
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* InvalidPreferencesFormatException - indicates reading prefs from stream
     failed
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,46 ****
  
  package java.util.prefs;
  
- import java.io.ObjectOutputStream;
- import java.io.ObjectInputStream;
  import java.io.NotSerializableException;
  
  /**
   * Indicates reading prefs from stream failed. Thrown by the
--- 38,46 ----
  
  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
*************** import java.io.NotSerializableException;
*** 49,56 ****
   *
   * <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>
   * @see Preferences
   * @since 1.4
   * @status updated to 1.4
--- 49,57 ----
   *
   * <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
diff -Nrcpad gcc-3.4.3/libjava/java/util/prefs/Preferences.java gcc-4.0.0/libjava/java/util/prefs/Preferences.java
*** gcc-3.4.3/libjava/java/util/prefs/Preferences.java	Tue Dec  9 16:17:01 2003
--- gcc-4.0.0/libjava/java/util/prefs/Preferences.java	Thu Feb 17 07:48:46 2005
***************
*** 1,5 ****
! /* Preferences - Preference node containing key value entries and subnodes
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* 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.
  
*************** exception statement from your version. *
*** 37,52 ****
  
  package java.util.prefs;
  
  import java.io.InputStream;
  import java.io.OutputStream;
- import java.io.IOException;
- 
  import java.security.AccessController;
  import java.security.Permission;
  import java.security.PrivilegedAction;
  
- import gnu.java.util.prefs.NodeReader;
- 
  /**
   * Preference node containing key value entries and subnodes.
   * <p>
--- 37,51 ----
  
  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>
*************** public abstract class Preferences {
*** 235,241 ****
       * The package node name of the object is determined by dropping the
       * class name of the object of the fully quallified class name and
       * replacing all '.' to '/' in the package name. If the class of the
!      * object has no package then the package node name is "<unnamed>".
       * The returened node is <code>systemRoot().node(packageNodeName)</code>.
       *
       * @param o Object whose default system preference node is requested
--- 234,240 ----
       * The package node name of the object is determined by dropping the
       * class name of the object of the fully quallified class name and
       * replacing 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 returened node is <code>systemRoot().node(packageNodeName)</code>.
       *
       * @param o Object whose default system preference node is requested
*************** public abstract class Preferences {
*** 254,260 ****
       * The package node name of the object is determined by dropping the
       * class name of the object of the fully quallified class name and
       * replacing all '.' to '/' in the package name. If the class of the
!      * object has no package then the package node name is "<unnamed>".
       * The returened node is <code>userRoot().node(packageNodeName)</code>.
       *
       * @param o Object whose default user preference node is requested
--- 253,259 ----
       * The package node name of the object is determined by dropping the
       * class name of the object of the fully quallified class name and
       * replacing 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 returened node is <code>userRoot().node(packageNodeName)</code>.
       *
       * @param o Object whose default user preference node is requested
*************** public abstract class Preferences {
*** 308,327 ****
       * 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 "/".
       */
!     abstract public String absolutePath();
  
      /**
       * Returns true if this node comes from the user preferences tree, false
       * if it comes from the system preferences tree.
       */
!     abstract public 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 "".
       */
!     abstract public String name();
  
      /**
       * Returns the String given by
--- 307,326 ----
       * 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
*************** public abstract class Preferences {
*** 329,335 ****
       * (isUserNode() ? "User":"System") + " Preference Node: " + absolutePath()
       * </code>
       */
!     abstract public String toString();
  
      // abstract methods (navigation)
  
--- 328,334 ----
       * (isUserNode() ? "User":"System") + " Preference Node: " + absolutePath()
       * </code>
       */
!     public abstract String toString();
  
      // abstract methods (navigation)
  
*************** public abstract class Preferences {
*** 341,347 ****
       *            reached
       * @exception IllegalStateException when this node has been removed
       */
!     abstract public String[] childrenNames() throws BackingStoreException;
  
      /**
       * Returns a sub node of this preferences node if the given path is
--- 340,346 ----
       *            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
*************** public abstract class Preferences {
*** 354,360 ****
       * string "/" (indicating the root node) or any name on the path is more
       * then 80 characters long
       */
!     abstract public Preferences node(String path);
  
      /**
       * Returns true if the node that the path points to exists in memory or
--- 353,359 ----
       * 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
*************** public abstract class Preferences {
*** 372,378 ****
       * string "/" (indicating the root node) or any name on the path is more
       * then 80 characters long
       */
!     abstract public boolean nodeExists(String path)
                                  throws BackingStoreException;
  
      /**
--- 371,377 ----
       * 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;
  
      /**
*************** public abstract class Preferences {
*** 381,401 ****
       *
       * @exception IllegalStateException if this node has been removed
       */
!     abstract public Preferences parent();
  
      // abstract methods (export)
  
      /**
       * XXX
       */
!     abstract public void exportNode(OutputStream os)
                                  throws BackingStoreException,
                                         IOException;
  
      /**
       * XXX
       */
!     abstract public void exportSubtree(OutputStream os)
                                  throws BackingStoreException,
                                         IOException;
  
--- 380,400 ----
       *
       * @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;
  
*************** public abstract class Preferences {
*** 409,415 ****
       *            reached
       * @exception IllegalStateException if this node has been removed
       */
!     abstract public String[] keys() throws BackingStoreException;
  
      /**
       * Returns the value associated with the key in this preferences node. If
--- 408,414 ----
       *            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
*************** public abstract class Preferences {
*** 421,427 ****
       * @exception IllegalStateException if this node has been removed
       * @exception NullPointerException if key is null
       */
!     abstract public String get(String key, String defaultVal);
  
      /**
       * Convenience method for getting the given entry as a boolean.
--- 420,426 ----
       * @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.
*************** public abstract class Preferences {
*** 433,439 ****
       * @exception IllegalStateException if this node has been removed
       * @exception NullPointerException if key is null
       */
!     abstract public boolean getBoolean(String key, boolean defaultVal);
  
      /**
       * Convenience method for getting the given entry as a byte array.
--- 432,438 ----
       * @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.
*************** public abstract class Preferences {
*** 446,452 ****
       * @exception IllegalStateException if this node has been removed
       * @exception NullPointerException if key is null
       */
!     abstract public byte[] getByteArray(String key, byte[] defaultVal);
  
      /**
       * Convenience method for getting the given entry as a double.
--- 445,451 ----
       * @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.
*************** public abstract class Preferences {
*** 458,464 ****
       * @exception IllegalStateException if this node has been removed
       * @exception NullPointerException if key is null
       */
!     abstract public double getDouble(String key, double defaultVal);
  
      /**
       * Convenience method for getting the given entry as a float.
--- 457,463 ----
       * @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.
*************** public abstract class Preferences {
*** 470,476 ****
       * @exception IllegalStateException if this node has been removed
       * @exception NullPointerException if key is null
       */
!     abstract public float getFloat(String key, float defaultVal);
  
      /**
       * Convenience method for getting the given entry as an integer.
--- 469,475 ----
       * @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.
*************** public abstract class Preferences {
*** 482,488 ****
       * @exception IllegalStateException if this node has been removed
       * @exception NullPointerException if key is null
       */
!     abstract public int getInt(String key, int defaultVal);
  
      /**
       * Convenience method for getting the given entry as a long.
--- 481,487 ----
       * @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.
*************** public abstract class Preferences {
*** 494,500 ****
       * @exception IllegalStateException if this node has been removed
       * @exception NullPointerException if key is null
       */
!     abstract public long getLong(String key, long defaultVal);
  
      /**
       * Sets the value of the given preferences entry for this node.
--- 493,499 ----
       * @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.
*************** public abstract class Preferences {
*** 508,514 ****
       * @exception IllegalArgumentException if either key or value are to large
       * @exception IllegalStateException when this node has been removed
       */
!     abstract public void put(String key, String value);
  
      /**
       * Convenience method for setting the given entry as a boolean.
--- 507,513 ----
       * @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.
*************** public abstract class Preferences {
*** 519,525 ****
       * @exception IllegalArgumentException if the key length is to large
       * @exception IllegalStateException when this node has been removed
       */
!     abstract public void putBoolean(String key, boolean value);
  
      /**
       * Convenience method for setting the given entry as an array of bytes.
--- 518,524 ----
       * @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.
*************** public abstract class Preferences {
*** 534,540 ****
       * @exception IllegalArgumentException if either key or value are to large
       * @exception IllegalStateException when this node has been removed
       */
!     abstract public void putByteArray(String key, byte[] value);
  
      /**
       * Convenience method for setting the given entry as a double.
--- 533,539 ----
       * @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.
*************** public abstract class Preferences {
*** 545,551 ****
       * @exception IllegalArgumentException if the key length is to large
       * @exception IllegalStateException when this node has been removed
       */
!     abstract public void putDouble(String key, double value);
  
      /**
       * Convenience method for setting the given entry as a float.
--- 544,550 ----
       * @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.
*************** public abstract class Preferences {
*** 556,562 ****
       * @exception IllegalArgumentException if the key length is to large
       * @exception IllegalStateException when this node has been removed
       */
!     abstract public void putFloat(String key, float value);
  
      /**
       * Convenience method for setting the given entry as an integer.
--- 555,561 ----
       * @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.
*************** public abstract class Preferences {
*** 567,573 ****
       * @exception IllegalArgumentException if the key length is to large
       * @exception IllegalStateException when this node has been removed
       */
!     abstract public void putInt(String key, int value);
  
      /**
       * Convenience method for setting the given entry as a long.
--- 566,572 ----
       * @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.
*************** public abstract class Preferences {
*** 578,584 ****
       * @exception IllegalArgumentException if the key length is to large
       * @exception IllegalStateException when this node has been removed
       */
!     abstract public void putLong(String key, long value);
  
      /**
       * Removes the preferences entry from this preferences node.
--- 577,583 ----
       * @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.
*************** public abstract class Preferences {
*** 590,596 ****
       * @exception IllegalArgumentException if the key length is to large
       * @exception IllegalStateException when this node has been removed
       */
!     abstract public void remove(String key);
  
      // abstract methods (preference node manipulation)
  
--- 589,595 ----
       * @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)
  
*************** public abstract class Preferences {
*** 605,611 ****
       *            reached
       * @exception IllegalStateException if this node has been removed
       */
!     abstract public void clear() throws BackingStoreException;
  
      /**
       * Writes all preference changes on this and any subnode that have not
--- 604,610 ----
       *            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
*************** public abstract class Preferences {
*** 619,625 ****
       *            reached
       * @exception IllegalStateException if this node has been removed
       */
!     abstract public void flush() throws BackingStoreException;
  
      /**
       * Writes and reads all preference changes to and from this and any
--- 618,624 ----
       *            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
*************** public abstract class Preferences {
*** 631,637 ****
       *            reached
       * @exception IllegalStateException if this node has been removed
       */
!     abstract public void sync() throws BackingStoreException;
  
      /**
       * Removes this and all subnodes from the backing store and clears all
--- 630,636 ----
       *            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
*************** public abstract class Preferences {
*** 652,670 ****
       * @exception IllegalStateException if this node has already been removed
       * @exception UnsupportedOperationException if this is a root node
       */
!     abstract public void removeNode() throws BackingStoreException;
  
      // abstract methods (listeners)
  
!     abstract public void addNodeChangeListener(NodeChangeListener listener);
  
!     abstract public void addPreferenceChangeListener
                              (PreferenceChangeListener listener);
  
!     abstract public void removeNodeChangeListener(NodeChangeListener listener);
  
!     abstract public void removePreferenceChangeListener
                              (PreferenceChangeListener listener);
- 
  }
  
--- 651,668 ----
       * @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-3.4.3/libjava/java/util/regex/Matcher.java gcc-4.0.0/libjava/java/util/regex/Matcher.java
*** gcc-3.4.3/libjava/java/util/regex/Matcher.java	Wed Apr 30 08:57:04 2003
--- gcc-4.0.0/libjava/java/util/regex/Matcher.java	Mon Feb  7 20:44:27 2005
***************
*** 1,5 ****
! /* Matcher.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Matcher.java -- Instance of a regular expression applied to a char sequence.
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,50 ****
  
  package java.util.regex;
  
  /**
!  * @author Michael Koch
   * @since 1.4
   */
! public class Matcher
  {
    private Pattern pattern;
    
    /**
     * @param sb The target string buffer
--- 38,63 ----
  
  package java.util.regex;
  
+ import gnu.regexp.REMatch;
+ 
  /**
!  * Instance of a regular expression applied to a char sequence.
!  *
   * @since 1.4
   */
! public final class Matcher
  {
    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
*************** public class Matcher
*** 58,64 ****
    public Matcher appendReplacement (StringBuffer sb, String replacement)
      throws IllegalStateException
    {
!     throw new Error("Not implemented");
    }
  
    /**
--- 71,82 ----
    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;
    }
  
    /**
*************** public class Matcher
*** 66,72 ****
     */
    public StringBuffer appendTail (StringBuffer sb)
    {
!     throw new Error("Not implemented");
    }
   
    /**
--- 84,91 ----
     */
    public StringBuffer appendTail (StringBuffer sb)
    {
!     sb.append(input.subSequence(appendPosition, input.length()).toString());
!     return sb;
    }
   
    /**
*************** public class Matcher
*** 76,82 ****
    public int end ()
      throws IllegalStateException
    {
!     throw new Error ("Not implemented");
    }
    
    /**
--- 95,102 ----
    public int end ()
      throws IllegalStateException
    {
!     assertMatchOp();
!     return match.getEndIndex();
    }
    
    /**
*************** public class Matcher
*** 90,103 ****
    public int end (int group)
      throws IllegalStateException
    {
!     throw new Error ("Not implemented");
    }
   
    public boolean find ()
    {
!     throw new Error ("Not implemented");
!   }
!   
    /**
     * @param start The index to start the new pattern matching
     *
--- 110,145 ----
    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
     *
*************** public class Matcher
*** 106,112 ****
     */
    public boolean find (int start)
    {
!     throw new Error ("Not implemented");
    }
   
    /**
--- 148,160 ----
     */
    public boolean find (int start)
    {
!     match = pattern.getRE().getMatch(input, start);
!     if (match != null)
!       {
! 	position = match.getEndIndex();
! 	return true;
!       }
!     return false;
    }
   
    /**
*************** public class Matcher
*** 115,121 ****
     */
    public String group ()
    {
!     throw new Error ("Not implemented");
    }
    
    /**
--- 163,170 ----
     */
    public String group ()
    {
!     assertMatchOp();
!     return match.toString();
    }
    
    /**
*************** public class Matcher
*** 129,135 ****
    public String group (int group)
      throws IllegalStateException
    {
!     throw new Error ("Not implemented");
    }
  
    /**
--- 178,185 ----
    public String group (int group)
      throws IllegalStateException
    {
!     assertMatchOp();
!     return match.toString(group);
    }
  
    /**
*************** public class Matcher
*** 137,143 ****
     */
    public String replaceFirst (String replacement)
    {
!     throw new Error ("Not implemented");
    }
  
    /**
--- 187,195 ----
     */
    public String replaceFirst (String replacement)
    {
!     reset();
!     // Semantics might not quite match
!     return pattern.getRE().substitute(input, replacement, position);
    }
  
    /**
*************** public class Matcher
*** 145,161 ****
     */
    public String replaceAll (String replacement)
    {
!     throw new Error ("Not implemented");
    }
    
    public int groupCount ()
    {
!     throw new Error("Not implemented");
    }
   
    public boolean lookingAt ()
    {
!     throw new Error("Not implemented");
    }
    
    /**
--- 197,224 ----
     */
    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;
    }
    
    /**
*************** public class Matcher
*** 170,176 ****
     */
    public boolean matches ()
    {
!     throw new Error("Not implemented");
    }
    
    /**
--- 233,245 ----
     */
    public boolean matches ()
    {
!     if (lookingAt())
!       {
! 	if (position == input.length())
! 	  return true;
! 	match = null;
!       }
!     return false;
    }
    
    /**
*************** public class Matcher
*** 183,189 ****
    
    public Matcher reset ()
    {
!     throw new Error ("Not implemented");
    }
    
    /**
--- 252,260 ----
    
    public Matcher reset ()
    {
!     position = 0;
!     match = null;
!     return this;
    }
    
    /**
*************** public class Matcher
*** 191,197 ****
     */
    public Matcher reset (CharSequence input)
    {
!     throw new Error ("Not implemented");
    }
    
    /**
--- 262,269 ----
     */
    public Matcher reset (CharSequence input)
    {
!     this.input = input;
!     return reset();
    }
    
    /**
*************** public class Matcher
*** 203,209 ****
    public int start ()
      throws IllegalStateException
    {
!     throw new Error("Not implemented");
    }
  
    /**
--- 275,282 ----
    public int start ()
      throws IllegalStateException
    {
!     assertMatchOp();
!     return match.getStartIndex();
    }
  
    /**
*************** public class Matcher
*** 217,222 ****
    public int start (int group)
      throws IllegalStateException
    {
!     throw new Error("Not implemented");
    }
  }
--- 290,301 ----
    public int start (int group)
      throws IllegalStateException
    {
!     assertMatchOp();
!     return match.getStartIndex(group);
!   }
! 
!   private void assertMatchOp()
!   {
!     if (match == null) throw new IllegalStateException();
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/util/regex/Pattern.java gcc-4.0.0/libjava/java/util/regex/Pattern.java
*** gcc-3.4.3/libjava/java/util/regex/Pattern.java	Wed Apr 30 08:57:04 2003
--- gcc-4.0.0/libjava/java/util/regex/Pattern.java	Mon Feb  7 20:44:27 2005
***************
*** 1,5 ****
! /* Pattern.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Pattern.java -- Compiled regular expression ready to be applied.
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,50 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- // Stub class until java.util.regex is implemented.
  package java.util.regex;
  
  import java.io.Serializable;
  
  /**
!  * @author Michael Koch
   * @since 1.4
   */
! public class Pattern implements Serializable
  {
    private static final long serialVersionUID = 5073258162644648461L;
    
--- 35,56 ----
  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 class Pattern implements Serializ
*** 56,69 ****
    public static final int UNICODE_CASE = 64;
    public static final int UNIX_LINES = 1;
    
!   private String regex;
!   private int flags;
  
!   private Pattern (String regex)
!     throws PatternSyntaxException
!   {
!     this (regex, 0);
!   }
  
    private Pattern (String regex, int flags)
      throws PatternSyntaxException
--- 62,71 ----
    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
*************** public class Pattern implements Serializ
*** 71,79 ****
      this.regex = regex;
      this.flags = flags;
  
!     throw new Error ("Not implemented");
    }
   
    /**
     * @param regex The regular expression
     *
--- 73,120 ----
      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 =
! 
!     // Eventually there will be such a thing as JDK 1_4 syntax
!     RESyntax syntax = RESyntax.RE_SYNTAX_PERL5;
!     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)
!       {
! 	throw new PatternSyntaxException(e.getMessage(),
! 					 regex, e.getPosition());
!       }
    }
   
+   // package private accessor method
+   RE getRE()
+   {
+     return re;
+   }
+ 
    /**
     * @param regex The regular expression
     *
*************** public class Pattern implements Serializ
*** 82,88 ****
    public static Pattern compile (String regex)
      throws PatternSyntaxException
    {
!     throw new Error ("Not implemented");
    }
    
    /**
--- 123,129 ----
    public static Pattern compile (String regex)
      throws PatternSyntaxException
    {
!     return compile(regex, 0);
    }
    
    /**
*************** public class Pattern implements Serializ
*** 116,122 ****
     */
    public static boolean matches (String regex, CharSequence input) 
    {
!     throw new Error ("Not implemented");
    }
    
    /**
--- 157,163 ----
     */
    public static boolean matches (String regex, CharSequence input) 
    {
!     return compile(regex).matcher(input).matches();
    }
    
    /**
*************** public class Pattern implements Serializ
*** 124,130 ****
     */
    public Matcher matcher (CharSequence input)
    {
!     throw new Error ("Not implemented");
    }
    
    /**
--- 165,171 ----
     */
    public Matcher matcher (CharSequence input)
    {
!     return new Matcher(this, input);
    }
    
    /**
*************** public class Pattern implements Serializ
*** 132,138 ****
     */
    public String[] split (CharSequence input)
    {
!     throw new Error ("Not implemented");
    }
    
    /**
--- 173,179 ----
     */
    public String[] split (CharSequence input)
    {
!     return split(input, 0);
    }
    
    /**
*************** public class Pattern implements Serializ
*** 141,151 ****
     */
    public String[] split (CharSequence input, int limit)
    {
!     throw new Error ("Not implemented");
    }
    
    public String pattern ()
    {
!     throw new Error ("Not implemented");
    }
  }
--- 182,254 ----
     */
    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;
! 
!     while (matched = matcher.find() && (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();
!       }
! 
!     // 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-3.4.3/libjava/java/util/zip/CheckedInputStream.java gcc-4.0.0/libjava/java/util/zip/CheckedInputStream.java
*** gcc-3.4.3/libjava/java/util/zip/CheckedInputStream.java	Tue Jan 22 22:40:41 2002
--- gcc-4.0.0/libjava/java/util/zip/CheckedInputStream.java	Sun Nov  7 01:25:47 2004
***************
*** 1,5 ****
  /* CheckedInputStream.java - Compute checksum of data being read
!    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CheckedInputStream.java - Compute checksum of data being read
!    Copyright (C) 1999, 2000, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.InputStream;
  import java.io.IOException;
  
  /* Written using on-line Java Platform 1.2 API Specification
   * and JCL book.
--- 35,46 ----
  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.
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/CheckedOutputStream.java gcc-4.0.0/libjava/java/util/zip/CheckedOutputStream.java
*** gcc-3.4.3/libjava/java/util/zip/CheckedOutputStream.java	Tue Jan 22 22:40:41 2002
--- gcc-4.0.0/libjava/java/util/zip/CheckedOutputStream.java	Wed Oct 20 08:09:25 2004
*************** this exception to your version of the li
*** 35,45 ****
  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.OutputStream;
  import java.io.IOException;
  
  /* Written using on-line Java Platform 1.2 API Specification
   * and JCL book.
--- 35,46 ----
  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.
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/Deflater.java gcc-4.0.0/libjava/java/util/zip/Deflater.java
*** gcc-3.4.3/libjava/java/util/zip/Deflater.java	Tue May 27 06:34:29 2003
--- gcc-4.0.0/libjava/java/util/zip/Deflater.java	Thu Feb  5 16:04:28 2004
***************
*** 1,5 ****
  /* Deflater.java - Compress a data stream
!    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Deflater.java - Compress a data stream
!    Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package java.util.zip;
*** 40,52 ****
  import gnu.gcj.RawData;
  
  /**
   * @author Tom Tromey
-  * @date May 17, 1999
-  */
- 
- /* Written using on-line Java Platform 1.2 API Specification
-  * and JCL book.
-  * Believed complete and correct.
   */
  public class Deflater
  {
--- 40,54 ----
  import gnu.gcj.RawData;
  
  /**
+  * 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
  {
*************** public class Deflater
*** 91,185 ****
     */
    public static final int DEFLATED = 8;
  
!   public int deflate (byte[] buf)
!   {
!     return deflate (buf, 0, buf.length);
!   }
  
!   public native int deflate (byte[] buf, int off, int len);
!   private native void init (int level, boolean noHeader);
!   private native void update ();
  
!   public Deflater ()
    {
!     this (DEFAULT_COMPRESSION, false);
    }
  
!   public Deflater (int lvl)
    {
!     this (lvl, false);
    }
  
!   public Deflater (int lvl, boolean noHeader)
    {
      this.strategy = DEFAULT_STRATEGY;
!     init (lvl, noHeader);
!     setLevel (lvl);
    }
  
!   public native void end ();
  
!   protected void finalize ()
!   {
!     end ();
!   }
  
!   public native void finish ();
  
!   public synchronized boolean finished ()
    {
!     return is_finished;
    }
  
!   public native int getAdler ();
!   public native int getTotalIn ();
!   public native int getTotalOut ();
!   public native boolean needsInput ();
!   public native void reset ();
  
!   public void setDictionary (byte[] buf)
    {
!     setDictionary (buf, 0, buf.length);
    }
  
!   public native void setDictionary (byte[] buf, int off, int len);
  
!   public void setInput (byte[] buf)
    {
!     setInput (buf, 0, buf.length);
    }
  
!   public native void setInput (byte[] buf, int off, int len);
  
!   public synchronized void setLevel (int lvl)
    {
      if (lvl != -1 && (lvl < 0 || lvl > 9))
!       throw new IllegalArgumentException ();
      level = (lvl == -1) ? 6 : lvl;
!     update ();
    }
  
!   public synchronized void setStrategy (int stgy)
    {
      if (stgy != DEFAULT_STRATEGY && stgy != FILTERED
  	&& stgy != HUFFMAN_ONLY)
!       throw new IllegalArgumentException ();
      strategy = stgy;
!     update ();
    }
  
!   // Compression level.
!   private int level;
! 
!   // Compression strategy.
!   private int strategy;
  
!   // The zlib stream.
!   private RawData zstream;
  
!   // True if finished.
!   private boolean is_finished;
  
!   // `Flush' flag to pass to next call to deflate.
!   private int flush_flag;
  }
--- 93,328 ----
     */
    public static final int DEFLATED = 8;
  
!   /** Compression level. */
!   private int level;
  
!   /** Compression strategy. */
!   private int strategy;
  
!   /** The zlib stream. */
!   private RawData zstream;
! 
!   /** True if finished. */
!   private boolean is_finished;
! 
!   /** `Flush' flag to pass to next call to deflate. */
!   private int flush_flag;
! 
!   /**
!    * 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 noHeader)
    {
      this.strategy = DEFAULT_STRATEGY;
!     init(lvl, noHeader);
!     setLevel(lvl);
    }
  
!   private native void init(int level, boolean noHeader);
!   
!   private native void update();
  
!   /** 
!    * 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 native void 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 native void end();
  
!   /** 
!    * Gets the current adler checksum of the data that was processed so
!    * far.
!    */
!   public native int getAdler();
  
!   /** 
!    * Gets the number of input bytes processed so far.
!    */
!   public native int getTotalIn();
! 
!   /** 
!    * Gets the number of output bytes so far.
!    */
!   public native int getTotalOut();
! 
!   /** 
!    * Finalizes this object.
!    */
!   protected void finalize()
    {
!     end();
    }
  
!   /** 
!    * 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 native void finish();
  
!   /** 
!    * Returns true iff the stream was finished and no more output bytes
!    * are available.
!    */
!   public synchronized boolean finished()
    {
!     return is_finished;
    }
  
!   /**
!    * 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 native boolean 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 native void setInput(byte[] input, int off, int 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 synchronized void setLevel(int lvl)
    {
      if (lvl != -1 && (lvl < 0 || lvl > 9))
!       throw new IllegalArgumentException();
      level = (lvl == -1) ? 6 : lvl;
!     update();
    }
  
!   /** 
!    * 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 synchronized void setStrategy(int stgy)
    {
      if (stgy != DEFAULT_STRATEGY && stgy != FILTERED
  	&& stgy != HUFFMAN_ONLY)
!       throw new IllegalArgumentException();
      strategy = stgy;
!     update();
    }
  
!   /**
!    * 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 native int deflate(byte[] output, int off, int len);
  
!   /**
!    * 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 native void setDictionary(byte[] buf, int off, int len);
  }
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/DeflaterOutputStream.java gcc-4.0.0/libjava/java/util/zip/DeflaterOutputStream.java
*** gcc-3.4.3/libjava/java/util/zip/DeflaterOutputStream.java	Mon Oct 27 11:02:44 2003
--- gcc-4.0.0/libjava/java/util/zip/DeflaterOutputStream.java	Wed Jan  5 20:41:27 2005
***************
*** 1,5 ****
  /* DeflaterOutputStream.java - Output filter for compressing.
!    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DeflaterOutputStream.java - Output filter for compressing.
!    Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  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.OutputStream;
  import java.io.IOException;
  
  /* Written using on-line Java Platform 1.2 API Specification
   * and JCL book.
--- 35,46 ----
  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.
*************** import java.io.IOException;
*** 60,85 ****
   */
  public class DeflaterOutputStream extends FilterOutputStream
  {
!   public void close () throws IOException
!   {
!     finish ();
!     out.close();
!   }
  
    /**
     * 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
    {
!     do
        {
  	int len = def.deflate(buf, 0, buf.length);
  	if (len > 0)
  	  out.write(buf, 0, len);
         }
-     while (! def.needsInput());
    }
  
    /** 
--- 61,90 ----
   */
  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);
  	if (len > 0)
  	  out.write(buf, 0, len);
         }
    }
  
    /** 
*************** public class DeflaterOutputStream extend
*** 87,95 ****
     * default buffer size.
     * @param out the output stream where deflated output should be written.
     */
!   public DeflaterOutputStream (OutputStream out)
    {
!     this (out, new Deflater (), 512);
    }
  
    /** 
--- 92,100 ----
     * default buffer size.
     * @param out the output stream where deflated output should be written.
     */
!   public DeflaterOutputStream(OutputStream out)
    {
!     this(out, new Deflater(), 512);
    }
  
    /** 
*************** public class DeflaterOutputStream extend
*** 98,106 ****
     * @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, 512);
    }
  
    /** 
--- 103,111 ----
     * @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, 512);
    }
  
    /** 
*************** public class DeflaterOutputStream extend
*** 113,119 ****
     */
    public DeflaterOutputStream(OutputStream out, Deflater defl, int bufsize)
    {
!     super (out);
      if (bufsize <= 0)
        throw new IllegalArgumentException("bufsize <= 0");
      buf = new byte[bufsize];
--- 118,124 ----
     */
    public DeflaterOutputStream(OutputStream out, Deflater defl, int bufsize)
    {
!     super(out);
      if (bufsize <= 0)
        throw new IllegalArgumentException("bufsize <= 0");
      buf = new byte[bufsize];
*************** public class DeflaterOutputStream extend
*** 125,135 ****
     * was the only way to ensure that all bytes are flushed in Sun's
     * JDK.  
     */
!   public void finish () throws IOException
    {
      inbufWrite();
      def.finish();
!     while (! def.finished ())
        {
  	int len = def.deflate(buf, 0, buf.length);
  	if (len > 0)
--- 130,140 ----
     * was the only way to ensure that all bytes are flushed in Sun's
     * JDK.  
     */
!   public void finish() throws IOException
    {
      inbufWrite();
      def.finish();
!     while (! def.finished())
        {
  	int len = def.deflate(buf, 0, buf.length);
  	if (len > 0)
*************** public class DeflaterOutputStream extend
*** 137,165 ****
        }
    }
  
!   public void write (int bval) throws IOException
    {
      if (inbuf == null)
        inbuf = new byte[128];
      else if (inbufLength == inbuf.length)
!       inbufWrite ();
      inbuf[inbufLength++] = (byte) bval;
    }
  
!   public void write (byte[] buf, int off, int len) throws IOException
    {
!     inbufWrite ();
!     def.setInput (buf, off, len);
!     deflate ();
    }
  
!   private void inbufWrite () throws IOException
    {
      if (inbufLength > 0)
        {
  	int size = inbufLength;
  	inbufLength = 0;
! 	write (inbuf, 0, size);
        }
    }
  
--- 142,189 ----
        }
    }
  
!   /**
!    * 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
    {
      if (inbuf == null)
        inbuf = new byte[128];
      else if (inbufLength == inbuf.length)
!       inbufWrite();
      inbuf[inbufLength++] = (byte) bval;
    }
  
!   /**
!    * 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
    {
!     inbufWrite();
!     def.setInput(buf, off, len);
!     deflate();
    }
  
!   private void inbufWrite() throws IOException
    {
      if (inbufLength > 0)
        {
  	int size = inbufLength;
  	inbufLength = 0;
! 	write(inbuf, 0, size);
        }
    }
  
*************** public class DeflaterOutputStream extend
*** 167,176 ****
    private byte[] inbuf;
    // Used length of inbuf.
    private int inbufLength;
- 
-   // The retrieval buffer.
-   protected byte[] buf;
- 
-   // Deflater used to compress data.
-   protected Deflater def;
  }
--- 191,194 ----
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/GZIPInputStream.java gcc-4.0.0/libjava/java/util/zip/GZIPInputStream.java
*** gcc-3.4.3/libjava/java/util/zip/GZIPInputStream.java	Sat Nov 16 00:41:32 2002
--- gcc-4.0.0/libjava/java/util/zip/GZIPInputStream.java	Wed Sep 22 20:16:17 2004
***************
*** 1,5 ****
  /* GZIPInputStream.java - Input filter for reading gzip file
!    Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.io.InputStream;
*** 41,113 ****
  import java.io.IOException;
  
  /**
   * @author Tom Tromey
!  * @date May 17, 1999
!  */
! 
! /* Written using on-line Java Platform 1.2 API Specification
!  * and JCL book.
!  * Believed complete and correct.
   */
! 
! public class GZIPInputStream extends InflaterInputStream
  {
    public static final int GZIP_MAGIC = 0x8b1f;
  
!   public void close () throws IOException
!   {
!     // Nothing to do here.
!     super.close();
!   }
  
!   public GZIPInputStream (InputStream istream) throws IOException
!   {
!     this (istream, 512);
!   }
  
!   private final int eof_read () throws IOException
    {
!     int r = in.read();
!     if (r == -1)
!       throw new ZipException ("gzip header corrupted");
!     return r & 0xff;
    }
  
!   public GZIPInputStream (InputStream istream, int readsize)
      throws IOException
    {
!     super (istream, new Inflater (true), readsize);
  
      // NOTE: header reading code taken from zlib's gzio.c.
  
      // Read the magic number.
!     int magic = eof_read () | (eof_read () << 8);
      if (magic != GZIP_MAGIC)
!       throw new ZipException ("gzip header corrupted");
  
!     int method = eof_read ();
!     int flags = eof_read ();
      // Test from zlib.
      if (method != Z_DEFLATED || (flags & RESERVED) != 0)
!       throw new ZipException ("gzip header corrupted");
  
      // Discard time, xflags, OS code.
      for (int i = 0; i < 6; ++i)
!       eof_read ();
  
      // Skip the extra field.
      if ((flags & EXTRA_FIELD) != 0)
        {
! 	int len = eof_read () | (eof_read () << 8);
  	while (len-- != 0)
! 	  eof_read ();
        }
  
      if ((flags & ORIG_NAME) != 0)
        {
  	while (true)
  	  {
! 	    int c = eof_read ();
  	    if (c == 0)
  	      break;
  	  }
--- 41,158 ----
  import java.io.IOException;
  
  /**
+  * 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;
  
!   static final int Z_DEFLATED = 8;
  
!   /**
!    * The mask for bit 1 of the flag byte.
!    */
!   static final int HEAD_CRC = 0x02;
  
!   /**
!    * The mask for bit 2 of the flag byte.
!    */
!   static final int EXTRA_FIELD = 0x04;
! 
!   /**
!    * The mask for bit 3 of the flag byte.
!    */
!   static final int ORIG_NAME = 0x08;
! 
!   /**
!    * The mask for bit 4 of the flag byte.
!    */
!   static final int COMMENT = 0x10;
! 
!   /**
!    * The mask for all reserved bits of the flag byte.
!    */
!   static final int RESERVED = 0xe0;
!   
!   /**
!    * 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;
! 
!   /**
!    * 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);
  
      // NOTE: header reading code taken from zlib's gzio.c.
  
      // Read the magic number.
!     int magic = eof_read() | (eof_read() << 8);
      if (magic != GZIP_MAGIC)
!       throw new ZipException("gzip header corrupted");
  
!     int method = eof_read();
!     int flags = eof_read();
      // Test from zlib.
      if (method != Z_DEFLATED || (flags & RESERVED) != 0)
!       throw new ZipException("gzip header corrupted");
  
      // Discard time, xflags, OS code.
      for (int i = 0; i < 6; ++i)
!       eof_read();
  
      // Skip the extra field.
      if ((flags & EXTRA_FIELD) != 0)
        {
! 	int len = eof_read() | (eof_read() << 8);
  	while (len-- != 0)
! 	  eof_read();
        }
  
      if ((flags & ORIG_NAME) != 0)
        {
  	while (true)
  	  {
! 	    int c = eof_read();
  	    if (c == 0)
  	      break;
  	  }
*************** public class GZIPInputStream extends Inf
*** 117,123 ****
        {
  	while (true)
  	  {
! 	    int c = eof_read ();
  	    if (c == 0)
  	      break;
  	  }
--- 162,168 ----
        {
  	while (true)
  	  {
! 	    int c = eof_read();
  	    if (c == 0)
  	      break;
  	  }
*************** public class GZIPInputStream extends Inf
*** 126,187 ****
      if ((flags & HEAD_CRC) != 0)
        {
  	// FIXME: consider checking CRC of the header.
! 	eof_read ();
! 	eof_read ();
        }
  
!     crc = new CRC32 ();
    }
  
!   public int read (byte[] buf, int off, int len) throws IOException
    {
      if (eos)
        return -1;
!     int r = super.read(buf, off, len);
      if (r == -1)
        {
  	eos = true;
  
  	byte[] tmp = new byte[8];
  	// First copy remaining bytes from inflater input buffer.
! 	int avail = inf.getRemaining ();
! 	System.arraycopy (this.buf, this.len - avail, tmp, 0, avail);
  
  	// Now read remaining bytes from wrapped input stream.
  	for (int i = avail; i < 8; ++i)
  	  {
! 	    tmp[i] = (byte) eof_read ();
  	  }
  
! 	int header_crc = read4 (tmp, 0);
  	if (crc.getValue() != header_crc)
! 	  throw new ZipException ("corrupted gzip file - crc mismatch");
! 	int isize = read4 (tmp, 4);
  	if (inf.getTotalOut() != isize)
! 	  throw new ZipException ("corrupted gzip file - size mismatch");
  	return -1;
        }
!     crc.update(buf, off, r);
      return r;
    }
  
!   private final int read4 (byte[] buf, int offset) throws IOException
    {
      return (((buf[offset + 3] & 0xFF) << 24) + ((buf[offset + 2] & 0xFF) << 16)
  	    + ((buf[offset + 1] & 0xFF) << 8) + (buf[offset] & 0xFF));
    }
- 
-   // Checksum used by this input stream.
-   protected CRC32 crc;
- 
-   // Indicates whether end-of-stream has been reached.
-   protected boolean eos;
- 
-   // Some constants from zlib.
-   static final int Z_DEFLATED = 8;
-   static final int HEAD_CRC    = 0x02;
-   static final int EXTRA_FIELD = 0x04;
-   static final int ORIG_NAME   = 0x08;
-   static final int COMMENT     = 0x10;
-   static final int RESERVED    = 0xe0;
  }
--- 171,252 ----
      if ((flags & HEAD_CRC) != 0)
        {
  	// FIXME: consider checking CRC of the header.
! 	eof_read();
! 	eof_read();
        }
  
!     crc = new CRC32();
    }
  
!   /**
!    * 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();
!   }
! 
!   private final int eof_read() throws IOException
!   {
!     int r = in.read();
!     if (r == -1)
!       throw new ZipException("gzip header corrupted");
!     return r & 0xff;
!   }
! 
!   /**
!    * 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
    {
      if (eos)
        return -1;
!     int r = super.read(buf, offset, len);
      if (r == -1)
        {
  	eos = true;
  
  	byte[] tmp = new byte[8];
  	// First copy remaining bytes from inflater input buffer.
! 	int avail = inf.getRemaining();
! 	System.arraycopy(this.buf, this.len - avail, tmp, 0, avail);
  
  	// Now read remaining bytes from wrapped input stream.
  	for (int i = avail; i < 8; ++i)
  	  {
! 	    tmp[i] = (byte) eof_read();
  	  }
  
! 	// Be careful to avoid sign extension here; CRC32.getValue()
! 	// returns a long.
! 	long header_crc = read4(tmp, 0) & 0xffffffffL;
  	if (crc.getValue() != header_crc)
! 	  throw new ZipException("corrupted gzip file - crc mismatch");
! 	int isize = read4(tmp, 4);
  	if (inf.getTotalOut() != isize)
! 	  throw new ZipException("corrupted gzip file - size mismatch");
  	return -1;
        }
!     crc.update(buf, offset, r);
      return r;
    }
  
!   private final int read4(byte[] buf, int offset) throws IOException
    {
      return (((buf[offset + 3] & 0xFF) << 24) + ((buf[offset + 2] & 0xFF) << 16)
  	    + ((buf[offset + 1] & 0xFF) << 8) + (buf[offset] & 0xFF));
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/GZIPOutputStream.java gcc-4.0.0/libjava/java/util/zip/GZIPOutputStream.java
*** gcc-3.4.3/libjava/java/util/zip/GZIPOutputStream.java	Tue Jan 22 22:40:41 2002
--- gcc-4.0.0/libjava/java/util/zip/GZIPOutputStream.java	Fri Jul 30 17:00:34 2004
*************** import java.io.IOException;
*** 41,48 ****
  import java.io.OutputStream;
  
  /**
   * @author Tom Tromey
!  * @date May 17, 1999
   */
  
  /* Written using on-line Java Platform 1.2 API Specification
--- 41,52 ----
  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
*************** import java.io.OutputStream;
*** 52,126 ****
  
  public class GZIPOutputStream extends DeflaterOutputStream
  {
!   public void close () throws IOException
!   {
!     finish ();
!     out.close ();
!   }
! 
!   public void finish () throws IOException
!   {
!     super.finish();
!     put4 ((int) crc.getValue());
!     put4 (def.getTotalIn());
!   }
  
!   public GZIPOutputStream (OutputStream out) throws IOException
    {
!     this (out, 512);
    }
  
!   public GZIPOutputStream (OutputStream out, int readsize) throws IOException
    {
!     super (out, new Deflater (Deflater.DEFAULT_COMPRESSION, true), readsize);
! 
!     put2 (GZIPInputStream.GZIP_MAGIC);
!     out.write (GZIPInputStream.Z_DEFLATED);
      // No flags for now.
!     out.write (0);
      // No time either.
!     put2 (0);
!     put2 (0);
      // No xflags either.
!     out.write (0);
      // FIXME: unknown OS.
!     out.write (255);
! 
!     crc = new CRC32 ();
    }
  
!   public synchronized void write (int bval) throws IOException
    {
!     super.write (bval);
!     crc.update (bval);
    }
  
!   public synchronized void write (byte[] buf) throws IOException
    {
!     write (buf, 0, buf.length);
    }
  
!   public synchronized void write (byte[] buf, int off, int len)
      throws IOException
    {
      super.write(buf, off, len);
      crc.update(buf, off, len);
    }
  
!   private final void put2 (int i) throws IOException
    {
!     out.write (i);
!     out.write (i >> 8);
    }
  
!   private final void put4 (int i) throws IOException
    {
!     out.write (i);
!     out.write (i >> 8);
!     out.write (i >> 16);
!     out.write (i >> 24);
    }
  
!   // Checksum used by this stream.
!   protected CRC32 crc;
  }
--- 56,146 ----
  
  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();
!     put2(GZIPInputStream.GZIP_MAGIC);
!     out.write(GZIPInputStream.Z_DEFLATED);
      // No flags for now.
!     out.write(0);
      // No time either.
!     put2(0);
!     put2(0);
      // No xflags either.
!     out.write(0);
      // FIXME: unknown OS.
!     out.write(255);
    }
  
!   public synchronized void write(int bval) throws IOException
    {
!     super.write(bval);
!     crc.update(bval);
    }
  
!   public synchronized void write(byte[] buf) throws IOException
    {
!     write(buf, 0, buf.length);
    }
  
!   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();
!     put4((int) crc.getValue());
!     put4(def.getTotalIn());
    }
  
!   private final void put2(int i) throws IOException
!   {
!     out.write(i);
!     out.write(i >> 8);
!   }
! 
!   private final void put4 (int i) throws IOException
!   {
!     out.write(i);
!     out.write(i >> 8);
!     out.write(i >> 16);
!     out.write(i >> 24);
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/Inflater.java gcc-4.0.0/libjava/java/util/zip/Inflater.java
*** gcc-3.4.3/libjava/java/util/zip/Inflater.java	Tue May 27 06:34:29 2003
--- gcc-4.0.0/libjava/java/util/zip/Inflater.java	Fri Jul 30 17:00:34 2004
*************** public class Inflater
*** 251,257 ****
     * @param buffer the input.
     * @exception IllegalStateException if no input is needed.
     */
!   public void setInput (byte[] buf)
    {
      setInput (buf, 0, buf.length);
    }
--- 251,257 ----
     * @param buffer the input.
     * @exception IllegalStateException if no input is needed.
     */
!   public void setInput (byte[] buf) 
    {
      setInput (buf, 0, buf.length);
    }
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/InflaterInputStream.java gcc-4.0.0/libjava/java/util/zip/InflaterInputStream.java
*** gcc-3.4.3/libjava/java/util/zip/InflaterInputStream.java	Wed Oct 15 14:02:37 2003
--- gcc-4.0.0/libjava/java/util/zip/InflaterInputStream.java	Thu Feb 10 01:39:53 2005
***************
*** 1,5 ****
  /* InflaterInputStream.java - Input stream filter for decompressing
!    Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* InflaterInputStream.java - Input stream filter for decompressing
!    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
!    Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,105 ****
  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.InputStream;
  import java.io.IOException;
  
  /**
   * @author Tom Tromey
!  * @date May 17, 1999
!  */
! 
! /* Written using on-line Java Platform 1.2 API Specification
!  * and JCL book.
!  * Believed complete and correct.
   */
- 
  public class InflaterInputStream extends FilterInputStream
  {
!   protected void fill () throws IOException
!   {
!     len = in.read(buf, 0, buf.length);
!     if (len != -1)
!       inf.setInput(buf, 0, len);
!   }
  
!   public InflaterInputStream (InputStream in)
    {
!     this (in, new Inflater (), 512);
    }
  
!   public InflaterInputStream (InputStream in, Inflater infl)
    {
!     this (in, infl, 512);
    }
  
!   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];
    }
  
!   public int read () throws IOException
    {
!     byte[] buf = new byte[1];
!     int r = read (buf, 0, 1);
!     if (r != -1)
!       r = buf[0] & 0xff;
!     return r;
    }
  
!   public int read (byte[] buf, int off, int len) throws IOException
    {
      if (inf == null)
!       throw new IOException ("stream closed");
      if (len == 0)
        return 0;
      if (inf.finished())
--- 36,186 ----
  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
!   {
!     inf = null;
!     super.close();
!   }
! 
!   /**
!    * 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)
!       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;
      if (inf.finished())
*************** public class InflaterInputStream extends
*** 109,118 ****
      while (count == 0)
        {
  	if (inf.needsInput())
! 	  fill ();
  	try
  	  {
! 	    count = inf.inflate(buf, off, len);	
  	    if (count == 0)
  	      {
  		if (this.len == -1)
--- 190,200 ----
      while (count == 0)
        {
  	if (inf.needsInput())
! 	  fill();
! 	
  	try
  	  {
! 	    count = inf.inflate(b, off, len);
  	    if (count == 0)
  	      {
  		if (this.len == -1)
*************** public class InflaterInputStream extends
*** 121,183 ****
  		    return -1;
  		  }
  		if (inf.needsDictionary())
! 		  throw new ZipException ("Inflater needs Dictionary");
  	      }
! 	  }
! 	catch (DataFormatException dfe)
  	  {
! 	    throw new ZipException (dfe.getMessage());
  	  }
        }
      return count;
    }
  
!   public void close () throws IOException
!   {
!     inf = null;
!     super.close ();
!   }
! 
!   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;
!   }
! 
!   public long skip (long n) throws IOException
    {
      if (inf == null)
!       throw new IOException ("stream closed");
  
      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 = read (buf, 0, min);
! 	if (r == -1)
  	  break;
! 	n -= r;
! 	s += r;
! 	min = (int) Math.min(n, 1024);
        }
  
!     return s;
!   }
  
!   // Buffer for delivering uncompressed data to inflater.
!   protected byte[] buf;
  
!   // Inflater used to decompress data.
!   protected Inflater inf;
  
!   // Number of read bytes in buf.
!   protected int len;
  }
--- 203,262 ----
  		    return -1;
  		  }
  		if (inf.needsDictionary())
! 		  throw new ZipException("Inflater needs Dictionary");
  	      }
! 	  } 
! 	catch (DataFormatException dfe) 
  	  {
! 	    throw new ZipException(dfe.getMessage());
  	  }
        }
      return count;
    }
  
!   /**
!    * 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-3.4.3/libjava/java/util/zip/ZipEntry.java gcc-4.0.0/libjava/java/util/zip/ZipEntry.java
*** gcc-3.4.3/libjava/java/util/zip/ZipEntry.java	Tue Jun 17 12:07:56 2003
--- gcc-4.0.0/libjava/java/util/zip/ZipEntry.java	Wed Jan  5 20:41:27 2005
***************
*** 1,5 ****
! /* java.util.zip.ZipEntry
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ZipEntry.java --
!    Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Date;
*** 51,66 ****
   */
  public class ZipEntry implements ZipConstants, Cloneable
  {
!   private static int KNOWN_SIZE   = 1;
!   private static int KNOWN_CSIZE  = 2;
!   private static int KNOWN_CRC    = 4;
!   private static int KNOWN_TIME   = 8;
  
    private static Calendar cal;
  
    private String name;
    private int size;
!   private int compressedSize;
    private int crc;
    private int dostime;
    private short known = 0;
--- 51,66 ----
   */
  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 Calendar cal;
  
    private String name;
    private int size;
!   private long compressedSize = -1;
    private int crc;
    private int dostime;
    private short known = 0;
*************** public class ZipEntry implements ZipCons
*** 71,85 ****
    int flags;              /* used by ZipOutputStream */
    int offset;             /* used by ZipFile and ZipOutputStream */
  
- 
    /**
     * Compression method.  This method doesn't compress at all.
     */
!   public final static int STORED      =  0;
    /**
     * Compression method.  This method uses the Deflater.
     */
!   public final static int DEFLATED    =  8;
  
    /**
     * Creates a zip entry with the given name.
--- 71,84 ----
    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.
*************** public class ZipEntry implements ZipCons
*** 168,182 ****
      Calendar cal = getCalendar();
      synchronized (cal)
        {
! 	cal.setTime(new Date(time*1000L));
! 	dostime = (cal.get(cal.YEAR) - 1980 & 0x7f) << 25
! 	  | (cal.get(cal.MONTH) + 1) << 21
! 	  | (cal.get(cal.DAY_OF_MONTH)) << 16
! 	  | (cal.get(cal.HOUR_OF_DAY)) << 11
! 	  | (cal.get(cal.MINUTE)) << 5
! 	  | (cal.get(cal.SECOND)) >> 1;
        }
-     dostime = (int) (dostime / 1000L);
      this.known |= KNOWN_TIME;
    }
  
--- 167,180 ----
      Calendar cal = getCalendar();
      synchronized (cal)
        {
! 	cal.setTime(new Date(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;
    }
  
*************** public class ZipEntry implements ZipCons
*** 244,257 ****
  
    /**
     * Sets the size of the compressed data.
-    * @exception IllegalArgumentException if size is not in 0..0xffffffffL
     */
    public void setCompressedSize(long csize)
    {
!     if ((csize & 0xffffffff00000000L) != 0)
! 	throw new IllegalArgumentException();
!     this.compressedSize = (int) csize;
!     this.known |= KNOWN_CSIZE;
    }
  
    /**
--- 242,251 ----
  
    /**
     * Sets the size of the compressed data.
     */
    public void setCompressedSize(long csize)
    {
!     this.compressedSize = csize;
    }
  
    /**
*************** public class ZipEntry implements ZipCons
*** 260,266 ****
     */
    public long getCompressedSize()
    {
!     return (known & KNOWN_CSIZE) != 0 ? compressedSize & 0xffffffffL : -1L;
    }
  
    /**
--- 254,260 ----
     */
    public long getCompressedSize()
    {
!     return compressedSize;
    }
  
    /**
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/ZipFile.java gcc-4.0.0/libjava/java/util/zip/ZipFile.java
*** gcc-3.4.3/libjava/java/util/zip/ZipFile.java	Wed Nov 26 21:55:27 2003
--- gcc-4.0.0/libjava/java/util/zip/ZipFile.java	Thu Feb 10 02:43:45 2005
***************
*** 1,5 ****
! /* java.util.zip.ZipFile
!    Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ZipFile.java --
!    Copyright (C) 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,53 ****
  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.BufferedInputStream;
  import java.io.DataInput;
  import java.io.File;
- import java.io.InputStream;
  import java.io.IOException;
! import java.io.EOFException;
  import java.io.RandomAccessFile;
  import java.util.Enumeration;
  import java.util.HashMap;
  import java.util.Iterator;
- import java.util.NoSuchElementException;
  
  /**
   * This class represents a Zip archive.  You can ask for the contained
--- 35,53 ----
  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.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.util.Enumeration;
  import java.util.HashMap;
  import java.util.Iterator;
  
  /**
   * This class represents a Zip archive.  You can ask for the contained
*************** public class ZipFile implements ZipConst
*** 117,124 ****
     * 
     * The contents of the zip file will be accessible until it is closed.
     *
-    * The OPEN_DELETE mode is currently unimplemented in this library
-    * 
     * @since JDK1.3
     * @param mode Must be one of OPEN_READ or OPEN_READ | OPEN_DELETE
     *
--- 117,122 ----
*************** public class ZipFile implements ZipConst
*** 128,138 ****
     */
    public ZipFile(File file, int mode) throws ZipException, IOException
    {
      if ((mode & OPEN_DELETE) != 0)
!       {
! 	throw new IllegalArgumentException
! 	  ("OPEN_DELETE mode not supported yet in java.util.zip.ZipFile");
!       }
      this.raf = new RandomAccessFile(file, "r");
      this.name = file.getPath();
    }
--- 126,135 ----
     */
    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();
    }
*************** public class ZipFile implements ZipConst
*** 148,154 ****
     * @exception IOException if a i/o error occured.
     * @exception EOFException if the file ends prematurely
     */
!   private final int readLeShort(DataInput di, byte[] b) throws IOException
    {
      di.readFully(b, 0, 2);
      return (b[0] & 0xff) | (b[1] & 0xff) << 8;
--- 145,151 ----
     * @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;
*************** public class ZipFile implements ZipConst
*** 165,178 ****
     * @exception IOException if a i/o error occured.
     * @exception EOFException if the file ends prematurely
     */
!   private final 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.
--- 162,174 ----
     * @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.
*************** public class ZipFile implements ZipConst
*** 181,187 ****
     * @param off the offset to read from.
     * @return The value read.
     */
!   private final int readLeShort(byte[] b, int off)
    {
      return (b[off] & 0xff) | (b[off+1] & 0xff) << 8;
    }
--- 177,183 ----
     * @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;
    }
*************** public class ZipFile implements ZipConst
*** 194,200 ****
     * @param off the offset to read from.
     * @return The value read.
     */
!   private final 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;
--- 190,196 ----
     * @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;
*************** public class ZipFile implements ZipConst
*** 408,415 ****
     * uncompressed data.  Normally zip entry should be an entry
     * returned by getEntry() or entries().
     *
     * @param entry the entry to create an InputStream for.
!    * @return the input stream.
     *
     * @exception IOException if a i/o error occured.
     * @exception ZipException if the Zip archive is malformed.  
--- 404,421 ----
     * 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 IOException if a i/o error occured.
     * @exception ZipException if the Zip archive is malformed.  
*************** public class ZipFile implements ZipConst
*** 420,426 ****
      String name = entry.getName();
      ZipEntry zipEntry = (ZipEntry) entries.get(name);
      if (zipEntry == null)
!       throw new NoSuchElementException(name);
  
      long start = checkLocalHeader(zipEntry);
      int method = zipEntry.getMethod();
--- 426,432 ----
      String name = entry.getName();
      ZipEntry zipEntry = (ZipEntry) entries.get(name);
      if (zipEntry == null)
!       return null;
  
      long start = checkLocalHeader(zipEntry);
      int method = zipEntry.getMethod();
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/ZipInputStream.java gcc-4.0.0/libjava/java/util/zip/ZipInputStream.java
*** gcc-3.4.3/libjava/java/util/zip/ZipInputStream.java	Tue Jun 17 12:07:56 2003
--- gcc-4.0.0/libjava/java/util/zip/ZipInputStream.java	Sun Nov  7 01:25:48 2004
***************
*** 1,5 ****
! /* java.util.zip.ZipInputStream
!    Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ZipInputStream.java --
!    Copyright (C) 2001, 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,46 ****
  package java.util.zip;
  
  import java.io.EOFException;
- import java.io.InputStream;
  import java.io.IOException;
  
  /**
   * This is a FilterInputStream that reads the files in an zip archive
--- 39,46 ----
  package java.util.zip;
  
  import java.io.EOFException;
  import java.io.IOException;
+ import java.io.InputStream;
  
  /**
   * This is a FilterInputStream that reads the files in an zip archive
*************** public class ZipInputStream extends Infl
*** 106,112 ****
        }
    }
    
!   private final int readLeByte() throws IOException
    {
      if (avail <= 0)
        {
--- 106,112 ----
        }
    }
    
!   private int readLeByte() throws IOException
    {
      if (avail <= 0)
        {
*************** public class ZipInputStream extends Infl
*** 120,126 ****
    /**
     * Read an unsigned short in little endian byte order.
     */
!   private final int readLeShort() throws IOException 
    {
      return readLeByte() | (readLeByte() << 8);
    }
--- 120,126 ----
    /**
     * Read an unsigned short in little endian byte order.
     */
!   private int readLeShort() throws IOException 
    {
      return readLeByte() | (readLeByte() << 8);
    }
*************** public class ZipInputStream extends Infl
*** 128,134 ****
    /**
     * Read an int in little endian byte order.
     */
!   private final int readLeInt() throws IOException 
    {
      return readLeShort() | (readLeShort() << 16);
    }
--- 128,134 ----
    /**
     * Read an int in little endian byte order.
     */
!   private int readLeInt() throws IOException 
    {
      return readLeShort() | (readLeShort() << 16);
    }
diff -Nrcpad gcc-3.4.3/libjava/java/util/zip/ZipOutputStream.java gcc-4.0.0/libjava/java/util/zip/ZipOutputStream.java
*** gcc-3.4.3/libjava/java/util/zip/ZipOutputStream.java	Tue Jun 17 12:07:56 2003
--- gcc-4.0.0/libjava/java/util/zip/ZipOutputStream.java	Sat Nov  6 16:32:56 2004
***************
*** 1,5 ****
! /* java.util.zip.ZipOutputStream
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ZipOutputStream.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public class ZipOutputStream extends Def
*** 71,87 ****
    /**
     * Our Zip version is hard coded to 1.0 resp. 2.0
     */
!   private final static int ZIP_STORED_VERSION   = 10;
!   private final static int ZIP_DEFLATED_VERSION = 20;
  
    /**
     * Compression method.  This method doesn't compress at all.
     */
!   public final static int STORED      =  0;
    /**
     * Compression method.  This method uses the Deflater.
     */
!   public final static int DEFLATED    =  8;
  
    /**
     * Creates a new Zip output stream, writing a zip archive.
--- 71,88 ----
    /**
     * 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.
*************** public class ZipOutputStream extends Def
*** 136,142 ****
    /**
     * Write an unsigned short in little endian byte order.
     */
!   private final void writeLeShort(int value) throws IOException 
    {
      out.write(value & 0xff);
      out.write((value >> 8) & 0xff);
--- 137,143 ----
    /**
     * 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);
*************** public class ZipOutputStream extends Def
*** 145,151 ****
    /**
     * Write an int in little endian byte order.
     */
!   private final void writeLeInt(int value) throws IOException 
    {
      writeLeShort(value);
      writeLeShort(value >> 16);
--- 146,152 ----
    /**
     * Write an int in little endian byte order.
     */
!   private void writeLeInt(int value) throws IOException 
    {
      writeLeShort(value);
      writeLeShort(value >> 16);
*************** public class ZipOutputStream extends Def
*** 338,347 ****
      int numEntries = 0;
      int sizeEntries = 0;
      
!     Enumeration enum = entries.elements();
!     while (enum.hasMoreElements())
        {
! 	ZipEntry entry = (ZipEntry) enum.nextElement();
  	
  	int method = entry.getMethod();
  	writeLeInt(CENSIG);
--- 339,348 ----
      int numEntries = 0;
      int sizeEntries = 0;
      
!     Enumeration e = entries.elements();
!     while (e.hasMoreElements())
        {
! 	ZipEntry entry = (ZipEntry) e.nextElement();
  	
  	int method = entry.getMethod();
  	writeLeInt(CENSIG);
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/Accessible.java gcc-4.0.0/libjava/javax/accessibility/Accessible.java
*** gcc-3.4.3/libjava/javax/accessibility/Accessible.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/Accessible.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* Accessible.java -- primary Java accessibility interface
!    Copyright (C) 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Accessible.java -- primary Java accessibility interface
!    Copyright (C) 2000, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 44,50 ****
   * 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
   */
--- 44,50 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleAction.java gcc-4.0.0/libjava/javax/accessibility/AccessibleAction.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleAction.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleAction.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleAction.java -- aids in accessibly performing actions
!    Copyright (C) 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleAction.java -- aids in accessibly performing actions
!    Copyright (C) 2000, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 46,52 ****
   * <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()
--- 46,52 ----
   * <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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleBundle.java gcc-4.0.0/libjava/javax/accessibility/AccessibleBundle.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleBundle.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleBundle.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleBundle.java -- base class for accessibility "enumerations"
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleBundle.java -- base class for accessibility "enumerations"
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Locale;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleComponent.java gcc-4.0.0/libjava/javax/accessibility/AccessibleComponent.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleComponent.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleComponent.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleComponent.java -- aids in accessibly rendering Java components
!    Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* 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.
  
*************** import java.awt.event.FocusListener;
*** 56,62 ****
   * 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()
--- 56,62 ----
   * 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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleContext.java gcc-4.0.0/libjava/javax/accessibility/AccessibleContext.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleContext.java	Wed Feb 19 11:44:23 2003
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleContext.java	Thu Feb 17 07:48:47 2005
*************** import java.util.Locale;
*** 55,61 ****
   * <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
   */
--- 55,61 ----
   * <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
   */
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleEditableText.java gcc-4.0.0/libjava/javax/accessibility/AccessibleEditableText.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleEditableText.java	Sat Mar  1 22:26:29 2003
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleEditableText.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleEditableText.java -- aids in accessibly for editable text
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleEditableText.java -- aids in accessibly for editable text
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.swing.text.AttributeSet;
*** 49,55 ****
   * 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()
--- 49,55 ----
   * 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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleExtendedComponent.java gcc-4.0.0/libjava/javax/accessibility/AccessibleExtendedComponent.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleExtendedComponent.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleExtendedComponent.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleExtendedComponent.java -- aids in extended component access
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleExtendedComponent.java -- aids in extended component access
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 46,52 ****
   * <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()
--- 46,52 ----
   * <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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleExtendedTable.java gcc-4.0.0/libjava/javax/accessibility/AccessibleExtendedTable.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleExtendedTable.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleExtendedTable.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleExtendedTable.java -- aids in extended table access
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleExtendedTable.java -- aids in extended table access
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 45,51 ****
   * <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()
--- 45,51 ----
   * <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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleHyperlink.java gcc-4.0.0/libjava/javax/accessibility/AccessibleHyperlink.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleHyperlink.java	Sat Mar  1 22:26:29 2003
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleHyperlink.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleHyperlink.java -- aids in accessibly navigating hypertext
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleHyperlink.java -- aids in accessibly navigating hypertext
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 41,47 ****
  /**
   * This object encapsulates actions associated with navigating hypertext.
   *
!  * @author Eric Blake <ebb9@email.byu.edu>
   * @see Accessible
   * @see AccessibleContext
   * @see AccessibleText
--- 41,47 ----
  /**
   * This object encapsulates actions associated with navigating hypertext.
   *
!  * @author Eric Blake (ebb9@email.byu.edu)
   * @see Accessible
   * @see AccessibleContext
   * @see AccessibleText
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleHypertext.java gcc-4.0.0/libjava/javax/accessibility/AccessibleHypertext.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleHypertext.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleHypertext.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleHypertext.java -- aids in accessibly rendering hypertext
!    Copyright (C) 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleHypertext.java -- aids in accessibly rendering hypertext
!    Copyright (C) 2000, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 46,52 ****
   * <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
--- 46,52 ----
   * <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
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleIcon.java gcc-4.0.0/libjava/javax/accessibility/AccessibleIcon.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleIcon.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleIcon.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleIcon.java -- aids in accessibly rendering icons
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleIcon.java -- aids in accessibly rendering icons
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 46,52 ****
   * <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()
--- 46,52 ----
   * <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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleKeyBinding.java gcc-4.0.0/libjava/javax/accessibility/AccessibleKeyBinding.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleKeyBinding.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleKeyBinding.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleKeyBinding.java -- aids in using keyboard navigation
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleKeyBinding.java -- aids in using keyboard navigation
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 48,54 ****
   * 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()
--- 48,54 ----
   * 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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleRelation.java gcc-4.0.0/libjava/javax/accessibility/AccessibleRelation.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleRelation.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleRelation.java	Thu Feb 17 07:48:47 2005
*************** package javax.accessibility;
*** 44,50 ****
   * 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
   */
--- 44,50 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleRelationSet.java gcc-4.0.0/libjava/javax/accessibility/AccessibleRelationSet.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleRelationSet.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleRelationSet.java	Thu Feb 17 07:48:47 2005
*************** import java.util.Vector;
*** 43,49 ****
   * 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
--- 43,49 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleResourceBundle.java gcc-4.0.0/libjava/javax/accessibility/AccessibleResourceBundle.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleResourceBundle.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleResourceBundle.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleResourceBundle.java -- deprecated class
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleResourceBundle.java -- deprecated class
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.ListResourceBundle;
*** 44,50 ****
   * 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
--- 44,50 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleRole.java gcc-4.0.0/libjava/javax/accessibility/AccessibleRole.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleRole.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleRole.java	Thu Feb 17 07:48:47 2005
*************** package javax.accessibility;
*** 43,49 ****
   * 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
   */
--- 43,49 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleSelection.java gcc-4.0.0/libjava/javax/accessibility/AccessibleSelection.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleSelection.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleSelection.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleSelection.java -- aids in accessibly selecting components
!    Copyright (C) 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleSelection.java -- aids in accessibly selecting components
!    Copyright (C) 2000, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 46,52 ****
   * <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()
--- 46,52 ----
   * <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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleState.java gcc-4.0.0/libjava/javax/accessibility/AccessibleState.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleState.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleState.java	Thu Feb 17 07:48:47 2005
*************** package javax.accessibility;
*** 44,50 ****
   * 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
   */
--- 44,50 ----
   * 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
   */
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleStateSet.java gcc-4.0.0/libjava/javax/accessibility/AccessibleStateSet.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleStateSet.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleStateSet.java	Thu Feb 17 07:48:47 2005
*************** import java.util.Vector;
*** 43,49 ****
   * 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
--- 43,49 ----
   * 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
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleTable.java gcc-4.0.0/libjava/javax/accessibility/AccessibleTable.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleTable.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleTable.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleTable.java -- aids in accessibly manipulating tables
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleTable.java -- aids in accessibly manipulating tables
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 47,53 ****
   * 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()
--- 47,53 ----
   * 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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleTableModelChange.java gcc-4.0.0/libjava/javax/accessibility/AccessibleTableModelChange.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleTableModelChange.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleTableModelChange.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleTableModelChange.java -- describes change to an accessible table
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleTableModelChange.java -- describes change to an accessible table
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 43,49 ****
   * 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()
--- 43,49 ----
   * 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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleText.java gcc-4.0.0/libjava/javax/accessibility/AccessibleText.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleText.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleText.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleText.java -- aids in accessibly manipulating text
!    Copyright (C) 2000, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleText.java -- aids in accessibly manipulating text
!    Copyright (C) 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,45 ****
  
  package javax.accessibility;
  
- import java.awt.Rectangle;
  import java.awt.Point;
  import javax.swing.text.AttributeSet;
  
  /**
--- 38,46 ----
  
  package javax.accessibility;
  
  import java.awt.Point;
+ import java.awt.Rectangle;
+ 
  import javax.swing.text.AttributeSet;
  
  /**
*************** import javax.swing.text.AttributeSet;
*** 51,57 ****
   * 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()
--- 52,58 ----
   * 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()
diff -Nrcpad gcc-3.4.3/libjava/javax/accessibility/AccessibleValue.java gcc-4.0.0/libjava/javax/accessibility/AccessibleValue.java
*** gcc-3.4.3/libjava/javax/accessibility/AccessibleValue.java	Fri Aug  9 04:26:13 2002
--- gcc-4.0.0/libjava/javax/accessibility/AccessibleValue.java	Thu Feb 17 07:48:47 2005
***************
*** 1,5 ****
  /* AccessibleValue.java -- aids in accessibly controlling values
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AccessibleValue.java -- aids in accessibly controlling values
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.accessibility;
*** 47,53 ****
   * <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()
--- 47,53 ----
   * <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()
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/BadPaddingException.java gcc-4.0.0/libjava/javax/crypto/BadPaddingException.java
*** gcc-3.4.3/libjava/javax/crypto/BadPaddingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/BadPaddingException.java	Tue Sep 21 08:33:31 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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-3.4.3/libjava/javax/crypto/Cipher.java gcc-4.0.0/libjava/javax/crypto/Cipher.java
*** gcc-3.4.3/libjava/javax/crypto/Cipher.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/Cipher.java	Thu Oct 21 20:38:29 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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-3.4.3/libjava/javax/crypto/CipherInputStream.java gcc-4.0.0/libjava/javax/crypto/CipherInputStream.java
*** gcc-3.4.3/libjava/javax/crypto/CipherInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/CipherInputStream.java	Thu Nov 18 15:26:42 2004
***************
*** 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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;  // I am born.
+   private static final int LIVING = 1;  // I am nailed to the hull.
+   private static final int DYING  = 2;  // I am eaten by sharks.
+   private static final int DEAD   = 3;
+   private int state;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new input stream with a source input stream and cipher.
+    *
+    * @param in     The underlying input stream.
+    * @param cipher The cipher to filter data through.
+    */
+   public CipherInputStream(InputStream in, Cipher cipher)
+   {
+     this(in);
+     this.cipher = cipher;
+     if (!(isStream = cipher.getBlockSize() == 1))
+       {
+         inBuffer = new byte[2][];
+         inBuffer[0] = new byte[cipher.getBlockSize()];
+         inBuffer[1] = new byte[cipher.getBlockSize()];
+         inLength = 0;
+         outBuffer = new byte[cipher.getBlockSize()];
+         outOffset = outLength = 0;
+         state = VIRGIN;
+       }
+   }
+ 
+   /**
+    * Creates a new input stream without a cipher. This constructor is
+    * <code>protected</code> because this class does not work without an
+    * underlying cipher.
+    *
+    * @param in The underlying input stream.
+    */
+   protected CipherInputStream(InputStream in)
+   {
+     super(in);
+   }
+ 
+   // Instance methods overriding java.io.FilterInputStream.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the number of bytes available without blocking. The value
+    * returned by this method is never greater than the underlying
+    * cipher's block size.
+    *
+    * @return The number of bytes immediately available.
+    * @throws java.io.IOException If an I/O exception occurs.
+    */
+   public int available() throws IOException
+   {
+     if (isStream)
+       return super.available();
+     return outLength - outOffset;
+   }
+ 
+   /**
+    * Close this input stream. This method merely calls the {@link
+    * java.io.InputStream#close()} method of the underlying input stream.
+    *
+    * @throws java.io.IOException If an I/O exception occurs.
+    */
+   public void close() throws IOException
+   {
+     super.close();
+   }
+ 
+   /**
+    * Read a single byte from this input stream; returns -1 on the
+    * end-of-file.
+    *
+    * @return The byte read, or -1 if there are no more bytes.
+    * @throws java.io.IOExcpetion If an I/O exception occurs.
+    */
+   public int read() throws IOException
+   {
+     if (isStream)
+       {
+         byte[] buf = new byte[1];
+         int in = super.read();
+         if (in == -1)
+           return -1;
+         buf[0] = (byte) in;
+         try
+           {
+             cipher.update(buf, 0, 1, buf, 0);
+           }
+         catch (ShortBufferException shouldNotHappen)
+           {
+             throw new IOException(shouldNotHappen.getMessage());
+           }
+         return buf[0] & 0xFF;
+       }
+     if (state == DEAD) return -1;
+     if (available() == 0) nextBlock();
+     if (state == DEAD) return -1;
+     return outBuffer[outOffset++] & 0xFF;
+   }
+ 
+   /**
+    * Read bytes into an array, returning the number of bytes read or -1
+    * on the end-of-file.
+    *
+    * @param buf The byte array to read into.
+    * @param off The offset in <code>buf</code> to start.
+    * @param len The maximum number of bytes to read.
+    * @return The number of bytes read, or -1 on the end-of-file.
+    * @throws java.io.IOException If an I/O exception occurs.
+    */
+   public int read(byte[] buf, int off, int len) throws IOException
+   {
+     if (isStream)
+       {
+         len = super.read(buf, off, len);
+         try
+           {
+             cipher.update(buf, off, len, buf, off);
+           }
+         catch (ShortBufferException shouldNotHappen)
+           {
+             throw new IOException(shouldNotHappen.getMessage());
+           }
+         return len;
+       }
+ 
+     int count = 0;
+     while (count < len)
+       {
+         if (available() == 0)
+           nextBlock();
+         if (state == DEAD)
+           {
+             if (count > 0) return count;
+             else return -1;
+           }
+         int l = Math.min(available(), len - count);
+         System.arraycopy(outBuffer, outOffset, buf, count+off, l);
+         count += l;
+         outOffset = outLength = 0;
+       }
+     return count;
+   }
+ 
+   /**
+    * Read bytes into an array, returning the number of bytes read or -1
+    * on the end-of-file.
+    *
+    * @param buf The byte arry to read into.
+    * @return The number of bytes read, or -1 on the end-of-file.
+    * @throws java.io.IOException If an I/O exception occurs.
+    */
+   public int read(byte[] buf) throws IOException
+   {
+     return read(buf, 0, buf.length);
+   }
+ 
+   /**
+    * Skip a number of bytes. This class only supports skipping as many
+    * bytes as are returned by {@link #available()}, which is the number
+    * of transformed bytes currently in this class's internal buffer.
+    *
+    * @param bytes The number of bytes to skip.
+    * @return The number of bytes skipped.
+    */
+   public long skip(long bytes) throws IOException
+   {
+     if (isStream)
+       {
+         return super.skip(bytes);
+       }
+     long ret = 0;
+     if (bytes > 0 && available() > 0)
+       {
+         ret = available();
+         outOffset = outLength = 0;
+       }
+     return ret;
+   }
+ 
+   /**
+    * Returns whether or not this input stream supports the {@link
+    * #mark(long)} and {@link #reset()} methods; this input stream does
+    * not, however, and invariably returns <code>false</code>.
+    *
+    * @return <code>false</code>
+    */
+   public boolean markSupported()
+   {
+     return false;
+   }
+ 
+   /**
+    * Set the mark. This method is unsupported and is empty.
+    *
+    * @param mark Is ignored.
+    */
+   public void mark(int mark)
+   {
+   }
+ 
+   /**
+    * Reset to the mark. This method is unsupported and is empty.
+    */
+   public void reset() throws IOException
+   {
+     throw new IOException("reset not supported");
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private void nextBlock() throws IOException
+   {
+     byte[] temp = inBuffer[0];
+     inBuffer[0] = inBuffer[1];
+     inBuffer[1] = temp;
+     int count = 0;
+     boolean eof = false;
+ 
+     if (state == VIRGIN || state == LIVING)
+       {
+         do
+           {
+             int l = in.read(inBuffer[1], count, inBuffer[1].length - count);
+             if (l == -1)
+               {
+                 eof = true;
+                 break;
+               }
+             count += l;
+           }
+         while (count < inBuffer[1].length);
+       }
+ 
+     try
+       {
+         switch (state)
+           {
+           case VIRGIN:
+             state = LIVING;
+             nextBlock();
+             break;
+           case LIVING:
+             if (eof)
+               {
+                 if (count > 0)
+                   {
+                     outOffset = cipher.update(inBuffer[0], 0, inLength, outBuffer, 0);
+                     state = DYING;
+                   }
+                 else
+                   {
+                     outOffset = cipher.doFinal(inBuffer[0], 0, inLength, outBuffer, 0);
+                     state = DEAD;
+                   }
+               }
+             else
+               {
+                 outOffset = cipher.update(inBuffer[0], 0, inLength, outBuffer, 0);
+               }
+             break;
+           case DYING:
+             outOffset = cipher.doFinal(inBuffer[0], 0, inLength, outBuffer, 0);
+             state = DEAD;
+             break;
+           case DEAD:
+           }
+       }
+     catch (ShortBufferException sbe)
+       {
+         throw new IOException(sbe.toString());
+       }
+     catch (BadPaddingException bpe)
+       {
+         throw new IOException(bpe.toString());
+       }
+     catch (IllegalBlockSizeException ibse)
+       {
+         throw new IOException(ibse.toString());
+       }
+     inLength = count;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/CipherOutputStream.java gcc-4.0.0/libjava/javax/crypto/CipherOutputStream.java
*** gcc-3.4.3/libjava/javax/crypto/CipherOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/CipherOutputStream.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,268 ----
+ /* CipherOutputStream.java -- Filters output 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.FilterOutputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * A filtered output stream that transforms data written to it with a
+  * {@link Cipher} before sending it to the underlying output stream.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class CipherOutputStream extends FilterOutputStream
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The underlying cipher. */
+   private Cipher cipher;
+ 
+   private byte[][] inBuffer;
+ 
+   private int inLength;
+ 
+   private byte[] outBuffer;
+ 
+   private static final int FIRST_TIME  = 0;
+   private static final int SECOND_TIME = 1;
+   private static final int SEASONED    = 2;
+   private int state;
+ 
+   /** True if the cipher is a stream cipher (blockSize == 1) */
+   private boolean isStream;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new cipher output stream. The cipher argument must have
+    * already been initialized.
+    *
+    * @param out    The sink for transformed data.
+    * @param cipher The cipher to transform data with.
+    */
+   public CipherOutputStream(OutputStream out, Cipher cipher)
+   {
+     super(out);
+     if (cipher != null)
+       {
+         this.cipher = cipher;
+         if (!(isStream = cipher.getBlockSize() == 1))
+           {
+             inBuffer = new byte[2][];
+             inBuffer[0] = new byte[cipher.getBlockSize()];
+             inBuffer[1] = new byte[cipher.getBlockSize()];
+             inLength = 0;
+             state = FIRST_TIME;
+           }
+       }
+     else
+       this.cipher = new NullCipher();
+   }
+ 
+   /**
+    * Create a cipher output stream with no cipher.
+    *
+    * @param out The sink for transformed data.
+    */
+   protected CipherOutputStream(OutputStream out)
+   {
+     super(out);
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Close this output stream, and the sink output stream.
+    *
+    * <p>This method will first invoke the {@link Cipher#doFinal()}
+    * method of the underlying {@link Cipher}, and writes the output of
+    * that method to the sink output stream.
+    *
+    * @throws java.io.IOException If an I/O error occurs, or if an error
+    *         is caused by finalizing the transformation.
+    */
+   public void close() throws IOException
+   {
+     try
+       {
+         int len;
+         if (state != FIRST_TIME)
+           {
+             len = cipher.update(inBuffer[0], 0, inBuffer[0].length, outBuffer);
+             out.write(outBuffer, 0, len);
+           }
+         len = cipher.doFinal(inBuffer[0], 0, inLength, outBuffer);
+         out.write(outBuffer, 0, len);
+       }
+     catch (javax.crypto.IllegalBlockSizeException ibse)
+       {
+         throw new IOException(ibse.toString());
+       }
+     catch (javax.crypto.BadPaddingException bpe)
+       {
+         throw new IOException(bpe.toString());
+       }
+     catch (ShortBufferException sbe)
+       {
+         throw new IOException(sbe.toString());
+       }
+     out.flush();
+     out.close();
+   }
+ 
+   /**
+    * Flush any pending output.
+    *
+    * @throws java.io.IOException If an I/O error occurs.
+    */
+   public void flush() throws IOException
+   {
+     out.flush();
+   }
+ 
+   /**
+    * Write a single byte to the output stream.
+    *
+    * @param b The next byte.
+    * @throws java.io.IOException If an I/O error occurs, or if the
+    *         underlying cipher is not in the correct state to transform
+    *         data.
+    */
+   public void write(int b) throws IOException
+   {
+     if (isStream)
+       {
+         byte[] buf = new byte[] { (byte) b };
+         try
+           {
+             cipher.update(buf, 0, 1, buf, 0);
+           }
+         catch (ShortBufferException sbe)
+           {
+             throw new IOException(sbe.toString());
+           }
+         out.write(buf);
+         return;
+       }
+     inBuffer[1][inLength++] = (byte) b;
+     if (inLength == inBuffer[1].length)
+       process();
+   }
+ 
+   /**
+    * Write a byte array to the output stream.
+    *
+    * @param buf The next bytes.
+    * @throws java.io.IOException If an I/O error occurs, or if the
+    *         underlying cipher is not in the correct state to transform
+    *         data.
+    */
+   public void write(byte[] buf) throws IOException
+   {
+     write(buf, 0, buf.length);
+   }
+ 
+   /**
+    * Write a portion of a byte array to the output stream.
+    *
+    * @param buf The next bytes.
+    * @param off The offset in the byte array to start.
+    * @param len The number of bytes to write.
+    * @throws java.io.IOException If an I/O error occurs, or if the
+    *         underlying cipher is not in the correct state to transform
+    *         data.
+    */
+   public void write(byte[] buf, int off, int len) throws IOException
+   {
+     if (isStream)
+       {
+         out.write(cipher.update(buf, off, len));
+         return;
+       }
+     int count = 0;
+     while (count < len)
+       {
+         int l = Math.min(inBuffer[1].length - inLength, len - count);
+         System.arraycopy(buf, off+count, inBuffer[1], inLength, l);
+         count += l;
+         inLength += l;
+         if (inLength == inBuffer[1].length)
+           process();
+       }
+   }
+ 
+   // Own method.
+   // -------------------------------------------------------------------------
+ 
+   private void process() throws IOException
+   {
+     if (state == SECOND_TIME)
+       {
+         state = SEASONED;
+       }
+     else
+       {
+         byte[] temp = inBuffer[0];
+         inBuffer[0] = inBuffer[1];
+         inBuffer[1] = temp;
+       }
+     if (state == FIRST_TIME)
+       {
+         inLength = 0;
+         state = SECOND_TIME;
+         return;
+       }
+     try
+       {
+         cipher.update(inBuffer[0], 0, inBuffer[0].length, outBuffer);
+       }
+     catch (ShortBufferException sbe)
+       {
+         throw new IOException(sbe.toString());
+       }
+     out.write(outBuffer);
+     inLength = 0;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/CipherSpi.java gcc-4.0.0/libjava/javax/crypto/CipherSpi.java
*** gcc-3.4.3/libjava/javax/crypto/CipherSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/CipherSpi.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,398 ----
+ /* CipherSpi.java -- The cipher service provider interface.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.AlgorithmParameters;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.SecureRandom;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * <p>This class represents the <i>Service Provider Interface</i>
+  * (<b>SPI</b>) for cryptographic ciphers.</p>
+  *
+  * <p>Providers of cryptographic ciphers must subclass this for every
+  * cipher they implement, implementing the abstract methods as
+  * appropriate, then provide an entry that points to the subclass in
+  * their implementation of {@link java.security.Provider}.</p>
+  *
+  * <p>CipherSpi objects are instantiated along with {@link Cipher}s when
+  * the {@link Cipher#getInstance(java.lang.String)} methods are invoked.
+  * Particular ciphers are referenced by a <i>transformation</i>, which
+  * is a String consisting of the cipher's name or the ciper's name
+  * followed by a mode and a padding. Transformations all follow the
+  * general form:</p>
+  *
+  * <ul>
+  * <li><i>algorithm</i>, or</li>
+  * <li><i>algorithm</i>/<i>mode</i>/<i>padding</i>
+  * </ul>
+  *
+  * <p>Cipher names in the master {@link java.security.Provider} class
+  * may be:</p>
+  *
+  * <ol>
+  * <li>The algorithm's name, which uses a pluggable mode and padding:
+  * <code>Cipher.<i>algorithm</i></code></li>
+  * <li>The algorithm's name and the mode, which uses pluggable padding:
+  * <code>Cipher.<i>algorithm</i>/<i>mode</i></code></li>
+  * <li>The algorithm's name and the padding, which uses a pluggable
+  * mode: <code>Cipher.<i>algorithm</i>//<i>padding</i></code></li>
+  * <li>The algorihtm's name, the mode, and the padding:
+  * <code>Cipher.<i>algorithm</i>/<i>mode</i>/<i>padding</i></code></li>
+  * </ol>
+  *
+  * <p>When any {@link Cipher#getInstance(java.lang.String)} method is
+  * invoked, the following happens if the transformation is simply
+  * <i>algorithm</i>:</p>
+  *
+  * <ol>
+  * <li>If the provider defines a <code>CipherSpi</code> implementation
+  * for "<i>algorithm</i>", return it. Otherwise throw a {@link
+  * java.security.NoSuchAlgorithmException}.</li>
+  * </ol>
+  *
+  * <p>If the transformation is of the form
+  * <i>algorithm</i>/<i>mode</i>/<i>padding</i>:</p>
+  *
+  * <ol>
+  * <li>If the provider defines a <code>CipherSpi</code> subclass for
+  * "<i>algorithm</i>/<i>mode</i>/<i>padding</i>", return it. Otherwise
+  * go to step 2.</li>
+  *
+  * <li>If the provider defines a <code>CipherSpi</code> subclass for
+  * "<i>algorithm</i>/<i>mode</i>", instatiate it, call {@link
+  * #engineSetPadding(java.lang.String)} for the padding name, and return
+  * it. Otherwise go to step 3.</li>
+  *
+  * <li>If the provider defines a <code>CipherSpi</code> subclass for
+  * "<i>algorithm</i>//<i>padding</i>", instatiate it, call {@link
+  * #engineSetMode(java.lang.String)} for the mode name, and return
+  * it. Otherwise go to step 4.</li>
+  *
+  * <li>If the provider defines a <code>CipherSpi</code> subclass for
+  * "<i>algorithm</i>", instatiate it, call {@link
+  * #engineSetMode(java.lang.String)} for the mode name, call {@link
+  * #engineSetPadding(java.lang.String)} for the padding name, and return
+  * it. Otherwise throw a {@link java.security.NoSuchAlgorithmException}.</li>
+  * </ol>
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public abstract class CipherSpi
+ {
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new CipherSpi.
+    */
+   public CipherSpi()
+   {
+   }
+ 
+   // Abstract methods to be implemented by providers.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Finishes a multi-part transformation or transforms a portion of a
+    * byte array, and returns the transformed bytes.
+    *
+    * @param input       The input bytes.
+    * @param inputOffset The index in the input at which to start.
+    * @param inputLength The number of bytes to transform.
+    * @return The transformed bytes in a new array.
+    * @throws javax.crypto.IllegalBlockSizeException If this instance has
+    *         no padding and the input size is not a multiple of the
+    *         block size.
+    * @throws javax.crypto.BadPaddingException If this instance is being
+    *         used for decryption and the padding is not appropriate for
+    *         this instance's padding scheme.
+    */
+   protected abstract byte[]
+   engineDoFinal(byte[] input, int inputOffset, int inputLength)
+   throws IllegalBlockSizeException, BadPaddingException;
+ 
+   /**
+    * Finishes a multi-part transformation or transforms a portion of a
+    * byte array, and stores the transformed bytes in the supplied array.
+    *
+    * @param input        The input bytes.
+    * @param inputOffset  The index in the input at which to start.
+    * @param inputLength  The number of bytes to transform.
+    * @param output       The output byte array.
+    * @param outputOffset The index in the output array at which to start.
+    * @return The number of transformed bytes stored in the output array.
+    * @throws javax.crypto.IllegalBlockSizeException If this instance has
+    *         no padding and the input size is not a multiple of the
+    *         block size.
+    * @throws javax.crypto.BadPaddingException If this instance is being
+    *         used for decryption and the padding is not appropriate for
+    *         this instance's padding scheme.
+    * @throws javax.crypto.ShortBufferException If there is not enough
+    *         space in the output array for the transformed bytes.
+    */
+   protected abstract int
+   engineDoFinal(byte[] input, int inputOffset, int inputLength,
+                 byte[] output, int outputOffset)
+   throws IllegalBlockSizeException, BadPaddingException, ShortBufferException;
+ 
+   /**
+    * Returns the block size of the underlying cipher.
+    *
+    * @return The block size.
+    */
+   protected abstract int engineGetBlockSize();
+ 
+   /**
+    * Returns the initializaiton vector this cipher was initialized with,
+    * if any.
+    *
+    * @return The IV, or null if this cipher uses no IV or if this
+    *         instance has not been initialized yet.
+    */
+   protected abstract byte[] engineGetIV();
+ 
+   /**
+    * <p>Return the length of the given key in bits.</p>
+    *
+    * <p>For compatibility this method is not declared
+    * <code>abstract</code>, and the default implementation will throw an
+    * {@link java.lang.UnsupportedOperationException}. Concrete
+    * subclasses should override this method to return the correct
+    * value.</p>
+    *
+    * @param key The key to get the size for.
+    * @return The size of the key, in bits.
+    * @throws java.security.InvalidKeyException If the key's length
+    *         cannot be determined by this implementation.
+    */
+   protected int engineGetKeySize(Key key) throws InvalidKeyException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * <p>Returns the size, in bytes, an output buffer must be for a call
+    * to {@link #engineUpdate(byte[],int,int,byte[],int)} or {@link
+    * #engineDoFinal(byte[],int,int,byte[],int)} to succeed.</p>
+    *
+    * <p>The actual output length may be smaller than the value returned
+    * by this method, as it considers the padding length as well. The
+    * length considered is the argument plus the length of any buffered,
+    * unprocessed bytes.</p>
+    *
+    * @param inputLength The input length, in bytes.
+    * @return The size an output buffer must be.
+    */
+   protected abstract int engineGetOutputSize(int inputLength);
+ 
+   /**
+    * Returns the parameters that this cipher is using. This may be the
+    * parameters used to initialize this cipher, or it may be parameters
+    * that have been initialized with random values.
+    *
+    * @return This cipher's parameters, or <code>null</code> if this
+    *         cipher does not use parameters.
+    */
+   protected abstract AlgorithmParameters engineGetParameters();
+ 
+   /**
+    * Initializes this cipher with an operation mode, key, and source of
+    * randomness. If this cipher requires any other initializing data,
+    * for example an initialization vector, then it should generate it
+    * from the provided source of randomness.
+    *
+    * @param opmode The operation mode, one of {@link
+    *        Cipher#DECRYPT_MODE}, {@link Cipher#ENCRYPT_MODE}, {@link
+    *        Cipher#UNWRAP_MODE}, or {@link Cipher#WRAP_MODE}.
+    * @param key    The key to initialize this cipher with.
+    * @param random The source of random bytes to use.
+    * @throws java.security.InvalidKeyException If the given key is not
+    *         acceptable for this implementation.
+    */
+   protected abstract void engineInit(int opmode, Key key, SecureRandom random)
+   throws InvalidKeyException;
+ 
+   /**
+    * Initializes this cipher with an operation mode, key, parameters,
+    * and source of randomness. If this cipher requires any other
+    * initializing data, for example an initialization vector, then it should
+    * generate it from the provided source of randomness.
+    *
+    * @param opmode The operation mode, one of {@link
+    *        Cipher#DECRYPT_MODE}, {@link Cipher#ENCRYPT_MODE}, {@link
+    *        Cipher#UNWRAP_MODE}, or {@link Cipher#WRAP_MODE}.
+    * @param key    The key to initialize this cipher with.
+    * @param params The algorithm parameters to initialize with.
+    * @param random The source of random bytes to use.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         given parameters are not appropriate for this
+    *         implementation.
+    * @throws java.security.InvalidKeyException If the given key is not
+    *         acceptable for this implementation.
+    */
+   protected abstract void
+   engineInit(int opmode, Key key, AlgorithmParameters params,
+              SecureRandom random)
+   throws InvalidAlgorithmParameterException, InvalidKeyException;
+ 
+   /**
+    * Initializes this cipher with an operation mode, key, parameters,
+    * and source of randomness. If this cipher requires any other
+    * initializing data, for example an initialization vector, then it should
+    * generate it from the provided source of randomness.
+    *
+    * @param opmode The operation mode, one of {@link
+    *        Cipher#DECRYPT_MODE}, {@link Cipher#ENCRYPT_MODE}, {@link
+    *        Cipher#UNWRAP_MODE}, or {@link Cipher#WRAP_MODE}.
+    * @param key    The key to initialize this cipher with.
+    * @param params The algorithm parameters to initialize with.
+    * @param random The source of random bytes to use.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         given parameters are not appropriate for this
+    *         implementation.
+    * @throws java.security.InvalidKeyException If the given key is not
+    *         acceptable for this implementation.
+    */
+   protected abstract void
+   engineInit(int opmode, Key key, AlgorithmParameterSpec params,
+              SecureRandom random)
+   throws InvalidAlgorithmParameterException, InvalidKeyException;
+ 
+   /**
+    * Set the mode in which this cipher is to run.
+    *
+    * @param mode The name of the mode to use.
+    * @throws java.security.NoSuchAlgorithmException If the mode is
+    *         not supported by this cipher's provider.
+    */
+   protected abstract void engineSetMode(String mode)
+   throws NoSuchAlgorithmException;
+ 
+   /**
+    * Set the method with which the input is to be padded.
+    *
+    * @param padding The name of the padding to use.
+    * @throws javax.crypto.NoSuchPaddingException If the padding is not
+    *         supported by this cipher's provider.
+    */
+   protected abstract void engineSetPadding(String padding)
+   throws NoSuchPaddingException;
+ 
+   /**
+    * <p>Unwraps a previously-wrapped key.</p>
+    *
+    * <p>For compatibility this method is not declared
+    * <code>abstract</code>, and the default implementation will throw an
+    * {@link java.lang.UnsupportedOperationException}.</p>
+    *
+    * @param wrappedKey          The wrapped key.
+    * @param wrappedKeyAlgorithm The name of the algorithm used to wrap
+    *                            this key.
+    * @param wrappedKeyType      The type of wrapped key; one of
+    *                            {@link Cipher#PRIVATE_KEY},
+    *                            {@link Cipher#PUBLIC_KEY}, or
+    *                            {@link Cipher#SECRET_KEY}.
+    * @return The unwrapped key.
+    * @throws java.security.InvalidKeyException If the key cannot be
+    *         unwrapped, or if <code>wrappedKeyType</code> is an
+    *         inappropriate type for the unwrapped key.
+    * @throws java.security.NoSuchAlgorithmException If the
+    *         <code>wrappedKeyAlgorithm</code> is unknown.
+    */
+   protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm,
+                              int wrappedKeyType)
+   throws InvalidKeyException, NoSuchAlgorithmException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Continue with a multi-part transformation, returning a new array of
+    * the transformed bytes.
+    *
+    * @param input       The next input bytes.
+    * @param inputOffset The index in the input array from which to start.
+    * @param inputLength The number of bytes to input.
+    * @return The transformed bytes.
+    */
+   protected abstract byte[]
+   engineUpdate(byte[] input, int inputOffset, int inputLength);
+ 
+   /**
+    * Continue with a multi-part transformation, storing the transformed
+    * bytes into the specified array.
+    *
+    * @param input        The next input bytes.
+    * @param inputOffset  The index in the input from which to start.
+    * @param inputLength  The number of bytes to input.
+    * @param output       The output buffer.
+    * @param outputOffset The index in the output array from which to start.
+    * @return The transformed bytes.
+    * @throws javax.crypto.ShortBufferException If there is not enough
+    *         space in the output array to store the transformed bytes.
+    */
+   protected abstract int
+   engineUpdate(byte[] input, int inputOffset, int inputLength,
+                byte[] output, int outputOffset)
+   throws ShortBufferException;
+ 
+   /**
+    * <p>Wrap a key.</p>
+    *
+    * <p>For compatibility this method is not declared
+    * <code>abstract</code>, and the default implementation will throw an
+    * {@link java.lang.UnsupportedOperationException}.</p>
+    *
+    * @param key The key to wrap.
+    * @return The wrapped key.
+    * @throws java.security.InvalidKeyException If the key cannot be
+    *         wrapped.
+    */
+   protected byte[] engineWrap(Key key) throws InvalidKeyException, IllegalBlockSizeException
+   {
+     throw new UnsupportedOperationException();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/EncryptedPrivateKeyInfo.java gcc-4.0.0/libjava/javax/crypto/EncryptedPrivateKeyInfo.java
*** gcc-3.4.3/libjava/javax/crypto/EncryptedPrivateKeyInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/EncryptedPrivateKeyInfo.java	Thu Oct 21 20:38:29 2004
***************
*** 0 ****
--- 1,282 ----
+ /* EncryptedPrivateKeyInfo.java -- As in PKCS #8.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.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.AlgorithmParameters;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.PKCS8EncodedKeySpec;
+ import java.util.ArrayList;
+ import java.util.List;
+ 
+ /**
+  * An implementation of the <code>EncryptedPrivateKeyInfo</code> ASN.1
+  * type as specified in <a
+  * href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-8/">PKCS #8 -
+  * Private-Key Information Syntax Standard</a>.
+  *
+  * <p>The ASN.1 type <code>EncryptedPrivateKeyInfo</code> is:
+  *
+  * <blockquote>
+  * <pre>EncryptedPrivateKeyInfo ::= SEQUENCE {
+  *   encryptionAlgorithm EncryptionAlgorithmIdentifier,
+  *   encryptedData EncryptedData }
+  *
+  * EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
+  *
+  * EncrytpedData ::= OCTET STRING
+  *
+  * AlgorithmIdentifier ::= SEQUENCE {
+  *   algorithm  OBJECT IDENTIFIER,
+  *   parameters ANY DEFINED BY algorithm OPTIONAL }</pre>
+  * </blockquote>
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see java.security.spec.PKCS8EncodedKeySpec
+  */
+ public class EncryptedPrivateKeyInfo
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The encrypted data. */
+   private byte[] encryptedData;
+ 
+   /** The encoded, encrypted key. */
+   private byte[] encoded;
+ 
+   /** The OID of the encryption algorithm. */
+   private OID algOid;
+ 
+   /** The encryption algorithm's parameters. */
+   private AlgorithmParameters params;
+ 
+   /** The encoded ASN.1 algorithm parameters. */
+   private byte[] encodedParams;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new <code>EncryptedPrivateKeyInfo</code> object from raw
+    * encrypted data and the parameters used for encryption.
+    *
+    * <p>The <code>encryptedData</code> array is cloned.
+    *
+    * @param params        The encryption algorithm parameters.
+    * @param encryptedData The encrypted key data.
+    * @throws java.lang.IllegalArgumentException If the
+    *         <code>encryptedData</code> array is empty (zero-length).
+    * @throws java.security.NoSuchAlgorithmException If the algorithm
+    *         specified in the parameters is not supported.
+    * @throws java.lang.NullPointerException If <code>encryptedData</code>
+    *         is null.
+    */
+   public EncryptedPrivateKeyInfo(AlgorithmParameters params,
+                                  byte[] encryptedData)
+     throws IllegalArgumentException, NoSuchAlgorithmException
+   {
+     if (encryptedData.length == 0)
+       {
+         throw new IllegalArgumentException("0-length encryptedData");
+       }
+     this.params = params;
+     algOid = new OID(params.getAlgorithm());
+     this.encryptedData = (byte[]) encryptedData.clone();
+   }
+ 
+   /**
+    * Create a new <code>EncryptedPrivateKeyInfo</code> from an encoded
+    * representation, parsing the ASN.1 sequence.
+    *
+    * @param encoded The encoded info.
+    * @throws java.io.IOException If parsing the encoded data fails.
+    * @throws java.lang.NullPointerException If <code>encoded</code> is
+    *         null.
+    */
+   public EncryptedPrivateKeyInfo(byte[] encoded)
+     throws IOException
+   {
+     this.encoded = (byte[]) encoded.clone();
+     decode();
+   }
+ 
+   /**
+    * Create a new <code>EncryptedPrivateKeyInfo</code> from the cipher
+    * name and the encrytpedData.
+    *
+    * <p>The <code>encryptedData</code> array is cloned.
+    *
+    * @param algName       The name of the algorithm (as an object identifier).
+    * @param encryptedData The encrypted key data.
+    * @throws java.lang.IllegalArgumentException If the
+    *         <code>encryptedData</code> array is empty (zero-length).
+    * @throws java.security.NoSuchAlgorithmException If algName is not
+    *         the name of a supported algorithm.
+    * @throws java.lang.NullPointerException If <code>encryptedData</code>
+    *         is null.
+    */
+   public EncryptedPrivateKeyInfo(String algName, byte[] encryptedData)
+     throws IllegalArgumentException, NoSuchAlgorithmException,
+            NullPointerException
+   {
+     if (encryptedData.length == 0)
+       {
+         throw new IllegalArgumentException("0-length encryptedData");
+       }
+     this.algOid = new OID(algName);
+     this.encryptedData = (byte[]) encryptedData.clone();
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the name of the cipher used to encrypt this key.
+    *
+    * @return The algorithm name.
+    */
+   public String getAlgName()
+   {
+     return algOid.toString();
+   }
+ 
+   public AlgorithmParameters getAlgParameters()
+   {
+     if (params == null && encodedParams != null)
+       {
+         try
+           {
+             params = AlgorithmParameters.getInstance(getAlgName());
+             params.init(encodedParams);
+           }
+         catch (NoSuchAlgorithmException ignore)
+           {
+           }
+         catch (IOException ignore)
+           {
+           }
+       }
+     return params;
+   }
+ 
+   public synchronized byte[] getEncoded() throws IOException
+   {
+     if (encoded == null) encode();
+     return (byte[]) encoded.clone();
+   }
+ 
+   public byte[] getEncryptedData()
+   {
+     return encryptedData;
+   }
+ 
+   public PKCS8EncodedKeySpec getKeySpec(Cipher cipher)
+     throws InvalidKeySpecException
+   {
+     try
+       {
+         return new PKCS8EncodedKeySpec(cipher.doFinal(encryptedData));
+       }
+     catch (Exception x)
+       {
+         throw new InvalidKeySpecException(x.toString());
+       }
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private void decode() throws IOException
+   {
+     DERReader der = new DERReader(encoded);
+     DERValue val = der.read();
+     if (val.getTag() != DER.SEQUENCE)
+       throw new IOException("malformed EncryptedPrivateKeyInfo");
+     val = der.read();
+     if (val.getTag() != DER.SEQUENCE)
+       throw new IOException("malformed AlgorithmIdentifier");
+     int algpLen = val.getLength();
+     DERValue oid = der.read();
+     if (oid.getTag() != DER.OBJECT_IDENTIFIER)
+       throw new IOException("malformed AlgorithmIdentifier");
+     algOid = (OID) oid.getValue();
+     if (algpLen == 0)
+       {
+         val = der.read();
+         if (val.getTag() != 0)
+           {
+             encodedParams = val.getEncoded();
+             der.read();
+           }
+       }
+     else if (oid.getEncodedLength() < val.getLength())
+       {
+         val = der.read();
+         encodedParams = val.getEncoded();
+       }
+     val = der.read();
+     if (val.getTag() != DER.OCTET_STRING)
+       throw new IOException("malformed AlgorithmIdentifier");
+     encryptedData = (byte[]) val.getValue();
+   }
+ 
+   private void encode() throws IOException
+   {
+     List algId = new ArrayList(2);
+     algId.add(new DERValue(DER.OBJECT_IDENTIFIER, algOid));
+     getAlgParameters();
+     if (params != null)
+       {
+         algId.add(DERReader.read(params.getEncoded()));
+       }
+     List epki = new ArrayList(2);
+     epki.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, algId));
+     epki.add(new DERValue(DER.OCTET_STRING, encryptedData));
+     encoded = new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, epki).getEncoded();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/ExemptionMechanism.java gcc-4.0.0/libjava/javax/crypto/ExemptionMechanism.java
*** gcc-3.4.3/libjava/javax/crypto/ExemptionMechanism.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/ExemptionMechanism.java	Thu Nov 18 15:26:43 2004
***************
*** 0 ****
--- 1,229 ----
+ /* ExemptionMechanism.java -- Generic crypto-weakening mechanism.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.lang.reflect.InvocationTargetException;
+ 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.Security;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * An exemption mechanism, which will conditionally allow cryptography
+  * where it is not normally allowed, implements things such as <i>key
+  * recovery</i>, <i>key weakening</i>, or <i>key escrow</i>.
+  *
+  * <p><b>Implementation note</b>: this class is present for
+  * API-compatibility only; it is not actually used anywhere in this library
+  * and this library does not, in general, support crypto weakening.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public class ExemptionMechanism
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   private static final String SERVICE = "ExemptionMechanism";
+   private ExemptionMechanismSpi emSpi;
+   private Provider provider;
+   private String mechanism;
+   private boolean virgin;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   protected ExemptionMechanism(ExemptionMechanismSpi emSpi, Provider provider,
+                                String mechanism)
+   {
+     this.emSpi = emSpi;
+     this.provider = provider;
+     this.mechanism = mechanism;
+     virgin = true;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   public static final ExemptionMechanism getInstance(String mechanism)
+   throws NoSuchAlgorithmException
+   {
+     Provider[] provs = Security.getProviders();
+     String msg = "";
+     for (int i = 0; i < provs.length; i++)
+       {
+         try
+           {
+             return getInstance(mechanism, provs[i]);
+           }
+         catch (NoSuchAlgorithmException nsae)
+           {
+             msg = nsae.getMessage();
+           }
+       }
+     throw new NoSuchAlgorithmException(msg);
+   }
+ 
+   public static final ExemptionMechanism getInstance(String mechanism,
+                                                      String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       {
+         throw new NoSuchProviderException(provider);
+       }
+     return getInstance(mechanism, p);
+   }
+ 
+   public static final ExemptionMechanism getInstance(String mechanism,
+                                                      Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     try
+       {
+         return new ExemptionMechanism((ExemptionMechanismSpi)
+           Engine.getInstance(SERVICE, mechanism, provider),
+           provider, mechanism);
+       }
+     catch (InvocationTargetException ite)
+       {
+         if (ite.getCause() instanceof NoSuchAlgorithmException)
+           throw (NoSuchAlgorithmException) ite.getCause();
+         else
+           throw new NoSuchAlgorithmException(mechanism);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(mechanism);
+       }
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   public final byte[] genExemptionBlob()
+     throws IllegalStateException, ExemptionMechanismException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     return emSpi.engineGenExemptionBlob();
+   }
+ 
+   public final int genExemptionBlob(byte[] output)
+     throws IllegalStateException, ExemptionMechanismException,
+            ShortBufferException
+   {
+     return genExemptionBlob(output, 0);
+   }
+ 
+   public final int genExemptionBlob(byte[] output, int outputOffset)
+     throws IllegalStateException, ExemptionMechanismException,
+            ShortBufferException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     return emSpi.engineGenExemptionBlob(output, outputOffset);
+   }
+ 
+   public final String getName()
+   {
+     return mechanism;
+   }
+ 
+   public final int getOutputSize(int inputLength) throws IllegalStateException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     return emSpi.engineGetOutputSize(inputLength);
+   }
+ 
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   public final void init(Key key)
+     throws ExemptionMechanismException, InvalidKeyException
+   {
+     emSpi.engineInit(key);
+     virgin = false;
+   }
+ 
+   public final void init(Key key, AlgorithmParameters params)
+     throws ExemptionMechanismException, InvalidAlgorithmParameterException,
+            InvalidKeyException
+   {
+     emSpi.engineInit(key, params);
+     virgin = false;
+   }
+ 
+   public final void init(Key key, AlgorithmParameterSpec params)
+     throws ExemptionMechanismException, InvalidAlgorithmParameterException,
+            InvalidKeyException
+   {
+     emSpi.engineInit(key, params);
+     virgin = false;
+   }
+ 
+   public final boolean isCryptoAllowed(Key key)
+     throws ExemptionMechanismException
+   {
+     return true;
+   }
+ 
+   protected void finalize()
+   {
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/ExemptionMechanismException.java gcc-4.0.0/libjava/javax/crypto/ExemptionMechanismException.java
*** gcc-3.4.3/libjava/javax/crypto/ExemptionMechanismException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/ExemptionMechanismException.java	Wed Oct 20 08:09:26 2004
***************
*** 0 ****
--- 1,78 ----
+ /* ExemptionMechanismException -- An error in an exemption mechanism.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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;
+ 
+ /**
+  * Signals a general exception in an {@link ExemptionMechanism}.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public class ExemptionMechanismException extends GeneralSecurityException
+ {
+ 
+   // Constant.
+   // ------------------------------------------------------------------------
+ 
+   /** Compatible with JDK1.4. */
+   private static final long serialVersionUID = 1572699429277957109L;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new exception with no detail message.
+    */
+   public ExemptionMechanismException()
+   {
+     super();
+   }
+ 
+   /**
+    * Create a new exception with a detail message.
+    *
+    * @param message The detail message.
+    */
+   public ExemptionMechanismException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/ExemptionMechanismSpi.java gcc-4.0.0/libjava/javax/crypto/ExemptionMechanismSpi.java
*** gcc-3.4.3/libjava/javax/crypto/ExemptionMechanismSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/ExemptionMechanismSpi.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,149 ----
+ /* ExemptionMechanismSpi.java -- Exemption mechanism service provider interface.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.AlgorithmParameters;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * The <i>Service Provider Interface</i> (<b>SPI</b>) for the {@link
+  * ExemptionMechanism} class.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public abstract class ExemptionMechanismSpi
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new exemption mechanism SPI.
+    */
+   public ExemptionMechanismSpi()
+   {
+   }
+ 
+   // Abstract instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return a key blob for the key that this mechanism was initialized
+    * with.
+    *
+    * @return The key blob.
+    * @throws javax.crypto.ExemptionMechanismException If generating the
+    *         blob fails.
+    */
+   protected abstract byte[] engineGenExemptionBlob()
+     throws ExemptionMechanismException;
+ 
+   /**
+    * Generate a key blob for the key that this mechanism was initialized
+    * with, storing it into the given byte array.
+    *
+    * @param output       The destination for the key blob.
+    * @param outputOffset The index in the output array to start.
+    * @return The size of the key blob.
+    * @throws javax.crypto.ExemptionMechanismException If generating the
+    *         blob fails.
+    * @throws javax.crypto.ShortBufferException If the output array is
+    *         not large enough for the key blob.
+    */
+   protected abstract int engineGenExemptionBlob(byte[] output, int outputOffset)
+     throws ExemptionMechanismException, ShortBufferException;
+ 
+   /**
+    * Get the size of the output blob given an input key size. The actual
+    * blob may be shorter than the value returned by this method. Both
+    * values are in bytes.
+    *
+    * @param inputLength The input size.
+    * @return The output size.
+    */
+   protected abstract int engineGetOutputSize(int inputLength);
+ 
+   /**
+    * Initialize this mechanism with a key.
+    *
+    * @param key The key.
+    * @throws javax.crypto.ExemptionMechanismException If generating the
+    *         blob fails.
+    * @throws java.security.InvalidKeyException If the supplied key
+    *         cannot be used.
+    */
+   protected abstract void engineInit(Key key)
+     throws ExemptionMechanismException, InvalidKeyException;
+ 
+   /**
+    * Initialize this mechanism with a key and parameters.
+    *
+    * @param key    The key.
+    * @param params The parameters.
+    * @throws javax.crypto.ExemptionMechanismException If generating the
+    *         blob fails.
+    * @throws java.security.InvalidAlgorithmParameterExceptin If the
+    *         supplied parameters are inappropriate.
+    * @throws java.security.InvalidKeyException If the supplied key
+    *         cannot be used.
+    */
+   protected abstract void engineInit(Key key, AlgorithmParameters params)
+     throws ExemptionMechanismException, InvalidAlgorithmParameterException,
+            InvalidKeyException;
+ 
+   /**
+    * Initialize this mechanism with a key and parameters.
+    *
+    * @param key    The key.
+    * @param params The parameters.
+    * @throws javax.crypto.ExemptionMechanismException If generating the
+    *         blob fails.
+    * @throws java.security.InvalidAlgorithmParameterExceptin If the
+    *         supplied parameters are inappropriate.
+    * @throws java.security.InvalidKeyException If the supplied key
+    *         cannot be used.
+    */
+   protected abstract void engineInit(Key key, AlgorithmParameterSpec params)
+     throws ExemptionMechanismException, InvalidAlgorithmParameterException,
+            InvalidKeyException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/IllegalBlockSizeException.java gcc-4.0.0/libjava/javax/crypto/IllegalBlockSizeException.java
*** gcc-3.4.3/libjava/javax/crypto/IllegalBlockSizeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/IllegalBlockSizeException.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,71 ----
+ /* IllegalBlockSizeException.java -- Signals illegal block sizes.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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 when finishing encryption without padding or
+  * decryption and the input is not a multiple of the cipher's block
+  * size.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class IllegalBlockSizeException extends GeneralSecurityException
+ {
+ 
+   // Constant.
+   // ------------------------------------------------------------------------
+ 
+   /** Serialization constant. */
+   private static final long serialVersionUID = -1965144811953540392L;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   public IllegalBlockSizeException()
+   {
+     super();
+   }
+ 
+   public IllegalBlockSizeException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/KeyAgreement.java gcc-4.0.0/libjava/javax/crypto/KeyAgreement.java
*** gcc-3.4.3/libjava/javax/crypto/KeyAgreement.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/KeyAgreement.java	Thu Oct 21 20:38:29 2004
***************
*** 0 ****
--- 1,372 ----
+ /* KeyAgreement.java -- Engine for key agreement 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.lang.reflect.InvocationTargetException;
+ 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.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * Key agreement is a method in which two or more parties may agree on a
+  * secret key for symmetric cryptography or message authentication
+  * without transmitting any secrets in the clear. Key agreement
+  * algorithms typically use a public/private <i>key pair</i>, and the
+  * public key (along with some additional information) is sent across
+  * untrusted networks.
+  *
+  * <p>The most common form of key agreement used today is the
+  * <i>Diffie-Hellman key exchange algorithm</i>, described in <a
+  * href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-3/">PKCS #3 -
+  * Diffie Hellman Key Agreement Standard</a>.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see KeyGenerator
+  * @see SecretKey
+  */
+ public class KeyAgreement
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   private static final String SERVICE = "KeyAgreement";
+ 
+   /** The underlying key agreement implementation. */
+   private KeyAgreementSpi kaSpi;
+ 
+   /** The provider of this implementation. */
+   private Provider provider;
+ 
+   /** The name of this instance's algorithm. */
+   private String algorithm;
+ 
+   /** Singnals whether or not this instance has been initialized. */
+   private boolean virgin;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   protected KeyAgreement(KeyAgreementSpi kaSpi, Provider provider,
+                          String algorithm)
+   {
+     this.kaSpi = kaSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+     virgin = true;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get an implementation of an algorithm from the first provider that
+    * implements it.
+    *
+    * @param algorithm The name of the algorithm to get.
+    * @return The proper KeyAgreement instacne, if found.
+    * @throws java.security.NoSuchAlgorithmException If the specified
+    *         algorithm is not implemented by any installed provider.
+    */
+   public static final KeyAgreement getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] provs = Security.getProviders();
+     String msg = algorithm;
+     for (int i = 0; i < provs.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, provs[i]);
+           }
+         catch (NoSuchAlgorithmException nsae)
+           {
+             msg = nsae.getMessage();
+           }
+       }
+     throw new NoSuchAlgorithmException(msg);
+   }
+ 
+   /**
+    * Get an implementation of an algorithm from a 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 proper KeyAgreement instance, if found.
+    * @throws java.security.NoSuchAlgorithmException If the named provider
+    *         does not implement the algorithm.
+    * @throws java.security.NoSuchProviderException If the named provider
+    *         does not exist.
+    */
+   public static final KeyAgreement 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 implementation of an algorithm from a specific provider.
+    *
+    * @param algorithm The name of the algorithm to get.
+    * @param provider  The provider from which to get the implementation.
+    * @return The proper KeyAgreement instance, if found.
+    * @throws java.security.NoSuchAlgorithmException If this provider
+    *         does not implement the algorithm.
+    */
+   public static final KeyAgreement getInstance(String algorithm,
+                                                Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     try
+       {
+         return new KeyAgreement((KeyAgreementSpi)
+           Engine.getInstance(SERVICE, algorithm, provider),
+           provider, algorithm);
+       }
+     catch (InvocationTargetException ite)
+       {
+         if (ite.getCause() == null)
+           throw new NoSuchAlgorithmException(algorithm);
+         if (ite.getCause() instanceof NoSuchAlgorithmException)
+           throw (NoSuchAlgorithmException) ite.getCause();
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Do a phase in the key agreement. The number of times this method is
+    * called depends upon the algorithm and the number of parties
+    * involved, but must be called at least once with the
+    * <code>lastPhase</code> flag set to <code>true</code>.
+    *
+    * @param key       The key for this phase.
+    * @param lastPhase Should be <code>true</code> if this will be the
+    *        last phase before generating the shared secret.
+    * @return The intermediate result, or <code>null</code> if there is
+    *         no intermediate result.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized.
+    * @throws java.security.InvalidKeyException If the key is
+    *         inappropriate for this algorithm.
+    */
+   public final Key doPhase(Key key, boolean lastPhase)
+     throws IllegalStateException, InvalidKeyException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     return kaSpi.engineDoPhase(key, lastPhase);
+   }
+ 
+   /**
+    * Generate the shared secret in a new byte array.
+    *
+    * @return The shared secret.
+    * @throws java.lang.IllegalStateException If this instnace has not
+    *         been initialized, or if not enough calls to
+    *         <code>doPhase</code> have been made.
+    */
+   public final byte[] generateSecret() throws IllegalStateException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     return kaSpi.engineGenerateSecret();
+   }
+ 
+   /**
+    * Generate the shared secret and store it into the supplied array.
+    *
+    * @param sharedSecret The array in which to store the secret.
+    * @param offset       The index in <code>sharedSecret</code> to start
+    *                     storing data.
+    * @return The length of the shared secret, in bytes.
+    * @throws java.lang.IllegalStateException If this instnace has not
+    *         been initialized, or if not enough calls to
+    *         <code>doPhase</code> have been made.
+    * @throws javax.crypto.ShortBufferException If the supplied array is
+    *         not large enough to store the result.
+    */
+   public final int generateSecret(byte[] sharedSecret, int offset)
+   throws IllegalStateException, ShortBufferException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     return kaSpi.engineGenerateSecret(sharedSecret, offset);
+   }
+ 
+   /**
+    * Generate the shared secret and return it as an appropriate {@link
+    * SecretKey}.
+    *
+    * @param algorithm The secret key's algorithm.
+    * @return The shared secret as a secret key.
+    * @throws java.lang.IllegalStateException If this instnace has not
+    *         been initialized, or if not enough calls to
+    *         <code>doPhase</code> have been made.
+    * @throws java.security.InvalidKeyException If the shared secret
+    *         cannot be used to make a {@link SecretKey}.
+    * @throws java.security.NoSuchAlgorithmException If the specified
+    *         algorithm does not exist.
+    */
+   public final SecretKey generateSecret(String algorithm)
+   throws IllegalStateException, InvalidKeyException, NoSuchAlgorithmException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     return kaSpi.engineGenerateSecret(algorithm);
+   }
+ 
+   /**
+    * Return the name of this key-agreement algorithm.
+    *
+    * @return The algorithm name.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Return the provider of the underlying implementation.
+    *
+    * @return The provider.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Initialize this key agreement with a key. This method will use the
+    * highest-priority {@link java.security.SecureRandom} as its source
+    * of randomness.
+    *
+    * @param key The key, usually the user's private key.
+    * @throws java.security.InvalidKeyException If the supplied key is
+    *         not appropriate.
+    */
+   public final void init(Key key) throws InvalidKeyException
+   {
+     init(key, new SecureRandom());
+   }
+ 
+   /**
+    * Initialize this key agreement with a key and a source of
+    * randomness.
+    *
+    * @param key    The key, usually the user's private key.
+    * @param random The source of randomness.
+    * @throws java.security.InvalidKeyException If the supplied key is
+    *         not appropriate.
+    */
+   public final void init(Key key, SecureRandom random)
+     throws InvalidKeyException
+   {
+     kaSpi.engineInit(key, random);
+     virgin = false; // w00t!
+   }
+ 
+   /**
+    * Initialize this key agreement with a key and parameters. This
+    * method will use the highest-priority {@link
+    * java.security.SecureRandom} as its source of randomness.
+    *
+    * @param key    The key, usually the user's private key.
+    * @param params The algorithm parameters.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         supplied parameters are not appropriate.
+    * @throws java.security.InvalidKeyException If the supplied key is
+    *         not appropriate.
+    */
+   public final void init(Key key, AlgorithmParameterSpec params)
+     throws InvalidAlgorithmParameterException, InvalidKeyException
+   {
+     init(key, params, new SecureRandom());
+   }
+ 
+   /**
+    * Initialize this key agreement with a key, parameters, and source of
+    * randomness.
+    *
+    * @param key    The key, usually the user's private key.
+    * @param params The algorithm parameters.
+    * @param random The source of randomness.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         supplied parameters are not appropriate.
+    * @throws java.security.InvalidKeyException If the supplied key is
+    *         not appropriate.
+    */
+   public final void init(Key key, AlgorithmParameterSpec params,
+                          SecureRandom random)
+     throws InvalidAlgorithmParameterException, InvalidKeyException
+   {
+     kaSpi.engineInit(key, params, random);
+     virgin = false; // w00t!
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/KeyAgreementSpi.java gcc-4.0.0/libjava/javax/crypto/KeyAgreementSpi.java
*** gcc-3.4.3/libjava/javax/crypto/KeyAgreementSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/KeyAgreementSpi.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,160 ----
+ /* KeyAgreementSpi.java -- The key agreement service provider interface.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.InvalidAlgorithmParameterException;
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.SecureRandom;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * This is the <i>Service Provider Interface</i> (<b>SPI</b>) for the
+  * {@link javax.crypto.KeyAgreement} class.
+  *
+  * <p>Providers wishing to implement a key agreement algorithm must
+  * subclass this and provide an appropriate implementation for all the
+  * abstract methods below, and provide an appropriate entry in the
+  * master {@link java.security.Provider} class (the service name for key
+  * agreement algorithms is <code>"KeyAgreement"</code>).
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see KeyAgreement
+  * @see SecretKey
+  */
+ public abstract class KeyAgreementSpi
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new KeyAgreementSpi instance.
+    */
+   public KeyAgreementSpi()
+   {
+   }
+ 
+   // Abstract instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Do a phase in the key agreement.
+    *
+    * @param key The key to use for this phase.
+    * @param lastPhase <code>true</code> if this call should be the last
+    *        phase.
+    * @return The intermediate result, or <code>null</code> if there is
+    *         no intermediate result.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized.
+    * @throws java.security.InvalidKeyException If the supplied key is
+    *         not appropriate.
+    */
+   protected abstract Key engineDoPhase(Key key, boolean lastPhase)
+     throws IllegalStateException, InvalidKeyException;
+ 
+   /**
+    * Generate the shared secret in a new byte array.
+    *
+    * @return The shared secret in a new byte array.
+    * @throws java.lang.IllegalStateException If this key agreement is
+    *         not ready to generate the secret.
+    */
+   protected abstract byte[] engineGenerateSecret()
+     throws IllegalStateException;
+ 
+   /**
+    * Generate the shared secret, storing it into the specified array.
+    *
+    * @param sharedSecret The byte array in which to store the secret.
+    * @param offset       The offset into the byte array to start.
+    * @return The size of the shared secret.
+    * @throws java.lang.IllegalStateException If this key agreement is
+    *         not ready to generate the secret.
+    * @throws javax.crypto.ShortBufferException If there is not enough
+    *         space in the supplied array for the shared secret.
+    */
+   protected abstract int engineGenerateSecret(byte[] sharedSecret, int offset)
+     throws IllegalStateException, ShortBufferException;
+ 
+   /**
+    * Generate the shared secret and return it as a {@link SecretKey}.
+    *
+    * @param algorithm The algorithm with which to generate the secret key.
+    * @return The shared secret as a secret key.
+    * @throws java.lang.IllegalStateException If this key agreement is
+    *         not ready to generate the secret.
+    * @throws java.security.InvalidKeyException If the shared secret
+    *         cannot be made into a {@link SecretKey}.
+    * @throws java.security.NoSuchAlgorithmException If
+    *         <code>algorithm</code> cannot be found.
+    */
+   protected abstract SecretKey engineGenerateSecret(String algorithm)
+     throws IllegalStateException, InvalidKeyException, NoSuchAlgorithmException;
+ 
+   /**
+    * Initialize this key agreement with a key, parameters, and source of
+    * randomness.
+    *
+    * @param key    The key to initialize with, usually a private key.
+    * @param params The parameters to initialize with.
+    * @param random The source of randomness to use.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         supplied parameters are inappropriate.
+    * @throws java.security.InvalidKeyException If the supplied key is
+    *         inappropriate.
+    */
+   protected abstract void engineInit(Key key, AlgorithmParameterSpec params,
+                                      SecureRandom random)
+     throws InvalidAlgorithmParameterException, InvalidKeyException;
+ 
+   /**
+    * Initialize this key agreement with a key and source of randomness.
+    *
+    * @param key    The key to initialize with, usually a private key.
+    * @param random The source of randomness to use.
+    * @throws java.security.InvalidKeyException If the supplied key is
+    *         inappropriate.
+    */
+   protected abstract void engineInit(Key key, SecureRandom random)
+     throws InvalidKeyException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/KeyGenerator.java gcc-4.0.0/libjava/javax/crypto/KeyGenerator.java
*** gcc-3.4.3/libjava/javax/crypto/KeyGenerator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/KeyGenerator.java	Thu Oct 21 20:38:29 2004
***************
*** 0 ****
--- 1,283 ----
+ /* KeyGenerator.java -- Interface to a symmetric key generator.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.lang.reflect.InvocationTargetException;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.Provider;
+ import java.security.SecureRandom;
+ import java.security.Security;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * A generic producer of keys for symmetric cryptography. The keys
+  * returned may be simple wrappers around byte arrays, or, if the
+  * target cipher requires them, more complex objects.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see Cipher
+  * @see Mac
+  */
+ public class KeyGenerator
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   private static final String SERVICE = "KeyGenerator";
+ 
+   /** The underlying generator implementation. */
+   private KeyGeneratorSpi kgSpi;
+ 
+   /** The provider of the implementation. */
+   private Provider provider;
+ 
+   /** The name of the algorithm. */
+   private String algorithm;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new key generator.
+    *
+    * @param kgSpi     The underlying generator.
+    * @param provider  The provider of this implementation.
+    * @param algorithm The algorithm's name.
+    */
+   protected KeyGenerator(KeyGeneratorSpi kgSpi, Provider provider,
+                          String algorithm)
+   {
+     this.kgSpi = kgSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new key generator, returning the first available
+    * implementation.
+    *
+    * @param algorithm The generator algorithm name.
+    * @throws java.security.NoSuchAlgorithmException If the specified
+    *         algorithm does not exist.
+    */
+   public static final KeyGenerator getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] provs = Security.getProviders();
+     String msg = algorithm;
+     for (int i = 0; i < provs.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, provs[i]);
+           }
+         catch (NoSuchAlgorithmException nsae)
+           {
+             msg = nsae.getMessage();
+           }
+       }
+     throw new NoSuchAlgorithmException(msg);
+   }
+ 
+   /**
+    * Create a new key generator from the named provider.
+    *
+    * @param algorithm The generator algorithm name.
+    * @param provider  The name of the provider to use.
+    * @return An appropriate key generator, if found.
+    * @throws java.security.NoSuchAlgorithmException If the specified
+    *         algorithm is not implemented by the named provider.
+    * @throws java.security.NoSuchProviderException If the named provider
+    *         does not exist.
+    */
+   public static final KeyGenerator getInstance(String algorithm, String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       {
+         throw new NoSuchProviderException(provider);
+       }
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Create a new key generator from the supplied provider.
+    *
+    * @param algorithm The generator algorithm name.
+    * @param provider  The provider to use.
+    * @return An appropriate key generator, if found.
+    * @throws java.security.NoSuchAlgorithmException If the specified
+    *         algorithm is not implemented by the provider.
+    */
+   public static final KeyGenerator getInstance(String algorithm, Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     try
+       {
+         return new KeyGenerator((KeyGeneratorSpi)
+           Engine.getInstance(SERVICE, algorithm, provider),
+           provider, algorithm);
+       }
+     catch (InvocationTargetException ite)
+       {
+         if (ite.getCause() == null)
+           throw new NoSuchAlgorithmException(algorithm);
+         if (ite.getCause() instanceof NoSuchAlgorithmException)
+           throw (NoSuchAlgorithmException) ite.getCause();
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Generate a key.
+    *
+    * @return The new key.
+    */
+   public final SecretKey generateKey()
+   {
+     return kgSpi.engineGenerateKey();
+   }
+ 
+   /**
+    * Return the name of this key generator.
+    *
+    * @return The algorithm name.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Return the provider of the underlying implementation.
+    *
+    * @return The provider.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Initialize this key generator with a set of parameters; the
+    * highest-priority {@link java.security.SecureRandom} implementation
+    * will be used.
+    *
+    * @param params The algorithm parameters.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         supplied parameters are inapproprate.
+    */
+   public final void init(AlgorithmParameterSpec params)
+     throws InvalidAlgorithmParameterException
+   {
+     init(params, new SecureRandom());
+   }
+ 
+   /**
+    * Initialize this key generator with a set of parameters and a source
+    * of randomness.
+    *
+    * @param params The algorithm parameters.
+    * @param random The source of randomness.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         supplied parameters are inapproprate.
+    */
+   public final void init(AlgorithmParameterSpec params, SecureRandom random)
+     throws InvalidAlgorithmParameterException
+   {
+     kgSpi.engineInit(params, random);
+   }
+ 
+   /**
+    * Initialize this key generator with a key size (in bits); the
+    * highest-priority {@link java.security.SecureRandom} implementation
+    * will be used.
+    *
+    * @param keySize The target key size, in bits.
+    * @throws java.security.InvalidParameterException If the
+    *         key size is unsupported.
+    */
+   public final void init(int keySize)
+   {
+     init(keySize, new SecureRandom());
+   }
+ 
+   /**
+    * Initialize this key generator with a key size (in bits) and a
+    * source of randomness.
+    *
+    * @param keySize The target key size, in bits.
+    * @param random  The source of randomness.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         key size is unsupported.
+    */
+   public final void init(int keySize, SecureRandom random)
+   {
+     kgSpi.engineInit(keySize, random);
+   }
+ 
+   /**
+    * Initialize this key generator with a source of randomness. The
+    * implementation-specific default parameters (such as key size) will
+    * be used.
+    *
+    * @param random The source of randomness.
+    */
+   public final void init(SecureRandom random)
+   {
+     kgSpi.engineInit(random);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/KeyGeneratorSpi.java gcc-4.0.0/libjava/javax/crypto/KeyGeneratorSpi.java
*** gcc-3.4.3/libjava/javax/crypto/KeyGeneratorSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/KeyGeneratorSpi.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,112 ----
+ /* KeyGeneratorSpi.java -- The key generator service provider interface.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.InvalidAlgorithmParameterException;
+ import java.security.SecureRandom;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * The <i>Service Provider Interface</i> (<b>SPI</b>) for the {@link
+  * KeyGenerator} class.
+  *
+  * <p>Providers wishing to implement a key generator must subclass this
+  * and provide an appropriate implementation for all the abstract
+  * methods below, and provide an appropriate entry in the master {@link
+  * java.security.Provider} class (the service name for key generators is
+  * <code>"KeyGenerator"</code>).
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see KeyGenerator
+  */
+ public abstract class KeyGeneratorSpi
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /** Create a new key generator SPI. */
+   public KeyGeneratorSpi()
+   {
+   }
+ 
+   // Abstract instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Generate a key, returning it as a {@link SecretKey}.
+    *
+    * @return The generated key.
+    */
+   protected abstract SecretKey engineGenerateKey();
+ 
+   /**
+    * Initialize this key generator with parameters and a source of
+    * randomness.
+    *
+    * @param params The parameters.
+    * @param random The source of randomness.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         parameters are inappropriate for this instance.
+    */
+   protected abstract void engineInit(AlgorithmParameterSpec params,
+                                      SecureRandom random)
+     throws InvalidAlgorithmParameterException;
+ 
+   /**
+    * Initialize this key generator with a key size (in bits) and a
+    * source of randomness.
+    *
+    * @param keySize The target key size, in bits.
+    * @param random  The source of randomness.
+    * @throws java.security.InvalidParameterException If the
+    *         key size is illogical or unsupported.
+    */
+   protected abstract void engineInit(int keySize, SecureRandom random);
+ 
+   /**
+    * Initialize this key generator with a source of randomness; the
+    * implementation should use reasonable default parameters (such as
+    * generated key size).
+    *
+    * @param random The source of randomness.
+    */
+   protected abstract void engineInit(SecureRandom random);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/Mac.java gcc-4.0.0/libjava/javax/crypto/Mac.java
*** gcc-3.4.3/libjava/javax/crypto/Mac.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/Mac.java	Thu Nov 18 15:26:43 2004
***************
*** 0 ****
--- 1,413 ----
+ /* Mac.java -- The message authentication code interface.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.lang.reflect.InvocationTargetException;
+ 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.Security;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * This class implements a "message authentication code" (MAC), a method
+  * to ensure the integrity of data transmitted between two parties who
+  * share a common secret key.
+  *
+  * <p>The best way to describe a MAC is as a <i>keyed one-way hash
+  * function</i>, which looks like:
+  *
+  * <blockquote><p><code>D = MAC(K, M)</code></blockquote>
+  *
+  * <p>where <code>K</code> is the key, <code>M</code> is the message,
+  * and <code>D</code> is the resulting digest. One party will usually
+  * send the concatenation <code>M || D</code> to the other party, who
+  * will then verify <code>D</code> by computing <code>D'</code> in a
+  * similar fashion. If <code>D == D'</code>, then the message is assumed
+  * to be authentic.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class Mac implements Cloneable
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   private static final String SERVICE = "Mac";
+ 
+   /** The underlying MAC implementation. */
+   private MacSpi macSpi;
+ 
+   /** The provider we got our implementation from. */
+   private Provider provider;
+ 
+   /** The name of the algorithm. */
+   private String algorithm;
+ 
+   /** Whether or not we've been initialized. */
+   private boolean virgin;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new Mac instance.
+    *
+    * @param macSpi    The underlying MAC implementation.
+    * @param provider  The provider of this implementation.
+    * @param algorithm The name of this MAC algorithm.
+    */
+   protected Mac(MacSpi macSpi, Provider provider, String algorithm)
+   {
+     this.macSpi = macSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+     virgin = true;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get an instance of the named algorithm from the first provider with
+    * an appropriate implementation.
+    *
+    * @param algorithm The name of the algorithm.
+    * @return An appropriate Mac instance, if the specified algorithm
+    *         is implemented by a provider.
+    * @throws java.security.NoSuchAlgorithmException If no implementation
+    *         of the named algorithm is installed.
+    */
+   public static final Mac getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] provs = Security.getProviders();
+     String msg = "";
+     for (int i = 0; i < provs.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, provs[i]);
+           }
+         catch (NoSuchAlgorithmException nsae)
+           {
+             msg = nsae.getMessage();
+           }
+       }
+     throw new NoSuchAlgorithmException(msg);
+   }
+ 
+   /**
+    * Get an instance of the named algorithm from the named provider.
+    *
+    * @param algorithm The name of the algorithm.
+    * @param provider  The name of the provider.
+    * @return An appropriate Mac instance, if the specified algorithm is
+    *         implemented by the named provider.
+    * @throws java.security.NoSuchAlgorithmException If the named provider
+    *         has no implementation of the algorithm.
+    * @throws java.security.NoSuchProviderException If the named provider
+    *         does not exist.
+    */
+   public static final Mac 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 named algorithm from a provider.
+    *
+    * @param algorithm The name of the algorithm.
+    * @param provider  The provider.
+    * @return An appropriate Mac instance, if the specified algorithm is
+    *         implemented by the provider.
+    * @throws java.security.NoSuchAlgorithmException If the provider
+    *         has no implementation of the algorithm.
+    */
+   public static final Mac getInstance(String algorithm, Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     try
+       {
+         return new Mac((MacSpi) Engine.getInstance(SERVICE, algorithm, provider),
+                        provider, algorithm);
+       }
+     catch (InvocationTargetException ite)
+       {
+         if (ite.getCause() == null)
+           throw new NoSuchAlgorithmException(algorithm);
+         if (ite.getCause() instanceof NoSuchAlgorithmException)
+           throw (NoSuchAlgorithmException) ite.getCause();
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Finishes the computation of a MAC and returns the digest.
+    *
+    * <p>After this method succeeds, it may be used again as just after a
+    * call to <code>init</code>, and can compute another MAC using the
+    * same key and parameters.
+    *
+    * @return The message authentication code.
+    * @throws java.lang.IllegalStateException If this instnace has not
+    *         been initialized.
+    */
+   public final byte[] doFinal() throws IllegalStateException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     byte[] digest = macSpi.engineDoFinal();
+     reset();
+     return digest;
+   }
+ 
+   /**
+    * Finishes the computation of a MAC with a final byte array (or
+    * computes a MAC over those bytes only) and returns the digest.
+    *
+    * <p>After this method succeeds, it may be used again as just after a
+    * call to <code>init</code>, and can compute another MAC using the
+    * same key and parameters.
+    *
+    * @param input The bytes to add.
+    * @return The message authentication code.
+    * @throws java.lang.IllegalStateException If this instnace has not
+    *         been initialized.
+    */
+   public final byte[] doFinal(byte[] input) throws IllegalStateException
+   {
+     update(input);
+     byte[] digest = macSpi.engineDoFinal();
+     reset();
+     return digest;
+   }
+ 
+   /**
+    * Finishes the computation of a MAC and places the result into the
+    * given array.
+    *
+    * <p>After this method succeeds, it may be used again as just after a
+    * call to <code>init</code>, and can compute another MAC using the
+    * same key and parameters.
+    *
+    * @param output    The destination for the result.
+    * @param outOffset The index in the output array to start.
+    * @return The message authentication code.
+    * @throws java.lang.IllegalStateException If this instnace has not
+    *         been initialized.
+    * @throws javax.crypto.ShortBufferException If <code>output</code> is
+    *         not large enough to hold the result.
+    */
+   public final void doFinal(byte[] output, int outOffset)
+   throws IllegalStateException, ShortBufferException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     if (output.length - outOffset < getMacLength())
+       {
+         throw new ShortBufferException();
+       }
+     byte[] mac = macSpi.engineDoFinal();
+     System.arraycopy(mac, 0, output, outOffset, getMacLength());
+     reset();
+   }
+ 
+   /**
+    * Returns the name of this MAC algorithm.
+    *
+    * @return The MAC name.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Get the size of the MAC. This is the size of the array returned by
+    * {@link #doFinal()} and {@link #doFinal(byte[])}, and the minimum
+    * number of bytes that must be available in the byte array passed to
+    * {@link #doFinal(byte[],int)}.
+    *
+    * @return The MAC length.
+    */
+   public final int getMacLength()
+   {
+     return macSpi.engineGetMacLength();
+   }
+ 
+   /**
+    * Get the provider of the underlying implementation.
+    *
+    * @return The provider.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Initialize this MAC with a key and no parameters.
+    *
+    * @param key The key to initialize this instance with.
+    * @throws java.security.InvalidKeyException If the key is
+    *         unacceptable.
+    */
+   public final void init(Key key) throws InvalidKeyException
+   {
+     try
+       {
+         init(key, null);
+       }
+     catch (InvalidAlgorithmParameterException iape)
+       {
+         throw new IllegalArgumentException(algorithm + " needs parameters");
+       }
+   }
+ 
+   /**
+    * Initialize this MAC with a key and parameters.
+    *
+    * @param key    The key to initialize this instance with.
+    * @param params The algorithm-specific parameters.
+    * @throws java.security.InvalidAlgorithmParameterException If the
+    *         algorithm parameters are unacceptable.
+    * @throws java.security.InvalidKeyException If the key is
+    *         unacceptable.
+    */
+   public final void init(Key key, AlgorithmParameterSpec params)
+     throws InvalidAlgorithmParameterException, InvalidKeyException
+   {
+     macSpi.engineInit(key, params);
+     virgin = false;                      // w00t!
+   }
+ 
+   /**
+    * Reset this instance. A call to this method returns this instance
+    * back to the state it was in just after it was initialized.
+    */
+   public final void reset()
+   {
+     macSpi.engineReset();
+   }
+ 
+   /**
+    * Update the computation with a single byte.
+    *
+    * @param input The next byte.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized.
+    */
+   public final void update(byte input) throws IllegalStateException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     macSpi.engineUpdate(input);
+   }
+ 
+   /**
+    * Update the computation with a byte array.
+    *
+    * @param input The next bytes.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized.
+    */
+   public final void update(byte[] input) throws IllegalStateException
+   {
+     update(input, 0, input.length);
+   }
+ 
+   /**
+    * Update the computation with a portion of a byte array.
+    *
+    * @param input  The next bytes.
+    * @param offset The index in <code>input</code> to start.
+    * @param length The number of bytes to update.
+    * @throws java.lang.IllegalStateException If this instance has not
+    *         been initialized.
+    */
+   public final void update(byte[] input, int offset, int length)
+     throws IllegalStateException
+   {
+     if (virgin)
+       {
+         throw new IllegalStateException("not initialized");
+       }
+     macSpi.engineUpdate(input, offset, length);
+   }
+ 
+   /**
+    * Clone this instance, if the underlying implementation supports it.
+    *
+    * @return A clone of this instance.
+    * @throws java.lang.CloneNotSupportedException If the underlying
+    *         implementation is not cloneable.
+    */
+   public final Object clone() throws CloneNotSupportedException
+   {
+     Mac result = new Mac((MacSpi) macSpi.clone(), provider, algorithm);
+     result.virgin = virgin;
+     return result;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/MacSpi.java gcc-4.0.0/libjava/javax/crypto/MacSpi.java
*** gcc-3.4.3/libjava/javax/crypto/MacSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/MacSpi.java	Thu Sep 30 18:21:42 2004
***************
*** 0 ****
--- 1,145 ----
+ /* MacSpi.java -- The MAC service provider interface.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.InvalidAlgorithmParameterException;
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * This is the <i>Service Provider Interface</i> (<b>SPI</b>) for the
+  * {@link Mac} class.
+  *
+  * <p>Providers wishing to implement a Mac must subclass this class and
+  * provide appropriate implementations of all its abstract methods,
+  * then provide an entry pointing to this implementation in the master
+  * {@link java.security.Provider} class.
+  *
+  * <p>Implementations may optionally implement the {@link
+  * java.lang.Cloneable} interface.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public abstract class MacSpi
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new MacSpi instance.
+    */
+   public MacSpi()
+   {
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns a clone of this instance if cloning is supported.
+    *
+    * @return A clone of this instance.
+    * @throws java.lang.CloneNotSupportedException If this instance does
+    *         not support cloneing.
+    */
+   public Object clone() throws CloneNotSupportedException
+   {
+     return super.clone();
+   }
+ 
+   // Abstract instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Finalize the computation of this MAC and return the result as a
+    * byte array.
+    *
+    * @return The MAC.
+    */
+   protected abstract byte[] engineDoFinal();
+ 
+   /**
+    * Return the total length, in bytes, of the computed MAC (the length
+    * of the byte array returned by {@link #doFinal()}.
+    *
+    * @return The MAC length.
+    */
+   protected abstract int engineGetMacLength();
+ 
+   /**
+    * Initialize (or re-initialize) this instance.
+    *
+    * @param key    The key to use.
+    * @param params The parameters to use.
+    * @throws java.security.InvalidAlgorithmParameterException If this
+    *         instance rejects the specified parameters.
+    * @throws java.security.InvalidKeyException If this instance rejects
+    *         the specified key.
+    */
+   protected abstract void engineInit(Key key, AlgorithmParameterSpec params)
+     throws InvalidAlgorithmParameterException, InvalidKeyException;
+ 
+   /**
+    * Reset this instance. After this method succeeds, the state of this
+    * instance should be the same as it was before any data was input
+    * (possibly after a call to {@link
+    * #init(java.security.Key,java.security.spec.AlgorithmParameterSpec)},
+    * possibly not).
+    */
+   protected abstract void engineReset();
+ 
+   /**
+    * Update this MAC with a single byte.
+    *
+    * @param input The next byte.
+    */
+   protected abstract void engineUpdate(byte input);
+ 
+   /**
+    * Update this MAC with a portion of a byte array.
+    *
+    * @param input  The next bytes.
+    * @param offset The index in <code>input</code> at which to start.
+    * @param length The number of bytes to update.
+    */
+   protected abstract void engineUpdate(byte[] input, int offset, int length);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/NoSuchPaddingException.java gcc-4.0.0/libjava/javax/crypto/NoSuchPaddingException.java
*** gcc-3.4.3/libjava/javax/crypto/NoSuchPaddingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/NoSuchPaddingException.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,71 ----
+ /* NoSuchPaddingException.java -- Signals an unknown padding scheme.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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 when a particular padding scheme is
+  * requested but is not available.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public class NoSuchPaddingException extends GeneralSecurityException
+ {
+ 
+   // Constant.
+   // ------------------------------------------------------------------------
+ 
+   /** Serialization constant. */
+   private static final long serialVersionUID = -4572885201200175466L;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   public NoSuchPaddingException()
+   {
+     super();
+   }
+ 
+   public NoSuchPaddingException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/NullCipher.java gcc-4.0.0/libjava/javax/crypto/NullCipher.java
*** gcc-3.4.3/libjava/javax/crypto/NullCipher.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/NullCipher.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,62 ----
+ /* NullCipher.java -- The identity 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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;
+ 
+ /**
+  * Trivial subclass of Cipher that implements the <i>identity
+  * transformation</i>, where the input is always copied to the output
+  * unchanged. Null ciphers can be instantiated with the public
+  * constructor.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class NullCipher extends Cipher
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new identity cipher.
+    */
+   public NullCipher()
+   {
+     super(new NullCipherImpl(), null, "NULL");
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/NullCipherImpl.java gcc-4.0.0/libjava/javax/crypto/NullCipherImpl.java
*** gcc-3.4.3/libjava/javax/crypto/NullCipherImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/NullCipherImpl.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,127 ----
+ /* NullCipherImpl.java -- implementation of NullCipher.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.AlgorithmParameters;
+ import java.security.Key;
+ import java.security.SecureRandom;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * Implementation of the identity cipher.
+  */
+ final class NullCipherImpl extends CipherSpi
+ {
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   NullCipherImpl()
+   {
+     super();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   protected void engineSetMode(String mode) { }
+   protected void engineSetPadding(String padding) { }
+ 
+   protected int engineGetBlockSize()
+   {
+     return 1;
+   }
+ 
+   protected int engineGetOutputSize(int inputLen)
+   {
+     return inputLen;
+   }
+ 
+   protected byte[] engineGetIV()
+   {
+     return null;
+   }
+ 
+   protected AlgorithmParameters engineGetParameters()
+   {
+     return null;
+   }
+ 
+   protected void engineInit(int mode, Key key, SecureRandom random) { }
+   protected void engineInit(int mode, Key key, AlgorithmParameterSpec spec, SecureRandom random) { }
+   protected void engineInit(int mode, Key key, AlgorithmParameters params, SecureRandom random) { }
+ 
+   protected byte[] engineUpdate(byte[] input, int inputOffset, int inputLen)
+   {
+     if (input == null)
+       return new byte[0];
+     if (inputOffset < 0 || inputLen < 0 || inputOffset + inputLen > input.length)
+       throw new ArrayIndexOutOfBoundsException();
+     byte[] output = new byte[inputLen];
+     System.arraycopy(input, inputOffset, output, 0, inputLen);
+     return output;
+   }
+ 
+   protected int engineUpdate(byte[] input, int inputOffset, int inputLen,
+                              byte[] output, int outputOffset)
+     throws ShortBufferException
+   {
+     if (input == null)
+       return 0;
+     if (inputOffset < 0 || inputLen < 0 || inputOffset + inputLen > input.length
+         || outputOffset < 0)
+       throw new ArrayIndexOutOfBoundsException();
+     if (output.length - outputOffset < inputLen)
+       throw new ShortBufferException();
+     System.arraycopy(input, inputOffset, output, outputOffset, inputLen);
+     return inputLen;
+   }
+ 
+   protected byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen)
+   {
+     return engineUpdate(input, inputOffset, inputLen);
+   }
+ 
+   protected int engineDoFinal(byte[] input, int inputOffset, int inputLen,
+                               byte[] output, int outputOffset)
+     throws ShortBufferException
+   {
+     return engineUpdate(input, inputOffset, inputLen, output, outputOffset);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/SealedObject.java gcc-4.0.0/libjava/javax/crypto/SealedObject.java
*** gcc-3.4.3/libjava/javax/crypto/SealedObject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/SealedObject.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,355 ----
+ /* SealedObject.java -- An encrypted Serializable 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ import java.security.AlgorithmParameters;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.InvalidKeyException;
+ import java.security.Key;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ 
+ /**
+  * This class allows any {@link java.io.Serializable} object to be
+  * stored in an encrypted form.
+  *
+  * <p>When the sealed object is ready to be unsealed (and deserialized)
+  * the caller may use either
+  *
+  * <ol>
+  * <li>{@link #getObject(javax.crypto.Cipher)}, which uses an
+  * already-initialized {@link javax.crypto.Cipher}.<br>
+  * <br>
+  * or,</li>
+  *
+  * <li>{@link #getObject(java.security.Key)} or {@link
+  * #getObject(java.security.Key,java.lang.String)}, which will
+  * initialize a new cipher instance with the {@link #encodedParams} that
+  * were stored with this sealed object (this is so parameters, such as
+  * the IV, don't need to be known by the one unsealing the object).</li>
+  * </ol>
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public class SealedObject implements Serializable
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The encoded algorithm parameters. */
+   protected byte[] encodedParams;
+ 
+   /** The serialized, encrypted object. */
+   private byte[] encryptedContent;
+ 
+   /** The algorithm used to seal the object. */
+   private String sealAlg;
+ 
+   /** The parameter type. */
+   private String paramsAlg;
+ 
+   /** The cipher that decrypts when this object is unsealed. */
+   private transient Cipher sealCipher;
+ 
+   /** Compatible with JDK1.4. */
+   private static final long serialVersionUID = 4482838265551344752L;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new sealed object from a {@link java.io.Serializable}
+    * object and a cipher.
+    *
+    * @param object The object to seal.
+    * @param cipher The cipher to encrypt with.
+    * @throws java.io.IOException If serializing the object fails.
+    * @throws javax.crypto.IllegalBlockSizeException If the cipher has no
+    *         padding and the size of the serialized representation of the
+    *         object is not a multiple of the cipher's block size.
+    */
+   public SealedObject(Serializable object, Cipher cipher)
+     throws IOException, IllegalBlockSizeException
+   {
+     ByteArrayOutputStream baos = new ByteArrayOutputStream();
+     ObjectOutputStream oos = new ObjectOutputStream(baos);
+     oos.writeObject(object);
+     oos.flush();
+     try
+       {
+         encryptedContent = cipher.doFinal(baos.toByteArray());
+       }
+     catch (IllegalStateException ise)
+       {
+         throw new IOException("cipher not in proper state");
+       }
+     catch (BadPaddingException bpe)
+       {
+         throw new IOException(
+           "encrypting but got javax.crypto.BadPaddingException");
+       }
+     sealAlg = cipher.getAlgorithm();
+     encodedParams = cipher.getParameters().getEncoded();
+     paramsAlg = cipher.getParameters().getAlgorithm();
+   }
+ 
+   /**
+    * Create a new sealed object from another sealed object.
+    *
+    * @param so The other sealed object.
+    */
+   protected SealedObject(SealedObject so)
+   {
+     this.encodedParams = (byte[]) so.encodedParams.clone();
+     this.encryptedContent = (byte[]) so.encryptedContent.clone();
+     this.sealAlg = so.sealAlg;
+     this.paramsAlg = so.paramsAlg;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the name of the algorithm used to seal this object.
+    *
+    * @return The algorithm's name.
+    */
+   public final String getAlgorithm()
+   {
+     return sealAlg;
+   }
+ 
+   /**
+    * Unseal and deserialize this sealed object with a specified (already
+    * initialized) cipher.
+    *
+    * @param cipher The cipher to decrypt with.
+    * @return The original object.
+    * @throws java.io.IOException If reading fails.
+    * @throws java.lang.ClassNotFoundException If deserialization fails.
+    * @throws javax.crypto.IllegalBlockSizeException If the cipher has no
+    *         padding and the encrypted data is not a multiple of the
+    *         cipher's block size.
+    * @throws javax.crypto.BadPaddingException If the padding bytes are
+    *         incorrect.
+    */
+   public final Object getObject(Cipher cipher)
+     throws IOException, ClassNotFoundException, IllegalBlockSizeException,
+            BadPaddingException
+   {
+     sealCipher = cipher;
+     return unseal();
+   }
+ 
+   /**
+    * Unseal and deserialize this sealed object with the specified key.
+    *
+    * @param key The key to decrypt with.
+    * @return The original object.
+    * @throws java.io.IOException If reading fails.
+    * @throws java.lang.ClassNotFoundException If deserialization fails.
+    * @throws java.security.InvalidKeyException If the supplied key
+    *         cannot be used to unseal this object.
+    * @throws java.security.NoSuchAlgorithmException If the algorithm
+    *         used to originally seal this object is not available.
+    */
+   public final Object getObject(Key key)
+     throws IOException, ClassNotFoundException, InvalidKeyException,
+            NoSuchAlgorithmException
+   {
+     try
+       {
+         if (sealCipher == null)
+           sealCipher = Cipher.getInstance(sealAlg);
+       }
+     catch (NoSuchPaddingException nspe)
+       {
+         throw new NoSuchAlgorithmException(nspe.getMessage());
+       }
+     AlgorithmParameters params = null;
+     if (encodedParams != null)
+       {
+         params = AlgorithmParameters.getInstance(paramsAlg);
+         params.init(encodedParams);
+       }
+     try
+       {
+         sealCipher.init(Cipher.DECRYPT_MODE, key, params);
+         return unseal();
+       }
+     catch (InvalidAlgorithmParameterException iape)
+       {
+         throw new IOException("bad parameters");
+       }
+     catch (IllegalBlockSizeException ibse)
+       {
+         throw new IOException("illegal block size");
+       }
+     catch (BadPaddingException bpe)
+       {
+         throw new IOException("bad padding");
+       }
+   }
+ 
+   /**
+    * Unseal and deserialize this sealed object with the specified key,
+    * using a cipher from the named provider.
+    *
+    * @param key      The key to decrypt with.
+    * @param provider The name of the provider to use.
+    * @return The original object.
+    * @throws java.io.IOException If reading fails.
+    * @throws java.lang.ClassNotFoundException If deserialization fails.
+    * @throws java.security.InvalidKeyException If the supplied key
+    *         cannot be used to unseal this object.
+    * @throws java.security.NoSuchAlgorithmException If the algorithm
+    *         used to originally seal this object is not available from
+    *         the named provider.
+    * @throws java.security.NoSuchProviderException If the named provider
+    *         does not exist.
+    */
+   public final Object getObject(Key key, String provider)
+     throws IOException, ClassNotFoundException, InvalidKeyException,
+            NoSuchAlgorithmException, NoSuchProviderException
+   {
+     try
+       {
+         sealCipher = Cipher.getInstance(sealAlg, provider);
+       }
+     catch (NoSuchPaddingException nspe)
+       {
+         throw new NoSuchAlgorithmException(nspe.getMessage());
+       }
+     AlgorithmParameters params = null;
+     if (encodedParams != null)
+       {
+         params = AlgorithmParameters.getInstance(paramsAlg, provider);
+         params.init(encodedParams);
+       }
+     try
+       {
+         sealCipher.init(Cipher.DECRYPT_MODE, key, params);
+         return unseal();
+       }
+     catch (InvalidAlgorithmParameterException iape)
+       {
+         throw new IOException("bad parameters");
+       }
+     catch (IllegalBlockSizeException ibse)
+       {
+         throw new IOException("illegal block size");
+       }
+     catch (BadPaddingException bpe)
+       {
+         throw new IOException("bad padding");
+       }
+   }
+ 
+   // Own methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Deserialize this object.
+    *
+    * @param ois The input stream.
+    * @throws java.io.IOException If reading fails.
+    * @throws java.lang.ClassNotFoundException If reading fails.
+    */
+   private void readObject(ObjectInputStream ois)
+     throws IOException, ClassNotFoundException
+   {
+     encodedParams = (byte[]) ois.readObject();
+     encryptedContent = (byte[]) ois.readObject();
+     sealAlg = (String) ois.readObject();
+     paramsAlg = (String) ois.readObject();
+   }
+ 
+   /**
+    * Serialize this object.
+    *
+    * @param oos The output stream.
+    * @throws java.io.IOException If writing fails.
+    */
+   private void writeObject(ObjectOutputStream oos)
+     throws IOException
+   {
+     oos.writeObject(encodedParams);
+     oos.writeObject(encryptedContent);
+     oos.writeObject(sealAlg);
+     oos.writeObject(paramsAlg);
+   }
+ 
+   /**
+    * Unseal this object, returning it.
+    *
+    * @return The unsealed, deserialized Object.
+    * @throws java.io.IOException If reading fails.
+    * @throws java.io.ClassNotFoundException If reading fails.
+    * @throws javax.crypto.IllegalBlockSizeException If the cipher has no
+    *         padding and the encrypted data is not a multiple of the
+    *         cipher's block size.
+    * @throws javax.crypto.BadPaddingException If the padding bytes are
+    *         incorrect.
+    */
+   private Object unseal()
+     throws IOException, ClassNotFoundException, IllegalBlockSizeException,
+            BadPaddingException
+   {
+     ByteArrayInputStream bais = null;
+     try
+       {
+         bais = new ByteArrayInputStream(sealCipher.doFinal(encryptedContent));
+       }
+     catch (IllegalStateException ise)
+       {
+         throw new IOException("cipher not initialized");
+       }
+     ObjectInputStream ois = new ObjectInputStream(bais);
+     return ois.readObject();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/SecretKey.java gcc-4.0.0/libjava/javax/crypto/SecretKey.java
*** gcc-3.4.3/libjava/javax/crypto/SecretKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/SecretKey.java	Tue Feb 22 18:58:53 2005
***************
*** 0 ****
--- 1,65 ----
+ /* SecretKey.java -- A key for symmetric cryptography.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.Key;
+ 
+ /**
+  * A secret key for symmetric cryptography.
+  *
+  * <p>This interface defines no new methods over {@link
+  * java.security.Key}, but rather is intended to be a <i>marker
+  * interface</i> and to provide type safety for secret keys.</p>
+  *
+  * <p>The format of secret keys should be <code>RAW</code>, as returned
+  * by {@link java.security.Key#getFormat()}.</p>
+  *
+  * <p>Concrete implementations of this interface should override the
+  * {@link java.lang.Object#equals} and {@link java.lang.Object#hashCode}
+  * methods of {@link java.lang.Object} to use the actual key data rather
+  * than the identity-based default methods.</p>
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @see javax.crypto.SecretKeyFactory
+  * @see javax.crypto.Cipher
+  */
+ public interface SecretKey extends Key
+ {
+   long serialVersionUID = -4795878709595146952L;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/SecretKeyFactory.java gcc-4.0.0/libjava/javax/crypto/SecretKeyFactory.java
*** gcc-3.4.3/libjava/javax/crypto/SecretKeyFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/SecretKeyFactory.java	Thu Oct 21 20:38:29 2004
***************
*** 0 ****
--- 1,247 ----
+ /* SecretKeyFactory.java -- Factory for creating secret keys.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.lang.reflect.InvocationTargetException;
+ import java.security.InvalidKeyException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.Provider;
+ import java.security.Security;
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * A secret key factory translates {@link SecretKey} objects to and from
+  * {@link java.security.spec.KeySpec} objects, and can translate between
+  * different vendors' representations of {@link SecretKey} objects (for
+  * security or semantics; whichever applies).
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see SecretKey
+  */
+ public class SecretKeyFactory
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   private static final String SERVICE = "SecretKeyFactory";
+ 
+   /** The underlying factory implementation. */
+   private SecretKeyFactorySpi skfSpi;
+ 
+   /** The provider of the implementation. */
+   private Provider provider;
+ 
+   /** The name of the algorithm. */
+   private String algorithm;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new secret key factory.
+    *
+    * @param skfSpi   The underlying factory implementation.
+    * @param provider The provider.
+    * @param algorithm The algorithm name.
+    */
+   protected SecretKeyFactory(SecretKeyFactorySpi skfSpi, Provider provider,
+                              String algorithm)
+   {
+     this.skfSpi = skfSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new secret key factory from the first appropriate
+    * instance.
+    *
+    * @param algorithm The algorithm name.
+    * @return The appropriate key factory, if found.
+    * @throws java.security.NoSuchAlgorithmException If no provider
+    *         implements the specified algorithm.
+    */
+   public static final SecretKeyFactory getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] provs = Security.getProviders();
+     for (int i = 0; i < provs.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, provs[i]);
+           }
+         catch (NoSuchAlgorithmException nsae)
+           {
+           }
+       }
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Create a new secret key factory from the named provider.
+    *
+    * @param algorithm The algorithm name.
+    * @param provider  The provider name.
+    * @return The appropriate key factory, if found.
+    * @throws java.security.NoSuchAlgorithmException If the named
+    *         provider does not implement the algorithm.
+    * @throws java.security.NoSuchProviderException If the named provider
+    *         does not exist.
+    */
+   public static final SecretKeyFactory getInstance(String algorithm,
+                                                    String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       {
+         throw new NoSuchProviderException(provider);
+       }
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Create a new secret key factory from the specified provider.
+    *
+    * @param algorithm The algorithm name.
+    * @param provider  The provider.
+    * @return The appropriate key factory, if found.
+    * @throws java.security.NoSuchAlgorithmException If the provider
+    *         does not implement the algorithm.
+    */
+   public static final SecretKeyFactory getInstance(String algorithm,
+                                                    Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     try
+       {
+         return new SecretKeyFactory((SecretKeyFactorySpi)
+           Engine.getInstance(SERVICE, algorithm, provider),
+           provider, algorithm);
+       }
+     catch (InvocationTargetException ite)
+       {
+         if (ite.getCause() == null)
+           throw new NoSuchAlgorithmException(algorithm);
+         if (ite.getCause() instanceof NoSuchAlgorithmException)
+           throw (NoSuchAlgorithmException) ite.getCause();
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Generate a secret key from a key specification, if possible.
+    *
+    * @param keySpec The key specification.
+    * @return The secret key.
+    * @throws java.security.InvalidKeySpecException If the key specification
+    *         cannot be transformed into a secret key.
+    */
+   public final SecretKey generateSecret(KeySpec keySpec)
+     throws InvalidKeySpecException
+   {
+     return skfSpi.engineGenerateSecret(keySpec);
+   }
+ 
+   /**
+    * Get the algorithm name.
+    *
+    * @return The algorithm name.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Get the key specification from a secret key.
+    *
+    * @param key     The secret key.
+    * @param keySpec The target key specification class.
+    * @return The key specification.
+    * @throws java.security.spec.InvalidKeySpecException If the secret key cannot
+    *         be transformed into the specified key specification.
+    */
+   public final KeySpec getKeySpec(SecretKey key, Class keySpec)
+     throws InvalidKeySpecException
+   {
+     return skfSpi.engineGetKeySpec(key, keySpec);
+   }
+ 
+   /**
+    * Get the provider of this implementation.
+    *
+    * @return The provider.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Translate a secret key into another form.
+    *
+    * @param key The key to translate.
+    * @return The translated key.
+    * @throws java.security.InvalidKeyException If the argument cannot be
+    *         translated.
+    */
+   public final SecretKey translateKey(SecretKey key)
+     throws InvalidKeyException
+   {
+     return skfSpi.engineTranslateKey(key);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/SecretKeyFactorySpi.java gcc-4.0.0/libjava/javax/crypto/SecretKeyFactorySpi.java
*** gcc-3.4.3/libjava/javax/crypto/SecretKeyFactorySpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/SecretKeyFactorySpi.java	Thu Oct 21 20:38:29 2004
***************
*** 0 ****
--- 1,108 ----
+ /* SecretKeyFactorySpi.java -- Secret key factory service provider interface.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.InvalidKeyException;
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * The <i>Service Provider Interface</i> (<b>SPI</b>) for the {@link
+  * SecretKeyFactory} class.
+  *
+  * <p>Providers wishing to implement a secret key factory must
+  * subclass this and provide an appropriate implementation for all the
+  * abstract methods below, and provide an appropriate entry in the
+  * master {@link java.security.Provider} class (the service name for
+  * secret key factories is <code>"SecretKeyFactory"</code>).
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see SecretKeyFactory
+  */
+ public abstract class SecretKeyFactorySpi
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new secret key factory SPI.
+    */
+   public SecretKeyFactorySpi()
+   {
+   }
+ 
+   // Abstract instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Translate a {@link java.security.KeySpec} into a {@link SecretKey}.
+    *
+    * @param keySpec The key specification.
+    * @return The secret key.
+    * @throws java.security.spec.InvalidKeySpecException If the key specification
+    *         cannot be translated into a secret key.
+    */
+   protected abstract SecretKey engineGenerateSecret(KeySpec keySpec)
+     throws InvalidKeySpecException;
+ 
+   /**
+    * Translate a {@link SecretKey} into a {@link java.security.KeySpec}.
+    *
+    * @param key     The secret key.
+    * @param keySpec The desired key specification class.
+    * @return The key specification.
+    * @throws java.security.spec.InvalidKeySpecException If the secret key cannot
+    *         be translated into the desired key specification.
+    */
+   protected abstract KeySpec engineGetKeySpec(SecretKey key, Class keySpec)
+     throws InvalidKeySpecException;
+ 
+   /**
+    * Translate a secret key into a different representation.
+    *
+    * @param key The secret key to translate.
+    * @return The translated key.
+    * @throws java.security.InvalidKeyException If the specified secret
+    *         key cannot be translated.
+    */
+   protected abstract SecretKey engineTranslateKey(SecretKey key)
+     throws InvalidKeyException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/ShortBufferException.java gcc-4.0.0/libjava/javax/crypto/ShortBufferException.java
*** gcc-3.4.3/libjava/javax/crypto/ShortBufferException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/ShortBufferException.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,70 ----
+ /* ShortBufferException.java -- Signals a short output buffer.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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 on an attempt to transform bytes into a
+  * buffer that is too short to contain the data.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class ShortBufferException extends GeneralSecurityException
+ {
+ 
+   // Constant.
+   // ------------------------------------------------------------------------
+ 
+   /** Serialization constant. */
+   private static final long serialVersionUID = 8427718640832943747L;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   public ShortBufferException()
+   {
+     super();
+   }
+ 
+   public ShortBufferException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/interfaces/DHKey.java gcc-4.0.0/libjava/javax/crypto/interfaces/DHKey.java
*** gcc-3.4.3/libjava/javax/crypto/interfaces/DHKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/interfaces/DHKey.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,61 ----
+ /* DHKey.java -- General interface for a Diffie-Hellman 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.interfaces;
+ 
+ import javax.crypto.spec.DHParameterSpec;
+ 
+ /**
+  * This interface marks public/private keys in the Diffie-Hellman key
+  * exchange algorithm. Implementations of Diffie-Hellman keys should
+  * implement this interface, and applications can safely cast keys that
+  * are known to be Diffie-Hellman keys to this interface.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public interface DHKey
+ {
+   /**
+    * Returns the Diffie-Hellman parameters for this key, which includes
+    * the generator and the prime.
+    *
+    * @return The Diffie-Hellman parameters.
+    */
+   DHParameterSpec getParams();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/interfaces/DHPrivateKey.java gcc-4.0.0/libjava/javax/crypto/interfaces/DHPrivateKey.java
*** gcc-3.4.3/libjava/javax/crypto/interfaces/DHPrivateKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/interfaces/DHPrivateKey.java	Fri Oct 22 17:14:28 2004
***************
*** 0 ****
--- 1,69 ----
+ /* DHPrivateKey.java -- A Diffie-Hellman 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.interfaces;
+ 
+ import java.math.BigInteger;
+ import java.security.PrivateKey;
+ 
+ /**
+  * This interface marks a private key in the Diffie-Hellman key exchange
+  * algorithm. It should be treated with as much care as any {@link
+  * java.security.PrivateKey}.
+  *
+  * <p>Implementations of Diffie-Hellman private keys should implement
+  * this interface. Applications that know a particular key is a
+  * Diffie-Hellman private key can safely cast it to this interface.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see DHKey
+  * @see DHPublicKey
+  */
+ public interface DHPrivateKey extends DHKey, PrivateKey
+ {
+   /** Compatible with JDK1.4. */
+   long serialVersionUID = 2211791113380396553L;
+ 
+   /**
+    * Returns the private value <i>x</i>.
+    *
+    * @return The private value <i>x</i>.
+    */
+   BigInteger getX();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/interfaces/DHPublicKey.java gcc-4.0.0/libjava/javax/crypto/interfaces/DHPublicKey.java
*** gcc-3.4.3/libjava/javax/crypto/interfaces/DHPublicKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/interfaces/DHPublicKey.java	Fri Oct 22 17:14:28 2004
***************
*** 0 ****
--- 1,68 ----
+ /* DHPublicKey.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.interfaces;
+ 
+ import java.math.BigInteger;
+ import java.security.PublicKey;
+ 
+ /**
+  * This interface marks a public key in the Diffie-Hellman key-exchange
+  * algorithm.
+  *
+  * <p>Implementations of Diffie-Hellman public keys should implement
+  * this interface. Applications that know that a particular key is a
+  * Diffie-Hellman public key it can be safely cast to this interface.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see DHKey
+  * @see DHPrivateKey
+  */
+ public interface DHPublicKey extends DHKey, PublicKey
+ {
+   /** Compatible with JDK1.4. */
+   long serialVersionUID = -6628103563352519193L;
+ 
+   /**
+    * Get the public value <i>y</i>.
+    *
+    * @return The public value <i>y</i>.
+    */
+   BigInteger getY();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/interfaces/PBEKey.java gcc-4.0.0/libjava/javax/crypto/interfaces/PBEKey.java
*** gcc-3.4.3/libjava/javax/crypto/interfaces/PBEKey.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/interfaces/PBEKey.java	Fri Oct 22 17:14:28 2004
***************
*** 0 ****
--- 1,90 ----
+ /* PBEKey.java -- A key derived from a password.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.interfaces;
+ 
+ import javax.crypto.SecretKey;
+ 
+ /**
+  * Interface to a password-derived key for password-based encryption
+  * (PBE). Applications working with a {@link javax.crypto.SecretKey}
+  * that is known to be a password-based key can safely cast such keys to
+  * this interface.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public interface PBEKey extends SecretKey
+ {
+   /** Compatible with JDK1.4. */
+   long serialVersionUID = -1430015993304333921L;
+ 
+   /**
+    * Retruns the iteration count, or 0 if not specified.
+    *
+    * @return The iteration count.
+    */
+   int getIterationCount();
+ 
+   /**
+    * Returns a copy of the password as a character array. It is the
+    * caller's responsibility to zero-out the password when it is no
+    * longer in use.
+    *
+    * <p>Although it is not specified in the documentation,
+    * implementations should not copy or clone the password array, but
+    * rather return the reference to the array itself, so the caller has
+    * the ability to erase the password.
+    *
+    * @return The password.
+    */
+   char[] getPassword();
+ 
+   /**
+    * Returns a copy of the salt. It is the caller's responsibility to
+    * zero-out the salt when it is no longer in use.
+    *
+    * <p>Although it is not specified in the documentation,
+    * implementations should not copy or clone the salt array, but
+    * rather return the reference to the array itself, so the caller has
+    * the ability to erase the salt.
+    *
+    * @return The salt.
+    */
+   byte[] getSalt();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/DESKeySpec.java gcc-4.0.0/libjava/javax/crypto/spec/DESKeySpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/DESKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/DESKeySpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,220 ----
+ /* DESKeySpec -- Keys for DES.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.security.InvalidKeyException;
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * This class is a transparent wrapper for DES keys, which are arrays
+  * of 8 bytes.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public class DESKeySpec implements KeySpec
+ {
+ 
+   // Constants.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * The length of a DES key, in bytes.
+    */
+   public static final int DES_KEY_LEN = 8;
+ 
+   /**
+    * The key bytes.
+    */
+   private byte[] key;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new DES key spec, copying the first 8 bytes from the
+    * byte array.
+    *
+    * @param key The key bytes.
+    * @throws java.security.InvalidKeyException If there are less than 8
+    *         bytes in the array.
+    */
+   public DESKeySpec(byte[] key) throws InvalidKeyException
+   {
+     this(key, 0);
+   }
+ 
+   /**
+    * Create a new DES key spec, starting at <code>offset</code> in
+    * the byte array. The first 8 bytes starting at <code>offset</code>
+    * are copied.
+    *
+    * @param key    The key bytes.
+    * @param offset The offset into the byte array at which to begin.
+    * @throws java.security.InvalidKeyException If there are less than 8
+    *         bytes starting at <code>offset</code>.
+    */
+   public DESKeySpec(byte[] key, int offset) throws InvalidKeyException
+   {
+     if (key.length - offset < DES_KEY_LEN)
+       {
+         throw new InvalidKeyException("DES keys must be 8 bytes long");
+       }
+     this.key = new byte[DES_KEY_LEN];
+     System.arraycopy(key, offset, this.key, 0, DES_KEY_LEN);
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns whether or not the given key is <i>parity adjusted</i>;
+    * i.e. every byte in the key has an odd number of "1" bits.
+    *
+    * @param key    The key bytes, considered between <code>[offset,
+    *               offset+7]</code>
+    * @param offset The offset into the byte array at which to begin.
+    * @return True if all bytes have an odd number of "1" bits.
+    * @throws java.security.InvalidKeyException If there are not enough
+    *         bytes in the array.
+    */
+   public static boolean isParityAdjusted(byte[] key, int offset)
+     throws InvalidKeyException
+   {
+     if (key.length - offset < DES_KEY_LEN)
+       {
+         throw new InvalidKeyException("DES keys must be 8 bytes long");
+       }
+     boolean parity = false;
+     boolean oddbits = false;
+     for (int i = 0; i < DES_KEY_LEN; i++)
+       {
+         oddbits = false;
+         for (int j = 0; j < 8; j++)
+           {
+             oddbits ^= (key[i+offset] & 1 << j) != 0;
+           }
+         parity &= oddbits;
+       }
+     return parity;
+   }
+ 
+   /**
+    * One-half of the weak and semiweak DES keys (the other half are the
+    * complements of these).
+    */
+   private static final byte[][] WEAK_KEYS = new byte[][] {
+     {   0,   0,   0,   0,   0,   0,   0,   0 }, // 0000 0000 0000 0000
+     {  -1,  -1,  -1,  -1,   0,   0,   0,   0 }, // ffff ffff 0000 0000
+     {   1,   1,   1,   1,   1,   1,   1,   1 }, // 0101 0101 0101 0101
+     {  31,  31,  31,  31,  14,  14,  14,  14 }, // 1f1f 1f1f 0e0e 0e0e
+     {   1,  -2,   1,  -2,   1,  -2,   1,  -2 }, // 01fe 01fe 01fe 01fe
+     {  31, -32,  31, -32, -32,  31, -32,  31 }, // 1fe0 1fe0 0e1f 0e1f
+     {   1, -32,   1, -32,   1, -15,   1, -15 }, // 01e0 01e0 01f1 01f1
+     {  31,  -2,  31,  -2,  14,  -2,  14,  -2 }, // 1ffe 1ffe 0efe 0efe
+     {   1,  31,   1,  31,   1,  14,   1,  14 }, // 011f 011f 010e 010e
+     { -32,  -2, -32,  -2, -15,  -2, -15,  -2 }, // e0fe e0fe f1fe f1fe
+   };
+ 
+   /**
+    * Tests if the bytes between <code>[offset, offset+7]</code>
+    * constitute a weak or semi-weak DES key.
+    *
+    * @param key    The key bytes to check.
+    * @param offset The offset in the byte array to start.
+    * @return true If the key bytes are a weak key.
+    */
+   public static boolean isWeak(byte[] key, int offset)
+     throws InvalidKeyException
+   {
+     if (key.length - offset < DES_KEY_LEN)
+       {
+         throw new InvalidKeyException("DES keys must be 8 bytes long");
+       }
+     for (int i = 0; i < WEAK_KEYS.length; i++)
+       {
+         if (equalsOrComplementEquals(key, offset, WEAK_KEYS[i]))
+           {
+             return true;
+           }
+       }
+     return false;
+   }
+ 
+   /**
+    * This method returns true if the first 8 bytes starting at
+    * <code>off</code> in <code>a</code> equal the first 8 bytes in
+    * <code>b</code>, or equal the <i>complement</i> of the first 8 bytes
+    * in <code>b</code>.
+    *
+    * @param a   The first byte array.
+    * @param off The index into the first byte array.
+    * @param b   The second byte array.
+    * @return <code>a == b || a == ~b</code>
+    */
+   private static boolean equalsOrComplementEquals(byte[] a, int off, byte[] b)
+   {
+     boolean result = true;
+     for (int i = 0; i < DES_KEY_LEN; i++)
+       {
+         result &= a[off+i] == b[i];
+       }
+     if (result) return true;
+     result = true;
+     for (int i = 0; i < DES_KEY_LEN; i++)
+       {
+         result &= a[off+i] == (~b[i]);
+       }
+     return result;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the key as a byte array. This method does not copy the byte
+    * array.
+    *
+    * @return The key bytes.
+    */
+   public byte[] getKey()
+   {
+     return key;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/DESedeKeySpec.java gcc-4.0.0/libjava/javax/crypto/spec/DESedeKeySpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/DESedeKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/DESedeKeySpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,151 ----
+ /* DESedeKeySpec.java -- Keys for triple-DES.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.security.InvalidKeyException;
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * This class is a transparent wrapper for DES-EDE (Triple-DES) keys,
+  * which are arrays of 24 bytes.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public class DESedeKeySpec implements KeySpec
+ {
+ 
+   // Constants.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * The length of a triple-DES key, in bytes.
+    */
+   public static final int DES_EDE_KEY_LEN = 24;
+ 
+   /**
+    * The key bytes.
+    */
+   private byte[] key;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new DES-EDE key spec, copying the first 24 bytes from the
+    * byte array.
+    *
+    * @param key The key bytes.
+    * @throws java.security.InvalidKeyException If there are less than 24
+    *         bytes in the array.
+    */
+   public DESedeKeySpec(byte[] key) throws InvalidKeyException
+   {
+     this(key, 0);
+   }
+ 
+   /**
+    * Create a new DES-EDE key spec, starting at <code>offset</code> in
+    * the byte array. The first 24 bytes starting at <code>offset</code>
+    * are copied.
+    *
+    * @param key    The key bytes.
+    * @param offset The offset into the byte array at which to begin.
+    * @throws java.security.InvalidKeyException If there are less than 24
+    *         bytes starting at <code>offset</code>.
+    */
+   public DESedeKeySpec(byte[] key, int offset) throws InvalidKeyException
+   {
+     if (key.length - offset < DES_EDE_KEY_LEN)
+       {
+         throw new InvalidKeyException("DES-EDE keys must be 24 bytes long");
+       }
+     this.key = new byte[DES_EDE_KEY_LEN];
+     System.arraycopy(key, offset, this.key, 0, DES_EDE_KEY_LEN);
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns whether or not the given key is <i>parity adjusted</i>;
+    * i.e. every byte in the key has an odd number of "1" bits.
+    *
+    * @param key    The key bytes, considered between <code>[offset,
+    *               offset+23]</code>
+    * @param offset The offset into the byte array at which to begin.
+    * @return True if all bytes have an odd number of "1" bits.
+    * @throws java.security.InvalidKeyException If there are not enough
+    *         bytes in the array.
+    */
+   public static boolean isParityAdjusted(byte[] key, int offset)
+     throws InvalidKeyException
+   {
+     if (key.length - offset < DES_EDE_KEY_LEN)
+       {
+         throw new InvalidKeyException("DES-EDE keys must be 24 bytes long");
+       }
+     boolean parity = false;
+     boolean oddbits = false;
+     for (int i = 0; i < DES_EDE_KEY_LEN; i++)
+       {
+         oddbits = false;
+         for (int j = 0; j < 8; j++)
+           {
+             oddbits ^= (key[i+offset] & 1 << j) != 0;
+           }
+         parity &= oddbits;
+       }
+     return parity;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the key as a byte array. This method does not copy the byte
+    * array.
+    *
+    * @return The key bytes.
+    */
+   public byte[] getKey()
+   {
+     return key;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/DHGenParameterSpec.java gcc-4.0.0/libjava/javax/crypto/spec/DHGenParameterSpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/DHGenParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/DHGenParameterSpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,100 ----
+ /* DHGenParameterSpec.java -- Diffie-Hellman parameter generator spec.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * This class represents the parameters needed for generating
+  * Diffie-Hellman parameters.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see DHParameterSpec
+  */
+ public class DHGenParameterSpec implements AlgorithmParameterSpec
+ {
+ 
+   // Variables.
+   // ------------------------------------------------------------------------
+ 
+   /** The length of the prime, in bits. */
+   private int primeSize;
+ 
+   /** The length of the exponent, in bits. */
+   private int exponentSize;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new Diffie-Hellman parameter generator spec.
+    *
+    * @param primeSize The size of the prime, in bits.
+    * @param exponentSize The size of the exponent, in bits.
+    */
+   public DHGenParameterSpec(int primeSize, int exponentSize)
+   {
+     this.primeSize = primeSize;
+     this.exponentSize = exponentSize;
+   }
+ 
+   // Intance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the size of the exponent, in bits.
+    *
+    * @return The exponent size.
+    */
+   public int getExponentSize()
+   {
+     return exponentSize;
+   }
+ 
+   /**
+    * Get the size of the prime, in bits.
+    *
+    * @return The prime size.
+    */
+   public int getPrimeSize()
+   {
+     return primeSize;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/DHParameterSpec.java gcc-4.0.0/libjava/javax/crypto/spec/DHParameterSpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/DHParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/DHParameterSpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,135 ----
+ /* DHParameterSpec.java -- Parameters for Diffie-Hellman keys.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.math.BigInteger;
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * The base set of parameters necessary to perform Diffie-Hellman key
+  * exchange. Each party in the key exchange shares these parameters.
+  *
+  * <p>Each set of parameters consists of a <i>base generator</i>
+  * <code>g</code>, a <i>prime modulus</i> <code>p</code>, and an
+  * optional length, in bits, of the private exponent.
+  *
+  * <p>See <a href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-3/">PKCS
+  * #3 - Diffie-Hellman Key Agreement Standard</a> for more information.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see javax.crypto.KeyAgreement
+  */
+ public class DHParameterSpec implements AlgorithmParameterSpec
+ {
+ 
+   // Variables.
+   // ------------------------------------------------------------------------
+ 
+   /** The base generator g. */
+   private BigInteger g;
+ 
+   /** The prime modulus p. */
+   private BigInteger p;
+ 
+   /** The length, in bits, of the private exponent. */
+   private int l;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new set of Diffie-Hellman parameters.
+    *
+    * @param p The prime modulus.
+    * @param g The base generator.
+    */
+   public DHParameterSpec(BigInteger p, BigInteger g)
+   {
+     this(p, g, 0);
+   }
+ 
+   /**
+    * Create a new set of Diffie-Hellman parameters.
+    *
+    * @param p The prime modulus.
+    * @param g The base generator.
+    * @param l The size of the private exponent, in bits.
+    */
+   public DHParameterSpec(BigInteger p, BigInteger g, int l)
+   {
+     this.p = p;
+     this.g = g;
+     this.l = l;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the base generator, <i>g</i>.
+    *
+    * @return The base generator <i>g</i>.
+    */
+   public BigInteger getG()
+   {
+     return g;
+   }
+ 
+   /**
+    * Get the length of the private exponent, in bits.
+    *
+    * @return The length of the private exponent, in bits, or 0 if this
+    *         has not been explicitly set.
+    */
+   public int getL()
+   {
+     return l;
+   }
+ 
+   /**
+    * Get the prime modulus, <i>p</i>.
+    *
+    * @return The prime modulus, <i>p</i>.
+    */
+   public BigInteger getP()
+   {
+     return p;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/DHPrivateKeySpec.java gcc-4.0.0/libjava/javax/crypto/spec/DHPrivateKeySpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/DHPrivateKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/DHPrivateKeySpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,115 ----
+ /* DHPrivateKeySpec.java -- Wrapper for Diffie-Hellman private keys.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.math.BigInteger;
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * A wrapper for Diffie-Hellman private key data.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see DHPublicKeySpec
+  */
+ public class DHPrivateKeySpec implements KeySpec
+ {
+ 
+   // Variables.
+   // ------------------------------------------------------------------------
+ 
+   /** The base generator. */
+   private BigInteger g;
+ 
+   /** The prime modulus. */
+   private BigInteger p;
+ 
+   /** The private exponent. */
+   private BigInteger x;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new Diffie-Hellman private key spec.
+    *
+    * @param x The private exponent.
+    * @param p The prime modulus.
+    * @param g The base generator.
+    */
+   public DHPrivateKeySpec(BigInteger x, BigInteger p, BigInteger g)
+   {
+     this.x = x;
+     this.p = p;
+     this.g = g;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the base generator.
+    *
+    * @return The base generator.
+    */
+   public BigInteger getG()
+   {
+     return g;
+   }
+ 
+   /**
+    * Get the prime modulus.
+    *
+    * @return The prime modulus.
+    */
+   public BigInteger getP()
+   {
+     return p;
+   }
+ 
+   /**
+    * Get the private exponent.
+    *
+    * @return The private exponent.
+    */
+   public BigInteger getX()
+   {
+     return x;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/DHPublicKeySpec.java gcc-4.0.0/libjava/javax/crypto/spec/DHPublicKeySpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/DHPublicKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/DHPublicKeySpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,115 ----
+ /* DHPublicKeySpec.java -- Wrapper for Diffie-Hellman public keys.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.math.BigInteger;
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * A wrapper for Diffie-Hellman public key data.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see DHPrivateKeySpec
+  */
+ public class DHPublicKeySpec implements KeySpec
+ {
+ 
+   // Variables.
+   // ------------------------------------------------------------------------
+ 
+   /** The base generator. */
+   private BigInteger g;
+ 
+   /** The prime modulus. */
+   private BigInteger p;
+ 
+   /** The public value. */
+   private BigInteger y;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new Diffie-Hellman public key spec.
+    *
+    * @param y The public value.
+    * @param p The prime modulus.
+    * @param g The base generator.
+    */
+   public DHPublicKeySpec(BigInteger y, BigInteger p, BigInteger g)
+   {
+     this.y = y;
+     this.p = p;
+     this.g = g;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the base generator.
+    *
+    * @return The base generator.
+    */
+   public BigInteger getG()
+   {
+     return g;
+   }
+ 
+   /**
+    * Get the prime modulus.
+    *
+    * @return The prime modulus.
+    */
+   public BigInteger getP()
+   {
+     return p;
+   }
+ 
+   /**
+    * Get the public value.
+    *
+    * @return The public value.
+    */
+   public BigInteger getY()
+   {
+     return y;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/IvParameterSpec.java gcc-4.0.0/libjava/javax/crypto/spec/IvParameterSpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/IvParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/IvParameterSpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,96 ----
+ /* IvParameterSpec.java -- A simple wrapper for initialization vectors.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * A wrapper for an initialization vector. An initialization vector is
+  * necessary for any cipher in any <i>feedback mode</i>, e.g. CBC.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public class IvParameterSpec implements AlgorithmParameterSpec
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The IV. */
+   private byte[] iv;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new initialization vector spec from an entire byte array.
+    *
+    * @param iv The IV bytes.
+    */
+   public IvParameterSpec(byte[] iv)
+   {
+     this(iv, 0, iv.length);
+   }
+ 
+   /**
+    * Create a new initialization vector spec from part of a byte array.
+    *
+    * @param iv  The IV bytes.
+    * @param off The offset into the IV bytes.
+    * @param len The number of IV bytes.
+    */
+   public IvParameterSpec(byte[] iv, int off, int len)
+   {
+     this.iv = new byte[len];
+     System.arraycopy(iv, off, this.iv, 0, len);
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the IV. This method does not copy the byte array.
+    *
+    * @return The IV.
+    */
+   public byte[] getIV()
+   {
+     return iv;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/PBEKeySpec.java gcc-4.0.0/libjava/javax/crypto/spec/PBEKeySpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/PBEKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/PBEKeySpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,176 ----
+ /* PBEKeySpec.java -- Wrapper for password-based keys.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.security.spec.KeySpec;
+ 
+ /**
+  * A wrapper for a password-based key, used for password-based
+  * encryption (PBE).
+  *
+  * <p>Examples of password-based encryption algorithms include:
+  *
+  * <ul>
+  * <li><a href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-5/">PKCS #5
+  * - Password-Based Cryptography Standard</a></li>
+  * <li><a href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-12/">PKCS
+  * #12 - Personal Information Exchange Syntax Standard</a></li>
+  * </ul>
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  * @see javax.crypto.SecretKeyFactory
+  * @see PBEParameterSpec
+  */
+ public class PBEKeySpec implements KeySpec
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The iteration count. */
+   private int iterationCount;
+ 
+   /** The generated key length. */
+   private int keyLength;
+ 
+   /** The password. */
+   private char[] password;
+ 
+   /** The salt. */
+   private byte[] salt;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new PBE key spec with just a password.
+    *
+    * @param password The password char array.
+    */
+   public PBEKeySpec(char[] password)
+   {
+     this(password, null, 0, 0);
+   }
+ 
+   /**
+    * Create a PBE key spec with a password, salt, and iteration count.
+    *
+    * @param password       The password char array.
+    * @param salt           The salt bytes.
+    * @param iterationCount The iteration count.
+    */
+   public PBEKeySpec(char[] password, byte[] salt, int iterationCount)
+   {
+     this(password, salt, iterationCount, 0);
+   }
+ 
+   /**
+    * Create a PBE key spec with a password, salt, iteration count, and
+    * key length.
+    *
+    * @param password       The password char array.
+    * @param salt           The salt bytes.
+    * @param iterationCount The iteration count.
+    * @param keyLength      The generated key length.
+    */
+   public PBEKeySpec(char[] password, byte[] salt, int iterationCount,
+                     int keyLength)
+   {
+     this.password = password;
+     this.salt = salt;
+     this.iterationCount = iterationCount;
+     this.keyLength = keyLength;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Clear the password array by filling it with null characters.
+    */
+   public final void clearPassword()
+   {
+     if (password == null) return;
+     for (int i = 0; i < password.length; i++)
+       {
+         password[i] = '\u0000';
+       }
+   }
+ 
+   /**
+    * Get the iteration count, or 0 if it has not been specified.
+    *
+    * @return The iteration count, or 0 if it has not been specified.
+    */
+   public final int getIterationCount()
+   {
+     return iterationCount;
+   }
+ 
+   /**
+    * Get the generated key length, or 0 if it has not been specified.
+    *
+    * @return The key length, or 0 if it has not been specified.
+    */
+   public final int getKeyLength()
+   {
+     return keyLength;
+   }
+ 
+   /**
+    * Get the password character array.
+    *
+    * @return The password.
+    */
+   public final char[] getPassword()
+   {
+     return password;
+   }
+ 
+   /**
+    * Get the salt bytes.
+    *
+    * @return The salt.
+    */
+   public final byte[] getSalt()
+   {
+     return salt;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/PBEParameterSpec.java gcc-4.0.0/libjava/javax/crypto/spec/PBEParameterSpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/PBEParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/PBEParameterSpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,100 ----
+ /* PBEParameterSpec.java -- A wrapper for PBE parameters.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * A wrapper for the parameters used in <a
+  * href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-5/">PKCS #5 -
+  * Password-Based Cryptography Standard</a>.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public class PBEParameterSpec implements AlgorithmParameterSpec
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The iteration count. */
+   private int iterationCount;
+ 
+   /** The salt. */
+   private byte[] salt;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new password-based encryption parameter specification.
+    *
+    * @param salt           The salt.
+    * @param iterationCount The iteration count.
+    */
+   public PBEParameterSpec(byte[] salt, int iterationCount)
+   {
+     this.salt = salt;
+     this.iterationCount = iterationCount;
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the iteration count.
+    *
+    * @return The iteration count.
+    */
+   public int getIterationCount()
+   {
+     return iterationCount;
+   }
+ 
+   /**
+    * Get the salt.
+    *
+    * @return The salt.
+    */
+   public byte[] getSalt()
+   {
+     return salt;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/RC2ParameterSpec.java gcc-4.0.0/libjava/javax/crypto/spec/RC2ParameterSpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/RC2ParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/RC2ParameterSpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,166 ----
+ /* RC2ParameterSpec.java -- Wrapper for RC2 parameters.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * A wrapper for parameters for the <a
+  * href="http://www.rsasecurity.com/rsalabs/faq/3-6-2.html">RC2</a>
+  * block cipher ("RC" means either "Rivest Cipher" or "Ron's Code",
+  * depending upon who you ask and when).
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public class RC2ParameterSpec implements AlgorithmParameterSpec
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The length of an RC2 IV, in bytes. */
+   private static final int RC2_IV_LENGTH = 8;
+ 
+   /** The effective key length, in bits. */
+   private int effectiveKeyBits;
+ 
+   /** The initialization vector. */
+   private byte[] iv;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create RC2 parameters without an IV.
+    *
+    * @param effectiveKeyBits The number of effective key bits.
+    */
+   public RC2ParameterSpec(int effectiveKeyBits)
+   {
+     this.effectiveKeyBits = effectiveKeyBits;
+   }
+ 
+   /**
+    * Create RC2 parameters with an IV.
+    *
+    * @param effectiveKeyBits The number of effective key bits.
+    * @param iv               The IV; the first eight bytes of this array
+    *                         are used.
+    */
+   public RC2ParameterSpec(int effectiveKeyBits, byte[] iv)
+   {
+     this(effectiveKeyBits, iv, 0);
+   }
+ 
+   /**
+    * Create RC2 parameters with an IV.
+    *
+    * @param effectiveKeyBits The number of effective key bits.
+    * @param iv               The IV; the first eight bytes of this array
+    *                         after <code>offset</code> are used.
+    * @param offset           From whence to start in the array.
+    */
+   public RC2ParameterSpec(int effectiveKeyBits, byte[] iv, int offset)
+   {
+     if (iv.length - offset < RC2_IV_LENGTH)
+       {
+         throw new IllegalArgumentException("IV too short");
+       }
+     this.effectiveKeyBits = effectiveKeyBits;
+     this.iv = new byte[RC2_IV_LENGTH];
+     System.arraycopy(iv, offset, this.iv, 0, RC2_IV_LENGTH);
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Get the number of effective key bits.
+    *
+    * @return The numer of effective key bits.
+    */
+   public int getEffectiveKeyBits()
+   {
+     return effectiveKeyBits;
+   }
+ 
+   /**
+    * Return the initialization vector, or <code>null</code> if none was
+    * specified.
+    *
+    * @return The IV, or null.
+    */
+   public byte[] getIV()
+   {
+     return iv;
+   }
+ 
+   public boolean equals(Object o)
+   {
+     if (this == o) return true;
+     byte[] oiv = ((RC2ParameterSpec) o).getIV();
+     if (iv != oiv)
+       {
+         if (iv == null || oiv == null) return false;
+         if (iv.length != oiv.length) return false;
+         for (int i = 0; i < iv.length; i++)
+           {
+             if (iv[i] != oiv[i])
+               {
+                 return false;
+               }
+           }
+       }
+     return effectiveKeyBits == ((RC2ParameterSpec) o).getEffectiveKeyBits();
+   }
+ 
+   public int hashCode()
+   {
+     int code = effectiveKeyBits;
+     if (iv != null)
+       {
+         for (int i = 0; i < RC2_IV_LENGTH; i++)
+           {
+             code += iv[i];
+           }
+       }
+     return code;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/RC5ParameterSpec.java gcc-4.0.0/libjava/javax/crypto/spec/RC5ParameterSpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/RC5ParameterSpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/RC5ParameterSpec.java	Tue Sep 21 08:33:31 2004
***************
*** 0 ****
--- 1,202 ----
+ /* RC5ParameterSpec.java -- parameters for RC5.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.security.spec.AlgorithmParameterSpec;
+ 
+ /**
+  * A wrapper for parameters to the <a
+  * href="http://www.rsasecurity.com/rsalabs/faq/3-6-4.html">RC5</a>
+  * block cipher.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  * @since 1.4
+  */
+ public class RC5ParameterSpec implements AlgorithmParameterSpec
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------------
+ 
+   /** The IV. */
+   private byte[] iv;
+ 
+   /** The number of rounds. */
+   private int rounds;
+ 
+   /** The version number. */
+   private int version;
+ 
+   /** The word size, in bits. */
+   private int wordSize;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create RC5 parameters without an IV.
+    *
+    * @param version  The version number.
+    * @param rounds   The number of rounds.
+    * @param wordSize The size of a word, in bits.
+    */
+   public RC5ParameterSpec(int version, int rounds, int wordSize)
+   {
+     this.version = version;
+     this.rounds = rounds;
+     this.wordSize = wordSize;
+   }
+ 
+   /**
+    * Create RC5 parameters with an IV. The bytes in <code>iv</code> in
+    * the range <code>[0, 2*(wordSize/8)-1]</code> are used.
+    *
+    * @param version  The version number.
+    * @param rounds   The number of rounds.
+    * @param wordSize The size of a word, in bits.
+    * @param iv       The IV data.
+    */
+   public RC5ParameterSpec(int version, int rounds, int wordSize, byte[] iv)
+   {
+     this(version, rounds, wordSize, iv, 0);
+   }
+ 
+   /**
+    * Create RC5 parameters with an IV. The bytes in <code>iv</code> in
+    * the range <code>[off, off+2*(wordSize/8)-1]</code> are used.
+    *
+    * @param version  The version number.
+    * @param rounds   The number of rounds.
+    * @param wordSize The size of a word, in bits.
+    * @param iv       The IV data.
+    * @param off      From where in the array the IV starts.
+    */
+   public
+   RC5ParameterSpec(int version, int rounds, int wordSize, byte[] iv, int off)
+   {
+     this(version, rounds, wordSize);
+     int ivLength = 2 * (wordSize / 8);
+     if (off < 0)
+       throw new IllegalArgumentException();
+     if (iv.length - off < ivLength)
+       {
+         throw new IllegalArgumentException("IV too short");
+       }
+     this.iv = new byte[ivLength];
+     System.arraycopy(iv, off, this.iv, 0, ivLength);
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the initializaiton vector, or <code>null</code> if none was
+    * specified.
+    *
+    * @return The IV, or null.
+    */
+   public byte[] getIV()
+   {
+     return iv;
+   }
+ 
+   /**
+    * Get the number of rounds.
+    *
+    * @return The number of rounds.
+    */
+   public int getRounds()
+   {
+     return rounds;
+   }
+ 
+   /**
+    * Get the version number.
+    *
+    * @return The version number.
+    */
+   public int getVersion()
+   {
+     return version;
+   }
+ 
+   /**
+    * Get the word size, in bits.
+    *
+    * @return The word size, in bits.
+    */
+   public int getWordSize()
+   {
+     return wordSize;
+   }
+ 
+   public boolean equals(Object o)
+   {
+     if (this == o) return true;
+     byte[] oiv = ((RC5ParameterSpec) o).getIV();
+     if (iv != oiv)
+       {
+         if (iv == null || oiv == null) return false;
+         if (iv.length != oiv.length) return false;
+         for (int i = 0; i < iv.length; i++)
+           {
+             if (iv[i] != oiv[i])
+               {
+                 return false;
+               }
+           }
+       }
+     return rounds   == ((RC5ParameterSpec) o).getRounds()
+         && version  == ((RC5ParameterSpec) o).getVersion()
+         && wordSize == ((RC5ParameterSpec) o).getWordSize();
+   }
+ 
+   public int hashCode()
+   {
+     int code = rounds + version + wordSize;
+     if (iv != null)
+       {
+         for (int i = 0; i < iv.length; i++)
+           {
+             code += iv[i];
+           }
+       }
+     return code;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/crypto/spec/SecretKeySpec.java gcc-4.0.0/libjava/javax/crypto/spec/SecretKeySpec.java
*** gcc-3.4.3/libjava/javax/crypto/spec/SecretKeySpec.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/crypto/spec/SecretKeySpec.java	Thu Oct 21 20:38:29 2004
***************
*** 0 ****
--- 1,155 ----
+ /* SecretKeySpec.java -- Wrapper for secret keys.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.spec;
+ 
+ import java.security.spec.KeySpec;
+ 
+ import javax.crypto.SecretKey;
+ 
+ /**
+  * This is a simple wrapper around a raw byte array, for ciphers that do
+  * not require any key parameters other than the bytes themselves.
+  *
+  * <p>Since this class implements {@link javax.crypto.SecretKey}, which
+  * in turn extends {@link java.security.Key}, so instances of this class
+  * may be passed directly to the <code>init()</code> methods of {@link
+  * javax.crypto.Cipher}.
+  *
+  * @see javax.crypto.SecretKey
+  * @see javax.crypto.SecretKeyFactory
+  */
+ public class SecretKeySpec implements KeySpec, SecretKey
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------------
+ 
+   /** Compatible with JDK1.4. */
+   private static final long serialVersionUID = 6577238317307289933L;
+ 
+   /** The key bytes. */
+   private byte[] key;
+ 
+   /** The algorithm's name. */
+   private String algorithm;
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create a new secret key spec from an entire byte array.
+    *
+    * @param key       The key material.
+    * @param algorithm The name of the algorithm using this key.
+    */
+   public SecretKeySpec(byte[] key, String algorithm)
+   {
+     this(key, 0, key.length, algorithm);
+   }
+ 
+   /**
+    * Create a new secret key spec from part of a byte array.
+    *
+    * @param key       The key material.
+    * @param off       The offset at which key material begins.
+    * @param len       The length of key material.
+    * @param algorithm The name of the algorithm using this key.
+    */
+   public SecretKeySpec(byte[] key, int off, int len, String algorithm)
+   {
+     this.key = new byte[len];
+     this.algorithm = algorithm;
+     System.arraycopy(key, off, this.key, 0, len);
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Return the name of the algorithm associated with this secret key.
+    *
+    * @return The algorithm's name.
+    */
+   public String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Return the key as a byte array.
+    *
+    * @return The key material.
+    */
+   public byte[] getEncoded()
+   {
+     return key;
+   }
+ 
+   /**
+    * This key's format, which is always "RAW".
+    *
+    * @return "RAW"
+    */
+   public String getFormat()
+   {
+     return "RAW";
+   }
+ 
+   public boolean equals(Object o)
+   {
+     byte[] okey = ((SecretKeySpec) o).getEncoded();
+     if (key.length != okey.length) return false;
+     for (int i = 0; i < key.length; i++)
+       {
+         if (key[i] != okey[i])
+           return false;
+       }
+     return algorithm.equals(((SecretKeySpec) o).getAlgorithm());
+   }
+ 
+   public int hashCode()
+   {
+     int code = 0;
+     for (int i = 0; i < key.length; i++)
+       {
+         code ^= (key[i] & 0xff) << (i << 3 & 31);
+       }
+     return code ^ algorithm.hashCode();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/IIOException.java gcc-4.0.0/libjava/javax/imageio/IIOException.java
*** gcc-3.4.3/libjava/javax/imageio/IIOException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/IIOException.java	Thu Feb 17 07:48:47 2005
***************
*** 0 ****
--- 1,69 ----
+ /* IIOException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class IIOException extends IOException
+ {
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message The descriptive error message.
+    */
+   public IIOException(String message)
+   {
+     super(message);
+   }
+ 
+   /**
+    * Create an exception with a descriptive error message.
+    *
+    * @param message The descriptive error message.
+    * @param cause The cause for this exception.
+    */
+   public IIOException(String message, Throwable cause)
+   {
+     super(message);
+     initCause(cause);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/IIOImage.java gcc-4.0.0/libjava/javax/imageio/IIOImage.java
*** gcc-3.4.3/libjava/javax/imageio/IIOImage.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/IIOImage.java	Sat Nov  6 18:08:58 2004
***************
*** 0 ****
--- 1,138 ----
+ /* IIOImage.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import java.awt.image.BufferedImage;
+ import java.awt.image.Raster;
+ import java.awt.image.RenderedImage;
+ import java.util.List;
+ 
+ import javax.imageio.metadata.IIOMetadata;
+ 
+ public class IIOImage
+ {
+   protected RenderedImage image;
+   protected IIOMetadata metadata;
+   protected Raster raster;
+   protected List thumbnails;
+   
+   public IIOImage (Raster raster, List thumbnails, IIOMetadata metadata)
+   {
+     if (raster == null)
+       throw new IllegalArgumentException ("raster may not be null");
+     
+     this.raster = raster;
+     this.thumbnails = thumbnails;
+     this.metadata = metadata;
+   }
+   
+   public IIOImage (RenderedImage image, List thumbnails, IIOMetadata metadata)
+   {
+     if (image == null)
+       throw new IllegalArgumentException ("image may not be null");
+     
+     this.image = image;
+     this.thumbnails = thumbnails;
+     this.metadata = metadata;
+   }
+ 
+   public IIOMetadata getMetadata()
+   {
+     return metadata;
+   }
+ 
+   public int getNumThumbnails()
+   {
+     return thumbnails.size();
+   }
+ 
+   public Raster getRaster()
+   {
+     return raster;
+   }
+ 
+   public RenderedImage getRenderedImage()
+   {
+     return image;
+   }
+ 
+   public BufferedImage getThumbnail (int index)
+   {
+     return (BufferedImage) thumbnails.get (index);
+   }
+ 
+   public List getThumbnails()
+   {
+     return thumbnails;
+   }
+ 
+   public boolean hasRaster()
+   {
+     return raster != null;
+   }
+ 
+   public void setMetadata (IIOMetadata metadata)
+   {
+     this.metadata = metadata;
+   }
+ 
+   public void setRaster (Raster raster)
+   {
+     if (raster == null)
+       throw new IllegalArgumentException ("raster may not be null");
+     
+     this.image = null;
+     this.raster = raster;
+   }
+ 
+   public void setRenderedImage (RenderedImage image)
+   {
+     if (image == null)
+       throw new IllegalArgumentException ("image may not be null");
+ 
+     this.image = image;
+     this.raster = null;
+   }
+ 
+   public void setThumbnails (List thumbnails)
+   {
+     this.thumbnails = thumbnails;
+   }
+   
+ } // class IIOParam
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/IIOParam.java gcc-4.0.0/libjava/javax/imageio/IIOParam.java
*** gcc-3.4.3/libjava/javax/imageio/IIOParam.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/IIOParam.java	Mon Feb  7 13:22:35 2005
***************
*** 0 ****
--- 1,171 ----
+ /* IIOParam.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class IIOParam
+ {
+   protected IIOParamController controller;
+   protected IIOParamController defaultController;
+   protected Point destinationOffset = new Point(0, 0);
+   protected ImageTypeSpecifier destinationType;
+   protected int[] sourceBands;
+   protected Rectangle sourceRegion;
+   protected int sourceXSubsampling;
+   protected int sourceYSubsampling;
+   protected int subsamplingXOffset;
+   protected int subsamplingYOffset;
+ 
+   /**
+    * Initializes an <code>IIOParam</code> object.
+    */
+   protected IIOParam()
+   {
+     // Do nothing here.
+   }
+ 
+   public boolean activateController()
+   {
+     if (controller == null)
+       return false;
+     
+     return controller.activate(this);
+   }
+   
+   public IIOParamController getController()
+   {
+     return controller;
+   }
+ 
+   public IIOParamController getDefaultController()
+   {
+     return defaultController;
+   }
+ 
+   public Point getDestinationOffset()
+   {
+     return destinationOffset;
+   }
+ 
+   public ImageTypeSpecifier getDestinationType()
+   {
+     return destinationType;
+   }
+ 
+   public int[] getSourceBands()
+   {
+     return sourceBands;
+   }
+ 
+   public Rectangle getSourceRegion()
+   {
+     return sourceRegion;
+   }
+ 
+   public int getSourceXSubsampling()
+   {
+     return sourceXSubsampling;
+   }
+   
+   public int getSourceYSubsampling()
+   {
+     return sourceYSubsampling;
+   }
+ 
+   public int getSubsamplingXOffset()
+   {
+     return subsamplingXOffset;
+   }
+   
+   public int getSubsamplingYOffset()
+   {
+     return subsamplingYOffset;
+   }
+ 
+   public boolean hasController()
+   {
+     return getController() != null;
+   }
+ 
+   public void setController(IIOParamController controller)
+   {
+     this.controller = controller;
+   }
+ 
+   public void setDestinationOffset(Point destinationOffset)
+   {
+     if (destinationOffset == null)
+       throw new IllegalArgumentException("destinationOffset is null");
+ 
+     this.destinationOffset = destinationOffset;
+   }
+ 
+   public void setSourceBands(int[] sourceBands)
+   {
+     this.sourceBands = sourceBands;
+   }
+ 
+   public void setSourceRegion(Rectangle sourceRegion)
+   {
+     if (sourceRegion != null
+ 	&& (sourceRegion.x < 0
+ 	    || sourceRegion.y < 0
+ 	    || sourceRegion.width <= 0
+ 	    || sourceRegion.height <= 0))
+       throw new IllegalArgumentException("illegal source region");
+     
+     // FIXME: Throw IllegalStateException.
+ 
+     this.sourceRegion = sourceRegion;
+   }
+ 
+   public void setSourceSubsampling(int sourceXSubsampling, int sourceYSubsampling,
+ 				   int subsamplingXOffset, int subsamplingYOffset)
+   {
+     this.sourceXSubsampling = sourceXSubsampling;
+     this.sourceYSubsampling = sourceYSubsampling;
+     this.subsamplingXOffset = subsamplingXOffset;
+     this.subsamplingYOffset = subsamplingYOffset;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/IIOParamController.java gcc-4.0.0/libjava/javax/imageio/IIOParamController.java
*** gcc-3.4.3/libjava/javax/imageio/IIOParamController.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/IIOParamController.java	Sat Nov  6 18:08:58 2004
***************
*** 0 ****
--- 1,58 ----
+ /* IIOParamController.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface IIOParamController
+ {
+   /**
+    * Activates the controller.
+    *
+    * @param param the <code>IIOParam</code> to be modified
+    *
+    * @return true if the <code>IIOParam</code> has been modified,
+    * false otherwise
+    * 
+    * @exception IllegalArgumentException if param is null or is not an instance
+    * of the correct class
+    */
+   boolean activate(IIOParam param);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/ImageIO.java gcc-4.0.0/libjava/javax/imageio/ImageIO.java
*** gcc-3.4.3/libjava/javax/imageio/ImageIO.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/ImageIO.java	Tue Apr 12 18:37:24 2005
***************
*** 0 ****
--- 1,605 ----
+ /* ImageIO.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import java.awt.image.BufferedImage;
+ import java.awt.image.RenderedImage;
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.net.URL;
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.Iterator;
+ 
+ import javax.imageio.spi.IIORegistry;
+ import javax.imageio.spi.ImageReaderSpi;
+ import javax.imageio.spi.ImageWriterSpi;
+ import javax.imageio.spi.ServiceRegistry;
+ import javax.imageio.stream.ImageInputStream;
+ import javax.imageio.stream.ImageOutputStream;
+ import javax.imageio.stream.MemoryCacheImageInputStream;
+ import javax.imageio.stream.MemoryCacheImageOutputStream;
+ 
+ public final class ImageIO
+ {
+   /**
+    * This class isn't intended to be instantiated.
+    */
+   private ImageIO() {}
+ 
+   private static final class ReaderFormatFilter implements ServiceRegistry.Filter
+   {
+     private String formatName;
+ 
+     public ReaderFormatFilter(String formatName)
+     {
+       this.formatName = formatName;
+     }
+ 
+     public boolean filter (Object provider)
+     {
+       if (provider instanceof ImageReaderSpi)
+         {
+           ImageReaderSpi spi = (ImageReaderSpi) provider;
+           String[] formatNames = spi.getFormatNames();
+ 
+           for (int i = formatNames.length - 1; i >= 0; --i)
+             if (formatName.equals(formatNames[i]))
+               return true;
+         }
+ 
+       return false;
+     }
+   }
+ 
+   private static final class ReaderMIMETypeFilter implements ServiceRegistry.Filter
+   {
+     private String MIMEType;
+ 
+     public ReaderMIMETypeFilter(String MIMEType)
+     {
+       this.MIMEType = MIMEType;
+     }
+ 
+     public boolean filter(Object provider)
+     {
+       if (provider instanceof ImageReaderSpi)
+         {
+           ImageReaderSpi spi = (ImageReaderSpi) provider;
+           String[] mimetypes = spi.getMIMETypes();
+ 
+           for (int i = mimetypes.length - 1; i >= 0; --i)
+             if (MIMEType.equals(mimetypes[i]))
+               return true;
+         }
+ 
+       return false;
+     }
+   }
+   
+   private static final class ReaderSuffixFilter implements ServiceRegistry.Filter
+   {
+     private String fileSuffix;
+ 
+     public ReaderSuffixFilter(String fileSuffix)
+     {
+       this.fileSuffix = fileSuffix;
+     }
+ 
+     public boolean filter(Object provider)
+     {
+       if (provider instanceof ImageReaderSpi)
+         {
+           ImageReaderSpi spi = (ImageReaderSpi) provider;
+           String[] suffixes = spi.getFileSuffixes();
+ 
+           for (int i = suffixes.length - 1; i >= 0; --i)
+             if (fileSuffix.equals(suffixes[i]))
+               return true;
+         }
+ 
+       return false;
+     }
+   }
+   
+   private static final class WriterFormatFilter implements ServiceRegistry.Filter
+   {
+     private String formatName;
+ 
+     public WriterFormatFilter(String formatName)
+     {
+       this.formatName = formatName;
+     }
+ 
+     public boolean filter(Object provider)
+     {
+       if (provider instanceof ImageWriterSpi)
+ 	{
+ 	  ImageWriterSpi spi = (ImageWriterSpi) provider;
+ 	  String[] formatNames = spi.getFormatNames();
+ 	  
+ 	  for (int i = formatNames.length - 1; i >= 0; --i)
+             if (formatName.equals(formatNames[i]))
+               return true;
+ 	}
+ 
+       return false;
+     }
+   }
+ 
+   private static final class WriterMIMETypeFilter implements ServiceRegistry.Filter
+   {
+     private String MIMEType;
+ 
+     public WriterMIMETypeFilter(String MIMEType)
+     {
+       this.MIMEType = MIMEType;
+     }
+ 
+     public boolean filter(Object provider)
+     {
+       if (provider instanceof ImageWriterSpi)
+         {
+           ImageWriterSpi spi = (ImageWriterSpi) provider;
+           String[] mimetypes = spi.getMIMETypes();
+ 
+           for (int i = mimetypes.length - 1; i >= 0; --i)
+             if (MIMEType.equals(mimetypes[i]))
+               return true;
+         }
+ 
+       return false;
+     }
+   }
+   
+   private static final class WriterSuffixFilter implements ServiceRegistry.Filter
+   {
+     private String fileSuffix;
+ 
+     public WriterSuffixFilter(String fileSuffix)
+     {
+       this.fileSuffix = fileSuffix;
+     }
+ 
+     public boolean filter(Object provider)
+     {
+       if (provider instanceof ImageWriterSpi)
+         {
+           ImageWriterSpi spi = (ImageWriterSpi) provider;
+           String[] suffixes = spi.getFileSuffixes();
+ 
+           for (int i = suffixes.length - 1; i >= 0; --i)
+             if (fileSuffix.equals(suffixes[i]))
+               return true;
+         }
+ 
+       return false;
+     }
+   }
+ 
+   private static final class ImageReaderIterator implements Iterator
+   {
+     Iterator it;
+     Object readerExtension;
+     
+     public ImageReaderIterator(Iterator it, Object readerExtension)
+     {
+       this.it = it;
+       this.readerExtension = readerExtension;
+     }
+ 
+     public boolean hasNext()
+     {
+       return it.hasNext();
+     }
+ 
+     public Object next()
+     {
+       try
+         {
+           return ((ImageReaderSpi) it.next()).createReaderInstance(readerExtension);
+         }
+       catch (IOException e)
+         {
+           return null;
+         }
+     }
+ 
+     public void remove()
+     {
+       throw new UnsupportedOperationException();
+     }
+   }
+ 
+   private static final class ImageWriterIterator implements Iterator
+   {
+     Iterator it;
+     Object writerExtension;
+     
+     public ImageWriterIterator(Iterator it, Object writerExtension)
+     {
+       this.it = it;
+       this.writerExtension = writerExtension;
+     }
+ 
+     public boolean hasNext()
+     {
+       return it.hasNext();
+     }
+ 
+     public Object next()
+     {
+       try
+         {
+           return ((ImageWriterSpi) it.next()).createWriterInstance(writerExtension);
+         }
+       catch (IOException e)
+         {
+           return null;
+         }
+     }
+ 
+     public void remove()
+     {
+       throw new UnsupportedOperationException();
+     }
+   }
+   
+   private static File cacheDirectory;
+   private static boolean useCache = true;
+ 
+   private static Iterator getReadersByFilter(Class type,
+                                              ServiceRegistry.Filter filter,
+                                              Object readerExtension)
+   {
+     try
+       {
+         Iterator it = getRegistry().getServiceProviders(type, filter, true);
+         return new ImageReaderIterator(it, readerExtension);
+       }
+     catch (IllegalArgumentException e)
+       {
+         return Collections.EMPTY_SET.iterator();
+       }
+   }
+   
+   private static Iterator getWritersByFilter(Class type,
+ 					     ServiceRegistry.Filter filter,
+                                              Object writerExtension)
+   {
+     try
+       {
+         Iterator it = getRegistry().getServiceProviders(type, filter, true);
+         return new ImageWriterIterator(it, writerExtension);
+       }
+     catch (IllegalArgumentException e)
+       {
+         return Collections.EMPTY_SET.iterator();
+       }
+   }
+ 
+   public static File getCacheDirectory()
+   {
+     return cacheDirectory;
+   }
+ 
+   public static Iterator getImageReadersByFormatName(String formatName)
+   {
+     if (formatName == null)
+       throw new IllegalArgumentException("formatName may not be null");
+ 
+     return getReadersByFilter(ImageReaderSpi.class,
+                               new ReaderFormatFilter(formatName),
+                               formatName);
+   }
+ 
+   public static Iterator getImageReadersByMIMEType(String MIMEType)
+   {
+     if (MIMEType == null)
+       throw new IllegalArgumentException("MIMEType may not be null");
+ 
+     return getReadersByFilter(ImageReaderSpi.class,
+                               new ReaderMIMETypeFilter(MIMEType),
+                               MIMEType);
+   }
+ 
+   public static Iterator getImageReadersBySuffix(String fileSuffix)
+   {
+     if (fileSuffix == null)
+       throw new IllegalArgumentException("formatName may not be null");
+     
+     return getReadersByFilter(ImageReaderSpi.class,
+                               new ReaderSuffixFilter(fileSuffix),
+                               fileSuffix);
+   }
+ 
+   public static Iterator getImageWritersByFormatName(String formatName)
+   {
+     if (formatName == null)
+       throw new IllegalArgumentException("formatName may not be null");
+     
+     return getWritersByFilter(ImageWriterSpi.class,
+                               new WriterFormatFilter(formatName),
+                               formatName);
+   }
+ 
+   public static Iterator getImageWritersByMIMEType(String MIMEType)
+   {
+     if (MIMEType == null)
+       throw new IllegalArgumentException("MIMEType may not be null");
+     
+     return getWritersByFilter(ImageWriterSpi.class,
+                               new WriterMIMETypeFilter(MIMEType),
+                               MIMEType);
+   }
+ 
+   public static Iterator getImageWritersBySuffix(String fileSuffix)
+   {
+     if (fileSuffix == null)
+       throw new IllegalArgumentException("fileSuffix may not be null");
+     
+     return getWritersByFilter(ImageWriterSpi.class,
+                               new WriterSuffixFilter(fileSuffix),
+                               fileSuffix);
+   }
+ 
+   public static String[] getReaderFormatNames()
+   {
+     try
+       {
+         Iterator it =
+ 	  getRegistry().getServiceProviders(ImageReaderSpi.class, true);
+ 	ArrayList result = new ArrayList();
+ 
+ 	while (it.hasNext())
+ 	  {
+ 	    ImageReaderSpi spi = (ImageReaderSpi) it.next();
+ 	    String[] names = spi.getFormatNames();
+ 
+ 	    for (int i = names.length - 1; i >= 0; --i)
+ 	      result.add(names[i]);
+ 	  }
+ 
+ 	return (String[]) result.toArray(new String[result.size()]);
+       }
+     catch (IllegalArgumentException e)
+       {
+         return new String[0];
+       }
+   }
+ 
+   public static String[] getReaderMIMETypes()
+   {
+     try
+       {
+         Iterator it =
+ 	  getRegistry().getServiceProviders(ImageReaderSpi.class, true);
+ 	ArrayList result = new ArrayList();
+ 
+ 	while (it.hasNext())
+ 	  {
+ 	    ImageReaderSpi spi = (ImageReaderSpi) it.next();
+ 	    String[] names = spi.getMIMETypes();
+ 
+ 	    for (int i = names.length - 1; i >= 0; --i)
+ 	      result.add(names[i]);
+ 	  }
+ 
+ 	return (String[]) result.toArray(new String[result.size()]);
+       }
+     catch (IllegalArgumentException e)
+       {
+         return new String[0];
+       }
+   }
+ 
+   private static IIORegistry getRegistry()
+   {
+     return IIORegistry.getDefaultInstance();
+   }
+ 
+   public static boolean getUseCache()
+   {
+     return useCache;
+   }
+ 
+   public static String[] getWriterFormatNames()
+   {
+     try
+       {
+         Iterator it =
+ 	  getRegistry().getServiceProviders(ImageWriterSpi.class, true);
+ 	ArrayList result = new ArrayList();
+ 
+ 	while (it.hasNext())
+ 	  {
+ 	    ImageWriterSpi spi = (ImageWriterSpi) it.next();
+ 	    String[] names = spi.getFormatNames();
+ 
+ 	    for (int i = names.length - 1; i >= 0; --i)
+ 	      result.add(names[i]);
+ 	  }
+ 
+ 	return (String[]) result.toArray(new String[result.size()]);
+       }
+     catch (IllegalArgumentException e)
+       {
+         return new String[0];
+       }
+   }
+ 
+   public static String[] getWriterMIMETypes()
+   {
+     try
+       {
+         Iterator it =
+ 	  getRegistry().getServiceProviders(ImageWriterSpi.class, true);
+ 	ArrayList result = new ArrayList();
+ 
+ 	while (it.hasNext())
+ 	  {
+ 	    ImageWriterSpi spi = (ImageWriterSpi) it.next();
+ 	    String[] names = spi.getMIMETypes();
+ 
+ 	    for (int i = names.length - 1; i >= 0; --i)
+ 	      result.add(names[i]);
+ 	  }
+ 
+ 	return (String[]) result.toArray(new String[result.size()]);
+       }
+     catch (IllegalArgumentException e)
+       {
+         return new String[0];
+       }
+   }
+   
+   /**
+    * Rescans the application classpath for ImageIO service providers
+    * and registers them.
+    */
+   public static void scanForPlugins()
+   {
+     IIORegistry.getDefaultInstance().registerApplicationClasspathSpis();
+   }
+ 
+   public static void setCacheDirectory(File cacheDirectory)
+   {
+     if (cacheDirectory != null)
+       {
+         if (!cacheDirectory.isDirectory())
+           throw new IllegalArgumentException("cacheDirectory must be a directory");
+ 
+         cacheDirectory.canWrite();
+       }
+     
+     ImageIO.cacheDirectory = cacheDirectory;
+   }
+ 
+   public static void setUseCache(boolean useCache)
+   {
+     ImageIO.useCache = useCache;
+   }
+ 
+   /* 
+    * "Standard" simplified entry points.
+    */
+ 
+   public static boolean write(RenderedImage im,
+                               String formatName,
+                               File output)
+     throws IOException
+   {
+     return write(im, formatName, new FileOutputStream(output));
+   }
+ 
+   public static boolean write(RenderedImage im,
+                               String formatName,
+                               OutputStream output)
+     throws IOException
+   {
+     return write(im, formatName, new MemoryCacheImageOutputStream(output));
+   }
+   
+   
+   public static boolean write(RenderedImage im,
+                               String formatName,
+                               ImageOutputStream output)
+     throws IOException
+   {
+     Iterator writers = getImageWritersByFormatName(formatName);
+     IIOImage img = new IIOImage(im, null, null);
+     while (writers.hasNext())
+       {
+         ImageWriter w = (ImageWriter) writers.next();
+         try 
+           {
+             w.setOutput(output);
+           }
+         catch (IllegalArgumentException e)
+           {
+             continue;
+           }
+         
+         w.write(null, img, null);
+         output.close();
+         return true;
+       }
+     return false;
+   }
+ 
+   public static BufferedImage read(ImageInputStream stream)
+     throws IOException
+   {
+     Iterator providers = getRegistry().getServiceProviders(ImageReaderSpi.class, true);
+     while (providers.hasNext())
+       {
+         ImageReaderSpi spi = (ImageReaderSpi) providers.next();
+         if (spi.canDecodeInput(stream))
+           {
+             ImageReader reader = spi.createReaderInstance();
+             reader.setInput(stream);
+             return reader.read(0, null);
+           }
+       }
+     return null;
+   }
+         
+   public static BufferedImage read(URL input)
+     throws IOException
+   {
+     return read(input.openStream());
+   }
+ 
+   public static BufferedImage read(InputStream input)
+     throws IOException
+   {
+     return read(new MemoryCacheImageInputStream(input));
+   }
+ 
+   public static BufferedImage read(File input)
+     throws IOException
+   {
+     return read(new FileInputStream(input));
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/ImageReadParam.java gcc-4.0.0/libjava/javax/imageio/ImageReadParam.java
*** gcc-3.4.3/libjava/javax/imageio/ImageReadParam.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/ImageReadParam.java	Mon Feb  7 13:22:35 2005
***************
*** 0 ****
--- 1,126 ----
+ /* ImageReadParam.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import java.awt.Dimension;
+ import java.awt.image.BufferedImage;
+ 
+ /**
+  * @author Michel Koch (konqueror@gmx.de)
+  */
+ public class ImageReadParam extends IIOParam
+ {
+   protected boolean canSetSourceRenderSize;
+   protected BufferedImage destination;
+   protected int[] destinationBands;
+   protected int minProgressivePass;
+   protected int numProgressivePasses = Integer.MAX_VALUE;
+   protected Dimension sourceRenderSize;
+ 
+   public ImageReadParam()
+   {
+   }
+ 
+   public boolean canSetSourceRenderSize()
+   {
+     return canSetSourceRenderSize;
+   }
+ 
+   public BufferedImage getDestination()
+   {
+     return destination;
+   }
+ 
+   public int[] getDestinationBands()
+   {
+     return destinationBands;
+   }
+ 
+   public int getSourceMaxProgressivePass()
+   {
+     if (getSourceNumProgressivePasses() == Integer.MAX_VALUE)
+       return Integer.MAX_VALUE;
+ 
+     return getSourceMinProgressivePass() + getSourceNumProgressivePasses() - 1;
+   }
+ 
+   public int getSourceMinProgressivePass()
+   {
+     return minProgressivePass;
+   }
+ 
+   public int getSourceNumProgressivePasses()
+   {
+     return numProgressivePasses;
+   }
+ 
+   public Dimension getSourceRenderSize()
+   {
+     return sourceRenderSize;
+   }
+ 
+   public void setDestination(BufferedImage destination)
+   {
+     this.destination = destination;
+   }
+ 
+   public void setDestinationBands(int[] destinationBands)
+   {
+     this.destinationBands = destinationBands;
+   }
+ 
+   public void setSourceProgressivePasses(int minPass, int numPasses)
+   {
+     this.minProgressivePass = minPass;
+     this.numProgressivePasses = numPasses;
+   }
+   
+   public void setSourceRenderSize(Dimension size)
+     throws UnsupportedOperationException
+   {
+     if (! canSetSourceRenderSize())
+       throw new UnsupportedOperationException
+ 	("setting source render size not supported");
+     
+     if (size.width <= 0 || size.height <= 0)
+       throw new IllegalArgumentException("negative dimension not allowed");
+     
+     sourceRenderSize = size;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/ImageReader.java gcc-4.0.0/libjava/javax/imageio/ImageReader.java
*** gcc-3.4.3/libjava/javax/imageio/ImageReader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/ImageReader.java	Mon Feb  7 13:22:35 2005
***************
*** 0 ****
--- 1,556 ----
+ /* ImageReader.java -- Decodes raster images.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import java.awt.image.BufferedImage;
+ import java.awt.image.Raster;
+ import java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Locale;
+ 
+ import javax.imageio.event.IIOReadProgressListener;
+ import javax.imageio.event.IIOReadUpdateListener;
+ import javax.imageio.event.IIOReadWarningListener;
+ import javax.imageio.metadata.IIOMetadata;
+ import javax.imageio.spi.ImageReaderSpi;
+ import javax.imageio.stream.ImageInputStream;
+ 
+ public abstract class ImageReader
+ {
+   private boolean aborted;
+   
+   protected Locale[] availableLocales;
+   protected boolean ignoreMetadata;
+   protected Object input;
+   protected Locale locale;
+   protected int minIndex;
+   protected ImageReaderSpi originatingProvider;
+   protected List progressListeners = new ArrayList();
+   protected boolean seekForwardOnly;
+   protected List updateListeners = new ArrayList();
+   protected List warningListeners = new ArrayList();
+   protected List warningLocales = new ArrayList();
+ 
+   protected ImageReader(ImageReaderSpi originatingProvider)
+   {
+     this.originatingProvider = originatingProvider;
+   }
+ 
+   public void abort()
+   {
+     aborted = true;
+   }
+ 
+   protected boolean abortRequested()
+   {
+     return aborted;
+   }
+ 
+   public void addIIOReadProgressListener(IIOReadProgressListener listener)
+   {
+     if (listener == null)
+       return;
+     
+     progressListeners.add(listener);    
+   }
+ 
+   public void addIIOReadUpdateListener(IIOReadUpdateListener listener)
+   {
+     if (listener == null)
+       return;
+     
+     updateListeners.add(listener);    
+   }
+   
+   public void addIIOReadWarningListener(IIOReadWarningListener listener)
+   {
+     if (listener == null)
+       return;
+     
+     warningListeners.add(listener);    
+   }
+ 
+   public boolean canReadRaster()
+   {
+     return false;
+   }
+ 
+   protected void clearAbortRequest()
+   {
+     aborted = false;
+   }
+   
+   public void dispose()
+   {
+     // The default implementation does nothing.
+   }
+   
+   public float getAspectRatio(int imageIndex)
+     throws IOException
+   {
+     return (float) (getWidth(imageIndex) / getHeight(imageIndex));
+   }
+ 
+   public Locale[] getAvailableLocales()
+   {
+     if (availableLocales == null)
+       return null;
+     
+     return (Locale[]) availableLocales.clone();
+   }
+ 
+   public ImageReadParam getDefaultReadParam()
+   {
+     return new ImageReadParam();
+   }
+ 
+   public String getFormatName()
+     throws IOException
+   {
+     return originatingProvider.getFormatNames()[0];
+   }
+ 
+   public abstract int getHeight(int imageIndex)
+     throws IOException;
+ 
+   public abstract IIOMetadata getImageMetadata(int imageIndex)
+     throws IOException;
+ 
+   public abstract Iterator getImageTypes(int imageIndex)
+     throws IOException;
+ 
+   public void setInput(Object input,
+                        boolean seekForwardOnly,
+                        boolean ignoreMetadata)
+   {
+     Class[] okClasses = originatingProvider.getInputTypes();
+     if (okClasses == null)
+       {
+         if (!(input instanceof ImageInputStream))
+           throw new IllegalArgumentException();
+       }
+     else
+       {
+         boolean classOk = false;
+         for (int i = 0; i < okClasses.length; ++i)
+           if (okClasses[i].isInstance(input))
+             classOk = true;
+         if (!classOk)
+           throw new IllegalArgumentException();
+       }
+ 
+     this.input = input;
+     this.seekForwardOnly = seekForwardOnly;
+     this.ignoreMetadata = ignoreMetadata;
+     this.minIndex = 0;
+   }
+ 
+   public void setInput(Object in, boolean seekForwardOnly)
+   {
+     setInput(in, seekForwardOnly, false);
+   }
+ 
+   public void setInput(Object in)
+   {
+     setInput(in, false, false);
+   }
+ 
+   public Object getInput()
+   {
+     return input;
+   }
+ 
+   public Locale getLocale()
+   {
+     return locale;
+   }
+ 
+   public abstract int getNumImages(boolean allowSearch)
+     throws IOException;
+ 
+   public int getNumThumbnails(int imageIndex)
+     throws IOException
+   {
+     return 0;
+   }
+ 
+   public ImageReaderSpi getOriginatingProvider()
+   {
+     return originatingProvider;
+   }
+ 
+   public abstract IIOMetadata getStreamMetadata()
+     throws IOException;
+ 
+   public int getThumbnailHeight(int imageIndex, int thumbnailIndex)
+     throws IOException
+   {
+     return readThumbnail(imageIndex, thumbnailIndex).getHeight();
+   }
+ 
+   public int getThumbnailWidth(int imageIndex, int thumbnailIndex)
+     throws IOException
+   {
+     return readThumbnail(imageIndex, thumbnailIndex).getWidth();
+   }
+ 
+   public int getTileGridXOffset(int imageIndex)
+     throws IOException
+   {
+     return 0;
+   }
+ 
+   public int getTileGridYOffset(int imageIndex)
+     throws IOException
+   {
+     return 0;
+   }
+ 
+   public int getTileHeight(int imageIndex)
+     throws IOException
+   {
+     return getHeight(imageIndex);
+   }
+ 
+   public int getTileWidth(int imageIndex)
+     throws IOException
+   {
+     return getWidth(imageIndex);
+   }
+ 
+   public abstract int getWidth(int imageIndex)
+     throws IOException;
+ 
+   public boolean hasThumbnails(int imageIndex)
+     throws IOException
+   {
+     return getNumThumbnails(imageIndex) > 0;
+   }
+ 
+   public boolean isIgnoringMetadata()
+   {
+     return ignoreMetadata;
+   }
+ 
+   public boolean isImageTiled(int imageIndex)
+     throws IOException
+   {
+     return false;
+   }
+ 
+   public boolean isRandomAccessEasy(int imageIndex)
+     throws IOException
+   {
+     return false;
+   }
+ 
+   public boolean isSeekForwardOnly()
+   {
+     return seekForwardOnly;
+   }
+ 
+   protected void processImageComplete()
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadProgressListener listener = (IIOReadProgressListener) it.next();
+ 	listener.imageComplete (this);
+       }
+   }
+ 
+   protected void processImageProgress(float percentageDone)
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadProgressListener listener = (IIOReadProgressListener) it.next();
+ 	listener.imageProgress(this, percentageDone);
+       }
+   }
+ 
+   protected void processImageStarted(int imageIndex)
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadProgressListener listener = (IIOReadProgressListener) it.next();
+ 	listener.imageStarted(this, imageIndex);
+       }
+   }
+ 
+   protected void processImageUpdate(BufferedImage image, int minX, int minY,
+ 				    int width, int height, int periodX,
+ 				    int periodY, int[] bands)
+   {
+     Iterator it = updateListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next();
+ 	listener.imageUpdate(this, image, minX, minY, width, height, periodX,
+ 			     periodY, bands);
+       }
+   }
+ 
+   protected void processPassComplete(BufferedImage image)
+   {
+     Iterator it = updateListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next();
+ 	listener.passComplete(this, image);
+       }
+   }
+ 
+   protected void processPassStarted(BufferedImage image, int pass, int minPass,
+ 				    int maxPass, int minX, int minY,
+ 				    int periodX, int periodY, int[] bands)
+   {
+     Iterator it = updateListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next();
+ 	listener.passStarted(this, image, pass, minPass, maxPass, minX, minY,
+ 			     periodX, periodY, bands);
+       }
+   }
+ 
+   protected void processReadAborted()
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadProgressListener listener = (IIOReadProgressListener) it.next();
+ 	listener.readAborted(this);
+       }
+   }
+ 
+   protected void processSequenceComplete()
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadProgressListener listener = (IIOReadProgressListener) it.next();
+ 	listener.sequenceComplete(this);
+       }
+   }
+ 
+   protected void processSequenceStarted(int minIndex)
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadProgressListener listener = (IIOReadProgressListener) it.next();
+ 	listener.sequenceStarted(this, minIndex);
+       }
+   }
+ 
+   protected void processThumbnailComplete()
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadProgressListener listener = (IIOReadProgressListener) it.next();
+ 	listener.thumbnailComplete(this);
+       }
+   }
+ 
+   protected void processThumbnailPassComplete(BufferedImage thumbnail)
+   {
+     Iterator it = updateListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next();
+ 	listener.thumbnailPassComplete(this, thumbnail);
+       }
+   }
+ 
+   protected void processThumbnailPassStarted(BufferedImage thumbnail, int pass,
+ 					     int minPass, int maxPass, int minX,
+ 					     int minY, int periodX, int periodY,
+ 					     int[] bands)
+   {
+     Iterator it = updateListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next();
+ 	listener.thumbnailPassStarted(this, thumbnail, pass, minPass, maxPass,
+ 				      minX, minY, periodX, periodY, bands);
+       }
+   }
+   
+   protected void processThumbnailProgress(float percentageDone)
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadProgressListener listener = (IIOReadProgressListener) it.next();
+ 	listener.thumbnailProgress(this, percentageDone);
+       }
+   }
+ 
+   protected void processThumbnailStarted(int imageIndex, int thumbnailIndex)
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadProgressListener listener = (IIOReadProgressListener) it.next();
+ 	listener.thumbnailStarted(this, imageIndex, thumbnailIndex);
+       }
+   }
+ 
+   protected void processThumbnailUpdate(BufferedImage image, int minX, int minY,
+ 					int width, int height, int periodX,
+ 					int periodY, int[] bands)
+   {
+     Iterator it = updateListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next();
+ 	listener.thumbnailUpdate(this, image, minX, minY, width, height,
+ 				 periodX, periodY, bands);
+       }
+   }
+ 
+   protected void processWarningOccurred(String warning)
+   {
+     Iterator it = warningListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOReadWarningListener listener = (IIOReadWarningListener) it.next();
+ 	listener.warningOccurred(this, warning);
+       }
+   }
+ 
+   public abstract BufferedImage read(int imageIndex, ImageReadParam param)
+     throws IOException;
+ 
+   public boolean readerSupportsThumbnails()
+   {
+     return false;
+   }
+ 
+   public Raster readRaster(int imageIndex, ImageReadParam param)
+     throws IOException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public BufferedImage readThumbnail(int imageIndex, int thumbnailIndex)
+     throws IOException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   public void removeAllIIOReadProgressListeners()
+   {
+     progressListeners.clear();
+   }
+ 
+   public void removeAllIIOReadUpdateListeners()
+   {
+     updateListeners.clear();
+   }
+ 
+   public void removeAllIIOReadWarningListeners()
+   {
+     warningListeners.clear();
+   }
+   
+   public void removeIIOReadProgressListener(IIOReadProgressListener listener) 
+   {
+     if (listener == null)
+       return;
+  
+     progressListeners.remove(listener);
+   }
+   
+   public void removeIIOReadUpdateListener(IIOReadUpdateListener listener) 
+   {
+     if (listener == null)
+       return;
+     
+     updateListeners.remove(listener);
+   }
+   
+   public void removeIIOReadWarningListener(IIOReadWarningListener listener)
+   {
+     if (listener == null)
+       return;
+     
+     warningListeners.remove(listener);
+   }
+   
+   public void setLocale(Locale locale)
+   {
+     if (locale != null)
+       {
+ 	// Check if its a valid locale.
+ 	boolean found = false;
+ 
+ 	if (availableLocales != null)
+ 	  for (int i = availableLocales.length - 1; i >= 0; --i)
+ 	    if (availableLocales[i].equals(locale))
+ 	      found = true;
+ 
+ 	if (! found)
+ 	  throw new IllegalArgumentException("looale not available");
+       }
+ 
+     this.locale = locale;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/ImageTranscoder.java gcc-4.0.0/libjava/javax/imageio/ImageTranscoder.java
*** gcc-3.4.3/libjava/javax/imageio/ImageTranscoder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/ImageTranscoder.java	Sat Nov  6 18:08:58 2004
***************
*** 0 ****
--- 1,54 ----
+ /* ImageTranscoder.java -- Image metadata transcoder.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import javax.imageio.metadata.IIOMetadata;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface ImageTranscoder
+ {
+   IIOMetadata convertImageMetadata(IIOMetadata inData,
+ 		                   ImageTypeSpecifier imageType,
+ 				   ImageWriteParam param);
+ 
+   IIOMetadata convertStreamMetadata(IIOMetadata inData,
+ 				    ImageWriteParam param);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/ImageTypeSpecifier.java gcc-4.0.0/libjava/javax/imageio/ImageTypeSpecifier.java
*** gcc-3.4.3/libjava/javax/imageio/ImageTypeSpecifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/ImageTypeSpecifier.java	Sat Nov  6 18:08:58 2004
***************
*** 0 ****
--- 1,94 ----
+ /* ImageTypeSpecifier.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import java.awt.image.ColorModel;
+ import java.awt.image.RenderedImage;
+ import java.awt.image.SampleModel;
+ 
+ public class ImageTypeSpecifier
+ {
+   protected ColorModel colorModel;
+   protected SampleModel sampleModel;
+ 
+   public ImageTypeSpecifier(ColorModel colorModel, SampleModel sampleModel)
+   {
+     if (colorModel == null)
+       throw new IllegalArgumentException("colorModel may not be null");
+ 
+     if (sampleModel == null)
+       throw new IllegalArgumentException("sampleModel may not be null");
+ 
+     if (!colorModel.isCompatibleSampleModel(sampleModel))
+       throw new IllegalArgumentException
+         ("sample Model not compatible with colorModel");
+     
+     this.colorModel = colorModel;
+     this.sampleModel = sampleModel;
+   }
+ 
+   public ImageTypeSpecifier(RenderedImage image)
+   {
+     if (image == null)
+       throw new IllegalArgumentException("image may not be null");
+     
+     this.colorModel = image.getColorModel();
+     this.sampleModel = image.getSampleModel();
+   }
+ 
+   public ColorModel getColorModel()
+   {
+     return colorModel;
+   }
+ 
+   public int getNumBands()
+   {
+     return sampleModel.getNumBands();
+   }
+ 
+   public int getNumComponents()
+   {
+     return colorModel.getNumComponents();
+   }
+ 
+   public SampleModel getSampleModel()
+   {
+     return sampleModel;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/ImageWriteParam.java gcc-4.0.0/libjava/javax/imageio/ImageWriteParam.java
*** gcc-3.4.3/libjava/javax/imageio/ImageWriteParam.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/ImageWriteParam.java	Sat Nov  6 18:08:58 2004
***************
*** 0 ****
--- 1,398 ----
+ /* ImageWriteParam.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import java.awt.Dimension;
+ import java.util.Locale;
+ 
+ public class ImageWriteParam extends IIOParam
+ {
+   public static final int MODE_DISABLED = 0;
+   public static final int MODE_DEFAULT = 1;
+   public static final int MODE_EXPLICIT = 2;
+   public static final int MODE_COPY_FROM_METADATA = 3;
+   
+   protected boolean canOffsetTiles;
+   protected boolean canWriteCompressed;
+   protected boolean canWriteProgressive;
+   protected boolean canWriteTiles;
+   protected int compressionMode = MODE_COPY_FROM_METADATA;
+   protected float compressionQuality;
+   protected String compressionType;
+   protected String[] compressionTypes;
+   protected Locale locale;
+   protected Dimension[] preferredTileSizes;
+   protected int progressiveMode = MODE_COPY_FROM_METADATA;
+   protected int tileGridXOffset;
+   protected int tileGridYOffset;
+   protected int tileHeight;
+   protected int tileWidth;
+   protected int tilingMode;
+   protected boolean tilingSet;
+ 
+   /**
+    * Creates an empty <code>ImageWriteParam</code> object.
+    * The subclass is responsible to initialize all fields.
+    */
+   protected ImageWriteParam()
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Creates an <code>ImageWriteParam</code> object with the given locale.
+    *
+    * @param locale the locale to use for user visible strings
+    */
+   public ImageWriteParam(Locale locale)
+   {
+     this.locale = locale;
+   }
+ 
+   public float getBitRate(float quality)
+   {
+     checkNotExplicitCompression();
+     checkCompressionTypesSet();
+ 
+     return -1.0f;
+   }
+ 
+   private void checkSupportsCompression()
+   {
+     if (! canWriteCompressed())
+       throw new UnsupportedOperationException("compression not supported");
+   }
+ 
+   private void checkNotExplicitCompression()
+   {
+     if (getCompressionMode() != MODE_EXPLICIT)
+       throw new IllegalStateException("compression mode is not MODE_EXPLICIT");
+   }
+   
+   private void checkCompressionTypesSet()
+   {
+     if (getCompressionType() == null
+ 	&& getCompressionTypes() != null)
+       throw new IllegalStateException("no compression type set");
+   }
+ 
+   private void checkSupportsProgressiveEncoding()
+   {
+     if (! canWriteProgressive())
+       throw new UnsupportedOperationException
+ 	("progressive output not supported");
+   }
+   
+   private void checkSupportsTiling()
+   {
+     if (! canWriteTiles())
+       throw new UnsupportedOperationException("tiling not supported");
+   }
+ 
+   private void checkNotExplicitTiling()
+   {
+     if (getTilingMode() != MODE_EXPLICIT)
+       throw new IllegalStateException("tiling mode not MODE_EXPLICIT");
+   }
+ 
+   private void checkTilingInitialized()
+   {
+     if (! tilingSet)
+       throw new IllegalStateException("tiling parameters not set");
+   }
+ 
+   private void checkMode(int mode)
+   {
+     if (mode < MODE_DISABLED || mode > MODE_COPY_FROM_METADATA)
+       throw new IllegalArgumentException("mode not supported");
+   }
+ 
+   public boolean canOffsetTiles()
+   {
+     return canOffsetTiles;
+   }
+ 
+   public boolean canWriteCompressed()
+   {
+     return canWriteCompressed;
+   }
+ 
+   public boolean canWriteProgressive()
+   {
+     return canWriteProgressive;
+   }
+ 
+   public boolean canWriteTiles()
+   {
+     return canWriteTiles;
+   }
+ 
+   public int getCompressionMode()
+   {
+     checkSupportsCompression();
+ 
+     return compressionMode;
+   }
+ 
+   public float getCompressionQuality()
+   {
+     checkNotExplicitCompression();
+     checkCompressionTypesSet();
+ 
+     return compressionQuality;
+   }
+ 
+   public String[] getCompressionQualityDescriptions()
+   {
+     checkNotExplicitCompression();
+     checkCompressionTypesSet();;
+     
+     return null;
+   }
+ 
+   public float[] getCompressionQualityValues()
+   {
+     checkNotExplicitCompression();
+     checkCompressionTypesSet();;
+     
+     return null;
+   }
+ 
+   public String getCompressionType()
+   {
+     checkNotExplicitCompression();
+ 
+     return compressionType;
+   }
+ 
+   public String[] getCompressionTypes()
+   {
+     checkSupportsCompression();
+ 
+     return compressionTypes != null ? (String[]) compressionTypes.clone() : null;
+   }
+ 
+   public Locale getLocale()
+   {
+     return locale;
+   }
+ 
+   public String getLocalizedCompressionTypeName()
+   {
+     checkNotExplicitCompression();
+     checkCompressionTypesSet();
+ 
+     return getCompressionType();
+   }
+ 
+   public Dimension[] getPreferredTileSizes()
+   {
+     checkSupportsTiling();
+ 
+     return preferredTileSizes;
+   }
+ 
+   public int getProgressiveMode()
+   {
+     checkSupportsProgressiveEncoding();
+ 
+     return progressiveMode;
+   }
+ 
+   public int getTileGridXOffset()
+   {
+     checkNotExplicitTiling();
+     checkTilingInitialized();
+ 
+     return tileGridXOffset;
+   }
+ 
+   public int getTileGridYOffset()
+   {
+     checkNotExplicitTiling();
+     checkTilingInitialized();
+ 
+     return tileGridYOffset;
+   }
+ 
+   public int getTileHeight()
+   {
+     checkNotExplicitTiling();
+     checkTilingInitialized();
+ 
+     return tileHeight;
+   }
+ 
+   public int getTileWidth()
+   {
+     checkNotExplicitTiling();
+     checkTilingInitialized();
+ 
+     return tileWidth;
+   }
+ 
+   public int getTilingMode()
+   {
+     checkSupportsTiling();
+ 
+     return tilingMode;
+   }
+ 
+   public boolean isCompressionLossless()
+   {
+     checkNotExplicitCompression();
+     checkCompressionTypesSet();
+ 
+     return true;
+   }
+ 
+   public void setCompressionMode(int mode)
+   {
+     checkSupportsCompression();
+     checkMode(mode);
+     
+     compressionMode = mode;
+     
+     if (mode == MODE_EXPLICIT)
+       unsetCompression();
+   }
+ 
+   public void setCompressionQuality(float quality)
+   {
+     checkNotExplicitCompression();
+     checkCompressionTypesSet();
+ 
+     if (quality < 0.0f || quality > 1.0f)
+       throw new IllegalArgumentException("quality out of range");
+ 
+     compressionQuality = quality;
+   }
+ 
+   public void setCompressionType(String compressionType)
+   {
+     checkNotExplicitCompression();
+ 
+     String[] types = getCompressionTypes();
+ 
+     if (types == null)
+       throw new UnsupportedOperationException("no settable compression types");
+     
+     if (compressionType == null)
+       this.compressionType = null;
+ 
+     for (int i = types.length - 1; i >= 0; --i)
+       if (types[i].equals(compressionType))
+ 	{
+ 	  this.compressionType = compressionType;
+ 	  return;
+ 	}
+     
+     throw new IllegalArgumentException("unknown compression type");
+   }
+ 
+   public void setProgressiveMode(int mode)
+   {
+     checkSupportsProgressiveEncoding();
+     checkMode(mode);
+     
+     progressiveMode = mode;
+   }
+ 
+   public void setTiling(int tileWidth, int tileHeight,
+ 		        int tileGridXOffset, int tileGridYOffset)
+   {
+     checkNotExplicitTiling();
+ 
+     if (! canOffsetTiles
+ 	&& tileGridXOffset != 0
+ 	&& tileGridYOffset != 0)
+       throw new UnsupportedOperationException("tile offsets not supported");
+ 
+     if (tileWidth < 0 || tileHeight < 0)
+       throw new IllegalArgumentException("negative tile dimension");
+ 
+     if (preferredTileSizes != null)
+       {
+ 	boolean found = false;
+ 
+ 	for (int i = 0; i < preferredTileSizes.length; i += 2)
+ 	  {
+ 	    if (tileWidth >= preferredTileSizes[i].width
+ 		&& tileWidth <= preferredTileSizes[i + 1].width
+ 		&& tileHeight >= preferredTileSizes[i].height
+ 		&& tileHeight <= preferredTileSizes[i + 1].height)
+ 	      found = true;
+ 	  }
+ 
+ 	if (! found)
+           throw new IllegalArgumentException("illegal tile size");
+       }
+ 
+     this.tilingSet = true;
+     this.tileWidth = tileWidth;
+     this.tileHeight = tileHeight;
+     this.tileGridXOffset = tileGridXOffset;
+     this.tileGridYOffset = tileGridYOffset;
+   }
+ 
+   public void setTilingMode(int mode)
+   {
+     checkSupportsTiling();
+     checkMode(mode);
+     tilingMode = mode;
+   }
+ 
+   public void unsetCompression()
+   {
+     checkNotExplicitCompression();
+     
+     compressionType = null;
+     compressionQuality = 1.0F;
+   }
+ 
+   public void unsetTiling()
+   {
+     checkNotExplicitTiling();
+     
+     tileWidth = 0;
+     tileHeight = 0;
+     tileGridXOffset = 0;
+     tileGridYOffset = 0;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/ImageWriter.java gcc-4.0.0/libjava/javax/imageio/ImageWriter.java
*** gcc-3.4.3/libjava/javax/imageio/ImageWriter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/ImageWriter.java	Mon Feb  7 13:22:35 2005
***************
*** 0 ****
--- 1,390 ----
+ /* ImageWriter.java -- Encodes raster images.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio;
+ 
+ import java.awt.Dimension;
+ import java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Locale;
+ 
+ import javax.imageio.event.IIOWriteProgressListener;
+ import javax.imageio.event.IIOWriteWarningListener;
+ import javax.imageio.metadata.IIOMetadata;
+ 
+ import javax.imageio.spi.ImageWriterSpi;
+ 
+ public abstract class ImageWriter
+   implements ImageTranscoder
+ {
+   private boolean aborted;
+   
+   protected Locale[] availableLocales;
+   protected Locale locale;
+   protected ImageWriterSpi originatingProvider;
+   protected Object output;
+   protected List progressListeners = new ArrayList();
+   protected List warningListeners = new ArrayList();
+   protected List warningLocales = new ArrayList();
+ 
+   protected ImageWriter(ImageWriterSpi originatingProvider)
+   {
+     this.originatingProvider = originatingProvider;
+   }
+ 
+   private void checkOutputSet()
+   {
+     if (output == null)
+       throw new IllegalStateException("no output set");
+   }
+   
+   public void abort()
+   {
+     aborted = true;
+   }
+ 
+   protected boolean abortRequested()
+   {
+     return aborted;
+   }
+ 
+   public void addIIOWriteProgressListener(IIOWriteProgressListener listener)
+   {
+     if (listener == null)
+       return;
+     
+     progressListeners.add(listener);
+   }
+   
+   public void addIIOWriteWarningListener (IIOWriteWarningListener listener)
+   {
+     if (listener == null)
+       return;
+     
+     warningListeners.add(listener);
+   }
+ 
+   public boolean canInsertEmpty(int imageIndex)
+     throws IOException
+   {
+     checkOutputSet();
+     return false;
+   }
+ 
+   public boolean canInsertImage(int imageIndex)
+     throws IOException
+   {
+     checkOutputSet();
+     return false;
+   }
+ 
+   public boolean canRemoveImage(int imageIndex)
+     throws IOException
+   {
+     checkOutputSet();
+     return false;
+   }
+ 
+   public boolean canReplaceImageMetadata(int imageIndex)
+     throws IOException
+   {
+     checkOutputSet();
+     return false;
+   }
+ 
+   public boolean canReplacePixels(int imageIndex)
+     throws IOException
+   {
+     checkOutputSet();
+     return false;
+   }
+ 
+   public boolean canReplaceStreamMetadata()
+     throws IOException
+   {
+     checkOutputSet();
+     return false;
+   }
+ 
+   public boolean canWriteEmpty()
+     throws IOException
+   {
+     checkOutputSet();
+     return false;
+   }
+ 
+   public boolean canWriteRasters()
+   {
+     return false;
+   }
+ 
+   public boolean canWriteSequence()
+   {
+     return false;
+   }
+ 
+   protected void clearAbortRequest()
+   {
+     aborted = false;
+   }
+   
+   public abstract IIOMetadata convertImageMetadata (IIOMetadata inData,
+ 		                                    ImageTypeSpecifier imageType,
+ 				                    ImageWriteParam param);
+ 
+   public abstract IIOMetadata convertStreamMetadata (IIOMetadata inData,
+ 					             ImageWriteParam param);
+ 
+   public void dispose()
+   {
+     // The default implementation is empty. Subclasses have to overwrite it.
+   }
+   
+   public Locale[] getAvailableLocales()
+   {
+     return availableLocales;
+   }
+ 
+   public abstract IIOMetadata getDefaultImageMetadata (ImageTypeSpecifier imageType, ImageWriteParam param);
+ 
+   public abstract IIOMetadata getDefaultStreamMetadata (ImageWriteParam param);
+ 
+   public ImageWriteParam getDefaultWriteParam()
+   {
+     return new ImageWriteParam(getLocale());
+   }
+ 
+   public Locale getLocale()
+   {
+     return locale;
+   }
+ 
+   public int getNumThumbnailsSupported (ImageTypeSpecifier imageType, ImageWriteParam param,
+ 		                        IIOMetadata streamMetadata, IIOMetadata imageMetadata)
+   {
+     return 0;
+   }
+ 
+   public ImageWriterSpi getOriginatingProvider()
+   {
+     return originatingProvider;
+   }
+ 
+   public Object getOutput()
+   {
+     return output;
+   }
+ 
+   public Dimension[] getPreferredThumbnailSizes (ImageTypeSpecifier imageType,
+ 		                                 ImageWriteParam param,
+ 						 IIOMetadata streamMetadata,
+ 						 IIOMetadata imageMetadata)
+   {
+     return null;
+   }
+ 
+   protected void processImageComplete()
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOWriteProgressListener listener = (IIOWriteProgressListener) it.next();
+ 	listener.imageComplete(this);
+       }
+   }
+ 
+   protected void processImageProgress(float percentageDone)
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOWriteProgressListener listener = (IIOWriteProgressListener) it.next();
+ 	listener.imageProgress(this, percentageDone);
+       }
+   }
+ 
+   protected void processImageStarted(int imageIndex)
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOWriteProgressListener listener = (IIOWriteProgressListener) it.next();
+ 	listener.imageStarted(this, imageIndex);
+       }
+   }
+ 
+   protected void processThumbnailComplete()
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOWriteProgressListener listener = (IIOWriteProgressListener) it.next();
+ 	listener.thumbnailComplete(this);
+       }
+   }
+ 
+   protected void processThumbnailProgress(float percentageDone)
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOWriteProgressListener listener = (IIOWriteProgressListener) it.next();
+ 	listener.thumbnailProgress(this, percentageDone);
+       }
+   }
+ 
+   protected void processThumbnailStarted(int imageIndex, int thumbnailIndex)
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOWriteProgressListener listener = (IIOWriteProgressListener) it.next();
+ 	listener.thumbnailStarted(this, imageIndex, thumbnailIndex);
+       }
+   }
+ 
+   protected void processWarningOccurred(int imageIndex, String warning)
+   {
+     Iterator it = warningListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOWriteWarningListener listener = (IIOWriteWarningListener) it.next();
+ 	listener.warningOccurred(this, imageIndex, warning);
+       }
+   }
+ 
+   protected void processWriteAborted() 
+   {
+     Iterator it = progressListeners.iterator();
+ 
+     while (it.hasNext())
+       {
+ 	IIOWriteProgressListener listener = (IIOWriteProgressListener) it.next();
+ 	listener.writeAborted(this);
+       }
+   }
+ 
+   public void removeAllIIOWriteProgressListeners()
+   {
+     progressListeners.clear();
+   }
+ 
+   public void removeAllIIOWriteWarningListeners()
+   {
+     progressListeners.clear();
+   }
+   
+   public void removeIIOWriteProgressListener (IIOWriteProgressListener listener) 
+   {
+     if (listener == null)
+       return;
+     
+     progressListeners.remove(listener);
+   }
+   
+   public void removeIIOWriteWarningListener (IIOWriteWarningListener listener)
+   {
+     if (listener == null)
+       return;
+     
+     warningListeners.remove(listener);
+   }
+   
+   public void reset()
+   {
+     setOutput(null);
+     setLocale(null);
+     removeAllIIOWriteWarningListeners();
+     removeAllIIOWriteProgressListeners();
+     clearAbortRequest();
+   }
+   
+   public void setLocale(Locale locale)
+   {
+     if (locale != null)
+       {
+ 	// Check if its a valid locale.
+ 	boolean found = false;
+ 
+ 	if (availableLocales != null)
+ 	  for (int i = availableLocales.length - 1; i >= 0; --i)
+ 	    if (availableLocales[i].equals(locale))
+ 	      found = true;
+ 
+ 	if (! found)
+ 	  throw new IllegalArgumentException("looale not available");
+       }
+ 
+     this.locale = locale;
+   }
+ 
+   public void setOutput(Object output)
+   {
+     if (output != null)
+       {
+ 	// Check if its a valid output object.
+ 	boolean found = false;
+ 	Class[] types = null;
+ 
+ 	if (originatingProvider != null)
+ 	  types = originatingProvider.getOutputTypes();
+         
+ 	if (types != null)
+ 	  for (int i = types.length - 1; i >= 0; --i)
+             if (types[i].isInstance(output))
+               found = true;
+ 
+ 	if (! found)
+ 	  throw new IllegalArgumentException("output type not available");
+       }
+ 
+     this.output = output;
+   }
+ 
+   public abstract void write (IIOMetadata streamMetadata, IIOImage image, ImageWriteParam param)
+     throws IOException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/event/IIOReadProgressListener.java gcc-4.0.0/libjava/javax/imageio/event/IIOReadProgressListener.java
*** gcc-3.4.3/libjava/javax/imageio/event/IIOReadProgressListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/event/IIOReadProgressListener.java	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,117 ----
+ /* IIOReadProgressListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.event;
+ 
+ import java.util.EventListener;
+ 
+ import javax.imageio.ImageReader;
+ 
+ public interface IIOReadProgressListener extends EventListener
+ {
+   /**
+    * Reports that the current image read operation has completed.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    */
+   void imageComplete(ImageReader source);
+ 
+   /**
+    * Reports the approximate percentage of completions of this image read
+    * operation.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param percentageDone the approximate percentage of encoding completed
+    */
+   void imageProgress(ImageReader source, float percentageDone);
+ 
+   /**
+    * Reports that the current image read operation has started.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param imageIndex the index of the image to read
+    */
+   void imageStarted(ImageReader source, int imageIndex);
+ 
+   /**
+    * Reports that a read operation has been aborted.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    */
+   void readAborted(ImageReader source);
+ 
+   /**
+    * Reports that a sequence of read operationshas completed.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    */
+   void sequenceComplete(ImageReader source);
+ 
+   /**
+    * Reports that a sequence of read operations is beginning.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param minIndex the index of the first image to be read
+    */
+   void sequenceStarted(ImageReader source, int minIndex);
+ 
+   /**
+    * Reports that a thumbnail read operation has completed.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    */
+   void thumbnailComplete(ImageReader source);
+ 
+   /**
+    * Reports the approximate percentage of completion of a thumbnail read
+    * operation.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param percentageDone the approximate percentage of encoding completed
+    */
+   void thumbnailProgress(ImageReader source, float percentageDone);
+ 
+   /**
+    * Reports that a thumbnail read operation is beginning.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param imageIndex the index of the image being read
+    * @param thumbnailIndex the index of the thumbnail being read
+    */
+   void thumbnailStarted(ImageReader source, int imageIndex, int thumbnailIndex);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/event/IIOReadUpdateListener.java gcc-4.0.0/libjava/javax/imageio/event/IIOReadUpdateListener.java
*** gcc-3.4.3/libjava/javax/imageio/event/IIOReadUpdateListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/event/IIOReadUpdateListener.java	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,133 ----
+ /* IIOReadUpdateListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.event;
+ 
+ import java.awt.image.BufferedImage;
+ import java.util.EventListener;
+ 
+ import javax.imageio.ImageReader;
+ 
+ public interface IIOReadUpdateListener extends EventListener
+ {
+   /**
+    * Reports that a given region of the image has been updated.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param image the BufferedImage being updated
+    * @param minX the X coordinate of the leftmost updated column of pixels
+    * @param minY the Y coordinate of the uppermost updated row of pixels
+    * @param width the number of updated pixels horizontally
+    * @param height the number of updated pixels vertically
+    * @param periodX the horizontal spacing between updated pixels; a value of 1 means no gaps
+    * @param periodY the vertical spacing between updated pixels; a value of 1 means no gaps
+    * @param bands an array of <code>int</code>s indicating which bands are being updated
+    */
+   void imageUpdate(ImageReader source, BufferedImage image, int minX,
+                    int minY, int width, int height, int periodX, int periodY,
+                    int[] bands);
+ 
+   /**
+    * Reports that the current read operation has completed a progressive pass.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param image the BufferedImage being updated
+    */
+   void passComplete(ImageReader source, BufferedImage image);
+ 
+   /**
+    * Reports that the current read operation is about to begin a progressive pass.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param image the BufferedImage being updated
+    * @param pass the numer of the pass that is about to begin, starting with 0
+    * @param minPass the index of the first pass that will be decoded
+    * @param maxPass the index of the last pass that will be decoded
+    * @param minX the X coordinate of the leftmost updated column of pixels
+    * @param minY the Y coordinate of the uppermost updated row of pixels
+    * @param periodX the horizontal spacing between updated pixels; a value of 1 means no gaps
+    * @param periodY the vertical spacing between updated pixels; a value of 1 means no gaps
+    * @param bands an array of <code>int</code>s indicating which bands are being updated
+    */
+   void passStarted(ImageReader source, BufferedImage image, int pass,
+                    int minPass, int maxPass, int minX, int minY, int periodX,
+                    int periodY, int[] bands);
+ 
+   /**
+    * Reports that the current thumbnail read operation has completed a progressive pass.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param image the BufferedImage being updated
+    */
+   void thumbnailPassComplete(ImageReader source, BufferedImage image);
+ 
+   /**
+    * Reports that the current thumbnail read operation is about to begin a progressive pass.
+    * 
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param image the BufferedImage being updated
+    * @param pass the numer of the pass that is about to begin, starting with 0
+    * @param minPass the index of the first pass that will be decoded
+    * @param maxPass the index of the last pass that will be decoded
+    * @param minX the X coordinate of the leftmost updated column of pixels
+    * @param minY the Y coordinate of the uppermost updated row of pixels
+    * @param periodX the horizontal spacing between updated pixels; a value of 1 means no gaps
+    * @param periodY the vertical spacing between updated pixels; a value of 1 means no gaps
+    * @param bands an array of <code>int</code>s indicating which bands are being updated
+    */
+   void thumbnailPassStarted(ImageReader source, BufferedImage image, int pass,
+                             int minPass, int maxPass, int minX, int minY,
+                             int periodX, int periodY, int[] bands);
+ 
+   /**
+    * Reports that a given region of a thumbnail image has been updated.
+    *
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param image the BufferedImage being updated
+    * @param minX the X coordinate of the leftmost updated column of pixels
+    * @param minY the Y coordinate of the uppermost updated row of pixels
+    * @param width the number of updated pixels horizontally
+    * @param height the number of updated pixels vertically
+    * @param periodX the horizontal spacing between updated pixels; a value of 1 means no gaps
+    * @param periodY the vertical spacing between updated pixels; a value of 1 means no gaps
+    * @param bands an array of <code>int</code>s indicating which bands are being updated
+    */
+   void thumbnailUpdate(ImageReader source, BufferedImage image, int minX,
+                        int minY, int width, int height, int periodX,
+                        int periodY, int[] bands);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/event/IIOReadWarningListener.java gcc-4.0.0/libjava/javax/imageio/event/IIOReadWarningListener.java
*** gcc-3.4.3/libjava/javax/imageio/event/IIOReadWarningListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/event/IIOReadWarningListener.java	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,55 ----
+ /* IIOReadProgressListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.event;
+ 
+ import java.util.EventListener;
+ 
+ import javax.imageio.ImageReader;
+ 
+ public interface IIOReadWarningListener extends EventListener
+ {
+   /**
+    * Reports the occurrence of a non-fatal error in decoding.
+    * Decoding will continue after this method is called.
+    *
+    * @param source the <code>ImageReader</code> object calling this method
+    * @param warning the warning
+    */
+   void warningOccurred(ImageReader source, String warning);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/event/IIOWriteProgressListener.java gcc-4.0.0/libjava/javax/imageio/event/IIOWriteProgressListener.java
*** gcc-3.4.3/libjava/javax/imageio/event/IIOWriteProgressListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/event/IIOWriteProgressListener.java	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,102 ----
+ /* IIOWriteProgressListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.event;
+ 
+ import java.util.EventListener;
+ 
+ import javax.imageio.ImageWriter;
+ 
+ public interface IIOWriteProgressListener extends EventListener
+ {
+   /**
+    * Reports that an image write operation has completed.
+    * 
+    * @param source the <code>ImageWriter</code> object calling this method
+    */
+   void imageComplete(ImageWriter source);
+ 
+   /**
+    * Reports the approximate percentage of completion of an image write
+    * operation.
+    * 
+    * @param source the <code>ImageWriter</code> object calling this method
+    * @param percentageDone the approximate percentage of decoding completed
+    */
+   void imageProgress(ImageWriter source, float percentageDone);
+ 
+   /**
+    * Reports that a thumbnail write operation has started.
+    * 
+    * @param source the <code>ImageWriter</code> object calling this method
+    * @param imageIndex the index of the image being written
+    */
+   void imageStarted(ImageWriter source, int imageIndex);
+ 
+   /**
+    * Reports that a thumbnail write operation has completed.
+    * 
+    * @param source the <code>ImageWriter</code> object calling this method
+    */
+   void thumbnailComplete(ImageWriter source);
+ 
+   /**
+    * Reports the approximate percentage of completion of a thumbnail write
+    * operation.
+    * 
+    * @param source the <code>ImageWriter</code> object calling this method
+    * @param percentageDone the approximate percentage of decoding completed
+    */
+   void thumbnailProgress(ImageWriter source, float percentageDone);
+ 
+   /**
+    * Reports that a thumbnail write operation is beginning.
+    * 
+    * @param source the <code>ImageWriter</code> object calling this method
+    * @param imageIndex the index of the image being written
+    * @param thumnailIndex the index of the thumbnail being written
+    */
+   void thumbnailStarted(ImageWriter source, int imageIndex, int thumnailIndex);
+ 
+   /**
+    * Reports that an image write operation is aborted.
+    * 
+    * @param source the <code>ImageWriter</code> object calling this method
+    */
+   void writeAborted(ImageWriter source);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/event/IIOWriteWarningListener.java gcc-4.0.0/libjava/javax/imageio/event/IIOWriteWarningListener.java
*** gcc-3.4.3/libjava/javax/imageio/event/IIOWriteWarningListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/event/IIOWriteWarningListener.java	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,60 ----
+ /* IIOWriteWarningListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.event;
+ 
+ import java.util.EventListener;
+ 
+ import javax.imageio.ImageWriter;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface IIOWriteWarningListener extends EventListener
+ {
+   /**
+    * Reports the occurrence of a non-fatal error in encoding.
+    * Encoding will continue after this method is called.
+    *
+    * @param source the <code>ImageWriter</code> object calling this method
+    * @param imageIndex the index of the image generating this warning,
+    * starting with 0
+    * @param warning the warning
+    */
+   void warningOccurred(ImageWriter source, int imageIndex, String warning);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/event/package.html gcc-4.0.0/libjava/javax/imageio/event/package.html
*** gcc-3.4.3/libjava/javax/imageio/event/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/event/package.html	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.imageio.event 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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.imageio.event</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/IIOAttr.java gcc-4.0.0/libjava/javax/imageio/metadata/IIOAttr.java
*** gcc-3.4.3/libjava/javax/imageio/metadata/IIOAttr.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/IIOAttr.java	Mon Feb  7 13:22:35 2005
***************
*** 0 ****
--- 1,378 ----
+ /* IIOAttr.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.metadata;
+ 
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.TypeInfo;
+ import org.w3c.dom.UserDataHandler;
+ 
+ /**
+  * Simple Attr node for metadata trees
+  * 
+  * @author jlquinn
+  */
+ class IIOAttr implements Attr
+ {
+   String name;
+   String value;
+   IIOMetadataNode owner;
+   
+   public IIOAttr(String name, String value, IIOMetadataNode owner)
+   {
+     this.name = name;
+     this.value = value;
+     this.owner = owner;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Attr#getName()
+    */
+   public String getName()
+   {
+     return name;
+   }
+ 
+   public TypeInfo getSchemaTypeInfo()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Attr#getSpecified()
+    */
+   public boolean getSpecified()
+   {
+     // I don't think there can be default attrs in metadata
+     return true;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Attr#getValue()
+    */
+   public String getValue()
+   {
+     return value;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Attr#setValue(java.lang.String)
+    */
+   public void setValue(String value) throws DOMException
+   {
+     this.value = value;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Attr#getOwnerElement()
+    */
+   public Element getOwnerElement()
+   {
+     return owner;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNodeName()
+    */
+   public String getNodeName()
+   {
+     return name;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNodeValue()
+    */
+   public String getNodeValue() throws DOMException
+   {
+     return value;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#setNodeValue(java.lang.String)
+    */
+   public void setNodeValue(String nodeValue) throws DOMException
+   {
+     this.value = nodeValue;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNodeType()
+    */
+   public short getNodeType()
+   {
+     return ATTRIBUTE_NODE;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getParentNode()
+    */
+   public Node getParentNode()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getChildNodes()
+    */
+   public NodeList getChildNodes()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getFirstChild()
+    */
+   public Node getFirstChild()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getLastChild()
+    */
+   public Node getLastChild()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getPreviousSibling()
+    */
+   public Node getPreviousSibling()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNextSibling()
+    */
+   public Node getNextSibling()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getAttributes()
+    */
+   public NamedNodeMap getAttributes()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getOwnerDocument()
+    */
+   public Document getOwnerDocument()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#insertBefore(org.w3c.dom.Node, org.w3c.dom.Node)
+    */
+   public Node insertBefore(Node newChild, Node refChild) throws DOMException
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#replaceChild(org.w3c.dom.Node, org.w3c.dom.Node)
+    */
+   public Node replaceChild(Node newChild, Node oldChild) throws DOMException
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#removeChild(org.w3c.dom.Node)
+    */
+   public Node removeChild(Node oldChild) throws DOMException
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#appendChild(org.w3c.dom.Node)
+    */
+   public Node appendChild(Node newChild) throws DOMException
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#hasChildNodes()
+    */
+   public boolean hasChildNodes()
+   {
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#cloneNode(boolean)
+    */
+   public Node cloneNode(boolean deep)
+   {
+     return new IIOAttr(name, value, owner);
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#normalize()
+    */
+   public void normalize()
+   {
+   }
+ 
+   public boolean isDefaultNamespace(String namespaceURI)
+   {
+     throw new Error("not implemented");
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#isSupported(java.lang.String, java.lang.String)
+    */
+   public boolean isSupported(String feature, String version)
+   {
+     return false;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNamespaceURI()
+    */
+   public String getNamespaceURI()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getPrefix()
+    */
+   public String getPrefix()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#setPrefix(java.lang.String)
+    */
+   public void setPrefix(String prefix) throws DOMException
+   {
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getLocalName()
+    */
+   public String getLocalName()
+   {
+     return name;
+   }
+ 
+   public Object getUserData(String key)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#hasAttributes()
+    */
+   public boolean hasAttributes()
+   {
+     return false;
+   }
+ 
+   public boolean isId()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public String lookupNamespaceURI(String prefix)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public String lookupPrefix(String namespaceURI)
+   {
+     throw new Error("not implemented");
+   }
+   
+   public Object setUserData(String key, Object data, UserDataHandler handler)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public String getBaseURI()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public String getTextContent()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public void setTextContent(String textContent)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public short compareDocumentPosition(Node other)
+     throws DOMException
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Object getFeature(String feature, String version)
+   {
+     throw new Error("not implemented");
+   }
+   
+   public boolean isEqualNode(Node other)
+   {
+     throw new Error("not implemented");
+   }
+   
+   public boolean isSameNode(Node other)
+   {
+     throw new Error("not implemented");
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/IIOInvalidTreeException.java gcc-4.0.0/libjava/javax/imageio/metadata/IIOInvalidTreeException.java
*** gcc-3.4.3/libjava/javax/imageio/metadata/IIOInvalidTreeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/IIOInvalidTreeException.java	Mon Feb  7 13:22:35 2005
***************
*** 0 ****
--- 1,68 ----
+ /* IIOInvalidTreeException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.metadata;
+ 
+ import javax.imageio.IIOException;
+ 
+ import org.w3c.dom.Node;
+ 
+ public class IIOInvalidTreeException extends IIOException
+ {
+   private static final long serialVersionUID = -1314083172544132777L;
+ 
+   protected Node offendingNode;
+ 
+   public IIOInvalidTreeException(String message, Node offendingNode)
+   {
+     super(message);
+     this.offendingNode = offendingNode;
+   }
+ 
+   public IIOInvalidTreeException(String message, Throwable cause,
+ 				 Node offendingNode)
+   {
+     super(message, cause);
+     this.offendingNode = offendingNode;
+   }
+ 
+   public Node getOffendingNode()
+   {
+     return offendingNode;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadata.java gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadata.java
*** gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadata.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadata.java	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,213 ----
+ /* IIOMetadata.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.metadata;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class IIOMetadata
+ {
+   protected IIOMetadataController controller;
+   protected IIOMetadataController defaultController;
+   protected String[] extraMetadataFormatClassNames;
+   protected String[] extraMetadataFormatNames;
+   protected String nativeMetadataFormatClassName;
+   protected String nativeMetadataFormatName;
+   protected boolean standardFormatSupported;
+ 
+   /**
+    * Creates a <code>IIOMetaData</code> object.
+    */
+   protected IIOMetadata()
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Creates a <code>IIOMetaData</code> object with the given arguments.
+    *
+    * @param standardMetadataFormatSupported
+    * @param nativeMetadataFormatName
+    * @param nativeMetadataFormatClassName
+    * @param extraMetadataFormatNames
+    * @param extraMetadataFormatClassNames
+    *
+    * @throws IllegalArgumentException if extraMetadataFormatNames has length of
+    * zero or extraMetadataFormatNames and extraMetadataFormatClassNames are
+    * neither both null, not have the same length
+    */
+   protected IIOMetadata(boolean standardMetadataFormatSupported,
+                         String nativeMetadataFormatName,
+                         String nativeMetadataFormatClassName,
+                         String[] extraMetadataFormatNames,
+                         String[] extraMetadataFormatClassNames)
+   {
+     if (extraMetadataFormatNames != null
+         && extraMetadataFormatNames.length == 0)
+       throw new IllegalArgumentException
+         ("extraMetadataFormatNames may not be empty");
+ 
+     if (((extraMetadataFormatNames == null)
+          && (extraMetadataFormatClassNames != null))
+         || ((extraMetadataFormatNames != null)
+             && (extraMetadataFormatClassNames == null))
+         || ((extraMetadataFormatNames != null)
+             && (extraMetadataFormatClassNames != null)
+             && (extraMetadataFormatNames.length !=
+                 extraMetadataFormatClassNames.length)))
+       throw new IllegalArgumentException
+         ("extraMetadataFormatNames and extraMetadataFormatClassNames " +
+          "have different lengths");
+ 
+     this.standardFormatSupported = standardMetadataFormatSupported;
+     this.nativeMetadataFormatName = nativeMetadataFormatName;
+     this.nativeMetadataFormatClassName = nativeMetadataFormatClassName;
+     this.extraMetadataFormatNames = extraMetadataFormatNames;
+     this.extraMetadataFormatClassNames = extraMetadataFormatClassNames;
+   }
+ 
+   public boolean activateController()
+   {
+     if (! hasController())
+       return false;
+ 
+     return getDefaultController().activate(this);
+   }
+ 
+   public IIOMetadataController getController()
+   {
+     return controller;
+   }
+ 
+   public IIOMetadataController getDefaultController()
+   {
+     return defaultController;
+   }
+ 
+   public String[] getExtraMetadataFormatNames()
+   {
+     return (String[]) extraMetadataFormatNames.clone();
+   }
+ 
+   public IIOMetadataFormat getMetadataFormat(String formatName)
+   {
+     if (formatName == null)
+       throw new IllegalArgumentException("formatName may not be null");
+     
+     String formatClassName = null;
+ 
+     if (isStandardMetadataFormatSupported()
+ 	&& formatName.equals(nativeMetadataFormatName))
+       formatClassName = nativeMetadataFormatClassName;
+     else
+       {
+ 	String[] extraFormatNames = getExtraMetadataFormatNames();
+ 	
+ 	for (int i = extraFormatNames.length - 1; i >= 0; --i)
+ 	  if (extraFormatNames[i].equals(formatName))
+ 	    {
+ 	      formatClassName = extraFormatNames[i];
+ 	      break;
+ 	    }
+       }
+ 
+     if (formatClassName == null)
+       throw new IllegalArgumentException("unknown format");
+ 
+     IIOMetadataFormat format;
+     
+     try
+       {
+ 	format = (IIOMetadataFormat) Class.forName(formatClassName)
+ 					  .newInstance();
+       }
+     catch (Exception e)
+       {
+ 	IllegalStateException ise = new IllegalStateException();
+ 	ise.initCause(e);
+ 	throw ise;
+       }
+ 
+     return format;
+   }
+ 
+   public String[] getMetadataFormatNames()
+   {
+     String[] formatNames = getExtraMetadataFormatNames();
+     
+     if (isStandardMetadataFormatSupported())
+       {
+         // Combine native metadata format name and extra metadata format names
+ 	// into one String array.
+ 	String[] tmp = new String[formatNames.length + 1];
+ 	tmp[0] = getNativeMetadataFormatName();
+ 
+ 	for (int i = 1; i < tmp.length; ++i)
+ 	  tmp[i] = formatNames[i - 1];
+ 
+ 	formatNames = tmp;
+       }
+ 
+     return formatNames;
+   }
+ 
+   public String getNativeMetadataFormatName()
+   {
+     return nativeMetadataFormatName;
+   }
+ 
+   public boolean hasController()
+   {
+     return getController() != null;
+   }
+ 
+   public abstract boolean isReadOnly();
+ 
+   public boolean isStandardMetadataFormatSupported()
+   {
+     return standardFormatSupported;
+   }
+ 
+   public abstract void reset();
+ 
+   public void setController(IIOMetadataController controller)
+   {
+     this.controller = controller;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadataController.java gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadataController.java
*** gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadataController.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadataController.java	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,47 ----
+ /* IIOMetadataController.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.metadata;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface IIOMetadataController
+ {
+   boolean activate(IIOMetadata metadata);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadataFormat.java gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadataFormat.java
*** gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadataFormat.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadataFormat.java	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,124 ----
+ /* IIOMetadataFormat.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.metadata;
+ 
+ import java.util.Locale;
+ 
+ import javax.imageio.ImageTypeSpecifier;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface IIOMetadataFormat
+ {
+   int CHILD_POLICY_ALL = 1;
+   int CHILD_POLICY_CHOICE = 3;
+   int CHILD_POLICY_EMPTY = 0;
+   int CHILD_POLICY_MAX = 5;
+   int CHILD_POLICY_REPEAT = 5;
+   int CHILD_POLICY_SEQUENCE = 4;
+   int CHILD_POLICY_SOME = 2;
+   int DATATYPE_BOOLEAN = 1;
+   int DATATYPE_DOUBLE = 4;
+   int DATATYPE_FLOAT = 3;
+   int DATATYPE_INTEGER = 2;
+   int DATATYPE_STRING = 0;
+   int VALUE_ARBITRARY = 1;
+   int VALUE_ENUMERATION = 16;
+   int VALUE_LIST = 32;
+   int VALUE_NONE = 0;
+   int VALUE_RANGE = 2;
+   int VALUE_RANGE_MAX_INCLUSIVE = 10;
+   int VALUE_RANGE_MAX_INCLUSIVE_MASK = 8;
+   int VALUE_RANGE_MIN_INCLUSIVE = 6;
+   int VALUE_RANGE_MIN_INCLUSIVE_MASK = 4;
+   int VALUE_RANGE_MIN_MAX_INCLUSIVE = 14;
+ 
+   boolean canNodeAppear (String elementName, ImageTypeSpecifier imageType);
+ 
+   int getAttributeDataType (String elementName, String attrName);
+ 
+   String getAttributeDefaultValue (String elementName, String attrName);
+ 
+   String getAttributeDescription (String elementName, String attrName, Locale locale);
+ 
+   String[] getAttributeEnumerations (String elementName, String attrName);
+ 
+   int getAttributeListMaxLength (String elementName, String attrName);
+ 
+   int getAttributeListMinLength (String elementName, String attrName);
+ 
+   String getAttributeMaxValue (String elementName, String attrName);
+ 
+   String getAttributeMinValue (String elementName, String attrName);
+ 
+   String[] getAttributeNames (String elementName);
+ 
+   int getAttributeValueType (String elementName, String attrName);
+ 
+   String[] getChildNames (String elementName);
+ 
+   int getChildPolicy (String elementName);
+ 
+   String getElementDescription (String elementName, Locale locale);
+ 
+   int getElementMaxChildren (String elementName);
+ 
+   int getElementMinChildren (String elementName);
+ 
+   int getObjectArrayMaxLength (String elementName);
+ 
+   int getObjectArrayMinLength (String elementName);
+ 
+   Class getObjectClass (String elementName);
+ 
+   Object getObjectDefaultValue (String elementName);
+ 
+   Object[] getObjectEnumerations (String elementName);
+ 
+   Comparable getObjectMaxValue (String elementName);
+ 
+   Comparable getObjectMinValue (String elementName);
+ 
+   int getObjectValueType (String elementName);
+ 
+   String getRootName();
+ 
+   boolean isAttributeRequired (String elementName, String attrName);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadataFormatImpl.java gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadataFormatImpl.java
*** gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadataFormatImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadataFormatImpl.java	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,43 ----
+ /* IIOMetadataFormatImpl.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.metadata;
+ 
+ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat
+ {
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadataNode.java gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadataNode.java
*** gcc-3.4.3/libjava/javax/imageio/metadata/IIOMetadataNode.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/IIOMetadataNode.java	Mon Feb  7 13:22:35 2005
***************
*** 0 ****
--- 1,592 ----
+ /* IIOMetadataNode.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.metadata;
+ 
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.List;
+ 
+ import org.w3c.dom.Attr;
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.Element;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ import org.w3c.dom.TypeInfo;
+ import org.w3c.dom.UserDataHandler;
+ 
+ public class IIOMetadataNode
+   implements Element, NodeList
+ {
+   private String name;
+   private HashMap attrs = new HashMap();
+   private List children = new ArrayList();
+   private IIOMetadataNode parent;
+   private Object obj;
+   
+   public IIOMetadataNode()
+   {
+     // Do nothing here.
+   }
+   
+   public IIOMetadataNode(String nodename)
+   {
+     name = nodename;
+   }
+   
+   public Object getUserObject()
+   {
+     return obj;
+   }
+   
+   public void setUserObject(Object o)
+   {
+     obj = o;
+   }
+   
+   public short compareDocumentPosition(Node other)
+     throws DOMException
+   {
+     throw new Error("not implemented");
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#getAttribute(java.lang.String)
+    */
+   public String getAttribute(String name)
+   {
+     Attr anode = (Attr) attrs.get(name);
+     return anode != null ? anode.getValue() : null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#getAttributeNode(java.lang.String)
+    */
+   public Attr getAttributeNode(String name)
+   {
+     String val = getAttribute(name);
+     if (val != null)
+       return new IIOAttr(name, val, this);
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#getAttributeNodeNS(java.lang.String, java.lang.String)
+    */
+   public Attr getAttributeNodeNS(String namespaceURI, String localName)
+   {
+     return getAttributeNode(localName);
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#getAttributeNS(java.lang.String, java.lang.String)
+    */
+   public String getAttributeNS(String namespaceURI, String localName)
+   {
+     return getAttribute(localName);
+   }
+ 
+   public String getBaseURI()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   // Recursive function for assembling a node list.
+   private void getElementsRecurse(IIONodeList list, String name)
+   {
+     for (int i=0; i < children.size(); i++)
+     {
+       if (((Node)children.get(i)).getNodeName().equals(name))
+         list.children.add(children.get(i));
+       getElementsRecurse(list, name);
+     }
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#getElementsByTagName(java.lang.String)
+    */
+   public NodeList getElementsByTagName(String name)
+   {
+     IIONodeList list = new IIONodeList();
+     getElementsRecurse(list, name);
+     return list;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#getElementsByTagNameNS(java.lang.String, java.lang.String)
+    */
+   public NodeList getElementsByTagNameNS(String namespaceURI, String localName)
+   {
+     IIONodeList list = new IIONodeList();
+     getElementsRecurse(list, name);
+     return list;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#getTagName()
+    */
+   public String getTagName()
+   {
+     return name;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#hasAttribute(java.lang.String)
+    */
+   public boolean hasAttribute(String name)
+   {
+     return attrs.containsKey(name);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#hasAttributeNS(java.lang.String, java.lang.String)
+    */
+   public boolean hasAttributeNS(String namespaceURI, String localName)
+   {
+     return attrs.containsKey(localName);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#removeAttribute(java.lang.String)
+    */
+   public void removeAttribute(String name)
+   {
+     attrs.remove(name);
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#removeAttributeNode(org.w3c.dom.Attr)
+    */
+   public Attr removeAttributeNode(Attr oldAttr)
+   {
+     return (Attr)attrs.remove(oldAttr.getName());
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#removeAttributeNS(java.lang.String, java.lang.String)
+    */
+   public void removeAttributeNS(String namespaceURI, String localName)
+   {
+     removeAttribute(localName);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#setAttribute(java.lang.String, java.lang.String)
+    */
+   public void setAttribute(String name, String value)
+   {
+     Attr attr = (Attr) getAttributeNode(name);
+     if (attr != null)
+       attr.setValue(value);
+     else
+       attrs.put(name, new IIOAttr(name, value, this));
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#setAttributeNode(org.w3c.dom.Attr)
+    */
+   public Attr setAttributeNode(Attr newAttr)
+   {
+     return (Attr)attrs.put(newAttr.getName(), newAttr);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#setAttributeNodeNS(org.w3c.dom.Attr)
+    */
+   public Attr setAttributeNodeNS(Attr newAttr)
+   {
+     return (Attr)attrs.put(newAttr.getName(), newAttr);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Element#setAttributeNS(java.lang.String, java.lang.String, java.lang.String)
+    */
+   public void setAttributeNS(String namespaceURI, String qualifiedName, String value)
+   {
+     setAttribute(qualifiedName, value);    
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NodeList#getLength()
+    */
+   public int getLength()
+   {
+     return children.size();
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NodeList#item(int)
+    */
+   public Node item(int index)
+   {
+     if (index < children.size())
+       return (Node)children.get(index);
+     else
+       return null;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#appendChild(org.w3c.dom.Node)
+    */
+   public Node appendChild(Node newChild)
+   {
+     if (newChild == null)
+       throw new IllegalArgumentException("Child node is null");
+     
+     IIOMetadataNode child = (IIOMetadataNode) newChild;
+     
+     children.add(child);
+     child.parent = this;
+     return this;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#cloneNode(boolean)
+    */
+   public Node cloneNode(boolean deep)
+   {
+     IIOMetadataNode newnode = new IIOMetadataNode(name);
+     newnode.parent = null;
+     newnode.obj = obj;
+     if (deep)
+     {
+       for (int i=0; i < children.size(); i++)
+         newnode.children.add(((Node)children.get(i)).cloneNode(deep));
+     }
+     
+     // clone attrs
+     for (Iterator it = attrs.values().iterator(); it.hasNext();)
+     {
+       IIOAttr attr = (IIOAttr)it.next();
+       newnode.attrs.put(attr.name, attr.cloneNode(deep));
+       attr.owner = newnode;
+     }
+ 
+     return newnode;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getAttributes()
+    */
+   public NamedNodeMap getAttributes()
+   {
+     return new IIONamedNodeMap(attrs);
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getChildNodes()
+    */
+   public NodeList getChildNodes()
+   {
+     return this;
+   }
+ 
+   public Object getFeature(String feature, String version)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getFirstChild()
+    */
+   public Node getFirstChild()
+   {
+     return (children.size() > 0) ? (Node)children.get(0) : null;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getLastChild()
+    */
+   public Node getLastChild()
+   {
+     return (children.size() > 0) ? (Node)children.get(children.size() - 1)
+            : null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getLocalName()
+    */
+   public String getLocalName()
+   {
+     return name;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNamespaceURI()
+    */
+   public String getNamespaceURI()
+   {
+     return null;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNextSibling()
+    */
+   public Node getNextSibling()
+   {
+     // If this op needs to be faster, add links to prev and next nodes.
+     if (parent == null) return null;
+     int idx = parent.children.indexOf(this);
+     return (idx == parent.children.size() - 1) ? null
+         : (Node)parent.children.get(idx + 1);
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNodeName()
+    */
+   public String getNodeName()
+   {
+     return name;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNodeType()
+    */
+   public short getNodeType()
+   {
+     return ELEMENT_NODE;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getNodeValue()
+    */
+   public String getNodeValue()
+   {
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getOwnerDocument()
+    */
+   public Document getOwnerDocument()
+   {
+     // IOMetadataNodes have no owner
+     return null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getParentNode()
+    */
+   public Node getParentNode()
+   {
+     return parent;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getPrefix()
+    */
+   public String getPrefix()
+   {
+     return null;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#getPreviousSibling()
+    */
+   public Node getPreviousSibling()
+   {
+     // If this op needs to be faster, add links to prev and next nodes.
+     if (parent == null) return null;
+     int idx = parent.children.indexOf(this);
+     return (idx == 0) ? null
+         : (Node)parent.children.get(idx - 1);
+   }
+ 
+   public TypeInfo getSchemaTypeInfo()
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public String getTextContent()
+     throws DOMException
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public Object getUserData(String key)
+   {
+     throw new Error("not implemented");
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#hasAttributes()
+    */
+   public boolean hasAttributes()
+   {
+     return !attrs.isEmpty();
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#hasChildNodes()
+    */
+   public boolean hasChildNodes()
+   {
+     return !children.isEmpty();
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#insertBefore(org.w3c.dom.Node, org.w3c.dom.Node)
+    */
+   public Node insertBefore(Node newChild, Node refChild)
+   {
+     if (newChild == null)
+       throw new IllegalArgumentException();
+     
+     int idx = children.indexOf(refChild);
+     if (idx == -1)
+       children.add(newChild);
+     else
+       children.add(idx, newChild);
+     ((IIOMetadataNode)newChild).parent = this;
+     
+     return newChild;
+   }
+ 
+   public boolean isDefaultNamespace(String namespaceURI)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public boolean isEqualNode(Node arg)
+   {
+     throw new Error("not implemented");
+   }
+   
+   public boolean isSameNode(Node other)
+   {
+     return this == other;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#isSupported(java.lang.String, java.lang.String)
+    */
+   public boolean isSupported(String feature, String version)
+   {
+     // No DOM features are supported
+     return false;
+   }
+   
+   public String lookupNamespaceURI(String prefix)
+   {
+     throw new Error("not implemented");
+   }
+   
+   public String lookupPrefix(String namespaceURI)
+   {
+     throw new Error("not implemented");
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#normalize()
+    */
+   public void normalize()
+   {
+     // No text nodes so no action
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#removeChild(org.w3c.dom.Node)
+    */
+   public Node removeChild(Node oldChild)
+   {
+     if (oldChild == null)
+       throw new IllegalArgumentException();
+     children.remove(oldChild);
+     ((IIOMetadataNode)oldChild).parent = null;
+ 
+     return oldChild;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#replaceChild(org.w3c.dom.Node, org.w3c.dom.Node)
+    */
+   public Node replaceChild(Node newChild, Node oldChild)
+   {
+     if (newChild == null)
+       throw new IllegalArgumentException();
+     children.set(children.indexOf(oldChild), newChild);
+     ((IIOMetadataNode)oldChild).parent = null;
+     return oldChild;
+   }
+   
+   public void setIdAttribute(String name, boolean isId)
+     throws DOMException
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public void setIdAttributeNode(Attr idAttr, boolean isId)
+     throws DOMException
+   {
+     throw new Error("not implemented");
+   }
+ 
+   public void setIdAttributeNS(String namespaceURI, String localName, boolean isId)
+     throws DOMException
+   {
+     throw new Error("not implemented");
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#setNodeValue(java.lang.String)
+    */
+   public void setNodeValue(String nodeValue) throws DOMException
+   {
+   }
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.Node#setPrefix(java.lang.String)
+    */
+   public void setPrefix(String prefix)
+   {
+   }
+ 
+   public void setTextContent(String textContent)
+     throws DOMException
+   {
+     throw new Error("not implemented");
+   }
+   
+   public Object setUserData(String key, Object data, UserDataHandler handler)
+   {
+     throw new Error("not implemented");
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/IIONamedNodeMap.java gcc-4.0.0/libjava/javax/imageio/metadata/IIONamedNodeMap.java
*** gcc-3.4.3/libjava/javax/imageio/metadata/IIONamedNodeMap.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/IIONamedNodeMap.java	Mon Feb  7 13:22:35 2005
***************
*** 0 ****
--- 1,138 ----
+ /* IIONamedNodeMap.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.metadata;
+ 
+ import java.util.HashMap;
+ 
+ import org.w3c.dom.DOMException;
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Simple NamedNodeMap class for IIOMetadataNode.
+  *
+  * @author jlquinn
+  */
+ class IIONamedNodeMap implements NamedNodeMap
+ {
+   HashMap attrs;
+ 
+   /**
+    * @param attrs
+    * @param node
+    */
+   public IIONamedNodeMap(HashMap attrs)
+   {
+     this.attrs = attrs;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NamedNodeMap#getNamedItem(java.lang.String)
+    */
+   public Node getNamedItem(String name)
+   {
+     return (Node)attrs.get(name);
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NamedNodeMap#setNamedItem(org.w3c.dom.Node)
+    */
+   public Node setNamedItem(Node arg) throws DOMException
+   {
+     if (arg instanceof IIOAttr)
+     {
+       IIOAttr attr = (IIOAttr) arg;
+       // The only code that can successfully do this is in this package.
+       if (attr.owner != null)
+         throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR, "");
+       return (Node)attrs.put(attr.name, attr);
+     }
+     // Anything else gets treated as an invalid op.
+     throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, "");
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NamedNodeMap#removeNamedItem(java.lang.String)
+    */
+   public Node removeNamedItem(String name) throws DOMException
+   {
+     return (Node)attrs.remove(name);
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NamedNodeMap#item(int)
+    */
+   public Node item(int index)
+   {
+     return (Node)attrs.values().toArray()[index];
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NamedNodeMap#getLength()
+    */
+   public int getLength()
+   {
+     return attrs.size();
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NamedNodeMap#getNamedItemNS(java.lang.String, java.lang.String)
+    */
+   public Node getNamedItemNS(String namespaceURI, String localName)
+   {
+     return getNamedItem(localName);
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NamedNodeMap#setNamedItemNS(org.w3c.dom.Node)
+    */
+   public Node setNamedItemNS(Node arg) throws DOMException
+   {
+     return setNamedItem(arg);
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NamedNodeMap#removeNamedItemNS(java.lang.String, java.lang.String)
+    */
+   public Node removeNamedItemNS(String namespaceURI, String localName)
+       throws DOMException
+   {
+     return removeNamedItem(localName);
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/IIONodeList.java gcc-4.0.0/libjava/javax/imageio/metadata/IIONodeList.java
*** gcc-3.4.3/libjava/javax/imageio/metadata/IIONodeList.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/IIONodeList.java	Mon Feb  7 13:22:35 2005
***************
*** 0 ****
--- 1,72 ----
+ /* IIOAttr.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.metadata;
+ 
+ import java.util.ArrayList;
+ import java.util.List;
+ 
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
+ 
+ /**
+  * Simple NodeList implementation for IIOMetadataNode.
+  *
+  * @author jlquinn
+  *
+  */
+ class IIONodeList implements NodeList
+ {
+   List children = new ArrayList();
+   
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NodeList#item(int)
+    */
+   public Node item(int index)
+   {
+     return (index < children.size()) ? (Node)children.get(index) : null;
+   }
+ 
+   /* (non-Javadoc)
+    * @see org.w3c.dom.NodeList#getLength()
+    */
+   public int getLength()
+   {
+     return children.size();
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/metadata/package.html gcc-4.0.0/libjava/javax/imageio/metadata/package.html
*** gcc-3.4.3/libjava/javax/imageio/metadata/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/metadata/package.html	Sat Nov  6 18:08:59 2004
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.imageio.metadata 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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.imageio.metadata</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/package.html gcc-4.0.0/libjava/javax/imageio/package.html
*** gcc-3.4.3/libjava/javax/imageio/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/package.html	Wed Apr 21 08:20:30 2004
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.imageio 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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.imageio</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/IIORegistry.java gcc-4.0.0/libjava/javax/imageio/spi/IIORegistry.java
*** gcc-3.4.3/libjava/javax/imageio/spi/IIORegistry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/IIORegistry.java	Mon Feb  7 13:22:36 2005
***************
*** 0 ****
--- 1,107 ----
+ /* IIORegistry.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ import gnu.classpath.ServiceFactory;
+ import gnu.java.awt.ClasspathToolkit;
+ 
+ import java.awt.Toolkit;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ 
+ public final class IIORegistry extends ServiceRegistry
+ {
+   private static final HashSet defaultCategories = new HashSet();
+   
+   private static HashMap instances = new HashMap();
+ 
+   static
+   {
+     defaultCategories.add(ImageReaderSpi.class);
+     defaultCategories.add(ImageWriterSpi.class);
+     defaultCategories.add(ImageTranscoderSpi.class);
+     defaultCategories.add(ImageInputStreamSpi.class);
+     defaultCategories.add(ImageOutputStreamSpi.class);
+   }
+   
+   public static synchronized IIORegistry getDefaultInstance()
+   {
+     ThreadGroup group = Thread.currentThread().getThreadGroup();
+     IIORegistry registry = (IIORegistry) instances.get(group);
+     
+     if (registry == null)
+       {
+         registry = new IIORegistry();
+         instances.put(group, registry);
+       }
+     
+     return registry;
+   }
+ 
+   private IIORegistry()
+   {
+     super(defaultCategories.iterator());
+ 
+     // XXX: Register built-in Spis here.
+ 
+     ((ClasspathToolkit)Toolkit.getDefaultToolkit()).registerImageIOSpis(this);
+     
+     registerApplicationClasspathSpis();
+   }
+ 
+   /**
+    * Registers all available service providers found on the application
+    * classpath.
+    */
+   public void registerApplicationClasspathSpis()
+   {
+     ClassLoader loader = Thread.currentThread().getContextClassLoader();
+     Iterator categories = getCategories();
+ 
+     while (categories.hasNext())
+       {
+ 	Class category = (Class) categories.next();
+ 	Iterator providers = ServiceFactory.lookupProviders(category, loader);
+ 
+ 	while (providers.hasNext())
+ 	  registerServiceProvider((IIOServiceProvider) providers.next());
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/IIOServiceProvider.java gcc-4.0.0/libjava/javax/imageio/spi/IIOServiceProvider.java
*** gcc-3.4.3/libjava/javax/imageio/spi/IIOServiceProvider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/IIOServiceProvider.java	Thu Feb 17 07:48:47 2005
***************
*** 0 ****
--- 1,163 ----
+ /* IIOServiceProvider.java -- General service provider for image I/O.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ import java.util.Locale;
+ 
+ 
+ /**
+  * An abstract superclass for service providers that perform image I/O.
+  *
+  * @since 1.4
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public abstract class IIOServiceProvider
+   implements RegisterableService
+ {
+   /**
+    * The vendor of this service provider, or <code>null</code> if the
+    * subclass constructor did not set this field.
+    *
+    * @see #getVendorName()
+    */
+   protected String vendorName;
+ 
+ 
+   /**
+    * The version of this service provider, or <code>null</code> if the
+    * subclass constructor did not set this field.
+    *
+    * @see #getVersion()
+    */
+   protected String version;
+ 
+ 
+   /**
+    * Constructs a general <code>IIOServiceProvider</code>, given the
+    * vendor name and a version string.
+    *
+    * @throws IllegalArgumentException if <code>vendorName</code>
+    * or <code>version</code> is <code>null</code>.
+    */
+   public IIOServiceProvider(String vendorName, String version)
+   {
+     if (vendorName == null || version == null)
+       throw new IllegalArgumentException();
+ 
+     this.vendorName = vendorName;
+     this.version = version;
+   }
+ 
+ 
+   /**
+    * Constructs a general <code>IIOServiceProvider</code> without
+    * specifying a vendor name and a version string. The subclass
+    * constructor should set the {@link #vendorName} and {@link
+    * #version} to non-null values.
+    */
+   public IIOServiceProvider()
+   {
+   }
+ 
+ 
+   /**
+    * Informs this service provider that it has been registered in a
+    * {@link ServiceRegistry}. If this provider gets registered as an
+    * implementor for several service categories, its
+    * <code>onRegistration</code> method will be called multiple times.
+    * The default implementation does nothing.
+    *
+    * @param registry the registry to which this service provider has
+    * been added.
+    *
+    * @param category the service category for which this provider has
+    * been registered as an implementor.
+    */
+   public void onRegistration(ServiceRegistry registry, Class category)
+   {
+   }
+ 
+ 
+   /**
+    * Informs this service provider that it has been de-registered from
+    * a {@link ServiceRegistry}. If this provider had been registered
+    * as an implementor for several service categories, its
+    * <code>onDeregistration</code> method will be called multiple
+    * times. The default implementation does nothing.
+    *
+    * @param registry the registry from which this service provider has
+    * been removed.
+    *
+    * @param category the service category for which this provider has
+    * been registered as an implementor.
+    */
+   public void onDeregistration(ServiceRegistry registry, Class category)
+   {
+   }
+ 
+ 
+   /**
+    * Returns the name of the vendor of this service provider.
+    */
+   public String getVendorName()
+   {
+     return vendorName;
+   }
+ 
+ 
+   /**
+    * Returns an identifier string for the version of this service
+    * provider.
+    */
+   public String getVersion()
+   {
+     return version;
+   }
+ 
+ 
+   /**
+    * Returns a short description of this service provider that can be
+    * presented to a human user.
+    *
+    * @param locale the locale for which the description string should
+    * be localized.
+    */
+   public abstract String getDescription(Locale locale);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/ImageInputStreamSpi.java gcc-4.0.0/libjava/javax/imageio/spi/ImageInputStreamSpi.java
*** gcc-3.4.3/libjava/javax/imageio/spi/ImageInputStreamSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/ImageInputStreamSpi.java	Thu Feb 17 07:48:47 2005
***************
*** 0 ****
--- 1,144 ----
+ /* ImageInputStreamSpi.java -- Service provider for image input streams.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ 
+ import javax.imageio.stream.ImageInputStream;
+ 
+ /**
+  * An abstract superclass for service providers that create
+  * {@linkplain javax.imageio.stream.ImageInputStream image input
+  * streams} for a file, URL, byte array or any other source.
+  *
+  * @since 1.4
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public abstract class ImageInputStreamSpi
+   extends IIOServiceProvider
+ {
+   /**
+    * Indicates which kind of input is processable by the streams
+    * created by {@link #createInputStreamInstance(Object)}.
+    */
+   protected Class inputClass;
+ 
+ 
+   /**
+    * Constructs a service provider for image input streams, given no
+    * parameters. It is up to the sub-class to set {@link #vendorName},
+    * {@link #version} and {@link #inputClass} to non-null values.
+    */
+   protected ImageInputStreamSpi()
+   {
+   }
+ 
+ 
+   /**
+    * Constructs a service provider for image input streams, given the
+    * vendor name and a version string.
+    *
+    * @throws IllegalArgumentException if <code>vendorName</code>
+    * or <code>version</code> is <code>null</code>.
+    */
+   public ImageInputStreamSpi(String vendorName, String version,
+                              Class inputClass)
+   {
+     super(vendorName, version);
+     this.inputClass = inputClass;
+   }
+ 
+ 
+   /**
+    * Determines which kind of input is processable by the streams
+    * created by {@link #createInputStreamInstance(Object)}.
+    */
+   public Class getInputClass()
+   {
+     return inputClass;
+   }
+ 
+ 
+   /**
+    * Determines whether <code>ImageInputStreams</code> created
+    * by this service provider benefit from using a cache file.
+    *
+    * <p>The default behavior is to return <code>false</code>.
+    *
+    * @return <code>true</code> if the created streams are faster or
+    * need less memory when a cache file is being used;
+    * <code>false</code> if no positive effect results from the cache
+    * file.
+    */
+   public boolean canUseCacheFile()
+   {
+     return false;
+   }
+ 
+ 
+   /**
+    * Determines whether <code>ImageInputStreams</code> created
+    * by this service provider require the use of a cache file.
+    *
+    * <p>The default behavior is to return <code>false</code>.
+    *
+    * @return <code>true</code> if the created streams can only work
+    * when a cache file is being used; <code>false</code> if no cache
+    * file is needed.
+    */
+   public boolean needsCacheFile()
+   {
+     return false;
+   }
+ 
+ 
+   public abstract ImageInputStream createInputStreamInstance(Object input,
+                                                              boolean useCache,
+                                                              File cacheDir)
+     throws IOException;
+ 
+ 
+   public ImageInputStream createInputStreamInstance(Object input)
+     throws IOException
+   {
+     return createInputStreamInstance(input, canUseCacheFile(), null);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/ImageOutputStreamSpi.java gcc-4.0.0/libjava/javax/imageio/spi/ImageOutputStreamSpi.java
*** gcc-3.4.3/libjava/javax/imageio/spi/ImageOutputStreamSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/ImageOutputStreamSpi.java	Thu Feb 17 07:48:47 2005
***************
*** 0 ****
--- 1,143 ----
+ /* ImageOutputStreamSpi.java -- Service provider for image output streams.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ 
+ import javax.imageio.stream.ImageOutputStream;
+ 
+ /**
+  * An abstract superclass for service providers that create
+  * {@linkplain javax.imageio.stream.ImageOutputStream image output
+  * streams} for a file, URL, byte array or any other target.
+  *
+  * @since 1.4
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public abstract class ImageOutputStreamSpi
+   extends IIOServiceProvider
+ {
+   /**
+    * Indicates which kind of output is produced by the streams
+    * created by {@link #createOutputStreamInstance(Object)}.
+    */
+   protected Class outputClass;
+ 
+ 
+   /**
+    * Constructs a service provider for image output streams, given no
+    * parameters. It is up to the sub-class to set {@link #vendorName},
+    * {@link #version} and {@link #outputClass} to non-null values.
+    */
+   protected ImageOutputStreamSpi()
+   {
+   }
+ 
+ 
+   /**
+    * Constructs a service provider for image output streams, given the
+    * vendor name, a version string and the kind of producable output.
+    *
+    * @throws IllegalArgumentException if <code>vendorName</code>
+    * or <code>version</code> is <code>null</code>.
+    */
+   public ImageOutputStreamSpi(String vendorName, String version,
+                               Class outputClass)
+   {
+     super(vendorName, version);
+     this.outputClass = outputClass;
+   }
+ 
+ 
+   /**
+    * Determines which kind of output is produced by the streams
+    * created by {@link #createOutputStreamInstance(Object)}.
+    */
+   public Class getOutputClass()
+   {
+     return outputClass;
+   }
+ 
+ 
+   /**
+    * Determines whether <code>ImageOutputStreams</code> created
+    * by this service provider benefit from using a cache file.
+    *
+    * <p>The default behavior is to return <code>false</code>.
+    *
+    * @return <code>true</code> if the created streams are faster or
+    * need less memory when a cache file is being used;
+    * <code>false</code> if no positive effect results from the cache
+    * file.
+    */
+   public boolean canUseCacheFile()
+   {
+     return false;
+   }
+ 
+ 
+   /**
+    * Determines whether <code>ImageOutputStreams</code> created
+    * by this service provider require the use of a cache file.
+    *
+    * <p>The default behavior is to return <code>false</code>.
+    *
+    * @return <code>true</code> if the created streams can only work
+    * when a cache file is being used; <code>false</code> if no cache
+    * file is needed.
+    */
+   public boolean needsCacheFile()
+   {
+     return false;
+   }
+ 
+ 
+   public abstract ImageOutputStream createOutputStreamInstance(
+     Object output, boolean useCache, File cacheDir)
+     throws IOException;
+ 
+ 
+   public ImageOutputStream createOutputStreamInstance(Object output)
+     throws IOException
+   {
+     return createOutputStreamInstance(output, canUseCacheFile(), null);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/ImageReaderSpi.java gcc-4.0.0/libjava/javax/imageio/spi/ImageReaderSpi.java
*** gcc-3.4.3/libjava/javax/imageio/spi/ImageReaderSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/ImageReaderSpi.java	Sat Nov  6 18:09:00 2004
***************
*** 0 ****
--- 1,121 ----
+ /* ImageReaderSpi.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ import java.io.IOException;
+ 
+ import javax.imageio.ImageReader;
+ import javax.imageio.stream.ImageInputStream;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class ImageReaderSpi extends ImageReaderWriterSpi
+ {
+   public static final Class[] STANDARD_INPUT_TYPE =
+     { ImageInputStream.class };
+ 
+   protected Class[] inputTypes;
+   protected String[] writerSpiNames;
+ 
+   protected ImageReaderSpi()
+   {
+     // Do nothing here.
+   }
+ 
+   public ImageReaderSpi(String vendorName, String version, String[] names,
+                         String[] suffixes, String[] MIMETypes,
+                         String readerClassName, Class[] inputTypes,
+                         String[] writerSpiNames,
+                         boolean supportsStandardStreamMetadataFormat,
+                         String nativeStreamMetadataFormatName,
+                         String nativeStreamMetadataFormatClassName,
+                         String[] extraStreamMetadataFormatNames,
+                         String[] extraStreamMetadataFormatClassNames,
+                         boolean supportsStandardImageMetadataFormat,
+                         String nativeImageMetadataFormatName,
+                         String nativeImageMetadataFormatClassName,
+                         String[] extraImageMetadataFormatNames,
+                         String[] extraImageMetadataFormatClassNames)
+   {
+     super(vendorName, version, names, suffixes, MIMETypes, readerClassName,
+           supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName,
+           nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames,
+           extraStreamMetadataFormatClassNames, supportsStandardImageMetadataFormat,
+           nativeImageMetadataFormatName, nativeImageMetadataFormatClassName,
+           extraImageMetadataFormatNames, extraImageMetadataFormatClassNames);
+ 
+     if (inputTypes == null
+         || inputTypes.length == 0)
+       throw new IllegalArgumentException("inputTypes may not be null or empty");
+     
+     this.inputTypes = inputTypes;
+     this.writerSpiNames = writerSpiNames;
+   }
+ 
+   public abstract boolean canDecodeInput(Object source)
+     throws IOException;
+ 
+   public ImageReader createReaderInstance()
+     throws IOException
+   {
+     return createReaderInstance(null);
+   }
+ 
+   public abstract ImageReader createReaderInstance(Object extension)
+     throws IOException;
+ 
+   public String[] getImageWriterSpiNames()
+   {
+     return writerSpiNames;
+   }
+ 
+   public Class[] getInputTypes()
+   {
+     return inputTypes;
+   }
+ 
+   public boolean isOwnReader(ImageReader reader)
+   {
+     if (reader == null)
+       throw new IllegalArgumentException("reader may not be null");
+     
+     return pluginClassName.equals(reader.getClass().getName());
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/ImageReaderWriterSpi.java gcc-4.0.0/libjava/javax/imageio/spi/ImageReaderWriterSpi.java
*** gcc-3.4.3/libjava/javax/imageio/spi/ImageReaderWriterSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/ImageReaderWriterSpi.java	Thu Feb 17 07:48:47 2005
***************
*** 0 ****
--- 1,425 ----
+ /* ImageReaderWriterSpi.java -- Superclass for image reader and writer spis.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ 
+ /**
+  * An abstract superclass that contains the common parts of {@link
+  * javax.imageio.spi.ImageReaderSpi} and {@link
+  * javax.imageio.spi.ImageWriterSpi}.
+  *
+  * @since 1.4
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public abstract class ImageReaderWriterSpi
+   extends IIOServiceProvider
+ {
+   /**
+    * The human-readable, localized names of the supported image
+    * formats. This value should be non-<code>null</code> after
+    * construction.
+    *
+    * @see #getFormatNames()
+    */
+   protected String[] names;
+ 
+ 
+   /**
+    * The file suffixes of the supported image formats. This value
+    * should be non-<code>null</code> after construction.
+    *
+    * @see #getFileSuffixes()
+    */
+   protected String[] suffixes;
+ 
+ 
+   /**
+    * The MIME types of the supported image formats.  This value
+    * should be non-<code>null</code> after construction.
+    *
+    * @see #getMIMETypes()
+    */
+   protected String[] MIMETypes;
+ 
+ 
+   /**
+    * The fully qualified name of the class that implements the {@link
+    * javax.imageio.ImageReader} or {@link javax.imageio.ImageWriter}
+    * interface.  This value should be non-<code>null</code> after
+    * construction.
+    *
+    * @see #getPluginClassName()
+    */
+   protected String pluginClassName;
+ 
+ 
+   /**
+    * Indicates whether the per-stream {@linkplain
+    * javax.imageio.metadata.IIOMetadata metadata objects} associated
+    * with this plug-in support format
+    * <code>&#x201c;javax_imageio_1.0&#x201d;</code> in their
+    * <code>getAsTree</code> and <code>setAsTree</code> methods.
+    *
+    * @see #isStandardStreamMetadataFormatSupported()
+    */
+   protected boolean supportsStandardStreamMetadataFormat;
+ 
+ 
+   /**
+    * The name of the format that allows encoding all stream metadata
+    * without loss, or <code>null</code> if this plug-in does not
+    * provide a format that preserves all stream metadata.
+    */
+   protected String nativeStreamMetadataFormatName;
+ 
+   protected String nativeStreamMetadataFormatClassName;
+ 
+ 
+   /**
+    * The names of additional formats for encoding stream metadata,
+    * other than the {@linkplain
+    * #isStandardStreamMetadataFormatSupported() standard} and the
+    * {@linkplain #getNativeStreamMetadataFormatName() native} formats,
+    * or <code>null</code> if this plug-in does not provide any extra
+    * formats.
+    */
+   protected String[] extraStreamMetadataFormatNames;
+ 
+ 
+   protected String[] extraStreamMetadataFormatClassNames;
+ 
+ 
+   /**
+    * Indicates whether the per-image {@linkplain
+    * javax.imageio.metadata.IIOMetadata metadata objects} associated
+    * with this plug-in support format
+    * <code>&#x201c;javax_imageio_1.0&#x201d;</code> in their
+    * <code>getAsTree</code> and <code>setAsTree</code> methods.
+    *
+    * @see #isStandardImageMetadataFormatSupported()
+    */
+   protected boolean supportsStandardImageMetadataFormat;
+ 
+ 
+   /**
+    * The name of the format that allows encoding all image metadata
+    * without loss, or <code>null</code> if this plug-in does not
+    * provide a format that preserves all image metadata.
+    */
+   protected String nativeImageMetadataFormatName;
+ 
+   protected String nativeImageMetadataFormatClassName;
+ 
+ 
+   /**
+    * The names of additional formats for encoding image metadata,
+    * other than the {@linkplain
+    * #isStandardImageMetadataFormatSupported() standard} and the
+    * {@linkplain #getNativeImageMetadataFormatName() native} formats,
+    * or <code>null</code> if this plug-in does not provide any extra
+    * formats.
+    */
+   protected String[] extraImageMetadataFormatNames;
+ 
+ 
+   protected String[] extraImageMetadataFormatClassNames;
+ 
+ 
+   /**
+    * Constructs an <code>ImageReaderWriteSpi</code> instance, without
+    * specifying a number of parameters. Constructors of concrete
+    * subclasses must ensure that they set all inherited fields to
+    * meaningful values.
+    */
+   public ImageReaderWriterSpi()
+   {
+   }
+ 
+ 
+   /**
+    * Constructs an <code>ImageReaderWriteSpi</code> instance,
+    * specifying a number of parameters.
+    *
+    * @param names the human-readable, localized names of the supported
+    * image formats, for example <code>[&#x201c;Tagged Image File
+    * Format&#x201d;, &#x201c;Portable Network
+    * Graphics&#x201d;]</code>.
+    *
+    * @param suffixes the file suffixes of the supported image formats,
+    * for example <code>[&#x201c;tiff&#x201d;, &#x201c;tif&#x201d;,
+    * &#x201c;png&#x201d;]</code>.
+    *
+    * @param MIMETypes the MIME types of the supported image formats,
+    * for example <code>[&#x201c;image/tiff&#x201d;,
+    * &#x201c;image/png&#x201d;]</code>.
+    *
+    * @param pluginClassName the fully qualified name of the class that
+    * implements the {@link javax.imageio.ImageReader} or {@link
+    * javax.imageio.ImageWriter} interface.
+    *
+    * @param supportsStandardStreamMetadataFormat whether the
+    * per-stream {@linkplain javax.imageio.metadata.IIOMetadata
+    * metadata objects} associated with this plug-in support format
+    * <code>&#x201c;javax_imageio_1.0&#x201d;</code> in their
+    * <code>getAsTree</code> and <code>setAsTree</code> methods.
+    *
+    * @param nativeStreamMetadataFormatName the name of the format that
+    * allows encoding all stream metadata without loss, or
+    * <code>null</code> if this plug-in does not provide a format that
+    * preserves all stream metadata.
+    *
+    * @param extraStreamMetadataFormatNames the names of additional
+    * formats for encoding stream metadata, other than the {@linkplain
+    * #isStandardStreamMetadataFormatSupported() standard} and the
+    * {@linkplain #getNativeStreamMetadataFormatName() native} formats,
+    * or <code>null</code> if this plug-in does not provide any extra
+    * formats.
+    *
+    * @param supportsStandardImageMetadataFormat whether the per-image
+    * {@linkplain javax.imageio.metadata.IIOMetadata metadata objects}
+    * associated with this plug-in support format
+    * <code>&#x201c;javax_imageio_1.0&#x201d;</code> in their
+    * <code>getAsTree</code> and <code>setAsTree</code> methods.
+    *
+    * @param nativeImageMetadataFormatName the name of the format that
+    * allows encoding all image metadata without loss, or
+    * <code>null</code> if this plug-in does not provide a format that
+    * preserves all image metadata.
+    *
+    * @param extraImageMetadataFormatNames the names of additional
+    * formats for encoding image metadata, other than the {@linkplain
+    * #isStandardImageMetadataFormatSupported() standard} and the
+    * {@linkplain #getNativeImageMetadataFormatName() native} formats,
+    * or <code>null</code> if this plug-in does not provide any extra
+    * formats.
+    *
+    * @throws IllegalArgumentException if <code>vendorName</code>
+    * or <code>version</code> is <code>null</code>.
+    */
+   public ImageReaderWriterSpi(String vendorName, String version,
+                               String[] names, String[] suffixes,
+                               String[] MIMETypes, String pluginClassName,
+                               boolean supportsStandardStreamMetadataFormat,
+                               String nativeStreamMetadataFormatName,
+                               String nativeStreamMetadataFormatClassName,
+                               String[] extraStreamMetadataFormatNames,
+                               String[] extraStreamMetadataFormatClassNames,
+                               boolean supportsStandardImageMetadataFormat,
+                               String nativeImageMetadataFormatName,
+                               String nativeImageMetadataFormatClassName,
+                               String[] extraImageMetadataFormatNames,
+                               String[] extraImageMetadataFormatClassNames)
+   {
+     /* The inherited constructor will throw IllegalArgumentException
+      * if one of its arguments is null.
+      */
+     super(vendorName, version);
+ 
+     if (names == null || names.length == 0 || pluginClassName == null)
+       throw new IllegalArgumentException();
+ 
+     this.names = names;
+     this.suffixes = suffixes;
+     this.MIMETypes = MIMETypes;
+     this.pluginClassName = pluginClassName;
+ 
+     this.supportsStandardStreamMetadataFormat
+       = supportsStandardStreamMetadataFormat;
+ 
+     this.nativeStreamMetadataFormatName
+       = nativeStreamMetadataFormatName;
+ 
+     this.nativeStreamMetadataFormatClassName
+       = nativeStreamMetadataFormatClassName;
+ 
+     this.extraStreamMetadataFormatNames
+       = extraStreamMetadataFormatNames;
+ 
+     this.extraStreamMetadataFormatClassNames
+       = extraStreamMetadataFormatClassNames;
+ 
+     this.supportsStandardImageMetadataFormat
+       = supportsStandardImageMetadataFormat;
+ 
+     this.nativeImageMetadataFormatName
+       = nativeImageMetadataFormatName;
+ 
+     this.nativeImageMetadataFormatClassName
+       = nativeImageMetadataFormatClassName;
+ 
+     this.extraImageMetadataFormatNames
+       = extraImageMetadataFormatNames;
+ 
+     this.extraImageMetadataFormatClassNames
+       = extraImageMetadataFormatClassNames;
+   }
+ 
+ 
+   /**
+    * Returns the human-readable, localized names of the supported
+    * image formats. For example, a plug-in might return an array with
+    * the elements <code>[&#x201c;Tagged Image File Format&#x201d;,
+    * &#x201c;Portable Network Graphics&#x201d;]</code>.
+    */
+   public String[] getFormatNames()
+   {
+     return (String[]) names.clone();
+   }
+ 
+ 
+   /**
+    * Returns the file suffixes of the supported image formats, for
+    * example <code>[&#x201c;tiff&#x201d;, &#x201c;tif&#x201d;,
+    * &#x201c;png&#x201d;]</code>.
+    */
+   public String[] getFileSuffixes()
+   {
+     return suffixes;
+   }
+ 
+ 
+   /**
+    * Returns the MIME types of the supported image formats, for
+    * example <code>[&#x201c;image/tiff&#x201d;,
+    * &#x201c;image/png&#x201d;]</code>.
+    *
+    * @return an array of MIME type strings, or <code>null</code> if
+    * none of the supported formats has an associated MIME type.
+    */
+   public String[] getMIMETypes()
+   {
+     return MIMETypes;
+   }
+ 
+ 
+   /**
+    * Returns the fully qualified name of the class that implements the
+    * {@link javax.imageio.ImageReader} or {@link
+    * javax.imageio.ImageWriter} interface.
+    */
+   public String getPluginClassName()
+   {
+     return pluginClassName;
+   }
+ 
+ 
+   /**
+    * Returns whether the per-stream {@linkplain
+    * javax.imageio.metadata.IIOMetadata metadata objects} associated
+    * with this plug-in support format
+    * <code>&#x201c;javax_imageio_1.0&#x201d;</code> in their
+    * <code>getAsTree</code> and <code>setAsTree</code> methods.
+    */
+   public boolean isStandardStreamMetadataFormatSupported()
+   {
+     return supportsStandardStreamMetadataFormat;
+   }
+ 
+ 
+   /**
+    * Returns the name of the format that allows encoding all stream
+    * metadata without loss, or <code>null</code> if this plug-in does
+    * not provide a format that preserves all stream metadata.
+    *
+    * @see #getNativeImageMetadataFormatName()
+    */
+   public String getNativeStreamMetadataFormatName()
+   {
+     return nativeStreamMetadataFormatName;
+   }
+ 
+ 
+   /**
+    * Returns the names of additional formats for encoding stream
+    * metadata, other than the {@linkplain
+    * #isStandardStreamMetadataFormatSupported() standard} and the
+    * {@linkplain #getNativeStreamMetadataFormatName() native} formats,
+    * or <code>null</code> if this plug-in does not provide any extra
+    * formats.
+    *
+    * @see #getExtraImageMetadataFormatNames()
+    */
+   public String[] getExtraStreamMetadataFormatNames()
+   {
+     return extraStreamMetadataFormatNames;
+   }
+ 
+ 
+   /**
+    * Returns whether the per-image {@linkplain
+    * javax.imageio.metadata.IIOMetadata metadata objects} associated
+    * with this plug-in support format
+    * <code>&#x201c;javax_imageio_1.0&#x201d;</code> in their
+    * <code>getAsTree</code> and <code>setAsTree</code> methods.
+    */
+   public boolean isStandardImageMetadataFormatSupported()
+   {
+     return supportsStandardImageMetadataFormat;
+   }
+ 
+ 
+   /**
+    * Returns the name of the format that allows encoding all image
+    * metadata without loss, or <code>null</code> if this plug-in does
+    * not provide a format that preserves all image metadata.
+    *
+    * @see #getNativeStreamMetadataFormatName()
+    */
+   public String getNativeImageMetadataFormatName()
+   {
+     return nativeImageMetadataFormatName;
+   }
+ 
+ 
+   /**
+    * Returns the names of additional formats for encoding image
+    * metadata, other than the {@linkplain
+    * #isStandardImageMetadataFormatSupported() standard} and the
+    * {@linkplain #getNativeImageMetadataFormatName() native} formats,
+    * or <code>null</code> if this plug-in does not provide any extra
+    * formats.
+    *
+    * @see #getExtraStreamMetadataFormatNames()
+    */
+   public String[] getExtraImageMetadataFormatNames()
+   {
+     return extraImageMetadataFormatNames;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/ImageTranscoderSpi.java gcc-4.0.0/libjava/javax/imageio/spi/ImageTranscoderSpi.java
*** gcc-3.4.3/libjava/javax/imageio/spi/ImageTranscoderSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/ImageTranscoderSpi.java	Thu Feb 17 07:48:47 2005
***************
*** 0 ****
--- 1,84 ----
+ /* ImageTranscoderSpi.java -- Factory for image metadata transcoders.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ import javax.imageio.ImageTranscoder;
+ 
+ 
+ /**
+  * An abstract superclass for service providers that create
+  * {@linkplain javax.imageio.ImageTranscoder image metadata
+  * transcoders}.
+  *
+  * @since 1.4
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public abstract class ImageTranscoderSpi
+   extends IIOServiceProvider
+ {
+   /**
+    * Constructs a service provider for image metadata transcoders,
+    * given no parameters. It is up to the sub-class to set {@link
+    * #vendorName} and {@link #version} to non-null values.
+    */
+   protected ImageTranscoderSpi()
+   {
+   }
+ 
+ 
+   /**
+    * Constructs a service provider for image metadata transcoders,
+    * given the vendor name and a version string.
+    *
+    * @throws IllegalArgumentException if <code>vendorName</code>
+    * or <code>version</code> is <code>null</code>.
+    */
+   public ImageTranscoderSpi(String vendorName, String version)
+   {
+     super(vendorName, version);
+   }
+ 
+ 
+   public abstract String getReaderServiceProviderName();
+ 
+   public abstract String getWriterServiceProviderName();
+ 
+   public abstract ImageTranscoder createTranscoderInstance();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/ImageWriterSpi.java gcc-4.0.0/libjava/javax/imageio/spi/ImageWriterSpi.java
*** gcc-3.4.3/libjava/javax/imageio/spi/ImageWriterSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/ImageWriterSpi.java	Sat Nov  6 18:09:00 2004
***************
*** 0 ****
--- 1,135 ----
+ /* ImageWriterSpi.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ import java.awt.image.RenderedImage;
+ import java.io.IOException;
+ 
+ import javax.imageio.ImageTypeSpecifier;
+ import javax.imageio.ImageWriter;
+ import javax.imageio.stream.ImageOutputStream;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class ImageWriterSpi extends ImageReaderWriterSpi
+ {
+   public static final Class[] STANDARD_OUTPUT_TYPE =
+     { ImageOutputStream.class };
+ 
+   protected Class[] outputTypes;
+   protected String[] readerSpiNames;
+ 
+   protected ImageWriterSpi()
+   {
+     // Do nothing here.
+   }
+ 
+   public ImageWriterSpi(String vendorName, String version, String[] names,
+                         String[] suffixes, String[] MIMETypes,
+                         String writerClassName, Class[] outputTypes,
+                         String[] readerSpiNames,
+                         boolean supportsStandardStreamMetadataFormat,
+                         String nativeStreamMetadataFormatName,
+                         String nativeStreamMetadataFormatClassName,
+                         String[] extraStreamMetadataFormatNames,
+                         String[] extraStreamMetadataFormatClassNames,
+                         boolean supportsStandardImageMetadataFormat,
+                         String nativeImageMetadataFormatName,
+                         String nativeImageMetadataFormatClassName,
+                         String[] extraImageMetadataFormatNames,
+                         String[] extraImageMetadataFormatClassNames)
+   {
+     super(vendorName, version, names, suffixes, MIMETypes, writerClassName,
+           supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName,
+           nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames,
+           extraStreamMetadataFormatClassNames, supportsStandardImageMetadataFormat,
+           nativeImageMetadataFormatName, nativeImageMetadataFormatClassName,
+           extraImageMetadataFormatNames, extraImageMetadataFormatClassNames);
+ 
+     if (writerClassName == null)
+       throw new IllegalArgumentException("writerClassName is null");
+ 
+     if (outputTypes == null
+         || outputTypes.length == 0)
+       throw new IllegalArgumentException("outputTypes may not be null or empty");
+     
+     this.outputTypes = outputTypes;
+     this.readerSpiNames = readerSpiNames;    
+   }
+ 
+   public abstract boolean canEncodeImage(ImageTypeSpecifier type);
+ 
+   public boolean canEncodeImage(RenderedImage image)
+   {
+     return canEncodeImage (new ImageTypeSpecifier(image));
+   }
+ 
+   public ImageWriter createWriterInstance()
+     throws IOException
+   {
+     return createWriterInstance(null);
+   }
+ 
+   public abstract ImageWriter createWriterInstance(Object extension)
+     throws IOException;
+ 
+   public String[] getImageReaderSpiNames()
+   {
+     return readerSpiNames;
+   }
+ 
+   public Class[] getOutputTypes()
+   {
+     return outputTypes;
+   }
+ 
+   public boolean isFormatLossless()
+   {
+     return true;
+   }
+ 
+   public boolean isOwnWriter(ImageWriter writer)
+   {
+     if (writer == null)
+       throw new IllegalArgumentException("writer may not be null");
+ 
+     return pluginClassName.equals(writer.getClass().getName());
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/RegisterableService.java gcc-4.0.0/libjava/javax/imageio/spi/RegisterableService.java
*** gcc-3.4.3/libjava/javax/imageio/spi/RegisterableService.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/RegisterableService.java	Thu Feb 17 07:48:47 2005
***************
*** 0 ****
--- 1,83 ----
+ /* RegisterableService.java -- An interface for service providers.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ 
+ /**
+  * An interface which service providers may optionally implement in
+  * order to get notified when they are added or removed from a {@link
+  * ServiceRegistry}.
+  *
+  * @since 1.4
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public interface RegisterableService
+ {
+   /**
+    * Informs this service provider that it has been registered in a
+    * {@link ServiceRegistry}. If this provider gets registered as an
+    * implementor for several service categories, its
+    * <code>onRegistration</code> method will be called multiple times.
+    *
+    * @param registry the registry to which this service provider has
+    * been added.
+    *
+    * @param category the service category for which this provider has
+    * been registered as an implementor.
+    */
+   void onRegistration(ServiceRegistry registry, Class category);
+ 
+ 
+   /**
+    * Informs this service provider that it has been de-registered from
+    * a {@link ServiceRegistry}. If this provider had been registered
+    * as an implementor for several service categories, its
+    * <code>onDeregistration</code> method will be called multiple
+    * times.
+    *
+    * @param registry the registry from which this service provider has
+    * been removed.
+    *
+    * @param category the service category for which this provider has
+    * been registered as an implementor.
+    */
+   void onDeregistration(ServiceRegistry registry, Class category);
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/ServiceRegistry.java gcc-4.0.0/libjava/javax/imageio/spi/ServiceRegistry.java
*** gcc-3.4.3/libjava/javax/imageio/spi/ServiceRegistry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/ServiceRegistry.java	Thu Feb 17 07:48:47 2005
***************
*** 0 ****
--- 1,961 ----
+ /* ServiceRegistry.java -- A simple registry for service providers.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.spi;
+ 
+ import gnu.classpath.ServiceFactory;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Comparator;
+ import java.util.HashSet;
+ import java.util.IdentityHashMap;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.Map;
+ import java.util.NoSuchElementException;
+ import java.util.Set;
+ 
+ /**
+  * A registry for service providers.
+  *
+  * @since 1.4
+  *
+  * @author Michael Koch (konqueror@gmx.de)
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public class ServiceRegistry
+ {
+   // Package-private to avoid a trampoline.
+   /**
+    * The service categories of this registry.
+    *
+    * <p>Note that we expect that only very few categories will
+    * typically be used with a registry. The most common case will be
+    * one, it seems unlikely that any registry would contain more than
+    * five or six categories. Therefore, we intentionally avoid the
+    * overhead of a HashMap.
+    *
+    * @see #providers
+    */
+   final Class[] categories;
+ 
+ 
+   /**
+    * The registered providers for each service category, indexed by
+    * the same index as the {@link #categories} array. If no provider
+    * is registered for a category, the array entry will be
+    * <code>null</code>.
+    *
+    * <p>Note that we expect that only very few providers will
+    * typically be registered for a category. The most common case will
+    * be one or two. Therefore, we intentionally avoid the overhead of
+    * a HashMap.
+    */
+   private final LinkedList[] providers;
+ 
+ 
+   /**
+    * The ordring constaints for each service category, indexed by the
+    * same index as the {@link #categories} array. The constraints for
+    * a service category are stored as a <code>Map&lt;Object,
+    * Set&lt;Object&gt;&gt;</code>, where the Map&#x2019;s values are
+    * those providers that need to come after the key.  If no
+    * constraints are imposed on the providers of a category, the array
+    * entry will be <code>null</code>. If no constraints have been set
+    * whatsoever, <code>constraints</code> will be <code>null</code>.
+    *
+    * <p>Note that we expect that only very few constraints will
+    * typically be imposed on a category. The most common case will
+    * be zero.
+    */
+   private IdentityHashMap[] constraints;
+ 
+   
+   /**
+    * Constructs a <code>ServiceRegistry</code> for the specified
+    * service categories.
+    * 
+    * @param categories the categories to support
+    *
+    * @throws IllegalArgumentException if <code>categories</code> is
+    * <code>null</code>, or if its {@link Iterator#next()} method
+    * returns <code>null</code>.
+    *
+    * @throws ClassCastException if <code>categories</code> does not
+    * iterate over instances of {@link java.lang.Class}.
+    */
+   public ServiceRegistry(Iterator categories)
+   {
+     ArrayList cats = new ArrayList(/* expected size */ 10);
+ 
+     if (categories == null)
+       throw new IllegalArgumentException();
+ 
+     while (categories.hasNext())
+       {
+         Class cat = (Class) categories.next();
+         if (cat == null)
+           throw new IllegalArgumentException();
+         cats.add(cat);
+       }
+ 
+     int numCats = cats.size();
+     this.categories = (Class[]) cats.toArray(new Class[numCats]);
+     this.providers = new LinkedList[numCats];
+   }
+ 
+ 
+   /**
+    * 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>
+    *
+    * <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 java.security.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>.</p>
+    *
+    * @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)
+   {
+     return ServiceFactory.lookupProviders(spi, loader);
+   }
+ 
+ 
+   /**
+    * 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)
+   {
+     return ServiceFactory.lookupProviders(spi);
+   }
+ 
+ 
+   /**
+    * Returns an iterator over all service categories.
+    *
+    * @return an unmodifiable {@link
+    * java.util.Iterator}&lt;{@link java.lang.Class}&gt;.
+    */
+   public Iterator getCategories()
+   {
+     return new Iterator()
+       {
+         int index = -1;
+ 
+         public boolean hasNext()
+         {
+           return index < categories.length - 1;
+         }
+ 
+         public Object next()
+         {
+           if (!hasNext())
+             throw new NoSuchElementException();
+ 
+           return categories[++index];
+         }
+ 
+         public void remove()
+         {
+           throw new UnsupportedOperationException();
+         }
+       };
+   }
+ 
+ 
+   /**
+    * Registers a provider for a service category which is specified by
+    * the class-internal category ID.
+    *
+    * @param provider the service provider to be registered.
+    *
+    * @param cat the service category, which is identified by an index
+    * into the {@link #categories} array.
+    *
+    * @return <code>true</code> if <code>provider</code> is the first
+    * provider that gets registered for the specified service category;
+    * <code>false</code> if other providers have already been
+    * registered for the same servide category.
+    *
+    * @throws IllegalArgumentException if <code>provider</code> is
+    * <code>null</code>.
+    *
+    * @throws ClassCastException if <code>provider</code> does not
+    * implement the specified service provider interface.
+    */
+   private synchronized boolean registerServiceProvider(Object provider,
+                                                        int cat)
+   {
+     LinkedList provs;
+     boolean result;
+     Class category;
+ 
+     if (provider == null)
+       throw new IllegalArgumentException();
+ 
+     category = categories[cat];
+     if (!category.isInstance(provider))
+       throw new ClassCastException(category.getName());
+ 
+     provs = providers[cat];
+     if (provs == null)
+     {
+       result = true;
+       provs = providers[cat] = new LinkedList();
+     }
+     else
+       result = false;
+ 
+     provs.add(provider);
+     if (provider instanceof RegisterableService)
+       ((RegisterableService) provider).onRegistration(this, category);
+ 
+     return result;
+   }
+ 
+ 
+   /**
+    * Registers a provider for the specified service category.
+    *
+    * <p>If <code>provider</code> implements the {@link
+    * RegisterableService} interface, its {@link
+    * RegisterableService#onRegistration onRegistration} method is
+    * invoked in order to inform the provider about the addition to
+    * this registry.
+    *
+    * @param provider the service provider to be registered.
+    *
+    * @param category the service category under which
+    * <code>provider</code> shall be registered.
+    *
+    * @return <code>true</code> if <code>provider</code> is the first
+    * provider that gets registered for the specified service category;
+    * <code>false</code> if other providers have already been
+    * registered for the same servide category.
+    *
+    * @throws IllegalArgumentException if <code>provider</code> is
+    * <code>null</code>, or if <code>category</code> is not among the
+    * categories passed to the {@linkplain #ServiceRegistry(Iterator)
+    * constructor} of this ServiceRegistry.
+    *
+    * @throws ClassCastException if <code>provider</code> does not
+    * implement <code>category</code>.
+    */
+   public synchronized boolean registerServiceProvider(Object provider,
+                                                       Class category)
+   {
+     for (int i = 0; i < categories.length; i++)
+       if (categories[i] == category)
+         return registerServiceProvider(provider, i);
+     throw new IllegalArgumentException();
+   }
+ 
+ 
+   /**
+    * Registers a provider under all service categories it
+    * implements.
+    *
+    * <p>If <code>provider</code> implements the {@link
+    * RegisterableService} interface, its {@link
+    * RegisterableService#onRegistration onRegistration} method is
+    * invoked in order to inform the provider about the addition to
+    * this registry. If <code>provider</code> implements several
+    * service categories, <code>onRegistration</code> gets called
+    * multiple times.
+    *
+    * @param provider the service provider to be registered.
+    *
+    * @throws IllegalArgumentException if <code>provider</code> is
+    * <code>null</code>, or if <code>provider</code> does not implement
+    * any of the service categories passed to the {@linkplain
+    * #ServiceRegistry(Iterator) constructor} of this ServiceRegistry.
+    */
+   public synchronized void registerServiceProvider(Object provider)
+   {
+     boolean ok = false;
+ 
+     if (provider == null)
+       throw new IllegalArgumentException();
+ 
+     for (int i = 0; i < categories.length; i++)
+       if (categories[i].isInstance(provider))
+         {
+           ok = true;
+           registerServiceProvider(provider, i);
+         }
+ 
+     if (!ok)
+       throw new IllegalArgumentException();
+   }
+ 
+ 
+   /**
+    * Registers a number of providers under all service categories they
+    * implement.
+    *
+    * <p>If a provider implements the {@link RegisterableService}
+    * interface, its {@link RegisterableService#onRegistration
+    * onRegistration} method is invoked in order to inform the provider
+    * about the addition to this registry. If <code>provider</code>
+    * implements several service categories,
+    * <code>onRegistration</code> gets called multiple times.
+    *
+    * @throws IllegalArgumentException if <code>providers</code> is
+    * <code>null</code>, if any iterated provider is <code>null</code>,
+    * or if some iterated provider does not implement any of the
+    * service categories passed to the {@linkplain
+    * #ServiceRegistry(Iterator) constructor} of this
+    * <code>ServiceRegistry</code>.
+    */
+   public synchronized void registerServiceProviders(Iterator providers)
+   {
+     if (providers == null)
+       throw new IllegalArgumentException();
+ 
+     while (providers.hasNext())
+       registerServiceProvider(providers.next());
+   }
+ 
+ 
+   /**
+    * De-registers a provider for a service category which is specified
+    * by the class-internal category ID.
+    *
+    * @param provider the service provider to be registered.
+    *
+    * @param cat the service category, which is identified by an index
+    * into the {@link #categories} array.
+    *
+    * @return <code>true</code> if <code>provider</code> was previously
+    * registered for the specified service category; <code>false</code>
+    * if if the provider had not been registered.
+    *
+    * @throws IllegalArgumentException if <code>provider</code> is
+    * <code>null</code>.
+    *
+    * @throws ClassCastException if <code>provider</code> does not
+    * implement the specified service provider interface.
+    */
+   private synchronized boolean deregisterServiceProvider(Object provider,
+                                                          int cat)
+   {
+     LinkedList provs;
+     boolean result;
+     Class category;
+ 
+     if (provider == null)
+       throw new IllegalArgumentException();
+ 
+     category = categories[cat];
+     if (!category.isInstance(provider))
+       throw new ClassCastException(category.getName());
+ 
+     provs = providers[cat];
+     if (provs == null)
+       return false;
+ 
+     result = provs.remove(provider);
+     if (provs.isEmpty())
+       providers[cat] = null;
+ 
+     if (result && (provider instanceof RegisterableService))
+       ((RegisterableService) provider).onDeregistration(this, category);
+ 
+     return result;
+   }
+ 
+ 
+   /**
+    * De-registers a provider for the specified service category.
+    *
+    * <p>If <code>provider</code> implements the {@link
+    * RegisterableService} interface, its {@link
+    * RegisterableService#onDeregistration onDeregistration} method is
+    * invoked in order to inform the provider about the removal from
+    * this registry.
+    *
+    * @param provider the service provider to be de-registered.
+    *
+    * @param category the service category from which
+    * <code>provider</code> shall be de-registered.
+    *
+    * @return <code>true</code> if <code>provider</code> was previously
+    * registered for the specified service category; <code>false</code>
+    * if if the provider had not been registered.
+    *
+    * @throws IllegalArgumentException if <code>provider</code> is
+    * <code>null</code>, or if <code>category</code> is not among the
+    * categories passed to the {@linkplain #ServiceRegistry(Iterator)
+    * constructor} of this ServiceRegistry.
+    *
+    * @throws ClassCastException if <code>provider</code> does not
+    * implement <code>category</code>.
+    */
+   public synchronized boolean deregisterServiceProvider(Object provider,
+                                                         Class category)
+   {
+     for (int i = 0; i < categories.length; i++)
+       if (categories[i] == category)
+         return deregisterServiceProvider(provider, i);
+     throw new IllegalArgumentException();
+   }
+   
+   
+   /**
+    * De-registers a provider from all service categories it
+    * implements.
+    *
+    * <p>If <code>provider</code> implements the {@link
+    * RegisterableService} interface, its {@link
+    * RegisterableService#onDeregistration onDeregistration} method is
+    * invoked in order to inform the provider about the removal from
+    * this registry. If <code>provider</code> implements several
+    * service categories, <code>onDeregistration</code> gets called
+    * multiple times.</p>
+    *
+    * @param provider the service provider to be de-registered.
+    *
+    * @throws IllegalArgumentException if <code>provider</code> is
+    * <code>null</code>, or if <code>provider</code> does not implement
+    * any of the service categories passed to the {@linkplain
+    * #ServiceRegistry(Iterator) constructor} of this
+    * <code>ServiceRegistry</code>.
+    */
+   public synchronized void deregisterServiceProvider(Object provider)
+   {
+     boolean ok = false;
+ 
+     if (provider == null)
+       throw new IllegalArgumentException();
+ 
+     for (int i = 0; i < categories.length; i++)
+       if (categories[i].isInstance(provider))
+         {
+           ok = true;
+           deregisterServiceProvider(provider, i);
+         }
+ 
+     if (!ok)
+       throw new IllegalArgumentException();
+   }
+ 
+ 
+   /**
+    * De-registers all providers which have been registered for the
+    * specified service category.
+    *
+    * <p>If a provider implements the {@link RegisterableService}
+    * interface, its {@link RegisterableService#onDeregistration
+    * onDeregistration} method is invoked in order to inform the
+    * provider about the removal from this registry. If the provider
+    * implements several service categories,
+    * <code>onDeregistration</code> gets called multiple times.
+    *
+    * @param category the category whose registered providers will be
+    * de-registered.
+    *
+    * @throws IllegalArgumentException if <code>category</code> is not
+    * among the categories passed to the {@linkplain
+    * #ServiceRegistry(Iterator) constructor} of this
+    * <code>ServiceRegistry</code>.
+    */
+   public synchronized void deregisterAll(Class category)
+   {
+     boolean ok = false;
+ 
+     for (int i = 0; i < categories.length; i++)
+       {
+         if (categories[i] != category)
+           continue;
+ 
+         ok = true;
+         while (providers[i] != null)
+           deregisterServiceProvider(providers[i].get(0), i);
+       }
+ 
+     if (!ok)
+       throw new IllegalArgumentException();
+   }
+ 
+ 
+   /**
+    * De-registers all service providers.
+    *
+    * <p>If a provider implements the {@link RegisterableService}
+    * interface, its {@link RegisterableService#onDeregistration
+    * onDeregistration} method is invoked in order to inform the
+    * provider about the removal from this registry. If the provider
+    * implements several service categories,
+    * <code>onDeregistration</code> gets called multiple times.
+    */
+   public synchronized void deregisterAll()
+   {
+     for (int i = 0; i < categories.length; i++)
+       while (providers[i] != null)
+         deregisterServiceProvider(providers[i].get(0), i);
+   }
+ 
+ 
+   /**
+    * Called by the Virtual Machine when it detects that this
+    * <code>ServiceRegistry</code> has become garbage. De-registers all
+    * service providers, which will cause those that implement {@link
+    * RegisterableService} to receive a {@link
+    * RegisterableService#onDeregistration onDeregistration}
+    * notification.
+    */
+   public void finalize()
+     throws Throwable
+   {
+     super.finalize();
+     deregisterAll();
+   }
+ 
+ 
+   /**
+    * Determines whether a provider has been registered with this
+    * registry.
+    *
+    * @return <code>true</code> if <code>provider</code> has been
+    * registered under any service category; <code>false</code> if
+    * it is not registered.
+    *
+    * @throws IllegalArgumentException if <code>provider</code> is
+    * <code>null</code>.
+    */
+   public synchronized boolean contains(Object provider)
+   {
+     if (provider == null)
+       throw new IllegalArgumentException();
+ 
+     // Note that contains is rather unlikely to be ever called,
+     // so it would be wasteful to keep a special data structure
+     // (such as a HashSet) for making it a fast operation.
+     for (int i = 0; i < providers.length; i++)
+       {
+         // If provider does not implement categories[i],
+         // it would not have been possible to register it there.
+         // In that case, it would be pointless to look there.
+         if (!categories[i].isInstance(provider))
+           continue;
+ 
+         // But if the list of registered providers contains provider,
+         // we have found it.
+         LinkedList p = providers[i];
+         if (p != null && p.contains(provider))
+           return true;
+       }
+ 
+     return false;
+   }
+ 
+ 
+   /**
+    * Returns the index in {@link #categories} occupied by the
+    * specified service category.
+    *
+    * @throws IllegalArgumentException if <code>category</code> is not
+    * among the categories passed to the {@linkplain
+    * #ServiceRegistry(Iterator) constructor} of this ServiceRegistry.
+    */
+   private int getCategoryID(Class category)
+   {
+     for (int i = 0; i < categories.length; i++)
+       if (categories[i] == category)
+         return i;
+ 
+     throw new IllegalArgumentException();
+   }
+ 
+ 
+   /**
+    * Retrieves all providers that have been registered for the
+    * specified service category.
+    *
+    * @param category the service category whose providers are
+    * to be retrieved.
+    *
+    * @param useOrdering <code>true</code> in order to retrieve the
+    * providers in an order imposed by the {@linkplain #setOrdering
+    * ordering constraints}; <code>false</code> in order to retrieve
+    * the providers in any order.
+    *
+    * @throws IllegalArgumentException if <code>category</code> is not
+    * among the categories passed to the {@linkplain
+    * #ServiceRegistry(Iterator) constructor} of this
+    * <code>ServiceRegistry</code>.
+    *
+    * @see #getServiceProviders(Class, Filter, boolean)
+    */
+   public Iterator getServiceProviders(Class category, boolean useOrdering)
+   {
+     return getServiceProviders(category, null, useOrdering);
+   }
+ 
+ 
+   /**
+    * Retrieves all providers that have been registered for the
+    * specified service category and that satisfy the criteria
+    * of a custom filter.
+    *
+    * @param category the service category whose providers are
+    * to be retrieved.
+    *
+    * @param filter a custom filter, or <code>null</code> to
+    * retrieve all registered providers for the specified
+    * category.
+    *
+    * @param useOrdering <code>true</code> in order to retrieve the
+    * providers in an order imposed by the {@linkplain #setOrdering
+    * ordering constraints}; <code>false</code> in order to retrieve
+    * the providers in any order.
+    *
+    * @throws IllegalArgumentException if <code>category</code> is not
+    * among the categories passed to the {@linkplain
+    * #ServiceRegistry(Iterator) constructor} of this
+    * <code>ServiceRegistry</code>.
+    */
+   public synchronized Iterator getServiceProviders(Class category,
+                                                    Filter filter,
+                                                    boolean useOrdering)
+   {
+     int catid;
+     LinkedList provs;
+     ArrayList result;
+ 
+     catid = getCategoryID(category);
+     provs = providers[catid];
+     if (provs == null)
+       return Collections.EMPTY_LIST.iterator();
+     
+     result = new ArrayList(provs.size());
+     for (Iterator iter = provs.iterator(); iter.hasNext();)
+       {
+         Object provider = iter.next();
+         if (filter == null || filter.filter(provider))
+           result.add(provider);
+       }
+ 
+     // If we are supposed to obey ordering constraints, and
+     // if any constraints have been imposed on the specified
+     // service category, sort the result.
+     if (useOrdering && constraints != null)
+       {
+         final Map cons = constraints[catid];
+         if (cons != null)
+           Collections.sort(result, new Comparator()
+             {
+               public int compare(Object o1, Object o2)
+               {
+                 Set s;
+ 
+                 if (o1 == o2)
+                   return 0;
+                 
+                 s = (Set) cons.get(o1);
+                 if (s != null && s.contains(o2))
+                   return -1;  // o1 < o2
+ 
+                 s = (Set) cons.get(o2);
+                 if (s != null && s.contains(o1))
+                   return 1;  // o1 > o2
+ 
+                 return 0; // o1 == o2
+               }
+             });
+       }
+ 
+     return result.iterator();
+   }
+ 
+ 
+   /**
+    * Returns one of the service providers that is a subclass of the
+    * specified class.
+    * 
+    * @param providerClass a class to search for.
+    */
+   public synchronized Object getServiceProviderByClass(Class providerClass)
+   {
+     if (providerClass == null)
+       throw new IllegalArgumentException();
+ 
+     // Note that the method getServiceProviderByClass is rather
+     // unlikely to be ever called, so it would be wasteful to keep a
+     // special data structure for making it a fast operation.
+     for (int cat = 0; cat < categories.length; cat++)
+       {
+         if (!categories[cat].isAssignableFrom(providerClass))
+           continue;
+         
+         LinkedList provs = providers[cat];
+         if (provs == null)
+           continue;
+ 
+         for (Iterator iter = provs.iterator(); iter.hasNext();)
+           {
+             Object provider = iter.next();
+             if (providerClass.isInstance(provider))
+               return provider;
+           }
+       }
+ 
+     return null;
+   }
+ 
+ 
+   /**
+    * Adds an ordering constraint on service providers.
+    *
+    * @param category the service category to which an ordering
+    * constraint is to be added.
+    *
+    * @param first the provider which is supposed to come before
+    * <code>second</code>.
+    *
+    * @param second the provider which is supposed to come after
+    * <code>first</code>.
+    *
+    * @throws IllegalArgumentException if <code>first</code> and
+    * <code>second</code> are referring to the same object, or if one
+    * of them is <code>null</code>.
+    *
+    * @see #unsetOrdering
+    * @see #getServiceProviders(Class, Filter, boolean)
+    */
+   public synchronized boolean setOrdering(Class category,
+                                           Object firstProvider,
+                                           Object secondProvider)
+   {
+     return addConstraint(getCategoryID(category), firstProvider,
+                          secondProvider);
+   }
+ 
+ 
+   /**
+    * Removes an ordering constraint on service providers.
+    *
+    * @param category the service category from which an ordering
+    * constraint is to be removed.
+    *
+    * @param first the provider which is supposed to come before
+    * <code>second</code>.
+    *
+    * @param second the provider which is supposed to come after
+    * <code>first</code>.
+    *
+    * @throws IllegalArgumentException if <code>first</code> and
+    * <code>second</code> are referring to the same object, or if one
+    * of them is <code>null</code>.
+    *
+    * @see #setOrdering
+    */
+   public synchronized boolean unsetOrdering(Class category,
+                                             Object firstProvider,
+                                             Object secondProvider)
+   {
+     return removeConstraint(getCategoryID(category),
+                             firstProvider, secondProvider);
+   }
+ 
+ 
+   /**
+    * Adds an ordering constraint on service providers.
+    *
+    * @param catid the service category ID, which is the
+    * category&#x2019;s index into the {@link #categories} array.
+    *
+    * @param first the provider which is supposed to come before
+    * <code>second</code>.
+    *
+    * @param second the provider which is supposed to come after
+    * <code>first</code>.
+    *
+    * @throws IllegalArgumentException if <code>first</code> and
+    * <code>second</code> are referring to the same object, or if one
+    * of them is <code>null</code>.
+    */
+   private boolean addConstraint(int catid, Object first, Object second)
+   {
+     Set s;
+     IdentityHashMap cons;
+ 
+     // Also checks argument validity.
+     removeConstraint(catid, second, first);
+ 
+     if (constraints == null)
+       constraints = new IdentityHashMap[categories.length];
+     cons = constraints[catid];
+     if (cons == null)
+       cons = constraints[catid] = new IdentityHashMap();
+ 
+     s = (Set) cons.get(first);
+     if (s == null)
+       cons.put(first, s = new HashSet());
+     return s.add(second);
+   }
+ 
+ 
+   /**
+    * Removes an ordering constraint on service providers.
+    *
+    * @param catid the service category ID, which is the
+    * category&#x2019;s index into the {@link #categories} array.
+    *
+    * @param first the provider which is supposed to come before
+    * <code>second</code>.
+    *
+    * @param second the provider which is supposed to come after
+    * <code>first</code>.
+    *
+    * @throws IllegalArgumentException if <code>first</code> and
+    * <code>second</code> are referring to the same object, or if one
+    * of them is <code>null</code>.
+    */
+   private boolean removeConstraint(int catid, Object first, Object second)
+   {
+     Collection s;
+     IdentityHashMap cons;
+ 
+     if (first == null || second == null || first == second)
+       throw new IllegalArgumentException();
+ 
+     if (constraints == null)
+       return false;
+ 
+     cons = constraints[catid];
+     if (cons == null)
+       return false;
+ 
+     s = (Collection) cons.get(first);
+     if (s == null)
+       return false;
+ 
+     if (!s.remove(second))
+       return false;
+ 
+     // If we removed the last constraint for a service category,
+     // we can get free some memory.
+     if (cons.isEmpty())
+       {
+         constraints[catid] = null;
+         boolean anyConstraints = false;
+         for (int i = 0; i < constraints.length; i++)
+           {
+             if (constraints[i] != null)
+               {
+                 anyConstraints = true;
+                 break;
+               }
+           }
+         if (!anyConstraints)
+           constraints = null;
+       }
+ 
+     return true;
+   }
+ 
+ 
+   /**
+    * A filter for selecting service providers that match custom
+    * criteria.
+    *
+    * @see ServiceRegistry#getServiceProviders(Class, Filter,
+    * boolean)
+    *
+    * @since 1.4
+    *
+    * @author Michael Koch (konqueror@gmx.de)
+    * @author Sascha Brawer (brawer@dandelis.ch)
+    */
+   public static interface Filter
+   {
+     /**
+      * Checks whether the specified service provider matches the
+      * constraints of this Filter.
+      *
+      * @param provider the service provider in question.
+      *
+      * @return <code>true</code> if <code>provider</code> matches the
+      * criteria; <code>false</code> if it does not match.
+      */
+     boolean filter(Object provider);
+   };
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/spi/package.html gcc-4.0.0/libjava/javax/imageio/spi/package.html
*** gcc-3.4.3/libjava/javax/imageio/spi/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/spi/package.html	Wed Apr 21 08:20:31 2004
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.imageio.spi 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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.imageio.spi</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/FileCacheImageInputStream.java gcc-4.0.0/libjava/javax/imageio/stream/FileCacheImageInputStream.java
*** gcc-3.4.3/libjava/javax/imageio/stream/FileCacheImageInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/FileCacheImageInputStream.java	Mon Feb  7 13:22:36 2005
***************
*** 0 ****
--- 1,109 ----
+ /* FileCacheImageInputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class FileCacheImageInputStream extends ImageInputStreamImpl
+ {
+   private InputStream stream;
+   private File cacheDir;
+   
+   public FileCacheImageInputStream(InputStream stream, File cacheDir)
+     throws IOException
+   {
+     super();
+     this.stream = stream;
+     // FIXME: We do not support caching yet.
+     this.cacheDir = cacheDir;
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     if (stream != null)
+       {
+ 	stream.close();
+ 	stream = null;
+       }
+   }
+ 
+   private void checkStreamClosed()
+     throws IOException
+   {
+     if (stream == null)
+       throw new IOException("stream closed");
+   }
+ 
+   public boolean isCached()
+   {
+     return true;
+   }
+ 
+   public boolean isCachedFile()
+   {
+     return true;
+   }
+   
+   public boolean isCachedMemory()
+   {
+     return false;
+   }
+ 
+   public int read()
+     throws IOException
+   {
+     checkStreamClosed();
+     setBitOffset(0);
+     return stream.read();
+   }
+ 
+   public int read(byte[] data, int offset, int len)
+     throws IOException
+   {
+     checkStreamClosed();
+     setBitOffset(0);
+     return stream.read(data, offset, len);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/FileCacheImageOutputStream.java gcc-4.0.0/libjava/javax/imageio/stream/FileCacheImageOutputStream.java
*** gcc-3.4.3/libjava/javax/imageio/stream/FileCacheImageOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/FileCacheImageOutputStream.java	Mon Feb  7 13:22:36 2005
***************
*** 0 ****
--- 1,123 ----
+ /* FileCacheImageOutputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class FileCacheImageOutputStream extends ImageOutputStreamImpl
+ {
+   private OutputStream stream;
+   private File cacheDir;
+   
+   public FileCacheImageOutputStream(OutputStream stream, File cacheDir)
+     throws IOException
+   {
+     super();
+     this.stream = stream;
+     // FIXME: We do not support caching yet.
+     this.cacheDir = cacheDir;
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     if (stream != null)
+       {
+ 	stream.close();
+ 	stream = null;
+       }
+   }
+ 
+   private void checkStreamClosed()
+     throws IOException
+   {
+     if (stream == null)
+       throw new IOException("stream closed");
+   }
+ 
+   public boolean isCached()
+   {
+     return true;
+   }
+ 
+   public boolean isCachedFile()
+   {
+     return true;
+   }
+   
+   public boolean isCachedMemory()
+   {
+     return false;
+   }
+   
+   public int read()
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public int read(byte[] data, int offset, int len)
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public void write(byte[] data, int offset, int len)
+     throws IOException
+   {
+     checkStreamClosed();
+     // FIXME: Flush pending bits.
+     stream.write(data, offset, len);
+   }
+ 
+   public void write(int value)
+     throws IOException
+   {
+     checkStreamClosed();
+     // FIXME: Flush pending bits.
+     stream.write(value);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/FileImageInputStream.java gcc-4.0.0/libjava/javax/imageio/stream/FileImageInputStream.java
*** gcc-3.4.3/libjava/javax/imageio/stream/FileImageInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/FileImageInputStream.java	Mon Feb  7 13:22:36 2005
***************
*** 0 ****
--- 1,108 ----
+ /* FileImageInputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.File;
+ import java.io.FileNotFoundException;
+ import java.io.IOException;
+ import java.io.RandomAccessFile;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class FileImageInputStream extends ImageInputStreamImpl
+ {
+   private RandomAccessFile file;
+   
+   public FileImageInputStream(File file)
+     throws FileNotFoundException, IOException
+   {
+     if (file == null)
+       throw new IllegalArgumentException ("file may not be null");
+ 
+     this.file = new RandomAccessFile(file, "r");
+   }
+ 
+   public FileImageInputStream(RandomAccessFile file)
+   {
+     if (file == null)
+       throw new IllegalArgumentException ("file may not be null");
+ 
+     this.file = file;
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     file.close();
+   }
+ 
+   public long length()
+   {
+     try
+       {
+         return file.length();
+       }
+     catch (IOException e)
+       {
+         return -1L;
+       }
+   }
+ 
+   public int read()
+     throws IOException
+   {
+     setBitOffset(0);
+     return file.read();
+   }
+ 
+   public int read(byte[] data, int offset, int len)
+     throws IOException
+   {
+     setBitOffset(0);
+     return file.read(data, offset, len);
+   }
+ 
+   public void seek(long position)
+     throws IOException
+   {
+     super.seek(position);
+     file.seek(position);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/FileImageOutputStream.java gcc-4.0.0/libjava/javax/imageio/stream/FileImageOutputStream.java
*** gcc-3.4.3/libjava/javax/imageio/stream/FileImageOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/FileImageOutputStream.java	Mon Feb  7 13:22:36 2005
***************
*** 0 ****
--- 1,133 ----
+ /* FileImageOutputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.File;
+ import java.io.FileNotFoundException;
+ import java.io.IOException;
+ import java.io.RandomAccessFile;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class FileImageOutputStream extends ImageOutputStreamImpl
+ {
+   private RandomAccessFile file;
+   
+   public FileImageOutputStream(File file)
+     throws FileNotFoundException, IOException
+   {
+     if (file == null)
+       throw new IllegalArgumentException("file may not be null");
+ 
+     // Do security check.
+     file.canRead();
+ 
+     this.file = new RandomAccessFile(file, "r");
+   }
+ 
+   public FileImageOutputStream(RandomAccessFile file)
+   {
+     if (file == null)
+       throw new IllegalArgumentException("file may not be null");
+ 
+     this.file = file;
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     file.close();
+   }
+ 
+   public long length()
+   {
+     try
+       {
+         return file.length();
+       }
+     catch (IOException e)
+       {
+         return -1L;
+       }
+   }
+ 
+   public int read()
+     throws IOException
+   {
+     checkClosed();
+     
+     setBitOffset(0);
+     return file.read();
+   }
+ 
+   public int read(byte[] data, int offset, int len)
+     throws IOException
+   {
+     checkClosed();
+     
+     setBitOffset(0);
+     return file.read(data, offset, len);
+   }
+ 
+   public void seek(long position)
+     throws IOException
+   {
+     super.seek(position);
+     file.seek(position);
+   }
+ 
+   public void write(byte[] data, int offset, int len)
+     throws IOException
+   {
+     checkClosed();
+     
+     flushBits();
+     file.write(data, offset, len);
+   }
+ 
+   public void write(int value)
+     throws IOException
+   {
+     checkClosed();
+     
+     // FIXME: Flush pending bits.
+     file.write(value);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/IIOByteBuffer.java gcc-4.0.0/libjava/javax/imageio/stream/IIOByteBuffer.java
*** gcc-3.4.3/libjava/javax/imageio/stream/IIOByteBuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/IIOByteBuffer.java	Thu Feb 17 07:48:48 2005
***************
*** 0 ****
--- 1,94 ----
+ /* IIOByteBuffer.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ /**
+  * A data structure for holding a reference to a byte array, an index
+  * into that array, and a number of bytes, that can be passed to one
+  * specific variant of the {@link
+  * javax.imageio.stream.ImageInputStream#readBytes(IIOByteBuffer, int)
+  * readBytes} method.
+  *
+  * @since 1.4
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public class IIOByteBuffer
+ {
+   private byte[] data;
+   private int offset;
+   private int length;
+ 
+   public IIOByteBuffer(byte[] data, int offset, int length)
+   {
+     this.data = data;
+     this.offset = offset;
+     this.length = length;
+   }
+ 
+   public byte[] getData()
+   {
+     return data;
+   }
+ 
+   public void setData(byte[] data)
+   {
+     this.data = data;
+   }
+ 
+   public int getOffset()
+   {
+     return offset;
+   }
+ 
+   public void setOffset(int offset)
+   {
+     this.offset = offset;
+   }
+ 
+   public int getLength()
+   {
+     return length;
+   }
+ 
+   public void setLength(int length)
+   {
+     this.length = length;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/ImageInputStream.java gcc-4.0.0/libjava/javax/imageio/stream/ImageInputStream.java
*** gcc-3.4.3/libjava/javax/imageio/stream/ImageInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/ImageInputStream.java	Thu Feb 17 07:48:48 2005
***************
*** 0 ****
--- 1,650 ----
+ /* ImageInputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.DataInput;
+ import java.io.IOException;
+ import java.nio.ByteOrder;
+ 
+ 
+ /**
+  * An input stream for use by {@link javax.imageio.ImageReader
+  * ImageReaders}.
+  *
+  * @since 1.4
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public interface ImageInputStream
+   extends DataInput
+ {
+   void setByteOrder(ByteOrder order);
+ 
+   ByteOrder getByteOrder();
+   
+   int read()
+     throws IOException;
+ 
+   int read(byte[] b)
+     throws IOException;
+ 
+   int read(byte[] b, int offset, int length)
+     throws IOException;
+ 
+ 
+   /**
+    * Reads up to a specified number of bytes, and modifies a
+    * {@link IIOByteBuffer} to hold the read data.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    *
+    * @param buf an <code>IIOByteBuffer</code> that will hold the read
+    * data.
+    *
+    * @param numBytes the maximum number of bytes to read.
+    *
+    * @throws IndexOutOfBoundsException if <code>numBytes</code> is
+    * negative.
+    *
+    * @throws NullPointerException if <code>buf</code> is
+    * <code>null</code>.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    */
+   void readBytes(IIOByteBuffer buf, int numBytes)
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a byte and checks whether or not its value is zero.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before the byte is read.
+    *
+    * @throws EOFException if the input stream is at its end.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readBit()
+    * @see #readByte()
+    * @see #readFully(byte[], int, int)
+    */
+   boolean readBoolean()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a signed byte.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    *
+    * @throws EOFException if the input stream is at its end.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readUnsignedByte()
+    * @see #readFully(byte[], int, int)
+    */
+   byte readByte()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads an unsigned byte.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    *
+    * @throws EOFException if the input stream is at its end.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readByte()
+    * @see #readFully(byte[], int, int)
+    */
+   int readUnsignedByte()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads an signed 16-bit integer. If necessary, the value gets
+    * converted from the stream&#x2019;s {@linkplain #getByteOrder()
+    * current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @throws EOFException if the input stream ends before all two
+    * bytes were read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readUnsignedShort()
+    * @see #readChar()
+    * @see #readFully(short[], int, int)
+    */
+   short readShort()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads an unsigned 16-bit integer. If necessary, the value gets
+    * converted from the stream&#x2019;s {@linkplain #getByteOrder()
+    * current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * <p>This method does the same as {@link #readChar()}.
+    *
+    * @throws EOFException if the input stream ends before all two
+    * bytes were read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readShort()
+    * @see #readChar()
+    * @see #readFully(char[], int, int)
+    */
+   int readUnsignedShort()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads an unsigned 16-bit integer. If necessary, the value gets
+    * converted from the stream&#x2019;s {@linkplain #getByteOrder()
+    * current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * <p>This method does the same as {@link #readUnsignedShort()}.
+    *
+    * @throws EOFException if the input stream ends before all two
+    * bytes were read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readFully(char[], int, int)
+    */
+   char readChar()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a signed 32-bit integer. If necessary, the value gets
+    * converted from the stream&#x2019;s {@linkplain #getByteOrder()
+    * current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @throws EOFException if the input stream ends before all four
+    * bytes were read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readUnsignedInt()
+    * @see #readFully(int[], int, int)
+    */
+   int readInt()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads an unsigned 32-bit integer. If necessary, the value gets
+    * converted from the stream&#x2019;s {@linkplain #getByteOrder()
+    * current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @throws EOFException if the input stream ends before all four
+    * bytes were read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readInt()
+    * @see #readFully(int[], int, int)
+    */
+   long readUnsignedInt()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a signed 64-bit integer. If necessary, the value gets
+    * converted from the stream&#x2019;s {@linkplain #getByteOrder()
+    * current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @throws EOFException if the input stream ends before all eight
+    * bytes were read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readFully(long[], int, int)
+    */
+   long readLong()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads an IEEE 32-bit single-precision floating point number. If
+    * necessary, the value gets converted from the stream&#x2019;s
+    * {@linkplain #getByteOrder() current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @throws EOFException if the input stream ends before all four
+    * bytes were read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readFully(float[], int, int)
+    */
+   float readFloat()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads an IEEE 64-bit double-precision floating point number. If
+    * necessary, the value gets converted from the stream&#x2019;s
+    * {@linkplain #getByteOrder() current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @throws EOFException if the input stream ends before all eight
+    * bytes were read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readFully(double[], int, int)
+    */
+   double readDouble()
+     throws IOException;
+ 
+   String readLine()
+     throws IOException;
+ 
+   String readUTF()
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a sequence of signed 8-bit integers into a
+    * <code>byte[]</code> array.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @param b an array for storing the read values.
+    *
+    * @param offset the index of the first element in <code>b</code>
+    * that will hold read data.
+    *
+    * @param numBytes the number of bytes to read.
+    *
+    * @throws IndexOutOfBoundsException if <code>offset</code> or
+    * <code>numBytes</code> is negative, or if <code>offset +
+    * numBytes</code> exceeds <code>b.length</code>.
+    *
+    * @throws NullPointerException if <code>b</code> is
+    * <code>null</code>.
+    *
+    * @throws EOFException if the input stream ends before all content
+    * was read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readByte()
+    */
+   void readFully(byte[] b, int offset, int numBytes)
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a sequence of signed 8-bit integers into a
+    * <code>byte[]</code> array.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @param b an array for storing the read values.
+    *
+    * @throws NullPointerException if <code>b</code> is
+    * <code>null</code>.
+    *
+    * @throws EOFException if the input stream ends before all content
+    * was read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readByte()
+    * @see #readFully(byte[], int, int)
+    */
+   void readFully(byte[] b)
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a sequence of signed 16-bit integers into a
+    * <code>short[]</code> array.  If necessary, values are converted
+    * from the stream&#x2019;s {@linkplain #getByteOrder() current byte
+    * order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @param s an array for storing the read values.
+    *
+    * @param offset the index of the first element in <code>s</code>
+    * that will hold read data.
+    *
+    * @param numShorts the number of signed 16-bit integers to read
+    * (which is one half of the number of bytes).
+    *
+    * @throws IndexOutOfBoundsException if <code>offset</code> or
+    * <code>numShorts</code> is negative, or if <code>offset +
+    * numShorts</code> exceeds <code>s.length</code>.
+    *
+    * @throws NullPointerException if <code>s</code> is
+    * <code>null</code>.
+    *
+    * @throws EOFException if the input stream ends before all content
+    * was read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readShort()
+    */
+   void readFully(short[] s, int offset, int numShorts)
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a sequence of unsigned 16-bit integers into a
+    * <code>char[]</code> array.  If necessary, values are converted
+    * from the stream&#x2019;s {@linkplain #getByteOrder() current byte
+    * order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @param c an array for storing the read values.
+    *
+    * @param offset the index of the first element in <code>c</code>
+    * that will hold read data.
+    *
+    * @param numChars the number of unsigned 16-bit integers to read
+    * (which is one half of the number of bytes).
+    *
+    * @throws IndexOutOfBoundsException if <code>offset</code> or
+    * <code>numChars</code> is negative, or if <code>offset +
+    * numChars</code> exceeds <code>c.length</code>.
+    *
+    * @throws NullPointerException if <code>c</code> is
+    * <code>null</code>.
+    *
+    * @throws EOFException if the input stream ends before all content
+    * was read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readChar()
+    */
+   void readFully(char[] c, int offset, int numChars)
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a sequence of signed 32-bit integers into a
+    * <code>long[]</code> array.  If necessary, values are converted
+    * from the stream&#x2019;s {@linkplain #getByteOrder() current byte
+    * order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @param i an array for storing the read values.
+    *
+    * @param offset the index of the first element in <code>i</code>
+    * that will hold read data.
+    *
+    * @param numLongs the number of signed 32-bit integers to read
+    * (which is one fourth of the number of bytes).
+    *
+    * @throws IndexOutOfBoundsException if <code>offset</code> or
+    * <code>numInts</code> is negative, or if <code>offset +
+    * numInts</code> exceeds <code>i.length</code>.
+    *
+    * @throws NullPointerException if <code>i</code> is
+    * <code>null</code>.
+    *
+    * @throws EOFException if the input stream ends before all content
+    * was read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readInt()
+    */
+   void readFully(int[] i, int offset, int numInts)
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a sequence of signed 64-bit integers into a
+    * <code>long[]</code> array.  If necessary, values are converted
+    * from the stream&#x2019;s {@linkplain #getByteOrder() current byte
+    * order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @param l an array for storing the read values.
+    *
+    * @param offset the index of the first element in <code>l</code>
+    * that will hold read data.
+    *
+    * @param numLongs the number of signed 64-bit integers to read
+    * (which is one eight of the number of bytes).
+    *
+    * @throws IndexOutOfBoundsException if <code>offset</code> or
+    * <code>numLongs</code> is negative, or if <code>offset +
+    * numLongs</code> exceeds <code>l.length</code>.
+    *
+    * @throws NullPointerException if <code>l</code> is
+    * <code>null</code>.
+    *
+    * @throws EOFException if the input stream ends before all content
+    * was read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readLong()
+    */
+   void readFully(long[] l, int offset, int numLongs)
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a sequence of IEEE 32-bit single-precision floating point
+    * numbers into a <code>float[]</code> array.  If necessary, values
+    * are converted from the stream&#x2019;s {@linkplain
+    * #getByteOrder() current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @param d an array for storing the read values.
+    *
+    * @param offset the index of the first element in <code>d</code>
+    * that will hold read data.
+    *
+    * @param numFloats the number of IEEE 32-bit single-precision
+    * floating point numbers to read (which is one fourth of the number
+    * of bytes).
+    *
+    * @throws IndexOutOfBoundsException if <code>offset</code> or
+    * <code>numFloats</code> is negative, or if <code>offset +
+    * numFloats</code> exceeds <code>f.length</code>.
+    *
+    * @throws NullPointerException if <code>f</code> is
+    * <code>null</code>.
+    *
+    * @throws EOFException if the input stream ends before all content
+    * was read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readFloat()
+    */
+   void readFully(float[] f, int offset, int numFloats)
+     throws IOException;
+ 
+ 
+   /**
+    * Reads a sequence of IEEE 64-bit double-precision floating point
+    * numbers into a <code>double[]</code> array.  If necessary, values
+    * are converted from the stream&#x2019;s {@linkplain
+    * #getByteOrder() current byte order}.
+    *
+    * <p>The {@linkplain #getBitOffset() bit offset} is set to zero
+    * before any data is read.
+    * 
+    * @param d an array for storing the read values.
+    *
+    * @param offset the index of the first element in <code>d</code>
+    * that will hold read data.
+    *
+    * @param numDoubles the number of IEEE 64-bit double-precision
+    * floating point numbers to read (which is one eight of the number
+    * of bytes).
+    *
+    * @throws IndexOutOfBoundsException if <code>offset</code> or
+    * <code>numDoubles</code> is negative, or if <code>offset +
+    * numDoubles</code> exceeds <code>d.length</code>.
+    *
+    * @throws NullPointerException if <code>d</code> is
+    * <code>null</code>.
+    *
+    * @throws EOFException if the input stream ends before all content
+    * was read.
+    *
+    * @throws IOException if some general problem happens with
+    * accessing data.
+    *
+    * @see #readDouble()
+    */
+   void readFully(double[] d, int offset, int numDoubles)
+     throws IOException;
+ 
+   long getStreamPosition()
+     throws IOException;
+ 
+   int getBitOffset()
+     throws IOException;
+ 
+   void setBitOffset(int bitOffset)
+     throws IOException;
+ 
+   int readBit()
+     throws IOException;
+ 
+   long readBits(int numBits)
+     throws IOException;
+ 
+   long length()
+     throws IOException;
+ 
+   int skipBytes(int numBytes)
+     throws IOException;
+ 
+   long skipBytes(long numBytes)
+     throws IOException;
+ 
+   void seek(long pos)
+     throws IOException;
+ 
+   void mark();
+ 
+   void reset()
+     throws IOException;
+ 
+   void flushBefore(long pos)
+     throws IOException;
+ 
+   void flush()
+     throws IOException;
+ 
+   long getFlushedPosition();
+ 
+   boolean isCached();
+ 
+   boolean isCachedMemory();
+ 
+   boolean isCachedFile();
+ 
+   void close()
+     throws IOException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/ImageInputStreamImpl.java gcc-4.0.0/libjava/javax/imageio/stream/ImageInputStreamImpl.java
*** gcc-3.4.3/libjava/javax/imageio/stream/ImageInputStreamImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/ImageInputStreamImpl.java	Mon Feb  7 13:22:36 2005
***************
*** 0 ****
--- 1,515 ----
+ /* ImageInputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.DataInputStream;
+ import java.io.EOFException;
+ import java.io.IOException;
+ import java.nio.ByteOrder;
+ import java.util.Stack;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class ImageInputStreamImpl implements ImageInputStream
+ {
+   private boolean closed;
+   private Stack markStack = new Stack();
+   
+   byte[] buffer = new byte[8];
+   
+   protected int bitOffset;
+   protected ByteOrder byteOrder;
+   protected long flushedPos;
+   protected long streamPos;
+ 
+   public ImageInputStreamImpl()
+   {
+     // Do nothing here.
+   }
+ 
+   protected final void checkClosed()
+     throws IOException
+   {
+     if (closed)
+       throw new IOException("stream closed");
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     checkClosed();
+     closed = true;
+   }
+   
+   protected void finalize()
+     throws Throwable
+   {
+     close();
+   }
+ 
+   public void flush()
+     throws IOException
+   {
+     flushBefore(getStreamPosition());
+   }
+ 
+   public void flushBefore(long position)
+     throws IOException
+   {
+     if (position < flushedPos)
+       throw new IndexOutOfBoundsException();
+ 
+     if (position > streamPos)
+       throw new IndexOutOfBoundsException();
+ 
+     flushedPos = position;
+   }
+ 
+   public int getBitOffset()
+     throws IOException
+   {
+     checkClosed();
+     return bitOffset;
+   }
+ 
+   public ByteOrder getByteOrder()
+   {
+     return byteOrder;
+   }
+ 
+   public long getFlushedPosition()
+   {
+     return flushedPos;
+   }
+ 
+   public long getStreamPosition()
+     throws IOException
+   {
+     checkClosed();
+     return streamPos;
+   }
+ 
+   public boolean isCached()
+   {
+     return false;
+   }
+ 
+   public boolean isCachedFile()
+   {
+     return false;
+   }
+ 
+   public boolean isCachedMemory()
+   {
+     return false;
+   }
+ 
+   public long length()
+   {
+     return -1L;
+   }
+ 
+   public void mark()
+   {
+     try
+       {
+ 	markStack.push(new Long(getStreamPosition()));
+       }
+     catch (IOException e)
+       {
+ 	// Ignored.
+       }
+   }
+ 
+   public abstract int read()
+     throws IOException;
+ 
+   public int read(byte[] data)
+     throws IOException
+   {
+     return read(data, 0, data.length);
+   }
+ 
+   public abstract int read(byte[] data, int offset, int len)
+     throws IOException;
+ 
+   public int readBit()
+     throws IOException
+   {
+     checkClosed();
+ 
+     // Calc new bit offset here, readByte resets it.
+     int newOffset = (bitOffset + 1) & 0x7;
+ 
+     byte data = readByte();
+     
+     if (bitOffset != 0)
+       {
+ 	seek(getStreamPosition() - 1);
+ 	data = (byte) (data >> (8 - newOffset));
+       }
+ 
+     bitOffset = newOffset;
+     return data & 0x1;
+   }
+ 
+   public long readBits(int numBits)
+     throws IOException
+   {
+     checkClosed();
+ 
+     if (numBits < 0 || numBits > 64)
+       throw new IllegalArgumentException();
+ 
+     if (numBits == 0)
+       return 0L;
+ 
+     long bits = 0L;
+     
+     for (int i = 0; i < numBits; i++)
+       {
+ 	bits <<= 1;
+ 	bits |= readBit();
+       }
+ 
+     return bits;
+   }
+ 
+   public boolean readBoolean()
+     throws IOException
+   {
+     byte data = readByte();
+     return data != 0;
+   }
+ 
+   public byte readByte()
+     throws IOException
+   {
+     int data = read();
+ 
+     if (data == -1)
+       throw new EOFException();
+ 
+     return (byte) data;
+   }
+ 
+   public void readBytes(IIOByteBuffer buffer, int len)
+     throws IOException
+   {
+     int result = read(buffer.getData(), buffer.getOffset(), len);
+     
+     if (result == -1 || result < len)
+       throw new EOFException();
+ 
+     buffer.setLength(len);
+   }
+ 
+   public char readChar()
+     throws IOException
+   {
+     return (char) readShort();
+   }
+ 
+   public double readDouble()
+     throws IOException
+   {
+     return (double) readLong();
+   }
+ 
+   public float readFloat()
+     throws IOException
+   {
+     return (float) readInt();
+   }
+ 
+   public void readFully(byte[] data)
+     throws IOException
+   {
+     readFully(data, 0, data.length);
+   }
+ 
+   public void readFully(byte[] data, int offset, int len)
+     throws IOException
+   {
+     for (int i = 0; i < len; ++i)
+       data[offset + i] = readByte();
+   }
+ 
+   public void readFully(char[] data, int offset, int len)
+     throws IOException
+   {
+     for (int i = 0; i < len; ++i)
+       data[offset + i] = readChar();
+   }
+ 
+   public void readFully(double[] data, int offset, int len)
+     throws IOException
+   {
+     for (int i = 0; i < len; ++i)
+       data[offset + i] = readDouble();
+   }
+ 
+   public void readFully(float[] data, int offset, int len)
+     throws IOException
+   {
+     for (int i = 0; i < len; ++i)
+       data[offset + i] = readFloat();
+   }
+ 
+   public void readFully(int[] data, int offset, int len)
+     throws IOException
+   {
+     for (int i = 0; i < len; ++i)
+       data[offset + i] = readInt();
+   }
+ 
+   public void readFully(long[] data, int offset, int len)
+     throws IOException
+   {
+     for (int i = 0; i < len; ++i)
+       data[offset + i] = readLong();
+   }
+ 
+   public void readFully(short[] data, int offset, int len)
+     throws IOException
+   {
+     for (int i = 0; i < len; ++i)
+       data[offset + i] = readShort();
+   }
+ 
+   public int readInt()
+     throws IOException
+   {
+     int result = read(buffer, 0, 4);
+ 
+     if (result == -1)
+       throw new EOFException();
+     
+     if (getByteOrder() == ByteOrder.LITTLE_ENDIAN)
+       {
+ 	return ((buffer[0] & 0xff)
+ 		+ (buffer[1] << 8)
+ 		+ (buffer[2] << 16)
+ 		+ (buffer[3] << 24));
+       }
+ 
+     return ((buffer[4] << 24)
+ 	    + (buffer[3] << 16)
+ 	    + (buffer[2] << 8)
+ 	    + (buffer[1] & 0xff));
+   }
+ 
+   public String readLine()
+     throws IOException
+   {
+     checkClosed();
+ 
+     int c = -1;
+     boolean eol = false;
+     StringBuffer buffer = new StringBuffer();
+ 
+     while (!eol && (c = read()) != -1)
+       {
+ 	switch(c)
+ 	  {
+ 	  case '\r':
+ 	    // Consume following \n'
+ 	    long oldPosition = getStreamPosition();
+ 	    if (read() != '\n')
+ 	       seek(oldPosition);
+ 	  case '\n':
+ 	    eol = true;
+ 	    break;
+ 	  default:
+ 	    buffer.append((char) c);
+ 	    break;
+ 	  }
+       }
+ 
+     if (c == -1 && buffer.length() == 0)
+       return null;
+ 
+     return buffer.toString();
+   }
+ 
+   public long readLong()
+     throws IOException
+   {
+     int result = read(buffer, 0, 8);
+ 
+     if (result == -1)
+       throw new EOFException();
+     
+     if (getByteOrder() == ByteOrder.LITTLE_ENDIAN)
+       {
+         return ((buffer[0] & 0xff)
+                 + (((buffer[1] & 0xff)) << 8)
+                 + (((buffer[2] & 0xff)) << 16)
+                 + (((buffer[3] & 0xffL)) << 24)
+                 + (((buffer[4] & 0xffL)) << 32)
+                 + (((buffer[5] & 0xffL)) << 40)
+                 + (((buffer[6] & 0xffL)) << 48)
+                 + (((long) buffer[7]) << 56));
+       }
+ 
+     return ((((long) buffer[7]) << 56)
+             + ((buffer[6] & 0xffL) << 48)
+             + ((buffer[5] & 0xffL) << 40)
+             + ((buffer[4] & 0xffL) << 32)
+             + ((buffer[3] & 0xffL) << 24)
+             + ((buffer[2] & 0xff) << 16)
+             + ((buffer[1] & 0xff) << 8)
+             + (buffer[0] & 0xff));
+   }
+ 
+   public short readShort()
+     throws IOException
+   {
+     int result = read(buffer, 0, 2);
+ 
+     if (result == -1)
+       throw new EOFException();
+     
+     if (getByteOrder() == ByteOrder.LITTLE_ENDIAN)
+       {
+ 	return (short) ((buffer[0] & 0xff)
+ 			+ (buffer[1] << 8));
+       }
+ 
+     return (short) ((buffer[0] << 8)
+ 		    + (buffer[1] & 0xff));
+   }
+ 
+   public int readUnsignedByte()
+     throws IOException
+   {
+     return readByte() & 0xff;
+   }
+ 
+   public long readUnsignedInt()
+     throws IOException
+   {
+     return readInt() & 0xffffffff;
+   }
+ 
+   public int readUnsignedShort()
+     throws IOException
+   {
+     return readShort() & 0xffff;
+   }
+ 
+   public String readUTF()
+     throws IOException
+   {
+     checkClosed();
+ 
+     String data;
+     ByteOrder old = getByteOrder();
+     setByteOrder(ByteOrder.BIG_ENDIAN); // Strings are always big endian.
+ 
+     try
+       {
+ 	data = DataInputStream.readUTF(this);
+       }
+     finally
+       {
+ 	setByteOrder(old);
+       }
+     
+     return data;
+   }
+ 
+   public void reset()
+     throws IOException
+   {
+     checkClosed();
+     
+     long mark = ((Long) markStack.pop()).longValue();
+     seek(mark);
+   }
+ 
+   public void seek(long position)
+     throws IOException
+   {
+     checkClosed();
+ 
+     if (position < getFlushedPosition())
+       throw new IndexOutOfBoundsException("position < flushed position");
+ 
+     streamPos = position;
+     bitOffset = 0;
+   }
+ 
+   public void setBitOffset (int bitOffset)
+     throws IOException
+   {
+     checkClosed();
+     
+     if (bitOffset < 0 || bitOffset > 7)
+       throw new IllegalArgumentException();
+ 
+     this.bitOffset = bitOffset;
+   }
+ 
+   public void setByteOrder(ByteOrder byteOrder)
+   {
+     this.byteOrder = byteOrder;
+   }
+ 
+   public int skipBytes(int num)
+     throws IOException
+   {
+     checkClosed();
+     
+     seek(getStreamPosition() + num);
+     bitOffset = 0;
+     return num;
+   }
+ 
+   public long skipBytes(long num)
+     throws IOException
+   {
+     checkClosed();
+     
+     seek(getStreamPosition() + num);
+     bitOffset = 0;
+     return num;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/ImageOutputStream.java gcc-4.0.0/libjava/javax/imageio/stream/ImageOutputStream.java
*** gcc-3.4.3/libjava/javax/imageio/stream/ImageOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/ImageOutputStream.java	Thu Feb 17 07:48:48 2005
***************
*** 0 ****
--- 1,269 ----
+ /* ImageOutputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.DataOutput;
+ import java.io.IOException;
+ 
+ 
+ /**
+  * An output stream for use by {@link javax.imageio.ImageWriter
+  * ImageWriters}.
+  *
+  * @since 1.4
+  *
+  * @author Sascha Brawer (brawer@dandelis.ch)
+  */
+ public interface ImageOutputStream
+   extends ImageInputStream, DataOutput
+ {
+   /**
+    * @param postion
+    *
+    * @throws IOException if an errror occurs
+    */
+   void flushBefore(long position) throws IOException;
+ 
+   /**
+    * Writes an array into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void write(byte[] data) throws IOException;
+ 
+   /**
+    * Writes a region of data from an array into the stream.
+    *
+    * @param data the data to be written
+    * @param offset the offset in the array
+    * @param len the length in the array
+    *
+    * @throws IOException if an errror occurs
+    */
+   void write(byte[] data, int offset, int len) throws IOException;
+ 
+   /**
+    * Writes an <code>int</code> into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void write(int data) throws IOException;
+ 
+   /**
+    * Writes a bit value to the stream.
+    *
+    * @throws IOException if an error occurs
+    */
+   void writeBit(int bit) throws IOException;
+ 
+   /**
+    * Writes a number of bit values to the stream.
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeBits(long bits, int numBits) throws IOException;
+ 
+   /**
+    * Writes a <code>boolean</code> value into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeBoolean(boolean data) throws IOException;
+ 
+   /**
+    * Writes a <code>byte</code> value into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeByte(int data) throws IOException;
+ 
+   /**
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeBytes(String data) throws IOException;
+ 
+   /**
+    * Writes a character into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeChar(int data) throws IOException;
+ 
+   /**
+    * Writes characters to the stream.
+    *
+    * @param data the data to be written
+    * @param offset the offset in the array
+    * @param len the lenth in the array
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeChars(char[] data, int offset, int len) throws IOException;
+ 
+   /**
+    * Writes characters from a given <code>String</code> into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeChars(String data) throws IOException;
+ 
+   /**
+    * Writes a <code>double</code> into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeDouble(double data) throws IOException;
+ 
+   /**
+    * Writes an array of <code>double</code> into the stream.
+    *
+    * @param data the data to be written
+    * @param offset the offset in the array
+    * @param len the lenth in the array
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeDoubles(double[] data, int offset, int len)
+     throws IOException;
+ 
+   /**
+    * Writes a <code>float</code> into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeFloat(float data) throws IOException;
+ 
+   /**
+    * Writes an array of <code>float</code> into the stream.
+    *
+    * @param data the data to be written
+    * @param offset the offset in the array
+    * @param len the lenth in the array
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeFloats(float[] data, int offset, int len) throws IOException;
+ 
+   /**
+    * Writes a <code>int</code> into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeInt(int data) throws IOException;
+ 
+   /**
+    * Writes an array of <code>int</code> into the stream.
+    *
+    * @param data the data to be written
+    * @param offset the offset in the array
+    * @param len the lenth in the array
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeInts(int[] data, int offset, int len) throws IOException;
+ 
+   /**
+    * Writes a <code>long</code> into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeLong(long data) throws IOException;
+ 
+   /**
+    * Writes an array of <code>long</code> into the stream.
+    *
+    * @param data the data to be written
+    * @param offset the offset in the array
+    * @param len the lenth in the array
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeLongs(long[] data, int offset, int len) throws IOException;
+ 
+   /**
+    * Writes a <code>short</code> into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeShort(int data) throws IOException;
+ 
+   /**
+    * Writes an array of <code>short</code> into the stream.
+    *
+    * @param data the data to be written
+    * @param offset the offset in the array
+    * @param len the lenth in the array
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeShorts(short[] data, int offset, int len) throws IOException;
+ 
+   /**
+    * Writes a <code>String</code> into the stream.
+    *
+    * @param data the data to be written
+    *
+    * @throws IOException if an errror occurs
+    */
+   void writeUTF(String data) throws IOException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/ImageOutputStreamImpl.java gcc-4.0.0/libjava/javax/imageio/stream/ImageOutputStreamImpl.java
*** gcc-3.4.3/libjava/javax/imageio/stream/ImageOutputStreamImpl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/ImageOutputStreamImpl.java	Mon Feb  7 13:22:36 2005
***************
*** 0 ****
--- 1,245 ----
+ /* ImageOutputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.IOException;
+ import java.nio.ByteOrder;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl
+   implements ImageOutputStream
+ {
+   public ImageOutputStreamImpl()
+   {
+     // Do nothing here.
+   }
+ 
+   protected void flushBits()
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public void write(byte[] data)
+     throws IOException
+   {
+     write(data, 0, data.length);
+   }
+ 
+   public abstract void write(byte[] data, int offset, int len)
+     throws IOException;
+ 
+   public abstract void write(int value)
+     throws IOException;
+ 
+   public void writeBit(int bit)
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public void writeBits(long bits, int numBits)
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public void writeBoolean(boolean value)
+     throws IOException
+   {
+     writeByte(value ? 1 : 0);
+   }
+ 
+   public void writeByte(int value)
+     throws IOException
+   {
+     write(value & 0xff);
+   }
+ 
+   public void writeBytes(String data)
+     throws IOException
+   {
+     write(data.getBytes());
+   }
+ 
+   public void writeChar(int value)
+     throws IOException
+   {
+     writeShort((short) value);
+   }
+ 
+   public void writeChars(char[] data, int offset, int len)
+     throws IOException
+   {
+     for(int i = 0; i < len; ++len)
+       writeChar(data[offset + i]);
+   }
+ 
+   public void writeChars(String data)
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public void writeDouble(double value)
+     throws IOException
+   {
+     writeLong((long) value);
+   }
+ 
+   public void writeDoubles(double[] data, int offset, int len)
+     throws IOException
+   {
+     for(int i = 0; i < len; ++len)
+       writeDouble(data[offset + i]);
+   }
+   
+   public void writeFloat(float value)
+     throws IOException
+   {
+     writeInt((int) value);
+   }
+   
+   public void writeFloats(float[] data, int offset, int len)
+     throws IOException
+   {
+     for(int i = 0; i < len; ++len)
+       writeFloat(data[offset + i]);
+   }
+   
+   public void writeInt(int value)
+     throws IOException
+   {
+     if (getByteOrder() == ByteOrder.LITTLE_ENDIAN)
+       {
+         buffer[0] = ((byte) value);
+         buffer[1] = ((byte) (value >> 8));
+         buffer[2] = ((byte) (value >> 16));
+         buffer[3] = ((byte) (value >> 24));
+       }
+     else
+       {
+         buffer[0] = ((byte) (value >> 24));
+         buffer[1] = ((byte) (value >> 16));
+         buffer[2] = ((byte) (value >> 8));
+         buffer[3] = ((byte) value);
+       }
+     
+     write(buffer, 0, 4);
+   }
+   
+   public void writeInts(int[] data, int offset, int len)
+     throws IOException
+   {
+     for(int i = 0; i < len; ++len)
+       writeInt(data[offset + i]);
+   }
+   
+   public void writeLong(long value)
+     throws IOException
+   {
+     if (getByteOrder() == ByteOrder.LITTLE_ENDIAN)
+       {
+         buffer[0] = ((byte) value);
+         buffer[1] = ((byte) (value >> 8));
+         buffer[2] = ((byte) (value >> 16));
+         buffer[3] = ((byte) (value >> 24));
+         buffer[4] = ((byte) (value >> 32));
+         buffer[5] = ((byte) (value >> 40));
+         buffer[6] = ((byte) (value >> 48));
+         buffer[7] = ((byte) (value >> 56));
+       }
+     else
+       {
+         buffer[0] = ((byte) (value >> 56));
+         buffer[1] = ((byte) (value >> 48));
+         buffer[2] = ((byte) (value >> 40));
+         buffer[3] = ((byte) (value >> 32));
+         buffer[4] = ((byte) (value >> 24));
+         buffer[5] = ((byte) (value >> 16));
+         buffer[6] = ((byte) (value >> 8));
+         buffer[7] = ((byte) value);
+       }
+     
+     write(buffer, 0, 8);
+   }
+   
+   public void writeLongs(long[] data, int offset, int len)
+     throws IOException
+   {
+     for(int i = 0; i < len; ++len)
+       writeLong(data[offset + i]);
+   }
+   
+   public void writeShort(int value)
+     throws IOException
+   {
+     if (getByteOrder() == ByteOrder.LITTLE_ENDIAN)
+       {
+         buffer[0] = ((byte) value);
+         buffer[1] = ((byte) (value >> 8));
+       }
+     else
+       {
+         buffer[0] = ((byte) (value >> 8));
+         buffer[1] = ((byte) value);
+       }
+     
+     write(buffer, 0, 2);
+   }
+   
+   public void writeShorts(short[] data, int offset, int len)
+     throws IOException
+   {
+     for(int i = 0; i < len; ++len)
+       writeShort(data[offset + i]);
+   }
+   
+   public void writeUTF(String data)
+     throws IOException
+   {
+     throw new Error("not implemented");
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/MemoryCacheImageInputStream.java gcc-4.0.0/libjava/javax/imageio/stream/MemoryCacheImageInputStream.java
*** gcc-3.4.3/libjava/javax/imageio/stream/MemoryCacheImageInputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/MemoryCacheImageInputStream.java	Mon Feb  7 13:22:36 2005
***************
*** 0 ****
--- 1,98 ----
+ /* MemoryCacheImageInputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class MemoryCacheImageInputStream extends ImageInputStreamImpl
+ {
+   private InputStream stream;
+   
+   public MemoryCacheImageInputStream(InputStream stream)
+   {
+     this.stream = stream;
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     super.close();
+     stream.close();
+   }
+ 
+   public void flushBefore(long position)
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public boolean isCached()
+   {
+     return true;
+   }
+ 
+   public boolean isCachedFile()
+   {
+     return false;
+   }
+   
+   public boolean isCachedMemory()
+   {
+     return true;
+   }
+ 
+   public int read()
+     throws IOException
+   {
+     setBitOffset(0);
+     return stream.read();
+   }
+ 
+   public int read(byte[] data, int offset, int len)
+     throws IOException
+   {
+     setBitOffset(0);
+     return stream.read(data, offset, len);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/MemoryCacheImageOutputStream.java gcc-4.0.0/libjava/javax/imageio/stream/MemoryCacheImageOutputStream.java
*** gcc-3.4.3/libjava/javax/imageio/stream/MemoryCacheImageOutputStream.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/MemoryCacheImageOutputStream.java	Mon Feb  7 13:22:36 2005
***************
*** 0 ****
--- 1,112 ----
+ /* MemoryCacheImageOutputStream.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.imageio.stream;
+ 
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class MemoryCacheImageOutputStream extends ImageOutputStreamImpl
+ {
+   private OutputStream stream;
+ 
+   public MemoryCacheImageOutputStream(OutputStream stream)
+   {
+     this.stream = stream;
+   }
+ 
+   public void close()
+     throws IOException
+   {
+     super.close();
+     stream.close();
+   }
+ 
+   public void flushBefore(long position)
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public boolean isCached()
+   {
+     return true;
+   }
+ 
+   public boolean isCachedFile()
+   {
+     return false;
+   }
+   
+   public boolean isCachedMemory()
+   {
+     return true;
+   }
+ 
+   public int read()
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public int read (byte[] data, int offset, int len)
+     throws IOException
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public void write(byte[] data, int offset, int len)
+     throws IOException
+   {
+     // FIXME: Flush pending bits.
+     stream.write(data, offset, len);
+   }
+ 
+   public void write(int value)
+     throws IOException
+   {
+     // FIXME: Flush pending bits.
+     stream.write(value);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/imageio/stream/package.html gcc-4.0.0/libjava/javax/imageio/stream/package.html
*** gcc-3.4.3/libjava/javax/imageio/stream/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/imageio/stream/package.html	Wed Apr 21 08:20:31 2004
***************
*** 0 ****
--- 1,46 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <!-- package.html - describes classes in javax.imageio.stream 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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.imageio.stream</title></head>
+ 
+ <body>
+ <p></p>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/AuthenticationException.java gcc-4.0.0/libjava/javax/naming/AuthenticationException.java
*** gcc-3.4.3/libjava/javax/naming/AuthenticationException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/AuthenticationException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* AuthenticationException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AuthenticationException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
   
  package javax.naming;
  
- import java.lang.Exception;
   
  public class AuthenticationException extends NamingSecurityException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/AuthenticationNotSupportedException.java gcc-4.0.0/libjava/javax/naming/AuthenticationNotSupportedException.java
*** gcc-3.4.3/libjava/javax/naming/AuthenticationNotSupportedException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/AuthenticationNotSupportedException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* AuthenticationNotSupportedException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AuthenticationNotSupportedException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
   
  package javax.naming;
  
- import java.lang.Exception;
   
  public class AuthenticationNotSupportedException
    extends NamingSecurityException
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/Binding.java gcc-4.0.0/libjava/javax/naming/Binding.java
*** gcc-3.4.3/libjava/javax/naming/Binding.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/Binding.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* Binding.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Binding.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.naming;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date May 16, 2001
   */
  public class Binding extends NameClassPair
--- 39,45 ----
  package javax.naming;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date May 16, 2001
   */
  public class Binding extends NameClassPair
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/CannotProceedException.java gcc-4.0.0/libjava/javax/naming/CannotProceedException.java
*** gcc-3.4.3/libjava/javax/naming/CannotProceedException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/CannotProceedException.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* CannotProceedException.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CannotProceedException.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,48 ****
   
  package javax.naming;
  
- import java.lang.Exception;
  import java.util.Hashtable;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 14, 2001
   */
  
--- 38,47 ----
   
  package javax.naming;
  
  import java.util.Hashtable;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 14, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/CommunicationException.java gcc-4.0.0/libjava/javax/naming/CommunicationException.java
*** gcc-3.4.3/libjava/javax/naming/CommunicationException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/CommunicationException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* CommunicationException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CommunicationException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class CommunicationException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/CompositeName.java gcc-4.0.0/libjava/javax/naming/CompositeName.java
*** gcc-3.4.3/libjava/javax/naming/CompositeName.java	Fri Jun 27 13:06:50 2003
--- gcc-4.0.0/libjava/javax/naming/CompositeName.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* CompositeName.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CompositeName.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.NoSuchElementException;
*** 44,50 ****
  import java.util.Vector;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date May 16, 2001
   *
   * FIXME: must write readObject and writeObject to conform to
--- 44,50 ----
  import java.util.Vector;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date May 16, 2001
   *
   * FIXME: must write readObject and writeObject to conform to
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/CompoundName.java gcc-4.0.0/libjava/javax/naming/CompoundName.java
*** gcc-3.4.3/libjava/javax/naming/CompoundName.java	Tue Nov 11 12:22:20 2003
--- gcc-4.0.0/libjava/javax/naming/CompoundName.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* CompoundName.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* CompoundName.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming;
*** 40,51 ****
  
  import java.io.Serializable;
  import java.util.Enumeration;
- import java.util.Properties;
  import java.util.NoSuchElementException;
  import java.util.Vector;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date May 16, 2001
   *
   * FIXME: must write readObject and writeObject to conform to
--- 40,51 ----
  
  import java.io.Serializable;
  import java.util.Enumeration;
  import java.util.NoSuchElementException;
+ import java.util.Properties;
  import java.util.Vector;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date May 16, 2001
   *
   * FIXME: must write readObject and writeObject to conform to
*************** import java.util.Vector;
*** 55,60 ****
--- 55,62 ----
   * direction is never described.  If it means that the CompoundName
   * can only have a single element, then the Enumeration-based
   * constructor ought to throw InvalidNameException.
+  *
+  * @since 1.3
   */
  public class CompoundName implements Name, Cloneable, Serializable
  {
*************** public class CompoundName implements Nam
*** 158,164 ****
  	    i += special.length ();
  	    continue;
  	  }
! 	else if (special == separator)
  	  {
  	    elts.add (new_element.toString ());
  	    new_element.setLength (0);
--- 160,166 ----
  	    i += special.length ();
  	    continue;
  	  }
! 	else if (direction != FLAT && special == separator)
  	  {
  	    elts.add (new_element.toString ());
  	    new_element.setLength (0);
*************** public class CompoundName implements Nam
*** 264,270 ****
      int delta = elts.size () - cn.elts.size ();
      for (int i = 0; i < cn.elts.size (); ++i)
        {
! 	String f = canonicalize ((String) elts.get (i));
  	if (! f.equals (canonicalize ((String) cn.elts.get (i))))
  	  return false;
        }
--- 266,272 ----
      int delta = elts.size () - cn.elts.size ();
      for (int i = 0; i < cn.elts.size (); ++i)
        {
! 	String f = canonicalize ((String) elts.get (delta + i));
  	if (! f.equals (canonicalize ((String) cn.elts.get (i))))
  	  return false;
        }
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ConfigurationException.java gcc-4.0.0/libjava/javax/naming/ConfigurationException.java
*** gcc-3.4.3/libjava/javax/naming/ConfigurationException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/ConfigurationException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* ConfigurationException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ConfigurationException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class ConfigurationException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ContextNotEmptyException.java gcc-4.0.0/libjava/javax/naming/ContextNotEmptyException.java
*** gcc-3.4.3/libjava/javax/naming/ContextNotEmptyException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/ContextNotEmptyException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* ContextNotEmptyException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ContextNotEmptyException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class ContextNotEmptyException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/InitialContext.java gcc-4.0.0/libjava/javax/naming/InitialContext.java
*** gcc-3.4.3/libjava/javax/naming/InitialContext.java	Wed Oct 29 14:54:00 2003
--- gcc-4.0.0/libjava/javax/naming/InitialContext.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* InitialContext.java --
!    Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InitialContext.java --
!    Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,52 ****
  package javax.naming;
  
  import java.applet.Applet;
- import java.io.File;
- import java.io.FileInputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.net.URL;
  import java.util.Enumeration;
  import java.util.Hashtable;
  import java.util.Properties;
  import javax.naming.spi.NamingManager;
  
  public class InitialContext implements Context
--- 39,51 ----
  package javax.naming;
  
  import java.applet.Applet;
  import java.io.IOException;
  import java.io.InputStream;
  import java.net.URL;
  import java.util.Enumeration;
  import java.util.Hashtable;
  import java.util.Properties;
+ 
  import javax.naming.spi.NamingManager;
  
  public class InitialContext implements Context
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/InsufficientResourcesException.java gcc-4.0.0/libjava/javax/naming/InsufficientResourcesException.java
*** gcc-3.4.3/libjava/javax/naming/InsufficientResourcesException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/InsufficientResourcesException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* InsufficientResourcesException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InsufficientResourcesException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
   
  package javax.naming;
  
- import java.lang.Exception;
   
  public class InsufficientResourcesException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/InterruptedNamingException.java gcc-4.0.0/libjava/javax/naming/InterruptedNamingException.java
*** gcc-3.4.3/libjava/javax/naming/InterruptedNamingException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/InterruptedNamingException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* InterruptedNamingException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InterruptedNamingException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class InterruptedNamingException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/LimitExceededException.java gcc-4.0.0/libjava/javax/naming/LimitExceededException.java
*** gcc-3.4.3/libjava/javax/naming/LimitExceededException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/LimitExceededException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* LimitExceededException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LimitExceededException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
   
  package javax.naming;
  
- import java.lang.Exception;
   
  public class LimitExceededException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/LinkException.java gcc-4.0.0/libjava/javax/naming/LinkException.java
*** gcc-3.4.3/libjava/javax/naming/LinkException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/LinkException.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* LinkException.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LinkException.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,47 ****
   
  package javax.naming;
  
- import java.lang.Exception;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 14, 2001
   */
  
--- 38,46 ----
   
  package javax.naming;
  
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 14, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/LinkLoopException.java gcc-4.0.0/libjava/javax/naming/LinkLoopException.java
*** gcc-3.4.3/libjava/javax/naming/LinkLoopException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/LinkLoopException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* LinkLoopException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LinkLoopException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
   
  package javax.naming;
  
- import java.lang.Exception;
   
  public class LinkLoopException extends LinkException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/LinkRef.java gcc-4.0.0/libjava/javax/naming/LinkRef.java
*** gcc-3.4.3/libjava/javax/naming/LinkRef.java	Fri Jun 27 13:06:50 2003
--- gcc-4.0.0/libjava/javax/naming/LinkRef.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* LinkRef.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LinkRef.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,47 ****
  
  package javax.naming;
  
- import java.io.Serializable;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date May 16, 2001
   */
  public class LinkRef extends Reference
--- 38,46 ----
  
  package javax.naming;
  
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date May 16, 2001
   */
  public class LinkRef extends Reference
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/MalformedLinkException.java gcc-4.0.0/libjava/javax/naming/MalformedLinkException.java
*** gcc-3.4.3/libjava/javax/naming/MalformedLinkException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/MalformedLinkException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* MalformedLinkException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MalformedLinkException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class MalformedLinkException extends LinkException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/Name.java gcc-4.0.0/libjava/javax/naming/Name.java
*** gcc-3.4.3/libjava/javax/naming/Name.java	Sat Oct 11 19:06:21 2003
--- gcc-4.0.0/libjava/javax/naming/Name.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* Name.java -- Name build up from different components
!    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Name.java -- Name build up from different components
!    Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,44 ****
  
  package javax.naming;
  
- import java.util.Enumeration;
  import java.io.Serializable;
  
  /**
   * Interface descriping a name build up from different components.
--- 37,44 ----
  
  package javax.naming;
  
  import java.io.Serializable;
+ import java.util.Enumeration;
  
  /**
   * Interface descriping a name build up from different components.
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/NameAlreadyBoundException.java gcc-4.0.0/libjava/javax/naming/NameAlreadyBoundException.java
*** gcc-3.4.3/libjava/javax/naming/NameAlreadyBoundException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/NameAlreadyBoundException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* NameAlreadyBoundException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NameAlreadyBoundException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class NameAlreadyBoundException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/NameClassPair.java gcc-4.0.0/libjava/javax/naming/NameClassPair.java
*** gcc-3.4.3/libjava/javax/naming/NameClassPair.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/NameClassPair.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* NameClassPair.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NameClassPair.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming;
*** 41,47 ****
  import java.io.Serializable;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date May 16, 2001
   */
  public class NameClassPair implements Serializable
--- 41,47 ----
  import java.io.Serializable;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date May 16, 2001
   */
  public class NameClassPair implements Serializable
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/NameNotFoundException.java gcc-4.0.0/libjava/javax/naming/NameNotFoundException.java
*** gcc-3.4.3/libjava/javax/naming/NameNotFoundException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/NameNotFoundException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* NameNotFoundException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NameNotFoundException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
   
  package javax.naming;
  
- import java.lang.Exception;
   
  public class NameNotFoundException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/NamingException.java gcc-4.0.0/libjava/javax/naming/NamingException.java
*** gcc-3.4.3/libjava/javax/naming/NamingException.java	Fri Jun 27 13:06:50 2003
--- gcc-4.0.0/libjava/javax/naming/NamingException.java	Tue Apr 20 14:45:10 2004
*************** public class NamingException extends Exc
*** 93,99 ****
    /**
     * Creates a new NamingException without a message. Does not set any of the
     * <code>rootException</code>, <code>resolvedName</code>,
!    * <code>resolvedObj</code> or <code>remainingObject,<code> fields.
     * These fields can be set later.
     */
    public NamingException ()
--- 93,99 ----
    /**
     * Creates a new NamingException without a message. Does not set any of the
     * <code>rootException</code>, <code>resolvedName</code>,
!    * <code>resolvedObj</code> or <code>remainingObject</code> fields.
     * These fields can be set later.
     */
    public NamingException ()
*************** public class NamingException extends Exc
*** 104,110 ****
    /**
     * Creates a new NamingException with a detailed message. Does not set
     * the <code>rootException</code>, <code>resolvedName</code>,
!    * <code>resolvedObj</code> or <code>remainingObject,<code> fields.
     * These fields can be set later.
     */
    public NamingException (String msg)
--- 104,110 ----
    /**
     * Creates a new NamingException with a detailed message. Does not set
     * the <code>rootException</code>, <code>resolvedName</code>,
!    * <code>resolvedObj</code> or <code>remainingObject,</code> fields.
     * These fields can be set later.
     */
    public NamingException (String msg)
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/NamingSecurityException.java gcc-4.0.0/libjava/javax/naming/NamingSecurityException.java
*** gcc-3.4.3/libjava/javax/naming/NamingSecurityException.java	Fri Jun 27 13:06:50 2003
--- gcc-4.0.0/libjava/javax/naming/NamingSecurityException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* NamingSecurityException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NamingSecurityException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public abstract class NamingSecurityException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/NoInitialContextException.java gcc-4.0.0/libjava/javax/naming/NoInitialContextException.java
*** gcc-3.4.3/libjava/javax/naming/NoInitialContextException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/NoInitialContextException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* NoInitialContextException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NoInitialContextException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class NoInitialContextException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/NoPermissionException.java gcc-4.0.0/libjava/javax/naming/NoPermissionException.java
*** gcc-3.4.3/libjava/javax/naming/NoPermissionException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/NoPermissionException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* NoPermissionException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NoPermissionException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class NoPermissionException extends NamingSecurityException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/NotContextException.java gcc-4.0.0/libjava/javax/naming/NotContextException.java
*** gcc-3.4.3/libjava/javax/naming/NotContextException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/NotContextException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* NotContextException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NotContextException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class NotContextException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/PartialResultException.java gcc-4.0.0/libjava/javax/naming/PartialResultException.java
*** gcc-3.4.3/libjava/javax/naming/PartialResultException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/PartialResultException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* PartialResultException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PartialResultException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class PartialResultException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/Reference.java gcc-4.0.0/libjava/javax/naming/Reference.java
*** gcc-3.4.3/libjava/javax/naming/Reference.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/Reference.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* Reference.java --
!    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Reference.java --
!    Copyright (C) 2000, 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.Enumeration;
*** 43,49 ****
  import java.util.Vector;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date May 16, 2001
   */
  public class Reference implements Cloneable, Serializable
--- 43,49 ----
  import java.util.Vector;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date May 16, 2001
   */
  public class Reference implements Cloneable, Serializable
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ReferralException.java gcc-4.0.0/libjava/javax/naming/ReferralException.java
*** gcc-3.4.3/libjava/javax/naming/ReferralException.java	Fri Jun 27 13:06:50 2003
--- gcc-4.0.0/libjava/javax/naming/ReferralException.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* ReferralException.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ReferralException.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,48 ****
  
  package javax.naming;
  
- import java.lang.Exception;
  import java.util.Hashtable;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 14, 2001
   */
  
--- 38,47 ----
  
  package javax.naming;
  
  import java.util.Hashtable;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 14, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ServiceUnavailableException.java gcc-4.0.0/libjava/javax/naming/ServiceUnavailableException.java
*** gcc-3.4.3/libjava/javax/naming/ServiceUnavailableException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/ServiceUnavailableException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* ServiceUnavailableException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ServiceUnavailableException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class ServiceUnavailableException extends NamingException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/SizeLimitExceededException.java gcc-4.0.0/libjava/javax/naming/SizeLimitExceededException.java
*** gcc-3.4.3/libjava/javax/naming/SizeLimitExceededException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/SizeLimitExceededException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* SizeLimitExceededException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SizeLimitExceededException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class SizeLimitExceededException extends LimitExceededException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/TimeLimitExceededException.java gcc-4.0.0/libjava/javax/naming/TimeLimitExceededException.java
*** gcc-3.4.3/libjava/javax/naming/TimeLimitExceededException.java	Sat Nov 23 21:50:39 2002
--- gcc-4.0.0/libjava/javax/naming/TimeLimitExceededException.java	Wed Apr 21 07:18:03 2004
***************
*** 1,5 ****
  /* TimeLimitExceededException.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TimeLimitExceededException.java --
!    Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  
  package javax.naming;
  
- import java.lang.Exception;
   
  public class TimeLimitExceededException extends LimitExceededException
  {
--- 38,43 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/Attribute.java gcc-4.0.0/libjava/javax/naming/directory/Attribute.java
*** gcc-3.4.3/libjava/javax/naming/directory/Attribute.java	Sat Dec  6 08:41:36 2003
--- gcc-4.0.0/libjava/javax/naming/directory/Attribute.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* Attribute.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Attribute.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,51 ****
  package javax.naming.directory;
  
  import java.io.Serializable;
! import javax.naming.Context;
! import javax.naming.Name;
  import javax.naming.NamingEnumeration;
  import javax.naming.NamingException;
  
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 14, 2001
   */
  public interface Attribute extends Cloneable, Serializable
--- 39,50 ----
  package javax.naming.directory;
  
  import java.io.Serializable;
! 
  import javax.naming.NamingEnumeration;
  import javax.naming.NamingException;
  
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 14, 2001
   */
  public interface Attribute extends Cloneable, Serializable
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/AttributeModificationException.java gcc-4.0.0/libjava/javax/naming/directory/AttributeModificationException.java
*** gcc-3.4.3/libjava/javax/naming/directory/AttributeModificationException.java	Sat Nov 23 21:50:40 2002
--- gcc-4.0.0/libjava/javax/naming/directory/AttributeModificationException.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* AttributeModificationException.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AttributeModificationException.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.directory;
*** 41,47 ****
  import javax.naming.NamingException;
  
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 14, 2001
   */
  
--- 41,47 ----
  import javax.naming.NamingException;
  
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 14, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/Attributes.java gcc-4.0.0/libjava/javax/naming/directory/Attributes.java
*** gcc-3.4.3/libjava/javax/naming/directory/Attributes.java	Sat Dec  6 08:41:36 2003
--- gcc-4.0.0/libjava/javax/naming/directory/Attributes.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* Attributes.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Attributes.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,50 ****
  package javax.naming.directory;
  
  import java.io.Serializable;
! import javax.naming.Context;
! import javax.naming.Name;
  import javax.naming.NamingEnumeration;
  
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 14, 2001
   */
  
--- 39,49 ----
  package javax.naming.directory;
  
  import java.io.Serializable;
! 
  import javax.naming.NamingEnumeration;
  
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 14, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/BasicAttribute.java gcc-4.0.0/libjava/javax/naming/directory/BasicAttribute.java
*** gcc-3.4.3/libjava/javax/naming/directory/BasicAttribute.java	Fri Jun 27 13:06:50 2003
--- gcc-4.0.0/libjava/javax/naming/directory/BasicAttribute.java	Thu Oct 21 20:50:12 2004
***************
*** 1,5 ****
  /* BasicAttribute.java --
!    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BasicAttribute.java --
!    Copyright (C) 2000, 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.directory;
*** 40,51 ****
  
  import java.util.NoSuchElementException;
  import java.util.Vector;
  import javax.naming.NamingEnumeration;
  import javax.naming.NamingException;
  import javax.naming.OperationNotSupportedException;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date June 20, 2001
   */
  public class BasicAttribute implements Attribute
--- 40,52 ----
  
  import java.util.NoSuchElementException;
  import java.util.Vector;
+ 
  import javax.naming.NamingEnumeration;
  import javax.naming.NamingException;
  import javax.naming.OperationNotSupportedException;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date June 20, 2001
   */
  public class BasicAttribute implements Attribute
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/BasicAttributes.java gcc-4.0.0/libjava/javax/naming/directory/BasicAttributes.java
*** gcc-3.4.3/libjava/javax/naming/directory/BasicAttributes.java	Fri Jun 27 13:06:50 2003
--- gcc-4.0.0/libjava/javax/naming/directory/BasicAttributes.java	Sat Apr  2 21:03:09 2005
***************
*** 1,5 ****
  /* BasicAttributes.java --
!    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BasicAttributes.java --
!    Copyright (C) 2000, 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.directory;
*** 40,50 ****
  
  import java.util.NoSuchElementException;
  import java.util.Vector;
  import javax.naming.NamingEnumeration;
  import javax.naming.NamingException;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date June 22, 2001
   */
  public class BasicAttributes implements Attributes
--- 40,51 ----
  
  import java.util.NoSuchElementException;
  import java.util.Vector;
+ 
  import javax.naming.NamingEnumeration;
  import javax.naming.NamingException;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date June 22, 2001
   */
  public class BasicAttributes implements Attributes
*************** public class BasicAttributes implements 
*** 82,100 ****
      return ba;
    }
  
    public boolean equals (Object obj)
    {
!     if (! (obj instanceof BasicAttributes))
        return false;
!     BasicAttributes b = (BasicAttributes) obj;
!     if (ignoreCase != b.ignoreCase
! 	|| attributes.size () != b.attributes.size ())
        return false;
  
!     // Does order matter?
!     for (int i = 0; i < attributes.size (); ++i)
        {
! 	if (! attributes.get (i).equals (b.attributes.get (i)))
  	  return false;
        }
  
--- 83,109 ----
      return ba;
    }
  
+   /**
+    * Returns true if and only if the given Object is an instance of
+    * Attributes, the given attributes both do or don't ignore case for
+    * IDs and the collection of attributes is the same.
+    */
    public boolean equals (Object obj)
    {
!     if (! (obj instanceof Attributes))
        return false;
! 
!     Attributes bs = (Attributes) obj;
!     if (ignoreCase != bs.isCaseIgnored()
! 	|| attributes.size () != bs.size ())
        return false;
  
!     NamingEnumeration bas = bs.getAll();
!     while (bas.hasMoreElements())
        {
! 	Attribute a = (Attribute) bas.nextElement();
! 	Attribute b = get(a.getID ());
! 	if (! a.equals(b))
  	  return false;
        }
  
*************** public class BasicAttributes implements 
*** 184,195 ****
  
    // This is set by the serialization spec.
    private boolean ignoreCase;
!   private transient Vector attributes;
  
    // Used when enumerating.
    private class BasicAttributesEnumeration implements NamingEnumeration
    {
!     int where = -1;
      boolean id;
  
      public BasicAttributesEnumeration (boolean id)
--- 193,205 ----
  
    // This is set by the serialization spec.
    private boolean ignoreCase;
!   // Package-private to avoid a trampoline.
!   transient Vector attributes;
  
    // Used when enumerating.
    private class BasicAttributesEnumeration implements NamingEnumeration
    {
!     int where = 0;
      boolean id;
  
      public BasicAttributesEnumeration (boolean id)
*************** public class BasicAttributes implements 
*** 218,227 ****
  
      public Object nextElement () throws NoSuchElementException
      {
!       if (where + 1 >= attributes.size ())
  	throw new NoSuchElementException ("no more elements");
-       ++where;
        Attribute at = (Attribute) attributes.get (where);
        return id ? (Object) at.getID () : (Object) at;
      }
    }
--- 228,237 ----
  
      public Object nextElement () throws NoSuchElementException
      {
!       if (where >= attributes.size ())
  	throw new NoSuchElementException ("no more elements");
        Attribute at = (Attribute) attributes.get (where);
+       ++where;
        return id ? (Object) at.getID () : (Object) at;
      }
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/DirContext.java gcc-4.0.0/libjava/javax/naming/directory/DirContext.java
*** gcc-3.4.3/libjava/javax/naming/directory/DirContext.java	Sat Dec  6 08:41:36 2003
--- gcc-4.0.0/libjava/javax/naming/directory/DirContext.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* DirContext.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DirContext.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.naming.NamingEnumeration;
*** 44,50 ****
  import javax.naming.NamingException;
  
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 13, 2001
   */
  
--- 44,50 ----
  import javax.naming.NamingException;
  
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 13, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/InitialDirContext.java gcc-4.0.0/libjava/javax/naming/directory/InitialDirContext.java
*** gcc-3.4.3/libjava/javax/naming/directory/InitialDirContext.java	Sat Dec  6 08:41:36 2003
--- gcc-4.0.0/libjava/javax/naming/directory/InitialDirContext.java	Thu Oct 21 20:50:12 2004
***************
*** 1,5 ****
  /* InitialDirContext.java --
!    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InitialDirContext.java --
!    Copyright (C) 2000, 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.naming.directory;
  
  import java.util.Hashtable;
+ 
  import javax.naming.Context;
  import javax.naming.InitialContext;
  import javax.naming.Name;
*************** import javax.naming.NoInitialContextExce
*** 48,54 ****
  import javax.naming.NotContextException;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date June 25, 2001
   */
  public class InitialDirContext extends InitialContext implements DirContext
--- 49,55 ----
  import javax.naming.NotContextException;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date June 25, 2001
   */
  public class InitialDirContext extends InitialContext implements DirContext
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/ModificationItem.java gcc-4.0.0/libjava/javax/naming/directory/ModificationItem.java
*** gcc-3.4.3/libjava/javax/naming/directory/ModificationItem.java	Sat Nov 23 21:50:40 2002
--- gcc-4.0.0/libjava/javax/naming/directory/ModificationItem.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* ModificationItem.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ModificationItem.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,46 ****
  
  
  package javax.naming.directory;
  import java.io.Serializable;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 13, 2001
   */
  
--- 37,47 ----
  
  
  package javax.naming.directory;
+ 
  import java.io.Serializable;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 13, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/SearchControls.java gcc-4.0.0/libjava/javax/naming/directory/SearchControls.java
*** gcc-3.4.3/libjava/javax/naming/directory/SearchControls.java	Sat Nov 23 21:50:40 2002
--- gcc-4.0.0/libjava/javax/naming/directory/SearchControls.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* SearchControls.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SearchControls.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,50 ****
  
  
  package javax.naming.directory;
  import java.io.Serializable;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 5, 2001
   */
  
! public class SearchControls extends Object implements Serializable
  {
    public static final int OBJECT_SCOPE = 0;
    public static final int ONELEVEL_SCOPE = 1;
--- 37,51 ----
  
  
  package javax.naming.directory;
+ 
  import java.io.Serializable;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 5, 2001
   */
  
! public class SearchControls implements Serializable
  {
    public static final int OBJECT_SCOPE = 0;
    public static final int ONELEVEL_SCOPE = 1;
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/directory/SearchResult.java gcc-4.0.0/libjava/javax/naming/directory/SearchResult.java
*** gcc-3.4.3/libjava/javax/naming/directory/SearchResult.java	Sat Dec  6 08:41:36 2003
--- gcc-4.0.0/libjava/javax/naming/directory/SearchResult.java	Thu Feb 17 07:48:48 2005
***************
*** 1,5 ****
  /* SearchResult.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SearchResult.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,48 ****
  
  package javax.naming.directory;
  
- import java.io.Serializable;
  import javax.naming.Binding;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 13, 2001
   */
  
--- 38,47 ----
  
  package javax.naming.directory;
  
  import javax.naming.Binding;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 13, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/event/EventContext.java gcc-4.0.0/libjava/javax/naming/event/EventContext.java
*** gcc-3.4.3/libjava/javax/naming/event/EventContext.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/event/EventContext.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* EventContext.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* EventContext.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.naming.Name;
*** 43,49 ****
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 43,49 ----
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/event/EventDirContext.java gcc-4.0.0/libjava/javax/naming/event/EventDirContext.java
*** gcc-3.4.3/libjava/javax/naming/event/EventDirContext.java	Thu Dec 11 15:41:21 2003
--- gcc-4.0.0/libjava/javax/naming/event/EventDirContext.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* EventDirContext.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* EventDirContext.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.naming.directory.SearchCont
*** 44,50 ****
  
  
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  public interface EventDirContext extends EventContext, DirContext
--- 44,50 ----
  
  
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  public interface EventDirContext extends EventContext, DirContext
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/event/NamespaceChangeListener.java gcc-4.0.0/libjava/javax/naming/event/NamespaceChangeListener.java
*** gcc-3.4.3/libjava/javax/naming/event/NamespaceChangeListener.java	Sat Oct 11 19:06:23 2003
--- gcc-4.0.0/libjava/javax/naming/event/NamespaceChangeListener.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* NamespaceChangeListener.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NamespaceChangeListener.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.naming.event;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 39,45 ----
  package javax.naming.event;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/event/NamingEvent.java gcc-4.0.0/libjava/javax/naming/event/NamingEvent.java
*** gcc-3.4.3/libjava/javax/naming/event/NamingEvent.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/event/NamingEvent.java	Thu Oct 21 20:50:12 2004
***************
*** 1,5 ****
  /* NamingEvent.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NamingEvent.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,51 ****
  package javax.naming.event;
  
  import java.util.EventObject;
  import javax.naming.Binding;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 5, 2001
   */
- 
  public class NamingEvent extends EventObject
  {
    public static final int OBJECT_ADDED = 0;
--- 39,51 ----
  package javax.naming.event;
  
  import java.util.EventObject;
+ 
  import javax.naming.Binding;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 5, 2001
   */
  public class NamingEvent extends EventObject
  {
    public static final int OBJECT_ADDED = 0;
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/event/NamingExceptionEvent.java gcc-4.0.0/libjava/javax/naming/event/NamingExceptionEvent.java
*** gcc-3.4.3/libjava/javax/naming/event/NamingExceptionEvent.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/event/NamingExceptionEvent.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* NamingExceptionEvent.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NamingExceptionEvent.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,50 ****
  package javax.naming.event;
  
  import java.util.EventObject;
! import javax.naming.Context;
! import javax.naming.Name;
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 5, 2001
   */
  
--- 39,49 ----
  package javax.naming.event;
  
  import java.util.EventObject;
! 
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 5, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/event/NamingListener.java gcc-4.0.0/libjava/javax/naming/event/NamingListener.java
*** gcc-3.4.3/libjava/javax/naming/event/NamingListener.java	Sat Oct 11 19:06:23 2003
--- gcc-4.0.0/libjava/javax/naming/event/NamingListener.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* NamingListener.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NamingListener.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,46 ****
  
  
  package javax.naming.event;
  import java.util.EventListener;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 37,47 ----
  
  
  package javax.naming.event;
+ 
  import java.util.EventListener;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/event/ObjectChangeListener.java gcc-4.0.0/libjava/javax/naming/event/ObjectChangeListener.java
*** gcc-3.4.3/libjava/javax/naming/event/ObjectChangeListener.java	Sat Oct 11 19:06:23 2003
--- gcc-4.0.0/libjava/javax/naming/event/ObjectChangeListener.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* ObjectChangeListener.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ObjectChangeListener.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.naming.event;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 39,45 ----
  package javax.naming.event;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/Control.java gcc-4.0.0/libjava/javax/naming/ldap/Control.java
*** gcc-3.4.3/libjava/javax/naming/ldap/Control.java	Sat Oct 11 19:06:23 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/Control.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* Control.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Control.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,46 ****
  
  
  package javax.naming.ldap;
  import java.io.Serializable;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 37,47 ----
  
  
  package javax.naming.ldap;
+ 
  import java.io.Serializable;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/ControlFactory.java gcc-4.0.0/libjava/javax/naming/ldap/ControlFactory.java
*** gcc-3.4.3/libjava/javax/naming/ldap/ControlFactory.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/ControlFactory.java	Thu Oct 21 20:50:12 2004
***************
*** 1,5 ****
  /* ControlFactory.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ControlFactory.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.ldap;
*** 40,50 ****
  
  import java.util.Hashtable;
  import java.util.StringTokenizer;
  import javax.naming.Context;
  import javax.naming.NamingException;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date June 22, 2001
   */
  public abstract class ControlFactory
--- 40,51 ----
  
  import java.util.Hashtable;
  import java.util.StringTokenizer;
+ 
  import javax.naming.Context;
  import javax.naming.NamingException;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date June 22, 2001
   */
  public abstract class ControlFactory
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/ExtendedRequest.java gcc-4.0.0/libjava/javax/naming/ldap/ExtendedRequest.java
*** gcc-3.4.3/libjava/javax/naming/ldap/ExtendedRequest.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/ExtendedRequest.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* ExtendedRequest.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ExtendedRequest.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,51 ****
  package javax.naming.ldap;
  
  import java.io.Serializable;
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
- 
  public interface ExtendedRequest extends Serializable
  {
    String getID();
--- 39,51 ----
  package javax.naming.ldap;
  
  import java.io.Serializable;
+ 
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  public interface ExtendedRequest extends Serializable
  {
    String getID();
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/ExtendedResponse.java gcc-4.0.0/libjava/javax/naming/ldap/ExtendedResponse.java
*** gcc-3.4.3/libjava/javax/naming/ldap/ExtendedResponse.java	Sat Oct 11 19:06:23 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/ExtendedResponse.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* ExtendedResponse.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ExtendedResponse.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,46 ****
  
  
  package javax.naming.ldap;
  import java.io.Serializable;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 37,47 ----
  
  
  package javax.naming.ldap;
+ 
  import java.io.Serializable;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/HasControls.java gcc-4.0.0/libjava/javax/naming/ldap/HasControls.java
*** gcc-3.4.3/libjava/javax/naming/ldap/HasControls.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/HasControls.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* HasControls.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* HasControls.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.ldap;
*** 41,47 ****
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 41,47 ----
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/InitialLdapContext.java gcc-4.0.0/libjava/javax/naming/ldap/InitialLdapContext.java
*** gcc-3.4.3/libjava/javax/naming/ldap/InitialLdapContext.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/InitialLdapContext.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* InitialLdapContext.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InitialLdapContext.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.naming.ldap;
  
  import java.util.Hashtable;
+ 
  import javax.naming.Context;
  import javax.naming.NamingException;
  import javax.naming.NoInitialContextException;
*************** import javax.naming.NotContextException;
*** 46,52 ****
  import javax.naming.directory.InitialDirContext;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date June 21, 2001
   */
  public class InitialLdapContext
--- 47,53 ----
  import javax.naming.directory.InitialDirContext;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date June 21, 2001
   */
  public class InitialLdapContext
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/LdapContext.java gcc-4.0.0/libjava/javax/naming/ldap/LdapContext.java
*** gcc-3.4.3/libjava/javax/naming/ldap/LdapContext.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/LdapContext.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* LdapContext.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LdapContext.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.naming.NamingException;
*** 42,48 ****
  import javax.naming.directory.DirContext;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 42,48 ----
  import javax.naming.directory.DirContext;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/LdapReferralException.java gcc-4.0.0/libjava/javax/naming/ldap/LdapReferralException.java
*** gcc-3.4.3/libjava/javax/naming/ldap/LdapReferralException.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/LdapReferralException.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* LdapReferralException.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* LdapReferralException.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,53 ****
  package javax.naming.ldap;
  
  import java.util.Hashtable;
  import javax.naming.Context;
  import javax.naming.NamingException;
  import javax.naming.ReferralException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
- 
  public abstract class LdapReferralException extends ReferralException
  {
    protected LdapReferralException()
--- 39,53 ----
  package javax.naming.ldap;
  
  import java.util.Hashtable;
+ 
  import javax.naming.Context;
  import javax.naming.NamingException;
  import javax.naming.ReferralException;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  public abstract class LdapReferralException extends ReferralException
  {
    protected LdapReferralException()
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/UnsolicitedNotification.java gcc-4.0.0/libjava/javax/naming/ldap/UnsolicitedNotification.java
*** gcc-3.4.3/libjava/javax/naming/ldap/UnsolicitedNotification.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/UnsolicitedNotification.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* UnsolicitedNotification.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UnsolicitedNotification.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.ldap;
*** 41,47 ****
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 41,47 ----
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/UnsolicitedNotificationEvent.java gcc-4.0.0/libjava/javax/naming/ldap/UnsolicitedNotificationEvent.java
*** gcc-3.4.3/libjava/javax/naming/ldap/UnsolicitedNotificationEvent.java	Fri Jun 27 13:06:50 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/UnsolicitedNotificationEvent.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* UnsolicitedNotificationEvent.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UnsolicitedNotificationEvent.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.ldap;
*** 41,47 ****
  import java.util.EventObject;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 5, 2001
   */
  public class UnsolicitedNotificationEvent extends EventObject
--- 41,47 ----
  import java.util.EventObject;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 5, 2001
   */
  public class UnsolicitedNotificationEvent extends EventObject
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/ldap/UnsolicitedNotificationListener.java gcc-4.0.0/libjava/javax/naming/ldap/UnsolicitedNotificationListener.java
*** gcc-3.4.3/libjava/javax/naming/ldap/UnsolicitedNotificationListener.java	Sat Dec  6 08:41:37 2003
--- gcc-4.0.0/libjava/javax/naming/ldap/UnsolicitedNotificationListener.java	Thu Feb 17 07:48:49 2005
***************
*** 1,5 ****
  /* UnsolicitedNotificationListener.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UnsolicitedNotificationListener.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.ldap;
*** 41,47 ****
  import javax.naming.event.NamingListener;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 41,47 ----
  import javax.naming.event.NamingListener;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/DirObjectFactory.java gcc-4.0.0/libjava/javax/naming/spi/DirObjectFactory.java
*** gcc-3.4.3/libjava/javax/naming/spi/DirObjectFactory.java	Sat Dec  6 08:41:38 2003
--- gcc-4.0.0/libjava/javax/naming/spi/DirObjectFactory.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* DirObjectFactory.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DirObjectFactory.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,53 ****
  package javax.naming.spi;
  
  import java.util.Hashtable;
  import javax.naming.Context;
  import javax.naming.Name;
  import javax.naming.directory.Attributes;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
- 
  public interface DirObjectFactory extends ObjectFactory
  {
    Object getObjectInstance(Object obj, Name name, Context nameCtx,
--- 39,53 ----
  package javax.naming.spi;
  
  import java.util.Hashtable;
+ 
  import javax.naming.Context;
  import javax.naming.Name;
  import javax.naming.directory.Attributes;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  public interface DirObjectFactory extends ObjectFactory
  {
    Object getObjectInstance(Object obj, Name name, Context nameCtx,
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/DirStateFactory.java gcc-4.0.0/libjava/javax/naming/spi/DirStateFactory.java
*** gcc-3.4.3/libjava/javax/naming/spi/DirStateFactory.java	Sat Dec  6 08:41:38 2003
--- gcc-4.0.0/libjava/javax/naming/spi/DirStateFactory.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* DirStateFactory.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DirStateFactory.java --
!    Copyright (C) 2001, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,54 ****
  package javax.naming.spi;
  
  import java.util.Hashtable;
  import javax.naming.Context;
  import javax.naming.Name;
  import javax.naming.NamingException;
  import javax.naming.directory.Attributes;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
- 
  public interface DirStateFactory extends StateFactory
  {
    // Inner class
--- 39,54 ----
  package javax.naming.spi;
  
  import java.util.Hashtable;
+ 
  import javax.naming.Context;
  import javax.naming.Name;
  import javax.naming.NamingException;
  import javax.naming.directory.Attributes;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  public interface DirStateFactory extends StateFactory
  {
    // Inner class
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/DirectoryManager.java gcc-4.0.0/libjava/javax/naming/spi/DirectoryManager.java
*** gcc-3.4.3/libjava/javax/naming/spi/DirectoryManager.java	Sat Dec  6 08:41:38 2003
--- gcc-4.0.0/libjava/javax/naming/spi/DirectoryManager.java	Thu Feb 17 07:48:50 2005
***************
*** 1,5 ****
  /* DirectoryManager.java --
!    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DirectoryManager.java --
!    Copyright (C) 2000, 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.spi;
*** 41,46 ****
--- 41,47 ----
  import java.util.Enumeration;
  import java.util.Hashtable;
  import java.util.StringTokenizer;
+ 
  import javax.naming.CannotProceedException;
  import javax.naming.Context;
  import javax.naming.Name;
*************** import javax.naming.directory.Attributes
*** 53,59 ****
  import javax.naming.directory.DirContext;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date June 25, 2001
   */
  public class DirectoryManager extends NamingManager
--- 54,60 ----
  import javax.naming.directory.DirContext;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date June 25, 2001
   */
  public class DirectoryManager extends NamingManager
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/InitialContextFactory.java gcc-4.0.0/libjava/javax/naming/spi/InitialContextFactory.java
*** gcc-3.4.3/libjava/javax/naming/spi/InitialContextFactory.java	Sat Oct 11 19:06:23 2003
--- gcc-4.0.0/libjava/javax/naming/spi/InitialContextFactory.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* InitialContextFactory.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InitialContextFactory.java --
!    Copyright (C) 2000, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.naming.spi;
  
  import java.util.Hashtable;
+ 
  import javax.naming.Context;
  import javax.naming.NamingException;
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/InitialContextFactoryBuilder.java gcc-4.0.0/libjava/javax/naming/spi/InitialContextFactoryBuilder.java
*** gcc-3.4.3/libjava/javax/naming/spi/InitialContextFactoryBuilder.java	Sat Oct 11 19:06:23 2003
--- gcc-4.0.0/libjava/javax/naming/spi/InitialContextFactoryBuilder.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* InitialContextFactoryBuilder.java --
!    Copyright (C) 2000 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InitialContextFactoryBuilder.java --
!    Copyright (C) 2000, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.naming.spi;
  
  import java.util.Hashtable;
+ 
  import javax.naming.NamingException;
  
  public interface InitialContextFactoryBuilder
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/NamingManager.java gcc-4.0.0/libjava/javax/naming/spi/NamingManager.java
*** gcc-3.4.3/libjava/javax/naming/spi/NamingManager.java	Sat Dec  6 08:41:38 2003
--- gcc-4.0.0/libjava/javax/naming/spi/NamingManager.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* NamingManager.java --
!    Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NamingManager.java --
!    Copyright (C) 2000, 2001, 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.naming.spi;
*** 41,46 ****
--- 41,47 ----
  import java.util.Enumeration;
  import java.util.Hashtable;
  import java.util.StringTokenizer;
+ 
  import javax.naming.CannotProceedException;
  import javax.naming.Context;
  import javax.naming.Name;
*************** public class NamingManager
*** 55,64 ****
  {
    public static final String CPE = "java.naming.spi.CannotProceedException";
  
!   private static InitialContextFactoryBuilder icfb = null;
  
    // Package private so DirectoryManager can access it.
!   static ObjectFactoryBuilder ofb = null;
  
    // This class cannot be instantiated.
    NamingManager ()
--- 56,65 ----
  {
    public static final String CPE = "java.naming.spi.CannotProceedException";
  
!   private static InitialContextFactoryBuilder icfb;
  
    // Package private so DirectoryManager can access it.
!   static ObjectFactoryBuilder ofb;
  
    // This class cannot be instantiated.
    NamingManager ()
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/ObjectFactory.java gcc-4.0.0/libjava/javax/naming/spi/ObjectFactory.java
*** gcc-3.4.3/libjava/javax/naming/spi/ObjectFactory.java	Sat Oct 11 19:06:23 2003
--- gcc-4.0.0/libjava/javax/naming/spi/ObjectFactory.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* ObjectFactory.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ObjectFactory.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.naming.spi;
  
  import java.util.Hashtable;
+ 
  import javax.naming.Context;
  import javax.naming.Name;
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/ObjectFactoryBuilder.java gcc-4.0.0/libjava/javax/naming/spi/ObjectFactoryBuilder.java
*** gcc-3.4.3/libjava/javax/naming/spi/ObjectFactoryBuilder.java	Sat Dec  6 08:41:38 2003
--- gcc-4.0.0/libjava/javax/naming/spi/ObjectFactoryBuilder.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* ObjectFactoryBuilder.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ObjectFactoryBuilder.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,51 ****
  package javax.naming.spi;
  
  import java.util.Hashtable;
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
- 
  public interface ObjectFactoryBuilder
  {
    ObjectFactory createObjectFactory(Object obj,
--- 39,51 ----
  package javax.naming.spi;
  
  import java.util.Hashtable;
+ 
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  public interface ObjectFactoryBuilder
  {
    ObjectFactory createObjectFactory(Object obj,
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/ResolveResult.java gcc-4.0.0/libjava/javax/naming/spi/ResolveResult.java
*** gcc-3.4.3/libjava/javax/naming/spi/ResolveResult.java	Sat Dec  6 08:41:38 2003
--- gcc-4.0.0/libjava/javax/naming/spi/ResolveResult.java	Thu Feb 17 07:48:50 2005
***************
*** 1,5 ****
  /* ResolveResult.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ResolveResult.java --
!    Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,51 ****
  package javax.naming.spi;
  
  import java.io.Serializable;
! import java.util.EventObject;
! import javax.naming.Name;
  import javax.naming.CompositeName;
  import javax.naming.InvalidNameException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 5, 2001
   */
  
--- 39,51 ----
  package javax.naming.spi;
  
  import java.io.Serializable;
! 
  import javax.naming.CompositeName;
  import javax.naming.InvalidNameException;
+ import javax.naming.Name;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 5, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/Resolver.java gcc-4.0.0/libjava/javax/naming/spi/Resolver.java
*** gcc-3.4.3/libjava/javax/naming/spi/Resolver.java	Sat Dec  6 08:41:38 2003
--- gcc-4.0.0/libjava/javax/naming/spi/Resolver.java	Thu Feb 17 07:48:50 2005
***************
*** 1,5 ****
  /* Resolver.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Resolver.java --
!    Copyright (C) 2001, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.naming.Name;
*** 42,48 ****
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
  
--- 42,48 ----
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/naming/spi/StateFactory.java gcc-4.0.0/libjava/javax/naming/spi/StateFactory.java
*** gcc-3.4.3/libjava/javax/naming/spi/StateFactory.java	Sat Dec  6 08:41:38 2003
--- gcc-4.0.0/libjava/javax/naming/spi/StateFactory.java	Thu Oct 21 20:50:13 2004
***************
*** 1,5 ****
  /* StateFactory.java --
!    Copyright (C) 2001 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* StateFactory.java --
!    Copyright (C) 2001, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,53 ****
  package javax.naming.spi;
  
  import java.util.Hashtable;
  import javax.naming.Context;
  import javax.naming.Name;
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date June 1, 2001
   */
- 
  public interface StateFactory
  {
    Object getStateToBind(Object obj, Name name, Context nameCtx,
--- 39,53 ----
  package javax.naming.spi;
  
  import java.util.Hashtable;
+ 
  import javax.naming.Context;
  import javax.naming.Name;
  import javax.naming.NamingException;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date June 1, 2001
   */
  public interface StateFactory
  {
    Object getStateToBind(Object obj, Name name, Context nameCtx,
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ServerSocketFactory.java gcc-4.0.0/libjava/javax/net/ServerSocketFactory.java
*** gcc-3.4.3/libjava/javax/net/ServerSocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ServerSocketFactory.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,122 ----
+ /* ServerSocketFactory.java -- factory for server sockets.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net;
+ 
+ import java.io.IOException;
+ 
+ import java.net.InetAddress;
+ import java.net.ServerSocket;
+ 
+ import java.security.Security;
+ 
+ /**
+  * A factory for server sockets. The purpose of this class is to serve
+  * as the superclass of server socket factories that produce server
+  * sockets of a particular type, such as <i>Secure Socket Layer</i>
+  * (<b>SSL</b>) server sockets.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public abstract class ServerSocketFactory
+ {
+ 
+   // Constructors.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Default 0-argument constructor.
+    */
+   protected ServerSocketFactory()
+   {
+     super();
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Returns the default server socket factory. The type of factory
+    * returned may depend upon the installation.
+    *
+    * @return The default server socket factory.
+    */
+   public static synchronized ServerSocketFactory getDefault()
+   {
+     try
+       {
+         String s = Security.getProperty("gnu.defaultServerSocketFactory");
+         if (s != null)
+           {
+             Class c = Class.forName(s);
+             return (ServerSocketFactory) c.newInstance();
+           }
+       }
+     catch (Exception e)
+       {
+       }
+     return new VanillaServerSocketFactory();
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------------
+ 
+   /**
+    * Create an unbound server socket.
+    *
+    * @return The new server socket.
+    * @throws IOException If a networking error occurs.
+    */
+   public ServerSocket createServerSocket() throws IOException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Create a server socket bound to the given port.
+    *
+    * @param port The port to bind the server socket to.
+    * @return A server socket bound to <i>port</i>.
+    * @throws IOException If a networking error occurs.
+    */
+   public abstract ServerSocket createServerSocket(int port) throws IOException;
+ 
+   public abstract ServerSocket createServerSocket(int port, int backlog) throws IOException;
+ 
+   public abstract ServerSocket createServerSocket(int port, int backlog, InetAddress bindAddress) throws IOException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/SocketFactory.java gcc-4.0.0/libjava/javax/net/SocketFactory.java
*** gcc-3.4.3/libjava/javax/net/SocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/SocketFactory.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,157 ----
+ /* SocketFactory.java -- factory for client sockets.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net;
+ 
+ import java.io.IOException;
+ 
+ import java.net.InetAddress;
+ import java.net.Socket;
+ import java.net.UnknownHostException;
+ 
+ import java.security.Security;
+ 
+ /**
+  * A factory for client sockets. The purpose of this class is to serve
+  * as the superclass of server socket factories that produce client
+  * sockets of a particular type, such as <i>Secure Socket Layer</i>
+  * (<b>SSL</b>) sockets.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public abstract class SocketFactory
+ {
+ 
+   // Constructor.
+   // -------------------------------------------------------------------
+ 
+   /**
+    * Default 0-arguments constructor.
+    */
+   protected SocketFactory()
+   {
+     super();
+   }
+ 
+   // Class methods.
+   // -------------------------------------------------------------------
+ 
+   /**
+    * Returns the default socket factory. The type of factory
+    * returned may depend upon the installation.
+    *
+    * @return The default socket factory.
+    */
+   public static synchronized SocketFactory getDefault()
+   {
+     try
+       {
+         String s = Security.getProperty("gnu.defaultSocketFactory");
+         if (s != null)
+           {
+             Class c = Class.forName(s);
+             return (SocketFactory) c.newInstance();
+           }
+       }
+     catch (Exception e)
+       {
+       }
+     return new VanillaSocketFactory();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------
+ 
+   /**
+    * Returns an unbound client socket.
+    *
+    * @return The new, unbound socket.
+    */
+   public Socket createSocket() throws IOException
+   {
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Creates a socket connected to a given host on a given port.
+    *
+    * @param host The hostname to connect to.
+    * @param port The port on <i>host</i> to connect to.
+    * @return A socket connected to <i>host</i> on <i>port</i>.
+    * @throws IOException If a network error occurs.
+    * @throws UnknownHostException If <i>host</i> cannot be resolved.
+    */
+   public abstract Socket createSocket(String host, int port) throws IOException, UnknownHostException;
+ 
+   /**
+    * Creates a socket connected to a given host on a given port,
+    * connecting locally to the interface with the given address and port.
+    *
+    * @param host The hostname to connect to.
+    * @param port The port on <i>host</i> to connect to.
+    * @param localHost The address of the local interface to bind to.
+    * @param localPort The local port to bind to.
+    * @return A socket connected to <i>host</i> on <i>port</i>.
+    * @throws IOException If a network error occurs.
+    * @throws UnknownHostException If <i>host</i> cannot be resolved.
+    */
+   public abstract Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException;
+ 
+   /**
+    * Creates a socket connected to a given host on a given port.
+    *
+    * @param host The host address to connect to.
+    * @param port The port on <i>host</i> to connect to.
+    * @return A socket connected to <i>host</i> on <i>port</i>.
+    * @throws IOException If a network error occurs.
+    */
+   public abstract Socket createSocket(InetAddress host, int port) throws IOException;
+ 
+   /**
+    * Creates a socket connected to a given host on a given port,
+    * connecting locally to the interface with the given address and port.
+    *
+    * @param host The host address  to connect to.
+    * @param port The port on <i>host</i> to connect to.
+    * @param localHost The address of the local interface to bind to.
+    * @param localPort The local port to bind to.
+    * @return A socket connected to <i>host</i> on <i>port</i>.
+    * @throws IOException If a network error occurs.
+    */
+   public abstract Socket createSocket(InetAddress hast, int port, InetAddress localHost, int localPort) throws IOException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/VanillaServerSocketFactory.java gcc-4.0.0/libjava/javax/net/VanillaServerSocketFactory.java
*** gcc-3.4.3/libjava/javax/net/VanillaServerSocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/VanillaServerSocketFactory.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,82 ----
+ /* VanillaServerSocketFactory.java -- trivial socket 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net;
+ 
+ import java.io.IOException;
+ 
+ import java.net.InetAddress;
+ import java.net.ServerSocket;
+ 
+ /**
+  * A trivial server socket factory.
+  */
+ class VanillaServerSocketFactory extends ServerSocketFactory
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------
+ 
+   VanillaServerSocketFactory()
+   {
+     super();
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------
+ 
+   public ServerSocket createServerSocket() throws IOException
+   {
+     return new ServerSocket();
+   }
+ 
+   public ServerSocket createServerSocket(int port) throws IOException
+   {
+     return new ServerSocket(port);
+   }
+ 
+   public ServerSocket createServerSocket(int port, int backlog) throws IOException
+   {
+     return new ServerSocket(port, backlog);
+   }
+ 
+   public ServerSocket createServerSocket(int port, int backlog, InetAddress bindAddress) throws IOException
+   {
+     return new ServerSocket(port, backlog, bindAddress);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/VanillaSocketFactory.java gcc-4.0.0/libjava/javax/net/VanillaSocketFactory.java
*** gcc-3.4.3/libjava/javax/net/VanillaSocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/VanillaSocketFactory.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,88 ----
+ /* VanillaSocketFactory.java -- trivial socket 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net;
+ 
+ import java.io.IOException;
+ 
+ import java.net.InetAddress;
+ import java.net.Socket;
+ import java.net.UnknownHostException;
+ 
+ /**
+  * A trivial client socket factory.
+  */
+ class VanillaSocketFactory extends SocketFactory
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------
+ 
+   VanillaSocketFactory()
+   {
+     super();
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------
+ 
+   public Socket createSocket() throws IOException
+   {
+     return new Socket();
+   }
+ 
+   public Socket createSocket(String host, int port) throws IOException, UnknownHostException
+   {
+     return new Socket(host, port);
+   }
+ 
+   public Socket createSocket(String host, int port, InetAddress localAddr, int localPort) throws IOException, UnknownHostException
+   {
+     return new Socket(host, port, localAddr, localPort);
+   }
+ 
+   public Socket createSocket(InetAddress address, int port) throws IOException
+   {
+     return new Socket(address, port);
+   }
+ 
+   public Socket createSocket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
+   {
+     return new Socket(address, port, localAddr, localPort);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/HandshakeCompletedEvent.java gcc-4.0.0/libjava/javax/net/ssl/HandshakeCompletedEvent.java
*** gcc-3.4.3/libjava/javax/net/ssl/HandshakeCompletedEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/HandshakeCompletedEvent.java	Fri Oct 22 17:14:29 2004
***************
*** 0 ****
--- 1,152 ----
+ /* HandshakeCompletedEvent.java -- SSL handshake completed.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.security.cert.Certificate;
+ 
+ import javax.security.cert.X509Certificate;
+ 
+ /**
+  * An event raised by a SSLSocket and passed to the {@link
+  * HandshakeCompletedListener#handshakeCompleted(HandshakeCompletedEvent)}
+  * method of all registered listeners when a SSL handshake in a SSL
+  * protocol is completed.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class HandshakeCompletedEvent extends java.util.EventObject
+ {
+   // Fields.
+   // -------------------------------------------------------------------
+ 
+   /** Serialization constant. */
+   private static final long serialVersionUID = 7914963744257769778L;
+ 
+   /** The session. */
+   private final transient SSLSession session;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------
+ 
+   /**
+    * Creates a new handshake completed event.
+    *
+    * @param socket The socket (also the source) creating this event.
+    * @param session The associated session object.
+    * @throws NullPointerException If <i>session</i> is null.
+    */
+   public HandshakeCompletedEvent(SSLSocket socket, SSLSession session)
+   {
+     super(socket);
+     if (session == null)
+       throw new NullPointerException();
+     this.session = session;
+   }
+ 
+   // Instance methods.
+   // --------------------------------------------------------------------
+ 
+   /**
+    * Returns the name of the cipher that was negotiated in this
+    * connection.
+    *
+    * @return The negotiated cipher name.
+    */
+   public String getCipherSuite()
+   {
+     if (session != null)
+       return session.getCipherSuite();
+     return null;
+   }
+ 
+   /**
+    * Returns the local certificates being used in this connection.
+    *
+    * @return The local certificates.
+    */
+   public Certificate[] getLocalCertificates()
+   {
+     if (session != null)
+       return session.getLocalCertificates();
+     return null;
+   }
+ 
+   /**
+    * Returns the peer's certificates being used in this connection.
+    *
+    * @return The peer's certificates.
+    * @throws SSLPeerUnverifiedException If the peer has not been
+    *   verified.
+    */
+   public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException
+   {
+     if (session != null)
+       return session.getPeerCertificates();
+     return null;
+   }
+ 
+   public X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException
+   {
+     if (session != null)
+       return session.getPeerCertificateChain();
+     return null;
+   }
+ 
+   /**
+    * Returns the SSL session object associated with this connection.
+    *
+    * @return The session object.
+    */
+   public SSLSession getSession()
+   {
+     return session;
+   }
+ 
+   /**
+    * Returns the socket over which this connection is being
+    * negotiated. This method is equivalent to the {@link
+    * java.util.EventObject#getSource()} method.
+    *
+    * @return The socket.
+    */
+   public SSLSocket getSocket()
+   {
+     return (SSLSocket) getSource();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/HandshakeCompletedListener.java gcc-4.0.0/libjava/javax/net/ssl/HandshakeCompletedListener.java
*** gcc-3.4.3/libjava/javax/net/ssl/HandshakeCompletedListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/HandshakeCompletedListener.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,57 ----
+ /* HandshakeCompletedListener.java -- listens for handshake events.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * An event listener that waits to be notified of {@link
+  * HandshakeCompletedEvent} objects created when handshake phase of
+  * the SSL protocol is completed for a particular connection.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public interface HandshakeCompletedListener extends java.util.EventListener
+ {
+ 
+   /**
+    * Called when the handshake phase of the SSL protocol completes.
+    *
+    * @param event The event describing the new connection.
+    */
+   void handshakeCompleted(HandshakeCompletedEvent event);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/HostnameVerifier.java gcc-4.0.0/libjava/javax/net/ssl/HostnameVerifier.java
*** gcc-3.4.3/libjava/javax/net/ssl/HostnameVerifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/HostnameVerifier.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,64 ----
+ /* HostnameVerifier.java -- verifies disparate hostnames.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * The interface for classes that perform hostname verification for cases
+  * when the hostname used to begin the connection (such as in a URL)
+  * does not match the hostname used in the SSL handshake.
+  * Implementations of this interface should provide an implementation
+  * of the {@link #verify(java.lang.String,javax.net.ssl.SSLSession)}
+  * method that accepts or rejects hostnames as appropriate.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public interface HostnameVerifier
+ {
+ 
+   /**
+    * Verifies a hostname given a particular SSL session. This method
+    * should return <code>true</code> if the hostname is an accepted
+    * alias for the hostname negotiated in the SSL handshake.
+    *
+    * @param hostname The hostname in question.
+    * @param session  The current SSL session.
+    * @return <code>true</code> if the hostname is acceptable.
+    */
+   boolean verify(String hostname, SSLSession session);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/HttpsURLConnection.java gcc-4.0.0/libjava/javax/net/ssl/HttpsURLConnection.java
*** gcc-3.4.3/libjava/javax/net/ssl/HttpsURLConnection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/HttpsURLConnection.java	Tue Jan 11 20:19:56 2005
***************
*** 0 ****
--- 1,280 ----
+ /* HttpsURLConnection.java -- an HTTPS connection.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.io.IOException;
+ import java.net.HttpURLConnection;
+ import java.net.URL;
+ import java.security.cert.Certificate;
+ 
+ /**
+  * A URL connection that connects via the <i>Secure Socket Layer</i>
+  * (<b>SSL</b>) for HTTPS connections.
+  *
+  * <p>This class may be used in the same way as {@link
+  * HttpURLConnection}, and it will transparently negotiate the SSL
+  * connection.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public abstract class HttpsURLConnection extends HttpURLConnection
+ {
+ 
+   // Fields.
+   // ------------------------------------------------------------------
+ 
+   /**
+    * The default verifier.
+    * This is lazily initialized as required.
+    * @see #getDefaultHostnameVerifier
+    */
+   private static HostnameVerifier defaultVerifier;
+ 
+   /**
+    * The default factory.
+    * This is lazily initialized as required.
+    * @see #getDefaultSSLSocketFactory
+    */
+   private static SSLSocketFactory defaultFactory;
+ 
+   /**
+    * The hostname verifier used for this connection.
+    */
+   protected HostnameVerifier hostnameVerifier;
+ 
+   /**
+    * This connection's socket factory.
+    */
+   private SSLSocketFactory factory;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------
+ 
+   /**
+    * Creates a new HTTPS URL connection.
+    *
+    * @param url The URL of the connection being established.
+    * @throws IOException If the connection cannot be established.
+    */
+   protected HttpsURLConnection(URL url) throws IOException
+   {
+     super(url);
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------
+ 
+   /**
+    * Returns the default hostname verifier used in all new
+    * connections.
+    * If the default verifier has not been set, a new default one will be
+    * provided by this method.
+    *
+    * @return The default hostname verifier.
+    */
+   public static synchronized HostnameVerifier getDefaultHostnameVerifier()
+   {
+     if (defaultVerifier == null)
+       {
+         defaultVerifier = new TrivialHostnameVerifier();
+       }
+     return defaultVerifier;
+   }
+ 
+   /**
+    * Sets the default hostname verifier to be used in all new
+    * connections.
+    *
+    * @param newDefault The new default hostname verifier.
+    * @throws IllegalArgumentException If <i>newDefault</i> is null.
+    * @throws SecurityException If there is a security manager
+    *   currently installed and the caller does not have the {@link
+    *   SSLPermission} "setHostnameVerifier".
+    */
+   public static void setDefaultHostnameVerifier(HostnameVerifier newDefault)
+   {
+     if (newDefault == null)
+       throw new IllegalArgumentException("default verifier cannot be null");
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission(new SSLPermission("setHostnameVerifier"));
+     synchronized (HttpsURLConnection.class)
+       {
+         defaultVerifier = newDefault;
+       }
+   }
+ 
+   /**
+    * Returns the default SSL socket factory used in all new
+    * connections.
+    * If the default SSL socket factory has not been set, a new default one
+    * will be provided by this method.
+    *
+    * @return The default SSL socket factory.
+    */
+   public static synchronized SSLSocketFactory getDefaultSSLSocketFactory()
+   {
+     if (defaultFactory == null)
+       {
+         try
+           {
+             defaultFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
+           }
+         catch (Throwable t)
+           {
+             t.printStackTrace();
+           }
+       }
+     return defaultFactory;
+   }
+ 
+   /**
+    * Sets the default SSL socket factory to be used in all new
+    * connections.
+    *
+    * @param newDefault The new socket factory.
+    * @throws IllegalArgumentException If <i>newDefault</i> is null.
+    * @throws SecurityException If there is a security manager
+    *   installed and a call to {@link
+    *   SecurityManager#checkSetFactory()} fails.
+    */
+   public static void setDefaultSSLSocketFactory(SSLSocketFactory newDefault)
+   {
+     if (newDefault == null)
+       throw new IllegalArgumentException("default factory cannot be null");
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkSetFactory();
+     synchronized (HttpsURLConnection.class)
+       {
+         defaultFactory = newDefault;
+       }
+   }
+ 
+   // Instance methods.
+   // ------------------------------------------------------------------
+ 
+   /**
+    * Returns the current hostname verifier for this instance.
+    *
+    * @return The hostname verifier.
+    */
+   public HostnameVerifier getHostnameVerifier()
+   {
+     if (hostnameVerifier == null)
+       {
+         hostnameVerifier = getDefaultHostnameVerifier();
+       }
+     return hostnameVerifier;
+   }
+ 
+   /**
+    * Sets the hostname verifier for this instance.
+    *
+    * @param hostnameVerifier The new verifier.
+    * @throws IllegalArgumentException If <i>hostnameVerifier</i> is
+    *   null.
+    */
+   public void setHostnameVerifier(HostnameVerifier hostnameVerifier)
+   {
+     if (hostnameVerifier == null)
+       throw new IllegalArgumentException("verifier cannot be null");
+     this.hostnameVerifier = hostnameVerifier;
+   }
+ 
+   /**
+    * Returns the current SSL socket factory for this instance.
+    *
+    * @return The current SSL socket factory.
+    */
+   public SSLSocketFactory getSSLSocketFactory()
+   {
+     if (factory == null)
+       {
+         factory = getDefaultSSLSocketFactory();
+       }
+     return factory;
+   }
+ 
+   /**
+    * Sets the SSL socket factory for this instance.
+    *
+    * @param factory The new factory.
+    * @throws IllegalArgumentException If <i>factory</i> is null.
+    */
+   public void setSSLSocketFactory(SSLSocketFactory factory)
+   {
+     if (factory == null)
+       throw new IllegalArgumentException("factory cannot be null");
+     this.factory = factory;
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------
+ 
+   /**
+    * Returns the cipher name negotiated for this connection.
+    *
+    * @return The cipher name.
+    * @throws IllegalStateException If the connection has not yet been
+    *   established.
+    */
+   public abstract String getCipherSuite();
+ 
+   /**
+    * Returns the certificates used on the local side in this
+    * connection.
+    *
+    * @return The local certificates.
+    * @throws IllegalStateException If the connection has not yet been
+    *  established.
+    */
+   public abstract Certificate[] getLocalCertificates();
+ 
+   /**
+    * Returns the certificates sent by the other party.
+    *
+    * @return The peer's certificates.
+    * @throws IllegalStateException If the connection has not yet been
+    *   established.
+    * @throws SSLPeerUnverifiedException If the peer could not be
+    *   verified.
+    */
+   public abstract Certificate[] getServerCertificates() throws SSLPeerUnverifiedException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/KeyManager.java gcc-4.0.0/libjava/javax/net/ssl/KeyManager.java
*** gcc-3.4.3/libjava/javax/net/ssl/KeyManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/KeyManager.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,51 ----
+ /* KeyManager.java -- marker interface for key manager classes.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * A marker interface for objects that serve as key managers in SSL
+  * communications. Key managers typically keep track of the public
+  * certificates and private keys when authenticating the local host to
+  * remote host, and thus is typically used in SSL servers.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public interface KeyManager
+ {
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/KeyManagerFactory.java gcc-4.0.0/libjava/javax/net/ssl/KeyManagerFactory.java
*** gcc-3.4.3/libjava/javax/net/ssl/KeyManagerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/KeyManagerFactory.java	Thu Oct 21 20:54:37 2004
***************
*** 0 ****
--- 1,280 ----
+ /* KeyManagerFactory.java -- factory for key managers.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.security.AccessController;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.KeyStore;
+ import java.security.KeyStoreException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.PrivilegedAction;
+ import java.security.Provider;
+ import java.security.Security;
+ import java.security.UnrecoverableKeyException;
+ 
+ /**
+  * A class that creates key manager implementations based on a
+  * requested algorithm.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class KeyManagerFactory
+ {
+ 
+   // Constants and fields.
+   // ------------------------------------------------------------------
+ 
+   /** The service name for key manager factories. */
+   private static final String KEY_MANAGER_FACTORY = "KeyManagerFactory";
+ 
+   /** The system default trust manager algorithm. */
+   private static final String DEFAULT_ALGORITHM = "JessieX509";
+ 
+   /** The underlying engine. */
+   private final KeyManagerFactorySpi kmfSpi;
+ 
+   /** The provider of this implementation. */
+   private final Provider provider;
+ 
+   /** The name of this algorithm. */
+   private final String algorithm;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------
+ 
+   /**
+    * Create a new key manager factory.
+    *
+    * @param kmfSpi The underlying engine.
+    * @param provider The engine's provider.
+    * @param algorithm The name of this algorithm.
+    */
+   protected KeyManagerFactory(KeyManagerFactorySpi kmfSpi,
+                               Provider provider, String algorithm)
+   {
+     this.kmfSpi = kmfSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------
+ 
+   /**
+    * Get the default algorithm name. This value may be specified at
+    * run-time via the security property
+    * "ssl.KeyManagerFactory.algorithm". If this property is
+    * not specified, this method returns "JessieX509".
+    *
+    * @return The default key manager factory algorithm's name.
+    */
+   public static final String getDefaultAlgorithm()
+   {
+     String alg = null;
+     try
+       {
+         alg = (String) AccessController.doPrivileged(
+           new PrivilegedAction()
+           {
+             public Object run()
+             {
+               return Security.getProperty("ssl.KeyManagerFactory.algorithm");
+             }
+           }
+         );
+       }
+     catch (SecurityException se)
+       {
+       }
+     if (alg == null)
+       alg = DEFAULT_ALGORITHM;
+     return alg;
+   }
+ 
+   /**
+    * Get an instance of the named key manager factory, from the first
+    * provider that implements it.
+    *
+    * @param algorithm The type of key manager factory to get.
+    * @return An appropriate implementation of that algoritm.
+    * @throws NoSuchAlgorithmException If no provider implements the
+    *   requested algorithm.
+    */
+   public static final KeyManagerFactory getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] provs = Security.getProviders();
+     for (int i = 0; i < provs.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, provs[i]);
+           }
+         catch (NoSuchAlgorithmException ignore)
+           {
+           }
+       }
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Get an instance of the named key manager factory, from the named
+    * provider.
+    *
+    * @param algorithm The type of key manager factory to get.
+    * @param provider The name of the provider to get the
+    *   implementation from.
+    * @return An appropriate implementation of that algorithm.
+    * @throws NoSuchAlgorithmException If the provider does not
+    *   implement the requested algorithm.
+    * @throws NoSuchProviderException If the named provider does not
+    *   exist.
+    */
+   public static final KeyManagerFactory getInstance(String algorithm, String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("provider is null");
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       throw new NoSuchProviderException(provider);
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Get an instance of the named key manager factory, from the given
+    * provider.
+    *
+    * @param algorithm The type of key manager factory to get.
+    * @param provider The provider to get the implementation from.
+    * @return An appropriate implementation of that algorithm.
+    * @throws NoSuchAlgorithmException If the provider does not
+    *   implement the requested algorithm.
+    * @throws IllegalArgumentException If <i>provider</i> is null.
+    */
+   public static final KeyManagerFactory getInstance(String algorithm, Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       throw new IllegalArgumentException("provider is null");
+     try
+       {
+         return new KeyManagerFactory((KeyManagerFactorySpi)
+           Engine.getInstance(KEY_MANAGER_FACTORY, algorithm, provider),
+           provider, algorithm);
+       }
+     catch (InvocationTargetException ite)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------
+ 
+   /**
+    * Returns the name of this key manager factory algorithm.
+    *
+    * @return The name of this key manager factory algorithm.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Get an array of key managers appropriate for this algorithm, with
+    * the most preferred manager first.
+    *
+    * @return The array of key managers.
+    */
+   public final KeyManager[] getKeyManagers()
+   {
+     return kmfSpi.engineGetKeyManagers();
+   }
+ 
+   /**
+    * Returns the provider of this implementation.
+    *
+    * @return The provider of this implementation.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Initialize this instance with an implementation-dependent
+    * parameter object.
+    *
+    * @param params The parameters to initialize with.
+    * @throws InvalidAlgorithmParameterException If the specified
+    *   parameters are inappropriate.
+    */
+   public final void init(ManagerFactoryParameters params)
+     throws InvalidAlgorithmParameterException
+   {
+     kmfSpi.engineInit(params);
+   }
+ 
+   /**
+    * Initialize this instance with a key store and a password for
+    * private key entries.
+    *
+    * @param store The key store to read.
+    * @param passwd The password protecting private keys in the store.
+    * @throws KeyStoreException If an error occurs reading the keys.
+    * @throws NoSuchAlgorithmException If an algorithm (such as a
+    *   certificate algorithm) is not available.
+    * @throws UnrecoverableKeyException If the password is incorrect.
+    */
+   public final void init(KeyStore store, char[] passwd)
+     throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException
+   {
+     kmfSpi.engineInit(store, passwd);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/KeyManagerFactorySpi.java gcc-4.0.0/libjava/javax/net/ssl/KeyManagerFactorySpi.java
*** gcc-3.4.3/libjava/javax/net/ssl/KeyManagerFactorySpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/KeyManagerFactorySpi.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,102 ----
+ /* KeyManagerFactorySpi.java -- SPI for key manager factories.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.KeyStore;
+ import java.security.KeyStoreException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.UnrecoverableKeyException;
+ 
+ /**
+  * The <i>Service Provider Interface</i> (<b>SPI</b>) for key manager
+  * factories.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public abstract class KeyManagerFactorySpi
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------
+ 
+   public KeyManagerFactorySpi()
+   {
+     super();
+   }
+ 
+   // Abstract methods.
+   // ------------------------------------------------------------------
+ 
+   /**
+    * Engine method for retrieving this factory's key managers.
+    *
+    * @return The key managers.
+    */
+   protected abstract KeyManager[] engineGetKeyManagers();
+ 
+   /**
+    * Engine method for initializing this factory with some
+    * algorithm-specific parameters.
+    *
+    * @param params The factory parameters.
+    * @throws InvalidAlgorithmParameterException If the supplied parameters
+    *   are inappropriate for this instance.
+    */
+   protected abstract void engineInit(ManagerFactoryParameters params)
+     throws InvalidAlgorithmParameterException;
+ 
+   /**
+    * Engine method for initializing this factory with a key store and a
+    * password for private keys. Either parameter may be <code>null</code>,
+    * in which case some default parameters (possibly derived from system
+    * properties) should be used.
+    *
+    * @param store The key store.
+    * @param passwd The private key password.
+    * @throws KeyStoreException If the key store cannot be accessed.
+    * @throws NoSuchAlgorithmException If some of the data from the key
+    *   store cannot be retrieved.
+    * @throws UnrecoverableKeyException If a private key cannot be retrieved,
+    *   likely from a wrong password.
+    */
+   protected abstract void engineInit(KeyStore store, char[] passwd)
+     throws KeyStoreException, NoSuchAlgorithmException,
+            UnrecoverableKeyException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/ManagerFactoryParameters.java gcc-4.0.0/libjava/javax/net/ssl/ManagerFactoryParameters.java
*** gcc-3.4.3/libjava/javax/net/ssl/ManagerFactoryParameters.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/ManagerFactoryParameters.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,50 ----
+ /* ManagerFactoryParameters.java -- marker interface for manager parameters.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * A marker interface for classes that serve as key or trust manager
+  * parameters, used to initialize instances of {@link
+  * KeyManagerFactory} or {@link TrustManagerFactory}.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public interface ManagerFactoryParameters
+ {
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLContext.java gcc-4.0.0/libjava/javax/net/ssl/SSLContext.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLContext.java	Tue Feb 15 22:05:04 2005
***************
*** 0 ****
--- 1,267 ----
+ /* SSLContext.java -- an SSL protocol 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.security.KeyManagementException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.Provider;
+ import java.security.SecureRandom;
+ import java.security.Security;
+ 
+ /**
+  * A "meta-factory" for protocol-specific socket and server socket
+  * factories. This class serves as a clearinghouse for socket
+  * factories and cached session contexts for a particular protocol,
+  * such as SSLv3.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class SSLContext
+ {
+   // Constants and fields.
+   // ------------------------------------------------------------------
+ 
+   /** Service name for SSL contexts. */
+   private static final String SSL_CONTEXT = "SSLContext";
+ 
+   /** The underlying engine. */
+   private final SSLContextSpi ctxSpi;
+ 
+   /** The provider of the engine class. */
+   private final Provider provider;
+ 
+   /** The protocal name. */
+   private final String protocol;
+ 
+   // Constructor.
+   // ------------------------------------------------------------------
+ 
+   /**
+    * Create a new SSL context.
+    *
+    * @param ctxSpi The context engine.
+    * @param provider The provider of the implementation.
+    * @param protocol The name of the SSL protocol.
+    */
+   protected SSLContext(SSLContextSpi ctxSpi, Provider provider,
+                        String protocol)
+   {
+     this.ctxSpi = ctxSpi;
+     this.provider = provider;
+     this.protocol = protocol;
+   }
+ 
+   // Class methods.
+   // ------------------------------------------------------------------
+ 
+   /**
+    * Get an instance of a context for the specified protocol from the
+    * first provider that implements it.
+    *
+    * @param protocol The name of the protocol to get a context for.
+    * @return The new context.
+    * @throws NoSuchAlgorithm If no provider implements the given
+    *   protocol.
+    */
+   public static final SSLContext getInstance(String protocol)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] provs = Security.getProviders();
+     for (int i = 0; i < provs.length; i++)
+       {
+         try
+           {
+             return getInstance(protocol, provs[i]);
+           }
+         catch (NoSuchAlgorithmException ignore)
+           {
+           }
+       }
+     throw new NoSuchAlgorithmException(protocol);
+   }
+ 
+   /**
+    * Get an instance of a context for the specified protocol from the
+    * named provider.
+    *
+    * @param protocol The name of the protocol to get a context for.
+    * @param provider The name of the provider to get the
+    *   implementation from.
+    * @return The new context.
+    * @throws NoSuchAlgorithmException If the provider does not
+    *   implement the given protocol.
+    * @throws NoSuchProviderException If the named provider does not
+    *   exist.
+    * @throws IllegalArgumentException If <i>provider</i> is null.
+    */
+   public static final SSLContext getInstance(String protocol,
+                                              String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     if (provider == null)
+       {
+         throw new IllegalArgumentException("null provider");
+       }
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       {
+         throw new NoSuchProviderException(provider);
+       }
+     return getInstance(protocol, p);
+   }
+ 
+   /**
+    * Get an instance of a context for the specified protocol from the
+    * specified provider.
+    *
+    * @param protocol The name of the protocol to get a context for.
+    * @param provider The name of the provider to get the
+    *   implementation from.
+    * @return The new context.
+    * @throws NoSuchAlgorithmException If the provider does not
+    *   implement the given protocol.
+    * @throws IllegalArgumentException If <i>provider</i> is null.
+    */
+   public static final SSLContext getInstance(String protocol,
+                                              Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     try
+       {
+         return new SSLContext((SSLContextSpi)
+           Engine.getInstance(SSL_CONTEXT, protocol, provider),
+           provider, protocol);
+       }
+     catch (InvocationTargetException ite)
+       {
+         NoSuchAlgorithmException nsae = new NoSuchAlgorithmException(protocol);
+         throw (NoSuchAlgorithmException) nsae.initCause(ite);
+       }
+     catch (ClassCastException cce)
+       {
+         NoSuchAlgorithmException nsae = new NoSuchAlgorithmException(protocol);
+         throw (NoSuchAlgorithmException) nsae.initCause(cce);
+       }
+   }
+ 
+   // Instance methods.
+   // -----------------------------------------------------------------
+ 
+   /**
+    * Returns the set of SSL contexts available for client connections.
+    *
+    * @return The set of SSL contexts available for client connections.
+    */
+   public final SSLSessionContext getClientSessionContext()
+   {
+     return ctxSpi.engineGetClientSessionContext();
+   }
+ 
+   /**
+    * Returns the protocol name of this context.
+    *
+    * @return The protocol name of this context.
+    */
+   public final String getProtocol()
+   {
+     return protocol;
+   }
+ 
+   /**
+    * Returns the provider of this implementation.
+    *
+    * @return The provider of this implementation.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Returns the set of SSL contexts available for server connections.
+    *
+    * @return The set of SSL contexts available for server connections.
+    */
+   public final SSLSessionContext getServerSessionContext()
+   {
+     return ctxSpi.engineGetServerSessionContext();
+   }
+ 
+   /**
+    * Returns the factory for server SSL sockets.
+    *
+    * @return The factory for server SSL sockets.
+    */
+   public final SSLServerSocketFactory getServerSocketFactory()
+   {
+     return ctxSpi.engineGetServerSocketFactory();
+   }
+ 
+   /**
+    * Returns the factory for client SSL sockets.
+    *
+    * @return The factory for client SSL sockets.
+    */
+   public final SSLSocketFactory getSocketFactory()
+   {
+     return ctxSpi.engineGetSocketFactory();
+   }
+ 
+   /**
+    * Initializes this context and prepares it for producing socket
+    * factories. All of the parameters are optional; default values are
+    * used if left unspecified.
+    *
+    * @param keyManagers The set of key managers to use.
+    * @param trustManagers The set of trust managers to use.
+    * @param random A source of random bits to use.
+    * @throws KeyManagementException If initialization fails.
+    */
+   public final void init(KeyManager[] keyManagers,
+                          TrustManager[] trustManagers,
+                          SecureRandom random)
+     throws KeyManagementException
+   {
+     ctxSpi.engineInit(keyManagers, trustManagers, random);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLContextSpi.java gcc-4.0.0/libjava/javax/net/ssl/SSLContextSpi.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLContextSpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLContextSpi.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,109 ----
+ /* SSLContextSpi.java -- SPI for SSL contexts.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.security.KeyManagementException;
+ import java.security.SecureRandom;
+ 
+ /**
+  * The <i>Service Provider Interface</i> (<b>SPI</b>) for SSLContext
+  * objects.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public abstract class SSLContextSpi
+ {
+ 
+   // Constructor.
+   // -------------------------------------------------------------------
+ 
+   /**
+    * Create a new SSLContextSpi.
+    */
+   public SSLContextSpi()
+   {
+     super();
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------
+ 
+   /**
+    * Returns the set of SSL sessions available for client connections.
+    *
+    * @return The set of SSL sessions available for client connections.
+    */
+   protected abstract SSLSessionContext engineGetClientSessionContext();
+ 
+   /**
+    * Returns the set of SSL sessions available for server connections.
+    *
+    * @return The set of SSL sessions available for server connections.
+    */
+   protected abstract SSLSessionContext engineGetServerSessionContext();
+ 
+   /**
+    * Returns the SSL server socket factory.
+    *
+    * @return The SSL server socket factory.
+    */
+   protected abstract SSLServerSocketFactory engineGetServerSocketFactory();
+ 
+   /**
+    * Returns the SSL client socket factory.
+    *
+    * @return The SSL client socket factory.
+    */
+   protected abstract SSLSocketFactory engineGetSocketFactory();
+ 
+   /**
+    * Initialize this context with key and trust managers, and a source
+    * of randomness. All of the parameters are optional.
+    *
+    * @param keyManagers The set of key managers.
+    * @param trustManagers The set of trust managers.
+    * @param random The source of randomness.
+    * @throws KeyManagementException If this context cannot be
+    *   initialized with these parameters.
+    */
+   protected abstract void engineInit(KeyManager[] keyManagers,
+                                      TrustManager[] trustManagers,
+                                      SecureRandom random)
+     throws KeyManagementException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLException.java gcc-4.0.0/libjava/javax/net/ssl/SSLException.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLException.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,59 ----
+ /* SSLException.java -- generic SSL 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * The superclass of all possible SSL exceptions. Usually, a specific
+  * exception is thrown instead of this exception.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public class SSLException extends IOException
+ {
+ 
+   // Constructor.
+   // ------------------------------------------------------------------
+ 
+   public SSLException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLHandshakeException.java gcc-4.0.0/libjava/javax/net/ssl/SSLHandshakeException.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLHandshakeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLHandshakeException.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,51 ----
+ /* SSLHandshakeException.java -- exception in SSL handshake.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * An exception that signals an error in the SSL handshake phase.
+  */
+ public class SSLHandshakeException extends SSLException
+ {
+ 
+   public SSLHandshakeException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLKeyException.java gcc-4.0.0/libjava/javax/net/ssl/SSLKeyException.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLKeyException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLKeyException.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,52 ----
+ /* SSLKeyException.java -- exception in using a key in SSL.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * An exception signaling a problem using a public or private key in
+  * an SSL communication.
+  */
+ public class SSLKeyException extends SSLException
+ {
+ 
+   public SSLKeyException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLPeerUnverifiedException.java gcc-4.0.0/libjava/javax/net/ssl/SSLPeerUnverifiedException.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLPeerUnverifiedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLPeerUnverifiedException.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,51 ----
+ /* SSLPeerUnverifiedException.java -- unverified peer 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * An exception thrown when the remote peer could not be verified.
+  */
+ public class SSLPeerUnverifiedException extends SSLException
+ {
+ 
+   public SSLPeerUnverifiedException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLPermission.java gcc-4.0.0/libjava/javax/net/ssl/SSLPermission.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLPermission.java	Thu Nov 18 15:26:43 2004
***************
*** 0 ****
--- 1,66 ----
+ /* SSLPermission.java -- SSL permission class.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.security.BasicPermission;
+ 
+ /**
+  * A permission used for accessing SSL classes.
+  */
+ public final class SSLPermission extends BasicPermission
+ {
+ 
+   // Constant.
+   // -------------------------------------------------------------------------
+ 
+   private static final long serialVersionUID = -3456898025505876775L;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public SSLPermission(String name)
+   {
+     super(name);
+   }
+ 
+   public SSLPermission(String name, String actions)
+   {
+     super(name, actions);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLProtocolException.java gcc-4.0.0/libjava/javax/net/ssl/SSLProtocolException.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLProtocolException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLProtocolException.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,53 ----
+ /* SSLProtocolException.java -- exception in SSL protocol.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * An exception thrown when a fatal protocol error is encountered. This
+  * exception usually indicates some serious problem with the local or
+  * remote SSL implementation.
+  */
+ public class SSLProtocolException extends SSLException
+ {
+ 
+   public SSLProtocolException(String message)
+   {
+     super(message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLServerSocket.java gcc-4.0.0/libjava/javax/net/ssl/SSLServerSocket.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLServerSocket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLServerSocket.java	Tue Sep 21 11:25:26 2004
***************
*** 0 ****
--- 1,188 ----
+ /* SSLServerSocket.java -- a server socket for SSL connections.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.io.IOException;
+ 
+ import java.net.InetAddress;
+ import java.net.ServerSocket;
+ 
+ /**
+  * A server socket that allows clients to connect via the SSL protocol.
+  */
+ public abstract class SSLServerSocket extends ServerSocket
+ {
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   protected SSLServerSocket() throws IOException
+   {
+     super();
+     //super(0);
+     //throw new UnsupportedOperationException("1.4 socket methods not enabled");
+   }
+ 
+   protected SSLServerSocket(int port) throws IOException
+   {
+     super(port);
+   }
+ 
+   protected SSLServerSocket(int port, int backlog) throws IOException
+   {
+     super(port, backlog);
+   }
+ 
+   protected SSLServerSocket(int port, int backlog, InetAddress bindAddress)
+     throws IOException
+   {
+     super(port, backlog, bindAddress);
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns the list of cihper suites that are currently enabled in this
+    * server socket. Sockets accepted by this server socket will only have
+    * these suites enabled.
+    *
+    * @return The enabled cipher suites.
+    */
+   public abstract String[] getEnabledCipherSuites();
+ 
+   /**
+    * Sets the list enabled cipher suites.
+    *
+    * @param suites The cipher suites to enable.
+    */
+   public abstract void setEnabledCipherSuites(String[] suites);
+ 
+   /**
+    * Returns the list of enabled protocols, such as "SSLv3" and "TLSv1".
+    *
+    * @return The enabled protocols.
+    */
+   public abstract String[] getEnabledProtocols();
+ 
+   /**
+    * Sets the list of enabled protocols.
+    *
+    * @param protocols The list of protocols to enable.
+    */
+   public abstract void setEnabledProtocols(String[] protocols);
+ 
+   /**
+    * Returns whether or not sessions will be created, i.e., whether or not
+    * this server socket will allow SSL session resumption.
+    *
+    * @return True if sessions will be created.
+    */
+   public abstract boolean getEnableSessionCreation();
+ 
+   /**
+    * Sets whether or not sessions will be created.
+    *
+    * @param enabled The new enabled value.
+    */
+   public abstract void setEnableSessionCreation(boolean enabled);
+ 
+   /**
+    * Returns whether or not this server socket will require clients to
+    * authenticate themselves, such as through a certificate.
+    *
+    * @return True if clients must authenticate themselves.
+    */
+   public abstract boolean getNeedClientAuth();
+ 
+   /**
+    * Enabled or disables the requirement that clients authenticate themselves.
+    * When this is set to <code>true</code>, connections will be rejected if
+    * connecting clients do not provide proper authentication.
+    *
+    * @param needAuth The new need auth value.
+    */
+   public abstract void setNeedClientAuth(boolean needAuth);
+ 
+   /**
+    * Returns whether or not sockets accepted by this server socket will do
+    * their handshake as the client-side. The default is false.
+    *
+    * @return True if client mode will be used.
+    */
+   public abstract boolean getUseClientMode();
+ 
+   /**
+    * Sets whether or not sockets accepted by this server socket will be
+    * created in client mode.
+    *
+    * @param clientMode The new client mode value.
+    */
+   public abstract void setUseClientMode(boolean clientMode);
+ 
+   /**
+    * Returns whether or not this socket will ask for, but not require, that
+    * connecting clients authenticate themselves. Clients that do not
+    * provide authentication they will still be allowed to connect.
+    *
+    * @return True if this server socket wants client authentication.
+    */
+   public abstract boolean getWantClientAuth();
+ 
+   /**
+    * Sets whether or not this server socket will want client authentication.
+    *
+    * @param wantAuth The new want auth value.
+    */
+   public abstract void setWantClientAuth(boolean wantAuth);
+ 
+   /**
+    * Returns a list of cipher suites that this server socket supports.
+    *
+    * @return The list of supported suites.
+    */
+   public abstract String[] getSupportedCipherSuites();
+ 
+   /**
+    * Returns a list of SSL protocols supported by this server socket.
+    *
+    * @return The list of supported protocols.
+    */
+   public abstract String[] getSupportedProtocols();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLServerSocketFactory.java gcc-4.0.0/libjava/javax/net/ssl/SSLServerSocketFactory.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLServerSocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLServerSocketFactory.java	Thu Oct 21 20:54:37 2004
***************
*** 0 ****
--- 1,172 ----
+ /* SSLServerSocketFactory.java -- factory for SSL server sockets.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.security.KeyStore;
+ import java.security.Security;
+ 
+ import javax.net.ServerSocketFactory;
+ 
+ /**
+  * A server socket factory for <i>Secure Socket Layer</i> (<b>SSL</b>)
+  * server sockets.
+  */
+ public abstract class SSLServerSocketFactory extends ServerSocketFactory
+ {
+   // Field.
+   // -------------------------------------------------------------------------
+ 
+   private static SSLContext context;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   protected SSLServerSocketFactory()
+   {
+     super();
+   }
+ 
+   // Class methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns a default implementation of a SSL server socket factory.
+    *
+    * <p>To control the class that gets returned by this method, set the
+    * security property "ssl.ServerSocketFactory.provider" to the class
+    * name of a concrete implementation of this class. If not set, a
+    * system-dependent implementation will be used.</p>
+    *
+    * <p>The implementation returned is created by the first implementation
+    * of the {@link SSLContext} class found, which is initialized with
+    * default parameters. To control the key and trust manager factory
+    * algorithms used as defaults, set the security properties
+    * "ssl.keyManagerFactory.algorithm" and "ssl.trustManagerFactory.algorithm"
+    * to the appropriate names.</p>
+    *
+    * <p>Using this method is not recommended. Instead, use the methods of
+    * {@link SSLContext}, which provide much better control over the
+    * creation of server socket factories.</p>
+    *
+    * @return The default server socket factory.
+    * @throws RuntimeException If no default can be created.
+    */
+   public static synchronized ServerSocketFactory getDefault()
+   {
+     try
+       {
+         String s = Security.getProperty("ssl.ServerSocketFactory.provider");
+         ClassLoader cl = ClassLoader.getSystemClassLoader();
+         if (s != null && cl != null)
+           {
+             return (ServerSocketFactory) cl.loadClass(s).newInstance();
+           }
+       }
+     catch (Exception e)
+       {
+       }
+     if (context == null)
+       {
+         KeyManager[] km = null;
+         TrustManager[] tm = null;
+ 
+         // 1. Determine which algorithms to use for the key and trust
+         // manager factories.
+         String kmAlg = KeyManagerFactory.getDefaultAlgorithm();
+         String tmAlg = TrustManagerFactory.getDefaultAlgorithm();
+         // 2. Try to initialize the factories with default parameters.
+         try
+           {
+             KeyManagerFactory kmf = KeyManagerFactory.getInstance(kmAlg);
+             kmf.init(null, null);
+             km = kmf.getKeyManagers();
+           }
+         catch (Exception ex)
+           {
+           }
+         try
+           {
+             TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmAlg);
+             tmf.init((KeyStore) null);
+             tm = tmf.getTrustManagers();
+           }
+         catch (Exception ex)
+           {
+           }
+ 
+         // 3. Create and initialize a context.
+         try
+           {
+             context = SSLContext.getInstance("SSLv3");
+             context.init(km, tm, null);
+           }
+         catch (Exception ex)
+           {
+             throw new RuntimeException("error instantiating default server socket factory: "
+                                        + ex.toString());
+           }
+       }
+     try
+       {
+         return context.getServerSocketFactory();
+       }
+     catch (Exception e)
+       {
+       }
+     throw new RuntimeException("no SSLSocketFactory implementation available");
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns the list of cipher suites that will be enabled in server sockets
+    * created by this factory.
+    *
+    * @return The default cipher suites.
+    */
+   public abstract String[] getDefaultCipherSuites();
+ 
+   /**
+    * Returns the list of all cipher suites supported by this factory.
+    *
+    * @return The list of supported cipher suites.
+    */
+   public abstract String[] getSupportedCipherSuites();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLSession.java gcc-4.0.0/libjava/javax/net/ssl/SSLSession.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLSession.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLSession.java	Thu Oct 21 20:54:37 2004
***************
*** 0 ****
--- 1,168 ----
+ /* SSLSession.java -- an SSL session.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.security.cert.Certificate;
+ 
+ import javax.security.cert.X509Certificate;
+ 
+ /**
+  * An SSL session is a mechanism through which connections can be established
+  * by re-using previously negotiated handshakes.
+  */
+ public interface SSLSession
+ {
+   /**
+    * Returns this session's cihper suite.
+    *
+    * @return The cipher suite.
+    */
+   String getCipherSuite();
+ 
+   /**
+    * Returns the time in milliseconds since midnight GMT, 1 January 1970, that
+    * this session was created.
+    *
+    * @return The creation time.
+    */
+   long getCreationTime();
+ 
+   /**
+    * Returns this session's unique identifier, a arbitrary byte array of up
+    * to 32 bytes.
+    *
+    * @return The session identifier.
+    */
+   byte[] getId();
+ 
+   /**
+    * Returns the last time this session was accessed.
+    *
+    * @return The lest time this session was accessed.
+    */
+   long getLastAccessedTime();
+ 
+   /**
+    * Returns the chain of certificates that the local side used in the
+    * handshake, or null if none were used.
+    *
+    * @return The local certificate chain.
+    */
+   Certificate[] getLocalCertificates();
+ 
+   /**
+    * Returns the chain of certificates that the remote side used in
+    * the handshake, or null if none were used.
+    *
+    * @return The peer's certificate chain.
+    * @throws SSLPeerUnverifiedException If the identity of the peer has
+    *   not been verified.
+    */
+   Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException;
+ 
+   /**
+    * Returns the chain of certificates that the remote side used in
+    * the handshake, or null if none were used.
+    *
+    * @return The peer's certificate chain.
+    * @throws SSLPeerUnverifiedException If the identity of the peer has
+    *   not been verified.
+    */
+   X509Certificate[] getPeerCertificateChain()
+     throws SSLPeerUnverifiedException;
+ 
+   /**
+    * Returns the remote host's name.
+    *
+    * @return The name of the remote host.
+    */
+   String getPeerHost();
+ 
+   /**
+    * Returns the protocol this session uses.
+    *
+    * @return The protocol.
+    */
+   String getProtocol();
+ 
+   /**
+    * Returns this session's session context object.
+    *
+    * @return The session context.
+    * @throws SecurityException If the caller does not have the
+    *   {@link SSLPermission} "getSessionContext".
+    */
+   SSLSessionContext getSessionContext();
+ 
+   /**
+    * Returns the names of all values bound to this session.
+    *
+    * @return The list of bound names.
+    */
+   String[] getValueNames();
+ 
+   /**
+    * Returns the object bound to the given name.
+    *
+    * @param name The name of the value to get.
+    * @return The object bound by that name, or null.
+    */
+   Object getValue(String name);
+ 
+   /**
+    * Invalidates this session, ensuring that it will not be continued by
+    * another socket.
+    */
+   void invalidate();
+ 
+   /**
+    * Binds a value to this session, with the given name.
+    *
+    * @param name The name to bind the object with.
+    * @param value The value to bind.
+    */
+   void putValue(String name, Object value);
+ 
+   /**
+    * Un-binds a value.
+    *
+    * @param name The name of the value to un-bind.
+    */
+   void removeValue(String name);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLSessionBindingEvent.java gcc-4.0.0/libjava/javax/net/ssl/SSLSessionBindingEvent.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLSessionBindingEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLSessionBindingEvent.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,94 ----
+ /* SSLSessionBindingEvent.java -- SSL binding event.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.util.EventObject;
+ 
+ /**
+  * An event raised by {@link SSLSession} objects when objects are bound to
+  * them.
+  */
+ public class SSLSessionBindingEvent extends EventObject
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------
+ 
+   private static final long serialVersionUID = 3989172637106345L;
+ 
+   private final String name;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------
+ 
+   /**
+    * Creates a new binding event.
+    *
+    * @param session The session being bound to.
+    * @param name The name the object was bound under.
+    */
+   public SSLSessionBindingEvent(SSLSession session, String name)
+   {
+     super(session);
+     this.name = name;
+   }
+ 
+   // Instance methods.
+   // --------------------------------------------------------------------
+ 
+   /**
+    * Returns the name the object was bound under.
+    *
+    * @return The name.
+    */
+   public String getName()
+   {
+     return name;
+   }
+ 
+   /**
+    * Returns the session that the object was bound to.
+    *
+    * @return The session.
+    */
+   public SSLSession getSession()
+   {
+     return (SSLSession) getSource();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLSessionBindingListener.java gcc-4.0.0/libjava/javax/net/ssl/SSLSessionBindingListener.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLSessionBindingListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLSessionBindingListener.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,65 ----
+ /* SSLSessionBindingListener.java -- listener for SSL bindings.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.util.EventListener;
+ 
+ /**
+  * An event listener interface that should be notified when it is bound or
+  * unbound to a {@link SSLSession}.
+  */
+ public interface SSLSessionBindingListener extends EventListener
+ {
+ 
+   /**
+    * This method is called of all objects when they are bound to an SSL
+    * session.
+    *
+    * @param event The binding event.
+    */
+   void valueBound(SSLSessionBindingEvent event);
+ 
+   /**
+    * This method is called of all objects when they are unbound to an SSL
+    * session.
+    *
+    * @param event The binding event.
+    */
+   void valueUnbound(SSLSessionBindingEvent event);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLSessionContext.java gcc-4.0.0/libjava/javax/net/ssl/SSLSessionContext.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLSessionContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLSessionContext.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,103 ----
+ /* SSLSessionContext.java -- collection of SSL sessions.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.util.Enumeration;
+ 
+ /**
+  * A collection of saved SSL sessions, with thier corresponding session
+  * IDs.
+  *
+  * @author Casey Marshall (rsdio@metastatic.org)
+  */
+ public interface SSLSessionContext
+ {
+ 
+   /**
+    * Returns an enumeration of all saved session IDs. Every element in
+    * the returned enumeration is a byte array.
+    *
+    * @return The session IDs.
+    */
+   Enumeration getIds();
+ 
+   /**
+    * Gets the session specified by its ID, or <code>null</code> if there
+    * is no session, or if it has expired.
+    *
+    * @param sessionId The ID of the session to get.
+    * @return The session, or <code>null</code>.
+    */
+   SSLSession getSession(byte[] sessionId);
+ 
+   /**
+    * Returns the maximum number of sessions that may be cached by this
+    * session context.
+    *
+    * @return The maximum number of sessions that may be cached.
+    */
+   int getSessionCacheSize();
+ 
+   /**
+    * Returns the period of time (in seconds) that a session may be cached
+    * for before becoming invalid.
+    *
+    * @return The time a session may be valid.
+    */
+   int getSessionTimeout();
+ 
+   /**
+    * Sets the maximum number of sessions that may be cached by this
+    * session context. A cache size of 0 means no limit.
+    *
+    * @param size The new cache size.
+    * @throws IllegalArgumentException If <code>size</code> is negative.
+    */
+   void setSessionCacheSize(int size);
+ 
+   /**
+    * Sets the period of time (in seconds) that a session may be cached
+    * for before becoming invalid. A timeout of 0 means that sessions
+    * never expire.
+    *
+    * @param seconds The new timeout.
+    * @throws IllegalArgumentException If <code>seconds</code> is negative.
+    */
+   void setSessionTimeout(int seconds);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLSocket.java gcc-4.0.0/libjava/javax/net/ssl/SSLSocket.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLSocket.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLSocket.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,229 ----
+ /* SSLSocket.java -- an SSL client socket.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.io.IOException;
+ import java.net.InetAddress;
+ import java.net.Socket;
+ import java.net.UnknownHostException;
+ 
+ /**
+  * A socket that communicates over the secure socket layer protocol.
+  */
+ public abstract class SSLSocket extends Socket
+ {
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   protected SSLSocket()
+   {
+     super();
+   }
+ 
+   protected SSLSocket(String host, int port)
+     throws IOException, UnknownHostException
+   {
+     super(host, port);
+   }
+ 
+   protected SSLSocket(InetAddress address, int port) throws IOException
+   {
+     super(address, port);
+   }
+ 
+   protected SSLSocket(String host, int port,
+                       InetAddress localAddr, int localPort)
+     throws IOException, UnknownHostException
+   {
+     super(host, port, localAddr, localPort);
+   }
+ 
+   protected SSLSocket(InetAddress address, int port,
+                       InetAddress localAddr, int localPort)
+     throws IOException
+   {
+     super(address, port, localAddr, localPort);
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Adds a handshake completed listener that wants to be notified when the
+    * SSL handshake completes.
+    *
+    * @param listener The listener to add.
+    */
+   public abstract void
+     addHandshakeCompletedListener(HandshakeCompletedListener listener);
+ 
+   /**
+    * Removes a handshake listener from this socket.
+    *
+    * @param listener The listener to remove.
+    */
+   public abstract void
+     removeHandshakeCompletedListener(HandshakeCompletedListener listener);
+ 
+   /**
+    * Returns the list of currently enabled cipher suites.
+    *
+    * @return The list of enabled cipher suites.
+    */
+   public abstract String[] getEnabledCipherSuites();
+ 
+   /**
+    * Sets the list of enabled cipher suites.
+    *
+    * @param suites The list of suites to enable.
+    */
+   public abstract void setEnabledCipherSuites(String[] suites);
+ 
+   /**
+    * Returns the list of enabled SSL protocols.
+    *
+    * @return The list of enabled protocols.
+    */
+   public abstract String[] getEnabledProtocols();
+ 
+   /**
+    * Sets the list of enabled SSL protocols.
+    *
+    * @param protocols The list of protocols to enable.
+    */
+   public abstract void setEnabledProtocols(String[] protocols);
+ 
+   /**
+    * Returns whether or not sessions will be created by this socket, and thus
+    * allow sessions to be continued later.
+    *
+    * @return Whether or not sessions will be created.
+    */
+   public abstract boolean getEnableSessionCreation();
+ 
+   /**
+    * Sets whether or not sessions will be created by this socket.
+    *
+    * @param enable The new value.
+    */
+   public abstract void setEnableSessionCreation(boolean enable);
+ 
+   /**
+    * Returns whether or not this socket will require connecting clients to
+    * authenticate themselves. This value only applies to sockets in server
+    * mode.
+    *
+    * @return Whether or not this socket requires client authentication.
+    */
+   public abstract boolean getNeedClientAuth();
+ 
+   /**
+    * Sets whether or not this socket will require connecting clients to
+    * authenticate themselves. This value only applies to sockets in server
+    * mode.
+    *
+    * @param needAuth The new need auth value.
+    */
+   public abstract void setNeedClientAuth(boolean needAuth);
+ 
+   /**
+    * Returns this socket's session object.
+    *
+    * @return The session.
+    */
+   public abstract SSLSession getSession();
+ 
+   /**
+    * Returns the list of cipher suites supported by this socket.
+    *
+    * @return The list of supported cipher suites.
+    */
+   public abstract String[] getSupportedCipherSuites();
+ 
+   /**
+    * Returns the list of protocols supported by this socket.
+    *
+    * @return The list of supported protocols.
+    */
+   public abstract String[] getSupportedProtocols();
+ 
+   /**
+    * Returns whether or not this socket will connect in client mode.
+    *
+    * @return True if this is a client socket.
+    */
+   public abstract boolean getUseClientMode();
+ 
+   /**
+    * Sets whether or not this socket will connect in client mode.
+    *
+    * @param clientMode The new value.
+    */
+   public abstract void setUseClientMode(boolean clientMode);
+ 
+   /**
+    * Returns whether or not this socket will request that connecting clients
+    * authenticate themselves. This value only applies to sockets in server
+    * mode.
+    *
+    * @return The want client auth value.
+    */
+   public abstract boolean getWantClientAuth();
+ 
+   /**
+    * Sets whether or not this socket will request that connecting clients
+    * authenticate themselves. This value only applies to sockets in server
+    * mode.
+    *
+    * @param wantAuth The new want auth value.
+    */
+   public abstract void setWantClientAuth(boolean wantAuth);
+ 
+   /**
+    * Explicitly begins the handshake, or, if the handshake has already
+    * completed, requests that the handshake be repeated.
+    *
+    * <p>The handshake will begin implicitly when any attempt to read or
+    * write to the socket is made.</p>
+    *
+    * @throws IOException If an I/O or SSL error occurs.
+    */
+   public abstract void startHandshake() throws IOException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/SSLSocketFactory.java gcc-4.0.0/libjava/javax/net/ssl/SSLSocketFactory.java
*** gcc-3.4.3/libjava/javax/net/ssl/SSLSocketFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/SSLSocketFactory.java	Thu Oct 21 20:54:37 2004
***************
*** 0 ****
--- 1,190 ----
+ /* SSLSocketFactory.java -- factory for SSL client sockets.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.io.IOException;
+ import java.net.Socket;
+ import java.security.KeyStore;
+ import java.security.Security;
+ 
+ import javax.net.SocketFactory;
+ 
+ /**
+  * A socket factory for creating <i>Secure Socket Layer</i> (<b>SSL</b>)
+  * sockets.
+  */
+ public abstract class SSLSocketFactory extends SocketFactory
+ {
+   // Constants.
+   // -------------------------------------------------------------------------
+ 
+   private static SSLContext context;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public SSLSocketFactory()
+   {
+     super();
+   }
+ 
+   // Class methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns a default implementation of a SSL socket factory.
+    *
+    * <p>To control the class that gets returned by this method, set the
+    * security property "ssl.SocketFactory.provider" to the class
+    * name of a concrete implementation of this class. If not set, a
+    * system-dependent implementation will be used.</p>
+    *
+    * <p>The implementation returned is created by the first implementation
+    * of the {@link SSLContext} class found, which is initialized with
+    * default parameters. To control the key and trust manager factory
+    * algorithms used as defaults, set the security properties
+    * "ssl.keyManagerFactory.algorithm" and "ssl.trustManagerFactory.algorithm"
+    * to the appropriate names.</p>
+    *
+    * <p>Using this method is not recommended. Instead, use the methods of
+    * {@link SSLContext}, which provide much better control over the
+    * creation of socket factories.</p>
+    *
+    * @return The default socket factory.
+    * @throws RuntimeException If no default can be created.
+    */
+   public static synchronized SocketFactory getDefault()
+   {
+     try
+       {
+         String s = Security.getProperty("ssl.SocketFactory.provider");
+         ClassLoader cl = ClassLoader.getSystemClassLoader();
+         if (s != null && cl != null)
+           {
+             return (SocketFactory) cl.loadClass(s).newInstance();
+           }
+       }
+     catch (Exception e)
+       {
+       }
+     if (context == null)
+       {
+         KeyManager[] km = null;
+         TrustManager[] tm = null;
+ 
+         // 1. Determine which algorithms to use for the key and trust
+         // manager factories.
+         String kmAlg = KeyManagerFactory.getDefaultAlgorithm();
+         String tmAlg = TrustManagerFactory.getDefaultAlgorithm();
+ 
+         // 2. Try to initialize the factories with default parameters.
+         try
+           {
+             KeyManagerFactory kmf = KeyManagerFactory.getInstance(kmAlg);
+             kmf.init(null, null);
+             km = kmf.getKeyManagers();
+           }
+         catch (Exception ex)
+           {
+           }
+         try
+           {
+             TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmAlg);
+             tmf.init((KeyStore) null);
+             tm = tmf.getTrustManagers();
+           }
+         catch (Exception ex)
+           {
+           }
+ 
+         // 3. Create and initialize a context.
+         try
+           {
+             context = SSLContext.getInstance("SSLv3");
+             context.init(km, tm, null);
+           }
+         catch (Exception ex)
+           {
+             throw new RuntimeException("error instantiating default socket factory: "
+                                        + ex.toString());
+           }
+       }
+     try
+       {
+         return context.getSocketFactory();
+       }
+     catch (Exception e)
+       {
+       }
+     throw new RuntimeException("no SSLSocketFactory implementation available");
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Creates a SSL socket wrapped around an existing socket.
+    *
+    * @param socket The socket to wrap.
+    * @param host The host the socket is connected to.
+    * @param port The port the socket is connected to.
+    * @param autoClose Whether or not the wrapped socket should be closed
+    *   automatically.
+    * @return The new SSL socket.
+    * @throws IOException If the socket could not be created.
+    */
+   public abstract Socket createSocket(Socket socket, String host,
+                                       int port, boolean autoClose)
+     throws IOException;
+ 
+   /**
+    * Returns the list of cipher suites that will be enabled in sockets
+    * created by this factory.
+    *
+    * @return The default cipher suites.
+    */
+   public abstract String[] getDefaultCipherSuites();
+ 
+   /**
+    * Returns the list of all cipher suites supported by this factory.
+    *
+    * @return The list of supported cipher suites.
+    */
+   public abstract String[] getSupportedCipherSuites();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/TrivialHostnameVerifier.java gcc-4.0.0/libjava/javax/net/ssl/TrivialHostnameVerifier.java
*** gcc-3.4.3/libjava/javax/net/ssl/TrivialHostnameVerifier.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/TrivialHostnameVerifier.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,51 ----
+ /* TrivialHostnameVerifier.java -- non-verifing verifier.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * A hostname verifier that always rejects mismatched hostnames.
+  */
+ class TrivialHostnameVerifier implements HostnameVerifier
+ {
+ 
+   public boolean verify(String hostname, SSLSession session)
+   {
+     return false;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/TrustManager.java gcc-4.0.0/libjava/javax/net/ssl/TrustManager.java
*** gcc-3.4.3/libjava/javax/net/ssl/TrustManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/TrustManager.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,47 ----
+ /* TrustManager.java -- marker interface for trust managers.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ /**
+  * A marker interface for classes that establish the trust of remote
+  * hosts.
+  */
+ public interface TrustManager
+ {
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/TrustManagerFactory.java gcc-4.0.0/libjava/javax/net/ssl/TrustManagerFactory.java
*** gcc-3.4.3/libjava/javax/net/ssl/TrustManagerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/TrustManagerFactory.java	Thu Oct 21 20:54:37 2004
***************
*** 0 ****
--- 1,278 ----
+ /* TrustManagerFactory.java -- factory for trust managers.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import gnu.java.security.Engine;
+ 
+ import java.lang.reflect.InvocationTargetException;
+ import java.security.AccessController;
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.KeyStore;
+ import java.security.KeyStoreException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.PrivilegedAction;
+ import java.security.Provider;
+ import java.security.Security;
+ 
+ /**
+  * A factory for creating trust manager objects.
+  */
+ public class TrustManagerFactory
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   /** The service name for trust manager factories. */
+   private static final String TRUST_MANAGER_FACTORY = "TrustManagerFactory";
+ 
+   /** The system default trust manager algorithm. */
+   private static final String DEFAULT_ALGORITHM = "JessieX509";
+ 
+   /** The underlying engine class. */
+   private final TrustManagerFactorySpi tmfSpi;
+ 
+   /** The provider of the engine class. */
+   private final Provider provider;
+ 
+   /** The name of this trust manager algorithm. */
+   private final String algorithm;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new trust manager factory.
+    *
+    * @param tmfSpi The underlying engine class.
+    * @param provider The provider of the engine class.
+    * @param algorithm The trust manager algorithm name.
+    */
+   protected TrustManagerFactory(TrustManagerFactorySpi tmfSpi,
+                                 Provider provider, String algorithm)
+   {
+     this.tmfSpi = tmfSpi;
+     this.provider = provider;
+     this.algorithm = algorithm;
+   }
+ 
+   // Class methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns an instance of a trust manager factory for the given algorithm
+    * from the first provider that implements it.
+    *
+    * @param algorithm The name of the algorithm to get.
+    * @return The instance of the trust manager factory.
+    * @throws NoSuchAlgorithmException If no provider implements the given
+    *   algorithm.
+    */
+   public static final TrustManagerFactory getInstance(String algorithm)
+     throws NoSuchAlgorithmException
+   {
+     Provider[] provs = Security.getProviders();
+     for (int i = 0; i < provs.length; i++)
+       {
+         try
+           {
+             return getInstance(algorithm, provs[i]);
+           }
+         catch (NoSuchAlgorithmException ignore)
+           {
+           }
+       }
+     throw new NoSuchAlgorithmException(algorithm);
+   }
+ 
+   /**
+    * Returns an instance of a trust manager factory for the given algorithm
+    * from the named provider.
+    *
+    * @param algorithm The name of the algorithm to get.
+    * @param provider The name of the provider to get the instance from.
+    * @return The instance of the trust manager factory.
+    * @throws NoSuchAlgorithmException If the provider does not implement the
+    *   given algorithm.
+    * @throws NoSuchProviderException If there is no such named provider.
+    * @throws IllegalArgumentException If the provider argument is null.
+    */
+   public static final TrustManagerFactory getInstance(String algorithm,
+                                                       String provider)
+     throws NoSuchAlgorithmException, NoSuchProviderException
+   {
+     if (provider == null)
+       {
+         throw new IllegalArgumentException();
+       }
+     Provider p = Security.getProvider(provider);
+     if (p == null)
+       {
+         throw new NoSuchProviderException(provider);
+       }
+     return getInstance(algorithm, p);
+   }
+ 
+   /**
+    * Returns an instance of a trust manager factory for the given algorithm
+    * from the specified provider.
+    *
+    * @param algorithm The name of the algorithm to get.
+    * @param provider The provider to get the instance from.
+    * @return The instance of the trust manager factory.
+    * @throws NoSuchAlgorithmException If the provider does not implement the
+    *   given algorithm.
+    * @throws IllegalArgumentException If the provider argument is null.
+    */
+   public static final TrustManagerFactory getInstance(String algorithm,
+                                                       Provider provider)
+     throws NoSuchAlgorithmException
+   {
+     if (provider == null)
+       {
+         throw new IllegalArgumentException();
+       }
+     try
+       {
+         return new TrustManagerFactory((TrustManagerFactorySpi)
+           Engine.getInstance(TRUST_MANAGER_FACTORY, algorithm, provider),
+           provider, algorithm);
+       }
+     catch (InvocationTargetException ite)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+     catch (ClassCastException cce)
+       {
+         throw new NoSuchAlgorithmException(algorithm);
+       }
+   }
+ 
+   /**
+    * Returns the default algorithm for trust manager factories. The value
+    * returned is either the value of the security property
+    * "ssl.TrustManagerFactory.algorithm" if it is set, or the value "JessieX509"
+    * if not.
+    *
+    * @return The default algorithm name.
+    * @see Security.getProperty(java.lang.String)
+    */
+   public static final String getDefaultAlgorithm()
+   {
+     String alg = null;
+     try
+       {
+         alg = (String) AccessController.doPrivileged(
+           new PrivilegedAction()
+           {
+             public Object run()
+             {
+               return Security.getProperty("ssl.TrustManagerFactory.algorithm");
+             }
+           }
+         );
+       }
+     catch (SecurityException se)
+       {
+       }
+     if (alg == null)
+       alg = DEFAULT_ALGORITHM;
+     return alg;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns the name of this trust manager algorithm.
+    *
+    * @return The algorithm name.
+    */
+   public final String getAlgorithm()
+   {
+     return algorithm;
+   }
+ 
+   /**
+    * Returns the provider of the underlying implementation.
+    *
+    * @return The provider.
+    */
+   public final Provider getProvider()
+   {
+     return provider;
+   }
+ 
+   /**
+    * Returns the trust managers created by this factory.
+    *
+    * @return The trust managers.
+    */
+   public final TrustManager[] getTrustManagers()
+   {
+     return tmfSpi.engineGetTrustManagers();
+   }
+ 
+   /**
+    * Initialize this instance with some algorithm-specific parameters.
+    *
+    * @param params The parameters.
+    * @throws InvalidAlgorithmParameterException If the supplied parameters
+    *   are inappropriate for this instance.
+    */
+   public final void init(ManagerFactoryParameters params)
+     throws InvalidAlgorithmParameterException
+   {
+     tmfSpi.engineInit(params);
+   }
+ 
+   /**
+    * Initialize this instance with a key store. The key store may be null,
+    * in which case a default will be used.
+    *
+    * @param store The key store.
+    * @throws KeyStoreException If there is a problem reading from the
+    *   key store.
+    */
+   public final void init(KeyStore store) throws KeyStoreException
+   {
+     tmfSpi.engineInit(store);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/TrustManagerFactorySpi.java gcc-4.0.0/libjava/javax/net/ssl/TrustManagerFactorySpi.java
*** gcc-3.4.3/libjava/javax/net/ssl/TrustManagerFactorySpi.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/TrustManagerFactorySpi.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,88 ----
+ /* TrustManagerFactorySpi.java -- SPI for trust manager factories.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.security.InvalidAlgorithmParameterException;
+ import java.security.KeyStore;
+ import java.security.KeyStoreException;
+ 
+ /**
+  * The <i>service provider interface</i> (<b>SPI</b>) for trust managers.
+  */
+ public abstract class TrustManagerFactorySpi
+ {
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public TrustManagerFactorySpi()
+   {
+     super();
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Engine method that returns the trust managers created by this factory.
+    *
+    * @return The trust managers.
+    */
+   protected abstract TrustManager[] engineGetTrustManagers();
+ 
+   /**
+    * Engine method that initializes this factory with some algorithm-specific
+    * parameters.
+    *
+    * @param params The parameters.
+    * @throws InvalidAlgorithmParameterException If the given parameters are
+    *   inappropriate.
+    */
+   protected abstract void engineInit(ManagerFactoryParameters params)
+     throws InvalidAlgorithmParameterException;
+ 
+   /**
+    * Engine method that initializes this factory with a key store. The key
+    * store parameter may be null, in which case some default should be used.
+    *
+    * @param store The key store.
+    * @throws KeyStoreException If a problem occurs reading from the key store.
+    */
+   protected abstract void engineInit(KeyStore store) throws KeyStoreException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/X509KeyManager.java gcc-4.0.0/libjava/javax/net/ssl/X509KeyManager.java
*** gcc-3.4.3/libjava/javax/net/ssl/X509KeyManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/X509KeyManager.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,108 ----
+ /* X509KeyManager.java -- X.509 key manager interface.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.net.Socket;
+ 
+ import java.security.Principal;
+ import java.security.PrivateKey;
+ import java.security.cert.X509Certificate;
+ 
+ /**
+  * A key manager for X.509 certificates and their associated private keys.
+  */
+ public interface X509KeyManager extends KeyManager
+ {
+ 
+   /**
+    * Choose an alias for client-side authentication.
+    *
+    * @param keyTypes A list of acceptable key types.
+    * @param issuers A list of acceptable certificate issuers.
+    * @param socket The connecting socket.
+    * @return The chosen alias.
+    */
+   String chooseClientAlias(String[] keyTypes, Principal[] issuers,
+                            Socket socket);
+ 
+   /**
+    * Choose an alias for server-side authentication.
+    *
+    * @param keyType The desired certificate type.
+    * @param issuers A list of acceptable certificate issuers.
+    * @param socket The connecting socket.
+    * @return The chosen alias.
+    */
+   String chooseServerAlias(String keyType, Principal[] issuers,
+                            Socket socket);
+ 
+   /**
+    * Gets the X.509 certificate chain associated with the given alias.
+    *
+    * @param alias The alias.
+    * @return The certificate chain.
+    */
+   X509Certificate[] getCertificateChain(String alias);
+ 
+   /**
+    * Returns all client aliases that support the given key type.
+    *
+    * @param keyType The desired key type.
+    * @param issuers A list of acceptable certificate issuers.
+    * @return The (possibly empty) list of aliases.
+    */
+   String[] getClientAliases(String keyType, Principal[] issuers);
+ 
+   /**
+    * Gets the private key associated with the given alias.
+    *
+    * @param alias The alias.
+    * @return The private key.
+    */
+   PrivateKey getPrivateKey(String alias);
+ 
+   /**
+    * Returns all server aliases that support the given key type.
+    *
+    * @param keyType The desired key type.
+    * @param issuers A list of acceptable certificate issuers.
+    * @return The (possibly empty) list of aliases.
+    */
+   String[] getServerAliases(String keyType, Principal[] issuers);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/net/ssl/X509TrustManager.java gcc-4.0.0/libjava/javax/net/ssl/X509TrustManager.java
*** gcc-3.4.3/libjava/javax/net/ssl/X509TrustManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/net/ssl/X509TrustManager.java	Tue Sep 21 08:33:32 2004
***************
*** 0 ****
--- 1,76 ----
+ /* X509TrustManager.java -- X.509 trust manager interface.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.net.ssl;
+ 
+ import java.security.cert.CertificateException;
+ import java.security.cert.X509Certificate;
+ 
+ /**
+  * A trust manager for dealing with X.509 certificates.
+  */
+ public interface X509TrustManager extends TrustManager
+ {
+ 
+   /**
+    * Checks if a certificate chain sent by the client is trusted.
+    *
+    * @param chain The certificate chain to check.
+    * @param authType The authentication type.
+    * @throws CertificateException If the client's certificates are not trusted.
+    */
+   void checkClientTrusted(X509Certificate[] chain, String authType)
+     throws CertificateException;
+ 
+   /**
+    * Checks if a certificate chain sent by the server is trusted.
+    *
+    * @param chain The certificate chain to check.
+    * @param authType The authentication type.
+    * @throws CertificateException If the server's certificates are not trusted.
+    */
+   void checkServerTrusted(X509Certificate[] chain, String authType)
+     throws CertificateException;
+ 
+   /**
+    * Returns the list of trusted issuer certificates currently in use.
+    *
+    * @return The list of trusted issuer certificates.
+    */
+   X509Certificate[] getAcceptedIssuers();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/AttributeException.java gcc-4.0.0/libjava/javax/print/AttributeException.java
*** gcc-3.4.3/libjava/javax/print/AttributeException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/AttributeException.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,63 ----
+ /* CancelablePrintJob.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import javax.print.attribute.Attribute;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface AttributeException
+ {
+   /**
+    * Returns the unsupported printing attribute classes for a print service
+    * that does not support them.
+    * 
+    * @return array of unsupported attribute classes, or null
+    */
+   Class[] getUnsupportedAttributes();
+   
+   /**
+    * Returns the unsupported values of printing attributes for a print service
+    * that does not support them.
+    *   
+    * @return array of unsupperted attribute values, or null
+    */
+   Attribute[] getUnsupportedValues();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/CancelablePrintJob.java gcc-4.0.0/libjava/javax/print/CancelablePrintJob.java
*** gcc-3.4.3/libjava/javax/print/CancelablePrintJob.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/CancelablePrintJob.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,52 ----
+ /* CancelablePrintJob.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface CancelablePrintJob extends DocPrintJob
+ {
+   /**
+    * Cancel print job.
+    *
+    * @exception PrintException if an error occured
+    */
+   void cancel() throws PrintException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/Doc.java gcc-4.0.0/libjava/javax/print/Doc.java
*** gcc-3.4.3/libjava/javax/print/Doc.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/Doc.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,95 ----
+ /* Doc.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.Reader;
+ 
+ import javax.print.attribute.DocAttributeSet;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface Doc
+ {
+   /**
+    * Returns a set of attributes applying to this document.
+    * 
+    * @return the attributes
+    */
+   DocAttributeSet getAttributes();
+ 
+   /**
+    * Returns the flavor in which this document will provide its print data.
+    *  
+    * @return the document flavor for printing
+    */
+   DocFlavor getDocFlavor();
+ 
+   /**
+    * Returns the print data of this document represented in a format that supports
+    * the document flavor.
+    * 
+    * @return the print data
+    * 
+    * @throws IOException if an error occurs
+    */
+   Object getPrintData() throws IOException;
+ 
+   /**
+    * Returns a <code>Reader</code> object for extracting character print data
+    * from this document.
+    * 
+    * @return the <code>Reader</code> object
+    * 
+    * @throws IOException if an error occurs
+    */
+   Reader getReaderForText() throws IOException;
+ 
+   /**
+    * Returns an <code>InputStream</code> object for extracting byte print data
+    * from this document.
+    * 
+    * @return the <code>InputStream</code> object
+    * 
+    * @throws IOException if an error occurs
+    */
+   InputStream getStreamForBytes() throws IOException;
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/print/DocFlavor.java gcc-4.0.0/libjava/javax/print/DocFlavor.java
*** gcc-3.4.3/libjava/javax/print/DocFlavor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/DocFlavor.java	Thu Nov 18 15:26:44 2004
***************
*** 0 ****
--- 1,322 ----
+ /* DocFlavor.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import java.io.Serializable;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class DocFlavor implements Cloneable, Serializable
+ {
+   /**
+    * @author Michael Koch (konqueror@gmx.de)
+    */
+   public static class BYTE_ARRAY
+     extends DocFlavor
+   {
+     public static final BYTE_ARRAY AUTOSENSE = new BYTE_ARRAY("application/octet-stream");
+     public static final BYTE_ARRAY GIF = new BYTE_ARRAY("image/gif");
+     public static final BYTE_ARRAY JPEG = new BYTE_ARRAY("image/jpeg");
+     public static final BYTE_ARRAY PCL = new BYTE_ARRAY("application/vnd.hp-PCL");
+     public static final BYTE_ARRAY PDF = new BYTE_ARRAY("application/pdf");
+     public static final BYTE_ARRAY PNG = new BYTE_ARRAY("image/png");
+     public static final BYTE_ARRAY POSTSCRIPT = new BYTE_ARRAY("application/postscript");
+     public static final BYTE_ARRAY TEXT_HTML_HOST = new BYTE_ARRAY("text/html");
+     public static final BYTE_ARRAY TEXT_HTML_US_ASCII = new BYTE_ARRAY("text/html; charset=us-ascii");
+     public static final BYTE_ARRAY TEXT_HTML_UTF_16 = new BYTE_ARRAY("text/html; charset=utf-16");
+     public static final BYTE_ARRAY TEXT_HTML_UTF_16BE = new BYTE_ARRAY("text/html; charset=utf-16be");
+     public static final BYTE_ARRAY TEXT_HTML_UTF_16LE = new BYTE_ARRAY("text/html; charset=utf-16le");
+     public static final BYTE_ARRAY TEXT_HTML_UTF_8 = new BYTE_ARRAY("text/html; charset=utf-8");
+     public static final BYTE_ARRAY TEXT_PLAIN_HOST = new BYTE_ARRAY("text/plain");
+     public static final BYTE_ARRAY TEXT_PLAIN_US_ASCII = new BYTE_ARRAY("text/plain; charset=us-ascii");
+     public static final BYTE_ARRAY TEXT_PLAIN_UTF_16 = new BYTE_ARRAY("text/plain; charset=utf-16");
+     public static final BYTE_ARRAY TEXT_PLAIN_UTF_16BE = new BYTE_ARRAY("text/plain; charset=utf-16be");
+     public static final BYTE_ARRAY TEXT_PLAIN_UTF_16LE = new BYTE_ARRAY("text/plain; charset=utf-16le");
+     public static final BYTE_ARRAY TEXT_PLAIN_UTF_8 = new BYTE_ARRAY("text/plain; charset=utf-8");
+     
+     public BYTE_ARRAY(String mimeType)
+     {
+       super(mimeType, "[B");
+     }
+   }
+   
+   /**
+    * @author Michael Koch (konqueror@gmx.de)
+    */
+   public static class CHAR_ARRAY
+     extends DocFlavor
+   {
+     private static final long serialVersionUID = -8720590903724405128L;
+     
+     public static final DocFlavor.CHAR_ARRAY TEXT_HTML = new CHAR_ARRAY("text/html; charset=utf-16");
+     public static final DocFlavor.CHAR_ARRAY TEXT_PLAIN = new CHAR_ARRAY("text/plain; charset=utf-16");
+ 
+     public CHAR_ARRAY(String mimeType)
+     {
+       super(mimeType, "[C");
+     }
+   }
+   
+   /**
+    * @author Michael Koch (konqueror@gmx.de)
+    */
+   public static class INPUT_STREAM
+     extends DocFlavor
+   {
+     public static final INPUT_STREAM AUTOSENSE = new INPUT_STREAM("application/octet-stream");
+     public static final INPUT_STREAM GIF = new INPUT_STREAM("image/gif");
+     public static final INPUT_STREAM JPEG = new INPUT_STREAM("image/jpeg");
+     public static final INPUT_STREAM PCL = new INPUT_STREAM("application/vnd.hp-PCL");
+     public static final INPUT_STREAM PDF = new INPUT_STREAM("application/pdf");
+     public static final INPUT_STREAM PNG = new INPUT_STREAM("image/png");
+     public static final INPUT_STREAM POSTSCRIPT = new INPUT_STREAM("application/postscript");
+     public static final INPUT_STREAM TEXT_HTML_HOST = new INPUT_STREAM("text/html");
+     public static final INPUT_STREAM TEXT_HTML_US_ASCII = new INPUT_STREAM("text/html; charset=us-ascii");
+     public static final INPUT_STREAM TEXT_HTML_UTF_16 = new INPUT_STREAM("text/html; charset=utf-16");
+     public static final INPUT_STREAM TEXT_HTML_UTF_16BE = new INPUT_STREAM("text/html; charset=utf-16be");
+     public static final INPUT_STREAM TEXT_HTML_UTF_16LE = new INPUT_STREAM("text/html; charset=utf-16le");
+     public static final INPUT_STREAM TEXT_HTML_UTF_8 = new INPUT_STREAM("text/html; charset=utf-8");
+     public static final INPUT_STREAM TEXT_PLAIN_HOST = new INPUT_STREAM("text/plain");
+     public static final INPUT_STREAM TEXT_PLAIN_US_ASCII = new INPUT_STREAM("text/plain; charset=us-ascii");
+     public static final INPUT_STREAM TEXT_PLAIN_UTF_16 = new INPUT_STREAM("text/plain; charset=utf-16");
+     public static final INPUT_STREAM TEXT_PLAIN_UTF_16BE = new INPUT_STREAM("text/plain; charset=utf-16be");
+     public static final INPUT_STREAM TEXT_PLAIN_UTF_16LE = new INPUT_STREAM("text/plain; charset=utf-16le");
+     public static final INPUT_STREAM TEXT_PLAIN_UTF_8 = new INPUT_STREAM("text/plain; charset=utf-8");
+     
+     public INPUT_STREAM(String mimeType)
+     {
+       super(mimeType, "java.io.InputStream");
+     }
+   }
+   
+   /**
+    * @author Michael Koch (konqueror@gmx.de)
+    */
+   public static class READER
+     extends DocFlavor
+   {
+     private static final long serialVersionUID = 7100295812579351567L;
+ 
+     public static final DocFlavor.READER TEXT_HTML = new READER("text/html; charset=utf-16");
+     public static final DocFlavor.READER TEXT_PLAIN = new READER("text/plain; charset=utf-16");
+     
+     public READER(String mimeType)
+     {
+       super(mimeType, "java.io.Reader");
+     }
+   }
+   
+   /**
+    * @author Michael Koch (konqueror@gmx.de)
+    */
+   public static class SERVICE_FORMATTED
+     extends DocFlavor
+   {
+     private static final long serialVersionUID = 6181337766266637256L;
+ 
+     public static final DocFlavor.SERVICE_FORMATTED PAGEABLE = new SERVICE_FORMATTED("java.awt.print.Pageable");
+     public static final DocFlavor.SERVICE_FORMATTED PRINTABLE = new SERVICE_FORMATTED("java.awt.print.Printable");
+     public static final DocFlavor.SERVICE_FORMATTED RENDERABLE_IMAGE = new SERVICE_FORMATTED("java.awt.image.renderable.RenderableImage");
+     
+     public SERVICE_FORMATTED(String className)
+     {
+       super("application/x-java-jvm-local-objectref", className);
+     }
+   }
+   
+   /**
+    * @author Michael Koch (konqueror@gmx.de)
+    */
+   public static class STRING
+     extends DocFlavor
+   {
+     private static final long serialVersionUID = 4414407504887034035L;
+ 
+     public static final DocFlavor.STRING TEXT_HTML = new STRING("text/html; charset=utf-16");
+     public static final DocFlavor.STRING TEXT_PLAIN = new STRING("text/plain; charset=utf-16");
+     
+     public STRING(String mimeType)
+     {
+       super(mimeType, "java.lang.String");
+     }
+   }
+   
+   /**
+    * @author Michael Koch (konqueror@gmx.de)
+    */
+   public static class URL
+     extends DocFlavor
+   {
+     private static final long serialVersionUID = 2936725788144902062L;
+ 
+     public static final DocFlavor.URL AUTOSENSE = new URL("application/octet-stream");
+     public static final DocFlavor.URL GIF = new URL("image/gif");
+     public static final DocFlavor.URL JPEG = new URL("image/jpeg");
+     public static final DocFlavor.URL PCL = new URL("application/vnd.hp-PCL");
+     public static final DocFlavor.URL PDF = new URL("application/pdf");
+     public static final DocFlavor.URL PNG = new URL("image/png");
+     public static final DocFlavor.URL POSTSCRIPT = new URL("application/postscript");
+     public static final DocFlavor.URL TEXT_HTML_HOST = new URL("text/html");
+     public static final DocFlavor.URL TEXT_HTML_US_ASCII = new URL("text/html; charset=us-ascii");
+     public static final DocFlavor.URL TEXT_HTML_UTF_16 = new URL("text/html; charset=utf-16");
+     public static final DocFlavor.URL TEXT_HTML_UTF_16BE = new URL("text/html; charset=utf-16be");
+     public static final DocFlavor.URL TEXT_HTML_UTF_16LE = new URL("text/html; charset=utf-16le");
+     public static final DocFlavor.URL TEXT_HTML_UTF_8 = new URL("text/html; charset=utf-8");
+     public static final DocFlavor.URL TEXT_PLAIN_HOST = new URL("text/plain");
+     public static final DocFlavor.URL TEXT_PLAIN_US_ASCII = new URL("text/plain; charset=us-ascii");
+     public static final DocFlavor.URL TEXT_PLAIN_UTF_16 = new URL("text/plain; charset=utf-16");
+     public static final DocFlavor.URL TEXT_PLAIN_UTF_16BE = new URL("text/plain; charset=utf-16be");
+     public static final DocFlavor.URL TEXT_PLAIN_UTF_16LE = new URL("text/plain; charset=utf-16le");
+     public static final DocFlavor.URL TEXT_PLAIN_UTF_8 = new URL("text/plain; charset=utf-8");
+     
+     public URL(String mimeType)
+     {
+       super(mimeType, "java.net.URL");
+     }
+   }
+   
+   private static final long serialVersionUID = -4512080796965449721L;
+   
+   // FIXME: Get the host encoding from somewhere. Note that the new String is to make
+   // sure the field won't be a compile time constant.
+   public static final String hostEncoding = new String("US-ASCII");
+ 
+   private String mediaSubtype;
+   private String mediaType;
+   private String className;
+   private HashMap params = new HashMap();
+   
+   public DocFlavor(String mimeType, String className)
+   {
+     if (mimeType == null || className == null)
+       throw new NullPointerException();
+ 
+     parseMimeType(mimeType);
+     this.className = className;
+   }
+ 
+   private void parseMimeType(String mimeType)
+   {
+     // FIXME: This method is know to be not completely correct, but it works for now.
+     
+     int pos = mimeType.indexOf(';');
+ 
+     if (pos != -1)
+       {
+ 	String tmp = mimeType.substring(pos + 2);
+ 	mimeType = mimeType.substring(0, pos);
+ 	pos = tmp.indexOf('=');
+ 	params.put(tmp.substring(0, pos), tmp.substring(pos + 1));
+       }
+ 
+     pos = mimeType.indexOf('/');
+ 
+     if (pos == -1)
+       throw new IllegalArgumentException();
+ 
+     mediaType = mimeType.substring(0, pos);
+     mediaSubtype = mimeType.substring(pos + 1);
+   }
+   
+   public boolean equals(Object obj)
+   {
+     if (! (obj instanceof DocFlavor))
+       return false;
+ 
+     DocFlavor tmp = (DocFlavor) obj;
+ 
+     return (getMimeType().equals(tmp.getMimeType())
+ 	    && getRepresentationClassName().equals(tmp.getRepresentationClassName()));
+   }
+ 
+   public String getMediaSubtype()
+   {
+     return mediaSubtype;
+   }
+ 
+   public String getMediaType()
+   {
+     return mediaType;
+   }
+ 
+   public String getMimeType()
+   {
+     // FIXME: Check if this algorithm is correct.
+     
+     String mimeType = getMediaType() + "/" + getMediaSubtype();
+     Iterator it = params.entrySet().iterator();
+ 
+     while (it.hasNext())
+       {
+ 	Map.Entry entry = (Map.Entry) it.next();
+ 	mimeType += "; " + entry.getKey() + "=\"" + entry.getValue() + "\"";
+       }
+ 
+     return mimeType;
+   }
+ 
+   public String getParameter(String paramName)
+   {
+     if (paramName == null)
+       throw new NullPointerException();
+     
+     return (String) params.get(paramName); 
+   }
+ 
+   public String getRepresentationClassName()
+   {
+     return className;
+   }
+ 
+   public int hashCode()
+   {
+     return ((mediaType.hashCode()
+ 	     * mediaSubtype.hashCode()
+ 	     * className.hashCode()) ^ params.hashCode());
+   }
+ 
+   public String toString()
+   {
+     return getMimeType();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/DocPrintJob.java gcc-4.0.0/libjava/javax/print/DocPrintJob.java
*** gcc-3.4.3/libjava/javax/print/DocPrintJob.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/DocPrintJob.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,104 ----
+ /* DocPrintJob.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import javax.print.attribute.PrintJobAttributeSet;
+ import javax.print.attribute.PrintRequestAttributeSet;
+ import javax.print.event.PrintJobAttributeListener;
+ import javax.print.event.PrintJobListener;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface DocPrintJob
+ {
+   /**
+    * Registers a listener for changes in the specified attributes.
+    * 
+    * @param listener the listener to add
+    * @param attributes the attributes to observe
+    */
+   void addPrintJobAttributeListener(PrintJobAttributeListener listener,
+ 				    PrintJobAttributeSet attributes);
+ 
+   /**
+    * Registers a listener for events occuring during this print job.
+    * 
+    * @param listener the listener to add
+    */
+   void addPrintJobListener(PrintJobListener listener);
+ 
+   /**
+    * Returns the print job's attributes.
+    * 
+    * @return the attributes of this print job
+    */
+   PrintJobAttributeSet getAttributes();
+ 
+   /**
+    * Returns the <code>PrintService</code> object this print job is bound to.
+    * 
+    * @return the print service
+    */
+   PrintService getPrintService();
+ 
+   /**
+    * Prints a document with the specified print job attributes.
+    * 
+    * @param doc the document to print
+    * @param attributes the attributes to use
+    * 
+    * @throws PrintException if an error occurs
+    */
+   void print(Doc doc, PrintRequestAttributeSet attributes) throws PrintException;
+ 
+   /**
+    * De-registers an attribute listener.
+    * 
+    * @param listener the listener to remove
+    */
+   void removePrintJobAttributeListener(PrintJobAttributeListener listener);
+ 
+   /**
+    * De-registers a print job listener.
+    * 
+    * @param listener the listener to remove
+    */
+   void removePrintJobListener(PrintJobListener listener);
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/print/FlavorException.java gcc-4.0.0/libjava/javax/print/FlavorException.java
*** gcc-3.4.3/libjava/javax/print/FlavorException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/FlavorException.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,52 ----
+ /* FlavorException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface FlavorException
+ {
+   /**
+    * Returns the unsupported document flavors.
+    * 
+    * @return the unsupported document flavors
+    */
+   DocFlavor[] getUnsupportedFlavors();
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/print/MultiDoc.java gcc-4.0.0/libjava/javax/print/MultiDoc.java
*** gcc-3.4.3/libjava/javax/print/MultiDoc.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/MultiDoc.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,66 ----
+ /* MultiDoc.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import java.io.IOException;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface MultiDoc
+ {
+   /**
+    * Returns the current document.
+    * 
+    * @return the current document
+    * 
+    * @throws IOException if an error occurs
+    */
+   Doc getDoc() throws IOException;
+ 
+   /**
+    * Returns the next <code>MultiDoc</code> object.
+    * 
+    * @return the next <code>MultiDoc</code> object
+    * 
+    * @throws IOException if an error occurs
+    */
+   MultiDoc next() throws IOException;
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/print/MultiDocPrintJob.java gcc-4.0.0/libjava/javax/print/MultiDocPrintJob.java
*** gcc-3.4.3/libjava/javax/print/MultiDocPrintJob.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/MultiDocPrintJob.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,60 ----
+ /* MultiDocPrintJob.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import javax.print.attribute.PrintRequestAttributeSet;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface MultiDocPrintJob extends DocPrintJob
+ {
+   /**
+    * Request a print of a <code>MultiDoc</code> object.
+    * 
+    * @param multiDoc the document to print
+    * @param attributes the printing attributes to apply
+    * 
+    * @throws PrintExeption if an error occurs
+    */
+   void print(MultiDoc multiDoc, PrintRequestAttributeSet attributes)
+     throws PrintException;
+ }
+  
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/print/MultiDocPrintService.java gcc-4.0.0/libjava/javax/print/MultiDocPrintService.java
*** gcc-3.4.3/libjava/javax/print/MultiDocPrintService.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/MultiDocPrintService.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,53 ----
+ /* MultiDocPrintService.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface MultiDocPrintService extends PrintService
+ {
+   /**
+    * Create a job that can print a <code>MultiDoc</code> object.
+    * 
+    * @return the new print job
+    */
+   MultiDocPrintJob createMultiDocPrintJob();
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/print/PrintException.java gcc-4.0.0/libjava/javax/print/PrintException.java
*** gcc-3.4.3/libjava/javax/print/PrintException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/PrintException.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,84 ----
+ /* PrintException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class PrintException extends Exception
+ {
+   /**
+    * Construct a print exception.
+    */
+   public PrintException()
+   {
+     super();
+   }
+ 
+   /**
+    * Construct a print exception.
+    * 
+    * @param e chained exception
+    */
+   public PrintException(Exception e)
+   {
+     super(e);
+   }
+ 
+   /**
+    * Construct a print exception.
+    * 
+    * @param s detailed message, or null for no message
+    */
+   public PrintException(String s)
+   {
+     super(s);
+   }
+ 
+   /**
+    * Construct a print exception.
+    * 
+    * @param s detailed message, or null for no message
+    * @param e chained exception
+    */
+   public PrintException(String s, Exception e)
+   {
+     super(s, e);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/print/PrintService.java gcc-4.0.0/libjava/javax/print/PrintService.java
*** gcc-3.4.3/libjava/javax/print/PrintService.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/PrintService.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,226 ----
+ /* PrintService.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import javax.print.attribute.Attribute;
+ import javax.print.attribute.AttributeSet;
+ import javax.print.attribute.PrintServiceAttribute;
+ import javax.print.attribute.PrintServiceAttributeSet;
+ import javax.print.event.PrintServiceAttributeListener;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface PrintService
+ {
+   /**
+    * Returns a new print job capable to handle all supported document flavors.
+    * 
+    * @return the new print job
+    */
+   DocPrintJob createPrintJob();
+   
+   /**
+    * Determines if two services refer to the same underlying service.
+    * 
+    * @param obj the service to check against
+    * 
+    * @return <code>true</code> if both services refer to the sam underlying
+    * service, <code>false</code> otherwise
+    */
+   boolean equals(Object obj);
+   
+   /**
+    * Returns the value of a single specified attribute.
+    * 
+    * @param category the category of a <code>PrintServiceAttribute</code>
+    * 
+    * @return the value of the attribute
+    * 
+    * @throws NullPointerException if category is null
+    * @throws IllegalArgumentException if category is not a class that
+    * implements <code>PrintServiceAttribute</code>
+    */
+   PrintServiceAttribute getAttribute(Class category);
+   
+   /**
+    * Returns all attributes of this printer service
+    * 
+    * @return all attributes of this print service
+    */
+   PrintServiceAttributeSet getAttributes();
+ 
+   /**
+    * Returns the service's default value for a given attribute.
+    * 
+    * @param category the category of the attribute
+    * 
+    * @return the default value
+    * 
+    * @throws NullPointerException if <code>category</code> is null
+    * @throws IllegalArgumentException if <code>category</code> is a class
+    * not implementing <code>Attribute</code> 
+    */
+   Object getDefaultAttributeValue(Class category);
+   
+   /**
+    * Returns the name of this print service.
+    * 
+    * @return the name
+    */
+   String getName();
+   
+   /**
+    * Returns a factory for UI components.
+    * 
+    * @return the factory
+    */
+   ServiceUIFactory getServiceUIFactory();
+   
+   /**
+    * Returns all supported attribute categories.
+    * 
+    * @return an array of all supported attribute categories
+    */
+   Class[] getSupportedAttributeCategories();
+   
+   /**
+    * Returns all supported attribute values a client can use when setting up
+    * a print job with this service.
+    * 
+    * @param category the attribute category to test
+    * @param flavor the document flavor to use, or null
+    * @param attributes set of printing attributes for a supposed job, or null
+    * 
+    * @return object indicating supported values for <code>category</code>,
+    * or null if this print service doesnt support specifying doc-level or
+    * job-level attribute in a print request.
+    * 
+    * @throws NullPointerException if <code>category</code> is null
+    * @throws IllegalArgumentException if <code>category</code> is a class not
+    * implementing <code>Attribute</code>, or if <code>flavor</code> is not
+    * supported
+    */
+   Object getSupportedAttributeValues(Class category, DocFlavor flavor, AttributeSet attributes);
+   
+   /**
+    * Returns an array of all supproted document flavors.
+    * 
+    * @return the supported document flavors
+    */
+   DocFlavor[] getSupportedDocFlavors();
+   
+   /**
+    * Returns all attributes that are unsupported for a print request in the
+    * context of a particular document flavor.
+    * 
+    * @param flavor document flavor to test, or null
+    * @param attributes set of printing attributes for a supposed job
+    * 
+    * @return null if this <code>PrintService</code> supports the print request
+    * specification, else the unsupported attributes
+    * 
+    * @throws IllegalArgumentException if <code>flavor</code> is unsupported
+    */
+   AttributeSet getUnsupportedAttributes(DocFlavor flavor, AttributeSet attributes);
+   
+   /**
+    * Returns a hashcode for this printer service.
+    * 
+    * @return the hashcode
+    */
+   int hashCode();
+   
+   /**
+    * Determines a given attribute category is supported or not.
+    * 
+    * @param category the category to check
+    * 
+    * @return <code>true</code> if <code>category</code> is supported,
+    * <code>false</code> otherwise
+    * 
+    * @throws NullPointerException if <code>category</code> is null
+    * @throws IllegalArgumentException if <code>category</code> is a class not
+    * implementing <code>Attribute</code>.
+    */
+   boolean isAttributeCategorySupported(Class category);
+   
+   /**
+    * Determines a given attribute value is supported when creating a print job
+    * for this print service.
+    * 
+    * @param attrval the attribute value to check
+    * @param flavor the document flavor to use, or null
+    * @param attributes set of printing attributes to use, or null
+    * 
+    * @return <code>true</code> if the attribute value is supported,
+    * <code>false</code> otherwise
+    * 
+    * @throws NullPointerException if <code>attrval</code> is null
+    * @throws IllegalArgumentException if <code>flavor</code> is not supported
+    * by this print service
+    */
+   boolean isAttributeValueSupported(Attribute attrval, DocFlavor flavor, AttributeSet attributes);
+   
+   /**
+    * Determines a given document flavor is supported or not.
+    * 
+    * @param flavor the document flavor to check
+    * 
+    * @return <code>true</code> if <code>flavor</code> is supported,
+    * <code>false</code> otherwise
+    * 
+    * @throws NullPointerException if <code>flavor</code> is null
+    */
+   boolean isDocFlavorSupported(DocFlavor flavor);
+   
+   /**
+    * Registers a print service attribute listener to this print service.
+    * 
+    * @param listener the listener to add
+    */
+   void addPrintServiceAttributeListener(PrintServiceAttributeListener listener);
+   
+   /**
+    * De-registers a print service attribute listener from this print service.
+    * 
+    * @param listener the listener to remove
+    */
+   void removePrintServiceAttributeListener(PrintServiceAttributeListener listener);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/PrintServiceLookup.java gcc-4.0.0/libjava/javax/print/PrintServiceLookup.java
*** gcc-3.4.3/libjava/javax/print/PrintServiceLookup.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/PrintServiceLookup.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,76 ----
+ /* PrintServiceLookup.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import javax.print.attribute.AttributeSet;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class PrintServiceLookup
+ {
+   /**
+    * Constructs a <code>PrintServiceLookup</code> object.
+    */
+   public PrintServiceLookup()
+   {
+   	// Do nothing here
+   }
+   
+   /**
+    * Not called direclty by applications.
+    */
+   public abstract PrintService getDefaultPrintService();
+ 
+   /**
+    * Not called direclty by applications.
+    */
+   public abstract MultiDocPrintService[] getMultiDocPrintServices(DocFlavor[] flavors, AttributeSet attributes);
+ 
+   /**
+    * Not called direclty by applications.
+    */
+   public abstract PrintService[] getPrintServices();
+ 
+   /**
+    * Not called direclty by applications.
+    */
+   public abstract PrintService[] getPrintServices(DocFlavor flavor, AttributeSet attributes);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/ServiceUIFactory.java gcc-4.0.0/libjava/javax/print/ServiceUIFactory.java
*** gcc-3.4.3/libjava/javax/print/ServiceUIFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/ServiceUIFactory.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,89 ----
+ /* ServiceUIFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ /**
+  * @author Michael Koch
+  */
+ public abstract class ServiceUIFactory
+ {
+   public static final int ABOUT_UIROLE = 1;
+   public static final int ADMIN_UIROLE = 2;
+   public static final int MAIN_UIROLE = 3;
+   public static final int RESERVED_UIROLE = 99;
+ 
+   public static final String DIALOG_UI = "java.awt.Dialog";
+   public static final String JCOMPONENT_UI = "javax.swing.JComponent";
+   public static final String JDIALOG_UI = "javax.swing.JDialog";
+   public static final String PANEL_UI = "java.awt.Panel";
+ 
+   /**
+    * Constructs a <code>ServiceUIFactory</code> object.
+    */
+   public ServiceUIFactory()
+   {
+   	// Do nothing here.
+   }
+ 
+   /**
+    * Returns an UI object which may be cast to the requested UI type.
+    * 
+    * @param role the role requested. Must be one of the standard roles
+    * or a private role supported by this factory
+    * @param ui type in which the role is requested
+    * 
+    * @return the UI role or null of this role is not supported by this factory
+    * 
+    * @throws IllegalArgumentException if <code>role</code> is neither one of
+    * the standard ones nor a private one supported by this factory
+    */
+   public abstract Object getUI(int role, String ui);
+ 
+   /**
+    * Returns the UI types supported by this factory for an UI role.
+    * 
+    * @param role the role to be looked up
+    * 
+    * @return an array of UI types
+    * 
+    * @throws IllegalArgumentException if <code>role</code> is neither one of
+    * the standard ones nor a private one supported by this factory
+    */
+   public abstract String[] getUIClassNamesForRole(int role);
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/print/StreamPrintService.java gcc-4.0.0/libjava/javax/print/StreamPrintService.java
*** gcc-3.4.3/libjava/javax/print/StreamPrintService.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/StreamPrintService.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,97 ----
+ /* StreamPrintService.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import java.io.OutputStream;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class StreamPrintService implements PrintService
+ {
+   private boolean disposed;
+   private OutputStream out;
+   
+   /**
+    * Constructs a <code>StreamPrintService</code> object.
+    * 
+    * @param out the <code>OutputStream</code> to use
+    */
+   protected StreamPrintService(OutputStream out)
+   {
+     this.out = out;
+   }
+ 
+   /**
+    * Dispose this <code>StreamPrintService</code> object.
+    */
+   public void dispose()
+   {
+     disposed = true;
+   }
+ 
+   /**
+    * Returns the document format emited by this print service.
+    * 
+    * @return the document format
+    */
+   public abstract String getOutputFormat();
+ 
+   /**
+    * Returns the <code>OutputStream</code> of this object.
+    * 
+    * @return the <code>OutputStream</code>
+    */
+   public OutputStream getOutputStream()
+   {
+     return out;
+   }
+ 
+   /**
+    * Determines if this <code>StreamPrintService</code> object is disposed.
+    * 
+    * @return <code>true</code> if disposed already,
+    * otherwise <code>false</code>
+    */
+   public boolean isDisposed()
+   {
+     return disposed;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/print/URIException.java gcc-4.0.0/libjava/javax/print/URIException.java
*** gcc-3.4.3/libjava/javax/print/URIException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/URIException.java	Sat May 15 20:39:09 2004
***************
*** 0 ****
--- 1,65 ----
+ /* URIException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print;
+ 
+ import java.net.URI;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface URIException
+ {
+   int URIInaccessible = 1;
+   int URIOtherProblem = -1;
+   int URISchemeNotSupported = 2;
+   
+   /**
+    * Returns the reason for this exception.
+    * 
+    * @return the reason
+    */
+   int getReason();
+   
+   /**
+    * Returns the unsupported <code>URI</code> for this exception.
+    * 
+    * @return the unsupported <code>URI</code>.
+    */
+   URI getUnsupportedURI();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/AttributeSetUtilities.java gcc-4.0.0/libjava/javax/print/attribute/AttributeSetUtilities.java
*** gcc-3.4.3/libjava/javax/print/attribute/AttributeSetUtilities.java	Tue Dec 23 10:21:31 2003
--- gcc-4.0.0/libjava/javax/print/attribute/AttributeSetUtilities.java	Thu Nov 18 15:26:44 2004
***************
*** 1,5 ****
  /* AttributeSetUtilities.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AttributeSetUtilities.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 41,46 ****
--- 41,51 ----
  
  public final class AttributeSetUtilities
  {
+   /**
+    * This class isn't intended to be instantiated.
+    */
+   private AttributeSetUtilities() {}
+ 
    private static class UnmodifiableAttributeSet
      implements AttributeSet, Serializable
    {
*************** public final class AttributeSetUtilities
*** 120,126 ****
      }
    }
  
!   public static class UnmodifiableDocAttributeSet
      extends UnmodifiableAttributeSet
      implements DocAttributeSet, Serializable
    {
--- 125,131 ----
      }
    }
  
!   private static class UnmodifiableDocAttributeSet
      extends UnmodifiableAttributeSet
      implements DocAttributeSet, Serializable
    {
*************** public final class AttributeSetUtilities
*** 130,136 ****
      }
    }
  
!   public static class UnmodifiablePrintJobAttributeSet
      extends UnmodifiableAttributeSet
      implements PrintJobAttributeSet, Serializable
    {
--- 135,141 ----
      }
    }
  
!   private static class UnmodifiablePrintJobAttributeSet
      extends UnmodifiableAttributeSet
      implements PrintJobAttributeSet, Serializable
    {
*************** public final class AttributeSetUtilities
*** 140,146 ****
      }
    }
  
!   public static class UnmodifiablePrintRequestAttributeSet
      extends UnmodifiableAttributeSet
      implements PrintRequestAttributeSet, Serializable
    {
--- 145,151 ----
      }
    }
  
!   private static class UnmodifiablePrintRequestAttributeSet
      extends UnmodifiableAttributeSet
      implements PrintRequestAttributeSet, Serializable
    {
*************** public final class AttributeSetUtilities
*** 150,156 ****
      }
    }
  
!   public static class UnmodifiablePrintServiceAttributeSet
      extends UnmodifiableAttributeSet
      implements PrintServiceAttributeSet, Serializable
    {
--- 155,161 ----
      }
    }
  
!   private static class UnmodifiablePrintServiceAttributeSet
      extends UnmodifiableAttributeSet
      implements PrintServiceAttributeSet, Serializable
    {
*************** public final class AttributeSetUtilities
*** 160,166 ****
      }
    }
  
!   public static class SynchronizedAttributeSet
      implements AttributeSet, Serializable
    {
      private AttributeSet set;
--- 165,171 ----
      }
    }
  
!   private static class SynchronizedAttributeSet
      implements AttributeSet, Serializable
    {
      private AttributeSet set;
*************** public final class AttributeSetUtilities
*** 239,245 ****
      }
    }
  
!   public static class SynchronizedDocAttributeSet
      extends SynchronizedAttributeSet
      implements DocAttributeSet, Serializable
    {
--- 244,250 ----
      }
    }
  
!   private static class SynchronizedDocAttributeSet
      extends SynchronizedAttributeSet
      implements DocAttributeSet, Serializable
    {
*************** public final class AttributeSetUtilities
*** 249,255 ****
      }
    }
  
!   public static class SynchronizedPrintJobAttributeSet
      extends SynchronizedAttributeSet
      implements PrintJobAttributeSet, Serializable
    {
--- 254,260 ----
      }
    }
  
!   private static class SynchronizedPrintJobAttributeSet
      extends SynchronizedAttributeSet
      implements PrintJobAttributeSet, Serializable
    {
*************** public final class AttributeSetUtilities
*** 259,265 ****
      }
    }
  
!   public static class SynchronizedPrintRequestAttributeSet
      extends SynchronizedAttributeSet
      implements PrintRequestAttributeSet, Serializable
    {
--- 264,270 ----
      }
    }
  
!   private static class SynchronizedPrintRequestAttributeSet
      extends SynchronizedAttributeSet
      implements PrintRequestAttributeSet, Serializable
    {
*************** public final class AttributeSetUtilities
*** 269,275 ****
      }
    }
  
!   public static class SynchronizedPrintServiceAttributeSet
      extends SynchronizedAttributeSet
      implements PrintServiceAttributeSet, Serializable
    {
--- 274,280 ----
      }
    }
  
!   private static class SynchronizedPrintServiceAttributeSet
      extends SynchronizedAttributeSet
      implements PrintServiceAttributeSet, Serializable
    {
*************** public final class AttributeSetUtilities
*** 427,433 ****
     * Verifies that the category of attribute is equals to category.
     *
     * @param category the category the atteribute should be
!    * @param attribtue the attribute to verify
     *
     * @exception IllegalArgumentException if the categories are not equal
     * @exception NullPointerException if category is null
--- 432,438 ----
     * Verifies that the category of attribute is equals to category.
     *
     * @param category the category the atteribute should be
!    * @param attribute the attribute to verify
     *
     * @exception IllegalArgumentException if the categories are not equal
     * @exception NullPointerException if category is null
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/EnumSyntax.java gcc-4.0.0/libjava/javax/print/attribute/EnumSyntax.java
*** gcc-3.4.3/libjava/javax/print/attribute/EnumSyntax.java	Sat Jan 10 22:16:01 2004
--- gcc-4.0.0/libjava/javax/print/attribute/EnumSyntax.java	Tue Apr 20 10:48:56 2004
*************** public abstract class EnumSyntax impleme
*** 139,145 ****
      return null;
    }
  
!   public int getOffset()
    {
      return 0;
    }
--- 139,145 ----
      return null;
    }
  
!   protected int getOffset()
    {
      return 0;
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/HashAttributeSet.java gcc-4.0.0/libjava/javax/print/attribute/HashAttributeSet.java
*** gcc-3.4.3/libjava/javax/print/attribute/HashAttributeSet.java	Tue Dec 23 10:21:31 2003
--- gcc-4.0.0/libjava/javax/print/attribute/HashAttributeSet.java	Sat May 15 20:39:09 2004
***************
*** 1,5 ****
  /* HashAttributeSet.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* HashAttributeSet.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public class HashAttributeSet implements
*** 151,157 ****
     * @exception ClassCastException if any element of attributes is not an
     * interface of interfaceName
     */
!   public HashAttributeSet(AttributeSet attributes, Class interfaceName)
    {
      this(interfaceName);
      
--- 151,157 ----
     * @exception ClassCastException if any element of attributes is not an
     * interface of interfaceName
     */
!   protected HashAttributeSet(AttributeSet attributes, Class interfaceName)
    {
      this(interfaceName);
      
*************** public class HashAttributeSet implements
*** 232,238 ****
     *
     * @param category the category to test for
     *
!    * @result true if the category exists in this attribute set, false otherwise.
     */
    public boolean containsKey(Class category)
    {
--- 232,238 ----
     *
     * @param category the category to test for
     *
!    * @return true if the category exists in this attribute set, false otherwise.
     */
    public boolean containsKey(Class category)
    {
*************** public class HashAttributeSet implements
*** 244,250 ****
     *
     * @param attribute the attribute to test for
     *
!    * @result true if the attribute exists in this attribute set,
     * false otherwise.
     */
    public boolean containsValue(Attribute attribute)
--- 244,250 ----
     *
     * @param attribute the attribute to test for
     *
!    * @return true if the attribute exists in this attribute set,
     * false otherwise.
     */
    public boolean containsValue(Attribute attribute)
*************** public class HashAttributeSet implements
*** 257,263 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 257,263 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/IntegerSyntax.java gcc-4.0.0/libjava/javax/print/attribute/IntegerSyntax.java
*** gcc-3.4.3/libjava/javax/print/attribute/IntegerSyntax.java	Sun Dec 21 11:10:54 2003
--- gcc-4.0.0/libjava/javax/print/attribute/IntegerSyntax.java	Sat May 15 20:39:09 2004
***************
*** 1,5 ****
  /* IntegerSyntax.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* IntegerSyntax.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class IntegerSyntax impl
*** 90,96 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 90,96 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/ResolutionSyntax.java gcc-4.0.0/libjava/javax/print/attribute/ResolutionSyntax.java
*** gcc-3.4.3/libjava/javax/print/attribute/ResolutionSyntax.java	Sat Dec 27 14:21:07 2003
--- gcc-4.0.0/libjava/javax/print/attribute/ResolutionSyntax.java	Sat May 15 20:39:09 2004
***************
*** 1,5 ****
  /* ResolutionSyntax.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ResolutionSyntax.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class ResolutionSyntax
*** 86,92 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 86,92 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public abstract class ResolutionSyntax
*** 104,117 ****
     *
     * @return the resolution
     *
!    * @exception IllegalArgumenException if units < 1
     */
    public int getCrossFeedResolution(int units)
    {
      if (units < 1)
        throw new IllegalArgumentException("units may not be less then 1");
  
-     int rount = units / 2;
      return (crossFeedResolution + units) / units;
    }
  
--- 104,116 ----
     *
     * @return the resolution
     *
!    * @exception IllegalArgumentException if units < 1
     */
    public int getCrossFeedResolution(int units)
    {
      if (units < 1)
        throw new IllegalArgumentException("units may not be less then 1");
  
      return (crossFeedResolution + units) / units;
    }
  
*************** public abstract class ResolutionSyntax
*** 130,143 ****
     *
     * @return the resolution
     *
!    * @exception IllegalArgumenException if units < 1
     */
    public int getFeedResolution(int units)
    {
      if (units < 1)
        throw new IllegalArgumentException("units may not be less then 1");
  
-     int rount = units / 2;
      return (crossFeedResolution + units) / units;
    }
  
--- 129,141 ----
     *
     * @return the resolution
     *
!    * @exception IllegalArgumentException if units < 1
     */
    public int getFeedResolution(int units)
    {
      if (units < 1)
        throw new IllegalArgumentException("units may not be less then 1");
  
      return (crossFeedResolution + units) / units;
    }
  
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/SetOfIntegerSyntax.java gcc-4.0.0/libjava/javax/print/attribute/SetOfIntegerSyntax.java
*** gcc-3.4.3/libjava/javax/print/attribute/SetOfIntegerSyntax.java	Sat Dec 27 14:21:07 2003
--- gcc-4.0.0/libjava/javax/print/attribute/SetOfIntegerSyntax.java	Sat May 15 20:39:09 2004
***************
*** 1,5 ****
  /* SetOfIntegerSyntax.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SetOfIntegerSyntax.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class SetOfIntegerSyntax
*** 148,155 ****
     * @param lowerBound the lower bound value
     * @param upperBound the upper bound value
     *
!    * @exception IllegalArgumentException if lowerBound <= uppbound
!    * and lowerBound < 0
     */
    protected SetOfIntegerSyntax(int lowerBound, int upperBound)
    {
--- 148,155 ----
     * @param lowerBound the lower bound value
     * @param upperBound the upper bound value
     *
!    * @exception IllegalArgumentException if lowerBound &lt;= upperbound
!    * and lowerBound &lt; 0
     */
    protected SetOfIntegerSyntax(int lowerBound, int upperBound)
    {
*************** public abstract class SetOfIntegerSyntax
*** 199,205 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 199,205 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/TextSyntax.java gcc-4.0.0/libjava/javax/print/attribute/TextSyntax.java
*** gcc-3.4.3/libjava/javax/print/attribute/TextSyntax.java	Sun Dec 21 11:10:54 2003
--- gcc-4.0.0/libjava/javax/print/attribute/TextSyntax.java	Sat May 15 20:39:09 2004
***************
*** 1,5 ****
  /* TextSyntax.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TextSyntax.java -- 
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class TextSyntax impleme
*** 57,68 ****
     * @param value the value for this syntax
     * @param locale the locale to use
     *
!    * @exception NullPointerException if value is null
     */
    protected TextSyntax(String value, Locale locale)
    {
!     if (value == null)
!       throw new NullPointerException("value may not be null");
  
      this.value = value;
      this.locale = locale;
--- 57,68 ----
     * @param value the value for this syntax
     * @param locale the locale to use
     *
!    * @exception NullPointerException if value and/or locale is null
     */
    protected TextSyntax(String value, Locale locale)
    {
!     if (value == null || locale == null)
!       throw new NullPointerException("value and/or locale may not be null");
  
      this.value = value;
      this.locale = locale;
*************** public abstract class TextSyntax impleme
*** 95,101 ****
     */
    public int hashCode()
    {
!     return value.hashCode() + locale.hashCode();
    }
  
    /**
--- 95,101 ----
     */
    public int hashCode()
    {
!     return value.hashCode() ^ locale.hashCode();
    }
  
    /**
*************** public abstract class TextSyntax impleme
*** 103,109 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 103,109 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public abstract class TextSyntax impleme
*** 115,118 ****
--- 115,126 ----
      return (value.equals(tmp.getValue())
              && locale.equals(tmp.getLocale()));
    }
+ 
+   /**
+    * Returns a string representing the object.
+    */
+   public String toString()
+   {
+     return getValue();
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/Chromaticity.java gcc-4.0.0/libjava/javax/print/attribute/standard/Chromaticity.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/Chromaticity.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/Chromaticity.java	Thu Feb 17 18:39:43 2005
***************
*** 0 ****
--- 1,86 ----
+ /* Chromaticity.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class Chromaticity extends EnumSyntax
+   implements DocAttribute, PrintRequestAttribute, PrintJobAttribute
+ {
+   private static final long serialVersionUID = 4660543931355214012L;
+ 
+   public static final Chromaticity MONOCHROME = new Chromaticity(0);
+   public static final Chromaticity COLOR = new Chromaticity(1);
+ 
+   /**
+    * Creates a <code>Chromaticity</code> object.
+    *
+    * @param value the enum value
+    */
+   protected Chromaticity(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>Sides</code> itself
+    */
+   public Class getCategory()
+   {
+     return Chromaticity.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "chromaticity";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/ColorSupported.java gcc-4.0.0/libjava/javax/print/attribute/standard/ColorSupported.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/ColorSupported.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/ColorSupported.java	Wed Oct 20 12:03:37 2004
***************
*** 0 ****
--- 1,84 ----
+ /* ColorSupported.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintServiceAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class ColorSupported extends EnumSyntax
+   implements PrintServiceAttribute
+ {
+   private static final long serialVersionUID = -2700555589688535545L;
+ 
+   public static final ColorSupported NOT_SUPPORTED = new ColorSupported(0);
+   public static final ColorSupported SUPPORTED = new ColorSupported(1);
+ 
+   /**
+    * Constructs a <code>ColorSupported</code> object.
+    * 
+    * @param value the value
+    */
+   protected ColorSupported(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>ColorSupported</code> itself
+    */
+   public Class getCategory()
+   {
+     return ColorSupported.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "color-supported";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/Compression.java gcc-4.0.0/libjava/javax/print/attribute/standard/Compression.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/Compression.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/Compression.java	Wed Oct 20 12:03:37 2004
***************
*** 0 ****
--- 1,86 ----
+ /* Compression.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.EnumSyntax;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class Compression extends EnumSyntax
+   implements DocAttribute
+ {
+   private static final long serialVersionUID = -5716748913324997674L;
+ 
+   public static final Compression NONE = new Compression(0);
+   public static final Compression DEFLATE = new Compression(1);
+   public static final Compression GZIP = new Compression(2);
+   public static final Compression COMPRESS = new Compression(3);
+ 
+   /**
+    * Constructs a <code>Compression</code> object.
+    * 
+    * @param value that value
+    */
+   protected Compression(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>Compression</code> itself
+    */
+   public Class getCategory()
+   {
+     return Compression.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "compression";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/Copies.java gcc-4.0.0/libjava/javax/print/attribute/standard/Copies.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/Copies.java	Sat Dec 27 14:21:08 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/Copies.java	Wed Oct 20 12:03:37 2004
*************** public final class Copies extends Intege
*** 69,75 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class Copies extends Intege
*** 84,90 ****
     *
     * @return the class <code>Copies</code> itself
     */
!   public final Class getCategory()
    {
      return Copies.class;
    }
--- 84,90 ----
     *
     * @return the class <code>Copies</code> itself
     */
!   public Class getCategory()
    {
      return Copies.class;
    }
*************** public final class Copies extends Intege
*** 94,100 ****
     *
     * @return the string "copies"
     */
!   public final String getName()
    {
      return "copies";
    }
--- 94,100 ----
     *
     * @return the string "copies"
     */
!   public String getName()
    {
      return "copies";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/CopiesSupported.java gcc-4.0.0/libjava/javax/print/attribute/standard/CopiesSupported.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/CopiesSupported.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/CopiesSupported.java	Wed Oct 20 12:03:37 2004
***************
*** 0 ****
--- 1,87 ----
+ /* CopiesSupported.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.SetOfIntegerSyntax;
+ import javax.print.attribute.SupportedValuesAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class CopiesSupported extends SetOfIntegerSyntax
+   implements SupportedValuesAttribute
+ {
+   private static final long serialVersionUID = 6927711687034846001L;
+ 
+   /**
+    * Constructs a <code>CopiesSupported</code> object.
+    */
+   public CopiesSupported(int member)
+   {
+     super(member);
+   }
+ 
+   /**
+    * Constructs a <code>CopiesSupported</code> object.
+    */
+   public CopiesSupported(int lowerBound, int upperBound)
+   {
+     super(lowerBound, upperBound);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>CopiesSupported</code> itself
+    */
+   public Class getCategory()
+   {
+     return CopiesSupported.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "copies-supported";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/DateTimeAtCompleted.java gcc-4.0.0/libjava/javax/print/attribute/standard/DateTimeAtCompleted.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/DateTimeAtCompleted.java	Tue Jan  6 13:48:52 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/DateTimeAtCompleted.java	Wed Oct 20 12:03:37 2004
***************
*** 1,5 ****
  /* DateTimeAtCompleted.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DateTimeAtCompleted.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Date;
+ 
  import javax.print.attribute.DateTimeSyntax;
  import javax.print.attribute.PrintJobAttribute;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class DateTimeAtCompleted extends DateTimeSyntax
    implements PrintJobAttribute
  {
*************** public final class DateTimeAtCompleted e
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class DateTimeAtCompleted e
*** 78,84 ****
     *
     * @return the class <code>DateTimeAtCompleted</code> itself
     */
!   public final Class getCategory()
    {
      return DateTimeAtCompleted.class;
    }
--- 83,89 ----
     *
     * @return the class <code>DateTimeAtCompleted</code> itself
     */
!   public Class getCategory()
    {
      return DateTimeAtCompleted.class;
    }
*************** public final class DateTimeAtCompleted e
*** 88,94 ****
     *
     * @return the string "date-time-at-completed"
     */
!   public final String getName()
    {
      return "date-time-at-completed";
    }
--- 93,99 ----
     *
     * @return the string "date-time-at-completed"
     */
!   public String getName()
    {
      return "date-time-at-completed";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/DateTimeAtCreation.java gcc-4.0.0/libjava/javax/print/attribute/standard/DateTimeAtCreation.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/DateTimeAtCreation.java	Tue Jan  6 13:48:52 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/DateTimeAtCreation.java	Wed Oct 20 12:03:37 2004
***************
*** 1,5 ****
  /* DateTimeAtCreation.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DateTimeAtCreation.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Date;
+ 
  import javax.print.attribute.DateTimeSyntax;
  import javax.print.attribute.PrintJobAttribute;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class DateTimeAtCreation extends DateTimeSyntax
    implements PrintJobAttribute
  {
*************** public final class DateTimeAtCreation ex
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class DateTimeAtCreation ex
*** 78,84 ****
     *
     * @return the class <code>DateTimeAtCreation</code> itself
     */
!   public final Class getCategory()
    {
      return DateTimeAtCreation.class;
    }
--- 83,89 ----
     *
     * @return the class <code>DateTimeAtCreation</code> itself
     */
!   public Class getCategory()
    {
      return DateTimeAtCreation.class;
    }
*************** public final class DateTimeAtCreation ex
*** 88,94 ****
     *
     * @return the string "date-time-at-creation"
     */
!   public final String getName()
    {
      return "date-time-at-creation";
    }
--- 93,99 ----
     *
     * @return the string "date-time-at-creation"
     */
!   public String getName()
    {
      return "date-time-at-creation";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/DateTimeAtProcessing.java gcc-4.0.0/libjava/javax/print/attribute/standard/DateTimeAtProcessing.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/DateTimeAtProcessing.java	Tue Jan  6 13:48:52 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/DateTimeAtProcessing.java	Wed Oct 20 12:03:37 2004
***************
*** 1,5 ****
  /* DateTimeAtProcessing.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DateTimeAtProcessing.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Date;
+ 
  import javax.print.attribute.DateTimeSyntax;
  import javax.print.attribute.PrintJobAttribute;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class DateTimeAtProcessing extends DateTimeSyntax
    implements PrintJobAttribute
  {
*************** public final class DateTimeAtProcessing 
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class DateTimeAtProcessing 
*** 78,84 ****
     *
     * @return the class <code>DateTimeAtProcessing</code> itself
     */
!   public final Class getCategory()
    {
      return DateTimeAtProcessing.class;
    }
--- 83,89 ----
     *
     * @return the class <code>DateTimeAtProcessing</code> itself
     */
!   public Class getCategory()
    {
      return DateTimeAtProcessing.class;
    }
*************** public final class DateTimeAtProcessing 
*** 88,94 ****
     *
     * @return the string "date-time-at-processing"
     */
!   public final String getName()
    {
      return "date-time-at-processing";
    }
--- 93,99 ----
     *
     * @return the string "date-time-at-processing"
     */
!   public String getName()
    {
      return "date-time-at-processing";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/Destination.java gcc-4.0.0/libjava/javax/print/attribute/standard/Destination.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/Destination.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/Destination.java	Thu Feb 17 18:39:43 2005
***************
*** 0 ****
--- 1,82 ----
+ /* Destination.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import java.net.URI;
+ 
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ import javax.print.attribute.URISyntax;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class Destination extends URISyntax
+   implements PrintJobAttribute, PrintRequestAttribute
+ {
+   private static final long serialVersionUID = 6776739171700415321L;
+ 
+   /**
+    * Constructs a <code>Destination</code> object.
+    */
+   public Destination(URI uri)
+   {
+     super(uri);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>Destination</code> itself
+    */
+   public Class getCategory()
+   {
+     return Destination.class;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "printer-uri"
+    */
+   public String getName()
+   {
+     return "destination";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/DocumentName.java gcc-4.0.0/libjava/javax/print/attribute/standard/DocumentName.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/DocumentName.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/DocumentName.java	Wed Oct 20 12:03:37 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.DocAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class DocumentName extends TextSyntax
    implements DocAttribute
  {
*************** public final class DocumentName extends 
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class DocumentName extends 
*** 78,84 ****
     *
     * @return the class <code>DocumentName</code> itself
     */
!   public final Class getCategory()
    {
      return DocumentName.class;
    }
--- 83,89 ----
     *
     * @return the class <code>DocumentName</code> itself
     */
!   public Class getCategory()
    {
      return DocumentName.class;
    }
*************** public final class DocumentName extends 
*** 88,94 ****
     *
     * @return the string "document-name"
     */
!   public final String getName()
    {
      return "document-name";
    }
--- 93,99 ----
     *
     * @return the string "document-name"
     */
!   public String getName()
    {
      return "document-name";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/Fidelity.java gcc-4.0.0/libjava/javax/print/attribute/standard/Fidelity.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/Fidelity.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/Fidelity.java	Wed Oct 20 12:03:37 2004
***************
*** 0 ****
--- 1,85 ----
+ /* Fidelity.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class Fidelity extends EnumSyntax
+   implements PrintJobAttribute, PrintRequestAttribute
+ {
+   private static final long serialVersionUID = 6320827847329172308L;
+ 
+   public static final Fidelity FIDELITY_TRUE = new Fidelity(0);
+   public static final Fidelity FIDELITY_FALSE = new Fidelity(1);
+ 
+   /**
+    * Constructs a <code>Fidelity</code> object.
+    * 
+    * @param value the value
+    */
+   protected Fidelity(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>Fidelity</code> itself
+    */
+   public Class getCategory()
+   {
+     return Fidelity.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "fidelity";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/Finishings.java gcc-4.0.0/libjava/javax/print/attribute/standard/Finishings.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/Finishings.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/Finishings.java	Wed Oct 20 12:03:37 2004
***************
*** 0 ****
--- 1,102 ----
+ /* Finishings.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class Finishings extends EnumSyntax
+   implements DocAttribute, PrintJobAttribute, PrintRequestAttribute
+ {
+   private static final long serialVersionUID = -627840419548391754L;
+ 
+   public static final Finishings NONE = new Finishings(0);
+   public static final Finishings STAPLE = new Finishings(1);
+   public static final Finishings COVER = new Finishings(2);
+   public static final Finishings BIND = new Finishings(3);
+   public static final Finishings SADDLE_STITCH = new Finishings(4);
+   public static final Finishings EDGE_STITCH = new Finishings(5);
+   public static final Finishings STAPLE_TOP_LEFT = new Finishings(6);
+   public static final Finishings STAPLE_BOTTOM_LEFT = new Finishings(7);
+   public static final Finishings STAPLE_TOP_RIGHT = new Finishings(8);
+   public static final Finishings STAPLE_BOTTOM_RIGHT = new Finishings(9);
+   public static final Finishings EDGE_STITCH_LEFT = new Finishings(10);
+   public static final Finishings EDGE_STITCH_TOP = new Finishings(11);
+   public static final Finishings EDGE_STITCH_RIGHT = new Finishings(12);
+   public static final Finishings EDGE_STITCH_BOTTOM = new Finishings(13);
+   public static final Finishings STAPLE_DUAL_LEFT = new Finishings(14);
+   public static final Finishings STAPLE_DUAL_TOP = new Finishings(15);
+   public static final Finishings STAPLE_DUAL_RIGHT = new Finishings(16);
+   public static final Finishings STAPLE_DUAL_BOTTOM = new Finishings(17);
+ 
+   /**
+    * Constructs a <code>Finishings</code> object.
+    * 
+    * @param value the value
+    */
+   protected Finishings(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>Finishings</code> itself
+    */
+   public Class getCategory()
+   {
+     return Finishings.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "finishings";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobHoldUntil.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobHoldUntil.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobHoldUntil.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobHoldUntil.java	Wed Oct 20 12:03:37 2004
*************** this exception to your version of the li
*** 35,47 ****
--- 35,52 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Date;
+ 
  import javax.print.attribute.DateTimeSyntax;
  import javax.print.attribute.PrintJobAttribute;
  import javax.print.attribute.PrintRequestAttribute;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class JobHoldUntil extends DateTimeSyntax
    implements PrintJobAttribute, PrintRequestAttribute
  {
*************** public final class JobHoldUntil extends 
*** 64,70 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobHoldUntil extends 
*** 79,85 ****
     *
     * @return the class <code>JobHoldUntil</code> itself
     */
!   public final Class getCategory()
    {
      return JobHoldUntil.class;
    }
--- 84,90 ----
     *
     * @return the class <code>JobHoldUntil</code> itself
     */
!   public Class getCategory()
    {
      return JobHoldUntil.class;
    }
*************** public final class JobHoldUntil extends 
*** 89,95 ****
     *
     * @return the string "job-hold-until"
     */
!   public final String getName()
    {
      return "job-hold-until";
    }
--- 94,100 ----
     *
     * @return the string "job-hold-until"
     */
!   public String getName()
    {
      return "job-hold-until";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobImpressions.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobImpressions.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobImpressions.java	Sat Dec 27 14:21:08 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobImpressions.java	Wed Oct 20 12:03:37 2004
*************** public final class JobImpressions extend
*** 69,75 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobImpressions extend
*** 84,90 ****
     *
     * @return the class <code>JobImpressions</code> itself
     */
!   public final Class getCategory()
    {
      return JobImpressions.class;
    }
--- 84,90 ----
     *
     * @return the class <code>JobImpressions</code> itself
     */
!   public Class getCategory()
    {
      return JobImpressions.class;
    }
*************** public final class JobImpressions extend
*** 94,100 ****
     *
     * @return the string "job-impressions"
     */
!   public final String getName()
    {
      return "job-impressions";
    }
--- 94,100 ----
     *
     * @return the string "job-impressions"
     */
!   public String getName()
    {
      return "job-impressions";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobImpressionsCompleted.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobImpressionsCompleted.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobImpressionsCompleted.java	Tue Jan  6 13:48:52 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobImpressionsCompleted.java	Wed Oct 20 12:03:38 2004
***************
*** 1,5 ****
  /* JobImpressionsCompleted.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JobImpressionsCompleted.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.print.attribute.IntegerSynt
*** 41,47 ****
  import javax.print.attribute.PrintJobAttribute;
  
  /**
!  * @author Michael Koch
   */
  public final class JobImpressionsCompleted extends IntegerSyntax
    implements PrintJobAttribute
--- 41,47 ----
  import javax.print.attribute.PrintJobAttribute;
  
  /**
!  * @author Michael Koch (konqueror@gmx.de)
   */
  public final class JobImpressionsCompleted extends IntegerSyntax
    implements PrintJobAttribute
*************** public final class JobImpressionsComplet
*** 68,74 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobImpressionsComplet
*** 83,89 ****
     *
     * @return the class <code>JobImpressionsCompleted</code> itself
     */
!   public final Class getCategory()
    {
      return JobImpressionsCompleted.class;
    }
--- 83,89 ----
     *
     * @return the class <code>JobImpressionsCompleted</code> itself
     */
!   public Class getCategory()
    {
      return JobImpressionsCompleted.class;
    }
*************** public final class JobImpressionsComplet
*** 93,99 ****
     *
     * @return the string "job-impressions-completed"
     */
!   public final String getName()
    {
      return "job-impressions";
    }
--- 93,99 ----
     *
     * @return the string "job-impressions-completed"
     */
!   public String getName()
    {
      return "job-impressions";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobImpressionsSupported.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobImpressionsSupported.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobImpressionsSupported.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobImpressionsSupported.java	Wed Oct 20 12:03:38 2004
***************
*** 0 ****
--- 1,79 ----
+ /* JobImpressionsSupported.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.SetOfIntegerSyntax;
+ import javax.print.attribute.SupportedValuesAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class JobImpressionsSupported extends SetOfIntegerSyntax
+   implements SupportedValuesAttribute
+ {
+   private static final long serialVersionUID = -4887354803843173692L;
+ 
+   /**
+    * Constructs a <code>JobImpressionsSupported</code> object.
+    */
+   public JobImpressionsSupported(int lowerBound, int upperBound)
+   {
+     super(lowerBound, upperBound);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>JobImpressionsSupported</code> itself
+    */
+   public Class getCategory()
+   {
+     return JobImpressionsSupported.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "job-impressions-supported";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobKOctets.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobKOctets.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobKOctets.java	Tue Jan  6 13:48:52 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobKOctets.java	Wed Oct 20 12:03:38 2004
*************** public final class JobKOctets extends In
*** 69,75 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobKOctets extends In
*** 84,90 ****
     *
     * @return the class <code>JobKOctets</code> itself
     */
!   public final Class getCategory()
    {
      return JobKOctets.class;
    }
--- 84,90 ----
     *
     * @return the class <code>JobKOctets</code> itself
     */
!   public Class getCategory()
    {
      return JobKOctets.class;
    }
*************** public final class JobKOctets extends In
*** 94,100 ****
     *
     * @return the string "job-k-octets"
     */
!   public final String getName()
    {
      return "job-k-octets";
    }
--- 94,100 ----
     *
     * @return the string "job-k-octets"
     */
!   public String getName()
    {
      return "job-k-octets";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobKOctetsProcessed.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobKOctetsProcessed.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobKOctetsProcessed.java	Sat Jan 10 22:16:01 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobKOctetsProcessed.java	Wed Oct 20 12:03:38 2004
*************** public final class JobKOctetsProcessed e
*** 68,74 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobKOctetsProcessed e
*** 83,89 ****
     *
     * @return the class <code>JobKOctetsProcessed</code> itself
     */
!   public final Class getCategory()
    {
      return JobKOctetsProcessed.class;
    }
--- 83,89 ----
     *
     * @return the class <code>JobKOctetsProcessed</code> itself
     */
!   public Class getCategory()
    {
      return JobKOctetsProcessed.class;
    }
*************** public final class JobKOctetsProcessed e
*** 93,99 ****
     *
     * @return the string "job-k-octets-processed"
     */
!   public final String getName()
    {
      return "job-k-octets-processed";
    }
--- 93,99 ----
     *
     * @return the string "job-k-octets-processed"
     */
!   public String getName()
    {
      return "job-k-octets-processed";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobKOctetsSupported.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobKOctetsSupported.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobKOctetsSupported.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobKOctetsSupported.java	Wed Oct 20 12:03:38 2004
***************
*** 0 ****
--- 1,79 ----
+ /* JobKOctetsSupported.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.SetOfIntegerSyntax;
+ import javax.print.attribute.SupportedValuesAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class JobKOctetsSupported extends SetOfIntegerSyntax
+   implements SupportedValuesAttribute
+ {
+   private static final long serialVersionUID = -2867871140549897443L;
+ 
+   /**
+    * Constructs a <code>JobKOctetsSupported</code> object.
+    */
+   public JobKOctetsSupported(int lowerBound, int upperBound)
+   {
+     super(lowerBound, upperBound);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>ColorSupported</code> itself
+    */
+   public Class getCategory()
+   {
+     return JobKOctetsSupported.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "job-k-octets-supported";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobMediaSheets.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobMediaSheets.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobMediaSheets.java	Sat Dec 27 14:21:08 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobMediaSheets.java	Wed Oct 20 12:03:38 2004
*************** public class JobMediaSheets extends Inte
*** 69,75 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public class JobMediaSheets extends Inte
*** 84,90 ****
     *
     * @return the class <code>JobMediaSheets</code> itself
     */
!   public final Class getCategory()
    {
      return JobMediaSheets.class;
    }
--- 84,90 ----
     *
     * @return the class <code>JobMediaSheets</code> itself
     */
!   public Class getCategory()
    {
      return JobMediaSheets.class;
    }
*************** public class JobMediaSheets extends Inte
*** 94,100 ****
     *
     * @return the string "job-media-sheets"
     */
!   public final String getName()
    {
      return "job-media-sheets";
    }
--- 94,100 ----
     *
     * @return the string "job-media-sheets"
     */
!   public String getName()
    {
      return "job-media-sheets";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobMediaSheetsCompleted.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobMediaSheetsCompleted.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobMediaSheetsCompleted.java	Sat Jan 10 22:16:01 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobMediaSheetsCompleted.java	Wed Oct 20 12:03:38 2004
*************** public final class JobMediaSheetsComplet
*** 68,74 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobMediaSheetsComplet
*** 83,89 ****
     *
     * @return the class <code>JobMediaSheetsCompleted</code> itself
     */
!   public final Class getCategory()
    {
      return JobMediaSheetsCompleted.class;
    }
--- 83,89 ----
     *
     * @return the class <code>JobMediaSheetsCompleted</code> itself
     */
!   public Class getCategory()
    {
      return JobMediaSheetsCompleted.class;
    }
*************** public final class JobMediaSheetsComplet
*** 93,99 ****
     *
     * @return the string "job-media-sheets-completed"
     */
!   public final String getName()
    {
      return "job-media-sheets-completed";
    }
--- 93,99 ----
     *
     * @return the string "job-media-sheets-completed"
     */
!   public String getName()
    {
      return "job-media-sheets-completed";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobMediaSheetsSupported.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobMediaSheetsSupported.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobMediaSheetsSupported.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobMediaSheetsSupported.java	Wed Oct 20 12:03:38 2004
***************
*** 0 ****
--- 1,79 ----
+ /* JobMediaSheetsSupported.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.SetOfIntegerSyntax;
+ import javax.print.attribute.SupportedValuesAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class JobMediaSheetsSupported extends SetOfIntegerSyntax
+   implements SupportedValuesAttribute
+ {
+   private static final long serialVersionUID = 2953685470388672940L;
+ 
+   /**
+    * Constructs a <code>JobMediaSheetsSupported</code> object.
+    */
+   public JobMediaSheetsSupported(int lowerBound, int upperBound)
+   {
+     super(lowerBound, upperBound);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>JobMediaSheetsSupported</code> itself
+    */
+   public Class getCategory()
+   {
+     return JobMediaSheetsSupported.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "job-media-sheets-supported";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobMessageFromOperator.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobMessageFromOperator.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobMessageFromOperator.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobMessageFromOperator.java	Wed Oct 20 12:03:38 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintJobAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class JobMessageFromOperator extends TextSyntax
    implements PrintJobAttribute
  {
*************** public final class JobMessageFromOperato
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobMessageFromOperato
*** 78,84 ****
     *
     * @return the class <code>JobMessageFromOperator</code> itself
     */
!   public final Class getCategory()
    {
      return JobMessageFromOperator.class;
    }
--- 83,89 ----
     *
     * @return the class <code>JobMessageFromOperator</code> itself
     */
!   public Class getCategory()
    {
      return JobMessageFromOperator.class;
    }
*************** public final class JobMessageFromOperato
*** 88,94 ****
     *
     * @return the string "job-message-from-operator"
     */
!   public final String getName()
    {
      return "job-message-from-operator";
    }
--- 93,99 ----
     *
     * @return the string "job-message-from-operator"
     */
!   public String getName()
    {
      return "job-message-from-operator";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobName.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobName.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobName.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobName.java	Wed Oct 20 12:03:38 2004
*************** this exception to your version of the li
*** 35,47 ****
--- 35,52 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintJobAttribute;
  import javax.print.attribute.PrintRequestAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class JobName extends TextSyntax
    implements PrintJobAttribute, PrintRequestAttribute
  {
*************** public final class JobName extends TextS
*** 64,70 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobName extends TextS
*** 79,85 ****
     *
     * @return the class <code>JobName</code> itself
     */
!   public final Class getCategory()
    {
      return JobName.class;
    }
--- 84,90 ----
     *
     * @return the class <code>JobName</code> itself
     */
!   public Class getCategory()
    {
      return JobName.class;
    }
*************** public final class JobName extends TextS
*** 89,95 ****
     *
     * @return the string "job-name"
     */
!   public final String getName()
    {
      return "job-name";
    }
--- 94,100 ----
     *
     * @return the string "job-name"
     */
!   public String getName()
    {
      return "job-name";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobOriginatingUserName.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobOriginatingUserName.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobOriginatingUserName.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobOriginatingUserName.java	Wed Oct 20 12:03:38 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintJobAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class JobOriginatingUserName extends TextSyntax
    implements PrintJobAttribute
  {
*************** public final class JobOriginatingUserNam
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobOriginatingUserNam
*** 78,84 ****
     *
     * @return the class <code>JobOriginatingUserName</code> itself
     */
!   public final Class getCategory()
    {
      return JobOriginatingUserName.class;
    }
--- 83,89 ----
     *
     * @return the class <code>JobOriginatingUserName</code> itself
     */
!   public Class getCategory()
    {
      return JobOriginatingUserName.class;
    }
*************** public final class JobOriginatingUserNam
*** 88,94 ****
     *
     * @return the string "job-originating-user-name"
     */
!   public final String getName()
    {
      return "job-originating-user-name";
    }
--- 93,99 ----
     *
     * @return the string "job-originating-user-name"
     */
!   public String getName()
    {
      return "job-originating-user-name";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobPriority.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobPriority.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobPriority.java	Tue Dec 23 11:55:29 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobPriority.java	Wed Oct 20 12:03:38 2004
***************
*** 1,5 ****
  /* JobPriority.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JobPriority.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.print.attribute.IntegerSynt
*** 41,46 ****
--- 41,50 ----
  import javax.print.attribute.PrintJobAttribute;
  import javax.print.attribute.PrintRequestAttribute;
  
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class JobPriority extends IntegerSyntax
    implements PrintJobAttribute, PrintRequestAttribute
  {
*************** public final class JobPriority extends I
*** 66,72 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 70,76 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobPriority extends I
*** 81,87 ****
     *
     * @return the class <code>JobPriority</code> itself
     */
!   public final Class getCategory()
    {
      return JobPriority.class;
    }
--- 85,91 ----
     *
     * @return the class <code>JobPriority</code> itself
     */
!   public Class getCategory()
    {
      return JobPriority.class;
    }
*************** public final class JobPriority extends I
*** 91,97 ****
     *
     * @return the string "job-priority"
     */
!   public final String getName()
    {
      return "job-priority";
    }
--- 95,101 ----
     *
     * @return the string "job-priority"
     */
!   public String getName()
    {
      return "job-priority";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobPrioritySupported.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobPrioritySupported.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobPrioritySupported.java	Tue Jan  6 13:48:52 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobPrioritySupported.java	Wed Oct 20 12:03:38 2004
***************
*** 1,5 ****
  /* JobPrioritySupported.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JobPrioritySupported.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.print.attribute.standard;
*** 40,45 ****
--- 40,49 ----
  import javax.print.attribute.IntegerSyntax;
  import javax.print.attribute.SupportedValuesAttribute;
  
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class JobPrioritySupported extends IntegerSyntax
    implements SupportedValuesAttribute
  {
*************** public final class JobPrioritySupported 
*** 65,71 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class JobPrioritySupported 
*** 80,86 ****
     *
     * @return the class <code>JobPrioritySupported</code> itself
     */
!   public final Class getCategory()
    {
      return JobPrioritySupported.class;
    }
--- 84,90 ----
     *
     * @return the class <code>JobPrioritySupported</code> itself
     */
!   public Class getCategory()
    {
      return JobPrioritySupported.class;
    }
*************** public final class JobPrioritySupported 
*** 90,96 ****
     *
     * @return the string "job-priority-supported"
     */
!   public final String getName()
    {
      return "job-priority-supported";
    }
--- 94,100 ----
     *
     * @return the string "job-priority-supported"
     */
!   public String getName()
    {
      return "job-priority-supported";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobSheets.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobSheets.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobSheets.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobSheets.java	Wed Oct 20 12:03:38 2004
***************
*** 0 ****
--- 1,83 ----
+ /* JobSheets.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class JobSheets extends EnumSyntax
+   implements PrintJobAttribute, PrintRequestAttribute
+ {
+   private static final long serialVersionUID = -4735258056132519759L;
+ 
+   public static final JobSheets NONE = new JobSheets(0);
+   public static final JobSheets STANDARD = new JobSheets(1);
+ 
+   /**
+    * Constructs a <code>JobSheets</code> object.
+    */
+   protected JobSheets(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>JobSheets</code> itself
+    */
+   public Class getCategory()
+   {
+     return JobSheets.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "job-sheets";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobState.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobState.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobState.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobState.java	Wed Oct 20 12:03:38 2004
***************
*** 0 ****
--- 1,88 ----
+ /* JobState.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class JobState extends EnumSyntax
+   implements PrintJobAttribute
+ {
+   private static final long serialVersionUID = 400465010094018920L;
+ 
+   public static final JobState UNKNOWN = new JobState(0);
+   public static final JobState PENDING = new JobState(1);
+   public static final JobState PENDING_HELD = new JobState(2);
+   public static final JobState PROCESSING = new JobState(3);
+   public static final JobState PROCESSING_STOPPED = new JobState(4);
+   public static final JobState CANCELED = new JobState(5);
+   public static final JobState ABORTED = new JobState(6);
+   public static final JobState COMPLETED = new JobState(7);
+ 
+   /**
+    * Constructs a <code>JobState</code> object.
+    */
+   protected JobState(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>JobState</code> itself
+    */
+   public Class getCategory()
+   {
+     return JobState.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "job-state";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobStateReason.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobStateReason.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobStateReason.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobStateReason.java	Sat Oct 23 20:06:12 2004
***************
*** 0 ****
--- 1,109 ----
+ /* JobStateReason.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.Attribute;
+ import javax.print.attribute.EnumSyntax;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class JobStateReason extends EnumSyntax
+   implements Attribute
+ {
+   private static final long serialVersionUID = -8765894420449009168L;
+ 
+   public static final JobStateReason JOB_INCOMING = new JobStateReason(0);
+   public static final JobStateReason JOB_DATA_INSUFFICIENT = new JobStateReason(1);
+   public static final JobStateReason DOCUMENT_ACCESS_ERROR = new JobStateReason(2);
+   public static final JobStateReason SUBMISSION_INTERRUPTED = new JobStateReason(3);
+   public static final JobStateReason JOB_OUTGOING = new JobStateReason(4);
+   public static final JobStateReason JOB_HOLD_UNTIL_SPECIFIED = new JobStateReason(5);
+   public static final JobStateReason RESOURCES_ARE_NOT_READY = new JobStateReason(6);
+   public static final JobStateReason PRINTER_STOPPED_PARTLY = new JobStateReason(7);
+   public static final JobStateReason PRINTER_STOPPED = new JobStateReason(8);
+   public static final JobStateReason JOB_INTERPRETING = new JobStateReason(9);
+   public static final JobStateReason JOB_QUEUED = new JobStateReason(10);
+   public static final JobStateReason JOB_TRANSFORMING = new JobStateReason(11);
+   public static final JobStateReason JOB_QUEUED_FOR_MARKER = new JobStateReason(12);
+   public static final JobStateReason JOB_PRINTING = new JobStateReason(13);
+   public static final JobStateReason JOB_CANCELED_BY_USER = new JobStateReason(14);
+   public static final JobStateReason JOB_CANCELED_BY_OPERATOR = new JobStateReason(15);
+   public static final JobStateReason JOB_CANCELED_AT_DEVICE = new JobStateReason(16);
+   public static final JobStateReason ABORTED_BY_SYSTEM = new JobStateReason(17);
+   public static final JobStateReason UNSUPPORTED_COMPRESSION = new JobStateReason(18);
+   public static final JobStateReason COMPRESSION_ERROR = new JobStateReason(19);
+   public static final JobStateReason UNSUPPORTED_DOCUMENT_FORMAT = new JobStateReason(20);
+   public static final JobStateReason DOCUMENT_FORMAT_ERROR = new JobStateReason(21);
+   public static final JobStateReason PROCESSING_TO_STOP_POINT = new JobStateReason(22);
+   public static final JobStateReason SERVICE_OFF_LINE = new JobStateReason(23);
+   public static final JobStateReason JOB_COMPLETED_SUCCESSFULLY = new JobStateReason(24);
+   public static final JobStateReason JOB_COMPLETED_WITH_WARNINGS = new JobStateReason(25);
+   public static final JobStateReason JOB_COMPLETED_WITH_ERRORS = new JobStateReason(26);
+   public static final JobStateReason JOB_RESTARTABLE = new JobStateReason(27);
+   public static final JobStateReason QUEUED_IN_DEVICE = new JobStateReason(28);
+ 
+   /**
+    * Constructs a <code>JobStateReason</code> object.
+    */
+   protected JobStateReason(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>JobStateReason</code> itself
+    */
+   public Class getCategory()
+   {
+     return JobStateReason.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "job-state-reason";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/JobStateReasons.java gcc-4.0.0/libjava/javax/print/attribute/standard/JobStateReasons.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/JobStateReasons.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/JobStateReasons.java	Wed Oct 20 12:03:38 2004
***************
*** 0 ****
--- 1,72 ----
+ /* JobStateReasons.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import java.util.HashSet;
+ 
+ import javax.print.attribute.PrintJobAttribute;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class JobStateReasons extends HashSet
+   implements PrintJobAttribute
+ {
+   private static final long serialVersionUID = 8849088261264331812L;
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>ColorSupported</code> itself
+    */
+   public Class getCategory()
+   {
+     return JobStateReasons.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "job-state-reasons";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/Media.java gcc-4.0.0/libjava/javax/print/attribute/standard/Media.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/Media.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/Media.java	Wed Oct 20 12:03:38 2004
***************
*** 0 ****
--- 1,81 ----
+ /* Media.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class Media extends EnumSyntax
+   implements DocAttribute, PrintRequestAttribute, PrintJobAttribute
+ {
+   private static final long serialVersionUID = -2823970704630722439L;
+ 
+   /**
+    * Constructs a <code>Media</code> object.
+    */
+   protected Media(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>Media</code> itself
+    */
+   public Class getCategory()
+   {
+     return Media.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "media";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/MediaPrintableArea.java gcc-4.0.0/libjava/javax/print/attribute/standard/MediaPrintableArea.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/MediaPrintableArea.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/MediaPrintableArea.java	Thu Feb 17 18:39:43 2005
***************
*** 0 ****
--- 1,146 ----
+ /* MediaPrintableArea.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class MediaPrintableArea
+   implements DocAttribute, PrintJobAttribute, PrintRequestAttribute
+ {
+   private static final long serialVersionUID = -1597171464050795793L;
+ 
+   public static final int INCH = 25400;
+   public static final int MM = 1000;
+   
+   private float x;
+   private float y;
+   private float width;
+   private float height;
+   
+   /**
+    * Creates a new <code>MediaPrintableArea</code> object.
+    * 
+    * @throws IllegalArgumentException if x i&lt; 0 or y i&lt; 0 or w i&lt;= 0
+    * or h i&lt;= 0 or units i&lt; 1
+    */
+   public MediaPrintableArea(float x, float y, float w, float h, int units)
+   {
+     if (x < 0.0f || y < 0.0f || w <= 0.0f || h <= 0.0f)
+       throw new IllegalArgumentException();
+ 
+     this.x = x;
+     this.y = y;
+     this.width = w;
+     this.height = h;
+   }
+ 
+   /**
+    * Creates a new <code>MediaPrintableArea</code> object.
+    * 
+    * @throws IllegalArgumentException if x i&lt; 0 or y i&lt; 0 or w i&lt;= 0
+    * or h i&lt;= 0 or units i&lt; 1
+    */
+   public MediaPrintableArea(int x, int y, int w, int h, int units)
+   {
+     if (x < 0 || y < 0 || w <= 0 || h <= 0)
+       throw new IllegalArgumentException();
+ 
+     this.x = x;
+     this.y = y;
+     this.width = w;
+     this.height = h;
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>MediaPrintableArea</code> itself
+    */
+   public Class getCategory()
+   {
+     return MediaPrintableArea.class;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "media-printable-area"
+    */
+   public String getName()
+   {
+     return "media-printable-area";
+   }
+ 
+   public float getHeight(int units)
+   {
+     if (units < 1)
+       throw new IllegalArgumentException();
+ 
+     return height * units;
+   }
+ 
+   public float getWidth(int units)
+   {
+     if (units < 1)
+       throw new IllegalArgumentException();
+ 
+     return width * units;
+   }
+ 
+   public float getX(int units)
+   {
+     if (units < 1)
+       throw new IllegalArgumentException();
+ 
+     return x * units;
+   }
+ 
+   public float getY(int units)
+   {
+     if (units < 1)
+       throw new IllegalArgumentException();
+ 
+     return y * units;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/MediaSize.java gcc-4.0.0/libjava/javax/print/attribute/standard/MediaSize.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/MediaSize.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/MediaSize.java	Thu Feb 17 18:39:43 2005
***************
*** 0 ****
--- 1,114 ----
+ /* MediaSize.java -- 
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import java.util.ArrayList;
+ 
+ import javax.print.attribute.Attribute;
+ import javax.print.attribute.Size2DSyntax;
+ 
+ public class MediaSize extends Size2DSyntax
+   implements Attribute
+ {
+   private static final long serialVersionUID = -1967958664615414771L;
+ 
+   private static ArrayList mediaCache = new ArrayList();
+   
+   private MediaSizeName media;
+   
+   public MediaSize(float x, float y, int units)
+   {
+     super(x, y, units);
+   }
+   
+   public MediaSize(float x, float y, int units, MediaSizeName media)
+   {
+     super(x, y, units);
+     this.media = media;
+   }
+   
+   public MediaSize(int x, int y, int units)
+   {
+     super(x, y, units);
+   }
+   
+   public MediaSize(int x, int y, int units, MediaSizeName media)
+   {
+     super(x, y, units);
+     this.media = media;
+   }
+   
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>MediaSize</code> itself
+    */
+   public Class getCategory()
+   {
+     return MediaSize.class;
+   }
+ 
+   public static MediaSize getMediaSizeForName(MediaSizeName media)
+   {
+     for (int i = 0; i < mediaCache.size(); i++)
+       {
+ 	MediaSize size = (MediaSize) mediaCache.get(i);
+ 	
+ 	if (size.getMediaSizeName().equals(media))
+ 	  return size;
+       }
+ 
+     return null;
+   }
+   
+   public MediaSizeName getMediaSizeName()
+   {
+     return media;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "media-size"
+    */
+   public String getName()
+   {
+     return "media-size";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/MediaSizeName.java gcc-4.0.0/libjava/javax/print/attribute/standard/MediaSizeName.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/MediaSizeName.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/MediaSizeName.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,135 ----
+ /* MediaSizeName.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class MediaSizeName extends Media
+ {
+   private static final long serialVersionUID = 2778798329756942747L;
+ 
+   public static final MediaSizeName ISO_A0 = new MediaSizeName(0);
+   public static final MediaSizeName ISO_A1 = new MediaSizeName(1);
+   public static final MediaSizeName ISO_A2 = new MediaSizeName(2);
+   public static final MediaSizeName ISO_A3 = new MediaSizeName(3);
+   public static final MediaSizeName ISO_A4 = new MediaSizeName(4);
+   public static final MediaSizeName ISO_A5 = new MediaSizeName(5);
+   public static final MediaSizeName ISO_A6 = new MediaSizeName(6);
+   public static final MediaSizeName ISO_A7 = new MediaSizeName(7);
+   public static final MediaSizeName ISO_A8 = new MediaSizeName(8);
+   public static final MediaSizeName ISO_A9 = new MediaSizeName(9);
+   public static final MediaSizeName ISO_A10 = new MediaSizeName(10);
+   public static final MediaSizeName ISO_B0 = new MediaSizeName(11);
+   public static final MediaSizeName ISO_B1 = new MediaSizeName(12);
+   public static final MediaSizeName ISO_B2 = new MediaSizeName(13);
+   public static final MediaSizeName ISO_B3 = new MediaSizeName(14);
+   public static final MediaSizeName ISO_B4 = new MediaSizeName(15);
+   public static final MediaSizeName ISO_B5 = new MediaSizeName(16);
+   public static final MediaSizeName ISO_B6 = new MediaSizeName(17);
+   public static final MediaSizeName ISO_B7 = new MediaSizeName(18);
+   public static final MediaSizeName ISO_B8 = new MediaSizeName(19);
+   public static final MediaSizeName ISO_B9 = new MediaSizeName(20);
+   public static final MediaSizeName ISO_B10 = new MediaSizeName(21);
+   public static final MediaSizeName JIS_B0 = new MediaSizeName(22);
+   public static final MediaSizeName JIS_B1 = new MediaSizeName(23);
+   public static final MediaSizeName JIS_B2 = new MediaSizeName(24);
+   public static final MediaSizeName JIS_B3 = new MediaSizeName(25);
+   public static final MediaSizeName JIS_B4 = new MediaSizeName(26);
+   public static final MediaSizeName JIS_B5 = new MediaSizeName(27);
+   public static final MediaSizeName JIS_B6 = new MediaSizeName(28);
+   public static final MediaSizeName JIS_B7 = new MediaSizeName(29);
+   public static final MediaSizeName JIS_B8 = new MediaSizeName(30);
+   public static final MediaSizeName JIS_B9 = new MediaSizeName(31);
+   public static final MediaSizeName JIS_B10 = new MediaSizeName(32);
+   public static final MediaSizeName ISO_C0 = new MediaSizeName(33);
+   public static final MediaSizeName ISO_C1 = new MediaSizeName(34);
+   public static final MediaSizeName ISO_C2 = new MediaSizeName(35);
+   public static final MediaSizeName ISO_C3 = new MediaSizeName(36);
+   public static final MediaSizeName ISO_C4 = new MediaSizeName(37);
+   public static final MediaSizeName ISO_C5 = new MediaSizeName(38);
+   public static final MediaSizeName ISO_C6 = new MediaSizeName(39);
+   public static final MediaSizeName NA_LETTER = new MediaSizeName(40);
+   public static final MediaSizeName NA_LEGAL = new MediaSizeName(41);
+   public static final MediaSizeName EXECUTIVE = new MediaSizeName(42);
+   public static final MediaSizeName LEDGER = new MediaSizeName(43);
+   public static final MediaSizeName TABLOID = new MediaSizeName(44);
+   public static final MediaSizeName INVOICE = new MediaSizeName(45);
+   public static final MediaSizeName FOLIO = new MediaSizeName(46);
+   public static final MediaSizeName QUARTO = new MediaSizeName(47);
+   public static final MediaSizeName JAPANESE_POSTCARD = new MediaSizeName(48);
+   public static final MediaSizeName JAPANESE_DOUBLE_POSTCARD =
+     new MediaSizeName(49);
+   public static final MediaSizeName A = new MediaSizeName(50);
+   public static final MediaSizeName B = new MediaSizeName(51);
+   public static final MediaSizeName C = new MediaSizeName(52);
+   public static final MediaSizeName D = new MediaSizeName(53);
+   public static final MediaSizeName E = new MediaSizeName(54);
+   public static final MediaSizeName ISO_DESIGNATED_LONG =
+     new MediaSizeName(55);
+   public static final MediaSizeName ITALY_ENVELOPE = new MediaSizeName(56);
+   public static final MediaSizeName MONARCH_ENVELOPE = new MediaSizeName(57);
+   public static final MediaSizeName PERSONAL_ENVELOPE = new MediaSizeName(58);
+   public static final MediaSizeName NA_NUMBER_9_ENVELOPE =
+     new MediaSizeName(59);
+   public static final MediaSizeName NA_NUMBER_10_ENVELOPE =
+     new MediaSizeName(60);
+   public static final MediaSizeName NA_NUMBER_11_ENVELOPE =
+     new MediaSizeName(61);
+   public static final MediaSizeName NA_NUMBER_12_ENVELOPE =
+     new MediaSizeName(62);
+   public static final MediaSizeName NA_NUMBER_14_ENVELOPE =
+     new MediaSizeName(63);
+   public static final MediaSizeName NA_6X9_ENVELOPE = new MediaSizeName(64);
+   public static final MediaSizeName NA_7X9_ENVELOPE = new MediaSizeName(65);
+   public static final MediaSizeName NA_9X11_ENVELOPE = new MediaSizeName(66);
+   public static final MediaSizeName NA_9X12_ENVELOPE = new MediaSizeName(67);
+   public static final MediaSizeName NA_10X13_ENVELOPE = new MediaSizeName(68);
+   public static final MediaSizeName NA_10X14_ENVELOPE = new MediaSizeName(69);
+   public static final MediaSizeName NA_10X15_ENVELOPE = new MediaSizeName(70);
+   public static final MediaSizeName NA_5X7 = new MediaSizeName(71);
+   public static final MediaSizeName NA_8X10 = new MediaSizeName(72);
+ 
+   /**
+    * Constructs a <code>MediaSizeName</code> object.
+    */
+   protected MediaSizeName(int value)
+   {
+     super(value);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/MultipleDocumentHandling.java gcc-4.0.0/libjava/javax/print/attribute/standard/MultipleDocumentHandling.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/MultipleDocumentHandling.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/MultipleDocumentHandling.java	Sat Oct 23 20:06:12 2004
***************
*** 0 ****
--- 1,89 ----
+ /* MultipleDocumentHandling.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class MultipleDocumentHandling extends EnumSyntax
+   implements PrintJobAttribute, PrintRequestAttribute
+ {
+   private static final long serialVersionUID = 8098326460746413466L;
+ 
+   public static final MultipleDocumentHandling SINGLE_DOCUMENT =
+     new MultipleDocumentHandling(0);
+   public static final MultipleDocumentHandling SEPARATE_DOCUMENTS_UNCOLLATED_COPIES =
+     new MultipleDocumentHandling(1);
+   public static final MultipleDocumentHandling SEPARATE_DOCUMENTS_COLLATED_COPIES =
+     new MultipleDocumentHandling(2);
+   public static final MultipleDocumentHandling SINGLE_DOCUMENT_NEW_SHEET =
+     new MultipleDocumentHandling(3);
+ 
+   /**
+    * Constructs a <code>MultipleDocumentHandling</code> object.
+    */
+   protected MultipleDocumentHandling(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>MultipleDocumentHandling</code> itself
+    */
+   public Class getCategory()
+   {
+     return MultipleDocumentHandling.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "multiple-document-handling";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/NumberOfDocuments.java gcc-4.0.0/libjava/javax/print/attribute/standard/NumberOfDocuments.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/NumberOfDocuments.java	Sat Dec 27 14:21:08 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/NumberOfDocuments.java	Wed Oct 20 12:03:38 2004
*************** public final class NumberOfDocuments ext
*** 68,74 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class NumberOfDocuments ext
*** 83,89 ****
     *
     * @return the class <code>NumberOfDocuments</code> itself
     */
!   public final Class getCategory()
    {
      return NumberOfDocuments.class;
    }
--- 83,89 ----
     *
     * @return the class <code>NumberOfDocuments</code> itself
     */
!   public Class getCategory()
    {
      return NumberOfDocuments.class;
    }
*************** public final class NumberOfDocuments ext
*** 93,99 ****
     *
     * @return the string "number-of-documents"
     */
!   public final String getName()
    {
      return "number-of-documents";
    }
--- 93,99 ----
     *
     * @return the string "number-of-documents"
     */
!   public String getName()
    {
      return "number-of-documents";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/NumberOfInterveningJobs.java gcc-4.0.0/libjava/javax/print/attribute/standard/NumberOfInterveningJobs.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/NumberOfInterveningJobs.java	Sat Dec 27 14:21:08 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/NumberOfInterveningJobs.java	Wed Oct 20 12:03:38 2004
***************
*** 1,5 ****
  /* NumberOfInterveningJobs.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NumberOfInterveningJobs.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public final class NumberOfInterveningJo
*** 49,55 ****
    private static final long serialVersionUID = 2568141124844982746L;
    
    /**
!    * Creates a <code>QueuedJobCount</code> object.
     *
     * @param value the number of intervening jobs
     *
--- 49,55 ----
    private static final long serialVersionUID = 2568141124844982746L;
    
    /**
!    * Creates a <code>NumberOfInterveningJobs</code> object.
     *
     * @param value the number of intervening jobs
     *
*************** public final class NumberOfInterveningJo
*** 68,74 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class NumberOfInterveningJo
*** 83,89 ****
     *
     * @return the class <code>NumberOfInterveningJobs</code> itself
     */
!   public final Class getCategory()
    {
      return NumberOfInterveningJobs.class;
    }
--- 83,89 ----
     *
     * @return the class <code>NumberOfInterveningJobs</code> itself
     */
!   public Class getCategory()
    {
      return NumberOfInterveningJobs.class;
    }
*************** public final class NumberOfInterveningJo
*** 93,99 ****
     *
     * @return the string "number-of-intervening-jobs"
     */
!   public final String getName()
    {
      return "number-of-intervening-jobs";
    }
--- 93,99 ----
     *
     * @return the string "number-of-intervening-jobs"
     */
!   public String getName()
    {
      return "number-of-intervening-jobs";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/NumberUp.java gcc-4.0.0/libjava/javax/print/attribute/standard/NumberUp.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/NumberUp.java	Tue Dec 23 11:55:29 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/NumberUp.java	Wed Oct 20 12:03:39 2004
*************** public final class NumberUp extends Inte
*** 68,74 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class NumberUp extends Inte
*** 83,89 ****
     *
     * @return the class <code>NumberUp</code> itself
     */
!   public final Class getCategory()
    {
      return NumberUp.class;
    }
--- 83,89 ----
     *
     * @return the class <code>NumberUp</code> itself
     */
!   public Class getCategory()
    {
      return NumberUp.class;
    }
*************** public final class NumberUp extends Inte
*** 93,99 ****
     *
     * @return the string "number-up"
     */
!   public final String getName()
    {
      return "number-up";
    }
--- 93,99 ----
     *
     * @return the string "number-up"
     */
!   public String getName()
    {
      return "number-up";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/NumberUpSupported.java gcc-4.0.0/libjava/javax/print/attribute/standard/NumberUpSupported.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/NumberUpSupported.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/NumberUpSupported.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,95 ----
+ /* NumberUpSupported.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.SetOfIntegerSyntax;
+ import javax.print.attribute.SupportedValuesAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class NumberUpSupported extends SetOfIntegerSyntax
+   implements SupportedValuesAttribute
+ {
+   private static final long serialVersionUID = -1041573395759141805L;
+ 
+   /**
+    * Constructs a <code>NumberUp</code> object.
+    */
+   public NumberUpSupported(int member)
+   {
+     super(member);
+   }
+ 
+   /**
+    * Constructs a <code>NumberUp</code> object.
+    */
+   public NumberUpSupported(int[][] members)
+   {
+     super(members);
+   }
+ 
+   /**
+    * Constructs a <code>NumberUp</code> object.
+    */
+   public NumberUpSupported(int lowerBound, int upperBound)
+   {
+     super(lowerBound, upperBound);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>NumberUpSupported</code> itself
+    */
+   public Class getCategory()
+   {
+     return NumberUpSupported.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "number-up-supported";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/OrientationRequested.java gcc-4.0.0/libjava/javax/print/attribute/standard/OrientationRequested.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/OrientationRequested.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/OrientationRequested.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,90 ----
+ /* OrientationRequested.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class OrientationRequested extends EnumSyntax
+   implements DocAttribute, PrintRequestAttribute, PrintJobAttribute
+ {
+   private static final long serialVersionUID = -4447437289862822276L;
+ 
+   public static final OrientationRequested PORTRAIT =
+     new OrientationRequested(0);
+   public static final OrientationRequested LANDSCAPE =
+     new OrientationRequested(1);
+   public static final OrientationRequested REVERSE_LANDSCAPE =
+     new OrientationRequested(2);
+   public static final OrientationRequested REVERSE_PORTRAIT =
+     new OrientationRequested(3);
+ 
+     /**
+      * Constructs a <code>OrientationRequested</code> object.
+      */
+   protected OrientationRequested(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>OrientationRequested</code> itself
+    */
+   public Class getCategory()
+   {
+     return OrientationRequested.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "orientation-requested";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/OutputDeviceAssigned.java gcc-4.0.0/libjava/javax/print/attribute/standard/OutputDeviceAssigned.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/OutputDeviceAssigned.java	Sat Jan 10 22:16:01 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/OutputDeviceAssigned.java	Wed Oct 20 12:03:39 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintJobAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class OutputDeviceAssigned extends TextSyntax
    implements PrintJobAttribute
  {
*************** public final class OutputDeviceAssigned 
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class OutputDeviceAssigned 
*** 78,84 ****
     *
     * @return the class <code>OutputDeviceAssigned</code> itself
     */
!   public final Class getCategory()
    {
      return OutputDeviceAssigned.class;
    }
--- 83,89 ----
     *
     * @return the class <code>OutputDeviceAssigned</code> itself
     */
!   public Class getCategory()
    {
      return OutputDeviceAssigned.class;
    }
*************** public final class OutputDeviceAssigned 
*** 88,94 ****
     *
     * @return the string "output-device-assigned"
     */
!   public final String getName()
    {
      return "output-device-assigned";
    }
--- 93,99 ----
     *
     * @return the string "output-device-assigned"
     */
!   public String getName()
    {
      return "output-device-assigned";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PDLOverrideSupported.java gcc-4.0.0/libjava/javax/print/attribute/standard/PDLOverrideSupported.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PDLOverrideSupported.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PDLOverrideSupported.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,84 ----
+ /* PDLOverrideSupported.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintServiceAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class PDLOverrideSupported extends EnumSyntax
+   implements PrintServiceAttribute
+ {
+   private static final long serialVersionUID = -4393264467928463934L;
+ 
+   public static final PDLOverrideSupported NOT_ATTEMPTED =
+     new PDLOverrideSupported(0);
+   public static final PDLOverrideSupported ATTEMPTED =
+     new PDLOverrideSupported(0);
+ 
+   /**
+    * Constructs a <code>PDLOverrideSupported</code> object.
+    */
+   protected PDLOverrideSupported(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PDLOverrideSupported</code> itself
+    */
+   public Class getCategory()
+   {
+     return PDLOverrideSupported.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "pdl-override-supported";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PageRanges.java gcc-4.0.0/libjava/javax/print/attribute/standard/PageRanges.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PageRanges.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PageRanges.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,97 ----
+ /* PageRanges.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ import javax.print.attribute.SetOfIntegerSyntax;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class PageRanges extends SetOfIntegerSyntax
+   implements DocAttribute, PrintRequestAttribute, PrintJobAttribute
+ {
+   private static final long serialVersionUID = 8639895197656148392L;
+ 
+   /**
+    * Constructs a <code>PageRanges</code> object.
+    */
+   public PageRanges(int member)
+   {
+     super(member);
+   }
+ 
+   /**
+    * Constructs a <code>PageRanges</code> object.
+    */
+   public PageRanges(int[][] members)
+   {
+     super(members);
+   }
+ 
+   /**
+    * Constructs a <code>PageRanges</code> object.
+    */
+   public PageRanges(int lowerBound, int upperBound)
+   {
+     super(lowerBound, upperBound);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PageRanges</code> itself
+    */
+   public Class getCategory()
+   {
+     return PageRanges.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "page-ranges";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PagesPerMinute.java gcc-4.0.0/libjava/javax/print/attribute/standard/PagesPerMinute.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PagesPerMinute.java	Sat Dec 27 14:21:08 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PagesPerMinute.java	Wed Oct 20 12:03:39 2004
***************
*** 1,5 ****
  /* PagesPerMinute.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PagesPerMinute.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,47 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.print.attribute.standard;
  
  import javax.print.attribute.IntegerSyntax;
  import javax.print.attribute.PrintServiceAttribute;
  
  /**
!  * @author Michael Koch
   */
  public final class PagesPerMinute extends IntegerSyntax
    implements PrintServiceAttribute
--- 35,48 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import javax.print.attribute.IntegerSyntax;
  import javax.print.attribute.PrintServiceAttribute;
  
  /**
!  * @author Michael Koch (konqueror@gmx.de)
   */
  public final class PagesPerMinute extends IntegerSyntax
    implements PrintServiceAttribute
*************** public final class PagesPerMinute extend
*** 68,74 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class PagesPerMinute extend
*** 83,89 ****
     *
     * @return the class <code>PagesPerMinute</code> itself
     */
!   public final Class getCategory()
    {
      return PagesPerMinute.class;
    }
--- 84,90 ----
     *
     * @return the class <code>PagesPerMinute</code> itself
     */
!   public Class getCategory()
    {
      return PagesPerMinute.class;
    }
*************** public final class PagesPerMinute extend
*** 93,99 ****
     *
     * @return the string "pages-per-minute"
     */
!   public final String getName()
    {
      return "pages-per-minute";
    }
--- 94,100 ----
     *
     * @return the string "pages-per-minute"
     */
!   public String getName()
    {
      return "pages-per-minute";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PagesPerMinuteColor.java gcc-4.0.0/libjava/javax/print/attribute/standard/PagesPerMinuteColor.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PagesPerMinuteColor.java	Sat Dec 27 14:21:08 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PagesPerMinuteColor.java	Wed Oct 20 12:03:39 2004
*************** public final class PagesPerMinuteColor e
*** 68,74 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class PagesPerMinuteColor e
*** 83,89 ****
     *
     * @return the class <code>PagesPerMinuteColor</code> itself
     */
!   public final Class getCategory()
    {
      return PagesPerMinuteColor.class;
    }
--- 83,89 ----
     *
     * @return the class <code>PagesPerMinuteColor</code> itself
     */
!   public Class getCategory()
    {
      return PagesPerMinuteColor.class;
    }
*************** public final class PagesPerMinuteColor e
*** 93,99 ****
     *
     * @return the string "pages-per-minute-color"
     */
!   public final String getName()
    {
      return "pages-per-minute-color";
    }
--- 93,99 ----
     *
     * @return the string "pages-per-minute-color"
     */
!   public String getName()
    {
      return "pages-per-minute-color";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PresentationDirection.java gcc-4.0.0/libjava/javax/print/attribute/standard/PresentationDirection.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PresentationDirection.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PresentationDirection.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,97 ----
+ /* PresentationDirection.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class PresentationDirection extends EnumSyntax
+   implements PrintRequestAttribute, PrintJobAttribute
+ {
+   private static final long serialVersionUID = 8294728067230931780L;
+ 
+   public static final PresentationDirection TOBOTTOM_TORIGHT =
+     new PresentationDirection(0);
+   public static final PresentationDirection TOBOTTOM_TOLEFT =
+     new PresentationDirection(1);
+   public static final PresentationDirection TOTOP_TORIGHT =
+     new PresentationDirection(2);
+   public static final PresentationDirection TOTOP_TOLEFT =
+     new PresentationDirection(3);
+   public static final PresentationDirection TORIGHT_TOBOTTOM =
+     new PresentationDirection(4);
+   public static final PresentationDirection TORIGHT_TOTOP =
+     new PresentationDirection(5);
+   public static final PresentationDirection TOLEFT_TOBOTTOM =
+     new PresentationDirection(6);
+   public static final PresentationDirection TOLEFT_TOTOP =
+     new PresentationDirection(7);
+ 
+   /**
+    * Constructs a <code>PresentationDirection</code> object.
+    */
+   private PresentationDirection(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PresentationDirection</code> itself
+    */
+   public Class getCategory()
+   {
+     return PresentationDirection.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "presentation-direction";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrintQuality.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrintQuality.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrintQuality.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrintQuality.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,85 ----
+ /* PrintQuality.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class PrintQuality extends EnumSyntax
+   implements DocAttribute, PrintJobAttribute, PrintRequestAttribute
+ {
+   private static final long serialVersionUID = -3072341285225858365L;
+ 
+   public static final PrintQuality DRAFT = new PrintQuality(0);
+   public static final PrintQuality NORMAL = new PrintQuality(1);
+   public static final PrintQuality HIGH = new PrintQuality(2);
+ 
+   /**
+    * Constructs a <code>PrintQuality</code> object.
+    */
+   protected PrintQuality(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PrintQuality</code> itself
+    */
+   public Class getCategory()
+   {
+     return PrintQuality.class;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "print-quality"
+    */
+   public String getName()
+   {
+     return "print-quality";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterInfo.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterInfo.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterInfo.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterInfo.java	Wed Oct 20 12:03:39 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintServiceAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class PrinterInfo extends TextSyntax
    implements PrintServiceAttribute
  {
*************** public final class PrinterInfo extends T
*** 50,55 ****
--- 55,61 ----
     * Creates a <code>PrinterInfo</code> object.
     *
     * @param printerInfo the printer info
+    * @param locale the locale of the info, null means default locale
     *
     * @exception NullPointerException if printerInfo is null
     */
*************** public final class PrinterInfo extends T
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class PrinterInfo extends T
*** 78,84 ****
     *
     * @return the class <code>PrinterInfo</code> itself
     */
!   public final Class getCategory()
    {
      return PrinterInfo.class;
    }
--- 84,90 ----
     *
     * @return the class <code>PrinterInfo</code> itself
     */
!   public Class getCategory()
    {
      return PrinterInfo.class;
    }
*************** public final class PrinterInfo extends T
*** 88,94 ****
     *
     * @return the string "printer-info"
     */
!   public final String getName()
    {
      return "printer-info";
    }
--- 94,100 ----
     *
     * @return the string "printer-info"
     */
!   public String getName()
    {
      return "printer-info";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterIsAcceptingJobs.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterIsAcceptingJobs.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterIsAcceptingJobs.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterIsAcceptingJobs.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,84 ----
+ /* PrinterIsAcceptingJobs.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintServiceAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class PrinterIsAcceptingJobs extends EnumSyntax
+   implements PrintServiceAttribute
+ {
+   private static final long serialVersionUID = -5052010680537678061L;
+ 
+   public static final PrinterIsAcceptingJobs NOT_ACCEPTING_JOBS =
+     new PrinterIsAcceptingJobs(0);
+   public static final PrinterIsAcceptingJobs ACCEPTING_JOBS =
+     new PrinterIsAcceptingJobs(1);
+ 
+   /**
+    * Constructs a <code>PrinterIsAcceptingJobs</code> object.
+    */
+   protected PrinterIsAcceptingJobs(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PrinterIsAcceptingJobs</code> itself
+    */
+   public Class getCategory()
+   {
+     return PrinterIsAcceptingJobs.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "printer-is-accepting-jobs";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterLocation.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterLocation.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterLocation.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterLocation.java	Wed Oct 20 12:03:39 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintServiceAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class PrinterLocation extends TextSyntax
    implements PrintServiceAttribute
  {
*************** public final class PrinterLocation exten
*** 50,55 ****
--- 55,61 ----
     * Creates a <code>PrinterLocation</code> object.
     *
     * @param printerLocation the printer location
+    * @param locale the locale of the location, null means default locale
     *
     * @exception NullPointerException if printerLocation is null
     */
*************** public final class PrinterLocation exten
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class PrinterLocation exten
*** 78,84 ****
     *
     * @return the class <code>PrinterLocation</code> itself
     */
!   public final Class getCategory()
    {
      return PrinterLocation.class;
    }
--- 84,90 ----
     *
     * @return the class <code>PrinterLocation</code> itself
     */
!   public Class getCategory()
    {
      return PrinterLocation.class;
    }
*************** public final class PrinterLocation exten
*** 88,94 ****
     *
     * @return the string "printer-location"
     */
!   public final String getName()
    {
      return "printer-location";
    }
--- 94,100 ----
     *
     * @return the string "printer-location"
     */
!   public String getName()
    {
      return "printer-location";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterMakeAndModel.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterMakeAndModel.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterMakeAndModel.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterMakeAndModel.java	Wed Oct 20 12:03:39 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintServiceAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class PrinterMakeAndModel extends TextSyntax
    implements PrintServiceAttribute
  {
*************** public final class PrinterMakeAndModel e
*** 50,55 ****
--- 55,61 ----
     * Creates a <code>PrinterMakeAndModel</code> object.
     *
     * @param makeAndModel the make and model string
+    * @param locale the locale of the make and model, null means default locale
     *
     * @exception NullPointerException if makeAndModel is null
     */
*************** public final class PrinterMakeAndModel e
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class PrinterMakeAndModel e
*** 78,84 ****
     *
     * @return the class <code>PrinterMakeAndModel</code> itself
     */
!   public final Class getCategory()
    {
      return PrinterMakeAndModel.class;
    }
--- 84,90 ----
     *
     * @return the class <code>PrinterMakeAndModel</code> itself
     */
!   public Class getCategory()
    {
      return PrinterMakeAndModel.class;
    }
*************** public final class PrinterMakeAndModel e
*** 88,94 ****
     *
     * @return the string "printer-make-and-model"
     */
!   public final String getName()
    {
      return "printer-make-and-model";
    }
--- 94,100 ----
     *
     * @return the string "printer-make-and-model"
     */
!   public String getName()
    {
      return "printer-make-and-model";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterMessageFromOperator.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterMessageFromOperator.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterMessageFromOperator.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterMessageFromOperator.java	Wed Oct 20 12:03:39 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintServiceAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class PrinterMessageFromOperator extends TextSyntax
    implements PrintServiceAttribute
  {
*************** public final class PrinterMessageFromOpe
*** 50,55 ****
--- 55,61 ----
     * Creates a <code>PrinterMessageFromOperator</code> object.
     *
     * @param message the message
+    * @param locale the locale of the message, null means default locale
     *
     * @exception NullPointerException if message is null
     */
*************** public final class PrinterMessageFromOpe
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class PrinterMessageFromOpe
*** 78,84 ****
     *
     * @return the class <code>PrinterMessageFromOperator</code> itself
     */
!   public final Class getCategory()
    {
      return PrinterMessageFromOperator.class;
    }
--- 84,90 ----
     *
     * @return the class <code>PrinterMessageFromOperator</code> itself
     */
!   public Class getCategory()
    {
      return PrinterMessageFromOperator.class;
    }
*************** public final class PrinterMessageFromOpe
*** 88,94 ****
     *
     * @return the string "printer-message-from-operator"
     */
!   public final String getName()
    {
      return "printer-message-from-operator";
    }
--- 94,100 ----
     *
     * @return the string "printer-message-from-operator"
     */
!   public String getName()
    {
      return "printer-message-from-operator";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterMoreInfo.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterMoreInfo.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterMoreInfo.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterMoreInfo.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,81 ----
+ /* PrinterMoreInfo.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import java.net.URI;
+ 
+ import javax.print.attribute.PrintServiceAttribute;
+ import javax.print.attribute.URISyntax;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class PrinterMoreInfo extends URISyntax
+   implements PrintServiceAttribute
+ {
+   private static final long serialVersionUID = 4555850007675338574L;
+ 
+   /**
+    * Constructs a <code>PrinterMoreInfo</code> object.
+    */
+   public PrinterMoreInfo(URI uri)
+   {
+     super(uri);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PrinterMoreInfo</code> itself
+    */
+   public Class getCategory()
+   {
+     return PrinterMoreInfo.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "printer-more-info";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterMoreInfoManufacturer.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterMoreInfoManufacturer.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterMoreInfoManufacturer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterMoreInfoManufacturer.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,81 ----
+ /* PrinterMoreInfoManufacturer.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import java.net.URI;
+ 
+ import javax.print.attribute.PrintServiceAttribute;
+ import javax.print.attribute.URISyntax;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class PrinterMoreInfoManufacturer extends URISyntax
+   implements PrintServiceAttribute
+ {
+   private static final long serialVersionUID = 3323271346485076608L;
+ 
+   /**
+    * Constructs a <code>PrinterMoreInfoManufacturer</code> object.
+    */
+   public PrinterMoreInfoManufacturer(URI uri)
+   {
+     super(uri);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PrinterMoreInfoManufacturer</code> itself
+    */
+   public Class getCategory()
+   {
+     return PrinterMoreInfoManufacturer.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "printer-more-info-manufacturer";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterName.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterName.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterName.java	Fri Jan  9 11:26:42 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterName.java	Wed Oct 20 12:03:39 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintServiceAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class PrinterName extends TextSyntax
    implements PrintServiceAttribute
  {
*************** public final class PrinterName extends T
*** 50,55 ****
--- 55,61 ----
     * Creates a <code>PrinterName</code> object.
     *
     * @param printerName the printer name
+    * @param locale the locale of the name, null means default locale
     *
     * @exception NullPointerException if printerName is null
     */
*************** public final class PrinterName extends T
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class PrinterName extends T
*** 78,84 ****
     *
     * @return the class <code>PrinterName</code> itself
     */
!   public final Class getCategory()
    {
      return PrinterName.class;
    }
--- 84,90 ----
     *
     * @return the class <code>PrinterName</code> itself
     */
!   public Class getCategory()
    {
      return PrinterName.class;
    }
*************** public final class PrinterName extends T
*** 88,94 ****
     *
     * @return the string "printer-name"
     */
!   public final String getName()
    {
      return "printer-name";
    }
--- 94,100 ----
     *
     * @return the string "printer-name"
     */
!   public String getName()
    {
      return "printer-name";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterResolution.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterResolution.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterResolution.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterResolution.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,82 ----
+ /* PrinterMoreInfoManufacturer.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ import javax.print.attribute.ResolutionSyntax;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class PrinterResolution extends ResolutionSyntax
+   implements DocAttribute, PrintJobAttribute, PrintRequestAttribute
+ {
+   private static final long serialVersionUID = 13090306561090558L;
+ 
+   /**
+    * Constructs a <code>PrinterResolution</code> object.
+    */
+   public PrinterResolution(int crossFeedResolution, int feedResolution,
+                            int units)
+   {
+     super(crossFeedResolution, feedResolution, units);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PrinterResolution</code> itself
+    */
+   public Class getCategory()
+   {
+     return PrinterResolution.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "printer-resolution";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterState.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterState.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterState.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterState.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,84 ----
+ /* PrinterState.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintServiceAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class PrinterState extends EnumSyntax
+   implements PrintServiceAttribute
+ {
+   private static final long serialVersionUID = -649578618346507718L;
+ 
+   public static final PrinterState UNKNOWN = new PrinterState(0);
+   public static final PrinterState IDLE = new PrinterState(1);
+   public static final PrinterState PROCESSING = new PrinterState(2);
+   public static final PrinterState STOPPED = new PrinterState(3);
+ 
+   /**
+    * Constructs a <code>PrinterState</code> object.
+    */
+   protected PrinterState(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PrinterState</code> itself
+    */
+   public Class getCategory()
+   {
+     return PrinterState.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "printer-state";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterStateReason.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterStateReason.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterStateReason.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterStateReason.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,140 ----
+ /* PrinterStateReason.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.Attribute;
+ import javax.print.attribute.EnumSyntax;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class PrinterStateReason extends EnumSyntax
+   implements Attribute
+ {
+   private static final long serialVersionUID = -1623720656201472593L;
+ 
+   public static final PrinterStateReason OTHER = new PrinterStateReason(0);
+   public static final PrinterStateReason MEDIA_NEEDED =
+     new PrinterStateReason(1);
+   public static final PrinterStateReason MEDIA_JAM = new PrinterStateReason(2);
+   public static final PrinterStateReason MOVING_TO_PAUSED =
+     new PrinterStateReason(3);
+   public static final PrinterStateReason PAUSED = new PrinterStateReason(4);
+   public static final PrinterStateReason SHUTDOWN = new PrinterStateReason(5);
+   public static final PrinterStateReason CONNECTING_TO_DEVICE =
+     new PrinterStateReason(6);
+   public static final PrinterStateReason TIMED_OUT = new PrinterStateReason(7);
+   public static final PrinterStateReason STOPPING = new PrinterStateReason(8);
+   public static final PrinterStateReason STOPPED_PARTLY =
+     new PrinterStateReason(9);
+   public static final PrinterStateReason TONER_LOW =
+     new PrinterStateReason(10);
+   public static final PrinterStateReason TONER_EMPTY =
+     new PrinterStateReason(11);
+   public static final PrinterStateReason SPOOL_AREA_FULL =
+     new PrinterStateReason(12);
+   public static final PrinterStateReason COVER_OPEN =
+     new PrinterStateReason(13);
+   public static final PrinterStateReason INTERLOCK_OPEN =
+     new PrinterStateReason(14);
+   public static final PrinterStateReason DOOR_OPEN =
+     new PrinterStateReason(15);
+   public static final PrinterStateReason INPUT_TRAY_MISSING =
+     new PrinterStateReason(16);
+   public static final PrinterStateReason MEDIA_LOW =
+     new PrinterStateReason(17);
+   public static final PrinterStateReason MEDIA_EMPTY =
+     new PrinterStateReason(18);
+   public static final PrinterStateReason OUTPUT_TRAY_MISSING =
+     new PrinterStateReason(19);
+   public static final PrinterStateReason OUTPUT_AREA_ALMOST_FULL =
+     new PrinterStateReason(20);
+   public static final PrinterStateReason OUTPUT_AREA_FULL =
+     new PrinterStateReason(21);
+   public static final PrinterStateReason MARKER_SUPPLY_LOW =
+     new PrinterStateReason(22);
+   public static final PrinterStateReason MARKER_SUPPLY_EMPTY =
+     new PrinterStateReason(23);
+   public static final PrinterStateReason MARKER_WASTE_ALMOST_FULL =
+     new PrinterStateReason(24);
+   public static final PrinterStateReason MARKER_WASTE_FULL =
+     new PrinterStateReason(25);
+   public static final PrinterStateReason FUSER_OVER_TEMP =
+     new PrinterStateReason(26);
+   public static final PrinterStateReason FUSER_UNDER_TEMP =
+     new PrinterStateReason(27);
+   public static final PrinterStateReason OPC_NEAR_EOL =
+     new PrinterStateReason(28);
+   public static final PrinterStateReason OPC_LIFE_OVER =
+     new PrinterStateReason(29);
+   public static final PrinterStateReason DEVELOPER_LOW =
+     new PrinterStateReason(30);
+   public static final PrinterStateReason DEVELOPER_EMPTY =
+     new PrinterStateReason(31);
+   public static final PrinterStateReason INTERPRETER_RESOURCE_UNAVAILABLE =
+     new PrinterStateReason(32);
+ 
+   /**
+    * Constructs a <code>PrinterStateReason</code> object.
+    */
+   protected PrinterStateReason(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PrintStateReason</code> itself
+    */
+   public Class getCategory()
+   {
+     return PrinterStateReason.class;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "printer-state-reason"
+    */
+   public String getName()
+   {
+     return "printer-state-reason";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterStateReasons.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterStateReasons.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterStateReasons.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterStateReasons.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,72 ----
+ /* PrinterStateReasons.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import java.util.HashMap;
+ 
+ import javax.print.attribute.PrintServiceAttribute;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class PrinterStateReasons extends HashMap
+   implements PrintServiceAttribute
+ {
+   private static final long serialVersionUID = -3731791085163619457L;
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PrintStateReasons</code> itself
+    */
+   public Class getCategory()
+   {
+     return PrinterStateReasons.class;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "printer-state-reasons"
+    */
+   public String getName()
+   {
+     return "printer-state-reasons";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterURI.java gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterURI.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/PrinterURI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/PrinterURI.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,81 ----
+ /* PrinterURI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import java.net.URI;
+ 
+ import javax.print.attribute.PrintServiceAttribute;
+ import javax.print.attribute.URISyntax;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class PrinterURI extends URISyntax
+   implements PrintServiceAttribute
+ {
+   private static final long serialVersionUID = 7923912792485606497L;
+ 
+   /**
+    * Constructs a <code>PrinterURI</code> object.
+    */
+   public PrinterURI(URI uri)
+   {
+     super(uri);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>PrinterURI</code> itself
+    */
+   public Class getCategory()
+   {
+     return PrinterURI.class;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "printer-uri"
+    */
+   public String getName()
+   {
+     return "printer-uri";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/QueuedJobCount.java gcc-4.0.0/libjava/javax/print/attribute/standard/QueuedJobCount.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/QueuedJobCount.java	Sat Dec 27 14:21:08 2003
--- gcc-4.0.0/libjava/javax/print/attribute/standard/QueuedJobCount.java	Sat May 15 20:39:10 2004
*************** public final class QueuedJobCount extend
*** 68,74 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 68,74 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class QueuedJobCount extend
*** 83,89 ****
     *
     * @return the class <code>QueuedJobCount</code> itself
     */
!   public final Class getCategory()
    {
      return QueuedJobCount.class;
    }
--- 83,89 ----
     *
     * @return the class <code>QueuedJobCount</code> itself
     */
!   public Class getCategory()
    {
      return QueuedJobCount.class;
    }
*************** public final class QueuedJobCount extend
*** 93,99 ****
     *
     * @return the string "queued-job-count"
     */
!   public final String getName()
    {
      return "queued-job-count";
    }
--- 93,99 ----
     *
     * @return the string "queued-job-count"
     */
!   public String getName()
    {
      return "queued-job-count";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/ReferenceUriSchemesSupported.java gcc-4.0.0/libjava/javax/print/attribute/standard/ReferenceUriSchemesSupported.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/ReferenceUriSchemesSupported.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/ReferenceUriSchemesSupported.java	Wed Oct 20 12:03:39 2004
***************
*** 0 ****
--- 1,96 ----
+ /* ReferenceUriSchemesSupported.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.Attribute;
+ import javax.print.attribute.EnumSyntax;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class ReferenceUriSchemesSupported extends EnumSyntax
+   implements Attribute
+ {
+   private static final long serialVersionUID = -8989076942813442805L;
+ 
+   public static final ReferenceUriSchemesSupported FTP =
+     new ReferenceUriSchemesSupported(0);
+   public static final ReferenceUriSchemesSupported HTTP =
+     new ReferenceUriSchemesSupported(1);
+   public static final ReferenceUriSchemesSupported HTTPS =
+     new ReferenceUriSchemesSupported(2);
+   public static final ReferenceUriSchemesSupported GOPHER =
+     new ReferenceUriSchemesSupported(3);
+   public static final ReferenceUriSchemesSupported NEWS =
+     new ReferenceUriSchemesSupported(4);
+   public static final ReferenceUriSchemesSupported NNTP =
+     new ReferenceUriSchemesSupported(5);
+   public static final ReferenceUriSchemesSupported WAIS =
+     new ReferenceUriSchemesSupported(6);
+   public static final ReferenceUriSchemesSupported FILE =
+     new ReferenceUriSchemesSupported(7);
+ 
+     /**
+      * Constructs a <code>ReferenceUriSchemeSupported</code> object.
+      */
+   protected ReferenceUriSchemesSupported(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>ReferenceUriSchemesSupported</code> itself
+    */
+   public Class getCategory()
+   {
+     return ReferenceUriSchemesSupported.class;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "reference-uri-schemes-supported"
+    */
+   public String getName()
+   {
+     return "reference-uri-schemes-supported";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/RequestingUserName.java gcc-4.0.0/libjava/javax/print/attribute/standard/RequestingUserName.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/RequestingUserName.java	Sat Jan 10 22:16:01 2004
--- gcc-4.0.0/libjava/javax/print/attribute/standard/RequestingUserName.java	Wed Oct 20 12:03:40 2004
*************** this exception to your version of the li
*** 35,46 ****
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.print.attribute.standard;
  
  import java.util.Locale;
+ 
  import javax.print.attribute.PrintRequestAttribute;
  import javax.print.attribute.TextSyntax;
  
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
  public final class RequestingUserName extends TextSyntax
    implements PrintRequestAttribute
  {
*************** public final class RequestingUserName ex
*** 50,55 ****
--- 55,61 ----
     * Creates a <code>RequestingUserName</code> object.
     *
     * @param userName the job name
+    * @param locale the locale of the user, null means default locale
     *
     * @exception NullPointerException if userName is null
     */
*************** public final class RequestingUserName ex
*** 63,69 ****
     *
     * @param obj the object to test
     *
!    * @returns true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
--- 69,75 ----
     *
     * @param obj the object to test
     *
!    * @return true if both objects are equal, false otherwise.
     */
    public boolean equals(Object obj)
    {
*************** public final class RequestingUserName ex
*** 74,94 ****
    }
  
    /**
!    * Returns category of this class.
     *
     * @return the class <code>RequestingUserName</code> itself
     */
!   public final Class getCategory()
    {
      return RequestingUserName.class;
    }
  
    /**
!    * Returns name of this class.
     *
     * @return the string "requesting-user-name"
     */
!   public final String getName()
    {
      return "requesting-user-name";
    }
--- 80,100 ----
    }
  
    /**
!    * Returns category of this attribute.
     *
     * @return the class <code>RequestingUserName</code> itself
     */
!   public Class getCategory()
    {
      return RequestingUserName.class;
    }
  
    /**
!    * Returns name of this attribute.
     *
     * @return the string "requesting-user-name"
     */
!   public String getName()
    {
      return "requesting-user-name";
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/Severity.java gcc-4.0.0/libjava/javax/print/attribute/standard/Severity.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/Severity.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/Severity.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,83 ----
+ /* Severity.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.Attribute;
+ import javax.print.attribute.EnumSyntax;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class Severity extends EnumSyntax
+   implements Attribute
+ {
+   private static final long serialVersionUID = 8781881462717925380L;
+ 
+   public static final Severity REPORT = new Severity(0);
+   public static final Severity WARNING = new Severity(1);
+   public static final Severity ERROR = new Severity(2);
+ 
+   /**
+    * Constructs a <code>Severity</code> object.
+    */
+   protected Severity(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>Severity</code> itself
+    */
+   public Class getCategory()
+   {
+     return Severity.class;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "severity"
+    */
+   public String getName()
+   {
+     return "severity";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/SheetCollate.java gcc-4.0.0/libjava/javax/print/attribute/standard/SheetCollate.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/SheetCollate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/SheetCollate.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,81 ----
+ /* SheetCollate.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class SheetCollate extends EnumSyntax
+   implements DocAttribute, PrintRequestAttribute, PrintJobAttribute
+ {
+   private static final long serialVersionUID = 7080587914259873003L;
+ 
+   public static final SheetCollate UNCOLLATED = new SheetCollate(0);
+   public static final SheetCollate COLLATED = new SheetCollate(1);
+ 
+   protected SheetCollate(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>SheetCollate</code> itself
+    */
+   public Class getCategory()
+   {
+     return SheetCollate.class;
+   }
+ 
+   /**
+    * Returns name of this class.
+    *
+    * @return the string "sheet-collate"
+    */
+   public String getName()
+   {
+     return "sheet-collate";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/attribute/standard/Sides.java gcc-4.0.0/libjava/javax/print/attribute/standard/Sides.java
*** gcc-3.4.3/libjava/javax/print/attribute/standard/Sides.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/attribute/standard/Sides.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,89 ----
+ /* Sides.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.attribute.standard;
+ 
+ import javax.print.attribute.DocAttribute;
+ import javax.print.attribute.EnumSyntax;
+ import javax.print.attribute.PrintJobAttribute;
+ import javax.print.attribute.PrintRequestAttribute;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public final class Sides extends EnumSyntax
+   implements DocAttribute, PrintRequestAttribute, PrintJobAttribute
+ {
+   private static final long serialVersionUID = -6890309414893262822L;
+ 
+   public static final Sides ONE_SIDED = new Sides(0);
+   public static final Sides TWO_SIDED_LONG_EDGE = new Sides(1);
+   public static final Sides TWO_SIDED_SHORT_EDGE = new Sides(2);
+   public static final Sides DUPLEX = new Sides(3);
+   public static final Sides TUMBLE = new Sides(4);
+ 
+   /**
+    * Creates a <code>Sides</code> object.
+    *
+    * @param value the number of sides
+    */
+   protected Sides(int value)
+   {
+     super(value);
+   }
+ 
+   /**
+    * Returns category of this class.
+    *
+    * @return the class <code>Sides</code> itself
+    */
+   public Class getCategory()
+   {
+     return Sides.class;
+   }
+ 
+   /**
+    * Returns the name of this attribute.
+    *
+    * @return the name
+    */
+   public String getName()
+   {
+     return "sides";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/event/PrintEvent.java gcc-4.0.0/libjava/javax/print/event/PrintEvent.java
*** gcc-3.4.3/libjava/javax/print/event/PrintEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/event/PrintEvent.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,67 ----
+ /* PrintEvent.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.event;
+ 
+ import java.util.EventObject;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class PrintEvent extends EventObject
+ {
+   /**
+    * Constructs a <code>PrintEvent</code> object.
+    * 
+    * @param source the source of this event
+    */
+   public PrintEvent(Object source)
+   {
+     super(source);
+   }
+ 
+   /**
+    * Returns a string representation of this object.
+    * 
+    * @return the string representation
+    */
+   public String toString()
+   {
+     return "PrintEvent on " + getSource().toString();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/event/PrintJobAdapter.java gcc-4.0.0/libjava/javax/print/event/PrintJobAdapter.java
*** gcc-3.4.3/libjava/javax/print/event/PrintJobAdapter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/event/PrintJobAdapter.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,117 ----
+ /* PrintJobAdapter.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.event;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public abstract class PrintJobAdapter
+   implements PrintJobListener
+ {
+   /**
+    * Constructs a <code>PrintJobAdapter</code> object.
+    */
+   public PrintJobAdapter()
+   {
+     // Do nothing here.
+   }
+   
+   /**
+    * Called to notify the client that all data has bin successfully transferred
+    * to the print service.
+    * 
+    * <p>The default implementation does nothing</p>
+    */
+   public void printDataTransferCompleted(PrintJobEvent event)
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Called to notify the client that a print job was canceled.
+    * 
+    * <p>The default implementation does nothing</p>
+    */
+   public void printJobCanceled(PrintJobEvent event)
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Called to notify the client that a print job was successfully completed.
+    * 
+    * <p>The default implementation does nothing</p>
+    */
+   public void printJobCompleted(PrintJobEvent event)
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Called to notify the client that a print job failed to complete
+    * successfully.
+    * 
+    * <p>The default implementation does nothing</p>
+    */
+   public void printJobFailed(PrintJobEvent event)
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Called to notify the client that no more job events will be send.
+    * 
+    * <p>The default implementation does nothing</p>
+    */
+   public void printJobNoMoreEvents(PrintJobEvent event)
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Called to notify the client that a problem occured during printing
+    * but the user may be able to fix it.
+    * 
+    * <p>The default implementation does nothing</p>
+    */
+   public void printJobRequiresAttention(PrintJobEvent event)
+   {
+     // Do nothing here.
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/event/PrintJobAttributeEvent.java gcc-4.0.0/libjava/javax/print/event/PrintJobAttributeEvent.java
*** gcc-3.4.3/libjava/javax/print/event/PrintJobAttributeEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/event/PrintJobAttributeEvent.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,85 ----
+ /* PrintJobAttributeEvent.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.event;
+ 
+ import javax.print.DocPrintJob;
+ import javax.print.attribute.PrintJobAttributeSet;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class PrintJobAttributeEvent extends PrintEvent
+ {
+   private static final long serialVersionUID = -6534469883874742101L;
+   
+   private PrintJobAttributeSet attributes;
+   
+   /**
+    * Constructs a <code>PrintJobAttributeEvent</code> object.
+    * 
+    * @param source the source of this event
+    * @param attributes the attribute changes being reported
+    */
+   public PrintJobAttributeEvent(DocPrintJob source,
+                                 PrintJobAttributeSet attributes)
+   {
+     super(source);
+     this.attributes = attributes;
+   }
+ 
+   /**
+    * Returns the print job generating this event.
+    * 
+    * @return the print job
+    */
+   public DocPrintJob getPrintJob()
+   {
+     return (DocPrintJob) getSource();
+   }
+ 
+   /**
+    * Returns the attributes that changed and their new values.
+    * 
+    * @return the changes attributes
+    */
+   public PrintJobAttributeSet getAttributes()
+   {
+     return attributes;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/event/PrintJobAttributeListener.java gcc-4.0.0/libjava/javax/print/event/PrintJobAttributeListener.java
*** gcc-3.4.3/libjava/javax/print/event/PrintJobAttributeListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/event/PrintJobAttributeListener.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,52 ----
+ /* PrintJobAttributeListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.event;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface PrintJobAttributeListener
+ {
+   /**
+    * Notifies the listener of an attribute change.
+    * 
+    * @param event the event
+    */
+   void attributeUpdate(PrintJobAttributeEvent event);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/event/PrintJobEvent.java gcc-4.0.0/libjava/javax/print/event/PrintJobEvent.java
*** gcc-3.4.3/libjava/javax/print/event/PrintJobEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/event/PrintJobEvent.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,90 ----
+ /* PrintEvent.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.event;
+ 
+ import javax.print.DocPrintJob;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class PrintJobEvent extends PrintEvent
+ {
+   private static final long serialVersionUID = -1711656903622072997L;
+ 
+   public static final int DATA_TRANSFER_COMPLETE = 106;
+   public static final int JOB_CANCELED = 101;
+   public static final int JOB_COMPLETE = 102;
+   public static final int JOB_FAILED = 103;
+   public static final int NO_MORE_EVENTS = 105;
+   public static final int REQUIRES_ATTENTION = 104;
+   
+   private int reason;
+   
+   /**
+    * Constructs a <code>PrintJobEvent</code> object.
+    * 
+    * @param source the source generating this event
+    * @param reason the reason for this event
+    */
+   public PrintJobEvent(DocPrintJob source, int reason)
+   {
+     super(source);
+     this.reason = reason;
+   }
+ 
+   /**
+    * Returns the reason for this event.
+    * 
+    * @return the reason
+    */
+   public int getPrintEventType()
+   {
+     return reason;
+   }
+ 
+   /**
+    * Returns the print job that generated this event.
+    * 
+    * @return the print job
+    */ 
+   public DocPrintJob getPrintJob()
+   {
+     return (DocPrintJob) getSource();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/event/PrintJobListener.java gcc-4.0.0/libjava/javax/print/event/PrintJobListener.java
*** gcc-3.4.3/libjava/javax/print/event/PrintJobListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/event/PrintJobListener.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,87 ----
+ /* PrintJobListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.event;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de) */
+ public interface PrintJobListener
+ {
+   /**
+    * Notifies the listener that all data has been successfully transferred
+    * to the print service.
+    * 
+    * @param event the event
+    */
+   void printDataTransferCompleted(PrintJobEvent event);
+   
+   /**
+    * Notifies the listener that a print job got canceled.
+    * 
+    * @param event the event
+    */
+   void printJobCanceled(PrintJobEvent event);
+   
+   /**
+    * Notifies the listener that a print job has completed.
+    * 
+    * @param event the event
+    */
+   void printJobCompleted(PrintJobEvent event);
+   
+   /**
+    * Notifies the listener that a print job has failed to complete.
+    * 
+    * @param event the event.
+    */
+   void printJobFailed(PrintJobEvent event);
+   
+   /**
+    * Notifies the listener that no more events will be delivered.
+    * 
+    * @param event the event
+    */
+   void printJobNoMoreEvents(PrintJobEvent event);
+   
+   /**
+    * Notifies the listener that an error occured and the user might be able to fix it.
+    * 
+    * @param event the event
+    */
+   void printJobRequiresAttention(PrintJobEvent event);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/event/PrintServiceAttributeEvent.java gcc-4.0.0/libjava/javax/print/event/PrintServiceAttributeEvent.java
*** gcc-3.4.3/libjava/javax/print/event/PrintServiceAttributeEvent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/event/PrintServiceAttributeEvent.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,83 ----
+ /* PrintServiceAttributeEvent.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.event;
+ 
+ import javax.print.PrintService;
+ import javax.print.attribute.PrintServiceAttributeSet;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class PrintServiceAttributeEvent extends PrintEvent
+ {
+   private PrintServiceAttributeSet attributes;
+   
+   /**
+    * Constructs a <code>PrintServiceAttributeEvent</code> object.
+    * 
+    * @param source the source of this event
+    * @param attributes the attribute changes being reported
+    */
+   public PrintServiceAttributeEvent(PrintService source,
+                                     PrintServiceAttributeSet attributes)
+   {
+     super(source);
+     this.attributes = attributes;
+   }
+ 
+   /**
+    * Returns the print service that generated this event.
+    * 
+    * @return the print service
+    */
+   public PrintService getPrintService()
+   {
+     return (PrintService) getSource();
+   }
+ 
+   /**
+    * Returns the changed attributes this event reports.
+    * 
+    * @return the changed attributes
+    */
+   public PrintServiceAttributeSet getAttributes()
+   {
+     return attributes;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/print/event/PrintServiceAttributeListener.java gcc-4.0.0/libjava/javax/print/event/PrintServiceAttributeListener.java
*** gcc-3.4.3/libjava/javax/print/event/PrintServiceAttributeListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/print/event/PrintServiceAttributeListener.java	Sat May 15 20:39:10 2004
***************
*** 0 ****
--- 1,52 ----
+ /* PrintServiceAttributeListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.print.event;
+ 
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public interface PrintServiceAttributeListener
+ {
+   /**
+    * Notifies the listener that some attributes have changed.
+    * 
+    * @param event the event
+    */
+   void attributeUpdate(PrintServiceAttributeEvent event);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/BAD_OPERATION.java gcc-4.0.0/libjava/javax/rmi/BAD_OPERATION.java
*** gcc-3.4.3/libjava/javax/rmi/BAD_OPERATION.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/BAD_OPERATION.java	Thu Jan  1 00:00:00 1970
***************
*** 1,4 ****
- package javax.rmi;
- 
- /** XXX - Stub till we have org.omg.CORBA */
- public class BAD_OPERATION extends Exception { }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/ClassDesc.java gcc-4.0.0/libjava/javax/rmi/CORBA/ClassDesc.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/ClassDesc.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/ClassDesc.java	Thu Jan  1 00:00:00 1970
***************
*** 1,55 ****
- /* ClassDesc.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.rmi.CORBA;
- 
- import java.io.Serializable;
- 
- public class ClassDesc
-   implements Serializable
- {
-   /*
-    * The following is serialized form required by Java API Doc
-    */
-   private String repid;
-   private String codebase;
-   
-   public ClassDesc()
-   {
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/ObjectImpl.java gcc-4.0.0/libjava/javax/rmi/CORBA/ObjectImpl.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/ObjectImpl.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/ObjectImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- package javax.rmi.CORBA;
- 
- /** XXX - Stub till we have org.omg.CORBA */
- public class ObjectImpl
- {
-   public ObjectImpl _orb() { return null; }
-   public String object_to_string(ObjectImpl o) 
-     throws javax.rmi.BAD_OPERATION { return null; }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/PortableRemoteObjectDelegate.java gcc-4.0.0/libjava/javax/rmi/CORBA/PortableRemoteObjectDelegate.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/PortableRemoteObjectDelegate.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/PortableRemoteObjectDelegate.java	Thu Jan  1 00:00:00 1970
***************
*** 1,63 ****
- /* PortableRemoteObjectDelegate.java -- Interface supporting PortableRemoteObject
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.rmi.CORBA;
- 
- import java.rmi.*;
- 
- /**
-  * A delegate is a singleton class that support delegation for method
-  * implementation in PortableRemoteObject.
-  */
- public interface PortableRemoteObjectDelegate
- {
-   void connect(Remote target, Remote source)
-     throws RemoteException;
-         
-   void exportObject(Remote obj)
-     throws RemoteException;
- 
-   Object narrow(Object narrowFrom, Class narrowTo)
-     throws ClassCastException;
-         
-   Remote toStub(Remote obj)
-     throws NoSuchObjectException;
-   
-   void unexportObject(Remote obj)
-     throws NoSuchObjectException;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/Stub.java gcc-4.0.0/libjava/javax/rmi/CORBA/Stub.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/Stub.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/Stub.java	Thu Jan  1 00:00:00 1970
***************
*** 1,120 ****
- /* 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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.rmi.CORBA;
- 
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.rmi.RemoteException;
- //import org.omg.CORBA.ORB;
- //import org.omg.CORBA_2_3.portable.ObjectImpl;
- //import org.omg.CORBA.portable.ObjectImpl;
- import gnu.javax.rmi.CORBA.DelegateFactory;
- import gnu.javax.rmi.CORBA.GetDelegateInstanceException;
- 
- public abstract class Stub extends ObjectImpl
-   implements Serializable
- {
-   private transient StubDelegate delegate;
-                 
-   protected Stub()
-   {
-     try
-       {
- 	delegate = (StubDelegate)DelegateFactory.getInstance("Stub");
-       }
-     catch(GetDelegateInstanceException e)
-       {
- 	delegate = null;
-       }
-   }
- 
-   public int hashCode()
-   {
-     if(delegate != null)
-       return delegate.hashCode(this);
-     else
-       return 0;
-   }
- 
-   public boolean equals(Object obj)
-   {
-     if(delegate != null)
-       return delegate.equals(this, obj);
-     else
-       return false;
-   }
- 
-   public String toString()
-   {
-     String s = null;
-     if(delegate != null)
-       s = delegate.toString(this);
-     if(s == null)
-       s = super.toString();
-     return s;
-   }
- 
-   // XXX javax.rmi.ORB -> org.omg.CORBA.ORB
-   public void connect(javax.rmi.ORB orb)
-     throws RemoteException
-   {
-     if(delegate != null)
-       delegate.connect(this, orb);
-   }
- 
-   /**
-    * The following two routines are required by serialized form of Java API doc.
-    */
-   private void readObject(ObjectInputStream stream)
-     throws IOException, ClassNotFoundException
-   {
-     if(delegate != null)
-       delegate.readObject(this, stream);
-   }
- 
-   private void writeObject(ObjectOutputStream stream)
-     throws IOException
-   {
-     if(delegate != null)
-       delegate.writeObject(this, stream);
-   }
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/StubDelegate.java gcc-4.0.0/libjava/javax/rmi/CORBA/StubDelegate.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/StubDelegate.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/StubDelegate.java	Thu Jan  1 00:00:00 1970
***************
*** 1,65 ****
- /* StubDelegate.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.rmi.CORBA;
- 
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.rmi.RemoteException;
- //import org.omg.CORBA.ORB;
- 
- public interface StubDelegate
- {
- 
-   // XXX javax.rmi.ORB -> org.omg.CORBA.ORB
-   void connect(Stub self, javax.rmi.ORB orb)
-     throws RemoteException;
- 
-   boolean equals(Stub self, Object obj);
- 
-   int hashCode(Stub self);
- 
-   void readObject(Stub self, ObjectInputStream s)
-     throws IOException, ClassNotFoundException;
- 
-   String toString(Stub self);
- 
-   void writeObject(Stub self, ObjectOutputStream s)
-     throws IOException;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/SystemException.java gcc-4.0.0/libjava/javax/rmi/CORBA/SystemException.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/SystemException.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/SystemException.java	Thu Jan  1 00:00:00 1970
***************
*** 1,4 ****
- package javax.rmi.CORBA;
- 
- /** XXX - Stub till we have org.omg.CORBA */
- public class SystemException extends Exception { }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/Tie.java gcc-4.0.0/libjava/javax/rmi/CORBA/Tie.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/Tie.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/Tie.java	Thu Jan  1 00:00:00 1970
***************
*** 1,62 ****
- /* Tie.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.rmi.CORBA;
- 
- import java.rmi.Remote;
- //import org.omg.CORBA.ORB;
- //import org.omg.CORBA.portable.InvokeHandler;
- 
- public interface Tie // XXX extends InvokeHandler
- {
-     
-   void deactivate();
- 
-   Remote getTarget();
- 
-   // XXX javax.rmi.ORB -> org.omg.CORBA.ORB
-   javax.rmi.ORB orb();
-   
-   // XXX javax.rmi.ORB -> org.omg.CORBA.ORB
-   void orb(javax.rmi.ORB orb);
-   
-   void setTarget(Remote target);
-  
-   // XXX Object -> org.omg.CORBA.Object
-   Object thisObject();
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/Util.java gcc-4.0.0/libjava/javax/rmi/CORBA/Util.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/Util.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/Util.java	Thu Jan  1 00:00:00 1970
***************
*** 1,187 ****
- /* Util.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.rmi.CORBA;
- 
- import java.rmi.Remote;
- import java.rmi.RemoteException;
- import java.lang.Object;
- import java.io.*;
- //import org.omg.CORBA.*;
- //import org.omg.CORBA.portable.InputStream;
- //import org.omg.CORBA.portable.OutputStream;
- import gnu.javax.rmi.CORBA.DelegateFactory;
- import gnu.javax.rmi.CORBA.GetDelegateInstanceException;
- 
- public class Util
- {
- 
-   private static UtilDelegate delegate;
-   static
-   {
-     try
-       {
- 	delegate = (UtilDelegate)DelegateFactory.getInstance("Util");
-       }
-     catch(GetDelegateInstanceException e)
-       {
- 	delegate = null;
-       }
-   }
- 
-   private Util()
-   {
-   }
- 
-   // XXX - javax.rmi.ORB -> org.omg.CORBA.ORB
-   public static Object copyObject(Object obj, javax.rmi.ORB orb)
-     throws RemoteException
-   {
-     if(delegate != null)
-       return delegate.copyObject(obj, orb);
-     else
-       return null;
-   }
- 
-   // XXX - javax.rmi.ORB -> org.omg.CORBA.ORB
-   public static Object[] copyObjects(Object obj[], javax.rmi.ORB orb)
-     throws RemoteException
-   {
-     if(delegate != null)
-       return delegate.copyObjects(obj, orb);
-     else
-       return null;
-   }
-     
-   public static ValueHandler createValueHandler()
-   {
-     if(delegate != null)
-       return delegate.createValueHandler();
-     else
-       return null;
-   }
-     
-   public static String getCodebase(Class clz)
-   {
-     if(delegate != null)
-       return delegate.getCodebase(clz);
-     else
-       return null;
-   }
-     
-   public static Tie getTie(Remote target)
-   {
-     if(delegate != null)
-       return delegate.getTie(target);
-     else
-       return null;
-   }
- 
-   public static boolean isLocal(Stub stub)
-     throws RemoteException
-   {
-     if(delegate != null)
-       return delegate.isLocal(stub);
-     else
-       return false;
-   }
- 
-   public static Class loadClass(String className, String remoteCodebase, ClassLoader loader)
-     throws ClassNotFoundException
-   {
-     if(delegate != null)
-       return delegate.loadClass(className, remoteCodebase, loader);
-     else
-       throw new ClassNotFoundException(className + ": delegate == null");
-   }
-     
-   public static RemoteException mapSystemException(SystemException ex)
-   {
-     if(delegate != null)
-       return delegate.mapSystemException(ex);
-     else
-       return null;
-   }
- 
-   public static Object readAny(InputStream in)
-   {
-     if(delegate != null)
-       return delegate.readAny(in);
-     else
-       return null;
-   }
- 
-   public static void registerTarget(Tie tie, Remote target)
-   {
-     if(delegate != null)
-       delegate.registerTarget(tie, target);
-   }
-     
-   public static void unexportObject(Remote target)
-   {
-     if(delegate != null)
-       delegate.unexportObject(target);
-   }
-     
-   public static RemoteException wrapException(Throwable orig)
-   {
-     if(delegate != null)
-       return delegate.wrapException(orig);
-     else
-       return null;
-   }
-     
-   public static void writeAbstractObject(OutputStream out, Object obj)
-   {
-     if(delegate != null)
-       delegate.writeAbstractObject(out, obj);
-   }
-     
-   public static void writeAny(OutputStream out, Object obj)
-   {
-     if(delegate != null)
-       delegate.writeAny(out, obj);
-   }
-     
-   public static void writeRemoteObject(OutputStream out, Object obj)
-   {
-     if(delegate != null)
-       delegate.writeRemoteObject(out, obj);
-   }
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/UtilDelegate.java gcc-4.0.0/libjava/javax/rmi/CORBA/UtilDelegate.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/UtilDelegate.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/UtilDelegate.java	Thu Jan  1 00:00:00 1970
***************
*** 1,84 ****
- /* UtilDelegate.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.rmi.CORBA;
- 
- import java.rmi.Remote;
- import java.rmi.RemoteException;
- import java.io.*;
- //import org.omg.CORBA.ORB;
- //import org.omg.CORBA.SystemException;
- //import org.omg.CORBA.portable.InputStream;
- //import org.omg.CORBA.portable.OutputStream;
- 
- public interface UtilDelegate
- {
- 
-   // XXX javax.rmi.ORB -> org.omg.CORBA.ORB
-   Object copyObject(Object obj, javax.rmi.ORB orb) throws RemoteException;
-   
-   // XXX javax.rmi.ORB -> org.omg.CORBA.ORB
-   Object[] copyObjects(Object obj[], javax.rmi.ORB orb) throws RemoteException;
- 
-   ValueHandler createValueHandler();
-     
-   String getCodebase(Class clz);
-     
-   Tie getTie(Remote target);
-     
-   boolean isLocal(Stub stub) throws RemoteException;
- 
-   Class loadClass(String className, String remoteCodebase,
- 		  ClassLoader loader) throws ClassNotFoundException;
- 
-   RemoteException mapSystemException(SystemException ex);
- 
-   Object readAny(InputStream in);
- 
-   void registerTarget(Tie tie, Remote target);
-     
-   void unexportObject(Remote target);
-     
-   RemoteException wrapException(Throwable orig);
-     
-   void writeAbstractObject(OutputStream out, Object obj);
-     
-   void writeAny(OutputStream out, Object obj);
- 
-   void writeRemoteObject(OutputStream out, Object obj);
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/CORBA/ValueHandler.java gcc-4.0.0/libjava/javax/rmi/CORBA/ValueHandler.java
*** gcc-3.4.3/libjava/javax/rmi/CORBA/ValueHandler.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/CORBA/ValueHandler.java	Thu Jan  1 00:00:00 1970
***************
*** 1,63 ****
- /* ValueHandler.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.rmi.CORBA;
- 
- import java.io.*;
- //import org.omg.CORBA.portable.InputStream;
- //import org.omg.CORBA.portable.OutputStream;
- //import org.omg.SendingContext.RunTime;
- 
- public interface ValueHandler
- {
-   
-   String getRMIRepositoryID(Class clz);
-  
-   // XXX Runtime -> RunTime
-   Runtime getRunTimeCodeBase();
-   
-   boolean isCustomMarshaled(Class clz);
-   
-   // XXX Runtime -> RunTime
-   Serializable readValue(InputStream in, int offset, Class clz,
- 			 String repositoryID, Runtime sender);
-     
-   Serializable writeReplace(Serializable value);
-     
-   void writeValue(OutputStream out, Serializable value);
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/ORB.java gcc-4.0.0/libjava/javax/rmi/ORB.java
*** gcc-3.4.3/libjava/javax/rmi/ORB.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/ORB.java	Thu Jan  1 00:00:00 1970
***************
*** 1,4 ****
- package javax.rmi;
- 
- /** XXX - Stub till we have org.omg.CORBA */
- public class ORB { }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/rmi/PortableRemoteObject.java gcc-4.0.0/libjava/javax/rmi/PortableRemoteObject.java
*** gcc-3.4.3/libjava/javax/rmi/PortableRemoteObject.java	Sat Mar 29 21:23:25 2003
--- gcc-4.0.0/libjava/javax/rmi/PortableRemoteObject.java	Thu Jan  1 00:00:00 1970
***************
*** 1,114 ****
- /* PortableRemoteObject.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.rmi;
- 
- import java.rmi.Remote;
- import java.rmi.RemoteException;
- import java.rmi.NoSuchObjectException;
- import gnu.javax.rmi.CORBA.DelegateFactory;
- import gnu.javax.rmi.CORBA.GetDelegateInstanceException;
- import javax.rmi.CORBA.PortableRemoteObjectDelegate;
- import javax.rmi.CORBA.Util;
- 
- public class PortableRemoteObject
-   implements Remote /* why doc doesn't say should implement Remote */
- {
- 
-   private static PortableRemoteObjectDelegate delegate;
-   static
-   {
-     try
-       {
- 	delegate = (PortableRemoteObjectDelegate)DelegateFactory.getInstance
- 	  ("PortableRemoteObject");
-       }
-     catch(GetDelegateInstanceException e)
-       {
- 	e.printStackTrace();
- 	delegate = null;
-       }
-   }
- 
-   protected PortableRemoteObject()
-     throws RemoteException
-   {
-     if(delegate != null)
-       exportObject((Remote)this);
-   }
- 
-   public static void connect(Remote target, Remote source)
-     throws RemoteException
-   {
-     if(delegate != null)
-       delegate.connect(target, source);
-   }
-     
-   public static void exportObject(Remote obj)
-     throws RemoteException
-   {
-     if(delegate != null)
-       delegate.exportObject(obj);
-   }
- 
-   public static Object narrow(Object narrowFrom, Class narrowTo)
-     throws ClassCastException
-   {
-     if(delegate != null)
-       return delegate.narrow(narrowFrom, narrowTo);
-     else
-       return null;
-   }
- 
-   public static Remote toStub(Remote obj)
-     throws NoSuchObjectException
-   {
-     if(delegate != null)
-       return delegate.toStub(obj);
-     else
-       return null;
-   }
- 
-   public static void unexportObject(Remote obj)
-     throws NoSuchObjectException
-   {
-     if(delegate != null)
-       delegate.unexportObject(obj);
-   }
-   
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/AuthPermission.java gcc-4.0.0/libjava/javax/security/auth/AuthPermission.java
*** gcc-3.4.3/libjava/javax/security/auth/AuthPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/AuthPermission.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,146 ----
+ /* AuthPermission.java -- permissions related to authentication.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth;
+ 
+ import java.security.BasicPermission;
+ 
+ /**
+  * <p>A permission controlling access to authentication service. The
+  * <i>actions</i> field of auth permission objects is ignored; the whole
+  * of the permission is defined by the <i>target</i>.</p>
+  *
+  * <p>The authentication permission targets recognized are:</p>
+  *
+  * <dl>
+  * <dt><code>doAs</code></dt>
+  *
+  * <dd><p>Allows access to the {@link
+  * Subject#doAs(javax.security.auth.Subject  java.security.PrivilegedAction)}
+  * methods.</p></dd>
+  *
+  * <dt><code>doAsPrivileged</code></dt>
+  *
+  * <dd><p>Allows access to the {@link
+  * Subject#doAsPrivileged(javax.security.auth.Subject,
+  * java.security.PrivilegedAction, java.security.AccessControlContext)}
+  * methods.</p></dd>
+  *
+  * <dt><code>getSubject</code></dt>
+  *
+  * <dd><p>Allows access to the {@link Subject} associated with a
+  * thread.</p></dd>
+  *
+  * <dt><code>getSubjectFromDomainCombiner</code></dt>
+  *
+  * <dd><p>Allows access to the {@link Subject} associated with a
+  * {@link SubjectDomainCombiner}.</p></dd>
+  *
+  * <dt><code>setReadOnly</code></dt>
+  *
+  * <dd><p>Allows a {@link Subject} to be marked as read-only.</p></dd>
+  *
+  * <dt><code>modifyPrincipals</code></dt>
+  *
+  * <dd><p>Allows the set of principals of a subject to be modified.</p></dd>
+  *
+  * <dt><code>modifyPublicCredentials</code></dt>
+  *
+  * <dd><p>Allows the set of public credentials of a subject to be
+  * modified.</p></dd>
+  *
+  * <dt><code>modifyPrivateCredentials</code></dt>
+  *
+  * <dd><p>Allows the set of private credentials of a subject to be
+  * modified.</p></dd>
+  *
+  * <dt><code>refreshCredential</code></dt>
+  *
+  * <dd><p>Allows a {@link Refreshable} credential to be refreshed.</p></dd>
+  *
+  * <dt><code>destroyCredential</code></dt>
+  *
+  * <dd><p>Allows a {@link Destroyable} credential to be destroyed.</p></dd>
+  *
+  * <dt><code>createLoginContext.<i>name</i></code></dt>
+  *
+  * <dd><p>Allows a {@link javax.security.auth.login.LoginContext} for the
+  * given <i>name</i>. <i>name</i> can also be a wildcard (<code>'*'</code>),
+  * which allows the creation of a context with any name.</p></dd>
+  *
+  * <dt><code>getLoginConfiguration</code></dt>
+  *
+  * <dd><p>Allows the system-wide login {@link
+  * javax.security.auth.login.Configuration} to be retrieved.</p></dd>
+  *
+  * <dt><code>setLoginConfiguration</code></dt>
+  *
+  * <dd><p>Allows the system-wide login {@link
+  * javax.security.auth.login.Configuration} to be set.</p></dd>
+  *
+  * <dt><code>refreshLoginConfiguration</code></dt>
+  *
+  * <dd><p>Allows the system-wide login {@link
+  * javax.security.auth.login.Configuration} to be refreshed.</p></dd>
+  * </dl>
+  */
+ public final class AuthPermission extends BasicPermission
+ {
+ 
+   /**
+    * Creates a new authentication permission for the given target name.
+    *
+    * @param name The target name.
+    */
+   public AuthPermission (String name)
+   {
+     super (name);
+   }
+ 
+   /**
+    * Creates a new authentication permission for the given target name.
+    * The actions list is not used by this class.
+    *
+    * @param name The target name.
+    * @param actions The action list.
+    */
+   public AuthPermission (String name, String actions)
+   {
+     super (name, actions);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/DestroyFailedException.java gcc-4.0.0/libjava/javax/security/auth/DestroyFailedException.java
*** gcc-3.4.3/libjava/javax/security/auth/DestroyFailedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/DestroyFailedException.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,67 ----
+ /* DestroyFailedException.java -- signals an object could not be destroyed.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth;
+ 
+ /**
+  * An exception thrown when the {@link Destroyable#destroy()} method
+  * fails for a credential.
+  *
+  * @see Destroyable
+  */
+ public class DestroyFailedException extends Exception
+ {
+ 
+   /**
+    * Creates a new DestroyFailedException with no detail message.
+    */
+   public DestroyFailedException()
+   {
+     super();
+   }
+ 
+   /**
+    * Creates a new DestroyFailedException with a detail message.
+    *
+    * @param message The detail message.
+    */
+   public DestroyFailedException (String message)
+   {
+     super (message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/Destroyable.java gcc-4.0.0/libjava/javax/security/auth/Destroyable.java
*** gcc-3.4.3/libjava/javax/security/auth/Destroyable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/Destroyable.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,64 ----
+ /* Destroyable.java -- an immutable object that may be destroyed.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth;
+ 
+ /**
+  * An interface for objects that are immutable but whose sensitive
+  * data may be wiped out.
+  */
+ public interface Destroyable
+ {
+ 
+   /**
+    * Destroy this object, clearing all sensitive fields appropriately.
+    *
+    * @throws DestroyFailedException If this object could not be
+    *   destroyed.
+    * @throws SecurityException If the caller does not have permission
+    *   to destroy this object.
+    */
+   void destroy() throws DestroyFailedException;
+ 
+   /**
+    * Tells whether or not this object has been destroyed.
+    *
+    * @return True if this object has been destroyed.
+    */
+   boolean isDestroyed();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/Policy.java gcc-4.0.0/libjava/javax/security/auth/Policy.java
*** gcc-3.4.3/libjava/javax/security/auth/Policy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/Policy.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,79 ----
+ /* Policy.java -- deprecated precursor to java.security.Policy.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth;
+ 
+ import java.security.CodeSource;
+ import java.security.PermissionCollection;
+ 
+ /**
+  * @deprecated The classes java.security.Policy and
+  * java.security.ProtectionDomain provide the functionality of this class.
+  */
+ public abstract class Policy
+ {
+ 
+   private static Policy policy;
+ 
+   protected Policy()
+   {
+   }
+ 
+   public static synchronized Policy getPolicy()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       {
+         sm.checkPermission (new AuthPermission ("getPolicy"));
+       }
+     return policy;
+   }
+ 
+   public static synchronized void setPolicy (Policy p)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       {
+         sm.checkPermission (new AuthPermission ("setPolicy"));
+       }
+     policy = p;
+   }
+ 
+   public abstract PermissionCollection getPermissions (Subject subject, CodeSource source);
+   public abstract void refresh();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/PrivateCredentialPermission.java gcc-4.0.0/libjava/javax/security/auth/PrivateCredentialPermission.java
*** gcc-3.4.3/libjava/javax/security/auth/PrivateCredentialPermission.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/PrivateCredentialPermission.java	Thu Nov 18 15:26:45 2004
***************
*** 0 ****
--- 1,326 ----
+ /* PrivateCredentialPermission.java -- permissions governing private credentials.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth;
+ 
+ import java.io.Serializable;
+ 
+ import java.security.Permission;
+ import java.security.PermissionCollection;
+ 
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Set;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * A permission governing access to a private credential. The action of this
+  * permission is always "read" -- meaning that the private credential
+  * information can be read from an object.
+  *
+  * <p>The target of this permission is formatted as follows:</p>
+  *
+  * <p><code>CredentialClassName ( PrinicpalClassName PrincipalName )*</code></p>
+  *
+  * <p><i>CredentialClassName</i> is either the name of a private credential
+  * class name, or a wildcard character (<code>'*'</code>).
+  * <i>PrinicpalClassName</i> is the class name of a principal object, and
+  * <i>PrincipalName</i> is a string representing the principal, or the
+  * wildcard character.</p>
+  */
+ public final class PrivateCredentialPermission extends Permission
+   implements Serializable
+ {
+   /**
+    * For compatability with Sun's JDK 1.4.2 rev. 5
+    */
+   private static final long serialVersionUID = 5284372143517237068L;
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * @serial The credential class name.
+    */
+   private final String credentialClass;
+ 
+   /**
+    * @serial The principals, a set of CredOwner objects (an undocumented
+    *  inner class of this class).
+    */
+   private final Set principals;
+ 
+   /**
+    * @serial Who knows?
+    */
+   private final boolean testing;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Create a new private credential permission.
+    *
+    * @param name The permission target name.
+    * @param actions The list of actions, which, for this class, must be
+    *  <code>"read"</code>.
+    */
+   public PrivateCredentialPermission (final String name, String actions)
+   {
+     super(name);
+     actions = actions.trim().toLowerCase();
+     if (!"read".equals (actions))
+       {
+         throw new IllegalArgumentException("actions must be \"read\"");
+       }
+     StringTokenizer st = new StringTokenizer (name, " \"'");
+     principals = new HashSet();
+     if (st.countTokens() < 3 || (st.countTokens() & 1) == 0)
+       {
+         throw new IllegalArgumentException ("badly formed credential name");
+       }
+     credentialClass = st.nextToken();
+     while (st.hasMoreTokens())
+       {
+         principals.add (new CredOwner (st.nextToken(), st.nextToken()));
+       }
+     testing = false; // WTF ever.
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public boolean equals (Object o)
+   {
+     if (! (o instanceof PrivateCredentialPermission))
+       {
+         return false;
+       }
+     PrivateCredentialPermission that = (PrivateCredentialPermission) o;
+     if (!that.getActions().equals (getActions()))
+       {
+         return false;
+       }
+     if (!that.getCredentialClass().equals (getCredentialClass()))
+       {
+         return false;
+       }
+ 
+     final String[][] principals = getPrincipals();
+     final String[][] that_principals = that.getPrincipals();
+     if (that_principals == null)
+       {
+         return false;
+       }
+     if (that_principals.length != principals.length)
+       {
+         return false;
+       }
+     for (int i = 0; i < principals.length; i++)
+       {
+         if (!principals[i][0].equals (that_principals[i][0]) ||
+             !principals[i][1].equals (that_principals[i][1]))
+           {
+             return false;
+           }
+       }
+     return true;
+   }
+ 
+   /**
+    * Returns the actions this permission encompasses. For private credential
+    * permissions, this is always the string <code>"read"</code>.
+    *
+    * @return The list of actions.
+    */
+   public String getActions()
+   {
+     return "read";
+   }
+ 
+   /**
+    * Returns the credential class name that was embedded in this permission's
+    * target name.
+    *
+    * @return The credential class name.
+    */
+   public String getCredentialClass()
+   {
+     return credentialClass;
+   }
+ 
+   /**
+    * Returns the principal list that was embedded in this permission's target
+    * name.
+    *
+    * <p>Each element of the returned array is a pair; the first element is the
+    * principal class name, and the second is the principal name.
+    *
+    * @return The principal list.
+    */
+   public String[][] getPrincipals()
+   {
+     String[][] ret = new String[principals.size()][];
+     Iterator it = principals.iterator();
+     for (int i = 0; i < principals.size() && it.hasNext(); i++)
+       {
+         CredOwner co = (CredOwner) it.next();
+         ret[i] = new String[] { co.getPrincipalClass(), co.getPrincipalName() };
+       }
+     return ret;
+   }
+ 
+   public int hashCode()
+   {
+     return credentialClass.hashCode() + principals.hashCode();
+   }
+ 
+   /**
+    * Test if this permission implies another. This method returns true if:
+    *
+    * <ol>
+    * <li><i>p</i> is an instance of PrivateCredentialPermission</li>.
+    * <li>The credential class name of this instance matches that of <i>p</i>,
+    * and one of the principals of <i>p</i> is contained in the principals of
+    * this class. Thus,
+    *   <ul>
+    *   <li><code>[ * P "foo" ]  implies [ C P "foo" ]</code></li>
+    *   <li><code>[ C P1 "foo" ] implies [ C P1 "foo" P2 "bar" ]</code></li>
+    *   <li><code>[ C P1 "*" ]   implies [ C P1 "foo" ]</code></li>
+    *   </ul>
+    * </ol>
+    *
+    * @param p The permission to check.
+    * @return True if this permission implies <i>p</i>.
+    */
+   public boolean implies (Permission p)
+   {
+     if (! (p instanceof PrivateCredentialPermission))
+       {
+         return false;
+       }
+     PrivateCredentialPermission that = (PrivateCredentialPermission) p;
+     if (!credentialClass.equals ("*")
+         && !credentialClass.equals (that.getCredentialClass()))
+       {
+         return false;
+       }
+     String[][] principals = getPrincipals();
+     String[][] that_principals = that.getPrincipals();
+     if (that_principals == null)
+       {
+         return false;
+       }
+     for (int i = 0; i < principals.length; i++)
+       {
+         for (int j = 0; j < that_principals.length; j++)
+           {
+             if (principals[i][0].equals (that_principals[j][0]) &&
+                 (principals[i][1].equals ("*") ||
+                  principals[i][1].equals (that_principals[j][1])))
+               {
+                 return true;
+               }
+           }
+       }
+     return false;
+   }
+ 
+   /**
+    * This method is not necessary for this class, thus it always returns null.
+    *
+    * @return null.
+    */
+   public PermissionCollection newPermissionCollection()
+   {
+     return null;
+   }
+ 
+   // Inner class.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * An undocumented inner class present for serialization compatibility.
+    */
+   private static class CredOwner implements Serializable
+   {
+ 
+     // Fields.
+     // -----------------------------------------------------------------------
+ 
+     private final String principalClass;
+     private final String principalName;
+ 
+     // Constructor.
+     // -----------------------------------------------------------------------
+ 
+     CredOwner (final String principalClass, final String principalName)
+     {
+       this.principalClass = principalClass;
+       this.principalName = principalName;
+     }
+ 
+     // Instance methods.
+     // -----------------------------------------------------------------------
+ 
+     public boolean equals (Object o)
+     {
+       if (!(o instanceof CredOwner))
+         {
+           return false;
+         }
+       return principalClass.equals (((CredOwner) o).getPrincipalClass()) &&
+         principalName.equals (((CredOwner) o).getPrincipalName());
+     }
+ 
+     public int hashCode()
+     {
+       return principalClass.hashCode() + principalName.hashCode();
+     }
+ 
+     public String getPrincipalClass()
+     {
+       return principalClass;
+     }
+ 
+     public String getPrincipalName()
+     {
+       return principalName;
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/RefreshFailedException.java gcc-4.0.0/libjava/javax/security/auth/RefreshFailedException.java
*** gcc-3.4.3/libjava/javax/security/auth/RefreshFailedException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/RefreshFailedException.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,63 ----
+ /* RefreshFailedException.java -- signals a failed refresh.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth;
+ 
+ /**
+  * A signal that a call to {@link Refreshable#refresh()} failed.
+  */
+ public class RefreshFailedException extends Exception
+ {
+ 
+   /**
+    * Create a new RefreshFailedException with no detail message.
+    */
+   public RefreshFailedException()
+   {
+   }
+ 
+   /**
+    * Create a new RefreshFailedException with a detail message.
+    *
+    * @param message The detail message.
+    */
+   public RefreshFailedException (String message)
+   {
+     super (message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/Refreshable.java gcc-4.0.0/libjava/javax/security/auth/Refreshable.java
*** gcc-3.4.3/libjava/javax/security/auth/Refreshable.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/Refreshable.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,65 ----
+ /* Refreshable.java -- an object whose state may be refreshed.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth;
+ 
+ /**
+  * An object whose internal state may be <em>refreshed:</em> as in a
+  * credential object with a expiry date.
+  */
+ public interface Refreshable
+ {
+ 
+   /**
+    * Tells whether or not this object is current. Refreshable objects that
+    * are not current may need to be refreshed.
+    *
+    * @return Whether this object is current.
+    */
+   boolean isCurrent();
+ 
+   /**
+    * Refresh this object. The process involved in refreshing an object is
+    * per-implementation dependent.
+    *
+    * @throws RefreshFailedException If refreshing this object fails.
+    * @throws SecurityException If the caller does not have permission to
+    *  refresh, or to take the steps involved in refreshing, this object.
+    */
+   void refresh() throws RefreshFailedException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/Subject.java gcc-4.0.0/libjava/javax/security/auth/Subject.java
*** gcc-3.4.3/libjava/javax/security/auth/Subject.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/Subject.java	Wed Feb 16 18:51:25 2005
***************
*** 0 ****
--- 1,556 ----
+ /* Subject.java -- a single entity in the system.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth;
+ 
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ 
+ import java.security.AccessControlContext;
+ import java.security.AccessController;
+ import java.security.DomainCombiner;
+ import java.security.Principal;
+ import java.security.PrivilegedAction;
+ import java.security.PrivilegedActionException;
+ import java.security.PrivilegedExceptionAction;
+ 
+ import java.util.AbstractSet;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.Set;
+ 
+ public final class Subject implements Serializable
+ {
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private static final long serialVersionUID = -8308522755600156056L;
+ 
+   /**
+    * @serial The set of principals. The type of this field is SecureSet, a
+    *  private inner class.
+    */
+   private final Set principals;
+ 
+   /**
+    * @serial The read-only flag.
+    */
+   private boolean readOnly;
+ 
+   private final transient SecureSet pubCred;
+   private final transient SecureSet privCred;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public Subject()
+   {
+     principals = new SecureSet (this, SecureSet.PRINCIPALS);
+     pubCred = new SecureSet (this, SecureSet.PUBLIC_CREDENTIALS);
+     privCred = new SecureSet (this, SecureSet.PRIVATE_CREDENTIALS);
+     readOnly = false;
+   }
+ 
+   public Subject (final boolean readOnly, final Set principals,
+                   final Set pubCred, final Set privCred)
+   {
+     if (principals == null || pubCred == null || privCred == null)
+       {
+         throw new NullPointerException();
+       }
+     this.principals = new SecureSet (this, SecureSet.PRINCIPALS, principals);
+     this.pubCred = new SecureSet (this, SecureSet.PUBLIC_CREDENTIALS, pubCred);
+     this.privCred = new SecureSet (this, SecureSet.PRIVATE_CREDENTIALS, privCred);
+     this.readOnly = readOnly;
+   }
+ 
+   // Class methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Returns the subject associated with the given {@link
+    * AccessControlContext}.</p>
+    *
+    * <p>All this method does is retrieve the Subject object from the supplied
+    * context's {@link DomainCombiner}, if any, and if it is an instance of
+    * a {@link SubjectDomainCombiner}.
+    *
+    * @param context The context to retrieve the subject from.
+    * @return The subject assoctiated with the context, or <code>null</code>
+    *  if there is none.
+    * @throws NullPointerException If <i>subject</i> is null.
+    * @throws SecurityException If the caller does not have permission to get
+    *  the subject (<code>"getSubject"</code> target of {@link AuthPermission}.
+    */
+   public static Subject getSubject (final AccessControlContext context)
+   {
+     final SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       {
+         sm.checkPermission (new AuthPermission ("getSubject"));
+       }
+     DomainCombiner dc = context.getDomainCombiner();
+     if (!(dc instanceof SubjectDomainCombiner))
+       {
+         return null;
+       }
+     return ((SubjectDomainCombiner) dc).getSubject();
+   }
+ 
+   /**
+    * <p>Run a method as another subject. This method will obtain the current
+    * {@link AccessControlContext} for this thread, then creates another with
+    * a {@link SubjectDomainCombiner} with the given subject. The supplied
+    * action will then be run with the modified context.</p>
+    *
+    * @param subject The subject to run as.
+    * @param action The action to run.
+    * @return The value returned by the privileged action.
+    * @throws SecurityException If the caller is not allowed to run under a
+    *  different identity (<code>"doAs"</code> target of {@link AuthPermission}.
+    */
+   public static Object doAs (final Subject subject, final PrivilegedAction action)
+   {
+     final SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       {
+         sm.checkPermission (new AuthPermission ("doAs"));
+       }
+     AccessControlContext context =
+       new AccessControlContext (AccessController.getContext(),
+                                 new SubjectDomainCombiner (subject));
+     return AccessController.doPrivileged (action, context);
+   }
+ 
+   /**
+    * <p>Run a method as another subject. This method will obtain the current
+    * {@link AccessControlContext} for this thread, then creates another with
+    * a {@link SubjectDomainCombiner} with the given subject. The supplied
+    * action will then be run with the modified context.</p>
+    *
+    * @param subject The subject to run as.
+    * @param action The action to run.
+    * @return The value returned by the privileged action.
+    * @throws SecurityException If the caller is not allowed to run under a
+    *  different identity (<code>"doAs"</code> target of {@link AuthPermission}.
+    * @throws PrivilegedActionException If the action throws an exception.
+    */
+   public static Object doAs (final Subject subject,
+                              final PrivilegedExceptionAction action)
+     throws PrivilegedActionException
+   {
+     final SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       {
+         sm.checkPermission (new AuthPermission ("doAs"));
+       }
+     AccessControlContext context =
+       new AccessControlContext (AccessController.getContext(),
+                                 new SubjectDomainCombiner(subject));
+     return AccessController.doPrivileged (action, context);
+   }
+ 
+   /**
+    * <p>Run a method as another subject. This method will create a new
+    * {@link AccessControlContext} derived from the given one, with a
+    * {@link SubjectDomainCombiner} with the given subject. The supplied
+    * action will then be run with the modified context.</p>
+    *
+    * @param subject The subject to run as.
+    * @param action The action to run.
+    * @param acc The context to use.
+    * @return The value returned by the privileged action.
+    * @throws SecurityException If the caller is not allowed to run under a
+    *  different identity (<code>"doAsPrivileged"</code> target of {@link
+    *  AuthPermission}.
+    */
+   public static Object doAsPrivileged (final Subject subject,
+                                        final PrivilegedAction action,
+                                        final AccessControlContext acc)
+   {
+     final SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       {
+         sm.checkPermission (new AuthPermission ("doAsPrivileged"));
+       }
+     AccessControlContext context =
+       new AccessControlContext (acc, new SubjectDomainCombiner (subject));
+     return AccessController.doPrivileged (action, context);
+   }
+ 
+   /**
+    * <p>Run a method as another subject. This method will create a new
+    * {@link AccessControlContext} derived from the given one, with a
+    * {@link SubjectDomainCombiner} with the given subject. The supplied
+    * action will then be run with the modified context.</p>
+    *
+    * @param subject The subject to run as.
+    * @param action The action to run.
+    * @param acc The context to use.
+    * @return The value returned by the privileged action.
+    * @throws SecurityException If the caller is not allowed to run under a
+    *  different identity (<code>"doAsPrivileged"</code> target of
+    *  {@link AuthPermission}.
+    * @throws PrivilegedActionException If the action throws an exception.
+    */
+   public static Object doAsPrivileged (final Subject subject,
+                                        final PrivilegedExceptionAction action,
+ 				       AccessControlContext acc)
+     throws PrivilegedActionException
+   {
+     final SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       {
+         sm.checkPermission (new AuthPermission ("doAsPrivileged"));
+       }
+     if (acc == null)
+       acc = new AccessControlContext (new java.security.ProtectionDomain[0]);
+     AccessControlContext context =
+       new AccessControlContext (acc, new SubjectDomainCombiner (subject));
+     return AccessController.doPrivileged (action, context);
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public boolean equals (Object o)
+   {
+     if (!(o instanceof Subject))
+       {
+         return false;
+       }
+     Subject that = (Subject) o;
+     return principals.containsAll (that.getPrincipals()) &&
+       pubCred.containsAll (that.getPublicCredentials()) &&
+       privCred.containsAll (that.getPrivateCredentials());
+   }
+ 
+   public Set getPrincipals()
+   {
+     return principals;
+   }
+ 
+   public Set getPrincipals(Class clazz)
+   {
+     HashSet result = new HashSet (principals.size());
+     for (Iterator it = principals.iterator(); it.hasNext(); )
+       {
+         Object o = it.next();
+         if (o != null && clazz.isAssignableFrom (o.getClass()))
+           {
+             result.add(o);
+           }
+       }
+     return Collections.unmodifiableSet (result);
+   }
+ 
+   public Set getPrivateCredentials()
+   {
+     return privCred;
+   }
+ 
+   public Set getPrivateCredentials (Class clazz)
+   {
+     HashSet result = new HashSet (privCred.size());
+     for (Iterator it = privCred.iterator(); it.hasNext(); )
+       {
+         Object o = it.next();
+         if (o != null && clazz.isAssignableFrom (o.getClass()))
+           {
+             result.add(o);
+           }
+       }
+     return Collections.unmodifiableSet (result);
+   }
+ 
+   public Set getPublicCredentials()
+   {
+     return pubCred;
+   }
+ 
+   public Set getPublicCredentials (Class clazz)
+   {
+     HashSet result = new HashSet (pubCred.size());
+     for (Iterator it = pubCred.iterator(); it.hasNext(); )
+       {
+         Object o = it.next();
+         if (o != null && clazz.isAssignableFrom (o.getClass()))
+           {
+             result.add(o);
+           }
+       }
+     return Collections.unmodifiableSet (result);
+   }
+ 
+   public int hashCode()
+   {
+     return principals.hashCode() + privCred.hashCode() + pubCred.hashCode();
+   }
+ 
+   /**
+    * <p>Returns whether or not this subject is read-only.</p>
+    *
+    * @return True is this subject is read-only.
+    */
+   public boolean isReadOnly()
+   {
+     return readOnly;
+   }
+ 
+   /**
+    * <p>Marks this subject as read-only.</p>
+    *
+    * @throws SecurityException If the caller does not have permission to
+    *  set this subject as read-only (<code>"setReadOnly"</code> target of
+    *  {@link AuthPermission}.
+    */
+   public void setReadOnly()
+   {
+     final SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       {
+         sm.checkPermission (new AuthPermission ("setReadOnly"));
+       }
+     readOnly = true;
+   }
+ 
+   public String toString()
+   {
+     return Subject.class.getName() + " [ principals=" + principals +
+       ", private credentials=" + privCred + ", public credentials=" +
+       pubCred + ", read-only=" + readOnly + " ]";
+   }
+ 
+ // Inner class.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * An undocumented inner class that is used for sets in the parent class.
+    */
+   private static class SecureSet extends AbstractSet implements Serializable
+   {
+     // Fields.
+     // -----------------------------------------------------------------------
+ 
+     private static final long serialVersionUID = 7911754171111800359L;
+ 
+     static final int PRINCIPALS = 0;
+     static final int PUBLIC_CREDENTIALS = 1;
+     static final int PRIVATE_CREDENTIALS = 2;
+ 
+     private final Subject subject;
+     private final LinkedList elements;
+     private final transient int type;
+ 
+     // Constructors.
+     // -----------------------------------------------------------------------
+ 
+     SecureSet (final Subject subject, final int type, final Collection elements)
+     {
+       this (subject, type);
+       for (Iterator it = elements.iterator(); it.hasNext(); )
+         {
+           Object o = it.next();
+           if (type == PRINCIPALS && !(o instanceof Principal))
+             {
+               throw new IllegalArgumentException(o+" is not a Principal");
+             }
+           if (!elements.contains (o))
+             {
+               elements.add (o);
+             }
+         }
+     }
+ 
+     SecureSet (final Subject subject, final int type)
+     {
+       this.subject = subject;
+       this.type = type;
+       this.elements = new LinkedList();
+     }
+ 
+     // Instance methods.
+     // -----------------------------------------------------------------------
+ 
+     public synchronized int size()
+     {
+       return elements.size();
+     }
+ 
+     public Iterator iterator()
+     {
+       return elements.iterator();
+     }
+ 
+     public synchronized boolean add(Object element)
+     {
+       if (subject.isReadOnly())
+         {
+           throw new IllegalStateException ("subject is read-only");
+         }
+       final SecurityManager sm = System.getSecurityManager();
+       switch (type)
+         {
+         case PRINCIPALS:
+           if (sm != null)
+             {
+               sm.checkPermission (new AuthPermission ("modifyPrincipals"));
+             }
+           if (!(element instanceof Principal))
+             {
+               throw new IllegalArgumentException ("element is not a Principal");
+             }
+           break;
+ 
+         case PUBLIC_CREDENTIALS:
+           if (sm != null)
+             {
+               sm.checkPermission (new AuthPermission ("modifyPublicCredentials"));
+             }
+           break;
+ 
+         case PRIVATE_CREDENTIALS:
+           if (sm != null)
+             {
+               sm.checkPermission (new AuthPermission ("modifyPrivateCredentials"));
+             }
+           break;
+ 
+         default:
+           throw new Error ("this statement should be unreachable");
+         }
+ 
+       if (elements.contains (element))
+         {
+           return false;
+         }
+ 
+       return elements.add (element);
+     }
+ 
+     public synchronized boolean remove (final Object element)
+     {
+       if (subject.isReadOnly())
+         {
+           throw new IllegalStateException ("subject is read-only");
+         }
+       final SecurityManager sm = System.getSecurityManager();
+       switch (type)
+         {
+         case PRINCIPALS:
+           if (sm != null)
+             {
+               sm.checkPermission (new AuthPermission ("modifyPrincipals"));
+             }
+           if (!(element instanceof Principal))
+             {
+               throw new IllegalArgumentException ("element is not a Principal");
+             }
+           break;
+ 
+         case PUBLIC_CREDENTIALS:
+           if (sm != null)
+             {
+               sm.checkPermission (new AuthPermission ("modifyPublicCredentials"));
+             }
+           break;
+ 
+         case PRIVATE_CREDENTIALS:
+           if (sm != null)
+             {
+               sm.checkPermission (new AuthPermission ("modifyPrivateCredentials"));
+             }
+           break;
+ 
+         default:
+           throw new Error("this statement should be unreachable");
+         }
+ 
+       return elements.remove(element);
+     }
+ 
+     public synchronized boolean contains (final Object element)
+     {
+       return elements.remove (element);
+     }
+ 
+     public boolean removeAll (final Collection c)
+     {
+       if (subject.isReadOnly())
+         {
+           throw new IllegalStateException ("subject is read-only");
+         }
+       return super.removeAll (c);
+     }
+ 
+     public boolean retainAll (final Collection c)
+     {
+       if (subject.isReadOnly())
+         {
+           throw new IllegalStateException ("subject is read-only");
+         }
+       return super.retainAll (c);
+     }
+ 
+     public void clear()
+     {
+       if (subject.isReadOnly())
+         {
+           throw new IllegalStateException ("subject is read-only");
+         }
+       elements.clear();
+     }
+ 
+     private synchronized void writeObject (ObjectOutputStream out)
+       throws IOException
+     {
+       throw new UnsupportedOperationException ("FIXME: determine serialization");
+     }
+ 
+     private void readObject (ObjectInputStream in)
+       throws ClassNotFoundException, IOException
+     {
+       throw new UnsupportedOperationException ("FIXME: determine serialization");
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/SubjectDomainCombiner.java gcc-4.0.0/libjava/javax/security/auth/SubjectDomainCombiner.java
*** gcc-3.4.3/libjava/javax/security/auth/SubjectDomainCombiner.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/SubjectDomainCombiner.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,96 ----
+ /* SubjectDomainCombiner.java -- domain combiner for Subjects.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth;
+ 
+ import java.security.DomainCombiner;
+ import java.security.Principal;
+ import java.security.ProtectionDomain;
+ 
+ import java.util.LinkedList;
+ 
+ public class SubjectDomainCombiner implements DomainCombiner
+ {
+ 
+   // Field.
+   // -------------------------------------------------------------------------
+ 
+   private final Subject subject;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public SubjectDomainCombiner (final Subject subject)
+   {
+     this.subject = subject;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public ProtectionDomain[] combine (final ProtectionDomain[] current,
+                                      final ProtectionDomain[] assigned)
+   {
+     LinkedList domains = new LinkedList();
+     Principal[] principals =
+       (Principal[]) subject.getPrincipals().toArray (new Principal[0]);
+     if (current != null)
+       {
+         for (int i = 0; i < current.length; i++)
+           {
+             domains.add (new ProtectionDomain (current[i].getCodeSource(),
+                                                current[i].getPermissions(),
+                                                current[i].getClassLoader(),
+                                                principals));
+           }
+       }
+     if (assigned != null)
+       {
+         for (int i = 0; i < assigned.length; i++)
+           {
+             domains.add (assigned[i]);
+           }
+       }
+     return (ProtectionDomain[]) domains.toArray (new ProtectionDomain[domains.size()]);
+   }
+ 
+   public Subject getSubject()
+   {
+     return subject;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/Callback.java gcc-4.0.0/libjava/javax/security/auth/callback/Callback.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/Callback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/Callback.java	Thu Feb 17 07:48:50 2005
***************
*** 0 ****
--- 1,64 ----
+ /* Callback.java -- marker interface for callback classes
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ /**
+  * <p>Implementations of this interface are passed to a {@link CallbackHandler},
+  * allowing underlying security services the ability to interact with a calling
+  * application to retrieve specific authentication data such as usernames and
+  * passwords, or to display certain information, such as error and warning
+  * messages.</p>
+  *
+  * <p><code>Callback</code> implementations do not retrieve or display the
+  * information requested by underlying security services. <code>Callback</code>
+  * implementations simply provide the means to pass such requests to
+  * applications, and for applications, if appropriate, to return requested
+  * information back to the underlying security services.</p>
+  *
+  * @see CallbackHandler
+  * @see ChoiceCallback
+  * @see ConfirmationCallback
+  * @see LanguageCallback
+  * @see NameCallback
+  * @see PasswordCallback
+  * @see TextInputCallback
+  * @see TextOutputCallback
+  */
+ public interface Callback {
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/CallbackHandler.java gcc-4.0.0/libjava/javax/security/auth/callback/CallbackHandler.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/CallbackHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/CallbackHandler.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,155 ----
+ /* CallbackHandler.java -- base interface for callback handlers.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ import java.io.IOException;
+ 
+ /**
+  * <p>An application implements a <code>CallbackHandler</code> and passes it to
+  * underlying security services so that they may interact with the application
+  * to retrieve specific authentication data, such as usernames and passwords, or
+  * to display certain information, such as error and warning messages.</p>
+  *
+  * <p><code>CallbackHandler</code>s are implemented in an application-dependent
+  * fashion. For example, implementations for an application with a graphical
+  * user interface (GUI) may pop up windows to prompt for requested information
+  * or to display error messages. An implementation may also choose to obtain
+  * requested information from an alternate source without asking the end user.</p>
+  *
+  * <p>Underlying security services make requests for different types of
+  * information by passing individual Callbacks to the <code>CallbackHandler</code>.
+  * The <code>CallbackHandler</code> implementation decides how to retrieve and
+  * display information depending on the {@link Callback}s passed to it. For
+  * example, if the underlying service needs a username and password to
+  * authenticate a user, it uses a {@link NameCallback} and
+  * {@link PasswordCallback}. The <code>CallbackHandler</code> can then choose
+  * to prompt for a username and password serially, or to prompt for both in a
+  * single window.</p>
+  *
+  * <p>A default <code>CallbackHandler</code> class implementation may be
+  * specified in the <code>auth.login.defaultCallbackHandler</code> security
+  * property. The security property can be set in the Java security properties
+  * file 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>If the security property is set to the fully qualified name of a
+  * <code>CallbackHandler</code> implementation class, then a
+  * <code>LoginContext</code>will load the specified <code>CallbackHandler</code>
+  * and pass it to the underlying <code>LoginModules</code>. The
+  * <code>LoginContext</code> only loads the default handler if one was not
+  * provided.</p>
+  *
+  * <p>All default handler implementations must provide a public zero-argument
+  * constructor.</p>
+  *
+  */
+ public interface CallbackHandler
+ {
+ 
+   /**
+    * <p>Retrieve or display the information requested in the provided
+    * {@link Callback}s.</p>
+    *
+    * <p>The <code>handle()</code> method implementation checks the instance(s)
+    * of the {@link Callback} object(s) passed in to retrieve or display the
+    * requested information. The following example is provided to help
+    * demonstrate what an <code>handle()</code> method implementation might look
+    * like. This example code is for guidance only. Many details, including
+    * proper error handling, are left out for simplicity.</p>
+    *
+    * <pre>
+    *public void handle(Callback[] callbacks)
+    *throws IOException, UnsupportedCallbackException {
+    *   for (int i = 0; i < callbacks.length; i++) {
+    *      if (callbacks[i] instanceof TextOutputCallback) {
+    *         // display the message according to the specified type
+    *         TextOutputCallback toc = (TextOutputCallback)callbacks[i];
+    *         switch (toc.getMessageType()) {
+    *         case TextOutputCallback.INFORMATION:
+    *            System.out.println(toc.getMessage());
+    *            break;
+    *         case TextOutputCallback.ERROR:
+    *            System.out.println("ERROR: " + toc.getMessage());
+    *            break;
+    *         case TextOutputCallback.WARNING:
+    *            System.out.println("WARNING: " + toc.getMessage());
+    *            break;
+    *         default:
+    *            throw new IOException("Unsupported message type: "
+    *                  + toc.getMessageType());
+    *         }
+    *      } else if (callbacks[i] instanceof NameCallback) {
+    *         // prompt the user for a username
+    *         NameCallback nc = (NameCallback)callbacks[i];
+    *         // ignore the provided defaultName
+    *         System.err.print(nc.getPrompt());
+    *         System.err.flush();
+    *         nc.setName((new BufferedReader(
+    *               new InputStreamReader(System.in))).readLine());
+    *      } else if (callbacks[i] instanceof PasswordCallback) {
+    *         // prompt the user for sensitive information
+    *         PasswordCallback pc = (PasswordCallback)callbacks[i];
+    *         System.err.print(pc.getPrompt());
+    *         System.err.flush();
+    *         pc.setPassword(readPassword(System.in));
+    *      } else {
+    *         throw new UnsupportedCallbackException(
+    *               callbacks[i], "Unrecognized Callback");
+    *      }
+    *   }
+    *}
+    *
+    * // Reads user password from given input stream.
+    *private char[] readPassword(InputStream in) throws IOException {
+    *   // insert code to read a user password from the input stream
+    *}
+    * </pre>
+    *
+    * @param callbacks an array of {@link Callback} objects provided by an
+    * underlying security service which contains the information requested to
+    * be retrieved or displayed.
+    * @throws IOException if an input or output error occurs.
+    * @throws UnsupportedCallbackException if the implementation of this method
+    * does not support one or more of the Callbacks specified in the
+    * <code>callbacks</code> parameter.
+    */
+   void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/ChoiceCallback.java gcc-4.0.0/libjava/javax/security/auth/callback/ChoiceCallback.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/ChoiceCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/ChoiceCallback.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,236 ----
+ /* ChoiceCallback.java -- callback for a choice of values.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Underlying security services instantiate and pass a
+  * <code>ChoiceCallback</code> to the <code>handle()</code> method of a
+  * {@link CallbackHandler} to display a list of choices and to retrieve the
+  * selected choice(s).
+  *
+  * @see CallbackHandler
+  */
+ public class ChoiceCallback implements Callback, Serializable
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String prompt;
+ 
+   /**
+    * @serial the list of choices.
+    * @since 1.4
+    */
+   private String[] choices;
+ 
+   /**
+    * @serial the choice to be used as the default choice.
+    * @since 1.4
+    */
+   private int defaultChoice;
+ 
+   /**
+    * @serial whether multiple selections are allowed from the list of choices.
+    * @since 1.4
+    */
+   private boolean multipleSelectionsAllowed;
+ 
+   /**
+    * @serial the selected choices, represented as indexes into the choices list.
+    * @since 1.4
+    */
+   private int[] selections;
+ 
+   // Constructor(s)
+   //--------------------------------------------------------------------------
+ 
+   /**
+    * Construct a <code>ChoiceCallback</code> with a prompt, a list of choices,
+    * a default choice, and a boolean specifying whether or not multiple
+    * selections from the list of choices are allowed.
+    *
+    * @param prompt the prompt used to describe the list of choices.
+    * @param choices the list of choices.
+    * @param defaultChoice the choice to be used as the default choice when the
+    * list of choices are displayed. This value is represented as an index into
+    * the <code>choices</code> array.
+    * @param multipleSelectionsAllowed boolean specifying whether or not
+    * multiple selections can be made from the list of choices.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>,
+    * if <code>prompt</code> has a length of <code>0</code>, if <code>choices</code>
+    * is <code>null</code>, if <code>choices</code> has a length of <code>0</code>,
+    * if any element from <code>choices</code> is <code>null</code>, if any
+    * element from <code>choices</code> has a length of <code>0</code> or if
+    * <code>defaultChoice</code> does not fall within the array boundaries of
+    * <code>choices</code>.
+    */
+   public ChoiceCallback(String prompt, String[] choices, int defaultChoice,
+ 			boolean multipleSelectionsAllowed)
+   {
+     super();
+ 
+     setPrompt(prompt);
+     setChoices(choices);
+     if (defaultChoice < 0 || defaultChoice >= this.choices.length)
+       {
+ 	throw new IllegalArgumentException("default choice is out of bounds");
+       }
+     this.defaultChoice = defaultChoice;
+     this.multipleSelectionsAllowed = multipleSelectionsAllowed;
+   }
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Get the prompt.
+    *
+    * @return the prompt.
+    */
+   public String getPrompt()
+   {
+     return prompt;
+   }
+ 
+   /**
+    * Get the list of choices.
+    *
+    * @return the list of choices.
+    */
+   public String[] getChoices()
+   {
+     return choices;
+   }
+ 
+   /**
+    * Get the defaultChoice.
+    *
+    * @return the defaultChoice, represented as an index into the choices list.
+    */
+   public int getDefaultChoice()
+   {
+     return defaultChoice;
+   }
+ 
+   /**
+    * Get the boolean determining whether multiple selections from the choices
+    * list are allowed.
+    *
+    * @return whether multiple selections are allowed.
+    */
+   public boolean allowMultipleSelections()
+   {
+     return multipleSelectionsAllowed;
+   }
+ 
+   /**
+    * Set the selected choice.
+    *
+    * @param selection the selection represented as an index into the choices
+    * list.
+    * @see #getSelectedIndexes()
+    */
+   public void setSelectedIndex(int selection)
+   {
+     this.selections = new int[1];
+     this.selections[0] = selection;
+   }
+ 
+   /**
+    * Set the selected choices.
+    *
+    * @param selections the selections represented as indexes into the choices
+    * list.
+    * @throws UnsupportedOperationException if multiple selections are not
+    * allowed, as determined by <code>allowMultipleSelections</code>.
+    * @see #getSelectedIndexes()
+    */
+   public void setSelectedIndexes(int[] selections)
+   {
+     if (!multipleSelectionsAllowed)
+       {
+ 	throw new UnsupportedOperationException("not allowed");
+       }
+ 
+     this.selections = selections;
+   }
+ 
+   /**
+    * Get the selected choices.
+    *
+    * @return the selected choices, represented as indexes into the choices list.
+    * @see #setSelectedIndexes(int[])
+    */
+   public int[] getSelectedIndexes()
+   {
+     return selections;
+   }
+ 
+   private void setPrompt(String prompt) throws IllegalArgumentException
+   {
+     if ((prompt == null) || (prompt.length() == 0))
+       {
+ 	throw new IllegalArgumentException("invalid prompt");
+       }
+     this.prompt = prompt;
+   }
+ 
+   private void setChoices(String[] choices) throws IllegalArgumentException
+   {
+     if (choices == null || choices.length == 0)
+       {
+ 	throw new IllegalArgumentException("invalid choices");
+       }
+     for (int i = 0; i < choices.length; i++)
+       {
+ 	if (choices[i] == null || choices[i].length() == 0)
+ 	  {
+ 	    throw new IllegalArgumentException("invalid choice at index #"+i);
+ 	  }
+       }
+     this.choices = choices;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/ConfirmationCallback.java gcc-4.0.0/libjava/javax/security/auth/callback/ConfirmationCallback.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/ConfirmationCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/ConfirmationCallback.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,505 ----
+ /* ConfirmationCallback.java -- callback for confirmations.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Underlying security services instantiate and pass a
+  * <code>ConfirmationCallback</code> to the <code>handle()</code> method of a
+  * {@link CallbackHandler} to ask for YES/NO, OK/CANCEL, YES/NO/CANCEL or other
+  * similar confirmations.
+  *
+  * @see CallbackHandler
+  */
+ public class ConfirmationCallback implements Callback, Serializable
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Unspecified option type.</p>
+    *
+    * <p>The <code>getOptionType</code> method returns this value if this
+    * <code>ConfirmationCallback</code> was instantiated with <code>options</code>
+    * instead of an <code>optionType</code>.</p>
+    */
+   public static final int UNSPECIFIED_OPTION = -1;
+ 
+   /**
+    * <p>YES/NO confirmation option.</p>
+    *
+    * <p>An underlying security service specifies this as the <code>optionType</code>
+    * to a <code>ConfirmationCallback</code> constructor if it requires a
+    * confirmation which can be answered with either <code>YES</code> or
+    * <code>NO</code>.</p>
+    */
+   public static final int YES_NO_OPTION = 0;
+ 
+   /**
+    * <p>YES/NO/CANCEL confirmation confirmation option.</p>
+    *
+    * <p>An underlying security service specifies this as the <code>optionType</code>
+    * to a <code>ConfirmationCallback</code> constructor if it requires a
+    * confirmation which can be answered with either <code>YES</code>,
+    * <code>NO</code> or <code>CANCEL</code>.
+    */
+   public static final int YES_NO_CANCEL_OPTION = 1;
+ 
+   /**
+    * <p>OK/CANCEL confirmation confirmation option.</p>
+    *
+    * <p>An underlying security service specifies this as the <code>optionType</code>
+    * to a <code>ConfirmationCallback</code> constructor if it requires a
+    * confirmation which can be answered with either <code>OK</code> or
+    * <code>CANCEL</code>.</p>
+    */
+   public static final int OK_CANCEL_OPTION = 2;
+ 
+   /**
+    * <p>YES option.</p>
+    *
+    * <p>If an <code>optionType</code> was specified to this
+    * <code>ConfirmationCallback</code>, this option may be specified as a
+    * <code>defaultOption</code> or returned as the selected index.</p>
+    */
+   public static final int YES = 0;
+ 
+   /**
+    * <p>NO option.</p>
+    *
+    * <p>If an <code>optionType</code> was specified to this
+    * <code>ConfirmationCallback</code>, this option may be specified as a
+    * <code>defaultOption</code> or returned as the selected index.</p>
+    */
+   public static final int NO = 1;
+ 
+   /**
+    * <p>CANCEL option.</p>
+    *
+    * <p>If an <code>optionType</code> was specified to this
+    * <code>ConfirmationCallback</code>, this option may be specified as a
+    * <code>defaultOption</code> or returned as the selected index.</p>
+    */
+   public static final int CANCEL = 2;
+ 
+   /**
+    * <p>OK option.</p>
+    *
+    * <p>If an <code>optionType</code> was specified to this
+    * <code>ConfirmationCallback</code>, this option may be specified as a
+    * <code>defaultOption</code> or returned as the selected index.</p>
+    */
+   public static final int OK = 3;
+ 
+   /** INFORMATION message type. */
+   public static final int INFORMATION = 0;
+ 
+   /** WARNING message type. */
+   public static final int WARNING = 1;
+ 
+   /** ERROR message type. */
+   public static final int ERROR = 2;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String prompt;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private int messageType;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private int optionType;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private int defaultOption;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String[] options = null;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private int selection;
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Construct a <code>ConfirmationCallback</code> with a message type, an
+    * option type and a default option.</p>
+    *
+    * <p>Underlying security services use this constructor if they require
+    * either a YES/NO, YES/NO/CANCEL or OK/CANCEL confirmation.</p>
+    *
+    * @param messageType the message type (INFORMATION, WARNING or ERROR).
+    * @param optionType the option type (YES_NO_OPTION, YES_NO_CANCEL_OPTION or
+    * OK_CANCEL_OPTION).
+    * @param defaultOption the default option from the provided optionType (YES,
+    * NO, CANCEL or OK).
+    * @throws IllegalArgumentException if <code>messageType</code> is not either
+    * <code>INFORMATION</code>, <code>WARNING</code>, or <code>ERROR</code>, if
+    * <code>optionType</code> is not either <code>YES_NO_OPTION</code>,
+    * <code>YES_NO_CANCEL_OPTION</code>, or <code>OK_CANCEL_OPTION</code>, or if
+    * <code>defaultOption</code> does not correspond to one of the options in
+    * <code>optionType</code>.
+    */
+   public ConfirmationCallback(int messageType, int optionType, int defaultOption)
+     throws IllegalArgumentException
+   {
+     super();
+ 
+     setMessageType(messageType);
+     setOptionType(optionType, defaultOption);
+     this.defaultOption = defaultOption;
+   }
+ 
+   /**
+    * <p>Construct a <code>ConfirmationCallback</code> with a message type, a
+    * list of options and a default option.</p>
+    *
+    * <p>Underlying security services use this constructor if they require a
+    * confirmation different from the available preset confirmations provided
+    * (for example, CONTINUE/ABORT or STOP/GO). The confirmation options are
+    * listed in the <code>options</code> array, and are displayed by the
+    * {@link CallbackHandler} implementation in a manner consistent with the
+    * way preset options are displayed.</p>
+    *
+    * @param messageType the message type (INFORMATION, WARNING or ERROR).
+    * @param options the list of confirmation options.
+    * @param defaultOption the default option, represented as an index into the
+    * <code>options</code> array.
+    * @throws IllegalArgumentException if <code>messageType</code> is not either
+    * <code>INFORMATION</code>, <code>WARNING</code>, or <code>ERROR</code>, if
+    * <code>options</code> is <code>null</code>, if <code>options</code> has a
+    * length of <code>0</code>, if any element from <code>options</code> is
+    * <code>null</code>, if any element from <code>options</code> has a length
+    * of <code>0</code>, or if <code>defaultOption</code> does not lie within
+    * the array boundaries of <code>options</code>.
+    */
+   public ConfirmationCallback(int messageType, String[] options, int defaultOption)
+   {
+     super();
+ 
+     setMessageType(messageType);
+     setOptions(options, defaultOption);
+     this.defaultOption = defaultOption;
+   }
+ 
+   /**
+    * <p>Construct a <code>ConfirmationCallback</code> with a prompt, message
+    * type, an option type and a default option.</p>
+    *
+    * <p>Underlying security services use this constructor if they require
+    * either a YES/NO, YES/NO/CANCEL or OK/CANCEL confirmation.</p>
+    *
+    * @param prompt the prompt used to describe the list of options.
+    * @param messageType the message type (INFORMATION, WARNING or ERROR).
+    * @param optionType the option type (YES_NO_OPTION, YES_NO_CANCEL_OPTION or
+    * OK_CANCEL_OPTION).
+    * @param defaultOption the default option from the provided optionType (YES,
+    * NO, CANCEL or OK).
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>,
+    * if <code>prompt</code> has a length of <code>0</code>, if
+    * <code>messageType</code> is not either <code>INFORMATION</code>,
+    * <code>WARNING</code>, or <code>ERROR</code>, if <code>optionType</code> is
+    * not either <code>YES_NO_OPTION</code>, <code>YES_NO_CANCEL_OPTION</code>,
+    * or <code>OK_CANCEL_OPTION</code>, or if <code>defaultOption</code> does
+    * not correspond to one of the options in <code>optionType</code>.
+    */
+   public ConfirmationCallback(String prompt, int messageType, int optionType,
+ 			      int defaultOption)
+   {
+     super();
+ 
+     setPrompt(prompt);
+     setMessageType(messageType);
+     setOptionType(optionType, defaultOption);
+     this.defaultOption = defaultOption;
+   }
+ 
+   /**
+    * <p>Construct a <code>ConfirmationCallback</code> with a prompt, message
+    * type, a list of options and a default option.</p>
+    *
+    * <p>Underlying security services use this constructor if they require a
+    * confirmation different from the available preset confirmations provided
+    * (for example, CONTINUE/ABORT or STOP/GO). The confirmation options are
+    * listed in the <code>options</code> array, and are displayed by the
+    * {@link CallbackHandler} implementation in a manner consistent with the
+    * way preset options are displayed.</p>
+    *
+    * @param prompt the prompt used to describe the list of options.
+    * @param messageType the message type (INFORMATION, WARNING or ERROR).
+    * @param options the list of confirmation options.
+    * @param defaultOption the default option, represented as an index into the
+    * <code>options</code> array.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>,
+    * if <code>prompt</code> has a length of <code>0</code>, if
+    * <code>messageType</code> is not either <code>INFORMATION</code>,
+    * <code>WARNING</code>, or <code>ERROR</code>, if <code>options</code> is
+    * <code>null</code>, if <code>options</code> has a length of <code>0</code>,
+    * if any element from <code>options</code> is <code>null</code>, if any
+    * element from <code>options</code> has a length of <code>0</code>, or if
+    * <code>defaultOption</code> does not lie within the array boundaries of
+    * <code>options</code>.
+    */
+   public ConfirmationCallback(String prompt, int messageType, String[] options,
+ 			      int defaultOption)
+   {
+     super();
+ 
+     setPrompt(prompt);
+     setMessageType(messageType);
+     setOptions(options, defaultOption);
+     this.defaultOption = defaultOption;
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Get the prompt.
+    *
+    * @return the prompt, or <code>null</code> if this
+    * <code>ConfirmationCallback</code> was instantiated without a prompt.
+    */
+   public String getPrompt()
+   {
+     return prompt;
+   }
+ 
+   /**
+    * Get the message type.
+    *
+    * @return the message type (INFORMATION, WARNING or ERROR).
+    */
+   public int getMessageType()
+   {
+     return messageType;
+   }
+ 
+   /**
+    * <p>Get the option type.</p>
+    *
+    * <p>If this method returns {@link #UNSPECIFIED_OPTION}, then this
+    * <code>ConfirmationCallback</code> was instantiated with <code>options</code>
+    * instead of an <code>optionType</code>. In this case, invoke the
+    * {@link #getOptions()} method to determine which confirmation options to
+    * display.</p>
+    *
+    * @return the option type (YES_NO_OPTION, YES_NO_CANCEL_OPTION or
+    * OK_CANCEL_OPTION), or UNSPECIFIED_OPTION if this
+    * <code>ConfirmationCallback</code> was instantiated with <code>options</code>
+    * instead of an <code>optionType</code>.
+    */
+   public int getOptionType()
+   {
+     if (options != null)
+       {
+ 	return UNSPECIFIED_OPTION;
+       }
+     return optionType;
+   }
+ 
+   /**
+    * Get the confirmation options.
+    *
+    * @return the list of confirmation options, or <code>null</code> if this
+    * <code>ConfirmationCallback</code> was instantiated with an
+    * <code>optionType</code> instead of <code>options</code>.
+    */
+   public String[] getOptions()
+   {
+     return options;
+   }
+ 
+   /**
+    * Get the default option.
+    *
+    * @return the default option, represented as <code>YES</code>, <code>NO</code>,
+    * <code>OK</code> or <code>CANCEL</code> if an <code>optionType</code> was
+    * specified to the constructor of this <code>ConfirmationCallback</code>.
+    * Otherwise, this method returns the default option as an index into the
+    * <code>options</code> array specified to the constructor of this
+    * <code>ConfirmationCallback</code>.
+    */
+   public int getDefaultOption()
+   {
+     return defaultOption;
+   }
+ 
+   /**
+    * Set the selected confirmation option.
+    *
+    * @param selection the selection represented as <code>YES</code>,
+    * <code>NO</code>, <code>OK</code> or <code>CANCEL</code> if an
+    * <code>optionType</code> was specified to the constructor of this
+    * <code>ConfirmationCallback</code>. Otherwise, the <code>selection</code>
+    * represents the index into the <code>options</code> array specified to the
+    * constructor of this <code>ConfirmationCallback</code>.
+    * @see #getSelectedIndex()
+    */
+   public void setSelectedIndex(int selection)
+   {
+     if (options != null)
+       {
+ 	setOptions(options, selection);
+       }
+     else
+       {
+ 	setOptionType(optionType, selection);
+       }
+   }
+ 
+   /**
+    * Get the selected confirmation option.
+    *
+    * @return the selected confirmation option represented as <code>YES</code>,
+    * <code>NO</code>, <code>OK</code> or <code>CANCEL</code> if an
+    * <code>optionType</code> was specified to the constructor of this
+    * <code>ConfirmationCallback</code>. Otherwise, this method returns the
+    * selected confirmation option as an index into the <code>options</code>
+    * array specified to the constructor of this <code>ConfirmationCallback</code>.
+    * @see #setSelectedIndex(int)
+    */
+   public int getSelectedIndex()
+   {
+     return this.selection;
+   }
+ 
+   private void setMessageType(int messageType) throws IllegalArgumentException
+   {
+     switch (messageType)
+       {
+       case INFORMATION:
+       case WARNING:
+       case ERROR: this.messageType = messageType; break;
+       default: throw new IllegalArgumentException("illegal message type");
+       }
+   }
+ 
+   private void setOptionType(int optionType, int selectedOption)
+     throws IllegalArgumentException
+   {
+     switch (optionType)
+       {
+       case YES_NO_OPTION:
+ 	this.optionType = optionType;
+ 	switch (selectedOption)
+ 	  {
+ 	  case YES:
+ 	  case NO: this.selection = selectedOption; break;
+ 	  default: throw new IllegalArgumentException("invalid option");
+ 	  }
+ 	break;
+       case YES_NO_CANCEL_OPTION:
+ 	this.optionType = optionType;
+ 	switch (selectedOption)
+ 	  {
+ 	  case YES:
+ 	  case NO:
+ 	  case CANCEL: this.selection = selectedOption; break;
+ 	  default: throw new IllegalArgumentException("invalid option");
+ 	  }
+ 	break;
+       case OK_CANCEL_OPTION:
+ 	this.optionType = optionType;
+ 	switch (selectedOption)
+ 	  {
+ 	  case OK:
+ 	  case CANCEL: this.selection = selectedOption; break;
+ 	  default: throw new IllegalArgumentException("invalid option");
+ 	  }
+ 	break;
+       default:
+ 	throw new IllegalArgumentException("illegal option type");
+       }
+   }
+ 
+   private void setOptions(String[] options, int selectedOption)
+     throws IllegalArgumentException
+   {
+     if ((selectedOption < 0) || (selectedOption > options.length - 1))
+       {
+ 	throw new IllegalArgumentException("invalid selection");
+       }
+     if ((options == null) || (options.length == 0))
+       {
+ 	throw new IllegalArgumentException("options is null or empty");
+       }
+     for (int i = 0; i < options.length; i++)
+       {
+ 	if ((options[i] == null) || (options[i].length() == 0))
+ 	  {
+ 	    throw new IllegalArgumentException("options[" + i + "] is null or empty");
+ 	  }
+       }
+     this.options = options;
+     this.selection = selectedOption;
+   }
+ 
+   private void setPrompt(String prompt) throws IllegalArgumentException
+   {
+     if ((prompt == null) || (prompt.length() == 0))
+       {
+ 	throw new IllegalArgumentException("prompt is null or empty");
+       }
+     this.prompt = prompt;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/LanguageCallback.java gcc-4.0.0/libjava/javax/security/auth/callback/LanguageCallback.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/LanguageCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/LanguageCallback.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,100 ----
+ /* LanguageCallback.java -- callback for language choices.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ import java.io.Serializable;
+ import java.util.Locale;
+ 
+ /**
+  * Underlying security services instantiate and pass a <code>LanguageCallback</code>
+  * to the <code>handle()</code> method of a {@link CallbackHandler} to retrieve
+  * the {@link Locale} used for localizing text.
+  *
+  * @see CallbackHandler
+  */
+ public class LanguageCallback implements Callback, Serializable
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private Locale locale;
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /** Construct a <code>LanguageCallback</code>. */
+   public LanguageCallback()
+   {
+     super();
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Set the retrieved Locale.
+    *
+    * @param locale the retrieved Locale.
+    * @see #getLocale()
+    */
+   public void setLocale(Locale locale)
+   {
+     this.locale = locale;
+   }
+ 
+   /**
+    * Get the retrieved Locale.
+    *
+    * @return the retrieved Locale, or <code>null</code> if no Locale could be
+    * retrieved.
+    * @see #setLocale(Locale)
+    */
+   public Locale getLocale()
+   {
+     return locale;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/NameCallback.java gcc-4.0.0/libjava/javax/security/auth/callback/NameCallback.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/NameCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/NameCallback.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,178 ----
+ /* NameCallback.java -- callback for user names.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Underlying security services instantiate and pass a <code>NameCallback</code>
+  * to the <code>handle()</code> method of a {@link CallbackHandler} to retrieve
+  * name information.
+  *
+  * @see CallbackHandler
+  */
+ public class NameCallback implements Callback, Serializable
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String prompt;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String defaultName;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String inputName;
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Construct a <code>NameCallback</code> with a prompt.
+    *
+    * @param prompt the prompt used to request the name.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>
+    * or if <code>prompt</code> has a length of <code>0</code>.
+    */
+   public NameCallback(String prompt)
+   {
+     super();
+ 
+     setPrompt(prompt);
+   }
+ 
+   /**
+    * Construct a <code>NameCallback</code> with a prompt and default name.
+    *
+    * @param prompt the prompt used to request the information.
+    * @param defaultName the name to be used as the default name displayed with
+    * the prompt.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>
+    * or if <code>prompt</code> has a length of <code>0</code>, if
+    * <code>defaultName</code> is <code>null</code>, or if <code>defaultName</code>
+    * has a length of <code>0</code>.
+    */
+   public NameCallback(String prompt, String defaultName)
+     throws IllegalArgumentException
+   {
+     super();
+ 
+     setPrompt(prompt);
+     setDefaultName(defaultName);
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Get the prompt.
+    *
+    * @return the prompt.
+    */
+   public String getPrompt()
+   {
+     return prompt;
+   }
+ 
+   /**
+    * Get the default name.
+    *
+    * @return the default name, or <code>null</code> if this
+    * <code>NameCallback</code> was not instantiated with a
+    * <code>defaultName</code>.
+    */
+   public String getDefaultName()
+   {
+     return defaultName;
+   }
+ 
+   /**
+    * Set the retrieved name.
+    *
+    * @param name the retrieved name (which may be <code>null</code>).
+    * @see #getName()
+    */
+   public void setName(String name)
+   {
+     this.inputName = name;
+   }
+ 
+   /**
+    * Get the retrieved name.
+    *
+    * @return the retrieved name (which may be <code>null</code>)
+    * @see #setName(String)
+    */
+   public String getName()
+   {
+     return inputName;
+   }
+ 
+   private void setPrompt(String prompt) throws IllegalArgumentException
+   {
+     if ((prompt == null) || (prompt.length() == 0))
+       {
+ 	throw new IllegalArgumentException("invalid prompt");
+       }
+     this.prompt = prompt;
+   }
+ 
+   private void setDefaultName(String defaultName) throws IllegalArgumentException
+   {
+     if ((defaultName == null) || (defaultName.length() == 0))
+       {
+ 	throw new IllegalArgumentException("invalid default name");
+       }
+     this.defaultName = defaultName;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/PasswordCallback.java gcc-4.0.0/libjava/javax/security/auth/callback/PasswordCallback.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/PasswordCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/PasswordCallback.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,168 ----
+ /* PasswordCallback.java -- callback for passwords.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Underlying security services instantiate and pass a <code>PasswordCallback</code>
+  * to the <code>handle()</code> method of a {@link CallbackHandler} to retrieve
+  * password information.
+  *
+  * @see CallbackHandler,
+  */
+ public class PasswordCallback implements Callback, Serializable
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String prompt;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private boolean echoOn;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private char[] inputPassword;
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Construct a <code>PasswordCallback</code> with a prompt and a boolean
+    * specifying whether the password should be displayed as it is being typed.
+    *
+    * @param prompt the prompt used to request the password.
+    * @param echoOn <code>true</code> if the password should be displayed as it
+    * is being typed.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>
+    * or if <code>prompt</code> has a length of <code>0</code>.
+    */
+   public PasswordCallback(String prompt, boolean echoOn)
+   {
+     super();
+ 
+     setPrompt(prompt);
+     this.echoOn = echoOn;
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Get the prompt.
+    *
+    * @return the prompt.
+    */
+   public String getPrompt()
+   {
+     return prompt;
+   }
+ 
+   /**
+    * Return whether the password should be displayed as it is being typed.
+    *
+    * @return the whether the password should be displayed as it is being typed.
+    */
+   public boolean isEchoOn()
+   {
+     return echoOn;
+   }
+ 
+   /**
+    * <p>Set the retrieved password.</p>
+    *
+    * <p>This method makes a copy of the input password before storing it.</p>
+    *
+    * @param password the retrieved password, which may be <code>null</code>.
+    * @see #getPassword()
+    */
+   public void setPassword(char[] password)
+   {
+     inputPassword = (password == null ? null : (char[]) password.clone());
+   }
+ 
+   /**
+    * <p>Get the retrieved password.</p>
+    *
+    * <p>This method returns a copy of the retrieved password.</p>
+    *
+    * @return the retrieved password, which may be <code>null</code>.
+    * @see #setPassword(char[])
+    */
+   public char[] getPassword()
+   {
+     return (inputPassword == null ? null : (char[]) inputPassword.clone());
+   }
+ 
+   /** Clear the retrieved password. */
+   public void clearPassword()
+   {
+     if (inputPassword != null)
+       {
+ 	for (int i = 0; i < inputPassword.length; i++)
+ 	  {
+ 	    inputPassword[i] = '\0';
+ 	  }
+ 	inputPassword = null;
+       }
+   }
+ 
+   private void setPrompt(String prompt) throws IllegalArgumentException
+   {
+     if ((prompt == null) || (prompt.length() == 0))
+       {
+ 	throw new IllegalArgumentException("invalid prompt");
+       }
+     this.prompt = prompt;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/TextInputCallback.java gcc-4.0.0/libjava/javax/security/auth/callback/TextInputCallback.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/TextInputCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/TextInputCallback.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,177 ----
+ /* TextInputCallback.java -- callbacks for user input.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * Underlying security services instantiate and pass a <code>TextInputCallback</code>
+  * to the <code>handle()</code> method of a {@link CallbackHandler} to retrieve
+  * generic text information.
+  *
+  * @see CallbackHandler
+  */
+ public class TextInputCallback implements Callback, Serializable
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String prompt;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String defaultText;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String inputText;
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Construct a <code>TextInputCallback</code> with a prompt.
+    *
+    * @param prompt the prompt used to request the information.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>
+    * or if <code>prompt</code> has a length of <code>0</code>.
+    */
+   public TextInputCallback(String prompt) throws IllegalArgumentException
+   {
+     super();
+ 
+     setPrompt(prompt);
+   }
+ 
+   /**
+    * Construct a <code>TextInputCallback</code> with a prompt and default
+    * input value.
+    *
+    * @param prompt the prompt used to request the information.
+    * @param defaultText the text to be used as the default text displayed with
+    * the prompt.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>,
+    * if <code>prompt</code> has a length of <code>0</code>, if
+    * <code>defaultText</code> is <code>null</code> or if <code>defaultText</code>
+    * has a length of <code>0</code>.
+    */
+   public TextInputCallback(String prompt, String defaultText)
+     throws IllegalArgumentException
+   {
+     super();
+ 
+     setPrompt(prompt);
+     setDefaultText(defaultText);
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Get the prompt.
+    *
+    * @return the prompt.
+    */
+   public String getPrompt()
+   {
+     return prompt;
+   }
+ 
+   /**
+    * Get the default text.
+    *
+    * @return the default text, or <code>null</code> if this
+    * <code>TextInputCallback</code> was not instantiated with
+    * <code>defaultText</code>.
+    */
+   public String getDefaultText()
+   {
+     return defaultText;
+   }
+ 
+   /**
+    * Set the retrieved text.
+    *
+    * @param text the retrieved text, which may be <code>null</code>.
+    */
+   public void setText(String text)
+   {
+     this.inputText = text;
+   }
+ 
+   /**
+    * Get the retrieved text.
+    *
+    * @return the retrieved text, which may be <code>null</code>.
+    */
+   public String getText()
+   {
+     return inputText;
+   }
+ 
+   private void setPrompt(String prompt) throws IllegalArgumentException
+   {
+     if ((prompt == null) || (prompt.length() == 0))
+       {
+ 	throw new IllegalArgumentException("invalid prompt");
+       }
+     this.prompt = prompt;
+   }
+ 
+   private void setDefaultText(String defaultText) throws IllegalArgumentException
+   {
+     if ((defaultText == null) || (defaultText.length() == 0))
+       {
+ 	throw new IllegalArgumentException("invalid default text");
+       }
+     this.defaultText = defaultText;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/TextOutputCallback.java gcc-4.0.0/libjava/javax/security/auth/callback/TextOutputCallback.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/TextOutputCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/TextOutputCallback.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,140 ----
+ /* TextOutputCallback.java -- callback for text output.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * <p>Underlying security services instantiate and pass a
+  * <code>TextOutputCallback</code> to the <code>handle()</code> method of a
+  * {@link CallbackHandler} to display information messages, warning messages and
+  * error messages.</p>
+  *
+  * @see CallbackHandler
+  */
+ public class TextOutputCallback implements Callback, Serializable
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /** Information message */
+   public static final int INFORMATION = 0;
+ 
+   /** Warning message */
+   public static final int WARNING = 1;
+ 
+   /** Error message */
+   public static final int ERROR = 2;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private int messageType;
+ 
+   /**
+    * @serial
+    * @since 1.4
+    */
+   private String message;
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Construct a <code>TextOutputCallback</code> with a message type and
+    * message to be displayed.</p>
+    *
+    * @param messageType the message type (INFORMATION, WARNING or ERROR).
+    * @param message the message to be displayed.
+    * @throws IllegalArgumentException if <code>messageType</code> is not either
+    * <code>INFORMATION</code>, <code>WARNING</code> or <code>ERROR</code>, if
+    * <code>message</code> is <code>null</code>, or if <code>message</code> has
+    * a length of <code>0</code>.
+    */
+   public TextOutputCallback(int messageType, String message)
+     throws IllegalArgumentException
+   {
+     switch (messageType)
+       {
+       case INFORMATION:
+       case WARNING:
+       case ERROR: this.messageType = messageType; break;
+       default: throw new IllegalArgumentException("invalid message type");
+       }
+ 
+     setMessage(message);
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Returns the message's <code>messageType</code>.</p>
+    *
+    * @return the message type (INFORMATION, WARNING or ERROR).
+    */
+   public int getMessageType()
+   {
+     return messageType;
+   }
+ 
+   /**
+    * <p>Returns the <code>message</code> to be displayed.</p>
+    *
+    * @return the message to be displayed.
+    */
+   public String getMessage()
+   {
+     return message;
+   }
+ 
+   private void setMessage(String message) throws IllegalArgumentException
+   {
+     if ((message == null) || (message.length() == 0))
+       {
+ 	throw new IllegalArgumentException("invalid message");
+       }
+     this.message = message;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/callback/UnsupportedCallbackException.java gcc-4.0.0/libjava/javax/security/auth/callback/UnsupportedCallbackException.java
*** gcc-3.4.3/libjava/javax/security/auth/callback/UnsupportedCallbackException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/callback/UnsupportedCallbackException.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,101 ----
+ /* UnsupportedCallbackException.java -- signals an unsupported callback 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.callback;
+ 
+ /**
+  * Signals that a {@link CallbackHandler} does not recognize a particular
+  * {@link Callback}.
+  *
+  */
+ public class UnsupportedCallbackException extends Exception
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /** @serial */
+   private Callback callback;
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Constructs an <code>UnsupportedCallbackException</code> with no detail
+    * message.
+    *
+    * @param callback the unrecognized {@link Callback}.
+    */
+   public UnsupportedCallbackException(Callback callback)
+   {
+     super();
+ 
+     this.callback = callback;
+   }
+ 
+   /**
+    * Constructs an <code>UnsupportedCallbackException</code> with the specified
+    * detail message. A detail message is a {@link String} that describes this
+    * particular exception.
+    *
+    * @param callback the unrecognized {@link Callback}.
+    * @param msg the detail message.
+    */
+   public UnsupportedCallbackException(Callback callback, String msg)
+   {
+     super(msg);
+ 
+     this.callback = callback;
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Get the unrecognized {@link Callback}.
+    *
+    * @return the unrecognized {@link Callback}.
+    */
+   public Callback getCallback()
+   {
+     return this.callback;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/login/AccountExpiredException.java gcc-4.0.0/libjava/javax/security/auth/login/AccountExpiredException.java
*** gcc-3.4.3/libjava/javax/security/auth/login/AccountExpiredException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/login/AccountExpiredException.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,64 ----
+ /* AccountExpiredException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.login;
+ 
+ /**
+  * An exception that signals that an attempt was made to login to an account
+  * that has expired.
+  */
+ public class AccountExpiredException extends LoginException
+ {
+ 
+   // Constant.
+   // -------------------------------------------------------------------------
+ 
+   private static final long serialVersionUID = -6064064890162661560L;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public AccountExpiredException()
+   {
+   }
+ 
+   public AccountExpiredException (String message)
+   {
+     super (message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/login/AppConfigurationEntry.java gcc-4.0.0/libjava/javax/security/auth/login/AppConfigurationEntry.java
*** gcc-3.4.3/libjava/javax/security/auth/login/AppConfigurationEntry.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/login/AppConfigurationEntry.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,135 ----
+ /* AppConfigurationEntry.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.login;
+ 
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ public class AppConfigurationEntry
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private final String loginModuleName;
+   private final LoginModuleControlFlag controlFlag;
+   private final Map options;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public AppConfigurationEntry (final String loginModuleName,
+                                 final LoginModuleControlFlag controlFlag,
+                                 final Map options)
+   {
+     if (loginModuleName == null || loginModuleName.length() == 0)
+       throw new IllegalArgumentException ("module name cannot be null nor empty");
+     if (LoginModuleControlFlag.OPTIONAL != controlFlag &&
+         LoginModuleControlFlag.REQUIRED != controlFlag &&
+         LoginModuleControlFlag.REQUISITE != controlFlag &&
+         LoginModuleControlFlag.SUFFICIENT != controlFlag)
+       throw new IllegalArgumentException ("invalid controlFlag");
+     if (options == null)
+       throw new IllegalArgumentException ("options cannot be null");
+     this.loginModuleName = loginModuleName;
+     this.controlFlag = controlFlag;
+     this.options = Collections.unmodifiableMap (new HashMap (options));
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public LoginModuleControlFlag getControlFlag()
+   {
+     return controlFlag;
+   }
+ 
+   public String getLoginModuleName()
+   {
+     return loginModuleName;
+   }
+ 
+   public Map getOptions()
+   {
+     return options;
+   }
+ 
+ // Inner class.
+   // -------------------------------------------------------------------------
+ 
+   public static class LoginModuleControlFlag
+   {
+ 
+     // Constants.
+     // -----------------------------------------------------------------------
+ 
+     public static final LoginModuleControlFlag OPTIONAL = new LoginModuleControlFlag();
+     public static final LoginModuleControlFlag REQUIRED = new LoginModuleControlFlag();
+     public static final LoginModuleControlFlag REQUISITE = new LoginModuleControlFlag();
+     public static final LoginModuleControlFlag SUFFICIENT = new LoginModuleControlFlag();
+ 
+     // Constructor.
+     // -----------------------------------------------------------------------
+ 
+     private LoginModuleControlFlag()
+     {
+     }
+ 
+     // Instance methods.
+     // -----------------------------------------------------------------------
+ 
+     public String toString()
+     {
+       StringBuffer buf = new StringBuffer (LoginModuleControlFlag.class.getName());
+       buf.append ('.');
+       if (this == OPTIONAL)
+         buf.append ("OPTIONAL");
+       else if (this == REQUIRED)
+         buf.append ("REQUIRED");
+       else if (this == REQUISITE)
+         buf.append ("REQUISITE");
+       else if (this == SUFFICIENT)
+         buf.append ("SUFFICIENT");
+       else
+         buf.append ("HARVEY_THE_RABBIT");
+       return buf.toString();
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/login/Configuration.java gcc-4.0.0/libjava/javax/security/auth/login/Configuration.java
*** gcc-3.4.3/libjava/javax/security/auth/login/Configuration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/login/Configuration.java	Tue Nov 16 07:42:42 2004
***************
*** 0 ****
--- 1,120 ----
+ /* Configuration.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.login;
+ 
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.security.Security;
+ 
+ import javax.security.auth.AuthPermission;
+ 
+ public abstract class Configuration
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private static Configuration config;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   protected Configuration()
+   {
+   }
+ 
+   // Class methods.
+   // -------------------------------------------------------------------------
+ 
+   public static synchronized Configuration getConfiguration()
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission (new AuthPermission ("getLoginConfiguration"));
+     if (config == null)
+       {
+         String conf = (String) AccessController.doPrivileged
+           (new PrivilegedAction()
+             {
+               public Object run()
+               {
+                 return Security.getProperty ("login.configuration.provider");
+               }
+             });
+         try
+           {
+             if (conf != null)
+               config = (Configuration) Class.forName (conf).newInstance();
+             else
+               config = new NullConfiguration();
+           }
+         catch (Exception x)
+           {
+             config = new NullConfiguration();
+           }
+       }
+     return config;
+   }
+ 
+   public static synchronized void setConfiguration (Configuration config)
+   {
+     SecurityManager sm = System.getSecurityManager();
+     if (sm != null)
+       sm.checkPermission (new AuthPermission ("setLoginConfiguration"));
+     Configuration.config = config;
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------------
+ 
+   public abstract AppConfigurationEntry[] getAppConfigurationEntry (String applicationName);
+ 
+   public abstract void refresh();
+ 
+   // Package-private methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Get the current configuration, bypassing security checks.
+    */
+   static Configuration getConfig()
+   {
+     return config;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/login/CredentialExpiredException.java gcc-4.0.0/libjava/javax/security/auth/login/CredentialExpiredException.java
*** gcc-3.4.3/libjava/javax/security/auth/login/CredentialExpiredException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/login/CredentialExpiredException.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,64 ----
+ /* CredentialExpiredException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.login;
+ 
+ /**
+  * An exception that signals an attempt to login with a credential that
+  * has expired.
+  */
+ public class CredentialExpiredException extends LoginException
+ {
+ 
+   // Constant.
+   // -------------------------------------------------------------------------
+ 
+   private static final long serialVersionUID = -5344739593859737937L;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public CredentialExpiredException()
+   {
+   }
+ 
+   public CredentialExpiredException (String message)
+   {
+     super (message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/login/FailedLoginException.java gcc-4.0.0/libjava/javax/security/auth/login/FailedLoginException.java
*** gcc-3.4.3/libjava/javax/security/auth/login/FailedLoginException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/login/FailedLoginException.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,63 ----
+ /* FailedLoginException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.login;
+ 
+ /**
+  * An exception that signals that an attempt to login was unsuccessful.
+  */
+ public class FailedLoginException extends LoginException
+ {
+ 
+   // Constant.
+   // -------------------------------------------------------------------------
+ 
+   private static final long serialVersionUID = 802556922354616286L;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public FailedLoginException()
+   {
+   }
+ 
+   public FailedLoginException (String message)
+   {
+     super (message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/login/LoginContext.java gcc-4.0.0/libjava/javax/security/auth/login/LoginContext.java
*** gcc-3.4.3/libjava/javax/security/auth/login/LoginContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/login/LoginContext.java	Tue Nov 16 07:42:42 2004
***************
*** 0 ****
--- 1,253 ----
+ /* LoginContext.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.login;
+ 
+ import gnu.java.security.action.GetSecurityPropertyAction;
+ 
+ import java.security.AccessController;
+ 
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ import javax.security.auth.Subject;
+ import javax.security.auth.callback.CallbackHandler;
+ import javax.security.auth.spi.LoginModule;
+ 
+ public class LoginContext
+ {
+ 
+   private static final String OTHER = "other";
+ 
+   private final String name;
+   private final CallbackHandler cbHandler;
+   private final Subject subject;
+   private final AppConfigurationEntry[] entries;
+   private final LoginModule[] modules;
+   private final Map sharedState;
+ 
+   public LoginContext (final String name) throws LoginException
+   {
+     this (name, new Subject(), defaultHandler());
+   }
+ 
+   public LoginContext (final String name, final CallbackHandler cbHandler)
+     throws LoginException
+   {
+     this (name, new Subject(), cbHandler);
+   }
+ 
+   public LoginContext (final String name, final Subject subject)
+     throws LoginException
+   {
+     this (name, subject, defaultHandler());
+   }
+ 
+   public LoginContext (final String name, final Subject subject,
+                        final CallbackHandler cbHandler)
+     throws LoginException
+   {
+     Configuration config = Configuration.getConfig();
+     AppConfigurationEntry[] entries = config.getAppConfigurationEntry (name);
+     if (entries == null)
+       entries = config.getAppConfigurationEntry (OTHER);
+     if (entries == null)
+       throw new LoginException ("no configured modules for application "
+                                 + name);
+     this.entries = entries;
+     modules = new LoginModule[entries.length];
+     sharedState = new HashMap();
+     for (int i = 0; i < entries.length; i++)
+       modules[i] = lookupModule (entries[i], subject, sharedState);
+     this.name = name;
+     this.subject = subject;
+     this.cbHandler = cbHandler;
+   }
+ 
+   /**
+    * Returns the authenticated subject, or the parameter passed to one
+    * of the constructors. <code>null</code> is returned if the previous
+    * login attempt failed and there was no subject provided.
+    *
+    * @return The subject, or null.
+    */
+   public Subject getSubject()
+   {
+     return subject;
+   }
+ 
+   /**
+    * Logs a subject in, using all login modules configured for this
+    * application. This method will call the {@link LoginModule#login()}
+    * method of each module configured for this application, stopping
+    * if a REQUISITE module fails or if a SUFFICIENT module succeeds. If
+    * the overall login attempt fails, a {@link LoginException} will be
+    * thrown.
+    *
+    * @throws LoginException If logging in fails.
+    */
+   public void login() throws LoginException
+   {
+     boolean failure = false;
+     for (int i = 0; i < modules.length; i++)
+       {
+         try
+           {
+             boolean result = modules[i].login();
+             if (!result)
+               {
+                 if (entries[i].getControlFlag() ==
+                     AppConfigurationEntry.LoginModuleControlFlag.REQUISITE)
+                   throw new LoginException ("REQUISITE module " + entries[i].getLoginModuleName()
+                                             + " failed");
+                 else if (entries[i].getControlFlag() ==
+                          AppConfigurationEntry.LoginModuleControlFlag.REQUIRED)
+                   failure = true;
+               }
+             else
+               {
+                 if (entries[i].getControlFlag() ==
+                     AppConfigurationEntry.LoginModuleControlFlag.SUFFICIENT)
+                   break;
+               }
+           }
+         catch (LoginException le)
+           {
+             if (entries[i].getControlFlag() !=
+                 AppConfigurationEntry.LoginModuleControlFlag.REQUISITE)
+               continue;
+             for (int j = 0; j < modules.length; j++)
+               modules[i].abort();
+             throw le;
+           }
+       }
+     if (failure)
+       throw new LoginException ("not all REQUIRED modules succeeded");
+ 
+     for (int i = 0; i < modules.length; i++)
+       modules[i].commit();
+   }
+ 
+   /**
+    * Logs a subject out, cleaning up any state that may be in memory.
+    *
+    * @throws LoginException If logging out fails.
+    */
+   public void logout() throws LoginException
+   {
+     for (int i = 0; i < modules.length; i++)
+       modules[i].logout();
+   }
+ 
+   // Own methods.
+ 
+   /**
+    * Fetch the default callback handler, based on the
+    * auth.login.defaultCallbackHandler property, or null if it is not
+    * set.
+    */
+   private static CallbackHandler defaultHandler()
+   {
+     GetSecurityPropertyAction act =
+       new GetSecurityPropertyAction ("auth.login.defaultCallbackHandler");
+     String classname = (String) AccessController.doPrivileged (act);
+     if (classname != null)
+       {
+         try
+           {
+             return (CallbackHandler) Class.forName (classname).newInstance();
+           }
+         catch (ClassNotFoundException cnfe)
+           {
+             return null;
+           }
+         catch (ClassCastException cce)
+           {
+             return null;
+           }
+         catch (IllegalAccessException iae)
+           {
+             return null;
+           }
+         catch (InstantiationException ie)
+           {
+             return null;
+           }
+       }
+     return null;
+   }
+ 
+   private LoginModule lookupModule (AppConfigurationEntry entry,
+                                     Subject subject, Map sharedState)
+     throws LoginException
+   {
+     LoginModule module = null;
+     Exception cause = null;
+     try
+       {
+         module = (LoginModule) Class.forName (entry.getLoginModuleName()).newInstance();
+       }
+     catch (ClassNotFoundException cnfe)
+       {
+         cause = cnfe;
+       }
+     catch (ClassCastException cce)
+       {
+         cause = cce;
+       }
+     catch (IllegalAccessException iae)
+       {
+         cause = iae;
+       }
+     catch (InstantiationException ie)
+       {
+         cause = ie;
+       }
+ 
+     if (cause != null)
+       {
+         LoginException le = new LoginException ("could not load module "
+                                                 + entry.getLoginModuleName());
+         le.initCause (cause);
+         throw le;
+       }
+ 
+     module.initialize (subject, cbHandler, sharedState, entry.getOptions());
+     return module;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/login/LoginException.java gcc-4.0.0/libjava/javax/security/auth/login/LoginException.java
*** gcc-3.4.3/libjava/javax/security/auth/login/LoginException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/login/LoginException.java	Tue Sep 21 08:33:33 2004
***************
*** 0 ****
--- 1,65 ----
+ /* LoginException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.login;
+ 
+ import java.security.GeneralSecurityException;
+ 
+ /**
+  * A general exception during authentication and authorization.
+  */
+ public class LoginException extends GeneralSecurityException
+ {
+ 
+   // Constant.
+   // -------------------------------------------------------------------------
+ 
+   private static final long serialVersionUID = -4679091624035232488L;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public LoginException()
+   {
+   }
+ 
+   public LoginException (String message)
+   {
+     super (message);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/login/NullConfiguration.java gcc-4.0.0/libjava/javax/security/auth/login/NullConfiguration.java
*** gcc-3.4.3/libjava/javax/security/auth/login/NullConfiguration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/login/NullConfiguration.java	Wed Oct 20 10:42:13 2004
***************
*** 0 ****
--- 1,62 ----
+ /* NullConfiguration.java -- no-op default login configuration.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.login;
+ 
+ final class NullConfiguration extends Configuration
+ {
+ 
+   // Contructor.
+   // -------------------------------------------------------------------------
+ 
+   NullConfiguration()
+   {
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public AppConfigurationEntry[] getAppConfigurationEntry (String applicationName)
+   {
+     return null;
+   }
+ 
+   public void refresh()
+   {
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/spi/LoginModule.java gcc-4.0.0/libjava/javax/security/auth/spi/LoginModule.java
*** gcc-3.4.3/libjava/javax/security/auth/spi/LoginModule.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/spi/LoginModule.java	Tue Nov 16 07:42:42 2004
***************
*** 0 ****
--- 1,122 ----
+ /* LoginModule.java -- interface for login implementations.
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.spi;
+ 
+ import java.util.Map;
+ 
+ import javax.security.auth.Subject;
+ import javax.security.auth.callback.CallbackHandler;
+ import javax.security.auth.login.LoginException;
+ 
+ /**
+  * The base interface for login methods in the Java Authentication and
+  * Authorization Service (JAAS).
+  *
+  * <p>This interface is used by service providers that implement login
+  * services, and is used internally by the JAAS system. It is not useful
+  * to application programmers, who should use the {@link
+  * javax.security.auth.login.LoginContext} instead.
+  *
+  * @author Casey Marshall (csm@gnu.org)
+  */
+ public interface LoginModule
+ {
+   /**
+    * Abort the current login attempt. This is called after {@link #login()}
+    * if the overall login attempt fails (that is, if one of the other login
+    * modules that is REQUIRED or REQUISITE fails). This method should clean
+    * up this module's saved state, if any.
+    *
+    * @return True if the abort succeeded, or false if this module should
+    * be ignored.
+    * @throws LoginException If the abort fails.
+    */
+   boolean abort() throws LoginException;
+ 
+   /**
+    * Commit the current login attempt. This is called after {@link
+    * #login()} if the overall login attempt succeeds (that is, all
+    * methods have satisfied all REQUIRED, REQUISITE, SUFFICIENT and
+    * OPTIONAL module requirements).
+    *
+    * @return True if the commit succeeded, or false if this module
+    * should be ignored.
+    * @throws LoginException If the commit fails.
+    */
+   boolean commit() throws LoginException;
+ 
+   /**
+    * Initializes this login module. This method is called when the
+    * instance implementing this interface is instantiated, and should
+    * perform any initialization based on the given parameters.
+    * Implementations should ignore state variables and options they do
+    * not recognize.
+    *
+    * @param subject The subject being authenticated.
+    * @param handler The callback handler for user input.
+    * @param sharedState A mapping that is shared between all login
+    * modules.
+    * @param options A mapping of options given to this module.
+    */
+   void initialize(Subject subject, CallbackHandler handler,
+                   Map sharedState, Map options);
+ 
+   /**
+    * Authenticates a subject to the system. This is the primary
+    * mechanism by which subjects are authenticated, and typically
+    * implementations will ask for credentials (for example, a user
+    * name and password) which will then be verified.
+    *
+    * @return True if the subject was authenticated, or false if this
+    * module should be ignored.
+    * @throws LoginException If this method fails.
+    */
+   boolean login() throws LoginException;
+ 
+   /**
+    * Logs a subject out. This is primarily used for modules that must
+    * destroy or remove the authentication state associated with a
+    * logged-in subject.
+    *
+    * @return True if the logout succeeds, or false if this module
+    * should be ignored.
+    * @throws LoginException If this method fails.
+    */
+   boolean logout() throws LoginException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/x500/X500Principal.java gcc-4.0.0/libjava/javax/security/auth/x500/X500Principal.java
*** gcc-3.4.3/libjava/javax/security/auth/x500/X500Principal.java	Fri Jun 27 16:11:27 2003
--- gcc-4.0.0/libjava/javax/security/auth/x500/X500Principal.java	Thu Oct 21 21:00:06 2004
***************
*** 1,5 ****
  /* X500Principal.java -- X.500 principal.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* X500Principal.java -- X.500 principal.
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** GNU Classpath is free software; you can 
*** 7,13 ****
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
!  
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--- 7,13 ----
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
! 
  GNU Classpath is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*************** exception statement from your version. *
*** 38,57 ****
  
  package javax.security.auth.x500;
  
  import java.io.ByteArrayInputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.NotActiveException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  
  import java.security.Principal;
  
  import java.util.HashSet;
  import java.util.LinkedList;
! 
! import gnu.java.security.x509.X500DistinguishedName;
  
  public final class X500Principal implements Principal, Serializable
  {
--- 38,70 ----
  
  package javax.security.auth.x500;
  
+ 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.ByteArrayInputStream;
+ import java.io.EOFException;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.NotActiveException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
+ import java.io.Reader;
  import java.io.Serializable;
+ import java.io.StringReader;
  
  import java.security.Principal;
  
+ import java.util.ArrayList;
  import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedHashMap;
  import java.util.LinkedList;
! import java.util.List;
! import java.util.Locale;
! import java.util.Map;
! import java.util.Set;
  
  public final class X500Principal implements Principal, Serializable
  {
*************** public final class X500Principal impleme
*** 61,104 ****
    // ------------------------------------------------------------------------
  
    public static final String CANONICAL = "CANONICAL";
- 
    public static final String RFC1779 = "RFC1779";
- 
    public static final String RFC2253 = "RFC2253";
  
!   private transient X500DistinguishedName name;
  
    // Constructors.
    // ------------------------------------------------------------------------
  
!   public X500Principal(String name)
    {
!     if (name == null)
!       throw new NullPointerException();
!     this.name = new X500DistinguishedName(name);
    }
  
!   public X500Principal(byte[] encoded)
    {
      try
        {
!         name = new X500DistinguishedName(encoded);
        }
      catch (IOException ioe)
        {
!         throw new IllegalArgumentException(ioe.toString());
        }
    }
  
!   public X500Principal(InputStream encoded)
    {
      try
        {
!         name = new X500DistinguishedName(encoded);
        }
      catch (IOException ioe)
        {
!         throw new IllegalArgumentException(ioe.toString());
        }
    }
  
--- 74,139 ----
    // ------------------------------------------------------------------------
  
    public static final String CANONICAL = "CANONICAL";
    public static final String RFC1779 = "RFC1779";
    public static final String RFC2253 = "RFC2253";
  
!   private static final OID CN         = new OID("2.5.4.3");
!   private static final OID C          = new OID("2.5.4.6");
!   private static final OID L          = new OID("2.5.4.7");
!   private static final OID ST         = new OID("2.5.4.8");
!   private static final OID STREET     = new OID("2.5.4.9");
!   private static final OID O          = new OID("2.5.4.10");
!   private static final OID OU         = new OID("2.5.4.11");
!   private static final OID DC         = new OID("0.9.2342.19200300.100.1.25");
!   private static final OID UID        = new OID("0.9.2342.19200300.100.1.1");
! 
!   private transient List components;
!   private transient Map currentRdn;
!   private transient boolean fixed;
!   private transient byte[] encoded;
  
    // Constructors.
    // ------------------------------------------------------------------------
  
!   private X500Principal()
    {
!     components = new LinkedList();
!     currentRdn = new LinkedHashMap();
!     components.add (currentRdn);
    }
  
!   public X500Principal (String name)
    {
+     this();
+     if (name == null)
+       throw new NullPointerException();
      try
        {
!         parseString (name);
        }
      catch (IOException ioe)
        {
!         IllegalArgumentException iae = new IllegalArgumentException("malformed name");
!         iae.initCause (ioe);
!         throw iae;
        }
    }
  
!   public X500Principal (byte[] encoded)
!   {
!     this(new ByteArrayInputStream (encoded));
!   }
! 
!   public X500Principal (InputStream encoded)
    {
+     this();
      try
        {
!         parseDer (encoded);
        }
      catch (IOException ioe)
        {
!         throw new IllegalArgumentException (ioe.toString());
        }
    }
  
*************** public final class X500Principal impleme
*** 107,148 ****
  
    public boolean equals(Object o)
    {
!     return ((X500Principal) o).name.equals(name);
    }
  
    public byte[] getEncoded()
    {
!     return name.getEncoded();
    }
  
    public String getName()
    {
!     return getName(RFC2253);
    }
  
!   public String getName(String format)
    {
!     if (format.equalsIgnoreCase(RFC2253))
!       return name.toRFC2253();
!     else if (format.equalsIgnoreCase(RFC1779))
!       return name.toRFC1779();
!     else if (format.equalsIgnoreCase(CANONICAL))
!       return name.toCanonical();
!     throw new IllegalArgumentException("unsupported format " + format);
    }
  
    // Serialization methods.
    // ------------------------------------------------------------------------
  
!   private void writeObject(ObjectOutputStream out) throws IOException
    {
!     out.writeObject(name.getEncoded());
    }
  
!   private void readObject(ObjectInputStream in)
      throws IOException, NotActiveException, ClassNotFoundException
    {
      byte[] buf = (byte[]) in.readObject();
!     name = new X500DistinguishedName(buf);
    }
  }
--- 142,530 ----
  
    public boolean equals(Object o)
    {
!     if (!(o instanceof X500Principal))
!       return false;
!     if (size() != ((X500Principal) 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 = ((X500Principal) o).getComponent (oid, i);
!             if (v2 == null)
!               return false;
!             if (!compressWS (v1).equalsIgnoreCase (compressWS (v2)))
!               return false;
!           }
!       }
!     return true;
    }
  
    public byte[] getEncoded()
    {
!     if (encoded == null)
!       encodeDer();
!     return (byte[]) encoded.clone();
    }
  
    public String getName()
    {
!     return getName (RFC2253);
    }
  
!   public String getName (final String format)
    {
!     boolean rfc2253 = RFC2253.equalsIgnoreCase (format) ||
!       CANONICAL.equalsIgnoreCase (format);
!     boolean rfc1779 = RFC1779.equalsIgnoreCase (format);
!     boolean canon   = CANONICAL.equalsIgnoreCase (format);
!     if (! (rfc2253 || rfc1779 || canon))
!       throw new IllegalArgumentException ("unsupported format " + format);
!     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 (DC) && rfc2253)
!               str.append ("DC");
!             else if (oid.equals ("UID") && rfc2253)
!               str.append ("UID");
!             else
!               str.append (oid.toString());
!             str.append('=');
!             str.append(value);
!             if (it2.hasNext())
!               str.append('+');
!           }
!         if (it.hasNext())
!           str.append(',');
!       }
!     if (canon)
!       return str.toString().toUpperCase (Locale.US).toLowerCase (Locale.US);
!     return str.toString();
!   }
! 
!   public String toString()
!   {
!     return getName (RFC2253);
    }
  
    // Serialization methods.
    // ------------------------------------------------------------------------
  
!   private void writeObject (ObjectOutputStream out) throws IOException
    {
!     if (encoded != null)
!       encodeDer();
!     out.writeObject (encoded);
    }
  
!   private void readObject (ObjectInputStream in)
      throws IOException, NotActiveException, ClassNotFoundException
    {
      byte[] buf = (byte[]) in.readObject();
!     parseDer (new ByteArrayInputStream (buf));
!   }
! 
!   // Own methods.
!   // -------------------------------------------------------------------------
! 
!   private int size()
!   {
!     return components.size();
!   }
! 
!   private String getComponent(OID oid, int rdn)
!   {
!     if (rdn >= size())
!       return null;
!     return (String) ((Map) components.get (rdn)).get (oid);
!   }
! 
!   private void encodeDer()
!   {
!     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);
!     encoded = val.getEncoded();
!   }
! 
!   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();
!       }
!   }
! 
!   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(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 (InputStream encoded) throws IOException
!   {
!     DERReader der = new DERReader (encoded);
!     DERValue name = der.read();
!     if (!name.isConstructed())
!       throw new IOException ("malformed Name");
!     this.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();
!       }
!   }
! 
!   private void newRelativeDistinguishedName()
!   {
!     currentRdn = new LinkedHashMap();
!     components.add(currentRdn);
!   }
! 
!   private void putComponent(OID oid, String value)
!   {
!     currentRdn.put(oid, value);
!   }
! 
!   private 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("dc"))
!       putComponent(DC, value);
!     else if (name.equals("uid"))
!       putComponent(UID, value);
!     else
!       putComponent(new OID(name), value);
!   }
! 
!   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();
!   }
! 
!   private static byte[] toByteArray (String str)
!   {
!     int limit = str.length();
!     byte[] result = new byte[((limit + 1) / 2)];
!     int i = 0, j = 0;
!     if ((limit % 2) == 1)
!       {
!         result[j++] = (byte) Character.digit (str.charAt(i++), 16);
!       }
!     while (i < limit)
!       {
!         result[j  ]  = (byte) (Character.digit (str.charAt(i++), 16) << 4);
!         result[j++] |= (byte)  Character.digit (str.charAt(i++), 16);
!       }
!     return result;
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/auth/x500/X500PrivateCredential.java gcc-4.0.0/libjava/javax/security/auth/x500/X500PrivateCredential.java
*** gcc-3.4.3/libjava/javax/security/auth/x500/X500PrivateCredential.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/auth/x500/X500PrivateCredential.java	Thu Oct 21 21:00:07 2004
***************
*** 0 ****
--- 1,149 ----
+ /* X500PrivateCredential.java -- certificate and private key pair.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.auth.x500;
+ 
+ import java.security.PrivateKey;
+ import java.security.cert.X509Certificate;
+ 
+ import javax.security.auth.Destroyable;
+ 
+ /**
+  * A pairing of a {@link X509Certificate} and its corresponding {@link
+  * PrivateKey}, with an optional keystore alias.
+  */
+ public final class X500PrivateCredential implements Destroyable
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private PrivateKey key;
+   private X509Certificate certificate;
+   private String alias;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Creates a new private credential with no associated keystore alias.
+    *
+    * @param certificate The X.509 certificate.
+    * @param key The private key.
+    * @throws IllegalArgumentException If either parameter is null.
+    */
+   public X500PrivateCredential (X509Certificate certificate, PrivateKey key)
+   {
+     if (certificate == null || key == null)
+       throw new IllegalArgumentException();
+     this.certificate = certificate;
+     this.key = key;
+   }
+ 
+   /**
+    * Creates a new private credential with a keystore alias.
+    *
+    * @param certificate The X.509 certificate.
+    * @param key The private key.
+    * @param alias The keystore alias for this credential.
+    * @throws IllegalArgumentException If any parameter is null.
+    */
+   public X500PrivateCredential (X509Certificate certificate, PrivateKey key,
+                                 String alias)
+   {
+     this (certificate, key);
+     if (alias == null)
+       throw new IllegalArgumentException();
+     this.alias = alias;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns the certificate of this credential.
+    *
+    * @return The certificate of this credential.
+    */
+   public X509Certificate getCertificate()
+   {
+     return certificate;
+   }
+ 
+   /**
+    * Returns the private key of this credential.
+    *
+    * @return The private key of this credential.
+    */
+   public PrivateKey getPrivateKey()
+   {
+     return key;
+   }
+ 
+   /**
+    * Returns the keystore alias of this credential, or null if not present.
+    *
+    * @return The keystore alias, or null.
+    */
+   public String getAlias()
+   {
+     return alias;
+   }
+ 
+   /**
+    * Destroy the sensitive data of this credential, setting the certificate,
+    * private key, and keystore alias to null.
+    */
+   public void destroy()
+   {
+     certificate = null;
+     key = null;
+     alias = null;
+   }
+ 
+   /**
+    * Tells whether or not this credential has been destroyed, and that
+    * the certificate and private key fields are null.
+    *
+    * @return True if this object has been destroyed.
+    */
+   public boolean isDestroyed()
+   {
+     return certificate == null && key == null;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/cert/Certificate.java gcc-4.0.0/libjava/javax/security/cert/Certificate.java
*** gcc-3.4.3/libjava/javax/security/cert/Certificate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/cert/Certificate.java	Tue Sep 21 08:33:34 2004
***************
*** 0 ****
--- 1,176 ----
+ /* Certificate.java -- base class of public-key certificates.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.cert;
+ 
+ import java.security.InvalidKeyException;
+ import java.security.NoSuchAlgorithmException;
+ import java.security.NoSuchProviderException;
+ import java.security.PublicKey;
+ import java.security.SignatureException;
+ 
+ import java.util.Arrays;
+ import java.util.zip.Adler32;
+ 
+ /**
+  * <p>The base class for public-key certificates.</p>
+  *
+  * <p><b>This class is deprecated in favor of the {@link
+  * java.security.cert.Certificate} class. It should not be used in new
+  * applications.</b></p>
+  */
+ public abstract class Certificate
+ {
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   public Certificate()
+   {
+     super();
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Tests if this certificate equals another.</p>
+    *
+    * @param other The object to test.
+    * @return True if the certificates are equal.
+    */
+   public boolean equals(Object other)
+   {
+     if (other == null || !(other instanceof Certificate))
+       {
+         return false;
+       }
+     if (other == this)
+       {
+         return true;
+       }
+     try
+       {
+         return Arrays.equals(getEncoded(), ((Certificate) other).getEncoded());
+       }
+     catch (CertificateEncodingException cee)
+       {
+         return false;
+       }
+   }
+ 
+   /**
+    * <p>Computes a hash code for this certificate.</p>
+    *
+    * @return The hash code.
+    */
+   public int hashCode()
+   {
+     try
+       {
+         Adler32 csum = new Adler32();
+         csum.update(getEncoded());
+         return (int) csum.getValue();
+       }
+     catch (CertificateEncodingException cee)
+       {
+         return 0;
+       }
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Return the encoded form of this certificate.</p>
+    *
+    * @return The encoded form.
+    * @throws CertificateEncodingException If the certificate could not be
+    *   encoded.
+    */
+   public abstract byte[] getEncoded() throws CertificateEncodingException;
+ 
+   /**
+    * <p>Verifies the signature of this certificate.</p>
+    *
+    * @param key The signer's public key.
+    * @throws CertificateException
+    * @throws NoSuchAlgorithmException If the algorithm used to sign the
+    *   certificate is not available.
+    * @throws InvalidKeyException If the supplied key is not appropriate for the
+    *   certificate's signature algorithm.
+    * @throws NoSuchProviderException
+    * @throws SignatureException If the signature could not be verified.
+    */
+   public abstract void verify(PublicKey key)
+     throws CertificateException, NoSuchAlgorithmException, InvalidKeyException,
+            NoSuchProviderException, SignatureException;
+ 
+   /**
+    * <p>Verifies the signature of this certificate, using the specified security
+    * provider.</p>
+    *
+    * @param key The signer's public key.
+    * @param sigProvider The name of the signature provider.
+    * @throws CertificateException
+    * @throws NoSuchAlgorithmException If the algorithm used to sign the
+    *   certificate is not available.
+    * @throws InvalidKeyException If the supplied key is not appropriate for the
+    *   certificate's signature algorithm.
+    * @throws NoSuchProviderException If <i>sigProvider</i> is not the name of an
+    *   installed provider.
+    * @throws SignatureException If the signature could not be verified.
+    */
+   public abstract void verify(PublicKey key, String sigProvider)
+     throws CertificateException, NoSuchAlgorithmException, InvalidKeyException,
+            NoSuchProviderException, SignatureException;
+ 
+   /**
+    * <p>Returns a printable representation of this certificate.</p>
+    *
+    * @return The string.
+    */
+   public abstract String toString();
+ 
+   /**
+    * <p>Returns this certificate's public key.</p>
+    *
+    * @return The public key.
+    */
+   public abstract PublicKey getPublicKey();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/cert/CertificateEncodingException.java gcc-4.0.0/libjava/javax/security/cert/CertificateEncodingException.java
*** gcc-3.4.3/libjava/javax/security/cert/CertificateEncodingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/cert/CertificateEncodingException.java	Tue Sep 21 08:33:34 2004
***************
*** 0 ****
--- 1,60 ----
+ /* CertificateEncodingException.java -- certificate 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.cert;
+ 
+ /**
+  * <p>Signals a problem when encoding certificates.</p>
+  *
+  * <p><b>This class is deprecated in favor of the {@link
+  * java.security.cert.CertificateEncodingException} class. It should not be used
+  * in new applications.</b></p>
+  */
+ public class CertificateEncodingException extends CertificateException
+ {
+ 
+   public CertificateEncodingException()
+   {
+     super();
+   }
+ 
+   public CertificateEncodingException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/cert/CertificateException.java gcc-4.0.0/libjava/javax/security/cert/CertificateException.java
*** gcc-3.4.3/libjava/javax/security/cert/CertificateException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/cert/CertificateException.java	Tue Sep 21 08:33:34 2004
***************
*** 0 ****
--- 1,60 ----
+ /* CertificateException.java -- certificate 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.cert;
+ 
+ /**
+  * <p>Signals a generic problem with certificates.</p>
+  *
+  * <p><b>This class is deprecated in favor of the {@link
+  * java.security.cert.CertificateException} class. It should not be used in new
+  * applications.</b></p>
+  */
+ public class CertificateException extends Exception
+ {
+ 
+   public CertificateException()
+   {
+     super();
+   }
+ 
+   public CertificateException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/cert/CertificateExpiredException.java gcc-4.0.0/libjava/javax/security/cert/CertificateExpiredException.java
*** gcc-3.4.3/libjava/javax/security/cert/CertificateExpiredException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/cert/CertificateExpiredException.java	Tue Sep 21 08:33:34 2004
***************
*** 0 ****
--- 1,60 ----
+ /* CertificateExpiredException.java -- certificate expired 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.cert;
+ 
+ /**
+  * <p>Signals that a certificate has expired.</p>
+  *
+  * <p><b>This class is deprecated in favor of the {@link
+  * java.security.cert.CertificateExpiredException} class. It should not be used
+  * in new applications.</b></p>
+  */
+ public class CertificateExpiredException extends CertificateException
+ {
+ 
+   public CertificateExpiredException()
+   {
+     super();
+   }
+ 
+   public CertificateExpiredException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/cert/CertificateNotYetValidException.java gcc-4.0.0/libjava/javax/security/cert/CertificateNotYetValidException.java
*** gcc-3.4.3/libjava/javax/security/cert/CertificateNotYetValidException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/cert/CertificateNotYetValidException.java	Tue Sep 21 08:33:34 2004
***************
*** 0 ****
--- 1,60 ----
+ /* CertificateNotYetValidException.java -- certificate not yet valid 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.cert;
+ 
+ /**
+  * <p>Signals that a certificate is not yet valid.</p>
+  *
+  * <p><b>This class is deprecated in favor of the {@link
+  * java.security.cert.CertificateNotYetValidException} class. It should not be
+  * used in new applications.</b></p>
+  */
+ public class CertificateNotYetValidException extends CertificateException
+ {
+ 
+   public CertificateNotYetValidException()
+   {
+     super();
+   }
+ 
+   public CertificateNotYetValidException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/cert/CertificateParsingException.java gcc-4.0.0/libjava/javax/security/cert/CertificateParsingException.java
*** gcc-3.4.3/libjava/javax/security/cert/CertificateParsingException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/cert/CertificateParsingException.java	Tue Sep 21 08:33:34 2004
***************
*** 0 ****
--- 1,59 ----
+ /* CertificateParsingException.java -- certificate parsing 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.cert;
+ 
+ /**
+  * <p>Signals a parsing error when decoding a certificate.</p>
+  *
+  * <p><b>This class is deprecated. It should not be used in new
+  * applications.</b></p>
+  */
+ public class CertificateParsingException extends CertificateException
+ {
+ 
+   public CertificateParsingException()
+   {
+     super();
+   }
+ 
+   public CertificateParsingException(String msg)
+   {
+     super(msg);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/cert/X509CertBridge.java gcc-4.0.0/libjava/javax/security/cert/X509CertBridge.java
*** gcc-3.4.3/libjava/javax/security/cert/X509CertBridge.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/cert/X509CertBridge.java	Thu Oct 21 21:00:07 2004
***************
*** 0 ****
--- 1,201 ----
+ /* X509CertBridge.java -- bridge between JDK and JSSE cert APIs.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.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;
+ 
+ /**
+  * <p>An implementation of the {@link X509Certificate} class that delegates
+  * calls to a {@link java.security.cert.X509Certificate}.</p>
+  */
+ final class X509CertBridge extends X509Certificate
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private java.security.cert.X509Certificate cert;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   X509CertBridge(java.security.cert.X509Certificate cert)
+   {
+     this.cert = cert;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   public byte[] getEncoded() throws CertificateEncodingException
+   {
+     try
+       {
+         return cert.getEncoded();
+       }
+     catch (java.security.cert.CertificateEncodingException cee)
+       {
+         throw new CertificateEncodingException(cee.getMessage());
+       }
+   }
+ 
+   public void verify(PublicKey key)
+     throws CertificateException, NoSuchAlgorithmException, InvalidKeyException,
+            NoSuchProviderException, SignatureException
+   {
+     try
+       {
+         cert.verify(key);
+       }
+     catch (java.security.cert.CertificateException ce)
+       {
+         throw new CertificateException(ce.getMessage());
+       }
+   }
+ 
+   public void verify(PublicKey key, String sigProvider)
+     throws CertificateException, NoSuchAlgorithmException, InvalidKeyException,
+            NoSuchProviderException, SignatureException
+   {
+     try
+       {
+         cert.verify(key, sigProvider);
+       }
+     catch (java.security.cert.CertificateException ce)
+       {
+         throw new CertificateException(ce.getMessage());
+       }
+   }
+ 
+   public String toString()
+   {
+     return cert.toString();
+   }
+ 
+   public PublicKey getPublicKey()
+   {
+     return cert.getPublicKey();
+   }
+ 
+   public void checkValidity()
+     throws CertificateExpiredException, CertificateNotYetValidException
+   {
+     try
+       {
+         cert.checkValidity();
+       }
+     catch (java.security.cert.CertificateExpiredException cee)
+       {
+         throw new CertificateExpiredException(cee.getMessage());
+       }
+     catch (java.security.cert.CertificateNotYetValidException cnyve)
+       {
+         throw new CertificateNotYetValidException(cnyve.getMessage());
+       }
+   }
+ 
+   public void checkValidity(Date date)
+     throws CertificateExpiredException, CertificateNotYetValidException
+   {
+     try
+       {
+         cert.checkValidity(date);
+       }
+     catch (java.security.cert.CertificateExpiredException cee)
+       {
+         throw new CertificateExpiredException(cee.getMessage());
+       }
+     catch (java.security.cert.CertificateNotYetValidException cnyve)
+       {
+         throw new CertificateNotYetValidException(cnyve.getMessage());
+       }
+   }
+ 
+   public int getVersion()
+   {
+     return cert.getVersion();
+   }
+ 
+   public BigInteger getSerialNumber()
+   {
+     return cert.getSerialNumber();
+   }
+ 
+   public Principal getIssuerDN()
+   {
+     return cert.getIssuerDN();
+   }
+ 
+   public Principal getSubjectDN()
+   {
+     return cert.getSubjectDN();
+   }
+ 
+   public Date getNotBefore()
+   {
+     return cert.getNotBefore();
+   }
+ 
+   public Date getNotAfter()
+   {
+     return cert.getNotAfter();
+   }
+ 
+   public String getSigAlgName()
+   {
+     return cert.getSigAlgName();
+   }
+ 
+   public String getSigAlgOID()
+   {
+     return cert.getSigAlgOID();
+   }
+ 
+   public byte[] getSigAlgParams()
+   {
+     return cert.getSigAlgParams();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/cert/X509Certificate.java gcc-4.0.0/libjava/javax/security/cert/X509Certificate.java
*** gcc-3.4.3/libjava/javax/security/cert/X509Certificate.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/cert/X509Certificate.java	Wed Oct 20 10:42:13 2004
***************
*** 0 ****
--- 1,189 ----
+ /* X509Certificate.java -- base class of X.509 certificates.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.cert;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.InputStream;
+ 
+ import java.math.BigInteger;
+ 
+ import java.security.Principal;
+ import java.security.cert.CertificateFactory;
+ 
+ import java.util.Date;
+ 
+ /**
+  * <p>The base class of all X.509 certificates.</p>
+  *
+  * <p><b>This class is deprecated in favor of the {@link
+  * java.security.cert.X509Certificate} class. It should not be used in new
+  * applications.</b></p>
+  */
+ public abstract class X509Certificate extends Certificate
+ {
+ 
+   // Class methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Get an instance of X509Certificate for the given encoded bytes.</p>
+    *
+    * @param encoded The encoded certificate.
+    * @return An instance of X509Certificate.
+    * @throws CertificateException If the encoded certificate cannot be parsed.
+    */
+   public static X509Certificate getInstance(byte[] encoded)
+     throws CertificateException
+   {
+     return getInstance(new ByteArrayInputStream(encoded));
+   }
+ 
+   /**
+    * <p>Get an instance of X509Certificate for the given encoded stream.</p>
+    *
+    * @param encoded The encoded certificate stream..
+    * @return An instance of X509Certificate.
+    * @throws CertificateException If the encoded certificate cannot be parsed.
+    */
+   public static X509Certificate getInstance(InputStream encoded)
+     throws CertificateException
+   {
+     try
+       {
+         CertificateFactory cf = CertificateFactory.getInstance("X.509");
+         return new X509CertBridge((java.security.cert.X509Certificate)
+                                   cf.generateCertificate(encoded));
+       }
+     catch (java.security.cert.CertificateException ce)
+       {
+         throw new CertificateException(ce.getMessage());
+       }
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Check if this certificate is valid now.</p>
+    *
+    * @throws CertificateExpiredException If the certificate has expired.
+    * @throws CertificateNotYetValidException If the certificate is not yet valid.
+    * @see #checkValidity(java.util.Date)
+    */
+   public abstract void checkValidity()
+     throws CertificateExpiredException, CertificateNotYetValidException;
+ 
+   /**
+    * <p>Check if this certificate is valid for the given date.</p>
+    *
+    * @param date The date to check.
+    * @throws CertificateExpiredException If the certificate has expired.
+    * @throws CertificateNotYetValidException If the certificate is not yet valid.
+    */
+   public abstract void checkValidity(Date date)
+     throws CertificateExpiredException, CertificateNotYetValidException;
+ 
+   /**
+    * <p>Returns the X.509 version number.</p>
+    *
+    * @return The version number.
+    */
+   public abstract int getVersion();
+ 
+   /**
+    * <p>Returns this certificate's serial number.</p>
+    *
+    * @return The serial number.
+    */
+   public abstract BigInteger getSerialNumber();
+ 
+   /**
+    * <p>Returns the distinguished name of this certificate's issuer.</p>
+    *
+    * @return The issuer's distinguished name.
+    */
+   public abstract Principal getIssuerDN();
+ 
+   /**
+    * <p>Returns the distinguished name of this certificate's subject.</p>
+    *
+    * @return The subject's distinguished name.
+    */
+   public abstract Principal getSubjectDN();
+ 
+   /**
+    * <p>Returns the <i>not before</i> portion of this certificate's validity
+    * period.</p>
+    *
+    * @return The not before date.
+    */
+   public abstract Date getNotBefore();
+ 
+   /**
+    * <p>Returns the <i>not after</i> portion of this certificate's validity
+    * period.</p>
+    *
+    * @return The not after date.
+    */
+   public abstract Date getNotAfter();
+ 
+   /**
+    * <p>Returns the name of this certificate's signature algorithm.</p>
+    *
+    * @return The name of the signature algorithm.
+    */
+   public abstract String getSigAlgName();
+ 
+   /**
+    * <p>Returns the object identifier (OID) of this certificate's signature
+    * algorithm. The returned string is a sequence of integers separated by
+    * periods.</p>
+    *
+    * @return The signature OID.
+    */
+   public abstract String getSigAlgOID();
+ 
+   /**
+    * <p>Returns the signature parameters. The returned byte array contains the
+    * raw DER-encoded parameters.</p>
+    *
+    * @return The signature parameters.
+    */
+   public abstract byte[] getSigAlgParams();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/AuthenticationException.java gcc-4.0.0/libjava/javax/security/sasl/AuthenticationException.java
*** gcc-3.4.3/libjava/javax/security/sasl/AuthenticationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/AuthenticationException.java	Wed Oct 20 10:42:13 2004
***************
*** 0 ****
--- 1,105 ----
+ /* AuthenticationException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ /**
+  * <p>This exception is thrown by a SASL mechanism implementation to indicate
+  * that the SASL exchange has failed due to reasons related to authentication,
+  * such as an invalid identity, passphrase, or key.</p>
+  *
+  * <p>Note that the lack of an <code>AuthenticationException</code> does not
+  * mean that the failure was not due to an authentication error. A SASL
+  * mechanism implementation might throw the more general {@link SaslException}
+  * instead of <code>AuthenticationException</code> if it is unable to determine
+  * the nature of the failure, or if does not want to disclose the nature of the
+  * failure, for example, due to security reasons.</p>
+  */
+ public class AuthenticationException extends SaslException
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Constructs a new instance of <code>AuthenticationException</code>. The
+    * root exception and the detailed message are <code>null</code>.
+    */
+   public AuthenticationException()
+   {
+     super();
+   }
+ 
+   /**
+    * Constructs a new instance of <code>AuthenticationException</code> with a
+    * detailed message. The root exception is <code>null</code>.
+    *
+    * @param detail a possibly <code>null</code> string containing details of
+    * the exception.
+    * @see Throwable#getMessage()
+    */
+   public AuthenticationException(String detail)
+   {
+     super(detail);
+   }
+ 
+   /**
+    * Constructs a new instance of <code>AuthenticationException</code> with a
+    * detailed message and a root exception.
+    *
+    * @param detail a possibly <code>null</code> string containing details of
+    * the exception.
+    * @param ex a possibly <code>null</code> root exception that caused this
+    * exception.
+    * @see Throwable#getMessage()
+    * @see SaslException#getCause()
+    */
+   public AuthenticationException(String detail, Throwable ex)
+   {
+     super(detail, ex);
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/AuthorizeCallback.java gcc-4.0.0/libjava/javax/security/sasl/AuthorizeCallback.java
*** gcc-3.4.3/libjava/javax/security/sasl/AuthorizeCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/AuthorizeCallback.java	Wed Oct 20 10:42:13 2004
***************
*** 0 ****
--- 1,171 ----
+ /* AuthorizeCallback.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ import javax.security.auth.callback.Callback;
+ 
+ /**
+  * This callback is used by {@link SaslServer} to determine whether one entity
+  * (identified by an authenticated authentication ID) can act on behalf of
+  * another entity (identified by an authorization ID).
+  */
+ public class AuthorizeCallback implements Callback
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /** @serial The (authenticated) authentication id to check. */
+   private String authenticationID = null;
+ 
+   /** @serial The authorization id to check. */
+   private String authorizationID  = null;
+ 
+   /**
+    * @serial The id of the authorized entity. If null, the id of the authorized
+    * entity is authorizationID.
+    */
+   private String authorizedID  = null;
+ 
+   /**
+    * @serial A flag indicating whether the authentication id is allowed to act
+    * on behalf of the authorization id.
+    */
+   private boolean authorized = false;
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Constructs an instance of <code>AuthorizeCallback</code>.
+    *
+    * @param authnID the (authenticated) authentication ID.
+    * @param authzID the authorization ID.
+    */
+   public AuthorizeCallback(String authnID, String authzID)
+   {
+     super();
+ 
+     this.authenticationID = authnID;
+     this.authorizationID  = authzID;
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns the authentication ID to check.
+    *
+    * @return the authentication ID to check
+    */
+   public String getAuthenticationID()
+   {
+     return authenticationID;
+   }
+ 
+   /**
+    * Returns the authorization ID to check.
+    *
+    * @return the authorization ID to check.
+    */
+   public String getAuthorizationID()
+   {
+     return authorizationID;
+   }
+ 
+   /**
+    * Determines if the identity represented by authentication ID is allowed to
+    * act on behalf of the authorization ID.
+    *
+    * @return <code>true</code> if authorization is allowed; <code>false</code>
+    * otherwise.
+    * @see #setAuthorized(boolean)
+    * @see #getAuthorizedID()
+    */
+   public boolean isAuthorized()
+   {
+     return authorized;
+   }
+ 
+   /**
+    * Sets if authorization is allowed or not.
+    *
+    * @param authorized <code>true</code> if authorization is allowed;
+    * <code>false</code> otherwise.
+    * @see #isAuthorized()
+    * @see #setAuthorizedID(String)
+    */
+   public void setAuthorized(boolean authorized)
+   {
+     this.authorized = authorized;
+   }
+ 
+   /**
+    * Returns the ID of the authorized user.
+    *
+    * @return the ID of the authorized user. <code>null</code> means the
+    * authorization failed.
+    * @see #setAuthorized(boolean)
+    * @see #setAuthorizedID(String)
+    */
+   public String getAuthorizedID()
+   {
+     if (!authorized)
+       {
+         return null;
+       }
+     return (authorizedID != null ? authorizedID : authorizationID);
+   }
+ 
+   /**
+    * Sets the ID of the authorized entity. Called by handler only when the ID
+    * is different from {@link #getAuthorizationID()}. For example, the ID might
+    * need to be canonicalized for the environment in which it will be used.
+    *
+    * @see #setAuthorized(boolean)
+    * @see #getAuthorizedID()
+    */
+   public void setAuthorizedID(String id)
+   {
+     this.authorizedID = id;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/RealmCallback.java gcc-4.0.0/libjava/javax/security/sasl/RealmCallback.java
*** gcc-3.4.3/libjava/javax/security/sasl/RealmCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/RealmCallback.java	Wed Oct 20 10:42:13 2004
***************
*** 0 ****
--- 1,75 ----
+ /* RealmCallback.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ import javax.security.auth.callback.TextInputCallback;
+ 
+ /**
+  * This callback is used by {@link SaslClient} and {@link SaslServer} to
+  * retrieve realm information.
+  */
+ public class RealmCallback extends TextInputCallback
+ {
+ 
+   /**
+    * Constructs a <code>RealmCallback</code> with a prompt.
+    *
+    * @param prompt the non-null prompt to use to request the realm information.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>
+    * or empty.
+    */
+   public RealmCallback(String prompt)
+   {
+     super(prompt);
+   }
+ 
+   /**
+    * Constructs a <code>RealmCallback</code> with a prompt and default realm
+    * information.
+    *
+    * @param prompt the non-null prompt to use to request the realm information.
+    * @param defaultRealmInfo the non-null default realm information to use.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>
+    * or empty, or if <code>defaultRealm</code> is empty or <code>null</code>.
+    */
+   public RealmCallback(String prompt, String defaultRealmInfo)
+   {
+     super(prompt, defaultRealmInfo);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/RealmChoiceCallback.java gcc-4.0.0/libjava/javax/security/sasl/RealmChoiceCallback.java
*** gcc-3.4.3/libjava/javax/security/sasl/RealmChoiceCallback.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/RealmChoiceCallback.java	Wed Oct 20 10:42:13 2004
***************
*** 0 ****
--- 1,71 ----
+ /* RealmChoiceCallback.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ import javax.security.auth.callback.ChoiceCallback;
+ 
+ /**
+  * This callback is used by {@link SaslClient} and {@link SaslServer} to obtain
+  * a realm given a list of realm choices.
+  */
+ public class RealmChoiceCallback extends ChoiceCallback
+ {
+ 
+   /**
+    * Constructs a <code>RealmChoiceCallback</code> with a prompt, a list of
+    * choices and a default choice.
+    *
+    * @param prompt the non-null prompt to use to request the realm.
+    * @param choices the non-null list of realms to choose from.
+    * @param defaultChoice the choice to be used as the default when the list of
+    * choices is displayed. It is an index into the <code>choices</code> array.
+    * @param multiple <code>true</code> if multiple choices allowed;
+    * <code>false</code> otherwise.
+    * @throws IllegalArgumentException if <code>prompt</code> is <code>null</code>
+    * or empty, if <code>choices</code> has a length of <code>0</code>, if any
+    * element from <code>choices</code> is <code>null</code> or empty, or if
+    * <code>defaultChoice</code> does not fall within the array boundary of
+    * <code>choices</code>.
+    */
+   public RealmChoiceCallback(String prompt, String[] choices, int defaultChoice,
+                              boolean multiple)
+   {
+     super(prompt, choices, defaultChoice, multiple);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/Sasl.java gcc-4.0.0/libjava/javax/security/sasl/Sasl.java
*** gcc-3.4.3/libjava/javax/security/sasl/Sasl.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/Sasl.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,690 ----
+ /* Sasl.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ import java.security.Provider;
+ import java.security.Security;
+ import java.util.Enumeration;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Vector;
+ 
+ import javax.security.auth.callback.CallbackHandler;
+ 
+ /**
+  * <p>A static class for creating SASL clients and servers.</p>
+  *
+  * <p>This class defines the policy of how to locate, load, and instantiate SASL
+  * clients and servers.</p>
+  *
+  * <p>For example, an application or library gets a SASL client instance by
+  * doing something like:</p>
+  *
+  * <pre>
+  *SaslClient sc =
+  *      Sasl.createSaslClient(mechanisms, authorizationID, protocol,
+  *                            serverName, props, callbackHandler);
+  * </pre>
+  *
+  * <p>It can then proceed to use the instance to create an authenticated
+  * connection.</p>
+  *
+  * <p>Similarly, a server gets a SASL server instance by using code that looks
+  * as follows:</p>
+  *
+  * <pre>
+  *SaslServer ss =
+  *      Sasl.createSaslServer(mechanism, protocol, serverName, props,
+  *                            callbackHandler);
+  * </pre>
+  */
+ public class Sasl
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>The name of a property that specifies the quality-of-protection to use.
+    * The property contains a comma-separated, ordered list of quality-of-
+    * protection values that the client or server is willing to support. A qop
+    * value is one of:</p>
+    *
+    * <ul>
+    *    <li><code>"auth"</code> - authentication only,</li>
+    *    <li><code>"auth-int"</code> - authentication plus integrity
+    *    protection,</li>
+    *    <li><code>"auth-conf"</code> - authentication plus integrity and
+    *    confidentiality protection.</li>
+    * </ul>
+    *
+    * <p>The order of the list specifies the preference order of the client or
+    * server.</p>
+    *
+    * <p>If this property is absent, the default qop is <code>"auth"</code>.</p>
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.qop"</code>.</p>
+    */
+   public static final String QOP = "javax.security.sasl.qop";
+ 
+   /**
+    * <p>The name of a property that specifies the cipher strength to use. The
+    * property contains a comma-separated, ordered list of cipher strength
+    * values that the client or server is willing to support. A strength value
+    * is one of:</p>
+    *
+    * <ul>
+    *    <li><code>"low"</code>,</li>
+    *    <li><code>"medium"</code>,</li>
+    *    <li><code>"high"</code>.</li>
+    * </ul>
+    *
+    * <p>The order of the list specifies the preference order of the client or
+    * server. An implementation should allow configuration of the meaning of
+    * these values. An application may use the Java Cryptography Extension (JCE)
+    * with JCE-aware mechanisms to control the selection of cipher suites that
+    * match the strength values.</p>
+    *
+    * <p>If this property is absent, the default strength is
+    * <code>"high,medium,low"</code>.</p>
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.strength"</code>.
+    * </p>
+    */
+   public static final String STRENGTH = "javax.security.sasl.strength";
+ 
+   /**
+    * <p>The name of a property that specifies whether the server must authenticate
+    * to the client. The property contains <code>"true"</code> if the server
+    * must authenticate the to client; <code>"false"</code> otherwise. The
+    * default is <code>"false"</code>.</p>
+    *
+    * <p>The value of this constant is
+    * <code>"javax.security.sasl.server.authentication"</code>.</p>
+    */
+   public static final String SERVER_AUTH = "javax.security.sasl.server.authentication";
+ 
+   /**
+    * <p>The name of a property that specifies the maximum size of the receive
+    * buffer in bytes of {@link SaslClient}/{@link SaslServer}. The property
+    * contains the string representation of an integer.</p>
+    *
+    * <p>If this property is absent, the default size is defined by the
+    * mechanism.</p>
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.maxbuffer"</code>.
+    * </p>
+    */
+   public static final String MAX_BUFFER = "javax.security.sasl.maxbuffer";
+ 
+   /**
+    * <p>The name of a property that specifies the maximum size of the raw send
+    * buffer in bytes of {@link SaslClient}/{@link SaslServer}. The property
+    * contains the string representation of an integer. The value of this
+    * property is negotiated between the client and server during the
+    * authentication exchange.</p>
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.rawsendsize"</code>.
+    * </p>
+    */
+   public static final String RAW_SEND_SIZE = "javax.security.sasl.rawsendsize";
+ 
+   /**
+    * <p>The name of a property that specifies whether mechanisms susceptible
+    * to simple plain passive attacks (e.g., "PLAIN") are not permitted. The
+    * property contains <code>"true"</code> if such mechanisms are not
+    * permitted; <code>"false"</code> if such mechanisms are permitted. The
+    * default is <code>"false"</code>.</p>
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.policy.noplaintext"</code>.
+    * </p>
+    */
+   public static final String POLICY_NOPLAINTEXT = "javax.security.sasl.policy.noplaintext";
+ 
+   /**
+    * <p>The name of a property that specifies whether mechanisms susceptible to
+    * active (non-dictionary) attacks are not permitted. The property contains
+    * <code>"true"</code> if mechanisms susceptible to active attacks are not
+    * permitted; <code>"false"</code> if such mechanisms are permitted. The
+    * default is <code>"false"</code>.</p>
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.policy.noactive"</code>.
+    * </p>
+    */
+   public static final String POLICY_NOACTIVE = "javax.security.sasl.policy.noactive";
+ 
+   /**
+    * <p>The name of a property that specifies whether mechanisms susceptible to
+    * passive dictionary attacks are not permitted. The property contains
+    * <code>"true"</code> if mechanisms susceptible to dictionary attacks are
+    * not permitted; <code>"false"</code> if such mechanisms are permitted. The
+    * default is <code>"false"</code>.</p>
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.policy.nodictionary"</code>.
+    * </p>
+    */
+   public static final String POLICY_NODICTIONARY = "javax.security.sasl.policy.nodictionary";
+ 
+   /**
+    * <p>The name of a property that specifies whether mechanisms that accept
+    * anonymous login are not permitted. The property contains <code>"true"</code>
+    * if mechanisms that accept anonymous login are not permitted; <code>"false"
+    * </code> if such mechanisms are permitted. The default is <code>"false"</code>.
+    * </p>
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.policy.noanonymous"</code>.
+    * </p>
+    */
+   public static final String POLICY_NOANONYMOUS = "javax.security.sasl.policy.noanonymous";
+ 
+   /**
+    * The name of a property that specifies whether mechanisms that implement
+    * forward secrecy between sessions are required. Forward secrecy means that
+    * breaking into one session will not automatically provide information for
+    * breaking into future sessions. The property contains <code>"true"</code>
+    * if mechanisms that implement forward secrecy between sessions are
+    * required; <code>"false"</code> if such mechanisms are not required. The
+    * default is <code>"false"</code>.
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.policy.forward"</code>.
+    * </p>
+    */
+   public static final String POLICY_FORWARD_SECRECY = "javax.security.sasl.policy.forward";
+ 
+   /**
+    * The name of a property that specifies whether mechanisms that pass client
+    * credentials are required. The property contains <code>"true"</code> if
+    * mechanisms that pass client credentials are required; <code>"false"</code>
+    * if such mechanisms are not required. The default is <code>"false"</code>.
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.policy.credentials"</code>.
+    * </p>
+    */
+   public static final String POLICY_PASS_CREDENTIALS = "javax.security.sasl.policy.credentials";
+ 
+   /**
+    * <p>The name of a property that specifies whether to reuse previously
+    * authenticated session information. The property contains <code>"true"</code>
+    * if the mechanism implementation may attempt to reuse previously
+    * authenticated session information; it contains <code>"false"</code> if the
+    * implementation must not reuse previously authenticated session information.
+    * A setting of <code>"true"</code> serves only as a hint; it does not
+    * necessarily entail actual reuse because reuse might not be possible due to
+    * a number of reasons, including, but not limited to, lack of mechanism
+    * support for reuse, expiration of reusable information, and the peer's
+    * refusal to support reuse. The property's default value is <code>"false"</code>.
+    * </p>
+    *
+    * <p>The value of this constant is <code>"javax.security.sasl.reuse"</code>.
+    * Note that all other parameters and properties required to create a SASL
+    * client/server instance must be provided regardless of whether this
+    * property has been supplied. That is, you cannot supply any less
+    * information in anticipation of reuse. Mechanism implementations that
+    * support reuse might allow customization of its implementation for factors
+    * such as cache size, timeouts, and criteria for reuseability. Such
+    * customizations are implementation-dependent.</p>
+    */
+   public static final String REUSE = "javax.security.sasl.reuse";
+ 
+   private static final String CLIENT_FACTORY_SVC = "SaslClientFactory.";
+   private static final String SERVER_FACTORY_SVC = "SaslServerFactory.";
+   private static final String ALIAS = "Alg.Alias.";
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   private Sasl()
+   {
+     super();
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Creates a {@link SaslClient} for the specified mechanism.
+    *
+    * <p>This method uses the JCA Security Provider Framework, described in the
+    * "Java Cryptography Architecture API Specification &amp; Reference", for
+    * locating and selecting a {@link SaslClient} implementation.</p>
+    *
+    * <p>First, it obtains an ordered list of {@link SaslClientFactory}
+    * instances from the registered security providers for the
+    * <code>"SaslClientFactory"</code> service and the specified mechanism. It
+    * then invokes <code>createSaslClient()</code> on each factory instance on
+    * the list until one produces a non-null {@link SaslClient} instance. It
+    * returns the non-null {@link SaslClient} instance, or <code>null</code> if
+    * the search fails to produce a non-null {@link SaslClient} instance.</p>
+    *
+    * <p>A security provider for <code>SaslClientFactory</code> registers with
+    * the JCA Security Provider Framework keys of the form:</p>
+    *
+    * <pre>
+    *    SaslClientFactory.mechanism_name
+    * </pre>
+    *
+    * <p>and values that are class names of implementations of {@link
+    * SaslClientFactory}.</p>
+    *
+    * <p>For example, a provider that contains a factory class,
+    * <code>com.wiz.sasl.digest.ClientFactory</code>, that supports the
+    * <code>"DIGEST-MD5"</code> mechanism would register the following entry
+    * with the JCA:</p>
+    *
+    * <pre>
+    *    SaslClientFactory.DIGEST-MD5     com.wiz.sasl.digest.ClientFactory
+    * </pre>
+    *
+    * <p>See the "Java Cryptography Architecture API Specification &amp;
+    * Reference" for information about how to install and configure security
+    * service providers.</p>
+    *
+    * @param mechanisms the non-null list of mechanism names to try. Each is the
+    * IANA-registered name of a SASL mechanism. (e.g. "GSSAPI", "CRAM-MD5").
+    * @param authorizationID the possibly <code>null</code> protocol-dependent
+    * identification to be used for authorization. If <code>null</code> or
+    * empty, the server derives an authorization ID from the client's
+    * authentication credentials. When the SASL authentication completes
+    * successfully, the specified entity is granted access.
+    * @param protocol the non-null string name of the protocol for which the
+    * authentication is being performed (e.g. "ldap").
+    * @param serverName the non-null fully-qualified host name of the server to
+    * authenticate to.
+    * @param props the possibly null set of properties used to select the SASL
+    * mechanism and to configure the authentication exchange of the selected
+    * mechanism. For example, if props contains the {@link Sasl#POLICY_NOPLAINTEXT}
+    * property with the value <code>"true"</code>, then the selected SASL
+    * mechanism must not be susceptible to simple plain passive attacks. In
+    * addition to the standard properties declared in this class, other,
+    * possibly mechanism-specific, properties can be included. Properties not
+    * relevant to the selected mechanism are ignored.
+    * @param cbh the possibly <code>null</code> callback handler to used by the
+    * SASL mechanisms to get further information from the application/library to
+    * complete the authentication. For example, a SASL mechanism might require
+    * the authentication ID, password and realm from the caller. The
+    * authentication ID is requested by using a
+    * {@link javax.security.auth.callback.NameCallback}. The password is
+    * requested by using a {@link javax.security.auth.callback.PasswordCallback}.
+    * The realm is requested by using a {@link RealmChoiceCallback} if there is
+    * a list of realms to choose from, and by using a {@link RealmCallback} if
+    * the realm must be entered.
+    * @return a possibly <code>null</code> {@link SaslClient} created using the
+    * parameters supplied. If <code>null</code>, the method could not find a
+    * {@link SaslClientFactory} that will produce one.
+    * @throws SaslException if a {@link SaslClient} cannot be created because
+    * of an error.
+    */
+   public static SaslClient createSaslClient(String[] mechanisms,
+                                             String authorizationID,
+                                             String protocol,
+                                             String serverName, Map props,
+                                             CallbackHandler cbh)
+     throws SaslException
+   {
+     if (mechanisms == null)
+       {
+         return null;
+       }
+     Provider[] providers = Security.getProviders();
+     if (providers == null || providers.length == 0)
+       {
+         return null;
+       }
+ 
+     SaslClient result = null;
+     SaslClientFactory factory = null;
+     String m, clazz = null, upper, alias;
+     int j;
+     Provider p;
+     for (int i = 0; i < mechanisms.length; i++)
+       {
+         m = mechanisms[i];
+         if (m == null)
+           continue;
+         for (j = 0; j < providers.length; j++)
+           {
+             p = providers[j];
+             if (p != null)
+               {
+                 // try the name as is
+                 clazz = p.getProperty(CLIENT_FACTORY_SVC + m);
+                 if (clazz == null) // try all uppercase
+                   {
+                     upper = m.toUpperCase();
+                     clazz = p.getProperty(CLIENT_FACTORY_SVC + upper);
+                     if (clazz == null) // try if it's an alias
+                       {
+                         alias = p.getProperty(ALIAS + CLIENT_FACTORY_SVC + m);
+                         if (alias == null) // try all-uppercase alias name
+                           {
+                             alias = p.getProperty(ALIAS + CLIENT_FACTORY_SVC + upper);
+                             if (alias == null) // spit the dummy
+                               continue;
+                           }
+                         clazz = p.getProperty(CLIENT_FACTORY_SVC + alias);
+                       }
+                   }
+                 if (clazz == null)
+                   continue;
+                 else
+                   clazz = clazz.trim();
+               }
+ 
+             try
+               {
+                 result = null;
+                 factory = (SaslClientFactory) Class.forName(clazz).newInstance();
+                 result = factory.createSaslClient(mechanisms, authorizationID,
+                                                   protocol, serverName, props, cbh);
+               }
+             catch (ClassCastException ignored) // ignore instantiation exceptions
+               {
+               }
+             catch (ClassNotFoundException ignored)
+               {
+               }
+             catch (InstantiationException ignored)
+               {
+               }
+             catch (IllegalAccessException ignored)
+               {
+               }
+             if (result != null)
+               return result;
+           }
+       }
+     return null;
+   }
+ 
+   /**
+    * Gets an enumeration of known factories for producing a {@link SaslClient}
+    * instance. This method uses the same sources for locating factories as
+    * <code>createSaslClient()</code>.
+    *
+    * @return a non-null {@link Enumeration} of known factories for producing a
+    * {@link SaslClient} instance.
+    * @see #createSaslClient(String[],String,String,String,Map,CallbackHandler)
+    */
+   public static Enumeration getSaslClientFactories()
+   {
+     Vector result = new Vector();
+     HashSet names = new HashSet();
+     Provider[] providers = Security.getProviders();
+     Iterator it;
+     if (providers == null)
+       {
+         Provider p;
+         String key;
+         for (int i = 0; i < providers.length; i++)
+           {
+             p = providers[i];
+             for (it = p.keySet().iterator(); it.hasNext(); )
+               {
+                 key = (String) it.next();
+                 // add key's binding (a) it is a class of a client factory,
+                 // and (b) the key does not include blanks
+                 if (key.startsWith(CLIENT_FACTORY_SVC) && key.indexOf(" ") == -1)
+                   {
+                     names.add(p.getProperty(key));
+                     break;
+                   }
+               }
+           }
+       }
+     // we have the factory class names in names; instantiate and enumerate
+     String c;
+     for (it = names.iterator(); it.hasNext(); )
+       {
+         c = (String) it.next();
+         try
+           {
+             SaslClientFactory f = (SaslClientFactory) Class.forName(c).newInstance();
+             if (f != null)
+               result.add(f);
+           } catch (ClassCastException ignored) { // ignore instantiation exceptions
+           } catch (ClassNotFoundException ignored) {
+           } catch (InstantiationException ignored) {
+           } catch (IllegalAccessException ignored) {
+           }
+       }
+ 
+     return result.elements();
+   }
+ 
+   /**
+    * Creates a {@link SaslServer} for the specified mechanism.
+    *
+    * <p>This method uses the JCA Security Provider Framework, described in the
+    * "Java Cryptography Architecture API Specification &amp; Reference", for
+    * locating and selecting a SaslServer implementation.</p>
+    *
+    * <p>First, it obtains an ordered list of {@link SaslServerFactory}
+    * instances from the registered security providers for the
+    * <code>"SaslServerFactory"</code> service and the specified mechanism. It
+    * then invokes <code>createSaslServer()</code> on each factory instance on
+    * the list until one produces a non-null {@link SaslServer} instance. It
+    * returns the non-null {@link SaslServer} instance, or <code>null</code> if
+    * the search fails to produce a non-null {@link SaslServer} instance.</p>
+    *
+    * <p>A security provider for {@link SaslServerFactory} registers with the
+    * JCA Security Provider Framework keys of the form:</p>
+    *
+    * <pre>
+    *    SaslServerFactory.mechanism_name
+    * </pre>
+    *
+    * <p>and values that are class names of implementations of {@link
+    * SaslServerFactory}.</p>
+    *
+    * <p>For example, a provider that contains a factory class,
+    * <code>com.wiz.sasl.digest.ServerFactory</code>, that supports the
+    * <code>"DIGEST-MD5"</code> mechanism would register the following entry
+    * with the JCA:</p>
+    *
+    * <pre>
+    *    SaslServerFactory.DIGEST-MD5     com.wiz.sasl.digest.ServerFactory
+    * </pre>
+    *
+    * <p>See the "Java Cryptography Architecture API Specification &amp;
+    * Reference" for information about how to install and configure security
+    * service providers.</p>
+    *
+    * @param mechanism the non-null mechanism name. It must be an
+    * IANA-registered name of a SASL mechanism. (e.g. "GSSAPI", "CRAM-MD5").
+    * @param protocol the non-null string name of the protocol for which the
+    * authentication is being performed (e.g. "ldap").
+    * @param serverName the non-null fully qualified host name of the server.
+    * @param props the possibly <code>null</code> set of properties used to
+    * select the SASL mechanism and to configure the authentication exchange of
+    * the selected mechanism. For example, if props contains the {@link
+    * Sasl#POLICY_NOPLAINTEXT} property with the value <code>"true"</code>, then
+    * the selected SASL mechanism must not be susceptible to simple plain
+    * passive attacks. In addition to the standard properties declared in this
+    * class, other, possibly mechanism-specific, properties can be included.
+    * Properties not relevant to the selected mechanism are ignored.
+    * @param cbh the possibly <code>null</code> callback handler to used by the
+    * SASL mechanisms to get further information from the application/library to
+    * complete the authentication. For example, a SASL mechanism might require
+    * the authentication ID, password and realm from the caller. The
+    * authentication ID is requested by using a
+    * {@link javax.security.auth.callback.NameCallback}. The password is
+    * requested by using a {@link javax.security.auth.callback.PasswordCallback}.
+    * The realm is requested by using a {@link RealmChoiceCallback} if there is
+    * a list of realms to choose from, and by using a {@link RealmCallback} if
+    * the realm must be entered.
+    * @return a possibly <code>null</code> {@link SaslServer} created using the
+    * parameters supplied. If <code>null</code>, the method cannot find a
+    * {@link SaslServerFactory} instance that will produce one.
+    * @throws SaslException if a {@link SaslServer} instance cannot be created
+    * because of an error.
+    */
+   public static SaslServer createSaslServer(String mechanism, String protocol,
+                                             String serverName,
+                                             Map props, CallbackHandler cbh)
+     throws SaslException
+   {
+     if (mechanism == null)
+       return null;
+     Provider[] providers = Security.getProviders();
+     if (providers == null || providers.length == 0)
+       return null;
+ 
+     SaslServer result = null;
+     SaslServerFactory factory = null;
+     String clazz = null, upper, alias = null;
+     int j;
+     Provider p;
+     for (j = 0; j < providers.length; j++)
+       {
+         p = providers[j];
+         if (p != null)
+           {
+             // try the name as is
+             clazz = p.getProperty(SERVER_FACTORY_SVC + mechanism);
+             if (clazz == null) // try all uppercase
+               {
+                 upper = mechanism.toUpperCase();
+                 clazz = p.getProperty(SERVER_FACTORY_SVC + upper);
+                 if (clazz == null) // try if it's an alias
+                   {
+                     alias = p.getProperty(ALIAS + SERVER_FACTORY_SVC + mechanism);
+                     if (alias == null) // try all-uppercase alias name
+                       {
+                         alias = p.getProperty(ALIAS + SERVER_FACTORY_SVC + upper);
+                         if (alias == null) // spit the dummy
+                           continue;
+                       }
+                   }
+                 clazz = p.getProperty(SERVER_FACTORY_SVC + alias);
+               }
+           }
+         if (clazz == null)
+           continue;
+         else
+           clazz = clazz.trim();
+ 
+         try
+           {
+             result = null;
+             factory = (SaslServerFactory) Class.forName(clazz).newInstance();
+             result =
+               factory.createSaslServer(mechanism, protocol, serverName, props, cbh);
+           }
+         catch (ClassCastException ignored) // ignore instantiation exceptions
+           {
+           }
+         catch (ClassNotFoundException ignored)
+           {
+           }
+         catch (InstantiationException ignored)
+           {
+           }
+         catch (IllegalAccessException ignored)
+           {
+           }
+         if (result != null)
+           return result;
+       }
+     return null;
+   }
+ 
+   /**
+    * Gets an enumeration of known factories for producing a {@link SaslServer}
+    * instance. This method uses the same sources for locating factories as
+    * <code>createSaslServer()</code>.
+    *
+    * @return a non-null {@link Enumeration} of known factories for producing a
+    * {@link SaslServer} instance.
+    * @see #createSaslServer(String,String,String,Map,CallbackHandler)
+    */
+   public static Enumeration getSaslServerFactories()
+   {
+     Vector result = new Vector();
+     HashSet names = new HashSet();
+     Provider[] providers = Security.getProviders();
+     Iterator it;
+     if (providers == null)
+       {
+         Provider p;
+         String key;
+         for (int i = 0; i < providers.length; i++)
+           {
+             p = providers[i];
+             for (it = p.keySet().iterator(); it.hasNext(); )
+               {
+                 key = (String) it.next();
+                 // add key's binding (a) it is a class of a server factory,
+                 // and (b) the key does not include blanks
+                 if (key.startsWith(SERVER_FACTORY_SVC) && key.indexOf(" ") == -1)
+                   {
+                     names.add(p.getProperty(key));
+                     break;
+                   }
+               }
+           }
+       }
+     // we have the factory class names in names; instantiate and enumerate
+     String c;
+     for (it = names.iterator(); it.hasNext(); )
+       {
+         c = (String) it.next();
+         try
+           {
+             SaslServerFactory f = (SaslServerFactory) Class.forName(c).newInstance();
+             if (f != null)
+               result.add(f);
+           }
+         catch (ClassCastException ignored) // ignore instantiation exceptions
+           {
+           }
+         catch (ClassNotFoundException ignored)
+           {
+           }
+         catch (InstantiationException ignored)
+           {
+           }
+         catch (IllegalAccessException ignored)
+           {
+           }
+       }
+ 
+     return result.elements();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/SaslClient.java gcc-4.0.0/libjava/javax/security/sasl/SaslClient.java
*** gcc-3.4.3/libjava/javax/security/sasl/SaslClient.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/SaslClient.java	Wed Oct 20 10:50:31 2004
***************
*** 0 ****
--- 1,230 ----
+ /* SaslClient.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ /**
+  * <p>Performs SASL authentication as a client.</p>
+  *
+  * <p>A protocol library such as one for LDAP gets an instance of this class in
+  * order to perform authentication defined by a specific SASL mechanism.
+  * Invoking methods on the <code>SaslClient</code> instance process challenges
+  * and create responses according to the SASL mechanism implemented by the
+  * <code>SaslClient</code>. As the authentication proceeds, the instance
+  * encapsulates the state of a SASL client's authentication exchange.</p>
+  *
+  * <p>Here's an example of how an LDAP library might use a <code>SaslClient</code>.
+  * It first gets an instance of a SaslClient:</p>
+  * <pre>
+  *SaslClient sc =
+  *      Sasl.createSaslClient(mechanisms, authorizationID, protocol,
+  *                            serverName, props, callbackHandler);
+  * </pre>
+  *
+  * <p>It can then proceed to use the client for authentication. For example, an
+  * LDAP library might use the client as follows:</p>
+  * <pre>
+  * // Get initial response and send to server
+  *byte[] response = sc.hasInitialResponse()
+  *      ? sc.evaluateChallenge(new byte[0]) : null;
+  *LdapResult res = ldap.sendBindRequest(dn, sc.getName(), response);
+  *while (!sc.isComplete()
+  *       && ((res.status == SASL_BIND_IN_PROGRESS) || (res.status == SUCCESS))) {
+  *   response = sc.evaluateChallenge( res.getBytes() );
+  *   if (res.status == SUCCESS) {
+  *      // we're done; don't expect to send another BIND
+  *      if ( response != null ) {
+  *         throw new SaslException(
+  *               "Protocol error: attempting to send response after completion");
+  *      }
+  *      break;
+  *   }
+  *   res = ldap.sendBindRequest(dn, sc.getName(), response);
+  *}
+  *if (sc.isComplete() && (res.status == SUCCESS) ) {
+  *   String qop = (String)sc.getNegotiatedProperty(Sasl.QOP);
+  *   if ((qop != null)
+  *         && (qop.equalsIgnoreCase("auth-int")
+  *            || qop.equalsIgnoreCase("auth-conf"))) {
+  *      // Use SaslClient.wrap() and SaslClient.unwrap() for future
+  *      // communication with server
+  *      ldap.in = new SecureInputStream(sc, ldap.in);
+  *      ldap.out = new SecureOutputStream(sc, ldap.out);
+  *   }
+  *}
+  * </pre>
+  *
+  * <p>If the mechanism has an initial response, the library invokes
+  * {@link #evaluateChallenge(byte[])} with an empty challenge to get the initial
+  * response. Protocols such as IMAP4, which do not include an initial response
+  * with their first authentication command to the server, initiate the
+  * authentication without first calling {@link #hasInitialResponse()} or
+  * {@link #evaluateChallenge(byte[])}. When the server responds to the command,
+  * it sends an initial challenge. For a SASL mechanism in which the client sends
+  * data first, the server should have issued a challenge with no data. This will
+  * then result in a call (on the client) to {@link #evaluateChallenge(byte[])}
+  * with an empty challenge.</p>
+  *
+  * @see Sasl
+  * @see SaslClientFactory
+  */
+ public interface SaslClient
+ {
+ 
+   /**
+    * Returns the IANA-registered mechanism name of this SASL client. (e.g.
+    * "CRAM-MD5", "GSSAPI").
+    *
+    * @return a non-null string representing the IANA-registered mechanism name.
+    */
+   String getMechanismName();
+ 
+   /**
+    * Determines if this mechanism has an optional initial response. If
+    * <code>true</code>, caller should call {@link #evaluateChallenge(byte[])}
+    * with an empty array to get the initial response.
+    *
+    * @return <code>true</code> if this mechanism has an initial response.
+    */
+   boolean hasInitialResponse();
+ 
+   /**
+    * Evaluates the challenge data and generates a response. If a challenge is
+    * received from the server during the authentication process, this method is
+    * called to prepare an appropriate next response to submit to the server.
+    *
+    * @param challenge the non-null challenge sent from the server. The
+    * challenge array may have zero length.
+    * @return the possibly <code>null</code> reponse to send to the server. It
+    * is <code>null</code> if the challenge accompanied a "SUCCESS" status and
+    * the challenge only contains data for the client to update its state and no
+    * response needs to be sent to the server. The response is a zero-length
+    * byte array if the client is to send a response with no data.
+    * @throws SaslException if an error occurred while processing the challenge
+    * or generating a response.
+    */
+   byte[] evaluateChallenge(byte[] challenge) throws SaslException;
+ 
+   /**
+    * Determines if the authentication exchange has completed. This method may
+    * be called at any time, but typically, it will not be called until the
+    * caller has received indication from the server (in a protocol-specific
+    * manner) that the exchange has completed.
+    *
+    * @return <code>true</code> if the authentication exchange has completed;
+    * <code>false</code> otherwise.
+    */
+   boolean isComplete();
+ 
+   /**
+    * <p>Unwraps a byte array received from the server. This method can be
+    * called only after the authentication exchange has completed (i.e., when
+    * {@link #isComplete()} returns <code>true</code>) and only if the
+    * authentication exchange has negotiated integrity and/or privacy as the
+    * quality of protection; otherwise, an {@link IllegalStateException} is
+    * thrown.</p>
+    *
+    * <p><code>incoming</code> is the contents of the SASL buffer as defined in
+    * RFC 2222 without the leading four octet field that represents the length.
+    * <code>offset</code> and <code>len</code> specify the portion of incoming
+    * to use.</p>
+    *
+    * @param incoming a non-null byte array containing the encoded bytes from
+    * the server.
+    * @param offset the starting position at <code>incoming</code> of the bytes
+    * to use.
+    * @param len the number of bytes from <code>incoming</code> to use.
+    * @return a non-null byte array containing the decoded bytes.
+    * @throws SaslException if <code>incoming</code> cannot be successfully
+    * unwrapped.
+    * @throws IllegalStateException if the authentication exchange has not
+    * completed, or if the negotiated quality of protection has neither
+    * integrity nor privacy.
+    */
+   byte[] unwrap(byte[] incoming, int offset, int len) throws SaslException;
+ 
+   /**
+    * <p>Wraps a byte array to be sent to the server. This method can be called
+    * only after the authentication exchange has completed (i.e., when
+    * {@link #isComplete()} returns <code>true</code>) and only if the
+    * authentication exchange has negotiated integrity and/or privacy as the
+    * quality of protection; otherwise, an {@link IllegalStateException} is
+    * thrown.</p>
+    *
+    * <p>The result of this method will make up the contents of the SASL buffer
+    * as defined in RFC 2222 without the leading four octet field that
+    * represents the length. <code>offset</code> and <code>len</code> specify
+    * the portion of <code>outgoing</code> to use.</p>
+    *
+    * @param outgoing a non-null byte array containing the bytes to encode.
+    * @param offset the starting position at <code>outgoing</code> of the bytes
+    * to use.
+    * @param len the number of bytes from <code>outgoing</code> to use.
+    * @return a non-null byte array containing the encoded bytes.
+    * @throws SaslException if <code>outgoing</code> cannot be successfully
+    * wrapped.
+    * @throws IllegalStateException if the authentication exchange has not
+    * completed, or if the negotiated quality of protection has neither
+    * integrity nor privacy.
+    */
+   byte[] wrap(byte[] outgoing, int offset, int len) throws SaslException;
+ 
+   /**
+    * Retrieves the negotiated property. This method can be called only after
+    * the authentication exchange has completed (i.e., when {@link #isComplete()}
+    * returns <code>true</code>); otherwise, an {@link IllegalStateException} is
+    * thrown.
+    *
+    * @param propName the non-null property name.
+    * @return the value of the negotiated property. If <code>null</code>, the
+    * property was not negotiated or is not applicable to this mechanism.
+    * @throws IllegalStateException if this authentication exchange has not
+    * completed.
+    */
+   Object getNegotiatedProperty(String propName) throws SaslException;
+ 
+   /**
+    * Disposes of any system resources or security-sensitive information the
+    * <code>SaslClient</code> might be using. Invoking this method invalidates
+    * the <code>SaslClient</code> instance. This method is idempotent.
+    *
+    * @throws SaslException if a problem was encountered while disposing of the
+    * resources.
+    */
+   void dispose() throws SaslException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/SaslClientFactory.java gcc-4.0.0/libjava/javax/security/sasl/SaslClientFactory.java
*** gcc-3.4.3/libjava/javax/security/sasl/SaslClientFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/SaslClientFactory.java	Wed Oct 20 10:50:31 2004
***************
*** 0 ****
--- 1,116 ----
+ /* SaslClientFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ import java.util.Map;
+ 
+ import javax.security.auth.callback.CallbackHandler;
+ 
+ /**
+  * <p>An interface for creating instances of {@link SaslClient}. A class that
+  * implements this interface must be thread-safe and handle multiple
+  * simultaneous requests. It must also have a public constructor that accepts
+  * no arguments.</p>
+  *
+  * <p>This interface is not normally accessed directly by a client, which will
+  * use the {@link Sasl} static methods to create a client instance instead.
+  * However, a particular environment may provide and install a new or different
+  * <code>SaslClientFactory</code>.</p>
+  *
+  * @see SaslClient
+  * @see Sasl
+  */
+ public interface SaslClientFactory
+ {
+ 
+   /**
+    * Creates a {@link SaslClient} using the parameters supplied.
+    *
+    * @param mechanisms the non-null list of mechanism names to try. Each is the
+    * IANA-registered name of a SASL mechanism (e.g. "GSSAPI", "CRAM-MD5").
+    * @param authorizationID the possibly null protocol-dependent identification
+    * to be used for authorization. If <code>null</code> or empty, the server
+    * derives an authorization ID from the client's authentication credentials.
+    * When the SASL authentication completes successfully, the specified entity
+    * is granted access.
+    * @param protocol the non-null string name of the protocol for which the
+    * authentication is being performed (e.g. "ldap").
+    * @param serverName the non-null fully qualified host name of the server to
+    * authenticate to.
+    * @param props the possibly <code>null</code> set of properties used to
+    * select the SASL mechanism and to configure the authentication exchange of
+    * the selected mechanism. See the {@link Sasl} class for a list of standard
+    * properties. Other, possibly mechanism-specific, properties can be included.
+    * Properties not relevant to the selected mechanism are ignored.
+    * @param cbh the possibly <code>null</code> callback handler to used by the
+    * SASL mechanisms to get further information from the application/library to
+    * complete the authentication. For example, a SASL mechanism might require
+    * the authentication ID, password and realm from the caller. The
+    * authentication ID is requested by using a
+    * {@link javax.security.auth.callback.NameCallback}. The password is
+    * requested by using a {@link javax.security.auth.callback.PasswordCallback}.
+    * The realm is requested by using a {@link RealmChoiceCallback} if there is
+    * a list of realms to choose from, and by using a {@link RealmCallback} if
+    * the realm must be entered.
+    * @return a possibly <code>null</code> {@link SaslClient} created using the
+    * parameters supplied. If <code>null</code>, this factory cannot produce a
+    * {@link SaslClient} using the parameters supplied.
+    * @throws SaslException if a {@link SaslClient} instance cannot be created
+    * because of an error.
+    */
+   SaslClient createSaslClient(String[] mechanisms, String authorizationID,
+                               String protocol, String serverName, Map props,
+                               CallbackHandler cbh)
+     throws SaslException;
+ 
+   /**
+    * Returns an array of names of mechanisms that match the specified mechanism
+    * selection policies.
+    *
+    * @param props the possibly <code>null</code> set of properties used to
+    * specify the security policy of the SASL mechanisms. For example, if props
+    * contains the {@link Sasl#POLICY_NOPLAINTEXT} property with the value
+    * <code>"true"</code>, then the factory must not return any SASL mechanisms
+    * that are susceptible to simple plain passive attacks. See the {@link Sasl}
+    * class for a complete list of policy properties. Non-policy related
+    * properties, if present in props, are ignored.
+    * @return a non-null array containing IANA-registered SASL mechanism names.
+    */
+   String[] getMechanismNames(Map props);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/SaslException.java gcc-4.0.0/libjava/javax/security/sasl/SaslException.java
*** gcc-3.4.3/libjava/javax/security/sasl/SaslException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/SaslException.java	Wed Oct 20 10:50:31 2004
***************
*** 0 ****
--- 1,183 ----
+ /* SaslException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ import java.io.IOException;
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.io.Serializable;
+ 
+ /**
+  * This class represents an error that has occurred when using SASL.
+  */
+ public class SaslException extends IOException implements Serializable
+ {
+ 
+   // Constants and variables
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * @serial The possibly null root cause exception.
+    */
+   private Throwable _exception = null;
+ 
+   // Constructor(s)
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Constructs a new instance of <code>SaslException</code>. The root
+    * exception and the detailed message are null.
+    */
+   public SaslException()
+   {
+     super();
+   }
+ 
+   /**
+    * Constructs a new instance of <code>SaslException</code> with a detailed
+    * message. The <code>root</code> exception is <code>null</code>.
+    *
+    * @param detail a possibly null string containing details of the exception.
+    * @see Throwable#getMessage()
+    */
+   public SaslException(String detail)
+   {
+     super(detail);
+   }
+ 
+   /**
+    * Constructs a new instance of <code>SaslException</code> with a detailed
+    * message and a root exception. For example, a <code>SaslException</code>
+    * might result from a problem with the callback handler, which might throw a
+    * {@link javax.security.auth.callback.UnsupportedCallbackException} if it
+    * does not support the requested callback, or throw an {@link IOException}
+    * if it had problems obtaining data for the callback. The
+    * <code>SaslException</code>'s root exception would be then be the exception
+    * thrown by the callback handler.
+    *
+    * @param detail a possibly <code>null</code> string containing details of
+    * the exception.
+    * @param ex a possibly <code>null</code> root exception that caused this
+    * exception.
+    * @see Throwable#getMessage()
+    * @see #getCause()
+    */
+   public SaslException(String detail, Throwable ex)
+   {
+     super(detail);
+     _exception = ex;
+   }
+ 
+   // Class methods
+   // -------------------------------------------------------------------------
+ 
+   // Instance methods
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns the cause of this throwable or <code>null</code> if the cause is
+    * nonexistent or unknown. The cause is the throwable that caused this
+    * exception to be thrown.
+    *
+    * @return the possibly <code>null</code> exception that caused this exception.
+    */
+   public Throwable getCause()
+   {
+     return _exception;
+   }
+ 
+   /**
+    * Prints this exception's stack trace to <code>System.err</code>. If this
+    * exception has a root exception; the stack trace of the root exception is
+    * also printed to <code>System.err</code>.
+    */
+   public void printStackTrace()
+   {
+     super.printStackTrace();
+     if (_exception != null)
+       _exception.printStackTrace();
+   }
+ 
+   /**
+    * Prints this exception's stack trace to a print stream. If this exception
+    * has a root exception; the stack trace of the root exception is also
+    * printed to the print stream.
+    *
+    * @param ps the non-null print stream to which to print.
+    */
+   public void printStackTrace(PrintStream ps)
+   {
+     super.printStackTrace(ps);
+     if (_exception != null)
+       _exception.printStackTrace(ps);
+   }
+ 
+   /**
+    * Prints this exception's stack trace to a print writer. If this exception
+    * has a root exception; the stack trace of the root exception is also
+    * printed to the print writer.
+    *
+    * @param pw the non-null print writer to use for output.
+    */
+   public void printStackTrace(PrintWriter pw)
+   {
+     super.printStackTrace(pw);
+     if (_exception != null)
+       _exception.printStackTrace(pw);
+   }
+ 
+   /**
+    * Returns the string representation of this exception. The string
+    * representation contains this exception's class name, its detailed
+    * messsage, and if it has a root exception, the string representation of the
+    * root exception. This string representation is meant for debugging and not
+    * meant to be interpreted programmatically.
+    *
+    * @return the non-null string representation of this exception.
+    * @see Throwable#getMessage()
+    */
+   public String toString()
+   {
+     StringBuffer sb = new StringBuffer(this.getClass().getName())
+       .append(": ").append(super.toString());
+     if (_exception != null)
+       sb.append("; caused by: ").append(_exception.toString());
+     return sb.toString();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/SaslServer.java gcc-4.0.0/libjava/javax/security/sasl/SaslServer.java
*** gcc-3.4.3/libjava/javax/security/sasl/SaslServer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/SaslServer.java	Wed Oct 20 10:50:31 2004
***************
*** 0 ****
--- 1,225 ----
+ /* SasServer.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ /**
+  * <p>Performs SASL authentication as a server.</p>
+  *
+  * <p>A server such as an LDAP server gets an instance of this class in order to
+  * perform authentication defined by a specific SASL mechanism. Invoking methods
+  * on the <code>SaslServer</code> instance generates challenges corresponding to
+  * the SASL mechanism implemented by the <code>SaslServer</code> instance. As
+  * the authentication proceeds, the instance encapsulates the state of a SASL
+  * server's authentication exchange.</p>
+  *
+  * <p>Here's an example of how an LDAP server might use a <code>SaslServer</code>
+  * instance. It first gets an instance of a <code>SaslServer</code> for the SASL
+  * mechanism requested by the client:</p>
+  *
+  * <pre>
+  *SaslServer ss =
+  *      Sasl.createSaslServer(mechanism, "ldap", myFQDN, props, callbackHandler);
+  * </pre>
+  *
+  * <p>It can then proceed to use the server for authentication. For example,
+  * suppose the LDAP server received an LDAP BIND request containing the name of
+  * the SASL mechanism and an (optional) initial response. It then might use the
+  * server as follows:</p>
+  *
+  * <pre>
+  *while (!ss.isComplete()) {
+  *   try {
+  *      byte[] challenge = ss.evaluateResponse(response);
+  *      if (ss.isComplete()) {
+  *         status = ldap.sendBindResponse(mechanism, challenge, SUCCESS);
+  *      } else {
+  *         status = ldap.sendBindResponse(mechanism, challenge, SASL_BIND_IN_PROGRESS);
+  *         response = ldap.readBindRequest();
+  *      }
+  *   } catch (SaslException x) {
+  *      status = ldap.sendErrorResponse(x);
+  *      break;
+  *   }
+  *}
+  *if (ss.isComplete() && (status == SUCCESS)) {
+  *   String qop = (String) sc.getNegotiatedProperty(Sasl.QOP);
+  *   if (qop != null
+  *         && (qop.equalsIgnoreCase("auth-int")
+  *            || qop.equalsIgnoreCase("auth-conf"))) {
+  *      // Use SaslServer.wrap() and SaslServer.unwrap() for future
+  *      // communication with client
+  *      ldap.in = new SecureInputStream(ss, ldap.in);
+  *      ldap.out = new SecureOutputStream(ss, ldap.out);
+  *   }
+  *}
+  * </pre>
+  *
+  * @see Sasl
+  * @see SaslServerFactory
+  */
+ public interface SaslServer
+ {
+ 
+   /**
+    * Returns the IANA-registered mechanism name of this SASL server (e.g.
+    * "CRAM-MD5", "GSSAPI").
+    *
+    * @return a non-null string representing the IANA-registered mechanism name.
+    */
+   String getMechanismName();
+ 
+   /**
+    * Evaluates the response data and generates a challenge. If a response is
+    * received from the client during the authentication process, this method is
+    * called to prepare an appropriate next challenge to submit to the client.
+    * The challenge is <code>null</code> if the authentication has succeeded and
+    * no more challenge data is to be sent to the client. It is non-null if the
+    * authentication must be continued by sending a challenge to the client, or
+    * if the authentication has succeeded but challenge data needs to be
+    * processed by the client. {@link #isComplete()} should be called after each
+    * call to <code>evaluateResponse()</code>,to determine if any further
+    * response is needed from the client.
+    *
+    * @param response the non-null (but possibly empty) response sent by the
+    * client.
+    * @return the possibly <code>null</code> challenge to send to the client.
+    * It is <code>null</code> if the authentication has succeeded and there is
+    * no more challenge data to be sent to the client.
+    * @throws SaslException if an error occurred while processing the response
+    * or generating a challenge.
+    */
+   byte[] evaluateResponse(byte[] response) throws SaslException;
+ 
+   /**
+    * Determines if the authentication exchange has completed. This method is
+    * typically called after each invocation of {@link #evaluateResponse(byte[])}
+    * to determine whether the authentication has completed successfully or
+    * should be continued.
+    *
+    * @return <code>true</code> if the authentication exchange has completed;
+    * <code>false</code> otherwise.
+    */
+   boolean isComplete();
+ 
+   /**
+    * Reports the authorization ID in effect for the client of this session This
+    * method can only be called if {@link #isComplete()} returns <code>true</code>.
+    *
+    * @return the authorization ID of the client.
+    * @throws IllegalStateException if this authentication session has not
+    * completed.
+    */
+   String getAuthorizationID();
+ 
+   /**
+    * <p>Unwraps a byte array received from the client. This method can be called
+    * only after the authentication exchange has completed (i.e., when
+    * {@link #isComplete()} returns <code>true</code>) and only if the
+    * authentication exchange has negotiated integrity and/or privacy as the
+    * quality of protection; otherwise, an {@link IllegalStateException} is
+    * thrown.</p>
+    *
+    * <p><code>incoming</code> is the contents of the SASL buffer as defined in
+    * RFC 2222 without the leading four octet field that represents the length.
+    * <code>offset</code> and <code>len</code> specify the portion of incoming
+    * to use.</p>
+    *
+    * @param incoming a non-null byte array containing the encoded bytes from
+    * the client.
+    * @param offset the starting position at <code>incoming</code> of the bytes
+    * to use.
+    * @param len the number of bytes from <code>incoming</code> to use.
+    * @return a non-null byte array containing the decoded bytes.
+    * @throws SaslException if <code>incoming</code> cannot be successfully
+    * unwrapped.
+    * @throws IllegalStateException if the authentication exchange has not
+    * completed, or if the negotiated quality of protection has neither
+    * integrity nor privacy.
+    */
+   byte[] unwrap(byte[] incoming, int offset, int len) throws SaslException;
+ 
+   /**
+    * <p>Wraps a byte array to be sent to the client. This method can be called
+    * only after the authentication exchange has completed (i.e., when
+    * {@link #isComplete()} returns <code>true</code>) and only if the
+    * authentication exchange has negotiated integrity and/or privacy as the
+    * quality of protection; otherwise, an {@link IllegalStateException} is
+    * thrown.</p>
+    *
+    * <p>The result of this method will make up the contents of the SASL buffer
+    * as defined in RFC 2222 without the leading four octet field that
+    * represents the length. <code>offset</code> and <code>len</code> specify
+    * the portion of <code>outgoing</code> to use.
+    *
+    * @param outgoing a non-null byte array containing the bytes to encode.
+    * @param offset the starting position at <code>outgoing</code> of the bytes
+    * to use.
+    * @param len the number of bytes from <code>outgoing</code> to use.
+    * @return a non-null byte array containing the encoded bytes.
+    * @throws SaslException if <code>outgoing</code> cannot be successfully
+    * wrapped.
+    * @throws IllegalStateException if the authentication exchange has not
+    * completed, or if the negotiated quality of protection has neither
+    * integrity nor privacy.
+    */
+   byte[] wrap(byte[] outgoing, int offset, int len) throws SaslException;
+ 
+   /**
+    * Retrieves the negotiated property. This method can be called only after
+    * the authentication exchange has completed (i.e., when
+    * {@link #isComplete()} returns <code>true</code>); otherwise, an
+    * {@link IllegalStateException} is thrown.
+    *
+    * @return the value of the negotiated property. If <code>null</code>, the
+    * property was not negotiated or is not applicable to this mechanism.
+    * @throws IllegalStateException if this authentication exchange has not
+    * completed.
+    */
+   Object getNegotiatedProperty(String propName) throws SaslException;
+ 
+   /**
+    * Disposes of any system resources or security-sensitive information the
+    * <code>SaslServer</code> might be using. Invoking this method invalidates
+    * the <code>SaslServer</code> instance. This method is idempotent.
+    *
+    * @throws SaslException if a problem was encountered while disposing of the
+    * resources.
+    */
+   void dispose() throws SaslException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/security/sasl/SaslServerFactory.java gcc-4.0.0/libjava/javax/security/sasl/SaslServerFactory.java
*** gcc-3.4.3/libjava/javax/security/sasl/SaslServerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/security/sasl/SaslServerFactory.java	Thu Feb 17 07:48:51 2005
***************
*** 0 ****
--- 1,113 ----
+ /* SaslServerFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.security.sasl;
+ 
+ import java.util.Map;
+ 
+ import javax.security.auth.callback.CallbackHandler;
+ 
+ /**
+  * <p>An interface for creating instances of {@link SaslServer}. A class that
+  * implements this interface must be thread-safe and handle multiple
+  * simultaneous requests. It must also have a public constructor that accepts
+  * no arguments.</p>
+  *
+  * <p>This interface is not normally accessed directly by a server, which will
+  * use the {@link Sasl} static methods to create a {@link SaslServer} instance
+  * instead. However, a particular environment may provide and install a new or
+  * different <code>SaslServerFactory</code>.</p>
+  *
+  * @see SaslServer
+  * @see Sasl
+  */
+ public interface SaslServerFactory
+ {
+ 
+   /**
+    * Creates a {@link SaslServer} instance using the parameters supplied. It
+    * returns <code>null</code> if no {@link SaslServer} instance can be created
+    * using the parameters supplied. Throws {@link SaslException} if it cannot
+    * create a {@link SaslServer} because of an error.
+    *
+    * @param mechanism the non-null IANA-registered name of a SASL mechanism
+    * (e.g. "GSSAPI", "CRAM-MD5").
+    * @param protocol the non-null string name of the protocol for which the
+    * authentication is being performed (e.g. "ldap").
+    * @param serverName the non-null fully qualified host name of the server to
+    * authenticate to.
+    * @param props the possibly null set of properties used to select the SASL
+    * mechanism and to configure the authentication exchange of the selected
+    * mechanism. See the {@link Sasl} class for a list of standard properties.
+    * Other, possibly mechanism-specific, properties can be included. Properties
+    * not relevant to the selected mechanism are ignored.
+    * @param cbh the possibly null callback handler to used by the SASL
+    * mechanisms to get further information from the application/library to
+    * complete the authentication. For example, a SASL mechanism might require
+    * the authentication ID, password and realm from the caller. The
+    * authentication ID is requested by using a
+    * {@link javax.security.auth.callback.NameCallback}. The password is
+    * requested by using a {@link javax.security.auth.callback.PasswordCallback}.
+    * The realm is requested by using a {@link RealmChoiceCallback} if there is
+    * a list of realms to choose from, and by using a {@link RealmCallback} if
+    * the realm must be entered.
+    * @return a possibly null {@link SaslServer} created using the parameters
+    * supplied. If <code>null</code> is returned, it means that this factory
+    * cannot produce a {@link SaslServer} using the parameters supplied.
+    * @throws SaslException if a SaslServer instance cannot be created because
+    * of an error.
+    */
+   SaslServer createSaslServer(String mechanism, String protocol,
+                               String serverName, Map props, CallbackHandler cbh)
+     throws SaslException;
+ 
+   /**
+    * Returns an array of names of mechanisms that match the specified mechanism
+    * selection policies.
+    *
+    * @param props the possibly <code>null</code> set of properties used to
+    * specify the security policy of the SASL mechanisms. For example, if props
+    * contains the {@link Sasl#POLICY_NOPLAINTEXT} property with the value
+    * <code>"true"</code>, then the factory must not return any SASL mechanisms
+    * that are susceptible to simple plain passive attacks. See the {@link Sasl}
+    * class for a complete list of policy properties. Non-policy related
+    * properties, if present in props, are ignored.
+    * @return a non-null array containing IANA-registered SASL mechanism names.
+    */
+   String[] getMechanismNames(Map props);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/sql/XAConnection.java gcc-4.0.0/libjava/javax/sql/XAConnection.java
*** gcc-3.4.3/libjava/javax/sql/XAConnection.java	Sat Oct 11 19:10:36 2003
--- gcc-4.0.0/libjava/javax/sql/XAConnection.java	Thu Oct 21 21:00:07 2004
***************
*** 1,5 ****
! /* XAConnection.java 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* XAConnection.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.sql;
  
  import java.sql.SQLException;
+ 
  import javax.transaction.xa.XAResource;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/AbstractAction.java gcc-4.0.0/libjava/javax/swing/AbstractAction.java
*** gcc-3.4.3/libjava/javax/swing/AbstractAction.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/AbstractAction.java	Wed Feb 16 20:02:17 2005
***************
*** 1,5 ****
  /* AbstractAction.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractAction.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.ObjectInputStream;
*** 44,49 ****
--- 44,50 ----
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.HashMap;
+ 
  import javax.swing.event.SwingPropertyChangeSupport;
  
  /**
*************** import javax.swing.event.SwingPropertyCh
*** 54,212 ****
  public abstract class AbstractAction
    implements Action, Cloneable, Serializable
  {
!   static final long serialVersionUID = -6803159439231523484L;
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * enabled
! 	 */
! 	protected boolean enabled = true;
! 
! 	/**
! 	 * changeSupport
! 	 */
! 	protected SwingPropertyChangeSupport changeSupport =
! 				new SwingPropertyChangeSupport(this);
! 
! 	/**
! 	 * store
! 	 */
! 	private transient HashMap store = new HashMap();
! 
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor AbstractAction
! 	 */
! 	public AbstractAction() {
! 		this(""); // TODO: default name
! 	} // AbstractAction()
  
! 	/**
! 	 * Constructor AbstractAction
! 	 * @param name TODO
! 	 */
! 	public AbstractAction(String name) {
! 		this(name, null); // TODO: default icon??
! 	} // AbstractAction()
  
! 	/**
! 	 * Constructor AbstractAction
! 	 * @param name TODO
! 	 * @param icon TODO
! 	 */
! 	public AbstractAction(String name, Icon icon) {
! 		putValue(NAME, name);
! 		putValue(SMALL_ICON, icon);
! 	} // AbstractAction()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * readObject
! 	 * @param stream TODO
! 	 * @exception ClassNotFoundException TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void readObject(ObjectInputStream stream) 
! 			throws ClassNotFoundException, IOException {
! 		// TODO
! 	} // readObject()
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * clone
! 	 * @exception CloneNotSupportedException TODO
! 	 * @returns Object
! 	 */
! 	protected Object clone() throws CloneNotSupportedException {
! 		// What to do??
! 		return null;
! 	} // clone()
  
! 	/**
! 	 * getValue
! 	 * @param key TODO
! 	 * @returns Object
! 	 */
! 	public Object getValue(String key) {
! 		return store.get(key);
! 	} // getValue()
  
! 	/**
! 	 * putValue
! 	 * @param key TODO
! 	 * @param value TODO
! 	 */
! 	public void putValue(String key, Object value) {
! 		store.put(key, value);
! 	} // putValue()
  
! 	/**
! 	 * isEnabled
! 	 * @returns boolean
! 	 */
! 	public boolean isEnabled() {
! 		return enabled;
! 	} // isEnabled()
  
! 	/**
! 	 * setEnabled
! 	 * @param enabled TODO
! 	 */
! 	public void setEnabled(boolean enabled) {
! 		this.enabled = enabled;
! 	} // setEnabled()
  
! 	/**
! 	 * getKeys
! 	 * @returns Object[]
! 	 */
! 	public Object[] getKeys() {
! 		return store.keySet().toArray();
! 	} // getKeys()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	protected void firePropertyChange(String propertyName,
! 			Object oldValue, Object newValue) {
! 		changeSupport.firePropertyChange(propertyName, oldValue, newValue);
! 	} // firePropertyChange()
  
! 	/**
! 	 * addPropertyChangeListener
! 	 * @param listener TODO
! 	 */
! 	public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
! 		changeSupport.addPropertyChangeListener(listener);
! 	} // addPropertyChangeListener()
  
! 	/**
! 	 * removePropertyChangeListener
! 	 * @param listener TODO
! 	 */
! 	public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
! 		changeSupport.removePropertyChangeListener(listener);
! 	} // removePropertyChangeListener()
  }
--- 55,265 ----
  public abstract class AbstractAction
    implements Action, Cloneable, Serializable
  {
!   private static final long serialVersionUID = -6803159439231523484L;
  
!   /**
!    * enabled
!    */
!   protected boolean enabled = true;
!   
!   /**
!    * changeSupport
!    */
!   protected SwingPropertyChangeSupport changeSupport =
!     new SwingPropertyChangeSupport(this);
  
!   /**
!    * store
!    */
!   private transient HashMap store = new HashMap();
  
!   /**
!    * Constructor AbstractAction
!    */
!   public AbstractAction()
!   {
!     this(""); // TODO: default name
!   }
  
!   /**
!    * Constructor AbstractAction
!    *
!    * @param name TODO
!    */
!   public AbstractAction(String name)
!   {
!     this(name, null); // TODO: default icon??
!   }
  
+   /**
+    * Constructor AbstractAction
+    *
+    * @param name TODO
+    * @param icon TODO
+    */
+   public AbstractAction(String name, Icon icon)
+   {
+     putValue(NAME, name);
+     putValue(SMALL_ICON, icon);
+   }
  
!   /**
!    * readObject
!    *
!    * @param stream the stream to read from
!    *
!    * @exception ClassNotFoundException TODO
!    * @exception IOException if an error occurs
!    */
!   private void readObject(ObjectInputStream stream)
!     throws ClassNotFoundException, IOException
!   {
!     // TODO
!   }
  
!   /**
!    * writeObject
!    *
!    * @param stream the stream to write to
!    *
!    * @exception IOException if an error occurs
!    */
!   private void writeObject(ObjectOutputStream stream) throws IOException
!   {
!     // TODO
!   }
  
!   /**
!    * clone
!    *
!    * @return Object
!    *
!    * @exception CloneNotSupportedException TODO
!    */
!   protected Object clone() throws CloneNotSupportedException
!   {
!     AbstractAction copy = (AbstractAction) super.clone();
!     copy.store = (HashMap) store.clone();
!     return copy;
!   }
  
!   /**
!    * Returns a value for a given key from the built-in store.
!    *
!    * @param key the key to get the value for
!    *
!    * @return Object
!    */
!   public Object getValue(String key)
!   {
!     return store.get(key);
!   }
  
!   /**
!    * Puts a key/value pair into the built-in store.
!    *
!    * @param key the key
!    * @param value the value
!    */
!   public void putValue(String key, Object value)
!   {
!     Object old = getValue(key);
!     if (old != value)
!     {
!       store.put(key, value);
!       firePropertyChange(key, old, value);
!     }
!   }
  
!   /**
!    * isEnabled
!    *
!    * @return boolean
!    */
!   public boolean isEnabled()
!   {
!     return enabled;
!   }
  
!   /**
!    * setEnabled
!    *
!    * @param enabled TODO
!    */
!   public void setEnabled(boolean enabled)
!   {
!     if (enabled != this.enabled)
!     {
!       this.enabled = enabled;
!       firePropertyChange("enabled", !this.enabled, this.enabled);
!     }
!   }
  
!   /**
!    * getKeys
!    * @returns Object[]
!    */
!   public Object[] getKeys()
!   {
!     return store.keySet().toArray();
!   }
  
!   /**
!    * This method fires a PropertyChangeEvent given the propertyName 
!    * and the old and new values.
!    *
!    * @param propertyName The property that changed.
!    * @param oldValue The old value of the property.
!    * @param newValue The new value of the property.
!    */
!   protected void firePropertyChange(String propertyName, Object oldValue,
!                                     Object newValue)
!   {
!     changeSupport.firePropertyChange(propertyName, oldValue, newValue);
!   }
!   
!   /**
!    * This convenience method fires a PropertyChangeEvent given 
!    * the propertyName and the old and new values.
!    *
!    * @param propertyName The property that changed.
!    * @param oldValue The old value of the property.
!    * @param newValue The new value of the property.
!    */
!   private void firePropertyChange(String propertyName, boolean oldValue, boolean newValue)
!   {
!     changeSupport.firePropertyChange(propertyName, oldValue, newValue);
!   }
  
!   /**
!    * addPropertyChangeListener
!    *
!    * @param listener the listener to add
!    */
!   public void addPropertyChangeListener(PropertyChangeListener listener)
!   {
!     changeSupport.addPropertyChangeListener(listener);
!   }
  
!   /**
!    * removePropertyChangeListener
!    *
!    * @param listener the listener to remove
!    */
!   public void removePropertyChangeListener(PropertyChangeListener listener)
!   {
!     changeSupport.removePropertyChangeListener(listener);
!   }
  
!   /**
!    * Returns all registered listeners.
!    *
!    * @return array of listeners.
!    * 
!    * @since 1.4
!    */
!   public PropertyChangeListener[] getPropertyChangeListeners()
!   {
!     return changeSupport.getPropertyChangeListeners();
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/AbstractButton.java gcc-4.0.0/libjava/javax/swing/AbstractButton.java
*** gcc-3.4.3/libjava/javax/swing/AbstractButton.java	Mon Jul 14 05:33:30 2003
--- gcc-4.0.0/libjava/javax/swing/AbstractButton.java	Wed Feb 16 20:02:17 2005
***************
*** 1,5 ****
  /* AbstractButton.java -- Provides basic button functionality.
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractButton.java -- Provides basic button functionality.
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,41 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- 
  package javax.swing;
  
  import java.awt.Graphics;
--- 35,40 ----
*************** import java.awt.Point;
*** 46,61 ****
  import java.awt.Rectangle;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
- import java.awt.event.FocusEvent;
- import java.awt.event.FocusListener;
  import java.awt.event.ItemEvent;
  import java.awt.event.ItemListener;
! import java.awt.event.MouseEvent;
  import java.beans.PropertyChangeListener;
  import javax.accessibility.AccessibleAction;
  import javax.accessibility.AccessibleIcon;
- import javax.accessibility.AccessibleStateSet;
  import javax.accessibility.AccessibleRelationSet;
  import javax.accessibility.AccessibleText;
  import javax.accessibility.AccessibleValue;
  import javax.swing.event.ChangeEvent;
--- 45,59 ----
  import java.awt.Rectangle;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.ItemEvent;
  import java.awt.event.ItemListener;
! import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
+ 
  import javax.accessibility.AccessibleAction;
  import javax.accessibility.AccessibleIcon;
  import javax.accessibility.AccessibleRelationSet;
+ import javax.accessibility.AccessibleStateSet;
  import javax.accessibility.AccessibleText;
  import javax.accessibility.AccessibleValue;
  import javax.swing.event.ChangeEvent;
*************** import javax.swing.event.ChangeListener;
*** 63,801 ****
  import javax.swing.plaf.ButtonUI;
  import javax.swing.text.AttributeSet;
  
  /**
!  * Provides basic button functionality
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public abstract class AbstractButton extends JComponent
    implements ItemSelectable, SwingConstants
  {
!   Icon default_icon, pressed_button, disabled_button,
!     selected_button, disabled_selected_button, current_icon;
    String text;
  
!   int vert_align = CENTER;
!   int hori_align = CENTER;
!   int hori_text_pos = CENTER;
!   int vert_text_pos = CENTER;
  
!   boolean paint_border = true, paint_focus;
!   Action action_taken;
!   ButtonModel model;
    Insets margin;
  
    public static final String FOCUS_PAINTED_CHANGED_PROPERTY = "focusPainted";
  
    /**
!    * AccessibleAbstractButton
     */
!   protected abstract class AccessibleAbstractButton 
!     extends AccessibleJComponent 
!     implements AccessibleAction, AccessibleValue, AccessibleText {
! 
!     /**
!      * Constructor AccessibleAbstractButton
!      * @param component TODO
!      */
!     protected AccessibleAbstractButton(AbstractButton component) {
!       super(component);
!       // TODO
!     } // AccessibleAbstractButton()
  
!     /**
!      * getAccessibleStateSet
!      * @returns AccessibleStateSet
!      */
!     public AccessibleStateSet getAccessibleStateSet() {
        return null; // TODO
!     } // getAccessibleStateSet()
  
!     /**
!      * getAccessibleName
!      * @returns String
!      */
!     public String getAccessibleName() {
        return null; // TODO
!     } // getAccessibleName()
  
!     /**
!      * getAccessibleIcon
!      * @returns AccessibleIcon[]
!      */
!     public AccessibleIcon[] getAccessibleIcon() {
        return null; // TODO
!     } // getAccessibleIcon()
  
!     /**
!      * getAccessibleRelationSet
!      * @returns AccessibleRelationSet
!      */
!     public AccessibleRelationSet getAccessibleRelationSet() {
        return null; // TODO
!     } // getAccessibleRelationSet()
  
!     /**
!      * getAccessibleAction
!      * @returns AccessibleAction
!      */
!     public AccessibleAction getAccessibleAction() {
        return null; // TODO
!     } // getAccessibleAction()
  
!     /**
!      * getAccessibleValue
!      * @returns AccessibleValue
!      */
!     public AccessibleValue getAccessibleValue() {
        return null; // TODO
!     } // getAccessibleValue()
  
!     /**
!      * getAccessibleActionCount
!      * @returns int
!      */
!     public int getAccessibleActionCount() {
        return 0; // TODO
!     } // getAccessibleActionCount()
  
!     /**
!      * getAccessibleActionDescription
!      * @param value0 TODO
!      * @returns String
!      */
!     public String getAccessibleActionDescription(int value0) {
        return null; // TODO
!     } // getAccessibleActionDescription()
  
!     /**
!      * doAccessibleAction
!      * @param value0 TODO
!      * @returns boolean
!      */
!     public boolean doAccessibleAction(int value0) {
        return false; // TODO
!     } // doAccessibleAction()
  
!     /**
!      * getCurrentAccessibleValue
!      * @returns Number
!      */
!     public Number getCurrentAccessibleValue() {
        return null; // TODO
!     } // getCurrentAccessibleValue()
  
!     /**
!      * setCurrentAccessibleValue
!      * @param value0 TODO
!      * @returns boolean
!      */
!     public boolean setCurrentAccessibleValue(Number value0) {
        return false; // TODO
!     } // setCurrentAccessibleValue()
  
!     /**
!      * getMinimumAccessibleValue
!      * @returns Number
!      */
!     public Number getMinimumAccessibleValue() {
        return null; // TODO
!     } // getMinimumAccessibleValue()
  
!     /**
!      * getMaximumAccessibleValue
!      * @returns Number
!      */
!     public Number getMaximumAccessibleValue() {
        return null; // TODO
!     } // getMaximumAccessibleValue()
  
!     /**
!      * getAccessibleText
!      * @returns AccessibleText
!      */
!     public AccessibleText getAccessibleText() {
        return null; // TODO
!     } // getAccessibleText()
  
!     /**
!      * getIndexAtPoint
!      * @param value0 TODO
!      * @returns int
!      */
!     public int getIndexAtPoint(Point value0) {
        return 0; // TODO
!     } // getIndexAtPoint()
  
!     /**
!      * getCharacterBounds
!      * @param value0 TODO
!      * @returns Rectangle
!      */
!     public Rectangle getCharacterBounds(int value0) {
        return null; // TODO
!     } // getCharacterBounds()
  
!     /**
!      * getCharCount
!      * @returns int
!      */
!     public int getCharCount() {
        return 0; // TODO
!     } // getCharCount()
  
!     /**
!      * getCaretPosition
!      * @returns int
!      */
!     public int getCaretPosition() {
        return 0; // TODO
!     } // getCaretPosition()
  
!     /**
!      * getAtIndex
!      * @param value0 TODO
!      * @param value1 TODO
!      * @returns String
!      */
!     public String getAtIndex(int value0, int value1) {
        return null; // TODO
!     } // getAtIndex()
  
!     /**
!      * getAfterIndex
!      * @param value0 TODO
!      * @param value1 TODO
!      * @returns String
!      */
!     public String getAfterIndex(int value0, int value1) {
        return null; // TODO
!     } // getAfterIndex()
  
!     /**
!      * getBeforeIndex
!      * @param value0 TODO
!      * @param value1 TODO
!      * @returns String
!      */
!     public String getBeforeIndex(int value0, int value1) {
        return null; // TODO
!     } // getBeforeIndex()
  
!     /**
!      * getCharacterAttribute
!      * @param value0 TODO
!      * @returns AttributeSet
!      */
!     public AttributeSet getCharacterAttribute(int value0) {
        return null; // TODO
!     } // getCharacterAttribute()
! 
!     /**
!      * getSelectionStart
!      * @returns int
!      */
!     public int getSelectionStart() {
!       return 0; // TODO
!     } // getSelectionStart()
  
!     /**
!      * getSelectionEnd
!      * @returns int
!      */
!     public int getSelectionEnd() {
        return 0; // TODO
!     } // getSelectionEnd()
! 
!     /**
!      * getSelectedText
!      * @returns String
!      */
!     public String getSelectedText() {
!       return null; // TODO
!     } // getSelectedText()
! 
!     /**
!      * getTextRectangle
!      * @returns Rectangle
!      */
!     private Rectangle getTextRectangle() {
!       return null; // TODO
!     } // getTextRectangle()
! 
! 
!   } // AccessibleAbstractButton
! 
! 
!   static private class JFocusListener implements FocusListener
!   {
!     AbstractButton c;
  
!     JFocusListener(AbstractButton c)
      {
!       this.c = c;
      }
  
!     public void focusLost(FocusEvent event)
      {
!       c.getModel().setArmed(false);
! 
!       System.out.println("LOST FOCUS");
!       if (c.isFocusPainted())
!         {
!           c.repaint();
!         }
      }
!     public void focusGained(FocusEvent event)
      {
!       System.out.println("GAIN FOCUS");
      }
    }
  
!   AbstractButton()
    {
      this("",null);
    }
  
!   AbstractButton(String text,
!                  Icon icon)
    {
!     this.text    = text;
!     setIcon(icon);
! 
!     setAlignmentX(LEFT_ALIGNMENT);
!     setAlignmentY(CENTER_ALIGNMENT);
  
!     addFocusListener( new JFocusListener(this) );
  
!     setModel(new DefaultButtonModel(this));
  
!     updateUI(); // get a proper ui
    }
  
!   public ButtonModel getModel()
!   {	return model;    }
  
!   public void setModel(ButtonModel newModel)
!   {	model = newModel;    }
  
    public String getActionCommand()
!   {	return getModel().getActionCommand();    }
  
    public void setActionCommand(String aCommand)
!   {   getModel().setActionCommand(aCommand);   }
  
    public void addActionListener(ActionListener l)
!   {	getModel().addActionListener(l);    }
  
    public void removeActionListener(ActionListener l)
!   {	getModel().removeActionListener(l);    }
! 
!   public void addChangeListener(ChangeListener l)
!   {   getModel().addChangeListener(l);     }
  
!   public void removeChangeListener(ChangeListener l)
!   {  getModel().removeChangeListener(l);    }
  
    public void addItemListener(ItemListener l)
!   {  getModel().addItemListener(l);    }
  
    public void removeItemListener(ItemListener l)
!   {  getModel().removeItemListener(l);  }
! 
!   public int getHorizontalAlignment()
!   {	return hori_align;    }
! 
!   public int getHorizontalTextPosition()
!   {	return hori_text_pos;    }
! 
!   public int getVerticalAlignment()
!   {	return vert_align;   }
  
!   public int getVerticalTextPosition()
!   {	return vert_text_pos;  }
  
!   protected  void fireItemStateChanged(ItemEvent event)
    {
    }
!   
!   protected  void fireStateChanged(ChangeEvent event)
    {
    }
!   
!   protected void fireActionPerformed(ActionEvent event)
    {
    }
  
!   public void setVerticalAlignment(int alignment)
!   {	vert_align = alignment;    }
  
!   public void setHorizontalAlignment(int alignment)
!   {   hori_align = alignment;   }
  
!   public void setVerticalTextPosition(int textPosition)
!   {	vert_text_pos = textPosition;    }
  
!   public void setHorizontalTextPosition(int textPosition)
!   {   hori_text_pos = textPosition;   }
  
    public int getMnemonic()
!   {	return getModel().getMnemonic();    }
  
    public void setMnemonic(char mne)
!   {	getModel().setMnemonic(mne);    }
  
    public void setMnemonic(int mne)
!   {	getModel().setMnemonic(mne);    }
  
!   public void setRolloverEnabled(boolean b)
!   {    getModel().setRollover(b);    }
  
!   public boolean isRolloverEnabled()
!   {    return getModel().isRollover();     }
  
!   public boolean isBorderPainted()
!   {	return paint_border;    }
  
!   public void setBorderPainted(boolean b)
    {
!     if (b != paint_border)
        {
!         paint_border = b;
          revalidate();
          repaint();
        }
    }
  
!   public Action getAction()
!   {	return action_taken;    }
  
!   public void setAction(Action a)
    {
!     action_taken = a;
      revalidate();
      repaint();
    }
  
!   public void setSelected(boolean b)
!   {	getModel().setSelected(b);    }
  
!   public boolean isSelected()
!   {	return getModel().isSelected();     }
  
!   public Icon getIcon()
!   {	return default_icon;    }
  
!   public void setIcon(Icon defaultIcon)
    {
!     if (default_icon == defaultIcon)
        return;
  
!     default_icon = defaultIcon;
!     if (default_icon != null)
        {
!         // XXX FIXME - icons do not know their parent
!         //  			default_icon.setParent(this);
        }
      revalidate();
      repaint();
    }
  
    public String getText()
!   {	return text;    }
  
    public void setLabel(String label)
!   {	setText(label);    }
  
    public String getLabel()
!   {	return getText();    }
  
!   public void setText(String text)
    {
!     this.text = text;
      revalidate();
      repaint();
    }
  
!   public 	Insets getMargin()
!   {      return margin; }
! 
!   public void setMargin(Insets m)
    {
!     margin = m;
      revalidate();
      repaint();
    }
  
!   public void setEnabled(boolean b)
    {
!     super.setEnabled(b);
!     getModel().setEnabled(b);
      repaint();
    }
  
    public Icon getPressedIcon()
!   {	return pressed_button;    }
  
    public void setPressedIcon(Icon pressedIcon)
    {
!     pressed_button = pressedIcon;
      revalidate();
      repaint();
    }
  
    public Icon getDisabledIcon()
!   {	return disabled_button;    }
  
!   public void setDisabledIcon(Icon disabledIcon)
    {
!     disabled_button = disabledIcon;
      revalidate();
      repaint();
    }
  
    public boolean isFocusPainted()
-   {   return paint_focus;   }
- 
-   public void setFocusPainted(boolean b)
    {
!     boolean old = paint_focus;
!     paint_focus = b;
  
!     firePropertyChange(FOCUS_PAINTED_CHANGED_PROPERTY,
!                        old,
!                        b);
!     if (hasFocus())
!       {
!         revalidate();
!         repaint();
!       }
    }
  
    public boolean isFocusTraversable()
    {
-     //Identifies whether or not this component can receive the focus.
      return true;
    }
  
! 
    protected  int checkHorizontalKey(int key, String exception)
    {
!     //       Verify that key is a legal value for the horizontalAlignment properties.
!     return 0;
    }
  
    protected  int checkVerticalKey(int key, String exception)
    {
!     //       Ensures that the key is a valid.
!     return 0;
    }
  
    protected  void configurePropertiesFromAction(Action a)
    {
!     //Factory method which sets the ActionEvent source's properties according to values from the Action instance.
    }
  
    protected  ActionListener createActionListener()
    {
      return new ActionListener()
        {
!         public void actionPerformed(ActionEvent e) { }
        };
    }
  
    protected  PropertyChangeListener createActionPropertyChangeListener(Action a)
    {
!     //Factory method which creates the PropertyChangeListener used to update the ActionEvent source as properties change on its Action instance.
!     return null;
    }
  
    protected  ChangeListener createChangeListener()
    {
-     //       Subclasses that want to handle ChangeEvents differently can override this to return another ChangeListener implementation.
      return new ChangeListener()
        {
!         public void stateChanged(ChangeEvent e) { }
        };
    }
  
    protected  ItemListener createItemListener()
    {
      return new ItemListener()
        {
!         public void itemStateChanged(ItemEvent e) { }
        };
    }
  
    public void doClick()
    {
      doClick(100);
    }
  
    public void doClick(int pressTime)
    {
!     //Toolkit.tlkBeep ();
!     //Programmatically perform a "click".
    }
  
    public Icon getDisabledSelectedIcon()
    {
!     //Returns the icon used by the button when it's disabled and selected.
!     return disabled_selected_button;
    }
  
!   public Icon getRolloverIcon()
    {
!     //       Returns the rollover icon for the button.
!     return null;
    }
  
!   Icon getRolloverSelectedIcon()
    {
!     //       Returns the rollover selection icon for the button.
!     return null;
    }
  
!   Icon getSelectedIcon()
    {
!     //       Returns the selected icon for the button.
!     return selected_button;
    }
  
!   public Object[] getSelectedObjects()
    {
!     //Returns an array (length 1) containing the label or null if the button is not selected.
!     return null;
    }
  
!   public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h)
    {
!     //This is overridden to return false if the current Icon's Image is not equal to the passed in Image img.
!     return current_icon == img;
    }
  
!   public boolean isContentAreaFilled()
    {
!     //       Checks whether the "content area" of the button should be filled.
!     return false;
    }
  
!   protected  void paintBorder(Graphics g)
    {
!     //       Paint the button's border if BorderPainted property is true.
!     if (isBorderPainted())
!       super.paintBorder(g);
    }
  
!   protected  String paramString()
    {
!     //        Returns a string representation of this AbstractButton.
!     return "AbstractButton";
    }
  
!   public void setContentAreaFilled(boolean b)
    {
!     //Sets whether the button should paint the content area or leave it transparent.
    }
  
!   public void setDisabledSelectedIcon(Icon disabledSelectedIcon)
    {
!     //          Sets the disabled selection icon for the button.
    }
  
!   public void setRolloverIcon(Icon rolloverIcon)
    {
!     //       Sets the rollover icon for the button.
!   }
!   public void setRolloverSelectedIcon(Icon rolloverSelectedIcon)
    {
!     //       Sets the rollover selected icon for the button.
    }
  
!   public void setSelectedIcon(Icon selectedIcon)
    {
!     //       Sets the selected icon for the button.
    }
  
    public void setUI(ButtonUI ui)
!   {	//       Sets the L&F object that renders this component.
      super.setUI(ui);
    }
! 
    public ButtonUI getUI()
    {
-     //Returns the L&F object that renders this component.
      return (ButtonUI) ui;
    }
! 
    public void updateUI()
    {
-     /*
-     //          Notification from the UIFactory that the L&F has changed.
-     if (getUI() == null)
-     {
-     setUI(getUI());
-     }
-     */
    }
  
!   protected void processActionEvent(ActionEvent e)
    {
!     System.out.println("PROCESS-ACTION-EVENT: " + e);
    }
  
!   protected void processMouseEvent(MouseEvent e)
    {
!     //	System.out.println("PROCESS-MOUSE-EVENT: " + e + ", PRESSED-IN-MODEL="+getModel().isPressed());
! 
!     switch (e.getID())
!       {
!       case MouseEvent.MOUSE_MOVED:
!         {
!           break;
!         }
!       case MouseEvent.MOUSE_PRESSED:
!         {
!           if (! isEnabled())
!             {
!               System.out.println("button not enabled, ignoring press");
!             }
!           else
!             {
!               System.out.println("telling model:press: " + getModel());
!               getModel().setPressed(true);
!               repaint();
!             }
!           break;
!         }
! 
!       case MouseEvent.MOUSE_RELEASED:
!         {
!           if (! isEnabled())
!             {
!               System.out.println("button not enabled, ignoring release");
!             }
!           else
!             {
!               int flags = 0;
! 
!               System.out.println("        XXX--> " + getActionCommand());
! 
!               fireActionPerformed(new ActionEvent(this,
!                                                   ActionEvent.ACTION_PERFORMED,
!                                                   getActionCommand(),
!                                                   flags));
  
!               //System.out.println("telling model:release");
!               getModel().setPressed(false);
!               repaint();
!             }
!           break;
!         }
!       case MouseEvent.MOUSE_CLICKED:
!         {
!           break;
!         }
!       }
    }
  }
--- 61,1945 ----
  import javax.swing.plaf.ButtonUI;
  import javax.swing.text.AttributeSet;
  
+ 
  /**
!  * <p>The purpose of this class is to serve as a facade over a number of
!  * classes which collectively represent the semantics of a button: the
!  * button's model, its listeners, its action, and its look and feel. Some
!  * parts of a button's state are stored explicitly in this class, other
!  * parts are delegates to the model. Some methods related to buttons are
!  * implemented in this class, other methods pass through to the current 
!  * model or look and feel.</p>
!  *
!  * <p>Furthermore this class is supposed to serve as a base class for
!  * several kinds of buttons with similar but non-identical semantics:
!  * toggle buttons (radio buttons and checkboxes), simple "push" buttons,
!  * menu items.</p>
!  *
!  * <p>Buttons have many properties, some of which are stored in this class
!  * while others are delegated to the button's model. The following properties
!  * are available:</p>
!  *
!  * <table>
!  * <tr><th>Property               </th><th>Stored in</th><th>Bound?</th></tr>
!  *
!  * <tr><td>action                 </td><td>button</td> <td>no</td></tr>
!  * <tr><td>actionCommand          </td><td>model</td>  <td>no</td></tr>
!  * <tr><td>borderPainted          </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>contentAreaFilled      </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>disabledIcon           </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>disabledSelectedIcon   </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>displayedMnemonicIndex </td><td>button</td> <td>no</td></tr>
!  * <tr><td>enabled                </td><td>model</td>  <td>no</td></tr>
!  * <tr><td>focusPainted           </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>horizontalAlignment    </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>horizontalTextPosition </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>icon                   </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>iconTextGap            </td><td>button</td> <td>no</td></tr>
!  * <tr><td>label (same as text)   </td><td>model</td>  <td>yes</td></tr>
!  * <tr><td>margin                 </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>multiClickThreshold    </td><td>button</td> <td>no</td></tr>
!  * <tr><td>pressedIcon            </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>rolloverEnabled        </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>rolloverIcon           </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>rolloverSelectedIcon   </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>selected               </td><td>model</td>  <td>no</td></tr>
!  * <tr><td>selectedIcon           </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>selectedObjects        </td><td>button</td> <td>no</td></tr>
!  * <tr><td>text                   </td><td>model</td>  <td>yes</td></tr>
!  * <tr><td>UI                     </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>verticalAlignment      </td><td>button</td> <td>yes</td></tr>
!  * <tr><td>verticalTextPosition   </td><td>button</td> <td>yes</td></tr>
!  *
!  * </table>
!  *
!  * <p>The various behavioral aspects of these properties follows:</p>
!  *
!  * <ul> 
!  *
!  * <li>When non-bound properties stored in the button change, the button
!  * fires ChangeEvents to its ChangeListeners.</li>
!  * 
!  * <li>When bound properties stored in the button change, the button fires
!  * PropertyChangeEvents to its PropertyChangeListeners</li>
!  *
!  * <li>If any of the model's properties change, it fires a ChangeEvent to
!  * its ChangeListeners, which include the button.</li>
!  *
!  * <li>If the button receives a ChangeEvent from its model, it will
!  * propagate the ChangeEvent to its ChangeListeners, with the ChangeEvent's
!  * "source" property set to refer to the button, rather than the model. The
!  * the button will request a repaint, to paint its updated state.</li>
!  *
!  * <li>If the model's "selected" property changes, the model will fire an
!  * ItemEvent to its ItemListeners, which include the button, in addition to
!  * the ChangeEvent which models the property change. The button propagates
!  * ItemEvents directly to its ItemListeners.</li>
!  *
!  * <li>If the model's armed and pressed properties are simultaneously
!  * <code>true</code>, the model will fire an ActionEvent to its
!  * ActionListeners, which include the button. The button will propagate
!  * this ActionEvent to its ActionListeners, with the ActionEvent's "source"
!  * property set to refer to the button, rather than the model.</li>
!  *
!  * </ul>
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
+  * @author Graydon Hoare (graydon@redhat.com)
   */
+ 
  public abstract class AbstractButton extends JComponent
    implements ItemSelectable, SwingConstants
  {
!   private static final long serialVersionUID = -937921345538462020L;
!   
!   /** The icon displayed by default. */
!   Icon default_icon;
! 
!   /** The icon displayed when the button is pressed. */
!   Icon pressed_icon;
! 
!   /** The icon displayed when the button is disabled. */
!   Icon disabeldIcon;
! 
!   /** The icon displayed when the button is selected. */
!   Icon selectedIcon;
! 
!   /** The icon displayed when the button is selected but disabled. */
!   Icon disabledSelectedIcon;
! 
!   /** The icon displayed when the button is rolled over. */
!   Icon rolloverIcon;
! 
!   /** The icon displayed when the button is selected and rolled over. */
!   Icon rolloverSelectedIcon;
! 
!   /** The icon currently displayed. */
!   Icon current_icon;
! 
!   /** The text displayed in the button. */
    String text;
  
!   /** The gap between icon and text, if both icon and text are non-<code>null</code>. */
!   int iconTextGap;
  
!   /** The vertical alignment of the button's text and icon. */
!   int verticalAlignment;
! 
!   /** The horizontal alignment of the button's text and icon. */
!   int horizontalAlignment;
! 
!   /** The horizontal position of the button's text relative to its icon. */
!   int horizontalTextPosition;
! 
!   /** The vertical position of the button's text relative to its icon. */
!   int verticalTextPosition;
! 
!   /** Whether or not the button paints its border. */
!   boolean borderPainted;
! 
!   /** Whether or not the button paints its focus state. */
!   boolean focusPainted;
! 
!   /** Whether or not the button fills its content area. */
!   boolean contentAreaFilled;
!   
!   /** Whether rollover is enabled. */
!   boolean rollOverEnabled;
! 
!   /** The action taken when the button is clicked. */
!   Action action;
! 
!   /** The button's current state. */
!   protected ButtonModel model;
! 
!   /** The margin between the button's border and its label. */
    Insets margin;
  
+   /** A hint to the look and feel class, suggesting which character in the
+    * button's label should be underlined when drawing the label. */
+   int mnemonicIndex;
+ 
+   /** Listener the button uses to receive ActionEvents from its model.  */
+   protected ActionListener actionListener;
+ 
+   /** Listener the button uses to receive ItemEvents from its model.  */
+   protected ItemListener itemListener;
+ 
+   /** Listener the button uses to receive ChangeEvents from its model.  */  
+   protected ChangeListener changeListener;
+ 
+   /** The time in miliseconds in which clicks get coalesced into a single
+    * <code>ActionEvent</code>. */
+   long multiClickThreshhold;
+   
+   /** Listener the button uses to receive PropertyChangeEvents from its
+       Action. */
+   PropertyChangeListener actionPropertyChangeListener;
+   
+   /** ChangeEvent that is fired to button's ChangeEventListeners  */  
+   protected ChangeEvent changeEvent = new ChangeEvent(this);
+   
+   /** Fired in a PropertyChangeEvent when the "borderPainted" property changes. */
+   public static final String BORDER_PAINTED_CHANGED_PROPERTY = "borderPainted";
+   
+   /** Fired in a PropertyChangeEvent when the "contentAreaFilled" property changes. */
+   public static final String CONTENT_AREA_FILLED_CHANGED_PROPERTY = "contentAreaFilled";
+   
+   /** Fired in a PropertyChangeEvent when the "disabledIcon" property changes. */
+   public static final String DISABLED_ICON_CHANGED_PROPERTY = "disabledIcon";
+   
+   /** Fired in a PropertyChangeEvent when the "disabledSelectedIcon" property changes. */
+   public static final String DISABLED_SELECTED_ICON_CHANGED_PROPERTY = "disabledSelectedIcon";
+   
+   /** Fired in a PropertyChangeEvent when the "focusPainted" property changes. */
    public static final String FOCUS_PAINTED_CHANGED_PROPERTY = "focusPainted";
  
+   /** Fired in a PropertyChangeEvent when the "horizontalAlignment" property changes. */
+   public static final String HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY = "horizontalAlignment";
+ 
+   /** Fired in a PropertyChangeEvent when the "horizontalTextPosition" property changes. */
+   public static final String HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY = "horizontalTextPosition";
+ 
+   /** Fired in a PropertyChangeEvent when the "icon" property changes. */
+   public static final String ICON_CHANGED_PROPERTY = "icon";
+ 
+   /** Fired in a PropertyChangeEvent when the "margin" property changes. */
+   public static final String MARGIN_CHANGED_PROPERTY = "margin";
+ 
+   /** Fired in a PropertyChangeEvent when the "mnemonic" property changes. */
+   public static final String MNEMONIC_CHANGED_PROPERTY = "mnemonic";
+ 
+   /** Fired in a PropertyChangeEvent when the "model" property changes. */
+   public static final String MODEL_CHANGED_PROPERTY = "model";
+ 
+   /** Fired in a PropertyChangeEvent when the "pressedIcon" property changes. */
+   public static final String PRESSED_ICON_CHANGED_PROPERTY = "pressedIcon";
+ 
+   /** Fired in a PropertyChangeEvent when the "rolloverEnabled" property changes. */
+   public static final String ROLLOVER_ENABLED_CHANGED_PROPERTY = "rolloverEnabled";
+ 
+   /** Fired in a PropertyChangeEvent when the "rolloverIcon" property changes. */
+   public static final String ROLLOVER_ICON_CHANGED_PROPERTY = "rolloverIcon";
+   
+   /** Fired in a PropertyChangeEvent when the "rolloverSelectedIcon" property changes. */
+   public static final String ROLLOVER_SELECTED_ICON_CHANGED_PROPERTY = "rolloverSelectedIcon";
+   
+   /** Fired in a PropertyChangeEvent when the "selectedIcon" property changes. */
+   public static final String SELECTED_ICON_CHANGED_PROPERTY = "selectedIcon";
+ 
+   /** Fired in a PropertyChangeEvent when the "text" property changes. */
+   public static final String TEXT_CHANGED_PROPERTY = "text";
+ 
+   /** Fired in a PropertyChangeEvent when the "verticalAlignment" property changes. */
+   public static final String VERTICAL_ALIGNMENT_CHANGED_PROPERTY = "verticalAlignment";
+ 
+   /** Fired in a PropertyChangeEvent when the "verticalTextPosition" property changes. */
+   public static final String VERTICAL_TEXT_POSITION_CHANGED_PROPERTY = "verticalTextPosition";
+ 
    /**
!    * A Java Accessibility extension of the AbstractButton.
     */
!   protected abstract class AccessibleAbstractButton
!     extends AccessibleJComponent implements AccessibleAction, AccessibleValue,
!                                             AccessibleText
!   {
!     private static final long serialVersionUID = -5673062525319836790L;
!     
!     protected AccessibleAbstractButton()
!     {
!     }
  
!     public AccessibleStateSet getAccessibleStateSet()
!     {
        return null; // TODO
!     }
  
!     public String getAccessibleName()
!     {
        return null; // TODO
!     }
  
!     public AccessibleIcon[] getAccessibleIcon()
!     {
        return null; // TODO
!     }
  
!     public AccessibleRelationSet getAccessibleRelationSet()
!     {
        return null; // TODO
!     }
  
!     public AccessibleAction getAccessibleAction()
!     {
        return null; // TODO
!     }
  
!     public AccessibleValue getAccessibleValue()
!     {
        return null; // TODO
!     }
  
!     public int getAccessibleActionCount()
!     {
        return 0; // TODO
!     }
  
!     public String getAccessibleActionDescription(int value0)
!     {
        return null; // TODO
!     }
  
!     public boolean doAccessibleAction(int value0)
!     {
        return false; // TODO
!     }
  
!     public Number getCurrentAccessibleValue()
!     {
        return null; // TODO
!     }
  
!     public boolean setCurrentAccessibleValue(Number value0)
!     {
        return false; // TODO
!     }
  
!     public Number getMinimumAccessibleValue()
!     {
        return null; // TODO
!     }
  
!     public Number getMaximumAccessibleValue()
!     {
        return null; // TODO
!     }
  
!     public AccessibleText getAccessibleText()
!     {
        return null; // TODO
!     }
  
!     public int getIndexAtPoint(Point value0)
!     {
        return 0; // TODO
!     }
  
!     public Rectangle getCharacterBounds(int value0)
!     {
        return null; // TODO
!     }
  
!     public int getCharCount()
!     {
        return 0; // TODO
!     }
  
!     public int getCaretPosition()
!     {
        return 0; // TODO
!     }
  
!     public String getAtIndex(int value0, int value1)
!     {
        return null; // TODO
!     }
  
!     public String getAfterIndex(int value0, int value1)
!     {
        return null; // TODO
!     }
  
!     public String getBeforeIndex(int value0, int value1)
!     {
        return null; // TODO
!     }
  
!     public AttributeSet getCharacterAttribute(int value0)
!     {
        return null; // TODO
!     }
  
!     public int getSelectionStart()
!     {
        return 0; // TODO
!     }
  
!     public int getSelectionEnd()
      {
!       return 0; // TODO
      }
  
!     public String getSelectedText()
      {
!       return null; // TODO
      }
! 
!     private Rectangle getTextRectangle()
      {
!       return null; // TODO
      }
    }
  
!   /**
!    * Creates a new AbstractButton object.
!    */
!   public AbstractButton()
    {
      this("",null);
    }
  
!   /**
!    * Creates a new AbstractButton object.
!    *
!    * @param txt Value to use for the button's "text" property
!    * @param icon Value to use for the button's "defaultIcon" property
!    */
!   AbstractButton(String txt, Icon icon)
    {
!     init (txt, icon);
!     updateUI();
!   }
  
!   /**
!    * Get the model the button is currently using.
!    *
!    * @return The current model
!    */
!   public ButtonModel getModel()
!   {
!     return model;
!   }
  
!   /**
!    * Set the model the button is currently using. This un-registers all 
!    * listeners associated with the current model, and re-registers them
!    * with the new model.
!    *
!    * @param newModel The new model
!    */
!   public void setModel(ButtonModel newModel)
!   {
!     if (newModel == model)
!       return;
  
!     if (model != null)
!       {
!         model.removeActionListener(actionListener);
!         model.removeChangeListener(changeListener);
!         model.removeItemListener(itemListener);
!       }
!     ButtonModel old = model;
!     model = newModel;
!     if (model != null)
!       {
!         model.addActionListener(actionListener);
!         model.addChangeListener(changeListener);
!         model.addItemListener(itemListener);
!       }
!     firePropertyChange(MODEL_CHANGED_PROPERTY, old, model);
!     revalidate();
!     repaint();
    }
  
!  protected void init(String text, Icon icon) 
!  {
!     this.text = text;
!     default_icon = icon;
!     model = new DefaultButtonModel();
!     actionListener = createActionListener();
!     changeListener = createChangeListener();
!     itemListener = createItemListener();
  
!     model.addActionListener(actionListener);
!     model.addChangeListener(changeListener);
!     model.addItemListener(itemListener);
! 
!     horizontalAlignment = CENTER;
!     horizontalTextPosition = TRAILING;
!     verticalAlignment = CENTER;
!     verticalTextPosition = CENTER;
!     borderPainted = true;
!     contentAreaFilled = true;
! 
!     focusPainted = true;
!     setFocusable(true);
! 
!     setAlignmentX(LEFT_ALIGNMENT);
!     setAlignmentY(CENTER_ALIGNMENT);
  
+     setDisplayedMnemonicIndex(-1);    
+  }
+  
+   /**
+    * Get the action command string for this button's model.
+    *
+    * @return The current action command string from the button's model
+    */
    public String getActionCommand()
!   {
!     return getModel().getActionCommand();
!   }
  
+   /**
+    * Set the action command string for this button's model.
+    *
+    * @param aCommand The new action command string to set in the button's
+    * model.
+    */
    public void setActionCommand(String aCommand)
!   {
!     getModel().setActionCommand(aCommand);
!   }
  
+   /**
+    * Adds an ActionListener to the button's listener list. When the
+    * button's model is clicked it fires an ActionEvent, and these
+    * listeners will be called.
+    *
+    * @param l The new listener to add
+    */
    public void addActionListener(ActionListener l)
!   {
!     listenerList.add(ActionListener.class, l);
!   }
  
+   /**
+    * Removes an ActionListener from the button's listener list.
+    *
+    * @param l The listener to remove
+    */
    public void removeActionListener(ActionListener l)
!   {
!     listenerList.remove(ActionListener.class, l);
!   }
  
!   /**
!    * Returns all added <code>ActionListener</code> objects.
!    * 
!    * @return an array of listeners
!    * 
!    * @since 1.4
!    */
!   public ActionListener[] getActionListeners()
!   {
!     return (ActionListener[]) listenerList.getListeners(ActionListener.class);
!   }
  
+   /**
+    * Adds an ItemListener to the button's listener list. When the button's
+    * model changes state (between any of ARMED, ENABLED, PRESSED, ROLLOVER
+    * or SELECTED) it fires an ItemEvent, and these listeners will be
+    * called.
+    *
+    * @param l The new listener to add
+    */
    public void addItemListener(ItemListener l)
!   {
!     listenerList.add(ItemListener.class, l);
!   }
  
+   /**
+    * Removes an ItemListener from the button's listener list.
+    *
+    * @param l The listener to remove
+    */
    public void removeItemListener(ItemListener l)
!   {
!     listenerList.remove(ItemListener.class, l);
!   }
  
!   /**
!    * Returns all added <code>ItemListener</code> objects.
!    * 
!    * @return an array of listeners
!    * 
!    * @since 1.4
!    */
!   public ItemListener[] getItemListeners()
!   {
!     return (ItemListener[]) listenerList.getListeners(ItemListener.class);
!   }
  
!   /**
!    * Adds a ChangeListener to the button's listener list. When the button's
!    * model changes any of its (non-bound) properties, these listeners will be
!    * called. 
!    *
!    * @param l The new listener to add
!    */
!   public void addChangeListener(ChangeListener l)
    {
+     listenerList.add(ChangeListener.class, l);
    }
! 
!   /**
!    * Removes a ChangeListener from the button's listener list.
!    *
!    * @param l The listener to remove
!    */
!   public void removeChangeListener(ChangeListener l)
    {
+     listenerList.remove(ChangeListener.class, l);
    }
! 
!   /**
!    * Returns all added <code>ChangeListener</code> objects.
!    * 
!    * @return an array of listeners
!    * 
!    * @since 1.4
!    */
!   public ChangeListener[] getChangeListeners()
    {
+     return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
    }
  
!   /**
!    * Calls {@link ItemListener.itemStateChanged} on each ItemListener in
!    * the button's listener list.
!    *
!    * @param e The event signifying that the button's model changed state
!    */
!   protected void fireItemStateChanged(ItemEvent e)
!   {
!     e.setSource(this);
!     ItemListener[] listeners = getItemListeners();
!  
!     for (int i = 0; i < listeners.length; i++)
!       listeners[i].itemStateChanged(e);
!   }
  
!   /**
!    * Calls {@link ActionListener.actionPerformed} on each {@link
!    * ActionListener} in the button's listener list.
!    *
!    * @param e The event signifying that the button's model was clicked
!    */
!   protected void fireActionPerformed(ActionEvent e)
!   {
!     e.setSource(this);
!     ActionListener[] listeners = getActionListeners();
!     
!     for (int i = 0; i < listeners.length; i++)
!       listeners[i].actionPerformed(e);
!   }
  
!   /**
!    * Calls {@link ChangeEvent.stateChanged} on each {@link ChangeListener}
!    * in the button's listener list.
!    */
!   protected void fireStateChanged()
!   {
!     ChangeListener[] listeners = getChangeListeners();
  
!     for (int i = 0; i < listeners.length; i++)
!       listeners[i].stateChanged(changeEvent);
!   }
  
+   /**
+    * Get the current keyboard mnemonic value. This value corresponds to a
+    * single key code (one of the {@link java.awt.event.KeyEvent} VK_*
+    * codes) and is used to activate the button when pressed in conjunction
+    * with the "mouseless modifier" of the button's look and feel class, and
+    * when focus is in one of the button's ancestors.
+    *
+    * @return The button's current keyboard mnemonic
+    */
    public int getMnemonic()
!   {
!     return getModel().getMnemonic();
!   }
  
+   /**
+    * Set the current keyboard mnemonic value. This value corresponds to a
+    * single key code (one of the {@link java.awt.event.KeyEvent} VK_*
+    * codes) and is used to activate the button when pressed in conjunction
+    * with the "mouseless modifier" of the button's look and feel class, and
+    * when focus is in one of the button's ancestors.
+    *
+    * @param mne A new mnemonic to use for the button
+    */
    public void setMnemonic(char mne)
!   {
!     setMnemonic((int) mne);
!   }
  
+   /**
+    * Set the current keyboard mnemonic value. This value corresponds to a
+    * single key code (one of the {@link java.awt.event.KeyEvent} VK_*
+    * codes) and is used to activate the button when pressed in conjunction
+    * with the "mouseless modifier" of the button's look and feel class, and
+    * when focus is in one of the button's ancestors.
+    *
+    * @param mne A new mnemonic to use for the button
+    */
    public void setMnemonic(int mne)
!   {
!     int old = getModel().getMnemonic();
  
!     if (old != mne)
!       {
! 	getModel().setMnemonic(mne);
  
! 	if (text != null && ! text.equals(""))
! 	  {
! 	    // Since lower case char = upper case char for 
! 	    // mnemonic, we will convert both text and mnemonic 
! 	    // to upper case before checking if mnemonic character occurs
! 	    // in the menu item text. 
! 	    int upperCaseMne = Character.toUpperCase((char) mne);
! 	    String upperCaseText = text.toUpperCase();
! 	    setDisplayedMnemonicIndex(upperCaseText.indexOf(upperCaseMne));
! 	  }
  
! 	firePropertyChange(MNEMONIC_CHANGED_PROPERTY, old, mne);
! 	revalidate();
! 	repaint();
!       }
!   }
  
!   /** 
!    * Sets the button's mnemonic index. The mnemonic index is a hint to the
!    * look and feel class, suggesting which character in the button's label
!    * should be underlined when drawing the label. If the mnemonic index is
!    * -1, no mnemonic will be displayed. 
!    * 
!    * If no mnemonic index is set, the button will choose a mnemonic index
!    * by default, which will be the first occurrence of the mnemonic
!    * character in the button's text.
!    *
!    * @param index An offset into the "text" property of the button
!    * @throws IllegalArgumentException If <code>index</code> is not within the
!    * range of legal offsets for the "text" property of the button.
!    * @since 1.4
!    */
! 
!   public void setDisplayedMnemonicIndex(int index)
    {
!     if (index < -1 || (text != null && index >= text.length()))
!       throw new IllegalArgumentException();
!   
!     mnemonicIndex = index;
!   }
!   
!   /** 
!    * Get the button's mnemonic index, which is an offset into the button's
!    * "text" property.  The character specified by this offset should be
!    * underlined when the look and feel class draws this button.
!    *
!    * @return An index into the button's "text" property
!    */
!   public int getDisplayedMnemonicIndex()
!   {
!     return mnemonicIndex;
!   }
!   
! 
!   /**
!    * Set the "rolloverEnabled" property. When rollover is enabled, and the
!    * look and feel supports it, the button will change its icon to
!    * rolloverIcon, when the mouse passes over it.
!    *
!    * @param r Whether or not to enable rollover icon changes
!    */
!   public void setRolloverEnabled(boolean r)
!   {
!     if (rollOverEnabled != r)
        {
!         rollOverEnabled = r;
!         firePropertyChange(ROLLOVER_ENABLED_CHANGED_PROPERTY, !r, r);
          revalidate();
          repaint();
        }
    }
  
!   /**
!    * Returns whether or not rollover icon changes are enabled on the
!    * button.
!    *
!    * @return The state of the "rolloverEnabled" property
!    */
!   public boolean isRolloverEnabled()
!   {
!     return rollOverEnabled;
!   }
  
!   /**
!    * Set the value of the button's "selected" property. Selection is only
!    * meaningful for toggle-type buttons (check boxes, radio buttons).
!    *
!    * @param s New value for the property
!    */
!   public void setSelected(boolean s)
    {
!     getModel().setSelected(s);
!   }
! 
!   /**
!    * Get the value of the button's "selected" property. Selection is only
!    * meaningful for toggle-type buttons (check boxes, radio buttons).
!    *
!    * @return The value of the property
!    */
!   public boolean isSelected()
!   {
!     return getModel().isSelected();
!   }
! 
!   /**
!    * Enables or disables the button. A button will neither be selectable
!    * nor preform any actions unless it is enabled.
!    *
!    * @param b Whether or not to enable the button
!    */
!   public void setEnabled(boolean b)
!   {
!     super.setEnabled(b);
!     getModel().setEnabled(b);
!   }
! 
!   /** 
!    * Set the horizontal alignment of the button's text and icon. The
!    * alignment is a numeric constant from {@link SwingConstants}. It must
!    * be one of: <code>RIGHT</code>, <code>LEFT</code>, <code>CENTER</code>,
!    * <code>LEADING</code> or <code>TRAILING</code>.  The default is
!    * <code>RIGHT</code>.
!    * 
!    * @return The current horizontal alignment
!    */
!   public int getHorizontalAlignment()
!   {
!     return horizontalAlignment;
!   }
! 
!   /**
!    * Set the horizontal alignment of the button's text and icon. The
!    * alignment is a numeric constant from {@link SwingConstants}. It must
!    * be one of: <code>RIGHT</code>, <code>LEFT</code>, <code>CENTER</code>,
!    * <code>LEADING</code> or <code>TRAILING</code>.  The default is
!    * <code>RIGHT</code>.
!    *
!    * @param a The new horizontal alignment
!    * @throws IllegalArgumentException If alignment is not one of the legal
!    * constants.
!    */
!   public void setHorizontalAlignment(int a)
!   {
!     if (horizontalAlignment == a)
!       return;
! 
!     int old = horizontalAlignment;
!     horizontalAlignment = a;
!     firePropertyChange(HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY, old, a);
      revalidate();
      repaint();
    }
  
!   /**
!    * Get the horizontal position of the button's text relative to its
!    * icon. The position is a numeric constant from {@link
!    * SwingConstants}. It must be one of: <code>RIGHT</code>,
!    * <code>LEFT</code>, <code>CENTER</code>, <code>LEADING</code> or
!    * <code>TRAILING</code>.  The default is <code>TRAILING</code>.
!    *
!    * @return The current horizontal text position
!    */
!   public int getHorizontalTextPosition()
!   {
!     return horizontalTextPosition;
!   }
  
!   /**
!    * Set the horizontal position of the button's text relative to its
!    * icon. The position is a numeric constant from {@link
!    * SwingConstants}. It must be one of: <code>RIGHT</code>,
!    * <code>LEFT</code>, <code>CENTER</code>, <code>LEADING</code> or
!    * <code>TRAILING</code>. The default is <code>TRAILING</code>.
!    *
!    * @param t The new horizontal text position
!    * @throws IllegalArgumentException If position is not one of the legal
!    * constants.
!    */
!   public void setHorizontalTextPosition(int t)
!   {
!     if (horizontalTextPosition == t)
!       return;
  
!     int old = horizontalTextPosition;
!     horizontalTextPosition = t;
!     firePropertyChange(HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY, old, t);
!     revalidate();
!     repaint();
!   }
  
!   /**
!    * Get the vertical alignment of the button's text and icon. The
!    * alignment is a numeric constant from {@link SwingConstants}. It must
!    * be one of: <code>CENTER</code>, <code>TOP</code>, or
!    * <code>BOTTOM</code>. The default is <code>CENTER</code>.
!    *
!    * @return The current vertical alignment
!    */
!   public int getVerticalAlignment()
    {
!     return verticalAlignment;
!   }
! 
!   /**
!    * Set the vertical alignment of the button's text and icon. The
!    * alignment is a numeric constant from {@link SwingConstants}. It must
!    * be one of: <code>CENTER</code>, <code>TOP</code>, or
!    * <code>BOTTOM</code>. The default is <code>CENTER</code>.
!    *
!    * @param a The new vertical alignment
!    * @throws IllegalArgumentException If alignment is not one of the legal
!    * constants.
!    */
!   public void setVerticalAlignment(int a)
!   {
!     if (verticalAlignment == a)
        return;
+     
+     int old = verticalAlignment;
+     verticalAlignment = a;
+     firePropertyChange(VERTICAL_ALIGNMENT_CHANGED_PROPERTY, old, a);
+     revalidate();
+     repaint();
+   }
  
!   /**
!    * Get the vertical position of the button's text relative to its
!    * icon. The alignment is a numeric constant from {@link
!    * SwingConstants}. It must be one of: <code>CENTER</code>,
!    * <code>TOP</code>, or <code>BOTTOM</code>. The default is
!    * <code>CENTER</code>.
!    *
!    * @return The current vertical position
!    */
!   public int getVerticalTextPosition()
!   {
!     return verticalTextPosition;
!   }
! 
!   /**
!    * Set the vertical position of the button's text relative to its
!    * icon. The alignment is a numeric constant from {@link
!    * SwingConstants}. It must be one of: <code>CENTER</code>,
!    * <code>TOP</code>, or <code>BOTTOM</code>. The default is
!    * <code>CENTER</code>.
!    *
!    * @param t The new vertical position
!    * @throws IllegalArgumentException If position is not one of the legal
!    * constants.
!    */
!   public void setVerticalTextPosition(int t)
!   {
!     if (verticalTextPosition == t)
!       return;
!     
!     int old = verticalTextPosition;
!     verticalTextPosition = t;
!     firePropertyChange(VERTICAL_TEXT_POSITION_CHANGED_PROPERTY, old, t);
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * Set the value of the "borderPainted" property. If set to
!    * <code>false</code>, the button's look and feel class should not paint
!    * a border for the button. The default is <code>true</code>.
!    *
!    * @return The current value of the property.
!    */
!   public boolean isBorderPainted()
!   {
!     return borderPainted;
!   }
! 
!   /**
!    * Set the value of the "borderPainted" property. If set to
!    * <code>false</code>, the button's look and feel class should not paint
!    * a border for the button. The default is <code>true</code>.
!    *
!    * @param b The new value of the property.
!    */
!   public void setBorderPainted(boolean b)
!   {
!     if (borderPainted == b)
!       return;
!     
!     boolean old = borderPainted;
!     borderPainted = b;
!     firePropertyChange(BORDER_PAINTED_CHANGED_PROPERTY, old, b);
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * Get the value of the "action" property. 
!    *
!    * @return The current value of the "action" property
!    */
!   public Action getAction()
!   {
!     return action;
!   }
! 
!   /**
!    * <p>Set the button's "action" property, subscribing the new action to the
!    * button, as an ActionListener, if it is not already subscribed. The old
!    * Action, if it exists, is unsubscribed, and the button is unsubscribed
!    * from the old Action if it was previously subscribed as a
!    * PropertyChangeListener.</p>
!    *
!    * <p>This method also configures several of the button's properties from
!    * the Action, by calling {@link configurePropertiesFromAction}, and
!    * subscribes the button to the Action as a PropertyChangeListener.
!    * Subsequent changes to the Action will thus reconfigure the button 
!    * automatically.</p>
!    *
!    * @param a The new value of the "action" property
!    */
!   public void setAction(Action a)
!   {
!     if (action != null)
        {
!         action.removePropertyChangeListener(actionPropertyChangeListener);
!         removeActionListener(action);
!         if (actionPropertyChangeListener != null)
!           {
!             action.removePropertyChangeListener(actionPropertyChangeListener);
!             actionPropertyChangeListener = null;
!           }
!       }
! 
!     Action old = action;
!     action = a;
!     configurePropertiesFromAction(action);
!     if (action != null)
!       {
!         actionPropertyChangeListener = createActionPropertyChangeListener(a);      
!         action.addPropertyChangeListener(actionPropertyChangeListener);
!         addActionListener(action);
        }
+   }
+ 
+   /**
+    * Return the button's default "icon" property.
+    *
+    * @return The current default icon
+    */
+   public Icon getIcon()
+   {
+     return default_icon;
+   }
+ 
+   /**
+    * Set the button's default "icon" property. This icon is used as a basis
+    * for the pressed and disabled icons, if none are explicitly set.
+    *
+    * @param i The new default icon
+    */
+   public void setIcon(Icon i)
+   {
+     if (default_icon == i)
+       return;
+     
+     Icon old = default_icon;      
+     default_icon = i;      
+     firePropertyChange(ICON_CHANGED_PROPERTY, old, i);
      revalidate();
      repaint();
    }
  
+   /**
+    * Return the button's "text" property. This property is synonymous with
+    * the "label" property.
+    *
+    * @return The current "text" property
+    */
    public String getText()
!   {
!     return text;
!   }
  
+   /**
+    * Set the button's "label" property. This property is synonymous with the
+    * "text" property.
+    *
+    * @param label The new "label" property
+    *
+    * @deprecated use <code>setText(text)</code>
+    */
    public void setLabel(String label)
!   {
!     setText(label);
!   }
  
+   /**
+    * Return the button's "label" property. This property is synonymous with
+    * the "text" property.
+    *
+    * @return The current "label" property
+    *
+    * @deprecated use <code>getText()</code>
+    */
    public String getLabel()
!   {
!     return getText();
!   }
  
!   /**
!    * Set the button's "text" property. This property is synonymous with the
!    * "label" property.
!    *
!    * @param t The new "text" property
!    */
!   public void setText(String t)
    {
!     if (text == t)
!       return;
!     
!     String old = text;
!     text = t;
!     firePropertyChange(TEXT_CHANGED_PROPERTY, old, t);
      revalidate();
      repaint();
    }
  
!   /**
!    * Set the value of the {@link #iconTextGap} property.
!    * 
!    * @param i The new value of the property
!    */
!   public void setIconTextGap(int i)
    {
!     if (iconTextGap == i)
!       return;
!     
!     int old = iconTextGap;
!     iconTextGap = i;
!     fireStateChanged();
      revalidate();
      repaint();
    }
  
!   /**
!    * Get the value of the {@link #iconTextGap} property.
!    *
!    * @return The current value of the property
!    */
!   public int getIconTextGap()
    {
!     return iconTextGap;
!   }
! 
!   /**
!    * Return the button's "margin" property, which is an {@link Insets} object
!    * describing the distance between the button's border and its text and
!    * icon.
!    *
!    * @return The current "margin" property
!    */
!   public Insets getMargin()
!   {
!     return margin;
!   }
! 
!   /**
!    * Set the button's "margin" property, which is an {@link Insets} object
!    * describing the distance between the button's border and its text and
!    * icon.
!    *
!    * @param m The new "margin" property
!    */
!   public void setMargin(Insets m)
!   {
!     if (margin == m)
!       return;
!     
!     Insets old = margin;
!     margin = m;
!     firePropertyChange(MARGIN_CHANGED_PROPERTY, old, m);
!     revalidate();
      repaint();
    }
  
+   /**
+    * Return the button's "pressedIcon" property. The look and feel class
+    * should paint this icon when the "pressed" property of the button's
+    * {@link ButtonModel} is <code>true</code>. This property may be
+    * <code>null</code>, in which case the default icon is used.
+    *
+    * @return The current "pressedIcon" property
+    */
    public Icon getPressedIcon()
!   {
!     return pressed_icon;
!   }
  
+   /**
+    * Set the button's "pressedIcon" property. The look and feel class
+    * should paint this icon when the "pressed" property of the button's
+    * {@link ButtonModel} is <code>true</code>. This property may be
+    * <code>null</code>, in which case the default icon is used.
+    *
+    * @param pressedIcon The new "pressedIcon" property
+    */
    public void setPressedIcon(Icon pressedIcon)
    {
!     if (pressed_icon == pressedIcon)
!       return;
!     
!     Icon old = pressed_icon;
!     pressed_icon = pressedIcon;
!     firePropertyChange(PRESSED_ICON_CHANGED_PROPERTY, old, pressed_icon);
      revalidate();
      repaint();
    }
  
+   /**
+    * Return the button's "disabledIcon" property. The look and feel class
+    * should paint this icon when the "enabled" property of the button's
+    * {@link ButtonModel} is <code>false</code>. This property may be
+    * <code>null</code>, in which case an icon is constructed, based on the
+    * default icon.
+    *
+    * @return The current "disabledIcon" property
+    */
    public Icon getDisabledIcon()
!   {
!     if (disabeldIcon == null
! 	&& default_icon instanceof ImageIcon)
!       disabeldIcon = new ImageIcon(GrayFilter.createDisabledImage(((ImageIcon) default_icon).getImage()));
!       
!     return disabeldIcon;
!   }
  
!   /**
!    * Set the button's "disabledIcon" property. The look and feel class should
!    * paint this icon when the "enabled" property of the button's {@link
!    * ButtonModel} is <code>false</code>. This property may be
!    * <code>null</code>, in which case an icon is constructed, based on the
!    * default icon.
!    *
!    * @param disabledIcon The new "disabledIcon" property
!    */
!   public void setDisabledIcon(Icon d)
    {
!     disabeldIcon = d;
      revalidate();
      repaint();
    }
  
+   /**
+    * Return the button's "paintFocus" property. This property controls
+    * whether or not the look and feel class will paint a special indicator
+    * of focus state for the button. If it is false, the button still paints
+    * when focused, but no special decoration is painted to indicate the
+    * presence of focus.
+    *
+    * @return The current "paintFocus" property
+    */
    public boolean isFocusPainted()
    {
!     return focusPainted;
!   }
  
!   /**
!    * Set the button's "paintFocus" property. This property controls whether
!    * or not the look and feel class will paint a special indicator of focus
!    * state for the button. If it is false, the button still paints when
!    * focused, but no special decoration is painted to indicate the presence
!    * of focus.
!    *
!    * @param b The new "paintFocus" property
!    */
!   public void setFocusPainted(boolean p)
!   {
!     if (focusPainted == p)
!       return;
!     
!     boolean old = focusPainted;
!     focusPainted = p;
!     firePropertyChange(FOCUS_PAINTED_CHANGED_PROPERTY, old, p);
!     revalidate();
!     repaint();
    }
  
+   /**
+    * Return the button's "focusTraversable" property. This property controls
+    * whether or not the button can receive focus when the user attempts to
+    * traverse the focus hierarchy.
+    *
+    * @return The current "focusTraversable" property
+    */
    public boolean isFocusTraversable()
    {
      return true;
    }
  
!   /**
!    * Verifies that a particular key is one of the valid constants used for
!    * describing horizontal alignment and positioning. The valid constants
!    * are the following members of {@link SwingConstants}:
!    * <code>RIGHT</code>, <code>LEFT</code>, <code>CENTER</code>,
!    * <code>LEADING</code> or <code>TRAILING</code>.
!    *
!    * @param key The key to check
!    * @param exception A message to include in an IllegalArgumentException
!    *
!    * @return the value of key
!    *
!    * @throws IllegalArgumentException If key is not one of the valid constants
!    *
!    * @see setHorizontalTextPosition()
!    * @see setHorizontalAlignment()
!    */
    protected  int checkHorizontalKey(int key, String exception)
    {
!     switch (key)
!       {
!       case SwingConstants.RIGHT:
!       case SwingConstants.LEFT:
!       case SwingConstants.CENTER:
!       case SwingConstants.LEADING:
!       case SwingConstants.TRAILING:
!         break;
!       default:
!         throw new IllegalArgumentException(exception);
!       }
!     return key;
    }
  
+   /**
+    * Verifies that a particular key is one of the valid constants used for
+    * describing vertical alignment and positioning. The valid constants are
+    * the following members of {@link SwingConstants}: <code>TOP</code>,
+    * <code>BOTTOM</code> or <code>CENTER</code>.
+    *
+    * @param key The key to check
+    * @param exception A message to include in an IllegalArgumentException
+    *
+    * @return the value of key
+    *
+    * @throws IllegalArgumentException If key is not one of the valid constants
+    *
+    * @see setVerticalTextPosition()
+    * @see setVerticalAlignment()
+    */
    protected  int checkVerticalKey(int key, String exception)
    {
!     switch (key)
!       {
!       case SwingConstants.TOP:
!       case SwingConstants.BOTTOM:
!       case SwingConstants.CENTER:
!         break;
!       default:
!         throw new IllegalArgumentException(exception);
!       }
!     return key;
    }
  
+   /**
+    * Configure various properties of the button by reading properties
+    * of an {@link Action}. The mapping of properties is as follows:
+    *
+    * <table>
+    *
+    * <tr><th>Action keyed property</th> <th>AbstractButton property</th></tr>
+    *
+    * <tr><td>NAME                 </td> <td>text                   </td></tr>
+    * <tr><td>SMALL_ICON           </td> <td>icon                   </td></tr>
+    * <tr><td>SHORT_DESCRIPTION    </td> <td>toolTipText            </td></tr>
+    * <tr><td>MNEMONIC_KEY         </td> <td>mnemonic               </td></tr>
+    * <tr><td>ACTION_COMMAND_KEY   </td> <td>actionCommand          </td></tr>
+    *
+    * </table>
+    *
+    * <p>In addition, this method always sets the button's "enabled" property to
+    * the value of the Action's "enabled" property.</p>
+    *
+    * <p>If the provided Action is <code>null</code>, the text, icon, and
+    * toolTipText properties of the button are set to <code>null</code>, and
+    * the "enabled" property is set to <code>true</code>; the mnemonic and
+    * actionCommand properties are unchanged.</p>
+    *
+    * @param a An Action to configure the button from
+    */
    protected  void configurePropertiesFromAction(Action a)
    {
!     if (a == null)
!       {
!         setText(null);
!         setIcon(null);
!         setEnabled(true);
!         setToolTipText(null);
!       }
!     else
!       {
!         setText((String)(a.getValue(Action.NAME)));
!         setIcon((Icon)(a.getValue(Action.SMALL_ICON)));
!         setEnabled(a.isEnabled());
!         setToolTipText((String)(a.getValue(Action.SHORT_DESCRIPTION)));
! 	if (a.getValue(Action.MNEMONIC_KEY) != null)
!           setMnemonic(((Integer)(a.getValue(Action.MNEMONIC_KEY))).intValue());
!         String actionCommand = (String)(a.getValue(Action.ACTION_COMMAND_KEY));
! 
!         // Set actionCommand to button's text by default if it is not specified
!         if (actionCommand != null)
! 	   setActionCommand((String)(a.getValue(Action.ACTION_COMMAND_KEY)));
! 	 else
! 	   setActionCommand(getText());
!       }
    }
  
+   /**
+    * <p>A factory method which should return an {@link ActionListener} that
+    * propagates events from the button's {@link ButtonModel} to any of the
+    * button's ActionListeners. By default, this is an inner class which
+    * calls {@link AbstractButton.fireActionPerformed} with a modified copy
+    * of the incoming model {@link ActionEvent}.</p>
+    *
+    * <p>The button calls this method during construction, stores the
+    * resulting ActionListener in its <code>actionListener</code> member
+    * field, and subscribes it to the button's model. If the button's model
+    * is changed, this listener is unsubscribed from the old model and
+    * subscribed to the new one.</p>
+    *
+    * @return A new ActionListener 
+    */
    protected  ActionListener createActionListener()
    {
      return new ActionListener()
        {
!         public void actionPerformed(ActionEvent e)
!         {
!           AbstractButton.this.fireActionPerformed(e);
!         }
        };
    }
  
+   /**
+    * <p>A factory method which should return a {@link PropertyChangeListener}
+    * that accepts changes to the specified {@link Action} and reconfigure
+    * the {@link AbstractButton}, by default using the {@link
+    * configurePropertiesFromAction} method.</p>
+    *
+    * <p>The button calls this method whenever a new Action is assigned to
+    * the button's "action" property, via {@link setAction}, and stores the
+    * resulting PropertyChangeListener in its
+    * <code>actionPropertyChangeListener</code> member field. The button
+    * then subscribes the listener to the button's new action. If the
+    * button's action is changed subsequently, the listener is unsubscribed
+    * from the old action and subscribed to the new one.</p>
+    *
+    * @param a The Action which will be listened to, and which should be 
+    * the same as the source of any PropertyChangeEvents received by the
+    * new listener returned from this method.
+    *
+    * @return A new PropertyChangeListener
+    */
    protected  PropertyChangeListener createActionPropertyChangeListener(Action a)
    {
!     return new PropertyChangeListener()
!       {
!         public void propertyChange(PropertyChangeEvent e)
!         {
!           Action act = (Action) (e.getSource());	
! 	  if (e.getPropertyName().equals("enabled"))
! 	    setEnabled(act.isEnabled());
! 	  else if (e.getPropertyName().equals(Action.NAME))
!             setText((String)(act.getValue(Action.NAME)));
! 	  else if (e.getPropertyName().equals(Action.SMALL_ICON))
! 	    setIcon((Icon)(act.getValue(Action.SMALL_ICON)));
! 	  else if (e.getPropertyName().equals(Action.SHORT_DESCRIPTION))
!             setToolTipText((String)(act.getValue(Action.SHORT_DESCRIPTION)));
! 	  else if (e.getPropertyName().equals(Action.MNEMONIC_KEY))
!             if (act.getValue(Action.MNEMONIC_KEY) != null)
!               setMnemonic(((Integer)(act.getValue(Action.MNEMONIC_KEY))).intValue());
! 	  else if (e.getPropertyName().equals(Action.ACTION_COMMAND_KEY))
!             setActionCommand((String)(act.getValue(Action.ACTION_COMMAND_KEY)));
! 	}
!       };
    }
  
+   /**
+    * <p>Factory method which creates a {@link ChangeListener}, used to
+    * subscribe to ChangeEvents from the button's model. Subclasses of
+    * AbstractButton may wish to override the listener used to subscribe to
+    * such ChangeEvents. By default, the listener just propagates the
+    * {@link ChangeEvent} to the button's ChangeListeners, via the {@link
+    * AbstractButton.fireStateChanged} method.</p>
+    *
+    * <p>The button calls this method during construction, stores the
+    * resulting ChangeListener in its <code>changeListener</code> member
+    * field, and subscribes it to the button's model. If the button's model
+    * is changed, this listener is unsubscribed from the old model and
+    * subscribed to the new one.</p>
+    *
+    * @return The new ChangeListener
+    */
    protected  ChangeListener createChangeListener()
    {
      return new ChangeListener()
        {
!         public void stateChanged(ChangeEvent e)
!         {
!           AbstractButton.this.fireStateChanged();
!           AbstractButton.this.repaint();          
!         }
        };
    }
  
+   /**
+    * <p>Factory method which creates a {@link ItemListener}, used to
+    * subscribe to ItemEvents from the button's model. Subclasses of
+    * AbstractButton may wish to override the listener used to subscribe to
+    * such ItemEvents. By default, the listener just propagates the
+    * {@link ItemEvent} to the button's ItemListeners, via the {@link
+    * AbstractButton.fireItemStateChanged} method.</p>
+    *
+    * <p>The button calls this method during construction, stores the
+    * resulting ItemListener in its <code>changeListener</code> member
+    * field, and subscribes it to the button's model. If the button's model
+    * is changed, this listener is unsubscribed from the old model and
+    * subscribed to the new one.</p>
+    *
+    * <p>Note that ItemEvents are only generated from the button's model
+    * when the model's <em>selected</em> property changes. If you want to
+    * subscribe to other properties of the model, you must subscribe to
+    * ChangeEvents.
+    *
+    * @return The new ItemListener
+    */
    protected  ItemListener createItemListener()
    {
      return new ItemListener()
        {
!         public void itemStateChanged(ItemEvent e)
!         {
!           AbstractButton.this.fireItemStateChanged(e);
!         }
        };
    }
  
+   /**
+    * Programmatically perform a "click" on the button: arming, pressing,
+    * waiting, un-pressing, and disarming the model.
+    */
    public void doClick()
    {
      doClick(100);
    }
  
+   /**
+    * Programmatically perform a "click" on the button: arming, pressing,
+    * waiting, un-pressing, and disarming the model.
+    *
+    * @param pressTime The number of milliseconds to wait in the pressed state
+    */
    public void doClick(int pressTime)
    {
!     getModel().setArmed(true);
!     getModel().setPressed(true);
!     try
!       {
!         java.lang.Thread.sleep(pressTime);
!       }
!     catch (java.lang.InterruptedException e)
!       {
!         // probably harmless
!       }
!     getModel().setPressed(false);
!     getModel().setArmed(false);
    }
  
+   /**
+    * Return the button's disabled selected icon. The look and feel class
+    * should paint this icon when the "enabled" property of the button's model
+    * is <code>false</code> and its "selected" property is
+    * <code>true</code>. This icon can be <code>null</code>, in which case
+    * it is synthesized from the button's selected icon.
+    *
+    * @return The current disabled selected icon
+    */
    public Icon getDisabledSelectedIcon()
    {
!     return disabledSelectedIcon;
    }
  
!   /**
!    * Set the button's disabled selected icon. The look and feel class
!    * should paint this icon when the "enabled" property of the button's model
!    * is <code>false</code> and its "selected" property is
!    * <code>true</code>. This icon can be <code>null</code>, in which case
!    * it is synthesized from the button's selected icon.
!    *
!    * @param icon The new disabled selected icon
!    */
!   public void setDisabledSelectedIcon(Icon icon)
    {
!     if (disabledSelectedIcon == icon)
!       return;
!     
!     Icon old = disabledSelectedIcon;
!     disabledSelectedIcon = icon;
!     firePropertyChange(DISABLED_SELECTED_ICON_CHANGED_PROPERTY, old, icon);
!     revalidate();
!     repaint();        
    }
  
!   /**
!    * Return the button's rollover icon. The look and feel class should
!    * paint this icon when the "rolloverEnabled" property of the button is
!    * <code>true</code> and the mouse rolls over the button.
!    *
!    * @return The current rollover icon
!    */
!   public Icon getRolloverIcon()
    {
!     return rolloverIcon;
    }
  
!   /**
!    * Set the button's rollover icon. The look and feel class should
!    * paint this icon when the "rolloverEnabled" property of the button is
!    * <code>true</code> and the mouse rolls over the button.
!    *
!    * @param rolloverIcon The new rollover icon
!    */
!   public void setRolloverIcon(Icon r)
    {
!     if (rolloverIcon == r)
!       return;
!     
!     Icon old = rolloverIcon;
!     rolloverIcon = r;
!     firePropertyChange(ROLLOVER_ICON_CHANGED_PROPERTY, old, rolloverIcon);
!     revalidate();
!     repaint();
    }
  
!   /**
!    * Return the button's rollover selected icon. The look and feel class
!    * should paint this icon when the "rolloverEnabled" property of the button
!    * is <code>true</code>, the "selected" property of the button's model is
!    * <code>true</code>, and the mouse rolls over the button.
!    *
!    * @return The current rollover selected icon
!    */
!   public Icon getRolloverSelectedIcon()
    {
!     return rolloverSelectedIcon;
    }
  
!   /**
!    * Set the button's rollover selected icon. The look and feel class
!    * should paint this icon when the "rolloverEnabled" property of the button
!    * is <code>true</code>, the "selected" property of the button's model is
!    * <code>true</code>, and the mouse rolls over the button.
!    *
!    * @param rolloverSelectedIcon The new rollover selected icon
!    */
!   public void setRolloverSelectedIcon(Icon r)
    {
!     if (rolloverSelectedIcon == r)
!       return;
!     
!     Icon old = rolloverSelectedIcon;
!     rolloverSelectedIcon = r;
!     firePropertyChange(ROLLOVER_SELECTED_ICON_CHANGED_PROPERTY, old, r);
!     revalidate();
!     repaint();
    }
  
!   /**
!    * Return the button's selected icon. The look and feel class should
!    * paint this icon when the "selected" property of the button's model is
!    * <code>true</code>, and either the "rolloverEnabled" property of the
!    * button is <code>false</code> or the mouse is not currently rolled
!    * over the button.
!    *
!    * @return The current selected icon
!    */
!   public Icon getSelectedIcon()
    {
!     return selectedIcon;
    }
  
!   /**
!    * Set the button's selected icon. The look and feel class should
!    * paint this icon when the "selected" property of the button's model is
!    * <code>true</code>, and either the "rolloverEnabled" property of the
!    * button is <code>false</code> or the mouse is not currently rolled
!    * over the button.
!    *
!    * @param selectedIcon The new selected icon
!    */
!   public void setSelectedIcon(Icon s)
    {
!     if (selectedIcon == s)
!       return;
!     
!     Icon old = selectedIcon;
!     selectedIcon = s;
!     firePropertyChange(SELECTED_ICON_CHANGED_PROPERTY, old, s);
!     revalidate();
!     repaint();
    }
  
!   /**
!    * Returns an single-element array containing the "text" property of the
!    * button if the "selected" property of the button's model is
!    * <code>true</code>, otherwise returns <code>null</code>.
!    *
!    * @return The button's "selected object" array
!    */
!   public Object[] getSelectedObjects()
    {
!     if (isSelected())
!       {
!         Object[] objs = new Object[1];
!         objs[0] = getText();
!         return objs;
!       }
!     else
!      {
!         return null;
!       }
    }
  
!   /**
!    * Called when image data becomes available for one of the button's icons.
!    *
!    * @param img The image being updated
!    * @param infoflags One of the constant codes in {@link ImageObserver} used to describe
!    * updated portions of an image.
!    * @param x X coordinate of the region being updated
!    * @param y Y coordinate of the region being updated
!    * @param w Width of the region beign updated
!    * @param h Height of the region being updated
!    *
!    * @return <code>true</code> if img is equal to the button's current
!    * icon, otherwise <code>false</code>
!    */
!   public boolean imageUpdate(Image img, int infoflags, int x, int y, int w,
!                              int h)
    {
!     return current_icon == img;
    }
  
!   /**
!    * Returns the value of the button's "contentAreaFilled" property. This
!    * property indicates whether the area surrounding the text and icon of
!    * the button should be filled by the look and feel class.  If this
!    * property is <code>false</code>, the look and feel class should leave
!    * the content area transparent.
!    *
!    * @return The current value of the "contentAreaFilled" property
!    */
!   public boolean isContentAreaFilled()
    {
!     return contentAreaFilled;
    }
  
!   /**
!    * Sets the value of the button's "contentAreaFilled" property. This
!    * property indicates whether the area surrounding the text and icon of
!    * the button should be filled by the look and feel class.  If this
!    * property is <code>false</code>, the look and feel class should leave
!    * the content area transparent.
!    *
!    * @param b The new value of the "contentAreaFilled" property
!    */
!   public void setContentAreaFilled(boolean b)
    {
!     if (contentAreaFilled == b)
!       return;
!     
!     boolean old = contentAreaFilled;
!     contentAreaFilled = b;
!     firePropertyChange(CONTENT_AREA_FILLED_CHANGED_PROPERTY, old, b);
!     revalidate();
!     repaint();
!    }
! 
!   /**
!    * Paints the button's border, if the button's "borderPainted" property is
!    * <code>true</code>, by out calling to the button's look and feel class.
!    *
!    * @param g The graphics context used to paint the border
!    */
!   protected void paintBorder(Graphics g)
    {
!     if (isBorderPainted())
!       super.paintBorder(g);
    }
  
!   /**
!    * Returns a string, used only for debugging, which identifies or somehow
!    * represents this button. The exact value is implementation-defined.
!    *
!    * @return A string representation of the button
!    */
!   protected String paramString()
    {
!     StringBuffer sb = new StringBuffer();
!     sb.append(super.paramString());
!     sb.append(",defaultIcon=");
!     if (getIcon() != null)
!       sb.append(getIcon());
!     sb.append(",disabledIcon=");
!     if (getDisabledIcon() != null)
!       sb.append(getDisabledIcon());
!     sb.append(",disabledSelectedIcon=");
!     if (getDisabledSelectedIcon() != null)
!       sb.append(getDisabledSelectedIcon());
!     sb.append(",margin=");
!     if (getMargin() != null)
!       sb.append(getMargin());
!     sb.append(",paintBorder=").append(isBorderPainted());
!     sb.append(",paintFocus=").append(isFocusPainted());
!     sb.append(",pressedIcon=");
!     if (getPressedIcon() != null)
!       sb.append(getPressedIcon());
!     sb.append(",rolloverEnabled=").append(isRolloverEnabled());
!     sb.append(",rolloverIcon=");
!     if (getRolloverIcon() != null)
!       sb.append(getRolloverIcon());
!     sb.append(",rolloverSelected=");
!     if (getRolloverSelectedIcon() != null)
!       sb.append(getRolloverSelectedIcon());
!     sb.append(",selectedIcon=");
!     if (getSelectedIcon() != null)
!       sb.append(getSelectedIcon());
!     sb.append(",text=");
!     if (getText() != null)
!       sb.append(getText());
!     return sb.toString();
    }
  
+   /**
+    * Set the "UI" property of the button, which is a look and feel class
+    * responsible for handling the button's input events and painting it.
+    *
+    * @param ui The new "UI" property
+    */
    public void setUI(ButtonUI ui)
!   {
      super.setUI(ui);
    }
!   
!   /**
!    * Set the "UI" property of the button, which is a look and feel class
!    * responsible for handling the button's input events and painting it.
!    *
!    * @return The current "UI" property
!    */
    public ButtonUI getUI()
    {
      return (ButtonUI) ui;
    }
!   
!   /**
!    * Set the "UI" property to a class constructed, via the {@link
!    * UIManager}, from the current look and feel. This should be overridden
!    * for each subclass of AbstractButton, to retrieve a suitable {@link
!    * ButtonUI} look and feel class.
!    */
    public void updateUI()
    {
    }
  
!   /**
!    * Returns the current time in milliseconds in which clicks gets coalesced
!    * into a single <code>ActionEvent</code>.
!    *
!    * @return the time in milliseconds
!    * 
!    * @since 1.4
!    */
!   public long getMultiClickThreshhold()
    {
!     return multiClickThreshhold;
    }
  
!   /**
!    * Sets the time in milliseconds in which clicks gets coalesced into a single
!    * <code>ActionEvent</code>.
!    *
!    * @param threshhold the time in milliseconds
!    * 
!    * @since 1.4
!    */
!   public void setMultiClickThreshhold(long threshhold)
    {
!     if (threshhold < 0)
!       throw new IllegalArgumentException();
  
!     multiClickThreshhold = threshhold;
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/AbstractCellEditor.java gcc-4.0.0/libjava/javax/swing/AbstractCellEditor.java
*** gcc-3.4.3/libjava/javax/swing/AbstractCellEditor.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/AbstractCellEditor.java	Wed Feb 16 20:02:18 2005
***************
*** 1,5 ****
  /* AbstractCellEditor.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractCellEditor.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing;
*** 40,45 ****
--- 40,46 ----
  
  import java.io.Serializable;
  import java.util.EventObject;
+ 
  import javax.swing.event.CellEditorListener;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.EventListenerList;
*************** import javax.swing.event.EventListenerLi
*** 52,77 ****
  public abstract class AbstractCellEditor
    implements CellEditor, Serializable
  {
!   static final long serialVersionUID = -1048006551406220959L;
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * listenerList
! 	 */
! 	protected EventListenerList listenerList;
! 
! 	/**
! 	 * changeEvent
! 	 */
! 	protected transient ChangeEvent changeEvent;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
  	/**
  	 * Constructor AbstractCellEditor
--- 53,69 ----
  public abstract class AbstractCellEditor
    implements CellEditor, Serializable
  {
!   private static final long serialVersionUID = -1048006551406220959L;
  
+   /**
+    * listenerList
+    */
+   protected EventListenerList listenerList;
  
!   /**
!    * changeEvent
!    */
!   protected transient ChangeEvent changeEvent;
  
  	/**
  	 * Constructor AbstractCellEditor
*************** public abstract class AbstractCellEditor
*** 80,90 ****
  		// TODO
  	} // AbstractCellEditor()
  
- 
- 	//-------------------------------------------------------------
- 	// Methods ----------------------------------------------------
- 	//-------------------------------------------------------------
- 
  	/**
  	 * isCellEditable
  	 * @param event TODO
--- 72,77 ----
*************** public abstract class AbstractCellEditor
*** 118,158 ****
  		// TODO
  	} // cancelCellEditing()
  
! 	/**
! 	 * addCellEditorListener
! 	 * @param listener TODO
! 	 */
! 	public void addCellEditorListener(CellEditorListener listener) {
! 		// TODO
! 	} // addCellEditorListener()
! 
! 	/**
! 	 * removeCellEditorListener
! 	 * @param listener TODO
! 	 */
! 	public void removeCellEditorListener(CellEditorListener listener) {
! 		// TODO
! 	} // removeCellEditorListener()
  
! 	/**
! 	 * fireEditingStopped
! 	 */
! 	protected void fireEditingStopped() {
! 		// TODO
! 	} // fireEditingStopped()
  
! 	/**
! 	 * fireEditingCanceled
! 	 */
! 	protected void fireEditingCanceled() {
! 		// TODO
! 	} // fireEditingCanceled()
  
! 	/**
! 	 * getCellEditorValue
! 	 * @returns Object
! 	 */
! 	public abstract Object getCellEditorValue();
  
  
! } // AbstractCellEditor
--- 105,163 ----
  		// TODO
  	} // cancelCellEditing()
  
!   /**
!    * addCellEditorListener
!    *
!    * @param listener The listener to add
!    */
!   public void addCellEditorListener (CellEditorListener listener)
!   {
!     listenerList.add (CellEditorListener.class, listener);
!   }
  
!   /**
!    * removeCellEditorListener
!    *
!    * @param listener The listener to remove
!    */
!   public void removeCellEditorListener (CellEditorListener listener)
!   {
!     listenerList.remove (CellEditorListener.class, listener);
!   }
! 	
!   /**
!    * getCellEditorListeners
!    *
!    * @since 1.4
!    */
!   public CellEditorListener[] getCellEditorListeners()
!   {
!     return (CellEditorListener[]) listenerList.getListeners (CellEditorListener.class);
!   }
  
!   /**
!    * fireEditingStopped
!    */
!   protected void fireEditingStopped()
!   {
!     CellEditorListener[] listeners = getCellEditorListeners();
  
!     for (int index = 0; index < listeners.length; index++)
!       {
! 	listeners [index].editingStopped (changeEvent);
!       }
!   }
  
+   /**
+    * fireEditingCanceled
+    */
+   protected void fireEditingCanceled()
+   {
+     CellEditorListener[] listeners = getCellEditorListeners();
  
!     for (int index = 0; index < listeners.length; index++)
!       {
! 	listeners [index].editingCanceled (changeEvent);
!       }
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/AbstractListModel.java gcc-4.0.0/libjava/javax/swing/AbstractListModel.java
*** gcc-3.4.3/libjava/javax/swing/AbstractListModel.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/AbstractListModel.java	Wed Feb 16 20:02:18 2005
***************
*** 1,5 ****
  /* AbstractListModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractListModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,192 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.EventListener;
  import javax.swing.event.EventListenerList;
- import javax.swing.event.ListDataListener;
  import javax.swing.event.ListDataEvent;
  
  /**
   * AbstractListModel
!  * A2uthor	Ronald Veldema
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public abstract class AbstractListModel
!   implements ListModel, Serializable
  {
!   static final long serialVersionUID = -3285184064379168730L;
  
!   /**
!    * listenerList
!    */
!   protected EventListenerList listenerList = new EventListenerList ();
!   
!   /**
!    * Constructor AbstractListModel
!    */
!   public AbstractListModel ()
    {
    }
  
    /**
!    * addListDataListener
!    * @param listener TODO
     */
!   public void addListDataListener(ListDataListener listener) 
    {
!     listenerList.add (ListDataListener.class, listener);
    }
  
    /**
!    * removeListDataListener
!    * @param listener TODO
     */
    public void removeListDataListener(ListDataListener listener)
    {
!     listenerList.remove (ListDataListener.class, listener);
    }
  
    /**
!    * fireContentsChanged
!    * @param source TODO
!    * @param startIndex TODO
!    * @param endIndex TODO
     */
!   protected void fireContentsChanged(Object source, int startIndex, int endIndex)
    {
!     // Variables
!     ListDataEvent event;
!     ListDataListener[] listeners;
!     ListDataListener listener;
!     int index;
! 
!     // Create Event
!     event = new ListDataEvent(source, ListDataEvent.CONTENTS_CHANGED,
!     startIndex, endIndex);
! 
!     // Get Listeners
!     listeners = getListDataListeners ();
  
!     // Process Listeners
!     for (index = 0; index < listeners.length; index++)
!       {
!         listener = (ListDataListener) listeners[index];
!         listener.contentsChanged(event);
!       }
    }
  
    /**
!    * fireIntervalAdded
!    * @param source TODO
!    * @param startIndex TODO
!    * @param endIndex TODO
     */
!   protected void fireIntervalAdded (Object source, int startIndex, int endIndex)
    {
!     // Variables
!     ListDataEvent event;
!     ListDataListener[] listeners;
!     ListDataListener listener;
!     int index;
! 
!     // Create Event
!     event = new ListDataEvent (source, ListDataEvent.INTERVAL_ADDED, startIndex,
!                                endIndex);
! 
!     // Get Listeners
!     listeners = getListDataListeners ();
  
!     // Process Listeners
!     for (index = 0; index < listeners.length; index++)
!       {
!         listener = listeners [index];
!         listener.intervalAdded (event);
!       }
    }
  
    /**
!    * fireIntervalRemoved
!    * @param source TODO
!    * @param startIndex TODO
!    * @param endIndex TODO
     */
!   protected void fireIntervalRemoved (Object source, int startIndex,
                                       int endIndex)
    {
!     // Variables
!     ListDataEvent event;
!     ListDataListener[] listeners;
!     ListDataListener listener;
!     int index;
! 
!     // Create Event
!     event = new ListDataEvent (source, ListDataEvent.INTERVAL_REMOVED,
!                                startIndex, endIndex);
! 
!     // Get Listeners
!     listeners = getListDataListeners ();
  
!     // Process Listeners
!     for (index = 0; index < listeners.length; index++)
!       {
!         listener = listeners [index];
!         listener.intervalRemoved (event);
!       }
    }
  
    /**
!    * getListeners
!    * @param listenerType TODO
!    * @returns EventListener[]
     */
!   public EventListener[] getListeners (Class listenerType)
    {
!     return listenerList.getListeners (listenerType);
    }
  
    /**
!    * getListDataListeners
     */
!   public ListDataListener[] getListDataListeners ()
    {
!     return (ListDataListener[]) getListeners (ListDataListener.class);
    }
  }
--- 35,179 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.EventListener;
+ 
  import javax.swing.event.EventListenerList;
  import javax.swing.event.ListDataEvent;
+ import javax.swing.event.ListDataListener;
  
  /**
   * AbstractListModel
!  *
!  * @author Ronald Veldema
!  * @author Andrew Selkirk
!  * @version 1.0
   */
! public abstract class AbstractListModel implements ListModel, Serializable
  {
!   private static final long serialVersionUID = -3285184064379168730L;
  
!   /** List of ListDataListeners called for each change to the list. */
!   protected EventListenerList listenerList;
! 
!   public AbstractListModel()
    {
+     listenerList = new EventListenerList();
    }
  
    /**
!    * Add a listener object to this model. The listener will be called
!    * any time the set of elements in the model is changed.
!    *
!    * @param listener The listener to add
     */
!   public void addListDataListener(ListDataListener listener)
    {
!     listenerList.add(ListDataListener.class, listener);
    }
  
    /**
!    * Add a listener object to this model. The listener will no longer be
!    * called when the set of elements in the model is changed.
!    *
!    * @param listener The listener to remove
     */
    public void removeListDataListener(ListDataListener listener)
    {
!     listenerList.remove(ListDataListener.class, listener);
    }
  
    /**
!    * Call {@link ListDataListener#contentsChanged} on each element of the
!    * {@link listenerList} which is a {@link ListDataListener}. The event
!    * fired has type {@ListDataEvent.CONTENTS_CHANGED} and represents a
!    * change to the data elements in the range [startIndex, endIndex]
!    * inclusive.
!    *
!    * @param source The source of the change, typically <code>this</code>
!    * @param startIndex The index of the first element which changed
!    * @param endIndex The index of the last element which changed
     */
!   protected void fireContentsChanged(Object source, int startIndex,
!                                      int endIndex)
    {
!     ListDataEvent event = new ListDataEvent(source, ListDataEvent.CONTENTS_CHANGED,
!                                             startIndex, endIndex);
!     ListDataListener[] listeners = getListDataListeners();
  
!     for (int index = 0; index < listeners.length; index++)
!       listeners[index].contentsChanged(event);
    }
  
    /**
!    * Call {@link ListDataListener#intervalAdded} on each element of the
!    * {@link listenerList} which is a {@link ListDataListener}. The event
!    * fired has type {@ListDataEvent.INTERVAL_ADDED} and represents an
!    * addition of the data elements in the range [startIndex, endIndex]
!    * inclusive.
!    *
!    * @param source The source of the change, typically <code>this</code>
!    * @param startIndex The index of the first new element
!    * @param endIndex The index of the last new element
     */
!   protected void fireIntervalAdded(Object source, int startIndex, int endIndex)
    {
!     ListDataEvent event =
!       new ListDataEvent(source, ListDataEvent.INTERVAL_ADDED,
! 			startIndex, endIndex);
!     ListDataListener[] listeners = getListDataListeners();
  
!     for (int index = 0; index < listeners.length; index++)
!       listeners[index].intervalAdded(event);
    }
  
    /**
!    * Call {@link ListDataListener#intervalRemoved} on each element of the
!    * {@link listenerList} which is a {@link ListDataListener}. The event
!    * fired has type {@ListDataEvent.INTERVAL_REMOVED} and represents a
!    * removal of the data elements in the range [startIndex, endIndex]
!    * inclusive.
!    *
!    * @param source The source of the change, typically <code>this</code>
!    * @param startIndex The index of the first element removed
!    * @param endIndex The index of the last element removed
     */
!   protected void fireIntervalRemoved(Object source, int startIndex,
                                       int endIndex)
    {
!     ListDataEvent event =
!       new ListDataEvent(source, ListDataEvent.INTERVAL_REMOVED,
! 			startIndex, endIndex);
!     ListDataListener[] listeners = getListDataListeners();
  
!     for (int index = 0; index < listeners.length; index++)
!       listeners[index].intervalRemoved(event);
    }
  
    /**
!    * Return the subset of {@link EventListener} objects found in this
!    * object's {@link listenerList} which are elements of the specified
!    * type.
!    *
!    * @param listenerType The type of listeners to select
!    *
!    * @return The set of listeners of the specified type
     */
!   public EventListener[] getListeners(Class listenerType)
    {
!     return listenerList.getListeners(listenerType);
    }
  
    /**
!    * A synonym for <code>getListeners(ListDataListener.class)</code>.
!    *
!    * @return The set of ListDataListeners found in the {@link listenerList}
     */
!   public ListDataListener[] getListDataListeners()
    {
!     return (ListDataListener[]) getListeners(ListDataListener.class);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/AbstractSet.java gcc-4.0.0/libjava/javax/swing/AbstractSet.java
*** gcc-3.4.3/libjava/javax/swing/AbstractSet.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/AbstractSet.java	Thu Jan  1 00:00:00 1970
***************
*** 1,103 ****
- /* AbstractSet.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.swing;
- 
- import java.util.AbstractCollection;
- import java.util.Collection;
- import java.util.Set;
- 
- /**
-  * Empty
-  *
-  * @author Ronald Veldema (rveldema@cs.vu.nl)
-  */
- public abstract class AbstractSet extends AbstractCollection implements Set
- {
- 	boolean contained(Object []a1, Object b)
- 	{
- 		for (int i=0;i<a1.length;i++)
- 		{
- 			if (a1[i] == b)
- 				return true;
- 		}
- 		return false;
- 	}
- 
- 	public boolean equals(Object o)
- 	{
- 		if (! (o instanceof AbstractSet))
- 			return false;
- 		AbstractSet s = (AbstractSet) o;
- 
- 		if (s == this)
- 			return true;
- 
- 		if (s.size() != size())
- 			return false;
- 
- 		Object[] a1 = s.toArray();
- 		Object[] a2 = toArray();
- 
- 		for (int i=0;i<a1.length;i++)
- 		{
- 			if (! contained(a2, a1[i]))
- 				return false;
- 		}
- 		return true;
- 	}
- 
- 	public int hashCode()
- 	{
- 		int hash = 0;
- 		Object[] a1 = toArray();
- 
- 		if (a1 == null)
- 			return 0;
- 
- 		for (int i=0; i<a1.length; i++)
- 		{
- 			hash += a1[i].hashCode();
- 		}
- 		return hash;
- 	}
- 
- 	public boolean removeAll(Collection c)
- 	{
- 		return false;
- 	}
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/AbstractSpinnerModel.java gcc-4.0.0/libjava/javax/swing/AbstractSpinnerModel.java
*** gcc-3.4.3/libjava/javax/swing/AbstractSpinnerModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/AbstractSpinnerModel.java	Tue Nov 30 23:58:52 2004
***************
*** 0 ****
--- 1,117 ----
+ /* AbstractSpinnerModel.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.util.EventListener;
+ 
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ import javax.swing.event.EventListenerList;
+ 
+ /**
+  * AbstractSpinnerModel
+  * @author	Ka-Hing Cheung
+  * @version	1.0
+  */
+ public abstract class AbstractSpinnerModel implements SpinnerModel
+ {
+   private ChangeEvent changeEvent = new ChangeEvent(this);
+   
+   protected EventListenerList listenerList = new EventListenerList();
+ 
+   /**
+    * Creates an <code>AbstractSpinnerModel</code>.
+    */
+   public AbstractSpinnerModel()
+   {
+   }
+ 
+   /**
+    * Adds a <code>ChangeListener</code>.
+    *
+    * @param listener the listener to add
+    */
+   public void addChangeListener(ChangeListener listener)
+   {
+     listenerList.add(ChangeListener.class, listener);
+   }
+ 
+   /**
+    * Gets all the listeners that are of a particular type.
+    *
+    * @param c the type of listener
+    * @return the listeners that are of the specific type
+    */
+   public EventListener[] getListeners(Class c)
+   {
+     return listenerList.getListeners(c);
+   }
+ 
+   /**
+    * Gets all the <code>ChangeListener</code>s.
+    *
+    * @return all the <code>ChangeListener</code>s
+    */
+   public ChangeListener[] getChangeListeners()
+   {
+     return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
+   }
+ 
+   /**
+    * Remove a particular listener.
+    *
+    * @param listener the listener to remove
+    */
+   public void removeChangeListener(ChangeListener listener)
+   {
+     listenerList.remove(ChangeListener.class, listener);
+   }
+ 
+   /**
+    * Fires a <code>ChangeEvent</code> to all the <code>ChangeListener</code>s
+    * added to this model
+    */
+   protected void fireStateChanged()
+   {
+     ChangeListener[] listeners = getChangeListeners();
+ 
+     for(int i = 0; i < listeners.length; ++i)
+       listeners[i].stateChanged(changeEvent);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ActionMap.java gcc-4.0.0/libjava/javax/swing/ActionMap.java
*** gcc-3.4.3/libjava/javax/swing/ActionMap.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/ActionMap.java	Wed Feb 16 20:02:18 2005
*************** import java.io.ObjectInputStream;
*** 42,239 ****
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.Arrays;
- import java.util.Collection;
  import java.util.HashMap;
  import java.util.HashSet;
- import java.util.Iterator;
  import java.util.Map;
  import java.util.Set;
  
  /**
!  * ActionMap
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class ActionMap implements Serializable
  {
!   static final long serialVersionUID = -6277518704513986346L;
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * actionMap
! 	 */
! 	private Map actionMap = new HashMap();
! 
! 	/**
! 	 * parent
! 	 */
! 	private ActionMap parent = null;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor ActionMap
! 	 */
! 	public ActionMap() {
! 	} // ActionMap()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * get
! 	 * @param key TODO
! 	 * @returns Action
! 	 */
! 	public Action get(Object key) {
! 
! 		// Variables
! 		Object	result;
! 
! 		// Check Local store
! 		result = actionMap.get(key);
! 
! 		// Check Parent
! 		if (result == null) {
! 			result = parent.get(key);
! 		} // if
! 
! 		return (Action) result;
! 
! 	} // get()
! 
! 	/**
! 	 * put
! 	 * @param key TODO
! 	 * @param action TODO
! 	 */
! 	public void put(Object key, Action action) {
! 		if (action == null) {
! 			actionMap.remove(key);
! 		} else {
! 			actionMap.put(key, action);
! 		} // if
! 	} // put()
! 
! 	/**
! 	 * remove
! 	 * @param key TODO
! 	 */
! 	public void remove(Object key) {
! 		actionMap.remove(key);
! 	} // remove()
! 
! 	/**
! 	 * getParent
! 	 * @returns ActionMap
! 	 */
! 	public ActionMap getParent() {
! 		return parent;
! 	} // getParent()
! 
! 	/**
! 	 * setParent
! 	 * @param parentMap TODO
! 	 */
! 	public void setParent(ActionMap parentMap) {
! 		parent = parentMap;
! 	} // setParent()
! 
! 	/**
! 	 * size
! 	 * @returns int
! 	 */
! 	public int size() {
! 		return actionMap.size();
! 	} // size()
! 
! 	/**
! 	 * clear
! 	 */
! 	public void clear() {
! 		actionMap.clear();
! 	} // clear()
  
! 	/**
! 	 * keys
! 	 * @returns Object[]
! 	 */
! 	public Object[] keys() {
! 		return convertSet(actionMap.keySet());
! 	} // keys()
  
! 	/**
! 	 * allKeys
! 	 * @returns Object[]
! 	 */
! 	public Object[] allKeys() {
  
! 		// Variables
! 		Set			set;
  
! 		// Initialize
! 		set = new HashSet();
  
! 		// Get Key Sets
! 		if (parent != null) {
! 			set.addAll(Arrays.asList(parent.allKeys()));
! 		} // if
! 		set.addAll(actionMap.keySet());
  
! 		return convertSet(set);
  
! 	} // allKeys()
  
! 	private Object[] convertSet(Set set) {
  
! 		// Variables
! 		int			index;
! 		Iterator	iterator;
! 		Object[]	keys;
  
! 		// Create Final array
! 		keys = new Object[set.size()];
! 		iterator = set.iterator();
! 		index = 0;
! 		while (iterator.hasNext()) {
! 			keys[index++] = iterator.next();
! 		} // while
  
! 		return keys;
  
! 	} // convertSet()
  
  
! 	//-------------------------------------------------------------
! 	// Interface: Serializable ------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream value0) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * readObject
! 	 * @param stream TODO
! 	 * @exception ClassNotFoundException TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void readObject(ObjectInputStream value0) throws ClassNotFoundException, IOException {
! 		// TODO
! 	} // readObject()
  
  
! } // ActionMap
--- 42,210 ----
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.Arrays;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Set;
  
+ 
  /**
!  * @author Andrew Selkirk
!  * @author Michael Koch
   */
! public class ActionMap
!   implements Serializable
  {
!   private static final long serialVersionUID = -6277518704513986346L;
  
!   /**
!    * actionMap
!    */
!   private Map actionMap = new HashMap();
  
!   /**
!    * parent
!    */
!   private ActionMap parent;
  
!   /**
!    * Creates a new <code>ActionMap</code> instance.
!    */
!   public ActionMap()
!   {
!   }
  
!   /**
!    * Returns an action associated with an object.
!    *
!    * @param key the key of the enty
!    *
!    * @return the action associated with key, may be null
!    */
!   public Action get(Object key)
!   {
!     Object result = actionMap.get(key);
  
!     if (result == null && parent != null)
!       result = parent.get(key);
  
!     return (Action) result;
!   }
  
!   /**
!    * Puts a new <code>Action</code> into the <code>ActionMap</code>.
!    * If action is null an existing entry will be removed.
!    *
!    * @param key the key for the entry
!    * @param action the action.
!    */
!   public void put(Object key, Action action)
!   {
!     if (action == null)
!       actionMap.remove(key);
!     else
!       actionMap.put(key, action);
!   }
  
!   /**
!    * Remove an entry from the <code>ActionMap</code>.
!    *
!    * @param key the key of the entry to remove
!    */
!   public void remove(Object key)
!   {
!     actionMap.remove(key);
!   }
  
!   /**
!    * Returns the parent of this <code>ActionMap</code>.
!    *
!    * @return the parent, may be null.
!    */
!   public ActionMap getParent()
!   {
!     return parent;
!   }
  
!   /**
!    * Sets a parent for this <code>ActionMap</code>.
!    *
!    * @param parentMap the new parent
!    */
!   public void setParent(ActionMap parentMap)
!   {
!     parent = parentMap;
!   }
  
!   /**
!    * Returns the number of entries in this <code>ActionMap</code>.
!    *
!    * @return the number of entries
!    */
!   public int size()
!   {
!     return actionMap.size();
!   }
  
!   /**
!    * Clears the <code>ActionMap</code>.
!    */
!   public void clear()
!   {
!     actionMap.clear();
!   }
  
+   /**
+    * Returns all keys of entries in this <code>ActionMap</code>.
+    *
+    * @return an array of keys
+    */
+   public Object[] keys()
+   {
+     return actionMap.keySet().toArray();
+   }
  
!   /**
!    * Returns all keys of entries in this <code>ActionMap</code>
!    * and all its parents.
!    *
!    * @return an array of keys
!    */
!   public Object[] allKeys()
!   {
!     Set set = new HashSet();
  
!     if (parent != null)
!       set.addAll(Arrays.asList(parent.allKeys()));
  
!     set.addAll(actionMap.keySet());
!     return set.toArray();
!   }
  
+   /**
+    * writeObject
+    *
+    * @param stream the stream to write to
+    *
+    * @exception IOException If an error occurs
+    */
+   private void writeObject(ObjectOutputStream stream)
+     throws IOException
+   {
+     // TODO
+   }
  
!   /**
!    * readObject
!    *
!    * @param stream the stream to read from
!    *
!    * @exception ClassNotFoundException If the serialized class cannot be found
!    * @exception IOException If an error occurs
!    */
!   private void readObject(ObjectInputStream stream)
!     throws ClassNotFoundException, IOException
!   {
!     // TODO
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/BorderFactory.java gcc-4.0.0/libjava/javax/swing/BorderFactory.java
*** gcc-3.4.3/libjava/javax/swing/BorderFactory.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/BorderFactory.java	Tue Nov 30 23:58:52 2004
***************
*** 1,5 ****
! /* BorderFactory.java
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BorderFactory.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing;
*** 40,45 ****
--- 40,46 ----
  
  import java.awt.Color;
  import java.awt.Font;
+ 
  import javax.swing.border.BevelBorder;
  import javax.swing.border.Border;
  import javax.swing.border.CompoundBorder;
*************** import javax.swing.border.TitledBorder;
*** 51,56 ****
--- 52,62 ----
  
  public class BorderFactory
  {
+   private BorderFactory()
+   {
+     // Do nothing.
+   }
+   
    /**
     * Creates a line border withe the specified color.
     *
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/BoundedRangeModel.java gcc-4.0.0/libjava/javax/swing/BoundedRangeModel.java
*** gcc-3.4.3/libjava/javax/swing/BoundedRangeModel.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/BoundedRangeModel.java	Wed Feb 16 20:02:18 2005
*************** this exception to your version of the li
*** 35,137 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import javax.swing.event.ChangeListener;
  
  /**
!  * BoundedRangeModel
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public interface BoundedRangeModel {
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * getValue
! 	 * @returns int
! 	 */
! 	int getValue();
! 
! 	/**
! 	 * setValue
! 	 * @param value TODO
! 	 */
! 	void setValue(int value);
! 
! 	/**
! 	 * getMinimum
! 	 * @returns int
! 	 */
! 	int getMinimum();
  
! 	/**
! 	 * setMinimum
! 	 * @param minimum TODO
! 	 */
! 	void setMinimum(int minimum);
  
! 	/**
! 	 * getMaximum
! 	 * @returns int
! 	 */
! 	int getMaximum();
  
! 	/**
! 	 * setMaximum
! 	 * @param maximum TODO
! 	 */
! 	void setMaximum(int maximum);
  
! 	/**
! 	 * getValueIsAdjusting
! 	 * @returns boolean
! 	 */
! 	boolean getValueIsAdjusting();
  
! 	/**
! 	 * setValueIsAdjusting
! 	 * @param adjusting TODO
! 	 */
! 	void setValueIsAdjusting(boolean adjusting);
  
! 	/**
! 	 * getExtent
! 	 * @returns int
! 	 */
! 	int getExtent();
  
! 	/**
! 	 * setExtent
! 	 * @param extent TODO
! 	 */
! 	void setExtent(int extent);
  
! 	/**
! 	 * setRangeProperties
! 	 * @param value TODO
! 	 * @param extent TODO
! 	 * @param min TODO
! 	 * @param max TODO
! 	 * @param adjusting TODO
! 	 */
! 	void setRangeProperties(int value, int extent, int min, 
! 					int max, boolean adjusting);
  
! 	/**
! 	 * addChangeListener
! 	 * @param listener TODO
! 	 */
! 	void addChangeListener(ChangeListener listener);
  
! 	/**
! 	 * removeChangeListener
! 	 * @param listener TODO
! 	 */
! 	void removeChangeListener(ChangeListener listener);
  
  
! } // BoundedRangeModel
--- 35,168 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import javax.swing.event.ChangeListener;
  
  /**
!  * @author Andrew Selkirk
   */
! public interface BoundedRangeModel
! {
!   /**
!    * getValue
!    * 
!    * @return int
!    *
!    * @see #setValue(int)
!    */
!   int getValue();
  
!   /**
!    * setValue
!    * 
!    * @param value the value
!    *
!    * @see #getValue()
!    */
!   void setValue(int value);
  
!   /**
!    * getMinimum
!    * 
!    * @return int
!    *
!    * @see #setMinimum(int)
!    */
!   int getMinimum();
  
!   /**
!    * setMinimum
!    * 
!    * @param minimum the minimum value
!    *
!    * @see #getMinimum()
!    */
!   void setMinimum(int minimum);
  
!   /**
!    * getMaximum
!    * 
!    * @return int
!    *
!    * @see #setMaximum(int)
!    */
!   int getMaximum();
  
!   /**
!    * setMaximum
!    * 
!    * @param maximum the maximum value
!    *
!    * @see #getMaximum()
!    */
!   void setMaximum(int maximum);
  
!   /**
!    * Returns the value of the <code>valueIsAdjusting</code> property.
!    * 
!    * @return <code>true</code> if value is adjusting,
!    * otherwise <code>false</code>
!    *
!    * @see setValueIsAdjusting(boolean)
!    */
!   boolean getValueIsAdjusting();
  
!   /**
!    * setValueIsAdjusting
!    * 
!    * @param adjusting <code>true</code> if adjusting,
!    * <code>false</code> otherwise
!    *
!    * @see #getValueIsAdjusting()
!    */
!   void setValueIsAdjusting(boolean adjusting);
  
!   /**
!    * Returns the current extent.
!    *
!    * @return the extent
!    *
!    * @see #setExtent(int)
!    */
!   int getExtent();
  
!   /**
!    * setExtent
!    * 
!    * @param extent the extent
!    *
!    * @see #getExtent()
!    */
!   void setExtent(int extent);
  
!   /**
!    * setRangeProperties
!    * @param value the value
!    * @param extent the extent
!    * @param minnimum the minimum value
!    * @param maximum the maximum value
!    * @param adjusting TODO
!    */
!   void setRangeProperties(int value, int extent, int minimum, int maximum,
! 			  boolean adjusting);
  
+   /**
+    * Adds a <code>ChangeListener</code> to this object.
+    * 
+    * @param listener the listener to add
+    * 
+    * @see #removeChangeListener(javax.swing.event.ChangeListener)
+    */
+   void addChangeListener(ChangeListener listener);
  
!   /**
!    * Removes a <code>ChangeListener</code> from this object.
!    * 
!    * @param listener the listener to remove
!    *
!    * @see #addChangeListener(javax.swing.event.ChangeListener)
!    */
!   void removeChangeListener(ChangeListener listener);
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/Box.java gcc-4.0.0/libjava/javax/swing/Box.java
*** gcc-3.4.3/libjava/javax/swing/Box.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/Box.java	Tue Nov 30 23:58:52 2004
***************
*** 1,5 ****
  /* Box.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Box.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,55 ****
  
  package javax.swing;
  
  import javax.accessibility.Accessible;
  
  /**
!  * Needs some work I guess....
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public class Box extends JComponent implements Accessible
  {
!     Box(int a)
      {
-         setLayout(new BoxLayout(this, 
- 				a));	
      }
  }
--- 38,284 ----
  
  package javax.swing;
  
+ import java.awt.AWTError;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.LayoutManager;
+ 
  import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
  
  /**
!  * A component that uses a {@link BoxLayout} as Layout Manager.
!  *
!  * In addition to that, this class provides a set of static methods for
!  * creating some filler components ('struts' and 'glue') for use in
!  * containers that are laid out using BoxLayout.
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public class Box extends JComponent implements Accessible
  {
!   private static final long serialVersionUID = 1525417495883046342L;
!   
!   // FIXME: disable to make libjava compile; visibility rules are broken
!   protected class AccessibleBox // extends Container.AccessibleAWTContainer
!   {
!     private static final long serialVersionUID = -7775079816389931944L;
!   
!     protected AccessibleBox()
      {
      }
+     
+     public AccessibleRole getAccessibleRole()
+     {
+       return null;
+     }
+   }
+ 
+   /**
+    * A component that servers as a filler in BoxLayout controlled containers.
+    */
+   public static class Filler extends JComponent implements Accessible
+   {
+     private static final long serialVersionUID = -1204263191910183998L;
+   
+     // FIXME: disable to make libjava compile; visibility rules are broken
+     protected class AccessibleBoxFiller // extends Component.AccessibleAWTComponent
+     {
+       private static final long serialVersionUID = 164963348357479321L;
+       
+       protected AccessibleBoxFiller()
+       {
+       }
+       
+       public AccessibleRole getAccessibleRole()
+       {
+         return null;
+       }
+     }
+     
+     protected AccessibleContext accessibleContext;
+     
+     private transient Dimension min, pref, max;
+     
+     /**
+      * Creates a new instance of Filler.
+      *
+      * @param min the minimum size of the filler.
+      * @param pref the preferred size of the filler.
+      * @param max the maximum size of the filler.
+      */
+     public Filler(Dimension min, Dimension pref, Dimension max)
+     {
+       changeShape(min, pref, max);
+     }
+     
+     /**
+      * Changes the dimensions of this Filler.
+      *
+      * @param min the new minimum size of the filler.
+      * @param pref the new preferred size of the filler.
+      * @param max the new maximum size of the filler.
+      */
+     public void changeShape(Dimension min, Dimension pref, Dimension max)
+     {
+       this.min = min;
+       this.pref = pref;
+       this.max = max;    
+     }
+     
+     public AccessibleContext getAccessibleContext()
+     {
+       // FIXME: disable to make libjava compile; visibility rules are broken      
+       //      if (accessibleContext == null)
+       //        accessibleContext = new AccessibleBoxFiller();
+       return accessibleContext;
+     }
+     
+     /**
+      * Returns the maximum size of this Filler.
+      *
+      * @return the maximum size of this Filler.
+      */
+     public Dimension getMaximumSize()
+     {
+       return max;
+     }
+     
+     /**
+      * Returns the minimum size of this Filler.
+      *
+      * @return the minimum size of this Filler.
+      */
+     public Dimension getMinimumSize()
+     {
+       return min;
+     }
+     
+     /**
+      * Returns the preferred size of this Filler.
+      *
+      * @return the preferred size of this Filler.
+      */
+     public Dimension getPreferredSize()
+     {
+       return pref;
+     }
+   }
+   
+   /**
+    * Creates a new Box component, that lays out its children according
+    * to the <code>axis</code> parameter.
+    *
+    * @param axis the orientation of the BoxLayout.
+    *
+    * @see BoxLayout#X_AXIS
+    * @see BoxLayout#Y_AXIS
+    * @see BoxLayout#LINE_AXIS
+    * @see BoxLayout#PAGE_AXIS
+    */
+   public Box(int axis)
+   {
+     super.setLayout(new BoxLayout(this, axis));	
+   }
+   
+   /**
+    * Creates a filler component which acts as glue between components.
+    * It does not take space unless some extra space is available. If extra
+    * space is available, this component can expand in both X and Y directions.
+    *
+    * @return a glue-like filler component.
+    */
+   public static Component createGlue()
+   {
+     Filler glue = new Filler(new Dimension(0,0), new Dimension(0,0),
+                              new Dimension(Integer.MAX_VALUE,Integer.MAX_VALUE)
+                              );
+     return glue;
+   }
+   
+   public static Box createHorizontalBox()
+   {
+     return new Box(BoxLayout.X_AXIS);
+   }
+   
+   /**
+    * Creates a filler component which acts as glue between components.
+    * It does not take space unless some extra space is available. If extra
+    * space is available, this component can expand in the X direction.
+    *
+    * @return a glue-like filler component.
+    */
+   public static Component createHorizontalGlue()
+   {
+     return createGlue();
+   }
+   
+   /**
+    * Creates a filler component which acts as strut between components.
+    * It will fill exactly the specified horizontal size.
+    *
+    * @param width the width of this strut in pixels.
+    *
+    * @return a strut-like filler component.
+    */
+   public static Component createHorizontalStrut(int width)
+   {
+     Filler strut = new Filler(new Dimension(width, 0),
+                               new Dimension(width, 0),
+                               new Dimension(width, Integer.MAX_VALUE));
+     return strut;
+   }
+   
+   public static Component createRigidArea(Dimension d)
+   {
+     return new Filler(d, d, d);
+   }
+   
+   public static Box createVerticalBox()
+   {
+     return new Box(BoxLayout.Y_AXIS);
+   }
+   
+   /**
+    * Creates a filler component which acts as glue between components.
+    * It does not take space unless some extra space is available. If extra
+    * space is available, this component can expand in the Y direction.
+    *
+    * @return a glue-like filler component.
+    */
+   public static Component createVerticalGlue()
+   {
+     return createGlue();
+   }
+   
+   /**
+    * Creates a filler component which acts as strut between components.
+    * It will fill exactly the specified vertical size.
+    *
+    * @param height the height of this strut in pixels.
+    *
+    * @return a strut-like filler component.
+    */
+   public static Component createVerticalStrut(int height)
+   {
+     Filler strut = new Filler(new Dimension(0, height),
+                               new Dimension(0, height),
+                               new Dimension(Integer.MAX_VALUE, height));
+     return strut;
+   }
+   
+   public void setLayout(LayoutManager l)
+   {
+     throw new AWTError("Not allowed to set layout managers for boxes.");
+   }
+   
+   public AccessibleContext getAccessibleContext()
+   {
+     //     if (accessibleContext == null)
+     //       accessibleContext = new AccessibleBox();
+     return accessibleContext;
+   }
+   
+   
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/BoxLayout.java gcc-4.0.0/libjava/javax/swing/BoxLayout.java
*** gcc-3.4.3/libjava/javax/swing/BoxLayout.java	Mon Nov 24 16:55:43 2003
--- gcc-4.0.0/libjava/javax/swing/BoxLayout.java	Thu Sep  2 05:10:18 2004
*************** import java.awt.Component;
*** 42,56 ****
  import java.awt.ComponentOrientation;
  import java.awt.Container;
  import java.awt.Dimension;
- import java.awt.GridLayout;
  import java.awt.LayoutManager2;
  import java.io.Serializable;
  
- 
  /**
   * A layout for swing components.
-  * This implementation delegates its methods to
-  * java.awt.GridLayout to do its work.
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
--- 42,52 ----
*************** public class BoxLayout implements Layout
*** 87,97 ****
    private Container container;
    
    /*
-    * Internal layout.
-    */
-   private GridLayout grid;
- 
-   /*
     * Current type of component layouting. Defaults to X_AXIS.
     */
    private int way = X_AXIS;
--- 83,88 ----
*************** public class BoxLayout implements Layout
*** 108,182 ****
    {
      int width = 0;
      int height = 0;
-     ComponentOrientation orientation = container.getComponentOrientation();
- 
      this.container = container;
      this.way = way;
- 
-     switch (way)
-       {
-       case X_AXIS:
- 	width = 1;
- 	break;
-       case Y_AXIS:
- 	height = 1;
- 	break;
-       case LINE_AXIS:
- 	if (orientation.isHorizontal())
-           height = 1;
- 	else
- 	  width = 1;
- 	break;
-       case PAGE_AXIS:
- 	if (!orientation.isHorizontal())
-           height = 1;
- 	else
- 	  width = 1;
- 	break;
-       default:
- 	throw new AWTError("Invalid value for way");
-       }
- 
-     grid = new GridLayout(width, height);
    }
  
    /**
!    * Adds a component to the layout.
     *
     * @param name The name of the component to add.
     * @param component the component to add to the layout.
     */
    public void addLayoutComponent(String name, Component component)
    {
-     if (way == X_AXIS
-         || (way == LINE_AXIS
-             && component.getComponentOrientation().isHorizontal())
-         || (way == PAGE_AXIS
-             && !component.getComponentOrientation().isHorizontal()))
-       grid.setColumns(grid.getColumns() + 1);
-     else
-       grid.setRows(grid.getRows() + 1);
    }
  
    /**
!    * Removes a component from the layout.
     *
     * @param component The component to remove from the layout.
     */
    public void removeLayoutComponent(Component component)
    {
!     grid.removeLayoutComponent(component);
  
!     if (way == X_AXIS
!         || (way == LINE_AXIS
!             && component.getComponentOrientation().isHorizontal())
!         || (way == PAGE_AXIS
!             && !component.getComponentOrientation().isHorizontal()))
!       grid.setColumns(grid.getColumns() - 1);
!     else
!       grid.setRows(grid.getRows() - 1);
    }
  
    /**
     * Returns the preferred size of the layout.
     *
--- 99,139 ----
    {
      int width = 0;
      int height = 0;
      this.container = container;
      this.way = way;
    }
  
    /**
!    * Adds a component to the layout. Not used in BoxLayout.
     *
     * @param name The name of the component to add.
     * @param component the component to add to the layout.
     */
    public void addLayoutComponent(String name, Component component)
    {
    }
  
    /**
!    * Removes a component from the layout. Not used in BoxLayout.
     *
     * @param component The component to remove from the layout.
     */
    public void removeLayoutComponent(Component component)
    {
!   }
  
!   private boolean isHorizontalIn(Container parent)
!   {
!     ComponentOrientation orientation = parent.getComponentOrientation();
!     return this.way == X_AXIS 
!       || (this.way == LINE_AXIS 
!           && orientation.isHorizontal())
!       || (this.way == PAGE_AXIS
!           && (!orientation.isHorizontal()));
    }
  
+   
+ 
    /**
     * Returns the preferred size of the layout.
     *
*************** public class BoxLayout implements Layout
*** 188,195 ****
    {
      if (parent != container)
        throw new AWTError("invalid parent");
      
!     return grid.preferredLayoutSize(parent);
    }
  
    /**
--- 145,182 ----
    {
      if (parent != container)
        throw new AWTError("invalid parent");
+ 
+     int x = 0;
+     int y = 0;
+ 
+     Component[] children = parent.getComponents();
+ 
+     if (isHorizontalIn(parent))
+       {        
+         // sum up preferred widths of components, find maximum of preferred
+         // heights
+         for (int index = 0; index < children.length; index++)
+           {
+             Component comp = children[index];
+             Dimension sz = comp.getPreferredSize();
+             x += sz.width;
+             y = Math.max(y, sz.height);
+           }
+       } 
+     else 
+       {        
+         // sum up preferred heights of components, find maximum of
+         //  preferred widths
+         for (int index = 0; index < children.length; index++)
+           {
+             Component comp = children[index];
+             Dimension sz = comp.getPreferredSize();
+             y += sz.height;
+             x = Math.max(x, sz.width);
+           }
+       }
      
!     return new Dimension(x, y);
    }
  
    /**
*************** public class BoxLayout implements Layout
*** 203,210 ****
    {
      if (parent != container)
        throw new AWTError("invalid parent");
      
!     return grid.minimumLayoutSize(parent);
    }
  
    /**
--- 190,227 ----
    {
      if (parent != container)
        throw new AWTError("invalid parent");
+ 
+     int x = 0;
+     int y = 0;
+ 
+     Component[] children = parent.getComponents();
+ 
+     if (isHorizontalIn(parent))
+       {
+         // sum up preferred widths of components, find maximum of preferred
+         // heights
+         for (int index = 0; index < children.length; index++)
+           {
+             Component comp = children[index];
+             Dimension sz = comp.getMinimumSize();
+             x += sz.width;
+             y = Math.max(y, sz.height);
+           }
+       }
+     else
+       {
+         // sum up preferred heights of components, find maximum of
+         //  preferred widths
+         for (int index = 0; index < children.length; index++)
+           {
+             Component comp = children[index];
+             Dimension sz = comp.getMinimumSize();
+             y += sz.height;
+             x = Math.max(x, sz.width);
+           }
+       }
      
!     return new Dimension(x, y);
    }
  
    /**
*************** public class BoxLayout implements Layout
*** 216,234 ****
    {
      if (parent != container)
        throw new AWTError("invalid parent");
-     
-     grid.layoutContainer(parent);
-   }
  
    /**
!    * Adds a component to the layout.
     *
     * @param child The component to add to the layout.
     * @param constraints The constraints for the component in the layout.
     */
    public void addLayoutComponent(Component child, Object constraints)
    {
-     addLayoutComponent("", child);
    }
  
    /**
--- 233,301 ----
    {
      if (parent != container)
        throw new AWTError("invalid parent");
  
+     Dimension size = parent.getSize();
+ 
+     Component[] children = parent.getComponents();
+ 
+     if (isHorizontalIn(parent))
+       {
+         int x = 0;
+         for (int index = 0; index < children.length; index++)
+           {
+             Component comp = children[index];
+             Dimension sz = comp.getPreferredSize();
+             int width = sz.width;
+             int height = sz.height;
+             int cy = 0;
+             if (height > size.height)
+               {
+                 height = size.height;
+               }
+             else
+               {
+                 cy = (int) ((size.height - height) * comp.getAlignmentY());
+               }
+             
+             comp.setSize(width, height);
+             comp.setLocation(x, cy);
+             x = x + width;            
+           }
+       }
+     else
+       {
+         int y = 0;        
+         for (int index = 0; index < children.length; index++)
+           {
+             Component comp = children[index];
+             Dimension sz = comp.getPreferredSize();
+             int width = sz.width;
+             int height = sz.height;
+             int cx = 0;
+             if (width > size.width)
+               {
+                 width = size.width;
+               }
+             else
+               {
+                 cx = (int) ((size.width - width) * comp.getAlignmentX());
+               }
+             
+             comp.setSize(width, height);
+             comp.setLocation(cx, y);
+             y = y + height;            
+           }
+       }    
+   }
+   
    /**
!    * Adds a component to the layout. Not used in BoxLayout
     *
     * @param child The component to add to the layout.
     * @param constraints The constraints for the component in the layout.
     */
    public void addLayoutComponent(Component child, Object constraints)
    {
    }
  
    /**
*************** public class BoxLayout implements Layout
*** 284,290 ****
    {
      if (parent != container)
        throw new AWTError("invalid parent");
!     
!     return preferredLayoutSize(parent);
    }
  }
--- 351,387 ----
    {
      if (parent != container)
        throw new AWTError("invalid parent");
! 
!     int x = 0;
!     int y = 0;
! 
!     Component[] children = parent.getComponents();
! 
!     if (isHorizontalIn(parent))
!       {
!         
!         // sum up preferred widths of components, find maximum of preferred
!         // heights
!         for (int index = 0; index < children.length; index++)
!           {
!             Component comp = children[index];
!             Dimension sz = comp.getMaximumSize();
!             x += sz.width;
!             y = Math.max(y, sz.height);
!           }
!       }
!     else
!       {
!         // sum up preferred heights of components, find maximum of
!         //  preferred widths
!         for (int index = 0; index < children.length; index++)
!           {
!             Component comp = children[index];
!             Dimension sz = comp.getMaximumSize();
!             y += sz.height;
!             x = Math.max(x, sz.width);
!           }
!       } 
!     return new Dimension(x, y);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ButtonGroup.java gcc-4.0.0/libjava/javax/swing/ButtonGroup.java
*** gcc-3.4.3/libjava/javax/swing/ButtonGroup.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/ButtonGroup.java	Thu Sep  2 05:10:19 2004
***************
*** 1,4 ****
! /* ButtonGroup.java -- 
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* ButtonGroup.java --
     Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** this exception to your version of the li
*** 35,139 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- 
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.Enumeration;
  import java.util.Vector;
  
- public class ButtonGroup implements Serializable 
- {
-   static final long serialVersionUID = 4259076101881721375L;
- 
-     Vector v = new Vector();
-     ButtonModel sel;
-     
-     public ButtonGroup() {}
-     
-     public void add(AbstractButton b) 
-     {
- 	b.getModel().setGroup(this);
- 	v.addElement(b);
-     }
-     
-     public void remove(AbstractButton b)
-     {
- 	b.getModel().setGroup(null);
- 	v.removeElement(b);
-     }
- 
- 
-     public Enumeration getElements() {
-         return v.elements();
-     }
- 
-     public ButtonModel getSelection() {
-         return sel;
-     }
- 
-     AbstractButton FindButton(ButtonModel m)
-     {
- 	for (int i=0;i<v.size();i++)
- 	    {
- 	    AbstractButton a = (AbstractButton) v.get(i);
- 	    if (a.getModel()== m)
- 	    {
- 		return a;
- 	    }
- 	}
- 	return null;
-     }
  
!     public void setSelected(ButtonModel m, boolean b)
!     {
! 	if ((m == sel) &&
! 	    (b == true))
! 	    {
! 		// clicked on sam item twice.
! 		System.out.println("PRESSED TWICE:" + m + ", sel="+sel);
! 		return;
! 	    }	
! 	
! 	if (sel != null)
! 	    {
  
! 		System.out.println("DESELECTING: " + sel);
! 		sel.setSelected(!b);
  
! 		AbstractButton but = FindButton(sel);
! 		if (but != null)
! 		    {
! 			System.out.println("REPAINT-REQUIST: " + but.text);
! 			//but.revalidate();
! 			but.repaint();
! 		    }
! 	    }
! 	else
! 	    {
! 		System.out.println("NO SELECTION YET");
! 	    }
! 	
! 	sel = m;
!     }
!     
!     public boolean isSelected(ButtonModel m) 
!     {
!         return (m == sel);
!     }
  
!     public int getButtonCount() 
!     {
! 	return v.size();
!     }
  
! }
  
  
  
  
  
  
  
  
  
--- 35,179 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.Enumeration;
  import java.util.Vector;
  
  
! /**
!  * DOCUMENT ME!
!  */
! public class ButtonGroup implements Serializable
! {
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = 4259076101881721375L;
  
!   /** The buttons added to this button group. */
!   protected Vector buttons = new Vector();
  
!   /** The currently selected button model. */
!   ButtonModel sel;
  
!   /**
!    * Creates a new button group.
!    */
!   public ButtonGroup()
!   {
!   }
  
!   /**
!    * Adds a button to this group.
!    *
!    * @param b the button to add
!    */
!   public void add(AbstractButton b)
!   {
!     b.getModel().setGroup(this);
!     buttons.addElement(b);
!   }
  
+   /**
+    * Removed a given button from this group.
+    *
+    * @param b the button to remove
+    */
+   public void remove(AbstractButton b)
+   {
+     b.getModel().setGroup(null);
+     buttons.removeElement(b);
+   }
  
+   /**
+    * Returns the currently added buttons.
+    *
+    * @return <code>Enumeration</code> over all added buttons
+    */
+   public Enumeration getElements()
+   {
+     return buttons.elements();
+   }
  
+   /**
+    * Returns the currently selected button model.
+    *
+    * @return the currently selected button model, null if none was selected
+    *         yet
+    */
+   public ButtonModel getSelection()
+   {
+     return sel;
+   }
  
+   /**
+    * DOCUMENT ME!
+    *
+    * @param m DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   AbstractButton FindButton(ButtonModel m)
+   {
+     for (int i = 0; i < buttons.size(); i++)
+       {
+ 	AbstractButton a = (AbstractButton) buttons.get(i);
+ 	if (a.getModel() == m)
+ 	  return a;
+       }
+     return null;
+   }
  
+   /**
+    * Sets the currently selected button model. Only one button of a group can
+    * be selected at a time.
+    *
+    * @param m the model to select
+    * @param b true if this button is to be selected, false otherwise
+    */
+   public void setSelected(ButtonModel m, boolean b)
+   {
+     if ((sel != m || b) && (! b || sel == m))
+       return;
  
+     if (b && sel != m)
+       {
+ 	ButtonModel old = sel;
+ 	sel = m;
  
+ 	if (old != null)
+ 	  old.setSelected(false);
+ 	AbstractButton button = FindButton(old);
+ 	if (button != null)
+ 	  button.repaint();
+       }
+     else if (! b && sel == m)
+       m.setSelected(true);
+   }
  
+   /**
+    * Checks if the given <code>ButtonModel</code> is selected in this button
+    * group.
+    *
+    * @param m DOCUMENT ME!
+    *
+    * @return true of given <code>ButtonModel</code> is selected, false
+    *         otherwise
+    */
+   public boolean isSelected(ButtonModel m)
+   {
+     return m == sel;
+   }
  
+   /**
+    * Return the number of buttons in this button group.
+    *
+    * @return the number of buttons
+    *
+    * @since 1.3
+    */
+   public int getButtonCount()
+   {
+     return buttons.size();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ButtonModel.java gcc-4.0.0/libjava/javax/swing/ButtonModel.java
*** gcc-3.4.3/libjava/javax/swing/ButtonModel.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/ButtonModel.java	Tue Nov 30 23:58:52 2004
*************** this exception to your version of the li
*** 35,45 ****
--- 35,47 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.ItemSelectable;
  import java.awt.event.ActionListener;
  import java.awt.event.ItemListener;
+ 
  import javax.swing.event.ChangeListener;
  
  public interface ButtonModel extends ItemSelectable
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/CellEditor.java gcc-4.0.0/libjava/javax/swing/CellEditor.java
*** gcc-3.4.3/libjava/javax/swing/CellEditor.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/CellEditor.java	Tue Nov 30 23:58:52 2004
*************** this exception to your version of the li
*** 35,43 ****
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.util.EventObject;
+ 
  import javax.swing.event.CellEditorListener;
  
  /**
*************** import javax.swing.event.CellEditorListe
*** 45,98 ****
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public interface CellEditor {
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * getCellEditorValue
! 	 * @returns Object
! 	 */
! 	Object getCellEditorValue();
! 
! 	/**
! 	 * isCellEditable
! 	 * @param event TODO
! 	 * @returns boolean
! 	 */
! 	boolean isCellEditable(EventObject event);
  
! 	/**
! 	 * shouldSelectCell
! 	 * @param event TODO
! 	 * @returns boolean
! 	 */
! 	boolean shouldSelectCell(EventObject event);
  
! 	/**
! 	 * stopCellEditing
! 	 * @returns boolean
! 	 */
! 	boolean stopCellEditing();
  
! 	/**
! 	 * cancelCellEditing
! 	 */
! 	void cancelCellEditing();
  
! 	/**
! 	 * addCellEditorListener
! 	 * @param value0 TODO
! 	 */
! 	void addCellEditorListener(CellEditorListener listener);
  
! 	/**
! 	 * removeCellEditorListener
! 	 * @param listener TODO
! 	 */
! 	void removeCellEditorListener(CellEditorListener listener);
  
  
  } // CellEditor
--- 47,95 ----
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public interface CellEditor
! {
!   /**
!    * getCellEditorValue
!    * @returns Object
!    */
!   Object getCellEditorValue();
  
!   /**
!    * isCellEditable
!    * @param event TODO
!    * @returns boolean
!    */
!   boolean isCellEditable(EventObject event);
  
!   /**
!    * shouldSelectCell
!    * @param event TODO
!    * @returns boolean
!    */
!   boolean shouldSelectCell(EventObject event);
  
!   /**
!    * stopCellEditing
!    * @returns boolean
!    */
!   boolean stopCellEditing();
  
!   /**
!    * cancelCellEditing
!    */
!   void cancelCellEditing();
  
!   /**
!    * addCellEditorListener
!    * @param value0 TODO
!    */
!   void addCellEditorListener(CellEditorListener listener);
  
+   /**
+    * removeCellEditorListener
+    * @param listener TODO
+    */
+   void removeCellEditorListener(CellEditorListener listener);
  
  } // CellEditor
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/CellRendererPane.java gcc-4.0.0/libjava/javax/swing/CellRendererPane.java
*** gcc-3.4.3/libjava/javax/swing/CellRendererPane.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/CellRendererPane.java	Tue Nov 30 23:58:52 2004
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
*************** import java.awt.Graphics;
*** 43,48 ****
--- 44,50 ----
  import java.awt.Rectangle;
  import java.io.IOException;
  import java.io.ObjectOutputStream;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
*************** import javax.accessibility.AccessibleRol
*** 52,101 ****
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public class CellRendererPane extends Container implements Accessible {
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleCellRendererPane
! 	 */
! 	protected class AccessibleCellRendererPane extends AccessibleAWTContainer {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleCellRendererPane
! 		 * @param component TODO
! 		 */
! 		protected AccessibleCellRendererPane(CellRendererPane component) {
! 			super();
! 			// TODO
! 		} // AccessibleCellRendererPane()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.PANEL;
! 		} // getAccessibleRole()
! 
  
! 	} // AccessibleCellRendererPane
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
  	/**
  	 * accessibleContext
--- 54,87 ----
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public class CellRendererPane extends Container implements Accessible
! {
!   private static final long serialVersionUID = -7642183829532984273L;
  
!   /**
!    * AccessibleCellRendererPane
!    */
!   protected class AccessibleCellRendererPane extends AccessibleAWTContainer
!   {
!     private static final long serialVersionUID = -8981090083147391074L;
  
+     /**
+      * Constructor AccessibleCellRendererPane
+      * @param component TODO
+      */
+     protected AccessibleCellRendererPane()
+     {
+     }
  
!     /**
!      * getAccessibleRole
!      * @returns AccessibleRole
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.PANEL;
!     }
!   }
  
  	/**
  	 * accessibleContext
*************** public class CellRendererPane extends Co
*** 205,220 ****
  		// TODO
  	} // paintComponent()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleCellRendererPane(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
! 
  
! } // CellRendererPane
--- 191,205 ----
  		// TODO
  	} // paintComponent()
  
!   /**
!    * getAccessibleContext
!    * @return AccessibleContext
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleCellRendererPane();
  
!     return accessibleContext;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ComboBoxEditor.java gcc-4.0.0/libjava/javax/swing/ComboBoxEditor.java
*** gcc-3.4.3/libjava/javax/swing/ComboBoxEditor.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/ComboBoxEditor.java	Thu Sep  2 05:10:19 2004
*************** import java.awt.event.ActionListener;
*** 42,90 ****
  
  /**
   * ComboBoxEditor
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public interface ComboBoxEditor {
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * getEditorComponent
! 	 * @returns Component
! 	 */
! 	Component getEditorComponent();
! 
! 	/**
! 	 * setItem
! 	 * @param item TODO
! 	 */
! 	void setItem(Object item);
! 
! 	/**
! 	 * getItem
! 	 * @returns Object
! 	 */
! 	Object getItem();
  
! 	/**
! 	 * selectAll
! 	 */
! 	void selectAll();
  
! 	/**
! 	 * addActionListener
! 	 * @param listener TODO
! 	 */
! 	void addActionListener(ActionListener listener);
  
! 	/**
! 	 * removeActionListener
! 	 * @param listener TODO
! 	 */
! 	void removeActionListener(ActionListener listener);
  
  
  } // ComboBoxEditor
--- 42,97 ----
  
  /**
   * ComboBoxEditor
!  *
!  * @author Andrew Selkirk
!  * @author Olga Rodimina
!  * @version 1.0
   */
! public interface ComboBoxEditor
! {
!   /**
!    * This method returns component that will be used by the combo box to
!    * display/edit currently selected item in the combo box.
!    *
!    * @return Component that will be used by the combo box to display/edit
!    *         currently selected item
!    */
!   Component getEditorComponent();
  
!   /**
!    * Sets item that should be editted when any editting operation is performed
!    * by the user. The value is always equal to the currently selected value
!    * in the combo box. Thus, whenever a different value is selected from the
!    * combo box list then this method should be called to change editting item
!    * to the new selected item.
!    *
!    * @param selectedItem item that is currently selected in the combo box
!    */
!   void setItem(Object item);
  
!   /**
!    * This method returns item that is currently editable.
!    *
!    * @return Item in the combo box that is currently editable
!    */
!   Object getItem();
  
!   /**
!    * selectAll
!    */
!   void selectAll();
  
+   /**
+    * This method adds specified ActionListener to this ComboBoxEditor.
+    *
+    * @param listener
+    */
+   void addActionListener(ActionListener listener);
  
+   /**
+    * This method removes given ActionListener from this ComboBoxEditor.
+    *
+    * @param listener TODO
+    */
+   void removeActionListener(ActionListener listener);
  } // ComboBoxEditor
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ComboBoxModel.java gcc-4.0.0/libjava/javax/swing/ComboBoxModel.java
*** gcc-3.4.3/libjava/javax/swing/ComboBoxModel.java	Sun Oct 12 13:20:49 2003
--- gcc-4.0.0/libjava/javax/swing/ComboBoxModel.java	Thu Sep  2 05:10:19 2004
*************** exception statement from your version. *
*** 37,64 ****
  
  package javax.swing;
  
  /**
!  * ComboBoxModel
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public interface ComboBoxModel extends ListModel {
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * setSelectedItem
! 	 * @param item TODO
! 	 */
! 	void setSelectedItem(Object item);
! 
! 	/**
! 	 * getSelectedItem
! 	 * @returns Object
! 	 */
! 	Object getSelectedItem();
! 
  
  } // ComboBoxModel
--- 37,68 ----
  
  package javax.swing;
  
+ 
  /**
!  * ComboBoxModel is a data model for JComboBox. This model keeps
!  * track of elements contained in the JComboBox as well as the current
!  * combo box selection. Whenever selection in the JComboBox changes, the
!  * ComboBoxModel should fire ListDataEvents to ComboBox's ListDataListeners.
!  *
!  * @author        Andrew Selkirk
!  * @version        1.0
   */
! public interface ComboBoxModel extends ListModel
! {
!   /**
!    * This method sets the selected item in the combo box. Class
!    * implementing this interface should fire ListDataEvents to
!    * all registered ListDataListeners to indicated that the
!    * selection has changed.
!    *
!    * @param item item in the combo box that should be selected
!    */
!   void setSelectedItem(Object item);
  
+   /**
+    * The method returns currently selected item in the combo box
+    *
+    * @returns item that is currently selected in the combo box.
+    */
+   Object getSelectedItem();
  } // ComboBoxModel
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ComponentInputMap.java gcc-4.0.0/libjava/javax/swing/ComponentInputMap.java
*** gcc-3.4.3/libjava/javax/swing/ComponentInputMap.java	Fri Aug  9 04:26:10 2002
--- gcc-4.0.0/libjava/javax/swing/ComponentInputMap.java	Wed Feb 16 20:02:19 2005
***************
*** 1,5 ****
  /* ComponentInputMap.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ComponentInputMap.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,115 ****
  
  package javax.swing;
  
  /**
!  * ComponentInputMap
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class ComponentInputMap extends InputMap {
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * component
! 	 */
! 	private JComponent component;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor ComponentInputMap
! 	 * @param value0 TODO
! 	 */
! 	public ComponentInputMap(JComponent value0) {
! 		// TODO
! 	} // ComponentInputMap()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * put
! 	 * @param keystroke TODO
! 	 * @param value TODO
! 	 */
! 	public void put(KeyStroke keystroke, Object value) {
! 		// TODO
! 	} // put()
  
! 	/**
! 	 * clear
! 	 */
! 	public void clear() {
! 		// TODO
! 	} // clear()
  
! 	/**
! 	 * remove
! 	 * @param keystroke TODO
! 	 */
! 	public void remove(KeyStroke keystroke) {
! 		// TODO
! 	} // remove()
  
! 	/**
! 	 * setParent
! 	 * @param parent TODO
! 	 */
! 	public void setParent(InputMap parent) {
! 		// TODO
! 	} // setParent()
  
! 	/**
! 	 * getComponent
! 	 * @returns JComponent
! 	 */
! 	public JComponent getComponent() {
! 		return null; // TODO
! 	} // getComponent()
  
  
! } // ComponentInputMap
--- 37,130 ----
  
  package javax.swing;
  
+ 
  /**
!  * @author Andrew Selkirk
!  * @author Michael Koch
   */
! public class ComponentInputMap extends InputMap
! {
!   /**
!    * The component to notify.
!    */
!   private JComponent component;
  
!   /**
!    * Creates <code>ComponentInputMap</code> object that notifies the given
!    * component about changes to it.
!    *
!    * @param comp the component to notify
!    *
!    * @exception IllegalArgumentException if comp is null
!    */
!   public ComponentInputMap(JComponent comp)
!   {
!     if (comp == null)
!       throw new IllegalArgumentException();
!     
!     this.component = comp;
!   }
  
!   /**
!    * Puts a new entry into the <code>InputMap</code>.
!    * If actionMapKey is null an existing entry will be removed.
!    *
!    * @param keystroke the keystroke for the entry
!    * @param actionMapKey the action.
!    */
!   public void put(KeyStroke keystroke, Object value)
!   {
!     super.put(keystroke, value);
!     // FIXME: Notify component.
!   }
  
!   /**
!    * Clears the <code>InputMap</code>.
!    */
!   public void clear()
!   {
!     super.clear();
!     // FIXME: Notify component.
!   }
  
!   /**
!    * Remove an entry from the <code>InputMap</code>.
!    *
!    * @param key the key of the entry to remove
!    */
!   public void remove(KeyStroke keystroke)
!   {
!     super.remove(keystroke);
!     // FIXME: Notify component.
!   }
  
!   /**
!    * Sets a parent for this <code>ComponentInputMap</code>.
!    *
!    * @param parentMap the new parent
!    *
!    * @exception IllegalArgument if parentMap is not a
!    * <code>ComponentInputMap</code> or not associated with the same component
!    */
!   public void setParent(InputMap parentMap)
!   {
!     if (! (parentMap instanceof ComponentInputMap))
!       throw new IllegalArgumentException();
  
+     if (((ComponentInputMap) parentMap).getComponent() != component)
+       throw new IllegalArgumentException();
+    
+     super.setParent(parentMap);
+     // FIXME: Notify component.
+   }
  
!   /**
!    * Returns the component to notify about changes.
!    *
!    * @return a <code>JComponent</code> object
!    */
!   public JComponent getComponent()
!   {
!     return component;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DebugGraphics.java gcc-4.0.0/libjava/javax/swing/DebugGraphics.java
*** gcc-3.4.3/libjava/javax/swing/DebugGraphics.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/DebugGraphics.java	Wed Feb 16 20:02:19 2005
***************
*** 1,5 ****
  /* DebugGraphics.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DebugGraphics.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.image.ImageObserver;
*** 48,725 ****
  import java.io.PrintStream;
  import java.text.AttributedCharacterIterator;
  
  /**
   * DebugGraphics
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public class DebugGraphics extends Graphics {
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * graphics
! 	 */
! 	Graphics graphics;
! 
! 	/**
! 	 * buffer
! 	 */
! 	Image buffer;
! 
! 	/**
! 	 * debugOptions
! 	 */
! 	int debugOptions;
! 
! 	/**
! 	 * graphicsID
! 	 */
! 	int graphicsID;
  
! 	/**
! 	 * xOffset
! 	 */
! 	int xOffset;
  
! 	/**
! 	 * yOffset
! 	 */
! 	int yOffset;
  
! 	/**
! 	 * LOG_OPTION
! 	 */
! 	public static final int LOG_OPTION = 1;
  
! 	/**
! 	 * FLASH_OPTION
! 	 */
! 	public static final int FLASH_OPTION = 2;
  
! 	/**
! 	 * BUFFERED_OPTION
! 	 */
! 	public static final int BUFFERED_OPTION = 4;
  
! 	/**
! 	 * NONE_OPTION
! 	 */
! 	public static final int NONE_OPTION = -1;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor DebugGraphics
! 	 */
! 	public DebugGraphics() {
! 		// TODO
! 	} // DebugGraphics()
  
! 	/**
! 	 * Constructor DebugGraphics
! 	 * @param graphics TODO
! 	 * @param component TODO
! 	 */
! 	public DebugGraphics(Graphics graphics, JComponent component) {
! 		// TODO
! 	} // DebugGraphics()
  
! 	/**
! 	 * Constructor DebugGraphics
! 	 * @param graphics TODO
! 	 */
! 	public DebugGraphics(Graphics graphics) {
! 		// TODO
! 	} // DebugGraphics()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * setColor
! 	 * @param value0 TODO
! 	 */
! 	public void setColor(Color color) {
! 		// TODO
! 	} // setColor()
  
! 	/**
! 	 * create
! 	 * @returns Graphics
! 	 */
! 	public Graphics create() {
! 		return null; // TODO
! 	} // create()
  
! 	/**
! 	 * create
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @returns Graphics
! 	 */
! 	public Graphics create(int valx, int y, int w, int h) {
! 		return null; // TODO
! 	} // create()
  
! 	/**
! 	 * flashColor
! 	 * @returns Color
! 	 */
! 	public static Color flashColor() {
! 		return null; // TODO
! 	} // flashColor()
  
! 	/**
! 	 * setFlashColor
! 	 * @param color TODO
! 	 */
! 	public static void setFlashColor(Color color) {
! 		// TODO
! 	} // setFlashColor()
  
! 	/**
! 	 * flashTime
! 	 * @returns int
! 	 */
! 	public static int flashTime() {
! 		return 0; // TODO
! 	} // flashTime()
  
! 	/**
! 	 * setFlashTime
! 	 * @param time TODO
! 	 */
! 	public static void setFlashTime(int time) {
! 		// TODO
! 	} // setFlashTime()
  
! 	/**
! 	 * flashCount
! 	 * @returns int
! 	 */
! 	public static int flashCount() {
! 		return 0; // TODO
! 	} // flashCount()
  
! 	/**
! 	 * setFlashCount
! 	 * @param count TODO
! 	 */
! 	public static void setFlashCount(int count) {
! 		// TODO
! 	} // setFlashCount()
  
! 	/**
! 	 * logStream
! 	 * @returns PrintStream
! 	 */
! 	public static PrintStream logStream() {
! 		return null; // TODO
! 	} // logStream()
  
! 	/**
! 	 * setLogStream
! 	 * @param stream TODO
! 	 */
! 	public static void setLogStream(PrintStream stream) {
! 		// TODO
! 	} // setLogStream()
  
! 	/**
! 	 * getFont
! 	 * @returns Font
! 	 */
! 	public Font getFont() {
! 		return null; // TODO
! 	} // getFont()
  
! 	/**
! 	 * setFont
! 	 * @param font TODO
! 	 */
! 	public void setFont(Font font) {
! 		// TODO
! 	} // setFont()
  
! 	/**
! 	 * getColor
! 	 * @returns Color
! 	 */
! 	public Color getColor() {
! 		return null; // TODO
! 	} // getColor()
  
! 	/**
! 	 * getFontMetrics
! 	 * @returns FontMetrics
! 	 */
! 	public FontMetrics getFontMetrics() {
! 		return null; // TODO
! 	} // getFontMetrics()
  
! 	/**
! 	 * getFontMetrics
! 	 * @param font TODO
! 	 * @returns FontMetrics
! 	 */
! 	public FontMetrics getFontMetrics(Font font) {
! 		return null; // TODO
! 	} // getFontMetrics()
  
! 	/**
! 	 * translate
! 	 * @param x TODO
! 	 * @param y TODO
! 	 */
! 	public void translate(int x, int y) {
! 		// TODO
! 	} // translate()
  
! 	/**
! 	 * setPaintMode
! 	 */
! 	public void setPaintMode() {
! 		// TODO
! 	} // setPaintMode()
  
! 	/**
! 	 * setXORMode
! 	 * @param color TODO
! 	 */
! 	public void setXORMode(Color color) {
! 		// TODO
! 	} // setXORMode()
  
! 	/**
! 	 * getClipBounds
! 	 * @returns Rectangle
! 	 */
! 	public Rectangle getClipBounds() {
! 		return null; // TODO
! 	} // getClipBounds()
  
! 	/**
! 	 * clipRect
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 * @param value3 TODO
! 	 */
! 	public void clipRect(int value0, int value1, int value2, int value3) {
! 		// TODO
! 	} // clipRect()
  
! 	/**
! 	 * setClip
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 */
! 	public void setClip(int x, int y, int w, int h) {
! 		// TODO
! 	} // setClip()
  
! 	/**
! 	 * getClip
! 	 * @returns Shape
! 	 */
! 	public Shape getClip() {
! 		return null; // TODO
! 	} // getClip()
  
! 	/**
! 	 * setClip
! 	 * @param shape TODO
! 	 */
! 	public void setClip(Shape shape) {
! 		// TODO
! 	} // setClip()
  
! 	/**
! 	 * drawRect
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param valh TODO
! 	 */
! 	public void drawRect(int x, int y, int w, int h) {
! 		// TODO
! 	} // drawRect()
  
! 	/**
! 	 * fillRect
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 */
! 	public void fillRect(int x, int y, int w, int h) {
! 		// TODO
! 	} // fillRect()
  
! 	/**
! 	 * clearRect
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 */
! 	public void clearRect(int x, int y, int w, int h) {
! 		// TODO
! 	} // clearRect()
  
! 	/**
! 	 * drawRoundRect
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @param arcWidth TODO
! 	 * @param arcHeight TODO
! 	 */
! 	public void drawRoundRect(int x, int y, int w, int h, 
! 			int arcWidth, int arcHeight) {
! 		// TODO
! 	} // drawRoundRect()
  
! 	/**
! 	 * fillRoundRect
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @param arcWidth TODO
! 	 * @param arcHeight TODO
! 	 */
! 	public void fillRoundRect(int x, int y, int w, int h, 
! 			int arcWidth, int arcHeight) {
! 		// TODO
! 	} // fillRoundRect()
  
! 	/**
! 	 * drawLine
! 	 * @param x1 TODO
! 	 * @param y1 TODO
! 	 * @param x2 TODO
! 	 * @param y2 TODO
! 	 */
! 	public void drawLine(int x1, int y1, int x2, int y2) {
! 		// TODO
! 	} // drawLine()
  
! 	/**
! 	 * draw3DRect
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @param raised TODO
! 	 */
! 	public void draw3DRect(int x, int y, int w, int h, boolean raised) {
! 		// TODO
! 	} // draw3DRect()
  
! 	/**
! 	 * fill3DRect
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @param raised TODO
! 	 */
! 	public void fill3DRect(int x, int y, int w, int h, boolean raised) {
! 		// TODO
! 	} // fill3DRect()
  
! 	/**
! 	 * drawOval
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 */
! 	public void drawOval(int x, int y, int w, int h) {
! 		// TODO
! 	} // drawOval()
  
! 	/**
! 	 * fillOval
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 */
! 	public void fillOval(int x, int y, int w, int h) {
! 		// TODO
! 	} // fillOval()
  
! 	/**
! 	 * drawArc
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @param startAngle TODO
! 	 * @param arcAngle TODO
! 	 */
! 	public void drawArc(int x, int y, int w, int h, 
! 			int startAngle, int arcAngle) {
! 		// TODO
! 	} // drawArc()
  
! 	/**
! 	 * fillArc
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @param startAngle TODO
! 	 * @param arcAngle TODO
! 	 */
! 	public void fillArc(int x, int y, int w, int h, 
! 			int startAngle, int arcAngle) {
! 		// TODO
! 	} // fillArc()
  
! 	/**
! 	 * drawPolyline
! 	 * @param xpoints TODO
! 	 * @param ypoints TODO
! 	 * @param npoints TODO
! 	 */
! 	public void drawPolyline(int[] xpoints, int[] ypoints, int npoints) {
! 		// TODO
! 	} // drawPolyline()
  
! 	/**
! 	 * drawPolygon
! 	 * @param xpoints TODO
! 	 * @param ypoints TODO
! 	 * @param npoints TODO
! 	 */
! 	public void drawPolygon(int[] xpoints, int[] ypoints, int npoints) {
! 		// TODO
! 	} // drawPolygon()
  
! 	/**
! 	 * fillPolygon
! 	 * @param xpoints TODO
! 	 * @param ypoints TODO
! 	 * @param npoints TODO
! 	 */
! 	public void fillPolygon(int[] xpoints, int[] ypoints, int npoints) {
! 		// TODO
! 	} // fillPolygon()
  
! 	/**
! 	 * drawString
! 	 * @param string TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 */
! 	public void drawString(String string, int s, int y) {
! 		// TODO
! 	} // drawString()
  
! 	/**
! 	 * drawString
! 	 * @param iterator TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 */
! 	public void drawString(AttributedCharacterIterator iterator,
! 			int x, int y) {
! 		// TODO
! 	} // drawString()
  
! 	/**
! 	 * drawBytes
! 	 * @param data TODO
! 	 * @param offset TODO
! 	 * @param length TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 */
! 	public void drawBytes(byte[] data, int offset, int length,
! 			int x, int y) {
! 		// TODO
! 	} // drawBytes()
  
! 	/**
! 	 * drawChars
! 	 * @param data TODO
! 	 * @param offset TODO
! 	 * @param length TODO
! 	 * @param value3 TODO
! 	 * @param value4 TODO
! 	 */
! 	public void drawChars(char[] data, int offset, int value2, 
! 			int x, int y) {
! 		// TODO
! 	} // drawChars()
  
! 	/**
! 	 * drawImage
! 	 * @param image TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param observer TODO
! 	 * @returns boolean
! 	 */
! 	public boolean drawImage(Image image, int x, int y,
! 			ImageObserver observer) {
! 		return false; // TODO
! 	} // drawImage()
  
! 	/**
! 	 * drawImage
! 	 * @param image TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @param observer TODO
! 	 * @returns boolean
! 	 */
! 	public boolean drawImage(Image image, int x, int y, int w, 
! 			int h, ImageObserver observer) {
! 		return false; // TODO
! 	} // drawImage()
  
! 	/**
! 	 * drawImage
! 	 * @param image TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param background TODO
! 	 * @param observer TODO
! 	 * @returns boolean
! 	 */
! 	public boolean drawImage(Image image, int x, int y, 
! 			Color background, ImageObserver observer) {
! 		return false; // TODO
! 	} // drawImage()
  
! 	/**
! 	 * drawImage
! 	 * @param image TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @param background TODO
! 	 * @param observer TODO
! 	 * @returns boolean
! 	 */
! 	public boolean drawImage(Image image, int x, int y, int w, int h, 
! 			Color background, ImageObserver observer) {
! 		return false; // TODO
! 	} // drawImage()
  
! 	/**
! 	 * drawImage
! 	 * @param image TODO
! 	 * @param dx1 TODO
! 	 * @param dy1 TODO
! 	 * @param dx2 TODO
! 	 * @param dy2 TODO
! 	 * @param sx1 TODO
! 	 * @param sy1 TODO
! 	 * @param sx2 TODO
! 	 * @param sy2 TODO
! 	 * @param observer TODO
! 	 * @returns boolean
! 	 */
! 	public boolean drawImage(Image image, int dx1, int dy1,
! 			int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,
! 			ImageObserver observer) {
! 		return false; // TODO
! 	} // drawImage()
  
! 	/**
! 	 * drawImage
! 	 * @param image TODO
! 	 * @param dx1 TODO
! 	 * @param dy1 TODO
! 	 * @param dx2 TODO
! 	 * @param dy2 TODO
! 	 * @param sx1 TODO
! 	 * @param sy1 TODO
! 	 * @param sx2 TODO
! 	 * @param sy2 TODO
! 	 * @param background TODO
! 	 * @param observer TODO
! 	 * @returns boolean
! 	 */
! 	public boolean drawImage(Image image, int dx1, int dy1,
! 			int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,
! 			Color background, ImageObserver observer) {
! 		return false; // TODO
! 	} // drawImage()
  
! 	/**
! 	 * copyArea
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 * @param destx TODO
! 	 * @param desty TODO
! 	 */
! 	public void copyArea(int x, int y, int w, int h, 
! 			int destx, int desty) {
! 		// TODO
! 	} // copyArea()
  
! 	/**
! 	 * dispose
! 	 */
! 	public void dispose() {
! 		// TODO
! 	} // dispose()
  
! 	/**
! 	 * isDrawingBuffer
! 	 * @returns boolean
! 	 */
! 	public boolean isDrawingBuffer() {
! 		return false; // TODO
! 	} // isDrawingBuffer()
  
! 	/**
! 	 * toShortString
! 	 * @returns String
! 	 */
! 	String toShortString() {
! 		return null; // TODO
! 	} // toShortString()
  
! 	/**
! 	 * setDebugOptions
! 	 * @param options TODO
! 	 */
! 	public void setDebugOptions(int options) {
! 		// TODO
! 	} // setDebugOptions()
  
! 	/**
! 	 * getDebugOptions
! 	 * @returns int
! 	 */
! 	public int getDebugOptions() {
! 		return 0; // TODO
! 	} // getDebugOptions()
  
  
! } // DebugGraphics
--- 48,885 ----
  import java.io.PrintStream;
  import java.text.AttributedCharacterIterator;
  
+ 
  /**
   * DebugGraphics
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public class DebugGraphics extends Graphics
! {
!   /**
!    * LOG_OPTION
!    */
!   public static final int LOG_OPTION = 1;
  
!   /**
!    * FLASH_OPTION
!    */
!   public static final int FLASH_OPTION = 2;
  
!   /**
!    * BUFFERED_OPTION
!    */
!   public static final int BUFFERED_OPTION = 4;
  
!   /**
!    * NONE_OPTION
!    */
!   public static final int NONE_OPTION = -1;
  
!   static Color debugFlashColor = Color.RED;
!   static int debugFlashCount = 10;
!   static int debugFlashTime = 1000;
!   static PrintStream debugLogStream = System.out;
  
!   /**
!    * graphics
!    */
!   Graphics graphics;
  
!   /**
!    * color
!    */
!   Color color = Color.BLACK;
!   
!   /**
!    * buffer
!    */
!   Image buffer;
  
+   /**
+    * debugOptions
+    */
+   int debugOptions;
  
!   /**
!    * graphicsID
!    */
!   int graphicsID;
  
!   /**
!    * xOffset
!    */
!   int xOffset;
  
!   /**
!    * yOffset
!    */
!   int yOffset;
  
!   /**
!    * Creates a <code>DebugGraphics</code> object.
!    */
!   public DebugGraphics()
!   {
!     // TODO
!   }
  
+   /**
+    * Creates a <code>DebugGraphics</code> object.
+    *
+    * @param graphics The <code>Graphics</code> object to wrap
+    * @param component TODO
+    */
+   public DebugGraphics(Graphics graphics, JComponent component)
+   {
+     this.graphics = graphics;
+     // FIXME: What shall we do with component ?
+   }
  
!   /**
!    * Creates a <code>DebugGraphics</code> object.
!    *
!    * @param graphics The <code>Graphics</code> object to wrap
!    */
!   public DebugGraphics(Graphics graphics)
!   {
!     this.graphics = graphics;
!   }
  
!   /**
!    * Sets the color to draw stuff with.
!    * 
!    * @param color The color
!    */
!   public void setColor(Color color)
!   {
!     this.color = color;
!   }
  
!   /**
!    * Creates a overrides <code>Graphics.create</code> to create a
!    * <code>DebugGraphics</code> object.
!    *
!    * @return a new <code>DebugGraphics</code> object.
!    */
!   public Graphics create()
!   {
!     return new DebugGraphics(graphics.create());
!   }
  
!   /**
!    * Creates a overrides <code>Graphics.create</code> to create a
!    * <code>DebugGraphics</code> object.
!    *
!    * @param x the x coordinate
!    * @param y the y coordinate
!    * @param width the width
!    * @param height the height
!    *
!    * @return a new <code>DebugGraphics</code> object.
!    */
!   public Graphics create(int x, int y, int width, int height)
!   {
!     return new DebugGraphics(graphics.create(x, y, width, height));
!   }
  
!   /**
!    * flashColor
!    *
!    * @return Color
!    */
!   public static Color flashColor()
!   {
!     return debugFlashColor;
!   }
  
!   /**
!    * setFlashColor
!    *
!    * @param color the color to use for flashing
!    */
!   public static void setFlashColor(Color color)
!   {
!     debugFlashColor = color;
!   }
  
!   /**
!    * flashTime
!    *
!    * @return The time in milliseconds
!    */
!   public static int flashTime()
!   {
!     return debugFlashTime;
!   }
  
!   /**
!    * setFlashTime
!    *
!    * @param time The time in milliseconds
!    */
!   public static void setFlashTime(int time)
!   {
!     debugFlashTime = time;
!   }
  
!   /**
!    * flashCount
!    *
!    * @return The number of flashes
!    */
!   public static int flashCount()
!   {
!     return debugFlashCount;
!   }
  
!   /**
!    * setFlashCount
!    *
!    * @param count The number of flashes
!    */
!   public static void setFlashCount(int count)
!   {
!     debugFlashCount = count;
!   }
  
!   /**
!    * logStream
!    *
!    * @return The <code>PrintStream</code> to write logging messages to
!    */
!   public static PrintStream logStream()
!   {
!     return debugLogStream;
!   }
  
!   /**
!    * setLogStream
!    *
!    * @param stream The currently set <code>PrintStream</code>.
!    */
!   public static void setLogStream(PrintStream stream)
!   {
!     debugLogStream = stream;
!   }
  
!   /**
!    * getFont
!    *
!    * @return The font
!    */
!   public Font getFont()
!   {
!     return graphics.getFont();
!   }
  
!   /**
!    * setFont
!    *
!    * @param font The font to use for drawing text
!    */
!   public void setFont(Font font)
!   {
!     graphics.setFont(font);
!   }
  
!   /**
!    * Returns the color used for drawing.
!    * 
!    * @return The color.
!    */
!   public Color getColor()
!   {
!     return color;
!   }
  
!   /**
!    * Returns the font metrics of the current font.
!    *
!    * @return a <code>FontMetrics</code> object
!    */
!   public FontMetrics getFontMetrics()
!   {
!     return graphics.getFontMetrics();
!   }
  
!   /**
!    * Returns the font metrics for a given font.
!    *
!    * @param font the font to get the metrics for
!    *
!    * @return a <code>FontMetrics</code> object
!    */
!   public FontMetrics getFontMetrics(Font font)
!   {
!     return graphics.getFontMetrics(font);
!   }
  
!   /**
!    * translate
!    *
!    * @param x the x coordinate
!    * @param y the y coordinate
!    */
!   public void translate(int x, int y)
!   {
!     graphics.translate(x, y);
!   }
  
!   /**
!    * setPaintMode
!    */
!   public void setPaintMode()
!   {
!     graphics.setPaintMode();
!   }
  
!   /**
!    * setXORMode
!    *
!    * @param color the color
!    */
!   public void setXORMode(Color color)
!   {
!     graphics.setXORMode(color);
!   }
  
!   /**
!    * getClipBounds
!    *
!    * @return Rectangle
!    */
!   public Rectangle getClipBounds()
!   {
!     return graphics.getClipBounds();
!   }
  
!   /**
!    * Intersects the current clip region with the given region.
!    *
!    * @param x The x-position of the region
!    * @param y The y-position of the region
!    * @param width The width of the region
!    * @param height The height of the region
!    */
!   public void clipRect(int x, int y, int width, int height)
!   {
!     graphics.clipRect(x, y, width, height);
!   }
  
!   /**
!    * Sets the clipping region.
!    *
!    * @param x The x-position of the region
!    * @param y The y-position of the region
!    * @param width The width of the region
!    * @param height The height of the region
!    */
!   public void setClip(int x, int y, int width, int height)
!   {
!     graphics.setClip(x, y, width, height);
!   }
  
!   /**
!    * Returns the current clipping region.
!    *
!    * @return Shape
!    */
!   public Shape getClip()
!   {
!     return graphics.getClip();
!   }
  
!   /**
!    * Sets the current clipping region
!    *
!    * @param shape The clippin region
!    */
!   public void setClip(Shape shape)
!   {
!     graphics.setClip(shape);
!   }
  
!   private void sleep(int milliseconds)
!   {
!     try
!       {
! 	Thread.sleep(milliseconds);
!       }
!     catch (InterruptedException e)
!       {
! 	// Ignore this.
!       }
!   }
!   
!   /**
!    * Draws a rectangle.
!    *
!    * @param x The x-position of the rectangle
!    * @param y The y-position of the rectangle
!    * @param width The width of the rectangle
!    * @param height The height of the rectangle
!    */
!   public void drawRect(int x, int y, int width, int height)
!   {
!     for (int index = 0; index < (debugFlashCount - 1); ++index)
!       {
! 	graphics.setColor(color);
! 	graphics.drawRect(x, y, width, height);
! 	sleep(debugFlashTime);
! 	
! 	graphics.setColor(debugFlashColor);
! 	graphics.drawRect(x, y, width, height);
! 	sleep(debugFlashTime);
!       }
  
!     graphics.setColor(color);
!     graphics.drawRect(x, y, width, height);
!   }
  
!   /**
!    * Draws a filled rectangle.
!    *
!    * @param x The x-position of the rectangle
!    * @param y The y-position of the rectangle
!    * @param width The width of the rectangle
!    * @param height The height of the rectangle
!    */
!   public void fillRect(int x, int y, int width, int height)
!   {
!     for (int index = 0; index < (debugFlashCount - 1); ++index)
!       {
! 	graphics.setColor(color);
! 	graphics.fillRect(x, y, width, height);
! 	sleep(debugFlashTime);
! 	
! 	graphics.setColor(debugFlashColor);
! 	graphics.fillRect(x, y, width, height);
! 	sleep(debugFlashTime);
!       }
  
!     graphics.setColor(color);
!     graphics.fillRect(x, y, width, height);
!   }
  
!   /**
!    * clearRect
!    *
!    * @param x The x-position of the rectangle
!    * @param y The y-position of the rectangle
!    * @param width The width of the rectangle
!    * @param height The height of the rectangle
!    */
!   public void clearRect(int x, int y, int width, int height)
!   {
!     graphics.clearRect(x, y, width, height);
!   }
  
!   /**
!    * drawRoundRect
!    *
!    * @param x The x-position of the rectangle
!    * @param y The y-position of the rectangle
!    * @param width The width of the rectangle
!    * @param height The height of the rectangle
!    * @param arcWidth TODO
!    * @param arcHeight TODO
!    */
!   public void drawRoundRect(int x, int y, int width, int height, 
! 			    int arcWidth, int arcHeight)
!   {
!     graphics.drawRoundRect(x, y, width, height, arcWidth, arcHeight);
!   }
  
!   /**
!    * fillRoundRect
!    *
!    * @param x The x-position of the rectangle
!    * @param y The y-position of the rectangle
!    * @param width The width of the rectangle
!    * @param height The height of the rectangle
!    * @param arcWidth TODO
!    * @param arcHeight TODO
!    */
!   public void fillRoundRect(int x, int y, int width, int height, 
! 			    int arcWidth, int arcHeight)
!   {
!     graphics.fillRoundRect(x, y, width, height, arcWidth, arcHeight);
!   }
  
!   /**
!    * drawLine
!    *
!    * @param x1 The x-position of the start 
!    * @param y1 The y-position of the start
!    * @param x2 The x-position of the end
!    * @param y2 The y-position of the end
!    */
!   public void drawLine(int x1, int y1, int x2, int y2)
!   {
!     graphics.drawLine(x1, y1, x2, y2);
!   }
  
!   /**
!    * draw3DRect
!    *
!    * @param x The x-position of the rectangle
!    * @param y The y-position of the rectangle
!    * @param width The width of the rectangle
!    * @param height The height of the rectangle
!    * @param raised TODO
!    */
!   public void draw3DRect(int x, int y, int width, int height, boolean raised)
!   {
!     graphics.draw3DRect(x, y, width, height, raised);
!   }
  
!   /**
!    * fill3DRect
!    *
!    * @param x The x-position of the rectangle
!    * @param y The y-position of the rectangle
!    * @param width The width of the rectangle
!    * @param height The height of the rectangle
!    * @param raised TODO
!    */
!   public void fill3DRect(int x, int y, int width, int height, boolean raised)
!   {
!     graphics.fill3DRect(x, y, width, height, raised);
!   }
  
!   /**
!    * drawOval
!    *
!    * @param x the x coordinate
!    * @param y the y coordiante
!    * @param width the width
!    * @param height the height
!    */
!   public void drawOval(int x, int y, int width, int height)
!   {
!     graphics.drawOval(x, y, width, height);
!   }
  
!   /**
!    * fillOval
!    *
!    * @param x the x coordinate
!    * @param y the y coordinate
!    * @param width the width
!    * @param height the height
!    */
!   public void fillOval(int x, int y, int width, int height)
!   {
!     graphics.fillOval(x, y, width, height);
!   }
  
!   /**
!    * drawArc
!    *
!    * @param x the x coordinate
!    * @param y the y coordinate
!    * @param width the width
!    * @param height the height
!    * @param startAngle TODO
!    * @param arcAngle TODO
!    */
!   public void drawArc(int x, int y, int width, int height, 
! 		      int startAngle, int arcAngle)
!   {
!     graphics.drawArc(x, y, width, height, startAngle, arcAngle);
!   }
  
!   /**
!    * fillArc
!    *
!    * @param x the coordinate
!    * @param y the y coordinate
!    * @param width the width
!    * @param height the height
!    * @param startAngle TODO
!    * @param arcAngle TODO
!    */
!   public void fillArc(int x, int y, int width, int height, 
! 		      int startAngle, int arcAngle)
!   {
!     graphics.fillArc(x, y, width, height, startAngle, arcAngle);
!   }
  
!   /**
!    * drawPolyline
!    *
!    * @param xpoints TODO
!    * @param ypoints TODO
!    * @param npoints TODO
!    */
!   public void drawPolyline(int[] xpoints, int[] ypoints, int npoints)
!   {
!     graphics.drawPolyline(xpoints, ypoints, npoints);
!   }
  
!   /**
!    * drawPolygon
!    *
!    * @param xpoints TODO
!    * @param ypoints TODO
!    * @param npoints TODO
!    */
!   public void drawPolygon(int[] xpoints, int[] ypoints, int npoints)
!   {
!     graphics.drawPolygon(xpoints, ypoints, npoints);
!   }
  
!   /**
!    * fillPolygon
!    *
!    * @param xpoints TODO
!    * @param ypoints TODO
!    * @param npoints TODO
!    */
!   public void fillPolygon(int[] xpoints, int[] ypoints, int npoints)
!   {
!     graphics.fillPolygon(xpoints, ypoints, npoints);
!   }
  
!   /**
!    * drawString
!    *
!    * @param string the string
!    * @param x the x coordinate
!    * @param y the y coordinate
!    */
!   public void drawString(String string, int x, int y)
!   {
!     graphics.drawString(string, x, y);
!   }
  
!   /**
!    * drawString
!    *
!    * @param iterator TODO
!    * @param x the x coordinate
!    * @param y the y coordinate
!    */
!   public void drawString(AttributedCharacterIterator iterator,
! 			 int x, int y)
!   {
!     graphics.drawString(iterator, x, y);
!   }
  
!   /**
!    * drawBytes
!    * 
!    * @param data TODO
!    * @param offset TODO
!    * @param length TODO
!    * @param x the x coordinate
!    * @param y the y coordinate
!    */
!   public void drawBytes(byte[] data, int offset, int length,
! 			int x, int y)
!   {
!     graphics.drawBytes(data, offset, length, x, y);
!   }
  
!   /**
!    * drawChars
!    * 
!    * @param data array of characters to draw
!    * @param offset offset in array
!    * @param length number of characters in array to draw
!    * @param x x-position
!    * @param y y-position
!    */
!   public void drawChars(char[] data, int offset, int length, 
! 			int x, int y)
!   {
!     for (int index = 0; index < (debugFlashCount - 1); ++index)
!       {
! 	graphics.setColor(color);
! 	graphics.drawChars(data, offset, length, x, y);
! 	sleep(debugFlashTime);
! 	
! 	graphics.setColor(debugFlashColor);
! 	graphics.drawChars(data, offset, length, x, y);
! 	sleep(debugFlashTime);
!       }
  
!     graphics.setColor(color);
!     graphics.drawChars(data, offset, length, x, y);
!   }
  
!   /**
!    * drawImage
!    *
!    * @param image The image to draw
!    * @param x The x position
!    * @param y The y position
!    * @param observer The image observer
!    * @return boolean
!    */
!   public boolean drawImage(Image image, int x, int y,
! 			   ImageObserver observer)
!   {
!     return graphics.drawImage(image, x, y, observer);
!   }
  
!   /**
!    * drawImage
!    * 
!    * @param image The image to draw
!    * @param x The x position
!    * @param y The y position
!    * @param width The width of the area to draw the image
!    * @param height The height of the area to draw the image
!    * @param observer The image observer
!    *
!    * @return boolean
!    */
!   public boolean drawImage(Image image, int x, int y, int width, 
! 			   int height, ImageObserver observer)
!   {
!     return graphics.drawImage(image, x, y, width, height, observer);
!   }
  
!   /**
!    * drawImage
!    * 
!    * @param image The image to draw
!    * @param x The x position
!    * @param y The y position
!    * @param background The color for the background in the opaque regions
!    * of the image
!    * @param observer The image observer
!    *
!    * @return boolean
!    */
!   public boolean drawImage(Image image, int x, int y, 
! 			   Color background, ImageObserver observer)
!   {
!     return graphics.drawImage(image, x, y, background, observer);
!   }
  
!   /**
!    * drawImage
!    * 
!    * @param image The image to draw
!    * @param x The x position
!    * @param y The y position
!    * @param width The width of the area to draw the image
!    * @param height The height of the area to draw the image
!    * @param background The color for the background in the opaque regions
!    * of the image
!    * @param observer The image observer
!    *
!    * @return boolean
!    */
!   public boolean drawImage(Image image, int x, int y, int width, int height, 
! 			   Color background, ImageObserver observer)
!   {
!     return graphics.drawImage(image, x, y, width, height, background, observer);
!   }
  
!   /**
!    * drawImage
!    * 
!    * @param image The image to draw
!    * @param dx1 TODO
!    * @param dy1 TODO
!    * @param dx2 TODO
!    * @param dy2 TODO
!    * @param sx1 TODO
!    * @param sy1 TODO
!    * @param sx2 TODO
!    * @param sy2 TODO
!    * @param observer The image observer
!    * 
!    * @return boolean
!    */
!   public boolean drawImage(Image image, int dx1, int dy1,
! 			   int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,
! 			   ImageObserver observer)
!   {
!     return graphics.drawImage(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);
!   }
  
!   /**
!    * drawImage
!    *
!    * @param image The image to draw
!    * @param dx1 TODO
!    * @param dy1 TODO
!    * @param dx2 TODO
!    * @param dy2 TODO
!    * @param sx1 TODO
!    * @param sy1 TODO
!    * @param sx2 TODO
!    * @param sy2 TODO
!    * @param background The color for the background in the opaque regions
!    * of the image
!    * @param observer The image observer
!    *
!    * @return boolean
!    */
!   public boolean drawImage(Image image, int dx1, int dy1,
! 			   int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,
! 			   Color background, ImageObserver observer)
!   {
!     return graphics.drawImage(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, background, observer);
!   }
  
!   /**
!    * copyArea
!    *
!    * @param x The x position of the source area
!    * @param y The y position of the source area
!    * @param width The width of the area
!    * @param height The height of the area
!    * @param destx The x position of the destination area
!    * @param desty The y posiiton of the destination area
!    */
!   public void copyArea(int x, int y, int width, int height, 
! 		       int destx, int desty)
!   {
!     graphics.copyArea(x, y, width, height, destx, desty);
!   }
  
!   /**
!    * Releases all system resources that this <code>Graphics</code> is using.
!    */
!   public void dispose()
!   {
!     graphics.dispose();
!     graphics = null;
!   }
  
!   /**
!    * isDrawingBuffer
!    *
!    * @return boolean
!    */
!   public boolean isDrawingBuffer()
!   {
!     return false; // TODO
!   }
  
+   /**
+    * setDebugOptions
+    *
+    * @param options the debug options
+    */
+   public void setDebugOptions(int options)
+   {
+     debugOptions = options;
+   }
  
!   /**
!    * getDebugOptions
!    *
!    * @return the debug options
!    */
!   public int getDebugOptions()
!   {
!     return debugOptions;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultBoundedRangeModel.java gcc-4.0.0/libjava/javax/swing/DefaultBoundedRangeModel.java
*** gcc-3.4.3/libjava/javax/swing/DefaultBoundedRangeModel.java	Wed Jan  7 14:42:03 2004
--- gcc-4.0.0/libjava/javax/swing/DefaultBoundedRangeModel.java	Thu Feb 17 07:48:51 2005
***************
*** 1,6 ****
  /* DefaultBoundedRangeModel.java -- Default implementation
     of BoundedRangeModel.
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,6 ----
  /* DefaultBoundedRangeModel.java -- Default implementation
     of BoundedRangeModel.
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 36,55 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.EventListener;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
- 
  /**
!  * A default implementation of BoundedRangeModel.
   *
!  * @author <a href="mailto:aselkirk@sympatico.ca">Andrew Selkirk</a>
!  * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
   */
  public class DefaultBoundedRangeModel
    implements BoundedRangeModel, Serializable
--- 36,56 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.EventListener;
+ 
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
  /**
!  * A default implementation of <code>BoundedRangeModel</code>.
   *
!  * @author Andrew Selkirk (aselkirk@sympatico.ca)
!  * @author Sascha Brawer (brawer@dandelis.ch)
   */
  public class DefaultBoundedRangeModel
    implements BoundedRangeModel, Serializable
*************** public class DefaultBoundedRangeModel
*** 58,64 ****
     * The identifier of this class in object serialization. Verified
     * using the serialver tool of Sun J2SE 1.4.1_01.
     */
!   static final long serialVersionUID = 5034068491295259790L;
  
  
    /**
--- 59,65 ----
     * The identifier of this class in object serialization. Verified
     * using the serialver tool of Sun J2SE 1.4.1_01.
     */
!   private static final long serialVersionUID = 5034068491295259790L;
  
  
    /**
*************** public class DefaultBoundedRangeModel
*** 66,72 ****
     * when the state of this range model has changed.
     *
     * <p>The event object is created on demand, the first time it
!    * is actually needed.
     *
     * @see #fireStateChanged()
     */
--- 67,73 ----
     * when the state of this range model has changed.
     *
     * <p>The event object is created on demand, the first time it
!    * is actually needed.</p>
     *
     * @see #fireStateChanged()
     */
*************** public class DefaultBoundedRangeModel
*** 154,160 ****
     * @param maximum the initial maximal value of the range model.
     *
     * @throws IllegalArgumentException if the following condition is
!    * not satisfied: <code>minimum <= value <= value + extent <=
     * maximum</code>.
     */
    public DefaultBoundedRangeModel(int value, int extent, int minimum,
--- 155,161 ----
     * @param maximum the initial maximal value of the range model.
     *
     * @throws IllegalArgumentException if the following condition is
!    * not satisfied: <code>minimum &lt;= value &lt;= value + extent &lt;=
     * maximum</code>.
     */
    public DefaultBoundedRangeModel(int value, int extent, int minimum,
*************** public class DefaultBoundedRangeModel
*** 175,180 ****
--- 176,183 ----
    /**
     * Returns a string with all relevant properties of this range
     * model.
+    *
+    * @return a string representing the object
     */
    public String toString()
    {
*************** public class DefaultBoundedRangeModel
*** 192,197 ****
--- 195,202 ----
     * Returns the current value of this bounded range model.  In a
     * scroll bar visualization of a {@link BoundedRangeModel}, the
     * <code>value</code> is displayed as the position of the thumb.
+    *
+    * @return the value
     */
    public int getValue()
    {
*************** public class DefaultBoundedRangeModel
*** 203,210 ****
     * Changes the current value of this bounded range model. In a
     * scroll bar visualization of a {@link BoundedRangeModel}, the
     * <code>value</code> is displayed as the position of the thumb;
!    * changing the <code>value</code> of a scroll bar&#x2019;s model
     * thus moves the thumb to a different position.
     */
    public void setValue(int value)
    {
--- 208,217 ----
     * Changes the current value of this bounded range model. In a
     * scroll bar visualization of a {@link BoundedRangeModel}, the
     * <code>value</code> is displayed as the position of the thumb;
!    * changing the <code>value</code> of a scroll bar's model
     * thus moves the thumb to a different position.
+    *
+    * @param value the value
     */
    public void setValue(int value)
    {
*************** public class DefaultBoundedRangeModel
*** 225,230 ****
--- 232,239 ----
     * a number greater than or equal to zero. In a scroll bar
     * visualization of a {@link BoundedRangeModel}, the
     * <code>extent</code> is displayed as the size of the thumb.
+    *
+    * @return the extent
     */
    public int getExtent()
    {
*************** public class DefaultBoundedRangeModel
*** 281,286 ****
--- 290,297 ----
  
    /**
     * Returns the current maximal value of this bounded range model.
+    *
+    * @return the maximum
     */
    public int getMaximum()
    {
*************** public class DefaultBoundedRangeModel
*** 312,318 ****
     * around; when the mouse is relased, they set the property to
     * <code>false</code> and post a final {@link ChangeEvent}.
     *
!    * @returns <code>true</code> if the value will change soon again;
     * <code>false</code> if the value will probably not change soon.
     */
    public boolean getValueIsAdjusting()
--- 323,329 ----
     * around; when the mouse is relased, they set the property to
     * <code>false</code> and post a final {@link ChangeEvent}.
     *
!    * @return <code>true</code> if the value will change soon again;
     * <code>false</code> if the value will probably not change soon.
     */
    public boolean getValueIsAdjusting()
*************** public class DefaultBoundedRangeModel
*** 343,349 ****
  
  
    /**
!    * setRangeProperties
     *
     * @param value the new value of the range model.  In a scroll bar
     * visualization of a {@link BoundedRangeModel}, the
--- 354,360 ----
  
  
    /**
!    * Sets all properties.
     *
     * @param value the new value of the range model.  In a scroll bar
     * visualization of a {@link BoundedRangeModel}, the
*************** public class DefaultBoundedRangeModel
*** 421,436 ****
     */
    protected void fireStateChanged()
    {
!     Object[] listeners;
  
!     listeners = listenerList.getListenerList();
!     for (int i = listeners.length - 2; i >= 0; i -= 2)
!       if (listeners[i] == ChangeListener.class)
!         {
!           if (changeEvent == null)
!             changeEvent = new ChangeEvent(this);
!           ((ChangeListener) listeners[i + 1]).stateChanged(changeEvent);
!         }
    }
  
  
--- 432,444 ----
     */
    protected void fireStateChanged()
    {
!     ChangeListener[] listeners = getChangeListeners();
!     
!     if (changeEvent == null)
!       changeEvent = new ChangeEvent(this);
  
!     for (int i = listeners.length - 1; i >= 0; --i)
!       listeners[i].stateChanged(changeEvent);
    }
  
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultButtonModel.java gcc-4.0.0/libjava/javax/swing/DefaultButtonModel.java
*** gcc-3.4.3/libjava/javax/swing/DefaultButtonModel.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/DefaultButtonModel.java	Wed Feb 16 20:02:19 2005
***************
*** 1,5 ****
! /* DefaultButtonModel.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* DefaultButtonModel.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.ActionEvent;
*** 42,178 ****
  import java.awt.event.ActionListener;
  import java.awt.event.ItemEvent;
  import java.awt.event.ItemListener;
  import java.io.Serializable;
  import java.util.EventListener;
! import java.util.Vector;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
! public class DefaultButtonModel
!   implements ButtonModel, Serializable
  {
!   static final long serialVersionUID = -5342609566534980231L;
  
!     Vector actions          = new Vector();
  
!     Vector items    = new Vector();
!     Vector changes  = new Vector();
!     ButtonGroup group;
!     JComponent comp;
  
!     
!     DefaultButtonModel(JComponent a)
!     {
! 	comp = a;
!     }
  
  
!     public Object[] getSelectedObjects()
!     {
! 	return null;
!     }
  
  
!     public void fireItemStateChanged(ItemEvent event)
!     {
! 	for (int i=0;i<items.size();i++)
! 	    {
! 		ItemListener a = (ItemListener) items.get(i);
! 		a.itemStateChanged(event);
! 	    }
!     }
!     public void fireStateChanged(ChangeEvent event)
!     {
! 	for (int i=0;i<changes.size();i++)
! 	    {
! 		ChangeListener a = (ChangeListener) changes.get(i);
! 		a.stateChanged(event);
! 	    }
!     }
!     public void fireActionPerformed(ActionEvent event)
!     {
! 	for (int i=0;i<actions.size();i++)
! 	    {
! 		ActionListener a = (ActionListener) actions.get(i);
! 		a.actionPerformed(event);
! 	    }
!     }
  
!     boolean arm;
!     public boolean isArmed()          { return arm; }
!     public void setArmed(boolean b)   { arm = b; }
  
!     boolean enabled = true;
!     public boolean isEnabled()         { return enabled; }
!     public void setEnabled(boolean b)  { enabled = b; }
  
!     boolean pressed;
!     public void setPressed(boolean b)  
!     {
! 	pressed = b; 
!     }
!     public boolean isPressed()         { return pressed; }
  
  
!     public void removeActionListener(ActionListener l) { actions.removeElement(l); }
!     public void addActionListener(ActionListener l)    
!     {	
! 	//	comp.enableEvents( AWTEvent.ACTION_EVENT_MASK );
! 	actions.addElement(l);    
!     }
  
!     public void addItemListener(ItemListener l)        { items.addElement(l); }
!     public void removeItemListener(ItemListener l)     { items.removeElement(l); }
  
!     public void addChangeListener(ChangeListener l)    { changes.addElement(l); }
!     public void removeChangeListener(ChangeListener l) { changes.removeElement(l); }
  
!     boolean roll;
!     public void setRollover(boolean b) { roll = b; }
!     public boolean isRollover()        { return roll; }
  
!     int mne;  
!     public int  getMnemonic()        { return mne; }
!     public void setMnemonic(int key) { mne = key; }
  
!     String com;
!     public void setActionCommand(String s) { com = s; }
!     public String getActionCommand()       { return com; }
  
!     public void setGroup(ButtonGroup group)
!     {
! 	this.group = group;
!     }
  
!     boolean sel;
!     public void setSelected(boolean b) 
!     { 
! 	if (group != null)
! 	    {
! 		if (b == true)
! 		    {
! 			System.out.println("selected button in group:"+this);
! 			group.setSelected(this, b);
! 			sel = true;
! 		    }
! 		else
! 		    {
! 			System.out.println("deselected button in group: " + this);
! 			sel = false;
! 		    }
! 	    } 
! 	else
! 	    {
! 		sel = b;
! 	    }
!     }
!     public boolean isSelected()        { return sel; }
! }
  
  
  
  
  
  
  
--- 42,537 ----
  import java.awt.event.ActionListener;
  import java.awt.event.ItemEvent;
  import java.awt.event.ItemListener;
+ import java.awt.event.KeyEvent;
  import java.io.Serializable;
  import java.util.EventListener;
! 
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
! /**
!  * The purpose of this class is to model the dynamic state of an abstract
!  * button. The concrete button type holding this state may be a a "toggle"
!  * button (checkbox, radio button) or a "push" button (menu button, button).
!  * If the model is disabled, only the "selected" property can be changed. An
!  * attempt to change the "armed", "rollover" or "pressed" properties  while
!  * the model is disabled will be blocked. Any successful (non-blocked) change
!  * to the model's properties will trigger the firing of a ChangeEvent. Any
!  * change to the "selected" property will trigger the firing of an ItemEvent
!  * in addition to ChangeEvent. This is true whether the model is enabled or
!  * not. One other state change is special: the transition from "enabled,
!  * armed and pressd" to "enabled, armed and not-pressed". This is considered
!  * the "trailing edge" of a successful mouse click, and therefore fires an
!  * ActionEvent in addition to a ChangeEvent. In all other respects this class
!  * is just a container of boolean flags.
!  *
!  * @author Graydon Hoare (graydon_at_redhat.com)
!  */
! public class DefaultButtonModel implements ButtonModel, Serializable
  {
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = -5342609566534980231L;
  
!   /**
!    * Indicates that the button is <em>partially</em> committed to being
!    * pressed, but not entirely. This usually happens when a user has pressed
!    * but not yet released the mouse button.
!    */
!   public static final int ARMED = 1;
  
!   /**
!    * State constant indicating that the button is enabled. Buttons cannot be
!    * pressed or selected unless they are enabled.
!    */
!   public static final int ENABLED = 8;
  
!   /**
!    * State constant indicating that the user is holding down the button. When
!    * this transitions from true to false, an ActionEvent may be fired,
!    * depending on the value of the "armed" property.
!    */
!   public static final int PRESSED = 4;
  
+   /**
+    * State constant indicating that the mouse is currently positioned over the
+    * button.
+    */
+   public static final int ROLLOVER = 16;
  
!   /**
!    * State constant indicating that the button is selected. This constant is
!    * only meaningful for toggle-type buttons (radio buttons, checkboxes).
!    */
!   public static final int SELECTED = 2;
  
+   /**
+    * Represents the "state properties" (armed, enabled, pressed, rollover and
+    * selected) by a bitwise combination of integer constants.
+    */
+   protected int stateMask = ENABLED;
  
!   /**
!    * List of ItemListeners, ChangeListeners, and ActionListeners registered on
!    * this model.
!    */
!   protected EventListenerList listenerList = new EventListenerList();
!   ;
  
!   /** The single ChangeEvent this model (re)uses to call its ChangeListeners. */
!   protected ChangeEvent changeEvent = new ChangeEvent(this);
  
!   /**
!    * The group this model belongs to. Only one button in a group may be
!    * selected at any given time.
!    */
!   protected ButtonGroup group;
  
!   /**
!    * The key code (one of {@link java.awt.event.KeyEvent} VK_) used to press
!    * this button via a keyboard interface.
!    */
!   protected int mnemonic = KeyEvent.VK_UNDEFINED;
  
+   /**
+    * The string used as the "command" property of any ActionEvent this model
+    * sends.
+    */
+   protected String actionCommand;
  
!   /**
!    * Creates a new DefaultButtonModel object.
!    */
!   public DefaultButtonModel()
!   {
!   }
  
!   /**
!    * Return <code>null</code>. Use {@link AbstractButton} if you wish to
!    * interface with a button via an {@link ItemSelectable} interface.
!    *
!    * @return <code>null</code>
!    */
!   public Object[] getSelectedObjects()
!   {
!     return null;
!   }
  
!   /**
!    * Returns a specified class of listeners.
!    *
!    * @param listenerType the type of listener to return
!    *
!    * @return array of listeners
!    */
!   public EventListener[] getListeners(Class listenerType)
!   {
!     return listenerList.getListeners(listenerType);
!   }
  
!   /**
!    * Add an ActionListener to the model. Usually only called to subscribe an
!    * AbstractButton's listener to the model.
!    *
!    * @param l The listener to add
!    */
!   public void addActionListener(ActionListener l)
!   {
!     listenerList.add(ActionListener.class, l);
!   }
  
!   /**
!    * Remove an ActionListener to the model. Usually only called to unsubscribe
!    * an AbstractButton's listener to the model.
!    *
!    * @param l The listener to remove
!    */
!   public void removeActionListener(ActionListener l)
!   {
!     listenerList.remove(ActionListener.class, l);
!   }
  
!   /**
!    * Returns all registered <code>ActionListener</code> objects.
!    *
!    * @return array of <code>ActionListener</code> objects
!    */
!   public ActionListener[] getActionListeners()
!   {
!     return (ActionListener[]) listenerList.getListeners(ActionListener.class);
!   }
  
!   /**
!    * Add an ItemListener to the model. Usually only called to subscribe an
!    * AbstractButton's listener to the model.
!    *
!    * @param l The listener to add
!    */
!   public void addItemListener(ItemListener l)
!   {
!     listenerList.add(ItemListener.class, l);
!   }
  
!   /**
!    * Remove an ItemListener to the model. Usually only called to unsubscribe
!    * an AbstractButton's listener to the model.
!    *
!    * @param l The listener to remove
!    */
!   public void removeItemListener(ItemListener l)
!   {
!     listenerList.remove(ItemListener.class, l);
!   }
  
+   /**
+    * Returns all registered <code>ItemListener</code> objects.
+    *
+    * @return array of <code>ItemListener</code> objects
+    */
+   public ItemListener[] getItemListeners()
+   {
+     return (ItemListener[]) listenerList.getListeners(ItemListener.class);
+   }
  
+   /**
+    * Add a ChangeListener to the model. Usually only called to subscribe an
+    * AbstractButton's listener to the model.
+    *
+    * @param l The listener to add
+    */
+   public void addChangeListener(ChangeListener l)
+   {
+     listenerList.add(ChangeListener.class, l);
+   }
  
+   /**
+    * Remove a ChangeListener to the model. Usually only called to unsubscribe
+    * an AbstractButton's listener to the model.
+    *
+    * @param l The listener to remove
+    */
+   public void removeChangeListener(ChangeListener l)
+   {
+     listenerList.remove(ChangeListener.class, l);
+   }
+ 
+   /**
+    * Returns all registered <code>ChangeListener</code> objects.
+    *
+    * @return array of <code>ChangeListener</code> objects
+    */
+   public ChangeListener[] getChangeListeners()
+   {
+     return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
+   }
+ 
+   /**
+    * Inform each ItemListener in the {@link listenerList} that an ItemEvent
+    * has occurred. This happens in response to any change to the {@link
+    * stateMask} field.
+    *
+    * @param e The ItemEvent to fire
+    */
+   protected void fireItemStateChanged(ItemEvent e)
+   {
+     ItemListener[] ll = getItemListeners();
+ 
+     for (int i = 0; i < ll.length; i++)
+       ll[i].itemStateChanged(e);
+   }
+ 
+   /**
+    * Inform each ActionListener in the {@link listenerList} that an
+    * ActionEvent has occurred. This happens in response to the any change to
+    * the {@link stateMask} field which makes the enabled, armed and pressed
+    * properties all simultaneously <code>true</code>.
+    *
+    * @param e The ActionEvent to fire
+    */
+   protected void fireActionPerformed(ActionEvent e)
+   {
+     ActionListener[] ll = getActionListeners();
+ 
+     for (int i = 0; i < ll.length; i++)
+       ll[i].actionPerformed(e);
+   }
+ 
+   /**
+    * Inform each ChangeListener in the {@link listenerList} that a ChangeEvent
+    * has occurred. This happens in response to the any change to a property
+    * of the model.
+    */
+   protected void fireStateChanged()
+   {
+     ChangeListener[] ll = getChangeListeners();
+ 
+     for (int i = 0; i < ll.length; i++)
+       ll[i].stateChanged(changeEvent);
+   }
+ 
+   /**
+    * Helper method to fire a ChangeEvent with the model as the event's source.
+    *
+    * @param stateflag DOCUMENT ME!
+    * @param b DOCUMENT ME!
+    */
+   private void changeState(int stateflag, boolean b)
+   {
+     int oldstate = stateMask;
+     int newstate;
+ 
+     if (b)
+       newstate = oldstate | stateflag;
+     else
+       newstate = oldstate & ~ stateflag;
+ 
+     if (oldstate == newstate)
+       return;
+ 
+     if ((stateflag != SELECTED) && (stateflag != ENABLED)
+         && (stateMask & ENABLED) == 0)
+       return;
+ 
+     stateMask = newstate;
+ 
+     fireStateChanged();
+ 
+     if ((oldstate & SELECTED) == 0 && (newstate & SELECTED) == SELECTED)
+       {
+ 	fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
+ 	                                   null, ItemEvent.SELECTED));
+         if (group != null)
+           group.setSelected(this, true);
+       }
+ 
+     else if ((oldstate & SELECTED) == SELECTED && (newstate & SELECTED) == 0)
+       {
+ 	fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
+ 	                                   null, ItemEvent.DESELECTED));
+         if (group != null)
+           group.setSelected(this, false);
+       }
+ 
+     else if (((oldstate & ARMED) == ARMED && (oldstate & PRESSED) == PRESSED)
+              && ((newstate & ARMED) == ARMED && (newstate & PRESSED) == 0))
+       fireActionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
+                                           actionCommand));
+   }
+ 
+   /**
+    * Get the value of the model's "armed" property.
+    *
+    * @return The current "armed" property
+    */
+   public boolean isArmed()
+   {
+     return (stateMask & ARMED) == ARMED;
+   }
+ 
+   /**
+    * Set the value of the model's "armed" property.
+    *
+    * @param a The new "armed" property
+    */
+   public void setArmed(boolean a)
+   {
+     changeState(ARMED, a);
+   }
+ 
+   /**
+    * Get the value of the model's "enabled" property.
+    *
+    * @return The current "enabled" property.
+    */
+   public boolean isEnabled()
+   {
+     return (stateMask & ENABLED) == ENABLED;
+   }
+ 
+   /**
+    * Set the value of the model's "enabled" property.
+    *
+    * @param e The new "enabled" property
+    */
+   public void setEnabled(boolean e)
+   {
+     changeState(ENABLED, e);
+   }
  
+   /**
+    * Set the value of the model's "pressed" property.
+    *
+    * @param p The new "pressed" property
+    */
+   public void setPressed(boolean p)
+   {
+     changeState(PRESSED, p);
+   }
  
+   /**
+    * Get the value of the model's "pressed" property.
+    *
+    * @return The current "pressed" property
+    */
+   public boolean isPressed()
+   {
+     return (stateMask & PRESSED) == PRESSED;
+   }
  
+   /**
+    * Set the value of the model's "rollover" property.
+    *
+    * @param r The new "rollover" property
+    */
+   public void setRollover(boolean r)
+   {
+     changeState(ROLLOVER, r);
+   }
  
+   /**
+    * Set the value of the model's "selected" property.
+    *
+    * @param s The new "selected" property
+    */
+   public void setSelected(boolean s)
+   {
+     changeState(SELECTED, s);
+   }
+ 
+   /**
+    * Get the value of the model's "selected" property.
+    *
+    * @return The current "selected" property
+    */
+   public boolean isSelected()
+   {
+     return (stateMask & SELECTED) == SELECTED;
+   }
+ 
+   /**
+    * Get the value of the model's "rollover" property.
+    *
+    * @return The current "rollover" property
+    */
+   public boolean isRollover()
+   {
+     return (stateMask & ROLLOVER) == ROLLOVER;
+   }
+ 
+   /**
+    * Get the value of the model's "mnemonic" property.
+    *
+    * @return The current "mnemonic" property
+    */
+   public int getMnemonic()
+   {
+     return mnemonic;
+   }
+ 
+   /**
+    * Set the value of the model's "mnemonic" property.
+    *
+    * @param key The new "mnemonic" property
+    */
+   public void setMnemonic(int key)
+   {
+     if (mnemonic != key)
+       {
+ 	mnemonic = key;
+ 	fireStateChanged();
+       }
+   }
+ 
+   /**
+    * Set the value of the model's "actionCommand" property. This property is
+    * used as the "command" property of the {@link ActionEvent} fired from the
+    * model.
+    *
+    * @param s The new "actionCommand" property.
+    */
+   public void setActionCommand(String s)
+   {
+     if (actionCommand != s)
+       {
+ 	actionCommand = s;
+ 	fireStateChanged();
+       }
+   }
+ 
+   /**
+    * Returns the current value of the model's "actionCommand" property.
+    *
+    * @return The current "actionCommand" property
+    */
+   public String getActionCommand()
+   {
+     return actionCommand;
+   }
+ 
+   /**
+    * Set the value of the model's "group" property. The model is said to be a
+    * member of the {@link ButtonGroup} held in its "group" property, and only
+    * one model in a given group can have their "selected" property be
+    * <code>true</code> at a time.
+    *
+    * @param g The new "group" property
+    */
+   public void setGroup(ButtonGroup g)
+   {
+     if (group != g)
+       {
+ 	group = g;
+ 	fireStateChanged();
+       }
+   }
+ 
+   /**
+    * Returns the current value of the model's "group" property.
+    *
+    * @return The value of the "group" property
+    */
+   public ButtonGroup getGroup()
+   {
+     return group;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultCellEditor.java gcc-4.0.0/libjava/javax/swing/DefaultCellEditor.java
*** gcc-3.4.3/libjava/javax/swing/DefaultCellEditor.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/DefaultCellEditor.java	Wed Feb 16 20:02:20 2005
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
*************** import java.awt.event.ItemEvent;
*** 44,49 ****
--- 45,51 ----
  import java.awt.event.ItemListener;
  import java.io.Serializable;
  import java.util.EventObject;
+ 
  import javax.swing.table.TableCellEditor;
  import javax.swing.tree.TreeCellEditor;
  
*************** public class DefaultCellEditor
*** 56,107 ****
    extends AbstractCellEditor
    implements TableCellEditor, TreeCellEditor
  {
!   static final long serialVersionUID = 3564035141373880027L;
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * EditorDelegate
! 	 */
! 	protected class EditorDelegate implements ActionListener, 
! 			ItemListener, Serializable {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * value
! 		 */
! 		protected Object value;
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor EditorDelegate
! 		 * @param value0 TODO
! 		 */
! 		protected EditorDelegate(DefaultCellEditor editor) {
! 			// TODO
! 		} // EditorDelegate()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * setValue
! 		 * @param event TODO
! 		 */
! 		public void setValue(Object event) {
! 			// TODO
! 		} // setValue()
  
  		/**
  		 * getCellEditorValue
--- 58,93 ----
    extends AbstractCellEditor
    implements TableCellEditor, TreeCellEditor
  {
!   private static final long serialVersionUID = 3564035141373880027L;
  
!   /**
!    * EditorDelegate
!    */
!   protected class EditorDelegate
!     implements ActionListener, ItemListener, Serializable
!   {
!     private static final long serialVersionUID = -1420007406015481933L;
  
+     /**
+      * value
+      */
+     protected Object value;
  
!     /**
!      * Constructor EditorDelegate
!      * @param value0 TODO
!      */
!     protected EditorDelegate()
!     {
!     }
  
!     /**
!      * setValue
!      * @param event TODO
!      */
!     public void setValue(Object event)
!     {
!     }
  
  		/**
  		 * getCellEditorValue
*************** public class DefaultCellEditor
*** 172,182 ****
  
  	} // EditorDelegate
  
- 
- 	//-------------------------------------------------------------
- 	// Variables --------------------------------------------------
- 	//-------------------------------------------------------------
- 
  	/**
  	 * editorComponent
  	 */
--- 158,163 ----
*************** public class DefaultCellEditor
*** 192,202 ****
  	 */
  	protected int clickCountToStart;
  
- 
- 	//-------------------------------------------------------------
- 	// Initialization ---------------------------------------------
- 	//-------------------------------------------------------------
- 
  	/**
  	 * Constructor DefaultCellEditor
  	 * @param textfield TODO
--- 173,178 ----
*************** public class DefaultCellEditor
*** 221,231 ****
  		// TODO
  	} // DefaultCellEditor()
  
- 
- 	//-------------------------------------------------------------
- 	// Methods ----------------------------------------------------
- 	//-------------------------------------------------------------
- 
  	/**
  	 * getComponent
  	 * @returns Component
--- 197,202 ----
*************** public class DefaultCellEditor
*** 320,325 ****
  			Object value, boolean isSelected, int row, int column) {
  		return null; // TODO
  	} // getTableCellEditorComponent()
! 
! 
! } // DefaultCellEditor
--- 291,294 ----
  			Object value, boolean isSelected, int row, int column) {
  		return null; // TODO
  	} // getTableCellEditorComponent()
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultCellRenderer.java gcc-4.0.0/libjava/javax/swing/DefaultCellRenderer.java
*** gcc-3.4.3/libjava/javax/swing/DefaultCellRenderer.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/DefaultCellRenderer.java	Thu Jan  1 00:00:00 1970
***************
*** 1,74 ****
- /* DefaultCellRenderer.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.swing;
- 
- // this is what SUN basically told us to do so:
- // no icon though as that's not implemented yet....
- 
- import java.awt.Component;
- 
- public class DefaultCellRenderer extends JLabel implements ListCellRenderer 
- {
-     public Component getListCellRendererComponent(JList list,
- 						  Object value,           
- 						  int index,            
- 						  boolean isSelected,     
- 						  boolean cellHasFocus)   
-     {
- 	String s = value.toString();
- 	setText(s);	
- 
- 	//	System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" + s);
- 
- 
- 	if (isSelected) 
- 	    {
- 		setBackground(list.getSelectionBackground());
- 		setForeground(list.getSelectionForeground());
- 	    }
- 	else 
- 	    {
- 		setBackground(list.getBackground());
- 		setForeground(list.getForeground());
- 	    }
- 
- 	setEnabled(list.isEnabled());
- 	setFont(list.getFont());
- 	return this;
-     }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultComboBoxModel.java gcc-4.0.0/libjava/javax/swing/DefaultComboBoxModel.java
*** gcc-3.4.3/libjava/javax/swing/DefaultComboBoxModel.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/DefaultComboBoxModel.java	Wed Feb 16 20:02:21 2005
*************** exception statement from your version. *
*** 38,183 ****
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.Vector;
  
  /**
!  * DefaultComboBoxModel
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class DefaultComboBoxModel extends AbstractListModel 
! 		implements MutableComboBoxModel, Serializable
  {
!   static final long serialVersionUID = 6698657703676921904L;
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * list
! 	 */
! 	private Vector list;
! 
! 	/**
! 	 * selectedItem
! 	 */
! 	private Object selectedItem;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor DefaultComboBoxModel
! 	 */
! 	public DefaultComboBoxModel() {
! 		// TODO
! 	} // DefaultComboBoxModel()
! 
! 	/**
! 	 * Constructor DefaultComboBoxModel
! 	 * @param items TODO
! 	 */
! 	public DefaultComboBoxModel(Object[] items) {
! 		// TODO
! 	} // DefaultComboBoxModel()
  
! 	/**
! 	 * Constructor DefaultComboBoxModel
! 	 * @param vector TODO
! 	 */
! 	public DefaultComboBoxModel(Vector vector) {
! 		// TODO
! 	} // DefaultComboBoxModel()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * addElement
! 	 * @param object TODO
! 	 */
! 	public void addElement(Object object) {
! 		// TODO
! 	} // addElement()
  
! 	/**
! 	 * removeElementAt
! 	 * @param index TODO
! 	 */
! 	public void removeElementAt(int index) {
! 		// TODO
! 	} // removeElementAt()
  
! 	/**
! 	 * insertElementAt
! 	 * @param object TODO
! 	 * @param index TODO
! 	 */
! 	public void insertElementAt(Object object, int index) {
! 		// TODO
! 	} // insertElementAt()
  
! 	/**
! 	 * removeElement
! 	 * @param object TODO
! 	 */
! 	public void removeElement(Object object) {
! 		// TODO
! 	} // removeElement()
  
! 	/**
! 	 * removeAllElements
! 	 */
! 	public void removeAllElements() {
! 		// TODO
! 	} // removeAllElements()
  
! 	/**
! 	 * getSize
! 	 * @returns int
! 	 */
! 	public int getSize() {
! 		return 0; // TODO
! 	} // getSize()
  
! 	/**
! 	 * setSelectedItem
! 	 * @param object TODO
! 	 */
! 	public void setSelectedItem(Object object) {
! 		// TODO
! 	} // setSelectedItem()
  
! 	/**
! 	 * getSelectedItem
! 	 * @returns Object
! 	 */
! 	public Object getSelectedItem() {
! 		return null; // TODO
! 	} // getSelectedItem()
  
! 	/**
! 	 * getElementAt
! 	 * @param index TODO
! 	 * @returns Object
! 	 */
! 	public Object getElementAt(int index) {
! 		return null; // TODO
! 	} // getElementAt()
  
! 	/**
! 	 * getIndexOf
! 	 * @param object TODO
! 	 * @returns int
! 	 */
! 	public int getIndexOf(Object object) {
! 		return 0; // TODO
! 	} // getIndexOf()
  
  
! } // DefaultComboBoxModel
--- 38,239 ----
  package javax.swing;
  
  import java.io.Serializable;
+ import java.util.Arrays;
  import java.util.Vector;
  
+ 
  /**
!  * DefaultComboBoxModel is a data model for JComboBox. This model keeps track
!  * of elements contained in the JComboBox as well as the current combo box
!  * selection. Whenever selection in the JComboBox changes, the ComboBoxModel
!  * will fire ListDataEvents to ComboBox's ListDataListeners.
!  *
!  * @author Andrew Selkirk
!  * @author Olga Rodimina
!  * @author Robert Schuster
!  * @version 1.0
   */
! public class DefaultComboBoxModel extends AbstractListModel
!   implements MutableComboBoxModel, Serializable
  {
!   private static final long serialVersionUID = 6698657703676921904L;
  
!   /**
!    * List containing items in the combo box
!    */
!   private Vector list;
  
+   /**
+    * Currently selected item in the combo box list
+    */
+   private Object selectedItem = null;
  
!   /**
!    * Constructor DefaultComboBoxModel. Create empty JComboBox.
!    */
!   public DefaultComboBoxModel()
!   {
!     list = new Vector();
!   }
  
!   /**
!    * Constructs new DefaultComboBoxModel object and initializes its item list
!    * to values in the given array.
!    *
!    * @param items array containing items of the combo box.
!    */
!   public DefaultComboBoxModel(Object[] items)
!   {
!     list = new Vector(Arrays.asList(items));
!   }
  
!   /**
!    * Consturcts new DefaultComboBoxModel object and initializes its item list
!    * to values in the given vector.
!    *
!    * @param vector Vector containing items for this combo box.
!    */
!   public DefaultComboBoxModel(Vector vector)
!   {
!     this.list = vector;
!   }
  
!   /**
!    * This method adds element to the combo box list. It fires ListDataEvent
!    * indicating that component was added to the combo box  to all of the
!    * JComboBox's registered ListDataListeners.
!    *
!    * @param object item to add to the combo box list
!    */
!   public void addElement(Object object)
!   {
!     list.add(object);
!     fireIntervalAdded(this, list.size(), list.size());
!   }
  
!   /**
!    * This method removes element at the specified index from the combo box
!    * list. It fires ListDataEvent indicating that component was removed from
!    * the combo box list to all of the JComboBox's registered
!    * ListDataListeners.
!    *
!    * @param index index specifying location of the element to remove in the
!    *        combo box list.
!    */
!   public void removeElementAt(int index)
!   {
!     list.remove(index);
!     fireIntervalRemoved(this, index, index);
!   }
  
!   /**
!    * This method inserts given object to the combo box list at the specified
!    * index. It fires ListDataEvent indicating that component was inserted to
!    * the combo box list to all of the JComboBox's registered
!    * ListDataListeners.
!    *
!    * @param object element to insert
!    * @param index index specifing position in the list where given element
!    *        should be inserted.
!    */
!   public void insertElementAt(Object object, int index)
!   {
!     list.insertElementAt(object, index);
!     fireIntervalAdded(this, index, index);
!   }
  
!   /**
!    * Removes given object from the combo box list. It fires ListDataEvent
!    * indicating that component was removed from the combo box list to all of
!    * the JComboBox's registered ListDataListeners.
!    *
!    * @param object Element that will be removed from the combo box list
!    */
!   public void removeElement(Object object)
!   {
!     int index = getIndexOf(object);
!     if (index != -1)
!       removeElementAt(index);
!   }
  
!   /**
!    * Removes all the items from the JComboBox's item list. It fires
!    * ListDataEvent indicating that all the elements were removed from the
!    * combo box list to all of the JComboBox's registered ListDataListeners.
!    */
!   public void removeAllElements()
!   {
!     int listSize = getSize();
!     list.clear();
!     fireIntervalAdded(this, 0, listSize - 1);
!   }
  
!   /**
!    * Returns number of items in the combo box list
!    *
!    * @return number of items in the combo box list
!    */
!   public int getSize()
!   {
!     return list.size();
!   }
  
!   /**
!    * Selects given object in the combo box list. This method fires
!    * ListDataEvent to all registered ListDataListeners of the JComboBox. The
!    * start and end index of the event is set to -1 to indicate combo box's
!    * selection has changed, and not its contents.
!    * 
!    * <p>If the given object is not contained in the combo box list then nothing
!    * happens.</p>
!    *
!    * @param object item to select in the JComboBox
!    */
!   public void setSelectedItem(Object object)
!   {
!     
!     /* Updates the selected item only if the given object
!      * is null or in the list (this is how the JDK behaves).
!      */ 
!     if(object == null || list.contains(object)) {
! 	selectedItem = object;
! 	fireContentsChanged(this, -1, -1);
!     }
!   	
!   }
  
!   /**
!    * Returns currently selected item in the combo box list
!    *
!    * @return currently selected item in the combo box list
!    */
!   public Object getSelectedItem()
!   {
!     return selectedItem;
!   }
  
+   /**
+    * Returns element in the combo box list located at the given index
+    *
+    * @param index specifying location of the element in the list
+    *
+    * @return return element in the combo box list located at the given index
+    */
+   public Object getElementAt(int index)
+   {
+     return list.elementAt(index);
+   }
  
!   /**
!    * Returns index of the specified object in the combo box list.
!    *
!    * @param object element to look for in the combo box list .
!    *
!    * @return Index specifying position of the specified element in combo box
!    *         list.
!    */
!   public int getIndexOf(Object object)
!   {
!     return list.indexOf(object);
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultDesktopManager.java gcc-4.0.0/libjava/javax/swing/DefaultDesktopManager.java
*** gcc-3.4.3/libjava/javax/swing/DefaultDesktopManager.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/DefaultDesktopManager.java	Wed Feb 16 20:02:21 2005
***************
*** 1,5 ****
  /* DefaultDesktopManager.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultDesktopManager.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,285 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.Rectangle;
  import java.io.Serializable;
  
  /**
!  * DefaultDesktopManager
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
  public class DefaultDesktopManager implements DesktopManager, Serializable
  {
!   static final long serialVersionUID = 4657624909838017887L;
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * HAS_BEEN_ICONIFIED_PROPERTY
! 	 */
! 	static final String HAS_BEEN_ICONIFIED_PROPERTY = ""; // TODO
  
! 	/**
! 	 * DEFAULT_DRAG_MODE
! 	 */
! 	static final int DEFAULT_DRAG_MODE = 0; // TODO
  
! 	/**
! 	 * OUTLINE_DRAG_MODE
! 	 */
! 	static final int OUTLINE_DRAG_MODE = 0; // TODO
  
! 	/**
! 	 * FASTER_DRAG_MODE
! 	 */
! 	static final int FASTER_DRAG_MODE = 0; // TODO
  
! 	/**
! 	 * dragMode
! 	 */
! 	int dragMode;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor DefaultDesktopManager
! 	 */
! 	public DefaultDesktopManager() {
! 		// TODO
! 	} // DefaultDesktopManager()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * openFrame
! 	 * @param frame TODO
! 	 */
! 	public void openFrame(JInternalFrame frame) {
! 		// TODO
! 	} // openFrame()
  
! 	/**
! 	 * closeFrame
! 	 * @param frame TODO
! 	 */
! 	public void closeFrame(JInternalFrame frame) {
! 		// TODO
! 	} // closeFrame()
  
! 	/**
! 	 * maximizeFrame
! 	 * @param frame TODO
! 	 */
! 	public void maximizeFrame(JInternalFrame frame) {
! 		// TODO
! 	} // maximizeFrame()
  
! 	/**
! 	 * minimizeFrame
! 	 * @param frame TODO
! 	 */
! 	public void minimizeFrame(JInternalFrame frame) {
! 		// TODO
! 	} // minimizeFrame()
  
! 	/**
! 	 * iconifyFrame
! 	 * @param frame TODO
! 	 */
! 	public void iconifyFrame(JInternalFrame frame) {
! 		// TODO
! 	} // iconifyFrame()
  
! 	/**
! 	 * deiconifyFrame
! 	 * @param frame TODO
! 	 */
! 	public void deiconifyFrame(JInternalFrame frame) {
! 		// TODO
! 	} // deiconifyFrame()
  
! 	/**
! 	 * activateFrame
! 	 * @param frame TODO
! 	 */
! 	public void activateFrame(JInternalFrame frame) {
! 		// TODO
! 	} // activateFrame()
  
! 	/**
! 	 * deactivateFrame
! 	 * @param frame TODO
! 	 */
! 	public void deactivateFrame(JInternalFrame frame) {
! 		// TODO
! 	} // deactivateFrame()
  
! 	/**
! 	 * beginDraggingFrame
! 	 * @param component TODO
! 	 */
! 	public void beginDraggingFrame(JComponent component) {
! 		// TODO
! 	} // beginDraggingFrame()
  
! 	/**
! 	 * dragFrame
! 	 * @param component TODO
! 	 * @param newX TODO
! 	 * @param newY TODO
! 	 */
! 	public void dragFrame(JComponent component, int newX, int newY) {
! 		// TODO
! 	} // dragFrame()
  
! 	/**
! 	 * endDraggingFrame
! 	 * @param component TODO
! 	 */
! 	public void endDraggingFrame(JComponent component) {
! 		// TODO
! 	} // endDraggingFrame()
  
! 	/**
! 	 * beginResizingFrame
! 	 * @param component TODO
! 	 * @param direction TODO
! 	 */
! 	public void beginResizingFrame(JComponent component, int direction) {
! 		// TODO
! 	} // beginResizingFrame()
  
! 	/**
! 	 * resizeFrame
! 	 * @param component TODO
! 	 * @param newX TODO
! 	 * @param newY TODO
! 	 * @param newWidth TODO
! 	 * @param newHeight TODO
! 	 */
! 	public void resizeFrame(JComponent component, int newX, int newY,
! 			int newWidth, int newHeight) {
! 		// TODO
! 	} // resizeFrame()
  
! 	/**
! 	 * endResizingFrame
! 	 * @param component TODO
! 	 */
! 	public void endResizingFrame(JComponent component) {
! 		// TODO
! 	} // endResizingFrame()
  
! 	/**
! 	 * setBoundsForFrame
! 	 * @param component TODO
! 	 * @param newX TODO
! 	 * @param newY TODO
! 	 * @param newWidth TODO
! 	 * @param newHeight TODO
! 	 */
! 	public void setBoundsForFrame(JComponent component, int newX,
! 			int newY, int newWidth, int newHeight) {
! 		// TODO
! 	} // setBoundsForFrame()
  
! 	/**
! 	 * removeIconFor
! 	 * @param frame TODO
! 	 */
! 	protected void removeIconFor(JInternalFrame frame) {
! 		// TODO
! 	} // removeIconFor()
  
! 	/**
! 	 * getBoundsForIconOf
! 	 * @param frame TODO
! 	 * @returns Rectangle
! 	 */
! 	protected Rectangle getBoundsForIconOf(JInternalFrame frame) {
! 		return null; // TODO
! 	} // getBoundsForIconOf()
  
! 	/**
! 	 * setPreviousBounds
! 	 * @param frame TODO
! 	 * @param rect TODO
! 	 */
! 	protected void setPreviousBounds(JInternalFrame frame, Rectangle rect) {
! 		// TODO
! 	} // setPreviousBounds()
  
! 	/**
! 	 * getPreviousBounds
! 	 * @param frame TODO
! 	 * @returns Rectangle
! 	 */
! 	protected Rectangle getPreviousBounds(JInternalFrame frame) {
! 		return null; // TODO
! 	} // getPreviousBounds()
  
! 	/**
! 	 * setWasIcon
! 	 * @param frame TODO
! 	 * @param value TODO
! 	 */
! 	protected void setWasIcon(JInternalFrame frame, Boolean value) {
! 		// TODO
! 	} // setWasIcon()
  
! 	/**
! 	 * wasIcon
! 	 * @param frame TODO
! 	 * @returns boolean
! 	 */
! 	protected boolean wasIcon(JInternalFrame frame) {
! 		return false; // TODO
! 	} // wasIcon()
  
  
! } // DefaultDesktopManager
--- 35,627 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.Insets;
  import java.awt.Rectangle;
+ import java.beans.PropertyVetoException;
  import java.io.Serializable;
  
+ import javax.swing.JInternalFrame.JDesktopIcon;
+ 
  /**
!  * DefaultDesktopManager is the default implementation of DesktopManager for
!  * swing. It implements the basic beaviours for JInternalFrames in arbitrary
!  * parents. The methods provided by the class are not meant to be called by
!  * the user, instead, the JInternalFrame methods will call these methods.
   */
  public class DefaultDesktopManager implements DesktopManager, Serializable
  {
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = 4657624909838017887L;
  
!   /** The property change event fired when the wasIcon property changes. */
!   static final String WAS_ICON_ONCE_PROPERTY = "wasIconOnce";
  
!   /**
!    * The method of dragging used by the JDesktopPane that parents the
!    * JInternalFrame that is being dragged.
!    */
!   private int currentDragMode = 0;
  
!   /**
!    * The cache of the bounds used to draw the outline rectangle when
!    * OUTLINE_DRAG_MODE is used.
!    */
!   private transient Rectangle dragCache = new Rectangle();
  
!   /**
!    * A cached JDesktopPane that is stored when the JInternalFrame is initially
!    * dragged.
!    */
!   private transient Container pane;
  
!   /**
!    * An array of Rectangles that holds the bounds of the JDesktopIcons in the
!    * JDesktopPane when looking for where to place a new icon.
!    */
!   private transient Rectangle[] iconRects;
  
!   /**
!    * This creates a new DefaultDesktopManager object.
!    */
!   public DefaultDesktopManager()
!   {
!   }
  
+   /**
+    * This method is not normally called since the user will typically add the
+    * JInternalFrame to a Container. If this is called, it will try to
+    * determine the parent of the JInternalFrame and remove any icon that
+    * represents this JInternalFrame and add this JInternalFrame.
+    *
+    * @param frame The JInternalFrame to open.
+    */
+   public void openFrame(JInternalFrame frame)
+   {
+     Container c = frame.getParent();
+     if (c == null)
+       c = frame.getDesktopIcon().getParent();
+     if (c == null)
+       return;
  
!     c.remove(frame.getDesktopIcon());
!     c.add(frame);
!     frame.setVisible(true);
!   }
  
!   /**
!    * This method removes the JInternalFrame and JDesktopIcon (if one is
!    * present) from their parents.
!    *
!    * @param frame The JInternalFrame to close.
!    */
!   public void closeFrame(JInternalFrame frame)
!   {
!     Container c = frame.getParent();
!     frame.doDefaultCloseAction();
  
+     if (c != null)
+       {
+ 	if (frame.isIcon())
+ 	  c.remove(frame.getDesktopIcon());
+ 	else
+ 	  c.remove(frame);
+ 	c.repaint();
+       }
+   }
  
!   /**
!    * This method resizes the JInternalFrame to match its parent's bounds.
!    *
!    * @param frame The JInternalFrame to maximize.
!    */
!   public void maximizeFrame(JInternalFrame frame)
!   {
!     // Can't maximize from iconified state.
!     // It can only return to maximized state, but that would fall under
!     // deiconify.
!     if (frame.isIcon())
!       return;
!     frame.setNormalBounds(frame.getBounds());
  
!     Container p = frame.getParent();
!     if (p != null)
!       {
! 	Rectangle pBounds = p.getBounds();
! 	Insets insets = p.getInsets();
! 	pBounds.width -= insets.left + insets.right;
! 	pBounds.height -= insets.top + insets.bottom;
  
! 	setBoundsForFrame(frame, 0, 0, pBounds.width, pBounds.height);
!       }
!     if (p instanceof JDesktopPane)
!       ((JDesktopPane) p).setSelectedFrame(frame);
!     else
!       {
! 	try
! 	  {
! 	    frame.setSelected(true);
! 	  }
! 	catch (PropertyVetoException e)
! 	  {
! 	    // Do nothing.
! 	  }
!       }
!   }
  
!   /**
!    * This method restores the JInternalFrame's bounds to what they were
!    * previous to the setMaximize call.
!    *
!    * @param frame The JInternalFrame to minimize.
!    */
!   public void minimizeFrame(JInternalFrame frame)
!   {
!     Rectangle normalBounds = frame.getNormalBounds();
  
!     JDesktopPane p = frame.getDesktopPane();
!     if (p != null)
!       p.setSelectedFrame(frame);
!     else
!       {
! 	try
! 	  {
! 	    frame.setSelected(true);
! 	  }
! 	catch (PropertyVetoException e)
! 	  {
! 	    // Do nothing.
! 	  }
!       }
  
!     setBoundsForFrame(frame, normalBounds.x, normalBounds.y,
!                       normalBounds.width, normalBounds.height);
!   }
  
!   /**
!    * This method removes the JInternalFrame from its parent and adds its
!    * JDesktopIcon representation.
!    *
!    * @param frame The JInternalFrame to iconify.
!    */
!   public void iconifyFrame(JInternalFrame frame)
!   {
!     JDesktopPane p = frame.getDesktopPane();
!     JDesktopIcon icon = frame.getDesktopIcon();
!     if (p != null && p.getSelectedFrame() == frame)
!       p.setSelectedFrame(null);
!     else
!       {
! 	try
! 	  {
! 	    frame.setSelected(false);
! 	  }
! 	catch (PropertyVetoException e)
! 	  {
! 	  }
!       }
  
!     Container c = frame.getParent();
  
!     if (! wasIcon(frame))
!       {
! 	Rectangle r = getBoundsForIconOf(frame);
! 	icon.setBounds(r);
! 	setWasIcon(frame, Boolean.TRUE);
!       }
  
!     if (c != null)
!       {
! 	if (icon != null)
! 	  {
! 	    c.add(icon);
! 	    icon.setVisible(true);
! 	  }
! 	c.remove(frame);
!       }
!   }
  
!   /**
!    * This method removes the JInternalFrame's JDesktopIcon representation and
!    * adds the JInternalFrame back to its parent.
!    *
!    * @param frame The JInternalFrame to deiconify.
!    */
!   public void deiconifyFrame(JInternalFrame frame)
!   {
!     JDesktopIcon icon = frame.getDesktopIcon();
!     Container c = icon.getParent();
  
!     removeIconFor(frame);
!     c.add(frame);
!     frame.setVisible(true);
  
!     if (! frame.isSelected())
!       {
! 	JDesktopPane p = frame.getDesktopPane();
! 	if (p != null)
! 	  p.setSelectedFrame(frame);
! 	else
! 	  {
! 	    try
! 	      {
! 		frame.setSelected(true);
! 	      }
! 	    catch (PropertyVetoException e)
! 	      {
! 		// Do nothing.
! 	      }
! 	  }
!       }
  
!     c.invalidate();
!   }
  
!   /**
!    * This method activates the JInternalFrame by moving it to the front and
!    * selecting it.
!    *
!    * @param frame The JInternalFrame to activate.
!    */
!   public void activateFrame(JInternalFrame frame)
!   {
!     JDesktopPane p = frame.getDesktopPane();
  
!     if (p != null)
!       p.setSelectedFrame(frame);
!     else
!       {
! 	try
! 	  {
! 	    frame.setSelected(true);
! 	  }
! 	catch (PropertyVetoException e)
! 	  {
! 	  }
!       }
  
!     frame.toFront();
!   }
  
!   /**
!    * This method is called when the JInternalFrame loses focus.
!    *
!    * @param frame The JInternalFram to deactivate.
!    */
!   public void deactivateFrame(JInternalFrame frame)
!   {
!     JDesktopPane p = frame.getDesktopPane();
!     if (p != null)
!       {
! 	if (p.getSelectedFrame() == frame)
! 	  p.setSelectedFrame(null);
!       }
!     else
!       {
! 	try
! 	  {
! 	    frame.setSelected(false);
! 	  }
! 	catch (PropertyVetoException e)
! 	  {
! 	  }
!       }
!   }
  
!   /**
!    * This method is called to indicate that the DesktopManager should prepare
!    * to drag the JInternalFrame. Any state information needed to drag the
!    * frame will be prepared now.
!    *
!    * @param component The JComponent to drag, usually a JInternalFrame.
!    */
!   public void beginDraggingFrame(JComponent component)
!   {
!     if (component instanceof JDesktopIcon)
!       pane = ((JDesktopIcon) component).getInternalFrame().getDesktopPane();
!     else
!       pane = ((JInternalFrame) component).getDesktopPane();
!     if (pane == null)
!       return;
  
!     dragCache = component.getBounds();
  
!     if (! (pane instanceof JDesktopPane))
!       currentDragMode = JDesktopPane.LIVE_DRAG_MODE;
!     else
!       currentDragMode = ((JDesktopPane) pane).getDragMode();
!   }
  
!   /**
!    * This method is called to drag the JInternalFrame to a new location.
!    *
!    * @param component The JComponent to drag, usually a JInternalFrame.
!    * @param newX The new x coordinate.
!    * @param newY The new y coordinate.
!    */
!   public void dragFrame(JComponent component, int newX, int newY)
!   {
!     if (currentDragMode == JDesktopPane.OUTLINE_DRAG_MODE)
!       {
! 	// FIXME: Do outline drag mode painting.
!       }
!     else
!       {
! 	Rectangle b = component.getBounds();
! 	if (component instanceof JDesktopIcon)
! 	  component.setBounds(newX, newY, b.width, b.height);
! 	else
! 	  setBoundsForFrame((JInternalFrame) component, newX, newY, b.width,
! 	                    b.height);
!       }
!   }
! 
!   /**
!    * This method indicates that the dragging is done. Any state information
!    * stored by the DesktopManager can be cleared.
!    *
!    * @param component The JComponent that has finished dragging.
!    */
!   public void endDraggingFrame(JComponent component)
!   {
!     if (currentDragMode == JDesktopPane.OUTLINE_DRAG_MODE)
!       {
! 	setBoundsForFrame((JInternalFrame) component, dragCache.x,
! 	                  dragCache.y, dragCache.width, dragCache.height);
! 	pane = null;
! 	dragCache = null;
!       }
!     component.repaint();
!   }
  
+   /**
+    * This method is called to indicate that the given JComponent will be
+    * resized. Any state information necessary to resize the JComponent will
+    * be prepared now.
+    *
+    * @param component The JComponent to resize, usually a JInternalFrame.
+    * @param direction The direction to drag in (a SwingConstant).
+    */
+   public void beginResizingFrame(JComponent component, int direction)
+   {
+     pane = ((JInternalFrame) component).getDesktopPane();
+     if (pane == null)
+       return;
  
!     dragCache = component.getBounds();
!     if (! (pane instanceof JDesktopPane))
!       currentDragMode = JDesktopPane.LIVE_DRAG_MODE;
!     else
!       currentDragMode = ((JDesktopPane) pane).getDragMode();
!   }
! 
!   /**
!    * This method resizes the give JComponent.
!    *
!    * @param component The JComponent to resize.
!    * @param newX The new x coordinate.
!    * @param newY The new y coordinate.
!    * @param newWidth The new width.
!    * @param newHeight The new height.
!    */
!   public void resizeFrame(JComponent component, int newX, int newY,
!                           int newWidth, int newHeight)
!   {
!     dragCache.setBounds(newX, newY, newWidth, newHeight);
! 
!     if (currentDragMode == JDesktopPane.OUTLINE_DRAG_MODE)
!       {
! 	// FIXME: Do outline drag painting.
!       }
!     else
!       setBoundsForFrame(component, dragCache.x, dragCache.y, dragCache.width,
!                         dragCache.height);
!   }
! 
!   /**
!    * This method is called to indicate that the given JComponent has finished
!    * dragging. Any state information stored by the DesktopManager can be
!    * cleared.
!    *
!    * @param component The JComponent that finished resizing.
!    */
!   public void endResizingFrame(JComponent component)
!   {
!     if (currentDragMode == JDesktopPane.OUTLINE_DRAG_MODE)
!       {
! 	setBoundsForFrame((JInternalFrame) component, dragCache.x,
! 	                  dragCache.y, dragCache.width, dragCache.height);
! 	pane = null;
! 	dragCache = null;
!       }
!     component.repaint();
!   }
! 
!   /**
!    * This method calls setBounds with the given parameters and repaints the
!    * JComponent.
!    *
!    * @param component The JComponent to set bounds for.
!    * @param newX The new x coordinate.
!    * @param newY The new y coordinate.
!    * @param newWidth The new width.
!    * @param newHeight The new height.
!    */
!   public void setBoundsForFrame(JComponent component, int newX, int newY,
!                                 int newWidth, int newHeight)
!   {
!     component.setBounds(newX, newY, newWidth, newHeight);
!     component.revalidate();
! 
!     // If not null, I'd rather repaint the parent
!     if (component.getParent() != null)
!       component.getParent().repaint();
!     else
!       component.repaint();
!   }
! 
!   /**
!    * This is a helper method that removes the JDesktopIcon of the given
!    * JInternalFrame from the parent.
!    *
!    * @param frame The JInternalFrame to remove an icon for.
!    */
!   protected void removeIconFor(JInternalFrame frame)
!   {
!     JDesktopIcon icon = frame.getDesktopIcon();
!     Container c = icon.getParent();
!     if (c != null && icon != null)
!       c.remove(icon);
!   }
! 
!   /**
!    * This method is called by iconifyFrame to determine the bounds of the
!    * JDesktopIcon for the given JInternalFrame.
!    *
!    * @param frame The JInternalFrame to find the bounds of its JDesktopIcon
!    *        for.
!    *
!    * @return The bounds of the JDesktopIcon.
!    */
!   protected Rectangle getBoundsForIconOf(JInternalFrame frame)
!   {
!     // IconRects has no order to it.
!     // The icon _must_ be placed in the first free slot (working from 
!     // the bottom left corner)
!     // The icon also must not be placed where another icon is placed 
!     // (regardless whether that frame is an icon currently or not)
!     JDesktopPane desktopPane = frame.getDesktopPane();
!     Rectangle paneBounds = desktopPane.getBounds();
!     Insets insets = desktopPane.getInsets();
!     Dimension pref = frame.getDesktopIcon().getPreferredSize();
! 
!     if (desktopPane == null)
!       return frame.getDesktopIcon().getBounds();
! 
!     Component[] frames = desktopPane.getComponents();
! 
!     int count = 0;
!     for (int i = 0, j = 0; i < frames.length; i++)
!       if (frames[i] instanceof JDesktopIcon
!           || frames[i] instanceof JInternalFrame
!           && ((JInternalFrame) frames[i]).getWasIcon() && frames[i] != frame)
! 	count++;
!     iconRects = new Rectangle[count];
!     for (int i = 0, j = 0; i < frames.length; i++)
!       if (frames[i] instanceof JDesktopIcon)
! 	iconRects[--count] = frames[i].getBounds();
!       else if (frames[i] instanceof JInternalFrame
!                && ((JInternalFrame) frames[i]).getWasIcon()
!                && frames[i] != frame)
! 	iconRects[--count] = ((JInternalFrame) frames[i]).getDesktopIcon()
! 	                      .getBounds();
! 
!     int startingX = insets.left;
!     int startingY = paneBounds.height - insets.bottom - pref.height;
!     Rectangle ideal = new Rectangle(startingX, startingY, pref.width,
!                                     pref.height);
!     boolean clear = true;
! 
!     while (iconRects.length > 0)
!       {
! 	clear = true;
! 	for (int i = 0; i < iconRects.length; i++)
! 	  {
! 	    if (iconRects[i] != null && iconRects[i].intersects(ideal))
! 	      {
! 		clear = false;
! 		break;
! 	      }
! 	  }
! 	if (clear)
! 	  return ideal;
! 
! 	startingX += pref.width;
! 	if (startingX + pref.width > paneBounds.width - insets.right)
! 	  {
! 	    startingX = insets.left;
! 	    startingY -= pref.height;
! 	  }
! 	ideal.setBounds(startingX, startingY, pref.width, pref.height);
!       }
! 
!     return ideal;
!   }
! 
!   /**
!    * This method sets the bounds of the JInternalFrame right before the
!    * maximizeFrame call.
!    *
!    * @param frame The JInternalFrame being maximized.
!    * @param rect The normal bounds.
!    */
!   protected void setPreviousBounds(JInternalFrame frame, Rectangle rect)
!   {
!     frame.setNormalBounds(rect);
!   }
! 
!   /**
!    * This method returns the normal bounds of the JInternalFrame from before
!    * the maximize call.
!    *
!    * @param frame The JInternalFrame that is being restored.
!    *
!    * @return The previous bounds of the JInternalFrame.
!    */
!   protected Rectangle getPreviousBounds(JInternalFrame frame)
!   {
!     return frame.getNormalBounds();
!   }
! 
!   /**
!    * This method sets the value to true if the given JInternalFrame has been
!    * iconized and the bounds of its DesktopIcon are valid.
!    *
!    * @param frame The JInternalFrame for the JDesktopIcon.
!    * @param value True if the JInternalFrame has been iconized and the bounds
!    *        of the JDesktopIcon are valid.
!    */
!   protected void setWasIcon(JInternalFrame frame, Boolean value)
!   {
!     frame.setWasIcon(value.booleanValue(), WAS_ICON_ONCE_PROPERTY);
!   }
! 
!   /**
!    * This method returns true if the given JInternalFrame has been iconized
!    * and the bounds of its DesktopIcon are valid.
!    *
!    * @param frame The JInternalFrame for the JDesktopIcon.
!    *
!    * @return True if the given JInternalFrame has been iconized and the bounds
!    *         of its DesktopIcon are valid.
!    */
!   protected boolean wasIcon(JInternalFrame frame)
!   {
!     return frame.getWasIcon();
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultListCellRenderer.java gcc-4.0.0/libjava/javax/swing/DefaultListCellRenderer.java
*** gcc-3.4.3/libjava/javax/swing/DefaultListCellRenderer.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/DefaultListCellRenderer.java	Wed Feb 16 20:02:22 2005
*************** this exception to your version of the li
*** 35,254 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Rectangle;
  import java.io.Serializable;
  import javax.swing.border.Border;
  
  /**
!  * DefaultListCellRenderer
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class DefaultListCellRenderer extends JLabel 
! 		implements ListCellRenderer, Serializable
  {
!   static final long serialVersionUID = 7708947179685189462L;
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * UIResource
! 	 */
! 	public static class UIResource extends DefaultListCellRenderer 
! 			implements javax.swing.plaf.UIResource {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor UIResource
! 		 */
! 		public UIResource() {
! 			// TODO
! 		} // UIResource()
! 
! 
! 	} // UIResource
! 
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * noFocusBorder
! 	 */
! 	protected static Border noFocusBorder = null; // TODO
! 
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor DefaultListCellRenderer
! 	 */
! 	public DefaultListCellRenderer() {
! 		// TODO
! 	} // DefaultListCellRenderer()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * getListCellRendererComponent
! 	 * @param list TODO
! 	 * @param value TODO
! 	 * @param index TODO
! 	 * @param isSelected TODO
! 	 * @param cellHasFocus TODO
! 	 * @returns Component
! 	 */
! 	public Component getListCellRendererComponent(JList list,
! 			Object value, int index, boolean isSelected, boolean cellHasFocus) {
! 		return null; // TODO
! 	} // getListCellRendererComponent()
  
! 	/**
! 	 * validate
! 	 */
! 	public void validate() {
! 		// TODO
! 	} // validate()
  
! 	/**
! 	 * revalidate
! 	 */
! 	public void revalidate() {
! 		// TODO
! 	} // revalidate()
  
! 	/**
! 	 * repaint
! 	 * @param tm TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 */
! 	public void repaint(long tm, int x, int y, int w, int h) {
! 		// TODO
! 	} // repaint()
  
! 	/**
! 	 * repaint
! 	 * @param rect TODO
! 	 */
! 	public void repaint(Rectangle rect) {
! 		// TODO
! 	} // repaint()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	protected void firePropertyChange(String propertyName,
! 			Object oldValue, Object newValue) {
! 		// TODO
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	public void firePropertyChange(String propertyName, 
! 			byte oldValue, byte newValue) {
! 		// TODO
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	public void firePropertyChange(String propertyName, 
! 			char oldValue, char newValue) {
! 		// TODO
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	public void firePropertyChange(String propertyName, 
! 			short oldValue, short newValue) {
! 		// TODO
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	public void firePropertyChange(String propertyName, 
! 			int oldValue, int newValue) {
! 		// TODO
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	public void firePropertyChange(String propertyName, 
! 			long oldValue, long newValue) {
! 		// TODO
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	public void firePropertyChange(String propertyName, 
! 			float oldValue, float newValue) {
! 		// TODO
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	public void firePropertyChange(String propertyName, 
! 			double oldValue, double newValue) {
! 		// TODO
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param propertyName TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	public void firePropertyChange(String propertyName, 
! 			boolean oldValue, boolean newValue) {
! 		// TODO
! 	} // firePropertyChange()
  
  
! } // DefaultListCellRenderer
--- 35,179 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Rectangle;
  import java.io.Serializable;
+ 
  import javax.swing.border.Border;
+ import javax.swing.border.EmptyBorder;
  
  /**
!  * DefaultListCellRenderer. This class is responsible for rendering  list
!  * cells.
!  *
!  * @author Andrew Selkirk
!  * @version 1.0
   */
! public class DefaultListCellRenderer extends JLabel
!   implements ListCellRenderer, Serializable
  {
!   private static final long serialVersionUID = 7708947179685189462L;
  
!   public static class UIResource extends DefaultListCellRenderer
!     implements javax.swing.plaf.UIResource
!   {
!     public UIResource()
!     {
!     }
!   }
  
!   /**
!    * This border is used whenever renderer doesn't have a focus.
!    */
!   protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
  
+   /**
+    * getListCellRendererComponent
+    *
+    * @param list JList list for the 'value'
+    * @param value object that should be rendered in the cell
+    * @param index index of the cell
+    * @param isSelected draw cell highlighted if isSelected is true
+    * @param cellHasFocus draw focus rectangle around cell if the cell has
+    *        focus
+    *
+    * @return Component that will be painted to the desired cell.
+    */
+   public Component getListCellRendererComponent(JList list, Object value,
+                                                 int index, boolean isSelected,
+                                                 boolean cellHasFocus)
+   {
+     String s = value.toString();
+     setText(s);
+     setOpaque(true);
+     setHorizontalAlignment(LEFT);
  
!     if (isSelected)
!       {
! 	setBackground(list.getSelectionBackground());
! 	setForeground(list.getSelectionForeground());
!       }
!     else
!       {
! 	setBackground(list.getBackground());
! 	setForeground(list.getForeground());
!       }
  
!     setEnabled(list.isEnabled());
!     setFont(list.getFont());
  
!     // Use focusCellHighlightBorder when renderer has focus and 
!     // noFocusBorder otherwise
!     
!     if (cellHasFocus)
!       setBorder(UIManager.getBorder("List.focusCellHighlightBorder"));
!     else
!       setBorder(noFocusBorder);
  
!     return this;
!   }
  
!   public void validate()
!   {
!   }
  
!   public void revalidate()
!   {
!   }
  
!   public void repaint(long tm, int x, int y, int w, int h)
!   {
!   }
  
!   public void repaint(Rectangle rect)
!   {
!   }
  
!   protected void firePropertyChange(String propertyName, Object oldValue,
!                                     Object newValue)
!   {
!   }
  
!   public void firePropertyChange(String propertyName, byte oldValue,
!                                  byte newValue)
!   {
!   }
  
!   public void firePropertyChange(String propertyName, char oldValue,
!                                  char newValue)
!   {
!   }
  
!   public void firePropertyChange(String propertyName, short oldValue,
!                                  short newValue)
!   {
!   }
  
!   public void firePropertyChange(String propertyName, int oldValue,
!                                  int newValue)
!   {
!   }
  
!   public void firePropertyChange(String propertyName, long oldValue,
!                                  long newValue)
!   {
!   }
  
!   public void firePropertyChange(String propertyName, float oldValue,
!                                  float newValue)
!   {
!   }
  
+   public void firePropertyChange(String propertyName, double oldValue,
+                                  double newValue)
+   {
+   }
  
!   public void firePropertyChange(String propertyName, boolean oldValue,
!                                  boolean newValue)
!   {
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultListModel.java gcc-4.0.0/libjava/javax/swing/DefaultListModel.java
*** gcc-3.4.3/libjava/javax/swing/DefaultListModel.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/DefaultListModel.java	Wed Feb 16 20:02:22 2005
***************
*** 1,5 ****
  /* DefaultListModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultListModel.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,533 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- 
  package javax.swing;
  
- import java.util.ArrayList;
  import java.util.Enumeration;
- import java.util.NoSuchElementException;
  import java.util.Vector;
  
  /**
!  * DefaultListModel
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
  public class DefaultListModel extends AbstractListModel
  {
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * elements.  Note: Sun obviously implemented the storage as a
! 	 * Vector according to the similar API on this class.  I choose
! 	 * instead to implement the model with a proper collection object.
! 	 * Is this a good choice?  Probably not (ya..I know there are
! 	 * sync issues by doing this)
! 	 */
! 	private ArrayList elements = new ArrayList();
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor DefaultListModel
! 	 */
! 	public DefaultListModel() {
! 		// TODO
! 	} // DefaultListModel()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * elementAt
! 	 * @param index TODO
! 	 * @returns Object
! 	 */
! 	public Object elementAt(int index) {
! 		return elements.get(index);
! 	} // elementAt()
! 
! 	/**
! 	 * toString
! 	 * @returns String
! 	 */
! 	public String toString() {
! 		return elements.toString();
! 	} // toString()
! 
! 	/**
! 	 * indexOf
! 	 * @param element TODO
! 	 * @returns int
! 	 */
! 	public int indexOf(Object element) {
! 		return elements.indexOf(element);
! 	} // indexOf()
! 
! 	/**
! 	 * indexOf
! 	 * @param element TODO
! 	 * @param startIndex TODO
! 	 * @returns int
! 	 */
! 	public int indexOf(Object element, int startIndex) {
! 
! 		// Variables
! 		int		index;
! 		Object	test;
! 
! 		// Process Elements
! 		for (index = startIndex; index < elements.size(); index++) {
! 			test = elements.get(index);
! 			if (test.equals(element) == true) {
! 				return index;
! 			} // if
! 		} // for
! 		return -1;
! 
! 	} // indexOf()
! 
! 	/**
! 	 * lastIndexOf
! 	 * @param element TODO
! 	 * @returns int
! 	 */
! 	public int lastIndexOf(Object element) {
! 		return elements.lastIndexOf(element);
! 	} // lastIndexOf()
! 
! 	/**
! 	 * lastIndexOf
! 	 * @param element TODO
! 	 * @param endIndex TODO
! 	 * @returns int
! 	 */
! 	public int lastIndexOf(Object element, int endIndex) {
! 
! 		// Variables
! 		int		index;
! 		Object	test;
! 
! 		// Process Elements
! 		for (index = endIndex; index >= 0; index--) {
! 			test = elements.get(index);
! 			if (test.equals(element) == true) {
! 				return index;
! 			} // if
! 		} // for
! 		return -1;
! 
! 	} // lastIndexOf()
! 
! 	/**
! 	 * get
! 	 * @param index TODO
! 	 * @returns Object
! 	 */
! 	public Object get(int index) {
! 		return elements.get(index);
! 	} // get()
! 
! 	/**
! 	 * set
! 	 * @param index TODO
! 	 * @param element TODO
! 	 * @returns Object
! 	 */
! 	public Object set(int index, Object element) {
! 
! 		// Variables
! 		Object	result;
! 
! 		// Process Action
! 		result = elements.set(index, element);
! 
! 		// Send event
! 		fireContentsChanged(this, index, index);
! 
! 		return result;
! 
! 	} // set()
! 
! 	/**
! 	 * add
! 	 * @param index TODO
! 	 * @param element TODO
! 	 */
! 	public void add(int index, Object element) {
! 
! 		// Process Action
! 		elements.add(index, element);
! 
! 		// Send event
! 		fireContentsChanged(this, index, index);
! 
! 	} // add()
! 
! 	/**
! 	 * addElement
! 	 * @param element TODO
! 	 */
! 	public void addElement(Object element) {
! 
! 		// Process Action
! 		elements.add(element);
! 
! 		// Send event
! 		fireIntervalAdded(this, elements.size(), elements.size());
! 
! 	} // addElement()
! 
! 	/**
! 	 * size
! 	 * @returns int
! 	 */
! 	public int size() {
! 		return elements.size();
! 	} // size()
! 
! 	/**
! 	 * toArray
! 	 * @returns Object[]
! 	 */
! 	public Object[] toArray() {
! 		return elements.toArray();
! 	} // toArray()
! 
! 	/**
! 	 * contains
! 	 * @param element TODO
! 	 * @returns boolean
! 	 */
! 	public boolean contains(Object element) {
! 		return elements.contains(element);
! 	} // contains()
! 
! 	/**
! 	 * copyInto
! 	 * @param array TODO
! 	 */
! 	public void copyInto(Object[] array) {
! 
! 		// Variables
! 		int		index;
! 		int		size;
! 		Object[]	srcArray;
! 
! 		// Initialize
! 		size = size();
! 		srcArray = toArray();
! 
! 		// Process Elements
! 		for (index = 0; index < size; index++) {
! 			array[index] = srcArray[index];
! 		} // for
! 
! 	} // copyInto()
! 
! 	/**
! 	 * clear
! 	 */
! 	public void clear() {
! 
! 		// Process Action
! 		elements.clear();
! 
! 		// Send event
! 		fireIntervalRemoved(this, 0, elements.size());
! 
! 	} // clear()
! 
! 	/**
! 	 * remove
! 	 * @param index TODO
! 	 * @returns Object
! 	 */
! 	public Object remove(int index) {
! 
! 		// Variables
! 		Object	result;
! 
! 		// Process Action
! 		result = elements.remove(index);
! 
! 		// Send event
! 		fireIntervalRemoved(this, index, index);
! 
! 		return result;
! 
! 	} // remove()
! 
! 	/**
! 	 * isEmpty
! 	 * @returns boolean
! 	 */
! 	public boolean isEmpty() {
! 		return elements.isEmpty();
! 	} // isEmpty()
! 
! 	/**
! 	 * elements
! 	 * @returns Enumeration
! 	 */
! 	public Enumeration elements() {
! 
! 		// TODO
! 		// Note: This is a pathetic implementation.  If Vector
! 		// was used for storage, this wouldn't be an issue.  I'll
! 		// have to implement an Enumeration inner class sometime.
! 
! 		// Variables
! 		Vector	vector;
! 
! 		// Get Enumeration
! 		vector = new Vector(elements);
! 		return vector.elements();
! 
! 	} // elements()
! 
! 	/**
! 	 * trimToSize
! 	 */
! 	public void trimToSize() {
! 		elements.trimToSize();
! 	} // trimToSize()
! 
! 	/**
! 	 * ensureCapacity
! 	 * @param size TODO
! 	 */
! 	public void ensureCapacity(int size) {
! 		elements.ensureCapacity(size);
! 	} // ensureCapacity()
! 
! 	/**
! 	 * setSize
! 	 * @param size TODO
! 	 */
! 	public void setSize(int size) {
! 		elements.ensureCapacity(size);
! 	} // setSize()
! 
! 	/**
! 	 * capacity
! 	 * @returns int
! 	 */
! 	public int capacity() {
! 		return elements.size();
! 	} // capacity()
! 
! 	/**
! 	 * firstElement
! 	 * @returns Object
! 	 */
! 	public Object firstElement() {
! 
! 		// Variables
! 		Object	element;
! 
! 		try {
! 			element = elements.get(0);
! 			return element;
! 		} catch (IndexOutOfBoundsException e) {
! 			throw new NoSuchElementException();
! 		} // try
! 
! 	} // firstElement()
! 
! 	/**
! 	 * lastElement
! 	 * @returns Object
! 	 */
! 	public Object lastElement() {
! 
! 		// Variables
! 		Object	element;
! 
! 		try {
! 			element = elements.get(elements.size() - 1);
! 			return element;
! 		} catch (ArrayIndexOutOfBoundsException e) {
! 			throw new NoSuchElementException();
! 		} // try
! 
! 	} // lastElement()
! 
! 	/**
! 	 * setElementAt
! 	 * @param element TODO
! 	 * @param index TODO
! 	 */
! 	public void setElementAt(Object element, int index) {
! 
! 		// Process Action
! 		elements.set(index, element);
! 
! 		// Send event
! 		fireContentsChanged(this, index, index);
! 
! 	} // setElementAt()
! 
! 	/**
! 	 * removeElementAt
! 	 * @param index TODO
! 	 */
! 	public void removeElementAt(int index) {
! 
! 		// Process Action
! 		elements.remove(index);
  
! 		// Send event
! 		fireIntervalRemoved(this, index, index);
  
! 	} // removeElementAt()
  
! 	/**
! 	 * insertElementAt
! 	 * @param element TODO
! 	 * @param index TODO
! 	 */
! 	public void insertElementAt(Object element, int index) {
  
! 		// Process Action
! 		elements.add(index, element);
  
! 		// Send event
! 		fireIntervalRemoved(this, index, index);
  
! 	} // insertElementAt()
  
! 	/**
! 	 * removeElement
! 	 * @param element TODO
! 	 * @returns boolean
! 	 */
! 	public boolean removeElement(Object element) {
  
! 		// Variables
! 		int		index;
  
! 		index = elements.indexOf(element);
! 		if (index != -1) {
! 			elements.remove(index);
  
! 			// Send event
! 			fireIntervalRemoved(this, index, index);
  
! 			return true;
  
! 		} // if
  
! 		return false;
  
! 	} // removeElement()
  
! 	/**
! 	 * removeAllElements
! 	 */
! 	public void removeAllElements() {
  
! 		// Variables
! 		int		size;
  
! 		size = size();
  
! 		if (size > 0) {
  
! 			// Process Action
! 			elements.clear();
  
! 			// Send event
! 			fireIntervalRemoved(this, 0, size - 1);
  
! 		} // if
  
! 	} // removeAllElements()
  
! 	/**
! 	 * removeRange
! 	 * @param startIndex TODO
! 	 * @param endIndex TODO
! 	 */
! 	public void removeRange(int startIndex, int endIndex) {
  
! 		// Variables
! 		int		index;
  
! 		// Check Indices
! 		if (startIndex > endIndex) {
! 			throw new IllegalArgumentException();
! 		} // if
  
! 		// Process Elements
! 		for (index = endIndex; index >= startIndex; index--) {
! 			elements.remove(index);
! 		} // for
  
! 		// Send event
! 		fireIntervalRemoved(this, startIndex, endIndex);
  
! 	} // removeRange()
  
! 	/**
! 	 * getSize
! 	 * @returns int
! 	 */
! 	public int getSize() {
! 		return elements.size();
! 	} // getSize()
  
! 	/**
! 	 * getElementAt
! 	 * @param index TODO
! 	 * @returns Object
! 	 */
! 	public Object getElementAt(int index) {
! 		return elements.get(index);
! 	} // getElementAt()
  
  
! } // DefaultListModel
--- 35,521 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.util.Enumeration;
  import java.util.Vector;
  
  /**
!  * This is a default subclass of the {@link AbstractListModel}, used by
!  * {@link javax.swing.JList} and similar objects as the model of a list of
!  * values. The implementation is based on an underlying {@link
!  * java.util.Vector}.
!  *
!  * @author Andrew Selkirk
!  * @author Graydon Hoare (graydon@redhat.com)
   */
+ 
  public class DefaultListModel extends AbstractListModel
  {
+   private static final long serialVersionUID = 2315945659722172272L;
  
!   /**
!    * The vector of elements in this list model.
!    */
!   private Vector elements = new Vector();
  
!   /**
!    * Gets an element of the list at the provided index.
!    *
!    * @param index The index of the element to get
!    *
!    * @return The object at the given index
!    *
!    * @throws ArrayIndexOutOfBoundsException If the provided index is
!    * outside the bounds of the list <code>[0, size())</code>
!    */
!   public Object elementAt(int index)
!   {
!     return elements.elementAt(index);
!   }
  
!   /**
!    * Convert the list to a string representation.
!    *
!    * @return A string representation of the list
!    */
!   public String toString()
!   {
!     return elements.toString();
!   }
  
!   /**
!    * Gets the first index of a particular element in the list.
!    *
!    * @param element The element to search for
!    *
!    * @return The first index in the list at which an object
!    * <code>obj</code> exists such that <code>obj.equals(element)</code> is
!    * <code>true</code>; if no such object exists, the method returns
!    * <code>-1</code>
!    */
!   public int indexOf(Object element)
!   {
!     return elements.indexOf(element);
!   }
  
!   /**
!    * Gets the first index of a particular element in a list which occurs
!    * <em>at or after</em> a particular index.
!    *
!    * @param element The element to search for
!    * @param startIndex The index to begin searching at
!    *
!    * @return The first index in the list, greater than or equal to
!    * <code>startIndex</code>, at which an object <code>obj</code> exists
!    * such that <code>obj.equals(element)</code> is <code>true</code>; if no
!    * such object exists, the method returns <code>-1</code>
!    */
!   public int indexOf(Object element, int startIndex)
!   {
!     return elements.indexOf(element, startIndex);
!   }
  
!   /**
!    * Gets the last index of a particular element in the list.
!    *
!    * @param element The element to search for
!    *
!    * @return The last index in the list at which an object
!    * <code>obj</code> exists such that <code>obj.equals(element)</code> is
!    * <code>true</code>; if no such object exists, the method returns
!    * <code>-1</code>
!    */
!   public int lastIndexOf(Object element)
!   {
!     return elements.lastIndexOf(element);
!   }
  
!   /**
!    * Gets the last index of a particular element in a list which occurs
!    * <em>at or before</em> a particular index.
!    *
!    * @param element The element to search for
!    * @param endIndex The index to finish searching at
!    *
!    * @return The last index in the list, less than to or equal to
!    * <code>endIndexIndex</code>, at which an object <code>obj</code> exists
!    * such that <code>obj.equals(element)</code> is <code>true</code>; if no
!    * such object exists, the method returns <code>-1</code>
!    */
!   public int lastIndexOf(Object element, int endIndex)
!   {
!     return elements.lastIndexOf(element, endIndex);
!   }
  
!   /**
!    * Gets the list element at a particular index.
!    *
!    * @param index The index to get the list value at
!    *
!    * @return The list value at the provided index
!    *
!    * @throws ArrayIndexOutOfBoundsException If the provided index is
!    * outside the bounds of the list <code>[0, size())</code>
!    */
!   public Object get(int index)
!   {
!     return elements.get(index);
!   }
  
!   /**
!    * Sets the list element at a particular index.
!    *
!    * @param index The list index at which to set a value 
!    * @param element The value to set at the specified index
!    *
!    * @return The value previously held at the specified index
!    *
!    * @throws ArrayIndexOutOfBoundsException If the provided index is
!    * outside the bounds of the list <code>[0, size())</code>
!    */
!   public Object set(int index, Object element)
!   {
!     Object result;
!     result = elements.set(index, element);
!     fireContentsChanged(this, index, index);
!     return result;
!   }
  
!   /**
!    * Inserts an element at a particular index in the list. Each element at
!    * index <code>i >= index</code> is shifted to position <code>i+1</code>.
!    * If <code>index</code> is equal to <code>size()</code>, this is
!    * equivalent to appending an element to the array. Any
!    * <code>index</code> greater than <code>size()</code> is illegal.
!    *
!    * @param index The index to insert the element at
!    * @param element The element to insert at the index
!    *
!    * @throws ArrayIndexOutOfBoundsException If the provided index is
!    * outside the bounds <code>[0, size()]</code>
!    */
!   public void add(int index, Object element)
!   {
!     elements.add(index, element);
!     fireIntervalAdded(this, index, index);
!   }
  
!   /**
!    * Inserts an element at the end of the list. This is equivalent to
!    * calling <code>list.add(list.size(), element)</code>.
!    *
!    * @param element The element to add to the list
!    */
!   public void addElement(Object element)
!   {
!     int s = elements.size();
!     elements.add(element);
!     fireIntervalAdded(this, s, s);
!   }
  
!   /**
!    * Gets the number of elements in the list.
!    *
!    * @return The number of elements in the list
!    */
!   public int size()
!   {
!     return elements.size();
!   }
  
!   /**
!    * Gets an array containing the elements of the list.
!    *
!    * @return An array of the objects in the list, in the order they occur
!    * in the list
!    */
!   public Object[] toArray()
!   {
!     return elements.toArray();
!   }
  
!   /**
!    * Determines whether a particular element is a member of the list.
!    *
!    * @param element The element to search for
!    *
!    * @return <code>true</code> if <code>element</code> is a member of the
!    * list, otherwise <code>false</code>
!    */
!   public boolean contains(Object element)
!   {
!     return elements.contains(element);
!   }
  
!   /**
!    * Copies the list into a provided array. The provided array must be at
!    * least as large as the list.
!    *
!    * @param array The array to copy the list into
!    * 
!    * @throws IndexOutOfBoundsException if the array is too small to hold the
!    * elements of the list
!    */
!   public void copyInto(Object[] array)
!   {
!     elements.copyInto(array);
!   }
  
!   /**
!    * Erases all the elements of the list, setting the list's size to 0.
!    */
!   public void clear()
!   {
!     int s = elements.size();
!     if (s > 0)
!     {
!       elements.clear();
!       fireIntervalRemoved(this, 0, s - 1);
!     }
!   }
  
!   /**
!    * Removes the element at a particular index from the list.
!    *
!    * @param index The index of the element to remove
!    *
!    * @return The value at the index, which has been removed from the list
!    *
!    * @throws ArrayIndexOutOfBoundsException If the provided index is
!    * outside the bounds of the list <code>[0, size())</code>
!    */
!   public Object remove(int index)
!   {
!     Object result;
!     result = elements.remove(index);
!     fireIntervalRemoved(this, index, index);
!     return result;
!   }
  
!   /**
!    * Determines whether the list is empty.
!    *
!    * @return <code>true</code> if the list is empty, otherwise
!    * <code>false</code>
!    */
!   public boolean isEmpty()
!   {
!     return elements.isEmpty();
!   }
  
!   /**
!    * Returns an {@link java.util.Enumeration} over the elements of the list.
!    *
!    * @return A new enumeration which iterates over the list
!    */
!   public Enumeration elements()
!   {
!     return elements.elements();
!   }
  
!   /**
!    * Sets the capacity of the list to be equal to its size. The list's capacity
!    * is the number of elements it can hold before it needs to be reallocated.
!    * The list's size is the number of elements it currently holds. 
!    */
!   public void trimToSize()
!   {
!     elements.trimToSize();
!   }
  
!   /**
!    * Ensures that the list's capacity is at least equal to
!    * <code>size</code>. The list's capacity is the number of elements it
!    * can hold before it needs to be reallocated.
!    *
!    * @param size The capacity to ensure the list can hold
!    */
!   public void ensureCapacity(int size)
!   {
!     elements.ensureCapacity(size);
!   }
  
!   /**
!    * Sets the size of the list to a particular value. If the specified size
!    * is greater than the current size, the values at the excess list
!    * indices are set to <code>null</code>.  If the specified size is less
!    * than the current size, the excess elements are removed from the list.
!    *
!    * @param size The new size to set the list to
!    */
!   public void setSize(int size)
!   {
!     int oldSize = elements.size();
!     elements.setSize(size);
!     if (oldSize < size) 
!     {
!       fireIntervalAdded(this, oldSize, size - 1); 
!     }
!     else if (oldSize > size) 
!     {
!       this.fireIntervalRemoved(this, size, oldSize - 1);
!     }
!   }
  
!   /**
!    * Gets the capacity of the list. The list's capacity is the number of
!    * elements it can hold before it needs to be reallocated. 
!    *
!    * @return The capacity of the list
!    */
!   public int capacity()
!   {
!     return elements.capacity();
!   }
  
!   /**
!    * Gets the first element in the list.
!    *
!    * @return The first element in the list
!    */
!   public Object firstElement()
!   {
!     return elements.firstElement();
!   }
  
!   /**
!    * Gets the last element in the list.
!    *
!    * @return The last element in the list
!    */
!   public Object lastElement()
!   {
!     return elements.lastElement();
!   }
  
!   /**
!    * Sets the list element at a particular index.
!    *
!    * @param element The value to set at the specified index
!    * @param index The list index at which to set a value 
!    *
!    * @throws ArrayIndexOutOfBoundsException If the provided index is
!    * outside the bounds of the list <code>[0, size())</code>
!    */
!   public void setElementAt(Object element, int index)
!   {
!     elements.setElementAt(element, index);
!     fireContentsChanged(this, index, index);
!   }
  
!   /**
!    * Removes the element at a particular index from the list.
!    *
!    * @param index The index of the element to remove
!    *
!    * @throws ArrayIndexOutOfBoundsException If the provided index is
!    * outside the bounds of the list <code>[0, size())</code>
!    */
!   public void removeElementAt(int index)
!   {
!     elements.remove(index);
!     fireIntervalRemoved(this, index, index);
!   }
  
!   /**
!    * Inserts an element at a particular index in the list. Each element at
!    * index <code>i >= index</code> is shifted to position <code>i+1</code>.
!    * If <code>index</code> is equal to <code>size()</code>, this is
!    * equivalent to appending an element to the array. Any
!    * <code>index</code> greater than <code>size()</code> is illegal.
!    *
!    * @param element The element to insert at the index
!    * @param index The index to insert the element at
!    *
!    * @throws ArrayIndexOutOfBoundsException If the provided index is
!    * outside the bounds <code>[0, size()]</code>
!    */
!   public void insertElementAt(Object element, int index)
!   {
!     elements.insertElementAt(element, index);
!     fireIntervalAdded(this, index, index);
!   }
  
!   /**
!    * Removes the first occurrence of a particular element in the list. If the
!    * element does not exist in the list, nothing happens.
!    *
!    * @param element The element to remove
!    *
!    * @return <code>true</code> if the element existed in the list (and was
!    * removed), <code>false</code> otherwise
!    */
!   public boolean removeElement(Object element)
!   {
!     int index;
!     index = elements.indexOf(element);
!     if (index != -1)
!       {
!         elements.remove(index);
!         fireIntervalRemoved(this, index, index);
!         return true;
!       }
!     return false;
!   }
  
!   /**
!    * Remove all elements in the list.
!    */
!   public void removeAllElements()
!   {
!     int size;
!     size = size();
!     if (size > 0)
!       {
!         elements.clear();
!         fireIntervalRemoved(this, 0, size - 1);
!       }
!   }
  
!   /**
!    * Remove all elements between <code>startIndex</code> and
!    * <code>endIndex</code> inclusive.
!    *
!    * @param startIndex The first index in the range to remove
!    * @param endIndex The last index in the range to remove
!    *
!    * @throws ArrayIndexOutOfBoundsException if either index is outside the
!    * valid range of indices for this list <code>[0, size())</code>
!    * @throws IllegalArgumentException if <code>startIndex > endIndex</code>
!    */
!   public void removeRange(int startIndex, int endIndex)
!   {
!     int index;
!     if (startIndex > endIndex)
!       throw new IllegalArgumentException();
!     for (index = endIndex; index >= startIndex; index--)
!       elements.remove(index);
!     fireIntervalRemoved(this, startIndex, endIndex);
!   }
  
+   /**
+    * Gets the size of the list.
+    *
+    * @return The number of elements currently in the list
+    */
+   public int getSize()
+   {
+     return elements.size();
+   }
  
!   /**
!    * Gets the list element at a particular index.
!    *
!    * @param index The index to get the list value at
!    *
!    * @return The list value at the provided index
!    *
!    * @throws ArrayIndexOutOfBoundsException If the provided index is
!    * outside the bounds of the list <code>[0, size())</code>
!    */
!   public Object getElementAt(int index)
!   {
!     return elements.get(index);
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultListSelectionModel.java gcc-4.0.0/libjava/javax/swing/DefaultListSelectionModel.java
*** gcc-3.4.3/libjava/javax/swing/DefaultListSelectionModel.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/DefaultListSelectionModel.java	Wed Feb 16 20:02:22 2005
***************
*** 1,5 ****
! /* DefaultListSelectionModel.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* DefaultListSelectionModel.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,185 ****
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.EventListener;
! import java.util.Vector;
  import javax.swing.event.EventListenerList;
  import javax.swing.event.ListSelectionListener;
  
! public class DefaultListSelectionModel implements Cloneable, ListSelectionModel, Serializable
  {
!     int mode = SINGLE_SELECTION;
  
!     Vector sel = new Vector();
  
-     Vector listeners;
  
!     Vector get_listeners()
!     {
! 	if (listeners == null)
! 	    listeners = new Vector();
! 	return listeners;
!     }
      
  
!     public void addListSelectionListener(ListSelectionListener listener)
!     {
! 	get_listeners().addElement(listener);
!     }
  
!     public void removeListSelectionListener(ListSelectionListener listener)
!     {
! 	get_listeners().removeElement(listener);
!     }
      
!     class Range
!     {
! 	int i0, i1;
  
! 	Range(int a, int b)
! 	{
! 	    if (a > b)
! 		{
! 		    i0 = b;
! 		    i1 = a;
! 		}
! 	    else
! 		{
! 		    i0 = a; 
! 		    i1 = b;
! 		}
! 	}
!     }
  
      
!     public int getMinSelectionIndex()
!     {
! 	if (isSelectionEmpty())
! 	    return -1;
! 	
! 	boolean first = true;
! 	int min = -1;
! 	for (int i=0;i<sel.size();i++)
! 	    {
! 		Range r = (Range) sel.get(i);
  
! 		if (first)
! 		    {
! 			min = r.i0;
! 			first = false;
! 		    }	
! 		else
! 		    {
! 			if (r.i0 > min)
! 			    {
! 				min = r.i0;
! 			    }
! 		    }
! 	    }
! 	return min;
!     }
  
!     public int getMaxSelectionIndex()
!     {
! 	if (isSelectionEmpty())
! 	    return -1;
  
! 	boolean first = true;
! 	int max = -1;
! 	for (int i=1;i<sel.size();i++)
! 	    {
! 		Range r = (Range) sel.get(i);
! 		
! 		if (first)
! 		    {
! 			max = r.i1;
! 		    }
! 		else
! 		    {
! 			if (r.i1 > max)
! 			    {
! 				max = r.i1;
! 			    }
! 		    }
! 	    }
! 	return max;
!     }
  
!     public boolean isSelectedIndex(int a)
!     {
! 	for (int i=0;i<sel.size();i++)
! 	    {
! 		Range r = (Range) sel.get(i);
! 		if (r.i0 <= a &&
! 		    r.i1 >= a)
! 		    {
! 			return true;
! 		    }
! 	    }
! 	return false;
!     }
  
  
!     public int getSelectionMode()
!     { return mode; }
!     public void setSelectionMode(int a)
!     {	mode = a;    }
  
-     boolean isSelectionEmpty() 
-     {
- 	return sel.size() == 0;
-     }
  
!     public void clearSelection()
!     {
! 	sel.removeAllElements();
!     }
  
!     public void setSelectionInterval(int index0, int index1) 
!     {
! 	if (mode == SINGLE_SELECTION)
! 	    {
! 		sel.removeAllElements();
! 	    }
  
! 	sel.addElement(new Range(index0, index1));
!     }
  }
--- 39,620 ----
  package javax.swing;
  
  import java.io.Serializable;
+ import java.util.BitSet;
  import java.util.EventListener;
! 
  import javax.swing.event.EventListenerList;
+ import javax.swing.event.ListSelectionEvent;
  import javax.swing.event.ListSelectionListener;
  
! /**
!  * <p>This class provides a default implementation of {@link
!  * ListSelectioModel}, which is used by {@link javax.swing.JList} and
!  * similar classes to manage the selection status of a number of data
!  * elements. </p>
!  *
!  * <p>The class is organized <em>abstractly</em> as a set of intervals of
!  * integers. Each interval indicates an inclusive range of indices in a
!  * list -- held by some other object and unknown to this class -- which is
!  * considered "selected". There are various accessors for querying and
!  * modifying the set of intervals, with simplified forms accepting a single
!  * index, representing an interval with only one element. </p>
!  */
! public class DefaultListSelectionModel implements Cloneable,
!                                                   ListSelectionModel,
!                                                   Serializable
  {
!   private static final long serialVersionUID = -5718799865110415860L;
  
!   /** The list of ListSelectionListeners subscribed to this selection model. */
!   protected EventListenerList listenerList = new EventListenerList();
  
  
!   /** 
!    * The current list selection mode. Must be one of the numeric constants
!    * <code>SINGLE_SELECTION</code>, <code>SINGLE_INTERVAL_SELECTION</code>
!    * or <code>MULTIPLE_INTERVAL_SELECTION</code> from {@link
!    * ListSelectionModel}. The default value is
!    * <code>MULTIPLE_INTERVAL_SELECTION</code>.
!    */
!   int selectionMode = MULTIPLE_INTERVAL_SELECTION;
! 
! 
!   /**
!    * The index of the "lead" of the most recent selection. The lead is the
!    * second argument in any call to {@link #setSelectionInterval}, {@link
!    * #addSelectionInterval} or {@link #removeSelectionInterval}. Generally
!    * the lead refers to the most recent position a user dragged their mouse
!    * over.
!    */
!   int leadSelectionIndex = -1;
! 
! 
!   /**
!    * The index of the "anchor" of the most recent selection. The anchor is
!    * the first argument in any call to {@link #setSelectionInterval},
!    * {@link #addSelectionInterval} or {@link
!    * #removeSelectionInterval}. Generally the anchor refers to the first
!    * recent position a user clicks when they begin to drag their mouse over
!    * a list.
!    *
!    * @see #getAnchorSelectionIndex
!    * @see #setAnchorSelectionIndex
!    */
!   int anchorSelectionIndex = -1;
! 
! 
!   /**
!    * controls the range of indices provided in any {@link
!    * ListSelectionEvent} fired by the selectionModel. Let
!    * <code>[A,L]</code> be the range of indices between {@link
!    * anchorSelectionIndex} and {@link leadSelectionIndex} inclusive, and
!    * let <code>[i0,i1]</code> be the range of indices changed in a given
!    * call which generates a {@link ListSelectionEvent}. Then when this
!    * property is <code>true</code>, the {@link ListSelectionEvent} contains
!    * the range <code>[A,L] union [i0,i1]</code>; when <code>false</code> it
!    * will contain only <code>[i0,i1]</code>. The default is
!    * <code>true</code>.
!    *
!    * @see #isLeadAnchorNotificationEnabled
!    * @see #setLeadAnchorNotificationEnabled
!    */
!   protected boolean leadAnchorNotificationEnabled = true;
! 
! 
!   /**
!    * Whether the selection is currently "adjusting". Any {@link
!    * ListSelectionEvent} events constructed in response to changes in this
!    * list selection model will have their {@link
!    * ListSelectionEvent#isAdjusting} field set to this value.
!    *
!    * @see #getValueIsAdjusting
!    * @see #setValueIsAdjusting
!    */
!   boolean valueIsAdjusting = false;
! 
! 
!   /** 
!    * The current set of "intervals", represented simply by a {@link
!    * java.util.BitSet}. A set bit indicates a selected index, whereas a
!    * cleared bit indicates a non-selected index.
!    */
!   BitSet sel = new BitSet();
! 
! 
!   /**
!    * Gets the value of the {@link #selectionMode} property.
!    *
!    * @return The current value of the property
!    */
!   public int getSelectionMode()
!   {
!     return selectionMode;
!   }
! 
!   /**
!    * Sets the value of the {@link #selectionMode} property.
!    *
!    * @param a The new value of the property
!    */
!   public void setSelectionMode(int a)
!   {
!     selectionMode = a;
!   }
! 
!   /**
!    * Gets the value of the {@link #anchorSelectionIndex} property.
!    * 
!    * @return The current property value
!    *
!    * @see #setAnchorSelectionIndex
!    */
!   public int getAnchorSelectionIndex()
!   {
!     return anchorSelectionIndex;
!   }
! 
!   /**
!    * Sets the value of the {@link #anchorSelectionIndex} property.
!    * 
!    * @param anchorIndex The new property value
!    *
!    * @see #getAnchorSelectionIndex
!    */
!   public void setAnchorSelectionIndex(int anchorIndex)
!   {
!     anchorSelectionIndex = anchorIndex;
!   }
!   
!   /**
!    * Gets the value of the {@link #leadSelectionIndex} property.
!    * 
!    * @return The current property value
!    *
!    * @see #setLeadSelectionIndex
!    */
!   public int getLeadSelectionIndex()
!   {
!     return leadSelectionIndex;
!   }
! 
!   /**
!    * <p>Sets the value of the {@link #anchorSelectionIndex} property. As a
!    * side effect, alters the selection status of two ranges of indices. Let
!    * <code>OL</code> be the old lead selection index, <code>NL</code> be
!    * the new lead selection index, and <code>A</code> be the anchor
!    * selection index. Then if <code>A</code> is a valid selection index,
!    * one of two things happens depending on the seleciton status of
!    * <code>A</code>:</p>
!    *
!    * <ul>
!    *
!    * <li><code>isSelectedIndex(A) == true</code>: set <code>[A,OL]</code>
!    * to <em>deselected</em>, then set <code>[A,NL]</code> to
!    * <em>selected</em>.</li>
!    *
!    * <li><code>isSelectedIndex(A) == false</code>: set <code>[A,OL]</code>
!    * to <em>selected</em>, then set <code>[A,NL]</code> to
!    * <em>deselected</em>.</li>
!    *
!    * </ul>
!    *
!    * <p>This method generates at most a single {@link ListSelectionEvent}
!    * despite changing multiple ranges. The range of values provided to the
!    * {@link ListSelectionEvent} includes only the minimum range of values
!    * which changed selection status between the beginning and end of the
!    * method.</p>
!    * 
!    * @param anchorIndex The new property value
!    *
!    * @see #getAnchorSelectionIndex
!    */
!   public void setLeadSelectionIndex(int leadIndex)
!   {
!     int oldLeadIndex = leadSelectionIndex;
!     leadSelectionIndex = leadIndex;
! 
!     if (anchorSelectionIndex == -1)
!       return;
! 
!     int R1 = Math.min(anchorSelectionIndex, oldLeadIndex);
!     int R2 = Math.max(anchorSelectionIndex, oldLeadIndex);
!     int S1 = Math.min(anchorSelectionIndex, leadIndex);
!     int S2 = Math.max(anchorSelectionIndex, leadIndex);
      
+     int lo = Math.min(R1, S1);
+     int hi = Math.max(R2, S2);
  
!     BitSet oldRange = sel.get(lo, hi+1);
  
!     if (isSelectedIndex(anchorSelectionIndex))
!       {
!         sel.clear(R1, R2+1);
!         sel.set(S1, S2+1);
!       }
!     else
!       {
!         sel.set(R1, R2+1);
!         sel.clear(S1, S2+1);
!       }
      
!     BitSet newRange = sel.get(lo, hi+1);
!     newRange.xor(oldRange);
  
!     int beg = sel.nextSetBit(0), end = -1;
!     for(int i=beg; i >= 0; i=sel.nextSetBit(i+1)) 
!       { 
!         end = i;
!       }
!     fireValueChanged(beg, end, valueIsAdjusting);    
!   }
! 
!   /**
!    * Gets the value of the {@link #leadAnchorNotificationEnabled} property.
!    * 
!    * @return The current property value
!    *
!    * @see #setLeadAnchorNotificationEnabled
!    */
!   public boolean isLeadAnchorNotificationEnabled()
!   {
!     return leadAnchorNotificationEnabled;
!   }
! 
!   /**
!    * Sets the value of the {@link #leadAnchorNotificationEnabled} property.
!    * 
!    * @param flag The new property value
!    *
!    * @see #getLeadAnchorNotificationEnabled
!    */
!   public void setLeadAnchorNotificationEnabled(boolean l)
!   {
!     leadAnchorNotificationEnabled = l;
!   }
! 
! 
!   /**
!    * Gets the value of the {@link #valueIsAdjusting} property.
!    *
!    * @return The current property value
!    *
!    * @see #setValueIsAdjusting
!    */
!   public boolean getValueIsAdjusting()
!   {
!     return valueIsAdjusting;
!   }
! 
!   /**
!    * Sets the value of the {@link #valueIsAdjusting} property.
!    *
!    * @param v The new property value
!    *
!    * @see #getValueIsAdjusting
!    */
!   public void setValueIsAdjusting(boolean v)
!   {
!     valueIsAdjusting = v;
!   }
  
+   /**
+    * Determines whether the selection is empty.
+    *
+    * @return <code>true</code> if the selection is empty, otherwise
+    * <code>false</code>
+    */
+   public boolean isSelectionEmpty()
+   {
+     return sel.isEmpty();
+   }
+ 
+ 
+   /**
+    * Gets the smallest index which is currently a member of a selection
+    * interval.
+    *
+    * @return The least integer <code>i</code> such that <code>i >=
+    * 0</code> and <code>i</code> is a member of a selected interval, or
+    * <code>-1</code> if there are no selected intervals
+    *
+    * @see #getMaxSelectionIndex
+    */
+   public int getMinSelectionIndex()
+   {
+     if (isSelectionEmpty())
+       return -1;
      
!     return sel.nextSetBit(0);
!   }
  
!   /**
!    * Gets the largest index which is currently a member of a selection
!    * interval.
!    *
!    * @return The greatest integer <code>i</code> such that <code>i >=
!    * 0</code> and <code>i</code> is a member of a selected interval, or
!    * <code>-1</code> if there are no selected intervals
!    *
!    * @see #getMinSelectionIndex
!    */
!   public int getMaxSelectionIndex()
!   {
!     if (isSelectionEmpty())
!       return -1;
  
!     int mx = -1;
!     for(int i=sel.nextSetBit(0); i >= 0; i=sel.nextSetBit(i+1)) 
!       { 
!         mx = i;
!       }
!     return mx;
!   }
  
!   /**
!    * Determines whether a particular index is a member of a selection
!    * interval.
!    *
!    * @param a The index to search for
!    *
!    * @return <code>true</code> if the index is a member of a selection interval,
!    * otherwise <code>false</code>
!    */
!   public boolean isSelectedIndex(int a)
!   {
!     return sel.get(a);
!   }
  
!   /**
!    * If the {@link #selectionMode} property is equal to
!    * <code>SINGLE_SELECTION</code> or
!    * <code>SINGLE_INTERVAL_SELECTION</code>, equivalent to calling
!    * <code>setSelectionInterval(index1, index2)</code>; otherwise adds the
!    * range <code>[index0, index1]</code> to the selection interval set.
!    *
!    * @param index0 The beginning of the range of indices to select
!    * @param index1 The end of the range of indices to select
!    *
!    * @see #setSelectionInterval
!    * @see #removeSelectionInterval
!    */
!   public void addSelectionInterval(int index0, int index1) 
!   {
!     if (selectionMode == SINGLE_SELECTION
!         || selectionMode == SINGLE_INTERVAL_SELECTION)
!       sel.clear();
!     
!     if (selectionMode == SINGLE_SELECTION)
!       index0 = index1;
  
+     int lo = Math.min(index0, index1);
+     int hi = Math.max(index0, index1);
  
!     sel.set(lo, hi+1);
!     fireValueChanged(lo, hi, valueIsAdjusting);
!   }
  
  
!   /**
!    * Deselects all indices in the inclusive range
!    * <code>[index0,index1]</code>.
!    *
!    * @param index0 The beginning of the range of indices to deselect
!    * @param index1 The end of the range of indices to deselect
!    *
!    * @see #addSelectionInterval
!    * @see #setSelectionInterval
!    */
!   public void removeSelectionInterval(int index0,
!                                       int index1)
!   {
!     int lo = Math.min(index0, index1);
!     int hi = Math.max(index0, index1);
!     sel.clear(lo, hi+1); 
!     fireValueChanged(lo, hi, valueIsAdjusting);
!   }
  
!   /**
!    * Removes all intervals in the selection set.
!    */
!   public void clearSelection()
!   {
!     int sz = sel.size();
!     sel.clear();
!     fireValueChanged(0, sz, valueIsAdjusting);
!   }
!   
!   /**
!    * Clears the current selection and marks a given interval as
!    * "selected". If the current selection mode is
!    * <code>SINGLE_SELECTION</code> only the index <code>index2</code> is
!    * selected.
!    *
!    * @param index0 The low end of the new selection 
!    * @param index1 The high end of the new selection
!    */
!   public void setSelectionInterval(int index0, int index1)
!   {
!     sel.clear();
!     if (selectionMode == SINGLE_SELECTION)
!       index0 = index1;
  
!     int lo = Math.min(index0, index1);
!     int hi = Math.max(index0, index1);
!     sel.set(lo, hi+1);
!     fireValueChanged(lo, hi, valueIsAdjusting);
!   }
! 
!   /**
!    * Inserts a number of indices either before or after a particular
!    * position in the set of indices. Renumbers all indices after the
!    * inserted range. The new indices in the inserted range are not
!    * selected. This method is typically called to synchronize the selection
!    * model with an inserted range of elements in a {@link ListModel}.
!    *
!    * @param index The position to insert indices at
!    * @param length The number of indices to insert
!    * @param before Indicates whether to insert the indices before the index
!    * or after it
!    */
!   public void insertIndexInterval(int index,
!                                   int length,
!                                   boolean before)
!   {
!     if (!before)
!       {        
!         index++;
!         length--;
!       }
!     BitSet tmp = sel.get(index, sel.size());
!     sel.clear(index, sel.size());
!     int n = tmp.size();
!     for (int i = 0; i < n; ++i)
!       sel.set(index + length + i, tmp.get(i));
!   }
! 
!   /**
!    * Removes a range from the set of indices. Renumbers all indices after
!    * the removed range. This method is typically called to synchronize the
!    * selection model with a deleted range of elements in a {@link
!    * ListModel}.
!    *
!    * @param index0 The first index to remove (inclusive)
!    * @param index1 The last index to remove (inclusive)
!    */
!   public void removeIndexInterval(int index0,
!                                   int index1)
!   {
!     int lo = Math.min(index0, index1);
!     int hi = Math.max(index0, index1);
! 
!     BitSet tmp = sel.get(hi, sel.size());
!     sel.clear(lo, sel.size());
!     int n = tmp.size();
!     for (int i = 0; i < n; ++i)
!       sel.set(lo + i, tmp.get(i));
!   }
! 
!   /**
!    * Fires a {@link ListSelectionEvent} to all the listeners of type {@link
!    * ListSelectionListener} registered with this selection model.
!    *
!    * @param firstIndex The low index of the changed range
!    * @param lastIndex The high index of the changed range
!    */
!   protected void fireValueChanged(int firstIndex, int lastIndex)
!   {
!     fireValueChanged(firstIndex, lastIndex, getValueIsAdjusting());
!   }
!   
!   /**
!    * Fires a {@link ListSelectionEvent} to all the listeners of type {@link
!    * ListSelectionListener} registered with this selection model.
!    *
!    * @param firstIndex The low index of the changed range
!    * @param lastIndex The high index of the changed range
!    * @param isAdjusting Whether this change is part of a seqence of adjustments
!    * made to the selection, such as during interactive scrolling
!    */
!   protected void fireValueChanged(int firstIndex, int lastIndex,
! 				  boolean isAdjusting)
!   {
!     ListSelectionEvent evt = new ListSelectionEvent(this, firstIndex,
!                                                     lastIndex, isAdjusting);
!     ListSelectionListener[] listeners = getListSelectionListeners();
!     for (int i = 0; i < listeners.length; ++i)
!       listeners[i].valueChanged(evt);
!   }
! 
!   /**
!    * Adds a listener.
!    *
!    * @param listener The listener to add
!    *
!    * @see removeListSelectionListener
!    * @see getListSelectionListeners
!    */
!   public void addListSelectionListener(ListSelectionListener listener)
!   {
!     listenerList.add(ListSelectionListener.class, listener);
!   }
! 
!   /**
!    * Removes a registered listener.
!    *
!    * @param listener The listener to remove
!    *
!    * @see addListSelectionListener
!    * @see getListSelectionListeners
!    */
!   public void removeListSelectionListener(ListSelectionListener listener)
!   {
!     listenerList.remove(ListSelectionListener.class, listener);
!   }
! 
!   /**
!    * Returns an array of all registerers listeners.
!    *
!    * @param listenerType The type of listener to retrieve
!    *
!    * @return The array
!    *
!    * @see getListSelectionListener
!    * @since 1.3
!    */
!   public EventListener[] getListeners(Class listenerType)
!   {
!     return listenerList.getListeners(listenerType);
!   }
! 
!   /**
!    * Returns an array of all registerd list selection listeners.
!    *
!    * @return the array
!    *
!    * @see addListSelectionListener
!    * @see removeListSelectionListener
!    * @see getListeners
!    * @since 1.4
!    */
!   public ListSelectionListener[] getListSelectionListeners()
!   {
!     return (ListSelectionListener[]) getListeners(ListSelectionListener.class);
!   }
! 
!   /**
!    * Returns a clone of this object.
!    * <code>listenerList</code> don't gets duplicated.
!    *
!    * @return the cloned object
!    *
!    * @throws CloneNotSupportedException if an error occurs
!    */
!   public Object clone()
!     throws CloneNotSupportedException
!   {
!     DefaultListSelectionModel model =
!       (DefaultListSelectionModel) super.clone();
!     model.sel = (BitSet) sel.clone();
!     return model;
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DefaultSingleSelectionModel.java gcc-4.0.0/libjava/javax/swing/DefaultSingleSelectionModel.java
*** gcc-3.4.3/libjava/javax/swing/DefaultSingleSelectionModel.java	Tue Apr 29 09:26:29 2003
--- gcc-4.0.0/libjava/javax/swing/DefaultSingleSelectionModel.java	Wed Feb 16 20:02:23 2005
***************
*** 1,5 ****
  /* DefaultSingleSelectionModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultSingleSelectionModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,67 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.EventListener;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
  /**
   * DefaultSingleSelectionModel
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
  public class DefaultSingleSelectionModel
    implements SingleSelectionModel, Serializable
  {
!   static final long serialVersionUID = 3676229404753786004L;
  
    /**
     * changeEvent
     */
!   protected transient ChangeEvent changeEvent = new ChangeEvent (this);
  
    /**
     * listenerList
     */
!   protected EventListenerList listenerList= new EventListenerList ();
  
    /**
     * index
--- 35,69 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.io.Serializable;
  import java.util.EventListener;
+ 
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
  /**
   * DefaultSingleSelectionModel
!  *
!  * @author Andrew Selkirk
   */
  public class DefaultSingleSelectionModel
    implements SingleSelectionModel, Serializable
  {
!   private static final long serialVersionUID = 3676229404753786004L;
  
    /**
     * changeEvent
     */
!   protected transient ChangeEvent changeEvent = new ChangeEvent(this);
  
    /**
     * listenerList
     */
!   protected EventListenerList listenerList = new EventListenerList();
  
    /**
     * index
*************** public class DefaultSingleSelectionModel
*** 71,85 ****
    /**
     * Constructor DefaultSingleSelectionModel
     */
!   public DefaultSingleSelectionModel ()
    {
    }
  
    /**
     * getSelectedIndex
!    * @returns int
     */
!   public int getSelectedIndex ()
    {
      return index;
    }
--- 73,88 ----
    /**
     * Constructor DefaultSingleSelectionModel
     */
!   public DefaultSingleSelectionModel()
    {
+     // Do nothing.
    }
  
    /**
     * getSelectedIndex
!    * @return int
     */
!   public int getSelectedIndex()
    {
      return index;
    }
*************** public class DefaultSingleSelectionModel
*** 88,177 ****
     * setSelectedIndex
     * @param index TODO
     */
!   public void setSelectedIndex (int index)
    {
-     // Set Data
      this.index = index;
! 
!     // Notify Listeners
!     fireStateChanged ();
    }
  
    /**
     * clearSelection
     */
!   public void clearSelection ()
    {
-     // Set Data
      index = -1;
! 
!     // Notify Listeners
!     fireStateChanged ();
    }
  
    /**
     * isSelected
!    * @returns boolean
     */
!   public boolean isSelected ()
    {
!     return (index == -1);
    }
  
    /**
     * addChangeListener
!    * @param listener TODO
     */
!   public void addChangeListener (ChangeListener listener)
    {
!     listenerList.add (ChangeListener.class, listener);
    }
  
    /**
     * removeChangeListener
!    * @param listener TODO
     */
!   public void removeChangeListener (ChangeListener listener)
    {
!     listenerList.remove (ChangeListener.class, listener);
    }
  
    /**
     * fireStateChanged
     */
!   protected void fireStateChanged ()
    {
!     // Variables
!     ChangeListener listener;
!     ChangeListener[] listeners;
!     int index;
! 
!     // Get Listeners
!     listeners = getChangeListeners ();
  
!     // Process Listeners
!     for (index = 0; index < listeners.length; index++)
!       {
!         listener = listeners [index];
!         listener.stateChanged (changeEvent);
!       }
    }
  
    /**
     * getListeners
!    * @param listenerClass TODO
!    * @returns EventListener[]
     */
!   public EventListener[] getListeners (Class listenerClass)
    {
!     return listenerList.getListeners (listenerClass);
    }
  
    /**
     * getChangeListeners
     */
!   public ChangeListener[] getChangeListeners ()
    {
!     return (ChangeListener[]) getListeners (ChangeListener.class);
    }
  }
--- 91,172 ----
     * setSelectedIndex
     * @param index TODO
     */
!   public void setSelectedIndex(int index)
    {
      this.index = index;
!     fireStateChanged();
    }
  
    /**
     * clearSelection
     */
!   public void clearSelection()
    {
      index = -1;
!     fireStateChanged();
    }
  
    /**
     * isSelected
!    * @return boolean
     */
!   public boolean isSelected()
    {
!     return index != -1;
    }
  
    /**
     * addChangeListener
!    *
!    * @param listener the listener to add
     */
!   public void addChangeListener(ChangeListener listener)
    {
!     listenerList.add(ChangeListener.class, listener);
    }
  
    /**
     * removeChangeListener
!    *
!    * @param listener the listener to remove
     */
!   public void removeChangeListener(ChangeListener listener)
    {
!     listenerList.remove(ChangeListener.class, listener);
    }
  
    /**
     * fireStateChanged
     */
!   protected void fireStateChanged()
    {
!     ChangeListener[] listeners = getChangeListeners();
  
!     for (int i = 0; i < listeners.length; i++)
!       listeners[i].stateChanged(changeEvent);
    }
  
    /**
     * getListeners
!    *
!    * @param listenerClass the type fo listener
!    *
!    * @return an array of listeners
!    *
!    * @since 1.3
     */
!   public EventListener[] getListeners(Class listenerClass)
    {
!     return listenerList.getListeners(listenerClass);
    }
  
    /**
     * getChangeListeners
+    *
+    * @since 1.4
     */
!   public ChangeListener[] getChangeListeners()
    {
!     return (ChangeListener[]) getListeners(ChangeListener.class);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/DesktopManager.java gcc-4.0.0/libjava/javax/swing/DesktopManager.java
*** gcc-3.4.3/libjava/javax/swing/DesktopManager.java	Sun Oct 12 13:20:49 2003
--- gcc-4.0.0/libjava/javax/swing/DesktopManager.java	Thu Jun 17 23:43:12 2004
***************
*** 1,5 ****
  /* DesktopManager.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DesktopManager.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,155 ****
  package javax.swing;
  
  /**
!  * DesktopManager
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public interface DesktopManager {
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * openFrame
! 	 * @param frame TODO
! 	 */
! 	void openFrame(JInternalFrame frame);
! 
! 	/**
! 	 * closeFrame
! 	 * @param frame TODO
! 	 */
! 	void closeFrame(JInternalFrame frame);
! 
! 	/**
! 	 * maximizeFrame
! 	 * @param frame TODO
! 	 */
! 	void maximizeFrame(JInternalFrame frame);
  
! 	/**
! 	 * minimizeFrame
! 	 * @param frame TODO
! 	 */
! 	void minimizeFrame(JInternalFrame frame);
  
! 	/**
! 	 * iconifyFrame
! 	 * @param frame TODO
! 	 */
! 	void iconifyFrame(JInternalFrame frame);
  
! 	/**
! 	 * deiconifyFrame
! 	 * @param frame TODO
! 	 */
! 	void deiconifyFrame(JInternalFrame frame);
  
! 	/**
! 	 * activateFrame
! 	 * @param frame TODO
! 	 */
! 	void activateFrame(JInternalFrame vframe);
  
! 	/**
! 	 * deactivateFrame
! 	 * @param frame TODO
! 	 */
! 	void deactivateFrame(JInternalFrame frame);
  
! 	/**
! 	 * beginDraggingFrame
! 	 * @param frame TODO
! 	 */
! 	void beginDraggingFrame(JComponent frame);
  
! 	/**
! 	 * dragFrame
! 	 * @param frame TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 */
! 	void dragFrame(JComponent frame, int x, int y);
  
! 	/**
! 	 * endDraggingFrame
! 	 * @param frame TODO
! 	 */
! 	void endDraggingFrame(JComponent frame);
  
! 	/**
! 	 * beginResizingFrame
! 	 * @param frame TODO
! 	 * @param direction TODO
! 	 */
! 	void beginResizingFrame(JComponent frame, int direction);
  
! 	/**
! 	 * resizeFrame
! 	 * @param frame TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param width TODO
! 	 * @param height TODO
! 	 */
! 	void resizeFrame(JComponent frame, int x, int y, 
! 					int width, int height);
  
! 	/**
! 	 * endResizingFrame
! 	 * @param frame TODO
! 	 */
! 	void endResizingFrame(JComponent frame);
  
! 	/**
! 	 * setBoundsForFrame
! 	 * @param frame TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param width TODO
! 	 * @param height TODO
! 	 */
! 	void setBoundsForFrame(JComponent frame, int x, int y, 
! 					int width, int height);
  
  
  } // DesktopManager
--- 38,177 ----
  package javax.swing;
  
  /**
!  * DesktopManagers are responsible for implementing the behaviours for the
!  * JInternalFrames that belong to JDesktopPanes. Actions such as maximizing,
!  * minimizing, iconifying, etc will be delegated to the DesktopManager.
   */
! public interface DesktopManager
! {
!   /**
!    * This method will cause the JInternalFrame to be displayed in the set
!    * location. This usually is not needed since the user will add the
!    * JInternalFrame to a Container separately.
!    *
!    * @param frame The JInternalFrame to open.
!    */
!   void openFrame(JInternalFrame frame);
  
!   /**
!    * This method should remove the JInternalFrame from its parent.
!    *
!    * @param frame The JInternalFrame to close.
!    */
!   void closeFrame(JInternalFrame frame);
  
!   /**
!    * This method should maximize the JInternalFrame to match its parent's
!    * bounds.
!    *
!    * @param frame The JInternalFrame to maximize.
!    */
!   void maximizeFrame(JInternalFrame frame);
  
!   /**
!    * This method should restore the JInternalFrame to its normal bounds.
!    *
!    * @param frame The JInternalFrame to minimize.
!    */
!   void minimizeFrame(JInternalFrame frame);
  
!   /**
!    * This method should remove the JInternalFrame from its parent and replace
!    * it with a JDesktopIcon.
!    *
!    * @param frame The JInternalFrame to iconify.
!    */
!   void iconifyFrame(JInternalFrame frame);
  
!   /**
!    * This method should remove the JDesktopIcon from its parent and replace it
!    * with the JInternalFrame that the JDesktopIcon represents.
!    *
!    * @param frame The JInternalFrame to deiconify.
!    */
!   void deiconifyFrame(JInternalFrame frame);
  
!   /**
!    * This method should give focus to the JInternalFrame and its default focus
!    * owner.
!    *
!    * @param frame The JInternalFrame to activate.
!    */
!   void activateFrame(JInternalFrame vframe);
  
!   /**
!    * This method should be called when the JInternalFrame gets deselected and
!    * subsequently loses focus.
!    *
!    * @param frame The JInternalFrame to deactivate.
!    */
!   void deactivateFrame(JInternalFrame frame);
  
!   /**
!    * This method should be called in preparation for dragging. This needs to
!    * be called prior to dragFrame calls so that the DesktopManager can
!    * prepare any state information.
!    *
!    * @param frame The JInternalFrame to prepare for dragging.
!    */
!   void beginDraggingFrame(JComponent frame);
  
!   /**
!    * This method drags the given JInternalFrame to the given x and y
!    * coordinates.
!    *
!    * @param frame The JInternalFrame to drag.
!    * @param x The new x coordinate.
!    * @param y The new y coordinate.
!    */
!   void dragFrame(JComponent frame, int x, int y);
  
!   /**
!    * This method should be called after dragFrame calls. Any information used
!    * by the DesktopManager for dragging the JInternalFrame can be cleared.
!    *
!    * @param frame The JInternalFrame that finished dragging.
!    */
!   void endDraggingFrame(JComponent frame);
  
!   /**
!    * This method should be called prior to any resizeFrame calls. Any state
!    * information needed by the DesktopManager to resize the JInternalFrame
!    * will be prepared here.
!    *
!    * @param frame The JInternalFrame to resize.
!    * @param direction One of eight directions specified by SwingConstants.
!    */
!   void beginResizingFrame(JComponent frame, int direction);
  
!   /**
!    * This method is called to resize the given JInternalFrame to the given
!    * bounds.
!    *
!    * @param frame The JInternalFrame to resize.
!    * @param x The new x coordinate.
!    * @param y The new y coordinate.
!    * @param width The new width.
!    * @param height The new height.
!    */
!   void resizeFrame(JComponent frame, int x, int y, int width, int height);
  
+   /**
+    * This method is called to signify that the resize is finished. Any
+    * information used to resize the JInternalFrame can now be cleared.
+    *
+    * @param frame The JInternalFrame that just finished dragging.
+    */
+   void endResizingFrame(JComponent frame);
  
+   /**
+    * This method does the actual work for reshaping the JInternalFrame.
+    *
+    * @param frame The JInternalFrame to resize.
+    * @param x The new x coordinate.
+    * @param y The new y coordinate.
+    * @param width The new width.
+    * @param height The new height.
+    */
+   void setBoundsForFrame(JComponent frame, int x, int y, int width, int height);
  } // DesktopManager
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/FocusManager.java gcc-4.0.0/libjava/javax/swing/FocusManager.java
*** gcc-3.4.3/libjava/javax/swing/FocusManager.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/FocusManager.java	Tue Nov 30 23:58:52 2004
***************
*** 1,5 ****
  /* FocusManager.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FocusManager.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** public abstract class FocusManager exten
*** 148,153 ****
--- 148,154 ----
  
  	/**
  	 * disableSwingFocusManager
+ 	 * @deprecated 1.4
  	 */
  	public static void disableSwingFocusManager() {
  		// TODO
*************** public abstract class FocusManager exten
*** 155,161 ****
  
  	/**
  	 * isFocusManagerEnabled
! 	 * @returns boolean
  	 */
  	public static boolean isFocusManagerEnabled() {
  		return false; // TODO
--- 156,163 ----
  
  	/**
  	 * isFocusManagerEnabled
! 	 * @return boolean
! 	 * @deprecated 1.4
  	 */
  	public static boolean isFocusManagerEnabled() {
  		return false; // TODO
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/GrayFilter.java gcc-4.0.0/libjava/javax/swing/GrayFilter.java
*** gcc-3.4.3/libjava/javax/swing/GrayFilter.java	Fri Aug  9 04:26:10 2002
--- gcc-4.0.0/libjava/javax/swing/GrayFilter.java	Tue Nov 30 23:58:52 2004
***************
*** 1,5 ****
  /* GrayFilter.java -- Java class for filtering Pixels to produce Gray Pictures
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* GrayFilter.java -- Java class for filtering Pixels to produce Gray Pictures
!    Copyright (C) 1999, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,85 ****
  package javax.swing;
  
  import java.awt.Image;
  import java.awt.image.FilteredImageSource;
  import java.awt.image.RGBImageFilter;
- import java.awt.Toolkit;
  
  public class GrayFilter extends RGBImageFilter
  {
!     private boolean b;
!     private int p;
! 
!     /**
!        Create a GrayFilter. If b is true then brighten. Also, indicate how much gray.
!        
!        @param b if brighten
!        @param p percent of gray, 0 - 100
!     */
!     public GrayFilter(boolean b, int p)
!     {
! 	this.b = b; //FIXME - HANDLE THIS
! 	this.p = p;
!     }
! 
!     /**
!        Create grayed image
! 
!        @param i image to gray
  
!        @return a grayed image
!      */
!     public static Image createDisabledImage(Image src)
!     {
! 	return Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(src.getSource(),
! 										new GrayFilter(false, 100)));
!     }
  
!     /**
!        Filter RGB to gray
!      */
!     public int filterRGB(int x,
! 			 int y,
! 			 int rgb)
!     {
! 	return (int) ( ( p * ( 0.299 * ( (0xff0000 & rgb) >> 16) + 0.587 * ( (0xff00 & rgb) >> 8 ) + 0.114 * (0xff & rgb ) ) ));
!     }
  }
--- 39,85 ----
  package javax.swing;
  
  import java.awt.Image;
+ import java.awt.Toolkit;
  import java.awt.image.FilteredImageSource;
  import java.awt.image.RGBImageFilter;
  
  public class GrayFilter extends RGBImageFilter
  {
!   private boolean b;
!   private int p;
  
!   /**
!    * Create a GrayFilter. If b is true then brighten. Also, indicate how much gray.
!    *    
!    * @param b if brighten
!    * @param p percent of gray, 0 - 100
!    */
!   public GrayFilter(boolean b, int p)
!   {
!     this.b = b; //FIXME - HANDLE THIS
!     this.p = p;
!   }
  
!   /**
!    * Create grayed image
!    *
!    * @param src image to gray
!    *
!    * @return a grayed image
!    */
!   public static Image createDisabledImage(Image src)
!   {
!     return (Toolkit.getDefaultToolkit().
! 	    createImage(new FilteredImageSource(src.getSource(),
! 						new GrayFilter(false, 100))));
!   }
!   
!   /**
!    * Filter RGB to gray
!    */
!   public int filterRGB(int x, int y, int rgb)
!   {
!     return (int) (p * (0.299 * ((0xff0000 & rgb) >> 16)
! 		       + 0.587 * ((0xff00 & rgb) >> 8) + 0.114 * (0xff & rgb)));
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ImageIcon.java gcc-4.0.0/libjava/javax/swing/ImageIcon.java
*** gcc-3.4.3/libjava/javax/swing/ImageIcon.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/ImageIcon.java	Wed Feb 16 20:02:23 2005
***************
*** 1,5 ****
! /* ImageIcon.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ImageIcon.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,101 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- 
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Graphics;
  import java.awt.Image;
- import java.awt.MediaTracker;
  import java.awt.Toolkit;
  import java.io.Serializable;
  import java.net.URL;
- import javax.accessibility.Accessible;
- import javax.accessibility.AccessibleContext;
  
! public class ImageIcon implements Icon
  {
!     Image image;
!     String file, descr;
!     Component observer;
  
!   public ImageIcon(String s)
!     {
! 	this(s, "");
!     }
  
!   public ImageIcon(String file,
! 	      String descr)
!     {
!         this.file = file;
!         this.descr = descr;
  
!         image = Toolkit.getDefaultToolkit().getImage(file);
!         if (image == null) {
!             return;
!         }
!         //loadImage(image);
!     }
  
!     // not in SUN's spec !!!
!     public void setParent(Component p)
!     {
! 	observer = p;
!     }
  
!     public Image getImage() 
!     {  return image;    }
  
!     public String getDescription() 
!     {  return descr;    }
!     public void setDescription(String description) 
!     {  this.descr = description;    }
  
!     public int getIconHeight()
!     {	return image.getHeight(observer);    }
!     public int getIconWidth()
!     {	return image.getWidth(observer);    }
  
!     public void paintIcon(Component c, 
! 			  Graphics g,
! 			  int x, 
! 			  int y)
!     {
! 	g.drawImage(image, x, y, observer);
!     }
  }
--- 35,146 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Graphics;
  import java.awt.Image;
  import java.awt.Toolkit;
+ import java.awt.image.ImageObserver;
  import java.io.Serializable;
  import java.net.URL;
  
! 
! public class ImageIcon
!   implements Icon, Serializable
  {
!   private static final long serialVersionUID = 532615968316031794L;
!   Image image;
!   String description;
!   ImageObserver observer;
  
!   public ImageIcon()
!   {
!   }
!   
!   public ImageIcon(String file)
!   {
!     this(file, file);
!   }
  
!   public ImageIcon(String file, String description)
!   {
!     this(Toolkit.getDefaultToolkit().getImage(file), description);
!   }
  
!   public ImageIcon(byte[] imageData)
!   {
!     this(imageData, null);
!   }
!   
!   public ImageIcon(byte[] imageData, String description)
!   {
!     this(Toolkit.getDefaultToolkit().createImage(imageData), description);
!   }
  
!   public ImageIcon(URL url)
!   {
!     this(url, null);
!   }
  
!   public ImageIcon(URL url, String description)
!   {
!     this(Toolkit.getDefaultToolkit().getImage(url), description);
!   }
  
!   public ImageIcon(Image image)
!   {
!     this(image, null);
!   }
  
!   public ImageIcon(Image image, String description)
!   {
!     this.image = Toolkit.getDefaultToolkit().createImage(image.getSource());
!     this.description = description;
!   }
!     
!   public ImageObserver getImageObserver()
!   {
!     return observer;
!   }
!   
!   public void setImageObserver(ImageObserver newObserver)
!   {
!     observer = newObserver;
!   }
  
!   public Image getImage()
!   {
!     return image;
!   }
! 
!   public void setImage(Image image)
!   {
!     this.image = Toolkit.getDefaultToolkit().createImage(image.getSource());
!   }
! 
!   public String getDescription()
!   {
!     return description;
!   }
! 
!   public void setDescription(String description)
!   {
!     this.description = description;
!   }
! 
!   public int getIconHeight()
!   {
!     return image.getHeight(observer);
!   }
! 
!   public int getIconWidth()
!   {
!     return image.getWidth(observer);
!   }
! 
!   public void paintIcon(Component c, Graphics g, int x, int y)
!   {
!     g.drawImage(image, x, y, observer != null ? observer : c);
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/InputMap.java gcc-4.0.0/libjava/javax/swing/InputMap.java
*** gcc-3.4.3/libjava/javax/swing/InputMap.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/InputMap.java	Wed Feb 16 20:02:23 2005
***************
*** 1,5 ****
  /* InputMap.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InputMap.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,41 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- 
  package javax.swing;
  
  import java.io.IOException;
--- 35,40 ----
*************** import java.io.ObjectInputStream;
*** 43,240 ****
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.Arrays;
- import java.util.Iterator;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Set;
  
  /**
!  * InputMap
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class InputMap implements Serializable
  {
!   static final long serialVersionUID = -5429059542008604257L;
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * inputMap
! 	 */
! 	private Map inputMap = new HashMap();
! 
! 	/**
! 	 * parent
! 	 */
! 	private InputMap parent = null;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor InputMap
! 	 */
! 	public InputMap() {
! 		// TODO
! 	} // InputMap()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * get
! 	 * @param value0 TODO
! 	 * @returns Object
! 	 */
! 	public Object get(KeyStroke keystroke) {
! 
! 		// Variables
! 		Object	result;
! 
! 		// Check Local store
! 		result = inputMap.get(keystroke);
! 
! 		// Check Parent
! 		if (result == null) {
! 			result = parent.get(keystroke);
! 		} // if
! 
! 		return result;
! 
! 	} // get()
! 
! 	/**
! 	 * put
! 	 * @param keystroke TODO
! 	 * @param actionMapKey TODO
! 	 */
! 	public void put(KeyStroke keystroke, Object actionMapKey) {
! 		if (actionMapKey == null) {
! 			inputMap.remove(keystroke);
! 		} else {
! 			inputMap.put(keystroke, actionMapKey);
! 		} // if
! 	} // put()
! 
! 	/**
! 	 * remove
! 	 * @param keystroke TODO
! 	 */
! 	public void remove(KeyStroke keystroke) {
! 		inputMap.remove(keystroke);
! 	} // remove()
! 
! 	/**
! 	 * getParent
! 	 * @returns InputMap
! 	 */
! 	public InputMap getParent() {
! 		return parent;
! 	} // getParent()
! 
! 	/**
! 	 * setParent
! 	 * @param parentMap TODO
! 	 */
! 	public void setParent(InputMap parentMap) {
! 		parent = parentMap;
! 	} // setParent()
! 
! 	/**
! 	 * size
! 	 * @returns int
! 	 */
! 	public int size() {
! 		return inputMap.size();
! 	} // size()
! 
! 	/**
! 	 * clear
! 	 */
! 	public void clear() {
! 		inputMap.clear();
! 	} // clear()
! 
! 	/**
! 	 * keys
! 	 * @returns KeyStroke[]
! 	 */
! 	public KeyStroke[] keys() {
! 		return convertSet(inputMap.keySet());
! 	} // keys()
  
! 	/**
! 	 * allKeys
! 	 * @returns KeyStroke[]
! 	 */
! 	public KeyStroke[] allKeys() {
  
! 		// Variables
! 		Set			set;
  
! 		// Initialize
! 		set = new HashSet();
  
! 		// Get Key Sets
! 		if (parent != null) {
! 			set.addAll(Arrays.asList(parent.allKeys()));
! 		} // if
! 		set.addAll(inputMap.keySet());
  
! 		return convertSet(set);
  
! 	} // allKeys()
  
! 	private KeyStroke[] convertSet(Set set) {
  
! 		// Variables
! 		int			index;
! 		Iterator	iterator;
! 		KeyStroke[]	keys;
  
! 		// Create Final array
! 		keys = new KeyStroke[set.size()];
! 		iterator = set.iterator();
! 		index = 0;
! 		while (iterator.hasNext()) {
! 			keys[index++] = (KeyStroke) iterator.next();
! 		} // while
  
! 		return keys;
  
! 	} // convertSet()
  
  
! 	//-------------------------------------------------------------
! 	// Interface: Serializable ------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * readObject
! 	 * @param stream TODO
! 	 * @exception ClassNotFoundException TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void readObject(ObjectInputStream stream) throws ClassNotFoundException, IOException {
! 		// TODO
! 	} // readObject()
  
  
! } // InputMap
--- 42,213 ----
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.Arrays;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Set;
  
+ 
  /**
!  * @author Andrew Selkirk
!  * @author Michael Koch
!  *
!  * @since 1.3
   */
! public class InputMap
!   implements Serializable
  {
!   private static final long serialVersionUID = -5429059542008604257L;
  
!   /**
!    * inputMap
!    */
!   private Map inputMap = new HashMap();
  
!   /**
!    * parent
!    */
!   private InputMap parent;
  
!   /**
!    * Creates a new <code>InputMap</code> instance.
!    */
!   public InputMap()
!   {
!     // TODO
!   }
  
!   /**
!    * Returns the binding for keystroke.
!    *
!    * @param key the key of the enty
!    *
!    * @return the binding associated with keystroke may be null
!    */
!   public Object get(KeyStroke keystroke)
!   {
!     Object result = inputMap.get(keystroke);
  
!     if (result == null && parent != null)
!       result = parent.get(keystroke);
!     return result;
!   }
  
!   /**
!    * Puts a new entry into the <code>InputMap</code>.
!    * If actionMapKey is null an existing entry will be removed.
!    *
!    * @param keystroke the keystroke for the entry
!    * @param actionMapKey the action.
!    */
!   public void put(KeyStroke keystroke, Object actionMapKey)
!   {
!     if (actionMapKey == null)
!       inputMap.remove(keystroke);
!     else
!       inputMap.put(keystroke, actionMapKey);
!   }
  
!   /**
!    * Remove an entry from the <code>InputMap</code>.
!    *
!    * @param key the key of the entry to remove
!    */
!   public void remove(KeyStroke keystroke)
!   {
!     inputMap.remove(keystroke);
!   }
  
!   /**
!    * Returns the parent of this <code>InputMap</code>.
!    *
!    * @return the parent, may be null.
!    */
!   public InputMap getParent()
!   {
!     return parent;
!   }
  
!   /**
!    * Sets a parent for this <code>InputMap</code>.
!    *
!    * @param parentMap the new parent
!    */
!   public void setParent(InputMap parentMap)
!   {
!     parent = parentMap;
!   }
  
!   /**
!    * Returns the number of entries in this <code>InputMap</code>.
!    *
!    * @return the number of entries
!    */
!   public int size()
!   {
!     return inputMap.size();
!   }
  
!   /**
!    * Clears the <code>InputMap</code>.
!    */
!   public void clear()
!   {
!     inputMap.clear();
!   }
  
+   /**
+    * Returns all keys of entries in this <code>InputMap</code>.
+    *
+    * @return an array of keys
+    */
+   public KeyStroke[] keys()
+   {
+     KeyStroke[] array = new KeyStroke[size()];
+     return (KeyStroke[]) inputMap.keySet().toArray(array);
+   }
  
!   /**
!    * Returns all keys of entries in this <code>InputMap</code>
!    * and all its parents.
!    *
!    * @return an array of keys
!    */
!   public KeyStroke[] allKeys()
!   {
!     Set set = new HashSet();
  
!     if (parent != null)
!       set.addAll(Arrays.asList(parent.allKeys()));
  
!     set.addAll(inputMap.keySet());
!     KeyStroke[] array = new KeyStroke[size()];
!     return (KeyStroke[]) set.toArray(array);
!   }
  
+   /**
+    * writeObject
+    *
+    * @param stream the stream to write to
+    *
+    * @exception IOException If an error occurs
+    */
+   private void writeObject(ObjectOutputStream stream) throws IOException
+   {
+     // TODO
+   }
  
!   /**
!    * readObject
!    *
!    * @param stream the stream to read from
!    *
!    * @exception ClassNotFoundException If the serialized class cannot be found
!    * @exception IOException If an error occurs
!    */
!   private void readObject(ObjectInputStream stream)
!     throws ClassNotFoundException, IOException
!   {
!     // TODO
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/InputVerifier.java gcc-4.0.0/libjava/javax/swing/InputVerifier.java
*** gcc-3.4.3/libjava/javax/swing/InputVerifier.java	Fri Aug  9 04:26:10 2002
--- gcc-4.0.0/libjava/javax/swing/InputVerifier.java	Tue Nov 30 23:58:52 2004
***************
*** 1,5 ****
  /* InputVerifier.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InputVerifier.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,79 ****
  
  package javax.swing;
  
  /**
   * InputVerifier
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public abstract class InputVerifier {
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor InputVerifier
! 	 */
! 	public InputVerifier() {
! 	} // InputVerifier()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * verify
! 	 * @param component TODO
! 	 * @returns boolean
! 	 */
! 	public abstract boolean verify(JComponent component);
! 
! 	/**
! 	 * shouldYieldFocus
! 	 * @param component TODO
! 	 * @returns boolean
! 	 */
! 	public boolean shouldYieldFocus(JComponent component) {
! 		return verify(component);
! 	} // shouldYieldFocus()
  
  
! } // InputVerifier
--- 37,75 ----
  
  package javax.swing;
  
+ 
  /**
   * InputVerifier
!  * @author Andrew Selkirk
!  * @version 1.0
   */
! public abstract class InputVerifier
! {
!   /**
!    * Creates a <code>InputVerifier</code>
!    */
!   public InputVerifier()
!   {
!   }
  
+   /**
+    * verify
+    *
+    * @param component the component to verify
+    *
+    * @return <code>true</code> if valid, <code>false</code> otherwise.
+    */
+   public abstract boolean verify(JComponent component);
  
!   /**
!    * shouldYieldFocus
!    *
!    * @param component the component to verify
!    *
!    * @return <code>true</code> if valid, <code>false</code> otherwise.
!    */
!   public boolean shouldYieldFocus(JComponent component)
!   {
!     return verify(component);
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/InternalFrameFocusTraversalPolicy.java gcc-4.0.0/libjava/javax/swing/InternalFrameFocusTraversalPolicy.java
*** gcc-3.4.3/libjava/javax/swing/InternalFrameFocusTraversalPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/InternalFrameFocusTraversalPolicy.java	Wed Feb 16 20:02:23 2005
***************
*** 0 ****
--- 1,55 ----
+ /* InternalFrameFocusTraversalPolicy.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.awt.Component;
+ import java.awt.FocusTraversalPolicy;
+ 
+ /**
+  * @author Michael Koch
+  * 
+  * @since 1.4
+  */
+ public abstract class InternalFrameFocusTraversalPolicy extends FocusTraversalPolicy
+ {
+   public Component getInitialComponent(JInternalFrame frame)
+   {
+     return getDefaultComponent(frame);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JApplet.java gcc-4.0.0/libjava/javax/swing/JApplet.java
*** gcc-3.4.3/libjava/javax/swing/JApplet.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JApplet.java	Wed Feb 16 20:02:23 2005
***************
*** 1,5 ****
! /* JApplet.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JApplet.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Dimension;
*** 46,214 ****
  import java.awt.Graphics;
  import java.awt.LayoutManager;
  import java.awt.event.KeyEvent;
! import java.awt.event.WindowEvent;
  import javax.accessibility.AccessibleContext;
  
  public class JApplet extends Applet
  {
! 
!     public final static int HIDE_ON_CLOSE        = 0;
!     public final static int EXIT_ON_CLOSE        = 1;
!     public final static int DISPOSE_ON_CLOSE     = 2;
!     public final static int DO_NOTHING_ON_CLOSE  = 3;
! 
!     private int close_action = EXIT_ON_CLOSE;
!     private boolean checking;  
!     protected  JRootPane         rootPane;
! 
!     public JApplet()
!     {
! 	frameInit();
!     }
    
!     public JApplet(String title)
!     {
! 	frameInit();
!     }
  
!     protected  void frameInit()
!     {
!       super.setLayout(new BorderLayout(1, 1));
!       getRootPane(); // will do set/create
!     }
  
    public Dimension getPreferredSize()
    {
!     Dimension d = super.getPreferredSize();
!     System.out.println("JFrame.getPrefSize(): " + d + " , comp="+countComponents() + ", layout=" + getLayout());
!     return d;
    }
  
!   public  void setLayout(LayoutManager manager)
!   {    super.setLayout(manager);  }
! 
!     void setLayeredPane(JLayeredPane layeredPane) 
!     {   getRootPane().setLayeredPane(layeredPane);   }
!   
!     JLayeredPane getLayeredPane()
!     {   return getRootPane().getLayeredPane();     }
!   
!     JRootPane getRootPane()
!     {
!         if (rootPane == null)
!             setRootPane(createRootPane());
!         return rootPane;          
!     }
! 
!     void setRootPane(JRootPane root)
!     {
!         if (rootPane != null)
!             remove(rootPane);
!             
!         rootPane = root; 
!         add(rootPane, BorderLayout.CENTER);
!     }
  
!     JRootPane createRootPane()
!     {   return new JRootPane();    }
  
!     Container getContentPane()
!     {    return getRootPane().getContentPane();     }
  
!     void setContentPane(Container contentPane)
!     {    getRootPane().setContentPane(contentPane);    }
!   
!     Component getGlassPane()
!     {    return getRootPane().getGlassPane();   }
!   
!     void setGlassPane(Component glassPane)
!     {   getRootPane().setGlassPane(glassPane);   }
  
  
!     /////////////////////////////////////////////////////////////////////////////////
!     protected  void addImpl(Component comp, Object constraints, int index)
!     {   super.addImpl(comp, constraints, index);    }
!   
!     public AccessibleContext getAccessibleContext()
!     {    return null;  }
!   
!     int getDefaultCloseOperation()
!     {    return close_action;   }
  
!     
!     JMenuBar getJMenuBar()
!     {    return getRootPane().getJMenuBar();   }
!     
!     void setJMenuBar(JMenuBar menubar)
!     {    getRootPane().setJMenuBar(menubar); }
!     
!     
!     protected  String paramString()
!     {   return "JFrame";     }
  
!     protected  void processKeyEvent(KeyEvent e)
!     {   super.processKeyEvent(e);    }
  
!     protected  void processWindowEvent(WindowEvent e)
!     {
!         //      System.out.println("PROCESS_WIN_EV-1: " + e);
  
! 	//        super.processWindowEvent(e); 
  
!         //      System.out.println("PROCESS_WIN_EV-2: " + e);
!         switch (e.getID())
!             {
!             case WindowEvent.WINDOW_CLOSING:
!                 {
!                     switch(close_action)
!                         {
!                         case EXIT_ON_CLOSE:
!                             {
!                                 System.out.println("user requested exit on close");
!                                 System.exit(1);
!                                 break;
!                             }
!                         case DISPOSE_ON_CLOSE:
!                             {
!                                 System.out.println("user requested dispose on close");
!                                 //dispose();
!                                 break;
!                             }
!                         case HIDE_ON_CLOSE:
  
!                         case DO_NOTHING_ON_CLOSE:
!                             break;
!                         }
!                     break;
!                 }
!                 
!             case WindowEvent.WINDOW_CLOSED:
!             case WindowEvent.WINDOW_OPENED:
!             case WindowEvent.WINDOW_ICONIFIED:
!             case WindowEvent.WINDOW_DEICONIFIED:
!             case WindowEvent.WINDOW_ACTIVATED:
!             case WindowEvent.WINDOW_DEACTIVATED:
!                 break;
!             }
!     }
!     
  
!     public void remove(Component comp)
!     {   getContentPane().remove(comp);  }
!   
  
!     void setDefaultCloseOperation(int operation)
!     {  close_action = operation;   }
  
  
  
!     protected  boolean isRootPaneCheckingEnabled()
!     {    return checking;        }
  
  
!     protected  void setRootPaneCheckingEnabled(boolean enabled)
!     { checking = enabled;  }
  
!     public void update(Graphics g)
!     {   paint(g);  }
  }
--- 46,176 ----
  import java.awt.Graphics;
  import java.awt.LayoutManager;
  import java.awt.event.KeyEvent;
! 
  import javax.accessibility.AccessibleContext;
  
  public class JApplet extends Applet
+   implements RootPaneContainer
  {
!   private static final long serialVersionUID = 7269359214497372587L;
    
!   protected JRootPane rootPane;
!   protected boolean rootPaneCheckingEnabled;
  
!   public JApplet()
!   {
!     super.setLayout(new BorderLayout(1, 1));
!     getRootPane(); // will do set/create
!   }
  
    public Dimension getPreferredSize()
    {
!     return super.getPreferredSize();
    }
  
!   public void setLayout(LayoutManager manager)
!   {
!     super.setLayout(manager);
!   }
  
!   public void setLayeredPane(JLayeredPane layeredPane)
!   {
!     getRootPane().setLayeredPane(layeredPane);
!   }
  
!   public JLayeredPane getLayeredPane()
!   {
!     return getRootPane().getLayeredPane();
!   }
  
!   public JRootPane getRootPane()
!   {
!     if (rootPane == null)
!       setRootPane(createRootPane());
!     return rootPane;
!   }
  
+   protected void setRootPane(JRootPane root)
+   {
+     if (rootPane != null)
+       remove(rootPane);
  
!     rootPane = root;
!     add(rootPane, BorderLayout.CENTER);
!   }
  
!   protected JRootPane createRootPane()
!   {
!     return new JRootPane();
!   }
  
!   public Container getContentPane()
!   {
!     return getRootPane().getContentPane();
!   }
  
!   public void setContentPane(Container contentPane)
!   {
!     getRootPane().setContentPane(contentPane);
!   }
  
!   public Component getGlassPane()
!   {
!     return getRootPane().getGlassPane();
!   }
  
!   public void setGlassPane(Component glassPane)
!   {
!     getRootPane().setGlassPane(glassPane);
!   }
  
!   protected void addImpl(Component comp, Object constraints, int index)
!   {
!     super.addImpl(comp, constraints, index);
!   }
  
!   public AccessibleContext getAccessibleContext()
!   {
!     return null;
!   }
  
!   public JMenuBar getJMenuBar()
!   {
!     return getRootPane().getJMenuBar();
!   }
  
+   public void setJMenuBar(JMenuBar menubar)
+   {
+     getRootPane().setJMenuBar(menubar);
+   }
  
+   protected String paramString()
+   {
+     return "JFrame";
+   }
  
!   protected void processKeyEvent(KeyEvent e)
!   {
!     super.processKeyEvent(e);
!   }
!   
!   public void remove(Component comp)
!   {
!     getContentPane().remove(comp);
!   }
  
+   protected boolean isRootPaneCheckingEnabled()
+   {
+     return rootPaneCheckingEnabled;
+   }
  
!   protected void setRootPaneCheckingEnabled(boolean enabled)
!   {
!     rootPaneCheckingEnabled = enabled;
!   }
  
!   public void update(Graphics g)
!   {
!     paint(g);
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JButton.java gcc-4.0.0/libjava/javax/swing/JButton.java
*** gcc-3.4.3/libjava/javax/swing/JButton.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/JButton.java	Wed Feb 16 20:02:23 2005
*************** import javax.accessibility.Accessible;
*** 41,134 ****
  import javax.accessibility.AccessibleContext;
  import javax.swing.plaf.ButtonUI;
  
  /**
   * An instance of JButton can be added to a panel, frame etc
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
! public class JButton extends AbstractButton implements Accessible 
  {
    private static final long serialVersionUID = -1907255238954382202L;
  
!     boolean def, is_def;
  
!     
!     public JButton()
!     {
! 	this(null, null);
!     }
  
!     public JButton(Action a)
!     {
! 	this();
! 	setAction(a);
!     }
  
!     public JButton(Icon icon)
!     { 
! 	this(null, icon);
!     }    
!   
!     public JButton(String text)
!     {
! 	this(text, null);
!     }
!       
!     public JButton(String text, Icon icon)
!     {
! 	super(text, icon);
!     }
  
!     public Object[] getSelectedObjects()
!     {
! 	return null;
!     }
!   
!     protected  void configurePropertiesFromAction(Action a)
!     {
! 	//Factory method which sets the AbstractButton's properties according to values from the Action instance. 
!     }
!     
!     public AccessibleContext getAccessibleContext()
!     {
! 	//Gets the AccessibleContext associated with this JButton. 
! 	return null;
!     }
!   
!     public String getUIClassID()
!     {
! 	//Returns a string that specifies the name of the L&F class that renders this component.  
! 	return "JButton";
!     }
!   
!     public boolean isDefaultButton()
!     {
! 	//Returns whether or not this button is the default button on the RootPane.  
! 	return is_def;
!     }
!   
!     public boolean isDefaultCapable()
!     {
! 	//Returns whether or not this button is capable of being the default button on the RootPane. 
! 	return def;
!     }
  
!     protected  String paramString()
!     {
! 	return "JButton";
!     }
!     
!     public void removeNotify()
!     {
! 	//Overrides JComponent.removeNotify to check if this button is currently set as the default button on the RootPane, and if so, sets the RootPane's default button to null to ensure the RootPane doesn't hold onto an invalid button reference.  
!     }
!     
!     public void setDefaultCapable(boolean defaultCapable)
!     {	def = defaultCapable;    }
!     
!     public void updateUI()
!     {
! 	ButtonUI b = (ButtonUI)UIManager.getUI(this);
! 	setUI(b);
!     }
  }
--- 41,142 ----
  import javax.accessibility.AccessibleContext;
  import javax.swing.plaf.ButtonUI;
  
+ 
  /**
   * An instance of JButton can be added to a panel, frame etc
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
! public class JButton extends AbstractButton
!   implements Accessible
  {
    private static final long serialVersionUID = -1907255238954382202L;
+   boolean def;
+   boolean is_def;
  
!   public JButton()
!   {
!     this(null, null);
!   }
  
!   public JButton(Action a)
!   {
!     this();
!     setAction(a);
!   }
  
!   public JButton(Icon icon)
!   {
!     this(null, icon);
!   }
  
!   public JButton(String text)
!   {
!     this(text, null);
!   }
  
!   public JButton(String text, Icon icon)
!   {
!     super(text, icon);
!   }
  
!   public Object[] getSelectedObjects()
!   {
!     return null;
!   }
! 
!   protected void configurePropertiesFromAction(Action a)
!   {
!     //Factory method which sets the AbstractButton's properties according to values from the Action instance. 
!     super.configurePropertiesFromAction(a);
!   }
! 
!   public AccessibleContext getAccessibleContext()
!   {
!     //Gets the AccessibleContext associated with this JButton. 
!     return null;
!   }
! 
!   public String getUIClassID()
!   {
!     //Returns a string that specifies the name of the L&F class that renders this component.  
!     return "ButtonUI";
!   }
! 
!   public boolean isDefaultButton()
!   {
!     //Returns whether or not this button is the default button on the RootPane.  
!     return is_def;
!   }
! 
!   public boolean isDefaultCapable()
!   {
!     //Returns whether or not this button is capable of being the default button on the RootPane. 
!     return def;
!   }
! 
!   protected String paramString()
!   {
!     return "JButton";
!   }
! 
!   /**
!    * Overrides JComponent.removeNotify to check if this button is currently
!    * set as the default button on the RootPane, and if so, sets the RootPane's
!    * default button to null to ensure the RootPane doesn't hold onto an invalid
!    * button reference.
!    */
!   public void removeNotify()
!   {
!   }
! 
!   public void setDefaultCapable(boolean defaultCapable)
!   {
!     def = defaultCapable;
!   }
! 
!   public void updateUI()
!   {
!     setUI((ButtonUI) UIManager.getUI(this));
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JCheckBox.java gcc-4.0.0/libjava/javax/swing/JCheckBox.java
*** gcc-3.4.3/libjava/javax/swing/JCheckBox.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JCheckBox.java	Wed Feb 16 20:02:23 2005
***************
*** 1,5 ****
  /* JCheckBox.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JCheckBox.java -- 
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.accessibility.AccessibleCon
*** 47,92 ****
   */
  public class JCheckBox extends JToggleButton
  {
!     public JCheckBox()
!     {
! 	this(null, null);
!     }
!     public JCheckBox(Action a)
!     {
! 	this();
! 	setAction(a);
!     }
  
!     public JCheckBox(Icon icon)
!     { 
! 	this(null, icon);
!     }    
    
!     public JCheckBox(String text)
!     {
! 	this(text, null);
!     }
        
!     public JCheckBox(String text, Icon icon)
!     {
! 	super(text, icon);
!     }
  
!     
!     public AccessibleContext getAccessibleContext()
!     {
! 	//Gets the AccessibleContext associated with this JCheckBox. 
! 	return null;
!     }
    
!     public String getUIClassID()
!     {
! 	//Returns a string that specifies the name of the L&F class that renders this component.  
! 	return "JCheckBox";
!     }
    
!     protected  String paramString()
!     {
! 	return "JCheckBox";
!     }
  }
--- 47,143 ----
   */
  public class JCheckBox extends JToggleButton
  {
!   private static final long serialVersionUID = -5246739313864538930L;
  
!   public static final String BORDER_PAINTED_FLAT_CHANGED_PROPERTY =
!     "borderPaintedFlat";
    
!   private boolean borderPaintedFlat;
! 
!   private void init()
!   {
!     borderPainted = false;
!     contentAreaFilled = false;
!   }
!   
!   public JCheckBox()
!   {
!     super();
!     init();
!   }
! 
!   public JCheckBox(Action action)
!   {
!     super(action);
!     init();
!   }
! 
!   public JCheckBox(Icon icon)
!   { 
!     super(icon);
!     init();
!   }    
!   
!   public JCheckBox(Icon icon, boolean selected)
!   { 
!     super(icon, selected);
!     init();
!   }    
!   
!   public JCheckBox(String text)
!   {
!     super(text);
!     init();
!   }
        
!   public JCheckBox(String text, boolean selected)
!   {
!     super(text, selected);
!     init();
!   }
!       
!   public JCheckBox(String text, Icon icon)
!   {
!     super(text, icon);
!     init();
!   }
  
!   public JCheckBox(String text, Icon icon, boolean selected)
!   {
!     super(text, icon, selected);
!     init();
!   }
! 
!   /**
!    * Gets the AccessibleContext associated with this JCheckBox.
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     return null;
!   }
    
!   /**
!    * Returns a string that specifies the name of the Look and Feel class
!    * that renders this component.
!    */
!   public String getUIClassID()
!   {
!     return "CheckBoxUI";
!   }
    
!   protected  String paramString()
!   {
!     return "JCheckBox";
!   }
! 
!   public boolean isBorderPaintedFlat()
!   {
!     return borderPaintedFlat;
!   }
! 
!   public void setBorderPaintedFlat(boolean newValue)
!   {
!     firePropertyChange("borderPaintedFlat", borderPaintedFlat, newValue);
!     borderPaintedFlat = newValue;
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JCheckBoxMenuItem.java gcc-4.0.0/libjava/javax/swing/JCheckBoxMenuItem.java
*** gcc-3.4.3/libjava/javax/swing/JCheckBoxMenuItem.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/JCheckBoxMenuItem.java	Wed Feb 16 20:02:24 2005
*************** this exception to your version of the li
*** 35,244 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.io.IOException;
  import java.io.ObjectOutputStream;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  
  /**
!  * JCheckBoxMenuItem
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants, Accessible
  {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleJCheckBoxMenuItem
! 	 */
! 	protected class AccessibleJCheckBoxMenuItem extends AccessibleJMenuItem {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJCheckBoxMenuItem
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJCheckBoxMenuItem(JCheckBoxMenuItem component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJCheckBoxMenuItem()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.CHECK_BOX;
! 		} // getAccessibleRole()
! 
! 
! 	} // AccessibleJCheckBoxMenuItem
! 
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "CheckBoxMenuItemUI";
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JCheckBoxMenuItem
! 	 */
! 	public JCheckBoxMenuItem() {
! 		// TODO
! 	} // JCheckBoxMenuItem()
  
! 	/**
! 	 * Constructor JCheckBoxMenuItem
! 	 * @param icon TODO
! 	 */
! 	public JCheckBoxMenuItem(Icon icon) {
! 		// TODO
! 	} // JCheckBoxMenuItem()
  
! 	/**
! 	 * Constructor JCheckBoxMenuItem
! 	 * @param text TODO
! 	 */
! 	public JCheckBoxMenuItem(String text) {
! 		// TODO
! 	} // JCheckBoxMenuItem()
  
! 	/**
! 	 * Constructor JCheckBoxMenuItem
! 	 * @param action TODO
! 	 */
! 	public JCheckBoxMenuItem(Action action) {
! 		// TODO
! 	} // JCheckBoxMenuItem()
  
! 	/**
! 	 * Constructor JCheckBoxMenuItem
! 	 * @param text TODO
! 	 * @param icon TODO
! 	 */
! 	public JCheckBoxMenuItem(String text, Icon icon) {
! 		// TODO
! 	} // JCheckBoxMenuItem()
  
! 	/**
! 	 * Constructor JCheckBoxMenuItem
! 	 * @param text TODO
! 	 * @param state TODO
! 	 */
! 	public JCheckBoxMenuItem(String text, boolean state) {
! 		// TODO
! 	} // JCheckBoxMenuItem()
  
! 	/**
! 	 * Constructor JCheckBoxMenuItem
! 	 * @param text TODO
! 	 * @param icon TODO
! 	 * @param state TODO
! 	 */
! 	public JCheckBoxMenuItem(String text, Icon icon, boolean state) {
! 		// TODO
! 	} // JCheckBoxMenuItem()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * getState
! 	 * @returns boolean
! 	 */
! 	public boolean getState() {
! 		return false; // TODO
! 	} // getState()
  
! 	/**
! 	 * setState
! 	 * @param state TODO
! 	 */
! 	public synchronized void setState(boolean state) {
! 		// TODO
! 	} // setState()
  
! 	/**
! 	 * getSelectedObjects
! 	 * @returns Object[]
! 	 */
! 	public Object[] getSelectedObjects() {
! 		return null; // TODO
! 	} // getSelectedObjects()
  
! 	/**
! 	 * requestFocus
! 	 */
! 	public void requestFocus() {
! 		// TODO
! 	} // requestFocus()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJCheckBoxMenuItem(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JCheckBoxMenuItem
--- 35,250 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.io.IOException;
  import java.io.ObjectOutputStream;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  
  /**
!  * This class represents JCheckBoxMenuItem. Its behaviour is very similar
!  * to JCheckBoxButton. Just like the JCheckBoxButton, user can check and
!  * uncheck this menu item by clicking on it. Also setSelected()/setState()
!  * can be use used for the same purpose. JCheckBoxMenuItem uses
!  * ToggleButtonModel to keep track of its selection.
   */
! public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants,
!                                                             Accessible
  {
+   private static final long serialVersionUID = -6676402307973384715L;
  
!   /** name for the UI delegate for this menuItem. */
!   private static final String uiClassID = "CheckBoxMenuItemUI";
  
!   /** Indicates whether this menu item is checked. */
!   private boolean state;
  
+   /**
+    * This array contains text of this menu item if this menu item is in
+    * checked state and null it is not.
+    */
+   private Object[] selectedObjects = new Object[1];
  
!   /**
!    * Creates a new JCheckBoxMenuItem object.
!    */
!   public JCheckBoxMenuItem()
!   {
!     this(null, null);
!   }
  
!   /**
!    * Creates a new JCheckBoxMenuItem with given icon
!    *
!    * @param icon Icon for this menu item
!    */
!   public JCheckBoxMenuItem(Icon icon)
!   {
!     this(null, icon);
!   }
  
!   /**
!    * Creates a new JCheckBoxMenuItem with given label
!    *
!    * @param text Label for this menu item
!    */
!   public JCheckBoxMenuItem(String text)
!   {
!     this(text, null);
!   }
  
!   /**
!    * Creates a new JCheckBoxMenuItem using given action
!    *
!    * @param action Action for this menu item.
!    */
!   public JCheckBoxMenuItem(Action action)
!   {
!     this();
!     setAction(action);
!   }
  
!   /**
!    * Creates a new JCheckBoxMenuItem object with given label and icon
!    *
!    * @param text Label for this menu item
!    * @param icon Icon for this menu item
!    */
!   public JCheckBoxMenuItem(String text, Icon icon)
!   {
!     this(text, icon, false);
!   }
  
!   /**
!    * Creates a new JCheckBoxMenuItem object using specified label and
!    * marked as checked if given 'state' is true
!    *
!    * @param text Label for this menu item
!    * @param state True if this item should be in checked state and false otherwise
!    */
!   public JCheckBoxMenuItem(String text, boolean state)
!   {
!     this(text, null, state);
!   }
  
!   /**
!    * Creates a new JCheckBoxMenuItem object with given label, icon,
!    * and marked as checked if given 'state' is true
!    *
!    * @param text Label for this menu item
!    * @param icon icon for this menu item
!    * @param state  True if this item should be in checked state and false otherwise
!    */
!   public JCheckBoxMenuItem(String text, Icon icon, boolean state)
!   {
!     super(text, icon);
!     setModel(new JToggleButton.ToggleButtonModel());
!     this.state = state;
!   }
  
!   private void writeObject(ObjectOutputStream stream) throws IOException
!   {
!   }
  
+   /**
+    * This method returns a name to identify which look and feel class will be
+    * the UI delegate for the menuItem.
+    *
+    * @return The Look and Feel classID. "JCheckBoxMenuItemUI"
+    */
+   public String getUIClassID()
+   {
+     return uiClassID;
+   }
  
!   /**
!    * Returns checked state for this check box menu item.
!    *
!    * @return Returns true if this menu item is in checked state
!    * and false otherwise.
!    */
!   public boolean getState()
!   {
!     return state;
!   }
  
!   /**
!    * Sets state for this check box menu item. If
!    * given 'state' is true, then mark menu item as checked,
!    * and uncheck this menu item otherwise.
!    *
!    * @param state new state for this menu item
!    *
!    */
!   public synchronized void setState(boolean state)
!   {
!     this.state = state;
!   }
  
!   /**
!    * This method returns array containing label of this
!    * menu item if it is selected and null otherwise.
!    *
!    * @return Array containing label of this
!    * menu item if this menu item is selected or null otherwise.
!    */
!   public Object[] getSelectedObjects()
!   {
!     if (state == true)
!       selectedObjects[0] = this.getText();
!     else
!       selectedObjects[0] = null;
  
!     return selectedObjects;
!   }
  
!   /**
!     * This method overrides JComponent.requestFocus with an empty
!     * implementation, since JCheckBoxMenuItems should not
!     * receve focus in general.
!     */
!   public void requestFocus()
!   {
!     //  Should do nothing here
!   }
  
!   /**
!    * A string that describes this JCheckBoxMenuItem. Normally only used
!    * for debugging.
!    *
!    * @return A string describing this JCheckBoxMenuItem
!    */
!   protected String paramString()
!   {
!     return "JCheckBoxMenuItem";
!   }
  
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJCheckBoxMenuItem();
  
!     return accessibleContext;
!   }
  
!   protected class AccessibleJCheckBoxMenuItem extends AccessibleJMenuItem
!   {
!     private static final long serialVersionUID = 1079958073579370777L;
  
+     /**
+      * Creates a new AccessibleJCheckBoxMenuItem object.
+      */
+     protected AccessibleJCheckBoxMenuItem()
+     {
+     }
  
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.CHECK_BOX;
!     }
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JColorChooser.java gcc-4.0.0/libjava/javax/swing/JColorChooser.java
*** gcc-3.4.3/libjava/javax/swing/JColorChooser.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JColorChooser.java	Tue Nov 30 23:58:52 2004
***************
*** 1,5 ****
  /* JColorChooser.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JColorChooser.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,370 ****
  
  package javax.swing;
  
  import java.awt.Color;
  import java.awt.Component;
  import java.awt.event.ActionListener;
! import java.io.IOException;
! import java.io.ObjectOutputStream;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.swing.colorchooser.AbstractColorChooserPanel;
  import javax.swing.colorchooser.ColorSelectionModel;
  import javax.swing.plaf.ColorChooserUI;
  
  /**
!  * JColorChooser
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JColorChooser extends JComponent implements Accessible {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * AccessibleJColorChooser
! 	 */
! 	protected class AccessibleJColorChooser extends JComponent.AccessibleJComponent {
  
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
  
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor AccessibleJColorChooser
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJColorChooser(JColorChooser component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJColorChooser()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.COLOR_CHOOSER;
! 		} // getAccessibleRole()
  
  
! 	} // AccessibleJColorChooser
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "ColorChooserUI";
  
! 	/**
! 	 * selectionModel
! 	 */
! 	private ColorSelectionModel selectionModel;
  
! 	/**
! 	 * previewPanel
! 	 */
! 	private JComponent previewPanel;
  
! 	/**
! 	 * chooserPanels
! 	 */
! 	private AbstractColorChooserPanel[] chooserPanels;
  
! 	/**
! 	 * SELECTION_MODEL_PROPERTY
! 	 */
! 	public static final String SELECTION_MODEL_PROPERTY = "selectionModel";
  
! 	/**
! 	 * PREVIEW_PANEL_PROPERTY
! 	 */
! 	public static final String PREVIEW_PANEL_PROPERTY = "previewPanel";
  
! 	/**
! 	 * CHOOSER_PANELS_PROPERTY
! 	 */
! 	public static final String CHOOSER_PANELS_PROPERTY = "chooserPanels";
  
! 	/**
! 	 * accessibleContext
! 	 */
! 	protected AccessibleContext accessibleContext;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JColorChooser
! 	 */
! 	public JColorChooser() {
! 		// TODO
! 	} // JColorChooser()
  
! 	/**
! 	 * Constructor JColorChooser
! 	 * @param initial TODO
! 	 */
! 	public JColorChooser(Color initial) {
! 		// TODO
! 	} // JColorChooser()
  
! 	/**
! 	 * Constructor JColorChooser
! 	 * @param model TODO
! 	 */
! 	public JColorChooser(ColorSelectionModel model) {
! 		// TODO
! 	} // JColorChooser()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * setColor
! 	 * @param color TODO
! 	 */
! 	public void setColor(Color color) {
! 		// TODO
! 	} // setColor()
  
! 	/**
! 	 * setColor
! 	 * @param r TODO
! 	 * @param g TODO
! 	 * @param b TODO
! 	 */
! 	public void setColor(int r, int g, int b) {
! 		// TODO
! 	} // setColor()
  
! 	/**
! 	 * setColor
! 	 * @param color TODO
! 	 */
! 	public void setColor(int color) {
! 		// TODO
! 	} // setColor()
  
! 	/**
! 	 * showDialog
! 	 * @param component TODO
! 	 * @param title TODO
! 	 * @param initial TODO
! 	 * @returns Color
! 	 */
! 	public static Color showDialog(Component component, String title,
! 			Color initial) {
! 		return null; // TODO
! 	} // showDialog()
  
! 	/**
! 	 * createDialog
! 	 * @param component TODO
! 	 * @param title TODO
! 	 * @param modal TODO
! 	 * @param chooserPane TODO
! 	 * @param okListener TODO
! 	 * @param cancelListener TODO
! 	 * @returns JDialog
! 	 */
! 	public static JDialog createDialog(Component component, String title,
! 			boolean modal, JColorChooser chooserPane,
! 			ActionListener okListener, ActionListener cancelListener) {
! 		return null; // TODO
! 	} // createDialog()
  
! 	/**
! 	 * getUI
! 	 * @returns ColorChooserUI
! 	 */
! 	public ColorChooserUI getUI() {
! 		return (ColorChooserUI) ui;
! 	} // getUI()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(ColorChooserUI ui) {
! 		super.setUI(ui);
! 	} // setUI()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((ColorChooserUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * getColor
! 	 * @returns Color
! 	 */
! 	public Color getColor() {
! 		return null; // TODO
! 	} // getColor()
  
! 	/**
! 	 * setPreviewPanel
! 	 * @param component TODO
! 	 */
! 	public void setPreviewPanel(JComponent component) {
! 		// TODO
! 	} // setPreviewPanel()
  
! 	/**
! 	 * getPreviewPanel
! 	 * @returns JComponent
! 	 */
! 	public JComponent getPreviewPanel() {
! 		return null; // TODO
! 	} // getPreviewPanel()
  
! 	/**
! 	 * addChooserPanel
! 	 * @param panel TODO
! 	 */
! 	public void addChooserPanel(AbstractColorChooserPanel panel) {
! 		// TODO
! 	} // addChooserPanel()
  
! 	/**
! 	 * removeChooserPanel
! 	 * @param panel TODO
! 	 * @returns AbstractColorChooserPanel
! 	 */
! 	public AbstractColorChooserPanel removeChooserPanel(
! 			AbstractColorChooserPanel panel) {
! 		return null; // TODO
! 	} // removeChooserPanel()
  
! 	/**
! 	 * setChooserPanels
! 	 * @param panels TODO
! 	 */
! 	public void setChooserPanels(AbstractColorChooserPanel[] panels) {
! 		// TODO
! 	} // setChooserPanels()
  
! 	/**
! 	 * getChooserPanels
! 	 * @returns AbstractColorChooserPanel[]
! 	 */
! 	public AbstractColorChooserPanel[] getChooserPanels() {
! 		return null; // TODO
! 	} // getChooserPanels()
  
! 	/**
! 	 * getSelectionModel
! 	 * @returns ColorSelectionModel
! 	 */
! 	public ColorSelectionModel getSelectionModel() {
! 		return null; // TODO
! 	} // getSelectionModel()
  
! 	/**
! 	 * setSelectionModel
! 	 * @param model TODO
! 	 */
! 	public void setSelectionModel(ColorSelectionModel model) {
! 		// TODO
! 	} // setSelectionModel()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJColorChooser(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JColorChooser
--- 38,704 ----
  
  package javax.swing;
  
+ import java.awt.AWTError;
+ import java.awt.BorderLayout;
  import java.awt.Color;
  import java.awt.Component;
+ import java.awt.Dialog;
+ import java.awt.FlowLayout;
+ import java.awt.Frame;
+ import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
! 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.swing.colorchooser.AbstractColorChooserPanel;
  import javax.swing.colorchooser.ColorSelectionModel;
+ import javax.swing.colorchooser.DefaultColorSelectionModel;
  import javax.swing.plaf.ColorChooserUI;
  
+ 
  /**
!  * The JColorChooser is a Swing widget that offers users different ways to
!  * select a color. By default, three different panels are presented to the
!  * user that are capable of changing the selected color. There are three ways
!  * to utilize JColorChooser. The first is to build a JColorChooser and add it
!  * to the content pane. The second is to use the createDialog method to
!  * create a JDialog that holds a JColorChooser. The third is to show a
!  * JColorChooser in a JDialog directly using the showDialog method.
   */
! public class JColorChooser extends JComponent implements Accessible
! {
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = 9168066781620640889L;
  
!   /**
!    * AccessibleJColorChooser
!    */
!   protected class AccessibleJColorChooser
!     extends JComponent.AccessibleJComponent
!   {
!     /** DOCUMENT ME! */
!     private static final long serialVersionUID = -2038297864782299082L;
  
!     /**
!      * Constructor AccessibleJColorChooser
!      */
!     protected AccessibleJColorChooser()
!     {
!     }
  
!     /**
!      * getAccessibleRole
!      *
!      * @return AccessibleRole
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.COLOR_CHOOSER;
!     } // getAccessibleRole()
!   } // AccessibleJColorChooser
  
+   /** The model used with the JColorChooser. */
+   private ColorSelectionModel selectionModel;
  
!   /** The preview panel associated with the JColorChooser. */
!   private JComponent previewPanel;
  
!   /**
!    * The set of AbstractColorChooserPanels associated with the JColorChooser.
!    */
!   private AbstractColorChooserPanel[] chooserPanels;
  
+   /** A Drag and Drop property. */
+   private boolean dragEnabled;
  
!   /**
!    * The property fired by the JColorChooser when the selectionModel property
!    * changes.
!    */
!   public static final String SELECTION_MODEL_PROPERTY = "selectionModel";
  
!   /**
!    * The property fired by the JColorChooser when the previewPanel property
!    * changes.
!    */
!   public static final String PREVIEW_PANEL_PROPERTY = "previewPanel";
  
+   /**
+    * The property fired by the JColorChooser when the chooserPanels property
+    * changes.
+    */
+   public static final String CHOOSER_PANELS_PROPERTY = "chooserPanels";
  
!   /** accessibleContext */
!   protected AccessibleContext accessibleContext;
  
+   /**
+    * This method creates a new JColorChooser with the default initial color.
+    */
+   public JColorChooser()
+   {
+     this(new DefaultColorSelectionModel());
+   } // JColorChooser()
  
!   /**
!    * This method creates a new JColorChooser with the given initial color.
!    *
!    * @param initial The initial color.
!    */
!   public JColorChooser(Color initial)
!   {
!     this(new DefaultColorSelectionModel(initial));
!   } // JColorChooser()
  
!   /**
!    * This method creates a new JColorChooser with the given model. The model
!    * will dictate what the initial color for the JColorChooser is.
!    *
!    * @param model The Model to use with the JColorChooser.
!    */
!   public JColorChooser(ColorSelectionModel model)
!   {
!     if (model == null)
!       model = new DefaultColorSelectionModel();
!     selectionModel = model;
!     updateUI();
!   } // JColorChooser()
  
!   /**
!    * This method sets the current color for the JColorChooser.
!    *
!    * @param color The new color for the JColorChooser.
!    */
!   public void setColor(Color color)
!   {
!     if (color != null)
!       selectionModel.setSelectedColor(color);
!   } // setColor()
  
!   /**
!    * This method sets the current color for the JColorChooser using RGB
!    * values.
!    *
!    * @param r The red value.
!    * @param g The green value.
!    * @param b The blue value.
!    */
!   public void setColor(int r, int g, int b)
!   {
!     selectionModel.setSelectedColor(new Color(r, g, b));
!   } // setColor()
  
!   /**
!    * This method sets the current color for the JColorChooser using the
!    * integer value. Bits 0-7 represent the blue value. Bits 8-15 represent
!    * the green value. Bits 16-23 represent the red value.
!    *
!    * @param color The new current color of the JColorChooser.
!    */
!   public void setColor(int color)
!   {
!     setColor(new Color(color, false));
!   } // setColor()
  
!   /**
!    * This method shows a JColorChooser inside a JDialog. The JDialog will
!    * block until it is hidden. The JDialog comes with three buttons: OK,
!    * Cancel, and Reset. Pressing OK or Cancel hide the JDialog. Pressing
!    * Reset will reset the JColorChooser to its initial value.
!    *
!    * @param component The Component that parents the JDialog.
!    * @param title The title displayed in the JDialog.
!    * @param initial The initial color.
!    *
!    * @return The selected color.
!    */
!   public static Color showDialog(Component component, String title,
!                                  Color initial)
!   {
!     JColorChooser choose = new JColorChooser(initial);
  
!     JDialog dialog = createDialog(component, title, true, choose, null, null);
  
!     dialog.getContentPane().add(choose);
!     dialog.pack();
!     dialog.show();
  
!     return choose.getColor();
!   } // showDialog()
  
+   /**
+    * This is a helper method to make the given JDialog block until it is
+    * hidden.
+    *
+    * @param dialog The JDialog to block.
+    */
+   private static void makeModal(JDialog dialog)
+   {
+     try
+       {
+ 	synchronized (dialog)
+ 	  {
+ 	    while (dialog.isVisible())
+ 	      dialog.wait();
+ 	  }
+       }
+     catch (InterruptedException e)
+       {
+       }
+   }
  
!   /**
!    * This is a helper method to find the first Frame or Dialog ancestor of the
!    * given Component.
!    *
!    * @param c The Component to find ancestors for.
!    *
!    * @return A Frame or Dialog ancestor. Null if none are found.
!    */
!   private static Component findParent(Component c)
!   {
!     Component parent = SwingUtilities.getAncestorOfClass(Frame.class, c);
!     if (parent != null)
!       return parent;
!     parent = SwingUtilities.getAncestorOfClass(Dialog.class, c);
!     return parent;
!   }
  
!   /**
!    * This method will take the given JColorChooser and place it in a JDialog
!    * with the given modal property. Three buttons are displayed in the
!    * JDialog: OK, Cancel and Reset. If OK or Cancel are pressed, the JDialog
!    * is hidden. If Reset is pressed, then the JColorChooser will take on its
!    * default color value. The given okListener will be registered to the OK
!    * button and the cancelListener will be registered to the Cancel button.
!    * If the modal property is set, then the JDialog will block until it is
!    * hidden.
!    *
!    * @param component The Component that will parent the JDialog.
!    * @param title The title displayed in the JDialog.
!    * @param modal The modal property.
!    * @param chooserPane The JColorChooser to place in the JDialog.
!    * @param okListener The ActionListener to register to the OK button.
!    * @param cancelListener The ActionListener to register to the Cancel
!    *        button.
!    *
!    * @return A JDialog with the JColorChooser inside of it.
!    *
!    * @throws AWTError If the component is not a suitable parent.
!    */
!   public static JDialog createDialog(Component component, String title,
!                                      boolean modal, JColorChooser chooserPane,
!                                      ActionListener okListener,
!                                      ActionListener cancelListener)
!   {
!     Component parent = findParent(component);
!     if (parent == null)
!       throw new AWTError("No suitable parent found for Component.");
!     JDialog dialog;
!     if (parent instanceof Frame)
!       dialog = new ModalDialog((Frame) parent, title);
!     else
!       dialog = new ModalDialog((Dialog) parent, title);
!     dialog.setModal(modal);
  
!     dialog.getContentPane().setLayout(new BorderLayout());
  
!     JPanel panel = new JPanel();
!     panel.setLayout(new FlowLayout());
  
+     ActionListener al = new DefaultOKCancelListener(dialog);
  
!     JButton ok = new JButton("OK");
!     ok.addActionListener(okListener);
!     ok.addActionListener(al);
  
!     JButton cancel = new JButton("Cancel");
!     cancel.addActionListener(cancelListener);
!     cancel.addActionListener(al);
  
!     JButton reset = new JButton("Reset");
!     reset.addActionListener(new DefaultResetListener(chooserPane));
  
!     dialog.getContentPane().add(chooserPane, BorderLayout.NORTH);
  
!     panel.add(ok);
!     panel.add(cancel);
!     panel.add(reset);
  
!     dialog.getContentPane().add(panel, BorderLayout.SOUTH);
  
!     return dialog;
!   } // createDialog()
  
!   /**
!    * This method returns the UI Component used for this JColorChooser.
!    *
!    * @return The UI Component for this JColorChooser.
!    */
!   public ColorChooserUI getUI()
!   {
!     return (ColorChooserUI) ui;
!   } // getUI()
  
!   /**
!    * This method sets the UI Component used for this JColorChooser.
!    *
!    * @param ui The UI Component to use with this JColorChooser.
!    */
!   public void setUI(ColorChooserUI ui)
!   {
!     super.setUI(ui);
!   } // setUI()
  
!   /**
!    * This method resets the UI Component property to the Look and Feel
!    * default.
!    */
!   public void updateUI()
!   {
!     setUI((ColorChooserUI) UIManager.getUI(this));
!     revalidate();
!   } // updateUI()
  
!   /**
!    * This method returns a String identifier for the UI Class to be used with
!    * the JColorChooser.
!    *
!    * @return The String identifier for the UI Class.
!    */
!   public String getUIClassID()
!   {
!     return "ColorChooserUI";
!   } // getUIClassID()
  
!   /**
!    * This method returns the current color for the JColorChooser.
!    *
!    * @return The current color for the JColorChooser.
!    */
!   public Color getColor()
!   {
!     return selectionModel.getSelectedColor(); // TODO
!   } // getColor()
  
!   /**
!    * This method changes the previewPanel property for the JTabbedPane. The
!    * previewPanel is responsible for indicating the current color of the
!    * JColorChooser.
!    *
!    * @param component The Component that will act as the previewPanel.
!    */
!   public void setPreviewPanel(JComponent component)
!   {
!     if (component != previewPanel)
!       {
! 	JComponent old = previewPanel;
! 	previewPanel = component;
! 	firePropertyChange(PREVIEW_PANEL_PROPERTY, old, previewPanel);
!       }
!   } // setPreviewPanel()
  
!   /**
!    * This method returns the current previewPanel used with this
!    * JColorChooser.
!    *
!    * @return The current previewPanel.
!    */
!   public JComponent getPreviewPanel()
!   {
!     return previewPanel; // TODO
!   } // getPreviewPanel()
  
!   /**
!    * This method adds the given AbstractColorChooserPanel to the list of the
!    * JColorChooser's chooserPanels.
!    *
!    * @param panel The AbstractColorChooserPanel to add.
!    */
!   public void addChooserPanel(AbstractColorChooserPanel panel)
!   {
!     if (panel == null)
!       return;
!     AbstractColorChooserPanel[] old = chooserPanels;
!     AbstractColorChooserPanel[] newPanels = new AbstractColorChooserPanel[(old == null)
!                                                                           ? 1
!                                                                           : old.length
!                                                                           + 1];
!     if (old != null)
!       System.arraycopy(old, 0, newPanels, 0, old.length);
!     newPanels[newPanels.length - 1] = panel;
!     chooserPanels = newPanels;
!     panel.installChooserPanel(this);
!     firePropertyChange(CHOOSER_PANELS_PROPERTY, old, newPanels);
!   } // addChooserPanel()
  
!   /**
!    * This method removes the given AbstractColorChooserPanel from the
!    * JColorChooser's list of chooserPanels.
!    *
!    * @param panel The AbstractColorChooserPanel to remove.
!    *
!    * @return The AbstractColorChooserPanel that was removed.
!    */
!   public AbstractColorChooserPanel removeChooserPanel(AbstractColorChooserPanel panel)
!   {
!     int index = -1;
!     for (int i = 0; i < chooserPanels.length; i++)
!       if (panel == chooserPanels[i])
!         {
! 	  index = i;
! 	  break;
!         }
  
!     if (index == -1)
!       return null;
  
!     AbstractColorChooserPanel[] old = chooserPanels;
!     if (chooserPanels.length == 1)
!       chooserPanels = null;
!     else
!       {
! 	AbstractColorChooserPanel[] newPanels = new AbstractColorChooserPanel[chooserPanels.length
! 	                                        - 1];
! 	System.arraycopy(chooserPanels, 0, newPanels, 0, index);
! 	System.arraycopy(chooserPanels, index, newPanels, index - 1,
! 	                 chooserPanels.length - index);
! 	chooserPanels = newPanels;
!       }
!     panel.uninstallChooserPanel(this);
!     firePropertyChange(CHOOSER_PANELS_PROPERTY, old, chooserPanels);
!     return panel;
!   }
  
!   /**
!    * This method sets the chooserPanels property for this JColorChooser.
!    *
!    * @param panels The new set of AbstractColorChooserPanels to use.
!    */
!   public void setChooserPanels(AbstractColorChooserPanel[] panels)
!   {
!     if (panels != chooserPanels)
!       {
! 	if (chooserPanels != null)
! 	  for (int i = 0; i < chooserPanels.length; i++)
! 	    if (chooserPanels[i] != null)
! 	      chooserPanels[i].uninstallChooserPanel(this);
  
! 	AbstractColorChooserPanel[] old = chooserPanels;
! 	chooserPanels = panels;
  
! 	if (panels != null)
! 	  for (int i = 0; i < panels.length; i++)
! 	    if (panels[i] != null)
! 	      panels[i].installChooserPanel(this);
  
! 	firePropertyChange(CHOOSER_PANELS_PROPERTY, old, chooserPanels);
!       }
!   } // setChooserPanels()
  
+   /**
+    * This method returns the AbstractColorChooserPanels used with this
+    * JColorChooser.
+    *
+    * @return The AbstractColorChooserPanels used with this JColorChooser.
+    */
+   public AbstractColorChooserPanel[] getChooserPanels()
+   {
+     return chooserPanels;
+   } // getChooserPanels()
  
!   /**
!    * This method returns the ColorSelectionModel used with this JColorChooser.
!    *
!    * @return The ColorSelectionModel.
!    */
!   public ColorSelectionModel getSelectionModel()
!   {
!     return selectionModel;
!   } // getSelectionModel()
! 
!   /**
!    * This method sets the ColorSelectionModel to be used with this
!    * JColorChooser.
!    *
!    * @param model The ColorSelectionModel to be used with this JColorChooser.
!    *
!    * @throws AWTError If the given model is null.
!    */
!   public void setSelectionModel(ColorSelectionModel model)
!   {
!     if (model == null)
!       throw new AWTError("ColorSelectionModel is not allowed to be null.");
!     selectionModel = model;
!   } // setSelectionModel()
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public boolean getDragEnabled()
!   {
!     return dragEnabled;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @param b DOCUMENT ME!
!    */
!   public void setDragEnabled(boolean b)
!   {
!     dragEnabled = b;
!   }
! 
!   /**
!    * This method returns a String describing the JColorChooser.
!    *
!    * @return A String describing the JColorChooser.
!    */
!   protected String paramString()
!   {
!     return "JColorChooser";
!   } // paramString()
! 
!   /**
!    * getAccessibleContext
!    *
!    * @return AccessibleContext
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJColorChooser();
! 
!     return accessibleContext;
!   }
! 
!   /**
!    * A helper class that hides a JDialog when the action is performed.
!    */
!   static class DefaultOKCancelListener implements ActionListener
!   {
!     /** The JDialog to hide. */
!     private JDialog dialog;
! 
!     /**
!      * Creates a new DefaultOKCancelListener with the given JDialog to hide.
!      *
!      * @param dialog The JDialog to hide.
!      */
!     public DefaultOKCancelListener(JDialog dialog)
!     {
!       super();
!       this.dialog = dialog;
!     }
! 
!     /**
!      * This method hides the JDialog when called.
!      *
!      * @param e The ActionEvent.
!      */
!     public void actionPerformed(ActionEvent e)
!     {
!       dialog.hide();
!     }
!   }
! 
!   /**
!    * This method resets the JColorChooser color to the initial color when the
!    * action is performed.
!    */
!   static class DefaultResetListener implements ActionListener
!   {
!     /** The JColorChooser to reset. */
!     private JColorChooser chooser;
! 
!     /** The initial color. */
!     private Color init;
! 
!     /**
!      * Creates a new DefaultResetListener with the given JColorChooser.
!      *
!      * @param chooser The JColorChooser to reset.
!      */
!     public DefaultResetListener(JColorChooser chooser)
!     {
!       super();
!       this.chooser = chooser;
!       init = chooser.getColor();
!     }
! 
!     /**
!      * This method resets the JColorChooser to its initial color.
!      *
!      * @param e The ActionEvent.
!      */
!     public void actionPerformed(ActionEvent e)
!     {
!       chooser.setColor(init);
!     }
!   }
! 
!   /**
!    * This is a custom JDialog that will notify when it is hidden and the modal
!    * property is set.
!    */
!   static class ModalDialog extends JDialog
!   {
!     /** The modal property. */
!     private boolean modal;
! 
!     /**
!      * Creates a new ModalDialog object with the given parent and title.
!      *
!      * @param parent The parent of the JDialog.
!      * @param title The title of the JDialog.
!      */
!     public ModalDialog(Frame parent, String title)
!     {
!       super(parent, title);
!     }
! 
!     /**
!      * Creates a new ModalDialog object with the given parent and title.
!      *
!      * @param parent The parent of the JDialog.
!      * @param title The title of the JDialog.
!      */
!     public ModalDialog(Dialog parent, String title)
!     {
!       super(parent, title);
!     }
! 
!     /**
!      * This method sets the modal property.
!      *
!      * @param modal The modal property.
!      */
!     public void setModal(boolean modal)
!     {
!       this.modal = modal;
!     }
! 
!     /**
!      * This method shows the ModalDialog.
!      */
!     public void show()
!     {
!       super.show();
!       if (modal)
! 	makeModal(this);
!     }
! 
!     /**
!      * This method hides the ModalDialog.
!      */
!     public synchronized void hide()
!     {
!       super.hide();
!       notifyAll();
!     }
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JComboBox.java gcc-4.0.0/libjava/javax/swing/JComboBox.java
*** gcc-3.4.3/libjava/javax/swing/JComboBox.java	Sun Oct 12 13:20:49 2003
--- gcc-4.0.0/libjava/javax/swing/JComboBox.java	Wed Feb 16 20:02:24 2005
***************
*** 1,5 ****
  /* JComboBox.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JComboBox.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,839 ****
  
  package javax.swing;
  
! import java.awt.*;
! import java.awt.event.*;
! import java.beans.*;
! import java.io.*;
! import java.util.*;
! import javax.accessibility.*;
! import javax.swing.event.*;
! import javax.swing.plaf.*;
  
  /**
!  * JComboBox
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JComboBox extends JComponent
!   implements ItemSelectable, ListDataListener, ActionListener, Accessible
  {
    private static final long serialVersionUID = 5654585963292734470L;
  
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * AccessibleJComboBox
! 	 */
! 	protected class AccessibleJComboBox extends AccessibleJComponent 
! 			implements AccessibleAction, AccessibleSelection {
  
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
  
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor AccessibleJComboBox
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJComboBox(JComboBox component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJComboBox()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * getAccessibleChildrenCount
! 		 * @returns int
! 		 */
! 		public int getAccessibleChildrenCount() {
! 			return 0; // TODO
! 		} // getAccessibleChildrenCount()
  
! 		/**
! 		 * getAccessibleChild
! 		 * @param value0 TODO
! 		 * @returns Accessible
! 		 */
! 		public Accessible getAccessibleChild(int value0) {
! 			return null; // TODO
! 		} // getAccessibleChild()
  
! 		/**
! 		 * getAccessibleSelection
! 		 * @returns AccessibleSelection
! 		 */
! 		public AccessibleSelection getAccessibleSelection() {
! 			return null; // TODO
! 		} // getAccessibleSelection()
  
! 		/**
! 		 * getAccessibleSelection
! 		 * @param value0 TODO
! 		 * @returns Accessible
! 		 */
! 		public Accessible getAccessibleSelection(int value0) {
! 			return null; // TODO
! 		} // getAccessibleSelection()
  
! 		/**
! 		 * isAccessibleChildSelected
! 		 * @param value0 TODO
! 		 * @returns boolean
! 		 */
! 		public boolean isAccessibleChildSelected(int value0) {
! 			return false; // TODO
! 		} // isAccessibleChildSelected()
  
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.COMBO_BOX;
! 		} // getAccessibleRole()
  
! 		/**
! 		 * getAccessibleAction
! 		 * @returns AccessibleAction
! 		 */
! 		public AccessibleAction getAccessibleAction() {
! 			return null; // TODO
! 		} // getAccessibleAction()
  
! 		/**
! 		 * getAccessibleActionDescription
! 		 * @param value0 TODO
! 		 * @returns String
! 		 */
! 		public String getAccessibleActionDescription(int value0) {
! 			return null; // TODO
! 		} // getAccessibleActionDescription()
  
! 		/**
! 		 * getAccessibleActionCount
! 		 * @returns int
! 		 */
! 		public int getAccessibleActionCount() {
! 			return 0; // TODO
! 		} // getAccessibleActionCount()
  
! 		/**
! 		 * doAccessibleAction
! 		 * @param value0 TODO
! 		 * @returns boolean
! 		 */
! 		public boolean doAccessibleAction(int value0) {
! 			return false; // TODO
! 		} // doAccessibleAction()
  
! 		/**
! 		 * getAccessibleSelectionCount
! 		 * @returns int
! 		 */
! 		public int getAccessibleSelectionCount() {
! 			return 0; // TODO
! 		} // getAccessibleSelectionCount()
  
! 		/**
! 		 * addAccessibleSelection
! 		 * @param value0 TODO
! 		 */
! 		public void addAccessibleSelection(int value0) {
! 			// TODO
! 		} // addAccessibleSelection()
  
! 		/**
! 		 * removeAccessibleSelection
! 		 * @param value0 TODO
! 		 */
! 		public void removeAccessibleSelection(int value0) {
! 			// TODO
! 		} // removeAccessibleSelection()
  
! 		/**
! 		 * clearAccessibleSelection
! 		 */
! 		public void clearAccessibleSelection() {
! 			// TODO
! 		} // clearAccessibleSelection()
  
! 		/**
! 		 * selectAllAccessibleSelection
! 		 */
! 		public void selectAllAccessibleSelection() {
! 			// TODO
! 		} // selectAllAccessibleSelection()
  
  
! 	} // AccessibleJComboBox
  
! 	/**
! 	 * KeySelectionManager
! 	 */
! 	public static interface KeySelectionManager {
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * selectionForKey
! 		 * @param value0 TODO
! 		 * @param value1 TODO
! 		 * @returns int
! 		 */
! 		int selectionForKey(char value0, ComboBoxModel value1);
  
  
! 	} // KeySelectionManager
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "ComboBoxUI";
  
! 	/**
! 	 * dataModel
! 	 */
! 	protected ComboBoxModel dataModel;
  
! 	/**
! 	 * renderer
! 	 */
! 	protected ListCellRenderer renderer;
  
! 	/**
! 	 * editor
! 	 */
! 	protected ComboBoxEditor editor;
  
! 	/**
! 	 * maximumRowCount
! 	 */
! 	protected int maximumRowCount;
  
! 	/**
! 	 * isEditable
! 	 */
! 	protected boolean isEditable;
  
! 	/**
! 	 * selectedItemReminder
! 	 */
! 	protected Object selectedItemReminder;
  
! 	/**
! 	 * keySelectionManager
! 	 */
! 	protected JComboBox.KeySelectionManager keySelectionManager;
  
! 	/**
! 	 * actionCommand
! 	 */
! 	protected String actionCommand;
  
! 	/**
! 	 * lightWeightPopupEnabled
! 	 */
! 	protected boolean lightWeightPopupEnabled;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JComboBox
! 	 * @param value0 TODO
! 	 */
! 	public JComboBox(ComboBoxModel value0) {
! 		// TODO
! 	} // JComboBox()
  
! 	/**
! 	 * Constructor JComboBox
! 	 * @param value0 TODO
! 	 */
! 	public JComboBox(Object[] value0) {
! 		// TODO
! 	} // JComboBox()
  
! 	/**
! 	 * Constructor JComboBox
! 	 * @param value0 TODO
! 	 */
! 	public JComboBox(Vector value0) {
! 		// TODO
! 	} // JComboBox()
  
! 	/**
! 	 * Constructor JComboBox
! 	 */
! 	public JComboBox() {
! 		// TODO
! 	} // JComboBox()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * isEditable
! 	 * @returns boolean
! 	 */
! 	public boolean isEditable() {
! 		return false; // TODO
! 	} // isEditable()
  
! 	/**
! 	 * installAncestorListener
! 	 */
! 	protected void installAncestorListener() {
! 		// TODO
! 	} // installAncestorListener()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(ComboBoxUI ui) {
! 		super.setUI(ui);
! 	} // setUI()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((ComboBoxUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * getUI
! 	 * @returns ComboBoxUI
! 	 */
! 	public ComboBoxUI getUI() {
! 		return (ComboBoxUI) ui;
! 	} // getUI()
  
! 	/**
! 	 * setModel
! 	 * @param value0 TODO
! 	 */
! 	public void setModel(ComboBoxModel value0) {
! 		// TODO
! 	} // setModel()
  
! 	/**
! 	 * getModel
! 	 * @returns ComboBoxModel
! 	 */
! 	public ComboBoxModel getModel() {
! 		return null; // TODO
! 	} // getModel()
  
! 	/**
! 	 * setLightWeightPopupEnabled
! 	 * @param value0 TODO
! 	 */
! 	public void setLightWeightPopupEnabled(boolean value0) {
! 		// TODO
! 	} // setLightWeightPopupEnabled()
  
! 	/**
! 	 * isLightWeightPopupEnabled
! 	 * @returns boolean
! 	 */
! 	public boolean isLightWeightPopupEnabled() {
! 		return false; // TODO
! 	} // isLightWeightPopupEnabled()
  
! 	/**
! 	 * setEditable
! 	 * @param value0 TODO
! 	 */
! 	public void setEditable(boolean value0) {
! 		// TODO
! 	} // setEditable()
  
! 	/**
! 	 * setMaximumRowCount
! 	 * @param value0 TODO
! 	 */
! 	public void setMaximumRowCount(int value0) {
! 		// TODO
! 	} // setMaximumRowCount()
  
! 	/**
! 	 * getMaximumRowCount
! 	 * @returns int
! 	 */
! 	public int getMaximumRowCount() {
! 		return 0; // TODO
! 	} // getMaximumRowCount()
  
! 	/**
! 	 * setRenderer
! 	 * @param value0 TODO
! 	 */
! 	public void setRenderer(ListCellRenderer value0) {
! 		// TODO
! 	} // setRenderer()
  
! 	/**
! 	 * getRenderer
! 	 * @returns ListCellRenderer
! 	 */
! 	public ListCellRenderer getRenderer() {
! 		return null; // TODO
! 	} // getRenderer()
  
! 	/**
! 	 * setEditor
! 	 * @param value0 TODO
! 	 */
! 	public void setEditor(ComboBoxEditor value0) {
! 		// TODO
! 	} // setEditor()
  
! 	/**
! 	 * getEditor
! 	 * @returns ComboBoxEditor
! 	 */
! 	public ComboBoxEditor getEditor() {
! 		return null; // TODO
! 	} // getEditor()
  
! 	/**
! 	 * setSelectedItem
! 	 * @param value0 TODO
! 	 */
! 	public void setSelectedItem(Object value0) {
! 		// TODO
! 	} // setSelectedItem()
  
! 	/**
! 	 * getSelectedItem
! 	 * @returns Object
! 	 */
! 	public Object getSelectedItem() {
! 		return null; // TODO
! 	} // getSelectedItem()
  
! 	/**
! 	 * setSelectedIndex
! 	 * @param value0 TODO
! 	 */
! 	public void setSelectedIndex(int value0) {
! 		// TODO
! 	} // setSelectedIndex()
  
! 	/**
! 	 * getSelectedIndex
! 	 * @returns int
! 	 */
! 	public int getSelectedIndex() {
! 		return 0; // TODO
! 	} // getSelectedIndex()
  
! 	/**
! 	 * addItem
! 	 * @param value0 TODO
! 	 */
! 	public void addItem(Object value0) {
! 		// TODO
! 	} // addItem()
  
! 	/**
! 	 * insertItemAt
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void insertItemAt(Object value0, int value1) {
! 		// TODO
! 	} // insertItemAt()
  
! 	/**
! 	 * removeItem
! 	 * @param value0 TODO
! 	 */
! 	public void removeItem(Object value0) {
! 		// TODO
! 	} // removeItem()
  
! 	/**
! 	 * removeItemAt
! 	 * @param value0 TODO
! 	 */
! 	public void removeItemAt(int value0) {
! 		// TODO
! 	} // removeItemAt()
  
! 	/**
! 	 * removeAllItems
! 	 */
! 	public void removeAllItems() {
! 		// TODO
! 	} // removeAllItems()
! 	
! 	/**
! 	 * showPopup
! 	 */
! 	public void showPopup() {
! 		// TODO
! 	} // showPopup()
  
! 	/**
! 	 * hidePopup
! 	 */
! 	public void hidePopup() {
! 		// TODO
! 	} // hidePopup()
  
! 	/**
! 	 * setPopupVisible
! 	 * @param value0 TODO
! 	 */
! 	public void setPopupVisible(boolean value0) {
! 		// TODO
! 	} // setPopupVisible()
  
! 	/**
! 	 * isPopupVisible
! 	 * @returns boolean
! 	 */
! 	public boolean isPopupVisible() {
! 		return false; // TODO
! 	} // isPopupVisible()
  
! 	/**
! 	 * addItemListener
! 	 * @param value0 TODO
! 	 */
! 	public void addItemListener(ItemListener value0) {
! 		// TODO
! 	} // addItemListener()
  
! 	/**
! 	 * removeItemListener
! 	 * @param value0 TODO
! 	 */
! 	public void removeItemListener(ItemListener value0) {
! 		// TODO
! 	} // removeItemListener()
  
! 	/**
! 	 * addActionListener
! 	 * @param value0 TODO
! 	 */
! 	public void addActionListener(ActionListener value0) {
! 		// TODO
! 	} // addActionListener()
  
! 	/**
! 	 * removeActionListener
! 	 * @param value0 TODO
! 	 */
! 	public void removeActionListener(ActionListener value0) {
! 		// TODO
! 	} // removeActionListener()
  
! 	/**
! 	 * setActionCommand
! 	 * @param value0 TODO
! 	 */
! 	public void setActionCommand(String value0) {
! 		// TODO
! 	} // setActionCommand()
  
! 	/**
! 	 * getActionCommand
! 	 * @returns String
! 	 */
! 	public String getActionCommand() {
! 		return null; // TODO
! 	} // getActionCommand()
  
! 	/**
! 	 * setAction
! 	 * @param value0 TODO
! 	 */
! 	public void setAction(Action value0) {
! 		// TODO
! 	} // setAction()
  
! 	/**
! 	 * isListener
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @returns boolean
! 	 */
! 	private boolean isListener(Class value0, ActionListener value1) {
! 		return false; // TODO
! 	} // isListener()
  
! 	/**
! 	 * getAction
! 	 * @returns Action
! 	 */
! 	public Action getAction() {
! 		return null; // TODO
! 	} // getAction()
  
! 	/**
! 	 * configurePropertiesFromAction
! 	 * @param value0 TODO
! 	 */
! 	protected void configurePropertiesFromAction(Action value0) {
! 		// TODO
! 	} // configurePropertiesFromAction()
  
! 	/**
! 	 * createActionPropertyChangeListener
! 	 * @param value0 TODO
! 	 * @returns PropertyChangeListener
! 	 */
! 	protected PropertyChangeListener createActionPropertyChangeListener(Action value0) {
! 		return null; // TODO
! 	} // createActionPropertyChangeListener()
  
! 	/**
! 	 * fireItemStateChanged
! 	 * @param value0 TODO
! 	 */
! 	protected void fireItemStateChanged(ItemEvent value0) {
! 		// TODO
! 	} // fireItemStateChanged()
  
! 	/**
! 	 * fireActionEvent
! 	 */
! 	protected void fireActionEvent() {
! 		// TODO
! 	} // fireActionEvent()
  
! 	/**
! 	 * selectedItemChanged
! 	 */
! 	protected void selectedItemChanged() {
! 		// TODO
! 	} // selectedItemChanged()
  
! 	/**
! 	 * getSelectedObjects
! 	 * @returns Object[]
! 	 */
! 	public Object[] getSelectedObjects() {
! 		return null; // TODO
! 	} // getSelectedObjects()
  
! 	/**
! 	 * actionPerformed
! 	 * @param value0 TODO
! 	 */
! 	public void actionPerformed(ActionEvent value0) {
! 		// TODO
! 	} // actionPerformed()
  
! 	/**
! 	 * contentsChanged
! 	 * @param value0 TODO
! 	 */
! 	public void contentsChanged(ListDataEvent value0) {
! 		// TODO
! 	} // contentsChanged()
  
! 	/**
! 	 * selectWithKeyChar
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean selectWithKeyChar(char value0) {
! 		return false; // TODO
! 	} // selectWithKeyChar()
  
! 	/**
! 	 * intervalAdded
! 	 * @param value0 TODO
! 	 */
! 	public void intervalAdded(ListDataEvent value0) {
! 		// TODO
! 	} // intervalAdded()
  
! 	/**
! 	 * intervalRemoved
! 	 * @param value0 TODO
! 	 */
! 	public void intervalRemoved(ListDataEvent value0) {
! 		// TODO
! 	} // intervalRemoved()
  
! 	/**
! 	 * setEnabled
! 	 * @param value0 TODO
! 	 */
! 	public void setEnabled(boolean value0) {
! 		// TODO
! 	} // setEnabled()
  
! 	/**
! 	 * configureEditor
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void configureEditor(ComboBoxEditor value0, Object value1) {
! 		// TODO
! 	} // configureEditor()
  
! 	/**
! 	 * processKeyEvent
! 	 * @param value0 TODO
! 	 */
! 	public void processKeyEvent(KeyEvent value0) {
! 		// TODO
! 	} // processKeyEvent()
  
! 	/**
! 	 * isFocusTraversable
! 	 * @returns boolean
!          * @deprecated
! 	 */
! 	public boolean isFocusTraversable() {
! 		return false; // TODO
! 	} // isFocusTraversable()
  
! 	/**
! 	 * setKeySelectionManager
! 	 * @param value0 TODO
! 	 */
! 	public void setKeySelectionManager(KeySelectionManager value0) {
! 		// TODO
! 	} // setKeySelectionManager()
  
! 	/**
! 	 * getKeySelectionManager
! 	 * @returns JComboBox.KeySelectionManager
! 	 */
! 	public JComboBox.KeySelectionManager getKeySelectionManager() {
! 		return null; // TODO
! 	} // getKeySelectionManager()
  
! 	/**
! 	 * getItemCount
! 	 * @returns int
! 	 */
! 	public int getItemCount() {
! 		return 0; // TODO
! 	} // getItemCount()
  
! 	/**
! 	 * getItemAt
! 	 * @param value0 TODO
! 	 * @returns Object
! 	 */
! 	public Object getItemAt(int value0) {
! 		return null; // TODO
! 	} // getItemAt()
  
! 	/**
! 	 * createDefaultKeySelectionManager
! 	 * @returns KeySelectionManager
! 	 */
! 	protected KeySelectionManager createDefaultKeySelectionManager() {
! 		return null; // TODO
! 	} // createDefaultKeySelectionManager()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJComboBox(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JComboBox
--- 38,1215 ----
  
  package javax.swing;
  
! import java.awt.ItemSelectable;
! import java.awt.event.ActionEvent;
! import java.awt.event.ActionListener;
! import java.awt.event.ItemEvent;
! import java.awt.event.ItemListener;
! import java.awt.event.KeyEvent;
! import java.beans.PropertyChangeEvent;
! import java.beans.PropertyChangeListener;
! import java.io.IOException;
! import java.io.ObjectOutputStream;
! import java.util.Vector;
! 
! import javax.accessibility.Accessible;
! import javax.accessibility.AccessibleAction;
! import javax.accessibility.AccessibleContext;
! import javax.accessibility.AccessibleRole;
! import javax.accessibility.AccessibleSelection;
! import javax.swing.event.ListDataEvent;
! import javax.swing.event.ListDataListener;
! import javax.swing.event.PopupMenuListener;
! import javax.swing.plaf.ComboBoxUI;
  
  /**
!  * JComboBox. JComboBox is a container, that keeps track of elements added to
!  * it by the user. JComboBox allows user to select any item in its list and
!  * displays the selected item to the user. JComboBox also can show/hide popup
!  * menu containing its list of item whenever the mouse is pressed over it.
!  *
!  * @author Andrew Selkirk
!  * @author Olga Rodimina
!  * @author Robert Schuster
   */
! public class JComboBox extends JComponent implements ItemSelectable,
!                                                      ListDataListener,
!                                                      ActionListener,
!                                                      Accessible
  {
+ 
    private static final long serialVersionUID = 5654585963292734470L;
  
+   /**
+    * KeySelectionManager interface. Class implementing this interface are
+    * responsible for matching key characters typed by the user with combo
+    * box's items.
+    */
+   public static interface KeySelectionManager
+   {
+     int selectionForKey(char aKey, ComboBoxModel aModel);
+   }
  
!   /**
!    * Maximum number of rows that should be visible by default  in the
!    * JComboBox's popup
!    */
!   private static final int DEFAULT_MAXIMUM_ROW_COUNT = 8;
  
!   /**
!    * dataModel used by JComboBox to keep track of its list data and currently
!    * selected element in the list.
!    */
!   protected ComboBoxModel dataModel;
  
!   /**
!    * Renderer renders(paints) every object in the combo box list in its
!    * associated list cell. This ListCellRenderer is used only when  this
!    * JComboBox is uneditable.
!    */
!   protected ListCellRenderer renderer;
  
+   /**
+    * Editor that is responsible for editing an object in a combo box list.
+    */
+   protected ComboBoxEditor editor;
  
!   /**
!    * Number of rows that will be visible in the JComboBox's popup.
!    */
!   protected int maximumRowCount;
  
!   /**
!    * This field indicates if textfield of this JComboBox is editable or not.
!    */
!   protected boolean isEditable;
  
+   /**
+    * This field is reference to the current selection of the combo box.
+    */
+   protected Object selectedItemReminder;
  
!   /**
!    * keySelectionManager
!    */
!   protected KeySelectionManager keySelectionManager;
  
!   /**
!    * This actionCommand is used in ActionEvent that is fired to JComboBox's
!    * ActionListeneres.
!    */
!   protected String actionCommand;
  
!   /**
!    * This property indicates if heavyweight popup or lightweight popup will be
!    * used to diplay JComboBox's elements.
!    */
!   protected boolean lightWeightPopupEnabled;
  
!   /**
!    * The action taken when new item is selected in the JComboBox
!    */
!   private Action action;
  
!   /**
!    * since 1.4  If this field is set then comboBox's display area for the
!    * selected item  will be set by default to this value.
!    */
!   private Object prototypeDisplayValue;
  
!   /**
!    * Constructs JComboBox object with specified data model for it.
!    * <p>Note that the JComboBox will not change the value that
!    * is preselected by your ComboBoxModel implementation.</p>
!    *
!    * @param model Data model that will be used by this JComboBox to keep track
!    *        of its list of items.
!    */
!   public JComboBox(ComboBoxModel model)
!   {
!     setEditable(false);
!     setEnabled(true);
!     setMaximumRowCount(DEFAULT_MAXIMUM_ROW_COUNT);
!     setModel(model);
!     setActionCommand("comboBoxChanged");
  
!     lightWeightPopupEnabled = true;
!     isEditable = false;
  
!     updateUI();
!   }
  
!   /**
!    * Constructs JComboBox with specified list of items.
!    *
!    * @param itemArray array containing list of items for this JComboBox
!    */
!   public JComboBox(Object[] itemArray)
!   {
!     this(new DefaultComboBoxModel(itemArray));
!   }
  
!   /**
!    * Constructs JComboBox object with specified list of items.
!    *
!    * @param itemVector vector containing list of items for this JComboBox.
!    */
!   public JComboBox(Vector itemVector)
!   {
!     this(new DefaultComboBoxModel(itemVector));
!   }
  
!   /**
!    * Constructor. Creates new empty JComboBox. ComboBox's data model is set to
!    * DefaultComboBoxModel.
!    */
!   public JComboBox()
!   {
!     this(new DefaultComboBoxModel());
!   }
  
!   private void writeObject(ObjectOutputStream stream) throws IOException
!   {
!   }
  
!   /**
!    * This method returns true JComboBox is editable and false otherwise
!    *
!    * @return boolean true if JComboBox is editable and false otherwise
!    */
!   public boolean isEditable()
!   {
!     return isEditable;
!   }
  
!   /*
!    * This method adds ancestor listener to this JComboBox.
!    */
!   protected void installAncestorListener()
!   {
!     /* FIXME: Need to implement.
!      *
!      * Need to add ancestor listener to this JComboBox. This listener
!      * should close combo box's popup list of items whenever it
!      * receives an AncestorEvent.
!      */
!   }
  
!   /**
!    * Set the "UI" property of the combo box, which is a look and feel class
!    * responsible for handling comboBox's input events and painting it.
!    *
!    * @param ui The new "UI" property
!    */
!   public void setUI(ComboBoxUI ui)
!   {
!     super.setUI(ui);
!   }
  
!   /**
!    * This method sets this comboBox's UI to the UIManager's default for the
!    * current look and feel.
!    */
!   public void updateUI()
!   {
!     setUI((ComboBoxUI) UIManager.getUI(this));
!     invalidate();
!   }
  
+   /**
+    * This method returns the String identifier for the UI class to the used
+    * with the JComboBox.
+    *
+    * @return The String identifier for the UI class.
+    */
+   public String getUIClassID()
+   {
+     return "ComboBoxUI";
+   }
  
!   /**
!    * This method returns the UI used to display the JComboBox.
!    *
!    * @return The UI used to display the JComboBox.
!    */
!   public ComboBoxUI getUI()
!   {
!     return (ComboBoxUI) ui;
!   }
  
!   /**
!    * Set the data model for this JComboBox. This un-registers all  listeners
!    * associated with the current model, and re-registers them with the new
!    * model.
!    *
!    * @param newDataModel The new data model for this JComboBox
!    */
!   public void setModel(ComboBoxModel newDataModel)
!   {
  
!     // dataModel is null if it this method is called from inside the constructors.
!     if(dataModel != null) {
! 	// Prevents unneccessary updates.
! 	if (dataModel == newDataModel)
! 		return;
  
!     	// Removes itself (as DataListener) from the to-be-replaced model.
!     	dataModel.removeListDataListener(this);
!     }
!     
!     /* Adds itself as a DataListener to the new model.
!      * It is intentioned that this operation will fail with a NullPointerException if the
!      * caller delivered a null argument.
!      */
!     newDataModel.addListDataListener(this);
  
+     // Stores old data model for event notification.
+     ComboBoxModel oldDataModel = dataModel;
+     dataModel = newDataModel;
  
!     // Notifies the listeners of the model change.
!     firePropertyChange("model", oldDataModel, dataModel);
!   }
  
+   /**
+    * This method returns data model for this comboBox.
+    *
+    * @return ComboBoxModel containing items for this combo box.
+    */
+   public ComboBoxModel getModel()
+   {
+     return dataModel;
+   }
  
!   /**
!    * This method sets JComboBox's popup to be either lightweight or
!    * heavyweight. If 'enabled' is true then lightweight popup is used and
!    * heavyweight otherwise. By default lightweight popup is used to display
!    * this JComboBox's elements.
!    *
!    * @param enabled indicates if lightweight popup or heavyweight popup should
!    *        be used to display JComboBox's elements.
!    */
!   public void setLightWeightPopupEnabled(boolean enabled)
!   {
!     lightWeightPopupEnabled = enabled;
!   }
  
!   /**
!    * This method returns whether popup menu that is used to display list of
!    * combo box's item is lightWeight or not.
!    *
!    * @return boolean true if popup menu is lightweight and false otherwise.
!    */
!   public boolean isLightWeightPopupEnabled()
!   {
!     return lightWeightPopupEnabled;
!   }
  
!   /**
!    * This method sets editability of the combo box. If combo box  is editable
!    * the user can choose component from the combo box list by typing
!    * component's name in the editor(JTextfield by default).  Otherwise if not
!    * editable, the user should use the list to choose   the component. This
!    * method fires PropertyChangeEvents to JComboBox's registered
!    * PropertyChangeListeners to indicate that 'editable' property of the
!    * JComboBox has changed.
!    *
!    * @param editable indicates if the JComboBox's textfield should be editable
!    *        or not.
!    */
!   public void setEditable(boolean editable)
!   {
!     if (isEditable != editable)
!       {
! 	isEditable = editable;
! 	firePropertyChange("editable", ! isEditable, isEditable);
!       }
!   }
  
!   /**
!    * Sets number of rows that should be visible in this JComboBox's popup. If
!    * this JComboBox's popup has more elements that maximum number or rows
!    * then popup will have a scroll pane to allow users to view other
!    * elements.
!    *
!    * @param rowCount number of rows that will be visible in JComboBox's popup.
!    */
!   public void setMaximumRowCount(int rowCount)
!   {
!     if (maximumRowCount != rowCount)
!       {
! 	int oldMaximumRowCount = maximumRowCount;
! 	maximumRowCount = rowCount;
! 	firePropertyChange("maximumRowCount",
! 	                   oldMaximumRowCount, maximumRowCount);
!       }
!   }
  
!   /**
!    * This method returns number of rows visible in the JComboBox's list of
!    * items.
!    *
!    * @return int maximun number of visible rows in the JComboBox's list.
!    */
!   public int getMaximumRowCount()
!   {
!     return maximumRowCount;
!   }
  
!   /**
!    * This method sets cell renderer for this JComboBox that will be used to
!    * paint combo box's items. The Renderer should only be used only when
!    * JComboBox is not editable.  In the case when JComboBox is editable  the
!    * editor must be used.  This method also fires PropertyChangeEvent when
!    * cellRendered for this JComboBox has changed.
!    *
!    * @param aRenderer cell renderer that will be used by this JComboBox to
!    *        paint its elements.
!    */
!   public void setRenderer(ListCellRenderer aRenderer)
!   {
!     if (renderer != aRenderer)
!       {
! 	ListCellRenderer oldRenderer = renderer;
! 	renderer = aRenderer;
! 	firePropertyChange("renderer", oldRenderer,
! 	                   renderer);
!       }
!   }
  
!   /**
!    * This method returns renderer responsible for rendering selected item in
!    * the combo box
!    *
!    * @return ListCellRenderer
!    */
!   public ListCellRenderer getRenderer()
!   {
!     return renderer;
!   }
  
!   /**
!    * Sets editor for this JComboBox
!    *
!    * @param newEditor ComboBoxEditor for this JComboBox. This method fires
!    *        PropertyChangeEvent when 'editor' property is changed.
!    */
!   public void setEditor(ComboBoxEditor newEditor)
!   {
!     if (editor == newEditor)
!       return;
  
!     if (editor != null)
!       editor.removeActionListener(this);
  
!     ComboBoxEditor oldEditor = editor;
!     editor = newEditor;
  
!     if (editor != null)
!       editor.addActionListener(this);
  
+     firePropertyChange("editor", oldEditor, editor);
+   }
  
!   /**
!    * Returns editor component that is responsible for displaying/editing
!    * selected item in the combo box.
!    *
!    * @return ComboBoxEditor
!    */
!   public ComboBoxEditor getEditor()
!   {
!     return editor;
!   }
  
!   /**
!    * Forces combo box to select given item
!    *
!    * @param item element in the combo box to select.
!    */
!   public void setSelectedItem(Object item)
!   {
!     dataModel.setSelectedItem(item);
!   }
  
!   /**
!    * Returns currently selected item in the combo box.
!    * The result may be <code>null</code> to indicate that nothing is
!    * currently selected.
!    *
!    * @return element that is currently selected in this combo box.
!    */
!   public Object getSelectedItem()
!   {
!     return dataModel.getSelectedItem();
!   }
  
!   /**
!    * Forces JComboBox to select component located in the given index in the
!    * combo box.
!    * <p>If the index is below -1 or exceeds the upper bound an
!    * <code>IllegalArgumentException</code> is thrown.<p/>
!    * <p>If the index is -1 then no item gets selected.</p>
!    *
!    * @param index index specifying location of the component that  should be
!    *        selected.
!    */
!   public void setSelectedIndex(int index)
!   {
!   	if(index < -1 || index >= dataModel.getSize()) {
!   		// Fails because index is out of bounds. 
!   		throw new IllegalArgumentException("illegal index: " + index);
!   	} else {
!   		/* Selects the item at the given index or clears the selection if the
!   		 * index value is -1.
!   		 */
! 		setSelectedItem((index == -1) ? null : dataModel.getElementAt(index));
!   	}
!   }
  
!   /**
!    * Returns index of the item that is currently selected  in the combo box.
!    * If no item is currently selected, then -1 is returned.
!    * 
!    * <p>Note: For performance reasons you should minimize invocation of this
!    * method. If the data model is not an instance of
!    * <code>DefaultComboBoxModel</code> the complexity is O(n) where
!    * n is the number of elements in the combo box.</p>
!    *
!    * @return int Index specifying location of the currently selected item in
!    *         the combo box or -1 if nothing is selected in the combo box.
!    */
!   public int getSelectedIndex()
!   {
!     Object selectedItem = getSelectedItem();
!     
!     if (selectedItem != null) {
! 	
! 		if(dataModel instanceof DefaultComboBoxModel) {
! 			// Uses special method of DefaultComboBoxModel to retrieve the index.
!         	  	return ((DefaultComboBoxModel) dataModel).getIndexOf(selectedItem);
! 		} else {
! 			// Iterates over all items to retrieve the index.
! 			int size = dataModel.getSize();
! 			
! 	  		for(int i=0; i < size; i++) {
! 	  			Object o = dataModel.getElementAt(i);
! 	  			
! 				// XXX: Is special handling of ComparableS neccessary?
! 	  			if((selectedItem != null) ? selectedItem.equals(o) : o == null) {
! 	  				return i;
! 	  			}
! 	  		}
! 		}
!     }
  
+     // returns that no item is currently selected
+     return -1;
+   }
  
!   public Object getPrototypeDisplayValue()
!   {
!     return prototypeDisplayValue;
!   }
  
!   public void setPrototypeDisplayValue(Object newPrototypeDisplayValue)
!   {
!     prototypeDisplayValue = newPrototypeDisplayValue;
!   }
  
!   /**
!    * This method adds given element to this JComboBox.
!    * <p>A <code>RuntimeException</code> is thrown if the data model is not
!    * an instance of {@link MutableComboBoxModel}.</p>
!    *
!    * @param element element to add
!    */
!   public void addItem(Object element)
!   {
!   	if(dataModel instanceof MutableComboBoxModel) {
! 		((MutableComboBoxModel) dataModel).addElement(element);
!   	} else {
!   		throw new RuntimeException("Unable to add the item because the data model it is not an instance of MutableComboBoxModel.");
!   	}
!   }
  
!   /**
!    * Inserts given element at the specified index to this JComboBox.
!    * <p>A <code>RuntimeException</code> is thrown if the data model is not
!    * an instance of {@link MutableComboBoxModel}.</p>
!    *
!    * @param element element to insert
!    * @param index position where to insert the element
!    */
!   public void insertItemAt(Object element, int index)
!   {
! 	if(dataModel instanceof MutableComboBoxModel) {
! 		((MutableComboBoxModel) dataModel).insertElementAt(element, index);
! 	} else {
! 		throw new RuntimeException("Unable to insert the item because the data model it is not an instance of MutableComboBoxModel.");
! 	}
!   }
  
!   /**
!    * This method removes given element from this JComboBox.
!    * <p>A <code>RuntimeException</code> is thrown if the data model is not
!    * an instance of {@link MutableComboBoxModel}.</p>
!    *
!    * @param element element to remove
!    */
!   public void removeItem(Object element)
!   {
! 	if(dataModel instanceof MutableComboBoxModel) {
! 		((MutableComboBoxModel) dataModel).removeElement(element);
! 	} else {
! 		throw new RuntimeException("Unable to remove the item because the data model it is not an instance of MutableComboBoxModel.");
! 	}
!   }
  
!   /**
!    * This method remove element location in the specified index in the
!    * JComboBox.
!    * <p>A <code>RuntimeException</code> is thrown if the data model is not
!    * an instance of {@link MutableComboBoxModel}.</p>
!    *
!    * @param index index specifying position of the element to remove
!    */
!   public void removeItemAt(int index)
!   {
! 	if(dataModel instanceof MutableComboBoxModel) {
! 		((MutableComboBoxModel) dataModel).removeElementAt(index);
! 	} else {
! 		throw new RuntimeException("Unable to remove the item because the data model it is not an instance of MutableComboBoxModel.");
! 	}
!   }
  
!   /**
!    * This method removes all elements from this JComboBox.
!    * <p>A <code>RuntimeException</code> is thrown if the data model is not
!    * an instance of {@link MutableComboBoxModel}.</p>
!    * 
!    */
!   public void removeAllItems()
!   {
!     if (dataModel instanceof DefaultComboBoxModel) {
!     	// Uses special method if we have a DefaultComboBoxModel.
! 	((DefaultComboBoxModel) dataModel).removeAllElements();
!     } else if(dataModel instanceof MutableComboBoxModel){
!     	// Iterates over all items and removes each.
!     	MutableComboBoxModel mcbm = (MutableComboBoxModel) dataModel;
  
! 	/* We intentionally remove the items backwards to support
! 	 * models which shift their content to the beginning (e.g.
! 	 * linked lists) 
! 	 */     	
!     	for(int i=mcbm.getSize()-1; i >= 0; i--) {
!     		mcbm.removeElementAt(i);
!     	}
!     	
!     } else {
! 	throw new RuntimeException("Unable to remove the items because the data model it is not an instance of MutableComboBoxModel.");
!     }
!       
!   }
  
!   /**
!    * This method displays popup with list of combo box's items on the screen
!    */
!   public void showPopup()
!   {
!     setPopupVisible(true);
!   }
  
!   /**
!    * This method hides popup containing list of combo box's items
!    */
!   public void hidePopup()
!   {
!     setPopupVisible(false);
!   }
  
!   /**
!    * This method either displayes or hides the popup containing  list of combo
!    * box's items.
!    *
!    * @param visible show popup if 'visible' is true and hide it otherwise
!    */
!   public void setPopupVisible(boolean visible)
!   {
!     getUI().setPopupVisible(this, visible);
!   }
  
!   /**
!    * Checks if popup is currently visible on the screen.
!    *
!    * @return boolean true if popup is visible and false otherwise
!    */
!   public boolean isPopupVisible()
!   {
!     return getUI().isPopupVisible(this);
!   }
  
!   /**
!    * This method sets actionCommand to the specified string. ActionEvent fired
!    * to this JComboBox  registered ActionListeners will contain this
!    * actionCommand.
!    *
!    * @param aCommand new action command for the JComboBox's ActionEvent
!    */
!   public void setActionCommand(String aCommand)
!   {
!     actionCommand = aCommand;
!   }
  
!   /**
!    * Returns actionCommand associated with the ActionEvent fired by the
!    * JComboBox to its registered ActionListeners.
!    *
!    * @return String actionCommand for the ActionEvent
!    */
!   public String getActionCommand()
!   {
!     return actionCommand;
!   }
  
!   /**
!    * setAction
!    *
!    * @param a action to set
!    */
!   public void setAction(Action a)
!   {
!     Action old = action;
!     action = a;
!     configurePropertiesFromAction(action);
!     if (action != null)
!       // FIXME: remove from old action and add to new action 
!       // PropertyChangeListener to listen to changes in the action
!       addActionListener(action);
!   }
  
!   /**
!    * This method returns Action that is invoked when selected item is changed
!    * in the JComboBox.
!    *
!    * @return Action
!    */
!   public Action getAction()
!   {
!     return action;
!   }
  
!   /**
!    * Configure properties of the JComboBox by reading properties of specified
!    * action. This method always sets the comboBox's "enabled" property to the
!    * value of the Action's "enabled" property.
!    *
!    * @param a An Action to configure the combo box from
!    */
!   protected void configurePropertiesFromAction(Action a)
!   {
!     if (a == null)
!       {
! 	setEnabled(true);
! 	setToolTipText(null);
!       }
!     else
!       {
! 	setEnabled(a.isEnabled());
! 	setToolTipText((String) (a.getValue(Action.SHORT_DESCRIPTION)));
!       }
!   }
  
!   /**
!    * Creates PropertyChangeListener to listen for the changes in comboBox's
!    * action properties.
!    *
!    * @param action action to listen to for property changes
!    *
!    * @return $PropertyChangeListener$ Listener that listens to changes in
!    *         action properties.
!    */
!   protected PropertyChangeListener createActionPropertyChangeListener(Action action)
!   {
!     return new PropertyChangeListener()
!       {
! 	public void propertyChange(PropertyChangeEvent e)
! 	{
! 	  Action act = (Action) (e.getSource());
! 	  configurePropertiesFromAction(act);
! 	}
!       };
!   }
  
!   /**
!    * This method fires ItemEvent to this JComboBox's registered ItemListeners.
!    * This method is invoked when currently selected item in this combo box
!    * has changed.
!    *
!    * @param e the ItemEvent describing the change in the combo box's
!    *        selection.
!    */
!   protected void fireItemStateChanged(ItemEvent e)
!   {
!     ItemListener[] ll = getItemListeners();
  
!     for (int i = 0; i < ll.length; i++)
!       ll[i].itemStateChanged(e);
!   }
  
!   /**
!    * This method fires ActionEvent to this JComboBox's registered
!    * ActionListeners. This method is invoked when user explicitly changes
!    * currently selected item.
!    */
!   protected void fireActionEvent()
!   {
!     ActionListener[] ll = getActionListeners();
  
!     for (int i = 0; i < ll.length; i++)
!       ll[i].actionPerformed(new ActionEvent(this,
!                                             ActionEvent.ACTION_PERFORMED,
!                                             actionCommand));
!   }
  
!   /**
!    * This method is invoked whenever selected item changes in the combo box's
!    * data model. It fires ItemEvent and ActionEvent to all registered
!    * ComboBox's ItemListeners and ActionListeners respectively, indicating
!    * the change.
!    */
!   protected void selectedItemChanged()
!   {
!     // Fire ItemEvent to indicated that previously selected item is now
!     // deselected        
!     if (selectedItemReminder != null)
!       fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
!                                          selectedItemReminder,
!                                          ItemEvent.DESELECTED));
  
!     // Fire ItemEvent to indicate that new item is selected    
!     Object newSelection = getSelectedItem();
!     fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
!                                        newSelection, ItemEvent.SELECTED));
  
!     // Fire Action Event to JComboBox's registered listeners					 				 
!     fireActionEvent();
  
!     selectedItemReminder = newSelection;
!   }
  
!   /**
!    * Returns Object array of size 1 containing currently selected element in
!    * the JComboBox.
!    *
!    * @return Object[] Object array of size 1 containing currently selected
!    *         element in the JComboBox.
!    */
!   public Object[] getSelectedObjects()
!   {
!     return new Object[] { getSelectedItem() };
!   }
  
!   /**
!    * This method handles actionEvents fired by the ComboBoxEditor. It changes
!    * this JComboBox's selection to the new value currently in the editor and
!    * hides list of combo box items.
!    *
!    * @param e the ActionEvent
!    */
!   public void actionPerformed(ActionEvent e)
!   {
!     setSelectedItem(((ComboBoxEditor) e.getSource()).getItem());
!     setPopupVisible(false);
!   }
  
!   /**
!    * This method selects item in this combo box that matches specified
!    * specified keyChar and returns true if such item is found. Otherwise
!    * false is returned.
!    *
!    * @param keyChar character indicating which item in the combo box should be
!    *        selected.
!    *
!    * @return boolean true if item corresponding to the specified keyChar
!    *         exists in the combo box. Otherwise false is returned.
!    */
!   public boolean selectWithKeyChar(char keyChar)
!   {
!     // FIXME: Need to implement
!     return false;
!   }
  
!   /**
!    * The part of implementation of ListDataListener interface. This method is
!    * invoked when some items where added to the JComboBox's data model.
!    *
!    * @param event ListDataEvent describing the change
!    */
!   public void intervalAdded(ListDataEvent event)
!   {
!     // FIXME: Need to implement
!     repaint();
!   }
  
!   /**
!    * The part of implementation of ListDataListener interface. This method is
!    * invoked when some items where removed from the JComboBox's data model.
!    *
!    * @param event ListDataEvent describing the change.
!    */
!   public void intervalRemoved(ListDataEvent event)
!   {
!     // FIXME: Need to implement
!     repaint();
!   }
  
!   /**
!    * The part of implementation of ListDataListener interface. This method is
!    * invoked when contents of the JComboBox's  data model changed.
!    *
!    * @param event ListDataEvent describing the change
!    */
!   public void contentsChanged(ListDataEvent event)
!   {
!     // if first and last index of the given ListDataEvent are both -1,
!     // then it indicates that selected item in the combo box data model
!     // have changed. 
!     if (event.getIndex0() == -1 && event.getIndex1() == -1)
!       selectedItemChanged();
!   }
  
!   /**
!    * This method disables or enables JComboBox. If the JComboBox is enabled,
!    * then user is able to make item choice, otherwise if JComboBox is
!    * disabled then user is not able to make a selection.
!    *
!    * @param enabled if 'enabled' is true then enable JComboBox and disable it
!    */
!   public void setEnabled(boolean enabled)
!   {
!     boolean oldEnabled = super.isEnabled();
!     if (enabled != oldEnabled)
!       {
! 	super.setEnabled(enabled);
! 	firePropertyChange("enabled", oldEnabled, enabled);
!       }
!   }
  
!   /**
!    * This method initializes specified ComboBoxEditor to display given item.
!    *
!    * @param anEditor ComboBoxEditor to initialize
!    * @param anItem Item that should displayed in the specified editor
!    */
!   public void configureEditor(ComboBoxEditor anEditor, Object anItem)
!   {
!     anEditor.setItem(anItem);
!   }
  
!   /**
!    * This method hides  combo box's popup whenever TAB key is pressed.
!    *
!    * @param e The KeyEvent indicating which key was pressed.
!    */
!   public void processKeyEvent(KeyEvent e)
!   {
!   }
  
!   /**
!    * This method always returns false to indicate that JComboBox  itself is
!    * not focus traversable.
!    *
!    * @return false to indicate that JComboBox itself is not focus traversable.
!    *
!    * @deprecated
!    */
!   public boolean isFocusTraversable()
!   {
!     return false;
!   }
  
!   /**
!    * setKeySelectionManager
!    *
!    * @param aManager
!    */
!   public void setKeySelectionManager(KeySelectionManager aManager)
!   {
!   }
  
!   /**
!    * getKeySelectionManager
!    *
!    * @return JComboBox.KeySelectionManager
!    */
!   public KeySelectionManager getKeySelectionManager()
!   {
!     return null;
!   }
  
!   /**
!    * This method returns number of elements in this JComboBox
!    *
!    * @return int number of elements in this JComboBox
!    */
!   public int getItemCount()
!   {
!     return dataModel.getSize();
!   }
  
!   /**
!    * Returns elements located in the combo box at the given index.
!    *
!    * @param index index specifying location of the component to  return.
!    *
!    * @return component in the combo box that is located in  the given index.
!    */
!   public Object getItemAt(int index)
!   {
!     return dataModel.getElementAt(index);
!   }
  
!   /**
!    * createDefaultKeySelectionManager
!    *
!    * @return KeySelectionManager
!    */
!   protected KeySelectionManager createDefaultKeySelectionManager()
!   {
!     return null;
!   }
  
!   /**
!    * A string that describes this JComboBox. Normally only used for debugging.
!    *
!    * @return A string describing this JComboBox
!    */
!   protected String paramString()
!   {
!     return "JComboBox";
!   }
  
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJComboBox();
  
!     return accessibleContext;
!   }
  
!   /**
!    * This methods adds specified ActionListener to this JComboBox.
!    *
!    * @param listener to add
!    */
!   public void addActionListener(ActionListener listener)
!   {
!     listenerList.add(ActionListener.class, listener);
!   }
  
!   /**
!    * This method removes specified ActionListener from this JComboBox.
!    *
!    * @param listener ActionListener
!    */
!   public void removeActionListener(ActionListener listener)
!   {
!     listenerList.remove(ActionListener.class, listener);
!   }
  
!   /**
!    * This method returns array of ActionListeners that are registered with
!    * this JComboBox.
!    *
!    * @since 1.4
!    */
!   public ActionListener[] getActionListeners()
!   {
!     return (ActionListener[]) getListeners(ActionListener.class);
!   }
  
!   /**
!    * This method registers given ItemListener with this JComboBox
!    *
!    * @param listener to remove
!    */
!   public void addItemListener(ItemListener listener)
!   {
!     listenerList.add(ItemListener.class, listener);
!   }
  
!   /**
!    * This method unregisters given ItemListener from this JComboBox
!    *
!    * @param listener to remove
!    */
!   public void removeItemListener(ItemListener listener)
!   {
!     listenerList.remove(ItemListener.class, listener);
!   }
  
!   /**
!    * This method returns array of ItemListeners that are registered with this
!    * JComboBox.
!    *
!    * @since 1.4
!    */
!   public ItemListener[] getItemListeners()
!   {
!     return (ItemListener[]) getListeners(ItemListener.class);
!   }
  
!   /**
!    * Adds PopupMenuListener to combo box to listen to the events fired by the
!    * combo box's popup menu containing its list of items
!    *
!    * @param listener to add
!    */
!   public void addPopupMenuListener(PopupMenuListener listener)
!   {
!     listenerList.add(PopupMenuListener.class, listener);
!   }
  
!   /**
!    * Removes PopupMenuListener to combo box to listen to the events fired by
!    * the combo box's popup menu containing its list of items
!    *
!    * @param listener to add
!    */
!   public void removePopupMenuListener(PopupMenuListener listener)
!   {
!     listenerList.remove(PopupMenuListener.class, listener);
!   }
  
!   /**
!    * Returns array of PopupMenuListeners that are registered with  combo box.
!    */
!   public PopupMenuListener[] getPopupMenuListeners()
!   {
!     return (PopupMenuListener[]) getListeners(PopupMenuListener.class);
!   }
  
!   /**
!    * AccessibleJComboBox
!    */
!   protected class AccessibleJComboBox extends AccessibleJComponent
!     implements AccessibleAction, AccessibleSelection
!   {
!     private static final long serialVersionUID = 8217828307256675666L;
  
!     protected AccessibleJComboBox()
!     {
!     }
  
!     public int getAccessibleChildrenCount()
!     {
!       return 0;
!     }
  
!     public Accessible getAccessibleChild(int value0)
!     {
!       return null;
!     }
  
!     public AccessibleSelection getAccessibleSelection()
!     {
!       return null;
!     }
  
!     public Accessible getAccessibleSelection(int value0)
!     {
!       return null;
!     }
  
!     public boolean isAccessibleChildSelected(int value0)
!     {
!       return false;
!     }
  
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.COMBO_BOX;
!     }
  
!     public AccessibleAction getAccessibleAction()
!     {
!       return null;
!     }
  
+     public String getAccessibleActionDescription(int value0)
+     {
+       return null;
+     }
  
!     public int getAccessibleActionCount()
!     {
!       return 0;
!     }
! 
!     public boolean doAccessibleAction(int value0)
!     {
!       return false;
!     }
! 
!     public int getAccessibleSelectionCount()
!     {
!       return 0;
!     }
! 
!     public void addAccessibleSelection(int value0)
!     {
!     }
! 
!     public void removeAccessibleSelection(int value0)
!     {
!     }
! 
!     public void clearAccessibleSelection()
!     {
!     }
! 
!     public void selectAllAccessibleSelection()
!     {
!     }
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JComponent.java gcc-4.0.0/libjava/javax/swing/JComponent.java
*** gcc-3.4.3/libjava/javax/swing/JComponent.java	Thu Jun 19 16:30:09 2003
--- gcc-4.0.0/libjava/javax/swing/JComponent.java	Thu Feb 17 07:48:51 2005
***************
*** 1,5 ****
  /* JComponent.java -- Every component in swing inherits from this class.
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JComponent.java -- Every component in swing inherits from this class.
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Dimension;
*** 46,54 ****
--- 46,57 ----
  import java.awt.FlowLayout;
  import java.awt.Font;
  import java.awt.Graphics;
+ import java.awt.Image;
  import java.awt.Insets;
  import java.awt.Point;
  import java.awt.Rectangle;
+ import java.awt.dnd.DropTarget;
+ import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.ContainerEvent;
  import java.awt.event.ContainerListener;
*************** import java.awt.event.FocusEvent;
*** 56,1002 ****
  import java.awt.event.FocusListener;
  import java.awt.event.KeyEvent;
  import java.awt.event.MouseEvent;
  import java.awt.peer.LightweightPeer;
  import java.beans.PropertyChangeListener;
  import java.beans.PropertyVetoException;
  import java.beans.VetoableChangeListener;
  import java.io.Serializable;
! import java.util.Vector;
  import java.util.Hashtable;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
! import javax.accessibility.AccessibleExtendedComponent;
  import javax.accessibility.AccessibleRole;
  import javax.accessibility.AccessibleStateSet;
  import javax.swing.event.AncestorListener;
  import javax.swing.event.EventListenerList;
! import javax.swing.border.Border;
  import javax.swing.plaf.ComponentUI;
  
  /**
   * Every component in swing inherits from this class (JLabel, JButton, etc).
!  * It contains generic methods to manage events, properties and sizes.
!  * Actual drawing of the component is channeled to a look-and-feel class
!  * that is implemented elsewhere.
   *
!  * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public abstract class JComponent extends Container implements Serializable
  {
!   static final long serialVersionUID = -5242478962609715464L;
!         /**
!          * accessibleContext
!          */
!         protected AccessibleContext accessibleContext;
  
! 	Dimension pref,min,max;
! 	Border border;
! 	JToolTip tooltip;
! 	String tool_tip_text;
! 	boolean use_double_buffer, opaque;
! 	protected ComponentUI ui;
  
! 	Vector ancestor_list;
! 	Vector veto_list;
! 	Vector change_list;
! 	Hashtable prop_hash;
  
! 	/**
! 	 * AccessibleJComponent
! 	 */
! 	public abstract class AccessibleJComponent 
! 		extends AccessibleAWTContainer {
  
! 		//-------------------------------------------------------------
! 		// Classes ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * AccessibleFocusHandler
! 		 */
! 		protected class AccessibleFocusHandler implements FocusListener {
! 			/**
! 			 * Constructor AccessibleFocusHandler
! 			 * @param component TODO
! 			 */
! 			protected AccessibleFocusHandler(AccessibleJComponent component) {
! 				// TODO
! 			} // AccessibleFocusHandler()
  
! 			/**
! 			 * focusGained
! 			 * @param event TODO
! 			 */
! 			public void focusGained(FocusEvent event) {
! 				// TODO
! 			} // focusGained()
  
! 			/**
! 			 * focusLost
! 			 * @param event TODO
! 			 */
! 			public void focusLost(FocusEvent valevent) {
! 				// TODO
! 			} // focusLost()
! 		} // AccessibleFocusHandler
  
! 		/**
! 		 * AccessibleContainerHandler
! 		 */
! 		protected class AccessibleContainerHandler implements ContainerListener {
! 			/**
! 			 * Constructor AccessibleContainerHandler
! 			 * @param component TODO
! 			 */
! 			protected AccessibleContainerHandler(AccessibleJComponent component) {
! 				// TODO
! 			} // AccessibleContainerHandler()
  
! 			/**
! 			 * componentAdded
! 			 * @param event TODO
! 			 */
! 			public void componentAdded(ContainerEvent event) {
! 				// TODO
! 			} // componentAdded()
  
- 			/**
- 			 * componentRemoved
- 			 * @param event TODO
- 			 */
- 			public void componentRemoved(ContainerEvent valevent) {
- 				// TODO
- 			} // componentRemoved()
- 		} // AccessibleContainerHandler
  
! 		/**
! 		 * accessibleContainerHandler
! 		 */
! 		protected ContainerListener accessibleContainerHandler;
  
! 		/**
! 		 * accessibleFocusHandler
! 		 */
! 		protected FocusListener accessibleFocusHandler;
  
! 		/**
! 		 * Constructor AccessibleJComponent
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJComponent(JComponent component) {
! //			super((Container)component);
! 			// TODO
! 		} // AccessibleJComponent()
  
! 		/**
! 		 * addPropertyChangeListener
! 		 * @param listener TODO
! 		 */
! 		public void addPropertyChangeListener(PropertyChangeListener listener) {
! 			// TODO
! 		} // addPropertyChangeListener()
  
! 		/**
! 		 * removePropertyChangeListener
! 		 * @param listener TODO
! 		 */
! 		public void removePropertyChangeListener(PropertyChangeListener listener) {
! 			// TODO
! 		} // removePropertyChangeListener()
  
! 		/**
! 		 * getAccessibleChildrenCount
! 		 * @returns int
! 		 */
! 		public int getAccessibleChildrenCount() {
! 			return 0; // TODO
! 		} // getAccessibleChildrenCount()
  
! 		/**
! 		 * getAccessibleChild
! 		 * @param value0 TODO
! 		 * @returns Accessible
! 		 */
! 		public Accessible getAccessibleChild(int value0) {
! 			return null; // TODO
! 		} // getAccessibleChild()
  
! 		/**
! 		 * getAccessibleStateSet
! 		 * @returns AccessibleStateSet
! 		 */
! 		public AccessibleStateSet getAccessibleStateSet() {
! 			return null; // TODO
! 		} // getAccessibleStateSet()
  
! 		/**
! 		 * getAccessibleName
! 		 * @returns String
! 		 */
! 		public String getAccessibleName() {
! 			return null; // TODO
! 		} // getAccessibleName()
  
! 		/**
! 		 * getAccessibleDescription
! 		 * @returns String
! 		 */
! 		public String getAccessibleDescription() {
! 			return null; // TODO
! 		} // getAccessibleDescription()
  
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return null; // TODO
! 		} // getAccessibleRole()
  
! 		/**
! 		 * getBorderTitle
! 		 * @param value0 TODO
! 		 * @returns String
! 		 */
! 		protected String getBorderTitle(Border value0) {
! 			return null; // TODO
! 		} // getBorderTitle()
  
  
! 	} // AccessibleJComponent
  
  
!         public JComponent()
! 	{
! 		super();
! 		super.setLayout(new FlowLayout());
! 		
! 		//eventMask |= AWTEvent.COMP_KEY_EVENT_MASK;
! 		enableEvents( AWTEvent.KEY_EVENT_MASK );
  
- 		//updateUI(); // get a proper ui
- 	}
  
! 	// protected EventListenerList listenerList
! 	public boolean contains(int x, int y)
! 	{
! 		//return dims.contains(x,y);
! 		return super.contains(x,y);
! 	}
  
! 	public  void addNotify()
! 	{
! 		//Notification to this component that it now has a parent component.
! 		super.addNotify();
! 	}
  
! 	Hashtable get_prop_hash()
! 	{
! 		if (prop_hash == null)
! 			prop_hash = new Hashtable();
! 		return prop_hash;
! 	}
! 	public Vector get_veto_list()
! 	{
! 		if (veto_list == null)
! 			veto_list = new Vector();
! 		return veto_list;
! 	}
! 	public Vector get_change_list()
! 	{
! 		if (change_list == null)
! 			change_list = new Vector();
! 		return change_list;
! 	}
! 	public Vector get_ancestor_list()
! 	{
! 		if (ancestor_list == null)
! 			ancestor_list = new Vector();
! 		return ancestor_list;
! 	}
  
! 	public Object getClientProperty(Object key)
!         {	return get_prop_hash().get(key);    }
  
! 	public void putClientProperty(Object key, Object value)
! 	{    get_prop_hash().put(key, value);   }
  
- 	public void removeAncestorListener(AncestorListener listener)
- 	{  get_ancestor_list().removeElement(listener);  }
  
!         public void removePropertyChangeListener(PropertyChangeListener listener)
! 	{  get_change_list().removeElement(listener);   }
  
! 	public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
! 	{  /* FIXME */   get_change_list().removeElement(listener);   }
  
! 	public void removeVetoableChangeListener(VetoableChangeListener listener)
! 	{  get_veto_list().removeElement(listener);   }
  
! 	public void addAncestorListener(AncestorListener listener)
! 	{   get_ancestor_list().addElement(listener);  }
  
! 	public void addPropertyChangeListener(PropertyChangeListener listener)
! 	{  get_change_list().addElement(listener);   }
  
! 	public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
! 	{ /* FIXME */ get_change_list().addElement(listener);   }
  
! 	public void addVetoableChangeListener(VetoableChangeListener listener)
! 	{  get_veto_list().addElement(listener);    }
  
! 	public void computeVisibleRect(Rectangle rect)
! 	{
! 		//Returns the Component's "visible rect rectangle" - the intersection of the visible rectangles for this component and all of its ancestors.
! 		//super.computeVisibleRect(rect);
! 	}
  
! 	public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue)
! 	{
! 		//Reports a bound property change.
! 	}
! 	public void firePropertyChange(String propertyName, byte oldValue, byte newValue)
! 	{
! 		//    Reports a bound property change.
! 	}
! 	public void firePropertyChange(String propertyName, char oldValue, char newValue)
! 	{
! 		//Reports a bound property change.
! 	}
  
! 	public void firePropertyChange(String propertyName, double oldValue, double newValue)
! 	{
! 		//Reports a bound property change.
! 	}
  
! 	public void firePropertyChange(String propertyName, float oldValue, float newValue)
! 	{
! 		//       Reports a bound property change.
! 	}
! 	public void firePropertyChange(String propertyName, int oldValue, int newValue)
! 	{
! 		//       Reports a bound property change.
! 	}
! 	public void firePropertyChange(String propertyName, long oldValue, long newValue)
! 	{
! 		//Reports a bound property change. protected
! 	}
  
!   protected void firePropertyChange(String propertyName, Object oldValue, Object newValue)
! 	{
! 		//       Support for reporting bound property changes.
! 	}
! 	public void firePropertyChange(String propertyName, short oldValue, short newValue)
! 	{
! 		//       Reports a bound property change.
! 	}
  
! 	protected  void fireVetoableChange(String propertyName, Object oldValue, Object newValue)
! 	{
! 		//       Support for reporting constrained property changes.
! 	}
  
!         public AccessibleContext getAccessibleContext()
! 	{
! 		//       Get the AccessibleContext associated with this JComponent
! 		return null;
! 	}
! 	
!         public ActionListener getActionForKeyStroke(KeyStroke aKeyStroke)
! 	{
! 		//Return the object that will perform the action registered for a given keystroke.
! 		return null;
! 	}
! 	public float getAlignmentX()
! 	{
! 		//    Overrides Container.getAlignmentX to return the vertical alignment.
! 		return 0;
! 	}
  
! 	public float getAlignmentY()
! 	{
! 		//       Overrides Container.getAlignmentY to return the horizontal alignment.
! 		return 0;
! 	}
! 	public boolean getAutoscrolls()
! 	{
! 		//Returns true if this component automatically scrolls its contents when dragged, (when contained in a component that supports scrolling, like JViewport
! 		return false;
! 	}
  
! 	public void setBorder(Border border)
! 	{
! 		//System.out.println("set border called !, new border = " + border);
! 		this.border = border;
! 		revalidate();
! 		repaint();
! 	}
  
! 	public Border getBorder()
! 	{	return border;    }
  
  
!         public Rectangle getBounds(Rectangle rv)
! 	{
! 		if (rv == null)
! 			return new Rectangle(getX(),getY(),getWidth(),getHeight());
! 		else
! 		{
! 			rv.setBounds(getX(),getY(),getWidth(),getHeight());
! 			return rv;
! 		}
! 	}
  
! 	protected  Graphics getComponentGraphics(Graphics g)
! 	{      return g;       }
  
! 	public int getConditionForKeyStroke(KeyStroke aKeyStroke)
! 	{
! 		//Return the condition that determines whether a registered action occurs in response to the specified keystroke.
! 		return 0;
! 	}
! 	public int getDebugGraphicsOptions()
! 	{
! 		return 0;
! 	}
  
! 	public Graphics getGraphics()
! 	{	return super.getGraphics();    }
  
  
! 	//    static MantaNative void DebugMe(Border b);
  
! 	public Insets getInsets()
! 	{
! 		//	System.out.println("watch this border");
! 		//	DebugMe(border);
! 		//	System.out.println("border = " + border);
  
! 		if (border == null)
! 		{
! 			//System.out.println("compares to null !");
! 			return super.getInsets();
! 		}
! 		//	System.out.println("compare failed !");
! 		return getBorder().getBorderInsets(this);
! 	}
  
! 	public Insets getInsets(Insets insets)
! 	{
! 	    Insets t = getInsets();
  
- 	    if (insets == null)
- 		return t;
- 	    
- 	    
- 	    return new Insets(t.top, t.left, t.bottom, t.right);
- 	}
- 	public Point getLocation(Point rv)
- 	{
- 		//Store the x,y origin of this component into "return value" rv and return rv.
  
! 		if (rv == null)
! 			return new Point(getX(),
! 					 getY());
  
! 		rv.setLocation(getX(),
! 		               getY());
! 		return rv;
! 	}
  
! 	public Dimension getMaximumSize()
! 	{
! 		if (max != null)
! 		{
! 			//System.out.println("HAVE_MAX_SIZE =  " + max);
! 			return max;
! 		}
! 		if (ui != null)
! 		{
! 		    Dimension s = ui.getMaximumSize(this);
! 		    if (s != null)
! 			{
! 				//System.out.println("        UI-MAX = " + s + ", UI = " + ui + ", IM="+this);
! 				return s;
! 			}
! 		}
! 		Dimension p = super.getMaximumSize();
! 		//System.out.println("               MAX = " + p + ", COMP="+this);
! 		return p;
! 	}
  
! 	public Dimension getMinimumSize()
! 	{
! 		if (min != null)
! 		{
! 			//System.out.println("HAVE_MIN_SIZE =  " + min);
! 			return min;
! 		}
! 		if (ui != null)
! 		{
! 			Dimension s = ui.getMinimumSize(this);
! 			if (s != null)
! 			{
! 				//	System.out.println("        UI-MIN = " + s + ", UI = " + ui + ", IM="+this);
! 				return s;
! 			}
! 		}
! 		Dimension p = super.getMinimumSize();
! 		//	System.out.println("              MIN = " + p + ", COMP="+this);
! 		return p;
! 	}
  
! 	public Dimension getPreferredSize()
! 	{
! 		if (pref != null)
! 		{
! 			//System.out.println("HAVE_PREF_SIZE =  " + pref);
! 			return pref;
! 		}
  
! 		if (ui != null)
! 		{
! 			Dimension s = ui.getPreferredSize(this);
! 			if (s != null)
! 			{
! 				//System.out.println("        UI-PREF = " + s + ", UI = " + ui + ", IM="+this);
! 				return s;
! 			}
! 		}
! 		Dimension p = super.getPreferredSize();
! 		//	System.out.println("              PREF = " + p + ", COMP="+this);
! 		return p;
! 	}
  
! 	public Component getNextFocusableComponent()
! 	{
! 		//          Return the next focusable component or null if the focus manager should choose the next focusable component automatically
! 		return null;
! 	}
  
  
! 	public KeyStroke[] getRegisteredKeyStrokes()
! 	{
! 		//          Return the KeyStrokes that will initiate registered actions.
! 		return null;
! 	}
  
! 	public JRootPane getRootPane()
! 	{
! 		JRootPane p = SwingUtilities.getRootPane(this);
! 		System.out.println("root = " + p);
! 		return p;
! 	}
  
! 	public Dimension getSize(Dimension rv)
! 	{
! 		//	System.out.println("JComponent, getsize()");
! 		if (rv == null)
! 			return new Dimension(getWidth(),
! 			                     getHeight());
! 		else
! 		{
! 			rv.setSize(getWidth(),
! 			           getHeight());
! 			return rv;
! 		}
! 	}
  
! 	public JToolTip createToolTip()
! 	{
! 		if (tooltip == null)
! 			tooltip = new JToolTip(tool_tip_text);
! 		return tooltip;
! 	}
  
! 	public Point getToolTipLocation(MouseEvent event)
!         {	return null;    }
  
! 	public void setToolTipText(String text)
! 	{	tool_tip_text = text;    }
  
! 	public String getToolTipText()
! 	{	return tool_tip_text;    }
  
! 	public String getToolTipText(MouseEvent event)
! 	{	return tool_tip_text;    }
  
! 	public Container getTopLevelAncestor()
! 	{
! 		//      Returns the top-level ancestor of this component (either the containing Window or Applet), or null if this component has not been added to any container.
! 		System.out.println("JComponent, getTopLevelAncestor()");
! 		return null;
! 	}
  
! 	public Rectangle getVisibleRect()
! 	{
! 		///    Returns the Component's "visible rectangle" - the intersection of this components visible rectangle:
! 		System.out.println("JComponent, getVisibleRect()");
! 		return null;
! 	}
  
! 	public void grabFocus()
! 	{
! 		//      Set the focus on the receiving component.
! 	}
  
! 	public boolean hasFocus()
! 	{
! 		//      Returns true if this Component has the keyboard focus.
! 		return false;
! 	}
  
! 	public boolean isDoubleBuffered()
! 	{	return use_double_buffer;    }
  
! 	public boolean isFocusCycleRoot()
! 	{
! 		//      Override this method and return true if your component is the root of of a component tree with its own focus cycle.
! 		return false;
! 	}
  
! 	public boolean isFocusTraversable()
! 	{
! 		//      Identifies whether or not this component can receive the focus.
! 		return false;
! 	}
  
! 	public static boolean isLightweightComponent(Component c)
! 	{
! 		return c.getPeer() instanceof LightweightPeer;
! 	}
  
! 	public boolean isManagingFocus()
! 	{
! 		//      Override this method and return true if your JComponent manages focus.
! 		return false;
! 	}
  
!         public boolean isOpaque()
! 	{	return opaque;    }
  
! 	public boolean isOptimizedDrawingEnabled()
! 	{
! 		//      Returns true if this component tiles its children,
! 		return true;
! 	}
  
! 	public boolean isPaintingTile()
! 	{
! 		//      Returns true if the receiving component is currently painting a tile.
! 		return false;
! 	}
  
! 	public boolean isRequestFocusEnabled()
! 	{
! 		//      Return whether the receiving component can obtain the focus by calling requestFocus
! 		return false;
! 	}
  
! 	public boolean isValidateRoot()
! 	{
! 		//      If this method returns true, revalidate() calls by descendants of this component will cause the entire tree beginning with this root to be validated.
! 		return false;
! 	}
  
! 	public void paint(Graphics g)
! 	{
! 		//	System.out.println("SWING_PAINT:" + this);
  
! 		paintBorder(g);
! 		paintComponent(g);
! 		paintChildren(g);
! 	}
  
! 	protected  void paintBorder(Graphics g)
! 	{
! 		//	System.out.println("PAINT_BORDER      x XXXXXXX x x x x x x x x x x x x:" + getBorder() + ", THIS="+this);
  
! 		//       Paint the component's border.
! 		if (getBorder() != null)
! 		{
! 			//System.out.println("PAINT_BORDER      x XXXXXXX x x x x x x x x x x x x:" + getBorder() + ", THIS="+this);
  
! 			getBorder().paintBorder(this,
! 			                        g,
! 			                        0,
! 			                        0,
! 			                        getWidth(),
! 			                        getHeight());
! 		}
! 	}
  
! 	protected  void paintChildren(Graphics g)
! 	{
! 	    //      Paint this component's children.
! 	    //super.paintChildren(g);
! 	}
  
! 	protected  void paintComponent(Graphics g)
! 	{
! 		//      If the UI delegate is non-null, call its paint method.
! 		if (ui != null)
! 		{
! 			ui.paint(g, this);
! 		}
! 	}
!     
!     /**
!      * Paint the specified region in this component and all of 
!      * its descendants that overlap the region, immediately.
!      */
! 	public void paintImmediately(int x, int y, int w, int h)
!         {
! 	
! 	    //Ronald: this shoudld probably redirect to the PLAF ....
! 	}
  
! 	public void paintImmediately(Rectangle r)
! 	{
! 	    ///      Paint the specified region now.
! 	    paintImmediately((int)r.getX(),
! 			     (int)r.getY(),
! 			     (int)r.getWidth(),
! 			     (int)r.getHeight());
! 	}
! 	protected  String paramString()
! 	{
! 		//      Returns a string representation of this JComponent.
! 		return "JComponent";
! 	}
! 	protected  void processComponentKeyEvent(KeyEvent e)
! 	{
! 		//     Process any key events that the component itself recognizes.
! 	    //System.out.println("COMP_KEY-EVENT: " + e);
! 	}
! 	protected  void processFocusEvent(FocusEvent e)
! 	{
! 		//      Processes focus events occurring on this component by dispatching them to any registered FocusListener objects.
! 	    //System.out.println("FOCUS_EVENT: " + e);
! 	}
  
! 	protected  void processKeyEvent(KeyEvent e)
! 	{
! 		//      Override processKeyEvent to process events protected
! 	    //System.out.println("KEY-EVENT: " + e);
! 	}
  
!         public void processMouseMotionEvent(MouseEvent e)
! 	{
! 	    //      Processes mouse motion events occurring on this component by dispatching them to any registered MouseMotionListener objects.
! 	    //System.out.println("COMP_MOUSE-EVENT: " + e + ", MEMORY = " + Runtime.getRuntime().freeMemory());
! 	}
  
! 	public void registerKeyboardAction(ActionListener anAction,
! 	                            KeyStroke aKeyStroke,
! 	                            int aCondition)
! 	{
! 		registerKeyboardAction(anAction,
! 		                       null,
! 		                       aKeyStroke,
! 		                       aCondition);
! 	}
  
! 	public void registerKeyboardAction(ActionListener anAction,
! 	                            String aCommand,
! 	                            KeyStroke aKeyStroke,
! 	                            int aCondition)
! 	{
! 		//  Register a new keyboard action.
! 	}
  
  
! 	public void removeNotify()
! 	{
! 		//      Notification to this component that it no longer has a parent component.
! 	}
  
! 	public void repaint(long tm, int x, int y, int width, int height)
! 	{
! 		//   Adds the specified region to the dirty region list if the component is showing.
! 		//System.out.println("JC: repaint");
! 		super.repaint(tm, x,y,width,height);
! 	}
  
! 	public void repaint(Rectangle r)
! 	{
! 		//      Adds the specified region to the dirty region list if the component is showing.
! 		repaint((long)0,
! 		        (int)r.getX(),
! 		        (int)r.getY(),
! 		        (int)r.getWidth(),
! 		        (int)r.getHeight());
! 	}
  
! 	public boolean requestDefaultFocus()
! 	{
! 		//      Request the focus for the component that should have the focus by default.
! 		return false;
! 	}
  
! 	public void requestFocus()
! 	{
! 		//      Set focus on the receiving component if isRequestFocusEnabled returns true
! 		super.requestFocus();
! 	}
  
! 	public void resetKeyboardActions()
! 	{
! 		//      Unregister all keyboard actions
! 	}
  
! 	public void reshape(int x, int y, int w, int h)
! 	{
! 		///      Moves and resizes this component.
! 		super.reshape(x,y,w,h);
! 	}
  
! 	public void revalidate()
! 	{
! 		//     Support for deferred automatic layout.
! 		if (getParent() == null)
! 			invalidate();
! 	}
  
! 	public void scrollRectToVisible(Rectangle aRect)
! 	{
! 		//      Forwards the scrollRectToVisible() message to the JComponent's parent.
! 	}
  
! 	public void setAlignmentX(float alignmentX)
! 	{
! 		//      Set the the vertical alignment.
! 	}
  
! 	public void setAlignmentY(float alignmentY)
! 	{
! 		//      Set the the horizontal alignment.
! 	}
  
! 	public void setAutoscrolls(boolean autoscrolls)
! 	{
! 		//      If true this component will automatically scroll its contents when dragged, if contained in a component that supports scrolling, such as JViewport
! 	}
  
! 	public void setDebugGraphicsOptions(int debugOptions)
! 	{
! 		//      Enables or disables diagnostic information about every graphics operation performed within the component or one of its children.
! 	}
  
! 	public void setDoubleBuffered(boolean aFlag)
! 	{
! 		use_double_buffer = aFlag;
! 	}
  
! 	public void setEnabled(boolean enabled)
! 	{
! 		// Sets whether or not this component is enabled.
! 		super.setEnabled(enabled);
! 		repaint();
! 	}
  
! 	public void setFont(Font font)
! 	{
! 		super.setFont(font);
! 		revalidate();
! 		repaint();
! 	}
  
! 	public void setBackground(Color bg)
! 	{
! 		super.setBackground(bg);
! 		revalidate();
! 		repaint();
! 	}
! 	public void setForeground(Color fg)
! 	{
! 		super.setForeground(fg);
! 		revalidate();
! 		repaint();
! 	}
  
! 	public void setMaximumSize(Dimension maximumSize)
! 	{	max = maximumSize;    }
  
! 	public void setMinimumSize(Dimension minimumSize)
! 	{   min = minimumSize; }
  
- 	public void setPreferredSize(Dimension preferredSize)
- 	{   pref = preferredSize;   }
  
- 	public void setNextFocusableComponent(Component aComponent)
- 	{
- 		//       Specifies the next component to get the focus after this one, for example, when the tab key is pressed.
- 	}
  
! 	public void setOpaque(boolean isOpaque)
! 	{
! 		opaque = isOpaque;
! 		revalidate();
! 		repaint();
! 	}
  
  
! 	public void setRequestFocusEnabled(boolean aFlag)
! 	{
! 	}
  
  
! 	public void setVisible(boolean aFlag)
! 	{
! 		//    Makes the component visible or invisible.
  
! 		super.setVisible(aFlag);
! 		if (getParent() != null)
! 		{
! 			Rectangle dims = getBounds();
! 			getParent().repaint((int)dims.getX(),
! 			                    (int)dims.getY(),
! 			                    (int)dims.getWidth(),
! 			                    (int)dims.getHeight());
! 		}
! 	}
  
! 	public void unregisterKeyboardAction(KeyStroke aKeyStroke)
! 	{
! 		//          Unregister a keyboard action.
! 	}
  
  
! 	public void update(Graphics g)
! 	{
! 		paint(g);
! 	}
  
!         public String getUIClassID()
! 	{
! 		///          Return the UIDefaults key used to look up the name of the swing.
! 		return "JComponent";
! 	}
  
! 	protected void setUI(ComponentUI newUI)
! 	{
! 		if (ui != null)
! 		{
! 			ui.uninstallUI(this);
! 		}
  
! 		//          Set the look and feel delegate for this component.
! 		ui = newUI;
  
! 		if (ui != null)
! 		{
! 			ui.installUI(this);
! 		}
  
! 		revalidate();
! 		repaint();
! 	}
  
! 	public void updateUI()
! 	{
! 		//        Resets the UI property to a value from the current look and feel.
! 		System.out.println("update UI not overwritten in class: " + this);
! 	}
  
  }
--- 59,2279 ----
  import java.awt.event.FocusListener;
  import java.awt.event.KeyEvent;
  import java.awt.event.MouseEvent;
+ import java.awt.geom.Rectangle2D;
+ import java.awt.image.ImageObserver;
  import java.awt.peer.LightweightPeer;
+ import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  import java.beans.PropertyVetoException;
  import java.beans.VetoableChangeListener;
  import java.io.Serializable;
! import java.util.EventListener;
  import java.util.Hashtable;
+ import java.util.Locale;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
! import javax.accessibility.AccessibleKeyBinding;
  import javax.accessibility.AccessibleRole;
  import javax.accessibility.AccessibleStateSet;
+ import javax.swing.border.Border;
  import javax.swing.event.AncestorListener;
  import javax.swing.event.EventListenerList;
! import javax.swing.event.SwingPropertyChangeSupport;
  import javax.swing.plaf.ComponentUI;
  
  /**
   * Every component in swing inherits from this class (JLabel, JButton, etc).
!  * It contains generic methods to manage events, properties and sizes. Actual
!  * drawing of the component is channeled to a look-and-feel class that is
!  * implemented elsewhere.
   *
!  * @author Ronald Veldema (rveldema&064;cs.vu.nl)
!  * @author Graydon Hoare (graydon&064;redhat.com)
   */
  public abstract class JComponent extends Container implements Serializable
  {
!   private static final long serialVersionUID = -7908749299918704233L;
  
!   /** 
!    * Accessibility support is currently missing.
!    */
  
!   protected AccessibleContext accessibleContext;
  
!   public abstract class AccessibleJComponent 
!     extends AccessibleAWTContainer
!   {
!     protected class AccessibleFocusHandler 
!       implements FocusListener
!     {
!       protected AccessibleFocusHandler(){}
!       public void focusGained(FocusEvent event){}
!       public void focusLost(FocusEvent valevent){}
!     }
  
!     protected class AccessibleContainerHandler 
!       implements ContainerListener
!     {
!       protected AccessibleContainerHandler() {}
!       public void componentAdded(ContainerEvent event) {}
!       public void componentRemoved(ContainerEvent valevent) {}
!     }
  
!     private static final long serialVersionUID = -7047089700479897799L;
!   
!     protected ContainerListener accessibleContainerHandler;
!     protected FocusListener accessibleFocusHandler;
  
!     protected AccessibleJComponent() {}
!     public void addPropertyChangeListener(PropertyChangeListener listener) {}
!     public void removePropertyChangeListener(PropertyChangeListener listener) {}
!     public int getAccessibleChildrenCount() { return 0; }
!     public Accessible getAccessibleChild(int value0) { return null; }
!     public AccessibleStateSet getAccessibleStateSet() { return null; } 
!     public String getAccessibleName() { return null; }
!     public String getAccessibleDescription() { return null; }
!     public AccessibleRole getAccessibleRole() { return null; }
!     protected String getBorderTitle(Border value0) { return null; }
!     public String getToolTipText() { return null; }
!     public String getTitledBorderText() { return null; }
!     public AccessibleKeyBinding getAccessibleKeyBinding() { return null; }
!   }
  
!   /** 
!    * An explicit value for the component's preferred size; if not set by a
!    * user, this is calculated on the fly by delegating to the {@link
!    * ComponentUI.getPreferredSize} method on the {@link #ui} property. 
!    */
!   Dimension preferredSize;
  
!   /** 
!    * An explicit value for the component's minimum size; if not set by a
!    * user, this is calculated on the fly by delegating to the {@link
!    * ComponentUI.getMinimumSize} method on the {@link #ui} property. 
!    */
!   Dimension minimumSize;
  
!   /** 
!    * An explicit value for the component's maximum size; if not set by a
!    * user, this is calculated on the fly by delegating to the {@link
!    * ComponentUI.getMaximumSize} method on the {@link #ui} property.
!    */
!   Dimension maximumSize;
  
  
!   /**
!    * A value between 0.0 and 1.0 indicating the preferred horizontal
!    * alignment of the component, relative to its siblings. The values
!    * {@link #LEFT_ALIGNMENT}, {@link #CENTER_ALIGNMENT}, and {@link
!    * #RIGHT_ALIGNMENT} can also be used, as synonyms for <code>0.0</code>,
!    * <code>0.5</code>, and <code>1.0</code>, respectively. Not all layout
!    * managers use this property.
!    *
!    * @see #getAlignmentX
!    * @see #setAlignmentX
!    * @see javax.swing.OverlayLayout
!    * @see javax.swing.BoxLayout
!    */
!   float alignmentX = 0.0f;
  
!   /**
!    * A value between 0.0 and 1.0 indicating the preferred vertical
!    * alignment of the component, relative to its siblings. The values
!    * {@link #TOP_ALIGNMENT}, {@link #CENTER_ALIGNMENT}, and {@link
!    * #BOTTOM_ALIGNMENT} can also be used, as synonyms for <code>0.0</code>,
!    * <code>0.5</code>, and <code>1.0</code>, respectively. Not all layout
!    * managers use this property.
!    *
!    * @see #getAlignmentY
!    * @see #setAlignmentY
!    * @see javax.swing.OverlayLayout
!    * @see javax.swing.BoxLayout
!    */
!   float alignmentY = 0.0f;
  
!   /** 
!    * The border painted around this component.
!    * 
!    * @see #paintBorder
!    */
!   Border border;
  
!   /** 
!    * The text to show in the tooltip associated with this component.
!    * 
!    * @see #setToolTipText
!    * @see #getToolTipText
!    */
!    String toolTipText;
  
!   /** 
!    * <p>Whether to double buffer this component when painting. This flag
!    * should generally be <code>false</code>, except for top level
!    * components such as {@link JFrame} or {@link JApplet}.</p>
!    *
!    * <p>All children of a double buffered component are painted into the
!    * double buffer automatically, so only the top widget in a window needs
!    * to be double buffered.</p>
!    *
!    * @see #setDoubleBuffered
!    * @see #isDoubleBuffered
!    * @see #paintLock
!    * @see #paint
!    */
!   boolean doubleBuffered = false;
  
!   /**
!    * A set of flags indicating which debugging graphics facilities should
!    * be enabled on this component. The values should be a combination of
!    * {@link DebugGraphics.NONE_OPTION}, {@link DebugGraphics.LOG_OPTION},
!    * {@link DebugGraphics.FLASH_OPTION}, or {@link
!    * DebugGraphics.BUFFERED_OPTION}.
!    *
!    * @see setDebugGraphicsOptions
!    * @see getDebugGraphicsOptions
!    * @see DebugGraphics
!    * @see getComponentGraphics
!    */
!   int debugGraphicsOptions;
  
!   /** 
!    * <p>This property controls two independent behaviors simultaneously.</p>
!    *
!    * <p>First, it controls whether to fill the background of this widget
!    * when painting its body. This affects calls to {@link
!    * JComponent#paintComponent}, which in turn calls {@link
!    * ComponentUI#update} on the component's {@link #ui} property. If the
!    * component is opaque during this call, the background will be filled
!    * before calling {@link ComponentUI#paint}. This happens merely as a
!    * convenience; you may fill the component's background yourself too,
!    * but there is no need to do so if you will be filling with the same
!    * color.</p>
!    *
!    * <p>Second, it the opaque property informs swing's repaint system
!    * whether it will be necessary to paint the components "underneath" this
!    * component, in Z-order. If the component is opaque, it is considered to
!    * completely occlude components "underneath" it, so they will not be
!    * repainted along with the opaque component.</p>
!    *
!    * <p>The default value for this property is <code>false</code>, but most
!    * components will want to set it to <code>true</code> when installing UI
!    * defaults in {@link ComponentUI#installUI}.</p>
!    *
!    * @see #setOpaque
!    * @see #isOpaque
!    * @see #paintComponent
!    */
!   boolean opaque = false;
  
!   /** 
!    * The user interface delegate for this component. Event delivery and
!    * repainting of the component are usually delegated to this object. 
!    *
!    * @see #setUI
!    * @see #getUI
!    * @see #updateUI
!    */
!   protected ComponentUI ui;
  
!   /**
!    * A hint to the focus system that this component should or should not
!    * get focus. If this is <code>false</code>, swing will not try to
!    * request focus on this component; if <code>true</code>, swing might
!    * try to request focus, but the request might fail. Thus it is only 
!    * a hint guiding swing's behavior.
!    *
!    * @see #requestFocus
!    * @see #isRequestFocusEnabled
!    * @see #setRequestFocusEnabled
!    */
!   boolean requestFocusEnabled;
  
!   /**
!    * Flag indicating behavior of this component when the mouse is dragged
!    * outside the component and the mouse <em>stops moving</em>. If
!    * <code>true</code>, synthetic mouse events will be delivered on regular
!    * timed intervals, continuing off in the direction the mouse exited the
!    * component, until the mouse is released or re-enters the component.
!    *
!    * @see setAutoscrolls
!    * @see getAutoscrolls
!    */
!   boolean autoscrolls = false;
  
!   /**
!    * Listeners for events other than {@link PropertyChangeEvent} are
!    * handled by this listener list. PropertyChangeEvents are handled in
!    * {@link #changeSupport}.
!    */
!   protected EventListenerList listenerList = new EventListenerList();
  
!   /** 
!    * Support for {@link PropertyChangeEvent} events. This is constructed
!    * lazily when the component gets its first {@link
!    * PropertyChangeListener} subscription; until then it's an empty slot.
!    */
!   private SwingPropertyChangeSupport changeSupport;
  
  
!   /** 
!    * Storage for "client properties", which are key/value pairs associated
!    * with this component by a "client", such as a user application or a
!    * layout manager. This is lazily constructed when the component gets its
!    * first client property.
!    */
!   private Hashtable clientProperties;
!   
!   private InputMap inputMap_whenFocused;
!   private InputMap inputMap_whenAncestorOfFocused;
!   private InputMap inputMap_whenInFocusedWindow;
!   private ActionMap actionMap;
!   /** @since 1.3 */
!   private boolean verifyInputWhenFocusTarget;
!   private InputVerifier inputVerifier;
  
+   private TransferHandler transferHandler;
  
!   /** 
!    * A lock held during recursive painting; this is used to serialize
!    * access to the double buffer, and also to select the "top level" 
!    * object which should acquire the double buffer in a given widget
!    * tree (which may have multiple double buffered children).
!    *
!    * @see #doubleBuffered
!    * @see #paint
!    */
!   private static final Object paintLock = new Object();
  
  
!   /**
!    * The default locale of the component.
!    * 
!    * @see #getDefaultLocale
!    * @see #setDefaultLocale
!    */
!   private static Locale defaultLocale;
!   
!   public static final String TOOL_TIP_TEXT_KEY = "ToolTipText";
  
!   /**
!    * Constant used to indicate that no condition has been assigned to a
!    * particular action.
!    *
!    * @see #registerKeyboardAction
!    */
!   public static final int UNDEFINED_CONDITION = -1;
  
!   /**
!    * Constant used to indicate that an action should be performed only when 
!    * the component has focus.
!    *
!    * @see #registerKeyboardAction
!    */
!   public static final int WHEN_FOCUSED = 0;
  
!   /**
!    * Constant used to indicate that an action should be performed only when 
!    * the component is an ancestor of the component which has focus.
!    *
!    * @see #registerKeyboardAction
!    */
!   public static final int WHEN_ANCESTOR_OF_FOCUSED_COMPONENT = 1;
  
!   /**
!    * Constant used to indicate that an action should be performed only when 
!    * the component is in the window which has focus.
!    *
!    * @see #registerKeyboardAction
!    */
!   public static final int WHEN_IN_FOCUSED_WINDOW = 2;
  
  
!   /**
!    * Creates a new <code>JComponent</code> instance.
!    */
!   public JComponent()
!   {
!     super();
!     super.setLayout(new FlowLayout());
!     setDropTarget(new DropTarget());
!     defaultLocale = Locale.getDefault();
!     debugGraphicsOptions = DebugGraphics.NONE_OPTION;
!   }
  
!   /**
!    * Helper to lazily construct and return the client properties table.
!    * 
!    * @return The current client properties table
!    *
!    * @see #clientProperties
!    * @see #getClientProperty
!    * @see #putClientProperty
!    */
!   private Hashtable getClientProperties()
!   {
!     if (clientProperties == null)
!       clientProperties = new Hashtable();
!     return clientProperties;
!   }
  
!   /**
!    * Get a client property associated with this component and a particular
!    * key.
!    *
!    * @param key The key with which to look up the client property
!    *
!    * @return A client property associated with this object and key
!    *
!    * @see #clientProperties
!    * @see #getClientProperties
!    * @see #putClientProperty
!    */
!   public final Object getClientProperty(Object key)
!   {
!     return getClientProperties().get(key);
!   }
  
!   /**
!    * Add a client property <code>value</code> to this component, associated
!    * with <code>key</code>. If there is an existing client property
!    * associated with <code>key</code>, it will be replaced.
!    *
!    * @param key The key of the client property association to add
!    * @param value The value of the client property association to add
!    *
!    * @see #clientProperties
!    * @see #getClientProperties
!    * @see #getClientProperty
!    */
!   public final void putClientProperty(Object key, Object value)
!   {
!     getClientProperties().put(key, value);
!   }
  
!   /**
!    * Unregister an <code>AncestorListener</code>.
!    *
!    * @param listener The listener to unregister
!    * 
!    * @see addAncestorListener
!    */
!   public void removeAncestorListener(AncestorListener listener)
!   {
!     listenerList.remove(AncestorListener.class, listener);
!   }
  
!   /**
!    * Unregister a <code>PropertyChangeListener</code>.
!    *
!    * @param listener The listener to register
!    *
!    * @see #addPropertyChangeListener
!    * @see #changeSupport
!    */
!   public void removePropertyChangeListener(PropertyChangeListener listener)
!   {
!     if (changeSupport != null)
!       changeSupport.removePropertyChangeListener(listener);
!   }
  
!   /**
!    * Unregister a <code>PropertyChangeListener</code>.
!    *
!    * @param propertyName The property name to unregister the listener from
!    * @param listener The listener to unregister
!    *
!    * @see #addPropertyChangeListener
!    * @see #changeSupport
!    */
!   public void removePropertyChangeListener(String propertyName,
!                                            PropertyChangeListener listener)
!   {
!     if (changeSupport != null)
!       changeSupport.removePropertyChangeListener(propertyName, listener);
!   }
  
!   /**
!    * Unregister a <code>VetoableChangeChangeListener</code>.
!    *
!    * @param listener The listener to unregister
!    *
!    * @see #addVetoableChangeListener
!    */
!   public void removeVetoableChangeListener(VetoableChangeListener listener)
!   {
!     listenerList.remove(VetoableChangeListener.class, listener);
!   }
  
!   /**
!    * Register an <code>AncestorListener</code>.
!    *
!    * @param listener The listener to register
!    *
!    * @see #removeVetoableChangeListener
!    */
!   public void addAncestorListener(AncestorListener listener)
!   {
!     listenerList.add(AncestorListener.class, listener);
!   }
  
!   /**
!    * Register a <code>PropertyChangeListener</code>. This listener will
!    * receive any PropertyChangeEvent, regardless of property name. To
!    * listen to a specific property name, use {@link
!    * #addPropertyChangeListener(String,PropertyChangeListener)} instead.
!    *
!    * @param listener The listener to register
!    *
!    * @see #removePropertyChangeListener
!    * @see #changeSupport
!    */
!   public void addPropertyChangeListener(PropertyChangeListener listener)
!   {
!     if (changeSupport == null)
!       changeSupport = new SwingPropertyChangeSupport(this);
!     changeSupport.addPropertyChangeListener(listener);
!   }
  
!   /**
!    * Register a <code>PropertyChangeListener</code> for a specific, named
!    * property. To listen to all property changes, regardless of name, use
!    * {@link #addPropertyChangeListener(PropertyChangeListener)} instead.
!    *
!    * @param propertyName The property name to listen to
!    * @param listener The listener to register
!    *
!    * @see #removePropertyChangeListener
!    * @see #changeSupport
!    */
!   public void addPropertyChangeListener(String propertyName,
!                                         PropertyChangeListener listener)
!   {
!     listenerList.add(PropertyChangeListener.class, listener);
!   }
  
!   /**
!    * Register a <code>VetoableChangeListener</code>.
!    *
!    * @param listener The listener to register
!    *
!    * @see #removeVetoableChangeListener
!    * @see #listenerList
!    */
!   public void addVetoableChangeListener(VetoableChangeListener listener)
!   {
!     listenerList.add(VetoableChangeListener.class, listener);
!   }
  
!   /**
!    * Return all registered listeners of a particular type.
!    *
!    * @param listenerType The type of listener to return
!    *
!    * @return All listeners in the {@link #listenerList} which 
!    * are of the specified type
!    *
!    * @see #listenerList
!    */
!   public EventListener[] getListeners(Class listenerType)
!   {
!     return listenerList.getListeners(listenerType);
!   }
  
!   /**
!    * Return all registered <code>AncestorListener</code> objects.
!    *
!    * @return The set of <code>AncestorListener</code> objects in {@link
!    * #listenerList}
!    */
!   public AncestorListener[] getAncestorListeners()
!   {
!     return (AncestorListener[]) getListeners(AncestorListener.class);
!   }
  
!   /**
!    * Return all registered <code>VetoableChangeListener</code> objects.
!    *
!    * @return The set of <code>VetoableChangeListener</code> objects in {@link
!    * #listenerList}
!    */
!   public VetoableChangeListener[] getVetoableChangeListeners()
!   {
!     return (VetoableChangeListener[]) getListeners(VetoableChangeListener.class);
!   }
  
!   /**
!    * Return all <code>PropertyChangeListener</code> objects registered to listen
!    * for a particular property.
!    *
!    * @param property The property to return the listeners of
!    *
!    * @return The set of <code>PropertyChangeListener</code> objects in 
!    * {@link #changeSupport} registered to listen on the specified propert
!    */
!   public PropertyChangeListener[] getPropertyChangeListeners(String property)
!   {
!     return changeSupport == null ? new PropertyChangeListener[0]
!                                  : changeSupport.getPropertyChangeListeners(property);
!   }
  
!   /**
!    * A variant of {@link #firePropertyChange(String,Object,Object)} 
!    * for properties with <code>boolean</code> values.
!    */
!   public void firePropertyChange(String propertyName, boolean oldValue,
!                                  boolean newValue)
!   {
!     if (changeSupport != null)
!       changeSupport.firePropertyChange(propertyName, Boolean.valueOf(oldValue),
!                                        Boolean.valueOf(newValue));
!   }
  
+   /**
+    * A variant of {@link #firePropertyChange(String,Object,Object)} 
+    * for properties with <code>byte</code> values.
+    */
+   public void firePropertyChange(String propertyName, byte oldValue,
+                                  byte newValue)
+   {
+     if (changeSupport != null)
+       changeSupport.firePropertyChange(propertyName, new Byte(oldValue),
+                                        new Byte(newValue));
+   }
  
!   /**
!    * A variant of {@link #firePropertyChange(String,Object,Object)} 
!    * for properties with <code>char</code> values.
!    */
!   public void firePropertyChange(String propertyName, char oldValue,
!                                  char newValue)
!   {
!     if (changeSupport != null)
!       changeSupport.firePropertyChange(propertyName, new Character(oldValue),
!                                        new Character(newValue));
!   }
  
!   /**
!    * A variant of {@link #firePropertyChange(String,Object,Object)} 
!    * for properties with <code>double</code> values.
!    */
!   public void firePropertyChange(String propertyName, double oldValue,
!                                  double newValue)
!   {
!     if (changeSupport != null)
!       changeSupport.firePropertyChange(propertyName, new Double(oldValue),
!                                        new Double(newValue));
!   }
  
!   /**
!    * A variant of {@link #firePropertyChange(String,Object,Object)} 
!    * for properties with <code>float</code> values.
!    */
!   public void firePropertyChange(String propertyName, float oldValue,
!                                  float newValue)
!   {
!     if (changeSupport != null)
!       changeSupport.firePropertyChange(propertyName, new Float(oldValue),
!                                        new Float(newValue));
!   }
  
!   /**
!    * A variant of {@link #firePropertyChange(String,Object,Object)} 
!    * for properties with <code>int</code> values.
!    */
!   public void firePropertyChange(String propertyName, int oldValue,
!                                  int newValue)
!   {
!     if (changeSupport != null)
!       changeSupport.firePropertyChange(propertyName, new Integer(oldValue),
!                                        new Integer(newValue));
!   }
  
+   /**
+    * A variant of {@link #firePropertyChange(String,Object,Object)} 
+    * for properties with <code>long</code> values.
+    */
+   public void firePropertyChange(String propertyName, long oldValue,
+                                  long newValue)
+   {
+     if (changeSupport != null)
+       changeSupport.firePropertyChange(propertyName, new Long(oldValue),
+                                        new Long(newValue));
+   }
  
!   /**
!    * Call {@link PropertyChangeListener#propertyChange} on all listeners
!    * registered to listen to a given property. Any method which changes
!    * the specified property of this component should call this method.
!    *
!    * @param propertyName The property which changed
!    * @param oldValue The old value of the property
!    * @param newValue The new value of the property
!    *
!    * @see #changeSupport
!    * @see #addPropertyChangeListener
!    * @see #removePropertyChangeListener
!    */
!   protected void firePropertyChange(String propertyName, Object oldValue,
!                                     Object newValue)
!   {
!     if (changeSupport != null)
!       changeSupport.firePropertyChange(propertyName, oldValue, newValue);
!   }
  
!   /**
!    * A variant of {@link #firePropertyChange(String,Object,Object)} 
!    * for properties with <code>short</code> values.
!    */
!   public void firePropertyChange(String propertyName, short oldValue,
!                                  short newValue)
!   {
!     if (changeSupport != null)
!       changeSupport.firePropertyChange(propertyName, new Short(oldValue),
!                                        new Short(newValue));
!   }
  
!   /**
!    * Call {@link VetoableChangeListener#vetoableChange} on all listeners
!    * registered to listen to a given property. Any method which changes
!    * the specified property of this component should call this method.
!    *
!    * @param propertyName The property which changed
!    * @param oldValue The old value of the property
!    * @param newValue The new value of the property
!    *
!    * @throws PropertyVetoException if the change was vetoed by a listener
!    *
!    * @see addVetoableChangeListener
!    * @see removeVetoableChangeListener
!    */
!   protected void fireVetoableChange(String propertyName, Object oldValue,
!                                     Object newValue)
!     throws PropertyVetoException
!   {
!     VetoableChangeListener[] listeners = getVetoableChangeListeners();
!     
!     PropertyChangeEvent evt = new PropertyChangeEvent(this, propertyName, oldValue, newValue);
!     
!     for (int i = 0; i < listeners.length; i++)
!       listeners[i].vetoableChange(evt);
!   }
  
!   /**
!    * Get the value of the accessibleContext property for this component.
!    *
!    * @return the current value of the property
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     return null;
!   }
  
  
!   /**
!    * Get the value of the {@link #alignmentX} property.
!    *
!    * @return The current value of the property.
!    *
!    * @see #setAlignmentX
!    * @see #alignmentY
!    */
!   public float getAlignmentX()
!   {
!     return alignmentX;
!   }
  
!   /**
!    * Get the value of the {@link #alignmentY} property.
!    *
!    * @return The current value of the property.
!    *
!    * @see #setAlignmentY
!    * @see #alignmentX
!    */
!   public float getAlignmentY()
!   {
!     return alignmentY;
!   }
  
!   /**
!    * Get the current value of the {@link #autoscrolls} property.
!    *
!    * @return The current value of the property
!    */
!   public boolean getAutoscrolls()
!   {
!     return autoscrolls;
!   }
  
!   /**
!    * Set the value of the {@link #border} property, revalidate
!    * and repaint this component.
!    *   
!    * @param newBorder The new value of the property
!    *
!    * @see #getBorder
!    */
!   public void setBorder(Border newBorder)
!   {
!     Border oldBorder = border;
!     border = newBorder;
!     firePropertyChange("border", oldBorder, newBorder);
!     revalidate();
!     repaint();
!   }
  
!   /**
!    * Get the value of the {@link #border} property.
!    *
!    * @return The property's current value
!    *
!    * @see #setBorder
!    */
!   public Border getBorder()
!   {
!     return border;
!   }
  
!   /**
!    * Get the component's current bounding box. If a rectangle is provided,
!    * use this as the return value (adjusting its fields in place);
!    * otherwise (of <code>null</code> is provided) return a new {@link
!    * Rectangle}.
!    *
!    * @param rv Optional return value to use
!    *
!    * @return A rectangle bounding the component
!    */
!   public Rectangle getBounds(Rectangle rv)
!   {
!     if (rv == null)
!       return new Rectangle(getX(), getY(), getWidth(), getHeight());
!     else
!       {
!         rv.setBounds(getX(), getY(), getWidth(), getHeight());
!         return rv;
!       }
!   }
  
!   /**
!    * Prepares a graphics context for painting this object. If {@link
!    * #debugGraphicsOptions} is not equal to {@link
!    * DebugGraphics#NONE_OPTION}, produce a new {@link DebugGraphics} object
!    * wrapping the parameter. Otherwise configure the parameter with this
!    * component's foreground color and font.
!    *
!    * @param g The graphics context to wrap or configure
!    *
!    * @return A graphics context to paint this object with
!    *
!    * @see #debugGraphicsOptions
!    * @see #paint
!    */
!   protected Graphics getComponentGraphics(Graphics g)
!   {    
!     Graphics g2 = g.create();
!     g2.setFont(this.getFont());
!     g2.setColor(this.getForeground());
!     return g2;
!   }
  
  
!   /**
!    * Get the value of the {@link #debugGraphicsOptions} property.
!    *
!    * @return The current value of the property.
!    *
!    * @see #setDebugGraphicsOptions
!    * @see #debugGraphicsOptions
!    */
!   public int getDebugGraphicsOptions()
!   {
!     return 0;
!   }
  
!   /**
!    * Get the component's insets, which are calculated from
!    * the {@link #border} property. If the border is <code>null</code>,
!    * calls {@link Container#getInsets}.
!    *
!    * @return The component's current insets
!    */
!   public Insets getInsets()
!   {
!     if (border == null)
!       return super.getInsets();
!     return getBorder().getBorderInsets(this);
!   }
  
!   /**
!    * Get the component's insets, which are calculated from the {@link
!    * #border} property. If the border is <code>null</code>, calls {@link
!    * Container#getInsets}. The passed-in {@link Insets} value will be
!    * used as the return value, if possible.
!    *
!    * @param insets Return value object to reuse, if possible
!    *
!    * @return The component's current insets
!    */
!   public Insets getInsets(Insets insets)
!   {
!     Insets t = getInsets();
  
!     if (insets == null)
!       return t;
  
!     insets.left = t.left;
!     insets.right = t.right;
!     insets.top = t.top;
!     insets.bottom = t.bottom;
!     return insets;
!   }
  
!   /**
!    * Get the component's location. The passed-in {@link Point} value
!    * will be used as the return value, if possible.
!    *
!    * @param rv Return value object to reuse, if possible
!    *
!    * @return The component's current location
!    */
!   public Point getLocation(Point rv)
!   {
!     if (rv == null)
!       return new Point(getX(), getY());
  
!     rv.setLocation(getX(), getY());
!     return rv;
!   }
  
!   /**
!    * Get the component's maximum size. If the {@link #maximumSize} property
!    * has been explicitly set, it is returned. If the {@link #maximumSize}
!    * property has not been set but the {@link ui} property has been, the
!    * result of {@link ComponentUI#getMaximumSize} is returned. If neither
!    * property has been set, the result of {@link Container#getMaximumSize}
!    * is returned.
!    *
!    * @return The maximum size of the component
!    *
!    * @see #maximumSize
!    * @see #setMaximumSize
!    */
!   public Dimension getMaximumSize()
!   {
!     if (maximumSize != null)
!       return maximumSize;
  
!     if (ui != null)
!       {
!         Dimension s = ui.getMaximumSize(this);
!         if (s != null)
!           return s;
!       }
  
!     Dimension p = super.getMaximumSize();
!     return p;
!   }
  
!   /**
!    * Get the component's minimum size. If the {@link #minimumSize} property
!    * has been explicitly set, it is returned. If the {@link #minimumSize}
!    * property has not been set but the {@link ui} property has been, the
!    * result of {@link ComponentUI#getMinimumSize} is returned. If neither
!    * property has been set, the result of {@link Container#getMinimumSize}
!    * is returned.
!    *
!    * @return The minimum size of the component
!    *
!    * @see #minimumSize
!    * @see #setMinimumSize
!    */
!   public Dimension getMinimumSize()
!   {
!     if (minimumSize != null)
!       return minimumSize;
  
!     if (ui != null)
!       {
!         Dimension s = ui.getMinimumSize(this);
!         if (s != null)
!           return s;
!       }
  
!     Dimension p = super.getMinimumSize();
!     return p;
!   }
  
!   /**
!    * Get the component's preferred size. If the {@link #preferredSize}
!    * property has been explicitly set, it is returned. If the {@link
!    * #preferredSize} property has not been set but the {@link ui} property
!    * has been, the result of {@link ComponentUI#getPreferredSize} is
!    * returned. If neither property has been set, the result of {@link
!    * Container#getPreferredSize} is returned.
!    *
!    * @return The preferred size of the component
!    *
!    * @see #preferredSize
!    * @see #setPreferredSize
!    */
!   public Dimension getPreferredSize()
!   {
!     if (preferredSize != null)
!       return preferredSize;
  
!     if (ui != null)
!       {
!         Dimension s = ui.getPreferredSize(this);
!         if (s != null)
!           return s;
!       }
!     Dimension p = super.getPreferredSize();
!     return p;
!   }
  
!   /**
!    * Checks if a maximum size was explicitely set on the component.
!    *
!    * @return <code>true</code> if a maximum size was set,
!    * <code>false</code> otherwise
!    * 
!    * @since 1.3
!    */
!   public boolean isMaximumSizeSet()
!   {
!     return maximumSize != null;
!   }
  
!   /**
!    * Checks if a minimum size was explicitely set on the component.
!    *
!    * @return <code>true</code> if a minimum size was set,
!    * <code>false</code> otherwise
!    * 
!    * @since 1.3
!    */
!   public boolean isMinimumSizeSet()
!   {
!     return minimumSize != null;
!   }
  
!   /**
!    * Checks if a preferred size was explicitely set on the component.
!    *
!    * @return <code>true</code> if a preferred size was set,
!    * <code>false</code> otherwise
!    * 
!    * @since 1.3
!    */
!   public boolean isPreferredSizeSet()
!   {
!     return preferredSize != null;
!   }
!   
!   /**
!    * Return the value of the {@link #nextFocusableComponent} property.
!    *
!    * @return The current value of the property, or <code>null</code>
!    * if none has been set.
!    * 
!    * @deprecated See {@link java.awt.FocusTraversalPolicy}
!    */
!   public Component getNextFocusableComponent()
!   {
!     return null;
!   }
  
!   /**
!    * Return the set of {@link KeyStroke} objects which are registered
!    * to initiate actions on this component.
!    *
!    * @return An array of the registered keystrokes
!    */
!   public KeyStroke[] getRegisteredKeyStrokes()
!   {
!     return null;
!   }
  
!   /**
!    * Returns the first ancestor of this component which is a {@link JRootPane}.
!    * Equivalent to calling <code>SwingUtilities.getRootPane(this);</code>.
!    *
!    * @return An ancestral JRootPane, or <code>null</code> if none exists.
!    */
!   public JRootPane getRootPane()
!   {
!     JRootPane p = SwingUtilities.getRootPane(this);
!     return p;
!   }
  
!   /**
!    * Get the component's size. The passed-in {@link Dimension} value
!    * will be used as the return value, if possible.
!    *
!    * @param rv Return value object to reuse, if possible
!    *
!    * @return The component's current size
!    */
!   public Dimension getSize(Dimension rv)
!   {
!     if (rv == null)
!       return new Dimension(getWidth(), getHeight());
!     else
!       {
!         rv.setSize(getWidth(), getHeight());
!         return rv;
!       }
!   }
  
!   /**
!    * Return the {@link #toolTip} property of this component, creating it and
!    * setting it if it is currently <code>null</code>. This method can be
!    * overridden in subclasses which wish to control the exact form of
!    * tooltip created.
!    *
!    * @return The current toolTip
!    */
!   public JToolTip createToolTip()
!   {
! 	JToolTip toolTip = new JToolTip();
! 	toolTip.setComponent(this);
! 	toolTip.setTipText(toolTipText);
!     
!     return toolTip;
!   }
  
!   /**
!    * Return the location at which the {@link #toolTip} property should be
!    * displayed, when triggered by a particular mouse event. 
!    *
!    * @param event The event the tooltip is being presented in response to
!    *
!    * @return The point at which to display a tooltip, or <code>null</code>
!    * if swing is to choose a default location.
!    */
!   public Point getToolTipLocation(MouseEvent event)
!   {
!     return null;
!   }
  
!   /**
!    * Set the value of the {@link #toolTipText} property.
!    *
!    * @param text The new property value
!    *
!    * @see #getToolTipText
!    */
!   public void setToolTipText(String text)
!   {
!     if (text == null)
!     {
!       ToolTipManager.sharedInstance().unregisterComponent(this);
!       toolTipText = null;
!       return;
!     }
! 		
!     // XXX: The tip text doesn't get updated unless you set it to null
!     // and then to something not-null. This is consistent with the behaviour
!     // of Sun's ToolTipManager.
! 			
!     String oldText = toolTipText;
!     toolTipText = text;
! 		
!     if (oldText == null)
!       ToolTipManager.sharedInstance().registerComponent(this);
!   }
  
!   /**
!    * Get the value of the {@link #toolTipText} property.
!    *
!    * @return The current property value
!    *
!    * @see #setToolTipText
!    */
!   public String getToolTipText()
!   {
!     return toolTipText;
!   }
  
!   /**
!    * Get the value of the {@link #toolTipText} property, in response to a
!    * particular mouse event.
!    *
!    * @param event The mouse event which triggered the tooltip
!    *
!    * @return The current property value
!    *
!    * @see #setToolTipText
!    */
!   public String getToolTipText(MouseEvent event)
!   {
!     return getToolTipText();
!   }
  
!   /**
!    * Return the top level ancestral container (usually a {@link
!    * java.awt.Window} or {@link java.awt.Applet}) which this component is
!    * contained within, or <code>null</code> if no ancestors exist.
!    *
!    * @return The top level container, if it exists
!    */
!   public Container getTopLevelAncestor()
!   {
!     Container c = getParent();
!     for (Container peek = c; peek != null; peek = peek.getParent())
!       c = peek;
!     return c;
!   }
  
!   /**
!    * Compute the component's visible rectangle, which is defined
!    * recursively as either the component's bounds, if it has no parent, or
!    * the intersection of the component's bounds with the visible rectangle
!    * of its parent.
!    *
!    * @param rect The return value slot to place the visible rectangle in
!    */
!   public void computeVisibleRect(Rectangle rect)
!   {
!     Component c = getParent();
!     if (c != null && c instanceof JComponent)
!       {
!         ((JComponent) c).computeVisibleRect(rect);
!         rect.translate(-getX(), -getY());
!         Rectangle2D.intersect(rect,
!                               new Rectangle(0, 0, getWidth(), getHeight()),
!                               rect);
!       }
!     else
!       rect.setRect(0, 0, getWidth(), getHeight());
!   }
  
!   /**
!    * Return the component's visible rectangle in a new {@link Rectangle},
!    * rather than via a return slot.
!    *
!    * @return The component's visible rectangle
!    *
!    * @see #computeVisibleRect(Rectangle)
!    */
!   public Rectangle getVisibleRect()
!   {
!     Rectangle r = new Rectangle();
!     computeVisibleRect(r);
!     return r;
!   }
  
!   /**
!    * <p>Requests that this component receive input focus, giving window
!    * focus to the top level ancestor of this component. Only works on
!    * displayable, focusable, visible components.</p>
!    *
!    * <p>This method should not be called by clients; it is intended for
!    * focus implementations. Use {@link Component#requestFocus} instead.</p>
!    *
!    * @see {@link Component#requestFocus}
!    */
!   public void grabFocus()
!   {
!   }
  
!   /**
!    * Get the value of the {@link #doubleBuffered} property.
!    *
!    * @return The property's current value
!    */
!   public boolean isDoubleBuffered()
!   {
!     return doubleBuffered;
!   }
  
!   /**
!    * Return <code>true</code> if the provided component has no native peer;
!    * in other words, if it is a "lightweight component".
!    *
!    * @param c The component to test for lightweight-ness
!    *
!    * @return Whether or not the component is lightweight
!    */
!   public static boolean isLightweightComponent(Component c)
!   {
!     return c.getPeer() instanceof LightweightPeer;
!   }
  
!   /**
!    * Return <code>true</code> if you wish this component to manage its own
!    * focus. In particular: if you want this component to be sent
!    * <code>TAB</code> and <code>SHIFT+TAB</code> key events, and to not
!    * have its children considered as focus transfer targets. If
!    * <code>true</code>, focus traversal around this component changes to
!    * <code>CTRL+TAB</code> and <code>CTRL+SHIFT+TAB</code>.
!    *
!    * @return <code>true</code> if you want this component to manage its own
!    * focus, otherwise (by default) <code>false</code>
!    *
!    * @deprecated 1.4 Use {@link Component.setFocusTraversalKeys(int,Set)} and
!    * {@link Container.setFocusCycleRoot(boolean)} instead
!    */
!   public boolean isManagingFocus()
!   {
!     return false;
!   }
  
!   /**
!    * Return the current value of the {@link opaque} property. 
!    *
!    * @return The current property value
!    */
!   public boolean isOpaque()
!   {
!     return opaque;
!   }
  
+   /**
+    * Return <code>true</code> if the component can guarantee that none of its
+    * children will overlap in Z-order. This is a hint to the painting system.
+    * The default is to return <code>true</code>, but some components such as
+    * {@link JLayeredPane} should override this to return <code>false</code>.
+    *
+    * @return Whether the component tiles its children
+    */
+   public boolean isOptimizedDrawingEnabled()
+   {
+     return true;
+   }
  
!   /**
!    * Return <code>true</code> if this component is currently painting a tile.
!    *
!    * @return Whether the component is painting a tile
!    */
!   public boolean isPaintingTile()
!   {
!     return false;
!   }
  
!   /**
!    * Get the value of the {@link #requestFocusEnabled} property.
!    *
!    * @return The current value of the property
!    */
!   public boolean isRequestFocusEnabled()
!   {
!     return requestFocusEnabled;
!   }
  
!   /**
!    * Return <code>true</code> if this component is a validation root; this
!    * will cause calls to {@link #invalidate} in this component's children
!    * to be "captured" at this component, and not propagate to its parents.
!    * For most components this should return <code>false</code>, but some
!    * components such as {@link JViewPort} will want to return
!    * <code>true</code>.
!    *
!    * @return Whether this component is a validation root
!    */
!   public boolean isValidateRoot()
!   {
!     return false;
!   }
  
!   /**
!    * <p>Paint the component. This is a delicate process, and should only be
!    * called from the repaint thread, under control of the {@link
!    * RepaintManager}. Client code should usually call {@link #repaint} to
!    * trigger painting.</p>
!    *
!    * <p>This method will acquire a double buffer from the {@link
!    * RepaintManager} if the component's {@link #doubleBuffered} property is
!    * <code>true</code> and the <code>paint</code> call is the
!    * <em>first</em> recursive <code>paint</code> call inside swing.</p>
!    *
!    * <p>The method will also modify the provided {@link Graphics} context
!    * via the {@link #getComponentGraphics} method. If you want to customize
!    * the graphics object used for painting, you should override that method
!    * rather than <code>paint</code>.</p>
!    *
!    * <p>The body of the <code>paint</code> call involves calling {@link
!    * #paintComponent}, {@link #paintBorder}, and {@link #paintChildren} in
!    * order. If you want to customize painting behavior, you should override
!    * one of these methods rather than <code>paint</code>.</p>
!    *
!    * <p>For more details on the painting sequence, see <a
!    * href="http://java.sun.com/products/jfc/tsc/articles/painting/index.html">this
!    * article</a>.</p>
!    *
!    * @param g The graphics context to paint with
!    *
!    * @see #paintImmediately
!    */
!   public void paint(Graphics g)
!   {
!     Graphics g2 = g;
!     Image doubleBuffer = null;
!     RepaintManager rm = RepaintManager.currentManager(this);
  
!     if (isDoubleBuffered()
!         && (rm.isDoubleBufferingEnabled())
!         && (! Thread.holdsLock(paintLock)))
!       {
!         doubleBuffer = rm.getOffscreenBuffer(this, getWidth(), getHeight());
!       }
  
!     synchronized (paintLock)
!       {
!         if (doubleBuffer != null)
!           {
!             g2 = doubleBuffer.getGraphics();
!             g2.setClip(g.getClipBounds());
!           }
! 	  
!         g2 = getComponentGraphics(g2);
!         paintComponent(g2);
!         paintBorder(g2);
!         paintChildren(g2);
!         
!         if (doubleBuffer != null)
!           g.drawImage(doubleBuffer, 0, 0, (ImageObserver) null);
!       }
!   }
  
!   /**
!    * Paint the component's border. This usually means calling {@link
!    * Border#paintBorder} on the {@link #border} property, if it is
!    * non-<code>null</code>. You may override this if you wish to customize
!    * border painting behavior. The border is painted after the component's
!    * body, but before the component's children.
!    *
!    * @param g The graphics context with which to paint the border
!    *
!    * @see #paint
!    * @see #paintChildren
!    * @see #paintComponent
!    */
!   protected void paintBorder(Graphics g)
!   {
!     if (getBorder() != null)
!       getBorder().paintBorder(this, g, 0, 0, getWidth(), getHeight());
!   }
  
!   /**
!    * Paint the component's children. This usually means calling {@link
!    * Container#paint}, which recursively calls {@link #paint} on any of the
!    * component's children, with appropriate changes to coordinate space and
!    * clipping region. You may override this if you wish to customize
!    * children painting behavior. The children are painted after the
!    * component's body and border.
!    *
!    * @param g The graphics context with which to paint the children
!    *
!    * @see #paint
!    * @see #paintBorder
!    * @see #paintComponent
!    */
!   protected void paintChildren(Graphics g)
!   {
!     super.paint(g);
!   }
  
!   /**
!    * Paint the component's body. This usually means calling {@link
!    * ComponentUI#update} on the {@link #ui} property of the component, if
!    * it is non-<code>null</code>. You may override this if you wish to
!    * customize the component's body-painting behavior. The component's body
!    * is painted first, before the border and children.
!    *
!    * @param g The graphics context with which to paint the body
!    *
!    * @see #paint
!    * @see #paintBorder
!    * @see #paintChildren
!    */
!   protected void paintComponent(Graphics g)
!   {
!     if (ui != null)
!       ui.update(g, this);
!   }
  
!   /**
!    * A variant of {@link #paintImmediately(Rectangle)} which takes
!    * integer parameters.
!    *
!    * @param x The left x coordinate of the dirty region
!    * @param y The top y coordinate of the dirty region
!    * @param w The width of the dirty region
!    * @param h The height of the dirty region
!    */
!   public void paintImmediately(int x, int y, int w, int h)
!   {
!     paintImmediately(new Rectangle(x, y, w, h));
!   }
  
!   /**
!    * Transform the provided dirty rectangle for this component into the
!    * appropriate ancestral {@link JRootPane} and call {@link #paint} on
!    * that root pane. This method is called from the {@link RepaintManager}
!    * and should always be called within the painting thread.
!    *
!    * @param r The dirty rectangle to paint
!    */
!   public void paintImmediately(Rectangle r)
!   {
!     Component root = SwingUtilities.getRoot(this);
!     if (root == null || ! root.isShowing())
!       return;
!     Graphics g = root.getGraphics();
!     if (g == null)
!       return;
  
!     Rectangle clip = SwingUtilities.convertRectangle(this, r, root);
!     g.setClip(clip);
!     root.paint(g);
!     g.dispose();
!   }
  
!   /**
!    * Return a string representation for this component, for use in
!    * debugging.
!    *
!    * @return A string describing this component.
!    */
!   protected String paramString()
!   {
!     StringBuffer sb = new StringBuffer();
!     sb.append(super.paramString());
!     sb.append(",alignmentX=").append(getAlignmentX());
!     sb.append(",alignmentY=").append(getAlignmentY());
!     sb.append(",border=");
!     if (getBorder() != null)
!       sb.append(getBorder());
!     sb.append(",maximumSize=");
!     if (getMaximumSize() != null)
!       sb.append(getMaximumSize());
!     sb.append(",minimumSize=");
!     if (getMinimumSize() != null)
!       sb.append(getMinimumSize());
!     sb.append(",preferredSize=");
!     if (getPreferredSize() != null)
!       sb.append(getPreferredSize());
!     return sb.toString();
!   }
  
!   /**
!    * A variant of {@link
!    * #registerKeyboardAction(ActionListener,String,KeyStroke,int)} which
!    * provides <code>null</code> for the command name.   
!    */
!   public void registerKeyboardAction(ActionListener act,
!                                      KeyStroke stroke, 
!                                      int cond)
!   {
!     registerKeyboardAction(act, null, stroke, cond);
!   }
  
!   /* 
!    * There is some charmingly undocumented behavior sun seems to be using
!    * to simulate the old register/unregister keyboard binding API. It's not
!    * clear to me why this matters, but we shall endeavour to follow suit.
!    *
!    * Two main thing seem to be happening when you do registerKeyboardAction():
!    * 
!    *  - no actionMap() entry gets created, just an entry in inputMap()
!    *
!    *  - the inputMap() entry is a proxy class which invokes the the
!    *  binding's actionListener as a target, and which clobbers the command
!    *  name sent in the ActionEvent, providing the binding command name
!    *  instead.
!    *
!    * This much you can work out just by asking the input and action maps
!    * what they contain after making bindings, and watching the event which
!    * gets delivered to the recipient. Beyond that, it seems to be a
!    * sun-private solution so I will only immitate it as much as it matters
!    * to external observers.
!    */
  
!   private static class ActionListenerProxy
!     extends AbstractAction
!   {
!     ActionListener target;
!     String bindingCommandName;
  
!     public ActionListenerProxy(ActionListener li, 
!                                String cmd)
!     {
!       target = li;
!       bindingCommandName = cmd;
!     }
  
!     public void actionPerformed(ActionEvent e)
!     {
!       ActionEvent derivedEvent = new ActionEvent(e.getSource(),
!                                                  e.getID(),
!                                                  bindingCommandName,
!                                                  e.getModifiers());
!       target.actionPerformed(derivedEvent);
!     }
!   }
  
!   
!   /**
!    * An obsolete method to register a keyboard action on this component.
!    * You should use <code>getInputMap</code> and <code>getActionMap</code>
!    * to fetch mapping tables from keystrokes to commands, and commands to
!    * actions, respectively, and modify those mappings directly.
!    *
!    * @param anAction The action to be registered
!    * @param aCommand The command to deliver in the delivered {@link
!    * java.awt.ActionEvent}
!    * @param aKeyStroke The keystroke to register on
!    * @param aCondition One of the values {@link #UNDEFINED_CONDITION},
!    * {@link #WHEN_ANCESTOR_OF_FOCUSED_COMPONENT}, {@link #WHEN_FOCUSED}, or
!    * {@link #WHEN_IN_FOCUSED_WINDOW}, indicating the condition which must
!    * be met for the action to be fired
!    *
!    * @see #unregisterKeyboardAction
!    * @see #getConditionForKeystroke
!    * @see #resetKeyboardActiond
!    */
!   public void registerKeyboardAction(ActionListener act, 
!                                      String cmd,
!                                      KeyStroke stroke, 
!                                      int cond)
!   {
!     getInputMap(cond).put(stroke, new ActionListenerProxy(act, cmd));
!   }
  
  
  
!   public final void setInputMap(int condition, InputMap map)
!   {
!     enableEvents(AWTEvent.KEY_EVENT_MASK);
!     switch (condition)
!       {
!       case WHEN_FOCUSED:
!         inputMap_whenFocused = map;
!         break;
  
+       case WHEN_ANCESTOR_OF_FOCUSED_COMPONENT:
+         inputMap_whenAncestorOfFocused = map;
+         break;
  
!       case WHEN_IN_FOCUSED_WINDOW:
!         inputMap_whenInFocusedWindow = map;
!         break;
!         
!       case UNDEFINED_CONDITION:
!       default:
!         throw new IllegalArgumentException();
!       }
!   }
  
+   public final InputMap getInputMap(int condition)
+   {
+     enableEvents(AWTEvent.KEY_EVENT_MASK);
+     switch (condition)
+       {
+       case WHEN_FOCUSED:
+         if (inputMap_whenFocused == null)
+           inputMap_whenFocused = new InputMap();
+         return inputMap_whenFocused;
  
!       case WHEN_ANCESTOR_OF_FOCUSED_COMPONENT:
!         if (inputMap_whenAncestorOfFocused == null)
!           inputMap_whenAncestorOfFocused = new InputMap();
!         return inputMap_whenAncestorOfFocused;
  
!       case WHEN_IN_FOCUSED_WINDOW:
!         if (inputMap_whenInFocusedWindow == null)
!           inputMap_whenInFocusedWindow = new InputMap();
!         return inputMap_whenInFocusedWindow;
  
!       case UNDEFINED_CONDITION:
!       default:
!         return null;
!       }
!   }
  
+   public final InputMap getInputMap()
+   {
+     return getInputMap(WHEN_FOCUSED);
+   }
  
!   public final ActionMap getActionMap()
!   {
!     if (actionMap == null)
!       actionMap = new ActionMap();
!     return actionMap;
!   }
  
!   public final void setActionMap(ActionMap map)
!   {
!     actionMap = map;
!   }
  
!   /**
!    * Return the condition that determines whether a registered action
!    * occurs in response to the specified keystroke.
!    *
!    * @param aKeyStroke The keystroke to return the condition of
!    *
!    * @return One of the values {@link #UNDEFINED_CONDITION}, {@link
!    * #WHEN_ANCESTOR_OF_FOCUSED_COMPONENT}, {@link #WHEN_FOCUSED}, or {@link
!    * #WHEN_IN_FOCUSED_WINDOW}
!    *
!    * @deprecated As of 1.3 KeyStrokes can be registered with multiple
!    * simultaneous conditions.
!    *
!    * @see #registerKeyboardAction   
!    * @see #unregisterKeyboardAction   
!    * @see #resetKeyboardActiond
!    */
!   public int getConditionForKeyStroke(KeyStroke ks)
!   {
!     if (inputMap_whenFocused != null 
!         && inputMap_whenFocused.get(ks) != null)
!       return WHEN_FOCUSED;
!     else if (inputMap_whenAncestorOfFocused != null 
!              && inputMap_whenAncestorOfFocused.get(ks) != null)
!       return WHEN_ANCESTOR_OF_FOCUSED_COMPONENT;
!     else if (inputMap_whenInFocusedWindow != null 
!              && inputMap_whenInFocusedWindow.get(ks) != null)
!       return WHEN_IN_FOCUSED_WINDOW;
!     else
!       return UNDEFINED_CONDITION;
!   }
  
!   /**
!    * Get the ActionListener (typically an {@link Action} object) which is
!    * associated with a particular keystroke. 
!    *
!    * @param aKeyStroke The keystroke to retrieve the action of
!    *
!    * @return The action associated with the specified keystroke
!    *
!    * @deprecated Use {@link #getActionMap()}
!    */
!   public ActionListener getActionForKeyStroke(KeyStroke ks)
!   {
!     Object cmd = getInputMap().get(ks);
!     if (cmd != null)
!       {
!         if (cmd instanceof ActionListenerProxy)
!           return (ActionListenerProxy) cmd;
!         else if (cmd instanceof String)
!           return getActionMap().get(cmd);
!       }
!     return null;
!   }
  
!   /**
!    * A hook for subclasses which want to customize event processing.
!    */
!   protected void processComponentKeyEvent(KeyEvent e)
!   {
!   }
  
!   /**
!    * Override the default key dispatch system from Component to hook into
!    * the swing {@link InputMap} / {@link ActionMap} system.
!    *
!    * See <a
!    * href="http://java.sun.com/products/jfc/tsc/special_report/kestrel/keybindings.html">this
!    * report</a> for more details, it's somewhat complex.
!    */
!   protected void processKeyEvent(KeyEvent e)
!   {
!     processComponentKeyEvent(e);
  
!     // FIXME: this needs to be elaborated significantly, to do all the
!     // focus / ancestor / window searching for the various binding modes.
!     if (! e.isConsumed() &&
!         processKeyBinding(KeyStroke.getKeyStrokeForEvent(e), 
!                           e, WHEN_FOCUSED, e.getID() == KeyEvent.KEY_PRESSED))
!       e.consume();
!   }
! 
!   protected boolean processKeyBinding(KeyStroke ks,
!                                       KeyEvent e,
!                                       int condition,
!                                       boolean pressed)
!   { 
!     if (isEnabled())
!       {
!         Action act = null;
!         InputMap map = getInputMap(condition);
!         if (map != null)
!           {
!             Object cmd = map.get(ks);
!             if (cmd != null)
!               {
!                 if (cmd instanceof ActionListenerProxy)
!                   act = (Action) cmd;
!                 else 
!                   act = (Action) getActionMap().get(cmd);
!               }
!           }
!         if (act != null && act.isEnabled())
!           return SwingUtilities.notifyAction(act, ks, e, this, e.getModifiers());
!       }
!     return false;
!   }
!   
!   /**
!    * Remove a keyboard action registry.
!    *
!    * @param stroke The keystroke to unregister
!    *
!    * @see #registerKeyboardAction
!    * @see #getConditionForKeystroke
!    * @see #resetKeyboardActiond
!    */
!   public void unregisterKeyboardAction(KeyStroke aKeyStroke)
!   {
!   }
! 
! 
!   /**
!    * Reset all keyboard action registries.
!    *
!    * @see #registerKeyboardAction
!    * @see #unregisterKeyboardAction
!    * @see #getConditionForKeystroke
!    */
!   public void resetKeyboardActions()
!   {
!     if (inputMap_whenFocused != null)
!       inputMap_whenFocused.clear();
!     if (inputMap_whenAncestorOfFocused != null)
!       inputMap_whenAncestorOfFocused.clear();
!     if (inputMap_whenInFocusedWindow != null)
!       inputMap_whenInFocusedWindow.clear();
!     if (actionMap != null)
!       actionMap.clear();
!   }
! 
! 
!   /**
!    * Mark the described region of this component as dirty in the current
!    * {@link RepaintManager}. This will queue an asynchronous repaint using
!    * the system painting thread in the near future.
!    *
!    * @param tm ignored
!    * @param x coordinate of the region to mark as dirty
!    * @param y coordinate of the region to mark as dirty
!    * @param width dimension of the region to mark as dirty
!    * @param height dimension of the region to mark as dirty
!    */
!   public void repaint(long tm, int x, int y, int width, int height)
!   {
!     Rectangle dirty = new Rectangle(x, y, width, height);
!     Rectangle vis = getVisibleRect();
!     dirty = dirty.intersection(vis);
!     RepaintManager.currentManager(this).addDirtyRegion(this, dirty.x, dirty.y,
!                                                        dirty.width,
!                                                        dirty.height);
!   }
! 
!   /**
!    * Mark the described region of this component as dirty in the current
!    * {@link RepaintManager}. This will queue an asynchronous repaint using
!    * the system painting thread in the near future.
!    *
!    * @param r The rectangle to mark as dirty
!    */
!   public void repaint(Rectangle r)
!   {
!     repaint((long) 0, (int) r.getX(), (int) r.getY(), (int) r.getWidth(),
!             (int) r.getHeight());
!   }
! 
!   /**
!    * Request focus on the default component of this component's {@link
!    * FocusTraversalPolicy}.
!    *
!    * @return The result of {@link #requestFocus}
!    *
!    * @deprecated Use {@link #requestFocus()} on the default component provided from
!    * the {@link FocusTraversalPolicy} instead.
!    */
!   public boolean requestDefaultFocus()
!   {
!     return false;
!   }
! 
!   /**
!    * Queue a an invalidation and revalidation of this component, using 
!    * {@link RepaintManager#addInvalidComponent}.
!    */
!   public void revalidate()
!   {
!     invalidate();
!     RepaintManager.currentManager(this).addInvalidComponent(this);
!   }
! 
!   /**
!    * Calls <code>scrollRectToVisible</code> on the component's parent. 
!    * Components which can service this call should override.
!    *
!    * @param r The rectangle to make visible
!    */
!   public void scrollRectToVisible(Rectangle r)
!   {
!     Component p = getParent();
!     if (p instanceof JComponent)
!       ((JComponent) p).scrollRectToVisible(r);
!   }
! 
!   /**
!    * Set the value of the {@link #alignmentX} property.
!    *
!    * @param a The new value of the property
!    */
!   public void setAlignmentX(float a)
!   {
!     alignmentX = a;
!   }
! 
!   /**
!    * Set the value of the {@link #alignmentY} property.
!    *
!    * @param a The new value of the property
!    */
!   public void setAlignmentY(float a)
!   {
!     alignmentY = a;
!   }
! 
!   /**
!    * Set the value of the {@link #autoscrolls} property.
!    *
!    * @param a The new value of the property
!    */
!   public void setAutoscrolls(boolean a)
!   {
!     autoscrolls = a;
!   }
! 
!   /**
!    * Set the value of the {@link #debugGraphicsOptions} property.
!    *
!    * @param debugOptions The new value of the property
!    */
!   public void setDebugGraphicsOptions(int debugOptions)
!   {
!     debugGraphicsOptions = debugOptions;
!   }
! 
!   /**
!    * Set the value of the {@link #doubleBuffered} property.
!    *
!    * @param db The new value of the property
!    */
!   public void setDoubleBuffered(boolean db)
!   {
!     doubleBuffered = db;
!   }
! 
!   /**
!    * Set the value of the {@link #enabled} property, revalidate
!    * and repaint this component.
!    *
!    * @param enable The new value of the property
!    */
!   public void setEnabled(boolean enable)
!   {
!     boolean oldEnabled = isEnabled();
!     super.setEnabled(enable);
!     firePropertyChange("enabeld", oldEnabled, enable);
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #font} property, revalidate
!    * and repaint this component.
!    *
!    * @param f The new value of the property
!    */
!   public void setFont(Font f)
!   {
!     super.setFont(f);
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #background} property, revalidate
!    * and repaint this component.
!    *
!    * @param bg The new value of the property
!    */
!   public void setBackground(Color bg)
!   {
!     super.setBackground(bg);
!     revalidate();
!     repaint();
!   }
  
+   /**
+    * Set the value of the {@link #foreground} property, revalidate
+    * and repaint this component.
+    *
+    * @param fg The new value of the property
+    */
+   public void setForeground(Color fg)
+   {
+     super.setForeground(fg);
+     revalidate();
+     repaint();
+   }
+ 
+   /**
+    * Set the value of the {@link #maximumSize} property, revalidate
+    * and repaint this component.
+    *
+    * @param max The new value of the property
+    */
+   public void setMaximumSize(Dimension max)
+   {
+     Dimension oldMaximumSize = maximumSize;
+     maximumSize = max;
+     firePropertyChange("maximumSize", oldMaximumSize, maximumSize);
+     revalidate();
+     repaint();
+   }
+ 
+   /**
+    * Set the value of the {@link #minimumSize} property, revalidate
+    * and repaint this component.
+    *
+    * @param min The new value of the property
+    */
+   public void setMinimumSize(Dimension min)
+   {
+     Dimension oldMinimumSize = minimumSize;
+     minimumSize = min;
+     firePropertyChange("minimumSize", oldMinimumSize, minimumSize);
+     revalidate();
+     repaint();
+   }
+ 
+   /**
+    * Set the value of the {@link #preferredSize} property, revalidate
+    * and repaint this component.
+    *
+    * @param pref The new value of the property
+    */
+   public void setPreferredSize(Dimension pref)
+   {
+     Dimension oldPreferredSize = preferredSize;
+     preferredSize = pref;
+     firePropertyChange("preferredSize", oldPreferredSize, preferredSize);
+   }
+ 
+   /**
+    * Set the specified component to be the next component in the 
+    * focus cycle, overriding the {@link FocusTraversalPolicy} for
+    * this component.
+    *
+    * @param aComponent The component to set as the next focusable
+    *
+    * @deprecated Use FocusTraversalPolicy instead
+    */
+   public void setNextFocusableComponent(Component aComponent)
+   {
+   }
+ 
+   /**
+    * Set the value of the {@link #requestFocusEnabled} property.
+    *
+    * @param e The new value of the property
+    */
+   public void setRequestFocusEnabled(boolean e)
+   {
+     requestFocusEnabled = e;
+   }
+ 
+   /**
+    * Get the value of the {@link #transferHandler} property.
+    *
+    * @return The current value of the property
+    *
+    * @see ComponentUI#setTransferHandler
+    */
+ 
+   public TransferHandler getTransferHandler()
+   {
+     return transferHandler;
+   }
+ 
+   /**
+    * Set the value of the {@link #transferHandler} property.
+    *
+    * @param newHandler The new value of the property
+    *
+    * @see ComponentUI#getTransferHandler
+    */
+ 
+   public void setTransferHandler(TransferHandler newHandler)
+   {
+     if (transferHandler == newHandler)
+       return;
+ 
+     TransferHandler oldHandler = transferHandler;
+     transferHandler = newHandler;
+     firePropertyChange("transferHandler", oldHandler, newHandler);
+   }
+ 
+   /**
+    * Set the value of the {@link #opaque} property, revalidate and repaint
+    * this component.
+    *
+    * @param isOpaque The new value of the property
+    *
+    * @see ComponentUI#update
+    */
+   public void setOpaque(boolean isOpaque)
+   {
+     boolean oldOpaque = opaque;
+     opaque = isOpaque;
+     firePropertyChange("opaque", oldOpaque, opaque);
+     revalidate();
+     repaint();
+   }
+ 
+   /**
+    * Set the value of the visible property, and revalidate / repaint the
+    * component.
+    *
+    * @param v The new value of the property
+    */
+   public void setVisible(boolean v)
+   {
+     super.setVisible(v);
+     revalidate();
+     repaint();
+   }
+ 
+   /**
+    * Call {@link paint}. 
+    * 
+    * @param g The graphics context to paint into
+    */
+   public void update(Graphics g)
+   {
+     paint(g);
+   }
+ 
+   /**
+    * Get the value of the UIClassID property. This property should be a key
+    * in the {@link UIDefaults} table managed by {@link UIManager}, the
+    * value of which is the name of a class to load for the component's
+    * {@link ui} property.
+    *
+    * @return A "symbolic" name which will map to a class to use for the
+    * component's UI, such as <code>"ComponentUI"</code>
+    *
+    * @see #setUI
+    * @see #updateUI
+    */
+   public String getUIClassID()
+   {
+     return "ComponentUI";
+   }
+ 
+   /**
+    * Install a new UI delegate as the component's {@link ui} property. In
+    * the process, this will call {@link ComponentUI.uninstallUI} on any
+    * existing value for the {@link ui} property, and {@link
+    * ComponentUI.installUI} on the new UI delegate.
+    *
+    * @param newUI The new UI delegate to install
+    *
+    * @see #updateUI
+    * @see #getUIClassID
+    */
+   protected void setUI(ComponentUI newUI)
+   {
+     if (ui != null)
+       ui.uninstallUI(this);
+ 
+     ComponentUI oldUI = ui;
+     ui = newUI;
+ 
+     if (ui != null)
+       ui.installUI(this);
+ 
+     firePropertyChange("UI", oldUI, newUI);
+     
+     revalidate();
+     repaint();
+   }
+ 
+   /**
+    * This method should be overridden in subclasses. In JComponent, the
+    * method does nothing. In subclasses, it should a UI delegate
+    * (corresponding to the symbolic name returned from {@link
+    * getUIClassID}) from the {@link UIManager}, and calls {@link setUI}
+    * with the new delegate.
+    */
+   public void updateUI()
+   {
+     System.out.println("update UI not overwritten in class: " + this);
+   }
+ 
+   public static Locale getDefaultLocale()
+   {
+     return defaultLocale;
+   }
+   
+   public static void setDefaultLocale(Locale l)
+   {
+     defaultLocale = l;
+   }
+   
+   /**
+    * Returns the currently set input verifier for this component.
+    *
+    * @return the input verifier, or <code>null</code> if none
+    */
+   public InputVerifier getInputVerifier()
+   {
+     return inputVerifier;
+   }
+ 
+   /**
+    * Sets the input verifier to use by this component.
+    *
+    * @param verifier the input verifier, or <code>null</code>
+    */
+   public void setInputVerifier(InputVerifier verifier)
+   {
+     InputVerifier oldVerifier = inputVerifier;
+     inputVerifier = verifier;
+     firePropertyChange("inputVerifier", oldVerifier, verifier);
+   }
+ 
+   /**
+    * @since 1.3
+    */
+   public boolean getVerifyInputWhenFocusTarget()
+   {
+     return verifyInputWhenFocusTarget;
+   }
+ 
+   /**
+    * @since 1.3
+    */
+   public void setVerifyInputWhenFocusTarget(boolean verifyInputWhenFocusTarget)
+   {
+     if (this.verifyInputWhenFocusTarget == verifyInputWhenFocusTarget)
+       return;
+ 
+     this.verifyInputWhenFocusTarget = verifyInputWhenFocusTarget;
+     firePropertyChange("verifyInputWhenFocusTarget",
+ 		       ! verifyInputWhenFocusTarget,
+ 		       verifyInputWhenFocusTarget);
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JDesktopPane.java gcc-4.0.0/libjava/javax/swing/JDesktopPane.java
*** gcc-3.4.3/libjava/javax/swing/JDesktopPane.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/JDesktopPane.java	Tue Nov 30 23:58:53 2004
*************** this exception to your version of the li
*** 35,287 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
! import java.io.IOException;
! import java.io.ObjectOutputStream;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.swing.plaf.DesktopPaneUI;
  
  /**
!  * JDesktopPane
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
  public class JDesktopPane extends JLayeredPane implements Accessible
  {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleJDesktopPane
! 	 */
! 	protected class AccessibleJDesktopPane extends AccessibleJComponent {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJDesktopPane
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJDesktopPane(JDesktopPane component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJDesktopPane()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.DESKTOP_PANE;
! 		} // getAccessibleRole()
! 
! 
! 	} // AccessibleJDesktopPane
! 
! 
! 	//-------------------------------------------------------------
! 	// Constants --------------------------------------------------
! 	//-------------------------------------------------------------
! 	
! 	/**
! 	 * LIVE_DRAG_MODE
! 	 */
! 	public static int LIVE_DRAG_MODE = 0;
! 
! 	/**
! 	 * OUTLINE_DRAG_MODE
! 	 */
! 	public static int OUTLINE_DRAG_MODE = 1;
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "DesktopPaneUI";
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * selectedFrame
! 	 */
! 	private transient JInternalFrame selectedFrame;
  
!         /**
!          * desktopManager
!          */
! 	private transient DesktopManager desktopManager;
  
  
! 	/**
! 	 * dragMode
! 	 */
! 	private int dragMode;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JDesktopPane
! 	 */
! 	public JDesktopPane() {
! 		// TODO
! 	} // JDesktopPane()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * getUI
! 	 * @returns DesktopPaneUI
! 	 */
! 	public DesktopPaneUI getUI() {
! 		return (DesktopPaneUI) ui;
! 	} // getUI()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(DesktopPaneUI ui) {
! 		super.setUI(ui);
! 	} // setUI()
  
! 	/**
! 	 * setDragMode
! 	 * @param mode TODO
! 	 */
! 	public void setDragMode(int mode) {
! 		this.dragMode = mode;
! 		// TODO
! 	} // setDragMode()
  
! 	/**
! 	 * getDragMode
! 	 * @returns int
! 	 */
! 	public int getDragMode() {
! 		return dragMode;
! 	} // getDragMode()
  
! 	/**
! 	 * getDesktopManager
! 	 * @returns DesktopManager
! 	 */
! 	public DesktopManager getDesktopManager() {
! 		return desktopManager;
! 	} // getDesktopManager()
  
! 	/**
! 	 * setDesktopManager
! 	 * @param manager TODO
! 	 */
! 	public void setDesktopManager(DesktopManager manager) {
! 		this.desktopManager = manager;
! 		// TODO
! 	} // setDesktopManager()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((DesktopPaneUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * getAllFrames
! 	 * @returns JInternalFrame[]
! 	 */
! 	public JInternalFrame[] getAllFrames() {
! 		return null; // TODO
! 	} // getAllFrames()
  
! 	/**
! 	 * getSelectedFrame
! 	 * @returns JInternalFrame
! 	 */
! 	public JInternalFrame getSelectedFrame() {
! 		return null; // TODO
! 	} // getSelectedFrame()
  
! 	/**
! 	 * setSelectedFrame
! 	 * @param frame TODO
! 	 */
! 	public void setSelectedFrame(JInternalFrame frame) {
! 		// TODO
! 	} // setSelectedFrame()
  
! 	/**
! 	 * getAllFramesInLayer
! 	 * @param layer TODO
! 	 * @returns JInternalFrame[]
! 	 */
! 	public JInternalFrame[] getAllFramesInLayer(int layer) {
! 		return null; // TODO
! 	} // getAllFramesInLayer()
  
! 	/**
! 	 * isOpaque
! 	 * @returns boolean
! 	 */
! 	public boolean isOpaque() {
! 		return true;
! 	} // isOpaque()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJDesktopPane(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JDesktopPane
--- 35,332 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
! import java.awt.Component;
! import java.beans.PropertyVetoException;
! 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.swing.plaf.DesktopPaneUI;
  
  /**
!  * JDesktopPane is a container (usually for JInternalFrames) that simulates a
!  * desktop. Typically, the user will create JInternalFrames and place thme in
!  * a JDesktopPane. The user can then interact with JInternalFrames like they
!  * usually would with JFrames. The actions (minimize, maximize, close, etc)
!  * are done by using a DesktopManager that is associated with the
!  * JDesktopPane.
   */
  public class JDesktopPane extends JLayeredPane implements Accessible
  {
+   /** DOCUMENT ME! */
+   private static final long serialVersionUID = 766333777224038726L;
  
!   /**
!    * This specifies that when dragged, a JInternalFrame should be completely
!    * visible.
!    *
!    * @specnote final since 1.5.0.
!    */
!   public static final int LIVE_DRAG_MODE = 0;
  
!   /**
!    * This specifies that when dragged, a JInternalFrame should only be visible
!    * as an outline.
!    *
!    * @specnote final since 1.5.0.
!    */
!   public static final int OUTLINE_DRAG_MODE = 1;
  
+   /** The selected frame in the JDesktopPane. */
+   private transient JInternalFrame selectedFrame;
  
!   /** The JDesktopManager to use for acting on JInternalFrames. */
!   transient DesktopManager desktopManager;
  
!   /** The drag mode used by the JDesktopPane. */
!   private transient int dragMode = LIVE_DRAG_MODE;
  
!   /**
!    * AccessibleJDesktopPane
!    */
!   protected class AccessibleJDesktopPane extends AccessibleJComponent
!   {
!     /** DOCUMENT ME! */
!     private static final long serialVersionUID = 6079388927946077570L;
  
+     /**
+      * Constructor AccessibleJDesktopPane
+      */
+     protected AccessibleJDesktopPane()
+     {
+     }
  
!     /**
!      * getAccessibleRole
!      *
!      * @return AccessibleRole
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.DESKTOP_PANE;
!     }
!   }
  
+   /**
+    * Creates a new JDesktopPane object.
+    */
+   public JDesktopPane()
+   {
+     setLayout(null);
+     updateUI();
+   }
  
!   /**
!    * This method returns the UI used with the JDesktopPane.
!    *
!    * @return The UI used with the JDesktopPane.
!    */
!   public DesktopPaneUI getUI()
!   {
!     return (DesktopPaneUI) ui;
!   }
  
!   /**
!    * This method sets the UI used with the JDesktopPane.
!    *
!    * @param ui The UI to use with the JDesktopPane.
!    */
!   public void setUI(DesktopPaneUI ui)
!   {
!     super.setUI(ui);
!   }
  
+   /**
+    * This method sets the drag mode to use with the JDesktopPane.
+    *
+    * @param mode The drag mode to use.
+    *
+    * @throws IllegalArgumentException If the drag mode given is not
+    *         LIVE_DRAG_MODE or OUTLINE_DRAG_MODE.
+    */
+   public void setDragMode(int mode)
+   {
+     if ((mode != LIVE_DRAG_MODE) && (mode != OUTLINE_DRAG_MODE))
+       throw new IllegalArgumentException("Drag mode not valid.");
  
!     // FIXME: Unsupported mode.
!     if (mode == OUTLINE_DRAG_MODE)
!       {
!         // throw new IllegalArgumentException("Outline drag modes are unsupported.");
!         mode = LIVE_DRAG_MODE;
!       }
  
!     dragMode = mode;
!   }
  
!   /**
!    * This method returns the drag mode used with the JDesktopPane.
!    *
!    * @return The drag mode used with the JDesktopPane.
!    */
!   public int getDragMode()
!   {
!     return dragMode;
!   }
  
!   /**
!    * This method returns the DesktopManager used with the JDesktopPane.
!    *
!    * @return The DesktopManager to use with the JDesktopPane.
!    */
!   public DesktopManager getDesktopManager()
!   {
!     return desktopManager;
!   }
  
!   /**
!    * This method sets the DesktopManager to use with the JDesktopPane.
!    *
!    * @param manager The DesktopManager to use with the JDesktopPane.
!    */
!   public void setDesktopManager(DesktopManager manager)
!   {
!     desktopManager = manager;
!   }
  
!   /**
!    * This method restores the UI used with the JDesktopPane to the default.
!    */
!   public void updateUI()
!   {
!     setUI((DesktopPaneUI) UIManager.getUI(this));
!     invalidate();
!   }
  
!   /**
!    * This method returns a String identifier that allows the UIManager to know
!    * which class will act as JDesktopPane's UI.
!    *
!    * @return A String identifier for the UI class to use.
!    */
!   public String getUIClassID()
!   {
!     return "DesktopPaneUI";
!   }
  
!   /**
!    * This method returns all JInternalFrames that are in the JDesktopPane.
!    *
!    * @return All JInternalFrames that are in the JDesktopPane.
!    */
!   public JInternalFrame[] getAllFrames()
!   {
!     return getFramesFromComponents(getComponents());
!   }
  
!   /**
!    * This method returns the currently selected frame in the JDesktopPane.
!    *
!    * @return The currently selected frame in the JDesktopPane.
!    */
!   public JInternalFrame getSelectedFrame()
!   {
!     return selectedFrame;
!   }
  
!   /**
!    * This method sets the selected frame in the JDesktopPane.
!    *
!    * @param frame The selected frame in the JDesktopPane.
!    */
!   public void setSelectedFrame(JInternalFrame frame)
!   {
!     if (selectedFrame != null)
!       {
! 	try
! 	  {
! 	    selectedFrame.setSelected(false);
! 	  }
! 	catch (PropertyVetoException e)
! 	  {
! 	  }
!       }
!     selectedFrame = null;
  
!     try
!       {
! 	if (frame != null)
! 	  frame.setSelected(true);
  
! 	selectedFrame = frame;
!       }
!     catch (PropertyVetoException e)
!       {
!       }
!   }
  
!   /**
!    * This method returns all the JInternalFrames in the given layer.
!    *
!    * @param layer The layer to grab frames in.
!    *
!    * @return All JInternalFrames in the given layer.
!    */
!   public JInternalFrame[] getAllFramesInLayer(int layer)
!   {
!     return getFramesFromComponents(getComponentsInLayer(layer));
!   }
  
!   /**
!    * This method always returns true to indicate that it is not transparent.
!    *
!    * @return true.
!    */
!   public boolean isOpaque()
!   {
!     return true;
!   }
  
!   /**
!    * This method returns a String that describes the JDesktopPane.
!    *
!    * @return A String that describes the JDesktopPane.
!    */
!   protected String paramString()
!   {
!     return "JDesktopPane";
!   }
  
!   /**
!    * This method returns all the JInternalFrames in the given Component array.
!    *
!    * @param components An array to search for JInternalFrames in.
!    *
!    * @return An array of JInternalFrames found in the Component array.
!    */
!   private static JInternalFrame[] getFramesFromComponents(Component[] components)
!   {
!     int count = 0;
  
!     for (int i = 0; i < components.length; i++)
! 	if (components[i] instanceof JInternalFrame)
! 	  count++;
! 	  
!     JInternalFrame[] value = new JInternalFrame[count];
!     for (int i = 0, j = 0; i < components.length && j != count; i++)
!       if (components[i] instanceof JInternalFrame)
! 	value[j++] = (JInternalFrame) components[i];
!     return value;
!   }
  
+   /**
+    * getAccessibleContext
+    *
+    * @return AccessibleContext
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleJDesktopPane();
  
!     return accessibleContext;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JDialog.java gcc-4.0.0/libjava/javax/swing/JDialog.java
*** gcc-3.4.3/libjava/javax/swing/JDialog.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JDialog.java	Tue Nov 30 23:58:53 2004
***************
*** 1,5 ****
  /* JDialog.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JDialog.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,271 ****
  
  package javax.swing;
  
- import java.awt.BorderLayout;
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Dialog;
  import java.awt.Dimension;
  import java.awt.Frame;
  import java.awt.Graphics;
  import java.awt.LayoutManager;
- import java.awt.event.KeyEvent;
  import java.awt.event.WindowEvent;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  
  /**
!  * Unlike JComponent derivatives, JDialog inherits from
!  * java.awt.Dialog. But also lets a look-and-feel component to its work.
   *
!  * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
! public class JDialog extends Dialog implements Accessible
  {
!     public final static int HIDE_ON_CLOSE        = 0;
!     public final static int DISPOSE_ON_CLOSE     = 1;
!     public final static int DO_NOTHING_ON_CLOSE  = 2;
  
!     protected  AccessibleContext accessibleContext;
  
!     private int close_action = HIDE_ON_CLOSE;    
  
!     /***************************************************
!      *
!      *
!      *  constructors
!      *
!      *
!      *************/
  
!     JDialog(Frame owner)
!     {
! 	this(owner, "dialog");
!     }
!     
!     JDialog(Frame owner,
! 	    String s)
!     {
! 	this(owner, s, true);
!     }
!     
!   JDialog(Frame owner,
! 	  String s,
! 	  boolean modeld)
!     {
! 	super(owner, s, modeld);
!     }
  
!   JDialog(Frame owner,
! 	  //  String s,
! 	  boolean modeld)
!     {
! 	super(owner, "JDialog", modeld);
!     }
!   JDialog(Dialog owner)
    {
!       this(owner, "dialog");
    }
-     
-     JDialog(Dialog owner,
- 	    String s)
-     {
- 	this(owner, s, true);
-     }
-     
-   JDialog(Dialog owner,
- 	  String s,
- 	  boolean modeld)
-     {
- 	super(owner, s, modeld);
-     }
  
  
!     /***************************************************
!      *
!      *
!      *  methods, this part is shared with JDialog, JFrame
!      *
!      *
!      *************/
  
!   
!     private boolean checking;
!     protected  JRootPane         rootPane;
  
!     void setLocationRelativeTo(Component c)
!     {
!     }
  
  
!     protected  void frameInit()
!     {
!       super.setLayout(new BorderLayout(1, 1));
!       getRootPane(); // will do set/create
!     }
!   
    public Dimension getPreferredSize()
    {
      Dimension d = super.getPreferredSize();
      return d;
    }
  
!     JMenuBar getJMenuBar()
!     {    return getRootPane().getJMenuBar();   }
!     
!     void setJMenuBar(JMenuBar menubar)
!     {    getRootPane().setJMenuBar(menubar); }
!     
  
!   public  void setLayout(LayoutManager manager)
!   {    super.setLayout(manager);  }
  
!     void setLayeredPane(JLayeredPane layeredPane) 
!     {   getRootPane().setLayeredPane(layeredPane);   }
!   
!     JLayeredPane getLayeredPane()
!     {   return getRootPane().getLayeredPane();     }
!   
!     JRootPane getRootPane()
!     {
! 	if (rootPane == null)
! 	    setRootPane(createRootPane());
! 	return rootPane;          
!     }
  
!     void setRootPane(JRootPane root)
!     {
! 	if (rootPane != null)
! 	    remove(rootPane);
! 	    
! 	rootPane = root; 
! 	add(rootPane, BorderLayout.CENTER);
!     }
  
!     JRootPane createRootPane()
!     {   return new JRootPane();    }
  
!     Container getContentPane()
!     {    return getRootPane().getContentPane();     }
  
!     void setContentPane(Container contentPane)
!     {    getRootPane().setContentPane(contentPane);    }
!   
!     Component getGlassPane()
!     {    return getRootPane().getGlassPane();   }
!   
!     void setGlassPane(Component glassPane)
!     {   getRootPane().setGlassPane(glassPane);   }
  
!     
!     protected  void addImpl(Component comp, Object constraints, int index)
!     {	super.addImpl(comp, constraints, index);    }
  
  
!     public void remove(Component comp)
!     {   getContentPane().remove(comp);  }
!   
!     protected  boolean isRootPaneCheckingEnabled()
!     {    return checking;        }
  
  
!     protected  void setRootPaneCheckingEnabled(boolean enabled)
!     { checking = enabled;  }
  
  
!     public void update(Graphics g)
!     {   paint(g);  }
  
!     protected  void processKeyEvent(KeyEvent e)
!     {	super.processKeyEvent(e);    }
  
!     /////////////////////////////////////////////////////////////////////////////////
!   
  
!     protected  void processWindowEvent(WindowEvent e)
!     {
! 	//	System.out.println("PROCESS_WIN_EV-1: " + e);
! 	super.processWindowEvent(e); 
! 	//	System.out.println("PROCESS_WIN_EV-2: " + e);
! 	switch (e.getID())
  	    {
! 	    case WindowEvent.WINDOW_CLOSING:
! 		{
! 		    switch(close_action)
! 			{
! 			case DISPOSE_ON_CLOSE:
! 			    {
! 				System.out.println("user requested dispose on close");
! 				dispose();
! 				break;
! 			    }
! 			case HIDE_ON_CLOSE:
! 			    {
! 				setVisible(false);
! 				break;
! 			    }
! 			case DO_NOTHING_ON_CLOSE:
! 			    break;
! 			}
! 		    break;
! 		}
! 		
! 	    case WindowEvent.WINDOW_CLOSED:
! 	    case WindowEvent.WINDOW_OPENED:
! 	    case WindowEvent.WINDOW_ICONIFIED:
! 	    case WindowEvent.WINDOW_DEICONIFIED:
! 	    case WindowEvent.WINDOW_ACTIVATED:
! 	    case WindowEvent.WINDOW_DEACTIVATED:
  		break;
  	    }
!     }   
!  
  
!     void setDefaultCloseOperation(int operation)
!     {  close_action = operation;   }
  
!     protected  String paramString()
!     {   return "JDialog";     }
  
!     public AccessibleContext getAccessibleContext()
!     {
! 	return null;
!     }  
  }
--- 38,561 ----
  
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Dialog;
  import java.awt.Dimension;
  import java.awt.Frame;
  import java.awt.Graphics;
+ import java.awt.GraphicsConfiguration;
+ import java.awt.IllegalComponentStateException;
  import java.awt.LayoutManager;
  import java.awt.event.WindowEvent;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  
  /**
!  * Unlike JComponent derivatives, JDialog inherits from java.awt.Dialog. But
!  * also lets a look-and-feel component to its work.
   *
!  * @author Ronald Veldema (rveldema_AT_cs.vu.nl)
   */
! public class JDialog extends Dialog implements Accessible, WindowConstants,
!                                                RootPaneContainer
  {
!   private static final long serialVersionUID = -864070866424508218L;
  
!   /** DOCUMENT ME! */
!   protected AccessibleContext accessibleContext;
  
!   /** The single RootPane in the Dialog. */
!   protected JRootPane rootPane;
  
!   /** Whether checking is enabled on the RootPane */
!   protected boolean rootPaneCheckingEnabled = true;
  
!   /** The default action taken when closed. */
!   private int close_action = HIDE_ON_CLOSE;
!   
!   /** Whether JDialogs are decorated by the Look and Feel. */
!   private static boolean decorated;
  
!   /**
!    * Creates a new non-modal JDialog with no title 
!    * using a shared Frame as the owner.
!    */
!   public JDialog()
    {
!     this(SwingUtilities.getOwnerFrame(), "", false, null);
    }
  
+   /**
+    * Creates a new non-modal JDialog with no title
+    * using the given owner.
+    *
+    * @param owner The owner of the JDialog.
+    */
+   public JDialog(Dialog owner)
+   {
+     this(owner, "", false, null);
+   }
  
!   /**
!    * Creates a new JDialog with no title using the
!    * given modal setting and owner.
!    *
!    * @param owner The owner of the JDialog.
!    * @param modal Whether the JDialog is modal.
!    */
!   public JDialog(Dialog owner, boolean modal)
!   {
!     this(owner, "", modal, null);
!   }
  
!   /**
!    * Creates a new non-modal JDialog using the 
!    * given title and owner.
!    *
!    * @param owner The owner of the JDialog.
!    * @param title The title of the JDialog.
!    */
!   public JDialog(Dialog owner, String title)
!   {
!     this(owner, title, false, null);
!   }
  
!   /**
!    * Creates a new JDialog using the given modal 
!    * settings, title, and owner.
!    *
!    * @param owner The owner of the JDialog.
!    * @param title The title of the JDialog.
!    * @param modal Whether the JDialog is modal.
!    */
!   public JDialog(Dialog owner, String title, boolean modal)
!   {
!     this(owner, title, modal, null);
!   }
  
+   /**
+    * Creates a new JDialog using the given modal 
+    * settings, title, owner and graphics configuration.
+    *
+    * @param owner The owner of the JDialog.
+    * @param title The title of the JDialog.
+    * @param modal Whether the JDialog is modal.
+    * @param gc The Graphics Configuration to use.
+    */
+   public JDialog(Dialog owner, String title, boolean modal,
+                  GraphicsConfiguration gc)
+   {
+     super(owner, title, modal, gc);
+     dialogInit();
+   }
  
!   /**
!    * Creates a new non-modal JDialog with no title
!    * using the given owner.
!    *
!    * @param owner The owner of the JDialog.
!    */
!   public JDialog(Frame owner)
!   {
!     this(owner, "", false, null);
!   }
! 
!   /**
!    * Creates a new JDialog with no title using the
!    * given modal setting and owner.
!    *
!    * @param owner The owner of the JDialog.
!    * @param modal Whether the JDialog is modal.
!    */
!   public JDialog(Frame owner, boolean modal)
!   {
!     this(owner, "", modal, null);
!   }
! 
!   /**
!    * Creates a new non-modal JDialog using the 
!    * given title and owner.
!    *
!    * @param owner The owner of the JDialog.
!    * @param title The title of the JDialog.
!    */
!   public JDialog(Frame owner, String title)
!   {
!     this(owner, title, false, null);
!   }
! 
!   /**
!    * Creates a new JDialog using the given modal 
!    * settings, title, and owner.
!    *
!    * @param owner The owner of the JDialog.
!    * @param title The title of the JDialog.
!    * @param modal Whether the JDialog is modal.
!    */
!   public JDialog(Frame owner, String title, boolean modal)
!   {
!     this(owner, title, modal, null);
!   }
! 
!   /**
!    * Creates a new JDialog using the given modal 
!    * settings, title, owner and graphics configuration.
!    *
!    * @param owner The owner of the JDialog.
!    * @param title The title of the JDialog.
!    * @param modal Whether the JDialog is modal.
!    * @param gc The Graphics Configuration to use.
!    */
!   public JDialog(Frame owner, String title, boolean modal,
!                  GraphicsConfiguration gc)
!   {
!     super((owner == null) ? SwingUtilities.getOwnerFrame() : owner, 
!           title, modal, gc);
!     dialogInit();
!   }
! 
!   /**
!    * This method is called to initialize the 
!    * JDialog. It sets the layout used, the locale, 
!    * and creates the RootPane.
!    */
!   protected void dialogInit()
!   {
!     // FIXME: Do a check on GraphicsEnvironment.isHeadless()
!     setRootPaneCheckingEnabled(false);
!     setLocale(JComponent.getDefaultLocale());       
!     getRootPane(); // will do set/create  
!     setRootPaneCheckingEnabled(true);    
!     invalidate();
! 
!   }
! 
!   /**
!    * This method returns whether JDialogs will have their
!    * window decorations provided by the Look and Feel.
!    *
!    * @return Whether the window decorations are Look and Feel provided.
!    */
!   public static boolean isDefaultLookAndFeelDecorated()
!   {
!     return decorated;
!   }
! 
!   /**
!    * This method sets whether JDialogs will have their
!    * window decorations provided by the Look and Feel.
!    *
!    * @param defaultLookAndFeelDecorated Whether the window
!    * decorations are Look and Feel provided.
!    */
!   public static void setDefaultLookAndFeelDecorated(boolean defaultLookAndFeelDecorated)
!   {
!     decorated = defaultLookAndFeelDecorated;
!   }
! 
!   /**
!    * This method returns the preferred size of 
!    * the JDialog.
!    *
!    * @return The preferred size.
!    */
    public Dimension getPreferredSize()
    {
      Dimension d = super.getPreferredSize();
      return d;
    }
  
!   /**
!    * This method returns the JMenuBar used
!    * in this JDialog.
!    *
!    * @return The JMenuBar in the JDialog.
!    */
!   public JMenuBar getJMenuBar()
!   {
!     return getRootPane().getJMenuBar();
!   }
  
!   /**
!    * This method sets the JMenuBar used 
!    * in this JDialog.
!    *
!    * @param menubar The JMenuBar to use.
!    */
!   public void setJMenuBar(JMenuBar menubar)
!   {
!     getRootPane().setJMenuBar(menubar);
!   }
  
!   /**
!    * This method sets the LayoutManager used in the JDialog.
!    * This method will throw an Error if rootPaneChecking is 
!    * enabled.
!    *
!    * @param manager The LayoutManager to use.
!    */
!   public void setLayout(LayoutManager manager)
!   {
!     if (isRootPaneCheckingEnabled())
!       throw new Error("rootPaneChecking is enabled - cannot set layout.");
!     super.setLayout(manager);
!   }
  
!   /**
!    * This method sets the JLayeredPane used in the JDialog.
!    * If the given JLayeredPane is null, then this method
!    * will throw an Error.
!    *
!    * @param layeredPane The JLayeredPane to use.
!    */
!   public void setLayeredPane(JLayeredPane layeredPane)
!   {
!     if (layeredPane == null)
!       throw new IllegalComponentStateException("layeredPane cannot be null.");
!     getRootPane().setLayeredPane(layeredPane);
!   }
  
!   /**
!    * This method returns the JLayeredPane used with this JDialog.
!    *
!    * @return The JLayeredPane used with this JDialog.
!    */
!   public JLayeredPane getLayeredPane()
!   {
!     return getRootPane().getLayeredPane();
!   }
  
!   /**
!    * This method returns the JRootPane used with this JDialog.
!    *
!    * @return The JRootPane used with this JDialog.
!    */
!   public JRootPane getRootPane()
!   {
!     if (rootPane == null)
!       setRootPane(createRootPane());
!     return rootPane;
!   }
  
!   /**
!    * This method sets the JRootPane used with this JDialog.
!    *
!    * @param root The JRootPane to use.
!    */
!   protected void setRootPane(JRootPane root)
!   {
!     if (rootPane != null)
!       remove(rootPane);
  
!     rootPane = root;
!     rootPane.show();
!     add(rootPane);
!   }
  
+   /**
+    * This method creates a new JRootPane.
+    *
+    * @return A new JRootPane.
+    */
+   protected JRootPane createRootPane()
+   {
+     return new JRootPane();
+   }
  
!   /**
!    * This method returns the ContentPane
!    * in the JRootPane.
!    *
!    * @return The ContentPane in the JRootPane.
!    */
!   public Container getContentPane()
!   {
!     return getRootPane().getContentPane();
!   }
  
+   /**
+    * This method sets the ContentPane to use with this
+    * JDialog. If the ContentPane given is null, this method
+    * will throw an exception.
+    *
+    * @param contentPane The ContentPane to use with the JDialog.
+    */
+   public void setContentPane(Container contentPane)
+   {
+     if (contentPane == null)
+       throw new IllegalComponentStateException("contentPane cannot be null.");
+     getRootPane().setContentPane(contentPane);
+   }
  
!   /**
!    * This method returns the GlassPane for this JDialog.
!    *
!    * @return The GlassPane for this JDialog.
!    */
!   public Component getGlassPane()
!   {
!     return getRootPane().getGlassPane();
!   }
  
+   /**
+    * This method sets the GlassPane for this JDialog.
+    *
+    * @param glassPane The GlassPane for this JDialog.
+    */
+   public void setGlassPane(Component glassPane)
+   {
+     getRootPane().setGlassPane(glassPane);
+   }
  
!   /**
!    * This method is called when a component is added to the 
!    * the JDialog. Calling this method with rootPaneCheckingEnabled
!    * will cause an Error to be thrown.
!    *
!    * @param comp The component to add.
!    * @param constraints The constraints.
!    * @param index The position of the component.
!    */
!   protected void addImpl(Component comp, Object constraints, int index)
!   {
!     if (isRootPaneCheckingEnabled())
!       throw new Error("rootPaneChecking is enabled - adding components disallowed.");
!     super.addImpl(comp, constraints, index);
!   }
  
!   /**
!    * This method removes a component from the JDialog.
!    *
!    * @param comp The component to remove.
!    */
!   public void remove(Component comp)
!   {
!     // The path changes if the component == root.
!     if (comp == rootPane)
!       super.remove(rootPane);
!     else 
!       getContentPane().remove(comp);
!   }
  
!   /**
!    * This method returns whether rootPane checking is enabled.
!    *
!    * @return Whether rootPane checking is enabled.
!    */
!   protected boolean isRootPaneCheckingEnabled()
!   {
!     return rootPaneCheckingEnabled;
!   }
  
!   /**
!    * This method sets whether rootPane checking is enabled.
!    *
!    * @param enabled Whether rootPane checking is enabled.
!    */
!   protected void setRootPaneCheckingEnabled(boolean enabled)
!   {
!     rootPaneCheckingEnabled = enabled;
!   }
! 
!   /**
!    * This method simply calls paint and returns.
!    *
!    * @param g The Graphics object to paint with.
!    */
!   public void update(Graphics g)
!   {
!     paint(g);
!   }
!   
!   
!   /**
!    * This method handles window events. This allows the JDialog
!    * to honour its default close operation.
!    *
!    * @param e The WindowEvent.
!    */
!   protected void processWindowEvent(WindowEvent e)
!   {
!     //	System.out.println("PROCESS_WIN_EV-1: " + e);
!     super.processWindowEvent(e);
!     //	System.out.println("PROCESS_WIN_EV-2: " + e);
!     switch (e.getID())
!       {
!       case WindowEvent.WINDOW_CLOSING:
!         {
! 	  switch (getDefaultCloseOperation())
  	    {
! 	    case DISPOSE_ON_CLOSE:
! 	      {
! 		dispose();
! 		break;
! 	      }
! 	    case HIDE_ON_CLOSE:
! 	      {
! 		setVisible(false);
  		break;
+ 	      }
+ 	    case DO_NOTHING_ON_CLOSE:
+ 	      break;
  	    }
! 	  break;
!         }
!       case WindowEvent.WINDOW_CLOSED:
!       case WindowEvent.WINDOW_OPENED:
!       case WindowEvent.WINDOW_ICONIFIED:
!       case WindowEvent.WINDOW_DEICONIFIED:
!       case WindowEvent.WINDOW_ACTIVATED:
!       case WindowEvent.WINDOW_DEACTIVATED:
! 	break;
!       }
!   }
  
!   /**
!    * This method sets the action to take
!    * when the JDialog is closed.
!    *
!    * @param operation The action to take.
!    */
!   public void setDefaultCloseOperation(int operation)
!   {
!     if (operation == DO_NOTHING_ON_CLOSE ||
!     	operation == HIDE_ON_CLOSE ||
! 	operation == DISPOSE_ON_CLOSE)
!       close_action = operation;
!     else
!       throw new IllegalArgumentException("Default close operation must be one of DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE, or DISPOSE_ON_CLOSE");
!   }
  
!   /**
!    * This method returns the action taken when
!    * the JDialog is closed.
!    *
!    * @return The action to take.
!    */
!   public int getDefaultCloseOperation()
!   {
!     return close_action;
!   }
  
!   /**
!    * This method returns a String describing the JDialog.
!    *
!    * @return A String describing the JDialog.
!    */
!   protected String paramString()
!   {
!     return "JDialog";
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     return null;
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JEditorPane.java gcc-4.0.0/libjava/javax/swing/JEditorPane.java
*** gcc-3.4.3/libjava/javax/swing/JEditorPane.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JEditorPane.java	Wed Feb 16 20:02:24 2005
***************
*** 1,5 ****
! /* JEditorPane.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JEditorPane.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing;
*** 40,223 ****
  
  import java.awt.Dimension;
  import java.awt.event.KeyEvent;
  import java.io.InputStream;
  import java.net.URL;
  import javax.accessibility.AccessibleContext;
- import javax.swing.text.EditorKit;
- import javax.swing.text.JTextComponent;
- import javax.swing.text.PlainEditorKit;
  import javax.swing.event.HyperlinkEvent;
  import javax.swing.event.HyperlinkListener;
  
  public class JEditorPane extends JTextComponent
  {
!     URL page_url;
!     EditorKit kit;
!     String ctype = "text/plain";
!     boolean focus_root;
!     boolean manages_focus;
  
  
!     public JEditorPane()
!     {
!     }
  
!     public JEditorPane(String url)
!     {
! 	this();
! 	setPage(url);
!     }
!     
!     public JEditorPane(String type, String text)
!     {
! 	ctype = text;
! 	setText(text);
!     }
!     
!     public JEditorPane(URL url)
!     {
! 	setPage(url);
!     }
  
!     void addHyperlinkListener(HyperlinkListener listener)
!     {  }
!     
!     protected  EditorKit createDefaultEditorKit()
!     {	return new PlainEditorKit();    }
!     
!     static EditorKit createEditorKitForContentType(String type)
!     {	return new PlainEditorKit();     }
!     
!   void fireHyperlinkUpdate(HyperlinkEvent e)
    {
    }
  
    public AccessibleContext getAccessibleContext()
!   {      return null;  }
  
!   String getContentType()
!     {  return ctype;   }
  
!   EditorKit getEditorKit()
!     {  return kit;    }
!     
!   static String getEditorKitClassNameForContentType(String type)
!     { return "text/plain";  }
!   
!   EditorKit getEditorKitForContentType(String type)
!     { return kit;  }
!     
!     public Dimension getPreferredSize()
!     {
! 	//Returns the preferred size for the JEditorPane.  
! 	return super.getPreferredSize();
!     }
  
    public boolean getScrollableTracksViewportHeight()
!     {  return false;  }
    public boolean getScrollableTracksViewportWidth()
!     {  return false;  }
  
!   URL getPage()
!     { return page_url;  }
  
!   protected  InputStream getStream(URL page)
!     {	
! 	try {
! 	    return page.openStream();    
! 	} catch (Exception e) {
! 	    System.out.println("Hhmmm, failed to open stream: " + e);
! 	}	
! 	return null;
!     }
  
!     public String getText()
!     { return super.getText();    }
!     
!     public String getUIClassID()
!     {    return "JEditorPane";  }
  
!     public boolean isFocusCycleRoot()
!     { return focus_root;    }
  
!     public boolean isManagingFocus()
!     { return manages_focus;  }
  
!   protected  String paramString()
!     { return "JEditorPane";  }
!     
!   protected  void processComponentKeyEvent(KeyEvent e)
!     {
! 	//Overridden to handle processing of tab/shift tab. 
!     }
!     
    protected void processKeyEvent(KeyEvent e)
!     {
! 	//Make sure that TAB and Shift-TAB events get consumed, so that awt doesn't attempt focus traversal.  
!     }
!     
!     void read(InputStream in, Object desc)
!     {
! 	//This method initializes from a stream. 
!     }
!     
!     static void registerEditorKitForContentType(String type, String classname)
!     {
! 	//Establishes the default bindings of type to classname. 
!     }
!     
!     static void registerEditorKitForContentType(String type, String classname, ClassLoader loader)
!     {
! 	//Establishes the default bindings of type to classname.  
!     }
!     
!     void removeHyperlinkListener(HyperlinkListener listener)
!     {
! 	//Removes a hyperlink listener.  
!     }
!     
!     void replaceSelection(String content)
!     {
! 	//Replaces the currently selected content with new content represented by the given string. 
!     }
!     
!     protected  void scrollToReference(String reference)
!     {
! 	//Scrolls the view to the given reference location (that is, the value returned by the UL.getRef method for the URL being displayed).  
!     }
!     
!     void setContentType(String type)
!     {
! 	ctype = type;
! 	invalidate();
! 	repaint();
!     }
!     
!     void setEditorKit(EditorKit kit)
!     {
! 	this.kit = kit;
! 	invalidate();
! 	repaint();
!     }
!     
!     void setEditorKitForContentType(String type, EditorKit k)
!     {
! 	ctype = type;
! 	setEditorKit(k);
!     }
!   
!   void setPage(String url)
!     {
! 	//  Sets the current URL being displayed.  
!     }
!     
!     void setPage(URL page)
!     {
! 	//    Sets the current URL being displayed.  
!     }
!     
!     public void setText(String t)
!     {	
! 	super.setText(t);
!     }
! } // class JEditorPane
--- 40,348 ----
  
  import java.awt.Dimension;
  import java.awt.event.KeyEvent;
+ import java.io.IOException;
  import java.io.InputStream;
  import java.net.URL;
+ 
  import javax.accessibility.AccessibleContext;
  import javax.swing.event.HyperlinkEvent;
  import javax.swing.event.HyperlinkListener;
+ import javax.swing.text.BadLocationException;
+ import javax.swing.text.DefaultEditorKit;
+ import javax.swing.text.EditorKit;
+ import javax.swing.text.JTextComponent;
+ 
  
  public class JEditorPane extends JTextComponent
  {
!   private static final long serialVersionUID = 3140472492599046285L;
!   
!   private URL page;
!   private EditorKit editorKit;
!   
!   boolean focus_root;
!   boolean manages_focus;
  
+   public JEditorPane()
+   {
+     setEditorKit(createDefaultEditorKit());
+   }
  
!   public JEditorPane(String url) throws IOException
!   {
!     this(new URL(url));
!   }
  
!   public JEditorPane(String type, String text)
!   {
!     setEditorKit(createEditorKitForContentType(type));
!     setText(text);
!   }
  
!   public JEditorPane(URL url) throws IOException
!   {
!     this();
!     setPage(url);
!   }
! 
!   protected EditorKit createDefaultEditorKit()
!   {
!     return new DefaultEditorKit();
!   }
! 
!   public static EditorKit createEditorKitForContentType(String type)
!   {
!     return new DefaultEditorKit();
!   }
! 
!   /**
!    * Sends a given <code>HyperlinkEvent</code> to all registered listeners.
!    *
!    * @param event the event to send
!    */
!   public void fireHyperlinkUpdate(HyperlinkEvent event)
    {
+     HyperlinkListener[] listeners = getHyperlinkListeners();
+ 
+     for (int index = 0; index < listeners.length; ++index)
+        listeners[index].hyperlinkUpdate(event);
    }
  
    public AccessibleContext getAccessibleContext()
!   {
!     return null;
!   }
  
!   public final String getContentType()
!   {
!     return getEditorKit().getContentType();
!   }
  
!   public EditorKit getEditorKit()
!   {
!     return editorKit;
!   }
! 
!   public static String getEditorKitClassNameForContentType(String type)
!   {
!     return "text/plain";
!   }
! 
!   public EditorKit getEditorKitForContentType(String type)
!   {
!     return editorKit;
!   }
! 
!   /**
!    * Returns the preferred size for the JEditorPane.  
!    */
!   public Dimension getPreferredSize()
!   {
!     return super.getPreferredSize();
!   }
  
    public boolean getScrollableTracksViewportHeight()
!   {
!     return false;
!   }
! 
    public boolean getScrollableTracksViewportWidth()
!   {
!     return false;
!   }
  
!   public URL getPage()
!   {
!     return page;
!   }
  
!   protected InputStream getStream(URL page)
!     throws IOException
!   {
!     return page.openStream();
!   }
  
!   public String getText()
!   {
!     return super.getText();
!   }
  
!   public String getUIClassID()
!   {
!     return "EditorPaneUI";
!   }
  
!   public boolean isFocusCycleRoot()
!   {
!     return focus_root;
!   }
  
!   public boolean isManagingFocus()
!   {
!     return manages_focus;
!   }
! 
!   protected String paramString()
!   {
!     return "JEditorPane";
!   }
! 
!   /**
!    * Overridden to handle processing of tab/shift tab. 
!    */
!   protected void processComponentKeyEvent(KeyEvent e)
!   {
!   }
! 
!   /**
!    * Make sure that TAB and Shift-TAB events get consumed,
!    * so that awt doesn't attempt focus traversal.  
!    */
    protected void processKeyEvent(KeyEvent e)
!   {
!   }
! 
!   /**
!    * This method initializes from a stream. 
!    */
!   public void read(InputStream in, Object desc)
!     throws IOException
!   {
!   }
! 
!   /**
!    * Establishes the default bindings of type to classname. 
!    */
!   public static void registerEditorKitForContentType(String type,
!                                                      String classname)
!   {
!   }
! 
!   /**
!    * Establishes the default bindings of type to classname.
!    */
!   public static void registerEditorKitForContentType(String type,
!                                                      String classname,
!                                                      ClassLoader loader)
!   {
!   }
! 
!   /**
!    * Replaces the currently selected content with new content represented
!    * by the given string.
!    */
!   public void replaceSelection(String content)
!   {
!   }
! 
!   /**
!    * Scrolls the view to the given reference location (that is, the value
!    * returned by the UL.getRef method for the URL being displayed).
!    */
!   public void scrollToReference(String reference)
!   {
!   }
! 
!   public final void setContentType(String type)
!   {
!     if (editorKit != null
! 	&& editorKit.getContentType().equals(type))
!       return;
!     	      
!     EditorKit kit = getEditorKitForContentType(type);
! 	    	
!     if (kit != null)
!       setEditorKit(kit);
!   }
! 
!   public void setEditorKit(EditorKit newValue)
!   {
!     if (editorKit == newValue)
!       return;
!     	
!     if (editorKit != null)
!       editorKit.deinstall(this);
! 	    	    
!     EditorKit oldValue = editorKit;
!     editorKit = newValue;
! 			    	
!     if (editorKit != null)
!       {
! 	editorKit.install(this);
! 	setDocument(editorKit.createDefaultDocument());
!       }
! 				    	    
!     firePropertyChange("editorKit", oldValue, newValue);
!     invalidate();
!     repaint();
!   }
! 
!   public void setEditorKitForContentType(String type, EditorKit k)
!   {
!     // FIXME: editorKitCache.put(type, kit);
!   }
! 
!   /**
!    * Sets the current URL being displayed.  
!    */
!   public void setPage(String url) throws IOException
!   {
!     setPage(new URL(url));
!   }
! 
!   /**
!    * Sets the current URL being displayed.  
!    */
!   public void setPage(URL page) throws IOException
!   {
!     if (page == null)
!       throw new IOException("invalid url");
! 
!     try
!       {
! 	this.page = page;
! 	getEditorKit().read(page.openStream(), getDocument(), 0);
!       }
!     catch (BadLocationException e)
!       {
! 	// Ignored. '0' is always a valid offset.
!       }
!   }
! 
!   public void setText(String t)
!   {
!     super.setText(t);
!   }
! 
!   /**
!    * Add a <code>HyperlinkListener</code> object to this editor pane.
!    *
!    * @param listener the listener to add
!    */
!   public void addHyperlinkListener(HyperlinkListener listener)
!   {
!     listenerList.add(HyperlinkListener.class, listener);
!   }
! 
!   /**
!    * Removes a <code>HyperlinkListener</code> object to this editor pane.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeHyperlinkListener(HyperlinkListener listener)
!   {
!     listenerList.remove(HyperlinkListener.class, listener);
!   }
! 
!   /**
!    * Returns all added <code>HyperlinkListener</code> objects.
!    *
!    * @return array of listeners
!    *
!    * @since 1.4
!    */
!   public HyperlinkListener[] getHyperlinkListeners()
!   {
!     return (HyperlinkListener[]) getListeners(HyperlinkListener.class);
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JFileChooser.java gcc-4.0.0/libjava/javax/swing/JFileChooser.java
*** gcc-3.4.3/libjava/javax/swing/JFileChooser.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JFileChooser.java	Wed Feb 16 20:02:24 2005
***************
*** 1,5 ****
  /* JFileChooser.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JFileChooser.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.File;
*** 44,49 ****
--- 44,50 ----
  import java.io.IOException;
  import java.io.ObjectOutputStream;
  import java.util.Vector;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
*************** import javax.swing.plaf.FileChooserUI;
*** 59,111 ****
   */
  public class JFileChooser extends JComponent implements Accessible {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleJFileChooser
! 	 */
! 	protected class AccessibleJFileChooser extends AccessibleJComponent {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJFileChooser
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJFileChooser(JFileChooser component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJFileChooser()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.FILE_CHOOSER;
! 		} // getAccessibleRole()
! 
  
! 	} // AccessibleJFileChooser
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
  	/**
  	 * uiClassID
--- 60,91 ----
   */
  public class JFileChooser extends JComponent implements Accessible {
  
!   private static final long serialVersionUID = 3162921138695327837L;
  
!   /**
!    * AccessibleJFileChooser
!    */
!   protected class AccessibleJFileChooser extends AccessibleJComponent
!   {
!     private static final long serialVersionUID = 8205148454060169244L;
  
+     /**
+      * Constructor AccessibleJFileChooser
+      * @param component TODO
+      */
+     protected AccessibleJFileChooser()
+     {
+     }
  
!     /**
!      * getAccessibleRole
!      * @return AccessibleRole
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.FILE_CHOOSER;
!     }
!   }
  
  	/**
  	 * uiClassID
*************** public class JFileChooser extends JCompo
*** 542,548 ****
  	 * @returns int
  	 */
  	public int showOpenDialog(Component parent) {
! 		return 0; // TODO
  	} // showOpenDialog()
  
  	/**
--- 522,528 ----
  	 * @returns int
  	 */
  	public int showOpenDialog(Component parent) {
! 		return CANCEL_OPTION; // TODO
  	} // showOpenDialog()
  
  	/**
*************** public class JFileChooser extends JCompo
*** 551,557 ****
  	 * @returns int
  	 */
  	public int showSaveDialog(Component parent) {
! 		return 0; // TODO
  	} // showSaveDialog()
  
  	/**
--- 531,537 ----
  	 * @returns int
  	 */
  	public int showSaveDialog(Component parent) {
! 		return CANCEL_OPTION; // TODO
  	} // showSaveDialog()
  
  	/**
*************** public class JFileChooser extends JCompo
*** 561,567 ****
  	 * @returns int
  	 */
  	public int showDialog(Component parent, String approveButtonText) {
! 		return 0; // TODO
  	} // showDialog()
  
  	/**
--- 541,547 ----
  	 * @returns int
  	 */
  	public int showDialog(Component parent, String approveButtonText) {
! 		return CANCEL_OPTION; // TODO
  	} // showDialog()
  
  	/**
*************** public class JFileChooser extends JCompo
*** 906,922 ****
  	 * addActionListener
  	 * @param listener TODO
  	 */
! 	public void addActionListener(ActionListener listener) {
! 		// TODO
! 	} // addActionListener()
  
  	/**
  	 * removeActionListener
  	 * @param listener TODO
  	 */
! 	public void removeActionListener(ActionListener listener) {
! 		// TODO
! 	} // removeActionListener()
  
  	/**
  	 * fireActionPerformed
--- 886,909 ----
  	 * addActionListener
  	 * @param listener TODO
  	 */
! 	public void addActionListener(ActionListener listener)
! 	{
! 		listenerList.add (ActionListener.class, listener);
! 	}
  
  	/**
  	 * removeActionListener
  	 * @param listener TODO
  	 */
! 	public void removeActionListener(ActionListener listener)
! 	{
! 		listenerList.remove (ActionListener.class, listener);
! 	}
! 
! 	public ActionListener[] getActionListeners()
! 	{
! 		return (ActionListener[]) listenerList.getListeners (ActionListener.class);
! 	}
  
  	/**
  	 * fireActionPerformed
*************** public class JFileChooser extends JCompo
*** 958,973 ****
  		return null; // TODO
  	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJFileChooser(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
! 
  
! } // JFileChooser
--- 945,959 ----
  		return null; // TODO
  	} // paramString()
  
!   /**
!    * getAccessibleContext
!    * @returns AccessibleContext
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJFileChooser();
  
!     return accessibleContext;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JFormattedTextField.java gcc-4.0.0/libjava/javax/swing/JFormattedTextField.java
*** gcc-3.4.3/libjava/javax/swing/JFormattedTextField.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JFormattedTextField.java	Wed Feb 16 20:02:25 2005
***************
*** 1,5 ****
  /* JFormattedTextField.java --
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JFormattedTextField.java --
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.FocusEvent;
*** 42,47 ****
--- 42,48 ----
  import java.io.Serializable;
  import java.text.Format;
  import java.text.ParseException;
+ 
  import javax.swing.text.Document;
  import javax.swing.text.DocumentFilter;
  import javax.swing.text.NavigationFilter;
*************** import javax.swing.text.NavigationFilter
*** 52,72 ****
   */
  public class JFormattedTextField extends JTextField
  {
    public abstract static class AbstractFormatter implements Serializable
    {
      public AbstractFormatter ()
      {
        //Do nothing here.
      }
  
      protected Object clone ()
      {
        throw new InternalError ("not implemented");
      }
  
      protected Action[] getActions ()
      {
!       throw new InternalError ("not implemented");
      }
  
      protected DocumentFilter getDocumentFilter ()
--- 53,80 ----
   */
  public class JFormattedTextField extends JTextField
  {
+   private static final long serialVersionUID = 5464657870110180632L;
+ 
    public abstract static class AbstractFormatter implements Serializable
    {
+     private static final long serialVersionUID = -5193212041738979680L;
+     
+     private JFormattedTextField textField;
+     
      public AbstractFormatter ()
      {
        //Do nothing here.
      }
  
      protected Object clone ()
+       throws CloneNotSupportedException
      {
        throw new InternalError ("not implemented");
      }
  
      protected Action[] getActions ()
      {
!       return textField.getActions();
      }
  
      protected DocumentFilter getDocumentFilter ()
*************** public class JFormattedTextField extends
*** 76,112 ****
  
      protected JFormattedTextField getFormattedTextField ()
      {
!       throw new InternalError ("not implemented");
      }
  
      protected NavigationFilter getNavigationFilter ()
      {
!       throw new InternalError ("not implemented");
      }
  
!     public void install (JFormattedTextField ftf)
      {
!       throw new InternalError ("not implemented");
      }
  
      public void uninstall ()
      {
!       throw new InternalError ("not implemented");
      }
  
      protected void invalidEdit ()
      {
!       throw new InternalError ("not implemented");
      }
  
!     protected void setEditValid ()
      {
!       throw new InternalError ("not implemented");
      }
  
!     public abstract Object stringToValue (String text);
  
!     public abstract String valueToString (Object value);
    }
    
    public abstract static class AbstractFormatterFactory
--- 84,125 ----
  
      protected JFormattedTextField getFormattedTextField ()
      {
!       return textField;
      }
  
      protected NavigationFilter getNavigationFilter ()
      {
!       return textField.getNavigationFilter();
      }
  
!     public void install(JFormattedTextField textField)
      {
!       if (this.textField != null)
! 	uninstall();
!       
!       this.textField = textField;
      }
  
      public void uninstall ()
      {
!       this.textField = null;
      }
  
      protected void invalidEdit ()
      {
!       textField.invalidEdit();
      }
  
!     protected void setEditValid (boolean valid)
      {
!       textField.editValid = valid;
      }
  
!     public abstract Object stringToValue (String text)
!       throws ParseException;
  
!     public abstract String valueToString (Object value)
!       throws ParseException;
    }
    
    public abstract static class AbstractFormatterFactory
*************** public class JFormattedTextField extends
*** 119,132 ****
      public abstract AbstractFormatter getFormatter (JFormattedTextField tf);
    }
  
    public static final int COMMIT = 0;
    public static final int COMMIT_OR_REVERT = 1;
    public static final int REVERT = 2;
    public static final int PERSIST = 3;
  
    public JFormattedTextField ()
    {
!     throw new InternalError ("not implemented");
    }
  
    public JFormattedTextField (Format format)
--- 132,165 ----
      public abstract AbstractFormatter getFormatter (JFormattedTextField tf);
    }
  
+   static class FormatterFactoryWrapper extends AbstractFormatterFactory
+   {
+     AbstractFormatter formatter;
+ 
+     public FormatterFactoryWrapper(AbstractFormatter formatter)
+     {
+       this.formatter = formatter;
+     }
+ 
+     public AbstractFormatter getFormatter(JFormattedTextField tf)
+     {
+       return formatter;
+     }
+   }
+ 
    public static final int COMMIT = 0;
    public static final int COMMIT_OR_REVERT = 1;
    public static final int REVERT = 2;
    public static final int PERSIST = 3;
  
+   private Object value;
+   private int focusLostBehavior = COMMIT_OR_REVERT;
+   private AbstractFormatterFactory formatterFactory;
+   private boolean editValid = true;
+   
    public JFormattedTextField ()
    {
!     this((AbstractFormatterFactory) null, null);
    }
  
    public JFormattedTextField (Format format)
*************** public class JFormattedTextField extends
*** 136,160 ****
  
    public JFormattedTextField (AbstractFormatter formatter)
    {
!     throw new InternalError ("not implemented");
    }
  
    public JFormattedTextField (AbstractFormatterFactory factory)
    {
!     throw new InternalError ("not implemented");
    }
  
    public JFormattedTextField (AbstractFormatterFactory factory, Object value)
    {
!     throw new InternalError ("not implemented");
    }
  
    public JFormattedTextField (Object value)
    {
!     throw new InternalError ("not implemented");
    }
  
    public void commitEdit ()
    {
      throw new InternalError ("not implemented");
    }
--- 169,195 ----
  
    public JFormattedTextField (AbstractFormatter formatter)
    {
!     this(new FormatterFactoryWrapper(formatter), null);
    }
  
    public JFormattedTextField (AbstractFormatterFactory factory)
    {
!     this(factory, null);
    }
  
    public JFormattedTextField (AbstractFormatterFactory factory, Object value)
    {
!     this.formatterFactory = factory;
!     this.value = value;
    }
  
    public JFormattedTextField (Object value)
    {
!     this.value = value;
    }
  
    public void commitEdit ()
+     throws ParseException
    {
      throw new InternalError ("not implemented");
    }
*************** public class JFormattedTextField extends
*** 164,202 ****
      throw new InternalError ("not implemented");
    }
  
!   public int getFocusLostBehaviour ()
    {
!     throw new InternalError ("not implemented");
    }
  
    public AbstractFormatter getFormatter ()
    {
!     throw new InternalError ("not implemented");
    }
  
    public AbstractFormatterFactory getFormatterFactory ()
    {
!     throw new InternalError ("not implemented");
    }
  
    public String getUIClassID ()
    {
!     throw new InternalError ("not implemented");
    }
  
    public Object getValue ()
    {
!     throw new InternalError ("not implemented");
    }
  
    protected void invalidEdit ()
    {
!     throw new InternalError ("not implemented");
    }
  
    public boolean isEditValid ()
    {
!     throw new InternalError ("not implemented");
    }
  
    protected void processFocusEvent (FocusEvent evt)
--- 199,240 ----
      throw new InternalError ("not implemented");
    }
  
!   public int getFocusLostBehavior()
    {
!     return focusLostBehavior;
    }
  
    public AbstractFormatter getFormatter ()
    {
!     if (formatterFactory == null)
!       return null;
!     
!     return formatterFactory.getFormatter(this);
    }
  
    public AbstractFormatterFactory getFormatterFactory ()
    {
!     return formatterFactory;
    }
  
    public String getUIClassID ()
    {
!     return "FormattedTextFieldUI";
    }
  
    public Object getValue ()
    {
!     return value;
    }
  
    protected void invalidEdit ()
    {
!     UIManager.getLookAndFeel().provideErrorFeedback(this);
    }
  
    public boolean isEditValid ()
    {
!     return editValid;
    }
  
    protected void processFocusEvent (FocusEvent evt)
*************** public class JFormattedTextField extends
*** 204,231 ****
      throw new InternalError ("not implemented");
    }
  
!   public void setDocument (Document document)
    {
!     throw new InternalError ("not implemented");
    }
  
!   public void setLostFocusBehavior (int behavior)
    {
!     throw new InternalError ("not implemented");
    }
  
    protected void setFormatter (AbstractFormatter formatter)
    {
!     throw new InternalError ("not implemented");
    }
  
    public void setFormatterFactory (AbstractFormatterFactory factory)
    {
!     throw new InternalError ("not implemented");
    }
  
!   public void setValue (Object value)
    {
!     throw new InternalError ("not implemented");
    }
  }
--- 242,299 ----
      throw new InternalError ("not implemented");
    }
  
!   public void setDocument(Document newDocument)
    {
!     Document oldDocument = getDocument();
! 
!     if (oldDocument == newDocument)
!       return;
!     
!     super.setDocument(newDocument);
    }
  
!   public void setFocusLostBehavior(int behavior)
    {
!     if (behavior != COMMIT
! 	&& behavior != COMMIT_OR_REVERT
! 	&& behavior != PERSIST
! 	&& behavior != REVERT)
!       throw new IllegalArgumentException("invalid behavior");
! 
!     this.focusLostBehavior = behavior;
    }
  
    protected void setFormatter (AbstractFormatter formatter)
    {
!     AbstractFormatter oldFormatter = null;
!     
!     if (formatterFactory != null)
!       oldFormatter = formatterFactory.getFormatter(this);
! 
!     if (oldFormatter == formatter)
!       return;
! 
!     setFormatterFactory(new FormatterFactoryWrapper(formatter));
!     firePropertyChange("formatter", oldFormatter, formatter);
    }
  
    public void setFormatterFactory (AbstractFormatterFactory factory)
    {
!     if (formatterFactory == factory)
!       return;
!     
!     AbstractFormatterFactory oldFactory = formatterFactory;
!     formatterFactory = factory;
!     firePropertyChange("formatterFactory", oldFactory, factory);
    }
  
!   public void setValue (Object newValue)
    {
!     if (value == newValue)
!       return;
!     
!     Object oldValue = value;
!     value = newValue;
!     firePropertyChange("value", oldValue, newValue);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JFrame.java gcc-4.0.0/libjava/javax/swing/JFrame.java
*** gcc-3.4.3/libjava/javax/swing/JFrame.java	Sat Nov 22 00:03:35 2003
--- gcc-4.0.0/libjava/javax/swing/JFrame.java	Wed Feb 16 20:02:25 2005
***************
*** 1,5 ****
  /* JFrame.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JFrame.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,53 ****
  
  package javax.swing;
  
  import java.awt.BorderLayout;
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.Frame;
  import java.awt.Graphics;
- import java.awt.GraphicsConfiguration;
  import java.awt.LayoutManager;
  import java.awt.event.KeyEvent;
  import java.awt.event.WindowEvent;
  import javax.accessibility.AccessibleContext;
  
  /**
--- 38,54 ----
  
  package javax.swing;
  
+ import java.awt.AWTEvent;
  import java.awt.BorderLayout;
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.Frame;
  import java.awt.Graphics;
  import java.awt.LayoutManager;
  import java.awt.event.KeyEvent;
  import java.awt.event.WindowEvent;
+ 
  import javax.accessibility.AccessibleContext;
  
  /**
*************** import javax.accessibility.AccessibleCon
*** 57,250 ****
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public class JFrame extends Frame
  {
!     public final static int HIDE_ON_CLOSE        = 0;
!     public final static int EXIT_ON_CLOSE        = 1;
!     public final static int DISPOSE_ON_CLOSE     = 2;
!     public final static int DO_NOTHING_ON_CLOSE  = 3;
  
!     protected  AccessibleContext accessibleContext;
  
!     private int close_action = EXIT_ON_CLOSE;    
!     
  
!     /***************************************************
!      *
!      *  initia
!      *
!      *
!      *************/
!     
  
!     public JFrame()
!     {
! 	super("JFrame");
! 	frameInit();
!     }
!   
!     public JFrame(String title)
!     {
! 	super(title);
! 	frameInit();
!     }
!   
  
!     /***************************************************
!      *
!      *
!      *  methods, this part is shared with JDialog, JFrame
!      *
!      *
!      *************/
  
!   
!     private boolean checking;
!     protected  JRootPane         rootPane;
  
  
!     protected  void frameInit()
!     {
!       super.setLayout(new BorderLayout(1, 1));
!       getRootPane(); // will do set/create
!     }
!   
!   public Dimension getPreferredSize()
    {
!     Dimension d = super.getPreferredSize();
!     return d;
    }
  
!     JMenuBar getJMenuBar()
!     {    return getRootPane().getJMenuBar();   }
!     
!     void setJMenuBar(JMenuBar menubar)
!     {    getRootPane().setJMenuBar(menubar); }
!     
  
!   public  void setLayout(LayoutManager manager)
!   {    super.setLayout(manager);  }
  
!     void setLayeredPane(JLayeredPane layeredPane) 
!     {   getRootPane().setLayeredPane(layeredPane);   }
!   
!     JLayeredPane getLayeredPane()
!     {   return getRootPane().getLayeredPane();     }
!   
!     JRootPane getRootPane()
!     {
! 	if (rootPane == null)
! 	    setRootPane(createRootPane());
! 	return rootPane;          
!     }
  
!     void setRootPane(JRootPane root)
!     {
! 	if (rootPane != null)
! 	    remove(rootPane);
! 	    
! 	rootPane = root; 
! 	add(rootPane, BorderLayout.CENTER);
!     }
  
!     JRootPane createRootPane()
!     {   return new JRootPane();    }
  
!     public Container getContentPane()
!     {    return getRootPane().getContentPane();     }
  
!     void setContentPane(Container contentPane)
!     {    getRootPane().setContentPane(contentPane);    }
!   
!     Component getGlassPane()
!     {    return getRootPane().getGlassPane();   }
!   
!     void setGlassPane(Component glassPane)
!     {   getRootPane().setGlassPane(glassPane);   }
  
!     
!     protected  void addImpl(Component comp, Object constraints, int index)
!     {	super.addImpl(comp, constraints, index);    }
  
  
!     public void remove(Component comp)
!     {   getContentPane().remove(comp);  }
!   
!     protected  boolean isRootPaneCheckingEnabled()
!     {    return checking;        }
  
  
!     protected  void setRootPaneCheckingEnabled(boolean enabled)
!     { checking = enabled;  }
  
  
!     public void update(Graphics g)
!     {   paint(g);  }
  
!     protected  void processKeyEvent(KeyEvent e)
!     {	super.processKeyEvent(e);    }
  
-     /////////////////////////////////////////////////////////////////////////////////
-   
    public AccessibleContext getAccessibleContext()
    {
      return accessibleContext;
    }
-   
-     int getDefaultCloseOperation()
-     {    return close_action;   }
  
!     
!     
!     protected  String paramString()
!     {   return "JFrame";     }
  
  
!     protected  void processWindowEvent(WindowEvent e)
!     {
! 	//	System.out.println("PROCESS_WIN_EV-1: " + e);
! 	super.processWindowEvent(e); 
! 	//	System.out.println("PROCESS_WIN_EV-2: " + e);
! 	switch (e.getID())
  	    {
! 	    case WindowEvent.WINDOW_CLOSING:
! 		{
! 		    switch(close_action)
! 			{
! 			case EXIT_ON_CLOSE:
! 			    {
! 				System.out.println("user requested exit on close");
! 				System.exit(1);
! 				break;
! 			    }
! 			case DISPOSE_ON_CLOSE:
! 			    {
! 				System.out.println("user requested dispose on close");
! 				dispose();
! 				break;
! 			    }
! 			case HIDE_ON_CLOSE:
! 			    {
! 				setVisible(false);
! 				break;
! 			    }
! 			case DO_NOTHING_ON_CLOSE:
! 			    break;
! 			}
! 		    break;
! 		}
! 		
! 	    case WindowEvent.WINDOW_CLOSED:
! 	    case WindowEvent.WINDOW_OPENED:
! 	    case WindowEvent.WINDOW_ICONIFIED:
! 	    case WindowEvent.WINDOW_DEICONIFIED:
! 	    case WindowEvent.WINDOW_ACTIVATED:
! 	    case WindowEvent.WINDOW_DEACTIVATED:
  		break;
  	    }
!     }   
!  
  
!     void setDefaultCloseOperation(int operation)
!     {  close_action = operation;   }
  
  }
--- 58,279 ----
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public class JFrame extends Frame
+   implements WindowConstants, RootPaneContainer
  {
!   private static final long serialVersionUID = -3362141868504252139L;
!   private static boolean defaultLookAndFeelDecorated;
!   private int close_action = HIDE_ON_CLOSE;
!   protected AccessibleContext accessibleContext;
!   protected JRootPane rootPane;
!   protected boolean rootPaneCheckingEnabled;
  
!   public JFrame()
!   {
!     super("JFrame");
!     frameInit();
!   }
  
!   public JFrame(String title)
!   {
!     super(title);
!     frameInit();
!   }
  
!   protected void frameInit()
!   {
!     super.setLayout(new BorderLayout(1, 1));
!     enableEvents(AWTEvent.WINDOW_EVENT_MASK);
!     getRootPane(); // will do set/create
!   }
  
!   public Dimension getPreferredSize()
!   {
!     return super.getPreferredSize();
!   }
  
!   public JMenuBar getJMenuBar()
!   {
!     return getRootPane().getJMenuBar();
!   }
  
!   public void setJMenuBar(JMenuBar menubar)
!   {
!     getRootPane().setJMenuBar(menubar);
!   }
  
+   public void setLayout(LayoutManager manager)
+   {
+     super.setLayout(manager);
+   }
  
!   public void setLayeredPane(JLayeredPane layeredPane)
    {
!     getRootPane().setLayeredPane(layeredPane);
    }
  
!   public JLayeredPane getLayeredPane()
!   {
!     return getRootPane().getLayeredPane();
!   }
  
!   public JRootPane getRootPane()
!   {
!     if (rootPane == null)
!       setRootPane(createRootPane());
!     return rootPane;
!   }
  
!   protected void setRootPane(JRootPane root)
!   {
!     if (rootPane != null)
!       remove(rootPane);
  
!     rootPane = root;
!     add(rootPane, BorderLayout.CENTER);
!   }
  
!   protected JRootPane createRootPane()
!   {
!     return new JRootPane();
!   }
  
!   public Container getContentPane()
!   {
!     return getRootPane().getContentPane();
!   }
  
!   public void setContentPane(Container contentPane)
!   {
!     getRootPane().setContentPane(contentPane);
!   }
  
!   public Component getGlassPane()
!   {
!     return getRootPane().getGlassPane();
!   }
  
+   public void setGlassPane(Component glassPane)
+   {
+     getRootPane().setGlassPane(glassPane);
+   }
  
!   protected void addImpl(Component comp, Object constraints, int index)
!   {
!     super.addImpl(comp, constraints, index);
!   }
  
+   public void remove(Component comp)
+   {
+     getContentPane().remove(comp);
+   }
  
!   protected boolean isRootPaneCheckingEnabled()
!   {
!     return rootPaneCheckingEnabled;
!   }
  
+   protected void setRootPaneCheckingEnabled(boolean enabled)
+   {
+     rootPaneCheckingEnabled = enabled;
+   }
  
!   public void update(Graphics g)
!   {
!     paint(g);
!   }
  
!   protected void processKeyEvent(KeyEvent e)
!   {
!     super.processKeyEvent(e);
!   }
! 
!   public static void setDefaultLookAndFeelDecorated(boolean decorated)
!   {
!     defaultLookAndFeelDecorated = decorated;
!   }
! 
!   public static boolean isDefaultLookAndFeelDecorated()
!   {
!     return defaultLookAndFeelDecorated;
!   }
  
    public AccessibleContext getAccessibleContext()
    {
      return accessibleContext;
    }
  
!   public int getDefaultCloseOperation()
!   {
!     return close_action;
!   }
  
+   protected String paramString()
+   {
+     return "JFrame";
+   }
  
!   protected void processWindowEvent(WindowEvent e)
!   {
!     super.processWindowEvent(e);
!     switch (e.getID())
!       {
!       case WindowEvent.WINDOW_CLOSING:
!         {
! 	  switch (close_action)
  	    {
! 	    case EXIT_ON_CLOSE:
! 	      {
! 		System.exit(0);
  		break;
+ 	      }
+ 	    case DISPOSE_ON_CLOSE:
+ 	      {
+ 		dispose();
+ 		break;
+ 	      }
+ 	    case HIDE_ON_CLOSE:
+ 	      {
+ 		setVisible(false);
+ 		break;
+ 	      }
+ 	    case DO_NOTHING_ON_CLOSE:
+ 	      break;
  	    }
! 	  break;
!         }
!       case WindowEvent.WINDOW_CLOSED:
!       case WindowEvent.WINDOW_OPENED:
!       case WindowEvent.WINDOW_ICONIFIED:
!       case WindowEvent.WINDOW_DEICONIFIED:
!       case WindowEvent.WINDOW_ACTIVATED:
!       case WindowEvent.WINDOW_DEACTIVATED:
! 	break;
!       }
!   }
  
!   /**
!    * Defines what happens when this frame is closed. Can be one off
!    * <code>EXIT_ON_CLOSE</code>,
!    * <code>DISPOSE_ON_CLOSE</code>,
!    * <code>HIDE_ON_CLOSE</code> or
!    * <code>DO_NOTHING_ON_CLOSE</code>.
!    * The default is <code>HIDE_ON_CLOSE</code>.
!    * When <code>EXIT_ON_CLOSE</code> is specified this method calls
!    * <code>SecurityManager.checkExit(0)</code> which might throw a
!    * <code>SecurityException</code>. When the specified operation is
!    * not one of the above a <code>IllegalArgumentException</code> is
!    * thrown.
!    */
!   public void setDefaultCloseOperation(int operation)
!   {
!     SecurityManager sm = System.getSecurityManager();
!     if (sm != null && operation == EXIT_ON_CLOSE)
!       sm.checkExit(0);
! 
!     if (operation != EXIT_ON_CLOSE && operation != DISPOSE_ON_CLOSE
!         && operation != HIDE_ON_CLOSE && operation != DO_NOTHING_ON_CLOSE)
!       throw new IllegalArgumentException("operation = " + operation);
  
+     close_action = operation;
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JInternalFrame.java gcc-4.0.0/libjava/javax/swing/JInternalFrame.java
*** gcc-3.4.3/libjava/javax/swing/JInternalFrame.java	Thu Jun 19 16:30:09 2003
--- gcc-4.0.0/libjava/javax/swing/JInternalFrame.java	Wed Feb 16 20:02:27 2005
***************
*** 1,5 ****
! /* JInternalFrame.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JInternalFrame.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing;
*** 40,61 ****
  
  import java.awt.Component;
  import java.awt.Container;
  import javax.accessibility.Accessible;
  
! public class JInternalFrame extends JComponent
! /*implements Accessible, WindowConstants, RootPaneContainer*/
  {
    private static final long serialVersionUID = -5425177187760785402L;
  
    public static final String CONTENT_PANE_PROPERTY = "contentPane";
!   public static final String MENU_BAR_PROPERTY = "JMenuBar";
!   public static final String TITLE_PROPERTY = "title";
!   public static final String LAYERED_PANE_PROPERTY = "layeredPane";
!   public static final String ROOT_PANE_PROPERTY = "rootPane";
!   public static final String GLASS_PANE_PROPERTY = "glassPane";
    public static final String FRAME_ICON_PROPERTY = "frameIcon";
!   public static final String IS_SELECTED_PROPERTY = "selected";
    public static final String IS_CLOSED_PROPERTY = "closed";
!   public static final String IS_MAXIMUM_PROPERTY = "maximum";
    public static final String IS_ICON_PROPERTY = "icon";
! } // class JInternalFrame
--- 40,1716 ----
  
  import java.awt.Component;
  import java.awt.Container;
+ import java.awt.Graphics;
+ import java.awt.KeyboardFocusManager;
+ import java.awt.LayoutManager;
+ import java.awt.Rectangle;
+ import java.beans.PropertyVetoException;
+ 
  import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleValue;
+ import javax.swing.event.InternalFrameEvent;
+ import javax.swing.event.InternalFrameListener;
+ import javax.swing.plaf.DesktopIconUI;
+ import javax.swing.plaf.InternalFrameUI;
  
! /**
!  * This class implements a Swing widget that looks and acts like a native
!  * frame. The frame can be dragged, resized, closed, etc. Typically,
!  * JInternalFrames are placed in JDesktopPanes. The actions that the
!  * JInternalFrame performs (maximizing, minimizing, etc.) are performed by a
!  * DesktopManager. As with regular frames, components are added by calling
!  * frame.getContentPane().add.
!  */
! public class JInternalFrame extends JComponent implements Accessible,
!                                                           WindowConstants,
!                                                           RootPaneContainer
  {
+   /** DOCUMENT ME! */
    private static final long serialVersionUID = -5425177187760785402L;
  
+   /**
+    * DOCUMENT ME!
+    */
+   protected class AccessibleJInternalFrame extends AccessibleJComponent
+     implements AccessibleValue
+   {
+     /**
+      * Creates a new AccessibleJInternalFrame object.
+      */
+     protected AccessibleJInternalFrame()
+     {
+       super();
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public String getAccessibleName()
+     {
+       return null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public AccessibleValue getAccessibleValue()
+     {
+       return null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Number getCurrentAccessibleValue()
+     {
+       return null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Number getMaximumAccessibleValue()
+     {
+       return null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Number getMinimumAccessibleValue()
+     {
+       return null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param n DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public boolean setCurrentAccessibleValue(Number n)
+     {
+       return false;
+     }
+   }
+ 
+   /**
+    * This class represents the JInternalFrame while it is iconified.
+    */
+   public static class JDesktopIcon extends JComponent implements Accessible
+   {
+     /**
+      * DOCUMENT ME!
+      */
+     protected class AccessibleJDesktopIcon extends AccessibleJComponent
+       implements AccessibleValue
+     {
+       /**
+        * Creates a new AccessibleJDesktopIcon object.
+        */
+       protected AccessibleJDesktopIcon()
+       {
+ 	super();
+       }
+ 
+       /**
+        * DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+        */
+       public AccessibleRole getAccessibleRole()
+       {
+ 	return null;
+       }
+ 
+       /**
+        * DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+        */
+       public AccessibleValue getAccessibleValue()
+       {
+ 	return null;
+       }
+ 
+       /**
+        * DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+        */
+       public Number getCurrentAccessibleValue()
+       {
+ 	return null;
+       }
+ 
+       /**
+        * DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+        */
+       public Number getMaximumAccessibleValue()
+       {
+ 	return null;
+       }
+ 
+       /**
+        * DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+        */
+       public Number getMinimumAccessibleValue()
+       {
+ 	return null;
+       }
+ 
+       /**
+        * DOCUMENT ME!
+        *
+        * @param n DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+        */
+       public boolean setCurrentAccessibleValue(Number n)
+       {
+ 	return false;
+       }
+     }
+ 
+     /** The JInternalFrame this DesktopIcon represents. */
+     JInternalFrame frame;
+ 
+     /**
+      * Creates a new JDesktopIcon object for representing the given frame.
+      *
+      * @param f The JInternalFrame to represent.
+      */
+     public JDesktopIcon(JInternalFrame f)
+     {
+       frame = f;
+       updateUI();
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public AccessibleContext getAccessibleContext()
+     {
+       if (accessibleContext == null)
+ 	accessibleContext = new AccessibleJDesktopIcon();
+       return accessibleContext;
+     }
+ 
+     /**
+      * This method returns the JDesktopPane this JDesktopIcon is in.
+      *
+      * @return The JDesktopPane this JDesktopIcon is in.
+      */
+     public JDesktopPane getDesktopPane()
+     {
+       JDesktopPane p = (JDesktopPane) SwingUtilities.getAncestorOfClass(JDesktopPane.class,
+                                                                         this);
+       return p;
+     }
+ 
+     /**
+      * This method returns the JInternalFrame this JDesktopIcon represents.
+      *
+      * @return The JInternalFrame this JDesktopIcon represents.
+      */
+     public JInternalFrame getInternalFrame()
+     {
+       return frame;
+     }
+ 
+     /**
+      * This method returns the UI that is responsible for the JDesktopIcon.
+      *
+      * @return The UI that is responsible for the JDesktopIcon.
+      */
+     public DesktopIconUI getUI()
+     {
+       return (DesktopIconUI) ui;
+     }
+ 
+     /**
+      * This method returns the String identifier that is used to determine
+      * which class is used for JDesktopIcon's UI.
+      *
+      * @return A String identifier for the UI class.
+      */
+     public String getUIClassID()
+     {
+       return "DesktopIconUI";
+     }
+ 
+     /**
+      * This method sets the JInternalFrame that this JDesktopIcon represents.
+      *
+      * @param f The JInternalFrame that this JDesktopIcon represents.
+      */
+     public void setInternalFrame(JInternalFrame f)
+     {
+       frame = f;
+     }
+ 
+     /**
+      * This method sets the UI used for this JDesktopIcon.
+      *
+      * @param ui The UI to use.
+      */
+     public void setUI(DesktopIconUI ui)
+     {
+       super.setUI(ui);
+     }
+ 
+     /**
+      * This method restores the UI property to the defaults.
+      */
+     public void updateUI()
+     {
+       setUI((DesktopIconUI) UIManager.getUI(this));
+     }
+   }
+ 
+   /**
+    * The property fired in a PropertyChangeEvent when the contentPane property
+    * changes.
+    */
    public static final String CONTENT_PANE_PROPERTY = "contentPane";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the frameIcon property
!    * changes.
!    */
    public static final String FRAME_ICON_PROPERTY = "frameIcon";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the glassPane property
!    * changes.
!    */
!   public static final String GLASS_PANE_PROPERTY = "glassPane";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the closed property
!    * changes.
!    */
    public static final String IS_CLOSED_PROPERTY = "closed";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the icon property
!    * changes.
!    */
    public static final String IS_ICON_PROPERTY = "icon";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the maximum property
!    * changes.
!    */
!   public static final String IS_MAXIMUM_PROPERTY = "maximum";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the selected property
!    * changes.
!    */
!   public static final String IS_SELECTED_PROPERTY = "selected";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the layeredPane property
!    * changes.
!    */
!   public static final String LAYERED_PANE_PROPERTY = "layeredPane";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the jMenuBar property
!    * changes.
!    */
!   public static final String MENU_BAR_PROPERTY = "JMenuBar";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the rootPane property
!    * changes.
!    */
!   public static final String ROOT_PANE_PROPERTY = "rootPane";
! 
!   /**
!    * The property fired in a PropertyChangeEvent when the title property
!    * changes.
!    */
!   public static final String TITLE_PROPERTY = "title";
! 
!   /** Whether the JInternalFrame is closable. */
!   protected boolean closable;
! 
!   /** Whether the JInternalFrame can be iconified. */
!   protected boolean iconable;
! 
!   /** Whether the JInternalFrame is closed. */
!   protected boolean isClosed;
! 
!   /** Whether the JInternalFrame has been iconified. */
!   protected boolean isIcon;
! 
!   /** Whether the JInternalFrame has been maximized. */
!   protected boolean isMaximum;
! 
!   /** Whether the JInternalFrame is the active frame. */
!   protected boolean isSelected;
! 
!   /** Whether the JInternalFrame can be maximized. */
!   protected boolean maximizable;
! 
!   /** Whether the JInternalFrame has rootPaneChecking enabled. */
!   protected boolean rootPaneCheckingEnabled = true;
! 
!   /** Whether the JInternalFrame is resizable. */
!   protected boolean resizable;
! 
!   /**
!    * The JDesktopIcon that represents the JInternalFrame while it is
!    * iconified.
!    */
!   protected JDesktopIcon desktopIcon;
! 
!   /** The icon used in the JMenuBar in the TitlePane. */
!   protected Icon frameIcon;
! 
!   /** The rootPane of the JInternalFrame. */
!   protected JRootPane rootPane;
! 
!   /** The title on the TitlePane of the JInternalFrame. */
!   protected String title;
! 
!   /** The bounds of the JInternalFrame before it was maximized. */
!   private transient Rectangle storedBounds;
! 
!   /** The Component that receives focus by default. */
!   private transient Component defaultFocus;
! 
!   /** The default close action taken, */
!   private transient int defaultCloseOperation = DISPOSE_ON_CLOSE;
! 
!   /** Whether the JInternalFrame has become visible for the very first time. */
!   private transient boolean isFirstTimeVisible = true;
! 
!   /**
!    * Whether the JInternalFrame is in the transition from being a maximized
!    * frame back to a regular sized frame.
!    */
!   private transient boolean maxTransition = false;
! 
!   /** DOCUMENT ME! */
!   private transient boolean wasIcon = false;
! 
!   /**
!    * Creates a new JInternalFrame object that has no title, and is
!    * non-resizable, non-maximizable, non-iconifiable, and non-closable.
!    */
!   public JInternalFrame()
!   {
!     this(null, false, false, false, false);
!   }
! 
!   /**
!    * Creates a new JInternalFrame object with the given title and is
!    * non-resizable, non-maximizable, non-iconifiable, and non-closable.
!    *
!    * @param title The title displayed in the JInternalFrame.
!    */
!   public JInternalFrame(String title)
!   {
!     this(title, false, false, false, false);
!   }
! 
!   /**
!    * Creates a new JInternalFrame object with the given title and resizable
!    * properties. The JInternalFrame is non-maximizable, non-iconifiable, and
!    * non-closable.
!    *
!    * @param title The title displayed in the JInternalFrame.
!    * @param resizable Whether the JInternalFrame is resizable.
!    */
!   public JInternalFrame(String title, boolean resizable)
!   {
!     this(title, resizable, false, false, false);
!   }
! 
!   /**
!    * Creates a new JInternalFrame object with the given title, resizable, and
!    * closable properties. The JInternalFrame is non-maximizable and
!    * non-iconifiable.
!    *
!    * @param title The title displayed in the JInternalFrame.
!    * @param resizable Whether the JInternalFrame is resizable.
!    * @param closable Whether the JInternalFrame is closable.
!    */
!   public JInternalFrame(String title, boolean resizable, boolean closable)
!   {
!     this(title, resizable, closable, false, false);
!   }
! 
!   /**
!    * Creates a new JInternalFrame object with the given title, resizable,
!    * closable and maximizable properties. The JInternalFrame is
!    * non-iconifiable.
!    *
!    * @param title The title displayed in the JInternalFrame.
!    * @param resizable Whether the JInternalFrame is resizable.
!    * @param closable Whether the JInternalFrame is closable.
!    * @param maximizable Whether the JInternalFrame is maximizable.
!    */
!   public JInternalFrame(String title, boolean resizable, boolean closable,
!                         boolean maximizable)
!   {
!     this(title, resizable, closable, maximizable, false);
!   }
! 
!   /**
!    * Creates a new JInternalFrame object with the given title, resizable,
!    * closable, maximizable and iconifiable properties.
!    *
!    * @param title The title displayed in the JInternalFrame.
!    * @param resizable Whether the JInternalFrame is resizable.
!    * @param closable Whether the JInternalFrame is closable.
!    * @param maximizable Whether the JInternalFrame is maximizable.
!    * @param iconifiable Whether the JInternalFrame is iconifiable.
!    */
!   public JInternalFrame(String title, boolean resizable, boolean closable,
!                         boolean maximizable, boolean iconifiable)
!   {
!     this.title = title;
!     this.resizable = resizable;
!     this.closable = closable;
!     this.maximizable = maximizable;
!     this.iconable = iconifiable;
!     storedBounds = new Rectangle();
! 
!     setRootPaneCheckingEnabled(false);
!     setRootPane(createRootPane());
! 
!     updateUI();
!     setRootPaneCheckingEnabled(true);
!   }
! 
!   /**
!    * This method adds Components to this Container. For JInternalFrames,
!    * instead of calling add directly on the JInternalFrame, it should be
!    * called with JInternalFrame.getContentPane().add. If root pane checking
!    * is enabled, calling this method will cause an exception to be thrown.
!    *
!    * @param comp The Component to add.
!    * @param constraints The constraints on the Component added.
!    * @param index The position to place the Component.
!    *
!    * @throws Error DOCUMENT ME!
!    */
!   protected void addImpl(Component comp, Object constraints, int index)
!   {
!     if (isRootPaneCheckingEnabled())
!       throw new Error("Do not use add() on JInternalPane directly. Use getContentPane().add() instead");
! 
!     super.addImpl(comp, constraints, index);
!   }
! 
!   /**
!    * This method adds an InternalFrameListener to this JInternalFrame.
!    *
!    * @param l The listener to add.
!    */
!   public void addInternalFrameListener(InternalFrameListener l)
!   {
!     listenerList.add(InternalFrameListener.class, l);
!   }
! 
!   /**
!    * This method is used to create a root pane for the JInternalFrame. This
!    * method is called by the constructors.
!    *
!    * @return A root pane for the JInternalFrame to use.
!    */
!   protected JRootPane createRootPane()
!   {
!     return new JRootPane();
!   }
! 
!   /**
!    * This method makes this JInternalFrame invisible, unselected and closed.
!    * If this JInternalFrame is not closed already, it will fire an
!    * INTERNAL_FRAME_CLoSED event. This method is similar to setClosed but it
!    * doesn't give vetoable listeners a chance to veto and it will not fire an
!    * INTERNAL_FRAME_CLOSING event.
!    */
!   public void dispose()
!   {
!     hide();
!     JDesktopPane pane = getDesktopPane();
!     if (pane != null)
!       pane.setSelectedFrame(null);
!     else
!       {
! 	try
! 	  {
! 	    setSelected(false);
! 	  }
! 	catch (PropertyVetoException e)
! 	  {
! 	    // Do nothing if they don't want to be unselected.
! 	  }
!       }
!     isClosed = true;
!     fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_CLOSED);
!     removeNotify();
!   }
! 
!   /**
!    * This method is used for closing this JInternalFrame. It fires an
!    * INTERNAL_FRAME_CLOSING event and then performs the action specified by
!    * the default close operation.
!    */
!   public void doDefaultCloseAction()
!   {
!     fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_CLOSING);
!     switch (getDefaultCloseOperation())
!       {
!       case HIDE_ON_CLOSE:
! 	hide();
! 	break;
!       case DISPOSE_ON_CLOSE:
! 	dispose();
! 	break;
!       }
!   }
! 
!   /**
!    * This method fires an InternalFrameEvent to the listeners.
!    *
!    * @param id The type of event being fired. See InternalFrameEvent.
!    */
!   protected void fireInternalFrameEvent(int id)
!   {
!     Object[] ifListeners = listenerList.getListenerList();
!     InternalFrameEvent evt = new InternalFrameEvent(this, id);
!     switch (id)
!       {
!       case InternalFrameEvent.INTERNAL_FRAME_CLOSING:
! 	for (int i = ifListeners.length - 2; i >= 0; i -= 2)
! 	  {
! 	    if (ifListeners[i] == InternalFrameListener.class)
! 	      ((InternalFrameListener) ifListeners[i + 1])
! 	      .internalFrameClosing(evt);
! 	  }
! 	break;
!       case InternalFrameEvent.INTERNAL_FRAME_ACTIVATED:
! 	for (int i = ifListeners.length - 2; i >= 0; i -= 2)
! 	  {
! 	    if (ifListeners[i] == InternalFrameListener.class)
! 	      ((InternalFrameListener) ifListeners[i + 1])
! 	      .internalFrameActivated(evt);
! 	  }
! 	break;
!       case InternalFrameEvent.INTERNAL_FRAME_CLOSED:
! 	for (int i = ifListeners.length - 2; i >= 0; i -= 2)
! 	  {
! 	    if (ifListeners[i] == InternalFrameListener.class)
! 	      ((InternalFrameListener) ifListeners[i + 1]).internalFrameClosed(evt);
! 	  }
! 	break;
!       case InternalFrameEvent.INTERNAL_FRAME_DEACTIVATED:
! 	for (int i = ifListeners.length - 2; i >= 0; i -= 2)
! 	  {
! 	    if (ifListeners[i] == InternalFrameListener.class)
! 	      ((InternalFrameListener) ifListeners[i + 1])
! 	      .internalFrameDeactivated(evt);
! 	  }
! 	break;
!       case InternalFrameEvent.INTERNAL_FRAME_DEICONIFIED:
! 	for (int i = ifListeners.length - 2; i >= 0; i -= 2)
! 	  {
! 	    if (ifListeners[i] == InternalFrameListener.class)
! 	      ((InternalFrameListener) ifListeners[i + 1])
! 	      .internalFrameDeiconified(evt);
! 	  }
! 	break;
!       case InternalFrameEvent.INTERNAL_FRAME_ICONIFIED:
! 	for (int i = ifListeners.length - 2; i >= 0; i -= 2)
! 	  {
! 	    if (ifListeners[i] == InternalFrameListener.class)
! 	      ((InternalFrameListener) ifListeners[i + 1])
! 	      .internalFrameIconified(evt);
! 	  }
! 	break;
!       case InternalFrameEvent.INTERNAL_FRAME_OPENED:
! 	for (int i = ifListeners.length - 2; i >= 0; i -= 2)
! 	  {
! 	    if (ifListeners[i] == InternalFrameListener.class)
! 	      ((InternalFrameListener) ifListeners[i + 1]).internalFrameOpened(evt);
! 	  }
! 	break;
!       }
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJInternalFrame();
!     return accessibleContext;
!   }
! 
!   /**
!    * This method returns the Content Pane for this JInternalFrame.
!    *
!    * @return The Content Pane for this JInternalFrame.
!    */
!   public Container getContentPane()
!   {
!     return getRootPane().getContentPane();
!   }
! 
!   /**
!    * This method returns the default action taken when this JInternalFrame is
!    * closed.
!    *
!    * @return The default action taken when this JInternalFrame is closed.
!    */
!   public int getDefaultCloseOperation()
!   {
!     return defaultCloseOperation;
!   }
! 
!   /**
!    * This method returns the JDesktopIcon that represents this JInternalFrame
!    * while it is iconified.
!    *
!    * @return The JDesktopIcon that represents this JInternalFrame while it is
!    *         iconified.
!    */
!   public JDesktopIcon getDesktopIcon()
!   {
!     if (desktopIcon == null)
!       desktopIcon = new JDesktopIcon(this);
!     return desktopIcon;
!   }
! 
!   /**
!    * This method searches this JInternalFrame ancestors for an instance of
!    * JDesktopPane. If one is found, it is returned. If none is found, then it
!    * will search the JDesktopIcon for a JDesktopPane.
!    *
!    * @return The JDesktopPane that this JInternalFrame belongs to.
!    */
!   public JDesktopPane getDesktopPane()
!   {
!     JDesktopPane value = (JDesktopPane) SwingUtilities.getAncestorOfClass(JDesktopPane.class,
!                                                                           this);
!     if (value == null && desktopIcon != null)
!       value = desktopIcon.getDesktopPane();
!     return value;
!   }
! 
!   /**
!    * This method returns null because this must always be the root of a focus
!    * traversal.
!    *
!    * @return always null
!    *
!    * @since 1.4
!    */
!   public final Container getFocusCycleRootAncestor()
!   {
!     // as defined.
!     return null;
!   }
! 
!   /**
!    * This method returns the child Component that will receive focus if this
!    * JInternalFrame is selected.
!    *
!    * @return The child Component that will receive focus.
!    */
!   public Component getFocusOwner()
!   {
!     if (isSelected())
!       {
! 	Component focus = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
! 	if (SwingUtilities.isDescendingFrom(focus, this))
! 	  {
! 	    defaultFocus = focus;
! 	    return focus;
! 	  }
!       }
!     return null;
!   }
! 
!   /**
!    * This method returns the Frame Icon (the icon used in the JInternalFrame
!    * TitlePane and iconified frame).
!    *
!    * @return The Frame Icon.
!    */
!   public Icon getFrameIcon()
!   {
!     return frameIcon;
!   }
! 
!   /**
!    * This method returns the Glass Pane used with this JInternalFrame.
!    *
!    * @return The Glass Pane used with this JInternalFrame.
!    */
!   public Component getGlassPane()
!   {
!     return getRootPane().getGlassPane();
!   }
! 
!   /**
!    * This method returns an array of InternalFrameListeners that are listening
!    * to this JInternalFrame.
!    *
!    * @return An array of InternalFrameListeners that are listening to this
!    *         JInternalFrame.
!    */
!   public InternalFrameListener[] getInternalFrameListeners()
!   {
!     return (InternalFrameListener[]) listenerList.getListeners(InternalFrameListener.class);
!   }
! 
!   /**
!    * This method returns the JMenuBar for this JInternalFrame.
!    *
!    * @return The JMenuBar for this JInternalFrame.
!    */
!   public JMenuBar getJMenuBar()
!   {
!     return getRootPane().getJMenuBar();
!   }
! 
!   /**
!    * This method returns the layer that this JInternalFrame resides in.
!    *
!    * @return The layer that this JInternalFrame resides in.
!    */
!   public int getLayer()
!   {
!     JDesktopPane pane = getDesktopPane();
!     if (pane != null)
!       return pane.getLayer(this);
!     return -1;
!   }
! 
!   /**
!    * This method returns the LayeredPane for this JInternalFrame.
!    *
!    * @return The LayeredPane for this JInternalFrame.
!    */
!   public JLayeredPane getLayeredPane()
!   {
!     return getRootPane().getLayeredPane();
!   }
! 
!   /**
!    * This method is deprecated. This method returns the JMenuBar for this
!    * JInternalFrame.
!    *
!    * @return The JMenuBar for this JInternalFrame.
!    *
!    * @deprecated 1.0.3
!    */
!   public JMenuBar getMenuBar()
!   {
!     return getJMenuBar();
!   }
! 
!   /**
!    * This method returns the child Component that will receive focus when the
!    * JInternalFrame is selected. If the JInternalFrame is selected, this
!    * method returns getFocusOwner(). Otherwise, it will return the child
!    * Component that most recently requested focus. If that is null, then the
!    * initial focus Component is returned. If that is null, then the default
!    * focus component is returned.
!    *
!    * @return The most recent focus owner.
!    */
!   public Component getMostRecentFocusOwner()
!   {
!     if (isSelected())
!       return getFocusOwner();
!     else
!       return defaultFocus;
!   }
! 
!   /**
!    * This method returns the bounds of the JInternalFrame if it is not
!    * maximized. If it is maximized, it returns the bounds of the
!    * JInternalFrame before it was maximized (the bounds that it will be
!    * restored to).
!    *
!    * @return A Rectangle that contains this JInternalFrame's normal bounds (or
!    *         just its bounds if it is not maximized).
!    */
!   public Rectangle getNormalBounds()
!   {
!     if (! isMaximum() && ! maxTransition)
!       return getBounds();
!     else
!       return storedBounds;
!   }
! 
!   /**
!    * This method returns the Root Pane for this JInternalFrame.
!    *
!    * @return The Root Pane for this JInternalFrame.
!    */
!   public JRootPane getRootPane()
!   {
!     return rootPane;
!   }
! 
!   /**
!    * This method sets the title of the JInternalFrame.
!    *
!    * @return The String displayed in the TitlePane of this JInternalFrame.
!    */
!   public String getTitle()
!   {
!     return title;
!   }
! 
!   /**
!    * This method returns the UI used to represent the JInternalFrame.
!    *
!    * @return The UI used to represent the JInternalFrame.
!    */
!   public InternalFrameUI getUI()
!   {
!     return (InternalFrameUI) ui;
!   }
! 
!   /**
!    * This method returns a String identifier that is used to determine which
!    * class acts as the JInternalFrame's UI.
!    *
!    * @return A String identifier to determine a UI class.
!    */
!   public String getUIClassID()
!   {
!     return "InternalFrameUI";
!   }
! 
!   /**
!    * This method returns null.
!    *
!    * @return null.
!    */
!   public final String getWarningString()
!   {
!     // as defined.
!     return null;
!   }
! 
!   /**
!    * This method deselects this JInternalFrame and hides it.
!    */
!   public void hide()
!   {
!     JDesktopPane pane = getDesktopPane();
!     if (pane != null)
!       pane.setSelectedFrame(null);
!     else
!       {
! 	try
! 	  {
! 	    setSelected(false);
! 	  }
! 	catch (PropertyVetoException e)
! 	  {
! 	    // Do nothing.
! 	  }
!       }
!     super.hide();
!   }
! 
!   /**
!    * This method returns whether this JInternalFrame is closable.
!    *
!    * @return Whether this JInternalFrame is closable.
!    */
!   public boolean isClosable()
!   {
!     return closable;
!   }
! 
!   /**
!    * This method returns whether this JInternalFrame has been closed.
!    *
!    * @return Whether this JInternalFrame is closed.
!    */
!   public boolean isClosed()
!   {
!     return isClosed;
!   }
! 
!   /**
!    * This must always return true.
!    *
!    * @return always true
!    *
!    * @since 1.4
!    */
!   public final boolean isFocusCycleRoot()
!   {
!     return true;
!   }
! 
!   /**
!    * This method returns whether this JInternalFrame is currently iconified.
!    *
!    * @return Whether this JInternalFrame is currently iconified.
!    */
!   public boolean isIcon()
!   {
!     return isIcon;
!   }
! 
!   /**
!    * This method returns whether the JInternalFrame can be iconified.
!    *
!    * @return Whether the JInternalFrame can be iconified.
!    */
!   public boolean isIconifiable()
!   {
!     return iconable;
!   }
! 
!   /**
!    * This method returns whether this JInternalFrame can be maximized.
!    *
!    * @return Whether this JInternalFrame can be maximized.
!    */
!   public boolean isMaximizable()
!   {
!     return maximizable;
!   }
! 
!   /**
!    * This method returns whether this JInternalFrame is currently maximized.
!    *
!    * @return Whether this JInternalFrame is maximized.
!    */
!   public boolean isMaximum()
!   {
!     return isMaximum;
!   }
! 
!   /**
!    * This method returns whether this JInternalFrame is resizable.
!    *
!    * @return Whether this JInternalFrame is resizable.
!    */
!   public boolean isResizable()
!   {
!     return resizable;
!   }
! 
!   /**
!    * This method returns whether root pane checking is enabled. If root pane
!    * checking is enabled, then calls to addImpl and setLayout will throw
!    * exceptions.
!    *
!    * @return Whether root pane checking is enabled.
!    */
!   protected boolean isRootPaneCheckingEnabled()
!   {
!     return rootPaneCheckingEnabled;
!   }
! 
!   /**
!    * This method returns whether this JInternalFrame is selected.
!    *
!    * @return Whether this JInternalFrame is selected.
!    */
!   public boolean isSelected()
!   {
!     return isSelected;
!   }
! 
!   /**
!    * A helper method that moves this JInternalFrame to the back if the parent
!    * is a JLayeredPane.
!    */
!   public void moveToBack()
!   {
!     if (getParent() instanceof JLayeredPane)
!       ((JLayeredPane) getParent()).moveToBack(this);
!   }
! 
!   /**
!    * A helper method that moves this JInternalFrame to the front if the parent
!    * is a JLayeredPane.
!    */
!   public void moveToFront()
!   {
!     if (getParent() instanceof JLayeredPane)
!       ((JLayeredPane) getParent()).moveToFront(this);
!   }
! 
!   /**
!    * This method causes the children of this JInternalFrame to be laid out.
!    * Before it begins, if this JInternalFrame is an icon, then it will be
!    * deiconified. If it is maximized, then it will be restored. If either
!    * operation fails, then this method will return.
!    */
!   public void pack()
!   {
!     try
!       {
! 	if (isIcon())
! 	  setIcon(false);
! 	else if (isMaximum())
! 	  setMaximum(false);
!       }
!     catch (PropertyVetoException e)
!       {
! 	// Do nothing if they don't want to be restored first.
!       }
!     doLayout();
!   }
! 
!   /**
!    * This method is overridden to allow for speedier painting while this
!    * JInternalFramme is being dragged.
!    *
!    * @param g The Graphics object to paint with.
!    */
!   protected void paintComponent(Graphics g)
!   {
!     super.paintComponent(g);
!   }
! 
!   /**
!    * This method returns a String describing this JInternalFrame.
!    *
!    * @return A String describing this JInternalFrame.
!    */
!   protected String paramString()
!   {
!     return "JInternalFrame";
!   }
! 
!   /**
!    * This method removes the given Component from the Container.
!    *
!    * @param comp The Component to remove.
!    */
!   public void remove(Component comp)
!   {
!     super.remove(comp);
!   }
! 
!   /**
!    * This method removes an InternalFrameListener from this JInternalFrame.
!    *
!    * @param l The listener to remove.
!    */
!   public void removeInternalFrameListener(InternalFrameListener l)
!   {
!     listenerList.remove(InternalFrameListener.class, l);
!   }
! 
!   /**
!    * This method resizes and positions this JInternalFrame. It also forces a
!    * relayout of the Container.
!    *
!    * @param x The x position of this JInternalFrame.
!    * @param y The y position of this JInternalFrame.
!    * @param width The width of this JInternalFrame.
!    * @param height The height of this JInternalFrame.
!    */
!   public void reshape(int x, int y, int width, int height)
!   {
!     super.reshape(x, y, width, height);
!     invalidate();
!     doLayout();
!   }
! 
!   /**
!    * This method gives focus to the last child Component that had focus. This
!    * is used by the UI when this JInternalFrame is activated.
!    */
!   public void restoreSubcomponentFocus()
!   {
!     Component c = getMostRecentFocusOwner();
!     if (c != null)
!       c.requestFocus();
!   }
! 
!   /**
!    * This method sets whether this JInternalFrame can be closed.
!    *
!    * @param b Whether this JInternalFrame can be closed.
!    */
!   public void setClosable(boolean b)
!   {
!     closable = b;
!   }
! 
!   /**
!    * This method closes the JInternalFrame if the given boolean is true. If it
!    * is false, then the result of this method is unspecified. If the
!    * JInternalFrame is closed, this method does nothing. This method will
!    * first fire an INTERNAL_FRAME_CLOSING event and give a chance for veto
!    * listeners to cancel the close. If no listener vetoes the change, the
!    * closed property is set to true and the JInternalFrame is hidden and
!    * unselected. The method will finish by firing an INTERNAL_FRAME_CLOSED
!    * event.
!    *
!    * @param b Whether the JInternalFrame will be closed.
!    *
!    * @throws PropertyVetoException If a VetoableChangeListener vetoes the change.
!    */
!   public void setClosed(boolean b) throws PropertyVetoException
!   {
!     if (b && ! isClosed())
!       {
! 	fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_CLOSING);
! 	fireVetoableChange(IS_CLOSED_PROPERTY, false, true);
! 
! 	isClosed = b;
! 
! 	firePropertyChange(IS_CLOSED_PROPERTY, false, true);
! 	fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_CLOSED);
!       }
!   }
! 
!   /**
!    * This method sets the Container to be used as a Content Pane for this
!    * JInternalFrame.
!    *
!    * @param c The Container to use as a Content Pane.
!    */
!   public void setContentPane(Container c)
!   {
!     if (c != getContentPane())
!       {
! 	Container old = getContentPane();
! 	getRootPane().setContentPane(c);
! 	firePropertyChange(CONTENT_PANE_PROPERTY, old, c);
!       }
!   }
! 
!   /**
!    * This method sets the action taken when this JInternalFrame is closed.
!    *
!    * @param operation One of DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE or
!    *        DISPOSE_ON_CLOSE.
!    *
!    * @throws Error If the given operation is not one of the allowed modes.
!    */
!   public void setDefaultCloseOperation(int operation)
!   {
!     if (operation != DO_NOTHING_ON_CLOSE
! 	&& operation != HIDE_ON_CLOSE
!         && operation != DISPOSE_ON_CLOSE)
!       throw new Error("Close operation must be one of DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE, or DISPOSE_ON_CLOSE");
!     defaultCloseOperation = operation;
!   }
! 
!   /**
!    * This method sets the JDesktopIcon that represents this JInternalFrame
!    * while it is iconified.
!    *
!    * @param d The JDesktopIcon that represents this JInternalFrame while it is
!    *        iconified.
!    */
!   public void setDesktopIcon(JDesktopIcon d)
!   {
!     d.setInternalFrame(this);
!     desktopIcon = d;
!   }
! 
!   /**
!    * This method does nothing because this must be the root of a focus
!    * traversal cycle.
!    *
!    * @param focusCycleRoot Not used.
!    */
!   public final void setFocusCycleRoot(boolean focusCycleRoot)
!   {
!     // Do nothing
!   }
! 
!   /**
!    * This method sets the Icon to be used in two places. The first is icon
!    * that is painted at the top left corner of the JInternalFrame when it is
!    * not iconified (clicking on that icon will activate the TitlePane
!    * JMenuBar). When the JInternalFrame is iconified, it will be the icon
!    * displayed in the JDesktopIcon. If no icon is set, the JInternalFrame
!    * will use a Look and Feel default.
!    *
!    * @param icon The Icon used in the TitlePane JMenuBar and iconified frames.
!    */
!   public void setFrameIcon(Icon icon)
!   {
!     if (icon != frameIcon)
!       {
! 	Icon old = frameIcon;
! 	frameIcon = icon;
! 	firePropertyChange(FRAME_ICON_PROPERTY, old, frameIcon);
!       }
!   }
! 
!   /**
!    * This method sets the Glass Pane used with this JInternalFrame.
!    *
!    * @param glass The Glass Pane to use with this JInternalFrame.
!    */
!   public void setGlassPane(Component glass)
!   {
!     if (glass != getGlassPane())
!       {
! 	Component old = getGlassPane();
! 	getRootPane().setGlassPane(glass);
! 	firePropertyChange(GLASS_PANE_PROPERTY, old, glass);
!       }
!   }
! 
!   /**
!    * This method iconifies or deiconifies this JInternalFrame given the
!    * boolean argument. If the JInternalFrame becomes iconified, it will fire
!    * an INTERNAL_FRAME_ICONIFIED event. If the JInternalFrame becomes
!    * deiconified, it will fire anINTERNAL_FRAME_DEICONIFIED event.
!    *
!    * @param b Whether this JInternalFrame is to be iconified or deiconified.
!    *
!    * @throws PropertyVetoException DOCUMENT ME!
!    */
!   public void setIcon(boolean b) throws PropertyVetoException
!   {
!     if (b != isIcon())
!       {
! 	fireVetoableChange(IS_ICON_PROPERTY, b, isIcon);
! 
! 	isIcon = b;
! 
! 	firePropertyChange(IS_ICON_PROPERTY, ! isIcon, isIcon);
! 	if (b)
! 	  fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_ICONIFIED);
! 	else
! 	  fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_DEICONIFIED);
!       }
!   }
! 
!   /**
!    * This method sets whether the JInternalFrame can be iconified. (This means
!    * that the JInternalFrame can be turned into an icon if minimized).
!    *
!    * @param b Whether the JInternalFrame can be iconified.
!    */
!   public void setIconifiable(boolean b)
!   {
!     iconable = b;
!   }
! 
!   /**
!    * This method sets the JMenuBar to be used with this JInternalFrame.
!    *
!    * @param b The JMenuBar to be used with this JInternalFrame.
!    */
!   public void setJMenuBar(JMenuBar b)
!   {
!     getRootPane().setJMenuBar(b);
!   }
! 
!   /**
!    * A helper method that set the layer that this JInternalFrame resides in.
!    * Using this version of the method means that the user should not set it
!    * to values that are already defined in JLayeredPane. If predefined values
!    * are to be used, the user should use the setLayer(Integer) version.
!    *
!    * @param layer The layer to place this JInternalFrame in.
!    */
!   public void setLayer(int layer)
!   {
!     setLayer(new Integer(layer));
!   }
! 
!   /**
!    * A helper method that sets the layer that this JInternalFrame resides in.
!    * Calling this version of the method should use layer values that are
!    * already defined in JLayeredPane.
!    *
!    * @param layer The layer to place this JInternalFrame in.
!    */
!   public void setLayer(Integer layer)
!   {
!     JDesktopPane p = getDesktopPane();
!     if (p != null)
!       {
! 	int pos = p.getPosition(this);
! 	p.setLayer(this, layer.intValue(), pos);
!       }
!   }
! 
!   /**
!    * This method sets the JLayeredPane to use with this JInternalFrame.
!    *
!    * @param layered The JLayeredPane to use as a layeredPane.
!    */
!   public void setLayeredPane(JLayeredPane layered)
!   {
!     if (layered != getLayeredPane())
!       {
! 	JLayeredPane old = getLayeredPane();
! 	getRootPane().setLayeredPane(layered);
! 	firePropertyChange(LAYERED_PANE_PROPERTY, old, layered);
!       }
!   }
! 
!   /**
!    * This method sets whether the JInternalFrame can be maximized.
!    *
!    * @param b Whether this JInternalFrame can be maximized.
!    */
!   public void setMaximizable(boolean b)
!   {
!     maximizable = b;
!   }
! 
!   /**
!    * This method sets the Layout Manager used in the JInternalFrame. SetLayout
!    * should not be called on the JInternalFrame directly. Instead, it should
!    * be called with JInternalFrame.getContentPane().setLayout. Calls to this
!    * method with root pane checking enabled will cause exceptions to be
!    * thrown.
!    *
!    * @param manager The Layout Manager to be used with the JInternalFrame.
!    *
!    * @throws Error If rootPaneChecking is enabled.
!    */
!   public void setLayout(LayoutManager manager)
!   {
!     if (isRootPaneCheckingEnabled())
!       throw new Error("Cannot set layout. Use getContentPane().setLayout() instead.");
!     super.setLayout(manager);
!   }
! 
!   /**
!    * This method sets the JInternalFrame to maximized (if the given argument
!    * is true) or restores the JInternalFrame to its normal bounds otherwise.
!    *
!    * @param b Whether this JInteralFrame will be maximized or restored.
!    *
!    * @throws PropertyVetoException If a VetoableChangeListener vetoes the change.
!    */
!   public void setMaximum(boolean b) throws PropertyVetoException
!   {
!     if (b != isMaximum())
!       {
! 	fireVetoableChange(IS_MAXIMUM_PROPERTY, b, isMaximum);
! 	isMaximum = b;
! 	if (b)
! 	  setNormalBounds(getBounds());
! 	maxTransition = ! b;
! 	firePropertyChange(IS_MAXIMUM_PROPERTY, ! isMaximum, isMaximum);
! 	maxTransition = false;
!       }
!   }
! 
!   /**
!    * This method is deprecated. This method sets the JMenuBar used with this
!    * JInternalFrame.
!    *
!    * @param m The JMenuBar to use with this JInternalFrame.
!    *
!    * @deprecated 1.0.3
!    */
!   public void setMenuBar(JMenuBar m)
!   {
!     setJMenuBar(m);
!   }
! 
!   /**
!    * This method sets the bounds that this JInternalFrame will be restored to.
!    *
!    * @param r The bounds that this JInternalFrame will be restored to.
!    */
!   public void setNormalBounds(Rectangle r)
!   {
!     storedBounds.setBounds(r.x, r.y, r.width, r.height);
!   }
! 
!   /**
!    * This method sets whether the JInternalFrame can be resized by a user
!    * action (like dragging at the frame borders).
!    *
!    * @param b Whether this JInternalFramer can be resized.
!    */
!   public void setResizable(boolean b)
!   {
!     resizable = b;
!   }
! 
!   /**
!    * This method sets the Root Pane for this JInternalFrame.
!    *
!    * @param root The Root Pane for this JInternalFrame.
!    */
!   protected void setRootPane(JRootPane root)
!   {
!     if (rootPane != null)
!       remove(rootPane);
! 
!     rootPane = root;
!     add(root);
!   }
! 
!   /**
!    * This method sets whether root pane checking is enabled. If root pane
!    * checking is enabled, then calls to addImpl and setLayout will throw
!    * exceptions.
!    *
!    * @param enabled Whether root pane checking is enabled.
!    */
!   protected void setRootPaneCheckingEnabled(boolean enabled)
!   {
!     rootPaneCheckingEnabled = enabled;
!   }
! 
!   /**
!    * This method sets whether this JInternalFrame is the selected frame in the
!    * JDesktopPane (or other container). When selected, a JInternalFrame will
!    * have focus and paint its TitlePane differently (usually a different
!    * colour). If this method selects the frame, this JInternalFrame will fire
!    * an INTERNAL_FRAME_ACTIVATED event. If it deselects this frame, it will
!    * fire an INTERNAL_FRAME_DEACTIVATED event.
!    *
!    * @param selected Whether this JInternalFrame will become selected or
!    *        deselected.
!    *
!    * @throws PropertyVetoException If a VetoableChangeListener vetoes the change.
!    */
!   public void setSelected(boolean selected) throws PropertyVetoException
!   {
!     if (selected != isSelected())
!       {
! 	fireVetoableChange(IS_SELECTED_PROPERTY, selected, isSelected);
! 
! 	if (! selected)
! 	  defaultFocus = getMostRecentFocusOwner();
! 
! 	isSelected = selected;
! 
! 	if (selected)
! 	  restoreSubcomponentFocus();
! 
! 	firePropertyChange(IS_SELECTED_PROPERTY, ! isSelected, isSelected);
! 
! 	if (isSelected)
! 	  fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_ACTIVATED);
! 	else
! 	  fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_DEACTIVATED);
!       }
!   }
! 
!   /**
!    * This method sets the title displayed in the TitlePane of this
!    * JInternalFrame.
!    *
!    * @param title The title displayed.
!    */
!   public void setTitle(String title)
!   {
!     if (title == null && this.title == null)
!       return;
!     if (title == null || this.title == null || ! this.title.equals(title))
!       {
! 	String old = title;
! 	this.title = title;
! 	firePropertyChange(TITLE_PROPERTY, old, this.title);
!       }
!   }
! 
!   /**
!    * This method displays the JInternalFrame. If it is not visible, this
!    * method will bring this JInternalFrame to the front, make it visible and
!    * select it. If this is the first time this JInternalFrame is made
!    * visible, an INTERNAL_FRAME_OPENED event will be fired.
!    */
!   public void show()
!   {
!     if (! isVisible())
!       {
! 	moveToFront();
! 	super.show();
! 
! 	JDesktopPane pane = getDesktopPane();
! 	if (pane != null)
! 	  pane.setSelectedFrame(this);
! 	else
! 	  {
! 	    try
! 	      {
! 		setSelected(true);
! 	      }
! 	    catch (PropertyVetoException e)
! 	      {
! 		// Do nothing. if they don't want to be selected.
! 	      }
! 	  }
! 	if (isFirstTimeVisible)
! 	  {
! 	    isFirstTimeVisible = false;
! 	    fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_OPENED);
! 	  }
!       }
!   }
! 
!   /**
!    * This method is used to set the UI responsible for the JInternalFrame.
!    *
!    * @param ui The UI responsible for the JInternalFrame.
!    */
!   public void setUI(InternalFrameUI ui)
!   {
!     super.setUI(ui);
!   }
! 
!   /**
!    * This method causes the JInternalFrame to be brough to back in the
!    * z-order.
!    */
!   public void toBack()
!   {
!     moveToBack();
!   }
! 
!   /**
!    * This method causes the JInternalFrame to be brought to front in the
!    * z-order.
!    */
!   public void toFront()
!   {
!     moveToFront();
!   }
! 
!   /**
!    * This method resets the UI to the Look and Feel defaults.
!    */
!   public void updateUI()
!   {
!     setUI((InternalFrameUI) UIManager.getUI(this));
!   }
! 
!   /**
!    * This helper method allows JInternalFrames to signal that they were
!    * iconned for the first time.
!    *
!    * @param b Whether the JInternalFrame was iconned.
!    * @param ID The identifier of the property change event to fire if the
!    *        JInternalFrame is iconned for the first time.
!    */
!   void setWasIcon(boolean b, String ID)
!   {
!     if (b && ! wasIcon)
!       {
! 	wasIcon = b;
! 	firePropertyChange(ID, ! b, b);
!       }
!   }
! 
!   /**
!    * This helper method returns whether the JInternalFrame has been iconned
!    * once already.
!    *
!    * @return Whether the JInternalFrame has been iconned once already.
!    */
!   boolean getWasIcon()
!   {
!     return wasIcon;
!   }
! 
!   /**
!    * This method is a convenience method to fire vetoable property changes.
!    *
!    * @param name The identifier of the property change.
!    * @param oldValue The old value.
!    * @param newValue The new value.
!    *
!    * @throws PropertyVetoException Fired if a vetoable change listener vetoes
!    *         the change.
!    */
!   private void fireVetoableChange(String name, boolean oldValue,
!                                   boolean newValue)
!                            throws PropertyVetoException
!   {
!     super.fireVetoableChange(name, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JLabel.java gcc-4.0.0/libjava/javax/swing/JLabel.java
*** gcc-3.4.3/libjava/javax/swing/JLabel.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JLabel.java	Wed Feb 16 20:02:27 2005
***************
*** 1,5 ****
! /* JLabel.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JLabel.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,237 ****
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Image;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.swing.plaf.LabelUI;
  
  public class JLabel extends JComponent implements Accessible, SwingConstants
  {
!     String text;
!     Icon icon;
!     int gap;
!     int align;
  
!     int hor_align;
!     int hor_text_pos;
  
!     int vert_align;
!     int vert_text_pos;
  
!     public JLabel()
!     {
! 	this("", null, 0);
!     }
  
!     public JLabel(Icon image)
!     {
! 	this("", image, 0);
!     }
  
!     public JLabel(Icon image, int horizontalAlignment)
!     {
! 	this("", image, horizontalAlignment);
!     }
  
!     public JLabel(String text)
!     {
! 	this(text, null, 0);
!     }
  
!     public JLabel(String text, int horizontalAlignment)
!     {
! 	this(text, null, horizontalAlignment);
!     }
  
!     public JLabel(String text, Icon icon, int horizontalAlignment)
!     {
! 	// do the work.....
! 	this.text = text;
! 	setIcon(icon);
! 	this.align     = horizontalAlignment;
  
! 	updateUI(); // get a proper ui
!     } 
  
  
!     protected  int checkHorizontalKey(int key, String message)
!     {
! 	//    Verify that key is a legal value for the horizontalAlignment properties. 
! 	return 0;
!     }
!     protected  int checkVerticalKey(int key, String message)
!     {
! 	//      Verify that key is a legal value for the verticalAlignment or verticalTextPosition properties.  
! 	return 0;
!     }
!     public AccessibleContext getAccessibleContext()
!     {
! 	//          Get the AccessibleContext of this object 
! 	return null;
!     }
!     public Icon getDisabledIcon()
!     {
! 	//          Returns the value of the disabledIcon property if it's been set, If it hasn't been set and the value of the icon property is an ImageIcon, we compute a "grayed out" version of the icon and update the disabledIcon property with that.  
! 	return null;
!     }
!     public int getDisplayedMnemonic()
!     {
! 	//          Return the keycode that indicates a mnemonic key.   
! 	return 0;
!     }
!     public int getHorizontalAlignment()
!     {
! 	//          Returns the alignment of the label's contents along the X axis.   
! 	return hor_align;
!     }
!     public int getHorizontalTextPosition()
!     {
! 	//          Returns the horizontal position of the label's text, relative to its image.    
! 	return hor_text_pos;
!     }
  
!     public Icon getIcon()
!     {	return icon;    }
  
!     public int getIconTextGap()
!     {
! 	//          Returns the amount of space between the text and the icon displayed in this label.   
! 	return 0;
!     }
!     public Component getLabelFor()
!     {
! 	//          Get the component this is labelling.  
! 	return null;
!     }
!     public String getText()
!     {	return text;    }
  
!     public String getUIClassID()
!     {	return "JLabel";    }
  
!     public int getVerticalAlignment()
!     {
! 	//          Returns the alignment of the label's contents along the Y axis. 
! 	return vert_align;
!     }
!     public int getVerticalTextPosition()
!     {
! 	//          Returns the vertical position of the label's text, relative to its image. 
! 	return vert_text_pos;
!     }
  
!     public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h)
!     {
! 	//          This is overriden to return false if the current Icon's Image is not equal to the passed in Image img. 
! 	return (img == icon);
!     }
!     protected  String paramString()
!     {
! 	//          Returns a string representation of this JLabel.  
! 	return "JLabel";
!     }
!     public void setDisabledIcon(Icon disabledIcon)
!     {
! 	//          Set the icon to be displayed if this JLabel is "disabled" (JLabel.setEnabled(false)).  
!     }
!     public void setDisplayedMnemonic(char aChar)
!     {
! 	//          Specifies the displayedMnemonic as a char value.  
!     }
!     public void setDisplayedMnemonic(int key)
!     {
! 	//          Specify a keycode that indicates a mnemonic key.  
!     }
!     public void setHorizontalAlignment(int alignment)
!     {
! 	//          Sets the alignment of the label's contents along the X axis.  
! 	hor_align = alignment;
!     }
!     public void setHorizontalTextPosition(int textPosition)
!     {
! 	//          Sets the horizontal position of the label's text, relative to its image.  
! 	hor_text_pos = textPosition;
!     }
!     public void setIcon(Icon icon)
!     {
! 	this.icon = icon;
! 	if (icon != null)
! 	    {
!                   // XXX FIXME - icons do not know their parent
! //  		icon.setParent(this);
! 	    }
! 	revalidate();
! 	repaint();
!     }
  
!     public void setIconTextGap(int iconTextGap)
!     {
! 	gap = iconTextGap;
!     }
!   
!     public void setLabelFor(Component c)
!     {
! 	//          Set the component this is labelling.  
!     }
!     public void setText(String text)
!     {
! 	this.text = text;
! 	revalidate();
! 	repaint();
!     }
!   
!     public void setVerticalAlignment(int alignment)
!     {
! 	//          Sets the alignment of the label's contents along the Y axis.  
! 	vert_align = alignment;
!     }
!     public void setVerticalTextPosition(int textPosition)
!     {
! 	//          Sets the vertical position of the label's text, relative to its image.  
! 	vert_text_pos = textPosition;
!     }
!     public void updateUI()
!     {	
! 	LabelUI b = (LabelUI)UIManager.getUI(this);
! 	setUI(b);
!     }
  }
--- 39,647 ----
  package javax.swing;
  
  import java.awt.Component;
+ import java.awt.Font;
  import java.awt.Image;
+ import java.awt.event.KeyEvent;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.swing.plaf.LabelUI;
  
+ /**
+  * A swing widget that displays a text message and/or an icon.
+  */
  public class JLabel extends JComponent implements Accessible, SwingConstants
  {
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = 5496508283662221534L;
  
!   /**
!    * The Component the label will give focus to when its mnemonic is
!    * activated.
!    */
!   protected Component labelFor;
  
!   /** The label's text. */
!   private transient String text;
  
!   /** Where the label will be positioned horizontally. */
!   private transient int horizontalAlignment = LEADING;
  
!   /** Where the label text will be placed horizontally relative to the icon. */
!   private transient int horizontalTextPosition = TRAILING;
  
!   /** Where the label will be positioned vertically. */
!   private transient int verticalAlignment = CENTER;
  
!   /** Where the label text will be place vertically relative to the icon. */
!   private transient int verticalTextPosition = CENTER;
  
!   /** The icon painted when the label is enabled. */
!   private transient Icon icon;
  
!   /** The icon painted when the label is disabled. */
!   private transient Icon disabledIcon;
  
!   /** The label's mnemnonic key. */
!   private transient int displayedMnemonic = KeyEvent.VK_UNDEFINED;
  
+   /** The index of the menemonic character in the text. */
+   private transient int displayedMnemonicIndex = -1;
  
!   /** The gap between the icon and the text. */
!   private transient int iconTextGap = 4;
  
!   /**
!    * Creates a new horizontally and vertically centered JLabel object with no
!    * text and no icon.
!    */
!   public JLabel()
!   {
!     this(null, null, CENTER);
!   }
  
!   /**
!    * Creates a new horizontally and vertically centered JLabel object with no
!    * text and the given icon.
!    *
!    * @param image The icon to use with the label.
!    */
!   public JLabel(Icon image)
!   {
!     this(null, image, CENTER);
!   }
  
!   /**
!    * Creates a new vertically centered JLabel object with no text and the
!    * given icon and horizontal alignment. By default, the text is TRAILING
!    * the image.
!    *
!    * @param image The icon to use with the label.
!    * @param horizontalAlignment The horizontal alignment of the label.
!    */
!   public JLabel(Icon image, int horizontalAlignment)
!   {
!     this(null, image, horizontalAlignment);
!   }
  
!   /**
!    * Creates a new horizontally and vertically centered JLabel object with no
!    * icon and the given text.
!    *
!    * @param text The text to use with the label.
!    */
!   public JLabel(String text)
!   {
!     this(text, null, CENTER);
!   }
  
!   /**
!    * Creates a new vertically centered JLabel object with no icon and the
!    * given text and horizontal alignment.
!    *
!    * @param text The text to use with the label.
!    * @param horizontalAlignment The horizontal alignment of the label.
!    */
!   public JLabel(String text, int horizontalAlignment)
!   {
!     this(text, null, horizontalAlignment);
!   }
  
!   /**
!    * Creates a new vertically centered JLabel object with the given text,
!    * icon, and horizontal alignment.
!    *
!    * @param text The text to use with the label.
!    * @param icon The icon to use with the label.
!    * @param horizontalAlignment The horizontal alignment of the label.
!    */
!   public JLabel(String text, Icon icon, int horizontalAlignment)
!   {
!     this.text = text;
!     this.icon = icon;
!     this.horizontalAlignment = horizontalAlignment;
!     updateUI();
!   }
! 
!   /**
!    * This method returns the label's UI delegate.
!    *
!    * @return The label's UI delegate.
!    */
!   public LabelUI getUI()
!   {
!     return (LabelUI) ui;
!   }
! 
!   /**
!    * This method sets the label's UI delegate.
!    *
!    * @param ui The label's UI delegate.
!    */
!   public void setUI(LabelUI ui)
!   {
!     super.setUI(ui);
!   }
! 
!   /**
!    * This method resets the label's UI delegate to the default UI for the
!    * current look and feel.
!    */
!   public void updateUI()
!   {
!     setUI((LabelUI) UIManager.getUI(this));
!   }
! 
!   /**
!    * This method returns a name to identify which look and feel class will be
!    * the UI delegate for this label.
!    *
!    * @return The UIClass identifier. "LabelUI"
!    */
!   public String getUIClassID()
!   {
!     return "LabelUI";
!   }
! 
!   /**
!    * This method is used primarily for debugging purposes and returns a string
!    * that can be used to represent this label.
!    *
!    * @return A string to represent this label.
!    */
!   protected String paramString()
!   {
!     return "JLabel";
!   }
! 
!   /**
!    * This method returns the label text.
!    *
!    * @return The label text.
!    */
!   public String getText()
!   {
!     return text;
!   }
! 
!   /**
!    * This method changes the "text" property. The given text will be painted
!    * in the label.
!    *
!    * @param newText The label's text.
!    */
!   public void setText(String newText)
!   {
!     if (text != newText)
!       {
! 	String oldText = text;
! 	text = newText;
! 	firePropertyChange("text", oldText, newText);
! 
! 	if (text != null && text.length() <= displayedMnemonicIndex)
! 	  setDisplayedMnemonicIndex(text.length() - 1);
!       }
!   }
! 
!   /**
!    * This method returns the active icon. The active icon is painted when the
!    * label is enabled.
!    *
!    * @return The active icon.
!    */
!   public Icon getIcon()
!   {
!     return icon;
!   }
! 
!   /**
!    * This method changes the "icon" property. This icon (the active icon) will
!    * be the one displayed when the label is enabled.
!    *
!    * @param newIcon The active icon.
!    */
!   public void setIcon(Icon newIcon)
!   {
!     if (icon != newIcon)
!       {
! 	Icon oldIcon = icon;
! 	icon = newIcon;
! 	firePropertyChange("icon", oldIcon, newIcon);
!       }
!   }
! 
!   /**
!    * This method returns the disabled icon. The disabled icon is painted when
!    * the label is disabled. If the disabled icon is null and the active icon
!    * is an ImageIcon, this method returns a grayed version of the icon. The
!    * grayed  version of the icon becomes the disabledIcon.
!    *
!    * @return The disabled icon.
!    */
!   public Icon getDisabledIcon()
!   {
!     if (disabledIcon == null && icon instanceof ImageIcon)
!       disabledIcon = new ImageIcon(GrayFilter.createDisabledImage(((ImageIcon) icon)
!                                                                   .getImage()));
! 
!     return disabledIcon;
!   }
! 
!   /**
!    * This method changes the "disabledIcon" property. This icon (the disabled
!    * icon) will be the one displayed when the label is disabled.
!    *
!    * @param newIcon The disabled icon.
!    */
!   public void setDisabledIcon(Icon newIcon)
!   {
!     if (disabledIcon != newIcon)
!       {
! 	Icon oldIcon = disabledIcon;
! 	disabledIcon = newIcon;
! 	firePropertyChange("disabledIcon", oldIcon, newIcon);
!       }
!   }
! 
!   /**
!    * This method sets the keycode that will be the label's mnemonic. If the
!    * label is used as a label for another component, the label will give
!    * focus to that component when the mnemonic is activated.
!    *
!    * @param mnemonic The keycode to use for the mnemonic.
!    */
!   public void setDisplayedMnemonic(int mnemonic)
!   {
!     if (displayedMnemonic != mnemonic)
!       {
! 	firePropertyChange("displayedMnemonic",
! 	                   displayedMnemonic, mnemonic);
! 	displayedMnemonic = mnemonic;
! 
! 	if (text != null)
! 	  setDisplayedMnemonicIndex(text.toUpperCase().indexOf(mnemonic));
!       }
!   }
! 
!   /**
!    * This method sets the character that will be the mnemonic used. If the
!    * label is used as a label for another component, the label will give
!    * focus to that component when the mnemonic is activated.
!    *
!    * @param mnemonic The character to use for the mnemonic.
!    */
!   public void setDisplayedMnemonic(char mnemonic)
!   {
!     setDisplayedMnemonic((int) Character.toUpperCase(mnemonic));
!   }
! 
!   /**
!    * This method returns the keycode that is used for the label's mnemonic.
!    *
!    * @return The keycode that is used for the label's mnemonic.
!    */
!   public int getDisplayedMnemonic()
!   {
!     return (int) displayedMnemonic;
!   }
! 
!   /**
!    * This method sets which character in the text will be the underlined
!    * character. If the given index is -1, then this indicates  that there is
!    * no mnemonic. If the index is less than -1 or if the index is equal to
!    * the length, this method will throw an IllegalArgumentException.
!    *
!    * @param newIndex The index of the character to underline.
!    *
!    * @throws IllegalArgumentException If index less than -1 or index equals
!    *         length.
!    */
!   public void setDisplayedMnemonicIndex(int newIndex)
!     throws IllegalArgumentException
!   {
!     if (newIndex < -1 || (text != null && newIndex >= text.length()))
!       throw new IllegalArgumentException();
! 
!     if (newIndex == -1
!         || text == null
! 	|| text.charAt(newIndex) != displayedMnemonic)
!       newIndex = -1;
! 
!     if (newIndex != displayedMnemonicIndex)
!       {
! 	int oldIndex = displayedMnemonicIndex;
! 	displayedMnemonicIndex = newIndex;
! 	firePropertyChange("displayedMnemonicIndex",
! 	                   oldIndex, newIndex);
!       }
!   }
! 
!   /**
!    * This method returns which character in the text will be  the underlined
!    * character.
!    *
!    * @return The index of the character that will be underlined.
!    */
!   public int getDisplayedMnemonicIndex()
!   {
!     return displayedMnemonicIndex;
!   }
! 
!   /**
!    * This method ensures that the key is valid as a horizontal alignment.
!    * Valid keys are: LEFT, CENTER, RIGHT, LEADING, TRAILING
!    *
!    * @param key The key to check.
!    * @param message The message of the exception to be thrown if the key is
!    *        invalid.
!    *
!    * @return The key if it's valid.
!    *
!    * @throws IllegalArgumentException If the key is invalid.
!    */
!   protected int checkHorizontalKey(int key, String message)
!   {
!     if (key != LEFT && key != CENTER && key != RIGHT && key != LEADING
!         && key != TRAILING)
!       throw new IllegalArgumentException(message);
!     else
!       return key;
!   }
! 
!   /**
!    * This method ensures that the key is valid as a  vertical alignment. Valid
!    * keys are: TOP, CENTER, and BOTTOM.
!    *
!    * @param key The key to check.
!    * @param message The message of the exception to be thrown if the key is
!    *        invalid.
!    *
!    * @return The key if it's valid.
!    *
!    * @throws IllegalArgumentException If the key is invalid.
!    */
!   protected int checkVerticalKey(int key, String message)
!   {
!     if (key != TOP && key != BOTTOM && key != CENTER)
!       throw new IllegalArgumentException(message);
!     else
!       return key;
!   }
! 
!   /**
!    * This method returns the gap between the icon and the text.
!    *
!    * @return The gap between the icon and the text.
!    */
!   public int getIconTextGap()
!   {
!     return iconTextGap;
!   }
! 
!   /**
!    * This method changes the "iconTextGap" property. The iconTextGap
!    * determines how much space there is between the icon and the text.
!    *
!    * @param newGap The gap between the icon and the text.
!    */
!   public void setIconTextGap(int newGap)
!   {
!     if (iconTextGap != newGap)
!       {
! 	firePropertyChange("iconTextGap", iconTextGap, newGap);
! 	iconTextGap = newGap;
!       }
!   }
! 
!   /**
!    * This method returns the vertical alignment of the label.
!    *
!    * @return The vertical alignment of the label.
!    */
!   public int getVerticalAlignment()
!   {
!     return verticalAlignment;
!   }
! 
!   /**
!    * This method changes the "verticalAlignment" property of the label. The
!    * vertical alignment determines how where the label will be placed
!    * vertically. If the alignment is not valid, it will default to the
!    * center.
!    *
!    * @param alignment The vertical alignment of the label.
!    */
!   public void setVerticalAlignment(int alignment)
!   {
!     if (alignment == verticalAlignment)
!       return;
! 
!     int oldAlignment = verticalAlignment;
!     verticalAlignment = checkVerticalKey(alignment, "verticalAlignment");
!     firePropertyChange("verticalAlignment", oldAlignment, verticalAlignment);
!   }
! 
!   /**
!    * This method returns the horziontal alignment of the label.
!    *
!    * @return The horizontal alignment of the label.
!    */
!   public int getHorizontalAlignment()
!   {
!     return horizontalAlignment;
!   }
! 
!   /**
!    * This method changes the "horizontalAlignment" property. The horizontal
!    * alignment determines where the label will be placed horizontally.
!    *
!    * @param alignment The horizontal alignment of the label.
!    */
!   public void setHorizontalAlignment(int alignment)
!   {
!     if (horizontalAlignment == alignment)
!       return;
!     
!     int oldAlignment = horizontalAlignment;
!     horizontalAlignment = checkHorizontalKey(alignment, "horizontalAlignment");
!     firePropertyChange("horizontalAlignment", oldAlignment,
!                        horizontalAlignment);
!   }
! 
!   /**
!    * This method returns the vertical text position of the label.
!    *
!    * @return The vertical text position of the label.
!    */
!   public int getVerticalTextPosition()
!   {
!     return verticalTextPosition;
!   }
! 
!   /**
!    * This method changes the "verticalTextPosition" property of the label. The
!    * vertical text position determines where the text will be placed
!    * vertically relative to the icon.
!    *
!    * @param textPosition The vertical text position.
!    */
!   public void setVerticalTextPosition(int textPosition)
!   {
!     if (textPosition != verticalTextPosition)
!       {
! 	int oldPos = verticalTextPosition;
! 	verticalTextPosition = checkVerticalKey(textPosition,
! 	                                        "verticalTextPosition");
! 	firePropertyChange("verticalTextPosition", oldPos,
! 	                   verticalTextPosition);
!       }
!   }
! 
!   /**
!    * This method returns the horizontal text position of the label.
!    *
!    * @return The horizontal text position.
!    */
!   public int getHorizontalTextPosition()
!   {
!     return horizontalTextPosition;
!   }
! 
!   /**
!    * This method changes the "horizontalTextPosition" property of the label.
!    * The horizontal text position determines where the text will be placed
!    * horizontally relative to the icon.
!    *
!    * @param textPosition The horizontal text position.
!    */
!   public void setHorizontalTextPosition(int textPosition)
!   {
!     if (textPosition != horizontalTextPosition)
!       {
! 	int oldPos = horizontalTextPosition;
! 	horizontalTextPosition = checkHorizontalKey(textPosition,
! 	                                            "horizontalTextPosition");
! 	firePropertyChange("horizontalTextPosition", oldPos,
! 	                   horizontalTextPosition);
!       }
!   }
! 
!   /**
!    * This method simply returns false if the current icon image (current  icon
!    * will depend on whether the label is enabled) is not equal to the passed
!    * in image.
!    *
!    * @param img The image to check.
!    * @param infoflags The bitwise inclusive OR of ABORT, ALLBITS, ERROR,
!    *        FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, and WIDTH
!    * @param x The x position
!    * @param y The y position
!    * @param w The width
!    * @param h The height
!    *
!    * @return Whether the current icon image is equal to the image given.
!    */
!   public boolean imageUpdate(Image img, int infoflags, int x, int y, int w,
!                              int h)
!   {
!     Icon currIcon = isEnabled() ? icon : disabledIcon;
! 
!     // XXX: Is this the correct way to check for image equality?
!     if (currIcon != null && currIcon instanceof ImageIcon)
!       return (((ImageIcon) currIcon).getImage() == img);
! 
!     return false;
!   }
! 
!   /**
!    * This method returns the component that the label gives focus to  when the
!    * mnemonic is activated.
!    *
!    * @return The component that gets focus when the label's mnemonic is
!    *         activated.
!    */
!   public Component getLabelFor()
!   {
!     return labelFor;
!   }
! 
!   /**
!    * This method changes the "labelFor" property. The component that the label
!    * is acting as a label for will request focus when the label's  mnemonic
!    * is activated.
!    *
!    * @param c The component that gets focus when the label's mnemonic is
!    *        activated.
!    */
!   public void setLabelFor(Component c)
!   {
!     if (c != labelFor)
!       {
! 	Component oldLabelFor = labelFor;
! 	labelFor = c;
! 	firePropertyChange("labelFor", oldLabelFor, labelFor);
!       }
!   }
! 
!   /**
!    * This method overrides setFont so that we can call for a repaint after the
!    * font is changed.
!    *
!    * @param f The font for this label.
!    */
!   public void setFont(Font f)
!   {
!     super.setFont(f);
!     repaint();
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     return null;
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JLayeredPane.java gcc-4.0.0/libjava/javax/swing/JLayeredPane.java
*** gcc-3.4.3/libjava/javax/swing/JLayeredPane.java	Fri Jan  9 22:52:18 2004
--- gcc-4.0.0/libjava/javax/swing/JLayeredPane.java	Wed Feb 16 20:02:28 2005
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
*************** import java.util.Hashtable;
*** 42,47 ****
--- 43,49 ----
  import java.util.Iterator;
  import java.util.Map;
  import java.util.TreeMap;
+ 
  import javax.accessibility.Accessible;
  
  /**
*************** import javax.accessibility.Accessible;
*** 82,98 ****
   * <dd>An offset into a layer's "logical drawing order". Layer position 0
   * is drawn last. Layer position -1 is a synonym for the first layer
   * position (the logical "bottom").</dd>
   *
   * <p><b>Note:</b> the layer numbering order is the <em>reverse</em> of the
   * component indexing and position order</p>
   *
!  * @author Graydon Hoare <graydon@redhat.com>
   */
- 
  public class JLayeredPane extends JComponent implements Accessible
  {
! 
!   public static String LAYER_PROPERTY = "LAYER_PROPERTY";
  
    public static Integer FRAME_CONTENT_LAYER = new Integer (-30000);
  
--- 84,101 ----
   * <dd>An offset into a layer's "logical drawing order". Layer position 0
   * is drawn last. Layer position -1 is a synonym for the first layer
   * position (the logical "bottom").</dd>
+  * </dl>
   *
   * <p><b>Note:</b> the layer numbering order is the <em>reverse</em> of the
   * component indexing and position order</p>
   *
!  * @author Graydon Hoare (graydon@redhat.com)
   */
  public class JLayeredPane extends JComponent implements Accessible
  {
!   private static final long serialVersionUID = 5534920399324590459L;
!   
!   public static final String LAYER_PROPERTY = "layeredContainerLayer";
  
    public static Integer FRAME_CONTENT_LAYER = new Integer (-30000);
  
*************** public class JLayeredPane extends JCompo
*** 105,111 ****
    TreeMap layers;               // Layer Number (Integer) -> Layer Size (Integer)
    Hashtable componentToLayer;   // Component -> Layer Number (Integer)
  
!   JLayeredPane()
    {
      layers = new TreeMap ();
      componentToLayer = new Hashtable ();
--- 108,114 ----
    TreeMap layers;               // Layer Number (Integer) -> Layer Size (Integer)
    Hashtable componentToLayer;   // Component -> Layer Number (Integer)
  
!   public JLayeredPane()
    {
      layers = new TreeMap ();
      componentToLayer = new Hashtable ();
*************** public class JLayeredPane extends JCompo
*** 119,130 ****
     * @return the layer the component is currently assigned to, in this container.
     * @throws IllegalArgumentException if the component is not a child of this container.
     */
! 
!   protected Integer getLayer (Component c)
    {
      if (! componentToLayer.containsKey (c))
  	    throw new IllegalArgumentException ();
!     return (Integer) componentToLayer.get (c);
    }
  
    /**
--- 122,132 ----
     * @return the layer the component is currently assigned to, in this container.
     * @throws IllegalArgumentException if the component is not a child of this container.
     */
!   public int getLayer(Component c)
    {
      if (! componentToLayer.containsKey (c))
  	    throw new IllegalArgumentException ();
!     return ((Integer) componentToLayer.get(c)).intValue();
    }
  
    /**
*************** public class JLayeredPane extends JCompo
*** 141,148 ****
     * @throws IllegalArgumentException if layer does not refer to an active layer
     * in this container.
     */
! 
!   protected int[] layerToRange (Integer layer)
    {
      int[] ret = new int[2];
      ret[1] = getComponents ().length;
--- 143,149 ----
     * @throws IllegalArgumentException if layer does not refer to an active layer
     * in this container.
     */
!   private int[] layerToRange (Integer layer)
    {
      int[] ret = new int[2];
      ret[1] = getComponents ().length;
*************** public class JLayeredPane extends JCompo
*** 152,158 ****
          Map.Entry pair = (Map.Entry) i.next();
          Integer layerNum = (Integer) pair.getKey ();
          Integer layerSz = (Integer) pair.getValue ();
!         if (layerNum == layer)
            {
              ret[0] = ret[1] - layerSz.intValue ();
              return ret;
--- 153,159 ----
          Map.Entry pair = (Map.Entry) i.next();
          Integer layerNum = (Integer) pair.getKey ();
          Integer layerSz = (Integer) pair.getValue ();
!         if (layerNum.intValue() == layer.intValue())
            {
              ret[0] = ret[1] - layerSz.intValue ();
              return ret;
*************** public class JLayeredPane extends JCompo
*** 172,179 ****
     * @param layer the layer number to increment.
     * @see #incrLayer()
     */
! 
!   protected void incrLayer(Integer layer)
    {
      int sz = 1;
      if (layers.containsKey (layer))
--- 173,179 ----
     * @param layer the layer number to increment.
     * @see #incrLayer()
     */
!   private void incrLayer(Integer layer)
    {
      int sz = 1;
      if (layers.containsKey (layer))
*************** public class JLayeredPane extends JCompo
*** 187,194 ****
     * @param layer the layer number to decrement.
     * @see #decrLayer()
     */
! 
!   protected void decrLayer(Integer layer)
    {
      int sz = 0;
      if (layers.containsKey (layer))
--- 187,193 ----
     * @param layer the layer number to decrement.
     * @see #decrLayer()
     */
!   private void decrLayer(Integer layer)
    {
      int sz = 0;
      if (layers.containsKey (layer))
*************** public class JLayeredPane extends JCompo
*** 203,209 ****
     * @return the least layer number.
     * @see #lowestLayer()
     */
- 
    public int highestLayer()
    {
      if (layers.size() == 0)
--- 202,207 ----
*************** public class JLayeredPane extends JCompo
*** 218,224 ****
     * @return the least layer number.
     * @see #highestLayer()
     */
-     
    public int lowestLayer()
    {
      if (layers.size() == 0)
--- 216,221 ----
*************** public class JLayeredPane extends JCompo
*** 237,243 ****
     * this container.
     * @see #moveToBack()
     */
- 
    public void moveToFront(Component c)
    {
      setPosition (c, 0);
--- 234,239 ----
*************** public class JLayeredPane extends JCompo
*** 257,263 ****
     * this container.
     * @see #moveToFront()
     */
- 
    public void moveToBack(Component c)
    {
      setPosition (c, -1);
--- 253,258 ----
*************** public class JLayeredPane extends JCompo
*** 273,283 ****
     * this container.
     * @see #setPosition()
     */
-     
    public int getPosition(Component c)
    {
!     Integer layer = getLayer (c);
!     int[] range = layerToRange (layer);
      int top = range[0];
      int bot = range[1];
      Component[] comps = getComponents ();
--- 268,277 ----
     * this container.
     * @see #setPosition()
     */
    public int getPosition(Component c)
    {
!     int layer = getLayer (c);
!     int[] range = layerToRange(new Integer(layer));
      int top = range[0];
      int bot = range[1];
      Component[] comps = getComponents ();
*************** public class JLayeredPane extends JCompo
*** 301,336 ****
     * this container.
     * @see #getPosition()
     */
- 
    public void setPosition(Component c, int position)
    {
!     Integer layer = getLayer (c);
!     int[] range = layerToRange (layer);
      if (range[0] == range[1])
! 	    throw new IllegalArgumentException ();
  
      int top = range[0];
      int bot = range[1];
      if (position == -1)
! 	    position = (bot - top) - 1;
!     int targ = top + position;
      int curr = -1;
  
      Component[] comps = getComponents();
      for (int i = top; i < bot; ++i)
! 	    {
          if (comps[i] == c)
            {
              curr = i;
              break;
            }
! 	    }
      if (curr == -1)
! 	    // should have found it
! 	    throw new IllegalArgumentException ();
  
      super.swapComponents (curr, targ);
!     validate();
      repaint();
    }
      
--- 295,329 ----
     * this container.
     * @see #getPosition()
     */
    public void setPosition(Component c, int position)
    {
!     int layer = getLayer (c);
!     int[] range = layerToRange(new Integer(layer));
      if (range[0] == range[1])
!       throw new IllegalArgumentException ();
  
      int top = range[0];
      int bot = range[1];
      if (position == -1)
!       position = (bot - top) - 1;
!     int targ = Math.min(top + position, bot-1);
      int curr = -1;
  
      Component[] comps = getComponents();
      for (int i = top; i < bot; ++i)
!       {
          if (comps[i] == c)
            {
              curr = i;
              break;
            }
!       }
      if (curr == -1)
!       // should have found it
!       throw new IllegalArgumentException();
  
      super.swapComponents (curr, targ);
!     revalidate();
      repaint();
    }
      
*************** public class JLayeredPane extends JCompo
*** 342,348 ****
     * @param layer the layer to return components from.
     * @return the components in the layer.
     */
- 
    public Component[] getComponentsInLayer(int layer)
    {
      int[] range = layerToRange (getObjectForLayer (layer));
--- 335,340 ----
*************** public class JLayeredPane extends JCompo
*** 366,372 ****
     * @param layer the layer count components in.
     * @return the number of components in the layer.
     */
- 
    public int getComponentCountInLayer(int layer)
    {
      int[] range = layerToRange (getObjectForLayer (layer));
--- 358,363 ----
*************** public class JLayeredPane extends JCompo
*** 380,386 ****
     * Return a hashtable mapping child components of this container to
     * Integer objects representing the component's layer assignments.
     */
- 
    protected Hashtable getComponentToLayer()
    {
      return componentToLayer;
--- 371,376 ----
*************** public class JLayeredPane extends JCompo
*** 397,407 ****
     * @throws IllegalArgumentException if the component is not a child of
     * this container.
     */
- 
    public int getIndexOf(Component c) 
    {
!     Integer layer = getLayer (c);
!     int[] range = layerToRange (layer);
      Component[] comps = getComponents();
      for (int i = range[0]; i < range[1]; ++i)
  	    {
--- 387,396 ----
     * @throws IllegalArgumentException if the component is not a child of
     * this container.
     */
    public int getIndexOf(Component c) 
    {
!     int layer = getLayer (c);
!     int[] range = layerToRange(new Integer(layer));
      Component[] comps = getComponents();
      for (int i = range[0]; i < range[1]; ++i)
  	    {
*************** public class JLayeredPane extends JCompo
*** 420,426 ****
     * @param layer the layer number as an int.
     * @return the layer number as an Integer, possibly shared.
     */
- 
    protected Integer getObjectForLayer(int layer)
    {
      switch (layer)
--- 409,414 ----
*************** public class JLayeredPane extends JCompo
*** 459,465 ****
     * @param position the position in the layer at which to insert a component.
     * @return the index at which to insert the component.
     */
-     
    protected int insertIndexForLayer(int layer, int position)
    {
  
--- 447,452 ----
*************** public class JLayeredPane extends JCompo
*** 485,498 ****
     *
     * @param index the index of the child component to remove.
     */
-     
    public void remove (int index)
    {
      Component c = getComponent (index);
!     Integer layer = getLayer (c);
!     decrLayer (layer);
      componentToLayer.remove (c);
      super.remove (index);
    }
  
    /**
--- 472,486 ----
     *
     * @param index the index of the child component to remove.
     */
    public void remove (int index)
    {
      Component c = getComponent (index);
!     int layer = getLayer (c);
!     decrLayer (new Integer(layer));
      componentToLayer.remove (c);
      super.remove (index);
+     revalidate();
+     repaint();
    }
  
    /**
*************** public class JLayeredPane extends JCompo
*** 501,507 ****
     *
     * @param comp the child to remove.
     */
- 	
    public void remove (Component comp)
    {
      remove (getIndexOf (comp));
--- 489,494 ----
*************** public class JLayeredPane extends JCompo
*** 518,524 ****
     * @param c the component to set the layer property for.
     * @param layer the layer number to assign to the component.
     */
- 
    public void setLayer(Component c, int layer)
    {
      componentToLayer.put (c, getObjectForLayer (layer));
--- 505,510 ----
*************** public class JLayeredPane extends JCompo
*** 531,544 ****
     * @param layer the layer number to assign to the component.
     * @param position the position number to assign to the component.
     */
- 
    public void setLayer(Component c,
                         int layer,
                         int position)
    {
!     componentToLayer.put (c, getObjectForLayer (layer));
      setPosition(c, position);
!     validate();
      repaint();
    }
  
--- 517,530 ----
     * @param layer the layer number to assign to the component.
     * @param position the position number to assign to the component.
     */
    public void setLayer(Component c,
                         int layer,
                         int position)
    {
!     remove(c);
!     add(c, getObjectForLayer (layer));
      setPosition(c, position);
!     revalidate();
      repaint();
    }
  
*************** public class JLayeredPane extends JCompo
*** 552,558 ****
     * @param layerConstraint an integer specifying the layer to add the component to.
     * @param index an ignored parameter, for compatibility.
     */
- 
    protected void addImpl(Component comp, Object layerConstraint, int index) 
    {        	
      Integer layer;
--- 538,543 ----
*************** public class JLayeredPane extends JCompo
*** 563,575 ****
      else
  	    layer = DEFAULT_LAYER;
  
!     int newIdx = insertIndexForLayer(layer.intValue (), -1);
  
      componentToLayer.put (comp, layer);
      incrLayer (layer);
  	
      super.addImpl(comp, null, newIdx);	
!     validate();
      repaint();
    }     
  }
--- 548,560 ----
      else
  	    layer = DEFAULT_LAYER;
  
!     int newIdx = insertIndexForLayer(layer.intValue (), index);
  
      componentToLayer.put (comp, layer);
      incrLayer (layer);
  	
      super.addImpl(comp, null, newIdx);	
!     revalidate();
      repaint();
    }     
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JList.java gcc-4.0.0/libjava/javax/swing/JList.java
*** gcc-3.4.3/libjava/javax/swing/JList.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JList.java	Thu Feb 17 07:48:51 2005
***************
*** 1,5 ****
! /* JList.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JList.java --
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,238 ****
  package javax.swing;
  
  import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.Rectangle;
  import java.util.Vector;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.swing.event.ListDataEvent;
  import javax.swing.event.ListDataListener;
  import javax.swing.event.ListSelectionListener;
  import javax.swing.plaf.ListUI;
  
  public class JList extends JComponent implements Accessible, Scrollable
  {
!     Color select_back, select_fore;
!     ListCellRenderer render;
!     int visibles = 8;
!     
!     ListModel          model;
!     ListSelectionModel sel_model;
  
!     public JList()
!     {	
! 	init();
!     }
  
!     public JList(Object[] listData)
!     {
! 	init();
! 	setListData(listData);
!     }
  
  
!     public JList(Vector listData)
!     {
! 	init();
! 	setListData(listData);
!     }
  
  
!     public JList(ListModel listData)
!     {
! 	init();
! 	setModel(listData);
!     }
!     void init()
!     {
! 	render = new DefaultCellRenderer();
! 	
! 	sel_model = new DefaultListSelectionModel();
! 	setModel(new DefaultListModel());
  
! 	select_back = new Color(0,0,255);
! 	select_fore = new Color(255,255,255);
  
! 	updateUI();
!     }
  
!     
!     public int getVisibleRowCount()
!     { return visibles; }
!     public void setVisibleRowCount(int visibleRowCount)
!     {
! 	visibles =  visibleRowCount;
! 	invalidate();
! 	repaint();
!     }
  
!     void addListSelectionListener(ListSelectionListener listener)
!     { sel_model.addListSelectionListener(listener);    }
!     void removeListSelectionListener(ListSelectionListener listener)
!     { sel_model.removeListSelectionListener(listener);    }
  
-     void setSelectionMode(int a)
-     {  sel_model.setSelectionMode(a);   }
-     void setSelectedIndex(int a)
-     {  sel_model.setSelectionInterval(a,a); }
-     int getSelectedIndex()
-     {	return sel_model.getMinSelectionIndex();    }
-     Object getSelectedValue()
-     {  
- 	int index = getSelectedIndex();
- 	if (index == -1)
- 	    return null;
- 	return getModel().getElementAt(index);
-     }
  
!     Color getSelectionBackground()
!     { return select_back;    }    
!     Color getSelectionForeground()
!     { return select_fore;    }
  
  
!     public void setListData(final Object[] listData)
      {
! 	class AL extends AbstractListModel
! 	{
! 	    public int getSize()              { return listData.length; }
! 	    public Object getElementAt(int i) { return listData[i];     }
! 	};
! 	
! 	setModel (new AL());
      }
!     
!     public void setListData(final Vector listData)
      {
! 	class AL extends AbstractListModel 
! 	{
! 	    public int getSize()              { return listData.size(); }
! 	    public Object getElementAt(int i) { return listData.elementAt(i); }
! 	};
! 	
!         setModel (new AL());
      }
!     
!     
!     public ListCellRenderer getCellRenderer()
!     {    return  render; }
!     public void setCellRenderer(ListCellRenderer cellRenderer)
      {
! 	render = cellRenderer;
! 	invalidate();
! 	repaint();
      }
!     
!     public void setModel(ListModel model)
      {
! 	ListDataListener l = new ListDataListener()
! 	    {
! 		public void intervalAdded(ListDataEvent e) {
! 		    repaint();
! 		}
! 		public void intervalRemoved(ListDataEvent e) {
! 		    repaint();
! 		}
! 		public void contentsChanged(ListDataEvent e) {
! 		    repaint();
! 		}
! 	    };
! 	
! 	this.model = model;  
! 	model.addListDataListener(l);	
      }
  
!     public ListModel getModel() 
!     {  return model;        }
!     
      
!     public ListUI getUI()
!     {  return (ListUI) ui;    }
!     public void setUI(ListUI ui)
!     {   super.setUI(ui);      }
  
!     public void updateUI()
!     {
!         setUI((ListUI)UIManager.getUI(this));
!     }
  
!     public String getUIClassID()
!     {
! 	return "JList";
!     }
  
  
!     public AccessibleContext getAccessibleContext()
!     {
!       return null;
!     }
  
!     public Dimension getPreferredScrollableViewportSize()
!     {
  	return null;
!     }
  
!     public int getScrollableUnitIncrement(Rectangle visibleRect,
! 					  int orientation,
! 					  int direction)
!     {
! 	return 1;
!     }
  
!     public int getScrollableBlockIncrement(Rectangle visibleRect,
! 					   int orientation,
! 					   int direction)
!     {
! 	return 1;
!     }
  
!     public boolean getScrollableTracksViewportWidth()
!     {
! 	return false;
!     }
  
!     public boolean getScrollableTracksViewportHeight()
!     {
! 	return false;
!     }
      
  }
--- 39,1326 ----
  package javax.swing;
  
  import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.ComponentOrientation;
  import java.awt.Dimension;
+ import java.awt.Point;
  import java.awt.Rectangle;
  import java.util.Vector;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.swing.event.ListDataEvent;
  import javax.swing.event.ListDataListener;
+ import javax.swing.event.ListSelectionEvent;
  import javax.swing.event.ListSelectionListener;
  import javax.swing.plaf.ListUI;
  
+ /**
+  * <p>This class is a facade over three separate objects: {@link
+  * javax.swing.ListModel}, {@link javax.swing.ListSelectionModel} and
+  * {@link javax.swing.plaf.ListUI}. The facade represents a unified "list"
+  * concept, with independently replacable (possibly client-provided) models
+  * for its contents and its current selection. In addition, each element in
+  * the list is rendered via a strategy class {@link
+  * javax.swing.ListCellRenderer}.</p>
+  *
+  * <p>Lists have many properties, some of which are stored in this class
+  * while others are delegated to the list's model or selection. The
+  * following properties are available:</p>
+  *
+  * <table>
+  * <tr><th>Property                       </th><th>Stored in</th><th>Bound?</th></tr>
+  * <tr><td>accessibleContext              </td><td>list     </td><td>no    </td></tr>
+  * <tr><td>anchorSelectionIndex           </td><td>selection</td><td>no    </td></tr>
+  * <tr><td>cellRenderer                   </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>dragEnabled                    </td><td>list     </td><td>no    </td></tr>
+  * <tr><td>firstVisibleIndex              </td><td>list     </td><td>no    </td></tr>
+  * <tr><td>fixedCellHeight                </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>fixedCellWidth                 </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>lastVisibleIndex               </td><td>list     </td><td>no    </td></tr>
+  * <tr><td>layoutOrientation              </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>leadSelectionIndex             </td><td>selection</td><td>no    </td></tr>
+  * <tr><td>maxSelectionIndex              </td><td>selection</td><td>no    </td></tr>
+  * <tr><td>minSelectionIndex              </td><td>selection</td><td>no    </td></tr>
+  * <tr><td>model                          </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>opaque                         </td><td>list     </td><td>no    </td></tr>
+  * <tr><td>preferredScrollableViewportSize</td><td>list     </td><td>no    </td></tr>
+  * <tr><td>prototypeCellValue             </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>scrollableTracksViewportHeight </td><td>list     </td><td>no    </td></tr>
+  * <tr><td>scrollableTracksViewportWidth  </td><td>list     </td><td>no    </td></tr>
+  * <tr><td>selectedIndex                  </td><td>selection</td><td>no    </td></tr>
+  * <tr><td>selectedIndices                </td><td>selection</td><td>no    </td></tr>
+  * <tr><td>selectedValue                  </td><td>model    </td><td>no    </td></tr>
+  * <tr><td>selectedValues                 </td><td>model    </td><td>no    </td></tr>
+  * <tr><td>selectionBackground            </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>selectionEmpty                 </td><td>selection</td><td>no    </td></tr>
+  * <tr><td>selectionForeground            </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>selectionMode                  </td><td>selection</td><td>no    </td></tr>
+  * <tr><td>selectionModel                 </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>UI                             </td><td>list     </td><td>yes   </td></tr>
+  * <tr><td>UIClassID                      </td><td>list     </td><td>no    </td></tr>
+  * <tr><td>valueIsAdjusting               </td><td>list     </td><td>no    </td></tr>
+  * <tr><td>visibleRowCount                </td><td>list     </td><td>no    </td></tr>
+  * </table> 
+  *
+  * @author Graydon Hoare (graydon@redhat.com)
+  */
+ 
  public class JList extends JComponent implements Accessible, Scrollable
  {
!   private static final long serialVersionUID = 4406629526391098046L;
  
!   /** 
!    * Constant value used in "layoutOrientation" property. This value means
!    * that cells are laid out in a single vertical column. This is the default. 
!    */
!   public static final int VERTICAL = 0;
  
!   /** 
!    * Constant value used in "layoutOrientation" property. This value means
!    * that cells are laid out in multiple columns "newspaper style", filling
!    * vertically first, then horizontally. 
!    */
!   public static final int VERTICAL_WRAP = 1;
!   
!   /** 
!    * Constant value used in "layoutOrientation" property. This value means
!    * that cells are laid out in multiple columns "newspaper style",
!    * filling horizontally first, then vertically. 
!    */
!   public static final int HORIZONTAL_WRAP = 2;
  
+   /**
+    * This property indicates whether "drag and drop" functions are enabled
+    * on the list.
+    */
+   boolean dragEnabled;
  
!   /** This property provides a strategy for rendering cells in the list. */
!   ListCellRenderer cellRenderer;
  
+   /**
+    * This property indicates an fixed width to assign to all cells in the
+    * list. If its value is <code>-1</code>, no width has been
+    * assigned. This value can be set explicitly, or implicitly by setting
+    * the {@link #prototypeCellValue} property.
+    */
+   int fixedCellWidth;
+   
+   /**
+    * This property indicates an fixed height to assign to all cells in the
+    * list. If its value is <code>-1</code>, no height has been
+    * assigned. This value can be set explicitly, or implicitly by setting
+    * the {@link #prototypeCellValue} property.
+    */
+   int fixedCellHeight;
  
!   /** 
!    * This property holds the current layout orientation of the list, which
!    * is one of the integer constants {@link #VERTICAL}, {@link
!    * #VERTICAL_WRAP}, or {@link #HORIZONTAL_WRAP}. 
!    */
!   int layoutOrientation;
!   
!   /** This property holds the data elements displayed by the list. */
!   ListModel model;
  
!   /**
!    * <p>This property holds a reference to a "prototype" data value --
!    * typically a String -- which is used to calculate the {@link
!    * #fixedCellWidth} and {@link #fixedCellHeight} properties, using the
!    * {@link #cellRenderer} property to acquire a component to render the
!    * prototype.</p>
!    *
!    * <p>It is important that you <em>not</em> set this value to a
!    * component. It has to be a <em>data value</em> such as the objects you
!    * would find in the list's model. Setting it to a component will have
!    * undefined (and undesirable) affects. </p>
!    */
!   Object prototypeCellValue;
  
!   /** 
!    * This property specifies a foreground color for the selected cells in
!    * the list. When {@link ListCellRenderer.getListCellRendererComponent}
!    * is called with a selected cell object, the component returned will
!    * have its "foreground" set to this color.
!    */
!   Color selectionBackground;
  
!   /** 
!    * This property specifies a background color for the selected cells in
!    * the list. When {@link ListCellRenderer.getListCellRendererComponent}
!    * is called with a selected cell object, the component returned will
!    * have its "background" property set to this color.
!    */
!   Color selectionForeground;
  
!   /** 
!    * This property holds a description of which data elements in the {@link
!    * #model} property should be considered "selected", when displaying and
!    * interacting with the list.
!    */
!   ListSelectionModel selectionModel;
  
  
!   /**
!    * This property indicates that the list's selection is currently
!    * "adjusting" -- perhaps due to a user actively dragging the mouse over
!    * multiple list elements -- and is therefore likely to change again in
!    * the near future. A {@link ListSelectionListener} might choose to delay
!    * updating its view of the list's selection until this property is
!    * false, meaning that the adjustment has completed.
!    */
!   boolean valueIsAdjusting;
  
+   /** 
+    * This property indicates a <em>preference</em> for the number of rows
+    * displayed in the list, and will scale the
+    * {@link #preferredScrollableViewportSize} property accordingly. The actual
+    * number of displayed rows, when the list is placed in a real {@link
+    * Viewport} or other component, may be greater or less than this number.
+    */
+   int visibleRowCount;
  
!   /**
!    * Fire a {@link ListSelectionEvent} to all the registered ListSelectionListeners.
!    */
!   protected void fireSelectionValueChanged(int firstIndex, int lastIndex, boolean isAdjusting) 
!   {
!     ListSelectionEvent evt = new ListSelectionEvent(this, firstIndex, lastIndex, isAdjusting);
!     ListSelectionListener listeners[] = getListSelectionListeners();
!     for (int i = 0; i < listeners.length; ++i)
!       {
!         listeners[i].valueChanged(evt);
!       }
!   }
! 
!   /**
!    * This private listener propagates {@link ListSelectionEvent} events
!    * from the list's "selectionModel" property to the list's {@link
!    * ListSelectionListener} listeners. It also listens to {@link
!    * ListDataEvent} events from the list's {@link #model} property. If this
!    * class receives either type of event, it triggers repainting of the
!    * list.
!    */
!   private class ListListener 
!     implements ListSelectionListener, ListDataListener
!   {
!     // ListDataListener events
!     public void contentsChanged(ListDataEvent event)
      {
!       JList.this.revalidate();
!       JList.this.repaint();
      }
!     public void intervalAdded(ListDataEvent event)
      {
!       JList.this.revalidate();
!       JList.this.repaint();
      }
!     public void intervalRemoved(ListDataEvent event)
      {
!       JList.this.revalidate();
!       JList.this.repaint();
      }
!     // ListSelectionListener events
!     public void valueChanged(ListSelectionEvent event)
      {
!       JList.this.fireSelectionValueChanged(event.getFirstIndex(),
!                                            event.getLastIndex(),
!                                            event.getValueIsAdjusting());
!       JList.this.repaint();
      }
+   };
  
!   /** 
!    * Shared ListListener instance, subscribed to both the current {@link
!    * #model} and {@link #selectionModel} properties of the list.
!    */
!   ListListener listListener;
! 
! 
!   /**
!    * Creates a new JList object.
!    */
!   public JList()
!   {
!     init();
!   }
! 
!   /**
!    * Creates a new JList object.
!    *
!    * @param listData Initial data to populate the list with
!    */
!   public JList(Object[] listData)
!   {
!     init();
!     setListData(listData);
!   }
! 
!   /**
!    * Creates a new JList object.
!    *
!    * @param listData Initial data to populate the list with
!    */
!   public JList(Vector listData)
!   {
!     init();
!     setListData(listData);
!   }
! 
!   /**
!    * Creates a new JList object.
!    *
!    * @param listData Initial data to populate the list with
!    */
!   public JList(ListModel listData)
!   {
!     init();
!     setModel(listData);
!   }
! 
!   void init()
!   {
!     dragEnabled = false;
!     fixedCellHeight = -1;
!     fixedCellWidth = -1;
!     layoutOrientation = VERTICAL;
!     opaque = true;
!     valueIsAdjusting = false;
!     visibleRowCount = 8;
! 
!     cellRenderer = new DefaultListCellRenderer();
!     listListener = new ListListener();
! 
!     setModel(new DefaultListModel());
!     setSelectionModel(createSelectionModel());
! 
!     updateUI();
!   }
! 
!   /**
!    * Creates the default <code>ListSelectionModel</code>.
!    *
!    * @return the <code>ListSelectionModel</code>
!    */
!   protected ListSelectionModel createSelectionModel()
!   {
!     return new DefaultListSelectionModel();
!   }
!   
!   /**
!    * Gets the value of the {@link #fixedCellHeight} property. This property
!    * may be <code>-1</code> to indicate that no cell height has been
!    * set. This property is also set implicitly when the
!    * {@link #prototypeCellValue} property is set.
!    *
!    * @return The current value of the property 
!    * 
!    * @see #fixedCellHeight
!    * @see #setFixedCellHeight
!    * @see #setPrototypeCellValue
!    */
!   public int getFixedCellHeight()
!   {
!     return fixedCellHeight;
!   }
! 
!   /**
!    * Sets the value of the {@link #fixedCellHeight} property. This property
!    * may be <code>-1</code> to indicate that no cell height has been
!    * set. This property is also set implicitly when the {@link
!    * #prototypeCellValue} property is set, but setting it explicitly
!    * overrides the height computed from {@link #prototypeCellValue}.
!    *
!    * @see #getFixedCellHeight
!    * @see #getPrototypeCellValue
!    */
!   public void setFixedCellHeight(int h)
!   {
!     if (fixedCellHeight == h)
!       return;
! 
!     int old = fixedCellHeight;
!     fixedCellHeight = h;
!     firePropertyChange("fixedCellWidth", old, h);
!   }
! 
! 
!   /**
!    * Gets the value of the {@link #fixedCellWidth} property. This property
!    * may be <code>-1</code> to indicate that no cell width has been
!    * set. This property is also set implicitly when the {@link
!    * #prototypeCellValue} property is set.
!    *
!    * @return The current value of the property 
!    * 
!    * @see #setFixedCellWidth
!    * @see #setPrototypeCellValue
!    */
!   public int getFixedCellWidth()
!   {
!     return fixedCellWidth;
!   }
! 
!   /**
!    * Sets the value of the {@link #fixedCellWidth} property. This property
!    * may be <code>-1</code> to indicate that no cell width has been
!    * set. This property is also set implicitly when the {@link
!    * #prototypeCellValue} property is set, but setting it explicitly
!    * overrides the width computed from {@link #prototypeCellValue}.
!    *
!    * @see #getFixedCellHeight
!    * @see #getPrototypeCellValue
!    */
!   public void setFixedCellWidth(int w)
!   {
!     if (fixedCellWidth == w)
!       return;
      
!     int old = fixedCellWidth;
!     fixedCellWidth = w;
!     firePropertyChange("fixedCellWidth", old, w);
!   }
  
!   /** 
!    * Gets the value of the {@link #visibleRowCount} property. 
!    *
!    * @return the current value of the property.
!    */
  
!   public int getVisibleRowCount()
!   {
!     return visibleRowCount;
!   }
  
+   /**
+    * Sets the value of the {@link #visibleRowCount} property. 
+    *
+    * @param visibleRowCount The new property value
+    */
+   public void setVisibleRowCount(int vc)
+   {
+     visibleRowCount = vc;
+     revalidate();
+     repaint();
+   }
  
!   /**
!    * Adds a {@link ListSelectionListener} to the listener list for this
!    * list. The listener will be called back with a {@link
!    * ListSelectionEvent} any time the list's {@link #selectionModel}
!    * property changes. The source of such events will be the JList,
!    * not the selection model.
!    *
!    * @param listener The new listener to add
!    */
!   public void addListSelectionListener(ListSelectionListener listener)
!   {
!     listenerList.add (ListSelectionListener.class, listener);
!   }
  
!   /**
!    * Removes a {@link ListSelectionListener} from the listener list for
!    * this list. The listener will no longer be called when the list's
!    * {@link #selectionModel} changes.
!    *
!    * @param listener The listener to remove
!    */
!   public void removeListSelectionListener(ListSelectionListener listener)
!   {
!     listenerList.remove(ListSelectionListener.class, listener);
!   }
! 
!   /**
!    * Returns an array of all ListSelectionListeners subscribed to this
!    * list. 
!    *
!    * @return The current subscribed listeners
!    *
!    * @since 1.4
!    */
!   public ListSelectionListener[] getListSelectionListeners()
!   {
!     return (ListSelectionListener[]) getListeners(ListSelectionListener.class);
!   }
! 
!   public int getSelectionMode()
!   {
!     return selectionModel.getSelectionMode();
!   }
!   
!   /**
!    * Sets the list's "selectionMode" property, which simply mirrors the
!    * same property on the list's {@link #selectionModel} property. This
!    * property should be one of the integer constants
!    * <code>SINGLE_SELECTION</code>, <code>SINGLE_INTERVAL_SELECTION</code>,
!    * or <code>MULTIPLE_INTERVAL_SELECTION</code> from the {@link
!    * ListSelectionModel} interface.
!    *
!    * @param a The new selection mode
!    */
!   public void setSelectionMode(int a)
!   {
!     selectionModel.setSelectionMode(a);
!   }
! 
!   /**
!    * Adds the interval <code>[a,a]</code> to the set of selections managed
!    * by this list's {@link #selectionModel} property. Depending on the
!    * selection mode, this may cause existing selections to become invalid,
!    * or may simply expand the set of selections. 
!    *
!    * @param a A number in the half-open range <code>[0, x)</code> where
!    * <code>x = getModel.getSize()</code>, indicating the index of an
!    * element in the list to select.
!    *
!    * @see #setSelectionMode
!    * @see #selectionModel
!    */
!   public void setSelectedIndex(int a)
!   {
!     selectionModel.setSelectionInterval(a, a);
!   }
! 
!   /**
!    * For each element <code>a[i]</code> of the provided array
!    * <code>a</code>, calls {@link #setSelectedIndex} on <code>a[i]</code>.
!    *
!    * @see #setSelectionMode
!    * @see #selectionModel
!    */
!   public void setSelectedIndices(int [] a)
!   {
!     for (int i = 0; i < a.length; ++i)
!       setSelectedIndex(a[i]);
!   }
! 
!   /**
!    * Returns the minimum index of an element in the list which is currently
!    * selected.
!    *
!    * @return A number in the half-open range <code>[0, x)</code> where
!    * <code>x = getModel.getSize()</code>, indicating the minimum index of
!    * an element in the list for which the element is selected, or
!    * <code>-1</code> if no elements are selected
!    */
!   public int getSelectedIndex()
!   {
!     return selectionModel.getMinSelectionIndex();
!   }
! 
!   /**
!    * Returns <code>true</code> if the model's selection is empty, otherwise
!    * <code>false</code>. 
!    *
!    * @return The return value of {@link ListSelectionModel#isSelectionEmpty}
!    */
!   public boolean isSelectionEmpty()
!   {
!     return selectionModel.isSelectionEmpty();
!   }
! 
!   /**
!    * Returns the list index of the upper left or upper right corner of the
!    * {@link #visibleRect} property, depending on the {@link
!    * #componentOrientation} property.
!    *
!    * @return The index of the first visible list cell, or <code>-1</code>
!    * if none is visible.
!    */
!   public int getFirstVisibleIndex()
!   {
!     ComponentOrientation or = getComponentOrientation();
!     Rectangle r = getVisibleRect();
!     if (or == ComponentOrientation.RIGHT_TO_LEFT)
!       r.translate((int) r.getWidth(), 0);
!     return getUI().locationToIndex(this, r.getLocation());      
!   }
! 
! 
!   /**
!    * Returns index of the cell to which specified location is closest to
!    * @param location for which to look for in the list
!    * 
!    * @return index of the cell to which specified location is closest to.
!    */
!    public int locationToIndex(Point location) {
!      return getUI().locationToIndex(this, location);      
!    }
! 
!   /**
!    * Returns location of the cell located at the specified index in the list.
!    * @param index of the cell for which location will be determined
!    * 
!    * @return location of the cell located at the specified index in the list.
!    */
!    public Point indexToLocation(int index){
!    	//FIXME: Need to implement.
  	return null;
!    }
  
!   /**
!    * Returns the list index of the lower right or lower left corner of the
!    * {@link #visibleRect} property, depending on the {@link
!    * #componentOrientation} property.
!    *
!    * @return The index of the first visible list cell, or <code>-1</code>
!    * if none is visible.
!    */
!   public int getLastVisibleIndex()
!   {
!     ComponentOrientation or = getComponentOrientation();
!     Rectangle r = getVisibleRect();
!     r.translate(0, (int) r.getHeight());
!     if (or == ComponentOrientation.LEFT_TO_RIGHT)
!       r.translate((int) r.getWidth(), 0);
!     return getUI().locationToIndex(this, r.getLocation());      
!   }
  
!   /**
!    * Returns the indices of values in the {@link #model} property which are
!    * selected.
!    *
!    * @return An array of model indices, each of which is selected according
!    * to the {@link #selection} property
!    */
!   public int[] getSelectedIndices()
!   {
!     int lo, hi, n, i, j;
!     if (selectionModel.isSelectionEmpty())
!       return new int[0];
!     lo = selectionModel.getMinSelectionIndex();
!     hi = selectionModel.getMaxSelectionIndex();
!     n = 0;
!     for (i = lo; i < hi; ++i)
!       if (selectionModel.isSelectedIndex(i))
!         n++;
!     int [] v = new int[n];
!     j = 0;
!     for (i = lo; i < hi; ++i)
!       if (selectionModel.isSelectedIndex(i))
!         v[j++] = i;
!     return v;
!   }
  
!   /**
!    * Indicates whether the list element at a given index value is
!    * currently selected.
!    *
!    * @param a The index to check 
!    * @return <code>true</code> if <code>a</code> is the index of a selected
!    * list element
!    */
!   public boolean isSelectedIndex(int a)
!   {
!     return selectionModel.isSelectedIndex(a);
!   }
  
!   /**
!    * Returns the first value in the list's {@link #model} property which is
!    * selected, according to the list's {@link #selectionModel} property.
!    * This is equivalent to calling
!    * <code>getModel()getElementAt(getSelectedIndex())</code>, with a check
!    * for the special index value of <code>-1</code> which returns null
!    * <code>null</code>.
!    *
!    * @return The first selected element, or <code>null</code> if no element
!    * is selected.
!    *
!    * @see getSelectedValues
!    */
!   public Object getSelectedValue()
!   {
!     int index = getSelectedIndex();
!     if (index == -1)
!       return null;
!     return getModel().getElementAt(index);
!   }
! 
!   /**
!    * Returns all the values in the list's {@link #model} property which
!    * are selected, according to the list's {@link #selectionModel} property.
!    *
!    * @return An array containing all the selected values
!    *
!    * @see getSelectedValue
!    */
!   public Object[] getSelectedValues()
!   {
!     int [] idx = getSelectedIndices();
!     Object [] v = new Object[idx.length];
!     for (int i = 0; i < idx.length; ++i)
!       v[i] = getModel().getElementAt(i);
!     return v;
!   }
! 
!   /**
!    * Gets the value of the {@link #selectionBackground} property.
!    *
!    * @return The current value of the property
!    */
!   public Color getSelectionBackground()
!   {
!     return selectionBackground;
!   }
! 
!   /**
!    * Sets the value of the {@link #selectionBackground} property.
!    *
!    * @param c The new value of the property
!    */
!   public void setSelectionBackground(Color c)
!   {
!     if (selectionBackground == c)
!       return;
! 
!     Color old = selectionBackground;
!     selectionBackground = c;
!     firePropertyChange("selectionBackground", old, c);
!     repaint();
!   }
! 
!   /**
!    * Gets the value of the {@link #selectionForeground} property.
!    *
!    * @return The current value of the property
!    */
!   public Color getSelectionForeground()
!   {
!     return selectionForeground;
!   }
!   
!   /**
!    * Sets the value of the {@link #selectionForeground} property.
!    *
!    * @param c The new value of the property
!    */
!   public void setSelectionForeground(Color c)
!   {
!     if (selectionForeground == c)
!       return;
! 
!     Color old = selectionForeground;
!     selectionForeground = c;
!     firePropertyChange("selectionForeground", old, c);
!   }
! 
!   /**
!    * Sets the selection to cover only the specified value, if it
!    * exists in the model. 
!    *
!    * @param obj The object to select
!    * @param scroll Whether to scroll the list to make the newly selected
!    * value visible
!    *
!    * @see #ensureIndexIsVisible
!    */
! 
!   public void setSelectedValue(Object obj, boolean scroll)
!   {
!     for (int i = 0; i < model.getSize(); ++i)
!       {
!         if (model.getElementAt(i).equals(obj))
!           {
!             setSelectedIndex(i);
!             if (scroll)
!               ensureIndexIsVisible(i);
!             break;
!           }
!       }
!   }
! 
!   /**
!    * Scrolls this list to make the specified cell visible. This
!    * only works if the list is contained within a viewport.
!    *
!    * @param i The list index to make visible
!    *
!    * @see JComponent#scrollRectToVisible
!    */
!   public void ensureIndexIsVisible(int i)
!   {
!     scrollRectToVisible(getUI().getCellBounds(this, i, i));
!   }
! 
!   /**
!    * Sets the {@link #model} property of the list to a new anonymous
!    * {@link AbstractListModel} subclass which accesses the provided Object
!    * array directly.
!    *
!    * @param listData The object array to build a new list model on
!    * @see #setModel
!    */
!   public void setListData(final Object[] listData)
!   {
!     setModel(new AbstractListModel()
!         {
!           public int getSize()
!           {
!             return listData.length;
!           }
! 
!           public Object getElementAt(int i)
!           {
!             return listData[i];
!           }
!         });
!   }
! 
!   /**
!    * Sets the {@link #model} property of the list to a new anonymous {@link
!    * AbstractListModel} subclass which accesses the provided vector
!    * directly.
!    *
!    * @param listData The object array to build a new list model on
!    * @see #setModel
!    */
!   public void setListData(final Vector listData)
!   {
!     setModel(new AbstractListModel()
!         {
!           public int getSize()
!           {
!             return listData.size();
!           }
! 
!           public Object getElementAt(int i)
!           {
!             return listData.elementAt(i);
!           }
!         });
!   }
! 
!   /**
!    * Gets the value of the {@link #cellRenderer} property. 
!    *
!    * @return The current value of the property
!    */
!   public ListCellRenderer getCellRenderer()
!   {
!     return cellRenderer;
!   }
! 
!   /**
!    * Sets the value of the {@link #celLRenderer} property.
!    *
!    * @param renderer The new property value
!    */
!   public void setCellRenderer(ListCellRenderer renderer)
!   {
!     if (cellRenderer == renderer)
!       return;
!     
!     ListCellRenderer old = cellRenderer;
!     cellRenderer = renderer;
!     firePropertyChange("cellRenderer", old, renderer);
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * Gets the value of the {@link #model} property. 
!    *
!    * @return The current value of the property
!    */
!   public ListModel getModel()
!   {
!     return model;
!   }
! 
!   /**
!    * Sets the value of the {@link #model} property. The list's {@link
!    * #listListener} is unsubscribed from the existing model, if it exists,
!    * and re-subscribed to the new model.
!    *
!    * @param model The new property value
!    */
!   public void setModel(ListModel model)
!   {
!     if (this.model == model)
!       return;
!     
!     if (this.model != null)
!       this.model.removeListDataListener(listListener);
!     
!     ListModel old = this.model;
!     this.model = model;
!     
!     if (this.model != null)
!       this.model.addListDataListener(listListener);
      
+     firePropertyChange("model", old, model);
+     revalidate();
+     repaint();
+   }
+ 
+ 
+   public ListSelectionModel getSelectionModel()
+   {
+     return selectionModel;
+   }
+ 
+   /**
+    * Sets the value of the {@link #selectionModel} property. The list's
+    * {@link #listListener} is unsubscribed from the existing selection
+    * model, if it exists, and re-subscribed to the new selection model.
+    *
+    * @param model The new property value
+    */
+   public void setSelectionModel(ListSelectionModel model)
+   {
+     if (selectionModel == model)
+       return;
+     
+     if (selectionModel != null)
+       selectionModel.removeListSelectionListener(listListener);
+     
+     ListSelectionModel old = selectionModel;
+     selectionModel = model;
+     
+     if (selectionModel != null)
+       selectionModel.addListSelectionListener(listListener);
+     
+     firePropertyChange("selectionModel", old, model);
+     revalidate();
+     repaint();
+   }
+ 
+   /**
+    * Gets the value of the UI property.
+    *
+    * @return The current property value
+    */
+   public ListUI getUI()
+   {
+     return (ListUI) ui;
+   }
+ 
+   /**
+    * Sets the value of the UI property.
+    *
+    * @param ui The new property value
+    */
+   public void setUI(ListUI ui)
+   {
+     super.setUI(ui);
+   }
+ 
+   /**
+    * Calls {@link #setUI} with the {@link ListUI} subclass
+    * returned from calling {@link UIManager#getUI}.
+    */
+   public void updateUI()
+   {
+     setUI((ListUI) UIManager.getUI(this));
+   }
+ 
+   /**
+    * Return the class identifier for the list's UI property.  This should
+    * be the constant string <code>"ListUI"</code>, and map to an
+    * appropriate UI class in the {@link UIManager}.
+    *
+    * @return The class identifier
+    */
+   public String getUIClassID()
+   {
+     return "ListUI";
+   }
+ 
+ 
+   /**
+    * Returns the current value of the {@link #prototypeCellValue}
+    * property. This property holds a reference to a "prototype" data value
+    * -- typically a String -- which is used to calculate the {@link
+    * #fixedCellWidth} and {@link #fixedCellHeight} properties, using the
+    * {@link #cellRenderer} property to acquire a component to render the
+    * prototype.
+    *
+    * @return The current prototype cell value
+    * @see #setPrototypeCellValue
+    */
+   public Object getPrototypeCellValue()
+   {
+     return prototypeCellValue;
+   }
+ 
+   /**
+    * <p>Set the {@link #prototypeCellValue} property. This property holds a
+    * reference to a "prototype" data value -- typically a String -- which
+    * is used to calculate the {@link #fixedCellWidth} and {@link
+    * #fixedCellHeight} properties, using the {@link #cellRenderer} property
+    * to acquire a component to render the prototype.</p>
+    *
+    * <p>It is important that you <em>not</em> set this value to a
+    * component. It has to be a <em>data value</em> such as the objects you
+    * would find in the list's model. Setting it to a component will have
+    * undefined (and undesirable) affects. </p>
+    *
+    * @param obj The new prototype cell value
+    * @see #getPrototypeCellValue
+    */
+   public void setPrototypeCellValue(Object obj)
+   {
+     if (prototypeCellValue == obj)
+       return;
+ 
+     Object old = prototypeCellValue;
+     Component comp = getCellRenderer()
+       .getListCellRendererComponent(this, obj, 0, false, false); 
+     Dimension d = comp.getPreferredSize();
+     fixedCellWidth = d.width;
+     fixedCellHeight = d.height;
+     prototypeCellValue = obj;
+     firePropertyChange("prototypeCellValue", old, obj);
+   }
+ 
+   public AccessibleContext getAccessibleContext()
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns a size indicating how much space this list would like to
+    * consume, when contained in a scrollable viewport. This is part of the
+    * {@link Scrollable} interface, which interacts with {@link
+    * ScrollPaneLayout} and {@link Viewport} to define scrollable objects.
+    *
+    * @return The preferred size
+    */
+   public Dimension getPreferredScrollableViewportSize()
+   {
+     int vis = getVisibleRowCount();
+     int nrows = getModel() == null ? 0 : getModel().getSize();
+     // FIXME: this is a somewhat arbitrary default, but.. ?
+     Dimension single = new Dimension(10, 10);;
+     Rectangle bounds = null;
+ 
+     if (vis > nrows)
+       {
+         if (fixedCellWidth != -1 && 
+             fixedCellHeight != -1)
+           {
+             single = new Dimension(fixedCellWidth, fixedCellHeight);
+           }
+         else if (nrows != 0 && getUI() != null)
+           {
+             Rectangle tmp = getUI().getCellBounds(this, 0, 0);
+             if (tmp != null)
+               single = tmp.getSize();
+           }
+       }
+     else if (getUI() != null)
+       {
+         return getUI().getCellBounds(this, 0, vis - 1).getSize();
+       }
+ 
+     return new Dimension(single.width, single.height * vis);
+   }
+ 
+   /**
+    * <p>Return the number of pixels the list must scroll in order to move a
+    * "unit" of the list into the provided visible rectangle. When the
+    * provided direction is positive, the call describes a "downwards"
+    * scroll, which will be exposing a cell at a <em>greater</em> index in
+    * the list than those elements currently showing. Then the provided
+    * direction is negative, the call describes an "upwards" scroll, which
+    * will be exposing a cell at a <em>lesser</em> index in the list than
+    * those elements currently showing.</p>
+    *
+    * <p>If the provided orientation is <code>HORIZONTAL</code>, the above
+    * comments refer to "rightwards" for positive direction, and "leftwards"
+    * for negative.</p>
+    * 
+    *
+    * @param visibleRect The rectangle to scroll an element into
+    * @param orientation One of the numeric consants <code>VERTICAL</code>
+    * or <code>HORIZONTAL</code>
+    * @param direction An integer indicating the scroll direction: positive means
+    * forwards (down, right), negative means backwards (up, left)
+    *
+    * @return The scrollable unit increment, in pixels
+    */
+   public int getScrollableUnitIncrement(Rectangle visibleRect,
+                                         int orientation, int direction)
+   {
+     ListUI lui = this.getUI();
+     if (orientation == SwingConstants.VERTICAL)
+       {
+         if (direction > 0)
+           {
+             // Scrolling down
+             Point bottomLeft = new Point(visibleRect.x,
+                                          visibleRect.y + visibleRect.height);
+             int curIdx = lui.locationToIndex(this, bottomLeft);
+             Rectangle curBounds = lui.getCellBounds(this, curIdx, curIdx);
+             if (curBounds.y + curBounds.height == bottomLeft.y)
+               {
+                 // we are at the exact bottom of the current cell, so we 
+                 // are being asked to scroll to the end of the next one
+                 if (curIdx + 1 < model.getSize())
+                   {
+                     // there *is* a next item in the list
+                     Rectangle nxtBounds = lui.getCellBounds(this, curIdx + 1, curIdx + 1);
+                     return nxtBounds.height;
+                   }
+                 else
+                   {
+                     // no next item, no advance possible
+                     return 0;
+                   }
+               }
+             else
+               {
+                 // we are part way through an existing cell, so we are being
+                 // asked to scroll to the bottom of it
+                 return (curBounds.y + curBounds.height) - bottomLeft.y;
+               }		      
+           }
+         else
+           {
+             // scrolling up
+             Point topLeft = new Point(visibleRect.x, visibleRect.y);
+             int curIdx = lui.locationToIndex(this, topLeft);
+             Rectangle curBounds = lui.getCellBounds(this, curIdx, curIdx);
+             if (curBounds.y == topLeft.y)
+               {
+                 // we are at the exact top of the current cell, so we 
+                 // are being asked to scroll to the top of the previous one
+                 if (curIdx > 0)
+                   {
+                     // there *is* a previous item in the list
+                     Rectangle nxtBounds = lui.getCellBounds(this, curIdx - 1, curIdx - 1);
+                     return -nxtBounds.height;
+                   }
+                 else
+                   {
+                     // no previous item, no advance possible
+                     return 0;
+                   }
+               }
+             else
+               {
+                 // we are part way through an existing cell, so we are being
+                 // asked to scroll to the top of it
+                 return curBounds.y - topLeft.y;
+               }		      
+           }
+       }
+ 
+     // FIXME: handle horizontal scrolling (also wrapping?)
+     return 1;
+   }
+ 
+   /**
+    * <p>Return the number of pixels the list must scroll in order to move a
+    * "block" of the list into the provided visible rectangle. When the
+    * provided direction is positive, the call describes a "downwards"
+    * scroll, which will be exposing a cell at a <em>greater</em> index in
+    * the list than those elements currently showing. Then the provided
+    * direction is negative, the call describes an "upwards" scroll, which
+    * will be exposing a cell at a <em>lesser</em> index in the list than
+    * those elements currently showing.</p>
+    *
+    * <p>If the provided orientation is <code>HORIZONTAL</code>, the above
+    * comments refer to "rightwards" for positive direction, and "leftwards"
+    * for negative.</p>
+    * 
+    *
+    * @param visibleRect The rectangle to scroll an element into
+    * @param orientation One of the numeric consants <code>VERTICAL</code>
+    * or <code>HORIZONTAL</code>
+    * @param direction An integer indicating the scroll direction: positive means
+    * forwards (down, right), negative means backwards (up, left)
+    *
+    * @return The scrollable unit increment, in pixels
+    */
+   public int getScrollableBlockIncrement(Rectangle visibleRect,
+                                          int orientation, int direction)
+   {
+       if (orientation == VERTICAL)
+ 	  return visibleRect.height * direction;
+       else
+ 	  return visibleRect.width * direction;
+   }
+ 
+   /**
+    * Gets the value of the {@link #scrollableTracksViewportWidth} property.
+    *
+    * @return <code>true</code> if the viewport is larger (horizontally)
+    * than the list and the list should be expanded to fit the viewport;
+    * <code>false</code> if the viewport is smaller than the list and the
+    * list should scroll (horizontally) within the viewport
+    */
+   public boolean getScrollableTracksViewportWidth()
+   {
+     return false;
+   }
+ 
+   /**
+    * Gets the value of the {@link #scrollableTracksViewportWidth} property.
+    *
+    * @return <code>true</code> if the viewport is larger (vertically)
+    * than the list and the list should be expanded to fit the viewport;
+    * <code>false</code> if the viewport is smaller than the list and the
+    * list should scroll (vertically) within the viewport
+    */
+   public boolean getScrollableTracksViewportHeight()
+   {
+     return false;
+   }
+ 
+   public int getAnchorSelectionIndex()
+   {
+     return selectionModel.getAnchorSelectionIndex();
+   }
+ 
+   public int getLeadSelectionIndex()
+   {
+     return selectionModel.getLeadSelectionIndex();
+   }
+ 
+   public int getMinSelectionIndex()
+   {
+     return selectionModel.getMaxSelectionIndex();
+   }
+ 
+   public int getMaxSelectionIndex()
+   {
+     return selectionModel.getMaxSelectionIndex();
+   }
+ 
+   public void clearSelection()
+   {
+     selectionModel.clearSelection();
+   }
+ 
+   public void setSelectionInterval(int anchor, int lead)
+   {
+     selectionModel.setSelectionInterval(anchor, lead);
+   }
+ 
+   public void addSelectionInterval(int anchor, int lead)
+   {
+     selectionModel.addSelectionInterval(anchor, lead);
+   }
+ 
+   public void removeSelectionInterval(int index0, int index1)
+   {
+     selectionModel.removeSelectionInterval(index0, index1);
+   }
+ 
+   /**
+    * Returns the value of the <code>valueIsAdjusting</code> property.
+    *
+    * @return the value
+    */
+   public boolean getValueIsAdjusting()
+   {
+     return valueIsAdjusting;
+   }
+ 
+   /**
+    * Sets the <code>valueIsAdjusting</code> property.
+    *
+    * @param isAdjusting the new value
+    */
+   public void setValueIsAdjusting(boolean isAdjusting)
+   {
+     valueIsAdjusting = isAdjusting;
+   }
+ 
+   /**
+    * Return the value of the <code>dragEnabled</code> property.
+    *
+    * @return the value
+    * 
+    * @since 1.4
+    */
+   public boolean getDragEnabled()
+   {
+     return dragEnabled;
+   }
+ 
+   /**
+    * Set the <code>dragEnabled</code> property.
+    *
+    * @param enabled new value
+    * 
+    * @since 1.4
+    */
+   public void setDragEnabled(boolean enabled)
+   {
+     dragEnabled = enabled;
+   }
+ 
+   /**
+    * Returns the layout orientation.
+    *
+    * @return the orientation, one of <code>JList.VERTICAL</code>,
+    * <code>JList.VERTICAL_WRAP</code> and <code>JList.HORIZONTAL_WRAP</code>
+    *
+    * @since 1.4
+    */
+   public int getLayoutOrientation()
+   {
+     return layoutOrientation;
+   }
+ 
+   /**
+    * Sets the layout orientation.
+    *
+    * @param orientation the orientation to set, one of <code>JList.VERTICAL</code>,
+    * <code>JList.VERTICAL_WRAP</code> and <code>JList.HORIZONTAL_WRAP</code>
+    *
+    * @since 1.4
+    */
+   public void setLayoutOrientation(int orientation)
+   {
+     if (layoutOrientation == orientation)
+       return;
+ 
+     int old = layoutOrientation;
+     layoutOrientation = orientation;
+     firePropertyChange("layoutOrientation", old, orientation);
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JMenu.java gcc-4.0.0/libjava/javax/swing/JMenu.java
*** gcc-3.4.3/libjava/javax/swing/JMenu.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/JMenu.java	Wed Feb 16 20:02:29 2005
***************
*** 1,5 ****
  /* JMenu.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JMenu.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,40 ****
--- 35,41 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
*************** import java.awt.Point;
*** 42,769 ****
  import java.awt.event.KeyEvent;
  import java.awt.event.WindowAdapter;
  import java.awt.event.WindowEvent;
  import java.beans.PropertyChangeListener;
  import java.io.IOException;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
! import java.util.Hashtable;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.accessibility.AccessibleSelection;
  import javax.swing.event.MenuEvent;
  import javax.swing.event.MenuListener;
! import javax.swing.event.ChangeListener;
  
  /**
!  * JMenu
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JMenu
!   extends JMenuItem
!   implements Accessible, MenuElement
  {
!   static final long serialVersionUID = 4227225638931828014L;
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleJMenu
! 	 */
! 	protected class AccessibleJMenu extends AccessibleJMenuItem 
! 			implements AccessibleSelection {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJMenu
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJMenu(JMenu component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJMenu()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleChildrenCount
! 		 * @returns int
! 		 */
! 		public int getAccessibleChildrenCount() {
! 			return 0; // TODO
! 		} // getAccessibleChildrenCount()
! 
! 		/**
! 		 * getAccessibleChild
! 		 * @param value0 TODO
! 		 * @returns Accessible
! 		 */
! 		public Accessible getAccessibleChild(int value0) {
! 			return null; // TODO
! 		} // getAccessibleChild()
  
! 		/**
! 		 * getAccessibleSelection
! 		 * @returns AccessibleSelection
! 		 */
! 		public AccessibleSelection getAccessibleSelection() {
! 			return null; // TODO
! 		} // getAccessibleSelection()
  
! 		/**
! 		 * getAccessibleSelection
! 		 * @param value0 TODO
! 		 * @returns Accessible
! 		 */
! 		public Accessible getAccessibleSelection(int value0) {
! 			return null; // TODO
! 		} // getAccessibleSelection()
  
! 		/**
! 		 * isAccessibleChildSelected
! 		 * @param value0 TODO
! 		 * @returns boolean
! 		 */
! 		public boolean isAccessibleChildSelected(int value0) {
! 			return false; // TODO
! 		} // isAccessibleChildSelected()
  
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.MENU;
! 		} // getAccessibleRole()
  
! 		/**
! 		 * getAccessibleSelectionCount
! 		 * @returns int
! 		 */
! 		public int getAccessibleSelectionCount() {
! 			return 0; // TODO
! 		} // getAccessibleSelectionCount()
  
! 		/**
! 		 * addAccessibleSelection
! 		 * @param value0 TODO
! 		 */
! 		public void addAccessibleSelection(int value0) {
! 			// TODO
! 		} // addAccessibleSelection()
  
! 		/**
! 		 * removeAccessibleSelection
! 		 * @param value0 TODO
! 		 */
! 		public void removeAccessibleSelection(int value0) {
! 			// TODO
! 		} // removeAccessibleSelection()
  
! 		/**
! 		 * clearAccessibleSelection
! 		 */
! 		public void clearAccessibleSelection() {
! 			// TODO
! 		} // clearAccessibleSelection()
  
! 		/**
! 		 * selectAllAccessibleSelection
! 		 */
! 		public void selectAllAccessibleSelection() {
! 			// TODO
! 		} // selectAllAccessibleSelection()
  
  
! 	} // AccessibleJMenu
  
! 	/**
! 	 * WinListener
! 	 */
! 	protected class WinListener extends WindowAdapter implements Serializable {
  
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * popupMenu
! 		 */
! 		JPopupMenu popupMenu;
  
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor WinListener
! 		 * @param value0 TODO
! 		 * @param value1 TODO
! 		 */
! 		public WinListener(JMenu value0, JPopupMenu value1) {
! 			// TODO
! 		} // WinListener()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * windowClosing
! 		 * @param value0 TODO
! 		 */
! 		public void windowClosing(WindowEvent value0) {
! 			// TODO
! 		} // windowClosing()
  
  
! 	} // WinListener
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "MenuUI";
  
! 	/**
! 	 * popupMenu
! 	 */
! 	private JPopupMenu popupMenu;
  
! 	/**
! 	 * menuChangeListener
! 	 */
! 	private ChangeListener menuChangeListener;
  
! 	/**
! 	 * menuEvent
! 	 */
! 	private MenuEvent menuEvent;
  
! 	/**
! 	 * listenerRegistry
! 	 */
! 	private static Hashtable listenerRegistry = null; // TODO
  
! 	/**
! 	 * delay
! 	 */
! 	private int delay;
  
! 	/**
! 	 * TRACE
! 	 */
! 	private static final boolean TRACE = false; // TODO
  
! 	/**
! 	 * VERBOSE
! 	 */
! 	private static final boolean VERBOSE = false; // TODO
  
! 	/**
! 	 * DEBUG
! 	 */
! 	private static final boolean DEBUG = false; // TODO
  
! 	/**
! 	 * popupListener
! 	 */
! 	protected JMenu.WinListener popupListener;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JMenu
! 	 */
! 	public JMenu() {
! 		// TODO
! 	} // JMenu()
  
! 	/**
! 	 * Constructor JMenu
! 	 * @param text TODO
! 	 */
! 	public JMenu(String text) {
! 		// TODO
! 	} // JMenu()
  
! 	/**
! 	 * Constructor JMenu
! 	 * @param action TODO
! 	 */
! 	public JMenu(Action action) {
! 		// TODO
! 	} // JMenu()
  
! 	/**
! 	 * Constructor JMenu
! 	 * @param text TODO
! 	 * @param tearoff TODO
! 	 */
! 	public JMenu(String text, boolean tearoff) {
! 		// TODO
! 	} // JMenu()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * add
! 	 * @param value0 TODO
! 	 * @returns JMenuItem
! 	 */
! 	public JMenuItem add(JMenuItem item) {
! 		return null; // TODO
! 	} // add()
  
! 	/**
! 	 * add
! 	 * @param component TODO
! 	 * @returns Component
! 	 */
! 	public Component add(Component component) {
! 		return null; // TODO
! 	} // add()
  
! 	/**
! 	 * add
! 	 * @param component TODO
! 	 * @param index TODO
! 	 * @returns Component
! 	 */
! 	public Component add(Component component, int index) {
! 		return null; // TODO
! 	} // add()
  
! 	/**
! 	 * add
! 	 * @param text TODO
! 	 * @returns JMenuItem
! 	 */
! 	public JMenuItem add(String text) {
! 		return null; // TODO
! 	} // add()
  
! 	/**
! 	 * add
! 	 * @param action TODO
! 	 * @returns JMenuItem
! 	 */
! 	public JMenuItem add(Action action) {
! 		return null; // TODO
! 	} // add()
  
! 	/**
! 	 * remove
! 	 * @param item TODO
! 	 */
! 	public void remove(JMenuItem item) {
! 		// TODO
! 	} // remove()
  
! 	/**
! 	 * remove
! 	 * @param index TODO
! 	 */
! 	public void remove(int index) {
! 		// TODO
! 	} // remove()
  
! 	/**
! 	 * remove
! 	 * @param component TODO
! 	 */
! 	public void remove(Component component) {
! 		// TODO
! 	} // remove()
  
! 	/**
! 	 * removeAll
! 	 */
! 	public void removeAll() {
! 		// TODO
! 	} // removeAll()
  
! 	/**
! 	 * insert
! 	 * @param text TODO
! 	 * @param index TODO
! 	 */
! 	public void insert(String text, int index) {
! 		// TODO
! 	} // insert()
  
! 	/**
! 	 * insert
! 	 * @param item TODO
! 	 * @param index TODO
! 	 * @returns JMenuItem
! 	 */
! 	public JMenuItem insert(JMenuItem item, int index) {
! 		return null; // TODO
! 	} // insert()
  
! 	/**
! 	 * insert
! 	 * @param action TODO
! 	 * @param index TODO
! 	 * @returns JMenuItem
! 	 */
! 	public JMenuItem insert(Action action, int index) {
! 		return null; // TODO
! 	} // insert()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		//setUI((MenuUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * setModel
! 	 * @param model TODO
! 	 */
! 	public void setModel(ButtonModel model) {
! 		// TODO
! 	} // setModel()
  
! 	/**
! 	 * isSelected
! 	 * @returns boolean
! 	 */
! 	public boolean isSelected() {
! 		return false; // TODO
! 	} // isSelected()
  
! 	/**
! 	 * setSelected
! 	 * @param selected TODO
! 	 */
! 	public void setSelected(boolean selected) {
! 		// TODO
! 	} // setSelected()
  
! 	/**
! 	 * isPopupMenuVisible
! 	 * @returns boolean
! 	 */
! 	public boolean isPopupMenuVisible() {
! 		return false; // TODO
! 	} // isPopupMenuVisible()
  
! 	/**
! 	 * setPopupMenuVisible
! 	 * @param popup TODO
! 	 */
! 	public void setPopupMenuVisible(boolean popup) {
! 		// TODO
! 	} // setPopupMenuVisible()
  
! 	/**
! 	 * getPopupMenuOrigin
! 	 * @returns Point
! 	 */
! 	protected Point getPopupMenuOrigin() {
! 		return null; // TODO
! 	} // getPopupMenuOrigin()
  
! 	/**
! 	 * getDelay
! 	 * @returns int
! 	 */
! 	public int getDelay() {
! 		return 0; // TODO
! 	} // getDelay()
  
! 	/**
! 	 * setDelay
! 	 * @param value0 TODO
! 	 */
! 	public void setDelay(int delay) {
! 		// TODO
! 	} // setDelay()
  
! 	/**
! 	 * setMenuLocation
! 	 * @param x TODO
! 	 * @param y TODO
! 	 */
! 	public void setMenuLocation(int x, int y) {
! 		// TODO
! 	} // setMenuLocation()
  
! 	/**
! 	 * createActionComponent
! 	 * @param action TODO
! 	 * @returns JMenuItem
! 	 */
! 	protected JMenuItem createActionComponent(Action action) {
! 		return null; // TODO
! 	} // createActionComponent()
  
! 	/**
! 	 * createActionChangeListener
! 	 * @param item TODO
! 	 * @returns PropertyChangeListener
! 	 */
! 	protected PropertyChangeListener createActionChangeListener(JMenuItem item) {
! 		return null; // TODO
! 	} // createActionChangeListener()
  
! 	/**
! 	 * addSeparator
! 	 */
! 	public void addSeparator() {
! 		// TODO
! 	} // addSeparator()
  
! 	/**
! 	 * insertSeparator
! 	 * @param index TODO
! 	 */
! 	public void insertSeparator(int index) {
! 		// TODO
! 	} // insertSeparator()
  
! 	/**
! 	 * getItem
! 	 * @param index TODO
! 	 * @returns JMenuItem
! 	 */
! 	public JMenuItem getItem(int index) {
! 		return null; // TODO
! 	} // getItem()
  
! 	/**
! 	 * getItemCount
! 	 * @returns int
! 	 */
! 	public int getItemCount() {
! 		return 0; // TODO
! 	} // getItemCount()
  
! 	/**
! 	 * isTearOff
! 	 * @returns boolean
! 	 */
! 	public boolean isTearOff() {
! 		return false; // TODO
! 	} // isTearOff()
  
! 	/**
! 	 * getMenuComponentCount
! 	 * @returns int
! 	 */
! 	public int getMenuComponentCount() {
! 		return 0; // TODO
! 	} // getMenuComponentCount()
  
! 	/**
! 	 * getMenuComponent
! 	 * @param index TODO
! 	 * @returns Component
! 	 */
! 	public Component getMenuComponent(int index) {
! 		return null; // TODO
! 	} // getMenuComponent()
  
! 	/**
! 	 * getMenuComponents
! 	 * @returns Component[]
! 	 */
! 	public Component[] getMenuComponents() {
! 		return null; // TODO
! 	} // getMenuComponents()
  
! 	/**
! 	 * isTopLevelMenu
! 	 * @returns boolean
! 	 */
! 	public boolean isTopLevelMenu() {
! 		return false; // TODO
! 	} // isTopLevelMenu()
  
! 	/**
! 	 * isMenuComponent
! 	 * @param component TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isMenuComponent(Component component) {
! 		return false; // TODO
! 	} // isMenuComponent()
  
! 	/**
! 	 * getPopupMenu
! 	 * @returns JPopupMenu
! 	 */
! 	public JPopupMenu getPopupMenu() {
! 		return null; // TODO
! 	} // getPopupMenu()
  
! 	/**
! 	 * addMenuListener
! 	 * @param listener TODO
! 	 */
! 	public void addMenuListener(MenuListener listener) {
! 		// TODO
! 	} // addMenuListener()
  
! 	/**
! 	 * removeMenuListener
! 	 * @param listener TODO
! 	 */
! 	public void removeMenuListener(MenuListener listener) {
! 		// TODO
! 	} // removeMenuListener()
  
! 	/**
! 	 * fireMenuSelected
! 	 */
! 	protected void fireMenuSelected() {
! 		// TODO
! 	} // fireMenuSelected()
  
! 	/**
! 	 * fireMenuDeselected
! 	 */
! 	protected void fireMenuDeselected() {
! 		// TODO
! 	} // fireMenuDeselected()
  
! 	/**
! 	 * fireMenuCanceled
! 	 */
! 	protected void fireMenuCanceled() {
! 		// TODO
! 	} // fireMenuCanceled()
  
! 	/**
! 	 * createMenuChangeListener
! 	 * @returns ChangeListener
! 	 */
! 	private ChangeListener createMenuChangeListener() {
! 		return null; // TODO
! 	} // createMenuChangeListener()
  
! 	/**
! 	 * createWinListener
! 	 * @param popup TODO
! 	 * @returns JMenu.WinListener
! 	 */
! 	protected JMenu.WinListener createWinListener(JPopupMenu popup) {
! 		return null; // TODO
! 	} // createWinListener()
  
! 	/**
! 	 * menuSelectionChanged
! 	 * @param value0 TODO
! 	 */
! 	public void menuSelectionChanged(boolean changed) {
! 		// TODO
! 	} // menuSelectionChanged()
  
! 	/**
! 	 * getSubElements
! 	 * @returns MenuElement[]
! 	 */
! 	public MenuElement[] getSubElements() {
! 		return null; // TODO
! 	} // getSubElements()
  
! 	/**
! 	 * getComponent
! 	 * @returns Component
! 	 */
! 	public Component getComponent() {
! 		return null; // TODO
! 	} // getComponent()
  
! 	/**
! 	 * setAccelerator
! 	 * @param keystroke TODO
! 	 */
! 	public void setAccelerator(KeyStroke keystroke) {
! 		// TODO
! 	} // setAccelerator()
  
! 	/**
! 	 * processKeyEvent
! 	 * @param event TODO
! 	 */
! 	protected void processKeyEvent(KeyEvent event) {
! 		// TODO
! 	} // processKeyEvent()
  
! 	/**
! 	 * doClick
! 	 * @param time TODO
! 	 */
! 	public void doClick(int time) {
! 		// TODO
! 	} // doClick()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJMenu(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JMenu
--- 43,893 ----
  import java.awt.event.KeyEvent;
  import java.awt.event.WindowAdapter;
  import java.awt.event.WindowEvent;
+ import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  import java.io.IOException;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
! import java.util.EventListener;
! 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.accessibility.AccessibleSelection;
  import javax.swing.event.MenuEvent;
  import javax.swing.event.MenuListener;
! import javax.swing.plaf.MenuItemUI;
  
  /**
!  * This class represents a menu that can be added to a menu bar or
!  * can be a submenu in some other menu. When JMenu is selected it
!  * displays JPopupMenu containing its menu items.
!  *
!  * <p>
!  * JMenu's fires MenuEvents when this menu's selection changes. If this menu
!  * is selected, then fireMenuSelectedEvent() is invoked. In case when menu is
!  * deselected or cancelled, then fireMenuDeselectedEvent() or 
!  * fireMenuCancelledEvent() is invoked, respectivelly.
!  * </p>
   */
! public class JMenu extends JMenuItem implements Accessible, MenuElement
  {
!   private static final long serialVersionUID = 4227225638931828014L;
  
!   /** A Popup menu associated with this menu, which pops up when menu is selected */
!   private JPopupMenu popupMenu = new JPopupMenu();
  
!   /** Whenever menu is selected or deselected the MenuEvent is fired to
!      menu's registered listeners. */
!   private MenuEvent menuEvent = new MenuEvent(this);
  
!   /*Amount of time, in milliseconds, that should pass before popupMenu
!     associated with this menu appears or disappers */
!   private int delay;
  
!   /* PopupListener */
!   protected WinListener popupListener;
  
!   /** Location at which popup menu associated with this menu will be
!      displayed */
!   private Point menuLocation;
  
!   /**
!    * Creates a new JMenu object.
!    */
!   public JMenu()
!   {
!     super();
!   }
  
!   /**
!    * Creates a new <code>JMenu</code> with the specified label.
!    *
!    * @param text label for this menu
!    */
!   public JMenu(String text)
!   {
!     super(text);
!     popupMenu.setInvoker(this);
!   }
  
!   /**
!    * Creates a new <code>JMenu</code> object.
!    *
!    * @param action Action that is used to create menu item tha will be
!    * added to the menu.
!    */
!   public JMenu(Action action)
!   {
!     super(action);
!     createActionChangeListener(this);
!     popupMenu.setInvoker(this);
!   }
  
!   /**
!    * Creates a new <code>JMenu</code> with specified label and an option
!    * for this menu to be tear-off menu.
!    *
!    * @param text label for this menu
!    * @param tearoff true if this menu should be tear-off and false otherwise
!    */
!   public JMenu(String text, boolean tearoff)
!   {
!     // FIXME: tearoff not implemented
!     this(text);
!   }
  
+   private void writeObject(ObjectOutputStream stream) throws IOException
+   {
+   }
  
!   /**
!    * Adds specified menu item to this menu
!    *
!    * @param item Menu item to add to this menu
!    *
!    * @return Menu item that was added
!    */
!   public JMenuItem add(JMenuItem item)
!   {
!     return popupMenu.add(item);
!   }
  
!   /**
!    * Adds specified component to this menu.
!    *
!    * @param component Component to add to this menu
!    *
!    * @return Component that was added
!    */
!   public Component add(Component component)
!   {
!     return popupMenu.add(component);
!   }
  
!   /**
!    * Adds specified component to this menu at the given index
!    *
!    * @param component Component to add
!    * @param index Position of this menu item in the menu
!    *
!    * @return Component that was added
!    */
!   public Component add(Component component, int index)
!   {
!     return popupMenu.add(component, index);
!   }
  
!   /**
!    * Adds JMenuItem constructed with the specified label to this menu
!    *
!    * @param text label for the menu item that will be added
!    *
!    * @return Menu Item that was added to this menu
!    */
!   public JMenuItem add(String text)
!   {
!     return popupMenu.add(text);
!   }
  
+   /**
+    * Adds JMenuItem constructed using properties from specified action.
+    *
+    * @param action action to construct the menu item with
+    *
+    * @return Menu Item that was added to this menu
+    */
+   public JMenuItem add(Action action)
+   {
+     return popupMenu.add(action);
+   }
  
!   /**
!    * Removes given menu item from this menu. Nothing happens if
!    * this menu doesn't contain specified menu item.
!    *
!    * @param item Menu Item which needs to be removed
!    */
!   public void remove(JMenuItem item)
!   {
!     popupMenu.remove(item);
!   }
  
!   /**
!    * Removes component at the specified index from this menu
!    *
!    * @param index Position of the component that needs to be removed in the menu
!    */
!   public void remove(int index)
!   {
!     popupMenu.remove(index);
!   }
  
+   /**
+    * Removes given component from this menu.
+    *
+    * @param component Component to remove
+    */
+   public void remove(Component component)
+   {
+     int index = popupMenu.getComponentIndex(component);
+     popupMenu.remove(index);
+   }
  
!   /**
!    * Removes all menu items from the menu
!    */
!   public void removeAll()
!   {
!     popupMenu.removeAll();
!   }
  
!   /**
!    * Creates JMenuItem with the specified text and inserts it in the
!    * at the specified index
!    *
!    * @param text label for the new menu item
!    * @param index index at which to insert newly created menu item.
!    */
!   public void insert(String text, int index)
!   {
!     this.insert(new JMenuItem(text), index);
!   }
  
+   /**
+    * Creates JMenuItem with the specified text and inserts it in the
+    * at the specified index. IllegalArgumentException is thrown
+    * if index is less than 0
+    *
+    * @param item menu item to insert
+    * @param index index at which to insert menu item.
+    * @return Menu item that was added to the menu
+    */
+   public JMenuItem insert(JMenuItem item, int index)
+   {
+     if (index < 0)
+       throw new IllegalArgumentException("index less than zero");
  
!     popupMenu.insert(item, index);
!     return item;
!   }
  
+   /**
+    * Creates JMenuItem with the associated action and inserts it to the menu
+    * at the specified index. IllegalArgumentException is thrown
+    * if index is less than 0
+    *
+    * @param action Action for the new menu item
+    * @param index index at which to insert newly created menu item.
+    * @return Menu item that was added to the menu
+    */
+   public JMenuItem insert(Action action, int index)
+   {
+     JMenuItem item = new JMenuItem(action);
+     this.insert(item, index);
  
!     return item;
!   }
  
!   /**
!    * This method sets this menuItem's UI to the UIManager's default for the
!    * current look and feel.
!    */
!   public void updateUI()
!   {
!     super.setUI((MenuItemUI) UIManager.getUI(this));
!     invalidate();
!   }
  
!   /**
!    * This method returns a name to identify which look and feel class will be
!    * the UI delegate for the menu.
!    *
!    * @return The Look and Feel classID. "MenuUI"
!    */
!   public String getUIClassID()
!   {
!     return "MenuUI";
!   }
  
!   /**
!    * Sets model for this menu.
!    *
!    * @param model model to set
!    */
!   public void setModel(ButtonModel model)
!   {
!     super.setModel(model);
!   }
  
!   /**
!    * Returns true if the menu is selected and false otherwise
!    *
!    * @return true if the menu is selected and false otherwise
!    */
!   public boolean isSelected()
!   {
!     return super.isArmed();
!   }
  
!   /**
!    * Changes this menu selected state if selected is true and false otherwise
!    * This method fires menuEvents to menu's registered listeners.
!    *
!    * @param selected true if the menu should be selected and false otherwise
!    */
!   public void setSelected(boolean selected)
!   {
!     // if this menu selection is true, then activate this menu and 
!     // display popup associated with this menu	
!     if (selected)
!       {
! 	super.setArmed(true);
! 	super.setSelected(true);
  
! 	// FIXME: The popup menu should be shown on the screen after certain
! 	// number of seconds pass. The 'delay' property of this menu indicates
! 	// this amount of seconds. 'delay' property is 0 by default.
! 	if (this.isShowing())
! 	  {
! 	    fireMenuSelected();
  
! 	    int x = 0;
! 	    int y = 0;
  
! 	    if (menuLocation == null)
! 	      {
! 		// Calculate correct position of the popup. Note that location of the popup 
! 		// passed to show() should be relative to the popup's invoker
! 		if (isTopLevelMenu())
! 		  y = this.getHeight();
! 		else
! 		  x = this.getWidth();
  
! 		getPopupMenu().show(this, x, y);
! 	      }
! 	    else
! 	      getPopupMenu().show(this, menuLocation.x, menuLocation.y);
! 	  }
!       }
  
!     else
!       {
! 	super.setSelected(false);
! 	super.setArmed(false);
! 	fireMenuDeselected();
! 	popupMenu.setVisible(false);
!       }
!   }
  
+   /**
+    * Checks if PopupMenu associated with this menu is visible
+    *
+    * @return true if the popup associated with this menu is currently visible
+    * on the screen and false otherwise.
+    */
+   public boolean isPopupMenuVisible()
+   {
+     return popupMenu.isVisible();
+   }
  
!   /**
!    * Sets popup menu visibility
!    *
!    * @param popup true if popup should be visible and false otherwise
!    */
!   public void setPopupMenuVisible(boolean popup)
!   {
!     if (getModel().isEnabled())
!       popupMenu.setVisible(popup);
!   }
  
!   /**
!    * Returns origin point of the popup menu
!    *
!    * @return Point containing
!    */
!   protected Point getPopupMenuOrigin()
!   {
!     // if menu in the menu bar
!     if (isTopLevelMenu())
!       return new Point(0, this.getHeight());
  
!     // if submenu            
!     return new Point(this.getWidth(), 0);
!   }
  
!   /**
!    * Returns delay property.
!    *
!    * @return delay property, indicating number of milliseconds before
!    * popup menu associated with the menu appears or disappears after
!    * menu was selected or deselected respectively
!    */
!   public int getDelay()
!   {
!     return delay;
!   }
  
!   /**
!    * Sets delay property for this menu. If given time for the delay
!    * property is negative, then IllegalArgumentException is thrown
!    *
!    * @param delay number of milliseconds before
!    * popup menu associated with the menu appears or disappears after
!    * menu was selected or deselected respectively
!    */
!   public void setDelay(int delay)
!   {
!     if (delay < 0)
!       throw new IllegalArgumentException("delay less than 0");
!     this.delay = delay;
!   }
  
+   /**
+    * Sets location at which popup menu should be displayed
+    * The location given is relative to this menu item
+    *
+    * @param x x-coordinate of the menu location
+    * @param y y-coordinate of the menu location
+    */
+   public void setMenuLocation(int x, int y)
+   {
+     menuLocation = new Point(x, y);
+   }
  
!   /**
!    * Creates and returns JMenuItem associated with the given action
!    *
!    * @param action Action to use for creation of JMenuItem
!    *
!    * @return JMenuItem that was creted with given action
!    */
!   protected JMenuItem createActionComponent(Action action)
!   {
!     return new JMenuItem(action);
!   }
  
!   /**
!    * Creates ActionChangeListener to listen for PropertyChangeEvents occuring
!    * in the action that is associated with this menu
!    *
!    * @param item menu that contains action to listen to
!    *
!    * @return The PropertyChangeListener
!    */
!   protected PropertyChangeListener createActionChangeListener(JMenuItem item)
!   {
!     return new ActionChangedListener(item);
!   }
  
!   /**
!    * Adds separator to the end of the menu items in the menu.
!    */
!   public void addSeparator()
!   {
!     getPopupMenu().addSeparator();
!   }
  
!   /**
!    * Inserts separator in the menu at the specified index.
!    *
!    * @param index Index at which separator should be inserted
!    */
!   public void insertSeparator(int index)
!   {
!     if (index < 0)
!       throw new IllegalArgumentException("index less than 0");
  
!     getPopupMenu().insert(new JPopupMenu.Separator(), index);
!   }
  
!   /**
!    * Returns menu item located at the specified index in the menu
!    *
!    * @param index Index at which to look for the menu item
!    *
!    * @return menu item located at the specified index in the menu
!    */
!   public JMenuItem getItem(int index)
!   {
!     if (index < 0)
!       throw new IllegalArgumentException("index less than 0");
  
!     Component c = popupMenu.getComponentAtIndex(index);
  
!     if (c instanceof JMenuItem)
!       return (JMenuItem) c;
!     else
!       return null;
!   }
  
!   /**
!    * Returns number of items in the menu including separators.
!    *
!    * @return number of items in the menu
!    *
!    * @see #getMenuComponentCount()
!    */
!   public int getItemCount()
!   {
!     return getMenuComponentCount();
!   }
  
!   /**
!    * Checks if this menu is a tear-off menu.
!    *
!    * @return true if this menu is a tear-off menu and false otherwise
!    */
!   public boolean isTearOff()
!   {
!     // NOT YET IMPLEMENTED 
!     return false;
!   }
  
!   /**
!    * Returns number of menu components in this menu
!    *
!    * @return number of menu components in this menu
!    */
!   public int getMenuComponentCount()
!   {
!     return popupMenu.getComponentCount();
!   }
  
!   /**
!    * Returns menu component located at the givent index
!    * in the menu
!    *
!    * @param index index at which to get the menu component in the menu
!    *
!    * @return Menu Component located in the menu at the specified index
!    */
!   public Component getMenuComponent(int index)
!   {
!     return (Component) popupMenu.getComponentAtIndex(index);
!   }
  
!   /**
!    * Return components belonging to this menu
!    *
!    * @return components belonging to this menu
!    */
!   public Component[] getMenuComponents()
!   {
!     return popupMenu.getComponents();
!   }
  
!   /**
!    * Checks if this menu is a top level menu. The menu is top
!    * level menu if it is inside the menu bar. While if the menu
!    * inside some other menu, it is considered to be a pull-right menu.
!    *
!    * @return true if this menu is top level menu, and false otherwise
!    */
!   public boolean isTopLevelMenu()
!   {
!     return getParent() instanceof JMenuBar;
!   }
  
!   /**
!    * Checks if given component exists in this menu. The submenus of
!    * this menu are checked as well
!    *
!    * @param component Component to look for
!    *
!    * @return true if the given component exists in this menu, and false otherwise
!    */
!   public boolean isMenuComponent(Component component)
!   {
!     return false;
!   }
  
!   /**
!    * Returns popup menu associated with the menu.
!    *
!    * @return popup menu associated with the menu.
!    */
!   public JPopupMenu getPopupMenu()
!   {
!     return popupMenu;
!   }
  
!   /**
!    * Adds MenuListener to the menu
!    *
!    * @param listener MenuListener to add
!    */
!   public void addMenuListener(MenuListener listener)
!   {
!     listenerList.add(MenuListener.class, listener);
!   }
  
!   /**
!    * Removes MenuListener from the menu
!    *
!    * @param listener MenuListener to remove
!    */
!   public void removeMenuListener(MenuListener listener)
!   {
!     listenerList.remove(MenuListener.class, listener);
!   }
  
!   /**
!    * Returns all registered <code>MenuListener</code> objects.
!    *
!    * @return an array of listeners
!    * 
!    * @since 1.4
!    */
!   public MenuListener[] getMenuListeners()
!   {
!     return (MenuListener[]) listenerList.getListeners(MenuListener.class);
!   }
  
!   /**
!    * This method fires MenuEvents to all menu's MenuListeners. In this case
!    * menuSelected() method of MenuListeners is called to indicated that the menu
!    * was selected.
!    */
!   protected void fireMenuSelected()
!   {
!     MenuListener[] listeners = getMenuListeners();
  
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].menuSelected(menuEvent);
!   }
  
!   /**
!    * This method fires MenuEvents to all menu's MenuListeners. In this case
!    * menuDeselected() method of MenuListeners is called to indicated that the menu
!    * was deselected.
!    */
!   protected void fireMenuDeselected()
!   {
!     EventListener[] ll = listenerList.getListeners(MenuListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((MenuListener) ll[i]).menuDeselected(menuEvent);
!   }
  
!   /**
!    * This method fires MenuEvents to all menu's MenuListeners. In this case
!    * menuSelected() method of MenuListeners is called to indicated that the menu
!    * was cancelled. The menu is cancelled when it's popup menu is close without selection.
!    */
!   protected void fireMenuCanceled()
!   {
!     EventListener[] ll = listenerList.getListeners(MenuListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((MenuListener) ll[i]).menuCanceled(menuEvent);
!   }
  
!   /**
!    * Creates WinListener that listens to the menu;s popup menu.
!    *
!    * @param popup JPopupMenu to listen to
!    *
!    * @return The WinListener
!    */
!   protected WinListener createWinListener(JPopupMenu popup)
!   {
!     return new WinListener(popup);
!   }
  
!   /**
!    * Method of the MenuElementInterface. It reacts to the selection
!    * changes in the menu. If this menu was selected, then it
!    * displayes popup menu associated with it and if this menu was
!    * deselected it hides the popup menu.
!    *
!    * @param changed true if the menu was selected and false otherwise
!    */
!   public void menuSelectionChanged(boolean changed)
!   {
!     // if this menu selection is true, then activate this menu and 
!     // display popup associated with this menu
!     setSelected(changed);
!   }
  
!   /**
!    * Method of MenuElement interface. Returns sub components of
!    * this menu.
!    *
!    * @return array containing popupMenu that is associated with this menu
!    */
!   public MenuElement[] getSubElements()
!   {
!     return new MenuElement[] { popupMenu };
!   }
  
!   /**
!    * @return Returns reference to itself
!    */
!   public Component getComponent()
!   {
!     return this;
!   }
  
!   /**
!    * This method is overriden with empty implementation, s.t the
!    * accelerator couldn't be set for the menu. The mnemonic should
!    * be used for the menu instead.
!    *
!    * @param keystroke accelerator for this menu
!    */
!   public void setAccelerator(KeyStroke keystroke)
!   {
!     throw new Error("setAccelerator() is not defined for JMenu.  Use setMnemonic() instead.");
!   }
  
!   /**
!    * This method process KeyEvent occuring when the menu is visible
!    *
!    * @param event The KeyEvent
!    */
!   protected void processKeyEvent(KeyEvent event)
!   {
!   }
  
!   /**
!    * Programatically performs click
!    *
!    * @param time Number of milliseconds for which this menu stays pressed
!    */
!   public void doClick(int time)
!   {
!     getModel().setArmed(true);
!     getModel().setPressed(true);
!     try
!       {
! 	java.lang.Thread.sleep(time);
!       }
!     catch (java.lang.InterruptedException e)
!       {
! 	// probably harmless
!       }
  
!     getModel().setPressed(false);
!     getModel().setArmed(false);
!     popupMenu.show(this, this.getWidth(), 0);
!   }
  
!   /**
!    * A string that describes this JMenu. Normally only used
!    * for debugging.
!    *
!    * @return A string describing this JMenu
!    */
!   protected String paramString()
!   {
!     return super.paramString();
!   }
  
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJMenu();
  
!     return accessibleContext;
!   }
  
!   protected class AccessibleJMenu extends AccessibleJMenuItem
!     implements AccessibleSelection
!   {
!     protected AccessibleJMenu()
!     {
!     }
  
!     public int getAccessibleChildrenCount()
!     {
!       return 0;
!     }
  
!     public Accessible getAccessibleChild(int value0)
!     {
!       return null;
!     }
  
!     public AccessibleSelection getAccessibleSelection()
!     {
!       return null;
!     }
  
!     public Accessible getAccessibleSelection(int value0)
!     {
!       return null;
!     }
  
!     public boolean isAccessibleChildSelected(int value0)
!     {
!       return false;
!     }
  
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.MENU;
!     }
  
!     public int getAccessibleSelectionCount()
!     {
!       return 0;
!     }
  
!     public void addAccessibleSelection(int value0)
!     {
!     }
  
!     public void removeAccessibleSelection(int value0)
!     {
!     }
  
!     public void clearAccessibleSelection()
!     {
!     }
  
!     public void selectAllAccessibleSelection()
!     {
!     }
!   }
  
!   protected class WinListener extends WindowAdapter implements Serializable
!   {
!     JPopupMenu popupMenu;
!     private static final long serialVersionUID = -6415815570638474823L;
  
!     public WinListener(JPopupMenu popup)
!     {
!     }
  
!     public void windowClosing(WindowEvent event)
!     {
!     }
!   }
  
!   /**
!    * This class listens to PropertyChangeEvents occuring in menu's action
!    */
!   protected class ActionChangedListener implements PropertyChangeListener
!   {
!     /** menu item associated with the action */
!     private JMenuItem menuItem;
  
!     /** Creates new ActionChangedListener and adds it to menuItem's action */
!     public ActionChangedListener(JMenuItem menuItem)
!     {
!       this.menuItem = menuItem;
  
+       Action a = menuItem.getAction();
+       if (a != null)
+ 	a.addPropertyChangeListener(this);
+     }
  
!     /**This method is invoked when some change occures in menuItem's action*/
!     public void propertyChange(PropertyChangeEvent evt)
!     {
!       // FIXME: Need to implement
!     }
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JMenuBar.java gcc-4.0.0/libjava/javax/swing/JMenuBar.java
*** gcc-3.4.3/libjava/javax/swing/JMenuBar.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JMenuBar.java	Wed Feb 16 20:02:29 2005
***************
*** 1,5 ****
! /* JMenuBar.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JMenuBar.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,51 ****
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.event.KeyEvent;
  import java.awt.event.MouseEvent;
  import javax.accessibility.Accessible;
  
! public class JMenuBar extends JComponent
  {
!   JMenuBar()
!     {
!     }
  }
--- 39,459 ----
  package javax.swing;
  
  import java.awt.Component;
+ import java.awt.Graphics;
+ import java.awt.Insets;
  import java.awt.event.KeyEvent;
  import java.awt.event.MouseEvent;
+ 
  import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.swing.plaf.MenuBarUI;
  
! /**
!  * JMenuBar is a container for menu's. For a menu bar to be seen on the
!  * screen, at least one menu should be added to it. Just like adding
!  * components to container, one can use add() to add menu's to the menu bar.
!  * Menu's will be displayed in the menu  bar in the order they were added.
!  * The JMenuBar uses selectionModel to keep track of selected menu index.
!  * JMenuBar's selectionModel will fire ChangeEvents to its registered 
!  * listeners when the selected index changes.
!  */
! public class JMenuBar extends JComponent implements Accessible, MenuElement
  {
!   private static final long serialVersionUID = -8191026883931977036L;
! 
!   /** JMenuBar's model. It keeps track of selected menu's index */
!   private transient SingleSelectionModel selectionModel;
! 
!   /* borderPainted property indicating if the menuBar's border will be painted*/
!   private boolean borderPainted;
! 
!   /* margin between menu bar's border and its menues*/
!   private Insets margin;
! 
!   /**
!    * Creates a new JMenuBar object.
!    */
!   public JMenuBar()
!   {
!     selectionModel = new DefaultSingleSelectionModel();
!     borderPainted = true;
!     updateUI();
!   }
! 
!   /**
!    * Adds menu to the menu bar
!    *
!    * @param c menu to add
!    *
!    * @return reference to the added menu
!    */
!   public JMenu add(JMenu c)
!   {
!     c.setAlignmentX(Component.LEFT_ALIGNMENT);
!     super.add(c);
!     return c;
!   }
! 
!   /**
!    * This method overrides addNotify() in the Container to register
!    * this menu bar with the current keyboard manager.
!    */
!   public void addNotify()
!   {
!     // FIXME: Should register this menu bar with the keyboard manager     
!     super.addNotify();
!   }
! 
!   public AccessibleContext getAccessibleContext()
!   {
!     return null;
!   }
! 
!   /**
!    * Returns reference to this menu bar
!    *
!    * @return reference to this menu bar
!    */
!   public Component getComponent()
!   {
!     return this;
!   }
! 
!   /**
!    * Returns component at the specified index.
!    *
!    * @param i index of the component to get
!    *
!    * @return component at the specified index. Null is returned if
!    * component at the specified index doesn't exist.
!    * @deprecated Replaced by getComponent(int)
!    */
!   public Component getComponentAtIndex(int i)
!   {
!     return getComponent(i);
!   }
! 
!   /**
!    * Returns index of the specified component
!    *
!    * @param c Component to search for
!    *
!    * @return index of the specified component. -1 is returned if
!    * specified component doesnt' exist in the menu bar.
!    */
!   public int getComponentIndex(Component c)
!   {
!     Component[] comps = getComponents();
! 
!     int index = -1;
! 
!     for (int i = 0; i < comps.length; i++)
!       {
! 	if (comps[i].equals(c))
! 	  {
! 	    index = i;
! 	    break;
! 	  }
!       }
! 
!     return index;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public JMenu getHelpMenu()
!   {
!     return null;
!   }
! 
!   /**
!    * Returns margin betweeen menu bar's border and its menues
!    *
!    * @return margin between menu bar's border and its menues
!    */
!   public Insets getMargin()
!   {
!     if (margin == null)
!       return new Insets(0, 0, 0, 0);
!     else
!       return margin;
!   }
! 
!   /**
!    * Return menu at the specified index. If component at the
!    * specified index is not a menu, then null is returned.
!    *
!    * @param index index to look for the menu
!    *
!    * @return menu at specified index, or null if menu doesn't exist
!    * at the specified index.
!    */
!   public JMenu getMenu(int index)
!   {
!     if (getComponentAtIndex(index) instanceof JMenu)
!       return (JMenu) getComponentAtIndex(index);
!     else
!       return null;
!   }
! 
!   /**
!    * Returns number of menu's in this menu bar
!    *
!    * @return number of menu's in this menu bar
!    */
!   public int getMenuCount()
!   {
!     return getComponentCount();
!   }
! 
!   /**
!    * Returns selection model for this menu bar. SelectionModel
!    * keeps track of the selected menu in the menu bar. Whenever
!    * selected property of selectionModel changes, the ChangeEvent
!    * will be fired its ChangeListeners.
!    *
!    * @return selection model for this menu bar.
!    */
!   public SingleSelectionModel getSelectionModel()
!   {
!     return selectionModel;
!   }
! 
!   /**
!    * Method of MenuElement interface. It returns subcomponents
!    * of the menu bar, which are all the menues that it contains.
!    *
!    * @return MenuElement[] array containing menues in this menu bar
!    */
!   public MenuElement[] getSubElements()
!   {
!     MenuElement[] subElements = new MenuElement[getComponentCount()];
! 
!     for (int i = 0; i < getComponentCount(); i++)
!       subElements[i] = (MenuElement) getMenu(i);
! 
!     return subElements;
!   }
! 
!   /**
!     * Set the "UI" property of the menu bar, which is a look and feel class
!     * responsible for handling the menuBar's input events and painting it.
!     *
!     * @return The current "UI" property
!     */
!   public MenuBarUI getUI()
!   {
!     return (MenuBarUI) ui;
!   }
! 
!   /**
!    * This method returns a name to identify which look and feel class will be
!    * the UI delegate for the menu bar.
!    *
!    * @return The Look and Feel classID. "MenuItemUI"
!    */
!   public String getUIClassID()
!   {
!     return "MenuBarUI";
!   }
! 
!   /**
!    * Returns true if menu bar paints its border and false otherwise
!    *
!    * @return true if menu bar paints its border and false otherwise
!    */
!   public boolean isBorderPainted()
!   {
!     return borderPainted;
!   }
! 
!   /**
!    * Returns true if some menu in menu bar is selected.
!    *
!    * @return true if some menu in menu bar is selected and false otherwise
!    */
!   public boolean isSelected()
!   {
!     return selectionModel.isSelected();
!   }
! 
!   /**
!    * This method does nothing by default. This method is need for the
!    * MenuElement interface to be implemented.
!    *
!    * @param isIncluded true if menuBar is included in the selection
!    * and false otherwise
!    */
!   public void menuSelectionChanged(boolean isIncluded)
!   {
!     // Do nothing - needed for implementation of MenuElement interface
!   }
! 
!   /**
!    * Paints border of the menu bar, if its borderPainted property is set to
!    * true.
!    *
!    * @param g The graphics context with which to paint the border
!    */
!   protected void paintBorder(Graphics g)
!   {
!     if (borderPainted)
!       getBorder().paintBorder(this, g, 0, 0, getSize(null).width,
!                               getSize(null).height);
!   }
! 
!   /**
!    * A string that describes this JMenuBar. Normally only used
!    * for debugging.
!    *
!    * @return A string describing this JMenuBar
!    */
!   protected String paramString()
!   {
!     StringBuffer sb = new StringBuffer();
!     sb.append(super.paramString());
!     sb.append(",margin=");
!     if (getMargin() != null)
!       sb.append(getMargin());
!     sb.append(",paintBorder=").append(isBorderPainted());
!     return sb.toString();
!   }
! 
!   /**
!    * Process key events forwarded from MenuSelectionManager. This method
!    * doesn't do anything. It is here to conform to the MenuElement interface.
!    *
!    * @param event event forwarded from MenuSelectionManager
!    * @param path path to the menu element from which event was generated
!    * @param manager MenuSelectionManager for the current menu hierarchy
!    *
!    */
!   public void processKeyEvent(KeyEvent e, MenuElement[] path,
!                               MenuSelectionManager manager)
!   {
!     // Do nothing - needed for implementation of MenuElement interface
!   }
! 
!   /**
!    * Process mouse events forwarded from MenuSelectionManager. This method
!    * doesn't do anything. It is here to conform to the MenuElement interface.
!    *
!    * @param event event forwarded from MenuSelectionManager
!    * @param path path to the menu element from which event was generated
!    * @param manager MenuSelectionManager for the current menu hierarchy
!    *
!    */
!   public void processMouseEvent(MouseEvent event, MenuElement[] path,
!                                 MenuSelectionManager manager)
!   {
!     // Do nothing - needed for implementation of MenuElement interface
!   }
! 
!   /**
!    * This method overrides removeNotify() in the Container to
!    * unregister this menu bar from the current keyboard manager.
!    */
!   public void removeNotify()
!   {
!     // Must unregister this menu bar with the current keyboard manager.
!     super.removeNotify();
!   }
! 
!   /**
!    * Sets painting status of the border. If 'b' is true then menu bar's
!    * border will be painted, and it will not be painted otherwise.
!    *
!    * @param b indicates if menu bar's border should be painted.
!    */
!   public void setBorderPainted(boolean b)
!   {
!     if (b != borderPainted)
!       {
! 	boolean old = borderPainted;
! 	borderPainted = b;
! 	firePropertyChange("borderPainted", old, b);
! 	revalidate();
! 	repaint();
!       }
!   }
! 
!   /**
!    * Sets help menu for this menu bar
!    *
!    * @param menu help menu
!    */
!   public void setHelpMenu(JMenu menu)
!   {
!   }
! 
!   /**
!    * Sets the menu bar's "margin" bound property,  which represents
!    * distance between the menubar's border and its menus.
!    * icon. When marging property is modified, PropertyChangeEvent will
!    * be fired to menuBar's PropertyChangeListener's.
!    *
!    * @param m distance between the menubar's border and its menus.
!    *
!    */
!   public void setMargin(Insets m)
!   {
!     if (m != margin)
!       {
! 	Insets oldMargin = margin;
! 	margin = m;
! 	firePropertyChange("margin", oldMargin, margin);
!       }
!   }
! 
!   /**
!    * Changes menu bar's selection to the specified menu.
!    * This method updates selected index of menu bar's selection model,
!    * which results in a model firing change event.
!    *
!    * @param sel menu to select
!    */
!   public void setSelected(Component sel)
!   {
!     int index = getComponentIndex(sel);
!     selectionModel.setSelectedIndex(index);
!   }
! 
!   /**
!    * Sets menuBar's selection model to the one specified
!    *
!    * @param model SingleSelectionModel that needs to be set for this menu bar
!    */
!   public void setSelectionModel(SingleSelectionModel model)
!   {
!     if (selectionModel != model)
!       {
! 	SingleSelectionModel oldModel = selectionModel;
! 	selectionModel = model;
! 	firePropertyChange("model", oldModel, selectionModel);
!       }
!   }
! 
!   /**
!    * Set the "UI" property of the menu bar, which is a look and feel class
!    * responsible for handling menuBar's input events and painting it.
!    *
!    * @param ui The new "UI" property
!    */
!   public void setUI(MenuBarUI ui)
!   {
!     super.setUI(ui);
!   }
! 
!   /**
!    * Set the "UI" property to a class constructed, via the {@link
!    * UIManager}, from the current look and feel.
!    */
!   public void updateUI()
!   {
!     setUI((MenuBarUI) UIManager.getUI(this));
!     invalidate();
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JMenuItem.java gcc-4.0.0/libjava/javax/swing/JMenuItem.java
*** gcc-3.4.3/libjava/javax/swing/JMenuItem.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JMenuItem.java	Wed Feb 16 20:02:29 2005
***************
*** 1,5 ****
  /* JMenuItem.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JMenuItem.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,50 ****
--- 39,54 ----
  package javax.swing;
  
  import java.awt.Component;
+ import java.awt.event.InputEvent;
  import java.awt.event.KeyEvent;
  import java.awt.event.MouseEvent;
+ import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
+ import java.util.EventListener;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
*************** import javax.swing.event.MenuKeyListener
*** 57,473 ****
  import javax.swing.plaf.MenuItemUI;
  
  /**
!  * JMenuItem
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JMenuItem extends AbstractButton implements Accessible, MenuElement {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * AccessibleJMenuItem
! 	 */
! 	protected class AccessibleJMenuItem extends AccessibleAbstractButton 
! 			implements ChangeListener {
  
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
  
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor AccessibleJMenuItem
! 		 * @param component TODO
! 		 */
! 		AccessibleJMenuItem(JMenuItem component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJMenuItem()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * stateChanged
! 		 * @param event TODO
! 		 */
! 		public void stateChanged(ChangeEvent event) {
! 			// TODO
! 		} // stateChanged()
  
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.MENU_ITEM;
! 		} // getAccessibleRole()
  
  
! 	} // AccessibleJMenuItem
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "MenuItemUI";
  
! 	/**
! 	 * accelerator
! 	 */
! 	private KeyStroke accelerator;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JMenuItem
! 	 */
! 	public JMenuItem() {
! 		// TODO
! 	} // JMenuItem()
  
! 	/**
! 	 * Constructor JMenuItem
! 	 * @param icon TODO
! 	 */
! 	public JMenuItem(Icon icon) {
! 		// TODO
! 	} // JMenuItem()
  
! 	/**
! 	 * Constructor JMenuItem
! 	 * @param text TODO
! 	 */
! 	public JMenuItem(String text) {
! 		// TODO
! 	} // JMenuItem()
  
! 	/**
! 	 * Constructor JMenuItem
! 	 * @param action TODO
! 	 */
! 	public JMenuItem(Action action) {
! 		// TODO
! 	} // JMenuItem()
  
! 	/**
! 	 * Constructor JMenuItem
! 	 * @param text TODO
! 	 * @param icon TODO
! 	 */
! 	public JMenuItem(String text, Icon icon) {
! 		// TODO
! 	} // JMenuItem()
  
! 	/**
! 	 * Constructor JMenuItem
! 	 * @param text TODO
! 	 * @param mnemonic TODO
! 	 */
! 	public JMenuItem(String text, int mnemonic) {
! 		// TODO
! 	} // JMenuItem()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * readObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 * @exception ClassNotFoundException TODO
! 	 */
! 	private void readObject(ObjectInputStream stream) 
! 			throws IOException, ClassNotFoundException {
! 		// TODO
! 	} // readObject()
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * init
! 	 * @param text TODO
! 	 * @param icon TODO
! 	 */
! 	protected void init(String text, Icon icon) {
! 		// TODO
! 	} // init()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(MenuItemUI ui) {
! 		super.setUI(ui);
! 		// TODO
! 	} // setUI()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((MenuItemUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * isArmed
! 	 * @returns boolean
! 	 */
! 	public boolean isArmed() {
! 		return false; // TODO
! 	} // isArmed()
  
! 	/**
! 	 * setArmed
! 	 * @param armed TODO
! 	 */
! 	public void setArmed(boolean armed) {
! 		// TODO
! 	} // setArmed()
  
! 	/**
! 	 * setEnabled
! 	 * @param enabled TODO
! 	 */
! 	public void setEnabled(boolean enabled) {
! 		// TODO
! 	} // setEnabled()
  
! 	/**
! 	 * getAccelerator
! 	 * @returns KeyStroke
! 	 */
! 	public KeyStroke getAccelerator() {
! 		return null; // TODO
! 	} // getAccelerator()
  
! 	/**
! 	 * setAccelerator
! 	 * @param keystroke TODO
! 	 */
! 	public void setAccelerator(KeyStroke keystroke) {
! 		// TODO
! 	} // setAccelerator()
  
! 	/**
! 	 * configurePropertiesFromAction
! 	 * @param action TODO
! 	 */
! 	protected void configurePropertiesFromAction(Action action) {
! 		// TODO
! 	} // configurePropertiesFromAction()
  
! 	/**
! 	 * createActionPropertyChangeListener
! 	 * @param action TODO
! 	 * @returns PropertyChangeListener
! 	 */
! 	protected PropertyChangeListener createActionPropertyChangeListener(Action action) {
! 		return null; // TODO
! 	} // createActionPropertyChangeListener()
  
! 	/**
! 	 * processMouseEvent
! 	 * @param event TODO
! 	 * @param path TODO
! 	 * @param manager TODO
! 	 */
! 	public void processMouseEvent(MouseEvent event, MenuElement[] path,
! 			MenuSelectionManager manager) {
! 		// TODO
! 	} // processMouseEvent()
  
! 	/**
! 	 * processKeyEvent
! 	 * @param event TODO
! 	 * @param path TODO
! 	 * @param manager TODO
! 	 */
! 	public void processKeyEvent(KeyEvent event, MenuElement[] path,
! 			MenuSelectionManager manager) {
! 		// TODO
! 	} // processKeyEvent()
  
! 	/**
! 	 * processMenuDragMouseEvent
! 	 * @param event TODO
! 	 */
! 	public void processMenuDragMouseEvent(MenuDragMouseEvent event) {
! 		// TODO
! 	} // processMenuDragMouseEvent()
  
! 	/**
! 	 * processMenuKeyEvent
! 	 * @param event TODO
! 	 */
! 	public void processMenuKeyEvent(MenuKeyEvent event) {
! 		// TODO
! 	} // processMenuKeyEvent()
  
! 	/**
! 	 * fireMenuDragMouseEntered
! 	 * @param event TODO
! 	 */
! 	protected void fireMenuDragMouseEntered(MenuDragMouseEvent event) {
! 		// TODO
! 	} // fireMenuDragMouseEntered()
  
! 	/**
! 	 * fireMenuDragMouseExited
! 	 * @param event TODO
! 	 */
! 	protected void fireMenuDragMouseExited(MenuDragMouseEvent event) {
! 		// TODO
! 	} // fireMenuDragMouseExited()
  
! 	/**
! 	 * fireMenuDragMouseDragged
! 	 * @param event TODO
! 	 */
! 	protected void fireMenuDragMouseDragged(MenuDragMouseEvent event) {
! 		// TODO
! 	} // fireMenuDragMouseDragged()
  
! 	/**
! 	 * fireMenuDragMouseReleased
! 	 * @param event TODO
! 	 */
! 	protected void fireMenuDragMouseReleased(MenuDragMouseEvent event) {
! 		// TODO
! 	} // fireMenuDragMouseReleased()
  
! 	/**
! 	 * fireMenuKeyPressed
! 	 * @param event TODO
! 	 */
! 	protected void fireMenuKeyPressed(MenuKeyEvent event) {
! 		// TODO
! 	} // fireMenuKeyPressed()
  
! 	/**
! 	 * fireMenuKeyReleased
! 	 * @param event TODO
! 	 */
! 	protected void fireMenuKeyReleased(MenuKeyEvent event) {
! 		// TODO
! 	} // fireMenuKeyReleased()
  
! 	/**
! 	 * fireMenuKeyTyped
! 	 * @param event TODO
! 	 */
! 	protected void fireMenuKeyTyped(MenuKeyEvent event) {
! 		// TODO
! 	} // fireMenuKeyTyped()
  
! 	/**
! 	 * menuSelectionChanged
! 	 * @param changed TODO
! 	 */
! 	public void menuSelectionChanged(boolean changed) {
! 		// TODO
! 	} // menuSelectionChanged()
  
! 	/**
! 	 * getSubElements
! 	 * @returns MenuElement[]
! 	 */
! 	public MenuElement[] getSubElements() {
! 		return null; // TODO
! 	} // getSubElements()
  
! 	/**
! 	 * getComponent
! 	 * @returns Component
! 	 */
! 	public Component getComponent() {
! 		return null; // TODO
! 	} // getComponent()
  
! 	/**
! 	 * addMenuDragMouseListener
! 	 * @param listener TODO
! 	 */
! 	public void addMenuDragMouseListener(MenuDragMouseListener listener) {
! 		// TODO
! 	} // addMenuDragMouseListener()
  
! 	/**
! 	 * removeMenuDragMouseListener
! 	 * @param listener TODO
! 	 */
! 	public void removeMenuDragMouseListener(MenuDragMouseListener listener) {
! 		// TODO
! 	} // removeMenuDragMouseListener()
  
! 	/**
! 	 * addMenuKeyListener
! 	 * @param listener TODO
! 	 */
! 	public void addMenuKeyListener(MenuKeyListener listener) {
! 		// TODO
! 	} // addMenuKeyListener()
  
! 	/**
! 	 * removeMenuKeyListener
! 	 * @param listener TODO
! 	 */
! 	public void removeMenuKeyListener(MenuKeyListener listener) {
! 		// TODO
! 	} // removeMenuKeyListener()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJMenuItem(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JMenuItem
--- 61,674 ----
  import javax.swing.plaf.MenuItemUI;
  
  /**
!  * JMenuItem represents element in the menu. It inherits most of
!  * its functionality from AbstractButton, however its behavior somewhat
!  * varies from it. JMenuItem fire different kinds of events.
!  * PropertyChangeEvents are fired when menuItems properties are modified;
!  * ChangeEvents are fired when menuItem's state changes and actionEvents are
!  * fired when menu item is selected. In addition to this events menuItem also
!  * fire MenuDragMouseEvent and MenuKeyEvents when mouse is dragged over
!  * the menu item or associated key with menu item is invoked respectively.
   */
! public class JMenuItem extends AbstractButton implements Accessible,
!                                                          MenuElement
! {
!   private static final long serialVersionUID = -1681004643499461044L;
  
!   /** Combination of keyboard keys that can be used to activate this menu item */
!   private KeyStroke accelerator;
  
!   /**
!    * Creates a new JMenuItem object.
!    */
!   public JMenuItem()
!   {
!     super(null, null);
!   }
  
!   /**
!    * Creates a new JMenuItem with the given icon.
!    *
!    * @param icon Icon that will be displayed on the menu item
!    */
!   public JMenuItem(Icon icon)
!   {
!     // FIXME: The requestedFocusEnabled property should
!     // be set to false, when only icon is set for menu item.
!     super(null, icon);
!   }
  
+   /**
+    * Creates a new JMenuItem with the given label.
+    *
+    * @param text label for the menu item
+    */
+   public JMenuItem(String text)
+   {
+     super(text, null);
+   }
  
!   /**
!    * Creates a new JMenuItem associated with the specified action.
!    *
!    * @param action action for this menu item
!    */
!   public JMenuItem(Action action)
!   {
!     super(null, null);
!     super.setAction(action);
!   }
  
!   /**
!    * Creates a new JMenuItem with specified text and icon.
!    * Text is displayed to the left of icon by default.
!    *
!    * @param text label for this menu item
!    * @param icon icon that will be displayed on this menu item
!    */
!   public JMenuItem(String text, Icon icon)
!   {
!     super(text, icon);
!   }
  
+   /**
+    * Creates a new JMenuItem object.
+    *
+    * @param text label for this menu item
+    * @param mnemonic - Single key that can be used with a
+    * look-and-feel meta key to activate this menu item. However
+    * menu item should be visible on the screen when mnemonic is used.
+    */
+   public JMenuItem(String text, int mnemonic)
+   {
+     super(text, null);
+     setMnemonic(mnemonic);
+   }
  
!   private void readObject(ObjectInputStream stream)
!                    throws IOException, ClassNotFoundException
!   {
!   }
  
!   private void writeObject(ObjectOutputStream stream) throws IOException
!   {
!   }
  
!   /**
!    * Initializes this menu item
!    *
!    * @param text label for this menu item
!    * @param icon icon to be displayed for this menu item
!    */
!   protected void init(String text, Icon icon)
!   {
!     super.init(text, icon);
  
+     // Initializes properties for this menu item, that are different
+     // from Abstract button properties. 
+     /* NOTE: According to java specifications paint_border should be set to false,
+       since menu item should not have a border. However running few java programs
+       it seems that menu items and menues can have a border. Commenting
+       out statement below for now. */
+     //borderPainted = false;
+     focusPainted = false;
+     horizontalAlignment = JButton.LEFT;
+     horizontalTextPosition = JButton.LEFT;
+   }
  
!   /**
!    * Set the "UI" property of the menu item, which is a look and feel class
!    * responsible for handling menuItem's input events and painting it.
!    *
!    * @param ui The new "UI" property
!    */
!   public void setUI(MenuItemUI ui)
!   {
!     super.setUI(ui);
!   }
  
+   /**
+    * This method sets this menuItem's UI to the UIManager's default for the
+    * current look and feel.
+    */
+   public void updateUI()
+   {
+     MenuItemUI mi = ((MenuItemUI) UIManager.getUI(this));
+     setUI(mi);
+     invalidate();
+   }
  
!   /**
!    * This method returns a name to identify which look and feel class will be
!    * the UI delegate for the menuItem.
!    *
!    * @return The Look and Feel classID. "MenuItemUI"
!    */
!   public String getUIClassID()
!   {
!     return "MenuItemUI";
!   }
  
!   /**
!    * Returns true if button's model is armed and false otherwise. The
!    * button model is armed if menu item has focus or it is selected.
!    *
!    * @return $boolean$ true if button's model is armed and false otherwise
!    */
!   public boolean isArmed()
!   {
!     return getModel().isArmed();
!   }
  
!   /**
!    * Sets menuItem's "ARMED" property
!    *
!    * @param armed DOCUMENT ME!
!    */
!   public void setArmed(boolean armed)
!   {
!     getModel().setArmed(armed);
!   }
  
+   /**
+    * Enable or disable menu item. When menu item is disabled,
+    * its text and icon are grayed out if they exist.
+    *
+    * @param enabled if true enable menu item, and disable otherwise.
+    */
+   public void setEnabled(boolean enabled)
+   {
+     super.setEnabled(enabled);
+   }
  
!   /**
!    * Return accelerator for this menu item.
!    *
!    * @return $KeyStroke$ accelerator for this menu item.
!    */
!   public KeyStroke getAccelerator()
!   {
!     return accelerator;
!   }
  
!   /**
!    * Sets accelerator for this menu item.
!    *
!    * @param keystroke accelerator for this menu item.
!    */
!   public void setAccelerator(KeyStroke keystroke)
!   {
!     this.accelerator = keystroke;
!   }
  
!   /**
!    * Configures menu items' properties from properties of the specified action.
!    * This method overrides configurePropertiesFromAction from AbstractButton
!    * to also set accelerator property.
!    *
!    * @param action action to configure properties from
!    */
!   protected void configurePropertiesFromAction(Action action)
!   {
!     super.configurePropertiesFromAction(action);
  
!     if (! (this instanceof JMenu) && action != null)
!       setAccelerator((KeyStroke) (action.getValue(Action.ACCELERATOR_KEY)));
!   }
  
!   /**
!    * Creates PropertyChangeListener to listen for the changes in action
!    * properties.
!    *
!    * @param action action to listen to for property changes
!    *
!    * @return $PropertyChangeListener$ Listener that listens to changes in
!    * action properties.
!    */
!   protected PropertyChangeListener createActionPropertyChangeListener(Action action)
!   {
!     return new PropertyChangeListener()
!       {
! 	public void propertyChange(PropertyChangeEvent e)
! 	{
! 	  Action act = (Action) (e.getSource());
! 	  configurePropertiesFromAction(act);
! 	}
!       };
!   }
  
!   /**
!    * Process mouse events forwarded from MenuSelectionManager.
!    *
!    * @param event event forwarded from MenuSelectionManager
!    * @param path path to the menu element from which event was generated
!    * @param manager MenuSelectionManager for the current menu hierarchy
!    */
!   public void processMouseEvent(MouseEvent event, MenuElement[] path,
!                                 MenuSelectionManager manager)
!   {
!     // Fire MenuDragMouseEvents if mouse is being dragged.
!     boolean dragged
!       = (event.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0;
!     if (dragged)
!       processMenuDragMouseEvent(createMenuDragMouseEvent(event, path, manager));
  
!     switch (event.getID())
!       {
!       case MouseEvent.MOUSE_CLICKED:
! 	break;
!       case MouseEvent.MOUSE_ENTERED:
! 	if (isRolloverEnabled())
! 	  model.setRollover(true);
! 	break;
!       case MouseEvent.MOUSE_EXITED:
! 	if (isRolloverEnabled())
! 	  model.setRollover(false);
  
+ 	// for JMenu last element on the path is its popupMenu.
+ 	// JMenu shouldn't me disarmed.	
+ 	if (! (path[path.length - 1] instanceof JPopupMenu) && ! dragged)
+ 	  setArmed(false);
+ 	break;
+       case MouseEvent.MOUSE_PRESSED:
+ 	if ((event.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0)
+ 	  {
+ 	    model.setArmed(true);
+ 	    model.setPressed(true);
+ 	  }
+ 	break;
+       case MouseEvent.MOUSE_RELEASED:
+ 	break;
+       case MouseEvent.MOUSE_MOVED:
+ 	break;
+       case MouseEvent.MOUSE_DRAGGED:
+ 	break;
+       }
+   }
  
!   /**
!    * Creates MenuDragMouseEvent.
!    *
!    * @param event MouseEvent that occured while mouse was pressed.
!    * @param path Path the the menu element where the dragging event was
!    *        originated
!    * @param manager MenuSelectionManager for the current menu hierarchy.
!    *
!    * @return new MenuDragMouseEvent
!    */
!   private MenuDragMouseEvent createMenuDragMouseEvent(MouseEvent event,
!                                                       MenuElement[] path,
!                                                       MenuSelectionManager manager)
!   {
!     return new MenuDragMouseEvent((Component) event.getSource(),
!                                   event.getID(), event.getWhen(),
!                                   event.getModifiers(), event.getX(),
!                                   event.getY(), event.getClickCount(),
!                                   event.isPopupTrigger(), path, manager);
!   }
  
!   /**
!    * Process key events forwarded from MenuSelectionManager.
!    *
!    * @param event event forwarded from MenuSelectionManager
!    * @param path path to the menu element from which event was generated
!    * @param manager MenuSelectionManager for the current menu hierarchy
!    */
!   public void processKeyEvent(KeyEvent event, MenuElement[] path,
!                               MenuSelectionManager manager)
!   {
!     // Need to implement.
!   }
  
!   /**
!    * This method fires MenuDragMouseEvents to registered listeners.
!    * Different types of MenuDragMouseEvents are fired depending
!    * on the observed mouse event.
!    *
!    * @param event Mouse
!    */
!   public void processMenuDragMouseEvent(MenuDragMouseEvent event)
!   {
!     switch (event.getID())
!       {
!       case MouseEvent.MOUSE_ENTERED:
! 	fireMenuDragMouseEntered(event);
! 	break;
!       case MouseEvent.MOUSE_EXITED:
! 	fireMenuDragMouseExited(event);
! 	break;
!       case MouseEvent.MOUSE_DRAGGED:
! 	fireMenuDragMouseDragged(event);
! 	break;
!       case MouseEvent.MOUSE_RELEASED:
! 	fireMenuDragMouseReleased(event);
! 	break;
!       }
!   }
  
!   /**
!    * This method fires MenuKeyEvent to registered listeners.
!    * Different types of MenuKeyEvents are fired depending
!    * on the observed key event.
!    *
!    * @param event DOCUMENT ME!
!    */
!   public void processMenuKeyEvent(MenuKeyEvent event)
!   {
!     // Need to implement.
!   }
  
!   /**
!    * Fires MenuDragMouseEvent to all of the menuItem's MouseInputListeners.
!    *
!    * @param event The event signifying that mouse entered menuItem while it was dragged
!    */
!   protected void fireMenuDragMouseEntered(MenuDragMouseEvent event)
!   {
!     EventListener[] ll = listenerList.getListeners(MenuDragMouseListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((MenuDragMouseListener) ll[i]).menuDragMouseEntered(event);
!   }
  
!   /**
!    * Fires MenuDragMouseEvent to all of the menuItem's MouseInputListeners.
!    *
!    * @param event The event signifying that mouse has exited menu item, while it was dragged
!    */
!   protected void fireMenuDragMouseExited(MenuDragMouseEvent event)
!   {
!     EventListener[] ll = listenerList.getListeners(MenuDragMouseListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((MenuDragMouseListener) ll[i]).menuDragMouseExited(event);
!   }
  
!   /**
!    * Fires MenuDragMouseEvent to all of the menuItem's MouseInputListeners.
!    *
!    * @param event The event signifying that mouse is being dragged over the menuItem
!    */
!   protected void fireMenuDragMouseDragged(MenuDragMouseEvent event)
!   {
!     EventListener[] ll = listenerList.getListeners(MenuDragMouseListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((MenuDragMouseListener) ll[i]).menuDragMouseDragged(event);
!   }
  
!   /**
!    * This method fires a MenuDragMouseEvent to all the MenuItem's MouseInputListeners.
!    *
!    * @param event The event signifying that mouse was released while it was dragged over the menuItem
!    */
!   protected void fireMenuDragMouseReleased(MenuDragMouseEvent event)
!   {
!     EventListener[] ll = listenerList.getListeners(MenuDragMouseListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((MenuDragMouseListener) ll[i]).menuDragMouseReleased(event);
!   }
  
!   /**
!    * This method fires a MenuKeyEvent to all the MenuItem's MenuKeyListeners.
!    *
!    * @param event The event signifying that key associated with this menu was pressed
!    */
!   protected void fireMenuKeyPressed(MenuKeyEvent event)
!   {
!     EventListener[] ll = listenerList.getListeners(MenuKeyListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((MenuKeyListener) ll[i]).menuKeyPressed(event);
!   }
  
!   /**
!    * This method fires a MenuKeyEvent to all the MenuItem's MenuKeyListeners.
!    *
!    * @param event The event signifying that key associated with this menu was released
!    */
!   protected void fireMenuKeyReleased(MenuKeyEvent event)
!   {
!     EventListener[] ll = listenerList.getListeners(MenuKeyListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((MenuKeyListener) ll[i]).menuKeyTyped(event);
!   }
  
!   /**
!    * This method fires a MenuKeyEvent to all the MenuItem's MenuKeyListeners.
!    *
!    * @param event The event signifying that key associated with this menu was typed.
!    *        The key is typed when it was pressed and then released
!    */
!   protected void fireMenuKeyTyped(MenuKeyEvent event)
!   {
!     EventListener[] ll = listenerList.getListeners(MenuKeyListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((MenuKeyListener) ll[i]).menuKeyTyped(event);
!   }
  
!   /**
!    * Method of the MenuElement interface.
!    * This method is invoked by MenuSelectionManager when selection of
!    * this menu item has changed. If this menu item was selected then
!    * arm it's model, and disarm the model otherwise. The menu item
!    * is considered to be selected, and thus highlighted when its model
!    * is armed.
!    *
!    * @param changed indicates selection status of this menu item. If changed is
!    * true then menu item is selected and deselected otherwise.
!    */
!   public void menuSelectionChanged(boolean changed)
!   {
!     Component parent = this.getParent();
!     if (changed)
!       {
! 	model.setArmed(true);
  
! 	if (parent != null && parent instanceof JPopupMenu)
! 	  ((JPopupMenu) parent).setSelected(this);
!       }
!     else
!       {
! 	model.setArmed(false);
  
! 	if (parent != null && parent instanceof JPopupMenu)
! 	  ((JPopupMenu) parent).getSelectionModel().clearSelection();
!       }
!   }
  
!   /**
!    * Method of the MenuElement interface.
!    *
!    * @return $MenuElement[]$ Returns array of sub-components for this menu
!    *         item. By default menuItem doesn't have any subcomponents and so
!    *         empty array is returned instead.
!    */
!   public MenuElement[] getSubElements()
!   {
!     return new MenuElement[0];
!   }
  
!   /**
!    * Returns reference to the component that will paint this menu item.
!    *
!    * @return $Component$ Component that will paint this menu item.
!    *         Simply returns reference to this menu item.
!    */
!   public Component getComponent()
!   {
!     return this;
!   }
  
!   /**
!    * Adds a MenuDragMouseListener to this menu item. When mouse
!    * is dragged over the menu item the MenuDragMouseEvents will be
!    * fired, and these listeners will be called.
!    *
!    * @param listener The new listener to add
!    */
!   public void addMenuDragMouseListener(MenuDragMouseListener listener)
!   {
!     listenerList.add(MenuDragMouseListener.class, listener);
!   }
  
!   /**
!    * Removes a MenuDragMouseListener from the menuItem's listener list.
!    *
!    * @param listener The listener to remove
!    */
!   public void removeMenuDragMouseListener(MenuDragMouseListener listener)
!   {
!     listenerList.remove(MenuDragMouseListener.class, listener);
!   }
  
!   /**
!    * Returns all added MenuDragMouseListener objects.
!    *
!    * @return an array of listeners
!    *
!    * @since 1.4
!    */
!   public MenuDragMouseListener[] getMenuDragMouseListeners()
!   {
!     return (MenuDragMouseListener[]) listenerList.getListeners(MenuDragMouseListener.class);
!   }
  
!   /**
!    * Adds an MenuKeyListener to this menu item.  This listener will be
!    * invoked when MenuKeyEvents will be fired by this menu item.
!    *
!    * @param listener The new listener to add
!    */
!   public void addMenuKeyListener(MenuKeyListener listener)
!   {
!     listenerList.add(MenuKeyListener.class, listener);
!   }
  
!   /**
!    * Removes an MenuKeyListener from the menuItem's listener list.
!    *
!    * @param listener The listener to remove
!    */
!   public void removeMenuKeyListener(MenuKeyListener listener)
!   {
!     listenerList.remove(MenuKeyListener.class, listener);
!   }
  
!   /**
!    * Returns all added MenuKeyListener objects.
!    *
!    * @return an array of listeners
!    *
!    * @since 1.4
!    */
!   public MenuKeyListener[] getMenuKeyListeners()
!   {
!     return (MenuKeyListener[]) listenerList.getListeners(MenuKeyListener.class);
!   }
  
!   /**
!    * A string that describes this JMenuItem. Normally only used
!    * for debugging.
!    *
!    * @return A string describing this JMenuItem
!    */
!   protected String paramString()
!   {
!     return super.paramString();
!   }
  
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJMenuItem();
  
!     return accessibleContext;
!   }
  
!   protected class AccessibleJMenuItem extends AccessibleAbstractButton
!     implements ChangeListener
!   {
!     private static final long serialVersionUID = 6748924232082076534L;
  
!     /**
!      * Creates a new AccessibleJMenuItem object.
!      */
!     AccessibleJMenuItem()
!     {
!       //super(component);
!     }
  
+     public void stateChanged(ChangeEvent event)
+     {
+     }
  
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.MENU_ITEM;
!     }
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JOptionPane.java gcc-4.0.0/libjava/javax/swing/JOptionPane.java
*** gcc-3.4.3/libjava/javax/swing/JOptionPane.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JOptionPane.java	Wed Feb 16 20:02:30 2005
***************
*** 1,5 ****
! /* JOptionPane.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JOptionPane.java
!    Copyright (C) 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,399 ****
  
  package javax.swing;
  
- import java.awt.BorderLayout;
  import java.awt.Component;
! import java.awt.Dialog;
  import java.awt.Frame;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.swing.plaf.OptionPaneUI;
  
! public class JOptionPane extends JComponent 
  {
!     public static final int DEFAULT_OPTION        = 0;
!     public static final int YES_NO_OPTION         = 1;
!     public static final int YES_NO_CANCEL_OPTION  = 2;
!     public static final int OK_CANCEL_OPTION      = 3;
!     public static final int YES_OPTION            = 4;
!     public static final int NO_OPTION             = 5;
!     public static final int CANCEL_OPTION         = 6;
!     public static final int OK_OPTION             = 7;
!     public static final int CLOSED_OPTION         = 8;
  
!     public static final int ERROR_MESSAGE         = 0;
!     public static final int INFORMATION_MESSAGE   = 1;
!     public static final int WARNING_MESSAGE       = 2;
!     public static final int QUESTION_MESSAGE      = 3;
!     public static final int PLAIN_MESSAGE         = 4;
  
!     final static String VALUE_PROPERTY = "value_prop";
!     final static String INPUT_VALUE_PROPERTY = "input_value_prop";
!     
!     final static String UNINITIALIZED_VALUE = "uninit";
  
!     // Ronald: shouldnt by public ?
!     public Object msg;
!     public int mtype;
!     public int otype;
!     public Icon icon;
!     public Object []args;
!     public Object init;
  
!     public JDialog dialog;
  
!     /*****************************************************************************
!      *
!      *
!      *  joptionpanels
!      *
!      *
!      ***********************************/
  
!     JOptionPane()
!     {
! 	this("mess");
!     }
!     
!     JOptionPane(Object m)
!     {
! 	this(m, PLAIN_MESSAGE);
!     }
!     
!     JOptionPane(Object m,
! 		 int mtype)
!     {
! 	this(m, mtype, DEFAULT_OPTION);
!     }
  
!     JOptionPane(Object m,
! 		int mtype,
! 		int otype)
!     {
! 	this(m, mtype, otype, null);
!     }
!  
!     JOptionPane(Object m,
! 		 int mtype,
! 		 int otype,
! 		 Icon icon)
!     {
! 	this(m, mtype, otype, icon, null);
!     }
  
!     JOptionPane(Object m,
! 		 int mtype,
! 		 int otype,
! 		 Icon icon,
! 		 Object []args)
!     {
! 	this(m, mtype, otype, icon, args, null);
!     }
  
!     JOptionPane(Object msg,
! 		int mtype,
! 		int otype,
! 		Icon icon,
! 		Object []args,
! 		Object init)
!     {
! 	//	this(m, mtype, otype, icon, args, init);
! 	this.msg   = msg;
! 	this.mtype = mtype;
! 	this.otype = otype;
! 	this.icon  = icon;
! 	this.args  = args;
! 	this.init  = init;
! 	
! 	updateUI();
!     }
  
  
!     /*****************************************************************************
!      *
!      *
!      *
!      *
!      *
!      ***********************************/
  
!     Object val;
!     public void setValue(Object v)  
!     {   val = v;       }
!     public Object getValue()
!     {	return val;    }
  
!     public String getUIClassID()
!     {	return "JOptionPane";    }
  
  
!     public void setUI(OptionPaneUI ui) {
!         super.setUI(ui);
!     }
!     
!     public OptionPaneUI getUI() {
!         return (OptionPaneUI)ui;
!     }
!     
!     public void updateUI() {
! 	setUI((OptionPaneUI)UIManager.getUI(this));
!     }
  
  
!     public AccessibleContext getAccessibleContext()
!     {
! 	return null;
!     }
!     
!     protected  String paramString()
!     {
! 	return "JOptionPane";
!     }
!     
!     public static void showMessageDialog(Component frame,
! 				  String msg,
! 				  String title,
! 				  int bla)
!     {
! 	DoShowOptionDialog(frame,
! 			  msg,
! 			  title,
! 			  bla,
! 			  0,
! 			  null,
! 			  null,
! 			  null);
!     }
  
!     public static void showMessageDialog(Component frame,
! 				 String msg,
! 				 String title,
! 				 int bla,
! 				 Icon icon)
!     {
! 	DoShowOptionDialog(frame,
! 				 msg,
! 				 title,
! 				 bla,
! 				 0,
! 				 icon,
! 				 null,
! 				 null);
!     }
  
!     public static void showMessageDialog(Component frame,
! 				  String msg)
!     {
! 	showMessageDialog(frame,
! 			  msg,
! 			  null);
!     }
!     
  
!     public static void showMessageDialog(Component frame,
! 				  String msg,
! 				  Icon icon)
!     {	
! 	//System.out.println("++++++++++++++++++creating message dialog:"+msg + ", frame="+frame);
!          DoShowOptionDialog(frame, 
! 				msg, 
! 				"Message",				
! 				DEFAULT_OPTION, 
! 				PLAIN_MESSAGE,
! 				icon,
! 				null,
! 				null);
!     }
  
!     public static int showConfirmDialog(JFrame frame,
! 				 String yes,
! 				 String no, 
! 				 int bla)
!     {
! 	return 0;
!     }
  
!     public static String showInputDialog(JFrame frame,
! 			     String msg, 
! 			     String title, 
! 			     int opt_type, 
! 			     int msg_type,
! 			     Icon icon, 
! 			     Object[] opts, 
! 			     Object init)
!     {
! 	return (String) DoShowOptionDialog(frame,
! 				msg, 
! 				title, 
! 				opt_type, 
! 				msg_type,
! 				icon, 
! 				opts, 
! 				init);
!     }
  
!     public static Object showInputDialog(JFrame frame,
! 			     String msg, 
! 			     String title, 
! 			     int opt_type, 
! 			     Icon icon, 
! 			     Object[] opts, 
! 			     Object init)
!     {
! 	return DoShowOptionDialog(frame,
! 				msg, 
! 				title, 
! 				opt_type, 
! 				0, //msg_type,
! 				icon, 
! 				opts, 
! 				init);
!     }
  
  
!     // everybody comes here eventually
!     public static int showOptionDialog(Component frame,
! 				String msg, 
! 				String title, 
! 				int opt_type, 
! 				int msg_type,
! 				Icon icon, 
! 				Object[] opts, 
! 				Object init)
!     {
! 	Integer a = (Integer) DoShowOptionDialog(frame,
! 						 msg, 
! 						 title, 
! 						 opt_type, 
! 						 msg_type,
! 						 icon, 
! 						 opts, 
! 						 init);
! 	if (a == null)
! 	    return -1;
! 	return a.intValue();
!     }
!     
!     public static Object DoShowOptionDialog(Component frame,
! 				   String msg, 
! 				   String title, 
! 				   int opt_type, 
! 				   int msg_type,
! 				   Icon icon, 
! 				   Object[] opts, 
! 				   Object init)
!     {
! 	
! 	JOptionPane p = new JOptionPane(msg,
! 					msg_type,
! 					opt_type,
! 					icon,
! 					opts,
! 					init);
! 	System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ " + p.msg);
  
! 	
! 	JDialog a;
  
! 	if (frame == null)
! 	    {
! 		a = new JDialog((Frame)frame,
! 				title,
! 				true);
! 	    }
! 	else if (frame instanceof Dialog)
! 	    {
! 		a = new JDialog((Dialog) frame,
! 				title,
! 				true);
! 	    }
! 	else if (frame instanceof Frame)
! 	    {
! 		a = new JDialog((Frame) frame,
! 				title,
! 				true);
! 	    }
! 	else
! 	    {
! 		System.out.println("HUUUUHHH, not a frame or dialog !");
! 		
! 		a = new JDialog((Frame)null,
! 				title,
! 				true);
! 	    }
  
! 	p.dialog = a;
! 	
! 	a.getContentPane().setLayout(new BorderLayout());
! 	a.getContentPane().add(p,
! 			       BorderLayout.CENTER);
! 	// package the deal
! 	a.pack();
! 	
! 	a.setVisible(true);
! 	
! 	Object s = p.getValue();
  
! 	System.out.println("RESULT FROM DIALOG = " + s);
  
! 	if (s == null)
! 	    return null;
! 	
! 	return s;
!     }
  
! }
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
--- 38,1547 ----
  
  package javax.swing;
  
  import java.awt.Component;
! import java.awt.Dimension;
  import java.awt.Frame;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.swing.event.InternalFrameAdapter;
+ import javax.swing.event.InternalFrameEvent;
  import javax.swing.plaf.OptionPaneUI;
  
! /**
!  * This class creates different types of JDialogs and JInternalFrames that can
!  * ask users for input or pass on information. JOptionPane can be used by
!  * calling one of the show static methods or  by creating an instance of
!  * JOptionPane and calling createDialog or createInternalFrame.
!  */
! public class JOptionPane extends JComponent implements Accessible
  {
!   /**
!    * DOCUMENT ME!
!    */
!   protected class AccessibleJOptionPane extends JComponent.AccessibleJComponent
!   {
!     /** DOCUMENT ME! */
!     private static final long serialVersionUID = 686071432213084821L;
  
!     /**
!      * Creates a new AccessibleJOptionPane object.
!      */
!     protected AccessibleJOptionPane()
!     {
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return null;
!     }
!   }
  
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = 5231143276678566796L;
  
!   /** The value returned when cancel option is selected. */
!   public static final int CANCEL_OPTION = 2;
  
!   /** The value returned when the dialog is closed without a selection. */
!   public static final int CLOSED_OPTION = -1;
  
!   /** An option used in confirmation dialog methods. */
!   public static final int DEFAULT_OPTION = -1;
  
!   /** The value returned when the no option is selected. */
!   public static final int NO_OPTION = 1;
  
!   /** An option used in confirmation dialog methods. */
!   public static final int OK_CANCEL_OPTION = 2;
  
!   /** The value returned when the ok option is selected. */
!   public static final int OK_OPTION = 0;
  
+   /** An option used in confirmation dialog methods. */
+   public static final int YES_NO_CANCEL_OPTION = 1;
  
!   /** An option used in confirmation dialog methods. */
!   public static final int YES_NO_OPTION = 0;
  
!   /** The value returned when the yes option is selected. */
!   public static final int YES_OPTION = 0;
  
!   /** Identifier for the error message type. */
!   public static final int ERROR_MESSAGE = 0;
  
+   /** Identifier for the information message type. */
+   public static final int INFORMATION_MESSAGE = 1;
  
!   /** Identifier for the plain message type. */
!   public static final int PLAIN_MESSAGE = -1;
  
+   /** Identifier for the question message type. */
+   public static final int QUESTION_MESSAGE = 3;
  
!   /** Identifier for the warning message type. */
!   public static final int WARNING_MESSAGE = 2;
  
!   /**
!    * The identifier for the propertyChangeEvent when the icon property
!    * changes.
!    */
!   public static final String ICON_PROPERTY = "icon";
  
!   /**
!    * The identifier for the propertyChangeEvent when the initialSelectionValue
!    * property changes.
!    */
!   public static final String INITIAL_SELECTION_VALUE_PROPERTY = "initialSelectionValue";
  
!   /**
!    * The identifier for the propertyChangeEvent when the initialValue property
!    * changes.
!    */
!   public static final String INITIAL_VALUE_PROPERTY = "initialValue";
  
!   /**
!    * The identifier for the propertyChangeEvent when the inputValue property
!    * changes.
!    */
!   public static final String INPUT_VALUE_PROPERTY = "inputValue";
  
!   /**
!    * The identifier for the propertyChangeEvent when the message property
!    * changes.
!    */
!   public static final String MESSAGE_PROPERTY = "message";
  
!   /**
!    * The identifier for the propertyChangeEvent when the messageType property
!    * changes.
!    */
!   public static final String MESSAGE_TYPE_PROPERTY = "messageType";
  
+   /**
+    * The identifier for the propertyChangeEvent when the optionType property
+    * changes.
+    */
+   public static final String OPTION_TYPE_PROPERTY = "optionType";
  
!   /**
!    * The identifier for the propertyChangeEvent when the options property
!    * changes.
!    */
!   public static final String OPTIONS_PROPERTY = "options";
  
!   /**
!    * The identifier for the propertyChangeEvent when the selectionValues
!    * property changes.
!    */
!   public static final String SELECTION_VALUES_PROPERTY = "selectionValues";
  
!   /**
!    * The identifier for the propertyChangeEvent when the value property
!    * changes.
!    */
!   public static final String VALUE_PROPERTY = "value";
  
!   /**
!    * The identifier for the propertyChangeEvent when the wantsInput property
!    * changes.
!    */
!   public static final String WANTS_INPUT_PROPERTY = "wantsInput";
  
!   /** The value returned when the inputValue is uninitialized. */
!   public static Object UNINITIALIZED_VALUE = "uninitializedValue";
  
!   /** The icon displayed in the dialog/internal frame. */
!   protected Icon icon;
  
!   /** The initial selected value in the input component. */
!   protected Object initialSelectionValue;
! 
!   /** The object that is initially selected for options. */
!   protected Object initialValue;
! 
!   /** The value the user inputs. */
!   protected Object inputValue = UNINITIALIZED_VALUE;
! 
!   /** The message displayed in the dialog/internal frame. */
!   protected Object message;
! 
!   /** The type of message displayed. */
!   protected int messageType = PLAIN_MESSAGE;
! 
!   /**
!    * The options (usually buttons) aligned at the bottom for the user to
!    * select.
!    */
!   protected Object[] options;
! 
!   /** The type of options to display. */
!   protected int optionType = DEFAULT_OPTION;
! 
!   /** The input values the user can select. */
!   protected Object[] selectionValues;
! 
!   /** The value returned by selecting an option. */
!   protected Object value = UNINITIALIZED_VALUE;
! 
!   /** Whether the Dialog/InternalFrame needs input. */
!   protected boolean wantsInput;
! 
!   /** The common frame used when no parent is provided. */
!   private static Frame privFrame = SwingUtilities.getOwnerFrame();
! 
!   /**
!    * Creates a new JOptionPane object using a message of "JOptionPane
!    * message", using the PLAIN_MESSAGE type and DEFAULT_OPTION.
!    */
!   public JOptionPane()
!   {
!     this("JOptionPane message", PLAIN_MESSAGE, DEFAULT_OPTION, null, null, null);
!   }
! 
!   /**
!    * Creates a new JOptionPane object using the given message using the
!    * PLAIN_MESSAGE type and DEFAULT_OPTION.
!    *
!    * @param message The message to display.
!    */
!   public JOptionPane(Object message)
!   {
!     this(message, PLAIN_MESSAGE, DEFAULT_OPTION, null, null, null);
!   }
! 
!   /**
!    * Creates a new JOptionPane object using the given message and messageType
!    * and DEFAULT_OPTION.
!    *
!    * @param message The message to display.
!    * @param messageType The type of message.
!    */
!   public JOptionPane(Object message, int messageType)
!   {
!     this(message, messageType, DEFAULT_OPTION, null, null, null);
!   }
! 
!   /**
!    * Creates a new JOptionPane object using the given message, messageType and
!    * optionType.
!    *
!    * @param message The message to display.
!    * @param messageType The type of message.
!    * @param optionType The type of options.
!    */
!   public JOptionPane(Object message, int messageType, int optionType)
!   {
!     this(message, messageType, optionType, null, null, null);
!   }
! 
!   /**
!    * Creates a new JOptionPane object using the given message, messageType,
!    * optionType and icon.
!    *
!    * @param message The message to display.
!    * @param messageType The type of message.
!    * @param optionType The type of options.
!    * @param icon The icon to display.
!    */
!   public JOptionPane(Object message, int messageType, int optionType, Icon icon)
!   {
!     this(message, messageType, optionType, icon, null, null);
!   }
! 
!   /**
!    * Creates a new JOptionPane object using the given message, messageType,
!    * optionType, icon and options.
!    *
!    * @param message The message to display.
!    * @param messageType The type of message.
!    * @param optionType The type of options.
!    * @param icon The icon to display.
!    * @param options The options given.
!    */
!   public JOptionPane(Object message, int messageType, int optionType,
!                      Icon icon, Object[] options)
!   {
!     this(message, messageType, optionType, icon, options, null);
!   }
! 
!   /**
!    * Creates a new JOptionPane object using the given message, messageType,
!    * optionType, icon, options and initialValue. The initialValue will be
!    * focused initially.
!    *
!    * @param message The message to display.
!    * @param messageType The type of message.
!    * @param optionType The type of options.
!    * @param icon The icon to display.
!    * @param options The options given.
!    * @param initialValue The component to focus on initially.
!    *
!    * @throws IllegalArgumentException If the messageType or optionType are not
!    *         legal values.
!    */
!   public JOptionPane(Object message, int messageType, int optionType,
!                      Icon icon, Object[] options, Object initialValue)
!   {
!     this.message = message;
!     if (! validMessageType(messageType))
!       throw new IllegalArgumentException("Message Type not legal value.");
!     this.messageType = messageType;
!     if (! validOptionType(optionType))
!       throw new IllegalArgumentException("Option Type not legal value.");
!     this.optionType = optionType;
!     this.icon = icon;
!     this.options = options;
!     this.initialValue = initialValue;
! 
!     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
! 
!     updateUI();
!     invalidate();
!     repaint();
!   }
! 
!   /**
!    * This method creates a new JDialog that is either centered around the
!    * parent's frame or centered on the screen (if the parent is null). The
!    * JDialog will not be resizable and will be modal. Once the JDialog is
!    * disposed, the inputValue and value properties will  be set by the
!    * optionPane.
!    *
!    * @param parentComponent The parent of the Dialog.
!    * @param title The title in the bar of the JDialog.
!    *
!    * @return A new JDialog based on the JOptionPane configuration.
!    */
!   public JDialog createDialog(Component parentComponent, String title)
!   {
!     Frame toUse = getFrameForComponent(parentComponent);
!     if (toUse == null)
!       toUse = getRootFrame();
! 
!     JDialog dialog = new JDialog(toUse, title);
!     inputValue = UNINITIALIZED_VALUE;
!     value = UNINITIALIZED_VALUE;
! 
!     // FIXME: This dialog should be centered on the parent
!     // or at the center of the screen (if the parent is null)
!     // Need getGraphicsConfiguration to return non-null in
!     // order for that to work so we know how large the 
!     // screen is.
!     dialog.getContentPane().add(this);
!     dialog.setModal(true);
!     dialog.setResizable(false);
!     dialog.invalidate();
!     dialog.repaint();
! 
!     return dialog;
!   }
! 
!   /**
!    * This method creates a new JInternalFrame that is in the JDesktopPane
!    * which contains the parentComponent given. If no suitable JDesktopPane
!    * can be found from the parentComponent given, a RuntimeException will be
!    * thrown.
!    *
!    * @param parentComponent The parent to find a JDesktopPane from.
!    * @param title The title of the JInternalFrame.
!    *
!    * @return A new JInternalFrame based on the JOptionPane configuration.
!    *
!    * @throws RuntimeException If no suitable JDesktopPane is found.
!    */
!   public JInternalFrame createInternalFrame(Component parentComponent,
!                                             String title)
!                                      throws RuntimeException
!   {
!     JDesktopPane toUse = getDesktopPaneForComponent(parentComponent);
!     if (toUse == null)
!       throw new RuntimeException("parentComponent does not have a valid parent");
! 
!     JInternalFrame frame = new JInternalFrame(title);
! 
!     inputValue = UNINITIALIZED_VALUE;
!     value = UNINITIALIZED_VALUE;
! 
!     frame.setClosable(true);
!     toUse.add(frame);
! 
!     // FIXME: JLayeredPane broken? See bug # 16576
!     // frame.setLayer(JLayeredPane.MODAL_LAYER);
!     return frame;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJOptionPane();
!     return accessibleContext;
!   }
! 
!   /**
!    * This method returns the JDesktopPane for the given parentComponent or
!    * null if none can be found.
!    *
!    * @param parentComponent The component to look in.
!    *
!    * @return The JDesktopPane for the given component or null if none can be
!    *         found.
!    */
!   public static JDesktopPane getDesktopPaneForComponent(Component parentComponent)
!   {
!     return (JDesktopPane) SwingUtilities.getAncestorOfClass(JDesktopPane.class,
!                                                             parentComponent);
!   }
! 
!   /**
!    * This method returns the Frame for the given parentComponent or null if
!    * none can be found.
!    *
!    * @param parentComponent The component to look in.
!    *
!    * @return The Frame for the given component or null if none can be found.
!    */
!   public static Frame getFrameForComponent(Component parentComponent)
!   {
!     return (Frame) SwingUtilities.getAncestorOfClass(Frame.class,
!                                                      parentComponent);
!   }
! 
!   /**
!    * This method returns the icon displayed.
!    *
!    * @return The icon displayed.
!    */
!   public Icon getIcon()
!   {
!     return icon;
!   }
! 
!   /**
!    * This method returns the value initially selected from the list of values
!    * the user can input.
!    *
!    * @return The initial selection value.
!    */
!   public Object getInitialSelectionValue()
!   {
!     return initialSelectionValue;
!   }
! 
!   /**
!    * This method returns the value that is focused from the list of options.
!    *
!    * @return The initial value from options.
!    */
!   public Object getInitialValue()
!   {
!     return initialValue;
!   }
! 
!   /**
!    * This method returns the value that the user input.
!    *
!    * @return The user's input value.
!    */
!   public Object getInputValue()
!   {
!     return inputValue;
!   }
! 
!   /**
!    * This method returns the maximum characters per line. By default, this is
!    * Integer.MAX_VALUE.
!    *
!    * @return The maximum characters per line.
!    */
!   public int getMaxCharactersPerLineCount()
!   {
!     return Integer.MAX_VALUE;
!   }
! 
!   /**
!    * This method returns the message displayed.
!    *
!    * @return The message displayed.
!    */
!   public Object getMessage()
!   {
!     return message;
!   }
! 
!   /**
!    * This method returns the message type.
!    *
!    * @return The message type.
!    */
!   public int getMessageType()
!   {
!     return messageType;
!   }
! 
!   /**
!    * This method returns the options.
!    *
!    * @return The options.
!    */
!   public Object[] getOptions()
!   {
!     return options;
!   }
! 
!   /**
!    * This method returns the option type.
!    *
!    * @return The option type.
!    */
!   public int getOptionType()
!   {
!     return optionType;
!   }
! 
!   /**
!    * This method returns the Frame used by JOptionPane dialog's that have no
!    * parent.
!    *
!    * @return The Frame used by dialogs that have no parent.
!    */
!   public static Frame getRootFrame()
!   {
!     return privFrame;
!   }
! 
!   /**
!    * This method returns the selection values.
!    *
!    * @return The selection values.
!    */
!   public Object[] getSelectionValues()
!   {
!     return selectionValues;
!   }
! 
!   /**
!    * This method returns the UI used by the JOptionPane.
!    *
!    * @return The UI used by the JOptionPane.
!    */
!   public OptionPaneUI getUI()
!   {
!     return (OptionPaneUI) ui;
!   }
! 
!   /**
!    * This method returns an identifier to determine which UI class will act as
!    * the UI.
!    *
!    * @return The UI identifier.
!    */
!   public String getUIClassID()
!   {
!     return "OptionPaneUI";
!   }
! 
!   /**
!    * This method returns the value that the user selected out of options.
!    *
!    * @return The value that the user selected out of options.
!    */
!   public Object getValue()
!   {
!     return value;
!   }
! 
!   /**
!    * This method returns whether this JOptionPane wants input.
!    *
!    * @return Whether this JOptionPane wants input.
!    */
!   public boolean getWantsInput()
!   {
!     return wantsInput;
!   }
! 
!   /**
!    * This method returns a String that describes this JOptionPane.
!    *
!    * @return A String that describes this JOptionPane.
!    */
!   protected String paramString()
!   {
!     return "JOptionPane";
!   }
! 
!   /**
!    * This method requests focus for the initial value.
!    */
!   public void selectInitialValue()
!   {
!     if (ui != null)
!       ((OptionPaneUI) ui).selectInitialValue(this);
!   }
! 
!   /**
!    * This method changes the icon property.
!    *
!    * @param newIcon The new icon to use.
!    */
!   public void setIcon(Icon newIcon)
!   {
!     if (icon != newIcon)
!       {
! 	Icon old = icon;
! 	icon = newIcon;
! 	firePropertyChange(ICON_PROPERTY, old, icon);
!       }
!   }
! 
!   /**
!    * This method changes the initial selection property.
!    *
!    * @param newValue The new initial selection.
!    */
!   public void setInitialSelectionValue(Object newValue)
!   {
!     if (initialSelectionValue != newValue)
!       {
! 	Object old = initialSelectionValue;
! 	initialSelectionValue = newValue;
! 	firePropertyChange(INITIAL_SELECTION_VALUE_PROPERTY, old,
! 	                   initialSelectionValue);
!       }
!   }
! 
!   /**
!    * This method changes the initial value property.
!    *
!    * @param newValue The new initial value.
!    */
!   public void setInitialValue(Object newValue)
!   {
!     if (initialValue != newValue)
!       {
! 	Object old = initialValue;
! 	initialValue = newValue;
! 	firePropertyChange(INITIAL_VALUE_PROPERTY, old, initialValue);
!       }
!   }
! 
!   /**
!    * This method changes the inputValue property.
!    *
!    * @param newValue The new inputValue.
!    */
!   public void setInputValue(Object newValue)
!   {
!     if (inputValue != newValue)
!       {
! 	Object old = inputValue;
! 	inputValue = newValue;
! 	firePropertyChange(INPUT_VALUE_PROPERTY, old, inputValue);
!       }
!   }
! 
!   /**
!    * This method changes the message property.
!    *
!    * @param newMessage The new message.
!    */
!   public void setMessage(Object newMessage)
!   {
!     if (message != newMessage)
!       {
! 	Object old = message;
! 	message = newMessage;
! 	firePropertyChange(MESSAGE_PROPERTY, old, message);
!       }
!   }
! 
!   /**
!    * This method changes the messageType property.
!    *
!    * @param newType The new messageType.
!    *
!    * @throws IllegalArgumentException If the messageType is not valid.
!    */
!   public void setMessageType(int newType)
!   {
!     if (! validMessageType(newType))
!       throw new IllegalArgumentException("Message Type not legal value.");
!     if (newType != messageType)
!       {
! 	int old = messageType;
! 	messageType = newType;
! 	firePropertyChange(MESSAGE_TYPE_PROPERTY, old, messageType);
!       }
!   }
! 
!   /**
!    * This method changes the options property.
!    *
!    * @param newOptions The new options.
!    */
!   public void setOptions(Object[] newOptions)
!   {
!     if (options != newOptions)
!       {
! 	Object[] old = options;
! 	options = newOptions;
! 	firePropertyChange(OPTIONS_PROPERTY, old, options);
!       }
!   }
! 
!   /**
!    * This method changes the optionType property.
!    *
!    * @param newType The new optionType.
!    *
!    * @throws IllegalArgumentException If the optionType is not valid.
!    */
!   public void setOptionType(int newType)
!   {
!     if (! validOptionType(newType))
!       throw new IllegalArgumentException("Option Type not legal value.");
!     if (newType != optionType)
!       {
! 	int old = optionType;
! 	optionType = newType;
! 	firePropertyChange(OPTION_TYPE_PROPERTY, old, optionType);
!       }
!   }
! 
!   /**
!    * This method changes the Frame used for JOptionPane dialogs that have no
!    * parent.
!    *
!    * @param newRootFrame The Frame to use for dialogs that have no parent.
!    */
!   public static void setRootFrame(Frame newRootFrame)
!   {
!     privFrame = newRootFrame;
!   }
! 
!   /**
!    * This method changes the selectionValues property.
!    *
!    * @param newValues The new selectionValues.
!    */
!   public void setSelectionValues(Object[] newValues)
!   {
!     if (newValues != selectionValues)
!       {
! 	if (newValues != null)
! 	  wantsInput = true;
! 	Object[] old = selectionValues;
! 	selectionValues = newValues;
! 	firePropertyChange(SELECTION_VALUES_PROPERTY, old, selectionValues);
!       }
!   }
! 
!   /**
!    * This method sets the UI used with the JOptionPane.
!    *
!    * @param ui The UI used with the JOptionPane.
!    */
!   public void setUI(OptionPaneUI ui)
!   {
!     super.setUI(ui);
!   }
! 
!   /**
!    * This method sets the value has been selected out of options.
!    *
!    * @param newValue The value that has been selected out of options.
!    */
!   public void setValue(Object newValue)
!   {
!     if (value != newValue)
!       {
! 	Object old = value;
! 	value = newValue;
! 	firePropertyChange(VALUE_PROPERTY, old, value);
!       }
!   }
! 
!   /**
!    * This method changes the wantsInput property.
!    *
!    * @param newValue Whether this JOptionPane requires input.
!    */
!   public void setWantsInput(boolean newValue)
!   {
!     if (wantsInput != newValue)
!       {
! 	boolean old = wantsInput;
! 	wantsInput = newValue;
! 	firePropertyChange(WANTS_INPUT_PROPERTY, old, wantsInput);
!       }
!   }
! 
!   /**
!    * This method shows a confirmation dialog with the title "Select an Option"
!    * and displays the given message. The parent frame will be the same as the
!    * parent frame of the given parentComponent. This method returns the
!    * option chosen by the user.
!    *
!    * @param parentComponent The parentComponent to find a frame in.
!    * @param message The message to display.
!    *
!    * @return The option that was selected.
!    */
!   public static int showConfirmDialog(Component parentComponent, Object message)
!   {
!     JOptionPane pane = new JOptionPane(message);
!     JDialog dialog = pane.createDialog(parentComponent, "Select an Option");
! 
!     dialog.pack();
!     dialog.show();
! 
!     return ((Integer) pane.getValue()).intValue();
!   }
! 
!   /**
!    * This method shows a confirmation dialog with the given message,
!    * optionType and title. The frame that owns the dialog will be the same
!    * frame that holds the given parentComponent. This method returns the
!    * option that was chosen.
!    *
!    * @param parentComponent The component to find a frame in.
!    * @param message The message displayed.
!    * @param title The title of the dialog.
!    * @param optionType The optionType.
!    *
!    * @return The option that was chosen.
!    */
!   public static int showConfirmDialog(Component parentComponent,
!                                       Object message, String title,
!                                       int optionType)
!   {
!     JOptionPane pane = new JOptionPane(message, PLAIN_MESSAGE, optionType);
!     JDialog dialog = pane.createDialog(parentComponent, title);
!     dialog.pack();
!     dialog.show();
! 
!     return ((Integer) pane.getValue()).intValue();
!   }
! 
!   /**
!    * This method shows a confirmation dialog with the given message, title,
!    * messageType and optionType. The frame owner will be the same frame as
!    * the one that holds the given parentComponent. This method returns the
!    * option selected by the user.
!    *
!    * @param parentComponent The component to find a frame in.
!    * @param message The message displayed.
!    * @param title The title of the dialog.
!    * @param optionType The optionType.
!    * @param messageType The messageType.
!    *
!    * @return The selected option.
!    */
!   public static int showConfirmDialog(Component parentComponent,
!                                       Object message, String title,
!                                       int optionType, int messageType)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType, optionType);
!     JDialog dialog = pane.createDialog(parentComponent, title);
!     dialog.pack();
!     dialog.show();
! 
!     return ((Integer) pane.getValue()).intValue();
!   }
! 
!   /**
!    * This method shows a confirmation dialog with the given message, title,
!    * optionType, messageType and icon. The frame owner will be the same as
!    * the one that holds the given parentComponent. This method returns the
!    * option selected by the user.
!    *
!    * @param parentComponent The component to find a frame in.
!    * @param message The message displayed.
!    * @param title The title of the dialog.
!    * @param optionType The optionType.
!    * @param messageType The messsageType.
!    * @param icon The icon displayed.
!    *
!    * @return The selected option.
!    */
!   public static int showConfirmDialog(Component parentComponent,
!                                       Object message, String title,
!                                       int optionType, int messageType,
!                                       Icon icon)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType, optionType, icon);
!     JDialog dialog = pane.createDialog(parentComponent, title);
!     dialog.pack();
!     dialog.show();
! 
!     return ((Integer) pane.getValue()).intValue();
!   }
! 
!   /**
!    * This method will show a QUESTION_MESSAGE input dialog with the given
!    * message. No selectionValues is set so the Look and Feel will usually
!    * give the user a TextField to fill out. The frame owner will be the same
!    * frame that holds the given parentComponent. This method will return the
!    * value entered by the user.
!    *
!    * @param parentComponent The component to find a frame in.
!    * @param message The message displayed.
!    *
!    * @return The value entered by the user.
!    */
!   public static String showInputDialog(Component parentComponent,
!                                        Object message)
!   {
!     JOptionPane pane = new JOptionPane(message, QUESTION_MESSAGE);
!     pane.setWantsInput(true);
!     JDialog dialog = pane.createDialog(parentComponent, null);
!     dialog.pack();
!     dialog.show();
! 
!     return (String) pane.getInputValue();
!   }
! 
!   /**
!    * This method will show a QUESTION_MESSAGE type input dialog with the given
!    * message and initialSelectionValue. Since there is no selectionValues
!    * set, the Look and Feel will usually give a TextField to fill out. The
!    * frame owner will be the same as the one that holds the given
!    * parentComponent. This method will return the value entered by the user.
!    *
!    * @param parentComponent The component to find a frame in.
!    * @param message The message to display.
!    * @param initialSelectionValue The initially selected value.
!    *
!    * @return The value the user input.
!    */
!   public static String showInputDialog(Component parentComponent,
!                                        Object message,
!                                        Object initialSelectionValue)
!   {
!     JOptionPane pane = new JOptionPane(message, QUESTION_MESSAGE);
!     pane.setInitialSelectionValue(initialSelectionValue);
!     pane.setWantsInput(true);
!     JDialog dialog = pane.createDialog(parentComponent, null);
!     dialog.pack();
!     dialog.show();
! 
!     return (String) pane.getInputValue();
!   }
! 
!   /**
!    * This method displays a new input dialog with the given message, title and
!    * messageType. Since no selectionValues value is given, the Look and Feel
!    * will usually give the user a TextField to input data to. This method
!    * returns the value the user inputs.
!    *
!    * @param parentComponent The component to find a frame in.
!    * @param message The message to display.
!    * @param title The title of the dialog.
!    * @param messageType The messageType.
!    *
!    * @return The value the user input.
!    */
!   public static String showInputDialog(Component parentComponent,
!                                        Object message, String title,
!                                        int messageType)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType);
!     pane.setWantsInput(true);
!     JDialog dialog = pane.createDialog(parentComponent, title);
!     dialog.pack();
!     dialog.show();
! 
!     return (String) pane.getInputValue();
!   }
! 
!   /**
!    * This method shows an input dialog with the given message, title,
!    * messageType, icon, selectionValues, and initialSelectionValue. This
!    * method returns the value that the user selects.
!    *
!    * @param parentComponent The component to find a frame in.
!    * @param message The message displayed.
!    * @param title The title of the dialog.
!    * @param messageType The messageType.
!    * @param icon The icon displayed.
!    * @param selectionValues The list of values to select from.
!    * @param initialSelectionValue The initially selected value.
!    *
!    * @return The user selected value.
!    */
!   public static Object showInputDialog(Component parentComponent,
!                                        Object message, String title,
!                                        int messageType, Icon icon,
!                                        Object[] selectionValues,
!                                        Object initialSelectionValue)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType);
!     pane.setWantsInput(true);
!     pane.setIcon(icon);
!     pane.setSelectionValues(selectionValues);
!     pane.setInitialSelectionValue(initialSelectionValue);
!     JDialog dialog = pane.createDialog(parentComponent, title);
!     dialog.pack();
!     dialog.show();
! 
!     return (String) pane.getInputValue();
!   }
! 
!   /**
!    * This method shows a QUESTION_MESSAGE type input dialog. Since no
!    * selectionValues is set, the Look and Feel will usually give the user a
!    * TextField to input data to. This method returns the value the user
!    * inputs.
!    *
!    * @param message The message to display.
!    *
!    * @return The user selected value.
!    */
!   public static String showInputDialog(Object message)
!   {
!     JOptionPane pane = new JOptionPane(message, QUESTION_MESSAGE);
!     pane.setWantsInput(true);
!     JDialog dialog = pane.createDialog(null, null);
!     dialog.pack();
!     dialog.show();
! 
!     return (String) pane.getInputValue();
!   }
! 
!   /**
!    * This method shows a QUESTION_MESSAGE type input dialog. Since no
!    * selectionValues is set, the Look and Feel will usually give the user a
!    * TextField to input data to. The input component will be initialized with
!    * the initialSelectionValue. This method returns the value the user
!    * inputs.
!    *
!    * @param message The message to display.
!    * @param initialSelectionValue The initialSelectionValue.
!    *
!    * @return The user selected value.
!    */
!   public static String showInputDialog(Object message,
!                                        Object initialSelectionValue)
!   {
!     JOptionPane pane = new JOptionPane(message, QUESTION_MESSAGE);
!     pane.setWantsInput(true);
!     pane.setInitialSelectionValue(initialSelectionValue);
!     JDialog dialog = pane.createDialog(null, null);
!     dialog.pack();
!     dialog.show();
! 
!     return (String) pane.getInputValue();
!   }
! 
!   /**
!    * This method shows an internal confirmation dialog with the given message.
!    * The internal frame dialog will be placed in the first JDesktopPane
!    * ancestor of the given parentComponent. This method will return the value
!    * selected.
!    *
!    * @param parentComponent The parent to find a JDesktopPane in.
!    * @param message The message to display.
!    *
!    * @return The value selected.
!    */
!   public static int showInternalConfirmDialog(Component parentComponent,
!                                               Object message)
!   {
!     JOptionPane pane = new JOptionPane(message);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, null);
! 
!     startModal(frame, pane);
! 
!     return ((Integer) pane.getValue()).intValue();
!   }
! 
!   /**
!    * This method shows an internal confirmation dialog with the given message,
!    * optionType and title. The internal frame dialog will be placed in the
!    * first JDesktopPane ancestor of the given parentComponent.  This method
!    * will return the selected value.
!    *
!    * @param parentComponent The parent to find a JDesktopPane in.
!    * @param message The message to display.
!    * @param title The title to display.
!    * @param optionType The option type.
!    *
!    * @return The selected value.
!    */
!   public static int showInternalConfirmDialog(Component parentComponent,
!                                               Object message, String title,
!                                               int optionType)
!   {
!     JOptionPane pane = new JOptionPane(message, PLAIN_MESSAGE, optionType);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
! 
!     startModal(frame, pane);
! 
!     return ((Integer) pane.getValue()).intValue();
!   }
! 
!   /**
!    * This method shows an internal confirmation dialog with the given message,
!    * title, optionTypes and icon for the given message type. The internal
!    * confirmation dialog will be placed in the first  instance of
!    * JDesktopPane ancestor of the given parentComponent.
!    *
!    * @param parentComponent The component to find a JDesktopPane in.
!    * @param message The message to display.
!    * @param title The title of the dialog.
!    * @param optionType The option type.
!    * @param messageType The message type.
!    *
!    * @return The selected value.
!    */
!   public static int showInternalConfirmDialog(Component parentComponent,
!                                               Object message, String title,
!                                               int optionType, int messageType)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType, optionType);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
! 
!     startModal(frame, pane);
! 
!     return ((Integer) pane.getValue()).intValue();
!   }
! 
!   /**
!    * This method shows an internal confirmation dialog with the given message,
!    * title, option type, message type, and icon. The internal frame dialog
!    * will be placed in the first JDesktopPane ancestor  that is found in the
!    * given parentComponent. This method returns  the selected value.
!    *
!    * @param parentComponent The parent to find a JDesktopPane in.
!    * @param message The message to display.
!    * @param title The title to display.
!    * @param optionType The option type.
!    * @param messageType The message type.
!    * @param icon The icon to display.
!    *
!    * @return The selected value.
!    */
!   public static int showInternalConfirmDialog(Component parentComponent,
!                                               Object message, String title,
!                                               int optionType, int messageType,
!                                               Icon icon)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType, optionType, icon);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
! 
!     startModal(frame, pane);
! 
!     return ((Integer) pane.getValue()).intValue();
!   }
! 
!   /**
!    * This method shows an internal input dialog with the given message. The
!    * internal frame dialog will be placed in the first JDesktopPane ancestor
!    * of the given parent component. This method returns the value input by
!    * the user.
!    *
!    * @param parentComponent The parent to find a JDesktopPane in.
!    * @param message The message to display.
!    *
!    * @return The user selected value.
!    */
!   public static String showInternalInputDialog(Component parentComponent,
!                                                Object message)
!   {
!     JOptionPane pane = new JOptionPane(message);
!     pane.setWantsInput(true);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, null);
! 
!     startModal(frame, pane);
! 
!     return (String) pane.getInputValue();
!   }
! 
!   /**
!    * This method shows an internal input dialog with the given message,  title
!    * and message type. The internal input dialog will be placed in the first
!    * JDesktopPane ancestor found in the given parent component. This method
!    * will return the input value given by the user.
!    *
!    * @param parentComponent The component to find a JDesktopPane in.
!    * @param message The message to display.
!    * @param title The title to display.
!    * @param messageType The message type.
!    *
!    * @return The user input value.
!    */
!   public static String showInternalInputDialog(Component parentComponent,
!                                                Object message, String title,
!                                                int messageType)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType);
!     pane.setWantsInput(true);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
! 
!     startModal(frame, pane);
! 
!     return (String) pane.getInputValue();
!   }
! 
!   /**
!    * This method shows an internal input dialog with the given message, title
!    * message type, icon, selection value list and initial selection value.
!    * The internal frame dialog will be placed in the first JDesktopPane
!    * ancestor found in the given parent component. This method returns the
!    * input value from the user.
!    *
!    * @param parentComponent The parent to find a JDesktopPane in.
!    * @param message The message to display.
!    * @param title The title to display.
!    * @param messageType The message type.
!    * @param icon The icon to display.
!    * @param selectionValues The selection value list.
!    * @param initialSelectionValue The initial selection value.
!    *
!    * @return The user input value.
!    */
!   public static Object showInternalInputDialog(Component parentComponent,
!                                                Object message, String title,
!                                                int messageType, Icon icon,
!                                                Object[] selectionValues,
!                                                Object initialSelectionValue)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType);
!     pane.setWantsInput(true);
!     pane.setIcon(icon);
!     pane.setSelectionValues(selectionValues);
!     pane.setInitialSelectionValue(initialSelectionValue);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
! 
!     startModal(frame, pane);
! 
!     return (String) pane.getInputValue();
!   }
! 
!   /**
!    * This method shows an internal message dialog with the given message. The
!    * internal frame dialog will be placed in the first JDesktopPane ancestor
!    * found in the given parent component.
!    *
!    * @param parentComponent The component to find a JDesktopPane in.
!    * @param message The message to display.
!    */
!   public static void showInternalMessageDialog(Component parentComponent,
!                                                Object message)
!   {
!     JOptionPane pane = new JOptionPane(message);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, null);
! 
!     startModal(frame, pane);
!   }
! 
!   /**
!    * This method shows an internal message dialog with the given message,
!    * title and message type. The internal message dialog is placed in the
!    * first JDesktopPane ancestor found in the given parent component.
!    *
!    * @param parentComponent The parent component to find a JDesktopPane in.
!    * @param message The message to display.
!    * @param title The title to display.
!    * @param messageType The message type.
!    */
!   public static void showInternalMessageDialog(Component parentComponent,
!                                                Object message, String title,
!                                                int messageType)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
! 
!     startModal(frame, pane);
!   }
! 
!   /**
!    * This method shows an internal message dialog with the given message,
!    * title, message type and icon. The internal message dialog is placed in
!    * the first JDesktopPane ancestor found in the given parent component.
!    *
!    * @param parentComponent The component to find a JDesktopPane in.
!    * @param message The message to display.
!    * @param title The title to display.
!    * @param messageType The message type.
!    * @param icon The icon to display.
!    */
!   public static void showInternalMessageDialog(Component parentComponent,
!                                                Object message, String title,
!                                                int messageType, Icon icon)
!   {
!     JOptionPane pane = new JOptionPane(message, messageType);
!     pane.setIcon(icon);
!     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
  
+     startModal(frame, pane);
+   }
  
+   /**
+    * This method displays an internal option dialog with the given message,
+    * title, option type, message type, icon, option list, and initial option
+    * value. The internal option dialog is placed in the first JDesktopPane
+    * ancestor found in the parent component. This method returns the option
+    * selected.
+    *
+    * @param parentComponent The parent to find a JDesktopPane in.
+    * @param message The message displayed.
+    * @param title The title displayed.
+    * @param optionType The option type.
+    * @param messageType The message type.
+    * @param icon The icon to display.
+    * @param options The array of options.
+    * @param initialValue The initial value selected.
+    *
+    * @return The option that was selected.
+    */
+   public static int showInternalOptionDialog(Component parentComponent,
+                                              Object message, String title,
+                                              int optionType, int messageType,
+                                              Icon icon, Object[] options,
+                                              Object initialValue)
+   {
+     JOptionPane pane = new JOptionPane(message, messageType, optionType, icon,
+                                        options, initialValue);
  
+     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
  
+     startModal(frame, pane);
  
+     return ((Integer) pane.getValue()).intValue();
+   }
+ 
+   /**
+    * This method shows an INFORMATION_MESSAGE type message dialog.
+    *
+    * @param parentComponent The component to find a frame in.
+    * @param message The message displayed.
+    */
+   public static void showMessageDialog(Component parentComponent,
+                                        Object message)
+   {
+     JOptionPane pane = new JOptionPane(message, INFORMATION_MESSAGE);
+     JDialog dialog = pane.createDialog(parentComponent, null);
+     dialog.pack();
+     dialog.show();
+   }
  
+   /**
+    * This method shows a message dialog with the given message, title and
+    * messageType.
+    *
+    * @param parentComponent The component to find a frame in.
+    * @param message The message displayed.
+    * @param title The title of the dialog.
+    * @param messageType The messageType.
+    */
+   public static void showMessageDialog(Component parentComponent,
+                                        Object message, String title,
+                                        int messageType)
+   {
+     JOptionPane pane = new JOptionPane(message, messageType);
+     JDialog dialog = pane.createDialog(parentComponent, title);
+     dialog.pack();
+     dialog.show();
+   }
  
+   /**
+    * This method shows a message dialog with the given message, title,
+    * messageType and icon.
+    *
+    * @param parentComponent The component to find a frame in.
+    * @param message The message displayed.
+    * @param title The title of the dialog.
+    * @param messageType The messageType.
+    * @param icon The icon displayed.
+    */
+   public static void showMessageDialog(Component parentComponent,
+                                        Object message, String title,
+                                        int messageType, Icon icon)
+   {
+     JOptionPane pane = new JOptionPane(message, messageType);
+     pane.setIcon(icon);
+     JDialog dialog = pane.createDialog(parentComponent, title);
+     dialog.pack();
+     dialog.show();
+   }
  
+   /**
+    * This method shows an option dialog with the given message, title,
+    * optionType, messageType, icon, options and initialValue. This method
+    * returns the option that was selected.
+    *
+    * @param parentComponent The component to find a frame in.
+    * @param message The message displayed.
+    * @param title The title of the dialog.
+    * @param optionType The optionType.
+    * @param messageType The messageType.
+    * @param icon The icon displayed.
+    * @param options The options to choose from.
+    * @param initialValue The initial value.
+    *
+    * @return The selected option.
+    */
+   public static int showOptionDialog(Component parentComponent,
+                                      Object message, String title,
+                                      int optionType, int messageType,
+                                      Icon icon, Object[] options,
+                                      Object initialValue)
+   {
+     JOptionPane pane = new JOptionPane(message, messageType, optionType, icon,
+                                        options, initialValue);
  
+     JDialog dialog = pane.createDialog(parentComponent, title);
+     dialog.pack();
+     dialog.show();
  
+     return ((Integer) pane.getValue()).intValue();
+   }
  
+   /**
+    * This method resets the UI to the Look and Feel default.
+    */
+   public void updateUI()
+   {
+     setUI((OptionPaneUI) UIManager.getUI(this));
+     invalidate();
+   }
  
+   /**
+    * This method returns true if the key is a valid messageType.
+    *
+    * @param key The key to check.
+    *
+    * @return True if key is valid.
+    */
+   private boolean validMessageType(int key)
+   {
+     switch (key)
+       {
+       case ERROR_MESSAGE:
+       case INFORMATION_MESSAGE:
+       case PLAIN_MESSAGE:
+       case QUESTION_MESSAGE:
+       case WARNING_MESSAGE:
+ 	return true;
+       }
+     return false;
+   }
  
+   /**
+    * This method returns true if the key is a valid optionType.
+    *
+    * @param key The key to check.
+    *
+    * @return True if key is valid.
+    */
+   private boolean validOptionType(int key)
+   {
+     switch (key)
+       {
+       case DEFAULT_OPTION:
+       case OK_CANCEL_OPTION:
+       case YES_NO_CANCEL_OPTION:
+       case YES_NO_OPTION:
+ 	return true;
+       }
+     return false;
+   }
  
+   /**
+    * This helper method makes the JInternalFrame wait until it is notified by
+    * an InternalFrameClosing event. This method also adds the given
+    * JOptionPane to the JInternalFrame and sizes it according to the
+    * JInternalFrame's preferred size.
+    *
+    * @param f The JInternalFrame to make modal.
+    * @param pane The JOptionPane to add to the JInternalFrame.
+    */
+   private static void startModal(JInternalFrame f, JOptionPane pane)
+   {
+     f.getContentPane().add(pane);
+     f.pack();
+     f.show();
  
+     Dimension pref = f.getPreferredSize();
+     f.setBounds(0, 0, pref.width, pref.height);
  
+     synchronized (f)
+       {
+ 	final JInternalFrame tmp = f;
+ 	tmp.toFront();
  
+ 	f.addInternalFrameListener(new InternalFrameAdapter()
+ 	    {
+ 	      public void internalFrameClosed(InternalFrameEvent e)
+ 	      {
+ 		synchronized (tmp)
+ 		  {
+ 		    tmp.removeInternalFrameListener(this);
+ 		    tmp.notifyAll();
+ 		  }
+ 	      }
+ 	    });
+ 	try
+ 	  {
+ 	    while (! f.isClosed())
+ 	      f.wait();
+ 	  }
+ 	catch (InterruptedException ignored)
+ 	  {
+ 	  }
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JPanel.java gcc-4.0.0/libjava/javax/swing/JPanel.java
*** gcc-3.4.3/libjava/javax/swing/JPanel.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/JPanel.java	Tue Nov 30 23:58:53 2004
*************** this exception to your version of the li
*** 35,49 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.FlowLayout;
  import java.awt.LayoutManager;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.swing.plaf.PanelUI;
  
- 
  /**
   * An instance of JPanel can be added to a panel, frame etc
   *
--- 35,50 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.FlowLayout;
  import java.awt.LayoutManager;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.swing.plaf.PanelUI;
  
  /**
   * An instance of JPanel can be added to a panel, frame etc
   *
*************** public class JPanel extends JComponent i
*** 85,91 ****
      } 
  
      public String getUIClassID()
!     {	return "JPanel";    }
  
  
      public void setUI(PanelUI ui) {
--- 86,92 ----
      } 
  
      public String getUIClassID()
!     {	return "PanelUI";    }
  
  
      public void setUI(PanelUI ui) {
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JPasswordField.java gcc-4.0.0/libjava/javax/swing/JPasswordField.java
*** gcc-3.4.3/libjava/javax/swing/JPasswordField.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/JPasswordField.java	Wed Feb 16 20:02:31 2005
*************** this exception to your version of the li
*** 35,269 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.io.IOException;
  import java.io.ObjectOutputStream;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.swing.text.BadLocationException;
  import javax.swing.text.Document;
  
  /**
!  * JPasswordField
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JPasswordField extends JTextField {
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleJPasswordField
! 	 */
! 	protected class AccessibleJPasswordField extends AccessibleJTextField {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJPasswordField
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJPasswordField(JPasswordField component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJPasswordField()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.PASSWORD_TEXT;
! 		} // getAccessibleRole()
! 
! 
! 	} // AccessibleJPasswordField
! 
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "PasswordFIeldUI";
! 
! 	/**
! 	 * echoChar.  Default is 0
! 	 */
! 	private char echoChar = 0;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JPasswordField
! 	 */
! 	public JPasswordField() {
! 		// TODO
! 	} // JPasswordField()
  
! 	/**
! 	 * Constructor JPasswordField
! 	 * @param text TODO
! 	 */
! 	public JPasswordField(String text) {
! 		// TODO
! 	} // JPasswordField()
  
! 	/**
! 	 * Constructor JPasswordField
! 	 * @param columns TODO
! 	 */
! 	public JPasswordField(int columns) {
! 		// TODO
! 	} // JPasswordField()
  
! 	/**
! 	 * Constructor JPasswordField
! 	 * @param text TODO
! 	 * @param columns TODO
! 	 */
! 	public JPasswordField(String text, int columns) {
! 		// TODO
! 	} // JPasswordField()
  
! 	/**
! 	 * Constructor JPasswordField
! 	 * @param document TODO
! 	 * @param text TODO
! 	 * @param columns TODO
! 	 */
! 	public JPasswordField(Document document, String text, int columns) {
! 		// TODO
! 	} // JPasswordField()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * copy
! 	 */
! 	public void copy() {
! 		// TODO
! 	} // copy()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * getEchoChar
! 	 * @returns char
! 	 */
! 	public char getEchoChar() {
! 		return echoChar;
! 	} // getEchoChar()
  
! 	/**
! 	 * setEchoChar
! 	 * @param echo TODO
! 	 */
! 	public void setEchoChar(char echo) {
! 		this.echoChar = echo;
! 		// TODO
! 	} // setEchoChar()
  
! 	/**
! 	 * echoCharIsSet
! 	 * @returns boolean
! 	 */
! 	public boolean echoCharIsSet() {
! 		return (echoChar == 0);
! 	} // echoCharIsSet()
  
! 	/**
! 	 * cut
! 	 */
! 	public void cut() {
! 		// TODO
! 	} // cut()
  
! 	/**
! 	 * getText
! 	 * @returns String
!          * @deprecated
! 	 */
! 	public String getText() {
! 		return null; // TODO
! 	} // getText()
  
! 	/**
! 	 * getText
! 	 * @param offset TODO
! 	 * @param length TODO
! 	 * @exception BadLocationException TODO
! 	 * @returns String
!          * @deprecated
! 	 */
! 	public String getText(int offset, int length) throws BadLocationException {
! 		return null; // TODO
! 	} // getText()
  
! 	/**
! 	 * getPassword
! 	 * @returns char[]
! 	 */
! 	public char[] getPassword() {
! 		return null; // TODO
! 	} // getPassword()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJPasswordField(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JPasswordField
--- 35,270 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.io.IOException;
  import java.io.ObjectOutputStream;
+ 
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.swing.text.BadLocationException;
  import javax.swing.text.Document;
  
  /**
!  * class JPasswordField
!  * 
!  * @author Andrew Selkirk
!  * @version 1.0
   */
! public class JPasswordField extends JTextField
! {
!   /**
!    * AccessibleJPasswordField
!    */
!   protected class AccessibleJPasswordField extends AccessibleJTextField
!   {
!     private static final long serialVersionUID = -8477039424200681086L;
  
!     /**
!      * Constructor AccessibleJPasswordField
!      */
!     protected AccessibleJPasswordField()
!     {
!     }
  
!     /**
!      * getAccessibleRole
!      * 
!      * @return AccessibleRole
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.PASSWORD_TEXT;
!     }
!   }
  
!   /**
!    * echoChar.  Default is 0.
!    */
!   private char echoChar = 0;
  
!   /**
!    * Creates a <code>JPasswordField</code> object.
!    */
!   public JPasswordField()
!   {
!     this(null, null, 0);
!   }
  
!   /**
!    * Creates a <code>JPasswordField</code> object.
!    * 
!    * @param text the initial text
!    */
!   public JPasswordField(String text)
!   {
!     this(null, text, 0);
!   }
  
+   /**
+    * Creates a <code>JPasswordField</code> object.
+    * 
+    * @param columns the number of columns
+    */
+   public JPasswordField(int columns)
+   {
+     this(null, null, columns);
+   }
  
!   /**
!    * Creates a <code>JPasswordField</code> object.
!    * 
!    * @param text the initial text
!    * @param columns the number of columns
!    */
!   public JPasswordField(String text, int columns)
!   {
!     this(null, text, columns);
!   }
  
!   /**
!    * Creates a <code>JPasswordField</code> object.
!    * 
!    * @param document the document to use
!    * @param text the initial text
!    * @param columns the number of columns
!    */
!   public JPasswordField(Document document, String text, int columns)
!   {
!     super(document, text, columns);
!   }
  
!   /**
!    * writeObject
!    * 
!    * @param stream the stream to write to
!    * 
!    * @exception IOException if an error occurs
!    */
!   private void writeObject(ObjectOutputStream stream) throws IOException
!   {
!     // TODO: Implement me.
!   }
  
!   /**
!    * Returns the <code>UIClassID</code>
!    * 
!    * @return the string "PasswordFieldUI"
!    */
!   public String getUIClassID()
!   {
!     return "PasswordFieldUI";
!   }
  
!   /**
!    * getEchoChar
!    * 
!    * @return the echo char
!    */
!   public char getEchoChar()
!   {
!     return echoChar;
!   }
  
!   /**
!    * setEchoChar
!    * 
!    * @param echo the echo char
!    */
!   public void setEchoChar(char echo)
!   {
!     this.echoChar = echo;
!   }
  
!   /**
!    * echoCharIsSet
!    * 
!    * @return <code>true</code> if the echo char is set,
!    * <code>false</code> otherwise.
!    */
!   public boolean echoCharIsSet()
!   {
!     return echoChar == 0;
!   }
  
!   /**
!    * Copies the selected text into the clipboard. This operation is not
!    * allowed in a password input field.
!    */
!   public void copy()
!   {
!     UIManager.getLookAndFeel().provideErrorFeedback(this);
!   }
  
!   /**
!    * Cuts the selected text and puts it into the clipboard. This operation
!    * is not allowed in a password input field.
!    */
!   public void cut()
!   {
!     UIManager.getLookAndFeel().provideErrorFeedback(this);
!   }
  
!   /**
!    * getText
!    * 
!    * @return String
!    * 
!    * @deprecated
!    */
!   public String getText()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getText
!    * 
!    * @param offset TODO
!    * @param length TODO
!    * 
!    * @return String
!    * 
!    * @exception BadLocationException TODO
!    *
!    * @deprecated
!    */
!   public String getText(int offset, int length) throws BadLocationException
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getPassword
!    * 
!    * @return char[]
!    */
!   public char[] getPassword()
!   {
!     return new char[0]; // TODO
!   }
  
!   /**
!    * paramString
!    * 
!    * @return String
!    */
!   protected String paramString()
!   {
!     return null; // TODO
!   }
  
+   /**
+    * getAccessibleContext
+    * 
+    * @return the <code>AccessibleContext</code> object
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleJPasswordField();
  
!     return accessibleContext;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JPopupMenu.java gcc-4.0.0/libjava/javax/swing/JPopupMenu.java
*** gcc-3.4.3/libjava/javax/swing/JPopupMenu.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/JPopupMenu.java	Wed Feb 16 20:02:32 2005
***************
*** 1,5 ****
  /* JPopupMenu.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JPopupMenu.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,675 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Dimension;
! import java.awt.Graphics;
  import java.awt.Insets;
  import java.awt.event.KeyEvent;
  import java.awt.event.MouseEvent;
  import java.beans.PropertyChangeListener;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.swing.event.PopupMenuListener;
  import javax.swing.plaf.PopupMenuUI;
  
  /**
!  * JPopupMenu
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
  public class JPopupMenu extends JComponent implements Accessible, MenuElement
  {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Separator
! 	 */
! 	public static class Separator extends JSeparator {
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor Separator
! 		 */
! 		public Separator() {
! 			// TODO
! 		} // Separator()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * getUIClassID
! 		 * @returns String
! 		 */
! 		public String getUIClassID() {
! 			return null; // TODO
! 		} // getUIClassID()
  
  
! 	} // Separator
  
! 	/**
! 	 * AccessibleJPopupMenu
! 	 */
! 	protected class AccessibleJPopupMenu extends AccessibleJComponent {
  
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
  
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor AccessibleJPopupMenu
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJPopupMenu(JPopupMenu component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJPopupMenu()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.POPUP_MENU;
! 		} // getAccessibleRole()
  
  
! 	} // AccessibleJPopupMenu
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "PopupMenuUI";
  
! 	/**
! 	 * invoker
! 	 */
! 	transient Component invoker;
  
! 	/**
! 	 * desiredLocationX
! 	 */
! 	private int desiredLocationX;
  
! 	/**
! 	 * desiredLocationY
! 	 */
! 	private int desiredLocationY;
  
! 	/**
! 	 * label
! 	 */
! 	private String label;
  
! 	/**
! 	 * paintBorder
! 	 */
! 	private boolean paintBorder;
  
! 	/**
! 	 * margin
! 	 */
! 	private Insets margin;
  
! 	/**
! 	 * defaultLWPopupEnabledKey
! 	 */
! 	private static final Object defaultLWPopupEnabledKey = null; // TODO
  
! 	/**
! 	 * lightWeightPopupEnabled
! 	 */
! 	private boolean lightWeightPopupEnabled;
  
! 	/**
! 	 * selectionModel
! 	 */
! 	private SingleSelectionModel selectionModel;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JPopupMenu
! 	 */
! 	public JPopupMenu() {
! 		// TODO
! 	} // JPopupMenu()
  
! 	/**
! 	 * Constructor JPopupMenu
! 	 * @param label TODO
! 	 */
! 	public JPopupMenu(String label) {
! 		// TODO
! 	} // JPopupMenu()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * readObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 * @exception ClassNotFoundException TODO
! 	 */
! 	private void readObject(ObjectInputStream stream) 
! 			throws IOException, ClassNotFoundException {
! 		// TODO
! 	} // readObject()
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * add
! 	 * @param item TODO
! 	 * @returns JMenuItem
! 	 */
! 	public JMenuItem add(JMenuItem item) {
! 		return null; // TODO
! 	} // add()
  
! 	/**
! 	 * add
! 	 * @param text TODO
! 	 * @returns JMenuItem
! 	 */
! 	public JMenuItem add(String text) {
! 		return null; // TODO
! 	} // add()
  
! 	/**
! 	 * add
! 	 * @param action TODO
! 	 * @returns JMenuItem
! 	 */
! 	public JMenuItem add(Action action) {
! 		return null; // TODO
! 	} // add()
  
! 	/**
! 	 * remove
! 	 * @param index TODO
! 	 */
! 	public void remove(int index) {
! 		// TODO
! 	} // remove()
  
! 	/**
! 	 * insert
! 	 * @param action TODO
! 	 * @param index TODO
! 	 */
! 	public void insert(Action action, int index) {
! 		// TODO
! 	} // insert()
  
! 	/**
! 	 * insert
! 	 * @param component TODO
! 	 * @param index TODO
! 	 */
! 	public void insert(Component component, int index) {
! 		// TODO
! 	} // insert()
  
! 	/**
! 	 * paintBorder
! 	 * @param graphics TODO
! 	 */
! 	protected void paintBorder(Graphics graphics) {
! 		// TODO
! 	} // paintBorder()
  
! 	/**
! 	 * getDefaultLightWeightPopupEnabled
! 	 * @returns boolean
! 	 */
! 	public static boolean getDefaultLightWeightPopupEnabled() {
! 		return false; // TODO
! 	} // getDefaultLightWeightPopupEnabled()
  
! 	/**
! 	 * setDefaultLightWeightPopupEnabled
! 	 * @param enabled TODO
! 	 */
! 	public static void setDefaultLightWeightPopupEnabled(boolean enabled) {
! 		// TODO
! 	} // setDefaultLightWeightPopupEnabled()
  
! 	/**
! 	 * getUI
! 	 * @returns PopupMenuUI
! 	 */
! 	public PopupMenuUI getUI() {
! 		return (PopupMenuUI) ui;
! 	} // getUI()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(PopupMenuUI ui) {
! 		super.setUI(ui);
! 		// TODO
! 	} // setUI()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((PopupMenuUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * getSelectionModel
! 	 * @returns SingleSelectionModel
! 	 */
! 	public SingleSelectionModel getSelectionModel() {
! 		return null; // TODO
! 	} // getSelectionModel()
  
! 	/**
! 	 * setSelectionModel
! 	 * @param model TODO
! 	 */
! 	public void setSelectionModel(SingleSelectionModel model) {
! 		// TODO
! 	} // setSelectionModel()
  
! 	/**
! 	 * createActionComponent
! 	 * @param action TODO
! 	 * @returns JMenuItem
! 	 */
! 	protected JMenuItem createActionComponent(Action action) {
! 		return null; // TODO
! 	} // createActionComponent()
  
! 	/**
! 	 * createActionChangeListener
! 	 * @param item TODO
! 	 * @returns PropertyChangeListener
! 	 */
! 	protected PropertyChangeListener createActionChangeListener(JMenuItem item) {
! 		return null; // TODO
! 	} // createActionChangeListener()
  
! 	/**
! 	 * isLightWeightPopupEnabled
! 	 * @returns boolean
! 	 */
! 	public boolean isLightWeightPopupEnabled() {
! 		return false; // TODO
! 	} // isLightWeightPopupEnabled()
  
! 	/**
! 	 * setLightWeightPopupEnabled
! 	 * @param enabled TODO
! 	 */
! 	public void setLightWeightPopupEnabled(boolean enabled) {
! 		// TODO
! 	} // setLightWeightPopupEnabled()
  
! 	/**
! 	 * getLabel
! 	 * @returns String
! 	 */
! 	public String getLabel() {
! 		return null; // TODO
! 	} // getLabel()
  
! 	/**
! 	 * setLabel
! 	 * @param label TODO
! 	 */
! 	public void setLabel(String label) {
! 		// TODO
! 	} // setLabel()
  
! 	/**
! 	 * addSeparator
! 	 */
! 	public void addSeparator() {
! 		// TODO
! 	} // addSeparator()
  
! 	/**
! 	 * addPopupMenuListener
! 	 * @param listener TODO
! 	 */
! 	public void addPopupMenuListener(PopupMenuListener listener) {
! 		// TODO
! 	} // addPopupMenuListener()
  
! 	/**
! 	 * removePopupMenuListener
! 	 * @param listener TODO
! 	 */
! 	public void removePopupMenuListener(PopupMenuListener listener) {
! 		// TODO
! 	} // removePopupMenuListener()
  
! 	/**
! 	 * firePopupMenuWillBecomeVisible
! 	 */
! 	protected void firePopupMenuWillBecomeVisible() {
! 		// TODO
! 	} // firePopupMenuWillBecomeVisible()
  
! 	/**
! 	 * firePopupMenuWillBecomeInvisible
! 	 */
! 	protected void firePopupMenuWillBecomeInvisible() {
! 		// TODO
! 	} // firePopupMenuWillBecomeInvisible()
  
! 	/**
! 	 * firePopupMenuCanceled
! 	 */
! 	protected void firePopupMenuCanceled() {
! 		// TODO
! 	} // firePopupMenuCanceled()
  
! 	/**
! 	 * pack
! 	 */
! 	public void pack() {
! 		// TODO
! 	} // pack()
  
! 	/**
! 	 * isVisible
! 	 * @returns boolean
! 	 */
! 	public boolean isVisible() {
! 		return false; // TODO
! 	} // isVisible()
  
! 	/**
! 	 * setVisible
! 	 * @param visible TODO
! 	 */
! 	public void setVisible(boolean visible) {
! 		// TODO
! 	} // setVisible()
  
! 	/**
! 	 * setLocation
! 	 * @param x TODO
! 	 * @param y TODO
! 	 */
! 	public void setLocation(int x, int y) {
! 		// TODO
! 	} // setLocation()
  
! 	/**
! 	 * isPopupMenu
! 	 * @returns boolean
! 	 */
! 	private boolean isPopupMenu() {
! 		return false; // TODO
! 	} // isPopupMenu()
  
! 	/**
! 	 * getInvoker
! 	 * @returns Component
! 	 */
! 	public Component getInvoker() {
! 		return null; // TODO
! 	} // getInvoker()
  
! 	/**
! 	 * setInvoker
! 	 * @param component TODO
! 	 */
! 	public void setInvoker(Component component) {
! 		// TODO
! 	} // setInvoker()
  
! 	/**
! 	 * show
! 	 * @param component TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 */
! 	public void show(Component component, int x, int y) {
! 		// TODO
! 	} // show()
  
! 	/**
! 	 * getRootPopupMenu
! 	 * @returns JPopupMenu
! 	 */
! 	JPopupMenu getRootPopupMenu() {
! 		return null; // TODO
! 	} // getRootPopupMenu()
  
! 	/**
! 	 * getComponentAtIndex
! 	 * @param index TODO
! 	 * @returns Component
! 	 */
! 	public Component getComponentAtIndex(int index) {
! 		return null; // TODO
! 	} // getComponentAtIndex()
  
! 	/**
! 	 * getComponentIndex
! 	 * @param component TODO
! 	 * @returns int
! 	 */
! 	public int getComponentIndex(Component component) {
! 		return 0; // TODO
! 	} // getComponentIndex()
  
! 	/**
! 	 * setPopupSize
! 	 * @param size TODO
! 	 */
! 	public void setPopupSize(Dimension size) {
! 		// TODO
! 	} // setPopupSize()
  
! 	/**
! 	 * setPopupSize
! 	 * @param x TODO
! 	 * @param y TODO
! 	 */
! 	public void setPopupSize(int x, int y) {
! 		// TODO
! 	} // setPopupSize()
  
! 	/**
! 	 * setSelected
! 	 * @param selected TODO
! 	 */
! 	public void setSelected(Component selected) {
! 		// TODO
! 	} // setSelected()
  
! 	/**
! 	 * isBorderPainted
! 	 * @returns boolean
! 	 */
! 	public boolean isBorderPainted() {
! 		return false; // TODO
! 	} // isBorderPainted()
  
! 	/**
! 	 * setBorderPainted
! 	 * @param painted TODO
! 	 */
! 	public void setBorderPainted(boolean painted) {
! 		// TODO
! 	} // setBorderPainted()
  
! 	/**
! 	 * getMargin
! 	 * @returns Insets
! 	 */
! 	public Insets getMargin() {
! 		return null; // TODO
! 	} // getMargin()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * processMouseEvent
! 	 * @param event TODO
! 	 * @param path TODO
! 	 * @param manager TODO
! 	 */
! 	public void processMouseEvent(MouseEvent event, MenuElement[] path,
! 			MenuSelectionManager manager) {
! 		// TODO
! 	} // processMouseEvent()
  
! 	/**
! 	 * processKeyEvent
! 	 * @param event TODO
! 	 * @param path TODO
! 	 * @param manager TODO
! 	 */
! 	public void processKeyEvent(KeyEvent event, MenuElement[] path,
! 			MenuSelectionManager manager) {
! 		// TODO
! 	} // processKeyEvent()
  
! 	/**
! 	 * menuSelectionChanged
! 	 * @param changed TODO
! 	 */
! 	public void menuSelectionChanged(boolean changed) {
! 		// TODO
! 	} // menuSelectionChanged()
  
! 	/**
! 	 * getSubElements
! 	 * @returns MenuElement[]
! 	 */
! 	public MenuElement[] getSubElements() {
! 		return null; // TODO
! 	} // getSubElements()
  
! 	/**
! 	 * getComponent
! 	 * @returns Component
! 	 */
! 	public Component getComponent() {
! 		return null; // TODO
! 	} // getComponent()
  
! 	/**
! 	 * isPopupTrigger
! 	 * @param event TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isPopupTrigger(MouseEvent event) {
! 		return false; // TODO
! 	} // isPopupTrigger()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJPopupMenu(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JPopupMenu
--- 35,1074 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
+ import java.awt.Container;
  import java.awt.Dimension;
! import java.awt.GridBagConstraints;
  import java.awt.Insets;
+ import java.awt.Panel;
+ import java.awt.Point;
  import java.awt.event.KeyEvent;
  import java.awt.event.MouseEvent;
+ import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
+ import java.util.ArrayList;
+ import java.util.EventListener;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
+ import javax.swing.event.PopupMenuEvent;
  import javax.swing.event.PopupMenuListener;
  import javax.swing.plaf.PopupMenuUI;
  
  /**
!  * JPopupMenu is a container that is used to display popup menu's menu
!  * items. By default JPopupMenu is a lightweight container, however if it
!  * is the case that JPopupMenu's bounds are outside of main window, then
!  * heawyweight container will be used to display menu items. It is also
!  * possible to change JPopupMenu's default  behavior and set JPopupMenu
!  * to always use heavyweight container.
!  *
!  * JPopupMenu can be displayed anywhere; it is a floating free popup menu.
!  * However before JPopupMenu is diplayed, its invoker property should be set.
!  * JPopupMenu's invoker is a component relative to which popup menu is
!  * displayed.
!  *
!  * JPopupMenu fires PopupMenuEvents to its registered listeners. Whenever
!  * JPopupMenu becomes visible on the screen then PopupMenuEvent indicating
!  * that popup menu became visible will be fired. In the case when
!  * JPopupMenu becomes invisible or cancelled without selection, then
!  * popupMenuBecomeInvisible() or popupMenuCancelled() methods of
!  * PopupMenuListeners will be invoked.
!  *
!  * JPopupMenu also fires PropertyChangeEvents when its bound properties 
!  * change.In addittion to inheritted bound properties, JPopupMenu has 
!  * 'visible' bound property. When JPopupMenu becomes visible/invisible on
!  * the screen it fires PropertyChangeEvents to its registered 
!  * PropertyChangeListeners.
   */
  public class JPopupMenu extends JComponent implements Accessible, MenuElement
  {
+   private static final long serialVersionUID = -8336996630009646009L;
  
!   /* indicates if popup's menu border should be painted*/
!   private boolean borderPainted = true;
  
!   /** Flag indicating whether lightweight, mediumweight or heavyweight popup
!      is used to display menu items.
  
!      These are the possible cases:
  
!      1. if DefaultLightWeightPopupEnabled true
!          (i)  use lightweight container if popup feets inside top-level window
!          (ii) only use heavyweight container (JWindow) if popup doesn't fit.
  
+      2. if DefaultLightWeightPopupEnabled false
+          (i) if popup fits, use awt.Panel (mediumWeight)
+          (ii) if popup doesn't fit, use JWindow (heavyWeight)
+   */
+   private static boolean DefaultLightWeightPopupEnabled = true;
  
!   /* Component that invokes popup menu. */
!   transient Component invoker;
  
!   /* Label for this popup menu. It is not used in most of the look and feel themes. */
!   private String label;
  
+   /*Amount of space between menuItem's in JPopupMenu and JPopupMenu's border */
+   private Insets margin;
  
!   /** Indicates whether ligthWeight container can be used to display popup
!      menu. This flag is the same as DefaultLightWeightPopupEnabled, but setting
!      this flag can change popup menu after creation of the object */
!   private boolean lightWeightPopupEnabled;
  
!   /** SelectionModel that keeps track of menu selection. */
!   private SingleSelectionModel selectionModel;
  
!   /* Popup that is used to display JPopupMenu */
!   private transient Popup popup;
  
+   /* Location of the popup */
+   private Point popupLocation;
  
!   /* Field indicating if popup menu is visible or not */
!   private boolean visible = false;
!   
!   /**
!    * Creates a new JPopupMenu object.
!    */
!   public JPopupMenu()
!   {
!     this(null);
!   }
  
!   /**
!    * Creates a new JPopupMenu with specified label
!    *
!    * @param label Label for popup menu.
!    */
!   public JPopupMenu(String label)
!   {
!     lightWeightPopupEnabled = getDefaultLightWeightPopupEnabled();
!     setLabel(label);
!     setSelectionModel(new DefaultSingleSelectionModel());
!     super.setVisible(false);
!     updateUI();
!   }
  
+   private void readObject(ObjectInputStream stream)
+                    throws IOException, ClassNotFoundException
+   {
+   }
  
!   private void writeObject(ObjectOutputStream stream) throws IOException
!   {
!   }
  
!   /**
!   * Adds given menu item to the popup menu
!   *
!   * @param item menu item to add to the popup menu
!   *
!   * @return menu item that was added to the popup menu
!   */
!   public JMenuItem add(JMenuItem item)
!   {
!     this.insert(item, -1);
!     return item;
!   }
  
+   /**
+    * Constructs menu item with a specified label and adds it to
+    * popup menu
+    *
+    * @param text label for the menu item to be added
+    *
+    * @return constructed menu item that was added to the popup menu
+    */
+   public JMenuItem add(String text)
+   {
+     JMenuItem item = new JMenuItem(text);
+     return add(item);
+   }
  
!   /**
!    * Constructs menu item associated with the specified action
!    * and adds it to the popup menu
!    *
!    * @param action Action for the new menu item
!    *
!    * @return menu item that was added to the menu
!    */
!   public JMenuItem add(Action action)
!   {
!     JMenuItem item = createActionComponent(action);
  
+     if (action != null)
+       action.addPropertyChangeListener(createActionChangeListener(item));
  
!     return add(item);
!   }
  
!   /**
!    * Revomes component at the given index from the menu.
!    *
!    * @param index index of the component that will be removed in the menu
!    */
!   public void remove(int index)
!   {
!     super.remove(index);
  
!     GridBagConstraints constraints = new GridBagConstraints();
!     constraints.fill = GridBagConstraints.BOTH;
!     constraints.weightx = 100.0;
!     constraints.weighty = 100.0;
  
!     Component[] items = getComponents();
!     for (int i = index; i < items.length; i++)
!       {
! 	constraints.gridy = i;
! 	super.add(items[i], constraints, i);
!       }
!   }
  
!   /**
!    * Create menu item associated with the given action
!    * and inserts it into the popup menu at the specified index
!    *
!    * @param action Action for the new menu item
!    * @param index index in the popup menu at which to insert new menu item.
!    */
!   public void insert(Action action, int index)
!   {
!     JMenuItem item = new JMenuItem(action);
!     this.insert(item, index);
!   }
  
!   /**
!    * Insert given component to the popup menu at the
!    * specified index
!    *
!    * @param component Component to insert
!    * @param index Index at which to insert given component
!    */
!   public void insert(Component component, int index)
!   {
!     GridBagConstraints constraints = new GridBagConstraints();
!     constraints.fill = GridBagConstraints.BOTH;
!     constraints.weightx = 100.0;
!     constraints.weighty = 100.0;
  
!     if (index == -1)
!       index = getComponents().length;
  
!     constraints.gridy = index;
!     super.add(component, constraints, index);
  
!     // need to change constraints for the components that were moved by 1
!     // due to the insertion
!     if (index != -1)
!       {
! 	Component[] items = getComponents();
  
! 	for (int i = index + 1; i < items.length; i++)
! 	  {
! 	    constraints.gridy = i;
! 	    super.add(items[i], constraints, i);
! 	  }
!       }
!   }
  
!   /**
!    * Returns flag indicating if newly created JPopupMenu will use
!    * heavyweight or lightweight container to display its menu items
!    *
!    * @return true if JPopupMenu will use lightweight container to display
!    * menu items by default, and false otherwise.
!    */
!   public static boolean getDefaultLightWeightPopupEnabled()
!   {
!     return DefaultLightWeightPopupEnabled;
!   }
  
+   /**
+    * Sets whether JPopupMenu should use ligthWeight container to
+    * display it menu items by default
+    *
+    * @param enabled true if JPopupMenu should use lightweight container
+    * for displaying its menu items, and false otherwise.
+    */
+   public static void setDefaultLightWeightPopupEnabled(boolean enabled)
+   {
+     DefaultLightWeightPopupEnabled = enabled;
+   }
  
!   /**
!    * This method returns the UI used to display the JPopupMenu.
!    *
!    * @return The UI used to display the JPopupMenu.
!    */
!   public PopupMenuUI getUI()
!   {
!     return (PopupMenuUI) ui;
!   }
  
!   /**
!    * Set the "UI" property of the menu item, which is a look and feel class
!    * responsible for handling popupMenu's input events and painting it.
!    *
!    * @param ui The new "UI" property
!    */
!   public void setUI(PopupMenuUI ui)
!   {
!     super.setUI(ui);
!   }
  
!   /**
!    * This method sets this menuItem's UI to the UIManager's default for the
!    * current look and feel.
!    */
!   public void updateUI()
!   {
!     setUI((PopupMenuUI) UIManager.getUI(this));
!     invalidate();
!   }
  
+   /**
+    * This method returns a name to identify which look and feel class will be
+    * the UI delegate for the menuItem.
+    *
+    * @return The Look and Feel classID. "PopupMenuUI"
+    */
+   public String getUIClassID()
+   {
+     return "PopupMenuUI";
+   }
  
!   /**
!    * Returns selectionModel used by this popup menu to keep
!    * track of the selection.
!    *
!    * @return popup menu's selection model
!    */
!   public SingleSelectionModel getSelectionModel()
!   {
!     return selectionModel;
!   }
  
!   /**
!    * Sets selection model for this popup menu
!    *
!    * @param model new selection model of this popup menu
!    */
!   public void setSelectionModel(SingleSelectionModel model)
!   {
! 	selectionModel = model;
!   }
  
!   /**
!    * Creates new menu item associated with a given action.
!    *
!    * @param action Action used to create new menu item
!    *
!    * @return new created menu item associated with a given action.
!    */
!   protected JMenuItem createActionComponent(Action action)
!   {
!     return new JMenuItem(action);
!   }
  
!   /**
!    * Creates PropertyChangeListener that listens to PropertyChangeEvents
!    * occuring in the Action associated with given menu item in this popup menu.
!    *
!    * @param item MenuItem
!    *
!    * @return The PropertyChangeListener
!    */
!   protected PropertyChangeListener createActionChangeListener(JMenuItem item)
!   {
!     return new ActionChangeListener();
!   }
  
!   /**
!    * Returns true if this popup menu will display its menu item in
!    * a lightweight container and false otherwise.
!    *
!    * @return true if this popup menu will display its menu items
!    * in a lightweight container and false otherwise.
!    */
!   public boolean isLightWeightPopupEnabled()
!   {
!     return lightWeightPopupEnabled;
!   }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @param enabled DOCUMENT ME!
!    */
!   public void setLightWeightPopupEnabled(boolean enabled)
!   {
!     lightWeightPopupEnabled = enabled;
!   }
  
!   /**
!    * Returns label for this popup menu
!    *
!    * @return label for this popup menu
!    */
!   public String getLabel()
!   {
!     return label;
!   }
  
!   /**
!    * Sets label for this popup menu. This method fires PropertyChangeEvent
!    * when the label property is changed. Please note that most
!    * of the Look &amp; Feel will ignore this property.
!    *
!    * @param label label for this popup menu
!    */
!   public void setLabel(String label)
!   {
!     if (label != this.label)
!       {
! 	String oldLabel = this.label;
! 	this.label = label;
! 	firePropertyChange("label", oldLabel, label);
!       }
!   }
  
!   /**
!    * Adds separator to this popup menu
!    */
!   public void addSeparator()
!   {
!     // insert separator at the end of the list of menu items    
!     this.insert(new Separator(), -1);
!   }
  
!   /**
!    * Adds popupMenuListener to listen for PopupMenuEvents fired
!    * by the JPopupMenu
!    *
!    * @param listener PopupMenuListener to add to JPopupMenu
!    */
!   public void addPopupMenuListener(PopupMenuListener listener)
!   {
!     listenerList.add(PopupMenuListener.class, listener);
!   }
  
!   /**
!    * Removes PopupMenuListener from JPopupMenu's list of listeners
!    *
!    * @param listener PopupMenuListener which needs to be removed
!    */
!   public void removePopupMenuListener(PopupMenuListener listener)
!   {
!     listenerList.remove(PopupMenuListener.class, listener);
!   }
  
!   /**
!    * Returns array of PopupMenuListeners that are listening to JPopupMenu
!    *
!    * @return Array of PopupMenuListeners that are listening to JPopupMenu
!    */
!   public PopupMenuListener[] getPopupMenuListeners()
!   {
!     return ((PopupMenuListener[]) listenerList.getListeners(PopupMenuListener.class));
!   }
  
!   /**
!    * This method calls popupMenuWillBecomeVisible() of popup menu's
!    * PopupMenuListeners. This method is invoked just before popup menu
!    * will appear on the screen.
!    */
!   protected void firePopupMenuWillBecomeVisible()
!   {
!     EventListener[] ll = listenerList.getListeners(PopupMenuListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((PopupMenuListener) ll[i]).popupMenuWillBecomeVisible(new PopupMenuEvent(this));
!   }
  
!   /**
!    * This method calls popupMenuWillBecomeInvisible() of popup
!    * menu's PopupMenuListeners. This method is invoked just before popup
!    * menu will disappear from the screen
!    */
!   protected void firePopupMenuWillBecomeInvisible()
!   {
!     EventListener[] ll = listenerList.getListeners(PopupMenuListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((PopupMenuListener) ll[i]).popupMenuWillBecomeInvisible(new PopupMenuEvent(this));
!   }
  
!   /**
!    * This method calls popupMenuCanceled() of popup menu's PopupMenuListeners.
!    * This method is invoked just before popup menu is cancelled. This happens
!    * when popup menu is closed without selecting any of its menu items. This
!    * usually happens when the top-level window is resized or moved.
!    */
!   protected void firePopupMenuCanceled()
!   {
!     EventListener[] ll = listenerList.getListeners(PopupMenuListener.class);
  
!     for (int i = 0; i < ll.length; i++)
!       ((PopupMenuListener) ll[i]).popupMenuCanceled(new PopupMenuEvent(this));
!   }
  
!   /**
!    * This methods sets popup menu's size to its' preferred size. If the
!    * popup menu's size is previously set it will be ignored.
!    */
!   public void pack()
!   {
!     super.setSize(null);
!   }
  
!   /**
!    * Return visibility of the popup menu
!    *
!    * @return true if popup menu is visible on the screen and false otherwise.
!    */
!   public boolean isVisible()
!   {
!     return visible;
!   }
  
!   /**
!    * Sets visibility property of this popup menu. If the property is
!    * set to true then popup menu will be dispayed and popup menu will
!    * hide itself if visible property is set to false.
!    *
!    * @param visible true if popup menu will become visible and false otherwise.
!    */
!   public void setVisible(boolean visible)
!   {
!     if (visible == isVisible())
!       return;
  
!     boolean old = isVisible();
!     this.visible = visible;
!     if (old != isVisible())
!       {
! 	firePropertyChange("visible", old, isVisible());
! 	if (visible)
! 	  {
! 	    firePopupMenuWillBecomeVisible();
! 	    Container rootContainer = (Container) SwingUtilities.getRoot(invoker);
  
! 	    boolean fit = true;
! 	    Dimension size;
  
! 	    // Determine the size of the popup menu
! 	    if (this.getSize().width == 0 && this.getSize().width == 0)
! 	      size = this.getPreferredSize();
! 	    else
! 	      size = this.getSize();
  
! 	    if ((size.width > (rootContainer.getWidth() - popupLocation.x))
! 	        || (size.height > (rootContainer.getHeight() - popupLocation.y)))
! 	      fit = false;
! 	    if (lightWeightPopupEnabled && fit)
! 	      popup = new LightWeightPopup(this);
! 	    else
! 	      {
! 		if (fit)
! 		  popup = new MediumWeightPopup(this);
! 		else
! 		  popup = new HeavyWeightPopup(this);
! 	      }
! 	    if (popup instanceof LightWeightPopup
! 	        || popup instanceof MediumWeightPopup)
! 	      {
! 		JLayeredPane layeredPane;
! 		layeredPane = SwingUtilities.getRootPane(invoker)
! 		                            .getLayeredPane();
! 		Point p = new Point(popupLocation.x, popupLocation.y);
! 		SwingUtilities.convertPointFromScreen(p, layeredPane);
! 		popup.show(p.x, p.y, size.width, size.height);  
! 	      }
! 	    else
! 	      {
! 		// Subtract insets of the top-level container if popup menu's
! 		// top-left corner is inside it.
! 		Insets insets = rootContainer.getInsets();
! 		popup.show(popupLocation.x - insets.left,
! 		           popupLocation.y - insets.top, size.width,
! 		           size.height);
! 	      }
! 	  }
! 	else
! 	  {
! 	    firePopupMenuWillBecomeInvisible();
! 	    popup.hide();
! 	  }
!       }
!   }
  
!   /**
!    * Sets location of the popup menu.
!    *
!    * @param x X coordinate of the popup menu's location
!    * @param y Y coordinate of the popup menu's location
!    */
!   public void setLocation(int x, int y)
!   {
!     if (popupLocation == null)
!       popupLocation = new Point();
  
!     popupLocation.x = x;
!     popupLocation.y = y;
!   }
  
!   /**
!    * Returns popup menu's invoker.
!    *
!    * @return popup menu's invoker
!    */
!   public Component getInvoker()
!   {
!     return invoker;
!   }
  
!   /**
!    * Sets popup menu's invoker.
!    *
!    * @param component The new invoker of this popup menu
!    */
!   public void setInvoker(Component component)
!   {
!     invoker = component;
!   }
  
!   /**
!    * This method displays JPopupMenu on the screen at the specified
!    * location. Note that x and y coordinates given to this method
!    * should be expressed in terms of the popup menus' invoker.
!    *
!    * @param component Invoker for this popup menu
!    * @param x x-coordinate of the popup menu relative to the specified invoker
!    * @param y y-coordiate of the popup menu relative to the specified invoker
!    */
!   public void show(Component component, int x, int y)
!   {
!     setInvoker(component);
!     Point p = new Point(x, y);
!     SwingUtilities.convertPointToScreen(p, component);
!     setLocation(p.x, p.y);
!     setVisible(true);
!   }
  
!   /**
!    * Returns component located at the specified index in the popup menu
!    *
!    * @param index index of the component to return
!    *
!    * @return component located at the specified index in the popup menu
!    *
!    * @deprecated Replaced by getComponent(int)
!    */
!   public Component getComponentAtIndex(int index)
!   {
!     return getComponent(index);
!   }
  
!   /**
!    * Returns index of the specified component in the popup menu
!    *
!    * @param component Component to look for
!    *
!    * @return index of the specified component in the popup menu
!    */
!   public int getComponentIndex(Component component)
!   {
!     Component[] items = getComponents();
  
!     for (int i = 0; i < items.length; i++)
!       {
! 	if (items[i].equals(component))
! 	  return i;
!       }
  
!     return -1;
!   }
  
!   /**
!    * Sets size of the popup
!    *
!    * @param size Dimensions representing new size of the popup menu
!    */
!   public void setPopupSize(Dimension size)
!   {
!     super.setSize(size);
!   }
  
!   /**
!    * Sets size of the popup menu
!    *
!    * @param width width for the new size
!    * @param height height for the new size
!    */
!   public void setPopupSize(int width, int height)
!   {
!     super.setSize(width, height);
!   }
  
!   /**
!    * Selects specified component in this popup menu.
!    *
!    * @param selected component to select
!    */
!   public void setSelected(Component selected)
!   {
!     int index = getComponentIndex(selected);
!     selectionModel.setSelectedIndex(index);
!   }
  
!   /**
!    * Checks if this popup menu paints its border.
!    *
!    * @return true if this popup menu paints its border and false otherwise.
!    */
!   public boolean isBorderPainted()
!   {
!     return borderPainted;
!   }
  
!   /**
!    * Sets if the border of the popup menu should be
!    * painter or not.
!    *
!    * @param painted true if the border should be painted and false otherwise
!    */
!   public void setBorderPainted(boolean painted)
!   {
!     borderPainted = painted;
!   }
  
!   /**
!    * Returns margin for this popup menu.
!    *
!    * @return margin for this popup menu.
!    */
!   public Insets getMargin()
!   {
!     return margin;
!   }
  
!   /**
!    * A string that describes this JPopupMenu. Normally only used
!    * for debugging.
!    *
!    * @return A string describing this JMenuItem
!    */
!   protected String paramString()
!   {
!     StringBuffer sb = new StringBuffer();
!     sb.append(super.paramString());
!     sb.append(",label=");
!     if (getLabel() != null)
!       sb.append(getLabel());
!     sb.append(",lightWeightPopupEnabled=").append(isLightWeightPopupEnabled());
!     sb.append(",margin=");
!     if (getMargin() != null)
!       sb.append(margin);
!     sb.append(",paintBorder=").append(isBorderPainted());
!     return sb.toString();
!   }
  
!   /**
!   * Process mouse events forwarded from MenuSelectionManager. This method 
!   * doesn't do anything. It is here to conform to the MenuElement interface.
!   *
!   * @param event event forwarded from MenuSelectionManager
!   * @param path path to the menu element from which event was generated
!   * @param manager MenuSelectionManager for the current menu hierarchy
!   */
!   public void processMouseEvent(MouseEvent event, MenuElement[] path,
!                                 MenuSelectionManager manager)
!   {
!     // Empty Implementation. This method is needed for the implementation
!     // of MenuElement interface
!   }
  
!   /**
!    * Process key events forwarded from MenuSelectionManager. This method
!    * doesn't do anything. It is here to conform to the MenuElement interface.
!    *
!    * @param event event forwarded from MenuSelectionManager
!    * @param path path to the menu element from which event was generated
!    * @param manager MenuSelectionManager for the current menu hierarchy
!    *
!    */
!   public void processKeyEvent(KeyEvent event, MenuElement[] path,
!                               MenuSelectionManager manager)
!   {
!     // Empty Implementation. This method is needed for the implementation
!     // of MenuElement interface
!   }
  
!   /**
!    * Method of MenuElement Interface. It is invoked when
!    * popupMenu's selection has changed
!    *
!    * @param changed true if this popupMenu is part of current menu
!    * hierarchy and false otherwise.
!    */
!   public void menuSelectionChanged(boolean changed)
!   {
!     if (! changed)
!       setVisible(false);
!   }
  
!   /**
!    * Return subcomonents of this popup menu. This method returns only
!    * components that implement the <code>MenuElement</code> interface.
!    *
!    * @return array of menu items belonging to this popup menu
!    */
!   public MenuElement[] getSubElements()
!   {
!     Component[] items = getComponents();
!     ArrayList subElements = new ArrayList();
  
!     for (int i = 0; i < items.length; i++)
!       if (items[i] instanceof MenuElement)
! 	subElements.add(items[i]);
  
!     return (MenuElement[])
!       subElements.toArray(new MenuElement[subElements.size()]);
!   }
  
!   /**
!    * Method of the MenuElement interface. Returns reference to itself.
!    *
!    * @return Returns reference to itself
!    */
!   public Component getComponent()
!   {
!     return this;
!   }
  
!   /**
!    * Checks if observing mouse event should trigger popup
!    * menu to show on the screen.
!    *
!    * @param event MouseEvent to check
!    *
!    * @return true if the observing mouse event is popup trigger and false otherwise
!    */
!   public boolean isPopupTrigger(MouseEvent event)
!   {
!     return ((PopupMenuUI) getUI()).isPopupTrigger(event);
!   }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJPopupMenu();
  
!     return accessibleContext;
!   }
  
!   /**
!    * This interface is used to display menu items of the JPopupMenu
!    */
!   private interface Popup
!   {
!     /**
!      * Displays container on the screen
!      *
!      * @param x x-coordinate of popup menu's location on the screen
!      * @param y y-coordinate of popup menu's location on the screen
!      * @param width width of the container that is used to display menu
!      * item's for popup menu
!      * @param height height of the container that is used to display menu
!      * item's for popup menu
!      */
!     void show(int x, int y, int width, int height);
  
!     /**
!      * Hides container used to display popup menu item's from the screen
!      */
!     void hide();
!   }
  
!   /**
!    * This class represents Popup menu that uses light weight container
!    * to display its contents.
!    */
!   private class LightWeightPopup extends Container implements Popup
!   {
!     /**
!      * Creates a new LightWeightPopup menu
!      *
!      * @param c Container containing menu items
!      */
!     private Component c;
  
!     public LightWeightPopup(Container c)
!     {
!       this.c = c;
!     }
  
+     /**
+      * Displayes lightweight container with menu items to the screen
+      *
+      * @param x x-coordinate of lightweight container on the screen
+      * @param y y-coordinate of lightweight container on the screen
+      * @param width width of the lightweight container
+      * @param height height of the lightweight container
+      */
+     public void show(int x, int y, int width, int height)
+     {
+       JLayeredPane layeredPane;
+       layeredPane = SwingUtilities.getRootPane(invoker).getLayeredPane();
+       c.setBounds(x, y, width, height);
+       layeredPane.add(c, JLayeredPane.POPUP_LAYER, 0);
+     }
  
!     /**
!      * Hides lightweight container from the screen
!      */
!     public void hide()
!     {
!       // FIXME: Right now the lightweight container is removed from JLayered
!       // pane. It is probably would be better in order to improve performance
!       // to make the container invisible instead of removing it everytime.
!       JLayeredPane layeredPane;
!       layeredPane = SwingUtilities.getRootPane(invoker).getLayeredPane();
!       int index = layeredPane.getIndexOf(c);
!       layeredPane.remove(index);
!     }
!   }
! 
!   /**
!    * MediumWeightPopup is an AWT Panel with JPopupMenu's menu items.
!    * It is used to display JPopupMenu's menu items on the screen
!    */
!   private class MediumWeightPopup extends Panel implements Popup
!   {
!     /**
!      * Creates a new MediumWeightPopup object.
!      *
!      * @param c Container with JPopupMenu's menu items
!      */
!     public MediumWeightPopup(Container c)
!     {
!       this.add(c);
!     }
! 
!     /**
!      * Displays AWT Panel with its components on the screen
!      *
!      * @param x x-coordinate of the upper-left corner of the panel's
!      * @param y y-coordinate of the upper-left corner of the panel's
!      * @param width width of the panel
!      * @param height height of the panel
!      */
!     public void show(int x, int y, int width, int height)
!     {
!       JLayeredPane layeredPane;
!       layeredPane = SwingUtilities.getRootPane(invoker).getLayeredPane();
!       layeredPane.add(this, JLayeredPane.POPUP_LAYER, 0);
!       this.setBounds(x, y, width, height);
!     }
! 
!     /**
!      * Hides This panel from the screen
!      */
!     public void hide()
!     {
!       // FIXME: Right now the lightweight container is removed from JLayered
!       // pane. It is probably would be better in order to improve performance
!       // to make the container invisible instead of removing it everytime.
!       JLayeredPane layeredPane;
!       layeredPane = SwingUtilities.getRootPane(invoker).getLayeredPane();
!       int index = layeredPane.getIndexOf(this);
!       layeredPane.remove(index);
!     }
!   }
! 
!   /**
!    * HeavyWeightPopup is JWindow that is used to display JPopupMenu menu item's
!    * on the screen
!    */
!   private class HeavyWeightPopup extends JWindow implements Popup
!   {
!     /**
!      * Creates a new HeavyWeightPopup object.
!      *
!      * @param c Container containing menu items
!      */
!     public HeavyWeightPopup(Container c)
!     {
!       this.setContentPane(c);
!     }
! 
!     /**
!      * Displays JWindow container JPopupMenu's menu items to the screen
!      *
!      * @param x x-coordinate of JWindow containing menu items
!      * @param y y-coordinate of JWindow containing menu items
!      * @param width width of the JWindow
!      * @param height height of the JWindow
!      */
!     public void show(int x, int y, int width, int height)
!     {
!       this.setBounds(x, y, width, height);
!       this.show();
!     }
!   }
! 
!   /**
!    * This is the separator that can be used in popup menu.
!    */
!   public static class Separator extends JSeparator
!   {
!     public Separator()
!     {
!     }
! 
!     public String getUIClassID()
!     {
!       return "PopupMenuSeparatorUI";
!     }
!   }
! 
!   protected class AccessibleJPopupMenu extends AccessibleJComponent
!   {
!     private static final long serialVersionUID = 7423261328879849768L;
! 
!     protected AccessibleJPopupMenu()
!     {
!     }
! 
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.POPUP_MENU;
!     }
!   }
! 
!   /* This class resizes popup menu and repaints popup menu appropriately if one
!    of item's action has changed */
!   protected class ActionChangeListener implements PropertyChangeListener
!   {
!     public void propertyChange(PropertyChangeEvent evt)
!     {
!       JPopupMenu.this.revalidate();
!       JPopupMenu.this.repaint();
!     }
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JProgressBar.java gcc-4.0.0/libjava/javax/swing/JProgressBar.java
*** gcc-3.4.3/libjava/javax/swing/JProgressBar.java	Fri Jan  9 10:18:47 2004
--- gcc-4.0.0/libjava/javax/swing/JProgressBar.java	Thu Feb 17 07:48:51 2005
***************
*** 1,5 ****
  /* JProgressBar.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JProgressBar.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.Graphics;
! import java.io.IOException;
! import java.io.ObjectOutputStream;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Graphics;
! 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
*************** import javax.swing.event.ChangeListener;
*** 50,488 ****
  import javax.swing.plaf.ProgressBarUI;
  
  /**
!  * JProgressBar
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JProgressBar extends JComponent implements SwingConstants, Accessible
  {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 
! 	/**
! 	 * AccessibleJProgressBar
! 	 */
! 	protected class AccessibleJProgressBar extends AccessibleJComponent 
! 			implements AccessibleValue {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJProgressBar
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJProgressBar(JProgressBar component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJProgressBar()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleStateSet
! 		 * @returns AccessibleStateSet
! 		 */
! 		public AccessibleStateSet getAccessibleStateSet() {
! 			return null; // TODO
! 		} // getAccessibleStateSet()
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.PROGRESS_BAR;
! 		} // getAccessibleRole()
! 
! 		/**
! 		 * getAccessibleValue
! 		 * @returns AccessibleValue
! 		 */
! 		public AccessibleValue getAccessibleValue() {
! 			return null; // TODO
! 		} // getAccessibleValue()
! 
! 		/**
! 		 * getCurrentAccessibleValue
! 		 * @returns Number
! 		 */
! 		public Number getCurrentAccessibleValue() {
! 			return null; // TODO
! 		} // getCurrentAccessibleValue()
! 
! 		/**
! 		 * setCurrentAccessibleValue
! 		 * @param value0 TODO
! 		 * @returns boolean
! 		 */
! 		public boolean setCurrentAccessibleValue(Number value0) {
! 			return false; // TODO
! 		} // setCurrentAccessibleValue()
! 
! 		/**
! 		 * getMinimumAccessibleValue
! 		 * @returns Number
! 		 */
! 		public Number getMinimumAccessibleValue() {
! 			return null; // TODO
! 		} // getMinimumAccessibleValue()
! 
! 		/**
! 		 * getMaximumAccessibleValue
! 		 * @returns Number
! 		 */
! 		public Number getMaximumAccessibleValue() {
! 			return null; // TODO
! 		} // getMaximumAccessibleValue()
! 
! 
! 	} // AccessibleJProgressBar
! 
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "ProgressBarUI";
  
! 	/**
! 	 * orientation
! 	 */
! 	protected int orientation;
  
! 	/**
! 	 * paintBorder
! 	 */
! 	protected boolean paintBorder;
  
! 	/**
! 	 * model
! 	 */
! 	protected BoundedRangeModel model;
  
! 	/**
! 	 * progressString
! 	 */
! 	protected String progressString;
  
! 	/**
! 	 * paintString
! 	 */
! 	protected boolean paintString;
  
! 	/**
! 	 * changeEvent
! 	 */
! 	protected transient ChangeEvent changeEvent;
  
! 	/**
! 	 * changeListener
! 	 */
! 	protected ChangeListener changeListener;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JProgressBar
! 	 */
! 	public JProgressBar() {
! 		// TODO
! 	} // JProgressBar()
  
! 	/**
! 	 * Constructor JProgressBar
! 	 * @param orientation TODO
! 	 */
! 	public JProgressBar(int orientation) {
! 		// TODO
! 	} // JProgressBar()
  
! 	/**
! 	 * Constructor JProgressBar
! 	 * @param minimum TODO
! 	 * @param maximum TODO
! 	 */
! 	public JProgressBar(int minimum, int maximum) {
! 		// TODO
! 	} // JProgressBar()
  
! 	/**
! 	 * Constructor JProgressBar
! 	 * @param minimum TODO
! 	 * @param maximum TODO
! 	 * @param orientation TODO
! 	 */
! 	public JProgressBar(int minimum, int maximum, int orientation) {
! 		// TODO
! 	} // JProgressBar()
  
! 	/**
! 	 * Constructor JProgressBar
! 	 * @param model TODO
! 	 */
! 	public JProgressBar(BoundedRangeModel model) {
! 		// TODO
! 	} // JProgressBar()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * getValue
! 	 * @returns int
! 	 */
! 	public int getValue() {
! 		return 0; // TODO
! 	} // getValue()
  
! 	/**
! 	 * setValue
! 	 * @param value TODO
! 	 */
! 	public void setValue(int value) {
! 		// TODO
! 	} // setValue()
  
! 	/**
! 	 * paintBorder
! 	 * @param graphics TODO
! 	 */
! 	protected void paintBorder(Graphics graphics) {
! 		// TODO
! 	} // paintBorder()
  
! 	/**
! 	 * getOrientation
! 	 * @returns int
! 	 */
! 	public int getOrientation() {
! 		return 0; // TODO
! 	} // getOrientation()
  
! 	/**
! 	 * setOrientation
! 	 * @param orientation TODO
! 	 */
! 	public void setOrientation(int orientation) {
! 		// TODO
! 	} // setOrientation()
  
! 	/**
! 	 * isStringPainted
! 	 * @returns boolean
! 	 */
! 	public boolean isStringPainted() {
! 		return false; // TODO
! 	} // isStringPainted()
  
! 	/**
! 	 * setStringPainted
! 	 * @param painted TODO
! 	 */
! 	public void setStringPainted(boolean painted) {
! 		// TODO
! 	} // setStringPainted()
  
! 	/**
! 	 * getString
! 	 * @returns String
! 	 */
! 	public String getString() {
! 		return null; // TODO
! 	} // getString()
  
! 	/**
! 	 * setString
! 	 * @param string TODO
! 	 */
! 	public void setString(String string) {
! 		// TODO
! 	} // setString()
  
! 	/**
! 	 * getPercentComplete
! 	 * @returns double
! 	 */
! 	public double getPercentComplete() {
! 		return 0.0; // TODO
! 	} // getPercentComplete()
  
! 	/**
! 	 * isBorderPainted
! 	 * @returns boolean
! 	 */
! 	public boolean isBorderPainted() {
! 		return false; // TODO
! 	} // isBorderPainted()
  
! 	/**
! 	 * setBorderPainted
! 	 * @param painted TODO
! 	 */
! 	public void setBorderPainted(boolean painted) {
! 		// TODO
! 	} // setBorderPainted()
  
! 	/**
! 	 * getUI
! 	 * @returns ProgressBarUI
! 	 */
! 	public ProgressBarUI getUI() {
! 		return (ProgressBarUI) ui;
! 	} // getUI()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(ProgressBarUI ui) {
! 		super.setUI(ui);
! 		// TODO
! 	} // setUI()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((ProgressBarUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * createChangeListener
! 	 * @returns ChangeListener
! 	 */
! 	protected ChangeListener createChangeListener() {
! 		return null; // TODO
! 	} // createChangeListener()
  
! 	/**
! 	 * addChangeListener
! 	 * @param listener TODO
! 	 */
! 	public void addChangeListener(ChangeListener listener) {
! 		// TODO
! 	} // addChangeListener()
  
! 	/**
! 	 * removeChangeListener
! 	 * @param listener TODO
! 	 */
! 	public void removeChangeListener(ChangeListener valulistener) {
! 		// TODO
! 	} // removeChangeListener()
  
! 	/**
! 	 * fireStateChanged
! 	 */
! 	protected void fireStateChanged() {
! 		// TODO
! 	} // fireStateChanged()
  
! 	/**
! 	 * getModel
! 	 * @returns BoundedRangeModel
! 	 */
! 	public BoundedRangeModel getModel() {
! 		return null; // TODO
! 	} // getModel()
  
! 	/**
! 	 * setModel
! 	 * @param model TODO
! 	 */
! 	public void setModel(BoundedRangeModel model) {
! 		// TODO
! 	} // setModel()
  
! 	/**
! 	 * getMinimum
! 	 * @returns int
! 	 */
! 	public int getMinimum() {
! 		return 0; // TODO
! 	} // getMinimum()
  
! 	/**
! 	 * setMinimum
! 	 * @param minimum TODO
! 	 */
! 	public void setMinimum(int minimum) {
! 		// TODO
! 	} // setMinimum()
  
! 	/**
! 	 * getMaximum
! 	 * @returns int
! 	 */
! 	public int getMaximum() {
! 		return 0; // TODO
! 	} // getMaximum()
  
! 	/**
! 	 * setMaximum
! 	 * @param maximum TODO
! 	 */
! 	public void setMaximum(int maximum) {
! 		// TODO
! 	} // setMaximum()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJProgressBar(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JProgressBar
--- 50,654 ----
  import javax.swing.plaf.ProgressBarUI;
  
  /**
!  * The ProgressBar is a widget that displays in two modes. In 
!  * determinate mode, it displays fills a percentage of its bar
!  * based on its current value. In indeterminate mode, it creates
!  * box and bounces it between its bounds.
!  *
!  * <p>
!  * JProgressBars have the following properties:
!  * </p>
!  * 
!  * <table>
!  * <tr><th> Property         </th><th> Stored in   </th><th> Bound? </th></tr>
!  * <tr><td> borderPainted    </td><td> progressBar </td><td> yes    </td></tr>
!  * <tr><td> changeListeners  </td><td> progressBar </td><td> no     </td></tr>
!  * <tr><td> indeterminate    </td><td> progressBar </td><td> yes    </td></tr> 
!  * <tr><td> maximum          </td><td> model       </td><td> no     </td></tr>
!  * <tr><td> minimum          </td><td> model       </td><td> no     </td></tr>
!  * <tr><td> model            </td><td> progressBar </td><td> no     </td></tr> 
!  * <tr><td> orientation      </td><td> progressBar </td><td> yes    </td></tr>
!  * <tr><td> percentComplete  </td><td> progressBar </td><td> no     </td></tr>
!  * <tr><td> string           </td><td> progressBar </td><td> yes    </td></tr>
!  * <tr><td> stringPainted    </td><td> progressBar </td><td> yes    </td></tr>
!  * <tr><td> value            </td><td> model       </td><td> no     </td></tr>
!  * </table>
   */
! public class JProgressBar extends JComponent implements SwingConstants,
!                                                         Accessible
  {
+   /**
+    * AccessibleJProgressBar
+    */
+   protected class AccessibleJProgressBar extends AccessibleJComponent
+     implements AccessibleValue
+   {
+     private static final long serialVersionUID = -2938130009392721813L;
+   
+     /**
+      * Constructor AccessibleJProgressBar
+      *
+      * @param component TODO
+      */
+     protected AccessibleJProgressBar()
+     {
+     } 
  
!     /**
!      * getAccessibleStateSet
!      *
!      * @return AccessibleStateSet
!      */
!     public AccessibleStateSet getAccessibleStateSet()
!     {
!       return null; 
!     } 
  
!     /**
!      * getAccessibleRole
!      *
!      * @return AccessibleRole
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.PROGRESS_BAR;
!     } 
  
!     /**
!      * getAccessibleValue
!      *
!      * @return AccessibleValue
!      */
!     public AccessibleValue getAccessibleValue()
!     {
!       return null;
!     } 
  
!     /**
!      * getCurrentAccessibleValue
!      *
!      * @return Number
!      */
!     public Number getCurrentAccessibleValue()
!     {
!       return null;
!     } 
  
!     /**
!      * setCurrentAccessibleValue
!      *
!      * @param value0 TODO
!      *
!      * @return boolean
!      */
!     public boolean setCurrentAccessibleValue(Number value0)
!     {
!       return false; 
!     } 
  
!     /**
!      * getMinimumAccessibleValue
!      *
!      * @return Number
!      */
!     public Number getMinimumAccessibleValue()
!     {
!       return null; 
!     } 
  
!     /**
!      * getMaximumAccessibleValue
!      *
!      * @return Number
!      */
!     public Number getMaximumAccessibleValue()
!     {
!       return null; 
!     } 
!   } 
  
!   private static final long serialVersionUID = 1980046021813598781L;
!   
!   /** Whether the ProgressBar is determinate. */
!   private transient boolean indeterminate = false;
  
!   /** The orientation of the ProgressBar */
!   protected int orientation = HORIZONTAL;
  
!   /** Whether borders should be painted. */
!   protected boolean paintBorder = true;
  
+   /** The model describing this ProgressBar. */
+   protected BoundedRangeModel model;
  
!   /** The string that is displayed by the ProgressBar. */
!   protected String progressString;
  
!   /** Whether the string should be painted. */
!   protected boolean paintString = false;
  
!   /** The static changeEvent passed to all ChangeListeners. */
!   protected transient ChangeEvent changeEvent;
  
!   /** The ChangeListener that listens to the model. */
!   protected ChangeListener changeListener;
  
!   /**
!    * Creates a new horizontally oriented JProgressBar object 
!    * with a minimum of 0 and a maximum of 100.
!    */
!   public JProgressBar()
!   {
!     this(0, 100, HORIZONTAL);
!   }
  
!   /**
!    * Creates a new JProgressBar object with a minimum of 0,
!    * a maximum of 100, and the given orientation.
!    *
!    * @param orientation The orientation of the JProgressBar.
!    */
!   public JProgressBar(int orientation)
!   {
!     this(0, 100, orientation);
!   }
  
+   /**
+    * Creates a new horizontally oriented JProgressBar object
+    * with the given minimum and maximum.
+    *
+    * @param minimum The minimum of the JProgressBar.
+    * @param maximum The maximum of the JProgressBar.
+    */
+   public JProgressBar(int minimum, int maximum)
+   {
+     this(minimum, maximum, HORIZONTAL);
+   }
  
!   /**
!    * Creates a new JProgressBar object with the given minimum,
!    * maximum, and orientation.
!    *
!    * @param minimum The minimum of the JProgressBar.
!    * @param maximum The maximum of the JProgressBar.
!    * @param orientation The orientation of the JProgressBar.
!    */
!   public JProgressBar(int minimum, int maximum, int orientation)
!   {
!     model = new DefaultBoundedRangeModel(minimum, 0, minimum, maximum);
!     if (orientation != HORIZONTAL && orientation != VERTICAL)
!       throw new IllegalArgumentException(orientation + " is not a legal orientation");    
!     this.orientation = orientation;
!     changeListener = createChangeListener();
!     model.addChangeListener(changeListener);
!     updateUI();
!   }
  
!   /**
!    * Creates a new horizontally oriented JProgressBar object 
!    * with the given model.
!    *
!    * @param model The model to be used with the JProgressBar.
!    */
!   public JProgressBar(BoundedRangeModel model)
!   {
!     this.model = model;
!     changeListener = createChangeListener();
!     model.addChangeListener(changeListener);
!     updateUI();    
!   }
  
!   /**
!    * This method returns the current value of the JProgressBar.
!    *
!    * @return The current value of the JProgressBar.
!    */
!   public int getValue()
!   {
!     return model.getValue();
!   }
  
!   /**
!    * This method sets the value of the JProgressBar.
!    *
!    * @param value The value of the JProgressBar.
!    */
!   public void setValue(int value)
!   {
!     model.setValue(value);
!   }
  
!   /**
!    * This method paints the border of the JProgressBar
!    *
!    * @param graphics The graphics object to paint with.
!    */
!   protected void paintBorder(Graphics graphics)
!   {
!     getBorder().paintBorder(this, graphics, 0, 0,
!                             getWidth(),
!                             getHeight());
!   }
  
!   /**
!    * This method returns the orientation of the JProgressBar.
!    *
!    * @return The orientation of the JProgressBar.
!    */
!   public int getOrientation()
!   {
!     return orientation;
!   }
  
!   /**
!    * This method changes the orientation property. The orientation of the 
!    * JProgressBar can be either horizontal or vertical.
!    *
!    * @param orientation The orientation of the JProgressBar.
!    */
!   public void setOrientation(int orientation)
!   {
!     if (orientation != VERTICAL && orientation != HORIZONTAL)
!       throw new IllegalArgumentException("orientation must be one of VERTICAL or HORIZONTAL");
!     if (this.orientation != orientation)
!       {
! 	int oldOrientation = this.orientation;
! 	this.orientation = orientation;
! 	firePropertyChange("orientation", oldOrientation,
! 	                   this.orientation);
!       }
!   }
  
!   /**
!    * This method returns whether the progressString will be painted.
!    *
!    * @return Whether the string is painted.
!    */
!   public boolean isStringPainted()
!   {
!     return paintString;
!   }
  
!   /**
!    * This method changes the stringPainted property.
!    *
!    * @param painted Whether the string is painted.
!    */
!   public void setStringPainted(boolean painted)
!   {
!     if (paintString != painted)
!       {
! 	boolean oldPainted = paintString;
! 	paintString = painted;
! 	firePropertyChange("stringPainted", oldPainted,
! 	                   paintString);
!       }
!   }
  
!   /**
!    * This method returns the string that is painted if the 
!    * stringPainted property is set to true. If there is no
!    * string set, it will return a string containing the 
!    * JProgressBar's value as a percent.
!    *
!    * @return The string that is painted.
!    */
!   public String getString()
!   {
!     if (progressString != null)
!       return progressString;
!     else
!       return (int) (getPercentComplete() * 100) + "%";
!   }
  
!   /**
!    * This method changes the string property. The string
!    * given will be the one painted. If you want to 
!    * revert to the default string given, set the
!    * string to null.
!    *
!    * @param string The string to be painted.
!    */
!   public void setString(String string)
!   {
!     if (((string == null || progressString == null) &&
!         string != progressString) || (string != null &&
! 	! string.equals(progressString)))
!       {
! 	String oldString = progressString;
! 	progressString = string;
! 	firePropertyChange("string", oldString, progressString);
!       }
!   }
  
!   /**
!    * This method returns the percent of the bar
!    * that is "complete". (This is the amount value / (max - min)).
!    *
!    * @return DOCUMENT ME!
!    */
!   public double getPercentComplete()
!   {
!     if (getMaximum() == getMinimum())
!       return 1.0;
!     else
!       return (double) (model.getValue() - model.getMinimum()) / (model
!                                                                  .getMaximum()
!              - model.getMinimum());
!   }
  
!   /**
!    * This method returns whether the border is painted.
!    *
!    * @return Whether the border is painted.
!    */
!   public boolean isBorderPainted()
!   {
!     return paintBorder;
!   }
  
!   /**
!    * This method changes the borderPainted property.
!    *
!    * @param painted Whether the border is painted.
!    */
!   public void setBorderPainted(boolean painted)
!   {
!     if (painted != paintBorder)
!       {
! 	boolean oldPainted = paintBorder;
! 	paintBorder = painted;
! 	firePropertyChange("borderPainted", oldPainted,
! 	                   paintBorder);
!       }
!   }
  
!   /**
!    * This method returns the JProgressBar's UI delegate.
!    *
!    * @return This JProgressBar's UI delegate.
!    */
!   public ProgressBarUI getUI()
!   {
!     return (ProgressBarUI) ui;
!   }
  
!   /**
!    * This method changes the UI property for this JProgressBar.
!    *
!    * @param ui The new UI delegate.
!    */
!   public void setUI(ProgressBarUI ui)
!   {
!     super.setUI(ui);
!   }
  
!   /**
!    * This method reverts the UI delegate for this JProgressBar
!    * to the default for this Look and Feel.
!    */
!   public void updateUI()
!   {
!     setUI((ProgressBarUI) UIManager.getUI(this));
!     invalidate();
!   }
  
!   /**
!    * This method returns the identifier to allow the UIManager
!    * to pick the correct class to act as the UI for
!    * this JProgressBar.
!    *
!    * @return The UIClassID: "ProgressBarUI".
!    */
!   public String getUIClassID()
!   {
!     return "ProgressBarUI";
!   }
  
!   /**
!    * This method returns a ChangeListener that gets registered
!    * model. By default, the ChangeListener, propagates the 
!    * ChangeEvents to the ChangeListeners of the JProgressBar.
!    *
!    * @return A new ChangeListener.
!    */
!   protected ChangeListener createChangeListener()
!   {
!     return new ChangeListener()
!       {
! 	public void stateChanged(ChangeEvent ce)
! 	{
! 	  fireStateChanged();
! 	}
!       };
!   }
  
!   /**
!    * This method adds a ChangeListener to this JProgressBar.
!    *
!    * @param listener The ChangeListener to add to this JProgressBar.
!    */
!   public void addChangeListener(ChangeListener listener)
!   {
!     listenerList.add(ChangeListener.class, listener);
!   }
  
!   /**
!    * This method removes a ChangeListener from this JProgressBar.
!    *
!    * @param listener The ChangeListener to remove from this JProgressBar.
!    */
!   public void removeChangeListener(ChangeListener listener)
!   {
!     listenerList.remove(ChangeListener.class, listener);
!   }
!   
!   /**
!    * This method returns an array of all ChangeListeners listening to this
!    * progress bar.
!    *
!    * @return An array of ChangeListeners listening to this progress bar.
!    */
!   public ChangeListener[] getChangeListeners()
!   {
!     return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
!   }  
  
!   /**
!    * This method is called when the JProgressBar receives a ChangeEvent
!    * from its model. This simply propagates the event (changing the source
!    * to the JProgressBar) to the JProgressBar's listeners.
!    */
!   protected void fireStateChanged()
!   {
!     Object[] changeListeners = listenerList.getListenerList();
!     if (changeEvent == null)
!       changeEvent = new ChangeEvent(this);
!     for (int i = changeListeners.length - 2; i >= 0; i -= 2)
!       {
! 	if (changeListeners[i] == ChangeListener.class)
! 	  ((ChangeListener) changeListeners[i + 1]).stateChanged(changeEvent);
!       }
!   }
  
!   /**
!    * This method returns the model used with this JProgressBar.
!    *
!    * @return The model used with this JProgressBar.
!    */
!   public BoundedRangeModel getModel()
!   {
!     return model;
!   }
  
!   /**
!    * This method changes the model property for this JProgressBar.
!    *
!    * @param model The model to use with this JProgressBar.
!    */
!   public void setModel(BoundedRangeModel model)
!   {
!     if (model != this.model)
!       {
!         this.model.removeChangeListener(changeListener);
! 	this.model = model;
! 	this.model.addChangeListener(changeListener);
! 	fireStateChanged();
!       }
!   }
  
!   /**
!    * This method returns the minimum value of this JProgressBar.
!    *
!    * @return The minimum value of this JProgressBar.
!    */
!   public int getMinimum()
!   {
!     return model.getMinimum();
!   }
  
!   /**
!    * This method sets the minimum value of this JProgressBar.
!    *
!    * @param minimum The minimum value of this JProgressBar.
!    */
!   public void setMinimum(int minimum)
!   {
!     model.setMinimum(minimum);
!   }
  
!   /**
!    * This method returns the maximum value of this JProgressBar.
!    *
!    * @return The maximum value of this JProgressBar.
!    */
!   public int getMaximum()
!   {
!     return model.getMaximum();
!   }
  
!   /**
!    * This method sets the maximum value of this JProgressBar.
!    *
!    * @param maximum The maximum value of this JProgressBar.
!    */
!   public void setMaximum(int maximum)
!   {
!     model.setMaximum(maximum);
!   }
  
!   /**
!    * This method returns a string that can be used to 
!    * describe this JProgressBar. This method is usually
!    * only used for debugging purposes.
!    *
!    * @return A string that describes this JProgressBar.
!    */
!   protected String paramString()
!   {
!     return "JProgressBar";
!   }
  
!   /**
!    * This method changes the indeterminate property. If the
!    * JProgressBar is determinate, it paints a percentage
!    * of the bar described by its value. If it is indeterminate,
!    * it simply bounces a box between the ends of the bar; the 
!    * value of the JProgressBar is ignored.
!    *
!    * @param newValue Whether the JProgressBar is indeterminate.
!    */
!   public void setIndeterminate(boolean newValue)
!   {
!     if (indeterminate != newValue)
!       {
! 	boolean olddeter = indeterminate;
! 	indeterminate = newValue;
! 	firePropertyChange("indeterminate", olddeter,
! 	                   indeterminate);
!       }
!   }
  
+   /**
+    * This method returns whether the JProgressBar is indeterminate.
+    *
+    * @return Whether this JProgressBar is indeterminate.
+    */
+   public boolean isIndeterminate()
+   {
+     return indeterminate;
+   }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJProgressBar();
!     
!     return accessibleContext;
!   } 
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JRadioButton.java gcc-4.0.0/libjava/javax/swing/JRadioButton.java
*** gcc-3.4.3/libjava/javax/swing/JRadioButton.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JRadioButton.java	Thu Feb 17 07:48:52 2005
***************
*** 1,5 ****
  /* JRadioButton.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JRadioButton.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,89 ****
  package javax.swing;
  
  import javax.accessibility.AccessibleContext;
  
  public class JRadioButton extends JToggleButton
  {
!     public JRadioButton()
!     {
! 	this(null, null);
!     }
!     public JRadioButton(Action a)
!     {
! 	this();
! 	setAction(a);
!     }
  
!     public JRadioButton(Icon icon)
!     { 
! 	this(null, icon);
!     }    
!   
!     public JRadioButton(String text)
      {
! 	this(text, null);
      }
!       
!     public JRadioButton(String text, Icon icon)
      {
! 	super(text, icon);
      }
  
      
!     public AccessibleContext getAccessibleContext()
!     {
! 	//Gets the AccessibleContext associated with this JRadioButton. 
! 	return null;
!     }
    
!     public String getUIClassID()
!     {
! 	//Returns a string that specifies the name of the L&F class that renders this component.  
! 	return "JRadioButton";
!     }
    
!     protected  String paramString()
!     {
! 	return "JRadioButton";
!     }
  }
  
  
--- 39,257 ----
  package javax.swing;
  
  import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.swing.plaf.ButtonUI;
  
+ /**
+  * The <code>JRadioButton</code> component provides a visually selectable
+  * button with mutually exclusive behaviour within a <code>ButtonGroup</code>.
+  * A series of radio buttons can be used to provide options to the user,
+  * where the user can only select one of the available options.  The state
+  * of the button is provided by the superclass, <code>JToggleButton</code>.
+  * <code>JRadioButton</code> adds the additional behaviour, that if two
+  * or more radio buttons are grouped together, the selection of one implies
+  * the deselection of the other buttons within the group.
+  * <p>
+  *
+  * Buttons are grouped by adding each instance to a <code>ButtonGroup</code>.
+  * The existence of such a grouping is not reflected visually, so other means
+  * should be used to denote this.  For instance, the grouped buttons can be placed
+  * within the same panel, possibly with an appropriate border to denote
+  * the connection between the components.
+  *
+  * @author Michael Koch  (konqueror@gmx.de)
+  * @author Graydon Hoare  (graydon@redhat.com)
+  * @author Andrew John Hughes  (gnu_andrew@member.fsf.org)
+  * @see JToggleButton
+  * @see ButtonGroup
+  * @since 1.2
+  */
  public class JRadioButton extends JToggleButton
  {
!   /**
!    * Compatible with Sun's JDK.
!    */
!   private static final long serialVersionUID = 7751949583255506856L;
  
!   /**
!    * This class provides accessibility support for the toggle button.
!    */
!   protected class AccessibleJRadioButton
!     extends AccessibleJToggleButton
!   {
! 
!     /**
!      * Constructor for the accessible toggle button.
!      */
!     protected AccessibleJRadioButton()
      {
!         /* Call the superclass to register for events */
!         super();
      }
! 
!     /**
!      * Returns the accessible role for the toggle button.
!      *
!      * @return An instance of <code>AccessibleRole</code>, describing
!      *         the role of the toggle button.
!      */
!     public AccessibleRole getAccessibleRole()
      {
!       return AccessibleRole.RADIO_BUTTON;
      }
  
+   }
+ 
+   /**
+    * Constructs an unselected radio button with no text or icon.
+    */ 
+   public JRadioButton()
+   {
+     this(null, null, false);
+   }
      
!   /**
!    * Constructs a radio button using the labelling, state
!    * and icon specified by the supplied action.
!    *
!    * @param a the action to use to define the properties of the button.
!    */
!   public JRadioButton(Action a)
!   {
!     this();
!     setAction(a);
!   }
! 
!   /**
!    * Constructs an unselected radio button with the supplied icon
!    * and no text.
!    *
!    * @param icon the icon to use.
!    */
!   public JRadioButton(Icon icon)
!   { 
!     this(null, icon, false);
!   }    
    
!   /**
!    * Constructs a radio button with the supplied icon and state.
!    *
!    * @param icon the icon to use.
!    * @param selected if true, the radio button is initially in the
!    *        selected state.  Otherwise, the button is unselected.
!    */
!   public JRadioButton(Icon icon, boolean selected)
!   { 
!     this(null, icon, selected);
!   }    
    
!   /**
!    * Constructs an unselected radio button using the supplied text
!    * and no icon.
!    *
!    * @param text the text to use.
!    */
!   public JRadioButton(String text)
!   {
!     this(text, null, false);
!   }
! 
!   /**
!    * Constructs a radio button with the supplied text and state.
!    *
!    * @param text the text to use.
!    * @param selected if true, the radio button is initially in the
!    *        selected state.  Otherwise, the button is unselected.
!    */
!   public JRadioButton(String text, boolean selected)
!   {
!     this(text, null, selected);
!   }
!       
!   /**
!    * Constructs an unselected radio button with the supplied text
!    * and icon.
!    *
!    * @param text the text to use.
!    * @param icon the icon to use.
!    */
!   public JRadioButton(String text, Icon icon)
!   {
!     this(text, icon, false);
!   }
!   
!   /**
!    * Constructs a radio button with the supplied text, icon and state.
!    *
!    * @param text the text to use.
!    * @param icon the icon to use.
!    * @param selected if true, the radio button is initially in the
!    *        selected state.  Otherwise, the button is unselected.
!    */
!   public JRadioButton(String text, Icon icon, boolean selected)
!   {
!     super(text, icon, selected);
!     borderPainted = false;
!     contentAreaFilled = false;
!   }
!       
!   /**
!    * Returns the accessible context for this <code>JRadioButton</code>,
!    * in the form of an instance of <code>AccessibleJRadioButton</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)
!       {
!         /* Create the context */
! 	accessibleContext = new AccessibleJRadioButton();
!       }
!     return accessibleContext;
!   }
!   
!   /**
!    * Returns a string specifying the name of the Look and Feel UI class
!    * that renders this component.
!    *
!    * @return the Look and Feel UI class for <code>JRadioButton</code>s
!    *         as a <code>String</code>.
!    */  
!   public String getUIClassID()
!   {
!     return "RadioButtonUI";
!   }
!   
!   /**
!    * Returns a string representation of this component for debugging use.
!    * Users should not depend on anything as regards the content or formatting
!    * of this string, except for the fact that the returned string may never be
!    * null (only empty).
!    *
!    * @return the component in <code>String</code> form for debugging.
!    */  
!   protected  String paramString()
!   {
!     return "JRadioButton";
!   }
!   
!   /**
!    * This method resets the radio button's UI delegate to the default UI for
!    * the current look and feel.
!    */
!   public void updateUI()
!   {
!     /* 
!        I can't see any difference between this and the superclass one,
!        but Sun reimplements it... there is no RadioButtonUI class for it
!        to be cast to.
!     */
!     setUI((ButtonUI) UIManager.getUI(this));
!   }
! 
  }
  
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JRadioButtonMenuItem.java gcc-4.0.0/libjava/javax/swing/JRadioButtonMenuItem.java
*** gcc-3.4.3/libjava/javax/swing/JRadioButtonMenuItem.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/JRadioButtonMenuItem.java	Tue Nov 30 23:58:54 2004
*************** this exception to your version of the li
*** 35,224 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.io.IOException;
  import java.io.ObjectOutputStream;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  
  /**
!  * JRadioButtonMenuItem
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
  public class JRadioButtonMenuItem extends JMenuItem implements Accessible
  {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleJRadioButtonMenuItem
! 	 */
! 	protected class AccessibleJRadioButtonMenuItem extends AccessibleJMenuItem {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJRadioButtonMenuItem
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJRadioButtonMenuItem(JRadioButtonMenuItem component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJRadioButtonMenuItem()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.RADIO_BUTTON;
! 		} // getAccessibleRole()
! 
! 
! 	} // AccessibleJRadioButtonMenuItem
! 
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "RadioButtonMenuItemUI";
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JRadioButtonMenuItem
! 	 */
! 	public JRadioButtonMenuItem() {
! 		// TODO
! 	} // JRadioButtonMenuItem()
  
! 	/**
! 	 * Constructor JRadioButtonMenuItem
! 	 * @param icon TODO
! 	 */
! 	public JRadioButtonMenuItem(Icon icon) {
! 		// TODO
! 	} // JRadioButtonMenuItem()
  
! 	/**
! 	 * Constructor JRadioButtonMenuItem
! 	 * @param text TODO
! 	 */
! 	public JRadioButtonMenuItem(String text) {
! 		// TODO
! 	} // JRadioButtonMenuItem()
  
! 	/**
! 	 * Constructor JRadioButtonMenuItem
! 	 * @param action TODO
! 	 */
! 	public JRadioButtonMenuItem(Action action) {
! 		// TODO
! 	} // JRadioButtonMenuItem()
  
! 	/**
! 	 * Constructor JRadioButtonMenuItem
! 	 * @param text TODO
! 	 * @param icon TODO
! 	 */
! 	public JRadioButtonMenuItem(String text, Icon icon) {
! 		// TODO
! 	} // JRadioButtonMenuItem()
  
! 	/**
! 	 * Constructor JRadioButtonMenuItem
! 	 * @param text TODO
! 	 * @param selected TODO
! 	 */
! 	public JRadioButtonMenuItem(String text, boolean selected) {
! 		// TODO
! 	} // JRadioButtonMenuItem()
  
! 	/**
! 	 * Constructor JRadioButtonMenuItem
! 	 * @param icon TODO
! 	 * @param selected TODO
! 	 */
! 	public JRadioButtonMenuItem(Icon icon, boolean selected) {
! 		// TODO
! 	} // JRadioButtonMenuItem()
  
! 	/**
! 	 * Constructor JRadioButtonMenuItem
! 	 * @param text TODO
! 	 * @param icon TODO
! 	 * @param selected TODO
! 	 */
! 	public JRadioButtonMenuItem(String text, Icon icon, boolean selected) {
! 		// TODO
! 	} // JRadioButtonMenuItem()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * requestFocus
! 	 */
! 	public void requestFocus() {
! 		// TODO
! 	} // requestFocus()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJRadioButtonMenuItem(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JRadioButtonMenuItem
--- 35,212 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.io.IOException;
  import java.io.ObjectOutputStream;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  
  /**
!  * This class represents JRadioButtonMenuItem. Its behaviour is very similar
!  * to JRadioButton. Just like JRadioButton, user can check and uncheck this
!  * menu item by clicking on it. JRadioButtonMenuItem uses ToggleButtonModel
!  * to keep track of its selection. If the JRadioButtonMenuItem is included in
!  * the button group, then only one JRadioButtonMenuItem can be selected at
!  * one time.
   */
  public class JRadioButtonMenuItem extends JMenuItem implements Accessible
  {
+   private static final long serialVersionUID = 8482658191548521743L;
  
!   /** name for the UI delegate for this radio button menu item. */
!   private static final String uiClassID = "RadioButtonMenuItemUI";
  
!   /**
!    * Creates a new JRadioButtonMenuItem object.
!    */
!   public JRadioButtonMenuItem()
!   {
!     this(null, null);
!   }
  
!   /**
!    * Creates a new JRadioButtonMenuItem with specified icon
!    *
!    * @param icon Icon to be used for this menu item
!    */
!   public JRadioButtonMenuItem(Icon icon)
!   {
!     this(null, icon);
!   }
  
!   /**
!    * Creates a new JRadioButtonMenuItem with specified label
!    *
!    * @param text Label for this menu item
!    */
!   public JRadioButtonMenuItem(String text)
!   {
!     this(text, null);
!   }
  
!   /**
!    * Creates a new JRadioButtonMenuItem using specified action
!    *
!    * @param action Action for this menu item
!    */
!   public JRadioButtonMenuItem(Action action)
!   {
!     this();
!     setAction(action);
!   }
  
!   /**
!    * Creates a new JRadioButtonMenuItem with specified label and icon
!    *
!    * @param text Label for this menu item
!    * @param icon Icon for this menu item
!    */
!   public JRadioButtonMenuItem(String text, Icon icon)
!   {
!     this(text, icon, false);
!   }
  
!   /**
!    * Creates a new JRadioButtonMenuItem with specified label
!    * and marked selected if 'selected' is true.
!    *
!    * @param text Text for this menu item
!    * @param selected Selected state of this menu item
!    */
!   public JRadioButtonMenuItem(String text, boolean selected)
!   {
!     this(text, null, selected);
!   }
  
!   /**
!    * Creates a new JRadioButtonMenuItem with specified icon
!    * and given selected state
!    *
!    * @param icon Icon for this menu item
!    * @param selected Selected state for this menu item
!    */
!   public JRadioButtonMenuItem(Icon icon, boolean selected)
!   {
!     this(null, icon, selected);
!   }
  
!   /**
!    * Creates a new JRadioButtonMenuItem with specified label,
!    * icon and selected state.
!    *
!    * @param text Label for this menu item
!    * @param icon Icon to be use for this menu item
!    * @param selected selected state of this menu item
!    */
!   public JRadioButtonMenuItem(String text, Icon icon, boolean selected)
!   {
!     super(text, icon);
!     setModel(new JToggleButton.ToggleButtonModel());
!     model.setSelected(selected);
!   }
  
+   private void writeObject(ObjectOutputStream stream) throws IOException
+   {
+   }
  
!   /**
!    * This method returns a name to identify which look and feel class will be
!    * the UI delegate for the menuItem.
!    *
!    * @return The Look and Feel classID. "JRadioButtonMenuItemUI"
!    */
!   public String getUIClassID()
!   {
!     return uiClassID;
!   }
  
!   /**
!    * This method overrides JComponent.requestFocus with an empty
!    * implementation, since JRadioButtonMenuItems should not
!    * receve focus in general.
!    */
!   public void requestFocus()
!   {
!     //  Should do nothing here
!   }
  
!   /**
!    * A string that describes this JRadioButtonMenuItem. Normally only used
!    * for debugging.
!    *
!    * @return A string describing this JRadioButtonMenuItem
!    */
!   protected String paramString()
!   {
!     return "JRadioButtonMenuItem";
!   }
  
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJRadioButtonMenuItem();
  
!     return accessibleContext;
!   }
  
!   protected class AccessibleJRadioButtonMenuItem extends AccessibleJMenuItem
!   {
!     private static final long serialVersionUID = 4381471510145292179L;
  
+     /**
+      * Creates a new AccessibleJRadioButtonMenuItem object.
+      */
+     protected AccessibleJRadioButtonMenuItem()
+     {
+     }
  
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.RADIO_BUTTON;
!     }
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JRootPane.java gcc-4.0.0/libjava/javax/swing/JRootPane.java
*** gcc-3.4.3/libjava/javax/swing/JRootPane.java	Sat Nov 22 00:03:35 2003
--- gcc-4.0.0/libjava/javax/swing/JRootPane.java	Wed Feb 16 20:02:33 2005
***************
*** 1,5 ****
  /* JRootPane.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JRootPane.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Dimension;
*** 45,212 ****
  import java.awt.LayoutManager;
  import java.awt.LayoutManager2;
  import java.io.Serializable;
! import javax.accessibility.Accessible;
! import javax.accessibility.AccessibleComponent;
  
  /**
!  * This class is where JComponents are added to.
!  * Unlike awt where you could just say frame.add(),
!  * with swing you need to say frame.getRootPane() 
!  * (which delivers an instance of this class)
!  * and add your components to that.
!  *
!  * It is implemented by several 'layers' (pane() should be read as plane()) 
!  * each on top of the others
!  * where you can add components to. 
   * (getContentPane(), getGlassPane(), getLayeredPane())
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public class JRootPane extends JComponent
  {
!     //  The class used to obtain the accessible role for this object.
!     static protected class AccessibleJRootPane
      {
      }
!   
!     //A custom layout manager  
!     static protected class RootLayout extends BorderLayout
      {
!       public Dimension preferredLayoutSize ( Container c )
! 	{	    
! 	  Dimension p = super.preferredLayoutSize(c);
! 	  System.out.println("              PREF-SIZE from RootLayout = " + p);
! 	  return p;
! 	}        
      }
!   
!     /***********************************************************/
! 
!   
!     //The glass pane that overlays the menu bar and content pane, so it can intercept mouse movements and such.
!     protected  Component glassPane;
!   
!     //The layered pane that manages the menu bar and content pane.
!     protected  JLayeredPane layeredPane;
!   
!     // The menu bar.
!     protected  JMenuBar menuBar;
!   
!     protected Container contentPane;
! 
!     /********************************************************/
  
!     public String getUIClassID()
!     {	return "JPanel";    }
  
!     
!     void setJMenuBar(JMenuBar m)
!     {  menuBar = m; }
  
!     JMenuBar getJMenuBar()
!     {  return menuBar; }
!     
  
!     public Container getContentPane()
      {
- 	if (contentPane == null)
- 	    {
- 		setContentPane(createContentPane());
- 	    }
- 	return contentPane;
      }
  
!     public void setContentPane(Container p)
      {
! 	contentPane = p;    
! 	getLayeredPane().add(contentPane, JLayeredPane.FRAME_CONTENT_LAYER);
      }
  
!     protected void addImpl(Component comp,
! 			  Object constraints,
! 			  int index)
      {
! 	super.addImpl(comp, constraints, index);
! 	//System.out.println("don't do that !");
!     } 
  
!     public Component getGlassPane() 
      {
- 	if (glassPane == null)
- 	    setGlassPane(createGlassPane());
- 	return glassPane;    
      }
  
!     public void setGlassPane(Component f)
      {
! 	if (glassPane != null)
! 	    remove(glassPane);
  
! 	glassPane = f; 
  
! 	glassPane.setVisible(false);
! 	add(glassPane, 0);
      }
  
!     public JLayeredPane getLayeredPane() 
      {
! 	if (layeredPane == null)
! 	    setLayeredPane(createLayeredPane());
! 	return layeredPane;    
      }
!     public void setLayeredPane(JLayeredPane f)
      {
! 	if (layeredPane != null)
! 	    remove(layeredPane);
! 	
! 	layeredPane = f; 
! 	add(f, -1);
      }
-     
- 
-     /********************************************************/
  
!     JRootPane()
      {
! 	setLayout(createRootLayout());
! 	
! 	getGlassPane();
! 	getLayeredPane();
! 	getContentPane();
! 
! 	setDoubleBuffered(true);
! 	updateUI();
!     }
  
!     protected LayoutManager createRootLayout() {
!         return new RootLayout();
!     } 
  
!     JComponent createContentPane()
!     {
! 	JPanel p = new JPanel();
! 	p.setName(this.getName()+".contentPane");
! 	p.setLayout(new BorderLayout());
! 	//	p.setVisible(true);
  
! 	System.out.println("Created ContentPane: " + p);
! 	return p;
      }
  
!     Component createGlassPane()
      {
- 	JPanel p = new JPanel();
- 	p.setName(this.getName()+".glassPane");
- 	p.setLayout(new BorderLayout());
- 	p.setVisible(false);
- 	
- 	System.out.println("created the glasspane: "+p);
- 	return p;
      }
  
!     JLayeredPane createLayeredPane()
!     {
! 	JLayeredPane l = new JLayeredPane();
! 	return l;
!     }    
  }
--- 45,625 ----
  import java.awt.LayoutManager;
  import java.awt.LayoutManager2;
  import java.io.Serializable;
! 
! import javax.accessibility.AccessibleRole;
! import javax.swing.plaf.RootPaneUI;
  
  /**
!  * This class is where JComponents are added to. Unlike awt where you could
!  * just say frame.add(), with swing you need to say frame.getRootPane()
!  * (which delivers an instance of this class) and add your components to
!  * that. It is implemented by several 'layers' (pane() should be read as
!  * plane()) each on top of the others where you can add components to.
   * (getContentPane(), getGlassPane(), getLayeredPane())
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public class JRootPane extends JComponent
  {
!   //  The class used to obtain the accessible role for this object.
!   protected static class AccessibleJRootPane
!   {
!     /**
!      * For compatability with Sun's JDK
!      */
!     private static final long serialVersionUID = 1082432482784468088L;
! 
!     /**
!      * Creates a new <code>AccessibleJRootPane</code> object.
!      */
!     protected AccessibleJRootPane()
      {
      }
! 
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public AccessibleRole getAccessibleRole()
      {
!       return AccessibleRole.ROOT_PANE;
      }
!   }
  
!   // Custom Layout Manager for JRootPane. It positions contentPane and 
!   // menuBar withing its layeredPane.
!   protected class RootLayout implements LayoutManager2, Serializable
!   {
!     /** DOCUMENT ME! */
!     private static final long serialVersionUID = -4100116998559815027L;
  
!     /**
!      * Creates a new <code>RootLayout</code> object.
!      */
!     protected RootLayout()
!     {
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param comp DOCUMENT ME!
!      * @param constraints DOCUMENT ME!
!      */
!     public void addLayoutComponent(Component comp, Object constraints)
!     {
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param name DOCUMENT ME!
!      * @param comp DOCUMENT ME!
!      */
!     public void addLayoutComponent(String name, Component comp)
      {
      }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param target DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public float getLayoutAlignmentX(Container target)
      {
!       return target.getAlignmentX();
      }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param target DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public float getLayoutAlignmentY(Container target)
      {
!       return target.getAlignmentY();
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param target DOCUMENT ME!
!      */
!     public void invalidateLayout(Container target)
      {
      }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param c DOCUMENT ME!
!      */
!     public void layoutContainer(Container c)
      {
!       Dimension menuBarSize;
!       Dimension containerSize = c.getSize(null);
!       Dimension contentPaneSize = contentPane.getPreferredSize();
  
!       /*
!        if size of top-level window wasn't set then just set
!        contentPane and menuBar to its preferred sizes.
!        Otherwise, if the size of top-level window was specified then
!        set menuBar to its preferred size and make content pane
!        to fit into the remaining space
  
! 
!        +-------------------------------+
!        |  JLayeredPane                 |
!        |  +--------------------------+ |
!        |  | menuBar                  | |
!        |  +--------------------------+ |
!        |  +--------------------------+ |
!        |  |contentPane               | |
!        |  |                          | |
!        |  |                          | |
!        |  |                          | |
!        |  +--------------------------+ |
!        +-------------------------------+
! 
!       */
!       if (containerSize.width == 0 && containerSize.height == 0)
!         {
! 	  if (menuBar != null)
! 	    {
! 	      int maxWidth;
! 	      menuBarSize = menuBar.getPreferredSize();
! 	      maxWidth = Math.max(menuBarSize.width, contentPaneSize.width);
! 	      menuBar.setBounds(0, 0, maxWidth, menuBarSize.height);
! 	      glassPane.setBounds(0, menuBarSize.height, maxWidth,
! 	                          contentPaneSize.height);
! 	      contentPane.setBounds(0, menuBarSize.height, maxWidth,
! 	                            contentPaneSize.height);
! 	      layeredPane.setSize(maxWidth,
! 	                          menuBarSize.height + contentPaneSize.height);
! 	    }
! 	  else
! 	    {
! 	      glassPane.setBounds(0, 0, contentPaneSize.width,
! 	                          contentPaneSize.height);
! 	      contentPane.setBounds(0, 0, contentPaneSize.width,
! 	                            contentPaneSize.height);
! 	      layeredPane.setSize(contentPaneSize.width, contentPaneSize.height);
! 	    }
!         }
!       else
!         {
! 	  if (menuBar != null)
! 	    {
! 	      menuBarSize = menuBar.getPreferredSize();
! 	      if (menuBarSize.height > containerSize.height)
! 		menuBarSize.height = containerSize.height;
! 	      menuBar.setBounds(0, 0, containerSize.width, menuBarSize.height);
! 	      int remainingHeight = containerSize.height - menuBarSize.height;
! 	      glassPane.setBounds(0, menuBarSize.height, containerSize.width,
! 	                          containerSize.height - menuBarSize.height);
! 	      contentPane.setBounds(0, menuBarSize.height,
! 	                            containerSize.width,
! 	                            (containerSize.height - menuBarSize.height));
! 	    }
! 	  else
! 	    {
! 	      glassPane.setBounds(0, 0, containerSize.width,
! 	                          containerSize.height);
! 	      contentPane.setBounds(0, 0, containerSize.width,
! 	                            containerSize.height);
! 	    }
! 
! 	  layeredPane.setSize(containerSize.width, containerSize.height);
!         }
      }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param target DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public Dimension maximumLayoutSize(Container target)
      {
!       return preferredLayoutSize(target);
      }
! 
!     /**
!      * DOCUMENT ME!
!      *
!      * @param target DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public Dimension minimumLayoutSize(Container target)
      {
!       return preferredLayoutSize(target);
      }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param c DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public Dimension preferredLayoutSize(Container c)
      {
!       Dimension menuBarSize;
!       Dimension prefSize;
  
!       Dimension containerSize = c.getSize();
!       Dimension contentPaneSize = contentPane.getPreferredSize();
  
!       if (containerSize.width == 0 && containerSize.height == 0)
!         {
! 	  if (menuBar != null)
! 	    {
! 	      int maxWidth;
! 	      menuBarSize = menuBar.getPreferredSize();
! 	      maxWidth = Math.max(menuBarSize.width, contentPaneSize.width);
! 	      prefSize = new Dimension(maxWidth,
! 	                               contentPaneSize.height
! 	                               + menuBarSize.height);
! 	    }
! 	  else
! 	    prefSize = contentPaneSize;
!         }
!       else
! 	prefSize = c.getSize();
  
!       return prefSize;
      }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param comp DOCUMENT ME!
!      */
!     public void removeLayoutComponent(Component comp)
      {
      }
+   }
  
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = 8690748000348575668L;
! 
!   public static final int NONE = 0;
!   public static final int FRAME = 1;
!   public static final int PLAIN_DIALOG = 2;
!   public static final int INFORMATION_DIALOG = 3;
!   public static final int ERROR_DIALOG = 4;
!   public static final int COLOR_CHOOSER_DIALOG = 5;
!   public static final int FILE_CHOOSER_DIALOG = 6;
!   public static final int QUESTION_DIALOG = 7;
!   public static final int WARNING_DIALOG = 8;
! 	  
!   /** DOCUMENT ME! */
!   protected Component glassPane;
! 
!   /** DOCUMENT ME! */
!   protected JLayeredPane layeredPane;
! 
!   /** DOCUMENT ME! */
!   protected JMenuBar menuBar;
! 
!   /** DOCUMENT ME! */
!   protected Container contentPane;
! 
!   protected JButton defaultButton;
! 
!   /**
!    * @since 1.4
!    */
!   private int windowDecorationStyle = NONE;
!   
!   /**
!    * DOCUMENT ME!
!    *
!    * @param m DOCUMENT ME!
!    */
!   public void setJMenuBar(JMenuBar m)
!   {
!     JLayeredPane jlPane = getLayeredPane();
!     if (menuBar != null)
!       jlPane.remove(menuBar);
!     menuBar = m;
!     if (menuBar != null)
!       jlPane.add(menuBar, JLayeredPane.FRAME_CONTENT_LAYER);
!   }
! 
!   /**
!    * @deprecated Replaced by <code>setJMenuBar()</code>
!    */
!   public void setMenuBar(JMenuBar m)
!   {
!     setJMenuBar(m);
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public JMenuBar getJMenuBar()
!   {
!     return menuBar;
!   }
! 
!   /**
!    * @deprecated Replaced by <code>getJMenuBar()</code>
!    */
!   public JMenuBar getMenuBar()
!   {
!     return getJMenuBar();
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public boolean isValidateRoot()
!   {
!     return true;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public Container getContentPane()
!   {
!     if (contentPane == null)
!       setContentPane(createContentPane());
!     return contentPane;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @param p DOCUMENT ME!
!    */
!   public void setContentPane(Container p)
!   {
!     contentPane = p;
!     getLayeredPane().add(contentPane, JLayeredPane.FRAME_CONTENT_LAYER);
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @param comp DOCUMENT ME!
!    * @param constraints DOCUMENT ME!
!    * @param index DOCUMENT ME!
!    */
!   protected void addImpl(Component comp, Object constraints, int index)
!   {
!     super.addImpl(comp, constraints, index);
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public Component getGlassPane()
!   {
!     if (glassPane == null)
!       setGlassPane(createGlassPane());
!     return glassPane;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @param f DOCUMENT ME!
!    */
!   public void setGlassPane(Component f)
!   {
!     if (glassPane != null)
!       remove(glassPane);
! 
!     glassPane = f;
! 
!     glassPane.setVisible(false);
!     add(glassPane, 0);
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public JLayeredPane getLayeredPane()
!   {
!     if (layeredPane == null)
!       setLayeredPane(createLayeredPane());
!     return layeredPane;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @param f DOCUMENT ME!
!    */
!   public void setLayeredPane(JLayeredPane f)
!   {
!     if (layeredPane != null)
!       remove(layeredPane);
! 
!     layeredPane = f;
!     add(f, -1);
!   }
! 
!   /**
!    * Creates a new <code>JRootPane</code> object.
!    */
!   public JRootPane()
!   {
!     setLayout(createRootLayout());
!     getGlassPane();
!     getLayeredPane();
!     getContentPane();
!     setDoubleBuffered(true);
!     updateUI();
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   protected LayoutManager createRootLayout()
!   {
!     return new RootLayout();
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   protected Container createContentPane()
!   {
!     JPanel p = new JPanel();
!     p.setName(this.getName() + ".contentPane");
!     p.setLayout(new BorderLayout());
!     return p;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   protected Component createGlassPane()
!   {
!     JPanel p = new JPanel();
!     p.setName(this.getName() + ".glassPane");
!     p.setLayout(new BorderLayout());
!     p.setVisible(false);
!     p.setOpaque(false);
!     return p;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   protected JLayeredPane createLayeredPane()
!   {
!     JLayeredPane l = new JLayeredPane();
!     l.setLayout(null);
!     return l;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public RootPaneUI getUI()
!   {
!     return (RootPaneUI) ui;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @param ui DOCUMENT ME!
!    */
!   public void setUI(RootPaneUI ui)
!   {
!     super.setUI(ui);
!   }
! 
!   /**
!    * DOCUMENT ME!
!    */
!   public void updateUI()
!   {
!     setUI((RootPaneUI) UIManager.getUI(this));
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public String getUIClassID()
!   {
!     return "RootPaneUI";
!   }
! 
!   public JButton getDefaultButton()
!   {
!     return defaultButton;
!   }
!   
!   public void setDefaultButton(JButton newButton)
!   {
!     if (defaultButton == newButton)
!       return;
!     
!     JButton oldButton = defaultButton;
!     defaultButton = newButton;
!     firePropertyChange("defaultButton", oldButton, newButton);
!   }
! 
!   /**
!    * @since 1.4
!    */
!   public int getWindowDecorationStyle()
!   {
!     return windowDecorationStyle;
!   }
! 
!   /**
!    * @since 1.4
!    */
!   public void setWindowDecorationStyle(int style)
!   {
!     if (style != NONE
! 	&& style != FRAME
! 	&& style != INFORMATION_DIALOG
! 	&& style != ERROR_DIALOG
! 	&& style != COLOR_CHOOSER_DIALOG
! 	&& style != FILE_CHOOSER_DIALOG
! 	&& style != QUESTION_DIALOG
! 	&& style != WARNING_DIALOG)
!       throw new IllegalArgumentException("invalid style");
!     
!     int oldStyle = windowDecorationStyle;
!     windowDecorationStyle = style;
!     firePropertyChange("windowDecorationStyle", oldStyle, style);
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JScrollBar.java gcc-4.0.0/libjava/javax/swing/JScrollBar.java
*** gcc-3.4.3/libjava/javax/swing/JScrollBar.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JScrollBar.java	Wed Feb 16 20:02:33 2005
***************
*** 1,5 ****
! /* JScrollBar.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JScrollBar.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,47 ****
  package javax.swing;
  
  import java.awt.Adjustable;
  import java.awt.event.AdjustmentListener;
  import javax.accessibility.Accessible;
  
! public class JScrollBar extends JComponent
  {
  }
--- 39,647 ----
  package javax.swing;
  
  import java.awt.Adjustable;
+ import java.awt.Dimension;
+ import java.awt.event.AdjustmentEvent;
  import java.awt.event.AdjustmentListener;
+ 
  import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleStateSet;
+ import javax.accessibility.AccessibleValue;
+ import javax.swing.plaf.ScrollBarUI;
  
! /**
!  * The JScrollBar. Two buttons control how the values that the 
!  * scroll bar can take. You can also drag the thumb or click the track
!  * to move the scroll bar. Typically, the JScrollBar is used with
!  * other components to translate the value of the bar to the viewable
!  * contents of the other components.
!  */
! public class JScrollBar extends JComponent implements Adjustable, Accessible
  {
+   /**
+    * DOCUMENT ME!
+    */
+   protected class AccessibleJScrollBar extends JComponent.AccessibleJComponent
+     implements AccessibleValue
+   {
+     private static final long serialVersionUID = -7758162392045586663L;
+     
+     /**
+      * Creates a new AccessibleJSlider object.
+      *
+      * @param value0 DOCUMENT ME!
+      */
+     protected AccessibleJScrollBar()
+     {
+       super();
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public AccessibleStateSet getAccessibleStateSet()
+     {
+       return null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public AccessibleValue getAccessibleValue()
+     {
+       return null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Number getCurrentAccessibleValue()
+     {
+       return null;
+     }
+ 
+     /**
+      * setCurrentAccessibleValue
+      *
+      * @param value0 TODO
+      *
+      * @return boolean
+      */
+     public boolean setCurrentAccessibleValue(Number value0)
+     {
+       return false;
+     }
+ 
+     /**
+      * getMinimumAccessibleValue
+      *
+      * @return Number
+      */
+     public Number getMinimumAccessibleValue()
+     {
+       return null;
+     }
+ 
+     /**
+      * getMaximumAccessibleValue
+      *
+      * @return Number
+      */
+     public Number getMaximumAccessibleValue()
+     {
+       return null;
+     }
+   }
+ 
+   private static final long serialVersionUID = -8195169869225066566L;
+   
+   /** How much the thumb moves when moving in a block. */
+   protected int blockIncrement = 10;
+ 
+   /** The model that holds the scroll bar's data. */
+   protected BoundedRangeModel model;
+ 
+   /** The orientation of the scroll bar. */
+   protected int orientation = SwingConstants.VERTICAL;
+ 
+   /** How much the thumb moves when moving in a unit. */
+   protected int unitIncrement = 1;
+ 
+   /** 
+    * Creates a new horizontal JScrollBar object with a minimum
+    * of 0, a maxmium of 100, a value of 0 and an extent of 10.
+    */
+   public JScrollBar()
+   {
+     this(SwingConstants.VERTICAL, 0, 10, 0, 100);
+   }
+ 
+   /**
+    * Creates a new JScrollBar object with a minimum of 0, a 
+    * maximum of 100, a value of 0, an extent of 10 and the given
+    * orientation.
+    *
+    * @param orientation The orientation of the JScrollBar.
+    */
+   public JScrollBar(int orientation)
+   {
+     this(orientation, 0, 10, 0, 100);
+   }
+ 
+   /**
+    * Creates a new JScrollBar object with the given orientation, 
+    * value, min, max, and extent.
+    *
+    * @param orientation The orientation to use.
+    * @param value The value to use.
+    * @param extent The extent to use.
+    * @param min The minimum value of the scrollbar.
+    * @param max The maximum value of the scrollbar.
+    */
+   public JScrollBar(int orientation, int value, int extent, int min, int max)
+   {
+     model = new DefaultBoundedRangeModel(value, extent, min, max);
+     if (orientation != SwingConstants.HORIZONTAL
+         && orientation != SwingConstants.VERTICAL)
+       throw new IllegalArgumentException(orientation
+                                          + " is not a legal orientation");
+     this.orientation = orientation;
+     updateUI();
+   }
+ 
+   /**
+    * This method sets the UI of this scrollbar to
+    * the given UI.
+    *
+    * @param ui The UI to use with this scrollbar.
+    */
+   public void setUI(ScrollBarUI ui)
+   {
+     super.setUI(ui);
+   }
+ 
+   /**
+    * This method returns the UI that is being used
+    * with this scrollbar.
+    *
+    * @return The scrollbar's current UI.
+    */
+   public ScrollBarUI getUI()
+   {
+     return (ScrollBarUI) ui;
+   }
+ 
+   /**
+    * This method changes the UI to be the
+    * default for the current look and feel.
+    */
+   public void updateUI()
+   {
+     setUI((ScrollBarUI) UIManager.getUI(this));
+     invalidate();
+     repaint();
+   }
+ 
+   /**
+    * This method returns an identifier to 
+    * choose the correct UI delegate for the
+    * scrollbar.
+    *
+    * @return The identifer to choose the UI delegate; "ScrollBarUI"
+    */
+   public String getUIClassID()
+   {
+     return "ScrollBarUI";
+   }
+ 
+   /**
+    * This method returns the orientation of the scrollbar.
+    *
+    * @return The orientation of the scrollbar.
+    */
+   public int getOrientation()
+   {
+     return orientation;
+   }
+ 
+   /**
+    * This method sets the orientation of the scrollbar.
+    *
+    * @param orientation The orientation of the scrollbar.
+    */
+   public void setOrientation(int orientation)
+   {
+     if (orientation != SwingConstants.HORIZONTAL
+         && orientation != SwingConstants.VERTICAL)
+       throw new IllegalArgumentException("orientation must be one of HORIZONTAL or VERTICAL");
+     if (orientation != this.orientation)
+       {
+ 	int oldOrientation = this.orientation;
+ 	this.orientation = orientation;
+ 	firePropertyChange("orientation", oldOrientation,
+ 	                   this.orientation);
+       }
+   }
+ 
+   /**
+    * This method returns the model being used with 
+    * the scrollbar.
+    *
+    * @return The scrollbar's model.
+    */
+   public BoundedRangeModel getModel()
+   {
+     return model;
+   }
+ 
+   /**
+    * This method sets the model to use with
+    * the scrollbar.
+    *
+    * @param newModel The new model to use with the scrollbar.
+    */
+   public void setModel(BoundedRangeModel newModel)
+   {
+     if (model != newModel)
+       {
+ 	BoundedRangeModel oldModel = model;
+ 	model = newModel;
+ 	firePropertyChange("model", oldModel, model);
+       }
+   }
+ 
+   /**
+    * This method returns how much the scrollbar's value
+    * should change for a unit increment depending on the 
+    * given direction.
+    *
+    * @param direction The direction to scroll in.
+    *
+    * @return The amount the scrollbar's value will change given the direction.
+    */
+   public int getUnitIncrement(int direction)
+   {
+     return direction * unitIncrement;
+   }
+ 
+   /**
+    * This method sets the unitIncrement property.
+    *
+    * @param unitIncrement The new unitIncrement.
+    */
+   public void setUnitIncrement(int unitIncrement)
+   {
+     if (unitIncrement != this.unitIncrement)
+       {
+ 	int oldInc = this.unitIncrement;
+ 	this.unitIncrement = unitIncrement;
+ 	firePropertyChange("unitIncrement", oldInc,
+ 	                   this.unitIncrement);
+       }
+   }
+ 
+   /**
+    * The method returns how much the scrollbar's value
+    * should change for a block increment depending on
+    * the given direction.
+    *
+    * @param direction The direction to scroll in.
+    *
+    * @return The amount the scrollbar's value will change given the direction.
+    */
+   public int getBlockIncrement(int direction)
+   {
+     return direction * blockIncrement;
+   }
+ 
+   /**
+    * This method sets the blockIncrement property.
+    *
+    * @param blockIncrement The new blockIncrement.
+    */
+   public void setBlockIncrement(int blockIncrement)
+   {
+     if (blockIncrement != this.blockIncrement)
+       {
+ 	int oldInc = this.blockIncrement;
+ 	this.blockIncrement = blockIncrement;
+ 	firePropertyChange("blockIncrement", oldInc,
+ 	                   this.blockIncrement);
+       }
+   }
+ 
+   /**
+    * This method returns the unitIncrement.
+    *
+    * @return The unitIncrement.
+    */
+   public int getUnitIncrement()
+   {
+     return unitIncrement;
+   }
+ 
+   /**
+    * This method returns the blockIncrement.
+    *
+    * @return The blockIncrement.
+    */
+   public int getBlockIncrement()
+   {
+     return blockIncrement;
+   }
+ 
+   /**
+    * This method returns the value of the scrollbar.
+    *
+    * @return The value of the scrollbar.
+    */
+   public int getValue()
+   {
+     return model.getValue();
+   }
+ 
+   /**
+    * This method changes the value of the scrollbar.
+    *
+    * @param value The new value of the scrollbar.
+    */
+   public void setValue(int value)
+   {
+     if (isEnabled() && value != getValue())
+     {
+       model.setValue(value);
+       fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
+                                  AdjustmentEvent.TRACK, value);
+     }
+   }
+ 
+   /**
+    * This method returns the visible amount (AKA extent). 
+    * The visible amount can be used by UI delegates to 
+    * determine the size of the thumb.
+    *
+    * @return The visible amount (AKA extent).
+    */
+   public int getVisibleAmount()
+   {
+     return model.getExtent();
+   }
+ 
+   /**
+    * This method sets the visible amount (AKA extent).
+    *
+    * @param extent The visible amount (AKA extent).
+    */
+   public void setVisibleAmount(int extent)
+   {
+     if (extent != getVisibleAmount())
+     {
+       model.setExtent(extent);
+       fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
+                                  AdjustmentEvent.TRACK, extent);
+     }
+   }
+ 
+   /**
+    * This method returns the minimum value of the scrollbar.
+    *
+    * @return The minimum value of the scrollbar.
+    */
+   public int getMinimum()
+   {
+     return model.getMinimum();
+   }
+ 
+   /**
+    * This method sets the minimum value of the scrollbar.
+    *
+    * @param minimum The minimum value of the scrollbar.
+    */
+   public void setMinimum(int minimum)
+   {
+     if (minimum != getMinimum())
+     {
+       model.setMinimum(minimum);
+       fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
+                                  AdjustmentEvent.TRACK, minimum);
+     }
+   }
+ 
+   /**
+    * This method returns the maximum value of the scrollbar.
+    *
+    * @return The maximum value of the scrollbar.
+    */
+   public int getMaximum()
+   {
+     return model.getMaximum();
+   }
+ 
+   /**
+    * This method sets the maximum value of the scrollbar.
+    *
+    * @param maximum The maximum value of the scrollbar.
+    */
+   public void setMaximum(int maximum)
+   {
+     if (maximum != getMaximum())
+     {
+       model.setMaximum(maximum);
+       fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
+                                  AdjustmentEvent.TRACK, maximum);
+     }
+   }
+ 
+   /**
+    * This method returns the model's isAjusting value.
+    *
+    * @return The model's isAdjusting value.
+    */
+   public boolean getValueIsAdjusting()
+   {
+     return model.getValueIsAdjusting();
+   }
+ 
+   /**
+    * This method sets the model's isAdjusting value.
+    *
+    * @param b The new isAdjusting value.
+    */
+   public void setValueIsAdjusting(boolean b)
+   {
+     model.setValueIsAdjusting(b);
+   }
+ 
+   /**
+    * This method sets the value, extent, minimum and 
+    * maximum.
+    *
+    * @param newValue The new value.
+    * @param newExtent The new extent.
+    * @param newMin The new minimum.
+    * @param newMax The new maximum.
+    */
+   public void setValues(int newValue, int newExtent, int newMin, int newMax)
+   {
+     if (!isEnabled())
+       newValue = model.getValue();
+     // It seems to be that on any change the value is fired.
+     if (newValue != getValue() || newExtent != getVisibleAmount() ||
+         newMin != getMinimum() || newMax != getMaximum())
+     {
+       model.setRangeProperties(newValue, newExtent, newMin, newMax,
+                                model.getValueIsAdjusting());
+       fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
+                                  AdjustmentEvent.TRACK, newValue);
+     }
+   }
+ 
+   /**
+    * This method adds an AdjustmentListener to the scroll bar.
+    *
+    * @param listener The listener to add.
+    */
+   public void addAdjustmentListener(AdjustmentListener listener)
+   {
+     listenerList.add(AdjustmentListener.class, listener);
+   }
+ 
+   /**
+    * This method removes an AdjustmentListener from the scroll bar. 
+    *
+    * @param listener The listener to remove.
+    */
+   public void removeAdjustmentListener(AdjustmentListener listener)
+   {
+     listenerList.remove(AdjustmentListener.class, listener);
+   }
+ 
+   /**
+    * This method returns an arry of all AdjustmentListeners listening to 
+    * this scroll bar.
+    *
+    * @return An array of AdjustmentListeners listening to this scroll bar.
+    */
+   public AdjustmentListener[] getAdjustmentListeners()
+   {
+     return (AdjustmentListener[]) listenerList.getListeners(AdjustmentListener.class);
+   }
+ 
+   /**
+    * This method is called to fired AdjustmentEvents to the listeners
+    * of this scroll bar. All AdjustmentEvents that are fired
+    * will have an ID of ADJUSTMENT_VALUE_CHANGED and a type of
+    * TRACK. 
+    *
+    * @param id The ID of the adjustment event.
+    * @param type The Type of change.
+    * @param value The new value for the property that was changed..
+    */
+   protected void fireAdjustmentValueChanged(int id, int type, int value)
+   {
+     Object[] adjustmentListeners = listenerList.getListenerList();
+     AdjustmentEvent adjustmentEvent = new AdjustmentEvent(this, 
+                                             AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
+ 					    AdjustmentEvent.TRACK,
+ 					    value);
+     for (int i = adjustmentListeners.length - 2; i >= 0; i -= 2)
+       {
+ 	if (adjustmentListeners[i] == AdjustmentListener.class)
+ 	  ((AdjustmentListener) adjustmentListeners[i + 1]).adjustmentValueChanged(adjustmentEvent);
+       }
+   }
+ 
+   /**
+    * This method returns the minimum size for this scroll bar.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize()
+   {
+     return ui.getMinimumSize(this);
+   }
+ 
+   /**
+    * This method returns the maximum size for this scroll bar.
+    *
+    * @return The maximum size.
+    */
+   public Dimension getMaximumSize()
+   {
+     return ui.getMaximumSize(this);
+   }
+ 
+   /**
+    * This method overrides the setEnabled in JComponent.
+    * When the scroll bar is disabled, the knob cannot
+    * be moved.
+    *
+    * @param x Whether the scrollbar is enabled.
+    */
+   public void setEnabled(boolean x)
+   {
+     // nothing special needs to be done here since we 
+     // just check the enabled setting before changing the value.
+     super.setEnabled(x);
+   }
+ 
+   /**
+    * A string that describes this JScrollBar. Normally only used
+    * for debugging.
+    *
+    * @return A string describing this JScrollBar.
+    */
+   protected String paramString()
+   {
+     return "JScrollBar";
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleJScrollBar();
+     return accessibleContext;
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JScrollPane.java gcc-4.0.0/libjava/javax/swing/JScrollPane.java
*** gcc-3.4.3/libjava/javax/swing/JScrollPane.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JScrollPane.java	Wed Feb 16 20:02:33 2005
***************
*** 1,5 ****
  /* JScrollPane.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JScrollPane.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,134 ****
  package javax.swing;
  
  import java.awt.Component;
  import javax.accessibility.Accessible;
  import javax.swing.plaf.ScrollPaneUI;
  
! public class JScrollPane extends JComponent implements Accessible, ScrollPaneConstants
  {
!     protected JViewport  columnHeader;
!     protected JViewport  rowHeader;
  
!     protected Component  lowerLeft;
!     protected Component  lowerRight;
!     protected Component  upperLeft;
!     protected Component  upperRight;
  
!     protected JScrollBar horizontalScrollBar;
!     protected int        horizontalScrollBarPolicy;
!     protected JScrollBar verticalScrollBar;
!     protected int        verticalScrollBarPolicy;
  
!     protected JViewport  viewport;
  
  
!     public JScrollPane() 
!     {
! 	this(null, 0, 0);
!     }
      
!     public JScrollPane(Component view) 
!     {
! 	this(view, 0, 0);
!     }
      
      
!     public JScrollPane(int vsbPolicy, int hsbPolicy) 
!     {
! 	this(null, 0, 0);
!     }
  
!     public JScrollPane(Component view, int vsbPolicy, int hsbPolicy) 
!     {
! 	setViewportView(view);
!         setOpaque(true);
! 	updateUI();
!     }
  
!     public String getUIClassID()
!     {
! 	//Returns a string that specifies the name of the L&F class that renders this component.  
! 	return "JScrollPane";
!     }
  
!     public JViewport getViewport()
!     {
! 	return viewport;
!     }
  
!     public JViewport createViewport()
!     {
! 	return new JViewport();
!     }
      
!     public void setViewport(JViewport v)
!     {
! 	if (viewport != null)
! 	    remove(viewport);
  
! 	viewport = v;	
! 	
! 	add(v);
  	
! 	revalidate();
! 	repaint();
!     }
      
!    public  void updateUI()
      {
! 	ScrollPaneUI b = (ScrollPaneUI)UIManager.getUI(this);
! 	setUI(b);
      }
  
  
!     public void setViewportView(Component view)
      {
! 	if (getViewport() == null)
! 	    {
! 		setViewport(createViewport());
! 	    }
! 	
! 	if (view != null)
! 	    {
! 		getViewport().setView(view);
! 	    }
      }
  }
--- 39,681 ----
  package javax.swing;
  
  import java.awt.Component;
+ import java.awt.ComponentOrientation;
+ import java.awt.Dimension;
+ import java.awt.Insets;
+ import java.awt.LayoutManager;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ 
  import javax.accessibility.Accessible;
+ import javax.swing.border.Border;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
  import javax.swing.plaf.ScrollPaneUI;
+ import javax.swing.plaf.UIResource;
  
! /**
!  * <table>
!  * <tr><th>Property                    </th><th>Stored in       </th><th>Bound?</th></tr>
!  * <tr><td>columnHeader                </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>columnHeaderView            </td><td>columnHeader    </td><td>no    </td></tr>
!  * <tr><td>componentOrientation        </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>horizontalScrollBar         </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>horizontalScrollBarPolicy   </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>layout                      </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>rowHeader                   </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>rowHeaderView               </td><td>rowHeader       </td><td>no    </td></tr>
!  * <tr><td>validateRoot                </td><td>scrollPane      </td><td>no    </td></tr>
!  * <tr><td>verticalScrollBar           </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>verticalScrollBarPolicy     </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>viewport                    </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>viewportBorder              </td><td>scrollPane      </td><td>yes   </td></tr>
!  * <tr><td>viewportBorderBounds        </td><td>scrollPane      </td><td>no    </td></tr>
!  * <tr><td>viewportView                </td><td>viewport        </td><td>no    </td></tr>
!  * <tr><td>wheelScrollingEnabled       </td><td>scrollPane      </td><td>yes   </td></tr>
!  * </table>
!  */
! public class JScrollPane 
!   extends JComponent 
!   implements Accessible, ScrollPaneConstants
  {
!   private static final long serialVersionUID = 5203525440012340014L;
!   
!   protected JViewport columnHeader;
!   protected JViewport rowHeader;
  
!   protected Component lowerLeft;
!   protected Component lowerRight;
!   protected Component upperLeft;
!   protected Component upperRight;
  
!   protected JScrollBar horizontalScrollBar;
!   protected int horizontalScrollBarPolicy;
!   protected JScrollBar verticalScrollBar;
!   protected int verticalScrollBarPolicy;
  
!   protected JViewport viewport;
!   
!   Border viewportBorder;
!   boolean wheelScrollingEnabled;
!   ChangeListener scrollListener;  
  
+   public JViewport getColumnHeader()
+   {
+     return columnHeader;
+   }
  
!   public Component getCorner(String key) {
!     if (getComponentOrientation() 
!         == ComponentOrientation.LEFT_TO_RIGHT)
!       {
!         if (key == LOWER_LEADING_CORNER)
!           key = LOWER_LEFT_CORNER;
!         else if (key == LOWER_TRAILING_CORNER)
!           key = LOWER_RIGHT_CORNER;
!         else if (key == UPPER_LEADING_CORNER)
!           key = UPPER_LEFT_CORNER;
!         else if (key == UPPER_TRAILING_CORNER)
!           key = UPPER_RIGHT_CORNER;
!       }
!     else if (getComponentOrientation() 
!              == ComponentOrientation.RIGHT_TO_LEFT)
!       {
!         if (key == LOWER_LEADING_CORNER)
!           key = LOWER_RIGHT_CORNER;
!         else if (key == LOWER_TRAILING_CORNER)
!           key = LOWER_LEFT_CORNER;
!         else if (key == UPPER_LEADING_CORNER)
!           key = UPPER_RIGHT_CORNER;
!         else if (key == UPPER_TRAILING_CORNER)
!           key = UPPER_LEFT_CORNER;
!       }
! 
!     if (key == LOWER_RIGHT_CORNER)
!       return lowerRight;
!     else if (key == UPPER_RIGHT_CORNER)
!       return upperRight;
!     else if (key == LOWER_LEFT_CORNER)
!       return lowerLeft;
!     else if (key == UPPER_LEFT_CORNER)
!       return upperLeft;
!     return null;
!   }
! 
!   public JScrollBar getHorizontalScrollBar()
!   {
!     return horizontalScrollBar;
!   }
! 
!   public int getHorizontalScrollBarPolicy()
!   {
!     return horizontalScrollBarPolicy;
!   }
! 
!   public JViewport getRowHeader()
!   {
!     return rowHeader;
!   }
! 
!   public JScrollBar getVerticalScrollBar()
!   {
!     return verticalScrollBar;
!   }
! 
!   public int getVerticalScrollBarPolicy()
!   {
!     return verticalScrollBarPolicy;
!   }
! 
!   public JViewport getViewport()
!   {
!     return viewport;
!   }
! 
!   public Border getViewportBorder()
!   {
!     return viewportBorder;
!   }
! 
!   public Rectangle getViewportBorderBounds()
!   {
!     if (viewportBorder == null)
!       {
!         if (getViewport() == null)
!           return new Rectangle(0,0,0,0);
!         else
!           return getViewport().getBounds();
!       }
!     else
!       {
!         Insets i = viewportBorder.getBorderInsets(getViewport());
!         if (getViewport() == null)
!           return new Rectangle(0,0,
!                                i.left+i.right, i.top+i.bottom);
!         else
!           {
!             Rectangle b = getViewport().getBounds();
!             return new Rectangle(b.x - i.left, 
!                                  b.y - i.top,
!                                  b.width + i.left + i.right, 
!                                  b.height + i.top + i.bottom);
!           }
!       }
!   }
!   
!   public boolean isWheelScrollingEnabled()
!   {
!     return wheelScrollingEnabled;
!   }
! 
! 
! 
!   private void sync()
!   {
!     LayoutManager m = super.getLayout();
!     if (m != null && m instanceof ScrollPaneLayout)
!       {
!         ScrollPaneLayout sl = (ScrollPaneLayout) m;
!         sl.syncWithScrollPane(this);
!       }
!   }
! 
!   private void removeNonNull(Component c)
!   {
!     if (c != null)
!       remove(c);
!   }
! 
!   private void addNonNull(Component c)
!   {
!     if (c != null)
!       add(c);
!   }
! 
!   public void setComponentOrientation(ComponentOrientation co)
!   {
!     ComponentOrientation old = super.getComponentOrientation();
!     super.setComponentOrientation(co);
!     firePropertyChange("componentOrientation", old, co);
!     sync();
!   }
! 
!   public void setColumnHeader(JViewport h)
!   {
!     if (columnHeader == h)
!       return;
      
!     JViewport old = columnHeader;
!     removeNonNull(old);
!     columnHeader = h;
!     addNonNull(h);
!     firePropertyChange("columnHeader", old, h);
!     sync();
!   }
! 
!   public void setColumnHeaderView(Component c)
!   {
!     if (columnHeader == null)
!       setColumnHeader(createViewport());
!     columnHeader.setView(c);
!     sync();
!   }
! 
!   public void setCorner(String key, Component c)
!   {
!     if (getComponentOrientation() 
!         == ComponentOrientation.LEFT_TO_RIGHT)
!       {
!         if (key == LOWER_LEADING_CORNER)
!           key = LOWER_LEFT_CORNER;
!         else if (key == LOWER_TRAILING_CORNER)
!           key = LOWER_RIGHT_CORNER;
!         else if (key == UPPER_LEADING_CORNER)
!           key = UPPER_LEFT_CORNER;
!         else if (key == UPPER_TRAILING_CORNER)
!           key = UPPER_RIGHT_CORNER;
!       }
!     else if (getComponentOrientation() 
!              == ComponentOrientation.RIGHT_TO_LEFT)
!       {
!         if (key == LOWER_LEADING_CORNER)
!           key = LOWER_RIGHT_CORNER;
!         else if (key == LOWER_TRAILING_CORNER)
!           key = LOWER_LEFT_CORNER;
!         else if (key == UPPER_LEADING_CORNER)
!           key = UPPER_RIGHT_CORNER;
!         else if (key == UPPER_TRAILING_CORNER)
!           key = UPPER_LEFT_CORNER;
!       }
! 
!     if (key == LOWER_RIGHT_CORNER)
!       {
!         removeNonNull(lowerRight);
!         lowerRight = c;
!         addNonNull(c);
!       }
!     else if (key == UPPER_RIGHT_CORNER)
!       {
!         removeNonNull(upperRight);
!         upperRight = c;
!         addNonNull(c);
!       }
!     else if (key == LOWER_LEFT_CORNER)
!       {
!         removeNonNull(lowerLeft);
!         lowerLeft = c;
!         addNonNull(c);
!       }
!     else if (key == UPPER_LEFT_CORNER)
!       {
!         removeNonNull(upperLeft);
!         upperLeft = c;
!         addNonNull(c);
!       }
!     else
!       throw new IllegalArgumentException("unknown corner " + key);
!     sync();
!   }
! 
!   public void setHorizontalScrollBar(JScrollBar h)
!   {
!     if (horizontalScrollBar == h)
!       return;
! 
!     JScrollBar old = horizontalScrollBar;
!     removeNonNull(old);
!     horizontalScrollBar = h;
!     addNonNull(h);
!     firePropertyChange("horizontalScrollBar", old, h);
!     sync();
! 
!     if (old != null)
!       {
!         BoundedRangeModel model = old.getModel();
!         if (model != null)
!           model.removeChangeListener(scrollListener);
!       }
!     if (h != null)
!       {
!         BoundedRangeModel model = h.getModel();
!         if (model != null)
!           model.addChangeListener(scrollListener);
!       }
!   }
! 
!   public void setHorizontalScrollBarPolicy(int h)
!   {
!     if (horizontalScrollBarPolicy == h)
!       return;
      
+     if (h != HORIZONTAL_SCROLLBAR_AS_NEEDED
+         && h != HORIZONTAL_SCROLLBAR_NEVER
+         && h != HORIZONTAL_SCROLLBAR_ALWAYS)
+       throw new IllegalArgumentException("unknown horizontal scrollbar policy");    
+ 
+     int old = horizontalScrollBarPolicy;
+     horizontalScrollBarPolicy = h;
+     firePropertyChange("horizontalScrollBarPolicy", old, h);
+     sync();
+   }
+ 
+   public void setLayout(LayoutManager l)
+   {
+     LayoutManager old = super.getLayout();
+     ScrollPaneLayout tmp = (ScrollPaneLayout) l;
+     super.setLayout(l);
+     tmp.syncWithScrollPane(this);
+     firePropertyChange("layout", old, l);
+     sync();
+   }
+ 
+   public void setRowHeader(JViewport v)
+   {
+     if (rowHeader == v)
+       return;
      
!     JViewport old = rowHeader;
!     removeNonNull(old);
!     rowHeader = v;
!     addNonNull(v);
!     firePropertyChange("rowHeader", old, v);
!     sync();
!   }
  
!   public void setRowHeaderView(Component c)
!   {
!     if (rowHeader == null)
!       setRowHeader(createViewport());
!     rowHeader.setView(c);
!     sync();
!   }
  
!   public void setVerticalScrollBar(JScrollBar v)
!   {
!     if (verticalScrollBar == v)
!       return;
!     
!     JScrollBar old = verticalScrollBar;
!     removeNonNull(old);
!     verticalScrollBar = v;
!     addNonNull(v);
!     firePropertyChange("verticalScrollBar", old, v);
!     sync();
  
!     if (old != null)
!       {
!         BoundedRangeModel model = old.getModel();
!         if (model != null)
!           model.removeChangeListener(scrollListener);
!       }
!     if (v != null)
!       {
!         BoundedRangeModel model = v.getModel();
!         if (model != null)
!           model.addChangeListener(scrollListener);
!       }
!   }
  
!   public void setVerticalScrollBarPolicy(int v)
!   {
!     if (verticalScrollBarPolicy == v)
!       return;
      
!     if (v != VERTICAL_SCROLLBAR_AS_NEEDED
!         && v != VERTICAL_SCROLLBAR_NEVER
!         && v != VERTICAL_SCROLLBAR_ALWAYS)
!       throw new IllegalArgumentException("unknown vertical scrollbar policy");    
!     
!     int old = verticalScrollBarPolicy;
!     verticalScrollBarPolicy = v;
!     firePropertyChange("verticalScrollBarPolicy", old, v);
!     sync();
!   }
  
!   public void setWheelScrollingEnabled(boolean b)
!   {
!     if (wheelScrollingEnabled == b)
!       return;
!     
!     boolean old = wheelScrollingEnabled;
!     wheelScrollingEnabled = b;
!     firePropertyChange("wheelScrollingEnabled", old, b);
!     sync();
!   }
! 
!   public void setViewport(JViewport v)
!   {
!     if (viewport == v)
!       return;
!     
!     JViewport old = viewport;
!     removeNonNull(old);
!     if (old != null)
!       old.removeChangeListener(scrollListener);
!     viewport = v;
!     if (v != null)
!       v.addChangeListener(scrollListener);
!     addNonNull(v);
!     revalidate();
!     repaint();
!     firePropertyChange("viewport", old, v);
!     sync();
!   }
! 
!   public void setViewportBorder(Border b)
!   {
!     if (viewportBorder == b)
!       return;
!     
!     Border old = viewportBorder;
!     viewportBorder = b;
!     firePropertyChange("viewportBorder", old, b);
!     sync();
!   }
!     
!   public void setViewportView(Component view)
!   {
!     if (getViewport() == null)
!       {
!         setViewport(createViewport());
!       }
  	
!     if (view != null)
!       {
!         getViewport().setView(view);
!       }
!     sync();
!   }
! 
!   public boolean isValidateRoot()
!   {
!     return true;
!   }
! 
!   ChangeListener createScrollListener()
!   {
!     return new ChangeListener() 
!       {
!         
!         public void stateChanged(ChangeEvent event)
!         {
!           JScrollBar vsb = JScrollPane.this.getVerticalScrollBar();
!           JScrollBar hsb = JScrollPane.this.getHorizontalScrollBar();
!           JViewport vp = JScrollPane.this.getViewport();
! 
!           if (vp != null && event.getSource() == vp)
!             {
!               // if the viewport changed, we should update the VSB / HSB
!               // models according to the new vertical and horizontal sizes
! 
!               Rectangle vr = vp.getViewRect();
!               Dimension vs = vp.getViewSize();
!               if (vsb != null
!                   && (vsb.getMinimum() != 0
!                       || vsb.getMaximum() != vs.height
!                       || vsb.getValue() != vr.y
!                       || vsb.getVisibleAmount() != vr.height))
!                 vsb.setValues(vr.y, vr.height, 0, vs.height);
! 
!               if (hsb != null
!                   && (hsb.getMinimum() != 0
!                       || hsb.getMaximum() != vs.width
!                       || hsb.getValue() != vr.width
!                       || hsb.getVisibleAmount() != vr.height))
!                 hsb.setValues(vr.x, vr.width, 0, vs.width);
!             }
!           else
!             {
!               // otherwise we got a change update from either the VSB or
!               // HSB model, and we need to update the viewport positions of
!               // both the main viewport and any row or column headers to
!               // match.
! 
!               int xpos = 0;
!               int ypos = 0;
!               
!               if (vsb != null)
!                 ypos = vsb.getValue();
!               
!               if (hsb != null)
!                 xpos = hsb.getValue();
! 
!               Point pt = new Point(xpos, ypos);
! 
!               if (vp != null
!                   && vp.getViewPosition() != pt)
!                 vp.setViewPosition(pt);
! 
!               pt.x = 0;
! 
!               if (rowHeader != null 
!                   && rowHeader.getViewPosition() != pt)
!                 rowHeader.setViewPosition(pt);
!               
!               pt.x = xpos;
!               pt.y = 0;
! 
!               if (columnHeader != null 
!                   && columnHeader.getViewPosition() != pt)
!                 columnHeader.setViewPosition(pt);
! 
!             }
!         }
!       };
!   }
! 
! 
!   public JScrollPane() 
!   {
!     this(null);
!   }
      
!   public JScrollPane(Component view) 
!   {
!     this(view, 
!          VERTICAL_SCROLLBAR_AS_NEEDED, 
!          HORIZONTAL_SCROLLBAR_AS_NEEDED);
!   }
! 
!   public JScrollPane(int vsbPolicy, int hsbPolicy) 
!   {
!     this(null, vsbPolicy, hsbPolicy);
!   }
! 
!   public JScrollPane(Component view, int vsbPolicy, int hsbPolicy) 
!   {
!     scrollListener = createScrollListener();
!     setVerticalScrollBarPolicy(vsbPolicy);
!     setVerticalScrollBar(createVerticalScrollBar());
!     setHorizontalScrollBarPolicy(hsbPolicy);
!     setHorizontalScrollBar(createHorizontalScrollBar());
!     setViewportView(view);
!     setLayout(new ScrollPaneLayout());
!     setOpaque(false);
!     updateUI();
!   }
! 
!   
!   public JScrollBar createHorizontalScrollBar()
!   {
!     return new ScrollBar(SwingConstants.HORIZONTAL);
!   }
! 
!   public JScrollBar createVerticalScrollBar()
!   {
!     return new ScrollBar(SwingConstants.VERTICAL);
!   }
!     
!   protected JViewport createViewport()
!   {
!     return new JViewport();
!   }
! 
!   public String getUIClassID()
!   {
!     return "ScrollPaneUI";
!   }
!   
!   public void updateUI()
!   {
!     ScrollPaneUI b = (ScrollPaneUI)UIManager.getUI(this);
!     setUI(b);
!   }  
! 
!   /**
!    * This method returns the scrollpane's UI delegate.
!    *
!    * @return The scrollpane's UI delegate.
!    */
!   public ScrollPaneUI getUI()
!   {
!     return (ScrollPaneUI) ui;
!   }
! 
!   /**
!    * This method sets the scrollpane's UI delegate.
!    *
!    * @param ui The scrollpane's UI delegate.
!    */
!   public void setUI(ScrollPaneUI ui)
!   {
!     super.setUI(ui);
!   }
! 
!   protected class ScrollBar 
!     extends JScrollBar
!     implements UIResource
!   {
!     public ScrollBar(int orientation)
      {
!       super(orientation);
      }
  
+     public int getBlockIncrement(int direction)
+     {
+       Component view = JScrollPane.this.getViewport().getView();
+       if (view == null || (! (view instanceof Scrollable)))
+         return super.getBlockIncrement(direction);
+       else
+         {
+           Scrollable s = (Scrollable) view;
+           return s.getScrollableBlockIncrement(JScrollPane.this.getViewport().getViewRect(), 
+                                                this.getOrientation(),
+                                                direction);
+         }
+     }
  
!     public int getUnitIncrement(int direction)
      {
!       Component view = JScrollPane.this.getViewport().getView();
!       if (view == null || (! (view instanceof Scrollable)))
!         return super.getUnitIncrement(direction);
!       else
!         {
!           Scrollable s = (Scrollable) view;
!           return s.getScrollableUnitIncrement(JScrollPane.this.getViewport().getViewRect(), 
!                                               this.getOrientation(),
!                                               direction);
!         }
      }
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JSeparator.java gcc-4.0.0/libjava/javax/swing/JSeparator.java
*** gcc-3.4.3/libjava/javax/swing/JSeparator.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/JSeparator.java	Thu Jun 17 23:43:12 2004
*************** exception statement from your version. *
*** 37,226 ****
  
  package javax.swing;
  
- import java.io.IOException;
- import java.io.ObjectOutputStream;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.swing.plaf.SeparatorUI;
  
  /**
!  * JSeparator
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JSeparator extends JComponent 
!   implements SwingConstants, Accessible
  {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleJSeparator
! 	 */
! 	protected class AccessibleJSeparator extends AccessibleJComponent {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJSeparator
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJSeparator(JSeparator component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJSeparator()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.SEPARATOR;
! 		} // getAccessibleRole()
! 
! 
! 	} // AccessibleJSeparator
! 
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "SeparatorUI";
! 
! 	/**
! 	 * orientation
! 	 */
! 	private int orientation;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor JSeparator
! 	 */
! 	public JSeparator() {
! 		this(HORIZONTAL);
! 	} // JSeparator()
! 
! 	/**
! 	 * Constructor JSeparator
! 	 * @param value0 TODO
! 	 */
! 	public JSeparator(int orientation) {
! 		this.orientation = orientation;
! 		// TODO
! 	} // JSeparator()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * getUI
! 	 * @returns SeparatorUI
! 	 */
! 	public SeparatorUI getUI() {
! 		return (SeparatorUI) ui;
! 	} // getUI()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(SeparatorUI ui) {
! 		super.setUI(ui);
! 	} // setUI()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((SeparatorUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * getOrientation
! 	 * @returns int
! 	 */
! 	public int getOrientation() {
! 		return orientation;
! 	} // getOrientation()
  
! 	/**
! 	 * setOrientation
! 	 * @param orientation TODO
! 	 */
! 	public void setOrientation(int orientation) {
! 		this.orientation = orientation;
! 		// TODO
! 	} // setOrientation()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * isFocusTraversable
! 	 * @returns boolean
! 	 */
! 	public boolean isFocusTraversable() {
! 		return false;
! 	} // isFocusTraversable()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJSeparator(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JSeparator
--- 37,208 ----
  
  package javax.swing;
  
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.swing.plaf.SeparatorUI;
  
+ 
  /**
!  * The JSeparator. It is mostly used to divide/space out
!  * components.
   */
! public class JSeparator extends JComponent implements SwingConstants,
!                                                       Accessible
  {
+   /**
+    * AccessibleJSeparator
+    */
+   protected class AccessibleJSeparator extends AccessibleJComponent
+   {
+     private static final long serialVersionUID = 916332890553201095L;
+   
+     /**
+      * Constructor AccessibleJSeparator
+      *
+      * @param component TODO
+      */
+     protected AccessibleJSeparator()
+     {
+     }
  
!     /**
!      * getAccessibleRole
!      *
!      * @return AccessibleRole
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.SEPARATOR;
!     }
!   }
  
!   private static final long serialVersionUID = 125301223445282357L;
!   
!   /** The orientation of the JSeparator. */
!   private transient int orientation = HORIZONTAL;
  
!   /**
!    * Creates a new horizontal JSeparator object.
!    */
!   public JSeparator()
!   {
!     this(HORIZONTAL);
!   }
  
!   /**
!    * Creates a new JSeparator object with the given orientation.
!    *
!    * @param orientation The orientation of the JSeparator.
!    */
!   public JSeparator(int orientation)
!   {
!     if (orientation != HORIZONTAL && orientation != VERTICAL)
!       throw new IllegalArgumentException(orientation
!                                          + " is not a valid orientation.");
!     this.orientation = orientation;
!     updateUI();
!   }
  
!   /**
!    * This method returns the UI delegate being
!    * used with the JSeparator.
!    *
!    * @return SeparatorUI The JSeparator's UI delegate.
!    */
!   public SeparatorUI getUI()
!   {
!     return (SeparatorUI) ui;
!   }
  
!   /**
!    * This method sets the UI delegate to use
!    * with the JSeparator.
!    *
!    * @param ui The UI delegate to use.
!    */
!   public void setUI(SeparatorUI ui)
!   {
!     super.setUI(ui);
!   }
  
!   /**
!    * This method resets the UI delegate to the 
!    * default for the current look and feel.
!    */
!   public void updateUI()
!   {
!     setUI((SeparatorUI) UIManager.getUI(this));
!     invalidate();
!   }
  
!   /**
!    * This method returns the identifier string
!    * that is used to determine the UI delegate
!    * from the current look and feel.
!    *
!    * @return String The identifier string for the UI.
!    */
!   public String getUIClassID()
!   {
!     return "SeparatorUI";
!   }
  
!   /**
!    * This method returns the JSeparator's orientation.
!    *
!    * @return int The JSeparator's orientation.
!    */
!   public int getOrientation()
!   {
!     return orientation;
!   }
  
!   /**
!    * This method changes the JSeparator's orientation.
!    *
!    * @param orientation The JSeparator's orientation.
!    */
!   public void setOrientation(int orientation)
!   {
!     if (orientation != HORIZONTAL && orientation != VERTICAL)
!       throw new IllegalArgumentException(orientation
!                                          + " is not a valid orientation.");
!     this.orientation = orientation;
!   }
  
!   /**
!    * This method returns a string desribing the JSeparator.
!    * Normally only used in debugging.
!    *
!    * @return String A string describing the JSeparator.
!    */
!   protected String paramString()
!   {
!     return "JSeparator";
!   }
  
+   /**
+    * This method overrides the isFocusTraversable method from
+    * Component to false. JSeparator cannot be focused on.
+    *
+    * @return boolean False.
+    */
+   public boolean isFocusTraversable()
+   {
+     return false;
+   }
  
!   /**
!    * getAccessibleContext
!    *
!    * @return AccessibleContext
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJSeparator();
!     
!     return accessibleContext;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JSlider.java gcc-4.0.0/libjava/javax/swing/JSlider.java
*** gcc-3.4.3/libjava/javax/swing/JSlider.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JSlider.java	Wed Feb 16 20:02:34 2005
***************
*** 1,5 ****
  /* JSlider.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JSlider.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,48 ****
  
  package javax.swing;
  
! import java.io.IOException;
! import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.Dictionary;
  import java.util.Hashtable;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
--- 38,51 ----
  
  package javax.swing;
  
! import java.awt.Dimension;
! import java.awt.MenuContainer;
! import java.awt.image.ImageObserver;
  import java.io.Serializable;
  import java.util.Dictionary;
+ import java.util.Enumeration;
  import java.util.Hashtable;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
*************** import javax.swing.event.ChangeListener;
*** 53,701 ****
  import javax.swing.plaf.SliderUI;
  
  /**
!  * JSlider
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JSlider
!   extends JComponent
!   implements SwingConstants, Accessible
  {
!   static final long serialVersionUID = -1441275936141218479L;
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 
! 	/**
! 	 * AccessibleJSlider
! 	 */
! 	protected class AccessibleJSlider extends JComponent.AccessibleJComponent implements AccessibleValue {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJSlider
! 		 * @param value0 TODO
! 		 */
! 		protected AccessibleJSlider(JSlider value0) {
! 			super(value0);
! 			// TODO
! 		} // AccessibleJSlider()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleStateSet
! 		 * @returns AccessibleStateSet
! 		 */
! 		public AccessibleStateSet getAccessibleStateSet() {
! 			return null; // TODO
! 		} // getAccessibleStateSet()
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return null; // TODO
! 		} // getAccessibleRole()
! 
! 		/**
! 		 * getAccessibleValue
! 		 * @returns AccessibleValue
! 		 */
! 		public AccessibleValue getAccessibleValue() {
! 			return null; // TODO
! 		} // getAccessibleValue()
! 
! 		/**
! 		 * getCurrentAccessibleValue
! 		 * @returns Number
! 		 */
! 		public Number getCurrentAccessibleValue() {
! 			return null; // TODO
! 		} // getCurrentAccessibleValue()
! 
! 		/**
! 		 * setCurrentAccessibleValue
! 		 * @param value0 TODO
! 		 * @returns boolean
! 		 */
! 		public boolean setCurrentAccessibleValue(Number value0) {
! 			return false; // TODO
! 		} // setCurrentAccessibleValue()
! 
! 		/**
! 		 * getMinimumAccessibleValue
! 		 * @returns Number
! 		 */
! 		public Number getMinimumAccessibleValue() {
! 			return null; // TODO
! 		} // getMinimumAccessibleValue()
! 
! 		/**
! 		 * getMaximumAccessibleValue
! 		 * @returns Number
! 		 */
! 		public Number getMaximumAccessibleValue() {
! 			return null; // TODO
! 		} // getMaximumAccessibleValue()
! 
! 
! 	} // AccessibleJSlider
! 
! 	/**
! 	 * ModelListener
! 	 */
! 	private class ModelListener implements ChangeListener, Serializable {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor ModelListener
! 		 * @param value0 TODO
! 		 */
! 		private ModelListener(JSlider value0) {
! 			// TODO
! 		} // ModelListener()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * stateChanged
! 		 * @param value0 TODO
! 		 */
! 		public void stateChanged(ChangeEvent value0) {
! 			// TODO
! 		} // stateChanged()
! 
! 
! 	} // ModelListener
! 
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "SliderUI";
  
! 	/**
! 	 * paintTicks
! 	 */
! 	private boolean paintTicks;
  
! 	/**
! 	 * paintTrack
! 	 */
! 	private boolean paintTrack;
  
! 	/**
! 	 * paintLabels
! 	 */
! 	private boolean paintLabels;
  
! 	/**
! 	 * isInverted
! 	 */
! 	private boolean isInverted;
  
! 	/**
! 	 * sliderModel
! 	 */
! 	protected BoundedRangeModel sliderModel;
  
! 	/**
! 	 * majorTickSpacing
! 	 */
! 	protected int majorTickSpacing;
  
! 	/**
! 	 * minorTickSpacing
! 	 */
! 	protected int minorTickSpacing;
  
! 	/**
! 	 * snapToTicks
! 	 */
! 	protected boolean snapToTicks;
  
! 	/**
! 	 * snapToValue
! 	 */
! 	boolean snapToValue;
  
! 	/**
! 	 * orientation
! 	 */
! 	protected int orientation;
  
! 	/**
! 	 * labelTable
! 	 */
! 	private Dictionary labelTable;
  
! 	/**
! 	 * changeListener
! 	 */
! 	protected ChangeListener changeListener;
  
! 	/**
! 	 * changeEvent
! 	 */
! 	protected transient ChangeEvent changeEvent;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JSlider
! 	 */
! 	public JSlider() {
! 		// TODO
! 	} // JSlider()
  
! 	/**
! 	 * Constructor JSlider
! 	 * @param value0 TODO
! 	 */
! 	public JSlider(int orientation) {
! 		// TODO
! 	} // JSlider()
  
! 	/**
! 	 * Constructor JSlider
! 	 * @param minimum TODO
! 	 * @param maximum TODO
! 	 */
! 	public JSlider(int minimum, int maximum) {
! 		// TODO
! 	} // JSlider()
  
! 	/**
! 	 * Constructor JSlider
! 	 * @param minimum TODO
! 	 * @param maximum TODO
! 	 * @param value TODO
! 	 */
! 	public JSlider(int minimum, int maximum, int value) {
! 		// TODO
! 	} // JSlider()
  
! 	/**
! 	 * Constructor JSlider
! 	 * @param orientation TODO
! 	 * @param minimum TODO
! 	 * @param maximum TODO
! 	 * @param value TODO
! 	 */
! 	public JSlider(int orientation, int minimum, int maximum, int value) {
! 		// TODO
! 	} // JSlider()
  
! 	/**
! 	 * Constructor JSlider
! 	 * @param value0 TODO
! 	 */
! 	public JSlider(BoundedRangeModel model) {
! 		// TODO
! 	} // JSlider()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * getValue
! 	 * @returns int
! 	 */
! 	public int getValue() {
! 		return 0; // TODO
! 	} // getValue()
  
! 	/**
! 	 * setValue
! 	 * @param value0 TODO
! 	 */
! 	public void setValue(int value) {
! 		// TODO
! 	} // setValue()
  
! 	/**
! 	 * getUI
! 	 * @returns SliderUI
! 	 */
! 	public SliderUI getUI() {
! 		return (SliderUI) ui;
! 	} // getUI()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(SliderUI ui) {
! 		super.setUI(ui);
! 	} // setUI()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((SliderUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * createChangeListener
! 	 * @returns ChangeListener
! 	 */
! 	protected ChangeListener createChangeListener() {
! 		return null; // TODO
! 	} // createChangeListener()
  
! 	/**
! 	 * addChangeListener
! 	 * @param listener TODO
! 	 */
! 	public void addChangeListener(ChangeListener listener) {
! 		// TODO
! 	} // addChangeListener()
  
! 	/**
! 	 * removeChangeListener
! 	 * @param listener TODO
! 	 */
! 	public void removeChangeListener(ChangeListener listener) {
! 		// TODO
! 	} // removeChangeListener()
  
! 	/**
! 	 * fireStateChanged
! 	 */
! 	protected void fireStateChanged() {
! 		// TODO
! 	} // fireStateChanged()
  
! 	/**
! 	 * getModel
! 	 * @returns BoundedRangeModel
! 	 */
! 	public BoundedRangeModel getModel() {
! 		return null; // TODO
! 	} // getModel()
  
! 	/**
! 	 * setModel
! 	 * @param model TODO
! 	 */
! 	public void setModel(BoundedRangeModel model) {
! 		// TODO
! 	} // setModel()
  
! 	/**
! 	 * getMinimum
! 	 * @returns int
! 	 */
! 	public int getMinimum() {
! 		return 0; // TODO
! 	} // getMinimum()
  
! 	/**
! 	 * setMinimum
! 	 * @param minimum TODO
! 	 */
! 	public void setMinimum(int minimum) {
! 		// TODO
! 	} // setMinimum()
  
! 	/**
! 	 * getMaximum
! 	 * @returns int
! 	 */
! 	public int getMaximum() {
! 		return 0; // TODO
! 	} // getMaximum()
  
! 	/**
! 	 * setMaximum
! 	 * @param maximum TODO
! 	 */
! 	public void setMaximum(int maximum) {
! 		// TODO
! 	} // setMaximum()
  
! 	/**
! 	 * getValueIsAdjusting
! 	 * @returns boolean
! 	 */
! 	public boolean getValueIsAdjusting() {
! 		return false; // TODO
! 	} // getValueIsAdjusting()
  
! 	/**
! 	 * setValueIsAdjusting
! 	 * @param adjusting TODO
! 	 */
! 	public void setValueIsAdjusting(boolean adjusting) {
! 		// TODO
! 	} // setValueIsAdjusting()
  
! 	/**
! 	 * getExtent
! 	 * @returns int
! 	 */
! 	public int getExtent() {
! 		return 0; // TODO
! 	} // getExtent()
  
! 	/**
! 	 * setExtent
! 	 * @param vextent TODO
! 	 */
! 	public void setExtent(int extent) {
! 		// TODO
! 	} // setExtent()
  
! 	/**
! 	 * getOrientation
! 	 * @returns int
! 	 */
! 	public int getOrientation() {
! 		return 0; // TODO
! 	} // getOrientation()
  
! 	/**
! 	 * setOrientation
! 	 * @param orientation TODO
! 	 */
! 	public void setOrientation(int orientation) {
! 		// TODO
! 	} // setOrientation()
  
! 	/**
! 	 * getLabelTable
! 	 * @returns Dictionary
! 	 */
! 	public Dictionary getLabelTable() {
! 		return null; // TODO
! 	} // getLabelTable()
  
! 	/**
! 	 * setLabelTable
! 	 * @param table TODO
! 	 */
! 	public void setLabelTable(Dictionary table) {
! 		// TODO
! 	} // setLabelTable()
  
! 	/**
! 	 * updateLabelUIs
! 	 */
! 	protected void updateLabelUIs() {
! 		// TODO
! 	} // updateLabelUIs()
  
! 	/**
! 	 * createStandardLabels
! 	 * @param increment TODO
! 	 * @returns Hashtable
! 	 */
! 	public Hashtable createStandardLabels(int increment) {
! 		return null; // TODO
! 	} // createStandardLabels()
  
! 	/**
! 	 * createStandardLabels
! 	 * @param increment TODO
! 	 * @param start TODO
! 	 * @returns Hashtable
! 	 */
! 	public Hashtable createStandardLabels(int increment, int start) {
! 		return null; // TODO
! 	} // createStandardLabels()
  
! 	/**
! 	 * getInverted
! 	 * @returns boolean
! 	 */
! 	public boolean getInverted() {
! 		return false; // TODO
! 	} // getInverted()
  
! 	/**
! 	 * setInverted
! 	 * @param inverted TODO
! 	 */
! 	public void setInverted(boolean inverted) {
! 		// TODO
! 	} // setInverted()
  
! 	/**
! 	 * getMajorTickSpacing
! 	 * @returns int
! 	 */
! 	public int getMajorTickSpacing() {
! 		return 0; // TODO
! 	} // getMajorTickSpacing()
  
! 	/**
! 	 * setMajorTickSpacing
! 	 * @param spacing TODO
! 	 */
! 	public void setMajorTickSpacing(int spacing) {
! 		// TODO
! 	} // setMajorTickSpacing()
  
! 	/**
! 	 * getMinorTickSpacing
! 	 * @returns int
! 	 */
! 	public int getMinorTickSpacing() {
! 		return 0; // TODO
! 	} // getMinorTickSpacing()
  
! 	/**
! 	 * setMinorTickSpacing
! 	 * @param spacing TODO
! 	 */
! 	public void setMinorTickSpacing(int spacing) {
! 		// TODO
! 	} // setMinorTickSpacing()
  
! 	/**
! 	 * getSnapToTicks
! 	 * @returns boolean
! 	 */
! 	public boolean getSnapToTicks() {
! 		return false; // TODO
! 	} // getSnapToTicks()
  
! 	/**
! 	 * getSnapToValue
! 	 * @returns boolean
! 	 */
! 	boolean getSnapToValue() {
! 		return false; // TODO
! 	} // getSnapToValue()
  
! 	/**
! 	 * setSnapToTicks
! 	 * @param snap TODO
! 	 */
! 	public void setSnapToTicks(boolean snap) {
! 		// TODO
! 	} // setSnapToTicks()
  
! 	/**
! 	 * getPaintTicks
! 	 * @returns boolean
! 	 */
! 	public boolean getPaintTicks() {
! 		return false; // TODO
! 	} // getPaintTicks()
  
! 	/**
! 	 * setPaintTicks
! 	 * @param paint TODO
! 	 */
! 	public void setPaintTicks(boolean paint) {
! 		// TODO
! 	} // setPaintTicks()
  
! 	/**
! 	 * getPaintTrack
! 	 * @returns boolean
! 	 */
! 	public boolean getPaintTrack() {
! 		return false; // TODO
! 	} // getPaintTrack()
  
! 	/**
! 	 * setPaintTrack
! 	 * @param paint TODO
! 	 */
! 	public void setPaintTrack(boolean paint) {
! 		// TODO
! 	} // setPaintTrack()
  
! 	/**
! 	 * getPaintLabels
! 	 * @returns boolean
! 	 */
! 	public boolean getPaintLabels() {
! 		return false; // TODO
! 	} // getPaintLabels()
  
! 	/**
! 	 * setPaintLabels
! 	 * @param paint TODO
! 	 */
! 	public void setPaintLabels(boolean paint) {
! 		// TODO
! 	} // setPaintLabels()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJSlider(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JSlider
--- 56,907 ----
  import javax.swing.plaf.SliderUI;
  
  /**
!  * The JSlider is a Swing component that allows selection of a value within a
!  * range by adjusting a thumb in a track. The values for the minimum,
!  * maximum, extent and value are stored in a {@link
!  * DefaultBoundedRangeModel}.
!  * 
!  * <p>
!  * JSliders have the following properties:
!  * </p>
!  * 
!  * <table>
!  * <tr><th> Property         </th><th> Stored in </th><th> Bound? </th></tr>
!  * <tr><td> extent           </td><td> model     </td><td> no     </td></tr>
!  * <tr><td> inverted         </td><td> slider    </td><td> yes    </td></tr>
!  * <tr><td> labelTable       </td><td> slider    </td><td> yes    </td></tr>
!  * <tr><td> majorTickSpacing </td><td> slider    </td><td> yes    </td></tr> 
!  * <tr><td> maximum          </td><td> model     </td><td> no     </td></tr>
!  * <tr><td> minimum          </td><td> model     </td><td> no     </td></tr>
!  * <tr><td> minorTickSpacing </td><td> slider    </td><td> yes    </td></tr>
!  * <tr><td> model            </td><td> slider    </td><td> yes    </td></tr> 
!  * <tr><td> orientation      </td><td> slider    </td><td> yes    </td></tr>
!  * <tr><td> paintLabels      </td><td> slider    </td><td> yes    </td></tr>
!  * <tr><td> paintTicks       </td><td> slider    </td><td> yes    </td></tr>
!  * <tr><td> snapToTicks      </td><td> slider    </td><td> no     </td></tr>
!  * <tr><td> value            </td><td> model     </td><td> no     </td></tr>
!  * <tr><td> valueIsAdjusting </td><td> model     </td><td> no     </td></tr>
!  * </table>
!  * 
!  * <p>
!  * The various behavioral aspects of these properties follows:
!  * </p>
!  * 
!  * <ul>
!  * <li>
!  * When non-bound properties stored in the slider change, the slider fires
!  * ChangeEvents to its ChangeListeners.
!  * </li>
!  * <li>
!  * When bound properties stored in the slider change, the slider fires
!  * PropertyChangeEvents to its PropertyChangeListeners
!  * </li>
!  * <li>
!  * If any of the model's properties change, it fires a ChangeEvent to its
!  * ChangeListeners, which include the slider.
!  * </li>
!  * <li>
!  * If the slider receives a ChangeEvent from its model, it will propagate the
!  * ChangeEvent to its ChangeListeners, with the ChangeEvent's "source"
!  * property set to refer to the slider, rather than the model.
!  * </li>
!  * </ul>
   */
! public class JSlider extends JComponent implements SwingConstants, Accessible,
!                                                    ImageObserver,
!                                                    MenuContainer, Serializable
  {
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = -1441275936141218479L;
  
!   /**
!    * DOCUMENT ME!
!    */
!   protected class AccessibleJSlider extends JComponent.AccessibleJComponent
!     implements AccessibleValue
!   {
!     private static final long serialVersionUID = -6301740148041106789L;
!   
!     /**
!      * Creates a new AccessibleJSlider object.
!      *
!      * @param value0 DOCUMENT ME!
!      */
!     protected AccessibleJSlider()
!     {
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public AccessibleStateSet getAccessibleStateSet()
!     {
!       return null;
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return null;
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public AccessibleValue getAccessibleValue()
!     {
!       return null;
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public Number getCurrentAccessibleValue()
!     {
!       return null;
!     }
  
!     /**
!      * setCurrentAccessibleValue
!      *
!      * @param value0 TODO
!      *
!      * @return boolean
!      */
!     public boolean setCurrentAccessibleValue(Number value0)
!     {
!       return false;
!     }
  
!     /**
!      * getMinimumAccessibleValue
!      *
!      * @return Number
!      */
!     public Number getMinimumAccessibleValue()
!     {
!       return null;
!     }
  
!     /**
!      * getMaximumAccessibleValue
!      *
!      * @return Number
!      */
!     public Number getMaximumAccessibleValue()
!     {
!       return null;
!     }
!   }
  
!   /** Whether or not this slider paints its ticks. */
!   private transient boolean paintTicks = false;
  
!   /** Whether or not this slider paints its track. */
!   private transient boolean paintTrack = true;
  
!   /** Whether or not this slider paints its labels. */
!   private transient boolean paintLabels = false;
  
!   /**
!    * A dictionary of (Integer, Component) pairs where each Component is a
!    * JLabel and the Integer determines where the label will be painted.
!    */
!   private transient Dictionary labelTable;
  
!   /** The model used to describe the slider. */
!   protected BoundedRangeModel sliderModel;
  
!   /** The space between major ticks. */
!   protected int majorTickSpacing;
  
!   /** The space between minor ticks. */
!   protected int minorTickSpacing;
  
+   /** Whether the slider snaps its values to ticks. */
+   protected boolean snapToTicks = true;
  
!   /** The orientation of the slider. */
!   protected int orientation = HORIZONTAL;
  
!   /** Whether the slider is inverted. */
!   private transient boolean isInverted;
  
!   /** The ChangeListener that listens to the model. */
!   protected ChangeListener changeListener;
  
!   /** The ChangeEvent that is passed to all listeners of this slider. */
!   protected transient ChangeEvent changeEvent;
  
!   /**
!    * Creates a new horizontal JSlider object with a minimum of 0, a maximum of
!    * 100, and a value of 50.
!    */
!   public JSlider()
!   {
!     this(HORIZONTAL, 0, 100, 50);
!   }
  
!   /**
!    * Creates a new JSlider object with the given orientation and a minimum of
!    * 0, a maximum of 100, and a value of 50.
!    *
!    * @param orientation The orientation of the slider.
!    */
!   public JSlider(int orientation)
!   {
!     this(orientation, 0, 100, 50);
!   }
  
!   /**
!    * Creates a new horizontal JSlider object with the given maximum and
!    * minimum and a value that is  halfway between the minimum and the
!    * maximum.
!    *
!    * @param minimum The minimum value of the JSlider.
!    * @param maximum The maximum value of the JSlider.
!    */
!   public JSlider(int minimum, int maximum)
!   {
!     this(HORIZONTAL, minimum, maximum, (maximum + minimum) / 2);
!   }
  
+   /**
+    * Creates a new horizontal JSlider object with the given minimum, maximum,
+    * and value.
+    *
+    * @param minimum The minimum value of the JSlider.
+    * @param maximum The maximum value of the JSlider.
+    * @param value The initial value of the JSlider.
+    */
+   public JSlider(int minimum, int maximum, int value)
+   {
+     this(HORIZONTAL, minimum, maximum, value);
+   }
  
!   /**
!    * Creates a new JSlider object with the given orientation, minimum,
!    * maximum, and value.
!    *
!    * @param orientation The orientation of the JSlider.
!    * @param minimum The minimum value of the JSlider.
!    * @param maximum The maximum value of the JSlider.
!    * @param value The initial value of the JSlider.
!    */
!   public JSlider(int orientation, int minimum, int maximum, int value)
!   {
!     sliderModel = new DefaultBoundedRangeModel(value, 0, minimum, maximum);
!     if (orientation != HORIZONTAL && orientation != VERTICAL)
!       throw new IllegalArgumentException(orientation + " is not a legal orientation");
!     this.orientation = orientation;
!     changeListener = createChangeListener();
!     sliderModel.addChangeListener(changeListener);
!     updateUI();
!   }
  
!   /**
!    * Creates a new horizontal JSlider object with the given model.
!    *
!    * @param model The model the slider will be created with.
!    */
!   public JSlider(BoundedRangeModel model)
!   {
!     if (model == null)
!       sliderModel = new DefaultBoundedRangeModel(50, 0, 0, 100);
!     else
!       sliderModel = model;
!     changeListener = createChangeListener();
!     sliderModel.addChangeListener(changeListener);
!     updateUI();
!   }
  
!   /**
!    * This method returns the current value of the slider.
!    *
!    * @return The value of the slider stored in the model.
!    */
!   public int getValue()
!   {
!     return sliderModel.getValue();
!   }
  
!   /**
!    * This method sets the value of the slider.
!    *
!    * @param value The slider's new value.
!    */
!   public void setValue(int value)
!   {
!     sliderModel.setValue(value);
!   }
  
!   /**
!    * This method returns the slider's UI delegate.
!    *
!    * @return The slider's UI delegate.
!    */
!   public SliderUI getUI()
!   {
!     return (SliderUI) ui;
!   }
  
!   /**
!    * This method sets the slider's UI delegate.
!    *
!    * @param ui A SliderUI object to use with this slider.
!    */
!   public void setUI(SliderUI ui)
!   {
!     super.setUI(ui);
!   }
  
!   /**
!    * This method sets this slider's UI to the UIManager's default for the
!    * current look and feel.
!    */
!   public void updateUI()
!   {
!     setUI((SliderUI) UIManager.getUI(this));
!     invalidate();
!     repaint();
!   }
  
!   /**
!    * This method returns a name to identify which look and feel class will be
!    * the UI delegate for the slider.
!    *
!    * @return The Look and Feel classID. "SliderUI"
!    */
!   public String getUIClassID()
!   {
!     return "SliderUI";
!   }
  
!   /**
!    * Creates a ChangeListener for this Slider.
!    *
!    * @return A new ChangeListener.
!    */
!   protected ChangeListener createChangeListener()
!   {
!     return new ChangeListener()
!       {
! 	public void stateChanged(ChangeEvent ce)
! 	{
! 	  // No need to trigger a repaint since the UI listens to the model
! 	  // as well. All we need to do is pass on the stateChanged event 
! 	  // to our listeners.
! 	  fireStateChanged();
! 	}
!       };
!   }
  
!   /**
!    * This method registers a listener to this slider. The listener will be
!    * informed of new ChangeEvents.
!    *
!    * @param listener The listener to register.
!    */
!   public void addChangeListener(ChangeListener listener)
!   {
!     listenerList.add(ChangeListener.class, listener);
!   }
  
!   /**
!    * This method removes a listener from this slider.
!    *
!    * @param listener The listener to remove.
!    */
!   public void removeChangeListener(ChangeListener listener)
!   {
!     listenerList.remove(ChangeListener.class, listener);
!   }
  
!   /**
!    * This method is called whenever the model fires a ChangeEvent. It should
!    * propagate the ChangeEvent to its listeners with a new ChangeEvent that
!    * identifies the slider as the source.
!    */
!   protected void fireStateChanged()
!   {
!     Object[] changeListeners = listenerList.getListenerList();
!     if (changeEvent == null)
!       changeEvent = new ChangeEvent(this);
!     for (int i = changeListeners.length - 2; i >= 0; i -= 2)
!       {
! 	if (changeListeners[i] == ChangeListener.class)
! 	  ((ChangeListener) changeListeners[i + 1]).stateChanged(changeEvent);
!       }
!   }
  
!   /**
!    * This method returns an array of all ChangeListeners listening to this
!    * slider.
!    *
!    * @return An array of ChangeListeners listening to this slider.
!    */
!   public ChangeListener[] getChangeListeners()
!   {
!     return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
!   }
  
!   /**
!    * This method returns the model of the slider.
!    *
!    * @return The slider's model.
!    */
!   public BoundedRangeModel getModel()
!   {
!     return sliderModel;
!   }
  
!   /**
!    * This method changes the "model" property. It also needs  to unregister
!    * any listeners to the old model and register any listeners to the new
!    * model.
!    *
!    * @param model The model to use with the slider.
!    */
!   public void setModel(BoundedRangeModel model)
!   {
!     // I didn't do the null pointer check on purpose.
!     // If you try it with Sun's, it'll go ahead and set it to null
!     // and bork the next time it tries to access the model.
!     if (model != sliderModel)
!       {
! 	BoundedRangeModel oldModel = sliderModel;
! 	sliderModel = model;
! 	oldModel.removeChangeListener(changeListener);
! 	sliderModel.addChangeListener(changeListener);
! 	firePropertyChange("model", oldModel, sliderModel);
!       }
!   }
  
!   /**
!    * This method returns the minimum value of the slider.
!    *
!    * @return The minimum value of the slider.
!    */
!   public int getMinimum()
!   {
!     return sliderModel.getMinimum();
!   }
  
!   /**
!    * This method sets the minimum value of the slider.
!    *
!    * @param minimum The minimum value of the slider.
!    */
!   public void setMinimum(int minimum)
!   {
!     sliderModel.setMinimum(minimum);
!   }
  
!   /**
!    * This method returns the maximum value of the slider.
!    *
!    * @return The maximum value of the slider.
!    */
!   public int getMaximum()
!   {
!     return sliderModel.getMaximum();
!   }
  
!   /**
!    * This method sets the maximum value of the slider.
!    *
!    * @param maximum The maximum value of the slider.
!    */
!   public void setMaximum(int maximum)
!   {
!     sliderModel.setMaximum(maximum);
!   }
  
!   /**
!    * This method returns this slider's isAdjusting value which is true if the
!    * thumb is being dragged.
!    *
!    * @return The slider's isAdjusting value.
!    */
!   public boolean getValueIsAdjusting()
!   {
!     return sliderModel.getValueIsAdjusting();
!   }
  
!   /**
!    * This method sets the isAdjusting value for the slider.
!    *
!    * @param adjusting The slider's isAdjusting value.
!    */
!   public void setValueIsAdjusting(boolean adjusting)
!   {
!     sliderModel.setValueIsAdjusting(adjusting);
!   }
  
!   /**
!    * This method returns the extent value for this slider.
!    *
!    * @return The extent value for this slider.
!    */
!   public int getExtent()
!   {
!     return sliderModel.getExtent();
!   }
  
!   /**
!    * This method sets the extent value for this slider.
!    *
!    * @param extent The extent value for this slider.
!    */
!   public void setExtent(int extent)
!   {
!     sliderModel.setExtent(extent);
!   }
  
!   /**
!    * This method returns the slider orientation.
!    *
!    * @return The orientation of the slider.
!    */
!   public int getOrientation()
!   {
!     return orientation;
!   }
  
!   /**
!    * This method changes the "orientation" property of this slider. If the
!    * orientation is not VERTICAL or HORIZONTAL, this method does nothing.
!    *
!    * @param orientation The orientation of this slider.
!    */
!   public void setOrientation(int orientation)
!   {
!     if (orientation != VERTICAL && orientation != HORIZONTAL)
!       throw new IllegalArgumentException("orientation must be one of: VERTICAL, HORIZONTAL");
!     if (orientation != this.orientation)
!       {
! 	int oldOrientation = this.orientation;
! 	this.orientation = orientation;
! 	firePropertyChange("orientation", oldOrientation,
! 	                   this.orientation);
!       }
!   }
  
!   /**
!    * This method returns the label table for this slider.
!    *
!    * @return The label table for this slider.
!    */
!   public Dictionary getLabelTable()
!   {
!     return labelTable;
!   }
  
!   /**
!    * This method changes the "labelTable" property of this slider.
!    *
!    * @param table The label table for this slider.
!    */
!   public void setLabelTable(Dictionary table)
!   {
!     if (table != labelTable)
!       {
! 	Dictionary oldTable = labelTable;
! 	labelTable = table;
! 	firePropertyChange("labelTable", oldTable, labelTable);
!       }
!   }
  
!   /**
!    * This method is called to reset UI delegates for the labels in the
!    * labelTable to a default for the current look and feel.
!    */
!   protected void updateLabelUIs()
!   {
!     if (labelTable == null)
!       return;
!     for (Enumeration list = labelTable.elements(); list.hasMoreElements();)
!       {
! 	JLabel label = (JLabel) list.nextElement();
! 	label.updateUI();
!       }
!   }
  
!   /**
!    * Creates a hashtable of (Integer, JLabel) pairs that can be used as a
!    * label table for this slider. The labels will start from the sliders
!    * minimum and increase by the increment. Each  label will have a text
!    * string indicating their integer value.
!    *
!    * @param increment The increment to between labels.
!    *
!    * @return A hashtable with the labels and their keys.
!    */
!   public Hashtable createStandardLabels(int increment)
!   {
!     return createStandardLabels(increment, sliderModel.getMinimum());
!   }
  
!   /**
!    * Creates a hashtable of (Integer, JLabel) pairs that can be used as a
!    * label table for this slider. The labels will start from the given start
!    * value and increase by the increment. Each  label will have a text string
!    * indicating their integer value.
!    *
!    * @param increment The increment to between labels.
!    * @param start The value to start from.
!    *
!    * @return A hashtable with the labels and their keys.
!    */
!   public Hashtable createStandardLabels(int increment, int start)
!   {
!     Hashtable table = new Hashtable();
!     JLabel label;
!     Dimension dim;
  
!     int max = sliderModel.getMaximum();
  
!     for (int i = start; i <= max; i += increment)
!       {
! 	label = new JLabel(String.valueOf(i));
! 	label.setVerticalAlignment(CENTER);
! 	label.setHorizontalAlignment(CENTER);
! 	
! 	// Make sure these labels have the width and height
! 	// they want.
! 	dim = label.getPreferredSize();
! 	label.setBounds(label.getX(), label.getY(),
! 	                (int) dim.getWidth(),
! 			(int) dim.getHeight()); 
! 	table.put(new Integer(i), label);
!       }
!     return table;
!   }
  
!   /**
!    * This method returns whether the slider is inverted. Horizontal sliders
!    * that are not inverted will have the minimums on the left. If they are
!    * inverted, the minimums will be  on the right. Vertical sliders that are
!    * not inverted will have the minimums at the bottom. If they are inverted,
!    * the minimums will be at the top.
!    *
!    * @return Whether this slider is inverted.
!    */
!   public boolean getInverted()
!   {
!     return isInverted;
!   }
  
!   /**
!    * This method changes the "inverted" property for this slider.Horizontal
!    * sliders  that are not inverted will have the minimums on the left. If
!    * they are inverted, the minimums will be  on the right. Vertical sliders
!    * that are not inverted will have the minimums at the bottom. If they are
!    * inverted, the minimums will be at the top. However, if the slider's
!    * componentOrientation is set to RIGHT_TO_LEFT, then everything gets
!    * reversed again.
!    *
!    * @param inverted Whether the slider should be inverted.
!    */
!   public void setInverted(boolean inverted)
!   {
!     if (isInverted != inverted)
!       {
! 	boolean oldInverted = isInverted;
! 	isInverted = inverted;
! 	firePropertyChange("inverted", oldInverted, isInverted);
!       }
!   }
  
!   /**
!    * This method returns the amount of units between each major tick mark.
!    *
!    * @return The amount of units between each major tick mark.
!    */
!   public int getMajorTickSpacing()
!   {
!     return majorTickSpacing;
!   }
  
!   /**
!    * This method changes the "majorTickSpacing" property for this slider. The
!    * major tick spacing is the amount of units between each major tick mark.
!    *
!    * @param spacing The amount of units between each major tick mark.
!    */
!   public void setMajorTickSpacing(int spacing)
!   {
!     if (majorTickSpacing != spacing)
!       {
! 	int oldSpacing = majorTickSpacing;
! 	majorTickSpacing = spacing;
! 	firePropertyChange("majorTickSpacing", oldSpacing,
! 	                   majorTickSpacing);
!       }
!   }
  
!   /**
!    * This method returns the amount of units between each minor tick mark.
!    *
!    * @return The amount of units between each minor tick mark.
!    */
!   public int getMinorTickSpacing()
!   {
!     return minorTickSpacing;
!   }
  
!   /**
!    * This method changes the "minorTickSpacing" property for this slider. The
!    * minor tick spacing is the amount of units between each minor tick mark.
!    *
!    * @param spacing The amount of units between each minor tick mark.
!    */
!   public void setMinorTickSpacing(int spacing)
!   {
!     if (minorTickSpacing != spacing)
!       {
! 	int oldSpacing = minorTickSpacing;
! 	minorTickSpacing = spacing;
! 	firePropertyChange("minorTickSpacing", oldSpacing,
! 	                   minorTickSpacing);
!       }
!   }
  
!   /**
!    * This method returns whether this slider is snapping to ticks.  Sliders
!    * that snap to ticks will automatically move the thumb to the nearest tick
!    * mark.
!    *
!    * @return Whether this slider snaps to ticks.
!    */
!   public boolean getSnapToTicks()
!   {
!     return snapToTicks;
!   }
  
!   /**
!    * This method sets whether this slider will snap to ticks. Sliders that
!    * snap to ticks will automatically move the thumb to the nearest tick
!    * mark.
!    *
!    * @param snap Whether this slider snaps to ticks.
!    */
!   public void setSnapToTicks(boolean snap)
!   {
!     if (snap != snapToTicks)
!       {
! 	snapToTicks = snap;
! 	fireStateChanged();
!       }
!   }
  
!   /**
!    * This method returns whether the slider will paint its tick marks. In
!    * addition to setting this property to true, one of minor tick spacing  or
!    * major tick spacing must be set to a value greater than 0 in order for
!    * ticks to be painted.
!    *
!    * @return Whether ticks will be painted.
!    */
!   public boolean getPaintTicks()
!   {
!     return paintTicks;
!   }
  
!   /**
!    * This method changes the "paintTicks" property for this slider. In
!    * addition to setting this property to true, one of minor tick spacing  or
!    * major tick spacing must be set to a value greater than 0 in order for
!    * ticks to be painted.
!    *
!    * @param paint Whether ticks will be painted.
!    */
!   public void setPaintTicks(boolean paint)
!   {
!     if (paint != paintTicks)
!       {
! 	boolean oldPaintTicks = paintTicks;
! 	paintTicks = paint;
! 	firePropertyChange("paintTicks", oldPaintTicks, paintTicks);
!       }
!   }
  
!   /**
!    * This method returns whether the track will be painted.
!    *
!    * @return Whether the track will be painted.
!    */
!   public boolean getPaintTrack()
!   {
!     return paintTrack;
!   }
  
!   /**
!    * This method sets whether the track will be painted.
!    *
!    * @param paint Whether the track will be painted.
!    */
!   public void setPaintTrack(boolean paint)
!   {
!     paintTrack = paint;
!   }
  
!   /**
!    * This method returns whether labels will be painted.
!    *
!    * @return Whether labels will be painted.
!    */
!   public boolean getPaintLabels()
!   {
!     return paintLabels;
!   }
  
!   /**
!    * This method changes the "paintLabels" property.
!    *
!    * @param paint Whether labels will be painted.
!    */
!   public void setPaintLabels(boolean paint)
!   {
!     if (paint != paintLabels)
!       {
! 	boolean oldPaintLabels = paintLabels;
! 	paintLabels = paint;
! 	firePropertyChange("paintLabels", oldPaintLabels, paintLabels);
!       }
!   }
  
+   /**
+    * This method is used primarily for debugging purposes and returns a string
+    * that can be used to represent this slider.
+    *
+    * @return A string representing this slider.
+    */
+   protected String paramString()
+   {
+     return "JSlider";
+   }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJSlider();
!     
!     return accessibleContext;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JSpinner.java gcc-4.0.0/libjava/javax/swing/JSpinner.java
*** gcc-3.4.3/libjava/javax/swing/JSpinner.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/JSpinner.java	Wed Feb 16 20:02:34 2005
***************
*** 0 ****
--- 1,546 ----
+ /* JSpinner.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.LayoutManager;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ import java.text.DecimalFormat;
+ import java.text.ParseException;
+ 
+ import javax.swing.border.EtchedBorder;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ import javax.swing.plaf.SpinnerUI;
+ 
+ 
+ /**
+  * A JSpinner is a component which typically contains a numeric value and a
+  * way to manipulate the value.
+  *
+  * @author Ka-Hing Cheung
+  * 
+  * @since 1.4
+  */
+ public class JSpinner extends JComponent
+ {
+   /**
+    * DOCUMENT ME!
+    */
+   public static class StubEditor extends JLabel implements ChangeListener
+   {
+     /** DOCUMENT ME! */
+     private JLabel label;
+ 
+     /** DOCUMENT ME! */
+     private JButton up;
+ 
+     /** DOCUMENT ME! */
+     private JButton down;
+ 
+     /** DOCUMENT ME! */
+     private JSpinner spinner;
+ 
+     /**
+      * Creates a new StubEditor object.
+      *
+      * @param spinner DOCUMENT ME!
+      */
+     public StubEditor(JSpinner spinner)
+     {
+       this.spinner = spinner;
+       setBorder(new EtchedBorder());
+       setHorizontalAlignment(SwingConstants.TRAILING);
+       stateChanged(null); /* fill in the label */
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param evt DOCUMENT ME!
+      */
+     public void stateChanged(ChangeEvent evt)
+     {
+       setText(String.valueOf(spinner.getValue()));
+     }
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    */
+   public static class DefaultEditor extends JPanel implements ChangeListener,
+                                                               PropertyChangeListener,
+                                                               LayoutManager
+   {
+     private JSpinner spinner;
+     
+     /**
+      * For compatability with Sun's JDK 1.4.2 rev. 5
+      */
+     private static final long serialVersionUID = -5317788736173368172L;
+ 
+     /**
+      * Creates a new <code>DefaultEditor</code> object.
+      *
+      * @param spinner the <code>JSpinner</code> associated with this editor
+      */
+     public DefaultEditor(JSpinner spinner)
+     {
+       this.spinner = spinner;
+       
+       spinner.addChangeListener(this);
+     }
+ 
+     /**
+      * Returns the <code>JSpinner</code> object for this editor.
+      */
+     public JSpinner getSpinner()
+     {
+       return spinner;
+     }
+     
+     /**
+      * DOCUMENT ME!
+      */
+     public void commitEdit()
+       throws ParseException
+     {
+     } /* TODO */
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param spinner DOCUMENT ME!
+      */
+     public void dismiss(JSpinner spinner)
+     {
+       spinner.removeChangeListener(this);
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public JFormattedTextField getTextField()
+     {
+       return null;
+     } /* TODO */
+     
+     /**
+      * DOCUMENT ME!
+      *
+      * @param parent DOCUMENT ME!
+      */
+     public void layoutContainer(Container parent)
+     {
+     } /* TODO */
+     
+     /**
+      * DOCUMENT ME!
+      *
+      * @param parent DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Dimension minimumLayoutSize(Container parent)
+     {
+       return null;
+     } /* TODO */
+     
+     /**
+      * DOCUMENT ME!
+      *
+      * @param parent DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Dimension preferredLayoutSize(Container parent)
+     {
+       return null;
+     } /* TODO */
+     
+     /**
+      * DOCUMENT ME!
+      *
+      * @param event DOCUMENT ME!
+      */
+     public void propertyChange(PropertyChangeEvent event)
+     {
+     } /* TODO */
+     
+     /**
+      * DOCUMENT ME!
+      *
+      * @param event DOCUMENT ME!
+      */
+     public void stateChanged(ChangeEvent event)
+     {
+     } /* TODO */
+     
+     /* no-ops */
+     public void removeLayoutComponent(Component child)
+     {
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param name DOCUMENT ME!
+      * @param child DOCUMENT ME!
+      */
+     public void addLayoutComponent(String name, Component child)
+     {
+     }
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    */
+   public static class NumberEditor extends DefaultEditor
+   {
+     /**
+      * For compatability with Sun's JDK
+      */
+     private static final long serialVersionUID = 3791956183098282942L;
+ 
+     /**
+      * Creates a new NumberEditor object.
+      *
+      * @param spinner DOCUMENT ME!
+      */
+     public NumberEditor(JSpinner spinner)
+     {
+       super(spinner);
+     }
+ 
+     /**
+      * Creates a new NumberEditor object.
+      *
+      * @param spinner DOCUMENT ME!
+      */
+     public NumberEditor(JSpinner spinner, String decimalFormatPattern)
+     {
+       super(spinner);
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public DecimalFormat getFormat()
+     {
+       return null;
+     }
+ 
+     public SpinnerNumberModel getModel()
+     {
+       return (SpinnerNumberModel) getSpinner().getModel();
+     }
+   }
+ 
+   /** DOCUMENT ME! */
+   private SpinnerModel model;
+ 
+   /** DOCUMENT ME! */
+   private JComponent editor;
+ 
+   /** DOCUMENT ME! */
+   private ChangeListener listener = new ChangeListener()
+     {
+       public void stateChanged(ChangeEvent evt)
+       {
+ 	fireStateChanged();
+       }
+     };
+ 
+   /**
+    * Creates a JSpinner with <code>SpinnerNumberModel</code>
+    *
+    * @see javax.swing.SpinnerNumberModel
+    */
+   public JSpinner()
+   {
+     this(new SpinnerNumberModel());
+   }
+ 
+   /**
+    * Creates a JSpinner with the specific model and sets the default editor
+    *
+    * @param model DOCUMENT ME!
+    */
+   public JSpinner(SpinnerModel model)
+   {
+     this.model = model;
+     model.addChangeListener(listener);
+     setEditor(createEditor(model));
+     updateUI();
+   }
+ 
+   /**
+    * If the editor is <code>JSpinner.DefaultEditor</code>, then forwards the
+    * call to it, otherwise do nothing.
+    *
+    * @throws ParseException DOCUMENT ME!
+    */
+   public void commitEdit() throws ParseException
+   {
+     if (editor instanceof DefaultEditor)
+       ((DefaultEditor) editor).commitEdit();
+   }
+ 
+   /**
+    * Gets the current editor
+    *
+    * @return the current editor
+    *
+    * @see #setEditor
+    */
+   public JComponent getEditor()
+   {
+     return editor;
+   }
+ 
+   /**
+    * Changes the current editor to the new editor. This methods should remove
+    * the old listeners (if any) and adds the new listeners (if any).
+    *
+    * @param editor the new editor
+    *
+    * @throws IllegalArgumentException DOCUMENT ME!
+    *
+    * @see #getEditor
+    */
+   public void setEditor(JComponent editor)
+   {
+     if (editor == null)
+       throw new IllegalArgumentException("editor may not be null");
+ 
+     if (this.editor instanceof DefaultEditor)
+       ((DefaultEditor) editor).dismiss(this);
+     else if (this.editor instanceof ChangeListener)
+       removeChangeListener((ChangeListener) this.editor);
+ 
+     if (editor instanceof ChangeListener)
+       addChangeListener((ChangeListener) editor);
+ 
+     this.editor = editor;
+   }
+ 
+   /**
+    * Gets the underly model.
+    *
+    * @return the underly model
+    */
+   public SpinnerModel getModel()
+   {
+     return model;
+   }
+ 
+   /**
+    * Sets a new underlying model.
+    *
+    * @param newModel the new model to set
+    *
+    * @exception IllegalArgumentException if newModel is <code>null</code>
+    */
+   public void setModel(SpinnerModel newModel)
+   {
+     if (newModel == null)
+       throw new IllegalArgumentException();
+     
+     if (model == newModel)
+       return;
+ 
+     SpinnerModel oldModel = model;
+     model = newModel;
+     firePropertyChange("model", oldModel, newModel);
+ 
+     if (editor == null)
+       setEditor(createEditor(model));
+   }
+ 
+   /**
+    * Gets the next value without changing the current value.
+    *
+    * @return the next value
+    *
+    * @see javax.swing.SpinnerModel#getNextValue
+    */
+   public Object getNextValue()
+   {
+     return model.getNextValue();
+   }
+ 
+   /**
+    * Gets the previous value without changing the current value.
+    *
+    * @return the previous value
+    *
+    * @see javax.swing.SpinnerModel#getPreviousValue
+    */
+   public Object getPreviousValue()
+   {
+     return model.getPreviousValue();
+   }
+ 
+   /**
+    * Gets the <code>SpinnerUI</code> that handles this spinner
+    *
+    * @return the <code>SpinnerUI</code>
+    */
+   public SpinnerUI getUI()
+   {
+     return (SpinnerUI) ui;
+   }
+ 
+   /**
+    * Gets the current value of the spinner, according to the underly model,
+    * not the UI.
+    *
+    * @return the current value
+    *
+    * @see javax.swing.SpinnerModel#getValue
+    */
+   public Object getValue()
+   {
+     return model.getValue();
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @param value DOCUMENT ME!
+    */
+   public void setValue(Object value)
+   {
+     model.setValue(value);
+   }
+ 
+   /**
+    * This method returns a name to identify which look and feel class will be
+    * the UI delegate for this spinner.
+    *
+    * @return The UIClass identifier. "SpinnerUI"
+    */
+   public String getUIClassID()
+   {
+     return "SpinnerUI";
+   }
+ 
+   /**
+    * This method resets the spinner's UI delegate to the default UI for the
+    * current look and feel.
+    */
+   public void updateUI()
+   {
+     setUI((SpinnerUI) UIManager.getUI(this));
+   }
+ 
+   /**
+    * This method sets the spinner's UI delegate.
+    *
+    * @param ui The spinner's UI delegate.
+    */
+   public void setUI(SpinnerUI ui)
+   {
+     super.setUI(ui);
+   }
+ 
+   /**
+    * Adds a <code>ChangeListener</code>
+    *
+    * @param listener the listener to add
+    */
+   public void addChangeListener(ChangeListener listener)
+   {
+     listenerList.add(ChangeListener.class, listener);
+   }
+ 
+   /**
+    * Remove a particular listener
+    *
+    * @param listener the listener to remove
+    */
+   public void removeChangeListener(ChangeListener listener)
+   {
+     listenerList.remove(ChangeListener.class, listener);
+   }
+ 
+   /**
+    * Gets all the <code>ChangeListener</code>s
+    *
+    * @return all the <code>ChangeListener</code>s
+    */
+   public ChangeListener[] getChangeListeners()
+   {
+     return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
+   }
+ 
+   /**
+    * Fires a <code>ChangeEvent</code> to all the <code>ChangeListener</code>s
+    * added to this <code>JSpinner</code>
+    */
+   protected void fireStateChanged()
+   {
+     ChangeEvent evt = new ChangeEvent(this);
+     ChangeListener[] listeners = getChangeListeners();
+ 
+     for (int i = 0; i < listeners.length; ++i)
+       listeners[i].stateChanged(evt);
+   }
+ 
+   /**
+    * Creates an editor for this <code>JSpinner</code>. Really, it should be a
+    * <code>JSpinner.DefaultEditor</code>, but since that should be
+    * implemented by a JFormattedTextField, and one is not written, I am just
+    * using a dummy one backed by a JLabel.
+    *
+    * @param model DOCUMENT ME!
+    *
+    * @return the default editor
+    */
+   protected JComponent createEditor(SpinnerModel model)
+   {
+     return new StubEditor(this);
+   } /* TODO */}
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JSplitPane.java gcc-4.0.0/libjava/javax/swing/JSplitPane.java
*** gcc-3.4.3/libjava/javax/swing/JSplitPane.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/JSplitPane.java	Tue Nov 30 23:58:58 2004
***************
*** 1,5 ****
! /* JSplitPane.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JSplitPane.java -- 
!    Copyright (C) 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Graphics;
! import java.io.IOException;
! import java.io.ObjectOutputStream;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
--- 35,46 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Graphics;
! 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
*************** import javax.accessibility.AccessibleVal
*** 49,648 ****
  import javax.swing.plaf.SplitPaneUI;
  
  /**
!  * JSplitPane
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JSplitPane extends JComponent implements Accessible {
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleJSplitPane
! 	 */
! 	protected class AccessibleJSplitPane extends AccessibleJComponent 
! 			implements AccessibleValue {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJSplitPane
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJSplitPane(JSplitPane component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJSplitPane()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getAccessibleStateSet
! 		 * @returns AccessibleStateSet
! 		 */
! 		public AccessibleStateSet getAccessibleStateSet() {
! 			return null; // TODO
! 		} // getAccessibleStateSet()
! 
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.SPLIT_PANE;
! 		} // getAccessibleRole()
! 
! 		/**
! 		 * getAccessibleValue
! 		 * @returns AccessibleValue
! 		 */
! 		public AccessibleValue getAccessibleValue() {
! 			return null; // TODO
! 		} // getAccessibleValue()
! 
! 		/**
! 		 * getCurrentAccessibleValue
! 		 * @returns Number
! 		 */
! 		public Number getCurrentAccessibleValue() {
! 			return null; // TODO
! 		} // getCurrentAccessibleValue()
! 
! 		/**
! 		 * setCurrentAccessibleValue
! 		 * @param value0 TODO
! 		 * @returns boolean
! 		 */
! 		public boolean setCurrentAccessibleValue(Number value0) {
! 			return false; // TODO
! 		} // setCurrentAccessibleValue()
! 
! 		/**
! 		 * getMinimumAccessibleValue
! 		 * @returns Number
! 		 */
! 		public Number getMinimumAccessibleValue() {
! 			return null; // TODO
! 		} // getMinimumAccessibleValue()
  
! 		/**
! 		 * getMaximumAccessibleValue
! 		 * @returns Number
! 		 */
! 		public Number getMaximumAccessibleValue() {
! 			return null; // TODO
! 		} // getMaximumAccessibleValue()
  
  
! 	} // AccessibleJSplitPane
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "SplitPaneUI";
  
! 	/**
! 	 * VERTICAL_SPLIT
! 	 */
! 	public static final int VERTICAL_SPLIT = 0;
  
! 	/**
! 	 * HORIZONTAL_SPLIT
! 	 */
! 	public static final int HORIZONTAL_SPLIT = 1;
  
! 	/**
! 	 * LEFT
! 	 */
! 	public static final String LEFT = "left";
  
! 	/**
! 	 * RIGHT
! 	 */
! 	public static final String RIGHT = "right";
  
! 	/**
! 	 * TOP
! 	 */
! 	public static final String TOP = "top";
  
! 	/**
! 	 * BOTTOM
! 	 */
! 	public static final String BOTTOM = "bottom";
  
! 	/**
! 	 * DIVIDER
! 	 */
! 	public static final String DIVIDER = "divider";
  
! 	/**
! 	 * ORIENTATION_PROPERTY
! 	 */
! 	public static final String ORIENTATION_PROPERTY = "orientation";
  
! 	/**
! 	 * CONTINUOUS_LAYOUT_PROPERTY
! 	 */
! 	public static final String CONTINUOUS_LAYOUT_PROPERTY = "continuousLayout";
  
! 	/**
! 	 * DIVIDER_SIZE_PROPERTY
! 	 */
! 	public static final String DIVIDER_SIZE_PROPERTY = "dividerSize";
  
! 	/**
! 	 * ONE_TOUCH_EXPANDABLE_PROPERTY
! 	 */
! 	public static final String ONE_TOUCH_EXPANDABLE_PROPERTY = "oneTouchExpandable";
  
! 	/**
! 	 * LAST_DIVIDER_LOCATION_PROPERTY
! 	 */
! 	public static final String LAST_DIVIDER_LOCATION_PROPERTY = "lastDividerLocation";
  
! 	/**
! 	 * DIVIDER_LOCATION_PROPERTY
! 	 */
! 	public static final String DIVIDER_LOCATION_PROPERTY = "dividerLocation";
  
! 	/**
! 	 * RESIZE_WEIGHT_PROPERTY
! 	 */
! 	public static final String RESIZE_WEIGHT_PROPERTY = "resizeWeight";
  
! 	/**
! 	 * orientation
! 	 */
! 	protected int orientation;
  
! 	/**
! 	 * continuousLayout
! 	 */
! 	protected boolean continuousLayout;
  
! 	/**
! 	 * leftComponent
! 	 */
! 	protected Component leftComponent;
  
! 	/**
! 	 * rightComponent
! 	 */
! 	protected Component rightComponent;
  
! 	/**
! 	 * dividerSize
! 	 */
! 	protected int dividerSize;
  
! 	/**
! 	 * oneTouchExpandable
! 	 */
! 	protected boolean oneTouchExpandable;
  
! 	/**
! 	 * lastDividerLocation
! 	 */
! 	protected int lastDividerLocation;
  
! 	/**
! 	 * resizeWeight
! 	 */
! 	private double resizeWeight;
  
! 	/**
! 	 * dividerLocation
! 	 */
! 	private int dividerLocation;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JSplitPane
! 	 */
! 	public JSplitPane() {
! 		// TODO
! 	} // JSplitPane()
  
! 	/**
! 	 * Constructor JSplitPane
! 	 * @param value0 TODO
! 	 */
! 	public JSplitPane(int value0) {
! 		// TODO
! 	} // JSplitPane()
  
! 	/**
! 	 * Constructor JSplitPane
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public JSplitPane(int value0, boolean value1) {
! 		// TODO
! 	} // JSplitPane()
  
! 	/**
! 	 * Constructor JSplitPane
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 */
! 	public JSplitPane(int value0, Component value1, Component value2) {
! 		// TODO
! 	} // JSplitPane()
  
! 	/**
! 	 * Constructor JSplitPane
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 * @param value3 TODO
! 	 */
! 	public JSplitPane(int value0, boolean value1, Component value2, Component value3) {
! 		// TODO
! 	} // JSplitPane()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * remove
! 	 * @param value0 TODO
! 	 */
! 	public void remove(Component value0) {
! 		// TODO
! 	} // remove()
  
! 	/**
! 	 * remove
! 	 * @param value0 TODO
! 	 */
! 	public void remove(int value0) {
! 		// TODO
! 	} // remove()
  
! 	/**
! 	 * removeAll
! 	 */
! 	public void removeAll() {
! 		// TODO
! 	} // removeAll()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(SplitPaneUI ui) {
! 		super.setUI(ui);
! 	} // setUI()
  
! 	/**
! 	 * getUI
! 	 * @returns SplitPaneUI
! 	 */
! 	public SplitPaneUI getUI() {
! 		return (SplitPaneUI) ui;
! 	} // getUI()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((SplitPaneUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * setDividerSize
! 	 * @param value0 TODO
! 	 */
! 	public void setDividerSize(int value0) {
! 		// TODO
! 	} // setDividerSize()
  
! 	/**
! 	 * getDividerSize
! 	 * @returns int
! 	 */
! 	public int getDividerSize() {
! 		return 0; // TODO
! 	} // getDividerSize()
  
! 	/**
! 	 * setLeftComponent
! 	 * @param value0 TODO
! 	 */
! 	public void setLeftComponent(Component value0) {
! 		// TODO
! 	} // setLeftComponent()
  
! 	/**
! 	 * getLeftComponent
! 	 * @returns Component
! 	 */
! 	public Component getLeftComponent() {
! 		return null; // TODO
! 	} // getLeftComponent()
  
! 	/**
! 	 * setTopComponent
! 	 * @param value0 TODO
! 	 */
! 	public void setTopComponent(Component value0) {
! 		// TODO
! 	} // setTopComponent()
  
! 	/**
! 	 * getTopComponent
! 	 * @returns Component
! 	 */
! 	public Component getTopComponent() {
! 		return null; // TODO
! 	} // getTopComponent()
  
! 	/**
! 	 * setRightComponent
! 	 * @param value0 TODO
! 	 */
! 	public void setRightComponent(Component value0) {
! 		// TODO
! 	} // setRightComponent()
  
! 	/**
! 	 * getRightComponent
! 	 * @returns Component
! 	 */
! 	public Component getRightComponent() {
! 		return null; // TODO
! 	} // getRightComponent()
  
! 	/**
! 	 * setBottomComponent
! 	 * @param value0 TODO
! 	 */
! 	public void setBottomComponent(Component value0) {
! 		// TODO
! 	} // setBottomComponent()
  
! 	/**
! 	 * getBottomComponent
! 	 * @returns Component
! 	 */
! 	public Component getBottomComponent() {
! 		return null; // TODO
! 	} // getBottomComponent()
  
! 	/**
! 	 * setOneTouchExpandable
! 	 * @param value0 TODO
! 	 */
! 	public void setOneTouchExpandable(boolean value0) {
! 		// TODO
! 	} // setOneTouchExpandable()
  
! 	/**
! 	 * isOneTouchExpandable
! 	 * @returns boolean
! 	 */
! 	public boolean isOneTouchExpandable() {
! 		return false; // TODO
! 	} // isOneTouchExpandable()
  
! 	/**
! 	 * setLastDividerLocation
! 	 * @param value0 TODO
! 	 */
! 	public void setLastDividerLocation(int value0) {
! 		// TODO
! 	} // setLastDividerLocation()
  
! 	/**
! 	 * getLastDividerLocation
! 	 * @returns int
! 	 */
! 	public int getLastDividerLocation() {
! 		return 0; // TODO
! 	} // getLastDividerLocation()
  
! 	/**
! 	 * setOrientation
! 	 * @param value0 TODO
! 	 */
! 	public void setOrientation(int value0) {
! 		// TODO
! 	} // setOrientation()
  
! 	/**
! 	 * getOrientation
! 	 * @returns int
! 	 */
! 	public int getOrientation() {
! 		return 0; // TODO
! 	} // getOrientation()
  
! 	/**
! 	 * setContinuousLayout
! 	 * @param value0 TODO
! 	 */
! 	public void setContinuousLayout(boolean value0) {
! 		// TODO
! 	} // setContinuousLayout()
  
! 	/**
! 	 * isContinuousLayout
! 	 * @returns boolean
! 	 */
! 	public boolean isContinuousLayout() {
! 		return false; // TODO
! 	} // isContinuousLayout()
  
! 	/**
! 	 * setResizeWeight
! 	 * @param value0 TODO
! 	 */
! 	public void setResizeWeight(double value0) {
! 		// TODO
! 	} // setResizeWeight()
  
! 	/**
! 	 * getResizeWeight
! 	 * @returns double
! 	 */
! 	public double getResizeWeight() {
! 		return 0.0; // TODO
! 	} // getResizeWeight()
  
! 	/**
! 	 * resetToPreferredSizes
! 	 */
! 	public void resetToPreferredSizes() {
! 		// TODO
! 	} // resetToPreferredSizes()
  
! 	/**
! 	 * setDividerLocation
! 	 * @param value0 TODO
! 	 */
! 	public void setDividerLocation(double value0) {
! 		// TODO
! 	} // setDividerLocation()
  
! 	/**
! 	 * setDividerLocation
! 	 * @param value0 TODO
! 	 */
! 	public void setDividerLocation(int value0) {
! 		// TODO
! 	} // setDividerLocation()
  
! 	/**
! 	 * getDividerLocation
! 	 * @returns int
! 	 */
! 	public int getDividerLocation() {
! 		return 0; // TODO
! 	} // getDividerLocation()
  
! 	/**
! 	 * getMinimumDividerLocation
! 	 * @returns int
! 	 */
! 	public int getMinimumDividerLocation() {
! 		return 0; // TODO
! 	} // getMinimumDividerLocation()
  
! 	/**
! 	 * getMaximumDividerLocation
! 	 * @returns int
! 	 */
! 	public int getMaximumDividerLocation() {
! 		return 0; // TODO
! 	} // getMaximumDividerLocation()
  
! 	/**
! 	 * isValidateRoot
! 	 * @returns boolean
! 	 */
! 	public boolean isValidateRoot() {
! 		return false; // TODO
! 	} // isValidateRoot()
  
! 	/**
! 	 * addImpl
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 */
! 	protected void addImpl(Component value0, Object value1, int value2) {
! 		// TODO
! 	} // addImpl()
  
! 	/**
! 	 * paintChildren
! 	 * @param value0 TODO
! 	 */
! 	protected void paintChildren(Graphics value0) {
! 		// TODO
! 	} // paintChildren()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJSplitPane(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JSplitPane
--- 49,815 ----
  import javax.swing.plaf.SplitPaneUI;
  
  /**
!  * This class implements JSplitPane. It is used to divide two components. By
!  * dragging the SplitPane's divider, the user can resize the two components.
!  * Note that the divider cannot resize a component to smaller than it's
!  * minimum size.
   */
! public class JSplitPane extends JComponent implements Accessible
! {
!   /**
!    * DOCUMENT ME!
!    */
!   protected class AccessibleJSplitPane extends JComponent.AccessibleJComponent
!     implements AccessibleValue
!   {
!   private static final long serialVersionUID = -1788116871416305366L;
!   
!     /**
!      * Creates a new AccessibleJSplitPane object.
!      *
!      * @param value0 DOCUMENT ME!
!      */
!     protected AccessibleJSplitPane()
!     {
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public AccessibleStateSet getAccessibleStateSet()
!     {
!       return null;
!     }
  
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return null;
+     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public AccessibleValue getAccessibleValue()
!     {
!       return null;
!     }
  
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Number getCurrentAccessibleValue()
+     {
+       return null;
+     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param value0 DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public boolean setCurrentAccessibleValue(Number value0)
!     {
!       return false;
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public Number getMinimumAccessibleValue()
!     {
!       return null;
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public Number getMaximumAccessibleValue()
!     {
!       return null;
!     }
!   }
  
!   private static final long serialVersionUID = -5634142046175988380L;
!   
!   /** The constraints string used to add components to the bottom. */
!   public static final String BOTTOM = "bottom";
  
!   /** The property fired when the continuousLayout property changes. */
!   public static final String CONTINUOUS_LAYOUT_PROPERTY = "continuousLayout";
  
!   /** The property fired when the divider property changes. */
!   public static final String DIVIDER = "divider";
  
!   /** The property fired when the divider location property changes. */
!   public static final String DIVIDER_LOCATION_PROPERTY = "dividerLocation";
  
!   /** The property fired when the divider size property changes. */
!   public static final String DIVIDER_SIZE_PROPERTY = "dividerSize";
  
!   /**
!    * The value of the orientation when the components are split horizontally.
!    */
!   public static final int HORIZONTAL_SPLIT = 1;
  
!   /** The property fired when the last divider location property changes. */
!   public static final String LAST_DIVIDER_LOCATION_PROPERTY = "lastDividerLocation";
  
!   /** The constraints string used to add components to the left. */
!   public static final String LEFT = "left";
  
!   /** The property fired when the one touch expandable property changes. */
!   public static final String ONE_TOUCH_EXPANDABLE_PROPERTY = "oneTouchExpandable";
  
!   /** The property fired when the orientation property changes. */
!   public static final String ORIENTATION_PROPERTY = "orientation";
  
!   /** The property fired when the resize weight property changes. */
!   public static final String RESIZE_WEIGHT_PROPERTY = "resizeWeight";
  
!   /** The constraints string used to add components to the right. */
!   public static final String RIGHT = "right";
  
!   /** The constraints string used to add components to the top. */
!   public static final String TOP = "top";
  
!   /** The value of the orientation when the components are split vertically. */
!   public static final int VERTICAL_SPLIT = 0;
  
!   /** Whether the JSplitPane uses continuous layout. */
!   protected boolean continuousLayout;
  
!   /** Whether the JSplitPane uses one touch expandable buttons. */
!   protected boolean oneTouchExpandable = false;
  
!   // This is the master dividerSize variable and sets the BasicSplitPaneDivider one accordingly
  
!   /** The size of the divider. */
!   protected int dividerSize = 10;
  
!   /** The last location of the divider given by the UI. */
!   protected int lastDividerLocation;
  
!   /** The orientation of the JSplitPane. */
!   protected int orientation;
  
!   /** The component on the top or left. */
!   protected Component leftComponent;
  
!   /** The component on the right or bottom. */
!   protected Component rightComponent;
  
+   /** Determines how extra space should be allocated. */
+   private transient double resizeWeight;
  
!   /**
!    * Creates a new JSplitPane object with the given orientation, layout mode,
!    * and left and right components.
!    *
!    * @param newOrientation The orientation to use.
!    * @param newContinuousLayout The layout mode to use.
!    * @param newLeftComponent The left component.
!    * @param newRightComponent The right component.
!    *
!    * @throws IllegalArgumentException DOCUMENT ME!
!    */
!   public JSplitPane(int newOrientation, boolean newContinuousLayout,
!                     Component newLeftComponent, Component newRightComponent)
!   {
!     if (newOrientation != HORIZONTAL_SPLIT && newOrientation != VERTICAL_SPLIT)
!       throw new IllegalArgumentException("orientation is invalid.");
!     orientation = newOrientation;
!     continuousLayout = newContinuousLayout;
!     setLeftComponent(newLeftComponent);
!     setRightComponent(newRightComponent);
  
!     updateUI();
!   }
  
!   /**
!    * Creates a new JSplitPane object using nonContinuousLayout mode, the given
!    * orientation and left and right components.
!    *
!    * @param newOrientation The orientation to use.
!    * @param newLeftComponent The left component.
!    * @param newRightComponent The right component.
!    */
!   public JSplitPane(int newOrientation, Component newLeftComponent,
!                     Component newRightComponent)
!   {
!     this(newOrientation, false, newLeftComponent, newRightComponent);
!   }
  
!   /**
!    * Creates a new JSplitPane object with the given layout mode and
!    * orientation.
!    *
!    * @param newOrientation The orientation to use.
!    * @param newContinuousLayout The layout mode to use.
!    */
!   public JSplitPane(int newOrientation, boolean newContinuousLayout)
!   {
!     this(newOrientation, newContinuousLayout, null, null);
!   }
  
!   /**
!    * Creates a new JSplitPane object using a nonContinuousLayout mode and the
!    * given orientation.
!    *
!    * @param newOrientation The orientation to use.
!    */
!   public JSplitPane(int newOrientation)
!   {
!     this(newOrientation, false, null, null);
!   }
  
!   /**
!    * Creates a new JSplitPane object using HORIZONTAL_SPLIT and a
!    * nonContinuousLayout mode.
!    */
!   public JSplitPane()
!   {
!     this(HORIZONTAL_SPLIT, false, null, null);
!   }
  
+   /**
+    * This method adds a component to the JSplitPane. The constraints object is
+    * a string that identifies where this component should go. If the
+    * constraints is not a known one, it will throw an
+    * IllegalArgumentException. The valid constraints are LEFT, TOP, RIGHT,
+    * BOTTOM and DIVIDER.
+    *
+    * @param comp The component to add.
+    * @param constraints The constraints string to use.
+    * @param index Where to place to component in the list of components.
+    *
+    * @throws IllegalArgumentException When the constraints is not a known identifier.
+    */
+   protected void addImpl(Component comp, Object constraints, int index)
+   {
+     int left = 0;
+     int right = 1;
+     int div = 2;
+     int place;
+     if (constraints == null)
+       {
+ 	if (leftComponent == null)
+ 	  constraints = LEFT;
+ 	else if (rightComponent == null)
+ 	  constraints = RIGHT;
+       }
  
!     if (constraints instanceof String)
!       {
! 	String placement = (String) constraints;
  
! 	if (placement.equals(BOTTOM) || placement.equals(RIGHT))
! 	  {
! 	    if (rightComponent != null)
! 		remove(rightComponent);
! 	    rightComponent = comp;
! 	  }
! 	else if (placement.equals(LEFT) || placement.equals(TOP))
! 	  {
! 	    if (leftComponent != null)
! 	      remove(leftComponent);
! 	    leftComponent = comp;
! 	  }
! 	else if (placement.equals(DIVIDER))
! 	  constraints = null;
! 	else
! 	  throw new IllegalArgumentException("Constraints is not a known identifier.");
  
! 	super.addImpl(comp, constraints, index);
!       }
!     invalidate();
!     layout();
!   }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     if (accessibleContext == null)
!       accessibleContext = new AccessibleJSplitPane();
!     
!     return accessibleContext;
!   }
  
!   /**
!    * This method returns the bottom component.
!    *
!    * @return The bottom component.
!    */
!   public Component getBottomComponent()
!   {
!     return rightComponent;
!   }
  
!   /**
!    * This method returns the location of the divider. This method is passed to
!    * the UI.
!    *
!    * @return The location of the divider.
!    */
!   public int getDividerLocation()
!   {
!     if (ui != null)
!       return ((SplitPaneUI) ui).getDividerLocation(this);
!     else
!       return -1;
!   }
  
!   /**
!    * This method returns the size of the divider.
!    *
!    * @return The size of the divider.
!    */
!   public int getDividerSize()
!   {
!     return dividerSize;
!   }
  
!   /**
!    * This method returns the last divider location.
!    *
!    * @return The last divider location.
!    */
!   public int getLastDividerLocation()
!   {
!     return lastDividerLocation;
!   }
  
!   /**
!    * This method returns the left component.
!    *
!    * @return The left component.
!    */
!   public Component getLeftComponent()
!   {
!     return leftComponent;
!   }
  
!   /**
!    * This method returns the maximum divider location. This method is passed
!    * to  the UI.
!    *
!    * @return DOCUMENT ME!
!    */
!   public int getMaximumDividerLocation()
!   {
!     if (ui != null)
!       return ((SplitPaneUI) ui).getMaximumDividerLocation(this);
!     else
!       return -1;
!   }
  
!   /**
!    * This method returns the minimum divider location. This method is passed
!    * to the UI.
!    *
!    * @return The minimum divider location.
!    */
!   public int getMinimumDividerLocation()
!   {
!     if (ui != null)
!       return ((SplitPaneUI) ui).getMinimumDividerLocation(this);
!     else
!       return -1;
!   }
  
!   /**
!    * This method returns the orientation that the JSplitPane is using.
!    *
!    * @return The current orientation.
!    */
!   public int getOrientation()
!   {
!     return orientation;
!   }
  
!   /**
!    * This method returns the current resize weight.
!    *
!    * @return The current resize weight.
!    */
!   public double getResizeWeight()
!   {
!     return resizeWeight;
!   }
  
!   /**
!    * This method returns the right component.
!    *
!    * @return The right component.
!    */
!   public Component getRightComponent()
!   {
!     return rightComponent;
!   }
  
!   /**
!    * This method returns the top component.
!    *
!    * @return The top component.
!    */
!   public Component getTopComponent()
!   {
!     return leftComponent;
!   }
  
!   /**
!    * This method returns the UI.
!    *
!    * @return The UI.
!    */
!   public SplitPaneUI getUI()
!   {
!     return (SplitPaneUI) ui;
!   }
  
!   /**
!    * This method returns true if the JSplitPane is using a continuousLayout.
!    *
!    * @return True if using a continuousLayout.
!    */
!   public boolean isContinuousLayout()
!   {
!     return continuousLayout;
!   }
  
!   /**
!    * This method returns true if the divider has one touch expandable buttons.
!    *
!    * @return True if one touch expandable is used.
!    */
!   public boolean isOneTouchExpandable()
!   {
!     return oneTouchExpandable;
!   }
  
!   /**
!    * This method returns true.
!    *
!    * @return true.
!    */
!   public boolean isValidateRoot()
!   {
!     return true;
!   }
  
!   /**
!    * This method overrides JComponent's paintChildren so the UI can be
!    * messaged when the children have finished painting.
!    *
!    * @param g The Graphics object to paint with.
!    */
!   protected void paintChildren(Graphics g)
!   {
!     super.paintChildren(g);
!     if (ui != null)
!       ((SplitPaneUI) ui).finishedPaintingChildren(this, g);
!   }
  
!   /**
!    * This method returns a String that describes this JSplitPane. The string
!    * is primarily used for debugging purposes.
!    *
!    * @return A String used for debugging purposes.
!    */
!   protected String paramString()
!   {
!     return "JSplitPane";
!   }
  
!   /**
!    * This method removes the given component from the JSplitPane.
!    *
!    * @param component The Component to remove.
!    */
!   public void remove(Component component)
!   {
!     if (component == leftComponent)
!       leftComponent = null;
!     else if (component == rightComponent)
!       rightComponent = null;
!     super.remove(component);
!   }
  
!   /**
!    * This method removes the component at the given index.
!    *
!    * @param index The index of the component to remove.
!    */
!   public void remove(int index)
!   {
!     Component component = getComponent(index);
!     if (component == leftComponent)
!       leftComponent = null;
!     else if (component == rightComponent)
!       rightComponent = null;
!     super.remove(index);
!   }
  
!   /**
!    * This method removes all components from the JSplitPane.
!    */
!   public void removeAll()
!   {
!     leftComponent = null;
!     rightComponent = null;
!     super.removeAll();
!   }
  
!   /**
!    * This method resets all children of the JSplitPane to their preferred
!    * sizes.
!    */
!   public void resetToPreferredSizes()
!   {
!     if (ui != null)
!       ((SplitPaneUI) ui).resetToPreferredSizes(this);
!   }
  
!   /**
!    * This method sets the bottom component.
!    *
!    * @param comp The Component to be placed at the bottom.
!    */
!   public void setBottomComponent(Component comp)
!   {
!     if (comp != null)
!       add(comp, BOTTOM);
!     else
!       add(new JButton("right button"), BOTTOM);
!   }
  
!   /**
!    * This method sets the layout mode for the JSplitPane.
!    *
!    * @param newContinuousLayout Whether the JSplitPane is in continuousLayout
!    *        mode.
!    */
!   public void setContinuousLayout(boolean newContinuousLayout)
!   {
!     if (newContinuousLayout != continuousLayout)
!       {
! 	boolean oldValue = continuousLayout;
! 	continuousLayout = newContinuousLayout;
! 	firePropertyChange(CONTINUOUS_LAYOUT_PROPERTY, oldValue,
! 	                   continuousLayout);
!       }
!   }
  
!   /**
!    * This method sets the location of the divider. A value of 0 sets the
!    * divider to the farthest left. A value of 1 sets the divider to the
!    * farthest right.
!    *
!    * @param proportionalLocation A double that describes the location of the
!    *        divider.
!    *
!    * @throws IllegalArgumentException DOCUMENT ME!
!    */
!   public void setDividerLocation(double proportionalLocation)
!   {
!     if (proportionalLocation > 1 || proportionalLocation < 0)
!       throw new IllegalArgumentException("proportion has to be between 0 and 1.");
  
!     int max = (orientation == HORIZONTAL_SPLIT) ? getWidth() : getHeight();
!     setDividerLocation((int) (proportionalLocation * max));
!   }
  
!   /**
!    * This method sets the location of the divider.
!    *
!    * @param location The location of the divider.
!    */
!   public void setDividerLocation(int location)
!   {
!     if (ui != null && location != getDividerLocation())
!       {
! 	int oldLocation = getDividerLocation();
! 	((SplitPaneUI) ui).setDividerLocation(this, location);
! 	firePropertyChange(DIVIDER_LOCATION_PROPERTY, oldLocation, location);
!       }
!   }
  
!   /**
!    * This method sets the size of the divider.
!    *
!    * @param newSize The size of the divider.
!    */
!   public void setDividerSize(int newSize)
!   {
!     if (newSize != dividerSize)
!       {
! 	int oldSize = dividerSize;
! 	dividerSize = newSize;
! 	firePropertyChange(DIVIDER_SIZE_PROPERTY, oldSize, dividerSize);
!       }
!   }
  
!   // This doesn't appear to do anything when set from user side.
!   // so it probably is only used from the UI side to change the
!   // lastDividerLocation var.
  
!   /**
!    * This method sets the last location of the divider.
!    *
!    * @param newLastLocation The last location of the divider.
!    */
!   public void setLastDividerLocation(int newLastLocation)
!   {
!     if (newLastLocation != lastDividerLocation)
!       {
! 	int oldValue = lastDividerLocation;
! 	lastDividerLocation = newLastLocation;
! 	firePropertyChange(LAST_DIVIDER_LOCATION_PROPERTY, oldValue,
! 	                   lastDividerLocation);
!       }
!   }
  
!   /**
!    * This method sets the left component.
!    *
!    * @param comp The left component.
!    */
!   public void setLeftComponent(Component comp)
!   {
!     if (comp != null)
!       add(comp, LEFT);
!     else
!       add(new JButton("left button"), LEFT);
!   }
  
!   /**
!    * This method sets whether the divider has one touch expandable buttons.
!    * The one touch expandable buttons can expand the size of either component
!    * to the maximum allowed size.
!    *
!    * @param newValue Whether the divider will have one touch expandable
!    *        buttons.
!    */
!   public void setOneTouchExpandable(boolean newValue)
!   {
!     if (newValue != oneTouchExpandable)
!       {
! 	boolean oldValue = oneTouchExpandable;
! 	oneTouchExpandable = newValue;
! 	firePropertyChange(ONE_TOUCH_EXPANDABLE_PROPERTY, oldValue,
! 	                   oneTouchExpandable);
!       }
!   }
  
!   /**
!    * This method sets the orientation of the JSplitPane.
!    *
!    * @param orientation The orientation of the JSplitPane.
!    *
!    * @throws IllegalArgumentException DOCUMENT ME!
!    */
!   public void setOrientation(int orientation)
!   {
!     if (orientation != HORIZONTAL_SPLIT && orientation != VERTICAL_SPLIT)
!       throw new IllegalArgumentException("orientation must be one of VERTICAL_SPLIT, HORIZONTAL_SPLIT");
!     if (orientation != this.orientation)
!       {
! 	int oldOrientation = this.orientation;
! 	this.orientation = orientation;
! 	firePropertyChange(ORIENTATION_PROPERTY, oldOrientation,
! 	                   this.orientation);
!       }
!   }
  
!   /**
!    * This method determines how extra space will be distributed among the left
!    * and right components. A value of 0 will allocate all extra space to the
!    * right component. A value of 1 indicates that all extra space will go to
!    * the left component. A value in between 1 and 0 will split the space
!    * accordingly.
!    *
!    * @param value The resize weight.
!    */
!   public void setResizeWeight(double value)
!   {
!     resizeWeight = value;
!   }
  
!   /**
!    * This method sets the right component.
!    *
!    * @param comp The right component.
!    */
!   public void setRightComponent(Component comp)
!   {
!     if (comp != null)
!       add(comp, RIGHT);
!     else
! 	add(new JButton("right button"), RIGHT);
!   }
  
!   /**
!    * This method sets the top component.
!    *
!    * @param comp The top component.
!    */
!   public void setTopComponent(Component comp)
!   {
!     if (comp != null)
!       add(comp, TOP);
!     else
!       add(new JButton("left button"), TOP);
!   }
  
!   /**
!    * This method sets the UI used by the JSplitPane.
!    *
!    * @param ui The UI to use.
!    */
!   public void setUI(SplitPaneUI ui)
!   {
!     super.setUI(ui);
!   }
  
+   /**
+    * This method resets the UI to the one specified by the current Look and
+    * Feel.
+    */
+   public void updateUI()
+   {
+     setUI((SplitPaneUI) UIManager.getUI(this));
+     invalidate();
+     repaint();
+   }
  
!   /**
!    * This method returns a string identifier to determine which UI class it
!    * needs.
!    *
!    * @return A string that identifies it's UI class.
!    */
!   public String getUIClassID()
!   {
!     return "SplitPaneUI";
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JTabbedPane.java gcc-4.0.0/libjava/javax/swing/JTabbedPane.java
*** gcc-3.4.3/libjava/javax/swing/JTabbedPane.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JTabbedPane.java	Wed Feb 16 20:02:34 2005
***************
*** 1,5 ****
! /* JTabbedPane.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JTabbedPane.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,130 ****
  
  package javax.swing;
  
  import java.awt.Component;
  import java.util.Vector;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.plaf.TabbedPaneUI;
  
! public class JTabbedPane extends JComponent implements Accessible, SwingConstants
  {
!     class Tab
      {
! 	Icon icon;
! 	String name, descr;
! 	Component tab;
  
! 	Tab(String name,
! 	    Icon icon,
! 	    Component tab,
! 	    String descr)
! 	{
! 	    this.name = name;
! 	    this.icon = icon;
! 	    this.tab  = tab;
! 	    this.descr = descr;
! 	}
      }
-     
-     private Vector tabs = new Vector();
  
!     public JTabbedPane()
      {
      }
  
!     public void addTab(String name,
! 		Component panel)		
      {
! 	addTab(name, null, panel, null);
      }
!     public void addTab(String name,
! 		Icon icon,
! 		Component panel)		
      {
! 	addTab(name, icon, panel, null);
      }
!     public void addTab(String name,
! 		Icon icon,
! 		Component panel,
! 		String descr)
      {
! 	tabs.addElement(new Tab(name, icon, panel, descr));
      }
  
!     public int getTabCount()
      {
! 	return tabs.size();
      }
!     public Component getComponentAt(int i)
      {
! 	Tab t = (Tab) tabs.elementAt(i);
! 	return t.tab;
      }
-     
-     public String getUIClassID()
-     {	return "JTabbedPane";    }
  
  
!     public void setUI(TabbedPaneUI ui) {
!         super.setUI(ui);
      }
!     
!     public TabbedPaneUI getUI() {
!         return (TabbedPaneUI)ui;
      }
!     
!     public void updateUI()
      {
-         setUI((TabbedPaneUI)UIManager.getUI(this));
      }
!     
!     public AccessibleContext getAccessibleContext()
      {
- 	return null;
      }
!     
!    protected  String paramString()
      {
- 	return "JTabbedPane";
      }
  }
--- 38,1476 ----
  
  package javax.swing;
  
+ import java.awt.Color;
  import java.awt.Component;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.event.MouseEvent;
+ import java.io.Serializable;
  import java.util.Vector;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleSelection;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.plaf.TabbedPaneUI;
+ import javax.swing.plaf.UIResource;
  
! /**
!  * This is a container for components. One component is displayed at a time.
!  * Users can switch between components by clicking on tabs.
!  * 
!  * <p>
!  * Tabs can be oriented in several ways. They can be above, below, left and
!  * right of the component. Tabs can either wrap around (by creating multiple
!  * rows of tabs) or they can be scrolled (where only a subset of the  tabs
!  * can be seen at once). More tabs can be added by calling the
!  * add/addTab/insertTab methods.
!  * </p>
!  */
! public class JTabbedPane extends JComponent implements Serializable,
!                                                        Accessible,
!                                                        SwingConstants
  {
!   /**
!    * DOCUMENT ME!
!    */
!   protected class AccessibleJTabbedPane extends JComponent.AccessibleJComponent
!     implements AccessibleSelection, ChangeListener
!   {
!     /** DOCUMENT ME! */
!     private static final long serialVersionUID = 7610530885966830483L;
! 
!     /**
!      * Creates a new AccessibleJTabbedPane object.
!      */
!     public AccessibleJTabbedPane()
      {
!       super();
!     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param e DOCUMENT ME!
!      */
!     public void stateChanged(ChangeEvent e)
!     {
      }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public AccessibleRole getAccessibleRole()
      {
+       return null;
      }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public int getAccessibleChildrenCount()
      {
!       return 0;
      }
! 
!     /**
!      * DOCUMENT ME!
!      *
!      * @param i DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public Accessible getAccessibleChild(int i)
      {
!       return null;
      }
! 
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public AccessibleSelection getAccessibleSelection()
      {
!       return null;
      }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param p DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public Accessible getAccessibleAt(Point p)
      {
!       return null;
      }
! 
!     /**
!      * DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public int getAccessibleSelectionCount()
      {
!       return 0;
      }
  
+     /**
+      * DOCUMENT ME!
+      *
+      * @param i DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Accessible getAccessibleSelection(int i)
+     {
+       return null;
+     }
  
!     /**
!      * DOCUMENT ME!
!      *
!      * @param i DOCUMENT ME!
!      *
!      * @return DOCUMENT ME!
!      */
!     public boolean isAccessibleChildSelected(int i)
!     {
!       return false;
      }
! 
!     /**
!      * DOCUMENT ME!
!      *
!      * @param i DOCUMENT ME!
!      */
!     public void addAccessibleSelection(int i)
!     {
      }
! 
!     /**
!      * DOCUMENT ME!
!      *
!      * @param i DOCUMENT ME!
!      */
!     public void removeAccessibleSelection(int i)
      {
      }
! 
!     /**
!      * DOCUMENT ME!
!      */
!     public void clearAccessibleSelection()
      {
      }
! 
!     /**
!      * DOCUMENT ME!
!      */
!     public void selectAllAccessibleSelection()
      {
      }
+   }
+ 
+   /**
+    * A helper class that listens for changes to the model.
+    */
+   protected class ModelListener implements ChangeListener, Serializable
+   {
+     /** DOCUMENT ME! */
+     private static final long serialVersionUID = 497359819958114132L;
+ 
+     /**
+      * Creates a new ModelListener object.
+      */
+     protected ModelListener()
+     {
+     }
+ 
+     /**
+      * This method is called whenever the model  is changed.
+      *
+      * @param e The ChangeEvent that is passed from the model.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       // Propagate to our listeners.
+       fireStateChanged();
+     }
+   }
+ 
+   /**
+    * A private class that holds all the information  for each tab.
+    */
+   private class Page
+   {
+     /** The tooltip string. */
+     private String tip;
+ 
+     /** The component associated with the tab. */
+     private Component component;
+ 
+     /** The active icon associated with the tab. */
+     private transient Icon icon;
+ 
+     /** The disabled icon associated with the tab. */
+     private transient Icon disabledIcon;
+ 
+     /** The tab's enabled status. */
+     private transient boolean enabled = true;
+ 
+     /** The string painted on the tab. */
+     private transient String title;
+ 
+     /** The background color of the tab. */
+     private transient Color bg;
+ 
+     /** The foreground color of the tab. */
+     private transient Color fg;
+ 
+     /** The mnemonic associated with the tab. */
+     private transient int mnemonicKey;
+ 
+     /** The index of the underlined character in the string. */
+     private transient int underlinedChar = -1;
+ 
+     /**
+      * Creates a new data storage for the tab.
+      *
+      * @param title The string displayed on the tab.
+      * @param icon The active icon displayed on the tab.
+      * @param component The component associated with the tab.
+      * @param tip The tooltip associated with the tab.
+      */
+     protected Page(String title, Icon icon, Component component, String tip)
+     {
+       this.title = title;
+       this.icon = icon;
+       this.component = component;
+       this.tip = tip;
+     }
+ 
+     /**
+      * This method returns the component associated with the tab.
+      *
+      * @return The component associated with the tab.
+      */
+     public Component getComponent()
+     {
+       return component;
+     }
+ 
+     /**
+      * This method sets the component associated with the tab.
+      *
+      * @param c The component associated with the tab.
+      */
+     public void setComponent(Component c)
+     {
+       remove(component);
+       this.component = c;
+       add(c);
+     }
+ 
+     /**
+      * This method returns the tooltip string.
+      *
+      * @return The tooltip string.
+      */
+     public String getTip()
+     {
+       return tip;
+     }
+ 
+     /**
+      * This method sets the tooltip string.
+      *
+      * @param tip The tooltip string.
+      */
+     public void setTip(String tip)
+     {
+       this.tip = tip;
+     }
+ 
+     /**
+      * This method returns the background color.
+      *
+      * @return The background color.
+      */
+     public Color getBackground()
+     {
+       return bg;
+     }
+ 
+     /**
+      * This method sets the background color.
+      *
+      * @param background The background color.
+      */
+     public void setBackground(Color background)
+     {
+       bg = background;
+     }
+ 
+     /**
+      * This method returns the foreground color.
+      *
+      * @return The foreground color.
+      */
+     public Color getForeground()
+     {
+       return fg;
+     }
+ 
+     /**
+      * This method sets the foreground color.
+      *
+      * @param foreground The foreground color.
+      */
+     public void setForeground(Color foreground)
+     {
+       fg = foreground;
+     }
+ 
+     /**
+      * This method returns the title associated with the tab.
+      *
+      * @return The title of the tab.
+      */
+     public String getTitle()
+     {
+       return title;
+     }
+ 
+     /** DOCUMENT ME! */
+     private static final long serialVersionUID = 1614381073220130939L;
+ 
+     /**
+      * This method sets the title of the tab.
+      *
+      * @param text The title of the tab.
+      */
+     public void setTitle(String text)
+     {
+       title = text;
+       if (title != null && title.length() <= underlinedChar)
+ 	setDisplayedMnemonicIndex(title.length() - 1);
+     }
+ 
+     /**
+      * This method returns the active icon.
+      *
+      * @return The active icon.
+      */
+     public Icon getIcon()
+     {
+       return icon;
+     }
+ 
+     /**
+      * This method sets the active icon.
+      *
+      * @param icon The active icon.
+      */
+     public void setIcon(Icon icon)
+     {
+       this.icon = icon;
+     }
+ 
+     /**
+      * This method returns the disabled icon.
+      *
+      * @return The disabled icon.
+      */
+     public Icon getDisabledIcon()
+     {
+       if (disabledIcon == null && icon instanceof ImageIcon)
+ 	setDisabledIcon(icon);
+       return disabledIcon;
+     }
+ 
+     /**
+      * This method sets the disabled icon.
+      *
+      * @param disabledIcon The disabled icon.
+      */
+     public void setDisabledIcon(Icon disabledIcon)
+     {
+       this.disabledIcon = disabledIcon;
+     }
+ 
+     /**
+      * This method returns whether the tab is enabled.
+      *
+      * @return Whether the tab is enabled.
+      */
+     public boolean isEnabled()
+     {
+       return enabled;
+     }
+ 
+     /**
+      * This method sets whether the tab is enabled.
+      *
+      * @param enabled Whether this tab is enabled.
+      */
+     public void setEnabled(boolean enabled)
+     {
+       this.enabled = enabled;
+     }
+ 
+     /**
+      * This method returns the mnemonic.
+      *
+      * @return The mnemonic.
+      */
+     public int getMnemonic()
+     {
+       return (int) mnemonicKey;
+     }
+ 
+     /**
+      * This method sets the mnemonic. If the title is set, it will update the
+      * mnemonicIndex.
+      *
+      * @param key The mnemonic.
+      */
+     public void setMnemonic(int key)
+     {
+       setMnemonic((char) key);
+     }
+ 
+     /**
+      * This method sets the mnemonic. If the title is set, it will update the
+      * mnemonicIndex.
+      *
+      * @param aChar The mnemonic.
+      */
+     public void setMnemonic(char aChar)
+     {
+       mnemonicKey = aChar;
+       if (title != null)
+ 	setDisplayedMnemonicIndex(title.indexOf(mnemonicKey));
+     }
+ 
+     /**
+      * This method returns the mnemonicIndex.
+      *
+      * @return The mnemonicIndex.
+      */
+     public int getDisplayedMnemonicIndex()
+     {
+       return underlinedChar;
+     }
+ 
+     /**
+      * This method sets the mnemonicIndex.
+      *
+      * @param index The mnemonicIndex.
+      *
+      * @throws IllegalArgumentException If index less than -1 || index greater
+      *         or equal to title.length.
+      */
+     public void setDisplayedMnemonicIndex(int index)
+       throws IllegalArgumentException
+     {
+       if (index < -1 || title != null && index >= title.length())
+ 	throw new IllegalArgumentException();
+ 
+       if (title == null || mnemonicKey == 0 || title.charAt(index) != mnemonicKey)
+ 	index = -1;
+ 
+       underlinedChar = index;
+     }
+   }
+ 
+   /** The changeEvent used to fire changes to listeners. */
+   protected ChangeEvent changeEvent;
+ 
+   /** The listener that listens to the model. */
+   protected ChangeListener changeListener;
+ 
+   /** The model that describes this JTabbedPane. */
+   protected SingleSelectionModel model;
+ 
+   /** Indicates that the TabbedPane is in scrolling mode. */
+   public static final int SCROLL_TAB_LAYOUT = 1;
+ 
+   /** Indicates that the TabbedPane is in wrap mode. */
+   public static final int WRAP_TAB_LAYOUT = 0;
+ 
+   /** The current tabPlacement of the TabbedPane. */
+   protected int tabPlacement = SwingConstants.TOP;
+ 
+   /** The current tabLayoutPolicy of the TabbedPane. */
+   private transient int layoutPolicy;
+ 
+   /** The list of tabs associated with the TabbedPane. */
+   transient Vector tabs = new Vector();
+ 
+   /**
+    * Creates a new JTabbedPane object with tabs on top and using wrap tab
+    * layout.
+    */
+   public JTabbedPane()
+   {
+     this(SwingConstants.TOP, WRAP_TAB_LAYOUT);
+   }
+ 
+   /**
+    * Creates a new JTabbedPane object using wrap tab layout  and the given
+    * tabPlacement.
+    *
+    * @param tabPlacement Where the tabs will be placed.
+    */
+   public JTabbedPane(int tabPlacement)
+   {
+     this(tabPlacement, WRAP_TAB_LAYOUT);
+   }
+ 
+   /**
+    * Creates a new JTabbedPane object with the given tabPlacement and
+    * tabLayoutPolicy.
+    *
+    * @param tabPlacement Where the tabs will be placed.
+    * @param tabLayoutPolicy The way tabs will be placed.
+    *
+    * @throws IllegalArgumentException If tabLayoutPolicy or tabPlacement are
+    *         not valid.
+    */
+   public JTabbedPane(int tabPlacement, int tabLayoutPolicy)
+   {
+     if (tabPlacement != TOP && tabPlacement != BOTTOM && tabPlacement != RIGHT
+         && tabPlacement != LEFT)
+       throw new IllegalArgumentException("tabPlacement is not valid.");
+     if (tabLayoutPolicy != SCROLL_TAB_LAYOUT
+         && tabLayoutPolicy != WRAP_TAB_LAYOUT)
+       throw new IllegalArgumentException("tabLayoutPolicy is not valid.");
+     this.tabPlacement = tabPlacement;
+     layoutPolicy = tabLayoutPolicy;
+ 
+     changeEvent = new ChangeEvent(this);
+     changeListener = createChangeListener();
+ 
+     model = new DefaultSingleSelectionModel();
+     model.addChangeListener(changeListener);
+ 
+     updateUI();
+   }
+ 
+   /**
+    * This method returns the UI used to display the JTabbedPane.
+    *
+    * @return The UI used to display the JTabbedPane.
+    */
+   public TabbedPaneUI getUI()
+   {
+     return (TabbedPaneUI) ui;
+   }
+ 
+   /**
+    * This method sets the UI used to display the JTabbedPane.
+    *
+    * @param ui The UI used to display the JTabbedPane.
+    */
+   public void setUI(TabbedPaneUI ui)
+   {
+     super.setUI(ui);
+   }
+ 
+   /**
+    * This method restores the UI to the defaults given by the UIManager.
+    */
+   public void updateUI()
+   {
+     setUI((TabbedPaneUI) UIManager.getUI(this));
+     invalidate();
+   }
+ 
+   /**
+    * This method returns a string identifier that  is used to determine which
+    * UI will be used with  the JTabbedPane.
+    *
+    * @return A string identifier for the UI.
+    */
+   public String getUIClassID()
+   {
+     return "TabbedPaneUI";
+   }
+ 
+   /**
+    * This method creates a ChangeListener that is used to  listen to the model
+    * for events.
+    *
+    * @return A ChangeListener to listen to the model.
+    */
+   protected ChangeListener createChangeListener()
+   {
+     return new ModelListener();
+   }
+ 
+   /**
+    * This method adds a ChangeListener to the JTabbedPane.
+    *
+    * @param l The ChangeListener to add.
+    */
+   public void addChangeListener(ChangeListener l)
+   {
+     listenerList.add(ChangeListener.class, l);
+   }
+ 
+   /**
+    * This method removes a ChangeListener to the JTabbedPane.
+    *
+    * @param l The ChangeListener to remove.
+    */
+   public void removeChangeListener(ChangeListener l)
+   {
+     listenerList.remove(ChangeListener.class, l);
+   }
+ 
+   /**
+    * This method fires a ChangeEvent to all the JTabbedPane's ChangeListeners.
+    */
+   protected void fireStateChanged()
+   {
+     Object[] changeListeners = listenerList.getListenerList();
+     if (changeEvent == null)
+       changeEvent = new ChangeEvent(this);
+     for (int i = changeListeners.length - 2; i >= 0; i -= 2)
+       {
+ 	if (changeListeners[i] == ChangeListener.class)
+ 	  ((ChangeListener) changeListeners[i + 1]).stateChanged(changeEvent);
+       }
+   }
+ 
+   /**
+    * This method returns all ChangeListeners registered with the JTabbedPane.
+    *
+    * @return The ChangeListeners registered with the JTabbedPane.
+    */
+   public ChangeListener[] getChangeListeners()
+   {
+     return (ChangeListener[]) super.getListeners(ChangeListener.class);
+   }
+ 
+   /**
+    * This method returns the model used with the JTabbedPane.
+    *
+    * @return The JTabbedPane's model.
+    */
+   public SingleSelectionModel getModel()
+   {
+     return model;
+   }
+ 
+   /**
+    * This method changes the model property of the JTabbedPane.
+    *
+    * @param model The new model to use with the JTabbedPane.
+    */
+   public void setModel(SingleSelectionModel model)
+   {
+     if (model != this.model)
+       {
+ 	SingleSelectionModel oldModel = this.model;
+ 	this.model.removeChangeListener(changeListener);
+ 	this.model = model;
+ 	this.model.addChangeListener(changeListener);
+ 	firePropertyChange("model", oldModel, this.model);
+       }
+   }
+ 
+   /**
+    * This method returns the tabPlacement.
+    *
+    * @return The tabPlacement used with the JTabbedPane.
+    */
+   public int getTabPlacement()
+   {
+     return tabPlacement;
+   }
+ 
+   /**
+    * This method changes the tabPlacement property of the JTabbedPane.
+    *
+    * @param tabPlacement The tabPlacement to use.
+    *
+    * @throws IllegalArgumentException If tabPlacement is not one of TOP,
+    *         BOTTOM, LEFT, or RIGHT.
+    */
+   public void setTabPlacement(int tabPlacement)
+   {
+     if (tabPlacement != TOP && tabPlacement != BOTTOM && tabPlacement != RIGHT
+         && tabPlacement != LEFT)
+       throw new IllegalArgumentException("tabPlacement is not valid.");
+     if (tabPlacement != this.tabPlacement)
+       {
+ 	int oldPlacement = this.tabPlacement;
+ 	this.tabPlacement = tabPlacement;
+ 	firePropertyChange("tabPlacement", oldPlacement, this.tabPlacement);
+       }
+   }
+ 
+   /**
+    * This method returns the tabLayoutPolicy.
+    *
+    * @return The tabLayoutPolicy.
+    */
+   public int getTabLayoutPolicy()
+   {
+     return layoutPolicy;
+   }
+ 
+   /**
+    * This method changes the tabLayoutPolicy property of the JTabbedPane.
+    *
+    * @param tabLayoutPolicy The tabLayoutPolicy to use.
+    *
+    * @throws IllegalArgumentException If tabLayoutPolicy is not one of
+    *         SCROLL_TAB_LAYOUT or WRAP_TAB_LAYOUT.
+    */
+   public void setTabLayoutPolicy(int tabLayoutPolicy)
+   {
+     if (tabLayoutPolicy != SCROLL_TAB_LAYOUT
+         && tabLayoutPolicy != WRAP_TAB_LAYOUT)
+       throw new IllegalArgumentException("tabLayoutPolicy is not valid.");
+     if (tabLayoutPolicy != layoutPolicy)
+       {
+ 	int oldPolicy = layoutPolicy;
+ 	layoutPolicy = tabLayoutPolicy;
+ 	firePropertyChange("tabLayoutPolicy", oldPolicy, layoutPolicy);
+       }
+   }
+ 
+   /**
+    * This method returns the index of the tab that is currently selected.
+    *
+    * @return The index of the selected tab.
+    */
+   public int getSelectedIndex()
+   {
+     return model.getSelectedIndex();
+   }
+ 
+   /**
+    * This method checks the index.
+    *
+    * @param index The index to check.
+    * @param start DOCUMENT ME!
+    * @param end DOCUMENT ME!
+    *
+    * @throws IndexOutOfBoundsException DOCUMENT ME!
+    */
+   private void checkIndex(int index, int start, int end)
+   {
+     if (index < start || index >= end)
+       throw new IndexOutOfBoundsException("Index < " + start + " || Index >= "
+                                           + end);
+   }
+ 
+   /**
+    * This method sets the selected index. This method will hide the old
+    * component and show the new component.
+    *
+    * @param index The index to set it at.
+    */
+   public void setSelectedIndex(int index)
+   {
+     checkIndex(index, -1, tabs.size());
+     if (index != getSelectedIndex())
+       {
+ 	if (getSelectedIndex() != -1 && getSelectedComponent() != null)
+ 	  getSelectedComponent().hide();
+ 	if (index != -1 && getComponentAt(index) != null)
+ 	  getComponentAt(index).show();
+ 	model.setSelectedIndex(index);
+       }
+   }
+ 
+   /**
+    * This method returns the component at the selected index.
+    *
+    * @return The component at the selected index.
+    */
+   public Component getSelectedComponent()
+   {
+     return getComponentAt(getSelectedIndex());
+   }
+ 
+   /**
+    * This method sets the component at the selected index.
+    *
+    * @param c The component associated with the selected index.
+    */
+   public void setSelectedComponent(Component c)
+   {
+     if (c.getParent() == this)
+       setSelectedIndex(indexOfComponent(c));
+     else
+       setComponentAt(getSelectedIndex(), c);
+   }
+ 
+   /**
+    * This method inserts tabs into JTabbedPane. This includes adding the
+    * component to the JTabbedPane and hiding it.
+    *
+    * @param title The title of the tab.
+    * @param icon The tab's icon.
+    * @param component The component associated with the tab.
+    * @param tip The tooltip for the tab.
+    * @param index The index to insert the tab at.
+    */
+   public void insertTab(String title, Icon icon, Component component,
+                         String tip, int index)
+   {
+     Page p = new Page(title, icon, component, tip);
+     tabs.insertElementAt(p, index);
+ 
+     // Hide the component so we don't see it. Do it before we parent it
+     // so we don't trigger a repaint.
+     if (component != null)
+       {
+ 	component.hide();
+ 	super.add(component);
+       }
+ 
+     if (getSelectedIndex() == -1)
+       setSelectedIndex(0);
+ 
+     layout();
+     repaint();
+   }
+ 
+   /**
+    * This method adds a tab to the JTabbedPane.
+    *
+    * @param title The title of the tab.
+    * @param icon The icon for the tab.
+    * @param component The associated component.
+    * @param tip The associated tooltip.
+    */
+   public void addTab(String title, Icon icon, Component component, String tip)
+   {
+     insertTab(title, icon, component, tip, tabs.size());
+   }
+ 
+   /**
+    * This method adds a tab to the JTabbedPane.
+    *
+    * @param title The title of the tab.
+    * @param icon The icon for the tab.
+    * @param component The associated component.
+    */
+   public void addTab(String title, Icon icon, Component component)
+   {
+     insertTab(title, icon, component, null, tabs.size());
+   }
+ 
+   /**
+    * This method adds a tab to the JTabbedPane.
+    *
+    * @param title The title of the tab.
+    * @param component The associated component.
+    */
+   public void addTab(String title, Component component)
+   {
+     insertTab(title, null, component, null, tabs.size());
+   }
+ 
+   /**
+    * This method adds a tab to the JTabbedPane. The title of the tab is the
+    * Component's name. If the Component is an instance of UIResource, it
+    * doesn't add the tab and instead add the component directly to the
+    * JTabbedPane.
+    *
+    * @param component The associated component.
+    *
+    * @return The Component that was added.
+    */
+   public Component add(Component component)
+   {
+     if (component instanceof UIResource)
+       super.add(component);
+     else
+       insertTab(component.getName(), null, component, null, tabs.size());
+     return component;
+   }
+ 
+   /**
+    * This method adds a tab to the JTabbedPane. If the Component is an
+    * instance of UIResource, it doesn't add the tab and instead add the
+    * component directly to the JTabbedPane.
+    *
+    * @param title The title of the tab.
+    * @param component The associated component.
+    *
+    * @return The Component that was added.
+    */
+   public Component add(String title, Component component)
+   {
+     if (component instanceof UIResource)
+       super.add(component);
+     else
+       insertTab(title, null, component, null, tabs.size());
+     return component;
+   }
+ 
+   /**
+    * This method adds a tab to the JTabbedPane. If the Component is an
+    * instance of UIResource, it doesn't add the tab and instead add the
+    * component directly to the JTabbedPane.
+    *
+    * @param component The associated component.
+    * @param index The index to insert the tab at.
+    *
+    * @return The Component that was added.
+    */
+   public Component add(Component component, int index)
+   {
+     if (component instanceof UIResource)
+       super.add(component);
+     else
+       insertTab(component.getName(), null, component, null, index);
+     return component;
+   }
+ 
+   /**
+    * This method adds a tab to the JTabbedPane. If the Component is an
+    * instance of UIResource, it doesn't add the tab and instead add the
+    * component directly to the JTabbedPane. If the constraints object is an
+    * icon, it will be used as the tab's icon. If the constraints object is a
+    * string, we will use it as the title.
+    *
+    * @param component The associated component.
+    * @param constraints The constraints object.
+    */
+   public void add(Component component, Object constraints)
+   {
+     add(component, constraints, tabs.size());
+   }
+ 
+   /**
+    * This method adds a tab to the JTabbedPane. If the Component is an
+    * instance of UIResource, it doesn't add the tab and instead add the
+    * component directly to the JTabbedPane. If the constraints object is an
+    * icon, it will be used as the tab's icon. If the constraints object is a
+    * string, we will use it as the title.
+    *
+    * @param component The associated component.
+    * @param constraints The constraints object.
+    * @param index The index to insert the tab at.
+    */
+   public void add(Component component, Object constraints, int index)
+   {
+     if (component instanceof UIResource)
+       super.add(component);
+     else
+       {
+ 	if (constraints instanceof String)
+ 	  insertTab((String) constraints, null, component, null, index);
+ 	else
+ 	  insertTab(component.getName(),
+ 	            (constraints instanceof Icon) ? (Icon) constraints : null,
+ 	            component, null, index);
+       }
+   }
+ 
+   /**
+    * The tab and it's associated component are removed. After the component
+    * has been removed from the JTabbedPane, it's set visible to ensure that
+    * it can be seen.
+    *
+    * @param index The index of the tab to remove.
+    */
+   public void removeTabAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     Component c = getComponentAt(index);
+     super.remove(index);
+     c.show();
+     tabs.remove(index);
+   }
+ 
+   /**
+    * This method removes the component from the JTabbedPane. After the
+    * component has been removed from the JTabbedPane, it's  set visible to
+    * ensure that it can be seen.
+    *
+    * @param component The Component to remove.
+    */
+   public void remove(Component component)
+   {
+     // This simply removes the component.
+     int index = indexOfComponent(component);
+     super.remove(component);
+     component.show();
+     setComponentAt(index, null);
+   }
+ 
+   /**
+    * This method removes the tab and component from the JTabbedPane. It simply
+    * calls removeTabAt(int index).
+    *
+    * @param index The index of the tab to remove.
+    */
+   public void remove(int index)
+   {
+     removeTabAt(index);
+   }
+ 
+   /**
+    * This method removes all tabs and associated components from the
+    * JTabbedPane.
+    */
+   public void removeAll()
+   {
+     for (int i = tabs.size() - 1; i >= 0; i--)
+       removeTabAt(i);
+   }
+ 
+   /**
+    * This method returns how many tabs are in the JTabbedPane.
+    *
+    * @return The number of tabs in the JTabbedPane.
+    */
+   public int getTabCount()
+   {
+     return tabs.size();
+   }
+ 
+   /**
+    * This method returns the number of runs used  to paint the JTabbedPane.
+    *
+    * @return The number of runs.
+    */
+   public int getTabRunCount()
+   {
+     return ((TabbedPaneUI) ui).getTabRunCount(this);
+   }
+ 
+   /**
+    * This method returns the tab title given the index.
+    *
+    * @param index The index of the tab.
+    *
+    * @return The title for the tab.
+    */
+   public String getTitleAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     return ((Page) tabs.elementAt(index)).getTitle();
+   }
+ 
+   /**
+    * This method returns the active icon given the index.
+    *
+    * @param index The index of the tab.
+    *
+    * @return The active icon for the tab.
+    */
+   public Icon getIconAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     return ((Page) tabs.elementAt(index)).getIcon();
+   }
+ 
+   /**
+    * This method returns the disabled icon given the index.
+    *
+    * @param index The index of the tab.
+    *
+    * @return The disabled icon for the tab.
+    */
+   public Icon getDisabledIconAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     return ((Page) tabs.elementAt(index)).getDisabledIcon();
+   }
+ 
+   /**
+    * This method returns the tooltip string for the tab.
+    *
+    * @param index The index of the tab.
+    *
+    * @return The tooltip string for the tab.
+    */
+   public String getToolTipTextAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     return ((Page) tabs.elementAt(index)).getTip();
+   }
+ 
+   /**
+    * This method returns the foreground color for the tab.
+    *
+    * @param index The index of the tab.
+    *
+    * @return The foreground color for the tab.
+    */
+   public Color getForegroundAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     return ((Page) tabs.elementAt(index)).getForeground();
+   }
+ 
+   /**
+    * This method returns the background color for the tab.
+    *
+    * @param index The index of the tab.
+    *
+    * @return The background color for the tab.
+    */
+   public Color getBackgroundAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     return ((Page) tabs.elementAt(index)).getBackground();
+   }
+ 
+   /**
+    * This method returns the component associated with the tab.
+    *
+    * @param index The index of the tab.
+    *
+    * @return The component associated with the tab.
+    */
+   public Component getComponentAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     return ((Page) tabs.elementAt(index)).getComponent();
+   }
+ 
+   /**
+    * This method returns whether this tab is enabled. Disabled tabs cannot be
+    * selected.
+    *
+    * @param index The index of the tab.
+    *
+    * @return Whether the tab is enabled.
+    */
+   public boolean isEnabledAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     return ((Page) tabs.elementAt(index)).isEnabled();
+   }
+ 
+   /**
+    * This method returns the mnemonic for the tab.
+    *
+    * @param tabIndex The index of the tab.
+    *
+    * @return The mnemonic for the tab.
+    */
+   public int getMnemonicAt(int tabIndex)
+   {
+     checkIndex(tabIndex, 0, tabs.size());
+     return ((Page) tabs.elementAt(tabIndex)).getMnemonic();
+   }
+ 
+   /**
+    * This method returns the mnemonic index for the tab.
+    *
+    * @param tabIndex The index of the tab.
+    *
+    * @return The mnemonic index for the tab.
+    */
+   public int getDisplayedMnemonicIndexAt(int tabIndex)
+   {
+     checkIndex(tabIndex, 0, tabs.size());
+     return ((Page) tabs.elementAt(tabIndex)).getDisplayedMnemonicIndex();
+   }
+ 
+   /**
+    * This method returns the bounds of the tab given the index.
+    *
+    * @param index The index of the tab.
+    *
+    * @return A rectangle describing the bounds of the tab.
+    */
+   public Rectangle getBoundsAt(int index)
+   {
+     checkIndex(index, 0, tabs.size());
+     return ((TabbedPaneUI) ui).getTabBounds(this, index);
+   }
+ 
+   /**
+    * This method sets the title of the tab.
+    *
+    * @param index The index of the tab.
+    * @param title The new title.
+    */
+   public void setTitleAt(int index, String title)
+   {
+     checkIndex(index, 0, tabs.size());
+     ((Page) tabs.elementAt(index)).setTitle(title);
+   }
+ 
+   /**
+    * This method sets the icon of the tab.
+    *
+    * @param index The index of the tab.
+    * @param icon The new icon.
+    */
+   public void setIconAt(int index, Icon icon)
+   {
+     checkIndex(index, 0, tabs.size());
+     ((Page) tabs.elementAt(index)).setIcon(icon);
+   }
+ 
+   /**
+    * This method sets the disabled icon of the tab.
+    *
+    * @param index The index of the tab.
+    * @param disabledIcon The new disabled icon.
+    */
+   public void setDisabledIconAt(int index, Icon disabledIcon)
+   {
+     checkIndex(index, 0, tabs.size());
+     ((Page) tabs.elementAt(index)).setDisabledIcon(disabledIcon);
+   }
+ 
+   /**
+    * This method sets the tooltip text of the tab.
+    *
+    * @param index The index of the tab.
+    * @param toolTipText The tooltip text.
+    */
+   public void setToolTipTextAt(int index, String toolTipText)
+   {
+     checkIndex(index, 0, tabs.size());
+     ((Page) tabs.elementAt(index)).setTip(toolTipText);
+   }
+ 
+   /**
+    * This method sets the background color of the tab.
+    *
+    * @param index The index of the tab.
+    * @param background The background color of the tab.
+    */
+   public void setBackgroundAt(int index, Color background)
+   {
+     checkIndex(index, 0, tabs.size());
+     ((Page) tabs.elementAt(index)).setBackground(background);
+   }
+ 
+   /**
+    * This method sets the foreground color of the tab.
+    *
+    * @param index The index of the tab.
+    * @param foreground The foreground color of the tab.
+    */
+   public void setForegroundAt(int index, Color foreground)
+   {
+     checkIndex(index, 0, tabs.size());
+     ((Page) tabs.elementAt(index)).setForeground(foreground);
+   }
+ 
+   /**
+    * This method sets whether the tab is enabled.
+    *
+    * @param index The index of the tab.
+    * @param enabled Whether the tab is enabled.
+    */
+   public void setEnabledAt(int index, boolean enabled)
+   {
+     checkIndex(index, 0, tabs.size());
+     ((Page) tabs.elementAt(index)).setEnabled(enabled);
+   }
+ 
+   /**
+    * This method sets the component associated with the tab.
+    *
+    * @param index The index of the tab.
+    * @param component The component associated with the tab.
+    */
+   public void setComponentAt(int index, Component component)
+   {
+     checkIndex(index, 0, tabs.size());
+     ((Page) tabs.elementAt(index)).setComponent(component);
+   }
+ 
+   /**
+    * This method sets the displayed mnemonic index of the tab.
+    *
+    * @param tabIndex The index of the tab.
+    * @param mnemonicIndex The mnemonic index.
+    */
+   public void setDisplayedMnemonicIndexAt(int tabIndex, int mnemonicIndex)
+   {
+     checkIndex(tabIndex, 0, tabs.size());
+     ((Page) tabs.elementAt(tabIndex)).setDisplayedMnemonicIndex(mnemonicIndex);
+   }
+ 
+   /**
+    * This method sets the mnemonic for the tab.
+    *
+    * @param tabIndex The index of the tab.
+    * @param mnemonic The mnemonic.
+    */
+   public void setMnemonicAt(int tabIndex, int mnemonic)
+   {
+     checkIndex(tabIndex, 0, tabs.size());
+     ((Page) tabs.elementAt(tabIndex)).setMnemonic(mnemonic);
+   }
+ 
+   /**
+    * This method finds the index of a tab given the title.
+    *
+    * @param title The title that belongs to a tab.
+    *
+    * @return The index of the tab that has the title or -1 if not found.
+    */
+   public int indexOfTab(String title)
+   {
+     int index = -1;
+     for (int i = 0; i < tabs.size(); i++)
+       {
+ 	if (((Page) tabs.elementAt(i)).getTitle().equals(title))
+ 	  {
+ 	    index = i;
+ 	    break;
+ 	  }
+       }
+     return index;
+   }
+ 
+   /**
+    * This method finds the index of a tab given the icon.
+    *
+    * @param icon The icon that belongs to a tab.
+    *
+    * @return The index of the tab that has the icon or -1 if not found.
+    */
+   public int indexOfTab(Icon icon)
+   {
+     int index = -1;
+     for (int i = 0; i < tabs.size(); i++)
+       {
+ 	if (((Page) tabs.elementAt(i)).getIcon() == icon)
+ 	  {
+ 	    index = i;
+ 	    break;
+ 	  }
+       }
+     return index;
+   }
+ 
+   /**
+    * This method finds the index of a tab given the component.
+    *
+    * @param component A component associated with a tab.
+    *
+    * @return The index of the tab that has this component or -1 if not found.
+    */
+   public int indexOfComponent(Component component)
+   {
+     int index = -1;
+     for (int i = 0; i < tabs.size(); i++)
+       {
+ 	if (((Page) tabs.elementAt(i)).getComponent() == component)
+ 	  {
+ 	    index = i;
+ 	    break;
+ 	  }
+       }
+     return index;
+   }
+ 
+   /**
+    * This method returns a tab index given an (x,y) location. The origin of
+    * the (x,y) pair will be the JTabbedPane's top left position. The  tab
+    * returned will be the one that contains the point. This method is
+    * delegated to the UI.
+    *
+    * @param x The x coordinate of the point.
+    * @param y The y coordinate of the point.
+    *
+    * @return The index of the tab that contains the point.
+    */
+   public int indexAtLocation(int x, int y)
+   {
+     return ((TabbedPaneUI) ui).tabForCoordinate(this, x, y);
+   }
+ 
+   /**
+    * This method returns the tooltip text given a mouse event.
+    *
+    * @param event The mouse event.
+    *
+    * @return The tool tip text that is associated with this mouse event.
+    */
+   public String getToolTipText(MouseEvent event)
+   {
+     int index = indexAtLocation(event.getX(), event.getY());
+     return ((Page) tabs.elementAt(index)).getTip();
+   }
+ 
+   /**
+    * This method returns a string representation of this JTabbedPane. It is
+    * mainly used for debugging purposes.
+    *
+    * @return A string representation of this JTabbedPane.
+    */
+   protected String paramString()
+   {
+     return "JTabbedPane";
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleJTabbedPane();
+     return accessibleContext;
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JTable.java gcc-4.0.0/libjava/javax/swing/JTable.java
*** gcc-3.4.3/libjava/javax/swing/JTable.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JTable.java	Wed Feb 16 20:02:36 2005
***************
*** 1,5 ****
  /* JTable.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JTable.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing;
*** 41,210 ****
  import java.awt.Color;
  import java.awt.Component;
  import java.awt.Dimension;
  import java.awt.Rectangle;
  import java.util.Hashtable;
  import java.util.Vector;
  import javax.accessibility.Accessible;
! import javax.swing.event.ChangeEvent;
  import javax.swing.event.CellEditorListener;
  import javax.swing.event.ListSelectionEvent;
  import javax.swing.event.ListSelectionListener;
  import javax.swing.event.TableColumnModelEvent;
  import javax.swing.event.TableColumnModelListener;
  import javax.swing.event.TableModelEvent;
  import javax.swing.event.TableModelListener;
  import javax.swing.table.JTableHeader;
- import javax.swing.table.TableModel;
  import javax.swing.table.TableCellEditor;
  import javax.swing.table.TableColumnModel;
  
  public class JTable extends JComponent
    implements TableModelListener, Scrollable, TableColumnModelListener,
               ListSelectionListener, CellEditorListener, Accessible
  {
!   public static final int AUTO_RESIZE_ALL_COLUMNS = 4;
!   public static final int AUTO_RESIZE_LAST_COLUMN = 3;
!   public static final int AUTO_RESIZE_NEXT_COLUMN = 1;
    public static final int AUTO_RESIZE_OFF = 0;
    public static final int AUTO_RESIZE_SUBSEQUENT_COLUMNS = 2;
    
    public JTable ()
    {
!     throw new Error ("Not implemented");
    }
  
    public JTable (int numRows, int numColumns)
    {
!     throw new Error ("Not implemented");
    }
  
!   public JTable (Object[][] rowData, Object[] columnNames)
    {
!     throw new Error ("Not implemented");
    }
  
    public JTable (TableModel dm)
    {
!     throw new Error ("Not implemented");
    }
  
    public JTable (TableModel dm, TableColumnModel cm)
    {
!     throw new Error ("Not implemented");
    }
  
    public JTable (TableModel dm, TableColumnModel cm, ListSelectionModel sm)
    {
!     throw new Error ("Not implemented");
    }
  
!   public JTable (Vector rowData, Vector columnNames)
    {
!     throw new Error ("Not implemented");
    }
  
    public void columnAdded (TableColumnModelEvent event)
    {
!     throw new Error ("Not implemented");
    }
  
    public void columnMarginChanged (ChangeEvent event)
    {
!     throw new Error ("Not implemented");
    }
!   
    public void columnMoved (TableColumnModelEvent event)
    {
!     throw new Error ("Not implemented");
    }
!   
    public void columnRemoved (TableColumnModelEvent event)
    {
!     throw new Error ("Not implemented");
    }
    
    public void columnSelectionChanged (ListSelectionEvent event)
    {
!     throw new Error ("Not implemented");
    }
!  
    public void editingCanceled (ChangeEvent event)
    {
!     throw new Error ("Not implemented");
    }
  
    public void editingStopped (ChangeEvent event)
    {
!     throw new Error ("Not implemented");
    }
  
!   public TableColumnModel getColumnModel ()
    {
!     throw new Error ("Not implemented");
    }
    
!   public Dimension getPreferredScrollableViewportSize ()
    {
!     throw new Error ("Not implemented");
    }
  
!   public int getScrollableBlockIncrement (Rectangle visibleRect, int orientation, int direction)
    {
!     throw new Error ("Not implemented");
    }
  
!   public boolean getScrollableTracksViewportHeight ()
    {
!     throw new Error ("Not implemented");
    }
    
!   public boolean getScrollableTracksViewportWidth ()
    {
!     throw new Error ("Not implemented");
    }
  
!   public int getScrollableUnitIncrement (Rectangle visibleRect, int orientation, int direction)
    {
!     throw new Error ("Not implemented");
    }
  
!   public int getSelectedRow ()
    {
!     throw new Error ("Not implemented");
    }
    
!   public ListSelectionModel getSelectionModel ()
    {
!     throw new Error ("Not implemented");
    }
  
!   public void tableChanged (TableModelEvent event)
    {
!     throw new Error ("Not implemented");
    }
  
!   public void setModel (TableModel model)
    {
!     throw new Error ("Not implemented");
    }
  
!   public void setSelectionMode (int selectionMode)
    {
!     throw new Error ("Not implemented");
    }
  
!   public void setSelectionModel (ListSelectionModel model)
    {
!     throw new Error ("Not implemented");
    }
  
!   public void setShowGrid (boolean showGrid)
    {
!     throw new Error ("Not implemented");
    }
  
!   public void valueChanged (ListSelectionEvent event)
    {
!     throw new Error ("Not implemented");
    }
! } // class JTable
--- 41,1877 ----
  import java.awt.Color;
  import java.awt.Component;
  import java.awt.Dimension;
+ import java.awt.Point;
  import java.awt.Rectangle;
  import java.util.Hashtable;
  import java.util.Vector;
+ 
  import javax.accessibility.Accessible;
! import javax.accessibility.AccessibleContext;
  import javax.swing.event.CellEditorListener;
+ import javax.swing.event.ChangeEvent;
  import javax.swing.event.ListSelectionEvent;
  import javax.swing.event.ListSelectionListener;
  import javax.swing.event.TableColumnModelEvent;
  import javax.swing.event.TableColumnModelListener;
  import javax.swing.event.TableModelEvent;
  import javax.swing.event.TableModelListener;
+ import javax.swing.plaf.TableUI;
+ import javax.swing.table.DefaultTableCellRenderer;
+ import javax.swing.table.DefaultTableColumnModel;
+ import javax.swing.table.DefaultTableModel;
  import javax.swing.table.JTableHeader;
  import javax.swing.table.TableCellEditor;
+ import javax.swing.table.TableCellRenderer;
+ import javax.swing.table.TableColumn;
  import javax.swing.table.TableColumnModel;
+ import javax.swing.table.TableModel;
  
  public class JTable extends JComponent
    implements TableModelListener, Scrollable, TableColumnModelListener,
               ListSelectionListener, CellEditorListener, Accessible
  {
!   private static final long serialVersionUID = 3876025080382781659L;
! 
! 
!   /**
!    * When resizing columns, do not automatically change any columns. In this
!    * case the table should be enclosed in a {@link JScrollPane} in order to
!    * accomodate cases in which the table size exceeds its visible area.
!    */
    public static final int AUTO_RESIZE_OFF = 0;
+ 
+   /**
+    * When resizing column <code>i</code>, automatically change only the
+    * single column <code>i+1</code> to provide or absorb excess space
+    * requirements.
+    */
+   public static final int AUTO_RESIZE_NEXT_COLUMN = 1;
+ 
+   /**
+    * When resizing column <code>i</code> in a table of <code>n</code>
+    * columns, automatically change all columns in the range <code>[i+1,
+    * n)</code>, uniformly, to provide or absorb excess space requirements.
+    */
    public static final int AUTO_RESIZE_SUBSEQUENT_COLUMNS = 2;
    
+   /**
+    * When resizing column <code>i</code> in a table of <code>n</code>
+    * columns, automatically change all columns in the range <code>[0,
+    * n)</code> (with the exception of column i) uniformly, to provide or
+    * absorb excess space requirements.
+    */
+   public static final int AUTO_RESIZE_ALL_COLUMNS = 4;
+ 
+   /**
+    * When resizing column <code>i</code> in a table of <code>n</code>
+    * columns, automatically change column <code>n-1</code> (the last column
+    * in the table) to provide or absorb excess space requirements.
+    */
+   public static final int AUTO_RESIZE_LAST_COLUMN = 3;
+ 
+ 
+   /**
+    * A table mapping {@link java.lang.Class} objects to 
+    * {@link TableCellEditor} objects. This table is consulted by the 
+    * FIXME
+    */
+   protected Hashtable defaultEditorsByColumnClass;
+ 
+   /**
+    * A table mapping {@link java.lang.Class} objects to 
+    * {@link TableCellEditor} objects. This table is consulted by the 
+    * FIXME
+    */
+   protected Hashtable defaultRenderersByColumnClass;
+ 
+   /**
+    * The column that is edited, -1 if the table is not edited currently.
+    */
+   protected int editingColumn;
+ 
+   /**
+    * The row that is edited, -1 if the table is not edited currently.
+    */
+   protected int editingRow;
+ 
+   /**
+    * The component that is used for editing.
+    * <code>null</code> if the table is not editing currently.
+    *
+    */
+   protected transient Component editorComp;
+ 
+   /**
+    * Whether or not the table should automatically compute a matching
+    * {@link TableColumnModel} and assign it to the {@link #columnModel}
+    * property when the {@link #dataModel} property is changed. 
+    *
+    * @see #setModel()
+    * @see #createColumnsFromModel()
+    * @see #setColumnModel()
+    * @see #setAutoCreateColumnsFromModel()
+    * @see #getAutoCreateColumnsFromModel()
+    */
+   protected boolean autoCreateColumnsFromModel;
+ 
+   /**
+    * A numeric code specifying the resizing behavior of the table. Must be
+    * one of {@link #AUTO_RESIZE_ALL_COLUMNS} (the default), {@link
+    * #AUTO_RESIZE_LAST_COLUMN}, {@link #AUTO_RESIZE_NEXT_COLUMN}, {@link
+    * #AUTO_RESIZE_SUBSEQUENT_COLUMNS}, or {@link #AUTO_RESIZE_OFF}.
+    * 
+    * @see #doLayout()
+    * @see #setAutoResizeMode()
+    * @see #getAutoResizeMode()
+    */
+   protected int autoResizeMode;
+ 
+   /**
+    * The height in pixels of any row of the table. All rows in a table are
+    * of uniform height. This differs from column width, which varies on a
+    * per-column basis, and is stored in the individual columns of the
+    * {@link #columnModel}.
+    * 
+    * @see #getRowHeight()
+    * @see #setRowHeight()
+    * @see TableColumn#getWidth()
+    * @see TableColumn#setWidth()
+    */
+   protected int rowHeight;
+ 
+   /**
+    * The height in pixels of the gap left between any two rows of the table. 
+    * 
+    * @see #setRowMargin()
+    * @see #getRowHeight()
+    * @see #getIntercellSpacing()
+    * @see #setIntercellSpacing()
+    * @see TableColumnModel#getColumnMargin()
+    * @see TableColumnModel#setColumnMargin()
+    */
+   protected int rowMargin;
+ 
+   /**
+    * Whether or not the table should allow row selection. If the table
+    * allows both row <em>and</em> column selection, it is said to allow
+    * "cell selection". Previous versions of the JDK supported cell
+    * selection as an independent concept, but it is now represented solely
+    * in terms of simultaneous row and column selection.
+    *
+    * @see TableColumnModel#columnSelectionAllowed()
+    * @see #setRowSelectionAllowed()
+    * @see #getRowSelectionAllowed()
+    * @see #getCellSelectionEnabled()
+    * @see #setCellSelectionEnabled()
+    */
+   protected boolean rowSelectionAllowed;
+ 
+   /**
+    * @deprecated Use {@link #rowSelectionAllowed}, {@link
+    * #columnSelectionAllowed}, or the combined methods {@link
+    * getCellSelectionEnabled} and {@link setCellSelectionEnabled}.
+    */
+   protected boolean cellSelectionEnabled;
+   
+   /**
+    * The model for data stored in the table. Confusingly, the published API
+    * requires that this field be called <code>dataModel</code>, despite its
+    * property name. The table listens to its model as a {@link
+    * TableModelListener}.
+    *
+    * @see #tableChanged()
+    * @see TableModel#addTableModelListener()
+    */
+   protected TableModel dataModel;
+ 
+   /**
+    * <p>A model of various aspects of the columns of the table, <em>not
+    * including</em> the data stored in them. The {@link TableColumnModel}
+    * is principally concerned with holding a set of {@link TableColumn}
+    * objects, each of which describes the display parameters of a column
+    * and the numeric index of the column from the data model which the
+    * column is presenting.</p>
+    *
+    * <p>The TableColumnModel also contains a {@link ListSelectionModel} which
+    * indicates which columns are currently selected. This selection model
+    * works in combination with the {@link selectionModel} of the table
+    * itself to specify a <em>table selection</em>: a combination of row and
+    * column selections.</p>
+    *
+    * <p>Most application programmers do not need to work with this property
+    * at all: setting {@link #autoCreateColumnsFromModel} will construct the
+    * columnModel automatically, and the table acts as a facade for most of
+    * the interesting properties of the columnModel anyways.</p>
+    * 
+    * @see #setColumnModel()
+    * @see #getColumnModel()
+    */
+   protected TableColumnModel columnModel;
+ 
+   /**
+    * A model of the rows of this table which are currently selected. This
+    * model is used in combination with the column selection model held as a
+    * member of the {@link columnModel} property, to represent the rows and
+    * columns (or both: cells) of the table which are currently selected.
+    *
+    * @see #rowSelectionAllowed
+    * @see #setSelectionModel()
+    * @see #getSelectionModel()
+    * @see TableColumnModel#getSelectionModel()
+    * @see ListSelectionModel#addListSelectionListener()   
+    */
+   protected ListSelectionModel selectionModel;
+ 
+   /**
+    * The accessibleContext property.
+    */
+   protected AccessibleContext accessibleContext;
+ 
+   /**
+    * The current cell editor. 
+    */
+   protected TableCellEditor cellEditor;
+ 
+   /**
+    * Whether or not drag-and-drop is enabled on this table.
+    *
+    * @see #setDragEnabled()
+    * @see #getDragEnabled()
+    */
+   private boolean dragEnabled;
+ 
+   /**
+    * The color to paint the grid lines of the table, when either {@link
+    * #showHorizontalLines} or {@link #showVerticalLines} is set.
+    *
+    * @see #setGridColor()
+    * @see #getGridColor()
+    */
+   protected Color gridColor;
+ 
+   /**
+    * The size this table would prefer its viewport assume, if it is
+    * contained in a {@link JScrollPane}.
+    *
+    * @see #setPreferredScrollableViewportSize()
+    * @see #getPreferredScrollableViewportSize()
+    */
+   protected Dimension preferredViewportSize;
+ 
+   /**
+    * The color to paint the background of selected cells. Fires a property
+    * change event with name {@link #SELECTION_BACKGROUND_CHANGED_PROPERTY}
+    * when its value changes.
+    *
+    * @see #setSelectionBackground()
+    * @see #getSelectionBackground()
+    */
+   protected Color selectionBackground;
+ 
+   /**
+    * The name carried in property change events when the {@link
+    * #selectionBackground} property changes.
+    */
+   private static final String SELECTION_BACKGROUND_CHANGED_PROPERTY = "selectionBackground";
+ 
+   /**
+    * The color to paint the foreground of selected cells. Fires a property
+    * change event with name {@link #SELECTION_FOREGROUND_CHANGED_PROPERTY}
+    * when its value changes.
+    *
+    * @see #setSelectionForeground()
+    * @see #getSelectionForeground()
+    */
+   protected Color selectionForeground;
+ 
+   /**
+    * The name carried in property change events when the
+    * {@link #selectionForeground} property changes.
+    */
+   private static final String SELECTION_FOREGROUND_CHANGED_PROPERTY = "selectionForeground";
+ 
+   /**
+    * The showHorizontalLines property.
+    */
+   protected boolean showHorizontalLines;
+ 
+   /**
+    * The showVerticalLines property.
+    */
+   protected boolean showVerticalLines;
+ 
+   /**
+    * The tableHeader property.
+    */
+   protected JTableHeader tableHeader;
+ 
+   
+   /**
+    * Creates a new <code>JTable</code> instance.
+    */
    public JTable ()
    {
!     this(null, null, null);
    }
  
+   /**
+    * Creates a new <code>JTable</code> instance.
+    *
+    * @param numRows an <code>int</code> value
+    * @param numColumns an <code>int</code> value
+    */
    public JTable (int numRows, int numColumns)
    {
!     this(new DefaultTableModel(numRows, numColumns));
    }
  
!   /**
!    * Creates a new <code>JTable</code> instance.
!    *
!    * @param data an <code>Object[][]</code> value
!    * @param columnNames an <code>Object[]</code> value
!    */
!   public JTable(Object[][] data, Object[] columnNames)
    {
!     this(new DefaultTableModel(data, columnNames));
    }
  
+   /**
+    * Creates a new <code>JTable</code> instance.
+    *
+    * @param dm a <code>TableModel</code> value
+    */
    public JTable (TableModel dm)
    {
!     this(dm, null, null);
    }
  
+   /**
+    * Creates a new <code>JTable</code> instance.
+    *
+    * @param dm a <code>TableModel</code> value
+    * @param cm a <code>TableColumnModel</code> value
+    */
    public JTable (TableModel dm, TableColumnModel cm)
    {
!     this(dm, cm, null);
    }
  
+   /**
+    * Creates a new <code>JTable</code> instance.
+    *
+    * @param dm a <code>TableModel</code> value
+    * @param cm a <code>TableColumnModel</code> value
+    * @param sm a <code>ListSelectionModel</code> value
+    */
    public JTable (TableModel dm, TableColumnModel cm, ListSelectionModel sm)
    {
!     this.dataModel = dm == null ? createDefaultDataModel() : dm;
!     setSelectionModel(sm == null ? createDefaultSelectionModel() : sm);
! 
!     this.columnModel = cm;
!     initializeLocalVars();
!     updateUI();
!   }    
! 
!   protected void initializeLocalVars()
!   {
!     this.autoCreateColumnsFromModel = false;
!     if (columnModel == null)
!       {
!         this.autoCreateColumnsFromModel = true;
!         createColumnsFromModel();
!       }
!     this.columnModel.addColumnModelListener(this);
!     
!     this.defaultRenderersByColumnClass = new Hashtable();
!     createDefaultRenderers();
! 
!     this.defaultEditorsByColumnClass = new Hashtable();
!     createDefaultEditors();
! 
!     this.autoResizeMode = AUTO_RESIZE_ALL_COLUMNS;
!     this.rowHeight = 16;
!     this.rowMargin = 1;
!     this.rowSelectionAllowed = true;
!     // this.accessibleContext = new AccessibleJTable();
!     this.cellEditor = null;
!     this.dragEnabled = false;
!     this.preferredViewportSize = new Dimension(450,400);
!     this.showHorizontalLines = true;
!     this.showVerticalLines = true;
!     this.editingColumn = -1;
!     this.editingRow = -1;
!     setIntercellSpacing(new Dimension(1,1));
!     setTableHeader(createDefaultTableHeader());
    }
  
!   /**
!    * Creates a new <code>JTable</code> instance.
!    *
!    * @param data a <code>Vector</code> value
!    * @param columnNames a <code>Vector</code> value
!    */
!   public JTable(Vector data, Vector columnNames)
    {
!     this(new DefaultTableModel(data, columnNames));
!   }
! 
!   public void addColumn(TableColumn column)
!   {
!     if (column.getHeaderValue() == null)
!       {
! 	String name = getColumnName(column.getModelIndex());
! 	column.setHeaderValue(name);
!       }
!     
!     columnModel.addColumn(column);
!   }
! 
!   protected void createDefaultEditors()
!   {
!     //FIXME: Create the editor object.
!   }
! 
!   protected void createDefaultRenderers()
!   {
!     //FIXME: Create the renderer object.
!   }
!   
!   /**
!    * @deprecated 1.0.2, replaced by <code>new JScrollPane(JTable)</code>
!    */
!   public static JScrollPane createScrollPaneForTable(JTable table)
!   {
!     return new JScrollPane(table);
!   }
! 
!   protected TableColumnModel createDefaultColumnModel()
!   {
!     return new DefaultTableColumnModel();
!   }
! 
!   protected TableModel createDefaultDataModel()
!   {
!     return new DefaultTableModel();
!   }
! 
!   protected ListSelectionModel createDefaultSelectionModel()
!   {
!     return new DefaultListSelectionModel();
!   }
! 
!   protected JTableHeader createDefaultTableHeader()
!   {
!     return new JTableHeader(columnModel);
!   }
!  
!   private void createColumnsFromModel()
!   {
!     if (dataModel == null)
!       return;
! 
!     TableColumnModel cm = createDefaultColumnModel();
! 
!     for (int i = 0; i < dataModel.getColumnCount(); ++i)
!       {
!         cm.addColumn(new TableColumn(i));
!       }
!     this.setColumnModel(cm);
    }
  
+   // listener support 
+ 
    public void columnAdded (TableColumnModelEvent event)
    {
!     revalidate();
!     repaint();
    }
  
    public void columnMarginChanged (ChangeEvent event)
    {
!     revalidate();
!     repaint();
    }
! 
    public void columnMoved (TableColumnModelEvent event)
    {
!     revalidate();
!     repaint();
    }
! 
    public void columnRemoved (TableColumnModelEvent event)
    {
!     revalidate();
!     repaint();
    }
    
    public void columnSelectionChanged (ListSelectionEvent event)
    {
!     repaint();
    }
! 
    public void editingCanceled (ChangeEvent event)
    {
!     repaint();
    }
  
    public void editingStopped (ChangeEvent event)
    {
!     repaint();
    }
  
!   public void tableChanged (TableModelEvent event)
    {
!     repaint();
!   }
! 
!   public void valueChanged (ListSelectionEvent event)
!   {
!     repaint();
!   }
! 
!  /**
!    * Returns index of the column that contains specified point 
!    * or -1 if this table doesn't contain this point.
!    *
!    * @param point point to identify the column
!    * @return index of the column that contains specified point or 
!    * -1 if this table doesn't contain this point.
!    */
!   public int columnAtPoint(Point point)
!   {
!     int x0 = getLocation().x;
!     int ncols = getColumnCount();
!     Dimension gap = getIntercellSpacing();
!     TableColumnModel cols = getColumnModel();
!     int x = point.x;
!     
!     for (int i = 0; i < ncols; ++i)
!       {
!         int width = cols.getColumn(i).getWidth() + (gap == null ? 0 : gap.width);
!         if (0 <= x && x < width)
!           return i;
!         x -= width;  
!       }
!     
!     return -1;
!   }
! 
!   /**
!    * Returns index of the row that contains specified point or 
!    * -1 if this table doesn't contain this point.
!    *
!    * @param point point to identify the row
!    * @return index of the row that contains specified point or 
!    * -1 if this table doesn't contain this point.
!    */
!   public int rowAtPoint(Point point)
!   {
!     int y0 = getLocation().y;
!     int nrows = getRowCount();
!     Dimension gap = getIntercellSpacing();
!     int height = getRowHeight() + (gap == null ? 0 : gap.height);
!     int y = point.y;
!     
!     for (int i = 0; i < nrows; ++i)
!       {
!         if (0 <= y && y < height)
!           return i;
!         y -= height;
!       }
!       
!     return -1;
!   }
! 
!   /** 
!    * Calculate the visible rectangle for a particular row and column. The
!    * row and column are specified in visual terms; the column may not match
!    * the {@link #dataModel} column.
!    *
!    * @param row the visible row to get the cell rectangle of
!    *
!    * @param column the visible column to get the cell rectangle of, which may
!    * differ from the {@link #dataModel} column
!    *
!    * @param includeSpacing whether or not to include the cell margins in the
!    * resulting cell. If <code>false</code>, the result will only contain the
!    * inner area of the target cell, not including its margins.
!    *
!    * @return a rectangle enclosing the specified cell
!    */
!   public Rectangle getCellRect(int row,
!                                int column,
!                                boolean includeSpacing)
!   {
!     int height = getHeight();
!     int width = columnModel.getColumn(column).getWidth();
!     int x_gap = columnModel.getColumnMargin();
!     int y_gap = rowMargin;
! 
!     column = Math.max(0, Math.min(column, getColumnCount() - 1));
!     row = Math.max(0, Math.min(row, getRowCount() - 1));
! 
!     int x = 0;
!     int y = (height + y_gap) * row;
! 
!     for (int i = 0; i < column; ++i)
!       {        
!         x += columnModel.getColumn(i).getWidth();
!         x += x_gap;
!       }
! 
!     if (includeSpacing)
!       return new Rectangle(x, y, width, height);
!     else
!       return new Rectangle(x, y, width - x_gap, height - y_gap);
!   }
! 
!   public void clearSelection()
!   {
!     selectionModel.clearSelection();
!   }
! 
!   /**
!    * Get the value of the {@link #selectedRow} property by delegation to
!    * the {@link ListSelectionModel#getMinSelectionIndex} method of the
!    * {@link #selectionModel} field.
!    *
!    * @return The current value of the selectedRow property
!    */
!   public int getSelectedRow ()
!   {
!     return selectionModel.getMinSelectionIndex();
    }
    
!   /**
!    * Get the value of the {@link #selectionModel} property.
!    *
!    * @return The current value of the property
!    */
!   public ListSelectionModel getSelectionModel()
    {
!     if (! rowSelectionAllowed)
!       return null;
! 
!     return selectionModel;
!   }
!   
!   public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
!   {
!     if (orientation == SwingConstants.VERTICAL)
!       return visibleRect.height * direction;
!     else
!       return visibleRect.width * direction;
    }
  
!   /**
!    * Get the value of the {@link #scrollableTracksViewportHeight} property.
!    *
!    * @return The constant value <code>false</code>
!    */
! 
!   public boolean getScrollableTracksViewportHeight()
    {
!     return false;
    }
+   
+   /**
+    * Get the value of the {@link #scrollableTracksViewportWidth} property.
+    *
+    * @return <code>true</code> unless the {@link autoResizeMode} prperty is
+    * <code>AUTO_RESIZE_OFF</code>
+    */
  
!   public boolean getScrollableTracksViewportWidth()
    {
!     if (autoResizeMode == AUTO_RESIZE_OFF)
!       return false;
!     else
!       return true;
!   }
! 
!   public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
!   {
!     // FIXME: I don't exactly know what sun does here. in both cases they
!     // pick values which do *not* simply expose the next cell in a given
!     // scroll direction.
! 
!     if (orientation == SwingConstants.VERTICAL)
!       return rowHeight;
!     else
!       {
!         int sum = 0;
!         for (int i = 0; i < getColumnCount(); ++i)
!           sum += columnModel.getColumn(0).getWidth();
!         return getColumnCount() == 0 ? 10 : sum / getColumnCount();
!       }
!   }
! 
! 
!   public TableCellEditor getCellEditor(int row, int column)
!   {
!     TableCellEditor editor = columnModel.getColumn(column).getCellEditor();
! 
!     if (editor == null)
!       editor = getDefaultEditor(dataModel.getColumnClass(column));
! 
!     return editor;
!   }
! 
!   public TableCellEditor getDefaultEditor(Class columnClass)
!   {
!     if (defaultEditorsByColumnClass.containsKey(columnClass))
!       return (TableCellEditor) defaultEditorsByColumnClass.get(columnClass);
!     else
!       {
! 	// FIXME: We have at least an editor for Object.class in our defaults.
!         TableCellEditor r = new DefaultCellEditor(new JTextField());
!         defaultEditorsByColumnClass.put(columnClass, r);
!         return r;
!       }
!   }
! 
! 
! 
!   public TableCellRenderer getCellRenderer(int row, int column)
!   {
!     TableCellRenderer renderer =
!       columnModel.getColumn(column).getCellRenderer();
!     
!     if (renderer == null)
!       renderer = getDefaultRenderer(dataModel.getColumnClass(column));
!     
!     return renderer;
!   }
! 
!   public void setDefaultRenderer(Class columnClass, TableCellRenderer rend)
!   {
!     defaultRenderersByColumnClass.put(columnClass, rend);
!   }
! 
!   public TableCellRenderer getDefaultRenderer(Class columnClass)
!   {
!     if (defaultRenderersByColumnClass.containsKey(columnClass))
!       return (TableCellRenderer) defaultRenderersByColumnClass.get(columnClass);
!     else
!       {
!         TableCellRenderer r = new DefaultTableCellRenderer();
!         defaultRenderersByColumnClass.put(columnClass, r);
!         return r;
!       }
!   }
! 
!   public int convertColumnIndexToModel(int vc)
!   {
!     if (vc < 0)
!       return vc;
!     else if (vc > getColumnCount())
!       return -1;
!     else
!       return columnModel.getColumn(vc).getModelIndex();
!   }
! 
!   public int convertColumnIndexToView(int mc)
!   {
!     if (mc < 0)
!       return mc;
!     int ncols = getColumnCount();
!     for (int vc = 0; vc < ncols; ++vc)
!       {
!         if (columnModel.getColumn(vc).getModelIndex() == mc)
!           return vc;
!       }
!     return -1;
!   }
! 
!   public Component prepareRenderer(TableCellRenderer renderer,
!                                    int row,
!                                    int column)
!   {
!     boolean rsa = getRowSelectionAllowed();
!     boolean csa = getColumnSelectionAllowed();
!     boolean rs = rsa ? getSelectionModel().isSelectedIndex(row) : false;
!     boolean cs = csa ? columnModel.getSelectionModel().isSelectedIndex(column) : false;
!     boolean isSelected = ((rsa && csa && rs && cs) 
!                           || (rsa && !csa && rs) 
!                           || (!rsa && csa && cs));
!     
!     return renderer.getTableCellRendererComponent(this,
!                                                   dataModel.getValueAt(row, 
! 						                       convertColumnIndexToModel(column)),
!                                                   isSelected,
!                                                   false, // hasFocus
!                                                   row, column);
!   }
! 
! 
!   /**
!    * Get the value of the {@link #autoCreateColumnsFromModel} property.
!    *
!    * @return The current value of the property
!    */
!   public boolean getAutoCreateColumnsFromModel()
!   {
!     return autoCreateColumnsFromModel;
!   }
! 
!   /**
!    * Get the value of the {@link #autoResizeMode} property.
!    *
!    * @return The current value of the property
!    */
!   public int getAutoResizeMode()
!   {
!     return autoResizeMode;
!   }
! 
!   /**
!    * Get the value of the {@link #rowHeight} property.
!    *
!    * @return The current value of the property
!    */
!   public int getRowHeight()
!   {
!     return rowHeight;
!   }
! 
!   /**
!    * Get the value of the {@link #rowMargin} property.
!    *
!    * @return The current value of the property
!    */
!   public int getRowMargin()
!   {
!     return rowMargin;
!   }
! 
!   /**
!    * Get the value of the {@link #rowSelectionAllowed} property.
!    *
!    * @return The current value of the property
!    */
!   public boolean getRowSelectionAllowed()
!   {
!     return rowSelectionAllowed;
!   }
! 
!   /**
!    * Get the value of the {@link #cellSelectionEnabled} property.
!    *
!    * @return The current value of the property
!    */
!   public boolean getCellSelectionEnabled()
!   {
!     return getColumnSelectionAllowed() && getRowSelectionAllowed();
!   }
! 
!   /**
!    * Get the value of the {@link #dataModel} property.
!    *
!    * @return The current value of the property
!    */
!   public TableModel getModel()
!   {
!     return dataModel;
!   }
! 
!   /**
!    * Get the value of the {@link #columnCount} property by
!    * delegation to the @{link #columnModel} field.
!    *
!    * @return The current value of the columnCount property
!    */
!   public int getColumnCount()
!   {
!     return columnModel.getColumnCount();    
!   }
! 
!   /**
!    * Get the value of the {@link #rowCount} property by
!    * delegation to the @{link #dataModel} field.
!    *
!    * @return The current value of the rowCount property
!    */
!   public int getRowCount()
!   {
!     return dataModel.getRowCount();
!   }
! 
!   /**
!    * Get the value of the {@link #columnModel} property.
!    *
!    * @return The current value of the property
!    */
!   public TableColumnModel getColumnModel()
!   {
!     return columnModel;
!   }
! 
!   /**
!    * Get the value of the {@link #selectedColumn} property by
!    * delegation to the @{link #columnModel} field.
!    *
!    * @return The current value of the selectedColumn property
!    */
!   public int getSelectedColumn()
!   {
!     return columnModel.getSelectionModel().getMinSelectionIndex();
!   }
! 
!   private static int countSelections(ListSelectionModel lsm)
!   {
!     int lo = lsm.getMinSelectionIndex();
!     int hi = lsm.getMaxSelectionIndex();
!     int sum = 0;
!     if (lo != -1 && hi != -1)
!       {
!         switch (lsm.getSelectionMode())
!           {
!           case ListSelectionModel.SINGLE_SELECTION:
!             sum = 1;
!             break;
!             
!           case ListSelectionModel.SINGLE_INTERVAL_SELECTION:
!             sum = hi - lo + 1;
!             break;
!             
!           case ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:        
!             for (int i = lo; i <= hi; ++i)
!               if (lsm.isSelectedIndex(i))        
!                 ++sum;
!             break;
!           }
!       }
!     return sum;
!   }
! 
!   private static int[] getSelections(ListSelectionModel lsm)
!   {
!     int sz = countSelections(lsm);
!     int [] ret = new int[sz];
! 
!     int lo = lsm.getMinSelectionIndex();
!     int hi = lsm.getMaxSelectionIndex();
!     int j = 0;
!     java.util.ArrayList ls = new java.util.ArrayList();
!     if (lo != -1 && hi != -1)
!       {
!         switch (lsm.getSelectionMode())
!           {
!           case ListSelectionModel.SINGLE_SELECTION:
!             ret[0] = lo;
!             break;      
!       
!           case ListSelectionModel.SINGLE_INTERVAL_SELECTION:            
!             for (int i = lo; i <= hi; ++i)
!               ret[j++] = i;
!             break;
!             
!           case ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:        
!             for (int i = lo; i <= hi; ++i)
!               if (lsm.isSelectedIndex(i))        
!                 ret[j++] = i;
!             break;
!           }
!       }
!     return ret;
!   }
! 
!   /**
!    * Get the value of the {@link #selectedColumnCount} property by
!    * delegation to the @{link #columnModel} field.
!    *
!    * @return The current value of the selectedColumnCount property
!    */  
!   public int getSelectedColumnCount()
!   {
!     return countSelections(columnModel.getSelectionModel());
!   }
! 
!   /**
!    * Get the value of the {@link #selectedColumns} property by
!    * delegation to the @{link #columnModel} field.
!    *
!    * @return The current value of the selectedColumns property
!    */
!   public int[] getSelectedColumns()
!   {
!     return getSelections(columnModel.getSelectionModel());
!   }
! 
!   /**
!    * Get the value of the {@link #columnSelectionAllowed} property.
!    *
!    * @return The current value of the columnSelectionAllowed property
!    */
!   public boolean getColumnSelectionAllowed()
!   {
!     return getColumnModel().getColumnSelectionAllowed();
!   }
! 
!   /**
!    * Get the value of the {@link #selectedRowCount} property by
!    * delegation to the @{link #selectionModel} field.
!    *
!    * @return The current value of the selectedRowCount property
!    */
!   public int getSelectedRowCount()
!   {
!     return countSelections(selectionModel);
!   }
! 
!   /**
!    * Get the value of the {@link #selectedRows} property by
!    * delegation to the @{link #selectionModel} field.
!    *
!    * @return The current value of the selectedRows property
!    */
!   public int[] getSelectedRows()
!   {
!     return getSelections(selectionModel);
!   }
! 
!   /**
!    * Get the value of the {@link #accessibleContext} property.
!    *
!    * @return The current value of the property
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     return accessibleContext;
!   }
! 
!   /**
!    * Get the value of the {@link #cellEditor} property.
!    *
!    * @return The current value of the property
!    */
!   public TableCellEditor getCellEditor()
!   {
!     return cellEditor;
!   }
! 
!   /**
!    * Get the value of the {@link #dragEnabled} property.
!    *
!    * @return The current value of the property
!    */
!   public boolean getDragEnabled()
!   {
!     return dragEnabled;
!   }
! 
!   /**
!    * Get the value of the {@link #gridColor} property.
!    *
!    * @return The current value of the property
!    */
!   public Color getGridColor()
!   {
!     return gridColor;
!   }
! 
!   /**
!    * Get the value of the {@link #intercellSpacing} property.
!    *
!    * @return The current value of the property
!    */
!   public Dimension getIntercellSpacing()
!   {
!     return new Dimension(columnModel.getColumnMargin(), rowMargin);
!   }
! 
!   /**
!    * Get the value of the {@link #preferredViewportSize} property.
!    *
!    * @return The current value of the property
!    */
!   public Dimension getPreferredScrollableViewportSize()
!   {
!     return preferredViewportSize;
!   }
! 
!   /**
!    * Get the value of the {@link #selectionBackground} property.
!    *
!    * @return The current value of the property
!    */
!   public Color getSelectionBackground()
!   {
!     return selectionBackground;
!   }
! 
!   /**
!    * Get the value of the {@link #selectionForeground} property.
!    *
!    * @return The current value of the property
!    */
!   public Color getSelectionForeground()
!   {
!     return selectionForeground;
!   }
! 
!   /**
!    * Get the value of the {@link #showHorizontalLines} property.
!    *
!    * @return The current value of the property
!    */
!   public boolean getShowHorizontalLines()
!   {
!     return showHorizontalLines;
!   }
! 
!   /**
!    * Get the value of the {@link #showVerticalLines} property.
!    *
!    * @return The current value of the property
!    */
!   public boolean getShowVerticalLines()
!   {
!     return showVerticalLines;
!   }
! 
!   /**
!    * Get the value of the {@link #tableHeader} property.
!    *
!    * @return The current value of the property
!    */
!   public JTableHeader getTableHeader()
!   {
!     return tableHeader;
!   }
! 
!   /**
!    * Removes specified column from displayable columns of this table.
!    *
!    * @param column column to removed
!    */
!   public void removeColumn(TableColumn column)
!   {    
!     columnModel.removeColumn(column);
!   }
! 
!   /**
!    * Moves column at the specified index to new given location.
!    *
!    * @param column index of the column to move
!    * @param targetColumn index specifying new location of the column
!    */ 
!   public void moveColumn(int column,int targetColumn) 
!   {
!     columnModel.moveColumn(column, targetColumn);
!   }
! 
!   /**
!    * Set the value of the {@link #autoCreateColumnsFromModel} property.
!    *
!    * @param a The new value of the autoCreateColumnsFromModel property
!    */ 
!   public void setAutoCreateColumnsFromModel(boolean a)
!   {
!     autoCreateColumnsFromModel = a;
!   }
! 
!   /**
!    * Set the value of the {@link #autoResizeMode} property.
!    *
!    * @param a The new value of the autoResizeMode property
!    */ 
!   public void setAutoResizeMode(int a)
!   {
!     autoResizeMode = a;
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #rowHeight} property.
!    *
!    * @param r The new value of the rowHeight property
!    */ 
!   public void setRowHeight(int r)
!   {
!     if (rowHeight < 1)
!       throw new IllegalArgumentException();
!     
!     rowHeight = r;
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #rowMargin} property.
!    *
!    * @param r The new value of the rowMargin property
!    */ 
!   public void setRowMargin(int r)
!   {
!     rowMargin = r;
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #rowSelectionAllowed} property.
!    *
!    * @param r The new value of the rowSelectionAllowed property
!    */ 
!   public void setRowSelectionAllowed(boolean r)
!   {
!     rowSelectionAllowed = r;
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #cellSelectionEnabled} property.
!    *
!    * @param c The new value of the cellSelectionEnabled property
!    */ 
!   public void setCellSelectionEnabled(boolean c)
!   {
!     setColumnSelectionAllowed(c);
!     setRowSelectionAllowed(c);
!     // for backward-compatibility sake:
!     cellSelectionEnabled = true;
!   }
! 
!   /**
!    * <p>Set the value of the {@link #dataModel} property.</p>
!    *
!    * <p>Unregister <code>this</code> as a {@link TableModelListener} from
!    * previous {@link #dataModel} and register it with new parameter
!    * <code>m</code>.</p>
!    *
!    * @param m The new value of the model property
!    */ 
!   public void setModel(TableModel m)
!   {
!     // Throw exception is m is null.
!     if (m == null)
!       throw new IllegalArgumentException();
!    
!     // Don't do anything if setting the current model again.
!     if (dataModel == m)
!       return;
!     
!     // Remove table as TableModelListener from old model.
!     if (dataModel != null)
!       dataModel.removeTableModelListener(this);
!     
!     if (m != null)
!       {
! 	// Set property.
!         dataModel = m;
! 
! 	// Add table as TableModelListener to new model.
! 	dataModel.addTableModelListener(this);
! 
! 	// Automatically create columns.
! 	if (autoCreateColumnsFromModel)
! 	  createColumnsFromModel();
!       }
!     
!     // Repaint table.
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * <p>Set the value of the {@link #columnModel} property.</p>
!    *
!    * <p>Unregister <code>this</code> as a {@link TableColumnModelListener}
!    * from previous {@link #columnModel} and register it with new parameter
!    * <code>c</code>.</p>
!    *
!    * @param c The new value of the columnModel property
!    */ 
!   public void setColumnModel(TableColumnModel c)
!   {
!     if (c == null)
!       throw new IllegalArgumentException();
!     TableColumnModel tmp = columnModel;
!     if (tmp != null)
!       tmp.removeColumnModelListener(this);
!     if (c != null)
!       c.addColumnModelListener(this);
!     columnModel = c;
!     if (dataModel != null && columnModel != null)
!       {
!         int ncols = getColumnCount();
!         for (int i = 0; i < ncols; ++i)
!           columnModel.getColumn(i).setHeaderValue(dataModel.getColumnName(i));
!       }
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #columnSelectionAllowed} property.
!    *
!    * @param c The new value of the property
!    */ 
!   public void setColumnSelectionAllowed(boolean c)
!   {
!     getColumnModel().setColumnSelectionAllowed(c);
!     repaint();
!   }
! 
!   /**
!    * <p>Set the value of the {@link #selectionModel} property.</p>
!    *
!    * <p>Unregister <code>this</code> as a {@link ListSelectionListener}
!    * from previous {@link #selectionModel} and register it with new
!    * parameter <code>s</code>.</p>
!    *
!    * @param s The new value of the selectionModel property
!    */ 
!   public void setSelectionModel(ListSelectionModel s)
!   {
!     if (s == null)
!       throw new IllegalArgumentException();
!     ListSelectionModel tmp = selectionModel;
!     if (tmp != null)
!       tmp.removeListSelectionListener(this);
!     if (s != null)
!       s.addListSelectionListener(this);
!     selectionModel = s;
!   }
! 
!   /**
!    * Set the value of the {@link #selectionMode} property by
!    * delegation to the {@link #selectionModel} field. The same selection
!    * mode is set for row and column selection models.
!    *
!    * @param s The new value of the property
!    */ 
!   public void setSelectionMode(int s)
!   { 
!     selectionModel.setSelectionMode(s);    
!     columnModel.getSelectionModel().setSelectionMode(s);
!     
!     repaint();
!   }
! 
!   /**
!    * <p>Set the value of the {@link #cellEditor} property.</p>
!    *
!    * <p>Unregister <code>this</code> as a {@link CellEditorListener} from
!    * previous {@link #cellEditor} and register it with new parameter
!    * <code>c</code>.</p>
!    *
!    * @param c The new value of the cellEditor property
!    */ 
!   public void setCellEditor(TableCellEditor c)
!   {
!     TableCellEditor tmp = cellEditor;
!     if (tmp != null)
!       tmp.removeCellEditorListener(this);
!     if (c != null)
!       c.addCellEditorListener(this);
!     cellEditor = c;
!   }
! 
!   /**
!    * Set the value of the {@link #dragEnabled} property.
!    *
!    * @param d The new value of the dragEnabled property
!    */ 
!   public void setDragEnabled(boolean d)
!   {
!     dragEnabled = d;
!   }
! 
!   /**
!    * Set the value of the {@link #gridColor} property.
!    *
!    * @param g The new value of the gridColor property
!    */ 
!   public void setGridColor(Color g)
!   {
!     gridColor = g;
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #intercellSpacing} property.
!    *
!    * @param i The new value of the intercellSpacing property
!    */ 
!   public void setIntercellSpacing(Dimension i)
!   {
!     rowMargin = i.height;
!     columnModel.setColumnMargin(i.width);
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #preferredViewportSize} property.
!    *
!    * @param p The new value of the preferredViewportSize property
!    */ 
!   public void setPreferredScrollableViewportSize(Dimension p)
!   {
!     preferredViewportSize = p;
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * <p>Set the value of the {@link #selectionBackground} property.</p>
!    *
!    * <p>Fire a PropertyChangeEvent with name {@link
!    * #SELECTION_BACKGROUND_CHANGED_PROPERTY} to registered listeners, if
!    * selectionBackground changed.</p>
!    *
!    * @param s The new value of the selectionBackground property
!    */ 
!   public void setSelectionBackground(Color s)
!   {
!     Color tmp = selectionBackground;
!     selectionBackground = s;
!     if (((tmp == null && s != null)
!          || (s == null && tmp != null)
!          || (tmp != null && s != null && !tmp.equals(s))))
!       firePropertyChange(SELECTION_BACKGROUND_CHANGED_PROPERTY, tmp, s);
!     repaint();
!   }
! 
!   /**
!    * <p>Set the value of the {@link #selectionForeground} property.</p>
!    *
!    * <p>Fire a PropertyChangeEvent with name {@link
!    * SELECTION_FOREGROUND_CHANGED_PROPERTY} to registered listeners, if
!    * selectionForeground changed.</p>
!    *
!    * @param s The new value of the selectionForeground property
!    */ 
!   public void setSelectionForeground(Color s)
!   {
!     Color tmp = selectionForeground;
!     selectionForeground = s;
!     if (((tmp == null && s != null)
!          || (s == null && tmp != null)
!          || (tmp != null && s != null && !tmp.equals(s))))
!       firePropertyChange(SELECTION_FOREGROUND_CHANGED_PROPERTY, tmp, s);
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #showGrid} property.
!    *
!    * @param s The new value of the showGrid property
!    */ 
!   public void setShowGrid(boolean s)
!   {
!     setShowVerticalLines(s);
!     setShowHorizontalLines(s);
!   }
! 
!   /**
!    * Set the value of the {@link #showHorizontalLines} property.
!    *
!    * @param s The new value of the showHorizontalLines property
!    */ 
!   public void setShowHorizontalLines(boolean s)
!   {
!     showHorizontalLines = s;
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #showVerticalLines} property.
!    *
!    * @param s The new value of the showVerticalLines property
!    */ 
!   public void setShowVerticalLines(boolean s)
!   {
!     showVerticalLines = s;
!     repaint();
!   }
! 
!   /**
!    * Set the value of the {@link #tableHeader} property.
!    *
!    * @param t The new value of the tableHeader property
!    */ 
!   public void setTableHeader(JTableHeader t)
!   {
!     if (tableHeader != null)
!       tableHeader.setTable(null);
!     tableHeader = t;
!     if (tableHeader != null)
!       tableHeader.setTable(this);
!     revalidate();
!     repaint();
!   }
! 
!   protected void configureEnclosingScrollPane()
!   {
!     JScrollPane jsp = (JScrollPane) SwingUtilities.getAncestorOfClass(JScrollPane.class, this);
!     if (jsp != null && tableHeader != null)
!       {
!         jsp.setColumnHeaderView(tableHeader);
!       }
!   }
! 
!   protected void unconfigureEnclosingScrollPane()
!   {
!     JScrollPane jsp = (JScrollPane) SwingUtilities.getAncestorOfClass(JScrollPane.class, this);
!     if (jsp != null)
!       {
!         jsp.setColumnHeaderView(null);
!       }    
!   }
! 
! 
!   public void addNotify()
!   {
!     super.addNotify();
!     configureEnclosingScrollPane();
!   }
! 
!   public void removeNotify()
!   {
!     super.addNotify();
!     unconfigureEnclosingScrollPane();
!   }
! 
! 
!   /**
!    * Sun javadocs describe an unusual implementation of
!    * <code>doLayout</code> which involves some private interfaces. We try
!    * to implement the same algorithm as is documented, but using the
!    * columnModel directly. We still use a private helper method, but it has
!    * a simpler signature.
!    */
! 
!   private void distributeSpill(TableColumn[] cols, int spill)
!   {
!     int MIN = 0;
!     int MAX = 0;
!     int PREF = 0;
! 
!     int[] min = new int[cols.length];
!     int[] max = new int[cols.length];
!     int[] pref = new int[cols.length];
! 
!     for (int i = 0; i < cols.length; ++i)
!       {
!         pref[i] = cols[i].getPreferredWidth();
!         min[i] = cols[i].getMinWidth();
!         max[i] = cols[i].getMaxWidth();
!         PREF += pref[i];
!         MIN += min[i];
!         MAX += max[i];
!       }
! 
!     for (int i = 0; i < cols.length; ++i)
!       {
!         int adj = 0;
!         if (spill > 0)          
!           adj = (spill * (pref[i] - min[i])) / (PREF - MIN);
!         else
!           adj = (spill * (max[i] - pref[i])) / (MAX - PREF);
!         cols[i].setWidth(pref[i] + adj);        
!       }    
    }
    
!   public void doLayout()
    {
!     TableColumn resizingColumn = null;
! 
!     int ncols = getColumnCount();
!     if (ncols < 1)
!       return;
! 
!     int[] pref = new int[ncols];
!     int prefSum = 0;
!     int rCol = -1;
! 
!     if (tableHeader != null)
!       resizingColumn = tableHeader.getResizingColumn();
! 
!     for (int i = 0; i < ncols; ++i)
!       {
!         TableColumn col = columnModel.getColumn(i);
!         int p = col.getWidth();
!         pref[i] = p;
!         prefSum += p;
!         if (resizingColumn == col)
!           rCol = i;
!       }
! 
!     int spill = prefSum - getWidth();
! 
!     if (resizingColumn != null)
!       {
!         TableColumn col;
!         TableColumn [] cols;
! 
!         switch (getAutoResizeMode())
!           {
!           case AUTO_RESIZE_LAST_COLUMN:
!             col = columnModel.getColumn(ncols-1);
!             col.setWidth(col.getPreferredWidth() + spill);
!             break;
!             
!           case AUTO_RESIZE_NEXT_COLUMN:
!             col = columnModel.getColumn(ncols-1);
!             col.setWidth(col.getPreferredWidth() + spill);
!             break;
! 
!           case AUTO_RESIZE_ALL_COLUMNS:
!             cols = new TableColumn[ncols];
!             for (int i = 0; i < ncols; ++i)
!               cols[i] = columnModel.getColumn(i);
!             distributeSpill(cols, spill);
!             break;
! 
!           case AUTO_RESIZE_SUBSEQUENT_COLUMNS:
!             cols = new TableColumn[ncols];
!             for (int i = rCol; i < ncols; ++i)
!               cols[i] = columnModel.getColumn(i);
!             distributeSpill(cols, spill);
!             break;
! 
!           case AUTO_RESIZE_OFF:
!           default:
!           }
!       }
!     else
!       {
!         TableColumn [] cols = new TableColumn[ncols];
!         for (int i = 0; i < ncols; ++i)
!           cols[i] = columnModel.getColumn(i);
!         distributeSpill(cols, spill);        
!       }
!   }
!   
!   /**
!    * @deprecated Replaced by <code>doLayout()</code>
!    */
!   public void sizeColumnsToFit(boolean lastColumnOnly)
!   {
!     doLayout();
    }
  
!   /**
!    * Obsolete since JDK 1.4. Please use <code>doLayout()</code>.
!    */
!   public void sizeColumnsToFit(int resizingColumn)
    {
!     doLayout();
    }
  
!   public String getUIClassID()
    {
!     return "TableUI";
!   }
! 
!   /**
!    * This method returns the table's UI delegate.
!    *
!    * @return The table's UI delegate.
!    */
!   public TableUI getUI()
!   {
!     return (TableUI) ui;
!   }
! 
!   /**
!    * This method sets the table's UI delegate.
!    *
!    * @param ui The table's UI delegate.
!    */
!   public void setUI(TableUI ui)
!   {
!     super.setUI(ui);
!   }
! 
!   public void updateUI()
!   {
!     setUI((TableUI) UIManager.getUI(this));
!     revalidate();
!     repaint();
!   }
! 
!   public Class getColumnClass(int column)
!   {
!     return dataModel.getColumnClass(column);
    }
    
!   public String getColumnName(int column)
    {
!     return dataModel.getColumnName(column);
    }
  
!   public int getEditingColumn()
    {
!     return editingColumn;
    }
  
!   public void setEditingColumn(int column)
    {
!     editingColumn = column;
!   }
!   
!   public int getEditingRow()
!   {
!     return editingRow;
    }
  
!   public void setEditingRow(int column)
    {
!     editingRow = column;
!   }
!   
!   public Component getEditorComponent()
!   {
!     return editorComp;
!   }
!   
!   public boolean isEditing()
!   {
!     return editorComp != null;
    }
  
!   public void setDefaultEditor(Class columnClass, TableCellEditor editor)
    {
!     if (editor != null)
!       defaultEditorsByColumnClass.put(columnClass, editor);
!     else
!       defaultEditorsByColumnClass.remove(columnClass);
    }
  
!   public void addColumnSelectionInterval(int index0, int index1)
    {
!     if ((index0 < 0 || index0 > (getColumnCount()-1)
!          || index1 < 0 || index1 > (getColumnCount()-1)))
!       throw new IllegalArgumentException("Column index out of range.");
!     
!     getColumnModel().getSelectionModel().addSelectionInterval(index0, index1);
    }
+   
+   public void addRowSelectionInterval(int index0, int index1)
+   {            
+     if ((index0 < 0 || index0 > (getRowCount()-1)
+          || index1 < 0 || index1 > (getRowCount()-1)))
+       throw new IllegalArgumentException("Row index out of range.");
+       	
+     getSelectionModel().addSelectionInterval(index0, index1);
+   }
+   
+   public void setColumnSelectionInterval(int index0, int index1)
+   {
+     if ((index0 < 0 || index0 > (getColumnCount()-1)
+          || index1 < 0 || index1 > (getColumnCount()-1)))
+       throw new IllegalArgumentException("Column index out of range.");
  
!     getColumnModel().getSelectionModel().setSelectionInterval(index0, index1);
!   }
!   
!   public void setRowSelectionInterval(int index0, int index1)
!   {    
!     if ((index0 < 0 || index0 > (getRowCount()-1)
!          || index1 < 0 || index1 > (getRowCount()-1)))
!       throw new IllegalArgumentException("Row index out of range.");
! 
!     getSelectionModel().setSelectionInterval(index0, index1);
!   }
!   
!   public void removeColumnSelectionInterval(int index0, int index1)  
    {
!     if ((index0 < 0 || index0 > (getColumnCount()-1)
!          || index1 < 0 || index1 > (getColumnCount()-1)))
!       throw new IllegalArgumentException("Column index out of range.");
! 
!     getColumnModel().getSelectionModel().removeSelectionInterval(index0, index1);
    }
!   
!   public void removeRowSelectionInterval(int index0, int index1)
!   {
!     if ((index0 < 0 || index0 > (getRowCount()-1)
!          || index1 < 0 || index1 > (getRowCount()-1)))
!       throw new IllegalArgumentException("Row index out of range.");
! 
!     getSelectionModel().removeSelectionInterval(index0, index1);
!   }
!   
!   public boolean isColumnSelected(int column)
!   {
!     return getColumnModel().getSelectionModel().isSelectedIndex(column);
!   }
! 
!   public boolean isRowSelected(int row)
!   {
!     return getSelectionModel().isSelectedIndex(row);
!   }
! 
!   public boolean isCellSelected(int row, int column)
!   {
!     return isRowSelected(row) && isColumnSelected(column);
!   }
!   
!   public void selectAll()
!   {
!     setColumnSelectionInterval(0, getColumnCount() - 1);
!     setRowSelectionInterval(0, getRowCount() - 1);
!   }
! 
!   public Object getValueAt(int row, int column)
!   {
!     return dataModel.getValueAt(row, convertColumnIndexToModel(column));
!   }
! 
!   public void setValueAt(Object value, int row, int column)
!   {
!     dataModel.setValueAt(value, row, convertColumnIndexToModel(column));
!   }
! 
!   public TableColumn getColumn(Object identifier)
!   {
!     return columnModel.getColumn(columnModel.getColumnIndex(identifier));
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JTextArea.java gcc-4.0.0/libjava/javax/swing/JTextArea.java
*** gcc-3.4.3/libjava/javax/swing/JTextArea.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/JTextArea.java	Thu Feb 17 07:48:52 2005
***************
*** 0 ****
--- 1,480 ----
+ /* JTextArea.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.awt.FontMetrics;
+ 
+ import javax.swing.text.BadLocationException;
+ import javax.swing.text.Document;
+ import javax.swing.text.Element;
+ import javax.swing.text.JTextComponent;
+ import javax.swing.text.PlainDocument;
+ 
+ /**
+  * The <code>JTextArea</code> component provides a multi-line area for displaying
+  * and editing plain text.  The component is designed to act as a lightweight
+  * replacement for the heavyweight <code>java.awt.TextArea</code> component,
+  * which provides similar functionality using native widgets.
+  * <p>
+  *
+  * This component has additional functionality to the AWT class.  It follows
+  * the same design pattern as seen in other text components, such as
+  * <code>JTextField</code>, <code>JTextPane</code> and <code>JEditorPane</code>,
+  * and embodied in <code>JTextComponent</code>.  These classes separate the text
+  * (the model) from its appearance within the onscreen component (the view).  The
+  * text is held within a <code>javax.swing.text.Document</code> object, which can
+  * also maintain relevant style information where necessary.  As a result, it is the
+  * document that should be monitored for textual changes, via
+  * <code>DocumentEvent</code>s delivered to registered
+  * <code>DocumentListener</code>s, rather than this component.
+  * <p>
+  *
+  * Unlike <code>java.awt.TextArea</code>, <code>JTextArea</code> does not
+  * handle scrolling.  Instead, this functionality is delegated to a
+  * <code>JScrollPane</code>, which can contain the text area and handle
+  * scrolling when required.  Likewise, the word wrapping functionality
+  * of the AWT component is converted to a property of this component
+  * and the <code>rows</code> and <code>columns</code> properties
+  * are used in calculating the preferred size of the scroll pane's
+  * view port.
+  *
+  * @author Michael Koch  (konqueror@gmx.de)
+  * @author Andrew John Hughes  (gnu_andrew@member.fsf.org)
+  * @see java.awt.TextArea
+  * @see javax.swing.JTextComponent
+  * @see javax.swing.JTextField
+  * @see javax.swing.JTextPane
+  * @see javax.swing.JEditorPane
+  * @see javax.swing.text.Document
+  * @see javax.swing.text.DocumentEvent
+  * @see javax.swing.text.DocumentListener
+  */
+ 
+ public class JTextArea extends JTextComponent
+ {
+   /**
+    * Compatible with Sun's JDK
+    */
+   private static final long serialVersionUID = -6141680179310439825L;
+   
+   /**
+    * The number of rows used by the component.
+    */
+   private int rows;
+ 
+   /**
+    * The number of columns used by the component.
+    */
+   private int columns;
+ 
+   /**
+    * Whether line wrapping is enabled or not.
+    */
+   private boolean lineWrap;
+ 
+   /**
+    * The number of characters equal to a tab within the text.
+    */
+   private int tabSize = 8;
+ 
+   private boolean wrapStyleWord;
+ 
+   /**
+    * Creates a new <code>JTextArea</code> object.
+    */
+   public JTextArea()
+   {
+     this(null, null, 0, 0);
+   }
+ 
+   /**
+    * Creates a new <code>JTextArea</code> object.
+    *
+    * @param text the initial text
+    */
+   public JTextArea(String text)
+   {
+     this(null, text, 0, 0);
+   }
+ 
+   /**
+    * Creates a new <code>JTextArea</code> object.
+    *
+    * @param rows the number of rows
+    * @param columns the number of cols
+    *
+    * @exception IllegalArgumentException if rows or columns are negative
+    */
+   public JTextArea(int rows, int columns)
+   {
+     this(null, null, rows, columns);
+   }
+ 
+   /**
+    * Creates a new <code>JTextArea</code> object.
+    *
+    * @param text the initial text
+    * @param rows the number of rows
+    * @param columns the number of cols
+    *
+    * @exception IllegalArgumentException if rows or columns are negative
+    */
+   public JTextArea(String text, int rows, int columns)
+   {
+     this(null, text, rows, columns);
+   }
+ 
+   /**
+    * Creates a new <code>JTextArea</code> object.
+    *
+    * @param the document model to use
+    */
+   public JTextArea(Document doc)
+   {
+     this(doc, null, 0, 0);
+   }
+ 
+   /**
+    * Creates a new <code>JTextArea</code> object.
+    *
+    * @param the document model to use
+    * @param text the initial text
+    * @param rows the number of rows
+    * @param columns the number of cols
+    *
+    * @exception IllegalArgumentException if rows or columns are negative
+    */
+   public JTextArea(Document doc, String text, int rows, int columns)
+   {
+     setDocument(doc == null ? createDefaultModel() : doc);
+     setText(text);
+     setRows(rows);
+     setColumns(columns);
+   }
+ 
+   /**
+    * Appends the supplied text to the current contents
+    * of the document model.
+    *
+    * @param toAppend the text to append
+    */
+   public void append(String toAppend)
+   {
+       try
+ 	  {
+ 	      getDocument().insertString(getText().length(), toAppend, null);
+ 	  }
+       catch (BadLocationException exception)
+ 	  {
+ 	      /* This shouldn't happen in theory -- but, if it does...  */
+ 	      throw new RuntimeException("Unexpected exception occurred.", exception);
+ 	  }
+   }
+ 
+   /**
+    * Creates the default document model.
+    *
+    * @return a new default model
+    */
+   protected Document createDefaultModel()
+   {
+     return new PlainDocument();
+   }
+ 
+   /**
+    * Returns true if the width of this component should be forced
+    * to match the width of a surrounding view port.  When line wrapping
+    * is turned on, this method returns true.
+    *
+    * @return true if lines are wrapped.
+    */
+   public boolean getScrollableTracksViewportWidth()
+   {
+     return lineWrap ? true : super.getScrollableTracksViewportWidth();
+   }
+ 
+   /**
+    * Returns the UI class ID string.
+    *
+    * @return the string "TextAreaUI"
+    */
+   public String getUIClassID()
+   {
+     return "TextAreaUI";
+   }
+ 
+   /**
+    * Returns the current number of columns.
+    *
+    * @return number of columns
+    */
+   public int getColumns()
+   {
+     return columns;
+   }
+   
+   /**
+    * Sets the number of rows.
+    *
+    * @param columns number of columns
+    *
+    * @exception IllegalArgumentException if columns is negative
+    */
+   public void setColumns(int columns)
+   {
+     if (columns < 0)
+       throw new IllegalArgumentException();
+ 
+     this.columns = columns;
+   }
+ 
+   /**
+    * Returns the current number of rows.
+    *
+    * @return number of rows
+    */
+   public int getRows()
+   {
+     return rows;
+   }
+ 
+   /**
+    * Sets the number of rows.
+    *
+    * @param columns number of columns
+    *
+    * @exception IllegalArgumentException if rows is negative
+    */
+   public void setRows(int rows)
+   {
+     if (rows < 0)
+       throw new IllegalArgumentException();
+ 
+     this.rows = rows;
+   }
+ 
+   /**
+    * Checks whether line wrapping is enabled.
+    *
+    * @return <code>true</code> if line wrapping is enabled,
+    * <code>false</code> otherwise
+    */
+   public boolean getLineWrap()
+   {
+     return lineWrap;
+   }
+ 
+   /**
+    * Enables/disables line wrapping.
+    *
+    * @param wrapping <code>true</code> to enable line wrapping,
+    * <code>false</code> otherwise
+    */
+   public void setLineWrap(boolean flag)
+   {
+     if (lineWrap == flag)
+       return;
+ 
+     boolean oldValue = lineWrap;
+     lineWrap = flag;
+     firePropertyChange("lineWrap", oldValue, lineWrap);
+   }
+ 
+   /**
+    * Checks whether word style wrapping is enabled.
+    *
+    * @return <code>true</code> if word style wrapping is enabled,
+    * <code>false</code> otherwise
+    */
+   public boolean getWrapStyleWord()
+   {
+     return wrapStyleWord;
+   }
+   
+   /**
+    * Enables/Disables word style wrapping.
+    *
+    * @param flag <code>true</code> to enable word style wrapping,
+    * <code>false</code> otherwise
+    */
+   public void setWrapStyleWord(boolean flag)
+   {
+     if (wrapStyleWord == flag)
+       return;
+     
+     boolean oldValue = wrapStyleWord;
+     wrapStyleWord = flag;
+     firePropertyChange("wrapStyleWord", oldValue, wrapStyleWord);
+   }
+   
+   /**
+    * Returns the number of characters used for a tab.
+    * This defaults to 8.
+    *
+    * @return the current number of spaces used for a tab.
+    */
+   public int getTabSize()
+   {
+     return tabSize;
+   }
+ 
+   /**
+    * Sets the number of characters used for a tab to the
+    * supplied value.  If a change to the tab size property
+    * occurs (i.e. newSize != tabSize), a property change event
+    * is fired.
+    * 
+    * @param newSize The new number of characters to use for a tab.
+    */
+   public void setTabSize(int newSize)
+   {
+     if (tabSize == newSize)
+       return;
+     
+     int oldValue = tabSize;
+     tabSize = newSize;
+     firePropertyChange("tabSize", oldValue, tabSize);
+   }
+ 
+   protected int getColumnWidth()
+   {
+     FontMetrics metrics = getToolkit().getFontMetrics(getFont());
+     return metrics.charWidth('m');
+   }
+ 
+   public int getLineCount()
+   {
+     return getDocument().getDefaultRootElement().getElementCount();
+   }
+ 
+   public int getLineStartOffset(int line)
+      throws BadLocationException
+   {
+     int lineCount = getLineCount();
+     
+     if (line < 0 || line > lineCount)
+       throw new BadLocationException("Non-existing line number", line);
+ 
+     Element lineElem = getDocument().getDefaultRootElement().getElement(line);
+     return lineElem.getStartOffset();
+   }
+ 
+   public int getLineEndOffset(int line)
+      throws BadLocationException
+   {
+     int lineCount = getLineCount();
+     
+     if (line < 0 || line > lineCount)
+       throw new BadLocationException("Non-existing line number", line);
+ 
+     Element lineElem = getDocument().getDefaultRootElement().getElement(line);
+     return lineElem.getEndOffset();
+   }
+ 
+   public int getLineOfOffset(int offset)
+     throws BadLocationException
+   {
+     Document doc = getDocument();
+ 
+     if (offset < doc.getStartPosition().getOffset()
+ 	|| offset >= doc.getEndPosition().getOffset())
+       throw new BadLocationException("offset outside of document", offset);
+ 
+     return doc.getDefaultRootElement().getElementIndex(offset);
+   }
+ 
+   protected int getRowHeight()
+   {
+     FontMetrics metrics = getToolkit().getFontMetrics(getFont());
+     return metrics.getHeight();
+   }
+ 
+   /**
+    * Inserts the supplied text at the specified position.  Nothing
+    * happens in the case that the model or the supplied string is null
+    * or of zero length.
+    *
+    * @param string The string of text to insert.
+    * @param position The position at which to insert the supplied text.
+    * @throws IllegalArgumentException if the position is &lt; 0 or greater
+    * than the length of the current text.
+    */
+   public void insert(String string, int position)
+   {
+     // Retrieve the document model.
+     Document doc = getDocument();
+       
+     // Check the model and string for validity.
+     if (doc == null
+ 	|| string == null
+ 	|| string.length() == 0)
+       return;
+ 
+     // Insert the text into the model.
+     try
+       {
+ 	doc.insertString(position, string, null);
+       }
+     catch (BadLocationException e)
+       {
+ 	throw new IllegalArgumentException("The supplied position, "
+ 					   + position + ", was invalid.");
+       }
+   }
+ 
+   public void replaceRange(String text, int start, int end)
+   {
+     Document doc = getDocument();
+     
+     if (start > end
+ 	|| start < doc.getStartPosition().getOffset()
+ 	|| end >= doc.getEndPosition().getOffset())
+       throw new IllegalArgumentException();
+ 
+     try
+       {
+ 	doc.remove(start, end);
+ 	doc.insertString(start, text, null);
+       }
+     catch (BadLocationException e)
+       {
+ 	// This cannot happen as we check offset above.
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JTextField.java gcc-4.0.0/libjava/javax/swing/JTextField.java
*** gcc-3.4.3/libjava/javax/swing/JTextField.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JTextField.java	Sat Feb 19 09:30:03 2005
***************
*** 1,5 ****
! /* JTextField.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JTextField.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,108 ****
  
  package javax.swing;
  
  import java.awt.event.ActionListener;
! import java.util.Vector;
  import javax.accessibility.AccessibleStateSet;
  import javax.swing.text.Document;
  import javax.swing.text.JTextComponent;
  
! public class JTextField extends JEditorPane
  {
  
! 	/**
! 	 * AccessibleJTextField
! 	 */
! 	protected class AccessibleJTextField extends AccessibleJTextComponent {
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor AccessibleJTextField
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJTextField(JTextField component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJTextField()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * getAccessibleStateSet
! 		 * @returns AccessibleStateSet
! 		 */
! 		public AccessibleStateSet getAccessibleStateSet() {
! 			return null; // TODO
! 		} // getAccessibleStateSet()
  
  
! 	} // AccessibleJTextField
  
  
!     Vector actions = new Vector();
  
!   public JTextField()
    {
    }
  
!     public JTextField(int a)
!     {
!     }
  
!     public void addActionListener(ActionListener l)
!     {
! 	actions.addElement(l);
!     }
  
!     public void removeActionListener(ActionListener l)
!     {
! 	actions.removeElement(l);
!     }
  
!     public void selectAll()
!     {
!     }
  }
--- 38,428 ----
  
  package javax.swing;
  
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
! import java.beans.PropertyChangeEvent;
! import java.beans.PropertyChangeListener;
! 
  import javax.accessibility.AccessibleStateSet;
  import javax.swing.text.Document;
  import javax.swing.text.JTextComponent;
+ import javax.swing.text.PlainDocument;
+ import javax.swing.text.TextAction;
  
! public class JTextField extends JTextComponent
!   implements SwingConstants
  {
+   /**
+    * AccessibleJTextField
+    */
+   protected class AccessibleJTextField extends AccessibleJTextComponent
+   {
+     private static final long serialVersionUID = 8255147276740453036L;
  
!     /**
!      * Constructor AccessibleJTextField
!      */
!     protected AccessibleJTextField()
!     {
!     }
  
!     /**
!      * getAccessibleStateSet
!      * @return AccessibleStateSet
!      */
!     public AccessibleStateSet getAccessibleStateSet()
!     {
!       return null;
!     }
!   }
  
!   private static final long serialVersionUID = 353853209832607592L;
  
+   private static final Action[] actions;
  
!   /**
!    * Name of the action that gets sent when the content of the text field
!    * gets accepted.
!    */
!   public static final String notifyAction = "notify-field-accept";
!   
!   static
!   {
!     actions = new Action[1];
!     actions[0] = new TextAction(notifyAction)
!       {
! 	public void actionPerformed(ActionEvent event)
! 	{
! 	  JTextField textField = (JTextField) event.getSource();
! 	  textField.fireActionPerformed();
! 	}
!       };
!   }
!   
!   private int columns;
!   private int align;
!   private int scrollOffset;
  
!   /** @since 1.3 */
!   private Action action;
  
+   /** @since 1.3 */
+   private String actionCommand;
+   
+   private PropertyChangeListener actionPropertyChangeListener;
  
!   /**
!    * Creates a new instance of <code>JTextField</code>.
!    */
!   public JTextField()
!   {
!     this(null, null, 0);
!   }
  
+   /**
+    * Creates a new instance of <code>JTextField</code>.
+    *
+    * @param text the initial text
+    */
+   public JTextField(String text)
+   {
+     this(null, text, 0);
+   }
+   
+   /**
+    * Creates a new instance of <code>JTextField</code>.
+    *
+    * @param columns the number of columns
+    *
+    * @exception IllegalArgumentException if columns %lt; 0
+    */
+   public JTextField(int columns)
+   {
+     this(null, null, columns);
+   }
  
!   /**
!    * Creates a new instance of <code>JTextField</code>.
!    *
!    * @param text the initial text
!    * @param columns the number of columns
!    *
!    * @exception IllegalArgumentException if columns %lt; 0
!    */
!   public JTextField(String text, int columns)
!   {
!     this(null, text, columns);
!   }
  
!   /**
!    * Creates a new instance of <code>JTextField</code>.
!    *
!    * @param doc the document to use
!    * @param text the initial text
!    * @param columns the number of columns
!    *
!    * @exception IllegalArgumentException if columns %lt; 0
!    */
!   public JTextField(Document doc, String text, int columns)
    {
+     if (columns < 0)
+       throw new IllegalArgumentException();
+     
+     this.columns = columns;
+     
+     setDocument(doc == null ? createDefaultModel() : doc);
+ 
+     if (text != null)
+       setText(text);
    }
  
!   /**
!    * Creates the default model for this text field.
!    * This implementation returns an instance of <code>PlainDocument</code>.
!    *
!    * @return a new instance of the default model
!    */
!   protected Document createDefaultModel()
!   {
!     return new PlainDocument();
!   }
  
!   /**
!    * Returns the class ID for the UI.
!    *
!    * @return "TextFieldUI";
!    */
!   public String getUIClassID()
!   {
!     return "TextFieldUI";
!   }
  
!   /**
!    * Adds a new listener object to this text field.
!    *
!    * @param listener the listener to add
!    */
!   public void addActionListener(ActionListener listener)
!   {
!     listenerList.add(ActionListener.class, listener);
!   }
  
!   /**
!    * Removes a listener object from this text field.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeActionListener(ActionListener listener)
!   {
!     listenerList.remove(ActionListener.class, listener);
!   }
! 
!   /**
!    * Returns all registered <code>ActionListener</code> objects.
!    *
!    * @return an array of listeners
!    *
!    * @since 1.4
!    */
!   public ActionListener[] getActionListeners()
!   {
!     return (ActionListener[]) getListeners(ActionListener.class);
!   }
! 
!   /**
!    * Sends an action event to all registered
!    * <code>ActionListener</code> objects.
!    */
!   protected void fireActionPerformed()
!   {
!     ActionEvent event = new ActionEvent(this, 0, notifyAction);
!     ActionListener[] listeners = getActionListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].actionPerformed(event);
!   }
! 
!   /**
!    * Returns the number of columns of this text field.
!    *
!    * @return the number of columns
!    */
!   public int getColumns()
!   {
!     return columns;
!   }
! 
!   public void setColumns(int columns)
!   {
!     if (columns < 0)
!       throw new IllegalArgumentException();
! 
!     this.columns = columns;
!     invalidate();
!     repaint();
!   }
! 
!   public int getHorizontalAlignment()
!   {
!     return align;
!   }
! 
!   public void setHorizontalAlignment(int newAlign)
!   {
!     if (align == newAlign)
!       return;
! 
!     int oldAlign = align;
!     align = newAlign;
!     firePropertyChange("horizontalAlignment", oldAlign, newAlign);
!     invalidate();
!     repaint();
!   }
! 
!   public void setFont(Font newFont)
!   {
!     super.setFont(newFont);
!     revalidate();
!   }
! 
!   public Dimension getPreferredSize()
!   {
!     Dimension size = super.getPreferredSize();
! 
!     if (columns != 0)
!       size.width = columns * getColumnWidth();
! 
!     return size;
!   }
! 
!   /**
!    * Returns the scroll offset in pixels.
!    *
!    * @return the scroll offset
!    */
!   public int getScrollOffset()
!   {
!     return scrollOffset;
!   }
! 
!   /**
!    * Sets the scroll offset in pixels.
!    * 
!    * @param offset the scroll offset
!    */
!   public void setScrollOffset(int offset)
!   {
!     scrollOffset = offset;
!   }
! 
!   public Action[] getActions()
!   {
!     return TextAction.augmentList(super.getActions(), actions);
!   }
! 
!   public void postActionEvent()
!   {
!     String command = actionCommand != null ? actionCommand : getText();
!     ActionEvent event = new ActionEvent(this, 0, command);
!     ActionListener[] listeners = getActionListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].actionPerformed(event);
!   }
!   
!   /**
!    * @since 1.3
!    */
!   public Action getAction()
!   {
!     return action;
!   }
! 
!   /**
!    * @since 1.3
!    */
!   public void setAction(Action newAction)
!   {
!     if (action == newAction)
!       return;
! 
!     if (action != null)
!       {
! 	removeActionListener(action);
! 	action.removePropertyChangeListener(actionPropertyChangeListener);
! 	actionPropertyChangeListener = null;
!       }
!     
!     Action oldAction = action;
!     action = newAction;
! 
!     if (action != null)
!       {
! 	addActionListener(action);
! 	actionPropertyChangeListener =
! 	  createActionPropertyChangeListener(action);
! 	action.addPropertyChangeListener(actionPropertyChangeListener);
!       }
!     
!     firePropertyChange("horizontalAlignment", oldAction, newAction);
!   }
! 
!   /**
!    * @since 1.3
!    */
!   public void setActionCommand(String command)
!   {
!     actionCommand = command;
!   }
! 
!   /**
!    * @since 1.3
!    */
!   protected PropertyChangeListener createActionPropertyChangeListener(Action action)
!   {
!     return new PropertyChangeListener()
!       {
! 	public void propertyChange(PropertyChangeEvent event)
! 	{
! 	  // Update properties "action" and "horizontalAlignment".
! 	  String name = event.getPropertyName();
! 
! 	  if (name.equals("enabled"))
! 	    {
! 	      boolean enabled = ((Boolean) event.getNewValue()).booleanValue();
! 	      JTextField.this.setEnabled(enabled);
! 	    }
! 	  else if (name.equals(Action.SHORT_DESCRIPTION))
! 	    {
! 	      JTextField.this.setToolTipText((String) event.getNewValue());
! 	    }
! 	}
!       };
!   }
! 
!   /**
!    * @since 1.3
!    */
!   protected void configurePropertiesFromAction(Action action)
!   {
!     if (action != null)
!       {
! 	setEnabled(action.isEnabled());
! 	setToolTipText((String) action.getValue(Action.SHORT_DESCRIPTION));
!       }
!     else
!       {
! 	setEnabled(true);      
! 	setToolTipText(null);
!       }
!   }
! 
!   protected int getColumnWidth()
!   {
!     FontMetrics metrics = getToolkit().getFontMetrics(getFont());
!     return metrics.charWidth('m');
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JTextPane.java gcc-4.0.0/libjava/javax/swing/JTextPane.java
*** gcc-3.4.3/libjava/javax/swing/JTextPane.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/JTextPane.java	Tue Nov 30 23:58:58 2004
*************** this exception to your version of the li
*** 35,45 ****
--- 35,47 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
  import java.io.IOException;
  import java.io.ObjectOutputStream;
+ 
  import javax.swing.text.AttributeSet;
  import javax.swing.text.Document;
  import javax.swing.text.EditorKit;
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JToggleButton.java gcc-4.0.0/libjava/javax/swing/JToggleButton.java
*** gcc-3.4.3/libjava/javax/swing/JToggleButton.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JToggleButton.java	Thu Feb 17 07:48:52 2005
***************
*** 1,5 ****
  /* JToggleButton.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JToggleButton.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,109 ****
  
  package javax.swing;
  
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.swing.plaf.ButtonUI;
  
  public class JToggleButton extends AbstractButton implements Accessible
  {
!     public JToggleButton()
!     {
! 	this(null, null);
!     }
!     public JToggleButton(Action a)
      {
! 	this();
! 	setAction(a);
      }
  
!     public JToggleButton(Icon icon)
!     { 
! 	this(null, icon);
!     }    
!   
!     public JToggleButton(String text)
      {
! 	this(text, null);
      }
!       
!     public JToggleButton(String text, Icon icon)
      {
! 	this(text, icon, false);
      }
  
!     public JToggleButton (String text, Icon icon, boolean selected) 
      {
! 	super(text, icon);
! 
!         // Create the model
!         setModel(new ToggleButtonModel(this));
! 	
!         model.setSelected(selected);
      }
  
! 
      
!     public AccessibleContext getAccessibleContext()
!     {
! 	//Gets the AccessibleContext associated with this JToggleButton. 
! 	return null;
!     }
    
!     public String getUIClassID()
!     {
! 	//Returns a string that specifies the name of the L&F class that renders this component.  
! 	return "JToggleButton";
!     }
    
!     protected  String paramString()
!     {
! 	return "JToggleButton";
!     }
    
    
!     public void updateUI()
!     {	
! 	ButtonUI b = (ButtonUI)UIManager.getUI(this);
! 	setUI(b);
!     }
  }
  
  
--- 38,303 ----
  
  package javax.swing;
  
+ import java.awt.event.ItemEvent;
+ import java.awt.event.ItemListener;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleState;
  import javax.swing.plaf.ButtonUI;
  
+ /**
+  * The <code>JToggleButton</code> component provides a stateful button,
+  * which can be either selected or unselected.  This provides the basis
+  * for the implementations of radio buttons (<code>JRadioButton</code>)
+  * and check boxes (<code>JCheckBox</code>).
+  *
+  * @author Michael Koch  (konqueror@gmx.de)
+  * @author Graydon Hoare  (graydon@redhat.com)
+  * @author Andrew John Hughes  (gnu_andrew@member.fsf.org)
+  * @see JRadioButton
+  * @see JCheckBox
+  * @since 1.2
+  */
  public class JToggleButton extends AbstractButton implements Accessible
  {
!   /**
!    * This class provides accessibility support for the toggle button.
!    */
!   protected class AccessibleJToggleButton
!     extends AccessibleAbstractButton
!     implements ItemListener
!   {
! 
!     /**
!      * Constructor for the accessible toggle button.
!      */
!     public AccessibleJToggleButton()
      {
!       super();
!       /* Register the accessible toggle button as a listener for item events */
!       addItemListener(this);
      }
  
!     /**
!      * Returns the accessible role for the toggle button.
!      *
!      * @return An instance of <code>AccessibleRole</code>, describing
!      *         the role of the toggle button.
!      */
!     public AccessibleRole getAccessibleRole()
      {
!       return AccessibleRole.TOGGLE_BUTTON;
      }
!     
!     /**
!      * Monitors the toggle button for state changes and fires accessible
!      * property change events when they occur.
!      *
!      * @param event the event that occurred.
!      */
!     public void itemStateChanged(ItemEvent event)
      {
!         /* Fire a state property change event as the button's state has changed */
!         if (event.getStateChange() == ItemEvent.SELECTED)
!           {
!             /* State has changed from unselected (null) to selected */
!             firePropertyChange(ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.SELECTED);
!           } 
!         else
!           {
!             /* State has changed from selected to unselected (null) */
!             firePropertyChange(ACCESSIBLE_STATE_PROPERTY, AccessibleState.ENABLED, null);
!           }
      }
+     
+   }
  
!   /**
!    * The model handles the storage and maintenance of the state of
!    * the toggle button.  This follows the same paradigm (the MVC
!    * or Model-View-Controller design pattern) employed by
!    * other Swing components, where the data associated with a component
!    * is stored separately from the display aspects.
!    */
!   public static class ToggleButtonModel extends DefaultButtonModel
!   {
!     /**
!      * Compatible with Sun's JDK.
!      */
!     private static final long serialVersionUID = -1589950750899943974L;
!   
!     /**
!      * Sets the pressed state of the button.  The selected state
!      * of the button also changes follwing the button being pressed.
!      *
!      * @param b true if the button is pressed down.
!      */
!     public void setPressed(boolean b)  
      {
!       if (! isEnabled())
!         return;
!       
!       super.setPressed(b);
!       
!       // setPressed(false) == mouse release on us,
!       // if we were armed, we flip the selected state.
!       if (!b && isArmed())
!         setSelected(! isSelected());
      }
+   }
  
!   /**
!    * Compatible with Sun's JDK.
!    */
!   private static final long serialVersionUID = -3128248873429850443L;
      
!   /**
!    * Constructs an unselected toggle button with no text or icon.
!    */ 
!   public JToggleButton()
!   {
!     this(null, null, false);
!   }
! 
!   /**
!    * Constructs a toggle button using the labelling, state
!    * and icon specified by the supplied action.
!    *
!    * @param a the action to use to define the properties of the button.
!    */
!   public JToggleButton(Action a)
!   {
!     this();
!     setAction(a);
!   }
! 
!   /**
!    * Constructs an unselected toggle button with the supplied icon
!    * and no text.
!    *
!    * @param icon the icon to use.
!    */
!   public JToggleButton(Icon icon)
!   { 
!     this(null, icon, false);
!   }    
    
!   /**
!    * Constructs a toggle button with the supplied icon and state.
!    *
!    * @param icon the icon to use.
!    * @param selected if true, the toggle button is initially in the
!    *        selected state.  Otherwise, the button is unselected.
!    */
!   public JToggleButton(Icon icon, boolean selected) 
!   {
!     this(null, icon, selected);
!   }
    
!   /**
!    * Constructs an unselected toggle button using the supplied text
!    * and no icon.
!    *
!    * @param text the text to use.
!    */ 
!   public JToggleButton(String text)
!   {
!     this(text, null, false);
!   }
!       
!   /**
!    * Constructs a toggle button with the supplied text and state.
!    *
!    * @param text the text to use.
!    * @param selected if true, the toggle button is initially in the
!    *        selected state.  Otherwise, the button is unselected.
!    */
!   public JToggleButton(String text, boolean selected)
!   {
!     this(text, null, selected);
!   }
! 
!   /**
!    * Constructs an unselected toggle button with the supplied text
!    * and icon.
!    *
!    * @param text the text to use.
!    * @param icon the icon to use.
!    */
!   public JToggleButton(String text, Icon icon)
!   {
!     this(text, icon, false);
!   }
! 
!   /**
!    * Constructs a toggle button with the supplied text, icon and state.
!    *
!    * @param text the text to use.
!    * @param icon the icon to use.
!    * @param selected if true, the toggle button is initially in the
!    *        selected state.  Otherwise, the button is unselected.
!    */
!   public JToggleButton (String text, Icon icon, boolean selected) 
!   {
!     super(text, icon);
! 
!     horizontalAlignment = LEADING;
!     setModel(new ToggleButtonModel());	
!     model.setSelected(selected);
!   }
! 
!   /**
!    * Gets the AccessibleContext associated with this <code>JToggleButton</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)
!       {
!         /* Create the context */
! 	accessibleContext = new AccessibleJToggleButton();
!       }
!     return accessibleContext;
!   }
    
+   /**
+    * Returns a string that specifies the name of the Look and Feel
+    * class that renders this component.
+    *
+    * @return The Look and Feel UI class in <code>String</code> form.
+    */
+   public String getUIClassID()
+   {
+     return "ToggleButtonUI";
+   }
    
!   /**
!    * Returns a textual representation of this component for debugging.
!    * Users should not depend on anything as regards the content or formatting
!    * of this string, except for the fact that the returned string may never be
!    * null (only empty).
!    *
!    * @return the component in <code>String</code> form for debugging.
!    */
!   protected  String paramString()
!   {
!     return "JToggleButton";
!   }
!   
!   /**
!    * This method resets the toggle button's UI delegate to the default UI for
!    * the current look and feel.
!    */
!   public void updateUI()
!   {	
!     setUI((ButtonUI)UIManager.getUI(this));
!   }
! 
  }
  
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JToolBar.java gcc-4.0.0/libjava/javax/swing/JToolBar.java
*** gcc-3.4.3/libjava/javax/swing/JToolBar.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/JToolBar.java	Wed Feb 16 20:02:37 2005
***************
*** 1,5 ****
  /* JToolBar.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JToolBar.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,50 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
- import java.awt.Dimension;
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Graphics;
  import java.awt.Insets;
  import java.beans.PropertyChangeListener;
! import java.io.IOException;
! import java.io.ObjectOutputStream;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
--- 35,51 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Container;
+ import java.awt.Dimension;
  import java.awt.Graphics;
  import java.awt.Insets;
+ import java.awt.LayoutManager;
  import java.beans.PropertyChangeListener;
! 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
*************** import javax.accessibility.AccessibleSta
*** 52,474 ****
  import javax.swing.plaf.ToolBarUI;
  
  /**
!  * JToolBar
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class JToolBar extends JComponent 
!   implements SwingConstants, Accessible
  {
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * AccessibleJToolBar
! 	 */
! 	protected class AccessibleJToolBar extends AccessibleJComponent {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJToolBar
! 		 * @param component TODO
! 		 */
! 		protected AccessibleJToolBar(JToolBar component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJToolBar()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * getAccessibleStateSet
! 		 * @returns AccessibleStateSet
! 		 */
! 		public AccessibleStateSet getAccessibleStateSet() {
! 			return null; // TODO
! 		} // getAccessibleStateSet()
  
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return AccessibleRole.TOOL_BAR;
! 		} // getAccessibleRole()
  
  
! 	} // AccessibleJToolBar
  
! 	/**
! 	 * Separator
! 	 */
! 	public static class Separator extends JSeparator {
  
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * separatorSize
! 		 */
! 		private Dimension size;
  
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor Separator
! 		 */
! 		public Separator() {
! 			// TODO
! 		} // Separator()
  
! 		/**
! 		 * Constructor Separator
! 		 * @param size TODO
! 		 */
! 		public Separator(Dimension size) {
! 			// TODO
! 		} // Separator()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * getUIClassID
! 		 * @returns String
! 		 */
! 		public String getUIClassID() {
! 			return null; // TODO
! 		} // getUIClassID()
  
! 		/**
! 		 * getPreferredSize
! 		 * @returns Dimension
! 		 */
! 		public Dimension getPreferredSize() {
! 			return null; // TODO
! 		} // getPreferredSize()
  
! 		/**
! 		 * getMaximumSize
! 		 * @returns Dimension
! 		 */
! 		public Dimension getMaximumSize() {
! 			return null; // TODO
! 		} // getMaximumSize()
  
! 		/**
! 		 * getMinimumSize
! 		 * @returns Dimension
! 		 */
! 		public Dimension getMinimumSize() {
! 			return null; // TODO
! 		} // getMinimumSize()
  
! 		/**
! 		 * getSeparatorSize
! 		 * @returns Dimension
! 		 */
! 		public Dimension getSeparatorSize() {
! 			return null; // TODO
! 		} // getSeparatorSize()
  
! 		/**
! 		 * setSeparatorSize
! 		 * @param size TODO
! 		 */
! 		public void setSeparatorSize(Dimension size) {
! 			// TODO
! 		} // setSeparatorSize()
  
  
! 	} // Separator
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * uiClassID
! 	 */
! 	private static final String uiClassID = "ToolBarUI";
  
! 	/**
! 	 * paintBorder
! 	 */
! 	private boolean paintBorder;
  
! 	/**
! 	 * margin
! 	 */
! 	private Insets margin;
  
! 	/**
! 	 * floatable
! 	 */
! 	private boolean floatable;
  
! 	/**
! 	 * orientation
! 	 */
! 	private int orientation;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor JToolBar
! 	 */
! 	public JToolBar() {
! 		// TODO
! 	} // JToolBar()
  
! 	/**
! 	 * Constructor JToolBar
! 	 * @param orientation TODO
! 	 */
! 	public JToolBar(int orientation) {
! 		// TODO
! 	} // JToolBar()
  
! 	/**
! 	 * Constructor JToolBar
! 	 * @param name TODO
! 	 */
! 	public JToolBar(String name) {
! 		// TODO
! 	} // JToolBar()
  
! 	/**
! 	 * Constructor JToolBar
! 	 * @param name TODO
! 	 * @param orientation TODO
! 	 */
! 	public JToolBar(String name, int orientation) {
! 		// TODO
! 	} // JToolBar()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param stream TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream stream) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * add
! 	 * @param action TODO
! 	 * @returns JButton
! 	 */
! 	public JButton add(Action action) {
! 		return null; // TODO
! 	} // add()
  
! 	/**
! 	 * paintBorder
! 	 * @param graphics TODO
! 	 */
! 	protected void paintBorder(Graphics graphics) {
! 		// TODO
! 	} // paintBorder()
  
! 	/**
! 	 * getUI
! 	 * @returns ToolBarUI
! 	 */
! 	public ToolBarUI getUI() {
! 		return (ToolBarUI) ui;
! 	} // getUI()
  
! 	/**
! 	 * setUI
! 	 * @param ui TODO
! 	 */
! 	public void setUI(ToolBarUI ui) {
! 		super.setUI(ui);
! 	} // setUI()
  
! 	/**
! 	 * updateUI
! 	 */
! 	public void updateUI() {
! 		setUI((ToolBarUI) UIManager.get(this));
! 		invalidate();
! 	} // updateUI()
  
! 	/**
! 	 * getUIClassID
! 	 * @returns String
! 	 */
! 	public String getUIClassID() {
! 		return uiClassID;
! 	} // getUIClassID()
  
! 	/**
! 	 * getComponentIndex
! 	 * @param component TODO
! 	 * @returns int
! 	 */
! 	public int getComponentIndex(Component component) {
! 		return 0; // TODO
! 	} // getComponentIndex()
  
! 	/**
! 	 * getComponentAtIndex
! 	 * @param index TODO
! 	 * @returns Component
! 	 */
! 	public Component getComponentAtIndex(int index) {
! 		return null; // TODO
! 	} // getComponentAtIndex()
  
! 	/**
! 	 * getMargin
! 	 * @returns Insets
! 	 */
! 	public Insets getMargin() {
! 		return null; // TODO
! 	} // getMargin()
  
! 	/**
! 	 * setMargin
! 	 * @param margin TODO
! 	 */
! 	public void setMargin(Insets margin) {
! 		// TODO
! 	} // setMargin()
  
! 	/**
! 	 * isBorderPainted
! 	 * @returns boolean
! 	 */
! 	public boolean isBorderPainted() {
! 		return false; // TODO
! 	} // isBorderPainted()
  
! 	/**
! 	 * setBorderPainted
! 	 * @param painted TODO
! 	 */
! 	public void setBorderPainted(boolean painted) {
! 		// TODO
! 	} // setBorderPainted()
  
! 	/**
! 	 * isFloatable
! 	 * @returns boolean
! 	 */
! 	public boolean isFloatable() {
! 		return false; // TODO
! 	} // isFloatable()
  
! 	/**
! 	 * setFloatable
! 	 * @param floatable TODO
! 	 */
! 	public void setFloatable(boolean floatable) {
! 		// TODO
! 	} // setFloatable()
  
! 	/**
! 	 * getOrientation
! 	 * @returns int
! 	 */
! 	public int getOrientation() {
! 		return 0; // TODO
! 	} // getOrientation()
  
! 	/**
! 	 * setOrientation
! 	 * @param orientation TODO
! 	 */
! 	public void setOrientation(int orientation) {
! 		// TODO
! 	} // setOrientation()
  
! 	/**
! 	 * addSeparator
! 	 */
! 	public void addSeparator() {
! 		// TODO
! 	} // addSeparator()
  
! 	/**
! 	 * addSeparator
! 	 * @param size TODO
! 	 */
! 	public void addSeparator(Dimension size) {
! 		// TODO
! 	} // addSeparator()
  
! 	/**
! 	 * createActionComponent
! 	 * @param action TODO
! 	 * @returns JButton
! 	 */
! 	protected JButton createActionComponent(Action action) {
! 		return null; // TODO
! 	} // createActionComponent()
  
! 	/**
! 	 * createActionChangeListener
! 	 * @param button TODO
! 	 * @returns PropertyChangeListener
! 	 */
! 	protected PropertyChangeListener createActionChangeListener(JButton button) {
! 		return null; // TODO
! 	} // createActionChangeListener()
  
! 	/**
! 	 * addImpl
! 	 * @param component TODO
! 	 * @param constraints TODO
! 	 * @param index TODO
! 	 */
! 	protected void addImpl(Component component, Object constraints, int index) {
! 		// TODO
! 	} // addImpl()
  
! 	/**
! 	 * paramString
! 	 * @returns String
! 	 */
! 	protected String paramString() {
! 		return null; // TODO
! 	} // paramString()
  
! 	/**
! 	 * getAccessibleContext
! 	 * @returns AccessibleContext
! 	 */
! 	public AccessibleContext getAccessibleContext() {
! 		if (accessibleContext == null) {
! 			accessibleContext = new AccessibleJToolBar(this);
! 		} // if
! 		return accessibleContext;
! 	} // getAccessibleContext()
  
  
! } // JToolBar
--- 53,769 ----
  import javax.swing.plaf.ToolBarUI;
  
  /**
!  * JToolBar is a component that provides a toolbar to Swing programs. Users
!  * can add buttons (or actions that will be represented by JButtons) as well
!  * as other components to the JToolBar. JToolBars can be dragged in and out
!  * of their parent components. If the JToolBar is dragged out of the parent,
!  * then it will be displayed in its own RootPaneContainer. For dragging to
!  * work properly, JToolBars need to be placed in a Container that has a
!  * BorderLayout. That parent Container cannot have components in the NORTH,
!  * EAST, SOUTH,  or WEST components (that is not the JToolBar).
   */
! public class JToolBar extends JComponent implements SwingConstants, Accessible
  {
+   /**
+    * AccessibleJToolBar
+    */
+   protected class AccessibleJToolBar extends AccessibleJComponent
+   {
+     /** DOCUMENT ME! */
+     private static final long serialVersionUID = -5516888265903814215L;
  
!     /**
!      * Constructor AccessibleJToolBar
!      */
!     protected AccessibleJToolBar()
!     {
!     }
  
!     /**
!      * getAccessibleStateSet
!      *
!      * @return AccessibleStateSet
!      */
!     public AccessibleStateSet getAccessibleStateSet()
!     {
!       return null; // TODO
!     }
  
!     /**
!      * getAccessibleRole
!      *
!      * @return AccessibleRole
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return AccessibleRole.TOOL_BAR;
!     }
!   }
  
+   /**
+    * This is the private JToolBar layout manager.
+    */
+   private class DefaultToolBarLayout implements LayoutManager
+   {
+     /**
+      * This method is called when a new component is added to the container.
+      *
+      * @param name The name of the component added.
+      * @param comp The component that was added.
+      */
+     public void addLayoutComponent(String name, Component comp)
+     {
+       // Do nothing.
+     }
  
!     /**
!      * This method is called to lay out the given container  to position and
!      * size the child components.
!      *
!      * @param c The container to lay out.
!      *
!      * @throws Error DOCUMENT ME!
!      */
!     public void layoutContainer(Container c)
!     {
!       if (! (c instanceof JToolBar))
! 	throw new Error("DefaultToolBarLayout can only be used on JToolBars.");
!       Insets insets = getInsets();
!       Insets margin = getMargin();
!       int middle;
!       if (margin != null)
!         {
! 	  insets.left += margin.left;
! 	  insets.top += margin.top;
! 	  insets.bottom += margin.bottom;
! 	  insets.right += margin.right;
!         }
!       Component[] components = c.getComponents();
!       Dimension tdims = c.getSize();
!       int start = 0;
!       Dimension pref;
  
!       if (getOrientation() == SwingUtilities.HORIZONTAL)
!         {
! 	  start += insets.left;
! 	  for (int i = 0; i < components.length; i++)
! 	    {
! 	      if (components[i] != null && components[i].isVisible())
! 	        {
! 		  pref = components[i].getPreferredSize();
! 		  if (pref != null)
! 		    {
! 		      middle = (tdims.height - pref.height) / 2;
! 		      components[i].setBounds(start, middle, pref.width,
! 		                              pref.height);
! 		      start += pref.width;
! 		    }
! 	        }
! 	    }
!         }
!       else
!         {
! 	  start += insets.top;
! 	  for (int i = 0; i < components.length; i++)
! 	    {
! 	      if (components[i] != null && components[i].isVisible())
! 	        {
! 		  pref = components[i].getPreferredSize();
! 		  if (pref != null)
! 		    {
! 		      middle = (tdims.width - pref.width) / 2;
! 		      components[i].setBounds(middle, start, pref.width,
! 		                              pref.height);
! 		      start += pref.height;
! 		    }
! 	        }
! 	    }
!         }
!     }
  
!     /**
!      * This method returns the minimum size of the given container given the
!      * child components.
!      *
!      * @param parent The container to measure.
!      *
!      * @return The minimum size of the given container.
!      */
!     public Dimension minimumLayoutSize(Container parent)
!     {
!       return preferredLayoutSize(parent);
!     }
  
!     /**
!      * This method returns the preferred size of the given container given the
!      * child components.
!      *
!      * @param parent The container to measure.
!      *
!      * @return The preferred size of the given container.
!      */
!     public Dimension preferredLayoutSize(Container parent)
!     {
!       int orientation = getOrientation();
!       Component[] components = getComponents();
  
+       int limit = 0;
+       int total = 0;
+       Dimension dims;
  
!       int w = 0;
!       int h = 0;
  
!       if (orientation == SwingConstants.HORIZONTAL)
!         {
! 	  for (int i = 0; i < components.length; i++)
! 	    {
! 	      dims = components[i].getPreferredSize();
! 	      if (dims != null)
! 	        {
! 		  if (dims.height > limit)
! 		    limit = dims.height;
! 		  total += dims.width;
! 	        }
! 	    }
! 	  w = total;
! 	  h = limit;
!         }
!       else
!         {
! 	  for (int i = 0; i < components.length; i++)
! 	    {
! 	      dims = components[i].getPreferredSize();
! 	      if (dims != null)
! 	        {
! 		  if (dims.width > limit)
! 		    limit = dims.width;
! 		  total += dims.height;
! 	        }
! 	    }
! 	  w = limit;
! 	  h = total;
!         }
  
!       Insets insets = getInsets();
!       w += insets.left + insets.right;
!       h += insets.top + insets.bottom;
  
+       Insets margin = getMargin();
+       if (margin != null)
+         {
+ 	  w += margin.left + margin.right;
+ 	  h += margin.top + margin.bottom;
+         }
  
!       return new Dimension(w, h);
!     }
  
!     /**
!      * This method is called when the given component  is removed from the
!      * container.
!      *
!      * @param comp The component removed.
!      */
!     public void removeLayoutComponent(Component comp)
!     {
!       // Do nothing.
!     }
!   }
  
!   /**
!    * This is an extension of JSeparator used in toolbars. Unlike JSeparator,
!    * nothing is painted for this Separator, it is only blank space that
!    * separates components.
!    */
!   public static class Separator extends JSeparator
!   {
!     /** DOCUMENT ME! */
!     private static final long serialVersionUID = -1656745644823105219L;
  
!     /**
!      * Creates a new Separator object.
!      */
!     public Separator()
!     {
!       super();
!     } // Separator()
  
!     /**
!      * Creates a new Separator object with the given size.
!      *
!      * @param size The size of the separator.
!      */
!     public Separator(Dimension size)
!     {
!       setPreferredSize(size);
!     } // Separator()
  
!     /**
!      * This method returns the String ID of the UI class of  Separator.
!      *
!      * @return The UI class' String ID.
!      */
!     public String getUIClassID()
!     {
!       return "ToolBarSeparatorUI";
!     } // getUIClassID()
  
!     /**
!      * This method returns the preferred size of the Separator.
!      *
!      * @return The preferred size of the Separator.
!      */
!     public Dimension getPreferredSize()
!     {
!       return super.getPreferredSize();
!     } // getPreferredSize()
  
+     /**
+      * This method returns the maximum size of the Separator.
+      *
+      * @return The maximum size of the Separator.
+      */
+     public Dimension getMaximumSize()
+     {
+       return super.getPreferredSize();
+     } // getMaximumSize()
  
!     /**
!      * This method returns the minimum size of the Separator.
!      *
!      * @return The minimum size of the Separator.
!      */
!     public Dimension getMinimumSize()
!     {
!       return super.getPreferredSize();
!     } // getMinimumSize()
  
+     /**
+      * This method returns the size of the Separator.
+      *
+      * @return The size of the Separator.
+      */
+     public Dimension getSeparatorSize()
+     {
+       return super.getPreferredSize();
+     } // getSeparatorSize()
  
!     /**
!      * This method sets the size of the Separator.
!      *
!      * @param size The new size of the Separator.
!      */
!     public void setSeparatorSize(Dimension size)
!     {
!       setPreferredSize(size);
!     } // setSeparatorSize()
!   } // Separator
  
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = -1269915519555129643L;
  
!   /** Whether the JToolBar paints its border. */
!   private transient boolean paintBorder = true;
  
!   /** The extra insets around the JToolBar. */
!   private transient Insets margin;
  
!   /** Whether the JToolBar can float (and be dragged around). */
!   private transient boolean floatable = true;
  
!   /** Whether the buttons will have rollover borders. */
!   private transient boolean rollover;
  
+   /** The orientation of the JToolBar. */
+   private int orientation = HORIZONTAL;
  
!   /**
!    * This method creates a new JToolBar object with horizontal orientation
!    * and no name.
!    */
!   public JToolBar()
!   {
!     this(null, HORIZONTAL);
!   } // JToolBar()
  
!   /**
!    * This method creates a new JToolBar with the given orientation and  no
!    * name.
!    *
!    * @param orientation JToolBar orientation (HORIZONTAL or VERTICAL)
!    */
!   public JToolBar(int orientation)
!   {
!     this(null, orientation);
!   } // JToolBar()
  
!   /**
!    * This method creates a new JToolBar object with the given name and
!    * horizontal orientation.
!    *
!    * @param name Name assigned to undocked tool bar.
!    */
!   public JToolBar(String name)
!   {
!     this(name, HORIZONTAL);
!   } // JToolBar()
  
!   /**
!    * This method creates a new JToolBar object with the given name and
!    * orientation.
!    *
!    * @param name Name assigned to undocked tool bar.
!    * @param orientation JToolBar orientation (HORIZONTAL or VERTICAL)
!    */
!   public JToolBar(String name, int orientation)
!   {
!     setName(name);
!     setOrientation(orientation);
!     setLayout(new DefaultToolBarLayout());
!     revalidate();
!     updateUI();
!   } // JToolBar()
  
!   /**
!    * This method adds a new JButton that performs the given Action to the
!    * JToolBar.
!    *
!    * @param action The Action to add to the JToolBar.
!    *
!    * @return The JButton that wraps the Action.
!    */
!   public JButton add(Action action)
!   {
!     JButton b = createActionComponent(action);
!     add(b);
!     return b;
!   } // add()
  
+   /**
+    * This method paints the border if the borderPainted property is true.
+    *
+    * @param graphics The graphics object to paint with.
+    */
+   protected void paintBorder(Graphics graphics)
+   {
+     if (paintBorder && isFloatable())
+       super.paintBorder(graphics);
+   } // paintBorder()
  
!   /**
!    * This method returns the UI class used to paint this JToolBar.
!    *
!    * @return The UI class for this JToolBar.
!    */
!   public ToolBarUI getUI()
!   {
!     return (ToolBarUI) ui;
!   } // getUI()
  
!   /**
!    * This method sets the UI used with the JToolBar.
!    *
!    * @param ui The UI used with the JToolBar.
!    */
!   public void setUI(ToolBarUI ui)
!   {
!     super.setUI(ui);
!   } // setUI()
  
!   /**
!    * This method resets the UI used to the Look and Feel defaults.
!    */
!   public void updateUI()
!   {
!     setUI((ToolBarUI) UIManager.getUI(this));
!     revalidate();
!     repaint();
!   } // updateUI()
  
!   /**
!    * This method returns the String identifier for the UI class to the used
!    * with the JToolBar.
!    *
!    * @return The String identifier for the UI class.
!    */
!   public String getUIClassID()
!   {
!     return "ToolBarUI";
!   } // getUIClassID()
  
!   /**
!    * This method sets the rollover property for the JToolBar. In rollover
!    * mode, JButtons inside the JToolBar will only display their borders when
!    * the mouse is moving over them.
!    *
!    * @param b The new rollover property.
!    */
!   public void setRollover(boolean b)
!   {
!     if (b != rollover)
!       {
! 	rollover = b;
! 	firePropertyChange("rollover", ! rollover, rollover);
! 	revalidate();
! 	repaint();
!       }
!   }
  
!   /**
!    * This method returns the rollover property.
!    *
!    * @return The rollover property.
!    */
!   public boolean isRollover()
!   {
!     return rollover;
!   }
  
!   /**
!    * This method returns the index of the given component.
!    *
!    * @param component The component to find.
!    *
!    * @return The index of the given component.
!    */
!   public int getComponentIndex(Component component)
!   {
!     Component[] components = getComponents();
!     if (components == null)
!       return -1;
  
!     for (int i = 0; i < components.length; i++)
!       if (components[i] == component)
! 	return i;
  
!     return -1;
!   } // getComponentIndex()
  
!   /**
!    * This method returns the component at the given index.
!    *
!    * @param index The index of the component.
!    *
!    * @return The component at the given index.
!    */
!   public Component getComponentAtIndex(int index)
!   {
!     return getComponent(index);
!   } // getComponentAtIndex()
  
!   /**
!    * This method returns the margin property.
!    *
!    * @return The margin property.
!    */
!   public Insets getMargin()
!   {
!     return margin;
!   } // getMargin()
  
!   /**
!    * This method sets the margin property. The margin property determines the
!    * extra space between the children components of the JToolBar and the
!    * border.
!    *
!    * @param margin The margin property.
!    */
!   public void setMargin(Insets margin)
!   {
!     if ((this.margin != null && margin == null)
!         || (this.margin == null && margin != null)
!         || (margin != null && this.margin != null
!         && (margin.left != this.margin.left
!         || margin.right != this.margin.right || margin.top != this.margin.top
!         || margin.bottom != this.margin.bottom)))
!       {
! 	Insets oldMargin = this.margin;
! 	this.margin = margin;
! 	firePropertyChange("margin", oldMargin, this.margin);
! 	revalidate();
! 	repaint();
!       }
!   } // setMargin()
  
!   /**
!    * This method returns the borderPainted property.
!    *
!    * @return The borderPainted property.
!    */
!   public boolean isBorderPainted()
!   {
!     return paintBorder;
!   } // isBorderPainted()
  
!   /**
!    * This method sets the borderPainted property. If set to false, the border
!    * will not be painted.
!    *
!    * @param painted Whether the border will be painted.
!    */
!   public void setBorderPainted(boolean painted)
!   {
!     if (painted != paintBorder)
!       {
! 	paintBorder = painted;
! 	firePropertyChange("borderPainted", ! paintBorder,
! 	                   paintBorder);
! 	repaint();
!       }
!   } // setBorderPainted()
  
!   /**
!    * This method returns the floatable property.
!    *
!    * @return The floatable property.
!    */
!   public boolean isFloatable()
!   {
!     return floatable;
!   } // isFloatable()
  
!   /**
!    * This method sets the floatable property. If set to false, the JToolBar
!    * cannot be dragged.
!    *
!    * @param floatable Whether the JToolBar can be dragged.
!    */
!   public void setFloatable(boolean floatable)
!   {
!     if (floatable != this.floatable)
!       {
! 	this.floatable = floatable;
! 	firePropertyChange("floatable", ! floatable, floatable);
!       }
!   } // setFloatable()
  
!   /**
!    * This method returns the orientation of the JToolBar.
!    *
!    * @return The orientation of the JToolBar.
!    */
!   public int getOrientation()
!   {
!     return orientation;
!   } // getOrientation()
  
!   /**
!    * This method sets the layout manager to be used with the JToolBar.
!    *
!    * @param mgr The Layout Manager used with the JToolBar.
!    */
!   public void setLayout(LayoutManager mgr)
!   {
!     super.setLayout(mgr);
!     revalidate();
!     repaint();
!   } // setLayout()
  
!   /**
!    * This method sets the orientation property for JToolBar.
!    *
!    * @param orientation The new orientation for JToolBar.
!    *
!    * @throws IllegalArgumentException If the orientation is not HORIZONTAL or
!    *         VERTICAL.
!    */
!   public void setOrientation(int orientation)
!   {
!     if (orientation != HORIZONTAL && orientation != VERTICAL)
!       throw new IllegalArgumentException(orientation
!                                          + " is not a legal orientation");
!     if (orientation != this.orientation)
!       {
! 	int oldOrientation = this.orientation;
! 	this.orientation = orientation;
! 	firePropertyChange("orientation", oldOrientation, this.orientation);
! 	revalidate();
! 	repaint();
!       }
!   } // setOrientation()
  
!   /**
!    * This method adds a Separator of default size to the JToolBar.
!    */
!   public void addSeparator()
!   {
!     add(new Separator());
!   } // addSeparator()
  
!   /**
!    * This method adds a Separator with the given size to the JToolBar.
!    *
!    * @param size The size of the Separator.
!    */
!   public void addSeparator(Dimension size)
!   {
!     add(new Separator(size));
!   } // addSeparator()
  
!   /**
!    * This method is used to create JButtons which can be added to the JToolBar
!    * for the given action.
!    *
!    * @param action The action to create a JButton for.
!    *
!    * @return The JButton created from the action.
!    */
!   protected JButton createActionComponent(Action action)
!   {
!     return new JButton(action);
!   } // createActionComponent()
  
!   /**
!    * This method creates a pre-configured PropertyChangeListener which updates
!    * the control as changes are made to the Action. However, this is no
!    * longer the recommended way of adding Actions to Containers. As such,
!    * this method returns null.
!    *
!    * @param button The JButton to configure a PropertyChangeListener for.
!    *
!    * @return null.
!    */
!   protected PropertyChangeListener createActionChangeListener(JButton button)
!   {
!     // XXX: As specified, this returns null. But seems kind of strange, usually deprecated methods don't just return null, verify!
!     return null;
!   } // createActionChangeListener()
  
!   /**
!    * This method overrides Container's addImpl method. If a JButton is added,
!    * it is disabled.
!    *
!    * @param component The Component to add.
!    * @param constraints The Constraints placed on the component.
!    * @param index The index to place the Component at.
!    */
!   protected void addImpl(Component component, Object constraints, int index)
!   {
!     // XXX: Sun says disable button but test cases show otherwise.
!     super.addImpl(component, constraints, index);
!   } // addImpl()
  
!   /**
!    * This method returns a String description of the JToolBar.
!    *
!    * @return A String description of the JToolBar.
!    */
!   protected String paramString()
!   {
!     return "JToolBar";
!   } // paramString()
  
+   /**
+    * getAccessibleContext
+    *
+    * @return AccessibleContext
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     if (accessibleContext == null)
+       accessibleContext = new AccessibleJToolBar();
  
!     return accessibleContext;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JToolTip.java gcc-4.0.0/libjava/javax/swing/JToolTip.java
*** gcc-3.4.3/libjava/javax/swing/JToolTip.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JToolTip.java	Tue Nov 30 23:58:58 2004
***************
*** 1,5 ****
! /* JToolTip.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JToolTip.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,54 ****
  
  package javax.swing;
  
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  
  public class JToolTip extends JComponent implements Accessible
  {
!     String text;
  
!     JToolTip(String text)
      {
- 	this.text = text;
      }
- }
  
  
--- 38,195 ----
  
  package javax.swing;
  
+ import java.awt.AWTEvent;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
+ import javax.accessibility.AccessibleRole;
+ import javax.swing.plaf.ToolTipUI;
  
+ /**
+  * This class is used to display ToolTips. ToolTips are small floating windows
+  * that display text when the mouse comes to rest over a Component. ToolTips
+  * are set for JComponents using JComponent.setToolTipText(String).
+  */
  public class JToolTip extends JComponent implements Accessible
  {
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = -1138929898906751643L;
  
!   /**
!    * DOCUMENT ME!
!    */
!   protected class AccessibleJToolTip extends AccessibleJComponent
!   {
!     /**
!      * Creates a new AccessibleJToolTip object.
!      */
!     protected AccessibleJToolTip()
      {
      }
  
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public String getAccessibleDescription()
+     {
+       return null;
+     }
  
+     /**
+      * DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public AccessibleRole getAccessibleRole()
+     {
+       return null;
+     }
+   }
+ 
+   /** The text to display in the JToolTip. */
+   String text;
+ 
+   /** The JComponent this JToolTip is used for. */
+   JComponent component;
+ 
+   /**
+    * Creates a new JToolTip object.
+    */
+   public JToolTip()
+   {
+     disableEvents(AWTEvent.MOUSE_EVENT_MASK);
+     updateUI();
+   }
+ 
+   /**
+    * This method returns the text this JToolTip displays.
+    *
+    * @return The text that this JToolTip displays.
+    */
+   public String getTipText()
+   {
+     return text;
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns the JComponent this JToolTip displays for.
+    *
+    * @return The JComponent this JToolTip displays for.
+    */
+   public JComponent getComponent()
+   {
+     return component;
+   }
+ 
+   /**
+    * This method returns the UI responsible for displaying this JToolTip.
+    *
+    * @return The UI responsible for displaying this JToolTip.
+    */
+   public ToolTipUI getUI()
+   {
+     return (ToolTipUI) ui;
+   }
+ 
+   /**
+    * This method returns the String identifier for the UI class.
+    *
+    * @return The String identifier for the UI class.
+    */
+   public String getUIClassID()
+   {
+     return "ToolTipUI";
+   }
+ 
+   /**
+    * This method returns a debugging String describing the JToolTip.
+    *
+    * @return A debugging String describing the JToolTip.
+    */
+   protected String paramString()
+   {
+     return "JToolTip";
+   }
+ 
+   /**
+    * This method sets the JComponent that the JToolTip displays for.
+    *
+    * @param c The JComponent that the JToolTip displays for.
+    */
+   public void setComponent(JComponent c)
+   {
+     component = c;
+   }
+ 
+   /**
+    * This method sets the text that the JToolTip displays.
+    *
+    * @param tipText The text that the JToolTip displays.
+    */
+   public void setTipText(String tipText)
+   {
+     text = tipText;
+   }
+ 
+   /**
+    * This method resets the UI used to the Look and Feel default.
+    */
+   public void updateUI()
+   {
+     setUI((ToolTipUI) UIManager.getUI(this));
+     revalidate();
+     repaint();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JTree.java gcc-4.0.0/libjava/javax/swing/JTree.java
*** gcc-3.4.3/libjava/javax/swing/JTree.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JTree.java	Thu Feb 17 07:48:52 2005
***************
*** 1,5 ****
! /* JTree.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JTree.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing;
*** 40,56 ****
  
  import java.awt.Dimension;
  import java.awt.Rectangle;
! import java.io.Serializable;
  import java.util.Hashtable;
  import java.util.Vector;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
! import javax.swing.event.TreeModelEvent;
! import javax.swing.event.TreeModelListener;
  import javax.swing.event.TreeSelectionEvent;
  import javax.swing.event.TreeSelectionListener;
  import javax.swing.plaf.TreeUI;
! import javax.swing.tree.DefaultTreeSelectionModel;
  import javax.swing.tree.TreeCellEditor;
  import javax.swing.tree.TreeCellRenderer;
  import javax.swing.tree.TreeModel;
--- 40,62 ----
  
  import java.awt.Dimension;
  import java.awt.Rectangle;
! import java.util.Enumeration;
  import java.util.Hashtable;
+ import java.util.Iterator;
  import java.util.Vector;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
! import javax.swing.event.TreeExpansionEvent;
! import javax.swing.event.TreeExpansionListener;
  import javax.swing.event.TreeSelectionEvent;
  import javax.swing.event.TreeSelectionListener;
+ import javax.swing.event.TreeWillExpandListener;
  import javax.swing.plaf.TreeUI;
! import javax.swing.tree.DefaultMutableTreeNode;
! import javax.swing.tree.DefaultTreeCellRenderer;
! import javax.swing.tree.DefaultTreeModel;
! import javax.swing.tree.ExpandVetoException;
  import javax.swing.tree.TreeCellEditor;
  import javax.swing.tree.TreeCellRenderer;
  import javax.swing.tree.TreeModel;
*************** import javax.swing.tree.TreeNode;
*** 58,126 ****
  import javax.swing.tree.TreePath;
  import javax.swing.tree.TreeSelectionModel;
  
! public class JTree extends JComponent implements Scrollable, Accessible
  {
!     JTree()
!     {
! 	updateUI();
!     }
      
!     public TreeUI getUI()
      {
!         return (TreeUI) ui;
      }
  
!     public void setUI(TreeUI ui)
      {
!         super.setUI(ui);
      }
  
!     public void updateUI()
      {
!         setUI((TreeUI)UIManager.getUI(this));
      }
- 
      
!     public String getUIClassID()
      {
! 	return "JTree";
      }
  
! 
!     public AccessibleContext getAccessibleContext()
      {
!       return null;
      }
  
!     public Dimension getPreferredScrollableViewportSize()
      {
! 	return null;
      }
  
!     public int getScrollableUnitIncrement(Rectangle visibleRect,
! 					  int orientation,
! 					  int direction)
!     {
! 	return 1;
!     }
  
!     public int getScrollableBlockIncrement(Rectangle visibleRect,
! 					   int orientation,
! 					   int direction)
!     {
! 	return 1;
!     }
  
!     public boolean getScrollableTracksViewportWidth()
!     {
! 	return false;
!     }
  
!     public boolean getScrollableTracksViewportHeight()
!     {
! 	return false;
!     }
! }
  
  
  
--- 64,1392 ----
  import javax.swing.tree.TreePath;
  import javax.swing.tree.TreeSelectionModel;
  
! 
! public class JTree extends JComponent
!   implements Scrollable, Accessible
  {
!   private static final long serialVersionUID = 7559816092864483649L;
! 
!   public static final String CELL_EDITOR_PROPERTY = "cellEditor";
!   public static final String CELL_RENDERER_PROPERTY = "cellRenderer";
!   public static final String EDITABLE_PROPERTY = "editable";
!   public static final String INVOKES_STOP_CELL_EDITING_PROPERTY = "invokesStopCellEditing";
!   public static final String LARGE_MODEL_PROPERTY = "largeModel";
!   public static final String ROOT_VISIBLE_PROPERTY = "rootVisible";
!   public static final String ROW_HEIGHT_PROPERTY = "rowHeight";
!   public static final String SCROLLS_ON_EXPAND_PROPERTY = "scrollsOnExpand";
!   public static final String SELECTION_MODEL_PROPERTY = "selectionModel";
!   public static final String SHOWS_ROOT_HANDLES_PROPERTY = "showsRootHandles";
!   public static final String TOGGLE_CLICK_COUNT_PROPERTY = "toggleClickCount";
!   public static final String TREE_MODEL_PROPERTY = "model";
!   public static final String VISIBLE_ROW_COUNT_PROPERTY = "visibleRowCount";
! 
!   /** @since 1.3 */
!   public static final String ANCHOR_SELECTION_PATH_PROPERTY = "anchorSelectionPath";
!   /** @since 1.3 */
!   public static final String LEAD_SELECTION_PATH_PROPERTY = "leadSelectionPath";
!   /** @since 1.3 */
!   public static final String EXPANDS_SELECTED_PATHS_PROPERTY = "expandsSelectedPaths";
! 
!   private static final Object EXPANDED = new Object();
!   private static final Object COLLAPSED = new Object();
!   
!   private boolean dragEnabled;
!   private boolean expandsSelectedPaths;
!   private TreePath anchorSelectionPath;
!   private TreePath leadSelectionPath;
! 
!   /*
!    * This contains the state of all nodes in the tree. Al/ entries map the
!    * TreePath of a note to to its state. Valid states are EXPANDED and
!    * COLLAPSED.  Nodes not in this Hashtable are assumed state COLLAPSED.
!    */
!   private Hashtable nodeStates;
! 
!   protected transient TreeCellEditor cellEditor;
!   protected transient TreeCellRenderer cellRenderer;
!   protected boolean editable;
!   protected boolean invokesStopCellEditing;
!   protected boolean largeModel;
!   protected boolean rootVisible;
!   protected int rowHeight;
!   protected boolean scrollsOnExpand;
!   protected transient TreeSelectionModel selectionModel;
!   protected boolean showsRootHandles;
!   protected int toggleClickCount;
!   protected transient TreeModel treeModel;
!   protected int visibleRowCount;
! 
!   /**
!    * Creates a new <code>JTree</code> object.
!    */
!   public JTree()
!   {
!     this(createTreeModel(null));
!   }
! 
!   /**
!    * Creates a new <code>JTree</code> object.
!    *
!    * @param value the initial nodes in the tree
!    */
!   public JTree(Hashtable value)
!   {
!     this(createTreeModel(value));
!   }
! 
!   /**
!    * Creates a new <code>JTree</code> object.
!    *
!    * @param value the initial nodes in the tree
!    */
!   public JTree(Object[] value)
!   {
!     this(createTreeModel(value));
!   }
! 
!   /**
!    * Creates a new <code>JTree</code> object.
!    *
!    * @param model the model to use
!    */
!   public JTree(TreeModel model)
!   {
!     treeModel = model;
!     setCellRenderer(new DefaultTreeCellRenderer());
!     updateUI();
!   }
! 
!   /**
!    * Creates a new <code>JTree</code> object.
!    *
!    * @param root the root node
!    */
!   public JTree(TreeNode root)
!   {
!     this(root, false);
!   }
! 
!   /**
!    * Creates a new <code>JTree</code> object.
!    *
!    * @param root the root node
!    * @param asksAllowChildren if false, all nodes without children are leaf nodes.
!    * If true, only nodes that do not allow children are leaf nodes.
!    */
!   public JTree(TreeNode root, boolean asksAllowChildren)
!   {
!     this(new DefaultTreeModel(root, asksAllowChildren));
!   }
! 
!   /**
!    * Creates a new <code>JTree</code> object.
!    *
!    * @param value the initial nodes in the tree
!    */
!   public JTree(Vector value)
!   {
!     this(createTreeModel(value));
!   }
! 
!   public static class DynamicUtilTreeNode 
!     extends DefaultMutableTreeNode
!   {
!     protected Object childValue;
!     protected boolean loadedChildren;
! 
!     /**
!      * Currently not set or used by this class.
!      * It might be set and used in later versions of this class.
!      */
!     protected boolean hasChildren;
      
!     public DynamicUtilTreeNode(Object value,
!                                Object children) 
      {
!       super(value);
!       childValue = children;
!       loadedChildren = false;
      }
  
!     public int getChildCount()
      {
!       loadChildren();
!       return super.getChildCount();
      }
  
!     protected void loadChildren()
      {
!       if (!loadedChildren)
!         {
!           createChildren(this, childValue);
!           loadedChildren = true;
!         }
      }
      
!     public Enumeration children()
      {
!       loadChildren();
!       return super.children();
      }
  
!     public boolean isLeaf() 
      {
!       return (childValue == null || 
!               !(childValue instanceof Hashtable
!                || childValue instanceof Vector
!                || childValue.getClass().isArray()));
      }
  
!     public static void createChildren(DefaultMutableTreeNode parent,
!                                       Object children)
      {
!       if (children instanceof Hashtable)
!         {
!           Hashtable tab = (Hashtable) children;
!           Enumeration e = tab.keys();
!           while (e.hasMoreElements()) 
!             {
!               Object key = e.nextElement();
!               Object val = tab.get(key);
!               parent.add(new DynamicUtilTreeNode(key, val));
!             }
!         }
!       else if (children instanceof Vector)
!         {
!           Iterator i = ((Vector)children).iterator();
!           while (i.hasNext())
!             {
!               Object n = i.next();
!               parent.add(new DynamicUtilTreeNode(n,n));
!             }
!         }
!       else if (children.getClass().isArray())
!         {
!           Object[] arr = (Object[]) children;
!           for (int i = 0; i < arr.length; ++i)
!             parent.add(new DynamicUtilTreeNode(arr[i], arr[i]));
!       }
      }
+   }
  
!   public int getRowForPath(TreePath path)
!   {
!     TreeUI ui = getUI();
  
!     if (ui != null)
!       return ui.getRowForPath(this, path);
  
!     return -1;
!   }
!   
!   public TreePath getPathForRow(int row)
!   {
!     TreeUI ui = getUI();
!     return ui != null ? ui.getPathForRow(this, row) : null;
!   }
  
!   protected TreePath[] getPathBetweenRows(int index0, int index1)
!   {
!     TreeUI ui = getUI();
!     
!     if (ui == null)
!       return null;
!     
!     int minIndex = Math.min(index0, index1);
!     int maxIndex = Math.max(index0, index1);
!     TreePath[] paths = new TreePath[maxIndex - minIndex + 1];
!     
!     for (int i = minIndex; i <= maxIndex; ++i)
!       paths[i - minIndex] = ui.getPathForRow(this, i);
! 
!     return paths;
!   }
!   
!   /**
!    * Creates a new <code>TreeModel</code> object.
!    *
!    * @param value the values stored in the model
!    */
!   protected static TreeModel createTreeModel(Object value)
!   {
!     return new DefaultTreeModel(new DynamicUtilTreeNode(value, value));
!   }
! 
!   /**
!    * Return the UI associated with this <code>JTree</code> object.
!    *
!    * @return the associated <code>TreeUI</code> object
!    */
!   public TreeUI getUI()
!   {
!     return (TreeUI) ui;
!   }
! 
!   /**
!    * Sets the UI associated with this <code>JTree</code> object.
!    *
!    * @param ui the <code>TreeUI</code> to associate
!    */
!   public void setUI(TreeUI ui)
!   {
!     super.setUI(ui);
!   }
! 
!   /**
!    * This method resets the UI used to the Look and Feel defaults..
!    */
!   public void updateUI()
!   {
!     setUI((TreeUI) UIManager.getUI(this));
!     revalidate();
!     repaint();
!   }
! 
!   /**
!    * This method returns the String ID of the UI class of  Separator.
!    *
!    * @return The UI class' String ID.
!    */
!   public String getUIClassID()
!   {
!     return "TreeUI";
!   }
! 
!   /**
!    * Gets the AccessibleContext associated with this <code>JToggleButton</code>.
!    *
!    * @return the associated context
!    */
!   public AccessibleContext getAccessibleContext()
!   {
!     return null;
!   }
! 
!   /**
!    * Returns the preferred viewport size..
!    *
!    * @return the preferred size
!    */
!   public Dimension getPreferredScrollableViewportSize()
!   {
!     return null;
!   }
! 
!   public int getScrollableUnitIncrement(Rectangle visibleRect,
!                                         int orientation, int direction)
!   {
!     return 1;
!   }
! 
!   public int getScrollableBlockIncrement(Rectangle visibleRect,
!                                          int orientation, int direction)
!   {
!     return 1;
!   }
! 
!   public boolean getScrollableTracksViewportWidth()
!   {
!     return false;
!   }
! 
!   public boolean getScrollableTracksViewportHeight()
!   {
!     return false;
!   }
! 
!   /**
!    * Adds a <code>TreeExpansionListener</code> object to the tree.
!    *
!    * @param listener the listener to add
!    */
!   public void addTreeExpansionListener(TreeExpansionListener listener)
!   {
!     listenerList.add(TreeExpansionListener.class, listener);
!   }
! 
!   /**
!    * Removes a <code>TreeExpansionListener</code> object from the tree.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeTreeExpansionListener(TreeExpansionListener listener)
!   {
!     listenerList.remove(TreeExpansionListener.class, listener);
!   }
! 
!   /**
!    * Returns all added <code>TreeExpansionListener</code> objects.
!    *
!    * @return an array of listeners
!    */
!   public TreeExpansionListener[] getTreeExpansionListeners()
!   {
!     return (TreeExpansionListener[]) getListeners(TreeExpansionListener.class);
!   }
! 
!   /**
!    * Notifies all listeners that the tree was collapsed.
!    *
!    * @param path the path to the node that was collapsed
!    */
!   public void fireTreeCollapsed(TreePath path)
!   {
!     TreeExpansionEvent event = new TreeExpansionEvent(this, path);
!     TreeExpansionListener[] listeners = getTreeExpansionListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].treeCollapsed(event);
!   }
!   
!   /**
!    * Notifies all listeners that the tree was expanded.
!    *
!    * @param path the path to the node that was expanded
!    */
!   public void fireTreeExpanded(TreePath path)
!   {
!     TreeExpansionEvent event = new TreeExpansionEvent(this, path);
!     TreeExpansionListener[] listeners = getTreeExpansionListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].treeExpanded(event);
!   }
! 
!   /**
!    * Adds a <code>TreeSelctionListener</code> object to the tree.
!    *
!    * @param listener the listener to add
!    */
!   public void addTreeSelectionListener(TreeSelectionListener listener)
!   {
!     listenerList.add(TreeSelectionListener.class, listener);
!   }
! 
!   /**
!    * Removes a <code>TreeSelectionListener</code> object from the tree.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeTreeSelectionListener(TreeSelectionListener listener)
!   {
!     listenerList.remove(TreeSelectionListener.class, listener);
!   }
! 
!   /**
!    * Returns all added <code>TreeSelectionListener</code> objects.
!    *
!    * @return an array of listeners
!    */
!   public TreeSelectionListener[] getTreeSelectionListeners()
!   {
!     return (TreeSelectionListener[]) getListeners(TreeSelectionListener.class);
!   }
! 
!   /**
!    * Notifies all listeners when the selection of the tree changed.
!    *
!    * @param event the event to send
!    */
!   protected void fireValueChanged(TreeSelectionEvent event)
!   {
!     TreeSelectionListener[] listeners = getTreeSelectionListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].valueChanged(event);
!   }
! 
!   /**
!    * Adds a <code>TreeWillExpandListener</code> object to the tree.
!    *
!    * @param listener the listener to add
!    */
!   public void addTreeWillExpandListener(TreeWillExpandListener listener)
!   {
!     listenerList.add(TreeWillExpandListener.class, listener);
!   }
! 
!   /**
!    * Removes a <code>TreeWillExpandListener</code> object from the tree.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeTreeWillExpandListener(TreeWillExpandListener listener)
!   {
!     listenerList.remove(TreeWillExpandListener.class, listener);
!   }
! 
!   /**
!    * Returns all added <code>TreeWillExpandListener</code> objects.
!    *
!    * @return an array of listeners
!    */
!   public TreeWillExpandListener[] getTreeWillExpandListeners()
!   {
!     return (TreeWillExpandListener[]) getListeners(TreeWillExpandListener.class);
!   }
! 
!   /**
!    * Notifies all listeners that the tree will collapse.
!    *
!    * @param path the path to the node that will collapse
!    */
!   public void fireTreeWillCollapse(TreePath path)
!     throws ExpandVetoException
!   {
!     TreeExpansionEvent event = new TreeExpansionEvent(this, path);
!     TreeWillExpandListener[] listeners = getTreeWillExpandListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].treeWillCollapse(event);
!   }
! 
!   /**
!    * Notifies all listeners that the tree will expand.
!    *
!    * @param path the path to the node that will expand
!    */
!   public void fireTreeWillExpand(TreePath path)
!     throws ExpandVetoException
!   {
!     TreeExpansionEvent event = new TreeExpansionEvent(this, path);
!     TreeWillExpandListener[] listeners = getTreeWillExpandListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].treeWillExpand(event);
!   }
! 
!   /**
!    * Returns the model of this <code>JTree</code> object.
!    *
!    * @return the associated <code>TreeModel</code>
!    */
!   public TreeModel getModel()
!   {
!     return treeModel;
!   }
! 
!   /**
!    * Sets the model to use in <code>JTree</code>.
!    *
!    * @param model the <code>TreeModel</code> to use
!    */
!   public void setModel(TreeModel model)
!   {
!     if (treeModel == model)
!       return;
! 
!     TreeModel oldValue = treeModel;
!     treeModel = model;
!     firePropertyChange(TREE_MODEL_PROPERTY, oldValue, model);
!   }
! 
!   /**
!    * Checks if this <code>JTree</code> object is editable.
!    *
!    * @return <code>true</code> if this tree object is editable,
!    * <code>false</code> otherwise
!    */
!   public boolean isEditable()
!   {
!     return editable;
!   }
! 
!   /**
!    * Sets the <code>editable</code> property.
!    *
!    * @param flag <code>true</code> to make this tree object editable,
!    * <code>false</code> otherwise
!    */
!   public void setEditable(boolean flag)
!   {
!     if (editable == flag)
!       return;
! 
!     boolean oldValue = editable;
!     editable = flag;
!     firePropertyChange(EDITABLE_PROPERTY, oldValue, editable);
!   }
! 
!   /**
!    * Checks if the root element is visible.
!    *
!    * @return <code>true</code> if the root element is visible,
!    * <code>false</code> otherwise
!    */
!   public boolean isRootVisible()
!   {
!     return rootVisible;
!   }
! 
!   public void setRootVisible(boolean flag)
!   {
!     if (rootVisible == flag)
!       return;
!     
!     boolean oldValue = rootVisible;
!     rootVisible = flag;
!     firePropertyChange(ROOT_VISIBLE_PROPERTY, oldValue, flag);
!   }
! 
!   public boolean getShowsRootHandles()
!   {
!     return showsRootHandles;
!   }
! 
!   public void setShowsRootHandles(boolean flag)
!   {
!     if (showsRootHandles == flag)
!       return;
! 
!     boolean oldValue = showsRootHandles;
!     showsRootHandles = flag;
!     firePropertyChange(SHOWS_ROOT_HANDLES_PROPERTY, oldValue, flag);
!   }
! 
!   public TreeCellEditor getCellEditor()
!   {
!     return cellEditor;
!   }
! 
!   public void setCellEditor(TreeCellEditor editor)
!   {
!     if (cellEditor == editor)
!       return;
! 
!     TreeCellEditor oldValue = cellEditor;
!     cellEditor = editor;
!     firePropertyChange(CELL_EDITOR_PROPERTY, oldValue, editor);
!   }
!   
!   public TreeCellRenderer getCellRenderer()
!   {
!     return cellRenderer;
!   }
!   
!   public void setCellRenderer(TreeCellRenderer newRenderer)
!   {
!     if (cellRenderer == newRenderer)
!       return;
! 
!     TreeCellRenderer oldValue = cellRenderer;
!     cellRenderer = newRenderer;
!     firePropertyChange(CELL_RENDERER_PROPERTY, oldValue, newRenderer);
!   }
! 
!   public TreeSelectionModel getSelectionModel()
!   {
!     return selectionModel;
!   }
! 
!   public void setSelectionModel(TreeSelectionModel model)
!   {
!     if (selectionModel == model)
!       return;
!     
!     TreeSelectionModel oldValue = selectionModel;
!     selectionModel = model;
!     firePropertyChange(SELECTION_MODEL_PROPERTY, oldValue, model);
!   }
! 
!   public int getVisibleRowCount()
!   {
!     return visibleRowCount;
!   }
! 
!   public void setVisibleRowCount(int rows)
!   {
!     if (visibleRowCount == rows)
!       return;
! 
!     int oldValue = visibleRowCount;
!     visibleRowCount = rows;
!     firePropertyChange(VISIBLE_ROW_COUNT_PROPERTY, oldValue, rows);
!   }
! 
!   public boolean isLargeModel()
!   {
!     return largeModel;
!   }
! 
!   public void setLargeModel(boolean large)
!   {
!     if (largeModel == large)
!       return;
! 
!     boolean oldValue = largeModel;
!     largeModel = large;
!     firePropertyChange(LARGE_MODEL_PROPERTY, oldValue, large);
!   }
! 
!   public int getRowHeight()
!   {
!     return rowHeight;
!   }
! 
!   public void setRowHeight(int height)
!   {
!     if (rowHeight == height)
!       return;
!     
!     int oldValue = rowHeight;
!     rowHeight = height;
!     firePropertyChange(ROW_HEIGHT_PROPERTY, oldValue, height);
!   }
! 
!   public boolean isFixedRowHeight()
!   {
!     return rowHeight > 0;
!   }
! 
!   public boolean getInvokesStopCellEditing()
!   {
!     return invokesStopCellEditing;
!   }
! 
!   public void setInvokesStopCellEditing(boolean invoke)
!   {
!     if (invokesStopCellEditing == invoke)
!      return;
! 
!     boolean oldValue = invokesStopCellEditing;
!     invokesStopCellEditing = invoke;
!     firePropertyChange(INVOKES_STOP_CELL_EDITING_PROPERTY, oldValue, invoke);
!   }
! 
!   /**
!    * @since 1.3
!    */
!   public int getToggleClickCount()
!   {
!     return toggleClickCount;
!   }
! 
!   /**
!    * @since 1.3
!    */
!   public void setToggleClickCount(int count)
!   {
!     if (toggleClickCount == count)
!       return;
!     
!     int oldValue = toggleClickCount;
!     toggleClickCount = count;
!     firePropertyChange(TOGGLE_CLICK_COUNT_PROPERTY, oldValue, count);
!   }
! 
!   public void scrollPathToVisible(TreePath path)
!   {
!     if (path == null)
!       return;
! 
!     Rectangle rect = getPathBounds(path);
! 
!     if (rect == null)
!       return;
! 
!     scrollRectToVisible(rect);
!   }
! 
!   public void scrollRowToVisible(int row)
!   {
!     scrollPathToVisible(getPathForRow(row));
!   }
!   
!   public boolean getScrollsOnExpand()
!   {
!     return scrollsOnExpand;
!   }
! 
!   public void setScrollsOnExpand(boolean scroll)
!   {
!     if (scrollsOnExpand == scroll)
!       return;
! 
!     boolean oldValue = scrollsOnExpand;
!     scrollsOnExpand = scroll;
!     firePropertyChange(SCROLLS_ON_EXPAND_PROPERTY, oldValue, scroll);
!   }
! 
!   public void setSelectionPath(TreePath path)
!   {
!     selectionModel.setSelectionPath(path);
!   }
! 
!   public void setSelectionPaths(TreePath[] paths)
!   {
!     selectionModel.setSelectionPaths(paths);
!   }
!   
!   public void setSelectionRow(int row)
!   {
!     TreePath path = getPathForRow(row);
! 
!     if (path != null)
!       selectionModel.setSelectionPath(path);
!   }
! 
!   public void setSelectionRows(int[] rows)
!   {
!     // Make sure we have an UI so getPathForRow() does not return null.
!     if (rows == null || getUI() == null)
!       return;
! 
!     TreePath[] paths = new TreePath[rows.length];
! 
!     for (int i = rows.length - 1; i >= 0; --i)
!       paths[i] = getPathForRow(rows[i]);
! 
!     setSelectionPaths(paths);
!   }
! 
!   public void setSelectionInterval(int index0, int index1)
!   {
!     TreePath[] paths = getPathBetweenRows(index0, index1);
! 
!     if (paths != null)
!       setSelectionPaths(paths);
!   }
! 
!   public void addSelectionPath(TreePath path)
!   {
!     selectionModel.addSelectionPath(path);
!   }
! 
!   public void addSelectionPaths(TreePath[] paths)
!   {
!     selectionModel.addSelectionPaths(paths);
!   }
! 
!   public void addSelectionRow(int row)
!   {
!     TreePath path = getPathForRow(row);
! 
!     if (path != null)
!       selectionModel.addSelectionPath(path);
!   }
! 
!   public void addSelectionRows(int[] rows)
!   {
!     // Make sure we have an UI so getPathForRow() does not return null.
!     if (rows == null || getUI() == null)
!       return;
! 
!     TreePath[] paths = new TreePath[rows.length];
! 
!     for (int i = rows.length - 1; i >= 0; --i)
!       paths[i] = getPathForRow(rows[i]);
! 
!     addSelectionPaths(paths);
!   }
! 
!   public void addSelectionInterval(int index0, int index1)
!   {
!     TreePath[] paths = getPathBetweenRows(index0, index1);
! 
!     if (paths != null)
!       addSelectionPaths(paths);
!   }
! 
!   public void removeSelectionPath(TreePath path)
!   {
!     selectionModel.removeSelectionPath(path);
!   }
! 
!   public void removeSelectionPaths(TreePath[] paths)
!   {
!     selectionModel.removeSelectionPaths(paths);
!   }
! 
!   public void removeSelectionRow(int row)
!   {
!     TreePath path = getPathForRow(row);
! 
!     if (path != null)
!       selectionModel.removeSelectionPath(path);
!   }
! 
!   public void removeSelectionRows(int[] rows)
!   {
!     // Make sure we have an UI so getPathForRow() does not return null.
!     if (rows == null || getUI() == null)
!       return;
! 
!     TreePath[] paths = new TreePath[rows.length];
! 
!     for (int i = rows.length - 1; i >= 0; --i)
!       paths[i] = getPathForRow(rows[i]);
! 
!     removeSelectionPaths(paths);
!   }
! 
!   public void removeSelectionInterval(int index0, int index1)
!   {
!     TreePath[] paths = getPathBetweenRows(index0, index1);
! 
!     if (paths != null)
!       removeSelectionPaths(paths);
!   }
! 
!   public void clearSelection()
!   {
!     selectionModel.clearSelection();
!   }
!   
!   public TreePath getLeadSelectionPath()
!   {
!     return leadSelectionPath;
!   }
! 
!   /**
!    * @since 1.3
!    */
!   public void setLeadSelectionPath(TreePath path)
!   {
!     if (leadSelectionPath == path)
!       return;
! 
!     TreePath oldValue = leadSelectionPath;
!     leadSelectionPath = path;
!     firePropertyChange(LEAD_SELECTION_PATH_PROPERTY, oldValue, path);
!   }
! 
!   /**
!    * @since 1.3
!    */
!   public TreePath getAnchorSelectionPath()
!   {
!     return anchorSelectionPath;
!   }
! 
!   /**
!    * @since 1.3
!    */
!   public void setAnchorSelectionPath(TreePath path)
!   {
!     if (anchorSelectionPath == path)
!       return;
! 
!     TreePath oldValue = anchorSelectionPath;
!     anchorSelectionPath = path;
!     firePropertyChange(ANCHOR_SELECTION_PATH_PROPERTY, oldValue, path);
!   }
  
+   public int getLeadSelectionRow()
+   {
+     return selectionModel.getLeadSelectionRow();
+   }
  
+   public int getMaxSelectionRow()
+   {
+     return selectionModel.getMaxSelectionRow();
+   }
  
+   public int getMinSelectionRow()
+   {
+     return selectionModel.getMinSelectionRow();
+   }
+ 
+   public int getSelectionCount()
+   {
+     return selectionModel.getSelectionCount();
+   }
+ 
+   public TreePath getSelectionPath()
+   {
+     return selectionModel.getSelectionPath();
+   }
+ 
+   public TreePath[] getSelectionPaths()
+   {
+     return selectionModel.getSelectionPaths();
+   }
+ 
+   public int[] getSelectionRows()
+   {
+     return selectionModel.getSelectionRows();
+   }
+ 
+   public boolean isPathSelected(TreePath path)
+   {
+     return selectionModel.isPathSelected(path);
+   }
+ 
+   public boolean isRowSelected(int row)
+   {
+     return selectionModel.isRowSelected(row);
+   }
+ 
+   public boolean isSelectionEmpty()
+   {
+     return selectionModel.isSelectionEmpty();
+   }
+   
+   /**
+    * Return the value of the <code>dragEnabled</code> property.
+    *
+    * @return the value
+    * 
+    * @since 1.4
+    */
+   public boolean getDragEnabled()
+   {
+     return dragEnabled;
+   }
+ 
+   /**
+    * Set the <code>dragEnabled</code> property.
+    *
+    * @param enabled new value
+    * 
+    * @since 1.4
+    */
+   public void setDragEnabled(boolean enabled)
+   {
+     dragEnabled = enabled;
+   }
+ 
+   public int getRowCount()
+   {
+     TreeUI ui = getUI();
+ 
+     if (ui != null)
+       return ui.getRowCount(this);
+     
+     return 0;
+   }
+   
+   public void collapsePath(TreePath path)
+   {
+     setExpandedState(path, false);
+   }
+   
+   public void collapseRow(int row)
+   {
+     if (row < 0 || row >= getRowCount())
+       return;
+ 
+     TreePath path = getPathForRow(row);
+ 
+     if (path != null)
+       collapsePath(path);
+   }
+ 
+   public void expandPath(TreePath path)
+   {
+     // Don't expand if last path component is a leaf node.
+     if ((path == null)
+         || (treeModel.isLeaf(path.getLastPathComponent())))
+       return;
+ 
+     setExpandedState(path, true);
+   }
+   
+   public void expandRow(int row)
+   {
+     if (row < 0 || row >= getRowCount())
+       return;
+ 
+     TreePath path = getPathForRow(row);
+ 
+     if (path != null)
+       expandPath(path);
+   }
+ 
+   public boolean isCollapsed(TreePath path)
+   {
+     return ! isExpanded(path);
+   }
+ 
+   public boolean isCollapsed(int row)
+   {
+     if (row < 0 || row >= getRowCount())
+       return false;
+ 
+     TreePath path = getPathForRow(row);
+ 
+     if (path != null)
+       return isCollapsed(path);
+ 
+     return false;
+   }
+ 
+   public boolean isExpanded(TreePath path)
+   {
+     if (path == null)
+       return false;
+ 
+     Object state = nodeStates.get(path);
+ 
+     if ((state == null) || (state != EXPANDED))
+       return false;
+ 
+     TreePath parent = path.getParentPath();
+ 
+     if (parent != null)
+       return isExpanded(parent);
+     
+     return true;
+   }
+   
+   public boolean isExpanded(int row)
+   {
+     if (row < 0 || row >= getRowCount())
+       return false;
+ 
+     TreePath path = getPathForRow(row);
+ 
+     if (path != null)
+       return isExpanded(path);
+ 
+     return false;
+   }
+ 
+   /**
+    * @since 1.3
+    */
+   public boolean getExpandsSelectedPaths()
+   {
+     return expandsSelectedPaths;
+   }
+ 
+   /**
+    * @since 1.3
+    */
+   public void setExpandsSelectedPaths(boolean flag)
+   {
+     if (expandsSelectedPaths == flag)
+       return;
+ 
+     boolean oldValue = expandsSelectedPaths;
+     expandsSelectedPaths = flag;
+     firePropertyChange(EXPANDS_SELECTED_PATHS_PROPERTY, oldValue, flag);
+   }
+ 
+   public Rectangle getPathBounds(TreePath path)
+   {
+     TreeUI ui = getUI();
+ 
+     if (ui == null)
+       return null;
+ 
+     return ui.getPathBounds(this, path);
+   }
+ 
+   public Rectangle getRowBounds(int row)
+   {
+     TreePath path = getPathForRow(row);
+ 
+     if (path != null)
+       return getPathBounds(path);
+ 
+     return null;
+   }
+ 
+   public boolean isEditing()
+   {
+     TreeUI ui = getUI();
+ 
+     if (ui != null)
+       return ui.isEditing(this);
+ 
+     return false;
+   }
+ 
+   public boolean stopEditing()
+   {
+     TreeUI ui = getUI();
+ 
+     if (ui != null)
+       return ui.stopEditing(this);
+ 
+    return false;
+   }
+ 
+   public void cancelEditing()
+   {
+     TreeUI ui = getUI();
+ 
+     if (ui != null)
+       ui.cancelEditing(this);
+   }
+ 
+   public void startEditingAtPath(TreePath path)
+   {
+     TreeUI ui = getUI();
+ 
+     if (ui != null)
+       ui.startEditingAtPath(this, path);
+   }
+ 
+   public TreePath getEditingPath()
+   {
+     TreeUI ui = getUI();
+ 
+     if (ui != null)
+       return ui.getEditingPath(this);
+ 
+     return null;
+   }
+ 
+   public TreePath getPathForLocation(int x, int y)
+   {
+     TreePath path = getClosestPathForLocation(x, y);
+ 
+     if (path != null)
+       {
+ 	 Rectangle rect = getPathBounds(path);
+ 
+ 	 if ((rect != null) && rect.contains(x, y))
+ 	   return path;
+       }
+ 
+     return null;
+   }
+ 
+   public int getRowForLocation(int x, int y)
+   {
+     TreePath path = getPathForLocation(x, y);
+ 
+     if (path != null)
+       return getRowForPath(path);
+ 
+     return -1;
+   }
+   
+   public TreePath getClosestPathForLocation(int x, int y)
+   {
+     TreeUI ui = getUI();
+ 
+     if (ui != null)
+       return ui.getClosestPathForLocation(this, x, y);
+     
+     return null;
+   }
+ 
+   public int getClosestRowForLocation(int x, int y)
+   {
+     TreePath path = getClosestPathForLocation(x, y);
+ 
+     if (path != null)
+       return getRowForPath(path);
+ 
+     return -1;
+   }
+ 
+   public Object getLastSelectedPathComponent()
+   {
+     TreePath path = getSelectionPath();
+ 
+     if (path != null)
+       return path.getLastPathComponent();
+ 
+     return null;
+   }
+ 
+   private void checkExpandParents(TreePath path)
+     throws ExpandVetoException
+   {
+     TreePath parent = path.getParentPath();
+ 
+     if (parent != null)
+       checkExpandParents(parent);
+ 
+     fireTreeWillExpand(path);
+   }
+ 
+   private void doExpandParents(TreePath path, boolean state)
+   {
+     TreePath parent = path.getParentPath();
+ 
+     if (isExpanded(parent))
+       return;
+     
+     if (parent != null)
+       doExpandParents(parent, false);
+ 
+     nodeStates.put(path, state ? EXPANDED : COLLAPSED);
+   }
+   
+   protected void setExpandedState(TreePath path, boolean state)
+   {
+     if (path == null)
+       return;
+ 
+     TreePath parent = path.getParentPath();
+ 
+     try
+       {
+ 	while (parent != null)
+ 	  checkExpandParents(parent);
+       }
+     catch (ExpandVetoException e)
+       {
+ 	// Expansion vetoed.
+ 	return;
+       }
+ 
+     doExpandParents(path, state);
+   }
+ 
+   protected void clearToggledPaths()
+   {
+     nodeStates.clear();
+   }
+ 
+   protected Enumeration getDescendantToggledPaths(TreePath parent)
+   {
+     if (parent == null)
+       return null;
+ 
+     Enumeration nodes = nodeStates.keys();
+     Vector result = new Vector();
+ 
+     while (nodes.hasMoreElements())
+       {
+         TreePath path = (TreePath) nodes.nextElement();
+ 
+         if (path.isDescendant(parent))
+           result.addElement(path);
+       }
+     
+     return result.elements();
+   }
+ 
+   public boolean hasBeenExpanded(TreePath path)
+   {
+     if (path == null)
+       return false;
+ 
+     return nodeStates.get(path) != null;
+   }
+ 
+   public boolean isVisible(TreePath path)
+   {
+     if (path == null)
+       return false;
+ 
+     TreePath parent = path.getParentPath();
+ 
+     if (parent == null)
+       return true; // Is root node.
+ 
+     return isExpanded(parent);
+   }
+ 
+   public void makeVisible(TreePath path)
+   {
+     if (path == null)
+       return;
+ 
+     expandPath(path.getParentPath());
+   }
+ 
+   public boolean isPathEditable(TreePath path)
+   {    
+     return isEditable();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JViewport.java gcc-4.0.0/libjava/javax/swing/JViewport.java
*** gcc-3.4.3/libjava/javax/swing/JViewport.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/JViewport.java	Wed Feb 16 20:02:37 2005
***************
*** 1,5 ****
  /* JViewport.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JViewport.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,142 ****
  package javax.swing;
  
  import java.awt.Component;
! import java.awt.Container;
  import java.awt.Graphics;
! import java.awt.Image;
  import java.awt.Point;
  import java.awt.Rectangle;
! import javax.accessibility.Accessible;
  import javax.swing.plaf.ViewportUI;
  
  public class JViewport extends JComponent
  {
!     Component c;
  
!     JViewport()
!     {
! 	setOpaque(true);
! 	updateUI();
!     }
  
!     void setView(Component c)
!     {
! 	if (this.c != null)
! 	    remove(c);
  
! 	this.c = c;
  
! 	add(c);
!     }
  
!     public String getUIClassID()
!     {
! 	return "JViewport";
!     }
  
!     public void updateUI()
!     {
! 	ViewportUI vp = (ViewportUI) UIManager.getUI(this);
! 	setUI(vp);
!     }
  
!     Container GetHeavy(Container parent)
!     {
! 	if (parent == null)
! 	    return null;
  
! 	while (isLightweightComponent(parent))
! 	    {
! 		Container p = parent.getParent();
  
! 		if (p == null)
! 		    {
! 			System.out.println("GetHeavy FAILED, no heavy weight component found");
! 			return parent;
! 		    }
! 		
! 		parent = p;
! 	    }
! 	return parent;
!     }
!     
!     
!     public void paint(Graphics g)
!     {
! 	paintChildren(g);
  
! 	System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXX   JViewport -----> paint()");
  
! 	Container parent = GetHeavy(getParent());
! 	
! 	System.out.println("parent = " + parent + ", " + getParent());
  
! 	//parent.paint();
  
! 	Graphics wg = parent.getGraphics();
! 	
! 	int x = 0;
! 	int y = 0;
! 	int w = getWidth();
! 	int h = getHeight();
  
- 	Rectangle r = new Rectangle(x, y, w, h);
  
! 	int ox = 0;
! 	int oy = 0;
  
! 	wg.copyArea(r.x,
! 		    r.y,
! 		    r.width,
! 		    r.height,
! 		    ox,
! 		    oy);
  
! 	wg.dispose();
!     }
! }
  
  
  
  
  
  
  
--- 39,395 ----
  package javax.swing;
  
  import java.awt.Component;
! import java.awt.Dimension;
  import java.awt.Graphics;
! import java.awt.Insets;
  import java.awt.Point;
  import java.awt.Rectangle;
! 
! import javax.swing.border.Border;
! import javax.swing.event.ChangeEvent;
! import javax.swing.event.ChangeListener;
  import javax.swing.plaf.ViewportUI;
  
+ /**
+  *  
+  * <pre>
+  *                                                     _
+  *   +-------------------------------+    ...........Y1 \
+  *   |  view                         |                .  \
+  *   |  (this component's child)     |                .   > VY
+  *   |                               |                .  / = Y2-Y1
+  *   |         +------------------------------+  ....Y2_/
+  *   |         | viewport            |        |       .
+  *   |         | (this component)    |        |       .
+  *   |         |                     |        |       .
+  *   |         |                     |        |       .
+  *   |         |                     |        |       .
+  *   |         |                     |        |       .
+  *   |         +------------------------------+  ....Y3
+  *   |                               |                .
+  *   |         .                     |        .       .
+  *   |         .                     |        .       .
+  *   +---------.---------------------+    ...........Y4
+  *   .         .                     .        .
+  *   .         .                     .        .
+  *   .         .                     .        .
+  *   X1.......X2.....................X3.......X4
+  *   \____  ___/
+  *        \/
+  *        VX = X2-X1
+  *</pre>
+  *  
+  * <p>A viewport is, like all swing components, located at some position in
+  * the swing component tree; that location is exactly the same as any other
+  * components: the viewport's "bounds".</p>
+  *
+  * <p>But in terms of drawing its child, the viewport thinks of itself as
+  * covering a particular position <em>of the view's coordinate space</em>.
+  * For example, the {@link javax.JViewPort.getViewPosition} method returns
+  * the position <code>(VX,VY)</code> shown above, which is an position in
+  * "view space", even though this is <em>implemented</em> by positioning
+  * the underlying child at position <code>(-VX,-VY)</code></p>
+  *
+  */
  public class JViewport extends JComponent
  {
!   private static final long serialVersionUID = -6925142919680527970L;
!   
!   public static final int SIMPLE_SCROLL_MODE = 0;
!   public static final int BLIT_SCROLL_MODE = 1;
!   public static final int BACKINGSTORE_SCROLL_MODE = 2;
  
!   ChangeEvent changeEvent = new ChangeEvent(this);
  
!   int scrollMode;
  
!   protected boolean scrollUnderway;
!   protected boolean isViewSizeSet;
  
!   /** 
!    * The width and height of the Viewport's area in terms of view
!    * coordinates.  Typically this will be the same as the width and height
!    * of the viewport's bounds, unless the viewport transforms units of
!    * width and height, which it may do, for example if it magnifies or
!    * rotates its view.
!    *
!    * @see #toViewCoordinates
!    */
!   Dimension extentSize;
  
!   /**
!    * The width and height of the view in its own coordinate space.
!    */
  
!   Dimension viewSize;
  
!   Point lastPaintPosition;
  
!   public JViewport()
!   {
!     setOpaque(true);
!     setScrollMode(BLIT_SCROLL_MODE);
!     updateUI();
!   }
  
!   public Dimension getExtentSize()
!   {
!     if (extentSize == null)
!       return toViewCoordinates(getSize());
!     else
!       return extentSize;
!   }
  
!   public Dimension toViewCoordinates(Dimension size)
!   {
!     return size;
!   }
  
!   public Point toViewCoordinates(Point p)
!   {
!     Point pos = getViewPosition();
!     return new Point(p.x + pos.x,
!                      p.y + pos.y);
!   }
  
!   public void setExtentSize(Dimension newSize)
!   {
!     extentSize = newSize;
!     fireStateChanged();
!   }
  
!   /**
!    * Returns the viewSize when set, or the preferred size of the set
!    * Component view.  If no viewSize and no Component view is set an
!    * empty Dimension is returned.
!    */
!   public Dimension getViewSize()
!   {
!     if (isViewSizeSet)
!       return viewSize;
!     else
!       {
! 	Component view = getView();
! 	if (view != null)
! 	  return view.getPreferredSize();
! 	else
! 	  return new Dimension();
!       }
!   }
  
  
!   public void setViewSize(Dimension newSize)
!   {
!     viewSize = newSize;
!     Component view = getView();
!     if (view != null)
!       view.setSize(viewSize);
!     isViewSizeSet = true;
!     fireStateChanged();
!   }
  
!   /**
!    * Get the viewport's position in view space. Despite confusing name,
!    * this really does return the viewport's (0,0) position in view space,
!    * not the view's position.
!    */
  
!   public Point getViewPosition()
!   {
!     Component view = getView();
!     if (view == null)
!       return new Point(0,0);
!     else
!       {
!         Point p = view.getLocation();
!         p.x = -p.x;
!         p.y = -p.y;
!         return p;
!       }
!   }
  
+   public void setViewPosition(Point p)
+   {
+     Component view = getView();
+     if (view != null)
+       {
+         Point q = new Point(-p.x, -p.y);
+         view.setLocation(q);
+         fireStateChanged();
+       }
+   }
  
+   public Rectangle getViewRect()
+   {
+     return new Rectangle(getViewPosition(), 
+                          getExtentSize());
+   }
  
+   /**
+    * @deprecated 1.4
+    */
+   public boolean isBackingStoreEnabled()
+   {
+     return scrollMode == BACKINGSTORE_SCROLL_MODE;
+   }
  
+   /**
+    * @deprecated 1.4
+    */
+   public void setBackingStoreEnabled(boolean b)
+   {
+     if (b && scrollMode != BACKINGSTORE_SCROLL_MODE)
+       {
+         scrollMode = BACKINGSTORE_SCROLL_MODE;
+         fireStateChanged();
+       }
+   }
  
+   public void setScrollMode(int mode)
+   {
+     scrollMode = mode;
+     fireStateChanged();
+   }
  
+   public int getScrollMode()
+   {
+     return scrollMode;
+   }
  
+   public Component getView()
+   {
+     if (getComponentCount() == 0)
+       return null;
+   
+     return getComponents()[0];
+   }
+ 
+   public void setView(Component v)
+   {
+     while (getComponentCount() > 0)
+       remove(0);
+     if (v != null)
+       {
+         add(v);
+         fireStateChanged();
+       }
+   }
+ 
+   public void revalidate()
+   {
+     fireStateChanged();
+     super.revalidate();
+   }
+ 
+   public void reshape(int x, int y, int w, int h)
+   {
+     boolean changed = 
+       (x != getX()) 
+       || (y != getY()) 
+       || (w != getWidth())
+       || (h != getHeight());
+     super.reshape(x, y, w, h);
+     if (changed)
+       fireStateChanged();
+   }
+     
+   protected void addImpl(Component comp, Object constraints, int index)
+   {
+     if (getComponentCount() > 0)
+       remove(getComponents()[0]);
+     
+     super.addImpl(comp, constraints, index);
+   }
+ 
+   public final Insets getInsets() 
+   {
+     return new Insets(0,0,0,0);
+   }
+ 
+   public final Insets getInsets(Insets insets)
+   {
+     if (insets == null)
+       return getInsets();
+     insets.top = 0;
+     insets.bottom = 0;
+     insets.left = 0;
+     insets.right = 0;
+     return insets;
+   }
+     
+   public boolean isOptimizedDrawingEnabled()
+   {
+     return false;
+   }
+ 
+   public void paint(Graphics g)
+   {
+     paintComponent(g);
+   }
+ 
+   public void addChangeListener(ChangeListener listener)
+   {
+     listenerList.add(ChangeListener.class, listener);
+   }
+ 
+   public void removeChangeListener(ChangeListener listener)
+   {
+     listenerList.remove(ChangeListener.class, listener);
+   }
+ 
+   public ChangeListener[] getChangeListeners() 
+   {
+     return (ChangeListener[]) getListeners(ChangeListener.class);
+   }
+ 
+   protected void fireStateChanged()
+   {
+     ChangeListener[] listeners = getChangeListeners();
+     for (int i = 0; i < listeners.length; ++i)
+       listeners[i].stateChanged(changeEvent);
+   }
+ 
+   /**
+    * This method returns the String ID of the UI class of  Separator.
+    *
+    * @return The UI class' String ID.
+    */
+   public String getUIClassID()
+   {
+     return "ViewportUI";
+   }
+ 
+   /**
+    * This method resets the UI used to the Look and Feel defaults..
+    */
+   public void updateUI()
+   {
+     setUI((ViewportUI) UIManager.getUI(this));
+   }            
+ 
+   /**
+    * This method returns the viewport's UI delegate.
+    *
+    * @return The viewport's UI delegate.
+    */
+   public ViewportUI getUI()
+   {
+     return (ViewportUI) ui;
+   }
+ 
+   /**
+    * This method sets the viewport's UI delegate.
+    *
+    * @param ui The viewport's UI delegate.
+    */
+   public void setUI(ViewportUI ui)
+   {
+     super.setUI(ui);
+   }
+ 
+   public final void setBorder(Border border)
+   {
+     if (border != null)
+       throw new IllegalArgumentException();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/JWindow.java gcc-4.0.0/libjava/javax/swing/JWindow.java
*** gcc-3.4.3/libjava/javax/swing/JWindow.java	Fri Jun 27 12:41:52 2003
--- gcc-4.0.0/libjava/javax/swing/JWindow.java	Wed Feb 16 20:02:38 2005
***************
*** 1,5 ****
  /* JWindow.java --
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* JWindow.java --
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.GraphicsConfiguration;
*** 48,54 ****
  import java.awt.LayoutManager;
  import java.awt.Window;
  import java.awt.event.KeyEvent;
! import java.awt.event.WindowEvent;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  
--- 48,54 ----
  import java.awt.LayoutManager;
  import java.awt.Window;
  import java.awt.event.KeyEvent;
! 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  
*************** import javax.accessibility.AccessibleCon
*** 58,246 ****
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
! public class JWindow extends Window implements Accessible
  {
!     public final static int HIDE_ON_CLOSE        = 0;
!     public final static int EXIT_ON_CLOSE        = 1;
!     public final static int DISPOSE_ON_CLOSE     = 2;
!     public final static int DO_NOTHING_ON_CLOSE  = 3;
  
!     protected  AccessibleContext accessibleContext;
  
!     private int close_action = EXIT_ON_CLOSE;    
!     
!     
!     /***************************************************
!      *
!      *
!      *  constructors
!      *
!      *
!      *************/
  
!     public JWindow()
!     {
!       this(null);
!     }
  
!     // huuu ?
!     public JWindow(Frame f)
!     {
! 	super(f);
!     }
!     
!     /***************************************************
!      *
!      *
!      *  methods, this part is shared with JDialog, JFrame
!      *
!      *
!      *************/
  
!   
!     private boolean checking;
!     protected  JRootPane         rootPane;
  
-     
-     protected  void frameInit()
-     {
-       super.setLayout(new BorderLayout(1, 1));
-       getRootPane(); // will do set/create
-     }
-   
    public Dimension getPreferredSize()
    {
!     Dimension d = super.getPreferredSize();
!     return d;
    }
  
!     JMenuBar getJMenuBar()
!     {    return getRootPane().getJMenuBar();   }
!     
!     void setJMenuBar(JMenuBar menubar)
!     {    getRootPane().setJMenuBar(menubar); }
!     
! 
!   public  void setLayout(LayoutManager manager)
!   {    super.setLayout(manager);  }
  
!     void setLayeredPane(JLayeredPane layeredPane) 
!     {   getRootPane().setLayeredPane(layeredPane);   }
!   
!     JLayeredPane getLayeredPane()
!     {   return getRootPane().getLayeredPane();     }
!   
!     JRootPane getRootPane()
!     {
! 	if (rootPane == null)
! 	    setRootPane(createRootPane());
! 	return rootPane;          
!     }
  
!     void setRootPane(JRootPane root)
!     {
! 	if (rootPane != null)
! 	    remove(rootPane);
! 	    
! 	rootPane = root; 
! 	add(rootPane, BorderLayout.CENTER);
!     }
  
!     JRootPane createRootPane()
!     {   return new JRootPane();    }
  
!     Container getContentPane()
!     {    return getRootPane().getContentPane();     }
  
!     void setContentPane(Container contentPane)
!     {    getRootPane().setContentPane(contentPane);    }
!   
!     Component getGlassPane()
!     {    return getRootPane().getGlassPane();   }
!   
!     void setGlassPane(Component glassPane)
!     {   getRootPane().setGlassPane(glassPane);   }
  
!     
!     protected  void addImpl(Component comp, Object constraints, int index)
!     {	super.addImpl(comp, constraints, index);    }
  
  
!     public void remove(Component comp)
!     {   getContentPane().remove(comp);  }
!   
!     protected  boolean isRootPaneCheckingEnabled()
!     {    return checking;        }
  
  
!     protected  void setRootPaneCheckingEnabled(boolean enabled)
!     { checking = enabled;  }
  
  
!     public void update(Graphics g)
!     {   paint(g);  }
  
!     protected  void processKeyEvent(KeyEvent e)
!     {	super.processKeyEvent(e);    }
  
!     /////////////////////////////////////////////////////////////////////////////////
!   
!     public AccessibleContext getAccessibleContext()
!     {    return null;  }
!   
!     int getDefaultCloseOperation()
!     {    return close_action;   }    
!     
!     protected  String paramString()
!     {   return "JWindow";     }
  
  
!     protected  void processWindowEvent(WindowEvent e)
!     {
! 	//	System.out.println("PROCESS_WIN_EV-1: " + e);
! 	super.processWindowEvent(e); 
! 	//	System.out.println("PROCESS_WIN_EV-2: " + e);
! 	switch (e.getID())
! 	    {
! 	    case WindowEvent.WINDOW_CLOSING:
! 		{
! 		    switch(close_action)
! 			{
! 			case EXIT_ON_CLOSE:
! 			    {
! 				System.out.println("user requested exit on close");
! 				System.exit(1);
! 				break;
! 			    }
! 			case DISPOSE_ON_CLOSE:
! 			    {
! 				System.out.println("user requested dispose on close");
! 				dispose();
! 				break;
! 			    }
! 			case HIDE_ON_CLOSE:
! 			    {
! 				setVisible(false);
! 				break;
! 			    }
! 			case DO_NOTHING_ON_CLOSE:
! 			    break;
! 			}
! 		    break;
! 		}
! 		
! 	    case WindowEvent.WINDOW_CLOSED:
! 	    case WindowEvent.WINDOW_OPENED:
! 	    case WindowEvent.WINDOW_ICONIFIED:
! 	    case WindowEvent.WINDOW_DEICONIFIED:
! 	    case WindowEvent.WINDOW_ACTIVATED:
! 	    case WindowEvent.WINDOW_DEACTIVATED:
! 		break;
! 	    }
!     }   
!  
  
!     void setDefaultCloseOperation(int operation)
!     {  close_action = operation;   }
  
  }
--- 58,205 ----
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
! public class JWindow extends Window implements Accessible, RootPaneContainer
  {
!   private static final long serialVersionUID = 5420698392125238833L;
!   
!   protected JRootPane rootPane;
!   protected boolean rootPaneCheckingEnabled;
!   protected AccessibleContext accessibleContext;
  
!   public JWindow()
!   {
!     super(SwingUtilities.getOwnerFrame());
!     windowInit();
!   }
  
!   public JWindow(GraphicsConfiguration gc)
!   {
!     super(SwingUtilities.getOwnerFrame(), gc);
!     windowInit();
!   }
!   
!   public JWindow(Frame owner)
!   {
!     super(owner);
!     windowInit();
!   }
  
!   public JWindow(Window owner)
!   {
!     super(owner);
!     windowInit();
!   }
  
!   public JWindow(Window owner, GraphicsConfiguration gc)
!   {
!     super(owner, gc);
!     windowInit();
!   }
  
!   protected void windowInit()
!   {
!     super.setLayout(new BorderLayout(1, 1));
!     getRootPane(); // will do set/create
!   }
  
    public Dimension getPreferredSize()
    {
!     return super.getPreferredSize();
    }
  
!   public void setLayout(LayoutManager manager)
!   {
!     super.setLayout(manager);
!   }
  
!   public void setLayeredPane(JLayeredPane layeredPane)
!   {
!     getRootPane().setLayeredPane(layeredPane);
!   }
  
!   public JLayeredPane getLayeredPane()
!   {
!     return getRootPane().getLayeredPane();
!   }
  
!   public JRootPane getRootPane()
!   {
!     if (rootPane == null)
!       setRootPane(createRootPane());
!     return rootPane;
!   }
  
!   protected void setRootPane(JRootPane root)
!   {
!     if (rootPane != null)
!       remove(rootPane);
  
!     rootPane = root;
!     add(rootPane, BorderLayout.CENTER);
!   }
  
!   protected JRootPane createRootPane()
!   {
!     return new JRootPane();
!   }
  
+   public Container getContentPane()
+   {
+     return getRootPane().getContentPane();
+   }
  
!   public void setContentPane(Container contentPane)
!   {
!     getRootPane().setContentPane(contentPane);
!   }
  
+   public Component getGlassPane()
+   {
+     return getRootPane().getGlassPane();
+   }
  
!   public void setGlassPane(Component glassPane)
!   {
!     getRootPane().setGlassPane(glassPane);
!   }
  
+   protected void addImpl(Component comp, Object constraints, int index)
+   {
+     super.addImpl(comp, constraints, index);
+   }
  
!   public void remove(Component comp)
!   {
!     getContentPane().remove(comp);
!   }
  
!   protected boolean isRootPaneCheckingEnabled()
!   {
!     return rootPaneCheckingEnabled;
!   }
  
!   protected void setRootPaneCheckingEnabled(boolean enabled)
!   {
!     rootPaneCheckingEnabled = enabled;
!   }
  
+   public void update(Graphics g)
+   {
+     paint(g);
+   }
  
!   protected void processKeyEvent(KeyEvent e)
!   {
!     super.processKeyEvent(e);
!   }
  
!   public AccessibleContext getAccessibleContext()
!   {
!     return null;
!   }
  
+   protected String paramString()
+   {
+     return "JWindow";
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/KeyStroke.java gcc-4.0.0/libjava/javax/swing/KeyStroke.java
*** gcc-3.4.3/libjava/javax/swing/KeyStroke.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/KeyStroke.java	Wed Feb 16 20:02:38 2005
***************
*** 1,5 ****
  /* KeyStroke.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* KeyStroke.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,271 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.AWTKeyStroke;
  import java.awt.event.KeyEvent;
  import java.io.Serializable;
  
! /**
!  * KeyStroke
!  * @author	Andrew Selkirk
!  * @version	1.0
!  */
! public class KeyStroke implements Serializable
  {
!   static final long serialVersionUID = -9060180771037902530L;
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * keyChar
! 	 */
! 	private	char	keyChar			= 0;
! 
! 	/**
! 	 * keyCode
! 	 */
! 	private	int		keyCode			= 0;
! 
! 	/**
! 	 * modifiers
! 	 */
! 	private	int		modifiers		= 0;
! 
! 	/**
! 	 * onKeyRelease
! 	 */
! 	private	boolean	onKeyRelease	= false;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor KeyStroke
! 	 */
! 	private KeyStroke() {
! 	} // KeyStroke()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * hashCode
! 	 * @returns int
! 	 */
! 	public int hashCode() {
! 		return 0; // TODO
! 	} // hashCode()
! 
! 	/**
! 	 * equals
! 	 * @param object TODO
! 	 * @returns boolean
! 	 */
! 	public boolean equals(Object object) {
! 
! 		// Variables
! 		KeyStroke	key;
! 
! 		if (object instanceof KeyStroke) {
! 			key = (KeyStroke) object;
! 			if (key.keyChar == keyChar &&
! 				key.keyCode == keyCode &&
! 				key.modifiers == modifiers &&
! 				key.onKeyRelease == onKeyRelease) {
! 				return true;
! 			} // if
! 		} // if
! 		return false;
! 
! 	} // equals()
! 
! 	/**
! 	 * toString
! 	 * @returns String
! 	 */
! 	public String toString() {
! 		return null; // TODO
! 	} // toString()
! 
! 	/**
! 	 * getKeyStroke
! 	 * @param keyChar TODO
! 	 * @returns KeyStroke
! 	 */
! 	public static KeyStroke getKeyStroke(char keyChar) {
! 
! 		// Variables
! 		KeyStroke	key;
! 
! 		key = new KeyStroke();
! 		key.keyChar = keyChar;
! 		return key;
! 
! 	} // getKeyStroke()
! 
! 	/**
! 	 * getKeyStroke - deprecated
! 	 * @param keyChar TODO
! 	 * @param onKeyRelease TODO
! 	 * @returns KeyStroke
! 	 */
! 	public static KeyStroke getKeyStroke(char keyChar, boolean onKeyRelease) {
! 		KeyStroke key = getKeyStroke(keyChar);
! 		key.onKeyRelease = onKeyRelease;
! 		return key;
! 	} // getKeyStroke()
! 
! 	/**
! 	 * getKeyStroke
! 	 * @param keyChar TODO
! 	 * @param modifiers TODO
! 	 * @returns KeyStroke
! 	 */
! 	public static KeyStroke getKeyStroke(Character keyChar, int modifiers) {
! 		KeyStroke key = getKeyStroke(keyChar.charValue());
! 		key.modifiers = modifiers;
! 		return key;
! 	} // getKeyStroke()
! 
! 	/**
! 	 * getKeyStroke
! 	 * @param keyCode TODO
! 	 * @param modifiers TODO
! 	 * @param onKeyRelease TODO
! 	 * @returns KeyStroke
! 	 */
! 	public static KeyStroke getKeyStroke(int keyCode, int modifiers, 
! 				boolean onKeyRelease) {
! 
! 		// Variables
! 		KeyStroke	key;
! 
! 		key = new KeyStroke();
! 		key.keyCode = keyCode;
! 		key.modifiers = modifiers;
! 		key.onKeyRelease = onKeyRelease;
! 		return key;
! 
! 	} // getKeyStroke()
! 
! 	/**
! 	 * getKeyStroke
! 	 * @param keyCode TODO
! 	 * @param modifiers TODO
! 	 * @returns KeyStroke
! 	 */
! 	public static KeyStroke getKeyStroke(int keyCode, int modifiers) {
! 		return getKeyStroke(keyCode, modifiers, false);
! 	} // getKeyStroke()
! 
! 	/**
! 	 * getKeyStroke
! 	 * @param string TODO
! 	 * @returns KeyStroke
! 	 */
! 	public static KeyStroke getKeyStroke(String string) {
! 		return null; // TODO
! 	} // getKeyStroke()
! 
! 	/**
! 	 * getKeyStrokeForEvent
! 	 * @param event TODO
! 	 * @returns KeyStroke
! 	 */
! 	public static KeyStroke getKeyStrokeForEvent(KeyEvent event) {
! 
! 		// Variables
! 		int	eventID;
! 		int	eventMod;
! 
! 		// Get Event ID
! 		eventID = event.getID();
! 		eventMod = event.getModifiers();
  
! 		// Check for KEY_TYPED event
! 		if (eventID == KeyEvent.KEY_TYPED) {
! 			return getKeyStroke(event.getKeyChar(), eventMod);
  
! 		// KEY_PRESSED or KEY_RELEASED event
! 		} else {
! 			return getKeyStroke(event.getKeyCode(), eventMod);
! 		} // if
  
! 	} // getKeyStrokeForEvent()
  
! 	/**
! 	 * getKeyChar
! 	 * @returns char
! 	 */
! 	public char getKeyChar() {
! 		return keyChar;
! 	} // getKeyChar()
  
! 	/**
! 	 * getKeyCode
! 	 * @returns int
! 	 */
! 	public int getKeyCode() {
! 		return keyCode;
! 	} // getKeyCode()
  
! 	/**
! 	 * getModifiers
! 	 * @returns int
! 	 */
! 	public int getModifiers() {
! 		return modifiers; // TODO
! 	} // getModifiers()
  
! 	/**
! 	 * isOnKeyRelease
! 	 * @returns boolean
! 	 */
! 	public boolean isOnKeyRelease() {
! 		return onKeyRelease;
! 	} // isOnKeyRelease()
  
  
! } // KeyStroke
--- 35,122 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.AWTKeyStroke;
  import java.awt.event.KeyEvent;
  import java.io.Serializable;
  
! public class KeyStroke 
!   extends AWTKeyStroke
!   implements Serializable
  {
!   private static final long serialVersionUID = -9060180771037902530L;
!   
!   // Called by java.awt.AWTKeyStroke.registerSubclass via reflection.
!   private KeyStroke()
!   {
!   }
!   
!   private KeyStroke(char keyChar, int keyCode, int modifiers,
!                     boolean onKeyRelease)
!   {
!     super(keyChar, keyCode, modifiers, onKeyRelease);
!   }
  
!   static
!   {
!     AWTKeyStroke.registerSubclass(KeyStroke.class);
!   }
  
!   public static KeyStroke getKeyStroke(char keyChar) 
!   {
!     return (KeyStroke) getAWTKeyStroke(keyChar);
!   }
  
!   /** 
!    * @deprecated Use {@link #getKeyStroke(char)}
!    *
!    * This method, unlike all the other factory methods on this object,
!    * returns a non-cached, non-shared object. New code should not use it.
!    */
!   public static KeyStroke getKeyStroke(char keyChar, boolean onKeyRelease) 
!   {
!     return new KeyStroke(keyChar, KeyEvent.VK_UNDEFINED, 0, onKeyRelease);
!   }
  
!   public static KeyStroke getKeyStroke(Character keyChar, int modifiers) 
!   {
!     return (KeyStroke) getAWTKeyStroke(keyChar, modifiers);
!   }
  
!   public static KeyStroke getKeyStroke(int keyCode, int modifiers, 
!                                        boolean onKeyRelease) 
!   {
!     return (KeyStroke) getAWTKeyStroke(keyCode, modifiers, onKeyRelease);
!   }
  
!   public static KeyStroke getKeyStroke(int keyCode, int modifiers) 
!   {
!     return (KeyStroke) getAWTKeyStroke(keyCode, modifiers);
!   }
  
!   /**
!    * Returns the KeyStroke according to <code>getAWTKeyStroke()</code>.
!    * But it returns null instead of throwing
!    * <code>IllegalArugmentException</code> when
!    * the keystoke sequence cannot be parsed from the given string.
!    */
!   public static KeyStroke getKeyStroke(String str) 
!   {
!     try
!       {
! 	return (KeyStroke) getAWTKeyStroke(str);
!       }
!     catch (IllegalArgumentException iae)
!       {
! 	return null;
!       }
!   }
  
+   public static KeyStroke getKeyStrokeForEvent(KeyEvent event) 
+   {
+     return (KeyStroke) getAWTKeyStrokeForEvent(event);
+   }
  
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/LayoutFocusTraversalPolicy.java gcc-4.0.0/libjava/javax/swing/LayoutFocusTraversalPolicy.java
*** gcc-3.4.3/libjava/javax/swing/LayoutFocusTraversalPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/LayoutFocusTraversalPolicy.java	Wed Feb 16 20:02:38 2005
***************
*** 0 ****
--- 1,87 ----
+ /* LayoutFocusTraversalPolicy.java --
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.awt.Component;
+ import java.io.Serializable;
+ import java.util.Comparator;
+ 
+ /**
+  * @author Graydon Hoare
+  * @author Michael Koch
+  * 
+  * @since 1.4
+  */
+ public class LayoutFocusTraversalPolicy 
+   extends SortingFocusTraversalPolicy
+   implements Serializable
+ {
+   private static class LayoutComparator
+     implements Comparator
+   {
+     public LayoutComparator()
+     {
+       // Do nothing here.
+     }
+     
+     public int compare(Object o1, Object o2)
+     {
+       Component comp1 = (Component) o1;
+       Component comp2 = (Component) o2;
+ 
+       int x1 = comp1.getX();
+       int y1 = comp1.getY();
+       int x2 = comp2.getX();
+       int y2 = comp2.getY();
+       
+       if (x1 == x2 && y1 == y2)
+ 	return 0;
+       
+       if ((y1 < y2) || ((y1 == y2) && (x1 < x2)))
+ 	return -1;
+ 
+       return 1;
+     }
+   }
+   
+   public LayoutFocusTraversalPolicy()
+   {
+     super(new LayoutComparator());
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ListModel.java gcc-4.0.0/libjava/javax/swing/ListModel.java
*** gcc-3.4.3/libjava/javax/swing/ListModel.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/ListModel.java	Tue Nov 30 23:58:58 2004
***************
*** 1,4 ****
! /* ListModel.java -- 
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* ListModel.java --
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** package javax.swing;
*** 39,48 ****
  
  import javax.swing.event.ListDataListener;
  
  public interface ListModel
! {    
    int getSize();
    Object getElementAt(int index);
    void addListDataListener(ListDataListener l);
    void removeListDataListener(ListDataListener l);
  }
--- 39,81 ----
  
  import javax.swing.event.ListDataListener;
  
+ /**
+  * This is an interface to general list-like data, typically used as the
+  * model object of a {@link JList} component.
+  *
+  * @author Graydon Hoare (graydon@redhat.com)
+  */
  public interface ListModel
! {
!   /**
!    * Return the number of data elements in the list.
!    *
!    * @return The number of data elements in the list
!    */
    int getSize();
+ 
+   /**
+    * Retrieves a data element at a specified index.
+    *
+    * @param index The index of the element to retrieve
+    *
+    * @return The data element at the specified index
+    */
    Object getElementAt(int index);
+ 
+   /**
+    * Add a listener object to this model. The listener will be called
+    * any time the set of elements in the model is changed.
+    *
+    * @param l The listener to add
+    */
    void addListDataListener(ListDataListener l);
+ 
+   /**
+    * Add a listener object to this model. The listener will no longer be
+    * called when the set of elements in the model is changed.
+    *
+    * @param l The listener to remove
+    */
    void removeListDataListener(ListDataListener l);
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ListSelectionModel.java gcc-4.0.0/libjava/javax/swing/ListSelectionModel.java
*** gcc-3.4.3/libjava/javax/swing/ListSelectionModel.java	Sun Oct 12 13:20:49 2003
--- gcc-4.0.0/libjava/javax/swing/ListSelectionModel.java	Wed Mar 17 21:28:59 2004
*************** import javax.swing.event.ListSelectionLi
*** 42,65 ****
  
  public interface ListSelectionModel
  {
!     int SINGLE_SELECTION = 0;
!     int SINGLE_INTERVAL_SELECTION = 1;
!     int MULTIPLE_INTERVAL_SELECTION = 1;
! 
!     void setSelectionMode(int a);
!     int getSelectionMode();
  
!     void clearSelection();
      
!     int getMinSelectionIndex();
!     int getMaxSelectionIndex();
!     boolean isSelectedIndex(int a);
  
!     void setSelectionInterval(int index0, int index1);
  
!     
  
!     void addListSelectionListener(ListSelectionListener listener);
!     void removeListSelectionListener(ListSelectionListener listener);    
  
  }
--- 42,82 ----
  
  public interface ListSelectionModel
  {
!   int SINGLE_SELECTION = 0;
!   int SINGLE_INTERVAL_SELECTION = 1;
!   int MULTIPLE_INTERVAL_SELECTION = 2;
  
!   void setSelectionMode(int a);
!   int getSelectionMode();
!   
!   void clearSelection();
      
!   int getMinSelectionIndex();
!   int getMaxSelectionIndex();
  
!   boolean isSelectedIndex(int a);
  
!   boolean isSelectionEmpty();
!   void setSelectionInterval(int index0, int index1);
!   void addSelectionInterval(int index0,
!                             int index1);
!   void removeSelectionInterval(int index0,
!                                int index1);
!   void insertIndexInterval(int index,
!                            int length,
!                            boolean before);
!   void removeIndexInterval(int index0,
!                            int index1);
  
!   int getAnchorSelectionIndex();
!   void setAnchorSelectionIndex(int index);
!   int getLeadSelectionIndex();
!   void setLeadSelectionIndex(int index);
! 
!   void setValueIsAdjusting(boolean valueIsAdjusting);
!   boolean getValueIsAdjusting();
! 
!   void addListSelectionListener(ListSelectionListener listener);
!   void removeListSelectionListener(ListSelectionListener listener);    
  
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/LookAndFeel.java gcc-4.0.0/libjava/javax/swing/LookAndFeel.java
*** gcc-3.4.3/libjava/javax/swing/LookAndFeel.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/LookAndFeel.java	Wed Feb 16 20:02:39 2005
***************
*** 1,5 ****
! /* LookAndFeel.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* LookAndFeel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,127 ****
  package javax.swing;
  
  import java.awt.Component;
  import javax.swing.text.JTextComponent;
  
  public abstract class LookAndFeel
  {
!     public UIDefaults getDefaults()
!     {
! 	//This method is called once by UIManager.setLookAndFeel to create the look and feel specific defaults table.
! 	return null;
!     }
! 
!     public abstract  String getDescription();  
!     public abstract  String getID();
!     public abstract  String getName();
  
!     public void initialize()
!     {
! 	//UIManager.setLookAndFeel calls this method before the first call (and typically the only call) to getDefaults(). 
!     }
  
!     static void installBorder(JComponent c, String defaultBorderName)
!     {
! 	//Convenience method for installing a component's default Border object on the specified component if either the border is currently null or already an instance of UIResource. 
!     }
  
!     public static void installColors(JComponent c, String defaultBgName, String defaultFgName)
!     {
! 	//Convenience method for initializing a component's foreground and background color properties with values from the current defaults table. 
!     }
  
!     public static void installColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)
!     {
! 	//Convenience method for initializing a components foreground background and font properties with values from the current defaults table. 
!     }
    
!     public abstract  boolean isNativeLookAndFeel();
!     public abstract  boolean isSupportedLookAndFeel();
  
!     public static void loadKeyBindings(InputMap retMap, Object[] keys)
!     {
! 	//Loads the bindings in keys into retMap. 
!     }
  
!     public static ComponentInputMap makeComponentInputMap(JComponent c, Object[] keys)
!     {
! 	//    Creates a ComponentInputMap from keys. 
! 	return null;
!     }  
  
!     public static Object makeIcon(Class baseClass, String gifFile)
!     {
! 	//Utility method that creates a UIDefaults.LazyValue that creates an ImageIcon UIResource for the specified gifFile filename. 
! 	return null;
!     }
!   
!     public static InputMap makeInputMap(Object[] keys)
!     {
! 	//Creates a InputMap from keys. 
! 	return null;
!     }
  
!     public static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
!     {
! 	//        Convenience method for building lists of KeyBindings.  
! 	return null;
!     }
  
!   
!     public String toString()
!     {
! 	//Returns a string that displays and identifies this object's properties. 
! 	return "LookAndFeel";
!     }
!   
!     public void uninitialize()
!     {
! 	//UIManager.setLookAndFeel calls this method just before we're replaced by a new default look and feel. 
!     }
  
!   
!     public static void uninstallBorder(JComponent c)
!     {
! 	//Convenience method for un-installing a component's default border on the specified component if the border is currently an instance of UIResource.
!     }
  
! }
  
--- 39,203 ----
  package javax.swing;
  
  import java.awt.Component;
+ import java.awt.Toolkit;
+ 
  import javax.swing.text.JTextComponent;
  
  public abstract class LookAndFeel
  {
!   /**
!    * This method is called once by UIManager.setLookAndFeel to create
!    * the look and feel specific defaults table.
!    *
!    * @return the UI defaults
!    */
!   public UIDefaults getDefaults()
!   {
!     return null;
!   }
  
!   public abstract String getDescription();
  
!   public static Object getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
!   {
!     Object value = Toolkit.getDefaultToolkit().getDesktopProperty(systemPropertyName);
!     return value != null ? value : fallbackValue;
!   }
!   
!   public abstract String getID();
  
!   public abstract String getName();
  
!   /**
!    * Returns true when the Look and Feel supports window decorations,
!    * false others. This method returns always false and needs to be overwritten
!    * when the derived Look and Feel supports this.
!    *
!    * @return false
!    *
!    * @since 1.4
!    */
!   public boolean getSupportsWindowDecorations()
!   {
!     return false;
!   }
    
!   /**
!    * UIManager.setLookAndFeel calls this method before the first call
!    * (and typically the only call) to getDefaults(). 
!    */
!   public void initialize()
!   {
!   }
  
!   /**
!    * Convenience method for installing a component's default Border object
!    * on the specified component if either the border is currently null
!    * or already an instance of UIResource. 
!    */
!   public static void installBorder(JComponent c, String defaultBorderName)
!   {
!   }
  
!   /**
!    * Convenience method for initializing a component's foreground and
!    * background color properties with values from the current defaults table.
!    */
!   public static void installColors(JComponent c, String defaultBgName, String defaultFgName)
!   {
!   }
  
!   /**
!    * Convenience method for initializing a components foreground background
!    * and font properties with values from the current defaults table. 
!    */
!   public static void installColorsAndFont(JComponent component,
! 					  String defaultBgName,
! 					  String defaultFgName,
! 					  String defaultFontName)
!   {
!   }
  
!   public abstract boolean isNativeLookAndFeel();
  
!   public abstract boolean isSupportedLookAndFeel();
  
!   /**
!    * Loads the bindings in keys into retMap. 
!    */
!   public static void loadKeyBindings(InputMap retMap, Object[] keys)
!   {
!   }
  
!   /**
!    * Creates a ComponentInputMap from keys. 
!    */
!   public static ComponentInputMap makeComponentInputMap(JComponent c,
! 							Object[] keys)
!   {
!     return null;
!   }
! 
!   /**
!    * Utility method that creates a UIDefaults.LazyValue that creates an
!    * ImageIcon UIResource for the specified gifFile filename. 
!    */
!   public static Object makeIcon(Class baseClass, String gifFile)
!   {
!     return null;
!   }
  
+   /**
+    * Creates a InputMap from keys. 
+    */
+   public static InputMap makeInputMap(Object[] keys)
+   {
+     return null;
+   }
+ 
+   /**
+    * Convenience method for building lists of KeyBindings.  
+    */
+   public static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
+   {
+     return null;
+   }
+ 
+   /**
+    * Invoked when the user attempts an invalid operation. The default implement
+    * just beeps. Subclasses that wish to change this need to override this
+    * method.
+    *
+    * @param component the component the error occured in
+    */
+   public void provideErrorFeedback(Component component)
+   {
+     Toolkit.getDefaultToolkit().beep();
+   }
+ 
+   /**
+    * Returns a string that displays and identifies this object's properties.
+    *
+    * @return the string "LookAndFeel"
+    */
+   public String toString()
+   {
+     return "LookAndFeel";
+   }
+ 
+   /**
+    * UIManager.setLookAndFeel calls this method just before we're replaced by
+    * a new default look and feel. 
+    */
+   public void uninitialize()
+   {
+   }
+ 
+   /**
+    * Convenience method for un-installing a component's default border on the
+    * specified component if the border is currently an instance of UIResource.
+    */
+   public static void uninstallBorder(JComponent c)
+   {
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/MenuSelectionManager.java gcc-4.0.0/libjava/javax/swing/MenuSelectionManager.java
*** gcc-3.4.3/libjava/javax/swing/MenuSelectionManager.java	Thu Jun 19 16:30:09 2003
--- gcc-4.0.0/libjava/javax/swing/MenuSelectionManager.java	Wed Feb 16 20:02:39 2005
***************
*** 1,5 ****
! /* MenuSelectionManager.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* MenuSelectionManager.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,76 ****
  
  package javax.swing;
  
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
  public class MenuSelectionManager
  {
!   protected ChangeEvent changeEvent;
!   
!   protected EventListenerList listenerList = new EventListenerList ();
  
!   protected void fireStateChanged ()
    {
!     ChangeListener[] listeners = getChangeListeners ();
  
      for (int i = 0; i < listeners.length; i++)
        {
!         listeners [i].stateChanged (new ChangeEvent (this));
        }
    }
  
!   public void addChangeListener (ChangeListener listener)
    {
!     listenerList.add (ChangeListener.class, listener);
    }
  
!   public void removeChangeListener (ChangeListener listener)
    {
!     listenerList.remove (ChangeListener.class, listener);
    }
  
!   /** @since 1.4 */
!   public ChangeListener[] getChangeListeners ()
    {
!     return (ChangeListener[]) listenerList.getListeners (ChangeListener.class);
    }
! } // class MenuSelectionManager
--- 38,382 ----
  
  package javax.swing;
  
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.Point;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
+ import java.util.ArrayList;
+ import java.util.Vector;
+ 
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
+ /**
+  * This class manages current menu selectection. It provides
+  * methods to clear and set current selected menu path.
+  * It also fires StateChange event to its registered
+  * listeners whenever selected path of the current menu hierarchy
+  * changes.
+  *
+  */
  public class MenuSelectionManager
  {
!   /** ChangeEvent fired when selected path changes*/
!   protected ChangeEvent changeEvent = new ChangeEvent(this);
  
!   /** List of listeners for this MenuSelectionManager */
!   protected EventListenerList listenerList = new EventListenerList();
! 
!   /** Default manager for the current menu hierarchy*/
!   private static final MenuSelectionManager manager = new MenuSelectionManager();
! 
!   /** Path to the currently selected menu */
!   private Vector selectedPath = new Vector();
! 
!   /**
!    * Fires StateChange event to registered listeners
!    */
!   protected void fireStateChanged()
    {
!     ChangeListener[] listeners = getChangeListeners();
  
      for (int i = 0; i < listeners.length; i++)
+       listeners[i].stateChanged(changeEvent);
+   }
+ 
+   /**
+    * Adds ChangeListener to this MenuSelectionManager
+    *
+    * @param listener ChangeListener to add
+    */
+   public void addChangeListener(ChangeListener listener)
+   {
+     listenerList.add(ChangeListener.class, listener);
+   }
+ 
+   /**
+    * Removes ChangeListener from the list of registered listeners
+    * for this MenuSelectionManager.
+    *
+    * @param listener ChangeListner to remove
+    */
+   public void removeChangeListener(ChangeListener listener)
+   {
+     listenerList.remove(ChangeListener.class, listener);
+   }
+ 
+   /**
+    * Returns list of registered listeners with MenuSelectionManager
+    *
+    * @since 1.4
+    */
+   public ChangeListener[] getChangeListeners()
+   {
+     return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
+   }
+ 
+   /**
+    * Unselects all the menu elements on the selection path
+    */
+   public void clearSelectedPath()
+   {
+     // Send events from the bottom most item in the menu - hierarchy to the
+     // top most
+     for (int i = selectedPath.size() - 1; i >= 0; i--)
+       ((MenuElement) selectedPath.get(i)).menuSelectionChanged(false);
+ 
+     // clear selected path
+     selectedPath.clear();
+ 
+     // notify all listeners that the selected path was changed    
+     fireStateChanged();
+   }
+ 
+   /**
+    * This method returns menu element on the selected path that contains
+    * given source point. If no menu element on the selected path contains this
+    * point, then null is returned.
+    *
+    * @param source Component relative to which sourcePoint is given
+    * @param sourcePoint point for which we want to find menu element that contains it
+    *
+    * @return Returns menu element that contains given source point and belongs
+    * to the currently selected path. Null is return if no such menu element found.
+    */
+   public Component componentForPoint(Component source, Point sourcePoint)
+   {
+     // Convert sourcePoint to screen coordinates.
+     Point sourcePointOnScreen = sourcePoint;
+     SwingUtilities.convertPointToScreen(sourcePointOnScreen, source);
+ 
+     Point compPointOnScreen;
+     Component resultComp = null;
+ 
+     // For each menu element on the selected path, express its location 
+     // in terms of screen coordinates and check if there is any 
+     // menu element on the selected path that contains given source point.
+     for (int i = 0; i < selectedPath.size(); i++)
        {
! 	Component comp = ((Component) selectedPath.get(i));
!         Dimension size = comp.getSize();
! 
! 	// convert location of this menu item to screen coordinates
! 	compPointOnScreen = comp.getLocationOnScreen();
! 
! 	if (compPointOnScreen.x <= sourcePointOnScreen.x
! 	    && sourcePointOnScreen.x < compPointOnScreen.x + size.width
! 	    && compPointOnScreen.y <= sourcePointOnScreen.y
! 	    && sourcePointOnScreen.y < compPointOnScreen.y + size.height)
! 	  {
! 	    Point p = sourcePointOnScreen;
! 	    SwingUtilities.convertPointFromScreen(p, comp);
! 	    resultComp = SwingUtilities.getDeepestComponentAt(comp, p.x, p.y);
! 	    break;
! 	  }
        }
+     return resultComp;
    }
  
!   /**
!    * Returns shared instance of MenuSelection Manager
!    *
!    * @return default Manager
!    */
!   public static MenuSelectionManager defaultManager()
    {
!     return manager;
    }
  
!   /**
!    * Returns path representing current menu selection
!    *
!    * @return Current selection path
!    */
!   public MenuElement[] getSelectedPath()
    {
!     MenuElement[] path = new MenuElement[selectedPath.size()];
! 
!     for (int i = 0; i < path.length; i++)
!       path[i] = (MenuElement) selectedPath.get(i);
! 
!     return path;
    }
  
!   /**
!    * Returns true if specified component is part of current menu
!    * heirarchy and false otherwise
!    *
!    * @param c Component for which to check
!    * @return True if specified component is part of current menu
!    */
!   public boolean isComponentPartOfCurrentMenu(Component c)
    {
!     MenuElement[] subElements;
!     for (int i = 0; i < selectedPath.size(); i++)
!       {
! 	subElements = ((MenuElement) selectedPath.get(i)).getSubElements();
! 	for (int j = 0; j < subElements.length; j++)
! 	  {
! 	    if ((subElements[j].getComponent()).equals(c))
! 	      return true;
! 	  }
!       }
! 
!     return false;
    }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @param e DOCUMENT ME!
!    */
!   public void processKeyEvent(KeyEvent e)
!   {
!     throw new UnsupportedOperationException("not implemented");
!   }
! 
!   /**
!    * Forwards given mouse event to all of the source subcomponents.
!    *
!    * @param event Mouse event
!    */
!   public void processMouseEvent(MouseEvent event)
!   {
!     Component source = ((Component) event.getSource());
! 
!     // In the case of drag event, event.getSource() returns component
!     // where drag event originated. However menu element processing this 
!     // event should be the one over which mouse is currently located, 
!     // which is not necessary the source of the drag event.     
!     Component mouseOverMenuComp;
! 
!     // find over which menu element the mouse is currently located
!     if (event.getID() == MouseEvent.MOUSE_DRAGGED
!         || event.getID() == MouseEvent.MOUSE_RELEASED)
!       mouseOverMenuComp = componentForPoint(source, event.getPoint());
!     else
!       mouseOverMenuComp = source;
! 
!     // Process this event only if mouse is located over some menu element
!     if (mouseOverMenuComp != null && (mouseOverMenuComp instanceof MenuElement))
!       {
! 	MenuElement[] path = getPath(mouseOverMenuComp);
! 	((MenuElement) mouseOverMenuComp).processMouseEvent(event, path,
! 	                                                    manager);
! 
! 	// FIXME: Java specification says that mouse events should be
! 	// forwarded to subcomponents. The code below does it, but
! 	// menu's work fine without it. This code is commented for now.	  
! 
! 	/*
! 	MenuElement[] subComponents = ((MenuElement) mouseOverMenuComp)
! 	                              .getSubElements();
! 
! 	for (int i = 0; i < subComponents.length; i++)
! 	 {
! 	      subComponents[i].processMouseEvent(event, path, manager);
! 	 }
! 	*/
!       }
!   }
! 
!   /**
!    * Sets menu selection to the specified path
!    *
!    * @param path new selection path
!    */
!   public void setSelectedPath(MenuElement[] path)
!   {
!     if (path == null)
!       {
! 	clearSelectedPath();
! 	return;
!       }
! 
!     int i;
!     int minSize = path.length; // size of the smaller path. 
! 
!     if (path.length > selectedPath.size())
!       {
! 	minSize = selectedPath.size();
! 
! 	// if new selected path contains more elements then current
! 	// selection then first add all elements at 
! 	// the indexes > selectedPath.size 
! 	for (i = selectedPath.size(); i < path.length; i++)
! 	  {
! 	    selectedPath.add(path[i]);
! 	    path[i].menuSelectionChanged(true);
! 	  }
!       }
! 
!     else if (path.length < selectedPath.size())
!       {
! 	// if new selected path contains less elements then current 
! 	// selection then first remove all elements from the selection
! 	// at the indexes > path.length
! 	for (i = selectedPath.size() - 1; i >= path.length; i--)
! 	  {
! 	    ((MenuElement) selectedPath.get(i)).menuSelectionChanged(false);
! 	    selectedPath.remove(i);
! 	  }
! 
! 	minSize = path.length;
!       }
! 
!     // Now compare elements in new and current selection path at the 
!     // same location and adjust selection until 
!     // same menu elements will be encountered at the
!     // same index in both current and new selection path.
!     MenuElement oldSelectedItem;
! 
!     for (i = minSize - 1; i >= 0; i--)
!       {
! 	oldSelectedItem = (MenuElement) selectedPath.get(i);
! 
! 	if (path[i].equals(oldSelectedItem))
! 	  break;
! 
! 	oldSelectedItem.menuSelectionChanged(false);
! 	path[i].menuSelectionChanged(true);
! 	selectedPath.setElementAt(path[i], i);
!       }
! 
!     fireStateChanged();
!   }
! 
!   /**
!    * Returns path to the specified component
!    *
!    * @param c component for which to find path for
!    *
!    * @return path to the specified component
!    */
!   private MenuElement[] getPath(Component c)
!   {
!     // FIXME: There is the same method in BasicMenuItemUI. However I
!     // cannot use it here instead of this method, since I cannot assume that 
!     // all the menu elements on the selected path are JMenuItem or JMenu.
!     // For now I've just duplicated it here. Please 
!     // fix me or delete me if another better approach will be found, and 
!     // this method will not be necessary.
!     ArrayList path = new ArrayList();
! 
!     // if given component is JMenu, we also need to include 
!     // it's popup menu in the path 
!     if (c instanceof JMenu)
!       path.add(((JMenu) c).getPopupMenu());
!     while (c instanceof MenuElement)
!       {
! 	path.add(0, (MenuElement) c);
! 
! 	if (c instanceof JPopupMenu)
! 	  c = ((JPopupMenu) c).getInvoker();
! 	else
! 	  c = c.getParent();
!       }
! 
!     MenuElement[] pathArray = new MenuElement[path.size()];
!     path.toArray(pathArray);
!     return pathArray;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/MutableComboBoxModel.java gcc-4.0.0/libjava/javax/swing/MutableComboBoxModel.java
*** gcc-3.4.3/libjava/javax/swing/MutableComboBoxModel.java	Sun Oct 12 13:20:49 2003
--- gcc-4.0.0/libjava/javax/swing/MutableComboBoxModel.java	Thu Sep  2 05:10:23 2004
*************** exception statement from your version. *
*** 38,77 ****
  package javax.swing;
  
  /**
!  * MutableComboBoxModel
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public interface MutableComboBoxModel extends ComboBoxModel {
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * addElement
! 	 * @param object TODO
! 	 */
! 	void addElement(Object object);
! 
! 	/**
! 	 * removeElementAt
! 	 * @param index TODO
! 	 */
! 	void removeElementAt(int index);
! 
! 	/**
! 	 * insertElementAt
! 	 * @param object TODO
! 	 * @param index TODO
! 	 */
! 	void insertElementAt(Object object, int index);
  
! 	/**
! 	 * removeElement
! 	 * @param object TODO
! 	 */
! 	void removeElement(Object object);
  
  
  } // MutableComboBoxModel
--- 38,83 ----
  package javax.swing;
  
  /**
!  * MutableComboBoxModel is interface for data model that keeps track of the
!  * components data and provides methods to insert and remove elements from
!  * it. The Classes implementing this interface should  fire appropriate
!  * events indicating the undergoing change in the data model.
!  *
!  * @author Andrew Selkirk
!  * @author Olga Rodimina
!  * @version 1.0
   */
! public interface MutableComboBoxModel extends ComboBoxModel
! {
!   /**
!    * This method adds given object to its data model.
!    *
!    * @param object element to add to the data model.
!    */
!   void addElement(Object object);
  
!   /**
!    * This method removes elements located at the given index in the data
!    * model.
!    *
!    * @param index index specifying location of the element to remove.
!    */
!   void removeElementAt(int index);
  
+   /**
+    * This method inserts givent element to the data model, at the specified
+    * index.
+    *
+    * @param object element to insert
+    * @param index index specifying the position in the data model where the
+    *        given element should be inserted.
+    */
+   void insertElementAt(Object object, int index);
  
+   /**
+    * This method removes given element from the data model
+    *
+    * @param element to remove.
+    */
+   void removeElement(Object object);
  } // MutableComboBoxModel
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/OverlayLayout.java gcc-4.0.0/libjava/javax/swing/OverlayLayout.java
*** gcc-3.4.3/libjava/javax/swing/OverlayLayout.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/OverlayLayout.java	Wed Feb 16 20:02:39 2005
*************** import java.io.Serializable;
*** 51,57 ****
  public class OverlayLayout
    implements LayoutManager2, Serializable
  {
!   static final long serialVersionUID = 18082829169631543L;
  
  	//-------------------------------------------------------------
  	// Variables --------------------------------------------------
--- 51,57 ----
  public class OverlayLayout
    implements LayoutManager2, Serializable
  {
!   private static final long serialVersionUID = 18082829169631543L;
  
  	//-------------------------------------------------------------
  	// Variables --------------------------------------------------
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/Popup.java gcc-4.0.0/libjava/javax/swing/Popup.java
*** gcc-3.4.3/libjava/javax/swing/Popup.java	Fri Jun 27 12:41:52 2003
--- gcc-4.0.0/libjava/javax/swing/Popup.java	Wed May  5 09:53:50 2004
*************** public class Popup
*** 163,169 ****
  
  
      /**
!      * Displays the popup&#x2019;s <code>JWindow</code> on the screen.
       * Nothing happens if it is already visible.
       */
      public void show()
--- 163,169 ----
  
  
      /**
!      * Displays the popup's <code>JWindow</code> on the screen.
       * Nothing happens if it is already visible.
       */
      public void show()
*************** public class Popup
*** 173,179 ****
      
      
      /**
!      * Removes the popup&#x2019;s <code>JWindow</code> from the
       * screen.  Nothing happens if it is currently not visible.
       */
      public void hide()
--- 173,179 ----
      
      
      /**
!      * Removes the popup's <code>JWindow</code> from the
       * screen.  Nothing happens if it is currently not visible.
       */
      public void hide()
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ProgressMonitorInputStream.java gcc-4.0.0/libjava/javax/swing/ProgressMonitorInputStream.java
*** gcc-3.4.3/libjava/javax/swing/ProgressMonitorInputStream.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/ProgressMonitorInputStream.java	Tue Nov 30 23:58:58 2004
*************** this exception to your version of the li
*** 35,46 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.Component;
  import java.io.FilterInputStream;
- import java.io.InputStream;
  import java.io.IOException;
  
  /**
   * ProgressMonitorInputStream
--- 35,47 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
  import java.io.FilterInputStream;
  import java.io.IOException;
+ import java.io.InputStream;
  
  /**
   * ProgressMonitorInputStream
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/RepaintManager.java gcc-4.0.0/libjava/javax/swing/RepaintManager.java
*** gcc-3.4.3/libjava/javax/swing/RepaintManager.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/RepaintManager.java	Wed Feb 16 20:02:39 2005
***************
*** 1,5 ****
  /* RepaintManager.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* RepaintManager.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Component;
*** 42,282 ****
  import java.awt.Dimension;
  import java.awt.Image;
  import java.awt.Rectangle;
  import java.util.Hashtable;
  import java.util.Vector;
  
  /**
!  * RepaintManager
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class RepaintManager {
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * dirtyComponents
! 	 */
! 	Hashtable dirtyComponents;
! 
! 	/**
! 	 * tmpDirtyComponents
! 	 */
! 	Hashtable tmpDirtyComponents;
  
! 	/**
! 	 * invalidComponents
! 	 */
! 	Vector invalidComponents;
  
! 	/**
! 	 * doubleBufferingEnabled
! 	 */
! 	boolean doubleBufferingEnabled;
  
! 	/**
! 	 * doubleBuffer
! 	 */
! 	Image doubleBuffer;
  
! 	/**
! 	 * doubleBufferSize
! 	 */
! 	Dimension doubleBufferSize;
  
! 	/**
! 	 * doubleBufferMaxSize
! 	 */
! 	private Dimension doubleBufferMaxSize;
  
! 	/**
! 	 * resetDoubleBuffer
! 	 */
! 	private boolean resetDoubleBuffer;
  
! 	/**
! 	 * repaintManagerKey
! 	 */
! 	private static final Object repaintManagerKey = null; // TODO
  
! 	/**
! 	 * tmp
! 	 */
! 	Rectangle tmp;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor RepaintManager
! 	 */
! 	public RepaintManager() {
! 		// TODO
! 	} // RepaintManager()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * toString
! 	 * @returns String
! 	 */
! 	public synchronized String toString() {
! 		return null; // TODO
! 	} // toString()
  
! 	/**
! 	 * currentManager
! 	 * @param component TODO
! 	 * @returns RepaintManager
! 	 */
! 	public static RepaintManager currentManager(Component component) {
! 		return null; // TODO
! 	} // currentManager()
  
! 	/**
! 	 * currentManager
! 	 * @param component TODO
! 	 * @returns RepaintManager
! 	 */
! 	public static RepaintManager currentManager(JComponent component) {
! 		return null; // TODO
! 	} // currentManager()
  
! 	/**
! 	 * setCurrentManager
! 	 * @param manager TODO
! 	 */
! 	public static void setCurrentManager(RepaintManager manager) {
! 		// TODO
! 	} // setCurrentManager()
  
! 	/**
! 	 * addInvalidComponent
! 	 * @param component TODO
! 	 */
! 	public synchronized void addInvalidComponent(JComponent component) {
! 		// TODO
! 	} // addInvalidComponent()
  
! 	/**
! 	 * removeInvalidComponent
! 	 * @param component TODO
! 	 */
! 	public synchronized void removeInvalidComponent(JComponent component) {
! 		// TODO
! 	} // removeInvalidComponent()
  
! 	/**
! 	 * addDirtyRegion
! 	 * @param component TODO
! 	 * @param x TODO
! 	 * @param y TODO
! 	 * @param w TODO
! 	 * @param h TODO
! 	 */
! 	public synchronized void addDirtyRegion(JComponent component, int x,
! 			int y, int w, int h) {
! 		// TODO
! 	} // addDirtyRegion()
  
! 	/**
! 	 * getDirtyRegion
! 	 * @param component TODO
! 	 * @returns Rectangle
! 	 */
! 	public Rectangle getDirtyRegion(JComponent component) {
! 		return null; // TODO
! 	} // getDirtyRegion()
  
! 	/**
! 	 * markCompletelyDirty
! 	 * @param component TODO
! 	 */
! 	public void markCompletelyDirty(JComponent component) {
! 		// TODO
! 	} // markCompletelyDirty()
  
! 	/**
! 	 * markCompletelyClean
! 	 * @param component TODO
! 	 */
! 	public void markCompletelyClean(JComponent component) {
! 		// TODO
! 	} // markCompletelyClean()
  
! 	/**
! 	 * isCompletelyDirty
! 	 * @param component TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isCompletelyDirty(JComponent component) {
! 		return false; // TODO
! 	} // isCompletelyDirty()
  
! 	/**
! 	 * validateInvalidComponents
! 	 */
! 	public void validateInvalidComponents() {
! 		// TODO
! 	} // validateInvalidComponents()
  
! 	/**
! 	 * paintDirtyRegions
! 	 */
! 	public void paintDirtyRegions() {
! 		// TODO
! 	} // paintDirtyRegions()
  
! 	/**
! 	 * getOffscreenBuffer
! 	 * @param component TODO
! 	 * @param proposedWidth TODO
! 	 * @param proposedHeight TODO
! 	 * @returns Image
! 	 */
! 	public Image getOffscreenBuffer(Component component,
! 			int proposedWidth, int proposedHeight) {
! 		return null; // TODO
! 	} // getOffscreenBuffer()
  
! 	/**
! 	 * getDoubleBufferMaximumSize
! 	 * @returns Dimension
! 	 */
! 	public Dimension getDoubleBufferMaximumSize() {
! 		return null; // TODO
! 	} // getDoubleBufferMaximumSize()
  
! 	/**
! 	 * setDoubleBufferMaximumSize
! 	 * @param size TODO
! 	 */
! 	public void setDoubleBufferMaximumSize(Dimension size) {
! 		// TODO
! 	} // setDoubleBufferMaximumSize()
  
! 	/**
! 	 * setDoubleBufferingEnabled
! 	 * @param buffer TODO
! 	 */
! 	public void setDoubleBufferingEnabled(boolean buffer) {
! 		// TODO
! 	} // setDoubleBufferingEnabled()
  
! 	/**
! 	 * isDoubleBufferingEnabled
! 	 * @returns boolean
! 	 */
! 	public boolean isDoubleBufferingEnabled() {
! 		return false; // TODO
! 	} // isDoubleBufferingEnabled()
  
  
! } // RepaintManager
--- 42,542 ----
  import java.awt.Dimension;
  import java.awt.Image;
  import java.awt.Rectangle;
+ import java.util.Enumeration;
+ import java.util.HashMap;
  import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Map;
  import java.util.Vector;
  
  /**
!  * <p>The repaint manager holds a set of dirty regions, invalid components,
!  * and a double buffer surface.  The dirty regions and invalid components
!  * are used to coalesce multiple revalidate() and repaint() calls in the
!  * component tree into larger groups to be refreshed "all at once"; the
!  * double buffer surface is used by root components to paint
!  * themselves.</p>
!  *
!  * <p>In general, painting is very confusing in swing. see <a
!  * href="http://java.sun.com/products/jfc/tsc/articles/painting/index.html">this
!  * document</a> for more details.</p>
!  *
!  * @author Graydon Hoare (graydon@redhat.com)
   */
! public class RepaintManager
! {
  
!   /**
!    * <p>A helper class which is placed into the system event queue at
!    * various times in order to facilitate repainting and layout. There is
!    * typically only one of these objects active at any time. When the
!    * {@link RepaintManager} is told to queue a repaint, it checks to see if
!    * a {@link RepaintWorker} is "live" in the system event queue, and if
!    * not it inserts one using {@link SwingUtilities.invokeLater}.</p>
!    *
!    * <p>When the {@link RepaintWorker} comes to the head of the system
!    * event queue, its {@link RepaintWorker#run} method is executed by the
!    * swing paint thread, which revalidates all invalid components and
!    * repaints any damage in the swing scene.</p>
!    */
  
!   protected class RepaintWorker
!     implements Runnable
!   {
!     boolean live;
!     public RepaintWorker()
!     {
!       live = false;
!     }
!     public synchronized void setLive(boolean b) 
!     {
!       live = b;
!     }
!     public synchronized boolean isLive()
!     {
!       return live;
!     }
!     public void run()
!     {
!       RepaintManager rm = RepaintManager.globalManager;
!       setLive(false);
!       rm.validateInvalidComponents();
!       rm.paintDirtyRegions();
!     }
!   }
  
!   
!   /** 
!    * A table storing the dirty regions of components.  The keys of this
!    * table are components, the values are rectangles. Each component maps
!    * to exactly one rectangle.  When more regions are marked as dirty on a
!    * component, they are union'ed with the existing rectangle.
!    *
!    * @see #addDirtyRegion
!    * @see #getDirtyRegion
!    * @see #isCompletelyDirty
!    * @see #markCompletelyClean
!    * @see #markCompletelyDirty
!    */
!   Hashtable dirtyComponents;
  
!   /**
!    * A single, shared instance of the helper class. Any methods which mark
!    * components as invalid or dirty eventually activate this instance. It
!    * is added to the event queue if it is not already active, otherwise
!    * reused.
!    *
!    * @see #addDirtyRegion
!    * @see #addInvalidComponent
!    */
!   RepaintWorker repaintWorker;
  
!   /** 
!    * The set of components which need revalidation, in the "layout" sense.
!    * There is no additional information about "what kind of layout" they
!    * need (as there is with dirty regions), so it is just a vector rather
!    * than a table.
!    *
!    * @see #addInvalidComponent
!    * @see #removeInvalidComponent
!    * @see #validateInvalidComponents
!    */
!   Vector invalidComponents;
  
!   /** 
!    * Whether or not double buffering is enabled on this repaint
!    * manager. This is merely a hint to clients; the RepaintManager will
!    * always return an offscreen buffer when one is requested.
!    * 
!    * @see #getDoubleBufferingEnabled
!    * @see #setDoubleBufferingEnabled
!    */
!   boolean doubleBufferingEnabled;
  
!   /** 
!    * The current offscreen buffer. This is reused for all requests for
!    * offscreen drawing buffers. It grows as necessary, up to {@link
!    * #doubleBufferMaximumSize}, but there is only one shared instance.
!    *
!    * @see #getOffscreenBuffer
!    * @see #doubleBufferMaximumSize
!    */
!   Image doubleBuffer;
  
!   /**
!    * The maximum width and height to allocate as a double buffer. Requests
!    * beyond this size are ignored.
!    *
!    * @see #paintDirtyRegions
!    * @see #getDoubleBufferMaximumSize
!    * @see #setDoubleBufferMaximumSize
!    */
!   Dimension doubleBufferMaximumSize;
  
  
!   /**
!    * The global, shared RepaintManager instance. This is reused for all
!    * components in all windows.
!    *
!    * @see #currentManager
!    * @see #setCurrentManager
!    */
!   private static RepaintManager globalManager;
  
!   /**
!    * Create a new RepaintManager object.
!    */
!   public RepaintManager()
!   {
!     dirtyComponents = new Hashtable();
!     invalidComponents = new Vector();
!     repaintWorker = new RepaintWorker();
!     doubleBufferMaximumSize = new Dimension(2000,2000);
!     doubleBufferingEnabled = true;
!   }
  
+   /**
+    * Get the value of the shared {@link #globalManager} instance, possibly
+    * returning a special manager associated with the specified
+    * component. The default implementaiton ignores the component parameter.
+    *
+    * @param component A component to look up the manager of
+    *
+    * @return The current repaint manager
+    *
+    * @see #setCurrentManager
+    */
+   public static RepaintManager currentManager(Component component)
+   {
+     if (globalManager == null)
+       globalManager = new RepaintManager();
+     return globalManager;
+   }
  
!   /**
!    * Get the value of the shared {@link #globalManager} instance, possibly
!    * returning a special manager associated with the specified
!    * component. The default implementaiton ignores the component parameter.
!    *
!    * @param component A component to look up the manager of
!    *
!    * @return The current repaint manager
!    *
!    * @see #setCurrentManager
!    */
!   public static RepaintManager currentManager(JComponent component)
!   {
!     return currentManager((Component)component);
!   }
  
!   /**
!    * Set the value of the shared {@link #globalManager} instance.
!    *
!    * @param manager The new value of the shared instance
!    *
!    * @see #currentManager
!    */
!   public static void setCurrentManager(RepaintManager manager)
!   {
!     globalManager = manager;
!   }
  
!   /**
!    * Add a component to the {@link #invalidComponents} vector. If the
!    * {@link #repaintWorker} class is not active, insert it in the system
!    * event queue.
!    *
!    * @param component The component to add
!    *
!    * @see #removeInvalidComponent
!    */
!   public synchronized void addInvalidComponent(JComponent component)
!   {
!     Component ancestor = component.getParent();
  
!     while (ancestor != null
!            && (! (ancestor instanceof JComponent)
!                || ! ((JComponent) ancestor).isValidateRoot() ))
!       ancestor = ancestor.getParent();
  
!     if (ancestor != null
!         && ancestor instanceof JComponent
!         && ((JComponent) ancestor).isValidateRoot())
!       component = (JComponent) ancestor;
  
!     if (invalidComponents.contains(component))
!       return;
  
!     invalidComponents.add(component);
!     
!     if (! repaintWorker.isLive())
!       {
!         repaintWorker.setLive(true);
!         SwingUtilities.invokeLater(repaintWorker);
!       }
!   }
  
!   /**
!    * Remove a component from the {@link #invalidComponents} vector.
!    *
!    * @param component The component to remove
!    *
!    * @see #addInvalidComponent
!    */
!   public synchronized void removeInvalidComponent(JComponent component)
!   {
!     invalidComponents.removeElement(component);
!   }
  
!   /**
!    * Add a region to the set of dirty regions for a specified component.
!    * This involves union'ing the new region with any existing dirty region
!    * associated with the component. If the {@link #repaintWorker} class
!    * is not active, insert it in the system event queue.
!    *
!    * @param component The component to add a dirty region for
!    * @param x The left x coordinate of the new dirty region
!    * @param y The top y coordinate of the new dirty region
!    * @param w The width of the new dirty region
!    * @param h The height of the new dirty region
!    *
!    * @see #addDirtyRegion
!    * @see #getDirtyRegion
!    * @see #isCompletelyDirty
!    * @see #markCompletelyClean
!    * @see #markCompletelyDirty
!    */
!   public synchronized void addDirtyRegion(JComponent component, int x, int y,
!                                           int w, int h)
!   {
!     if (w == 0 || h == 0)
!       return;
  
!     Rectangle r = new Rectangle(x, y, w, h);
!     if (dirtyComponents.containsKey(component))
!       r = r.union((Rectangle)dirtyComponents.get(component));
!     dirtyComponents.put(component, r);
!     if (! repaintWorker.isLive())
!       {
!         repaintWorker.setLive(true);
!         SwingUtilities.invokeLater(repaintWorker);
!       }
!   }
!   
!   /**
!    * Get the dirty region associated with a component, or <code>null</code>
!    * if the component has no dirty region.
!    *
!    * @param component The component to get the dirty region of
!    *
!    * @return The dirty region of the component
!    *
!    * @see #dirtyComponents
!    * @see #addDirtyRegion
!    * @see #isCompletelyDirty
!    * @see #markCompletelyClean
!    * @see #markCompletelyDirty
!    */
!   public Rectangle getDirtyRegion(JComponent component)
!   {
!     return (Rectangle) dirtyComponents.get(component);
!   }
!   
!   /**
!    * Mark a component as dirty over its entire bounds.
!    *
!    * @param component The component to mark as dirty
!    *
!    * @see #dirtyComponents
!    * @see #addDirtyRegion
!    * @see #getDirtyRegion
!    * @see #isCompletelyDirty
!    * @see #markCompletelyClean
!    */
!   public void markCompletelyDirty(JComponent component)
!   {
!     Rectangle r = component.getBounds();
!     addDirtyRegion(component, r.x, r.y, r.width, r.height);
!   }
  
!   /**
!    * Remove all dirty regions for a specified component
!    *
!    * @param component The component to mark as clean
!    *
!    * @see #dirtyComponents
!    * @see #addDirtyRegion
!    * @see #getDirtyRegion
!    * @see #isCompletelyDirty
!    * @see #markCompletelyDirty
!    */
!   public void markCompletelyClean(JComponent component)
!   {
!     dirtyComponents.remove(component);
!   }
  
!   /**
!    * Return <code>true</code> if the specified component is completely
!    * contained within its dirty region, otherwise <code>false</code>
!    *
!    * @param component The component to check for complete dirtyness
!    *
!    * @return Whether the component is completely dirty
!    *
!    * @see #dirtyComponents
!    * @see #addDirtyRegion
!    * @see #getDirtyRegion
!    * @see #isCompletelyDirty
!    * @see #markCompletelyClean
!    */
!   public boolean isCompletelyDirty(JComponent component)
!   {
!     Rectangle dirty = (Rectangle) dirtyComponents.get(component);
!     if (dirty == null)
!       return false;
!     Rectangle r = component.getBounds();
!     if (r == null)
!       return true;
!     return dirty.contains(r);
!   }
  
!   /**
!    * Validate all components which have been marked invalid in the {@link
!    * #invalidComponents} vector.
!    */
!   public void validateInvalidComponents()
!   {
!     for (Enumeration e = invalidComponents.elements(); e.hasMoreElements(); )
!       {
!         JComponent comp = (JComponent) e.nextElement();
!         if (! (comp.isVisible() && comp.isShowing()))
!           continue;
!         comp.validate();
!       }
!     invalidComponents.clear();
!   }
  
!   /**
!    * Repaint all regions of all components which have been marked dirty in
!    * the {@link #dirtyComponents} table.
!    */
!   public void paintDirtyRegions()
!   {
!     // step 1: pull out roots and calculate spanning damage
  
!     HashMap roots = new HashMap();
!     for (Enumeration e = dirtyComponents.keys(); e.hasMoreElements(); )
!       {
!         JComponent comp = (JComponent) e.nextElement();
!         if (! (comp.isVisible() && comp.isShowing()))
!           continue;
!         Rectangle damaged = getDirtyRegion(comp);
!         if (damaged.width == 0 || damaged.height == 0)
!           continue;
!         JRootPane root = comp.getRootPane();
!         // If the component has no root, no repainting will occur.
!         if (root == null)
!           continue;
!         Rectangle rootDamage = SwingUtilities.convertRectangle(comp, damaged, root);
!         if (! roots.containsKey(root))
!           {
!             roots.put(root, rootDamage);
!           }
!         else
!           {
!             roots.put(root, ((Rectangle)roots.get(root)).union(rootDamage));
!           }
!       }
!     dirtyComponents.clear();
  
!     // step 2: paint those roots
!     Iterator i = roots.entrySet().iterator();
!     while(i.hasNext())
!       {
!         Map.Entry ent = (Map.Entry) i.next();
!         JRootPane root = (JRootPane) ent.getKey();
!         Rectangle rect = (Rectangle) ent.getValue();
!         root.paintImmediately(rect);                	
!       }
!   }
  
!   /**
!    * Get an offscreen buffer for painting a component's image. This image
!    * may be smaller than the proposed dimensions, depending on the value of
!    * the {@link #doubleBufferMaximumSize} property.
!    *
!    * @param component The component to return an offscreen buffer for
!    * @param proposedWidth The proposed width of the offscreen buffer
!    * @param proposedHeight The proposed height of the offscreen buffer
!    *
!    * @return A shared offscreen buffer for painting
!    *
!    * @see #doubleBuffer
!    */
!   public Image getOffscreenBuffer(Component component, int proposedWidth,
!                                   int proposedHeight)
!   {
!     if (doubleBuffer == null 
!         || (((doubleBuffer.getWidth(null) < proposedWidth) 
!              || (doubleBuffer.getHeight(null) < proposedHeight))
!             && (proposedWidth < doubleBufferMaximumSize.width)
!             && (proposedHeight < doubleBufferMaximumSize.height)))
!       {
!         doubleBuffer = component.createImage(proposedWidth, proposedHeight);
!       }
!     return doubleBuffer;
!   }
  
!   /**
!    * Get the value of the {@link #doubleBufferMaximumSize} property.
!    *
!    * @return The current value of the property
!    *
!    * @see #setDoubleBufferMaximumSize
!    */
!   public Dimension getDoubleBufferMaximumSize()
!   {
!     return doubleBufferMaximumSize;
!   }
  
!   /**
!    * Set the value of the {@link #doubleBufferMaximumSize} property.
!    *
!    * @param size The new value of the property
!    *
!    * @see #getDoubleBufferMaximumSize
!    */
!   public void setDoubleBufferMaximumSize(Dimension size)
!   {
!     doubleBufferMaximumSize = size;
!   }
  
+   /**
+    * Set the value of the {@link #doubleBufferingEnabled} property.
+    *
+    * @param buffer The new value of the property
+    *
+    * @see #getDoubleBufferingEnabled
+    */
+   public void setDoubleBufferingEnabled(boolean buffer)
+   {
+     doubleBufferingEnabled = buffer;
+   }
  
!   /**
!    * Get the value of the {@link #doubleBufferingEnabled} property.
!    *
!    * @return The current value of the property
!    *
!    * @see #setDoubleBufferingEnabled
!    */
!   public boolean isDoubleBufferingEnabled()
!   {
!     return doubleBufferingEnabled;
!   }
!   
!   public String toString()
!   {
!     return "RepaintManager";
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/RootPaneContainer.java gcc-4.0.0/libjava/javax/swing/RootPaneContainer.java
*** gcc-3.4.3/libjava/javax/swing/RootPaneContainer.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/RootPaneContainer.java	Tue Nov 30 23:58:59 2004
*************** this exception to your version of the li
*** 35,44 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
- import java.awt.Container;
  import java.awt.Component;
  
  /**
   * RootPaneContainer
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Component;
+ import java.awt.Container;
  
  /**
   * RootPaneContainer
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ScrollPaneConstants.java gcc-4.0.0/libjava/javax/swing/ScrollPaneConstants.java
*** gcc-3.4.3/libjava/javax/swing/ScrollPaneConstants.java	Sun Oct 12 13:20:49 2003
--- gcc-4.0.0/libjava/javax/swing/ScrollPaneConstants.java	Thu Jun 17 23:43:12 2004
***************
*** 1,5 ****
  /* ScrollPaneConstants.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ScrollPaneConstants.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing;
*** 42,157 ****
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public interface ScrollPaneConstants {
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * VIEWPORT
! 	 */
! 	String VIEWPORT = "VIEWPORT";
! 
! 	/**
! 	 * VERTICAL_SCROLLBAR
! 	 */
! 	String VERTICAL_SCROLLBAR = "VERTICAL_SCROLLBAR";
! 
! 	/**
! 	 * HORIZONTAL_SCROLLBAR
! 	 */
! 	String HORIZONTAL_SCROLLBAR = "HORIZONTAL_SCROLLBAR";
  
! 	/**
! 	 * ROW_HEADER
! 	 */
! 	String ROW_HEADER = "ROW_HEADER";
  
! 	/**
! 	 * COLUMN_HEADER
! 	 */
! 	String COLUMN_HEADER = "COLUMN_HEADER";
  
! 	/**
! 	 * LOWER_LEFT_CORNER
! 	 */
! 	String LOWER_LEFT_CORNER = "LOWER_LEFT_CORNER";
  
! 	/**
! 	 * LOWER_RIGHT_CORNER
! 	 */
! 	String LOWER_RIGHT_CORNER = "LOWER_RIGHT_CORNER";
  
! 	/**
! 	 * UPPER_LEFT_CORNER
! 	 */
! 	String UPPER_LEFT_CORNER = "UPPER_LEFT_CORNER";
  
! 	/**
! 	 * UPPER_RIGHT_CORNER
! 	 */
! 	String UPPER_RIGHT_CORNER = "UPPER_RIGHT_CORNER";
  
! 	/**
! 	 * LOWER_LEADING_CORNER
! 	 */
! 	String LOWER_LEADING_CORNER = "LOWER_LEADING_CORNER";
  
! 	/**
! 	 * LOWER_TRAILING_CORNER
! 	 */
! 	String LOWER_TRAILING_CORNER = "LOWER_TRAILING_CORNER";
  
! 	/**
! 	 * UPPER_LEADING_CORNER
! 	 */
! 	String UPPER_LEADING_CORNER = "UPPER_LEADING_CORNER";
  
! 	/**
! 	 * UPPER_TRAILING_CORNER
! 	 */
! 	String UPPER_TRAILING_CORNER = "UPPER_TRAILING_CORNER";
  
! 	/**
! 	 * VERTICAL_SCROLLBAR_POLICY
! 	 */
! 	String VERTICAL_SCROLLBAR_POLICY = "VERTICAL_SCROLLBAR_POLICY";
  
! 	/**
! 	 * HORIZONTAL_SCROLLBAR_POLICY
! 	 */
! 	String HORIZONTAL_SCROLLBAR_POLICY = "HORIZONTAL_SCROLLBAR_POLICY";
  
! 	/**
! 	 * VERTICAL_SCROLLBAR_AS_NEEDED
! 	 */
! 	int VERTICAL_SCROLLBAR_AS_NEEDED = 20;
  
! 	/**
! 	 * VERTICAL_SCROLLBAR_NEVER
! 	 */
! 	int VERTICAL_SCROLLBAR_NEVER = 21;
  
! 	/**
! 	 * VERTICAL_SCROLLBAR_ALWAYS
! 	 */
! 	int VERTICAL_SCROLLBAR_ALWAYS = 22;
  
! 	/**
! 	 * HORIZONTAL_SCROLLBAR_AS_NEEDED
! 	 */
! 	int HORIZONTAL_SCROLLBAR_AS_NEEDED = 30;
  
! 	/**
! 	 * HORIZONTAL_SCROLLBAR_NEVER
! 	 */
! 	int HORIZONTAL_SCROLLBAR_NEVER = 31;
  
! 	/**
! 	 * HORIZONTAL_SCROLLBAR_ALWAYS
! 	 */
! 	int HORIZONTAL_SCROLLBAR_ALWAYS = 32;
  
  
! } // ScrollPaneConstants
--- 42,151 ----
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public interface ScrollPaneConstants
! {
!   /**
!    * VIEWPORT
!    */
!   String VIEWPORT = "VIEWPORT";
  
!   /**
!    * VERTICAL_SCROLLBAR
!    */
!   String VERTICAL_SCROLLBAR = "VERTICAL_SCROLLBAR";
  
!   /**
!    * HORIZONTAL_SCROLLBAR
!    */
!   String HORIZONTAL_SCROLLBAR = "HORIZONTAL_SCROLLBAR";
  
!   /**
!    * ROW_HEADER
!    */
!   String ROW_HEADER = "ROW_HEADER";
  
!   /**
!    * COLUMN_HEADER
!    */
!   String COLUMN_HEADER = "COLUMN_HEADER";
  
!   /**
!    * LOWER_LEFT_CORNER
!    */
!   String LOWER_LEFT_CORNER = "LOWER_LEFT_CORNER";
  
!   /**
!    * LOWER_RIGHT_CORNER
!    */
!   String LOWER_RIGHT_CORNER = "LOWER_RIGHT_CORNER";
  
!   /**
!    * UPPER_LEFT_CORNER
!    */
!   String UPPER_LEFT_CORNER = "UPPER_LEFT_CORNER";
  
!   /**
!    * UPPER_RIGHT_CORNER
!    */
!   String UPPER_RIGHT_CORNER = "UPPER_RIGHT_CORNER";
  
!   /**
!    * LOWER_LEADING_CORNER
!    */
!   String LOWER_LEADING_CORNER = "LOWER_LEADING_CORNER";
  
!   /**
!    * LOWER_TRAILING_CORNER
!    */
!   String LOWER_TRAILING_CORNER = "LOWER_TRAILING_CORNER";
  
!   /**
!    * UPPER_LEADING_CORNER
!    */
!   String UPPER_LEADING_CORNER = "UPPER_LEADING_CORNER";
  
!   /**
!    * UPPER_TRAILING_CORNER
!    */
!   String UPPER_TRAILING_CORNER = "UPPER_TRAILING_CORNER";
  
!   /**
!    * VERTICAL_SCROLLBAR_POLICY
!    */
!   String VERTICAL_SCROLLBAR_POLICY = "VERTICAL_SCROLLBAR_POLICY";
  
!   /**
!    * HORIZONTAL_SCROLLBAR_POLICY
!    */
!   String HORIZONTAL_SCROLLBAR_POLICY = "HORIZONTAL_SCROLLBAR_POLICY";
  
!   /**
!    * VERTICAL_SCROLLBAR_AS_NEEDED
!    */
!   int VERTICAL_SCROLLBAR_AS_NEEDED = 20;
  
!   /**
!    * VERTICAL_SCROLLBAR_NEVER
!    */
!   int VERTICAL_SCROLLBAR_NEVER = 21;
  
!   /**
!    * VERTICAL_SCROLLBAR_ALWAYS
!    */
!   int VERTICAL_SCROLLBAR_ALWAYS = 22;
  
!   /**
!    * HORIZONTAL_SCROLLBAR_AS_NEEDED
!    */
!   int HORIZONTAL_SCROLLBAR_AS_NEEDED = 30;
  
+   /**
+    * HORIZONTAL_SCROLLBAR_NEVER
+    */
+   int HORIZONTAL_SCROLLBAR_NEVER = 31;
  
!   /**
!    * HORIZONTAL_SCROLLBAR_ALWAYS
!    */
!   int HORIZONTAL_SCROLLBAR_ALWAYS = 32;
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ScrollPaneLayout.java gcc-4.0.0/libjava/javax/swing/ScrollPaneLayout.java
*** gcc-3.4.3/libjava/javax/swing/ScrollPaneLayout.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/ScrollPaneLayout.java	Wed Feb 16 20:02:39 2005
***************
*** 1,5 ****
  /* ScrollPaneLayout.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ScrollPaneLayout.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing;
*** 41,50 ****
--- 41,54 ----
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Dimension;
+ import java.awt.Insets;
  import java.awt.LayoutManager;
+ import java.awt.Point;
  import java.awt.Rectangle;
  import java.io.Serializable;
  
+ import javax.swing.border.Border;
+ 
  /**
   * ScrollPaneLayout
   * @author	Andrew Selkirk
*************** import java.io.Serializable;
*** 53,312 ****
  public class ScrollPaneLayout
    implements LayoutManager, ScrollPaneConstants, Serializable
  {
!   static final long serialVersionUID = -4480022884523193743L;
  
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * UIResource
! 	 */
! 	public static class UIResource extends ScrollPaneLayout 
! 			implements javax.swing.plaf.UIResource {
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor UIResource
! 		 */
! 		public UIResource() {
! 			// TODO
! 		} // UIResource()
  
  
! 	} // UIResource
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * viewport
! 	 */
! 	protected JViewport viewport;
  
! 	/**
! 	 * vsb
! 	 */
! 	protected JScrollBar vsb;
  
! 	/**
! 	 * hsb
! 	 */
! 	protected JScrollBar hsb;
  
! 	/**
! 	 * rowHead
! 	 */
! 	protected JViewport rowHead;
  
! 	/**
! 	 * colHead
! 	 */
! 	protected JViewport colHead;
  
! 	/**
! 	 * lowerLeft
! 	 */
! 	protected Component lowerLeft;
  
! 	/**
! 	 * lowerRight
! 	 */
! 	protected Component lowerRight;
  
! 	/**
! 	 * upperLeft
! 	 */
! 	protected Component upperLeft;
  
! 	/**
! 	 * upperRight
! 	 */
! 	protected Component upperRight;
  
! 	/**
! 	 * vsbPolicy
! 	 */
! 	protected int vsbPolicy;
  
! 	/**
! 	 * hsbPolicy
! 	 */
! 	protected int hsbPolicy;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor ScrollPaneLayout
! 	 */
! 	public ScrollPaneLayout() {
! 		// TODO
! 	} // ScrollPaneLayout()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * syncWithScrollPane
! 	 * @param scrollPane TODO
! 	 */
! 	public void syncWithScrollPane(JScrollPane scrollPane) {
! 		// TODO
! 	} // syncWithScrollPane()
  
! 	/**
! 	 * addSingletonComponent
! 	 * @param oldComponent TODO
! 	 * @param newComponent TODO
! 	 * @returns Component
! 	 */
! 	protected Component addSingletonComponent(Component oldComponent,
! 			Component newComponent) {
! 		return null; // TODO
! 	} // addSingletonComponent()
  
! 	/**
! 	 * addLayoutComponent
! 	 * @param string TODO
! 	 * @param component TODO
! 	 */
! 	public void addLayoutComponent(String string, Component component) {
! 		// TODO
! 	} // addLayoutComponent()
  
! 	/**
! 	 * removeLayoutComponent
! 	 * @param component TODO
! 	 */
! 	public void removeLayoutComponent(Component component) {
! 		// TODO
! 	} // removeLayoutComponent()
  
! 	/**
! 	 * getVerticalScrollBarPolicy
! 	 * @returns int
! 	 */
! 	public int getVerticalScrollBarPolicy() {
! 		return 0; // TODO
! 	} // getVerticalScrollBarPolicy()
  
! 	/**
! 	 * setVerticalScrollBarPolicy
! 	 * @param policy TODO
! 	 */
! 	public void setVerticalScrollBarPolicy(int policy) {
! 		// TODO
! 	} // setVerticalScrollBarPolicy()
  
! 	/**
! 	 * getHorizontalScrollBarPolicy
! 	 * @returns int
! 	 */
! 	public int getHorizontalScrollBarPolicy() {
! 		return 0; // TODO
! 	} // getHorizontalScrollBarPolicy()
  
! 	/**
! 	 * setHorizontalScrollBarPolicy
! 	 * @param policy TODO
! 	 */
! 	public void setHorizontalScrollBarPolicy(int policy) {
! 		// TODO
! 	} // setHorizontalScrollBarPolicy()
  
! 	/**
! 	 * getViewport
! 	 * @returns JViewport
! 	 */
! 	public JViewport getViewport() {
! 		return null; // TODO
! 	} // getViewport()
  
! 	/**
! 	 * getHorizontalScrollBar
! 	 * @returns JScrollBar
! 	 */
! 	public JScrollBar getHorizontalScrollBar() {
! 		return null; // TODO
! 	} // getHorizontalScrollBar()
  
! 	/**
! 	 * getVerticalScrollBar
! 	 * @returns JScrollBar
! 	 */
! 	public JScrollBar getVerticalScrollBar() {
! 		return null; // TODO
! 	} // getVerticalScrollBar()
  
! 	/**
! 	 * getRowHeader
! 	 * @returns JViewport
! 	 */
! 	public JViewport getRowHeader() {
! 		return null; // TODO
! 	} // getRowHeader()
  
! 	/**
! 	 * getColumnHeader
! 	 * @returns JViewport
! 	 */
! 	public JViewport getColumnHeader() {
! 		return null; // TODO
! 	} // getColumnHeader()
  
! 	/**
! 	 * getCorner
! 	 * @param key TODO
! 	 * @returns Component
! 	 */
! 	public Component getCorner(String key) {
! 		return null; // TODO
! 	} // getCorner()
  
! 	/**
! 	 * preferredLayoutSize
! 	 * @param parent TODO
! 	 * @returns Dimension
! 	 */
! 	public Dimension preferredLayoutSize(Container parent) {
! 		return null; // TODO
! 	} // preferredLayoutSize()
  
! 	/**
! 	 * minimumLayoutSize
! 	 * @param parent TODO
! 	 * @returns Dimension
! 	 */
! 	public Dimension minimumLayoutSize(Container parent) {
! 		return null; // TODO
! 	} // minimumLayoutSize()
  
! 	/**
! 	 * layoutContainer
! 	 * @param parent TODO
! 	 */
! 	public void layoutContainer(Container parent) {
! 		// TODO
! 	} // layoutContainer()
  
! 	/**
! 	 * getViewportBorderBounds
! 	 * @param value0 TODO
! 	 * @returns Rectangle
! 	 */
! 	public Rectangle getViewportBorderBounds(JScrollPane scrollPane) {
! 		return null; // TODO
! 	} // getViewportBorderBounds()
  
  
! } // ScrollPaneLayout
--- 57,475 ----
  public class ScrollPaneLayout
    implements LayoutManager, ScrollPaneConstants, Serializable
  {
!   private static final long serialVersionUID = -4480022884523193743L;
  
!   public static class UIResource extends ScrollPaneLayout 
!     implements javax.swing.plaf.UIResource {
!     public UIResource() {
!     }
!   }
  
!   protected JViewport viewport;
!   protected JScrollBar vsb;
!   protected JScrollBar hsb;
!   protected JViewport rowHead;
!   protected JViewport colHead;
!   protected Component lowerLeft;
!   protected Component lowerRight;
!   protected Component upperLeft;
!   protected Component upperRight;
!   protected int vsbPolicy;
!   protected int hsbPolicy;
  
!   public ScrollPaneLayout() {
! 		
!   }
  
!   public void syncWithScrollPane(JScrollPane scrollPane) {
!     viewport = scrollPane.getViewport();
!     rowHead = scrollPane.getRowHeader();
!     colHead = scrollPane.getColumnHeader();
!     vsb = scrollPane.getVerticalScrollBar();
!     hsb = scrollPane.getHorizontalScrollBar();
!     vsbPolicy = scrollPane.getVerticalScrollBarPolicy();
!     hsbPolicy = scrollPane.getHorizontalScrollBarPolicy();
!     lowerLeft = scrollPane.getCorner(LOWER_LEFT_CORNER);
!     lowerRight = scrollPane.getCorner(LOWER_RIGHT_CORNER);
!     upperLeft = scrollPane.getCorner(UPPER_LEFT_CORNER);
!     upperRight = scrollPane.getCorner(UPPER_RIGHT_CORNER);    
!   }
  
+   protected Component addSingletonComponent(Component oldComponent,
+                                             Component newComponent) {
+     return null;
+   }
  
!   public void addLayoutComponent(String key, Component component) 
!   {
!     if (key == VIEWPORT)
!       viewport = (JViewport) component;
!     else if (key == VERTICAL_SCROLLBAR)
!       vsb = (JScrollBar) component;
!     else if (key == HORIZONTAL_SCROLLBAR)
!       hsb = (JScrollBar) component;
!     else if (key == ROW_HEADER)
!       rowHead = (JViewport) component;
!     else if (key == COLUMN_HEADER)
!       colHead = (JViewport) component;
!     else if (key == LOWER_RIGHT_CORNER)
!       lowerRight = component;
!     else if (key == UPPER_RIGHT_CORNER)
!       upperRight = component;
!     else if (key == LOWER_LEFT_CORNER)
!       lowerLeft = component;
!     else if (key == UPPER_LEFT_CORNER)
!       upperLeft = component;
!   }
  
+   public void removeLayoutComponent(Component component) {
+     if (component == viewport)
+       viewport = null;
+     else if (component == vsb)
+       vsb = null;
+     else if (component == hsb)
+       hsb = null;
+     else if (component == rowHead)
+       rowHead = null;
+     else if (component == colHead)
+       colHead = null;
+     else if (component == lowerRight)
+       lowerRight = null;
+     else if (component == upperRight)
+       upperRight = null;
+     else if (component == lowerLeft)
+       lowerLeft = null;
+     else if (component == upperLeft)
+       upperLeft = null;
+   }
  
!   public int getVerticalScrollBarPolicy()
!   {
!     return vsbPolicy;
!   }
  
!   public void setVerticalScrollBarPolicy(int policy)
!   {
!     vsbPolicy = policy;
!   }
  
!   public int getHorizontalScrollBarPolicy()
!   {
!     return hsbPolicy;
!   }
  
!   public void setHorizontalScrollBarPolicy(int policy)
!   {
!     hsbPolicy = policy;
!   }
  
!   public JViewport getViewport()
!   {
!     return viewport;
!   }
  
!   public JScrollBar getHorizontalScrollBar()
!   {
!     return hsb;
!   }
  
!   public JScrollBar getVerticalScrollBar()
!   {
!     return vsb;
!   }
  
!   public JViewport getRowHeader()
!   {
!     return rowHead;
!   }
  
!   public JViewport getColumnHeader()
!   {
!     return colHead;
!   }
  
!   public Component getCorner(String key)
!   {
!     if (key == LOWER_RIGHT_CORNER)
!       return lowerRight;
!     else if (key == UPPER_RIGHT_CORNER)
!       return upperRight;
!     else if (key == LOWER_LEFT_CORNER)
!       return lowerLeft;
!     else if (key == UPPER_LEFT_CORNER)
!       return upperLeft;
!     return null;
!   }
  
!   private static void maybeSetPreferredSize(JComponent src, Dimension dim)
!   {
!     Dimension tmp = null;
!     if (src != null)
!       tmp = src.getPreferredSize();
!     if (tmp != null)
!       dim.setSize(tmp);        
!   }
  
!   private static void maybeSetMinimumSize(JComponent src, Dimension dim)
!   {
!     Dimension tmp = null;
!     if (src != null)
!       tmp = src.getMinimumSize();
!     if (tmp != null)
!       dim.setSize(tmp);
!   }
  
+   public Dimension preferredLayoutSize(Container parent) 
+   {
+     if (parent != null && parent instanceof JScrollPane)
+       {
+         JScrollPane sc = (JScrollPane) parent;
+         synchronized (sc.getTreeLock ())
+           {
+             Dimension insetsSize = new Dimension(0,0); 
+             Dimension viewportSize = new Dimension(0,0); 
+             Dimension viewportInsetsSize = new Dimension(0,0); 
+             Dimension columnHeaderSize = new Dimension(0,0); 
+             Dimension rowHeaderSize = new Dimension(0,0); 
+             Dimension verticalScrollBarSize = new Dimension(0,0); 
+             Dimension horizontalScrollBarSize = new Dimension(0,0); 
  
!             Insets insets = sc.getInsets();
!             Border viewportBorder = sc.getViewportBorder();
!             Insets viewportInsets = null;
  
!             if (viewportBorder != null)
!               {
!                 viewportInsets = viewportBorder.getBorderInsets(parent);
!                 if (viewportInsets != null)
!                   viewportInsetsSize.setSize(viewportInsets.left + viewportInsets.right,
!                                              viewportInsets.top + viewportInsets.bottom);
!               }
  
+             if (insets != null)
+               insetsSize.setSize(insets.left + insets.right,
+                                  insets.top + insets.bottom);
  
!             if (viewport != null)
!               {
!                 Component view = null;
!                 Scrollable scr = null;
!                 Dimension pref = null;
!                 
!                 view = viewport.getView();
!                 if (view != null && view instanceof Scrollable)
!                   scr = (Scrollable) view;
!                 if (scr != null)
!                   pref = scr.getPreferredScrollableViewportSize();
!                 if (pref == null)
!                   pref = viewport.getPreferredSize();
!                 if (pref != null)
!                   viewportSize.setSize(pref);
!               }
!                        
!             maybeSetPreferredSize(colHead, columnHeaderSize);
!             maybeSetPreferredSize(rowHead, rowHeaderSize);
!             maybeSetPreferredSize(vsb, verticalScrollBarSize);
!             maybeSetPreferredSize(hsb, horizontalScrollBarSize);
  
!             return new Dimension(insetsSize.width 
!                                  + viewportSize.width
!                                  + viewportInsetsSize.width
!                                  + rowHeaderSize.width
!                                  + verticalScrollBarSize.width,
!                                  insetsSize.height
!                                  + viewportSize.height
!                                  + viewportInsetsSize.height
!                                  + columnHeaderSize.height
!                                  + horizontalScrollBarSize.height);
!           }
!       }
!     else
!       {
!         return new Dimension(0,0);
!       }
!   }
  
!   public Dimension minimumLayoutSize(Container parent)
!   {
!     if (parent instanceof JScrollPane)
!       {
!         JScrollPane sc = (JScrollPane) parent;
!         synchronized (sc.getTreeLock ())
!           {
!             Dimension insetsSize = new Dimension(0,0); 
!             Dimension viewportSize = new Dimension(0,0); 
!             Dimension viewportInsetsSize = new Dimension(0,0); 
!             Dimension columnHeaderSize = new Dimension(0,0); 
!             Dimension rowHeaderSize = new Dimension(0,0); 
!             Dimension verticalScrollBarSize = new Dimension(0,0); 
!             Dimension horizontalScrollBarSize = new Dimension(0,0); 
  
!             Insets insets = sc.getInsets();
!             Border viewportBorder = sc.getViewportBorder();
!             Insets viewportInsets = null;
  
!             if (viewportBorder != null)
!               {
!                 viewportInsets = viewportBorder.getBorderInsets(parent);
!                 if (viewportInsets != null)
!                   viewportInsetsSize.setSize(viewportInsets.left + viewportInsets.right,
!                                              viewportInsets.top + viewportInsets.bottom);
!               }
!             
!             if (insets != null)
!               insetsSize.setSize(insets.left + insets.right,
!                                  insets.top + insets.bottom);
  
!             maybeSetMinimumSize(colHead, columnHeaderSize);
!             maybeSetMinimumSize(rowHead, rowHeaderSize);
!             
!             if (vsbPolicy != VERTICAL_SCROLLBAR_NEVER)
!               maybeSetMinimumSize(vsb, verticalScrollBarSize);
  
!             if (hsbPolicy != HORIZONTAL_SCROLLBAR_NEVER)
!               maybeSetMinimumSize(hsb, horizontalScrollBarSize);
!             
!             return new Dimension(insetsSize.width 
!                                  + viewportSize.width
!                                  + viewportInsetsSize.width
!                                  + rowHeaderSize.width
!                                  + verticalScrollBarSize.width,
!                                  insetsSize.height
!                                  + viewportSize.height
!                                  + viewportInsetsSize.height
!                                  + columnHeaderSize.height
!                                  + horizontalScrollBarSize.height);
!           }
!       }
!     else
!       {
!         return new Dimension(0,0);
!       }
!   }
  
!   /**
!    *
!    *     +----+--------------------+----+ y1
!    *     | c1 |   column header    | c2 |
!    *     +----+--------------------+----+ y2
!    *     | r  |                    | v  |
!    *     | o  |                    |    |
!    *     | w  |                    | s  |
!    *     |    |                    | r  |
!    *     | h  |                    | o  |
!    *     | e  |      viewport      | l  |
!    *     | a  |                    | l  |
!    *     | d  |                    | b  |
!    *     | e  |                    | a  |
!    *     | r  |                    | r  |
!    *     +----+--------------------+----+ y3
!    *     | c3 |    h scrollbar     | c4 |
!    *     +----+--------------------+----+ y4
!    *    x1   x2                   x3   x4
!    *   
!    */
!   public void layoutContainer(Container parent)
!   {
!     if (parent instanceof JScrollPane)
!       {
!         JScrollPane sc = (JScrollPane) parent;
!         synchronized (sc.getTreeLock ())
!           {
!             JViewport viewport = sc.getViewport();
!             Dimension viewSize = viewport.getViewSize(); 
!             Point viewPos = viewport.getViewPosition(); 
  
!             int x1 = 0, x2 = 0, x3 = 0, x4 = 0;
!             int y1 = 0, y2 = 0, y3 = 0, y4 = 0;
  
!             Rectangle scrollPaneBounds = SwingUtilities.calculateInnerArea(sc, null);
  
!             x1 = scrollPaneBounds.x;
!             y1 = scrollPaneBounds.y;
!             x4 = scrollPaneBounds.x + scrollPaneBounds.width;
!             y4 = scrollPaneBounds.y + scrollPaneBounds.height;
!             
!             if (colHead != null)
!               y2 = y1 + colHead.getPreferredSize().height;
!             else
!               y2 = y1;
  
!             if (rowHead != null)
!               x2 = x1 + rowHead.getPreferredSize().width;
!             else
!               x2 = x1;
  
!             int vsbPolicy = sc.getVerticalScrollBarPolicy();
!             int hsbPolicy = sc.getHorizontalScrollBarPolicy();
  
!             x3 = x4 - vsb.getPreferredSize().width;
!             y3 = y4 - hsb.getPreferredSize().height;
  
!             boolean showVsb = 
!               (vsb != null)
!               && ((vsbPolicy == VERTICAL_SCROLLBAR_ALWAYS)
!                   || (vsbPolicy == VERTICAL_SCROLLBAR_AS_NEEDED 
!                       && viewSize.height > (y3 - y2)));
  
!             boolean showHsb = 
!               (hsb != null)
!               && ((hsbPolicy == HORIZONTAL_SCROLLBAR_ALWAYS)
!                   || (hsbPolicy == HORIZONTAL_SCROLLBAR_AS_NEEDED 
!                       && viewSize.width > (x3 - x2)));
!             
!             if (!showVsb)
!               x3 = x4;
!             
!             if (!showHsb)
!               y3 = y4;
  
!             // now set the layout
  
!             if (viewport != null)
!               viewport.setBounds(new Rectangle(x2, y2, x3-x2, y3-y2));
  
!             if (colHead != null)
!               colHead.setBounds(new Rectangle(x2, y1, x3-x2, y2-y1));
  
+             if (rowHead != null)
+               rowHead.setBounds(new Rectangle(x1, y2, x2-x1, y3-y2));
  
!             if (showVsb)
!               {
!                 vsb.setVisible(true);
!                 vsb.setBounds(new Rectangle(x3, y2, x4-x3, y3-y2));
!               }
!             else if (vsb != null)
!               vsb.setVisible(false);
! 
!             if (showHsb)
!               {
!                 hsb.setVisible(true);
!                 hsb.setBounds(new Rectangle(x2, y3, x3-x2, y4-y3));
!               }
!             else if (hsb != null)
!               hsb.setVisible(false);
! 
!             if (upperLeft != null)
!               upperLeft.setBounds(new Rectangle(x1, y1, x2-x1, y2-y1));
! 
!             if (upperRight != null)
!               upperRight.setBounds(new Rectangle(x3, y1, x4-x3, y2-y1));
! 
!             if (lowerLeft != null)
!               lowerLeft.setBounds(new Rectangle(x1, y3, x2-x1, y4-y3));
! 
!             if (lowerRight != null)
!               lowerRight.setBounds(new Rectangle(x3, y3, x4-x3, y4-y3));
! 
!           }
!       }
!   }
! 
!   public Rectangle getViewportBorderBounds(JScrollPane scrollPane) {
!     return null;
!   }
! 
! 
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/SizeRequirements.java gcc-4.0.0/libjava/javax/swing/SizeRequirements.java
*** gcc-3.4.3/libjava/javax/swing/SizeRequirements.java	Wed Jun 11 13:20:39 2003
--- gcc-4.0.0/libjava/javax/swing/SizeRequirements.java	Wed Feb 16 20:02:41 2005
*************** import java.io.Serializable;
*** 47,53 ****
   */
  public class SizeRequirements implements Serializable
  {
!   static final long serialVersionUID = 9217749429906736553L;
  
  	//-------------------------------------------------------------
  	// Variables --------------------------------------------------
--- 47,53 ----
   */
  public class SizeRequirements implements Serializable
  {
!   private static final long serialVersionUID = 9217749429906736553L;
  
  	//-------------------------------------------------------------
  	// Variables --------------------------------------------------
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/SortingFocusTraversalPolicy.java gcc-4.0.0/libjava/javax/swing/SortingFocusTraversalPolicy.java
*** gcc-3.4.3/libjava/javax/swing/SortingFocusTraversalPolicy.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/SortingFocusTraversalPolicy.java	Wed Feb 16 20:02:41 2005
***************
*** 0 ****
--- 1,333 ----
+ /* SortingFocusTraversalPolicy.java --
+    Copyright (C) 2005  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.util.Comparator;
+ import java.util.Iterator;
+ import java.util.TreeSet;
+ 
+ /**
+  * @author Graydon Hoare
+  * @author Michael Koch
+  * 
+  * @since 1.4
+  */
+ public class SortingFocusTraversalPolicy 
+   extends InternalFrameFocusTraversalPolicy
+ {
+   /**
+    * The comparator used to sort elements in the focus traversal cycle
+    * managed by this class.
+    */
+   Comparator comparator;
+ 
+   /**
+    * <p>Whether or not to perform an "implicit DownCycle" when selecting
+    * successor components within a focus cycle.</p>
+    *
+    * <p>When this is true, requesting the "next" component following a
+    * component which is a focus cycle root (and, necessarily, a container)
+    * will enter the focus cycle root of that container, and return its
+    * default focus.</p>
+    *
+    * <p>When this property is false, requesting the "next" component will
+    * simply advance within the containing focus cycle, subject to the
+    * {@link #comparator} order and the {@link #accept} judgment.</p>
+    *
+    * @see #getNextFocusableComponent
+    */
+   boolean implicitDownCycleTraversal = true;
+   
+   /**
+    * Creates a new <code>SortingFocusTraversalPolicy</code> with no
+    * comparator set.
+    */
+   protected SortingFocusTraversalPolicy()
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * Creates a new <code>SortingFocusTraversalPolicy</code> with the given
+    * comparator set.
+    *
+    * @param the comparator to set
+    */
+   public SortingFocusTraversalPolicy(Comparator comparator)
+   {
+     this.comparator = comparator;
+   }
+ 
+   /**
+    * Decide whether a component is an acceptable focus owner. 
+    *
+    * @param comp The component which is a candidate for focus ownership.
+    *
+    * @return true if the component is focusable, displayable, visible, and
+    * enabled; otherwise false
+    */
+   protected boolean accept(Component comp)
+   {
+     return (comp.isVisible()
+ 	    && comp.isDisplayable()
+ 	    && comp.isEnabled()
+ 	    && comp.isFocusable());
+   }
+ 
+   /**
+    * Get the current value of the {@link #comparator} property.
+    *
+    * @return the current value of the property
+    * 
+    * @see #setComparator
+    */
+   protected Comparator getComparator()
+   {
+     return comparator;
+   }
+ 
+   /**
+    * Set the current value of the {@link #comparator} property.
+    *
+    * @param comparator the new value of the property
+    * 
+    * @see #getComparator
+    */
+   protected void setComparator(Comparator comparator)
+   {
+     this.comparator = comparator;
+   }
+ 
+   private TreeSet getSortedCycle(Container root, TreeSet set)
+   {
+     if (set == null)
+       set = (getComparator() == null 
+              ? new TreeSet()
+              : new TreeSet(getComparator()));
+     
+     if (root != null) 
+       {
+         Component[] comps = root.getComponents();
+         for (int i = 0; i < comps.length; ++i)
+           {
+             Component c = comps[i];
+             if (accept(c))
+               set.add(c);
+             if (c instanceof Container)
+               getSortedCycle((Container) c, set);
+           }
+       }
+     return set;
+   }
+ 
+   /**
+    * Return the component which follows the specified component in this
+    * focus cycle, relative to the order imposed by {@link
+    * #comparator}. Candidate components are only considered if they are
+    * accepted by the {@link #accept} method.
+    *
+    * If {@link #getImplicitDownCycleTraversal} is <code>true</code> and the
+    * <code>comp</code> is a focus cycle root, an "implicit DownCycle"
+    * occurs and the method returns the
+    * <code>getDefaultComponent(comp)</code>.
+    * 
+    * @param root the focus cycle root to search for a successor within
+    * @param comp the component to search for the successor of
+    *
+    * @return the component following the specified component under
+    * the specified root, or null if no such component is found
+    * 
+    * @throws IllegalArgumentException if either argument is null, or
+    * if the root is not a focus cycle root of the component
+    */
+   public Component getComponentAfter(Container root, 
+                                      Component comp)
+   {
+     if (comp == null || root == null || !comp.isFocusCycleRoot(root))
+       throw new IllegalArgumentException();
+ 
+     if (getImplicitDownCycleTraversal() 
+         && comp instanceof Container
+         && ((Container)comp).isFocusCycleRoot())
+       {
+         return getDefaultComponent((Container) comp);
+       }
+ 
+     TreeSet set = getSortedCycle(root, null);
+     Iterator i = set.iterator();
+     while (i.hasNext())
+       {
+         Component c = (Component) i.next();
+         if (c != null && c.equals(comp))
+           {
+             if (i.hasNext())
+               return (Component) i.next();
+             break;
+           }
+       }
+     return null;
+   }
+ 
+ 
+   /**
+    * Return the component which precedes the specified component in this
+    * focus cycle, relative to the order imposed by {@link
+    * #comparator}. Candidate components are only considered if they are
+    * accepted by the {@link #accept} method.
+    * 
+    * @param root the focus cycle root to search for a predecessor within
+    * @param comp the component to search for the predecessor of
+    *
+    * @return the component preceding the specified component under the
+    * specified root, or null if no such component is found
+    * 
+    * @throws IllegalArgumentException if either argument is null, or
+    * if the root is not a focus cycle root of the component
+    */
+   public Component getComponentBefore(Container root, 
+                                       Component comp)
+   {
+     if (comp == null || root == null || !comp.isFocusCycleRoot(root))
+       throw new IllegalArgumentException();
+     TreeSet set = getSortedCycle(root, null);
+     Iterator i = set.iterator();
+     Component prev = null;
+     while (i.hasNext())
+       {
+         Component c = (Component) i.next();
+         if (c != null && c.equals(comp))
+           break;
+         prev = c;
+       }
+     return prev;
+   }
+ 
+   /**
+    * Return the default component of <code>root</code>, which is by default
+    * the same as the first component, returned by {@link
+    * #getFirstComponent}.
+    *
+    * @param root the focus cycle root to return the default component of
+    *
+    * @return the default focus component for <code>root</code>
+    *
+    * @throws IllegalArgumentException if root is null
+    */
+   public Component getDefaultComponent(Container root)
+   {
+     return getFirstComponent(root);
+   }
+ 
+   /** 
+    * Return the first focusable component of the focus cycle root
+    * <code>comp</code> under the ordering imposed by the {@link
+    * #comparator} property. Candidate components are only considered if
+    * they are accepted by the {@link #accept} method.
+    *
+    * @param root the focus cycle root to search for the first component of
+    *
+    * @return the first component under <code>root</code>, or null if
+    * no components are found.
+    *
+    * @throws IllegalArgumentException if root is null
+    */
+   public Component getFirstComponent(Container root)
+   {
+     if (root == null)
+       throw new IllegalArgumentException();
+     TreeSet set = getSortedCycle(root, null);
+     Iterator i = set.iterator();
+     if (i.hasNext())
+       return (Component) i.next();
+     return null;
+   }
+   
+   /** 
+    * Return the last focusable component of the focus cycle root
+    * <code>comp</code> under the ordering imposed by the {@link
+    * #comparator} property. Candidate components are only considered if
+    * they are accepted by the {@link #accept} method.
+    *
+    * @param root the focus cycle root to search for the last component of
+    *
+    * @return the last component under <code>root</code>, or null if
+    * no components are found.
+    *
+    * @throws IllegalArgumentException if root is null
+    */
+   public Component getLastComponent(Container root)
+   {
+     if (root == null)
+       throw new IllegalArgumentException();
+     TreeSet set = getSortedCycle(root, null);
+     Iterator i = set.iterator();
+     Component last = null;
+     while (i.hasNext())
+       last = (Component) i.next();
+     return last;
+   }
+ 
+   /**
+    * Return the current value of the {@link implicitDownCycleTraversal}
+    * property.
+    *
+    * @return the current value of the property
+    * 
+    * @see setImplicitDownCycleTraversal
+    */
+   public boolean getImplicitDownCycleTraversal()
+   {
+     return implicitDownCycleTraversal;
+   }
+ 
+   /**
+    * Set the current value of the {@link implicitDownCycleTraversal}
+    * property.
+    *
+    * @param down the new value of the property
+    * 
+    * @see getImplicitDownCycleTraversal
+    */
+   public void setImplicitDownCycleTraversal(boolean down)
+   {
+     implicitDownCycleTraversal = down;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/SpinnerDateModel.java gcc-4.0.0/libjava/javax/swing/SpinnerDateModel.java
*** gcc-3.4.3/libjava/javax/swing/SpinnerDateModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/SpinnerDateModel.java	Sat Feb 19 09:22:39 2005
***************
*** 0 ****
--- 1,237 ----
+ /* SpinnerDateModel.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.io.Serializable;
+ import java.util.Calendar;
+ import java.util.Date;
+ 
+ /**
+  * SpinnerDateModel
+  *
+  * Implements a SpinnerModel for dates, rotating a calendar field such as 
+  * month, year, day, week, hour, minute.
+  *
+  * @author Sven de Marothy
+  * @version 0.1 (first implementation)
+  */
+ public class SpinnerDateModel extends AbstractSpinnerModel
+   implements Serializable
+ {
+   private Calendar date;
+   private Comparable start;
+   private Comparable end;
+   private int calendarField;
+ 
+   /**
+    * For compatability with Sun's JDK
+    * FIXME: what's the number? And which fields should be serialized?
+    */
+   private static final long serialVersionUID = 1L;
+ 
+   /**
+    * Constructs a SpinnerDateModel using the current date,
+    * no start or end limit, and Calendar.DAY_OF_MONTH as the calendar field.
+    */
+   public SpinnerDateModel()
+   {
+     this(new Date(), null, null, Calendar.DAY_OF_MONTH);
+   }
+ 
+   /**
+    * Constructs a SpinnerDateModel which spins a given calendar field,
+    * using a given date and start and end date limits.
+    * @param value - the initial Date value
+    * @param start - start limit, as a Date object, or <code>null</code>
+    * for no lower limit.
+    * @param end - end limit, or <code>null</code> for no upper limit.
+    * @param calendarField - the <code>Calendar</code> field to spin,
+    * (Calendar.ZONE_OFFSET and Calendar.DST_OFFSET are invalid)
+    */
+   public SpinnerDateModel(Date value, Comparable start, Comparable end,
+                           int calendarField)
+   {
+     date = Calendar.getInstance();
+     date.setTime(value);
+     this.start = start;
+     this.end = end;
+     setCalendarField(calendarField);
+   }
+ 
+   /**
+    * Returns the value of the Calendar field to spin.
+    */
+   public int getCalendarField()
+   {
+     return calendarField;
+   }
+ 
+   /**
+    * Returns the current date in the sequence.
+    * @return a <code>Date</code> object.
+    */
+   public Date getDate()
+   {
+     return date.getTime();
+   }
+ 
+   /**
+    * Returns the starting limit of the SpinnerModel.
+    * @return a Date object, or <code>null</code> if there is no limit.
+    */
+   public Comparable getStart()
+   {
+     return start;
+   }
+ 
+   /**
+    * Returns the end limit of the SpinnerModel.
+    * @return a Date object, or <code>null</code> if there is no limit.
+    */
+   public Comparable getEnd()
+   {
+     return end;
+   }
+ 
+   /**
+    * Returns the current date in the sequence,
+    * this method returns the same as <code>getDate()</code>.
+    * @return a <code>Date</code> object.
+    */
+   public Object getValue()
+   {
+     return date.getTime();
+   }
+ 
+   /**
+    * Returns the next date in the sequence, or <code>null</code> if the
+    * next date is equal to or past the end limit.
+    * @return a Date object, or <code>null</code>.
+    */
+   public Object getNextValue()
+   {
+     Calendar nextCal = Calendar.getInstance();
+     nextCal.setTime(date.getTime());
+     nextCal.roll(calendarField, true);
+     Date nextDate = nextCal.getTime();
+     if (end != null)
+       if (end.compareTo(nextDate) < 0)
+ 	return null;
+     return nextDate;
+   }
+ 
+   /**
+    * Returns the previous date in the sequence, or <code>null</code> if the
+    * next date is equal to or past the end limit.
+    * @return a Date object, or <code>null</code>.
+    */
+   public Object getPreviousValue()
+   {
+     Calendar prevCal = Calendar.getInstance();
+     prevCal.setTime(date.getTime());
+     prevCal.roll(calendarField, false);
+     Date prevDate = prevCal.getTime();
+     if (end != null)
+       if (end.compareTo(prevDate) > 0)
+ 	return null;
+     return prevDate;
+   }
+ 
+   /**
+    * Sets the date field to change. It must be a valid Calendar field,
+    * excluding Calendar.ZONE_OFFSET and Calendar.DST_OFFSET.
+    * @param calendarField - the calendar field to set.
+    */
+   public void setCalendarField(int calendarField)
+   {
+     if (calendarField < 0 || calendarField >= Calendar.FIELD_COUNT
+         || calendarField == Calendar.ZONE_OFFSET
+         || calendarField == Calendar.DST_OFFSET)
+       throw new IllegalArgumentException("Illegal calendarField");
+ 
+     if (this.calendarField != calendarField)
+       {
+ 	this.calendarField = calendarField;
+ 	fireStateChanged();
+       }
+   }
+ 
+   /**
+    * Sets the starting date limit for the sequence.
+    *
+    * @param start - a Date object of the limit date,
+    * or <code>null</code> for no limit.
+    */
+   public void setStart(Comparable start)
+   {
+     if (this.start != start)
+       {
+ 	this.start = start;
+ 	fireStateChanged();
+       }
+   }
+ 
+   /**
+    * Sets the end date limit for the sequence.
+    *
+    * @param end - a Date object of the limit date,
+    * or <code>null</code> for no limit.
+    */
+   public void setEnd(Comparable end)
+   {
+     if (this.end != end)
+       {
+ 	this.end = end;
+ 	fireStateChanged();
+       }
+   }
+ 
+   /**
+    * Sets the current date in the sequence.
+    *
+    * @param value - a Date object.
+    */
+   public void setValue(Object value)
+   {
+     if (! (value instanceof Date) || value == null)
+       throw new IllegalArgumentException("Value not a date.");
+     date.setTime((Date) value);
+     fireStateChanged();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/SpinnerListModel.java gcc-4.0.0/libjava/javax/swing/SpinnerListModel.java
*** gcc-3.4.3/libjava/javax/swing/SpinnerListModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/SpinnerListModel.java	Thu Feb 17 07:48:52 2005
***************
*** 0 ****
--- 1,296 ----
+ /* SpinnerListModel.java -- A spinner model backed by a list or an array.
+    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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.io.Serializable;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.List;
+ 
+ /**
+  * An implementation of <code>SpinnerModel</code> which uses the values
+  * contained within a list or an array.  The backing list or array is
+  * only stored as a reference within the class.  As a result, changes
+  * made elsewhere to the members of the list or array are reflected by
+  * this model.
+  * <p>
+  *
+  * The model itself inherits a list of <code>ChangeListener</code>s from
+  * <code>AbstractSpinnerModel</code>.  As this code is unaware of changes
+  * made to the backing list or array, it is the responsibility of the
+  * application using the model to invoke <code>fireStateChanged()</code>,
+  * in order to notify any <code>ChangeListener</code>s, when the list or array
+  * changes.  The model handles notification when the reference itself
+  * is changed via <code>setList()</code> or when the current value is
+  * set directly using <code>setValue()</code>.
+  *
+  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+  * @see SpinnerModel
+  * @see AbstractSpinnerModel
+  * @see JSpinner
+  * @since 1.4
+  */
+ 
+ public class SpinnerListModel
+     extends AbstractSpinnerModel
+     implements Serializable
+ {
+     /**
+      * For compatability with Sun's JDK
+      */
+     private static final long serialVersionUID = 3358804052191994516L;
+ 
+     /**
+      * The backing list for this model.
+      */
+     private List list;
+ 
+     /**
+      * The current index in the list.
+      */
+     private transient int index;
+ 
+     /**
+      * Constructs a default <code>SpinnerListModel</code>.  This
+      * is a model backed by a list containing only the single
+      * <code>String</code> element, "empty".
+      */
+     public SpinnerListModel()
+     {
+ 	List defaultList;
+ 
+ 	/* Create an empty list */
+ 	defaultList = new ArrayList();
+ 	/* Add the string "empty" */
+ 	defaultList.add("empty");
+ 	/* Set the list */
+ 	setList(defaultList);
+     }
+ 
+     /**
+      * Constructs a <code>SpinnerListModel</code> using the supplied list.
+      * The model maintains a reference to this list, and returns
+      * consecutive elements in response to calls to <code>getNextValue()</code>.
+      * The initial value is that at position 0, so an initial call
+      * to <code>getValue()</code> returns the same as <code>list.get(0)</code>.
+      *
+      * @param list The list to use for this model.
+      * @throws IllegalArgumentException if the list is null or contains no
+      *         elements.
+      * @see SpinnerListModel#getNextValue()
+      * @see SpinnerListModel#getValue()
+      */ 
+     public SpinnerListModel(List list)
+     {
+ 	/* Retain a reference to the valid list */
+         setList(list);
+     }
+ 
+     /**
+      * Constructs a <code>SpinnerListModel</code> using the supplied array.
+      * The model stores a reference to the wrapper list returned by
+      * <code>Arrays.asList()</code>.  The wrapper list reflects modifications
+      * in the underlying array, so these changes will also be reflected
+      * by the model.  The model produces consecutive elements from the array
+      * in response to calls to <code>getNextValue()</code>.  The initial
+      * value returned by <code>getValue()</code> is the same as
+      * <code>array[0]</code>.
+      *
+      * @param array The array to use for this model.
+      * @throws IllegalArgumentException if the array is null or contains
+      *         no elements.
+      * @see Arrays#asList(Object[])
+      * @see SpinnerListModel#getNextValue()
+      * @see SpinnerListModel#getValue()
+      */
+     public SpinnerListModel(Object[] array)
+     {
+ 	/* Check for a null or zero-sized array */
+ 	if (array == null || array.length == 0)
+ 	    {
+ 		throw new IllegalArgumentException("The supplied array was invalid.");
+ 	    }
+ 	/* 
+ 	   Retain a reference to a wrapper around the valid array 
+ 	   The array, in list form, will be tested again here, but we can't really
+ 	   avoid this -- a null value to Arrays.asList will throw a NullPointerException
+ 	*/ 
+ 	setList(Arrays.asList(array));
+     }
+ 
+     /**
+      * Returns the backing list for this model.
+      *
+      * @return The backing list.
+      */
+     public List getList()
+     {
+ 	return list;
+     }
+     
+     /**
+      * Returns the next value from the list, which is the same as the element
+      * stored at the current index + 1.  Null is returned if there are no more
+      * values to be returned (the end of the list has been reached).  An
+      * ambiguity can occur here, as null may also be returned as a valid list
+      * element.  This operation does not change the current value.
+      *
+      * @return The next value from the list or null.
+      */
+     public Object getNextValue()
+     {
+ 	/* Check for a next value */
+ 	if (index < (list.size() - 1))
+ 	    {
+ 		/* Return the element at the next index */
+ 		return list.get(index + 1);
+ 	    }
+ 	else
+ 	    {
+ 		/* Return null as this is the end of the list */
+ 		return null;
+ 	    }
+     }
+ 
+     /**
+      * Returns the previous value from the list, which is the same as the element
+      * stored at the current index - 1.  Null is returned if there are no more
+      * values to be returned (the start of the list has been reached).  An
+      * ambiguity can occur here, as null may also be returned as a valid list
+      * element.  This operation does not change the current value.
+      *
+      * @return The previous value from the list or null.
+      */
+     public Object getPreviousValue()
+     {
+ 	/* Check for a previous value. */
+ 	if (index > 0) 
+ 	    {
+ 		/* Return the element at the previous position */
+ 		return list.get(index - 1);
+ 	    }
+ 	else
+ 	    {
+ 		/* Return null as this is the start of the list */
+ 		return null;
+ 	    }
+     }
+ 
+     /**
+      * Returns the current value of the model.  Initially, this will
+      * be the element at position 0.  On later invocations, this will
+      * be the last element returned by <code>getNextValue()</code>
+      * or <code>getPreviousValue()</code>.
+      *
+      * @return The current value.
+      * @see SpinnerListModel#getPreviousValue()
+      * @see SpinnerListModel#getNextValue()
+      */
+     public Object getValue()
+     {
+ 	return list.get(index);
+     }
+ 
+     /**
+      * Changes the backing list for this model.  The model only stores
+      * a reference to the list, so any changes made to the list elsewhere
+      * will be reflected in the values returned by the model.  A
+      * <code>ChangeEvent</code> is fired if the list being used actually
+      * changes (i.e. the new list is not referentially equal (!=) to the
+      * old one).
+      *
+      * @param list The new list to use.
+      * @throws IllegalArgumentException if the list is null or contains
+      *         no elements.
+      * @see ChangeEvent
+      */
+     public void setList(List list)
+     {
+ 	/* Check for null or zero size list */
+ 	if (list == null || list.size() == 0)
+ 	    {
+ 		throw new IllegalArgumentException("The supplied list was invalid.");
+ 	    }
+ 	/* Check for a change of referenced list */
+ 	if (this.list != list)
+ 	    {
+ 		/* Store the new list */
+ 		this.list = list;
+ 		/* Notify listeners of a change */
+ 		fireStateChanged();
+ 	    }
+ 	/* We reset the other values in either case */
+ 	/* Set the index to 0 */
+ 	index = 0;
+     }
+ 
+     /**
+      * Sets the current value of the model to be the one supplied.
+      * The value must exist within the backing list in order for
+      * the change to take place.  Otherwise, an exception is thrown.
+      * The value used is the first occurrence of the value within
+      * the backing list.  Listeners are notified of this change.
+      * Following the change, <code>getNextValue()</code> and
+      * <code>getPreviousValue()</code> return the objects following
+      * and prior to the supplied value, respectively. 
+      *
+      * @param value The requested new value of the list.
+      * @throws IllegalArgumentException if the supplied value does
+      *         not exist in the backing list.
+      * @see SpinnerListModel#getPreviousValue()
+      * @see SpinnerListModel#getNextValue()
+      */
+     public void setValue(Object value)
+     {
+ 	int valueIndex;
+ 
+ 	/* Search for the value in the list */
+ 	valueIndex = list.indexOf(value);
+ 	/* Check for the value being found */
+ 	if (valueIndex == -1)
+ 	    {
+ 		throw new IllegalArgumentException("The supplied value does not "
+ 						   + "exist in this list");
+ 	    }
+ 	/* Make the indices match */
+ 	index = valueIndex;
+ 	/* Notify the listeners */
+ 	fireStateChanged();
+     }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/SpinnerModel.java gcc-4.0.0/libjava/javax/swing/SpinnerModel.java
*** gcc-3.4.3/libjava/javax/swing/SpinnerModel.java	Sun Oct 12 13:20:49 2003
--- gcc-4.0.0/libjava/javax/swing/SpinnerModel.java	Tue Nov 30 23:58:59 2004
***************
*** 1,5 ****
  /* SpinnerModel.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SpinnerModel.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import javax.swing.event.ChangeListener;
*** 45,54 ****
   */
  public interface SpinnerModel
  {
!   void setValue (Object value);
!   public Object getValue ();
!   public Object getNextValue ();
!   public Object getPreviousValue ();
!   void addChangeListener (ChangeListener listener);
!   void removeChangeListener (ChangeListener listener);
  }
--- 45,109 ----
   */
  public interface SpinnerModel
  {
!   /**
!    * Sets the current value of the model to that specified.
!    * Implementations can choose to refuse to accept the value
!    * and throw an exception instead.  For example, a date model
!    * may throw invalid dates, or a list model may throw out
!    * values which don't exist in the underlying list.  Models
!    * may also throw out unusual values, such as null.  The decision
!    * is left to the discretion of the implementator.  If the
!    * operation succeeds, the implementation should also notify
!    * any registered <code>ChangeListener</code>s.
!    *
!    * @param value The new value of the model.
!    * @throws IllegalArgumentException if the model does not accept
!    *         the given value.
!    */
!   void setValue(Object value);
! 
!   /**
!    * Returns the current value of the model.
!    *
!    * @return The current value.
!    */
!   Object getValue();
! 
!   /**
!    * Returns the next value from the model.  If the model is bounded,
!    * this method may return null when the upper bound is met.
!    * The current value is not changed.
!    *
!    * @return The next value, or null if there are no more values
!    *         to retrieve.
!    */
!   Object getNextValue();
! 
!   /**
!    * Returns the previous value from the model.  If the model is
!    * bounded, this method may return null when the lower bound is
!    * met.  The current value is not changed.
!    *
!    * @return The previous value, or null if there are no more
!    *         values to retrieve.
!    */
!   Object getPreviousValue();
! 
!   /**
!    * Adds a <code>ChangeListener</code> to the list of registered
!    * listeners.  Each listener is notified when the current value
!    * is changed.
!    *
!    * @param listener The new listener to register.
!    */
!   void addChangeListener(ChangeListener listener);
! 
!   /**
!    * Removes a given <code>ChangeListener</code> from the list
!    * of registered listeners.
!    *
!    * @param listener The listener to remove.
!    */
!   void removeChangeListener(ChangeListener listener);
!     
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/SpinnerNumberModel.java gcc-4.0.0/libjava/javax/swing/SpinnerNumberModel.java
*** gcc-3.4.3/libjava/javax/swing/SpinnerNumberModel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/SpinnerNumberModel.java	Tue Nov 30 23:58:59 2004
***************
*** 0 ****
--- 1,298 ----
+ /* SpinnerNumberModel.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.io.Serializable;
+ 
+ /**
+  * SpinnerNumberModel
+  *
+  * @author Ka-Hing Cheung
+  * @version 1.0
+  */
+ public class SpinnerNumberModel extends AbstractSpinnerModel
+   implements Serializable
+ {
+   /**
+    * For compatability with Sun's JDK
+    */
+   private static final long serialVersionUID = 7279176385485777821L;
+ 
+   /** DOCUMENT ME! */
+   private Number value;
+ 
+   /** DOCUMENT ME! */
+   private Comparable minimum;
+ 
+   /** DOCUMENT ME! */
+   private Comparable maximum;
+ 
+   /** DOCUMENT ME! */
+   private Number stepSize;
+ 
+   /**
+    * Creates a <code>SpinnerNumberModel</code> with initial value 0, step 1,
+    * and no maximum nor minimum.
+    */
+   public SpinnerNumberModel()
+   {
+     this(new Integer(0), null, null, new Integer(1));
+   }
+ 
+   /**
+    * Creates a <code>SpinnerNumberModel</code> with double precision
+    *
+    * @param value the initial value
+    * @param minimum the minimum value
+    * @param maximum the maximum value
+    * @param stepSize the step size
+    * @throws IllegalArgumentException if minimum &lt;= value &lt;= maximum does not
+    *                                  hold
+    */
+   public SpinnerNumberModel(double value, double minimum, double maximum,
+                             double stepSize)
+   {
+     this(new Double(value), new Double(minimum), new Double(maximum),
+          new Double(stepSize));
+   }
+ 
+   /**
+    * Creates a <code>SpinnerNumberModel</code> with integer precision
+    *
+    * @param value the initial value
+    * @param minimum the minimum value
+    * @param maximum the maximum value
+    * @param stepSize the step size
+    * @throws IllegalArgumentException if minimum &lt;= value &lt;= maximum does not
+    *                                  hold
+    */
+   public SpinnerNumberModel(int value, int minimum, int maximum, int stepSize)
+   {
+     this(new Integer(value), new Integer(minimum), new Integer(maximum),
+          new Integer(stepSize));
+   }
+ 
+   /**
+    * Creates a <code>SpinnerNumberModel</code> with <code>Number</code>s and
+    * <code>Comparable</code>s.
+    *
+    * @param value the initial value
+    * @param minimum the minimum value, if null there's no minimum
+    * @param maximum the maximum value, if null there's no maximum
+    * @param stepSize the step size
+    *
+    * @throws IllegalArgumentException if minimum &lt;= value &lt;= maximum
+    *         does not hold
+    */
+   public SpinnerNumberModel(Number value, Comparable minimum,
+                             Comparable maximum, Number stepSize)
+   {
+     if (stepSize == null)
+       throw new IllegalArgumentException("stepSize may not be null");
+     if (value == null)
+       throw new IllegalArgumentException("value may not be null");
+     if (minimum != null)
+       {
+ 	if (minimum.compareTo(value) > 0)
+ 	  throw new IllegalArgumentException("minimum is not <= value");
+       }
+     else
+       minimum = new Comparable()
+ 	  {
+ 	    public int compareTo(Object obj)
+ 	    {
+ 	      return -1;
+ 	    }
+ 	  };
+ 
+ 
+     if (maximum != null)
+       {
+ 	if (maximum.compareTo(value) < 0)
+ 	  throw new IllegalArgumentException("maximum is not >= value");
+       }
+     else
+       maximum = new Comparable()
+ 	  {
+ 	    public int compareTo(Object obj)
+ 	    {
+ 	      return 1;
+ 	    }
+ 	  };
+ 
+ 
+     this.value = value;
+     this.stepSize = stepSize;
+     this.minimum = minimum;
+     this.maximum = maximum;
+   }
+ 
+   /**
+    * Sets the new value and fire a change event
+    *
+    * @param value the new value
+    *
+    * @throws IllegalArgumentException if minimum &lt;= value &lt;= maximum
+    *         does not hold
+    */
+   public void setValue(Object value)
+   {
+     if (! (value instanceof Number))
+       throw new IllegalArgumentException("value must be a Number");
+ 
+     this.value = (Number) value;
+     fireStateChanged();
+   }
+ 
+   /**
+    * Gets the current value
+    *
+    * @return the current value
+    */
+   public Object getValue()
+   {
+     return value;
+   }
+ 
+   /**
+    * Gets the next value without changing the current value, or null if the
+    * current value is maximum.
+    *
+    * @return the next value
+    */
+   public Object getNextValue()
+   {
+     Number num;
+ 
+     if (value instanceof Double)
+       num = new Double(value.doubleValue() + stepSize.doubleValue());
+     else if (value instanceof Float)
+       num = new Double(value.floatValue() + stepSize.floatValue());
+     else if (value instanceof Long)
+       num = new Long(value.longValue() + stepSize.longValue());
+     else if (value instanceof Integer)
+       num = new Integer(value.intValue() + stepSize.intValue());
+     else if (value instanceof Short)
+       num = new Short((short) (value.shortValue() + stepSize.shortValue()));
+     else
+       num = new Byte((byte) (value.byteValue() + stepSize.byteValue()));
+ 
+     return maximum.compareTo(num) >= 0 ? num : null;
+   }
+ 
+   /**
+    * Gets the previous value without changing the current value, or null if
+    * the current value is minimum.
+    *
+    * @return the previous value
+    */
+   public Object getPreviousValue()
+   {
+     Number num;
+ 
+     if (value instanceof Double)
+       num = new Double(value.doubleValue() - stepSize.doubleValue());
+     else if (value instanceof Float)
+       num = new Double(value.floatValue() - stepSize.floatValue());
+     else if (value instanceof Long)
+       num = new Long(value.longValue() - stepSize.longValue());
+     else if (value instanceof Integer)
+       num = new Integer(value.intValue() - stepSize.intValue());
+     else if (value instanceof Short)
+       num = new Short((short) (value.shortValue() - stepSize.shortValue()));
+     else
+       num = new Byte((byte) (value.byteValue() - stepSize.byteValue()));
+ 
+     return minimum.compareTo(num) <= 0 ? num : null;
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   public Number getNumber()
+   {
+     return value;
+   }
+ 
+   public Comparable getMinimum()
+   {
+     return minimum;
+   }
+ 
+   public void setMinimum(Comparable newMinimum)
+   {
+     if (minimum != newMinimum)
+       {
+ 	minimum = newMinimum;
+ 	fireStateChanged();
+       }
+   }
+ 
+   public Comparable getMaximum()
+   {
+     return maximum;
+   }
+ 
+   public void setMaximum(Comparable newMaximum)
+   {
+     if (maximum != newMaximum)
+       {
+ 	maximum = newMaximum;
+ 	fireStateChanged();
+       }
+   }
+ 
+   public Number getStepSize()
+   {
+     return stepSize;
+   }
+ 
+   public void setStepSize(Number newStepSize)
+   {
+     if (newStepSize == null)
+       throw new IllegalArgumentException();
+ 
+     if (stepSize != newStepSize)
+       {
+ 	stepSize = newStepSize;
+ 	fireStateChanged();
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/Spring.java gcc-4.0.0/libjava/javax/swing/Spring.java
*** gcc-3.4.3/libjava/javax/swing/Spring.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/Spring.java	Thu Jul 22 15:35:57 2004
***************
*** 0 ****
--- 1,580 ----
+ /* Spring.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ /**
+  * Calculates the space between component edges, that are layed out by
+  * {@link SpringLayout}.
+  * <p>
+  * A Spring defines a minimum, preferred and maximum distance for each edge
+  * (north, east, south, west) of a component.
+  * </p>
+  * However, springs are not static, their actual values are computed at
+  * runtime. That means, if a Spring C is defined as the sum of Spring A and
+  * Spring B, then the values (min, pref and max) are not calculated at
+  * creation of Spring C, but instead always when {@link #getValue} is
+  * called. So, when Spring A or Spring B changes, this is reflected in
+  * Spring C.
+  *
+  * @author Roman Kennke (roman@ontographics.com)
+  */
+ public abstract class Spring
+ {
+ 
+   /** Indicates a not-set value. **/
+   public static final int UNSET = -2147483648;
+ 
+   /**
+    * Creates a new Spring object. This constructor is used by the static
+    * methods which create Springs.
+    */
+   protected Spring()
+   {
+   }
+ 
+   /**
+    * Creates a Spring which min, pref and max values are all the same.
+    * These kind of Springs are 'struts'.
+    *
+    * @param val the constant for min, pref and max values.
+    * @return a Spring object with constant values for min, pref and max.
+    */
+   public static Spring constant(int val)
+   {
+     return new SimpleSpring(val, val, val);
+   }
+ 
+   /** Creates a Spring which min, pref and max values are constants.
+    * @param min the constant for the minimum value.
+    * @param pref the constant for the preferred value.
+    * @param max the constant for the maximum value.
+    * @return a Spring object with constant values for min, pref and max.
+    */
+   public static Spring constant(int min, int pref, int max)
+   {
+     return new SimpleSpring(min, pref, max);
+   }
+ 
+   /**
+    * Returns the maximum value of the Spring.
+    *
+    * @return the maximum value.
+    */
+   public abstract int getMaximumValue();
+ 
+   /**
+    * Returns the minimum value of this Spring.
+    *
+    * @return the minimum value.
+    */
+   public abstract int getMinimumValue();
+ 
+   /**
+    * Return the preferred value of this Spring.
+    *
+    * @return the preferred value.
+    */
+   public abstract int getPreferredValue();
+ 
+   /**
+    * Return the actual value of this Spring.
+    *
+    * @return the actual value of this Spring.
+    */
+   public abstract int getValue();
+ 
+   /**
+    * Creates and returns a Spring, which always has the maximum values
+    * min = max(min_s1, min_s2), pref = max(pref_s1, pref_s2), max =
+    * max(max_s1, max_s2).
+    *
+    * @param s1 the first summand of the max Spring.
+    * @param s2 the second summand of the max Spring.
+    * @return a Spring which is max(s1, s2).
+    */
+   public static Spring max(Spring s1, Spring s2)
+   {
+     return new MaxSpring(s1, s2);
+   }
+ 
+   /**
+    * Creates and returns a Spring, which is always the negation of s.
+    * min = -min_s, pref = -pref_s, max = -max_pref.
+    *
+    * @param s the Spring to be negated.
+    * @return the negative of <code>s</code>.
+    */
+   public static Spring minus(Spring s)
+   {
+     return new MinusSpring(s);
+   }
+ 
+   /**
+    * Sets the actual value. If <code>value</code> is out of the (min, max)
+    * bounds, then the value is adjusted, so that is inside these bounds.
+    *
+    * @param value the value to be set.
+    */
+   public abstract void setValue(int value);
+ 
+   /**
+    * Creates and returns a Spring, which is always the sum of s1 and s2.
+    * min_sum = min_s1 + min_s2, pref_sum = pref_s1 + pref_s2, max_sum =
+    * max_s1 + max_s2.
+    *
+    * @param s1 the 1st summand of the sum Spring.
+    * @param s2 the 2nd summand of the sum Spring.
+    * @return a sum which is <code>s1 + s2</code>.
+    */
+   public static Spring sum(Spring s1, Spring s2)
+   {
+     return new AddSpring(s1, s2);
+   }
+ 
+   /**
+    * A simple Spring, that holds constant values for min, pref and max.
+    *
+    * @author Roman Kennke (roman@ontographics.com)
+    */
+   private static final class SimpleSpring extends Spring
+   {
+ 
+     /** The constant value for min. */
+     private final int min;
+ 
+     /** The constant value for pref. */
+     private final int pref;
+ 
+     /** The constant value for max. */
+     private final int max;
+ 
+     /** The actual value of the spring. */
+     private int value;
+ 
+     /**
+      * Creates a new SimpleSpring object.
+      *
+      * @param min the constant minimum value.
+      * @param pref the constant preferred value.
+      * @param max the constant maximum value.
+      */
+     public SimpleSpring(int newMin, int newPref, int newMax)
+     {
+       min = newMin;
+       pref = newPref;
+       max = newMax;
+       value = Spring.UNSET;
+     }
+ 
+     /**
+      * Returns the maximum value of this Spring.
+      *
+      * @return the maximum value.
+      */
+     public int getMaximumValue()
+     {
+       return max;
+     }
+ 
+     /**
+      * Returns the minimum value of this Spring.
+      *
+      * @return the minimum value.
+      */
+     public int getMinimumValue()
+     {
+       return min;
+     }
+ 
+     /**
+      * Returns the preferred value of this Spring.
+      *
+      * @return the preferred value.
+      */
+     public int getPreferredValue()
+     {
+       return pref;
+     }
+ 
+     /**
+      * Return the actual current value of this Spring.
+      *
+      * @return the current value.
+      */
+     public int getValue()
+     {
+ 
+       if (value == Spring.UNSET)
+         {
+           value = pref;
+         }
+ 	    
+       return value;
+     }
+ 	
+     /**
+      * Sets the current value.
+      *
+      * @param val the value to be set.
+      */
+     public void setValue(int val)
+     {
+ 
+       if (val > max)
+         {
+           value = max;
+ 	}
+       else if (val < min)
+         {
+           value = min;
+ 	}
+       else
+         {
+           value = val;
+         }
+     }
+ 
+   }
+ 
+ 
+   /**
+    * A Spring, that is the sum of two other Springs.
+    *
+    * @author Roman Kennke (roman@ontographics.com)
+    */
+   private static final class AddSpring extends Spring
+   {
+ 
+     /** The springs, that are the 'operands' of this Spring. */
+     private final Spring s1;
+     private final Spring s2;
+ 
+     /** The current value for this Spring. */
+     private int value;
+ 
+     /**
+      * Creates a new AddSpring object.
+      *
+      * @param s1 the first operand.
+      * @param s2 the second operand.
+      */
+     protected AddSpring(Spring s1, Spring s2)
+     {
+       super();
+       this.s1 = s1;
+       this.s2 = s2;
+       value = Spring.UNSET;
+     }
+ 
+     /**
+      * Returns the maximum value of this Spring.
+      *
+      * @return the maximum value.
+      */
+     public int getMaximumValue()
+     {
+       int max1 = s1.getMaximumValue();
+       int max2 = s2.getMaximumValue();
+       return max1 + max2;
+     }
+ 
+     /**
+      * Return the minimum value of this Spring.
+      *
+      * @return the minimum value.
+      */
+     public int getMinimumValue()
+     {
+       int min1 = s1.getMinimumValue();
+       int min2 = s2.getMinimumValue();
+       return min1 + min2;
+     }
+ 
+     /**
+      * Returns the preferred value of this Spring.
+      *
+      * @return the preferred value.
+      */
+     public int getPreferredValue()
+     {
+       int pref1 = s1.getPreferredValue();
+       int pref2 = s2.getPreferredValue();
+       return pref1 + pref2;
+     }
+ 
+     /**
+      * Returns the actual current value of this Spring.
+      *
+      * @return the current value of this Spring.
+      */
+     public int getValue()
+     {
+       if (value == Spring.UNSET)
+         {
+           int val1 = s1.getValue();
+           int val2 = s2.getValue();
+           value = val1 + val2;
+         }
+       return value;
+     }
+ 
+     /**
+      * Sets the current value.
+      *
+      * @param val the value to be set.
+      */
+     public void setValue(int val)
+     {
+ 
+       if (val > getMaximumValue())
+         {
+           value = getMaximumValue();
+         }
+       else if (val < getMinimumValue())
+         {
+           value = getMinimumValue();
+         }
+       else
+         {
+           value = val;
+         }
+ 
+     }
+ 	
+   }
+ 
+ 
+   /**
+    * A Spring that is calculated as the negation of another Spring.
+    *
+    * @author Roman Kennke (roman@ontographics.com)
+    */
+   private static final class MinusSpring extends Spring
+   {
+ 
+     /** The Spring from which to calculate the negation. */
+     private final Spring s;
+ 
+     /** The current value of this Spring. */
+     private int value;
+ 
+     /**
+      * Creates a new MinusSpring object.
+      * @param s the Spring from which to calculate the negation.
+      */
+     protected MinusSpring(Spring s)
+     {
+       super();
+       this.s = s;
+       value = Spring.UNSET;
+     }
+ 
+     /** Returns the maximum value of this Spring.
+      *
+      * @return the maximum value.
+      */
+     public int getMaximumValue()
+     {
+       return -s.getMinimumValue();
+     }
+ 
+     /**
+      * Returns the minimum value of this Spring.
+      *
+      * @return the minimum value.
+      */
+     public int getMinimumValue()
+     {
+       return -s.getMaximumValue();
+     }
+ 
+     /**
+      * Returns the preferred value of this Spring.
+      *
+      * @return the preferred value.
+      */
+     public int getPreferredValue()
+     {
+       return -s.getPreferredValue();
+     }
+ 
+     /**
+      * Returns the current value of this Spring.
+      *
+      * @return the current value.
+      */
+     public int getValue()
+     {
+       if (value == Spring.UNSET)
+         {
+ 	  value = -s.getValue();
+ 	}
+       return value;
+     }
+ 
+     /**
+      * Sets the current value.
+      *
+      * @param val the value to be set.
+      */
+     public void setValue(int val)
+     {
+     
+       if (val > getMaximumValue())
+         {
+           value = getMaximumValue();
+ 	}
+       else if (val < getMinimumValue())
+ 	{
+           value = getMinimumValue();
+         }
+       else
+ 	{
+ 	  value = val;
+         }
+ 
+     }
+ 
+   }
+ 
+ 
+   /**
+    * A Spring, that is calculated as the maximum of two Springs.
+    *
+    * @author Roman Kennke (roman@ontographics.com)
+    */
+   private static final class MaxSpring extends Spring
+   {
+ 
+     /** The two other Springs from which to calculate the maximum. */
+     private final Spring s1;
+     private final Spring s2;
+ 
+     /** The current value of this Spring. */
+     private int value;
+ 
+     /**
+      * Creates a new MaxSpring object.
+      *
+      * @param s1 the 1st operand.
+      * @param s2 the 2nd operand.
+      */
+     protected MaxSpring(Spring s1, Spring s2)
+     {
+       super();
+       this.s1 = s1;
+       this.s2 = s2;
+       value = Spring.UNSET;
+     }
+ 
+ 
+     /**
+      * Returns the maximum value of this Spring.
+      *
+      * @return the maximum value.
+      */
+     public int getMaximumValue()
+     {
+       int max1 = s1.getMaximumValue();
+       int max2 = s2.getMaximumValue();
+       return Math.max(max1, max2);
+     }
+ 
+     /**
+      * Returns the minimum value of this Spring.
+      *
+      * @return the minimum value.
+      */
+     public int getMinimumValue()
+     {
+       int min1 = s1.getMinimumValue();
+       int min2 = s2.getMinimumValue();
+       return Math.max(min1, min2);
+     }
+ 
+     /**
+      * Returns the preferred value of this Spring.
+      *
+      * @return the preferred value.
+      */
+     public int getPreferredValue()
+     {
+       int pref1 = s1.getPreferredValue();
+       int pref2 = s2.getPreferredValue();
+       return Math.max(pref1, pref2);
+     }
+ 
+     /**
+      * Returns the actual value of this Spring.
+      *
+      * @return the current value.
+      */
+     public int getValue()
+     {
+       if (value == Spring.UNSET)
+         {
+           int val1 = s1.getValue();
+           int val2 = s2.getValue();
+           value = Math.max(val1, val2);
+       }
+       return value;
+     }
+ 
+     /**
+      * Sets the current value.
+      *
+      * @param val the value to be set.
+      */
+     public void setValue(int val)
+     {
+ 
+       if (val > getMaximumValue())
+         {
+           value = getMaximumValue();
+ 	}
+       else if (val < getMinimumValue())
+         {
+           value = getMinimumValue();
+         }
+       else
+         {
+           value = val;
+         }
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/SpringLayout.java gcc-4.0.0/libjava/javax/swing/SpringLayout.java
*** gcc-3.4.3/libjava/javax/swing/SpringLayout.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/SpringLayout.java	Tue Nov 30 23:59:00 2004
***************
*** 0 ****
--- 1,657 ----
+ /* SpringLayout.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.LayoutManager2;
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ /**
+  * A very flexible layout manager. Components are laid out by defining the
+  * relationships between them. The relationships are expressed as
+  * {@link Spring}s. You can attach a Spring for each edge of a component and
+  * link it to an edge of a different component. For example, you can say,
+  * the northern edge of component A should be attached to the southern edge
+  * of component B, and the space between them should be something between
+  * x and y pixels, and preferably z pixels.
+  * <p>While quite simple, this layout manager can be used to emulate most other
+  * layout managers, and can also be used to solve some layout problems, which
+  * would be hard to solve with other layout managers.</p>
+  *
+  * @author Roman Kennke (roman@ontographics.com)
+  */
+ public class SpringLayout implements LayoutManager2
+ {
+ 
+   /** The right edge of a component. */
+   public static final String EAST = "East";
+ 
+   /** The top edge of a component. */
+   public static final String NORTH = "North";
+ 
+   /** The bottom edge of a component. */
+   public static final String SOUTH = "South";
+ 
+   /** The left edge of a component. */
+   public static final String WEST = "West";
+ 
+   /** maps components to their constraints. */
+   private Map constraintsMap;
+ 
+   /**
+    * The constraints that define the relationships between components.
+    * Each Constraints object can hold 4 Springs: one for each edge of the
+    * component. Additionally it can hold Springs for the components width
+    * and the components height. Since the height and width constraints are
+    * dependend on the other constraints, a component can be over-constraint.
+    * In this case (like when all of NORTH, SOUTH and HEIGHT are constraint),
+    * the values are adjusted, so that the mathematics still hold true.
+    *
+    * @author Roman Kennke (roman@ontographics.com)
+    */
+   public static class Constraints
+   {
+ 
+     // The constraints for each edge, and width and height.
+     /** The Spring for the left edge. */
+     private Spring x;
+ 
+     /** The Spring for the upper edge. */
+     private Spring y;
+ 
+     /** The Spring for the height. */
+     private Spring height;
+ 
+     /** The Spring for the width. */
+     private Spring width;
+ 
+     /** The Spring for the right edge. */
+     private Spring east;
+ 
+     /** The Spring for the bottom edge. */
+     private Spring south;
+ 
+     /**
+      * Creates a new Constraints object.
+      * There is no constraint set.
+      */
+     public Constraints()
+     {
+       x = y = height = width = east = south = null;
+     }
+ 
+     /**
+      * Creates a new Constraints object.
+      *
+      * @param x the constraint for the left edge of the component.
+      * @param y the constraint for the upper edge of the component.
+      */
+     public Constraints(Spring x, Spring y)
+     {
+       this.x = x;
+       this.y = y;
+       width = height = east = south = null;
+     }
+ 
+     /**
+      * Creates a new Constraints object.
+      *
+      * @param x the constraint for the left edge of the component.
+      * @param y the constraint for the upper edge of the component.
+      * @param width the constraint for the width of the component.
+      * @param height the constraint for the height of the component.
+      */
+     public Constraints(Spring x, Spring y, Spring width, Spring height)
+     {
+       this.x = x;
+       this.y = y;
+       this.width = width;
+       this.height = height;
+       east = south = null;
+     }
+ 
+     /**
+      * Returns the constraint for the edge with the <code>edgeName</code>.
+      * This is expected to be one of
+      * {@link #EAST}, {@link #WEST}, {@link NORTH} or {@link SOUTH}.
+      *
+      * @param edgeName the name of the edge.
+      * @return the constraint for the specified edge.
+      */
+     public Spring getConstraint(String edgeName)
+     {
+       Spring retVal = null;
+       if (edgeName.equals(SpringLayout.NORTH))
+ 	retVal = y;
+       else if (edgeName.equals(SpringLayout.WEST))
+         retVal = x;
+       else if (edgeName.equals(SpringLayout.SOUTH))
+         {
+           retVal = south;
+ 	  if ((retVal == null) && (y != null) && (height != null))
+             retVal = Spring.sum(y, height);
+         }
+       else if (edgeName.equals(SpringLayout.EAST))
+         {
+           retVal = east;
+           if ((retVal == null) && (x != null) && (width != null))
+             retVal = Spring.sum(x, width);
+ 	}
+ 
+       return retVal;
+     }
+ 
+     /**
+      * Returns the constraint for the height of the component.
+      *
+      * @return the height constraint. 
+      */
+     public Spring getHeight()
+     {
+       Spring retVal = height;
+       if ((retVal == null) && (y != null) && (south != null))
+         {
+           retVal = Spring.sum(south, Spring.minus(y));
+         }
+       return retVal;
+     }
+ 
+     /**
+      * Returns the constraint for the width of the component.
+      *
+      * @return the width constraint.
+      */
+     public Spring getWidth()
+     {
+       Spring retVal = width;
+       if ((retVal == null) && (x != null) && (east != null))
+         {
+           retVal = Spring.sum(east, Spring.minus(x));
+ 	}
+       return retVal;
+     }
+ 
+     /**
+      * Returns the constraint for the left edge of the component.
+      *
+      * @return the left-edge constraint (== WEST).
+      */
+     public Spring getX()
+     {
+       Spring retVal = x;
+       if ((retVal == null) && (width != null) && (east != null))
+         {
+           retVal = Spring.sum(east, Spring.minus(width));
+         }
+       return retVal;
+     }
+ 
+     /**
+      * Returns the constraint for the upper edge of the component.
+      *
+      * @return the upper-edge constraint (== NORTH).
+      */
+     public Spring getY()
+     {
+       Spring retVal = y;
+       if ((retVal == null) && (height != null) && (south != null))
+         {
+           retVal = Spring.sum(south, Spring.minus(height));
+         }
+       return retVal;
+     }
+ 
+     /**
+      * Sets a constraint for the specified edge. If this leads to an
+      * over-constrained situation, the constraints get adjusted, so that
+      * the mathematics still hold true.
+      *
+      * @param edgeName the name of the edge, one of {@link #EAST},
+      *     {@link #WEST}, {@link NORTH} or {@link SOUTH}.
+      * @param s the constraint to be set.
+      */
+     public void setConstraint(String edgeName, Spring s)
+     {
+     
+       if (edgeName.equals(SpringLayout.WEST))
+         {
+           x = s;
+ 	  if ((width != null) && (east != null))
+             width = Spring.sum(east, Spring.minus(x));
+         }
+       else if (edgeName.equals(SpringLayout.NORTH))
+         {
+           y = s;
+           if ((height != null) && (south != null))
+           height = Spring.sum(south, Spring.minus(y));
+         }
+       else if (edgeName.equals(SpringLayout.EAST))
+         {
+           east = s;
+           if ((x != null) && (width != null))
+             x = Spring.sum(east, Spring.minus(width));
+         }
+       else if (edgeName.equals(SpringLayout.SOUTH))
+         {
+           south = s;
+           if ((height != null) && (y != null))
+ 	    y = Spring.sum(south, Spring.minus(height));
+         }
+ 
+     }
+ 
+     /**
+      * Sets the height-constraint.
+      *
+      * @param s the constraint to be set.
+      */
+     public void setHeight(Spring s)
+     {
+       height = s;
+       if ((south != null) && (y != null))
+         south = Spring.sum(y, height);
+ 
+     }
+ 
+     /**
+      * Sets the width-constraint.
+      *
+      * @param s the constraint to be set.
+      */
+     public void setWidth(Spring s)
+     {
+       width = s;
+       if ((east != null) && (x != null))
+         east = Spring.sum(x, width);
+ 
+     }
+ 
+     /**
+      * Sets the WEST-constraint.
+      *
+      * @param s the constraint to be set.
+      */
+     public void setX(Spring s)
+     {
+       x = s;
+       if ((width != null) && (east != null))
+         width = Spring.sum(east, Spring.minus(x));
+ 
+     }
+ 
+     /**
+      * Sets the NORTH-constraint.
+      *
+      * @param s the constraint to be set.
+      */
+     public void setY(Spring s)
+     {
+       y = s;
+       if ((height != null) && (south != null))
+         height = Spring.sum(south, Spring.minus(y));
+ 
+     }
+   }
+ 
+   /**
+    * Creates a new SpringLayout.
+    */
+   public SpringLayout()
+   {
+ 
+     constraintsMap = new HashMap();
+   }
+ 
+   /**
+    * Adds a layout component and a constraint object to this layout.
+    * This method is usually only called by a {@java.awt.Container}s add
+    * Method.
+    *
+    * @param component the component to be added.
+    * @param constraint the constraint to be set.
+    */
+   public void addLayoutComponent(Component component, Object constraint)
+   {
+     constraintsMap.put(component, constraint);
+   }
+ 
+ 
+   /**
+    * Adds a layout component and a constraint object to this layout.
+    * This method is usually only called by a {@java.awt.Container}s add
+    * Method. This method does nothing, since SpringLayout does not manage
+    * String-indexed components.
+    *
+    * @param component the component to be added.
+    * @param constraint the constraint to be set.
+    */
+   public void addLayoutComponent(String name, Component c)
+   {
+     // do nothing here.
+   }
+ 
+   /**
+    * Returns the constraint of the edge named by <code>edgeName</code>.
+    *
+    * @param c the component from which to get the constraint.
+    * @param edgeName the name of the edge, one of {@link #EAST},
+    *     {@link #WEST}, {@link NORTH} or {@link SOUTH}.
+    * @return the constraint of the edge <code>edgeName</code> of the
+    * component c.
+    */
+   public Spring getConstraint(String edgeName, Component c)
+   {
+     Constraints constraints = getConstraints(c);
+     return constraints.getConstraint(edgeName);
+   }
+ 
+   /**
+    * Returns the {@link Constraints} object associated with the specified
+    * component.
+    *
+    * @param c the component for which to determine the constraint.
+    * @return the {@link Constraints} object associated with the specified
+    *      component.
+    */
+   public SpringLayout.Constraints getConstraints(Component c)
+   {
+     Constraints constraints = (Constraints) constraintsMap.get(c);
+     if (constraints == null)
+       {
+         Container parent = c.getParent();
+         constraints = new Constraints();
+         if (parent != null)
+           {
+             constraints.setX
+               (Spring.constant(parent.getInsets().left));
+             constraints.setY
+               (Spring.constant(parent.getInsets().top));
+           }
+         else
+           {
+             constraints.setX
+               (Spring.constant(0));
+             constraints.setY
+               (Spring.constant(0));
+ 
+           }
+         constraints.setWidth
+           (Spring.constant(c.getMinimumSize().width,
+                            c.getPreferredSize().width,
+                            c.getMaximumSize().width));
+         constraints.setHeight
+           (Spring.constant(c.getMinimumSize().height,
+                            c.getPreferredSize().height,
+                            c.getMaximumSize().height));
+ 
+         constraintsMap.put(c, constraints);
+ 
+       }
+ 
+     return constraints;
+   }
+ 
+   /**
+    * Returns the X alignment of the Container <code>p</code>.
+    *
+    * @param p the {@link java.awt.Container} for which to determine the X
+    *     alignment.
+    * @return always 0.0
+    */
+   public float getLayoutAlignmentX(Container p)
+   {
+     return 0.0F;
+   }
+ 
+   /**
+    * Returns the Y alignment of the Container <code>p</code>.
+    *
+    * @param p the {@link java.awt.Container} for which to determine the Y
+    *     alignment.
+    * @return always 0.0
+    */
+   public float getLayoutAlignmentY(Container p)
+   {
+     return 0.0F;
+   }
+ 
+   /**
+    * Recalculate a possibly cached layout.
+    */
+   public void invalidateLayout(Container p)
+   {
+     // nothing to do here yet
+   }
+ 
+   /**
+    * Lays out the container <code>p</code>.
+    *
+    * @param p the container to be laid out.
+    */
+   public void layoutContainer(Container p)
+   {
+ 
+     addLayoutComponent(p, new Constraints(Spring.constant(0),
+                                           Spring.constant(0)));
+ 
+     int offsetX = p.getInsets().left;
+     int offsetY = p.getInsets().right;
+ 
+     Component[] components = p.getComponents();
+     for (int index = 0; index < components.length; index++)
+       {
+         Component c = components[index];
+         Constraints constraints = getConstraints(c);
+         int x = constraints.getX().getValue();
+         int y = constraints.getY().getValue();
+         int width = constraints.getWidth().getValue();
+         int height = constraints.getHeight().getValue();
+ 
+         c.setLocation(x + offsetX, y + offsetY);
+         c.setSize(width, height);
+       }
+ 
+   }
+ 
+   /**
+    * Calculates the maximum size of the layed out container. This
+    * respects the maximum sizes of all contained components.
+    *
+    * @param p the container to be laid out.
+    * @return the maximum size of the container.
+    */
+   public Dimension maximumLayoutSize(Container p)
+   {
+     int maxX = 0;
+     int maxY = 0;
+ 
+     int offsetX = p.getInsets().left;
+     int offsetY = p.getInsets().right;
+ 
+     Component[] components = p.getComponents();
+     for (int index = 0; index < components.length; index++)
+       {
+         Component c = components[index];
+         Constraints constraints = getConstraints(c);
+         int x = constraints.getX().getMaximumValue();
+         int y = constraints.getY().getMaximumValue();
+         int width = constraints.getWidth().getMaximumValue();
+         int height = constraints.getHeight().getMaximumValue();
+ 
+         int rightEdge = offsetX + x + width;
+         if (rightEdge > maxX)
+           maxX = rightEdge;
+         int bottomEdge = offsetY + y + height;
+         if (bottomEdge > maxY)
+           maxY = bottomEdge;
+       }
+ 
+     return new Dimension(maxX, maxY);
+   }
+ 
+ 
+   /**
+    * Calculates the minimum size of the layed out container. This
+    * respects the minimum sizes of all contained components.
+    *
+    * @param p the container to be laid out.
+    * @return the minimum size of the container.
+    */
+   public Dimension minimumLayoutSize(Container p)
+   {
+     int maxX = 0;
+     int maxY = 0;
+ 
+     int offsetX = p.getInsets().left;
+     int offsetY = p.getInsets().right;
+ 
+     Component[] components = p.getComponents();
+     for (int index = 0; index < components.length; index++)
+       {
+         Component c = components[index];
+         Constraints constraints = getConstraints(c);
+         int x = constraints.getX().getMinimumValue();
+         int y = constraints.getY().getMinimumValue();
+         int width = constraints.getWidth().getMinimumValue();
+         int height = constraints.getHeight().getMinimumValue();
+ 
+         int rightEdge = offsetX + x + width;
+         if (rightEdge > maxX)
+           maxX = rightEdge;
+         int bottomEdge = offsetY + y + height;
+         if (bottomEdge > maxY)
+           maxY = bottomEdge;
+       }
+ 
+     return new Dimension(maxX, maxY);
+   }
+ 
+   /**
+    * Calculates the preferred size of the layed out container. This
+    * respects the preferred sizes of all contained components.
+    *
+    * @param p the container to be laid out.
+    * @return the preferred size of the container.
+    */
+   public Dimension preferredLayoutSize(Container p)
+   {
+     int maxX = 0;
+     int maxY = 0;
+ 
+     int offsetX = p.getInsets().left;
+     int offsetY = p.getInsets().right;
+ 
+     Component[] components = p.getComponents();
+     for (int index = 0; index < components.length; index++)
+       {
+         Component c = components[index];
+         Constraints constraints = getConstraints(c);
+         int x = constraints.getX().getPreferredValue();
+         int y = constraints.getY().getPreferredValue();
+         int width = constraints.getWidth().getPreferredValue();
+         int height = constraints.getHeight().getPreferredValue();
+ 
+         int rightEdge = offsetX + x + width;
+         if (rightEdge > maxX)
+           maxX = rightEdge;
+         int bottomEdge = offsetY + y + height;
+         if (bottomEdge > maxY)
+           maxY = bottomEdge;
+       }
+ 
+     return new Dimension(maxX, maxY);
+   }
+ 
+   /**
+    * Attaches the edge <code>e1</code> of component <code>c1</code> to
+    * the edge <code>e2</code> of component <code>c2</code> width the
+    * fixed strut <code>pad</code>.
+    *
+    * @param e1 the edge of component 1.
+    * @param c1 the component 1.
+    * @param pad the space between the components in pixels.
+    * @param e2 the edge of component 2.
+    * @param c2 the component 2.
+    */
+   public void putConstraint(String e1, Component c1, int pad, String e2, 
+                             Component c2)
+   {
+     Constraints constraints1 = getConstraints(c1);
+     Constraints constraints2 = getConstraints(c2);
+ 
+     Spring strut = Spring.constant(pad);
+     Spring otherEdge = constraints2.getConstraint(e2);
+     constraints1.setConstraint(e1, Spring.sum(strut, otherEdge));
+ 
+   }
+ 
+   /**
+    * Attaches the edge <code>e1</code> of component <code>c1</code> to
+    * the edge <code>e2</code> of component <code>c2</code> width the
+    * {@link Spring} <code>s</code>.
+    *
+    * @param e1 the edge of component 1.
+    * @param c1 the component 1.
+    * @param s the space between the components as a {@link Spring} object.
+    * @param e2 the edge of component 2.
+    * @param c2 the component 2.
+    */
+   public void putConstraint(String e1, Component c1, Spring s, String e2, 
+                             Component c2)
+   {
+     Constraints constraints1 = getConstraints(c1);
+     Constraints constraints2 = getConstraints(c2);
+ 
+     Spring otherEdge = constraints2.getConstraint(e2);
+     constraints1.setConstraint(e1, Spring.sum(s, otherEdge));
+ 
+   }
+ 
+   /**
+    * Removes a layout component.
+    * @param c the layout component to remove.
+    */
+   public void removeLayoutComponent(Component c)
+   {
+     // do nothing here
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/SwingConstants.java gcc-4.0.0/libjava/javax/swing/SwingConstants.java
*** gcc-3.4.3/libjava/javax/swing/SwingConstants.java	Sun Oct 12 13:20:49 2003
--- gcc-4.0.0/libjava/javax/swing/SwingConstants.java	Sat Jun  5 15:19:52 2004
*************** public interface SwingConstants
*** 60,64 ****
--- 60,74 ----
      
    int LEADING      = 10;
    int TRAILING     = 11;
+ 
+   /**
+    * @since 1.4
+    */
+   int NEXT         = 12;
+ 
+   /**
+    * @since 1.4
+    */
+   int PREVIOUS     = 13;
  }
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/SwingUtilities.java gcc-4.0.0/libjava/javax/swing/SwingUtilities.java
*** gcc-3.4.3/libjava/javax/swing/SwingUtilities.java	Mon Jul 14 05:33:30 2003
--- gcc-4.0.0/libjava/javax/swing/SwingUtilities.java	Wed Feb 16 20:02:41 2005
***************
*** 1,5 ****
! /* SwingUtilities.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* SwingUtilities.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,135 ****
  
  package javax.swing;
  
  import java.awt.Component;
  import java.awt.Container;
- import java.awt.EventQueue;
- import java.awt.Font;
  import java.awt.FontMetrics;
  import java.awt.Graphics;
  import java.awt.Insets;
  import java.awt.Point;
  import java.awt.Rectangle;
! import java.awt.Toolkit;
  import java.awt.Window;
  import java.awt.event.KeyEvent;
  import java.awt.event.MouseEvent;
  import java.lang.reflect.InvocationTargetException;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleStateSet;
  
! public class SwingUtilities implements SwingConstants
  {
!   public static FontMetrics getFontMetrics (Font font)
    {
!     return Toolkit.getDefaultToolkit ().getFontMetrics (font);
    }
  
!   public static JRootPane getRootPane (Component a)
    {
!     if (a instanceof JRootPane)
!       return (JRootPane) a;
! 	
!     a = a.getParent();
  
!     if (a != null)
        {
!         return getRootPane(a);
        }
      
      return null;
    }
  
!   public static void updateComponentTreeUI(JFrame comp)
    {
    }
  
    public static String layoutCompoundLabel(JComponent c, 
                                             FontMetrics fm,
                                             String text,
!                                            Icon i,
!                                            int vert_a, 
!                                            int hor_i, 
!                                            int vert_text_pos,
!                                            int hor_text_pos, 
!                                            Rectangle vr,
!                                            Rectangle ir, 
!                                            Rectangle tr,
!                                            int gap)
    {
-     // view rect 'vr' already ok, 
-     // we need to compute ir (icon rect) and tr (text-rect)
- 	
-     int next_x = 0;//vr.x;
-     int next_y = 0;//vr.y;
- 	
-     ir.height = ir.width = ir.y = ir.x = 0;
  
!     if (i != null)
        {
!         ir.x = vr.x;
!         ir.y = vr.y;
!         ir.width = i.getIconWidth();
!         ir.height = i.getIconWidth();
  
  
!         next_x += gap + i.getIconWidth();
!         next_y += gap + i.getIconHeight();
        }
- 	
-     tr.x = next_x;
-     tr.y = vr.y + (vr.height/2);
  
!     tr.width  = fm.stringWidth(text);
!     tr.height = fm.getHeight() +  fm.getAscent()/2;
  
      return text;
    }
  
! }
  
  
  
  
  
  
  
  
  
--- 38,1322 ----
  
  package javax.swing;
  
+ import java.applet.Applet;
  import java.awt.Component;
+ import java.awt.ComponentOrientation;
  import java.awt.Container;
  import java.awt.FontMetrics;
+ import java.awt.Frame;
  import java.awt.Graphics;
  import java.awt.Insets;
+ import java.awt.KeyboardFocusManager;
  import java.awt.Point;
  import java.awt.Rectangle;
! import java.awt.Shape;
  import java.awt.Window;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.InputEvent;
  import java.awt.event.KeyEvent;
  import java.awt.event.MouseEvent;
  import java.lang.reflect.InvocationTargetException;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleStateSet;
+ import javax.swing.plaf.ActionMapUIResource;
+ import javax.swing.plaf.InputMapUIResource;
  
! /**
!  * This class contains a number of static utility functions which are
!  * useful when drawing swing components, dispatching events, or calculating
!  * regions which need painting.
!  *
!  * @author Graydon Hoare (graydon@redhat.com)
!  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
!  */
! public class SwingUtilities
!   implements SwingConstants
  {
!   /** 
!    * This frame should be used as parent for JWindow or JDialog 
!    * that doesn't an owner
!    */
!   private static OwnerFrame ownerFrame;
! 
!   private SwingUtilities()
    {
!     // Do nothing.
!   }
!   
!   /**
!    * 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 portion of the component's bounds which is inside the
!    * component's border insets. This area is usually the area a component
!    * should confine its painting to. The coordinates are returned in terms
!    * of the <em>component's</em> coordinate system, where (0,0) is the
!    * upper left corner of the component's bounds.
!    *
!    * @param c The component to measure the bounds of
!    * @param r A Rectangle to store the return value in, or
!    * <code>null</code>
!    *
!    * @return The calculated area inside the component and its border
!    * insets
!    *
!    * @see #calculateInsetArea
!    */
!   public static Rectangle calculateInnerArea(JComponent c, Rectangle r)
    {
!     Rectangle b = getLocalBounds(c);
!     return calculateInsetArea(b, c.getInsets(), r);
!   }
  
!   /**
!    * Returns the focus owner or <code>null</code> if <code>comp</code> is not
!    * the focus owner or a parent of it.
!    * 
!    * @param comp the focus owner or a parent of it
!    * 
!    * @return the focus owner, or <code>null</code>
!    * 
!    * @deprecated 1.4 Replaced by
!    * <code>KeyboardFocusManager.getFocusOwner()</code>.
!    */
!   public static Component findFocusOwner(Component comp)
!   {
!     // Get real focus owner.
!     Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager()
! 					       .getFocusOwner();
! 
!     // Check if comp is the focus owner or a parent of it.
!     Component tmp = focusOwner;
!     
!     while (tmp != null)
        {
! 	if (tmp == comp)
! 	  return focusOwner;
! 
! 	tmp = tmp.getParent();
        }
      
      return null;
    }
+   
+   /**
+    * Returns the <code>Accessible</code> child of the specified component
+    * which appears at the supplied <code>Point</code>.  If there is no
+    * child located at that particular pair of co-ordinates, null is returned
+    * instead.
+    *
+    * @param c the component whose children may be found at the specified
+    *          point.
+    * @param p the point at which to look for the existence of children
+    *          of the specified component.
+    * @return the <code>Accessible</code> child at the point, <code>p</code>,
+    *         or null if there is no child at this point.
+    * @see javax.accessibility.AccessibleComponent#getAccessibleAt
+    */
+   public static Accessible getAccessibleAt(Component c, Point p)
+   {
+     return c.getAccessibleContext().getAccessibleComponent().getAccessibleAt(p);
+   }
  
!   /**
!    * <p>
!    * Returns the <code>Accessible</code> child of the specified component
!    * that has the supplied index within the parent component.  The indexing
!    * of the children is zero-based, making the first child have an index of
!    * 0.
!    * </p>
!    * <p>
!    * Caution is advised when using this method, as its operation relies
!    * on the behaviour of varying implementations of an abstract method.
!    * For greater surety, direct use of the AWT component implementation
!    * of this method is advised.
!    * </p>
!    *
!    * @param c the component whose child should be returned.
!    * @param i the index of the child within the parent component.
!    * @return the <code>Accessible</code> child at index <code>i</code>
!    *         in the component, <code>c</code>.
!    * @see javax.accessibility.AccessibleContext#getAccessibleChild
!    * @see java.awt.Component.AccessibleAWTComponent#getAccessibleChild
!    */
!   public static Accessible getAccessibleChild(Component c, int i)
!   {
!     return c.getAccessibleContext().getAccessibleChild(i);
!   }
! 
!   /**
!    * <p>
!    * Returns the number of <code>Accessible</code> children within
!    * the supplied component.
!    * </p>
!    * <p>
!    * Caution is advised when using this method, as its operation relies
!    * on the behaviour of varying implementations of an abstract method.
!    * For greater surety, direct use of the AWT component implementation
!    * of this method is advised.
!    * </p>
!    *
!    * @param c the component whose children should be counted.
!    * @return the number of children belonging to the component,
!    *         <code>c</code>.
!    * @see javax.accessibility.AccessibleContext#getAccessibleChildrenCount
!    * @see java.awt.Component.AccessibleAWTComponent#getAccessibleChildrenCount
!    */
!   public static int getAccessibleChildrenCount(Component c)
!   {
!     return c.getAccessibleContext().getAccessibleChildrenCount();
!   }
! 
!   /**
!    * <p>
!    * Returns the zero-based index of the specified component
!    * within its parent.  If the component doesn't have a parent,
!    * -1 is returned.
!    * </p>
!    * <p>
!    * Caution is advised when using this method, as its operation relies
!    * on the behaviour of varying implementations of an abstract method.
!    * For greater surety, direct use of the AWT component implementation
!    * of this method is advised.
!    * </p>
!    *
!    * @param c the component whose parental index should be found.
!    * @return the index of the component within its parent, or -1
!    *         if the component doesn't have a parent.
!    * @see javax.accessibility.AccessibleContext#getAccessibleIndexInParent
!    * @see java.awt.Component.AccessibleAWTComponent#getAccessibleIndexInParent
!    */
!   public static int getAccessibleIndexInParent(Component c)
!   {
!     return c.getAccessibleContext().getAccessibleIndexInParent();
!   }
! 
!   /**
!    * <p>
!    * Returns a set of <code>AccessibleState</code>s, which represent
!    * the state of the supplied component.
!    * </p>
!    * <p>
!    * Caution is advised when using this method, as its operation relies
!    * on the behaviour of varying implementations of an abstract method.
!    * For greater surety, direct use of the AWT component implementation
!    * of this method is advised.
!    * </p>
!    *
!    * @param c the component whose accessible state should be retrieved.
!    * @return a set of <code>AccessibleState</code> objects, which represent
!    *         the state of the supplied component.
!    * @see javax.accessibility.AccessibleContext#getAccessibleStateSet
!    * @see java.awt.Component.AccessibleAWTComponent#getAccessibleStateSet
!    */
!   public static AccessibleStateSet getAccessibleStateSet(Component c)
!   {
!     return c.getAccessibleContext().getAccessibleStateSet();
!   }
! 
!   /**
!    * 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);
!   }
! 
!   /**
!    * If <code>comp</code> is a RootPaneContainer, return its JRootPane.
!    * Otherwise call <code>getAncestorOfClass(JRootPane.class, a)</code>.
!    *
!    * @param comp The component to get the JRootPane of
!    *
!    * @return a suitable JRootPane for <code>comp</code>, or <code>null</code>
!    * 
!    * @see javax.swing.RootPaneContainer#getRootPane
!    * @see #getAncestorOfClass
!    */
!   public static JRootPane getRootPane(Component comp)
!   {
!     if (comp instanceof RootPaneContainer)
!       return ((RootPaneContainer)comp).getRootPane();
!     else
!       return (JRootPane) getAncestorOfClass(JRootPane.class, comp);
!   }
! 
!   /**
!    * 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
!    */
!   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);
+ 
+     convertPointToScreen(pt, source);
+     convertPointFromScreen(pt, destination);
+ 
+     return pt;
+   }
+   
+   public static Point convertPoint(Component source, Point aPoint, Component destination)
+   {
+     return convertPoint(source, aPoint.x, aPoint.y, destination);
+   }
+ 
+   /**
+    * 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.getModifiersEx(),
+                           newpt.x, newpt.y, sourceEvent.getClickCount(),
+                           sourceEvent.isPopupTrigger(), sourceEvent.getButton());
+   }
+ 
+   /**
+    * Recursively walk the component tree under <code>comp</code> calling
+    * <code>updateUI</code> on each {@link JComponent} found. This causes
+    * the entire tree to re-initialize its UI delegates.
+    *
+    * @param comp The component to walk the children of, calling <code>updateUI</code>
+    */
+   public static void updateComponentTreeUI(Component comp)
+   {
+     if (comp == null)
+       return;
+     
+     if (comp instanceof Container)
+       {
+         Component[] children = ((Container)comp).getComponents();
+         for (int i = 0; i < children.length; ++i)
+           updateComponentTreeUI(children[i]);
+       }
+ 
+     if (comp instanceof JComponent)
+       ((JComponent)comp).updateUI();
+   }
+ 
+ 
+   /**
+    * <p>Layout a "compound label" consisting of a text string and an icon
+    * which is to be placed near the rendered text. Once the text and icon
+    * are laid out, the text rectangle and icon rectangle parameters are
+    * altered to store the calculated positions.</p>
+    *
+    * <p>The size of the text is calculated from the provided font metrics
+    * object.  This object should be the metrics of the font you intend to
+    * paint the label with.</p>
+    *
+    * <p>The position values control where the text is placed relative to
+    * the icon. The horizontal position value should be one of the constants
+    * <code>LEADING</code>, <code>TRAILING</code>, <code>LEFT</code>,
+    * <code>RIGHT</code> or <code>CENTER</code>. The vertical position value
+    * should be one fo the constants <code>TOP</code>, <code>BOTTOM</code>
+    * or <code>CENTER</code>.</p>
+    *
+    * <p>The text-icon gap value controls the number of pixels between the
+    * icon and the text.</p>
+    *
+    * <p>The alignment values control where the text and icon are placed, as
+    * a combined unit, within the view rectangle. The horizontal alignment
+    * value should be one of the constants <code>LEADING</code>,
+    * <code>TRAILING</code>, <code>LEFT</code>, <code>RIGHT</code> or
+    * <code>CENTER</code>. The vertical alignment valus should be one of the
+    * constants <code>TOP</code>, <code>BOTTOM</code> or
+    * <code>CENTER</code>.</p>
+    *
+    * <p>If the <code>LEADING</code> or <code>TRAILING</code> constants are
+    * given for horizontal alignment or horizontal text position, they are
+    * interpreted relative to the provided component's orientation property,
+    * a constant in the {@link java.awt.ComponentOrientation} class. For
+    * example, if the component's orientation is <code>LEFT_TO_RIGHT</code>,
+    * then the <code>LEADING</code> value is a synonym for <code>LEFT</code>
+    * and the <code>TRAILING</code> value is a synonym for
+    * <code>RIGHT</code></p>
+    *
+    * <p>If the text and icon are equal to or larger than the view
+    * rectangle, the horizontal and vertical alignment values have no
+    * affect.</p>
+    *
+    * @param c A component used for its orientation value
+    * @param fm The font metrics used to measure the text
+    * @param text The text to place in the compound label
+    * @param icon The icon to place next to the text
+    * @param verticalAlignment The vertical alignment of the label relative
+    * to its component
+    * @param horizontalAlignment The horizontal alignment of the label
+    * relative to its component
+    * @param verticalTextPosition The vertical position of the label's text
+    * relative to its icon
+    * @param horizontalTextPosition The horizontal position of the label's
+    * text relative to its icon
+    * @param viewR The view rectangle, specifying the area which layout is
+    * constrained to
+    * @param iconR A rectangle which is modified to hold the laid-out
+    * position of the icon
+    * @param textR A rectangle which is modified to hold the laid-out
+    * position of the text
+    * @param textIconGap The distance between text and icon
+    *
+    * @return The string of characters, possibly truncated with an elipsis,
+    * which is laid out in this label
+    */
+ 
    public static String layoutCompoundLabel(JComponent c, 
                                             FontMetrics fm,
+                                            String text, 
+                                            Icon icon, 
+                                            int verticalAlignment,
+                                            int horizontalAlignment, 
+                                            int verticalTextPosition,
+                                            int horizontalTextPosition, 
+                                            Rectangle viewR,
+                                            Rectangle iconR, 
+                                            Rectangle textR, 
+                                            int textIconGap)
+   {
+ 
+     // Fix up the orientation-based horizontal positions.
+ 
+     if (horizontalTextPosition == LEADING)
+       {
+         if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
+           horizontalTextPosition = RIGHT;
+         else
+           horizontalTextPosition = LEFT;
+       }
+     else if (horizontalTextPosition == TRAILING)
+       {
+         if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
+           horizontalTextPosition = LEFT;
+         else
+           horizontalTextPosition = RIGHT;
+       }
+ 
+     // Fix up the orientation-based alignments.
+ 
+     if (horizontalAlignment == LEADING)
+       {
+         if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
+           horizontalAlignment = RIGHT;
+         else
+           horizontalAlignment = LEFT;
+       }
+     else if (horizontalAlignment == TRAILING)
+       {
+         if (c.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
+           horizontalAlignment = LEFT;
+         else
+           horizontalAlignment = RIGHT;
+       }
+     
+     return layoutCompoundLabel(fm, text, icon,
+                                verticalAlignment,
+                                horizontalAlignment,
+                                verticalTextPosition,
+                                horizontalTextPosition,
+                                viewR, iconR, textR, textIconGap);
+   }
+ 
+   /**
+    * <p>Layout a "compound label" consisting of a text string and an icon
+    * which is to be placed near the rendered text. Once the text and icon
+    * are laid out, the text rectangle and icon rectangle parameters are
+    * altered to store the calculated positions.</p>
+    *
+    * <p>The size of the text is calculated from the provided font metrics
+    * object.  This object should be the metrics of the font you intend to
+    * paint the label with.</p>
+    *
+    * <p>The position values control where the text is placed relative to
+    * the icon. The horizontal position value should be one of the constants
+    * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>. The
+    * vertical position value should be one fo the constants
+    * <code>TOP</code>, <code>BOTTOM</code> or <code>CENTER</code>.</p>
+    *
+    * <p>The text-icon gap value controls the number of pixels between the
+    * icon and the text.</p>
+    *
+    * <p>The alignment values control where the text and icon are placed, as
+    * a combined unit, within the view rectangle. The horizontal alignment
+    * value should be one of the constants <code>LEFT</code>, <code>RIGHT</code> or
+    * <code>CENTER</code>. The vertical alignment valus should be one of the
+    * constants <code>TOP</code>, <code>BOTTOM</code> or
+    * <code>CENTER</code>.</p>
+    *
+    * <p>If the text and icon are equal to or larger than the view
+    * rectangle, the horizontal and vertical alignment values have no
+    * affect.</p>
+    *
+    * <p>Note that this method does <em>not</em> know how to deal with
+    * horizontal alignments or positions given as <code>LEADING</code> or
+    * <code>TRAILING</code> values. Use the other overloaded variant of this
+    * method if you wish to use such values.
+    *
+    * @param fm The font metrics used to measure the text
+    * @param text The text to place in the compound label
+    * @param icon The icon to place next to the text
+    * @param verticalAlignment The vertical alignment of the label relative
+    * to its component
+    * @param horizontalAlignment The horizontal alignment of the label
+    * relative to its component
+    * @param verticalTextPosition The vertical position of the label's text
+    * relative to its icon
+    * @param horizontalTextPosition The horizontal position of the label's
+    * text relative to its icon
+    * @param viewR The view rectangle, specifying the area which layout is
+    * constrained to
+    * @param iconR A rectangle which is modified to hold the laid-out
+    * position of the icon
+    * @param textR A rectangle which is modified to hold the laid-out
+    * position of the text
+    * @param textIconGap The distance between text and icon
+    *
+    * @return The string of characters, possibly truncated with an elipsis,
+    * which is laid out in this label
+    */
+ 
+   public static String layoutCompoundLabel(FontMetrics fm,
                                             String text,
!                                            Icon icon,
!                                            int verticalAlignment,
!                                            int horizontalAlignment,
!                                            int verticalTextPosition,
!                                            int horizontalTextPosition,
!                                            Rectangle viewR,
!                                            Rectangle iconR,
!                                            Rectangle textR,
!                                            int textIconGap)
    {
  
!     // Work out basic height and width.
! 
!     if (icon == null)
        {
!         textIconGap = 0;
!         iconR.width = 0;
!         iconR.height = 0;
!       }
!     else
!       {
!         iconR.width = icon.getIconWidth();
!         iconR.height = icon.getIconHeight();
!       }
!     if (text == null)
!       {
!         textIconGap = 0;
! 	textR.width = 0;
! 	textR.height = 0;
!       }
!     else
!       {
!         textR.width = fm.stringWidth(text);
!         textR.height = fm.getHeight(); 
!       }
  
+     // Work out the position of text and icon, assuming the top-left coord
+     // starts at (0,0). We will fix that up momentarily, after these
+     // "position" decisions are made and we look at alignment.
  
!     switch (horizontalTextPosition)
!       {
!       case LEFT:
!         textR.x = 0;
!         iconR.x = textR.width + textIconGap;
!         break;
!       case RIGHT:
!         iconR.x = 0;
!         textR.x = iconR.width + textIconGap;
!         break;
!       case CENTER:
!         int centerLine = Math.max(textR.width, iconR.width) / 2;
!         textR.x = centerLine - textR.width/2;
!         iconR.x = centerLine - iconR.width/2;
!         break;
        }
  
!     switch (verticalTextPosition)
!       {
!       case TOP:
!         textR.y = 0;
!         iconR.y = (horizontalTextPosition == CENTER 
!                    ? textR.height + textIconGap : 0);
!         break;
!       case BOTTOM:
!         iconR.y = 0;
!         textR.y = (horizontalTextPosition == CENTER
!                    ? iconR.height + textIconGap 
!                    : iconR.height - textR.height);
!         break;
!       case CENTER:
!         int centerLine = Math.max(textR.height, iconR.height) / 2;
!         textR.y = centerLine - textR.height/2;
!         iconR.y = centerLine - iconR.height/2;
!         break;
!       }
!     // The two rectangles are laid out correctly now, but only assuming
!     // that their upper left corner is at (0,0). If we have any alignment other
!     // than TOP and LEFT, we need to adjust them.
! 
!     Rectangle u = textR.union(iconR);
!     int horizontalAdjustment = viewR.x;
!     int verticalAdjustment = viewR.y;
!     switch (verticalAlignment)
!       {
!       case TOP:
!         break;
!       case BOTTOM:
!         verticalAdjustment += (viewR.height - u.height);
!         break;
!       case CENTER:
!         verticalAdjustment += ((viewR.height/2) - (u.height/2));
!         break;
!       }
!     switch (horizontalAlignment)
!       {
!       case LEFT:
!         break;
!       case RIGHT:
!         horizontalAdjustment += (viewR.width - u.width);
!         break;
!       case CENTER:
!         horizontalAdjustment += ((viewR.width/2) - (u.width/2));
!         break;
!       }
! 
!     iconR.x += horizontalAdjustment;
!     iconR.y += verticalAdjustment;
! 
!     textR.x += horizontalAdjustment;
!     textR.y += verticalAdjustment;
  
      return text;
    }
  
!   /** 
!    * 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();
!   }
!   
!   /**
!    * This method paints the given component at the given position and size.
!    * The component will be reparented to the container given.
!    * 
!    * @param g The Graphics object to draw with.
!    * @param c The Component to draw
!    * @param p The Container to reparent to.
!    * @param x The x coordinate to draw at.
!    * @param y The y coordinate to draw at.
!    * @param w The width of the drawing area.
!    * @param h The height of the drawing area.
!    */
!   public static void paintComponent(Graphics g, Component c, Container p, 
!                                     int x, int y, int w, int h)
!   {       
!     Container parent = c.getParent();
!     if (parent != null)
!       parent.remove(c);
!     if (p != null)
!       p.add(c);
!     
!     Shape savedClip = g.getClip();
!     
!     g.setClip(x, y, w, h);
!     g.translate(x, y);
! 
!     c.paint(g);
!     
!     g.translate(-x, -y);
!     g.setClip(savedClip);
!   }
! 
!   /**
!    * This method paints the given component in the given rectangle.
!    * The component will be reparented to the container given.
!    * 
!    * @param g The Graphics object to draw with.
!    * @param c The Component to draw
!    * @param p The Container to reparent to.
!    * @param r The rectangle that describes the drawing area.
!    */  
!   public static void paintComponent(Graphics g, Component c, 
!                                     Container p, Rectangle r)
!   {
!     paintComponent(g, c, p, r.x, r.y, r.width, r.height);
!   }
!   
!   /**
!    * This method returns the common Frame owner used in JDialogs or
!    * JWindow when no owner is provided.
!    *
!    * @return The common Frame 
!    */
!   static Frame getOwnerFrame()
!   {
!     if (ownerFrame == null)
!       ownerFrame = new OwnerFrame();
!     return ownerFrame;
!   }
  
+   /**
+    * Checks if left mouse button was clicked.
+    *
+    * @param event the event to check
+    *
+    * @return true if left mouse was clicked, false otherwise.
+    */
+   public static boolean isLeftMouseButton(MouseEvent event)
+   {
+     return ((event.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK)
+ 	     == InputEvent.BUTTON1_DOWN_MASK);
+   }
  
+   /**
+    * Checks if middle mouse button was clicked.
+    *
+    * @param event the event to check
+    *
+    * @return true if middle mouse was clicked, false otherwise.
+    */
+   public static boolean isMiddleMouseButton(MouseEvent event)
+   {
+     return ((event.getModifiersEx() & InputEvent.BUTTON2_DOWN_MASK)
+ 	     == InputEvent.BUTTON2_DOWN_MASK);
+   }
  
+   /**
+    * Checks if right mouse button was clicked.
+    *
+    * @param event the event to check
+    *
+    * @return true if right mouse was clicked, false otherwise.
+    */
+   public static boolean isRightMouseButton(MouseEvent event)
+   {
+     return ((event.getModifiersEx() & InputEvent.BUTTON3_DOWN_MASK)
+ 	     == InputEvent.BUTTON3_DOWN_MASK);
+   }
+   
+   /**
+    * This frame should be used when constructing a Window/JDialog without
+    * a parent. In this case, we are forced to use this frame as a window's
+    * parent, because we simply cannot pass null instead of parent to Window
+    * constructor, since doing it will result in NullPointerException.
+    */
+   private static class OwnerFrame extends Frame
+   {
+     public void setVisible(boolean b)
+     {
+       // Do nothing here. 
+     }
+     
+     public boolean isShowing()
+     {
+       return true;
+     }
+   }
  
+   public static boolean notifyAction(Action action,
+                                      KeyStroke ks,
+                                      KeyEvent event,
+                                      Object sender,
+                                      int modifiers)
+   {
+     if (action != null && action.isEnabled())
+       {
+         String name = (String) action.getValue(Action.ACTION_COMMAND_KEY);
+         if (name == null
+             && event.getKeyChar() != KeyEvent.CHAR_UNDEFINED)
+           name = new String(new char[] {event.getKeyChar()});
+         action.actionPerformed(new ActionEvent(sender,
+                                                ActionEvent.ACTION_PERFORMED,
+                                                name, modifiers));
+         return true;
+       }
+     return false;
+   }
  
+   /**
+    * <p>Change the shared, UI-managed {@link ActionMap} for a given
+    * component. ActionMaps are arranged in a hierarchy, in order to
+    * encourage sharing of common actions between components. The hierarchy
+    * unfortunately places UI-managed ActionMaps at the <em>end</em> of the
+    * parent-pointer chain, as illustrated:</p>
+    *
+    * <pre>
+    *  [{@link javax.swing.JComponent#getActionMap()}] 
+    *          --&gt; [{@link javax.swing.ActionMap}] 
+    *     parent --&gt; [{@link javax.swing.text.KeymapActionMap}] 
+    *       parent --&gt; [{@link javax.swing.plaf.ActionMapUIResource}]
+    * </pre>
+    *
+    * <p>Our goal with this method is to replace the first ActionMap along
+    * this chain which is an instance of {@link ActionMapUIResource}, since
+    * these are the ActionMaps which are supposed to be shared between
+    * components.</p>
+    *
+    * <p>If the provided ActionMap is <code>null</code>, we interpret the
+    * call as a request to remove the UI-managed ActionMap from the
+    * component's ActionMap parent chain.</p>
+    */
+   public static void replaceUIActionMap(JComponent component, 
+                                         ActionMap uiActionMap)
+   {
+     ActionMap child = component.getActionMap();
+     if (child == null)
+       component.setActionMap(uiActionMap);
+     else
+       {
+         while(child.getParent() != null
+               && !(child.getParent() instanceof ActionMapUIResource))
+           child = child.getParent();
+         if (child != null)
+           child.setParent(uiActionMap);
+       }
+   }
  
+   /**
+    * <p>Change the shared, UI-managed {@link InputMap} for a given
+    * component. InputMaps are arranged in a hierarchy, in order to
+    * encourage sharing of common input mappings between components. The
+    * hierarchy unfortunately places UI-managed InputMaps at the
+    * <em>end</em> of the parent-pointer chain, as illustrated:</p>
+    *
+    * <pre>
+    *  [{@link javax.swing.JComponent#getInputMap()}] 
+    *          --&gt; [{@link javax.swing.InputMap}] 
+    *     parent --&gt; [{@link javax.swing.text.KeymapWrapper}] 
+    *       parent --&gt; [{@link javax.swing.plaf.InputMapUIResource}]
+    * </pre>
+    *
+    * <p>Our goal with this method is to replace the first InputMap along
+    * this chain which is an instance of {@link InputMapUIResource}, since
+    * these are the InputMaps which are supposed to be shared between
+    * components.</p>
+    *
+    * <p>If the provided InputMap is <code>null</code>, we interpret the
+    * call as a request to remove the UI-managed InputMap from the
+    * component's InputMap parent chain.</p>
+    */
+   public static void replaceUIInputMap(JComponent component, 
+                                        int condition, 
+                                        InputMap uiInputMap)
+   {
+     InputMap child = component.getInputMap(condition);
+     if (child == null)
+       component.setInputMap(condition, uiInputMap);
+     else
+       {
+         while(child.getParent() != null
+               && !(child.getParent() instanceof InputMapUIResource))
+           child = child.getParent();
+         if (child != null)
+           child.setParent(uiInputMap);
+       }
+   }
  
+   /**
+    * Subtracts a rectangle from another and return the area as an array
+    * of rectangles.
+    * Returns the areas of rectA which are not covered by rectB.
+    * If the rectangles do not overlap, or if either parameter is
+    * <code>null</code>, a zero-size array is returned.
+    * @param rectA The first rectangle
+    * @param rectB The rectangle to subtract from the first
+    * @return An array of rectangles representing the area in rectA
+    * not overlapped by rectB
+    */
+   public static Rectangle[] computeDifference(Rectangle rectA, Rectangle rectB)
+   {
+     if (rectA == null || rectB == null)
+       return new Rectangle[0];
+ 
+     Rectangle[] r = new Rectangle[4];
+     int x1 = rectA.x;
+     int y1 = rectA.y;
+     int w1 = rectA.width;
+     int h1 = rectA.height;
+     int x2 = rectB.x;
+     int y2 = rectB.y;
+     int w2 = rectB.width;
+     int h2 = rectB.height;
+ 
+     // (outer box = rectA)
+     // ------------- 
+     // |_____0_____|
+     // |  |rectB|  |
+     // |_1|_____|_2|
+     // |     3     |
+     // -------------
+     int H0 = (y2 > y1) ? y2 - y1 : 0; // height of box 0
+     int H3 = (y2 + h2 < y1 + h1) ? y1 + h1 - y2 - h2 : 0; // height box 3
+     int W1 = (x2 > x1) ? x2 - x1 : 0; // width box 1
+     int W2 = (x1 + w1 > x2 + w2) ? x1 + w1 - x2 - w2 : 0; // w. box 2
+     int H12 = (H0 + H3 < h1) ? h1 - H0 - H3 : 0; // height box 1 & 2
+ 
+     if (H0 > 0)
+       r[0] = new Rectangle(x1, y1, w1, H0);
+     else
+       r[0] = null;
+ 
+     if (W1 > 0 && H12 > 0)
+       r[1] = new Rectangle(x1, y1 + H0, W1, H12);
+     else
+       r[1] = null;
+ 
+     if (W2 > 0 && H12 > 0)
+       r[2] = new Rectangle(x2 + w2, y1 + H0, W2, H12);
+     else
+       r[2] = null;
+ 
+     if (H3 > 0)
+       r[3] = new Rectangle(x1, y1 + H0 + H12, w1, H3);
+     else
+       r[3] = null;
+ 
+     // sort out null objects
+     int n = 0;
+     for (int i = 0; i < 4; i++)
+       if (r[i] != null)
+ 	n++;
+     Rectangle[] out = new Rectangle[n];
+     for (int i = 3; i >= 0; i--)
+       if (r[i] != null)
+ 	out[--n] = r[i];
  
+     return out;
+   }
  
+   /**
+    * Calculates the intersection of two rectangles.
+    *
+    * @param x upper-left x coodinate of first rectangle
+    * @param x upper-left y coodinate of first rectangle
+    * @param w width of first rectangle
+    * @param h height of first rectangle
+    * @param rect a Rectangle object of the second rectangle
+    * @throws a NullPointerException if rect is null.
+    *
+    * @return a rectangle corresponding to the intersection of the
+    * two rectangles. A zero rectangle is returned if the rectangles
+    * do not overlap.
+    */
+   public static Rectangle computeIntersection(int x, int y, int w, int h,
+                                               Rectangle rect)
+   {
+     int x2 = (int) rect.getX();
+     int y2 = (int) rect.getY();
+     int w2 = (int) rect.getWidth();
+     int h2 = (int) rect.getHeight();
+ 
+     int dx = (x > x2) ? x : x2;
+     int dy = (y > y2) ? y : y2;
+     int dw = (x + w < x2 + w2) ? (x + w - dx) : (x2 + w2 - dx);
+     int dh = (y + h < y2 + h2) ? (y + h - dy) : (y2 + h2 - dy);
+ 
+     if (dw >= 0 && dh >= 0)
+       return new Rectangle(dx, dy, dw, dh);
+ 
+     return new Rectangle(0, 0, 0, 0);
+   }
+   
+   /**
+    * Calculates the width of a given string.
+    *
+    * @param fm the <code>FontMetrics</code> object to use
+    * @param str the string
+    * 
+    * @return the width of the the string.
+    */
+   public static int computeStringWidth(FontMetrics fm, String str)
+   {
+     return fm.stringWidth(str);
+   }
+ 
+   /**
+    * Calculates the union of two rectangles.
+    *
+    * @param x upper-left x coodinate of first rectangle
+    * @param x upper-left y coodinate of first rectangle
+    * @param w width of first rectangle
+    * @param h height of first rectangle
+    * @param rect a Rectangle object of the second rectangle
+    * @throws a NullPointerException if rect is null.
+    *
+    * @return a rectangle corresponding to the union of the
+    * two rectangles. A rectangle encompassing both is returned if the
+    * rectangles do not overlap.
+    */
+   public static Rectangle computeUnion(int x, int y, int w, int h,
+                                        Rectangle rect)
+   {
+     int x2 = (int) rect.getX();
+     int y2 = (int) rect.getY();
+     int w2 = (int) rect.getWidth();
+     int h2 = (int) rect.getHeight();
+ 
+     int dx = (x < x2) ? x : x2;
+     int dy = (y < y2) ? y : y2;
+     int dw = (x + w > x2 + w2) ? (x + w - dx) : (x2 + w2 - dx);
+     int dh = (y + h > y2 + h2) ? (y + h - dy) : (y2 + h2 - dy);
+ 
+     if (dw >= 0 && dh >= 0)
+       return new Rectangle(dx, dy, dw, dh);
+ 
+     return new Rectangle(0, 0, 0, 0);
+   }
+ 
+   /**
+    * Tests if a rectangle contains another.
+    * @param a first rectangle
+    * @param b second rectangle
+    * @return true if a contains b, false otherwise
+    * @throws NullPointerException
+    */
+   public static boolean isRectangleContainingRectangle(Rectangle a, Rectangle b)
+   {
+     // Note: zero-size rects inclusive, differs from Rectangle.contains()
+     return b.width >= 0 && b.height >= 0 && b.width >= 0 && b.height >= 0
+            && b.x >= a.x && b.x + b.width <= a.x + a.width && b.y >= a.y
+            && b.y + b.height <= a.y + a.height;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/Timer.java gcc-4.0.0/libjava/javax/swing/Timer.java
*** gcc-3.4.3/libjava/javax/swing/Timer.java	Tue Jun 24 09:48:40 2003
--- gcc-4.0.0/libjava/javax/swing/Timer.java	Wed Feb 16 20:02:42 2005
***************
*** 1,5 ****
! /* Timer.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* Timer.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.ActionEvent;
*** 42,180 ****
  import java.awt.event.ActionListener;
  import java.io.Serializable;
  import java.util.EventListener;
! import java.util.Vector;
  import javax.swing.event.EventListenerList;
  
  public class Timer implements Serializable
  {
    protected EventListenerList listenerList = new EventListenerList();
!   
!   int ticks;
!   static boolean verbose;
    boolean running;
!   boolean repeat_ticks = true;
!   long interval, init_delay;
!     
!   class Waker extends Thread
    {
      public void run()
      {
        running = true;
!       try {
! 	sleep(init_delay);
! 		
! 	while (running)
! 	  {
! 	    sleep(interval);
  
! 	    if (verbose)
! 	      {
  		System.out.println("javax.swing.Timer -> clocktick");
- 	      }
  
! 	    ticks++;
! 	    fireActionPerformed();
!   
! 	    if (! repeat_ticks)
! 	      break;
! 	  }
! 	running = false;
!       } catch (Exception e) {
! 	System.out.println("swing.Timer::" + e);
!       }
      }
    }
  
    public void addActionListener(ActionListener listener)
    {
!     listenerList.add (ActionListener.class, listener);
    }
!   
    public void removeActionListener(ActionListener listener)
    {
!     listenerList.remove (ActionListener.class, listener);
    }
  
    /**
     * @since 1.3
     */
!   public EventListener[] getListeners (Class listenerType)
    {
!     return listenerList.getListeners (listenerType);
    }
!   
    /**
     * @since 1.4
     */
!   public ActionListener[] getActionListeners ()
    {
!     return (ActionListener[]) listenerList.getListeners (ActionListener.class);
    }
  
!   protected void fireActionPerformed (ActionEvent event)
    {
      ActionListener[] listeners = getActionListeners();
!     
      for (int i = 0; i < listeners.length; i++)
!       {
! 	listeners [i].actionPerformed (event);
!       }
    }
  
!   void fireActionPerformed ()
    {
!     fireActionPerformed (new ActionEvent (this, ticks, "Timer"));
    }
  
!   public static void setLogTimers(boolean flag)
    {
!     verbose = flag;
    }
  
    public static boolean getLogTimers()
    {
!     return verbose;
    }
-     
  
!   public void setDelay(int delay)
    {
!     interval = delay;
    }
  
    public int getDelay()
    {
!     return (int)interval;
    }
  
  
!   public void setInitialDelay(int initialDelay)
    {
!     init_delay = initialDelay;
    }
  
!   public void setRepeats(boolean flag)
    {
!     repeat_ticks = flag;
    }
  
!   boolean isRunning()
    {
      return running;
    }
  
!   void start()
    {
      if (isRunning())
!       {
! 	System.err.println("attempt to start a running timer");
! 	return;
!       }
!     new Waker().start();
    }
  
!   void stop()
    {
      running = false;
    }
  }
--- 42,406 ----
  import java.awt.event.ActionListener;
  import java.io.Serializable;
  import java.util.EventListener;
! 
  import javax.swing.event.EventListenerList;
  
+ /**
+  * DOCUMENT ME!
+  */
  public class Timer implements Serializable
  {
+   /** DOCUMENT ME! */
+   private static final long serialVersionUID = -1116180831621385484L;
+ 
+   /** DOCUMENT ME! */
    protected EventListenerList listenerList = new EventListenerList();
! 
!   // This object manages a "queue" of virtual actionEvents, maintained as a
!   // simple long counter. When the timer expires, a new event is queued,
!   // and a dispatcher object is pushed into the system event queue. When
!   // the system thread runs the dispatcher, it will fire as many
!   // ActionEvents as have been queued, unless the timer is set to
!   // coalescing mode, in which case it will fire only one ActionEvent.
! 
!   /** DOCUMENT ME! */
!   private long queue;
! 
!   /** DOCUMENT ME! */
!   private Object queueLock = new Object();
! 
!   /** DOCUMENT ME! */
!   private Waker waker;
! 
!   private Runnable drainer = new Runnable() 
!     {
!       public void run()
!       {
!         drainEvents();
!       }
!     };
! 
!   /**
!    * DOCUMENT ME!
!    */
!   private void queueEvent()
!   {
!     synchronized (queueLock)
!       {
! 	queue++;
! 	if (queue == 1)
! 	  SwingUtilities.invokeLater(drainer);
!       }
!   }
! 
!   /**
!    * DOCUMENT ME!
!    */
!   private void drainEvents()
!   {
!     synchronized (queueLock)
!       {
! 	if (isCoalesce())
! 	  {
! 	    if (queue > 0)
! 	      fireActionPerformed();
! 	  }
! 	else
! 	  {
! 	    while (queue > 0)
! 	      {
! 		fireActionPerformed();
! 		queue--;
! 	      }
! 	  }
! 	queue = 0;
!       }
!   }
! 
!   static boolean logTimers;
! 
!   /** DOCUMENT ME! */
!   boolean coalesce = true;
! 
!   /** DOCUMENT ME! */
!   boolean repeats = true;
! 
!   /** DOCUMENT ME! */
    boolean running;
! 
!   /** DOCUMENT ME! */
!   int ticks;
! 
!   /** DOCUMENT ME! */
!   int delay;
! 
!   /** DOCUMENT ME! */
!   int initialDelay;
! 
!   /**
!    * DOCUMENT ME!
!    */
!   private class Waker extends Thread
    {
+     /**
+      * DOCUMENT ME!
+      */
      public void run()
      {
        running = true;
!       try
!         {
! 	  sleep(initialDelay);
  
! 	  while (running)
! 	    {
! 	      try
! 	        {
! 		  sleep(delay);
! 	        }
! 	      catch (InterruptedException e)
! 	        {
! 		  return;
! 	        }
! 	      queueEvent();
! 
! 	      if (logTimers)
  		System.out.println("javax.swing.Timer -> clocktick");
  
! 	      if (! repeats)
! 		break;
! 	    }
! 	  running = false;
!         }
!       catch (Exception e)
!         {
! //	  System.out.println("swing.Timer::" + e);
!         }
      }
    }
  
+   /**
+    * Creates a new Timer object.
+    *
+    * @param d DOCUMENT ME!
+    * @param listener DOCUMENT ME!
+    */
+   public Timer(int d, ActionListener listener)
+   {
+     delay = d;
+ 
+     if (listener != null)
+       addActionListener(listener);
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @param c DOCUMENT ME!
+    */
+   public void setCoalesce(boolean c)
+   {
+     coalesce = c;
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   public boolean isCoalesce()
+   {
+     return coalesce;
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @param listener DOCUMENT ME!
+    */
    public void addActionListener(ActionListener listener)
    {
!     listenerList.add(ActionListener.class, listener);
    }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @param listener DOCUMENT ME!
!    */
    public void removeActionListener(ActionListener listener)
    {
!     listenerList.remove(ActionListener.class, listener);
    }
  
    /**
+    * DOCUMENT ME!
+    *
+    * @param listenerType DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    *
     * @since 1.3
     */
!   public EventListener[] getListeners(Class listenerType)
    {
!     return listenerList.getListeners(listenerType);
    }
! 
    /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    *
     * @since 1.4
     */
!   public ActionListener[] getActionListeners()
    {
!     return (ActionListener[]) listenerList.getListeners(ActionListener.class);
    }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @param event DOCUMENT ME!
!    */
!   protected void fireActionPerformed(ActionEvent event)
    {
      ActionListener[] listeners = getActionListeners();
! 
      for (int i = 0; i < listeners.length; i++)
!       listeners[i].actionPerformed(event);
    }
  
!   /**
!    * DOCUMENT ME!
!    */
!   void fireActionPerformed()
    {
!     fireActionPerformed(new ActionEvent(this, ticks++, "Timer"));
    }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @param lt DOCUMENT ME!
!    */
!   public static void setLogTimers(boolean lt)
    {
!     logTimers = lt;
    }
  
+   /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
    public static boolean getLogTimers()
    {
!     return logTimers;
    }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @param d DOCUMENT ME!
!    */
!   public void setDelay(int d)
    {
!     delay = d;
    }
  
+   /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
    public int getDelay()
    {
!     return delay;
    }
  
+   /**
+    * DOCUMENT ME!
+    *
+    * @param i DOCUMENT ME!
+    */
+   public void setInitialDelay(int i)
+   {
+     initialDelay = i;
+   }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public int getInitialDelay()
    {
!     return initialDelay;
    }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @param r DOCUMENT ME!
!    */
!   public void setRepeats(boolean r)
    {
!     repeats = r;
    }
  
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public boolean isRepeats()
!   {
!     return repeats;
!   }
! 
!   /**
!    * DOCUMENT ME!
!    *
!    * @return DOCUMENT ME!
!    */
!   public boolean isRunning()
    {
      return running;
    }
  
!   /**
!    * DOCUMENT ME!
!    */
!   public void start()
    {
      if (isRunning())
!       return;
!     waker = new Waker();
!     waker.start();
    }
  
!   /**
!    * DOCUMENT ME!
!    */
!   public void restart()
!   {
!     stop();
!     start();
!   }
! 
!   /**
!    * DOCUMENT ME!
!    */
!   public void stop()
    {
      running = false;
+     if (waker != null)
+       waker.interrupt();
+     synchronized (queueLock)
+       {
+ 	queue = 0;
+       }
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ToggleButtonModel.java gcc-4.0.0/libjava/javax/swing/ToggleButtonModel.java
*** gcc-3.4.3/libjava/javax/swing/ToggleButtonModel.java	Thu Jun 19 16:30:09 2003
--- gcc-4.0.0/libjava/javax/swing/ToggleButtonModel.java	Thu Jan  1 00:00:00 1970
***************
*** 1,60 ****
- /* ToggleButtonModel.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.swing;
- 
- public class ToggleButtonModel extends DefaultButtonModel
- {
-     ToggleButtonModel(JComponent c)
-     {
- 	super(c);
-     }
- 
-     public void setPressed(boolean b)  
-     {
- 	if (! isEnabled())
- 	    return;
- 	
- 	if (! b)
- 	    {
- 		return;
- 	    }
- 	
- 	setSelected(b);
-     }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ToolTipManager.java gcc-4.0.0/libjava/javax/swing/ToolTipManager.java
*** gcc-3.4.3/libjava/javax/swing/ToolTipManager.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/ToolTipManager.java	Tue Nov 30 23:59:00 2004
*************** exception statement from your version. *
*** 37,42 ****
--- 37,49 ----
  
  package javax.swing;
  
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.FlowLayout;
+ import java.awt.LayoutManager;
+ import java.awt.Panel;
+ import java.awt.Point;
  import java.awt.Rectangle;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
*************** import java.awt.event.MouseEvent;
*** 45,394 ****
  import java.awt.event.MouseMotionListener;
  
  /**
!  * ToolTipManager
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class ToolTipManager extends MouseAdapter implements MouseMotionListener {
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * stillInsideTimerAction
! 	 */
! 	protected class stillInsideTimerAction implements ActionListener {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor stillInsideTimerAction
! 		 * @param manager TODO
! 		 */
! 		protected stillInsideTimerAction(ToolTipManager manager) {
! 			// TODO
! 		} // stillInsideTimerAction()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * actionPerformed
! 		 * @param event TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
! 
! 
! 	} // stillInsideTimerAction
  
! 	/**
! 	 * outsideTimerAction
! 	 */
! 	protected class outsideTimerAction implements ActionListener {
  
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
  
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor outsideTimerAction
! 		 * @param manager TODO
! 		 */
! 		protected outsideTimerAction(ToolTipManager manager) {
! 			// TODO
! 		} // outsideTimerAction()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * actionPerformed
! 		 * @param value0 TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
  
  
! 	} // outsideTimerAction
  
! 	/**
! 	 * insideTimerAction
! 	 */
! 	protected class insideTimerAction implements ActionListener {
  
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
  
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor insideTimerAction
! 		 * @param manager TODO
! 		 */
! 		protected insideTimerAction(ToolTipManager manager) {
! 			// TODO
! 		} // insideTimerAction()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * actionPerformed
! 		 * @param event TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
  
  
! 	} // insideTimerAction
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * enterTimer
! 	 */
! 	Timer enterTimer;
  
! 	/**
! 	 * exitTimer
! 	 */
! 	Timer exitTimer;
  
! 	/**
! 	 * insideTimer
! 	 */
! 	Timer insideTimer;
  
! 	/**
! 	 * toolTipText
! 	 */
! 	String toolTipText;
  
! 	/**
! 	 * mouseEvent
! 	 */
! 	MouseEvent mouseEvent;
  
! 	/**
! 	 * showImmediately
! 	 */
! 	boolean showImmediately;
  
! 	/**
! 	 * tip
! 	 */
! 	JToolTip tip;
  
! 	/**
! 	 * enabled
! 	 */
! 	boolean enabled;
  
! 	/**
! 	 * timerEnter
! 	 */
! 	private long timerEnter;
  
! 	/**
! 	 * lightWeightPopupEnabled
! 	 */
! 	protected boolean lightWeightPopupEnabled;
  
! 	/**
! 	 * heavyWeightPopupEnabled
! 	 */
! 	protected boolean heavyWeightPopupEnabled;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor ToolTipManager
! 	 */
! 	ToolTipManager() {
! 		// TODO
! 	} // ToolTipManager()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * sharedInstance
! 	 * @returns ToolTipManager
! 	 */
! 	public static ToolTipManager sharedInstance() {
! 		return null; // TODO
! 	} // sharedInstance()
  
! 	/**
! 	 * setEnabled
! 	 * @param enabled TODO
! 	 */
! 	public void setEnabled(boolean enabled) {
! 		// TODO
! 	} // setEnabled()
  
! 	/**
! 	 * isEnabled
! 	 * @returns boolean
! 	 */
! 	public boolean isEnabled() {
! 		return false; // TODO
! 	} // isEnabled()
  
! 	/**
! 	 * isLightWeightPopupEnabled
! 	 * @returns boolean
! 	 */
! 	public boolean isLightWeightPopupEnabled() {
! 		return false; // TODO
! 	} // isLightWeightPopupEnabled()
  
! 	/**
! 	 * setLightWeightPopupEnabled
! 	 * @param enabled TODO
! 	 */
! 	public void setLightWeightPopupEnabled(boolean enabled) {
! 		// TODO
! 	} // setLightWeightPopupEnabled()
  
! 	/**
! 	 * getInitialDelay
! 	 * @returns int
! 	 */
! 	public int getInitialDelay() {
! 		return 0; // TODO
! 	} // getInitialDelay()
  
! 	/**
! 	 * setInitialDelay
! 	 * @param delay TODO
! 	 */
! 	public void setInitialDelay(int delay) {
! 		// TODO
! 	} // setInitialDelay()
  
! 	/**
! 	 * getDismissDelay
! 	 * @returns int
! 	 */
! 	public int getDismissDelay() {
! 		return 0; // TODO
! 	} // getDismissDelay()
  
! 	/**
! 	 * setDismissDelay
! 	 * @param delay TODO
! 	 */
! 	public void setDismissDelay(int delay) {
! 		// TODO
! 	} // setDismissDelay()
  
! 	/**
! 	 * getReshowDelay
! 	 * @returns int
! 	 */
! 	public int getReshowDelay() {
! 		return 0; // TODO
! 	} // getReshowDelay()
  
! 	/**
! 	 * setReshowDelay
! 	 * @param delay TODO
! 	 */
! 	public void setReshowDelay(int delay) {
! 		// TODO
! 	} // setReshowDelay()
  
! 	/**
! 	 * registerComponent
! 	 * @param component TODO
! 	 */
! 	public void registerComponent(JComponent component) {
! 		// TODO
! 	} // registerComponent()
  
! 	/**
! 	 * unregisterComponent
! 	 * @param component TODO
! 	 */
! 	public void unregisterComponent(JComponent component) {
! 		// TODO
! 	} // unregisterComponent()
  
! 	/**
! 	 * mouseEntered
! 	 * @param event TODO
! 	 */
! 	public void mouseEntered(MouseEvent event) {
! 		// TODO
! 	} // mouseEntered()
  
! 	/**
! 	 * mouseExited
! 	 * @param event TODO
! 	 */
! 	public void mouseExited(MouseEvent event) {
! 		// TODO
! 	} // mouseExited()
  
! 	/**
! 	 * mousePressed
! 	 * @param event TODO
! 	 */
! 	public void mousePressed(MouseEvent event) {
! 		// TODO
! 	} // mousePressed()
  
! 	/**
! 	 * mouseDragged
! 	 * @param event TODO
! 	 */
! 	public void mouseDragged(MouseEvent event) {
! 		// TODO
! 	} // mouseDragged()
  
! 	/**
! 	 * mouseMoved
! 	 * @param event TODO
! 	 */
! 	public void mouseMoved(MouseEvent event) {
! 		// TODO
! 	} // mouseMoved()
  
  
! } // ToolTipManager
--- 52,641 ----
  import java.awt.event.MouseMotionListener;
  
  /**
!  * This class is responsible for the registration of JToolTips to Components
!  * and for displaying them when appropriate.
   */
! public class ToolTipManager extends MouseAdapter implements MouseMotionListener
! {
!   /**
!    * This ActionListener is associated with the Timer that listens to whether
!    * the JToolTip can be hidden after four seconds.
!    */
!   protected class stillInsideTimerAction implements ActionListener
!   {
!     /**
!      * This method creates a new stillInsideTimerAction object.
!      */
!     protected stillInsideTimerAction()
!     {
!     }
  
!     /**
!      * This method hides the JToolTip when the Timer has finished.
!      *
!      * @param event The ActionEvent.
!      */
!     public void actionPerformed(ActionEvent event)
!     {
!       hideTip();
!     }
!   }
  
!   /**
!    * This Actionlistener is associated with the Timer that listens to whether
!    * the mouse cursor has re-entered the JComponent in time for an immediate
!    * redisplay of the JToolTip.
!    */
!   protected class outsideTimerAction implements ActionListener
!   {
!     /**
!      * This method creates a new outsideTimerAction object.
!      */
!     protected outsideTimerAction()
!     {
!     }
  
+     /**
+      * This method is called when the Timer that listens to whether the mouse
+      * cursor has re-entered the JComponent has run out.
+      *
+      * @param event The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent event)
+     {
+     }
+   }
  
!   /**
!    * This ActionListener is associated with the Timer that listens to whether
!    * it is time for the JToolTip to be displayed after the mouse has entered
!    * the JComponent.
!    */
!   protected class insideTimerAction implements ActionListener
!   {
!     /**
!      * This method creates a new insideTimerAction object.
!      */
!     protected insideTimerAction()
!     {
!     }
  
!     /**
!      * This method displays the JToolTip when the Mouse has been still for the
!      * delay.
!      *
!      * @param event The ActionEvent.
!      */
!     public void actionPerformed(ActionEvent event)
!     {
!       showTip();
!       if (insideTimer != null)
! 	insideTimer.start();
!     }
!   }
  
+   /**
+    * The Timer that determines whether the Mouse has been still long enough
+    * for the JToolTip to be displayed.
+    */
+   Timer enterTimer;
  
!   /**
!    * The Timer that determines whether the Mouse has re-entered the JComponent
!    * quickly enough for the JToolTip to be displayed immediately.
!    */
!   Timer exitTimer;
  
!   /**
!    * The Timer that determines whether the JToolTip has been displayed long
!    * enough for it to be hidden.
!    */
!   Timer insideTimer;
  
+   /** A global enabled setting for the ToolTipManager. */
+   private transient boolean enabled = true;
  
!   /** lightWeightPopupEnabled */
!   protected boolean lightWeightPopupEnabled = true;
  
!   /** heavyWeightPopupEnabled */
!   protected boolean heavyWeightPopupEnabled = false;
  
!   /** The shared instance of the ToolTipManager. */
!   private static ToolTipManager shared;
  
+   /** The current component the tooltip is being displayed for. */
+   private static Component currentComponent;
  
!   /** The current tooltip. */
!   private static JToolTip currentTip;
  
!   /** The last known position of the mouse cursor. */
!   private static Point currentPoint;
  
+   /**
+    * The panel that holds the tooltip when the tooltip is displayed fully
+    * inside the current container.
+    */
+   private static Container containerPanel;
  
!   /**
!    * The window used when the tooltip doesn't fit inside the current
!    * container.
!    */
!   private static JWindow tooltipWindow;
  
!   /**
!    * Creates a new ToolTipManager and sets up the timers.
!    */
!   ToolTipManager()
!   {
!     enterTimer = new Timer(750, new insideTimerAction());
!     enterTimer.setRepeats(false);
  
+     insideTimer = new Timer(4000, new stillInsideTimerAction());
+     insideTimer.setRepeats(false);
  
!     exitTimer = new Timer(500, new outsideTimerAction());
!     exitTimer.setRepeats(false);
!   }
  
+   /**
+    * This method returns the shared instance of ToolTipManager used by all
+    * JComponents.
+    *
+    * @return The shared instance of ToolTipManager.
+    */
+   public static ToolTipManager sharedInstance()
+   {
+     if (shared == null)
+       shared = new ToolTipManager();
  
!     return shared;
!   }
  
!   /**
!    * This method sets whether ToolTips are enabled or disabled for all
!    * JComponents.
!    *
!    * @param enabled Whether ToolTips are enabled or disabled for all
!    *        JComponents.
!    */
!   public void setEnabled(boolean enabled)
!   {
!     if (! enabled)
!       {
! 	enterTimer.stop();
! 	exitTimer.stop();
! 	insideTimer.stop();
!       }
  
!     this.enabled = enabled;
!   }
  
!   /**
!    * This method returns whether ToolTips are enabled.
!    *
!    * @return Whether ToolTips are enabled.
!    */
!   public boolean isEnabled()
!   {
!     return enabled;
!   }
  
!   /**
!    * This method returns whether LightweightToolTips are enabled.
!    *
!    * @return Whether LighweightToolTips are enabled.
!    */
!   public boolean isLightWeightPopupEnabled()
!   {
!     return lightWeightPopupEnabled;
!   }
  
!   /**
!    * This method sets whether LightweightToolTips are enabled. If you mix
!    * Lightweight and Heavyweight components, you must set this to false to
!    * ensure that the ToolTips popup above all other components.
!    *
!    * @param enabled Whether LightweightToolTips will be enabled.
!    */
!   public void setLightWeightPopupEnabled(boolean enabled)
!   {
!     lightWeightPopupEnabled = enabled;
!     heavyWeightPopupEnabled = ! enabled;
!   }
  
!   /**
!    * This method returns the initial delay before the ToolTip is shown when
!    * the mouse enters a Component.
!    *
!    * @return The initial delay before the ToolTip is shown.
!    */
!   public int getInitialDelay()
!   {
!     return enterTimer.getDelay();
!   }
  
!   /**
!    * This method sets the initial delay before the ToolTip is shown when the
!    * mouse enters a Component.
!    *
!    * @param delay The initial delay before the ToolTip is shown.
!    */
!   public void setInitialDelay(int delay)
!   {
!     enterTimer.setDelay(delay);
!   }
  
!   /**
!    * This method returns the time the ToolTip will be shown before being
!    * hidden.
!    *
!    * @return The time the ToolTip will be shown before being hidden.
!    */
!   public int getDismissDelay()
!   {
!     return insideTimer.getDelay();
!   }
  
!   /**
!    * This method sets the time the ToolTip will be shown before being hidden.
!    *
!    * @param delay The time the ToolTip will be shown before being hidden.
!    */
!   public void setDismissDelay(int delay)
!   {
!     insideTimer.setDelay(delay);
!   }
  
!   /**
!    * This method returns the amount of delay where if the mouse re-enters a
!    * Component, the tooltip will be shown immediately.
!    *
!    * @return The reshow delay.
!    */
!   public int getReshowDelay()
!   {
!     return exitTimer.getDelay();
!   }
  
!   /**
!    * This method sets the amount of delay where if the mouse re-enters a
!    * Component, the tooltip will be shown immediately.
!    *
!    * @param delay The reshow delay.
!    */
!   public void setReshowDelay(int delay)
!   {
!     exitTimer.setDelay(delay);
!   }
  
+   /**
+    * This method registers a JComponent with the ToolTipManager.
+    *
+    * @param component The JComponent to register with the ToolTipManager.
+    */
+   public void registerComponent(JComponent component)
+   {
+     component.addMouseListener(this);
+     component.addMouseMotionListener(this);
+   }
  
!   /**
!    * This method unregisters a JComponent with the ToolTipManager.
!    *
!    * @param component The JComponent to unregister with the ToolTipManager.
!    */
!   public void unregisterComponent(JComponent component)
!   {
!     component.removeMouseMotionListener(this);
!     component.removeMouseListener(this);
!   }
  
!   /**
!    * This method is called whenever the mouse enters a JComponent registered
!    * with the ToolTipManager. When the mouse enters within the period of time
!    * specified by the reshow delay, the tooltip will be displayed
!    * immediately. Otherwise, it must wait for the initial delay before
!    * displaying the tooltip.
!    *
!    * @param event The MouseEvent.
!    */
!   public void mouseEntered(MouseEvent event)
!   {
!     if (currentComponent != null
!         && getContentPaneDeepestComponent(event) == currentComponent)
!       return;
!     currentPoint = event.getPoint();
!     currentComponent = (Component) event.getSource();
  
+     if (exitTimer.isRunning())
+       {
+ 	exitTimer.stop();
+ 	showTip();
+ 	insideTimer.start();
+ 	return;
+       }
  
!     // This should always be stopped unless we have just fake-exited.
!     if (! enterTimer.isRunning())
!       enterTimer.start();
!   }
  
!   /**
!    * This method is called when the mouse exits a JComponent registered with
!    * the ToolTipManager. When the mouse exits, the tooltip should be hidden
!    * immediately.
!    *
!    * @param event The MouseEvent.
!    */
!   public void mouseExited(MouseEvent event)
!   {
!     if (getContentPaneDeepestComponent(event) == currentComponent)
!       return;
  
!     currentPoint = event.getPoint();
!     currentComponent = null;
!     hideTip();
  
!     if (! enterTimer.isRunning() && insideTimer.isRunning())
!       exitTimer.start();
!     if (enterTimer.isRunning())
!       enterTimer.stop();
!     if (insideTimer.isRunning())
!       insideTimer.stop();
!   }
  
!   /**
!    * This method is called when the mouse is pressed on a JComponent
!    * registered with the ToolTipManager. When the mouse is pressed, the
!    * tooltip (if it is shown) must be hidden immediately.
!    *
!    * @param event The MouseEvent.
!    */
!   public void mousePressed(MouseEvent event)
!   {
!     currentPoint = event.getPoint();
!     if (enterTimer.isRunning())
!       enterTimer.restart();
!     else if (insideTimer.isRunning())
!       {
! 	insideTimer.stop();
! 	hideTip();
!       }
!     currentComponent.invalidate();
!     currentComponent.validate();
!     currentComponent.repaint();
!   }
  
!   /**
!    * This method is called when the mouse is dragged in a JComponent
!    * registered with the ToolTipManager.
!    *
!    * @param event The MouseEvent.
!    */
!   public void mouseDragged(MouseEvent event)
!   {
!     currentPoint = event.getPoint();
!     if (enterTimer.isRunning())
!       enterTimer.restart();
!   }
  
!   /**
!    * This method is called when the mouse is moved in a JComponent registered
!    * with the ToolTipManager.
!    *
!    * @param event The MouseEvent.
!    */
!   public void mouseMoved(MouseEvent event)
!   {
!     currentPoint = event.getPoint();
!     if (currentTip != null)
!       {
! 	if (currentComponent == null)
! 	  currentComponent = (Component) event.getSource();
! 	
! 	String text = ((JComponent) currentComponent).getToolTipText(event);
! 	currentTip.setTipText(text);
!       }
!     if (enterTimer.isRunning())
!       enterTimer.restart();
!   }
  
!   /**
!    * This method displays the ToolTip. It can figure out the method needed to
!    * show it as well (whether to display it in heavyweight/lightweight panel
!    * or a window.)
!    */
!   private void showTip()
!   {
!     if (! enabled || currentComponent == null)
!       return;
  
!     if (currentTip == null
!         || currentTip.getComponent() != currentComponent
!         && currentComponent instanceof JComponent)
!       currentTip = ((JComponent) currentComponent).createToolTip();
!     Point p = currentPoint;
!     Dimension dims = currentTip.getPreferredSize();
!     if (canToolTipFit(currentTip))
!       {
! 	JLayeredPane pane = ((JRootPane) SwingUtilities.getAncestorOfClass(JRootPane.class,
! 	                                                                   currentComponent))
! 	                    .getLayeredPane();
  
! 	// This should never happen, but just in case.
! 	if (pane == null)
! 	  return;
  
! 	if (containerPanel != null)
! 	  hideTip();
! 	if (isLightWeightPopupEnabled())
! 	  {
! 	    containerPanel = new Panel();
! 	    JRootPane root = new JRootPane();
! 	    root.getContentPane().add(currentTip);
! 	    containerPanel.add(root);
! 	  }
! 	else
! 	  {
! 	    containerPanel = new JPanel();
! 	    containerPanel.add(currentTip);
! 	  }
! 	LayoutManager lm = containerPanel.getLayout();
! 	if (lm instanceof FlowLayout)
! 	  {
! 	    FlowLayout fm = (FlowLayout) lm;
! 	    fm.setVgap(0);
! 	    fm.setHgap(0);
! 	  }
  
! 	p = getGoodPoint(p, pane, currentTip, dims);
  
! 	pane.add(containerPanel);
! 	containerPanel.setBounds(p.x, p.y, dims.width, dims.height);
! 	currentTip.setBounds(0, 0, dims.width, dims.height);
  
! 	pane.revalidate();
! 	pane.repaint();
!       }
!     else
!       {
! 	SwingUtilities.convertPointToScreen(p, currentComponent);
! 	tooltipWindow = new JWindow();
! 	tooltipWindow.getContentPane().add(currentTip);
! 	tooltipWindow.setFocusable(false);
! 	tooltipWindow.pack();
! 	tooltipWindow.setBounds(p.x, p.y, dims.width, dims.height);
! 	tooltipWindow.show();
!       }
!     currentTip.setVisible(true);
!   }
  
!   /**
!    * This method hides the ToolTip.
!    */
!   private void hideTip()
!   {
!     if (currentTip == null || ! currentTip.isVisible() || ! enabled)
!       return;
!     currentTip.setVisible(false);
!     if (containerPanel != null)
!       {
! 	Container parent = containerPanel.getParent();
! 	if (parent == null)
! 	  return;
! 	parent.remove(containerPanel);
! 	parent.invalidate();
! 	parent.validate();
! 	parent.repaint();
  
! 	parent = currentTip.getParent();
! 	if (parent == null)
! 	  return;
! 	parent.remove(currentTip);
  
! 	containerPanel = null;
!       }
!     if (tooltipWindow != null)
!       {
! 	tooltipWindow.hide();
! 	tooltipWindow.dispose();
! 	tooltipWindow = null;
!       }
!   }
  
!   /**
!    * This method returns a point in the LayeredPane where the ToolTip can be
!    * shown. The point returned (if the ToolTip is to be displayed at the
!    * preferred dimensions) will always place the ToolTip inside the
!    * currentComponent if possible.
!    *
!    * @param p The last known good point for the mouse.
!    * @param c The JLayeredPane in the first RootPaneContainer up from the
!    *        currentComponent.
!    * @param tip The ToolTip to display.
!    * @param dims The ToolTip preferred dimensions (can be null).
!    *
!    * @return A good point to place the ToolTip.
!    */
!   private Point getGoodPoint(Point p, JLayeredPane c, JToolTip tip,
!                              Dimension dims)
!   {
!     if (dims == null)
!       dims = tip.getPreferredSize();
!     Rectangle bounds = currentComponent.getBounds();
!     if (p.x + dims.width > bounds.width)
!       p.x = bounds.width - dims.width;
!     if (p.y + dims.height > bounds.height)
!       p.y = bounds.height - dims.height;
  
!     p = SwingUtilities.convertPoint(currentComponent, p, c);
!     return p;
!   }
  
+   /**
+    * This method returns the deepest component in the content pane for the
+    * first RootPaneContainer up from the currentComponent. This method is
+    * used in conjunction with one of the mouseXXX methods.
+    *
+    * @param e The MouseEvent.
+    *
+    * @return The deepest component in the content pane.
+    */
+   private Component getContentPaneDeepestComponent(MouseEvent e)
+   {
+     Component source = (Component) e.getSource();
+     Container parent = (Container) SwingUtilities.getAncestorOfClass(JRootPane.class,
+                                                                      currentComponent);
+     if (parent == null)
+       return null;
+     parent = ((JRootPane) parent).getContentPane();
+     Point p = e.getPoint();
+     p = SwingUtilities.convertPoint(source, p, parent);
+     Component target = SwingUtilities.getDeepestComponentAt(parent, p.x, p.y);
+     return target;
+   }
  
!   /**
!    * This method returns whether the ToolTip can fit in the first
!    * RootPaneContainer up from the currentComponent.
!    *
!    * @param tip The ToolTip.
!    *
!    * @return Whether the ToolTip can fit.
!    */
!   private boolean canToolTipFit(JToolTip tip)
!   {
!     JRootPane root = (JRootPane) SwingUtilities.getAncestorOfClass(JRootPane.class,
!                                                                    currentComponent);
!     if (root == null)
!       return false;
!     Dimension pref = tip.getPreferredSize();
!     Dimension rootSize = root.getSize();
!     if (rootSize.width > pref.width && rootSize.height > pref.height)
!       return true;
!     return false;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/TransferHandler.java gcc-4.0.0/libjava/javax/swing/TransferHandler.java
*** gcc-3.4.3/libjava/javax/swing/TransferHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/TransferHandler.java	Wed Feb 16 20:02:42 2005
***************
*** 0 ****
--- 1,189 ----
+ /* TransferHandler.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing;
+ 
+ import java.awt.datatransfer.Clipboard;
+ import java.awt.datatransfer.DataFlavor;
+ import java.awt.datatransfer.Transferable;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.InputEvent;
+ import java.io.Serializable;
+ 
+ public class TransferHandler implements Serializable
+ {
+   static class TransferAction extends AbstractAction
+   {
+     private String command;
+ 
+     public TransferAction(String command)
+     {
+       this.command = command;
+     }
+     
+     public void actionPerformed(ActionEvent event)
+     {
+       JComponent component = (JComponent) event.getSource();
+       TransferHandler transferHandler = component.getTransferHandler();
+       Clipboard clipboard = getClipboard(component);
+ 
+       if (command.equals(COMMAND_COPY))
+ 	transferHandler.exportToClipboard(component, clipboard, COPY);
+       else if (command.equals(COMMAND_CUT))
+ 	transferHandler.exportToClipboard(component, clipboard, MOVE);
+       else if (command.equals(COMMAND_PASTE))
+ 	{
+ 	  Transferable transferable = clipboard.getContents(null);
+ 
+ 	  if (transferable != null)
+ 	    transferHandler.importData(component, transferable);
+ 	}
+     }
+   
+     private static Clipboard getClipboard(JComponent component)
+     {
+       SecurityManager sm = System.getSecurityManager();
+     
+       if (sm != null)
+ 	{
+ 	  try
+ 	    {
+ 	      sm.checkSystemClipboardAccess();
+ 
+ 	      // We may access system clipboard.
+ 	      return component.getToolkit().getSystemClipboard();
+ 	    }
+ 	  catch (SecurityException e)
+ 	    {
+ 	      // We may not access system clipboard.
+ 	    }
+ 	}
+     
+       // Create VM-local clipboard if non exists yet.
+       if (clipboard == null)
+         clipboard = new Clipboard("Clipboard");
+ 
+       return clipboard;
+     }
+   }
+   
+   private static final long serialVersionUID = -7908749299918704233L;
+ 
+   private static final String COMMAND_COPY = "copy";
+   private static final String COMMAND_CUT = "cut";
+   private static final String COMMAND_PASTE = "paste";
+   
+   public static final int NONE = 0;
+   public static final int COPY = 1;
+   public static final int MOVE = 2;
+   public static final int COPY_OR_MOVE = 3;
+ 
+   private static Action copyAction = new TransferAction(COMMAND_COPY);
+   private static Action cutAction = new TransferAction(COMMAND_CUT);
+   private static Action pasteAction = new TransferAction(COMMAND_PASTE);
+   
+   /**
+    * Clipboard if system clipboard may not be used.
+    */
+   private static Clipboard clipboard;
+   
+   private int sourceActions;
+   private Icon visualRepresentation;
+   
+   public static Action getCopyAction()
+   {
+     return copyAction;
+   }
+ 
+   public static Action getCutAction()
+   {
+     return cutAction;
+   }
+ 
+   public static Action getPasteAction()
+   {
+     return pasteAction;
+   }
+ 
+   protected TransferHandler()
+   {
+     this.sourceActions = NONE;
+   }
+ 
+   public TransferHandler(String property)
+   {
+     this.sourceActions = property != null ? COPY : NONE;
+   }
+ 
+   public boolean canImport (JComponent c, DataFlavor[] flavors)
+   {
+     return false;
+   }
+ 
+   protected Transferable createTransferable(JComponent c) 
+   {
+     return null;
+   }
+ 
+   public void exportAsDrag (JComponent c, InputEvent e, int action) 
+   {    
+   }
+ 
+   protected void exportDone (JComponent c, Transferable data, int action) 
+   {
+   }
+ 
+   public void exportToClipboard(JComponent c, Clipboard clip, int action) 
+   {
+   } 
+ 
+   public int getSourceActions (JComponent c)
+   {
+     return sourceActions;
+   }
+ 
+   public Icon getVisualRepresentation (Transferable t)
+   {
+     return visualRepresentation;
+   }
+ 
+   public boolean importData (JComponent c, Transferable t) 
+   {
+     return false;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/UIDefaults.java gcc-4.0.0/libjava/javax/swing/UIDefaults.java
*** gcc-3.4.3/libjava/javax/swing/UIDefaults.java	Thu Nov 27 09:04:01 2003
--- gcc-4.0.0/libjava/javax/swing/UIDefaults.java	Wed Feb 16 20:02:43 2005
***************
*** 1,5 ****
  /* UIDefaults.java -- database for all settings and interface bindings.
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UIDefaults.java -- database for all settings and interface bindings.
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,81 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing;
  
  import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.Font;
  import java.awt.Insets;
- import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  import java.lang.reflect.Method;
- import java.lang.reflect.Constructor;
  import java.util.Hashtable;
- import java.util.Iterator;
- import java.util.List;
- import java.util.ListIterator;
  import java.util.LinkedList;
  import java.util.Locale;
- import java.util.Set;
- import java.util.HashSet;
  import java.util.MissingResourceException;
  import java.util.ResourceBundle;
  import javax.swing.border.Border;
  import javax.swing.plaf.ComponentUI;
  
  /**
   * UIDefaults is a database where all settings and interface bindings are
!  * stored into. An PLAF implementation fills one of these (see for example
!  * plaf/basic/BasicDefaults.java) with "JButton" -> new BasicButtonUI().
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public class UIDefaults extends Hashtable
  {
  
!   LinkedList bundles;
!   Set listeners;
!   Locale defaultLocale;
! 
!   interface ActiveValue
    {
      Object createValue(UIDefaults table);
!   } // interface ActiveValue
  
    public static class LazyInputMap implements LazyValue
    {
--- 35,77 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing;
  
  import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.Font;
  import java.awt.Insets;
  import java.beans.PropertyChangeListener;
+ import java.beans.PropertyChangeSupport;
  import java.lang.reflect.Method;
  import java.util.Hashtable;
  import java.util.LinkedList;
+ import java.util.ListIterator;
  import java.util.Locale;
  import java.util.MissingResourceException;
  import java.util.ResourceBundle;
+ 
  import javax.swing.border.Border;
  import javax.swing.plaf.ComponentUI;
  
  /**
   * UIDefaults is a database where all settings and interface bindings are
!  * stored into. A PLAF implementation fills one of these (see for example
!  * plaf/basic/BasicLookAndFeel.java) with "ButtonUI" -&gt; new BasicButtonUI().
   *
   * @author Ronald Veldema (rveldema@cs.vu.nl)
   */
  public class UIDefaults extends Hashtable
  {
+   private LinkedList bundles;
+   private Locale defaultLocale;
+   private PropertyChangeSupport propertyChangeSupport;
  
!   public static interface ActiveValue
    {
      Object createValue(UIDefaults table);
!   }
  
    public static class LazyInputMap implements LazyValue
    {
*************** public class UIDefaults extends Hashtabl
*** 94,105 ****
          }
        return im;
      }
!   } // class LazyInputMap
  
!   interface LazyValue
    {
      Object createValue(UIDefaults table);
!   } // interface LazyValue
  
    public static class ProxyLazyValue implements LazyValue
    {
--- 90,101 ----
          }
        return im;
      }
!   }
  
!   public static interface LazyValue
    {
      Object createValue(UIDefaults table);
!   }
  
    public static class ProxyLazyValue implements LazyValue
    {
*************** public class UIDefaults extends Hashtabl
*** 114,122 ****
              try
                {
                  return Class
!                   .forName (className)
!                   .getConstructor (new Class[] {})
!                   .newInstance (new Object[] {});
                }
              catch (Exception e)
                {
--- 110,118 ----
              try
                {
                  return Class
!                   .forName(className)
!                   .getConstructor(new Class[] {})
!                   .newInstance(new Object[] {});
                }
              catch (Exception e)
                {
*************** public class UIDefaults extends Hashtabl
*** 149,202 ****
          };
      }
      
!     public ProxyLazyValue (String c, Object[] os)
      {
        final String className = c;
        final Object[] objs = os;
        final Class[] clss = new Class[objs.length];
        for (int i = 0; i < objs.length; ++i)
          {
!           clss[i] = objs[i].getClass ();
          }      
!       inner = new LazyValue ()
          { 
!           public Object createValue (UIDefaults table) 
            {            
              try
                {
                  return Class
!                   .forName (className)
!                   .getConstructor (clss)
!                   .newInstance (objs);
!     }
              catch (Exception e)
!     {
                  return null;
                }
            }
          };
      }
  
!     public ProxyLazyValue (String c, String m, Object[] os)
      {
        final String className = c;
        final String methodName = m;
        final Object[] objs = os;
        final Class[] clss = new Class[objs.length];
        for (int i = 0; i < objs.length; ++i)
!     {
!           clss[i] = objs[i].getClass ();
!     }
!       inner = new LazyValue ()
          { 
!     public Object createValue(UIDefaults table)
!     {
              try 
                {
                  return Class
!                   .forName (className)
!                   .getMethod (methodName, clss)
!                   .invoke (null, objs);
                }
              catch (Exception e)
                {
--- 145,198 ----
          };
      }
      
!     public ProxyLazyValue(String c, Object[] os)
      {
        final String className = c;
        final Object[] objs = os;
        final Class[] clss = new Class[objs.length];
        for (int i = 0; i < objs.length; ++i)
          {
!           clss[i] = objs[i].getClass();
          }      
!       inner = new LazyValue()
          { 
!           public Object createValue(UIDefaults table) 
            {            
              try
                {
                  return Class
!                   .forName(className)
!                   .getConstructor(clss)
!                   .newInstance(objs);
! 	      }
              catch (Exception e)
! 	      {
                  return null;
                }
            }
          };
      }
  
!     public ProxyLazyValue(String c, String m, Object[] os)
      {
        final String className = c;
        final String methodName = m;
        final Object[] objs = os;
        final Class[] clss = new Class[objs.length];
        for (int i = 0; i < objs.length; ++i)
! 	{
!           clss[i] = objs[i].getClass();
! 	}
!       inner = new LazyValue()
          { 
! 	  public Object createValue(UIDefaults table)
! 	  {
              try 
                {
                  return Class
!                   .forName(className)
!                   .getMethod(methodName, clss)
!                   .invoke(null, objs);
                }
              catch (Exception e)
                {
*************** public class UIDefaults extends Hashtabl
*** 206,265 ****
          };
      }
      
!     public Object createValue (UIDefaults table)
      {
!       return inner.createValue (table);
      }
!   } // class ProxyLazyValue
  
    private static final long serialVersionUID = 7341222528856548117L;
  
    public UIDefaults()
    {
!     bundles = new LinkedList ();
!     listeners = new HashSet ();
!     defaultLocale = Locale.getDefault ();
    }
  
    public UIDefaults(Object[] entries)
    {
!     bundles = new LinkedList ();
!     listeners = new HashSet ();
!     defaultLocale = Locale.getDefault ();
! 
!     for (int i = 0; (2*i+1) < entries.length; ++i)
!       {
!         put (entries[2*i], entries[2*i+1]);
!       }
    }
  
    public Object get(Object key)
    {
!     return this.get (key, getDefaultLocale ());
    }
  
!   public Object get (Object key, Locale loc)
    {
      Object obj = null;
  
!     if (super.containsKey (key))
        {
!         obj = super.get (key);
        }
      else if (key instanceof String)
        {
          String keyString = (String) key;
!         ListIterator i = bundles.listIterator (0);
!         while (i.hasNext ())
!   {
!             String bundle_name = (String) i.next ();
              ResourceBundle res =
!               ResourceBundle.getBundle (bundle_name, loc);
              if (res != null)
                {
                  try 
                    {                    
!                     obj = res.getObject (keyString);
                      break;
                    }
                  catch (MissingResourceException me)
--- 202,257 ----
          };
      }
      
!     public Object createValue(UIDefaults table)
      {
!       return inner.createValue(table);
      }
!   }
  
    private static final long serialVersionUID = 7341222528856548117L;
  
    public UIDefaults()
    {
!     bundles = new LinkedList();
!     defaultLocale = Locale.getDefault();
!     propertyChangeSupport = new PropertyChangeSupport(this);
    }
  
    public UIDefaults(Object[] entries)
    {
!     this();
!     
!     for (int i = 0; (2 * i + 1) < entries.length; ++i)
!       put(entries[2 * i], entries[2 * i + 1]);
    }
  
    public Object get(Object key)
    {
!     return this.get(key, getDefaultLocale());
    }
  
!   public Object get(Object key, Locale loc)
    {
      Object obj = null;
  
!     if (super.containsKey(key))
        {
!         obj = super.get(key);
        }
      else if (key instanceof String)
        {
          String keyString = (String) key;
!         ListIterator i = bundles.listIterator(0);
!         while (i.hasNext())
! 	  {
!             String bundle_name = (String) i.next();
              ResourceBundle res =
!               ResourceBundle.getBundle(bundle_name, loc);
              if (res != null)
                {
                  try 
                    {                    
!                     obj = res.getObject(keyString);
                      break;
                    }
                  catch (MissingResourceException me)
*************** public class UIDefaults extends Hashtabl
*** 279,292 ****
  
      if (obj instanceof LazyValue)
        {
!         Object resolved = ((LazyValue)obj).createValue (this);
!         super.remove (key);
!         super.put (key, resolved);
          return resolved;
        }
      else if (obj instanceof ActiveValue)
        {
!         return ((ActiveValue)obj).createValue (this);
        }    
  
      return obj;
--- 271,284 ----
  
      if (obj instanceof LazyValue)
        {
!         Object resolved = ((LazyValue) obj).createValue(this);
!         super.remove(key);
!         super.put(key, resolved);
          return resolved;
        }
      else if (obj instanceof ActiveValue)
        {
!         return ((ActiveValue) obj).createValue(this);
        }    
  
      return obj;
*************** public class UIDefaults extends Hashtabl
*** 294,312 ****
  
    public Object put(Object key, Object value)
    {
!     Object old = super.put (key, value);
      if (key instanceof String && old != value)
!       firePropertyChange ((String) key, old, value);
      return old;
    }
  
    public void putDefaults(Object[] entries)
    {
!     for (int i = 0; (2*i+1) < entries.length; ++i)
    {
!         super.put (entries[2*i], entries[2*i+1]);
        }
!     firePropertyChange ("UIDefaults", null, null);
    }
  
    public Font getFont(Object key)
--- 286,308 ----
  
    public Object put(Object key, Object value)
    {
!     Object old;
!     if (value != null)
!       old = super.put(key, value);
!     else
!       old = super.remove(key);
      if (key instanceof String && old != value)
!       firePropertyChange((String) key, old, value);
      return old;
    }
  
    public void putDefaults(Object[] entries)
    {
!     for (int i = 0; (2 * i + 1) < entries.length; ++i)
    {
!         super.put(entries[2 * i], entries[2 * i + 1]);
        }
!     firePropertyChange("UIDefaults", null, null);
    }
  
    public Font getFont(Object key)
*************** public class UIDefaults extends Hashtabl
*** 369,381 ****
      return o instanceof String ? (String) o : null;
    }
  
!   int getInt(Object key)
    {
      Object o = get(key);
      return o instanceof Integer ? ((Integer) o).intValue() : 0;
    }
  
!   int getInt(Object key, Locale l)
    {
      Object o = get(key, l);
      return o instanceof Integer ? ((Integer) o).intValue() : 0;
--- 365,377 ----
      return o instanceof String ? (String) o : null;
    }
  
!   public int getInt(Object key)
    {
      Object o = get(key);
      return o instanceof Integer ? ((Integer) o).intValue() : 0;
    }
  
!   public int getInt(Object key, Locale l)
    {
      Object o = get(key, l);
      return o instanceof Integer ? ((Integer) o).intValue() : 0;
*************** public class UIDefaults extends Hashtabl
*** 462,524 ****
        {
          getUIError ("failed to locate createUI method on " + cls.toString ());
          return null;
!   }
  
      try
!   {
          return (ComponentUI) factory.invoke (null, new Object[] { target });
!   }
      catch (java.lang.reflect.InvocationTargetException ite)
! 	{
          getUIError ("InvocationTargetException ("+ ite.getTargetException() 
  		    +") calling createUI(...) on " + cls.toString ());
          return null;        
! 
! 	}
      catch (Exception e)
!   {
          getUIError ("exception calling createUI(...) on " + cls.toString ());
          return null;        
        }
    }
  
!   void addPropertyChangeListener(PropertyChangeListener listener)
    {
!     listeners.add (listener);
    }
  
!   void removePropertyChangeListener(PropertyChangeListener listener)
    {
!     listeners.remove (listener);
    }
  
    public PropertyChangeListener[] getPropertyChangeListeners()
    {
!     return (PropertyChangeListener[]) listeners.toArray ();
    }
  
!   protected void firePropertyChange(String property, Object o, Object n)
    {
!     Iterator i = listeners.iterator ();
!     PropertyChangeEvent pce = new PropertyChangeEvent (this, property, o, n);
!     while (i.hasNext ())
!       {
!         PropertyChangeListener pcl = (PropertyChangeListener) i.next ();
!         pcl.propertyChange (pce);
!       }
    }
  
!   void addResourceBundle(String name)
    {
!     bundles.addFirst (name);
    }
  
!   void removeResourceBundle(String name)
    {
!     bundles.remove (name);
    }
  
!   void setDefaultLocale(Locale loc)
    {
      defaultLocale = loc;
    }
--- 458,514 ----
        {
          getUIError ("failed to locate createUI method on " + cls.toString ());
          return null;
!       }
  
      try
!       {
          return (ComponentUI) factory.invoke (null, new Object[] { target });
!       }
      catch (java.lang.reflect.InvocationTargetException ite)
!       {
          getUIError ("InvocationTargetException ("+ ite.getTargetException() 
  		    +") calling createUI(...) on " + cls.toString ());
          return null;        
!       }
      catch (Exception e)
!       {
          getUIError ("exception calling createUI(...) on " + cls.toString ());
          return null;        
        }
    }
  
!   public void addPropertyChangeListener(PropertyChangeListener listener)
    {
!     propertyChangeSupport.addPropertyChangeListener(listener);
    }
  
!   public void removePropertyChangeListener(PropertyChangeListener listener)
    {
!     propertyChangeSupport.removePropertyChangeListener(listener);
    }
  
    public PropertyChangeListener[] getPropertyChangeListeners()
    {
!     return propertyChangeSupport.getPropertyChangeListeners();
    }
  
!   protected void firePropertyChange(String property,
! 				    Object oldValue, Object newValue)
    {
!     propertyChangeSupport.firePropertyChange(property, oldValue, newValue);
    }
  
!   public void addResourceBundle(String name)
    {
!     bundles.addFirst(name);
    }
  
!   public void removeResourceBundle(String name)
    {
!     bundles.remove(name);
    }
  
!   public void setDefaultLocale(Locale loc)
    {
      defaultLocale = loc;
    }
*************** public class UIDefaults extends Hashtabl
*** 527,530 ****
    {
      return defaultLocale;
    }
! } // class UIDefaults
--- 517,520 ----
    {
      return defaultLocale;
    }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/UIManager.java gcc-4.0.0/libjava/javax/swing/UIManager.java
*** gcc-3.4.3/libjava/javax/swing/UIManager.java	Thu Nov 27 08:53:42 2003
--- gcc-4.0.0/libjava/javax/swing/UIManager.java	Wed Feb 16 20:02:43 2005
***************
*** 1,5 ****
  /* UIManager.java -- 
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UIManager.java -- 
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Font;
*** 44,49 ****
--- 44,51 ----
  import java.awt.Insets;
  import java.beans.PropertyChangeListener;
  import java.io.Serializable;
+ import java.util.Locale;
+ 
  import javax.swing.border.Border;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.metal.MetalLookAndFeel;
*************** public class UIManager implements Serial
*** 54,68 ****
    {
      String name, clazz;
  	
!     LookAndFeelInfo(String name, 
!                     String clazz)
      {
        this.name  = name;
        this.clazz = clazz;
      }
  
!     String getName()      { return name;  }
!     String getClassName() { return clazz; }
    }
  
    private static final long serialVersionUID = -5547433830339189365L;
--- 56,77 ----
    {
      String name, clazz;
  	
!     public LookAndFeelInfo(String name, 
! 			   String clazz)
      {
        this.name  = name;
        this.clazz = clazz;
      }
  
!     public String getName()
!     {
!       return name;
!     }
!     
!     public String getClassName()
!     {
!       return clazz;
!     }
    }
  
    private static final long serialVersionUID = -5547433830339189365L;
*************** public class UIManager implements Serial
*** 80,108 ****
      // Do nothing here.
    }
  
!   public static void addPropertyChangeListener (PropertyChangeListener listener)
    {
      // FIXME
    }
  
!   public static void removePropertyChangeListener (PropertyChangeListener listener)
!     // Remove a PropertyChangeListener from the listener list. 
    {
      // FIXME
    }
  
    /**
     * @since 1.4
     */
!   public static PropertyChangeListener[] getPropertyChangeListeners ()
    {
      // FIXME
      throw new Error ("Not implemented");
    }
  
    public static void addAuxiliaryLookAndFeel (LookAndFeel l)
    {
-     // Add a LookAndFeel to the list of auxiliary look and feels. 
      if (aux_installed == null)
        {
          aux_installed = new LookAndFeel[1];
--- 89,132 ----
      // Do nothing here.
    }
  
!   /**
!    * Add a <code>PropertyChangeListener</code> to the listener list.
!    *
!    * @param listener the listener to add
!    */
!   public static void addPropertyChangeListener(PropertyChangeListener listener)
    {
      // FIXME
    }
  
!   /**
!    * Remove a <code>PropertyChangeListener</code> from the listener list.
!    *
!    * @param listener the listener to remove
!    */
!   public static void removePropertyChangeListener(PropertyChangeListener listener)
    {
      // FIXME
    }
  
    /**
+    * Returns an array of all added <code>PropertyChangeListener</code> objects.
+    *
+    * @return an array of listeners
+    *
     * @since 1.4
     */
!   public static PropertyChangeListener[] getPropertyChangeListeners()
    {
      // FIXME
      throw new Error ("Not implemented");
    }
  
+   /**
+    * Add a LookAndFeel to the list of auxiliary look and feels.
+    */
    public static void addAuxiliaryLookAndFeel (LookAndFeel l)
    {
      if (aux_installed == null)
        {
          aux_installed = new LookAndFeel[1];
*************** public class UIManager implements Serial
*** 136,145 ****
    }
  
    public static  LookAndFeel[] getAuxiliaryLookAndFeels()
!   {	return aux_installed;    }
  
    public static  Object get(Object key)
!   {	return getLookAndFeel().getDefaults().get(key);    }
      
    /**
     * Returns a border from the defaults table. 
--- 160,202 ----
    }
  
    public static  LookAndFeel[] getAuxiliaryLookAndFeels()
!   {
!     return aux_installed;
!   }
  
    public static  Object get(Object key)
!   {
!     return getLookAndFeel().getDefaults().get(key);
!   }
! 
!   public static  Object get(Object key, Locale locale)
!   {
!     return getLookAndFeel().getDefaults().get(key ,locale);
!   }
! 
!   /**
!    * Returns a boolean value from the defaults table,
!    * <code>false</code> if key is not present.
!    *
!    * @since 1.4
!    */
!   public static boolean getBoolean(Object key)
!   {
!     Boolean value = (Boolean) getLookAndFeel().getDefaults().get(key);
!     return value != null ? value.booleanValue() : false;
!   }
!   
!   /**
!    * Returns a boolean value from the defaults table,
!    * <code>false</code> if key is not present.
!    *
!    * @since 1.4
!    */
!   public static boolean getBoolean(Object key, Locale locale)
!   {
!     Boolean value = (Boolean) getLookAndFeel().getDefaults().get(key, locale);
!     return value != null ? value.booleanValue() : false;
!   }
      
    /**
     * Returns a border from the defaults table. 
*************** public class UIManager implements Serial
*** 150,155 ****
--- 207,222 ----
    }
      
    /**
+    * Returns a border from the defaults table.
+    *
+    * @since 1.4
+    */
+   public static Border getBorder(Object key, Locale locale)
+   {
+     return (Border) getLookAndFeel().getDefaults().get(key, locale);
+   }
+     
+   /**
     * Returns a drawing color from the defaults table. 
     */
    public static  Color getColor(Object key)
*************** public class UIManager implements Serial
*** 158,163 ****
--- 225,238 ----
    }
  
    /**
+    * Returns a drawing color from the defaults table. 
+    */
+   public static  Color getColor(Object key, Locale locale)
+   {
+     return (Color) getLookAndFeel().getDefaults().get(key);
+   }
+ 
+   /**
     * this string can be passed to Class.forName()
     */
    public static  String getCrossPlatformLookAndFeelClassName()
*************** public class UIManager implements Serial
*** 178,185 ****
     */
    public static Dimension getDimension(Object key)
    {
!     System.out.println("UIManager.getDim");
!     return new Dimension(200,100);
    }
  
    /**
--- 253,267 ----
     */
    public static Dimension getDimension(Object key)
    {
!     return (Dimension) getLookAndFeel().getDefaults().get(key);
!   }
! 
!   /**
!    * Returns a dimension from the defaults table. 
!    */
!   public static Dimension getDimension(Object key, Locale locale)
!   {
!     return (Dimension) getLookAndFeel().getDefaults().get(key, locale);
    }
  
    /**
*************** public class UIManager implements Serial
*** 188,212 ****
     *
     * @param key an Object that specifies the font. Typically,
     *        this is a String such as
!    *        <code>&quot;TitledBorder.font&quot;</code>.
     */
    public static Font getFont(Object key)
    {
      return (Font) getLookAndFeel().getDefaults().get(key);
    }
  
    public static Icon getIcon(Object key)
-     // Returns an Icon from the defaults table. 
    {
      return (Icon) getLookAndFeel().getDefaults().get(key);
    }
    
    public static Insets getInsets(Object key)
-     // Returns an Insets object from the defaults table. 
    {
      return (Insets) getLookAndFeel().getDefaults().getInsets(key);
    }
  
    public static LookAndFeelInfo[] getInstalledLookAndFeels()
    {
      return installed;
--- 270,327 ----
     *
     * @param key an Object that specifies the font. Typically,
     *        this is a String such as
!    *        <code>TitledBorder.font</code>.
     */
    public static Font getFont(Object key)
    {
      return (Font) getLookAndFeel().getDefaults().get(key);
    }
  
+   /**
+    * Retrieves a font from the defaults table of the current
+    * LookAndFeel.
+    *
+    * @param key an Object that specifies the font. Typically,
+    *        this is a String such as
+    *        <code>TitledBorder.font</code>.
+    */
+   public static Font getFont(Object key, Locale locale)
+   {
+     return (Font) getLookAndFeel().getDefaults().get(key ,locale);
+   }
+ 
+   /**
+    * Returns an Icon from the defaults table.
+    */
    public static Icon getIcon(Object key)
    {
      return (Icon) getLookAndFeel().getDefaults().get(key);
    }
    
+   /**
+    * Returns an Icon from the defaults table.
+    */
+   public static Icon getIcon(Object key, Locale locale)
+   {
+     return (Icon) getLookAndFeel().getDefaults().get(key, locale);
+   }
+   
+   /**
+    * Returns an Insets object from the defaults table.
+    */
    public static Insets getInsets(Object key)
    {
      return (Insets) getLookAndFeel().getDefaults().getInsets(key);
    }
  
+   /**
+    * Returns an Insets object from the defaults table.
+    */
+   public static Insets getInsets(Object key, Locale locale)
+   {
+     return (Insets) getLookAndFeel().getDefaults().getInsets(key, locale);
+   }
+ 
    public static LookAndFeelInfo[] getInstalledLookAndFeels()
    {
      return installed;
*************** public class UIManager implements Serial
*** 220,225 ****
--- 335,348 ----
      return x.intValue();
    }
  
+   public static int getInt(Object key, Locale locale)
+   {
+     Integer x = (Integer) getLookAndFeel().getDefaults().get(key, locale);
+     if (x == null)
+       return 0;
+     return x.intValue();
+   }
+ 
    public static LookAndFeel getLookAndFeel()
    {
      return look_and_feel;
*************** public class UIManager implements Serial
*** 234,282 ****
      return getLookAndFeel().getDefaults();
    }
  
    public static String getString(Object key)
-     // Returns a string from the defaults table. 
    {
      return (String) getLookAndFeel().getDefaults().get(key);
    }
    
    public static String getSystemLookAndFeelClassName()
-     // Returns the name of the LookAndFeel class that implements the native systems look and feel if there is one, otherwise the name of the default cross platform LookAndFeel class. 
    {
      return getCrossPlatformLookAndFeelClassName();
    }
  
    public static ComponentUI getUI(JComponent target)
-     // Returns the L&F object that renders the target component. 
    {
!     ComponentUI ui = getDefaults().getUI(target);
!     //System.out.println("GET-UI-> " + ui + ", for " + target);
!     return ui;
    }
  
    public static void installLookAndFeel(String name, String className)
-     // Creates a new look and feel and adds it to the current array. 
    {
    }
  
    public static void installLookAndFeel(LookAndFeelInfo info)
-     // Adds the specified look and feel to the current array and then calls setInstalledLookAndFeels(javax.swing.UIManager.LookAndFeelInfo[]). 
    {
    }
  
    public static Object put(Object key, Object value)
-     // Stores an object in the defaults table. 
    {
      return getLookAndFeel().getDefaults().put(key,value);
    }
  
    public static void setInstalledLookAndFeels(UIManager.LookAndFeelInfo[] infos)
-     // Replaces the current array of installed LookAndFeelInfos. 
    {
    }
    
    public static void setLookAndFeel(LookAndFeel newLookAndFeel)
    {
      if (look_and_feel != null)
        look_and_feel.uninitialize();
  
--- 357,435 ----
      return getLookAndFeel().getDefaults();
    }
  
+   /**
+    * Returns a string from the defaults table.
+    */
    public static String getString(Object key)
    {
      return (String) getLookAndFeel().getDefaults().get(key);
    }
    
+   /**
+    * Returns a string from the defaults table.
+    */
+   public static String getString(Object key, Locale locale)
+   {
+     return (String) getLookAndFeel().getDefaults().get(key, locale);
+   }
+   
+   /**
+    * Returns the name of the LookAndFeel class that implements the
+    * native systems look and feel if there is one, otherwise the name
+    * of the default cross platform LookAndFeel class.
+    */
    public static String getSystemLookAndFeelClassName()
    {
      return getCrossPlatformLookAndFeelClassName();
    }
  
+   /**
+    * Returns the Look and Feel object that renders the target component.
+    */
    public static ComponentUI getUI(JComponent target)
    {
!     return getDefaults().getUI(target);
    }
  
+   /**
+    * Creates a new look and feel and adds it to the current array.
+    */
    public static void installLookAndFeel(String name, String className)
    {
    }
  
+   /**
+    * Adds the specified look and feel to the current array and then calls
+    * setInstalledLookAndFeels(javax.swing.UIManager.LookAndFeelInfo[]).
+    */
    public static void installLookAndFeel(LookAndFeelInfo info)
    {
    }
  
+   /**
+    * Stores an object in the defaults table.
+    */
    public static Object put(Object key, Object value)
    {
      return getLookAndFeel().getDefaults().put(key,value);
    }
  
+   /**
+    * Replaces the current array of installed LookAndFeelInfos.
+    */
    public static void setInstalledLookAndFeels(UIManager.LookAndFeelInfo[] infos)
    {
    }
    
+   /**
+    * Set the current default look.
+    */
    public static void setLookAndFeel(LookAndFeel newLookAndFeel)
+     throws UnsupportedLookAndFeelException
    {
+     if (! newLookAndFeel.isSupportedLookAndFeel())
+       throw new UnsupportedLookAndFeelException(newLookAndFeel.getName());
+     
      if (look_and_feel != null)
        look_and_feel.uninitialize();
  
*************** public class UIManager implements Serial
*** 288,298 ****
      //repaint();
    }
  
    public static void setLookAndFeel (String className)
      throws ClassNotFoundException, InstantiationException, IllegalAccessException,
      UnsupportedLookAndFeelException
    {
-     //          Set the current default look and feel using a class name.
      Class c = Class.forName(className);
      LookAndFeel a = (LookAndFeel) c.newInstance(); // throws class-cast-exception
      setLookAndFeel(a);
--- 441,453 ----
      //repaint();
    }
  
+   /**
+    * Set the current default look and feel using a class name.
+    */
    public static void setLookAndFeel (String className)
      throws ClassNotFoundException, InstantiationException, IllegalAccessException,
      UnsupportedLookAndFeelException
    {
      Class c = Class.forName(className);
      LookAndFeel a = (LookAndFeel) c.newInstance(); // throws class-cast-exception
      setLookAndFeel(a);
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/ViewportLayout.java gcc-4.0.0/libjava/javax/swing/ViewportLayout.java
*** gcc-3.4.3/libjava/javax/swing/ViewportLayout.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/ViewportLayout.java	Wed Feb 16 20:02:43 2005
*************** import java.awt.Component;
*** 41,115 ****
  import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.LayoutManager;
  import java.io.Serializable;
  
  /**
   * ViewportLayout
   * @author	Andrew Selkirk
!  * @version	1.0
   */
  public class ViewportLayout implements LayoutManager, Serializable
  {
!   static final long serialVersionUID = -788225906076097229L;
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor ViewportLayout
! 	 */
! 	public ViewportLayout() {
! 		// TODO
! 	} // ViewportLayout()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * addLayoutComponent
! 	 * @param name TODO
! 	 * @param c TODO
! 	 */
! 	public void addLayoutComponent(String name, Component c) {
! 		// TODO
! 	} // addLayoutComponent()
  
! 	/**
! 	 * removeLayoutComponent
! 	 * @param c TODO
! 	 */
! 	public void removeLayoutComponent(Component c) {
! 		// TODO
! 	} // removeLayoutComponent()
  
! 	/**
! 	 * preferredLayoutSize
! 	 * @param parent TODO
! 	 * @returns Dimension
! 	 */
! 	public Dimension preferredLayoutSize(Container parent) {
! 		return null; // TODO
! 	} // preferredLayoutSize()
  
! 	/**
! 	 * minimumLayoutSize
! 	 * @param parent TODO
! 	 * @returns Dimension
! 	 */
! 	public Dimension minimumLayoutSize(Container parent) {
! 		return null; // TODO
! 	} // minimumLayoutSize()
  
! 	/**
! 	 * layoutContainer
! 	 * @param parent TODO
! 	 */
! 	public void layoutContainer(Container parent) {
! 		// TODO
! 	} // layoutContainer()
  
  
! } // ViewportLayout
--- 41,169 ----
  import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.LayoutManager;
+ import java.awt.Point;
+ import java.awt.Rectangle;
  import java.io.Serializable;
  
  /**
   * ViewportLayout
   * @author	Andrew Selkirk
!  * @author	Graydon Hoare
   */
  public class ViewportLayout implements LayoutManager, Serializable
  {
!   private static final long serialVersionUID = -788225906076097229L;
  
!   public ViewportLayout() 
!   {
!   }
!   public void addLayoutComponent(String name, Component c) 
!   {
!   }
!   public void removeLayoutComponent(Component c) 
!   {
!   }
  
!   public Dimension preferredLayoutSize(Container parent) 
!   {
!     JViewport vp = (JViewport)parent;
!     Component view = vp.getView();
!     if (view != null)
!       return view.getPreferredSize();
!     else
!       return new Dimension();
!   }
  
+   public Dimension minimumLayoutSize(Container parent) 
+   {
+     JViewport vp = (JViewport)parent;
+     Component view = vp.getView();
+     if (view != null)
+       return view.getMinimumSize();
+     else
+       return new Dimension();
+   }
  
!   /**
!    * Layout the view and viewport to respect the following rules. These are
!    * not precisely the rules described in sun's javadocs, but they are the
!    * rules which sun's swing implementation follows, if you watch its
!    * behavior:
!    *
!    * <ol> 
!    * 
!    * <li>If the port is larger than the view's minimum size, put the port
!    * at view position <code>(0,0)</code> and make the view's size equal to
!    * the port's.</li>
!    *
!    * <li>If the port is smaller than the view, leave the view at its
!    * minimum size. also, do not move the port, <em>unless</em> the port
!    * extends into space <em>past</em> the edge of the view. If so, move the
!    * port up or to the left, in view space, by the amount of empty space
!    * (keep the lower and right edges lined up)</li>
!    *
!    * </ol>
!    *
!    * @see JViewport#getViewSize
!    * @see JViewport#setViewSize
!    * @see JViewport#getViewPosition
!    * @see JViewport#setViewPosition
!    */
  
!   public void layoutContainer(Container parent) 
!   {
!     // The way to interpret this function is basically to ignore the names
!     // of methods it calls, and focus on the variable names here. getViewRect
!     // doesn't, for example, return the view; it returns the port bounds in
!     // view space. Likwise setViewPosition doesn't reposition the view; it 
!     // positions the port, in view coordinates.
  
!     JViewport port = (JViewport) parent;    
!     Component view = port.getView();
  
!     if (view == null)
!       return;
  
!     // These dimensions and positions are in *view space*.  Do not mix
!     // variables in here from port space (eg. parent.getBounds()). This
!     // function should be entirely in view space, because the methods on
!     // the viewport require inputs in view space.
  
!     Rectangle portBounds = port.getViewRect();
!     Dimension viewPref = view.getPreferredSize();
!     Dimension viewMinimum = view.getMinimumSize();
!     Point portLowerRight = new Point(portBounds.x + portBounds.width,
!                                      portBounds.y + portBounds.height);
!         
!     // vertical implementation of the above rules
!     if (portBounds.height >= viewMinimum.height)
!       {
!         portBounds.y = 0;
!         viewPref.height = portBounds.height;
!       }
!     else
!       {
!         viewPref.height = viewMinimum.height;
!         int overextension = portLowerRight.y - viewPref.height;
!         if (overextension > 0)
!             portBounds.y -= overextension;
!       }
  
+     // horizontal implementation of the above rules
+     if (portBounds.width >= viewMinimum.width)
+       {
+         portBounds.x = 0;
+         viewPref.width = portBounds.width;
+       }
+     else
+       {
+         viewPref.width = viewMinimum.width;
+         int overextension = portLowerRight.x - viewPref.width;
+         if (overextension > 0)
+             portBounds.x -= overextension;
+       }
  
!     port.setViewPosition(portBounds.getLocation());
!     port.setViewSize(viewPref);
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/border/MatteBorder.java gcc-4.0.0/libjava/javax/swing/border/MatteBorder.java
*** gcc-3.4.3/libjava/javax/swing/border/MatteBorder.java	Thu Sep 25 14:38:01 2003
--- gcc-4.0.0/libjava/javax/swing/border/MatteBorder.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* MatteBorder.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MatteBorder.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Color;
*** 42,49 ****
  import java.awt.Component;
  import java.awt.Graphics;
  import java.awt.Insets;
- import javax.swing.Icon;
  
  
  /**
   * A border that is filled with either a solid color or with repeated
--- 42,49 ----
  import java.awt.Component;
  import java.awt.Graphics;
  import java.awt.Insets;
  
+ import javax.swing.Icon;
  
  /**
   * A border that is filled with either a solid color or with repeated
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/border/TitledBorder.java gcc-4.0.0/libjava/javax/swing/border/TitledBorder.java
*** gcc-3.4.3/libjava/javax/swing/border/TitledBorder.java	Thu Jun 19 10:48:45 2003
--- gcc-4.0.0/libjava/javax/swing/border/TitledBorder.java	Sat Jul 17 12:42:46 2004
***************
*** 1,5 ****
  /* TitledBorder.java -- 
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TitledBorder.java -- 
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Font;
*** 45,52 ****
  import java.awt.FontMetrics;
  import java.awt.Graphics;
  import java.awt.Insets;
- import java.awt.Rectangle;
  import java.awt.Shape;
  import javax.swing.UIManager;
  
  
--- 45,52 ----
  import java.awt.FontMetrics;
  import java.awt.Graphics;
  import java.awt.Insets;
  import java.awt.Shape;
+ 
  import javax.swing.UIManager;
  
  
*************** public class TitledBorder
*** 252,258 ****
     * The border underneath the title. If this value is
     * <code>null</code>, the border will be retrieved from the {@link
     * javax.swing.UIManager}&#x2019;s defaults table using the key
!    * <code>&quot;TitledBorder.border&quot;</code>.
     */
    protected Border border;
  
--- 252,258 ----
     * The border underneath the title. If this value is
     * <code>null</code>, the border will be retrieved from the {@link
     * javax.swing.UIManager}&#x2019;s defaults table using the key
!    * <code>TitledBorder.border</code>.
     */
    protected Border border;
  
*************** public class TitledBorder
*** 279,285 ****
     * The font for displaying the title text. If this value is
     * <code>null</code>, the font will be retrieved from the {@link
     * javax.swing.UIManager}&#x2019;s defaults table using the key
!    * <code>&quot;TitledBorder.font&quot;</code>.
     */
    protected Font titleFont;
  
--- 279,285 ----
     * The font for displaying the title text. If this value is
     * <code>null</code>, the font will be retrieved from the {@link
     * javax.swing.UIManager}&#x2019;s defaults table using the key
!    * <code>TitledBorder.font</code>.
     */
    protected Font titleFont;
  
*************** public class TitledBorder
*** 288,294 ****
     * The color for displaying the title text. If this value is
     * <code>null</code>, the color will be retrieved from the {@link
     * javax.swing.UIManager}&#x2019;s defaults table using the key
!    * <code>&quot;TitledBorder.titleColor&quot;</code>.
     */
    protected Color titleColor;
  
--- 288,294 ----
     * The color for displaying the title text. If this value is
     * <code>null</code>, the color will be retrieved from the {@link
     * javax.swing.UIManager}&#x2019;s defaults table using the key
!    * <code>TitledBorder.titleColor</code>.
     */
    protected Color titleColor;
  
*************** public class TitledBorder
*** 717,727 ****
     * Retrieves the border underneath the title. If no border has been
     * set, or if it has been set to<code>null</code>, the current
     * {@link javax.swing.LookAndFeel} will be asked for a border
!    * using the key <code>&quot;TitledBorder.border&quot;</code>.
     *
     * @return a border, or <code>null</code> if the current LookAndFeel
     *         does not provide a border for the key
!    *         <code>&quot;TitledBorder.border&quot;</code>.
     *
     * @see javax.swing.UIManager#getBorder(Object)
     */
--- 717,727 ----
     * Retrieves the border underneath the title. If no border has been
     * set, or if it has been set to<code>null</code>, the current
     * {@link javax.swing.LookAndFeel} will be asked for a border
!    * using the key <code>TitledBorder.border</code>.
     *
     * @return a border, or <code>null</code> if the current LookAndFeel
     *         does not provide a border for the key
!    *         <code>TitledBorder.border</code>.
     *
     * @see javax.swing.UIManager#getBorder(Object)
     */
*************** public class TitledBorder
*** 766,776 ****
     * Retrieves the font for displaying the title text. If no font has
     * been set, or if it has been set to<code>null</code>, the current
     * {@link javax.swing.LookAndFeel} will be asked for a font
!    * using the key <code>&quot;TitledBorder.font&quot;</code>.
     *
     * @return a font, or <code>null</code> if the current LookAndFeel
     *         does not provide a font for the key
!    *         <code>&quot;TitledBorder.font&quot;</code>.
     *
     * @see javax.swing.UIManager#getFont(Object)
     */
--- 766,776 ----
     * Retrieves the font for displaying the title text. If no font has
     * been set, or if it has been set to<code>null</code>, the current
     * {@link javax.swing.LookAndFeel} will be asked for a font
!    * using the key <code>TitledBorder.font</code>.
     *
     * @return a font, or <code>null</code> if the current LookAndFeel
     *         does not provide a font for the key
!    *         <code>TitledBorder.font</code>.
     *
     * @see javax.swing.UIManager#getFont(Object)
     */
*************** public class TitledBorder
*** 787,797 ****
     * Retrieves the color for displaying the title text. If no color has
     * been set, or if it has been set to<code>null</code>, the current
     * {@link javax.swing.LookAndFeel} will be asked for a color
!    * using the key <code>&quot;TitledBorder.titleColor&quot;</code>.
     *
     * @return a color, or <code>null</code> if the current LookAndFeel
     *         does not provide a color for the key
!    *         <code>&quot;TitledBorder.titleColor&quot;</code>.
     *
     * @see javax.swing.UIManager#getColor(Object)
     */
--- 787,797 ----
     * Retrieves the color for displaying the title text. If no color has
     * been set, or if it has been set to<code>null</code>, the current
     * {@link javax.swing.LookAndFeel} will be asked for a color
!    * using the key <code>TitledBorder.titleColor</code>.
     *
     * @return a color, or <code>null</code> if the current LookAndFeel
     *         does not provide a color for the key
!    *         <code>TitledBorder.titleColor</code>.
     *
     * @see javax.swing.UIManager#getColor(Object)
     */
*************** public class TitledBorder
*** 1088,1094 ****
  
  
      /**
!      * The border that constitues the &quot;interior&quot; border
       * underneath the title text.
       */
      Border border;
--- 1088,1094 ----
  
  
      /**
!      * The border that constitues the interior border
       * underneath the title text.
       */
      Border border;
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/colorchooser/AbstractColorChooserPanel.java gcc-4.0.0/libjava/javax/swing/colorchooser/AbstractColorChooserPanel.java
*** gcc-3.4.3/libjava/javax/swing/colorchooser/AbstractColorChooserPanel.java	Wed Jun 11 13:20:40 2003
--- gcc-4.0.0/libjava/javax/swing/colorchooser/AbstractColorChooserPanel.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* AbstractColorChooserPanel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractColorChooserPanel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.colorchooser;
*** 40,149 ****
  
  import java.awt.Color;
  import java.awt.Graphics;
  import javax.swing.Icon;
  import javax.swing.JColorChooser;
  import javax.swing.JPanel;
  
  /**
   * AbstractColorChooserPanel
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public abstract class AbstractColorChooserPanel extends JPanel {
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * chooser
! 	 */
! 	private JColorChooser chooser;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor AbstractColorChooserPanel
! 	 */
! 	public AbstractColorChooserPanel() {
! 		// TODO
! 	} // AbstractColorChooserPanel()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * getDisplayName
! 	 * @returns String
! 	 */
! 	public abstract String getDisplayName();
  
! 	/**
! 	 * updateChooser
! 	 */
! 	public abstract void updateChooser();
  
! 	/**
! 	 * buildChooser
! 	 */
! 	protected abstract void buildChooser();
  
! 	/**
! 	 * getSmallDisplayIcon
! 	 * @returns Icon
! 	 */
! 	public abstract Icon getSmallDisplayIcon();
  
! 	/**
! 	 * getLargeDisplayIcon
! 	 * @returns Icon
! 	 */
! 	public abstract Icon getLargeDisplayIcon();
  
! 	/**
! 	 * installChooserPanel
! 	 * @param chooser TODO
! 	 */
! 	public void installChooserPanel(JColorChooser chooser) {
! 		// TODO
! 	} // installChooserPanel()
  
! 	/**
! 	 * uninstallChooserPanel
! 	 * @param chooser TODO
! 	 */
! 	public void uninstallChooserPanel(JColorChooser chooser) {
! 		// TODO
! 	} // uninstallChooserPanel()
  
! 	/**
! 	 * getColorSelectionModel
! 	 * @returns ColorSelectionModel
! 	 */
! 	public ColorSelectionModel getColorSelectionModel() {
! 		return null; // TODO
! 	} // getColorSelectionModel()
  
! 	/**
! 	 * getColorFromModel
! 	 * @returns Color
! 	 */
! 	protected Color getColorFromModel() {
! 		return null; // TODO
! 	} // getColorFromModel()
  
! 	/**
! 	 * paint
! 	 * @param graphics TODO
! 	 */
! 	public void paint(Graphics graphics) {
! 		// TODO
! 	} // paint()
  
  
  } // AbstractColorChooserPanel
--- 40,162 ----
  
  import java.awt.Color;
  import java.awt.Graphics;
+ 
  import javax.swing.Icon;
  import javax.swing.JColorChooser;
  import javax.swing.JPanel;
  
  /**
   * AbstractColorChooserPanel
!  *
!  * @author Andrew Selkirk
!  * @version 1.0
   */
! public abstract class AbstractColorChooserPanel extends JPanel
! {
!   /** DOCUMENT ME! */
!   private static final long serialVersionUID = -977469671210173863L;
  
!   /** The chooser associated with this panel. */
!   private JColorChooser chooser;
  
!   /**
!    * This is the constructor for the AbstractColorChooserPanel.
!    */
!   public AbstractColorChooserPanel()
!   {
!   } // AbstractColorChooserPanel()
  
!   /**
!    * This method returns the name displayed in the tab for this chooser panel.
!    *
!    * @return The name displayed in the JTabbedPane's tabs.
!    */
!   public abstract String getDisplayName();
  
!   /**
!    * This method updates the chooser panel when the JColorChooser's color has
!    * changed.
!    */
!   public abstract void updateChooser();
  
!   /**
!    * This method constructs and does any initialization necessary for the
!    * chooser panel.
!    */
!   protected abstract void buildChooser();
  
!   /**
!    * This method sets the small icon used in the JTabbedPane for this chooser
!    * panel.
!    *
!    * @return The small icon used in the JTabbedPane.
!    */
!   public abstract Icon getSmallDisplayIcon();
  
!   /**
!    * This method sets the large icon useed in the jTabbedPane for this chooser
!    * panel.
!    *
!    * @return The large icon.
!    */
!   public abstract Icon getLargeDisplayIcon();
  
!   /**
!    * This method installs the chooser panel for the given JColorChooser.
!    *
!    * @param chooser The JColorChooser that will have this panel installed.
!    */
!   public void installChooserPanel(JColorChooser chooser)
!   {
!     this.chooser = chooser;
!     buildChooser();
!   } // installChooserPanel()
  
!   /**
!    * This method removes the chooser panel from the given JColorChooser and
!    * does any necessary clean up for the chooser panel.
!    *
!    * @param chooser The JColorChooser that is having this panel removed.
!    */
!   public void uninstallChooserPanel(JColorChooser chooser)
!   {
!     this.chooser = null;
!   } // uninstallChooserPanel()
  
!   /**
!    * This method returns the ColorSelectionModel for the JColorChooser
!    * associated with this chooser panel.
!    *
!    * @return The ColorSelectionModel for the JColorChooser associated with
!    *         this chooser panel.
!    */
!   public ColorSelectionModel getColorSelectionModel()
!   {
!     if (chooser != null)
!       return chooser.getSelectionModel();
!     return null;
!   } // getColorSelectionModel()
  
+   /**
+    * This method returns the current color stored in the model for this
+    * chooser panel.
+    *
+    * @return The current color.
+    */
+   protected Color getColorFromModel()
+   {
+     if (chooser != null)
+       return chooser.getColor();
+     return null;
+   } // getColorFromModel()
  
+   /**
+    * This method paints the chooser panel.
+    *
+    * @param graphics The Graphics object to paint with.
+    */
+   public void paint(Graphics graphics)
+   {
+     super.paint(graphics);
+   } // paint()
  } // AbstractColorChooserPanel
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/colorchooser/ColorChooserComponentFactory.java gcc-4.0.0/libjava/javax/swing/colorchooser/ColorChooserComponentFactory.java
*** gcc-3.4.3/libjava/javax/swing/colorchooser/ColorChooserComponentFactory.java	Wed Jun 11 13:20:40 2003
--- gcc-4.0.0/libjava/javax/swing/colorchooser/ColorChooserComponentFactory.java	Thu Sep  2 05:10:24 2004
*************** this exception to your version of the li
*** 35,83 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- 
  package javax.swing.colorchooser;
  
  import javax.swing.JComponent;
  
  /**
   * ColorChooserComponentFactory
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class ColorChooserComponentFactory {
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor ColorChooserComponentFactory
! 	 */
! 	private ColorChooserComponentFactory() {
! 		// TODO
! 	} // ColorChooserComponentFactory()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * getDefaultChooserPanels
! 	 * @returns AbstractColorChooserPanel[]
! 	 */
! 	public static AbstractColorChooserPanel[] getDefaultChooserPanels() {
! 		return null; // TODO
! 	} // getDefaultChooserPanels()
! 
! 	/**
! 	 * getPreviewPanel
! 	 * @returns JComponent
! 	 */
! 	public static JComponent getPreviewPanel() {
! 		return null; // TODO
! 	} // getPreviewPanel()
  
  
  } // ColorChooserComponentFactory
--- 35,85 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.colorchooser;
  
  import javax.swing.JComponent;
  
+ 
  /**
   * ColorChooserComponentFactory
!  *
!  * @author Andrew Selkirk
!  * @version 1.0
   */
! public class ColorChooserComponentFactory
! {
!   /**
!    * Constructor ColorChooserComponentFactory
!    */
!   private ColorChooserComponentFactory()
!   {
!   } // ColorChooserComponentFactory()
  
+   /**
+    * This method returns the three default chooser panels to be used in
+    * JColorChooser.
+    *
+    * @return The default chooser panels.
+    */
+   public static AbstractColorChooserPanel[] getDefaultChooserPanels()
+   {
+     AbstractColorChooserPanel[] values = 
+                                          {
+                                            new DefaultSwatchChooserPanel(),
+                                            new DefaultHSBChooserPanel(),
+                                            new DefaultRGBChooserPanel()
+                                          };
+     return values;
+   }
  
+   /**
+    * This method returns the default preview panel to be used with
+    * JColorChoosers.
+    *
+    * @return The default preview panel.
+    */
+   public static JComponent getPreviewPanel()
+   {
+     return new DefaultPreviewPanel();
+   } // getPreviewPanel()
  } // ColorChooserComponentFactory
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/colorchooser/ColorSelectionModel.java gcc-4.0.0/libjava/javax/swing/colorchooser/ColorSelectionModel.java
*** gcc-3.4.3/libjava/javax/swing/colorchooser/ColorSelectionModel.java	Sun Oct 12 13:20:50 2003
--- gcc-4.0.0/libjava/javax/swing/colorchooser/ColorSelectionModel.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* ColorSelectionModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ColorSelectionModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.swing.colorchooser;
  
  import java.awt.Color;
+ 
  import javax.swing.event.ChangeListener;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java
*** gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java	Mon Jul 14 05:33:30 2003
--- gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* DefaultColorSelectionModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultColorSelectionModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.colorchooser;
*** 40,86 ****
  
  import java.awt.Color;
  import java.io.Serializable;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
  /**
!  * DefaultColorSelectionModel
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public class DefaultColorSelectionModel 
!   implements ColorSelectionModel, Serializable
  {
    private static final long serialVersionUID = -8117143602864778804L;
  
    private Color selectedColor;
  
!   protected transient ChangeEvent changeEvent = new ChangeEvent (this);
!   protected EventListenerList listenerList = new EventListenerList ();
  
    /**
!    * Creates a new color selection model.
     */
    public DefaultColorSelectionModel()
    {
!     this (Color.white);
    }
  
    /**
     * Creates a new color selection model with a given selected color.
!    * 
!    * @param color The selected color.
     */
!   public DefaultColorSelectionModel (Color color)
    {
      super();
      this.selectedColor = color;
    }
  
    /**
     * Returns the selected color.
!    * 
     * @return The selected color.
     */
    public Color getSelectedColor()
--- 40,98 ----
  
  import java.awt.Color;
  import java.io.Serializable;
+ 
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
  /**
!  * This is the default implementation of the ColorSelectionModel interface
!  * that JColorChoosers use.
!  *
!  * @author Andrew Selkirk
!  * @version 1.0
   */
! public class DefaultColorSelectionModel implements ColorSelectionModel,
!                                                    Serializable
  {
+   /** DOCUMENT ME! */
    private static final long serialVersionUID = -8117143602864778804L;
  
+   /** The currently selected color. */
    private Color selectedColor;
  
!   /** The ChangeEvent fired to all ChangeListeners. */
!   protected transient ChangeEvent changeEvent = new ChangeEvent(this);
! 
!   /** The list of listeners. */
!   protected EventListenerList listenerList = new EventListenerList();
  
    /**
!    * Creates a new color selection model with the default white color.
     */
    public DefaultColorSelectionModel()
    {
!     this(Color.white);
    }
  
    /**
     * Creates a new color selection model with a given selected color.
!    *
!    * @param color The initial color.
!    *
!    * @throws Error If the color is null.
     */
!   public DefaultColorSelectionModel(Color color)
    {
      super();
+     if (color == null)
+       throw new Error("ColorSelectionModel cannot be set to have null color.");
      this.selectedColor = color;
    }
  
    /**
     * Returns the selected color.
!    *
     * @return The selected color.
     */
    public Color getSelectedColor()
*************** public class DefaultColorSelectionModel 
*** 89,119 ****
    }
  
    /**
     * @param color The color to set.
     */
!   public void setSelectedColor (Color color)
    {
!     this.selectedColor = color;
    }
  
    /**
     * Adds a listener to this model.
!    * 
     * @param listener The listener to add.
     */
!   public void addChangeListener (ChangeListener listener)
    {
!     listenerList.add (ChangeListener.class, listener);
    }
  
    /**
     * Removes a listener from this model.
!    * 
     * @param listener The listener to remove.
     */
!   public void removeChangeListener (ChangeListener listener)
    {
!     listenerList.remove (ChangeListener.class, listener);
    }
  
    /**
--- 101,141 ----
    }
  
    /**
+    * This method sets the color.
+    *
     * @param color The color to set.
+    *
+    * @throws Error If the color is set.
     */
!   public void setSelectedColor(Color color)
    {
!     if (color == null)
!       throw new Error("ColorSelectionModel cannot be set to have null color.");
!     if (color != selectedColor)
!       {
! 	this.selectedColor = color;
! 	fireStateChanged();
!       }
    }
  
    /**
     * Adds a listener to this model.
!    *
     * @param listener The listener to add.
     */
!   public void addChangeListener(ChangeListener listener)
    {
!     listenerList.add(ChangeListener.class, listener);
    }
  
    /**
     * Removes a listener from this model.
!    *
     * @param listener The listener to remove.
     */
!   public void removeChangeListener(ChangeListener listener)
    {
!     listenerList.remove(ChangeListener.class, listener);
    }
  
    /**
*************** public class DefaultColorSelectionModel 
*** 123,141 ****
     */
    public ChangeListener[] getChangeListeners()
    {
!     return (ChangeListener[]) listenerList.getListeners (ChangeListener.class);
    }
  
    /**
     * Calls all the <code>stateChanged()</code> method of all added
!    * <code>ChangeListener</code> objects with <code>changeEvent</code>
!    * as argument.
     */
    protected void fireStateChanged()
    {
      ChangeListener[] listeners = getChangeListeners();
  
      for (int i = 0; i < listeners.length; i++)
!       listeners [i].stateChanged (changeEvent);
    }
  }
--- 145,163 ----
     */
    public ChangeListener[] getChangeListeners()
    {
!     return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
    }
  
    /**
     * Calls all the <code>stateChanged()</code> method of all added
!    * <code>ChangeListener</code> objects with <code>changeEvent</code> as
!    * argument.
     */
    protected void fireStateChanged()
    {
      ChangeListener[] listeners = getChangeListeners();
  
      for (int i = 0; i < listeners.length; i++)
!       listeners[i].stateChanged(changeEvent);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultHSBChooserPanel.java gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultHSBChooserPanel.java
*** gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultHSBChooserPanel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultHSBChooserPanel.java	Tue Nov 30 23:59:01 2004
***************
*** 0 ****
--- 1,872 ----
+ /* DefaultHSBChooserPanel.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.colorchooser;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.Color;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.GridLayout;
+ import java.awt.Image;
+ import java.awt.Point;
+ import java.awt.event.MouseAdapter;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseMotionListener;
+ import java.awt.image.MemoryImageSource;
+ 
+ import javax.swing.AbstractButton;
+ import javax.swing.ButtonGroup;
+ import javax.swing.Icon;
+ import javax.swing.JColorChooser;
+ import javax.swing.JLabel;
+ import javax.swing.JPanel;
+ import javax.swing.JRadioButton;
+ import javax.swing.JSlider;
+ import javax.swing.JSpinner;
+ import javax.swing.SpinnerNumberModel;
+ import javax.swing.SwingConstants;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ 
+ /**
+  * This is the Default HSB Panel displayed in the JColorChooser.
+  */
+ class DefaultHSBChooserPanel extends AbstractColorChooserPanel
+ {
+   /** The gradient image displayed. */
+   private transient Image gradientImage;
+ 
+   /** The Panel that holds the gradient image. */
+   private transient JPanel gradientPanel;
+ 
+   /** The track gradient image. */
+   private transient Image trackImage;
+ 
+   /** The panel that holds the track. */
+   private transient JPanel trackPanel;
+ 
+   /** The slider for the locked HSB value. */
+   private transient JSlider slider;
+ 
+   /** The RadioButton that controls the Hue. */
+   private transient JRadioButton hRadio;
+ 
+   /** The RadioButton that controls the Saturation. */
+   private transient JRadioButton sRadio;
+ 
+   /** The RadioButton that controls the Brightness. */
+   private transient JRadioButton bRadio;
+ 
+   /** The JSpinner that controls the Hue. */
+   private transient JSpinner hSpinner;
+ 
+   /** The JSpinner that controls the Saturation. */
+   private transient JSpinner sSpinner;
+ 
+   /** The JSpinner that controls the Brightness. */
+   private transient JSpinner bSpinner;
+ 
+   /** The default width of the gradient image. */
+   private static final int imgWidth = 200;
+ 
+   /** The default height of the gradient image. */
+   private static final int imgHeight = 200;
+ 
+   /** The default width of the track gradient. */
+   private static final int trackWidth = 30;
+ 
+   /** The JLabel for Red. */
+   private static final JLabel R = new JLabel("R");
+ 
+   /** The JLabel for Green. */
+   private static final JLabel G = new JLabel("G");
+ 
+   /** The JLabel for Blue. */
+   private static final JLabel B = new JLabel("B");
+ 
+   // FIXME: Should be textfields.
+ 
+   /** The JLabel that displays the value of Red. */
+   private transient JLabel rFull;
+ 
+   /** The JLabel that displays the value of Green. */
+   private transient JLabel gFull;
+ 
+   /** The JLabel that displays the value of Blue. */
+   private transient JLabel bFull;
+ 
+   /** The point that is displayed in the gradient image. */
+   private transient Point gradientPoint = new Point();
+ 
+   /**
+    * This indicates that the change to the slider or point is triggered
+    * internally.
+    */
+   private transient boolean internalChange = false;
+ 
+   /** This indicates that the change to the spinner is triggered internally. */
+   private transient boolean spinnerTrigger = false;
+ 
+   /** This int identifies which spinner is currently locked. */
+   private transient int locked = -1;
+ 
+   /** This value indicates that the Hue spinner is locked. */
+   static final int HLOCKED = 0;
+ 
+   /** This value indicates that the Saturation spinner is locked. */
+   static final int SLOCKED = 1;
+ 
+   /** This value indicates that the Brightness spinner is locked. */
+   static final int BLOCKED = 2;
+ 
+   /**
+    * This method indicates that the mouse event is in the process of being
+    * handled.
+    */
+   private transient boolean handlingMouse;
+ 
+   /**
+    * This helper class handles mouse events on the gradient image.
+    */
+   class MainGradientMouseListener extends MouseAdapter
+     implements MouseMotionListener
+   {
+     /**
+      * This method is called when the mouse is pressed over the gradient
+      * image. The JColorChooser is then updated with new HSB values.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       gradientPoint = e.getPoint();
+       update(e.getPoint());
+     }
+ 
+     /**
+      * This method is called when the mouse is dragged over the gradient
+      * image. The JColorChooser is then updated with the new HSB values.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseDragged(MouseEvent e)
+     {
+       Point p = e.getPoint();
+       if (p.x < 0 || p.y < 0 || p.y > imgHeight || p.x > imgWidth)
+ 	return;
+ 
+       gradientPoint = p;
+       update(p);
+     }
+ 
+     /**
+      * This method is called when the mouse is moved over the gradient image.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseMoved(MouseEvent e)
+     {
+       // Do nothing.
+     }
+ 
+     /**
+      * This method updates the JColorChooser with the new values.
+      *
+      * @param p The Point where the MouseEvent occurred.
+      */
+     private void update(Point p)
+     {
+       handlingMouse = true;
+       if (hSpinner.isEnabled())
+ 	updateH(p);
+       else if (sSpinner.isEnabled())
+ 	updateS(p);
+       else
+ 	updateB(p);
+       handlingMouse = false;
+     }
+ 
+     /**
+      * This method updates the SB values if Hue is locked.
+      *
+      * @param p The point where the MouseEvent occurred.
+      */
+     private void updateH(Point p)
+     {
+       float s = (imgWidth - p.x * 1f) / imgWidth;
+       float b = (imgHeight - p.y * 1f) / imgHeight;
+ 
+       // Avoid two changes to the model by changing internalChange to true.
+       internalChange = true;
+       sSpinner.setValue(new Integer((int) (s * 100)));
+       internalChange = false;
+       bSpinner.setValue(new Integer((int) (b * 100)));
+ 
+       revalidate();
+     }
+ 
+     /**
+      * This method updates the HB values if Saturation is locked.
+      *
+      * @param p The point where the MouseEvent occurred.
+      */
+     private void updateS(Point p)
+     {
+       float h = p.x * 1f / imgWidth;
+       float b = (imgHeight - p.y * 1f) / imgHeight;
+ 
+       internalChange = true;
+       hSpinner.setValue(new Integer((int) (h * 365)));
+       internalChange = false;
+       bSpinner.setValue(new Integer((int) (b * 100)));
+ 
+       revalidate();
+     }
+ 
+     /**
+      * This method updates the HS values if Brightness is locked.
+      *
+      * @param p The point where the MouseEvent occurred.
+      */
+     private void updateB(Point p)
+     {
+       float h = p.x * 1f / imgWidth;
+       float s = (imgHeight - p.y * 1f) / imgHeight;
+ 
+       internalChange = true;
+       hSpinner.setValue(new Integer((int) (h * 365)));
+       internalChange = false;
+       sSpinner.setValue(new Integer((int) (s * 100)));
+ 
+       revalidate();
+     }
+   }
+ 
+   /**
+    * This method listens for slider value changes.
+    */
+   class SliderChangeListener implements ChangeListener
+   {
+     /**
+      * This method is called when the slider value changes. It should change
+      * the color of the JColorChooser.
+      *
+      * @param e The ChangeEvent.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       if (internalChange)
+ 	return;
+ 
+       Integer value = new Integer(slider.getValue());
+ 
+       switch (locked)
+         {
+ 	case HLOCKED:
+ 	  hSpinner.setValue(value);
+ 	  break;
+ 	case SLOCKED:
+ 	  sSpinner.setValue(value);
+ 	  break;
+ 	case BLOCKED:
+ 	  bSpinner.setValue(value);
+ 	  break;
+         }
+     }
+   }
+ 
+   /**
+    * This helper class determines the active JSpinner.
+    */
+   class RadioStateListener implements ChangeListener
+   {
+     /**
+      * This method is called when there is a new JRadioButton that was
+      * selected. As a result, it should activate the associated JSpinner.
+      *
+      * @param e The ChangeEvent.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       JSpinner change;
+       if (e.getSource() == hRadio)
+         {
+ 	  locked = HLOCKED;
+ 	  change = hSpinner;
+         }
+       else if (e.getSource() == sRadio)
+         {
+ 	  locked = SLOCKED;
+ 	  change = sSpinner;
+         }
+       else
+         {
+ 	  locked = BLOCKED;
+ 	  change = bSpinner;
+         }
+ 
+       change.setEnabled(((AbstractButton) e.getSource()).isSelected());
+       updateSlider();
+       updateTrack();
+       updateImage();
+       repaint();
+     }
+   }
+ 
+   /**
+    * This class listens to the JSpinners for changes.
+    */
+   class ImageScrollListener implements ChangeListener
+   {
+     /**
+      * This method is called whenever one of the JSpinner values change. The
+      * JColorChooser should be updated with the new HSB values.
+      *
+      * @param e The ChangeEvent.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       if (internalChange)
+ 	return;
+ 
+       float h = ((Number) hSpinner.getValue()).intValue() / 360f;
+       float s = ((Number) sSpinner.getValue()).intValue() / 100f;
+       float b = ((Number) bSpinner.getValue()).intValue() / 100f;
+ 
+       spinnerTrigger = true;
+       getColorSelectionModel().setSelectedColor(new Color(Color.HSBtoRGB(h, s,
+                                                                          b)));
+       spinnerTrigger = false;
+ 
+       if (! handlingMouse && slider != null && ! slider.getValueIsAdjusting())
+         {
+ 	  updateImage();
+ 	  updateTrack();
+         }
+       repaint();
+     }
+   }
+ 
+   /**
+    * Creates a new DefaultHSBChooserPanel object.
+    */
+   DefaultHSBChooserPanel()
+   {
+     super();
+   }
+ 
+   /**
+    * This method returns the name displayed by the JColorChooser tab that
+    * holds this panel.
+    *
+    * @return The name displayed in the JColorChooser tab.
+    */
+   public String getDisplayName()
+   {
+     return "HSB";
+   }
+ 
+   /**
+    * This method updates the various components inside the HSBPanel (the
+    * JSpinners, the JSlider, and the gradient image point) with updated
+    * values when the JColorChooser color value changes.
+    */
+   public void updateChooser()
+   {
+     Color c = getColorSelectionModel().getSelectedColor();
+ 
+     float[] hsbVals = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(),
+                                      null);
+ 
+     internalChange = true;
+ 
+     if (! spinnerTrigger)
+       {
+ 	hSpinner.setValue(new Integer((int) (hsbVals[0] * 360)));
+ 	sSpinner.setValue(new Integer((int) (hsbVals[1] * 100)));
+ 	bSpinner.setValue(new Integer((int) (hsbVals[2] * 100)));
+       }
+ 
+     switch (locked)
+       {
+       case HLOCKED:
+ 	if (slider != null)
+ 	  slider.setValue(((Number) hSpinner.getValue()).intValue());
+ 	if (! handlingMouse)
+ 	  {
+ 	    gradientPoint.x = (int) ((1
+ 	                      - ((Number) sSpinner.getValue()).intValue() / 100f) * imgWidth);
+ 	    gradientPoint.y = (int) ((1
+ 	                      - ((Number) bSpinner.getValue()).intValue() / 100f) * imgHeight);
+ 	  }
+ 	break;
+       case SLOCKED:
+ 	if (slider != null)
+ 	  slider.setValue(((Number) sSpinner.getValue()).intValue());
+ 	if (! handlingMouse)
+ 	  {
+ 	    gradientPoint.x = (int) (((Number) hSpinner.getValue()).intValue() / 360f * imgWidth);
+ 	    gradientPoint.y = (int) ((1
+ 	                      - ((Number) bSpinner.getValue()).intValue() / 100f) * imgHeight);
+ 	  }
+ 	break;
+       case BLOCKED:
+ 	if (slider != null)
+ 	  slider.setValue(((Number) bSpinner.getValue()).intValue());
+ 	if (! handlingMouse)
+ 	  {
+ 	    gradientPoint.x = (int) (((Number) hSpinner.getValue()).intValue() / 360f * imgWidth);
+ 	    gradientPoint.y = (int) ((1
+ 	                      - ((Number) sSpinner.getValue()).intValue() / 100f) * imgHeight);
+ 	  }
+ 	break;
+       }
+     internalChange = false;
+ 
+     if (! handlingMouse && slider != null && ! slider.getValueIsAdjusting())
+       updateImage();
+ 
+     if (! handlingMouse || locked != HLOCKED)
+       updateTrack();
+     updateTextFields();
+   }
+ 
+   /**
+    * This method builds the DefaultHSBChooserPanel.
+    */
+   protected void buildChooser()
+   {
+     setLayout(new BorderLayout());
+ 
+     add(buildRightPanel(), BorderLayout.EAST);
+ 
+     JPanel container = new JPanel();
+     container.setLayout(new BorderLayout());
+ 
+     gradientPanel = new JPanel()
+         {
+ 	  public Dimension getPreferredSize()
+ 	  {
+ 	    return new Dimension(imgWidth, imgHeight);
+ 	  }
+ 
+ 	  public void paint(Graphics g)
+ 	  {
+ 	    if (gradientImage != null)
+ 	      g.drawImage(gradientImage, 0, 0, this);
+ 
+ 	    Color saved = g.getColor();
+ 	    g.setColor(Color.WHITE);
+ 	    g.drawOval(gradientPoint.x - 3, gradientPoint.y - 3, 6, 6);
+ 	    g.setColor(saved);
+ 	  }
+         };
+ 
+     MouseAdapter ml = new MainGradientMouseListener();
+     gradientPanel.addMouseListener(ml);
+     gradientPanel.addMouseMotionListener((MouseMotionListener) ml);
+ 
+     trackPanel = new JPanel()
+         {
+ 	  public Dimension getPreferredSize()
+ 	  {
+ 	    return new Dimension(trackWidth, imgHeight);
+ 	  }
+ 
+ 	  public void paint(Graphics g)
+ 	  {
+ 	    if (trackImage != null)
+ 	      g.drawImage(trackImage, 0, 0, this);
+ 	  }
+         };
+ 
+     slider = new JSlider();
+     slider.setPaintTrack(false);
+     slider.setPaintTicks(false);
+ 
+     slider.setOrientation(SwingConstants.VERTICAL);
+ 
+     updateSlider();
+ 
+     container.add(gradientPanel, BorderLayout.WEST);
+     container.add(slider, BorderLayout.CENTER);
+     container.add(trackPanel, BorderLayout.EAST);
+ 
+     add(container, BorderLayout.WEST);
+     slider.addChangeListener(new SliderChangeListener());
+     repaint();
+   }
+ 
+   /**
+    * This method uninstalls the DefaultHSBPanel.
+    *
+    * @param chooser The JColorChooser to remove this panel from.
+    */
+   public void uninstallChooserPanel(JColorChooser chooser)
+   {
+     trackImage = null;
+     gradientImage = null;
+     gradientPanel = null;
+     slider = null;
+ 
+     hSpinner = null;
+     sSpinner = null;
+     bSpinner = null;
+ 
+     hRadio = null;
+     sRadio = null;
+     bRadio = null;
+ 
+     removeAll();
+     super.uninstallChooserPanel(chooser);
+   }
+ 
+   /**
+    * This helper method creates the right side panel (the panel with the
+    * Spinners and TextFields).
+    *
+    * @return The right side panel.
+    */
+   private Container buildRightPanel()
+   {
+     JPanel container = new JPanel();
+     container.setLayout(new GridLayout(6, 2));
+ 
+     hRadio = new JRadioButton("H");
+     sRadio = new JRadioButton("S");
+     bRadio = new JRadioButton("B");
+ 
+     ButtonGroup group = new ButtonGroup();
+     group.add(hRadio);
+     group.add(sRadio);
+     group.add(bRadio);
+ 
+     hSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 359, 1));
+     sSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 100, 1));
+     bSpinner = new JSpinner(new SpinnerNumberModel(100, 0, 100, 1));
+ 
+     hSpinner.setEnabled(false);
+     sSpinner.setEnabled(false);
+     bSpinner.setEnabled(false);
+ 
+     ChangeListener cl = new RadioStateListener();
+     ChangeListener scroll = new ImageScrollListener();
+ 
+     hRadio.addChangeListener(cl);
+     sRadio.addChangeListener(cl);
+     bRadio.addChangeListener(cl);
+ 
+     hSpinner.addChangeListener(scroll);
+     sSpinner.addChangeListener(scroll);
+     bSpinner.addChangeListener(scroll);
+ 
+     hRadio.setSelected(true);
+ 
+     container.add(hRadio);
+     container.add(hSpinner);
+ 
+     container.add(sRadio);
+     container.add(sSpinner);
+ 
+     container.add(bRadio);
+     container.add(bSpinner);
+ 
+     rFull = new JLabel("red full");
+     gFull = new JLabel("green full");
+     bFull = new JLabel("blue full");
+ 
+     container.add(R);
+     container.add(rFull);
+ 
+     container.add(G);
+     container.add(gFull);
+ 
+     container.add(B);
+     container.add(bFull);
+ 
+     return container;
+   }
+ 
+   /**
+    * This method returns the small display icon.
+    *
+    * @return The small display icon.
+    */
+   public Icon getSmallDisplayIcon()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns the large display icon.
+    *
+    * @return The large display icon.
+    */
+   public Icon getLargeDisplayIcon()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method paints the chooser panel.
+    *
+    * @param g The graphics object to paint with.
+    */
+   public void paint(Graphics g)
+   {
+     super.paint(g);
+   }
+ 
+   /**
+    * This method updates the gradient image with a new one taking the Hue
+    * value as the constant.
+    */
+   private void updateHLockImage()
+   {
+     int index = 0;
+     int[] pix = new int[imgWidth * imgHeight];
+     float hValue = ((Number) hSpinner.getValue()).intValue() / 360f;
+ 
+     for (int j = 0; j < imgHeight; j++)
+       for (int i = 0; i < imgWidth; i++)
+ 	pix[index++] = Color.HSBtoRGB(hValue, (imgWidth - i * 1f) / imgWidth,
+ 	                              (imgHeight - j * 1f) / imgHeight)
+ 	               | (255 << 24);
+ 
+     gradientImage = createImage(new MemoryImageSource(imgWidth, imgHeight,
+                                                       pix, 0, imgWidth));
+   }
+ 
+   /**
+    * This method updates the gradient image with a new one taking the
+    * Brightness value as the constant.
+    */
+   private void updateBLockImage()
+   {
+     int[] pix = new int[imgWidth * imgHeight];
+     float bValue = ((Number) bSpinner.getValue()).intValue() / 100f;
+ 
+     int index = 0;
+     for (int j = 0; j < imgHeight; j++)
+       for (int i = 0; i < imgWidth; i++)
+ 	pix[index++] = Color.HSBtoRGB(i * 1f / imgWidth,
+ 	                              (imgHeight - j * 1f) / imgHeight, bValue)
+ 	               | (255 << 24);
+ 
+     gradientImage = createImage(new MemoryImageSource(imgWidth, imgHeight,
+                                                       pix, 0, imgWidth));
+   }
+ 
+   /**
+    * This method updates the gradient image with a new one taking the
+    * Saturation value as the constant.
+    */
+   private void updateSLockImage()
+   {
+     int[] pix = new int[imgWidth * imgHeight];
+     float sValue = ((Number) sSpinner.getValue()).intValue() / 100f;
+ 
+     int index = 0;
+     for (int j = 0; j < imgHeight; j++)
+       for (int i = 0; i < imgWidth; i++)
+ 	pix[index++] = Color.HSBtoRGB(i * 1f / imgWidth, sValue,
+ 	                              (imgHeight - j * 1f) / imgHeight)
+ 	               | (255 << 24);
+     gradientImage = createImage(new MemoryImageSource(imgWidth, imgHeight,
+                                                       pix, 0, imgWidth));
+   }
+ 
+   /**
+    * This method calls the appropriate method to update the gradient image
+    * depending on which HSB value is constant.
+    */
+   private void updateImage()
+   {
+     switch (locked)
+       {
+       case HLOCKED:
+ 	updateHLockImage();
+ 	break;
+       case SLOCKED:
+ 	updateSLockImage();
+ 	break;
+       case BLOCKED:
+ 	updateBLockImage();
+ 	break;
+       }
+   }
+ 
+   /**
+    * This method updates the TextFields with the correct RGB values.
+    */
+   private void updateTextFields()
+   {
+     int c = getColorSelectionModel().getSelectedColor().getRGB();
+ 
+     rFull.setText("" + (c >> 16 & 0xff));
+     gFull.setText("" + (c >> 8 & 0xff));
+     bFull.setText("" + (c & 0xff));
+ 
+     repaint();
+   }
+ 
+   /**
+    * This method updates the slider in response to making a different HSB
+    * property the constant.
+    */
+   private void updateSlider()
+   {
+     if (slider == null)
+       return;
+ 
+     slider.setMinimum(0);
+     if (locked == HLOCKED)
+       {
+ 	slider.setMaximum(359);
+ 	;
+ 	slider.setValue(((Number) hSpinner.getValue()).intValue());
+ 	slider.setInverted(true);
+       }
+     else
+       {
+ 	slider.setMaximum(100);
+ 	slider.setInverted(false);
+ 	if (sRadio.isSelected())
+ 	  slider.setValue(((Number) sSpinner.getValue()).intValue());
+ 	else
+ 	  slider.setValue(((Number) bSpinner.getValue()).intValue());
+       }
+     repaint();
+   }
+ 
+   /**
+    * This method updates the track gradient image depending on which HSB
+    * property is constant.
+    */
+   private void updateTrack()
+   {
+     switch (locked)
+       {
+       case HLOCKED:
+ 	updateHTrack();
+ 	break;
+       case SLOCKED:
+ 	updateSTrack();
+ 	break;
+       case BLOCKED:
+ 	updateBTrack();
+ 	break;
+       }
+   }
+ 
+   /**
+    * This method updates the track gradient image if the Hue value is allowed
+    * to change (according to the JRadioButtons).
+    */
+   private void updateHTrack()
+   {
+     int trackIndex = 0;
+     int[] trackPix = new int[trackWidth * imgHeight];
+ 
+     for (int j = 0; j < imgHeight; j++)
+       for (int i = 0; i < trackWidth; i++)
+ 	trackPix[trackIndex++] = Color.HSBtoRGB(j * 1f / imgHeight, 1f, 1f)
+ 	                         | (255 << 24);
+ 
+     trackImage = createImage(new MemoryImageSource(trackWidth, imgHeight,
+                                                    trackPix, 0, trackWidth));
+   }
+ 
+   /**
+    * This method updates the track gradient image if the Saturation value is
+    * allowed to change (according to the JRadioButtons).
+    */
+   private void updateSTrack()
+   {
+     int[] trackPix = new int[trackWidth * imgHeight];
+ 
+     float hValue = ((Number) hSpinner.getValue()).intValue() / 360f;
+     float bValue = ((Number) bSpinner.getValue()).intValue() / 100f;
+ 
+     int trackIndex = 0;
+     for (int j = 0; j < imgHeight; j++)
+       for (int i = 0; i < trackWidth; i++)
+ 	trackPix[trackIndex++] = Color.HSBtoRGB(hValue,
+ 	                                        (imgHeight - j * 1f) / imgHeight,
+ 	                                        bValue) | (255 << 24);
+ 
+     trackImage = createImage(new MemoryImageSource(trackWidth, imgHeight,
+                                                    trackPix, 0, trackWidth));
+   }
+ 
+   /**
+    * This method updates the track gradient image if the Brightness value is
+    * allowed to change (according to the JRadioButtons).
+    */
+   private void updateBTrack()
+   {
+     int[] trackPix = new int[trackWidth * imgHeight];
+ 
+     float hValue = ((Number) hSpinner.getValue()).intValue() / 360f;
+     float sValue = ((Number) sSpinner.getValue()).intValue() / 100f;
+ 
+     int trackIndex = 0;
+     for (int j = 0; j < imgHeight; j++)
+       for (int i = 0; i < trackWidth; i++)
+ 	trackPix[trackIndex++] = Color.HSBtoRGB(hValue, sValue,
+ 	                                        (imgHeight - j * 1f) / imgHeight)
+ 	                         | (255 << 24);
+ 
+     trackImage = createImage(new MemoryImageSource(trackWidth, imgHeight,
+                                                    trackPix, 0, trackWidth));
+   }
+ 
+   /**
+    * This method returns the HSB values for the currently selected color.
+    *
+    * @return The HSB values for the currently selected color.
+    */
+   private float[] getHSBValues()
+   {
+     Color c = getColorFromModel();
+     float[] f = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null);
+     return f;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultPreviewPanel.java gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultPreviewPanel.java
*** gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultPreviewPanel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultPreviewPanel.java	Tue Nov 30 23:59:01 2004
***************
*** 0 ****
--- 1,318 ----
+ /* DefaultPreviewPanel.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.colorchooser;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ 
+ import javax.swing.JColorChooser;
+ import javax.swing.JPanel;
+ import javax.swing.SwingUtilities;
+ import javax.swing.border.Border;
+ 
+ /**
+  * This is the default preview panel for the JColorChooser. The default
+  * preview panel is responsible for displaying the currently selected color
+  * of the JColorChooser.
+  */
+ class DefaultPreviewPanel extends JPanel
+ {
+   /**
+    * This is the border around the preview panel.
+    */
+   class PreviewBorder implements Border
+   {
+     /** This is the value of the top, bottom, top, and right inset. */
+     private static final int edge = 20;
+ 
+     /**
+      * This is the distance from the top left corner of the border to the
+      * text.
+      */
+     private static final int lead = 5;
+ 
+     /** This is the horizontal gap between the text and the border. */
+     private static final int gap = 3;
+ 
+     /**
+      * This method returns the border insets for the given Component.
+      *
+      * @param c The Component to retrieve insets for.
+      *
+      * @return The insets for the given Component.
+      */
+     public Insets getBorderInsets(Component c)
+     {
+       return new Insets(edge, edge, edge, edge);
+     }
+ 
+     /**
+      * This method returns whether the border is responsible for painting its
+      * own background.
+      *
+      * @return Whether the border is responsible for painting its own
+      *         background.
+      */
+     public boolean isBorderOpaque()
+     {
+       return true;
+     }
+ 
+     /**
+      * This method paints the border for the given component with the graphics
+      * object using the given properties.
+      *
+      * @param c The Component to paint the border for.
+      * @param g The Graphics object to paint with.
+      * @param x The x location to paint at.
+      * @param y The y location to paint at.
+      * @param width The width of the component.
+      * @param height The height of the component.
+      */
+     public void paintBorder(Component c, Graphics g, int x, int y, int width,
+                             int height)
+     {
+       Color saved = g.getColor();
+       FontMetrics fm = g.getFontMetrics();
+ 
+       g.setColor(Color.BLACK);
+       g.drawLine(x + edge / 2, y + edge / 2, x + edge / 2,
+                  y + height - edge / 2);
+       g.drawLine(x + edge / 2, y + height - edge / 2, x + width - edge / 2,
+                  y + height - edge / 2);
+       g.drawLine(x + width - edge / 2, y + edge / 2, x + width - edge / 2,
+                  y + height - edge / 2);
+       g.drawLine(x + edge / 2, y + edge / 2, x + edge / 2 + lead, y + edge / 2);
+ 
+       int strwidth = fm.stringWidth("Preview");
+ 
+       g.drawString("Preview", x + edge / 2 + lead + gap,
+                    y + edge / 2 + fm.getAscent() / 2);
+ 
+       g.drawLine(x + lead + edge / 2 + strwidth + gap * 2, y + edge / 2,
+                  x + width - edge / 2, y + edge / 2);
+ 
+       g.setColor(saved);
+     }
+   }
+ 
+   /** A standard large gap size. */
+   private static int largeGap = 6;
+ 
+   /** A standard small gap size. */
+   private static int smallGap = 2;
+ 
+   /** The size of each side of the square. */
+   private static int squareSize = 36;
+ 
+   /** This padding between the text and the edge of its box. */
+   private static int textPadding = 4;
+ 
+   /** The width of the right most rectangles. */
+   private static int rightSideRectWidth = 60;
+ 
+   /** The sample text. */
+   private static String sample = "Sample Text   Sample Text";
+ 
+   /**
+    * Creates a new DefaultPreviewPanel object.
+    */
+   DefaultPreviewPanel()
+   {
+     super();
+     setBorder(new PreviewBorder());
+   }
+ 
+   /**
+    * This method paints the default preview panel with the given Graphics
+    * object.
+    *
+    * @param g The Graphics object.
+    */
+   public void paint(Graphics g)
+   {
+     super.paint(g);
+     Color currentColor = null;
+     JColorChooser chooser = (JColorChooser) SwingUtilities.getAncestorOfClass(JColorChooser.class,
+                                                                               this);
+     if (chooser != null)
+       currentColor = chooser.getColor();
+ 
+     Color saved = g.getColor();
+     Insets insets = getInsets();
+ 
+     int down = insets.top + squareSize + largeGap;
+     int currX = insets.left;
+ 
+     paintSquare(g, currX, insets.top, Color.WHITE, currentColor, Color.WHITE,
+                 -1, -1, -1);
+     paintSquare(g, currX, down, currentColor, null, null, -1, -1, -1);
+ 
+     currX += squareSize + largeGap;
+ 
+     paintSquare(g, currX, insets.top, Color.BLACK, currentColor, Color.WHITE,
+                 -1, -1, -1);
+     paintSquare(g, currX, down, Color.WHITE, currentColor, null, -1, -1, -1);
+ 
+     currX += squareSize + largeGap;
+ 
+     paintSquare(g, currX, insets.top, Color.WHITE, currentColor, Color.BLACK,
+                 -1, -1, -1);
+     paintSquare(g, currX, down, Color.BLACK, currentColor, null, -1, -1, -1);
+ 
+     FontMetrics fm = g.getFontMetrics();
+     int strWidth = fm.stringWidth(sample);
+     int strHeight = fm.getHeight();
+ 
+     currX += squareSize + largeGap;
+ 
+     int boxWidth = 2 * textPadding + strWidth;
+     int boxHeight = 2 * textPadding + strHeight;
+ 
+     int first = insets.top + textPadding;
+     int second = insets.top + boxHeight + smallGap;
+     int third = insets.top + 2 * (boxHeight + smallGap);
+ 
+     g.setColor(Color.WHITE);
+     g.fillRect(currX, third, boxWidth, boxHeight);
+ 
+     g.setColor(currentColor);
+     g.drawString(sample, currX + textPadding,
+                  first + textPadding + fm.getAscent());
+ 
+     g.fillRect(currX, second, boxWidth, boxHeight);
+ 
+     g.drawString(sample, currX + textPadding,
+                  third + textPadding + fm.getAscent());
+ 
+     g.setColor(Color.BLACK);
+     g.drawString(sample, currX + textPadding,
+                  second + textPadding + fm.getAscent());
+ 
+     currX += boxWidth + largeGap;
+ 
+     g.setColor(Color.WHITE);
+     g.fillRect(currX, insets.top, rightSideRectWidth, squareSize
+                + largeGap / 2);
+ 
+     g.setColor(currentColor);
+     g.fillRect(currX, insets.top + squareSize + largeGap / 2,
+                rightSideRectWidth, squareSize + largeGap / 2);
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method creates and paints a square. The square has two smaller
+    * squares inside of it. Each of the three squares has their sizes
+    * determined by the size arguments. If the size is not given (by passing
+    * in -1), then the size is determined automatically.
+    *
+    * @param g The Graphics object to paint with.
+    * @param x The x location to paint at.
+    * @param y The y location to paint at.
+    * @param first The color of the first square.
+    * @param second The color of the second square.
+    * @param third The color of the third square.
+    * @param firstSize The size of the first square.
+    * @param secondSize The size of the second square.
+    * @param thirdSize The size of the third square.
+    */
+   private void paintSquare(Graphics g, int x, int y, Color first,
+                            Color second, Color third, int firstSize,
+                            int secondSize, int thirdSize)
+   {
+     Color saved = g.getColor();
+     if (firstSize == -1)
+       firstSize = squareSize;
+     if (secondSize == -1)
+       secondSize = squareSize * 2 / 3;
+     if (thirdSize == -1)
+       thirdSize = squareSize / 3;
+     int secondOffset = (firstSize - secondSize) / 2;
+     int thirdOffset = (firstSize - thirdSize) / 2;
+ 
+     if (first == null)
+       return;
+     g.setColor(first);
+     g.fillRect(x, y, firstSize, firstSize);
+     if (second == null)
+       return;
+     g.setColor(second);
+     g.fillRect(x + secondOffset, y + secondOffset, secondSize, secondSize);
+     if (third == null)
+       return;
+     g.setColor(third);
+     g.fillRect(x + thirdOffset, y + thirdOffset, thirdSize, thirdSize);
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method returns the preferred size of the default preview panel.
+    *
+    * @return The preferred size of the default preview panel.
+    */
+   public Dimension getPreferredSize()
+   {
+     Graphics g = getGraphics();
+     FontMetrics fm = g.getFontMetrics();
+     g.dispose();
+ 
+     int strWidth = fm.stringWidth(sample);
+     int strHeight = fm.getHeight();
+ 
+     int h1 = (strHeight + 2 * textPadding) * 3 + 2 * smallGap;
+     int h2 = 2 * squareSize + largeGap;
+ 
+     int height = Math.max(h1, h2);
+ 
+     int width = 3 * (squareSize + largeGap) + strWidth + 2 * textPadding
+                 + largeGap + rightSideRectWidth;
+ 
+     Insets insets = getInsets();
+ 
+     return new Dimension(width + insets.right + insets.left,
+                          height + insets.top + insets.bottom);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultRGBChooserPanel.java gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultRGBChooserPanel.java
*** gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultRGBChooserPanel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultRGBChooserPanel.java	Wed Feb 16 20:02:46 2005
***************
*** 0 ****
--- 1,393 ----
+ /* DefaultRGHChooserPanel.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.colorchooser;
+ 
+ import java.awt.Color;
+ import java.awt.Graphics;
+ import java.awt.GridBagConstraints;
+ import java.awt.GridBagLayout;
+ 
+ import javax.swing.Icon;
+ import javax.swing.JColorChooser;
+ import javax.swing.JLabel;
+ import javax.swing.JSlider;
+ import javax.swing.JSpinner;
+ import javax.swing.SpinnerNumberModel;
+ import javax.swing.SwingConstants;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ 
+ /**
+  * This is the default RGB panel for the JColorChooser. The color is selected
+  * using three sliders that represent the RGB values.
+  */
+ class DefaultRGBChooserPanel extends AbstractColorChooserPanel
+ {
+   /**
+    * This class handles the slider value changes for all three sliders.
+    */
+   class SliderHandler implements ChangeListener
+   {
+     /**
+      * This method is called whenever any of the slider values change.
+      *
+      * @param e The ChangeEvent.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       if (updateChange)
+ 	return;
+ 
+       int color = R.getValue() << 16 | G.getValue() << 8 | B.getValue();
+ 
+       sliderChange = true;
+       getColorSelectionModel().setSelectedColor(new Color(color));
+       sliderChange = false;
+     }
+   }
+ 
+   /**
+    * This class handles the Spinner values changing.
+    */
+   class SpinnerHandler implements ChangeListener
+   {
+     /**
+      * This method is called whenever any of the JSpinners change values.
+      *
+      * @param e The ChangeEvent.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       if (updateChange)
+ 	return;
+ 
+       int red = ((Number) RSpinner.getValue()).intValue();
+       int green = ((Number) GSpinner.getValue()).intValue();
+       int blue = ((Number) BSpinner.getValue()).intValue();
+ 
+       int color = red << 16 | green << 8 | blue;
+ 
+       spinnerChange = true;
+       getColorSelectionModel().setSelectedColor(new Color(color));
+       spinnerChange = false;
+     }
+   }
+ 
+   /** Whether the color change was initiated by the spinners. */
+   private transient boolean spinnerChange = false;
+ 
+   /** Whether the color change was initiated by the sliders. */
+   private transient boolean sliderChange = false;
+ 
+   /**
+    * Whether the change was forced by the chooser (meaning the color has
+    * already been changed).
+    */
+   private transient boolean updateChange = false;
+ 
+   /** The ChangeListener for the sliders. */
+   private transient ChangeListener colorChanger;
+ 
+   /** The ChangeListener for the spinners. */
+   private transient ChangeListener spinnerHandler;
+ 
+   /** The slider that handles the red values. */
+   private transient JSlider R;
+ 
+   /** The slider that handles the green values. */
+   private transient JSlider G;
+ 
+   /** The slider that handles the blue values. */
+   private transient JSlider B;
+ 
+   /** The label for the red slider. */
+   private transient JLabel RLabel;
+ 
+   /** The label for the green slider. */
+   private transient JLabel GLabel;
+ 
+   /** The label for the blue slider. */
+   private transient JLabel BLabel;
+ 
+   /** The spinner that handles the red values. */
+   private transient JSpinner RSpinner;
+ 
+   /** The spinner that handles the green values. */
+   private transient JSpinner GSpinner;
+ 
+   /** The spinner that handles the blue values. */
+   private transient JSpinner BSpinner;
+ 
+   /**
+    * Creates a new DefaultRGBChooserPanel object.
+    */
+   public DefaultRGBChooserPanel()
+   {
+     super();
+   }
+ 
+   /**
+    * This method returns the name displayed in the JTabbedPane.
+    *
+    * @return The name displayed in the JTabbedPane.
+    */
+   public String getDisplayName()
+   {
+     return "RGB";
+   }
+ 
+   /**
+    * This method updates the chooser panel with the new color chosen in the
+    * JColorChooser.
+    */
+   public void updateChooser()
+   {
+     Color c = getColorFromModel();
+     int rgb = c.getRGB();
+ 
+     int red = rgb >> 16 & 0xff;
+     int green = rgb >> 8 & 0xff;
+     int blue = rgb & 0xff;
+ 
+     updateChange = true;
+ 
+     if (! sliderChange)
+       {
+ 	if (R != null)
+ 	  R.setValue(red);
+ 	if (G != null)
+ 	  G.setValue(green);
+ 	if (B != null)
+ 	  B.setValue(blue);
+       }
+     if (! spinnerChange)
+       {
+ 	if (GSpinner != null)
+ 	  GSpinner.setValue(new Integer(green));
+ 	if (RSpinner != null)
+ 	  RSpinner.setValue(new Integer(red));
+ 	if (BSpinner != null)
+ 	  BSpinner.setValue(new Integer(blue));
+       }
+ 
+     updateChange = false;
+ 
+     revalidate();
+     repaint();
+   }
+ 
+   /**
+    * This method builds the chooser panel.
+    */
+   protected void buildChooser()
+   {
+     setLayout(new GridBagLayout());
+ 
+     RLabel = new JLabel("Red");
+     RLabel.setDisplayedMnemonic('d');
+     GLabel = new JLabel("Green");
+     GLabel.setDisplayedMnemonic('n');
+     BLabel = new JLabel("Blue");
+     BLabel.setDisplayedMnemonic('B');
+ 
+     R = new JSlider(SwingConstants.HORIZONTAL, 0, 255, 255);
+     G = new JSlider(SwingConstants.HORIZONTAL, 0, 255, 255);
+     B = new JSlider(SwingConstants.HORIZONTAL, 0, 255, 255);
+ 
+     R.setPaintTicks(true);
+     R.setSnapToTicks(false);
+     G.setPaintTicks(true);
+     G.setSnapToTicks(false);
+     B.setPaintTicks(true);
+     B.setSnapToTicks(false);
+ 
+     R.setLabelTable(R.createStandardLabels(85));
+     R.setPaintLabels(true);
+     G.setLabelTable(G.createStandardLabels(85));
+     G.setPaintLabels(true);
+     B.setLabelTable(B.createStandardLabels(85));
+     B.setPaintLabels(true);
+ 
+     R.setMajorTickSpacing(85);
+     G.setMajorTickSpacing(85);
+     B.setMajorTickSpacing(85);
+ 
+     R.setMinorTickSpacing(17);
+     G.setMinorTickSpacing(17);
+     B.setMinorTickSpacing(17);
+ 
+     RSpinner = new JSpinner(new SpinnerNumberModel(R.getValue(),
+                                                    R.getMinimum(),
+                                                    R.getMaximum(), 1));
+     GSpinner = new JSpinner(new SpinnerNumberModel(G.getValue(),
+                                                    G.getMinimum(),
+                                                    G.getMaximum(), 1));
+     BSpinner = new JSpinner(new SpinnerNumberModel(B.getValue(),
+                                                    B.getMinimum(),
+                                                    B.getMaximum(), 1));
+ 
+     RLabel.setLabelFor(R);
+     GLabel.setLabelFor(G);
+     BLabel.setLabelFor(B);
+ 
+     GridBagConstraints bag = new GridBagConstraints();
+     bag.fill = GridBagConstraints.VERTICAL;
+ 
+     bag.gridx = 0;
+     bag.gridy = 0;
+     add(RLabel, bag);
+ 
+     bag.gridx = 1;
+     add(R, bag);
+ 
+     bag.gridx = 2;
+     add(RSpinner, bag);
+ 
+     bag.gridx = 0;
+     bag.gridy = 1;
+     add(GLabel, bag);
+ 
+     bag.gridx = 1;
+     add(G, bag);
+ 
+     bag.gridx = 2;
+     add(GSpinner, bag);
+ 
+     bag.gridx = 0;
+     bag.gridy = 2;
+     add(BLabel, bag);
+ 
+     bag.gridx = 1;
+     add(B, bag);
+ 
+     bag.gridx = 2;
+     add(BSpinner, bag);
+ 
+     installListeners();
+   }
+ 
+   /**
+    * This method uninstalls the chooser panel from the JColorChooser.
+    *
+    * @param chooser The JColorChooser to remove this chooser panel from.
+    */
+   public void uninstallChooserPanel(JColorChooser chooser)
+   {
+     uninstallListeners();
+     removeAll();
+ 
+     R = null;
+     G = null;
+     B = null;
+ 
+     RSpinner = null;
+     GSpinner = null;
+     BSpinner = null;
+ 
+     super.uninstallChooserPanel(chooser);
+   }
+ 
+   /**
+    * This method uninstalls any listeners that were added by the chooser
+    * panel.
+    */
+   private void uninstallListeners()
+   {
+     R.removeChangeListener(colorChanger);
+     G.removeChangeListener(colorChanger);
+     B.removeChangeListener(colorChanger);
+ 
+     colorChanger = null;
+ 
+     RSpinner.removeChangeListener(spinnerHandler);
+     GSpinner.removeChangeListener(spinnerHandler);
+     BSpinner.removeChangeListener(spinnerHandler);
+ 
+     spinnerHandler = null;
+   }
+ 
+   /**
+    * This method installs any listeners that the chooser panel needs to
+    * operate.
+    */
+   private void installListeners()
+   {
+     colorChanger = new SliderHandler();
+ 
+     R.addChangeListener(colorChanger);
+     G.addChangeListener(colorChanger);
+     B.addChangeListener(colorChanger);
+ 
+     spinnerHandler = new SpinnerHandler();
+ 
+     RSpinner.addChangeListener(spinnerHandler);
+     GSpinner.addChangeListener(spinnerHandler);
+     BSpinner.addChangeListener(spinnerHandler);
+   }
+ 
+   /**
+    * This method returns the small display icon.
+    *
+    * @return The small display icon.
+    */
+   public Icon getSmallDisplayIcon()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns the large display icon.
+    *
+    * @return The large display icon.
+    */
+   public Icon getLargeDisplayIcon()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method paints the default RGB chooser panel.
+    *
+    * @param g The Graphics object to paint with.
+    */
+   public void paint(Graphics g)
+   {
+     super.paint(g);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultSwatchChooserPanel.java gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultSwatchChooserPanel.java
*** gcc-3.4.3/libjava/javax/swing/colorchooser/DefaultSwatchChooserPanel.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/colorchooser/DefaultSwatchChooserPanel.java	Wed Feb 16 20:02:47 2005
***************
*** 0 ****
--- 1,892 ----
+ /* DefaultSwatchChooserPanel.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.colorchooser;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.LayoutManager;
+ import java.awt.event.MouseAdapter;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ 
+ import javax.swing.Icon;
+ import javax.swing.JColorChooser;
+ import javax.swing.JLabel;
+ import javax.swing.JPanel;
+ 
+ /**
+  * This class is the DefaultSwatchChooserPanel. This chooser panel displays a
+  * set of colors that can be picked. Recently picked items will go into a
+  * side panel so the user can see the history of the chosen colors.
+  */
+ class DefaultSwatchChooserPanel extends AbstractColorChooserPanel
+ {
+   /** The main panel that holds the set of choosable colors. */
+   MainSwatchPanel mainPalette;
+ 
+   /** A panel that holds the recent colors. */
+   RecentSwatchPanel recentPalette;
+ 
+   /** The mouse handlers for the panels. */
+   MouseListener mouseHandler;
+ 
+   /**
+    * This the base class for all swatch panels. Swatch panels are panels that
+    * hold a set of blocks where colors are displayed.
+    */
+   abstract static class SwatchPanel extends JPanel
+   {
+     /** The width of each block. */
+     protected int cellWidth = 10;
+ 
+     /** The height of each block. */
+     protected int cellHeight = 10;
+ 
+     /** The gap between blocks. */
+     protected int gap = 1;
+ 
+     /** The number of rows in the swatch panel. */
+     protected int numRows;
+ 
+     /** The number of columns in the swatch panel. */
+     protected int numCols;
+ 
+     /**
+      * Creates a new SwatchPanel object.
+      */
+     SwatchPanel()
+     {
+       super();
+       setBackground(Color.WHITE);
+     }
+ 
+     /**
+      * This method returns the preferred size of the swatch panel based on the
+      * number of rows and columns and the size of each cell.
+      *
+      * @return The preferred size of the swatch panel.
+      */
+     public Dimension getPreferredSize()
+     {
+       int height = numRows * cellHeight + (numRows - 1) * gap;
+       int width = numCols * cellWidth + (numCols - 1) * gap;
+       Insets insets = getInsets();
+ 
+       return new Dimension(width + insets.left + insets.right,
+                            height + insets.top + insets.bottom);
+     }
+ 
+     /**
+      * This method returns the color for the given position.
+      *
+      * @param x The x coordinate of the position.
+      * @param y The y coordinate of the position.
+      *
+      * @return The color at the given position.
+      */
+     public abstract Color getColorForPosition(int x, int y);
+ 
+     /**
+      * This method initializes the colors for the swatch panel.
+      */
+     protected abstract void initializeColors();
+   }
+ 
+   /**
+    * This is the main swatch panel. This panel sits in the middle and allows a
+    * set of colors to be picked which will move to the recent swatch panel.
+    */
+   static class MainSwatchPanel extends SwatchPanel
+   {
+     /** The color describing (204, 255, 255) */
+     public static final Color C204255255 = new Color(204, 204, 255);
+ 
+     /** The color describing (255, 204, 204) */
+     public static final Color C255204204 = new Color(255, 204, 204);
+ 
+     /** The color describing (204, 255, 204) */
+     public static final Color C204255204 = new Color(204, 255, 204);
+ 
+     /** The color describing (204, 204, 204) */
+     public static final Color C204204204 = new Color(204, 204, 204);
+ 
+     /** The color (153, 153, 255). */
+     public static final Color C153153255 = new Color(153, 153, 255);
+ 
+     /** The color (51, 51, 255). */
+     public static final Color C051051255 = new Color(51, 51, 255);
+ 
+     /** The color (153, 0, 153). */
+     public static final Color C153000153 = new Color(153, 0, 153);
+ 
+     /** The color (0, 51, 51). */
+     public static final Color C000051051 = new Color(0, 51, 51);
+ 
+     /** The color (51, 0, 51). */
+     public static final Color C051000051 = new Color(51, 0, 51);
+ 
+     /** The color (51, 51, 0). */
+     public static final Color C051051000 = new Color(51, 51, 0);
+ 
+     /** The color (102, 102, 0). */
+     public static final Color C102102000 = new Color(102, 102, 0);
+ 
+     /** The color (153, 255, 153). */
+     public static final Color C153255153 = new Color(153, 255, 153);
+ 
+     /** The color (102, 255, 102). */
+     public static final Color C102255102 = new Color(102, 255, 102);
+ 
+     /** The color (0, 102, 102). */
+     public static final Color C000102102 = new Color(0, 102, 102);
+ 
+     /** The color (102, 0, 102). */
+     public static final Color C102000102 = new Color(102, 0, 102);
+ 
+     /** The color (0, 153, 153). */
+     public static final Color C000153153 = new Color(0, 153, 153);
+ 
+     /** The color (153, 153, 0). */
+     public static final Color C153153000 = new Color(153, 153, 0);
+ 
+     /** The color (204, 204, 0). */
+     public static final Color C204204000 = new Color(204, 204, 0);
+ 
+     /** The color (204, 0, 204). */
+     public static final Color C204000204 = new Color(204, 0, 204);
+ 
+     /** The color (0, 204, 204). */
+     public static final Color C000204204 = new Color(0, 204, 204);
+ 
+     /** The color (51, 255, 51). */
+     public static final Color C051255051 = new Color(51, 255, 51);
+ 
+     /** The color (255, 51, 51). */
+     public static final Color C255051051 = new Color(255, 51, 51);
+ 
+     /** The color (255, 102, 102). */
+     public static final Color C255102102 = new Color(255, 102, 102);
+ 
+     /** The color (102, 102, 255). */
+     public static final Color C102102255 = new Color(102, 102, 255);
+ 
+     /** The color (255, 153, 153). */
+     public static final Color C255153153 = new Color(255, 153, 153);
+     static Color[] colors = 
+                             {
+                               // Row 1
+     Color.WHITE, new Color(204, 255, 255), C204255255, C204255255, C204255255,
+                               C204255255, C204255255, C204255255, C204255255,
+                               C204255255, C204255255, new Color(255, 204, 255),
+                               C255204204, C255204204, C255204204, C255204204,
+                               C255204204, C255204204, C255204204, C255204204,
+                               C255204204, new Color(255, 255, 204), C204255204,
+                               C204255204, C204255204, C204255204, C204255204,
+                               C204255204, C204255204, C204255204, C204255204,
+                               
+     // Row 2
+     C204204204, new Color(153, 255, 255), new Color(153, 204, 255), C153153255,
+                               C153153255, C153153255, C153153255, C153153255,
+                               C153153255, C153153255, new Color(204, 153, 255),
+                               new Color(255, 153, 255),
+                               new Color(255, 153, 204), C255153153, C255153153,
+                               C255153153, C255153153, C255153153, C255153153,
+                               C255153153, new Color(255, 204, 153),
+                               new Color(255, 255, 153),
+                               new Color(204, 255, 153), C153255153, C153255153,
+                               C153255153, C153255153, C153255153, C153255153,
+                               C153255153, new Color(153, 255, 204),
+                               
+     // Row 3
+     C204204204, new Color(102, 255, 255), new Color(102, 204, 255),
+                               new Color(102, 153, 255), C102102255, C102102255,
+                               C102102255, C102102255, C102102255,
+                               new Color(153, 102, 255),
+                               new Color(204, 102, 255),
+                               new Color(255, 102, 255),
+                               new Color(255, 102, 204),
+                               new Color(255, 102, 153), C255102102, C255102102,
+                               C255102102, C255102102, C255102102,
+                               new Color(255, 153, 102),
+                               new Color(255, 204, 102),
+                               new Color(255, 255, 102),
+                               new Color(204, 255, 102),
+                               new Color(153, 255, 102), C102255102, C102255102,
+                               C102255102, C102255102, C102255102,
+                               new Color(102, 255, 153),
+                               new Color(102, 255, 204),
+                               
+     // Row 4
+     new Color(153, 153, 153), new Color(51, 255, 255), new Color(51, 204, 255),
+                               new Color(51, 153, 255), new Color(51, 102, 255),
+                               C051051255, C051051255, C051051255,
+                               new Color(102, 51, 255), new Color(153, 51, 255),
+                               new Color(204, 51, 255), new Color(255, 51, 255),
+                               new Color(255, 51, 204), new Color(255, 51, 153),
+                               new Color(255, 51, 102), C255051051, C255051051,
+                               C255051051, new Color(255, 102, 51),
+                               new Color(255, 153, 51), new Color(255, 204, 51),
+                               new Color(255, 255, 51), new Color(204, 255, 51),
+                               new Color(153, 255, 51), new Color(102, 255, 51),
+                               C051255051, C051255051, C051255051,
+                               new Color(51, 255, 102), new Color(51, 255, 153),
+                               new Color(51, 255, 204),
+                               
+     // Row 5
+     new Color(153, 153, 153), new Color(0, 255, 255), new Color(0, 204, 255),
+                               new Color(0, 153, 255), new Color(0, 102, 255),
+                               new Color(0, 51, 255), new Color(0, 0, 255),
+                               new Color(51, 0, 255), new Color(102, 0, 255),
+                               new Color(153, 0, 255), new Color(204, 0, 255),
+                               new Color(255, 0, 255), new Color(255, 0, 204),
+                               new Color(255, 0, 153), new Color(255, 0, 102),
+                               new Color(255, 0, 51), new Color(255, 0, 0),
+                               new Color(255, 51, 0), new Color(255, 102, 0),
+                               new Color(255, 153, 0), new Color(255, 204, 0),
+                               new Color(255, 255, 0), new Color(204, 255, 0),
+                               new Color(153, 255, 0), new Color(102, 255, 0),
+                               new Color(51, 255, 0), new Color(0, 255, 0),
+                               new Color(0, 255, 51), new Color(0, 255, 102),
+                               new Color(0, 255, 153), new Color(0, 255, 204),
+                               
+     // Row 6
+     new Color(102, 102, 102), C000204204, C000204204, new Color(0, 153, 204),
+                               new Color(0, 102, 204), new Color(0, 51, 204),
+                               new Color(0, 0, 204), new Color(51, 0, 204),
+                               new Color(102, 0, 204), new Color(153, 0, 204),
+                               C204000204, C204000204, C204000204,
+                               new Color(204, 0, 153), new Color(204, 0, 102),
+                               new Color(204, 0, 51), new Color(204, 0, 0),
+                               new Color(204, 51, 0), new Color(204, 102, 0),
+                               new Color(204, 153, 0), C204204000, C204204000,
+                               C204204000, new Color(153, 204, 0),
+                               new Color(102, 204, 0), new Color(51, 204, 0),
+                               new Color(0, 204, 0), new Color(0, 204, 51),
+                               new Color(0, 204, 102), new Color(0, 204, 153),
+                               new Color(0, 204, 204),
+                               
+     // Row 7
+     new Color(102, 102, 102), C000153153, C000153153, C000153153,
+                               new Color(0, 102, 153), new Color(0, 51, 153),
+                               new Color(0, 0, 153), new Color(51, 0, 153),
+                               new Color(102, 0, 153), C153000153, C153000153,
+                               C153000153, C153000153, C153000153,
+                               new Color(153, 0, 102), new Color(153, 0, 51),
+                               new Color(153, 0, 0), new Color(153, 51, 0),
+                               new Color(153, 102, 0), C153153000, C153153000,
+                               C153153000, C153153000, C153153000,
+                               new Color(102, 153, 0), new Color(51, 153, 0),
+                               new Color(0, 153, 0), new Color(0, 153, 51),
+                               new Color(0, 153, 102), C000153153, C000153153,
+                               
+     // Row 8
+     new Color(51, 51, 51), C000102102, C000102102, C000102102, C000102102,
+                               new Color(0, 51, 102), new Color(0, 0, 102),
+                               new Color(51, 0, 102), C102000102, C102000102,
+                               C102000102, C102000102, C102000102, C102000102,
+                               C102000102, new Color(102, 0, 51),
+                               new Color(102, 0, 0), new Color(102, 51, 0),
+                               C102102000, C102102000, C102102000, C102102000,
+                               C102102000, C102102000, C102102000,
+                               new Color(51, 102, 0), new Color(0, 102, 0),
+                               new Color(0, 102, 51), C000102102, C000102102,
+                               C000102102,
+                               
+     // Row 9.
+     Color.BLACK, C000051051, C000051051, C000051051, C000051051, C000051051,
+                               new Color(0, 0, 51), C051000051, C051000051,
+                               C051000051, C051000051, C051000051, C051000051,
+                               C051000051, C051000051, C051000051,
+                               new Color(51, 0, 0), C051051000, C051051000,
+                               C051051000, C051051000, C051051000, C051051000,
+                               C051051000, C051051000, new Color(0, 51, 0),
+                               C000051051, C000051051, C000051051, C000051051,
+                               new Color(51, 51, 51)
+                             };
+ 
+     /**
+      * Creates a new MainSwatchPanel object.
+      */
+     MainSwatchPanel()
+     {
+       super();
+       numCols = 31;
+       numRows = 9;
+       initializeColors();
+       revalidate();
+     }
+ 
+     /**
+      * This method returns the color for the given position.
+      *
+      * @param x The x location for the position.
+      * @param y The y location for the position.
+      *
+      * @return The color for the given position.
+      */
+     public Color getColorForPosition(int x, int y)
+     {
+       if (x % (cellWidth + gap) > cellWidth
+           || y % (cellHeight + gap) > cellHeight)
+ 	// position is located in gap.
+ 	return null;
+ 
+       int row = y / (cellHeight + gap);
+       int col = x / (cellWidth + gap);
+       return colors[row * numCols + col];
+     }
+ 
+     /**
+      * This method initializes the colors for the main swatch panel.
+      */
+     protected void initializeColors()
+     {
+       // Unnecessary
+     }
+ 
+     /**
+      * This method paints the main graphics panel with the given Graphics
+      * object.
+      *
+      * @param graphics The Graphics object to paint with.
+      */
+     public void paint(Graphics graphics)
+     {
+       int index = 0;
+       Insets insets = getInsets();
+       int currX = insets.left;
+       int currY = insets.top;
+       Color saved = graphics.getColor();
+ 
+       for (int i = 0; i < numRows; i++)
+         {
+ 	  for (int j = 0; j < numCols; j++)
+ 	    {
+ 	      graphics.setColor(colors[index++]);
+ 	      graphics.fill3DRect(currX, currY, cellWidth, cellHeight, true);
+ 	      currX += gap + cellWidth;
+ 	    }
+ 	  currX = insets.left;
+ 	  currY += gap + cellHeight;
+         }
+       graphics.setColor(saved);
+     }
+ 
+     /**
+      * This method returns the tooltip text for the given MouseEvent.
+      *
+      * @param e The MouseEvent to find tooltip text for.
+      *
+      * @return The tooltip text.
+      */
+     public String getToolTipText(MouseEvent e)
+     {
+       Color c = getColorForPosition(e.getX(), e.getY());
+       if (c == null)
+ 	return null;
+       return (c.getRed() + "," + c.getGreen() + "," + c.getBlue());
+     }
+   }
+ 
+   /**
+    * This class is the recent swatch panel. It holds recently selected colors.
+    */
+   static class RecentSwatchPanel extends SwatchPanel
+   {
+     /** The array for storing recently stored colors. */
+     Color[] colors;
+ 
+     /** The default color. */
+     public static final Color defaultColor = Color.GRAY;
+ 
+     /** The index of the array that is the start. */
+     int start = 0;
+ 
+     /**
+      * Creates a new RecentSwatchPanel object.
+      */
+     RecentSwatchPanel()
+     {
+       super();
+       numCols = 5;
+       numRows = 7;
+       initializeColors();
+       revalidate();
+     }
+ 
+     /**
+      * This method returns the color for the given position.
+      *
+      * @param x The x coordinate of the position.
+      * @param y The y coordinate of the position.
+      *
+      * @return The color for the given position.
+      */
+     public Color getColorForPosition(int x, int y)
+     {
+       if (x % (cellWidth + gap) > cellWidth
+           || y % (cellHeight + gap) > cellHeight)
+ 	// position is located in gap.
+ 	return null;
+ 
+       int row = y / (cellHeight + gap);
+       int col = x / (cellWidth + gap);
+ 
+       return colors[getIndexForCell(row, col)];
+     }
+ 
+     /**
+      * This method initializes the colors for the recent swatch panel.
+      */
+     protected void initializeColors()
+     {
+       colors = new Color[numRows * numCols];
+       for (int i = 0; i < colors.length; i++)
+ 	colors[i] = defaultColor;
+     }
+ 
+     /**
+      * This method returns the array index for the given row and column.
+      *
+      * @param row The row.
+      * @param col The column.
+      *
+      * @return The array index for the given row and column.
+      */
+     private int getIndexForCell(int row, int col)
+     {
+       return ((row * numCols) + col + start) % (numRows * numCols);
+     }
+ 
+     /**
+      * This method adds the given color to the beginning of the swatch panel.
+      *
+      * @param c The color to add.
+      */
+     private void addColorToQueue(Color c)
+     {
+       if (--start == -1)
+ 	start = numRows * numCols - 1;
+ 
+       colors[start] = c;
+     }
+ 
+     /**
+      * This method paints the panel with the given Graphics object.
+      *
+      * @param g The Graphics object to paint with.
+      */
+     public void paint(Graphics g)
+     {
+       Color saved = g.getColor();
+       Insets insets = getInsets();
+       int currX = insets.left;
+       int currY = insets.top;
+ 
+       for (int i = 0; i < numRows; i++)
+         {
+ 	  for (int j = 0; j < numCols; j++)
+ 	    {
+ 	      g.setColor(colors[getIndexForCell(i, j)]);
+ 	      g.fill3DRect(currX, currY, cellWidth, cellHeight, true);
+ 	      currX += cellWidth + gap;
+ 	    }
+ 	  currX = insets.left;
+ 	  currY += cellWidth + gap;
+         }
+     }
+ 
+     /**
+      * This method returns the tooltip text for the given MouseEvent.
+      *
+      * @param e The MouseEvent.
+      *
+      * @return The tooltip text.
+      */
+     public String getToolTipText(MouseEvent e)
+     {
+       Color c = getColorForPosition(e.getX(), e.getY());
+       if (c == null)
+ 	return null;
+       return c.getRed() + "," + c.getGreen() + "," + c.getBlue();
+     }
+   }
+ 
+   /**
+    * This class handles mouse events for the two swatch panels.
+    */
+   class MouseHandler extends MouseAdapter
+   {
+     /**
+      * This method is called whenever the mouse is pressed.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       SwatchPanel panel = (SwatchPanel) e.getSource();
+       Color c = panel.getColorForPosition(e.getX(), e.getY());
+       recentPalette.addColorToQueue(c);
+       DefaultSwatchChooserPanel.this.getColorSelectionModel().setSelectedColor(c);
+       DefaultSwatchChooserPanel.this.repaint();
+     }
+   }
+ 
+   /**
+    * This is the layout manager for the main panel.
+    */
+   static class MainPanelLayout implements LayoutManager
+   {
+     /**
+      * This method is called when a new component is added to the container.
+      *
+      * @param name The name of the component.
+      * @param comp The added component.
+      */
+     public void addLayoutComponent(String name, Component comp)
+     {
+     }
+ 
+     /**
+      * This method is called to set the size and position of the child
+      * components for the given container.
+      *
+      * @param parent The container to lay out.
+      */
+     public void layoutContainer(Container parent)
+     {
+       Component[] comps = parent.getComponents();
+       Insets insets = parent.getInsets();
+       Dimension[] pref = new Dimension[comps.length];
+ 
+       int xpos = 0;
+       int ypos = 0;
+       int maxHeight = 0;
+       int totalWidth = 0;
+ 
+       for (int i = 0; i < comps.length; i++)
+         {
+ 	  pref[i] = comps[i].getPreferredSize();
+ 	  if (pref[i] == null)
+ 	    return;
+ 	  maxHeight = Math.max(maxHeight, pref[i].height);
+ 	  totalWidth += pref[i].width;
+         }
+ 
+       ypos = (parent.getSize().height - maxHeight) / 2 + insets.top;
+       xpos = insets.left + (parent.getSize().width - totalWidth) / 2;
+ 
+       for (int i = 0; i < comps.length; i++)
+         {
+ 	  if (pref[i] == null)
+ 	    continue;
+ 	  comps[i].setBounds(xpos, ypos, pref[i].width, pref[i].height);
+ 	  xpos += pref[i].width;
+         }
+     }
+ 
+     /**
+      * This method is called when a component is removed from the container.
+      *
+      * @param comp The component that was removed.
+      */
+     public void removeLayoutComponent(Component comp)
+     {
+     }
+ 
+     /**
+      * This methods calculates the minimum layout size for the container.
+      *
+      * @param parent The container.
+      *
+      * @return The minimum layout size.
+      */
+     public Dimension minimumLayoutSize(Container parent)
+     {
+       return preferredLayoutSize(parent);
+     }
+ 
+     /**
+      * This method returns the preferred layout size for the given container.
+      *
+      * @param parent The container.
+      *
+      * @return The preferred layout size.
+      */
+     public Dimension preferredLayoutSize(Container parent)
+     {
+       int xmax = 0;
+       int ymax = 0;
+ 
+       Component[] comps = parent.getComponents();
+       Dimension pref;
+ 
+       for (int i = 0; i < comps.length; i++)
+         {
+ 	  pref = comps[i].getPreferredSize();
+ 	  if (pref == null)
+ 	    continue;
+ 	  xmax += pref.width;
+ 	  ymax = Math.max(ymax, pref.height);
+         }
+ 
+       Insets insets = parent.getInsets();
+ 
+       return new Dimension(insets.left + insets.right + xmax,
+                            insets.top + insets.bottom + ymax);
+     }
+   }
+ 
+   /**
+    * This is the layout manager for the recent swatch panel.
+    */
+   static class RecentPanelLayout implements LayoutManager
+   {
+     /**
+      * This method is called when a component is added to the container.
+      *
+      * @param name The name of the component.
+      * @param comp The added component.
+      */
+     public void addLayoutComponent(String name, Component comp)
+     {
+       // Nothing needs to be done.
+     }
+ 
+     /**
+      * This method sets the size and position of the child components of the
+      * given container.
+      *
+      * @param parent The container to lay out.
+      */
+     public void layoutContainer(Container parent)
+     {
+       Component[] comps = parent.getComponents();
+       Dimension parentSize = parent.getSize();
+       Insets insets = parent.getInsets();
+       int currY = insets.top;
+       Dimension pref;
+ 
+       for (int i = 0; i < comps.length; i++)
+         {
+ 	  pref = comps[i].getPreferredSize();
+ 	  if (pref == null)
+ 	    continue;
+ 	  comps[i].setBounds(insets.left, currY, pref.width, pref.height);
+ 	  currY += pref.height;
+         }
+     }
+ 
+     /**
+      * This method calculates the minimum layout size for the given container.
+      *
+      * @param parent The container.
+      *
+      * @return The minimum layout size.
+      */
+     public Dimension minimumLayoutSize(Container parent)
+     {
+       return preferredLayoutSize(parent);
+     }
+ 
+     /**
+      * This method calculates the preferred layout size for the given
+      * container.
+      *
+      * @param parent The container.
+      *
+      * @return The preferred layout size.
+      */
+     public Dimension preferredLayoutSize(Container parent)
+     {
+       int width = 0;
+       int height = 0;
+       Insets insets = parent.getInsets();
+       Component[] comps = parent.getComponents();
+       Dimension pref;
+       for (int i = 0; i < comps.length; i++)
+         {
+ 	  pref = comps[i].getPreferredSize();
+ 	  if (pref != null)
+ 	    {
+ 	      width = Math.max(width, pref.width);
+ 	      height += pref.height;
+ 	    }
+         }
+ 
+       return new Dimension(width + insets.left + insets.right,
+                            height + insets.top + insets.bottom);
+     }
+ 
+     /**
+      * This method is called whenever a component is removed from the
+      * container.
+      *
+      * @param comp The removed component.
+      */
+     public void removeLayoutComponent(Component comp)
+     {
+       // Nothing needs to be done.
+     }
+   }
+ 
+   /**
+    * Creates a new DefaultSwatchChooserPanel object.
+    */
+   DefaultSwatchChooserPanel()
+   {
+     super();
+   }
+ 
+   /**
+    * This method updates the chooser panel with the new value from the
+    * JColorChooser.
+    */
+   public void updateChooser()
+   {
+   }
+ 
+   /**
+    * This method builds the chooser panel.
+    */
+   protected void buildChooser()
+   {
+     // The structure of the swatch panel is:
+     // One large panel (minus the insets).
+     // Inside that panel, there are two panels, one holds the palette.
+     // The other holds the label and the recent colors palette.
+     // The two palettes are two custom swatch panels.
+     setLayout(new MainPanelLayout());
+ 
+     JPanel mainPaletteHolder = new JPanel();
+     JPanel recentPaletteHolder = new JPanel();
+ 
+     mainPalette = new MainSwatchPanel();
+     recentPalette = new RecentSwatchPanel();
+     JLabel label = new JLabel("Recent:");
+ 
+     mouseHandler = new MouseHandler();
+     mainPalette.addMouseListener(mouseHandler);
+     recentPalette.addMouseListener(mouseHandler);
+ 
+     mainPaletteHolder.setLayout(new BorderLayout());
+     mainPaletteHolder.add(mainPalette, BorderLayout.CENTER);
+ 
+     recentPaletteHolder.setLayout(new RecentPanelLayout());
+     recentPaletteHolder.add(label);
+     recentPaletteHolder.add(recentPalette);
+ 
+     JPanel main = new JPanel();
+     main.add(mainPaletteHolder);
+     main.add(recentPaletteHolder);
+ 
+     this.add(main);
+   }
+ 
+   /**
+    * This method removes the chooser panel from the JColorChooser.
+    *
+    * @param chooser The JColorChooser this panel is being removed from.
+    */
+   public void uninstallChooserPanel(JColorChooser chooser)
+   {
+     recentPalette = null;
+     mainPalette = null;
+ 
+     removeAll();
+     super.uninstallChooserPanel(chooser);
+   }
+ 
+   /**
+    * This method returns the JTabbedPane displayed name.
+    *
+    * @return The name displayed in the JTabbedPane.
+    */
+   public String getDisplayName()
+   {
+     return "Swatches";
+   }
+ 
+   /**
+    * This method returns the small display icon.
+    *
+    * @return The small display icon.
+    */
+   public Icon getSmallDisplayIcon()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns the large display icon.
+    *
+    * @return The large display icon.
+    */
+   public Icon getLargeDisplayIcon()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method paints the chooser panel with the given Graphics object.
+    *
+    * @param g The Graphics object to paint with.
+    */
+   public void paint(Graphics g)
+   {
+     super.paint(g);
+   }
+ 
+   /**
+    * This method returns the tooltip text for the given MouseEvent.
+    *
+    * @param e The MouseEvent.
+    *
+    * @return The tooltip text.
+    */
+   public String getToolTipText(MouseEvent e)
+   {
+     return null;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/AncestorEvent.java gcc-4.0.0/libjava/javax/swing/event/AncestorEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/AncestorEvent.java	Mon Jul 14 05:33:30 2003
--- gcc-4.0.0/libjava/javax/swing/event/AncestorEvent.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* AncestorEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AncestorEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.event;
*** 40,45 ****
--- 40,46 ----
  
  import java.awt.AWTEvent;
  import java.awt.Container;
+ 
  import javax.swing.JComponent;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/DocumentEvent.java gcc-4.0.0/libjava/javax/swing/event/DocumentEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/DocumentEvent.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/event/DocumentEvent.java	Thu Jun 17 23:43:13 2004
*************** public interface DocumentEvent {
*** 87,154 ****
  
  	} // ElementChange
  
! 	/**
! 	 * EventType
! 	 */
! 	class EventType {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * INSERT
! 		 */
! 		EventType INSERT = new EventType("INSERT"); // TODO
! 
! 		/**
! 		 * REMOVE
! 		 */
! 		EventType REMOVE = new EventType("REMOVE"); // TODO
! 
! 		/**
! 		 * CHANGE
! 		 */
! 		EventType CHANGE = new EventType("CHANGE"); // TODO
! 
! 		/**
! 		 * typeString
! 		 */
! 		private String type;
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor EventType
! 		 * @param type TODO
! 		 */
! 		private EventType(String type) {
! 			this.type = type;
! 		} // EventType()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * toString
! 		 * @returns String
! 		 */
! 		public String toString() {
! 			return type; // TODO
! 		} // toString()
  
  
! 	} // EventType
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
  	/**
  	 * getType
--- 87,135 ----
  
  	} // ElementChange
  
!   /**
!    * EventType
!    */
!   class EventType
!   {
!     /**
!      * INSERT
!      */
!     public static final EventType INSERT = new EventType("INSERT"); // TODO
  
!     /**
!      * REMOVE
!      */
!     public static final EventType REMOVE = new EventType("REMOVE"); // TODO
  
+     /**
+      * CHANGE
+      */
+     public static final EventType CHANGE = new EventType("CHANGE"); // TODO
  
!     /**
!      * typeString
!      */
!     private String type;
  
+     /**
+      * Constructor EventType
+      * @param type TODO
+      */
+     private EventType(String type)
+     {
+       this.type = type;
+     }
  
!     /**
!      * toString
!      * @returns String
!      */
!     public String toString()
!     {
!       return type;
!     }
!   }
  
  	/**
  	 * getType
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/EventListenerList.java gcc-4.0.0/libjava/javax/swing/event/EventListenerList.java
*** gcc-3.4.3/libjava/javax/swing/event/EventListenerList.java	Wed Jan  7 14:42:04 2004
--- gcc-4.0.0/libjava/javax/swing/event/EventListenerList.java	Thu Feb 17 07:48:52 2005
***************
*** 1,5 ****
  /* EventListenerList.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* EventListenerList.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.util.EventListener;
*** 84,91 ****
   *   }
   * }</pre></blockquote>
   *
!  * @author <a href="mailto:aselkirk@sympatico.ca">Andrew Selkirk</a>
!  * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
   */
  public class EventListenerList
    implements Serializable
--- 84,91 ----
   *   }
   * }</pre></blockquote>
   *
!  * @author Andrew Selkirk (aselkirk@sympatico.ca)
!  * @author Sascha Brawer (brawer@dandelis.ch)
   */
  public class EventListenerList
    implements Serializable
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/HyperlinkEvent.java gcc-4.0.0/libjava/javax/swing/event/HyperlinkEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/HyperlinkEvent.java	Fri Jun 27 12:41:52 2003
--- gcc-4.0.0/libjava/javax/swing/event/HyperlinkEvent.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* HyperlinkEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* HyperlinkEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.event;
*** 40,45 ****
--- 40,46 ----
  
  import java.net.URL;
  import java.util.EventObject;
+ 
  import javax.swing.text.Element;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/InternalFrameEvent.java gcc-4.0.0/libjava/javax/swing/event/InternalFrameEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/InternalFrameEvent.java	Mon Jul 14 05:33:30 2003
--- gcc-4.0.0/libjava/javax/swing/event/InternalFrameEvent.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* InternalFrameEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InternalFrameEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.swing.event;
  
  import java.awt.AWTEvent;
+ 
  import javax.swing.JInternalFrame;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/MenuDragMouseEvent.java gcc-4.0.0/libjava/javax/swing/event/MenuDragMouseEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/MenuDragMouseEvent.java	Fri Aug  9 04:26:11 2002
--- gcc-4.0.0/libjava/javax/swing/event/MenuDragMouseEvent.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* MenuDragMouseEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MenuDragMouseEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.event;
  
- // Imports
- import java.awt.event.MouseEvent;
  import java.awt.Component;
  import javax.swing.MenuElement;
  import javax.swing.MenuSelectionManager;
  
--- 35,46 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.event;
  
  import java.awt.Component;
+ import java.awt.event.MouseEvent;
+ 
  import javax.swing.MenuElement;
  import javax.swing.MenuSelectionManager;
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/MenuKeyEvent.java gcc-4.0.0/libjava/javax/swing/event/MenuKeyEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/MenuKeyEvent.java	Fri Aug  9 04:26:11 2002
--- gcc-4.0.0/libjava/javax/swing/event/MenuKeyEvent.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* MenuKeyEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MenuKeyEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,45 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.event;
  
- // Imports
  import java.awt.Component;
  import java.awt.event.KeyEvent;
  import javax.swing.MenuElement;
  import javax.swing.MenuSelectionManager;
  
--- 35,46 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.event;
  
  import java.awt.Component;
  import java.awt.event.KeyEvent;
+ 
  import javax.swing.MenuElement;
  import javax.swing.MenuSelectionManager;
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/MouseInputAdapter.java gcc-4.0.0/libjava/javax/swing/event/MouseInputAdapter.java
*** gcc-3.4.3/libjava/javax/swing/event/MouseInputAdapter.java	Wed Jun 11 13:20:40 2003
--- gcc-4.0.0/libjava/javax/swing/event/MouseInputAdapter.java	Wed Feb 16 20:02:48 2005
***************
*** 1,5 ****
  /* MouseInputAdapter.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MouseInputAdapter.java --
!    Copyright (C) 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.event.MouseEvent;
*** 44,115 ****
   * MouseInputAdapter
   * @author Andrew Selkirk
   */
! public class MouseInputAdapter	extends		Object
! 								implements	MouseInputListener {
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor MouseInputAdapter
! 	 */
! 	public MouseInputAdapter() {
! 	} // MouseInputAdapter()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Mouse clicked
! 	 * @param event Mouse event
! 	 */
! 	public void mouseClicked(MouseEvent event) {
! 	} // mouseClicked()
! 
! 	/**
! 	 * Mouse dragged
! 	 * @param event Mouse event
! 	 */
! 	public void mouseDragged(MouseEvent event) {
! 	} // mouseDragged()
  
! 	/**
! 	 * Mouse entered
! 	 * @param event Mouse event
! 	 */
! 	public void mouseEntered(MouseEvent event) {
!  	} // mouseEntered()
  
! 	/**
! 	 * Mouse exited
! 	 * @param event Mouse event
! 	 */
! 	public void mouseExited(MouseEvent event) {
! 	} // mouseExited()
  
! 	/**
! 	 * Mouse moved
! 	 * @param event Mouse event
! 	 */
! 	public void mouseMoved(MouseEvent event) {
! 	} // mouseMoved()
  
! 	/**
! 	 * Mouse pressed
! 	 * @param event Mouse event
! 	 */
! 	public void mousePressed(MouseEvent event) {
! 	} // mousePressed()
  
! 	/**
! 	 * Mouse released
! 	 * @param event Mouse event
! 	 */
! 	public void mouseReleased(MouseEvent event) {
! 	} // mouseReleased()
  
  
! } // MouseInputAdapterEvent
--- 44,119 ----
   * MouseInputAdapter
   * @author Andrew Selkirk
   */
! public abstract class MouseInputAdapter implements MouseInputListener
! {
!   /**
!    * Constructor MouseInputAdapter
!    */
!   public MouseInputAdapter()
!   {
!     // Do nothing here.
!   }
  
!   /**
!    * Mouse clicked
!    * @param event Mouse event
!    */
!   public void mouseClicked(MouseEvent event)
!   {
!     // Do nothing by default.
!   }
  
!   /**
!    * Mouse dragged
!    * @param event Mouse event
!    */
!   public void mouseDragged(MouseEvent event)
!   {
!     // Do nothing by default.
!   }
  
!   /**
!    * Mouse entered
!    * @param event Mouse event
!    */
!   public void mouseEntered(MouseEvent event)
!   {
!     // Do nothing by default.
!   }
  
!   /**
!    * Mouse exited
!    * @param event Mouse event
!    */
!   public void mouseExited(MouseEvent event)
!   {
!     // Do nothing by default.
!   }
  
!   /**
!    * Mouse moved
!    * @param event Mouse event
!    */
!   public void mouseMoved(MouseEvent event)
!   {
!     // Do nothing by default.
!   }
  
+   /**
+    * Mouse pressed
+    * @param event Mouse event
+    */
+   public void mousePressed(MouseEvent event)
+   {
+     // Do nothing by default.
+   }
  
!   /**
!    * Mouse released
!    * @param event Mouse event
!    */
!   public void mouseReleased(MouseEvent event)
!   {
!     // Do nothing by default.
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/SwingPropertyChangeSupport.java gcc-4.0.0/libjava/javax/swing/event/SwingPropertyChangeSupport.java
*** gcc-3.4.3/libjava/javax/swing/event/SwingPropertyChangeSupport.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/event/SwingPropertyChangeSupport.java	Thu May 27 06:17:40 2004
*************** public final	class SwingPropertyChangeSu
*** 210,217 ****
  		PropertyChangeListener	listener;
  
  		// Check Values if they are equal
! 		if (event.getOldValue() == null || event.getNewValue() == null ||
! 			event.getOldValue().equals(event.getNewValue()) == true) {
  			return;
  		} // if
  
--- 210,218 ----
  		PropertyChangeListener	listener;
  
  		// Check Values if they are equal
! 		if (event.getOldValue() == null && event.getNewValue() == null ||
! 		    (event.getOldValue() != null && event.getNewValue() != null &&
! 	            event.getOldValue().equals(event.getNewValue()))) {
  			return;
  		} // if
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/TableColumnModelEvent.java gcc-4.0.0/libjava/javax/swing/event/TableColumnModelEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/TableColumnModelEvent.java	Fri Aug  9 04:26:11 2002
--- gcc-4.0.0/libjava/javax/swing/event/TableColumnModelEvent.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* TableColumnModelEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TableColumnModelEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,44 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.event;
  
- // Imports
  import java.util.EventObject;
  import javax.swing.table.TableColumnModel;
  
  /**
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.event;
  
  import java.util.EventObject;
+ 
  import javax.swing.table.TableColumnModel;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/TableModelEvent.java gcc-4.0.0/libjava/javax/swing/event/TableModelEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/TableModelEvent.java	Fri Jun 27 12:41:52 2003
--- gcc-4.0.0/libjava/javax/swing/event/TableModelEvent.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* TableModelEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TableModelEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.swing.event;
  
  import java.util.EventObject;
+ 
  import javax.swing.table.TableModel;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/TreeExpansionEvent.java gcc-4.0.0/libjava/javax/swing/event/TreeExpansionEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/TreeExpansionEvent.java	Fri Aug  9 04:26:11 2002
--- gcc-4.0.0/libjava/javax/swing/event/TreeExpansionEvent.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* TreeExpansionEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TreeExpansionEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,44 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.event;
  
- // Imports
  import java.util.EventObject;
  import javax.swing.tree.TreePath;
  
  /**
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.event;
  
  import java.util.EventObject;
+ 
  import javax.swing.tree.TreePath;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/TreeModelEvent.java gcc-4.0.0/libjava/javax/swing/event/TreeModelEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/TreeModelEvent.java	Fri Aug  9 04:26:11 2002
--- gcc-4.0.0/libjava/javax/swing/event/TreeModelEvent.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* TreeModelEvent.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TreeModelEvent.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,44 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.event;
  
- // Imports
  import java.util.EventObject;
  import javax.swing.tree.TreePath;
  
  /**
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.event;
  
  import java.util.EventObject;
+ 
  import javax.swing.tree.TreePath;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/TreeSelectionEvent.java gcc-4.0.0/libjava/javax/swing/event/TreeSelectionEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/TreeSelectionEvent.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/event/TreeSelectionEvent.java	Tue Nov 30 23:59:01 2004
*************** this exception to your version of the li
*** 35,43 ****
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.event;
  
  import java.util.EventObject;
+ 
  import javax.swing.tree.TreePath;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/TreeWillExpandListener.java gcc-4.0.0/libjava/javax/swing/event/TreeWillExpandListener.java
*** gcc-3.4.3/libjava/javax/swing/event/TreeWillExpandListener.java	Sun Oct 12 13:25:59 2003
--- gcc-4.0.0/libjava/javax/swing/event/TreeWillExpandListener.java	Tue Nov 30 23:59:01 2004
***************
*** 1,5 ****
  /* TreeWillExpandListener.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TreeWillExpandListener.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.swing.event;
  
  import java.util.EventListener;
+ 
  import javax.swing.tree.ExpandVetoException;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/UndoableEditEvent.java gcc-4.0.0/libjava/javax/swing/event/UndoableEditEvent.java
*** gcc-3.4.3/libjava/javax/swing/event/UndoableEditEvent.java	Sat Jan 10 21:07:43 2004
--- gcc-4.0.0/libjava/javax/swing/event/UndoableEditEvent.java	Tue Nov 30 23:59:01 2004
*************** this exception to your version of the li
*** 35,43 ****
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.event;
  
  import java.util.EventObject;
+ 
  import javax.swing.undo.UndoableEdit;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/event/UndoableEditListener.java gcc-4.0.0/libjava/javax/swing/event/UndoableEditListener.java
*** gcc-3.4.3/libjava/javax/swing/event/UndoableEditListener.java	Sun Oct 12 13:25:59 2003
--- gcc-4.0.0/libjava/javax/swing/event/UndoableEditListener.java	Thu Jun 17 23:43:13 2004
***************
*** 1,5 ****
  /* UndoableEditListener.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UndoableEditListener.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,57 ****
  
  package javax.swing.event;
  
- // Imports
  import java.util.EventListener;
  
  /**
   * UndoableEditListener public interface
   * @author Andrew Selkirk
   * @author Ronald Veldema
   */
! public interface UndoableEditListener extends EventListener {
! 
! 	/**
! 	 * Undoable edit has happened
! 	 * @param event Undoable Edit Event
! 	 */
! 	void undoableEditHappened(UndoableEditEvent event);
! 
! 
! } // UndoableEditListener
--- 37,56 ----
  
  package javax.swing.event;
  
  import java.util.EventListener;
  
+ 
  /**
   * UndoableEditListener public interface
   * @author Andrew Selkirk
   * @author Ronald Veldema
   */
! public interface UndoableEditListener extends EventListener
! {
!   /**
!    * Undoable edit has happened
!    *
!    * @param event Undoable Edit Event
!    */
!   void undoableEditHappened(UndoableEditEvent event);
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/filechooser/FileSystemView.java gcc-4.0.0/libjava/javax/swing/filechooser/FileSystemView.java
*** gcc-3.4.3/libjava/javax/swing/filechooser/FileSystemView.java	Wed Jun 11 13:20:40 2003
--- gcc-4.0.0/libjava/javax/swing/filechooser/FileSystemView.java	Wed May  5 09:16:16 2004
***************
*** 1,5 ****
  /* FileSystemView.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FileSystemView.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.filechooser;
*** 40,46 ****
  
  import java.io.File;
  import java.io.IOException;
- import javax.swing.Icon;
  
  /**
   * FileSystemView
--- 40,45 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/filechooser/FileView.java gcc-4.0.0/libjava/javax/swing/filechooser/FileView.java
*** gcc-3.4.3/libjava/javax/swing/filechooser/FileView.java	Wed Jun 11 13:20:40 2003
--- gcc-4.0.0/libjava/javax/swing/filechooser/FileView.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
  /* FileView.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FileView.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.swing.filechooser;
  
  import java.io.File;
+ 
  import javax.swing.Icon;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/BorderUIResource.java gcc-4.0.0/libjava/javax/swing/plaf/BorderUIResource.java
*** gcc-3.4.3/libjava/javax/swing/plaf/BorderUIResource.java	Fri Aug  1 20:10:21 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/BorderUIResource.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
  /* BorderUIResource.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BorderUIResource.java
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,51 ****
  
  package javax.swing.plaf;
  
! import javax.swing.border.*;
! import javax.swing.Icon;
! import java.io.Serializable;
  import java.awt.Component;
  import java.awt.Graphics;
  import java.awt.Insets;
! import java.awt.Font;
! import java.awt.Color;
  
  /**
   * A wrapper for {@link javax.swing.border.Border} that also
--- 38,59 ----
  
  package javax.swing.plaf;
  
! import java.awt.Color;
  import java.awt.Component;
+ import java.awt.Font;
  import java.awt.Graphics;
  import java.awt.Insets;
! import java.io.Serializable;
! 
! import javax.swing.Icon;
! import javax.swing.border.BevelBorder;
! import javax.swing.border.Border;
! import javax.swing.border.CompoundBorder;
! import javax.swing.border.EmptyBorder;
! import javax.swing.border.EtchedBorder;
! import javax.swing.border.LineBorder;
! import javax.swing.border.MatteBorder;
! import javax.swing.border.TitledBorder;
  
  /**
   * A wrapper for {@link javax.swing.border.Border} that also
*************** public class BorderUIResource 
*** 270,275 ****
--- 278,285 ----
      extends BevelBorder
      implements UIResource, Serializable
    {
+     private static final long serialVersionUID = -1275542891108351642L;
+     
      /**
       * Constructs a BevelBorderUIResource whose colors will be derived
       * from the background of the enclosed component. The background
*************** public class BorderUIResource 
*** 279,285 ****
       *
       * <p><img src="../border/doc-files/BevelBorder-1.png"
       * width="500" height="150"
!      * alt="[An illustration showing raised and lowered BevelBorders]" />
       *
       * @param bevelType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.BevelBorder#RAISED}
--- 289,295 ----
       *
       * <p><img src="../border/doc-files/BevelBorder-1.png"
       * width="500" height="150"
!      * alt="[An illustration showing raised and lowered BevelBorders]" /></p>
       *
       * @param bevelType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.BevelBorder#RAISED}
*************** public class BorderUIResource 
*** 300,306 ****
       *
       * <p><img src="../border/doc-files/BevelBorder-2.png" width="500"
       * height="150" alt="[An illustration showing BevelBorders that were
!      * constructed with this method]" />
       *
       * @param bevelType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.BevelBorder#RAISED}
--- 310,316 ----
       *
       * <p><img src="../border/doc-files/BevelBorder-2.png" width="500"
       * height="150" alt="[An illustration showing BevelBorders that were
!      * constructed with this method]" /></p>
       *
       * @param bevelType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.BevelBorder#RAISED}
*************** public class BorderUIResource 
*** 340,346 ****
       *
       * <p><img src="../border/doc-files/BevelBorder-3.png" width="500"
       * height="150" alt="[An illustration showing BevelBorders that
!      * were constructed with this method]" />
       *
       * @param bevelType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.BevelBorder#RAISED}
--- 350,356 ----
       *
       * <p><img src="../border/doc-files/BevelBorder-3.png" width="500"
       * height="150" alt="[An illustration showing BevelBorders that
!      * were constructed with this method]" /></p>
       *
       * @param bevelType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.BevelBorder#RAISED}
*************** public class BorderUIResource 
*** 399,404 ****
--- 409,416 ----
      extends CompoundBorder
      implements UIResource, Serializable
    {
+     private static final long serialVersionUID = 7550017084975167341L;
+     
      /**
       * Constructs a CompoundBorderUIResource with the specified inside
       * and outside borders.
*************** public class BorderUIResource 
*** 432,438 ****
     *
     * <p><img src="../border/doc-files/EmptyBorder-1.png"
     * width="290" height="200"
!    * alt="[An illustration of EmptyBorder]" />
     *
     * @author Brian Jones (cbj@gnu.org)
     * @author Sascha Brawer (brawer@dandelis.ch)
--- 444,450 ----
     *
     * <p><img src="../border/doc-files/EmptyBorder-1.png"
     * width="290" height="200"
!    * alt="[An illustration of EmptyBorder]" /></p>
     *
     * @author Brian Jones (cbj@gnu.org)
     * @author Sascha Brawer (brawer@dandelis.ch)
*************** public class BorderUIResource 
*** 441,446 ****
--- 453,460 ----
      extends EmptyBorder
      implements UIResource, Serializable
    {
+     private static final long serialVersionUID = -4914187529340071708L;
+     
      /**
       * Constructs an empty border given the number of pixels required
       * on each side.
*************** public class BorderUIResource 
*** 487,493 ****
     *
     * <p><img src="../border/doc-files/EtchedBorder-1.png" width="500"
     * height="200" alt="[An illustration of the two EtchedBorder
!    * variants]" />
     *
     * @author Brian Jones (cbj@gnu.org)
     * @author Sascha Brawer (brawer@dandelis.ch)
--- 501,507 ----
     *
     * <p><img src="../border/doc-files/EtchedBorder-1.png" width="500"
     * height="200" alt="[An illustration of the two EtchedBorder
!    * variants]" /></p>
     *
     * @author Brian Jones (cbj@gnu.org)
     * @author Sascha Brawer (brawer@dandelis.ch)
*************** public class BorderUIResource 
*** 496,501 ****
--- 510,517 ----
      extends EtchedBorder
      implements UIResource, Serializable
    {
+     private static final long serialVersionUID = -8186391754165296656L;
+     
      /**
       * Constructs an EtchedBorderUIResource that appears lowered into
       * the surface. The colors will be derived from the background
*************** public class BorderUIResource 
*** 514,520 ****
       *
       * <p><img src="../border/doc-files/EtchedBorder-1.png"
       * width="500" height="200" alt="[An illustration of the two
!      * EtchedBorder variants]" />
       *
       * @param etchType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.EtchedBorder#RAISED}
--- 530,536 ----
       *
       * <p><img src="../border/doc-files/EtchedBorder-1.png"
       * width="500" height="200" alt="[An illustration of the two
!      * EtchedBorder variants]" /></p>
       *
       * @param etchType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.EtchedBorder#RAISED}
*************** public class BorderUIResource 
*** 555,561 ****
       *
       * <p><img src="../border/doc-files/EtchedBorder-2.png" width="500"
       * height="200" alt="[An illustration that shows which pixels get
!      * painted in what color]" />
       *
       * @param etchType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.EtchedBorder#RAISED}
--- 571,577 ----
       *
       * <p><img src="../border/doc-files/EtchedBorder-2.png" width="500"
       * height="200" alt="[An illustration that shows which pixels get
!      * painted in what color]" /></p>
       *
       * @param etchType the desired appearance of the border. The value
       *        must be either {@link javax.swing.border.EtchedBorder#RAISED}
*************** public class BorderUIResource 
*** 588,594 ****
     * such as the borders provided by this class.
     *
     * <p><img src="../border/doc-files/LineBorder-1.png" width="500"
!    * height="200" alt="[An illustration of two LineBorders] />
     *
     * @author Brian Jones (cbj@gnu.org)
     * @author Sascha Brawer (brawer@dandelis.ch)
--- 604,610 ----
     * such as the borders provided by this class.
     *
     * <p><img src="../border/doc-files/LineBorder-1.png" width="500"
!    * height="200" alt="[An illustration of two LineBorders]" /></p>
     *
     * @author Brian Jones (cbj@gnu.org)
     * @author Sascha Brawer (brawer@dandelis.ch)
*************** public class BorderUIResource 
*** 597,602 ****
--- 613,620 ----
      extends LineBorder
      implements UIResource, Serializable
    {
+     private static final long serialVersionUID = -6171232338180172310L;
+     
      /**
       * Constructs a LineBorderUIResource given its color.  The border
       * will be one pixel thick and have plain corners.
*************** public class BorderUIResource 
*** 643,649 ****
     * such as the borders provided by this class.
     *
     * <p><img src="../border/doc-files/MatteBorder-1.png" width="500"
!    * height="150" alt="[An illustration of two MatteBorders] />
     *
     * @author Brian Jones (cbj@gnu.org)
     * @author Sascha Brawer (brawer@dandelis.ch)
--- 661,667 ----
     * such as the borders provided by this class.
     *
     * <p><img src="../border/doc-files/MatteBorder-1.png" width="500"
!    * height="150" alt="[An illustration of two MatteBorders]" /></p>
     *
     * @author Brian Jones (cbj@gnu.org)
     * @author Sascha Brawer (brawer@dandelis.ch)
*************** public class BorderUIResource 
*** 652,664 ****
      extends MatteBorder
      implements UIResource, Serializable
    {
      /**
       * Constructs a MatteBorderUIResource given the width on each side
       * and a fill color.
       *
       * <p><img src="../border/doc-files/MatteBorder-2.png" width="500"
       * height="150" alt="[A picture of a MatteBorder made by this
!      * constructor]" />
       *
       * @param top the width of the border at its top edge.
       * @param left the width of the border at its left edge.
--- 670,684 ----
      extends MatteBorder
      implements UIResource, Serializable
    {
+     private static final long serialVersionUID = -8107923147541851122L;
+     
      /**
       * Constructs a MatteBorderUIResource given the width on each side
       * and a fill color.
       *
       * <p><img src="../border/doc-files/MatteBorder-2.png" width="500"
       * height="150" alt="[A picture of a MatteBorder made by this
!      * constructor]" /></p>
       *
       * @param top the width of the border at its top edge.
       * @param left the width of the border at its left edge.
*************** public class BorderUIResource 
*** 680,686 ****
       *
       * <p><img src="../border/doc-files/MatteBorder-4.png" width="500"
       * height="150" alt="[A picture of a MatteBorder made by this
!      * constructor]" />
       *
       * @param top the width of the border at its top edge.
       * @param left the width of the border at its left edge.
--- 700,706 ----
       *
       * <p><img src="../border/doc-files/MatteBorder-4.png" width="500"
       * height="150" alt="[A picture of a MatteBorder made by this
!      * constructor]" /></p>
       *
       * @param top the width of the border at its top edge.
       * @param left the width of the border at its left edge.
*************** public class BorderUIResource 
*** 704,710 ****
       *
       * <p><img src="../border/doc-files/MatteBorder-6.png" width="500"
       * height="150" alt="[A picture of a MatteBorder made by this
!      * constructor]" />
       *
       * @param tileIcon an icon for tiling the border area. 
       */
--- 724,730 ----
       *
       * <p><img src="../border/doc-files/MatteBorder-6.png" width="500"
       * height="150" alt="[A picture of a MatteBorder made by this
!      * constructor]" /></p>
       *
       * @param tileIcon an icon for tiling the border area. 
       */
*************** public class BorderUIResource 
*** 731,736 ****
--- 751,758 ----
      extends TitledBorder
      implements UIResource, Serializable
    {
+     private static final long serialVersionUID = 7667113547406407427L;
+     
      /**
       * Constructs a TitledBorderUIResource given the text of its title.
       *
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/ComponentUI.java gcc-4.0.0/libjava/javax/swing/plaf/ComponentUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/ComponentUI.java	Fri Aug  1 20:10:21 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/ComponentUI.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
! /* ComponentUI.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ComponentUI.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.plaf;
*** 40,49 ****
  
  import java.awt.Dimension;
  import java.awt.Graphics;
  import javax.accessibility.Accessible;
  import javax.swing.JComponent;
  
- 
  /**
   * The abstract base class for all delegates that provide the
   * pluggable look and feel for Swing components. User applications
--- 40,49 ----
  
  import java.awt.Dimension;
  import java.awt.Graphics;
+ 
  import javax.accessibility.Accessible;
  import javax.swing.JComponent;
  
  /**
   * The abstract base class for all delegates that provide the
   * pluggable look and feel for Swing components. User applications
*************** import javax.swing.JComponent;
*** 52,58 ****
   *
   * <p><img src="doc-files/ComponentUI-1.png" width="700" height="550"
   * alt="[UML diagram illustrating the architecture for pluggable
!  * look and feels]" />
   *
   * <p>Components such as {@link javax.swing.JSlider} do not directly
   * implement operations related to the look and feel of the user
--- 52,58 ----
   *
   * <p><img src="doc-files/ComponentUI-1.png" width="700" height="550"
   * alt="[UML diagram illustrating the architecture for pluggable
!  * look and feels]" /></p>
   *
   * <p>Components such as {@link javax.swing.JSlider} do not directly
   * implement operations related to the look and feel of the user
*************** import javax.swing.JComponent;
*** 68,81 ****
   * services. Soon before the end of its lifecycle, the
   * <code>ComponentUI</code> will receive an {@link #uninstallUI}
   * message, at which time the <code>ComponentUI</code> is expected to
!  * undo any changes.
   *
   * <p>Note that the <code>ui</code> of a <code>JComponent</code>
   * changes whenever the user switches between look and feels.  For
   * example, the <code>ui</code> property of a <code>JSlider</code>
   * could change from an instance of <code>MetalSliderUI</code> to an
   * instance of <code>FooSliderUI</code>. This switch can happen at any
!  * time, but it will always be performed from inside the Swing thread.
   *
   * @author Sascha Brawer (brawer@dandelis.ch)
   */
--- 68,81 ----
   * services. Soon before the end of its lifecycle, the
   * <code>ComponentUI</code> will receive an {@link #uninstallUI}
   * message, at which time the <code>ComponentUI</code> is expected to
!  * undo any changes.</p>
   *
   * <p>Note that the <code>ui</code> of a <code>JComponent</code>
   * changes whenever the user switches between look and feels.  For
   * example, the <code>ui</code> property of a <code>JSlider</code>
   * could change from an instance of <code>MetalSliderUI</code> to an
   * instance of <code>FooSliderUI</code>. This switch can happen at any
!  * time, but it will always be performed from inside the Swing thread.</p>
   *
   * @author Sascha Brawer (brawer@dandelis.ch)
   */
*************** public abstract class ComponentUI 
*** 96,121 ****
     * The delegate object then receives an <code>installUI</code>
     * message.
     *
!    * <p>This method should perform the following tasks:
!    *
!    * <ul><li>Set visual properties such as borders, fonts, colors, or
!    * icons. However, no change should be performed for those
!    * properties whose values have been directly set by the client
!    * application. To allow the distinction, LookAndFeels are expected
!    * to use values that implement the {@link UIResource} marker
!    * interface, such as {@link BorderUIResource} or {@link
!    * ColorUIResource}.</li>
     *
     * <li>If necessary, install a {@link java.awt.LayoutManager}.</li>
-    *
     * <li>Embed custom sub-components. For instance, the UI delegate
!    * for a {@link javax.swing.JSplitPane} might install a special
!    * component for the divider.</li>
!    *
     * <li>Register event listeners.</li>
-    *
     * <li>Set up properties related to keyborad navigation, such as
!    * mnemonics or focus traversal policies.</li></ul>
     *
     * @param c the component for which this delegate will provide
     *        services.
--- 96,119 ----
     * The delegate object then receives an <code>installUI</code>
     * message.
     *
!    * <p>This method should perform the following tasks:</p>
     *
+    * <ul>
+    * <li>Set visual properties such as borders, fonts, colors, or
+    *     icons. However, no change should be performed for those
+    *     properties whose values have been directly set by the client
+    *     application. To allow the distinction, LookAndFeels are expected
+    *     to use values that implement the {@link UIResource} marker
+    *     interface, such as {@link BorderUIResource} or {@link
+    *     ColorUIResource}.</li>
     * <li>If necessary, install a {@link java.awt.LayoutManager}.</li>
     * <li>Embed custom sub-components. For instance, the UI delegate
!    *     for a {@link javax.swing.JSplitPane} might install a special
!    *     component for the divider.</li>
     * <li>Register event listeners.</li>
     * <li>Set up properties related to keyborad navigation, such as
!    *     mnemonics or focus traversal policies.</li>
!    * </ul>
     *
     * @param c the component for which this delegate will provide
     *        services.
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/FileChooserUI.java gcc-4.0.0/libjava/javax/swing/plaf/FileChooserUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/FileChooserUI.java	Wed Jun 25 12:39:15 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/FileChooserUI.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
  /* FileChooserUI.java --
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FileChooserUI.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,43 ****
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.plaf;
  
  import java.io.File;
+ 
  import javax.swing.JFileChooser;
  import javax.swing.filechooser.FileFilter;
  import javax.swing.filechooser.FileView;
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/IconUIResource.java gcc-4.0.0/libjava/javax/swing/plaf/IconUIResource.java
*** gcc-3.4.3/libjava/javax/swing/plaf/IconUIResource.java	Wed Jun 25 12:39:15 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/IconUIResource.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
! /* IconUIResource.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* IconUIResource.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.plaf;
*** 41,48 ****
  import java.awt.Component;
  import java.awt.Graphics;
  import java.io.Serializable;
- import javax.swing.Icon;
  
  
  /**
   * An icon that is marked as <code>UIResource</code>, which
--- 41,48 ----
  import java.awt.Component;
  import java.awt.Graphics;
  import java.io.Serializable;
  
+ import javax.swing.Icon;
  
  /**
   * An icon that is marked as <code>UIResource</code>, which
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/ListUI.java gcc-4.0.0/libjava/javax/swing/plaf/ListUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/ListUI.java	Wed Jun 25 12:39:15 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/ListUI.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
! /* ListUI.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* ListUI.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.plaf;
*** 40,47 ****
  
  import java.awt.Point;
  import java.awt.Rectangle;
- import javax.swing.JList;
  
  
  /**
   * An abstract base class for delegates that implement the pluggable
--- 40,47 ----
  
  import java.awt.Point;
  import java.awt.Rectangle;
  
+ import javax.swing.JList;
  
  /**
   * An abstract base class for delegates that implement the pluggable
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/PopupMenuUI.java gcc-4.0.0/libjava/javax/swing/plaf/PopupMenuUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/PopupMenuUI.java	Fri Jun 27 12:41:52 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/PopupMenuUI.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
  /* PopupMenuUI.java --
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* PopupMenuUI.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,48 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.plaf;
  
  import java.awt.event.MouseEvent;
  import javax.swing.JPopupMenu;
  import javax.swing.Popup;
  import javax.swing.PopupFactory;
  
- 
  /**
   * An abstract base class for delegates that implement the pluggable
   * look and feel for a <code>JPopupMenu</code>.
--- 35,49 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.plaf;
  
  import java.awt.event.MouseEvent;
+ 
  import javax.swing.JPopupMenu;
  import javax.swing.Popup;
  import javax.swing.PopupFactory;
  
  /**
   * An abstract base class for delegates that implement the pluggable
   * look and feel for a <code>JPopupMenu</code>.
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/SplitPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/SplitPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/SplitPaneUI.java	Fri Jun 27 12:41:52 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/SplitPaneUI.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
  /* SplitPaneUI.java --
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SplitPaneUI.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- package javax.swing.plaf;
  
  
  import java.awt.Graphics;
- import javax.swing.JSplitPane;
  
  
  /**
   * An abstract base class for delegates that implement the pluggable
--- 35,46 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  
+ package javax.swing.plaf;
  
  import java.awt.Graphics;
  
+ import javax.swing.JSplitPane;
  
  /**
   * An abstract base class for delegates that implement the pluggable
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/TabbedPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/TabbedPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/TabbedPaneUI.java	Fri Jun 27 12:41:52 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/TabbedPaneUI.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
! /* TabbedPaneUI.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* TabbedPaneUI.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,46 ****
  package javax.swing.plaf;
  
  import java.awt.Rectangle;
- import javax.swing.JTabbedPane;
  
  
  /**
   * An abstract base class for delegates that implement the pluggable
--- 39,46 ----
  package javax.swing.plaf;
  
  import java.awt.Rectangle;
  
+ import javax.swing.JTabbedPane;
  
  /**
   * An abstract base class for delegates that implement the pluggable
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/TextUI.java gcc-4.0.0/libjava/javax/swing/plaf/TextUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/TextUI.java	Fri Jun 27 12:41:52 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/TextUI.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
! /* TextUI.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* TextUI.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.plaf;
*** 40,52 ****
  
  import java.awt.Point;
  import java.awt.Rectangle;
  import javax.swing.text.BadLocationException;
  import javax.swing.text.EditorKit;
  import javax.swing.text.JTextComponent;
  import javax.swing.text.Position;
  import javax.swing.text.View;
  
- 
  /**
   * An abstract base class for delegates that provide the user
   * interface for text editors.
--- 40,52 ----
  
  import java.awt.Point;
  import java.awt.Rectangle;
+ 
  import javax.swing.text.BadLocationException;
  import javax.swing.text.EditorKit;
  import javax.swing.text.JTextComponent;
  import javax.swing.text.Position;
  import javax.swing.text.View;
  
  /**
   * An abstract base class for delegates that provide the user
   * interface for text editors.
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/TreeUI.java gcc-4.0.0/libjava/javax/swing/plaf/TreeUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/TreeUI.java	Tue Aug 26 22:42:37 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/TreeUI.java	Tue Nov 30 23:59:02 2004
***************
*** 1,5 ****
! /* TreeUI.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* TreeUI.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,48 ****
  package javax.swing.plaf;
  
  import java.awt.Rectangle;
  import javax.swing.JTree;
  import javax.swing.tree.TreePath;
  
- 
  /**
   * An abstract base class for delegates that provide the user
   * interface for <code>JTree</code>.
--- 39,48 ----
  package javax.swing.plaf;
  
  import java.awt.Rectangle;
+ 
  import javax.swing.JTree;
  import javax.swing.tree.TreePath;
  
  /**
   * An abstract base class for delegates that provide the user
   * interface for <code>JTree</code>.
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicArrowButton.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicArrowButton.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicArrowButton.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicArrowButton.java	Tue Nov 30 23:59:03 2004
***************
*** 0 ****
--- 1,345 ----
+ /* BasicArrowButton.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.Polygon;
+ import java.awt.Rectangle;
+ 
+ import javax.swing.JButton;
+ import javax.swing.SwingConstants;
+ import javax.swing.border.Border;
+ 
+ /**
+  * This class draws simple arrow buttons for the Basic Look and Feel.
+  */
+ public class BasicArrowButton extends JButton implements SwingConstants
+ {
+   /** The default size of the Arrow buttons. */
+   private static int defaultSize = 10;
+ 
+   /** The Polygon that points up. */
+   private static Polygon upIcon = new Polygon(new int[] { 0, 5, 9 },
+                                               new int[] { 7, 2, 7 }, 3);
+ 
+   /** The Polygon that points down. */
+   private static Polygon downIcon = new Polygon(new int[] { 1, 5, 9 },
+                                                 new int[] { 3, 7, 3 }, 3);
+ 
+   /** The Polygon that points left. */
+   private static Polygon leftIcon = new Polygon(new int[] { 7, 3, 7 },
+                                                 new int[] { 1, 5, 9 }, 3);
+ 
+   /** The Polygon that points right. */
+   private static Polygon rightIcon = new Polygon(new int[] { 3, 7, 3 },
+                                                  new int[] { 1, 5, 9 }, 3);
+ 
+   /** The direction to point in. */
+   protected int direction;
+ 
+   /**
+    * The color the arrow is painted in if disabled and the bottom and right
+    * edges of the button.
+    */
+   private transient Color shadow = Color.GRAY;
+ 
+   /**
+    * The color the arrow is painted in if enabled and the bottom and right
+    * edges of the button.
+    */
+   private transient Color darkShadow = Color.DARK_GRAY;
+ 
+   /** The top and left edges of the button. */
+   private transient Color highlight = Color.WHITE;
+ 
+   /** The border around the ArrowButton. */
+   private transient Border buttonBorder = new Border()
+     {
+       public Insets getBorderInsets(Component c)
+       {
+ 	return new Insets(2, 2, 2, 2);
+       }
+ 
+       public boolean isBorderOpaque()
+       {
+ 	return true;
+       }
+ 
+       public void paintBorder(Component c, Graphics g, int x, int y, int w,
+                               int h)
+       {
+ 	Color saved = g.getColor();
+ 	g.setColor(highlight);
+ 
+ 	g.drawLine(x + 1, y + 1, x + w - 1, y + 1);
+ 	g.drawLine(x + 1, y + 1, x + 1, y + h - 1);
+ 
+ 	g.setColor(shadow);
+ 
+ 	g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1);
+ 	g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1);
+ 
+ 	g.setColor(darkShadow);
+ 
+ 	g.drawLine(x, y + h, x + w, y + h);
+ 	g.drawLine(x + w, y, x + w, y + h);
+ 
+ 	g.setColor(saved);
+       }
+     };
+ 
+   /**
+    * Creates a new BasicArrowButton object.
+    *
+    * @param direction The direction the arrow points in.
+    */
+   public BasicArrowButton(int direction)
+   {
+     super();
+     setBorder(buttonBorder);
+     setDirection(direction);
+   }
+ 
+   /**
+    * Creates a new BasicArrowButton object with the given colors and
+    * direction.
+    *
+    * @param direction The direction to point in.
+    * @param background The background color.
+    * @param shadow The shadow color.
+    * @param darkShadow The dark shadow color.
+    * @param highlight The highlight color.
+    */
+   public BasicArrowButton(int direction, Color background, Color shadow,
+                           Color darkShadow, Color highlight)
+   {
+     this(direction);
+     setBackground(background);
+     this.shadow = shadow;
+     this.darkShadow = darkShadow;
+     this.highlight = highlight;
+   }
+ 
+   /**
+    * This method returns whether the focus can traverse to this component.
+    *
+    * @return Whether the focus can traverse to this component.
+    */
+   public boolean isFocusTraversable()
+   {
+     return false;
+   }
+ 
+   /**
+    * This method returns the direction of the arrow.
+    *
+    * @return The direction of the arrow.
+    */
+   public int getDirection()
+   {
+     return direction;
+   }
+ 
+   /**
+    * This method changes the direction of the arrow.
+    *
+    * @param dir The new direction of the arrow.
+    */
+   public void setDirection(int dir)
+   {
+     this.direction = dir;
+   }
+ 
+   /**
+    * This method paints the arrow button. The painting is delegated to the
+    * paintTriangle method.
+    *
+    * @param g The Graphics object to paint with.
+    */
+   public void paint(Graphics g)
+   {
+     super.paint(g);
+     Insets insets = getInsets();
+     Rectangle bounds = getBounds();
+     int x = insets.left
+             + (bounds.width - insets.left - insets.right - defaultSize) / 2;
+     int y = insets.top
+             + (bounds.height - insets.left - insets.right - defaultSize) / 2;
+     paintTriangle(g, x, y, defaultSize, direction, isEnabled());
+   }
+ 
+   /**
+    * This method returns the preferred size of the arrow button.
+    *
+    * @return The preferred size.
+    */
+   public Dimension getPreferredSize()
+   {
+     Insets insets = getInsets();
+     int w = defaultSize + insets.left + insets.right;
+     int h = defaultSize + insets.top + insets.bottom;
+ 
+     return new Dimension(w, h);
+   }
+ 
+   /**
+    * This method returns the minimum size of the arrow button.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize()
+   {
+     return getPreferredSize();
+   }
+ 
+   /**
+    * This method returns the maximum size of the arrow button.
+    *
+    * @return The maximum size.
+    */
+   public Dimension getMaximumSize()
+   {
+     return getPreferredSize();
+   }
+ 
+   /**
+    * The method paints a triangle with the given size and direction at the
+    * given x and y coordinates.
+    *
+    * @param g The Graphics object to paint with.
+    * @param x The x coordinate to paint at.
+    * @param y The y coordinate to paint at.
+    * @param size The size of the icon.
+    * @param direction The direction of the icon.
+    * @param isEnabled Whether it is enabled.
+    */
+   public void paintTriangle(Graphics g, int x, int y, int size, int direction,
+                             boolean isEnabled)
+   {
+     Polygon arrow = null;
+     switch (direction)
+       {
+       case NORTH:
+ 	arrow = upIcon;
+ 	break;
+       case SOUTH:
+ 	arrow = downIcon;
+ 	break;
+       case EAST:
+       case RIGHT:
+ 	arrow = rightIcon;
+ 	break;
+       case WEST:
+       case LEFT:
+ 	arrow = leftIcon;
+ 	break;
+       }
+ 
+     int[] xPoints = arrow.xpoints;
+     int[] yPoints = arrow.ypoints;
+     int x1;
+     int y1;
+     int x2;
+     int y2;
+     x1 = y1 = x2 = y2 = 0;
+ 
+     if (size != defaultSize)
+       {
+ 	float scale = size * 1f / defaultSize;
+ 	for (int i = 0; i < 3; i++)
+ 	  {
+ 	    xPoints[i] *= scale;
+ 	    yPoints[i] *= scale;
+ 	  }
+       }
+     g.translate(x, y);
+ 
+     switch (direction)
+       {
+       case NORTH:
+ 	x1 = xPoints[0] + 2;
+ 	y1 = yPoints[0];
+ 	y2 = y1;
+ 	x2 = xPoints[2] - 1;
+ 	break;
+       case SOUTH:
+ 	x1 = xPoints[1];
+ 	y1 = yPoints[1] + 1;
+ 	x2 = xPoints[2] - 1;
+ 	y2 = yPoints[2];
+ 	break;
+       case LEFT:
+       case WEST:
+ 	x1 = xPoints[0] + 1;
+ 	y1 = yPoints[0] + 1;
+ 	x2 = x1;
+ 	y2 = yPoints[2] + 1;
+ 	break;
+       case RIGHT:
+       case EAST:
+ 	x1 = xPoints[2];
+ 	y1 = yPoints[2] + 1;
+ 	x2 = xPoints[1] - 1;
+ 	y2 = yPoints[1] + 1;
+ 	break;
+       }
+     Color saved = g.getColor();
+ 
+     if (isEnabled)
+       {
+ 	g.setColor(Color.DARK_GRAY);
+ 
+ 	if (arrow != null)
+ 	  g.fillPolygon(xPoints, yPoints, 3);
+       }
+     else
+       {
+ 	g.setColor(Color.GRAY);
+ 	g.fillPolygon(xPoints, yPoints, 3);
+ 	g.setColor(Color.WHITE);
+ 	g.drawLine(x1, y1, x2, y2);
+       }
+     g.setColor(saved);
+     g.translate(-x, -y);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicBorders.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicBorders.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicBorders.java	Fri Aug  1 20:10:22 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicBorders.java	Tue Nov 30 23:59:03 2004
***************
*** 1,5 ****
! /* BasicBorders.java
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BasicBorders.java --
!    Copyright (C) 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Graphics;
*** 44,49 ****
--- 44,50 ----
  import java.awt.Insets;
  import java.awt.Rectangle;
  import java.io.Serializable;
+ 
  import javax.swing.AbstractButton;
  import javax.swing.ButtonModel;
  import javax.swing.JButton;
*************** import javax.swing.UIManager;
*** 55,65 ****
  import javax.swing.border.AbstractBorder;
  import javax.swing.border.BevelBorder;
  import javax.swing.border.Border;
- import javax.swing.plaf.UIResource;
  import javax.swing.plaf.BorderUIResource;
  import javax.swing.text.JTextComponent;
  
- 
  /**
   * Provides various borders for the Basic look and feel.
   *
--- 56,65 ----
  import javax.swing.border.AbstractBorder;
  import javax.swing.border.BevelBorder;
  import javax.swing.border.Border;
  import javax.swing.plaf.BorderUIResource;
+ import javax.swing.plaf.UIResource;
  import javax.swing.text.JTextComponent;
  
  /**
   * Provides various borders for the Basic look and feel.
   *
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicButtonListener.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicButtonListener.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicButtonListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicButtonListener.java	Wed Feb 16 20:02:49 2005
***************
*** 0 ****
--- 1,234 ----
+ /* BasicButtonListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.event.ActionEvent;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.event.InputEvent;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.awt.event.MouseMotionListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.AbstractAction;
+ import javax.swing.AbstractButton;
+ import javax.swing.ButtonModel;
+ import javax.swing.JComponent;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ 
+ public class BasicButtonListener
+   implements MouseListener, MouseMotionListener, FocusListener, 
+              ChangeListener, PropertyChangeListener
+ {
+   public BasicButtonListener(AbstractButton b)
+   {
+     // Do nothing here.
+   }
+   
+   public void propertyChange(PropertyChangeEvent e)
+   {
+   }
+   
+   protected void checkOpacity(AbstractButton b) 
+   {    
+   }
+   
+   public void focusGained(FocusEvent e) 
+   {    
+     if (e.getSource() instanceof AbstractButton)
+       {
+         AbstractButton button = (AbstractButton) e.getSource();
+         if (button.isFocusPainted())
+           button.repaint();   
+       }
+   }
+   
+   public void focusLost(FocusEvent e)
+   {
+     if (e.getSource() instanceof AbstractButton)
+       {
+         AbstractButton button = (AbstractButton) e.getSource();
+         ButtonModel model = button.getModel();
+         model.setArmed(false);
+ 
+         if (button.isFocusPainted())
+           button.repaint();   
+       }
+   }
+   
+   public void installKeyboardActions(JComponent c)
+   {
+     c.getActionMap().put("pressed", 
+                          new AbstractAction() 
+                          {
+                            public void actionPerformed(ActionEvent e)          
+                            {
+                              AbstractButton button = (AbstractButton) e.getSource();
+                              ButtonModel model = button.getModel();
+                              // It is important that these transitions happen in this order.
+                              model.setArmed(true);
+                              model.setPressed(true);
+                            }
+                          });
+     
+     c.getActionMap().put("released", 
+                          new AbstractAction() 
+                          {
+                            public void actionPerformed(ActionEvent e)          
+                            {
+                              AbstractButton button = (AbstractButton) e.getSource();
+                              ButtonModel model = button.getModel();
+                              // It is important that these transitions happen in this order.
+                              model.setPressed(false);
+                              model.setArmed(false);
+                            }
+                        });    
+   }
+   
+   public void uninstallKeyboardActions(JComponent c)
+   {
+     c.getActionMap().put("pressed", null);
+     c.getActionMap().put("released", null);
+   }
+   
+   public void stateChanged(ChangeEvent e)
+   {
+   }
+   
+   public void mouseMoved(MouseEvent e)
+   {
+   }
+   
+   public void mouseDragged(MouseEvent e)
+   {
+   }
+   
+   public void mouseClicked(MouseEvent e)
+   {
+   }
+ 
+   /**
+    * Accept a mouse press event and arm the button.
+    *
+    * @param e The mouse press event to accept
+    */
+   public void mousePressed(MouseEvent e)
+   {
+     if (e.getSource() instanceof AbstractButton)
+       {
+         AbstractButton button = (AbstractButton) e.getSource();
+         ButtonModel model = button.getModel();
+         if ((e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0)
+           {
+             // It is important that these transitions happen in this order.
+             model.setArmed(true);
+             model.setPressed(true);
+           }
+       }
+   }
+ 
+   /**
+    * Accept a mouse release event and set the button's 
+    * "pressed" property to <code>true</code>, if the model
+    * is armed. If the model is not armed, ignore the event.
+    *
+    * @param e The mouse release event to accept
+    */
+   public void mouseReleased(MouseEvent e)
+   {
+     if (e.getSource() instanceof AbstractButton)
+       {
+         AbstractButton button = (AbstractButton) e.getSource();
+         ButtonModel model = button.getModel();
+         if ((e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0)
+           {
+             // It is important that these transitions happen in this order.
+             model.setPressed(false);
+             model.setArmed(false);
+           }
+       }
+   }
+ 
+   /**
+    * Accept a mouse enter event and set the button's "rollover" property to
+    * <code>true</code>, if the button's "rolloverEnabled" property is
+    * <code>true</code>. If the button is currently armed and the mouse
+    * button is not held down, this enter event will also disarm the model.
+    *
+    * @param e The mouse enter event to accept
+    */
+   public void mouseEntered(MouseEvent e)
+   {
+     if (e.getSource() instanceof AbstractButton)
+       {
+         AbstractButton button = (AbstractButton) e.getSource();
+         ButtonModel model = button.getModel();
+         if (button.isRolloverEnabled())
+           model.setRollover(true);
+         
+         if (model.isPressed() 
+             && (e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0)
+           model.setArmed(true);
+         else
+           model.setArmed(false);
+       }
+   }
+ 
+   /**
+    * Accept a mouse exit event and set the button's model's "rollover"
+    * property to <code>false</code>, if it's "rolloverEnabled" property is
+    * <code>true</code>. Also disarm the button.
+    *
+    * @param e The mouse exit event to accept
+    */
+   public void mouseExited(MouseEvent e)
+   {
+     if (e.getSource() instanceof AbstractButton)
+       {
+         AbstractButton button = (AbstractButton) e.getSource();
+         ButtonModel model = button.getModel();
+         if (button.isRolloverEnabled())
+           model.setRollover(false);
+         model.setArmed(false);
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicButtonUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicButtonUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicButtonUI.java	Sat Jan 10 21:59:30 2004
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicButtonUI.java	Wed Feb 16 20:02:49 2005
***************
*** 1,5 ****
! /* BasicButtonUI.java
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BasicButtonUI.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Dimension;
*** 43,216 ****
  import java.awt.Font;
  import java.awt.FontMetrics;
  import java.awt.Graphics;
- import java.awt.Insets;
  import java.awt.Rectangle;
  import javax.swing.AbstractButton;
  import javax.swing.JComponent;
  import javax.swing.SwingUtilities;
  import javax.swing.plaf.ButtonUI;
  import javax.swing.plaf.ComponentUI;
  
  public class BasicButtonUI extends ButtonUI
  {
!     int gap = 3;
!     //    int y_text_space = 2, x_text_space + 5;
  
!     Color textColor, disabledTextColor;
!     Color pressedBackgroundColor;
!     Color normalBackgroundColor;
  
  
!     public static ComponentUI createUI(final JComponent c) 
!     {
! 	return new BasicButtonUI();
!     }
  
!     
!     public void installUI(final JComponent c) 
!     {
! 	super.installUI(c);
  
! 	textColor                = new Color(0,0,0);
! 	disabledTextColor        = new Color(130, 130, 130);
! 	pressedBackgroundColor   = new Color(150,150,150);
! 	pressedBackgroundColor   = new Color(150,150,150);
! 	normalBackgroundColor    = new Color(192,192,192);
!     }
!     
  
!     public Dimension getPreferredSize(JComponent c) 
!     {
! 	AbstractButton b = (AbstractButton)c;
! 	Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, gap);
! 	//	System.out.println("^^^^^^^^^^^^^^^^^^^^^^   BASIC-PREF="+d + ",T="+b.text);
! 	return d;
!     }
!     
  
!     public void paint(Graphics g, JComponent c)
!     {      
! 	AbstractButton b = (AbstractButton) c;
  
! 	Rectangle tr = new Rectangle();
! 	Rectangle ir = new Rectangle();
! 	Rectangle vr = new Rectangle();
  
!         Font f = c.getFont();
  
!         g.setFont(f);
  
!         FontMetrics fm = g.getFontMetrics(f);
  
!         Insets i = c.getInsets();
  
!         vr.x      = i.left;
!         vr.y      = i.top;
!         vr.width  = b.getWidth()  - (i.right  + vr.x);
!         vr.height = b.getHeight() - (i.bottom + vr.y);
! 	
! 	//System.out.println("             VIEW-RECT-BUTTON="+vr+", insets="+i+", FONTM="+fm);
! 	
! 	String text = SwingUtilities.layoutCompoundLabel(c,
! 							 fm, 
! 							 b.getText(),
! 							 b.getIcon(),
! 							 b.getVerticalAlignment(), 
! 							 b.getHorizontalAlignment(),
! 							 b.getVerticalTextPosition(), 
! 							 b.getHorizontalTextPosition(),
! 							 vr,
! 							 ir,
! 							 tr,
! 							 gap);
  
!         if (b.getModel().isPressed() ||
! 	    b.getModel().isSelected())
! 	    {
! 	      //System.out.println("paint pressed");
! 		paintButtonPressed(g, c);
! 	    }
! 	else
! 	    {
! 	      //System.out.println("paint normal");
! 		paintButtonNormal(g, c);
! 	    }
! 	
! 	paintIcon(g, c, ir);
! 	paintText(g, c, tr, b.getText());
! 	paintFocus(g, c, vr, tr, ir);
!     }
  
  
!     protected void paintFocus(Graphics g, 
! 			      JComponent c,
! 			      Rectangle vr,
! 			      Rectangle tr,
! 			      Rectangle ir)
!     {
!     }
  
!     protected void paintIcon(Graphics g, 
! 			     JComponent c, 
! 			     Rectangle iconRect)
!     {
! 	AbstractButton b = (AbstractButton) c;
! 	if (b.getIcon() != null)
! 	    {
! 		int x = iconRect.x;
! 		int y = iconRect.y;
  
! 		System.out.println("WE HAVE AN ICON: " + b.getIcon());
!  
! 		b.getIcon().paintIcon(c, g, x, y);
! 	    }
! 	else
! 	    {
! 		//System.out.println("NO ICON FOR BUTTON:" + b.text);
! 	    }
!     }
  
!     protected void paintButtonPressed(Graphics g,
! 				      JComponent b)
!     {
! 	Dimension size = b.getSize();
! 	
! 	g.setColor(pressedBackgroundColor);
! 	g.fillRect(1,1,size.width-2, size.height-2);                
  
!     }
!     
!     protected void paintButtonNormal(Graphics g,
! 				     JComponent b)
!     {
! 	Dimension size = b.getSize();
! 	
! 	g.setColor(normalBackgroundColor);
! 	g.fillRect(1,1,size.width-2, size.height-2);                
  
!     }
!     
!     protected void paintText(Graphics g,
! 			     JComponent c,
! 			     Rectangle textRect,
! 			     String text) 
!     {	
! 	Font f = c.getFont();
  
!         g.setFont(f);
  
!         FontMetrics fm = g.getFontMetrics(f);
  
! 	g.setColor(c.isEnabled() ? textColor : disabledTextColor);
  
! 	BasicGraphicsUtils.drawString(g,
! 				      text, 
! 				      0,
! 				      textRect.x, 
! 				      textRect.y + fm.getAscent()/2);
!     } 
! }
  
  
  
  
--- 43,411 ----
  import java.awt.Font;
  import java.awt.FontMetrics;
  import java.awt.Graphics;
  import java.awt.Rectangle;
+ 
  import javax.swing.AbstractButton;
+ import javax.swing.ButtonModel;
+ import javax.swing.Icon;
+ import javax.swing.InputMap;
  import javax.swing.JComponent;
  import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
  import javax.swing.plaf.ButtonUI;
  import javax.swing.plaf.ComponentUI;
  
  public class BasicButtonUI extends ButtonUI
  {
!   /**
!    * A constant used to pad out elements in the button's layout and
!    * preferred size calculations.
!    */
!   protected int defaultTextIconGap = 4;
  
!   /**
!    * A constant added to the defaultTextIconGap to adjust the text
!    * within this particular button.
!    */
!   protected int defaultTextShiftOffset = 0;
  
+   private int textShiftOffset;
  
!   private Color focusColor;
  
!   /**
!    * Factory method to create an instance of BasicButtonUI for a given
!    * {@link JComponent}, which should be an {@link AbstractButton}.
!    *
!    * @param c The component to create a UI got
!    *
!    * @return A new UI capable of drawing the component
!    */
!   public static ComponentUI createUI(final JComponent c) 
!   {
!     return new BasicButtonUI();
!   }
  
!   public int getDefaultTextIconGap(AbstractButton b)
!   {
!     return defaultTextIconGap;
!   }
  
!   protected void clearTextShiftOffset()
!   {
!     textShiftOffset = 0;
!   }
!   
!   protected int getTextShiftOffset()
!   {
!     return textShiftOffset;
!   }
  
!   protected void setTextShiftOffset()
!   {
!     textShiftOffset = defaultTextShiftOffset;
!   }
  
!   protected void installDefaults(AbstractButton b)
!   {
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!     focusColor = defaults.getColor("Button.focus");
!     b.setForeground(defaults.getColor("Button.foreground"));
!     b.setBackground(defaults.getColor("Button.background"));
!     b.setMargin(defaults.getInsets("Button.margin"));
!     b.setBorder(defaults.getBorder("Button.border"));
!     b.setIconTextGap(defaults.getInt("Button.textIconGap"));
!     b.setInputMap(JComponent.WHEN_FOCUSED, 
!                   (InputMap) defaults.get("Button.focusInputMap"));
!     b.setOpaque(true);
!   }
  
!   protected void uninstallDefaults(AbstractButton b)
!   {
!     b.setForeground(null);
!     b.setBackground(null);
!     b.setBorder(null);
!     b.setIconTextGap(defaultTextIconGap);
!     b.setMargin(null);
!   }
  
!   protected BasicButtonListener listener;
  
!   protected BasicButtonListener createButtonListener(AbstractButton b)
!   {
!     return new BasicButtonListener(b);
!   }
  
!   protected void installListeners(AbstractButton b)
!   {
!     listener = createButtonListener(b);
!     b.addChangeListener(listener);
!     b.addPropertyChangeListener(listener);
!     b.addFocusListener(listener);    
!     b.addMouseListener(listener);
!     b.addMouseMotionListener(listener);
!   }
  
!   protected void uninstallListeners(AbstractButton b)
!   {
!     b.removeChangeListener(listener);
!     b.removePropertyChangeListener(listener);
!     b.removeFocusListener(listener);    
!     b.removeMouseListener(listener);
!     b.removeMouseMotionListener(listener);
!   }
  
!   protected void installKeyboardActions(AbstractButton b)
!   {
!     listener.installKeyboardActions(b);
!   }
  
+   protected void uninstallKeyboardActions(AbstractButton b)
+   {
+     listener.uninstallKeyboardActions(b);
+   }
  
!   /**
!    * Install the BasicButtonUI as the UI for a particular component.
!    * This means registering all the UI's listeners with the component,
!    * and setting any properties of the button which are particular to 
!    * this look and feel.
!    *
!    * @param c The component to install the UI into
!    */
!   public void installUI(final JComponent c) 
!   {
!     super.installUI(c);
!     if (c instanceof AbstractButton)
!       {
!         AbstractButton b = (AbstractButton) c;
!         installDefaults(b);
!         installListeners(b);
!         installKeyboardActions(b);
!       }
!   }
  
!   /**
!    * Calculate the preferred size of this component, by delegating to
!    * {@link BasicGraphicsUtils.getPreferredButtonSize}.
!    *
!    * @param c The component to measure
!    *
!    * @return The preferred dimensions of the component
!    */
!   public Dimension getPreferredSize(JComponent c) 
!   {
!     AbstractButton b = (AbstractButton)c;
!     Dimension d = 
!       BasicGraphicsUtils.getPreferredButtonSize
!       (b, defaultTextIconGap + defaultTextShiftOffset);
!     return d;
!   }
  
!   private static Icon currentIcon(AbstractButton b)
!   {
!     Icon i = b.getIcon();
!     ButtonModel model = b.getModel();
  
!     if (model.isPressed() && b.getPressedIcon() != null)
!       i = b.getPressedIcon();
  
!     else if (model.isRollover())
!       {
!         if (b.isSelected() && b.getRolloverSelectedIcon() != null)
!           i = b.getRolloverSelectedIcon();
!         else if (b.getRolloverIcon() != null)
!           i = b.getRolloverIcon();
!       }    
  
!     else if (b.isSelected())
!       {
!         if (b.isEnabled() && b.getSelectedIcon() != null)
!           i = b.getSelectedIcon();
!         else if (b.getDisabledSelectedIcon() != null)
!           i = b.getDisabledSelectedIcon();
!       }
  
!     else if (! b.isEnabled() && b.getDisabledIcon() != null)
!       i = b.getDisabledIcon();
  
!     return i;
!   }
  
!   /**
!    * Paint the component, which is an {@link AbstractButton}, according to 
!    * its current state.
!    *
!    * @param g The graphics context to paint with
!    * @param c The component to paint the state of
!    */
!   public void paint(Graphics g, JComponent c)
!   {      
!     AbstractButton b = (AbstractButton) c;
  
!     Rectangle tr = new Rectangle();
!     Rectangle ir = new Rectangle();
!     Rectangle vr = new Rectangle();
!     Rectangle br = new Rectangle();
! 
!     Font f = c.getFont();
! 
!     g.setFont(f);
! 
!     SwingUtilities.calculateInnerArea(b, br);
!     SwingUtilities.calculateInsetArea(br, b.getMargin(), vr);    
!     String text = SwingUtilities.layoutCompoundLabel(c, g.getFontMetrics(f), 
!                                                      b.getText(),
!                                                      currentIcon(b),
!                                                      b.getVerticalAlignment(), 
!                                                      b.getHorizontalAlignment(),
!                                                      b.getVerticalTextPosition(), 
!                                                      b.getHorizontalTextPosition(),
!                                                      vr, ir, tr, 
!                                                      b.getIconTextGap() 
!                                                      + defaultTextShiftOffset);
!     
!     if ((b.getModel().isArmed() && b.getModel().isPressed()) 
!         || b.isSelected())
!       paintButtonPressed(g, b);
!     else
!       paintButtonNormal(g, br, c);
! 	
!     paintIcon(g, c, ir);
!     if (text != null)
!       paintText(g, b, tr, text);
!     paintFocus(g, b, vr, tr, ir);
!   }
! 
!   /**
!    * Paint any focus decoration this {@link JComponent} might have.  The
!    * component, which in this case will be an {@link AbstractButton},
!    * should only have focus decoration painted if it has the focus, and its
!    * "focusPainted" property is <code>true</code>.
!    *
!    * @param g Graphics context to paint with
!    * @param b Button to paint the focus of
!    * @param vr Visible rectangle, the area in which to paint
!    * @param tr Text rectangle, contained in visible rectangle
!    * @param ir Icon rectangle, contained in visible rectangle
!    *
!    * @see AbstractButton.isFocusPainted()
!    * @see JComponent.hasFocus()
!    */
!   protected void paintFocus(Graphics g, AbstractButton b, Rectangle vr,
!                             Rectangle tr, Rectangle ir)
!   {
!     if (b.hasFocus() && b.isFocusPainted())
!       {
!         Color saved_color = g.getColor();
!         g.setColor(focusColor);
!         Rectangle focusRect = ir.union(tr);
!         g.drawRect(focusRect.x, focusRect.y,
!                    focusRect.width, focusRect.height);
!         g.setColor(saved_color);
!       }
!   }
! 
!   /**
!    * Paint the icon for this component. Depending on the state of the
!    * component and the availability of the button's various icon
!    * properties, this might mean painting one of several different icons.
!    *
!    * @param g Graphics context to paint with
!    * @param c Component to paint the icon of
!    * @param iconRect Rectangle in which the icon should be painted
!    */
!   protected void paintIcon(Graphics g, JComponent c, Rectangle iconRect)
!   {
!     AbstractButton b = (AbstractButton) c;
!     Icon i = currentIcon(b);
  
+     if (i != null)
+       i.paintIcon(c, g, iconRect.x, iconRect.y);
+   }
  
+   /**
+    * Paints the background area of an {@link AbstractButton} in the pressed
+    * state.  This means filling the supplied area with the {@link
+    * pressedBackgroundColor}.
+    *
+    * @param g The graphics context to paint with
+    * @param b The button to paint the state of
+    */
+   protected void paintButtonPressed(Graphics g, AbstractButton b)
+   {
+     if (b.isContentAreaFilled())
+       {
+ 	Rectangle area = new Rectangle();
+ 	SwingUtilities.calculateInnerArea(b, area);
+         g.setColor(b.getBackground().darker());
+         g.fillRect(area.x, area.y, area.width, area.height);
+       }
+   }
+     
+   /**
+    * Paints the background area of an {@link AbstractButton} in the normal,
+    * non-pressed state.  This means filling the supplied area with the
+    * {@link normalBackgroundColor}.
+    *
+    * @param g The graphics context to paint with
+    * @param area The area in which to paint
+    * @param b The component to paint the state of
+    */
+   private void paintButtonNormal(Graphics g, Rectangle area, JComponent b)
+   {
+     if (((AbstractButton)b).isContentAreaFilled() && b.isOpaque())
+       {
+         g.setColor(b.getBackground());
+         g.fillRect(area.x, area.y, area.width, area.height);
+       }
+   }
+     
+   /**
+    * Paints the "text" property of an {@link AbstractButton}, using the
+    * {@link textColor} color.
+    *
+    * @param g The graphics context to paint with
+    * @param c The component to paint the state of
+    * @param textRect The area in which to paint the text
+    * @param text The text to paint
+    */
+   protected void paintText(Graphics g, JComponent c, Rectangle textRect,
+                            String text) 
+   {	
+     paintText(g, (AbstractButton) c, textRect, text);
+   }
  
+   /**
+    * Paints the "text" property of an {@link AbstractButton}, using the
+    * {@link textColor} color.
+    *
+    * @param g The graphics context to paint with
+    * @param b The button to paint the state of
+    * @param textRect The area in which to paint the text
+    * @param text The text to paint
+    *
+    * @since 1.4
+    */
+   protected void paintText(Graphics g, AbstractButton b, Rectangle textRect,
+ 			   String text)
+   {
+     Font f = b.getFont();
+     g.setFont(f);
+     FontMetrics fm = g.getFontMetrics(f);
  
+     if (b.isEnabled())
+       {
+ 	g.setColor(b.getForeground());
+ 	g.drawString(text, textRect.x, textRect.y + fm.getAscent());
+       }
+     else
+       {
+ 	g.setColor(b.getBackground().brighter());
+ 	g.drawString(text, textRect.x, textRect.y + fm.getAscent());
+ 	g.setColor(b.getBackground().darker());
+ 	g.drawString(text, textRect.x + 1, textRect.y + fm.getAscent() + 1);
+       }
+   } 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java	Wed Feb 16 20:02:51 2005
***************
*** 0 ****
--- 1,104 ----
+ /* BasicCheckBoxMenuItemUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.event.MouseEvent;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JMenuItem;
+ import javax.swing.MenuElement;
+ import javax.swing.MenuSelectionManager;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.ComponentUI;
+ 
+ /**
+  * DOCUMENT ME!
+  */
+ public class BasicCheckBoxMenuItemUI extends BasicMenuItemUI
+ {
+   /**
+    * Factory method to create a BasicCheckBoxMenuItemUI for the given {@link
+    * JComponent}, which should be a JCheckBoxMenuItem
+    *
+    * @param c The {@link JComponent} a UI is being created for.
+    *
+    * @return A BasicCheckBoxMenuItemUI for the {@link JComponent}.
+    */
+   public static ComponentUI createUI(final JComponent c)
+   {
+     return new BasicCheckBoxMenuItemUI();
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @return $returnType$ DOCUMENT ME!
+    */
+   protected String getPropertyPrefix()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method installs the defaults that are defined in  the Basic look and
+    * feel for this JRadioButtonMenuItem
+    */
+   protected void installDefaults()
+   {
+     super.installDefaults();
+ 
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+     checkIcon = defaults.getIcon("CheckBoxMenuItem.checkIcon");
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @param item DOCUMENT ME!
+    * @param e DOCUMENT ME!
+    * @param path DOCUMENT ME!
+    * @param manager DOCUMENT ME!
+    */
+   public void processMouseEvent(JMenuItem item, MouseEvent e,
+                                 MenuElement[] path,
+                                 MenuSelectionManager manager)
+   {
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicCheckBoxUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicCheckBoxUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicCheckBoxUI.java	Sat Jan 10 21:59:30 2004
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicCheckBoxUI.java	Thu Feb 12 00:17:24 2004
*************** exception statement from your version. *
*** 38,119 ****
  
  package javax.swing.plaf.basic;
  
! import java.awt.Component;
! import java.awt.Dimension;
! import java.awt.Graphics;
! import java.awt.Rectangle;
! import javax.swing.AbstractButton;
  import javax.swing.JComponent;
  import javax.swing.plaf.ComponentUI;
  
  public class BasicCheckBoxUI extends BasicRadioButtonUI
  {  
!     public static ComponentUI createUI(final JComponent c)  {
! 	return new BasicCheckBoxUI();
!     }
! 
!     
!     public void installUI(final JComponent c)  {
! 	super.installUI(c);
!     }
!     
!     public Dimension getPreferredSize(JComponent c) 
!     {
! 	AbstractButton b = (AbstractButton)c;
! 	Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, gap);
! 	//System.out.println("^^^^^^^^^^^^^^^^^^^^^^   BASIC-PREF="+d + ",T="+b.text);
! 	return d;
!     }
!     
!     protected void paintFocus(Graphics g, 
! 			      JComponent c,
! 			      Rectangle vr,
! 			      Rectangle tr,
! 			      Rectangle ir)
!     {
!     }
! 
!     protected void paintIcon(Graphics g, 
! 			     JComponent c, 
! 			     Rectangle iconRect)
!     {
!     }
! 
!     protected void paintButtonPressed(Graphics g,
! 				      JComponent b)
!     {
! 	Dimension size = b.getSize();
! 	
! 	g.setColor(pressedBackgroundColor);
! 	g.fillRect(1,1,size.width-2, size.height-2);                
! 
!     }
!     
!     protected void paintButtonNormal(Graphics g,
! 				     JComponent b)
!     {
! 	Dimension size = b.getSize();
! 	
! 	g.setColor(normalBackgroundColor);
! 	g.fillRect(1,1,size.width-2, size.height-2);                
  
!     }
!     protected void paintText(Graphics g,
! 			     JComponent c,
! 			     Rectangle textRect,
! 			     String text) 
!     {
! 	//        AbstractButton b = (AbstractButton) c;
! 	
! 	//	System.out.println("drawing string: " + text + ", at:" + textRect);
! 	
! 	g.setColor(textColor);
! 	BasicGraphicsUtils.drawString(g,
! 				      text, 
! 				      0,
! 				      textRect.x, 
! 				      textRect.y);
!     } 
  }
  
  
--- 38,65 ----
  
  package javax.swing.plaf.basic;
  
! import javax.swing.Icon;
  import javax.swing.JComponent;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
  import javax.swing.plaf.ComponentUI;
  
  public class BasicCheckBoxUI extends BasicRadioButtonUI
  {  
!   
!   public static ComponentUI createUI(final JComponent c)  {
!     return new BasicCheckBoxUI();
!   }
  
!   public Icon getDefaultIcon()
!   {
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!     return defaults.getIcon("CheckBox.icon");
!   }
!   
!   public void installUI(final JComponent c)  {
!     super.installUI(c);
!   }  
  }
  
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicColorChooserUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicColorChooserUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicColorChooserUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicColorChooserUI.java	Tue Nov 30 23:59:03 2004
***************
*** 0 ****
--- 1,334 ----
+ /* BasicColorChooserUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.Container;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.JColorChooser;
+ import javax.swing.JComponent;
+ import javax.swing.JPanel;
+ import javax.swing.JTabbedPane;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.colorchooser.AbstractColorChooserPanel;
+ import javax.swing.colorchooser.ColorChooserComponentFactory;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ import javax.swing.plaf.ColorChooserUI;
+ import javax.swing.plaf.ComponentUI;
+ 
+ /**
+  * This is the UI Class for the JColorChooser in the Basic Look and Feel.
+  */
+ public class BasicColorChooserUI extends ColorChooserUI
+ {
+   /**
+    * This helper class handles property changes from the JColorChooser.
+    */
+   public class PropertyHandler implements PropertyChangeListener
+   {
+     /**
+      * This method is called when any of the properties of the JColorChooser
+      * change.
+      *
+      * @param e The PropertyChangeEvent.
+      */
+     public void propertyChange(PropertyChangeEvent e)
+     {
+       if (e.getPropertyName() == JColorChooser.CHOOSER_PANELS_PROPERTY)
+ 	makeTabs(chooser.getChooserPanels());
+       else if (e.getPropertyName() == JColorChooser.PREVIEW_PANEL_PROPERTY)
+ 	updatePreviewPanel(chooser.getPreviewPanel());
+       else if (e.getPropertyName() == JColorChooser.SELECTION_MODEL_PROPERTY)
+ 	((AbstractColorChooserPanel) pane.getSelectedComponent())
+ 	.updateChooser();
+ 
+       chooser.repaint();
+     }
+   }
+ 
+   /**
+    * This is a helper class that listens to the Model of the JColorChooser for
+    * color change events so it can update the preview panel.
+    */
+   private class PreviewListener implements ChangeListener
+   {
+     /**
+      * This method is called whenever the JColorChooser's color changes.
+      *
+      * @param e The ChangeEvent.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       if (pane != null)
+         {
+ 	  AbstractColorChooserPanel panel = (AbstractColorChooserPanel) pane
+ 	                                    .getSelectedComponent();
+ 	  if (panel != null)
+ 	    panel.updateChooser();
+         }
+       chooser.repaint();
+     }
+   }
+ 
+   /**
+    * This helper class listens to the JTabbedPane that is used for tab
+    * changes.
+    */
+   private class TabPaneListener implements ChangeListener
+   {
+     /**
+      * This method is called whenever a different tab is selected in the
+      * JTabbedPane.
+      *
+      * @param e The ChangeEvent.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       // Need to do this because we don't update all the tabs when they're not
+       // visible, so they are not informed of new colors when they're hidden.
+       AbstractColorChooserPanel comp = (AbstractColorChooserPanel) pane
+                                        .getSelectedComponent();
+       comp.updateChooser();
+     }
+   }
+ 
+   /** An array of default choosers to use in the JColorChooser. */
+   protected AbstractColorChooserPanel[] defaultChoosers;
+ 
+   /** The listener for the preview panel. */
+   protected ChangeListener previewListener;
+ 
+   /** The PropertyChangeListener for the JColorChooser. */
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /** The JColorChooser. */
+   private JColorChooser chooser;
+ 
+   /** The JTabbedPane that is used. */
+   private JTabbedPane pane;
+ 
+   /** The Container that holds the preview panel. */
+   private Container prevContainer;
+ 
+   /**
+    * Creates a new BasicColorChooserUI object.
+    */
+   public BasicColorChooserUI()
+   {
+     super();
+   }
+ 
+   /**
+    * This method creates a new UI Component for the given JComponent.
+    *
+    * @param c The JComponent to create an UI for.
+    *
+    * @return A new BasicColorChooserUI.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicColorChooserUI();
+   }
+ 
+   /**
+    * This method creates the default chooser panels for the JColorChooser.
+    *
+    * @return The default chooser panels.
+    */
+   protected AbstractColorChooserPanel[] createDefaultChoosers()
+   {
+     return ColorChooserComponentFactory.getDefaultChooserPanels();
+   }
+ 
+   /**
+    * This method installs the UI Component for the given JComponent.
+    *
+    * @param c The JComponent to install this UI for.
+    */
+   public void installUI(JComponent c)
+   {
+     if (c instanceof JColorChooser)
+       {
+ 	chooser = (JColorChooser) c;
+ 	chooser.setLayout(new BorderLayout());
+ 
+ 	// Do this first, so we avoid doing work for property change events.
+ 	defaultChoosers = createDefaultChoosers();
+ 	chooser.setChooserPanels(defaultChoosers);
+ 	pane = new JTabbedPane();
+ 
+ 	pane.addChangeListener(new ChangeListener()
+ 	    {
+ 	      public void stateChanged(ChangeEvent e)
+ 	      {
+ 		pane.repaint();
+ 	      }
+ 	    });
+ 
+ 	makeTabs(defaultChoosers);
+ 
+ 	chooser.add(pane, BorderLayout.NORTH);
+ 
+ 	installPreviewPanel();
+ 
+ 	installDefaults();
+ 	installListeners();
+       }
+   }
+ 
+   /**
+    * This method adds tabs to the JTabbedPane for the chooserPanels defined in
+    * the JColorChooser.
+    *
+    * @param panels The Panels that need tabs to be made for them.
+    */
+   private void makeTabs(AbstractColorChooserPanel[] panels)
+   {
+     pane.removeAll();
+     for (int i = 0; i < panels.length; i++)
+       pane.addTab(panels[i].getDisplayName(), panels[i].getSmallDisplayIcon(),
+                   panels[i]);
+   }
+ 
+   /**
+    * This method uninstalls this UI for the given JComponent.
+    *
+    * @param c The JComponent that will have this UI removed.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallListeners();
+     uninstallDefaults();
+ 
+     pane = null;
+     chooser = null;
+   }
+ 
+   /**
+    * This method installs the preview panel for the JColorChooser.
+    */
+   protected void installPreviewPanel()
+   {
+     updatePreviewPanel(ColorChooserComponentFactory.getPreviewPanel());
+   }
+ 
+   /**
+    * This is a helper method that swaps the existing preview panel with the
+    * given panel.
+    *
+    * @param preview The new preview panel.
+    */
+   private void updatePreviewPanel(JComponent preview)
+   {
+     if (prevContainer == null)
+       {
+ 	prevContainer = new JPanel();
+ 	prevContainer.setLayout(new BorderLayout());
+ 	chooser.add(prevContainer, BorderLayout.CENTER);
+       }
+     prevContainer.removeAll();
+     prevContainer.add(preview, BorderLayout.CENTER);
+   }
+ 
+   /**
+    * This method installs the default properties given by the Basic Look and
+    * Feel.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     chooser.setFont(defaults.getFont("ColorChooser.font"));
+     chooser.setForeground(defaults.getColor("ColorChooser.foreground"));
+     chooser.setBackground(defaults.getColor("ColorChooser.background"));
+   }
+ 
+   /**
+    * This method uninstalls the default properties given by the Basic Look and
+    * Feel.
+    */
+   protected void uninstallDefaults()
+   {
+     chooser.setBackground(null);
+     chooser.setForeground(null);
+     chooser.setFont(null);
+   }
+ 
+   /**
+    * This method installs any listeners required for this UI to function.
+    */
+   protected void installListeners()
+   {
+     propertyChangeListener = createPropertyChangeListener();
+     previewListener = new PreviewListener();
+ 
+     chooser.addPropertyChangeListener(propertyChangeListener);
+     chooser.getSelectionModel().addChangeListener(previewListener);
+ 
+     pane.addChangeListener(new TabPaneListener());
+   }
+ 
+   /**
+    * This method creates the PropertyChangeListener used for listening to the
+    * JColorChooser.
+    *
+    * @return A PropertyChangeListener.
+    */
+   protected PropertyChangeListener createPropertyChangeListener()
+   {
+     return new PropertyHandler();
+   }
+ 
+   /**
+    * This method uninstalls any listeners that were previously installed by
+    * the UI.
+    */
+   protected void uninstallListeners()
+   {
+     chooser.removePropertyChangeListener(propertyChangeListener);
+     chooser.getSelectionModel().removeChangeListener(previewListener);
+ 
+     previewListener = null;
+     propertyChangeListener = null;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicComboBoxEditor.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicComboBoxEditor.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicComboBoxEditor.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicComboBoxEditor.java	Wed Feb 16 20:02:51 2005
***************
*** 0 ****
--- 1,170 ----
+ /* BasicComboBoxEditor.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Component;
+ import java.awt.event.ActionListener;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ 
+ import javax.swing.ComboBoxEditor;
+ import javax.swing.JTextField;
+ import javax.swing.border.EmptyBorder;
+ 
+ /**
+  * This is a component that is responsible for displaying/editting  selected
+  * item in comboBox. By default, the  JTextField is returned as
+  * BasicComboBoxEditor.
+  *
+  * @author Olga Rodimina
+  */
+ public class BasicComboBoxEditor extends Object implements ComboBoxEditor,
+                                                            FocusListener
+ {
+   protected JTextField editor;
+ 
+   /**
+    * Creates a new BasicComboBoxEditor object.
+    */
+   public BasicComboBoxEditor()
+   {
+     editor = new JTextField();
+     editor.setBorder(new EmptyBorder(1, 1, 1, 1));
+   }
+ 
+   /**
+    * This method returns textfield that will be used by the combo  box to
+    * display/edit currently selected item in the combo box.
+    *
+    * @return textfield that will be used by the combo box to  display/edit
+    *         currently selected item
+    */
+   public Component getEditorComponent()
+   {
+     return editor;
+   }
+ 
+   /**
+    * Sets item that should be editted when any editting operation is performed
+    * by the user. The value is always equal to the currently selected value
+    * in the combo box. Thus whenever a different value is selected from the
+    * combo box list then this method should be  called to change editting
+    * item to the new selected item.
+    *
+    * @param selectedItem item that is currently selected in the combo box
+    */
+   public void setItem(Object item)
+   {
+     editor.setText(item.toString());
+   }
+ 
+   /**
+    * This method returns item that is currently editable.
+    *
+    * @return item in the combo box that is currently editable
+    */
+   public Object getItem()
+   {
+     return editor.getText();
+   }
+ 
+   public void selectAll()
+   {
+     editor.selectAll();
+   }
+ 
+   /**
+    * This method is called when textfield gains focus. This will enable
+    * editing of the selected item.
+    *
+    * @param e the FocusEvent describing change in focus.
+    */
+   public void focusGained(FocusEvent e)
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * This method is called when textfield loses focus. If during this time any
+    * editting operation was performed by the user, then it will be cancelled
+    * and selected item will not be changed.
+    *
+    * @param e the FocusEvent describing change in focus
+    */
+   public void focusLost(FocusEvent e)
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * This method adds actionListener to the editor. If the user will edit
+    * currently selected item in the textfield and pressEnter, then action
+    * will be performed. The actionPerformed of this ActionListener should
+    * change the selected item of the comboBox to the newly editted  selected
+    * item.
+    *
+    * @param l the ActionListener responsible for changing selected item of the
+    *        combo box when it is editted by the user.
+    */
+   public void addActionListener(ActionListener l)
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * This method removes actionListener from the textfield.
+    *
+    * @param l the ActionListener to remove from the textfield.
+    */
+   public void removeActionListener(ActionListener l)
+   {
+     // FIXME: Need to implement
+   }
+ 
+   public static class UIResource extends BasicComboBoxEditor
+     implements javax.swing.plaf.UIResource
+   {
+     /**
+      * Creates a new UIResource object.
+      */
+     public UIResource()
+     {
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicComboBoxRenderer.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicComboBoxRenderer.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicComboBoxRenderer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicComboBoxRenderer.java	Wed Feb 16 20:02:51 2005
***************
*** 0 ****
--- 1,142 ----
+ /* BasicComboBoxRenderer.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.io.Serializable;
+ 
+ import javax.swing.JLabel;
+ import javax.swing.JList;
+ import javax.swing.ListCellRenderer;
+ import javax.swing.SwingConstants;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.border.Border;
+ import javax.swing.border.EmptyBorder;
+ 
+ /**
+  * This class is renderer for the combo box. 
+  *
+  * @author Olga Rodimina
+  */
+ public class BasicComboBoxRenderer extends JLabel implements ListCellRenderer,
+                                                              Serializable
+ {
+   /**
+    * This border is used whenever renderer doesn't have a focus.
+    */
+   protected static Border noFocusBorder = new EmptyBorder(0, 0, 0, 0);
+ 
+   /**
+    * Creates a new BasicComboBoxRenderer object.
+    */
+   public BasicComboBoxRenderer()
+   {
+     setHorizontalAlignment(SwingConstants.LEFT);
+   }
+ 
+   /**
+    * Returns preferredSize of the renderer
+    *
+    * @return preferredSize of the renderer
+    */
+   public Dimension getPreferredSize()
+   {
+     return super.getPreferredSize();
+   }
+ 
+   /**
+    * getListCellRendererComponent
+    *
+    * @param list List of items for which to the background and foreground
+    *        colors
+    * @param value object that should be rendered in the cell
+    * @param index index of the cell in the list of items.
+    * @param isSelected draw cell highlighted if isSelected is true
+    * @param cellHasFocus draw focus rectangle around cell if the cell has
+    *        focus
+    *
+    * @return Component that will be used to draw the desired cell.
+    */
+   public Component getListCellRendererComponent(JList list, Object value,
+                                                 int index, boolean isSelected,
+                                                 boolean cellHasFocus)
+   {
+     String s = value.toString();
+     setText(s);
+     setOpaque(true);
+ 
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     if (isSelected)
+       {
+ 	setBackground(list.getSelectionBackground());
+ 	setForeground(list.getSelectionForeground());
+       }
+     else
+       {
+ 	setBackground(list.getBackground());
+ 	setForeground(list.getForeground());
+       }
+ 
+     setEnabled(list.isEnabled());
+     setFont(list.getFont());
+ 
+     // Use focusCellHighlightBorder when renderer has focus and 
+     // noFocusBorder otherwise
+     if (cellHasFocus)
+       setBorder(UIManager.getBorder("List.focusCellHighlightBorder"));
+     else
+       setBorder(noFocusBorder);
+ 
+     return this;
+   }
+ 
+   public static class UIResource extends BasicComboBoxRenderer
+     implements javax.swing.plaf.UIResource
+   {
+     /**
+      * Creates a new UIResource object.
+      */
+     public UIResource()
+     {
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicComboBoxUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicComboBoxUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicComboBoxUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicComboBoxUI.java	Wed Feb 16 20:02:51 2005
***************
*** 0 ****
--- 1,1238 ----
+ /* BasicComboBoxUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.LayoutManager;
+ import java.awt.Rectangle;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.event.ItemEvent;
+ import java.awt.event.ItemListener;
+ import java.awt.event.KeyAdapter;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.KeyListener;
+ import java.awt.event.MouseAdapter;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.awt.event.MouseMotionListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.accessibility.Accessible;
+ import javax.swing.CellRendererPane;
+ import javax.swing.ComboBoxEditor;
+ import javax.swing.ComboBoxModel;
+ import javax.swing.JButton;
+ import javax.swing.JComboBox;
+ import javax.swing.JComponent;
+ import javax.swing.JList;
+ import javax.swing.ListCellRenderer;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.ListDataEvent;
+ import javax.swing.event.ListDataListener;
+ import javax.swing.plaf.ComboBoxUI;
+ import javax.swing.plaf.ComponentUI;
+ 
+ /**
+  * UI Delegate for JComboBox
+  *
+  * @author Olga Rodimina
+  * @author Robert Schuster
+  */
+ public class BasicComboBoxUI extends ComboBoxUI
+ {
+   /**
+    * This arrow button that is displayed in the rigth side of JComboBox. This
+    * button is used to hide and show combo box's list of items
+    */
+   protected JButton arrowButton;
+ 
+   /**
+    * The combo box for which this UI delegate is for
+    */
+   protected JComboBox comboBox;
+ 
+   /**
+    * Component that is responsible for displaying/editting  selected item of
+    * the combo box. By default JTextField is used as an editor for the
+    * JComboBox
+    */
+   protected Component editor;
+ 
+   /**
+    * Listener listening to focus events occuring in the JComboBox
+    */
+   protected FocusListener focusListener;
+ 
+   /**
+    * tells whether JComboBox currently has focus
+    */
+   protected boolean hasFocus;
+ 
+   /**
+    * Listener listening to item events fired by the JComboBox
+    */
+   protected ItemListener itemListener;
+ 
+   /**
+    * KeyListener listening to key events that occur while JComboBox has focus
+    */
+   protected KeyListener keyListener;
+ 
+   /**
+    * MouseListener listening to mouse events occuring in the combo box
+    */
+   private MouseListener mouseListener;
+ 
+   /**
+    * List used when rendering selected item of the combo box. The selection
+    * and foreground colors for combo box renderer  are configured from this
+    * list
+    */
+   protected JList listBox;
+ 
+   /**
+    * ListDataListener listening to JComboBox model
+    */
+   protected ListDataListener listDataListener;
+ 
+   /**
+    * Popup list containing combo box's menu items
+    */
+   protected ComboPopup popup;
+   protected KeyListener popupKeyListener;
+   protected MouseListener popupMouseListener;
+   protected MouseMotionListener popupMouseMotionListener;
+ 
+   /**
+    * Listener listening to changes in the bound properties of JComboBox
+    */
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /**
+    * Colors that are used to render selected item in the combo box.
+    */
+   private Color shadow;
+   private Color darkShadow;
+   private Color highlight;
+   private Color lightHighlight;
+ 
+   /* Size of the largest item in the comboBox */
+   private Dimension largestItemSize;
+ 
+   // It seems that JComboBox doesn't have a border set explicitely. So we just
+   // paint the border everytime combo box is displayed. 
+ 
+   /* border insets for this JComboBox*/
+   private static final Insets borderInsets = new Insets(2, 2, 2, 2);
+ 
+   // Width of the arrow button  
+   private static int arrowButtonWidth = 15;
+ 
+   // FIXME: This fields aren't used anywhere at this moment.
+   protected Dimension cachedMinimumSize;
+   protected CellRendererPane currentValuePane;
+   protected boolean isMinimumSizeDirty;
+ 
+   /**
+    * Creates a new BasicComboBoxUI object.
+    */
+   public BasicComboBoxUI()
+   {
+   }
+ 
+   /**
+    * Factory method to create a BasicComboBoxUI for the given {@link
+    * JComponent}, which should be a {@link JComboBox}.
+    *
+    * @param c The {@link JComponent} a UI is being created for.
+    *
+    * @return A BasicComboBoxUI for the {@link JComponent}.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicComboBoxUI();
+   }
+ 
+   /**
+    * This method installs the UI for the given JComponent.
+    *
+    * @param c The JComponent to install a UI for.
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+ 
+     if (c instanceof JComboBox)
+       {
+ 	comboBox = (JComboBox) c;
+ 	comboBox.setOpaque(true);
+ 	comboBox.setLayout(createLayoutManager());
+ 	installDefaults();
+ 	installComponents();
+ 	installListeners();
+ 	installKeyboardActions();
+       }
+   }
+ 
+   /**
+    * This method uninstalls the UI.
+    *
+    * @param c The JComponent that is having this UI removed.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallKeyboardActions();
+     uninstallListeners();
+     uninstallComponents();
+     uninstallDefaults();
+     comboBox = null;
+   }
+ 
+   /**
+    * This method installs the defaults that are defined in  the Basic look and
+    * feel for this {@link JComboBox}.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     comboBox.setBackground(defaults.getColor("ComboBox.background"));
+     comboBox.setFont(defaults.getFont("ComboBox.font"));
+     comboBox.setForeground(defaults.getColor("ComboBox.foreground"));
+ 
+     // Set default color that should be used to to render selected item
+     // of the combo box.
+     shadow = defaults.getColor("Button.shadow");
+     darkShadow = defaults.getColor("Button.darkShadow");
+     lightHighlight = defaults.getColor("Button.light");
+     highlight = defaults.getColor("Button.highlight");
+   }
+ 
+   /**
+    * This method creates and installs the listeners for this UI.
+    */
+   protected void installListeners()
+   {
+     // install combo box's listeners
+     propertyChangeListener = createPropertyChangeListener();
+     comboBox.addPropertyChangeListener(propertyChangeListener);
+ 
+     focusListener = createFocusListener();
+     comboBox.addFocusListener(focusListener);
+ 
+     itemListener = createItemListener();
+     comboBox.addItemListener(itemListener);
+ 
+     keyListener = createKeyListener();
+     comboBox.addKeyListener(keyListener);
+ 
+     mouseListener = createMouseListener();
+     comboBox.addMouseListener(mouseListener);
+ 
+     // install listeners that listen to combo box model
+     listDataListener = createListDataListener();
+     comboBox.getModel().addListDataListener(listDataListener);
+ 
+     configureArrowButton();
+   }
+ 
+   /**
+    * This method uninstalls the defaults and sets any objects created during
+    * install to null
+    */
+   protected void uninstallDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     comboBox.setBackground(null);
+     comboBox.setFont(null);
+     comboBox.setForeground(null);
+ 
+     shadow = null;
+     darkShadow = null;
+     lightHighlight = null;
+     highlight = null;
+   }
+ 
+   /**
+    * Detaches all the listeners we attached in {@link #installListeners}.
+    */
+   protected void uninstallListeners()
+   {
+     comboBox.removePropertyChangeListener(propertyChangeListener);
+     propertyChangeListener = null;
+ 
+     comboBox.removeFocusListener(focusListener);
+     focusListener = null;
+ 
+     comboBox.removeItemListener(itemListener);
+     itemListener = null;
+ 
+     comboBox.removeKeyListener(keyListener);
+     keyListener = null;
+ 
+     comboBox.removeMouseListener(mouseListener);
+     mouseListener = null;
+ 
+     comboBox.getModel().removeListDataListener(listDataListener);
+     listDataListener = null;
+ 
+     unconfigureArrowButton();
+   }
+ 
+   /**
+    * This method creates popup that will contain list of combo box's items
+    *
+    * @return popup containing list of combo box's items
+    */
+   protected ComboPopup createPopup()
+   {
+     return new BasicComboPopup(comboBox);
+   }
+ 
+   /**
+    * Creates KeyListener to listen to key events.
+    *
+    * @return KeyListener that listens to key events.
+    */
+   protected KeyListener createKeyListener()
+   {
+     return new KeyHandler();
+   }
+ 
+   /**
+    * This method create MouseListener that will listen to mouse event occuring
+    * in combo box.
+    *
+    * @return the MouseListener
+    */
+   private MouseListener createMouseListener()
+   {
+     return new MouseHandler();
+   }
+ 
+   /**
+    * This method create FocusListener that will listen to changes in this
+    * JComboBox's focus.
+    *
+    * @return theFocusListener
+    */
+   protected FocusListener createFocusListener()
+   {
+     return new FocusHandler();
+   }
+ 
+   /**
+    * This method create ListDataListener to listen to ComboBox's  data model
+    *
+    * @return ListDataListener
+    */
+   protected ListDataListener createListDataListener()
+   {
+     return new ListDataHandler();
+   }
+ 
+   /**
+    * This method creates ItemListener that will listen to to the changes in
+    * the JComboBox's selection.
+    *
+    * @return the ItemListener
+    */
+   protected ItemListener createItemListener()
+   {
+     return new ItemHandler();
+   }
+ 
+   /**
+    * This method creates PropertyChangeListener to listen to  the changes in
+    * the JComboBox's bound properties.
+    *
+    * @return the PropertyChangeListener
+    */
+   protected PropertyChangeListener createPropertyChangeListener()
+   {
+     return new PropertyChangeHandler();
+   }
+ 
+   /**
+    * This method returns layout manager for the combo box.
+    *
+    * @return layout manager for the combo box
+    */
+   protected LayoutManager createLayoutManager()
+   {
+     return new ComboBoxLayoutManager();
+   }
+ 
+   /**
+    * This method creates component that will be responsible for rendering the
+    * selected component in the combo box.
+    *
+    * @return render for the combo box
+    */
+   protected ListCellRenderer createRenderer()
+   {
+     return new BasicComboBoxRenderer();
+   }
+ 
+   /**
+    * Creates component that will be responsible for displaying/editting
+    * selected item in the combo box. This editor is used only when combo box
+    * is editable.
+    *
+    * @return component that will be responsible for  displaying/editting
+    *         selected item in the combo box.
+    */
+   protected ComboBoxEditor createEditor()
+   {
+     return new BasicComboBoxEditor();
+   }
+ 
+   /**
+    * This method installs components for this JComboBox. ArrowButton, main
+    * part of combo box (upper part) and  popup list of items are created and
+    * configured here.
+    */
+   protected void installComponents()
+   {
+     // create and install arrow button
+     arrowButton = createArrowButton();
+ 
+     comboBox.add(arrowButton);
+ 
+     // Set list that will be used by BasicComboBoxRender 
+     // in order to determine the right colors when rendering
+     listBox = new JList();
+ 
+     Color background = arrowButton.getBackground();
+     listBox.setBackground(background);
+     listBox.setSelectionBackground(background.darker());
+ 
+     Color foreground = arrowButton.getForeground();
+     listBox.setForeground(foreground);
+     listBox.setSelectionForeground(foreground);
+ 
+     // set editor and renderer for the combo box. Editor is used
+     // only if combo box becomes editable, otherwise renderer is used
+     // to paint the selected item; combobox is not editable by default. 
+     comboBox.setRenderer(createRenderer());
+ 
+     comboBox.setEditor(createEditor());
+     editor = comboBox.getEditor().getEditorComponent();
+ 
+     // create drop down list of items
+     popup = createPopup();
+ 
+     comboBox.revalidate();
+   }
+ 
+   /**
+    * This method uninstalls components from this JComboBox
+    */
+   protected void uninstallComponents()
+   {
+     // uninstall arrow button
+     unconfigureArrowButton();
+     comboBox.remove(arrowButton);
+     arrowButton = null;
+ 
+     listBox = null;
+     popup = null;
+ 
+     comboBox.setRenderer(null);
+ 
+     comboBox.setEditor(null);
+     editor = null;
+   }
+ 
+   /**
+    * This method adds editor to the combo box
+    */
+   public void addEditor()
+   {
+     comboBox.add(editor);
+   }
+ 
+   /**
+    * This method removes editor from the combo box
+    */
+   public void removeEditor()
+   {
+     comboBox.remove(editor);
+   }
+ 
+   /**
+    * This method configures editor for this combo box.
+    */
+   protected void configureEditor()
+   {
+     // FIXME: Need to implement. Set font and add listeners.
+   }
+ 
+   /**
+    * This method removes all the listeners for the editor.
+    */
+   protected void unconfigureEditor()
+   {
+     // FIXME: Need to implement    
+   }
+ 
+   /**
+    * This method adds listeners to the arrow button part of the combo box.
+    */
+   public void configureArrowButton()
+   {
+     arrowButton.addMouseListener(mouseListener);
+   }
+ 
+   /**
+    * This method removes listeners from the arrow button part of the combo
+    * box.
+    */
+   public void unconfigureArrowButton()
+   {
+     arrowButton.removeMouseListener(mouseListener);
+   }
+ 
+   /**
+    * This method create arrow button for this JComboBox. Arrow button is
+    * responsible for displaying / hiding drop down list of items  when it is
+    * clicked.
+    *
+    * @return JButton arrow button for this JComboBox.
+    */
+   protected JButton createArrowButton()
+   {
+     return new BasicArrowButton(BasicArrowButton.SOUTH);
+   }
+ 
+   /**
+    * This method checks if popup part of the combo box is visible on the
+    * screen
+    *
+    * @param c The JComboBox to check
+    *
+    * @return true if popup part of the JComboBox is visible and false
+    *         otherwise.
+    */
+   public boolean isPopupVisible(JComboBox c)
+   {
+     return popup.isVisible();
+   }
+ 
+   /**
+    * Displays/Hides JComboBox's list of items on the screen.
+    *
+    * @param c The combo box, for which list of items should be
+    *        displayed/hidden
+    * @param v true if show popup part of the jcomboBox and false to hide.
+    */
+   public void setPopupVisible(JComboBox c, boolean v)
+   {
+     if (v)
+       popup.show();
+     else
+       popup.hide();
+   }
+ 
+   /**
+    * JComboBox is focus traversable if it is editable and not otherwise.
+    *
+    * @param c combo box for which to check whether it is focus traversable
+    *
+    * @return true if focus tranversable and false otherwise
+    */
+   public boolean isFocusTraversable(JComboBox c)
+   {
+     if (comboBox.isEditable())
+       return true;
+ 
+     return false;
+   }
+ 
+   /**
+    * Paints given menu item using specified graphics context
+    *
+    * @param g The graphics context used to paint this combo box
+    * @param c comboBox which needs to be painted.
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     if (c instanceof JComboBox)
+       {
+ 	JComboBox cb = (JComboBox) c;
+ 
+ 	paintBorder(g, comboBox.getBounds(), hasFocus);
+ 
+ 	Rectangle rect = rectangleForCurrentValue();
+ 	paintCurrentValueBackground(g, rect, hasFocus);
+ 	paintCurrentValue(g, rect, hasFocus);
+       }
+   }
+ 
+   private void paintBorder(Graphics g, Rectangle bounds, boolean hasFocus)
+   {
+     int x = 0;
+     int y = 0;
+     int width = bounds.width;
+     int height = bounds.height;
+ 
+     Color oldColor = g.getColor();
+ 
+     if (! arrowButton.getModel().isPressed())
+       BasicGraphicsUtils.drawEtchedRect(g, x, y, width, height, Color.gray,
+                                         Color.white, Color.gray, Color.white);
+     else
+       {
+ 	g.setColor(darkShadow);
+ 	g.drawRect(x, y, width, height);
+ 	g.setColor(shadow);
+ 	g.drawRect(x + 1, y + 1, width - 3, height - 3);
+       }
+     g.setColor(oldColor);
+   }
+ 
+   /**
+    * Returns preferred size for the given menu item.
+    *
+    * @param c comboBox for which to get preferred size
+    *
+    * @return $Dimension$ preferred size for the given combo box
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     // return null to indicate that combo box's layout will determin its
+     // preferred size
+     return null;
+   }
+ 
+   /**
+    * This method returns the minimum size for this {@link JComboBox} for this
+    * look and feel.
+    *
+    * @param c The {@link JComponent} to find the minimum size for.
+    *
+    * @return The dimensions of the minimum size.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns the maximum size for this {@link JComboBox} for this
+    * look and feel.
+    *
+    * @param c The {@link JComponent} to find the maximum size for
+    *
+    * @return The dimensions of the minimum size.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return null;
+   }
+ 
+   public int getAccessibleChildrenCount(JComponent c)
+   {
+     // FIXME: Need to implement
+     return 0;
+   }
+ 
+   public Accessible getAccessibleChild(JComponent c, int i)
+   {
+     // FIXME: Need to implement
+     return null;
+   }
+ 
+   /**
+    * Returns true if the specified key is a navigation key and false otherwise
+    *
+    * @param keyCode a key for which to check whether it is navigation key or
+    *        not.
+    *
+    * @return true if the specified key is a navigation key and false otherwis
+    */
+   protected boolean isNavigationKey(int keyCode)
+   {
+     return false;
+   }
+ 
+   /**
+    * This method selects next possible item relative to the current selection
+    * to be next selected item in the combo box.
+    */
+   protected void selectNextPossibleValue()
+   {
+     int index = comboBox.getSelectedIndex();
+     if (index != comboBox.getItemCount() - 1)
+       comboBox.setSelectedIndex(index + 1);
+   }
+ 
+   /**
+    * This method selects previous item relative to current selection to be
+    * next selected item.
+    */
+   protected void selectPreviousPossibleValue()
+   {
+     int index = comboBox.getSelectedIndex();
+     if (index != 0)
+       comboBox.setSelectedIndex(index - 1);
+   }
+ 
+   /**
+    * This method displays combo box popup if the popup is not currently shown
+    * on the screen and hides it if it is  currently shown
+    */
+   protected void toggleOpenClose()
+   {
+     setPopupVisible(comboBox, ! isPopupVisible(comboBox));
+   }
+ 
+   /**
+    * This method returns bounds in which comboBox's selected Item will be
+    * displayed
+    *
+    * @return rectangle bounds in which comboBox's selected Item will be
+    *         displayed
+    */
+   protected Rectangle rectangleForCurrentValue()
+   {
+     Rectangle cbBounds = comboBox.getBounds();
+ 
+     // Subtract width or the arrow button and border insets	    
+     Rectangle rectForCurrentValue = new Rectangle(cbBounds.x
+                                                   + borderInsets.left,
+                                                   cbBounds.y
+                                                   + borderInsets.top,
+                                                   cbBounds.width
+                                                   - arrowButtonWidth
+                                                   - borderInsets.left
+                                                   - borderInsets.right,
+                                                   cbBounds.height
+                                                   - borderInsets.top
+                                                   - borderInsets.bottom);
+ 
+     return rectForCurrentValue;
+   }
+ 
+   /**
+    * This method returns insets of the current border.
+    *
+    * @return Insets representing space between combo box and its border
+    */
+   protected Insets getInsets()
+   {
+     return new Insets(0, 0, 0, 0);
+   }
+ 
+   /**
+    * This method paints currently selected value in the main part of the combo
+    * box (part without popup).
+    *
+    * @param g graphics context
+    * @param bounds Rectangle representing the size of the area in which
+    *        selected item should be drawn
+    * @param hasFocus true if combo box has focus and false otherwise
+    */
+   public void paintCurrentValue(Graphics g, Rectangle bounds, boolean hasFocus)
+   {
+     if (! comboBox.isEditable())
+       {
+ 	Object currentValue = comboBox.getSelectedItem();
+ 	boolean isPressed = arrowButton.getModel().isPressed();
+ 
+ 	/* Gets the component to be drawn for the current value.
+ 	 * If there is currently no selected item we will take an empty
+ 	 * String as replacement.
+ 	 */
+ 	Component comp = comboBox.getRenderer()
+ 	                             .getListCellRendererComponent(listBox,
+ 	                                                           (currentValue != null ? currentValue : ""),
+ 	                                                           -1,
+ 	                                                           isPressed,
+ 	                                                           hasFocus);
+ 	if (! comboBox.isEnabled())
+ 	      comp.setEnabled(false);
+ 
+ 	g.translate(borderInsets.left, borderInsets.top);
+ 	    comp.setBounds(0, 0, bounds.width, bounds.height);
+ 	    comp.paint(g);
+ 	    g.translate(-borderInsets.left, -borderInsets.top);
+ 	    
+ 	comboBox.revalidate();
+       }
+     else
+       comboBox.getEditor().setItem(comboBox.getSelectedItem());
+   }
+ 
+   /**
+    * This method paints background of part of the combo box, where currently
+    * selected value is displayed. If the combo box has focus this method
+    * should also paint focus rectangle around the combo box.
+    *
+    * @param g graphics context
+    * @param bounds Rectangle representing the size of the largest item  in the
+    *        comboBox
+    * @param hasFocus true if combo box has fox and false otherwise
+    */
+   public void paintCurrentValueBackground(Graphics g, Rectangle bounds,
+                                           boolean hasFocus)
+   {
+     // background is painted by renderer, so it seems that nothing
+     // should be done here.
+   }
+ 
+   /**
+    * Returns default size for the combo box that doesn't contain any elements
+    * in it
+    *
+    * @return Default size of the combo box with no elements in it.
+    */
+   protected Dimension getDefaultSize()
+   {
+     return new Dimension(6, 17);
+   }
+ 
+   /**
+    * Returns size of the largest item in the combo box. This size will be the
+    * size of the combo box, not including the arrowButton.
+    *
+    * @return dimensions of the largest item in the combo box.
+    */
+   protected Dimension getLargestItemSize()
+   {
+     ComboBoxModel model = comboBox.getModel();
+     int numItems = model.getSize();
+ 
+     // if combo box doesn't have any items then simply
+     // return its default size
+     if (numItems == 0)
+       {
+ 	largestItemSize = getDefaultSize();
+ 	return largestItemSize;
+       }
+ 
+     Dimension size = new Dimension(0, 0);
+ 
+     // ComboBox's display size should be equal to the 
+     // size of the largest item in the combo box. 
+     ListCellRenderer renderer = comboBox.getRenderer();
+ 
+     for (int i = 0; i < numItems; i++)
+       {
+ 	Object item = model.getElementAt(i);
+ 	String s = item.toString();
+ 	Component comp = renderer.getListCellRendererComponent(listBox, item,
+ 	                                                       -1, false, false);
+ 
+ 	if (comp.getPreferredSize().getWidth() > size.getWidth())
+ 	  size = comp.getPreferredSize();
+       }
+ 
+     largestItemSize = size;
+     return largestItemSize;
+   }
+ 
+   /**
+    * This method installs the keyboard actions for the JComboBox as specified
+    * by the look and feel.
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: Need to implement.
+   }
+ 
+   /**
+    * This method uninstalls the keyboard actions for the JComboBox there were
+    * installed by in {@link #installListeners}.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: Need to implement.
+   }
+ 
+   /**
+    * This class is Layout Manager for this combo box.
+    */
+   public class ComboBoxLayoutManager extends Object implements LayoutManager
+   {
+     /**
+      * Creates a new ComboBoxLayoutManager object.
+      */
+     public ComboBoxLayoutManager()
+     {
+     }
+ 
+     public void addLayoutComponent(String name, Component comp)
+     {
+       // Do nothing
+     }
+ 
+     public void removeLayoutComponent(Component comp)
+     {
+       // Do nothing
+     }
+ 
+     /**
+      * Returns preferred layout size of the JComboBox.
+      *
+      * @param parent Container for which preferred size should be calculated
+      *
+      * @return preferred size for the given container
+      */
+     public Dimension preferredLayoutSize(Container parent)
+     {
+       Dimension d = new Dimension(0, 0);
+ 
+       if (largestItemSize == null)
+ 	largestItemSize = getLargestItemSize();
+ 
+       // add size for the area that will display selected item
+       d.width += largestItemSize.getWidth();
+       d.height += largestItemSize.getHeight();
+ 
+       // add size of the arrow button
+       d.width += arrowButtonWidth;
+ 
+       // add width and height of the border
+       d.width += borderInsets.left + borderInsets.right;
+       d.height += borderInsets.left + borderInsets.right;
+ 
+       // Add combo box's insets 	
+       Insets insets = parent.getInsets();
+       d.width += insets.left + insets.right;
+       d.width += insets.left + insets.right;
+ 
+       return d;
+     }
+ 
+     public Dimension minimumLayoutSize(Container parent)
+     {
+       return preferredLayoutSize(parent);
+     }
+ 
+     /**
+      * This method layouts out the components in the container.  It puts arrow
+      * button right end part of the comboBox. If the comboBox is editable
+      * then editor is placed to the left of arrow  button, starting from the
+      * beginning.
+      *
+      * @param parent Container that should be layed out.
+      */
+     public void layoutContainer(Container parent)
+     {
+       // Position editor component to the left of arrow button if combo box is 
+       // editable
+       int editorWidth = comboBox.getBounds().width - arrowButtonWidth - 2;
+ 
+       if (comboBox.isEditable())
+ 	editor.setBounds(borderInsets.left, borderInsets.top, editorWidth,
+ 	                 comboBox.getBounds().height - borderInsets.left
+ 	                 - borderInsets.top);
+ 
+       arrowButton.setBounds(editorWidth, 2, arrowButtonWidth,
+                             comboBox.getBounds().height - 4);
+       comboBox.revalidate();
+     }
+   }
+ 
+   /**
+    * This class handles focus changes occuring in the combo box. This class is
+    * responsible for repainting combo box whenever focus is gained or lost
+    * and also for hiding popup list of items whenever combo box loses its
+    * focus.
+    */
+   public class FocusHandler extends Object implements FocusListener
+   {
+     /**
+      * Creates a new FocusHandler object.
+      */
+     public FocusHandler()
+     {
+     }
+ 
+     /**
+      * This mehtod is invoked when combo box gains focus. It repaints main
+      * part of combo box  accordingally.
+      *
+      * @param e the FocusEvent
+      */
+     public void focusGained(FocusEvent e)
+     {
+       hasFocus = true;
+       comboBox.repaint();
+     }
+ 
+     /**
+      * This method is invoked when combo box loses focus It repaint main part
+      * of combo box accordingally and  hides popup list of items.
+      *
+      * @param e the FocusEvent
+      */
+     public void focusLost(FocusEvent e)
+     {
+       hasFocus = false;
+       comboBox.repaint();
+       popup.hide();
+     }
+   }
+ 
+   /**
+    * This class handles ItemEvent fired by the JComboBox when its selected
+    * item changes.
+    */
+   public class ItemHandler extends Object implements ItemListener
+   {
+     /**
+      * Creates a new ItemHandler object.
+      */
+     public ItemHandler()
+     {
+     }
+ 
+     /**
+      * This method is invoked when selected item becomes deselected or when
+      * new item becomes selected.
+      *
+      * @param e the ItemEvent representing item's state change.
+      */
+     public void itemStateChanged(ItemEvent e)
+     {
+       comboBox.repaint();
+     }
+   }
+ 
+   /**
+    * KeyHandler handles key events occuring while JComboBox has focus.
+    */
+   public class KeyHandler extends KeyAdapter
+   {
+     public KeyHandler()
+     {
+     }
+ 
+     /*
+      * This method is invoked whenever key is pressed while JComboBox is in
+      * focus.
+      */
+     public void keyPressed(KeyEvent e)
+     {
+       // FIXME: This method calls JComboBox.selectWithKeyChar if the key that was 
+       // pressed is not a navigation key. 
+     }
+   }
+ 
+   /**
+    * This class handles to the changes occuring in the JComboBox's data model
+    */
+   public class ListDataHandler extends Object implements ListDataListener
+   {
+     /**
+      * Creates a new ListDataHandler object.
+      */
+     public ListDataHandler()
+     {
+     }
+ 
+     /**
+      * This method is invoked content's of JComboBox's data model  are changed
+      *
+      * @param e ListDataEvent describing the change.
+      */
+     public void contentsChanged(ListDataEvent e)
+     {
+       // if the item is selected or deselected
+     }
+ 
+     /**
+      * This method is invoked when items were added to the JComboBox's data
+      * model.
+      *
+      * @param e ListDataEvent describing the change.
+      */
+     public void intervalAdded(ListDataEvent e)
+     {
+       // must determine if the size of the combo box should change
+       int start = e.getIndex0();
+       int end = e.getIndex1();
+ 
+       ComboBoxModel model = comboBox.getModel();
+       ListCellRenderer renderer = comboBox.getRenderer();
+ 
+       if (largestItemSize == null)
+ 	largestItemSize = new Dimension(0, 0);
+ 
+       for (int i = start - 1; i < end; i++)
+         {
+ 	  Object item = model.getElementAt(i);
+ 	  Component comp = renderer.getListCellRendererComponent(new JList(),
+ 	                                                         item, -1,
+ 	                                                         false, false);
+ 	  if (comp.getPreferredSize().getWidth() > largestItemSize.getWidth())
+ 	    largestItemSize = comp.getPreferredSize();
+         }
+     }
+ 
+     /**
+      * This method is invoked when items were removed from the JComboBox's
+      * data model.
+      *
+      * @param e ListDataEvent describing the change.
+      */
+     public void intervalRemoved(ListDataEvent e)
+     {
+       // recalculate display size of the JComboBox.
+       largestItemSize = getLargestItemSize();
+       comboBox.repaint();
+     }
+   }
+ 
+   /**
+    * This class handles PropertyChangeEvents fired by JComboBox.
+    */
+   public class PropertyChangeHandler extends Object
+     implements PropertyChangeListener
+   {
+     public PropertyChangeHandler()
+     {
+     }
+ 
+     /**
+      * This method is invoked whenever bound property of JComboBox changes.
+      */
+     public void propertyChange(PropertyChangeEvent e)
+     {
+       if (e.getPropertyName().equals("enabled"))
+         {
+ 	  arrowButton.setEnabled(comboBox.isEnabled());
+ 
+ 	  if (comboBox.isEditable())
+ 	    comboBox.getEditor().getEditorComponent().setEnabled(comboBox
+ 	                                                         .isEnabled());
+         }
+       else if (e.getPropertyName().equals("editable"))
+         {
+ 	  if (comboBox.isEditable())
+ 	    {
+ 	      configureEditor();
+ 	      addEditor();
+ 	    }
+ 	  else
+ 	    {
+ 	      unconfigureEditor();
+ 	      removeEditor();
+ 	    }
+ 
+ 	  comboBox.revalidate();
+ 	  comboBox.repaint();
+         }
+       else if (e.getPropertyName().equals("dataModel"))
+         {
+ 	  // remove ListDataListener from old model and add it to new model
+ 	  ComboBoxModel oldModel = (ComboBoxModel) e.getOldValue();
+ 	  if (oldModel != null)
+ 	    oldModel.removeListDataListener(listDataListener);
+ 
+ 	  if ((ComboBoxModel) e.getNewValue() != null)
+ 	    comboBox.getModel().addListDataListener(listDataListener);
+         }
+ 
+       // FIXME: Need to handle changes in other bound properties.	
+     }
+   }
+ 
+   /**
+    * MouseHandler listens to mouse events occuring in the combo box. This
+    * class is responsible for repainting this JComboBox whenever the mouse is
+    * being pressed or released over it.
+    */
+   private class MouseHandler extends MouseAdapter
+   {
+     /**
+      * This method is invoked when mouse is pressed over the combo box. It
+      * repaints the combo box accordinglly
+      *
+      * @param e the MouseEvent
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       if (comboBox.isEnabled())
+         {
+ 	  if (e.getSource() instanceof JComboBox)
+ 	    {
+ 	      arrowButton.getModel().setPressed(true);
+ 	      arrowButton.getModel().setArmed(true);
+ 	    }
+ 
+ 	  comboBox.repaint();
+ 
+ 	  if (e.getSource() instanceof BasicArrowButton)
+ 	    toggleOpenClose();
+         }
+     }
+ 
+     /**
+      * This method is invoked when mouse is released over the combo box. It
+      * repaints the combo box accordinglly
+      *
+      * @param e the MouseEvent
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       if (comboBox.isEnabled())
+         {
+ 	  if (e.getSource() instanceof JComboBox)
+ 	    {
+ 	      arrowButton.getModel().setPressed(false);
+ 	      arrowButton.getModel().setArmed(false);
+ 	    }
+ 
+ 	  comboBox.repaint();
+         }
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicComboPopup.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicComboPopup.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicComboPopup.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicComboPopup.java	Wed Feb 16 20:02:51 2005
***************
*** 0 ****
--- 1,1055 ----
+ /* BasicComboPopup.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.event.ItemEvent;
+ import java.awt.event.ItemListener;
+ import java.awt.event.KeyAdapter;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.KeyListener;
+ import java.awt.event.MouseAdapter;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.awt.event.MouseMotionAdapter;
+ import java.awt.event.MouseMotionListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.ComboBoxModel;
+ import javax.swing.JComboBox;
+ import javax.swing.JLabel;
+ import javax.swing.JList;
+ import javax.swing.JPopupMenu;
+ import javax.swing.JScrollBar;
+ import javax.swing.JScrollPane;
+ import javax.swing.ListCellRenderer;
+ import javax.swing.ListSelectionModel;
+ import javax.swing.SwingConstants;
+ import javax.swing.SwingUtilities;
+ import javax.swing.Timer;
+ import javax.swing.event.ListDataEvent;
+ import javax.swing.event.ListDataListener;
+ import javax.swing.event.ListSelectionEvent;
+ import javax.swing.event.ListSelectionListener;
+ import javax.swing.event.PopupMenuEvent;
+ import javax.swing.event.PopupMenuListener;
+ 
+ /**
+  * UI Delegate for ComboPopup
+  *
+  * @author Olga Rodimina
+  */
+ public class BasicComboPopup extends JPopupMenu implements ComboPopup
+ {
+   /* Timer for autoscrolling */
+   protected Timer autoscrollTimer;
+ 
+   /** ComboBox associated with this popup */
+   protected JComboBox comboBox;
+ 
+   /** FIXME: Need to document */
+   protected boolean hasEntered;
+ 
+   /**
+    * Indicates whether the scroll bar located in popup menu with comboBox's
+    * list of items is currently autoscrolling. This happens when mouse event
+    * originated in the combo box and is dragged outside of its bounds
+    */
+   protected boolean isAutoScrolling;
+ 
+   /** ItemListener listening to the selection changes in the combo box */
+   protected ItemListener itemListener;
+ 
+   /** This listener is not used */
+   protected KeyListener keyListener;
+ 
+   /** JList which is used to display item is the combo box */
+   protected JList list;
+ 
+   /** This listener is not used */
+   protected ListDataListener listDataListener;
+ 
+   /**
+    * MouseListener listening to mouse events occuring in the  combo box's
+    * list.
+    */
+   protected MouseListener listMouseListener;
+ 
+   /**
+    * MouseMotionListener listening to mouse motion events occuring  in the
+    * combo box's list
+    */
+   protected MouseMotionListener listMouseMotionListener;
+ 
+   /** This listener is not used */
+   protected ListSelectionListener listSelectionListener;
+ 
+   /** MouseListener listening to mouse events occuring in the combo box */
+   protected MouseListener mouseListener;
+ 
+   /**
+    * MouseMotionListener listening to mouse motion events occuring in the
+    * combo box
+    */
+   protected MouseMotionListener mouseMotionListener;
+ 
+   /**
+    * PropertyChangeListener listening to changes occuring in the bound
+    * properties of the combo box
+    */
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /** direction for scrolling down list of combo box's items */
+   protected static final int SCROLL_DOWN = 1;
+ 
+   /** direction for scrolling up list of combo box's items */
+   protected static final int SCROLL_UP = 0;
+ 
+   /** Indicates auto scrolling direction */
+   protected int scrollDirection;
+ 
+   /** JScrollPane that contains list portion of the combo box */
+   protected JScrollPane scroller;
+ 
+   /** This field is not used */
+   protected boolean valueIsAdjusting;
+ 
+   /**
+    * Creates a new BasicComboPopup object.
+    *
+    * @param comboBox the combo box with which this popup should be associated
+    */
+   public BasicComboPopup(JComboBox comboBox)
+   {
+     this.comboBox = comboBox;
+     installComboBoxListeners();
+     configurePopup();
+     setLightWeightPopupEnabled(comboBox.isLightWeightPopupEnabled());
+   }
+ 
+   /**
+    * This method displays drow down list of combo box items on the screen.
+    */
+   public void show()
+   {
+     Rectangle cbBounds = comboBox.getBounds();
+ 
+     // popup should have same width as the comboBox and should be hight anough
+     // to display number of rows equal to 'maximumRowCount' property
+     int popupHeight = getPopupHeightForRowCount(comboBox.getMaximumRowCount());
+ 
+     list.setPreferredSize(new Dimension(cbBounds.width, popupHeight));
+     super.setPopupSize(cbBounds.width, popupHeight);
+ 
+     // Highlight selected item in the combo box's drop down list
+     if (comboBox.getSelectedIndex() != -1)
+       list.setSelectedIndex(comboBox.getSelectedIndex());
+ 
+     //scroll scrollbar s.t. selected item is visible
+     JScrollBar scrollbar = scroller.getVerticalScrollBar();
+     int selectedIndex = comboBox.getSelectedIndex();
+     if (selectedIndex > comboBox.getMaximumRowCount())
+       scrollbar.setValue(getPopupHeightForRowCount(selectedIndex));
+ 
+     // location specified is relative to comboBox
+     super.show(comboBox, 0, cbBounds.height);
+   }
+ 
+   /**
+    * This method hides drop down list of items
+    */
+   public void hide()
+   {
+     super.setVisible(false);
+   }
+ 
+   /**
+    * Return list cointaining JComboBox's items
+    *
+    * @return list cointaining JComboBox's items
+    */
+   public JList getList()
+   {
+     return list;
+   }
+ 
+   /**
+    * Returns MouseListener that is listening to mouse events occuring in the
+    * combo box.
+    *
+    * @return MouseListener
+    */
+   public MouseListener getMouseListener()
+   {
+     return mouseListener;
+   }
+ 
+   /**
+    * Returns MouseMotionListener that is listening to mouse  motion events
+    * occuring in the combo box.
+    *
+    * @return MouseMotionListener
+    */
+   public MouseMotionListener getMouseMotionListener()
+   {
+     return mouseMotionListener;
+   }
+ 
+   /**
+    * Returns KeyListener listening to key events occuring in the combo box.
+    * This method returns null because KeyHandler is not longer used.
+    *
+    * @return KeyListener
+    */
+   public KeyListener getKeyListener()
+   {
+     return keyListener;
+   }
+ 
+   /**
+    * This method uninstalls the UI for the  given JComponent.
+    */
+   public void uninstallingUI()
+   {
+     uninstallComboBoxModelListeners(comboBox.getModel());
+ 
+     uninstallListeners();
+     uninstallKeyboardActions();
+   }
+ 
+   /**
+    * This method uninstalls listeners that were listening to changes occuring
+    * in the comb box's data model
+    *
+    * @param model data model for the combo box from which to uninstall
+    *        listeners
+    */
+   protected void uninstallComboBoxModelListeners(ComboBoxModel model)
+   {
+     model.removeListDataListener(listDataListener);
+   }
+ 
+   /**
+    * This method uninstalls keyboard actions installed by the UI.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * This method fires PopupMenuEvent indicating that combo box's popup list
+    * of items will become visible
+    */
+   protected void firePopupMenuWillBecomeVisible()
+   {
+     PopupMenuListener[] ll = comboBox.getPopupMenuListeners();
+ 
+     for (int i = 0; i < ll.length; i++)
+       ll[i].popupMenuWillBecomeVisible(new PopupMenuEvent(comboBox));
+   }
+ 
+   /**
+    * This method fires PopupMenuEvent indicating that combo box's popup list
+    * of items will become invisible.
+    */
+   protected void firePopupMenuWillBecomeInvisible()
+   {
+     PopupMenuListener[] ll = comboBox.getPopupMenuListeners();
+ 
+     for (int i = 0; i < ll.length; i++)
+       ll[i].popupMenuWillBecomeInvisible(new PopupMenuEvent(comboBox));
+   }
+ 
+   /**
+    * This method fires PopupMenuEvent indicating that combo box's popup list
+    * of items was closed without selection.
+    */
+   protected void firePopupMenuCanceled()
+   {
+     PopupMenuListener[] ll = comboBox.getPopupMenuListeners();
+ 
+     for (int i = 0; i < ll.length; i++)
+       ll[i].popupMenuCanceled(new PopupMenuEvent(comboBox));
+   }
+ 
+   /**
+    * Creates MouseListener to listen to mouse events occuring in the combo
+    * box. Note that this listener doesn't listen to mouse events occuring in
+    * the popup portion of the combo box, it only listens to main combo box
+    * part.
+    *
+    * @return new MouseMotionListener that listens to mouse events occuring in
+    *         the combo box
+    */
+   protected MouseListener createMouseListener()
+   {
+     return new InvocationMouseHandler();
+   }
+ 
+   /**
+    * Create Mouse listener that listens to mouse dragging events occuring in
+    * the combo box. This listener is responsible for changing the selection
+    * in the combo box list to the component over which mouse is being
+    * currently dragged
+    *
+    * @return new MouseMotionListener that listens to mouse dragging events
+    *         occuring in the combo box
+    */
+   protected MouseMotionListener createMouseMotionListener()
+   {
+     return new InvocationMouseMotionHandler();
+   }
+ 
+   /**
+    * KeyListener created in this method is not used anymore.
+    *
+    * @return KeyListener that does nothing
+    */
+   protected KeyListener createKeyListener()
+   {
+     return new InvocationKeyHandler();
+   }
+ 
+   /**
+    * ListSelectionListener created in this method is not used anymore
+    *
+    * @return ListSelectionListener that does nothing
+    */
+   protected ListSelectionListener createListSelectionListener()
+   {
+     return new ListSelectionHandler();
+   }
+ 
+   /**
+    * Creates ListDataListener. This method returns null, because
+    * ListDataHandler class is obsolete and is no longer used.
+    *
+    * @return null
+    */
+   protected ListDataListener createListDataListener()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method creates ListMouseListener to listen to mouse events occuring
+    * in the combo box's item list.
+    *
+    * @return MouseListener to listen to mouse events occuring in the combo
+    *         box's items list.
+    */
+   protected MouseListener createListMouseListener()
+   {
+     return new ListMouseHandler();
+   }
+ 
+   /**
+    * Creates ListMouseMotionlistener to listen to mouse motion events occuring
+    * in the combo box's list. This listener is responsible for highlighting
+    * items in the list when mouse is moved over them.
+    *
+    * @return MouseMotionListener that handles mouse motion events occuring in
+    *         the list of the combo box.
+    */
+   protected MouseMotionListener createListMouseMotionListener()
+   {
+     return new ListMouseMotionHandler();
+   }
+ 
+   /**
+    * Creates PropertyChangeListener to handle changes in the JComboBox's bound
+    * properties.
+    *
+    * @return PropertyChangeListener to handle changes in the JComboBox's bound
+    *         properties.
+    */
+   protected PropertyChangeListener createPropertyChangeListener()
+   {
+     return new PropertyChangeHandler();
+   }
+ 
+   /**
+    * Creates new ItemListener that will listen to ItemEvents occuring in the
+    * combo box.
+    *
+    * @return ItemListener to listen to ItemEvents occuring in the combo box.
+    */
+   protected ItemListener createItemListener()
+   {
+     return new ItemHandler();
+   }
+ 
+   /**
+    * Creates JList that will be used to display items in the combo box.
+    *
+    * @return JList that will be used to display items in the combo box.
+    */
+   protected JList createList()
+   {
+     JList l = new JList(comboBox.getModel());
+     l.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
+     return l;
+   }
+ 
+   /**
+    * This method configures the list of comboBox's items by setting  default
+    * properties and installing listeners.
+    */
+   protected void configureList()
+   {
+     list.setModel(comboBox.getModel());
+     list.setVisibleRowCount(comboBox.getMaximumRowCount());
+     installListListeners();
+   }
+ 
+   /**
+    * This method installs list listeners.
+    */
+   protected void installListListeners()
+   {
+     // mouse listener listening to mouse events occuring in the 
+     // combo box's list of items.
+     listMouseListener = createListMouseListener();
+     list.addMouseListener(listMouseListener);
+ 
+     // mouse listener listening to mouse motion events occuring in the
+     // combo box's list of items
+     listMouseMotionListener = createListMouseMotionListener();
+     list.addMouseMotionListener(listMouseMotionListener);
+ 
+     listSelectionListener = createListSelectionListener();
+     list.addListSelectionListener(listSelectionListener);
+   }
+ 
+   /**
+    * This method creates scroll pane that will contain the list of comboBox's
+    * items inside of it.
+    *
+    * @return JScrollPane
+    */
+   protected JScrollPane createScroller()
+   {
+     return new JScrollPane();
+   }
+ 
+   /**
+    * This method configures scroll pane to contain list of comboBox's  items
+    */
+   protected void configureScroller()
+   {
+     scroller.getViewport().setView(list);
+     scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+   }
+ 
+   /**
+    * This method configures popup menu that will be used to display Scrollpane
+    * with list of items inside of it.
+    */
+   protected void configurePopup()
+   {
+     // initialize list that will be used to display combo box's items
+     this.list = createList();
+     ((JLabel) list.getCellRenderer()).setHorizontalAlignment(SwingConstants.LEFT);
+     configureList();
+ 
+     // initialize scroller. Add list to the scroller.	
+     scroller = createScroller();
+     configureScroller();
+ 
+     // add scroller with list inside of it to JPopupMenu
+     super.add(scroller);
+   }
+ 
+   /*
+    * This method installs listeners that will listen to changes occuring
+    * in the combo box.
+    */
+   protected void installComboBoxListeners()
+   {
+     // mouse listener that listens to mouse event in combo box
+     mouseListener = createMouseListener();
+     comboBox.addMouseListener(mouseListener);
+ 
+     // mouse listener that listens to mouse dragging events in the combo box
+     mouseMotionListener = createMouseMotionListener();
+     comboBox.addMouseMotionListener(mouseMotionListener);
+ 
+     // item listener listenening to selection events in the combo box
+     itemListener = createItemListener();
+     comboBox.addItemListener(itemListener);
+ 
+     propertyChangeListener = createPropertyChangeListener();
+     comboBox.addPropertyChangeListener(propertyChangeListener);
+   }
+ 
+   /**
+    * This method installs listeners that will listen to changes occuring in
+    * the comb box's data model
+    *
+    * @param model data model for the combo box for which to install listeners
+    */
+   protected void installComboBoxModelListeners(ComboBoxModel model)
+   {
+     // list data listener to listen for ListDataEvents in combo box.
+     // This listener is now obsolete and nothing is done here
+     listDataListener = createListDataListener();
+     comboBox.getModel().addListDataListener(listDataListener);
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * This method always returns false to indicate that  items in the combo box
+    * list are not focus traversable.
+    *
+    * @return false
+    */
+   public boolean isFocusTraversable()
+   {
+     return false;
+   }
+ 
+   /**
+    * This method start scrolling combo box's list of items  either up or down
+    * depending on the specified 'direction'
+    *
+    * @param direction of the scrolling.
+    */
+   protected void startAutoScrolling(int direction)
+   {
+     // FIXME: add timer
+     isAutoScrolling = true;
+ 
+     if (direction == SCROLL_UP)
+       autoScrollUp();
+     else
+       autoScrollDown();
+   }
+ 
+   /**
+    * This method stops scrolling the combo box's list of items
+    */
+   protected void stopAutoScrolling()
+   {
+     // FIXME: add timer
+     isAutoScrolling = false;
+   }
+ 
+   /**
+    * This method scrolls up list of combo box's items up and highlights that
+    * just became visible.
+    */
+   protected void autoScrollUp()
+   {
+     // scroll up the scroll bar to make the item above visible    
+     JScrollBar scrollbar = scroller.getVerticalScrollBar();
+     int scrollToNext = list.getScrollableUnitIncrement(super.getBounds(),
+                                                        SwingConstants.VERTICAL,
+                                                        SCROLL_UP);
+ 
+     scrollbar.setValue(scrollbar.getValue() - scrollToNext);
+ 
+     // If we haven't reached the begging of the combo box's list of items, 
+     // then highlight next element above currently highlighted element	
+     if (list.getSelectedIndex() != 0)
+       list.setSelectedIndex(list.getSelectedIndex() - 1);
+   }
+ 
+   /**
+    * This method scrolls down list of combo box's and highlights item in the
+    * list that just became visible.
+    */
+   protected void autoScrollDown()
+   {
+     // scroll scrollbar down to make next item visible    
+     JScrollBar scrollbar = scroller.getVerticalScrollBar();
+     int scrollToNext = list.getScrollableUnitIncrement(super.getBounds(),
+                                                        SwingConstants.VERTICAL,
+                                                        SCROLL_DOWN);
+     scrollbar.setValue(scrollbar.getValue() + scrollToNext);
+ 
+     // If we haven't reached the end of the combo box's list of items
+     // then highlight next element below currently highlighted element
+     if (list.getSelectedIndex() + 1 != comboBox.getItemCount())
+       list.setSelectedIndex(list.getSelectedIndex() + 1);
+   }
+ 
+   /**
+    * This method helps to delegate focus to the right component in the
+    * JComboBox. If the comboBox is editable then focus is sent to
+    * ComboBoxEditor, otherwise it is delegated to JComboBox.
+    *
+    * @param e MouseEvent
+    */
+   protected void delegateFocus(MouseEvent e)
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * This method displays combo box popup if the popup is  not currently shown
+    * on the screen and hides it if it is  currently visible
+    */
+   protected void togglePopup()
+   {
+     if (BasicComboPopup.this.isVisible())
+       hide();
+     else
+       show();
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @param e DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   protected MouseEvent convertMouseEvent(MouseEvent e)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns required height of the popup such that number of items visible in
+    * it are equal to the maximum row count.  By default
+    * comboBox.maximumRowCount=8
+    *
+    * @param maxRowCount number of maximum visible rows in the  combo box's
+    *        popup list of items
+    *
+    * @return height of the popup required to fit number of items  equal to
+    *         JComboBox.maximumRowCount.
+    */
+   protected int getPopupHeightForRowCount(int maxRowCount)
+   {
+     int totalHeight = 0;
+     ListCellRenderer rend = list.getCellRenderer();
+ 
+     if (comboBox.getItemCount() < maxRowCount)
+       maxRowCount = comboBox.getItemCount();
+ 
+     for (int i = 0; i < maxRowCount; i++)
+       {
+ 	Component comp = rend.getListCellRendererComponent(list,
+ 	                                                   comboBox.getModel()
+ 	                                                           .getElementAt(i),
+ 	                                                   -1, false, false);
+ 	Dimension dim = comp.getPreferredSize();
+ 	totalHeight += dim.height;
+       }
+ 
+     return totalHeight;
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @param px DOCUMENT ME!
+    * @param py DOCUMENT ME!
+    * @param pw DOCUMENT ME!
+    * @param ph DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   protected Rectangle computePopupBounds(int px, int py, int pw, int ph)
+   {
+     return new Rectangle(px, py, pw, ph);
+   }
+ 
+   /**
+    * This method changes the selection in the list to the item over which  the
+    * mouse is currently located.
+    *
+    * @param anEvent MouseEvent
+    * @param shouldScroll DOCUMENT ME!
+    */
+   protected void updateListBoxSelectionForEvent(MouseEvent anEvent,
+                                                 boolean shouldScroll)
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * InvocationMouseHandler is a listener that listens to mouse events
+    * occuring in the combo box. Note that this listener doesn't listen to
+    * mouse events occuring in the popup portion of the combo box, it only
+    * listens to main combo box part(area that displays selected item).  This
+    * listener is responsible for showing and hiding popup portion  of the
+    * combo box.
+    */
+   protected class InvocationMouseHandler extends MouseAdapter
+   {
+     /**
+      * Creates a new InvocationMouseHandler object.
+      */
+     protected InvocationMouseHandler()
+     {
+     }
+ 
+     /**
+      * This method is invoked whenever mouse is being pressed over the main
+      * part of the combo box. This method will show popup if  the popup is
+      * not shown on the screen right now, and it will hide popup otherwise.
+      *
+      * @param e MouseEvent that should be handled
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       if (comboBox.isEnabled())
+ 	togglePopup();
+     }
+ 
+     /**
+      * This method is invoked whenever mouse event was originated in the combo
+      * box and released either in the combBox list of items or in the combo
+      * box itself.
+      *
+      * @param e MouseEvent that should be handled
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       // Get component over which mouse was released
+       Component src = (Component) e.getSource();
+       int x = e.getX();
+       int y = e.getY();
+       Component releasedComponent = SwingUtilities.getDeepestComponentAt(src,
+                                                                          x, y);
+ 
+       // if mouse was released inside the bounds of combo box then do nothing,
+       // Otherwise if mouse was released inside the list of combo box items
+       // then change selection and close popup
+       if (! (releasedComponent instanceof JComboBox))
+         {
+ 	  // List model contains the item over which mouse is released,
+ 	  // since it is updated every time the mouse is moved over a different
+ 	  // item in the list. Now that the mouse is released we need to
+ 	  // update model of the combo box as well. 	  
+ 	  comboBox.setSelectedIndex(list.getSelectedIndex());
+ 
+ 	  if (isAutoScrolling)
+ 	    stopAutoScrolling();
+ 	  hide();
+         }
+     }
+   }
+ 
+   /**
+    * InvocationMouseMotionListener is a mouse listener that listens to mouse
+    * dragging events occuring in the combo box.
+    */
+   protected class InvocationMouseMotionHandler extends MouseMotionAdapter
+   {
+     /**
+      * Creates a new InvocationMouseMotionHandler object.
+      */
+     protected InvocationMouseMotionHandler()
+     {
+     }
+ 
+     /**
+      * This method is responsible for highlighting item in the drop down list
+      * over which the mouse is currently being dragged.
+      */
+     public void mouseDragged(MouseEvent e)
+     {
+       // convert point of the drag event relative to combo box list component
+       // figure out over which list cell the mouse is currently being dragged
+       // and highlight the cell. The list model is changed but the change has 
+       // no effect on combo box's data model. The list model is changed so 
+       // that the appropriate item would be highlighted in the combo box's 
+       // list.
+       if (BasicComboPopup.this.isVisible())
+         {
+ 	  int cbHeight = (int) comboBox.getPreferredSize().getHeight();
+ 	  int popupHeight = BasicComboPopup.this.getSize().height;
+ 
+ 	  // if mouse is dragged inside the the combo box's items list.
+ 	  if (e.getY() > cbHeight && ! (e.getY() - cbHeight >= popupHeight))
+ 	    {
+ 	      int index = list.locationToIndex(new Point(e.getX(),
+ 	                                                 (int) (e.getY()
+ 	                                                 - cbHeight)));
+ 
+ 	      int firstVisibleIndex = list.getFirstVisibleIndex();
+ 
+ 	      // list.locationToIndex returns item's index that would
+ 	      // be located at the specified point if the first item that
+ 	      // is visible is item 0. However in the JComboBox it is not 
+ 	      // necessarily the case since list is contained in the 
+ 	      // JScrollPane so we need to adjust the index returned. 
+ 	      if (firstVisibleIndex != 0)
+ 		// FIXME: adjusted index here is off by one. I am adding one
+ 		// here to compensate for that. This should be
+ 		// index += firstVisibleIndex. Remove +1 once the bug is fixed.
+ 		index += firstVisibleIndex + 1;
+ 
+ 	      list.setSelectedIndex(index);
+ 	    }
+ 	  else
+ 	    {
+ 	      // if mouse is being dragged at the bottom of combo box's list 
+ 	      // of items or at the very top then scroll the list in the 
+ 	      // desired direction.
+ 	      boolean movingUP = e.getY() < cbHeight;
+ 	      boolean movingDown = e.getY() > cbHeight;
+ 
+ 	      if (movingUP)
+ 	        {
+ 		  scrollDirection = SCROLL_UP;
+ 		  startAutoScrolling(SCROLL_UP);
+ 	        }
+ 	      else if (movingDown)
+ 	        {
+ 		  scrollDirection = SCROLL_DOWN;
+ 		  startAutoScrolling(SCROLL_DOWN);
+ 	        }
+ 	    }
+         }
+     }
+   }
+ 
+   /**
+    * ItemHandler is an item listener that listens to selection events occuring
+    * in the combo box. FIXME: should specify here what it does when item is
+    * selected or deselected in the combo box list.
+    */
+   protected class ItemHandler extends Object implements ItemListener
+   {
+     /**
+      * Creates a new ItemHandler object.
+      */
+     protected ItemHandler()
+     {
+     }
+ 
+     /**
+      * This method responds to the selection events occuring in the combo box.
+      *
+      * @param e ItemEvent specifying the combo box's selection
+      */
+     public void itemStateChanged(ItemEvent e)
+     {
+     }
+   }
+ 
+   /**
+    * ListMouseHandler is a listener that listens to mouse events occuring in
+    * the combo box's list of items. This class is responsible for hiding
+    * popup portion of the combo box if the mouse is released inside the combo
+    * box's list.
+    */
+   protected class ListMouseHandler extends MouseAdapter
+   {
+     protected ListMouseHandler()
+     {
+     }
+ 
+     public void mousePressed(MouseEvent e)
+     {
+     }
+ 
+     public void mouseReleased(MouseEvent anEvent)
+     {
+       int index = list.locationToIndex(anEvent.getPoint());
+       comboBox.setSelectedIndex(index);
+       hide();
+     }
+   }
+ 
+   /**
+    * ListMouseMotionHandler listens to mouse motion events occuring in the
+    * combo box's list. This class is responsible for highlighting items in
+    * the list when mouse is moved over them
+    */
+   protected class ListMouseMotionHandler extends MouseMotionAdapter
+   {
+     protected ListMouseMotionHandler()
+     {
+     }
+ 
+     public void mouseMoved(MouseEvent anEvent)
+     {
+       // Highlight list cells over which the mouse is located. 
+       // This changes list model, but has no effect on combo box's data model
+       int index = list.locationToIndex(anEvent.getPoint());
+       list.setSelectedIndex(index);
+       list.repaint();
+     }
+   }
+ 
+   /**
+    * This class listens to changes occuring in the bound properties of the
+    * combo box
+    */
+   protected class PropertyChangeHandler extends Object
+     implements PropertyChangeListener
+   {
+     protected PropertyChangeHandler()
+     {
+     }
+ 
+     public void propertyChange(PropertyChangeEvent e)
+     {
+       if (e.getPropertyName().equals("renderer"))
+         {
+ 	  list.setCellRenderer((ListCellRenderer) e.getNewValue());
+ 	  revalidate();
+ 	  repaint();
+         }
+       if (e.getPropertyName().equals("dataModel"))
+         {
+ 	  list.setModel((ComboBoxModel) e.getNewValue());
+ 	  revalidate();
+ 	  repaint();
+         }
+     }
+   }
+ 
+   // ------ private helper methods --------------------
+ 
+   /**
+    * This method uninstalls listeners installed by the UI
+    */
+   private void uninstallListeners()
+   {
+     uninstallListListeners();
+     uninstallComboBoxListeners();
+     uninstallComboBoxModelListeners(comboBox.getModel());
+   }
+ 
+   /**
+    * This method uninstalls Listeners registered with combo boxes list of
+    * items
+    */
+   private void uninstallListListeners()
+   {
+     list.removeMouseListener(listMouseListener);
+     listMouseListener = null;
+ 
+     list.removeMouseMotionListener(listMouseMotionListener);
+     listMouseMotionListener = null;
+   }
+ 
+   /**
+    * This method uninstalls listeners listening to combo box  associated with
+    * this popup menu
+    */
+   private void uninstallComboBoxListeners()
+   {
+     comboBox.removeMouseListener(mouseListener);
+     mouseListener = null;
+ 
+     comboBox.removeMouseMotionListener(mouseMotionListener);
+     mouseMotionListener = null;
+ 
+     comboBox.removeItemListener(itemListener);
+     itemListener = null;
+ 
+     comboBox.removePropertyChangeListener(propertyChangeListener);
+     propertyChangeListener = null;
+   }
+ 
+   // --------------------------------------------------------------------
+   //  The following classes are here only for backwards API compatibility
+   //  They aren't used.
+   // --------------------------------------------------------------------
+ 
+   /**
+    * This class is not used any more.
+    */
+   public class ListDataHandler extends Object implements ListDataListener
+   {
+     public ListDataHandler()
+     {
+     }
+ 
+     public void contentsChanged(ListDataEvent e)
+     {
+     }
+ 
+     public void intervalAdded(ListDataEvent e)
+     {
+     }
+ 
+     public void intervalRemoved(ListDataEvent e)
+     {
+     }
+   }
+ 
+   /**
+    * This class is not used anymore
+    */
+   protected class ListSelectionHandler extends Object
+     implements ListSelectionListener
+   {
+     protected ListSelectionHandler()
+     {
+     }
+ 
+     public void valueChanged(ListSelectionEvent e)
+     {
+     }
+   }
+ 
+   /**
+    * This class is not used anymore
+    */
+   public class InvocationKeyHandler extends KeyAdapter
+   {
+     public InvocationKeyHandler()
+     {
+     }
+ 
+     public void keyReleased(KeyEvent e)
+     {
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicDefaults.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicDefaults.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicDefaults.java	Thu Nov 27 09:09:13 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicDefaults.java	Thu Jan  1 00:00:00 1970
***************
*** 1,126 ****
- /* BasicDefaults.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.swing.plaf.basic;
- 
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Graphics;
- import java.awt.Insets;
- import javax.swing.UIDefaults;
- import javax.swing.border.MatteBorder;
- 
- class BasicBorder extends MatteBorder
- {
-     static Color BtnPointClr = new Color( 180, 180, 180);
- 
- 	BasicBorder()
- 	{
- 		super(5,5,5,5, Color.black);
- 	}
- 	
- 	public void paintBorder(Component  c,
- 				Graphics  g, 
- 				int  x, 
- 				int  y, 
- 				int  width, 
- 				int  height)
- 	{
- 	    //    System.out.println("PAINT-------------------------------------------BORDER");
- 
- 	    if (g != null)
- 		{
- 		    g.setColor( BtnPointClr);
- 		    g.draw3DRect( 0, 0, width-1, height-1, true);
- 		}
- 	}
-  }
- 
- class PanelBorder extends MatteBorder
- {
-     PanelBorder()
-     {
- 	super(5,5,5,5, Color.black);
- 	}
- 	
- 	public void paintBorder(Component  c,
- 				Graphics  g, 
- 				int  x, 
- 				int  y, 
- 				int  width, 
- 				int  height)
- 	{
- 	    //    System.out.println("PAINT-------------------------------------------BORDER");
- 	    super.paintBorder(c, g, x, y, width, height);
- 	}
-  }
- 
- public class BasicDefaults extends UIDefaults
- {
-     public BasicDefaults()
-     {
- 	//	System.out.println("BasicDefaults !!!!!!!!!!!!!!!!!!!!!!!!!");
- 	put("JButton", "javax.swing.plaf.basic.BasicButtonUI");
- 	put("JLabel",  "javax.swing.plaf.basic.BasicLabelUI");
- 	
- 	put("JPanel",  "javax.swing.plaf.basic.BasicPanelUI");
- 	put("JCheckBox",  "javax.swing.plaf.basic.BasicCheckBoxUI");
- 	put("JRadioButton",  "javax.swing.plaf.basic.BasicRadioButtonUI");
- 	put("JToggleButton",  "javax.swing.plaf.basic.BasicToggleButtonUI");
- 	put("JOptionPane",  "javax.swing.plaf.basic.BasicOptionPaneUI");
- 	put("JList",  "javax.swing.plaf.basic.BasicListUI");
- 	put("JTree",  "javax.swing.plaf.basic.BasicTreeUI");
- 	put("JTextComponent",  "javax.swing.plaf.basic.BasicTextUI");
- 	put("JTabbedPane",  "javax.swing.plaf.basic.BasicTabbedPaneUI");
- 	put("JScrollPane", "javax.swing.plaf.basic.BasicScrollPaneUI");
- 	put("JViewport",   "javax.swing.plaf.basic.BasicViewportUI");
- 
- 	put("JButton.border",      "javax.swing.plaf.basic.BasicBorder");
- 	put("JPanel.border",       "javax.swing.plaf.basic.PanelBorder");
- 
- 	put("JToggleButton.border", "javax.swing.plaf.basic.PanelBorder");
- 	put("JCheckBox.border", "javax.swing.plaf.basic.PanelBorder");
- 	put("JRadioButton.border", "javax.swing.plaf.basic.PanelBorder");
- 
- 	put("AbstractUndoableEdit.undoText", "Undo");
- 	put("AbstractUndoableEdit.redoText", "Redo");
-     }
-     
- }
- 
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicDesktopIconUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicDesktopIconUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicDesktopIconUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicDesktopIconUI.java	Tue Nov 30 23:59:03 2004
***************
*** 0 ****
--- 1,589 ----
+ /* BasicDesktopIconUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.Rectangle;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.awt.event.MouseEvent;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyVetoException;
+ 
+ import javax.swing.Icon;
+ import javax.swing.JButton;
+ import javax.swing.JComponent;
+ import javax.swing.JDesktopPane;
+ import javax.swing.JInternalFrame;
+ import javax.swing.JInternalFrame.JDesktopIcon;
+ import javax.swing.SwingConstants;
+ import javax.swing.border.Border;
+ import javax.swing.event.MouseInputAdapter;
+ import javax.swing.event.MouseInputListener;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.DesktopIconUI;
+ 
+ /**
+  * This class acts as the UI delegate for JDesktopIcons for the Basic look and feel.
+  */
+ public class BasicDesktopIconUI extends DesktopIconUI
+ {
+   /**
+    * This helper class handles mouse events that occur on the JDesktopIcon.
+    */
+   public class MouseInputHandler extends MouseInputAdapter
+   {
+     /** The x offset from the MouseEvent coordinates to the top left corner. */
+     private transient int xOffset;
+ 
+     /** The y offset fromt he MouseEvent coordinates to the top left corner. */
+     private transient int yOffset;
+ 
+     /** A cached value of the JDesktopPane that parents this JDesktopIcon. */
+     private transient JDesktopPane pane;
+ 
+     /**
+      * This method is called when the mouse is dragged in the JDesktopIcon.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseDragged(MouseEvent e)
+     {
+       Rectangle b = desktopIcon.getBounds();
+ 
+       moveAndRepaint(desktopIcon, b.x + e.getX() - xOffset,
+                      b.y + e.getY() - yOffset, b.width, b.height);
+     }
+ 
+     /**
+      * This method is called when the mouse is moved in the JDesktopIcon.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseMoved(MouseEvent e)
+     {
+       // Nothing to do.
+     }
+ 
+     /**
+      * This method is called when the mouse is pressed in the JDesktopIcon.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       xOffset = e.getX();
+       yOffset = e.getY();
+       pane = frame.getDesktopPane();
+       if (pane != null)
+ 	pane.getDesktopManager().beginDraggingFrame(desktopIcon);
+     }
+ 
+     /**
+      * This method is called when the mouse is released in the JDesktopIcon.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       if (pane != null)
+ 	pane.getDesktopManager().endDraggingFrame(desktopIcon);
+       xOffset = 0;
+       yOffset = 0;
+     }
+ 
+     /**
+      * This method moves and repaints the JDesktopIcon to the given bounds.
+      *
+      * @param f The JComponent to move and repaint.
+      * @param newX The new x coordinate.
+      * @param newY The new y coordinate.
+      * @param newWidth The new width.
+      * @param newHeight The new height.
+      */
+     public void moveAndRepaint(JComponent f, int newX, int newY, int newWidth,
+                                int newHeight)
+     {
+       if (pane != null)
+ 	pane.getDesktopManager().dragFrame(f, newX, newY);
+       else
+ 	desktopIcon.setBounds(newX, newY, newWidth, newHeight);
+     }
+   }
+ 
+   /**
+    * This class acts as the border for the JDesktopIcon.
+    */
+   private class DesktopIconBorder implements Border
+   {
+     /** The left inset value. */
+     int left = 10;
+ 
+     /** The top inset value. */
+     int top = 4;
+ 
+     /** The right inset value. */
+     int right = top;
+ 
+     /** The bottom inset value. */
+     int bottom = top;
+ 
+     /**
+      * This method returns the insets of the border.
+      *
+      * @param c The Component to find border insets for.
+      *
+      * @return The border insets.
+      */
+     public Insets getBorderInsets(Component c)
+     {
+       return new Insets(top, left, bottom, right);
+     }
+ 
+     /**
+      * This method returns whether the border is opaque.
+      *
+      * @return Whether the border is opaque.
+      */
+     public boolean isBorderOpaque()
+     {
+       return true;
+     }
+ 
+     /**
+      * This method paints the border.
+      *
+      * @param c The Component the border is in.
+      * @param g The Graphics object to paint with.
+      * @param x The x coordinate of the Component.
+      * @param y The y coordinate of the Component.
+      * @param width The width of the Component.
+      * @param height The height of the Component.
+      */
+     public void paintBorder(Component c, Graphics g, int x, int y, int width,
+                             int height)
+     {
+       g.translate(x, y);
+       Color saved = g.getColor();
+ 
+       g.setColor(Color.LIGHT_GRAY);
+ 
+       g.fillRect(0, 0, left, height);
+       g.fillRect(0, 0, width, top);
+       g.fillRect(0, height - bottom, width, bottom);
+       g.fillRect(width - right, 0, right, height);
+ 
+       g.setColor(Color.BLACK);
+       g.drawRect(0, 0, width - 1, height - 1);
+ 
+       int fHeight = height / 4;
+       int hLeft = left / 2;
+ 
+       g.setColor(Color.BLACK);
+       g.fillRect(hLeft, fHeight, 2, 2);
+       g.fillRect(hLeft, fHeight * 2, 2, 2);
+       g.fillRect(hLeft, fHeight * 3, 2, 2);
+ 
+       g.setColor(saved);
+       g.translate(-x, -y);
+     }
+   }
+ 
+   /** The static width and height of the iconSize. */
+   private static final int iconSize = 16;
+ 
+   /**
+    * This class represents the default frame icon when none
+    * is supplied by the JInternalFrame.
+    */
+   static class InternalFrameDefaultMenuIcon implements Icon
+   {
+     /**
+      * This returns the icon height.
+      *
+      * @return The icon height.
+      */
+     public int getIconHeight()
+     {
+       return iconSize;
+     }
+ 
+     /**
+      * This returns the icon width.
+      *
+      * @return The icon width.
+      */
+     public int getIconWidth()
+     {
+       return iconSize;
+     }
+ 
+     /**
+      * This method paints the icon.
+      *
+      * @param c The Component this icon belongs to.
+      * @param g The Graphics object to paint with.
+      * @param x The x coordinate to paint at.
+      * @param y The y coordinate to paint at.
+      */
+     public void paintIcon(Component c, Graphics g, int x, int y)
+     {
+       g.translate(x, y);
+       Color saved = g.getColor();
+ 
+       g.setColor(Color.BLUE);
+       g.fillRect(0, 0, iconSize, (int) ((double) iconSize / 3) + 1);
+ 
+       g.setColor(Color.WHITE);
+       g.fillRect(0, (int) ((double) iconSize / 3), iconSize, iconSize * 5 / 6);
+ 
+       g.setColor(Color.GRAY);
+       g.drawRect(0, 0, iconSize, iconSize);
+ 
+       g.setColor(saved);
+       g.translate(-x, -y);
+     }
+   }
+ 
+   /** The default JDesktopIcon width. */
+   private static final int iconWidth = 160;
+ 
+   /** The default JDesktopIcon height */
+   private static final int iconHeight = 35;
+ 
+   /** The JDesktopIcon this UI delegate represents. */
+   protected JDesktopIcon desktopIcon;
+ 
+   /** The JInternalFrame associated with the JDesktopIcon. */
+   protected JInternalFrame frame;
+ 
+   /** The MouseListener responsible for reacting to MouseEvents on the JDesktopIcon. */
+   private transient MouseInputListener mouseHandler;
+ 
+   /** The Button in the JDesktopIcon responsible for deiconifying it. */
+   private transient BoundButton button;
+ 
+   /** The PropertyChangeListener listening to the JDesktopIcon. */
+   private transient PropertyChangeListener propertyHandler;
+   
+   /** The default icon used when no frame icon is given by the JInternalFrame. */
+   static Icon defaultIcon = new InternalFrameDefaultMenuIcon();
+ 
+   /**
+    * This is a helper class that is used in JDesktopIcon and gives the Button a predetermined size.
+    */
+   private class BoundButton extends JButton
+   {
+     /**
+      * Creates a new BoundButton object.
+      *
+      * @param title The title of the button.
+      */
+     public BoundButton(String title)
+     {
+       super(title);
+     }
+ 
+     /**
+      * This method returns a standard size (based on the defaults of the JDesktopIcon) and the insets.
+      *
+      * @return The preferred size of the JDesktopIcon.
+      */
+     public Dimension getPreferredSize()
+     {
+       Insets insets = desktopIcon.getInsets();
+       return new Dimension(iconWidth - insets.left - insets.right,
+                            iconHeight - insets.top - insets.bottom);
+     }
+ 
+     /**
+      * This method returns the minimum size of the button.
+      *
+      * @return The minimum size of the button.
+      */
+     public Dimension getMinimumSize()
+     {
+       return getPreferredSize();
+     }
+ 
+     /**
+      * This method returns the maximum size of the button.
+      *
+      * @return The maximum size of the button.
+      */
+     public Dimension getMaximumSize()
+     {
+       return getPreferredSize();
+     }
+   }
+ 
+   /**
+    * Creates a new BasicDesktopIconUI object.
+    */
+   public BasicDesktopIconUI()
+   {
+   }
+ 
+   /**
+    * This method creates a new BasicDesktopIconUI for the given JComponent.
+    *
+    * @param c The JComponent to create a UI for.
+    *
+    * @return A new BasicDesktopIconUI.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicDesktopIconUI();
+   }
+ 
+   /**
+    * This method installs the UI for the given JComponent.
+    *
+    * @param c The JComponent to install this UI for.
+    */
+   public void installUI(JComponent c)
+   {
+     if (c instanceof JDesktopIcon)
+       {
+ 	desktopIcon = (JDesktopIcon) c;
+ 	desktopIcon.setLayout(new BorderLayout());
+ 	frame = desktopIcon.getInternalFrame();
+ 
+ 	installDefaults();
+ 	installComponents();
+ 	installListeners();
+ 
+ 	desktopIcon.setOpaque(true);
+       }
+   }
+ 
+   /**
+    * This method uninstalls the UI for the given JComponent.
+    *
+    * @param c The JComponent to uninstall this UI for.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     desktopIcon.setOpaque(false);
+     
+     uninstallListeners();
+     uninstallComponents();
+     uninstallDefaults();
+     
+     frame = null;
+     desktopIcon.setLayout(null);
+     desktopIcon = null;
+   }
+ 
+   /**
+    * This method installs the necessary sub components for the JDesktopIcon.
+    */
+   protected void installComponents()
+   {
+     // Try to create a button based on what the frame's
+     // state is currently
+     button = new BoundButton(frame.getTitle());
+     button.setHorizontalAlignment(SwingConstants.LEFT);
+     button.setHorizontalTextPosition(SwingConstants.TRAILING);
+ 
+     Icon use = frame.getFrameIcon();
+     if (use == null)
+       use = defaultIcon;
+     button.setIcon(use);
+ 
+     desktopIcon.add(button, SwingConstants.CENTER);
+   }
+ 
+   /**
+    * This method uninstalls the sub components for the JDesktopIcon.
+    */
+   protected void uninstallComponents()
+   {
+     desktopIcon.remove(button);
+     
+     button = null;
+   }
+ 
+   /**
+    * This method installs the listeners needed by this UI.
+    */
+   protected void installListeners()
+   {
+     mouseHandler = createMouseInputListener();
+ 
+     desktopIcon.addMouseMotionListener(mouseHandler);
+     desktopIcon.addMouseListener(mouseHandler);
+ 
+     propertyHandler = new PropertyChangeListener()
+         {
+ 	  public void propertyChange(PropertyChangeEvent e)
+ 	  {
+ 	    if (e.getPropertyName().equals(JInternalFrame.TITLE_PROPERTY))
+ 	      button.setText(desktopIcon.getInternalFrame().getTitle());
+ 	    else if (e.getPropertyName().equals(JInternalFrame.FRAME_ICON_PROPERTY))
+ 	      {
+ 		Icon use = desktopIcon.getInternalFrame().getFrameIcon();
+ 		if (use == null)
+ 		  use = defaultIcon;
+ 		button.setIcon(use);
+ 	      }
+ 	    desktopIcon.revalidate();
+ 	    desktopIcon.repaint();
+ 	  }
+         };
+     frame.addPropertyChangeListener(propertyHandler);
+ 
+     button.addActionListener(new ActionListener()
+         {
+ 	  public void actionPerformed(ActionEvent e)
+ 	  {
+             deiconize();
+ 	  }
+         });
+   }
+ 
+   /**
+    * This method uninstalls the listeners needed by the UI.
+    */
+   protected void uninstallListeners()
+   {
+     // button is nulled so no need to remove it.
+     
+     frame.removePropertyChangeListener(propertyHandler);
+     propertyHandler = null;
+     
+     desktopIcon.removeMouseMotionListener(mouseHandler);
+     desktopIcon.removeMouseListener(mouseHandler);
+   }
+ 
+   /**
+    * This method installs the defaults for the JDesktopIcon.
+    */
+   protected void installDefaults()
+   {
+     // FIXME: Move border to defaults.
+     desktopIcon.setBorder(new DesktopIconBorder());  
+   }
+ 
+   /**
+    * This method uninstalls the defaults for the JDesktopIcon.
+    */
+   protected void uninstallDefaults()
+   {
+     desktopIcon.setBorder(null);
+   }
+ 
+   /**
+    * This method creates a new MouseInputListener for the JDesktopIcon.
+    *
+    * @return A new MouseInputListener.
+    */
+   protected MouseInputListener createMouseInputListener()
+   {
+     return new MouseInputHandler();
+   }
+ 
+   /**
+    * This method returns the preferred size for the given JComponent.
+    *
+    * @param c The JComponent to find a preferred size for.
+    *
+    * @return The preferred size.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     return new Dimension(iconWidth, iconHeight);
+   }
+ 
+   /**
+    * This method returns the minimum size for the given JComponent.
+    *
+    * @param c The JComponent to find a minimum size for.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the maximum size for the given JComponent.
+    *
+    * @param c The JComponent to find a maximum size for.
+    *
+    * @return The maximum size.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the insets of the given JComponent.
+    *
+    * @param c The JComponent to find insets for.
+    *
+    * @return The insets of the given JComponent.
+    */
+   public Insets getInsets(JComponent c)
+   {
+     return c.getInsets();
+   }
+ 
+   /**
+    * This method deiconizes the JInternalFrame associated with the JDesktopIcon.
+    */
+   public void deiconize() 
+   {
+     try
+     {
+       frame.setIcon(false);
+     }
+     catch (PropertyVetoException pve)
+     {
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicDesktopPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicDesktopPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicDesktopPaneUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicDesktopPaneUI.java	Tue Nov 30 23:59:03 2004
***************
*** 0 ****
--- 1,464 ----
+ /* BasicDesktopPaneUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Dimension;
+ import java.awt.event.ActionEvent;
+ import java.beans.PropertyVetoException;
+ 
+ import javax.swing.AbstractAction;
+ import javax.swing.DefaultDesktopManager;
+ import javax.swing.DesktopManager;
+ import javax.swing.JComponent;
+ import javax.swing.JDesktopPane;
+ import javax.swing.JInternalFrame;
+ import javax.swing.KeyStroke;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.DesktopPaneUI;
+ 
+ /**
+  * This class is the UI delegate for JDesktopPane for the Basic look and feel.
+  */
+ public class BasicDesktopPaneUI extends DesktopPaneUI
+ {
+   /**
+    * This helper class is used to handle key events that cause JInternalFrames
+    * to be closed.
+    */
+   protected class CloseAction extends AbstractAction
+   {
+     /**
+      * This method is called when the action is performed.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       if (desktop.getSelectedFrame() != null)
+         {
+ 	  try
+ 	    {
+ 	      desktop.getSelectedFrame().setClosed(true);
+ 	    }
+ 	  catch (PropertyVetoException pve)
+ 	    {
+ 	    }
+         }
+     }
+ 
+     /**
+      * This method returns whether the action is enabled.
+      *
+      * @return Whether the action is enabled.
+      */
+     public boolean isEnabled()
+     {
+       if (desktop.getSelectedFrame() != null)
+ 	return desktop.getSelectedFrame().isClosable();
+       return false;
+     }
+   }
+ 
+   /**
+    * This helper class is used to handle key events that cause JInternalFrames
+    * to be maximized.
+    */
+   protected class MaximizeAction extends AbstractAction
+   {
+     /**
+      * This method is called when the action is performed.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       if (desktop.getSelectedFrame() != null)
+         {
+ 	  try
+ 	    {
+ 	      desktop.getSelectedFrame().setMaximum(true);
+ 	    }
+ 	  catch (PropertyVetoException pve)
+ 	    {
+ 	    }
+         }
+     }
+ 
+     /**
+      * This method returns whether the action is enabled.
+      *
+      * @return Whether the action is enabled.
+      */
+     public boolean isEnabled()
+     {
+       if (desktop.getSelectedFrame() != null)
+ 	return desktop.getSelectedFrame().isMaximizable();
+       return false;
+     }
+   }
+ 
+   /**
+    * This helper class is used to handle key events that cause JInternalFrames
+    * to be minimized.
+    */
+   protected class MinimizeAction extends AbstractAction
+   {
+     /**
+      * This method is called when the action is performed.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       if (desktop.getSelectedFrame() != null)
+         {
+ 	  try
+ 	    {
+ 	      desktop.getSelectedFrame().setIcon(true);
+ 	    }
+ 	  catch (PropertyVetoException pve)
+ 	    {
+ 	    }
+         }
+     }
+ 
+     /**
+      * This method returns whether the action is enabled.
+      *
+      * @return Whether the action is enabled.
+      */
+     public boolean isEnabled()
+     {
+       if (desktop.getSelectedFrame() != null)
+ 	return desktop.getSelectedFrame().isIconifiable();
+       return false;
+     }
+   }
+ 
+   /**
+    * This helper class is used to handle key events that pass the SELECTED
+    * property to the next JInternalFrame in the JDesktopPane's list of
+    * children.
+    */
+   protected class NavigateAction extends AbstractAction
+   {
+     /**
+      * This method is called when the action is performed.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       // This is supposed to set the next selected frame. 
+       JInternalFrame[] frames = desktop.getAllFrames();
+       if (frames.length == 0)
+ 	return;
+ 
+       JInternalFrame sFrame = frames[0];
+       if (desktop.getSelectedFrame() != null)
+ 	sFrame = desktop.getSelectedFrame();
+ 
+       int i = 0;
+       for (; i < frames.length; i++)
+ 	if (frames[i] == sFrame)
+ 	  break;
+ 
+       // FIXME: Navigate actions go reverse too.	  
+       if (i == frames.length)
+ 	i = 0;
+ 
+       desktop.setSelectedFrame(frames[i]);
+     }
+ 
+     /**
+      * This method returns whether the action is enabled.
+      *
+      * @return Whether this action is enabled.
+      */
+     public boolean isEnabled()
+     {
+       // Always true.
+       return true;
+     }
+   }
+ 
+   /**
+    * This helper class is used to restore the JInternalFrame to its original
+    * size before maximizing or iconifying.
+    */
+   protected class OpenAction extends AbstractAction
+   {
+     /**
+      * This method is called when the action is performed.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       JInternalFrame frame = desktop.getSelectedFrame();
+       if (frame != null)
+         {
+ 	  try
+ 	    {
+ 	      if (frame.isIcon())
+ 		frame.setIcon(false);
+ 	      else if (frame.isMaximum())
+ 		frame.setMaximum(false);
+ 	    }
+ 	  catch (PropertyVetoException pve)
+ 	    {
+ 	    }
+         }
+     }
+ 
+     /**
+      * This method returns whether the action is enabled.
+      *
+      * @return Whether this action is enabled.
+      */
+     public boolean isEnabled()
+     {
+       // JInternalFrames are always restorable.
+       return true;
+     }
+   }
+ 
+   /**
+    * The KeyStroke associated with closing JInternalFrames.
+    * @deprecated
+    */
+   protected KeyStroke closeKey;
+ 
+   /**
+    * The KeyStroke associated with maximizing JInternalFrames.
+    * @deprecated
+    */
+   protected KeyStroke maximizeKey;
+ 
+   /**
+    * The KeyStroke associated with minimizing JInternalFrames.
+    * @deprecated
+    */
+   protected KeyStroke minimizeKey;
+ 
+   /**
+    * The KeyStroke associated with navigating (forward?) through
+    * JInternalFrames.
+    * @deprecated
+    */
+   protected KeyStroke navigateKey;
+ 
+   /**
+    * The KeyStroke associated with navigating (backward?) through
+    * JInternalFrames.
+    * @deprecated
+    */
+   protected KeyStroke navigateKey2;
+ 
+   /** The default desktop manager used with JDesktopPane. */
+   protected DesktopManager desktopManager;
+ 
+   /** The JDesktopPane this UI is used with. */
+   protected JDesktopPane desktop;
+ 
+   /**
+    * Creates a new BasicDesktopPaneUI object.
+    */
+   public BasicDesktopPaneUI()
+   {
+   }
+ 
+   /**
+    * This method creates a BasicDesktopPaneUI for the given JComponent.
+    *
+    * @param c The JComponent to create a UI for.
+    *
+    * @return A new BasicDesktopPaneUI.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicDesktopPaneUI();
+   }
+ 
+   /**
+    * This method returns the maximum size for the given JComponent.
+    *
+    * @param c The JComponent to find a maximum size for.
+    *
+    * @return The maximum size for the given JComponent.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the minimum size for the given JComponent.
+    *
+    * @param c The JComponent to find a minimum size for.
+    *
+    * @return The minimum size for the given JComponent.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the preferred size for the given JComponent.
+    *
+    * @param c The JComponent to find a preferred size for.
+    *
+    * @return The preferred size for the given JComponent.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     // return null because JDesktopPanes don't have preferred sizes.
+     return null;
+   }
+ 
+   /**
+    * This method installs the defaults for the JDesktopPane provided by the
+    * current look and feel.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     desktop.setBackground(defaults.getColor("Desktop.background"));
+   }
+ 
+   /**
+    * This method installs the desktop manager for the JDesktopPane.
+    */
+   protected void installDesktopManager()
+   {
+     desktopManager = new DefaultDesktopManager();
+     desktop.setDesktopManager(desktopManager);
+   }
+ 
+   /**
+    * This method installs the keyboard actions for the JDesktopPane.
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: create actions and keystrokes.
+     registerKeyboardAction();
+   }
+ 
+   /**
+    * This method installs the UI for the given JComponent.
+    *
+    * @param c The JComponent to install this UI for.
+    */
+   public void installUI(JComponent c)
+   {
+     if (c instanceof JDesktopPane)
+       {
+ 	desktop = (JDesktopPane) c;
+ 
+ 	installDefaults();
+ 	installDesktopManager();
+ 	installKeyboardActions();
+       }
+   }
+ 
+   /**
+    * This method registers the actions to the appropriate Action and Input
+    * maps.
+    */
+   protected void registerKeyboardAction()
+   {
+     // FIXME: Do the binding.
+     // XXX: the gtk windows tend to intercept a lot of the
+     // key events for themselves. must figure a way past that
+     // before binding
+   }
+ 
+   /**
+    * This method reverses the work done by the installDefaults method.
+    */
+   protected void uninstallDefaults()
+   {
+     desktop.setBackground(null);
+   }
+ 
+   /**
+    * This method reverses the work done by the installDesktopManager method.
+    */
+   protected void uninstallDesktopManager()
+   {
+     desktopManager = null;
+     desktop.setDesktopManager(null);
+   }
+ 
+   /**
+    * This method reverses the work done by the installKeyboardActions method.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     unregisterKeyboardActions();
+     // FIXME: null the actions and keystrokes.
+   }
+ 
+   /**
+    * This method reverses the work done by the registerKeyboardActions method.
+    */
+   protected void unregisterKeyboardActions()
+   {
+     // FIXME: unmap the keystrokes
+   }
+ 
+   /**
+    * This method uninstalls the UI for the given JComponent. It should reverse
+    * all the work done by the installUI method.
+    *
+    * @param c The JComponent to uninstall this UI for.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallKeyboardActions();
+     uninstallDesktopManager();
+     uninstallDefaults();
+ 
+     desktop = null;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicEditorPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicEditorPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicEditorPaneUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicEditorPaneUI.java	Wed Feb 16 20:02:52 2005
***************
*** 0 ****
--- 1,68 ----
+ /* BasicEditorPaneUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.text.Element;
+ import javax.swing.text.PlainView;
+ import javax.swing.text.View;
+ 
+ public class BasicEditorPaneUI extends BasicTextUI
+ {
+   public static ComponentUI createUI(JComponent comp)
+   {
+     return new BasicEditorPaneUI();
+   }
+ 
+   public BasicEditorPaneUI()
+   {
+     // Do nothing here.
+   }
+ 
+   public View create(Element elem)
+   {
+     return new PlainView(elem);
+   }
+ 
+   protected String getPropertyPrefix()
+   {
+     return "EditorPane";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java	Thu Sep  2 06:58:07 2004
***************
*** 0 ****
--- 1,62 ----
+ /* BasicFormattedTextFieldUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.plaf.ComponentUI;
+ 
+ /**
+  * @since 1.4
+  */
+ public class BasicFormattedTextFieldUI extends BasicTextFieldUI
+ {
+   public BasicFormattedTextFieldUI()
+   {
+   }
+ 
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicFormattedTextFieldUI();
+   }
+ 
+   protected String getPropertyPrefix()
+   {
+     return "FormattedTextField";
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java	Fri Aug  1 20:10:22 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java	Tue Nov 30 23:59:03 2004
***************
*** 1,5 ****
  /* BasicGraphicsUtils.java
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BasicGraphicsUtils.java
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Graphics;
*** 45,55 ****
  import java.awt.Graphics2D;
  import java.awt.Insets;
  import java.awt.Rectangle;
- 
  import java.awt.font.FontRenderContext;
  import java.awt.font.LineMetrics;
  import java.awt.font.TextLayout;
- 
  import java.awt.geom.Rectangle2D;
  
  import javax.swing.AbstractButton;
--- 45,53 ----
*************** public class BasicGraphicsUtils
*** 457,463 ****
  
      drawUnderline = (underlinedIndex >= 0) && (underlinedIndex < textLength);
  
!     if (!(g instanceof Graphics2D))
      {
        /* Fall-back. This is likely to produce garbage for any text
         * containing right-to-left (Hebrew or Arabic) characters, even
--- 455,463 ----
  
      drawUnderline = (underlinedIndex >= 0) && (underlinedIndex < textLength);
  
!     // FIXME: unfortunately pango and cairo can't agree on metrics
!     // so for the time being we continue to *not* use TextLayouts.
!     if (true || !(g instanceof Graphics2D))
      {
        /* Fall-back. This is likely to produce garbage for any text
         * containing right-to-left (Hebrew or Arabic) characters, even
*************** public class BasicGraphicsUtils
*** 595,605 ****
      Rectangle iconRect = new Rectangle();
      Rectangle textRect = new Rectangle();
      Insets insets = b.getInsets();
      
!     /* For determining the ideal size, do not assume a size restriction. */
!     viewRect = new Rectangle(0, 0,
!                              /* width */ Integer.MAX_VALUE,
!                              /* height */ Integer.MAX_VALUE);
  
       /* java.awt.Toolkit.getFontMetrics is deprecated. However, it
       * seems not obvious how to get to the correct FontMetrics object
--- 595,603 ----
      Rectangle iconRect = new Rectangle();
      Rectangle textRect = new Rectangle();
      Insets insets = b.getInsets();
+     Insets margin = b.getMargin();
      
!     viewRect = new Rectangle();
  
       /* java.awt.Toolkit.getFontMetrics is deprecated. However, it
       * seems not obvious how to get to the correct FontMetrics object
*************** public class BasicGraphicsUtils
*** 613,626 ****
        b.getToolkit().getFontMetrics(b.getFont()), // see comment above
        b.getText(),
        b.getIcon(),
!       b.getVerticalAlignment(),
        b.getHorizontalAlignment(),
        b.getVerticalTextPosition(),
        b.getHorizontalTextPosition(),
        viewRect, iconRect, textRect,
        textIconGap);
  
- 
      /*  +------------------------+       +------------------------+
       *  |                        |       |                        |
       *  | ICON                   |       | CONTENTCONTENTCONTENT  |
--- 611,623 ----
        b.getToolkit().getFontMetrics(b.getFont()), // see comment above
        b.getText(),
        b.getIcon(),
!       b.getVerticalAlignment(), 
        b.getHorizontalAlignment(),
        b.getVerticalTextPosition(),
        b.getHorizontalTextPosition(),
        viewRect, iconRect, textRect,
        textIconGap);
  
      /*  +------------------------+       +------------------------+
       *  |                        |       |                        |
       *  | ICON                   |       | CONTENTCONTENTCONTENT  |
*************** public class BasicGraphicsUtils
*** 628,636 ****
       *  |          TEXTTEXTTEXT  |       | CONTENTCONTENTCONTENT  |
       *  +------------------------+       +------------------------+
       */
      contentRect = textRect.union(iconRect);
  
!     return new Dimension(insets.left + contentRect.width + insets.right,
!                          insets.top + contentRect.height + insets.bottom);
    }
  }
--- 625,638 ----
       *  |          TEXTTEXTTEXT  |       | CONTENTCONTENTCONTENT  |
       *  +------------------------+       +------------------------+
       */
+ 
      contentRect = textRect.union(iconRect);
  
!     return new Dimension(insets.left + margin.left
! 			 + contentRect.width 
! 			 + insets.right + margin.right,
!                          insets.top + margin.top
! 			 + contentRect.height 
! 			 + insets.bottom + margin.bottom);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicIconFactory.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicIconFactory.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicIconFactory.java	Sat May 10 08:14:36 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicIconFactory.java	Tue Nov 30 23:59:03 2004
***************
*** 1,5 ****
! /* BasicIconFactory.java
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BasicIconFactory.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,45 ****
--- 38,54 ----
  
  package javax.swing.plaf.basic;
  
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Graphics;
+ import java.awt.Polygon;
  import java.io.Serializable;
+ 
+ import javax.swing.AbstractButton;
  import javax.swing.Icon;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ 
  /**
   * STUBBED
   */
*************** public class BasicIconFactory implements
*** 47,85 ****
  {
    static final long serialVersionUID = 5605588811185324383L;
  
    public BasicIconFactory()
    {
    }
    public static Icon getMenuItemCheckIcon()
    {
!     return null;
    }
    public static Icon getMenuItemArrowIcon()
    {
!     return null;
    }
    public static Icon getMenuArrowIcon()
    {
!     return null;
    }
    public static Icon getCheckBoxIcon()
    {
!     return null;
    }
    public static Icon getRadioButtonIcon()
    {
!     return null;
    }
    public static Icon getCheckBoxMenuItemIcon()
    {
!     return null;
    }
    public static Icon getRadioButtonMenuItemIcon()
    {
!     return null;
    }
    public static Icon createEmptyFrameIcon()
    {
!     return null;
    }
  } // class BasicIconFactory
--- 56,238 ----
  {
    static final long serialVersionUID = 5605588811185324383L;
  
+   private static class DummyIcon 
+     implements Icon
+   {    
+     public int getIconHeight() { return 10; }
+     public int getIconWidth() { return 10; }
+     public void paintIcon(Component c, Graphics g, int x, int y)
+     {
+       Color save = g.getColor();
+       g.setColor(c.getForeground());
+       g.drawRect(x, y, 10, 10);
+       g.setColor(save);
+     }
+   }
+ 
+ 
    public BasicIconFactory()
    {
    }
    public static Icon getMenuItemCheckIcon()
    {
!     return new DummyIcon();
    }
    public static Icon getMenuItemArrowIcon()
    {
!     return new DummyIcon();
    }
    public static Icon getMenuArrowIcon()
    {
!     return new Icon()
!       {
! 	public int getIconHeight()
! 	{
! 	  return 12;
! 	}
! 
! 	public int getIconWidth()
! 	{
! 	  return 12;
! 	}
! 
! 	public void paintIcon(Component c, Graphics g, int x, int y)
! 	{
! 	  g.translate(x, y);
! 
! 	  Color saved = g.getColor();
! 
! 	  g.setColor(Color.BLACK);
! 
! 	  g.fillPolygon(new Polygon(new int[] { 3, 9, 3 },
!                                   new int[] { 2, 6, 10 },
!                                   3));
! 
! 	  g.setColor(saved);
! 	  g.translate(-x, -y);
! 	}
!       };
    }
+ 
    public static Icon getCheckBoxIcon()
    {
!     return new Icon()
!       {        
!         public int getIconHeight() 
!         { 
!           return 10; 
!         }
!         public int getIconWidth() 
!         { 
!           return 10; 
!         }
!         public void paintIcon(Component c, Graphics g, int x, int y)
!         {
!           if (c instanceof AbstractButton)
!             {
!               UIDefaults defaults;
!               defaults = UIManager.getLookAndFeelDefaults();
!               Color hi = defaults.getColor("CheckBox.highlight");
!               Color low = defaults.getColor("CheckBox.darkShadow");
!               Color sel = defaults.getColor("CheckBox.foreground");
!               Color dim = defaults.getColor("CheckBox.shadow");
!               Polygon check = new Polygon(new int[] {x+3, x+3, x+8},
!                                           new int[] {y+5, y+9, y+3}, 3);
!               AbstractButton b = (AbstractButton) c;
!               Color saved = g.getColor();
!               if (b.isEnabled())
!                 {
!                   g.setColor(low);
!                   g.drawRect(x, y, 10, 10);
!                   g.setColor(hi);
!                   g.drawRect(x+1, y+1, 10, 10);
!                   if (b.isSelected())
!                     {
!                       g.setColor(sel);
!                       if (b.isSelected())
!                         {
!                           g.drawLine(x+3, y+5, x+3, y+8);
!                           g.drawLine(x+4, y+5, x+4, y+8);
!                           g.drawLine(x+3, y+8, x+8, y+3);
!                           g.drawLine(x+4, y+8, x+8, y+3);
!                         }
!                     }
!                 }
!               else
!                 {                  
!                   g.setColor(hi);
!                   g.drawRect(x, y, 10, 10);
!                   if (b.isSelected())
!                     {
!                       g.drawLine(x+3, y+5, x+3, y+9);
!                       g.drawLine(x+3, y+9, x+8, y+3);
!                     }
!                 }
!               g.setColor(saved);
!             }
!         }
!       };
    }
+ 
    public static Icon getRadioButtonIcon()
    {
!     return new Icon()
!       {        
!         public int getIconHeight() 
!         { 
!           return 12; 
!         }
!         public int getIconWidth() 
!         { 
!           return 12; 
!         }
!         public void paintIcon(Component c, Graphics g, int x, int y)
!         {
!           UIDefaults defaults;      
!           defaults = UIManager.getLookAndFeelDefaults();
!           Color hi = defaults.getColor("RadioButton.highlight");
!           Color low = defaults.getColor("RadioButton.darkShadow");
!           Color sel = defaults.getColor("RadioButton.foreground");
!           Color dim = defaults.getColor("RadioButton.shadow");
! 
!           if (c instanceof AbstractButton)
!             {
!               AbstractButton b = (AbstractButton) c;
!               Color saved = g.getColor();
!               if (b.isEnabled())
!                 {
!                   g.setColor(low);
!                   g.drawOval(x, y, 12, 12);
!                   g.setColor(hi);
!                   g.drawOval(x+1, y+1, 12, 12);
!                   if (b.isSelected())
!                     {
!                       g.setColor(sel);
!                       g.fillOval(x+4, y+4, 6, 6);
!                     }
!                 }
!               else
!                 {                  
!                   g.setColor(hi);
!                   g.drawOval(x, y, 12, 12);
!                   if (b.isSelected())
!                     g.fillOval(x+4, y+4, 6, 6);
!                 }
!               g.setColor(saved);
!             }
!         }
!       };
    }
    public static Icon getCheckBoxMenuItemIcon()
    {
!     return getCheckBoxIcon();
    }
    public static Icon getRadioButtonMenuItemIcon()
    {
!     return getRadioButtonIcon();
    }
    public static Icon createEmptyFrameIcon()
    {
!     return new DummyIcon();
    }
  } // class BasicIconFactory
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java	Wed Feb 16 20:02:52 2005
***************
*** 0 ****
--- 1,1013 ----
+ /* BasicInternalFrameTitlePane.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.LayoutManager;
+ import java.awt.Polygon;
+ import java.awt.Rectangle;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.KeyEvent;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyVetoException;
+ 
+ import javax.swing.AbstractAction;
+ import javax.swing.Action;
+ import javax.swing.Icon;
+ import javax.swing.JButton;
+ import javax.swing.JComponent;
+ import javax.swing.JInternalFrame;
+ import javax.swing.JLabel;
+ import javax.swing.JMenu;
+ import javax.swing.JMenuBar;
+ import javax.swing.JMenuItem;
+ import javax.swing.SwingConstants;
+ import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ 
+ /**
+  * This class acts as a titlebar for JInternalFrames.
+  */
+ public class BasicInternalFrameTitlePane extends JComponent
+ {
+   /**
+    * The Action responsible for closing the JInternalFrame.
+    */
+   public class CloseAction extends AbstractAction
+   {
+     /**
+      * This method is called when something closes the JInternalFrame.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       if (frame.isClosable())
+         {
+ 	  try
+ 	    {
+ 	      frame.setClosed(true);
+ 	    }
+ 	  catch (PropertyVetoException pve)
+ 	    {
+ 	    }
+         }
+     }
+   }
+ 
+   /**
+    * This Action is responsible for iconifying the JInternalFrame.
+    */
+   public class IconifyAction extends AbstractAction
+   {
+     /**
+      * This method is called when the user wants to iconify the
+      * JInternalFrame.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       if (frame.isIconifiable() && ! frame.isIcon())
+         {
+ 	  try
+ 	    {
+ 	      frame.setIcon(true);
+ 	    }
+ 	  catch (PropertyVetoException pve)
+ 	    {
+ 	    }
+         }
+     }
+   }
+ 
+   /**
+    * This Action is responsible for maximizing the JInternalFrame.
+    */
+   public class MaximizeAction extends AbstractAction
+   {
+     /**
+      * This method is called when the user wants to maximize the
+      * JInternalFrame.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       try
+         {
+ 	  if (frame.isMaximizable() && ! frame.isMaximum())
+ 	    frame.setMaximum(true);
+ 	  else if (frame.isMaximum())
+ 	    frame.setMaximum(false);
+         }
+       catch (PropertyVetoException pve)
+         {
+         }
+     }
+   }
+ 
+   /**
+    * This Action is responsible for dragging the JInternalFrame.
+    */
+   public class MoveAction extends AbstractAction
+   {
+     /**
+      * This method is called when the user wants to drag the JInternalFrame.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       // FIXME: Implement keyboard driven? move actions.
+     }
+   }
+ 
+   /**
+    * This Action is responsible for restoring the JInternalFrame. Restoring
+    * the JInternalFrame is the same as setting the maximum property to false.
+    */
+   public class RestoreAction extends AbstractAction
+   {
+     /**
+      * This method is called when the user wants to restore the
+      * JInternalFrame.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       if (frame.isMaximum())
+         {
+ 	  try
+ 	    {
+ 	      frame.setMaximum(false);
+ 	    }
+ 	  catch (PropertyVetoException pve)
+ 	    {
+ 	    }
+         }
+     }
+   }
+ 
+   /**
+    * This action is responsible for sizing the JInternalFrame.
+    */
+   public class SizeAction extends AbstractAction
+   {
+     /**
+      * This method is called when the user wants to resize the JInternalFrame.
+      *
+      * @param e The ActionEvent.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       // FIXME: Not sure how size actions should be handled.
+     }
+   }
+ 
+   /**
+    * This class is responsible for handling property change events from the
+    * JInternalFrame and adjusting the Title Pane as necessary.
+    */
+   protected class PropertyChangeHandler implements PropertyChangeListener
+   {
+     /**
+      * This method is called when a PropertyChangeEvent is received by the
+      * Title Pane.
+      *
+      * @param evt The PropertyChangeEvent.
+      */
+     public void propertyChange(PropertyChangeEvent evt)
+     {
+       // The title and frameIcon are taken care of during painting time.
+       // The only other thing this will care about are the "is----izable"
+       // properties. So we call enable actions to properly handle the 
+       // buttons and menu items for us.
+       enableActions();
+     }
+   }
+ 
+   /**
+    * This class acts as the MenuBar for the TitlePane. Clicking on the Frame
+    * Icon in the top left corner will activate it.
+    */
+   public class SystemMenuBar extends JMenuBar
+   {
+     /**
+      * This method returns true if it can receive focus.
+      *
+      * @return True if this Component can receive focus.
+      */
+     public boolean isFocusTransversable()
+     {
+       return true;
+     }
+ 
+     /**
+      * This method returns true if this Component is expected to paint all of
+      * itself.
+      *
+      * @return True if this Component is expect to paint all of itself.
+      */
+     public boolean isOpaque()
+     {
+       return true;
+     }
+ 
+     /**
+      * This method paints this Component.
+      *
+      * @param g The Graphics object to paint with.
+      */
+     public void paint(Graphics g)
+     {
+       Icon frameIcon = frame.getFrameIcon();
+       if (frameIcon == null)
+ 	frameIcon = BasicDesktopIconUI.defaultIcon;
+       frameIcon.paintIcon(this, g, 0, 0);
+     }
+ 
+     /**
+      * This method requests that focus be given to this Component.
+      */
+     public void requestFocus()
+     {
+       super.requestFocus();
+     }
+   }
+ 
+   /**
+    * This class acts as the Layout Manager for the TitlePane.
+    */
+   protected class TitlePaneLayout implements LayoutManager
+   {
+     /**
+      * Creates a new <code>TitlePaneLayout</code> object.
+      */
+     public TitlePaneLayout()
+     {
+       // Do nothing.
+     }
+ 
+     /**
+      * This method is called when adding a Component to the Container.
+      *
+      * @param name The name to reference the added Component by.
+      * @param c The Component to add.
+      */
+     public void addLayoutComponent(String name, Component c)
+     {
+       // Do nothing.
+     }
+ 
+     /**
+      * This method is called to lay out the children of the Title Pane.
+      *
+      * @param c The Container to lay out.
+      */
+     public void layoutContainer(Container c)
+     {
+       enableActions();
+ 
+       Insets insets = c.getInsets();
+       int width = c.getBounds().width - insets.left - insets.right;
+       int height = c.getBounds().height - insets.top - insets.bottom;
+ 
+       // MenuBar is always present and located at the top left corner.
+       Dimension menupref = menuBar.getPreferredSize();
+       menuBar.setBounds(insets.left, insets.top, menupref.width, height);
+ 
+       int loc = width + insets.left;
+ 
+       Insets i = closeButton.getInsets();
+       Dimension prefs = new Dimension(iconSize + i.left + i.right,
+                                       iconSize + i.top + i.bottom);
+       int top = insets.top + (height - prefs.height) / 2;
+       if (closeAction.isEnabled())
+         {
+ 	  loc -= prefs.width;
+ 	  closeButton.setVisible(true);
+ 	  closeButton.setBounds(loc, top, prefs.width, prefs.height);
+         }
+       else
+ 	closeButton.setVisible(false);
+ 
+       if (maximizeAction.isEnabled())
+         {
+ 	  loc -= prefs.width;
+ 	  maxButton.setVisible(true);
+ 	  maxButton.setBounds(loc, top, prefs.width, prefs.height);
+         }
+       else
+ 	maxButton.setVisible(false);
+ 
+       if (iconifyAction.isEnabled())
+         {
+ 	  loc -= prefs.width;
+ 	  iconButton.setVisible(true);
+ 	  iconButton.setBounds(loc, top, prefs.width, prefs.height);
+         }
+       else
+ 	iconButton.setVisible(false);
+ 
+       if (title != null)
+ 	title.setBounds(insets.left + menupref.width, insets.top,
+ 	                loc - menupref.width - insets.left, height);
+     }
+ 
+     /**
+      * This method returns the minimum size of the given Container given the
+      * children that it has.
+      *
+      * @param c The Container to get a minimum size for.
+      *
+      * @return The minimum size of the Container.
+      */
+     public Dimension minimumLayoutSize(Container c)
+     {
+       return preferredLayoutSize(c);
+     }
+ 
+     /**
+      * This method returns the preferred size of the given Container taking
+      * into account the children that it has.
+      *
+      * @param c The Container to lay out.
+      *
+      * @return The preferred size of the Container.
+      */
+     public Dimension preferredLayoutSize(Container c)
+     {
+       Insets frameInsets = frame.getInsets();
+ 
+       // Height is the max of the preferredHeights of all components
+       // inside the pane
+       int height = 0;
+       int width = 0;
+       Dimension d;
+ 
+       Component[] components = BasicInternalFrameTitlePane.this.getComponents();
+       for (int i = 0; i < components.length; i++)
+         {
+ 	  d = components[i].getPreferredSize();
+ 	  height = Math.max(height, d.height);
+ 	  width += d.width;
+         }
+ 
+       Insets insets = BasicInternalFrameTitlePane.this.getInsets();
+       height += insets.top + insets.bottom;
+ 
+       return new Dimension(width, height);
+     }
+ 
+     /**
+      * This method is called when removing a Component from the Container.
+      *
+      * @param c The Component to remove.
+      */
+     public void removeLayoutComponent(Component c)
+     {
+     }
+   }
+ 
+   /**
+    * This helper class is used to create the minimize, maximize and close
+    * buttons in the top right corner of the Title Pane. These buttons are
+    * special since they cannot be given focus and have no border.
+    */
+   private class PaneButton extends JButton
+   {
+     /**
+      * Creates a new PaneButton object with the given Action.
+      *
+      * @param a The Action that the button uses.
+      */
+     public PaneButton(Action a)
+     {
+       super(a);
+       setMargin(new Insets(0, 0, 0, 0));
+       setBorder(null);
+     }
+ 
+     /**
+      * This method returns true if the Component can be focused.
+      *
+      * @return false.
+      */
+     public boolean isFocusable()
+     {
+       // These buttons cannot be given focus.
+       return false;
+     }
+   }
+ 
+   /** The action command for the Close action. */
+   protected static final String CLOSE_CMD = "Close";
+ 
+   /** The action command for the Minimize action. */
+   protected static final String ICONIFY_CMD = "Minimize";
+ 
+   /** The action command for the Maximize action. */
+   protected static final String MAXIMIZE_CMD = "Maximize";
+ 
+   /** The action command for the Move action. */
+   protected static final String MOVE_CMD = "Move";
+ 
+   /** The action command for the Restore action. */
+   protected static final String RESTORE_CMD = "Restore";
+ 
+   /** The action command for the Size action. */
+   protected static final String SIZE_CMD = "Size";
+ 
+   /** The action associated with closing the JInternalFrame. */
+   protected Action closeAction;
+ 
+   /** The action associated with iconifying the JInternalFrame. */
+   protected Action iconifyAction;
+ 
+   /** The action associated with maximizing the JInternalFrame. */
+   protected Action maximizeAction;
+ 
+   /** The action associated with moving the JInternalFrame. */
+   protected Action moveAction;
+ 
+   /** The action associated with restoring the JInternalFrame. */
+   protected Action restoreAction;
+ 
+   /** The action associated with resizing the JInternalFrame. */
+   protected Action sizeAction;
+ 
+   /** The button that closes the JInternalFrame. */
+   protected JButton closeButton;
+ 
+   /** The button that iconifies the JInternalFrame. */
+   protected JButton iconButton;
+ 
+   /** The button that maximizes the JInternalFrame. */
+   protected JButton maxButton;
+ 
+   /** Active background color. */
+   protected Color activeBGColor;
+ 
+   /** Active foreground color. */
+   protected Color activeFGColor;
+ 
+   /** Inactive background color. */
+   protected Color inactiveBGColor;
+ 
+   /** Inactive foreground color. */
+   protected Color inactiveFGColor;
+ 
+   // FIXME: These icons need to be moved to MetalIconFactory.
+ 
+   /** The size of the icons in the buttons. */
+   private static final int iconSize = 16;
+ 
+   /** The icon displayed in the close button. */
+   protected Icon closeIcon = new Icon()
+     {
+       public int getIconHeight()
+       {
+ 	return iconSize;
+       }
+ 
+       public int getIconWidth()
+       {
+ 	return iconSize;
+       }
+ 
+       public void paintIcon(Component c, Graphics g, int x, int y)
+       {
+ 	g.translate(x, y);
+ 	Color saved = g.getColor();
+ 	g.setColor(Color.BLACK);
+ 
+ 	int four = iconSize / 4;
+ 	int six = iconSize * 6 / 16;
+ 	int ten = iconSize * 10 / 16;
+ 	int twelve = iconSize * 12 / 16;
+ 
+ 	Polygon a = new Polygon(new int[] { four, six, ten, twelve },
+ 	                        new int[] { six, four, twelve, ten }, 4);
+ 	Polygon b = new Polygon(new int[] { four, six, ten, twelve },
+ 	                        new int[] { ten, twelve, four, six }, 4);
+ 
+ 	g.fillPolygon(a);
+ 	g.fillPolygon(b);
+ 
+ 	g.setColor(saved);
+ 	g.translate(-x, -y);
+       }
+     };
+ 
+   // FIXME: Create new icon.
+ 
+   /** The icon displayed in the restore button. */
+   protected Icon minIcon;
+ 
+   /** The icon displayed in the maximize button. */
+   protected Icon maxIcon = new Icon()
+     {
+       public int getIconHeight()
+       {
+ 	return iconSize;
+       }
+ 
+       public int getIconWidth()
+       {
+ 	return iconSize;
+       }
+ 
+       public void paintIcon(Component c, Graphics g, int x, int y)
+       {
+ 	g.translate(x, y);
+ 	Color saved = g.getColor();
+ 	g.setColor(Color.BLACK);
+ 
+ 	int four = iconSize / 4;
+ 	int two = four / 2;
+ 	int six = iconSize * 6 / 16;
+ 	int eight = four * 2;
+ 
+ 	g.fillRect(four, four, eight, two);
+ 	g.drawRect(four, six, eight, six);
+ 
+ 	g.setColor(saved);
+ 	g.translate(-x, -y);
+       }
+     };
+ 
+   /** The icon displayed in the iconify button. */
+   protected Icon iconIcon = new Icon()
+     {
+       public int getIconHeight()
+       {
+ 	return iconSize;
+       }
+ 
+       public int getIconWidth()
+       {
+ 	return iconSize;
+       }
+ 
+       public void paintIcon(Component c, Graphics g, int x, int y)
+       {
+ 	g.translate(x, y);
+ 	Color saved = g.getColor();
+ 	g.setColor(Color.BLACK);
+ 
+ 	g.fillRect(iconSize / 4, iconSize * 10 / 16, iconSize / 2, iconSize / 8);
+ 
+ 	g.setColor(saved);
+ 	g.translate(-x, -y);
+       }
+     };
+ 
+   /** The JInternalFrame that this TitlePane is used in. */
+   protected JInternalFrame frame;
+ 
+   /** The JMenuBar that is located at the top left of the Title Pane. */
+   protected JMenuBar menuBar;
+ 
+   /** The JMenu inside the menuBar. */
+   protected JMenu windowMenu;
+ 
+   /**
+    * The text color of the TitlePane when the JInternalFrame is not selected.
+    */
+   protected Color notSelectedTextColor;
+ 
+   /**
+    * The background color of the TitlePane when the JInternalFrame is not
+    * selected.
+    */
+   protected Color notSelectedTitleColor;
+ 
+   /** The text color of the titlePane when the JInternalFrame is selected. */
+   protected Color selectedTextColor;
+ 
+   /**
+    * The background color of the TitlePane when the JInternalFrame is
+    * selected.
+    */
+   protected Color selectedTitleColor;
+ 
+   /** The Property Change listener that listens to the JInternalFrame. */
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /**
+    * The label used to display the title. This label is not added to the
+    * TitlePane.
+    */
+   private transient JLabel title;
+ 
+   /**
+    * Creates a new BasicInternalFrameTitlePane object that is used in the
+    * given JInternalFrame.
+    *
+    * @param f The JInternalFrame this BasicInternalFrameTitlePane will be used
+    *        in.
+    */
+   public BasicInternalFrameTitlePane(JInternalFrame f)
+   {
+     frame = f;
+     setLayout(createLayout());
+     title = new JLabel();
+     title.setHorizontalAlignment(SwingConstants.LEFT);
+     title.setHorizontalTextPosition(SwingConstants.LEFT);
+     title.setOpaque(false);
+     setOpaque(true);
+ 
+     setBackground(Color.LIGHT_GRAY);
+ 
+     installTitlePane();
+   }
+ 
+   /**
+    * This method installs the TitlePane onto the JInternalFrameTitlePane. It
+    * also creates any children components that need to be created and adds
+    * listeners to the appropriate components.
+    */
+   protected void installTitlePane()
+   {
+     installDefaults();
+     installListeners();
+     createActions();
+ 
+     assembleSystemMenu();
+ 
+     createButtons();
+     setButtonIcons();
+     addSubComponents();
+     enableActions();
+   }
+ 
+   /**
+    * This method adds the sub components to the TitlePane.
+    */
+   protected void addSubComponents()
+   {
+     add(menuBar);
+ 
+     add(closeButton);
+     add(iconButton);
+     add(maxButton);
+   }
+ 
+   /**
+    * This method creates the actions that are used to manipulate the
+    * JInternalFrame.
+    */
+   protected void createActions()
+   {
+     closeAction = new CloseAction();
+     closeAction.putValue(AbstractAction.ACTION_COMMAND_KEY, CLOSE_CMD);
+ 
+     iconifyAction = new IconifyAction();
+     iconifyAction.putValue(AbstractAction.ACTION_COMMAND_KEY, ICONIFY_CMD);
+ 
+     maximizeAction = new MaximizeAction();
+     maximizeAction.putValue(AbstractAction.ACTION_COMMAND_KEY, MAXIMIZE_CMD);
+ 
+     sizeAction = new SizeAction();
+     sizeAction.putValue(AbstractAction.ACTION_COMMAND_KEY, SIZE_CMD);
+ 
+     restoreAction = new RestoreAction();
+     restoreAction.putValue(AbstractAction.ACTION_COMMAND_KEY, RESTORE_CMD);
+ 
+     moveAction = new MoveAction();
+     moveAction.putValue(AbstractAction.ACTION_COMMAND_KEY, MOVE_CMD);
+   }
+ 
+   /**
+    * This method is used to install the listeners.
+    */
+   protected void installListeners()
+   {
+     propertyChangeListener = new PropertyChangeHandler();
+     frame.addPropertyChangeListener(propertyChangeListener);
+   }
+ 
+   /**
+    * This method is used to uninstall the listeners.
+    */
+   protected void uninstallListeners()
+   {
+     frame.removePropertyChangeListener(propertyChangeListener);
+     propertyChangeListener = null;
+   }
+ 
+   /**
+    * This method installs the defaults determined by the look and feel.
+    */
+   protected void installDefaults()
+   {
+     // FIXME: move icons to defaults.
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     setFont(defaults.getFont("InternalFrame.titleFont"));
+     activeFGColor = defaults.getColor("InternalFrame.activeTitleForeground");
+     activeBGColor = defaults.getColor("InternalFrame.activeTitleBackground");
+     inactiveFGColor = defaults.getColor("InternalFrame.inactiveTitleForeground");
+     inactiveBGColor = defaults.getColor("InternalFrame.inactiveTitleBackground");
+   }
+ 
+   /**
+    * This method uninstalls the defaults.
+    */
+   protected void uninstallDefaults()
+   {
+     setFont(null);
+     activeFGColor = null;
+     activeBGColor = null;
+     inactiveFGColor = null;
+     inactiveBGColor = null;
+   }
+ 
+   /**
+    * This method creates the buttons used in the TitlePane.
+    */
+   protected void createButtons()
+   {
+     closeButton = new PaneButton(closeAction);
+     closeButton.setOpaque(false);
+ 
+     iconButton = new PaneButton(iconifyAction);
+     iconButton.setOpaque(false);
+ 
+     maxButton = new PaneButton(maximizeAction);
+     maxButton.setOpaque(false);
+   }
+ 
+   /**
+    * This method sets the icons in the buttons.
+    */
+   protected void setButtonIcons()
+   {
+     closeButton.setIcon(closeIcon);
+     iconButton.setIcon(iconIcon);
+     maxButton.setIcon(maxIcon);
+   }
+ 
+   /**
+    * This method creates the MenuBar used in the TitlePane.
+    */
+   protected void assembleSystemMenu()
+   {
+     menuBar = createSystemMenuBar();
+     windowMenu = createSystemMenu();
+ 
+     menuBar.add(windowMenu);
+ 
+     addSystemMenuItems(windowMenu);
+     enableActions();
+   }
+ 
+   /**
+    * This method adds the MenuItems to the given JMenu.
+    *
+    * @param systemMenu The JMenu to add MenuItems to.
+    */
+   protected void addSystemMenuItems(JMenu systemMenu)
+   {
+     JMenuItem tmp;
+ 
+     tmp = new JMenuItem(RESTORE_CMD);
+     tmp.addActionListener(restoreAction);
+     tmp.setMnemonic(KeyEvent.VK_R);
+     systemMenu.add(tmp);
+ 
+     tmp = new JMenuItem(MOVE_CMD);
+     tmp.addActionListener(moveAction);
+     tmp.setMnemonic(KeyEvent.VK_M);
+     systemMenu.add(tmp);
+ 
+     tmp = new JMenuItem(SIZE_CMD);
+     tmp.addActionListener(sizeAction);
+     tmp.setMnemonic(KeyEvent.VK_S);
+     systemMenu.add(tmp);
+ 
+     tmp = new JMenuItem(ICONIFY_CMD);
+     tmp.addActionListener(iconifyAction);
+     tmp.setMnemonic(KeyEvent.VK_N);
+     systemMenu.add(tmp);
+ 
+     tmp = new JMenuItem(MAXIMIZE_CMD);
+     tmp.addActionListener(maximizeAction);
+     tmp.setMnemonic(KeyEvent.VK_X);
+     systemMenu.add(tmp);
+ 
+     systemMenu.addSeparator();
+ 
+     tmp = new JMenuItem(CLOSE_CMD);
+     tmp.addActionListener(closeAction);
+     tmp.setMnemonic(KeyEvent.VK_C);
+     systemMenu.add(tmp);
+   }
+ 
+   /**
+    * This method creates a new JMenubar.
+    *
+    * @return A new JMenuBar.
+    */
+   protected JMenuBar createSystemMenuBar()
+   {
+     if (menuBar == null)
+       menuBar = new SystemMenuBar();
+     menuBar.removeAll();
+     return menuBar;
+   }
+ 
+   /**
+    * This method creates a new JMenu.
+    *
+    * @return A new JMenu.
+    */
+   protected JMenu createSystemMenu()
+   {
+     if (windowMenu == null)
+       windowMenu = new JMenu();
+     windowMenu.removeAll();
+     return windowMenu;
+   }
+ 
+   /**
+    * This method programmatically shows the JMenu.
+    */
+   protected void showSystemMenu()
+   {
+     // FIXME: Untested as KeyEvents are not hooked up.
+     menuBar.getMenu(1).getPopupMenu().show();
+   }
+ 
+   /**
+    * This method paints the TitlePane.
+    *
+    * @param g The Graphics object to paint with.
+    */
+   public void paintComponent(Graphics g)
+   {
+     paintTitleBackground(g);
+     Font f = g.getFont();
+     FontMetrics fm = g.getFontMetrics(f);
+     if (frame.getTitle() != null && title != null)
+       {
+ 	Color saved = g.getColor();
+ 	if (frame.isSelected())
+ 	  g.setColor(activeFGColor);
+ 	else
+ 	  g.setColor(inactiveFGColor);
+ 	title.setText(getTitle(frame.getTitle(), fm, title.getBounds().width));
+ 	SwingUtilities.paintComponent(g, title, null, title.getBounds());
+ 	g.setColor(saved);
+       }
+   }
+ 
+   /**
+    * This method paints the TitlePane's background.
+    *
+    * @param g The Graphics object to paint with.
+    */
+   protected void paintTitleBackground(Graphics g)
+   {
+     Color saved = g.getColor();
+     Dimension dims = getSize();
+ 
+     Color bg = getBackground();
+     if (frame.isSelected())
+       bg = activeBGColor;
+     else
+       bg = inactiveBGColor;
+     g.setColor(bg);
+     g.fillRect(0, 0, dims.width, dims.height);
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method returns the title string based on the available width and the
+    * font metrics.
+    *
+    * @param text The desired title.
+    * @param fm The FontMetrics of the font used.
+    * @param availableWidth The available width.
+    *
+    * @return The allowable string.
+    */
+   protected String getTitle(String text, FontMetrics fm, int availableWidth)
+   {
+     Rectangle vr = new Rectangle(0, 0, availableWidth, fm.getHeight());
+     Rectangle ir = new Rectangle();
+     Rectangle tr = new Rectangle();
+     String value = SwingUtilities.layoutCompoundLabel(this, fm, text, null,
+                                                       SwingConstants.CENTER,
+                                                       SwingConstants.LEFT,
+                                                       SwingConstants.CENTER,
+                                                       SwingConstants.LEFT, vr,
+                                                       ir, tr, 0);
+     return value;
+   }
+ 
+   /**
+    * This method fires something similar to a WINDOW_CLOSING event.
+    *
+    * @param frame The JInternalFrame that is being closed.
+    */
+   protected void postClosingEvent(JInternalFrame frame)
+   {
+     // FIXME: Implement postClosingEvent when I figure out what
+     // it's supposed to do.
+     // It says that this fires an WINDOW_CLOSING like event. 
+     // So the closest thing is some kind of InternalFrameEvent.
+     // But none is fired.
+     // Can't see it called or anything.
+   }
+ 
+   /**
+    * This method enables the actions for the TitlePane given the frame's
+    * properties.
+    */
+   protected void enableActions()
+   {
+     closeAction.setEnabled(frame.isClosable());
+ 
+     iconifyAction.setEnabled(frame.isIconifiable());
+     // The maximize action is responsible for restoring it
+     // as well, if clicked from the button
+     maximizeAction.setEnabled(frame.isMaximizable());
+ 
+     // The restoring action is only active when selected
+     // from the menu.
+     restoreAction.setEnabled(frame.isMaximum());
+ 
+     sizeAction.setEnabled(frame.isResizable());
+ 
+     // FIXME: Tie MoveAction enabled status to a variable.
+     moveAction.setEnabled(false);
+   }
+ 
+   /**
+    * This method creates a new PropertyChangeListener.
+    *
+    * @return A new PropertyChangeListener.
+    */
+   protected PropertyChangeListener createPropertyChangeListener()
+   {
+     return new PropertyChangeHandler();
+   }
+ 
+   /**
+    * This method creates a new LayoutManager for the TitlePane.
+    *
+    * @return A new LayoutManager.
+    */
+   protected LayoutManager createLayout()
+   {
+     return new TitlePaneLayout();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java	Wed Feb 16 20:02:52 2005
***************
*** 0 ****
--- 1,1652 ----
+ /* BasicInternalFrameUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.AWTEvent;
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.LayoutManager;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.event.ComponentEvent;
+ import java.awt.event.ComponentListener;
+ import java.awt.event.MouseEvent;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.DefaultDesktopManager;
+ import javax.swing.DesktopManager;
+ import javax.swing.JComponent;
+ import javax.swing.JDesktopPane;
+ import javax.swing.JInternalFrame;
+ import javax.swing.KeyStroke;
+ import javax.swing.SwingConstants;
+ import javax.swing.SwingUtilities;
+ import javax.swing.border.AbstractBorder;
+ import javax.swing.event.InternalFrameEvent;
+ import javax.swing.event.InternalFrameListener;
+ import javax.swing.event.MouseInputAdapter;
+ import javax.swing.event.MouseInputListener;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.InternalFrameUI;
+ import javax.swing.plaf.UIResource;
+ 
+ /**
+  * This is the UI delegate for the Basic look and feel for JInternalFrames.
+  */
+ public class BasicInternalFrameUI extends InternalFrameUI
+ {
+   /**
+    * This is a helper class that listens to the JInternalFrame for
+    * InternalFrameEvents.
+    */
+   protected class BasicInternalFrameListener implements InternalFrameListener
+   {
+     /**
+      * This method is called when the JInternalFrame is activated.
+      *
+      * @param e The InternalFrameEvent.
+      */
+     public void internalFrameActivated(InternalFrameEvent e)
+     {
+       // FIXME: Implement.
+     }
+ 
+     /**
+      * This method is called when the JInternalFrame is closed.
+      *
+      * @param e The InternalFrameEvent.
+      */
+     public void internalFrameClosed(InternalFrameEvent e)
+     {
+       // FIXME: Implement.
+     }
+ 
+     /**
+      * This method is called when the JInternalFrame is closing.
+      *
+      * @param e The InternalFrameEvent.
+      */
+     public void internalFrameClosing(InternalFrameEvent e)
+     {
+       // FIXME: Implement.
+     }
+ 
+     /**
+      * This method is called when the JInternalFrame is deactivated.
+      *
+      * @param e The InternalFrameEvent.
+      */
+     public void internalFrameDeactivated(InternalFrameEvent e)
+     {
+       // FIXME: Implement.
+     }
+ 
+     /**
+      * This method is called when the JInternalFrame is  deiconified.
+      *
+      * @param e The InternalFrameEvent.
+      */
+     public void internalFrameDeiconified(InternalFrameEvent e)
+     {
+       // FIXME: Implement.
+     }
+ 
+     /**
+      * This method is called when the JInternalFrame is  iconified.
+      *
+      * @param e The InternalFrameEvent.
+      */
+     public void internalFrameIconified(InternalFrameEvent e)
+     {
+       // FIXME: Implement.
+     }
+ 
+     /**
+      * This method is called when the JInternalFrame is opened.
+      *
+      * @param e The InternalFrameEvent.
+      */
+     public void internalFrameOpened(InternalFrameEvent e)
+     {
+       // FIXME: Implement.
+     }
+   }
+ 
+   /**
+    * This helper class listens to the edges of the JInternalFrame and the
+    * TitlePane for mouse events. It is responsible for dragging  and resizing
+    * the JInternalFrame in response to the MouseEvents.
+    */
+   protected class BorderListener extends MouseInputAdapter
+     implements SwingConstants
+   {
+     /** FIXME: Use for something. */
+     protected int RESIZE_NONE;
+ 
+     /** The x offset from the top left corner of the JInternalFrame. */
+     private transient int xOffset = 0;
+ 
+     /** The y offset from the top left corner of the JInternalFrame. */
+     private transient int yOffset = 0;
+ 
+     /** The direction that the resize is occuring in. */
+     private transient int direction = -1;
+ 
+     /** Cache rectangle that can be reused. */
+     private transient Rectangle cacheRect = new Rectangle();
+ 
+     /**
+      * This method is called when the mouse is clicked.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseClicked(MouseEvent e)
+     {
+       // There is nothing to do when the mouse is clicked
+       // on the border.
+     }
+ 
+     /**
+      * This method is called when the mouse is dragged. This method is
+      * responsible for resizing or dragging the JInternalFrame.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseDragged(MouseEvent e)
+     {
+       // If the frame is maximized, there is nothing that 
+       // can be dragged around.
+       if (frame.isMaximum())
+ 	return;
+       DesktopManager dm = getDesktopManager();
+       Rectangle b = frame.getBounds();
+       Dimension min = frame.getMinimumSize();
+       if (min == null)
+ 	min = new Dimension(0, 0);
+       Insets insets = frame.getInsets();
+       int x = e.getX();
+       int y = e.getY();
+       if (e.getSource() == frame && frame.isResizable())
+         {
+ 	  switch (direction)
+ 	    {
+ 	    case NORTH:
+ 	      cacheRect.setBounds(b.x,
+ 	                          Math.min(b.y + y, b.y + b.height
+ 	                                   - min.height), b.width, b.height
+ 	                          - y);
+ 	      break;
+ 	    case NORTH_EAST:
+ 	      cacheRect.setBounds(b.x,
+ 	                          Math.min(b.y + y, b.y + b.height
+ 	                                   - min.height), x, b.height - y);
+ 	      break;
+ 	    case EAST:
+ 	      cacheRect.setBounds(b.x, b.y, x, b.height);
+ 	      break;
+ 	    case SOUTH_EAST:
+ 	      cacheRect.setBounds(b.x, b.y, x, y);
+ 	      break;
+ 	    case SOUTH:
+ 	      cacheRect.setBounds(b.x, b.y, b.width, y);
+ 	      break;
+ 	    case SOUTH_WEST:
+ 	      cacheRect.setBounds(Math.min(b.x + x, b.x + b.width - min.width),
+ 	                          b.y, b.width - x, y);
+ 	      break;
+ 	    case WEST:
+ 	      cacheRect.setBounds(Math.min(b.x + x, b.x + b.width - min.width),
+ 	                          b.y, b.width - x, b.height);
+ 	      break;
+ 	    case NORTH_WEST:
+ 	      cacheRect.setBounds(Math.min(b.x + x, b.x + b.width - min.width),
+ 	                          Math.min(b.y + y, b.y + b.height
+ 	                                   - min.height), b.width - x,
+ 	                          b.height - y);
+ 	      break;
+ 	    }
+ 	  dm.resizeFrame(frame, cacheRect.x, cacheRect.y,
+ 	                 Math.max(min.width, cacheRect.width),
+ 	                 Math.max(min.height, cacheRect.height));
+         }
+       else if (e.getSource() == titlePane)
+         {
+ 	  Rectangle fBounds = frame.getBounds();
+ 
+ 	  dm.dragFrame(frame, e.getX() - xOffset + b.x,
+ 	               e.getY() - yOffset + b.y);
+         }
+     }
+ 
+     /**
+      * This method is called when the mouse exits the JInternalFrame.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseExited(MouseEvent e)
+     {
+       // There is nothing to do when the mouse exits 
+       // the border area.
+     }
+ 
+     /**
+      * This method is called when the mouse is moved inside the
+      * JInternalFrame.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseMoved(MouseEvent e)
+     {
+       // There is nothing to do when the mouse moves
+       // over the border area.
+     }
+ 
+     /**
+      * This method is called when the mouse is pressed.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       activateFrame(frame);
+       DesktopManager dm = getDesktopManager();
+       int x = e.getX();
+       int y = e.getY();
+       Insets insets = frame.getInsets();
+ 
+       if (e.getSource() == frame && frame.isResizable())
+         {
+ 	  direction = sectionOfClick(x, y);
+ 	  dm.beginResizingFrame(frame, direction);
+         }
+       else if (e.getSource() == titlePane)
+         {
+ 	  Rectangle tBounds = titlePane.getBounds();
+ 
+ 	  xOffset = e.getX() - tBounds.x + insets.left;
+ 	  yOffset = e.getY() - tBounds.y + insets.top;
+ 
+ 	  dm.beginDraggingFrame(frame);
+         }
+     }
+ 
+     /**
+      * This method is called when the mouse is released.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       DesktopManager dm = getDesktopManager();
+       xOffset = 0;
+       yOffset = 0;
+       if (e.getSource() == frame && frame.isResizable())
+ 	dm.endResizingFrame(frame);
+       else if (e.getSource() == titlePane)
+ 	dm.endDraggingFrame(frame);
+     }
+ 
+     /**
+      * This method determines the direction of the resize based on the
+      * coordinates and the size of the JInternalFrame.
+      *
+      * @param x The x coordinate of the MouseEvent.
+      * @param y The y coordinate of the MouseEvent.
+      *
+      * @return The direction of the resize (a SwingConstant direction).
+      */
+     private int sectionOfClick(int x, int y)
+     {
+       Insets insets = frame.getInsets();
+       Rectangle b = frame.getBounds();
+       if (x < insets.left && y < insets.top)
+ 	return NORTH_WEST;
+       else if (x > b.width - insets.right && y < insets.top)
+ 	return NORTH_EAST;
+       else if (x > b.width - insets.right && y > b.height - insets.bottom)
+ 	return SOUTH_EAST;
+       else if (x < insets.left && y > b.height - insets.bottom)
+ 	return SOUTH_WEST;
+       else if (y < insets.top)
+ 	return NORTH;
+       else if (x < insets.left)
+ 	return WEST;
+       else if (y > b.height - insets.bottom)
+ 	return SOUTH;
+       else if (x > b.width - insets.right)
+ 	return EAST;
+ 
+       return -1;
+     }
+   }
+ 
+   /**
+    * This helper class listens to the JDesktopPane that parents this
+    * JInternalFrame and listens for resize events and resizes the
+    * JInternalFrame appropriately.
+    */
+   protected class ComponentHandler implements ComponentListener
+   {
+     /**
+      * This method is called when the JDesktopPane is hidden.
+      *
+      * @param e The ComponentEvent fired.
+      */
+     public void componentHidden(ComponentEvent e)
+     {
+       // Do nothing.
+     }
+ 
+     /**
+      * This method is called when the JDesktopPane is moved.
+      *
+      * @param e The ComponentEvent fired.
+      */
+     public void componentMoved(ComponentEvent e)
+     {
+       // Do nothing.
+     }
+ 
+     /**
+      * This method is called when the JDesktopPane is resized.
+      *
+      * @param e The ComponentEvent fired.
+      */
+     public void componentResized(ComponentEvent e)
+     {
+       if (frame.isMaximum())
+         {
+ 	  JDesktopPane pane = (JDesktopPane) e.getSource();
+ 	  Insets insets = pane.getInsets();
+ 	  Rectangle bounds = pane.getBounds();
+ 
+ 	  frame.setBounds(bounds.x + insets.left, bounds.y + insets.top,
+ 	                  bounds.width - insets.left - insets.right,
+ 	                  bounds.height - insets.top - insets.bottom);
+ 	  frame.revalidate();
+ 	  frame.repaint();
+         }
+ 
+       // Sun also resizes the icons. but it doesn't seem to do anything.
+     }
+ 
+     /**
+      * This method is called when the JDesktopPane is shown.
+      *
+      * @param e The ComponentEvent fired.
+      */
+     public void componentShown(ComponentEvent e)
+     {
+       // Do nothing.
+     }
+   }
+ 
+   /**
+    * This helper class acts as the LayoutManager for JInternalFrames.
+    */
+   public class InternalFrameLayout implements LayoutManager
+   {
+     /**
+      * This method is called when the given Component is added  to the
+      * JInternalFrame.
+      *
+      * @param name The name of the Component.
+      * @param c The Component added.
+      */
+     public void addLayoutComponent(String name, Component c)
+     {
+     }
+ 
+     /**
+      * This method is used to set the bounds of the children of the
+      * JInternalFrame.
+      *
+      * @param c The Container to lay out.
+      */
+     public void layoutContainer(Container c)
+     {
+       Dimension dims = frame.getSize();
+       Insets insets = frame.getInsets();
+ 
+       dims.width -= insets.left + insets.right;
+       dims.height -= insets.top + insets.bottom;
+ 
+       frame.getRootPane().getGlassPane().setBounds(0, 0, dims.width,
+                                                    dims.height);
+       int nh = 0;
+       int sh = 0;
+       int ew = 0;
+       int ww = 0;
+ 
+       if (northPane != null)
+         {
+ 	  Dimension nDims = northPane.getPreferredSize();
+ 	  nh = Math.min(nDims.height, dims.height);
+ 
+ 	  northPane.setBounds(insets.left, insets.top, dims.width, nh);
+         }
+ 
+       if (southPane != null)
+         {
+ 	  Dimension sDims = southPane.getPreferredSize();
+ 	  sh = Math.min(sDims.height, dims.height - nh);
+ 
+ 	  southPane.setBounds(insets.left, insets.top + dims.height - sh,
+ 	                      dims.width, sh);
+         }
+ 
+       int remHeight = dims.height - sh - nh;
+ 
+       if (westPane != null)
+         {
+ 	  Dimension wDims = westPane.getPreferredSize();
+ 	  ww = Math.min(dims.width, wDims.width);
+ 
+ 	  westPane.setBounds(insets.left, insets.top + nh, ww, remHeight);
+         }
+ 
+       if (eastPane != null)
+         {
+ 	  Dimension eDims = eastPane.getPreferredSize();
+ 	  ew = Math.min(eDims.width, dims.width - ww);
+ 
+ 	  eastPane.setBounds(insets.left + dims.width - ew, insets.top + nh,
+ 	                     ew, remHeight);
+         }
+ 
+       int remWidth = dims.width - ww - ew;
+ 
+       frame.getRootPane().setBounds(insets.left + ww, insets.top + nh,
+                                     remWidth, remHeight);
+     }
+ 
+     /**
+      * This method returns the minimum layout size.
+      *
+      * @param c The Container to find a minimum layout size for.
+      *
+      * @return The minimum dimensions for the JInternalFrame.
+      */
+     public Dimension minimumLayoutSize(Container c)
+     {
+       return getSize(c, true);
+     }
+ 
+     /**
+      * This method returns the maximum layout size.
+      *
+      * @param c The Container to find a maximum layout size for.
+      *
+      * @return The maximum dimensions for the JInternalFrame.
+      */
+     public Dimension maximumLayoutSize(Container c)
+     {
+       return preferredLayoutSize(c);
+     }
+ 
+     /**
+      * Th8is method returns the preferred layout size.
+      *
+      * @param c The Container to find a preferred layout size for.
+      *
+      * @return The preferred dimensions for the JInternalFrame.
+      */
+     public Dimension preferredLayoutSize(Container c)
+     {
+       return getSize(c, false);
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param c DOCUMENT ME!
+      * @param min DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     private Dimension getSize(Container c, boolean min)
+     {
+       Insets insets = frame.getInsets();
+ 
+       Dimension contentDims = frame.getContentPane().getPreferredSize();
+       if (min)
+ 	contentDims.width = contentDims.height = 0;
+       int nWidth = 0;
+       int nHeight = 0;
+       int sWidth = 0;
+       int sHeight = 0;
+       int eWidth = 0;
+       int eHeight = 0;
+       int wWidth = 0;
+       int wHeight = 0;
+       Dimension dims;
+ 
+       if (northPane != null)
+         {
+ 	  dims = northPane.getPreferredSize();
+ 	  if (dims != null)
+ 	    {
+ 	      nWidth = dims.width;
+ 	      nHeight = dims.height;
+ 	    }
+         }
+ 
+       if (southPane != null)
+         {
+ 	  dims = southPane.getPreferredSize();
+ 	  if (dims != null)
+ 	    {
+ 	      sWidth = dims.width;
+ 	      sHeight = dims.height;
+ 	    }
+         }
+ 
+       if (eastPane != null)
+         {
+ 	  dims = eastPane.getPreferredSize();
+ 	  if (dims != null)
+ 	    {
+ 	      sWidth = dims.width;
+ 	      sHeight = dims.height;
+ 	    }
+         }
+ 
+       if (westPane != null)
+         {
+ 	  dims = westPane.getPreferredSize();
+ 	  if (dims != null)
+ 	    {
+ 	      wWidth = dims.width;
+ 	      wHeight = dims.height;
+ 	    }
+         }
+ 
+       int width = Math.max(sWidth, nWidth);
+       width = Math.max(width, contentDims.width + eWidth + wWidth);
+ 
+       int height = Math.max(eHeight, wHeight);
+       height = Math.max(height, contentDims.height);
+       height += nHeight + sHeight;
+ 
+       width += insets.left + insets.right;
+       height += insets.top + insets.bottom;
+ 
+       return new Dimension(width, height);
+     }
+ 
+     /**
+      * This method is called when a Component is removed from the
+      * JInternalFrame.
+      *
+      * @param c The Component that was removed.
+      */
+     public void removeLayoutComponent(Component c)
+     {
+     }
+   }
+ 
+   /**
+    * This helper class is used to listen to the JDesktopPane's glassPane for
+    * MouseEvents. The JInternalFrame can then be selected if a click is
+    * detected on its children.
+    */
+   protected class GlassPaneDispatcher implements MouseInputListener
+   {
+     /** The MouseEvent target. */
+     private transient Component mouseEventTarget;
+ 
+     /** The component pressed. */
+     private transient Component pressedComponent;
+ 
+     /** The last component entered. */
+     private transient Component lastComponentEntered;
+ 
+     /** The number of presses. */
+     private transient int pressCount;
+ 
+     /**
+      * This method is called when the mouse enters the glass pane.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseEntered(MouseEvent e)
+     {
+       handleEvent(e);
+     }
+ 
+     /**
+      * This method is called when the mouse is clicked on the glass pane.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseClicked(MouseEvent e)
+     {
+       handleEvent(e);
+     }
+ 
+     /**
+      * This method is called when the mouse is dragged in the glass pane.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseDragged(MouseEvent e)
+     {
+       handleEvent(e);
+     }
+ 
+     /**
+      * This method is called when the mouse exits the glass pane.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseExited(MouseEvent e)
+     {
+       handleEvent(e);
+     }
+ 
+     /**
+      * This method is called when the mouse is moved in the glass pane.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseMoved(MouseEvent e)
+     {
+       handleEvent(e);
+     }
+ 
+     /**
+      * This method is called when the mouse is  pressed in the glass pane.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       activateFrame(frame);
+       handleEvent(e);
+     }
+ 
+     /**
+      * This method is called when the mouse is  released in the glass pane.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       handleEvent(e);
+     }
+ 
+     /**
+      * This method acquires a candidate component to dispatch the  MouseEvent
+      * to.
+      *
+      * @param me The MouseEvent to acquire a component for.
+      */
+     private void acquireComponentForMouseEvent(MouseEvent me)
+     {
+       int x = me.getX();
+       int y = me.getY();
+ 
+       // Find the candidate which should receive this event.
+       Component parent = frame.getContentPane();
+       if (parent == null)
+ 	return;
+       Component candidate = null;
+       Point p = me.getPoint();
+       while (candidate == null && parent != null)
+         {
+ 	  candidate = SwingUtilities.getDeepestComponentAt(parent, p.x, p.y);
+ 	  if (candidate == null)
+ 	    {
+ 	      p = SwingUtilities.convertPoint(parent, p.x, p.y,
+ 	                                      parent.getParent());
+ 	      parent = parent.getParent();
+ 	    }
+         }
+ 
+       // 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 == frame.getContentPane())
+ 	candidate = null;
+ 
+       // If our candidate is new, inform the old target we're leaving.
+       if (lastComponentEntered != null && lastComponentEntered.isShowing()
+           && lastComponentEntered != candidate)
+         {
+ 	  Point tp = SwingUtilities.convertPoint(frame.getContentPane(), 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 != frame.getContentPane()
+ 	      && candidate != lastComponentEntered)
+ 	    {
+ 	      lastComponentEntered = mouseEventTarget;
+ 	      Point cp = SwingUtilities.convertPoint(frame.getContentPane(),
+ 	                                             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);
+ 	    }
+         }
+ 
+       if (me.getID() == MouseEvent.MOUSE_RELEASED
+           || me.getID() == MouseEvent.MOUSE_PRESSED && pressCount > 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_RELEASED
+ 	//   - MOUSE_PRESSED: another button pressed while the first is held down
+ 	//   - MOUSE_DRAGGED
+ 	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;
+ 	  else if (pressCount == 0)
+ 	    pressedComponent = null;
+         }
+     }
+ 
+     /**
+      * This is a helper method that dispatches the GlassPane MouseEvents to
+      * the proper component.
+      *
+      * @param e The AWTEvent to be dispatched. Usually an instance of
+      *        MouseEvent.
+      */
+     private void handleEvent(AWTEvent e)
+     {
+       if (e instanceof MouseEvent)
+         {
+ 	  MouseEvent me = SwingUtilities.convertMouseEvent(frame.getRootPane()
+ 	                                                        .getGlassPane(),
+ 	                                                   (MouseEvent) e,
+ 	                                                   frame.getRootPane()
+ 	                                                        .getGlassPane());
+ 
+ 	  acquireComponentForMouseEvent(me);
+ 
+ 	  // Avoid dispatching ENTERED and EXITED events twice.
+ 	  if (mouseEventTarget != null && mouseEventTarget.isShowing()
+ 	      && e.getID() != MouseEvent.MOUSE_ENTERED
+ 	      && e.getID() != MouseEvent.MOUSE_EXITED)
+ 	    {
+ 	      MouseEvent newEvt = SwingUtilities.convertMouseEvent(frame
+ 	                                                           .getContentPane(),
+ 	                                                           me,
+ 	                                                           mouseEventTarget);
+ 	      mouseEventTarget.dispatchEvent(newEvt);
+ 
+ 	      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;
+ 		  break;
+ 	        }
+ 	    }
+         }
+     }
+   }
+ 
+   /**
+    * This helper class listens for PropertyChangeEvents from the
+    * JInternalFrame.
+    */
+   public class InternalFramePropertyChangeListener
+     implements PropertyChangeListener
+   {
+     /**
+      * This method is called when one of the JInternalFrame's properties
+      * change.
+      *
+      * @param evt The PropertyChangeEvent.
+      */
+     public void propertyChange(PropertyChangeEvent evt)
+     {
+       if (evt.getPropertyName().equals(JInternalFrame.IS_MAXIMUM_PROPERTY))
+         {
+ 	  if (frame.isMaximum())
+ 	    maximizeFrame(frame);
+ 	  else
+ 	    minimizeFrame(frame);
+         }
+       else if (evt.getPropertyName().equals(JInternalFrame.IS_CLOSED_PROPERTY))
+ 	closeFrame(frame);
+       else if (evt.getPropertyName().equals(JInternalFrame.IS_ICON_PROPERTY))
+         {
+ 	  if (frame.isIcon())
+ 	    iconifyFrame(frame);
+ 	  else
+ 	    deiconifyFrame(frame);
+         }
+       else if (evt.getPropertyName().equals(JInternalFrame.IS_SELECTED_PROPERTY))
+         {
+ 	  if (frame.isSelected())
+ 	    activateFrame(frame);
+ 	  else
+ 	    getDesktopManager().deactivateFrame(frame);
+         }
+       else if (evt.getPropertyName().equals(JInternalFrame.ROOT_PANE_PROPERTY)
+                || evt.getPropertyName().equals(JInternalFrame.GLASS_PANE_PROPERTY))
+         {
+ 	  Component old = (Component) evt.getOldValue();
+ 	  old.removeMouseListener(glassPaneDispatcher);
+ 	  old.removeMouseMotionListener(glassPaneDispatcher);
+ 
+ 	  Component newPane = (Component) evt.getNewValue();
+ 	  newPane.addMouseListener(glassPaneDispatcher);
+ 	  newPane.addMouseMotionListener(glassPaneDispatcher);
+ 
+ 	  frame.revalidate();
+         }
+       /* FIXME: need to add ancestor properties to JComponents.
+       else if (evt.getPropertyName().equals(JComponent.ANCESTOR_PROPERTY))
+       {
+         if (desktopPane != null)
+           desktopPane.removeComponentListener(componentListener);
+         desktopPane = frame.getDesktopPane();
+         if (desktopPane != null)
+           desktopPane.addComponentListener(componentListener);
+       }
+       */
+     }
+   }
+ 
+   /**
+    * This helper class is the border for the JInternalFrame.
+    */
+   private class InternalFrameBorder extends AbstractBorder
+     implements UIResource
+   {
+     /** The width of the border. */
+     private static final int bSize = 5;
+ 
+     /** The size of the corners. */
+     private static final int offset = 10;
+ 
+     /**
+      * This method returns whether the border is opaque.
+      *
+      * @return Whether the border is opaque.
+      */
+     public boolean isBorderOpaque()
+     {
+       return true;
+     }
+ 
+     /**
+      * This method returns the insets of the border.
+      *
+      * @param c The Component to find border insets for.
+      *
+      * @return The border insets.
+      */
+     public Insets getBorderInsets(Component c)
+     {
+       return new Insets(bSize, bSize, bSize, bSize);
+     }
+ 
+     /**
+      * This method paints the border.
+      *
+      * @param c The Component that owns the border.
+      * @param g The Graphics object to paint with.
+      * @param x The x coordinate to paint at.
+      * @param y The y coordinate to paint at.
+      * @param width The width of the Component.
+      * @param height The height of the Component.
+      */
+     public void paintBorder(Component c, Graphics g, int x, int y, int width,
+                             int height)
+     {
+       g.translate(x, y);
+       Color saved = g.getColor();
+       Rectangle b = frame.getBounds();
+ 
+       Color d = c.getBackground();
+       g.setColor(d);
+       g.fillRect(0, 0, bSize, b.height);
+       g.fillRect(0, 0, b.width, bSize);
+       g.fillRect(0, b.height - bSize, b.width, bSize);
+       g.fillRect(b.width - bSize, 0, bSize, b.height);
+ 
+       int x1 = 0;
+       int x2 = bSize;
+       int x3 = b.width - bSize;
+       int x4 = b.width;
+ 
+       int y1 = 0;
+       int y2 = bSize;
+       int y3 = b.height - bSize;
+       int y4 = b.height;
+ 
+       g.setColor(Color.GRAY);
+       g.fillRect(0, 0, bSize, y4);
+       g.fillRect(0, 0, x4, bSize);
+       g.fillRect(0, y3, b.width, bSize);
+       g.fillRect(x3, 0, bSize, b.height);
+ 
+       g.fill3DRect(0, offset, bSize, b.height - 2 * offset, false);
+       g.fill3DRect(offset, 0, b.width - 2 * offset, bSize, false);
+       g.fill3DRect(offset, b.height - bSize, b.width - 2 * offset, bSize, false);
+       g.fill3DRect(b.width - bSize, offset, bSize, b.height - 2 * offset, false);
+ 
+       g.translate(-x, -y);
+       g.setColor(saved);
+     }
+   }
+ 
+   /**
+    * The MouseListener that is responsible for dragging and resizing the
+    * JInternalFrame in response to MouseEvents.
+    */
+   protected MouseInputAdapter borderListener;
+ 
+   /**
+    * The ComponentListener that is responsible for resizing the JInternalFrame
+    * in response to ComponentEvents from the JDesktopPane.
+    */
+   protected ComponentListener componentListener;
+ 
+   /**
+    * The MouseListener that is responsible for activating the JInternalFrame
+    * when the mouse press activates one of its descendents.
+    */
+   protected MouseInputListener glassPaneDispatcher;
+ 
+   /**
+    * The PropertyChangeListener that is responsible for listening to
+    * PropertyChangeEvents from the JInternalFrame.
+    */
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /** The InternalFrameListener that listens to the JInternalFrame. */
+   private transient BasicInternalFrameListener internalFrameListener;
+ 
+   /** The JComponent placed at the east region of the JInternalFrame. */
+   protected JComponent eastPane;
+ 
+   /** The JComponent placed at the north region of the JInternalFrame. */
+   protected JComponent northPane;
+ 
+   /** The JComponent placed at the south region of the JInternalFrame. */
+   protected JComponent southPane;
+ 
+   /** The JComponent placed at the west region of the JInternalFrame. */
+   protected JComponent westPane;
+ 
+   /**
+    * The Keystroke bound to open the menu.
+    * @deprecated
+    */
+   protected KeyStroke openMenuKey;
+ 
+   /** The TitlePane displayed at the top of the JInternalFrame. */
+   protected BasicInternalFrameTitlePane titlePane;
+ 
+   /** The JInternalFrame this UI is responsible for. */
+   protected JInternalFrame frame;
+ 
+   /** The LayoutManager used in the JInternalFrame. */
+   protected LayoutManager internalFrameLayout;
+ 
+   /** The JDesktopPane that is the parent of the JInternalFrame. */
+   private transient JDesktopPane desktopPane;
+ 
+   /**
+    * Creates a new BasicInternalFrameUI object.
+    *
+    * @param b The JInternalFrame this UI will represent.
+    */
+   public BasicInternalFrameUI(JInternalFrame b)
+   {
+   }
+ 
+   /**
+    * This method will create a new BasicInternalFrameUI for the given
+    * JComponent.
+    *
+    * @param b The JComponent to create a BasicInternalFrameUI for.
+    *
+    * @return A new BasicInternalFrameUI.
+    */
+   public static ComponentUI createUI(JComponent b)
+   {
+     return new BasicInternalFrameUI((JInternalFrame) b);
+   }
+ 
+   /**
+    * This method installs a UI for the JInternalFrame.
+    *
+    * @param c The JComponent to install this UI on.
+    */
+   public void installUI(JComponent c)
+   {
+     if (c instanceof JInternalFrame)
+       {
+ 	frame = (JInternalFrame) c;
+ 
+ 	internalFrameLayout = createLayoutManager();
+ 	frame.setLayout(internalFrameLayout);
+ 
+ 	((JComponent) frame.getRootPane().getGlassPane()).setOpaque(false);
+ 	frame.getRootPane().getGlassPane().setVisible(true);
+ 
+ 	installDefaults();
+ 	installListeners();
+ 	installComponents();
+ 	installKeyboardActions();
+ 
+ 	frame.setOpaque(true);
+ 	titlePane.setOpaque(true);
+ 	frame.invalidate();
+       }
+   }
+ 
+   /**
+    * This method reverses the work done by installUI.
+    *
+    * @param c The JComponent to uninstall this UI for.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallKeyboardActions();
+     uninstallComponents();
+     uninstallListeners();
+     uninstallDefaults();
+ 
+     frame.setLayout(null);
+     ((JComponent) frame.getRootPane().getGlassPane()).setOpaque(true);
+     frame.getRootPane().getGlassPane().setVisible(false);
+ 
+     frame = null;
+   }
+ 
+   /**
+    * This method installs the defaults specified by the look and feel.
+    */
+   protected void installDefaults()
+   {
+     // FIXME: Move border to MetalBorders
+     frame.setBorder(new InternalFrameBorder());
+   }
+ 
+   /**
+    * This method installs the keyboard actions for the JInternalFrame.
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: Implement.
+   }
+ 
+   /**
+    * This method installs the Components for the JInternalFrame.
+    */
+   protected void installComponents()
+   {
+     setNorthPane(createNorthPane(frame));
+     setSouthPane(createSouthPane(frame));
+     setEastPane(createEastPane(frame));
+     setWestPane(createWestPane(frame));
+   }
+ 
+   /**
+    * This method installs the listeners for the JInternalFrame.
+    */
+   protected void installListeners()
+   {
+     glassPaneDispatcher = createGlassPaneDispatcher();
+     createInternalFrameListener();
+     borderListener = createBorderListener(frame);
+     componentListener = createComponentListener();
+     propertyChangeListener = createPropertyChangeListener();
+ 
+     frame.addMouseListener(borderListener);
+     frame.addMouseMotionListener(borderListener);
+     frame.addInternalFrameListener(internalFrameListener);
+     frame.addPropertyChangeListener(propertyChangeListener);
+ 
+     frame.getRootPane().getGlassPane().addMouseListener(glassPaneDispatcher);
+     frame.getRootPane().getGlassPane().addMouseMotionListener(glassPaneDispatcher);
+   }
+ 
+   /**
+    * This method uninstalls the defaults for the JInternalFrame.
+    */
+   protected void uninstallDefaults()
+   {
+     frame.setBorder(null);
+   }
+ 
+   /**
+    * This method uninstalls the Components for the JInternalFrame.
+    */
+   protected void uninstallComponents()
+   {
+     setNorthPane(null);
+     setSouthPane(null);
+     setEastPane(null);
+     setWestPane(null);
+   }
+ 
+   /**
+    * This method uninstalls the listeners for the JInternalFrame.
+    */
+   protected void uninstallListeners()
+   {
+     if (desktopPane != null)
+       desktopPane.removeComponentListener(componentListener);
+ 
+     frame.getRootPane().getGlassPane().removeMouseMotionListener(glassPaneDispatcher);
+     frame.getRootPane().getGlassPane().removeMouseListener(glassPaneDispatcher);
+ 
+     frame.removePropertyChangeListener(propertyChangeListener);
+     frame.removeInternalFrameListener(internalFrameListener);
+     frame.removeMouseMotionListener(borderListener);
+     frame.removeMouseListener(borderListener);
+ 
+     propertyChangeListener = null;
+     componentListener = null;
+     borderListener = null;
+     internalFrameListener = null;
+     glassPaneDispatcher = null;
+   }
+ 
+   /**
+    * This method uninstalls the keyboard actions for the JInternalFrame.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: Implement.
+   }
+ 
+   /**
+    * This method creates a new LayoutManager for the JInternalFrame.
+    *
+    * @return A new LayoutManager for the JInternalFrame.
+    */
+   protected LayoutManager createLayoutManager()
+   {
+     return new InternalFrameLayout();
+   }
+ 
+   /**
+    * This method creates a new PropertyChangeListener for the JInternalFrame.
+    *
+    * @return A new PropertyChangeListener for the JInternalFrame.
+    */
+   protected PropertyChangeListener createPropertyChangeListener()
+   {
+     return new InternalFramePropertyChangeListener();
+   }
+ 
+   /**
+    * This method returns the preferred size of the given JComponent.
+    *
+    * @param x The JComponent to find a preferred size for.
+    *
+    * @return The preferred size.
+    */
+   public Dimension getPreferredSize(JComponent x)
+   {
+     return internalFrameLayout.preferredLayoutSize(x);
+   }
+ 
+   /**
+    * This method returns the minimum size of the given JComponent.
+    *
+    * @param x The JComponent to find a minimum size for.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize(JComponent x)
+   {
+     return internalFrameLayout.minimumLayoutSize(x);
+   }
+ 
+   /**
+    * This method returns the maximum size of the given JComponent.
+    *
+    * @param x The JComponent to find a maximum size for.
+    *
+    * @return The maximum size.
+    */
+   public Dimension getMaximumSize(JComponent x)
+   {
+     return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
+   }
+ 
+   /**
+    * This method replaces the currentPane with the newPane. When replacing it
+    * also removes the MouseHandlers for the old pane and installs  them on
+    * the new pane.
+    *
+    * @param currentPane The old pane to remove.
+    * @param newPane The new pane to install.
+    */
+   protected void replacePane(JComponent currentPane, JComponent newPane)
+   {
+     if (currentPane != null)
+       {
+ 	deinstallMouseHandlers(currentPane);
+ 	frame.remove(currentPane);
+       }
+ 
+     if (newPane != null)
+       {
+ 	installMouseHandlers(newPane);
+ 	frame.add(newPane);
+       }
+   }
+ 
+   /**
+    * This method removes the necessary MouseListeners from the given
+    * JComponent.
+    *
+    * @param c The JComponent to remove MouseListeners from.
+    */
+   protected void deinstallMouseHandlers(JComponent c)
+   {
+     c.removeMouseListener(borderListener);
+     c.removeMouseMotionListener(borderListener);
+   }
+ 
+   /**
+    * This method installs the necessary MouseListeners from the given
+    * JComponent.
+    *
+    * @param c The JComponent to install MouseListeners on.
+    */
+   protected void installMouseHandlers(JComponent c)
+   {
+     c.addMouseListener(borderListener);
+     c.addMouseMotionListener(borderListener);
+   }
+ 
+   /**
+    * This method creates the north pane used in the JInternalFrame.
+    *
+    * @param w The JInternalFrame to create a north pane for.
+    *
+    * @return The north pane.
+    */
+   protected JComponent createNorthPane(JInternalFrame w)
+   {
+     titlePane = new BasicInternalFrameTitlePane(w);
+     return titlePane;
+   }
+ 
+   /**
+    * This method creates the west pane used in the JInternalFrame.
+    *
+    * @param w The JInternalFrame to create a west pane for.
+    *
+    * @return The west pane.
+    */
+   protected JComponent createWestPane(JInternalFrame w)
+   {
+     return null;
+   }
+ 
+   /**
+    * This method creates the south pane used in the JInternalFrame.
+    *
+    * @param w The JInternalFrame to create a south pane for.
+    *
+    * @return The south pane.
+    */
+   protected JComponent createSouthPane(JInternalFrame w)
+   {
+     return null;
+   }
+ 
+   /**
+    * This method creates the east pane used in the JInternalFrame.
+    *
+    * @param w The JInternalFrame to create an east pane for.
+    *
+    * @return The east pane.
+    */
+   protected JComponent createEastPane(JInternalFrame w)
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns a new BorderListener for the given JInternalFrame.
+    *
+    * @param w The JIntenalFrame to create a BorderListener for.
+    *
+    * @return A new BorderListener.
+    */
+   protected MouseInputAdapter createBorderListener(JInternalFrame w)
+   {
+     return new BorderListener();
+   }
+ 
+   /**
+    * This method creates a new InternalFrameListener for the JInternalFrame.
+    */
+   protected void createInternalFrameListener()
+   {
+     internalFrameListener = new BasicInternalFrameListener();
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   protected final boolean isKeyBindingRegistered()
+   {
+     // FIXME: Implement.
+     return false;
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @param b DOCUMENT ME!
+    */
+   protected final void setKeyBindingRegistered(boolean b)
+   {
+     // FIXME: Implement.
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @return DOCUMENT ME!
+    */
+   public final boolean isKeyBindingActive()
+   {
+     // FIXME: Implement.
+     return false;
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @param b DOCUMENT ME!
+    */
+   protected final void setKeyBindingActive(boolean b)
+   {
+     // FIXME: Implement.
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    */
+   protected void setupMenuOpenKey()
+   {
+     // FIXME: Implement.
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    */
+   protected void setupMenuCloseKey()
+   {
+     // FIXME: Implement.
+   }
+ 
+   /**
+    * This method returns the north pane.
+    *
+    * @return The north pane.
+    */
+   public JComponent getNorthPane()
+   {
+     return northPane;
+   }
+ 
+   /**
+    * This method sets the north pane to be the given JComponent.
+    *
+    * @param c The new north pane.
+    */
+   public void setNorthPane(JComponent c)
+   {
+     replacePane(northPane, c);
+     northPane = c;
+   }
+ 
+   /**
+    * This method returns the south pane.
+    *
+    * @return The south pane.
+    */
+   public JComponent getSouthPane()
+   {
+     return southPane;
+   }
+ 
+   /**
+    * This method sets the south pane to be the given JComponent.
+    *
+    * @param c The new south pane.
+    */
+   public void setSouthPane(JComponent c)
+   {
+     replacePane(southPane, c);
+     southPane = c;
+   }
+ 
+   /**
+    * This method sets the east pane to be the given JComponent.
+    *
+    * @param c The new east pane.
+    */
+   public void setEastPane(JComponent c)
+   {
+     replacePane(eastPane, c);
+     eastPane = c;
+   }
+ 
+   /**
+    * This method returns the east pane.
+    *
+    * @return The east pane.
+    */
+   public JComponent getEastPane()
+   {
+     return eastPane;
+   }
+ 
+   /**
+    * This method sets the west pane to be the given JComponent.
+    *
+    * @param c The new west pane.
+    */
+   public void setWestPane(JComponent c)
+   {
+     replacePane(westPane, c);
+     westPane = c;
+   }
+ 
+   /**
+    * This method returns the west pane.
+    *
+    * @return The west pane.
+    */
+   public JComponent getWestPane()
+   {
+     return westPane;
+   }
+ 
+   /**
+    * This method returns the DesktopManager to use with the JInternalFrame.
+    *
+    * @return The DesktopManager to use with the JInternalFrame.
+    */
+   protected DesktopManager getDesktopManager()
+   {
+     DesktopManager value = frame.getDesktopPane().getDesktopManager();
+     if (value == null)
+       value = createDesktopManager();
+     return value;
+   }
+ 
+   /**
+    * This method returns a default DesktopManager that can be used with this
+    * JInternalFrame.
+    *
+    * @return A default DesktopManager that can be used with this
+    *         JInternalFrame.
+    */
+   protected DesktopManager createDesktopManager()
+   {
+     return new DefaultDesktopManager();
+   }
+ 
+   /**
+    * This is a convenience method that closes the JInternalFrame.
+    *
+    * @param f The JInternalFrame to close.
+    */
+   protected void closeFrame(JInternalFrame f)
+   {
+     getDesktopManager().closeFrame(f);
+   }
+ 
+   /**
+    * This is a convenience method that maximizes the JInternalFrame.
+    *
+    * @param f The JInternalFrame to maximize.
+    */
+   protected void maximizeFrame(JInternalFrame f)
+   {
+     getDesktopManager().maximizeFrame(f);
+   }
+ 
+   /**
+    * This is a convenience method that minimizes the JInternalFrame.
+    *
+    * @param f The JInternalFrame to minimize.
+    */
+   protected void minimizeFrame(JInternalFrame f)
+   {
+     getDesktopManager().minimizeFrame(f);
+   }
+ 
+   /**
+    * This is a convenience method that iconifies the JInternalFrame.
+    *
+    * @param f The JInternalFrame to iconify.
+    */
+   protected void iconifyFrame(JInternalFrame f)
+   {
+     getDesktopManager().iconifyFrame(f);
+   }
+ 
+   /**
+    * This is a convenience method that deiconifies the JInternalFrame.
+    *
+    * @param f The JInternalFrame to deiconify.
+    */
+   protected void deiconifyFrame(JInternalFrame f)
+   {
+     getDesktopManager().deiconifyFrame(f);
+   }
+ 
+   /**
+    * This is a convenience method that activates the JInternalFrame.
+    *
+    * @param f The JInternalFrame to activate.
+    */
+   protected void activateFrame(JInternalFrame f)
+   {
+     getDesktopManager().activateFrame(f);
+   }
+ 
+   /**
+    * This method returns a new ComponentListener for the JDesktopPane.
+    *
+    * @return A new ComponentListener.
+    */
+   protected ComponentListener createComponentListener()
+   {
+     return new ComponentHandler();
+   }
+ 
+   /**
+    * This method returns a new GlassPaneDispatcher.
+    *
+    * @return A new GlassPaneDispatcher.
+    */
+   protected MouseInputListener createGlassPaneDispatcher()
+   {
+     return new GlassPaneDispatcher();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicLabelUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicLabelUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicLabelUI.java	Sun Jul 13 15:29:11 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicLabelUI.java	Wed Feb 16 20:02:53 2005
***************
*** 1,5 ****
  /* BasicLabelUI.java
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BasicLabelUI.java
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,41 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
- 
  package javax.swing.plaf.basic;
  
  import java.awt.Color;
--- 35,40 ----
*************** import java.awt.Insets;
*** 47,202 ****
  import java.awt.Rectangle;
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  import javax.swing.JComponent;
  import javax.swing.JLabel;
  import javax.swing.SwingUtilities;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.LabelUI;
  
! public class BasicLabelUI extends LabelUI
!   implements PropertyChangeListener
  {
!     int gap = 3;
!     Color foreground;
  
!     
!     public static ComponentUI createUI(final JComponent c)  {
! 	return new BasicLabelUI();
!     }
!     
!     
!     public void installUI(final JComponent c)  {
! 	super.installUI(c);
! 	
! 	foreground = new Color(0,0,250);
!     }
!     
  
!     public Dimension getPreferredSize(JComponent c) 
!     {
! 	JLabel b = (JLabel)c;
!         /*
!           We cannot use this method because it is not part of the
!           official Swing API.
  
! 	Dimension d = BasicGraphicsUtils.getPreferredSize(b, 
! 							  gap,
! 							  b.getText(),
! 							  b.getIcon(),
! 							  b.getVerticalAlignment(),
! 							  b.getHorizontalAlignment(),
! 							  b.getHorizontalTextPosition(),
! 							  b.getVerticalTextPosition());
! 	System.out.println("JLABEL->^^^^^^^^^^^^^^^^^^^^^^   BASIC-PREF="+d + ",T="+b.getText());
!         */
!         return new Dimension(100, 30);
!     }
      
  
!     public void paint(Graphics g, JComponent c)
!     {      
! 	JLabel b = (JLabel) c;
  
! 	Rectangle tr = new Rectangle();
! 	Rectangle ir = new Rectangle();
! 	Rectangle vr = new Rectangle();
  
!         Font f = c.getFont();
  
!         g.setFont(f);
  
!         FontMetrics fm = g.getFontMetrics(f);
  
!         Insets i = c.getInsets();
  
! 	Rectangle bound = c.getBounds();
! 	
! 	System.out.println("BOUND=" + bound + ", insets = " + i + ", " + b.getText());
! 	
! 	if (bound == null)
! 	    {
! 		vr.x      = i.left;
! 		vr.y      = i.top;
! 		vr.width  = b.getWidth() - (i.right  + i.left);
! 		vr.height = b.getHeight() - (i.bottom + i.top);
! 	    }
  	else
! 	    {
! 		vr.x      = bound.x + i.left;
! 		vr.y      = bound.y + i.top;
! 		vr.width  = bound.width - (i.right  + i.left);
! 		vr.height = bound.height - (i.bottom + i.top);
! 	    }
  
! 	System.out.println("             VIEW-RECT-JLABEL="+vr+", insets="+i+", FONTM="+fm);
  
! 	String text = SwingUtilities.layoutCompoundLabel(c,
! 							 fm, 
! 							 b.getText(),
! 							 b.getIcon(),
! 							 b.getVerticalAlignment(), 
! 							 b.getHorizontalAlignment(),
! 							 b.getVerticalTextPosition(), 
! 							 b.getHorizontalTextPosition(),
! 							 vr,
! 							 ir,
! 							 tr,
! 							 gap);
  
! 	paintIcon(g, c, ir);
! 	paintText(g, c, tr, b.getText());
! 	paintFocus(g, c, vr, tr, ir);
!     }
  
  
!     protected void paintFocus(Graphics g, 
! 			      JComponent c,
! 			      Rectangle vr,
! 			      Rectangle tr,
! 			      Rectangle ir)
!     {
!     }
  
!     protected void paintIcon(Graphics g, 
! 			     JComponent c, 
! 			     Rectangle iconRect)
!     {
! 	JLabel b = (JLabel) c;
! 	if (b.getIcon() != null)
! 	    {
! 		int x = iconRect.x;
! 		int y = iconRect.y;
  
! 		System.out.println("WE HAVE AN ICON: " + b.getIcon());
!  
! 		b.getIcon().paintIcon(c, g, x, y);
! 	    }
! 	else
! 	    {
! 		//System.out.println("NO ICON FOR BUTTON:" + b.text);
! 	    }
!     }
  
!     
!     protected void paintText(Graphics g,
! 			     JComponent c,
! 			     Rectangle textRect,
! 			     String text) 
!     {
! 	//        AbstractLabel b = (AbstractLabel) c;
! 	
! 	System.out.println("JLabel: drawing string: " + text + ", at:" + textRect);
! 	
! 	g.setColor(foreground);
! 	//g.setBackColor(new Color(190,190,190));
  
! 	g.drawLine(0,0,100,100);
! 	
! 	BasicGraphicsUtils.drawString(g, text, 0, 0 /*textRect.x*/, 0 /*textRect.y*/);
!     }
  
!   public void propertyChange (PropertyChangeEvent event)
    {
!     throw new Error ("Not implemented");
    }
  }
--- 46,427 ----
  import java.awt.Rectangle;
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.Icon;
  import javax.swing.JComponent;
  import javax.swing.JLabel;
  import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.LabelUI;
  
! 
! /**
!  * This is the Basic Look and Feel class for the JLabel.  One BasicLabelUI
!  * object is used to paint all JLabels that utilize the Basic Look and Feel.
!  */
! public class BasicLabelUI extends LabelUI implements PropertyChangeListener
  {
!   /** The labelUI that is shared by all labels. */
!   protected static BasicLabelUI labelUI;
  
!   /**
!    * Creates a new BasicLabelUI object.
!    */
!   public BasicLabelUI()
!   {
!     super();
!   }
  
!   /**
!    * Creates and returns a UI for the label. Since one UI is shared by  all
!    * labels, this means creating only if necessary and returning the  shared
!    * UI.
!    *
!    * @param c The {@link JComponent} that a UI is being created for.
!    *
!    * @return A label UI for the Basic Look and Feel.
!    */
!   public static ComponentUI createUI(JComponent c)
!   {
!     if (labelUI == null)
!       labelUI = new BasicLabelUI();
!     return labelUI;
!   }
  
!   /**
!    * Returns the preferred size of this component as calculated by the
!    * {@link layoutCL} method.
!    *
!    * @param c This {@link JComponent} to get a preferred size for.
!    *
!    * @return The preferred size.
!    */
!   public Dimension getPreferredSize(JComponent c) 
!   {
!     JLabel lab = (JLabel)c;
!     Rectangle vr = new Rectangle();
!     Rectangle ir = new Rectangle();
!     Rectangle tr = new Rectangle();
!     Insets insets = lab.getInsets();      
!     FontMetrics fm = lab.getToolkit().getFontMetrics(lab.getFont());
!     layoutCL(lab, fm, lab.getText(), lab.getIcon(), vr, ir, tr);
!     Rectangle cr = tr.union(ir);
!     return new Dimension(insets.left + cr.width + insets.right,
!                          insets.top + cr.height + insets.bottom);
      
+   }  
  
!   /**
!    * This method returns the minimum size of the {@link JComponent} given. If
!    * this method returns null, then it is up to the Layout Manager to give
!    * this component a minimum size.
!    *
!    * @param c The {@link JComponent} to get a minimum size for.
!    *
!    * @return The minimum size.
!    */
!   public Dimension getMinimumSize(JComponent c)
!   {
!     return getPreferredSize(c);
!   }
  
!   /**
!    * This method returns the maximum size of the {@link JComponent} given. If
!    * this method returns null, then it is up to the Layout Manager to give
!    * this component a maximum size.
!    *
!    * @param c The {@link JComponent} to get a maximum size for.
!    *
!    * @return The maximum size.
!    */
!   public Dimension getMaximumSize(JComponent c)
!   {
!     return getPreferredSize(c);
!   }
  
!   /**
!    * The method that paints the label according to its current state.
!    *
!    * @param g The {@link Graphics} object to paint with.
!    * @param c The {@link JComponent} to paint.
!    */
!   public void paint(Graphics g, JComponent c)
!   {
!     JLabel b = (JLabel) c;
  
!     Font saved_font = g.getFont();
  
!     Rectangle tr = new Rectangle();
!     Rectangle ir = new Rectangle();
!     Rectangle vr = new Rectangle();
  
!     Font f = c.getFont();
  
!     g.setFont(f);
!     FontMetrics fm = g.getFontMetrics(f);
! 
!     vr = SwingUtilities.calculateInnerArea(c, vr);
! 
!     if (vr.width < 0)
!       vr.width = 0;
!     if (vr.height < 0)
!       vr.height = 0;
!       
!     Icon icon = (b.isEnabled()) ? b.getIcon() : b.getDisabledIcon();
! 
!     String text = layoutCL(b, fm, b.getText(), icon, vr, ir, tr);
!     
!     if (icon != null)
!       icon.paintIcon(b, g, ir.x, ir.y);
!     if (text != null && ! text.equals(""))
!       {
! 	if (b.isEnabled())
! 	  paintEnabledText(b, g, text, tr.x, tr.y + fm.getAscent());
  	else
! 	  paintDisabledText(b, g, text, tr.x, tr.y + fm.getAscent());
!       }
!     g.setFont(saved_font);
!   }
  
!   /**
!    * This method is simply calls SwingUtilities's layoutCompoundLabel.
!    *
!    * @param label The label to lay out.
!    * @param fontMetrics The FontMetrics for the font used.
!    * @param text The text to paint.
!    * @param icon The icon to draw.
!    * @param viewR The entire viewable rectangle.
!    * @param iconR The icon bounds rectangle.
!    * @param textR The text bounds rectangle.
!    *
!    * @return A possibly clipped version of the text.
!    */
!   protected String layoutCL(JLabel label, FontMetrics fontMetrics,
!                             String text, Icon icon, Rectangle viewR,
!                             Rectangle iconR, Rectangle textR)
!   {
!     return SwingUtilities.layoutCompoundLabel(label, fontMetrics, text, icon,
!                                               label.getVerticalAlignment(),
!                                               label.getHorizontalAlignment(),
!                                               label.getVerticalTextPosition(),
!                                               label.getHorizontalTextPosition(),
!                                               viewR, iconR, textR,
!                                               label.getIconTextGap());
!   }
  
!   /**
!    * Paints the text if the label is disabled. By default, this paints the
!    * clipped text returned by layoutCompoundLabel using the
!    * background.brighter() color. It also paints the same text using the
!    * background.darker() color one pixel to the right and one pixel down.
!    *
!    * @param l The {@link JLabel} being painted.
!    * @param g The {@link Graphics} object to paint with.
!    * @param s The String to paint.
!    * @param textX The x coordinate of the start of the baseline.
!    * @param textY The y coordinate of the start of the baseline.
!    */
!   protected void paintDisabledText(JLabel l, Graphics g, String s, int textX,
!                                    int textY)
!   {
!     Color saved_color = g.getColor();
  
!     g.setColor(l.getBackground().brighter());
  
+     int mnemIndex = l.getDisplayedMnemonicIndex();
  
!     if (mnemIndex != -1)
!       BasicGraphicsUtils.drawStringUnderlineCharAt(g, s, mnemIndex, textX,
!                                                    textY);
!     else
!       g.drawString(s, textX, textY);
  
!     g.setColor(l.getBackground().darker());
!     if (mnemIndex != -1)
!       BasicGraphicsUtils.drawStringUnderlineCharAt(g, s, mnemIndex, textX + 1,
!                                                    textY + 1);
!     else
!       g.drawString(s, textX + 1, textY + 1);
  
!     g.setColor(saved_color);
!   }
  
!   /**
!    * Paints the text if the label is enabled. The text is painted using the
!    * foreground color.
!    *
!    * @param l The {@link JLabel} being painted.
!    * @param g The {@link Graphics} object to paint with.
!    * @param s The String to paint.
!    * @param textX The x coordinate of the start of the baseline.
!    * @param textY The y coordinate of the start of the baseline.
!    */
!   protected void paintEnabledText(JLabel l, Graphics g, String s, int textX,
!                                   int textY)
!   {
!     Color saved_color = g.getColor();
!     g.setColor(l.getForeground());
  
!     int mnemIndex = l.getDisplayedMnemonicIndex();
  
!     if (mnemIndex != -1)
!       BasicGraphicsUtils.drawStringUnderlineCharAt(g, s, mnemIndex, textX,
!                                                    textY);
!     else
!       g.drawString(s, textX, textY);
! 
!     g.setColor(saved_color);
!   }
! 
!   /**
!    * This method installs the UI for the given {@link JComponent}.  This
!    * method will install the component, defaults, listeners,  and keyboard
!    * actions.
!    *
!    * @param c The {@link JComponent} that this UI is being installed on.
!    */
!   public void installUI(JComponent c)
    {
!     super.installUI(c);
!     if (c instanceof JLabel)
!       {
! 	JLabel l = (JLabel) c;
! 
! 	installComponents(l);
! 	installDefaults(l);
! 	installListeners(l);
! 	installKeyboardActions(l);
!       }
!   }
! 
!   /**
!    * This method uninstalls the UI for the given {@link JComponent}. This
!    * method will uninstall the component, defaults, listeners,  and keyboard
!    * actions.
!    *
!    * @param c The {@link JComponent} that this UI is being installed on.
!    */
!   public void uninstallUI(JComponent c)
!   {
!     super.uninstallUI(c);
!     if (c instanceof JLabel)
!       {
! 	JLabel l = (JLabel) c;
! 
! 	uninstallKeyboardActions(l);
! 	uninstallListeners(l);
! 	uninstallDefaults(l);
! 	uninstallComponents(l);
!       }
!   }
! 
!   /**
!    * This method installs the components for this {@link JLabel}.
!    *
!    * @param c The {@link JLabel} to install components for.
!    */
!   protected void installComponents(JLabel c)
!   {
!     //FIXME: fix javadoc + implement.
!   }
! 
!   /**
!    * This method uninstalls the components for this {@link JLabel}.
!    *
!    * @param c The {@link JLabel} to uninstall components for.
!    */
!   protected void uninstallComponents(JLabel c)
!   {
!     //FIXME: fix javadoc + implement.
!   }
! 
!   /**
!    * This method installs the defaults that are defined in  the Basic look and
!    * feel for this {@link JLabel}.
!    *
!    * @param c The {@link JLabel} to install defaults for.
!    */
!   protected void installDefaults(JLabel c)
!   {
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
! 
!     c.setForeground(defaults.getColor("Label.foreground"));
!     c.setBackground(defaults.getColor("Label.background"));
!     c.setFont(defaults.getFont("Label.font"));
!     c.setBorder(defaults.getBorder("Label.border"));
!     c.setOpaque(true);
!     //XXX: There are properties we don't use called disabledForeground
!     //and disabledShadow.
!   }
! 
!   /**
!    * This method uninstalls the defaults that are defined in the Basic look
!    * and feel for this {@link JLabel}.
!    *
!    * @param c The {@link JLabel} to uninstall defaults for.
!    */
!   protected void uninstallDefaults(JLabel c)
!   {
!     c.setForeground(null);
!     c.setBackground(null);
!     c.setFont(null);
!     c.setBorder(null);
!   }
! 
!   /**
!    * This method installs the keyboard actions for the given {@link JLabel}.
!    *
!    * @param l The {@link JLabel} to install keyboard actions for.
!    */
!   protected void installKeyboardActions(JLabel l)
!   {
!     //FIXME: implement.
!   }
! 
!   /**
!    * This method uninstalls the keyboard actions for the given {@link JLabel}.
!    *
!    * @param l The {@link JLabel} to uninstall keyboard actions for.
!    */
!   protected void uninstallKeyboardActions(JLabel l)
!   {
!     //FIXME: implement.
!   }
! 
!   /**
!    * This method installs the listeners for the  given {@link JLabel}. The UI
!    * delegate only listens to  the label.
!    *
!    * @param c The {@link JLabel} to install listeners for.
!    */
!   protected void installListeners(JLabel c)
!   {
!     c.addPropertyChangeListener(this);
!   }
! 
!   /**
!    * This method uninstalls the listeners for the given {@link JLabel}. The UI
!    * delegate only listens to the label.
!    *
!    * @param c The {@link JLabel} to uninstall listeners for.
!    */
!   protected void uninstallListeners(JLabel c)
!   {
!     c.removePropertyChangeListener(this);
!   }
! 
!   /**
!    * This method is called whenever any JLabel's that use this UI has one of
!    * their properties change.
!    *
!    * @param e The {@link PropertyChangeEvent} that describes the change.
!    */
!   public void propertyChange(PropertyChangeEvent e)
!   {
!     JLabel c = (JLabel) e.getSource();
!     c.revalidate();
!     c.repaint();
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicListUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicListUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicListUI.java	Sat Jan 10 21:59:30 2004
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicListUI.java	Wed Feb 16 20:02:53 2005
***************
*** 1,4 ****
! /* BasicListUI.java
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* BasicListUI.java --
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** import java.awt.Dimension;
*** 44,184 ****
  import java.awt.Graphics;
  import java.awt.Point;
  import java.awt.Rectangle;
  import javax.swing.JComponent;
  import javax.swing.JList;
  import javax.swing.ListCellRenderer;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.ListUI;
  
  public class BasicListUI extends ListUI
  {
!     int gap_between_cells;
!     Color textColor, disabledTextColor, pressedBackgroundColor, normalBackgroundColor;
!     
  
!     public static ComponentUI createUI(final JComponent c) 
      {
! 	return new BasicButtonUI();
      }
  
!     
!     public void installUI(final JComponent c) 
      {
! 	super.installUI(c);
  
! 	textColor                = new Color(0,0,0);
! 	disabledTextColor        = new Color(130, 130, 130);
! 	pressedBackgroundColor   = new Color(150,150,150);
! 	normalBackgroundColor    = new Color(192,192,192);
      }
  
!     public Dimension getPreferredSize(JComponent c) 
      {
! 	JList l = (JList) c;
  
! 	System.out.println("XXXXXXXXXXXXXXXxx   getPreferredSize------------> " + l);
  
! 	
! 	int rows = l.getVisibleRowCount();
  
! 	ListCellRenderer render = l.getCellRenderer();
! 	
! 	int width  = 200;
! 	int height = rows * 16; 
! 	
! 	if (l.getModel().getSize() == 0)
! 	    {
! 		return new Dimension(width, height);
! 	    }
  
! 	System.out.println("BASIC_LIST_UI ====-> " + l.getModel().getElementAt(0));
  
! 	Component elt = render.getListCellRendererComponent(l,
! 							    l.getModel().getElementAt(0),
! 							    0,            
! 							    false,
! 							    false);
! 	Dimension a = elt.getPreferredSize();
! 	if (a == null)
! 	    {
! 		return new Dimension(width, height);
! 	    }
  
! 	return new Dimension(a.width,
! 			     a.height * rows);
      }
  
!     public void paintBackground(Graphics g,
! 			 JComponent c)
      {
! 	Dimension size = getPreferredSize(c);
  
! 	g.setColor(normalBackgroundColor);
! 	g.fillRect(0,0,size.width, size.height);  
      }
  
!     public void paint(Graphics g, 
! 		      JComponent c)
!     {      
! 	JList l = (JList) c;
  
! 	int rows = l.getVisibleRowCount();
  
! 	ListCellRenderer render = l.getCellRenderer();
  
! 	System.out.println("RENDER-JLIST: " + rows + ", " + l.getModel().getSize());
  
! 	paintBackground(g, c);
  
! 	if (l.getModel().getSize() == 0)
! 	    return;
  
! 	// use element 0 to figure out how big we are:
! 	Component elt = render.getListCellRendererComponent(l,
! 							    l.getModel().getElementAt(0),
! 							    0,       
! 							    false,
! 							    false);
! 	Dimension dim = elt.getPreferredSize();
! 	
! 	Rectangle a = new Rectangle(0,
! 				    0,
! 				    dim.width,
! 				    dim.height);
  
! 	for (int i=0;i<l.getModel().getSize();i++)
! 	    {
! 		boolean is_sel = false;
! 		boolean has_focus = false;
  
! 		Component comp = render.getListCellRendererComponent(l,
! 								     l.getModel().getElementAt(i),
! 								     i,            
! 								     is_sel,
! 								     has_focus);
  
! 		//System.out.println("AAAAA=> " + a + ", " + comp + ", index = " + i);
  
! 		comp.setBounds(a);
  
! 		comp.paint(g);
  
! 		a.y += dim.height + gap_between_cells;
! 	    }
!     }
  
!   public int locationToIndex(JList list, Point location)
    {
!     throw new Error ("Not implemented");
    }
  
!   public Point indexToLocation(JList list, int index)
    {
!     throw new Error ("Not implemented");
    }
  
!   public Rectangle getCellBounds(JList list, int index1, int index2)
    {
!     throw new Error ("Not implemented");
    }
  }
--- 44,702 ----
  import java.awt.Graphics;
  import java.awt.Point;
  import java.awt.Rectangle;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.event.MouseEvent;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
  import javax.swing.JComponent;
  import javax.swing.JList;
  import javax.swing.ListCellRenderer;
+ import javax.swing.ListModel;
+ import javax.swing.ListSelectionModel;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.ListDataEvent;
+ import javax.swing.event.ListDataListener;
+ import javax.swing.event.ListSelectionEvent;
+ import javax.swing.event.ListSelectionListener;
+ import javax.swing.event.MouseInputListener;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.ListUI;
  
+ /**
+  * The Basic Look and Feel UI delegate for the 
+  * JList.
+  */
  public class BasicListUI extends ListUI
  {
!   /**
!    * A helper class which listens for {@link FocusEvents}
!    * from the JList.
!    */
!   class FocusHandler implements FocusListener
!   {
!     /**
!      * Called when the JList acquires focus.
!      *
!      * @param e The FocusEvent representing focus acquisition
!      */
!     public void focusGained(FocusEvent e)
!     {
!       repaintCellFocus();
!     }
  
!     /**
!      * Called when the JList loses focus.
!      *
!      * @param e The FocusEvent representing focus loss
!      */
!     public void focusLost(FocusEvent e)
      {
!       repaintCellFocus();
      }
  
!     /**
!      * Helper method to repaint the focused cell's 
!      * lost or acquired focus state.
!      */
!     void repaintCellFocus()
      {
!     }
!   }
  
!   /**
!    * A helper class which listens for {@link ListDataEvent}s generated by
!    * the {@link JList}'s {@link ListModel}.
!    *
!    * @see javax.swing.JList#model
!    */
!   class ListDataHandler implements ListDataListener
!   {
!     /**
!      * Called when a general change has happened in the model which cannot
!      * be represented in terms of a simple addition or deletion.
!      *
!      * @param e The event representing the change
!      */
!     public void contentsChanged(ListDataEvent e)
!     {
!       BasicListUI.this.damageLayout();
      }
  
!     /**
!      * Called when an interval of objects has been added to the model.
!      *
!      * @param e The event representing the addition
!      */
!     public void intervalAdded(ListDataEvent e)
      {
!       BasicListUI.this.damageLayout();
!     }
  
!     /**
!      * Called when an inteval of objects has been removed from the model.
!      *
!      * @param e The event representing the removal
!      */
!     public void intervalRemoved(ListDataEvent e)
!     {
!       BasicListUI.this.damageLayout();
!     }
!   }
  
!   /**
!    * A helper class which listens for {@link ListSelectionEvent}s
!    * from the {@link JList}'s {@link ListSelectionModel}.
!    */
!   class ListSelectionHandler implements ListSelectionListener
!   {
!     /**
!      * Called when the list selection changes.  
!      *
!      * @param e The event representing the change
!      */
!     public void valueChanged(ListSelectionEvent e)
!     {
!     }
!   }
  
!   /**
!    * A helper class which listens for {@link MouseEvent}s 
!    * from the {@link JList}.
!    */
!   class MouseInputHandler implements MouseInputListener
!   {
!     /**
!      * Called when a mouse button press/release cycle completes
!      * on the {@link JList}
!      *
!      * @param event The event representing the mouse click
!      */
!     public void mouseClicked(MouseEvent event)
!     {
!     }
  
!     /**
!      * Called when a mouse button is pressed down on the
!      * {@link JList}.
!      *
!      * @param event The event representing the mouse press
!      */
!     public void mousePressed(MouseEvent event)
!     {
!       int row = BasicListUI.this.convertYToRow(event.getY());
!       if (row == -1)
!         return;
  
!       BasicListUI.this.list.setSelectedIndex(row);
!     }
  
!     /**
!      * Called when a mouse button is released on
!      * the {@link JList}
!      *
!      * @param event The event representing the mouse press
!      */
!     public void mouseReleased(MouseEvent event)
!     {
      }
  
!     /**
!      * Called when the mouse pointer enters the area bounded
!      * by the {@link JList}
!      *
!      * @param event The event representing the mouse entry
!      */
!     public void mouseEntered(MouseEvent event)
      {
!     }
  
!     /**
!      * Called when the mouse pointer leaves the area bounded
!      * by the {@link JList}
!      *
!      * @param event The event representing the mouse exit
!      */
!     public void mouseExited(MouseEvent event)
!     {
      }
  
!     /**
!      * Called when the mouse pointer moves over the area bounded
!      * by the {@link JList} while a button is held down.
!      *
!      * @param event The event representing the mouse drag
!      */
!     public void mouseDragged(MouseEvent event)
!     {
!     }
  
!     /**
!      * Called when the mouse pointer moves over the area bounded
!      * by the {@link JList}.
!      *
!      * @param event The event representing the mouse move
!      */
!     public void mouseMoved(MouseEvent event)
!     {
!     }
!   }
  
!   /**
!    * Helper class which listens to {@link PropertyChangeEvent}s
!    * from the {@link JList}.
!    */
!   class PropertyChangeHandler implements PropertyChangeListener
!   {
!     /**
!      * Called when the {@link JList} changes one of its bound properties.
!      *
!      * @param e The event representing the property change
!      */
!     public void propertyChange(PropertyChangeEvent e)
!     {
!       if (e.getSource() == BasicListUI.this.list)
!         {
!           if (e.getOldValue() != null && e.getOldValue() instanceof ListModel)
!             ((ListModel) e.getOldValue()).removeListDataListener(BasicListUI.this.listDataListener);
  
!           if (e.getNewValue() != null && e.getNewValue() instanceof ListModel)
!             ((ListModel) e.getNewValue()).addListDataListener(BasicListUI.this.listDataListener);
!         }
!       BasicListUI.this.damageLayout();
!     }
!   }
  
!   /**
!    * Creates a new BasicListUI for the component.
!    *
!    * @param c The component to create a UI for
!    *
!    * @return A new UI
!    */
!   public static ComponentUI createUI(final JComponent c)
!   {
!     return new BasicListUI();
!   }
  
!   /** The current focus listener. */
!   FocusHandler focusListener;
  
!   /** The data listener listening to the model. */
!   ListDataHandler listDataListener;
  
!   /** The selection listener listening to the selection model. */
!   ListSelectionHandler listSelectionListener;
  
!   /** The mouse listener listening to the list. */
!   MouseInputHandler mouseInputListener;
  
!   /** The property change listener listening to the list. */
!   PropertyChangeHandler propertyChangeListener;
  
!   /** Saved reference to the list this UI was created for. */
!   JList list;
  
!   /** The height of a single cell in the list. */
!   int cellHeight;
  
!   /** The width of a single cell in the list. */
!   int cellWidth;
  
!   /** 
!    * An array of varying heights of cells in the list, in cases where each
!    * cell might have a different height.
!    */
!   int[] cellHeights;
! 
!   /**
!    * A simple counter. When nonzero, indicates that the UI class is out of
!    * date with respect to the underlying list, and must recalculate the
!    * list layout before painting or performing size calculations.
!    */
!   int updateLayoutStateNeeded;
! 
!   /**
!    * Calculate the height of a particular row. If there is a fixed {@link
!    * #cellHeight}, return it; otherwise return the specific row height
!    * requested from the {@link #cellHeights} array. If the requested row
!    * is invalid, return <code>-1</code>.
!    *
!    * @param row The row to get the height of
!    *
!    * @return The height, in pixels, of the specified row
!    */
!   int getRowHeight(int row)
    {
!     if (row < 0 || row >= cellHeights.length)
!       return -1;
!     else if (cellHeight != -1)
!       return cellHeight;
!     else
!       return cellHeights[row];
    }
  
!   /**
!    * Calculate the bounds of a particular cell, considering the upper left
!    * corner of the list as the origin position <code>(0,0)</code>.
!    *
!    * @param l Ignored; calculates over <code>this.list</code>
!    * @param index1 The first row to include in the bounds
!    * @param index2 The last row to incude in the bounds
!    *
!    * @return A rectangle encompassing the range of rows between 
!    * <code>index1</code> and <code>index2</code> inclusive
!    */
!   public Rectangle getCellBounds(JList l, int index1, int index2)
    {
!     maybeUpdateLayoutState();
! 
!     if (l != list || cellWidth == -1)
!       return null;
! 
!     int lo = Math.min(index1, index2);
!     int hi = Math.max(index1, index2);
!     Rectangle lobounds = new Rectangle(0, convertRowToY(lo), cellWidth,
!                                        getRowHeight(lo));
!     Rectangle hibounds = new Rectangle(0, convertRowToY(hi), cellWidth,
!                                        getRowHeight(hi));
! 
!     return lobounds.union(hibounds);
    }
  
!   /**
!    * Calculate the Y coordinate of the upper edge of a particular row,
!    * considering the Y coordinate <code>0</code> to occur at the top of the
!    * list.
!    *
!    * @param row The row to calculate the Y coordinate of
!    *
!    * @return The Y coordinate of the specified row, or <code>-1</code> if
!    * the specified row number is invalid
!    */
!   int convertRowToY(int row)
    {
!     int y = 0;
!     for (int i = 0; i < row; ++i)
!       {
!         int h = getRowHeight(i);
!         if (h == -1)
!           return -1;
!         y += h;
!       }
!     return y;
!   }
! 
!   /**
!    * Calculate the row number containing a particular Y coordinate,
!    * considering the Y coodrinate <code>0</code> to occur at the top of the
!    * list.
!    *
!    * @param y0 The Y coordinate to calculate the row number for
!    *
!    * @return The row number containing the specified Y value, or <code>-1</code>
!    * if the specified Y coordinate is invalid
!    */
!   int convertYToRow(int y0)
!   {
!     for (int row = 0; row < cellHeights.length; ++row)
!       {
!         int h = getRowHeight(row);
! 
!         if (y0 < h)
!           return row;
!         y0 -= h;
!       }
!     return -1;
!   }
! 
!   /**
!    * Recomputes the {@link #cellHeights}, {@link #cellHeight}, and {@link
!    * #cellWidth} properties by examining the variouis properties of the
!    * {@link JList}.
!    */
!   void updateLayoutState()
!   {
!     int nrows = list.getModel().getSize();
!     cellHeight = -1;
!     cellWidth = -1;
!     if (cellHeights == null || cellHeights.length != nrows)
!       cellHeights = new int[nrows];
!     if (list.getFixedCellHeight() == -1 || list.getFixedCellWidth() == -1)
!       {
!         ListCellRenderer rend = list.getCellRenderer();
!         for (int i = 0; i < nrows; ++i)
!           {
!             Component flyweight = rend.getListCellRendererComponent(list,
!                                                                     list.getModel()
!                                                                         .getElementAt(i),
!                                                                     0, false,
!                                                                     false);
!             Dimension dim = flyweight.getPreferredSize();
!             cellHeights[i] = dim.height;
!             cellWidth = Math.max(cellWidth, dim.width);
!           }
!       }
!     else
!       {
!         cellHeight = list.getFixedCellHeight();
!         cellWidth = list.getFixedCellWidth();
!       }
!   }
! 
!   /**
!    * Marks the current layout as damaged and requests revalidation from the
!    * JList.
!    *
!    * @see #updateLayoutStateNeeded
!    */
!   void damageLayout()
!   {
!     updateLayoutStateNeeded = 1;
!     list.revalidate();
!   }
! 
!   /**
!    * Calls {@link #updateLayoutState} if {@link #updateLayoutStateNeeded}
!    * is nonzero, then resets {@link #updateLayoutStateNeeded} to zero.
!    */
!   void maybeUpdateLayoutState()
!   {
!     if (updateLayoutStateNeeded != 0)
!       {
!         updateLayoutState();
!         updateLayoutStateNeeded = 0;
!       }
!   }
! 
!   /**
!    * Creates a new BasicListUI object.
!    */
!   public BasicListUI()
!   {
!     focusListener = new FocusHandler();
!     listDataListener = new ListDataHandler();
!     listSelectionListener = new ListSelectionHandler();
!     mouseInputListener = new MouseInputHandler();
!     propertyChangeListener = new PropertyChangeHandler();
!     updateLayoutStateNeeded = 1;
!   }
! 
!   /**
!    * Installs various default settings (mostly colors) from the {@link
!    * UIDefaults} into the {@link JList}
!    *
!    * @see #uninstallDefaults
!    */
!   void installDefaults()
!   {
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!     list.setForeground(defaults.getColor("List.foreground"));
!     list.setBackground(defaults.getColor("List.background"));
!     list.setSelectionForeground(defaults.getColor("List.selectionForeground"));
!     list.setSelectionBackground(defaults.getColor("List.selectionBackground"));
!     list.setOpaque(true);
!   }
! 
!   /**
!    * Resets to <code>null</code> those defaults which were installed in 
!    * {@link #installDefaults}
!    */
!   void uninstallDefaults()
!   {
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!     list.setForeground(null);
!     list.setBackground(null);
!     list.setSelectionForeground(null);
!     list.setSelectionBackground(null);
!   }
! 
!   /**
!    * Attaches all the listeners we have in the UI class to the {@link
!    * JList}, its model and its selection model.
!    *
!    * @see #uninstallListeners
!    */
!   void installListeners()
!   {
!     list.addFocusListener(focusListener);
!     list.getModel().addListDataListener(listDataListener);
!     list.addListSelectionListener(listSelectionListener);
!     list.addMouseListener(mouseInputListener);
!     list.addMouseMotionListener(mouseInputListener);
!     list.addPropertyChangeListener(propertyChangeListener);
!   }
! 
!   /**
!    * Detaches all the listeners we attached in {@link #installListeners}.
!    */
!   void uninstallListeners()
!   {
!     list.removeFocusListener(focusListener);
!     list.getModel().removeListDataListener(listDataListener);
!     list.removeListSelectionListener(listSelectionListener);
!     list.removeMouseListener(mouseInputListener);
!     list.removeMouseMotionListener(mouseInputListener);
!     list.removePropertyChangeListener(propertyChangeListener);
!   }
! 
!   /**
!    * Installs keyboard actions for this UI in the {@link JList}.
!    */
!   void installKeyboardActions()
!   {
!   }
! 
!   /**
!    * Uninstalls keyboard actions for this UI in the {@link JList}.
!    */
!   void uninstallKeyboardActions()
!   {
!   }
! 
!   /**
!    * Installs the various aspects of the UI in the {@link JList}. In
!    * particular, calls {@link #installDefaults}, {@link #installListeners}
!    * and {@link #installKeyboardActions}. Also saves a reference to the
!    * provided component, cast to a {@link JList}.
!    *
!    * @param c The {@link JList} to install the UI into
!    */
!   public void installUI(final JComponent c)
!   {
!     super.installUI(c);
!     list = (JList) c;
!     installDefaults();
!     installListeners();
!     installKeyboardActions();
!     maybeUpdateLayoutState();
!   }
! 
!   /**
!    * Uninstalls all the aspects of the UI which were installed in {@link
!    * #installUI}. When finished uninstalling, drops the saved reference to
!    * the {@link JList}.
!    *
!    * @param c Ignored; the UI is uninstalled from the {@link JList}
!    * reference saved during the call to {@link #installUI}
!    */
!   public void uninstallUI(final JComponent c)
!   {
!     uninstallKeyboardActions();
!     uninstallListeners();
!     uninstallDefaults();
!     list = null;
!   }
! 
!   /**
!    * Gets the maximum size this list can assume.
!    *
!    * @param c The component to measure the size of
!    *
!    * @return A new Dimension representing the component's maximum size
!    */
!   public Dimension getMaximumSize(JComponent c)
!   {
!     return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
!   }
! 
!   /**
!    * Gets the size this list would prefer to assume. This is calculated by
!    * calling {@link #getCellBounds} over the entire list.
!    *
!    * @param c Ignored; uses the saved {@link JList} reference 
!    *
!    * @return DOCUMENT ME!
!    */
!   public Dimension getPreferredSize(JComponent c)
!   {
!     if (list.getModel().getSize() == 0)
!       return new Dimension(0, 0);
!     Rectangle bounds = getCellBounds(list, 0, list.getModel().getSize() - 1);
!     return bounds.getSize();
!   }
! 
!   /**
!    * Paints the packground of the list using the background color
!    * of the specified component.
!    *
!    * @param g The graphics context to paint in
!    * @param c The component to paint the background of
!    */
!   public void paintBackground(Graphics g, JComponent c)
!   {
!     Dimension size = getPreferredSize(c);
!     Color save = g.getColor();
!     g.setColor(c.getBackground());
!     g.fillRect(0, 0, size.width, size.height);
!     g.setColor(save);
!   }
! 
!   /**
!    * Paints a single cell in the list.
!    *
!    * @param g The graphics context to paint in
!    * @param row The row number to paint
!    * @param bounds The bounds of the cell to paint, assuming a coordinate
!    * system beginning at <code>(0,0)</code> in the upper left corner of the
!    * list
!    * @param rend A cell renderer to paint with
!    * @param data The data to provide to the cell renderer
!    * @param sel A selection model to provide to the cell renderer
!    * @param lead The lead selection index of the list
!    */
!   void paintCell(Graphics g, int row, Rectangle bounds, ListCellRenderer rend,
!                  ListModel data, ListSelectionModel sel, int lead)
!   {
!     boolean is_sel = list.isSelectedIndex(row);
!     boolean has_focus = false;
!     Component comp = rend.getListCellRendererComponent(list,
!                                                        data.getElementAt(row),
!                                                        0, is_sel, has_focus);
!     g.translate(bounds.x, bounds.y);
!     comp.setBounds(new Rectangle(0, 0, bounds.width, bounds.height));
!     comp.paint(g);
!     g.translate(-bounds.x, -bounds.y);
!   }
! 
!   /**
!    * Paints the list by calling {@link #paintBackground} and then repeatedly
!    * calling {@link #paintCell} for each visible cell in the list.
!    *
!    * @param g The graphics context to paint with
!    * @param c Ignored; uses the saved {@link JList} reference 
!    */
!   public void paint(Graphics g, JComponent c)
!   {
!     int nrows = list.getModel().getSize();
!     if (nrows == 0)
!       return;
! 
!     maybeUpdateLayoutState();
!     ListCellRenderer render = list.getCellRenderer();
!     ListModel model = list.getModel();
!     ListSelectionModel sel = list.getSelectionModel();
!     int lead = sel.getLeadSelectionIndex();
!     Rectangle clip = g.getClipBounds();
!     paintBackground(g, list);
! 
!     for (int row = 0; row < nrows; ++row)
!       {
!         Rectangle bounds = getCellBounds(list, row, row);
!         if (bounds.intersects(clip))
!           paintCell(g, row, bounds, render, model, sel, lead);
!       }
!   }
! 
!   public int locationToIndex(JList list, Point location)
!   {
!     return convertYToRow(location.y);
!   }
! 
!   public Point indexToLocation(JList list, int index)
!   {
!     return new Point(0, convertRowToY(index));
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicLookAndFeel.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicLookAndFeel.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicLookAndFeel.java	Sun Jul 13 15:29:11 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicLookAndFeel.java	Tue Feb 22 12:16:00 2005
***************
*** 1,5 ****
  /* BasicLookAndFeel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* BasicLookAndFeel.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.plaf.basic;
*** 41,50 ****
--- 41,52 ----
  import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.Font;
+ import java.awt.event.InputEvent;
  import java.awt.event.KeyEvent;
  import java.io.Serializable;
  import java.util.Enumeration;
  import java.util.ResourceBundle;
+ 
  import javax.swing.ImageIcon;
  import javax.swing.KeyStroke;
  import javax.swing.LookAndFeel;
*************** public abstract class BasicLookAndFeel e
*** 110,115 ****
--- 112,118 ----
        "DesktopIconUI", "javax.swing.plaf.basic.BasicDesktopIconUI",
        "DesktopPaneUI", "javax.swing.plaf.basic.BasicDesktopPaneUI",
        "EditorPaneUI", "javax.swing.plaf.basic.BasicEditorPaneUI",
+       "FormattedTextFieldUI", "javax.swing.plaf.basic.BasicFormattedTextFieldUI",
        "InternalFrameUI", "javax.swing.plaf.basic.BasicInternalFrameUI",
        "LabelUI", "javax.swing.plaf.basic.BasicLabelUI",
        "ListUI", "javax.swing.plaf.basic.BasicListUI",
*************** public abstract class BasicLookAndFeel e
*** 130,139 ****
--- 133,144 ----
        "SeparatorUI", "javax.swing.plaf.basic.BasicSeparatorUI",
        "SliderUI", "javax.swing.plaf.basic.BasicSliderUI",
        "SplitPaneUI", "javax.swing.plaf.basic.BasicSplitPaneUI",
+       "SpinnerUI", "javax.swing.plaf.basic.BasicSpinnerUI",
        "StandardDialogUI", "javax.swing.plaf.basic.BasicStandardDialogUI",
        "TabbedPaneUI", "javax.swing.plaf.basic.BasicTabbedPaneUI",
        "TableHeaderUI", "javax.swing.plaf.basic.BasicTableHeaderUI",
        "TableUI", "javax.swing.plaf.basic.BasicTableUI",
+       "TextPaneUI", "javax.swing.plaf.basic.BasicTextPaneUI",
        "TextAreaUI", "javax.swing.plaf.basic.BasicTextAreaUI",
        "TextFieldUI", "javax.swing.plaf.basic.BasicTextFieldUI",
        "TextPaneUI", "javax.swing.plaf.basic.BasicTextPaneUI",
*************** public abstract class BasicLookAndFeel e
*** 205,219 ****
    private void loadResourceBundle(UIDefaults defaults)
    {
      ResourceBundle bundle;
!     Enumeration enum;
      String key;
      String value;
      bundle = ResourceBundle.getBundle("resources/basic");
      // Process Resources
!     enum = bundle.getKeys();
!     while (enum.hasMoreElements())
        {
!         key = (String) enum.nextElement();
          value = bundle.getString(key);
          defaults.put(key, value);
        }
--- 210,224 ----
    private void loadResourceBundle(UIDefaults defaults)
    {
      ResourceBundle bundle;
!     Enumeration e;
      String key;
      String value;
      bundle = ResourceBundle.getBundle("resources/basic");
      // Process Resources
!     e = bundle.getKeys();
!     while (e.hasMoreElements())
        {
!         key = (String) e.nextElement();
          value = bundle.getString(key);
          defaults.put(key, value);
        }
*************** public abstract class BasicLookAndFeel e
*** 226,255 ****
    protected void initComponentDefaults(UIDefaults defaults)
    {
      Object[] uiDefaults;
      uiDefaults = new Object[] {
        "Button.background", new ColorUIResource(Color.lightGray),
!       "Button.border", new BorderUIResource.CompoundBorderUIResource(null,
!                                                                      null),
        "Button.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "SPACE",  "pressed",
          "released SPACE", "released"
        }),
        "Button.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "Button.foreground", new ColorUIResource(Color.black),
!       "Button.margin", new InsetsUIResource(2, 14, 2, 14),
        "Button.textIconGap", new Integer(4),
        "Button.textShiftOffset", new Integer(0),
        "CheckBox.background", new ColorUIResource(Color.lightGray),
        "CheckBox.border", new BorderUIResource.CompoundBorderUIResource(null,
                                                                         null),
        "CheckBox.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "SPACE",  "pressed",
          "released SPACE", "released"
        }),
        "CheckBox.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "CheckBox.foreground", new ColorUIResource(Color.black),
        "CheckBox.icon", BasicIconFactory.getCheckBoxIcon(),
        "CheckBox.margin",new InsetsUIResource(2, 2, 2, 2),
        "CheckBox.textIconGap", new Integer(4),
        "CheckBox.textShiftOffset", new Integer(0),
        "CheckBoxMenuItem.acceleratorFont", new FontUIResource("Dialog",
--- 231,279 ----
    protected void initComponentDefaults(UIDefaults defaults)
    {
      Object[] uiDefaults;
+     
+     // The default Look and Feel happens to use these three purple shades
+     // extensively.
+     Color lightPurple = new Color(0xCC, 0xCC, 0xFF);
+     Color midPurple = new Color(0x99, 0x99, 0xCC);
+     Color darkPurple = new Color(0x66, 0x66, 0x99);
+ 
      uiDefaults = new Object[] {
+ 
+       "AbstractUndoableEdit.undoText", "Undo",
+       "AbstractUndoableEdit.redoText", "Redo",
+ 
        "Button.background", new ColorUIResource(Color.lightGray),
!       "Button.border", BorderUIResource.getEtchedBorderUIResource(),
!       "Button.darkShadow", new ColorUIResource(Color.darkGray),
        "Button.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "SPACE",  "pressed",
          "released SPACE", "released"
        }),
+       "Button.focus", midPurple,
        "Button.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "Button.foreground", new ColorUIResource(Color.black),
!       "Button.highlight", new ColorUIResource(Color.white),
!       "Button.light", new ColorUIResource(Color.lightGray.brighter()),
!       "Button.margin", new InsetsUIResource(2, 2, 2, 2),
!       "Button.shadow", new ColorUIResource(Color.gray),
        "Button.textIconGap", new Integer(4),
        "Button.textShiftOffset", new Integer(0),
        "CheckBox.background", new ColorUIResource(Color.lightGray),
        "CheckBox.border", new BorderUIResource.CompoundBorderUIResource(null,
                                                                         null),
+       "CheckBox.darkShadow", new ColorUIResource(Color.darkGray),
        "CheckBox.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "SPACE",  "pressed",
          "released SPACE", "released"
        }),
        "CheckBox.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "CheckBox.foreground", new ColorUIResource(Color.black),
+       "CheckBox.highlight", new ColorUIResource(Color.white),
        "CheckBox.icon", BasicIconFactory.getCheckBoxIcon(),
+       "CheckBox.light", new ColorUIResource(Color.lightGray.brighter()),
        "CheckBox.margin",new InsetsUIResource(2, 2, 2, 2),
+       "CheckBox.shadow", new ColorUIResource(Color.gray),
        "CheckBox.textIconGap", new Integer(4),
        "CheckBox.textShiftOffset", new Integer(0),
        "CheckBoxMenuItem.acceleratorFont", new FontUIResource("Dialog",
*************** public abstract class BasicLookAndFeel e
*** 264,271 ****
        "CheckBoxMenuItem.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "CheckBoxMenuItem.foreground", new ColorUIResource(Color.black),
        "CheckBoxMenuItem.margin", new InsetsUIResource(2, 2, 2, 2),
!       "CheckBoxMenuItem.selectionBackground", new ColorUIResource(0, 0, 128),
!       "CheckBoxMenuItem.selectionForeground", new ColorUIResource(Color.white),
        "ColorChooser.background", new ColorUIResource(Color.lightGray),
        "ColorChooser.cancelText", "Cancel",
        "ColorChooser.font", new FontUIResource("Dialog", Font.PLAIN, 12),
--- 288,295 ----
        "CheckBoxMenuItem.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "CheckBoxMenuItem.foreground", new ColorUIResource(Color.black),
        "CheckBoxMenuItem.margin", new InsetsUIResource(2, 2, 2, 2),
!       "CheckBoxMenuItem.selectionBackground", new ColorUIResource(lightPurple),
!       "CheckBoxMenuItem.selectionForeground", new ColorUIResource(Color.black),
        "ColorChooser.background", new ColorUIResource(Color.lightGray),
        "ColorChooser.cancelText", "Cancel",
        "ColorChooser.font", new FontUIResource("Dialog", Font.PLAIN, 12),
*************** public abstract class BasicLookAndFeel e
*** 305,312 ****
        "ComboBox.disabledForeground", new ColorUIResource(Color.gray),
        "ComboBox.font", new FontUIResource("SansSerif", Font.PLAIN, 12),
        "ComboBox.foreground", new ColorUIResource(Color.black),
!       "ComboBox.selectionBackground", new ColorUIResource(0, 0, 128),
!       "ComboBox.selectionForeground", new ColorUIResource(Color.white),
        "Desktop.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "KP_LEFT", "left",
          "KP_RIGHT", "right",
--- 329,336 ----
        "ComboBox.disabledForeground", new ColorUIResource(Color.gray),
        "ComboBox.font", new FontUIResource("SansSerif", Font.PLAIN, 12),
        "ComboBox.foreground", new ColorUIResource(Color.black),
!       "ComboBox.selectionBackground", new ColorUIResource(lightPurple),
!       "ComboBox.selectionForeground", new ColorUIResource(Color.black),
        "Desktop.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "KP_LEFT", "left",
          "KP_RIGHT", "right",
*************** public abstract class BasicLookAndFeel e
*** 328,334 ****
          "ctrl F10", "maximize",
          "ctrl alt shift F6","selectPreviousFrame"
        }),
!       "Desktop.background", new ColorUIResource(0, 92, 92),
        "DesktopIcon.border", new BorderUIResource.CompoundBorderUIResource(null,
                                                                            null),
        "EditorPane.background", new ColorUIResource(Color.white),
--- 352,358 ----
          "ctrl F10", "maximize",
          "ctrl alt shift F6","selectPreviousFrame"
        }),
!       "Desktop.background", new ColorUIResource(175, 163, 236),
        "DesktopIcon.border", new BorderUIResource.CompoundBorderUIResource(null,
                                                                            null),
        "EditorPane.background", new ColorUIResource(Color.white),
*************** public abstract class BasicLookAndFeel e
*** 401,416 ****
        "FocusManagerClassName", "TODO",
        "FormView.resetButtonText", "Reset",
        "FormView.submitButtonText", "Submit Query",
!       "InternalFrame.activeTitleBackground", new ColorUIResource(0, 0, 128),
!       "InternalFrame.activeTitleForeground", new ColorUIResource(Color.white),
        "InternalFrame.border", new BorderUIResource.CompoundBorderUIResource(null,
                                                                              null),
        "InternalFrame.closeIcon", BasicIconFactory.createEmptyFrameIcon(),
        // XXX Don't use gif
        "InternalFrame.icon", new IconUIResource(new ImageIcon("icons/JavaCup.gif")),
        "InternalFrame.iconifyIcon", BasicIconFactory.createEmptyFrameIcon(),
!       "InternalFrame.inactiveTitleBackground", new ColorUIResource(Color.gray),
!       "InternalFrame.inactiveTitleForeground", new ColorUIResource(Color.lightGray),
        "InternalFrame.maximizeIcon", BasicIconFactory.createEmptyFrameIcon(),
        "InternalFrame.minimizeIcon", BasicIconFactory.createEmptyFrameIcon(),
        "InternalFrame.titleFont", new FontUIResource("Dialog", Font.PLAIN, 12),
--- 425,440 ----
        "FocusManagerClassName", "TODO",
        "FormView.resetButtonText", "Reset",
        "FormView.submitButtonText", "Submit Query",
!       "InternalFrame.activeTitleBackground", new ColorUIResource(162, 167, 241),
!       "InternalFrame.activeTitleForeground", new ColorUIResource(Color.black),
        "InternalFrame.border", new BorderUIResource.CompoundBorderUIResource(null,
                                                                              null),
        "InternalFrame.closeIcon", BasicIconFactory.createEmptyFrameIcon(),
        // XXX Don't use gif
        "InternalFrame.icon", new IconUIResource(new ImageIcon("icons/JavaCup.gif")),
        "InternalFrame.iconifyIcon", BasicIconFactory.createEmptyFrameIcon(),
!       "InternalFrame.inactiveTitleBackground", new ColorUIResource(Color.lightGray),
!       "InternalFrame.inactiveTitleForeground", new ColorUIResource(Color.black),
        "InternalFrame.maximizeIcon", BasicIconFactory.createEmptyFrameIcon(),
        "InternalFrame.minimizeIcon", BasicIconFactory.createEmptyFrameIcon(),
        "InternalFrame.titleFont", new FontUIResource("Dialog", Font.PLAIN, 12),
*************** public abstract class BasicLookAndFeel e
*** 423,428 ****
--- 447,455 ----
        "Label.disabledForeground", new ColorUIResource(Color.white),
        "Label.disabledShadow", new ColorUIResource(Color.gray),
        "Label.font", new FontUIResource("Dialog", Font.PLAIN, 12),
+       "Label.foreground", new ColorUIResource(Color.black),
+       "List.background", new ColorUIResource(Color.white),
+       "List.border", new BasicBorders.MarginBorder(),
        "List.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "PAGE_UP", "scrollUp",
          "ctrl \\", "clearSelection",
*************** public abstract class BasicLookAndFeel e
*** 444,451 ****
          "KP_DOWN", "selectNextRow"
        }),
        "List.foreground", new ColorUIResource(Color.black),
!       "List.selectionBackground", new ColorUIResource(0, 0, 128),
!       "List.selectionForeground", new ColorUIResource(Color.white),
        "Menu.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 12),
        "Menu.acceleratorForeground", new ColorUIResource(Color.black),
        "Menu.acceleratorSelectionForeground", new ColorUIResource(Color.white),
--- 471,478 ----
          "KP_DOWN", "selectNextRow"
        }),
        "List.foreground", new ColorUIResource(Color.black),
!       "List.selectionBackground", new ColorUIResource(0xCC, 0xCC, 0xFF),
!       "List.selectionForeground", new ColorUIResource(Color.black),
        "Menu.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 12),
        "Menu.acceleratorForeground", new ColorUIResource(Color.black),
        "Menu.acceleratorSelectionForeground", new ColorUIResource(Color.white),
*************** public abstract class BasicLookAndFeel e
*** 471,478 ****
          "ENTER", "return",
          "SPACE", "return"
        },
!       "Menutext.selectionBackground", new ColorUIResource(0, 0, 128),
!       "Menu.selectionForeground", new ColorUIResource(Color.white),
        "MenuBar.background", new ColorUIResource(Color.lightGray),
        "MenuBar.border", new BasicBorders.MenuBarBorder(null, null),
        "MenuBar.font", new FontUIResource("Dialog", Font.PLAIN, 12),
--- 498,505 ----
          "ENTER", "return",
          "SPACE", "return"
        },
!       "Menu.selectionBackground", new ColorUIResource(lightPurple),
!       "Menu.selectionForeground", new ColorUIResource(Color.black),
        "MenuBar.background", new ColorUIResource(Color.lightGray),
        "MenuBar.border", new BasicBorders.MenuBarBorder(null, null),
        "MenuBar.font", new FontUIResource("Dialog", Font.PLAIN, 12),
*************** public abstract class BasicLookAndFeel e
*** 480,486 ****
        "MenuBar.windowBindings", new Object[] {
          "F10", "takeFocus"
        },
!       "MenuItem.acceleratorDelimiter", "+",
        "MenuItem.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 12),
        "MenuItem.acceleratorForeground", new ColorUIResource(Color.black),
        "MenuItem.acceleratorSelectionForeground", new ColorUIResource(Color.white),
--- 507,513 ----
        "MenuBar.windowBindings", new Object[] {
          "F10", "takeFocus"
        },
!       "MenuItem.acceleratorDelimiter", "-",
        "MenuItem.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 12),
        "MenuItem.acceleratorForeground", new ColorUIResource(Color.black),
        "MenuItem.acceleratorSelectionForeground", new ColorUIResource(Color.white),
*************** public abstract class BasicLookAndFeel e
*** 492,499 ****
        "MenuItem.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "MenuItem.foreground", new ColorUIResource(Color.black),
        "MenuItem.margin", new InsetsUIResource(2, 2, 2, 2),
!       "MenuItem.selectionBackground", new ColorUIResource(0, 0, 128),
!       "MenuItem.selectionForeground", new ColorUIResource(Color.white),
        "OptionPane.background", new ColorUIResource(Color.lightGray),
        "OptionPane.border", new BorderUIResource.EmptyBorderUIResource(0, 0, 0, 0),
        "OptionPane.buttonAreaBorder", new BorderUIResource.EmptyBorderUIResource(0, 0, 0, 0),
--- 519,526 ----
        "MenuItem.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "MenuItem.foreground", new ColorUIResource(Color.black),
        "MenuItem.margin", new InsetsUIResource(2, 2, 2, 2),
!       "MenuItem.selectionBackground", new ColorUIResource(lightPurple),
!       "MenuItem.selectionForeground", new ColorUIResource(Color.black),
        "OptionPane.background", new ColorUIResource(Color.lightGray),
        "OptionPane.border", new BorderUIResource.EmptyBorderUIResource(0, 0, 0, 0),
        "OptionPane.buttonAreaBorder", new BorderUIResource.EmptyBorderUIResource(0, 0, 0, 0),
*************** public abstract class BasicLookAndFeel e
*** 533,563 ****
                                                               0),
                                        "notify-field-accept")},
        "PasswordField.margin", new InsetsUIResource(0, 0, 0, 0),
!       "PasswordField.selectionBackground", new ColorUIResource(0, 0, 128),
!       "PasswordField.selectionForeground", new ColorUIResource(Color.white),
        "PopupMenu.background", new ColorUIResource(Color.lightGray),
        "PopupMenu.border", new BorderUIResource.BevelBorderUIResource(0),
        "PopupMenu.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "PopupMenu.foreground", new ColorUIResource(Color.black),
        "ProgressBar.background", new ColorUIResource(Color.lightGray),
!       "ProgressBar.border", new BorderUIResource.LineBorderUIResource(null),
        "ProgressBar.cellLength", new Integer(1),
        "ProgressBar.cellSpacing", new Integer(0),
        "ProgressBar.font", new FontUIResource("Dialog", Font.PLAIN, 12),
!       "ProgressBar.foreground", new ColorUIResource(0, 0, 128),
!       "ProgressBar.selectionBackground", new ColorUIResource(0, 0, 128),
        "ProgressBar.selectionForeground", new ColorUIResource(Color.lightGray),
        "RadioButton.background", new ColorUIResource(Color.lightGray),
        "RadioButton.border", new BorderUIResource.CompoundBorderUIResource(null,
                                                                            null),
        "RadioButton.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "SPACE",  "pressed",
          "released SPACE", "released"
        }),
        "RadioButton.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "RadioButton.foreground", new ColorUIResource(Color.black),
        "RadioButton.icon", BasicIconFactory.getRadioButtonIcon(),
        "RadioButton.margin", new InsetsUIResource(2, 2, 2, 2),
        "RadioButton.textIconGap", new Integer(4),
        "RadioButton.textShiftOffset", new Integer(0),
        "RadioButtonMenuItem.acceleratorFont", new FontUIResource("Dialog",
--- 560,596 ----
                                                               0),
                                        "notify-field-accept")},
        "PasswordField.margin", new InsetsUIResource(0, 0, 0, 0),
!       "PasswordField.selectionBackground", new ColorUIResource(lightPurple),
!       "PasswordField.selectionForeground", new ColorUIResource(Color.black),
        "PopupMenu.background", new ColorUIResource(Color.lightGray),
        "PopupMenu.border", new BorderUIResource.BevelBorderUIResource(0),
        "PopupMenu.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "PopupMenu.foreground", new ColorUIResource(Color.black),
        "ProgressBar.background", new ColorUIResource(Color.lightGray),
!       "ProgressBar.border", new BorderUIResource.LineBorderUIResource(Color.darkGray),
        "ProgressBar.cellLength", new Integer(1),
        "ProgressBar.cellSpacing", new Integer(0),
        "ProgressBar.font", new FontUIResource("Dialog", Font.PLAIN, 12),
!       "ProgressBar.foreground", new ColorUIResource(midPurple),
!       "ProgressBar.selectionBackground", new ColorUIResource(lightPurple),
        "ProgressBar.selectionForeground", new ColorUIResource(Color.lightGray),
+       "ProgressBar.repaintInterval", new Integer(250),
+       "ProgressBar.cycleTime", new Integer(6000),
        "RadioButton.background", new ColorUIResource(Color.lightGray),
        "RadioButton.border", new BorderUIResource.CompoundBorderUIResource(null,
                                                                            null),
+       "RadioButton.darkShadow", new ColorUIResource(Color.darkGray),
        "RadioButton.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "SPACE",  "pressed",
          "released SPACE", "released"
        }),
        "RadioButton.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "RadioButton.foreground", new ColorUIResource(Color.black),
+       "RadioButton.highlight", new ColorUIResource(Color.white),
        "RadioButton.icon", BasicIconFactory.getRadioButtonIcon(),
+       "RadioButton.light", new ColorUIResource(Color.lightGray.brighter()),
        "RadioButton.margin", new InsetsUIResource(2, 2, 2, 2),
+       "RadioButton.shadow", new ColorUIResource(Color.gray),
        "RadioButton.textIconGap", new Integer(4),
        "RadioButton.textShiftOffset", new Integer(0),
        "RadioButtonMenuItem.acceleratorFont", new FontUIResource("Dialog",
*************** public abstract class BasicLookAndFeel e
*** 572,579 ****
        "RadioButtonMenuItem.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "RadioButtonMenuItem.foreground", new ColorUIResource(Color.black),
        "RadioButtonMenuItem.margin", new InsetsUIResource(2, 2, 2, 2),
!       "RadioButtonMenuItem.selectionBackground", new ColorUIResource(0, 0, 128),
!       "RadioButtonMenuItem.selectionForeground", new ColorUIResource(Color.white),
        "RootPane.defaultButtonWindowKeyBindings", new Object[] {
          "ENTER",  "press",
          "released ENTER", "release",
--- 605,612 ----
        "RadioButtonMenuItem.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "RadioButtonMenuItem.foreground", new ColorUIResource(Color.black),
        "RadioButtonMenuItem.margin", new InsetsUIResource(2, 2, 2, 2),
!       "RadioButtonMenuItem.selectionBackground", new ColorUIResource(lightPurple),
!       "RadioButtonMenuItem.selectionForeground", new ColorUIResource(Color.black),
        "RootPane.defaultButtonWindowKeyBindings", new Object[] {
          "ENTER",  "press",
          "released ENTER", "release",
*************** public abstract class BasicLookAndFeel e
*** 648,653 ****
--- 681,689 ----
        "Slider.foreground", new ColorUIResource(Color.lightGray),
        "Slider.highlight", new ColorUIResource(Color.white),
        "Slider.shadow", new ColorUIResource(Color.gray),
+       "Slider.thumbHeight", new Integer(20),
+       "Slider.thumbWidth", new Integer(10),
+       "Slider.tickHeight", new Integer(12),
        "SplitPane.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "F6",  "toggleFocus",
          "F8",  "startResize",
*************** public abstract class BasicLookAndFeel e
*** 664,670 ****
        }),
        "SplitPane.background", new ColorUIResource(Color.lightGray),
        "SplitPane.border", new BasicBorders.SplitPaneBorder(null, null),
!       "SplitPane.dividerSize", new Integer(7),
        "SplitPane.highlight", new ColorUIResource(Color.white),
        "SplitPane.shadow", new ColorUIResource(Color.gray),
        "TabbedPane.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
--- 700,706 ----
        }),
        "SplitPane.background", new ColorUIResource(Color.lightGray),
        "SplitPane.border", new BasicBorders.SplitPaneBorder(null, null),
!       "SplitPane.dividerSize", new Integer(10),
        "SplitPane.highlight", new ColorUIResource(Color.white),
        "SplitPane.shadow", new ColorUIResource(Color.gray),
        "TabbedPane.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
*************** public abstract class BasicLookAndFeel e
*** 673,681 ****
          "ctrl UP", "requestFocus",
          "ctrl KP_UP", "requestFocus"
        }),
!       "TabbedPane.background", new ColorUIResource(Color.lightGray),
        "TabbedPane.contentBorderInsets", new InsetsUIResource(2, 2, 3, 3),
!       "TabbedPane.darkShadow", new ColorUIResource(Color.black),
        "TabbedPane.focus", new ColorUIResource(Color.black),
        "TabbedPane.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "LEFT",  "navigateLeft",
--- 709,717 ----
          "ctrl UP", "requestFocus",
          "ctrl KP_UP", "requestFocus"
        }),
!       "TabbedPane.background", new ColorUIResource(Color.LIGHT_GRAY),
        "TabbedPane.contentBorderInsets", new InsetsUIResource(2, 2, 3, 3),
!       "TabbedPane.darkShadow", new ColorUIResource(Color.darkGray),
        "TabbedPane.focus", new ColorUIResource(Color.black),
        "TabbedPane.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "LEFT",  "navigateLeft",
*************** public abstract class BasicLookAndFeel e
*** 695,702 ****
        "TabbedPane.lightHighlight", new ColorUIResource(Color.white),
        "TabbedPane.selectedTabPadInsets", new InsetsUIResource(2, 2, 2, 1),
        "TabbedPane.shadow", new ColorUIResource(Color.gray),
!       "TabbedPane.tabAreaInsets", new InsetsUIResource(3, 2, 0, 2),
!       "TabbedPane.tabInsets", new InsetsUIResource(0, 4, 1, 4),
        "TabbedPane.tabRunOverlay", new Integer(2),
        "TabbedPane.textIconGap", new Integer(4),
        "Table.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
--- 731,740 ----
        "TabbedPane.lightHighlight", new ColorUIResource(Color.white),
        "TabbedPane.selectedTabPadInsets", new InsetsUIResource(2, 2, 2, 1),
        "TabbedPane.shadow", new ColorUIResource(Color.gray),
!       "TabbedPane.tabbedPaneTabAreaInsets", new InsetsUIResource(3, 2, 1, 2),
!       "TabbedPane.tabbedPaneTabInsets", new InsetsUIResource(1, 4, 1, 4),
!       "TabbedPane.tabbedPaneContentBorderInsets", new InsetsUIResource(3, 2, 1, 2),
!       "TabbedPane.tabbedPaneTabPadInsets", new InsetsUIResource(1, 1, 1, 1),
        "TabbedPane.tabRunOverlay", new Integer(2),
        "TabbedPane.textIconGap", new Integer(4),
        "Table.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
*************** public abstract class BasicLookAndFeel e
*** 742,754 ****
        "Table.background", new ColorUIResource(Color.white),
        "Table.focusCellBackground", new ColorUIResource(Color.white),
        "Table.focusCellForeground", new ColorUIResource(Color.black),
!       "Table.focusCellHighlightBorder", new BorderUIResource.LineBorderUIResource(null),
        "Table.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "Table.foreground", new ColorUIResource(Color.black),
        "Table.gridColor", new ColorUIResource(Color.gray),
        "Table.scrollPaneBorder", new BorderUIResource.BevelBorderUIResource(0),
!       "Table.selectionBackground", new ColorUIResource(0, 0, 128),
!       "Table.selectionForeground", new ColorUIResource(Color.white),
        "TableHeader.background", new ColorUIResource(Color.lightGray),
        "TableHeader.cellBorder", new BorderUIResource.BevelBorderUIResource(0),
        "TableHeader.font", new FontUIResource("Dialog", Font.PLAIN, 12),
--- 780,792 ----
        "Table.background", new ColorUIResource(Color.white),
        "Table.focusCellBackground", new ColorUIResource(Color.white),
        "Table.focusCellForeground", new ColorUIResource(Color.black),
!       "Table.focusCellHighlightBorder", new BorderUIResource.LineBorderUIResource(Color.white),
        "Table.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "Table.foreground", new ColorUIResource(Color.black),
        "Table.gridColor", new ColorUIResource(Color.gray),
        "Table.scrollPaneBorder", new BorderUIResource.BevelBorderUIResource(0),
!       "Table.selectionBackground", new ColorUIResource(lightPurple),
!       "Table.selectionForeground", new ColorUIResource(Color.black),
        "TableHeader.background", new ColorUIResource(Color.lightGray),
        "TableHeader.cellBorder", new BorderUIResource.BevelBorderUIResource(0),
        "TableHeader.font", new FontUIResource("Dialog", Font.PLAIN, 12),
*************** public abstract class BasicLookAndFeel e
*** 775,782 ****
                                                               0), "insert-tab")
            },
        "TextArea.margin", new InsetsUIResource(0, 0, 0, 0),
!       "TextArea.selectionBackground", new ColorUIResource(0, 0, 128),
!       "TextArea.selectionForeground", new ColorUIResource(Color.white),
        "TextField.background", new ColorUIResource(Color.white),
        "TextField.border", new BasicBorders.FieldBorder(null, null, null, null),
        "TextField.caretBlinkRate", new Integer(500),
--- 813,820 ----
                                                               0), "insert-tab")
            },
        "TextArea.margin", new InsetsUIResource(0, 0, 0, 0),
!       "TextArea.selectionBackground", new ColorUIResource(lightPurple),
!       "TextArea.selectionForeground", new ColorUIResource(Color.black),
        "TextField.background", new ColorUIResource(Color.white),
        "TextField.border", new BasicBorders.FieldBorder(null, null, null, null),
        "TextField.caretBlinkRate", new Integer(500),
*************** public abstract class BasicLookAndFeel e
*** 787,796 ****
        "TextField.keyBindings", new JTextComponent.KeyBinding[] {
          new JTextComponent.KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,
                                                               0),
!                                       "notify-field-accept")},
        "TextField.margin", new InsetsUIResource(0, 0, 0, 0),
!       "TextField.selectionBackground", new ColorUIResource(0, 0, 128),
!       "TextField.selectionForeground", new ColorUIResource(Color.white),
        "TextPane.background", new ColorUIResource(Color.white),
        "TextPane.border", new BasicBorders.MarginBorder(),
        "TextPane.caretBlinkRate", new Integer(500),
--- 825,841 ----
        "TextField.keyBindings", new JTextComponent.KeyBinding[] {
          new JTextComponent.KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,
                                                               0),
!                                       "notify-field-accept"),
!         new JTextComponent.KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,
! 							     InputEvent.SHIFT_DOWN_MASK),
! 							     "selection-backward"),
!         new JTextComponent.KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,
! 							     InputEvent.SHIFT_DOWN_MASK),
! 							     "selection-forward"),
!           },
        "TextField.margin", new InsetsUIResource(0, 0, 0, 0),
!       "TextField.selectionBackground", new ColorUIResource(lightPurple),
!       "TextField.selectionForeground", new ColorUIResource(Color.black),
        "TextPane.background", new ColorUIResource(Color.white),
        "TextPane.border", new BasicBorders.MarginBorder(),
        "TextPane.caretBlinkRate", new Integer(500),
*************** public abstract class BasicLookAndFeel e
*** 842,855 ****
        "ToolBar.background", new ColorUIResource(Color.lightGray),
        "ToolBar.border", new BorderUIResource.EtchedBorderUIResource(),
        "ToolBar.dockingBackground", new ColorUIResource(Color.lightGray),
!       "ToolBar.dockingForeground", new ColorUIResource(Color.red),
        "ToolBar.floatingBackground", new ColorUIResource(Color.lightGray),
!       "ToolBar.floatingForeground", new ColorUIResource(Color.darkGray),
        "ToolBar.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "ToolBar.foreground", new ColorUIResource(Color.black),
!       "ToolBar.separatorSize", new DimensionUIResource(10, 10),
!       "ToolTip.background", new ColorUIResource(Color.white),
!       "ToolTip.border", new BorderUIResource.LineBorderUIResource(null),
        "ToolTip.font", new FontUIResource("SansSerif", Font.PLAIN, 12),
        "ToolTip.foreground", new ColorUIResource(Color.black),
        "Tree.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
--- 887,900 ----
        "ToolBar.background", new ColorUIResource(Color.lightGray),
        "ToolBar.border", new BorderUIResource.EtchedBorderUIResource(),
        "ToolBar.dockingBackground", new ColorUIResource(Color.lightGray),
!       "ToolBar.dockingForeground", new ColorUIResource(11, 30, 143),
        "ToolBar.floatingBackground", new ColorUIResource(Color.lightGray),
!       "ToolBar.floatingForeground", new ColorUIResource(113, 171, 212),
        "ToolBar.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "ToolBar.foreground", new ColorUIResource(Color.black),
!       "ToolBar.separatorSize", new DimensionUIResource(20, 20),
!       "ToolTip.background", new ColorUIResource(122, 178, 241),
!       "ToolTip.border", new BorderUIResource.LineBorderUIResource(Color.lightGray),
        "ToolTip.font", new FontUIResource("SansSerif", Font.PLAIN, 12),
        "ToolTip.foreground", new ColorUIResource(Color.black),
        "Tree.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
*************** public abstract class BasicLookAndFeel e
*** 857,866 ****
        }),
        "Tree.background", new ColorUIResource(Color.white),
        "Tree.changeSelectionWithFocus", Boolean.TRUE,
!       // XXX Don't use gif
!       "Tree.closedIcon", new IconUIResource(new ImageIcon("icons/TreeClosed.gif")),
        "Tree.drawsFocusBorderAroundIcon", Boolean.FALSE,
!       "Tree.editorBorder", new BorderUIResource.LineBorderUIResource(null),
        "Tree.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "shift PAGE_DOWN", "scrollDownExtendSelection",
          "PAGE_DOWN", "scrollDownChangeSelection",
--- 902,911 ----
        }),
        "Tree.background", new ColorUIResource(Color.white),
        "Tree.changeSelectionWithFocus", Boolean.TRUE,
!       "Tree.closedIcon", new IconUIResource(new ImageIcon("icons/TreeClosed.png")),
!       "Tree.collapsedIcon", new IconUIResource(new ImageIcon("icons/TreeCollapsed.png")),
        "Tree.drawsFocusBorderAroundIcon", Boolean.FALSE,
!       "Tree.editorBorder", new BorderUIResource.LineBorderUIResource(Color.lightGray),
        "Tree.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
          "shift PAGE_DOWN", "scrollDownExtendSelection",
          "PAGE_DOWN", "scrollDownChangeSelection",
*************** public abstract class BasicLookAndFeel e
*** 906,924 ****
          "ctrl PAGE_DOWN", "scrollDownChangeLead"
        }),
        "Tree.font", new FontUIResource("Dialog", Font.PLAIN, 12),
        "Tree.foreground", new ColorUIResource(Color.black),
        "Tree.hash", new ColorUIResource(Color.gray),
!       // XXX Don't use gif
!       "Tree.leafIcon", new IconUIResource(new ImageIcon("icons/TreeLeaf.gif")),
        "Tree.leftChildIndent", new Integer(7),
!       // XXX Don't use gif
!       "Tree.openIcon", new IconUIResource(new ImageIcon("icons/TreeOpen.gif")),
        "Tree.rightChildIndent", new Integer(13),
        "Tree.rowHeight", new Integer(16),
        "Tree.scrollsOnExpand", Boolean.TRUE,
!       "Tree.selectionBackground", new ColorUIResource(0, 0, 128),
        "Tree.selectionBorderColor", new ColorUIResource(Color.black),
!       "Tree.selectionForeground", new ColorUIResource(Color.white),
        "Tree.textBackground", new ColorUIResource(Color.lightGray),
        "Tree.textForeground", new ColorUIResource(Color.black),
        "Viewport.background", new ColorUIResource(Color.lightGray),
--- 951,968 ----
          "ctrl PAGE_DOWN", "scrollDownChangeLead"
        }),
        "Tree.font", new FontUIResource("Dialog", Font.PLAIN, 12),
+       "Tree.expandedIcon", new IconUIResource(new ImageIcon("icons/TreeExpanded.png")),
        "Tree.foreground", new ColorUIResource(Color.black),
        "Tree.hash", new ColorUIResource(Color.gray),
!       "Tree.leafIcon", new IconUIResource(new ImageIcon("icons/TreeLeaf.png")),
        "Tree.leftChildIndent", new Integer(7),
!       "Tree.openIcon", new IconUIResource(new ImageIcon("icons/TreeOpen.png")),
        "Tree.rightChildIndent", new Integer(13),
        "Tree.rowHeight", new Integer(16),
        "Tree.scrollsOnExpand", Boolean.TRUE,
!       "Tree.selectionBackground", new ColorUIResource(lightPurple),
        "Tree.selectionBorderColor", new ColorUIResource(Color.black),
!       "Tree.selectionForeground", new ColorUIResource(Color.black),
        "Tree.textBackground", new ColorUIResource(Color.lightGray),
        "Tree.textForeground", new ColorUIResource(Color.black),
        "Viewport.background", new ColorUIResource(Color.lightGray),
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicMenuBarUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicMenuBarUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicMenuBarUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicMenuBarUI.java	Wed Feb 16 20:02:53 2005
***************
*** 0 ****
--- 1,303 ----
+ /* BasicMenuBarUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Dimension;
+ import java.awt.event.ContainerEvent;
+ import java.awt.event.ContainerListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.BoxLayout;
+ import javax.swing.JComponent;
+ import javax.swing.JMenuBar;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.MenuBarUI;
+ 
+ /**
+  * UI Delegate for JMenuBar.
+  */
+ public class BasicMenuBarUI extends MenuBarUI
+ {
+   protected ChangeListener changeListener;
+ 
+   /*ContainerListener that listens to the ContainerEvents fired from menu bar*/
+   protected ContainerListener containerListener;
+ 
+   /*Property change listeners that listener to PropertyChangeEvent from menu bar*/
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /* menu bar for which this UI delegate is for*/
+   protected JMenuBar menuBar;
+ 
+   /**
+    * Creates a new BasicMenuBarUI object.
+    */
+   public BasicMenuBarUI()
+   {
+     changeListener = createChangeListener();
+     containerListener = createContainerListener();
+     propertyChangeListener = new PropertyChangeHandler();
+   }
+ 
+   /**
+    * Creates ChangeListener
+    *
+    * @return The ChangeListener
+    */
+   protected ChangeListener createChangeListener()
+   {
+     return new ChangeHandler();
+   }
+ 
+   /**
+    * Creates ContainerListener() to listen for ContainerEvents
+    * fired by JMenuBar.
+    *
+    * @return The ContainerListener
+    */
+   protected ContainerListener createContainerListener()
+   {
+     return new ContainerHandler();
+   }
+ 
+   /**
+    * Factory method to create a BasicMenuBarUI for the given {@link
+    * JComponent}, which should be a {@link JMenuBar}.
+    *
+    * @param b The {@link JComponent} a UI is being created for.
+    *
+    * @return A BasicMenuBarUI for the {@link JComponent}.
+    */
+   public static ComponentUI createUI(JComponent x)
+   {
+     return new BasicMenuBarUI();
+   }
+ 
+   /**
+    * Returns maximum size for the specified menu bar
+    *
+    * @param c component for which to get maximum size
+    *
+    * @return  Maximum size for the specified menu bar
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     // let layout manager calculate its size
+     return null;
+   }
+ 
+   /**
+    * Returns maximum allowed size of JMenuBar.
+    *
+    * @param c menuBar for which to return maximum size
+    *
+    * @return Maximum size of the give menu bar.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     // let layout manager calculate its size
+     return null;
+   }
+ 
+   /**
+    * Returns preferred size of JMenuBar.
+    *
+    * @param c menuBar for which to return preferred size
+    *
+    * @return Preferred size of the give menu bar.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     // let layout manager calculate its size
+     return null;
+   }
+ 
+   /**
+    * Initializes any default properties that this UI has from the defaults for
+    * the Basic look and feel.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     menuBar.setBackground(defaults.getColor("MenuBar.background"));
+     menuBar.setBorder(defaults.getBorder("MenuBar.border"));
+     menuBar.setFont(defaults.getFont("MenuBar.font"));
+     menuBar.setForeground(defaults.getColor("MenuBar.foreground"));
+   }
+ 
+   /**
+    * This method installs the keyboard actions for the JMenuBar.
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: implement
+   }
+ 
+   /**
+    * This method installs the listeners needed for this UI to function.
+    */
+   protected void installListeners()
+   {
+     menuBar.addContainerListener(containerListener);
+     menuBar.addPropertyChangeListener(propertyChangeListener);
+   }
+ 
+   /**
+   * Installs and initializes all fields for this UI delegate. Any properties
+   * of the UI that need to be initialized and/or set to defaults will be
+   * done now. It will also install any listeners necessary.
+   *
+   * @param c The {@link JComponent} that is having this UI installed.
+   */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+     menuBar = (JMenuBar) c;
+     menuBar.setLayout(new BoxLayout(menuBar, BoxLayout.X_AXIS));
+     installDefaults();
+     installListeners();
+     installKeyboardActions();
+   }
+ 
+   /**
+    * This method uninstalls the defaults and nulls any objects created during
+    * install.
+    */
+   protected void uninstallDefaults()
+   {
+     menuBar.setBackground(null);
+     menuBar.setBorder(null);
+     menuBar.setFont(null);
+     menuBar.setForeground(null);
+   }
+ 
+   /**
+    * This method reverses the work done in installKeyboardActions.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: implement. 
+   }
+ 
+   /**
+    * Unregisters all the listeners that this UI delegate was using.
+    */
+   protected void uninstallListeners()
+   {
+     menuBar.removeContainerListener(containerListener);
+     menuBar.removePropertyChangeListener(propertyChangeListener);
+   }
+ 
+   /**
+    * Performs the opposite of installUI. Any properties or resources that need
+    * to be cleaned up will be done now. It will also uninstall any listeners
+    * it has. In addition, any properties of this UI will be nulled.
+    *
+    * @param c The {@link JComponent} that is having this UI uninstalled.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallDefaults();
+     uninstallListeners();
+     uninstallKeyboardActions();
+     menuBar = null;
+   }
+ 
+   protected class ChangeHandler implements ChangeListener
+   {
+     public void stateChanged(ChangeEvent event)
+     {
+     }
+   }
+ 
+   /**
+    * This class handles ContainerEvents fired by JMenuBar. It revalidates
+    * and repaints menu bar whenever menu is added or removed from it.
+    */
+   protected class ContainerHandler implements ContainerListener
+   {
+     /**
+      * This method is called whenever menu is added to the menu bar
+      *
+      * @param e The ContainerEvent.
+      */
+     public void componentAdded(ContainerEvent e)
+     {
+       menuBar.revalidate();
+       menuBar.repaint();
+     }
+ 
+     /**
+      * This method is called whenever menu is removed from the menu bar.
+      *
+      * @param e The ContainerEvent.
+      */
+     public void componentRemoved(ContainerEvent e)
+     {
+       menuBar.revalidate();
+       menuBar.repaint();
+     }
+   }
+ 
+   /**
+    * This class handles PropertyChangeEvents fired from the JMenuBar
+    */
+   protected class PropertyChangeHandler implements PropertyChangeListener
+   {
+     /**
+      * This method is called whenever one of the properties of the MenuBar
+      * changes.
+      *
+      * @param e The PropertyChangeEvent.
+      */
+     public void propertyChange(PropertyChangeEvent e)
+     {
+       if (e.getPropertyName().equals("borderPainted"))
+ 	menuBar.repaint();
+       if (e.getPropertyName().equals("margin"))
+ 	menuBar.repaint();
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicMenuItemUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicMenuItemUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicMenuItemUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicMenuItemUI.java	Wed Feb 16 20:02:53 2005
***************
*** 0 ****
--- 1,998 ----
+ /* BasicMenuItemUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.Rectangle;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ import java.util.ArrayList;
+ 
+ import javax.swing.Icon;
+ import javax.swing.JComponent;
+ import javax.swing.JMenu;
+ import javax.swing.JMenuItem;
+ import javax.swing.JPopupMenu;
+ import javax.swing.KeyStroke;
+ import javax.swing.MenuElement;
+ import javax.swing.MenuSelectionManager;
+ import javax.swing.SwingConstants;
+ import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.MenuDragMouseEvent;
+ import javax.swing.event.MenuDragMouseListener;
+ import javax.swing.event.MenuKeyEvent;
+ import javax.swing.event.MenuKeyListener;
+ import javax.swing.event.MouseInputListener;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.MenuItemUI;
+ 
+ /**
+  * UI Delegate for JMenuItem.
+  */
+ public class BasicMenuItemUI extends MenuItemUI
+ {
+   /**
+    * Font to be used when displaying menu item's accelerator.
+    */
+   protected Font acceleratorFont;
+ 
+   /**
+    * Color to be used when displaying menu item's accelerator.
+    */
+   protected Color acceleratorForeground;
+ 
+   /**
+    * Color to be used when displaying menu item's accelerator when menu item is
+    * selected.
+    */
+   protected Color acceleratorSelectionForeground;
+ 
+   /**
+    * Icon that is displayed after the text to indicated that this menu contains
+    * submenu.
+    */
+   protected Icon arrowIcon;
+ 
+   /**
+    * Icon that is displayed before the text. This icon is only used in
+    * JCheckBoxMenuItem or JRadioBoxMenuItem.
+    */
+   protected Icon checkIcon;
+ 
+   /**
+    * Number of spaces between icon and text.
+    */
+   protected int defaultTextIconGap = 4;
+ 
+   /**
+    * Color of the text when menu item is disabled
+    */
+   protected Color disabledForeground;
+ 
+   /**
+    * The menu Drag mouse listener listening to the menu item.
+    */
+   protected MenuDragMouseListener menuDragMouseListener;
+ 
+   /**
+    * The menu item itself
+    */
+   protected JMenuItem menuItem;
+ 
+   /**
+    * Menu Key listener listening to the menu item.
+    */
+   protected MenuKeyListener menuKeyListener;
+ 
+   /**
+    * mouse input listener listening to menu item.
+    */
+   protected MouseInputListener mouseInputListener;
+ 
+   /**
+    * Indicates if border should be painted
+    */
+   protected boolean oldBorderPainted;
+ 
+   /**
+    * Color of text that is used when menu item is selected
+    */
+   protected Color selectionBackground;
+ 
+   /**
+    * Color of the text that is used when menu item is selected.
+    */
+   protected Color selectionForeground;
+ 
+   /**
+    * String that separates description of the modifiers and the key
+    */
+   private String acceleratorDelimiter;
+ 
+   /**
+    * PropertyChangeListener to listen for property changes in the menu item
+    */
+   private PropertyChangeListener propertyChangeListener;
+ 
+   /**
+    * Number of spaces between accelerator and menu item's label.
+    */
+   private int defaultAcceleratorLabelGap = 4;
+ 
+   /**
+    * Creates a new BasicMenuItemUI object.
+    */
+   public BasicMenuItemUI()
+   {
+     mouseInputListener = createMouseInputListener(menuItem);
+     menuDragMouseListener = createMenuDragMouseListener(menuItem);
+     menuKeyListener = createMenuKeyListener(menuItem);
+     propertyChangeListener = new PropertyChangeHandler();
+   }
+ 
+   /**
+    * Create MenuDragMouseListener to listen for mouse dragged events.
+    *
+    * @param c menu item to listen to
+    *
+    * @return The MenuDragMouseListener
+    */
+   protected MenuDragMouseListener createMenuDragMouseListener(JComponent c)
+   {
+     return new MenuDragMouseHandler();
+   }
+ 
+   /**
+    * Creates MenuKeyListener to listen to key events occuring when menu item
+    * is visible on the screen.
+    *
+    * @param c menu item to listen to
+    *
+    * @return The MenuKeyListener
+    */
+   protected MenuKeyListener createMenuKeyListener(JComponent c)
+   {
+     return new MenuKeyHandler();
+   }
+ 
+   /**
+    * Handles mouse input events occuring for this menu item
+    *
+    * @param c menu item to listen to
+    *
+    * @return The MouseInputListener
+    */
+   protected MouseInputListener createMouseInputListener(JComponent c)
+   {
+     return new MouseInputHandler();
+   }
+ 
+   /**
+    * Factory method to create a BasicMenuItemUI for the given {@link
+    * JComponent}, which should be a {@link JMenuItem}.
+    *
+    * @param c The {@link JComponent} a UI is being created for.
+    *
+    * @return A BasicMenuItemUI for the {@link JComponent}.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicMenuItemUI();
+   }
+ 
+   /**
+    * Programatically clicks menu item.
+    *
+    * @param msm MenuSelectionManager for the menu hierarchy
+    */
+   protected void doClick(MenuSelectionManager msm)
+   {
+     menuItem.doClick();
+     msm.clearSelectedPath();
+   }
+ 
+   /**
+    * Returns maximum size for the specified menu item
+    *
+    * @param c component for which to get maximum size
+    *
+    * @return Maximum size for the specified menu item.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns minimum size for the specified menu item
+    *
+    * @param c component for which to get minimum size
+    *
+    * @return Minimum size for the specified menu item.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns path to this menu item.
+    *
+    * @return $MenuElement[]$ Returns array of menu elements
+    * that constitute a path to this menu item.
+    */
+   public MenuElement[] getPath()
+   {
+     ArrayList path = new ArrayList();
+ 
+     // Path to menu should also include its popup menu.
+     if (menuItem instanceof JMenu)
+       path.add(((JMenu) menuItem).getPopupMenu());
+ 
+     Component c = menuItem;
+     while (c instanceof MenuElement)
+       {
+ 	path.add(0, (MenuElement) c);
+ 
+ 	if (c instanceof JPopupMenu)
+ 	  c = ((JPopupMenu) c).getInvoker();
+ 	else
+ 	  c = c.getParent();
+       }
+ 
+     MenuElement[] pathArray = new MenuElement[path.size()];
+     path.toArray(pathArray);
+     return pathArray;
+   }
+ 
+   /**
+    * Returns preferred size for the given menu item.
+    *
+    * @param c menu item for which to get preferred size
+    * @param checkIcon chech icon displayed in the given menu item
+    * @param arrowIcon arrow icon displayed in the given menu item
+    * @param defaultTextIconGap space between icon and text in the given menuItem
+    *
+    * @return $Dimension$ preferred size for the given menu item
+    */
+   protected Dimension getPreferredMenuItemSize(JComponent c, Icon checkIcon,
+                                                Icon arrowIcon,
+                                                int defaultTextIconGap)
+   {
+     JMenuItem m = (JMenuItem) c;
+     Dimension d = BasicGraphicsUtils.getPreferredButtonSize(m,
+                                                             defaultTextIconGap);
+ 
+     // if menu item has accelerator then take accelerator's size into account
+     // when calculating preferred size.
+     KeyStroke accelerator = m.getAccelerator();
+     Rectangle rect;
+ 
+     if (accelerator != null)
+       {
+ 	rect = getAcceleratorRect(accelerator,
+ 	                          m.getToolkit().getFontMetrics(acceleratorFont));
+ 
+ 	// add width of accelerator's text
+ 	d.width = d.width + rect.width + defaultAcceleratorLabelGap;
+ 
+ 	// adjust the heigth of the preferred size if necessary
+ 	if (d.height < rect.height)
+ 	  d.height = rect.height;
+       }
+ 
+     if (checkIcon != null)
+       {
+ 	d.width = d.width + checkIcon.getIconWidth() + defaultTextIconGap;
+ 
+ 	if (checkIcon.getIconHeight() > d.height)
+ 	  d.height = checkIcon.getIconHeight();
+       }
+ 
+     if (arrowIcon != null && (c instanceof JMenu))
+       {
+ 	d.width = d.width + arrowIcon.getIconWidth() + defaultTextIconGap;
+ 
+ 	if (arrowIcon.getIconHeight() > d.height)
+ 	  d.height = arrowIcon.getIconHeight();
+       }
+ 
+     return d;
+   }
+ 
+   /**
+    * Returns preferred size of the given component
+    *
+    * @param c component for which to return preferred size
+    *
+    * @return $Dimension$ preferred size for the given component
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     return getPreferredMenuItemSize(c, checkIcon, arrowIcon, defaultTextIconGap);
+   }
+ 
+   protected String getPropertyPrefix()
+   {
+     return null;
+   }
+ 
+   /**
+    * This method installs the components for this {@link JMenuItem}.
+    *
+    * @param menuItem The {@link JMenuItem} to install components for.
+    */
+   protected void installComponents(JMenuItem menuItem)
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * This method installs the defaults that are defined in  the Basic look and
+    * feel for this {@link JMenuItem}.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     menuItem.setBackground(defaults.getColor("MenuItem.background"));
+     menuItem.setBorder(defaults.getBorder("MenuItem.border"));
+     menuItem.setFont(defaults.getFont("MenuItem.font"));
+     menuItem.setForeground(defaults.getColor("MenuItem.foreground"));
+     menuItem.setMargin(defaults.getInsets("MenuItem.margin"));
+     menuItem.setOpaque(true);
+     acceleratorFont = defaults.getFont("MenuItem.acceleratorFont");
+     acceleratorForeground = defaults.getColor("MenuItem.acceleratorForeground");
+     acceleratorSelectionForeground = defaults.getColor("MenuItem.acceleratorSelectionForeground");
+     selectionBackground = defaults.getColor("MenuItem.selectionBackground");
+     selectionForeground = defaults.getColor("MenuItem.selectionForeground");
+     acceleratorDelimiter = defaults.getString("MenuItem.acceleratorDelimiter");
+ 
+     menuItem.setHorizontalTextPosition(SwingConstants.TRAILING);
+     menuItem.setHorizontalAlignment(SwingConstants.LEADING);
+   }
+ 
+   /**
+    * This method installs the keyboard actions for this {@link JMenuItem}.
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * This method installs the listeners for the {@link JMenuItem}.
+    */
+   protected void installListeners()
+   {
+     menuItem.addMouseListener(mouseInputListener);
+     menuItem.addMouseMotionListener(mouseInputListener);
+     menuItem.addMenuDragMouseListener(menuDragMouseListener);
+     menuItem.addMenuKeyListener(menuKeyListener);
+     menuItem.addPropertyChangeListener(propertyChangeListener);
+   }
+ 
+   /**
+    * Installs and initializes all fields for this UI delegate. Any properties
+    * of the UI that need to be initialized and/or set to defaults will be
+    * done now. It will also install any listeners necessary.
+    *
+    * @param c The {@link JComponent} that is having this UI installed.
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+     menuItem = (JMenuItem) c;
+     installDefaults();
+     installComponents(menuItem);
+     installListeners();
+   }
+ 
+   /**
+    * Paints given menu item using specified graphics context
+    *
+    * @param g The graphics context used to paint this menu item
+    * @param c Menu Item to paint
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     paintMenuItem(g, c, checkIcon, arrowIcon, c.getBackground(),
+                   c.getForeground(), defaultTextIconGap);
+   }
+ 
+   /**
+    * Paints background of the menu item
+    *
+    * @param g The graphics context used to paint this menu item
+    * @param menuItem menu item to paint
+    * @param bgColor Background color to use when painting menu item
+    */
+   protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor)
+   {
+     Dimension size = getPreferredSize(menuItem);
+     Color foreground = g.getColor();
+     g.setColor(bgColor);
+     g.drawRect(0, 0, size.width, size.height);
+     g.setColor(foreground);
+   }
+ 
+   /**
+    * Paints specified menu item
+    *
+    * @param g The graphics context used to paint this menu item
+    * @param c menu item to paint
+    * @param checkIcon check icon to use when painting menu item
+    * @param arrowIcon arrow icon to use when painting menu item
+    * @param background Background color of the menu item
+    * @param foreground Foreground color of the menu item
+    * @param defaultTextIconGap space to use between icon and
+    *  text when painting menu item
+    */
+   protected void paintMenuItem(Graphics g, JComponent c, Icon checkIcon,
+                                Icon arrowIcon, Color background,
+                                Color foreground, int defaultTextIconGap)
+   {
+     JMenuItem m = (JMenuItem) c;
+     Rectangle tr = new Rectangle(); // text rectangle
+     Rectangle ir = new Rectangle(); // icon rectangle
+     Rectangle vr = new Rectangle(); // view rectangle
+     Rectangle br = new Rectangle(); // border rectangle
+     Rectangle ar = new Rectangle(); // accelerator rectangle
+     Rectangle cr = new Rectangle(); // checkIcon rectangle
+ 
+     int vertAlign = m.getVerticalAlignment();
+     int horAlign = m.getHorizontalAlignment();
+     int vertTextPos = m.getVerticalTextPosition();
+     int horTextPos = m.getHorizontalTextPosition();
+ 
+     Font f = m.getFont();
+     g.setFont(f);
+     FontMetrics fm = g.getFontMetrics(f);
+     SwingUtilities.calculateInnerArea(m, br);
+     SwingUtilities.calculateInsetArea(br, m.getInsets(), vr);
+     paintBackground(g, m, m.getBackground());
+ 
+     /* MenuItems insets are equal to menuItems margin, space between text and
+        menuItems border. We need to paint insets region as well. */
+     Insets insets = m.getInsets();
+     br.x -= insets.left;
+     br.y -= insets.top;
+     br.width += insets.right + insets.left;
+     br.height += insets.top + insets.bottom;
+ 
+     /* Menu item is considered to be highlighted when it is selected.
+        It is considered to be selected if menu item is inside some menu
+        and is armed or if it is both armed and pressed */
+     if (m.getModel().isArmed()
+         && (m.getParent() instanceof MenuElement || m.getModel().isPressed()))
+       {
+ 	if (m.isContentAreaFilled())
+ 	  {
+ 	    g.setColor(selectionBackground);
+ 	    g.fillRect(br.x, br.y, br.width, br.height);
+ 	  }
+       }
+     else
+       {
+ 	if (m.isContentAreaFilled())
+ 	  {
+ 	    g.setColor(m.getBackground());
+ 	    g.fillRect(br.x, br.y, br.width, br.height);
+ 	  }
+       }
+ 
+     // If this menu item is a JCheckBoxMenuItem then paint check icon
+     if (checkIcon != null)
+       {
+ 	SwingUtilities.layoutCompoundLabel(m, fm, null, checkIcon, vertAlign,
+ 	                                   horAlign, vertTextPos, horTextPos,
+ 	                                   vr, cr, tr, defaultTextIconGap);
+ 	checkIcon.paintIcon(m, g, cr.x, cr.y);
+ 
+ 	// We need to calculate position of the menu text and position of
+ 	// user menu icon if there exists one relative to the check icon.
+ 	// So we need to adjust view rectangle s.t. its starting point is at
+ 	// checkIcon.width + defaultTextIconGap. 
+ 	vr.x = cr.x + cr.width + defaultTextIconGap;
+       }
+ 
+     // if this is a submenu, then paint arrow icon to indicate it.
+     if (arrowIcon != null && (c instanceof JMenu))
+       {
+ 	if (! ((JMenu) c).isTopLevelMenu())
+ 	  {
+ 	    int width = arrowIcon.getIconWidth();
+ 	    int height = arrowIcon.getIconHeight();
+ 
+ 	    arrowIcon.paintIcon(m, g, vr.width - width + defaultTextIconGap,
+ 	                        vr.y + 2);
+ 	  }
+       }
+ 
+     // paint text and user menu icon if it exists	     
+     Icon i = m.getIcon();
+     SwingUtilities.layoutCompoundLabel(c, fm, m.getText(), i,
+                                        vertAlign, horAlign, vertTextPos,
+                                        horTextPos, vr, ir, tr,
+                                        defaultTextIconGap);
+     if (i != null)
+       i.paintIcon(c, g, ir.x, ir.y);
+ 
+     paintText(g, m, tr, m.getText());
+ 
+     // paint accelerator    
+     String acceleratorText = "";
+ 
+     if (m.getAccelerator() != null)
+       {
+ 	acceleratorText = getAcceleratorText(m.getAccelerator());
+ 	fm = g.getFontMetrics(acceleratorFont);
+ 	ar.width = fm.stringWidth(acceleratorText);
+ 	ar.x = br.width - ar.width;
+ 	vr.x = br.width - ar.width;
+ 
+ 	SwingUtilities.layoutCompoundLabel(m, fm, acceleratorText, null,
+ 	                                   vertAlign, horAlign, vertTextPos,
+ 	                                   horTextPos, vr, ir, ar,
+ 	                                   defaultTextIconGap);
+ 
+ 	paintAccelerator(g, m, ar, acceleratorText);
+       }
+   }
+ 
+   /**
+    * Paints label for the given menu item
+    *
+    * @param g The graphics context used to paint this menu item
+    * @param menuItem menu item for which to draw its label
+    * @param textRect rectangle specifiying position of the text relative to
+    * the given menu item
+    * @param text label of the menu item
+    */
+   protected void paintText(Graphics g, JMenuItem menuItem, Rectangle textRect,
+                            String text)
+   {
+     Font f = menuItem.getFont();
+     g.setFont(f);
+     FontMetrics fm = g.getFontMetrics(f);
+ 
+     if (text != null && ! text.equals(""))
+       {
+ 	if (menuItem.isEnabled())
+ 	  g.setColor(menuItem.getForeground());
+ 	else
+ 	  // FIXME: should fix this to use 'disabledForeground', but its
+ 	  // default value in BasicLookAndFeel is null.	  
+ 	  g.setColor(Color.gray);
+ 
+ 	int mnemonicIndex = menuItem.getDisplayedMnemonicIndex();
+ 
+ 	if (mnemonicIndex != -1)
+ 	  BasicGraphicsUtils.drawStringUnderlineCharAt(g, text, mnemonicIndex,
+ 	                                               textRect.x,
+ 	                                               textRect.y
+ 	                                               + fm.getAscent());
+ 	else
+ 	  BasicGraphicsUtils.drawString(g, text, 0, textRect.x,
+ 	                                textRect.y + fm.getAscent());
+       }
+   }
+ 
+   /**
+    * This method uninstalls the components for this {@link JMenuItem}.
+    *
+    * @param menuItem The {@link JMenuItem} to uninstall components for.
+    */
+   protected void uninstallComponents(JMenuItem menuItem)
+   {
+     // FIXME: need to implement
+   }
+ 
+   /**
+    * This method uninstalls the defaults and sets any objects created during
+    * install to null
+    */
+   protected void uninstallDefaults()
+   {
+     menuItem.setForeground(null);
+     menuItem.setBackground(null);
+     menuItem.setBorder(null);
+     menuItem.setMargin(null);
+     menuItem.setBackground(null);
+     menuItem.setBorder(null);
+     menuItem.setFont(null);
+     menuItem.setForeground(null);
+     menuItem.setMargin(null);
+     acceleratorFont = null;
+     acceleratorForeground = null;
+     acceleratorSelectionForeground = null;
+     arrowIcon = null;
+     selectionBackground = null;
+     selectionForeground = null;
+     acceleratorDelimiter = null;
+   }
+ 
+   /**
+    * Uninstalls any keyboard actions.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: need to implement
+   }
+ 
+   /**
+    * Unregisters all the listeners that this UI delegate was using.
+    */
+   protected void uninstallListeners()
+   {
+     menuItem.removeMouseListener(mouseInputListener);
+     menuItem.removeMenuDragMouseListener(menuDragMouseListener);
+     menuItem.removeMenuKeyListener(menuKeyListener);
+     menuItem.removePropertyChangeListener(propertyChangeListener);
+   }
+ 
+   /**
+    * Performs the opposite of installUI. Any properties or resources that need
+    * to be cleaned up will be done now. It will also uninstall any listeners
+    * it has. In addition, any properties of this UI will be nulled.
+    *
+    * @param c The {@link JComponent} that is having this UI uninstalled.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallListeners();
+     uninstallDefaults();
+     uninstallComponents(menuItem);
+     menuItem = null;
+   }
+ 
+   /**
+    * This method calls paint.
+    *
+    * @param g The graphics context used to paint this menu item
+    * @param c The menu item to paint
+    */
+   public void update(Graphics g, JComponent c)
+   {
+     paint(g, c);
+   }
+ 
+   /**
+    * Return text representation of the specified accelerator
+    *
+    * @param accelerator Accelerator for which to return string representation
+    *
+    * @return $String$ Text representation of the given accelerator
+    */
+   private String getAcceleratorText(KeyStroke accelerator)
+   {
+     // convert keystroke into string format
+     String modifiersText = "";
+     int modifiers = accelerator.getModifiers();
+     char keyChar = accelerator.getKeyChar();
+     int keyCode = accelerator.getKeyCode();
+ 
+     if (modifiers != 0)
+       modifiersText = KeyEvent.getKeyModifiersText(modifiers)
+                       + acceleratorDelimiter;
+ 
+     if (keyCode == KeyEvent.VK_UNDEFINED)
+       return modifiersText + keyChar;
+     else
+       return modifiersText + KeyEvent.getKeyText(keyCode);
+   }
+ 
+   /**
+    * Calculates and return rectange in which accelerator should be displayed
+    *
+    * @param accelerator accelerator for which to return the display rectangle
+    * @param fm The font metrics used to measure the text
+    *
+    * @return $Rectangle$ reactangle which will be used to display accelerator
+    */
+   private Rectangle getAcceleratorRect(KeyStroke accelerator, FontMetrics fm)
+   {
+     int width = fm.stringWidth(getAcceleratorText(accelerator));
+     int height = fm.getHeight();
+     return new Rectangle(0, 0, width, height);
+   }
+ 
+   /**
+    * Paints accelerator inside menu item
+    *
+    * @param g The graphics context used to paint the border
+    * @param menuItem Menu item for which to draw accelerator
+    * @param acceleratorRect rectangle representing position
+    * of the accelerator relative to the menu item
+    * @param acceleratorText accelerator's text
+    */
+   private void paintAccelerator(Graphics g, JMenuItem menuItem,
+                                 Rectangle acceleratorRect,
+                                 String acceleratorText)
+   {
+     g.setFont(acceleratorFont);
+     FontMetrics fm = g.getFontMetrics(acceleratorFont);
+ 
+     if (menuItem.isEnabled())
+       g.setColor(acceleratorForeground);
+     else
+       // FIXME: should fix this to use 'disabledForeground', but its
+       // default value in BasicLookAndFeel is null.
+       g.setColor(Color.gray);
+ 
+     BasicGraphicsUtils.drawString(g, acceleratorText, 0, acceleratorRect.x,
+                                   acceleratorRect.y + fm.getAscent());
+   }
+ 
+   /**
+    * This class handles mouse events occuring inside the menu item.
+    * Most of the events are forwarded for processing to MenuSelectionManager
+    * of the current menu hierarchy.
+    *
+    */
+   protected class MouseInputHandler implements MouseInputListener
+   {
+     /**
+      * Creates a new MouseInputHandler object.
+      */
+     protected MouseInputHandler()
+     {
+     }
+ 
+     /**
+      * This method is called when mouse is clicked on the menu item.
+      * It forwards this event to MenuSelectionManager.
+      *
+      * @param e A {@link MouseEvent}.
+      */
+     public void mouseClicked(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.processMouseEvent(e);
+     }
+ 
+     /**
+      * This method is called when mouse is dragged inside the menu item.
+      * It forwards this event to MenuSelectionManager.
+      *
+      * @param e A {@link MouseEvent}.
+      */
+     public void mouseDragged(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.processMouseEvent(e);
+     }
+ 
+     /**
+      * This method is called when mouse enters menu item.
+      * When this happens menu item is considered to be selected and selection path
+      * in MenuSelectionManager is set. This event is also forwarded to MenuSelection
+      * Manager for further processing.
+      *
+      * @param e A {@link MouseEvent}.
+      */
+     public void mouseEntered(MouseEvent e)
+     {
+       Component source = (Component) e.getSource();
+       if (source.getParent() instanceof MenuElement)
+         {
+ 	  MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+ 	  manager.setSelectedPath(getPath());
+ 	  manager.processMouseEvent(e);
+         }
+     }
+ 
+     /**
+      * This method is called when mouse exits menu item. The event is
+      * forwarded to MenuSelectionManager for processing.
+      *
+      * @param e A {@link MouseEvent}.
+      */
+     public void mouseExited(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.processMouseEvent(e);
+     }
+ 
+     /**
+      * This method is called when mouse is inside the menu item.
+      * This event is forwarder to MenuSelectionManager for further processing.
+      *
+      * @param e A {@link MouseEvent}.
+      */
+     public void mouseMoved(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.processMouseEvent(e);
+     }
+ 
+     /**
+      * This method is called when mouse is pressed. This event is forwarded to
+      * MenuSelectionManager for further processing.
+      *
+      * @param e A {@link MouseEvent}.
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.processMouseEvent(e);
+     }
+ 
+     /**
+      * This method is called when mouse is released. If the mouse is released
+      * inside this menuItem, then this menu item is considered to be chosen and
+      * the menu hierarchy should be closed.
+      *
+      * @param e A {@link MouseEvent}.
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       Rectangle size = menuItem.getBounds();
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       if (e.getX() > 0 && e.getX() < size.width && e.getY() > 0
+           && e.getY() < size.height)
+         {
+ 	  manager.clearSelectedPath();
+ 	  menuItem.doClick();
+         }
+ 
+       else
+ 	manager.processMouseEvent(e);
+     }
+   }
+ 
+   /**
+    * This class handles mouse dragged events.
+    */
+   protected class MenuDragMouseHandler implements MenuDragMouseListener
+   {
+     /**
+      * Tbis method is invoked when mouse is dragged over the menu item.
+      *
+      * @param e The MenuDragMouseEvent
+      */
+     public void menuDragMouseDragged(MenuDragMouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.setSelectedPath(e.getPath());
+     }
+ 
+     /**
+      * Tbis method is invoked when mouse enters the menu item while it is
+      * being dragged.
+      *
+      * @param e The MenuDragMouseEvent
+      */
+     public void menuDragMouseEntered(MenuDragMouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.setSelectedPath(e.getPath());
+     }
+ 
+     /**
+      * Tbis method is invoked when mouse exits the menu item while
+      * it is being dragged
+      *
+      * @param e The MenuDragMouseEvent
+      */
+     public void menuDragMouseExited(MenuDragMouseEvent e)
+     {
+     }
+ 
+     /**
+      * Tbis method is invoked when mouse was dragged and released
+      * inside the menu item.
+      *
+      * @param e The MenuDragMouseEvent
+      */
+     public void menuDragMouseReleased(MenuDragMouseEvent e)
+     {
+       MenuElement[] path = e.getPath();
+ 
+       if (path[path.length - 1] instanceof JMenuItem)
+ 	((JMenuItem) path[path.length - 1]).doClick();
+ 
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.clearSelectedPath();
+     }
+   }
+ 
+   /**
+    * This class handles key events occuring when menu item is visible on the
+    * screen.
+    */
+   protected class MenuKeyHandler implements MenuKeyListener
+   {
+     /**
+      * This method is invoked when key has been pressed
+      *
+      * @param e A {@link MenuKeyEvent}.
+      */
+     public void menuKeyPressed(MenuKeyEvent e)
+     {
+     }
+ 
+     /**
+      * This method is invoked when key has been pressed
+      *
+      * @param e A {@link MenuKeyEvent}.
+      */
+     public void menuKeyReleased(MenuKeyEvent e)
+     {
+     }
+ 
+     /**
+      * This method is invoked when key has been typed
+      * It handles the mnemonic key for the menu item.
+      *
+      * @param e A {@link MenuKeyEvent}.
+      */
+     public void menuKeyTyped(MenuKeyEvent e)
+     {
+     }
+   }
+ 
+   /**
+    * Helper class that listens for changes to the properties of the {@link
+    * JMenuItem}.
+    */
+   protected class PropertyChangeHandler implements PropertyChangeListener
+   {
+     /**
+      * This method is called when one of the menu item's properties change.
+      *
+      * @param evt A {@link PropertyChangeEvent}.
+      */
+     public void propertyChange(PropertyChangeEvent evt)
+     {
+       menuItem.revalidate();
+       menuItem.repaint();
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicMenuUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicMenuUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicMenuUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicMenuUI.java	Wed Feb 16 20:02:54 2005
***************
*** 0 ****
--- 1,518 ----
+ /* BasicMenuUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Dimension;
+ import java.awt.event.MouseEvent;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JMenu;
+ import javax.swing.JMenuBar;
+ import javax.swing.JPopupMenu;
+ import javax.swing.MenuSelectionManager;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ import javax.swing.event.MenuDragMouseEvent;
+ import javax.swing.event.MenuDragMouseListener;
+ import javax.swing.event.MenuEvent;
+ import javax.swing.event.MenuKeyEvent;
+ import javax.swing.event.MenuKeyListener;
+ import javax.swing.event.MenuListener;
+ import javax.swing.event.MouseInputListener;
+ import javax.swing.plaf.ComponentUI;
+ 
+ /**
+  * UI Delegate for JMenu
+  */
+ public class BasicMenuUI extends BasicMenuItemUI
+ {
+   protected ChangeListener changeListener;
+ 
+   /* MenuListener listens to MenuEvents fired by JMenu */
+   protected MenuListener menuListener;
+ 
+   /* PropertyChangeListner that listens to propertyChangeEvents occuring in JMenu*/
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /**
+    * Creates a new BasicMenuUI object.
+    */
+   public BasicMenuUI()
+   {
+     mouseInputListener = createMouseInputListener((JMenu) menuItem);
+     menuListener = createMenuListener((JMenu) menuItem);
+     propertyChangeListener = createPropertyChangeListener((JMenu) menuItem);
+   }
+ 
+   /**
+    * This method creates a new ChangeListener.
+    *
+    * @return A new ChangeListener.
+    */
+   protected ChangeListener createChangeListener(JComponent c)
+   {
+     return new ChangeHandler();
+   }
+ 
+   /**
+    * This method creates new MenuDragMouseListener to listen to mouse dragged events
+    * occuring in the Menu
+    *
+    * @param c the menu to listen to
+    *
+    * @return The MenuDrageMouseListener
+    */
+   protected MenuDragMouseListener createMenuDragMouseListener(JComponent c)
+   {
+     return new MenuDragMouseHandler();
+   }
+ 
+   /**
+    * This method creates new MenuDragKeyListener to listen to key events
+    *
+    * @param c the menu to listen to
+    *
+    * @return The MenuKeyListener
+    */
+   protected MenuKeyListener createMenuKeyListener(JComponent c)
+   {
+     return new MenuKeyHandler();
+   }
+ 
+   /**
+    * This method creates new MenuListener to listen to menu events
+    * occuring in the Menu
+    *
+    * @param c the menu to listen to
+    *
+    * @return The MenuListener
+    */
+   protected MenuListener createMenuListener(JComponent c)
+   {
+     return new MenuHandler();
+   }
+ 
+   /**
+    * This method creates new MouseInputListener to listen to mouse input events
+    * occuring in the Menu
+    *
+    * @param c the menu to listen to
+    *
+    * @return The MouseInputListener
+    */
+   protected MouseInputListener createMouseInputListener(JComponent c)
+   {
+     return new MouseInputHandler();
+   }
+ 
+   /**
+    * This method creates newPropertyChangeListener to listen to property changes
+    * occuring in the Menu
+    *
+    * @param c the menu to listen to
+    *
+    * @return The PropertyChangeListener
+    */
+   protected PropertyChangeListener createPropertyChangeListener(JComponent c)
+   {
+     return new PropertyChangeHandler();
+   }
+ 
+   /**
+    * This method creates a new BasicMenuUI.
+    *
+    * @param c The JComponent to create a UI for.
+    *
+    * @return A new BasicMenuUI.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicMenuUI();
+   }
+ 
+   /**
+    * Get the component's maximum size.
+    *
+    * @param c The JComponent for which to get maximum size
+    *
+    * @return The maximum size of the component
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return null;
+   }
+ 
+   protected String getPropertyPrefix()
+   {
+     return null;
+   }
+ 
+   /**
+    * Initializes any default properties that this UI has from the defaults for
+    * the Basic look and feel.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     menuItem.setBackground(defaults.getColor("Menu.background"));
+     menuItem.setBorder(defaults.getBorder("Menu.border"));
+     menuItem.setFont(defaults.getFont("Menu.font"));
+     menuItem.setForeground(defaults.getColor("Menu.foreground"));
+     menuItem.setMargin(defaults.getInsets("Menu.margin"));
+     acceleratorFont = defaults.getFont("Menu.acceleratorFont");
+     acceleratorForeground = defaults.getColor("Menu.acceleratorForeground");
+     acceleratorSelectionForeground = defaults.getColor("Menu.acceleratorSelectionForeground");
+     selectionBackground = defaults.getColor("Menu.selectionBackground");
+     selectionForeground = defaults.getColor("Menu.selectionForeground");
+     arrowIcon = defaults.getIcon("Menu.arrowIcon");
+     oldBorderPainted = defaults.getBoolean("Menu.borderPainted");
+     menuItem.setOpaque(true);
+   }
+ 
+   /**
+    * Installs any keyboard actions. The list of keys that need to be bound are
+    * listed in Basic look and feel's defaults.
+    *
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * Creates and registers all the listeners for this UI delegate.
+    */
+   protected void installListeners()
+   {
+     ((JMenu) menuItem).addMouseListener(mouseInputListener);
+     ((JMenu) menuItem).addMouseMotionListener(mouseInputListener);
+     ((JMenu) menuItem).addMenuListener(menuListener);
+     ((JMenu) menuItem).addMenuDragMouseListener(menuDragMouseListener);
+   }
+ 
+   protected void setupPostTimer(JMenu menu)
+   {
+   }
+ 
+   /**
+    * This method uninstalls the defaults and sets any objects created during
+    * install to null
+    */
+   protected void uninstallDefaults()
+   {
+     menuItem.setBackground(null);
+     menuItem.setBorder(null);
+     menuItem.setFont(null);
+     menuItem.setForeground(null);
+     menuItem.setMargin(null);
+     acceleratorFont = null;
+     acceleratorForeground = null;
+     acceleratorSelectionForeground = null;
+     selectionBackground = null;
+     selectionForeground = null;
+     arrowIcon = null;
+   }
+ 
+   /**
+    * Uninstalls any keyboard actions. The list of keys used  are listed in
+    * Basic look and feel's defaults.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * Unregisters all the listeners that this UI delegate was using. In
+    * addition, it will also null any listeners that it was using.
+    */
+   protected void uninstallListeners()
+   {
+     ((JMenu) menuItem).removeMouseListener(mouseInputListener);
+     ((JMenu) menuItem).removeMenuListener(menuListener);
+     ((JMenu) menuItem).removePropertyChangeListener(propertyChangeListener);
+   }
+ 
+   /**
+    * This class is used by menus to handle mouse events occuring in the
+    * menu.
+    */
+   protected class MouseInputHandler implements MouseInputListener
+   {
+     public void mouseClicked(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.processMouseEvent(e);
+     }
+ 
+     public void mouseDragged(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.processMouseEvent(e);
+     }
+ 
+     public void mouseEntered(MouseEvent e)
+     {
+       /* When mouse enters menu item, it should be considered selected
+ 
+        if (i) if this menu is a submenu in some other menu
+           (ii) or if this menu is in a menu bar and some other menu in a menu bar was just
+                selected. (If nothing was selected, menu should be pressed before
+                it will be selected)
+       */
+       JMenu menu = (JMenu) menuItem;
+       if (! menu.isTopLevelMenu()
+           || (menu.isTopLevelMenu()
+           && (((JMenuBar) menu.getParent()).isSelected() && ! menu.isArmed())))
+         {
+ 	  // set new selection and forward this event to MenuSelectionManager
+ 	  MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+ 	  manager.setSelectedPath(getPath());
+ 	  manager.processMouseEvent(e);
+         }
+     }
+ 
+     public void mouseExited(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.processMouseEvent(e);
+     }
+ 
+     public void mouseMoved(MouseEvent e)
+     {
+     }
+ 
+     public void mousePressed(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       JMenu menu = (JMenu) menuItem;
+       manager.processMouseEvent(e);
+ 
+       // Menu should be displayed when the menu is pressed only if 
+       // it is top-level menu
+       if (menu.isTopLevelMenu())
+         {
+ 	  if (menu.getPopupMenu().isVisible())
+ 	    // If menu is visible and menu button was pressed.. 
+ 	    // then need to cancel the menu
+ 	    manager.clearSelectedPath();
+ 	  else
+ 	    {
+ 	      // Display the menu
+ 	      int x = 0;
+ 	      int y = menu.getHeight();
+ 
+ 	      manager.setSelectedPath(getPath());
+ 
+ 	      JMenuBar mb = (JMenuBar) menu.getParent();
+ 
+ 	      // set selectedIndex of the selectionModel of a menuBar
+ 	      mb.getSelectionModel().setSelectedIndex(mb.getComponentIndex(menu));
+ 	    }
+         }
+     }
+ 
+     public void mouseReleased(MouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.processMouseEvent(e);
+     }
+   }
+ 
+   /**
+    * This class handles MenuEvents fired by the JMenu
+    */
+   protected class MenuHandler implements MenuListener
+   {
+     /**
+      * This method is called when menu is cancelled. The menu is cancelled
+      * when its popup menu is closed without selection. It clears selected index
+      * in the selectionModel of the menu parent.
+      *
+      * @param e The MenuEvent.
+      */
+     public void menuCanceled(MenuEvent e)
+     {
+       menuDeselected(e);
+     }
+ 
+     /**
+      * This method is called when menu is deselected. It clears selected index
+      * in the selectionModel of the menu parent.
+      *
+      * @param e The MenuEvent.
+      */
+     public void menuDeselected(MenuEvent e)
+     {
+       JMenu menu = (JMenu) menuItem;
+       if (menu.isTopLevelMenu())
+ 	((JMenuBar) menu.getParent()).getSelectionModel().clearSelection();
+       else
+ 	((JPopupMenu) menu.getParent()).getSelectionModel().clearSelection();
+     }
+ 
+     /**
+      * This method is called when menu is selected.  It sets selected index
+      * in the selectionModel of the menu parent.
+      *
+      * @param e The MenuEvent.
+      */
+     public void menuSelected(MenuEvent e)
+     {
+       JMenu menu = (JMenu) menuItem;
+       if (menu.isTopLevelMenu())
+ 	((JMenuBar) menu.getParent()).setSelected(menu);
+       else
+ 	((JPopupMenu) menu.getParent()).setSelected(menu);
+     }
+   }
+ 
+   /**
+    * This class handles PropertyChangeEvents fired from the JMenu
+    */
+   protected class PropertyChangeHandler implements PropertyChangeListener
+   {
+     /**
+       * This method is called whenever one of the properties of the menu item
+       * changes.
+       *
+       * @param e The PropertyChangeEvent.
+       */
+     public void propertyChange(PropertyChangeEvent evt)
+     {
+     }
+   }
+ 
+   protected class ChangeHandler implements ChangeListener
+   {
+     public void stateChanged(ChangeEvent e)
+     {
+       // FIXME: It seems that this class is not used anywhere
+     }
+   }
+ 
+   /**
+    * This class handles mouse dragged events occuring in the menu.
+    */
+   protected class MenuDragMouseHandler implements MenuDragMouseListener
+   {
+     /**
+      * This method is invoked when mouse is dragged over the menu item.
+      *
+      * @param e The MenuDragMouseEvent
+      */
+     public void menuDragMouseDragged(MenuDragMouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.setSelectedPath(e.getPath());
+     }
+ 
+     /**
+      * This method is invoked when mouse enters the menu item while it is
+      * being dragged.
+      *
+      * @param e The MenuDragMouseEvent
+      */
+     public void menuDragMouseEntered(MenuDragMouseEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.setSelectedPath(e.getPath());
+     }
+ 
+     /**
+      * This method is invoked when mouse exits the menu item while
+      * it is being dragged
+      *
+      * @param e The MenuDragMouseEvent
+      */
+     public void menuDragMouseExited(MenuDragMouseEvent e)
+     {
+     }
+ 
+     /**
+      * This method is invoked when mouse was dragged and released
+      * inside the menu item.
+      *
+      * @param e The MenuDragMouseEvent
+      */
+     public void menuDragMouseReleased(MenuDragMouseEvent e)
+     {
+     }
+   }
+ 
+   /**
+    * This class handles key events occuring when menu item is visible on the
+    * screen.
+    */
+   protected class MenuKeyHandler implements MenuKeyListener
+   {
+     /**
+      * This method is invoked when key has been pressed
+      *
+      * @param e A {@link MenuKeyEvent}.
+      */
+     public void menuKeyPressed(MenuKeyEvent e)
+     {
+     }
+ 
+     /**
+      * This method is invoked when key has been pressed
+      *
+      * @param e A {@link MenuKeyEvent}.
+      */
+     public void menuKeyReleased(MenuKeyEvent e)
+     {
+     }
+ 
+     /**
+      * This method is invoked when key has been typed
+      * It handles the mnemonic key for the menu item.
+      *
+      * @param e A {@link MenuKeyEvent}.
+      */
+     public void menuKeyTyped(MenuKeyEvent e)
+     {
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicOptionPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicOptionPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicOptionPaneUI.java	Sat Jan 10 21:59:30 2004
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicOptionPaneUI.java	Wed Feb 16 20:02:54 2005
***************
*** 1,5 ****
! /* BasicOptionPaneUI.java
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BasicOptionPaneUI.java --
!    Copyright (C) 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,158 ****
  
  package javax.swing.plaf.basic;
  
  import java.awt.Component;
  import java.awt.Dimension;
  import java.awt.LayoutManager;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import javax.swing.JButton;
  import javax.swing.JComponent;
  import javax.swing.JLabel;
  import javax.swing.JOptionPane;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.OptionPaneUI;
  
  public class BasicOptionPaneUI extends OptionPaneUI
  {
!     JOptionPane pane;
  
!     BasicOptionPaneUI()
      {
      }
  
!     public static ComponentUI createUI(JComponent x) 
      {
!         return new BasicOptionPaneUI();
      }
  
!     public void installUI(JComponent c)
      {
! 	super.installUI(c);
! 	pane = (JOptionPane)c;
  
! 	System.out.println("     -------------: " + pane);
  
! 	JLabel  message   = null;
! 	JButton ok_button = new JButton("Ok");	
  
! 	ok_button.addActionListener(new ActionListener()
! 	    {
! 		public void actionPerformed(ActionEvent a)
! 		{
! 		    System.out.println("ACTION ---> " + a);
! 		    //		    pane.dialog.dispose();
  
! 		    if (pane.dialog.isModal())
! 			{
! 			    System.out.println("modal dialog !!");
! 			    pane.dialog.setModal(false);
! 			}
! 		    pane.dialog.setVisible(false);
! 		}
! 	    });
  
! 	Object[] options = null;
! 	if (options != null)
  	    {
! 		for (int i=0; i<options.length; i++)
! 		    {
! 			Object o = options[i];
! 			if (o != null)
! 			    {
! 				if (o instanceof String)
! 				    {
! 					String s = (String) o;
! 					JLabel m = new JLabel(s);
! 					pane.add(m);
! 				    }
! 				else if (o instanceof Component)
! 				    {
! 					Component com = (Component) o;
! 					pane.add(com);
! 				    }
! 				else
! 				    {
! 					System.out.println("UNRECOGNIZED ARG: " + o);
! 				    }
! 			    }
! 		    }
  	    }
  
! 	pane.add(message);
! 	pane.add(ok_button);
      }
  
!     Dimension getMinimumOptionPaneSize()
      {
! 	return new Dimension(300,100);
      }
  
!     public Dimension getPreferredSize(JComponent c)
      {
! 	if (c == null)
! 	    return getMinimumOptionPaneSize();
  
! 	if (c != pane)
! 	    return null;
  
! 	LayoutManager l  = c.getLayout();
! 	if (l == null)
! 	    return getMinimumOptionPaneSize();
  
! 	Dimension d1 = l.preferredLayoutSize(c);
! 	Dimension d2 = getMinimumOptionPaneSize();
! 	
! 	d1.width = Math.max(d1.width, d2.width);
! 	d1.height = Math.max(d1.height, d2.height);
  
! 	return d2;
      }
  
!   public void selectInitialValue(JOptionPane op)
    {
!      throw new Error ("Not implemented");
    }
  
    public boolean containsCustomComponents(JOptionPane op)
    {
!      throw new Error ("Not implemented");
    }
  }
--- 38,1326 ----
  
  package javax.swing.plaf.basic;
  
+ import java.awt.BorderLayout;
+ import java.awt.Color;
  import java.awt.Component;
+ import java.awt.Container;
  import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.GridBagConstraints;
+ import java.awt.GridBagLayout;
+ import java.awt.Insets;
  import java.awt.LayoutManager;
+ import java.awt.Polygon;
+ import java.awt.Window;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ import java.beans.PropertyVetoException;
+ 
+ import javax.swing.Box;
+ import javax.swing.BoxLayout;
+ import javax.swing.Icon;
  import javax.swing.JButton;
+ import javax.swing.JComboBox;
  import javax.swing.JComponent;
+ import javax.swing.JDialog;
+ import javax.swing.JInternalFrame;
  import javax.swing.JLabel;
+ import javax.swing.JList;
  import javax.swing.JOptionPane;
+ import javax.swing.JPanel;
+ import javax.swing.JTextField;
+ import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.border.Border;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.OptionPaneUI;
  
+ /**
+  * This class is the UI delegate for JOptionPane in the Basic Look and Feel.
+  */
  public class BasicOptionPaneUI extends OptionPaneUI
  {
!   /**
!    * This is a helper class that listens to the buttons located at the bottom
!    * of the JOptionPane.
!    */
!   protected class ButtonActionListener implements ActionListener
!   {
!     /** The index of the option this button represents. */
!     protected int buttonIndex;
  
!     /**
!      * Creates a new ButtonActionListener object with the given buttonIndex.
!      *
!      * @param buttonIndex The index of the option this button represents.
!      */
!     public ButtonActionListener(int buttonIndex)
      {
+       this.buttonIndex = buttonIndex;
      }
  
!     /**
!      * This method is called when one of the option buttons are pressed.
!      *
!      * @param e The ActionEvent.
!      */
!     public void actionPerformed(ActionEvent e)
      {
!       Object value = new Integer(JOptionPane.CLOSED_OPTION);
!       Object[] options = optionPane.getOptions();
!       if (options != null)
! 	value = new Integer(buttonIndex);
!       else
!         {
! 	  String text = ((JButton) e.getSource()).getText();
! 	  if (text.equals(OK_STRING))
! 	    value = new Integer(JOptionPane.OK_OPTION);
! 	  if (text.equals(CANCEL_STRING))
! 	    value = new Integer(JOptionPane.CANCEL_OPTION);
! 	  if (text.equals(YES_STRING))
! 	    value = new Integer(JOptionPane.YES_OPTION);
! 	  if (text.equals(NO_STRING))
! 	    value = new Integer(JOptionPane.NO_OPTION);
!         }
!       optionPane.setValue(value);
!       resetInputValue();
! 
!       Window owner = SwingUtilities.windowForComponent(optionPane);
! 
!       if (owner instanceof JDialog)
! 	((JDialog) owner).dispose();
! 
!       //else we probably have some kind of internal frame.
!       JInternalFrame inf = (JInternalFrame) SwingUtilities.getAncestorOfClass(JInternalFrame.class,
!                                                                               optionPane);
!       if (inf != null)
!         {
! 	  try
! 	    {
! 	      inf.setClosed(true);
! 	    }
! 	  catch (PropertyVetoException pve)
! 	    {
! 	    }
!         }
      }
+   }
  
!   /**
!    * This helper layout manager is responsible for the layout of the button
!    * area. The button area is the panel that holds the buttons which
!    * represent the options.
!    */
!   protected class ButtonAreaLayout implements LayoutManager
!   {
!     /** Whether this layout will center the buttons. */
!     protected boolean centersChildren = true;
! 
!     /** The space between the buttons. */
!     protected int padding;
! 
!     /** Whether the buttons will share the same widths. */
!     protected boolean syncAllWidths;
! 
!     /** The width of the widest button. */
!     private transient int widthOfWidestButton;
! 
!     /** The height of the tallest button. */
!     private transient int tallestButton;
! 
!     /**
!      * Creates a new ButtonAreaLayout object with the given sync widths
!      * property and padding.
!      *
!      * @param syncAllWidths Whether the buttons will share the same widths.
!      * @param padding The padding between the buttons.
!      */
!     public ButtonAreaLayout(boolean syncAllWidths, int padding)
      {
!       this.syncAllWidths = syncAllWidths;
!       this.padding = padding;
!     }
  
!     /**
!      * This method is called when a component is added to the container.
!      *
!      * @param string The constraints string.
!      * @param comp The component added.
!      */
!     public void addLayoutComponent(String string, Component comp)
!     {
!       // Do nothing.
!     }
  
!     /**
!      * This method returns whether the children will be centered.
!      *
!      * @return Whether the children will be centered.
!      */
!     public boolean getCentersChildren()
!     {
!       return centersChildren;
!     }
  
!     /**
!      * This method returns the amount of space between components.
!      *
!      * @return The amount of space between components.
!      */
!     public int getPadding()
!     {
!       return padding;
!     }
  
!     /**
!      * This method returns whether all components will share widths (set to
!      * largest width).
!      *
!      * @return Whether all components will share widths.
!      */
!     public boolean getSyncAllWidths()
!     {
!       return syncAllWidths;
!     }
  
!     /**
!      * This method lays out the given container.
!      *
!      * @param container The container to lay out.
!      */
!     public void layoutContainer(Container container)
!     {
!       Component[] buttonList = container.getComponents();
!       int x = container.getInsets().left;
!       if (getCentersChildren())
! 	x += (int) ((double) (container.getSize().width) / 2
! 	- (double) (buttonRowLength(container)) / 2);
!       for (int i = 0; i < buttonList.length; i++)
!         {
! 	  Dimension dims = buttonList[i].getPreferredSize();
! 	  if (getSizeButtonsToSameWidth())
  	    {
! 	      buttonList[i].setBounds(x, 0, widthOfWidestButton, dims.height);
! 	      x += widthOfWidestButton + getPadding();
! 	    }
! 	  else
! 	    {
! 	      buttonList[i].setBounds(x, 0, dims.width, dims.height);
! 	      x += dims.width + getPadding();
  	    }
+         }
+     }
  
!     /**
!      * This method returns the width of the given container taking into
!      * consideration the padding and syncAllWidths.
!      *
!      * @param c The container to calculate width for.
!      *
!      * @return The width of the given container.
!      */
!     private int buttonRowLength(Container c)
!     {
!       Component[] buttonList = c.getComponents();
! 
!       int buttonLength = 0;
!       int widest = 0;
!       int tallest = 0;
! 
!       for (int i = 0; i < buttonList.length; i++)
!         {
! 	  Dimension dims = buttonList[i].getPreferredSize();
! 	  buttonLength += dims.width + getPadding();
! 	  widest = Math.max(widest, dims.width);
! 	  tallest = Math.max(tallest, dims.height);
!         }
! 
!       widthOfWidestButton = widest;
!       tallestButton = tallest;
! 
!       int width;
!       if (getSyncAllWidths())
! 	width = widest * buttonList.length
! 	        + getPadding() * (buttonList.length - 1);
!       else
! 	width = buttonLength;
! 
!       Insets insets = c.getInsets();
!       width += insets.left + insets.right;
! 
!       return width;
      }
  
!     /**
!      * This method returns the minimum layout size for the given container.
!      *
!      * @param c The container to measure.
!      *
!      * @return The minimum layout size.
!      */
!     public Dimension minimumLayoutSize(Container c)
      {
!       return preferredLayoutSize(c);
      }
  
!     /**
!      * This method returns the preferred size of the given container.
!      *
!      * @param c The container to measure.
!      *
!      * @return The preferred size.
!      */
!     public Dimension preferredLayoutSize(Container c)
      {
!       int w = buttonRowLength(c);
  
!       return new Dimension(w, tallestButton);
!     }
  
!     /**
!      * This method removes the given component from the layout manager's
!      * knowledge.
!      *
!      * @param c The component to remove.
!      */
!     public void removeLayoutComponent(Component c)
!     {
!       // Do nothing.
!     }
  
!     /**
!      * This method sets whether the children will be centered.
!      *
!      * @param newValue Whether the children will be centered.
!      */
!     public void setCentersChildren(boolean newValue)
!     {
!       centersChildren = newValue;
!       optionPane.invalidate();
!     }
  
!     /**
!      * This method sets the amount of space between each component.
!      *
!      * @param newPadding The padding between components.
!      */
!     public void setPadding(int newPadding)
!     {
!       padding = newPadding;
!       optionPane.invalidate();
      }
  
!     /**
!      * This method sets whether the widths will be synced.
!      *
!      * @param newValue Whether the widths will be synced.
!      */
!     public void setSyncAllWidths(boolean newValue)
!     {
!       syncAllWidths = newValue;
!       optionPane.invalidate();
!     }
!   }
! 
!   /**
!    * This helper class handles property change events from the JOptionPane.
!    */
!   public class PropertyChangeHandler implements PropertyChangeListener
    {
!     /**
!      * This method is called when one of the properties of the JOptionPane
!      * changes.
!      *
!      * @param e The PropertyChangeEvent.
!      */
!     public void propertyChange(PropertyChangeEvent e)
!     {
!       if (e.getPropertyName().equals(JOptionPane.ICON_PROPERTY)
!           || e.getPropertyName().equals(JOptionPane.MESSAGE_TYPE_PROPERTY))
! 	addIcon(messageAreaContainer);
!       else if (e.getPropertyName().equals(JOptionPane.INITIAL_SELECTION_VALUE_PROPERTY))
! 	resetSelectedValue();
!       else if (e.getPropertyName().equals(JOptionPane.INITIAL_VALUE_PROPERTY)
!                || e.getPropertyName().equals(JOptionPane.OPTIONS_PROPERTY)
!                || e.getPropertyName().equals(JOptionPane.OPTION_TYPE_PROPERTY))
!         {
! 	  Container newButtons = createButtonArea();
! 	  optionPane.remove(buttonContainer);
! 	  optionPane.add(newButtons);
! 	  buttonContainer = newButtons;
!         }
! 
!       else if (e.getPropertyName().equals(JOptionPane.MESSAGE_PROPERTY)
!                || e.getPropertyName().equals(JOptionPane.WANTS_INPUT_PROPERTY)
!                || e.getPropertyName().equals(JOptionPane.SELECTION_VALUES_PROPERTY))
!         {
! 	  optionPane.removeAll();
! 	  messageAreaContainer = createMessageArea();
! 	  optionPane.add(messageAreaContainer);
! 	  optionPane.add(buttonContainer);
!         }
!       optionPane.invalidate();
!       optionPane.repaint();
!     }
!   }
! 
!   /** Whether the JOptionPane contains custom components. */
!   protected boolean hasCustomComponents = false;
! 
!   // The initialFocusComponent seems to always be set to a button (even if 
!   // I try to set initialSelectionValue). This is different from what the 
!   // javadocs state (which should switch this reference to the input component 
!   // if one is present since that is what's going to get focus). 
! 
!   /**
!    * The button that will receive focus based on initialValue when no input
!    * component is present. If an input component is present, then the input
!    * component will receive focus instead.
!    */
!   protected Component initialFocusComponent;
! 
!   /** The component that receives input when the JOptionPane needs it. */
!   protected JComponent inputComponent;
! 
!   /** The minimum height of the JOptionPane. */
!   public static int minimumHeight;
! 
!   /** The minimum width of the JOptionPane. */
!   public static int minimumWidth;
! 
!   /** The minimum dimensions of the JOptionPane. */
!   protected Dimension minimumSize;
! 
!   /** The propertyChangeListener for the JOptionPane. */
!   protected PropertyChangeListener propertyChangeListener;
! 
!   /** The JOptionPane this UI delegate is used for. */
!   protected JOptionPane optionPane;
! 
!   /** The size of the icons. */
!   private static int iconSize = 36;
! 
!   /** The foreground color for the message area. */
!   private transient Color messageForeground;
! 
!   /** The border around the message area. */
!   private transient Border messageBorder;
! 
!   /** The border around the button area. */
!   private transient Border buttonBorder;
! 
!   /** The string used to describe OK buttons. */
!   private static String OK_STRING = "OK";
! 
!   /** The string used to describe Yes buttons. */
!   private static String YES_STRING = "Yes";
! 
!   /** The string used to describe No buttons. */
!   private static String NO_STRING = "No";
! 
!   /** The string used to describe Cancel buttons. */
!   private static String CANCEL_STRING = "Cancel";
! 
!   /** The container for the message area. */
!   private transient Container messageAreaContainer;
! 
!   /** The container for the buttons. */
!   private transient Container buttonContainer;
! 
!   /**
!    * A helper class that implements Icon. This is used temporarily until
!    * ImageIcons are fixed.
!    */
!   private static class MessageIcon implements Icon
!   {
!     /**
!      * This method returns the width of the icon.
!      *
!      * @return The width of the icon.
!      */
!     public int getIconWidth()
!     {
!       return iconSize;
!     }
! 
!     /**
!      * This method returns the height of the icon.
!      *
!      * @return The height of the icon.
!      */
!     public int getIconHeight()
!     {
!       return iconSize;
!     }
! 
!     /**
!      * This method paints the icon as a part of the given component using the
!      * given graphics and the given x and y position.
!      *
!      * @param c The component that owns this icon.
!      * @param g The Graphics object to paint with.
!      * @param x The x coordinate.
!      * @param y The y coordinate.
!      */
!     public void paintIcon(Component c, Graphics g, int x, int y)
!     {
!     }
!   }
! 
!   /** The icon displayed for ERROR_MESSAGE. */
!   private static MessageIcon errorIcon = new MessageIcon()
!     {
!       public void paintIcon(Component c, Graphics g, int x, int y)
!       {
! 	Polygon oct = new Polygon(new int[] { 0, 0, 9, 27, 36, 36, 27, 9 },
! 	                          new int[] { 9, 27, 36, 36, 27, 9, 0, 0 }, 8);
! 	g.translate(x, y);
! 
! 	Color saved = g.getColor();
! 	g.setColor(Color.RED);
! 
! 	g.fillPolygon(oct);
! 
! 	g.setColor(Color.BLACK);
! 	g.drawRect(13, 16, 10, 4);
! 
! 	g.setColor(saved);
! 	g.translate(-x, -y);
!       }
!     };
! 
!   /** The icon displayed for INFORMATION_MESSAGE. */
!   private static MessageIcon infoIcon = new MessageIcon()
!     {
!       public void paintIcon(Component c, Graphics g, int x, int y)
!       {
! 	g.translate(x, y);
! 	Color saved = g.getColor();
! 
! 	// Should be purple.
! 	g.setColor(Color.RED);
! 
! 	g.fillOval(0, 0, iconSize, iconSize);
! 
! 	g.setColor(Color.BLACK);
! 	g.drawOval(16, 6, 4, 4);
! 
! 	Polygon bottomI = new Polygon(new int[] { 15, 15, 13, 13, 23, 23, 21, 21 },
! 	                              new int[] { 12, 28, 28, 30, 30, 28, 28, 12 },
! 	                              8);
! 	g.drawPolygon(bottomI);
! 
! 	g.setColor(saved);
! 	g.translate(-x, -y);
!       }
!     };
! 
!   /** The icon displayed for WARNING_MESSAGE. */
!   private static MessageIcon warningIcon = new MessageIcon()
!     {
!       public void paintIcon(Component c, Graphics g, int x, int y)
!       {
! 	g.translate(x, y);
! 	Color saved = g.getColor();
! 	g.setColor(Color.YELLOW);
! 
! 	Polygon triangle = new Polygon(new int[] { 0, 18, 36 },
! 	                               new int[] { 36, 0, 36 }, 3);
! 	g.fillPolygon(triangle);
! 
! 	g.setColor(Color.BLACK);
! 
! 	Polygon excl = new Polygon(new int[] { 15, 16, 20, 21 },
! 	                           new int[] { 8, 26, 26, 8 }, 4);
! 	g.drawPolygon(excl);
! 	g.drawOval(16, 30, 4, 4);
! 
! 	g.setColor(saved);
! 	g.translate(-x, -y);
!       }
!     };
! 
!   /** The icon displayed for MESSAGE_ICON. */
!   private static MessageIcon questionIcon = new MessageIcon()
!     {
!       public void paintIcon(Component c, Graphics g, int x, int y)
!       {
! 	g.translate(x, y);
! 	Color saved = g.getColor();
! 	g.setColor(Color.GREEN);
! 
! 	g.fillRect(0, 0, iconSize, iconSize);
! 
! 	g.setColor(Color.BLACK);
! 
! 	g.drawOval(11, 2, 16, 16);
! 	g.drawOval(14, 5, 10, 10);
! 
! 	g.setColor(Color.GREEN);
! 	g.fillRect(0, 10, iconSize, iconSize - 10);
! 
! 	g.setColor(Color.BLACK);
! 
! 	g.drawLine(11, 10, 14, 10);
! 
! 	g.drawLine(24, 10, 17, 22);
! 	g.drawLine(27, 10, 20, 22);
! 	g.drawLine(17, 22, 20, 22);
! 
! 	g.drawOval(17, 25, 3, 3);
! 
! 	g.setColor(saved);
! 	g.translate(-x, -y);
!       }
!     };
! 
!   // FIXME: Uncomment when the ImageIcons are fixed.
! 
!   /*  IconUIResource warningIcon, questionIcon, infoIcon, errorIcon;*/
! 
!   /**
!    * Creates a new BasicOptionPaneUI object.
!    */
!   public BasicOptionPaneUI()
!   {
!   }
! 
!   /**
!    * This method is messaged to add the buttons to the given container.
!    *
!    * @param container The container to add components to.
!    * @param buttons The buttons to add. (If it is an instance of component,
!    *        the Object is added directly. If it is an instance of Icon, it is
!    *        packed into a label and added. For all other cases, the string
!    *        representation of the Object is retreived and packed into a
!    *        label.)
!    * @param initialIndex The index of the component that is the initialValue.
!    */
!   protected void addButtonComponents(Container container, Object[] buttons,
!                                      int initialIndex)
!   {
!     if (buttons == null)
!       return;
!     for (int i = 0; i < buttons.length; i++)
!       {
! 	if (buttons[i] != null)
! 	  {
! 	    Component toAdd;
! 	    if (buttons[i] instanceof Component)
! 	      toAdd = (Component) buttons[i];
! 	    else
! 	      {
! 		if (buttons[i] instanceof Icon)
! 		  toAdd = new JButton((Icon) buttons[i]);
! 		else
! 		  toAdd = new JButton(buttons[i].toString());
! 		hasCustomComponents = true;
! 	      }
! 	    if (toAdd instanceof JButton)
! 	      ((JButton) toAdd).addActionListener(createButtonActionListener(i));
! 	    if (i == initialIndex)
! 	      initialFocusComponent = toAdd;
! 	    container.add(toAdd);
! 	  }
!       }
!     selectInitialValue(optionPane);
!   }
! 
!   /**
!    * This method adds the appropriate icon the given container.
!    *
!    * @param top The container to add an icon to.
!    */
!   protected void addIcon(Container top)
!   {
!     JLabel iconLabel = null;
!     Icon icon = getIcon();
!     if (icon != null)
!       {
! 	iconLabel = new JLabel(icon);
! 	top.add(iconLabel, BorderLayout.WEST);
!       }
!   }
! 
!   /**
!    * A helper method that returns an instance of GridBagConstraints to be used
!    * for creating the message area.
!    *
!    * @return An instance of GridBagConstraints.
!    */
!   private static GridBagConstraints createConstraints()
!   {
!     GridBagConstraints constraints = new GridBagConstraints();
!     constraints.gridx = GridBagConstraints.REMAINDER;
!     constraints.gridy = GridBagConstraints.REMAINDER;
!     constraints.gridwidth = 0;
!     constraints.anchor = GridBagConstraints.LINE_START;
!     constraints.fill = GridBagConstraints.NONE;
!     constraints.insets = new Insets(0, 0, 3, 0);
! 
!     return constraints;
!   }
! 
!   /**
!    * This method creates the proper object (if necessary) to represent msg.
!    * (If msg is an instance of Component, it will add it directly. If it is
!    * an icon, then it will pack it in a label and add it. Otherwise, it gets
!    * treated as a string. If the string is longer than maxll, a box is
!    * created and the burstStringInto is called with the box as the container.
!    * The box is then added to the given container. Otherwise, the string is
!    * packed in a label and placed in the given container.) This method is
!    * also used for adding the inputComponent to the container.
!    *
!    * @param container The container to add to.
!    * @param cons The constraints when adding.
!    * @param msg The message to add.
!    * @param maxll The max line length.
!    * @param internallyCreated Whether the msg is internally created.
!    */
!   protected void addMessageComponents(Container container,
!                                       GridBagConstraints cons, Object msg,
!                                       int maxll, boolean internallyCreated)
!   {
!     if (msg == null)
!       return;
!     hasCustomComponents = internallyCreated;
!     if (msg instanceof Object[])
!       {
! 	Object[] arr = (Object[]) msg;
! 	for (int i = 0; i < arr.length; i++)
! 	  addMessageComponents(container, cons, arr[i], maxll,
! 	                       internallyCreated);
! 	return;
!       }
!     else if (msg instanceof Component)
!       {
! 	container.add((Component) msg, cons);
! 	cons.gridy++;
!       }
!     else if (msg instanceof Icon)
!       {
! 	container.add(new JLabel((Icon) msg), cons);
! 	cons.gridy++;
!       }
!     else
!       {
! 	// Undocumented behaviour.
! 	// if msg.toString().length greater than maxll
! 	// it will create a box and burst the string.
! 	// otherwise, it will just create a label and re-call 
! 	// this method with the label o.O
! 	if (msg.toString().length() > maxll)
! 	  {
! 	    Box tmp = new Box(BoxLayout.Y_AXIS);
! 	    burstStringInto(tmp, msg.toString(), maxll);
! 	    addMessageComponents(container, cons, tmp, maxll, true);
! 	  }
! 	else
! 	  addMessageComponents(container, cons, new JLabel(msg.toString()),
! 	                       maxll, true);
!       }
    }
  
+   /**
+    * This method creates instances of d (recursively if necessary based on
+    * maxll) and adds to c.
+    *
+    * @param c The container to add to.
+    * @param d The string to burst.
+    * @param maxll The max line length.
+    */
+   protected void burstStringInto(Container c, String d, int maxll)
+   {
+     // FIXME: Verify that this is the correct behaviour.
+     // One interpretation of the spec is that this method
+     // should recursively call itself to create (and add) 
+     // JLabels to the container if the length of the String d
+     // is greater than maxll.
+     // but in practice, even with a really long string, this is 
+     // all that happens.
+     if (d == null || c == null)
+       return;
+     JLabel label = new JLabel(d);
+     c.add(label);
+   }
+ 
+   /**
+    * This method returns true if the given JOptionPane contains custom
+    * components.
+    *
+    * @param op The JOptionPane to check.
+    *
+    * @return True if the JOptionPane contains custom components.
+    */
    public boolean containsCustomComponents(JOptionPane op)
    {
!     return hasCustomComponents;
!   }
! 
!   /**
!    * This method creates a button action listener for the given button index.
!    *
!    * @param buttonIndex The index of the button in components.
!    *
!    * @return A new ButtonActionListener.
!    */
!   protected ActionListener createButtonActionListener(int buttonIndex)
!   {
!     return new ButtonActionListener(buttonIndex);
!   }
! 
!   /**
!    * This method creates the button area.
!    *
!    * @return A new Button Area.
!    */
!   protected Container createButtonArea()
!   {
!     JPanel buttonPanel = new JPanel();
! 
!     buttonPanel.setLayout(createLayoutManager());
!     addButtonComponents(buttonPanel, getButtons(), getInitialValueIndex());
! 
!     return buttonPanel;
!   }
! 
!   /**
!    * This method creates a new LayoutManager for the button area.
!    *
!    * @return A new LayoutManager for the button area.
!    */
!   protected LayoutManager createLayoutManager()
!   {
!     return new ButtonAreaLayout(getSizeButtonsToSameWidth(), 6);
!   }
! 
!   /**
!    * This method creates the message area.
!    *
!    * @return A new message area.
!    */
!   protected Container createMessageArea()
!   {
!     JPanel messageArea = new JPanel();
!     messageArea.setLayout(new BorderLayout());
!     addIcon(messageArea);
! 
!     JPanel rightSide = new JPanel()
!       {
! 	public Dimension getPreferredSize()
! 	{
! 	  int w = Math.max(optionPane.getSize().width, minimumWidth);
! 	  Insets i = optionPane.getInsets();
! 	  Dimension orig = super.getPreferredSize();
! 	  Dimension value = new Dimension(w - i.left - i.right - iconSize,
! 	                                  orig.height);
! 	  return value;
! 	}
!       };
!     rightSide.setLayout(new GridBagLayout());
!     GridBagConstraints con = createConstraints();
! 
!     addMessageComponents(rightSide, con, getMessage(),
!                          getMaxCharactersPerLineCount(), false);
! 
!     if (optionPane.getWantsInput())
!       {
! 	Object[] selection = optionPane.getSelectionValues();
! 
! //	if (selection == null)
! //	  inputComponent = new JTextField();
! //	else if (selection.length < 20)
! //	  inputComponent = new JComboBox(selection);
! 	// FIXME: Uncomment when the widgets are done.
! 	if (selection == null)
! 	  inputComponent = null;
! 	else
! 	  inputComponent = new JList(selection);
! 	if (inputComponent != null)
! 	  {
! 	    addMessageComponents(rightSide, con, inputComponent,
! 	                         getMaxCharactersPerLineCount(), true);
! 	    resetSelectedValue();
! 	    selectInitialValue(optionPane);
! 	  }
!       }
! 
!     messageArea.add(rightSide, BorderLayout.EAST);
! 
!     return messageArea;
!   }
! 
!   /**
!    * This method creates a new PropertyChangeListener for listening to the
!    * JOptionPane.
!    *
!    * @return A new PropertyChangeListener.
!    */
!   protected PropertyChangeListener createPropertyChangeListener()
!   {
!     return new PropertyChangeHandler();
!   }
! 
!   /**
!    * This method creates a Container that will separate the message and button
!    * areas.
!    *
!    * @return A Container that will separate the message and button areas.
!    */
!   protected Container createSeparator()
!   {
!     return null;
!   }
! 
!   /**
!    * This method creates a new BasicOptionPaneUI for the given component.
!    *
!    * @param x The component to create a UI for.
!    *
!    * @return A new BasicOptionPaneUI.
!    */
!   public static ComponentUI createUI(JComponent x)
!   {
!     return new BasicOptionPaneUI();
!   }
! 
!   /**
!    * This method returns the buttons for the JOptionPane. If no options are
!    * set, a set of options will be created based upon the optionType.
!    *
!    * @return The buttons that will be added.
!    */
!   protected Object[] getButtons()
!   {
!     if (optionPane.getOptions() != null)
!       return optionPane.getOptions();
!     switch (optionPane.getOptionType())
!       {
!       case JOptionPane.YES_NO_OPTION:
! 	return new Object[] { YES_STRING, NO_STRING };
!       case JOptionPane.YES_NO_CANCEL_OPTION:
! 	return new Object[] { YES_STRING, NO_STRING, CANCEL_STRING };
!       case JOptionPane.OK_CANCEL_OPTION:
!       case JOptionPane.DEFAULT_OPTION:
! 	return new Object[] { OK_STRING, CANCEL_STRING };
!       }
!     return null;
!   }
! 
!   /**
!    * This method will return the icon the user has set or the icon that will
!    * be used based on message type.
!    *
!    * @return The icon to use in the JOptionPane.
!    */
!   protected Icon getIcon()
!   {
!     if (optionPane.getIcon() != null)
!       return optionPane.getIcon();
!     else
!       return getIconForType(optionPane.getMessageType());
!   }
! 
!   /**
!    * This method returns the icon for the given messageType.
!    *
!    * @param messageType The type of message.
!    *
!    * @return The icon for the given messageType.
!    */
!   protected Icon getIconForType(int messageType)
!   {
!     Icon tmp = null;
!     switch (messageType)
!       {
!       case JOptionPane.ERROR_MESSAGE:
! 	tmp = errorIcon;
! 	break;
!       case JOptionPane.INFORMATION_MESSAGE:
! 	tmp = infoIcon;
! 	break;
!       case JOptionPane.WARNING_MESSAGE:
! 	tmp = warningIcon;
! 	break;
!       case JOptionPane.QUESTION_MESSAGE:
! 	tmp = questionIcon;
! 	break;
!       }
!     return tmp;
!     // FIXME: Don't cast till the default icons are in.
!     // return new IconUIResource(tmp);
!   }
! 
!   /**
!    * This method returns the index of the initialValue in the options array.
!    *
!    * @return The index of the initalValue.
!    */
!   protected int getInitialValueIndex()
!   {
!     Object[] buttons = getButtons();
! 
!     if (buttons == null)
!       return -1;
! 
!     Object select = optionPane.getInitialValue();
! 
!     for (int i = 0; i < buttons.length; i++)
!       {
! 	if (select == buttons[i])
! 	  return i;
!       }
!     return 0;
!   }
! 
!   /**
!    * This method returns the maximum number of characters that should be
!    * placed on a line.
!    *
!    * @return The maximum number of characteres that should be placed on a
!    *         line.
!    */
!   protected int getMaxCharactersPerLineCount()
!   {
!     return optionPane.getMaxCharactersPerLineCount();
!   }
! 
!   /**
!    * This method returns the maximum size.
!    *
!    * @param c The JComponent to measure.
!    *
!    * @return The maximum size.
!    */
!   public Dimension getMaximumSize(JComponent c)
!   {
!     return getPreferredSize(c);
!   }
! 
!   /**
!    * This method returns the message of the JOptionPane.
!    *
!    * @return The message.
!    */
!   protected Object getMessage()
!   {
!     return optionPane.getMessage();
!   }
! 
!   /**
!    * This method returns the minimum size of the JOptionPane.
!    *
!    * @return The minimum size.
!    */
!   public Dimension getMinimumOptionPaneSize()
!   {
!     return minimumSize;
!   }
! 
!   /**
!    * This method returns the minimum size.
!    *
!    * @param c The JComponent to measure.
!    *
!    * @return The minimum size.
!    */
!   public Dimension getMinimumSize(JComponent c)
!   {
!     return getPreferredSize(c);
!   }
! 
!   /**
!    * This method returns the preferred size of the JOptionPane. The preferred
!    * size is the maximum of the size desired by the layout and the minimum
!    * size.
!    *
!    * @param c The JComponent to measure.
!    *
!    * @return The preferred size.
!    */
!   public Dimension getPreferredSize(JComponent c)
!   {
!     Dimension d = optionPane.getLayout().preferredLayoutSize(optionPane);
!     Dimension d2 = getMinimumOptionPaneSize();
! 
!     int w = Math.max(d.width, d2.width);
!     int h = Math.max(d.height, d2.height);
!     return new Dimension(w, h);
!   }
! 
!   /**
!    * This method returns whether all buttons should have the same width.
!    *
!    * @return Whether all buttons should have the same width.
!    */
!   protected boolean getSizeButtonsToSameWidth()
!   {
!     return true;
!   }
! 
!   /**
!    * This method installs components for the JOptionPane.
!    */
!   protected void installComponents()
!   {
!     // reset it.
!     hasCustomComponents = false;
!     Container msg = createMessageArea();
!     if (msg != null)
!       {
! 	((JComponent) msg).setBorder(messageBorder);
! 	msg.setForeground(messageForeground);
! 	messageAreaContainer = msg;
! 	optionPane.add(msg);
!       }
! 
!     Container sep = createSeparator();
!     if (sep != null)
!       optionPane.add(sep);
! 
!     Container button = createButtonArea();
!     if (button != null)
!       {
! 	((JComponent) button).setBorder(buttonBorder);
! 	buttonContainer = button;
! 	optionPane.add(button);
!       }
! 
!     optionPane.invalidate();
!   }
! 
!   /**
!    * This method installs defaults for the JOptionPane.
!    */
!   protected void installDefaults()
!   {
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
! 
!     optionPane.setFont(defaults.getFont("OptionPane.font"));
!     optionPane.setBackground(defaults.getColor("OptionPane.background"));
!     optionPane.setForeground(defaults.getColor("OptionPane.foreground"));
!     optionPane.setBorder(defaults.getBorder("OptionPane.border"));
! 
!     messageBorder = defaults.getBorder("OptionPane.messageAreaBorder");
!     messageForeground = defaults.getColor("OptionPane.messageForeground");
!     buttonBorder = defaults.getBorder("OptionPane.buttonAreaBorder");
! 
!     minimumSize = defaults.getDimension("OptionPane.minimumSize");
!     minimumWidth = minimumSize.width;
!     minimumHeight = minimumSize.height;
! 
!     // FIXME: Image icons don't seem to work properly right now.
!     // Once they do, replace the synthetic icons with these ones.
! 
!     /*
!     warningIcon = (IconUIResource) defaults.getIcon("OptionPane.warningIcon");
!     infoIcon = (IconUIResource) defaults.getIcon("OptionPane.informationIcon");
!     errorIcon = (IconUIResource) defaults.getIcon("OptionPane.errorIcon");
!     questionIcon = (IconUIResource) defaults.getIcon("OptionPane.questionIcon");
!     */
!   }
! 
!   /**
!    * This method installs keyboard actions for the JOptionpane.
!    */
!   protected void installKeyboardActions()
!   {
!     // FIXME: implement.
!   }
! 
!   /**
!    * This method installs listeners for the JOptionPane.
!    */
!   protected void installListeners()
!   {
!     propertyChangeListener = createPropertyChangeListener();
! 
!     optionPane.addPropertyChangeListener(propertyChangeListener);
!   }
! 
!   /**
!    * This method installs the UI for the JOptionPane.
!    *
!    * @param c The JComponent to install the UI for.
!    */
!   public void installUI(JComponent c)
!   {
!     if (c instanceof JOptionPane)
!       {
! 	optionPane = (JOptionPane) c;
! 
! 	installDefaults();
! 	installComponents();
! 	installListeners();
! 	installKeyboardActions();
!       }
!   }
! 
!   /**
!    * Changes the inputValue property in the JOptionPane based on the current
!    * value of the inputComponent.
!    */
!   protected void resetInputValue()
!   {
!     if (optionPane.getWantsInput() && inputComponent != null)
!       {
! 	Object output = null;
! 	if (inputComponent instanceof JTextField)
! 	  output = ((JTextField) inputComponent).getText();
! 	else if (inputComponent instanceof JComboBox)
! 	  output = ((JComboBox) inputComponent).getSelectedItem();
! 	else if (inputComponent instanceof JList)
! 	  output = ((JList) inputComponent).getSelectedValue();
! 
! 	if (output != null)
! 	  optionPane.setInputValue(output);
!       }
!   }
! 
!   /**
!    * This method requests focus to the inputComponent (if one is present) and
!    * the initialFocusComponent otherwise.
!    *
!    * @param op The JOptionPane.
!    */
!   public void selectInitialValue(JOptionPane op)
!   {
!     if (inputComponent != null)
!       {
! 	inputComponent.requestFocus();
! 	return;
!       }
!     if (initialFocusComponent != null)
!       initialFocusComponent.requestFocus();
!   }
! 
!   /**
!    * This method resets the value in the inputComponent to the
!    * initialSelectionValue property.
!    */
!   private void resetSelectedValue()
!   {
!     if (inputComponent != null)
!       {
! 	Object init = optionPane.getInitialSelectionValue();
! 	if (init == null)
! 	  return;
! 	if (inputComponent instanceof JTextField)
! 	  ((JTextField) inputComponent).setText((String) init);
! 	else if (inputComponent instanceof JComboBox)
! 	  ((JComboBox) inputComponent).setSelectedItem(init);
! 	else if (inputComponent instanceof JList)
! 	  {
! 	    //  ((JList) inputComponent).setSelectedValue(init, true);
! 	  }
!       }
!   }
! 
!   /**
!    * This method uninstalls all the components in the JOptionPane.
!    */
!   protected void uninstallComponents()
!   {
!     optionPane.removeAll();
!     buttonContainer = null;
!     messageAreaContainer = null;
!   }
! 
!   /**
!    * This method uninstalls the defaults for the JOptionPane.
!    */
!   protected void uninstallDefaults()
!   {
!     optionPane.setFont(null);
!     optionPane.setForeground(null);
!     optionPane.setBackground(null);
! 
!     minimumSize = null;
! 
!     messageBorder = null;
!     buttonBorder = null;
!     messageForeground = null;
! 
!     // FIXME: ImageIcons don't seem to work properly
! 
!     /*
!     warningIcon = null;
!     errorIcon = null;
!     questionIcon = null;
!     infoIcon = null;
!     */
!   }
! 
!   /**
!    * This method uninstalls keyboard actions for the JOptionPane.
!    */
!   protected void uninstallKeyboardActions()
!   {
!     // FIXME: implement.
!   }
! 
!   /**
!    * This method uninstalls listeners for the JOptionPane.
!    */
!   protected void uninstallListeners()
!   {
!     optionPane.removePropertyChangeListener(propertyChangeListener);
!     propertyChangeListener = null;
!   }
! 
!   /**
!    * This method uninstalls the UI for the given JComponent.
!    *
!    * @param c The JComponent to uninstall for.
!    */
!   public void uninstallUI(JComponent c)
!   {
!     uninstallKeyboardActions();
!     uninstallListeners();
!     uninstallComponents();
!     uninstallDefaults();
! 
!     optionPane = null;
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicPanelUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicPanelUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicPanelUI.java	Sat Jan 10 21:59:30 2004
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicPanelUI.java	Thu Feb 12 00:17:24 2004
*************** import javax.swing.plaf.PanelUI;
*** 44,51 ****
  
  public class BasicPanelUI extends PanelUI
  {
-     int gap = 3;
- 
      public static ComponentUI createUI(JComponent x) 
      {
          return new BasicPanelUI();
--- 44,49 ----
*************** public class BasicPanelUI extends PanelU
*** 53,58 ****
  
      public void installUI(JComponent c)
      {
! 	super.installUI(c);
      }
  }
--- 51,56 ----
  
      public void installUI(JComponent c)
      {
!       super.installUI(c);
      }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicPasswordFieldUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicPasswordFieldUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicPasswordFieldUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicPasswordFieldUI.java	Tue Nov 30 23:59:05 2004
***************
*** 0 ****
--- 1,67 ----
+ /* BasicPasswordFieldUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.text.Element;
+ import javax.swing.text.PasswordView;
+ import javax.swing.text.View;
+ 
+ public class BasicPasswordFieldUI extends BasicTextFieldUI
+ {
+   public BasicPasswordFieldUI()
+   {
+   }
+ 
+   public View create(Element elem)
+   {
+     return new PasswordView(elem);
+   }
+   
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicPasswordFieldUI();
+   }
+ 
+   protected String getPropertyPrefix()
+   {
+     return "PasswordField";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java	Tue Nov 30 23:59:05 2004
***************
*** 0 ****
--- 1,114 ----
+ /* BasicPopupMenuSeparatorUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Rectangle;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JPopupMenu;
+ import javax.swing.SwingUtilities;
+ import javax.swing.plaf.ComponentUI;
+ 
+ /**
+  * The Basic Look and Feel UI delegate for JPopupMenu.Separator.
+  */
+ public class BasicPopupMenuSeparatorUI extends BasicSeparatorUI
+ {
+   /**
+    * Creates a new BasicPopupMenuSeparatorUI object.
+    */
+   public BasicPopupMenuSeparatorUI()
+   {
+     super();
+   }
+ 
+   /**
+    * Creates a new UI delegate for the given JComponent.
+    *
+    * @param c The JComponent to create a delegate for.
+    *
+    * @return A new BasicPopupMenuSeparatorUI
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicPopupMenuSeparatorUI();
+   }
+ 
+   /**
+    * The Popup Menu Separator has two lines. The top line will be
+    * painted using highlight color and the bottom using shadow color.
+    *
+    * @param g The Graphics object to paint with
+    * @param c The JComponent to paint.
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     if (! (c instanceof JPopupMenu.Separator))
+       return;
+ 
+     Rectangle r = new Rectangle();
+     SwingUtilities.calculateInnerArea(c, r);
+     Color saved = g.getColor();
+ 
+     int midAB = r.width / 2 + r.x;
+     int midAD = r.height / 2 + r.y;
+ 
+     g.setColor(highlight);
+     g.drawLine(r.x, midAD, r.x + r.width, midAD);
+ 
+     g.setColor(shadow);
+     g.drawLine(r.x, midAD + 1, r.x + r.width, midAD + 1);
+   }
+ 
+   /**
+     * This method returns the preferred size of the
+     * JComponent.
+     *
+     * @param c The JComponent to measure.
+     *
+     * @return The preferred size.
+     */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     return super.getPreferredSize(c);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicPopupMenuUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicPopupMenuUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicPopupMenuUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicPopupMenuUI.java	Tue Nov 30 23:59:05 2004
***************
*** 0 ****
--- 1,400 ----
+ /* BasicPopupMenuUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.GridBagLayout;
+ import java.awt.event.ComponentEvent;
+ import java.awt.event.ComponentListener;
+ import java.awt.event.MouseEvent;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JPopupMenu;
+ import javax.swing.MenuElement;
+ import javax.swing.MenuSelectionManager;
+ import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.MouseInputListener;
+ import javax.swing.event.PopupMenuEvent;
+ import javax.swing.event.PopupMenuListener;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.PopupMenuUI;
+ 
+ 
+ /**
+  * UI Delegate for JPopupMenu
+  */
+ public class BasicPopupMenuUI extends PopupMenuUI
+ {
+   /* popupMenu for which this UI delegate is for*/
+   protected JPopupMenu popupMenu;
+ 
+   /* MouseInputListener listens to mouse events */
+   private static transient MouseInputListener mouseInputListener;
+ 
+   /* PopupMenuListener listens to popup menu events fired by JPopupMenu*/
+   private transient PopupMenuListener popupMenuListener;
+ 
+   /* ComponentListener listening to popupMenu's invoker. */
+   private TopWindowListener topWindowListener;
+ 
+   /**
+    * Creates a new BasicPopupMenuUI object.
+    */
+   public BasicPopupMenuUI()
+   {
+     popupMenuListener = new PopupMenuHandler();
+     mouseInputListener = new MouseInputHandler();
+     topWindowListener = new TopWindowListener();
+   }
+ 
+   /**
+    * Factory method to create a BasicPopupMenuUI for the given {@link
+    * JComponent}, which should be a {@link JMenuItem}.
+    *
+    * @param x The {@link JComponent} a UI is being created for.
+    *
+    * @return A BasicPopupMenuUI for the {@link JComponent}.
+    */
+   public static ComponentUI createUI(JComponent x)
+   {
+     return new BasicPopupMenuUI();
+   }
+ 
+   /**
+    * Installs and initializes all fields for this UI delegate. Any properties
+    * of the UI that need to be initialized and/or set to defaults will be
+    * done now. It will also install any listeners necessary.
+    *
+    * @param c The {@link JComponent} that is having this UI installed.
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+     popupMenu = (JPopupMenu) c;
+     popupMenu.setLayout(new GridBagLayout());
+     popupMenu.setBorderPainted(true);
+     JPopupMenu.setDefaultLightWeightPopupEnabled(true);
+ 
+     installDefaults();
+     installListeners();
+   }
+ 
+   /**
+    * This method installs the defaults that are defined in  the Basic look and
+    * feel for this {@link JPopupMenu}.
+    */
+   public void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     popupMenu.setBackground(defaults.getColor("PopupMenu.background"));
+     popupMenu.setBorder(defaults.getBorder("PopupMenu.border"));
+     popupMenu.setFont(defaults.getFont("PopupMenu.font"));
+     popupMenu.setForeground(defaults.getColor("PopupMenu.foreground"));
+     popupMenu.setOpaque(true);
+   }
+ 
+   /**
+    * This method installs the listeners for the {@link JMenuItem}.
+    */
+   protected void installListeners()
+   {
+     popupMenu.addMouseListener(mouseInputListener);
+     popupMenu.addMouseMotionListener(mouseInputListener);
+     popupMenu.addPopupMenuListener(popupMenuListener);
+   }
+ 
+   /**
+    * This method installs the keyboard actions for this {@link JPopupMenu}.
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * Performs the opposite of installUI. Any properties or resources that need
+    * to be cleaned up will be done now. It will also uninstall any listeners
+    * it has. In addition, any properties of this UI will be nulled.
+    *
+    * @param c The {@link JComponent} that is having this UI uninstalled.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallListeners();
+     uninstallDefaults();
+     popupMenu = null;
+   }
+ 
+   /**
+    * This method uninstalls the defaults and sets any objects created during
+    * install to null
+    */
+   protected void uninstallDefaults()
+   {
+     popupMenu.setBackground(null);
+     popupMenu.setBorder(null);
+     popupMenu.setFont(null);
+     popupMenu.setForeground(null);
+   }
+ 
+   /**
+    * Unregisters all the listeners that this UI delegate was using.
+    */
+   protected void uninstallListeners()
+   {
+     popupMenu.removeMouseListener(mouseInputListener);
+     popupMenu.removeMouseMotionListener(mouseInputListener);
+     popupMenu.removePopupMenuListener(popupMenuListener);
+   }
+ 
+   /**
+    * Uninstalls any keyboard actions.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: Need to implement
+   }
+ 
+   /**
+    * This method returns the minimum size of the JPopupMenu.
+    *
+    * @param c The JComponent to find a size for.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns the preferred size of the JPopupMenu.
+    *
+    * @param c The JComponent to find a size for.
+    *
+    * @return The preferred size.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns the minimum size of the JPopupMenu.
+    *
+    * @param c The JComponent to find a size for.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return null;
+   }
+ 
+   /**
+    * Return true if given mouse event is a platform popup trigger, and false
+    * otherwise
+    *
+    * @param e MouseEvent that is to be checked for popup trigger event
+    *
+    * @return true if given mouse event is a platform popup trigger, and false
+    *         otherwise
+    */
+   public boolean isPopupTrigger(MouseEvent e)
+   {
+     return false;
+   }
+ 
+   /**
+    * This listener handles PopupMenuEvents fired by JPopupMenu
+    */
+   private class PopupMenuHandler implements PopupMenuListener
+   {
+     /**
+      * This method is invoked when JPopupMenu is cancelled.
+      *
+      * @param event the PopupMenuEvent
+      */
+     public void popupMenuCanceled(PopupMenuEvent event)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.clearSelectedPath();
+     }
+ 
+     /**
+      * This method is invoked when JPopupMenu becomes invisible
+      *
+      * @param event the PopupMenuEvent
+      */
+     public void popupMenuWillBecomeInvisible(PopupMenuEvent event)
+     {
+       // remove listener that listens to component events fired 
+       // by the top - level window that this popup belongs to.
+       Component invoker = popupMenu.getInvoker();
+ 
+       Container rootContainer = (Container) SwingUtilities.getRoot(invoker);
+       rootContainer.removeComponentListener(topWindowListener);
+     }
+ 
+     /**
+      * This method is invoked when JPopupMenu becomes visible
+      *
+      * @param event the PopupMenuEvent
+      */
+     public void popupMenuWillBecomeVisible(PopupMenuEvent event)
+     {
+       // Adds topWindowListener to top-level window to listener to 
+       // ComponentEvents fired by it. We need to cancel this popup menu
+       // if topWindow to which this popup belongs was resized or moved.
+       Component invoker = popupMenu.getInvoker();
+       Container rootContainer = (Container) SwingUtilities.getRoot(invoker);
+       rootContainer.addComponentListener(topWindowListener);
+ 
+       // if this popup menu is a free floating popup menu,
+       // then by default its first element should be always selected when
+       // this popup menu becomes visible. 
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+ 
+       if (manager.getSelectedPath().length == 0)
+         {
+ 	  // Set selected path to point to the first item in the popup menu
+ 	  MenuElement[] path = new MenuElement[2];
+ 	  path[0] = popupMenu;
+ 	  Component[] comps = popupMenu.getComponents();
+ 	  if (comps.length != 0 && comps[0] instanceof MenuElement)
+ 	    {
+ 	      path[1] = (MenuElement) comps[0];
+ 	      manager.setSelectedPath(path);
+ 	    }
+         }
+     }
+   }
+ 
+   /**
+    * ComponentListener that listens to Component Events fired by the top -
+    * level window to which popup menu belongs. If top-level window was
+    * resized, moved or hidded then popup menu will be hidded and selected
+    * path of current menu hierarchy will be set to null.
+    */
+   private class TopWindowListener implements ComponentListener
+   {
+     /**
+      * This method is invoked when top-level window is resized. This method
+      * closes current menu hierarchy.
+      *
+      * @param e The ComponentEvent
+      */
+     public void componentResized(ComponentEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.clearSelectedPath();
+     }
+ 
+     /**
+      * This method is invoked when top-level window is moved. This method
+      * closes current menu hierarchy.
+      *
+      * @param e The ComponentEvent
+      */
+     public void componentMoved(ComponentEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.clearSelectedPath();
+     }
+ 
+     /**
+      * This method is invoked when top-level window is shown This method does
+      * nothing by default.
+      *
+      * @param e The ComponentEvent
+      */
+     public void componentShown(ComponentEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.clearSelectedPath();
+     }
+ 
+     /**
+      * This method is invoked when top-level window is hidden This method
+      * closes current menu hierarchy.
+      *
+      * @param e The ComponentEvent
+      */
+     public void componentHidden(ComponentEvent e)
+     {
+       MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+       manager.clearSelectedPath();
+     }
+   }
+ 
+   private class MouseInputHandler implements MouseInputListener
+   {
+     public void mouseClicked(MouseEvent e)
+     {
+     }
+ 
+     public void mouseDragged(MouseEvent e)
+     {
+     }
+ 
+     public void mouseEntered(MouseEvent e)
+     {
+     }
+ 
+     public void mouseExited(MouseEvent e)
+     {
+     }
+ 
+     public void mouseMoved(MouseEvent e)
+     {
+     }
+ 
+     public void mousePressed(MouseEvent e)
+     {
+     }
+ 
+     public void mouseReleased(MouseEvent e)
+     {
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicProgressBarUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicProgressBarUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicProgressBarUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicProgressBarUI.java	Wed Feb 16 20:02:55 2005
***************
*** 0 ****
--- 1,825 ----
+ /* BasicProgressBarUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JProgressBar;
+ import javax.swing.SwingConstants;
+ import javax.swing.SwingUtilities;
+ import javax.swing.Timer;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.ProgressBarUI;
+ 
+ /**
+  * The Basic Look and Feel UI delegate for the 
+  * JProgressBar.
+  */
+ public class BasicProgressBarUI extends ProgressBarUI
+ {
+   /**
+    * A helper class that listens for ChangeEvents 
+    * from the progressBar's model.
+    */
+   protected class ChangeHandler implements ChangeListener
+   {
+     /**
+      * Called every time the state of the model changes.
+      *
+      * @param e The ChangeEvent given by the model.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       // Nothing to do but repaint.
+       progressBar.repaint();
+     }
+   }
+ 
+   /**
+    * This helper class is used to listen for 
+    * PropertyChangeEvents from the progressBar.
+    */
+   private class PropertyChangeHandler implements PropertyChangeListener
+   {
+     /**
+      * Called every time the properties of the 
+      * progressBar change.
+      *
+      * @param e The PropertyChangeEvent given by the progressBar.
+      */
+     public void propertyChange(PropertyChangeEvent e)
+     {
+       // Only need to listen for indeterminate changes.
+       // All other things are done on a repaint.
+       if (e.getPropertyName().equals("inderterminate"))
+ 	if (((Boolean) e.getNewValue()).booleanValue())
+ 	  startAnimationTimer();
+ 	else
+ 	  stopAnimationTimer();
+       else
+         progressBar.repaint();
+     }
+   }
+ 
+   /**
+    * This helper class is used to listen for 
+    * the animationTimer's intervals. On every interval,
+    * the bouncing box should move.
+    */
+   private class Animator implements ActionListener
+   {
+     /**
+      * Called every time the animationTimer reaches
+      * its interval.
+      *
+      * @param e The ActionEvent given by the timer.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       // Incrementing the animation index will cause
+       // a repaint.
+       incrementAnimationIndex();
+     }
+   }
+ 
+   /** The timer used to move the bouncing box. */
+   private transient Timer animationTimer;
+ 
+   // The total number of frames must be an even number.
+   // The total number of frames is calculated from
+   // the cycleTime and repaintInterval given by
+   // the basic Look and Feel defaults.
+   //
+   // +-----------------------------------------------+
+   // | frame0 | frame1 | frame2 | frame 3 | frame 4  |
+   // |        | frame7 | frame6 | frame 5 |          |
+   // +-----------------------------------------------+
+   
+   /** The current animation index. */
+   private transient int animationIndex;
+ 
+   /** The total number of frames.*/
+   private transient int numFrames;
+ 
+   /** The helper that moves the bouncing box. */
+   private transient Animator animation;
+ 
+   /** The helper that listens for property change events. */
+   private transient PropertyChangeHandler propertyListener;
+ 
+   /** The Listener for the model. */
+   protected ChangeListener changeListener;
+ 
+   /** The progressBar for this UI. */
+   protected JProgressBar progressBar;
+ 
+   /** The length of the cell. The cell is the painted part. */
+   private transient int cellLength;
+ 
+   /** The gap between cells. */
+   private transient int cellSpacing;
+ 
+   /** The color of the text when the bar is not over it.*/
+   private transient Color selectionBackground;
+ 
+   /** The color of the text when the bar is over it. */
+   private transient Color selectionForeground;
+ 
+   /**
+    * Creates a new BasicProgressBarUI object.
+    */
+   public BasicProgressBarUI()
+   {
+     super();
+   }
+ 
+   /**
+    * Creates a new BasicProgressBarUI for the component.
+    *
+    * @param x The JComponent to create the UI for.
+    *
+    * @return A new BasicProgressBarUI.
+    */
+   public static ComponentUI createUI(JComponent x)
+   {
+     return new BasicProgressBarUI();
+   }
+ 
+   /**
+    * This method returns the length of the bar (from the minimum)
+    * in pixels (or units that the Graphics object draws in) based
+    * on the progressBar's getPercentComplete() value.
+    *
+    * @param b The insets of the progressBar.
+    * @param width The width of the progressBar.
+    * @param height The height of the progressBar.
+    *
+    * @return The length of the bar that should be painted in pixels.
+    */
+   protected int getAmountFull(Insets b, int width, int height)
+   {
+     double percentDone = progressBar.getPercentComplete();
+     if (progressBar.getOrientation() == JProgressBar.HORIZONTAL)
+       return (int) (percentDone * (width - b.left - b.right));
+     else
+       return (int) (percentDone * (height - b.top - b.bottom));
+   }
+ 
+   /**
+    * The current animation index.
+    *
+    * @return The current animation index.
+    */
+   protected int getAnimationIndex()
+   {
+     return animationIndex;
+   }
+ 
+   /**
+    * This method returns the size and position of the bouncing box
+    * for the current animation index. It stores the values in the 
+    * given rectangle and returns it. It returns null if no box should
+    * be drawn.
+    *
+    * @param r The bouncing box rectangle.
+    *
+    * @return The bouncing box rectangle.
+    */
+   protected Rectangle getBox(Rectangle r)
+   {
+     if (!progressBar.isIndeterminate())
+       return null;
+     //numFrames has to be an even number as defined by spec.
+     int iterations = numFrames / 2 + 1;
+ 
+     double boxDependent;
+     double boxIndependent;
+ 
+     if (progressBar.getOrientation() == JProgressBar.HORIZONTAL)
+       {
+ 	Dimension dims = getPreferredInnerHorizontal();
+ 	boxDependent = (double) dims.width / iterations;
+ 	boxIndependent = dims.height;
+       }
+     else
+       {
+ 	Dimension dims = getPreferredInnerVertical();
+ 	boxDependent = (double) dims.height / iterations;
+ 	boxIndependent = dims.width;
+       }
+ 
+     Rectangle vr = new Rectangle();
+     SwingUtilities.calculateInnerArea(progressBar, vr);
+ 
+     int index = getAnimationIndex();
+     if (animationIndex > (numFrames + 1) / 2)
+       index = numFrames - getAnimationIndex();
+ 
+     if (progressBar.getOrientation() == JProgressBar.HORIZONTAL)
+       {
+ 	r.x = vr.x + (int) (index * boxDependent);
+ 	r.y = vr.y;
+ 	r.width = (int) boxDependent;
+ 	r.height = (int) boxIndependent;
+       }
+     else
+       {
+ 	index++;
+ 	r.x = vr.x;
+ 	r.y = vr.height - (int) (index * boxDependent) + vr.y;
+ 	r.width = (int) boxIndependent;
+ 	r.height = (int) boxDependent;
+       }
+ 
+     return r;
+   }
+ 
+   /**
+    * This method returns the length of the cells.
+    *
+    * @return The cell length.
+    */
+   protected int getCellLength()
+   {
+     return cellLength;
+   }
+ 
+   /**
+    * This method returns the spacing between cells.
+    *
+    * @return The cell gap.
+    */
+   protected int getCellSpacing()
+   {
+     return cellSpacing;
+   }
+ 
+   /**
+    * This method returns the maximum size of the JComponent.
+    * If it returns null, it is up to the LayoutManager
+    * to give it a size.
+    *
+    * @param c The component to find a maximum size for.
+    *
+    * @return The maximum size.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the minimum size of the JComponent.
+    * If it returns null, it is up to the LayoutManager to
+    * give it a size.
+    *
+    * @param c The component to find a minimum size for.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the preferred size of the inner
+    * rectangle (the bounds without the insets) if the
+    * progressBar is horizontal.
+    *
+    * @return The preferred size of the progressBar minus 
+    *         insets if it's horizontal.
+    */
+   protected Dimension getPreferredInnerHorizontal()
+   {
+     Rectangle vr = new Rectangle();
+ 
+     SwingUtilities.calculateInnerArea(progressBar, vr);
+ 
+     return new Dimension(vr.width, vr.height);
+   }
+ 
+   /**
+    * This method returns the preferred size of the inner
+    * rectangle (the bounds without insets) if the 
+    * progressBar is vertical.
+    *
+    * @return The preferred size of the progressBar minus
+    *         insets if it's vertical.
+    */
+   protected Dimension getPreferredInnerVertical()
+   {
+     Rectangle vr = new Rectangle();
+ 
+     SwingUtilities.calculateInnerArea(progressBar, vr);
+ 
+     return new Dimension(vr.width, vr.height);
+   }
+ 
+   /**
+    * This method returns the preferred size of the 
+    * given JComponent. If it returns null, then it
+    * is up to the LayoutManager to give it a size.
+    *
+    * @param c The component to find the preferred size for.
+    *
+    * @return The preferred size of the component.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     // The only thing we need to worry about is
+     // the text size.
+     Graphics g = progressBar.getGraphics();
+ 
+     Insets insets = c.getInsets();
+ 
+     FontMetrics fm = g.getFontMetrics(c.getFont());
+ 
+     int textW = fm.stringWidth(progressBar.getString());
+     int textH = fm.getHeight();
+ 
+     g.dispose();
+ 
+     if (progressBar.getOrientation() == JProgressBar.HORIZONTAL)
+       {
+ 	if (textH < 20)
+ 	  textH = 20;
+ 	if (textW < 200)
+ 	  textW = 200;
+       }
+     else
+       {
+ 	if (textH < 200)
+ 	  textH = 200;
+ 	if (textW < 20)
+ 	  textW = 20;
+       }
+     textW += insets.left + insets.right;
+     textH += insets.top + insets.bottom;
+     return new Dimension(textW, textH);
+   }
+ 
+   /**
+    * This method returns the Color that the text is shown in when the bar is
+    * not over the text.
+    *
+    * @return The color of the text when the bar is not over it.
+    */
+   protected Color getSelectionBackground()
+   {
+     return selectionBackground;
+   }
+ 
+   /**
+    * This method returns the Color that the text is shown in  when the bar is
+    * over the text.
+    *
+    * @return The color of the text when the bar is over it.
+    */
+   protected Color getSelectionForeground()
+   {
+     return selectionForeground;
+   }
+ 
+   /**
+    * This method returns the point (the top left of the bounding box)
+    * where the text should be painted. 
+    *
+    * @param g The Graphics object to measure FontMetrics with.
+    * @param progressString The string to paint.
+    * @param x The x coordinate of the overall bounds box.
+    * @param y The y coordinate of the overall bounds box.
+    * @param width The width of the overall bounds box.
+    * @param height The height of the overall bounds box.
+    *
+    * @return The top left of the bounding box where text should be painted.
+    */
+   protected Point getStringPlacement(Graphics g, String progressString, int x,
+                                      int y, int width, int height)
+   {
+     Rectangle tr = new Rectangle();
+     Rectangle vr = new Rectangle(x, y, width, height);
+     Rectangle ir = new Rectangle();
+ 
+     Font f = g.getFont();
+     FontMetrics fm = g.getFontMetrics(f);
+ 
+     SwingUtilities.layoutCompoundLabel(progressBar, fm, progressString, null,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER, vr, ir, tr, 0);
+     return new Point(tr.x, tr.y);
+   }
+ 
+   /**
+    * This method increments the animation index.
+    */
+   protected void incrementAnimationIndex()
+   {
+     animationIndex++;
+     //numFrames is like string length, it should be named numFrames or something
+     if (animationIndex >= numFrames)
+       animationIndex = 0;
+     progressBar.repaint();
+   }
+ 
+   /**
+    * This method paints the progressBar. It delegates its responsibilities
+    * to paintDeterminate and paintIndeterminate.
+    *
+    * @param g The Graphics object to paint with.
+    * @param c The JComponent to paint.
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     if (! progressBar.isIndeterminate())
+       paintDeterminate(g, c);
+     else
+       paintIndeterminate(g, c);
+       
+     if (progressBar.isBorderPainted())
+       progressBar.getBorder().paintBorder(progressBar, g, 0, 0,
+                                           progressBar.getWidth(),
+ 					  progressBar.getHeight());
+   }
+ 
+   /**
+    * This method is called if the painting to be done is 
+    * for a determinate progressBar.
+    *
+    * @param g The Graphics object to paint with.
+    * @param c The JComponent to paint.
+    */
+   protected void paintDeterminate(Graphics g, JComponent c)
+   {
+     Color saved = g.getColor();
+     int space = getCellSpacing();
+     int len = getCellLength();
+     int max = progressBar.getMaximum();
+     int min = progressBar.getMinimum();
+     int value = progressBar.getValue();
+ 
+     Rectangle vr = new Rectangle();
+     SwingUtilities.calculateInnerArea(c, vr);
+ 
+     Rectangle or = c.getBounds();
+ 
+     Insets insets = c.getInsets();
+ 
+     int amountFull = getAmountFull(insets, or.width, or.height);
+ 
+     g.setColor(c.getBackground());
+     g.fill3DRect(vr.x, vr.y, vr.width, vr.height, false);
+ 
+     if (max != min && len != 0 && value > min)
+       {
+ 	int iterations = value / (space + len);
+ 
+ 	if (progressBar.getOrientation() == JProgressBar.HORIZONTAL)
+ 	  {
+ 	    double spaceInUnits = space * (double) vr.width / (max - min);
+ 	    double lenInUnits = len * (double) vr.width / (max - min);
+ 	    double currX = vr.x;
+ 
+ 	    g.setColor(c.getForeground());
+ 	    g.fill3DRect(vr.x, vr.y, amountFull, vr.height, true);
+ 
+ 	    g.setColor(c.getBackground());
+ 	    if (spaceInUnits != 0)
+ 	      {
+ 		for (int i = 0; i < iterations; i++)
+ 		  {
+ 		    currX += lenInUnits;
+ 		    g.fill3DRect((int) currX, vr.y, (int) spaceInUnits,
+ 		                 vr.height, true);
+ 		    currX += spaceInUnits;
+ 		  }
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    double currY = vr.y;
+ 	    double spaceInUnits = space * (double) vr.height / (max - min);
+ 	    double lenInUnits = len * (double) vr.height / (max - min);
+ 
+ 	    g.setColor(c.getForeground());
+ 	    g.fill3DRect(vr.x, vr.y + vr.height - amountFull, vr.width,
+ 	                 amountFull, true);
+ 
+ 	    g.setColor(c.getBackground());
+ 
+ 	    if (spaceInUnits != 0)
+ 	      {
+ 		for (int i = 0; i < iterations; i++)
+ 		  {
+ 		    currY -= lenInUnits + spaceInUnits;
+ 		    g.fill3DRect(vr.x, (int) currY, vr.width,
+ 		                 (int) spaceInUnits, true);
+ 		  }
+ 	      }
+ 	  }
+       }
+ 
+     if (progressBar.isStringPainted() && !progressBar.getString().equals(""))
+       paintString(g, 0, 0, or.width, or.height, amountFull, insets);
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method is called if the painting to be done is for
+    * an indeterminate progressBar.
+    *
+    * @param g The Graphics object to paint with.
+    * @param c The JComponent to paint.
+    */
+   protected void paintIndeterminate(Graphics g, JComponent c)
+   {
+     //need to paint the box at it's current position. no text is painted since
+     //all we're doing is bouncing back and forth
+     Color saved = g.getColor();
+     Insets insets = c.getInsets();
+ 
+     Rectangle or = c.getBounds();
+     Rectangle vr = new Rectangle();
+     SwingUtilities.calculateInnerArea(c, vr);
+ 
+     g.setColor(c.getBackground());
+     g.fill3DRect(vr.x, vr.y, vr.width, vr.height, false);
+ 
+     Rectangle box = new Rectangle();
+     getBox(box);
+ 
+     g.setColor(c.getForeground());
+     g.fill3DRect(box.x, box.y, box.width, box.height, true);
+ 
+     if (progressBar.isStringPainted() && !progressBar.getString().equals(""))
+       paintString(g, 0, 0, or.width, or.height,
+                   getAmountFull(insets, or.width, or.height), insets);
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints the string for the progressBar.
+    *
+    * @param g The Graphics object to paint with.
+    * @param x The x coordinate of the progressBar.
+    * @param y The y coordinate of the progressBar.
+    * @param width The width of the progressBar.
+    * @param height The height of the progressBar.
+    * @param amountFull The amount of the progressBar that has its bar filled.
+    * @param b The insets of the progressBar.
+    */
+   protected void paintString(Graphics g, int x, int y, int width, int height,
+                              int amountFull, Insets b)
+   {
+     // We want to place in the exact center of the bar.
+     Point placement = getStringPlacement(g, progressBar.getString(),
+                                          x + b.left, y + b.top,
+                                          width - b.left - b.right,
+                                          height - b.top - b.bottom);
+     Color saved = g.getColor();
+ 
+     // FIXME: The Color of the text should use selectionForeground and selectionBackground
+     // but that can't be done right now, so we'll use white in the mean time.
+     g.setColor(Color.WHITE);
+ 
+     FontMetrics fm = g.getFontMetrics(progressBar.getFont());
+ 
+     g.drawString(progressBar.getString(), placement.x,
+                  placement.y + fm.getAscent());
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method sets the current animation index. If the index
+    * is greater than the number of frames, it resets to 0.
+    *
+    * @param newValue The new animation index.
+    */
+   protected void setAnimationIndex(int newValue)
+   {
+     animationIndex = (newValue <= numFrames) ? newValue : 0;
+     progressBar.repaint();
+   }
+ 
+   /**
+    * This method sets the cell length.
+    *
+    * @param cellLen The cell length.
+    */
+   protected void setCellLength(int cellLen)
+   {
+     cellLength = cellLen;
+   }
+ 
+   /**
+    * This method sets the cell spacing.
+    *
+    * @param cellSpace The cell spacing.
+    */
+   protected void setCellSpacing(int cellSpace)
+   {
+     cellSpacing = cellSpace;
+   }
+ 
+   /**
+    * This method starts the animation timer. It is called
+    * when the propertyChangeListener detects that the progressBar
+    * has changed to indeterminate mode.
+    *
+    * @since 1.4
+    */
+   protected void startAnimationTimer()
+   {
+     if (animationTimer != null)
+       animationTimer.start();
+   }
+ 
+   /**
+    * This method stops the animation timer. It is called when
+    * the propertyChangeListener detects that the progressBar
+    * has changed to determinate mode.
+    *
+    * @since 1.4
+    */
+   protected void stopAnimationTimer()
+   {
+     if (animationTimer != null)
+       animationTimer.stop();
+     setAnimationIndex(0);
+   }
+ 
+   /**
+    * This method changes the settings for the progressBar to
+    * the defaults provided by the current Look and Feel.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     progressBar.setFont(defaults.getFont("ProgressBar.font"));
+     progressBar.setForeground(defaults.getColor("ProgressBar.foreground"));
+     progressBar.setBackground(defaults.getColor("ProgressBar.background"));
+     progressBar.setBorder(defaults.getBorder("ProgressBar.border"));
+     progressBar.setOpaque(true);
+ 
+     selectionForeground = defaults.getColor("ProgressBar.selectionForeground");
+     selectionBackground = defaults.getColor("ProgressBar.selectionBackground");
+     cellLength = defaults.getInt("ProgressBar.cellLength");
+     cellSpacing = defaults.getInt("ProgressBar.cellSpacing");
+ 
+     int repaintInterval = defaults.getInt("ProgressBar.repaintInterval");
+     int cycleTime = defaults.getInt("ProgressBar.cycleTime");
+ 
+     if (cycleTime % repaintInterval != 0
+         && (cycleTime / repaintInterval) % 2 != 0)
+       {
+ 	int div = (cycleTime / repaintInterval) + 2;
+ 	div /= 2;
+ 	div *= 2;
+ 	cycleTime = div * repaintInterval;
+       }
+     setAnimationIndex(0);
+     numFrames = cycleTime / repaintInterval;
+     animationTimer.setDelay(repaintInterval);
+   }
+ 
+   /**
+    * The method uninstalls any defaults that were
+    * set by the current Look and Feel.
+    */
+   protected void uninstallDefaults()
+   {
+     progressBar.setFont(null);
+     progressBar.setForeground(null);
+     progressBar.setBackground(null);
+ 
+     selectionForeground = null;
+     selectionBackground = null;
+   }
+ 
+   /**
+    * This method registers listeners to all the 
+    * components that this UI delegate needs to listen to.
+    */
+   protected void installListeners()
+   {
+     changeListener = new ChangeHandler();
+     propertyListener = new PropertyChangeHandler();
+     animation = new Animator();
+ 
+     progressBar.addChangeListener(changeListener);
+     progressBar.addPropertyChangeListener(propertyListener);
+     animationTimer.addActionListener(animation);
+   }
+ 
+   /**
+    * This method unregisters listeners to all the 
+    * components that were listened to.
+    */
+   protected void uninstallListeners()
+   {
+     progressBar.removeChangeListener(changeListener);
+     progressBar.removePropertyChangeListener(propertyListener);
+     animationTimer.removeActionListener(animation);
+ 
+     changeListener = null;
+     propertyListener = null;
+     animation = null;
+   }
+ 
+   /**
+    * This method installs the UI for the given JComponent.
+    * This includes setting up defaults and listeners as
+    * well as initializing any values or objects that
+    * the UI may need.
+    *
+    * @param c The JComponent that is having this UI installed.
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+     if (c instanceof JProgressBar)
+       {
+ 	progressBar = (JProgressBar) c;
+ 
+ 	animationTimer = new Timer(200, null);
+ 	animationTimer.setRepeats(true);
+ 
+ 	installDefaults();
+ 	installListeners();
+       }
+   }
+ 
+   /**
+    * This method removes the UI for the given JComponent.
+    * This includes removing any listeners or defaults
+    * that the installUI may have set up.
+    *
+    * @param c The JComponent that is having this UI uninstalled.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     super.uninstallUI(c);
+     uninstallListeners();
+     uninstallDefaults();
+ 
+     animationTimer = null;
+     progressBar = null;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java	Wed Feb 16 20:02:56 2005
***************
*** 0 ****
--- 1,102 ----
+ /* BasicRadioButtonMenuItemUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.event.MouseEvent;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JMenuItem;
+ import javax.swing.MenuElement;
+ import javax.swing.MenuSelectionManager;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.ComponentUI;
+ 
+ /**
+  * UI Delegator for JRadioButtonMenuItem
+  */
+ public class BasicRadioButtonMenuItemUI extends BasicMenuItemUI
+ {
+   /**
+    * Creates a new BasicRadioButtonMenuItemUI object.
+    */
+   public BasicRadioButtonMenuItemUI()
+   {
+     super();
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+     checkIcon = defaults.getIcon("RadioButtonMenuItem.checkIcon");
+   }
+ 
+   /**
+     * Factory method to create a BasicRadioButtonMenuItemUI for the given {@link
+     * JComponent}, which should be a JRadioButtonMenuItem.
+     *
+     * @param b The {@link JComponent} a UI is being created for.
+     *
+     * @return A BasicRadioButtonMenuItemUI for the {@link JComponent}.
+     */
+   public static ComponentUI createUI(JComponent b)
+   {
+     return new BasicRadioButtonMenuItemUI();
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @return $returnType$ DOCUMENT ME!
+    */
+   protected String getPropertyPrefix()
+   {
+     return null;
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    *
+    * @param item DOCUMENT ME!
+    * @param e DOCUMENT ME!
+    * @param path DOCUMENT ME!
+    * @param manager DOCUMENT ME!
+    */
+   public void processMouseEvent(JMenuItem item, MouseEvent e,
+                                 MenuElement[] path,
+                                 MenuSelectionManager manager)
+   {
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicRadioButtonUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicRadioButtonUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicRadioButtonUI.java	Sat Jan 10 21:59:30 2004
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicRadioButtonUI.java	Thu Feb 12 00:17:24 2004
*************** exception statement from your version. *
*** 38,153 ****
  
  package javax.swing.plaf.basic;
  
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Rectangle;
  import javax.swing.AbstractButton;
  import javax.swing.JComponent;
  import javax.swing.plaf.ComponentUI;
  
  public class BasicRadioButtonUI extends BasicToggleButtonUI
  {
-   int large_circle_width = 20;
-   int circle_width = large_circle_width - 8; // FIXME: sun == ?
-   
-     public static ComponentUI createUI(final JComponent c)  {
- 	return new BasicRadioButtonUI();
-     }
  
!     
!     public void installUI(final JComponent c)  {
! 	super.installUI(c);
!     }
!     
!     public Dimension getPreferredSize(JComponent c) 
!     {
! 	AbstractButton b = (AbstractButton)c;
! 	Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, gap);
! 	
! 	// and add a little something for the circles:
! 
! 	d.width += large_circle_width;
! 	d.height = Math.max(large_circle_width, d.height);
! 	
! 	//System.out.println("^^^^^^^^^^^^^^^^^^^^^^   BASIC-PREF="+d + ",T="+b.text);
! 	return d;
!     }
!     
!     protected void paintFocus(Graphics g, 
! 			      JComponent c,
! 			      Rectangle vr,
! 			      Rectangle tr,
! 			      Rectangle ir)
!     {
!     }
! 
!     protected void paintIcon(Graphics g, 
! 			     JComponent c, 
! 			     Rectangle iconRect)
!     {
!     }
  
!     protected void paintButtonPressed(Graphics g,
! 				      JComponent b)
!     {
! 	Dimension size = b.getSize();
! 	
! 	paintButtonNormal(g, b);
  
! 	int x = gap;
! 	int y = gap;
  
! 	int diffp = 2;
! 	int diff = 3;
! 	
! 	g.setColor(textColor);
! 	g.fillArc(x+diffp, y+diffp, 
! 		  circle_width-diff, circle_width-diff,
! 		  0, 360);
!     }
!     
!     protected void paintButtonNormal(Graphics g,
! 				     JComponent c)
!     {
! 	AbstractButton b = (AbstractButton) c;
! 	
! 	Dimension size = b.getSize();
! 	
! 	g.setColor(normalBackgroundColor);
! 	g.fillRect(1,1,size.width-2, size.height-2);  
! 	
! 	int x = gap;
! 	int y = gap;
! 	
! 	g.setColor(pressedBackgroundColor);
! 	g.drawArc(x, y,
! 		  circle_width, circle_width,
! 		  0, 360);
  
! 	g.setColor(new Color(255,255,255));
! 	g.drawArc(x, y,
! 		  circle_width+1, circle_width+1,
! 		  145, 160);
!     }
      
-     protected void paintText(Graphics g,
- 			     JComponent c,
- 			     Rectangle textRect,
- 			     String text) 
-     {
- 	//        AbstractButton b = (AbstractButton) c;
- 	
- 	//System.out.println("drawing string: " + text + ", " + c.isEnabled());
- 	
- 	g.setColor(c.isEnabled() ? textColor : disabledTextColor);
- 	
- 	BasicGraphicsUtils.drawString(g,
- 				      text, 
- 				      0,
- 				      textRect.x + circle_width + gap, 
- 				      textRect.y);
-     } 
  }
  
  
--- 38,79 ----
  
  package javax.swing.plaf.basic;
  
  import javax.swing.AbstractButton;
+ import javax.swing.Icon;
  import javax.swing.JComponent;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
  import javax.swing.plaf.ComponentUI;
  
  public class BasicRadioButtonUI extends BasicToggleButtonUI
  {
  
!   protected Icon icon;
  
!   public static ComponentUI createUI(final JComponent c)  {
!     return new BasicRadioButtonUI();
!   }
  
!   public BasicRadioButtonUI()
!   {
!     icon = getDefaultIcon();
!   }
  
!   public void installUI(final JComponent c)  {
!     super.installUI(c);
!     if (c instanceof AbstractButton)
!       {
!         AbstractButton b = (AbstractButton) c;        
!         b.setIcon(icon);
!       }
!   }
  
!   public Icon getDefaultIcon()
!   {
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!     return defaults.getIcon("RadioButton.icon");
!   }
      
  }
  
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicRootPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicRootPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicRootPaneUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicRootPaneUI.java	Wed Feb 16 20:02:56 2005
***************
*** 0 ****
--- 1,67 ----
+ /* BasicPanelUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.RootPaneUI;
+ 
+ public class BasicRootPaneUI extends RootPaneUI
+   implements PropertyChangeListener
+ {
+   public static ComponentUI createUI(JComponent x) 
+   {
+     return new BasicRootPaneUI();
+   }
+ 
+   public void installUI(JComponent c)
+   {
+     c.setOpaque(true);
+     c.setBackground(UIManager.getColor("control"));
+     super.installUI(c);
+   }
+ 
+   public void propertyChange(PropertyChangeEvent event)
+   {
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicScrollBarUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicScrollBarUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicScrollBarUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicScrollBarUI.java	Wed Feb 16 20:02:56 2005
***************
*** 0 ****
--- 1,1299 ----
+ /* BasicScrollBarUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.LayoutManager;
+ import java.awt.Point;
+ import java.awt.Polygon;
+ import java.awt.Rectangle;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.awt.event.MouseAdapter;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseMotionListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.BoundedRangeModel;
+ import javax.swing.JButton;
+ import javax.swing.JComponent;
+ import javax.swing.JScrollBar;
+ import javax.swing.SwingConstants;
+ import javax.swing.SwingUtilities;
+ import javax.swing.Timer;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.ScrollBarUI;
+ 
+ /**
+  * The Basic Look and Feel UI delegate for JScrollBar.
+  */
+ public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager,
+                                                              SwingConstants
+ {
+   /**
+    * A helper class that listens to the two JButtons on each end of the
+    * JScrollBar.
+    */
+   protected class ArrowButtonListener extends MouseAdapter
+   {
+     /**
+      * Move the thumb in the direction specified by the  button's arrow. If
+      * this button is held down, then it should keep moving the thumb.
+      *
+      * @param e The MouseEvent fired by the JButton.
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       scrollTimer.stop();
+       scrollListener.setScrollByBlock(false);
+       if (e.getSource() == incrButton)
+ 	scrollListener.setDirection(POSITIVE_SCROLL);
+       else
+ 	scrollListener.setDirection(NEGATIVE_SCROLL);
+       scrollTimer.start();
+     }
+ 
+     /**
+      * Stops the thumb when the JButton is released.
+      *
+      * @param e The MouseEvent fired by the JButton.
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       scrollTimer.stop();
+     }
+   }
+ 
+   /**
+    * A helper class that listens to the ScrollBar's model for ChangeEvents.
+    */
+   protected class ModelListener implements ChangeListener
+   {
+     /**
+      * Called when the model changes.
+      *
+      * @param e The ChangeEvent fired by the model.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       //       System.err.println(this + ".stateChanged()");
+       calculatePreferredSize();
+       layoutContainer(scrollbar);
+       getThumbBounds();
+       scrollbar.repaint();
+     }
+   }
+ 
+   /**
+    * A helper class that listens to the ScrollBar's properties.
+    */
+   public class PropertyChangeHandler implements PropertyChangeListener
+   {
+     /**
+      * Called when one of the ScrollBar's properties change.
+      *
+      * @param e The PropertyChangeEvent fired by the ScrollBar.
+      */
+     public void propertyChange(PropertyChangeEvent e)
+     {
+       if (e.getPropertyName().equals("model"))
+         {
+ 	  ((BoundedRangeModel) e.getOldValue()).removeChangeListener(modelListener);
+ 	  scrollbar.getModel().addChangeListener(modelListener);
+ 	  getThumbBounds();
+         }
+       else if (e.getPropertyName().equals("orientation"))
+         {
+ 	  incrButton.removeMouseListener(buttonListener);
+ 	  decrButton.removeMouseListener(buttonListener);
+ 	  incrButton = createIncreaseButton(scrollbar.getOrientation());
+ 	  decrButton = createDecreaseButton(scrollbar.getOrientation());
+ 	  incrButton.addMouseListener(buttonListener);
+ 	  decrButton.addMouseListener(buttonListener);
+ 	  calculatePreferredSize();
+ 	  layoutContainer(scrollbar);
+         }
+       layoutContainer(scrollbar);
+       scrollbar.repaint();
+     }
+   }
+ 
+   /**
+    * A helper class that listens for events from the timer that is used to
+    * move the thumb.
+    */
+   protected class ScrollListener implements ActionListener
+   {
+     /** The direction the thumb moves in. */
+     private transient int direction;
+ 
+     /** Whether movement will be in blocks. */
+     private transient boolean block;
+ 
+     /**
+      * Creates a new ScrollListener object. The default is scrolling
+      * positively with block movement.
+      */
+     public ScrollListener()
+     {
+       direction = POSITIVE_SCROLL;
+       block = true;
+     }
+ 
+     /**
+      * Creates a new ScrollListener object using the given direction and
+      * block.
+      *
+      * @param dir The direction to move in.
+      * @param block Whether movement will be in blocks.
+      */
+     public ScrollListener(int dir, boolean block)
+     {
+       direction = dir;
+       this.block = block;
+     }
+ 
+     /**
+      * Sets the direction to scroll in.
+      *
+      * @param direction The direction to scroll in.
+      */
+     public void setDirection(int direction)
+     {
+       this.direction = direction;
+     }
+ 
+     /**
+      * Sets whether scrolling will be done in blocks.
+      *
+      * @param block Whether scrolling will be in blocks.
+      */
+     public void setScrollByBlock(boolean block)
+     {
+       this.block = block;
+     }
+ 
+     /**
+      * Called every time the timer reaches its interval.
+      *
+      * @param e The ActionEvent fired by the timer.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       if (block)
+         {
+ 	  // Only need to check it if it's block scrolling
+ 	  // We only block scroll if the click occurs
+ 	  // in the track.
+ 	  if (! trackListener.shouldScroll(direction))
+ 	    {
+ 	      trackHighlight = NO_HIGHLIGHT;
+ 	      scrollbar.repaint();
+ 	      return;
+ 	    }
+ 	  scrollByBlock(direction);
+         }
+       else
+ 	scrollByUnit(direction);
+     }
+   }
+ 
+   /**
+    * Helper class that listens for movement on the track.
+    */
+   protected class TrackListener extends MouseAdapter
+     implements MouseMotionListener
+   {
+     /** The current X coordinate of the mouse. */
+     protected int currentMouseX;
+ 
+     /** The current Y coordinate of the mouse. */
+     protected int currentMouseY;
+ 
+     /**
+      * The offset between the current mouse cursor and the  current value of
+      * the scrollbar.
+      */
+     protected int offset;
+ 
+     /**
+      * This method is called when the mouse is being dragged.
+      *
+      * @param e The MouseEvent given.
+      */
+     public void mouseDragged(MouseEvent e)
+     {
+       currentMouseX = e.getX();
+       currentMouseY = e.getY();
+       if (scrollbar.getValueIsAdjusting())
+         {
+ 	  int value;
+ 	  if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL)
+ 	    value = valueForXPosition(currentMouseX) - offset;
+ 	  else
+ 	    value = valueForYPosition(currentMouseY) - offset;
+ 
+ 	  scrollbar.setValue(value);
+         }
+     }
+ 
+     /**
+      * This method is called when the mouse is moved.
+      *
+      * @param e The MouseEvent given.
+      */
+     public void mouseMoved(MouseEvent e)
+     {
+       // Not interested in where the mouse
+       // is unless it is being dragged.
+     }
+ 
+     /**
+      * This method is called when the mouse is pressed. When it is pressed,
+      * the thumb should move in blocks towards the cursor.
+      *
+      * @param e The MouseEvent given.
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       currentMouseX = e.getX();
+       currentMouseY = e.getY();
+ 
+       int value;
+       if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL)
+ 	value = valueForXPosition(currentMouseX);
+       else
+ 	value = valueForYPosition(currentMouseY);
+ 
+       if (value == scrollbar.getValue())
+ 	return;
+ 
+       if (! thumbRect.contains(e.getPoint()))
+         {
+ 	  scrollTimer.stop();
+ 	  scrollListener.setScrollByBlock(true);
+ 	  if (value > scrollbar.getValue())
+ 	    {
+ 	      trackHighlight = INCREASE_HIGHLIGHT;
+ 	      scrollListener.setDirection(POSITIVE_SCROLL);
+ 	    }
+ 	  else
+ 	    {
+ 	      trackHighlight = DECREASE_HIGHLIGHT;
+ 	      scrollListener.setDirection(NEGATIVE_SCROLL);
+ 	    }
+ 	  scrollTimer.start();
+         }
+       else
+         {
+ 	  // We'd like to keep track of where the cursor
+ 	  // is inside the thumb.
+ 	  // This works because the scrollbar's value represents 
+ 	  // "lower" edge of the thumb. The value at which
+ 	  // the cursor is at must be greater or equal
+ 	  // to that value.
+ 	  scrollbar.setValueIsAdjusting(true);
+ 	  offset = value - scrollbar.getValue();
+         }
+       scrollbar.repaint();
+     }
+ 
+     /**
+      * This method is called when the mouse is released. It should stop
+      * movement on the thumb
+      *
+      * @param e The MouseEvent given.
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       trackHighlight = NO_HIGHLIGHT;
+       scrollTimer.stop();
+ 
+       if (scrollbar.getValueIsAdjusting())
+ 	scrollbar.setValueIsAdjusting(false);
+       scrollbar.repaint();
+     }
+ 
+     /**
+      * A helper method that decides whether we should keep scrolling in the
+      * given direction.
+      *
+      * @param direction The direction to check for.
+      *
+      * @return Whether the thumb should keep scrolling.
+      */
+     public boolean shouldScroll(int direction)
+     {
+       int value;
+       if (scrollbar.getOrientation() == HORIZONTAL)
+ 	value = valueForXPosition(currentMouseX);
+       else
+ 	value = valueForYPosition(currentMouseY);
+ 
+       if (direction == POSITIVE_SCROLL)
+ 	return (value > scrollbar.getValue());
+       else
+ 	return (value < scrollbar.getValue());
+     }
+   }
+ 
+   /** The listener that listens to the JButtons. */
+   protected ArrowButtonListener buttonListener;
+ 
+   /** The listener that listens to the model. */
+   protected ModelListener modelListener;
+ 
+   /** The listener that listens to the scrollbar for property changes. */
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /** The listener that listens to the timer. */
+   protected ScrollListener scrollListener;
+ 
+   /** The listener that listens for MouseEvents on the track. */
+   protected TrackListener trackListener;
+ 
+   /** The JButton that decrements the scrollbar's value. */
+   protected JButton decrButton;
+ 
+   /** The JButton that increments the scrollbar's value. */
+   protected JButton incrButton;
+ 
+   /** The dimensions of the maximum thumb size. */
+   protected Dimension maximumThumbSize;
+ 
+   /** The dimensions of the minimum thumb size. */
+   protected Dimension minimumThumbSize;
+ 
+   /** The color of the thumb. */
+   protected Color thumbColor;
+ 
+   /** The outer shadow of the thumb. */
+   protected Color thumbDarkShadowColor;
+ 
+   /** The top and left edge color for the thumb. */
+   protected Color thumbHighlightColor;
+ 
+   /** The outer light shadow for the thumb. */
+   protected Color thumbLightShadowColor;
+ 
+   /** The color that is used when the mouse press occurs in the track. */
+   protected Color trackHighlightColor;
+ 
+   /** The color of the track. */
+   protected Color trackColor;
+ 
+   /** The size and position of the track. */
+   protected Rectangle trackRect;
+ 
+   /** The size and position of the thumb. */
+   protected Rectangle thumbRect;
+ 
+   /** Indicates that the decrease highlight should be painted. */
+   protected static final int DECREASE_HIGHLIGHT = 1;
+ 
+   /** Indicates that the increase highlight should be painted. */
+   protected static final int INCREASE_HIGHLIGHT = 2;
+ 
+   /** Indicates that no highlight should be painted. */
+   protected static final int NO_HIGHLIGHT = 0;
+ 
+   /** Indicates that the scrolling direction is positive. */
+   private static final int POSITIVE_SCROLL = 1;
+ 
+   /** Indicates that the scrolling direction is negative. */
+   private static final int NEGATIVE_SCROLL = -1;
+ 
+   /** The cached preferred size for the scrollbar. */
+   private transient Dimension preferredSize;
+ 
+   /** The current highlight status. */
+   protected int trackHighlight;
+ 
+   /** FIXME: Use this for something (presumably mouseDragged) */
+   protected boolean isDragging;
+ 
+   /** The timer used to move the thumb when the mouse is held. */
+   protected Timer scrollTimer;
+ 
+   /** The scrollbar this UI is acting for. */
+   protected JScrollBar scrollbar;
+ 
+   /**
+    * This method adds a component to the layout.
+    *
+    * @param name The name to associate with the component that is added.
+    * @param child The Component to add.
+    */
+   public void addLayoutComponent(String name, Component child)
+   {
+     // You should not be adding stuff to this component.
+     // The contents are fixed.
+   }
+ 
+   /**
+    * This method configures the scrollbar's colors. This can be  done by
+    * looking up the standard colors from the Look and Feel defaults.
+    */
+   protected void configureScrollBarColors()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     trackColor = defaults.getColor("ScrollBar.track");
+     trackHighlightColor = defaults.getColor("ScrollBar.trackHighlight");
+     thumbColor = defaults.getColor("ScrollBar.thumb");
+     thumbHighlightColor = defaults.getColor("ScrollBar.thumbHighlight");
+     thumbDarkShadowColor = defaults.getColor("ScrollBar.thumbDarkShadow");
+     thumbLightShadowColor = defaults.getColor("ScrollBar.thumbLightShadow");
+   }
+ 
+   /**
+    * This method creates an ArrowButtonListener.
+    *
+    * @return A new ArrowButtonListener.
+    */
+   protected ArrowButtonListener createArrowButtonListener()
+   {
+     return new ArrowButtonListener();
+   }
+ 
+   /**
+    * This method creates a new JButton with the appropriate icon for the
+    * orientation.
+    *
+    * @param orientation The orientation this JButton uses.
+    *
+    * @return The increase JButton.
+    */
+   protected JButton createIncreaseButton(int orientation)
+   {
+     if (incrButton == null)
+       incrButton = new BasicArrowButton((orientation == SwingConstants.HORIZONTAL)
+                                         ? SwingConstants.EAST
+                                         : SwingConstants.SOUTH);
+     else
+       {
+ 	if (orientation == SwingConstants.HORIZONTAL)
+ 	  ((BasicArrowButton) incrButton).setDirection(SwingConstants.EAST);
+ 	else
+ 	  ((BasicArrowButton) incrButton).setDirection(SwingConstants.SOUTH);
+       }
+     return incrButton;
+   }
+ 
+   /**
+    * This method creates a new JButton with the appropriate icon for the
+    * orientation.
+    *
+    * @param orientation The orientation this JButton uses.
+    *
+    * @return The decrease JButton.
+    */
+   protected JButton createDecreaseButton(int orientation)
+   {
+     if (decrButton == null)
+       decrButton = new BasicArrowButton((orientation == SwingConstants.HORIZONTAL)
+                                         ? SwingConstants.WEST
+                                         : SwingConstants.NORTH);
+     else
+       {
+ 	if (orientation == SwingConstants.HORIZONTAL)
+ 	  ((BasicArrowButton) decrButton).setDirection(SwingConstants.WEST);
+ 	else
+ 	  ((BasicArrowButton) decrButton).setDirection(SwingConstants.NORTH);
+       }
+     return decrButton;
+   }
+ 
+   /**
+    * This method creates a new ModelListener.
+    *
+    * @return A new ModelListener.
+    */
+   protected ModelListener createModelListener()
+   {
+     return new ModelListener();
+   }
+ 
+   /**
+    * This method creates a new PropertyChangeListener.
+    *
+    * @return A new PropertyChangeListener.
+    */
+   protected PropertyChangeListener createPropertyChangeListener()
+   {
+     return new PropertyChangeHandler();
+   }
+ 
+   /**
+    * This method creates a new ScrollListener.
+    *
+    * @return A new ScrollListener.
+    */
+   protected ScrollListener createScrollListener()
+   {
+     return new ScrollListener();
+   }
+ 
+   /**
+    * This method creates a new TrackListener.
+    *
+    * @return A new TrackListener.
+    */
+   protected TrackListener createTrackListener()
+   {
+     return new TrackListener();
+   }
+ 
+   /**
+    * This method returns a new BasicScrollBarUI.
+    *
+    * @param c The JComponent to create a UI for.
+    *
+    * @return A new BasicScrollBarUI.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicScrollBarUI();
+   }
+ 
+   /**
+    * This method returns the maximum size for this JComponent.
+    *
+    * @param c The JComponent to measure the maximum size for.
+    *
+    * @return The maximum size for the component.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the maximum thumb size.
+    *
+    * @return The maximum thumb size.
+    */
+   protected Dimension getMaximumThumbSize()
+   {
+     return maximumThumbSize;
+   }
+ 
+   /**
+    * This method returns the minimum size for this JComponent.
+    *
+    * @param c The JComponent to measure the minimum size for.
+    *
+    * @return The minimum size for the component.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the minimum thumb size.
+    *
+    * @return The minimum thumb size.
+    */
+   protected Dimension getMinimumThumbSize()
+   {
+     return minimumThumbSize;
+   }
+ 
+   /**
+    * This method calculates the preferred size since calling
+    * getPreferredSize() returns a cached value.
+    */
+   private void calculatePreferredSize()
+   {
+     // System.err.println(this + ".calculatePreferredSize()");
+     int height;
+     int width;
+     height = width = 0;
+ 
+     if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL)
+       {
+ 	width += incrButton.getPreferredSize().getWidth();
+ 	width += decrButton.getPreferredSize().getWidth();
+ 
+ 	width += (scrollbar.getMaximum() - scrollbar.getMinimum());
+ 
+ 	height = Math.max(incrButton.getPreferredSize().height,
+ 	                  decrButton.getPreferredSize().height);
+ 	height = Math.max(getMinimumThumbSize().height, height);
+ 	height = Math.max(20, height);
+ 	height = Math.min(getMaximumThumbSize().height, height);
+       }
+     else
+       {
+ 	height += incrButton.getPreferredSize().getHeight();
+ 	height += decrButton.getPreferredSize().getHeight();
+ 
+ 	height += (scrollbar.getMaximum() - scrollbar.getMinimum());
+ 
+ 	width = Math.max(incrButton.getPreferredSize().width,
+ 	                 decrButton.getPreferredSize().width);
+ 	width = Math.max(getMinimumThumbSize().width, width);
+ 	width = Math.max(20, width);
+ 	width = Math.min(getMaximumThumbSize().width, width);
+       }
+ 
+     Insets insets = scrollbar.getInsets();
+ 
+     height += insets.top + insets.bottom;
+     width += insets.left + insets.right;
+ 
+     preferredSize = new Dimension(width, height);
+   }
+ 
+   /**
+    * This method returns a cached value of the preferredSize. The only
+    * restrictions are: If the scrollbar is horizontal, the height should be
+    * the maximum of the height of the JButtons and  the minimum width of the
+    * thumb. For vertical scrollbars, the  calculation is similar (swap width
+    * for height and vice versa).
+    *
+    * @param c The JComponent to measure.
+    *
+    * @return The preferredSize.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     calculatePreferredSize();
+     return preferredSize;
+   }
+ 
+   /**
+    * This method returns the thumb's bounds based on the  current value of the
+    * scrollbar. This method updates the cached value and returns that.
+    *
+    * @return The thumb bounds.
+    */
+   protected Rectangle getThumbBounds()
+   {
+     int max = scrollbar.getMaximum();
+     int min = scrollbar.getMinimum();
+     int value = scrollbar.getValue();
+     int extent = scrollbar.getVisibleAmount();
+ 
+     // System.err.println(this + ".getThumbBounds()");
+     if (max == min)
+       {
+ 	thumbRect.x = trackRect.x;
+ 	thumbRect.y = trackRect.y;
+ 	if (scrollbar.getOrientation() == HORIZONTAL)
+ 	  {
+ 	    thumbRect.width = getMinimumThumbSize().width;
+ 	    thumbRect.height = trackRect.height;
+ 	  }
+ 	else
+ 	  {
+ 	    thumbRect.width = trackRect.width;
+ 	    thumbRect.height = getMinimumThumbSize().height;
+ 	  }
+ 	return thumbRect;
+       }
+ 
+     if (scrollbar.getOrientation() == HORIZONTAL)
+       {
+ 	thumbRect.x = trackRect.x;
+ 	thumbRect.x += (value - min) * trackRect.width / (max - min);
+ 	thumbRect.y = trackRect.y;
+ 
+ 	thumbRect.width = extent * trackRect.width / (max - min);
+ 	thumbRect.height = trackRect.height;
+       }
+     else
+       {
+ 	thumbRect.x = trackRect.x;
+ 	thumbRect.y = trackRect.y + value * trackRect.height / (max - min);
+ 
+ 	thumbRect.width = trackRect.width;
+ 	thumbRect.height = extent * trackRect.height / (max - min);
+       }
+     return thumbRect;
+   }
+ 
+   /**
+    * This method calculates the bounds of the track. This method updates the
+    * cached value and returns it.
+    *
+    * @return The track's bounds.
+    */
+   protected Rectangle getTrackBounds()
+   {
+     SwingUtilities.calculateInnerArea(scrollbar, trackRect);
+ 
+     if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL)
+       {
+ 	trackRect.width -= incrButton.getPreferredSize().getWidth();
+ 	trackRect.width -= decrButton.getPreferredSize().getWidth();
+ 
+ 	trackRect.x += decrButton.getPreferredSize().getWidth();
+       }
+     else
+       {
+ 	trackRect.height -= incrButton.getPreferredSize().getHeight();
+ 	trackRect.height -= decrButton.getPreferredSize().getHeight();
+ 
+ 	trackRect.y += incrButton.getPreferredSize().getHeight();
+       }
+     return trackRect;
+   }
+ 
+   /**
+    * This method installs any addition Components that  are a part of or
+    * related to this scrollbar.
+    */
+   protected void installComponents()
+   {
+     incrButton = createIncreaseButton(scrollbar.getOrientation());
+     scrollbar.add(incrButton);
+     decrButton = createDecreaseButton(scrollbar.getOrientation());
+     scrollbar.add(decrButton);
+   }
+ 
+   /**
+    * This method installs the defaults for the scrollbar specified by the
+    * Basic Look and Feel.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     scrollbar.setForeground(defaults.getColor("ScrollBar.foreground"));
+     scrollbar.setBackground(defaults.getColor("ScrollBar.background"));
+     scrollbar.setBorder(defaults.getBorder("ScrollBar.border"));
+     scrollbar.setOpaque(true);
+ 
+     maximumThumbSize = defaults.getDimension("ScrollBar.maximumThumbSize");
+     minimumThumbSize = defaults.getDimension("ScrollBar.minimumThumbSize");
+   }
+ 
+   /**
+    * This method installs the keyboard actions for the scrollbar.
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: implement.
+   }
+ 
+   /**
+    * This method installs any listeners for the scrollbar. This method also
+    * installs listeners for things such as the JButtons and the timer.
+    */
+   protected void installListeners()
+   {
+     scrollListener = createScrollListener();
+     trackListener = createTrackListener();
+     buttonListener = createArrowButtonListener();
+     modelListener = createModelListener();
+     propertyChangeListener = createPropertyChangeListener();
+ 
+     scrollbar.addMouseMotionListener(trackListener);
+     scrollbar.addMouseListener(trackListener);
+ 
+     incrButton.addMouseListener(buttonListener);
+     decrButton.addMouseListener(buttonListener);
+ 
+     scrollbar.addPropertyChangeListener(propertyChangeListener);
+     scrollbar.getModel().addChangeListener(modelListener);
+ 
+     scrollTimer.addActionListener(scrollListener);
+   }
+ 
+   /**
+    * This method installs the UI for the component. This can include setting
+    * up listeners, defaults,  and components. This also includes initializing
+    * any data objects.
+    *
+    * @param c The JComponent to install.
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+     if (c instanceof JScrollBar)
+       {
+ 	scrollbar = (JScrollBar) c;
+ 
+ 	trackRect = new Rectangle();
+ 	thumbRect = new Rectangle();
+ 
+ 	scrollTimer = new Timer(200, null);
+ 	scrollTimer.setRepeats(true);
+ 
+ 	installComponents();
+ 	installListeners();
+ 	installDefaults();
+ 	configureScrollBarColors();
+ 
+ 	calculatePreferredSize();
+ 	layoutContainer(scrollbar);
+       }
+   }
+ 
+   /**
+    * This method lays out the scrollbar.
+    *
+    * @param scrollbarContainer The Container to layout.
+    */
+   public void layoutContainer(Container scrollbarContainer)
+   {
+     if (scrollbarContainer instanceof JScrollBar)
+       {
+ 	if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL)
+ 	  layoutHScrollbar((JScrollBar) scrollbarContainer);
+ 	else
+ 	  layoutVScrollbar((JScrollBar) scrollbarContainer);
+       }
+   }
+ 
+   /**
+    * This method lays out the scrollbar horizontally.
+    *
+    * @param sb The JScrollBar to layout.
+    */
+   protected void layoutHScrollbar(JScrollBar sb)
+   {
+     // All we have to do is layout the 2 buttons?
+     Rectangle vr = new Rectangle();
+     SwingUtilities.calculateInnerArea(scrollbar, vr);
+ 
+     // Update the rectangles.
+     getTrackBounds();
+     getThumbBounds();
+ 
+     Dimension incrDims = incrButton.getPreferredSize();
+     Dimension decrDims = decrButton.getPreferredSize();
+ 
+     decrButton.setBounds(vr.x, vr.y, decrDims.width, trackRect.height);
+     incrButton.setBounds(trackRect.x + trackRect.width, vr.y, incrDims.width,
+                          trackRect.height);
+   }
+ 
+   /**
+    * This method lays out the scrollbar vertically.
+    *
+    * @param sb The JScrollBar to layout.
+    */
+   protected void layoutVScrollbar(JScrollBar sb)
+   {
+     Rectangle vr = new Rectangle();
+     SwingUtilities.calculateInnerArea(scrollbar, vr);
+ 
+     // Update rectangles
+     getTrackBounds();
+     getThumbBounds();
+ 
+     Dimension incrDims = incrButton.getPreferredSize();
+     Dimension decrDims = decrButton.getPreferredSize();
+ 
+     decrButton.setBounds(vr.x, vr.y, trackRect.width, decrDims.height);
+     incrButton.setBounds(vr.x, trackRect.y + trackRect.height,
+                          trackRect.width, incrDims.height);
+   }
+ 
+   /**
+    * This method returns the minimum size required for the layout.
+    *
+    * @param scrollbarContainer The Container that is laid out.
+    *
+    * @return The minimum size.
+    */
+   public Dimension minimumLayoutSize(Container scrollbarContainer)
+   {
+     return preferredLayoutSize(scrollbarContainer);
+   }
+ 
+   /**
+    * This method is called when the component is painted.
+    *
+    * @param g The Graphics object to paint with.
+    * @param c The JComponent to paint.
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     layoutContainer(scrollbar);
+     paintTrack(g, c, getTrackBounds());
+     paintThumb(g, c, getThumbBounds());
+ 
+     if (trackHighlight == INCREASE_HIGHLIGHT)
+       paintIncreaseHighlight(g);
+     else if (trackHighlight == DECREASE_HIGHLIGHT)
+       paintDecreaseHighlight(g);
+   }
+ 
+   /**
+    * This method is called when repainting and the mouse is  pressed in the
+    * track. It paints the track below the thumb with the trackHighlight
+    * color.
+    *
+    * @param g The Graphics object to paint with.
+    */
+   protected void paintDecreaseHighlight(Graphics g)
+   {
+     Color saved = g.getColor();
+ 
+     g.setColor(trackHighlightColor);
+     if (scrollbar.getOrientation() == HORIZONTAL)
+       g.fillRect(trackRect.x, trackRect.y, thumbRect.x - trackRect.x,
+                  trackRect.height);
+     else
+       g.fillRect(trackRect.x, trackRect.y, trackRect.width,
+                  thumbRect.y - trackRect.y);
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method is called when repainting and the mouse is  pressed in the
+    * track. It paints the track above the thumb with the trackHighlight
+    * color.
+    *
+    * @param g The Graphics objet to paint with.
+    */
+   protected void paintIncreaseHighlight(Graphics g)
+   {
+     Color saved = g.getColor();
+ 
+     g.setColor(trackHighlightColor);
+     if (scrollbar.getOrientation() == HORIZONTAL)
+       g.fillRect(thumbRect.x + thumbRect.width, trackRect.y,
+                  trackRect.x + trackRect.width - thumbRect.x - thumbRect.width,
+                  trackRect.height);
+     else
+       g.fillRect(trackRect.x, thumbRect.y + thumbRect.height, trackRect.width,
+                  trackRect.y + trackRect.height - thumbRect.y
+                  - thumbRect.height);
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints the thumb.
+    *
+    * @param g The Graphics object to paint with.
+    * @param c The Component that is being painted.
+    * @param thumbBounds The thumb bounds.
+    */
+   protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds)
+   {
+     Color saved = g.getColor();
+     Point x;
+     Point y;
+     Point z;
+     Polygon lines;
+ 
+     g.setColor(thumbHighlightColor);
+     x = new Point(thumbBounds.x + 1, thumbBounds.y + 1);
+     y = new Point(x);
+     y.translate(thumbBounds.width - 2, 0);
+     z = new Point(x);
+     z.translate(0, thumbBounds.height - 2);
+ 
+     lines = new Polygon(new int[] { x.x, y.x, z.x },
+                         new int[] { x.y, y.y, z.y }, 3);
+ 
+     g.drawPolygon(lines);
+ 
+     g.setColor(thumbLightShadowColor);
+     x = new Point(thumbBounds.x + thumbBounds.width - 1,
+                   thumbBounds.y + thumbBounds.height - 1);
+     y = new Point(x);
+     y.translate(-(thumbBounds.width - 2), 0);
+     z = new Point(x);
+     z.translate(0, -(thumbBounds.height - 2));
+ 
+     lines = new Polygon(new int[] { x.x, y.x, z.x },
+                         new int[] { x.y, y.y, z.y }, 3);
+     g.drawPolygon(lines);
+ 
+     g.setColor(thumbDarkShadowColor);
+     x = new Point(thumbBounds.x + thumbBounds.width,
+                   thumbBounds.y + thumbBounds.height);
+     y = new Point(x);
+     y.translate(-thumbBounds.width, 0);
+     z = new Point(x);
+     z.translate(0, -thumbBounds.height);
+ 
+     lines = new Polygon(new int[] { x.x, y.x, z.x },
+                         new int[] { x.y, y.y, z.y }, 3);
+     g.drawPolygon(lines);
+ 
+     g.setColor(thumbColor);
+     g.fillRect(thumbBounds.x, thumbBounds.y, thumbBounds.width,
+                thumbBounds.height);
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints the track.
+    *
+    * @param g The Graphics object to paint with.
+    * @param c The JComponent being painted.
+    * @param trackBounds The track's bounds.
+    */
+   protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds)
+   {
+     Color saved = g.getColor();
+     g.setColor(trackColor);
+     g.fill3DRect(trackBounds.x, trackBounds.y, trackBounds.width,
+                  trackBounds.height, false);
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method returns the preferred size for the layout.
+    *
+    * @param scrollbarContainer The Container to find a size for.
+    *
+    * @return The preferred size for the layout.
+    */
+   public Dimension preferredLayoutSize(Container scrollbarContainer)
+   {
+     if (scrollbarContainer instanceof JComponent)
+       return getPreferredSize((JComponent) scrollbarContainer);
+     else
+       return null;
+   }
+ 
+   /**
+    * This method removes a child component from the layout.
+    *
+    * @param child The child to remove.
+    */
+   public void removeLayoutComponent(Component child)
+   {
+     // You should not be removing stuff from this component.
+   }
+ 
+   /**
+    * The method scrolls the thumb by a block in the  direction specified.
+    *
+    * @param direction The direction to scroll.
+    */
+   protected void scrollByBlock(int direction)
+   {
+     scrollbar.setValue(scrollbar.getValue()
+                        + scrollbar.getBlockIncrement(direction));
+   }
+ 
+   /**
+    * The method scrolls the thumb by a unit in the direction specified.
+    *
+    * @param direction The direction to scroll.
+    */
+   protected void scrollByUnit(int direction)
+   {
+     scrollbar.setValue(scrollbar.getValue()
+                        + scrollbar.getUnitIncrement(direction));
+   }
+ 
+   /**
+    * This method sets the thumb's bounds.
+    *
+    * @param x The X position of the thumb.
+    * @param y The Y position of the thumb.
+    * @param width The width of the thumb.
+    * @param height The height of the thumb.
+    */
+   protected void setThumbBounds(int x, int y, int width, int height)
+   {
+     thumbRect.x = x;
+     thumbRect.y = y;
+     thumbRect.width = width;
+     thumbRect.height = height;
+   }
+ 
+   /**
+    * This method uninstalls any components that  are a part of or related to
+    * this scrollbar.
+    */
+   protected void uninstallComponents()
+   {
+     scrollbar.remove(incrButton);
+     scrollbar.remove(decrButton);
+     incrButton = null;
+     decrButton = null;
+   }
+ 
+   /**
+    * This method uninstalls any defaults that this scrollbar acquired from the
+    * Basic Look and Feel defaults.
+    */
+   protected void uninstallDefaults()
+   {
+     scrollbar.setForeground(null);
+     scrollbar.setBackground(null);
+     scrollbar.setBorder(null);
+   }
+ 
+   /**
+    * This method uninstalls any keyboard actions this scrollbar acquired
+    * during install.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: implement.
+   }
+ 
+   /**
+    * This method uninstalls any listeners that were registered during install.
+    */
+   protected void uninstallListeners()
+   {
+     scrollTimer.removeActionListener(scrollListener);
+ 
+     scrollbar.getModel().removeChangeListener(modelListener);
+     scrollbar.removePropertyChangeListener(propertyChangeListener);
+ 
+     decrButton.removeMouseListener(buttonListener);
+     incrButton.removeMouseListener(buttonListener);
+ 
+     scrollbar.removeMouseListener(trackListener);
+     scrollbar.removeMouseMotionListener(trackListener);
+ 
+     propertyChangeListener = null;
+     modelListener = null;
+     buttonListener = null;
+     trackListener = null;
+     scrollListener = null;
+   }
+ 
+   /**
+    * This method uninstalls the UI. This includes removing any defaults,
+    * listeners, and components that this UI may have initialized. It also
+    * nulls any instance data.
+    *
+    * @param c The Component to uninstall for.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallDefaults();
+     uninstallListeners();
+     uninstallComponents();
+ 
+     scrollTimer = null;
+ 
+     thumbRect = null;
+     trackRect = null;
+ 
+     trackColor = null;
+     trackHighlightColor = null;
+     thumbColor = null;
+     thumbHighlightColor = null;
+     thumbDarkShadowColor = null;
+     thumbLightShadowColor = null;
+ 
+     scrollbar = null;
+   }
+ 
+   /**
+    * This method returns the value in the scrollbar's range given the y
+    * coordinate. If the value is out of range, it will return the closest
+    * legal value.
+    *
+    * @param yPos The y coordinate to calculate a value for.
+    *
+    * @return The value for the y coordinate.
+    */
+   private int valueForYPosition(int yPos)
+   {
+     int min = scrollbar.getMinimum();
+     int max = scrollbar.getMaximum();
+     int len = trackRect.height;
+ 
+     int value;
+ 
+     // If the length is 0, you shouldn't be able to even see where the thumb is.
+     // This really shouldn't ever happen, but just in case, we'll return the middle.
+     if (len == 0)
+       return ((max - min) / 2);
+ 
+     value = ((yPos - trackRect.y) * (max - min) / len + min);
+ 
+     // If this isn't a legal value, then we'll have to move to one now.
+     if (value > max)
+       value = max;
+     else if (value < min)
+       value = min;
+     return value;
+   }
+ 
+   /**
+    * This method returns the value in the scrollbar's range given the x
+    * coordinate. If the value is out of range, it will return the closest
+    * legal value.
+    *
+    * @param xPos The x coordinate to calculate a value for.
+    *
+    * @return The value for the x coordinate.
+    */
+   private int valueForXPosition(int xPos)
+   {
+     int min = scrollbar.getMinimum();
+     int max = scrollbar.getMaximum();
+     int len = trackRect.width;
+ 
+     int value;
+ 
+     // If the length is 0, you shouldn't be able to even see where the slider is.
+     // This really shouldn't ever happen, but just in case, we'll return the middle.
+     if (len == 0)
+       return ((max - min) / 2);
+ 
+     value = ((xPos - trackRect.x) * (max - min) / len + min);
+ 
+     // If this isn't a legal value, then we'll have to move to one now.
+     if (value > max)
+       value = max;
+     else if (value < min)
+       value = min;
+     return value;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java	Sat Jan 10 21:59:30 2004
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java	Wed Feb 16 20:02:57 2005
*************** package javax.swing.plaf.basic;
*** 40,94 ****
  
  import java.awt.Dimension;
  import java.awt.Graphics;
  import javax.swing.JComponent;
  import javax.swing.JScrollPane;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.ScrollPaneUI;
  
  public class BasicScrollPaneUI extends ScrollPaneUI
  {
!     int min_w = 50;
!     int min_h = 50;
  
!     public static ComponentUI createUI(final JComponent c) 
!     {
! 	return new BasicScrollPaneUI();
!     }
  
      
!     public void installUI(final JComponent c) 
!     {
! 	super.installUI(c);
!     }
!     
  
!     public Dimension getPreferredSize(JComponent c) 
!     {
! 	JScrollPane p = (JScrollPane ) c;
! 	
! 	Dimension d = new Dimension(min_w,
! 				    min_h);
! 	
! 	Dimension a = p.getViewport().getPreferredSize();
  
! 	if (a != null)
! 	    {
! 		d.width = Math.max(d.width, a.width);
! 		d.height = Math.max(d.height, a.height);
! 	    }
! 			   
  
! 	System.out.println("BasicScrollPaneUI->preff->"+d);
! 	return d;
!     }
  
-     public void paint(Graphics g, JComponent c)
-     {      
- 	System.out.println("BasicScrollPaneUI->paint()->"+c);
  
! 	JScrollPane p = (JScrollPane ) c;
! 	p.getViewport().paint(g);
!     }
  }
  
  
--- 40,115 ----
  
  import java.awt.Dimension;
  import java.awt.Graphics;
+ 
  import javax.swing.JComponent;
  import javax.swing.JScrollPane;
+ import javax.swing.ScrollPaneConstants;
+ import javax.swing.ScrollPaneLayout;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.ScrollPaneUI;
  
  public class BasicScrollPaneUI extends ScrollPaneUI
+   implements ScrollPaneConstants
  {
!   
!   public static ComponentUI createUI(final JComponent c) 
!   {
!     return new BasicScrollPaneUI();
!   }
  
!   protected void installDefaults(JScrollPane p)
!   {
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!     p.setForeground(defaults.getColor("ScrollPane.foreground"));
!     p.setBackground(defaults.getColor("ScrollPane.background"));
!     p.setFont(defaults.getFont("ScrollPane.font"));
!     p.setBorder(defaults.getBorder("ScrollPane.border"));
!     p.setOpaque(true);
!   }
  
+   protected void uninstallDefaults(JScrollPane p)
+   {
+     p.setForeground(null);
+     p.setBackground(null);
+     p.setFont(null);
+     p.setBorder(null);
+   }
      
!   public void installUI(final JComponent c) 
!   {
!     super.installUI(c);
!     this.installDefaults((JScrollPane)c);
!   }
  
!   public void uninstallUI(final JComponent c) 
!   {
!     super.uninstallUI(c);
!     this.uninstallDefaults((JScrollPane)c);
!   }
  
!     
!   public Dimension getMinimumSize(JComponent c) 
!   {
!     JScrollPane p = (JScrollPane ) c;
!     ScrollPaneLayout sl = (ScrollPaneLayout) p.getLayout();
!     return sl.minimumLayoutSize(c);
!   }
  
!   public Dimension getPreferredSize(JComponent c) 
!   {
!     JScrollPane p = (JScrollPane ) c;
!     ScrollPaneLayout sl = (ScrollPaneLayout) p.getLayout();
!     return sl.preferredLayoutSize(c);
!   }
  
  
!   public void paint(Graphics g, JComponent c)
!   {      
!     // do nothing; the normal painting-of-children algorithm, along with
!     // ScrollPaneLayout, does all the relevant work.
!   }
  }
  
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSeparatorUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSeparatorUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSeparatorUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSeparatorUI.java	Tue Nov 30 23:59:05 2004
***************
*** 0 ****
--- 1,269 ----
+ /* BasicSeparatorUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.Rectangle;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JSeparator;
+ import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.SeparatorUI;
+ 
+ /**
+  * The Basic Look and Feel UI delegate for JSeparator.
+  */
+ public class BasicSeparatorUI extends SeparatorUI
+ {
+   /** The shadow color. */
+   protected Color shadow;
+ 
+   /** The highlight color. */
+   protected Color highlight;
+ 
+   /**
+    * Creates a new UI delegate for the given JComponent.
+    *
+    * @param c The JComponent to create a delegate for.
+    *
+    * @return A new BasicSeparatorUI.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicSeparatorUI();
+   }
+ 
+   /**
+    * This method installs the UI for the given JComponent.
+    * This can include installing defaults, listeners, and
+    * initializing any instance data.
+    *
+    * @param c The JComponent that is having this UI installed.
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+ 
+     if (c instanceof JSeparator)
+       {
+ 	JSeparator s = (JSeparator) c;
+ 
+ 	installDefaults(s);
+ 	installListeners(s);
+       }
+   }
+ 
+   /**
+    * Uninstalls the UI for the given JComponent. This
+    * method reverses what was done when installing
+    * the UI on the JComponent.
+    *
+    * @param c The JComponent that is having this UI uninstalled.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     if (c instanceof JSeparator)
+       {
+ 	JSeparator s = (JSeparator) c;
+ 
+ 	uninstallListeners(s);
+ 	uninstallDefaults(s);
+       }
+   }
+ 
+   /**
+    * This method installs the defaults that are given by
+    * the Basic Look and Feel.
+    *
+    * @param s The JSeparator that is being installed.
+    */
+   protected void installDefaults(JSeparator s)
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     shadow = defaults.getColor("Separator.shadow");
+     highlight = defaults.getColor("Separator.highlight");
+     s.setOpaque(true);
+   }
+ 
+   /**
+    * This method removes the defaults that were given
+    * by the Basic Look and Feel.
+    *
+    * @param s The JSeparator that is being uninstalled.
+    */
+   protected void uninstallDefaults(JSeparator s)
+   {
+     shadow = null;
+     highlight = null;
+   }
+ 
+   /**
+    * This method installs any listeners that need
+    * to be attached to the JSeparator or any of its 
+    * components.
+    *
+    * @param s The JSeparator that is being installed.
+    */
+   protected void installListeners(JSeparator s)
+   {
+     // Separators don't receive events.
+   }
+ 
+   /**
+    * This method uninstalls any listeners that
+    * were installed during the install UI process.
+    *
+    * @param s The JSeparator that is being uninstalled.
+    */
+   protected void uninstallListeners(JSeparator s)
+   {
+     // Separators don't receive events.  
+   }
+ 
+   /**
+    * The separator is made of two lines. The top line will be 
+    * the highlight color (or left line if it's vertical). The bottom 
+    * or right line will be the shadow color. The two lines will 
+    * be centered inside the bounds box. If the separator is horizontal, 
+    * then it will be vertically centered, or if it's vertical, it will 
+    * be horizontally centered.
+    *
+    * @param g The Graphics object to paint with
+    * @param c The JComponent to paint.
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     Rectangle r = new Rectangle();
+     SwingUtilities.calculateInnerArea(c, r);
+     Color saved = g.getColor();
+     
+     int midAB = r.width / 2 + r.x;
+     int midAD = r.height / 2 + r.y;
+   
+     JSeparator s;
+     if (c instanceof JSeparator)
+       s = (JSeparator) c;
+     else
+       return;
+       
+     if (s.getOrientation() == JSeparator.HORIZONTAL)
+     {    
+       g.setColor(highlight);
+       g.drawLine(r.x, midAD, r.x + r.width, midAD);
+       
+       g.setColor(shadow);
+       g.drawLine(r.x, midAD + 1, r.x + r.width, midAD + 1);
+     }
+     else
+     {
+       g.setColor(highlight);
+       g.drawLine(midAB, r.y, midAB, r.y + r.height);
+       
+       g.setColor(shadow);
+       g.drawLine(midAB + 1, r.y, midAB + 1, r.y + r.height);
+     }
+   }
+ 
+   /**
+    * This method returns the preferred size of the 
+    * JComponent.
+    *
+    * @param c The JComponent to measure.
+    *
+    * @return The preferred size.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     Dimension dims = new Dimension(0, 0);
+     Insets insets = c.getInsets();
+ 
+     if (c instanceof JSeparator)
+       {
+ 	JSeparator s = (JSeparator) c;
+ 
+ 	if (s.getOrientation() == JSeparator.HORIZONTAL)
+ 	{
+ 	  dims.height = 2;
+ 	  dims.width = 40;
+ 	}
+ 	else
+ 	{
+ 	  dims.width = 2;
+ 	  dims.height = 40;
+ 	}
+       }
+     dims.width += insets.left + insets.right;
+     dims.height += insets.top + insets.bottom;
+     
+     return dims;
+   }
+ 
+   /**
+    * This method returns the minimum size of the
+    * JComponent.
+    *
+    * @param c The JComponent to measure.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the maximum size of the
+    * JComponent.
+    *
+    * @param c The JComponent to measure.
+    *
+    * @return The maximum size.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSliderUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSliderUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSliderUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSliderUI.java	Wed Feb 16 20:02:57 2005
***************
*** 0 ****
--- 1,2218 ----
+ /* BasicSliderUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.ComponentOrientation;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.Point;
+ import java.awt.Polygon;
+ import java.awt.Rectangle;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.awt.event.ComponentAdapter;
+ import java.awt.event.ComponentEvent;
+ import java.awt.event.ComponentListener;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.event.MouseEvent;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ import java.util.Dictionary;
+ import java.util.Enumeration;
+ 
+ import javax.swing.BoundedRangeModel;
+ import javax.swing.JComponent;
+ import javax.swing.JLabel;
+ import javax.swing.JSlider;
+ import javax.swing.SwingUtilities;
+ import javax.swing.Timer;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ import javax.swing.event.MouseInputAdapter;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.SliderUI;
+ 
+ /**
+  * <p>
+  * BasicSliderUI.java This is the UI delegate in the Basic look and feel that
+  * paints JSliders.
+  * </p>
+  * 
+  * <p>
+  * The UI delegate keeps track of 6 rectangles that place the various parts of
+  * the JSlider inside the component.
+  * </p>
+  * 
+  * <p>
+  * The rectangles are organized as follows:
+  * </p>
+  * <pre>
+  *     +-------------------------------------------------------+ <-- focusRect
+  *     |                                                       |
+  *     |  +==+-------------------+==+--------------------+==+<------ contentRect
+  *     |  |  |                   |  |<---thumbRect       |  |  |
+  *     |  |  |    TRACK          |  |                    |<--------- trackRect
+  *     |  |  +-------------------+==+--------------------+  |  |
+  *     |  |  |                                           |  |  |
+  *     |  |  |          TICKS GO HERE                    |<-------- tickRect
+  *     |  |  |                                           |  |  |
+  *     |  +==+-------------------------------------------+==+  |
+  *     |  |  |                                           |  |  |
+  *     |  |  |                                           |  |<----- labelRect
+  *     |  |  |                 LABELS GO HERE            |  |  |
+  *     |  |  |                                           |  |  |
+  *     |  |  |                                           |  |  |
+  *     |  |  |                                           |  |  |
+  *     |  |  |                                           |  |  |
+  *     |  |                                              |  |  |
+  * </pre>
+  * 
+  * <p>
+  * The space between the contentRect and the focusRect are the FocusInsets.
+  * </p>
+  * 
+  * <p>
+  * The space between the focusRect and the component bounds is the insetCache
+  * which are the component's insets.
+  * </p>
+  * 
+  * <p>
+  * The top of the thumb is the top of the contentRect. The trackRect has to be
+  * as tall as the thumb.
+  * </p>
+  * 
+  * <p>
+  * The trackRect and tickRect do not start from the left edge of the
+  * focusRect. They are trackBuffer away from each side of the focusRect. This
+  * is so that the thumb has room to move.
+  * </p>
+  * 
+  * <p>
+  * The labelRect does start right against the contentRect's left and right
+  * edges and it gets all remaining space.
+  * </p>
+  */
+ public class BasicSliderUI extends SliderUI
+ {
+   /**
+    * Helper class that listens to the {@link JSlider}'s model for changes.
+    */
+   public class ChangeHandler implements ChangeListener
+   {
+     /**
+      * Called when the slider's model has been altered. The UI delegate should
+      * recalculate any rectangles that are dependent on the model for their
+      * positions and repaint.
+      *
+      * @param e A static {@link ChangeEvent} passed from the model.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       // Maximum, minimum, and extent values will be taken
+       // care of automatically when the slider is repainted.
+       // Only thing that needs recalculation is the thumb.
+       calculateThumbLocation();
+       slider.repaint();
+     }
+   }
+ 
+   /**
+    * Helper class that listens for resize events.
+    */
+   protected class ComponentHandler extends ComponentAdapter
+   {
+     /**
+      * Called when the size of the component changes. The UI delegate should
+      * recalculate any rectangles that are dependent on the model for their
+      * positions and repaint.
+      *
+      * @param e A {@link ComponentEvent}.
+      */
+     public void componentResized(ComponentEvent e)
+     {
+       calculateGeometry();
+ 
+       slider.revalidate();
+       slider.repaint();
+     }
+   }
+ 
+   /**
+    * Helper class that listens for focus events.
+    */
+   public class FocusHandler implements FocusListener
+   {
+     /**
+      * Called when the {@link JSlider} has gained focus.  It should repaint
+      * the slider with the focus drawn.
+      *
+      * @param e A {@link FocusEvent}.
+      */
+     public void focusGained(FocusEvent e)
+     {
+       // FIXME: implement.
+     }
+ 
+     /**
+      * Called when the {@link JSlider} has lost focus. It  should repaint the
+      * slider without the focus drawn.
+      *
+      * @param e A {@link FocusEvent}.
+      */
+     public void focusLost(FocusEvent e)
+     {
+       // FIXME: implement.
+     }
+   }
+ 
+   /**
+    * Helper class that listens for changes to the properties of the {@link
+    * JSlider}.
+    */
+   public class PropertyChangeHandler implements PropertyChangeListener
+   {
+     /**
+      * Called when one of the properties change. The UI should recalculate any
+      * rectangles if necessary and repaint.
+      *
+      * @param e A {@link PropertyChangeEvent}.
+      */
+     public void propertyChange(PropertyChangeEvent e)
+     {
+       // Check for orientation changes.
+       if (e.getPropertyName().equals("orientation"))
+ 	recalculateIfOrientationChanged();
+       else if (e.getPropertyName().equals("model"))
+         {
+ 	  BoundedRangeModel oldModel = (BoundedRangeModel) e.getOldValue();
+ 	  oldModel.removeChangeListener(changeListener);
+ 	  slider.getModel().addChangeListener(changeListener);
+ 	  calculateThumbLocation();
+         }
+ 
+       // elif the componentOrientation changes (this is a bound property,
+       // just undocumented) we change leftToRightCache. In Sun's 
+       // implementation, the LTR cache changes on a repaint. This is strange
+       // since there is no need to do so. We could events here and 
+       // update the cache. 
+       // elif the border/insets change, we recalculateInsets.
+       slider.repaint();
+     }
+   }
+ 
+   /**
+    * Helper class that listens to our swing timer. This class is responsible
+    * for listening to the timer and moving the thumb in the proper direction
+    * every interval.
+    */
+   public class ScrollListener implements ActionListener
+   {
+     /** Indicates which direction the thumb should scroll. */
+     private transient int direction;
+ 
+     /** Indicates whether we should scroll in blocks or in units. */
+     private transient boolean block;
+ 
+     /**
+      * Creates a new ScrollListener object.
+      */
+     public ScrollListener()
+     {
+       direction = POSITIVE_SCROLL;
+       block = false;
+     }
+ 
+     /**
+      * Creates a new ScrollListener object.
+      *
+      * @param dir The direction to scroll in.
+      * @param block If movement will be in blocks.
+      */
+     public ScrollListener(int dir, boolean block)
+     {
+       direction = dir;
+       this.block = block;
+     }
+ 
+     /**
+      * Called every time the swing timer reaches its interval. If the thumb
+      * needs to move, then this method will move the thumb one block or  unit
+      * in the direction desired. Otherwise, the timer can be stopped.
+      *
+      * @param e An {@link ActionEvent}.
+      */
+     public void actionPerformed(ActionEvent e)
+     {
+       if (! trackListener.shouldScroll(direction))
+         {
+ 	  scrollTimer.stop();
+ 	  return;
+         }
+ 
+       if (block)
+ 	scrollByBlock(direction);
+       else
+ 	scrollByUnit(direction);
+     }
+ 
+     /**
+      * Sets the direction to scroll in.
+      *
+      * @param direction The direction to scroll in.
+      */
+     public void setDirection(int direction)
+     {
+       this.direction = direction;
+     }
+ 
+     /**
+      * Sets whether movement will be in blocks.
+      *
+      * @param block If movement will be in blocks.
+      */
+     public void setScrollByBlock(boolean block)
+     {
+       this.block = block;
+     }
+   }
+ 
+   /**
+    * Helper class that listens for mouse events.
+    */
+   public class TrackListener extends MouseInputAdapter
+   {
+     /** The current X position of the mouse. */
+     protected int currentMouseX;
+ 
+     /** The current Y position of the mouse. */
+     protected int currentMouseY;
+ 
+     /**
+      * The offset between the current slider value and the cursor's position.
+      */
+     protected int offset;
+ 
+     /**
+      * Called when the mouse has been dragged. This should find the mouse's
+      * current position and adjust the value of the {@link JSlider}
+      * accordingly.
+      *
+      * @param e A {@link MouseEvent}
+      */
+     public void mouseDragged(MouseEvent e)
+     {
+       currentMouseX = e.getX();
+       currentMouseY = e.getY();
+       if (slider.getValueIsAdjusting())
+         {
+ 	  int value;
+ 	  if (slider.getOrientation() == JSlider.HORIZONTAL)
+ 	    value = valueForXPosition(currentMouseX) - offset;
+ 	  else
+ 	    value = valueForYPosition(currentMouseY) - offset;
+ 
+ 	  slider.setValue(value);
+         }
+     }
+ 
+     /**
+      * Called when the mouse has moved over a component but no buttons have
+      * been pressed yet.
+      *
+      * @param e A {@link MouseEvent}
+      */
+     public void mouseMoved(MouseEvent e)
+     {
+       // Don't care that we're moved unless we're dragging.
+     }
+ 
+     /**
+      * Called when the mouse is pressed. When the press occurs on the thumb
+      * itself, the {@link JSlider} should have its value set to where the
+      * mouse was pressed. If the press occurs on the track, then the thumb
+      * should move one block towards the direction of the mouse.
+      *
+      * @param e A {@link MouseEvent}
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       currentMouseX = e.getX();
+       currentMouseY = e.getY();
+ 
+       int value;
+       if (slider.getOrientation() == JSlider.HORIZONTAL)
+ 	value = valueForXPosition(currentMouseX);
+       else
+ 	value = valueForYPosition(currentMouseY);
+ 
+       if (slider.getSnapToTicks())
+ 	value = findClosestTick(value);
+ 
+       // If the thumb is hit, then we don't need to set the timers to move it. 
+       if (! thumbRect.contains(e.getPoint()))
+         {
+ 	  // The mouse has hit some other part of the slider.
+ 	  // The value moves no matter where in the slider you hit.
+ 	  if (value > slider.getValue())
+ 	    scrollDueToClickInTrack(POSITIVE_SCROLL);
+ 	  else
+ 	    scrollDueToClickInTrack(NEGATIVE_SCROLL);
+         }
+       else
+         {
+ 	  slider.setValueIsAdjusting(true);
+ 	  offset = value - slider.getValue();
+         }
+     }
+ 
+     /**
+      * Called when the mouse is released.  This should stop the timer that
+      * scrolls the thumb.
+      *
+      * @param e A {@link MouseEvent}
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       currentMouseX = e.getX();
+       currentMouseY = e.getY();
+ 
+       if (slider.getValueIsAdjusting())
+         {
+ 	  slider.setValueIsAdjusting(false);
+ 	  if (slider.getSnapToTicks())
+ 	    slider.setValue(findClosestTick(slider.getValue()));
+         }
+       if (scrollTimer != null)
+ 	scrollTimer.stop();
+     }
+ 
+     /**
+      * Indicates whether the thumb should scroll in the given direction.
+      *
+      * @param direction The direction to check.
+      *
+      * @return True if the thumb should move in that direction.
+      */
+     public boolean shouldScroll(int direction)
+     {
+       int value;
+       if (slider.getOrientation() == JSlider.HORIZONTAL)
+ 	value = valueForXPosition(currentMouseX);
+       else
+ 	value = valueForYPosition(currentMouseY);
+ 
+       if (direction == POSITIVE_SCROLL)
+ 	return (value > slider.getValue());
+       else
+ 	return (value < slider.getValue());
+     }
+   }
+ 
+   /** The preferred height of the thumb. */
+   private transient int thumbHeight;
+ 
+   /** The preferred width of the thumb. */
+   private transient int thumbWidth;
+ 
+   /** The preferred height of the tick rectangle. */
+   private transient int tickHeight;
+ 
+   /** Listener for changes from the model. */
+   protected ChangeListener changeListener;
+ 
+   /** Listener for changes to the {@link JSlider}. */
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /** Listener for the scrollTimer. */
+   protected ScrollListener scrollListener;
+ 
+   /** Listener for component resizing. */
+   protected ComponentListener componentListener;
+ 
+   /** Listener for focus handling. */
+   protected FocusListener focusListener;
+ 
+   /** Listener for mouse events. */
+   protected TrackListener trackListener;
+ 
+   /** The insets between the FocusRectangle and the ContentRectangle. */
+   protected Insets focusInsets;
+ 
+   /** The {@link JSlider}'s insets. */
+   protected Insets insetCache;
+ 
+   /** Rectangle describing content bounds. See diagram above. */
+   protected Rectangle contentRect;
+ 
+   /** Rectangle describing focus bounds. See diagram above. */
+   protected Rectangle focusRect;
+ 
+   /** Rectangle describing the thumb's bounds. See diagram above. */
+   protected Rectangle thumbRect;
+ 
+   /** Rectangle describing the tick bounds. See diagram above. */
+   protected Rectangle tickRect;
+ 
+   /** Rectangle describing the label bounds. See diagram above. */
+   protected Rectangle labelRect;
+ 
+   /** Rectangle describing the track bounds. See diagram above. */
+   protected Rectangle trackRect;
+ 
+   /** FIXME: use this somewhere. */
+   public static final int MAX_SCROLL = 2;
+ 
+   /** FIXME: use this somewhere. */
+   public static final int MIN_SCROLL = -2;
+ 
+   /** A constant describing scrolling towards the minimum. */
+   public static final int NEGATIVE_SCROLL = -1;
+ 
+   /** A constant describing scrolling towards the maximum. */
+   public static final int POSITIVE_SCROLL = 1;
+ 
+   /** The gap between the edges of the contentRect and trackRect. */
+   protected int trackBuffer;
+ 
+   /** Whether this slider is actually drawn left to right. */
+   protected boolean leftToRightCache;
+ 
+   /** A timer that periodically moves the thumb. */
+   protected Timer scrollTimer;
+ 
+   /** A reference to the {@link JSlider} that this UI was created for. */
+   protected JSlider slider;
+ 
+   /** The shadow color. */
+   private transient Color shadowColor;
+ 
+   /** The highlight color. */
+   private transient Color highlightColor;
+ 
+   /** The focus color. */
+   private transient Color focusColor;
+ 
+   /**
+    * Creates a new Basic look and feel Slider UI.
+    *
+    * @param b The {@link JSlider} that this UI was created for.
+    */
+   public BasicSliderUI(JSlider b)
+   {
+     super();
+   }
+ 
+   /**
+    * Gets the shadow color to be used for this slider. The shadow color is the
+    * color used for drawing the top and left edges of the track.
+    *
+    * @return The shadow color.
+    */
+   protected Color getShadowColor()
+   {
+     return shadowColor;
+   }
+ 
+   /**
+    * Gets the highlight color to be used for this slider. The highlight color
+    * is the color used for drawing the bottom and right edges of the track.
+    *
+    * @return The highlight color.
+    */
+   protected Color getHighlightColor()
+   {
+     return highlightColor;
+   }
+ 
+   /**
+    * Gets the focus color to be used for this slider. The focus color is the
+    * color used for drawing the focus rectangle when the component gains
+    * focus.
+    *
+    * @return The focus color.
+    */
+   protected Color getFocusColor()
+   {
+     return focusColor;
+   }
+ 
+   /**
+    * Factory method to create a BasicSliderUI for the given {@link
+    * JComponent}, which should be a {@link JSlider}.
+    *
+    * @param b The {@link JComponent} a UI is being created for.
+    *
+    * @return A BasicSliderUI for the {@link JComponent}.
+    */
+   public static ComponentUI createUI(JComponent b)
+   {
+     return new BasicSliderUI((JSlider) b);
+   }
+ 
+   /**
+    * Installs and initializes all fields for this UI delegate. Any properties
+    * of the UI that need to be initialized and/or set to defaults will be
+    * done now. It will also install any listeners necessary.
+    *
+    * @param c The {@link JComponent} that is having this UI installed.
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+     if (c instanceof JSlider)
+       {
+ 	slider = (JSlider) c;
+ 
+ 	focusRect = new Rectangle();
+ 	contentRect = new Rectangle();
+ 	thumbRect = new Rectangle();
+ 	trackRect = new Rectangle();
+ 	tickRect = new Rectangle();
+ 	labelRect = new Rectangle();
+ 
+ 	insetCache = slider.getInsets();
+ 	leftToRightCache = ! slider.getInverted();
+ 
+ 	scrollTimer = new Timer(200, null);
+ 	scrollTimer.setRepeats(true);
+ 
+ 	installDefaults(slider);
+ 	installListeners(slider);
+ 	installKeyboardActions(slider);
+ 
+ 	calculateFocusRect();
+ 
+ 	calculateContentRect();
+ 	calculateThumbSize();
+ 	calculateTrackBuffer();
+ 	calculateTrackRect();
+ 	calculateThumbLocation();
+ 
+ 	calculateTickRect();
+ 	calculateLabelRect();
+       }
+   }
+ 
+   /**
+    * Performs the opposite of installUI. Any properties or resources that need
+    * to be cleaned up will be done now. It will also uninstall any listeners
+    * it has. In addition, any properties of this UI will be nulled.
+    *
+    * @param c The {@link JComponent} that is having this UI uninstalled.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     super.uninstallUI(c);
+ 
+     uninstallKeyboardActions(slider);
+     uninstallListeners(slider);
+ 
+     scrollTimer = null;
+ 
+     focusRect = null;
+     contentRect = null;
+     thumbRect = null;
+     trackRect = null;
+     tickRect = null;
+     labelRect = null;
+ 
+     focusInsets = null;
+   }
+ 
+   /**
+    * Initializes any default properties that this UI has from the defaults for
+    * the Basic look and feel.
+    *
+    * @param slider The {@link JSlider} that is having this UI installed.
+    */
+   protected void installDefaults(JSlider slider)
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     slider.setForeground(defaults.getColor("Slider.foreground"));
+     slider.setBackground(defaults.getColor("Slider.background"));
+     shadowColor = defaults.getColor("Slider.shadow");
+     highlightColor = defaults.getColor("Slider.highlight");
+     focusColor = defaults.getColor("Slider.focus");
+     slider.setBorder(defaults.getBorder("Slider.border"));
+     slider.setOpaque(true);
+ 
+     thumbHeight = defaults.getInt("Slider.thumbHeight");
+     thumbWidth = defaults.getInt("Slider.thumbWidth");
+     tickHeight = defaults.getInt("Slider.tickHeight");
+ 
+     focusInsets = defaults.getInsets("Slider.focusInsets");
+   }
+ 
+   /**
+    * Creates a new {@link TrackListener}.
+    *
+    * @param slider The {@link JSlider} that this {@link TrackListener} is
+    *        created for.
+    *
+    * @return A new {@link TrackListener}.
+    */
+   protected TrackListener createTrackListener(JSlider slider)
+   {
+     return new TrackListener();
+   }
+ 
+   /**
+    * Creates a new {@link ChangeListener}.
+    *
+    * @param slider The {@link JSlider} that this {@link ChangeListener} is
+    *        created for.
+    *
+    * @return A new {@link ChangeListener}.
+    */
+   protected ChangeListener createChangeListener(JSlider slider)
+   {
+     return new ChangeHandler();
+   }
+ 
+   /**
+    * Creates a new {@link ComponentListener}.
+    *
+    * @param slider The {@link JSlider} that this {@link ComponentListener} is
+    *        created for.
+    *
+    * @return A new {@link ComponentListener}.
+    */
+   protected ComponentListener createComponentListener(JSlider slider)
+   {
+     return new ComponentHandler();
+   }
+ 
+   /**
+    * Creates a new {@link FocusListener}.
+    *
+    * @param slider The {@link JSlider} that this {@link FocusListener} is
+    *        created for.
+    *
+    * @return A new {@link FocusListener}.
+    */
+   protected FocusListener createFocusListener(JSlider slider)
+   {
+     return new FocusHandler();
+   }
+ 
+   /**
+    * Creates a new {@link ScrollListener}.
+    *
+    * @param slider The {@link JSlider} that this {@link ScrollListener} is
+    *        created for.
+    *
+    * @return A new {@link ScrollListener}.
+    */
+   protected ScrollListener createScrollListener(JSlider slider)
+   {
+     return new ScrollListener();
+   }
+ 
+   /**
+    * Creates a new {@link PropertyChangeListener}.
+    *
+    * @param slider The {@link JSlider} that this {@link
+    *        PropertyChangeListener} is created for.
+    *
+    * @return A new {@link PropertyChangeListener}.
+    */
+   protected PropertyChangeListener createPropertyChangeListener(JSlider slider)
+   {
+     return new PropertyChangeHandler();
+   }
+ 
+   /**
+    * Creates and registers all the listeners for this UI delegate. This
+    * includes creating the ScrollListener and registering it to the timer.
+    *
+    * @param slider The {@link JSlider} is having listeners installed.
+    */
+   protected void installListeners(JSlider slider)
+   {
+     propertyChangeListener = createPropertyChangeListener(slider);
+     componentListener = createComponentListener(slider);
+     trackListener = createTrackListener(slider);
+     focusListener = createFocusListener(slider);
+     changeListener = createChangeListener(slider);
+     scrollListener = createScrollListener(slider);
+ 
+     slider.addPropertyChangeListener(propertyChangeListener);
+     slider.addComponentListener(componentListener);
+     slider.addMouseListener(trackListener);
+     slider.addMouseMotionListener(trackListener);
+     slider.addFocusListener(focusListener);
+     slider.getModel().addChangeListener(changeListener);
+ 
+     scrollTimer.addActionListener(scrollListener);
+   }
+ 
+   /**
+    * Unregisters all the listeners that this UI delegate was using. In
+    * addition, it will also null any listeners that it was using.
+    *
+    * @param slider The {@link JSlider} that is having listeners removed.
+    */
+   protected void uninstallListeners(JSlider slider)
+   {
+     slider.removePropertyChangeListener(propertyChangeListener);
+     slider.removeComponentListener(componentListener);
+     slider.removeMouseListener(trackListener);
+     slider.removeMouseMotionListener(trackListener);
+     slider.removeFocusListener(focusListener);
+     slider.getModel().removeChangeListener(changeListener);
+ 
+     scrollTimer.removeActionListener(scrollListener);
+ 
+     propertyChangeListener = null;
+     componentListener = null;
+     trackListener = null;
+     focusListener = null;
+     changeListener = null;
+     scrollListener = null;
+   }
+ 
+   /**
+    * Installs any keyboard actions. The list of keys that need to be bound are
+    * listed in Basic look and feel's defaults.
+    *
+    * @param slider The {@link JSlider} that is having keyboard actions
+    *        installed.
+    */
+   protected void installKeyboardActions(JSlider slider)
+   {
+     // FIXME: implement.
+   }
+ 
+   /**
+    * Uninstalls any keyboard actions. The list of keys used  are listed in
+    * Basic look and feel's defaults.
+    *
+    * @param slider The {@link JSlider} that is having keyboard actions
+    *        uninstalled.
+    */
+   protected void uninstallKeyboardActions(JSlider slider)
+   {
+     // FIXME: implement.
+   }
+ 
+   /* XXX: This is all after experimentation with SUN's implementation.
+ 
+      PreferredHorizontalSize seems to be 200x21.
+      PreferredVerticalSize seems to be 21x200.
+ 
+      MinimumHorizontalSize seems to be 36x21.
+      MinimumVerticalSize seems to be 21x36.
+ 
+      PreferredSize seems to be 200x63. Or Components.getBounds?
+ 
+      MinimumSize seems to be 36x63.
+ 
+      MaximumSize seems to be 32767x63.
+    */
+ 
+   /**
+    * This method returns the preferred size when the slider is horizontally
+    * oriented.
+    *
+    * @return The dimensions of the preferred horizontal size.
+    */
+   public Dimension getPreferredHorizontalSize()
+   {
+     Insets insets = slider.getInsets();
+ 
+     // The width should cover all the labels (which are usually the
+     // deciding factor of the width)
+     int width = getWidthOfWidestLabel() * (slider.getLabelTable() == null ? 0
+                                                                           : slider.getLabelTable()
+                                                                                   .size());
+ 
+     // If there are not enough labels.
+     // This number is pretty much arbitrary, but it looks nice.
+     if (width < 200)
+       width = 200;
+ 
+     // We can only draw inside of the focusRectangle, so we have to
+     // pad it with insets.
+     width += insets.left + insets.right + focusInsets.left + focusInsets.right;
+ 
+     // Height is determined by the thumb, the ticks and the labels.
+     int height = thumbHeight;
+ 
+     if (slider.getPaintTicks() && slider.getMajorTickSpacing() > 0
+         || slider.getMinorTickSpacing() > 0)
+       height += tickHeight;
+ 
+     if (slider.getPaintLabels())
+       height += getHeightOfTallestLabel();
+ 
+     height += insets.top + insets.bottom + focusInsets.top
+     + focusInsets.bottom;
+ 
+     return new Dimension(width, height);
+   }
+ 
+   /**
+    * This method returns the preferred size when the slider is vertically
+    * oriented.
+    *
+    * @return The dimensions of the preferred vertical size.
+    */
+   public Dimension getPreferredVerticalSize()
+   {
+     Insets insets = slider.getInsets();
+ 
+     int height = getHeightOfTallestLabel() * (slider.getLabelTable() == null
+                                               ? 0 : slider.getLabelTable()
+                                                           .size());
+ 
+     if (height < 200)
+       height = 200;
+ 
+     height += insets.top + insets.bottom + focusInsets.top
+     + focusInsets.bottom;
+ 
+     int width = thumbHeight;
+ 
+     if (slider.getPaintTicks() && slider.getMajorTickSpacing() > 0
+         || slider.getMinorTickSpacing() > 0)
+       width += tickHeight;
+ 
+     if (slider.getPaintLabels())
+       width += getWidthOfWidestLabel();
+ 
+     width += insets.left + insets.right + focusInsets.left + focusInsets.right;
+ 
+     return new Dimension(width, height);
+   }
+ 
+   /**
+    * This method returns the minimum size when the slider is horizontally
+    * oriented.
+    *
+    * @return The dimensions of the minimum horizontal size.
+    */
+   public Dimension getMinimumHorizontalSize()
+   {
+     return getPreferredHorizontalSize();
+   }
+ 
+   /**
+    * This method returns the minimum size of the slider when it  is vertically
+    * oriented.
+    *
+    * @return The dimensions of the minimum vertical size.
+    */
+   public Dimension getMinimumVerticalSize()
+   {
+     return getPreferredVerticalSize();
+   }
+ 
+   /**
+    * This method returns the preferred size of the component. If it returns
+    * null, then it is up to the Layout Manager to give the {@link JComponent}
+    * a size.
+    *
+    * @param c The {@link JComponent} to find the preferred size for.
+    *
+    * @return The dimensions of the preferred size.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       return getPreferredHorizontalSize();
+     else
+       return getPreferredVerticalSize();
+   }
+ 
+   /**
+    * This method returns the minimum size for this {@link JSlider}  for this
+    * look and feel. If it returns null, then it is up to the Layout Manager
+    * to give the {@link JComponent} a size.
+    *
+    * @param c The {@link JComponent} to find the minimum size for.
+    *
+    * @return The dimensions of the minimum size.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       return getPreferredHorizontalSize();
+     else
+       return getPreferredVerticalSize();
+   }
+ 
+   /**
+    * This method returns the maximum size for this {@link JSlider} for this
+    * look and feel. If it returns null, then it is up to the Layout Manager
+    * to give the {@link JComponent} a size.
+    *
+    * @param c The {@link JComponent} to find a maximum size for.
+    *
+    * @return The dimensions of the maximum size.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       return getPreferredHorizontalSize();
+     else
+       return getPreferredVerticalSize();
+   }
+ 
+   /**
+    * This method calculates all the sizes of the rectangles by delegating to
+    * the helper methods calculateXXXRect.
+    */
+   protected void calculateGeometry()
+   {
+     calculateFocusRect();
+     calculateContentRect();
+     calculateThumbSize();
+     calculateTrackBuffer();
+     calculateTrackRect();
+     calculateTickRect();
+     calculateLabelRect();
+     calculateThumbLocation();
+   }
+ 
+   /**
+    * This method calculates the size and position of the focusRect. This
+    * method does not need to be called if the orientation changes.
+    */
+   protected void calculateFocusRect()
+   {
+     insetCache = slider.getInsets();
+     focusRect = SwingUtilities.calculateInnerArea(slider, focusRect);
+ 
+     if (focusRect.width < 0)
+       focusRect.width = 0;
+     if (focusRect.height < 0)
+       focusRect.height = 0;
+   }
+ 
+   /**
+    * This method calculates the size but not the position of the thumbRect. It
+    * must take into account the orientation of the slider.
+    */
+   protected void calculateThumbSize()
+   {
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       {
+ 	if (thumbWidth > contentRect.width)
+ 	  thumbRect.width = contentRect.width / 4;
+ 	else
+ 	  thumbRect.width = thumbWidth;
+ 	if (thumbHeight > contentRect.height)
+ 	  thumbRect.height = contentRect.height;
+ 	else
+ 	  thumbRect.height = thumbHeight;
+       }
+     else
+       {
+ 	// The thumb gets flipped when inverted, so thumbWidth 
+ 	// actually is the height and vice versa.
+ 	if (thumbWidth > contentRect.height)
+ 	  thumbRect.height = contentRect.height / 4;
+ 	else
+ 	  thumbRect.height = thumbWidth;
+ 	if (thumbHeight > contentRect.width)
+ 	  thumbRect.width = contentRect.width;
+ 	else
+ 	  thumbRect.width = thumbHeight;
+       }
+   }
+ 
+   /**
+    * This method calculates the size and position of the contentRect. This
+    * method does not need to be  called if the orientation changes.
+    */
+   protected void calculateContentRect()
+   {
+     contentRect.x = focusRect.x + focusInsets.left;
+     contentRect.y = focusRect.y + focusInsets.top;
+     contentRect.width = focusRect.width - focusInsets.left - focusInsets.right;
+     contentRect.height = focusRect.height - focusInsets.top
+                          - focusInsets.bottom;
+ 
+     if (contentRect.width < 0)
+       contentRect.width = 0;
+     if (contentRect.height < 0)
+       contentRect.height = 0;
+   }
+ 
+   /**
+    * Calculates the position of the thumbRect based on the current value of
+    * the slider. It must take into  account the orientation of the slider.
+    */
+   protected void calculateThumbLocation()
+   {
+     int value = slider.getValue();
+ 
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       {
+ 	thumbRect.x = xPositionForValue(value) - thumbRect.width / 2;
+ 	thumbRect.y = contentRect.y;
+       }
+     else
+       {
+ 	thumbRect.x = contentRect.x;
+ 	thumbRect.y = yPositionForValue(value) - thumbRect.height / 2;
+       }
+   }
+ 
+   /**
+    * Calculates the gap size between the left edge of the contentRect and the
+    * left edge of the trackRect.
+    */
+   protected void calculateTrackBuffer()
+   {
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       trackBuffer = thumbRect.width;
+     else
+       trackBuffer = thumbRect.height;
+   }
+ 
+   /**
+    * This method returns the size of the thumbRect.
+    *
+    * @return The dimensions of the thumb.
+    */
+   protected Dimension getThumbSize()
+   {
+     // This is really just the bounds box for the thumb.
+     // The thumb will actually be pointed (like a rectangle + triangle at bottom)
+     return thumbRect.getSize();
+   }
+ 
+   /**
+    * Calculates the size and position of the trackRect. It must take into
+    * account the orientation of the slider.
+    */
+   protected void calculateTrackRect()
+   {
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       {
+ 	trackRect.x = contentRect.x + trackBuffer;
+ 	trackRect.y = contentRect.y;
+ 	trackRect.width = contentRect.width - 2 * trackBuffer;
+ 	trackRect.height = thumbRect.height;
+       }
+     else
+       {
+ 	trackRect.x = contentRect.x;
+ 	trackRect.y = contentRect.y + trackBuffer;
+ 	trackRect.width = thumbRect.width;
+ 	trackRect.height = contentRect.height - 2 * trackBuffer;
+       }
+   }
+ 
+   /**
+    * This method returns the height of the tick area box if the slider  is
+    * horizontal and the width of the tick area box is the slider is vertical.
+    * It not necessarily how long the ticks will be. If a gap between the edge
+    * of tick box and the actual tick is desired, then that will need to be
+    * handled in the tick painting methods.
+    *
+    * @return The height (or width if the slider is vertical) of the tick
+    *         rectangle.
+    */
+   protected int getTickLength()
+   {
+     return tickHeight;
+   }
+ 
+   /**
+    * This method calculates the size and position of the tickRect. It must
+    * take into account the orientation of the slider.
+    */
+   protected void calculateTickRect()
+   {
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       {
+ 	tickRect.x = trackRect.x;
+ 	tickRect.y = trackRect.y + trackRect.height;
+ 	tickRect.width = trackRect.width;
+ 	tickRect.height = getTickLength();
+ 
+ 	if (tickRect.y + tickRect.height > contentRect.y + contentRect.height)
+ 	  tickRect.height = contentRect.y + contentRect.height - tickRect.y;
+       }
+     else
+       {
+ 	tickRect.x = trackRect.x + trackRect.width;
+ 	tickRect.y = trackRect.y;
+ 	tickRect.width = getTickLength();
+ 	tickRect.height = trackRect.height;
+ 
+ 	if (tickRect.x + tickRect.width > contentRect.x + contentRect.width)
+ 	  tickRect.width = contentRect.x + contentRect.width - tickRect.x;
+       }
+   }
+ 
+   /**
+    * This method calculates the size and position of the labelRect. It must
+    * take into account the orientation of the slider.
+    */
+   protected void calculateLabelRect()
+   {
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       {
+ 	labelRect.x = contentRect.x;
+ 	labelRect.y = tickRect.y + tickRect.height;
+ 	labelRect.width = contentRect.width;
+ 	labelRect.height = contentRect.height - labelRect.y;
+       }
+     else
+       {
+ 	labelRect.x = tickRect.x + tickRect.width;
+ 	labelRect.y = contentRect.y;
+ 	labelRect.width = contentRect.width - labelRect.x;
+ 	labelRect.height = contentRect.height;
+       }
+   }
+ 
+   /**
+    * This method returns the width of the widest label  in the slider's label
+    * table.
+    *
+    * @return The width of the widest label or 0 if no label table exists.
+    */
+   protected int getWidthOfWidestLabel()
+   {
+     int widest = 0;
+     Component label;
+ 
+     if (slider.getLabelTable() == null)
+       return 0;
+ 
+     Dimension pref;
+     for (Enumeration list = slider.getLabelTable().elements();
+          list.hasMoreElements();)
+       {
+ 	Object comp = list.nextElement();
+ 	if (! (comp instanceof Component))
+ 	  continue;
+ 	label = (Component) comp;
+ 	pref = label.getPreferredSize();
+ 	if (pref != null && pref.width > widest)
+ 	  widest = pref.width;
+       }
+     return widest;
+   }
+ 
+   /**
+    * This method returns the height of the tallest label in the slider's label
+    * table.
+    *
+    * @return The height of the tallest label or 0 if no label table exists.
+    */
+   protected int getHeightOfTallestLabel()
+   {
+     int tallest = 0;
+     Component label;
+ 
+     if (slider.getLabelTable() == null)
+       return 0;
+     Dimension pref;
+     for (Enumeration list = slider.getLabelTable().elements();
+          list.hasMoreElements();)
+       {
+ 	Object comp = list.nextElement();
+ 	if (! (comp instanceof Component))
+ 	  continue;
+ 	label = (Component) comp;
+ 	pref = label.getPreferredSize();
+ 	if (pref != null && pref.height > tallest)
+ 	  tallest = pref.height;
+       }
+     return tallest;
+   }
+ 
+   /**
+    * This method returns the width of the label whose key has the highest
+    * value.
+    *
+    * @return The width of the high value label or 0 if no label table exists.
+    */
+   protected int getWidthOfHighValueLabel()
+   {
+     Component highValueLabel = getHighestValueLabel();
+     if (highValueLabel != null)
+       return highValueLabel.getWidth();
+     else
+       return 0;
+   }
+ 
+   /**
+    * This method returns the width of the label whose key has the lowest
+    * value.
+    *
+    * @return The width of the low value label or 0 if no label table exists.
+    */
+   protected int getWidthOfLowValueLabel()
+   {
+     Component lowValueLabel = getLowestValueLabel();
+     if (lowValueLabel != null)
+       return lowValueLabel.getWidth();
+     else
+       return 0;
+   }
+ 
+   /**
+    * This method returns the height of the label whose key has the highest
+    * value.
+    *
+    * @return The height of the high value label or 0 if no label table exists.
+    */
+   protected int getHeightOfHighValueLabel()
+   {
+     Component highValueLabel = getHighestValueLabel();
+     if (highValueLabel != null)
+       return highValueLabel.getHeight();
+     else
+       return 0;
+   }
+ 
+   /**
+    * This method returns the height of the label whose key has the lowest
+    * value.
+    *
+    * @return The height of the low value label or 0 if no label table exists.
+    */
+   protected int getHeightOfLowValueLabel()
+   {
+     Component lowValueLabel = getLowestValueLabel();
+     if (lowValueLabel != null)
+       return lowValueLabel.getHeight();
+     else
+       return 0;
+   }
+ 
+   /**
+    * This method returns whether the slider is to be drawn inverted.
+    *
+    * @return True is the slider is to be drawn inverted.
+    */
+   protected boolean drawInverted()
+   {
+     return ! (slider.getInverted() ^ leftToRightCache);
+   }
+ 
+   /**
+    * This method returns the label whose key has the lowest value.
+    *
+    * @return The low value label or null if no label table exists.
+    */
+   protected Component getLowestValueLabel()
+   {
+     Integer key = new Integer(Integer.MAX_VALUE);
+     Integer tmpKey;
+     Dictionary labelTable = slider.getLabelTable();
+ 
+     if (labelTable == null)
+       return null;
+ 
+     for (Enumeration list = labelTable.keys(); list.hasMoreElements();)
+       {
+ 	Object value = list.nextElement();
+ 	if (! (value instanceof Integer))
+ 	  continue;
+ 	tmpKey = (Integer) value;
+ 	if (tmpKey.intValue() < key.intValue())
+ 	  key = tmpKey;
+       }
+     Object comp = labelTable.get(key);
+     if (! (comp instanceof Component))
+       return null;
+     return (Component) comp;
+   }
+ 
+   /**
+    * This method returns the label whose  key has the highest value.
+    *
+    * @return The high value label or null if no label table exists.
+    */
+   protected Component getHighestValueLabel()
+   {
+     Integer key = new Integer(Integer.MIN_VALUE);
+     Integer tmpKey;
+     Dictionary labelTable = slider.getLabelTable();
+ 
+     if (labelTable == null)
+       return null;
+ 
+     for (Enumeration list = labelTable.keys(); list.hasMoreElements();)
+       {
+ 	Object value = list.nextElement();
+ 	if (! (value instanceof Integer))
+ 	  continue;
+ 	tmpKey = (Integer) value;
+ 	if (tmpKey.intValue() > key.intValue())
+ 	  key = tmpKey;
+       }
+     Object comp = labelTable.get(key);
+     if (! (comp instanceof Component))
+       return null;
+     return (Component) comp;
+   }
+ 
+   /**
+    * This method is used to paint the {@link JSlider}. It delegates all its
+    * duties to the various paint methods like paintTicks(),  paintTrack(),
+    * paintThumb(), etc.
+    *
+    * @param g The {@link Graphics} object to paint with.
+    * @param c The {@link JComponent} that is being painted.
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     // FIXME: Move this to propertyChangeEvent handler, when we get those.
+     leftToRightCache = slider.getComponentOrientation() != ComponentOrientation.RIGHT_TO_LEFT;
+     // FIXME: This next line is only here because the above line is here.
+     calculateThumbLocation();
+ 
+     if (slider.getPaintTrack())
+       paintTrack(g);
+     if (slider.getPaintTicks())
+       paintTicks(g);
+     if (slider.getPaintLabels())
+       paintLabels(g);
+ 
+     //FIXME: Paint focus.
+     paintThumb(g);
+   }
+ 
+   /**
+    * This method recalculates any rectangles that need to be recalculated
+    * after the insets of the component have changed.
+    */
+   protected void recalculateIfInsetsChanged()
+   {
+     // Examining a test program shows that either Sun calls private
+     // methods that we don't know about, or these don't do anything.
+     calculateFocusRect();
+ 
+     calculateContentRect();
+     calculateThumbSize();
+     calculateTrackBuffer();
+     calculateTrackRect();
+     calculateThumbLocation();
+ 
+     calculateTickRect();
+     calculateLabelRect();
+   }
+ 
+   /**
+    * This method recalculates any rectangles that need to be recalculated
+    * after the orientation of the slider changes.
+    */
+   protected void recalculateIfOrientationChanged()
+   {
+     // Examining a test program shows that either Sun calls private
+     // methods that we don't know about, or these don't do anything.  
+     calculateThumbSize();
+     calculateTrackBuffer();
+     calculateTrackRect();
+     calculateThumbLocation();
+ 
+     calculateTickRect();
+     calculateLabelRect();
+   }
+ 
+   /**
+    * This method is called during a repaint if the slider has focus. It draws
+    * an outline of the  focusRect using the color returned by
+    * getFocusColor().
+    *
+    * @param g The {@link Graphics} object to draw with.
+    */
+   public void paintFocus(Graphics g)
+   {
+     Color saved_color = g.getColor();
+ 
+     g.setColor(getFocusColor());
+ 
+     g.drawRect(focusRect.x, focusRect.y, focusRect.width, focusRect.height);
+ 
+     g.setColor(saved_color);
+   }
+ 
+   /**
+    * <p>
+    * This method is called during a repaint if the  track is to be drawn. It
+    * draws a 3D rectangle to  represent the track. The track is not the size
+    * of the trackRect. The top and left edges of the track should be outlined
+    * with the shadow color. The bottom and right edges should be outlined
+    * with the highlight color.
+    * </p>
+    * <pre>
+    *    a---d   
+    *    |   |   
+    *    |   |   a------------------------d
+    *    |   |   |                        |
+    *    |   |   b------------------------c
+    *    |   |
+    *    |   |   
+    *    b---c
+    * </pre>
+    * 
+    * <p>
+    * The b-a-d path needs to be drawn with the shadow color and the b-c-d path
+    * needs to be drawn with the highlight color.
+    * </p>
+    *
+    * @param g The {@link Graphics} object to draw with.
+    */
+   public void paintTrack(Graphics g)
+   {
+     Color saved_color = g.getColor();
+     int width;
+     int height;
+ 
+     Point a = new Point(trackRect.x, trackRect.y);
+     Point b = new Point(a);
+     Point c = new Point(a);
+     Point d = new Point(a);
+ 
+     Polygon high;
+     Polygon shadow;
+ 
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       {
+ 	width = trackRect.width;
+ 	height = (thumbRect.height / 4 == 0) ? 1 : thumbRect.height / 4;
+ 
+ 	a.translate(0, (trackRect.height / 2) - (height / 2));
+ 	b.translate(0, (trackRect.height / 2) + (height / 2));
+ 	c.translate(trackRect.width, (trackRect.height / 2) + (height / 2));
+ 	d.translate(trackRect.width, (trackRect.height / 2) - (height / 2));
+       }
+     else
+       {
+ 	width = (thumbRect.width / 4 == 0) ? 1 : thumbRect.width / 4;
+ 	height = trackRect.height;
+ 
+ 	a.translate((trackRect.width / 2) - (width / 2), 0);
+ 	b.translate((trackRect.width / 2) - (width / 2), trackRect.height);
+ 	c.translate((trackRect.width / 2) + (width / 2), trackRect.height);
+ 	d.translate((trackRect.width / 2) + (width / 2), 0);
+       }
+     g.setColor(Color.GRAY);
+     g.fillRect(a.x, a.y, width, height);
+ 
+     g.setColor(getHighlightColor());
+     g.drawLine(b.x, b.y, c.x, c.y);
+     g.drawLine(c.x, c.y, d.x, d.y);
+ 
+     g.setColor(getShadowColor());
+     g.drawLine(b.x, b.y, a.x, a.y);
+     g.drawLine(a.x, a.y, d.x, d.y);
+ 
+     g.setColor(saved_color);
+   }
+ 
+   /**
+    * This method is called during a repaint if the ticks are to be drawn. This
+    * method must still verify that the majorTickSpacing and minorTickSpacing
+    * are greater than zero before drawing the ticks.
+    *
+    * @param g The {@link Graphics} object to draw with.
+    */
+   public void paintTicks(Graphics g)
+   {
+     int max = slider.getMaximum();
+     int min = slider.getMinimum();
+     int majorSpace = slider.getMajorTickSpacing();
+     int minorSpace = slider.getMinorTickSpacing();
+ 
+     if (majorSpace > 0)
+       {
+ 	if (slider.getOrientation() == JSlider.HORIZONTAL)
+ 	  {
+ 	    double loc = tickRect.x;
+ 	    double increment = (max == min) ? 0
+ 	                                    : majorSpace * (double) tickRect.width / (max
+ 	                                    - min);
+ 	    if (drawInverted())
+ 	      {
+ 		loc += tickRect.width;
+ 		increment *= -1;
+ 	      }
+ 	    for (int i = min; i <= max; i += majorSpace)
+ 	      {
+ 		paintMajorTickForHorizSlider(g, tickRect, (int) loc);
+ 		loc += increment;
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    double loc = tickRect.height + tickRect.y;
+ 	    double increment = (max == min) ? 0
+ 	                                    : -majorSpace * (double) tickRect.height / (max
+ 	                                    - min);
+ 	    if (drawInverted())
+ 	      {
+ 		loc = tickRect.y;
+ 		increment *= -1;
+ 	      }
+ 	    for (int i = min; i <= max; i += majorSpace)
+ 	      {
+ 		paintMajorTickForVertSlider(g, tickRect, (int) loc);
+ 		loc += increment;
+ 	      }
+ 	  }
+       }
+     if (minorSpace > 0)
+       {
+ 	if (slider.getOrientation() == JSlider.HORIZONTAL)
+ 	  {
+ 	    double loc = tickRect.x;
+ 	    double increment = (max == min) ? 0
+ 	                                    : minorSpace * (double) tickRect.width / (max
+ 	                                    - min);
+ 	    if (drawInverted())
+ 	      {
+ 		loc += tickRect.width;
+ 		increment *= -1;
+ 	      }
+ 	    for (int i = min; i <= max; i += minorSpace)
+ 	      {
+ 		paintMinorTickForHorizSlider(g, tickRect, (int) loc);
+ 		loc += increment;
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    double loc = tickRect.height + tickRect.y;
+ 	    double increment = (max == min) ? 0
+ 	                                    : -minorSpace * (double) tickRect.height / (max
+ 	                                    - min);
+ 	    if (drawInverted())
+ 	      {
+ 		loc = tickRect.y;
+ 		increment *= -1;
+ 	      }
+ 	    for (int i = min; i <= max; i += minorSpace)
+ 	      {
+ 		paintMinorTickForVertSlider(g, tickRect, (int) loc);
+ 		loc += increment;
+ 	      }
+ 	  }
+       }
+   }
+ 
+   /* Minor ticks start at 1/4 of the height (or width) of the tickRect and extend
+      to 1/2 of the tickRect.
+ 
+      Major ticks start at 1/4 of the height and extend to 3/4.
+    */
+ 
+   /**
+    * This method paints a minor tick for a horizontal slider at the given x
+    * value. x represents the x coordinate to paint at.
+    *
+    * @param g The {@link Graphics} object to draw with.
+    * @param tickBounds The tickRect rectangle.
+    * @param x The x coordinate to draw the tick at.
+    */
+   protected void paintMinorTickForHorizSlider(Graphics g,
+                                               Rectangle tickBounds, int x)
+   {
+     int y = tickRect.y + tickRect.height / 4;
+     Color saved = g.getColor();
+     g.setColor(Color.BLACK);
+ 
+     g.drawLine(x, y, x, y + tickRect.height / 4);
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints a major tick for a horizontal slider at the given x
+    * value. x represents the x coordinate to paint at.
+    *
+    * @param g The {@link Graphics} object to draw with.
+    * @param tickBounds The tickRect rectangle.
+    * @param x The x coordinate to draw the tick at.
+    */
+   protected void paintMajorTickForHorizSlider(Graphics g,
+                                               Rectangle tickBounds, int x)
+   {
+     int y = tickRect.y + tickRect.height / 4;
+     Color saved = g.getColor();
+     g.setColor(Color.BLACK);
+ 
+     g.drawLine(x, y, x, y + tickRect.height / 2);
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints a minor tick for a vertical slider at the given y
+    * value. y represents the y coordinate to paint at.
+    *
+    * @param g The {@link Graphics} object to draw with.
+    * @param tickBounds The tickRect rectangle.
+    * @param y The y coordinate to draw the tick at.
+    */
+   protected void paintMinorTickForVertSlider(Graphics g, Rectangle tickBounds,
+                                              int y)
+   {
+     int x = tickRect.x + tickRect.width / 4;
+     Color saved = g.getColor();
+     g.setColor(Color.BLACK);
+ 
+     g.drawLine(x, y, x + tickRect.width / 4, y);
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints a major tick for a vertical slider at the given y
+    * value. y represents the y coordinate to paint at.
+    *
+    * @param g The {@link Graphics} object to draw with.
+    * @param tickBounds The tickRect rectangle.
+    * @param y The y coordinate to draw the tick at.
+    */
+   protected void paintMajorTickForVertSlider(Graphics g, Rectangle tickBounds,
+                                              int y)
+   {
+     int x = tickRect.x + tickRect.width / 4;
+     Color saved = g.getColor();
+     g.setColor(Color.BLACK);
+ 
+     g.drawLine(x, y, x + tickRect.width / 2, y);
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints all the labels from the slider's label table. This
+    * method must make sure that the label table is not null before painting
+    * the labels. Each entry in the label table is a (integer, component)
+    * pair. Every label is painted at the value of the integer.
+    *
+    * @param g The {@link Graphics} object to draw with.
+    */
+   public void paintLabels(Graphics g)
+   {
+     if (slider.getLabelTable() != null)
+       {
+ 	Dictionary table = slider.getLabelTable();
+ 	Integer tmpKey;
+ 	Object key;
+ 	Object element;
+ 	Component label;
+ 	if (slider.getOrientation() == JSlider.HORIZONTAL)
+ 	  {
+ 	    for (Enumeration list = table.keys(); list.hasMoreElements();)
+ 	      {
+ 		key = list.nextElement();
+ 		if (! (key instanceof Integer))
+ 		  continue;
+ 		tmpKey = (Integer) key;
+ 		element = table.get(tmpKey);
+ 		// We won't paint them if they're not
+ 		// JLabels so continue anyway
+ 		if (! (element instanceof JLabel))
+ 		  continue;
+ 		label = (Component) element;
+ 		paintHorizontalLabel(g, tmpKey.intValue(), label);
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    for (Enumeration list = table.keys(); list.hasMoreElements();)
+ 	      {
+ 		key = list.nextElement();
+ 		if (! (key instanceof Integer))
+ 		  continue;
+ 		tmpKey = (Integer) key;
+ 		element = table.get(tmpKey);
+ 		// We won't paint them if they're not
+ 		// JLabels so continue anyway
+ 		if (! (element instanceof JLabel))
+ 		  continue;
+ 		label = (Component) element;
+ 		paintVerticalLabel(g, tmpKey.intValue(), label);
+ 	      }
+ 	  }
+       }
+   }
+ 
+   /**
+    * This method paints the label on the horizontal slider at the value
+    * specified. The value is not a coordinate. It is a value within the range
+    * of the  slider. If the value is not within the range of the slider, this
+    * method will do nothing. This method should not paint outside the
+    * boundaries of the labelRect.
+    *
+    * @param g The {@link Graphics} object to draw with.
+    * @param value The value to paint at.
+    * @param label The label to paint.
+    */
+   protected void paintHorizontalLabel(Graphics g, int value, Component label)
+   {
+     // This relies on clipping working properly or we'll end up
+     // painting all over the place. If our preferred size is ignored, then
+     // the labels may not fit inside the slider's bounds. Rather than mucking 
+     // with font sizes and possible icon sizes, we'll set the bounds for
+     // the label and let it get clipped.
+     Dimension dim = label.getPreferredSize();
+     int w = (int) dim.getWidth();
+     int h = (int) dim.getHeight();
+ 
+     int max = slider.getMaximum();
+     int min = slider.getMinimum();
+ 
+     if (value > max || value < min)
+       return;
+ 
+     //           value
+     //             |
+     //        ------------
+     //        |          |
+     //        |          |
+     //        |          |
+     //  The label must move w/2 to the right to fit directly under the value.
+     int xpos = xPositionForValue(value) - w / 2;
+     int ypos = labelRect.y;
+ 
+     // We want to center the label around the xPositionForValue
+     // So we use xpos - w / 2. However, if value is min and the label 
+     // is large, we run the risk of going out of bounds. So we bring it back
+     // to 0 if it becomes negative.
+     if (xpos < 0)
+       xpos = 0;
+ 
+     // If the label + starting x position is greater than
+     // the x space in the label rectangle, we reset it to the largest
+     // amount possible in the rectangle. This means ugliness.
+     if (xpos + w > labelRect.x + labelRect.width)
+       w = labelRect.x + labelRect.width - xpos;
+ 
+     // If the label is too tall. We reset it to the height of the label
+     // rectangle.
+     if (h > labelRect.height)
+       h = labelRect.height;
+ 
+     label.setBounds(xpos, ypos, w, h);
+     javax.swing.SwingUtilities.paintComponent(g, label, null, label.getBounds());
+   }
+ 
+   /**
+    * This method paints the label on the vertical slider at the value
+    * specified. The value is not a coordinate. It is a value within the range
+    * of the  slider. If the value is not within the range of the slider, this
+    * method will do nothing. This method should not paint outside the
+    * boundaries of the labelRect.
+    *
+    * @param g The {@link Graphics} object to draw with.
+    * @param value The value to paint at.
+    * @param label The label to paint.
+    */
+   protected void paintVerticalLabel(Graphics g, int value, Component label)
+   {
+     Dimension dim = label.getPreferredSize();
+     int w = (int) dim.getWidth();
+     int h = (int) dim.getHeight();
+ 
+     int max = slider.getMaximum();
+     int min = slider.getMinimum();
+ 
+     if (value > max || value < min)
+       return;
+ 
+     int xpos = labelRect.x;
+     int ypos = yPositionForValue(value) - h / 2;
+ 
+     if (ypos < 0)
+       ypos = 0;
+ 
+     if (ypos + h > labelRect.y + labelRect.height)
+       h = labelRect.y + labelRect.height - ypos;
+ 
+     if (w > labelRect.width)
+       w = labelRect.width;
+ 
+     label.setBounds(xpos, ypos, w, h);
+     javax.swing.SwingUtilities.paintComponent(g, label, null, label.getBounds());
+   }
+ 
+   /**
+    * <p>
+    * This method paints a thumb. There are two types of thumb:
+    * </p>
+    * <pre>
+    *   Vertical         Horizontal
+    *    a---b            a-----b
+    *    |   |            |      \
+    *    e   c            |       c
+    *     \ /             |      /
+    *      d              e-----d
+    *  </pre>
+    * 
+    * <p>
+    * In the case of vertical thumbs, we highlight the path b-a-e-d and shadow
+    * the path b-c-d. In the case of horizontal thumbs, we highlight the path
+    * c-b-a-e and shadow the path c-d-e. In both cases we fill the path
+    * a-b-c-d-e before shadows and highlights are drawn.
+    * </p>
+    *
+    * @param g The graphics object to paint with
+    */
+   public void paintThumb(Graphics g)
+   {
+     Color saved_color = g.getColor();
+ 
+     Polygon thumb = new Polygon();
+ 
+     Point a = new Point(thumbRect.x, thumbRect.y);
+     Point b = new Point(a);
+     Point c = new Point(a);
+     Point d = new Point(a);
+     Point e = new Point(a);
+ 
+     Polygon bright;
+     Polygon dark;
+     Polygon all;
+ 
+     // This will be in X-dimension if the slider is inverted and y if it isn't.	  	  
+     int turnPoint;
+ 
+     if (slider.getOrientation() == JSlider.HORIZONTAL)
+       {
+ 	turnPoint = thumbRect.height * 3 / 4;
+ 
+ 	b.translate(thumbRect.width, 0);
+ 	c.translate(thumbRect.width, turnPoint);
+ 	d.translate(thumbRect.width / 2, thumbRect.height);
+ 	e.translate(0, turnPoint);
+ 
+ 	bright = new Polygon(new int[] { b.x, a.x, e.x, d.x },
+ 	                     new int[] { b.y, a.y, e.y, d.y }, 4);
+ 
+ 	dark = new Polygon(new int[] { b.x, c.x, d.x },
+ 	                   new int[] { b.y, c.y, d.y }, 3);
+ 	all = new Polygon(new int[] { a.x + 1, b.x, c.x, d.x, e.x + 1 },
+ 	                  new int[] { a.y + 1, b.y + 1, c.y, d.y + 1, e.y }, 5);
+       }
+     else
+       {
+ 	turnPoint = thumbRect.width * 3 / 4;
+ 
+ 	b.translate(turnPoint, 0);
+ 	c.translate(thumbRect.width, thumbRect.height / 2);
+ 	d.translate(turnPoint, thumbRect.height);
+ 	e.translate(0, thumbRect.height);
+ 
+ 	bright = new Polygon(new int[] { c.x, b.x, a.x, e.x },
+ 	                     new int[] { c.y, b.y, a.y, e.y }, 4);
+ 
+ 	dark = new Polygon(new int[] { c.x, d.x, e.x + 1 },
+ 	                   new int[] { c.y, d.y, e.y }, 3);
+ 
+ 	all = new Polygon(new int[] { a.x + 1, b.x, c.x - 1, d.x, e.x + 1 },
+ 	                  new int[] { a.y + 1, b.y + 1, c.y, d.y, e.y }, 5);
+       }
+ 
+     g.setColor(Color.WHITE);
+     g.drawPolyline(bright.xpoints, bright.ypoints, bright.npoints);
+ 
+     g.setColor(Color.BLACK);
+     g.drawPolyline(dark.xpoints, dark.ypoints, dark.npoints);
+ 
+     g.setColor(Color.GRAY);
+     g.fillPolygon(all);
+ 
+     g.setColor(saved_color);
+   }
+ 
+   /**
+    * This method sets the position of the thumbRect.
+    *
+    * @param x The new x position.
+    * @param y The new y position.
+    */
+   public void setThumbLocation(int x, int y)
+   {
+     thumbRect.x = x;
+     thumbRect.y = y;
+   }
+ 
+   /**
+    * This method is used to move the thumb one  block in the direction
+    * specified. If the slider  snaps to ticks, this method is responsible for
+    * snapping it to a tick after the thumb  has been moved.
+    *
+    * @param direction The direction to move in.
+    */
+   public void scrollByBlock(int direction)
+   {
+     // The direction is -1 for backwards and 1 for forwards.
+     int unit = direction * (slider.getMaximum() - slider.getMinimum()) / 10;
+ 
+     int moveTo = slider.getValue() + unit;
+ 
+     if (slider.getSnapToTicks())
+       moveTo = findClosestTick(moveTo);
+ 
+     slider.setValue(moveTo);
+   }
+ 
+   /**
+    * This method is used to move the thumb one unit in the direction
+    * specified. If the slider snaps to ticks, this method is responsible for
+    * snapping it to a tick after the thumb has been moved.
+    *
+    * @param direction The direction to move in.
+    */
+   public void scrollByUnit(int direction)
+   {
+     // The direction is -1 for backwards and 1 for forwards.
+     int moveTo = slider.getValue() + direction;
+ 
+     if (slider.getSnapToTicks())
+       moveTo = findClosestTick(moveTo);
+ 
+     slider.setValue(moveTo);
+   }
+ 
+   /**
+    * This method is called when there has been a click in the track and the
+    * thumb needs to be scrolled  on regular intervals. This method is only
+    * responsible  for starting the timer and not for stopping it.
+    *
+    * @param dir The direction to move in.
+    */
+   protected void scrollDueToClickInTrack(int dir)
+   {
+     scrollTimer.stop();
+ 
+     scrollListener.setDirection(dir);
+     scrollListener.setScrollByBlock(true);
+ 
+     scrollTimer.start();
+   }
+ 
+   /**
+    * This method returns the X coordinate for the value passed in.
+    *
+    * @param value The value to calculate an x coordinate for.
+    *
+    * @return The x coordinate for the value.
+    */
+   protected int xPositionForValue(int value)
+   {
+     int min = slider.getMinimum();
+     int max = slider.getMaximum();
+     int extent = slider.getExtent();
+     int len = trackRect.width;
+ 
+     int xPos = (max == min) ? 0 : (value - min) * len / (max - min);
+ 
+     if (! drawInverted())
+       xPos += trackRect.x;
+     else
+       {
+ 	xPos = trackRect.width - xPos;
+ 	xPos += trackRect.x;
+       }
+     return xPos;
+   }
+ 
+   /**
+    * This method returns the y coordinate for the value passed in.
+    *
+    * @param value The value to calculate a y coordinate for.
+    *
+    * @return The y coordinate for the value.
+    */
+   protected int yPositionForValue(int value)
+   {
+     int min = slider.getMinimum();
+     int max = slider.getMaximum();
+     int extent = slider.getExtent();
+     int len = trackRect.height;
+ 
+     int yPos = (max == min) ? 0 : (value - min) * len / (max - min);
+ 
+     if (! drawInverted())
+       {
+ 	yPos = trackRect.height - yPos;
+ 	yPos += trackRect.y;
+       }
+     else
+       yPos += trackRect.y;
+     return yPos;
+   }
+ 
+   /**
+    * This method returns the value in the slider's range given the y
+    * coordinate. If the value is out of range, it will  return the closest
+    * legal value.
+    *
+    * @param yPos The y coordinate to calculate a value for.
+    *
+    * @return The value for the y coordinate.
+    */
+   public int valueForYPosition(int yPos)
+   {
+     int min = slider.getMinimum();
+     int max = slider.getMaximum();
+     int len = trackRect.height;
+ 
+     int value;
+ 
+     // If the length is 0, you shouldn't be able to even see where the slider is.
+     // This really shouldn't ever happen, but just in case, we'll return the middle.
+     if (len == 0)
+       return ((max - min) / 2);
+ 
+     if (! drawInverted())
+       value = ((len - (yPos - trackRect.y)) * (max - min) / len + min);
+     else
+       value = ((yPos - trackRect.y) * (max - min) / len + min);
+ 
+     // If this isn't a legal value, then we'll have to move to one now.
+     if (value > max)
+       value = max;
+     else if (value < min)
+       value = min;
+     return value;
+   }
+ 
+   /**
+    * This method returns the value in the slider's range given the x
+    * coordinate. If the value is out of range, it will return the closest
+    * legal value.
+    *
+    * @param xPos The x coordinate to calculate a value for.
+    *
+    * @return The value for the x coordinate.
+    */
+   public int valueForXPosition(int xPos)
+   {
+     int min = slider.getMinimum();
+     int max = slider.getMaximum();
+     int len = trackRect.width;
+ 
+     int value;
+ 
+     // If the length is 0, you shouldn't be able to even see where the slider is.
+     // This really shouldn't ever happen, but just in case, we'll return the middle.
+     if (len == 0)
+       return ((max - min) / 2);
+ 
+     if (! drawInverted())
+       value = ((xPos - trackRect.x) * (max - min) / len + min);
+     else
+       value = ((len - (xPos - trackRect.x)) * (max - min) / len + min);
+ 
+     // If this isn't a legal value, then we'll have to move to one now.
+     if (value > max)
+       value = max;
+     else if (value < min)
+       value = min;
+     return value;
+   }
+ 
+   /**
+    * This method finds the closest value that has a tick associated with it.
+    *
+    * @param value The value to search from.
+    *
+    * @return The closest value that has a tick associated with it.
+    */
+   private int findClosestTick(int value)
+   {
+     int min = slider.getMinimum();
+     int max = slider.getMaximum();
+     int majorSpace = slider.getMajorTickSpacing();
+     int minorSpace = slider.getMinorTickSpacing();
+ 
+     // The default value to return is value + minor or
+     // value + major. 
+     // Initializing at min - value leaves us with a default
+     // return value of min, which always has tick marks
+     // (if ticks are painted).
+     int minor = min - value;
+     int major = min - value;
+ 
+     // If there are no major tick marks or minor tick marks 
+     // e.g. snap is set to true but no ticks are set, then
+     // we can just return the value.
+     if (majorSpace <= 0 && minorSpace <= 0)
+       return value;
+ 
+     // First check the major ticks.
+     if (majorSpace > 0)
+       {
+ 	int lowerBound = (value - min) / majorSpace;
+ 	int majLower = majorSpace * lowerBound + min;
+ 	int majHigher = majorSpace * (lowerBound + 1) + min;
+ 
+ 	if (majHigher <= max && majHigher - value <= value - majLower)
+ 	  major = majHigher - value;
+ 	else
+ 	  major = majLower - value;
+       }
+ 
+     if (minorSpace > 0)
+       {
+ 	int lowerBound = value / minorSpace;
+ 	int minLower = minorSpace * lowerBound;
+ 	int minHigher = minorSpace * (lowerBound + 1);
+ 
+ 	if (minHigher <= max && minHigher - value <= value - minLower)
+ 	  minor = minHigher - value;
+ 	else
+ 	  minor = minLower - value;
+       }
+ 
+     // Give preference to minor ticks
+     if (Math.abs(minor) > Math.abs(major))
+       return value + major;
+     else
+       return value + minor;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSpinnerUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSpinnerUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSpinnerUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSpinnerUI.java	Tue Nov 30 23:59:06 2004
***************
*** 0 ****
--- 1,573 ----
+ /* SpinnerUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.Insets;
+ import java.awt.LayoutManager;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.ActionListener;
+ import java.awt.event.MouseAdapter;
+ import java.awt.event.MouseEvent;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.JButton;
+ import javax.swing.JComponent;
+ import javax.swing.JSpinner;
+ import javax.swing.Timer;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.SpinnerUI;
+ 
+ /**
+  * DOCUMENT ME!
+  *
+  * @author Ka-Hing Cheung
+  *
+  * @see javax.swing.JSpinner
+  * @since 1.4
+  */
+ public class BasicSpinnerUI extends SpinnerUI
+ {
+   /**
+    * Creates a new <code>ComponentUI</code> for the specified
+    * <code>JComponent</code>
+    *
+    * @param c DOCUMENT ME!
+    *
+    * @return a ComponentUI
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicSpinnerUI();
+   }
+ 
+   /**
+    * Creates an editor component. Really, it just returns
+    * <code>JSpinner.getEditor()</code>
+    *
+    * @return a JComponent as an editor
+    *
+    * @see javax.swing.JSpinner#getEditor
+    */
+   protected JComponent createEditor()
+   {
+     return spinner.getEditor();
+   }
+ 
+   /**
+    * Creates a <code>LayoutManager</code> that layouts the sub components. The
+    * subcomponents are identifies by the constraint "Next", "Previous" and
+    * "Editor"
+    *
+    * @return a LayoutManager
+    *
+    * @see java.awt.LayoutManager
+    */
+   protected LayoutManager createLayout()
+   {
+     return new DefaultLayoutManager();
+   }
+ 
+   /**
+    * Creates the "Next" button
+    *
+    * @return the next button component
+    */
+   protected Component createNextButton()
+   {
+     JButton button = new BasicArrowButton(BasicArrowButton.NORTH);
+     return button;
+   }
+ 
+   /**
+    * Creates the "Previous" button
+    *
+    * @return the previous button component
+    */
+   protected Component createPreviousButton()
+   {
+     JButton button = new BasicArrowButton(BasicArrowButton.SOUTH);
+     return button;
+   }
+ 
+   /**
+    * Creates the <code>PropertyChangeListener</code> that will be attached by
+    * <code>installListeners</code>. It should watch for the "editor"
+    * property, when it's changed, replace the old editor with the new one,
+    * probably by calling <code>replaceEditor</code>
+    *
+    * @return a PropertyChangeListener
+    *
+    * @see #replaceEditor
+    */
+   protected PropertyChangeListener createPropertyChangeListener()
+   {
+     return new PropertyChangeListener()
+       {
+ 	public void propertyChange(PropertyChangeEvent evt)
+ 	{
+ 	  // FIXME: Add check for enabled property change. Need to
+ 	  // disable the buttons.
+ 	  if ("editor".equals(evt.getPropertyName()))
+ 	    BasicSpinnerUI.this.replaceEditor((JComponent) evt.getOldValue(),
+ 	                                      (JComponent) evt.getNewValue());
+ 	}
+       };
+   }
+ 
+   /**
+    * Called by <code>installUI</code>. This should set various defaults
+    * obtained from <code>UIManager.getLookAndFeelDefaults</code>, as well as
+    * set the layout obtained from <code>createLayout</code>
+    *
+    * @see #javax.swing.UIManager#getLookAndFeelDefaults
+    * @see #createLayout
+    * @see #installUI
+    */
+   protected void installDefaults()
+   {
+     /* most of it copied from BasicLabelUI, I don't know what keys are
+        available, so someone may want to update this. Hence: TODO
+     */
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+     /*
+     spinner.setForeground(defaults.getColor("Spinner.foreground"));
+     spinner.setBackground(defaults.getColor("Spinner.background"));
+     spinner.setFont(defaults.getFont("Spinner.font"));
+     spinner.setBorder(defaults.getBorder("Spinner.border"));
+     */
+     spinner.setLayout(createLayout());
+   }
+ 
+   /*
+    * Called by <code>installUI</code>, which basically adds the
+    * <code>PropertyChangeListener</code> created by
+    * <code>createPropertyChangeListener</code>
+    *
+    * @see #createPropertyChangeListener
+    * @see #installUI
+    */
+   protected void installListeners()
+   {
+     spinner.addPropertyChangeListener(listener);
+   }
+ 
+   /*
+    * Install listeners to the next button so that it increments the model
+    */
+   protected void installNextButtonListeners(Component c)
+   {
+     c.addMouseListener(new MouseAdapter()
+         {
+ 	  public void mousePressed(MouseEvent evt)
+ 	  {
+ 	    if (! spinner.isEnabled())
+ 	      return;
+ 	    increment();
+ 	    timer.setInitialDelay(500);
+ 	    timer.start();
+ 	  }
+ 
+ 	  public void mouseReleased(MouseEvent evt)
+ 	  {
+ 	    timer.stop();
+ 	  }
+ 
+ 	  void increment()
+ 	  {
+ 	    Object next = BasicSpinnerUI.this.spinner.getNextValue();
+ 	    if (next != null)
+ 	      BasicSpinnerUI.this.spinner.getModel().setValue(next);
+ 	  }
+ 
+ 	  volatile boolean mouseDown = false;
+ 	  Timer timer = new Timer(50,
+ 	                          new ActionListener()
+ 	      {
+ 		public void actionPerformed(ActionEvent event)
+ 		{
+ 		  increment();
+ 		}
+ 	      });
+         });
+   }
+ 
+   /*
+    * Install listeners to the previous button so that it decrements the model
+    */
+   protected void installPreviousButtonListeners(Component c)
+   {
+     c.addMouseListener(new MouseAdapter()
+         {
+ 	  public void mousePressed(MouseEvent evt)
+ 	  {
+ 	    if (! spinner.isEnabled())
+ 	      return;
+ 	    decrement();
+ 	    timer.setInitialDelay(500);
+ 	    timer.start();
+ 	  }
+ 
+ 	  public void mouseReleased(MouseEvent evt)
+ 	  {
+ 	    timer.stop();
+ 	  }
+ 
+ 	  void decrement()
+ 	  {
+ 	    Object prev = BasicSpinnerUI.this.spinner.getPreviousValue();
+ 	    if (prev != null)
+ 	      BasicSpinnerUI.this.spinner.getModel().setValue(prev);
+ 	  }
+ 
+ 	  volatile boolean mouseDown = false;
+ 	  Timer timer = new Timer(50,
+ 	                          new ActionListener()
+ 	      {
+ 		public void actionPerformed(ActionEvent event)
+ 		{
+ 		  decrement();
+ 		}
+ 	      });
+         });
+   }
+ 
+   /**
+    * Install this UI to the <code>JComponent</code>, which in reality, is a
+    * <code>JSpinner</code>. Calls <code>installDefaults</code>,
+    * <code>installListeners</code>, and also adds the buttons and editor.
+    *
+    * @param c DOCUMENT ME!
+    *
+    * @see #installDefaults
+    * @see #installListeners
+    * @see #createNextButton
+    * @see #createPreviousButton
+    * @see #createEditor
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+ 
+     spinner = (JSpinner) c;
+ 
+     installDefaults();
+     installListeners();
+ 
+     Component next = createNextButton();
+     Component previous = createPreviousButton();
+ 
+     installNextButtonListeners(next);
+     installPreviousButtonListeners(previous);
+ 
+     c.add(createEditor(), "Editor");
+     c.add(next, "Next");
+     c.add(previous, "Previous");
+   }
+ 
+   /**
+    * Replace the old editor with the new one
+    *
+    * @param oldEditor the old editor
+    * @param newEditor the new one to replace with
+    */
+   protected void replaceEditor(JComponent oldEditor, JComponent newEditor)
+   {
+     spinner.remove(oldEditor);
+     spinner.add(newEditor);
+   }
+ 
+   /**
+    * The reverse of <code>installDefaults</code>. Called by
+    * <code>uninstallUI</code>
+    */
+   protected void uninstallDefaults()
+   {
+     spinner.setLayout(null);
+   }
+ 
+   /**
+    * The reverse of <code>installListeners</code>, called by
+    * <code>uninstallUI</code>
+    */
+   protected void uninstallListeners()
+   {
+     spinner.removePropertyChangeListener(listener);
+   }
+ 
+   /**
+    * Called when the current L&F is replaced with another one, should call
+    * <code>uninstallDefaults</code> and <code>uninstallListeners</code> as
+    * well as remove the next/previous buttons and the editor
+    *
+    * @param c DOCUMENT ME!
+    */
+   public void uninstallUI(JComponent c)
+   {
+     super.uninstallUI(c);
+ 
+     uninstallDefaults();
+     uninstallListeners();
+     c.removeAll();
+   }
+ 
+   /** The spinner for this UI */
+   protected JSpinner spinner;
+ 
+   /** DOCUMENT ME! */
+   private PropertyChangeListener listener = createPropertyChangeListener();
+ 
+   /**
+    * DOCUMENT ME!
+    */
+   private class DefaultLayoutManager implements LayoutManager
+   {
+     /**
+      * DOCUMENT ME!
+      *
+      * @param parent DOCUMENT ME!
+      */
+     public void layoutContainer(Container parent)
+     {
+       synchronized (parent.getTreeLock())
+         {
+ 	  Insets i = parent.getInsets();
+ 	  boolean l2r = parent.getComponentOrientation().isLeftToRight();
+ 	  /*
+ 	    --------------    --------------
+ 	    |        | n |    | n |        |
+ 	    |   e    | - | or | - |   e    |
+ 	    |        | p |    | p |        |
+ 	    --------------    --------------
+ 	  */
+ 	  Dimension e = minSize(editor);
+ 	  Dimension n = minSize(next);
+ 	  Dimension p = minSize(previous);
+ 	  Dimension s = spinner.getPreferredSize();
+ 
+ 	  int x = l2r ? i.left : i.right;
+ 	  int y = i.top;
+ 	  int w = Math.max(p.width, n.width);
+ 	  int h = Math.max(p.height, n.height);
+ 	  h = Math.max(h, e.height / 2);
+ 	  int e_width = s.width - w;
+ 
+ 	  if (l2r)
+ 	    {
+ 	      setBounds(editor, x, y + (s.height - e.height) / 2, e_width,
+ 	                e.height);
+ 	      x += e_width;
+ 
+ 	      setBounds(next, x, y, w, h);
+ 	      y += h;
+ 
+ 	      setBounds(previous, x, y, w, h);
+ 	    }
+ 	  else
+ 	    {
+ 	      setBounds(next, x, y + (s.height - e.height) / 2, w, h);
+ 	      y += h;
+ 
+ 	      setBounds(previous, x, y, w, h);
+ 	      x += w;
+ 	      y -= h;
+ 
+ 	      setBounds(editor, x, y, e_width, e.height);
+ 	    }
+         }
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param parent DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Dimension minimumLayoutSize(Container parent)
+     {
+       Dimension d = new Dimension();
+ 
+       if (editor != null)
+         {
+ 	  Dimension tmp = editor.getMinimumSize();
+ 	  d.width += tmp.width;
+ 	  d.height = tmp.height;
+         }
+ 
+       int nextWidth = 0;
+       int previousWidth = 0;
+       int otherHeight = 0;
+ 
+       if (next != null)
+         {
+ 	  Dimension tmp = next.getMinimumSize();
+ 	  nextWidth = tmp.width;
+ 	  otherHeight += tmp.height;
+         }
+       if (previous != null)
+         {
+ 	  Dimension tmp = previous.getMinimumSize();
+ 	  previousWidth = tmp.width;
+ 	  otherHeight += tmp.height;
+         }
+ 
+       d.height = Math.max(d.height, otherHeight);
+       d.width += Math.max(nextWidth, previousWidth);
+ 
+       return d;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param parent DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     public Dimension preferredLayoutSize(Container parent)
+     {
+       Dimension d = new Dimension();
+ 
+       if (editor != null)
+         {
+ 	  Dimension tmp = editor.getPreferredSize();
+ 	  d.width += Math.max(tmp.width, 40);
+ 	  d.height = tmp.height;
+         }
+ 
+       int nextWidth = 0;
+       int previousWidth = 0;
+       int otherHeight = 0;
+ 
+       if (next != null)
+         {
+ 	  Dimension tmp = next.getPreferredSize();
+ 	  nextWidth = tmp.width;
+ 	  otherHeight += tmp.height;
+         }
+       if (previous != null)
+         {
+ 	  Dimension tmp = previous.getPreferredSize();
+ 	  previousWidth = tmp.width;
+ 	  otherHeight += tmp.height;
+         }
+ 
+       d.height = Math.max(d.height, otherHeight);
+       d.width += Math.max(nextWidth, previousWidth);
+ 
+       return d;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param child DOCUMENT ME!
+      */
+     public void removeLayoutComponent(Component child)
+     {
+       if (child == editor)
+ 	editor = null;
+       else if (child == next)
+ 	next = null;
+       else if (previous == child)
+ 	previous = null;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param name DOCUMENT ME!
+      * @param child DOCUMENT ME!
+      */
+     public void addLayoutComponent(String name, Component child)
+     {
+       if ("Editor".equals(name))
+ 	editor = child;
+       else if ("Next".equals(name))
+ 	next = child;
+       else if ("Previous".equals(name))
+ 	previous = child;
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param c DOCUMENT ME!
+      *
+      * @return DOCUMENT ME!
+      */
+     private Dimension minSize(Component c)
+     {
+       if (c == null)
+ 	return new Dimension();
+       else
+ 	return c.getMinimumSize();
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param c DOCUMENT ME!
+      * @param x DOCUMENT ME!
+      * @param y DOCUMENT ME!
+      * @param w DOCUMENT ME!
+      * @param h DOCUMENT ME!
+      */
+     private void setBounds(Component c, int x, int y, int w, int h)
+     {
+       if (c != null)
+ 	c.setBounds(x, y, w, h);
+     }
+ 
+     /** DOCUMENT ME! */
+     private Component editor;
+ 
+     /** DOCUMENT ME! */
+     private Component next;
+ 
+     /** DOCUMENT ME! */
+     private Component previous;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSplitPaneDivider.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSplitPaneDivider.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSplitPaneDivider.java	Tue Jun 24 09:48:42 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSplitPaneDivider.java	Wed Feb 16 20:02:57 2005
***************
*** 1,5 ****
! /* BasicSplitPaneDivider.java
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BasicSplitPaneDivider.java --
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,222 ****
  
  package javax.swing.plaf.basic;
  
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.Graphics;
  import java.awt.Insets;
  import java.awt.event.MouseAdapter;
  import java.awt.event.MouseEvent;
  import java.awt.event.MouseMotionListener;
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  import javax.swing.JButton;
  import javax.swing.JSplitPane;
  import javax.swing.border.Border;
  
- 
  /**
!  * The divider that separates the two parts of a JSplitPane in the
!  * Basic look and feel.
!  *
!  * <p>Implementation status: We do not have a real implementation yet.
!  * Currently, it is mostly a stub to allow compiling other parts of
!  * the javax.swing.plaf.basic package, although some parts are already
   * functional.
   *
!  * @author Sascha Brawer (brawer@dandelis.ch)
   */
! public class BasicSplitPaneDivider
!   extends Container
    implements PropertyChangeListener
  {
    /**
!    * Determined using the <code>serialver</code> tool
!    * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5.
     */
    static final long serialVersionUID = 1463404307042803342L;
  
- 
    /**
!    * The width and height of the little buttons for showing and
!    * hiding parts of a JSplitPane in a single mouse click.
     */
    protected static final int ONE_TOUCH_SIZE = 6;
  
! 
!   // FIXME: Javadoc.
    protected static final int ONE_TOUCH_OFFSET = 2;
  
- 
    /**
     * An object that performs the tasks associated with an ongoing drag
!    * operation, or <code>null</code> if the user is currently not
!    * dragging the divider.
     */
    protected DragController dragger;
  
- 
    /**
     * The delegate object that is responsible for the UI of the
     * <code>JSplitPane</code> that contains this divider.
     */
    protected BasicSplitPaneUI splitPaneUI;
  
! 
!   /**
!    * The thickness of the divider in pixels.
!    */
    protected int dividerSize;
-   
  
!   /**
!    * A divider that is used for layout purposes.
!    */
    protected Component hiddenDivider;
  
! 
!   /**
!    * The JSplitPane containing this divider.
!    */
    protected JSplitPane splitPane;
  
- 
    /**
!    * The listener for handling mouse events from both the divider
!    * and the containing <code>JSplitPane</code>.
!    *
!    * <p>The reason for also handling MouseEvents from the containing
!    * <code>JSplitPane</code> is that users should be able to start
!    * a drag gesture from inside the JSplitPane, but slightly outisde
!    * the divider.
     */
    protected MouseHandler mouseHandler = new MouseHandler();
  
- 
    /**
!    * The current orientation of the containing <code>JSplitPane</code>,
!    * which is either {@link javax.swing.JSplitPane#HORIZONTAL_SPLIT}
!    * or {@link javax.swing.JSplitPane#VERTICAL_SPLIT}.
     */
    protected int orientation;
  
- 
    /**
!    * The button for showing and hiding the left (or top) component
!    * of the <code>JSplitPane</code>.
     */
    protected JButton leftButton;
  
- 
    /**
!    * The button for showing and hiding the right (or bottom) component
!    * of the <code>JSplitPane</code>.
     */
    protected JButton rightButton;
  
- 
    /**
!    * The border of this divider. Typically, this will be an instance of
!    * {@link javax.swing.plaf.basic.BasicBorders.SplitPaneDividerBorder}.
     *
     * @see #getBorder()
     * @see #setBorder(javax.swing.border.Border)
     */
    private Border border;
  
  
    /**
     * Constructs a new divider.
     *
!    * @param ui the UI delegate of the enclosing
!    *           <code>JSplitPane</code>.
     */
    public BasicSplitPaneDivider(BasicSplitPaneUI ui)
    {
      setBasicSplitPaneUI(ui);
    }
  
- 
    /**
!    * Sets the delegate object that is responsible for the UI of the
!    * {@link javax.swing.JSplitPane} containing this divider.
     *
!    * @param newUI the UI delegate, or <code>null</code> to release
!    *        the connection to the current delegate.
     */
    public void setBasicSplitPaneUI(BasicSplitPaneUI newUI)
    {
      /* Remove the connection to the existing JSplitPane. */
      if (splitPane != null)
!     {
!       splitPane.removePropertyChangeListener(this);
!       splitPane.removeMouseListener(mouseHandler);
!       splitPane.removeMouseMotionListener(mouseHandler);
!       splitPane = null;
!     }
!     
      /* Establish the connection to the new JSplitPane. */
      splitPaneUI = newUI;
      if (splitPaneUI != null)
        splitPane = newUI.getSplitPane();
      if (splitPane != null)
!     {
!       splitPane.addPropertyChangeListener(this);
!       splitPane.addMouseListener(mouseHandler);
!       splitPane.addMouseMotionListener(mouseHandler);
!       orientation = splitPane.getOrientation();
!     }
    }
-   
  
    /**
!    * Returns the delegate object that is responsible for the UI of the
!    * {@link javax.swing.JSplitPane} containing this divider.
     */
    public BasicSplitPaneUI getBasicSplitPaneUI()
    {
      return splitPaneUI;
    }
  
- 
    /**
     * Sets the thickness of the divider.
     *
--- 38,252 ----
  
  package javax.swing.plaf.basic;
  
+ import java.awt.Color;
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.Graphics;
  import java.awt.Insets;
+ import java.awt.LayoutManager;
  import java.awt.event.MouseAdapter;
  import java.awt.event.MouseEvent;
  import java.awt.event.MouseMotionListener;
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
+ 
  import javax.swing.JButton;
  import javax.swing.JSplitPane;
+ import javax.swing.SwingConstants;
  import javax.swing.border.Border;
  
  /**
!  * The divider that separates the two parts of a JSplitPane in the Basic look
!  * and feel.
!  * 
!  * <p>
!  * Implementation status: We do not have a real implementation yet. Currently,
!  * it is mostly a stub to allow compiling other parts of the
!  * javax.swing.plaf.basic package, although some parts are already
   * functional.
+  * </p>
   *
!  * @author Sascha Brawer (brawer_AT_dandelis.ch)
   */
! public class BasicSplitPaneDivider extends Container
    implements PropertyChangeListener
  {
    /**
!    * Determined using the <code>serialver</code> tool of Apple/Sun JDK 1.3.1
!    * on MacOS X 10.1.5.
     */
    static final long serialVersionUID = 1463404307042803342L;
  
    /**
!    * The width and height of the little buttons for showing and hiding parts
!    * of a JSplitPane in a single mouse click.
     */
    protected static final int ONE_TOUCH_SIZE = 6;
  
!   /** The distance the one touch buttons will sit from the divider's edges. */
    protected static final int ONE_TOUCH_OFFSET = 2;
  
    /**
     * An object that performs the tasks associated with an ongoing drag
!    * operation, or <code>null</code> if the user is currently not dragging
!    * the divider.
     */
    protected DragController dragger;
  
    /**
     * The delegate object that is responsible for the UI of the
     * <code>JSplitPane</code> that contains this divider.
     */
    protected BasicSplitPaneUI splitPaneUI;
  
!   /** The thickness of the divider in pixels. */
    protected int dividerSize;
  
!   /** A divider that is used for layout purposes. */
    protected Component hiddenDivider;
  
!   /** The JSplitPane containing this divider. */
    protected JSplitPane splitPane;
  
    /**
!    * The listener for handling mouse events from both the divider and the
!    * containing <code>JSplitPane</code>.
!    * 
!    * <p>
!    * The reason for also handling MouseEvents from the containing
!    * <code>JSplitPane</code> is that users should be able to start a drag
!    * gesture from inside the JSplitPane, but slightly outisde the divider.
!    * </p>
     */
    protected MouseHandler mouseHandler = new MouseHandler();
  
    /**
!    * The current orientation of the containing <code>JSplitPane</code>, which
!    * is either {@link javax.swing.JSplitPane#HORIZONTAL_SPLIT} or {@link
!    * javax.swing.JSplitPane#VERTICAL_SPLIT}.
     */
    protected int orientation;
  
    /**
!    * The button for showing and hiding the left (or top) component of the
!    * <code>JSplitPane</code>.
     */
    protected JButton leftButton;
  
    /**
!    * The button for showing and hiding the right (or bottom) component of the
!    * <code>JSplitPane</code>.
     */
    protected JButton rightButton;
  
    /**
!    * The border of this divider. Typically, this will be an instance of {@link
!    * javax.swing.plaf.basic.BasicBorders.SplitPaneDividerBorder}.
     *
     * @see #getBorder()
     * @see #setBorder(javax.swing.border.Border)
     */
    private Border border;
  
+   // This is not a pixel count.
+   // This int should be able to take 3 values.
+   // left (top), middle, right(bottom)
+   //    0          1          2
+ 
+   /**
+    * Keeps track of where the divider should be placed when using one touch
+    * expand buttons.
+    */
+   private transient int currentDividerLocation = 1;
+ 
+   /** DOCUMENT ME! */
+   private transient Border tmpBorder = new Border()
+     {
+       public Insets getBorderInsets(Component c)
+       {
+ 	return new Insets(2, 2, 2, 2);
+       }
+ 
+       public boolean isBorderOpaque()
+       {
+ 	return false;
+       }
+ 
+       public void paintBorder(Component c, Graphics g, int x, int y,
+                               int width, int height)
+       {
+ 	Color saved = g.getColor();
+ 	g.setColor(Color.BLACK);
+ 
+ 	g.drawRect(x + 2, y + 2, width - 4, height - 4);
+ 
+ 	g.setColor(saved);
+       }
+     };
  
    /**
     * Constructs a new divider.
     *
!    * @param ui the UI delegate of the enclosing <code>JSplitPane</code>.
     */
    public BasicSplitPaneDivider(BasicSplitPaneUI ui)
    {
+     setLayout(new DividerLayout());
      setBasicSplitPaneUI(ui);
+     setDividerSize(splitPane.getDividerSize());
+     setBorder(tmpBorder);
    }
  
    /**
!    * Sets the delegate object that is responsible for the UI of the {@link
!    * javax.swing.JSplitPane} containing this divider.
     *
!    * @param newUI the UI delegate, or <code>null</code> to release the
!    *        connection to the current delegate.
     */
    public void setBasicSplitPaneUI(BasicSplitPaneUI newUI)
    {
      /* Remove the connection to the existing JSplitPane. */
      if (splitPane != null)
!       {
! 	splitPane.removePropertyChangeListener(this);
! 	splitPane.removeMouseListener(mouseHandler);
! 	splitPane.removeMouseMotionListener(mouseHandler);
! 	removeMouseListener(mouseHandler);
! 	removeMouseMotionListener(mouseHandler);
! 	splitPane = null;
! 	hiddenDivider = null;
!       }
! 
      /* Establish the connection to the new JSplitPane. */
      splitPaneUI = newUI;
      if (splitPaneUI != null)
        splitPane = newUI.getSplitPane();
      if (splitPane != null)
!       {
! 	splitPane.addPropertyChangeListener(this);
! 	splitPane.addMouseListener(mouseHandler);
! 	splitPane.addMouseMotionListener(mouseHandler);
! 	addMouseListener(mouseHandler);
! 	addMouseMotionListener(mouseHandler);
! 	hiddenDivider = splitPaneUI.getNonContinuousLayoutDivider();
! 	orientation = splitPane.getOrientation();
! 	oneTouchExpandableChanged();
!       }
    }
  
    /**
!    * Returns the delegate object that is responsible for the UI of the {@link
!    * javax.swing.JSplitPane} containing this divider.
!    *
!    * @return The UI for the JSplitPane.
     */
    public BasicSplitPaneUI getBasicSplitPaneUI()
    {
      return splitPaneUI;
    }
  
    /**
     * Sets the thickness of the divider.
     *
*************** public class BasicSplitPaneDivider
*** 227,263 ****
      this.dividerSize = newSize;
    }
  
- 
    /**
     * Retrieves the thickness of the divider.
     */
    public int getDividerSize()
    {
      return dividerSize;
    }
!   
!   
    /**
     * Sets the border of this divider.
     *
     * @param border the new border. Typically, this will be an instance of
!    * {@link javax.swing.plaf.basic.BasicBorders.SplitPaneDividerBorder}.
     *
     * @since 1.3
     */
    public void setBorder(Border border)
    {
!     Border oldValue = this.border;
!     this.border = border;
!     firePropertyChange("border", oldValue, border);
    }
  
- 
    /**
     * Retrieves the border of this divider.
     *
!    * @return the current border, or <code>null</code> if no border
!    *         has been set.
     *
     * @since 1.3
     */
--- 257,296 ----
      this.dividerSize = newSize;
    }
  
    /**
     * Retrieves the thickness of the divider.
+    *
+    * @return The thickness of the divider.
     */
    public int getDividerSize()
    {
      return dividerSize;
    }
! 
    /**
     * Sets the border of this divider.
     *
     * @param border the new border. Typically, this will be an instance of
!    *        {@link
!    *        javax.swing.plaf.basic.BasicBorders.SplitPaneDividerBorder}.
     *
     * @since 1.3
     */
    public void setBorder(Border border)
    {
!     if (border != this.border)
!       {
! 	Border oldValue = this.border;
! 	this.border = border;
! 	firePropertyChange("border", oldValue, border);
!       }
    }
  
    /**
     * Retrieves the border of this divider.
     *
!    * @return the current border, or <code>null</code> if no border has been
!    *         set.
     *
     * @since 1.3
     */
*************** public class BasicSplitPaneDivider
*** 265,277 ****
    {
      return border;
    }
-   
  
    /**
!    * Retrieves the insets of the divider. If a border has been
!    * installed on the divider, the result of calling its
!    * <code>getBorderInsets</code> method is returned. Otherwise,
!    * the inherited implementation will be invoked.
     *
     * @see javax.swing.border.Border#getBorderInsets(java.awt.Component)
     */
--- 298,309 ----
    {
      return border;
    }
  
    /**
!    * Retrieves the insets of the divider. If a border has been installed on
!    * the divider, the result of calling its <code>getBorderInsets</code>
!    * method is returned. Otherwise, the inherited implementation will be
!    * invoked.
     *
     * @see javax.swing.border.Border#getBorderInsets(java.awt.Component)
     */
*************** public class BasicSplitPaneDivider
*** 282,323 ****
      else
        return super.getInsets();
    }
!   
!   
    /**
     * Returns the preferred size of this divider, which is
!    * <code>dividerSize</code> by <code>dividerSize</code>
!    * pixels.
     */
    public Dimension getPreferredSize()
    {
!     return new Dimension(dividerSize, dividerSize);
    }
  
- 
    /**
     * Returns the minimal size of this divider, which is
!    * <code>dividerSize</code> by <code>dividerSize</code>
!    * pixels.
     */
    public Dimension getMinimumSize()
    {
      return getPreferredSize();
    }
!   
!   
    /**
!    * Processes events from the <code>JSplitPane</code> that contains
!    * this divider.
     */
    public void propertyChange(PropertyChangeEvent e)
    {
!     // FIXME: Not yet implemented.
    }
  
- 
    /**
     * Paints the divider by painting its border.
     */
    public void paint(Graphics g)
    {
--- 314,369 ----
      else
        return super.getInsets();
    }
! 
    /**
     * Returns the preferred size of this divider, which is
!    * <code>dividerSize</code> by <code>dividerSize</code> pixels.
!    *
!    * @return The preferred size of the divider.
     */
    public Dimension getPreferredSize()
    {
!     return getLayout().preferredLayoutSize(this);
    }
  
    /**
     * Returns the minimal size of this divider, which is
!    * <code>dividerSize</code> by <code>dividerSize</code> pixels.
!    *
!    * @return The minimal size of the divider.
     */
    public Dimension getMinimumSize()
    {
      return getPreferredSize();
    }
! 
    /**
!    * Processes events from the <code>JSplitPane</code> that contains this
!    * divider.
!    *
!    * @param e The PropertyChangeEvent.
     */
    public void propertyChange(PropertyChangeEvent e)
    {
!     if (e.getPropertyName().equals(JSplitPane.ONE_TOUCH_EXPANDABLE_PROPERTY))
!       oneTouchExpandableChanged();
!     else if (e.getPropertyName().equals(JSplitPane.ORIENTATION_PROPERTY))
!       {
! 	orientation = splitPane.getOrientation();
! 	if (splitPane.isOneTouchExpandable())
! 	  {
! 	    layout();
! 	    repaint();
! 	  }
!       }
!     else if (e.getPropertyName().equals(JSplitPane.DIVIDER_SIZE_PROPERTY))
!       dividerSize = splitPane.getDividerSize();
    }
  
    /**
     * Paints the divider by painting its border.
+    *
+    * @param g The Graphics Object to paint with.
     */
    public void paint(Graphics g)
    {
*************** public class BasicSplitPaneDivider
*** 325,374 ****
  
      super.paint(g);
      if (border != null)
!     {
!       dividerSize = getSize();
!       border.paintBorder(this, g, 0, 0, dividerSize.width, dividerSize.height);
!       //System.out.println(dividerSize);
!       //g.setColor(java.awt.Color.white);
!       //g.drawRect(0, 0, 5, 5);
!     }
    }
  
- 
    /**
!    * Reacts to changes of the <code>oneToughExpandable</code>
!    * property of the containing <code>JSplitPane</code>.
     */
    protected void oneTouchExpandableChanged()
    {
!     // FIXME: Not yet implemented.
!   }
  
  
    /**
!    * Creates a button for showing and hiding the left (or top)
!    * part of a <code>JSplitPane</code>.
     */
    protected JButton createLeftOneTouchButton()
    {
!     return new OneTouchButton(/* left */ true);
!   }
  
  
    /**
!    * Creates a button for showing and hiding the right (or bottom)
!    * part of a <code>JSplitPane</code>.
     */
    protected JButton createRightOneTouchButton()
    {
!     return new OneTouchButton(/* left */ false);
    }
-   
  
    /**
     * Prepares the divider for dragging by calling the
!    * <code>startDragging</code> method of the UI delegate of the
!    * enclosing <code>JSplitPane</code>.
     *
     * @see BasicSplitPaneUI#startDragging()
     */
--- 371,455 ----
  
      super.paint(g);
      if (border != null)
!       {
! 	dividerSize = getSize();
! 	border.paintBorder(this, g, 0, 0, dividerSize.width, dividerSize.height);
!       }
    }
  
    /**
!    * Reacts to changes of the <code>oneToughExpandable</code> property of the
!    * containing <code>JSplitPane</code>.
     */
    protected void oneTouchExpandableChanged()
    {
!     if (splitPane.isOneTouchExpandable())
!       {
! 	leftButton = createLeftOneTouchButton();
! 	rightButton = createRightOneTouchButton();
! 	add(leftButton);
! 	add(rightButton);
  
+ 	leftButton.addMouseListener(mouseHandler);
+ 	rightButton.addMouseListener(mouseHandler);
+ 
+ 	// Set it to 1.
+ 	currentDividerLocation = 1;
+       }
+     else
+       {
+ 	if (leftButton != null && rightButton != null)
+ 	  {
+ 	    leftButton.removeMouseListener(mouseHandler);
+ 	    rightButton.removeMouseListener(mouseHandler);
+ 
+ 	    remove(leftButton);
+ 	    remove(rightButton);
+ 	    leftButton = null;
+ 	    rightButton = null;
+ 	  }
+       }
+     layout();
+     repaint();
+   }
  
    /**
!    * Creates a button for showing and hiding the left (or top) part of a
!    * <code>JSplitPane</code>.
!    *
!    * @return The left one touch button.
     */
    protected JButton createLeftOneTouchButton()
    {
!     int dir = SwingConstants.WEST;
!     if (orientation == JSplitPane.VERTICAL_SPLIT)
!       dir = SwingConstants.NORTH;
!     JButton button = new BasicArrowButton(dir);
!     button.setBorder(null);
  
+     return button;
+   }
  
    /**
!    * Creates a button for showing and hiding the right (or bottom) part of a
!    * <code>JSplitPane</code>.
!    *
!    * @return The right one touch button.
     */
    protected JButton createRightOneTouchButton()
    {
!     int dir = SwingConstants.EAST;
!     if (orientation == JSplitPane.VERTICAL_SPLIT)
!       dir = SwingConstants.SOUTH;
!     JButton button = new BasicArrowButton(dir);
!     button.setBorder(null);
!     return button;
    }
  
    /**
     * Prepares the divider for dragging by calling the
!    * <code>startDragging</code> method of the UI delegate of the enclosing
!    * <code>JSplitPane</code>.
     *
     * @see BasicSplitPaneUI#startDragging()
     */
*************** public class BasicSplitPaneDivider
*** 378,392 ****
        splitPaneUI.startDragging();
    }
  
- 
    /**
     * Drags the divider to a given location by calling the
!    * <code>dragDividerTo</code> method of the UI delegate of the
!    * enclosing <code>JSplitPane</code>.
     *
     * @param location the new location of the divider.
     *
!    * @see BasicSplitPaneUI#dragDividerTo(int location) 
     */
    protected void dragDividerTo(int location)
    {
--- 459,472 ----
        splitPaneUI.startDragging();
    }
  
    /**
     * Drags the divider to a given location by calling the
!    * <code>dragDividerTo</code> method of the UI delegate of the enclosing
!    * <code>JSplitPane</code>.
     *
     * @param location the new location of the divider.
     *
!    * @see BasicSplitPaneUI#dragDividerTo(int location)
     */
    protected void dragDividerTo(int location)
    {
*************** public class BasicSplitPaneDivider
*** 394,404 ****
        splitPaneUI.dragDividerTo(location);
    }
  
- 
    /**
!    * Finishes a dragging gesture by calling the
!    * <code>finishDraggingTo</code> method of the UI delegate of the
!    * enclosing <code>JSplitPane</code>.
     *
     * @param location the new, final location of the divider.
     *
--- 474,482 ----
        splitPaneUI.dragDividerTo(location);
    }
  
    /**
!    * Finishes a dragging gesture by calling the <code>finishDraggingTo</code>
!    * method of the UI delegate of the enclosing <code>JSplitPane</code>.
     *
     * @param location the new, final location of the divider.
     *
*************** public class BasicSplitPaneDivider
*** 410,534 ****
        splitPaneUI.finishDraggingTo(location);
    }
  
- 
    /**
!    * The listener for handling mouse events from both the divider
!    * and the containing <code>JSplitPane</code>.
     *
!    * <p>The reason for also handling MouseEvents from the containing
!    * <code>JSplitPane</code> is that users should be able to start
!    * a drag gesture from inside the JSplitPane, but slightly outisde
!    * the divider. 
     *
!    * @author Sascha Brawer (brawer@dandelis.ch)
     */
!   protected class MouseHandler
!     extends MouseAdapter
      implements MouseMotionListener
    {
!     
      public void mousePressed(MouseEvent e)
      {
!       // FIXME: Not yet implemented.
      }
  
! 
      public void mouseReleased(MouseEvent e)
      {
!       // FIXME: Not yet implemented.
      }
  
- 
      /**
!      * Repeatedly invoked when the user is dragging the mouse cursor
!      * while having pressed a mouse button.
       */
      public void mouseDragged(MouseEvent e)
      {
!       // FIXME: Not yet implemented.
      }
  
- 
      /**
!      * Repeatedly invoked when the user is dragging the mouse cursor
!      * without having pressed a mouse button.
       */
      public void mouseMoved(MouseEvent e)
      {
!       // FIXME: Not yet implemented.
      }
    }
  
- 
    /**
!    * A small button for showing and hiding parts of a
!    * <code>JSplitPane</code> with a single mouse click.
     *
!    * @author Sascha Brawer (brawer@dandelis.ch)
     */
!   private static class OneTouchButton
!     extends JButton
    {
!     OneTouchButton(boolean left)
      {
!       // FIXME: Set various properties of the button.
!       // Make  sure it looks identical to the small
!       // buttons of the Sun reference implementation.
!       // The size should also be the same.
!       if (left)
!         setText("<");
!       else
!         setText(">");
  
!       Dimension butSize = new Dimension(ONE_TOUCH_SIZE, ONE_TOUCH_SIZE);
!       setMinimumSize(butSize);
!       setMaximumSize(butSize);
!       setPreferredSize(butSize);
  
!       setBorderPainted(false);
      }
-   }
  
  
    /**
!    * Performs the tasks associated with an ongoing drag
!    * operation.
!    *
!    * @author Sascha Brawer (brawer@dandelis.ch)
     */
!   protected class DragController
    {
!     // FIXME: Not yet implemented.
!     protected DragController(MouseEvent e)
      {
      }
  
!     protected boolean isValid()
      {
!       // FIXME: Not yet implemented.
!       return true;
      }
  
      protected int positionForMouseEvent(MouseEvent e)
      {
!       return 0;
      }
  
!     protected int getNeededLocation(int x, int y)
      {
!       return 0;
      }
  
!     protected void continueDrag(int newX, int newY)
      {
      }
  
!     protected void completeDrag(int x, int y)
      {
      }
  
!     protected void completeDrag(MouseEvent e)
      {
      }
    }
  }
--- 488,910 ----
        splitPaneUI.finishDraggingTo(location);
    }
  
    /**
!    * This helper method moves the divider to one of the  three locations when
!    * using one touch expand buttons. Location 0 is the left (or top) most
!    * location. Location 1 is the middle. Location 2 is the right (or bottom)
!    * most location.
     *
!    * @param locationIndex The location to move to.
!    */
!   private void moveDividerTo(int locationIndex)
!   {
!     Insets insets = splitPane.getInsets();
!     switch (locationIndex)
!       {
!       case 1:
! 	splitPane.setDividerLocation(splitPane.getLastDividerLocation());
! 	break;
!       case 0:
! 	int top = (orientation == JSplitPane.HORIZONTAL_SPLIT) ? insets.left
! 	                                                       : insets.top;
! 	splitPane.setDividerLocation(top);
! 	break;
!       case 2:
! 	int bottom;
! 	if (orientation == JSplitPane.HORIZONTAL_SPLIT)
! 	  bottom = splitPane.getBounds().width - insets.right - dividerSize;
! 	else
! 	  bottom = splitPane.getBounds().height - insets.bottom - dividerSize;
! 	splitPane.setDividerLocation(bottom);
! 	break;
!       }
!   }
! 
!   /**
!    * The listener for handling mouse events from both the divider and the
!    * containing <code>JSplitPane</code>.
!    * 
!    * <p>
!    * The reason for also handling MouseEvents from the containing
!    * <code>JSplitPane</code> is that users should be able to start a drag
!    * gesture from inside the JSplitPane, but slightly outisde the divider.
!    * </p>
     *
!    * @author Sascha Brawer (brawer_AT_dandelis.ch)
     */
!   protected class MouseHandler extends MouseAdapter
      implements MouseMotionListener
    {
!     /** Keeps track of whether a drag is occurring. */
!     private transient boolean isDragging;
! 
!     /**
!      * This method is called when the mouse is pressed.
!      *
!      * @param e The MouseEvent.
!      */
      public void mousePressed(MouseEvent e)
      {
!       if (splitPane.isOneTouchExpandable())
!         {
! 	  if (e.getSource() == leftButton)
! 	    {
! 	      currentDividerLocation--;
! 	      if (currentDividerLocation < 0)
! 		currentDividerLocation = 0;
! 	      moveDividerTo(currentDividerLocation);
! 	      return;
! 	    }
! 	  else if (e.getSource() == rightButton)
! 	    {
! 	      currentDividerLocation++;
! 	      if (currentDividerLocation > 2)
! 		currentDividerLocation = 2;
! 	      moveDividerTo(currentDividerLocation);
! 	      return;
! 	    }
!         }
!       isDragging = true;
!       currentDividerLocation = 1;
!       if (orientation == JSplitPane.HORIZONTAL_SPLIT)
! 	dragger = new DragController(e);
!       else
! 	dragger = new VerticalDragController(e);
!       prepareForDragging();
      }
  
!     /**
!      * This method is called when the mouse is released.
!      *
!      * @param e The MouseEvent.
!      */
      public void mouseReleased(MouseEvent e)
      {
!       if (isDragging)
! 	dragger.completeDrag(e);
!       isDragging = false;
      }
  
      /**
!      * Repeatedly invoked when the user is dragging the mouse cursor while
!      * having pressed a mouse button.
!      *
!      * @param e The MouseEvent.
       */
      public void mouseDragged(MouseEvent e)
      {
!       if (dragger != null)
! 	dragger.continueDrag(e);
      }
  
      /**
!      * Repeatedly invoked when the user is dragging the mouse cursor without
!      * having pressed a mouse button.
!      *
!      * @param e The MouseEvent.
       */
      public void mouseMoved(MouseEvent e)
      {
!       // Do nothing.
      }
    }
  
    /**
!    * Performs the tasks associated with an ongoing drag operation.
     *
!    * @author Sascha Brawer (brawer_AT_dandelis.ch)
     */
!   protected class DragController
    {
!     /**
!      * The difference between where the mouse is clicked and the  initial
!      * divider location.
!      */
!     transient int offset;
! 
!     /**
!      * Creates a new DragController object.
!      *
!      * @param e The MouseEvent to initialize with.
!      */
!     protected DragController(MouseEvent e)
      {
!       offset = e.getX();
!     }
  
!     /**
!      * This method returns true if the divider can move.
!      *
!      * @return True if dragging is allowed.
!      */
!     protected boolean isValid()
!     {
!       // Views can always be resized?
!       return true;
!     }
  
!     /**
!      * Returns a position for the divider given the MouseEvent.
!      *
!      * @param e MouseEvent.
!      *
!      * @return The position for the divider to move to.
!      */
!     protected int positionForMouseEvent(MouseEvent e)
!     {
!       return e.getX() + getX() - offset;
!     }
! 
!     /**
!      * This method returns one of the two paramters for the orientation. In
!      * this case, it returns x.
!      *
!      * @param x The x coordinate.
!      * @param y The y coordinate.
!      *
!      * @return The x coordinate.
!      */
!     protected int getNeededLocation(int x, int y)
!     {
!       return x;
!     }
! 
!     /**
!      * This method is called to pass on the drag information to the UI through
!      * dragDividerTo.
!      *
!      * @param newX The x coordinate of the MouseEvent.
!      * @param newY The y coordinate of the MouseEvent.
!      */
!     protected void continueDrag(int newX, int newY)
!     {
!       if (isValid())
! 	dragDividerTo(adjust(newX, newY));
!     }
! 
!     /**
!      * This method is called to pass on the drag information  to the UI
!      * through dragDividerTo.
!      *
!      * @param e The MouseEvent.
!      */
!     protected void continueDrag(MouseEvent e)
!     {
!       if (isValid())
! 	dragDividerTo(positionForMouseEvent(e));
!     }
! 
!     /**
!      * This method is called to finish the drag session  by calling
!      * finishDraggingTo.
!      *
!      * @param x The x coordinate of the MouseEvent.
!      * @param y The y coordinate of the MouseEvent.
!      */
!     protected void completeDrag(int x, int y)
!     {
!       finishDraggingTo(adjust(x, y));
      }
  
+     /**
+      * This method is called to finish the drag session  by calling
+      * finishDraggingTo.
+      *
+      * @param e The MouseEvent.
+      */
+     protected void completeDrag(MouseEvent e)
+     {
+       finishDraggingTo(positionForMouseEvent(e));
+     }
+ 
+     /**
+      * This is a helper method that includes the offset in the needed
+      * location.
+      *
+      * @param x The x coordinate of the MouseEvent.
+      * @param y The y coordinate of the MouseEvent.
+      *
+      * @return The needed location adjusted by the offsets.
+      */
+     int adjust(int x, int y)
+     {
+       return getNeededLocation(x, y) + getX() - offset;
+     }
+   }
  
    /**
!    * This is a helper class that controls dragging when  the orientation is
!    * VERTICAL_SPLIT.
     */
!   protected class VerticalDragController extends DragController
    {
!     /**
!      * Creates a new VerticalDragController object.
!      *
!      * @param e The MouseEvent to initialize with.
!      */
!     protected VerticalDragController(MouseEvent e)
      {
+       super(e);
+       offset = e.getY();
      }
  
!     /**
!      * This method returns one of the two parameters given the orientation. In
!      * this case, it returns y.
!      *
!      * @param x The x coordinate of the MouseEvent.
!      * @param y The y coordinate of the MouseEvent.
!      *
!      * @return The y coordinate.
!      */
!     protected int getNeededLocation(int x, int y)
      {
!       return y;
      }
  
+     /**
+      * This method returns the new location of the divider given a MouseEvent.
+      *
+      * @param e The MouseEvent.
+      *
+      * @return The new location of the divider.
+      */
      protected int positionForMouseEvent(MouseEvent e)
      {
!       return e.getY() + getY() - offset;
      }
  
!     /**
!      * This is a helper method that includes the offset in the needed
!      * location.
!      *
!      * @param x The x coordinate of the MouseEvent.
!      * @param y The y coordinate of the MouseEvent.
!      *
!      * @return The needed location adjusted by the offsets.
!      */
!     int adjust(int x, int y)
      {
!       return getNeededLocation(x, y) + getY() - offset;
      }
+   }
  
!   /**
!    * This helper class acts as the Layout Manager for the divider.
!    */
!   protected class DividerLayout implements LayoutManager
!   {
!     /**
!      * Creates a new DividerLayout object.
!      */
!     protected DividerLayout()
      {
      }
  
!     /**
!      * This method is called when a Component is added.
!      *
!      * @param string The constraints string.
!      * @param c The Component to add.
!      */
!     public void addLayoutComponent(String string, Component c)
      {
+       // Do nothing.
      }
  
!     /**
!      * This method is called to lay out the container.
!      *
!      * @param c The container to lay out.
!      */
!     public void layoutContainer(Container c)
!     {
!       if (splitPane.isOneTouchExpandable())
!         {
! 	  changeButtonOrientation();
! 	  positionButtons();
!         }
!     }
! 
!     /**
!      * This method returns the minimum layout size.
!      *
!      * @param c The container to calculate for.
!      *
!      * @return The minimum layout size.
!      */
!     public Dimension minimumLayoutSize(Container c)
!     {
!       return preferredLayoutSize(c);
!     }
! 
!     /**
!      * This method returns the preferred layout size.
!      *
!      * @param c The container to calculate for.
!      *
!      * @return The preferred layout size.
!      */
!     public Dimension preferredLayoutSize(Container c)
!     {
!       return new Dimension(dividerSize, dividerSize);
!     }
! 
!     /**
!      * This method is called when a component is removed.
!      *
!      * @param c The component to remove.
!      */
!     public void removeLayoutComponent(Component c)
!     {
!       // Do nothing.
!     }
! 
!     /**
!      * This method changes the button orientation when the orientation of the
!      * SplitPane changes.
!      */
!     private void changeButtonOrientation()
!     {
!       if (orientation == JSplitPane.HORIZONTAL_SPLIT)
!         {
! 	  ((BasicArrowButton) rightButton).setDirection(SwingConstants.EAST);
! 	  ((BasicArrowButton) leftButton).setDirection(SwingConstants.WEST);
!         }
!       else
!         {
! 	  ((BasicArrowButton) rightButton).setDirection(SwingConstants.SOUTH);
! 	  ((BasicArrowButton) leftButton).setDirection(SwingConstants.NORTH);
!         }
!     }
! 
!     /**
!      * This method sizes and positions the buttons.
!      */
!     private void positionButtons()
      {
+       int w = 0;
+       int h = 0;
+       if (orientation == JSplitPane.HORIZONTAL_SPLIT)
+         {
+ 	  rightButton.setLocation(ONE_TOUCH_OFFSET, ONE_TOUCH_OFFSET);
+ 	  leftButton.setLocation(ONE_TOUCH_OFFSET,
+ 	                         ONE_TOUCH_OFFSET + 2 * ONE_TOUCH_SIZE);
+ 	  w = dividerSize - 2 * ONE_TOUCH_OFFSET;
+ 	  h = 2 * ONE_TOUCH_SIZE;
+         }
+       else
+         {
+ 	  leftButton.setLocation(ONE_TOUCH_OFFSET, ONE_TOUCH_OFFSET);
+ 	  rightButton.setLocation(ONE_TOUCH_OFFSET + 2 * ONE_TOUCH_SIZE,
+ 	                          ONE_TOUCH_OFFSET);
+ 	  h = dividerSize - 2 * ONE_TOUCH_OFFSET;
+ 	  w = 2 * ONE_TOUCH_SIZE;
+         }
+       Dimension dims = new Dimension(w, h);
+       leftButton.setSize(dims);
+       rightButton.setSize(dims);
      }
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSplitPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSplitPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicSplitPaneUI.java	Tue Jun 24 09:48:42 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicSplitPaneUI.java	Tue Nov 30 23:59:06 2004
***************
*** 1,5 ****
! /* BasicSplitPaneUI.java
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BasicSplitPaneUI.java --
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,309 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.plaf.basic;
  
  import java.awt.Component;
  import java.awt.Dimension;
  import java.awt.Graphics;
  import java.awt.Insets;
  import java.awt.event.ActionListener;
  import java.awt.event.FocusListener;
  import java.beans.PropertyChangeListener;
  import javax.swing.JComponent;
  import javax.swing.JSplitPane;
  import javax.swing.KeyStroke;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.SplitPaneUI;
  
  /**
!  * FIXME: Stubbed to allow compiling other classes,
!  * no real implementation.
   */
! public class BasicSplitPaneUI
!   extends SplitPaneUI
  {
!   protected static final String NON_CONTINUOUS_DIVIDER
!     = "nonContinuousDivider";
  
    protected static int KEYBOARD_DIVIDER_MOVE_OFFSET;
  
!   protected JSplitPane splitPane;
    protected BasicSplitPaneDivider divider;
    protected PropertyChangeListener propertyChangeListener;
    protected FocusListener focusListener;
!   protected int dividerSize;
!   protected Component nonContinuousLayoutDivider;
!   protected boolean draggingHW;
!   protected int beginDragDividerLocation;
!   protected KeyStroke upKey;
!   protected KeyStroke downKey;
!   protected KeyStroke leftKey;
!   protected KeyStroke rightKey;
!   protected KeyStroke homeKey;
!   protected KeyStroke endKey;
!   protected KeyStroke dividerResizeToggleKey;
!   protected ActionListener keyboardUpLeftListener;
    protected ActionListener keyboardDownRightListener;
!   protected ActionListener keyboardHomeListener;
    protected ActionListener keyboardEndListener;
    protected ActionListener keyboardResizeToggleListener;
  
!   public static ComponentUI createUI(JComponent c)
!   {
!     BasicSplitPaneUI newUI;
  
!     newUI = new BasicSplitPaneUI();
!     newUI.installUI(c);
!     return newUI;
!   }
  
    public BasicSplitPaneUI()
    {
-     propertyChangeListener = createPropertyChangeListener();
-     focusListener = createFocusListener();
    }
  
!   public void installUI(JComponent c)
    {
    }
  
!   protected void installDefaults()
    {
    }
  
!   protected void installListeners()
    {
    }
  
!   protected void installKeyboardListeners()
    {
    }
  
!   protected void installKeyboardActions()
    {
    }
  
!   public void uninstallUI(JComponent c)
    {
    }
  
!   protected void uninstallDefaults()
    {
    }
  
!   protected void uninstallListeners()
    {
    }
  
    protected void uninstallKeyboardActions()
    {
    }
  
    protected PropertyChangeListener createPropertyChangeListener()
    {
!     return null;
    }
  
    protected FocusListener createFocusListener()
    {
!     return null;
    }
  
    protected ActionListener createKeyboardUpLeftListener()
    {
!     return null;
    }
  
    protected ActionListener createKeyboardDownRightListener()
    {
!     return null;
    }
  
    protected ActionListener createKeyboardHomeListener()
    {
!     return null;
    }
  
    protected ActionListener createKeyboardEndListener()
    {
!     return null;
    }
  
    protected ActionListener createKeyboardResizeToggleListener()
    {
!     return null;
    }
  
    public int getOrientation()
    {
      return splitPane.getOrientation();
    }
  
    public void setOrientation(int orientation)
    {
    }
  
! 
    public boolean isContinuousLayout()
    {
!     return false;
    }
  
    public void setContinuousLayout(boolean b)
    {
    }
  
    public int getLastDragLocation()
    {
!     return 0;
    }
  
    public void setLastDragLocation(int l)
    {
    }
  
! 
    public BasicSplitPaneDivider getDivider()
    {
      return divider;
    }
  
! 
    protected Component createDefaultNonContinuousLayoutDivider()
    {
!     return null;
    }
  
    protected void setNonContinuousLayoutDivider(Component newDivider)
    {
!     setNonContinuousLayoutDivider(newDivider, true /* false? */);
    }
  
    protected void setNonContinuousLayoutDivider(Component newDivider,
                                                 boolean rememberSizes)
    {
      nonContinuousLayoutDivider = newDivider;
    }
  
    public Component getNonContinuousLayoutDivider()
    {
      return nonContinuousLayoutDivider;
    }
  
    public JSplitPane getSplitPane()
    {
      return splitPane;
    }
  
    public BasicSplitPaneDivider createDefaultDivider()
    {
!     return null;
    }
  
    public void resetToPreferredSizes(JSplitPane jc)
    {
    }
  
    public void setDividerLocation(JSplitPane jc, int location)
    {
    }
  
    public int getDividerLocation(JSplitPane jc)
    {
!     return 0;
    }
  
    public int getMinimumDividerLocation(JSplitPane jc)
    {
!     return 0;
    }
  
    public int getMaximumDividerLocation(JSplitPane jc)
    {
!     return 0;
    }
  
    public void finishedPaintingChildren(JSplitPane jc, Graphics g)
    {
    }
  
    public void paint(Graphics g, JComponent jc)
    {
    }
  
    public Dimension getPreferredSize(JComponent jc)
    {
!     return null;
    }
  
    public Dimension getMinimumSize(JComponent jc)
    {
!     return null;
    }
  
    public Dimension getMaximumSize(JComponent jc)
    {
!     return null;
    }
  
    public Insets getInsets(JComponent jc)
    {
!     return new Insets(0, 0, 0, 0);
    }
  
    protected void resetLayoutManager()
    {
    }
  
    protected void startDragging()
    {
    }
  
    protected void dragDividerTo(int location)
    {
    }
  
    protected void finishDraggingTo(int location)
    {
    }
  
    protected int getDividerBorderSize()
    {
!     return 0;
    }
  }
--- 35,1521 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.plaf.basic;
  
+ import java.awt.Canvas;
+ import java.awt.Color;
  import java.awt.Component;
+ import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.Graphics;
  import java.awt.Insets;
+ import java.awt.LayoutManager2;
+ import java.awt.Point;
+ import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
+ import java.awt.event.FocusAdapter;
+ import java.awt.event.FocusEvent;
  import java.awt.event.FocusListener;
+ import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
+ 
  import javax.swing.JComponent;
  import javax.swing.JSplitPane;
  import javax.swing.KeyStroke;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.SplitPaneUI;
  
  /**
!  * This is the Basic Look and Feel implementation of the SplitPaneUI  class.
   */
! public class BasicSplitPaneUI extends SplitPaneUI
  {
!   /**
!    * This Layout Manager controls the position and size of the components when
!    * the JSplitPane's orientation is HORIZONTAL_SPLIT.
!    */
!   protected class BasicHorizontalLayoutManager implements LayoutManager2
!   {
!     // 3 components at a time.
!     // LEFT/TOP = 0
!     // RIGHT/BOTTOM = 1
!     // DIVIDER = 2    
! 
!     /**
!      * This array contains the components in the JSplitPane. The  left/top
!      * component is at index 0, the right/bottom is at 1, and the divider is
!      * at 2.
!      */
!     protected Component[] components = new Component[3];
! 
!     // These are the _current_ widths of the associated component.
! 
!     /**
!      * This array contains the current width (for HORIZONTAL_SPLIT) or height
!      * (for VERTICAL_SPLIT) of the components. The indices are the same as
!      * for components.
!      */
!     protected int[] sizes = new int[3];
! 
!     /**
!      * This method adds the component given to the JSplitPane. The position of
!      * the component is given by the constraints object.
!      *
!      * @param comp The Component to add.
!      * @param constraints The constraints that bind the object.
!      */
!     public void addLayoutComponent(Component comp, Object constraints)
!     {
!       addLayoutComponent((String) constraints, comp);
!     }
! 
!     /**
!      * This method is called to add a Component to the JSplitPane. The
!      * placement string determines where the Component will be placed. The
!      * string should be one of LEFT, RIGHT, TOP, BOTTOM or null (signals that
!      * the component is the divider).
!      *
!      * @param place The placement of the Component.
!      * @param component The Component to add.
!      *
!      * @throws IllegalArgumentException DOCUMENT ME!
!      */
!     public void addLayoutComponent(String place, Component component)
!     {
!       int i = 0;
!       if (place == null)
! 	i = 2;
!       else if (place.equals(JSplitPane.TOP) || place.equals(JSplitPane.LEFT))
! 	i = 0;
!       else if (place.equals(JSplitPane.BOTTOM)
!                || place.equals(JSplitPane.RIGHT))
! 	i = 1;
!       else
! 	throw new IllegalArgumentException("Illegal placement in JSplitPane");
!       components[i] = component;
!       resetSizeAt(i);
!       splitPane.revalidate();
!       splitPane.repaint();
!     }
! 
!     /**
!      * This method returns the width of the JSplitPane minus the insets.
!      *
!      * @param containerSize The Dimensions of the JSplitPane.
!      * @param insets The Insets of the JSplitPane.
!      *
!      * @return The width of the JSplitPane minus the insets.
!      */
!     protected int getAvailableSize(Dimension containerSize, Insets insets)
!     {
!       return containerSize.width - insets.left - insets.right;
!     }
! 
!     /**
!      * This method returns the given insets left value. If the  given inset is
!      * null, then 0 is returned.
!      *
!      * @param insets The Insets to use with the JSplitPane.
!      *
!      * @return The inset's left value.
!      */
!     protected int getInitialLocation(Insets insets)
!     {
!       if (insets != null)
! 	return insets.left;
!       return 0;
!     }
! 
!     /**
!      * This specifies how a component is aligned with respect to  other
!      * components in the x fdirection.
!      *
!      * @param target The container.
!      *
!      * @return The component's alignment.
!      */
!     public float getLayoutAlignmentX(Container target)
!     {
!       return target.getAlignmentX();
!     }
! 
!     /**
!      * This specifies how a component is aligned with respect to  other
!      * components in the y direction.
!      *
!      * @param target The container.
!      *
!      * @return The component's alignment.
!      */
!     public float getLayoutAlignmentY(Container target)
!     {
!       return target.getAlignmentY();
!     }
! 
!     /**
!      * This method returns the preferred width of the component.
!      *
!      * @param c The component to measure.
!      *
!      * @return The preferred width of the component.
!      */
!     protected int getPreferredSizeOfComponent(Component c)
!     {
!       Dimension dims = c.getPreferredSize();
!       if (dims != null)
! 	return dims.width;
!       return 0;
!     }
! 
!     /**
!      * This method returns the current width of the component.
!      *
!      * @param c The component to measure.
!      *
!      * @return The width of the component.
!      */
!     protected int getSizeOfComponent(Component c)
!     {
!       return c.getWidth();
!     }
! 
!     /**
!      * This method returns the sizes array.
!      *
!      * @return The sizes array.
!      */
!     protected int[] getSizes()
!     {
!       return sizes;
!     }
! 
!     /**
!      * This method invalidates the layout. It does nothing.
!      *
!      * @param c The container to invalidate.
!      */
!     public void invalidateLayout(Container c)
!     {
!       // DO NOTHING
!     }
! 
!     /**
!      * This method lays out the components in the container.
!      *
!      * @param container The container to lay out.
!      */
!     public void layoutContainer(Container container)
!     {
!       if (container instanceof JSplitPane)
!         {
! 	  JSplitPane split = (JSplitPane) container;
! 	  distributeExtraSpace();
! 	  Insets insets = split.getInsets();
! 	  int width = getInitialLocation(insets);
! 	  Dimension dims = split.getSize();
! 	  for (int i = 0; i < components.length; i += 2)
! 	    {
! 	      if (components[i] == null)
! 		continue;
! 	      setComponentToSize(components[i], sizes[i], width, insets, dims);
! 	      width += sizes[i];
! 	    }
! 	  if (components[1] != null)
! 	    {
! 	      setComponentToSize(components[1], sizes[1], width, insets, dims);
! 	      width += sizes[1];
! 	    }
!         }
!     }
! 
!     /**
!      * This method returns the maximum size for the container given the
!      * components. It returns a new Dimension object that has width and
!      * height equal to Integer.MAX_VALUE.
!      *
!      * @param target The container to measure.
!      *
!      * @return The maximum size.
!      */
!     public Dimension maximumLayoutSize(Container target)
!     {
!       return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
!     }
! 
!     /**
!      * This method returns the container's minimum size. The  minimum width is
!      * the sum of all the component's minimum widths. The minimum height is
!      * the maximum of  all the components' minimum heights.
!      *
!      * @param target The container to measure.
!      *
!      * @return The minimum size.
!      */
!     public Dimension minimumLayoutSize(Container target)
!     {
!       if (target instanceof JSplitPane)
!         {
! 	  JSplitPane split = (JSplitPane) target;
! 	  Insets insets = target.getInsets();
! 
! 	  int height = 0;
! 	  int width = 0;
! 	  for (int i = 0; i < components.length; i++)
! 	    {
! 	      if (components[i] == null)
! 		continue;
! 	      Dimension dims = components[i].getMinimumSize();
! 	      if (dims != null)
! 	        {
! 		  width += dims.width;
! 		  height = Math.max(height, dims.height);
! 	        }
! 	    }
! 	  return new Dimension(width, height);
!         }
!       return null;
!     }
! 
!     /**
!      * This method returns the container's preferred size. The preferred width
!      * is the sum of all the component's preferred widths. The preferred
!      * height is the maximum of all the components' preferred heights.
!      *
!      * @param target The container to measure.
!      *
!      * @return The preferred size.
!      */
!     public Dimension preferredLayoutSize(Container target)
!     {
!       if (target instanceof JSplitPane)
!         {
! 	  JSplitPane split = (JSplitPane) target;
! 	  Insets insets = target.getInsets();
! 
! 	  int height = 0;
! 	  int width = 0;
! 	  for (int i = 0; i < components.length; i++)
! 	    {
! 	      if (components[i] == null)
! 		continue;
! 	      Dimension dims = components[i].getPreferredSize();
! 	      if (dims != null)
! 	        {
! 		  width += dims.width;
! 		  if (! (components[i] instanceof BasicSplitPaneDivider))
! 		    height = Math.max(height, dims.height);
! 	        }
! 	    }
! 	  return new Dimension(500, 500); //width, height);	
!         }
!       return null;
!     }
! 
!     /**
!      * This method removes the component from the layout.
!      *
!      * @param component The component to remove from the layout.
!      */
!     public void removeLayoutComponent(Component component)
!     {
!       for (int i = 0; i < components.length; i++)
!         {
! 	  if (component == components[i])
! 	    {
! 	      components[i] = null;
! 	      sizes[i] = 0;
! 	    }
!         }
!     }
! 
!     /**
!      * This method resets the size of Component to the preferred size.
!      *
!      * @param index The index of the component to reset.
!      */
!     protected void resetSizeAt(int index)
!     {
!       if (components[index] != null)
! 	sizes[index] = getPreferredSizeOfComponent(components[index]);
!     }
! 
!     /**
!      * This method resets the sizes of all the components.
!      */
!     public void resetToPreferredSizes()
!     {
!       for (int i = 0; i < components.length; i++)
! 	resetSizeAt(i);
!     }
! 
!     /**
!      * This methods sets the bounds of the given component. The width is the
!      * size. The height is the container size minus the  top and bottom
!      * inset. The x coordinate is the location given.  The y coordinate is
!      * the top inset.
!      *
!      * @param c The component to set.
!      * @param size The width of the component.
!      * @param location The x coordinate.
!      * @param insets The insets to use.
!      * @param containerSize The height of the container.
!      */
!     protected void setComponentToSize(Component c, int size, int location,
!                                       Insets insets, Dimension containerSize)
!     {
!       int w = size;
!       int h = containerSize.height - insets.top - insets.bottom;
!       int x = location;
!       int y = insets.top;
!       c.setBounds(x, y, w, h);
!     }
! 
!     /**
!      * This method stores the given int array as the new sizes array.
!      *
!      * @param newSizes The array to use as sizes.
!      */
!     protected void setSizes(int[] newSizes)
!     {
!       sizes = newSizes;
!     }
! 
!     /**
!      * This method determines the size of each  component. It should be called
!      * when a new Layout Manager is created for an existing JSplitPane.
!      */
!     protected void updateComponents()
!     {
!       Component left = splitPane.getLeftComponent();
!       Component right = splitPane.getRightComponent();
! 
!       if (left != null)
!         {
! 	  components[0] = left;
! 	  resetSizeAt(0);
!         }
!       if (right != null)
!         {
! 	  components[1] = right;
! 	  resetSizeAt(1);
!         }
!       components[2] = divider;
!       resetSizeAt(2);
!     }
! 
!     /**
!      * This method resizes the left and right components to fit inside the
!      * JSplitPane when there is extra space.
!      */
!     void distributeExtraSpace()
!     {
!       int availSize = getAvailableSize(splitPane.getSize(),
!                                        splitPane.getInsets());
!       int[] newSizes = new int[3];
!       double weight = splitPane.getResizeWeight();
! 
!       int oldLen = sizes[0] + sizes[1];
! 
!       // dividers don't change size.
!       availSize -= sizes[2] + oldLen;
! 
!       int rightAlloc = (int) (availSize * (1 - weight));
!       int leftAlloc = availSize - rightAlloc;
! 
!       sizes[0] += leftAlloc;
!       sizes[1] += rightAlloc;
!     }
! 
!     /**
!      * This method returns the minimum width of the  component at the given
!      * index.
!      *
!      * @param index The index to check.
!      *
!      * @return The minimum width.
!      */
!     int minimumSizeOfComponent(int index)
!     {
!       Dimension dims = components[index].getMinimumSize();
!       if (dims != null)
! 	return dims.width;
!       else
! 	return 0;
!     }
!   } //end BasicHorizontalLayoutManager
! 
!   /**
!    * This class is the Layout Manager for the JSplitPane when the orientation
!    * is VERTICAL_SPLIT.
!    */
!   protected class BasicVerticalLayoutManager
!     extends BasicHorizontalLayoutManager
!   {
!     /**
!      * This method returns the height of the container minus the top and
!      * bottom inset.
!      *
!      * @param containerSize The size of the container.
!      * @param insets The insets of the container.
!      *
!      * @return The height minus top and bottom inset.
!      */
!     protected int getAvailableSize(Dimension containerSize, Insets insets)
!     {
!       return containerSize.height - insets.top - insets.bottom;
!     }
! 
!     /**
!      * This method returns the top inset.
!      *
!      * @param insets The Insets to use.
!      *
!      * @return The top inset.
!      */
!     protected int getInitialLocation(Insets insets)
!     {
!       return insets.top;
!     }
! 
!     /**
!      * This method returns the preferred height of the component.
!      *
!      * @param c The component to measure.
!      *
!      * @return The preferred height of the component.
!      */
!     protected int getPreferredSizeOfComponent(Component c)
!     {
!       Dimension dims = c.getPreferredSize();
!       if (dims != null)
! 	return dims.height;
!       return 0;
!     }
! 
!     /**
!      * This method returns the current height of the component.
!      *
!      * @param c The component to measure.
!      *
!      * @return The current height of the component.
!      */
!     protected int getSizeOfComponent(Component c)
!     {
!       return c.getHeight();
!     }
! 
!     /**
!      * This method returns the minimum layout size. The minimum height is the
!      * sum of all the components' minimum heights. The minimum width is the
!      * maximum of all the  components' minimum widths.
!      *
!      * @param container The container to measure.
!      *
!      * @return The minimum size.
!      */
!     public Dimension minimumLayoutSize(Container container)
!     {
!       if (container instanceof JSplitPane)
!         {
! 	  JSplitPane split = (JSplitPane) container;
! 	  Insets insets = container.getInsets();
! 
! 	  int height = 0;
! 	  int width = 0;
! 	  for (int i = 0; i < components.length; i++)
! 	    {
! 	      if (components[i] == null)
! 		continue;
! 	      Dimension dims = components[i].getMinimumSize();
! 	      if (dims != null)
! 	        {
! 		  height += dims.height;
! 		  width = Math.max(width, dims.width);
! 	        }
! 	    }
! 	  return new Dimension(width, height);
!         }
!       return null;
!     }
! 
!     /**
!      * This method returns the preferred layout size. The preferred height is
!      * the sum of all the components'  preferred heights. The preferred width
!      * is the maximum of  all the components' preferred widths.
!      *
!      * @param container The container to measure.
!      *
!      * @return The preferred size.
!      */
!     public Dimension preferredLayoutSize(Container container)
!     {
!       if (container instanceof JSplitPane)
!         {
! 	  JSplitPane split = (JSplitPane) container;
! 	  Insets insets = container.getInsets();
! 
! 	  int height = 0;
! 	  int width = 0;
! 	  for (int i = 0; i < components.length; i++)
! 	    {
! 	      if (components[i] == null)
! 		continue;
! 	      Dimension dims = components[i].getPreferredSize();
! 	      if (dims != null)
! 	        {
! 		  height += dims.height;
! 		  width = Math.max(width, dims.width);
! 	        }
! 	    }
! 	  return new Dimension(500, 500); //width, height);
!         }
!       return null;
!     }
! 
!     /**
!      * This method sets the bounds of the given component. The y coordinate is
!      * the location given. The x coordinate is the left inset. The height is
!      * the size given. The width is the container size minus the left and
!      * right inset.
!      *
!      * @param c The component to set bounds for.
!      * @param size The height.
!      * @param location The y coordinate.
!      * @param insets The insets to use.
!      * @param containerSize The container's size.
!      */
!     protected void setComponentToSize(Component c, int size, int location,
!                                       Insets insets, Dimension containerSize)
!     {
!       int y = location;
!       int x = insets.left;
!       int h = size;
!       int w = containerSize.width - insets.left - insets.right;
! 
!       c.setBounds(x, y, w, h);
!     }
! 
!     /**
!      * This method returns the minimum height of the component at the given
!      * index.
!      *
!      * @param index The index of the component to check.
!      *
!      * @return The minimum height of the given component.
!      */
!     int minimumSizeOfComponent(int index)
!     {
!       Dimension dims = components[index].getMinimumSize();
!       if (dims != null)
! 	return dims.height;
!       else
! 	return 0;
!     }
!   }
! 
!   /**
!    * This class handles FocusEvents from the JComponent.
!    */
!   protected class FocusHandler extends FocusAdapter
!   {
!     /**
!      * This method is called when the JSplitPane gains focus.
!      *
!      * @param ev The FocusEvent.
!      */
!     public void focusGained(FocusEvent ev)
!     {
!       // FIXME: implement.
!     }
! 
!     /**
!      * This method is called when the JSplitPane loses focus.
!      *
!      * @param ev The FocusEvent.
!      */
!     public void focusLost(FocusEvent ev)
!     {
!       // FIXME: implement.
!     }
!   }
! 
!   /**
!    * This is a deprecated class. It is supposed to be used for handling down
!    * and right key presses.
!    */
!   public class KeyboardDownRightHandler implements ActionListener
!   {
!     /**
!      * This method is called when the down or right keys are pressed.
!      *
!      * @param ev The ActionEvent
!      */
!     public void actionPerformed(ActionEvent ev)
!     {
!       // FIXME: implement.
!     }
!   }
! 
!   /**
!    * This is a deprecated class. It is supposed to be used for handling end
!    * key presses.
!    */
!   public class KeyboardEndHandler implements ActionListener
!   {
!     /**
!      * This method is called when the end key is pressed.
!      *
!      * @param ev The ActionEvent.
!      */
!     public void actionPerformed(ActionEvent ev)
!     {
!       // FIXME: implement.
!     }
!   }
! 
!   /**
!    * This is a deprecated class. It is supposed to be used for handling home
!    * key presses.
!    */
!   public class KeyboardHomeHandler implements ActionListener
!   {
!     /**
!      * This method is called when the home key is pressed.
!      *
!      * @param ev The ActionEvent.
!      */
!     public void actionPerformed(ActionEvent ev)
!     {
!       // FIXME: implement.
!     }
!   }
! 
!   /**
!    * This is a deprecated class. It is supposed to be used for handling resize
!    * toggles.
!    */
!   public class KeyboardResizeToggleHandler implements ActionListener
!   {
!     /**
!      * This method is called when a resize is toggled.
!      *
!      * @param ev The ActionEvent.
!      */
!     public void actionPerformed(ActionEvent ev)
!     {
!       // FIXME: implement.
!     }
!   }
! 
!   /**
!    * This is a deprecated class. It is supposed to be used for handler up and
!    * left key presses.
!    */
!   public class KeyboardUpLeftHandler implements ActionListener
!   {
!     /**
!      * This method is called when the left or up keys are pressed.
!      *
!      * @param ev The ActionEvent.
!      */
!     public void actionPerformed(ActionEvent ev)
!     {
!       // FIXME: implement.
!     }
!   }
! 
!   /**
!    * This helper class handles PropertyChangeEvents from the JSplitPane. When
!    * a property changes, this will update the UI accordingly.
!    */
!   public class PropertyHandler implements PropertyChangeListener
!   {
!     /**
!      * This method is called whenever one of the JSplitPane's properties
!      * change.
!      *
!      * @param e DOCUMENT ME!
!      */
!     public void propertyChange(PropertyChangeEvent e)
!     {
!       if (e.getPropertyName().equals(JSplitPane.DIVIDER_SIZE_PROPERTY))
!         {
! 	  int newSize = splitPane.getDividerSize();
! 	  int[] tmpSizes = layoutManager.getSizes();
! 	  dividerSize = tmpSizes[2];
! 	  Component left = splitPane.getLeftComponent();
! 	  Component right = splitPane.getRightComponent();
! 	  int newSpace = newSize - tmpSizes[2];
  
+ 	  tmpSizes[2] = newSize;
+ 
+ 	  tmpSizes[0] += newSpace / 2;
+ 	  tmpSizes[1] += newSpace / 2;
+ 
+ 	  layoutManager.setSizes(tmpSizes);
+         }
+       else if (e.getPropertyName().equals(JSplitPane.ORIENTATION_PROPERTY))
+         {
+ 	  int max = layoutManager.getAvailableSize(splitPane.getSize(),
+ 	                                           splitPane.getInsets());
+ 	  int dividerLoc = getDividerLocation(splitPane);
+ 	  double prop = ((double) dividerLoc) / max;
+ 
+ 	  resetLayoutManager();
+ 	  if (prop <= 1 && prop >= 0)
+ 	    splitPane.setDividerLocation(prop);
+         }
+       layoutManager.layoutContainer(splitPane);
+       splitPane.repaint();
+       // Don't have to deal with continuous_layout - only
+       // necessary in dragging modes (and it's checked
+       // every time you drag there)
+       // Don't have to deal with resize_weight (as there
+       // will be no extra space associated with this
+       // event - the changes to the weighting will
+       // be taken into account the next time the 
+       // sizes change.)
+       // Don't have to deal with divider_location 
+       // The method in JSplitPane calls our setDividerLocation
+       // so we'll know about those anyway.
+       // Don't have to deal with last_divider_location
+       // Although I'm not sure why, it doesn't seem to 
+       // have any effect on Sun's JSplitPane.
+       // one_touch_expandable changes are dealt with
+       // by our divider.
+     }
+   }
+ 
+   /** The location of the divider when dragging began. */
+   protected int beginDragDividerLocation;
+ 
+   /** The size of the divider while dragging. */
+   protected int dividerSize;
+ 
+   /** The location where the last drag location ended. */
+   transient int lastDragLocation = -1;
+ 
+   /** The distance the divider is moved when moved by keyboard actions. */
    protected static int KEYBOARD_DIVIDER_MOVE_OFFSET;
  
!   /** The divider that divides this JSplitPane. */
    protected BasicSplitPaneDivider divider;
+ 
+   /** The listener that listens for PropertyChangeEvents from the JSplitPane. */
    protected PropertyChangeListener propertyChangeListener;
+ 
+   /** The JSplitPane's focus handler. */
    protected FocusListener focusListener;
! 
!   /** @deprecated The handler for down and right key presses. */
    protected ActionListener keyboardDownRightListener;
! 
!   /** @deprecated The handler for end key presses. */
    protected ActionListener keyboardEndListener;
+ 
+   /** @deprecated The handler for home key presses. */
+   protected ActionListener keyboardHomeListener;
+ 
+   /** @deprecated The handler for toggling resizes. */
    protected ActionListener keyboardResizeToggleListener;
  
!   /** @deprecated The handler for up and left key presses. */
!   protected ActionListener keyboardUpLeftListener;
  
!   /** The JSplitPane's current layout manager. */
!   protected BasicHorizontalLayoutManager layoutManager;
! 
!   /** @deprecated The divider resize toggle key. */
!   protected KeyStroke dividerResizeToggleKey;
! 
!   /** @deprecated The down key. */
!   protected KeyStroke downKey;
  
+   /** @deprecated The end key. */
+   protected KeyStroke endKey;
+ 
+   /** @deprecated The home key. */
+   protected KeyStroke homeKey;
+ 
+   /** @deprecated The left key. */
+   protected KeyStroke leftKey;
+ 
+   /** @deprecated The right key. */
+   protected KeyStroke rightKey;
+ 
+   /** @deprecated The up key. */
+   protected KeyStroke upKey;
+ 
+   /** Set to true when dragging heavy weight components. */
+   protected boolean draggingHW;
+ 
+   /**
+    * The constraints object used when adding the non-continuous divider to the
+    * JSplitPane.
+    */
+   protected static final String NON_CONTINUOUS_DIVIDER
+     = "nonContinuousDivider";
+ 
+   /** The dark divider used when dragging in non-continuous layout mode. */
+   protected Component nonContinuousLayoutDivider;
+ 
+   /** The JSplitPane that this UI draws. */
+   protected JSplitPane splitPane;
+ 
+   /**
+    * Creates a new BasicSplitPaneUI object.
+    */
    public BasicSplitPaneUI()
    {
    }
  
!   /**
!    * This method creates a new BasicSplitPaneUI for the given JComponent.
!    *
!    * @param x The JComponent to create a UI for.
!    *
!    * @return A new BasicSplitPaneUI.
!    */
!   public static ComponentUI createUI(JComponent x)
    {
+     return new BasicSplitPaneUI();
    }
  
!   /**
!    * This method installs the BasicSplitPaneUI for the given JComponent.
!    *
!    * @param c The JComponent to install the UI for.
!    */
!   public void installUI(JComponent c)
    {
+     if (c instanceof JSplitPane)
+       {
+ 	splitPane = (JSplitPane) c;
+ 	installDefaults();
+ 	installListeners();
+ 	installKeyboardActions();
+       }
    }
  
!   /**
!    * This method uninstalls the BasicSplitPaneUI for the given JComponent.
!    *
!    * @param c The JComponent to uninstall the UI for.
!    */
!   public void uninstallUI(JComponent c)
    {
+     uninstallKeyboardActions();
+     uninstallListeners();
+     uninstallDefaults();
+ 
+     splitPane = null;
    }
  
!   /**
!    * This method installs the defaults given by the Look and Feel.
!    */
!   protected void installDefaults()
    {
+     resetLayoutManager();
+     divider = createDefaultDivider();
+     nonContinuousLayoutDivider = createDefaultNonContinuousLayoutDivider();
+     splitPane.add(divider, JSplitPane.DIVIDER);
+ 
+     // There is no need to add the nonContinuousLayoutDivider
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+     splitPane.setBackground(defaults.getColor("SplitPane.background"));
+     splitPane.setBorder(defaults.getBorder("SplitPane.border"));
+     splitPane.setDividerSize(defaults.getInt("SplitPane.dividerSize"));
    }
  
!   /**
!    * This method uninstalls the defaults and nulls any objects created during
!    * install.
!    */
!   protected void uninstallDefaults()
    {
+     layoutManager = null;
+     splitPane.remove(divider);
+     divider = null;
+     nonContinuousLayoutDivider = null;
+ 
+     splitPane.setBackground(null);
+     splitPane.setBorder(null);
    }
  
!   /**
!    * This method installs the listeners needed for this UI to function.
!    */
!   protected void installListeners()
    {
+     propertyChangeListener = createPropertyChangeListener();
+     focusListener = createFocusListener();
+ 
+     splitPane.addPropertyChangeListener(propertyChangeListener);
+     splitPane.addFocusListener(focusListener);
    }
  
!   /**
!    * This method uninstalls all listeners registered for the UI.
!    */
!   protected void uninstallListeners()
    {
+     splitPane.removePropertyChangeListener(propertyChangeListener);
+     splitPane.removeFocusListener(focusListener);
+ 
+     focusListener = null;
+     propertyChangeListener = null;
    }
  
!   /**
!    * This method installs the keyboard actions for the JSplitPane.
!    */
!   protected void installKeyboardActions()
    {
+     // FIXME: implement.
    }
  
+   /**
+    * This method reverses the work done in installKeyboardActions.
+    */
    protected void uninstallKeyboardActions()
    {
+     // FIXME: implement.
    }
  
+   /**
+    * This method creates a new PropertyChangeListener.
+    *
+    * @return A new PropertyChangeListener.
+    */
    protected PropertyChangeListener createPropertyChangeListener()
    {
!     return new PropertyHandler();
    }
  
+   /**
+    * This method creates a new FocusListener.
+    *
+    * @return A new FocusListener.
+    */
    protected FocusListener createFocusListener()
    {
!     return new FocusHandler();
    }
  
+   /**
+    * This method creates a new ActionListener for up and left key presses.
+    *
+    * @return A new ActionListener for up and left keys.
+    *
+    * @deprecated 1.3
+    */
    protected ActionListener createKeyboardUpLeftListener()
    {
!     return new KeyboardUpLeftHandler();
    }
  
+   /**
+    * This method creates a new ActionListener for down and right key presses.
+    *
+    * @return A new ActionListener for down and right keys.
+    *
+    * @deprecated 1.3
+    */
    protected ActionListener createKeyboardDownRightListener()
    {
!     return new KeyboardDownRightHandler();
    }
  
+   /**
+    * This method creates a new ActionListener for home key presses.
+    *
+    * @return A new ActionListener for home keys.
+    *
+    * @deprecated
+    */
    protected ActionListener createKeyboardHomeListener()
    {
!     return new KeyboardHomeHandler();
    }
  
+   /**
+    * This method creates a new ActionListener for end key presses.i
+    *
+    * @return A new ActionListener for end keys.
+    *
+    * @deprecated 1.3
+    */
    protected ActionListener createKeyboardEndListener()
    {
!     return new KeyboardEndHandler();
    }
  
+   /**
+    * This method creates a new ActionListener for resize toggle key events.
+    *
+    * @return A new ActionListener for resize toggle keys.
+    *
+    * @deprecated 1.3
+    */
    protected ActionListener createKeyboardResizeToggleListener()
    {
!     return new KeyboardResizeToggleHandler();
    }
  
+   /**
+    * This method returns the orientation of the JSplitPane.
+    *
+    * @return The orientation of the JSplitPane.
+    */
    public int getOrientation()
    {
      return splitPane.getOrientation();
    }
  
+   /**
+    * This method sets the orientation of the JSplitPane.
+    *
+    * @param orientation The new orientation of the JSplitPane.
+    */
    public void setOrientation(int orientation)
    {
+     splitPane.setOrientation(orientation);
    }
  
!   /**
!    * This method returns true if the JSplitPane is using continuous layout.
!    *
!    * @return True if the JSplitPane is using continuous layout.
!    */
    public boolean isContinuousLayout()
    {
!     return splitPane.isContinuousLayout();
    }
  
+   /**
+    * This method sets the continuous layout property of the JSplitPane.
+    *
+    * @param b True if the JsplitPane is to use continuous layout.
+    */
    public void setContinuousLayout(boolean b)
    {
+     splitPane.setContinuousLayout(b);
    }
  
+   /**
+    * This method returns the last location the divider was dragged to.
+    *
+    * @return The last location the divider was dragged to.
+    */
    public int getLastDragLocation()
    {
!     return lastDragLocation;
    }
  
+   /**
+    * This method sets the last location the divider was dragged to.
+    *
+    * @param l The last location the divider was dragged to.
+    */
    public void setLastDragLocation(int l)
    {
+     lastDragLocation = l;
    }
  
!   /**
!    * This method returns the BasicSplitPaneDivider that divides this
!    * JSplitPane.
!    *
!    * @return The divider for the JSplitPane.
!    */
    public BasicSplitPaneDivider getDivider()
    {
      return divider;
    }
  
!   /**
!    * This method creates a nonContinuousLayoutDivider for use with the
!    * JSplitPane in nonContinousLayout mode. The default divider is a gray
!    * Canvas.
!    *
!    * @return The default nonContinousLayoutDivider.
!    */
    protected Component createDefaultNonContinuousLayoutDivider()
    {
!     if (nonContinuousLayoutDivider == null)
!       {
! 	nonContinuousLayoutDivider = new Canvas();
! 	nonContinuousLayoutDivider.setBackground(Color.DARK_GRAY);
!       }
!     return nonContinuousLayoutDivider;
    }
  
+   /**
+    * This method sets the component to use as the nonContinuousLayoutDivider.
+    *
+    * @param newDivider The component to use as the nonContinuousLayoutDivider.
+    */
    protected void setNonContinuousLayoutDivider(Component newDivider)
    {
!     setNonContinuousLayoutDivider(newDivider, true);
    }
  
+   /**
+    * This method sets the component to use as the nonContinuousLayoutDivider.
+    *
+    * @param newDivider The component to use as the nonContinuousLayoutDivider.
+    * @param rememberSizes FIXME: document.
+    */
    protected void setNonContinuousLayoutDivider(Component newDivider,
                                                 boolean rememberSizes)
    {
+     // FIXME: use rememberSizes for something
      nonContinuousLayoutDivider = newDivider;
    }
  
+   /**
+    * This method returns the nonContinuousLayoutDivider.
+    *
+    * @return The nonContinuousLayoutDivider.
+    */
    public Component getNonContinuousLayoutDivider()
    {
      return nonContinuousLayoutDivider;
    }
  
+   /**
+    * This method returns the JSplitPane that this BasicSplitPaneUI draws.
+    *
+    * @return The JSplitPane.
+    */
    public JSplitPane getSplitPane()
    {
      return splitPane;
    }
  
+   /**
+    * This method creates the divider used normally with the JSplitPane.
+    *
+    * @return The default divider.
+    */
    public BasicSplitPaneDivider createDefaultDivider()
    {
!     if (divider == null)
!       divider = new BasicSplitPaneDivider(this);
!     return divider;
    }
  
+   /**
+    * This method is called when JSplitPane's resetToPreferredSizes is called.
+    * It resets the sizes of all components in the JSplitPane.
+    *
+    * @param jc The JSplitPane to reset.
+    */
    public void resetToPreferredSizes(JSplitPane jc)
    {
+     layoutManager.resetToPreferredSizes();
    }
  
+   /**
+    * This method sets the location of the divider.
+    *
+    * @param jc The JSplitPane to set the divider location in.
+    * @param location The new location of the divider.
+    */
    public void setDividerLocation(JSplitPane jc, int location)
    {
+     setLastDragLocation(getDividerLocation(splitPane));
+     splitPane.setLastDividerLocation(getDividerLocation(splitPane));
+     int[] tmpSizes = layoutManager.getSizes();
+     tmpSizes[0] = location
+                   - layoutManager.getInitialLocation(splitPane.getInsets());
+     tmpSizes[1] = layoutManager.getAvailableSize(splitPane.getSize(),
+                                                  splitPane.getInsets())
+                   - tmpSizes[0] - tmpSizes[1];
+ 
+     layoutManager.setSizes(tmpSizes);
+     splitPane.revalidate();
+     splitPane.repaint();
    }
  
+   /**
+    * This method returns the location of the divider.
+    *
+    * @param jc The JSplitPane to retrieve the location for.
+    *
+    * @return The location of the divider.
+    */
    public int getDividerLocation(JSplitPane jc)
    {
!     return layoutManager.sizes[0]
!            + layoutManager.getInitialLocation(splitPane.getInsets());
    }
  
+   /**
+    * This method returns the smallest value possible for the location of the
+    * divider.
+    *
+    * @param jc The JSplitPane.
+    *
+    * @return The minimum divider location.
+    */
    public int getMinimumDividerLocation(JSplitPane jc)
    {
!     int value = layoutManager.getInitialLocation(jc.getInsets());
!     if (layoutManager.components[0] != null)
!       value += layoutManager.minimumSizeOfComponent(0);
!     return value;
    }
  
+   /**
+    * This method returns the largest value possible for the location of the
+    * divider.
+    *
+    * @param jc The JSplitPane.
+    *
+    * @return The maximum divider location.
+    */
    public int getMaximumDividerLocation(JSplitPane jc)
    {
!     int value = layoutManager.getInitialLocation(jc.getInsets())
!                 + layoutManager.getAvailableSize(jc.getSize(), jc.getInsets())
!                 - splitPane.getDividerSize();
!     if (layoutManager.components[1] != null)
!       value -= layoutManager.minimumSizeOfComponent(1);
!     return value;
    }
  
+   /**
+    * This method is called after the children of the JSplitPane are painted.
+    *
+    * @param jc The JSplitPane.
+    * @param g The Graphics object to paint with.
+    */
    public void finishedPaintingChildren(JSplitPane jc, Graphics g)
    {
+     if (! splitPane.isContinuousLayout() && nonContinuousLayoutDivider != null
+         && nonContinuousLayoutDivider.isVisible())
+       javax.swing.SwingUtilities.paintComponent(g, nonContinuousLayoutDivider,
+                                                 null,
+                                                 nonContinuousLayoutDivider
+                                                 .getBounds());
    }
  
+   /**
+    * This method is called to paint the JSplitPane.
+    *
+    * @param g The Graphics object to paint with.
+    * @param jc The JSplitPane to paint.
+    */
    public void paint(Graphics g, JComponent jc)
    {
+     // Do nothing. All the painting is handled by children.
    }
  
+   /**
+    * This method returns the preferred size of the JSplitPane.
+    *
+    * @param jc The JSplitPane.
+    *
+    * @return The preferred size of the JSplitPane.
+    */
    public Dimension getPreferredSize(JComponent jc)
    {
!     return layoutManager.preferredLayoutSize((Container) jc);
    }
  
+   /**
+    * This method returns the minimum size of the JSplitPane.
+    *
+    * @param jc The JSplitPane.
+    *
+    * @return The minimum size of the JSplitPane.
+    */
    public Dimension getMinimumSize(JComponent jc)
    {
!     return layoutManager.minimumLayoutSize((Container) jc);
    }
  
+   /**
+    * This method returns the maximum size of the JSplitPane.
+    *
+    * @param jc The JSplitPane.
+    *
+    * @return The maximum size of the JSplitPane.
+    */
    public Dimension getMaximumSize(JComponent jc)
    {
!     return layoutManager.maximumLayoutSize((Container) jc);
    }
  
+   /**
+    * This method returns the border insets of the current border.
+    *
+    * @param jc The JSplitPane.
+    *
+    * @return The current border insets.
+    */
    public Insets getInsets(JComponent jc)
    {
!     return splitPane.getBorder().getBorderInsets(splitPane);
    }
  
+   /**
+    * This method resets the current layout manager. The type of layout manager
+    * is dependent on the current orientation.
+    */
    protected void resetLayoutManager()
    {
+     if (getOrientation() == JSplitPane.HORIZONTAL_SPLIT)
+       layoutManager = new BasicHorizontalLayoutManager();
+     else
+       layoutManager = new BasicVerticalLayoutManager();
+     layoutManager.invalidateLayout(splitPane);
+     layoutManager.updateComponents();
+     getSplitPane().setLayout(layoutManager);
+ 
+     // invalidating by itself does not invalidate the layout.
+     getSplitPane().revalidate();
    }
  
+   /**
+    * This method is called when dragging starts. It resets lastDragLocation
+    * and dividerSize.
+    */
    protected void startDragging()
    {
+     dividerSize = divider.getDividerSize();
+     setLastDragLocation(-1);
+ 
+     if (! splitPane.getLeftComponent().isLightweight()
+         || ! splitPane.getRightComponent().isLightweight())
+       draggingHW = true;
+ 
+     if (splitPane.isContinuousLayout())
+       nonContinuousLayoutDivider.setVisible(false);
+     else
+       {
+ 	nonContinuousLayoutDivider.setVisible(true);
+ 	nonContinuousLayoutDivider.setBounds(divider.getBounds());
+       }
+     splitPane.revalidate();
+     splitPane.repaint();
    }
  
+   /**
+    * This method is called whenever the divider is dragged. If the JSplitPane
+    * is in continuousLayout mode, the divider needs to be moved and the
+    * JSplitPane needs to be laid out.
+    *
+    * @param location The new location of the divider.
+    */
    protected void dragDividerTo(int location)
    {
+     location = validLocation(location);
+     if (beginDragDividerLocation == -1)
+       beginDragDividerLocation = location;
+ 
+     if (splitPane.isContinuousLayout())
+       splitPane.setDividerLocation(location);
+     else
+       {
+ 	Point p = nonContinuousLayoutDivider.getLocation();
+ 	if (getOrientation() == JSplitPane.HORIZONTAL_SPLIT)
+ 	  p.x = location;
+ 	else
+ 	  p.y = location;
+ 	nonContinuousLayoutDivider.setLocation(p);
+       }
+     setLastDragLocation(location);
+     splitPane.repaint();
    }
  
+   /**
+    * This method is called when the dragging is finished.
+    *
+    * @param location The location where the drag finished.
+    */
    protected void finishDraggingTo(int location)
    {
+     if (nonContinuousLayoutDivider != null)
+       nonContinuousLayoutDivider.setVisible(false);
+     draggingHW = false;
+     location = validLocation(location);
+     dragDividerTo(location);
+     splitPane.setDividerLocation(location);
+     splitPane.setLastDividerLocation(beginDragDividerLocation);
+     beginDragDividerLocation = -1;
+     splitPane.repaint();
    }
  
+   /**
+    * This method returns the width of one of the sides of the divider's border.
+    *
+    * @return The width of one side of the divider's border.
+    *
+    * @deprecated 1.3
+    */
    protected int getDividerBorderSize()
    {
!     if (getOrientation() == JSplitPane.HORIZONTAL_SPLIT)
!       return divider.getBorder().getBorderInsets(divider).left;
!     else
!       return divider.getBorder().getBorderInsets(divider).top;
!   }
! 
!   /**
!    * This is a helper method that returns a valid location for the divider
!    * when dragging.
!    *
!    * @param location The location to check.
!    *
!    * @return A valid location.
!    */
!   private int validLocation(int location)
!   {
!     if (location < getMinimumDividerLocation(splitPane))
!       return getMinimumDividerLocation(splitPane);
!     if (location > getMaximumDividerLocation(splitPane))
!       return getMaximumDividerLocation(splitPane);
!     return location;
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Sun Jul 13 15:29:11 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Wed Feb 16 20:02:58 2005
***************
*** 1,5 ****
! /* BasicTabbedPaneUI.java
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BasicTabbedPaneUI.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,109 ****
  
  package javax.swing.plaf.basic;
  
  import java.awt.Component;
  import java.awt.Dimension;
  import java.awt.Insets;
  import java.awt.Rectangle;
  import javax.swing.JComponent;
  import javax.swing.JTabbedPane;
  import javax.swing.SwingConstants;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.TabbedPaneUI;
  
! public class BasicTabbedPaneUI extends TabbedPaneUI
!   implements SwingConstants
  {
!     public static ComponentUI createUI(final JComponent c) 
      {
! 	return new BasicTabbedPaneUI();
      }
!     
!     public void installUI(final JComponent c) 
      {
! 	super.installUI(c);
      }
!     
!     public Dimension getPreferredSize(JComponent c) 
      {
! 	JTabbedPane p = (JTabbedPane) c;
  
! 	Dimension d = new Dimension(50,50);
! 	
! 	for (int i=0;i<p.getTabCount();i++)
  	    {
! 		Component comp = p.getComponentAt(i);
! 		
! 		Dimension pr = comp.getPreferredSize();
  
! 		d.width = Math.max(d.width, comp.getWidth());
! 		d.height = Math.max(d.height, comp.getHeight());
  	    }
! 	
! 	Insets i = p.getInsets();
! 	
! 	d.width  += i.left + i.right;
! 	d.height += i.top + i.bottom;
  
! 	int height_of_tabs = 25;
  
! 	d.height += height_of_tabs;
  
! 	// FIXME: should be max of panes in p
! 	return d;
      }
!     
  
!     public Rectangle getTabBounds(JTabbedPane pane, int index)
      {
! 	return null;
      }
  
!     public int getTabRunCount(JTabbedPane pane)
      {
! 	return 0;
      }
  
!     public int tabForCoordinate(JTabbedPane pane, int x, int y)
      {
! 	return 0;
      }
  }
-                        
--- 38,3054 ----
  
  package javax.swing.plaf.basic;
  
+ import java.awt.Color;
  import java.awt.Component;
+ import java.awt.Container;
  import java.awt.Dimension;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
  import java.awt.Insets;
+ import java.awt.LayoutManager;
+ import java.awt.Point;
  import java.awt.Rectangle;
+ import java.awt.event.FocusAdapter;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.event.MouseAdapter;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.Icon;
  import javax.swing.JComponent;
+ import javax.swing.JPanel;
  import javax.swing.JTabbedPane;
+ import javax.swing.JViewport;
+ import javax.swing.KeyStroke;
  import javax.swing.SwingConstants;
+ import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
  import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.PanelUI;
  import javax.swing.plaf.TabbedPaneUI;
+ import javax.swing.plaf.UIResource;
+ import javax.swing.text.View;
  
! /**
!  * This is the Basic Look and Feel's UI delegate for JTabbedPane.
!  */
! public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
  {
!   /**
!    * A helper class that handles focus.
!    */
!   public class FocusHandler extends FocusAdapter
!   {
!     /**
!      * This method is called when the component gains focus.
!      *
!      * @param e The FocusEvent.
!      */
!     public void focusGained(FocusEvent e)
      {
!       // FIXME: Implement.
      }
! 
!     /**
!      * This method is called when the component loses focus.
!      *
!      * @param e The FocusEvent.
!      */
!     public void focusLost(FocusEvent e)
      {
!       // FIXME: Implement.
      }
!   }
! 
!   /**
!    * A helper class for determining if mouse presses occur inside tabs and
!    * sets the index appropriately. In SCROLL_TAB_MODE, this class also
!    * handles the mouse clicks on the scrolling buttons.
!    */
!   public class MouseHandler extends MouseAdapter
!   {
!     /**
!      * This method is called when the mouse is pressed. The index cannot
!      * change to a tab that is  not enabled.
!      *
!      * @param e The MouseEvent.
!      */
!     public void mousePressed(MouseEvent e)
      {
!       int x = e.getX();
!       int y = e.getY();
!       int tabCount = tabPane.getTabCount();
  
!       if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT)
!         {
! 	  if (e.getSource() == incrButton)
  	    {
! 	      if (++currentScrollLocation >= tabCount)
! 		currentScrollLocation = tabCount - 1;
  
! 	      int width = 0;
! 	      for (int i = currentScrollLocation - 1; i < tabCount; i++)
! 		width += rects[i].width;
! 	      if (width < viewport.getWidth())
! 		// FIXME: Still getting mouse events after the button is disabled.
!     //	incrButton.setEnabled(false);
! 		currentScrollLocation--;
! 	      else if (! decrButton.isEnabled())
! 		decrButton.setEnabled(true);
! 	      tabPane.revalidate();
! 	      tabPane.repaint();
! 	      return;
  	    }
! 	  else if (e.getSource() == decrButton)
! 	    {
! 	      if (--currentScrollLocation < 0)
! 		currentScrollLocation = 0;
! 	      if (currentScrollLocation == 0)
! 		decrButton.setEnabled(false);
! 	      else if (! incrButton.isEnabled())
! 		incrButton.setEnabled(true);
! 	      tabPane.revalidate();
! 	      tabPane.repaint();
! 	      return;
! 	    }
!         }
  
!       int index = tabForCoordinate(tabPane, x, y);
  
!       // We need to check since there are areas where tabs cannot be
!       // e.g. in the inset area.
!       if (index != -1 && tabPane.isEnabledAt(index))
! 	tabPane.setSelectedIndex(index);
!       tabPane.revalidate();
!       tabPane.repaint();
!     }
!   }
  
!   /**
!    * This class handles PropertyChangeEvents fired from the JTabbedPane.
!    */
!   public class PropertyChangeHandler implements PropertyChangeListener
!   {
!     /**
!      * This method is called whenever one of the properties of the JTabbedPane
!      * changes.
!      *
!      * @param e The PropertyChangeEvent.
!      */
!     public void propertyChange(PropertyChangeEvent e)
!     {
!       if (e.getPropertyName().equals("tabLayoutPolicy"))
!         {
! 	  layoutManager = createLayoutManager();
! 
! 	  tabPane.setLayout(layoutManager);
!         }
!       else if (e.getPropertyName().equals("tabPlacement")
!                && tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT)
!         {
! 	  incrButton = createIncreaseButton();
! 	  decrButton = createDecreaseButton();
!         }
!       tabPane.layout();
!       tabPane.repaint();
      }
!   }
  
!   /**
!    * A LayoutManager responsible for placing all the tabs and the visible
!    * component inside the JTabbedPane. This class is only used for
!    * WRAP_TAB_LAYOUT.
!    */
!   protected class TabbedPaneLayout implements LayoutManager
!   {
!     /**
!      * This method is called when a component is added to the JTabbedPane.
!      *
!      * @param name The name of the component.
!      * @param comp The component being added.
!      */
!     public void addLayoutComponent(String name, Component comp)
      {
!       // Do nothing.
      }
  
!     /**
!      * This method is called when the rectangles need to be calculated. It
!      * also fixes the size of the visible component.
!      */
!     public void calculateLayoutInfo()
      {
!       calculateTabRects(tabPane.getTabPlacement(), tabPane.getTabCount());
! 
!       if (tabPane.getSelectedIndex() != -1)
!         {
! 	  Component visible = getVisibleComponent();
! 	  Insets insets = getContentBorderInsets(tabPane.getTabPlacement());
! 	  if (visible != null)
! 	    visible.setBounds(contentRect.x + insets.left,
! 	                      contentRect.y + insets.top,
! 	                      contentRect.width - insets.left - insets.right,
! 	                      contentRect.height - insets.top - insets.bottom);
!         }
      }
  
!     /**
!      * This method calculates the size of the the JTabbedPane.
!      *
!      * @param minimum Whether the JTabbedPane will try to be as small as it
!      *        can.
!      *
!      * @return The desired size of the JTabbedPane.
!      */
!     protected Dimension calculateSize(boolean minimum)
      {
!       int tabPlacement = tabPane.getTabPlacement();
!       int width = 0;
!       int height = 0;
! 
!       int componentHeight = 0;
!       int componentWidth = 0;
!       Component c;
!       Dimension dims;
!       for (int i = 0; i < tabPane.getTabCount(); i++)
!         {
! 	  c = tabPane.getComponentAt(i);
! 	  if (c == null)
! 	    continue;
! 	  calcRect = c.getBounds();
! 	  dims = c.getPreferredSize();
! 	  if (dims != null)
! 	    {
! 	      componentHeight = Math.max(componentHeight, dims.height);
! 	      componentWidth = Math.max(componentWidth, dims.width);
! 	    }
!         }
!       Insets insets = tabPane.getInsets();
! 
!       if (tabPlacement == SwingConstants.TOP
!           || tabPlacement == SwingConstants.BOTTOM)
!         {
! 	  int min = calculateMaxTabWidth(tabPlacement);
! 	  width = Math.max(min, componentWidth);
! 
! 	  int tabAreaHeight = preferredTabAreaHeight(tabPlacement, width);
! 	  height = tabAreaHeight + componentHeight;
!         }
!       else
!         {
! 	  int min = calculateMaxTabHeight(tabPlacement);
! 	  height = Math.max(min, componentHeight);
! 
! 	  int tabAreaWidth = preferredTabAreaWidth(tabPlacement, height);
! 	  width = tabAreaWidth + componentWidth;
!         }
! 
!       return new Dimension(width, height);
!     }
! 
!     // if tab placement is LEFT OR RIGHT, they share width.
!     // if tab placement is TOP OR BOTTOM, they share height
!     // PRE STEP: finds the default sizes for the labels as well as their locations.
!     // AND where they will be placed within the run system.
!     // 1. calls normalizeTab Runs.
!     // 2. calls rotate tab runs.
!     // 3. pads the tab runs.
!     // 4. pads the selected tab.
! 
!     /**
!      * This method is called to calculate the tab rectangles.  This method
!      * will calculate the size and position of all  rectangles (taking into
!      * account which ones should be in which tab run). It will pad them and
!      * normalize them  as necessary.
!      *
!      * @param tabPlacement The JTabbedPane's tab placement.
!      * @param tabCount The run the current selection is in.
!      */
!     protected void calculateTabRects(int tabPlacement, int tabCount)
!     {
!       if (tabCount == 0)
! 	return;
!       assureRectsCreated(tabCount);
! 
!       FontMetrics fm = getFontMetrics();
!       SwingUtilities.calculateInnerArea(tabPane, calcRect);
!       Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
!       Insets insets = tabPane.getInsets();
!       int max = 0;
!       int runs = 0;
!       int start = getTabRunIndent(tabPlacement, 1);
!       if (tabPlacement == SwingConstants.TOP
!           || tabPlacement == SwingConstants.BOTTOM)
!         {
! 	  int maxHeight = calculateMaxTabHeight(tabPlacement);
! 
! 	  calcRect.width -= tabAreaInsets.left + tabAreaInsets.right;
! 	  max = calcRect.width + tabAreaInsets.left + insets.left;
! 	  start += tabAreaInsets.left + insets.left;
! 	  int width = 0;
! 	  int runWidth = start;
! 
! 	  for (int i = 0; i < tabCount; i++)
! 	    {
! 	      width = calculateTabWidth(tabPlacement, i, fm);
! 
! 	      if (runWidth + width > max)
! 	        {
! 		  runWidth = tabAreaInsets.left + insets.left
! 		             + getTabRunIndent(tabPlacement, ++runs);
! 		  rects[i] = new Rectangle(runWidth,
! 		                           insets.top + tabAreaInsets.top,
! 		                           width, maxHeight);
! 		  runWidth += width;
! 		  if (runs > tabRuns.length - 1)
! 		    expandTabRunsArray();
! 		  tabRuns[runs] = i;
! 	        }
! 	      else
! 	        {
! 		  rects[i] = new Rectangle(runWidth,
! 		                           insets.top + tabAreaInsets.top,
! 		                           width, maxHeight);
! 		  runWidth += width;
! 	        }
! 	    }
! 	  runs++;
! 	  tabAreaRect.width = tabPane.getWidth() - insets.left - insets.right;
! 	  tabAreaRect.height = runs * maxTabHeight
! 	                       - (runs - 1) * tabRunOverlay
! 	                       + tabAreaInsets.top + tabAreaInsets.bottom;
! 	  contentRect.width = tabAreaRect.width;
! 	  contentRect.height = tabPane.getHeight() - insets.top
! 	                       - insets.bottom - tabAreaRect.height;
! 	  contentRect.x = insets.left;
! 	  tabAreaRect.x = insets.left;
! 	  if (tabPlacement == SwingConstants.BOTTOM)
! 	    {
! 	      contentRect.y = insets.top;
! 	      tabAreaRect.y = contentRect.y + contentRect.height;
! 	    }
! 	  else
! 	    {
! 	      tabAreaRect.y = insets.top;
! 	      contentRect.y = tabAreaRect.y + tabAreaRect.height;
! 	    }
!         }
!       else
!         {
! 	  int maxWidth = calculateMaxTabWidth(tabPlacement);
! 	  calcRect.height -= tabAreaInsets.top + tabAreaInsets.bottom;
! 	  max = calcRect.height + tabAreaInsets.top + insets.top;
! 
! 	  int height = 0;
! 	  start += tabAreaInsets.top + insets.top;
! 	  int runHeight = start;
! 
! 	  int fontHeight = fm.getHeight();
! 
! 	  for (int i = 0; i < tabCount; i++)
! 	    {
! 	      height = calculateTabHeight(tabPlacement, i, fontHeight);
! 	      if (runHeight + height > max)
! 	        {
! 		  runHeight = tabAreaInsets.top + insets.top
! 		              + getTabRunIndent(tabPlacement, ++runs);
! 		  rects[i] = new Rectangle(insets.left + tabAreaInsets.left,
! 		                           runHeight, maxWidth, height);
! 		  runHeight += height;
! 		  if (runs > tabRuns.length - 1)
! 		    expandTabRunsArray();
! 		  tabRuns[runs] = i;
! 	        }
! 	      else
! 	        {
! 		  rects[i] = new Rectangle(insets.left + tabAreaInsets.left,
! 		                           runHeight, maxWidth, height);
! 		  runHeight += height;
! 	        }
! 	    }
! 	  runs++;
! 
! 	  tabAreaRect.width = runs * maxTabWidth - (runs - 1) * tabRunOverlay
! 	                      + tabAreaInsets.left + tabAreaInsets.right;
! 	  tabAreaRect.height = tabPane.getHeight() - insets.top
! 	                       - insets.bottom;
! 	  tabAreaRect.y = insets.top;
! 	  contentRect.width = tabPane.getWidth() - insets.left - insets.right
! 	                      - tabAreaRect.width;
! 	  contentRect.height = tabAreaRect.height;
! 	  contentRect.y = insets.top;
! 	  if (tabPlacement == SwingConstants.LEFT)
! 	    {
! 	      tabAreaRect.x = insets.left;
! 	      contentRect.x = tabAreaRect.x + tabAreaRect.width;
! 	    }
! 	  else
! 	    {
! 	      contentRect.x = insets.left;
! 	      tabAreaRect.x = contentRect.x + contentRect.width;
! 	    }
!         }
!       runCount = runs;
! 
!       tabRuns[0] = 0;
!       normalizeTabRuns(tabPlacement, tabCount, start, max);
!       selectedRun = getRunForTab(tabCount, tabPane.getSelectedIndex());
!       if (shouldRotateTabRuns(tabPlacement))
! 	rotateTabRuns(tabPlacement, selectedRun);
! 
!       // Need to pad the runs and move them to the correct location.
!       for (int i = 0; i < runCount; i++)
!         {
! 	  int first = lastTabInRun(tabCount, getPreviousTabRun(i)) + 1;
! 	  if (first == tabCount)
! 	    first = 0;
! 	  int last = lastTabInRun(tabCount, i);
! 	  if (shouldPadTabRun(tabPlacement, i))
! 	    padTabRun(tabPlacement, first, last, max);
! 
! 	  // Done padding, now need to move it.
! 	  if (tabPlacement == SwingConstants.TOP && i > 0)
! 	    {
! 	      for (int j = first; j <= last; j++)
! 		rects[j].y += (runCount - i) * maxTabHeight
! 		- (runCount - i) * tabRunOverlay;
! 	    }
! 
! 	  if (tabPlacement == SwingConstants.BOTTOM)
! 	    {
! 	      int height = tabPane.getBounds().height - insets.bottom
! 	                   - tabAreaInsets.bottom;
! 	      int adjustment;
! 	      if (i == 0)
! 		adjustment = height - maxTabHeight;
! 	      else
! 		adjustment = height - (runCount - i + 1) * maxTabHeight
! 		             - (runCount - i) * tabRunOverlay;
! 
! 	      for (int j = first; j <= last; j++)
! 		rects[j].y = adjustment;
! 	    }
! 
! 	  if (tabPlacement == SwingConstants.LEFT && i > 0)
! 	    {
! 	      for (int j = first; j <= last; j++)
! 		rects[j].x += (runCount - i) * maxTabWidth
! 		- (runCount - i) * tabRunOverlay;
! 	    }
! 
! 	  if (tabPlacement == SwingConstants.RIGHT)
! 	    {
! 	      int width = tabPane.getBounds().width - insets.right
! 	                  - tabAreaInsets.right;
! 	      int adjustment;
! 	      if (i == 0)
! 		adjustment = width - maxTabWidth;
! 	      else
! 		adjustment = width - (runCount - i + 1) * maxTabWidth
! 		             + (runCount - i) * tabRunOverlay;
! 
! 	      for (int j = first; j <= last; j++)
! 		rects[j].x = adjustment;
! 	    }
!         }
!       padSelectedTab(tabPlacement, tabPane.getSelectedIndex());
!     }
! 
!     /**
!      * This method is called when the JTabbedPane is laid out in
!      * WRAP_TAB_LAYOUT. It calls calculateLayoutInfo to  find the positions
!      * of all its components.
!      *
!      * @param parent The Container to lay out.
!      */
!     public void layoutContainer(Container parent)
!     {
!       calculateLayoutInfo();
!     }
! 
!     /**
!      * This method returns the minimum layout size for the given container.
!      *
!      * @param parent The container that is being sized.
!      *
!      * @return The minimum size.
!      */
!     public Dimension minimumLayoutSize(Container parent)
!     {
!       return calculateSize(false);
!     }
! 
!     // If there is more free space in an adjacent run AND the tab in the run can fit in the 
!     // adjacent run, move it. This method is not perfect, it is merely an approximation.
!     // If you play around with Sun's JTabbedPane, you'll see that 
!     // it does do some pretty strange things with regards to not moving tabs 
!     // that should be moved. 
!     // start = the x position where the tabs will begin
!     // max = the maximum position of where the tabs can go to (tabAreaInsets.left + the width of the tab area)
! 
!     /**
!      * This method tries to "even out" the number of tabs in each run based on
!      * their widths.
!      *
!      * @param tabPlacement The JTabbedPane's tab placement.
!      * @param tabCount The number of tabs.
!      * @param start The x position where the tabs will begin.
!      * @param max The maximum x position where the tab can run to.
!      */
!     protected void normalizeTabRuns(int tabPlacement, int tabCount, int start,
!                                     int max)
!     {
!       Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
!       if (tabPlacement == SwingUtilities.TOP
!           || tabPlacement == SwingUtilities.BOTTOM)
!         {
! 	  // We should only do this for runCount - 1, cause we can only shift that many times between
! 	  // runs.
! 	  for (int i = 1; i < runCount; i++)
! 	    {
! 	      Rectangle currRun = rects[lastTabInRun(tabCount, i)];
! 	      Rectangle nextRun = rects[lastTabInRun(tabCount, getNextTabRun(i))];
! 	      int spaceInCurr = currRun.x + currRun.width;
! 	      int spaceInNext = nextRun.x + nextRun.width;
! 
! 	      int diffNow = spaceInCurr - spaceInNext;
! 	      int diffLater = (spaceInCurr - currRun.width)
! 	                      - (spaceInNext + currRun.width);
! 	      while (Math.abs(diffLater) < Math.abs(diffNow)
! 	             && spaceInNext + currRun.width < max)
! 	        {
! 		  tabRuns[i]--;
! 		  spaceInNext += currRun.width;
! 		  spaceInCurr -= currRun.width;
! 		  currRun = rects[lastTabInRun(tabCount, i)];
! 		  diffNow = spaceInCurr - spaceInNext;
! 		  diffLater = (spaceInCurr - currRun.width)
! 		              - (spaceInNext + currRun.width);
! 	        }
! 
! 	      // Fix the bounds.
! 	      int first = lastTabInRun(tabCount, i) + 1;
! 	      int last = lastTabInRun(tabCount, getNextTabRun(i));
! 	      int currX = tabAreaInsets.left;
! 	      for (int j = first; j <= last; j++)
! 	        {
! 		  rects[j].x = currX;
! 		  currX += rects[j].width;
! 	        }
! 	    }
!         }
!       else
!         {
! 	  for (int i = 1; i < runCount; i++)
! 	    {
! 	      Rectangle currRun = rects[lastTabInRun(tabCount, i)];
! 	      Rectangle nextRun = rects[lastTabInRun(tabCount, getNextTabRun(i))];
! 	      int spaceInCurr = currRun.y + currRun.height;
! 	      int spaceInNext = nextRun.y + nextRun.height;
! 
! 	      int diffNow = spaceInCurr - spaceInNext;
! 	      int diffLater = (spaceInCurr - currRun.height)
! 	                      - (spaceInNext + currRun.height);
! 	      while (Math.abs(diffLater) < Math.abs(diffNow)
! 	             && spaceInNext + currRun.height < max)
! 	        {
! 		  tabRuns[i]--;
! 		  spaceInNext += currRun.height;
! 		  spaceInCurr -= currRun.height;
! 		  currRun = rects[lastTabInRun(tabCount, i)];
! 		  diffNow = spaceInCurr - spaceInNext;
! 		  diffLater = (spaceInCurr - currRun.height)
! 		              - (spaceInNext + currRun.height);
! 	        }
! 
! 	      int first = lastTabInRun(tabCount, i) + 1;
! 	      int last = lastTabInRun(tabCount, getNextTabRun(i));
! 	      int currY = tabAreaInsets.top;
! 	      for (int j = first; j <= last; j++)
! 	        {
! 		  rects[j].y = currY;
! 		  currY += rects[j].height;
! 	        }
! 	    }
!         }
!     }
! 
!     /**
!      * This method pads the tab at the selected index by the  selected tab pad
!      * insets (so that it looks larger).
!      *
!      * @param tabPlacement The placement of the tabs.
!      * @param selectedIndex The selected index.
!      */
!     protected void padSelectedTab(int tabPlacement, int selectedIndex)
!     {
!       Insets insets = getSelectedTabPadInsets(tabPlacement);
!       rects[selectedIndex].x -= insets.left;
!       rects[selectedIndex].y -= insets.top;
!       rects[selectedIndex].width += insets.left + insets.right;
!       rects[selectedIndex].height += insets.top + insets.bottom;
!     }
! 
!     // If the tabs on the run don't fill the width of the window, make it fit now.
!     // start = starting index of the run
!     // end = last index of the run
!     // max = tabAreaInsets.left + width (or equivalent)
!     // assert start <= end.
! 
!     /**
!      * This method makes each tab in the run larger so that the  tabs expand
!      * to fill the runs width/height (depending on tabPlacement).
!      *
!      * @param tabPlacement The placement of the tabs.
!      * @param start The index of the first tab.
!      * @param end The last index of the tab
!      * @param max The amount of space in the run (width for TOP and BOTTOM
!      *        tabPlacement).
!      */
!     protected void padTabRun(int tabPlacement, int start, int end, int max)
!     {
!       if (tabPlacement == SwingConstants.TOP
!           || tabPlacement == SwingConstants.BOTTOM)
!         {
! 	  int runWidth = rects[end].x + rects[end].width;
! 	  int spaceRemaining = max - runWidth;
! 	  int numTabs = end - start + 1;
! 
! 	  // now divvy up the space.
! 	  int spaceAllocated = spaceRemaining / numTabs;
! 	  int currX = rects[start].x;
! 	  for (int i = start; i <= end; i++)
! 	    {
! 	      rects[i].x = currX;
! 	      rects[i].width += spaceAllocated;
! 	      currX += rects[i].width;
! 	      // This is used because since the spaceAllocated 
! 	      // variable is an int, it rounds down. Sometimes,
! 	      // we don't fill an entire row, so we make it do
! 	      // so now.
! 	      if (i == end && rects[i].x + rects[i].width != max)
! 		rects[i].width = max - rects[i].x;
! 	    }
!         }
!       else
!         {
! 	  int runHeight = rects[end].y + rects[end].height;
! 	  int spaceRemaining = max - runHeight;
! 	  int numTabs = end - start + 1;
! 
! 	  int spaceAllocated = spaceRemaining / numTabs;
! 	  int currY = rects[start].y;
! 	  for (int i = start; i <= end; i++)
! 	    {
! 	      rects[i].y = currY;
! 	      rects[i].height += spaceAllocated;
! 	      currY += rects[i].height;
! 	      if (i == end && rects[i].y + rects[i].height != max)
! 		rects[i].height = max - rects[i].y;
! 	    }
!         }
!     }
! 
!     /**
!      * This method returns the preferred layout size for the given container.
!      *
!      * @param parent The container to size.
!      *
!      * @return The preferred layout size.
!      */
!     public Dimension preferredLayoutSize(Container parent)
!     {
!       return calculateSize(false);
!     }
! 
!     /**
!      * This method returns the preferred tab height given a tabPlacement and
!      * width.
!      *
!      * @param tabPlacement The JTabbedPane's tab placement.
!      * @param width The expected width.
!      *
!      * @return The preferred tab area height.
!      */
!     protected int preferredTabAreaHeight(int tabPlacement, int width)
!     {
!       if (tabPane.getTabCount() == 0)
! 	return calculateTabAreaHeight(tabPlacement, 0, 0);
! 
!       int runs = 0;
!       int runWidth = 0;
!       int tabWidth = 0;
! 
!       FontMetrics fm = getFontMetrics();
! 
!       Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
!       Insets insets = tabPane.getInsets();
! 
!       // Only interested in width, this is a messed up rectangle now.
!       width -= tabAreaInsets.left + tabAreaInsets.right + insets.left
!       + insets.right;
! 
!       // The reason why we can't use runCount:
!       // This method is only called to calculate the size request
!       // for the tabbedPane. However, this size request is dependent on 
!       // our desired width. We need to find out what the height would
!       // be IF we got our desired width.
!       for (int i = 0; i < tabPane.getTabCount(); i++)
!         {
! 	  tabWidth = calculateTabWidth(tabPlacement, i, fm);
! 	  if (runWidth + tabWidth > width)
! 	    {
! 	      runWidth = tabWidth;
! 	      runs++;
! 	    }
! 	  else
! 	    runWidth += tabWidth;
!         }
!       runs++;
! 
!       int maxTabHeight = calculateMaxTabHeight(tabPlacement);
!       int tabAreaHeight = calculateTabAreaHeight(tabPlacement, runs,
!                                                  maxTabHeight);
!       return tabAreaHeight;
!     }
! 
!     /**
!      * This method calculates the preferred tab area width given a tab
!      * placement and height.
!      *
!      * @param tabPlacement The JTabbedPane's tab placement.
!      * @param height The expected height.
!      *
!      * @return The preferred tab area width.
!      */
!     protected int preferredTabAreaWidth(int tabPlacement, int height)
!     {
!       if (tabPane.getTabCount() == 0)
! 	return calculateTabAreaHeight(tabPlacement, 0, 0);
! 
!       int runs = 0;
!       int runHeight = 0;
!       int tabHeight = 0;
! 
!       FontMetrics fm = getFontMetrics();
! 
!       Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
!       Insets insets = tabPane.getInsets();
! 
!       height -= tabAreaInsets.top + tabAreaInsets.bottom + insets.top
!       + insets.bottom;
!       int fontHeight = fm.getHeight();
! 
!       for (int i = 0; i < tabPane.getTabCount(); i++)
!         {
! 	  tabHeight = calculateTabHeight(tabPlacement, i, fontHeight);
! 	  if (runHeight + tabHeight > height)
! 	    {
! 	      runHeight = tabHeight;
! 	      runs++;
! 	    }
! 	  else
! 	    runHeight += tabHeight;
!         }
!       runs++;
! 
!       int maxTabWidth = calculateMaxTabWidth(tabPlacement);
!       int tabAreaWidth = calculateTabAreaWidth(tabPlacement, runs, maxTabWidth);
!       return tabAreaWidth;
!     }
! 
!     /**
!      * This method rotates the places each run in the correct place  the
!      * tabRuns array. See the comment for tabRuns for how the runs are placed
!      * in the array.
!      *
!      * @param tabPlacement The JTabbedPane's tab placement.
!      * @param selectedRun The run the current selection is in.
!      */
!     protected void rotateTabRuns(int tabPlacement, int selectedRun)
!     {
!       if (runCount == 1 || selectedRun == 1 || selectedRun == -1)
! 	return;
!       int[] newTabRuns = new int[tabRuns.length];
!       int currentRun = selectedRun;
!       int i = 1;
!       do
!         {
! 	  newTabRuns[i] = tabRuns[currentRun];
! 	  currentRun = getNextTabRun(currentRun);
! 	  i++;
!         }
!       while (i < runCount);
!       if (runCount > 1)
! 	newTabRuns[0] = tabRuns[currentRun];
! 
!       tabRuns = newTabRuns;
!       BasicTabbedPaneUI.this.selectedRun = 1;
!     }
! 
!     /**
!      * This method is called when a component is removed  from the
!      * JTabbedPane.
!      *
!      * @param comp The component removed.
!      */
!     public void removeLayoutComponent(Component comp)
!     {
!       // Do nothing.
!     }
!   }
! 
!   /**
!    * This class acts as the LayoutManager for the JTabbedPane in
!    * SCROLL_TAB_MODE.
!    */
!   private class TabbedPaneScrollLayout extends TabbedPaneLayout
!   {
!     /**
!      * This method returns the preferred layout size for the given container.
!      *
!      * @param parent The container to calculate a size for.
!      *
!      * @return The preferred layout size.
!      */
!     public Dimension preferredLayoutSize(Container parent)
!     {
!       return super.calculateSize(true);
!     }
! 
!     /**
!      * This method returns the minimum layout size for the given container.
!      *
!      * @param parent The container to calculate a size for.
!      *
!      * @return The minimum layout size.
!      */
!     public Dimension minimumLayoutSize(Container parent)
!     {
!       return super.calculateSize(true);
!     }
! 
!     /**
!      * This method calculates the tab area height given  a desired width.
!      *
!      * @param tabPlacement The JTabbedPane's tab placement.
!      * @param width The expected width.
!      *
!      * @return The tab area height given the width.
!      */
!     protected int preferredTabAreaHeight(int tabPlacement, int width)
!     {
!       if (tabPane.getTabCount() == 0)
! 	return calculateTabAreaHeight(tabPlacement, 0, 0);
! 
!       int runs = 1;
! 
!       int maxTabHeight = calculateMaxTabHeight(tabPlacement);
!       int tabAreaHeight = calculateTabAreaHeight(tabPlacement, runs,
!                                                  maxTabHeight);
!       return tabAreaHeight;
!     }
! 
!     /**
!      * This method calculates the tab area width given a desired height.
!      *
!      * @param tabPlacement The JTabbedPane's tab placement.
!      * @param height The expected height.
!      *
!      * @return The tab area width given the height.
!      */
!     protected int preferredTabAreaWidth(int tabPlacement, int height)
!     {
!       if (tabPane.getTabCount() == 0)
! 	return calculateTabAreaHeight(tabPlacement, 0, 0);
! 
!       int runs = 1;
! 
!       int maxTabWidth = calculateMaxTabWidth(tabPlacement);
!       int tabAreaWidth = calculateTabAreaWidth(tabPlacement, runs, maxTabWidth);
!       return tabAreaWidth;
!     }
! 
!     /**
!      * This method is called to calculate the tab rectangles.  This method
!      * will calculate the size and position of all  rectangles (taking into
!      * account which ones should be in which tab run). It will pad them and
!      * normalize them  as necessary.
!      *
!      * @param tabPlacement The JTabbedPane's tab placement.
!      * @param tabCount The number of tabs.
!      */
!     protected void calculateTabRects(int tabPlacement, int tabCount)
!     {
!       if (tabCount == 0)
! 	return;
!       assureRectsCreated(tabCount);
! 
!       FontMetrics fm = getFontMetrics();
!       SwingUtilities.calculateInnerArea(tabPane, calcRect);
!       Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
!       Insets insets = tabPane.getInsets();
!       int max = 0;
!       int runs = 1;
!       int start = 0;
!       int top = 0;
!       if (tabPlacement == SwingConstants.TOP
!           || tabPlacement == SwingConstants.BOTTOM)
!         {
! 	  int maxHeight = calculateMaxTabHeight(tabPlacement);
! 	  calcRect.width -= tabAreaInsets.left + tabAreaInsets.right;
! 	  max = calcRect.width + tabAreaInsets.left + insets.left;
! 	  start = tabAreaInsets.left + insets.left;
! 	  int width = 0;
! 	  int runWidth = start;
! 	  top = insets.top + tabAreaInsets.top;
! 	  for (int i = 0; i < tabCount; i++)
! 	    {
! 	      width = calculateTabWidth(tabPlacement, i, fm);
! 
! 	      rects[i] = new Rectangle(runWidth, top, width, maxHeight);
! 	      runWidth += width;
! 	    }
! 	  tabAreaRect.width = tabPane.getWidth() - insets.left - insets.right;
! 	  tabAreaRect.height = runs * maxTabHeight
! 	                       - (runs - 1) * tabRunOverlay
! 	                       + tabAreaInsets.top + tabAreaInsets.bottom;
! 	  contentRect.width = tabAreaRect.width;
! 	  contentRect.height = tabPane.getHeight() - insets.top
! 	                       - insets.bottom - tabAreaRect.height;
! 	  contentRect.x = insets.left;
! 	  tabAreaRect.x = insets.left;
! 	  if (tabPlacement == SwingConstants.BOTTOM)
! 	    {
! 	      contentRect.y = insets.top;
! 	      tabAreaRect.y = contentRect.y + contentRect.height;
! 	    }
! 	  else
! 	    {
! 	      tabAreaRect.y = insets.top;
! 	      contentRect.y = tabAreaRect.y + tabAreaRect.height;
! 	    }
!         }
!       else
!         {
! 	  int maxWidth = calculateMaxTabWidth(tabPlacement);
! 
! 	  calcRect.height -= tabAreaInsets.top + tabAreaInsets.bottom;
! 	  max = calcRect.height + tabAreaInsets.top;
! 	  int height = 0;
! 	  start = tabAreaInsets.top + insets.top;
! 	  int runHeight = start;
! 	  int fontHeight = fm.getHeight();
! 	  top = insets.left + tabAreaInsets.left;
! 	  for (int i = 0; i < tabCount; i++)
! 	    {
! 	      height = calculateTabHeight(tabPlacement, i, fontHeight);
! 	      rects[i] = new Rectangle(top, runHeight, maxWidth, height);
! 	      runHeight += height;
! 	    }
! 	  tabAreaRect.width = runs * maxTabWidth - (runs - 1) * tabRunOverlay
! 	                      + tabAreaInsets.left + tabAreaInsets.right;
! 	  tabAreaRect.height = tabPane.getHeight() - insets.top
! 	                       - insets.bottom;
! 	  tabAreaRect.y = insets.top;
! 	  contentRect.width = tabPane.getWidth() - insets.left - insets.right
! 	                      - tabAreaRect.width;
! 	  contentRect.height = tabAreaRect.height;
! 	  contentRect.y = insets.top;
! 	  if (tabPlacement == SwingConstants.LEFT)
! 	    {
! 	      tabAreaRect.x = insets.left;
! 	      contentRect.x = tabAreaRect.x + tabAreaRect.width;
! 	    }
! 	  else
! 	    {
! 	      contentRect.x = insets.left;
! 	      tabAreaRect.x = contentRect.x + contentRect.width;
! 	    }
!         }
!       runCount = runs;
! 
!       padSelectedTab(tabPlacement, tabPane.getSelectedIndex());
      }
+ 
+     /**
+      * This method is called when the JTabbedPane is laid out in
+      * SCROLL_TAB_LAYOUT. It finds the position for all components in the
+      * JTabbedPane.
+      *
+      * @param pane The JTabbedPane to be laid out.
+      */
+     public void layoutContainer(Container pane)
+     {
+       super.layoutContainer(pane);
+       int tabCount = tabPane.getTabCount();
+       Point p = null;
+       if (tabCount == 0)
+ 	return;
+       int tabPlacement = tabPane.getTabPlacement();
+       incrButton.hide();
+       decrButton.hide();
+       if (tabPlacement == SwingConstants.TOP
+           || tabPlacement == SwingConstants.BOTTOM)
+         {
+ 	  if (tabAreaRect.x + tabAreaRect.width < rects[tabCount - 1].x
+ 	      + rects[tabCount - 1].width)
+ 	    {
+ 	      Dimension incrDims = incrButton.getPreferredSize();
+ 	      Dimension decrDims = decrButton.getPreferredSize();
+ 
+ 	      decrButton.setBounds(tabAreaRect.x + tabAreaRect.width
+ 	                           - incrDims.width - decrDims.width,
+ 	                           tabAreaRect.y, decrDims.width,
+ 	                           tabAreaRect.height);
+ 	      incrButton.setBounds(tabAreaRect.x + tabAreaRect.width
+ 	                           - incrDims.width, tabAreaRect.y,
+ 	                           decrDims.width, tabAreaRect.height);
+ 
+ 	      tabAreaRect.width -= decrDims.width + incrDims.width;
+ 	      incrButton.show();
+ 	      decrButton.show();
+ 	    }
+         }
+ 
+       if (tabPlacement == SwingConstants.LEFT
+           || tabPlacement == SwingConstants.RIGHT)
+         {
+ 	  if (tabAreaRect.y + tabAreaRect.height < rects[tabCount - 1].y
+ 	      + rects[tabCount - 1].height)
+ 	    {
+ 	      Dimension incrDims = incrButton.getPreferredSize();
+ 	      Dimension decrDims = decrButton.getPreferredSize();
+ 
+ 	      decrButton.setBounds(tabAreaRect.x,
+ 	                           tabAreaRect.y + tabAreaRect.height
+ 	                           - incrDims.height - decrDims.height,
+ 	                           tabAreaRect.width, decrDims.height);
+ 	      incrButton.setBounds(tabAreaRect.x,
+ 	                           tabAreaRect.y + tabAreaRect.height
+ 	                           - incrDims.height, tabAreaRect.width,
+ 	                           incrDims.height);
+ 
+ 	      tabAreaRect.height -= decrDims.height + incrDims.height;
+ 	      incrButton.show();
+ 	      decrButton.show();
+ 	    }
+         }
+       viewport.setBounds(tabAreaRect.x, tabAreaRect.y, tabAreaRect.width,
+                          tabAreaRect.height);
+       int tabC = tabPane.getTabCount() - 1;
+       if (tabCount > 0)
+         {
+ 	  int w = Math.max(rects[tabC].width + rects[tabC].x, tabAreaRect.width);
+ 	  int h = Math.max(rects[tabC].height, tabAreaRect.height);
+ 	  p = findPointForIndex(currentScrollLocation);
+ 
+ 	  // we want to cover that entire space so that borders that run under
+ 	  // the tab area don't show up when we move the viewport around.
+ 	  panel.setSize(w + p.x, h + p.y);
+         }
+       viewport.setViewPosition(p);
+       viewport.repaint();
+     }
+   }
+ 
+   /**
+    * This class handles ChangeEvents from the JTabbedPane.
+    */
+   public class TabSelectionHandler implements ChangeListener
+   {
+     /**
+      * This method is called whenever a ChangeEvent is fired from the
+      * JTabbedPane.
+      *
+      * @param e The ChangeEvent fired.
+      */
+     public void stateChanged(ChangeEvent e)
+     {
+       selectedRun = getRunForTab(tabPane.getTabCount(),
+                                  tabPane.getSelectedIndex());
+       tabPane.revalidate();
+       tabPane.repaint();
+     }
+   }
+ 
+   /**
+    * This helper class is a JPanel that fits inside the ScrollViewport. This
+    * panel's sole job is to paint the tab rectangles inside the  viewport so
+    * that it's clipped correctly.
+    */
+   private class ScrollingPanel extends JPanel
+   {
+     /**
+      * This is a private UI class for our panel.
+      */
+     private class ScrollingPanelUI extends BasicPanelUI
+     {
+       /**
+        * This method overrides the default paint method. It paints the tab
+        * rectangles for the JTabbedPane in the panel.
+        *
+        * @param g The Graphics object to paint with.
+        * @param c The JComponent to paint.
+        */
+       public void paint(Graphics g, JComponent c)
+       {
+ 	paintTabArea(g, tabPane.getTabPlacement(), tabPane.getSelectedIndex());
+       }
+     }
+ 
+     /**
+      * This method overrides the updateUI method. It makes the default UI for
+      * this ScrollingPanel to be  a ScrollingPanelUI.
+      */
+     public void updateUI()
+     {
+       setUI((PanelUI) new ScrollingPanelUI());
+     }
+   }
+ 
+   /**
+    * This is a helper class that paints the panel that paints tabs. This
+    * custom JViewport is used so that the tabs painted in the panel will be
+    * clipped. This class implements UIResource so tabs are not added when
+    * this objects of this class are added to the  JTabbedPane.
+    */
+   private class ScrollingViewport extends JViewport implements UIResource
+   {
+   }
+ 
+   /**
+    * This is a helper class that implements UIResource so it is not added as a
+    * tab when an object of this class is added to the JTabbedPane.
+    */
+   private static class ScrollingButton extends BasicArrowButton
+     implements UIResource
+   {
+     /**
+      * Creates a ScrollingButton given the direction.
+      *
+      * @param dir The direction to point in.
+      */
+     public ScrollingButton(int dir)
+     {
+       super(dir);
+     }
+   }
+ 
+   /** The button that increments the current scroll location. */
+   private transient ScrollingButton incrButton;
+ 
+   /** The button that decrements the current scroll location. */
+   private transient ScrollingButton decrButton;
+ 
+   /** The viewport used to display the tabs. */
+   private transient ScrollingViewport viewport;
+ 
+   /** The panel inside the viewport that paints the tabs. */
+   private transient ScrollingPanel panel;
+ 
+   /** The starting visible tab in the run in SCROLL_TAB_MODE. */
+   private transient int currentScrollLocation;
+ 
+   /** A reusable rectangle. */
+   protected Rectangle calcRect;
+ 
+   /** An array of Rectangles keeping track of the tabs' area and position. */
+   protected Rectangle[] rects;
+ 
+   /** The insets around the content area. */
+   protected Insets contentBorderInsets;
+ 
+   /** The extra insets around the selected tab. */
+   protected Insets selectedTabPadInsets;
+ 
+   /** The insets around the tab area. */
+   protected Insets tabAreaInsets;
+ 
+   /** The insets around each and every tab. */
+   protected Insets tabInsets;
+ 
+   /**
+    * The outer bottom and right edge color for both the tab and content
+    * border.
+    */
+   protected Color darkShadow;
+ 
+   /** The color of the focus outline on the selected tab. */
+   protected Color focus;
+ 
+   /** FIXME: find a use for this. */
+   protected Color highlight;
+ 
+   /** The top and left edge color for both the tab and content border. */
+   protected Color lightHighlight;
+ 
+   /** The inner bottom and right edge color for the tab and content border. */
+   protected Color shadow;
+ 
+   /** The maximum tab height. */
+   protected int maxTabHeight;
+ 
+   /** The maximum tab width. */
+   protected int maxTabWidth;
+ 
+   /** The number of runs in the JTabbedPane. */
+   protected int runCount;
+ 
+   /** The index of the run that the selected index is in. */
+   protected int selectedRun;
+ 
+   /** The amount of space each run overlaps the previous by. */
+   protected int tabRunOverlay;
+ 
+   /** The gap between text and label */
+   protected int textIconGap;
+ 
+   // Keeps track of tab runs.
+   // The organization of this array is as follows (lots of experimentation to
+   // figure this out)
+   // index 0 = furthest away from the component area (aka outer run)
+   // index 1 = closest to component area (aka selected run)
+   // index > 1 = listed in order leading from selected run to outer run.
+   // each int in the array is the tab index + 1 (counting starts at 1)
+   // for the last tab in the run. (same as the rects array)
+ 
+   /** This array keeps track of which tabs are in which run. See above. */
+   protected int[] tabRuns;
+ 
+   /**
+    * This is the keystroke for moving down.
+    *
+    * @deprecated 1.3
+    */
+   protected KeyStroke downKey;
+ 
+   /**
+    * This is the keystroke for moving left.
+    *
+    * @deprecated 1.3
+    */
+   protected KeyStroke leftKey;
+ 
+   /**
+    * This is the keystroke for moving right.
+    *
+    * @deprecated 1.3
+    */
+   protected KeyStroke rightKey;
+ 
+   /**
+    * This is the keystroke for moving up.
+    *
+    * @deprecated 1.3
+    */
+   protected KeyStroke upKey;
+ 
+   /** The listener that listens for focus events. */
+   protected FocusListener focusListener;
+ 
+   /** The listener that listens for mouse events. */
+   protected MouseListener mouseListener;
+ 
+   /** The listener that listens for property change events. */
+   protected PropertyChangeListener propertyChangeListener;
+ 
+   /** The listener that listens for change events. */
+   protected ChangeListener tabChangeListener;
+ 
+   /** The tab pane that this UI paints. */
+   protected JTabbedPane tabPane;
+ 
+   /** The current layout manager for the tabPane. */
+   private transient LayoutManager layoutManager;
+ 
+   /** The rectangle that describes the tab area's position and size. */
+   private transient Rectangle tabAreaRect;
+ 
+   /** The rectangle that describes the content area's position and size. */
+   private transient Rectangle contentRect;
+ 
+   /**
+    * Creates a new BasicTabbedPaneUI object.
+    */
+   public BasicTabbedPaneUI()
+   {
+     super();
+   }
+ 
+   /**
+    * This method creates a ScrollingButton that  points in the appropriate
+    * direction for an increasing button.
+    *
+    * @return The increase ScrollingButton.
+    */
+   private ScrollingButton createIncreaseButton()
+   {
+     if (incrButton == null)
+       incrButton = new ScrollingButton(SwingConstants.NORTH);
+     if (tabPane.getTabPlacement() == SwingConstants.TOP
+         || tabPane.getTabPlacement() == SwingConstants.BOTTOM)
+       incrButton.setDirection(SwingConstants.EAST);
+     else
+       incrButton.setDirection(SwingConstants.SOUTH);
+     return incrButton;
+   }
+ 
+   /**
+    * This method creates a ScrollingButton that points in the appropriate
+    * direction for a decreasing button.
+    *
+    * @return The decrease ScrollingButton.
+    */
+   private ScrollingButton createDecreaseButton()
+   {
+     if (decrButton == null)
+       decrButton = new ScrollingButton(SwingConstants.SOUTH);
+     if (tabPane.getTabPlacement() == SwingConstants.TOP
+         || tabPane.getTabPlacement() == SwingConstants.BOTTOM)
+       decrButton.setDirection(SwingConstants.WEST);
+     else
+       decrButton.setDirection(SwingConstants.NORTH);
+     return decrButton;
+   }
+ 
+   /**
+    * This method finds the point to set the view  position at given the index
+    * of a tab. The tab will be the first visible tab in the run.
+    *
+    * @param index The index of the first visible tab.
+    *
+    * @return The position of the first visible tab.
+    */
+   private Point findPointForIndex(int index)
+   {
+     int tabPlacement = tabPane.getTabPlacement();
+     int selectedIndex = tabPane.getSelectedIndex();
+     Insets insets = getSelectedTabPadInsets(tabPlacement);
+     int w = 0;
+     int h = 0;
+ 
+     if (tabPlacement == TOP || tabPlacement == BOTTOM)
+       {
+ 	if (index > 0)
+ 	  {
+ 	    w += rects[index - 1].x + rects[index - 1].width;
+ 	    if (index > selectedIndex)
+ 	      w -= insets.left + insets.right;
+ 	  }
+       }
+ 
+     else
+       {
+ 	if (index > 0)
+ 	  {
+ 	    h += rects[index - 1].y + rects[index - 1].height;
+ 	    if (index > selectedIndex)
+ 	      h -= insets.top + insets.bottom;
+ 	  }
+       }
+ 
+     Point p = new Point(w, h);
+     return p;
+   }
+ 
+   /**
+    * This method creates a new BasicTabbedPaneUI.
+    *
+    * @param c The JComponent to create a UI for.
+    *
+    * @return A new BasicTabbedPaneUI.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicTabbedPaneUI();
+   }
+ 
+   /**
+    * This method installs the UI for the given JComponent.
+    *
+    * @param c The JComponent to install the UI for.
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+     if (c instanceof JTabbedPane)
+       {
+ 	tabPane = (JTabbedPane) c;
+ 
+ 	installComponents();
+ 	installDefaults();
+ 	installListeners();
+ 	installKeyboardActions();
+ 
+ 	layoutManager = createLayoutManager();
+ 	tabPane.setLayout(layoutManager);
+ 	tabPane.layout();
+       }
+   }
+ 
+   /**
+    * This method uninstalls the UI for the  given JComponent.
+    *
+    * @param c The JComponent to uninstall the UI for.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     layoutManager = null;
+ 
+     uninstallKeyboardActions();
+     uninstallListeners();
+     uninstallDefaults();
+     uninstallComponents();
+ 
+     tabPane = null;
+   }
+ 
+   /**
+    * This method creates the appropriate layout manager for the JTabbedPane's
+    * current tab layout policy. If the tab layout policy is
+    * SCROLL_TAB_LAYOUT, then all the associated components that need to be
+    * created will be done so now.
+    *
+    * @return A layout manager given the tab layout policy.
+    */
+   protected LayoutManager createLayoutManager()
+   {
+     if (tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT)
+       return new TabbedPaneLayout();
+     else
+       {
+ 	incrButton = createIncreaseButton();
+ 	decrButton = createDecreaseButton();
+ 	viewport = new ScrollingViewport();
+ 	viewport.setLayout(null);
+ 	panel = new ScrollingPanel();
+ 	viewport.setView(panel);
+ 	tabPane.add(incrButton);
+ 	tabPane.add(decrButton);
+ 	tabPane.add(viewport);
+ 	currentScrollLocation = 0;
+ 	decrButton.setEnabled(false);
+ 	panel.addMouseListener(mouseListener);
+ 	incrButton.addMouseListener(mouseListener);
+ 	decrButton.addMouseListener(mouseListener);
+ 	viewport.setBackground(Color.LIGHT_GRAY);
+ 
+ 	return new TabbedPaneScrollLayout();
+       }
+   }
+ 
+   /**
+    * This method installs components for this JTabbedPane.
+    */
+   protected void installComponents()
+   {
+     // Nothing to be done.
+   }
+ 
+   /**
+    * This method uninstalls components for this JTabbedPane.
+    */
+   protected void uninstallComponents()
+   {
+     // Nothing to be done.
+   }
+ 
+   /**
+    * This method installs defaults for the Look and Feel.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     tabPane.setFont(defaults.getFont("TabbedPane.font"));
+     tabPane.setForeground(defaults.getColor("TabbedPane.foreground"));
+     tabPane.setBackground(defaults.getColor("TabbedPane.background"));
+     tabPane.setOpaque(true);
+ 
+     highlight = defaults.getColor("TabbedPane.highlight");
+     lightHighlight = defaults.getColor("TabbedPane.lightHighlight");
+ 
+     shadow = defaults.getColor("TabbedPane.shadow");
+     darkShadow = defaults.getColor("TabbedPane.darkShadow");
+ 
+     focus = defaults.getColor("TabbedPane.focus");
+ 
+     textIconGap = defaults.getInt("TabbedPane.textIconGap");
+     tabRunOverlay = defaults.getInt("TabbedPane.tabRunOverlay");
+ 
+     tabInsets = defaults.getInsets("TabbedPane.tabbedPaneTabInsets");
+     selectedTabPadInsets = defaults.getInsets("TabbedPane.tabbedPaneTabPadInsets");
+     tabAreaInsets = defaults.getInsets("TabbedPane.tabbedPaneTabAreaInsets");
+     contentBorderInsets = defaults.getInsets("TabbedPane.tabbedPaneContentBorderInsets");
+ 
+     calcRect = new Rectangle();
+     tabRuns = new int[10];
+     tabAreaRect = new Rectangle();
+     contentRect = new Rectangle();
+   }
+ 
+   /**
+    * This method uninstalls defaults for the Look and Feel.
+    */
+   protected void uninstallDefaults()
+   {
+     calcRect = null;
+     tabAreaRect = null;
+     contentRect = null;
+     tabRuns = null;
+ 
+     contentBorderInsets = null;
+     tabAreaInsets = null;
+     selectedTabPadInsets = null;
+     tabInsets = null;
+ 
+     focus = null;
+     darkShadow = null;
+     shadow = null;
+     lightHighlight = null;
+     highlight = null;
+ 
+     tabPane.setBackground(null);
+     tabPane.setForeground(null);
+     tabPane.setFont(null);
+   }
+ 
+   /**
+    * This method creates and installs the listeners for this UI.
+    */
+   protected void installListeners()
+   {
+     mouseListener = createMouseListener();
+     tabChangeListener = createChangeListener();
+     propertyChangeListener = createPropertyChangeListener();
+     focusListener = createFocusListener();
+ 
+     tabPane.addMouseListener(mouseListener);
+     tabPane.addChangeListener(tabChangeListener);
+     tabPane.addPropertyChangeListener(propertyChangeListener);
+     tabPane.addFocusListener(focusListener);
+   }
+ 
+   /**
+    * This method removes and nulls the listeners for this UI.
+    */
+   protected void uninstallListeners()
+   {
+     tabPane.removeFocusListener(focusListener);
+     tabPane.removePropertyChangeListener(propertyChangeListener);
+     tabPane.removeChangeListener(tabChangeListener);
+     tabPane.removeMouseListener(mouseListener);
+ 
+     focusListener = null;
+     propertyChangeListener = null;
+     tabChangeListener = null;
+     mouseListener = null;
+   }
+ 
+   /**
+    * This method creates a new MouseListener.
+    *
+    * @return A new MouseListener.
+    */
+   protected MouseListener createMouseListener()
+   {
+     return new MouseHandler();
+   }
+ 
+   /**
+    * This method creates a new FocusListener.
+    *
+    * @return A new FocusListener.
+    */
+   protected FocusListener createFocusListener()
+   {
+     return new FocusHandler();
+   }
+ 
+   /**
+    * This method creates a new ChangeListener.
+    *
+    * @return A new ChangeListener.
+    */
+   protected ChangeListener createChangeListener()
+   {
+     return new TabSelectionHandler();
+   }
+ 
+   /**
+    * This method creates a new PropertyChangeListener.
+    *
+    * @return A new PropertyChangeListener.
+    */
+   protected PropertyChangeListener createPropertyChangeListener()
+   {
+     return new PropertyChangeHandler();
+   }
+ 
+   /**
+    * This method installs keyboard actions for the JTabbedPane.
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: Implement.
+   }
+ 
+   /**
+    * This method uninstalls keyboard actions for the JTabbedPane.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: Implement.
+   }
+ 
+   /**
+    * This method returns the preferred size of the JTabbedPane.
+    *
+    * @param c The JComponent to find a size for.
+    *
+    * @return The preferred size.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     return layoutManager.preferredLayoutSize(tabPane);
+   }
+ 
+   /**
+    * This method returns the minimum size of the JTabbedPane.
+    *
+    * @param c The JComponent to find a size for.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return layoutManager.minimumLayoutSize(tabPane);
+   }
+ 
+   /**
+    * This method returns the maximum size of the JTabbedPane.
+    *
+    * @param c The JComponent to find a size for.
+    *
+    * @return The maximum size.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method paints the JTabbedPane.
+    *
+    * @param g The Graphics object to paint with.
+    * @param c The JComponent to paint.
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     if (tabPane.getTabCount() == 0)
+       return;
+     if (tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT)
+       paintTabArea(g, tabPane.getTabPlacement(), tabPane.getSelectedIndex());
+     paintContentBorder(g, tabPane.getTabPlacement(), tabPane.getSelectedIndex());
+   }
+ 
+   /**
+    * This method paints the tab area. This includes painting the rectangles
+    * that make up the tabs.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param selectedIndex The selected index.
+    */
+   protected void paintTabArea(Graphics g, int tabPlacement, int selectedIndex)
+   {
+     Rectangle ir = new Rectangle();
+     Rectangle tr = new Rectangle();
+ 
+     boolean isScroll = tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT;
+ 
+     // Please note: the ordering of the painting is important. 
+     // we WANT to paint the outermost run first and then work our way in.
+     int tabCount = tabPane.getTabCount();
+     int currRun = 1;
+     if (tabCount < 1)
+       return;
+ 
+     if (runCount > 1)
+       currRun = 0;
+     for (int i = 0; i < runCount; i++)
+       {
+ 	int first = lastTabInRun(tabCount, getPreviousTabRun(currRun)) + 1;
+ 	if (isScroll)
+ 	  first = currentScrollLocation;
+ 	else if (first == tabCount)
+ 	  first = 0;
+ 	int last = lastTabInRun(tabCount, currRun);
+ 	if (isScroll)
+ 	  {
+ 	    for (int k = first; k < tabCount; k++)
+ 	      {
+ 		if (rects[k].x + rects[k].width - rects[first].x > viewport
+ 		                                                   .getWidth())
+ 		  {
+ 		    last = k;
+ 		    break;
+ 		  }
+ 	      }
+ 	  }
+ 
+ 	for (int j = first; j <= last; j++)
+ 	  {
+ 	    if (j != selectedIndex || isScroll)
+ 	      paintTab(g, tabPlacement, rects, j, ir, tr);
+ 	  }
+ 	currRun = getPreviousTabRun(currRun);
+       }
+     if (! isScroll)
+       paintTab(g, tabPlacement, rects, selectedIndex, ir, tr);
+   }
+ 
+   /**
+    * This method paints an individual tab.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param rects The array of rectangles that keep the size and position of
+    *        the tabs.
+    * @param tabIndex The tab index to paint.
+    * @param iconRect The rectangle to use for the icon.
+    * @param textRect The rectangle to use for the text.
+    */
+   protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects,
+                           int tabIndex, Rectangle iconRect, Rectangle textRect)
+   {
+     FontMetrics fm = getFontMetrics();
+     Icon icon = getIconForTab(tabIndex);
+     String title = tabPane.getTitleAt(tabIndex);
+     boolean isSelected = tabIndex == tabPane.getSelectedIndex();
+     calcRect = getTabBounds(tabPane, tabIndex);
+ 
+     int x = calcRect.x;
+     int y = calcRect.y;
+     int w = calcRect.width;
+     int h = calcRect.height;
+     if (getRunForTab(tabPane.getTabCount(), tabIndex) == 1)
+       {
+ 	Insets insets = getTabAreaInsets(tabPlacement);
+ 	switch (tabPlacement)
+ 	  {
+ 	  case TOP:
+ 	    h += insets.bottom;
+ 	    break;
+ 	  case LEFT:
+ 	    w += insets.right;
+ 	    break;
+ 	  case BOTTOM:
+ 	    y -= insets.top;
+ 	    h += insets.top;
+ 	    break;
+ 	  case RIGHT:
+ 	    x -= insets.left;
+ 	    w += insets.left;
+ 	    break;
+ 	  }
+       }
+ 
+     layoutLabel(tabPlacement, fm, tabIndex, title, icon, calcRect, iconRect,
+                 textRect, isSelected);
+     paintTabBackground(g, tabPlacement, tabIndex, x, y, w, h, isSelected);
+     paintTabBorder(g, tabPlacement, tabIndex, x, y, w, h, isSelected);
+ 
+     // FIXME: Paint little folding corner and jagged edge clipped tab.
+     if (icon != null)
+       paintIcon(g, tabPlacement, tabIndex, icon, iconRect, isSelected);
+     if (title != null && ! title.equals(""))
+       paintText(g, tabPlacement, tabPane.getFont(), fm, tabIndex, title,
+                 textRect, isSelected);
+   }
+ 
+   /**
+    * This method lays out the tab and finds the location to paint the  icon
+    * and text.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param metrics The font metrics for the font to paint with.
+    * @param tabIndex The tab index to paint.
+    * @param title The string painted.
+    * @param icon The icon painted.
+    * @param tabRect The tab bounds.
+    * @param iconRect The calculated icon bounds.
+    * @param textRect The calculated text bounds.
+    * @param isSelected Whether this tab is selected.
+    */
+   protected void layoutLabel(int tabPlacement, FontMetrics metrics,
+                              int tabIndex, String title, Icon icon,
+                              Rectangle tabRect, Rectangle iconRect,
+                              Rectangle textRect, boolean isSelected)
+   {
+     SwingUtilities.layoutCompoundLabel(metrics, title, icon,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER, tabRect,
+                                        iconRect, textRect, textIconGap);
+ 
+     int shiftX = getTabLabelShiftX(tabPlacement, tabIndex, isSelected);
+     int shiftY = getTabLabelShiftY(tabPlacement, tabIndex, isSelected);
+ 
+     iconRect.x += shiftX;
+     iconRect.y += shiftY;
+ 
+     textRect.x += shiftX;
+     textRect.y += shiftY;
+   }
+ 
+   /**
+    * This method paints the icon.
+    *
+    * @param g The Graphics object to paint.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabIndex The tab index to paint.
+    * @param icon The icon to paint.
+    * @param iconRect The bounds of the icon.
+    * @param isSelected Whether this tab is selected.
+    */
+   protected void paintIcon(Graphics g, int tabPlacement, int tabIndex,
+                            Icon icon, Rectangle iconRect, boolean isSelected)
+   {
+     icon.paintIcon(tabPane, g, iconRect.x, iconRect.y);
+   }
+ 
+   /**
+    * This method paints the text for the given tab.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param font The font to paint with.
+    * @param metrics The fontmetrics of the given font.
+    * @param tabIndex The tab index.
+    * @param title The string to paint.
+    * @param textRect The bounds of the string.
+    * @param isSelected Whether this tab is selected.
+    */
+   protected void paintText(Graphics g, int tabPlacement, Font font,
+                            FontMetrics metrics, int tabIndex, String title,
+                            Rectangle textRect, boolean isSelected)
+   {
+     View textView = getTextViewForTab(tabIndex);
+     if (textView != null)
+       {
+ 	textView.paint(g, textRect);
+ 	return;
+       }
+ 
+     Color fg = tabPane.getForegroundAt(tabIndex);
+     if (fg == null)
+       fg = tabPane.getForeground();
+     Color bg = tabPane.getBackgroundAt(tabIndex);
+     if (bg == null)
+       bg = tabPane.getBackground();
+ 
+     Color saved_color = g.getColor();
+     Font f = g.getFont();
+     g.setFont(font);
+ 
+     if (tabPane.isEnabledAt(tabIndex))
+       {
+ 	g.setColor(fg);
+ 
+ 	int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);
+ 
+ 	if (mnemIndex != -1)
+ 	  BasicGraphicsUtils.drawStringUnderlineCharAt(g, title, mnemIndex,
+ 	                                               textRect.x,
+ 	                                               textRect.y
+ 	                                               + metrics.getAscent());
+ 	else
+ 	  g.drawString(title, textRect.x, textRect.y + metrics.getAscent());
+       }
+     else
+       {
+ 	g.setColor(bg.brighter());
+ 
+ 	int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);
+ 
+ 	if (mnemIndex != -1)
+ 	  BasicGraphicsUtils.drawStringUnderlineCharAt(g, title, mnemIndex,
+ 	                                               textRect.x, textRect.y);
+ 	else
+ 	  g.drawString(title, textRect.x, textRect.y);
+ 
+ 	g.setColor(bg.darker());
+ 	if (mnemIndex != -1)
+ 	  BasicGraphicsUtils.drawStringUnderlineCharAt(g, title, mnemIndex,
+ 	                                               textRect.x + 1,
+ 	                                               textRect.y + 1);
+ 	else
+ 	  g.drawString(title, textRect.x + 1, textRect.y + 1);
+       }
+ 
+     g.setColor(saved_color);
+     g.setFont(f);
+   }
+ 
+   /**
+    * This method returns how much the label for the tab should shift in the X
+    * direction.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabIndex The tab index being painted.
+    * @param isSelected Whether this tab is selected.
+    *
+    * @return The amount the label should shift by in the X direction.
+    */
+   protected int getTabLabelShiftX(int tabPlacement, int tabIndex,
+                                   boolean isSelected)
+   {
+     // No reason to shift.
+     return 0;
+   }
+ 
+   /**
+    * This method returns how much the label for the tab should shift in the Y
+    * direction.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabIndex The tab index being painted.
+    * @param isSelected Whether this tab is selected.
+    *
+    * @return The amount the label should shift by in the Y direction.
+    */
+   protected int getTabLabelShiftY(int tabPlacement, int tabIndex,
+                                   boolean isSelected)
+   {
+     // No reason to shift.
+     return 0;
+   }
+ 
+   /**
+    * This method paints the focus rectangle around the selected tab.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param rects The array of rectangles keeping track of size and position.
+    * @param tabIndex The tab index.
+    * @param iconRect The icon bounds.
+    * @param textRect The text bounds.
+    * @param isSelected Whether this tab is selected.
+    */
+   protected void paintFocusIndicator(Graphics g, int tabPlacement,
+                                      Rectangle[] rects, int tabIndex,
+                                      Rectangle iconRect, Rectangle textRect,
+                                      boolean isSelected)
+   {
+     Color saved = g.getColor();
+     calcRect = iconRect.union(textRect);
+ 
+     g.setColor(focus);
+ 
+     g.drawRect(calcRect.x, calcRect.y, calcRect.width, calcRect.height);
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints the border for an individual tab.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabIndex The tab index.
+    * @param x The x position of the tab.
+    * @param y The y position of the tab.
+    * @param w The width of the tab.
+    * @param h The height of the tab.
+    * @param isSelected Whether the tab is selected.
+    */
+   protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex,
+                                 int x, int y, int w, int h, boolean isSelected)
+   {
+     Color saved = g.getColor();
+ 
+     if (! isSelected || tabPlacement != SwingConstants.TOP)
+       {
+ 	g.setColor(shadow);
+ 	g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1);
+ 	g.setColor(darkShadow);
+ 	g.drawLine(x, y + h, x + w, y + h);
+       }
+ 
+     if (! isSelected || tabPlacement != SwingConstants.LEFT)
+       {
+ 	g.setColor(darkShadow);
+ 	g.drawLine(x + w, y, x + w, y + h);
+ 	g.setColor(shadow);
+ 	g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1);
+       }
+ 
+     if (! isSelected || tabPlacement != SwingConstants.RIGHT)
+       {
+ 	g.setColor(lightHighlight);
+ 	g.drawLine(x, y, x, y + h);
+       }
+ 
+     if (! isSelected || tabPlacement != SwingConstants.BOTTOM)
+       {
+ 	g.setColor(lightHighlight);
+ 	g.drawLine(x, y, x + w, y);
+       }
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints the background for an individual tab.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabIndex The tab index.
+    * @param x The x position of the tab.
+    * @param y The y position of the tab.
+    * @param w The width of the tab.
+    * @param h The height of the tab.
+    * @param isSelected Whether the tab is selected.
+    */
+   protected void paintTabBackground(Graphics g, int tabPlacement,
+                                     int tabIndex, int x, int y, int w, int h,
+                                     boolean isSelected)
+   {
+     Color saved = g.getColor();
+     if (isSelected)
+       g.setColor(Color.LIGHT_GRAY);
+     else
+       {
+ 	Color bg = tabPane.getBackgroundAt(tabIndex);
+ 	if (bg == null)
+ 	  bg = Color.GRAY;
+ 	g.setColor(bg);
+       }
+ 
+     g.fillRect(x, y, w, h);
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints the border around the content area.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param selectedIndex The index of the selected tab.
+    */
+   protected void paintContentBorder(Graphics g, int tabPlacement,
+                                     int selectedIndex)
+   {
+     Insets insets = getContentBorderInsets(tabPlacement);
+     int x = contentRect.x;
+     int y = contentRect.y;
+     int w = contentRect.width;
+     int h = contentRect.height;
+     paintContentBorderTopEdge(g, tabPlacement, selectedIndex, x, y, w, h);
+     paintContentBorderLeftEdge(g, tabPlacement, selectedIndex, x, y, w, h);
+     paintContentBorderBottomEdge(g, tabPlacement, selectedIndex, x, y, w, h);
+     paintContentBorderRightEdge(g, tabPlacement, selectedIndex, x, y, w, h);
+   }
+ 
+   /**
+    * This method paints the top edge of the content border.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param selectedIndex The selected tab index.
+    * @param x The x coordinate for the content area.
+    * @param y The y coordinate for the content area.
+    * @param w The width of the content area.
+    * @param h The height of the content area.
+    */
+   protected void paintContentBorderTopEdge(Graphics g, int tabPlacement,
+                                            int selectedIndex, int x, int y,
+                                            int w, int h)
+   {
+     Color saved = g.getColor();
+     g.setColor(lightHighlight);
+ 
+     int startgap = rects[selectedIndex].x;
+     int endgap = rects[selectedIndex].x + rects[selectedIndex].width;
+ 
+     int diff = 0;
+ 
+     if (tabPlacement == SwingConstants.TOP)
+       {
+ 	if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT)
+ 	  {
+ 	    Point p = findPointForIndex(currentScrollLocation);
+ 	    diff = p.x;
+ 	  }
+ 
+ 	g.drawLine(x, y, startgap - diff, y);
+ 	g.drawLine(endgap - diff, y, x + w, y);
+       }
+     else
+       g.drawLine(x, y, x + w, y);
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints the left edge of the content border.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param selectedIndex The selected tab index.
+    * @param x The x coordinate for the content area.
+    * @param y The y coordinate for the content area.
+    * @param w The width of the content area.
+    * @param h The height of the content area.
+    */
+   protected void paintContentBorderLeftEdge(Graphics g, int tabPlacement,
+                                             int selectedIndex, int x, int y,
+                                             int w, int h)
+   {
+     Color saved = g.getColor();
+     g.setColor(lightHighlight);
+ 
+     int startgap = rects[selectedIndex].y;
+     int endgap = rects[selectedIndex].y + rects[selectedIndex].height;
+ 
+     int diff = 0;
+ 
+     if (tabPlacement == SwingConstants.LEFT)
+       {
+ 	if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT)
+ 	  {
+ 	    Point p = findPointForIndex(currentScrollLocation);
+ 	    diff = p.y;
+ 	  }
+ 
+ 	g.drawLine(x, y, x, startgap - diff);
+ 	g.drawLine(x, endgap - diff, x, y + h);
+       }
+     else
+       g.drawLine(x, y, x, y + h);
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints the bottom edge of the content border.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param selectedIndex The selected tab index.
+    * @param x The x coordinate for the content area.
+    * @param y The y coordinate for the content area.
+    * @param w The width of the content area.
+    * @param h The height of the content area.
+    */
+   protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement,
+                                               int selectedIndex, int x, int y,
+                                               int w, int h)
+   {
+     Color saved = g.getColor();
+ 
+     int startgap = rects[selectedIndex].x;
+     int endgap = rects[selectedIndex].x + rects[selectedIndex].width;
+ 
+     int diff = 0;
+ 
+     if (tabPlacement == SwingConstants.BOTTOM)
+       {
+ 	if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT)
+ 	  {
+ 	    Point p = findPointForIndex(currentScrollLocation);
+ 	    diff = p.x;
+ 	  }
+ 
+ 	g.setColor(shadow);
+ 	g.drawLine(x + 1, y + h - 1, startgap - diff, y + h - 1);
+ 	g.drawLine(endgap - diff, y + h - 1, x + w - 1, y + h - 1);
+ 
+ 	g.setColor(darkShadow);
+ 	g.drawLine(x, y + h, startgap - diff, y + h);
+ 	g.drawLine(endgap - diff, y + h, x + w, y + h);
+       }
+     else
+       {
+ 	g.setColor(shadow);
+ 	g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1);
+ 	g.setColor(darkShadow);
+ 	g.drawLine(x, y + h, x + w, y + h);
+       }
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method paints the right edge of the content border.
+    *
+    * @param g The Graphics object to paint with.
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param selectedIndex The selected tab index.
+    * @param x The x coordinate for the content area.
+    * @param y The y coordinate for the content area.
+    * @param w The width of the content area.
+    * @param h The height of the content area.
+    */
+   protected void paintContentBorderRightEdge(Graphics g, int tabPlacement,
+                                              int selectedIndex, int x, int y,
+                                              int w, int h)
+   {
+     Color saved = g.getColor();
+     int startgap = rects[selectedIndex].y;
+     int endgap = rects[selectedIndex].y + rects[selectedIndex].height;
+ 
+     int diff = 0;
+ 
+     if (tabPlacement == SwingConstants.RIGHT)
+       {
+ 	if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT)
+ 	  {
+ 	    Point p = findPointForIndex(currentScrollLocation);
+ 	    diff = p.y;
+ 	  }
+ 
+ 	g.setColor(shadow);
+ 	g.drawLine(x + w - 1, y + 1, x + w - 1, startgap - diff);
+ 	g.drawLine(x + w - 1, endgap - diff, x + w - 1, y + h - 1);
+ 
+ 	g.setColor(darkShadow);
+ 	g.drawLine(x + w, y, x + w, startgap - diff);
+ 	g.drawLine(x + w, endgap - diff, x + w, y + h);
+       }
+     else
+       {
+ 	g.setColor(shadow);
+ 	g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1);
+ 	g.setColor(darkShadow);
+ 	g.drawLine(x + w, y, x + w, y + h);
+       }
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method returns the tab bounds for the given index.
+    *
+    * @param pane The JTabbedPane.
+    * @param i The index to look for.
+    *
+    * @return The bounds of the tab with the given index.
+    */
+   public Rectangle getTabBounds(JTabbedPane pane, int i)
+   {
+     return rects[i];
+   }
+ 
+   /**
+    * This method returns the number of runs.
+    *
+    * @param pane The JTabbedPane.
+    *
+    * @return The number of runs.
+    */
+   public int getTabRunCount(JTabbedPane pane)
+   {
+     return runCount;
+   }
+ 
+   /**
+    * This method returns the tab index given a coordinate.
+    *
+    * @param pane The JTabbedPane.
+    * @param x The x coordinate.
+    * @param y The y coordinate.
+    *
+    * @return The tab index that the coordinate lands in.
+    */
+   public int tabForCoordinate(JTabbedPane pane, int x, int y)
+   {
+     Point p = new Point(x, y);
+     int tabCount = tabPane.getTabCount();
+     int currRun = 1;
+     for (int i = 0; i < runCount; i++)
+       {
+ 	int first = lastTabInRun(tabCount, getPreviousTabRun(currRun)) + 1;
+ 	if (first == tabCount)
+ 	  first = 0;
+ 	int last = lastTabInRun(tabCount, currRun);
+ 	for (int j = first; j <= last; j++)
+ 	  {
+ 	    if (getTabBounds(pane, j).contains(p))
+ 	      return j;
+ 	  }
+ 	currRun = getNextTabRun(currRun);
+       }
+     return -1;
+   }
+ 
+   /**
+    * This method returns the tab bounds in the given rectangle.
+    *
+    * @param tabIndex The index to get bounds for.
+    * @param dest The rectangle to store bounds in.
+    *
+    * @return The rectangle passed in.
+    */
+   protected Rectangle getTabBounds(int tabIndex, Rectangle dest)
+   {
+     dest.setBounds(getTabBounds(tabPane, tabIndex));
+     return dest;
+   }
+ 
+   /**
+    * This method returns the component that is shown in  the content area.
+    *
+    * @return The component that is shown in the content area.
+    */
+   protected Component getVisibleComponent()
+   {
+     return tabPane.getComponentAt(tabPane.getSelectedIndex());
+   }
+ 
+   /**
+    * This method sets the visible component.
+    *
+    * @param component The component to be set visible.
+    */
+   protected void setVisibleComponent(Component component)
+   {
+     component.setVisible(true);
+     tabPane.setSelectedComponent(component);
+   }
+ 
+   /**
+    * This method assures that enough rectangles are created given the
+    * tabCount. The old array is copied to the  new one.
+    *
+    * @param tabCount The number of tabs.
+    */
+   protected void assureRectsCreated(int tabCount)
+   {
+     if (rects == null)
+       rects = new Rectangle[tabCount];
+     if (tabCount == rects.length)
+       return;
+     else
+       {
+ 	int numToCopy = Math.min(tabCount, rects.length);
+ 	Rectangle[] tmp = new Rectangle[tabCount];
+ 	System.arraycopy(rects, 0, tmp, 0, numToCopy);
+ 	rects = tmp;
+       }
+   }
+ 
+   /**
+    * This method expands the tabRuns array to give it more room. The old array
+    * is copied to the new one.
+    */
+   protected void expandTabRunsArray()
+   {
+     // This method adds another 10 index positions to the tabRuns array.
+     if (tabRuns == null)
+       tabRuns = new int[10];
+     else
+       {
+ 	int[] newRuns = new int[tabRuns.length + 10];
+ 	System.arraycopy(tabRuns, 0, newRuns, 0, tabRuns.length);
+ 	tabRuns = newRuns;
+       }
+   }
+ 
+   /**
+    * This method returns which run a particular tab belongs to.
+    *
+    * @param tabCount The number of tabs.
+    * @param tabIndex The tab to find.
+    *
+    * @return The tabRuns index that it belongs to.
+    */
+   protected int getRunForTab(int tabCount, int tabIndex)
+   {
+     if (runCount == 1 && tabIndex < tabCount && tabIndex >= 0)
+       return 1;
+     for (int i = 0; i < runCount; i++)
+       {
+ 	int first = lastTabInRun(tabCount, getPreviousTabRun(i)) + 1;
+ 	if (first == tabCount)
+ 	  first = 0;
+ 	int last = lastTabInRun(tabCount, i);
+ 	if (last >= tabIndex && first <= tabIndex)
+ 	  return i;
+       }
+     return -1;
+   }
+ 
+   /**
+    * This method returns the index of the last tab in  a run.
+    *
+    * @param tabCount The number of tabs.
+    * @param run The run to check.
+    *
+    * @return The last tab in the given run.
+    */
+   protected int lastTabInRun(int tabCount, int run)
+   {
+     if (tabRuns[run] == 0)
+       return tabCount - 1;
+     else
+       return tabRuns[run] - 1;
+   }
+ 
+   /**
+    * This method returns the tab run overlay.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    *
+    * @return The tab run overlay.
+    */
+   protected int getTabRunOverlay(int tabPlacement)
+   {
+     return tabRunOverlay;
+   }
+ 
+   /**
+    * This method returns the tab run indent. It is used in WRAP_TAB_LAYOUT and
+    * makes each tab run start indented by a certain amount.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param run The run to get indent for.
+    *
+    * @return The amount a run should be indented.
+    */
+   protected int getTabRunIndent(int tabPlacement, int run)
+   {
+     return 0;
+   }
+ 
+   /**
+    * This method returns whether a tab run should be padded.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param run The run to check.
+    *
+    * @return Whether the given run should be padded.
+    */
+   protected boolean shouldPadTabRun(int tabPlacement, int run)
+   {
+     return true;
+   }
+ 
+   /**
+    * This method returns whether the tab runs should be rotated.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    *
+    * @return Whether runs should be rotated.
+    */
+   protected boolean shouldRotateTabRuns(int tabPlacement)
+   {
+     return true;
+   }
+ 
+   /**
+    * This method returns an icon for the tab. If the tab is disabled, it
+    * should return the disabledIcon. If it is enabled, then it should return
+    * the default icon.
+    *
+    * @param tabIndex The tab index to get an icon for.
+    *
+    * @return The icon for the tab index.
+    */
+   protected Icon getIconForTab(int tabIndex)
+   {
+     if (tabPane.isEnabledAt(tabIndex))
+       return tabPane.getIconAt(tabIndex);
+     else
+       return tabPane.getDisabledIconAt(tabIndex);
+   }
+ 
+   /**
+    * This method returns a view that can paint the text for the label.
+    *
+    * @param tabIndex The tab index to get a view for.
+    *
+    * @return The view for the tab index.
+    */
+   protected View getTextViewForTab(int tabIndex)
+   {
+     return null;
+   }
+ 
+   /**
+    * This method returns the tab height, including insets, for the given index
+    * and fontheight.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabIndex The index of the tab to calculate.
+    * @param fontHeight The font height.
+    *
+    * @return This tab's height.
+    */
+   protected int calculateTabHeight(int tabPlacement, int tabIndex,
+                                    int fontHeight)
+   {
+     Icon icon = getIconForTab(tabIndex);
+     Insets insets = getTabInsets(tabPlacement, tabIndex);
+ 
+     if (icon != null)
+       {
+ 	Rectangle vr = new Rectangle();
+ 	Rectangle ir = new Rectangle();
+ 	Rectangle tr = new Rectangle();
+ 	layoutLabel(tabPlacement, getFontMetrics(), tabIndex,
+ 	            tabPane.getTitleAt(tabIndex), icon, vr, ir, tr,
+ 	            tabIndex == tabPane.getSelectedIndex());
+ 	calcRect = tr.union(ir);
+       }
+     else
+       calcRect.height = fontHeight;
+ 
+     calcRect.height += insets.top + insets.bottom;
+     return calcRect.height;
+   }
+ 
+   /**
+    * This method returns the max tab height.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    *
+    * @return The maximum tab height.
+    */
+   protected int calculateMaxTabHeight(int tabPlacement)
+   {
+     maxTabHeight = 0;
+ 
+     FontMetrics fm = getFontMetrics();
+     int fontHeight = fm.getHeight();
+ 
+     for (int i = 0; i < tabPane.getTabCount(); i++)
+       maxTabHeight = Math.max(calculateTabHeight(tabPlacement, i, fontHeight),
+                               maxTabHeight);
+ 
+     return maxTabHeight;
+   }
+ 
+   /**
+    * This method calculates the tab width, including insets, for the given tab
+    * index and font metrics.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabIndex The tab index to calculate for.
+    * @param metrics The font's metrics.
+    *
+    * @return The tab width for the given index.
+    */
+   protected int calculateTabWidth(int tabPlacement, int tabIndex,
+                                   FontMetrics metrics)
+   {
+     Icon icon = getIconForTab(tabIndex);
+     Insets insets = getTabInsets(tabPlacement, tabIndex);
+ 
+     if (icon != null)
+       {
+ 	Rectangle vr = new Rectangle();
+ 	Rectangle ir = new Rectangle();
+ 	Rectangle tr = new Rectangle();
+ 	layoutLabel(tabPlacement, getFontMetrics(), tabIndex,
+ 	            tabPane.getTitleAt(tabIndex), icon, vr, ir, tr,
+ 	            tabIndex == tabPane.getSelectedIndex());
+ 	calcRect = tr.union(ir);
+       }
+     else
+       calcRect.width = metrics.stringWidth(tabPane.getTitleAt(tabIndex));
+ 
+     calcRect.width += insets.left + insets.right;
+     return calcRect.width;
+   }
+ 
+   /**
+    * This method calculates the max tab width.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    *
+    * @return The maximum tab width.
+    */
+   protected int calculateMaxTabWidth(int tabPlacement)
+   {
+     maxTabWidth = 0;
+ 
+     FontMetrics fm = getFontMetrics();
+ 
+     for (int i = 0; i < tabPane.getTabCount(); i++)
+       maxTabWidth = Math.max(calculateTabWidth(tabPlacement, i, fm),
+                              maxTabWidth);
+ 
+     return maxTabWidth;
+   }
+ 
+   /**
+    * This method calculates the tab area height, including insets, for the
+    * given amount of runs and tab height.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param horizRunCount The number of runs.
+    * @param maxTabHeight The max tab height.
+    *
+    * @return The tab area height.
+    */
+   protected int calculateTabAreaHeight(int tabPlacement, int horizRunCount,
+                                        int maxTabHeight)
+   {
+     Insets insets = getTabAreaInsets(tabPlacement);
+     int tabAreaHeight = horizRunCount * maxTabHeight
+                         - (horizRunCount - 1) * tabRunOverlay;
+ 
+     tabAreaHeight += insets.top + insets.bottom;
+ 
+     return tabAreaHeight;
+   }
+ 
+   /**
+    * This method calculates the tab area width, including insets, for the
+    * given amount of runs and tab width.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param vertRunCount The number of runs.
+    * @param maxTabWidth The max tab width.
+    *
+    * @return The tab area width.
+    */
+   protected int calculateTabAreaWidth(int tabPlacement, int vertRunCount,
+                                       int maxTabWidth)
+   {
+     Insets insets = getTabAreaInsets(tabPlacement);
+     int tabAreaWidth = vertRunCount * maxTabWidth
+                        - (vertRunCount - 1) * tabRunOverlay;
+ 
+     tabAreaWidth += insets.left + insets.right;
+ 
+     return tabAreaWidth;
+   }
+ 
+   /**
+    * This method returns the tab insets appropriately rotated.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabIndex The tab index.
+    *
+    * @return The tab insets for the given index.
+    */
+   protected Insets getTabInsets(int tabPlacement, int tabIndex)
+   {
+     Insets target = new Insets(0, 0, 0, 0);
+     rotateInsets(tabInsets, target, tabPlacement);
+     return target;
+   }
+ 
+   /**
+    * This method returns the selected tab pad insets appropriately rotated.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    *
+    * @return The selected tab pad insets.
+    */
+   protected Insets getSelectedTabPadInsets(int tabPlacement)
+   {
+     Insets target = new Insets(0, 0, 0, 0);
+     rotateInsets(selectedTabPadInsets, target, tabPlacement);
+     return target;
+   }
+ 
+   /**
+    * This method returns the tab area insets appropriately rotated.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    *
+    * @return The tab area insets.
+    */
+   protected Insets getTabAreaInsets(int tabPlacement)
+   {
+     Insets target = new Insets(0, 0, 0, 0);
+     rotateInsets(tabAreaInsets, target, tabPlacement);
+     return target;
+   }
+ 
+   /**
+    * This method returns the content border insets appropriately rotated.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    *
+    * @return The content border insets.
+    */
+   protected Insets getContentBorderInsets(int tabPlacement)
+   {
+     Insets target = new Insets(0, 0, 0, 0);
+     rotateInsets(contentBorderInsets, target, tabPlacement);
+     return target;
+   }
+ 
+   /**
+    * This method returns the fontmetrics for the font of the JTabbedPane.
+    *
+    * @return The font metrics for the JTabbedPane.
+    */
+   protected FontMetrics getFontMetrics()
+   {
+     FontMetrics fm = tabPane.getToolkit().getFontMetrics(tabPane.getFont());
+     return fm;
+   }
+ 
+   /**
+    * This method navigates from the selected tab into the given direction. As
+    * a result, a new tab will be selected (if possible).
+    *
+    * @param direction The direction to navigate in.
+    */
+   protected void navigateSelectedTab(int direction)
+   {
+     int tabPlacement = tabPane.getTabPlacement();
+     if (tabPlacement == SwingConstants.TOP
+         || tabPlacement == SwingConstants.BOTTOM)
+       {
+ 	if (direction == SwingConstants.WEST)
+ 	  selectPreviousTabInRun(tabPane.getSelectedIndex());
+ 	else if (direction == SwingConstants.EAST)
+ 	  selectNextTabInRun(tabPane.getSelectedIndex());
+ 
+ 	else
+ 	  {
+ 	    int offset = getTabRunOffset(tabPlacement, tabPane.getTabCount(),
+ 	                                 tabPane.getSelectedIndex(),
+ 	                                 (tabPlacement == SwingConstants.RIGHT)
+ 	                                 ? true : false);
+ 	    selectAdjacentRunTab(tabPlacement, tabPane.getSelectedIndex(),
+ 	                         offset);
+ 	  }
+       }
+     if (tabPlacement == SwingConstants.LEFT
+         || tabPlacement == SwingConstants.RIGHT)
+       {
+ 	if (direction == SwingConstants.NORTH)
+ 	  selectPreviousTabInRun(tabPane.getSelectedIndex());
+ 	else if (direction == SwingConstants.SOUTH)
+ 	  selectNextTabInRun(tabPane.getSelectedIndex());
+ 	else
+ 	  {
+ 	    int offset = getTabRunOffset(tabPlacement, tabPane.getTabCount(),
+ 	                                 tabPane.getSelectedIndex(),
+ 	                                 (tabPlacement == SwingConstants.RIGHT)
+ 	                                 ? true : false);
+ 	    selectAdjacentRunTab(tabPlacement, tabPane.getSelectedIndex(),
+ 	                         offset);
+ 	  }
+       }
+   }
+ 
+   /**
+    * This method selects the next tab in the run.
+    *
+    * @param current The current selected index.
+    */
+   protected void selectNextTabInRun(int current)
+   {
+     tabPane.setSelectedIndex(getNextTabIndexInRun(tabPane.getTabCount(),
+                                                   current));
+   }
+ 
+   /**
+    * This method selects the previous tab in the run.
+    *
+    * @param current The current selected index.
+    */
+   protected void selectPreviousTabInRun(int current)
+   {
+     tabPane.setSelectedIndex(getPreviousTabIndexInRun(tabPane.getTabCount(),
+                                                       current));
+   }
+ 
+   /**
+    * This method selects the next tab (regardless of runs).
+    *
+    * @param current The current selected index.
+    */
+   protected void selectNextTab(int current)
+   {
+     tabPane.setSelectedIndex(getNextTabIndex(current));
+   }
+ 
+   /**
+    * This method selects the previous tab (regardless of runs).
+    *
+    * @param current The current selected index.
+    */
+   protected void selectPreviousTab(int current)
+   {
+     tabPane.setSelectedIndex(getPreviousTabIndex(current));
+   }
+ 
+   /**
+    * This method selects the correct tab given an offset from the current tab
+    * index. If the tab placement is TOP or BOTTOM, the offset will be in the
+    * y direction, otherwise, it will be in the x direction. A new coordinate
+    * will be found by adding the offset to the current location of the tab.
+    * The tab that the new location will be selected.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabIndex The tab to start from.
+    * @param offset The coordinate offset.
+    */
+   protected void selectAdjacentRunTab(int tabPlacement, int tabIndex,
+                                       int offset)
+   {
+     int x = rects[tabIndex].x + rects[tabIndex].width / 2;
+     int y = rects[tabIndex].y + rects[tabIndex].height / 2;
+ 
+     switch (tabPlacement)
+       {
+       case SwingConstants.TOP:
+       case SwingConstants.BOTTOM:
+ 	y += offset;
+ 	break;
+       case SwingConstants.RIGHT:
+       case SwingConstants.LEFT:
+ 	x += offset;
+ 	break;
+       }
+ 
+     int index = tabForCoordinate(tabPane, x, y);
+     if (index != -1)
+       tabPane.setSelectedIndex(index);
+   }
+ 
+   // This method is called when you press up/down to cycle through tab runs.
+   // it returns the distance (between the two runs' x/y position.
+   // where one run is the current selected run and the other run is the run in the
+   // direction of the scroll (dictated by the forward flag)
+   // the offset is an absolute value of the difference
+ 
+   /**
+    * This method calculates the offset distance for use in
+    * selectAdjacentRunTab. The offset returned will be a difference in the y
+    * coordinate between the run in  the desired direction and the current run
+    * (for tabPlacement in TOP or BOTTOM). Use x coordinate for LEFT and
+    * RIGHT.
+    *
+    * @param tabPlacement The JTabbedPane's tab placement.
+    * @param tabCount The number of tabs.
+    * @param tabIndex The starting index.
+    * @param forward If forward, the run in the desired direction will be the
+    *        next run.
+    *
+    * @return The offset between the two runs.
+    */
+   protected int getTabRunOffset(int tabPlacement, int tabCount, int tabIndex,
+                                 boolean forward)
+   {
+     int currRun = getRunForTab(tabCount, tabIndex);
+     int offset;
+     int nextRun = (forward) ? getNextTabRun(currRun) : getPreviousTabRun(currRun);
+     if (tabPlacement == SwingConstants.TOP
+         || tabPlacement == SwingConstants.BOTTOM)
+       offset = rects[lastTabInRun(tabCount, nextRun)].y
+                - rects[lastTabInRun(tabCount, currRun)].y;
+     else
+       offset = rects[lastTabInRun(tabCount, nextRun)].x
+                - rects[lastTabInRun(tabCount, currRun)].x;
+     return offset;
+   }
+ 
+   /**
+    * This method returns the previous tab index.
+    *
+    * @param base The index to start from.
+    *
+    * @return The previous tab index.
+    */
+   protected int getPreviousTabIndex(int base)
+   {
+     base--;
+     if (base < 0)
+       return tabPane.getTabCount() - 1;
+     return base;
+   }
+ 
+   /**
+    * This method returns the next tab index.
+    *
+    * @param base The index to start from.
+    *
+    * @return The next tab index.
+    */
+   protected int getNextTabIndex(int base)
+   {
+     base++;
+     if (base == tabPane.getTabCount())
+       return 0;
+     return base;
+   }
+ 
+   /**
+    * This method returns the next tab index in the run. If the next index is
+    * out of this run, it will return the starting tab index for the run.
+    *
+    * @param tabCount The number of tabs.
+    * @param base The index to start from.
+    *
+    * @return The next tab index in the run.
+    */
+   protected int getNextTabIndexInRun(int tabCount, int base)
+   {
+     int index = getNextTabIndex(base);
+     int run = getRunForTab(tabCount, base);
+     if (index == lastTabInRun(tabCount, run) + 1)
+       index = lastTabInRun(tabCount, getPreviousTabRun(run)) + 1;
+     return getNextTabIndex(base);
+   }
+ 
+   /**
+    * This method returns the previous tab index in the run. If the previous
+    * index is out of this run, it will return the last index for the run.
+    *
+    * @param tabCount The number of tabs.
+    * @param base The index to start from.
+    *
+    * @return The previous tab index in the run.
+    */
+   protected int getPreviousTabIndexInRun(int tabCount, int base)
+   {
+     int index = getPreviousTabIndex(base);
+     int run = getRunForTab(tabCount, base);
+     if (index == lastTabInRun(tabCount, getPreviousTabRun(run)))
+       index = lastTabInRun(tabCount, run);
+     return getPreviousTabIndex(base);
+   }
+ 
+   /**
+    * This method returns the index of the previous run.
+    *
+    * @param baseRun The run to start from.
+    *
+    * @return The index of the previous run.
+    */
+   protected int getPreviousTabRun(int baseRun)
+   {
+     if (getTabRunCount(tabPane) == 1)
+       return 1;
+ 
+     int prevRun = --baseRun;
+     if (prevRun < 0)
+       prevRun = getTabRunCount(tabPane) - 1;
+     return prevRun;
+   }
+ 
+   /**
+    * This method returns the index of the next run.
+    *
+    * @param baseRun The run to start from.
+    *
+    * @return The index of the next run.
+    */
+   protected int getNextTabRun(int baseRun)
+   {
+     if (getTabRunCount(tabPane) == 1)
+       return 1;
+ 
+     int nextRun = ++baseRun;
+     if (nextRun == getTabRunCount(tabPane))
+       nextRun = 0;
+     return nextRun;
+   }
+ 
+   /**
+    * This method rotates the insets given a direction to rotate them in.
+    * Target placement should be one of TOP, LEFT, BOTTOM, RIGHT. The  rotated
+    * insets will be stored in targetInsets. Passing in TOP as  the direction
+    * does nothing. Passing in LEFT switches top and left, right and bottom.
+    * Passing in BOTTOM switches top and bottom. Passing in RIGHT switches top
+    * for left, left for bottom, bottom for right, and right for top.
+    *
+    * @param topInsets The reference insets.
+    * @param targetInsets An Insets object to store the new insets.
+    * @param targetPlacement The rotation direction.
+    */
+   protected static void rotateInsets(Insets topInsets, Insets targetInsets,
+                                      int targetPlacement)
+   {
+     // Sun's version will happily throw an NPE if params are null,
+     // so I won't check it either.
+     switch (targetPlacement)
+       {
+       case SwingConstants.TOP:
+ 	targetInsets.top = topInsets.top;
+ 	targetInsets.left = topInsets.left;
+ 	targetInsets.right = topInsets.right;
+ 	targetInsets.bottom = topInsets.bottom;
+ 	break;
+       case SwingConstants.LEFT:
+ 	targetInsets.left = topInsets.top;
+ 	targetInsets.top = topInsets.left;
+ 	targetInsets.right = topInsets.bottom;
+ 	targetInsets.bottom = topInsets.right;
+ 	break;
+       case SwingConstants.BOTTOM:
+ 	targetInsets.top = topInsets.bottom;
+ 	targetInsets.bottom = topInsets.top;
+ 	targetInsets.left = topInsets.left;
+ 	targetInsets.right = topInsets.right;
+ 	break;
+       case SwingConstants.RIGHT:
+ 	targetInsets.top = topInsets.left;
+ 	targetInsets.left = topInsets.bottom;
+ 	targetInsets.bottom = topInsets.right;
+ 	targetInsets.right = topInsets.top;
+ 	break;
+       }
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTableHeaderUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTableHeaderUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTableHeaderUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTableHeaderUI.java	Wed Feb 16 20:02:59 2005
***************
*** 0 ****
--- 1,224 ----
+ /* BasicTableHeaderUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Rectangle;
+ import java.awt.event.MouseEvent;
+ 
+ import javax.swing.CellRendererPane;
+ import javax.swing.JComponent;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.border.Border;
+ import javax.swing.event.MouseInputListener;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.TableHeaderUI;
+ import javax.swing.table.JTableHeader;
+ import javax.swing.table.TableCellRenderer;
+ import javax.swing.table.TableColumn;
+ import javax.swing.table.TableColumnModel;
+ 
+ public class BasicTableHeaderUI
+   extends TableHeaderUI
+ {
+ 
+   public static ComponentUI createUI(JComponent h)
+   {
+     return new BasicTableHeaderUI();
+   }
+ 
+   protected JTableHeader header;
+   protected MouseInputListener mouseInputListener;
+   protected CellRendererPane rendererPane;
+   protected Border cellBorder;
+ 
+   class MouseInputHandler
+     implements MouseInputListener
+   {
+     public void mouseClicked(MouseEvent e) {}
+     public void mouseDragged(MouseEvent e) {}
+     public void mouseEntered(MouseEvent e) {}
+     public void mouseExited(MouseEvent e) {}
+     public void mouseMoved(MouseEvent e) {}
+     public void mousePressed(MouseEvent e) {}
+     public void mouseReleased(MouseEvent e) {}
+   }
+ 
+   protected MouseInputListener createMouseInputListener()
+   {
+     return new MouseInputHandler();
+   }
+ 
+   public BasicTableHeaderUI()
+   {
+     mouseInputListener = createMouseInputListener();
+   }
+ 
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+     header.setBackground(defaults.getColor("TableHeader.background"));
+     header.setForeground(defaults.getColor("TableHeader.foreground"));
+     header.setFont(defaults.getFont("TableHeader.font"));
+     cellBorder = defaults.getBorder("TableHeader.cellBorder");
+   }
+ 
+   protected void installKeyboardActions()
+   {
+   }
+ 
+   protected void installListeners()
+   {
+     header.addMouseListener(mouseInputListener);
+   }
+ 
+   public void installUI(JComponent c)
+   {
+     header = (JTableHeader) c;
+     installDefaults();
+     installKeyboardActions();
+     installListeners();
+   }
+ 
+   protected void uninstallDefaults()
+   {
+     header.setBackground(null);
+     header.setForeground(null);
+     header.setFont(null);
+   }
+ 
+   protected void uninstallKeyboardActions()
+   {
+   }
+ 
+   protected void uninstallListeners()
+   {
+     header.removeMouseListener(mouseInputListener);
+   }
+ 
+   public void uninstallUI(JComponent c)
+   {
+     uninstallListeners();
+     uninstallKeyboardActions();
+     uninstallDefaults();
+   }
+ 
+   public void paint(Graphics gfx, JComponent c)
+   {
+     TableColumnModel cmod = header.getColumnModel();
+     int ncols = cmod.getColumnCount();
+     if (ncols == 0)
+       return;
+     
+     Rectangle clip = gfx.getClipBounds();
+     TableCellRenderer defaultRend = header.getDefaultRenderer();
+ 
+     for (int i = 0; i < ncols; ++i)
+       {
+         Rectangle bounds = header.getHeaderRect(i);
+         if (bounds.intersects(clip))
+           {
+             TableColumn col = cmod.getColumn(i);
+             TableCellRenderer rend = col.getHeaderRenderer();
+             if (rend == null)
+               rend = defaultRend;
+             Object val = col.getHeaderValue();
+             Component comp = rend.getTableCellRendererComponent(header.getTable(),
+                                                                 val,
+                                                                 false, // isSelected
+                                                                 false, // isFocused
+                                                                 -1, i);
+             comp.setFont(header.getFont());
+             comp.setBackground(header.getBackground());
+             comp.setForeground(header.getForeground());
+             if (comp instanceof JComponent)
+               ((JComponent)comp).setBorder(cellBorder);
+             gfx.translate(bounds.x, bounds.y);
+             comp.setSize(bounds.width, bounds.height);
+             comp.setLocation(0,0);
+             comp.paint(gfx);
+             gfx.translate(-bounds.x, -bounds.y);
+           }
+       }
+ 
+   }
+   
+   public Dimension getPreferredSize(JComponent c)
+   {
+     TableColumnModel cmod = header.getColumnModel();
+     TableCellRenderer defaultRend = header.getDefaultRenderer();
+     int ncols = cmod.getColumnCount();    
+     Dimension ret = new Dimension(0,0);
+     int spacing = 0;
+ 
+     if (header.getTable() != null 
+         && header.getTable().getIntercellSpacing() != null)
+       spacing = header.getTable().getIntercellSpacing().width;
+     
+     for (int i = 0; i < ncols; ++i)      
+       {
+         TableColumn col = cmod.getColumn(i);
+         TableCellRenderer rend = col.getHeaderRenderer();
+         if (rend == null)
+           rend = defaultRend;
+         Object val = col.getHeaderValue();
+         Component comp = rend.getTableCellRendererComponent(header.getTable(),
+                                                             val,
+                                                             false, // isSelected
+                                                             false, // isFocused
+                                                             -1, i);
+         comp.setFont(header.getFont());
+         comp.setBackground(header.getBackground());
+         comp.setForeground(header.getForeground());
+         if (comp instanceof JComponent)
+           ((JComponent)comp).setBorder(cellBorder);
+ 
+         Dimension d = comp.getPreferredSize();
+         ret.width += spacing;
+         ret.height = Math.max(d.height, ret.height);        
+       }
+     ret.width = cmod.getTotalColumnWidth();
+     return ret;
+   }
+   
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTableUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTableUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTableUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTableUI.java	Wed Feb 16 20:02:59 2005
***************
*** 0 ****
--- 1,341 ----
+ /* BasicTableUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.event.KeyEvent;
+ import java.awt.event.KeyListener;
+ import java.awt.event.MouseEvent;
+ 
+ import javax.swing.CellRendererPane;
+ import javax.swing.JComponent;
+ import javax.swing.JTable;
+ import javax.swing.ListSelectionModel;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.event.MouseInputListener;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.TableUI;
+ import javax.swing.table.TableCellRenderer;
+ import javax.swing.table.TableColumn;
+ import javax.swing.table.TableColumnModel;
+ 
+ public class BasicTableUI
+   extends TableUI
+ {
+   public static ComponentUI createUI(JComponent comp) 
+   {
+     return new BasicTableUI();
+   }
+ 
+   protected FocusListener focusListener;  
+   protected KeyListener keyListener;   
+   protected MouseInputListener	mouseInputListener;   
+   protected CellRendererPane rendererPane;   
+   protected JTable table;
+ 
+   class FocusHandler implements FocusListener
+   {
+     public void focusGained(FocusEvent e) 
+     {
+     }
+     public void focusLost(FocusEvent e) 
+     {
+     }
+   }
+ 
+   class KeyHandler implements KeyListener
+   {
+     public void keyPressed(KeyEvent e) 
+     {
+     }
+     public void keyReleased(KeyEvent e) 
+     {
+     }
+     public void keyTyped(KeyEvent e) 
+     {
+     }
+   }
+ 
+   class MouseInputHandler implements MouseInputListener
+   {
+     Point begin, curr;
+ 
+     private void updateSelection()
+     {
+       if (table.getRowSelectionAllowed())
+         {
+           int lo_row = table.rowAtPoint(begin);
+           int hi_row  = table.rowAtPoint(curr);
+           ListSelectionModel rowModel = table.getSelectionModel();
+           if (lo_row != -1 && hi_row != -1)
+             rowModel.setSelectionInterval(lo_row, hi_row);
+         }
+ 
+       if (table.getColumnSelectionAllowed())
+         {
+           int lo_col = table.columnAtPoint(begin);
+           int hi_col = table.columnAtPoint(curr);
+           ListSelectionModel colModel = table.getColumnModel().getSelectionModel();
+           if (lo_col != -1 && hi_col != -1)
+             colModel.setSelectionInterval(lo_col, hi_col);
+         }
+     }
+ 
+     public void mouseClicked(MouseEvent e) 
+     {
+     }
+     public void mouseDragged(MouseEvent e) 
+     {
+       curr = new Point(e.getX(), e.getY());
+       updateSelection();      
+     }
+     public void mouseEntered(MouseEvent e) 
+     {
+     }
+     public void mouseExited(MouseEvent e) 
+     {
+     }
+     public void mouseMoved(MouseEvent e) 
+     {
+     }
+     public void mousePressed(MouseEvent e) 
+     {
+       begin = new Point(e.getX(), e.getY());
+       curr = new Point(e.getX(), e.getY());
+       updateSelection();
+     }
+     public void mouseReleased(MouseEvent e) 
+     {
+       begin = null;
+       curr = null;
+     }
+   }
+ 
+   protected FocusListener createFocusListener() 
+   {
+     return new FocusHandler();
+   }
+   protected KeyListener createKeyListener() 
+   {
+     return new KeyHandler();
+   }
+   protected MouseInputListener createMouseInputListener() 
+   {
+     return new MouseInputHandler();
+   }
+ 
+   public Dimension getMaximumSize(JComponent comp) 
+   {
+     return getPreferredSize(comp);
+   }
+ 
+   public Dimension getMinimumSize(JComponent comp) 
+   {
+     return getPreferredSize(comp);
+   }
+ 
+   public Dimension getPreferredSize(JComponent comp) 
+   {
+     int width = table.getColumnModel().getTotalColumnWidth();
+     int height = table.getRowCount() * table.getRowHeight();
+     return new Dimension(width, height);
+   }
+ 
+   protected void installDefaults() 
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+     table.setFont(defaults.getFont("Table.font"));
+     table.setGridColor(defaults.getColor("Table.gridColor"));
+     table.setForeground(defaults.getColor("Table.foreground"));
+     table.setBackground(defaults.getColor("Table.background"));
+     table.setSelectionForeground(defaults.getColor("Table.selectionForeground"));
+     table.setSelectionBackground(defaults.getColor("Table.selectionBackground"));
+     table.setOpaque(true);
+   }
+   protected void installKeyboardActions() 
+   {
+   }
+ 
+   protected void installListeners() 
+   {
+     table.addFocusListener(focusListener);  
+     table.addKeyListener(keyListener);
+     table.addMouseListener(mouseInputListener);    
+   }
+ 
+   protected void uninstallDefaults() 
+   {
+     table.setFont(null);
+     table.setGridColor(null);
+     table.setForeground(null);
+     table.setBackground(null);
+     table.setSelectionForeground(null);
+     table.setSelectionBackground(null);
+   }
+ 
+   protected void uninstallKeyboardActions() 
+   {
+   }
+ 
+   protected void uninstallListeners() 
+   {
+     table.removeFocusListener(focusListener);  
+     table.removeKeyListener(keyListener);
+     table.removeMouseListener(mouseInputListener);    
+   }
+ 
+   public void installUI(JComponent comp) 
+   {
+     table = (JTable)comp;
+     focusListener = createFocusListener();  
+     keyListener = createKeyListener();
+     mouseInputListener = createMouseInputListener();
+     installDefaults();
+     installKeyboardActions();
+     installListeners();
+   }
+ 
+   public void uninstallUI(JComponent c) 
+   {
+     uninstallListeners();
+     uninstallKeyboardActions();
+     uninstallDefaults();    
+   }
+ 
+   public void paint(Graphics gfx, JComponent ignored) 
+   {
+     int ncols = table.getColumnCount();
+     int nrows = table.getRowCount();
+     if (nrows == 0 || ncols == 0)
+       return;
+ 
+     Rectangle clip = gfx.getClipBounds();
+     TableColumnModel cols = table.getColumnModel();
+ 
+     int height = table.getRowHeight();
+     int x0 = 0, y0 = 0;
+     int x = x0;
+     int y = y0;
+ 
+     Dimension gap = table.getIntercellSpacing();
+     int ymax = clip.y + clip.height;
+     int xmax = clip.x + clip.width;
+ 
+     // paint the cell contents
+     for (int c = 0; c < ncols && x < xmax; ++c)
+       {
+         y = y0;
+         TableColumn col = cols.getColumn(c);
+         int width = col.getWidth();
+         int modelCol = col.getModelIndex();
+ 
+         for (int r = 0; r < nrows && y < ymax; ++r)
+           {
+             Rectangle bounds = new Rectangle(x, y, width, height);
+               if (bounds.intersects(clip))
+               {
+                 TableCellRenderer rend = table.getCellRenderer(r, c);
+                 Component comp = table.prepareRenderer(rend, r, c);
+                 gfx.translate(x, y);
+                 comp.setBounds(new Rectangle(0, 0, width, height));
+                 comp.paint(gfx);
+                 gfx.translate(-x, -y);
+               }
+               y += height;
+               if (gap != null)
+                 y += gap.height;
+           }
+         x += width;
+         if (gap != null)
+           x += gap.width;
+       }
+ 
+     // tighten up the x and y max bounds
+     ymax = y;
+     xmax = x;
+ 
+     Color grid = table.getGridColor();    
+ 
+     // paint vertical grid lines    
+     if (grid != null && table.getShowVerticalLines())
+       {    
+         x = x0;
+         Color save = gfx.getColor();
+         gfx.setColor(grid);
+         boolean paintedLine = false;
+         for (int c = 0; c < ncols && x < xmax; ++c)
+           {
+             x += cols.getColumn(c).getWidth();;
+             if (gap != null)
+               x += gap.width;
+             gfx.drawLine(x, y0, x, ymax);
+             paintedLine = true;
+           }
+         gfx.setColor(save);
+       }
+ 
+     // paint horizontal grid lines    
+     if (grid != null && table.getShowHorizontalLines())
+       {    
+         y = y0;
+         Color save = gfx.getColor();
+         gfx.setColor(grid);
+         boolean paintedLine = false;
+         for (int r = 0; r < nrows && y < ymax; ++r)
+           {
+             y += height;
+             if (gap != null)
+               y += gap.height;
+             gfx.drawLine(x0, y, xmax, y);
+             paintedLine = true;
+           }
+         gfx.setColor(save);
+       }
+ 
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTextAreaUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTextAreaUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTextAreaUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTextAreaUI.java	Tue Nov 30 23:59:06 2004
***************
*** 0 ****
--- 1,68 ----
+ /* BasicTextAreaUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ 
+ import javax.swing.JComponent;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.text.Element;
+ import javax.swing.text.PlainView;
+ import javax.swing.text.View;
+ 
+ public class BasicTextAreaUI extends BasicTextUI
+ {
+   public static ComponentUI createUI(JComponent comp)
+   {
+     return new BasicTextAreaUI();
+   }
+ 
+   public BasicTextAreaUI()
+   {
+   }
+ 
+   public View create(Element elem)
+   {
+     return new PlainView(elem);
+   }
+ 
+   protected String getPropertyPrefix()
+   {
+     return "TextArea";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTextFieldUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTextFieldUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTextFieldUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTextFieldUI.java	Tue Nov 30 23:59:06 2004
***************
*** 0 ****
--- 1,80 ----
+ /* BasicTextFieldUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.beans.PropertyChangeEvent;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.text.Element;
+ import javax.swing.text.FieldView;
+ import javax.swing.text.View;
+ 
+ public class BasicTextFieldUI extends BasicTextUI
+ {
+   public BasicTextFieldUI()
+   {
+     super();
+   }
+ 
+   public View create(Element elem)
+   {
+     return new FieldView(elem);
+   }
+   
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicTextFieldUI();
+   }
+ 
+   protected String getPropertyPrefix()
+   {
+     return "TextField";
+   }
+ 
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+   }
+ 
+   protected void propertyChange(PropertyChangeEvent event)
+   {
+     // Does nothing by default.
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTextPaneUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTextPaneUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTextPaneUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTextPaneUI.java	Wed Feb 16 20:03:00 2005
***************
*** 0 ****
--- 1,68 ----
+ /* BasicTextPaneUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.text.Element;
+ import javax.swing.text.PlainView;
+ import javax.swing.text.View;
+ 
+ public class BasicTextPaneUI extends BasicEditorPaneUI
+ {
+   public BasicTextPaneUI()
+   {
+     // Do nothing here.
+   }
+ 
+   public static ComponentUI createUI(JComponent comp)
+   {
+     return new BasicTextPaneUI();
+   }
+ 
+   public View create(Element elem)
+   {
+     return new PlainView(elem);
+   }
+ 
+   protected String getPropertyPrefix()
+   {
+     return "TextPane";
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTextUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTextUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTextUI.java	Sun Jul 13 15:29:11 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTextUI.java	Wed Feb 16 20:03:00 2005
***************
*** 1,5 ****
! /* BasicTextUI.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BasicTextUI.java --
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,189 ****
  
  package javax.swing.plaf.basic;
  
! import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.Graphics;
  import java.awt.Point;
  import java.awt.Rectangle;
  import javax.swing.JComponent;
! import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.TextUI;
  import javax.swing.text.BadLocationException;
  import javax.swing.text.DefaultEditorKit;
  import javax.swing.text.EditorKit;
  import javax.swing.text.Element;
  import javax.swing.text.JTextComponent;
  import javax.swing.text.Position;
  import javax.swing.text.View;
  import javax.swing.text.ViewFactory;
  
! public class BasicTextUI extends TextUI
    implements ViewFactory
  {
!     int gap = 3;
!     View view = null; // was: new RootView();
!     Color textColor, disabledTextColor, normalBackgroundColor;
!     EditorKit kit = new DefaultEditorKit();
!     
!     /* *****************************************************************
!      * This View is way too incomplete to be of any use. To avoid errors
!      * when compiling with the Sun JDK, it has been commented out.
!      *                            -- Sascha Brawer (brawer@dandelis.ch)
!      *
!      * (begin of commented out section)
!     class RootView extends View
!     {
! 	RootView()
! 	{
! 	    super(null);
! 	}
!         public void paint(Graphics g, Shape s)
! 	{
! 	    if (view != null)
! 		{
! 		    Rectangle r = s.getBounds();
! 
! 		    view.setSize((int)r.getWidth(),
! 				 (int)r.getHeight());
! 		    view.paint(g, s);
! 		}
!         }
!     }
!     * (end of commented out section)
!     *************************************************************** */
! 
!     public BasicTextUI()
      {
      }
  
!     public static ComponentUI createUI(final JComponent c) 
      {
- 	return new BasicTextUI();
      }
! 
      
!     public void installUI(final JComponent c) 
      {
! 	super.installUI(c);
! 
! 	textColor                = new Color(0,0,0);
! 	disabledTextColor        = new Color(130, 130, 130);
! 	normalBackgroundColor    = new Color(192,192,192);
      }
-     
-     public Dimension getPreferredSize(JComponent c) 
-     {
- 	JTextComponent b = (JTextComponent) c;
- 
- 	View v = getRootView(b);
  
! 	float w = v.getPreferredSpan(View.X_AXIS);
! 	float h = v.getPreferredSpan(View.Y_AXIS);
! 
! 	return new Dimension((int)w, (int) h);
!     }
!     
  
!     public void paint(Graphics g, JComponent c)
!     {      
! 	//	view.paint(
      }
  
!     public void damageRange(JTextComponent t, int p0, int p1)
      {
! 	damageRange(t, p0, p1, null, null);
!     }    
  
!     public void damageRange(JTextComponent t, 
! 		     int p0, int p1, 
! 		     Position.Bias firstBias,
! 		     Position.Bias secondBias)
!     {
      }
  
!     public EditorKit getEditorKit(JTextComponent t)
!     {
! 	return kit;
!     }
!     
!     public int getNextVisualPositionFrom(JTextComponent t, 
! 				  int pos,
! 				  Position.Bias b, 
! 				  int direction,
! 				  Position.Bias[] biasRet)
!         throws BadLocationException
      {
! 	return 0;
      }
      
!     public View getRootView(JTextComponent t)
      {
! 	return view;
      }
!     
!     public Rectangle modelToView(JTextComponent t, int pos)
!       throws BadLocationException
      {
! 	return modelToView(t, pos, null);
      }
!     
!     public Rectangle modelToView(JTextComponent t, int pos, Position.Bias bias)
        throws BadLocationException
      {
  	return null;
      }
!     
!     public int viewToModel(JTextComponent t, Point pt)
      {
! 	return viewToModel(t, pt, null);
      }
      
!     public int viewToModel(JTextComponent t, Point pt, Position.Bias[] biasReturn)
!     {
! 	return 0;
!     } 
  
!   public View create (Element elem)
    {
!     // subclasses have to implement this to get this functionality
      return null;
    }
  }
--- 38,496 ----
  
  package javax.swing.plaf.basic;
  
! import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.Graphics;
+ import java.awt.Insets;
  import java.awt.Point;
  import java.awt.Rectangle;
+ import java.awt.Shape;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ 
+ import javax.swing.Action;
+ import javax.swing.ActionMap;
+ import javax.swing.InputMap;
  import javax.swing.JComponent;
! import javax.swing.SwingUtilities;
! import javax.swing.UIDefaults;
! import javax.swing.UIManager;
  import javax.swing.plaf.TextUI;
+ import javax.swing.plaf.UIResource;
  import javax.swing.text.BadLocationException;
+ import javax.swing.text.Caret;
+ import javax.swing.text.DefaultCaret;
  import javax.swing.text.DefaultEditorKit;
+ import javax.swing.text.DefaultHighlighter;
+ import javax.swing.text.Document;
  import javax.swing.text.EditorKit;
  import javax.swing.text.Element;
+ import javax.swing.text.Highlighter;
  import javax.swing.text.JTextComponent;
+ import javax.swing.text.Keymap;
+ import javax.swing.text.PlainView;
  import javax.swing.text.Position;
  import javax.swing.text.View;
  import javax.swing.text.ViewFactory;
  
! 
! public abstract class BasicTextUI extends TextUI
    implements ViewFactory
  {
!   public static class BasicCaret extends DefaultCaret
!     implements UIResource
!   {
!     public BasicCaret()
      {
      }
+   }
  
!   public static class BasicHighlighter extends DefaultHighlighter
!     implements UIResource
!   {
!     public BasicHighlighter()
      {
      }
!   }
!   
!   private class RootView extends View
!   {
!     private View view;
      
!     public RootView()
      {
!       super(null);
      }
  
!     // View methods.
  
!     public ViewFactory getViewFactory()
!     {
!       // FIXME: Handle EditorKit somehow.
!       return BasicTextUI.this;
      }
  
!     public void setView(View v)
      {
!       if (view != null)
! 	view.setParent(null);
!       
!       if (v != null)
! 	v.setParent(null);
  
!       view = v;
      }
  
!     public Container getContainer()
      {
!       return textComponent;
      }
      
!     public float getPreferredSpan(int axis)
      {
!       if (view != null)
! 	return view.getPreferredSpan(axis);
! 
!       return Integer.MAX_VALUE;
      }
! 
!     public void paint(Graphics g, Shape s)
      {
!       if (view != null)
! 	view.paint(g, s);
      }
! 
!     public Shape modelToView(int position, Shape a, Position.Bias bias)
        throws BadLocationException
      {
+       if (view == null)
  	return null;
+       
+       return ((PlainView) view).modelToView(position, a, bias).getBounds();
      }
!   }
! 
!   class UpdateHandler implements PropertyChangeListener
!   {
!     public void propertyChange(PropertyChangeEvent event)
      {
!       if (event.getPropertyName().equals("document"))
! 	{
!           // Document changed.
! 	  modelChanged();
! 	}
      }
+   }
+   
+   static EditorKit kit = new DefaultEditorKit();
+ 
+   RootView rootView = new RootView();
+   JTextComponent textComponent;
+   UpdateHandler updateHandler = new UpdateHandler();
+ 
+   public BasicTextUI()
+   {
+   }
+ 
+   protected Caret createCaret()
+   {
+     return new BasicCaret();
+   }
+ 
+   protected Highlighter createHighlighter()
+   {
+     return new BasicHighlighter();
+   }
+   
+   protected final JTextComponent getComponent()
+   {
+     return textComponent;
+   }
+   
+   public void installUI(final JComponent c)
+   {
+     super.installUI(c);
+     c.setOpaque(true);
+ 
+     textComponent = (JTextComponent) c;
+ 
+     Document doc = textComponent.getDocument();
+     if (doc == null)
+       {
+ 	doc = getEditorKit(textComponent).createDefaultDocument();
+ 	textComponent.setDocument(doc);
+       }
      
!     textComponent.addPropertyChangeListener(updateHandler);
!     modelChanged();
!     
!     installDefaults();
!     installListeners();
!     installKeyboardActions();
!   }
  
!   protected void installDefaults()
    {
!     Caret caret = textComponent.getCaret();
!     if (caret == null)
!       {
!         caret = createCaret();
!         textComponent.setCaret(caret);
!       }
! 
!     Highlighter highlighter = textComponent.getHighlighter();
!     if (highlighter == null)
!       textComponent.setHighlighter(createHighlighter());
! 
!     String prefix = getPropertyPrefix();
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!     textComponent.setBackground(defaults.getColor(prefix + ".background"));
!     textComponent.setForeground(defaults.getColor(prefix + ".foreground"));
!     textComponent.setMargin(defaults.getInsets(prefix + ".margin"));
!     textComponent.setBorder(defaults.getBorder(prefix + ".border"));
!     textComponent.setFont(defaults.getFont(prefix + ".font"));
! 
!     caret.setBlinkRate(defaults.getInt(prefix + ".caretBlinkRate"));
!   }
! 
!   private FocusListener focuslistener = new FocusListener() {
!       public void focusGained(FocusEvent e) 
!       {
!         textComponent.repaint();
!       }
!       public void focusLost(FocusEvent e)
!       {
!         textComponent.repaint();
!       }
!     };
! 
!   protected void installListeners()
!   {
!     textComponent.addFocusListener(focuslistener);
!   }
! 
!   protected String getKeymapName()
!   {
!     return "BasicTextUI";
!   }
! 
!   protected Keymap createKeymap()
!   {
!     String prefix = getPropertyPrefix();
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!     JTextComponent.KeyBinding[] bindings = 
!       (JTextComponent.KeyBinding[]) defaults.get(prefix + ".keyBindings");
!     Keymap km = JTextComponent.addKeymap(getKeymapName(), 
!                                          JTextComponent.getKeymap(JTextComponent.DEFAULT_KEYMAP));    
!     JTextComponent.loadKeymap(km, bindings, textComponent.getActions());
!     return km;    
!   }
! 
!   protected void installKeyboardActions()
!   {    
!     // load any bindings for the older Keymap interface
!     Keymap km = JTextComponent.getKeymap(getKeymapName());
!     if (km == null)
!       km = createKeymap();
!     textComponent.setKeymap(km);
! 
!     // load any bindings for the newer InputMap / ActionMap interface
!     SwingUtilities.replaceUIInputMap(textComponent, 
!                                      JComponent.WHEN_FOCUSED,
!                                      getInputMap(JComponent.WHEN_FOCUSED));
!     SwingUtilities.replaceUIActionMap(textComponent, getActionMap());
!   }
! 
!   InputMap getInputMap(int condition)
!   {
!     String prefix = getPropertyPrefix();
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!     switch (condition)
!       {
!       case JComponent.WHEN_IN_FOCUSED_WINDOW:
!         // FIXME: is this the right string? nobody seems to use it.
!         return (InputMap) defaults.get(prefix + ".windowInputMap"); 
!       case JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT:
!         return (InputMap) defaults.get(prefix + ".ancestorInputMap");
!       default:
!       case JComponent.WHEN_FOCUSED:
!         return (InputMap) defaults.get(prefix + ".focusInputMap");
!       }
!   }
! 
!   ActionMap getActionMap()
!   {
!     String prefix = getPropertyPrefix();
!     UIDefaults defaults = UIManager.getLookAndFeelDefaults();    
!     ActionMap am = (ActionMap) defaults.get(prefix + ".actionMap");
!     if (am == null)
!       {
!         am = createActionMap();
!         defaults.put(prefix + ".actionMap", am);
!       }
!     return am;
!   }
! 
!   ActionMap createActionMap()
!   {
!     Action[] actions = textComponent.getActions();
!     ActionMap am = new ActionMap();
!     for (int i = 0; i < actions.length; ++i)
!       {
!         String name = (String) actions[i].getValue(Action.NAME);
!         if (name != null)
!           am.put(name, actions[i]);
!       }
!     return am;
!   }
!   
!   public void uninstallUI(final JComponent component)
!   {
!     super.uninstallUI(component);
!     rootView.setView(null);
! 
!     textComponent.removePropertyChangeListener(updateHandler);
! 
!     uninstallDefaults();
!     uninstallListeners();
!     uninstallKeyboardActions();
! 
!     textComponent = null;
!   }
! 
!   protected void uninstallDefaults()
!   {
!     // Do nothing here.
!   }
! 
!   protected void uninstallListeners()
!   {
!     textComponent.removeFocusListener(focuslistener);
!   }
! 
!   protected void uninstallKeyboardActions()
!   {
!     // Do nothing here.
!   }
!   
!   protected abstract String getPropertyPrefix();
! 
!   public Dimension getPreferredSize(JComponent c)
!   {
!     View v = getRootView(textComponent);
! 
!     float w = v.getPreferredSpan(View.X_AXIS);
!     float h = v.getPreferredSpan(View.Y_AXIS);
! 
!     return new Dimension((int) w, (int) h);
!   }
!   
!   public final void paint(Graphics g, JComponent c)
!   {
!     paintSafely(g);
!   }
! 
!   protected void paintSafely(Graphics g)
!   {
!     Caret caret = textComponent.getCaret();
!     Highlighter highlighter = textComponent.getHighlighter();
!     
!     if (textComponent.isOpaque())
!       paintBackground(g);
!     
!     if (highlighter != null
! 	&& textComponent.getSelectionStart() != textComponent.getSelectionEnd())
!       highlighter.paint(g);
! 
!     rootView.paint(g, getVisibleEditorRect());
! 
!     if (caret != null && textComponent.hasFocus())
!       caret.paint(g);
!   }
! 
!   protected void paintBackground(Graphics g)
!   {
!     g.setColor(textComponent.getBackground());
!     g.fillRect(0, 0, textComponent.getWidth(), textComponent.getHeight());
!   }
! 
!   public void damageRange(JTextComponent t, int p0, int p1)
!   {
!     damageRange(t, p0, p1, null, null);
!   }
! 
!   public void damageRange(JTextComponent t, int p0, int p1,
!                           Position.Bias firstBias, Position.Bias secondBias)
!   {
!   }
! 
!   public EditorKit getEditorKit(JTextComponent t)
!   {
!     return kit;
!   }
! 
!   public int getNextVisualPositionFrom(JTextComponent t, int pos,
!                                        Position.Bias b, int direction,
!                                        Position.Bias[] biasRet)
!     throws BadLocationException
!   {
!     return 0;
!   }
! 
!   public View getRootView(JTextComponent t)
!   {
!     return rootView;
!   }
! 
!   public Rectangle modelToView(JTextComponent t, int pos)
!     throws BadLocationException
!   {
!     return modelToView(t, pos, Position.Bias.Forward);
!   }
! 
!   public Rectangle modelToView(JTextComponent t, int pos, Position.Bias bias)
!     throws BadLocationException
!   {
!     return rootView.modelToView(pos, getVisibleEditorRect(), bias).getBounds();
!   }
! 
!   public int viewToModel(JTextComponent t, Point pt)
!   {
!     return viewToModel(t, pt, null);
!   }
! 
!   public int viewToModel(JTextComponent t, Point pt, Position.Bias[] biasReturn)
!   {
!     return 0;
!   }
! 
!   public View create(Element elem)
!   {
!     // Subclasses have to implement this to get this functionality.
!     return null;
!   }
! 
!   public View create(Element elem, int p0, int p1)
!   {
!     // Subclasses have to implement this to get this functionality.
      return null;
    }
+   
+   protected Rectangle getVisibleEditorRect()
+   {
+     int width = textComponent.getWidth();
+     int height = textComponent.getHeight();
+ 
+     if (width <= 0 || height <= 0)
+       return null;
+ 	
+     Insets insets = textComponent.getInsets();
+     return new Rectangle(insets.left, insets.top,
+ 			 width - insets.left + insets.right,
+ 			 height - insets.top + insets.bottom);
+   }
+ 
+   protected final void setView(View view)
+   {
+     rootView.setView(view);
+     view.setParent(rootView);
+   }
+ 
+   protected void modelChanged()
+   {
+     if (textComponent == null || rootView == null) 
+       return;
+     ViewFactory factory = rootView.getViewFactory();
+     if (factory == null) 
+       return;
+     Document doc = textComponent.getDocument();
+     if (doc == null)
+       return;
+     Element elem = doc.getDefaultRootElement();
+     if (elem == null)
+       return;
+     setView(factory.create(elem));
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java	Sat Jan 10 21:59:30 2004
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java	Thu Sep  2 05:10:27 2004
*************** exception statement from your version. *
*** 38,123 ****
  
  package javax.swing.plaf.basic;
  
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Rectangle;
- import javax.swing.AbstractButton;
  import javax.swing.JComponent;
  import javax.swing.plaf.ComponentUI;
  
  public class BasicToggleButtonUI extends BasicButtonUI
  {
!   
!     public static ComponentUI createUI(final JComponent c)  {
! 	return new BasicToggleButtonUI();
!     }
! 
!     
!     public void installUI(final JComponent c)  {
! 	super.installUI(c);
!     }
!     
!     public Dimension getPreferredSize(JComponent c) 
!     {
! 	AbstractButton b = (AbstractButton)c;
! 	Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, gap);
! 							  
! 	//System.out.println("^^^^^^^^^^^^^^^^^^^^^^   BASIC-PREF="+d + ",T="+b.text);
! 	return d;
!     }
!     
!     protected void paintFocus(Graphics g, 
! 			      JComponent c,
! 			      Rectangle vr,
! 			      Rectangle tr,
! 			      Rectangle ir)
!     {
!     }
! 
!     protected void paintIcon(Graphics g, 
! 			     JComponent c, 
! 			     Rectangle iconRect)
!     {
!     }
! 
!     protected void paintButtonPressed(Graphics g,
! 				      JComponent b)
!     {
! 	Dimension size = b.getSize();
! 	
! 	g.setColor(pressedBackgroundColor);
! 	g.fillRect(1,1,size.width-2, size.height-2);                
! 
!     }
!     
!     protected void paintButtonNormal(Graphics g,
! 				     JComponent b)
!     {
! 	Dimension size = b.getSize();
! 	
! 	g.setColor(normalBackgroundColor);
! 	g.fillRect(1,1,size.width-2, size.height-2);                
! 
!     }
!     protected void paintText(Graphics g,
! 			     JComponent c,
! 			     Rectangle textRect,
! 			     String text) 
!     {
! 	//        AbstractButton b = (AbstractButton) c;
! 	
! 	//	System.out.println("drawing string: " + text + ", at:" + textRect);
! 	
! 	g.setColor(textColor);
  
- 	BasicGraphicsUtils.drawString(g,
- 				      text, 
- 				      0,	
- 				      textRect.x, 
- 				      textRect.y);
-     } 
  }
  
- 
- 
- 
--- 38,52 ----
  
  package javax.swing.plaf.basic;
  
  import javax.swing.JComponent;
  import javax.swing.plaf.ComponentUI;
  
  public class BasicToggleButtonUI extends BasicButtonUI
  {
!   public static ComponentUI createUI(final JComponent component)
!   {
!     return new BasicToggleButtonUI();
!   }    
  
  }
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java	Tue Nov 30 23:59:06 2004
***************
*** 0 ****
--- 1,127 ----
+ /* BasicToolBarSeparatorUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JSeparator;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.ComponentUI;
+ 
+ /**
+  * The Basic Look and Feel UI delegate for Separator.
+  */
+ public class BasicToolBarSeparatorUI extends BasicSeparatorUI
+ {
+   private transient Dimension size;
+ 
+   /**
+    * Creates a new UI delegate for the given JComponent.
+    *
+    * @param c The JComponent to create a delegate for.
+    *
+    * @return A new BasicToolBarSeparatorUI.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicToolBarSeparatorUI();
+   }
+ 
+   /**
+    * This method installs the defaults that are given by the Basic L&F.
+    *
+    * @param s The Separator that is being installed.
+    */
+   protected void installDefaults(JSeparator s)
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+     
+     size = defaults.getDimension("ToolBar.separatorSize");
+   }
+ 
+   /**
+    * This method does nothing as a Separator is just blank space.
+    *
+    * @param g The Graphics object to paint with
+    * @param c The JComponent to paint.
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     // Do nothing.
+   }
+ 
+   /**
+    * This method returns the preferred size of the  JComponent.
+    *
+    * @param c The JComponent to measure.
+    *
+    * @return The preferred size.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     return size;
+   }
+ 
+   /**
+    * This method returns the minimum size of the JComponent.
+    *
+    * @param c The JComponent to measure.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return size;
+   }
+ 
+   /**
+    * This method returns the maximum size of the JComponent.
+    *
+    * @param c The JComponent to measure.
+    *
+    * @return The maximum size.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return size;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicToolBarUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicToolBarUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicToolBarUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicToolBarUI.java	Wed Feb 16 20:03:01 2005
***************
*** 0 ****
--- 1,1428 ----
+ /* BasicToolBarUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Container;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.Window;
+ import java.awt.event.ContainerEvent;
+ import java.awt.event.ContainerListener;
+ import java.awt.event.FocusEvent;
+ import java.awt.event.FocusListener;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.WindowAdapter;
+ import java.awt.event.WindowEvent;
+ import java.awt.event.WindowListener;
+ import java.beans.PropertyChangeEvent;
+ import java.beans.PropertyChangeListener;
+ import java.util.Hashtable;
+ 
+ import javax.swing.JButton;
+ import javax.swing.JComponent;
+ import javax.swing.JDialog;
+ import javax.swing.JFrame;
+ import javax.swing.JToolBar;
+ import javax.swing.RootPaneContainer;
+ import javax.swing.SwingConstants;
+ import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.border.Border;
+ import javax.swing.event.MouseInputListener;
+ import javax.swing.plaf.BorderUIResource.EtchedBorderUIResource;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.ToolBarUI;
+ import javax.swing.plaf.UIResource;
+ 
+ /**
+  * This is the Basic Look and Feel UI class for JToolBar.
+  */
+ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
+ {
+   /** Static owner of all DragWindows. */
+   private static JFrame owner = new JFrame();
+ 
+   /** The border used when the JToolBar is in nonrollover mode. */
+   private static Border nonRolloverBorder;
+ 
+   /** The border used when the JToolBar is in rollover mode. */
+   private static Border rolloverBorder;
+ 
+   /** The last known BorderLayout constraint before floating. */
+   protected String constraintBeforeFloating;
+ 
+   /** The last known orientation of the JToolBar before floating. */
+   private int lastGoodOrientation;
+ 
+   /** The color of the border when it is dockable. */
+   protected Color dockingBorderColor;
+ 
+   /** The background color of the JToolBar when it is dockable. */
+   protected Color dockingColor;
+ 
+   /** The docking listener responsible for mouse events on the JToolBar. */
+   protected MouseInputListener dockingListener;
+ 
+   /** The window used for dragging the JToolBar. */
+   protected BasicToolBarUI.DragWindow dragWindow;
+ 
+   /** The color of the border when it is not dockable. */
+   protected Color floatingBorderColor;
+ 
+   /** The background color of the JToolBar when it is not dockable. */
+   protected Color floatingColor;
+ 
+   /** The index of the focused component. */
+   protected int focusedCompIndex;
+ 
+   /** The PropertyChangeListener for the JToolBar. */
+   protected PropertyChangeListener propertyListener;
+ 
+   /** The JToolBar this UI delegate is responsible for. */
+   protected JToolBar toolBar;
+ 
+   /** The Container listener for the JToolBar. */
+   protected ContainerListener toolBarContListener;
+ 
+   /** The Focus listener for the JToolBar. */
+   protected FocusListener toolBarFocusListener;
+ 
+   /**
+    * The floating window that is responsible for holding the JToolBar when it
+    * is dragged outside of its original parent.
+    */
+   private transient Window floatFrame;
+ 
+   /** The original parent of the JToolBar. */
+   private transient Container origParent;
+ 
+   /** A hashtable of components and their original borders. */
+   private transient Hashtable borders;
+ 
+   /** A window listener for the floatable frame. */
+   private transient WindowListener windowListener;
+ 
+   /** A set of cached bounds of the JToolBar. */
+   private transient Dimension cachedBounds;
+ 
+   /** The cached orientation of the JToolBar. */
+   private transient int cachedOrientation;
+ 
+   /**
+    * This method creates a new <code>BasicToolBarUI</code> object for the given JToolBar.
+    */
+   public BasicToolBarUI()
+   {
+     // Do nothing here.
+   }
+ 
+   /**
+    * This method returns whether the JToolBar can dock at the given position.
+    *
+    * @param c The component to try to dock in.
+    * @param p The position of the mouse cursor relative to the given
+    *        component.
+    *
+    * @return Whether the JToolBar can dock.
+    */
+   public boolean canDock(Component c, Point p)
+   {
+     return areaOfClick(c, p) != -1;
+   }
+ 
+   /**
+    * This helper method returns the position of the JToolBar if it can dock.
+    *
+    * @param c The component to try to dock in.
+    * @param p The position of the mouse cursor relative to the given
+    *        component.
+    *
+    * @return One of the SwingConstants directions or -1 if the JToolBar can't
+    *         dock.
+    */
+   private int areaOfClick(Component c, Point p)
+   {
+     // Has to dock in immediate parent, not eventual root container.
+     Rectangle pBounds = c.getBounds();
+ 
+     // XXX: In Sun's implementation, the space the toolbar has to dock is dependent on the size it had last.
+     Dimension d = toolBar.getSize();
+     int limit = Math.min(d.width, d.height);
+ 
+     // The order of checking is 1. top 2. bottom 3. left 4. right
+     if (! pBounds.contains(p))
+       return -1;
+ 
+     if (p.y < limit)
+       return SwingConstants.NORTH;
+ 
+     if (p.y > (pBounds.height - limit))
+       return SwingConstants.SOUTH;
+ 
+     if (p.x < limit)
+       return SwingConstants.WEST;
+ 
+     if (p.x > (pBounds.width - limit))
+       return SwingConstants.EAST;
+ 
+     return -1;
+   }
+ 
+   /**
+    * This method creates a new DockingListener for the JToolBar.
+    *
+    * @return A new DockingListener for the JToolBar.
+    */
+   protected MouseInputListener createDockingListener()
+   {
+     return new DockingListener(toolBar);
+   }
+ 
+   /**
+    * This method creates a new DragWindow for the given JToolBar.
+    *
+    * @param toolbar The JToolBar to create a DragWindow for.
+    *
+    * @return A new DragWindow.
+    */
+   protected BasicToolBarUI.DragWindow createDragWindow(JToolBar toolbar)
+   {
+     return new DragWindow();
+   }
+ 
+   /**
+    * This method creates a new floating frame for the JToolBar. By default,
+    * this UI uses createFloatingWindow instead. This method of creating a
+    * floating frame is deprecated.
+    *
+    * @param toolbar The JToolBar to create a floating frame for.
+    *
+    * @return A new floating frame.
+    */
+   protected JFrame createFloatingFrame(JToolBar toolbar)
+   {
+     // FIXME: Though deprecated, this should still work.
+     return null;
+   }
+ 
+   /**
+    * This method creates a new floating window for the JToolBar. This is the
+    * method used by default to create a floating container for the JToolBar.
+    *
+    * @param toolbar The JToolBar to create a floating window for.
+    *
+    * @return A new floating window.
+    */
+   protected RootPaneContainer createFloatingWindow(JToolBar toolbar)
+   {
+     // This one is used by default though.
+     return new ToolBarDialog();
+   }
+ 
+   /**
+    * This method creates a new WindowListener for the JToolBar.
+    *
+    * @return A new WindowListener.
+    */
+   protected WindowListener createFrameListener()
+   {
+     return new FrameListener();
+   }
+ 
+   /**
+    * This method creates a new nonRolloverBorder for JButtons when the
+    * JToolBar's rollover property is set to false.
+    *
+    * @return A new NonRolloverBorder.
+    */
+   protected Border createNonRolloverBorder()
+   {
+     return new EtchedBorderUIResource();
+   }
+ 
+   /**
+    * This method creates a new PropertyChangeListener for the JToolBar.
+    *
+    * @return A new PropertyChangeListener.
+    */
+   protected PropertyChangeListener createPropertyListener()
+   {
+     return new PropertyListener();
+   }
+ 
+   /**
+    * This method creates a new rollover border for JButtons when the
+    * JToolBar's rollover property is set to true.
+    *
+    * @return A new rollover border.
+    */
+   protected Border createRolloverBorder()
+   {
+     return new EtchedBorderUIResource()
+       {
+ 	public void paintBorder(Component c, Graphics g, int x, int y,
+ 	                        int width, int height)
+ 	{
+ 	  if (c instanceof JButton)
+ 	    {
+ 	      if (((JButton) c).getModel().isRollover())
+ 		super.paintBorder(c, g, x, y, width, height);
+ 	    }
+ 	}
+       };
+   }
+ 
+   /**
+    * This method creates a new Container listener for the JToolBar.
+    *
+    * @return A new Container listener.
+    */
+   protected ContainerListener createToolBarContListener()
+   {
+     return new ToolBarContListener();
+   }
+ 
+   /**
+    * This method creates a new FocusListener for the JToolBar.
+    *
+    * @return A new FocusListener for the JToolBar.
+    */
+   protected FocusListener createToolBarFocusListener()
+   {
+     return new ToolBarFocusListener();
+   }
+ 
+   /**
+    * This method creates a new UI delegate for the given JComponent.
+    *
+    * @param c The JComponent to create a UI delegate for.
+    *
+    * @return A new UI delegate.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicToolBarUI();
+   }
+ 
+   /**
+    * This method is called to drag the DragWindow around when the JToolBar is
+    * being dragged around.
+    *
+    * @param position The mouse cursor coordinates relative to the JToolBar.
+    * @param origin The screen position of the JToolBar.
+    */
+   protected void dragTo(Point position, Point origin)
+   {
+     int loc = areaOfClick(origParent,
+                           SwingUtilities.convertPoint(toolBar, position,
+                                                       origParent));
+ 
+     if (loc != -1)
+       {
+ 	dragWindow.setBorderColor(dockingBorderColor);
+ 	dragWindow.setBackground(dockingColor);
+       }
+     else
+       {
+ 	dragWindow.setBorderColor(floatingBorderColor);
+ 	dragWindow.setBackground(floatingColor);
+       }
+ 
+     int w = 0;
+     int h = 0;
+ 
+     boolean tmp = ((loc == SwingConstants.NORTH)
+                   || (loc == SwingConstants.SOUTH) || (loc == -1));
+ 
+     if (((cachedOrientation == SwingConstants.HORIZONTAL) && tmp)
+         || ((cachedOrientation == VERTICAL) && ! tmp))
+       {
+ 	w = cachedBounds.width;
+ 	h = cachedBounds.height;
+       }
+     else
+       {
+ 	w = cachedBounds.height;
+ 	h = cachedBounds.width;
+       }
+ 
+     Point p = dragWindow.getOffset();
+     Insets insets = toolBar.getInsets();
+ 
+     dragWindow.setBounds((origin.x + position.x) - p.x
+                          - ((insets.left + insets.right) / 2),
+                          (origin.y + position.y) - p.y
+                          - ((insets.top + insets.bottom) / 2), w, h);
+ 
+     if (! dragWindow.isVisible())
+       dragWindow.show();
+   }
+ 
+   /**
+    * This method is used at the end of a drag session to place the frame in
+    * either its original parent as a docked JToolBar or in its floating
+    * frame.
+    *
+    * @param position The position of the mouse cursor relative to the
+    *        JToolBar.
+    * @param origin The screen position of the JToolBar before the drag session
+    *        started.
+    */
+   protected void floatAt(Point position, Point origin)
+   {
+     Point p = new Point(position);
+     int aoc = areaOfClick(origParent,
+                           SwingUtilities.convertPoint(toolBar, p, origParent));
+ 
+     Container oldParent = toolBar.getParent();
+ 
+     oldParent.remove(toolBar);
+     oldParent.doLayout();
+     oldParent.repaint();
+ 
+     Container newParent;
+ 
+     if (aoc == -1)
+       newParent = ((RootPaneContainer) floatFrame).getContentPane();
+     else
+       {
+ 	floatFrame.hide();
+ 	newParent = origParent;
+       }
+ 
+     String constraint;
+     switch (aoc)
+       {
+       case SwingConstants.EAST:
+ 	constraint = BorderLayout.EAST;
+ 	break;
+       case SwingConstants.NORTH:
+ 	constraint = BorderLayout.NORTH;
+ 	break;
+       case SwingConstants.SOUTH:
+ 	constraint = BorderLayout.SOUTH;
+ 	break;
+       case SwingConstants.WEST:
+ 	constraint = BorderLayout.WEST;
+ 	break;
+       default:
+ 	constraint = BorderLayout.CENTER;
+ 	break;
+       }
+ 
+     int newOrientation = SwingConstants.HORIZONTAL;
+     if ((aoc != -1)
+         && ((aoc == SwingConstants.EAST) || (aoc == SwingConstants.WEST)))
+       newOrientation = SwingConstants.VERTICAL;
+ 
+     if (aoc != -1)
+       {
+ 	constraintBeforeFloating = constraint;
+ 	lastGoodOrientation = newOrientation;
+       }
+ 
+     newParent.add(toolBar, constraint);
+ 
+     setFloating(aoc == -1, null);
+     toolBar.setOrientation(newOrientation);
+ 
+     Insets insets = floatFrame.getInsets();
+     Dimension dims = toolBar.getPreferredSize();
+     p = dragWindow.getOffset();
+     setFloatingLocation((position.x + origin.x) - p.x
+                         - ((insets.left + insets.right) / 2),
+                         (position.y + origin.y) - p.y
+                         - ((insets.top + insets.bottom) / 2));
+ 
+     if (aoc == -1)
+       {
+ 	floatFrame.pack();
+ 	floatFrame.setSize(dims.width + insets.left + insets.right,
+ 	                   dims.height + insets.top + insets.bottom);
+ 	floatFrame.show();
+       }
+ 
+     newParent.invalidate();
+     newParent.validate();
+     newParent.repaint();
+   }
+ 
+   /**
+    * This method returns the docking color.
+    *
+    * @return The docking color.
+    */
+   public Color getDockingColor()
+   {
+     return dockingColor;
+   }
+ 
+   /**
+    * This method returns the Color which is displayed when over a floating
+    * area.
+    *
+    * @return The color which is displayed when over a floating area.
+    */
+   public Color getFloatingColor()
+   {
+     return floatingColor;
+   }
+ 
+   /**
+    * This method returns the maximum size of the given JComponent for this UI.
+    *
+    * @param c The JComponent to find the maximum size for.
+    *
+    * @return The maximum size for this UI.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the minimum size of the given JComponent for this UI.
+    *
+    * @param c The JComponent to find a minimum size for.
+    *
+    * @return The minimum size for this UI.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the preferred size of the given JComponent for this
+    * UI.
+    *
+    * @param c The JComponent to find a preferred size for.
+    *
+    * @return The preferred size for this UI.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     return toolBar.getLayout().preferredLayoutSize(c);
+   }
+ 
+   /**
+    * This method installs the needed components for the JToolBar.
+    */
+   protected void installComponents()
+   {
+     floatFrame = (Window) createFloatingWindow(toolBar);
+ 
+     dragWindow = createDragWindow(toolBar);
+ 
+     cachedBounds = toolBar.getPreferredSize();
+     cachedOrientation = toolBar.getOrientation();
+ 
+     nonRolloverBorder = createNonRolloverBorder();
+     rolloverBorder = createRolloverBorder();
+ 
+     borders = new Hashtable();
+ 
+     fillHashtable();
+   }
+ 
+   /**
+    * This method installs the defaults as specified by the look and feel.
+    */
+   protected void installDefaults()
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     toolBar.setBorder(new ToolBarBorder());
+     toolBar.setBackground(defaults.getColor("ToolBar.background"));
+     toolBar.setForeground(defaults.getColor("ToolBar.foreground"));
+     toolBar.setFont(defaults.getFont("ToolBar.font"));
+ 
+     dockingBorderColor = defaults.getColor("ToolBar.dockingForeground");
+     dockingColor = defaults.getColor("ToolBar.dockingBackground");
+ 
+     floatingBorderColor = defaults.getColor("ToolBar.floatingForeground");
+     floatingColor = defaults.getColor("ToolBar.floatingBackground");
+   }
+ 
+   /**
+    * This method installs the keyboard actions for the JToolBar as specified
+    * by the look and feel.
+    */
+   protected void installKeyboardActions()
+   {
+     // FIXME: implement.
+   }
+ 
+   /**
+    * This method installs listeners for the JToolBar.
+    *
+    * @param toolbar The JToolBar to register listeners for.
+    */
+   protected void installListeners(JToolBar toolbar)
+   {
+     dockingListener = createDockingListener();
+     toolBar.addMouseListener(dockingListener);
+     toolBar.addMouseMotionListener(dockingListener);
+ 
+     propertyListener = createPropertyListener();
+     toolBar.addPropertyChangeListener(propertyListener);
+ 
+     toolBarContListener = createToolBarContListener();
+     toolBar.addContainerListener(toolBarContListener);
+ 
+     windowListener = createFrameListener();
+     floatFrame.addWindowListener(windowListener);
+ 
+     toolBarFocusListener = createToolBarFocusListener();
+     toolBar.addFocusListener(toolBarFocusListener);
+   }
+ 
+   /**
+    * This method installs non rollover borders for each component inside the
+    * given JComponent.
+    *
+    * @param c The JComponent whose children need to have non rollover borders
+    *        installed.
+    */
+   protected void installNonRolloverBorders(JComponent c)
+   {
+     Component[] components = toolBar.getComponents();
+ 
+     for (int i = 0; i < components.length; i++)
+       setBorderToNonRollover(components[i]);
+   }
+ 
+   /**
+    * This method installs normal (or their original) borders for each
+    * component inside the given JComponent.
+    *
+    * @param c The JComponent whose children need to have their original
+    *        borders installed.
+    */
+   protected void installNormalBorders(JComponent c)
+   {
+     Component[] components = toolBar.getComponents();
+ 
+     for (int i = 0; i < components.length; i++)
+       setBorderToNormal(components[i]);
+   }
+ 
+   /**
+    * This method install rollover borders for each component inside the given
+    * JComponent.
+    *
+    * @param c The JComponent whose children need to have rollover borders
+    *        installed.
+    */
+   protected void installRolloverBorders(JComponent c)
+   {
+     Component[] components = toolBar.getComponents();
+ 
+     for (int i = 0; i < components.length; i++)
+       setBorderToRollover(components[i]);
+   }
+ 
+   /**
+    * This method fills the borders hashtable with a list of components that
+    * are JButtons and their borders.
+    */
+   private void fillHashtable()
+   {
+     Component[] c = toolBar.getComponents();
+ 
+     for (int i = 0; i < c.length; i++)
+       {
+ 	if (c[i] instanceof JButton)
+ 	  {
+ 	    // Don't really care about anything other than JButtons
+ 	    JButton b = (JButton) c[i];
+ 
+ 	    if (b.getBorder() != null)
+ 	      borders.put(b, b.getBorder());
+ 	  }
+       }
+   }
+ 
+   /**
+    * This method installs the UI for the given JComponent.
+    *
+    * @param c The JComponent to install a UI for.
+    */
+   public void installUI(JComponent c)
+   {
+     super.installUI(c);
+ 
+     if (c instanceof JToolBar)
+       {
+ 	toolBar = (JToolBar) c;
+ 	toolBar.setOpaque(true);
+ 	installDefaults();
+ 	installComponents();
+ 	installListeners(toolBar);
+ 	installKeyboardActions();
+       }
+   }
+ 
+   /**
+    * This method returns whether the JToolBar is floating.
+    *
+    * @return Whether the JToolBar is floating.
+    */
+   public boolean isFloating()
+   {
+     return floatFrame.isVisible();
+   }
+ 
+   /**
+    * This method returns whether rollover borders have been set.
+    *
+    * @return Whether rollover borders have been set.
+    */
+   public boolean isRolloverBorders()
+   {
+     return toolBar.isRollover();
+   }
+ 
+   /**
+    * This method navigates in the given direction giving focus to the next
+    * component in the given direction.
+    *
+    * @param direction The direction to give focus to.
+    */
+   protected void navigateFocusedComp(int direction)
+   {
+     // FIXME: Implement.
+   }
+ 
+   /**
+    * This method sets the border of the given component to a non rollover
+    * border.
+    *
+    * @param c The Component whose border needs to be set.
+    */
+   protected void setBorderToNonRollover(Component c)
+   {
+     if (c instanceof JButton)
+       {
+ 	JButton b = (JButton) c;
+ 	b.setRolloverEnabled(false);
+ 	b.setBorder(nonRolloverBorder);
+       }
+   }
+ 
+   /**
+    * This method sets the border of the given component to its original value.
+    *
+    * @param c The Component whose border needs to be set.
+    */
+   protected void setBorderToNormal(Component c)
+   {
+     if (c instanceof JButton)
+       {
+ 	JButton b = (JButton) c;
+ 	Border border = (Border) borders.get(b);
+ 	b.setBorder(border);
+       }
+   }
+ 
+   /**
+    * This method sets the border of the given component to a rollover border.
+    *
+    * @param c The Component whose border needs to be set.
+    */
+   protected void setBorderToRollover(Component c)
+   {
+     if (c instanceof JButton)
+       {
+ 	JButton b = (JButton) c;
+ 	b.setRolloverEnabled(true);
+ 	b.setBorder(rolloverBorder);
+       }
+   }
+ 
+   /**
+    * This method sets the docking color.
+    *
+    * @param c The docking color.
+    */
+   public void setDockingColor(Color c)
+   {
+     dockingColor = c;
+   }
+ 
+   /**
+    * This method sets the floating property for the JToolBar.
+    *
+    * @param b Whether the JToolBar is floating.
+    * @param p FIXME
+    */
+   public void setFloating(boolean b, Point p)
+   {
+     // FIXME: use p for something. It's not location
+     // since we already have setFloatingLocation.
+     floatFrame.setVisible(b);
+   }
+ 
+   /**
+    * This method sets the color displayed when the JToolBar is not in a
+    * dockable area.
+    *
+    * @param c The floating color.
+    */
+   public void setFloatingColor(Color c)
+   {
+     floatingColor = c;
+   }
+ 
+   /**
+    * This method sets the floating location of the JToolBar.
+    *
+    * @param x The x coordinate for the floating frame.
+    * @param y The y coordinate for the floating frame.
+    */
+   public void setFloatingLocation(int x, int y)
+   {
+     // x,y are the coordinates of the new JFrame created to store the toolbar
+     // XXX: The floating location is bogus is not floating.
+     floatFrame.setLocation(x, y);
+     floatFrame.invalidate();
+     floatFrame.validate();
+     floatFrame.repaint();
+   }
+ 
+   /**
+    * This is a convenience method for changing the orientation of the
+    * JToolBar.
+    *
+    * @param orientation The new orientation.
+    */
+   public void setOrientation(int orientation)
+   {
+     toolBar.setOrientation(orientation);
+   }
+ 
+   /**
+    * This method changes the child components to have rollover borders if the
+    * given parameter is true. Otherwise, the components are set to have non
+    * rollover borders.
+    *
+    * @param rollover Whether the children will have rollover borders.
+    */
+   public void setRolloverBorders(boolean rollover)
+   {
+     if (rollover)
+       installRolloverBorders(toolBar);
+     else
+       installNonRolloverBorders(toolBar);
+   }
+ 
+   /**
+    * This method uninstall UI installed components from the JToolBar.
+    */
+   protected void uninstallComponents()
+   {
+     installNormalBorders(toolBar);
+     borders = null;
+     rolloverBorder = null;
+     nonRolloverBorder = null;
+     cachedBounds = null;
+ 
+     floatFrame = null;
+     dragWindow = null;
+   }
+ 
+   /**
+    * This method removes the defaults installed by the Look and Feel.
+    */
+   protected void uninstallDefaults()
+   {
+     toolBar.setBackground(null);
+     toolBar.setForeground(null);
+     toolBar.setFont(null);
+ 
+     dockingBorderColor = null;
+     dockingColor = null;
+     floatingBorderColor = null;
+     floatingColor = null;
+   }
+ 
+   /**
+    * This method uninstalls keyboard actions installed by the UI.
+    */
+   protected void uninstallKeyboardActions()
+   {
+     // FIXME: implement.
+   }
+ 
+   /**
+    * This method uninstalls listeners installed by the UI.
+    */
+   protected void uninstallListeners()
+   {
+     toolBar.removeFocusListener(toolBarFocusListener);
+     toolBarFocusListener = null;
+ 
+     floatFrame.removeWindowListener(windowListener);
+     windowListener = null;
+ 
+     toolBar.removeContainerListener(toolBarContListener);
+     toolBarContListener = null;
+ 
+     toolBar.removeMouseMotionListener(dockingListener);
+     toolBar.removeMouseListener(dockingListener);
+     dockingListener = null;
+   }
+ 
+   /**
+    * This method uninstalls the UI.
+    *
+    * @param c The JComponent that is having this UI removed.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallKeyboardActions();
+     uninstallListeners();
+     uninstallComponents();
+     uninstallDefaults();
+     toolBar = null;
+   }
+ 
+   /**
+    * This is the MouseHandler class that allows the user to drag the JToolBar
+    * in and out of the parent and dock it if it can.
+    */
+   public class DockingListener implements MouseInputListener
+   {
+     /** Whether the JToolBar is being dragged. */
+     protected boolean isDragging;
+ 
+     /**
+      * The origin point. This point is saved from the beginning press and is
+      * used until the end of the drag session.
+      */
+     protected Point origin;
+ 
+     /** The JToolBar being dragged. */
+     protected JToolBar toolBar;
+ 
+     /**
+      * Creates a new DockingListener object.
+      *
+      * @param t The JToolBar this DockingListener is being used for.
+      */
+     public DockingListener(JToolBar t)
+     {
+       toolBar = t;
+     }
+ 
+     /**
+      * This method is called when the mouse is clicked.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseClicked(MouseEvent e)
+     {
+       // Don't care.
+     }
+ 
+     /**
+      * This method is called when the mouse is dragged. It delegates the drag
+      * painting to the dragTo method.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseDragged(MouseEvent e)
+     {
+       if (isDragging)
+ 	dragTo(e.getPoint(), origin);
+     }
+ 
+     /**
+      * This method is called when the mouse enters the JToolBar.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseEntered(MouseEvent e)
+     {
+       // Don't care (yet).
+     }
+ 
+     /**
+      * This method is called when the mouse exits the JToolBar.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseExited(MouseEvent e)
+     {
+       // Don't care (yet).
+     }
+ 
+     /**
+      * This method is called when the mouse is moved in the JToolBar.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseMoved(MouseEvent e)
+     {
+     }
+ 
+     /**
+      * This method is called when the mouse is pressed in the JToolBar. If the
+      * press doesn't occur in a place where it causes the JToolBar to be
+      * dragged, it returns. Otherwise, it starts a drag session.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mousePressed(MouseEvent e)
+     {
+       if (! toolBar.isFloatable())
+ 	return;
+ 
+       Point ssd = e.getPoint();
+       Insets insets = toolBar.getInsets();
+ 
+       // Verify that this click occurs in the top inset.
+       if (toolBar.getOrientation() == SwingConstants.HORIZONTAL)
+         {
+ 	  if (e.getX() > insets.left)
+ 	    return;
+         }
+       else
+         {
+ 	  if (e.getY() > insets.top)
+ 	    return;
+         }
+ 
+       origin = new Point(0, 0);
+       SwingUtilities.convertPointToScreen(ssd, toolBar);
+ 
+       if (! (SwingUtilities.getAncestorOfClass(Window.class, toolBar) instanceof UIResource))
+ 	// Need to know who keeps the toolBar if it gets dragged back into it.
+ 	origParent = toolBar.getParent();
+ 
+       SwingUtilities.convertPointToScreen(origin, toolBar);
+ 
+       isDragging = true;
+ 
+       if (dragWindow != null)
+ 	dragWindow.setOffset(new Point(e.getX(), e.getY()));
+ 
+       dragTo(e.getPoint(), origin);
+     }
+ 
+     /**
+      * This method is called when the mouse is released from the JToolBar.
+      *
+      * @param e The MouseEvent.
+      */
+     public void mouseReleased(MouseEvent e)
+     {
+       if (! isDragging || ! toolBar.isFloatable())
+ 	return;
+ 
+       isDragging = false;
+       floatAt(e.getPoint(), origin);
+       dragWindow.hide();
+     }
+   }
+ 
+   /**
+    * This is the window that appears when the JToolBar is being dragged
+    * around.
+    */
+   protected class DragWindow extends Window
+   {
+     /**
+      * The current border color. It changes depending on whether the JToolBar
+      * is over a place that allows it to dock.
+      */
+     private Color borderColor;
+ 
+     /** The between the mouse and the top left corner of the window. */
+     private Point offset;
+ 
+     /**
+      * Creates a new DragWindow object.
+      */
+     private DragWindow()
+     {
+       super(owner);
+     }
+ 
+     /**
+      * The color that the border should be.
+      *
+      * @return The border color.
+      */
+     public Color getBorderColor()
+     {
+       if (borderColor == null)
+ 	return Color.BLACK;
+ 
+       return borderColor;
+     }
+ 
+     /**
+      * This method returns the insets for the DragWindow.
+      *
+      * @return The insets for the DragWindow.
+      */
+     public Insets getInsets()
+     {
+       // This window has no decorations, so insets are empty.
+       return new Insets(0, 0, 0, 0);
+     }
+ 
+     /**
+      * This method returns the mouse offset from the top left corner of the
+      * DragWindow.
+      *
+      * @return The mouse offset.
+      */
+     public Point getOffset()
+     {
+       return offset;
+     }
+ 
+     /**
+      * This method paints the DragWindow.
+      *
+      * @param g The Graphics object to paint with.
+      */
+     public void paint(Graphics g)
+     {
+       //  No visiting children necessary.
+       Color saved = g.getColor();
+       Rectangle b = getBounds();
+ 
+       g.setColor(getBorderColor());
+       g.drawRect(0, 0, b.width - 1, b.height - 1);
+ 
+       g.setColor(saved);
+     }
+ 
+     /**
+      * This method changes the border color.
+      *
+      * @param c The new border color.
+      */
+     public void setBorderColor(Color c)
+     {
+       borderColor = c;
+     }
+ 
+     /**
+      * This method changes the mouse offset.
+      *
+      * @param p The new mouse offset.
+      */
+     public void setOffset(Point p)
+     {
+       offset = p;
+     }
+ 
+     /**
+      * FIXME: Do something.
+      *
+      * @param o DOCUMENT ME!
+      */
+     public void setOrientation(int o)
+     {
+       // FIXME: implement.
+     }
+   }
+ 
+   /**
+    * This helper class listens for Window events from the floatable window and
+    * if it is closed, returns the JToolBar to the last known good location.
+    */
+   protected class FrameListener extends WindowAdapter
+   {
+     /**
+      * This method is called when the floating window is closed.
+      *
+      * @param e The WindowEvent.
+      */
+     public void windowClosing(WindowEvent e)
+     {
+       Container parent = toolBar.getParent();
+       parent.remove(toolBar);
+ 
+       if (origParent != null)
+         {
+ 	  origParent.add(toolBar,
+ 	                 (constraintBeforeFloating != null)
+ 	                 ? constraintBeforeFloating : BorderLayout.NORTH);
+ 	  toolBar.setOrientation(lastGoodOrientation);
+         }
+ 
+       origParent.invalidate();
+       origParent.validate();
+       origParent.repaint();
+     }
+   }
+ 
+   /**
+    * This helper class listens for PropertyChangeEvents from the JToolBar.
+    */
+   protected class PropertyListener implements PropertyChangeListener
+   {
+     /**
+      * This method is called when a property from the JToolBar is changed.
+      *
+      * @param e The PropertyChangeEvent.
+      */
+     public void propertyChange(PropertyChangeEvent e)
+     {
+       // FIXME: need name properties so can change floatFrame title.
+       if (e.getPropertyName().equals("rollover"))
+ 	setRolloverBorders(toolBar.isRollover());
+     }
+   }
+ 
+   /**
+    * This helper class listens for components added to and removed from the
+    * JToolBar.
+    */
+   protected class ToolBarContListener implements ContainerListener
+   {
+     /**
+      * This method is responsible for setting rollover or non rollover for new
+      * buttons added to the JToolBar.
+      *
+      * @param e The ContainerEvent.
+      */
+     public void componentAdded(ContainerEvent e)
+     {
+       if (e.getChild() instanceof JButton)
+         {
+ 	  JButton b = (JButton) e.getChild();
+ 
+ 	  if (b.getBorder() != null)
+ 	    borders.put(b, b.getBorder());
+         }
+ 
+       if (isRolloverBorders())
+ 	setBorderToRollover(e.getChild());
+       else
+ 	setBorderToNonRollover(e.getChild());
+ 
+       cachedBounds = toolBar.getPreferredSize();
+       cachedOrientation = toolBar.getOrientation();
+     }
+ 
+     /**
+      * This method is responsible for giving the child components their
+      * original borders when they are removed.
+      *
+      * @param e The ContainerEvent.
+      */
+     public void componentRemoved(ContainerEvent e)
+     {
+       setBorderToNormal(e.getChild());
+       cachedBounds = toolBar.getPreferredSize();
+       cachedOrientation = toolBar.getOrientation();
+     }
+   }
+ 
+   /**
+    * This is the floating window that is returned when getFloatingWindow is
+    * called.
+    */
+   private class ToolBarDialog extends JDialog implements UIResource
+   {
+     /**
+      * Creates a new ToolBarDialog object with the name given by the JToolBar.
+      */
+     public ToolBarDialog()
+     {
+       super();
+       setName((toolBar.getName() != null) ? toolBar.getName() : "");
+     }
+   }
+ 
+   /**
+    * DOCUMENT ME!
+    */
+   protected class ToolBarFocusListener implements FocusListener
+   {
+     /**
+      * Creates a new ToolBarFocusListener object.
+      */
+     protected ToolBarFocusListener()
+     {
+       // FIXME: implement.
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param e DOCUMENT ME!
+      */
+     public void focusGained(FocusEvent e)
+     {
+       // FIXME: implement.
+     }
+ 
+     /**
+      * DOCUMENT ME!
+      *
+      * @param e DOCUMENT ME!
+      */
+     public void focusLost(FocusEvent e)
+     {
+       // FIXME: implement.
+     }
+   }
+ 
+   /**
+    * This helper class acts as the border for the JToolBar.
+    */
+   private static class ToolBarBorder implements Border
+   {
+     /** The size of the larger, draggable side of the border. */
+     private static final int offset = 10;
+ 
+     /** The other sides. */
+     private static final int regular = 2;
+ 
+     /**
+      * This method returns the border insets for the JToolBar.
+      *
+      * @param c The Component to find insets for.
+      *
+      * @return The border insets.
+      */
+     public Insets getBorderInsets(Component c)
+     {
+       if (c instanceof JToolBar)
+         {
+ 	  JToolBar tb = (JToolBar) c;
+ 	  int orientation = tb.getOrientation();
+ 
+ 	  if (! tb.isFloatable())
+ 	    return new Insets(regular, regular, regular, regular);
+ 	  else if (orientation == SwingConstants.HORIZONTAL)
+ 	    return new Insets(regular, offset, regular, regular);
+ 	  else
+ 	    return new Insets(offset, regular, regular, regular);
+         }
+ 
+       return new Insets(0, 0, 0, 0);
+     }
+ 
+     /**
+      * This method returns whether the border is opaque.
+      *
+      * @return Whether the border is opaque.
+      */
+     public boolean isBorderOpaque()
+     {
+       return false;
+     }
+ 
+     /**
+      * This method paints the ribbed area of the border.
+      *
+      * @param g The Graphics object to paint with.
+      * @param x The x coordinate of the area.
+      * @param y The y coordinate of the area.
+      * @param w The width of the area.
+      * @param h The height of the area.
+      * @param size The size of the bump.
+      * @param c The color of the bumps.
+      */
+     private void paintBumps(Graphics g, int x, int y, int w, int h, int size,
+                             Color c)
+     {
+       Color saved = g.getColor();
+       g.setColor(c);
+ 
+       int hgap = 2 * size;
+       int vgap = 4 * size;
+       int count = 0;
+ 
+       for (int i = x; i < (w + x); i += hgap)
+ 	for (int j = ((count++ % 2) == 0) ? y : (y + (2 * size)); j < (h + y);
+ 	     j += vgap)
+ 	  g.fillRect(i, j, size, size);
+ 
+       g.setColor(saved);
+     }
+ 
+     /**
+      * This method paints the border around the given Component.
+      *
+      * @param c The Component whose border is being painted.
+      * @param g The Graphics object to paint with.
+      * @param x The x coordinate of the component.
+      * @param y The y coordinate of the component.
+      * @param width The width of the component.
+      * @param height The height of the component.
+      */
+     public void paintBorder(Component c, Graphics g, int x, int y, int width,
+                             int height)
+     {
+       if (c instanceof JToolBar)
+         {
+ 	  JToolBar tb = (JToolBar) c;
+ 
+ 	  int orientation = tb.getOrientation();
+ 
+ 	  if (orientation == SwingConstants.HORIZONTAL)
+ 	    {
+ 	      paintBumps(g, x, y, offset, height, 1, Color.WHITE);
+ 	      paintBumps(g, x + 1, y + 1, offset - 1, height - 1, 1, Color.GRAY);
+ 	    }
+ 	  else
+ 	    {
+ 	      paintBumps(g, x, y, width, offset, 1, Color.WHITE);
+ 	      paintBumps(g, x + 1, y + 1, width - 1, offset - 1, 1, Color.GRAY);
+ 	    }
+         }
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicToolTipUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicToolTipUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicToolTipUI.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicToolTipUI.java	Tue Nov 30 23:59:06 2004
***************
*** 0 ****
--- 1,288 ----
+ /* BasicToolTipUI.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Insets;
+ import java.awt.Rectangle;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JToolTip;
+ import javax.swing.SwingConstants;
+ import javax.swing.SwingUtilities;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.border.Border;
+ import javax.swing.plaf.ComponentUI;
+ import javax.swing.plaf.ToolTipUI;
+ 
+ /**
+  * This is the Basic Look and Feel UI class for JToolTip.
+  */
+ public class BasicToolTipUI extends ToolTipUI
+ {
+   /** The default Border around the JToolTip. */
+   private static Border defaultBorder = new Border()
+     {
+       // FIXME: This needs to go into Basic Look and Feel
+       // defaults.
+ 
+ 			/**
+ 			 * This method returns the border insets.
+ 			 *
+ 			 * @param c The Component to find Border insets for.
+ 			 *
+ 			 * @return The Border insets.
+ 			 */		 
+       public Insets getBorderInsets(Component c)
+       {
+ 	return new Insets(4, 4, 4, 4);
+       }
+ 
+ 			/**
+ 			 * This method returns whether the border is opaque.
+ 			 *
+ 			 * @return Whether the border is opaque.
+ 			 */
+       public boolean isBorderOpaque()
+       {
+ 	return false;
+       }
+ 
+ 			/**
+ 			 * This method paints the border.
+ 			 *
+ 			 * @param c The Component to paint this border around.
+ 			 * @param g The Graphics object to paint with.
+ 			 * @param x The x coordinate to start painting at.
+ 			 * @param y The y coordinate to start painting at.
+ 			 * @param w The width of the Component.
+ 			 * @param y The height of the Component.
+ 			 */
+       public void paintBorder(Component c, Graphics g, int x, int y, int w,
+                               int h)
+       {
+ 	Color saved = g.getColor();
+ 	g.setColor(Color.BLACK);
+ 
+ 	g.drawRect(0, 0, w - 1, h - 1);
+ 
+ 	g.setColor(saved);
+       }
+     };
+ 
+ 	/** The shared instance of BasicToolTipUI used for all ToolTips. */
+ 	private static BasicToolTipUI shared;
+ 
+   /**
+    * Creates a new BasicToolTipUI object.
+    */
+   public BasicToolTipUI()
+   {
+     super();
+   }
+ 
+   /**
+    * This method creates a new BasicToolTip UI for the given 
+ 	 * JComponent.
+    *
+    * @param c The JComponent to create a UI for.
+    *
+    * @return A BasicToolTipUI that can be used by the given JComponent.
+    */
+   public static ComponentUI createUI(JComponent c)
+   {
+ 		if (shared == null)
+ 			shared = new BasicToolTipUI();
+ 		return shared;
+   }
+ 
+   /**
+    * This method returns the msximum size of the given JComponent.
+    *
+    * @param c The JComponent to find a maximum size for.
+    *
+    * @return The maximum size.
+    */
+   public Dimension getMaximumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the minimum size of the given JComponent.
+    *
+    * @param c The JComponent to find a minimum size for.
+    *
+    * @return The minimum size.
+    */
+   public Dimension getMinimumSize(JComponent c)
+   {
+     return getPreferredSize(c);
+   }
+ 
+   /**
+    * This method returns the preferred size of the given JComponent.
+    *
+    * @param c The JComponent to find a preferred size for.
+    *
+    * @return The preferred size.
+    */
+   public Dimension getPreferredSize(JComponent c)
+   {
+     JToolTip tip = (JToolTip) c;
+     Rectangle vr = new Rectangle();
+     Rectangle ir = new Rectangle();
+     Rectangle tr = new Rectangle();
+     Insets insets = tip.getInsets();
+     FontMetrics fm = tip.getToolkit().getFontMetrics(tip.getFont());
+     SwingUtilities.layoutCompoundLabel(tip, fm, tip.getTipText(), null,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER, vr, ir, tr, 0);
+     return new Dimension(insets.left + tr.width + insets.right,
+                          insets.top + tr.height + insets.bottom);
+   }
+ 
+   /**
+    * This method installs the defaults for the given JComponent.
+    *
+    * @param c The JComponent to install defaults for.
+    */
+   protected void installDefaults(JComponent c)
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+     c.setBackground(defaults.getColor("ToolTip.background"));
+     c.setForeground(defaults.getColor("ToolTip.foreground"));
+     c.setFont(defaults.getFont("ToolTip.font"));
+     c.setBorder(defaultBorder);
+   }
+ 
+   /**
+    * This method installs the listeners for the given JComponent.
+    *
+    * @param c The JComponent to install listeners for.
+    */
+   protected void installListeners(JComponent c)
+   {
+   }
+ 
+   /**
+    * This method installs the UI for the given JComponent.
+    *
+    * @param c The JComponent to install the UI for.
+    */
+   public void installUI(JComponent c)
+   {
+     c.setOpaque(true);
+     installDefaults(c);
+     installListeners(c);
+   }
+ 
+   /**
+    * This method paints the given JComponent with the given Graphics object.
+    *
+    * @param g The Graphics object to paint with.
+    * @param c The JComponent to paint.
+    */
+   public void paint(Graphics g, JComponent c)
+   {
+     JToolTip tip = (JToolTip) c;
+ 
+     String text = tip.getTipText();
+     if (text == null)
+       return;
+ 
+     Rectangle vr = new Rectangle();
+     vr = SwingUtilities.calculateInnerArea(tip, vr);
+     Rectangle ir = new Rectangle();
+     Rectangle tr = new Rectangle();
+     FontMetrics fm = tip.getToolkit().getFontMetrics(tip.getFont());
+     SwingUtilities.layoutCompoundLabel(tip, fm, tip.getTipText(), null,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER,
+                                        SwingConstants.CENTER, vr, ir, tr, 0);
+ 
+     Color saved = g.getColor();
+     g.setColor(Color.BLACK);
+ 
+     g.drawString(text, vr.x, vr.y + fm.getAscent());
+ 
+     g.setColor(saved);
+   }
+ 
+   /**
+    * This method uninstalls the defaults for the given JComponent.
+    *
+    * @param c The JComponent to uninstall defaults for.
+    */
+   protected void uninstallDefaults(JComponent c)
+   {
+     c.setForeground(null);
+     c.setBackground(null);
+     c.setFont(null);
+     c.setBorder(null);
+   }
+ 
+   /**
+    * This method uninstalls listeners for the given JComponent.
+    *
+    * @param c The JComponent to uninstall listeners for.
+    */
+   protected void uninstallListeners(JComponent c)
+   {
+   }
+ 
+   /**
+    * This method uninstalls the UI for the given JComponent.
+    *
+    * @param c The JComponent to uninstall.
+    */
+   public void uninstallUI(JComponent c)
+   {
+     uninstallDefaults(c);
+     uninstallListeners(c);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTreeUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTreeUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicTreeUI.java	Tue Aug 26 22:42:37 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicTreeUI.java	Wed Feb 16 20:03:01 2005
***************
*** 1,5 ****
! /* BasicTreeUI.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BasicTreeUI.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,49 ****
  
  package javax.swing.plaf.basic;
  
  import java.awt.Rectangle;
  import javax.swing.JTree;
  import javax.swing.plaf.TreeUI;
  import javax.swing.tree.TreePath;
  
- 
  /**
   * A delegate providing the user interface for <code>JTree</code>
   * according to the Basic look and feel. The current implementation
--- 38,58 ----
  
  package javax.swing.plaf.basic;
  
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Dimension;
+ import java.awt.Graphics;
  import java.awt.Rectangle;
+ 
+ import javax.swing.JComponent;
  import javax.swing.JTree;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.TreeUI;
+ import javax.swing.tree.TreeModel;
  import javax.swing.tree.TreePath;
  
  /**
   * A delegate providing the user interface for <code>JTree</code>
   * according to the Basic look and feel. The current implementation
*************** import javax.swing.tree.TreePath;
*** 57,62 ****
--- 66,72 ----
  public class BasicTreeUI
    extends TreeUI
  {
+ 
    /**
     * Determines the geometric extent of the label that is
     * drawn for a path.
*************** public class BasicTreeUI
*** 191,197 ****
      return true;  // FIXME: not implemented
    }
  
- 
    /**
     * Cancels editing a tree cell, discarding any entered value.
     * If no editing session is active, nothing happens. The cell
--- 201,206 ----
*************** public class BasicTreeUI
*** 233,236 ****
--- 242,398 ----
    {
      return null;  // FIXME: not implemented
    }
+ 
+   public static ComponentUI createUI(JComponent c)
+   {
+     return new BasicTreeUI();
+   }
+ 
+   int rightChildIndent;
+   int leftChildIndent;
+   int rowHeight;
+   Color hashColor;
+ 
+   protected void installDefaults(JTree tree) 
+   {
+     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+ 
+     tree.setFont(defaults.getFont("Tree.font"));
+     tree.setForeground(defaults.getColor("Tree.foreground"));
+     tree.setBackground(defaults.getColor("Tree.background"));
+     tree.setOpaque(true);
+ 
+     hashColor = defaults.getColor("Tree.hash");
+     rightChildIndent = defaults.getInt("Tree.rightChildIndent");
+     leftChildIndent = defaults.getInt("Tree.leftChildIndent");
+     rowHeight = defaults.getInt("Tree.rowHeight");
+   }
+ 
+   protected void installKeyboardActions() 
+   {
+   }
+ 
+   protected void installListeners() 
+   {
+   }
+ 
+   public void installUI(JComponent c)
+   {
+     installDefaults((JTree) c);
+   }
+ 
+ 
+   protected void uninstallDefaults(JTree tree) 
+   {
+     tree.setFont(null);
+     tree.setForeground(null);
+     tree.setBackground(null);
+ 
+     tree.setCellRenderer(null);
+   }
+ 
+   public void uninstallUI(JComponent c)
+   {
+     uninstallDefaults((JTree) c);
+   }
+ 
+   public Dimension getPreferredSize(JComponent c)
+   {
+     return new Dimension(200,200);
+   }
+ 
+   protected void paintLeaf(Graphics g, int x, int y, JTree tree, Object leaf)
+   {
+     Component c = tree.getCellRenderer().getTreeCellRendererComponent(tree, 
+                                                                       leaf, 
+                                                                       false, // selected
+                                                                       false, // expanded
+                                                                       true,  // leaf
+                                                                       0,     // row
+                                                                       false  // hasFocus
+                                                                       );
+     g.translate(x, y);
+     c.paint(g);
+     g.translate(-x, -y);
+   }
+ 
+   protected void paintNonLeaf(Graphics g, int x, int y, JTree tree, Object nonLeaf)
+   {
+     Component c = tree.getCellRenderer().getTreeCellRendererComponent(tree, 
+                                                                       nonLeaf, 
+                                                                       false, // selected
+                                                                       false, // expanded
+                                                                       false, // leaf
+                                                                       0,     // row
+                                                                       false  // hasFocus
+                                                                       );
+     g.translate(x, y);
+     c.paint(g);
+     g.translate(-x, -y);
+   }
+ 
+   protected int paintRecursive(Graphics g, 
+                                int indentation,
+                                int descent,
+                                int childNumber,
+                                int depth,
+                                JTree tree,
+                                TreeModel mod, 
+                                Object curr)
+   {
+     Rectangle clip = g.getClipBounds();
+     if (indentation > clip.x + clip.width + rightChildIndent ||
+         descent > clip.y + clip.height + rowHeight)
+       return descent;
+ 
+ 
+     int halfHeight = rowHeight / 2;
+     int halfWidth = rightChildIndent / 2;
+     int y0 = descent + halfHeight;
+         
+     if (mod.isLeaf(curr))
+       {
+         paintLeaf(g, indentation, descent, tree, curr);
+         descent += rowHeight;
+       }
+     else
+       {
+         if (depth > 0 || tree.isRootVisible())
+           {
+             paintNonLeaf(g, indentation, descent, tree, curr);
+             descent += rowHeight;
+             y0 += halfHeight;
+           }
+         int max = mod.getChildCount(curr);
+         for (int i = 0; i < max; ++i)
+           {
+             g.setColor(hashColor);
+             g.drawLine(indentation + halfWidth,        descent + halfHeight, 
+                        indentation + rightChildIndent, descent + halfHeight);
+             descent = paintRecursive(g, 
+                                      indentation + rightChildIndent, descent,
+                                      i, depth+1,
+                                      tree, mod, mod.getChild(curr, i));
+           }
+       }
+ 
+     int y1 = descent - halfHeight;
+     if (y0 != y1)
+       {
+         g.setColor(hashColor);
+         g.drawLine(indentation + halfWidth, y0, 
+                    indentation + halfWidth, y1);
+       }
+ 
+     return descent;
+   }
+ 
+   public void paint(Graphics g, JComponent c)
+   {
+     JTree tree = (JTree) c;
+     TreeModel mod = tree.getModel();
+     g.translate(10, 10);
+     paintRecursive(g, 0, 0, 0, 0, tree, mod, mod.getRoot());
+     g.translate(-10, -10);
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicViewportUI.java gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicViewportUI.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/BasicViewportUI.java	Sat Jan 10 21:59:30 2004
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/BasicViewportUI.java	Tue Nov 30 23:59:06 2004
***************
*** 1,4 ****
! /* BasicViewportUI.java
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* BasicViewportUI.java --
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 38,73 ****
  
  package javax.swing.plaf.basic;
  
  import java.awt.Dimension;
  import java.awt.Graphics;
  import javax.swing.JComponent;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.ViewportUI;
  
  public class BasicViewportUI extends ViewportUI 
  {
  
!     public static ComponentUI createUI(final JComponent c)
      {
! 	return new BasicViewportUI();
      }
  
!     
!     public void installUI(final JComponent c) 
!     {
! 	super.installUI(c);
!     }
      
  
!     public Dimension getPreferredSize(JComponent c) 
!     {
! 	Dimension d = new Dimension(100,100);
! 	System.out.println("BasicViewportUI->preff->"+d);
! 	return d;
!     }
  
!     public void paint(Graphics g, JComponent c)
!     {      
! 	System.out.println("BasicViewportUI->paint->"+c);
!     }
  }
--- 38,235 ----
  
  package javax.swing.plaf.basic;
  
+ import java.awt.Component;
  import java.awt.Dimension;
  import java.awt.Graphics;
+ import java.awt.Image;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.image.ImageObserver;
+ 
  import javax.swing.JComponent;
+ import javax.swing.JViewport;
+ import javax.swing.ViewportLayout;
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
  import javax.swing.plaf.ComponentUI;
  import javax.swing.plaf.ViewportUI;
  
  public class BasicViewportUI extends ViewportUI 
  {
  
!   ChangeListener changeListener;
!   Image backingStoreImage;
!   int backingStoreWidth = -1;
!   int backingStoreHeight = -1;
!   
!   class ChangeHandler implements ChangeListener
!   {
!     public void stateChanged(ChangeEvent event)
      {
!       JViewport v = (JViewport) event.getSource();
!       v.repaint();
      }
+   }
  
!   void installDefaults(JComponent c)
!   {    
!     c.setOpaque(true);
!   }
! 
!   void uninstallDefaults(JComponent c)
!   {
!   }
! 
!   void installListeners(JComponent c)
!   {
!     ((JViewport)c).addChangeListener(changeListener);
!   }
! 
!   void uninstallListeners(JComponent c)
!   {
!     ((JViewport)c).removeChangeListener(changeListener);
!   }
! 
!   public BasicViewportUI()
!   {
!     changeListener = new ChangeHandler();
!   }
! 
!   public static ComponentUI createUI(JComponent c)
!   {
!     return new BasicViewportUI();
!   }
! 
!   public void installUI(JComponent c) 
!   {
!     super.installUI(c);
!     c.setLayout(new ViewportLayout());
!     installListeners(c);
!   }
! 
!   public void uninstallUI(JComponent c) 
!   {
!     uninstallListeners(c);
!   }
      
  
!   public Dimension getPreferredSize(JComponent c) 
!   {
!     // let the ViewportLayout decide
!     return null;
!   }
  
!   public void paint(Graphics g, JComponent c)
!   {
!     JViewport port = (JViewport)c;
!     Component view = port.getView();
! 
!     if (view == null)
!       return;
! 
!     Point pos = port.getViewPosition();
!     Rectangle viewBounds = view.getBounds();
!     Rectangle portBounds = port.getBounds();
! 
!     if (viewBounds.width == 0 
!         || viewBounds.height == 0
!         || portBounds.width == 0
!         || portBounds.height == 0)
!       return;
! 
!     switch (port.getScrollMode())
!       {
! 
!       case JViewport.BACKINGSTORE_SCROLL_MODE:
!         paintBackingStore(g, port, view, pos, viewBounds, portBounds);
!         break;
! 
!       case JViewport.BLIT_SCROLL_MODE:
!         // FIXME: implement separate blit mode
! 
!       case JViewport.SIMPLE_SCROLL_MODE:
!       default:
!         paintSimple(g, port, view, pos, viewBounds, portBounds);
!         break;
!       }
!   }
! 
!   private void paintSimple(Graphics g, 
!                            JViewport v, 
!                            Component view, 
!                            Point pos, 
!                            Rectangle viewBounds, 
!                            Rectangle portBounds)
!   {
!     Rectangle oldClip = g.getClipBounds ();
!     g.setClip (oldClip.intersection (viewBounds));
!     g.translate (-pos.x, -pos.y);
!     try
!       {   
!         view.paint(g);
!       } 
!     finally 
!       {
!         g.translate (pos.x, pos.y);
!         g.setClip (oldClip);
!       }        
!   }
! 
!   private void paintBackingStore(Graphics g, 
!                                  JViewport v, 
!                                  Component view, 
!                                  Point pos, 
!                                  Rectangle viewBounds, 
!                                  Rectangle portBounds)
!   {      
!     if (backingStoreImage == null 
!         || backingStoreWidth != viewBounds.width
!         || backingStoreHeight != viewBounds.height)
!       {
!         backingStoreImage = v.createImage(viewBounds.width, viewBounds.height);
!         backingStoreWidth = viewBounds.width;
!         backingStoreHeight = viewBounds.height;
!       }
! 
!     Graphics g2 = backingStoreImage.getGraphics();
! 
!     if (v.getBackground() != null)
!       {
!         // fill the backing store background
!         java.awt.Color save = g2.getColor();
!         g2.setColor(v.getBackground());
!         g2.fillRect (0, 0, backingStoreWidth, backingStoreHeight);
!         g2.setColor(save);
! 
!         // fill the viewport background
!         save = g.getColor();
!         g.setColor(v.getBackground());
!         g.fillRect (0, 0, portBounds.width, portBounds.height);
!         g.setColor(save);
! 
!       }
!     else
!       {
!         // clear the backing store background
!         g2.clearRect(0, 0, backingStoreWidth, backingStoreHeight);
! 
!         // clear the viewport background
!         g.clearRect(0, 0, portBounds.width, portBounds.height);
!       }
! 
!     g2.setClip(g.getClipBounds());
!     g2.translate(-pos.x, -pos.y);
!     try 
!       {
!         view.paint(g2);
!       }
!     finally
!       {
!         g2.translate(pos.x, pos.y);
!       }
!     g2 = null;
!     g.drawImage(backingStoreImage, 
!                 0, 0, 
!                 (ImageObserver)null);
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/basic/ComboPopup.java gcc-4.0.0/libjava/javax/swing/plaf/basic/ComboPopup.java
*** gcc-3.4.3/libjava/javax/swing/plaf/basic/ComboPopup.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/basic/ComboPopup.java	Tue Nov 30 23:59:06 2004
***************
*** 0 ****
--- 1,103 ----
+ /* ComboPopup.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.basic;
+ 
+ import java.awt.event.KeyListener;
+ import java.awt.event.MouseListener;
+ import java.awt.event.MouseMotionListener;
+ 
+ import javax.swing.JList;
+ 
+ public interface ComboPopup
+ {
+   /**
+    * This method display popup menu containing list of JComboBox's items to
+    * the screen
+    */
+   void show();
+ 
+   /**
+    * This method hides popup menu with list of JComboBox's item from the
+    * screen
+    */
+   void hide();
+ 
+   /**
+    * Retursn true if popup menu with JComboBOx's item is currently visible on
+    * the screen and false otherwise
+    *
+    * @return true if JComboBox's popup menu with list of items is currently
+    *         visible on the screen and false otherwise.
+    */
+   boolean isVisible();
+ 
+   /**
+    * Return JList that is used to draw cells of the JComboBox.
+    *
+    * @return JList that is used to draw cells of the JcomboBox
+    */
+   JList getList();
+ 
+   /**
+    * This method returns MouseListener that listen's to mouse events occuring
+    * in the combo box
+    *
+    * @return MouseListenere
+    */
+   MouseListener getMouseListener();
+ 
+   /**
+    * This method returns MouseListener that listen's to mouse events occuring
+    * in the combo box.
+    *
+    * @return MouseMotionListener
+    */
+   MouseMotionListener getMouseMotionListener();
+ 
+   /**
+    * This method returns KeyListener that listen's to key events  occuring in
+    * the combo box.
+    *
+    * @return KeyListener
+    */
+   KeyListener getKeyListener();
+ 
+   /* This method removes any listeners that were installed */
+   void uninstallingUI();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/metal/DefaultMetalTheme.java gcc-4.0.0/libjava/javax/swing/plaf/metal/DefaultMetalTheme.java
*** gcc-3.4.3/libjava/javax/swing/plaf/metal/DefaultMetalTheme.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/metal/DefaultMetalTheme.java	Wed Feb 16 20:03:03 2005
***************
*** 0 ****
--- 1,143 ----
+ /* DefaultMetalTheme.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.metal;
+ 
+ import java.awt.Font;
+ 
+ import javax.swing.plaf.ColorUIResource;
+ import javax.swing.plaf.FontUIResource;
+ 
+ public class DefaultMetalTheme extends MetalTheme
+ {
+   private static final ColorUIResource PRIMARY1 =
+     new ColorUIResource(102, 102, 153);
+   private static final ColorUIResource PRIMARY2 =
+     new ColorUIResource(153, 153, 204);
+   private static final ColorUIResource PRIMARY3 = 
+     new ColorUIResource(204, 204, 255);
+   private static final ColorUIResource SECONDARY1 = 
+     new ColorUIResource(102, 102, 102);
+   private static final ColorUIResource SECONDARY2 = 
+     new ColorUIResource(153, 153, 153);
+   private static final ColorUIResource SECONDARY3 = 
+     new ColorUIResource(204, 204, 204);
+   
+   private static final FontUIResource CONTROL_TEXT_FONT =
+     new FontUIResource("Dialog", Font.BOLD, 12);
+   private static final FontUIResource MENU_TEXT_FONT =
+     new FontUIResource("Dialog", Font.BOLD, 12);
+   private static final FontUIResource SUB_TEXT_FONT =
+     new FontUIResource("Dialog", Font.PLAIN, 10);
+   private static final FontUIResource SYSTEM_TEXT_FONT =
+     new FontUIResource("Dialog", Font.PLAIN, 12);
+   private static final FontUIResource USER_TEXT_FONT =
+     new FontUIResource("Dialog", Font.PLAIN, 12);
+   private static final FontUIResource WINDOW_TITLE_FONT =
+     new FontUIResource("Dialog", Font.BOLD, 12);
+   
+   public DefaultMetalTheme()
+   {
+     // Do nothing here.
+   }
+ 
+   public String getName()
+   {
+     return "Steel";
+   }
+ 
+   protected ColorUIResource getPrimary1()
+   {
+     return PRIMARY1;
+   }
+ 
+   protected ColorUIResource getPrimary2()
+   {
+     return PRIMARY2;
+   }
+ 
+   protected ColorUIResource getPrimary3()
+   {
+     return PRIMARY3;
+   }
+ 
+   protected ColorUIResource getSecondary1()
+   {
+     return SECONDARY1;
+   }
+ 
+   protected ColorUIResource getSecondary2()
+   {
+     return SECONDARY2;
+   }
+ 
+   protected ColorUIResource getSecondary3()
+   {
+     return SECONDARY3;
+   }
+ 
+   public FontUIResource getControlTextFont()
+   {
+     return CONTROL_TEXT_FONT;
+   }
+ 
+   public FontUIResource getMenuTextFont()
+   {
+     return MENU_TEXT_FONT;
+   }
+   
+   public FontUIResource getSubTextFont()
+   {
+     return SUB_TEXT_FONT;
+   }
+   
+   public FontUIResource getSystemTextFont()
+   {
+     return SYSTEM_TEXT_FONT;
+   }
+   
+   public FontUIResource getUserTextFont()
+   {
+     return USER_TEXT_FONT;
+   }
+   
+   public FontUIResource getWindowTitleFont()
+   {
+     return WINDOW_TITLE_FONT;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/metal/MetalLookAndFeel.java gcc-4.0.0/libjava/javax/swing/plaf/metal/MetalLookAndFeel.java
*** gcc-3.4.3/libjava/javax/swing/plaf/metal/MetalLookAndFeel.java	Sun Oct 12 13:26:01 2003
--- gcc-4.0.0/libjava/javax/swing/plaf/metal/MetalLookAndFeel.java	Wed Feb 16 20:03:03 2005
*************** obligated to do so.  If you do not wish 
*** 36,69 ****
  exception statement from your version. */
  
  
- 
  package javax.swing.plaf.metal;
  
  import javax.swing.UIDefaults;
! import javax.swing.plaf.basic.BasicDefaults;
  import javax.swing.plaf.basic.BasicLookAndFeel;
  
  public class MetalLookAndFeel extends BasicLookAndFeel
!  {	   
!      public boolean isNativeLookAndFeel()        { return true; }
!      public boolean isSupportedLookAndFeel()     { return true; }
!      public String getDescription()              { return "Metal look and feel"; }
!      public String getID()                       { return "MetalLookAndFeel"; }
!      public String getName()                     { return "MetalLookAndFeel"; }
!      
!      
!      UIDefaults LAF_defaults;
!      
!      public MetalLookAndFeel()
!      {
!      }
  
!      public UIDefaults getDefaults()
! 	 {
! 	   if (LAF_defaults == null)
! 	     LAF_defaults = new BasicDefaults();
! 	     
! 	     //      Returns the default values for this look and feel. 
! 	     return LAF_defaults;
! 	 }
!  }
--- 36,310 ----
  exception statement from your version. */
  
  
  package javax.swing.plaf.metal;
  
  import javax.swing.UIDefaults;
! import javax.swing.plaf.ColorUIResource;
! import javax.swing.plaf.FontUIResource;
  import javax.swing.plaf.basic.BasicLookAndFeel;
  
  public class MetalLookAndFeel extends BasicLookAndFeel
! {	   
!   private static final long serialVersionUID = 6680646159193457980L;
!   private static MetalTheme theme;
!   private UIDefaults LAF_defaults;
  
!   public MetalLookAndFeel()
!   {
!     createDefaultTheme();
!   }
! 
!   protected void createDefaultTheme()
!   {
!     setCurrentTheme(new DefaultMetalTheme());
!   }
! 
!   public boolean isNativeLookAndFeel()
!   {
!     return true;
!   }
! 
!   public boolean isSupportedLookAndFeel()
!   {
!     return true;
!   }
! 
!   public String getDescription()
!   {
!     return "Metal look and feel";
!   }
! 
!   public String getID()
!   {
!     return "MetalLookAndFeel";
!   }
! 
!   public String getName()
!   {
!     return "MetalLookAndFeel";
!   }
! 
!   public UIDefaults getDefaults()
!   {
!     if (LAF_defaults == null)
!       LAF_defaults = super.getDefaults();
! 
!     // Returns the default values for this look and feel. 
!     return LAF_defaults;
!   }
! 
!   public static ColorUIResource getAcceleratorForeground()
!   {
!     return theme.getAcceleratorForeground();
!   }
! 
!   public static ColorUIResource getAcceleratorSelectedForeground()
!   {
!     return theme.getAcceleratorSelectedForeground();
!   }
! 
!   public static ColorUIResource getBlack()
!   {
!     return theme.getBlack();
!   }
! 
!   public static ColorUIResource getControl()
!   {
!     return theme.getControl();
!   }
! 
!   public static ColorUIResource getControlDarkShadow()
!   {
!     return theme.getControlDarkShadow();
!   }
! 
!   public static ColorUIResource getControlDisabled()
!   {
!     return theme.getControlDisabled();
!   }
! 
!   public static ColorUIResource getControlHighlight()
!   {
!     return theme.getControlHighlight();
!   }
! 
!   public static ColorUIResource getControlInfo()
!   {
!     return theme.getControlInfo();
!   }
! 
!   public static ColorUIResource getControlShadow()
!   {
!     return theme.getControlShadow();
!   }
! 
!   public static ColorUIResource getControlTextColor()
!   {
!     return theme.getControlTextColor();
!   }
! 
!   public static FontUIResource getControlTextFont()
!   {
!     return theme.getControlTextFont();
!   }
! 
!   public static ColorUIResource getDesktopColor()
!   {
!     return theme.getDesktopColor();
!   }
! 
!   public static ColorUIResource getFocusColor()
!   {
!     return theme.getFocusColor();
!   }
! 
!   public static ColorUIResource getHighlightedTextColor()
!   {
!     return theme.getHighlightedTextColor();
!   }
! 
!   public static ColorUIResource getInactiveControlTextColor()
!   {
!     return theme.getInactiveControlTextColor();
!   }
! 
!   public static ColorUIResource getInactiveSystemTextColor()
!   {
!     return theme.getInactiveSystemTextColor();
!   }
! 
!   public static ColorUIResource getMenuBackground()
!   {
!     return theme.getMenuBackground();
!   }
! 
!   public static ColorUIResource getMenuDisabledForeground()
!   {
!     return theme.getMenuDisabledForeground();
!   }
! 
!   public static ColorUIResource getMenuForeground()
!   {
!     return theme.getMenuForeground();
!   }
! 
!   public static ColorUIResource getMenuSelectedBackground()
!   {
!     return theme.getMenuSelectedBackground();
!   }
! 
!   public static ColorUIResource getMenuSelectedForeground()
!   {
!     return theme.getMenuSelectedForeground();
!   }
! 
!   public static FontUIResource getMenuTextFont()
!   {
!     return theme.getMenuTextFont();
!   }
! 
!   public static ColorUIResource getPrimaryControl()
!   {
!     return theme.getPrimaryControl();
!   }
! 
!   public static ColorUIResource getPrimaryControlDarkShadow()
!   {
!     return theme.getPrimaryControlDarkShadow();
!   }
! 
!   public static ColorUIResource getPrimaryControlHighlight()
!   {
!     return theme.getPrimaryControlHighlight();
!   }
! 
!   public static ColorUIResource getPrimaryControlInfo()
!   {
!     return theme.getPrimaryControlInfo();
!   }
! 
!   public static ColorUIResource getPrimaryControlShadow()
!   {
!     return theme.getPrimaryControlShadow();
!   }
! 
!   public static ColorUIResource getSeparatorBackground()
!   {
!     return theme.getSeparatorBackground();
!   }
! 
!   public static ColorUIResource getSeparatorForeground()
!   {
!     return theme.getSeparatorForeground();
!   }
! 
!   public static FontUIResource getSubTextFont()
!   {
!     return theme.getSubTextFont();
!   }
! 
!   public static ColorUIResource getSystemTextColor()
!   {
!     return theme.getSystemTextColor();
!   }
! 
!   public static FontUIResource getSystemTextFont()
!   {
!     return theme.getSystemTextFont();
!   }
! 
!   public static ColorUIResource getTextHighlightColor()
!   {
!     return theme.getTextHighlightColor();
!   }
! 
!   public static ColorUIResource getUserTextColor()
!   {
!     return theme.getUserTextColor();
!   }
! 
!   public static FontUIResource getUserTextFont()
!   {
!     return theme.getUserTextFont();
!   }
! 
!   public static ColorUIResource getWhite()
!   {
!     return theme.getWhite();
!   }
! 
!   public static ColorUIResource getWindowBackground()
!   {
!     return theme.getWindowBackground();
!   }
! 
!   public static ColorUIResource getWindowTitleBackground()
!   {
!     return theme.getWindowTitleBackground();
!   }
! 
!   public static FontUIResource getWindowTitleFont()
!   {
!     return theme.getWindowTitleFont();
!   }
! 
!   public static ColorUIResource getWindowTitleForeground()
!   {
!     return theme.getWindowTitleForeground();
!   }
! 
!   public static ColorUIResource getWindowTitleInactiveBackground()
!   {
!     return theme.getWindowTitleInactiveBackground();
!   }
! 
!   public static ColorUIResource getWindowTitleInactiveForeground()
!   {
!     return theme.getWindowTitleInactiveForeground();
!   }
! 
!   public static void setCurrentTheme(MetalTheme theme)
!   {
!     MetalLookAndFeel.theme = theme;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/plaf/metal/MetalTheme.java gcc-4.0.0/libjava/javax/swing/plaf/metal/MetalTheme.java
*** gcc-3.4.3/libjava/javax/swing/plaf/metal/MetalTheme.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/plaf/metal/MetalTheme.java	Wed Feb 16 20:03:03 2005
***************
*** 0 ****
--- 1,259 ----
+ /* MetalTheme.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.plaf.metal;
+ 
+ import java.awt.Color;
+ 
+ import javax.swing.UIDefaults;
+ import javax.swing.plaf.ColorUIResource;
+ import javax.swing.plaf.FontUIResource;
+ 
+ public abstract class MetalTheme
+ {
+   private ColorUIResource BLACK = new ColorUIResource(Color.BLACK);
+   private ColorUIResource WHITE = new ColorUIResource(Color.WHITE);
+ 
+   public MetalTheme()
+   {
+     // Do nothing here.
+   }
+ 
+   public abstract String getName();
+ 
+   public void addCustomEntriesToTable(UIDefaults table)
+   {
+     // Do nothing here.
+     // This method needs to be overloaded to actuall do something.
+   }
+ 
+   public ColorUIResource getAcceleratorForeground()
+   {
+     return getPrimary1();
+   }
+ 
+   public ColorUIResource getAcceleratorSelectedForeground()
+   {
+     return getBlack();
+   }
+   
+   public ColorUIResource getControl()
+   {
+     return getSecondary3();
+   }
+ 
+   public ColorUIResource getControlDarkShadow()
+   {
+     return getSecondary1();
+   }
+ 
+   public ColorUIResource getControlDisabled()
+   {
+     return getSecondary2();
+   }
+ 
+   public ColorUIResource getControlHighlight()
+   {
+     return getWhite();
+   }
+ 
+   public ColorUIResource getControlInfo()
+   {
+     return getBlack();
+   }
+ 
+   public ColorUIResource getControlShadow()
+   {
+     return getSecondary2();
+   }
+ 
+   public ColorUIResource getControlTextColor()
+   {
+     return getControlInfo();
+   }
+ 
+   public ColorUIResource getDesktopColor()
+   {
+     return getPrimary2();
+   }
+ 
+   public ColorUIResource getFocusColor()
+   {
+     return getPrimary2();
+   }
+ 
+   public ColorUIResource getHighlightedTextColor()
+   {
+     return getControlTextColor();
+   }
+ 
+   public ColorUIResource getInactiveControlTextColor()
+   {
+     return getControlDisabled();
+   }
+ 
+   public ColorUIResource getInactiveSystemTextColor()
+   {
+     return getSecondary2();
+   }
+ 
+   public ColorUIResource getMenuBackground()
+   {
+     return getSecondary3();
+   }
+ 
+   public ColorUIResource getMenuDisabledForeground()
+   {
+     return getSecondary3();
+   }
+ 
+   public ColorUIResource getMenuForeground()
+   {
+     return getBlack();
+   }
+ 
+   public ColorUIResource getMenuSelectedBackground()
+   {
+     return getPrimary2();
+   }
+ 
+   public ColorUIResource getMenuSelectedForeground()
+   {
+     return getBlack();
+   }
+ 
+   public ColorUIResource getPrimaryControl()
+   {
+     return getPrimary3();
+   }
+ 
+   public ColorUIResource getPrimaryControlDarkShadow()
+   {
+     return getPrimary1();
+   }
+ 
+   public ColorUIResource getPrimaryControlHighlight()
+   {
+     return getWhite();
+   }
+ 
+   public ColorUIResource getPrimaryControlInfo()
+   {
+     return getBlack();
+   }
+ 
+   public ColorUIResource getPrimaryControlShadow()
+   {
+     return getPrimary2();
+   }
+ 
+   public ColorUIResource getSeparatorBackground()
+   {
+     return getWhite();
+   }
+ 
+   public ColorUIResource getSeparatorForeground()
+   {
+     return getPrimary1();
+   }
+ 
+   public ColorUIResource getSystemTextColor()
+   {
+     return getBlack();
+   }
+ 
+   public ColorUIResource getTextHighlightColor()
+   {
+     return getPrimary3();
+   }
+ 
+   public ColorUIResource getUserTextColor()
+   {
+     return getBlack();
+   }
+   
+   public ColorUIResource getWindowBackground()
+   {
+     return getWhite();
+   }
+ 
+   public ColorUIResource getWindowTitleBackground()
+   {
+     return getPrimary3();
+   }
+ 
+   public ColorUIResource getWindowTitleForeground()
+   {
+     return getBlack();
+   }
+ 
+   public ColorUIResource getWindowTitleInactiveBackground()
+   {
+     return getSecondary3();
+   }
+ 
+   public ColorUIResource getWindowTitleInactiveForeground()
+   {
+     return getBlack();
+   }
+ 
+   protected ColorUIResource getBlack()
+   {
+     return BLACK;
+   }
+ 
+   protected ColorUIResource getWhite()
+   {
+     return WHITE;
+   }
+ 
+   protected abstract ColorUIResource getPrimary1();
+   protected abstract ColorUIResource getPrimary2();
+   protected abstract ColorUIResource getPrimary3();
+   protected abstract ColorUIResource getSecondary1();
+   protected abstract ColorUIResource getSecondary2();
+   protected abstract ColorUIResource getSecondary3();
+ 
+   public abstract FontUIResource getControlTextFont();
+   public abstract FontUIResource getMenuTextFont();
+   public abstract FontUIResource getSubTextFont();
+   public abstract FontUIResource getSystemTextFont();
+   public abstract FontUIResource getUserTextFont();
+   public abstract FontUIResource getWindowTitleFont();
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/AbstractTableModel.java gcc-4.0.0/libjava/javax/swing/table/AbstractTableModel.java
*** gcc-3.4.3/libjava/javax/swing/table/AbstractTableModel.java	Wed Oct  8 15:29:52 2003
--- gcc-4.0.0/libjava/javax/swing/table/AbstractTableModel.java	Tue Nov 30 23:59:07 2004
***************
*** 1,5 ****
  /* AbstractTableModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractTableModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.table;
*** 40,45 ****
--- 40,46 ----
  
  import java.io.Serializable;
  import java.util.EventListener;
+ 
  import javax.swing.event.EventListenerList;
  import javax.swing.event.TableModelEvent;
  import javax.swing.event.TableModelListener;
*************** public abstract class AbstractTableModel
*** 271,295 ****
    {
      return listenerList.getListeners (listenerType);
    }
! 
!   /**
!    * getValueAt
!    * @param value0 TODO
!    * @param value1 TODO
!    * @return Object
!    */
!   public abstract Object getValueAt (int row, int column);
! 
!   /**
!    * getColumnCount
!    * @return int
!    */
!   public abstract int getColumnCount();
! 
!   /**
!    * getRowCount
!    * @return int
!    */
!   public abstract int getRowCount();
! 
! } // AbstractTableModel
--- 272,275 ----
    {
      return listenerList.getListeners (listenerType);
    }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/DefaultTableCellRenderer.java gcc-4.0.0/libjava/javax/swing/table/DefaultTableCellRenderer.java
*** gcc-3.4.3/libjava/javax/swing/table/DefaultTableCellRenderer.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/table/DefaultTableCellRenderer.java	Wed Feb 16 20:03:05 2005
***************
*** 1,5 ****
! /* DefaultTableCellRenderer.java
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* DefaultTableCellRenderer.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,74 ****
  
  package javax.swing.table;
  
  import java.awt.Component;
  import java.io.Serializable;
  import javax.swing.JLabel;
  import javax.swing.JTable;
  import javax.swing.border.Border;
  
  /**
!  * STUBBED
   */
  public class DefaultTableCellRenderer extends JLabel
    implements TableCellRenderer, Serializable
  {
    static final long serialVersionUID = 7878911414715528324L;
  
    public static class UIResource extends DefaultTableCellRenderer
      implements javax.swing.plaf.UIResource
    {
      public UIResource()
      {
      }
!   } // class UIResource
  
    public DefaultTableCellRenderer()
    {
    }
  
    public Component getTableCellRendererComponent(JTable table, Object value,
                                                   boolean isSelected,
                                                   boolean hasFocus,
                                                   int row, int column)
    {
!     return null;
    }
! } // class DefaultTableCellRenderer
--- 38,230 ----
  
  package javax.swing.table;
  
+ import java.awt.Color;
  import java.awt.Component;
+ import java.awt.Rectangle;
  import java.io.Serializable;
+ 
  import javax.swing.JLabel;
  import javax.swing.JTable;
  import javax.swing.border.Border;
+ import javax.swing.border.EmptyBorder;
  
  /**
!  * Class to display every cells.
   */
  public class DefaultTableCellRenderer extends JLabel
    implements TableCellRenderer, Serializable
  {
    static final long serialVersionUID = 7878911414715528324L;
  
+   protected static Border noFocusBorder = new EmptyBorder(0, 0, 0, 0);
+ 
    public static class UIResource extends DefaultTableCellRenderer
      implements javax.swing.plaf.UIResource
    {
      public UIResource()
      {
      }
!   }
  
+   /**
+    * Creates a default table cell renderer with an empty border.
+    */
    public DefaultTableCellRenderer()
    {
+     super();
+   }
+ 
+   /**
+    * Assign the unselected-foreground.
+    *
+    * @param c the color to assign
+    */
+   public void setForeground(Color c)
+   {
+     super.setForeground(c);
+   }
+ 
+   /**
+    * Assign the unselected-background.
+    *
+    * @param c the color to assign
+    */
+   public void setBackground(Color c)
+   {
+     super.setBackground(c);
+   }
+ 
+   /**
+    * Look and feel has changed.
+    *
+    * <p>Replaces the current UI object with the  latest version from
+    * the UIManager.</p>
+    */
+   public void updateUI()
+   {
+     super.updateUI();
    }
  
+   /**
+    * Get the string value of the object and pass it to setText().
+    *
+    * @param table the JTable
+    * @param value the value of the object
+    * @param isSelected is the cell selected?
+    * @param hasFocus has the cell the focus?
+    * @param row the row to render
+    * @param column the cell to render
+    * 
+    * @return this component (the default table cell renderer)
+    */
    public Component getTableCellRendererComponent(JTable table, Object value,
                                                   boolean isSelected,
                                                   boolean hasFocus,
                                                   int row, int column)
    {
!     if (value!=null)
!       super.setText(value.toString());
! 
!     setOpaque(true);
!     if (isSelected)
!       {
!         setBackground(table.getSelectionBackground());
!         setForeground(table.getSelectionForeground());
!       }
!     else
!       {
!         setBackground(table.getBackground());
!         setForeground(table.getForeground());
!       }
! 
!     setEnabled(table.isEnabled());
!     setFont(table.getFont());
!     return this;    
    }
! 
!   /**
!    * Overriden for performance.
!    *
!    * <p>This method needs to be overridden in a subclass to actually
!    * do something.</p>
!    *
!    * @return always true
!    */
!   public boolean isOpaque()
!   {
!     return true;
!   }
! 
!   /**
!    * Overriden for performance.
!    *
!    * <p>This method needs to be overridden in a subclass to actually
!    * do something.</p>
!    */
!   public void validate()
!   {
!     // Does nothing.
!   }
! 
!   public void revalidate()
!   {
!     // Does nothing.
!   }
! 
!   /**
!    * Overriden for performance.
!    *
!    * <p>This method needs to be overridden in a subclass to actually
!    * do something.</p>
!    */
!   public void repaint(long tm, int x, int y, int width, int height)
!   {
!     // Does nothing.
!   }
! 
!   /**
!    * Overriden for performance.
!    *
!    * <p>This method needs to be overridden in a subclass to actually
!    * do something.</p>
!    */
!   public void repaint(Rectangle r)
!   {
!     // Does nothing.
!   }
! 
!   /**
!    * Overriden for performance.
!    *
!    * <p>This method needs to be overridden in a subclass to actually
!    * do something.</p>
!    */
!   protected void firePropertyChange(String propertyName, Object oldValue,
!                                     Object newValue)
!   {
!     // Does nothing.
!   }
! 
!   /**
!    * Overriden for performance.
!    *
!    * <p>This method needs to be overridden in a subclass to actually
!    * do something.</p>
!    */
!   public void firePropertyChange(String propertyName, boolean oldValue,
! 		                 boolean newValue)
!   {
!     // Does nothing.
!   }
! 
!   /**
!    * Sets the String for this cell.
!    * 
!    * @param value the string value for this cell; if value is null it
!    * sets the text value to an empty string
!    */
!   protected void setValue(Object value)
!   {
!     super.setText((value!=null) ? value.toString() : "");
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/DefaultTableColumnModel.java gcc-4.0.0/libjava/javax/swing/table/DefaultTableColumnModel.java
*** gcc-3.4.3/libjava/javax/swing/table/DefaultTableColumnModel.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/table/DefaultTableColumnModel.java	Wed Feb 16 20:03:06 2005
***************
*** 1,5 ****
  /* DefaultTableColumnModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultTableColumnModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.Serializable;
*** 44,49 ****
--- 44,51 ----
  import java.util.Enumeration;
  import java.util.EventListener;
  import java.util.Vector;
+ 
+ import javax.swing.DefaultListSelectionModel;
  import javax.swing.ListSelectionModel;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.EventListenerList;
*************** import javax.swing.event.TableColumnMode
*** 58,366 ****
   * @version	1.0
   */
  public class DefaultTableColumnModel
!   implements TableColumnModel, PropertyChangeListener,
!              ListSelectionListener, Serializable
  {
!   static final long serialVersionUID = 6580012493508960512L;
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * tableColumns
! 	 */
! 	protected Vector tableColumns;
! 
! 	/**
! 	 * selectionModel
! 	 */
! 	protected ListSelectionModel selectionModel;
  
! 	/**
! 	 * columnMargin
! 	 */
! 	protected int columnMargin;
  
! 	/**
! 	 * listenerList
! 	 */
! 	protected EventListenerList listenerList;
  
! 	/**
! 	 * changeEvent
! 	 */
! 	protected transient ChangeEvent changeEvent;
  
! 	/**
! 	 * columnSelectionAllowed
! 	 */
! 	protected boolean columnSelectionAllowed;
  
! 	/**
! 	 * totalColumnWidth
! 	 */
! 	protected int totalColumnWidth;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor DefaultTableColumnModel
! 	 */
! 	public DefaultTableColumnModel() {
! 		// TODO
! 	} // DefaultTableColumnModel()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * addColumn
! 	 * @param value0 TODO
! 	 */
! 	public void addColumn(TableColumn value0) {
! 		// TODO
! 	} // addColumn()
  
! 	/**
! 	 * removeColumn
! 	 * @param value0 TODO
! 	 */
! 	public void removeColumn(TableColumn value0) {
! 		// TODO
! 	} // removeColumn()
  
! 	/**
! 	 * moveColumn
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void moveColumn(int value0, int value1) {
! 		// TODO
! 	} // moveColumn()
  
! 	/**
! 	 * setColumnMargin
! 	 * @param value0 TODO
! 	 */
! 	public void setColumnMargin(int value0) {
! 		// TODO
! 	} // setColumnMargin()
  
! 	/**
! 	 * getColumnCount
! 	 * @returns int
! 	 */
! 	public int getColumnCount() {
! 		return 0; // TODO
! 	} // getColumnCount()
  
! 	/**
! 	 * getColumns
! 	 * @returns Enumeration
! 	 */
! 	public Enumeration getColumns() {
! 		return null; // TODO
! 	} // getColumns()
  
! 	/**
! 	 * getColumnIndex
! 	 * @param value0 TODO
! 	 * @returns int
! 	 */
! 	public int getColumnIndex(Object value0) {
! 		return 0; // TODO
! 	} // getColumnIndex()
  
! 	/**
! 	 * getColumn
! 	 * @param value0 TODO
! 	 * @returns TableColumn
! 	 */
! 	public TableColumn getColumn(int value0) {
! 		return null; // TODO
! 	} // getColumn()
  
! 	/**
! 	 * getColumnMargin
! 	 * @returns int
! 	 */
! 	public int getColumnMargin() {
! 		return 0; // TODO
! 	} // getColumnMargin()
  
! 	/**
! 	 * getColumnIndexAtX
! 	 * @param value0 TODO
! 	 * @returns int
! 	 */
! 	public int getColumnIndexAtX(int value0) {
! 		return 0; // TODO
! 	} // getColumnIndexAtX()
  
! 	/**
! 	 * getTotalColumnWidth
! 	 * @returns int
! 	 */
! 	public int getTotalColumnWidth() {
! 		return 0; // TODO
! 	} // getTotalColumnWidth()
  
! 	/**
! 	 * setSelectionModel
! 	 * @param value0 TODO
! 	 */
! 	public void setSelectionModel(ListSelectionModel value0) {
! 		// TODO
! 	} // setSelectionModel()
  
! 	/**
! 	 * getSelectionModel
! 	 * @returns ListSelectionModel
! 	 */
! 	public ListSelectionModel getSelectionModel() {
! 		return null; // TODO
! 	} // getSelectionModel()
  
! 	/**
! 	 * setColumnSelectionAllowed
! 	 * @param value0 TODO
! 	 */
! 	public void setColumnSelectionAllowed(boolean value0) {
! 		// TODO
! 	} // setColumnSelectionAllowed()
  
! 	/**
! 	 * getColumnSelectionAllowed
! 	 * @returns boolean
! 	 */
! 	public boolean getColumnSelectionAllowed() {
! 		return false; // TODO
! 	} // getColumnSelectionAllowed()
  
! 	/**
! 	 * getSelectedColumns
! 	 * @returns int[]
! 	 */
! 	public int[] getSelectedColumns() {
! 		return null; // TODO
! 	} // getSelectedColumns()
  
! 	/**
! 	 * getSelectedColumnCount
! 	 * @returns int
! 	 */
! 	public int getSelectedColumnCount() {
! 		return 0; // TODO
! 	} // getSelectedColumnCount()
  
! 	/**
! 	 * addColumnModelListener
! 	 * @param value0 TODO
! 	 */
! 	public void addColumnModelListener(TableColumnModelListener value0) {
! 		// TODO
! 	} // addColumnModelListener()
  
! 	/**
! 	 * removeColumnModelListener
! 	 * @param value0 TODO
! 	 */
! 	public void removeColumnModelListener(TableColumnModelListener value0) {
! 		// TODO
! 	} // removeColumnModelListener()
  
! 	/**
! 	 * fireColumnAdded
! 	 * @param value0 TODO
! 	 */
! 	protected void fireColumnAdded(TableColumnModelEvent value0) {
! 		// TODO
! 	} // fireColumnAdded()
  
! 	/**
! 	 * fireColumnRemoved
! 	 * @param value0 TODO
! 	 */
! 	protected void fireColumnRemoved(TableColumnModelEvent value0) {
! 		// TODO
! 	} // fireColumnRemoved()
  
! 	/**
! 	 * fireColumnMoved
! 	 * @param value0 TODO
! 	 */
! 	protected void fireColumnMoved(TableColumnModelEvent value0) {
! 		// TODO
! 	} // fireColumnMoved()
  
! 	/**
! 	 * fireColumnSelectionChanged
! 	 * @param value0 TODO
! 	 */
! 	protected void fireColumnSelectionChanged(ListSelectionEvent value0) {
! 		// TODO
! 	} // fireColumnSelectionChanged()
  
! 	/**
! 	 * fireColumnMarginChanged
! 	 */
! 	protected void fireColumnMarginChanged() {
! 		// TODO
! 	} // fireColumnMarginChanged()
  
! 	/**
! 	 * getListeners
! 	 * @param value0 TODO
! 	 * @returns EventListener[]
! 	 */
! 	public EventListener[] getListeners(Class value0) {
! 		return null; // TODO
! 	} // getListeners()
  
! 	/**
! 	 * propertyChange
! 	 * @param value0 TODO
! 	 */
! 	public void propertyChange(PropertyChangeEvent value0) {
! 		// TODO
! 	} // propertyChange()
  
! 	/**
! 	 * valueChanged
! 	 * @param value0 TODO
! 	 */
! 	public void valueChanged(ListSelectionEvent value0) {
! 		// TODO
! 	} // valueChanged()
  
! 	/**
! 	 * createSelectionModel
! 	 * @returns ListSelectionModel
! 	 */
! 	protected ListSelectionModel createSelectionModel() {
! 		return null; // TODO
! 	} // createSelectionModel()
  
! 	/**
! 	 * recalcWidthCache
! 	 */
! 	protected void recalcWidthCache() {
! 		// TODO
! 	} // recalcWidthCache()
  
! 	/**
! 	 * invalidateWidthCache
! 	 */
! 	private void invalidateWidthCache() {
! 		// TODO
! 	} // invalidateWidthCache()
  
  
! } // DefaultTableColumnModel
  
--- 60,542 ----
   * @version	1.0
   */
  public class DefaultTableColumnModel
!   implements TableColumnModel, PropertyChangeListener, ListSelectionListener,
!              Serializable
  {
!   private static final long serialVersionUID = 6580012493508960512L;
  
!   /**
!    * Columns that this model keeps track of.
!    */
!   protected Vector tableColumns;
  
!   /**
!    * Selection Model that keeps track of columns selection
!    */
!   protected ListSelectionModel selectionModel;
  
!   /**
!    * Space between two columns. By default it is set to 1
!    */
!   protected int columnMargin;
  
!   /**
!    * listenerList keeps track of all listeners registered with this model
!    */
!   protected EventListenerList listenerList = new EventListenerList();
  
!   /**
!    * changeEvent is fired when change occurs in one of the columns properties
!    */
!   protected transient ChangeEvent changeEvent = new ChangeEvent(this);
  
+   /**
+    * Indicates whether columns can be selected 
+    */
+   protected boolean columnSelectionAllowed;
  
!   /**
!    * Total width of all the columns in this model
!    */
!   protected int totalColumnWidth;
  
!   /**
!    * Constructor DefaultTableColumnModel
!    */
!   public DefaultTableColumnModel()
!   {
!     tableColumns = new Vector();
!     setSelectionModel(createSelectionModel());
!     columnMargin = 1;
!     columnSelectionAllowed = false;
!   }
  
+   /**
+    * addColumn adds column to the model. This method fires ColumnAdded 
+    * event to model's registered TableColumnModelListeners.
+    *
+    * @param col column to add
+    */
+   public void addColumn(TableColumn col)
+   {
+     tableColumns.add(col);
+     invalidateWidthCache();
+     fireColumnAdded(new TableColumnModelEvent(this,0,tableColumns.size()));
+   }
  
!   /**
!    * removeColumn removes table column from the model. This method fires 
!    * ColumnRemoved event to model's registered TableColumnModelListeners.
!    *
!    * @param col column to be removed
!    */
!   public void removeColumn(TableColumn col)
!   {
!     int index = getColumnIndex(col);
!     fireColumnRemoved(new TableColumnModelEvent(this,index,0));    
!     tableColumns.remove(col);
!     invalidateWidthCache();
!   }
  
!   /**
!    * moveColumn moves column at index i to index j. This method fires
!    * ColumnMoved event to model's registered TableColumnModelListeners.
!    *
!    * @param i index of the column that will be moved
!    * @param j index of column's new location
!    */
!   public void moveColumn(int i, int j)
!   {
!     Object tmp = tableColumns.get(i);
!     tableColumns.set(i, tableColumns.get(j));
!     tableColumns.set(j, tmp);
!     fireColumnAdded(new TableColumnModelEvent(this,i,j));
!   }
  
!   /**
!    * setColumnMargin sets margin of the columns.
!    * @param m new column margin
!    */
!   public void setColumnMargin(int m)
!   {
!     columnMargin = m;
!     fireColumnMarginChanged();
!   }
  
!   /**
!    * getColumnCount returns number of columns in the model
!    * @return int number of columns in the model
!    */
!   public int getColumnCount()
!   {
!     return tableColumns.size();
!   }
  
!   /**
!    * getColumns
!    * @return Enumeration
!    */
!   public Enumeration getColumns()
!   {
!     return tableColumns.elements();
!   }
  
!   /**
!    * getColumnIndex returns index of the specified column
!    *
!    * @param identifier identifier of the column
!    * @return int index of the given column
!    */
!   public int getColumnIndex(Object identifier)
!   {
!     return tableColumns.indexOf(identifier, 0);
!   }
  
!   /**
!    * getColumn returns column at the specified index
!    * @param i index of the column 
!    * @return TableColumn column at the specified index
!    */
!   public TableColumn getColumn(int i)
!   {
!     return (TableColumn) tableColumns.get(i);
!   }
  
!   /**
!    * getColumnMargin returns column margin
!    * @return int column margin
!    */
!   public int getColumnMargin()
!   {
!     return columnMargin;
!   }
  
!   /**
!    * getColumnIndexAtX returns column that contains specified x-coordinate.
!    * @param x x-coordinate that column should contain
!    * @return int index of the column that contains specified x-coordinate relative
!    * to this column model
!    */
!   public int getColumnIndexAtX(int x)
!   {    
!     for (int i = 0; i < tableColumns.size(); ++i)
!       {
!         int w = ((TableColumn)tableColumns.get(i)).getWidth();
!         if (0 <= x && x < w)
!           return i;
!         else
!           x -= w;
!       }
!     return -1;
!   }
  
!   /**
!    * getTotalColumnWidth returns total width of all the columns including
!    * column's margins.
!    *
!    * @return total width of all the columns
!    */
!   public int getTotalColumnWidth()
!   {
!     if (totalColumnWidth == -1)
!       recalcWidthCache();
!     return totalColumnWidth;
!   }
  
!   /**
!    * setSelectionModel sets selection model that will be used by this ColumnTableModel
!    * to keep track of currently selected columns
!    *
!    * @param model new selection model
!    * @exception IllegalArgumentException if model is null
!    */
!   public void setSelectionModel(ListSelectionModel model)
!   {
!     if (model == null)
!       throw new IllegalArgumentException();
!     
!     selectionModel = model;
!     selectionModel.addListSelectionListener(this);
!   }
  
!   /**
!    * getSelectionModel returns selection model
!    * @return ListSelectionModel selection model
!    */
!   public ListSelectionModel getSelectionModel()
!   {
!     return selectionModel;
!   }
  
!   /**
!    * setColumnSelectionAllowed sets whether column selection is allowed
!    * or not.
!    *
!    * @param flag true if column selection is allowed and false otherwise
!    */
!   public void setColumnSelectionAllowed(boolean flag)
!   {
!     columnSelectionAllowed = flag;
!   }
  
!   /**
!    * getColumnSelectionAllowed indicates whether column selection is 
!    * allowed or not.
!    *
!    * @return boolean true if column selection is allowed and false otherwise.
!    */
!   public boolean getColumnSelectionAllowed()
!   {
!     return columnSelectionAllowed;
!   }
  
!   /**
!    * getSelectedColumns returns array containing indexes of currently 
!    * selected columns
!    *
!    * @return int[] array containing indexes of currently selected columns
!    */
!   public int[] getSelectedColumns()
!   {
!     // FIXME: Implementation of this method was taken from private method 
!     // JTable.getSelections(), which is used in various places in JTable
!     // including selected row calculations and cannot be simply removed.
!     // This design should be improved to illuminate duplication of code.
!     
!     ListSelectionModel lsm = this.selectionModel;    
!     int sz = getSelectedColumnCount();
!     int [] ret = new int[sz];
  
!     int lo = lsm.getMinSelectionIndex();
!     int hi = lsm.getMaxSelectionIndex();
!     int j = 0;
!     java.util.ArrayList ls = new java.util.ArrayList();
!     if (lo != -1 && hi != -1)
!       {
!         switch (lsm.getSelectionMode())
!           {
!           case ListSelectionModel.SINGLE_SELECTION:
!             ret[0] = lo;
!             break;      
!       
!           case ListSelectionModel.SINGLE_INTERVAL_SELECTION:            
!             for (int i = lo; i <= hi; ++i)
!               ret[j++] = i;
!             break;
!             
!           case ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:        
!             for (int i = lo; i <= hi; ++i)
!               if (lsm.isSelectedIndex(i))        
!                 ret[j++] = i;
!             break;
!           }
!       }
!     return ret;
!   }
  
!   /**
!    * getSelectedColumnCount returns number of currently selected columns
!    * @return int number of currently selected columns
!    */
!   public int getSelectedColumnCount()
!   {
!     // FIXME: Implementation of this method was taken from private method 
!     // JTable.countSelections(), which is used in various places in JTable
!     // including selected row calculations and cannot be simply removed.
!     // This design should be improved to illuminate duplication of code.
!    
!     ListSelectionModel lsm = this.selectionModel;
!     int lo = lsm.getMinSelectionIndex();
!     int hi = lsm.getMaxSelectionIndex();
!     int sum = 0;
!     
!     if (lo != -1 && hi != -1)
!       {
!         switch (lsm.getSelectionMode())
!           {
!           case ListSelectionModel.SINGLE_SELECTION:
!             sum = 1;
!             break;
!             
!           case ListSelectionModel.SINGLE_INTERVAL_SELECTION:
!             sum = hi - lo + 1;
!             break;
!             
!           case ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:        
!             for (int i = lo; i <= hi; ++i)
!               if (lsm.isSelectedIndex(i))        
!                 ++sum;
!             break;
!           }
!       }
!      
!      return sum;
!   }
  
!   /**
!    * addColumnModelListener adds specified listener to the model's
!    * listener list
!    *
!    * @param listener the listener to add
!    */
!   public void addColumnModelListener(TableColumnModelListener listener)
!   {
!     listenerList.add(TableColumnModelListener.class, listener);
!   }
  
!   /**
!    * removeColumnModelListener removes specified listener from the model's 
!    * listener list.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeColumnModelListener(TableColumnModelListener listener)
!   {
!     listenerList.remove(TableColumnModelListener.class, listener);
!   }
  
!   /**
!    * @since 1.4
!    */
!   public TableColumnModelListener[] getColumnModelListeners()
!   {
!     return (TableColumnModelListener[])
!       listenerList.getListeners(TableColumnModelListener.class);
!   }	  
  
!   /**
!    * fireColumnAdded fires TableColumnModelEvent to registered 
!    * TableColumnModelListeners to indicate that column was added
!    *
!    * @param e TableColumnModelEvent
!    */
!   protected void fireColumnAdded(TableColumnModelEvent e)
!   {    
!     TableColumnModelListener[] listeners = getColumnModelListeners();
  
!     for (int i=0; i< listeners.length; i++)
!       listeners[i].columnAdded(e);        
!   }
  
!   /**
!    * fireColumnAdded fires TableColumnModelEvent to registered 
!    * TableColumnModelListeners to indicate that column was removed
!    *
!    * @param e TableColumnModelEvent
!    */
!   protected void fireColumnRemoved(TableColumnModelEvent e)
!   {
!     TableColumnModelListener[] listeners = getColumnModelListeners();
  
!     for (int i=0; i< listeners.length; i++)
!       listeners[i].columnRemoved(e);        
!   }
  
!   /**
!    * fireColumnAdded fires TableColumnModelEvent to registered 
!    * TableColumnModelListeners to indicate that column was moved
!    *
!    * @param e TableColumnModelEvent
!    */
!   protected void fireColumnMoved(TableColumnModelEvent e)
!   {
!     TableColumnModelListener[] listeners = getColumnModelListeners();
  
!     for (int i=0; i< listeners.length; i++)
!       listeners[i].columnMoved(e);        
!   }
  
!   /**
!    * fireColumnSelectionChanged fires TableColumnModelEvent to model's
!    * registered TableColumnModelListeners to indicate that different column 
!    * was selected.
!    *
!    * @param evt ListSelectionEvent
!    */
!   protected void fireColumnSelectionChanged(ListSelectionEvent evt)
!   {
!     EventListener [] listeners = getListeners(TableColumnModelListener.class);
!     for (int i = 0; i < listeners.length; ++i)
!       ((TableColumnModelListener)listeners[i]).columnSelectionChanged(evt);
!   }
  
!   /**
!    * fireColumnMarginChanged fires TableColumnModelEvent to model's
!    * registered TableColumnModelListeners to indicate that column margin
!    * was changed.
!    */
!   protected void fireColumnMarginChanged()
!   {
!     EventListener [] listeners = getListeners(TableColumnModelListener.class);
!     for (int i = 0; i < listeners.length; ++i)
!       ((TableColumnModelListener)listeners[i]).columnMarginChanged(changeEvent);
!   }
  
!   /**
!    * getListeners returns currently registered listeners with this model.
!    * @param listenerType type of listeners to return
!    *
!    * @return EventListener[] array of model's listeners of the specified type
!    */
!   public EventListener[] getListeners(Class listenerType)
!   {
!     return listenerList.getListeners(listenerType);
!   }
  
!   /**
!    * propertyChange handles changes occuring in the properties of the
!    * model's columns. 
!    *
!    * @param evt PropertyChangeEvent
!    */
!   public void propertyChange(PropertyChangeEvent evt)
!   {
!     if (evt.getPropertyName().equals(TableColumn.COLUMN_WIDTH_PROPERTY))
! 	invalidateWidthCache(); 
!   }
  
!   /**
!    * valueChanged handles changes in the selectionModel.
!    * @param e ListSelectionEvent
!    */
!   public void valueChanged(ListSelectionEvent e)
!   {
!     fireColumnSelectionChanged(e);
!   }
  
+   /**
+    * createSelectionModel creates selection model that will keep track
+    * of currently selected column(s)
+    *
+    * @return ListSelectionModel selection model of the columns
+    */
+   protected ListSelectionModel createSelectionModel()
+   {    
+     return new DefaultListSelectionModel();
+   }
  
!   /**
!    * recalcWidthCache calculates total width of the columns.
!    * If the current cache of the total width is in invalidated state, 
!    * then width is recalculated. Otherwise nothing is done.
!    */
!   protected void recalcWidthCache()
!   {
!     if (totalColumnWidth == -1)
!       {
!         totalColumnWidth = 0;
!         for (int i = 0; i < tableColumns.size(); ++i)
!           {
!             totalColumnWidth += ((TableColumn)tableColumns.get(i)).getWidth();
!           }
!       }
!   }
  
+   /**
+    * invalidateWidthCache
+    */
+   private void invalidateWidthCache()
+   {
+     totalColumnWidth = -1;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/DefaultTableModel.java gcc-4.0.0/libjava/javax/swing/table/DefaultTableModel.java
*** gcc-3.4.3/libjava/javax/swing/table/DefaultTableModel.java	Sun Oct 12 13:33:31 2003
--- gcc-4.0.0/libjava/javax/swing/table/DefaultTableModel.java	Wed Feb 16 20:03:06 2005
***************
*** 1,5 ****
  /* DefaultTableModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultTableModel.java --
!    Copyright (C) 2002, 2004, 2005,  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.table;
*** 40,49 ****
  
  import java.io.Serializable;
  import java.util.Vector;
  import javax.swing.event.TableModelEvent;
  
  /**
!  * DefaultTableModel
   * @author	Andrew Selkirk
   */
  public class DefaultTableModel extends AbstractTableModel
--- 40,52 ----
  
  import java.io.Serializable;
  import java.util.Vector;
+ 
  import javax.swing.event.TableModelEvent;
  
  /**
!  * A two dimensional data structure used to store <code>Object</code> 
!  * instances, usually for display in a <code>JTable</code> component.
!  * 
   * @author	Andrew Selkirk
   */
  public class DefaultTableModel extends AbstractTableModel
*************** public class DefaultTableModel extends A
*** 51,494 ****
  {
    static final long serialVersionUID = 6680042567037222321L;
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * dataVector
! 	 */
! 	protected Vector dataVector;
! 
! 	/**
! 	 * columnIdentifiers
! 	 */
! 	protected Vector columnIdentifiers;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor DefaultTableModel
! 	 */
! 	public DefaultTableModel() {
! 		this(0, 0);
! 	} // DefaultTableModel()
! 
! 	/**
! 	 * Constructor DefaultTableModel
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public DefaultTableModel(int numRows, int numColumns) {
! 
! 		// Variables
! 		int		columnIndex;
! 		Vector		defaultNames;
! 
! 		// Create Column Names
! 		defaultNames = new Vector();
! 		for (columnIndex = 0; columnIndex < numColumns; columnIndex++) {
! 			defaultNames.addElement(super.getColumnName(columnIndex));
! 		} // for
! 
! 		// Setup Data
! //		setDataVector(defaultNames, numRows);
! 
! 	} // DefaultTableModel()
! 
! 	/**
! 	 * Constructor DefaultTableModel
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public DefaultTableModel(Vector columnNames, int numRows) {
! 
! 		// Variables
! 		Vector		data;
! 		Vector		rowData;
! 		int		rowIndex;
! 		int		numColumns;
! 
! 		// Create Data
! 		data = new Vector();
! 		if (columnNames == null) {
! 			numColumns = 0;
! 		} else {
! 			numColumns = columnNames.size();
! 		} // if
! 		for (rowIndex = 0; rowIndex < numRows; rowIndex++) {
! 			rowData = new Vector();
! 			rowData.setSize(numColumns);
! 			data.addElement(rowData);
! 		} // for
! 
! 		// Setup Data
! 		setDataVector(data, columnNames);
! 
! 	} // DefaultTableModel()
! 
! 	/**
! 	 * Constructor DefaultTableModel
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public DefaultTableModel(Object[] columnNames, int numRows) {
! 		this(convertToVector(columnNames), numRows);
! 	} // DefaultTableModel()
! 
! 	/**
! 	 * Constructor DefaultTableModel
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public DefaultTableModel(Vector data, Vector columnNames) {
! 		setDataVector(data, columnNames);
! 	} // DefaultTableModel()
! 
! 	/**
! 	 * Constructor DefaultTableModel
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public DefaultTableModel(Object[][] data, Object[] columnNames) {
! 		this(convertToVector(data), convertToVector(columnNames));
! 	} // DefaultTableModel()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * getDataVector
! 	 * @returns Vector
! 	 */
! 	public Vector getDataVector() {
! 		return dataVector;
! 	} // getDataVector()
! 
! 	/**
! 	 * setDataVector
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void setDataVector(Vector data, Vector columnNames) {
! 
! 		// Variables
! 		int	rowIndex;
! 		int	numRows;
! 		int	numColumns;
! 		Vector	columnVector;
! 
! 		// Set Data
! 		dataVector = data;
! 		columnIdentifiers = columnNames;
! 
! 		// Check Data
! 		numRows = data.size();
! 		numColumns = columnNames.size();
! 		for (rowIndex = 0; rowIndex < numRows; rowIndex++) {
! 			columnVector = (Vector) dataVector.get(rowIndex);
! 			columnVector.setSize(numColumns);
! 		} // for
! 
! 	} // setDataVector()
! 
! 	/**
! 	 * setDataVector
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void setDataVector(Object[][] data, Object[] columnNames) {
! 		setDataVector(convertToVector(data), convertToVector(columnNames));
! 	} // setDataVector()
! 
! 	/**
! 	 * newDataAvailable
! 	 * @param value0 TODO
! 	 */
! 	public void newDataAvailable(TableModelEvent event) {
! 		fireTableChanged(event);
! 	} // newDataAvailable()
! 
! 	/**
! 	 * newRowsAdded
! 	 * @param value0 TODO
! 	 */
! 	public void newRowsAdded(TableModelEvent event) {
! 		// TODO
! 	} // newRowsAdded()
! 
! 	/**
! 	 * rowsRemoved
! 	 * @param value0 TODO
! 	 */
! 	public void rowsRemoved(TableModelEvent event) {
! 		fireTableChanged(event);
! 	} // rowsRemoved()
! 
! 	/**
! 	 * setColumnIdentifiers
! 	 * @param value0 TODO
! 	 */
! 	public void setColumnIdentifiers(Vector columnIdentifiers) {
! 		this.columnIdentifiers = columnIdentifiers;
! 		setColumnCount(columnIdentifiers.size());
! 	} // setColumnIdentifiers()
! 
! 	/**
! 	 * setColumnIdentifiers
! 	 * @param value0 TODO
! 	 */
! 	public void setColumnIdentifiers(Object[] columnIdentifiers) {
! 		setColumnIdentifiers(convertToVector(columnIdentifiers));
! 	} // setColumnIdentifiers()
! 
! 	/**
! 	 * setNumRows
! 	 * @param value0 TODO
! 	 */
! 	public void setNumRows(int numRows) {
! 		setRowCount(numRows);
! 	} // setNumRows()
! 
! 	/**
! 	 * setRowCount
! 	 * @param value0 TODO
! 	 */
! 	public void setRowCount(int rowCount) {
! 		// TODO
! 	} // setRowCount()
! 
! 	/**
! 	 * setColumnCount
! 	 * @param value0 TODO
! 	 */
! 	public void setColumnCount(int columnCount) {
! 		// TODO
! 	} // setColumnCount()
! 
! 	/**
! 	 * addColumn
! 	 * @param value0 TODO
! 	 */
! 	public void addColumn(Object columnName) {
! 		addColumn(columnName, new Vector(dataVector.size()));
! 	} // addColumn()
! 
! 	/**
! 	 * addColumn
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void addColumn(Object columnName, Vector columnData) {
! 		// TODO
! 	} // addColumn()
! 
! 	/**
! 	 * addColumn
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void addColumn(Object columnName, Object[] columnData) {
! 		// TODO
! 	} // addColumn()
! 
! 	/**
! 	 * addRow
! 	 * @param value0 TODO
! 	 */
! 	public void addRow(Vector rowData) {
! 		// TODO
! 	} // addRow()
! 
! 	/**
! 	 * addRow
! 	 * @param value0 TODO
! 	 */
! 	public void addRow(Object[] rowData) {
! 		addRow(convertToVector(rowData));
! 	} // addRow()
! 
! 	/**
! 	 * insertRow
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void insertRow(int row, Vector rowData) {
! 		dataVector.add(row, rowData);
! 	} // insertRow()
! 
! 	/**
! 	 * insertRow
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void insertRow(int row, Object[] rowData) {
! 		insertRow(row, convertToVector(rowData));
! 	} // insertRow()
! 
! 	/**
! 	 * moveRow
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 */
! 	public void moveRow(int startIndex, int endIndex, int toIndex) {
! 
! 		// Variables
! 		int		index;
! 		Vector	vector;
! 
! 		// Move Rows
! 		for (index = 0; index < (endIndex - startIndex); index++) {
! 			vector = (Vector) dataVector.remove(startIndex);
! 			dataVector.add(toIndex, vector);
! 		} // for
! 
! 	} // moveRow()
! 
! 	/**
! 	 * removeRow
! 	 * @param value0 TODO
! 	 */
! 	public void removeRow(int row) {
! 		dataVector.remove(row);
! 	} // removeRow()
  
! 	/**
! 	 * getRowCount
! 	 * @returns int
! 	 */
! 	public int getRowCount() {
! 		return dataVector.size();
! 	} // getRowCount()
  
! 	/**
! 	 * getColumnCount
! 	 * @returns int
! 	 */
! 	public int getColumnCount() {
! 		return columnIdentifiers.size();
! 	} // getColumnCount()
  
! 	/**
! 	 * getColumnName
! 	 * @param value0 TODO
! 	 * @returns String
! 	 */
! 	public String getColumnName(int column) {
  
! 		// Check for Column
! 		if (columnIdentifiers == null || column >= getColumnCount()) {
! 			return super.getColumnName(column);
! 		} // if
  
! 		// Return Column name
! 		return (String) columnIdentifiers.get(column);
  
! 	} // getColumnName()
  
! 	/**
! 	 * isCellEditable
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isCellEditable(int row, int column) {
! 		return true;
! 	} // isCellEditable()
  
! 	/**
! 	 * getValueAt
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @returns Object
! 	 */
! 	public Object getValueAt(int row, int column) {
  
! 		// Variables
! 		Vector	rowVector;
  
! 		// Get Row Vector
! 		rowVector = (Vector) dataVector.get(row);
  
! 		// Get Data
! 		return rowVector.get(column);
  
! 	} // getValueAt()
  
! 	/**
! 	 * setValueAt
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 */
! 	public void setValueAt(Object value, int row, int column) {
  
! 		// Variables
! 		Vector	rowVector;
  
! 		// Get Row Vector
! 		rowVector = (Vector) dataVector.get(row);
  
! 		// Set Data
! 		rowVector.remove(column);
! 		rowVector.add(column, value);
  
! 	} // setValueAt()
  
! 	/**
! 	 * convertToVector
! 	 * @param value0 TODO
! 	 * @returns Vector
! 	 */
! 	protected static Vector convertToVector(Object[] data) {
  
! 		// Variables
! 		int	index;
! 		Vector	vector;
  
! 		// Check for null
! 		if (data == null) {
! 			return null;
! 		} // if
  
! 		// Process
! 		vector = new Vector();
! 		for (index = 0; index < data.length; index++) {
! 			vector.add(data[index]);
! 		} // for: index
  
! 		// Return new Vector
! 		return vector;
  
! 	} // convertToVector()
  
! 	/**
! 	 * convertToVector
! 	 * @param value0 TODO
! 	 * @returns Vector
! 	 */
! 	protected static Vector convertToVector(Object[][] data) {
  
! 		// Variables
! 		int	index;
! 		Vector	vector;
  
! 		// Process
! 		vector = new Vector();
! 		for (index = 0; index < data.length; index++) {
! 			vector.add(convertToVector(data[index]));
! 		} // for: index
  
! 		// Return new Vector
! 		return vector;
  
! 	} // convertToVector()
  
  
! } // DefaultTableModel
--- 54,582 ----
  {
    static final long serialVersionUID = 6680042567037222321L;
  
!   /**
!    * Storage for the rows in the table (each row is itself 
!    * a <code>Vector</code>).
!    */
!   protected Vector dataVector;
  
!   /**
!    * columnIdentifiers
!    */
!   protected Vector columnIdentifiers;
  
!   /**
!    * Creates an empty table with zero rows and zero columns.
!    */
!   public DefaultTableModel() 
!   {
!     this(0, 0);
!   }
!   
!   /**
!    * Creates a new table with the specified number of rows and columns.
!    * All cells in the table are initially empty (set to <code>null</code>).
!    * 
!    * @param numRows  the number of rows.
!    * @param numColumns  the number of columns.
!    */
!   public DefaultTableModel(int numRows, int numColumns) 
!   {
!     Vector defaultNames = new Vector(numColumns);
!     Vector data = new Vector(numRows);
!     for (int i = 0; i < numColumns; i++) 
!       {
!         defaultNames.add(super.getColumnName(i));
!       }          
!     for (int r = 0; r < numRows; r++) 
!       {
!         Vector tmp = new Vector(numColumns);
!         tmp.setSize(numColumns);
!         data.add(tmp);
!       }
!     setDataVector(data, defaultNames);
!   }
!   
!   /**
!    * Creates a new table with the specified column names and number of
!    * rows.  The number of columns is determined by the number of column
!    * names supplied.
!    *   
!    * @param columnNames the column names.
!    * @param numRows the number of rows.
!    */
!   public DefaultTableModel(Vector columnNames, int numRows) 
!   {
!     if (numRows < 0)
!       throw new IllegalArgumentException("numRows < 0");
!     Vector data = new Vector();
!     int numColumns = 0;
  
!     if (columnNames != null)
!       numColumns = columnNames.size();
!     
!     while (0 < numRows--) 
!       {
!         Vector rowData = new Vector();
!         rowData.setSize(numColumns);
!         data.add(rowData);
!       }
!     setDataVector(data, columnNames);
!   }
  
!   /**
!    * Creates a new table with the specified column names and row count.
!    * 
!    * @param columnNames the column names.
!    * @param numRows the number of rows.
!    */
!   public DefaultTableModel(Object[] columnNames, int numRows) 
!   {
!     this(convertToVector(columnNames), numRows);
!   }
!   
!   /**
!    * Creates a new table with the specified data values and column names.
!    * 
!    * @param data the data values.
!    * @param columnNames the column names.
!    */
!   public DefaultTableModel(Vector data, Vector columnNames) 
!   {
!     setDataVector(data, columnNames);
!   }
  
!   /**
!    * Creates a new table with the specified data values and column names.
!    * 
!    * @param data the data values.
!    * @param columnNames the column names.
!    */
!   public DefaultTableModel(Object[][] data, Object[] columnNames) 
!   {
!     this(convertToVector(data), convertToVector(columnNames));
!   }
  
!   /**
!    * Returns the vector containing the row data for the table.
!    * 
!    * @returns The data vector.
!    */
!   public Vector getDataVector() 
!   {
!     return dataVector;
!   }
  
!   /**
!    * Sets the data and column identifiers for the table.  The data vector
!    * contains a <code>Vector</code> for each row in the table - if the
!    * number of objects in each row does not match the number of column
!    * names specified, the row data is truncated or expanded (by adding
!    * <code>null</code> values) as required.
!    * 
!    * @param data the data for the table (a vector of row vectors).
!    * @param columnNames the column names.
!    * 
!    * @throws NullPointerException if either argument is <code>null</code>.
!    */
!   public void setDataVector(Vector data, Vector columnNames) 
!   {
!     dataVector = data;
!     columnIdentifiers = columnNames;
!     for (int r = 0; r < data.size(); r++) {
!       ((Vector) dataVector.get(r)).setSize(columnNames.size());
!     }          
!   }
  
!   /**
!    * Sets the data and column identifiers for the table.
!    * 
!    * @param data the data for the table.
!    * @param columnNames the column names.
!    * 
!    * @throws NullPointerException if either argument is <code>null</code>.
!    */
!   public void setDataVector(Object[][] data, Object[] columnNames) 
!   {
!     setDataVector(convertToVector(data), 
!                   convertToVector(columnNames));
!   }
!   
!   /**
!    * Sends the specified <code>event</code> to all registered listeners.
!    * This method is equivalent to 
!    * {@link AbstractTableModel#fireTableChanged(TableModelEvent)}.
!    * 
!    * @param event the event.
!    */
!   public void newDataAvailable(TableModelEvent event) 
!   {
!     fireTableChanged(event);
!   }
  
!   /**
!    * Sends the specified <code>event</code> to all registered listeners.
!    * This method is equivalent to 
!    * {@link AbstractTableModel#fireTableChanged(TableModelEvent)}.
!    * 
!    * @param event the event.
!    */
!   public void newRowsAdded(TableModelEvent event) 
!   {
!     fireTableChanged(event);
!   }
  
!   /**
!    * Sends the specified <code>event</code> to all registered listeners.
!    * This method is equivalent to 
!    * {@link AbstractTableModel#fireTableChanged(TableModelEvent)}.
!    * 
!    * @param event the event.
!    */
!   public void rowsRemoved(TableModelEvent event) 
!   {
!     fireTableChanged(event);
!   }
  
!   /**
!    * Sets the column identifiers, updates the data rows (truncating
!    * or padding each row with <code>null</code> values) to match the 
!    * number of columns, and sends a {@link TableModelEvent} to all
!    * registered listeners.
!    * 
!    * @param columnIdentifiers the column identifiers.
!    */
!   public void setColumnIdentifiers(Vector columnIdentifiers) 
!   {
!     this.columnIdentifiers = columnIdentifiers;
!     setColumnCount((columnIdentifiers == null ? 0 : columnIdentifiers.size()));
!   }
!   
!   /**
!    * Sets the column identifiers, updates the data rows (truncating
!    * or padding each row with <code>null</code> values) to match the 
!    * number of columns, and sends a {@link TableModelEvent} to all
!    * registered listeners.
!    * 
!    * @param columnIdentifiers the column identifiers.
!    */
!   public void setColumnIdentifiers(Object[] columnIdentifiers) 
!   {
!     setColumnIdentifiers(convertToVector(columnIdentifiers));
!   }
  
!   /**
!    * This method is obsolete, use {@link #setRowCount(int)} instead.
!    * 
!    * @param numRows the number of rows.
!    */
!   public void setNumRows(int numRows) 
!   {
!     setRowCount(numRows);
!   }
  
!   /**
!    * Sets the number of rows in the table.  If <code>rowCount</code> is less
!    * than the current number of rows in the table, rows are discarded.
!    * If <code>rowCount</code> is greater than the current number of rows in
!    * the table, new (empty) rows are added.
!    * 
!    * @param the row count.
!    */
!   public void setRowCount(int rowCount) 
!   {
!     int existingRowCount = dataVector.size();
!     if (rowCount < existingRowCount) 
!     {
!       dataVector.setSize(rowCount);
!       fireTableRowsDeleted(rowCount,existingRowCount-1);      
!     }
!     else 
!     {
!       int rowsToAdd = rowCount - existingRowCount;
!       for (int i = 0; i < rowsToAdd; i++) 
!         {
!           Vector tmp = new Vector();
!           tmp.setSize(columnIdentifiers.size());
!           dataVector.add(tmp);
!         } 
!       fireTableRowsInserted(existingRowCount,rowCount-1);
!     }
!   }
  
!   /**
!    * Sets the number of columns in the table.  Existing rows are truncated
!    * or padded with <code>null</code> values to match the new column count.
!    * A {@link TableModelEvent} is sent to all registered listeners.
!    * 
!    * @param columnCount the column count.
!    */
!   public void setColumnCount(int columnCount) 
!   {
!     for (int i = 0; i < dataVector.size(); ++i)
!       {
!         ((Vector) dataVector.get(i)).setSize(columnCount);
!       }
!     if (columnIdentifiers != null)  
!       columnIdentifiers.setSize(columnCount);
!     fireTableDataChanged();
!   }
  
!   /**
!    * Adds a column with the specified name to the table.  All cell values
!    * for the column are initially set to <code>null</code>.
!    * 
!    * @param columnName the column name (<code>null</code> permitted).
!    */
!   public void addColumn(Object columnName) 
!   {
!     addColumn(columnName, (Object[]) null);
!   }
  
!   /**
!    * Adds a column with the specified name and data values to the table.  
!    * 
!    * @param columnName the column name (<code>null</code> permitted).
!    * @param columnData the column data.
!    */
!   public void addColumn(Object columnName, Vector columnData) 
!   {
!     Object[] dataArray = null;
!     if (columnData != null) 
!     {
!       int rowCount = dataVector.size();
!       if (columnData.size() < rowCount)
!         columnData.setSize(rowCount);
!       dataArray = columnData.toArray();
!     }
!     addColumn(columnName, dataArray);
!   }
  
!   /**
!    * Adds a column with the specified name and data values to the table.
!    * 
!    * @param columnName the column name (<code>null</code> permitted).
!    * @param columnData the column data.
!    */
!   public void addColumn(Object columnName, Object[] columnData) {
!     if (columnData != null)
!     {
!       // check columnData array for cases where the number of items
!       // doesn't match the number of rows in the existing table
!       if (columnData.length > dataVector.size()) 
!       {
!         int rowsToAdd = columnData.length - dataVector.size();
!         for (int i = 0; i < rowsToAdd; i++) 
!         {
!           Vector tmp = new Vector();
!           tmp.setSize(columnIdentifiers.size());
!           dataVector.add(tmp);
!         }
!       }
!       else if (columnData.length < dataVector.size())
!       {
!         Object[] tmp = new Object[dataVector.size()];
!         System.arraycopy(columnData, 0, tmp, 0, columnData.length);
!         columnData = tmp;
!       }
!     }
!     for (int i = 0; i < dataVector.size(); ++i)
!       {
!         ((Vector) dataVector.get(i)).add(columnData == null ? null : columnData[i]);
!       }
!     columnIdentifiers.add(columnName);
!     fireTableDataChanged();
!   }
  
!   /**
!    * Adds a new row containing the specified data to the table and sends a
!    * {@link TableModelEvent} to all registered listeners.
!    * 
!    * @param rowData the row data (<code>null</code> permitted).
!    */
!   public void addRow(Vector rowData) {
!     dataVector.add(rowData);
!     newRowsAdded(new TableModelEvent(
!       this, dataVector.size(), dataVector.size(), -1, TableModelEvent.INSERT)
!     );
!   }
  
!   /**
!    * Adds a new row containing the specified data to the table and sends a
!    * {@link TableModelEvent} to all registered listeners.
!    * 
!    * @param rowData the row data (<code>null</code> permitted).
!    */
!   public void addRow(Object[] rowData) {
!     addRow(convertToVector(rowData));
!   }
  
!   /**
!    * Inserts a new row into the table.
!    * 
!    * @param row the row index.
!    * @param rowData the row data.
!    */
!   public void insertRow(int row, Vector rowData) {
!     dataVector.add(row, rowData);
!     fireTableRowsInserted(row,row);
!   }
  
!   /**
!    * Inserts a new row into the table.
!    * 
!    * @param row the row index.
!    * @param rowData the row data.
!    */
!   public void insertRow(int row, Object[] rowData) {
!     insertRow(row, convertToVector(rowData));
!   }
  
!   /**
!    * Moves the rows from <code>startIndex</code> to <code>endIndex</code>
!    * (inclusive) to the specified row.
!    * 
!    * @param startIndex the start row.
!    * @param endIndex the end row.
!    * @param toIndex the row to move to.
!    */
!   public void moveRow(int startIndex, int endIndex, int toIndex) {
!     Vector removed = new Vector();
!     for (int i = endIndex; i >= startIndex; i--)
!     {
!       removed.add(this.dataVector.remove(i));
!     }
!     for (int i = 0; i <= endIndex - startIndex; i++) 
!     {
!       dataVector.insertElementAt(removed.get(i), toIndex);  
!     }
!     fireTableDataChanged();
!   }
  
!   /**
!    * Removes a row from the table and sends a {@link TableModelEvent} to
!    * all registered listeners.
!    * 
!    * @param row the row index.
!    */
!   public void removeRow(int row) {
!     dataVector.remove(row);
!     fireTableRowsDeleted(row,row);
!   }
  
!   /**
!    * getRowCount
!    * @returns int
!    */
!   public int getRowCount() {
!     return dataVector.size();
!   }
  
!   /**
!    * Returns the number of columns in the model.
!    * 
!    * @return The column count.
!    */
!   public int getColumnCount() {
!     return (columnIdentifiers == null ? 0 : columnIdentifiers.size());
!   }
  
!   /**
!    * Returns the name of the specified column.
!    * 
!    * @param column the column index.
!    * 
!    * @returns The column name.
!    */
!   public String getColumnName(int column) {
!     String result = "";
!     if (columnIdentifiers == null) 
!       result = super.getColumnName(column);
!     else 
!     {
!       if (column < getColumnCount())
!       {  
!         Object id = columnIdentifiers.get(column);
!         if (id != null) 
!           result = id.toString();
!         else
!           result = super.getColumnName(column);
!       }
!     }
!     return result;
!   }
  
!   /**
!    * Returns <code>true</code> if the specified cell can be modified, and
!    * <code>false</code> otherwise.  For this implementation, the method
!    * always returns <code>true</code>.
!    * 
!    * @param row the row index.
!    * @param column the column index.
!    * 
!    * @returns <code>true</code> in all cases.
!    */
!   public boolean isCellEditable(int row, int column) {
!     return true;
!   }
  
!   /**
!    * Returns the value at the specified cell in the table.
!    * 
!    * @param row the row index.
!    * @param column the column index.
!    * 
!    * @returns The value (<code>Object</code>, possibly <code>null</code>) at 
!    *          the specified cell in the table.
!    */
!   public Object getValueAt(int row, int column) {
!     return ((Vector) dataVector.get(row)).get(column);
!   }
  
+   /**
+    * Sets the value for the specified cell in the table and sends a 
+    * {@link TableModelEvent} to all registered listeners.
+    * 
+    * @param value the value (<code>Object</code>, <code>null</code> permitted).
+    * @param row the row index.
+    * @param column the column index.
+    */
+   public void setValueAt(Object value, int row, int column) {
+     ((Vector) dataVector.get(row)).set(column, value);
+     fireTableCellUpdated(row,column);
+   }
  
!   /**
!    * Converts the data array to a <code>Vector</code>.
!    * 
!    * @param data the data array (<code>null</code> permitted).
!    * 
!    * @returns A vector (or <code>null</code> if the data array 
!    *          is <code>null</code>).
!    */
!   protected static Vector convertToVector(Object[] data) {
!     if (data == null)
!       return null;
!     Vector vector = new Vector(data.length);
!     for (int i = 0; i < data.length; i++) 
!       vector.add(data[i]);
!     return vector;          
!   }
!   
!   /**
!    * Converts the data array to a <code>Vector</code> of rows.
!    * 
!    * @param the data array (<code>null</code> permitted).
!    * 
!    * @returns A vector (or <code>null</code> if the data array 
!    *          is <code>null</code>.
!    */
!   protected static Vector convertToVector(Object[][] data) {
!     if (data == null)
!       return null;
!     Vector vector = new Vector(data.length);
!     for (int i = 0; i < data.length; i++)
!       vector.add(convertToVector(data[i]));
!     return vector;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/JTableHeader.java gcc-4.0.0/libjava/javax/swing/table/JTableHeader.java
*** gcc-3.4.3/libjava/javax/swing/table/JTableHeader.java	Wed Jun 11 16:36:11 2003
--- gcc-4.0.0/libjava/javax/swing/table/JTableHeader.java	Wed Feb 16 20:03:06 2005
***************
*** 1,5 ****
! /* JTableHeader.java
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JTableHeader.java --
!    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.FontMetrics;
*** 46,82 ****
  import java.awt.Point;
  import java.awt.Rectangle;
  import java.awt.event.FocusListener;
  import java.util.Locale;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleComponent;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.accessibility.AccessibleStateSet;
  import javax.swing.JComponent;
  import javax.swing.JTable;
! import javax.swing.event.ChangeEvent;
! import javax.swing.event.ListSelectionEvent;
! import javax.swing.event.TableColumnModelEvent;
! import javax.swing.event.TableColumnModelListener;
  import javax.swing.plaf.TableHeaderUI;
  
! public class JTableHeader
  {
!   protected class AccessibleJTableHeader
    {
!     protected class AccessibleJTableHeaderEntry
      {
!     }
    }
  
    private static final long serialVersionUID = 5144633983372967710L;
  
    protected TableColumnModel columnModel;
    protected TableColumn draggedColumn;
    protected int draggedDistance;
    protected boolean reorderingAllowed;
!   protected boolean resizingAllowed;
    protected TableColumn resizingColumn;
    protected JTable table;
    protected boolean updateTableInRealTime;
  }
--- 46,631 ----
  import java.awt.Point;
  import java.awt.Rectangle;
  import java.awt.event.FocusListener;
+ import java.beans.PropertyChangeListener;
  import java.util.Locale;
+ 
  import javax.accessibility.Accessible;
+ import javax.accessibility.AccessibleAction;
  import javax.accessibility.AccessibleComponent;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
+ import javax.accessibility.AccessibleSelection;
  import javax.accessibility.AccessibleStateSet;
+ import javax.accessibility.AccessibleText;
+ import javax.accessibility.AccessibleValue;
  import javax.swing.JComponent;
  import javax.swing.JTable;
! import javax.swing.UIManager;
  import javax.swing.plaf.TableHeaderUI;
  
! public class JTableHeader extends JComponent
  {
!   protected class AccessibleJTableHeader extends AccessibleJComponent
    {
!     protected class AccessibleJTableHeaderEntry extends AccessibleContext
!       implements Accessible, AccessibleComponent
      {
!       public AccessibleJTableHeaderEntry(int c, JTableHeader p, JTable t) 
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void addFocusListener(FocusListener l)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void addPropertyChangeListener(PropertyChangeListener l)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public boolean contains(Point p)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public AccessibleAction getAccessibleAction()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Accessible getAccessibleAt(Point p)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Accessible getAccessibleChild(int i)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public int getAccessibleChildrenCount()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public AccessibleComponent getAccessibleComponent()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public AccessibleContext getAccessibleContext()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public String getAccessibleDescription()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public int getAccessibleIndexInParent()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public String getAccessibleName()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public AccessibleRole getAccessibleRole()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public AccessibleSelection getAccessibleSelection()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public AccessibleStateSet getAccessibleStateSet()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public AccessibleText getAccessibleText()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public AccessibleValue getAccessibleValue()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Color getBackground()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Rectangle getBounds()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Cursor getCursor()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Font getFont()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public FontMetrics getFontMetrics(Font f)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Color getForeground()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Locale getLocale()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Point getLocation()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Point getLocationOnScreen()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public Dimension getSize()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public boolean isEnabled()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public boolean isFocusTraversable()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public boolean isShowing()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public boolean isVisible()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void removeFocusListener(FocusListener l)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void removePropertyChangeListener(PropertyChangeListener l)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void requestFocus()
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setAccessibleDescription(String s)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setAccessibleName(String s)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setBackground(Color c)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setBounds(Rectangle r)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setCursor(Cursor c)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setEnabled(boolean b)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setFont(Font f)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setForeground(Color c)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setLocation(Point p)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setSize(Dimension d)
!       {
!         throw new Error("not implemented");
!       }
!       
!       public void setVisible(boolean b)
!       {
!         throw new Error("not implemented");
!       }
!     };
    }
  
    private static final long serialVersionUID = 5144633983372967710L;
  
+   /**
+    * The accessibleContext property.
+    */
+   AccessibleContext accessibleContext;
+ 
+   /**
+    * The columnModel property.
+    */
    protected TableColumnModel columnModel;
+ 
+   /**
+    * The draggedColumn property.
+    */
    protected TableColumn draggedColumn;
+ 
+   /**
+    * The draggedDistance property.
+    */
    protected int draggedDistance;
+ 
+   /**
+    * The opaque property.
+    */
+   boolean opaque;
+ 
+   /**
+    * The reorderingAllowed property.
+    */
    protected boolean reorderingAllowed;
! 
!   /**
!    * The resizingAllowed property.
!    */
!   protected boolean resizingAllowed = true;
! 
!   /**
!    * The resizingColumn property.
!    */
    protected TableColumn resizingColumn;
+ 
+   /**
+    * The table property.
+    */
    protected JTable table;
+ 
+   /**
+    * The updateTableInRealTime property.
+    */
    protected boolean updateTableInRealTime;
+ 
+   TableCellRenderer cellRenderer; 
+ 
+   public JTableHeader()
+   {
+     this(null);
+   }
+ 
+   public JTableHeader(TableColumnModel cm)
+   {
+     accessibleContext = new AccessibleJTableHeader();
+     columnModel = cm == null ? createDefaultColumnModel() : cm; 
+     draggedColumn = null;
+     draggedDistance = 0;
+     opaque = true;
+     reorderingAllowed = true;
+     resizingAllowed = true;
+     resizingColumn = null;
+     table = null;
+     updateTableInRealTime = true;
+     cellRenderer = createDefaultRenderer();
+     updateUI();
+   }
+ 
+   protected TableColumnModel createDefaultColumnModel()
+   {
+     return new DefaultTableColumnModel();
+   }
+ 
+   /**
+    * Get the value of the {@link #accessibleContext} property.
+    *
+    * @return The current value of the property
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     return accessibleContext;
+   }
+ 
+   /**
+    * Get the value of the {@link #columnModel} property.
+    *
+    * @return The current value of the property
+    */
+   public TableColumnModel getColumnModel()
+   {
+     return columnModel;
+   }
+ 
+   /**
+    * Get the value of the {@link #draggedColumn} property.
+    *
+    * @return The current value of the property
+    */
+   public TableColumn getDraggedColumn()
+   {
+     return draggedColumn;
+   }
+ 
+   /**
+    * Get the value of the {@link #draggedDistance} property.
+    *
+    * @return The current value of the property
+    */
+   public int getDraggedDistance()
+   {
+     return draggedDistance;
+   }
+ 
+   /**
+    * Get the value of the {@link #reorderingAllowed} property.
+    *
+    * @return The current value of the property
+    */
+   public boolean getReorderingAllowed()
+   {
+     return reorderingAllowed;
+   }
+ 
+   /**
+    * Get the value of the {@link #resizingAllowed} property.
+    *
+    * @return The current value of the property
+    */
+   public boolean getResizingAllowed()
+   {
+     return resizingAllowed;
+   }
+ 
+   /**
+    * Get the value of the {@link #resizingColumn} property.
+    *
+    * @return The current value of the property
+    */
+   public TableColumn getResizingColumn()
+   {
+     return resizingColumn;
+   }
+ 
+   /**
+    * Get the value of the {@link #table} property.
+    *
+    * @return The current value of the property
+    */
+   public JTable getTable()
+   {
+     return table;
+   }
+ 
+   /**
+    * Get the value of the {@link #updateTableInRealTime} property.
+    *
+    * @return The current value of the property
+    */
+   public boolean getUpdateTableInRealTime()
+   {
+     return updateTableInRealTime;
+   }
+ 
+   /**
+    * Get the value of the {@link #opaque} property.
+    *
+    * @return The current value of the property
+    */
+   public boolean isOpaque()
+   {
+     return opaque;
+   }
+ 
+   /**
+    * Set the value of the {@link #columnModel} property.
+    *
+    * @param c The new value of the property
+    */ 
+   public void setColumnModel(TableColumnModel c)
+   {
+     columnModel = c;
+   }
+ 
+   /**
+    * Set the value of the {@link #draggedColumn} property.
+    *
+    * @param d The new value of the property
+    */ 
+   public void setDraggedColumn(TableColumn d)
+   {
+     draggedColumn = d;
+   }
+ 
+   /**
+    * Set the value of the {@link #draggedDistance} property.
+    *
+    * @param d The new value of the property
+    */ 
+   public void setDraggedDistance(int d)
+   {
+     draggedDistance = d;
+   }
+ 
+   /**
+    * Set the value of the {@link #opaque} property.
+    *
+    * @param o The new value of the property
+    */ 
+   public void setOpaque(boolean o)
+   {
+     opaque = o;
+   }
+ 
+   /**
+    * Set the value of the {@link #reorderingAllowed} property.
+    *
+    * @param r The new value of the property
+    */ 
+   public void setReorderingAllowed(boolean r)
+   {
+     reorderingAllowed = r;
+   }
+ 
+   /**
+    * Set the value of the {@link #resizingAllowed} property.
+    *
+    * @param r The new value of the property
+    */ 
+   public void setResizingAllowed(boolean r)
+   {
+     resizingAllowed = r;
+   }
+ 
+   /**
+    * Set the value of the {@link #resizingColumn} property.
+    *
+    * @param r The new value of the property
+    */ 
+   public void setResizingColumn(TableColumn r)
+   {
+     resizingColumn = r;
+   }
+ 
+   /**
+    * Set the value of the {@link #table} property.
+    *
+    * @param t The new value of the property
+    */ 
+   public void setTable(JTable t)
+   {
+     table = t;
+   }
+ 
+   /**
+    * Set the value of the {@link #updateTableInRealTime} property.
+    *
+    * @param u The new value of the property
+    */ 
+   public void setUpdateTableInRealTime(boolean u)
+   {
+     updateTableInRealTime = u;
+   }
+ 
+   protected TableCellRenderer createDefaultRenderer()
+   {
+     return new DefaultTableCellRenderer();
+   }
+ 
+   public TableCellRenderer getDefaultRenderer()
+   {
+     return cellRenderer;
+   }
+ 
+   public void setDefaultRenderer(TableCellRenderer cellRenderer)
+   {
+     this.cellRenderer = cellRenderer;
+   }
+ 
+   public Rectangle getHeaderRect(int column)
+   {
+     Rectangle r = getTable().getCellRect(-1, column, true);
+     r.height = getHeight();
+     return r;
+   }
+ 
+   protected String paramString()
+   {
+     return "JTableHeader";
+   }
+ 
+   // UI support
+ 
+   public String getUIClassID()
+   {
+     return "TableHeaderUI";
+   }
+ 
+   public TableHeaderUI getUI()
+   {
+     return (TableHeaderUI) ui;
+   }
+ 
+   public void setUI(TableHeaderUI u)
+   {
+     super.setUI(u);
+   }
+ 
+   public void updateUI()
+   {
+     setUI((TableHeaderUI) UIManager.getUI(this));
+   }
+ 
+   public int columnAtPoint(Point point)
+   {
+     if (getBounds().contains(point))
+       return columnModel.getColumnIndexAtX(point.x);
+     
+     return -1;
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/TableCellEditor.java gcc-4.0.0/libjava/javax/swing/table/TableCellEditor.java
*** gcc-3.4.3/libjava/javax/swing/table/TableCellEditor.java	Sun Oct 12 13:33:31 2003
--- gcc-4.0.0/libjava/javax/swing/table/TableCellEditor.java	Tue Nov 30 23:59:07 2004
***************
*** 1,5 ****
  /* TableCellEditor.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TableCellEditor.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,46 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.table;
  
- // Imports
  import java.awt.Component;
! import javax.swing.JTable;
  import javax.swing.CellEditor;
  
  /**
   * TableCellEditor public interface
--- 35,47 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.table;
  
  import java.awt.Component;
! 
  import javax.swing.CellEditor;
+ import javax.swing.JTable;
  
  /**
   * TableCellEditor public interface
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/TableCellRenderer.java gcc-4.0.0/libjava/javax/swing/table/TableCellRenderer.java
*** gcc-3.4.3/libjava/javax/swing/table/TableCellRenderer.java	Sun Oct 12 13:33:31 2003
--- gcc-4.0.0/libjava/javax/swing/table/TableCellRenderer.java	Tue Nov 30 23:59:07 2004
***************
*** 1,5 ****
  /* TableCellRenderer.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TableCellRenderer.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,44 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.table;
  
- // Imports
  import java.awt.Component;
  import javax.swing.JTable;
  
  /**
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.table;
  
  import java.awt.Component;
+ 
  import javax.swing.JTable;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/TableColumn.java gcc-4.0.0/libjava/javax/swing/table/TableColumn.java
*** gcc-3.4.3/libjava/javax/swing/table/TableColumn.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/table/TableColumn.java	Wed Feb 16 20:03:06 2005
***************
*** 1,5 ****
  /* TableColumn.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TableColumn.java --
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.table;
*** 40,45 ****
--- 40,46 ----
  
  import java.beans.PropertyChangeListener;
  import java.io.Serializable;
+ 
  import javax.swing.event.SwingPropertyChangeSupport;
  
  /**
*************** import javax.swing.event.SwingPropertyCh
*** 47,517 ****
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public class TableColumn implements Serializable
  {
    static final long serialVersionUID = -6113660025878112608L;
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * COLUMN_WIDTH_PROPERTY
! 	 */
! 	public static final String COLUMN_WIDTH_PROPERTY = "columWidth";
! 
! 	/**
! 	 * HEADER_VALUE_PROPERTY
! 	 */
! 	public static final String HEADER_VALUE_PROPERTY = "headerValue";
! 
! 	/**
! 	 * HEADER_RENDERER_PROPERTY
! 	 */
! 	public static final String HEADER_RENDERER_PROPERTY = "headerRenderer";
! 
! 	/**
! 	 * CELL_RENDERER_PROPERTY
! 	 */
! 	public static final String CELL_RENDERER_PROPERTY = "cellRenderer";
! 
! 	/**
! 	 * modelIndex
! 	 */
! 	protected int modelIndex;
! 
! 	/**
! 	 * identifier
! 	 */
! 	protected Object identifier;
! 
! 	/**
! 	 * width
! 	 */
! 	protected int width;
! 
! 	/**
! 	 * minWidth
! 	 */
! 	protected int minWidth	= 15;
! 
! 	/**
! 	 * preferredWidth
! 	 */
! 	private int preferredWidth;
! 
! 	/**
! 	 * maxWidth
! 	 */
! 	protected int maxWidth	= Integer.MAX_VALUE;
! 
! 	/**
! 	 * headerRenderer
! 	 */
! 	protected TableCellRenderer headerRenderer;
! 
! 	/**
! 	 * headerValue
! 	 */
! 	protected Object headerValue;
! 
! 	/**
! 	 * cellRenderer
! 	 */
! 	protected TableCellRenderer cellRenderer;
! 
! 	/**
! 	 * cellEditor
! 	 */
! 	protected TableCellEditor cellEditor;
! 
! 	/**
! 	 * isResizable
! 	 */
! 	protected boolean isResizable	= true;
! 
! 	/**
! 	 * resizedPostingDisableCount
! 	 */
! 	protected transient int resizedPostingDisableCount;
! 
! 	/**
! 	 * changeSupport
! 	 */
! 	private SwingPropertyChangeSupport changeSupport = new SwingPropertyChangeSupport(this);
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor TableColumn
! 	 */
! 	public TableColumn() {
! 		this(0, 75, null, null);
! 	} // TableColumn()
! 
! 	/**
! 	 * Constructor TableColumn
! 	 * @param modelIndex TODO
! 	 */
! 	public TableColumn(int modelIndex) {
! 		this(modelIndex, 75, null, null);
! 	} // TableColumn()
! 
! 	/**
! 	 * Constructor TableColumn
! 	 * @param modelIndex TODO
! 	 * @param width TODO
! 	 */
! 	public TableColumn(int modelIndex, int width) {
! 		this(modelIndex, width, null, null);
! 	} // TableColumn()
! 
! 	/**
! 	 * Constructor TableColumn
! 	 * @param modelIndex TODO
! 	 * @param width TODO
! 	 * @param cellRenderer TODO
! 	 * @param cellEditor TODO
! 	 */
! 	public TableColumn(int modelIndex, int width,
! 			TableCellRenderer cellRenderer, TableCellEditor cellEditor) {
! 		this.modelIndex = modelIndex;
! 		this.width = width;
! 		this.preferredWidth = width;
! 		this.cellRenderer = cellRenderer;
! 		this.cellEditor = cellEditor;
! 		this.headerValue = null;
! 		this.identifier = null;
! 	} // TableColumn()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * firePropertyChange
! 	 * @param property TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	private void firePropertyChange(String property, Object oldValue, Object newValue) {
! 		changeSupport.firePropertyChange(property, oldValue, newValue);
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param property TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	private void firePropertyChange(String property, int oldValue, int newValue) {
! 		firePropertyChange(property, new Integer(oldValue), new Integer(newValue));
! 	} // firePropertyChange()
  
! 	/**
! 	 * firePropertyChange
! 	 * @param property TODO
! 	 * @param oldValue TODO
! 	 * @param newValue TODO
! 	 */
! 	private void firePropertyChange(String property, boolean oldValue, boolean newValue) {
! 		firePropertyChange(property, new Boolean(oldValue), new Boolean(newValue));
! 	} // firePropertyChange()
  
! 	/**
! 	 * setModelIndex
! 	 * @param modelIndex TODO
! 	 */
! 	public void setModelIndex(int modelIndex) {
! 		this.modelIndex = modelIndex;
! 	} // setModelIndex()
  
! 	/**
! 	 * getModelIndex
! 	 * @returns int
! 	 */
! 	public int getModelIndex() {
! 		return modelIndex;
! 	} // getModelIndex()
  
! 	/**
! 	 * setIdentifier
! 	 * @param identifier TODO
! 	 */
! 	public void setIdentifier(Object identifier) {
! 		this.identifier = identifier;
! 	} // setIdentifier()
  
! 	/**
! 	 * getIdentifier
! 	 * @returns Object
! 	 */
! 	public Object getIdentifier() {
! 		if (identifier == null) {
! 			return getHeaderValue();
! 		} // if
! 		return identifier;
! 	} // getIdentifier()
  
! 	/**
! 	 * setHeaderValue
! 	 * @param headerValue TODO
! 	 */
! 	public void setHeaderValue(Object headerValue) {
  
! 		// Variables
! 		Object	oldValue;
  
! 		// Get Old Value
! 		oldValue = this.headerValue;
  
! 		// Set Propeprty
! 		this.headerValue = headerValue;
  
! 		// Notify Listeners of change
! 		firePropertyChange(HEADER_VALUE_PROPERTY, 
! 				oldValue, headerValue);
  
! 	} // setHeaderValue()
  
! 	/**
! 	 * getHeaderValue
! 	 * @returns Object
! 	 */
! 	public Object getHeaderValue() {
! 		return headerValue;
! 	} // getHeaderValue()
  
! 	/**
! 	 * setHeaderRenderer
! 	 * @param headerRenderer TODO
! 	 */
! 	public void setHeaderRenderer(TableCellRenderer headerRenderer) {
  
! 		// Variables
! 		TableCellRenderer	oldRenderer;
  
! 		// Get Old Renderer
! 		oldRenderer = this.headerRenderer;
  
! 		// Set Property
! 		this.headerRenderer = headerRenderer;
  
! 		// Notify Listeners of change
! 		firePropertyChange(HEADER_RENDERER_PROPERTY, 
! 				oldRenderer, headerRenderer);
  
! 	} // setHeaderRenderer()
  
! 	/**
! 	 * getHeaderRenderer
! 	 * @returns TableCellRenderer
! 	 */
! 	public TableCellRenderer getHeaderRenderer() {
! 		return headerRenderer;
! 	} // getHeaderRenderer()
  
! 	/**
! 	 * setCellRenderer
! 	 * @param cellRenderer TODO
! 	 */
! 	public void setCellRenderer(TableCellRenderer cellRenderer) {
  
! 		// Variables
! 		TableCellRenderer	oldRenderer;
  
! 		// Get Old Renderer
! 		oldRenderer = this.cellRenderer;
  
! 		// Set Property
! 		this.cellRenderer = cellRenderer;
  
! 		// Notify Listeners of change
! 		firePropertyChange(CELL_RENDERER_PROPERTY, 
! 				oldRenderer, cellRenderer);
  
! 	} // setCellRenderer()
  
! 	/**
! 	 * getCellRenderer
! 	 * @returns TableCellRenderer
! 	 */
! 	public TableCellRenderer getCellRenderer() {
! 		return cellRenderer;
! 	} // getCellRenderer()
  
! 	/**
! 	 * setCellEditor
! 	 * @param cellEditor TODO
! 	 */
! 	public void setCellEditor(TableCellEditor cellEditor) {
! 		this.cellEditor = cellEditor;
! 	} // setCellEditor()
  
! 	/**
! 	 * getCellEditor
! 	 * @returns TableCellEditor
! 	 */
! 	public TableCellEditor getCellEditor() {
! 		return cellEditor;
! 	} // getCellEditor()
  
! 	/**
! 	 * setWidth
! 	 * @param width TODO
! 	 */
! 	public void setWidth(int width) {
  
! 		// Variables
! 		int	oldWidth;
  
! 		// Get Old Width
! 		oldWidth = this.width;
  
! 		// Adjust Width within Limits
! 		if (width < minWidth) {
! 			this.width = minWidth;
! 		} else if (width > maxWidth) {
! 			this.width = maxWidth;
! 		} else {
! 			this.width = width;
! 		} // if
  
! 		// Fire Property Change
! 		firePropertyChange(COLUMN_WIDTH_PROPERTY, oldWidth, this.width);
  
! 	} // setWidth()
  
! 	/**
! 	 * getWidth
! 	 * @returns int
! 	 */
! 	public int getWidth() {
! 		return width;
! 	} // getWidth()
  
! 	/**
! 	 * setPreferredWidth
! 	 * @param preferredWidth TODO
! 	 */
! 	public void setPreferredWidth(int preferredWidth) {
! 		if (preferredWidth < minWidth) {
! 			this.preferredWidth = minWidth;
! 		} else if (preferredWidth > maxWidth) {
! 			this.preferredWidth = maxWidth;
! 		} else {
! 			this.preferredWidth = preferredWidth;
! 		} // if
! 	} // setPreferredWidth()
  
! 	/**
! 	 * getPreferredWidth
! 	 * @returns int
! 	 */
! 	public int getPreferredWidth() {
! 		return preferredWidth;
! 	} // getPreferredWidth()
  
! 	/**
! 	 * setMinWidth
! 	 * @param minWidth TODO
! 	 */
! 	public void setMinWidth(int minWidth) {
! 		this.minWidth = minWidth;
! 		setWidth(getWidth());
! 		setPreferredWidth(getPreferredWidth());
! 	} // setMinWidth()
  
! 	/**
! 	 * getMinWidth
! 	 * @returns int
! 	 */
! 	public int getMinWidth() {
! 		return minWidth;
! 	} // getMinWidth()
  
! 	/**
! 	 * setMaxWidth
! 	 * @param maxWidth TODO
! 	 */
! 	public void setMaxWidth(int maxWidth) {
! 		this.maxWidth = maxWidth;
! 		setWidth(getWidth());
! 		setPreferredWidth(getPreferredWidth());
! 	} // setMaxWidth()
  
! 	/**
! 	 * getMaxWidth
! 	 * @returns int
! 	 */
! 	public int getMaxWidth() {
! 		return maxWidth;
! 	} // getMaxWidth()
  
! 	/**
! 	 * setResizable
! 	 * @param isResizable TODO
! 	 */
! 	public void setResizable(boolean isResizable) {
! 		this.isResizable = isResizable;
! 	} // setResizable()
  
! 	/**
! 	 * getResizable
! 	 * @returns boolean
! 	 */
! 	public boolean getResizable() {
! 		return isResizable;
! 	} // getResizable()
  
! 	/**
! 	 * sizeWidthToFit
! 	 */
! 	public void sizeWidthToFit() {
! 		// TODO
! 	} // sizeWidthToFit()
  
! 	/**
! 	 * disableResizedPosting
! 	 */
! 	public void disableResizedPosting() {
! 		// Does nothing
! 	} // disableResizedPosting()
  
! 	/**
! 	 * enableResizedPosting
! 	 */
! 	public void enableResizedPosting() {
! 		// Does nothing
! 	} // enableResizedPosting()
  
! 	/**
! 	 * addPropertyChangeListener
! 	 * @param listener TODO
! 	 */
! 	public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
! 		changeSupport.addPropertyChangeListener(listener);
! 	} // addPropertyChangeListener()
  
! 	/**
! 	 * removePropertyChangeListener
! 	 * @param listener TODO
! 	 */
! 	public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
! 		changeSupport.removePropertyChangeListener(listener);
! 	} // removePropertyChangeListener()
  
! 	/**
! 	 * createDefaultHeaderRenderer
! 	 * @returns TableCellRenderer
! 	 */
! 	protected TableCellRenderer createDefaultHeaderRenderer() {
! 		return new DefaultTableCellRenderer();
! 	} // createDefaultHeaderRenderer()
  
  
! } // TableColumn
--- 48,554 ----
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public class TableColumn
!   implements Serializable
  {
    static final long serialVersionUID = -6113660025878112608L;
  
!   /**
!    * COLUMN_WIDTH_PROPERTY
!    */
!   public static final String COLUMN_WIDTH_PROPERTY = "columWidth";
  
+   /**
+    * HEADER_VALUE_PROPERTY
+    */
+   public static final String HEADER_VALUE_PROPERTY = "headerValue";
  
!   /**
!    * HEADER_RENDERER_PROPERTY
!    */
!   public static final String HEADER_RENDERER_PROPERTY = "headerRenderer";
  
!   /**
!    * CELL_RENDERER_PROPERTY
!    */
!   public static final String CELL_RENDERER_PROPERTY = "cellRenderer";
  
!   /**
!    * modelIndex
!    */
!   protected int modelIndex;
  
!   /**
!    * identifier
!    */
!   protected Object identifier;
  
!   /**
!    * width
!    */
!   protected int width;
  
!   /**
!    * minWidth
!    */
!   protected int minWidth = 15;
  
!   /**
!    * preferredWidth
!    */
!   private int preferredWidth;
  
!   /**
!    * maxWidth
!    */
!   protected int maxWidth = Integer.MAX_VALUE;
  
!   /**
!    * headerRenderer
!    */
!   protected TableCellRenderer headerRenderer;
  
!   /**
!    * headerValue
!    */
!   protected Object headerValue;
  
!   /**
!    * cellRenderer
!    */
!   protected TableCellRenderer cellRenderer;
  
!   /**
!    * cellEditor
!    */
!   protected TableCellEditor cellEditor;
  
!   /**
!    * isResizable
!    */
!   protected boolean isResizable = true;
  
!   /**
!    * resizedPostingDisableCount
!    *
!    * @deprecated 1.3
!    */
!   protected transient int resizedPostingDisableCount;
  
!   /**
!    * changeSupport
!    */
!   private SwingPropertyChangeSupport changeSupport =
!     new SwingPropertyChangeSupport(this);
  
!   /**
!    * Constructor TableColumn
!    */
!   public TableColumn()
!   {
!     this(0, 75, null, null);
!   }
  
!   /**
!    * Constructor TableColumn
!    * 
!    * @param modelIndex the index of the column in the model
!    */
!   public TableColumn(int modelIndex)
!   {
!     this(modelIndex, 75, null, null);
!   }
  
!   /**
!    * Constructor TableColumn
!    * 
!    * @param modelIndex the index of the column in the model
!    * @param width the width
!    */
!   public TableColumn(int modelIndex, int width)
!   {
!     this(modelIndex, width, null, null);
!   }
  
!   /**
!    * Constructor TableColumn
!    * 
!    * @param modelIndex the index of the column in the model
!    * @param width the width
!    * @param cellRenderer the cell renderer
!    * @param cellEditor the cell editor
!    */
!   public TableColumn(int modelIndex, int width,
!                      TableCellRenderer cellRenderer, TableCellEditor cellEditor)
!   {
!     this.modelIndex = modelIndex;
!     this.width = width;
!     this.preferredWidth = width;
!     this.cellRenderer = cellRenderer;
!     this.cellEditor = cellEditor;
!     this.headerValue = null;
!     this.identifier = null;
!   }
  
!   /**
!    * firePropertyChange
!    * 
!    * @param property the name of the property
!    * @param oldValue the old value
!    * @param newValue the new value
!    */
!   private void firePropertyChange(String property, Object oldValue,
!                                   Object newValue)
!   {
!     changeSupport.firePropertyChange(property, oldValue, newValue);
!   }
  
!   /**
!    * firePropertyChange
!    * 
!    * @param property the name of the property
!    * @param oldValue the old value
!    * @param newValue the new value
!    */
!   private void firePropertyChange(String property, int oldValue, int newValue)
!   {
!     firePropertyChange(property, new Integer(oldValue), new Integer(newValue));
!   }
  
!   /**
!    * firePropertyChange
!    * 
!    * @param property the name of the property 
!    * @param oldValue the old value
!    * @param newValue the new value
!    */
!   private void firePropertyChange(String property, boolean oldValue,
!                                   boolean newValue)
!   {
!     firePropertyChange(property, Boolean.valueOf(oldValue),
! 		       Boolean.valueOf(newValue));
!   }
  
!   /**
!    * setModelIndex
!    * 
!    * @param modelIndex the index to set
!    */
!   public void setModelIndex(int modelIndex)
!   {
!     this.modelIndex = modelIndex;
!   }
  
!   /**
!    * getModelIndex
!    * 
!    * @return the model index
!    */
!   public int getModelIndex()
!   {
!     return modelIndex;
!   }
  
!   /**
!    * setIdentifier
!    * 
!    * @param identifier the identifier
!    */
!   public void setIdentifier(Object identifier)
!   {
!     this.identifier = identifier;
!   }
  
!   /**
!    * getIdentifier
!    * 
!    * @return the identifier
!    */
!   public Object getIdentifier()
!   {
!     if (identifier == null)
!       return getHeaderValue();
!     return identifier;
!   }
  
!   /**
!    * setHeaderValue
!    * 
!    * @param headerValue the value of the header
!    */
!   public void setHeaderValue(Object headerValue)
!   {
!     if (this.headerValue == headerValue)
!       return;
!     
!     Object oldValue = this.headerValue;
!     this.headerValue = headerValue;
!     firePropertyChange(HEADER_VALUE_PROPERTY, oldValue, headerValue);
!   }
  
!   /**
!    * getHeaderValue
!    * 
!    * @return the value of the header
!    */
!   public Object getHeaderValue()
!   {
!     return headerValue;
!   }
  
!   /**
!    * setHeaderRenderer
!    * 
!    * @param headerRenderer the renderer to se
!    */
!   public void setHeaderRenderer(TableCellRenderer renderer)
!   {
!     if (headerRenderer == renderer)
!       return;
!     
!     TableCellRenderer oldRenderer = headerRenderer;
!     headerRenderer = renderer;
!     firePropertyChange(HEADER_RENDERER_PROPERTY, 
! 		       oldRenderer, headerRenderer);
!   }
  
!   /**
!    * getHeaderRenderer
!    * @return TableCellRenderer
!    */
!   public TableCellRenderer getHeaderRenderer()
!   {
!     return headerRenderer;
!   }
  
!   /**
!    * setCellRenderer
!    * 
!    * @param cellRenderer the cell renderer
!    */
!   public void setCellRenderer(TableCellRenderer renderer)
!   {
!     if (cellRenderer == renderer)
!       return;
!     
!     TableCellRenderer oldRenderer = cellRenderer;
!     cellRenderer = renderer;
!     firePropertyChange(CELL_RENDERER_PROPERTY, 
! 		       oldRenderer, cellRenderer);
!   }
  
!   /**
!    * getCellRenderer
!    * 
!    * @return the cell renderer
!    */
!   public TableCellRenderer getCellRenderer()
!   {
!     return cellRenderer;
!   }
  
!   /**
!    * setCellEditor
!    * 
!    * @param cellEditor the cell editor
!    */
!   public void setCellEditor(TableCellEditor cellEditor)
!   {
!     this.cellEditor = cellEditor;
!   }
  
!   /**
!    * getCellEditor
!    * 
!    * @return the cell editor
!    */
!   public TableCellEditor getCellEditor()
!   {
!     return cellEditor;
!   }
  
!   /**
!    * setWidth
!    * 
!    * @param newWidth the width
!    */
!   public void setWidth(int newWidth)
!   {
!     int	oldWidth = width;
  
!     if (newWidth < minWidth)
!       width = minWidth;
!     else if (newWidth > maxWidth)
!       width = maxWidth;
!     else
!       width = newWidth;
  
!     if (width == oldWidth)
!       return;
  
!     firePropertyChange(COLUMN_WIDTH_PROPERTY, oldWidth, width);
!   }
  
!   /**
!    * getWidth
!    * 
!    * @return int
!    */
!   public int getWidth()
!   {
!     return width;
!   }
  
!   /**
!    * setPreferredWidth
!    * 
!    * @param preferredWidth the preferred width
!    */
!   public void setPreferredWidth(int preferredWidth)
!   {
!     if (preferredWidth < minWidth)
!       this.preferredWidth = minWidth;
!     else if (preferredWidth > maxWidth)
!       this.preferredWidth = maxWidth;
!     else
!       this.preferredWidth = preferredWidth;
!   }
  
!   /**
!    * getPreferredWidth
!    * 
!    * @return the preferred width
!    */
!   public int getPreferredWidth()
!   {
!     return preferredWidth;
!   }
  
!   /**
!    * setMinWidth
!    * 
!    * @param minWidth the minium width
!    */
!   public void setMinWidth(int minWidth)
!   {
!     this.minWidth = minWidth;
!     setWidth(getWidth());
!     setPreferredWidth(getPreferredWidth());
!   }
  
!   /**
!    * getMinWidth
!    * 
!    * @return the minimum width
!    */
!   public int getMinWidth()
!   {
!     return minWidth;
!   }
  
!   /**
!    * setMaxWidth
!    * 
!    * @param maxWidth the maximum width
!    */
!   public void setMaxWidth(int maxWidth)
!   {
!     this.maxWidth = maxWidth;
!     setWidth(getWidth());
!     setPreferredWidth(getPreferredWidth());
!   }
  
!   /**
!    * getMaxWidth
!    * @return the maximim width
!    */
!   public int getMaxWidth()
!   {
!     return maxWidth;
!   }
  
!   /**
!    * setResizable
!    * 
!    * @param isResizable <code>true</code> if this column is resizable,
!    * <code>false</code> otherwise
!    */
!   public void setResizable(boolean isResizable)
!   {
!     this.isResizable = isResizable;
!   }
  
!   /**
!    * getResizable
!    * 
!    * @return <code>true</code> if this column is resizable,
!    * <code>false</code> otherwise
!    */
!   public boolean getResizable()
!   {
!     return isResizable;
!   }
  
!   /**
!    * sizeWidthToFit
!    */
!   public void sizeWidthToFit()
!   {
!     // TODO
!   }
  
!   /**
!    * disableResizedPosting
!    *
!    * @deprecated 1.3
!    */
!   public void disableResizedPosting()
!   {
!     // Does nothing
!   }
  
!   /**
!    * enableResizedPosting
!    *
!    * @deprecated 1.3
!    */
!   public void enableResizedPosting()
!   {
!     // Does nothing
!   }
  
!   /**
!    * addPropertyChangeListener
!    * @param listener the listener to all
!    */
!   public synchronized void addPropertyChangeListener(PropertyChangeListener listener)
!   {
!     changeSupport.addPropertyChangeListener(listener);
!   }
  
!   /**
!    * removePropertyChangeListener
!    * @param listener the listener to remove
!    */
!   public synchronized void removePropertyChangeListener(PropertyChangeListener listener)
!   {
!     changeSupport.removePropertyChangeListener(listener);
!   }
  
+   /**
+    * @since 1.4
+    */
+   public PropertyChangeListener[] getPropertyChangeListeners()
+   {
+     return changeSupport.getPropertyChangeListeners();
+   }
  
!   /**
!    * createDefaultHeaderRenderer
!    * @return TableCellRenderer
!    */
!   protected TableCellRenderer createDefaultHeaderRenderer()
!   {
!     return new DefaultTableCellRenderer();
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/TableColumnModel.java gcc-4.0.0/libjava/javax/swing/table/TableColumnModel.java
*** gcc-3.4.3/libjava/javax/swing/table/TableColumnModel.java	Sun Oct 12 13:33:31 2003
--- gcc-4.0.0/libjava/javax/swing/table/TableColumnModel.java	Wed Feb 16 20:03:07 2005
***************
*** 1,5 ****
  /* TableColumnModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TableColumnModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,44 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.table;
  
- // Imports
  import java.util.Enumeration;
  import javax.swing.ListSelectionModel;
  import javax.swing.event.TableColumnModelListener;
  
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.table;
  
  import java.util.Enumeration;
+ 
  import javax.swing.ListSelectionModel;
  import javax.swing.event.TableColumnModelListener;
  
*************** import javax.swing.event.TableColumnMode
*** 46,167 ****
   * TableColumnModel public interface
   * @author Andrew Selkirk
   */
! public interface TableColumnModel {
! 
! 	/**
! 	 * addColumn
! 	 * @param column TableColumn
! 	 */
! 	void addColumn(TableColumn column);
! 
! 	/**
! 	 * removeColumn
! 	 * @param column TableColumn
! 	 */
! 	void removeColumn(TableColumn column);
! 
! 	/**
! 	 * moveColumn
! 	 * @param columnIndex Index of column to move
! 	 * @param newIndex New index of column
! 	 */
! 	void moveColumn(int columnIndex, int newIndex);
  
! 	/**
! 	 * setColumnMargin
! 	 * @param margin Margin of column
! 	 */
! 	void setColumnMargin(int margin);
  
! 	/**
! 	 * getColumnCount
! 	 * @returns Column count
! 	 */
! 	int getColumnCount();
  
! 	/**
! 	 * getColumns
! 	 * @returns Enumeration of columns
! 	 */
! 	Enumeration getColumns();
  
! 	/**
! 	 * getColumnIndex
! 	 * @param columnIdentifier Column id
! 	 */
! 	int getColumnIndex(Object columnIdentifier);
  
! 	/**
! 	 * getColumn
! 	 * @param columnIndex Index of column
! 	 */
! 	TableColumn getColumn(int columnIndex);
  
! 	/**
! 	 * getColumnMargin
! 	 * @returns Column margin
! 	 */
! 	int getColumnMargin();
  
! 	/**
! 	 * getColumnIndexAtX
! 	 * @returns Column index as position x
! 	 */
! 	int getColumnIndexAtX(int xPosition);
  
! 	/**
! 	 * getTotalColumnWidth
! 	 * @returns Total column width
! 	 */
! 	int getTotalColumnWidth();
  
! 	/**
! 	 * setColumnSelectionAllowed
! 	 * @param value Set column selection
! 	 */
! 	void setColumnSelectionAllowed(boolean value);
  
! 	/**
! 	 * getColumnSelectionAllowed
! 	 * @returns true if column selection allowed, false otherwise
! 	 */
! 	boolean getColumnSelectionAllowed();
  
! 	/**
! 	 * getSelectedColumns
! 	 * @returns Selected columns
! 	 */
! 	int[] getSelectedColumns();
  
! 	/**
! 	 * getSelectedColumnCount
! 	 * @returns Count of selected columns
! 	 */
! 	int getSelectedColumnCount();
  
! 	/**
! 	 * setSelectionModel
! 	 * @param model ListSelectionModel
! 	 */
! 	void setSelectionModel(ListSelectionModel model);
  
! 	/**
! 	 * getSelectionModel
! 	 * @param column TableColumn
! 	 */
! 	ListSelectionModel getSelectionModel();
  
! 	/**
! 	 * addColumnModelListener
! 	 * @param listener TableColumnModelListener
! 	 */
! 	void addColumnModelListener(TableColumnModelListener listener);
  
! 	/**
! 	 * removeColumnModelListener
! 	 * @param listener TableColumnModelListener
! 	 */
! 	void removeColumnModelListener(TableColumnModelListener listener);
  
  
! } // TableColumnModel
--- 47,166 ----
   * TableColumnModel public interface
   * @author Andrew Selkirk
   */
! public interface TableColumnModel
! {
!   /**
!    * addColumn
!    * @param column TableColumn
!    */
!   void addColumn(TableColumn column);
  
!   /**
!    * removeColumn
!    * @param column TableColumn
!    */
!   void removeColumn(TableColumn column);
  
!   /**
!    * moveColumn
!    * @param columnIndex Index of column to move
!    * @param newIndex New index of column
!    */
!   void moveColumn(int columnIndex, int newIndex);
  
!   /**
!    * setColumnMargin
!    * @param margin Margin of column
!    */
!   void setColumnMargin(int margin);
  
!   /**
!    * getColumnCount
!    * @return Column count
!    */
!   int getColumnCount();
  
!   /**
!    * getColumns
!    * @return Enumeration of columns
!    */
!   Enumeration getColumns();
  
!   /**
!    * getColumnIndex
!    * @param columnIdentifier Column id
!    */
!   int getColumnIndex(Object columnIdentifier);
  
!   /**
!    * getColumn
!    * @param columnIndex Index of column
!    */
!   TableColumn getColumn(int columnIndex);
  
!   /**
!    * getColumnMargin
!    * @return Column margin
!    */
!   int getColumnMargin();
  
!   /**
!    * getColumnIndexAtX
!    * @return Column index as position x
!    */
!   int getColumnIndexAtX(int xPosition);
  
!   /**
!    * getTotalColumnWidth
!    * @return Total column width
!    */
!   int getTotalColumnWidth();
  
!   /**
!    * setColumnSelectionAllowed
!    * @param value Set column selection
!    */
!   void setColumnSelectionAllowed(boolean value);
  
!   /**
!    * getColumnSelectionAllowed
!    * @return true if column selection allowed, false otherwise
!    */
!   boolean getColumnSelectionAllowed();
  
!   /**
!    * getSelectedColumns
!    * @return Selected columns
!    */
!   int[] getSelectedColumns();
  
!   /**
!    * getSelectedColumnCount
!    * @return Count of selected columns
!    */
!   int getSelectedColumnCount();
  
!   /**
!    * setSelectionModel
!    * @param model ListSelectionModel
!    */
!   void setSelectionModel(ListSelectionModel model);
  
!   /**
!    * getSelectionModel
!    * @param column TableColumn
!    */
!   ListSelectionModel getSelectionModel();
  
+   /**
+    * addColumnModelListener
+    * @param listener TableColumnModelListener
+    */
+   void addColumnModelListener(TableColumnModelListener listener);
  
!   /**
!    * removeColumnModelListener
!    * @param listener TableColumnModelListener
!    */
!   void removeColumnModelListener(TableColumnModelListener listener);
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/table/TableModel.java gcc-4.0.0/libjava/javax/swing/table/TableModel.java
*** gcc-3.4.3/libjava/javax/swing/table/TableModel.java	Sun Oct 12 13:33:31 2003
--- gcc-4.0.0/libjava/javax/swing/table/TableModel.java	Wed Feb 16 20:03:07 2005
***************
*** 1,5 ****
  /* TableModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TableModel.java --
!    Copyright (C) 2002, 2005, Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,112 ****
  
  package javax.swing.table;
  
- // Imports
  import javax.swing.event.TableModelListener;
  
  /**
!  * TableModel public interface
   * @author Andrew Selkirk
   */
! public interface TableModel {
! 
! 	/**
! 	 * getRowCount
! 	 * @returns row count
! 	 */
! 	int getRowCount();
! 
! 	/**
! 	 * getColumnCount
! 	 * @returns column count
! 	 */
! 	int getColumnCount();
! 
! 	/**
! 	 * getColumnName
! 	 * @param columnIndex Column index
! 	 * @returns Column name
! 	 */
! 	String getColumnName(int columnIndex);
  
! 	/**
! 	 * getColumnClass
! 	 * @param columnIndex Column index
! 	 * @returns Column class
! 	 */
! 	Class getColumnClass(int columnIndex);
  
! 	/**
! 	 * isCellEditable
! 	 * @param rowIndex Row index
! 	 * @param columnIndex Column index
! 	 * @returns true if editable, false otherwise
! 	 */
! 	boolean isCellEditable(int rowIndex, int columnIndex);
  
! 	/**
! 	 * getValueAt
! 	 * @param rowIndex Row index
! 	 * @param columnIndex Column index
! 	 * @returns Value at specified indices
! 	 */
! 	Object getValueAt(int rowIndex, int columnIndex);
  
! 	/**
! 	 * setValueAt
! 	 * @param aValue Value to set
! 	 * @param rowIndex Row index
! 	 * @param columnIndex Column index
! 	 */
! 	void setValueAt(Object aValue, int rowIndex, int columnIndex);
  
! 	/**
! 	 * addTableModelListener
! 	 * @param listener TableModelListener
! 	 */
! 	void addTableModelListener(TableModelListener listener);
  
! 	/**
! 	 * removeTableModelListener
! 	 * @param listener TableModelListener
! 	 */
! 	void removeTableModelListener(TableModelListener listener);
  
  
! } // TableModel
--- 37,134 ----
  
  package javax.swing.table;
  
  import javax.swing.event.TableModelListener;
  
  /**
!  * A <code>TableModel</code> is a two dimensional data structure that 
!  * can store arbitrary <code>Object</code> instances, usually for the
!  * purpose of display in a {@link JTable} component.  Individual objects
!  * can be accessed by specifying the row index and column index for 
!  * the object.  Each column in the model has a name associated with it.
!  * <p>
!  * The {@link DefaultTableModel} class provides one implementation of
!  * this interface.
!  * 
   * @author Andrew Selkirk
   */
! public interface TableModel
! {
!   /**
!    * Returns the number of rows in the model.
!    * 
!    * @return The row count.
!    */
!   int getRowCount();
  
!   /**
!    * Returns the number of columns in the model.
!    * 
!    * @return The column count
!    */
!   int getColumnCount();
  
!   /**
!    * Returns the name of a column in the model.
!    * 
!    * @param columnIndex the column index.
!    * 
!    * @return The column name.
!    */
!   String getColumnName(int columnIndex);
  
!   /**
!    * Returns the <code>Class</code> for all <code>Object</code> instances
!    * in the specified column.  
!    * 
!    * @param columnIndex the column index.
!    * 
!    * @return The class.
!    */
!   Class getColumnClass(int columnIndex);
  
!   /**
!    * Returns <code>true</code> if the cell is editable, and <code>false</code>
!    * otherwise.
!    * 
!    * @param rowIndex the row index.
!    * @param columnIndex the column index.
!    * 
!    * @return <code>true</code> if editable, <code>false</code> otherwise.
!    */
!   boolean isCellEditable(int rowIndex, int columnIndex);
  
!   /**
!    * Returns the value (<code>Object</code>) at a particular cell in the
!    * table.
!    * 
!    * @param rowIndex the row index.
!    * @param columnIndex the column index.
!    * 
!    * @return The value at the specified cell.
!    */
!   Object getValueAt(int rowIndex, int columnIndex);
  
!   /**
!    * Sets the value at a particular cell in the table.  
!    * 
!    * @param aValue the value (<code>null</code> permitted).
!    * @param rowIndex the row index.
!    * @param columnIndex the column index.
!    */
!   void setValueAt(Object aValue, int rowIndex, int columnIndex);
  
+   /**
+    * Adds a listener to the model.  The listener will receive notification
+    * of updates to the model.
+    * 
+    * @param listener the listener.
+    */
+   void addTableModelListener(TableModelListener listener);
  
!   /**
!    * Removes a listener from the model.
!    * 
!    * @param listener the listener.
!    */
!   void removeTableModelListener(TableModelListener listener);
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/AbstractDocument.java gcc-4.0.0/libjava/javax/swing/text/AbstractDocument.java
*** gcc-3.4.3/libjava/javax/swing/text/AbstractDocument.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/AbstractDocument.java	Wed Feb 16 20:03:09 2005
***************
*** 1,5 ****
! /* AbstractDocument.java -- 
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* AbstractDocument.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,367 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.text;
  
  import java.util.Dictionary;
  import java.util.Enumeration;
  import java.util.EventListener;
  import java.util.Vector;
  import javax.swing.event.DocumentEvent;
  import javax.swing.event.DocumentListener;
  import javax.swing.event.EventListenerList;
  import javax.swing.event.UndoableEditEvent;
  import javax.swing.event.UndoableEditListener;
  import javax.swing.tree.TreeNode;
  import javax.swing.undo.UndoableEdit;
  
! public abstract class AbstractDocument implements Document
  {
!     Vector doc_list = new Vector();
!     Vector undo_list = new Vector();
  
!     // these still need to be implemented by a derived class:
!     public abstract  Element getParagraphElement(int pos);
!     public abstract  Element getDefaultRootElement();
  
!     // some inner classes sun says I should have:
!     abstract class AbstractElement implements Element, TreeNode
!     {
! 	int count, offset;
! 	AttributeSet attr;
! 	Vector elts = new Vector();
! 	String name;
! 	Element parent;
! 	Vector kids = new Vector();
! 	TreeNode tree_parent;
! 	
! 	public AbstractElement(Element p, AttributeSet s)
! 	{ parent = p; attr = s; }
  
! 	public Enumeration children()         { return kids.elements(); }
! 	public boolean getAllowsChildren()    { return true; }
! 	public TreeNode getChildAt(int index) { return (TreeNode) kids.elementAt(index); }
! 	public int getChildCount()            { return kids.size(); }
! 	public int getIndex(TreeNode  node)   { return kids.indexOf(node); }
! 	public TreeNode getParent()           { return tree_parent; }
  
! 	public AttributeSet getAttributes()      { return attr; }
! 	public Document getDocument()            { return AbstractDocument.this; }
! 	public Element getElement(int index)     { return (Element)elts.elementAt(index); }
! 	public String getName()                  { return name; }
! 	public Element getParentElement()        { return parent; }
  
! 	public abstract boolean isLeaf();
! 	public abstract int getEndOffset();
! 	public abstract int getElementCount();
! 	public abstract int getElementIndex(int offset);
! 	public abstract int getStartOffset();
      }
  
!     interface AttributeContext
      {
      }
  
!     
!     class BranchElement extends AbstractElement
      {
! 	public BranchElement(Element e, AttributeSet a, int s, int end)
! 	{  super(e, a);	}
  
! 	public boolean isLeaf() { return false; }
! 	public int getEndOffset() {  return 0; }
! 	public int getElementCount() { return 0; }
! 	public int getElementIndex(int offset) { return 0; }
! 	public int getStartOffset() { return 0; }
      }
!     
!     interface Content
      {
!         Position createPosition(int offset) throws BadLocationException;
!         int length();
!         UndoableEdit insertString(int where, String str) throws BadLocationException;
!         UndoableEdit remove(int where, int nitems) throws BadLocationException;	
!         String getString(int where, int len) throws BadLocationException;
!         void getChars(int where, int len, Segment txt) throws BadLocationException;
      }
!     
!     class DefaultDocumentEvent implements DocumentEvent
      {
! 	public int len, off;
! 	public Document getDocument() { return AbstractDocument.this; }
! 	public int getLength() { return len; }
! 	public int getOffset() { return off; }
! 	public DocumentEvent.EventType getType()  	              { return null; }
! 	public DocumentEvent.ElementChange getChange(Element  elem)  { return null; }
      }
!     
!     static class ElementEdit
      {
!     }    
!     
!     class LeafElement extends AbstractElement
      {
! 	LeafElement(Element e, AttributeSet a, int s, int end)
! 	{  super(e, a);	}
  
! 	public boolean isLeaf() { return true; }
! 	public int getEndOffset() {  return 0; }
! 	public int getElementCount() { return 0; }
! 	public int getElementIndex(int offset) { return 0; }
! 	public int getStartOffset() { return 0; }
      }
-   
  
-     Content content;
  
!     AbstractDocument(Content doc)
      {
! 	content = doc;
      }
-     
-     /********************************************************
-      *
-      *  the meat:
-      *
-      ***********/
-     
  
!     public void addDocumentListener(DocumentListener listener)
      {
! 	doc_list.addElement(listener);
      }
!   
!     public void addUndoableEditListener(UndoableEditListener listener)
      {
! 	undo_list.addElement(listener);
      }
!  
!     protected  Element createBranchElement(Element parent, AttributeSet a)
!     {	
! 	return new BranchElement(parent, a, 0, 0);
      }
!  
!     protected  Element createLeafElement(Element parent, AttributeSet a, int p0, int p1)
      {
! 	return new LeafElement(parent, a, p0, p1-p0);
      }
  
!     public Position createPosition(int offs)
      {
! 	final int a = offs;
! 	return new Position() 
! 	    {
! 		public int getOffset()
! 		{
! 		    return a; 
! 		}
! 	    };
      }
!   
!     protected void fireChangedUpdate(DocumentEvent e)
      {
      }
!  
!     protected  void fireInsertUpdate(DocumentEvent e)
      {
      }
!  
!     protected  void fireRemoveUpdate(DocumentEvent e)
      {
      }
!  
!     protected  void fireUndoableEditUpdate(UndoableEditEvent e)
      {
      }
!     int getAsynchronousLoadPriority()
      {
! 	return 0;
      }
!  
!     protected  AttributeContext getAttributeContext()
      {
! 	return null;
      }
      
!     Element getBidiRootElement()
      {
! 	return null;
      }
!  
!     protected Content getContent()
      {
! 	return content;
      }
!  
!     protected  Thread getCurrentWriter()
      {
! 	return null;
      }
  
  
!     public Dictionary getDocumentProperties()
      {
  	return null;
      }
  
!     public Position getEndPosition()
      {
! 	return null;
      }
  
!     public int getLength()
      {
! 	return content.length();
      }
!     
!     public EventListener[] getListeners(Class listenerType)
      {
! 	return null;
      }
!     
!     public Object getProperty(Object key)
      {
! 	return null;
      }
  
!     public Element[] getRootElements()
      {
! 	return null;
      }
      
!     public Position getStartPosition()
      {
! 	return null;
      }
  
!     public String getText(int offset, int length)
      {
! 	try {
! 	    return content.getString(offset, length);
! 	} catch (Exception e) {
! 	    System.out.println("Hmmm, fail to getText: " + offset + " -> " + length);
! 	    return null;
! 	}
      }
!   
!     public void getText(int offset, int length, Segment txt)
      {
! 	String a = getText(offset, length);
  
! 	if (a == null)
! 	    {
! 		txt.offset = 0;
! 		txt.count = 0;
! 		txt.array  = new char[0];
! 		return;
! 	    }
  
! 	txt.offset = offset;
! 	txt.count  = length;
  
! 	char chars[] = new char[ a.length() ];
! 	
! 	a.getChars(0, a.length(), chars, 0);
! 	
! 	txt.array  = chars;	
      }
!   
!     public void insertString(int offs, String str, AttributeSet a)
      {
! 	try {
! 	    content.insertString(offs, str);	
! 	} catch (Exception e) {
! 	    System.err.println("FAILED TO INSERT-STRING: " + e + ", at:"+offs);
! 	}
      }
!  
!     protected void insertUpdate(DefaultDocumentEvent chng, AttributeSet attr)
      {
      }
!  
!     protected  void postRemoveUpdate(DefaultDocumentEvent chng)
      {
      }
!   
!     public void putProperty(Object key, Object value)
      {
      }
!   
!     public void readLock()
      {
      }
!   
!     public void readUnlock()
      {
      }
!   
!     public void remove(int offs, int len)
      {
      }
!   
!     public void removeDocumentListener(DocumentListener listener)
      {
      }
!   
!     public void removeUndoableEditListener(UndoableEditListener listener)
      {
      }
!  
!     protected void removeUpdate(DefaultDocumentEvent chng)
      {
      }
!   
!     public void render(Runnable r)
      {
      }
!       
!     void setAsynchronousLoadPriority(int p)
      {
      }
!   
!     void setDocumentProperties(Dictionary x)
      {
      }
!  
!     protected  void writeLock()
      {
      }
!  
!     protected  void writeUnlock()
      {
      }
  }
--- 35,892 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.text;
  
+ import java.io.PrintStream;
+ import java.io.Serializable;
  import java.util.Dictionary;
  import java.util.Enumeration;
  import java.util.EventListener;
  import java.util.Vector;
+ 
  import javax.swing.event.DocumentEvent;
  import javax.swing.event.DocumentListener;
  import javax.swing.event.EventListenerList;
  import javax.swing.event.UndoableEditEvent;
  import javax.swing.event.UndoableEditListener;
  import javax.swing.tree.TreeNode;
+ import javax.swing.undo.AbstractUndoableEdit;
+ import javax.swing.undo.CompoundEdit;
  import javax.swing.undo.UndoableEdit;
  
! public abstract class AbstractDocument
!   implements Document, Serializable
  {
!   private static final long serialVersionUID = -116069779446114664L;
!   
!   protected static final String BAD_LOCATION = "document location failure";
!   
!   public static final String BidiElementName = "bidi level";
!   public static final String ContentElementName = "content";
!   public static final String ParagraphElementName = "paragraph";
!   public static final String SectionElementName = "section";
!   public static final String ElementNameAttribute = "$ename";
  
!   Content content;
!   AttributeContext context;
!   DocumentFilter documentFilter;
!   
!   protected EventListenerList listenerList = new EventListenerList();
  
!   protected AbstractDocument(Content doc)
!   {
!     this(doc, StyleContext.getDefaultStyleContext());
!   }
  
!   protected AbstractDocument(Content doc, AttributeContext ctx)
!   {
!     content = doc;
!     context = ctx;
!   }
  
!   // These still need to be implemented by a derived class:
!   public abstract Element getParagraphElement(int pos);
  
!   public abstract Element getDefaultRootElement();
! 
!   protected Element createBranchElement(Element parent,
! 					AttributeSet attributes)
!   {
!     return new BranchElement(parent, attributes);
!   }
! 
!   protected Element createLeafElement(Element parent, AttributeSet attributes,
! 				      int start, int end)
!   {
!     return new LeafElement(parent, attributes, start, end);
!   }
! 
!   public Position createPosition(final int offset) throws BadLocationException
!   {
!     if (offset < 0 || offset > getLength())
!       throw new BadLocationException(getText(0, getLength()), offset);
! 
!     return new Position()
!       {
! 	public int getOffset()
! 	{
! 	  return offset;
! 	}
!       };
!   }
! 
!   protected void fireChangedUpdate(DocumentEvent event)
!   {
!     DocumentListener[] listeners = getDocumentListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].changedUpdate(event);
!   }
! 
!   protected void fireInsertUpdate(DocumentEvent event)
!   {
!     DocumentListener[] listeners = getDocumentListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].insertUpdate(event);
!   }
! 
!   protected void fireRemoveUpdate(DocumentEvent event)
!   {
!     DocumentListener[] listeners = getDocumentListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].removeUpdate(event);
!   }
! 
!   protected void fireUndoableEditUpdate(UndoableEditEvent event)
!   {
!     UndoableEditListener[] listeners = getUndoableEditListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].undoableEditHappened(event);
!   }
! 
!   public int getAsynchronousLoadPriority()
!   {
!     return 0;
!   }
! 
!   protected AttributeContext getAttributeContext()
!   {
!     return context;
!   }
! 
!   public Element getBidiRootElement()
!   {
!     return null;
!   }
! 
!   protected Content getContent()
!   {
!     return content;
!   }
! 
!   protected Thread getCurrentWriter()
!   {
!     return null;
!   }
! 
!   public Dictionary getDocumentProperties()
!   {
!     return null;
!   }
! 
!   public Position getEndPosition()
!   {
!     return new Position() 
!       {        
!         public int getOffset() 
!         { 
!           return getLength(); 
!         } 
!       };
!   }
! 
!   public int getLength()
!   {
!     return content.length() - 1;
!   }
! 
!   public EventListener[] getListeners(Class listenerType)
!   {
!     return listenerList.getListeners(listenerType);
!   }
! 
!   public Object getProperty(Object key)
!   {
!     return null;
!   }
! 
!   public Element[] getRootElements()
!   {
!     Element[] elements = new Element[1];
!     elements[0] = getDefaultRootElement();
!     return elements;
!   }
! 
!   public Position getStartPosition()
!   {
!     return new Position() 
!       {        
!         public int getOffset() 
!         { 
!           return 0; 
!         } 
!       };
!   }
! 
!   public String getText(int offset, int length) throws BadLocationException
!   {
!     return content.getString(offset, length);
!   }
! 
!   public void getText(int offset, int length, Segment segment)
!     throws BadLocationException
!   {
!     content.getChars(offset, length, segment);
!   }
! 
!   public void insertString(int offset, String text, AttributeSet attributes)
!     throws BadLocationException
!   {
!     // Just return when no text to insert was given.
!     if (text == null || text.length() == 0)
!       return;
!     
!     DefaultDocumentEvent event =
!       new DefaultDocumentEvent(offset, text.length(),
! 			       DocumentEvent.EventType.INSERT);
!     content.insertString(offset, text);
!     insertUpdate(event, attributes);
!     fireInsertUpdate(event);
!   }
! 
!   protected void insertUpdate(DefaultDocumentEvent chng, AttributeSet attr)
!   {
!   }
! 
!   protected void postRemoveUpdate(DefaultDocumentEvent chng)
!   {
!   }
! 
!   public void putProperty(Object key, Object value)
!   {
!   }
! 
!   public void readLock()
!   {
!   }
! 
!   public void readUnlock()
!   {
!   }
! 
!   public void remove(int offset, int length) throws BadLocationException
!   {
!     DefaultDocumentEvent event =
!       new DefaultDocumentEvent(offset, length,
! 			       DocumentEvent.EventType.REMOVE);
!     removeUpdate(event);
!     content.remove(offset, length);
!     postRemoveUpdate(event);
!     fireRemoveUpdate(event);
!   }
! 
!   /**
!    * Replaces some text in the document.
!    *
!    * @since 1.4
!    */
!   public void replace(int offset, int length, String text,
! 		      AttributeSet attributes)
!     throws BadLocationException
!   {
!     remove(offset, length);
!     insertString(offset, text, attributes);
!   }
! 
!   /**
!    * Adds a <code>DocumentListener</code> object to this document.
!    *
!    * @param listener the listener to add
!    */
!   public void addDocumentListener(DocumentListener listener)
!   {
!     listenerList.add(DocumentListener.class, listener);
!   }
! 
!   /**
!    * Removes a <code>DocumentListener</code> object from this document.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeDocumentListener(DocumentListener listener)
!   {
!     listenerList.remove(DocumentListener.class, listener);
!   }
! 
!   /**
!    * Returns add added <code>DocumentListener</code> objects.
!    *
!    * @return an array of listeners
!    */
!   public DocumentListener[] getDocumentListeners()
!   {
!     return (DocumentListener[]) getListeners(DocumentListener.class);
!   }
! 
!   /**
!    * Adds a <code>UndoableEditListener</code> object to this document.
!    *
!    * @param listener the listener to add
!    */
!   public void addUndoableEditListener(UndoableEditListener listener)
!   {
!     listenerList.add(UndoableEditListener.class, listener);
!   }
! 
!   /**
!    * Removes a <code>UndoableEditListener</code> object from this document.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeUndoableEditListener(UndoableEditListener listener)
!   {
!     listenerList.remove(UndoableEditListener.class, listener);
!   }
! 
!   /**
!    * Returns add added <code>UndoableEditListener</code> objects.
!    *
!    * @return an array of listeners
!    */
!   public UndoableEditListener[] getUndoableEditListeners()
!   {
!     return (UndoableEditListener[]) getListeners(UndoableEditListener.class);
!   }
! 
!   protected void removeUpdate(DefaultDocumentEvent chng)
!   {
!   }
! 
!   public void render(Runnable r)
!   {
!   }
! 
!   public void setAsynchronousLoadPriority(int p)
!   {
!   }
! 
!   public void setDocumentProperties(Dictionary x)
!   {
!   }
! 
!   protected void writeLock()
!   {
!   }
! 
!   protected void writeUnlock()
!   {
!   }
! 
!   /**
!    * @since 1.4
!    */
!   public DocumentFilter getDocumentFilter()
!   {
!     return documentFilter;
!   }
! 
!   /**
!    * @since 1.4
!    */
!   public void setDocumentFilter(DocumentFilter filter)
!   {
!     this.documentFilter = filter;
!   }
! 
!   public void dump(PrintStream out)
!   {
!     ((AbstractElement) getDefaultRootElement()).dump(out, 0);
!   }
! 
!   public interface AttributeContext
!   {
!     AttributeSet addAttribute(AttributeSet old, Object name, Object value);
! 
!     AttributeSet addAttributes(AttributeSet old, AttributeSet attributes);
! 
!     AttributeSet getEmptySet();
! 
!     void reclaim(AttributeSet attributes);
! 
!     AttributeSet removeAttribute(AttributeSet old, Object name);
! 
!     AttributeSet removeAttributes(AttributeSet old, AttributeSet attributes);
! 
!     AttributeSet removeAttributes(AttributeSet old, Enumeration names);
!   }
! 
!   public interface Content
!   {
!     Position createPosition(int offset) throws BadLocationException;
! 
!     int length();
! 
!     UndoableEdit insertString(int where, String str)
!       throws BadLocationException;
! 
!     UndoableEdit remove(int where, int nitems) throws BadLocationException;
! 
!     String getString(int where, int len) throws BadLocationException;
! 
!     void getChars(int where, int len, Segment txt) throws BadLocationException;
!   }
! 
!   public abstract class AbstractElement
!     implements Element, MutableAttributeSet, TreeNode, Serializable
!   {
!     private static final long serialVersionUID = 1265312733007397733L;
!     int count;
!     int offset;
! 
!     AttributeSet attributes;
! 
!     Element element_parent;
! 
!     TreeNode tree_parent;
!     Vector tree_children;
! 
!     public AbstractElement(Element p, AttributeSet s)
!     {
!       element_parent = p;
!       attributes = s;
      }
  
!     // TreeNode implementation
! 
!     public abstract Enumeration children();
!       
!     public abstract boolean getAllowsChildren();
!       
!     public TreeNode getChildAt(int index)
      {
+       return (TreeNode) tree_children.get(index);
+     }
+       
+     public int getChildCount()
+     {
+       return tree_children.size();
+     }
+       
+     public int getIndex(TreeNode node)
+     {
+       return tree_children.indexOf(node);
      }
  
!     public TreeNode getParent()
      {
!       return tree_parent;
!     }
  
!     public abstract boolean isLeaf();
! 
! 
!     // MutableAttributeSet support
! 
!     public void addAttribute(Object name, Object value)
!     {
!       attributes = getAttributeContext().addAttribute(attributes, name, value);
      }
! 
!     public void addAttributes(AttributeSet attrs)
      {
!       attributes = getAttributeContext().addAttributes(attributes, attrs);
      }
! 
!     public void removeAttribute(Object name)
      {
!       attributes = getAttributeContext().removeAttribute(attributes, name);
      }
! 
!     public void removeAttributes(AttributeSet attrs)
      {
!       attributes = getAttributeContext().removeAttributes(attributes, attrs);
!     }
! 
!     public void removeAttributes(Enumeration names)
      {
!       attributes = getAttributeContext().removeAttributes(attributes, names);
!     }
  
!     public void setResolveParent(AttributeSet parent)
!     {
!       attributes = getAttributeContext().addAttribute(attributes, ResolveAttribute, parent);
      }
  
  
!     // AttributeSet interface support
! 
!     public boolean containsAttribute(Object name, Object value)
      {
!       return attributes.containsAttribute(name, value);
      }
  
!     public boolean containsAttributes(AttributeSet attrs)
      {
!       return attributes.containsAttributes(attrs);
      }
! 
!     public AttributeSet copyAttributes()
      {
!       return attributes.copyAttributes();
      }
! 
!     public Object getAttribute(Object key)
!     {
!       return attributes.getAttribute(key);
      }
! 
!     public int getAttributeCount()
      {
!       return attributes.getAttributeCount();
!     }
!       
!     public Enumeration getAttributeNames()
!     {
!       return attributes.getAttributeNames();
!     }
!       
!     public AttributeSet getResolveParent()
!     {
!       return attributes.getResolveParent();
      }
  
!     public boolean isDefined(Object attrName)
      {
!       return attributes.isDefined(attrName);
      }
!       
!     public boolean isEqual(AttributeSet attrs) 
      {
+       return attributes.isEqual(attrs);
      }
! 
!     // Element interface support
! 
!     public AttributeSet getAttributes()
      {
+       return attributes;
      }
! 
!     public Document getDocument()
      {
+       return AbstractDocument.this;
      }
!       
!     public abstract Element getElement(int index);
!       
!     public String getName()
      {
+       return (String) getAttribute(NameAttribute);
      }
!       
!     public Element getParentElement()
      {
!       return element_parent;
      }
!       
!     public abstract int getEndOffset();
!       
!     public abstract int getElementCount();
!       
!     public abstract int getElementIndex(int offset);
!       
!     public abstract int getStartOffset();
! 
!     private void dumpElement(PrintStream stream, String indent, Element element)
      {
!       System.out.println(indent + "<" + element.getName() +">");
!       
!       if (element.isLeaf())
! 	{
! 	  int start = element.getStartOffset();
! 	  int end = element.getEndOffset();
! 	  String text = "";
! 	  try
! 	    {
! 	      text = getContent().getString(start, end - start);
! 	    }
! 	  catch (BadLocationException e)
! 	    {
! 	    }
! 	  System.out.println(indent + "  ["
! 			     + start + ","
! 			     + end + "]["
! 			     + text + "]");
! 	}
!       else
! 	{
! 	  for (int i = 0; i < element.getElementCount(); ++i)
! 	    dumpElement(stream, indent + "  ", element.getElement(i));
! 	}
      }
      
!     public void dump(PrintStream stream, int indent)
      {
!       String indentStr = "";
!       for (int i = 0; i < indent; ++i)
! 	indentStr += "  ";
!       dumpElement(stream, indentStr, this);
      }
!   }
! 
!   public class BranchElement extends AbstractElement
!   {
!     private static final long serialVersionUID = -8595176318868717313L;
!     
!     private Element[] children = new Element[0];
! 
!     public BranchElement(Element parent, AttributeSet attributes)
      {
!       super(parent, attributes);
      }
! 
!     public Enumeration children()
      {
!       if (children.length == 0)
!         return null;
! 
!       Vector tmp = new Vector();
! 
!       for (int index = 0; index < children.length; ++index)
! 	tmp.add(children[index]);
!       
!       return tmp.elements();
      }
  
+     public boolean getAllowsChildren()
+     {
+       return true;
+     }
  
!     public Element getElement(int index)
      {
+       if (index < 0 || index >= children.length)
  	return null;
+ 
+       return children[index];
      }
  
!     public int getElementCount()
      {
!       return children.length;
      }
  
!     public int getElementIndex(int offset)
      {
!       // XXX: There is surely a better algorithm
!       // as beginning from first element each time.
!       for (int index = 0; index < children.length; ++index)
!         {
! 	  Element elem = children[index];
! 
! 	  if ((elem.getStartOffset() <= offset)
! 	      && (offset < elem.getEndOffset()))
! 	    return index;
!         }
! 
!       return 0;
      }
! 
!     public int getEndOffset()
      {
!       return children[children.length - 1].getEndOffset();
      }
! 
!     public String getName()
      {
!       return ParagraphElementName;
      }
  
!     public int getStartOffset()
      {
!       return children[0].getStartOffset();
!     }
! 
!     public boolean isLeaf()
!     {
!       return false;
!     }
! 
!     public Element positionToElement(int position)
!     {
!       // XXX: There is surely a better algorithm
!       // as beginning from first element each time.
!       for (int index = 0; index < children.length; ++index)
!         {
! 	  Element elem = children[index];
! 
! 	  if ((elem.getStartOffset() <= position)
! 	      && (position < elem.getEndOffset()))
! 	    return elem;
!         }
! 
!       return null;
!     }
! 
!     public void replace(int offset, int length, Element[] elements)
!     {
!       Element[] target = new Element[children.length - length
! 				     + elements.length];
!       System.arraycopy(children, 0, target, 0, offset);
!       System.arraycopy(elements, 0, target, offset, elements.length);
!       System.arraycopy(children, offset + length, target,
! 		       offset + elements.length,
! 		       children.length - offset - length);
!       children = target;
!     }
! 
!     public String toString()
!     {
!       return ("BranchElement(" + getName() + ") "
! 	      + getStartOffset() + "," + getEndOffset() + "\n");
      }
+   }
+ 
+   public class DefaultDocumentEvent extends CompoundEdit
+     implements DocumentEvent
+   {
+     private static final long serialVersionUID = -7406103236022413522L;
      
!     private int offset;
!     private int length;
!     private DocumentEvent.EventType type;
! 
!     public DefaultDocumentEvent(int offset, int length,
! 				DocumentEvent.EventType type)
      {
!       this.offset = offset;
!       this.length = length;
!       this.type = type;
      }
  
!     public Document getDocument()
      {
!       return AbstractDocument.this;
      }
! 
!     public int getLength()
      {
!       return length;
!     }
  
!     public int getOffset()
!     {
!       return offset;
!     }
  
!     public DocumentEvent.EventType getType()
!     {
!       return type;
!     }
  
!     public DocumentEvent.ElementChange getChange(Element elem)
!     {
!       return null;
      }
!   }
! 
!   public static class ElementEdit extends AbstractUndoableEdit
!     implements DocumentEvent.ElementChange
!   {
!     private static final long serialVersionUID = -1216620962142928304L;
! 
!     private Element elem;
!     private int index;
!     private Element[] removed;
!     private Element[] added;
!     
!     public ElementEdit(Element elem, int index,
! 		       Element[] removed, Element[] added)
      {
!       this.elem = elem;
!       this.index = index;
!       this.removed = removed;
!       this.added = added;
      }
! 
!     public Element[] getChildrenAdded()
      {
+       return added;
      }
!     
!     public Element[] getChildrenRemoved()
      {
+       return removed;
      }
! 
!     public Element getElement()
      {
+       return elem;
      }
! 
!     public int getIndex()
      {
+       return index;
      }
!   }
! 
!   public class LeafElement extends AbstractElement
!   {
!     private static final long serialVersionUID = 5115368706941283802L;
!     private int start;
!     private int end;
! 
!     public LeafElement(Element parent, AttributeSet attributes, int start,
!                        int end)
      {
+       super(parent, attributes);
+       this.start = start;
+       this.end = end;
      }
! 
!     public Enumeration children()
      {
+       return null;
      }
! 
!     public boolean getAllowsChildren()
      {
+       return false;
      }
! 
!     public Element getElement(int index)
      {
+       return null;
      }
! 
!     public int getElementCount()
      {
+       return 0;
      }
! 
!     public int getElementIndex(int offset)
      {
+       return -1;
      }
! 
!     public int getEndOffset()
      {
+       return end;
      }
! 
!     public String getName()
      {
+       return ContentElementName;
      }
! 
!     public int getStartOffset()
      {
+       return start;
      }
! 
!     public boolean isLeaf()
!     {
!       return true;
!     }
! 
!     public String toString()
      {
+       return ("LeafElement(" + getName() + ") "
+ 	      + getStartOffset() + "," + getEndOffset() + "\n");
      }
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/AttributeSet.java gcc-4.0.0/libjava/javax/swing/text/AttributeSet.java
*** gcc-3.4.3/libjava/javax/swing/text/AttributeSet.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/AttributeSet.java	Tue Nov 30 23:59:07 2004
*************** import java.util.Enumeration;
*** 41,53 ****
  
  public interface AttributeSet
  { 
!     boolean containsAttribute(Object name, Object value);
!     boolean containsAttributes(AttributeSet attributes);
!     AttributeSet copyAttributes();
!     Object getAttribute(Object key);
!     int getAttributeCount();
!     Enumeration getAttributeNames();
!     AttributeSet getResolveParent();
!     boolean isDefined(Object attrName);
!     boolean isEqual(AttributeSet attr);     
  }
--- 41,72 ----
  
  public interface AttributeSet
  { 
!   static interface CharacterAttribute
!   {
!   }
! 
!   static interface ColorAttribute
!   {
!   }
! 
!   static interface FontAttribute
!   {
!   }
! 
!   static interface ParagraphAttribute
!   {
!   }
! 
!   Object NameAttribute = StyleConstants.NameAttribute;
!   Object ResolveAttribute = StyleConstants.ResolveAttribute;
! 
!   boolean containsAttribute(Object name, Object value);
!   boolean containsAttributes(AttributeSet attributes);
!   AttributeSet copyAttributes();
!   Object getAttribute(Object key);
!   int getAttributeCount();
!   Enumeration getAttributeNames();
!   AttributeSet getResolveParent();
!   boolean isDefined(Object attrName);
!   boolean isEqual(AttributeSet attr);     
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/BadLocationException.java gcc-4.0.0/libjava/javax/swing/text/BadLocationException.java
*** gcc-3.4.3/libjava/javax/swing/text/BadLocationException.java	Fri Mar 21 09:18:31 2003
--- gcc-4.0.0/libjava/javax/swing/text/BadLocationException.java	Thu Jun 17 23:43:15 2004
***************
*** 1,5 ****
! /* BadLocationException.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* BadLocationException.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,63 ****
  
  package javax.swing.text;
  
- 
  public class BadLocationException extends Exception
! {    
!   int offset;
    
    /**
     * Constructs a <code>BadLocationException</code>
     *
     * @param str A string indicating what was wrong with the arguments
     * @param offset Offset within the document that was requested &gt;= 0
     */
!   public BadLocationException (String str, int offset)
    {
!     super (str);
      this.offset = offset;
    }
  
    /**
     * Returns the offset into the document that was not legal
     */
!   public int offsetRequested ()
    {
      return offset;
    }
--- 37,64 ----
  
  package javax.swing.text;
  
  public class BadLocationException extends Exception
! {
!   private static final long serialVersionUID = -7712259886815656766L;
    
+   int offset;
+ 
    /**
     * Constructs a <code>BadLocationException</code>
     *
     * @param str A string indicating what was wrong with the arguments
     * @param offset Offset within the document that was requested &gt;= 0
     */
!   public BadLocationException(String str, int offset)
    {
!     super(str);
      this.offset = offset;
    }
  
    /**
     * Returns the offset into the document that was not legal
     */
!   public int offsetRequested()
    {
      return offset;
    }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/Caret.java gcc-4.0.0/libjava/javax/swing/text/Caret.java
*** gcc-3.4.3/libjava/javax/swing/text/Caret.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/Caret.java	Tue Nov 30 23:59:07 2004
*************** this exception to your version of the li
*** 35,44 ****
--- 35,46 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.text;
  
  import java.awt.Graphics;
  import java.awt.Point;
+ 
  import javax.swing.event.ChangeListener;
  
  public interface Caret
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/CharacterIterator.java gcc-4.0.0/libjava/javax/swing/text/CharacterIterator.java
*** gcc-3.4.3/libjava/javax/swing/text/CharacterIterator.java	Fri Aug  9 04:26:12 2002
--- gcc-4.0.0/libjava/javax/swing/text/CharacterIterator.java	Thu Jan  1 00:00:00 1970
***************
*** 1,53 ****
- /* CharacterIterator.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.swing.text;
- 
- 
- public interface CharacterIterator extends Cloneable
- {
-     Object clone();
-     char current();
-     char first();
-     int getBeginIndex();
-     int getEndIndex();
-     int getIndex();
-     char last();
-     char next();
-     char previous();
-     char setIndex(int position);    
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/ComponentView.java gcc-4.0.0/libjava/javax/swing/text/ComponentView.java
*** gcc-3.4.3/libjava/javax/swing/text/ComponentView.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/ComponentView.java	Thu Jul 22 15:36:02 2004
*************** public class ComponentView extends View
*** 79,84 ****
--- 79,85 ----
      }
  
      public Shape modelToView(int pos, Shape a, Position.Bias b)
+       throws BadLocationException
      {
  	return null;
      }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/DefaultCaret.java gcc-4.0.0/libjava/javax/swing/text/DefaultCaret.java
*** gcc-3.4.3/libjava/javax/swing/text/DefaultCaret.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/DefaultCaret.java	Tue Nov 30 23:59:07 2004
***************
*** 1,4 ****
! /* DefaultCaret.java -- 
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* DefaultCaret.java --
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,179 ****
  
  package javax.swing.text;
  
- import java.awt.Color;
  import java.awt.Graphics;
  import java.awt.Point;
  import java.awt.Rectangle;
- import java.awt.Shape;
  import java.awt.event.FocusEvent;
  import java.awt.event.FocusListener;
  import java.awt.event.MouseEvent;
  import java.awt.event.MouseListener;
  import java.awt.event.MouseMotionListener;
  import java.util.EventListener;
! import java.util.Vector;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
  
! public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener
  {
!     Color color = new Color(0,0,0);
!     JTextComponent parent;
!     
!     public void mouseDragged(java.awt.event.MouseEvent  evt)
!     {
!     }
  
!     public void mouseMoved(java.awt.event.MouseEvent  evt)
!     {
!     }
  
!     public void mouseClicked(java.awt.event.MouseEvent  evt)
!     {
!     }
  
!     public void mouseEntered(java.awt.event.MouseEvent  evt)
!     {
!     }
  
!     public void mouseExited(java.awt.event.MouseEvent  evt)
!     {
!     }
  
!     public void mousePressed(java.awt.event.MouseEvent  evt)
!     {
!     }
  
!     public void mouseReleased(java.awt.event.MouseEvent  evt)
!     {
!     }
  
!     public void focusGained(java.awt.event.FocusEvent  evt)
!     {
!     }
  
!     public void focusLost(java.awt.event.FocusEvent  evt)
!     {
!     }
  
!     // caret methods:
  
!     public void deinstall(JTextComponent c)
!     {
! 	parent.removeFocusListener(this);
! 	parent.removeMouseListener(this);
  
! 	parent = null;    
!     }
!     public void install(JTextComponent c)
!     {
! 	parent.addFocusListener(this);
! 	parent.addMouseListener(this);
! 	parent = c;
! 	repaint();
!     }
      
!     Point magic = null;
!     public void setMagicCaretPosition(Point p)
!     {	magic = p;    }
!     public Point getMagicCaretPosition()
!     {	return magic;    }
  
      
!     int mark = 0;
!     public int getMark()
!     {	return mark;    }
  
!     boolean vis_sel = true;
!     public void setSelectionVisible(boolean v)
!     {  vis_sel = v;  repaint();  }
!     public boolean isSelectionVisible()
!     {  return vis_sel;    }
  
!     private void repaint()
!     {	
! 	if (parent != null)
! 	    {
! 		parent.repaint();
! 	    }
!     }
  
!     public void paint(Graphics g)
!     {
! 	g.setColor(color);
! 	g.drawLine(x,y,
! 		   x,y+height);
!     }
  
      
!     Vector changes = new Vector();
!     public void addChangeListener(ChangeListener l)
!     {	changes.addElement(l);    }
!     public void removeChangeListener(ChangeListener l)
!     {   changes.removeElement(l);    }
  
  
!     int blink = 500;
!     public int getBlinkRate()
!     { return blink;    }
!     public void setBlinkRate(int rate)
!     { blink = rate;    }
  
!     int dot = 0;
!     public int getDot()
!     {  return dot;     }
!     public void moveDot(int dot)
!     {   setDot(dot);    }
!     public void setDot(int dot)
!     {
! 	this.dot = dot;   
! 	repaint();
!     }
  
!     boolean vis = true;
!     public boolean isVisible()
!     {	return vis;    }
!     public void setVisible(boolean v)
!     {
! 	vis = v; 
! 	repaint();
!     }
  }
--- 37,315 ----
  
  package javax.swing.text;
  
  import java.awt.Graphics;
  import java.awt.Point;
  import java.awt.Rectangle;
  import java.awt.event.FocusEvent;
  import java.awt.event.FocusListener;
  import java.awt.event.MouseEvent;
  import java.awt.event.MouseListener;
  import java.awt.event.MouseMotionListener;
  import java.util.EventListener;
! 
! import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.EventListenerList;
  
  
! public class DefaultCaret extends Rectangle
!   implements Caret, FocusListener, MouseListener, MouseMotionListener
  {
!   private static final long serialVersionUID = 228155774675466193L;
!   
!   protected ChangeEvent changeEvent = new ChangeEvent(this);
!   protected EventListenerList listenerList = new EventListenerList();
!   
!   private JTextComponent textComponent;
!   
!   private boolean selectionVisible = true;
!   private int blinkRate = 0;
!   private int dot = 0;
!   private int mark = 0;
!   private Point magicCaretPosition = null;
!   private boolean visible = true;
!   private Object highlightEntry;
  
!   public void mouseDragged(MouseEvent event)
!   {
!   }
  
!   public void mouseMoved(MouseEvent event)
!   {
!   }
  
!   public void mouseClicked(MouseEvent event)
!   {
!   }
  
!   public void mouseEntered(MouseEvent event)
!   {
!   }
  
!   public void mouseExited(MouseEvent event)
!   {
!   }
  
!   public void mousePressed(MouseEvent event)
!   {
!   }
  
!   public void mouseReleased(MouseEvent event)
!   {
!   }
  
!   public void focusGained(FocusEvent event)
!   {
!   }
  
!   public void focusLost(FocusEvent event)
!   {
!   }
  
!   protected void moveCaret(MouseEvent event)
!   {
!   }
  
!   protected void positionCaret(MouseEvent event)
!   {
!   }
! 
!   public void deinstall(JTextComponent c)
!   {
!     textComponent.removeFocusListener(this);
!     textComponent.removeMouseListener(this);
!     textComponent.removeMouseMotionListener(this);
!     textComponent = null;
!   }
! 
!   public void install(JTextComponent c)
!   {
!     textComponent = c;
!     textComponent.addFocusListener(this);
!     textComponent.addMouseListener(this);
!     textComponent.addMouseMotionListener(this);
!     repaint();
!   }
! 
!   public void setMagicCaretPosition(Point p)
!   {
!     magicCaretPosition = p;
!   }
! 
!   public Point getMagicCaretPosition()
!   {
!     return magicCaretPosition;
!   }
! 
!   public int getMark()
!   {
!     return mark;
!   }
! 
!   private void handleHighlight()
!   {
!     Highlighter highlighter = textComponent.getHighlighter();
      
!     if (highlighter == null)
!       return;
!     
!     int p0 = Math.min(dot, mark);
!     int p1 = Math.max(dot, mark);
!     
!     if (selectionVisible && p0 != p1)
!       {
! 	try
! 	  {
! 	    if (highlightEntry == null)
! 	      highlightEntry = highlighter.addHighlight(p0, p1, getSelectionPainter());
! 	    else
! 	      highlighter.changeHighlight(highlightEntry, p0, p1);
! 	  }
! 	catch (BadLocationException e)
! 	  {
! 	    // This should never happen.
! 	    throw new InternalError();
! 	  }
!       }
!     else
!       {
! 	if (highlightEntry != null)
! 	  {
! 	    highlighter.removeHighlight(highlightEntry);
! 	    highlightEntry = null;
! 	  }
!       }
!   }
  
+   public void setSelectionVisible(boolean v)
+   {
+     if (selectionVisible == v)
+       return;
      
!     selectionVisible = v;
!     handleHighlight();
!     repaint();
!   }
  
!   public boolean isSelectionVisible()
!   {
!     return selectionVisible;
!   }
  
!   protected final void repaint()
!   {
!     if (textComponent != null)
!       textComponent.repaint();
!   }
  
!   public void paint(Graphics g)
!   {
!     if (textComponent == null)
!       return;
  
+     int dot = getDot();
+     Rectangle rect = null;
+ 
+     try
+       {
+ 	rect = textComponent.modelToView(dot);
+       }
+     catch (BadLocationException e)
+       {
+ 	// This should never happen as dot should be always valid.
+ 	return;
+       }
+ 
+     if (rect == null)
+       return;
      
!     // First we need to delete the old caret.
!     // FIXME: Implement deleting of old caret.
!     
!     // Now draw the caret on the new position if visible.
!     if (visible)
!       {
! 	g.setColor(textComponent.getCaretColor());
! 	g.drawLine(rect.x, rect.y, rect.x, rect.y + rect.height);
!       }
!   }
  
+   public EventListener[] getListeners(Class listenerType)
+   {
+     return listenerList.getListeners(listenerType);
+   }
  
!   public void addChangeListener(ChangeListener listener)
!   {
!     listenerList.add(ChangeListener.class, listener);
!   }
  
!   public void removeChangeListener(ChangeListener listener)
!   {
!     listenerList.remove(ChangeListener.class, listener);
!   }
  
!   public ChangeListener[] getChangeListeners()
!   {
!     return (ChangeListener[]) getListeners(ChangeListener.class);
!   }
! 
!   protected void fireStateChanged()
!   {
!     ChangeListener[] listeners = getChangeListeners();
! 
!     for (int index = 0; index < listeners.length; ++index)
!       listeners[index].stateChanged(changeEvent);
!   }
! 
!   protected final JTextComponent getComponent()
!   {
!     return textComponent;
!   }
!   
!   public int getBlinkRate()
!   {
!     return blinkRate;
!   }
! 
!   public void setBlinkRate(int rate)
!   {
!     blinkRate = rate;
!   }
! 
!   public int getDot()
!   {
!     return dot;
!   }
! 
!   public void moveDot(int dot)
!   {
!     this.dot = dot;
!     handleHighlight();
!     repaint();
!   }
! 
!   public void setDot(int dot)
!   {
!     this.dot = dot;
!     this.mark = dot;
!     handleHighlight();
!     repaint();
!   }
! 
!   public boolean isVisible()
!   {
!     return visible;
!   }
! 
!   public void setVisible(boolean v)
!   {
!     visible = v;
!     repaint();
!   }
! 
!   protected Highlighter.HighlightPainter getSelectionPainter()
!   {
!     return DefaultHighlighter.DefaultPainter;
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/DefaultEditorKit.java gcc-4.0.0/libjava/javax/swing/text/DefaultEditorKit.java
*** gcc-3.4.3/libjava/javax/swing/text/DefaultEditorKit.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/DefaultEditorKit.java	Wed Feb 16 20:03:09 2005
***************
*** 1,5 ****
! /* DefaultEditorKit.java -- 
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* DefaultEditorKit.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,51 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.text;
  
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.io.Reader;
  import java.io.Writer;
  import javax.swing.Action;
- import javax.swing.JEditorPane;
  
  public class DefaultEditorKit extends EditorKit
  {
    public static final String backwardAction = "caret-backward";
    public static final String beepAction = "beep";
    public static final String beginAction = "caret-begin";
--- 35,178 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.text;
  
+ import java.awt.Toolkit;
+ import java.awt.event.ActionEvent;
+ 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.Reader;
  import java.io.Writer;
+ 
  import javax.swing.Action;
  
  public class DefaultEditorKit extends EditorKit
  {
+   public static class BeepAction
+     extends TextAction
+   {
+     public BeepAction()
+     {
+       super(beepAction);
+     }
+ 
+     public void actionPerformed(ActionEvent event)
+     {
+       Toolkit.getDefaultToolkit().beep();
+     }
+   }
+ 
+   public static class CopyAction 
+     extends TextAction
+   {
+     public CopyAction()
+     {
+       super(copyAction);
+     }
+     public void actionPerformed(ActionEvent event)
+     {
+     }
+   }
+ 
+   public static class CutAction 
+     extends TextAction
+   {
+     public CutAction()
+     {
+       super(cutAction);
+     }
+ 
+     public void actionPerformed(ActionEvent event)
+     {
+     }
+   }
+ 
+   public static class DefaultKeyTypedAction 
+     extends TextAction
+   {
+     public DefaultKeyTypedAction()
+     {
+       super(defaultKeyTypedAction);
+     }
+ 
+     public void actionPerformed(ActionEvent event)
+     {
+       JTextComponent t = getTextComponent(event);
+       if (t != null)
+         {
+           try
+             {
+               t.getDocument().insertString(t.getCaret().getDot(), event.getActionCommand(), null);
+               t.getCaret().setDot(Math.min(t.getCaret().getDot() + 1,
+                                            t.getDocument().getEndPosition().getOffset()));
+               t.repaint();
+             }
+           catch (BadLocationException be)
+             {
+               // FIXME: we're not authorized to throw this.. swallow it?
+             }
+         }
+     }
+   }
+ 
+   public static class InsertBreakAction 
+     extends TextAction
+   {
+     public InsertBreakAction()
+     {
+       super(insertBreakAction);
+     }
+ 
+     public void actionPerformed(ActionEvent event)
+     {
+     }
+   }
+ 
+   public static class InsertContentAction 
+     extends TextAction
+   {
+     public InsertContentAction()
+     {
+       super(insertContentAction);
+     }
+     public void actionPerformed(ActionEvent event)
+     {
+     }
+   }
+ 
+   public static class InsertTabAction 
+     extends TextAction
+   {
+     public InsertTabAction()
+     {
+       super(insertTabAction);
+     }
+ 
+     public void actionPerformed(ActionEvent event)
+     {
+     }
+   }
+ 
+   public static class PasteAction 
+     extends TextAction
+   {
+     public PasteAction()
+     {
+       super(pasteAction);
+     }
+ 
+     public void actionPerformed(ActionEvent event)
+     {
+     }
+   }
+ 
+   private static final long serialVersionUID = 9017245433028523428L;
+   
    public static final String backwardAction = "caret-backward";
    public static final String beepAction = "beep";
    public static final String beginAction = "caret-begin";
*************** public class DefaultEditorKit extends Ed
*** 60,66 ****
    public static final String downAction = "caret-down";
    public static final String endAction = "caret-end";
    public static final String endLineAction = "caret-end-line";
!   public static final String endOfLineStringProperty = "__EndOfLine__";
    public static final String endParagraphAction = "caret-end-paragraph";
    public static final String endWordAction = "caret-end-word";
    public static final String forwardAction = "caret-forward";
--- 187,193 ----
    public static final String downAction = "caret-down";
    public static final String endAction = "caret-end";
    public static final String endLineAction = "caret-end-line";
!   public static final String EndOfLineStringProperty = "__EndOfLine__";
    public static final String endParagraphAction = "caret-end-paragraph";
    public static final String endWordAction = "caret-end-word";
    public static final String forwardAction = "caret-forward";
*************** public class DefaultEditorKit extends Ed
*** 77,92 ****
    public static final String selectionBackwardAction = "selection-backward";
    public static final String selectionBeginAction = "selection-begin";
    public static final String selectionBeginLineAction = "selection-begin-line";
!   public static final String selectionBeginParagraphAction = "selection-begin-paragraph";
    public static final String selectionBeginWordAction = "selection-begin-word";
    public static final String selectionDownAction = "selection-down";
    public static final String selectionEndAction = "selection-end";
    public static final String selectionEndLineAction = "selection-end-line";
!   public static final String selectionEndParagraphAction = "selection-end-paragraph";
    public static final String selectionEndWordAction = "selection-end-word";
    public static final String selectionForwardAction = "selection-forward";
    public static final String selectionNextWordAction = "selection-next-word";
!   public static final String selectionPreviousWordAction = "selection-previous-word";
    public static final String selectionUpAction = "selection-up";
    public static final String selectLineAction = "select-line";
    public static final String selectParagraphAction = "select-paragraph";
--- 204,222 ----
    public static final String selectionBackwardAction = "selection-backward";
    public static final String selectionBeginAction = "selection-begin";
    public static final String selectionBeginLineAction = "selection-begin-line";
!   public static final String selectionBeginParagraphAction =
!     "selection-begin-paragraph";
    public static final String selectionBeginWordAction = "selection-begin-word";
    public static final String selectionDownAction = "selection-down";
    public static final String selectionEndAction = "selection-end";
    public static final String selectionEndLineAction = "selection-end-line";
!   public static final String selectionEndParagraphAction =
!     "selection-end-paragraph";
    public static final String selectionEndWordAction = "selection-end-word";
    public static final String selectionForwardAction = "selection-forward";
    public static final String selectionNextWordAction = "selection-next-word";
!   public static final String selectionPreviousWordAction =
!     "selection-previous-word";
    public static final String selectionUpAction = "selection-up";
    public static final String selectLineAction = "select-line";
    public static final String selectParagraphAction = "select-paragraph";
*************** public class DefaultEditorKit extends Ed
*** 94,141 ****
    public static final String upAction = "caret-up";
    public static final String writableAction = "set-writable";
  
!     void deinstall(JEditorPane c)
!     {
! 	//      Called when the kit is being removed from the JEditorPane. 
!     }
!     void install(JEditorPane c)
!     {
!     }
  
!     Caret createCaret()
      {
! 	return null;
!     }
!     Document createDefaultDocument()
      {
!         return new PlainDocument();
!     }
  
!     Action[] getActions()
!     {
! 	return null;
!     }
  
!     String getContentType()
!     {
! 	return "text/plain";
!     }
      
!     ViewFactory getViewFactory()
!     {
! 	return null;
!     }
!     void read(InputStream in, Document doc, int pos)
!     {
!     }
!     void read(Reader in, Document doc, int pos)
!     {
!     }
!     void write(OutputStream out, Document doc, int pos, int len)
!     {
!     }
!     void write(Writer out, Document doc, int pos, int len)
!     {
!     }
! }
  
--- 224,397 ----
    public static final String upAction = "caret-up";
    public static final String writableAction = "set-writable";
  
!   public DefaultEditorKit()
!   {
!   }
  
!   private static Action[] defaultActions = 
!   new Action[] {
!     new BeepAction(),
!     new CopyAction(),
!     new CutAction(),
!     new DefaultKeyTypedAction(),
!     new InsertBreakAction(),
!     new InsertContentAction(),
!     new InsertTabAction(),
!     new PasteAction(),
!     new TextAction(deleteNextCharAction) 
!     { 
!       public void actionPerformed(ActionEvent event)
!       {
!         JTextComponent t = getTextComponent(event);
!         if (t != null)
!           {
!             try
!               {
!                 int pos = t.getCaret().getDot();
!                 if (pos < t.getDocument().getEndPosition().getOffset())
!                   {
!                     t.getDocument().remove(t.getCaret().getDot(), 1);
!                     t.repaint();
!                   }
!               }
!             catch (BadLocationException e)
!               {
!                 // FIXME: we're not authorized to throw this.. swallow it?
!               }
!           }
!       }
!     },
!     new TextAction(deletePrevCharAction) 
!     { 
!       public void actionPerformed(ActionEvent event)
!       {
!         JTextComponent t = getTextComponent(event);
!         if (t != null)
!           {
!             try
!               {
!                 int pos = t.getCaret().getDot();
!                 if (pos > t.getDocument().getStartPosition().getOffset())
!                   {
!                     t.getDocument().remove(pos - 1, 1);
!                     t.getCaret().setDot(pos - 1);
!                     t.repaint();
!                   }
!               }
!             catch (BadLocationException e)
!               {
!                 // FIXME: we're not authorized to throw this.. swallow it?
!               }
!           }
!       }
!     },
!     new TextAction(backwardAction) 
!     { 
!       public void actionPerformed(ActionEvent event)
!       {
!         JTextComponent t = getTextComponent(event);
!         if (t != null)
!           {
!             t.getCaret().setDot(Math.max(t.getCaret().getDot() - 1,
!                                          t.getDocument().getStartPosition().getOffset()));
!           }
!       }
!     },
!     new TextAction(forwardAction) 
!     { 
!       public void actionPerformed(ActionEvent event)
!       {
!         JTextComponent t = getTextComponent(event);
!         if (t != null)
!           {
!             t.getCaret().setDot(Math.min(t.getCaret().getDot() + 1,
!                                          t.getDocument().getEndPosition().getOffset()));
!           }
!       }
!     },
!     new TextAction(selectionBackwardAction)
      {
!       public void actionPerformed(ActionEvent event)
!       {
! 	JTextComponent t = getTextComponent(event);
! 	if (t != null)
! 	  {
! 	    t.getCaret().moveDot(Math.max(t.getCaret().getDot() - 1,
! 					  t.getDocument().getStartPosition().getOffset()));
! 	  }
!       }
!     },
!     new TextAction(selectionForwardAction)
      {
!       public void actionPerformed(ActionEvent event)
!       {
!         JTextComponent t = getTextComponent(event);
!         if (t != null)
!           {
!             t.getCaret().moveDot(Math.min(t.getCaret().getDot() + 1,
!                                           t.getDocument().getEndPosition().getOffset()));
!           }
!       }
!     },
!   };
  
!   public Caret createCaret()
!   {
!     return new DefaultCaret();
!   }
  
!   public Document createDefaultDocument()
!   {
!     return new PlainDocument();
!   }
      
!   public Action[] getActions()
!   {
!     return defaultActions;
!   }
! 
!   public String getContentType()
!   {
!     return "text/plain";
!   }
!   
!   public ViewFactory getViewFactory()
!   {
!     return null;
!   }
! 
!   public void read(InputStream in, Document document, int offset)
!     throws BadLocationException, IOException
!   {
!     read(new InputStreamReader(in), document, offset);
!   }
! 
!   public void read(Reader in, Document document, int offset)
!     throws BadLocationException, IOException
!   {
!     BufferedReader reader = new BufferedReader(in);
! 
!     String line;
!     StringBuffer content = new StringBuffer();
  
+     while ((line = reader.readLine()) != null)
+       {
+ 	content.append(line);
+ 	content.append("\n");
+       }
+     
+     document.insertString(offset, content.toString(),
+ 			  SimpleAttributeSet.EMPTY);
+   }
+ 
+   public void write(OutputStream out, Document document, int offset, int len)
+     throws BadLocationException, IOException
+   {
+     write(new OutputStreamWriter(out), document, offset, len);
+   }
+ 
+   public void write(Writer out, Document document, int offset, int len)
+     throws BadLocationException, IOException
+   {
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/DefaultHighlighter.java gcc-4.0.0/libjava/javax/swing/text/DefaultHighlighter.java
*** gcc-3.4.3/libjava/javax/swing/text/DefaultHighlighter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/DefaultHighlighter.java	Tue Nov 30 23:59:07 2004
***************
*** 0 ****
--- 1,257 ----
+ /* DefaultHighlighter.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.Color;
+ import java.awt.Graphics;
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ import java.util.Vector;
+ 
+ public class DefaultHighlighter extends LayeredHighlighter
+ {
+   public static class DefaultHighlightPainter
+     extends LayerPainter
+   {
+     private Color color;
+     
+     public DefaultHighlightPainter(Color c)
+     {
+       super();
+       color = c;
+     }
+ 
+     public Color getColor()
+     {
+       return color;
+     }
+ 
+     private void paintHighlight(Graphics g, Rectangle rect)
+     {
+       g.fillRect(rect.x, rect.y, rect.width, rect.height);
+     }
+     
+     public void paint(Graphics g, int p0, int p1, Shape bounds,
+ 		      JTextComponent c)
+     {
+       Rectangle r0 = null;
+       Rectangle r1 = null;
+       Rectangle rect = bounds.getBounds();
+       
+       try
+ 	{
+ 	  r0 = c.modelToView(p0);
+ 	  r1 = c.modelToView(p1);
+ 	}
+       catch (BadLocationException e)
+         {
+ 	  // This should never occur.
+           return;
+ 	}
+ 
+       if (r0 == null || r1 == null)
+ 	return;
+ 
+       if (color == null)
+ 	g.setColor(c.getSelectionColor());
+       else
+ 	g.setColor(color);
+ 
+       // Check if only one line to highlight.
+       if (r0.y == r1.y)
+ 	{
+ 	  r0.width = r1.x - r0.x;
+ 	  paintHighlight(g, r0);
+ 	  return;
+ 	}
+ 
+       // First line, from p0 to end-of-line.
+       r0.width = rect.x + rect.width - r0.x;
+       paintHighlight(g, r0);
+       
+       // FIXME: All the full lines in between, if any (assumes that all lines
+       // have the same height -- not a good assumption with JEditorPane/JTextPane).
+       r0.y += r0.height;
+       r0.x = rect.x;
+ 
+       while (r0.y < r1.y)
+ 	{
+ 	  paintHighlight(g, r0);
+ 	  r0.y += r0.height;
+ 	}
+ 
+       // Last line, from beginnin-of-line to p1.
+       paintHighlight(g, r1);
+     }
+ 
+     public Shape paintLayer(Graphics g, int p0, int p1, Shape bounds,
+ 			    JTextComponent c, View view)
+     {
+       throw new InternalError();
+     }
+   }
+   
+   private class HighlightEntry
+   {
+     int p0;
+     int p1;
+     Highlighter.HighlightPainter painter;
+ 
+     public HighlightEntry(int p0, int p1, Highlighter.HighlightPainter painter)
+     {
+       this.p0 = p0;
+       this.p1 = p1;
+       this.painter = painter;
+     }
+ 
+     public int getStartPosition()
+     {
+       return p0;
+     }
+ 
+     public int getEndPosition()
+     {
+       return p1;
+     }
+ 
+     public Highlighter.HighlightPainter getPainter()
+     {
+       return painter;
+     }
+   }
+ 
+   /**
+    * @specnote final as of 1.4
+    */
+   public static final LayeredHighlighter.LayerPainter DefaultPainter =
+     new DefaultHighlightPainter(null);
+   
+   private JTextComponent textComponent;
+   private Vector highlights = new Vector();
+   private boolean drawsLayeredHighlights = true;
+   
+   public DefaultHighlighter()
+   {
+   }
+ 
+   public boolean getDrawsLayeredHighlights()
+   {
+     return drawsLayeredHighlights;
+   }
+ 
+   public void setDrawsLayeredHighlights(boolean newValue)
+   {
+     drawsLayeredHighlights = newValue;
+   }
+   
+   private void checkPositions(int p0, int p1)
+     throws BadLocationException
+   {
+     if (p0 < 0)
+       throw new BadLocationException("DefaultHighlighter", p0);
+     
+     if (p1 < p0)
+       throw new BadLocationException("DefaultHighlighter", p1);
+   }
+ 
+   public void install(JTextComponent c)
+   {
+     textComponent = c;
+     removeAllHighlights();
+   }
+ 
+   public void deinstall(JTextComponent c)
+   {
+     textComponent = null;
+   }
+ 
+   public Object addHighlight(int p0, int p1, Highlighter.HighlightPainter painter)
+     throws BadLocationException
+   {
+     checkPositions(p0, p1);
+     HighlightEntry entry = new HighlightEntry(p0, p1, painter);
+     highlights.add(entry);
+     return entry;
+   }
+ 
+   public void removeHighlight(Object tag)
+   {
+     highlights.remove(tag);
+   }
+ 
+   public void removeAllHighlights()
+   {
+     highlights.clear();
+   }
+ 
+   public Highlighter.Highlight[] getHighlights()
+   {
+     return null;
+   }
+ 
+   public void changeHighlight(Object tag, int p0, int p1)
+     throws BadLocationException
+   {
+     checkPositions(p0, p1);
+     HighlightEntry entry = (HighlightEntry) tag;
+     entry.p0 = p0;
+     entry.p1 = p1;
+   }
+ 
+   public void paintLayeredHighlights(Graphics g, int p0, int p1,
+                                      Shape viewBounds, JTextComponent editor,
+                                      View view)
+   {
+   }
+ 
+   public void paint(Graphics g)
+   {
+     // Check if there are any highlights.
+     if (highlights.size() == 0)
+       return;
+     
+     Shape bounds = textComponent.getBounds();
+     
+     for (int index = 0; index < highlights.size(); ++index)
+       {
+ 	HighlightEntry entry = (HighlightEntry) highlights.get(index);
+ 	entry.painter.paint(g, entry.p0, entry.p1, bounds, textComponent);
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/DefaultStyledDocument.java gcc-4.0.0/libjava/javax/swing/text/DefaultStyledDocument.java
*** gcc-3.4.3/libjava/javax/swing/text/DefaultStyledDocument.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/DefaultStyledDocument.java	Wed Feb 16 20:03:10 2005
***************
*** 0 ****
--- 1,195 ----
+ /* DefaultStyledDocument.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.Color;
+ import java.awt.Font;
+ import java.io.Serializable;
+ 
+ /**
+  * @author Michael Koch (konqueror@gmx.de)
+  */
+ public class DefaultStyledDocument extends AbstractDocument
+   implements StyledDocument
+ {
+   public class ElementBuffer
+     implements Serializable
+   {
+     private Element root;
+     
+     public ElementBuffer(Element root)
+     {
+       this.root = root;
+     }
+ 
+     public Element getRootElement()
+     {
+       return root;
+     }
+   }
+   
+   public static final int BUFFER_SIZE_DEFAULT = 4096;
+ 
+   protected DefaultStyledDocument.ElementBuffer buffer;
+   
+   public DefaultStyledDocument()
+   {
+     this(new GapContent(BUFFER_SIZE_DEFAULT), new StyleContext());
+   }
+ 
+   public DefaultStyledDocument(StyleContext context)
+   {
+     this(new GapContent(BUFFER_SIZE_DEFAULT), context);
+   }
+ 
+   public DefaultStyledDocument(AbstractDocument.Content content,
+ 			       StyleContext context)
+   {
+     super(content, context);
+     buffer = new ElementBuffer(createDefaultRoot());
+     setLogicalStyle(0, context.getStyle(StyleContext.DEFAULT_STYLE));
+   }
+ 
+   public Style addStyle(String nm, Style parent)
+   {
+     StyleContext context = (StyleContext) getAttributeContext();
+     return context.addStyle(nm, parent);
+   }
+   
+   protected AbstractDocument.AbstractElement createDefaultRoot()
+   {
+     Element[] tmp;
+     BranchElement section = new BranchElement(null, null);
+     
+     BranchElement paragraph = new BranchElement(section, null);
+     tmp = new Element[1];
+     tmp[0] = paragraph;
+     section.replace(0, 0, tmp);
+ 
+     LeafElement leaf = new LeafElement(paragraph, null, 0, 1);
+     tmp = new Element[1];
+     tmp[0] = leaf;
+     paragraph.replace(0, 0, tmp);
+     
+     return section;
+   }
+   
+   public Element getCharacterElement(int position)
+   {
+     Element element = getDefaultRootElement();
+ 
+     while (! element.isLeaf())
+       {
+ 	int index = element.getElementIndex(position);
+ 	element = element.getElement(index);
+       }
+     
+     return element;
+   }
+   
+   public Color getBackground(AttributeSet attributes)
+   {
+     StyleContext context = (StyleContext) getAttributeContext();
+     return context.getBackground(attributes);
+   }
+   
+   public Element getDefaultRootElement()
+   {
+     return buffer.getRootElement();
+   }
+   
+   public Font getFont(AttributeSet attributes)
+   {
+     StyleContext context = (StyleContext) getAttributeContext();
+     return context.getFont(attributes);
+   }
+   
+   public Color getForeground(AttributeSet attributes)
+   {
+     StyleContext context = (StyleContext) getAttributeContext();
+     return context.getForeground(attributes);
+   }
+   
+   public Style getLogicalStyle(int position)
+   {
+     Element paragraph = getParagraphElement(position);
+     AttributeSet attributes = paragraph.getAttributes();
+     return (Style) attributes.getResolveParent();
+   }
+   
+   public Element getParagraphElement(int position)
+   {
+     Element element = getCharacterElement(position);
+     return element.getParentElement();
+   }
+ 
+   public Style getStyle(String nm)
+   {
+     StyleContext context = (StyleContext) getAttributeContext();
+     return context.getStyle(nm);
+   }
+ 
+   public void removeStyle(String nm)
+   {
+     StyleContext context = (StyleContext) getAttributeContext();
+     context.removeStyle(nm);
+   }
+ 
+   public void setCharacterAttributes(int offset, int length,
+ 				     AttributeSet attributes,
+ 				     boolean replace)
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+   
+   public void setLogicalStyle(int position, Style style)
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ 
+   public void setParagraphAttributes(int offset, int length,
+ 				     AttributeSet attributes,
+ 				     boolean replace)
+   {
+     // FIXME: Implement me.
+     throw new Error("not implemented");
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/Document.java gcc-4.0.0/libjava/javax/swing/text/Document.java
*** gcc-3.4.3/libjava/javax/swing/text/Document.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/Document.java	Tue Nov 30 23:59:07 2004
***************
*** 1,4 ****
! /* Document.java -- 
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* Document.java --
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** package javax.swing.text;
*** 40,66 ****
  import javax.swing.event.DocumentListener;
  import javax.swing.event.UndoableEditListener;
  
  public interface Document
! { 
    String StreamDescriptionProperty = "stream";
!   
!   String TitleProperty = "text";
  
    void addDocumentListener(DocumentListener listener);
    void addUndoableEditListener(UndoableEditListener listener);
!   Position createPosition(int offs);
    Element getDefaultRootElement();
    Position getEndPosition();
    int getLength();
    Object getProperty(Object key);
    Element[] getRootElements();
    Position getStartPosition();
!   String getText(int offset, int length);
!   void getText(int offset, int length, Segment txt);
!   void insertString(int offset, String str, AttributeSet a);
    void putProperty(Object key, Object value);
!   void remove(int offs, int len);
    void removeDocumentListener(DocumentListener listener);
    void removeUndoableEditListener(UndoableEditListener listener);
    void render(Runnable r);
  }
--- 40,87 ----
  import javax.swing.event.DocumentListener;
  import javax.swing.event.UndoableEditListener;
  
+ 
  public interface Document
! {
    String StreamDescriptionProperty = "stream";
!   String TitleProperty = "title";
  
    void addDocumentListener(DocumentListener listener);
+ 
    void addUndoableEditListener(UndoableEditListener listener);
! 
!   Position createPosition(int offs)
!     throws BadLocationException;
! 
    Element getDefaultRootElement();
+ 
    Position getEndPosition();
+ 
    int getLength();
+ 
    Object getProperty(Object key);
+ 
    Element[] getRootElements();
+ 
    Position getStartPosition();
! 
!   String getText(int offset, int length)
!     throws BadLocationException;
! 
!   void getText(int offset, int length, Segment txt)
!     throws BadLocationException;
! 
!   void insertString(int offset, String str, AttributeSet a)
!     throws BadLocationException;
! 
    void putProperty(Object key, Object value);
! 
!   void remove(int offs, int len)
!     throws BadLocationException;
! 
    void removeDocumentListener(DocumentListener listener);
+ 
    void removeUndoableEditListener(UndoableEditListener listener);
+ 
    void render(Runnable r);
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/DocumentFilter.java gcc-4.0.0/libjava/javax/swing/text/DocumentFilter.java
*** gcc-3.4.3/libjava/javax/swing/text/DocumentFilter.java	Mon Mar 17 09:09:39 2003
--- gcc-4.0.0/libjava/javax/swing/text/DocumentFilter.java	Tue Nov 30 23:59:07 2004
***************
*** 1,5 ****
  /* DocumentFilter.java --
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DocumentFilter.java --
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.text;
*** 40,43 ****
--- 40,83 ----
  
  public class DocumentFilter
  {
+   public abstract static class FilterBypass
+   {
+     public FilterBypass()
+     {
+       // Do nothing here.
+     }
+ 
+     public abstract Document getDocument();
+     
+     public abstract void insertString(int offset, String string,
+ 				      AttributeSet attr)
+       throws BadLocationException;
+     
+     public abstract void remove(int offset, int length)
+       throws BadLocationException;
+     
+     public abstract void replace(int offset, int length, String string,
+ 				 AttributeSet attrs)
+       throws BadLocationException;
+   }
+   
+   public void insertString(DocumentFilter.FilterBypass fb, int offset,
+ 			   String string, AttributeSet attr)
+     throws BadLocationException
+   {
+     fb.insertString(offset, string, attr);
+   }
+ 
+   public void remove(DocumentFilter.FilterBypass fb, int offset, int length)
+     throws BadLocationException
+   {
+     fb.remove(offset, length);
+   }
+ 
+   public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
+ 		      String text, AttributeSet attr)
+     throws BadLocationException
+   {
+     fb.replace(offset, length, text, attr);
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/EditorKit.java gcc-4.0.0/libjava/javax/swing/text/EditorKit.java
*** gcc-3.4.3/libjava/javax/swing/text/EditorKit.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/EditorKit.java	Wed Feb 16 20:03:10 2005
***************
*** 1,4 ****
! /* EditorKit.java -- 
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* EditorKit.java --
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** this exception to your version of the li
*** 35,75 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.text;
  
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.io.Reader;
  import java.io.Writer;
  import javax.swing.Action;
  import javax.swing.JEditorPane;
  
! public abstract class EditorKit implements Cloneable
  {
!     EditorKit()
!     {
!     }
  
!     EditorKit(EditorKit kit)
!     {
!     }
  
!     void deinstall(JEditorPane c)
!     {
! 	//      Called when the kit is being removed from the JEditorPane. 
!     }
!     void install(JEditorPane c)
!     {
!     }
  
!     abstract  Caret createCaret();
!     abstract  Document createDefaultDocument();
!     abstract  Action[] getActions();
!     abstract  String getContentType();
!     abstract  ViewFactory getViewFactory();
!     abstract  void read(InputStream in, Document doc, int pos);
!     abstract  void read(Reader in, Document doc, int pos);
!     abstract  void write(OutputStream out, Document doc, int pos, int len);
!     abstract  void write(Writer out, Document doc, int pos, int len);    
! }
  
--- 35,96 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.text;
  
+ import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.io.Reader;
+ import java.io.Serializable;
  import java.io.Writer;
+ 
  import javax.swing.Action;
  import javax.swing.JEditorPane;
  
! public abstract class EditorKit
!   implements Cloneable, Serializable
  {
!   private static final long serialVersionUID = -5044124649345887822L;
!   
!   public EditorKit()
!   {
!   }
  
!   public Object clone()
!   {
!     try
!       {
! 	return super.clone();
!       }
!     catch (CloneNotSupportedException e)
!       {
! 	return null;
!       }
!   }
  
!   /**
!    * Called when the kit is being removed from the JEditorPane.
!    */
!   public void deinstall(JEditorPane c)
!   {
!   }
  
!   public void install(JEditorPane c)
!   {
!   }
  
+   public abstract Caret createCaret();
+   public abstract Document createDefaultDocument();
+   public abstract Action[] getActions();
+   public abstract String getContentType();
+   public abstract ViewFactory getViewFactory();
+   public abstract void read(InputStream in, Document doc, int pos)
+     throws BadLocationException, IOException;
+   public abstract void read(Reader in, Document doc, int pos)
+     throws BadLocationException, IOException;
+   public abstract void write(OutputStream out, Document doc, int pos, int len)
+     throws BadLocationException, IOException;
+   public abstract void write(Writer out, Document doc, int pos, int len)
+     throws BadLocationException, IOException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/FieldView.java gcc-4.0.0/libjava/javax/swing/text/FieldView.java
*** gcc-3.4.3/libjava/javax/swing/text/FieldView.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/FieldView.java	Tue Nov 30 23:59:08 2004
***************
*** 0 ****
--- 1,101 ----
+ /* FieldView.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.Component;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Shape;
+ 
+ public class FieldView extends PlainView
+ {
+   public FieldView(Element elem)
+   {
+     super(elem);
+   }
+ 
+   protected FontMetrics getFontMetrics()
+   {
+     Component container = getContainer();
+     return container.getFontMetrics(container.getFont());
+   }
+ 
+   public float getPreferredSpan(int axis)
+   {
+     if (axis != X_AXIS && axis != Y_AXIS)
+       throw new IllegalArgumentException();
+ 
+     FontMetrics fm = getFontMetrics();
+ 
+     if (axis == Y_AXIS)
+       return fm.getHeight();
+ 
+     String text;
+     Element elem = getElement();
+ 
+     try
+       {
+ 	text = elem.getDocument().getText(elem.getStartOffset(),
+ 					  elem.getEndOffset());
+       }
+     catch (BadLocationException e)
+       {
+ 	// This should never happen.
+ 	text = "";
+       }
+     
+     return fm.stringWidth(text);
+   }
+ 
+   public int getResizeWeight(int axis)
+   {
+     return axis = axis == X_AXIS ? 1 : 0;
+   }
+   
+   public Shape modelToView(int pos, Shape a, Position.Bias bias)
+     throws BadLocationException
+   {
+     return super.modelToView(pos, a, bias);
+   }
+   
+   public void paint(Graphics g, Shape s)
+   {
+     super.paint(g, s);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/GapContent.java gcc-4.0.0/libjava/javax/swing/text/GapContent.java
*** gcc-3.4.3/libjava/javax/swing/text/GapContent.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/GapContent.java	Wed Feb 16 20:03:11 2005
***************
*** 1,4 ****
! /* GapContent.java -- 
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* GapContent.java --
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** this exception to your version of the li
*** 35,103 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
! package javax.swing.text; 
  
  // too lazy to make a real gapcontent.
  // lets just use a stringbuffer instead.
- 
  import javax.swing.undo.UndoableEdit;
  
! public class GapContent implements AbstractDocument.Content
  {
!     StringBuffer buf = new StringBuffer();
! 
!     public GapContent()
!     {
! 	this(10);
!     }
      
!     public GapContent(int size)
!     {
!     }
  
!     public Position createPosition(final int offset) throws BadLocationException
!     {
! 	return new Position()
! 	    {
! 		int off = offset;
! 		public int getOffset()
! 		{
! 		    return off;
! 		}
! 	    };
!     }
  
!     public int length()
!     {
! 	return buf.length();
!     }
  
!     public UndoableEdit insertString(int where, String str) throws BadLocationException
!     {
! 	buf.insert(where, str);
! 	return null;
!     }
  
!     public UndoableEdit remove(int where, int nitems) throws BadLocationException
!     {
! 	buf.delete(where, where + nitems);
! 	return null;
!     }
  
!     public String getString(int where, int len) throws BadLocationException
!     {
! 	return buf.toString();
!     }
  
!     public void getChars(int where, int len, Segment txt) throws BadLocationException
!     {
! 	txt.array = new char[len];
! 		
! 	System.arraycopy(buf.toString().toCharArray(), where, 
! 			 txt.array, 0,
! 			 len);
! 	
! 	txt.count  = len;
! 	txt.offset = 0;
!     }
  }
--- 35,111 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
! 
! package javax.swing.text;
! 
! import java.io.Serializable;
  
  // too lazy to make a real gapcontent.
  // lets just use a stringbuffer instead.
  import javax.swing.undo.UndoableEdit;
  
! public class GapContent
!   implements AbstractDocument.Content, Serializable
  {
!   private static final long serialVersionUID = 8374645204155842629L;
      
!   StringBuffer buf = new StringBuffer();
  
!   public GapContent()
!   {
!     this(10);
!   }
  
!   public GapContent(int size)
!   {
!     buf.append("\n");
!   }
  
!   public Position createPosition(final int offset) throws BadLocationException
!   {
!     return new Position()
!       {
! 	int off = offset;
  
! 	public int getOffset()
! 	{
! 	  return off;
! 	}
!       };
!   }
  
!   public int length()
!   {
!     return buf.length();
!   }
  
!   public UndoableEdit insertString(int where, String str)
!     throws BadLocationException
!   {
!     buf.insert(where, str);
!     return null;
!   }
! 
!   public UndoableEdit remove(int where, int nitems)
!     throws BadLocationException
!   {
!     buf.delete(where, where + nitems);
!     return null;
!   }
! 
!   public String getString(int where, int len) throws BadLocationException
!   {
!     return buf.substring(where, where+len);
!   }
! 
!   public void getChars(int where, int len, Segment txt)
!     throws BadLocationException
!   {
!     txt.array = new char[len];
! 
!     System.arraycopy(buf.toString().toCharArray(), where, txt.array, 0, len);
! 
!     txt.count = len;
!     txt.offset = 0;
!   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/Highlighter.java gcc-4.0.0/libjava/javax/swing/text/Highlighter.java
*** gcc-3.4.3/libjava/javax/swing/text/Highlighter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/Highlighter.java	Tue Nov 30 23:59:08 2004
***************
*** 0 ****
--- 1,79 ----
+ /* Highlighter.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.Graphics;
+ import java.awt.Shape;
+ 
+ 
+ public interface Highlighter
+ {
+   public interface Highlight
+   {
+     int getEndOffset();
+ 
+     int getStartOffset();
+ 
+     HighlightPainter getPainter();
+   }
+ 
+   public interface HighlightPainter
+   {
+     void paint(Graphics g, int p0, int p1, Shape bounds, JTextComponent c);
+   }
+   
+   void install(JTextComponent c);
+ 
+   void deinstall(JTextComponent c);
+ 
+   Object addHighlight(int p0, int p1, HighlightPainter p)
+     throws BadLocationException;
+ 
+   void removeAllHighlights();
+ 
+   void removeHighlight(Object tag);
+ 
+   void changeHighlight(Object tag, int p0, int p1)
+     throws BadLocationException;
+ 
+   Highlight[] getHighlights();
+ 
+   void paint(Graphics g);
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/JTextComponent.java gcc-4.0.0/libjava/javax/swing/text/JTextComponent.java
*** gcc-3.4.3/libjava/javax/swing/text/JTextComponent.java	Tue Jun 24 09:51:28 2003
--- gcc-4.0.0/libjava/javax/swing/text/JTextComponent.java	Thu Mar 31 15:35:25 2005
***************
*** 1,5 ****
! /* JTextComponent.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* JTextComponent.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,511 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.text;
  
  import java.awt.AWTEvent;
! import java.awt.Component;
  import java.awt.Dimension;
- import java.awt.Image;
  import java.awt.Insets;
- import java.awt.Rectangle;
  import java.awt.Point;
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.accessibility.AccessibleStateSet;
  import javax.accessibility.AccessibleText;
! import javax.swing.Icon;
  import javax.swing.JComponent;
  import javax.swing.KeyStroke;
  import javax.swing.Scrollable;
  import javax.swing.UIManager;
  import javax.swing.event.CaretEvent;
  import javax.swing.event.CaretListener;
  import javax.swing.event.DocumentEvent;
  import javax.swing.event.DocumentListener;
  import javax.swing.plaf.TextUI;
  
  public abstract class JTextComponent extends JComponent
    implements Scrollable, Accessible
  {
! //    public class AccessibleJTextComponent extends AccessibleJComponent
! //      implements AccessibleText, CaretListener, DocumentListener,
! //                 AccessibleAction, AccessibleEditableText
! //    {
! //    } // class AccessibleJTextComponent
! 
! 	/**
! 	 * AccessibleJTextComponent
! 	 */
! 	public class AccessibleJTextComponent extends AccessibleJComponent
! 		implements AccessibleText, CaretListener, DocumentListener {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * caretPos
! 		 */
! 		int caretPos;
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AccessibleJTextComponent
! 		 * @param component TODO
! 		 */
! 		public AccessibleJTextComponent(JTextComponent component) {
! 			super(component);
! 			// TODO
! 		} // AccessibleJTextComponent()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getCaretPosition
! 		 * @returns int
! 		 */
! 		public int getCaretPosition() {
! 			return 0; // TODO
! 		} // getCaretPosition()
! 
! 		/**
! 		 * getSelectedText
! 		 * @returns String
! 		 */
! 		public String getSelectedText() {
! 			return null; // TODO
! 		} // getSelectedText()
! 
! 		/**
! 		 * getSelectionStart
! 		 * @returns int
! 		 */
! 		public int getSelectionStart() {
! 			return 0; // TODO
! 		} // getSelectionStart()
  
! 		/**
! 		 * getSelectionEnd
! 		 * @returns int
! 		 */
! 		public int getSelectionEnd() {
! 			return 0; // TODO
! 		} // getSelectionEnd()
  
! 		/**
! 		 * caretUpdate
! 		 * @param value0 TODO
! 		 */
! 		public void caretUpdate(CaretEvent value0) {
! 			// TODO
! 		} // caretUpdate()
  
! 		/**
! 		 * getAccessibleStateSet
! 		 * @returns AccessibleStateSet
! 		 */
! 		public AccessibleStateSet getAccessibleStateSet() {
! 			return null; // TODO
! 		} // getAccessibleStateSet()
  
! 		/**
! 		 * getAccessibleRole
! 		 * @returns AccessibleRole
! 		 */
! 		public AccessibleRole getAccessibleRole() {
! 			return null; // TODO
! 		} // getAccessibleRole()
  
! 		/**
! 		 * getAccessibleText
! 		 * @returns AccessibleText
! 		 */
! 		public AccessibleText getAccessibleText() {
! 			return null; // TODO
! 		} // getAccessibleText()
  
! 		/**
! 		 * insertUpdate
! 		 * @param value0 TODO
! 		 */
! 		public void insertUpdate(DocumentEvent value0) {
! 			// TODO
! 		} // insertUpdate()
  
! 		/**
! 		 * removeUpdate
! 		 * @param value0 TODO
! 		 */
! 		public void removeUpdate(DocumentEvent value0) {
! 			// TODO
! 		} // removeUpdate()
  
! 		/**
! 		 * changedUpdate
! 		 * @param value0 TODO
! 		 */
! 		public void changedUpdate(DocumentEvent value0) {
! 			// TODO
! 		} // changedUpdate()
  
! 		/**
! 		 * getIndexAtPoint
! 		 * @param value0 TODO
! 		 * @returns int
! 		 */
! 		public int getIndexAtPoint(Point value0) {
! 			return 0; // TODO
! 		} // getIndexAtPoint()
  
! 		/**
! 		 * getRootEditorRect
! 		 * @returns Rectangle
! 		 */
! 		Rectangle getRootEditorRect() {
! 			return null; // TODO
! 		} // getRootEditorRect()
  
! 		/**
! 		 * getCharacterBounds
! 		 * @param value0 TODO
! 		 * @returns Rectangle
! 		 */
! 		public Rectangle getCharacterBounds(int value0) {
! 			return null; // TODO
! 		} // getCharacterBounds()
  
! 		/**
! 		 * getCharCount
! 		 * @returns int
! 		 */
! 		public int getCharCount() {
! 			return 0; // TODO
! 		} // getCharCount()
  
! 		/**
! 		 * getCharacterAttribute
! 		 * @param value0 TODO
! 		 * @returns AttributeSet
! 		 */
! 		public AttributeSet getCharacterAttribute(int value0) {
! 			return null; // TODO
! 		} // getCharacterAttribute()
  
! 		/**
! 		 * getAtIndex
! 		 * @param value0 TODO
! 		 * @param value1 TODO
! 		 * @returns String
! 		 */
! 		public String getAtIndex(int value0, int value1) {
! 			return null; // TODO
! 		} // getAtIndex()
  
! 		/**
! 		 * getAfterIndex
! 		 * @param value0 TODO
! 		 * @param value1 TODO
! 		 * @returns String
! 		 */
! 		public String getAfterIndex(int value0, int value1) {
! 			return null; // TODO
! 		} // getAfterIndex()
  
! 		/**
! 		 * getBeforeIndex
! 		 * @param value0 TODO
! 		 * @param value1 TODO
! 		 * @returns String
! 		 */
! 		public String getBeforeIndex(int value0, int value1) {
! 			return null; // TODO
! 		} // getBeforeIndex()
  
  
! 	} // AccessibleJTextComponent
  
  
  
    public static class KeyBinding
    {
      public KeyStroke key;
      public String actionName;
      public KeyBinding(KeyStroke key, String actionName)
      {
        this.key = key;
        this.actionName = actionName;
      }
!   } // class KeyBinding
  
!   int icon_gap;
!     Icon icon;
!     int align;
!     Document doc;
  
!     public JTextComponent()
!     {
! 	this("", null, 0);
!     }
  
!     public JTextComponent(Icon image)
      {
! 	this("", image, 0);
      }
  
!     public JTextComponent(Icon image, int horizontalAlignment)
      {
! 	this("", image, horizontalAlignment);
      }
  
!     public JTextComponent(String text)
      {
! 	this(text, null, 0);
!     }
  
!     public JTextComponent(String text, int horizontalAlignment)
!     {
! 	this(text, null, horizontalAlignment);
      }
  
!     public JTextComponent(String text, Icon icon, int horizontalAlignment)
      {
! 	setDocument(new PlainDocument());
! 
! 	// do the work.....
! 	setText(text);
! 	this.icon  = icon;
! 	this.align     = horizontalAlignment;
! 	
!         // its an editor, so:
!         enableEvents(AWTEvent.KEY_EVENT_MASK);
!         updateUI();
      }
  
!     public void setDocument(Document s)
      {
! 	doc = s;
! 	revalidate();
! 	repaint();
      }
  
!     public Document getDocument()
!     {
! 	if (doc == null)
! 	    System.out.println("doc == null !!!");
! 	return doc;
!     }
  
!     protected  int checkHorizontalKey(int key, String message)
!     {
! 	//    Verify that key is a legal value for the horizontalAlignment properties. 
! 	return 0;
!     }
!     protected  int checkVerticalKey(int key, String message)
!     {
! 	//      Verify that key is a legal value for the verticalAlignment or verticalTextPosition properties.  
! 	return 0;
!     }
!     public AccessibleContext getAccessibleContext()
      {
! 	//          Get the AccessibleContext of this object 
! 	return null;
      }
!     public Icon getDisabledIcon()
      {
! 	return null;
      }
!     public int getDisplayedMnemonic()
      {
! 	//          Return the keycode that indicates a mnemonic key.   
! 	return 0;
      }
!     public int getHorizontalAlignment()
      {
! 	//          Returns the alignment of the label's contents along the X axis.   
! 	return 0;
      }
!     public int getHorizontalTextPosition()
      {
! 	//          Returns the horizontal position of the label's text, relative to its image.    
! 	return 0;
      }
  
!     public Icon getIcon()
!     {	return icon;    }
!     public int getIconTextGap()
!     {	return icon_gap;    }
  
  
!     Component getLabelFor()
      {
! 	//          Get the component this is labelling.  
! 	return null;
      }
  
!     public Insets getMargin()
      {
!         // FIXME: Not implemented.
!         return null;
      }
  
!     public void setText(String text)
!     {
! 	getDocument().remove(0,doc.getLength());
! 	getDocument().insertString(0, text, null);
!     }
!   
!     public String getText()
      {
! 	return getDocument().getText(0, 
! 				     getDocument().getLength());
      }
  
!     public String getUIClassID()
      {
! 	//          Returns a string that specifies the name of the l&f class that renders this component.  
! 	return "JTextComponent";
      }
!     public int getVerticalAlignment()
      {
! 	//          Returns the alignment of the label's contents along the Y axis. 
! 	return 0;
      }
!     public int getVerticalTextPosition()
      {
! 	//          Returns the vertical position of the label's text, relative to its image. 
! 	return 0;
      }
  
!     public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h)
      {
! 	//          This is overriden to return false if the current Icon's Image is not equal to the passed in Image img. 
! 	return (img == icon);
      }
!     protected  String paramString()
      {
! 	//          Returns a string representation of this JTextComponent.  
! 	return "JTextComponent";
      }
!     void setDisabledIcon(Icon disabledIcon)
      {
! 	//          Set the icon to be displayed if this JTextComponent is "disabled" (JTextComponent.setEnabled(false)).  
      }
!     void setDisplayedMnemonic(char aChar)
      {
! 	//          Specifies the displayedMnemonic as a char value.  
      }
!     void setDisplayedMnemonic(int key)
      {
! 	//          Specify a keycode that indicates a mnemonic key.  
      }
!     void setHorizontalAlignment(int alignment)
      {
! 	//          Sets the alignment of the label's contents along the X axis.  
      }
!     void setHorizontalTextPosition(int textPosition)
      {
! 	//          Sets the horizontal position of the label's text, relative to its image.  
      }
!     void setIcon(Icon icon)
      {
! 	//          Defines the icon this component will display.  
      }
!     public void setIconTextGap(int iconTextGap)
      {
! 	//          If both the icon and text properties are set, this property defines the space between them.  
      }
!   
!     public void setLabelFor(Component c)
      {
! 	//          Set the component this is labelling.  
      }
      
!     public void setVerticalAlignment(int alignment)
      {
! 	//          Sets the alignment of the label's contents along the Y axis.  
      }
!     public void setVerticalTextPosition(int textPosition)
      {
! 	//          Sets the vertical position of the label's text, relative to its image.  
!     }
  
!     public TextUI getUI()
!     {	return (TextUI) ui;
!     }
  
!     public void updateUI()
!     {
! 	TextUI b = (TextUI)UIManager.getUI(this);
! 	setUI(b);
      }
  
    public Dimension getPreferredScrollableViewportSize()
    {
      return null;
    }
    public int getScrollableUnitIncrement(Rectangle visible, int orientation,
                                          int direction)
    {
      return 0;
    }
    public int getScrollableBlockIncrement(Rectangle visible, int orientation,
                                           int direction)
    {
      return 0;
    }
- } // class JTextComponent
  
  
  
  
  
  
  
  
  
  
  
  
--- 35,1537 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.text;
  
  import java.awt.AWTEvent;
! import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.Insets;
  import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.awt.datatransfer.Clipboard;
+ import java.awt.datatransfer.DataFlavor;
+ import java.awt.datatransfer.StringSelection;
+ import java.awt.datatransfer.Transferable;
+ import java.awt.datatransfer.UnsupportedFlavorException;
+ import java.awt.event.ActionEvent;
+ import java.awt.event.InputMethodListener;
+ import java.awt.event.KeyEvent;
+ import java.io.IOException;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ 
  import javax.accessibility.Accessible;
  import javax.accessibility.AccessibleContext;
  import javax.accessibility.AccessibleRole;
  import javax.accessibility.AccessibleStateSet;
  import javax.accessibility.AccessibleText;
! import javax.swing.Action;
! import javax.swing.ActionMap;
! import javax.swing.InputMap;
  import javax.swing.JComponent;
+ import javax.swing.JViewport;
  import javax.swing.KeyStroke;
  import javax.swing.Scrollable;
+ import javax.swing.TransferHandler;
  import javax.swing.UIManager;
  import javax.swing.event.CaretEvent;
  import javax.swing.event.CaretListener;
  import javax.swing.event.DocumentEvent;
  import javax.swing.event.DocumentListener;
+ import javax.swing.plaf.ActionMapUIResource;
+ import javax.swing.plaf.InputMapUIResource;
  import javax.swing.plaf.TextUI;
  
  public abstract class JTextComponent extends JComponent
    implements Scrollable, Accessible
  {
!   /**
!    * AccessibleJTextComponent
!    */
!   public class AccessibleJTextComponent extends AccessibleJComponent
!     implements AccessibleText, CaretListener, DocumentListener
!   {
!     private static final long serialVersionUID = 7664188944091413696L;
  
!     /**
!      * Constructor AccessibleJTextComponent
!      * @param component TODO
!      */
!     public AccessibleJTextComponent()
!     {
!     }
  
!     /**
!      * getCaretPosition
!      * @return int
!      */
!     public int getCaretPosition()
!     {
!       return 0; // TODO
!     }
  
!     /**
!      * getSelectedText
!      * @return String
!      */
!     public String getSelectedText()
!     {
!       return null; // TODO
!     }
  
!     /**
!      * getSelectionStart
!      * @return int
!      */
!     public int getSelectionStart()
!     {
!       return 0; // TODO
!     }
  
!     /**
!      * getSelectionEnd
!      * @return int
!      */
!     public int getSelectionEnd()
!     {
!       return 0; // TODO
!     }
  
!     /**
!      * caretUpdate
!      * @param value0 TODO
!      */
!     public void caretUpdate(CaretEvent value0)
!     {
!       // TODO
!     }
  
!     /**
!      * getAccessibleStateSet
!      * @return AccessibleStateSet
!      */
!     public AccessibleStateSet getAccessibleStateSet()
!     {
!       return null; // TODO
!     }
  
!     /**
!      * getAccessibleRole
!      * @return AccessibleRole
!      */
!     public AccessibleRole getAccessibleRole()
!     {
!       return null; // TODO
!     }
  
!     /**
!      * getAccessibleText
!      * @return AccessibleText
!      */
!     public AccessibleText getAccessibleText()
!     {
!       return null; // TODO
!     }
  
!     /**
!      * insertUpdate
!      * @param value0 TODO
!      */
!     public void insertUpdate(DocumentEvent value0)
!     {
!       // TODO
!     }
  
!     /**
!      * removeUpdate
!      * @param value0 TODO
!      */
!     public void removeUpdate(DocumentEvent value0)
!     {
!       // TODO
!     }
  
!     /**
!      * changedUpdate
!      * @param value0 TODO
!      */
!     public void changedUpdate(DocumentEvent value0)
!     {
!       // TODO
!     }
  
!     /**
!      * getIndexAtPoint
!      * @param value0 TODO
!      * @return int
!      */
!     public int getIndexAtPoint(Point value0)
!     {
!       return 0; // TODO
!     }
  
!     /**
!      * getRootEditorRect
!      * @return Rectangle
!      */
!     Rectangle getRootEditorRect()
!     {
!       return null;
!     }
  
!     /**
!      * getCharacterBounds
!      * @param value0 TODO
!      * @return Rectangle
!      */
!     public Rectangle getCharacterBounds(int value0)
!     {
!       return null; // TODO
!     }
  
!     /**
!      * getCharCount
!      * @return int
!      */
!     public int getCharCount()
!     {
!       return 0; // TODO
!     }
  
+     /**
+      * getCharacterAttribute
+      * @param value0 TODO
+      * @return AttributeSet
+      */
+     public AttributeSet getCharacterAttribute(int value0)
+     {
+       return null; // TODO
+     }
  
!     /**
!      * getAtIndex
!      * @param value0 TODO
!      * @param value1 TODO
!      * @return String
!      */
!     public String getAtIndex(int value0, int value1)
!     {
!       return null; // TODO
!     }
  
+     /**
+      * getAfterIndex
+      * @param value0 TODO
+      * @param value1 TODO
+      * @return String
+      */
+     public String getAfterIndex(int value0, int value1)
+     {
+       return null; // TODO
+     }
  
+     /**
+      * getBeforeIndex
+      * @param value0 TODO
+      * @param value1 TODO
+      * @return String
+      */
+     public String getBeforeIndex(int value0, int value1)
+     {
+       return null; // TODO
+     }
+   }
  
    public static class KeyBinding
    {
      public KeyStroke key;
      public String actionName;
+ 
+     /**
+      * Creates a new <code>KeyBinding</code> instance.
+      *
+      * @param key a <code>KeyStroke</code> value
+      * @param actionName a <code>String</code> value
+      */
      public KeyBinding(KeyStroke key, String actionName)
      {
        this.key = key;
        this.actionName = actionName;
      }
!   }
  
!   /**
!    * According to <a
!    * href="http://java.sun.com/products/jfc/tsc/special_report/kestrel/keybindings.html">this
!    * report</a>, a pair of private classes wraps a {@link
!    * javax.swing.text.Keymap} in the new {@link InputMap} / {@link
!    * ActionMap} interfaces, such that old Keymap-using code can make use of
!    * the new framework.
!    *
!    * <p>A little bit of experimentation with these classes reveals the following
!    * structure:
!    *
!    * <ul>
!    *
!    * <li>KeymapWrapper extends {@link InputMap} and holds a reference to
!    * the underlying {@link Keymap}.</li>
!    *
!    * <li>KeymapWrapper maps {@link KeyStroke} objects to {@link Action}
!    * objects, by delegation to the underlying {@link Keymap}.</li>
!    *
!    * <li>KeymapActionMap extends {@link ActionMap} also holds a reference to
!    * the underlying {@link Keymap} but only appears to use it for listing 
!    * its keys. </li>
!    *
!    * <li>KeymapActionMap maps all {@link Action} objects to
!    * <em>themselves</em>, whether they exist in the underlying {@link
!    * Keymap} or not, and passes other objects to the parent {@link
!    * ActionMap} for resolving.
!    *
!    * </ul>
!    */
  
!   private class KeymapWrapper extends InputMap
!   {
!     Keymap map;
  
!     public KeymapWrapper(Keymap k)
      {
!       map = k;
      }
  
!     public int size()
      {
!       return map.getBoundKeyStrokes().length + super.size();
      }
  
!     public Object get(KeyStroke ks)
      {
!       Action mapped = null;
!       Keymap m = map;
!       while(mapped == null && m != null)
!         {
!           mapped = m.getAction(ks);
!           if (mapped == null && ks.getKeyEventType() == KeyEvent.KEY_TYPED)
!             mapped = m.getDefaultAction();
!           if (mapped == null)
!             m = m.getResolveParent();
!         }
  
!       if (mapped == null)
!         return super.get(ks);
!       else
!         return mapped;
      }
  
!     public KeyStroke[] keys()
      {
!       KeyStroke[] superKeys = super.keys();
!       KeyStroke[] mapKeys = map.getBoundKeyStrokes(); 
!       KeyStroke[] bothKeys = new KeyStroke[superKeys.length + mapKeys.length];
!       for (int i = 0; i < superKeys.length; ++i)
!         bothKeys[i] = superKeys[i];
!       for (int i = 0; i < mapKeys.length; ++i)
!         bothKeys[i + superKeys.length] = mapKeys[i];
!       return bothKeys;
      }
  
!     public KeyStroke[] allKeys()
      {
!       KeyStroke[] superKeys = super.allKeys();
!       KeyStroke[] mapKeys = map.getBoundKeyStrokes(); 
!       KeyStroke[] bothKeys = new KeyStroke[superKeys.length + mapKeys.length];
!       for (int i = 0; i < superKeys.length; ++i)
!         bothKeys[i] = superKeys[i];
!       for (int i = 0; i < mapKeys.length; ++i)
!         bothKeys[i + superKeys.length] = mapKeys[i];
!       return bothKeys;
      }
+   }
  
!   private class KeymapActionMap extends ActionMap
!   {
!     Keymap map;
  
!     public KeymapActionMap(Keymap k)
      {
!       map = k;
      }
! 
!     public Action get(Object cmd)
      {
!       if (cmd instanceof Action)
!         return (Action) cmd;
!       else
!         return super.get(cmd);
      }
! 
!     public int size()
      {
!       return map.getBoundKeyStrokes().length + super.size();
      }
! 
!     public Object[] keys() 
      {
!       Object[] superKeys = super.keys();
!       Object[] mapKeys = map.getBoundKeyStrokes(); 
!       Object[] bothKeys = new Object[superKeys.length + mapKeys.length];
!       for (int i = 0; i < superKeys.length; ++i)
!         bothKeys[i] = superKeys[i];
!       for (int i = 0; i < mapKeys.length; ++i)
!         bothKeys[i + superKeys.length] = mapKeys[i];
!       return bothKeys;      
      }
! 
!     public Object[] allKeys()
      {
!       Object[] superKeys = super.allKeys();
!       Object[] mapKeys = map.getBoundKeyStrokes(); 
!       Object[] bothKeys = new Object[superKeys.length + mapKeys.length];
!       for (int i = 0; i < superKeys.length; ++i)
!         bothKeys[i] = superKeys[i];
!       for (int i = 0; i < mapKeys.length; ++i)
!         bothKeys[i + superKeys.length] = mapKeys[i];
!       return bothKeys;
      }
  
!   }
  
+   static class DefaultKeymap implements Keymap
+   {
+     String name;
+     Keymap parent;
+     Hashtable map;
+     Action defaultAction;
  
!     public DefaultKeymap(String name)
      {
!       this.name = name;
!       this.map = new Hashtable();
      }
  
!     public void addActionForKeyStroke(KeyStroke key, Action a)
      {
!       map.put(key, a);
      }
  
!     /**
!      * Looks up a KeyStroke either in the current map or the parent Keymap;
!      * does <em>not</em> return the default action if lookup fails.
!      *
!      * @param key The KeyStroke to look up an Action for.
!      *
!      * @return The mapping for <code>key</code>, or <code>null</code>
!      * if no mapping exists in this Keymap or any of its parents.
!      */
!     public Action getAction(KeyStroke key)
      {
!       if (map.containsKey(key))
!         return (Action) map.get(key);
!       else if (parent != null)
!         return parent.getAction(key);
!       else
!         return null;
      }
  
!     public Action[] getBoundActions()
      {
!       Action [] ret = new Action[map.size()];
!       Enumeration e = map.elements();
!       int i = 0;
!       while (e.hasMoreElements())
!         {
!           ret[i++] = (Action) e.nextElement();
!         }
!       return ret;
      }
! 
!     public KeyStroke[] getBoundKeyStrokes()
      {
!       KeyStroke [] ret = new KeyStroke[map.size()];
!       Enumeration e = map.keys();
!       int i = 0;
!       while (e.hasMoreElements())
!         {
!           ret[i++] = (KeyStroke) e.nextElement();
!         }
!       return ret;
      }
! 
!     public Action getDefaultAction()
      {
!       return defaultAction;
      }
  
!     public KeyStroke[] getKeyStrokesForAction(Action a)
      {
!       int i = 0;
!       Enumeration e = map.keys();
!       while (e.hasMoreElements())
!         {
!           if (map.get(e.nextElement()).equals(a))
!             ++i;
!         }
!       KeyStroke [] ret = new KeyStroke[i];
!       i = 0;
!       e = map.keys();
!       while (e.hasMoreElements())
!         {          
!           KeyStroke k = (KeyStroke) e.nextElement();
!           if (map.get(k).equals(a))
!             ret[i++] = k;            
!         }
!       return ret;
      }
! 
!     public String getName()
      {
!       return name;
      }
! 
!     public Keymap getResolveParent()
      {
!       return parent;
      }
! 
!     public boolean isLocallyDefined(KeyStroke key)
      {
!       return map.containsKey(key);
      }
! 
!     public void removeBindings()
      {
!       map.clear();
      }
! 
!     public void removeKeyStrokeBinding(KeyStroke key)
      {
!       map.remove(key);
      }
! 
!     public void setDefaultAction(Action a)
      {
!       defaultAction = a;
      }
! 
!     public void setResolveParent(Keymap p)
      {
!       parent = p;
      }
!   }
! 
!   class DefaultTransferHandler
!     extends TransferHandler
!   {
!     public boolean canImport(JComponent component, DataFlavor[] flavors)
      {
!       JTextComponent textComponent = (JTextComponent) component;
!       
!       if (! (textComponent.isEnabled()
! 	     && textComponent.isEditable()
! 	     && flavors != null))
!         return false;
! 
!       for (int i = 0; i < flavors.length; ++i)
! 	if (flavors[i].equals(DataFlavor.stringFlavor))
! 	   return true;
! 
!       return false;
      }
!     
!     public void exportToClipboard(JComponent component, Clipboard clipboard,
! 				  int action)
      {
!       JTextComponent textComponent = (JTextComponent) component;
!       int start = textComponent.getSelectionStart();
!       int end = textComponent.getSelectionEnd();
! 
!       if (start == end)
! 	return;
! 
!       try
! 	{
! 	  // Copy text to clipboard.
! 	  String data = textComponent.getDocument().getText(start, end);
! 	  StringSelection selection = new StringSelection(data);
! 	  clipboard.setContents(selection, null);
! 
! 	  // Delete selected text on cut action.
! 	  if (action == MOVE)
! 	    doc.remove(start, end - start);
! 	}
!       catch (BadLocationException e)
! 	{
! 	  // Ignore this and do nothing.
! 	}
      }
      
!     public int getSourceActions()
      {
!       return NONE;
      }
! 
!     public boolean importData(JComponent component, Transferable transferable)
      {
!       DataFlavor flavor = null;
!       DataFlavor[] flavors = transferable.getTransferDataFlavors();
  
!       if (flavors == null)
! 	return false;
  
!       for (int i = 0; i < flavors.length; ++i)
! 	if (flavors[i].equals(DataFlavor.stringFlavor))
! 	   flavor = flavors[i];
!       
!       if (flavor == null)
! 	return false;
! 
!       try
! 	{
! 	  JTextComponent textComponent = (JTextComponent) component;
! 	  String data = (String) transferable.getTransferData(flavor);
! 	  textComponent.replaceSelection(data);
! 	  return true;
! 	}
!       catch (IOException e)
! 	{
! 	  // Ignored.
! 	}
!       catch (UnsupportedFlavorException e)
! 	{
! 	  // Ignored.
! 	}
! 
!       return false;
      }
+   }
+ 
+   private static final long serialVersionUID = -8796518220218978795L;
+   
+   public static final String DEFAULT_KEYMAP = "default";
+   public static final String FOCUS_ACCELERATOR_KEY = "focusAcceleratorKey";
+   
+   private static DefaultTransferHandler defaultTransferHandler;
+   private static Hashtable keymaps = new Hashtable();
+   private Keymap keymap;
+   private char focusAccelerator = '\0';
+   private NavigationFilter navigationFilter;
+   
+   /**
+    * Get a Keymap from the global keymap table, by name.
+    *
+    * @param n The name of the Keymap to look up
+    *
+    * @return A Keymap associated with the provided name, or
+    * <code>null</code> if no such Keymap exists
+    *
+    * @see #addKeymap()
+    * @see #removeKeymap()
+    * @see #keymaps
+    */
+   public static Keymap getKeymap(String n)
+   {
+     return (Keymap) keymaps.get(n);
+   }
+ 
+   /**
+    * Remove a Keymap from the global Keymap table, by name.
+    *
+    * @param n The name of the Keymap to remove
+    *
+    * @return The keymap removed from the global table
+    *
+    * @see #addKeymap()
+    * @see #getKeymap()
+    * @see #keymaps
+    */  
+   public static Keymap removeKeymap(String n)
+   {
+     Keymap km = (Keymap) keymaps.get(n);
+     keymaps.remove(n);
+     return km;
+   }
+ 
+   /**
+    * Create a new Keymap with a specific name and parent, and add the new
+    * Keymap to the global keymap table. The name may be <code>null</code>,
+    * in which case the new Keymap will <em>not</em> be added to the global
+    * Keymap table. The parent may also be <code>null</code>, which is
+    * harmless.
+    * 
+    * @param n The name of the new Keymap, or <code>null</code>
+    * @param parent The parent of the new Keymap, or <code>null</code>
+    *
+    * @return The newly created Keymap
+    *
+    * @see #removeKeymap()
+    * @see #getKeymap()
+    * @see #keymaps
+    */
+   public static Keymap addKeymap(String n, Keymap parent)
+   {
+     Keymap k = new DefaultKeymap(n);
+     k.setResolveParent(parent);
+     if (n != null)
+       keymaps.put(n, k);
+     return k;
+   }
+ 
+   /**
+    * Get the current Keymap of this component.
+    *
+    * @return The component's current Keymap
+    *
+    * @see #setKeymap()
+    * @see #keymap
+    */
+   public Keymap getKeymap() 
+   {
+     return keymap;
+   }
+ 
+   /**
+    * Set the current Keymap of this component, installing appropriate
+    * {@link KeymapWrapper} and {@link KeymapActionMap} objects in the
+    * {@link InputMap} and {@link ActionMap} parent chains, respectively,
+    * and fire a property change event with name <code>"keymap"</code>.
+    *
+    * @see #getKeymap()
+    * @see #keymap
+    */
+   public void setKeymap(Keymap k) 
+   {
+ 
+     // phase 1: replace the KeymapWrapper entry in the InputMap chain.
+     // the goal here is to always maintain the following ordering:
+     //
+     //   [InputMap]? -> [KeymapWrapper]? -> [InputMapUIResource]*
+     // 
+     // that is to say, component-specific InputMaps need to remain children
+     // of Keymaps, and Keymaps need to remain children of UI-installed
+     // InputMaps (and the order of each group needs to be preserved, of
+     // course).
+     
+     KeymapWrapper kw = (k == null ? null : new KeymapWrapper(k));
+     InputMap childInputMap = getInputMap(JComponent.WHEN_FOCUSED);
+     if (childInputMap == null)
+       setInputMap(JComponent.WHEN_FOCUSED, kw);
+     else
+       {
+         while (childInputMap.getParent() != null 
+                && !(childInputMap.getParent() instanceof KeymapWrapper)
+                && !(childInputMap.getParent() instanceof InputMapUIResource))
+           childInputMap = childInputMap.getParent();
+ 
+         // option 1: there is nobody to replace at the end of the chain
+         if (childInputMap.getParent() == null)
+           childInputMap.setParent(kw);
+         
+         // option 2: there is already a KeymapWrapper in the chain which
+         // needs replacing (possibly with its own parents, possibly without)
+         else if (childInputMap.getParent() instanceof KeymapWrapper)
+           {
+             if (kw == null)
+               childInputMap.setParent(childInputMap.getParent().getParent());
+             else
+               {
+                 kw.setParent(childInputMap.getParent().getParent());
+                 childInputMap.setParent(kw);
+               }
+           }
+ 
+         // option 3: there is an InputMapUIResource in the chain, which marks
+         // the place where we need to stop and insert ourselves
+         else if (childInputMap.getParent() instanceof InputMapUIResource)
+           {
+             if (kw != null)
+               {
+                 kw.setParent(childInputMap.getParent());
+                 childInputMap.setParent(kw);
+               }
+           }
+       }
+ 
+     // phase 2: replace the KeymapActionMap entry in the ActionMap chain
+ 
+     KeymapActionMap kam = (k == null ? null : new KeymapActionMap(k));
+     ActionMap childActionMap = getActionMap();
+     if (childActionMap == null)
+       setActionMap(kam);
+     else
+       {
+         while (childActionMap.getParent() != null 
+                && !(childActionMap.getParent() instanceof KeymapActionMap)
+                && !(childActionMap.getParent() instanceof ActionMapUIResource))
+           childActionMap = childActionMap.getParent();
+ 
+         // option 1: there is nobody to replace at the end of the chain
+         if (childActionMap.getParent() == null)
+           childActionMap.setParent(kam);
+         
+         // option 2: there is already a KeymapActionMap in the chain which
+         // needs replacing (possibly with its own parents, possibly without)
+         else if (childActionMap.getParent() instanceof KeymapActionMap)
+           {
+             if (kam == null)
+               childActionMap.setParent(childActionMap.getParent().getParent());
+             else
+               {
+                 kam.setParent(childActionMap.getParent().getParent());
+                 childActionMap.setParent(kam);
+               }
+           }
+ 
+         // option 3: there is an ActionMapUIResource in the chain, which marks
+         // the place where we need to stop and insert ourselves
+         else if (childActionMap.getParent() instanceof ActionMapUIResource)
+           {
+             if (kam != null)
+               {
+                 kam.setParent(childActionMap.getParent());
+                 childActionMap.setParent(kam);
+               }
+           }
+       }
+ 
+     // phase 3: update the explicit keymap field
+ 
+     Keymap old = keymap;
+     keymap = k;
+     firePropertyChange("keymap", old, k);
+   }
+ 
+   /**
+    * Resolves a set of bindings against a set of actions and inserts the
+    * results into a {@link Keymap}. Specifically, for each provided binding
+    * <code>b</code>, if there exists a provided action <code>a</code> such
+    * that <code>a.getValue(Action.NAME) == b.ActionName</code> then an
+    * entry is added to the Keymap mapping <code>b</code> to
+    * <code>a</code>.
+    *
+    * @param map The Keymap to add new mappings to
+    * @param bindings The set of bindings to add to the Keymap
+    * @param actions The set of actions to resolve binding names against
+    *
+    * @see Action#NAME
+    * @see Action#getValue()
+    * @see KeyBinding#ActionName
+    */
+   public static void loadKeymap(Keymap map, 
+                                 JTextComponent.KeyBinding[] bindings, 
+                                 Action[] actions)
+   {
+     Hashtable acts = new Hashtable(actions.length);
+     for (int i = 0; i < actions.length; ++i)
+       acts.put(actions[i].getValue(Action.NAME), actions[i]);
+     for (int i = 0; i < bindings.length; ++i)
+       if (acts.containsKey(bindings[i].actionName))
+         map.addActionForKeyStroke(bindings[i].key, (Action) acts.get(bindings[i].actionName));
+   }
+ 
+   /**
+    * Returns the set of available Actions this component's associated
+    * editor can run.  Equivalent to calling
+    * <code>getUI().getEditorKit().getActions()</code>. This set of Actions
+    * is a reasonable value to provide as a parameter to {@link
+    * #loadKeymap()}, when resolving a set of {@link #KeyBinding} objects
+    * against this component.
+    *
+    * @return The set of available Actions on this component's {@link EditorKit}
+    *
+    * @see TextUI#getEditorKit()
+    * @see EditorKit#getActions()
+    */
+   public Action[] getActions()
+   {
+     return getUI().getEditorKit(this).getActions();
+   }
+     
+   private Document doc;
+   private Caret caret;
+   private Highlighter highlighter;
+   private Color caretColor;
+   private Color disabledTextColor;
+   private Color selectedTextColor;
+   private Color selectionColor;
+   private boolean editable;
+   private Insets margin;
+   private boolean dragEnabled;
+ 
+   /**
+    * Creates a new <code>JTextComponent</code> instance.
+    */
+   public JTextComponent()
+   {
+     Keymap defkeymap = getKeymap(DEFAULT_KEYMAP);
+     boolean creatingKeymap = false;
+     if (defkeymap == null)
+       {
+         defkeymap = addKeymap(DEFAULT_KEYMAP, null);
+         defkeymap.setDefaultAction(new DefaultEditorKit.DefaultKeyTypedAction());
+         creatingKeymap = true;
+       }
+ 
+     setFocusable(true);
+     enableEvents(AWTEvent.KEY_EVENT_MASK);
+     updateUI();
+     
+     // need to do this after updateUI()
+     if (creatingKeymap)
+       loadKeymap(defkeymap, 
+                  new KeyBinding[] { 
+                    new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0),
+                                   DefaultEditorKit.backwardAction),
+                    new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0),
+                                   DefaultEditorKit.forwardAction),
+                    new KeyBinding(KeyStroke.getKeyStroke("typed \b"),
+                                   DefaultEditorKit.deletePrevCharAction),
+                    new KeyBinding(KeyStroke.getKeyStroke("typed \u007f"),
+                                   DefaultEditorKit.deleteNextCharAction)                   
+                  },
+                  getActions());
+   }
+ 
+   public void setDocument(Document newDoc)
+   {
+     Document oldDoc = doc;
+     doc = newDoc;
+     firePropertyChange("document", oldDoc, newDoc);
+     revalidate();
+     repaint();
+   }
+ 
+   public Document getDocument()
+   {
+     return doc;
+   }
+ 
+   /**
+    * Get the <code>AccessibleContext</code> of this object.
+    *
+    * @return an <code>AccessibleContext</code> object
+    */
+   public AccessibleContext getAccessibleContext()
+   {
+     return null;
+   }
+ 
+   public void setMargin(Insets m)
+   {
+     margin = m;
+   }
+ 
+   public Insets getMargin()
+   {
+     return margin;
+   }
+ 
+   public void setText(String text)
+   {
+     try
+       {
+ 	doc.remove(0, doc.getLength());
+ 	doc.insertString(0, text, null);
+       }
+     catch (BadLocationException e)
+       {
+ 	// This can never happen.
+       }
+   }
+ 
+   /**
+    * Retrieves the current text in this text document.
+    *
+    * @return the text
+    *
+    * @exception NullPointerException if the underlaying document is null
+    */
+   public String getText()
+   {
+     if (doc == null)
+       return null;
+ 
+     try
+       {
+ 	return doc.getText(0, doc.getLength());
+       }
+     catch (BadLocationException e)
+       {
+ 	// This should never happen.
+ 	return "";
+       }
+   }
+ 
+   /**
+    * Retrieves a part of the current text in this document.
+    *
+    * @param offset the postion of the first character
+    * @param length the length of the text to retrieve
+    *
+    * @return the text
+    *
+    * @exception BadLocationException if arguments do not hold pre-conditions
+    */
+   public String getText(int offset, int length)
+     throws BadLocationException
+   {
+     return getDocument().getText(offset, length);
+   }
+ 
+   /**
+    * Retrieves the currently selected text in this text document.
+    *
+    * @return the selected text
+    *
+    * @exception NullPointerException if the underlaying document is null
+    */
+   public String getSelectedText()
+   {
+     try
+       {
+ 	return doc.getText(getSelectionStart(), getSelectionEnd());
+       }
+     catch (BadLocationException e)
+       {
+ 	// This should never happen.
+ 	return null;
+       }
+   }
+ 
+   /**
+    * Returns a string that specifies the name of the Look and Feel class
+    * that renders this component.
+    *
+    * @return the string "TextComponentUI"
+    */
+   public String getUIClassID()
+   {
+     return "TextComponentUI";
+   }
+ 
+   /**
+    * Returns a string representation of this JTextComponent.
+    */
+   protected String paramString()
+   {
+     return "JTextComponent";
+   }
+ 
+   /**
+    * This method returns the label's UI delegate.
+    *
+    * @return The label's UI delegate.
+    */
+   public TextUI getUI()
+   {
+     return (TextUI) ui;
+   }
+ 
+   /**
+    * This method sets the label's UI delegate.
+    *
+    * @param ui The label's UI delegate.
+    */
+   public void setUI(TextUI newUI)
+   {
+     super.setUI(newUI);
+   }
+ 
+   /**
+    * This method resets the label's UI delegate to the default UI for the
+    * current look and feel.
+    */
+   public void updateUI()
+   {
+     setUI((TextUI) UIManager.getUI(this));
+   }
  
    public Dimension getPreferredScrollableViewportSize()
    {
      return null;
    }
+ 
    public int getScrollableUnitIncrement(Rectangle visible, int orientation,
                                          int direction)
    {
      return 0;
    }
+ 
    public int getScrollableBlockIncrement(Rectangle visible, int orientation,
                                           int direction)
    {
      return 0;
    }
  
+   /**
+    * Checks whether this text component it editable.
+    *
+    * @return true if editable, false otherwise
+    */
+   public boolean isEditable()
+   {
+     return editable;
+   }
+ 
+   /**
+    * Enables/disabled this text component's editability.
+    *
+    * @param newValue true to make it editable, false otherwise.
+    */
+   public void setEditable(boolean newValue)
+   {
+     if (editable == newValue)
+       return;
+ 
+     boolean oldValue = editable;
+     editable = newValue;
+     firePropertyChange("editable", oldValue, newValue);
+   }
+ 
+   /**
+    * The <code>Caret</code> object used in this text component.
+    *
+    * @return the caret object
+    */
+   public Caret getCaret()
+   {
+     return caret;
+   }
+ 
+   /**
+    * Sets a new <code>Caret</code> for this text component.
+    *
+    * @param newCaret the new <code>Caret</code> to set
+    */
+   public void setCaret(Caret newCaret)
+   {
+     if (caret != null)
+       caret.deinstall(this);
+     
+     Caret oldCaret = caret;
+     caret = newCaret;
+ 
+     if (caret != null)
+       caret.install(this);
+     
+     firePropertyChange("caret", oldCaret, newCaret);
+   }
+ 
+   public Color getCaretColor()
+   {
+     return caretColor;
+   }
+ 
+   public void setCaretColor(Color newColor)
+   {
+     Color oldCaretColor = caretColor;
+     caretColor = newColor;
+     firePropertyChange("caretColor", oldCaretColor, newColor);
+   }
+ 
+   public Color getDisabledTextColor()
+   {
+     return disabledTextColor;
+   }
+ 
+   public void setDisabledTextColor(Color newColor)
+   {
+     Color oldColor = disabledTextColor;
+     disabledTextColor = newColor;
+     firePropertyChange("disabledTextColor", oldColor, newColor);
+   }
+ 
+   public Color getSelectedTextColor()
+   {
+     return selectedTextColor;
+   }
+ 
+   public void setSelectedTextColor(Color newColor)
+   {
+     Color oldColor = selectedTextColor;
+     selectedTextColor = newColor;
+     firePropertyChange("selectedTextColor", oldColor, newColor);
+   }
+ 
+   public Color getSelectionColor()
+   {
+     return selectionColor;
+   }
+ 
+   public void setSelectionColor(Color newColor)
+   {
+     Color oldColor = selectionColor;
+     selectionColor = newColor;
+     firePropertyChange("selectionColor", oldColor, newColor);
+   }
+ 
+   /**
+    * Retrisves the current caret position.
+    *
+    * @return the current position
+    */
+   public int getCaretPosition()
+   {
+     return caret.getDot();
+   }
+ 
+   /**
+    * Sets the caret to a new position.
+    *
+    * @param position the new position
+    */
+   public void setCaretPosition(int position)
+   {
+     if (doc == null)
+       return;
+ 
+     if (position < 0 || position > doc.getLength())
+       throw new IllegalArgumentException();
+ 
+     caret.setDot(position);
+   }
+ 
+   /**
+    * Moves the caret to a given position. This selects the text between
+    * the old and the new position of the caret.
+    */
+   public void moveCaretPosition(int position)
+   {
+     if (doc == null)
+       return;
+ 
+     if (position < 0 || position > doc.getLength())
+       throw new IllegalArgumentException();
+ 
+     caret.moveDot(position);
+   }
+ 
+   public Highlighter getHighlighter()
+   {
+     return highlighter;
+   }
+ 
+   public void setHighlighter(Highlighter newHighlighter)
+   {
+     if (highlighter != null)
+       highlighter.deinstall(this);
+     
+     Highlighter oldHighlighter = highlighter;
+     highlighter = newHighlighter;
+ 
+     if (highlighter != null)
+       highlighter.install(this);
+     
+     firePropertyChange("highlighter", oldHighlighter, newHighlighter);
+   }
+ 
+   /**
+    * Returns the start postion of the currently selected text.
+    *
+    * @return the start postion
+    */
+   public int getSelectionStart()
+   {
+     return Math.min(caret.getDot(), caret.getMark());
+   }
+ 
+   /**
+    * Selects the text from the given postion to the selection end position.
+    *
+    * @param end the start positon of the selected text.
+    */
+   public void setSelectionStart(int start)
+   {
+     select(start, getSelectionEnd());
+   }
+ 
+   /**
+    * Returns the end postion of the currently selected text.
+    *
+    * @return the end postion
+    */
+   public int getSelectionEnd()
+   {
+     return Math.max(caret.getDot(), caret.getMark());
+   }
+ 
+   /**
+    * Selects the text from the selection start postion to the given position.
+    *
+    * @param end the end positon of the selected text.
+    */
+   public void setSelectionEnd(int end)
+   {
+     select(getSelectionStart(), end);
+   }
+ 
+   /**
+    * Selects a part of the content of the text component.
+    *
+    * @param start the start position of the selected text
+    * @param ent the end position of the selected text
+    */
+   public void select(int start, int end)
+   {
+     int length = doc.getLength();
+     
+     start = Math.max(start, 0);
+     start = Math.min(start, length);
+ 
+     end = Math.max(end, 0);
+     end = Math.min(end, length);
+ 
+     setCaretPosition(start);
+     moveCaretPosition(end);
+   }
+ 
+   /**
+    * Selects the whole content of the text component.
+    */
+   public void selectAll()
+   {
+     select(0, doc.getLength());
+   }
+ 
+   public synchronized void replaceSelection(String content)
+   {
+     int dot = caret.getDot();
+     int mark = caret.getMark();
+ 
+     // If content is empty delete selection.
+     if (content == null)
+       {
+ 	caret.setDot(dot);
+ 	return;
+       }
+ 
+     try
+       {
+ 	int start = getSelectionStart();
+ 	int end = getSelectionEnd();
+ 	
+ 	// Remove selected text.
+ 	if (dot != mark)
+ 	  doc.remove(start, end - start);
+ 
+ 	// Insert new text.
+ 	doc.insertString(start, content, null);
+ 
+ 	// Set dot to new position.
+ 	setCaretPosition(start + content.length());
+       }
+     catch (BadLocationException e)
+       {
+ 	// This should never happen.
+       }
+   }
+ 
+   public boolean getScrollableTracksViewportHeight()
+   {
+     if (getParent() instanceof JViewport)
+       return ((JViewport) getParent()).getHeight() > getPreferredSize().height;
+ 
+     return false;
+   }
+ 
+   public boolean getScrollableTracksViewportWidth()
+   {
+     if (getParent() instanceof JViewport)
+       return ((JViewport) getParent()).getWidth() > getPreferredSize().width;
+ 
+     return false;
+   }
+ 
+   /**
+    * Adds a <code>CaretListener</code> object to this text component.
+    *
+    * @param listener the listener to add
+    */
+   public void addCaretListener(CaretListener listener)
+   {
+     listenerList.add(CaretListener.class, listener);
+   }
+ 
+   /**
+    * Removed a <code>CaretListener</code> object from this text component.
+    *
+    * @param listener the listener to remove
+    */
+   public void removeCaretListener(CaretListener listener)
+   {
+     listenerList.remove(CaretListener.class, listener);
+   }
+ 
+   /**
+    * Returns all added <code>CaretListener</code> objects.
+    *
+    * @return an array of listeners
+    */
+   public CaretListener[] getCaretListeners()
+   {
+     return (CaretListener[]) getListeners(CaretListener.class);
+   }
+ 
+   /**
+    * Notifies all registered <code>CaretListener</code> objects that the caret
+    * was updated.
+    *
+    * @param event the event to send
+    */
+   protected void fireCaretUpdate(CaretEvent event)
+   {
+     CaretListener[] listeners = getCaretListeners();
+ 
+     for (int index = 0; index < listeners.length; ++index)
+       listeners[index].caretUpdate(event);
+   }
+ 
+   /**
+    * Adds an <code>InputListener</code> object to this text component.
+    *
+    * @param listener the listener to add
+    */
+   public void addInputMethodListener(InputMethodListener listener)
+   {
+     listenerList.add(InputMethodListener.class, listener);
+   }
+ 
+   /**
+    * Removes an <code>InputListener</code> object from this text component.
+    *
+    * @param listener the listener to remove
+    */
+   public void removeInputMethodListener(InputMethodListener listener)
+   {
+     listenerList.remove(InputMethodListener.class, listener);
+   }
+ 
+   /**
+    * Returns all added <code>InputMethodListener</code> objects.
+    *
+    * @return an array of listeners
+    */
+   public InputMethodListener[] getInputMethodListeners()
+   {
+     return (InputMethodListener[]) getListeners(InputMethodListener.class);
+   }
+ 
+   public Rectangle modelToView(int position) throws BadLocationException
+   {
+     return getUI().modelToView(this, position);
+   }
+ 
+   public boolean getDragEnabled()
+   {
+     return dragEnabled;
+   }
  
+   public void setDragEnabled(boolean enabled)
+   {
+     dragEnabled = enabled;
+   }
  
+   public int viewToModel(Point pt)
+   {
+     return getUI().viewToModel(this, pt);
+   }
  
+   public void copy()
+   {
+     doTransferAction("copy", TransferHandler.getCopyAction());
+   }
  
+   public void cut()
+   {
+     doTransferAction("cut", TransferHandler.getCutAction());
+   }
  
+   public void paste()
+   {
+     doTransferAction("paste", TransferHandler.getPasteAction());
+   }
  
+   private void doTransferAction(String name, Action action)
+   {
+     // Install default TransferHandler if none set.
+     if (getTransferHandler() == null)
+       {
+ 	if (defaultTransferHandler == null)
+ 	  defaultTransferHandler = new DefaultTransferHandler();
+ 	
+ 	setTransferHandler(defaultTransferHandler);
+       }
  
+     // Perform action.
+     ActionEvent event = new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
+ 					action.getValue(Action.NAME).toString());
+     action.actionPerformed(event);
+   }
  
+   public void setFocusAccelerator(char newKey)
+   {
+     if (focusAccelerator == newKey)
+       return;
  
+     char oldKey = focusAccelerator;
+     focusAccelerator = newKey;
+     firePropertyChange(FOCUS_ACCELERATOR_KEY, oldKey, newKey);
+   }
+   
+   public char getFocusAccelerator()
+   {
+     return focusAccelerator;
+   }
  
+   /**
+    * @since 1.4
+    */
+   public NavigationFilter getNavigationFilter()
+   {
+     return navigationFilter;
+   }
  
+   /**
+    * @since 1.4
+    */
+   public void setNavigationFilter(NavigationFilter filter)
+   {
+     navigationFilter = filter;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/LayeredHighlighter.java gcc-4.0.0/libjava/javax/swing/text/LayeredHighlighter.java
*** gcc-3.4.3/libjava/javax/swing/text/LayeredHighlighter.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/LayeredHighlighter.java	Tue Nov 30 23:59:08 2004
***************
*** 0 ****
--- 1,57 ----
+ /* LayeredHighlighter.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.Graphics;
+ import java.awt.Shape;
+ 
+ public abstract class LayeredHighlighter
+   implements Highlighter
+ {
+   public abstract static class LayerPainter
+     implements Highlighter.HighlightPainter
+   {
+     public abstract Shape paintLayer(Graphics g, int p0, int p1,
+ 				     Shape viewBounds, JTextComponent editor,
+ 				     View view);
+   }
+   
+   public abstract void paintLayeredHighlights(Graphics g, int p0, int p1,
+                                               Shape viewBounds,
+                                               JTextComponent editor, View view);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/MutableAttributeSet.java gcc-4.0.0/libjava/javax/swing/text/MutableAttributeSet.java
*** gcc-3.4.3/libjava/javax/swing/text/MutableAttributeSet.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/MutableAttributeSet.java	Thu Jun 17 23:43:15 2004
*************** import java.util.Enumeration;
*** 44,91 ****
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public interface MutableAttributeSet extends AttributeSet {
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * addAttribute
! 	 * @param name TODO
! 	 * @param value TODO
! 	 */
! 	void addAttribute(Object name, Object value);
! 
! 	/**
! 	 * addAttributes
! 	 * @param attributes TODO
! 	 */
! 	void addAttributes(AttributeSet attributes);
! 
! 	/**
! 	 * removeAttribute
! 	 * @param name TODO
! 	 */
! 	void removeAttribute(Object name);
  
! 	/**
! 	 * removeAttributes
! 	 * @param names TODO
! 	 */
! 	void removeAttributes(Enumeration names);
  
! 	/**
! 	 * removeAttributes
! 	 * @param attributes TODO
! 	 */
! 	void removeAttributes(AttributeSet attributes);
  
! 	/**
! 	 * setResolveParent
! 	 * @param parent TODO
! 	 */
! 	void setResolveParent(AttributeSet parent);
  
  
! } // MutableAttributeSet
--- 44,85 ----
   * @author	Andrew Selkirk
   * @version	1.0
   */
! public interface MutableAttributeSet extends AttributeSet
! {
!   /**
!    * addAttribute
!    * @param name TODO
!    * @param value TODO
!    */
!   void addAttribute(Object name, Object value);
  
!   /**
!    * addAttributes
!    * @param attributes TODO
!    */
!   void addAttributes(AttributeSet attributes);
  
!   /**
!    * removeAttribute
!    * @param name TODO
!    */
!   void removeAttribute(Object name);
  
!   /**
!    * removeAttributes
!    * @param names TODO
!    */
!   void removeAttributes(Enumeration names);
  
+   /**
+    * removeAttributes
+    * @param attributes TODO
+    */
+   void removeAttributes(AttributeSet attributes);
  
!   /**
!    * setResolveParent
!    * @param parent TODO
!    */
!   void setResolveParent(AttributeSet parent);
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/NavigationFilter.java gcc-4.0.0/libjava/javax/swing/text/NavigationFilter.java
*** gcc-3.4.3/libjava/javax/swing/text/NavigationFilter.java	Mon Mar 17 09:09:39 2003
--- gcc-4.0.0/libjava/javax/swing/text/NavigationFilter.java	Tue Nov 30 23:59:08 2004
***************
*** 1,5 ****
  /* NavigationFilter.java --
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NavigationFilter.java --
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.text;
*** 40,43 ****
--- 40,71 ----
  
  public class NavigationFilter
  {
+   public abstract static class FilterBypass
+   {
+     public FilterBypass()
+     {
+       // Do nothing here.
+     }
+ 
+     public abstract Caret getCaret();
+     public abstract void moveDot(int dot, Position.Bias bias);
+     public abstract void setDot(int dot, Position.Bias bias);
+   }
+   
+   public NavigationFilter()
+   {
+     // Do nothing here.
+   }
+ 
+   public void moveDot(NavigationFilter.FilterBypass fb, int dot,
+ 		      Position.Bias bias)
+   {
+     fb.moveDot(dot, bias);
+   }
+ 
+   public void setDot(NavigationFilter.FilterBypass fb, int dot,
+ 		     Position.Bias bias)
+   {
+     fb.setDot(dot, bias);
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/PasswordView.java gcc-4.0.0/libjava/javax/swing/text/PasswordView.java
*** gcc-3.4.3/libjava/javax/swing/text/PasswordView.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/PasswordView.java	Wed Feb 16 20:03:11 2005
***************
*** 0 ****
--- 1,170 ----
+ /* PasswordView.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.Color;
+ import java.awt.Graphics;
+ 
+ import javax.swing.JPasswordField;
+ 
+ public class PasswordView extends FieldView
+ {
+   /**
+    * Buffer for putting the echo char into it and
+    * then using it to draw it into the view.
+    */
+   private char[] oneCharBuffer = new char[1];
+   
+   public PasswordView(Element elem)
+   {
+     super(elem);
+   }
+ 
+   /**
+    * Draws one echo character at a given position.
+    *
+    * @param g the <code>Graphics</code> object to draw to
+    * @param x the x-position
+    * @param y the y-position
+    * @param ch the echo character
+    *
+    * @return the next x position right of the drawn character
+    */
+   protected int drawEchoCharacter(Graphics g, int x, int y, char ch)
+   {
+     // Update font metrics.
+     updateMetrics();
+     
+     // Draw character.
+     oneCharBuffer[0] = ch;
+     g.drawChars(oneCharBuffer, 0, 1, x, y);
+ 
+     // Return new x position right of drawn character.
+     return x + metrics.charWidth(ch);
+   }
+ 
+   private char getEchoChar()
+   {
+     char ch = ((JPasswordField) getContainer()).getEchoChar();
+     
+     if (ch == 0)
+       ch = '*';
+ 
+     return ch;
+   }
+ 
+   /**
+    * Draws selected text at a given position.
+    *
+    * @param g the <code>Graphics</code> object to draw to
+    * @param x the x-position
+    * @param y the y-position
+    * @param p0 the position of the first character to draw
+    * @param p1 the position of the first character not to draw
+    *
+    * @return the next x position right of the drawn character
+    */
+   protected int drawSelectedText(Graphics g, int x, int y, int p0, int p1)
+     throws BadLocationException
+   {
+     // FIXME: Throw BadLocationException somehow.
+ 
+     // Update font metrics.
+     updateMetrics();
+     
+     // Get echo character.
+     char ch = getEchoChar();
+     
+     // Set color for selected text.
+     g.setColor(selectedColor);
+     g.setColor(Color.BLACK);
+ 
+     // Initialize buffer for faster drawing of all characters.
+     int len = p1 - p0;
+     char[] buffer = new char[len];
+     for (int index = 0; index < len; ++index)
+       buffer[index] = ch;
+     
+     // Draw echo charaters.
+     g.drawChars(buffer, 0, len, x, y);
+ 
+     // Return new x position right of all drawn characters.
+     return x + len * metrics.charWidth(ch);
+   }
+ 
+   /**
+    * Draws unselected text at a given position.
+    *
+    * @param g the <code>Graphics</code> object to draw to
+    * @param x the x-position
+    * @param y the y-position
+    * @param p0 the position of the first character to draw
+    * @param p1 the position of the first character not to draw
+    *
+    * @return the next x position right of the drawn character
+    */
+   protected int drawUnselectedText(Graphics g, int x, int y, int p0, int p1)
+     throws BadLocationException
+   {
+     // FIXME: Throw BadLocationException somehow.
+ 
+     // Update font metrics.
+     updateMetrics();
+     
+     // Get echo character.
+     char ch = getEchoChar();
+     
+     // Set color for unselected text.
+     g.setColor(unselectedColor);
+     g.setColor(Color.BLACK);
+ 
+     // Initialize buffer for faster drawing of all characters.
+     int len = p1 - p0;
+     char[] buffer = new char[len];
+     for (int index = 0; index < len; ++index)
+       buffer[index] = ch;
+     
+     // Draw echo charaters.
+     g.drawChars(buffer, 0, len, x, y);
+ 
+     // Return new x position right of all drawn characters.
+     return x + len * metrics.charWidth(ch);
+   }
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/PlainDocument.java gcc-4.0.0/libjava/javax/swing/text/PlainDocument.java
*** gcc-3.4.3/libjava/javax/swing/text/PlainDocument.java	Fri Aug  9 04:26:12 2002
--- gcc-4.0.0/libjava/javax/swing/text/PlainDocument.java	Wed Feb 16 20:03:12 2005
***************
*** 1,5 ****
! /* PlainDocument.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* PlainDocument.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,58 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.text;
  
  
  public class PlainDocument extends AbstractDocument
  {
!     PlainDocument()
!     {
! 	super(new GapContent());
!     }
  
!     public Element getDefaultRootElement()
!     {
! 	return null;
!     }
  
!     public Element getParagraphElement(int  pos)
!     {
! 	return null;
!     }
! }
  
--- 35,132 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.text;
  
+ import java.util.ArrayList;
  
  public class PlainDocument extends AbstractDocument
  {
!   private static final long serialVersionUID = 4758290289196893664L;
!     
!   public static final String lineLimitAttribute = "lineLimit";
!   public static final String tabSizeAttribute = "tabSize";
  
!   private Element rootElement;
!   private int tabSize;
!   
!   public PlainDocument()
!   {
!     this(new GapContent());
!   }
  
!   public PlainDocument(AbstractDocument.Content content)
!   {
!     super(content);
!     tabSize = 8;
!     rootElement = createDefaultRoot();
!   }
! 
!   private void reindex()
!   {
!     Element[] lines;
!     try 
!       {
!         String str = content.getString(0, content.length());
! 
!         ArrayList elts = new ArrayList();
!         int j = 0;
!         for (int i = str.indexOf('\n', 0); i != -1; i = str.indexOf('\n', i + 1))
!           {
!             elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY, j, i + 1));
!             j = i + 1;
!           }
!         
!         if (j < content.length())
!           elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY, j, content.length()));
!         
!         lines = new Element[elts.size()];
!         for (int i = 0; i < elts.size(); ++i)
!           lines[i] = (Element) elts.get(i);
!       }
!     catch (BadLocationException e)
!       {
!         lines = new Element[1];
!         lines[0] = createLeafElement(rootElement, SimpleAttributeSet.EMPTY, 0, 1);
!       }
! 
!     ((BranchElement) rootElement).replace(0, rootElement.getElementCount(), lines);
!   }
! 
!   protected AbstractDocument.AbstractElement createDefaultRoot()
!   {
!     BranchElement root =
!       (BranchElement) createBranchElement(null, SimpleAttributeSet.EMPTY);
! 
!     Element[] array = new Element[1];
!     array[0] = createLeafElement(root, SimpleAttributeSet.EMPTY, 0, 1);
!     root.replace(0, 0, array);
!     
!     return root;
!   }
! 
!   protected void insertUpdate(DefaultDocumentEvent event, AttributeSet attributes)
!   {
!     reindex();
! 
!     super.insertUpdate(event, attributes);
!   }
! 
!   protected void removeUpdate(DefaultDocumentEvent event)
!   {
!     reindex();
! 
!     super.removeUpdate(event);
!   }
! 
!   public Element getDefaultRootElement()
!   {
!     return rootElement;
!   }
  
+   public Element getParagraphElement(int pos)
+   {
+     Element root = getDefaultRootElement();
+     return root.getElement(root.getElementIndex(pos));
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/PlainEditorKit.java gcc-4.0.0/libjava/javax/swing/text/PlainEditorKit.java
*** gcc-3.4.3/libjava/javax/swing/text/PlainEditorKit.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/PlainEditorKit.java	Thu Jan  1 00:00:00 1970
***************
*** 1,103 ****
- /* PlainEditorKit.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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, 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.swing.text;
- 
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.Reader;
- import java.io.Writer;
- import javax.swing.Action;
- import javax.swing.JEditorPane;
- 
- public class PlainEditorKit extends EditorKit
- {
-     public PlainEditorKit()
-     {
-     }
- 
-     public PlainEditorKit(PlainEditorKit kit)
-     {
- 	super(kit);
-     }
- 
-     protected Object clone()  
-     {
- 	return new PlainEditorKit(this);
-     }
-     void deinstall(JEditorPane c)
-     {
- 	//      Called when the kit is being removed from the JEditorPane. 
-     }
-     void install(JEditorPane c)
-     {
-     }
- 
-     Caret createCaret()
-     {
- 	return null;
-     }
-     Document createDefaultDocument()
-     {
- 	return null;
-     }
-     Action[] getActions()
-     {
- 	return null;
-     }
-     String getContentType()
-     {
- 	return null;
-     }
-     ViewFactory getViewFactory()
-     {
- 	return null;
-     }
-     void read(InputStream in, Document doc, int pos)
-     {	
-     }
-     void read(Reader in, Document doc, int pos)
-     {
-     }
-     void write(OutputStream out, Document doc, int pos, int len)
-     {
-     }
-     void write(Writer out, Document doc, int pos, int len)
-     {
-     }
- }
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/PlainView.java gcc-4.0.0/libjava/javax/swing/text/PlainView.java
*** gcc-3.4.3/libjava/javax/swing/text/PlainView.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/PlainView.java	Wed Feb 16 20:03:12 2005
***************
*** 0 ****
--- 1,206 ----
+ /* PlainView.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ import java.awt.Rectangle;
+ import java.awt.Shape;
+ 
+ public class PlainView extends View
+   implements TabExpander
+ {
+   Color selectedColor;
+   Color unselectedColor;
+   Font font;
+   
+   protected FontMetrics metrics;
+ 
+   public PlainView(Element elem)
+   {
+     super(elem);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   protected void updateMetrics()
+   {
+     Component component = getContainer();
+     Font font = component.getFont();
+ 
+     if (this.font != font)
+       {
+ 	this.font = font;
+ 	metrics = component.getFontMetrics(font);
+       }
+   }
+   
+   /**
+    * @since 1.4
+    */
+   protected Rectangle lineToRect(Shape a, int line)
+   {
+     // Ensure metrics are up-to-date.
+     updateMetrics();
+     
+     Rectangle rect = a.getBounds();
+     int fontHeight = metrics.getHeight();
+     return new Rectangle(rect.x, rect.y + (line * fontHeight),
+ 			 rect.width, fontHeight);
+   }
+ 
+   public Shape modelToView(int position, Shape a, Position.Bias b)
+     throws BadLocationException
+   {
+     // Ensure metrics are up-to-date.
+     updateMetrics();
+     
+     Document document = getDocument();
+ 
+     // Get rectangle of the line containing position.
+     int lineIndex = getElement().getElementIndex(position);
+     Rectangle rect = lineToRect(a, lineIndex);
+ 
+     // Get the rectangle for position.
+     Element line = getElement().getElement(lineIndex);
+     int lineStart = line.getStartOffset();
+     Segment segment = new Segment();
+     document.getText(lineStart, position - lineStart, segment);
+     int xoffset = Utilities.getTabbedTextWidth(segment, metrics, rect.x,
+ 					       this, lineStart);
+ 
+     // Calc the real rectangle.
+     rect.x += xoffset;
+     rect.width = 1;
+     rect.height = metrics.getHeight();
+ 
+     return rect;
+   }
+   
+   protected void drawLine(int lineIndex, Graphics g, int x, int y)
+   {
+     try
+       {
+ 	metrics = g.getFontMetrics();
+ 	// FIXME: Selected text are not drawn yet.
+ 	Element line = getDocument().getDefaultRootElement().getElement(lineIndex);
+ 	drawUnselectedText(g, x, y, line.getStartOffset(), line.getEndOffset());
+ 	//drawSelectedText(g, , , , );
+       }
+     catch (BadLocationException e)
+       {
+ 	// This should never happen.
+       }
+   }
+ 
+   protected int drawSelectedText(Graphics g, int x, int y, int p0, int p1)
+     throws BadLocationException
+   {
+     g.setColor(selectedColor);
+     Segment segment = new Segment();
+     getDocument().getText(p0, p1 - p0, segment);
+     return Utilities.drawTabbedText(segment, x, y, g, this, 0);
+   }
+ 
+   protected int drawUnselectedText(Graphics g, int x, int y, int p0, int p1)
+     throws BadLocationException
+   {
+     g.setColor(unselectedColor);
+     Segment segment = new Segment();
+     getDocument().getText(p0, p1 - p0, segment);
+     return Utilities.drawTabbedText(segment, x, y, g, this, 0);
+   }
+ 
+   public void paint(Graphics g, Shape s)
+   {
+     // Ensure metrics are up-to-date.
+     updateMetrics();
+     
+     JTextComponent textComponent = (JTextComponent) getContainer();
+ 
+     g.setFont(textComponent.getFont());
+     selectedColor = textComponent.getSelectedTextColor();
+     unselectedColor = textComponent.getForeground();
+     
+     Rectangle rect = s.getBounds();
+ 
+     // FIXME: Text may be scrolled.
+     Document document = textComponent.getDocument();
+     Element root = document.getDefaultRootElement();
+     int y = rect.y;
+     
+     for (int i = 0; i < root.getElementCount(); i++)
+       {
+ 	drawLine(i, g, rect.x, y);
+ 	y += metrics.getHeight();
+       }
+   }
+ 
+   protected int getTabSize()
+   {
+     return 8;
+   }
+ 
+   /**
+    * Returns the next tab stop position after a given reference position.
+    *
+    * This implementation ignores the <code>tabStop</code> argument.
+    * 
+    * @param x the current x position in pixels
+    * @param tabStop the position within the text stream that the tab occured at
+    */
+   public float nextTabStop(float x, int tabStop)
+   {
+     float tabSizePixels = getTabSize() + metrics.charWidth('m');
+     return (float) (Math.floor(x / tabSizePixels) + 1) * tabSizePixels;
+   }
+ 
+   public float getPreferredSpan(int axis)
+   {
+     if (axis != X_AXIS && axis != Y_AXIS)
+       throw new IllegalArgumentException();
+ 
+     return 10;
+   }
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/Position.java gcc-4.0.0/libjava/javax/swing/text/Position.java
*** gcc-3.4.3/libjava/javax/swing/text/Position.java	Fri Aug  9 04:26:12 2002
--- gcc-4.0.0/libjava/javax/swing/text/Position.java	Wed Feb 16 20:03:12 2005
***************
*** 1,5 ****
  /* Position.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Position.java -- 
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.text;
*** 40,48 ****
  
  public interface Position
  {
!     static class Bias
      {
      }
      
!     int getOffset();
  }
--- 40,62 ----
  
  public interface Position
  {
!   static class Bias
!   {
!     public static final Bias Backward = new Bias("backward");
!     public static final Bias Forward = new Bias("forward");
! 
!     private String name;
!     
!     private Bias(String n)
!     {
!       name = n;
!     }
! 
!     public String toString()
      {
+       return name;
      }
+   }
      
!   int getOffset();
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/Segment.java gcc-4.0.0/libjava/javax/swing/text/Segment.java
*** gcc-3.4.3/libjava/javax/swing/text/Segment.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/Segment.java	Wed Feb 16 20:03:12 2005
***************
*** 1,4 ****
! /* Segment.java -- 
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
--- 1,4 ----
! /* Segment.java --
     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
*************** exception statement from your version. *
*** 37,107 ****
  
  package javax.swing.text;
  
! public class Segment implements Cloneable, CharacterIterator
  {
!     char[] array;
!     int count;
!     int offset;
!     
!     public Object clone()
!     {
! 	try {
! 	    return super.clone();
! 	} catch (Exception e) {
! 	    System.err.println("Huuuhhh, this class implements cloneable !!!!!!");
! 	    System.err.println("I think there is a bug in this JVM somewhere");
! 	}
  	return null;
!     }
      
!     public char current()
!     {
! 	return array[getIndex()];
!     }
  
!     public char first()
!     {
! 	offset = getBeginIndex();
! 	return array[offset];
!     }
      
!     public int getBeginIndex()
!     {
! 	return offset;
!     }
      
!     public int getEndIndex()
!     {
! 	return offset + count;
!     }
!     public int getIndex()
!     {
! 	return offset;
!     }
!     public char last()
!     {
! 	offset = getEndIndex() - 1;
! 	return array[offset];
!     }
!     public char next()
!     {
! 	offset++;
! 	return array[offset];
!     }
!     public char previous()
!     {
! 	offset--;
! 	return array[offset];
!     }
!     public char setIndex(int position)
!     {
! 	offset = position;
! 	return array[offset];
!     }
  
!     public String toString()
!     {
! 	return new String(array, offset, count);
!     }
! }
  
--- 37,176 ----
  
  package javax.swing.text;
  
! import java.text.CharacterIterator;
! 
! public class Segment
!   implements Cloneable, CharacterIterator
  {
!   private boolean partialReturn;
!   private int current;
!   
!   public char[] array;
!   public int count;
!   public int offset;
! 
!   public Segment()
!   {
!   }
! 
!   public Segment(char[] array, int offset, int count)
!   {
!     this.array = array;
!     this.offset = offset;
!     this.count = count;
!   }
!   
!   public Object clone()
!   {
!     try
!       {
! 	return super.clone();
!       }
!     catch (CloneNotSupportedException e)
!       {
  	return null;
!       }
!   }
! 
!   public char current()
!   {
!     if (count == 0
! 	|| current >= getEndIndex())
!       return DONE;
      
!     return array[current];
!   }
  
!   public char first()
!   {
!     if (count == 0)
!       return DONE;
! 
!     current = getBeginIndex();
!     return array[current];
!   }
! 
!   public int getBeginIndex()
!   {
!     return offset;
!   }
! 
!   public int getEndIndex()
!   {
!     return offset + count;
!   }
! 
!   public int getIndex()
!   {
!     return current;
!   }
! 
!   public char last()
!   {
!     if (count == 0)
!       return DONE;
      
!     current = getEndIndex() - 1;
!     return array[current];
!   }
! 
!   public char next()
!   {
!     if (count == 0)
!       return DONE;
! 
!     if ((current + 1) >= getEndIndex())
!       {
! 	current = getEndIndex();
! 	return DONE;
!       }
      
!     current++;
!     return array[current];
!   }
  
!   public char previous()
!   {
!     if (count == 0
! 	|| current == getBeginIndex())
!       return DONE;
!     
!     current--;
!     return array[current];
!   }
  
+   public char setIndex(int position)
+   {
+     if (position < getBeginIndex()
+ 	|| position > getEndIndex())
+       throw new IllegalArgumentException();
+ 
+     current = position;
+ 
+     if (position == getEndIndex())
+       return DONE;
+     
+     return array[current];
+   }
+ 
+   public String toString()
+   {
+     return new String(array, offset, count);
+   }
+ 
+   /**
+    * @since 1.4
+    */
+   public void setPartialReturn(boolean p)
+   {
+     partialReturn = p;
+   }
+   
+   /**
+    * @since 1.4
+    */
+   public boolean isPartialReturn()
+   {
+     return partialReturn;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/SimpleAttributeSet.java gcc-4.0.0/libjava/javax/swing/text/SimpleAttributeSet.java
*** gcc-3.4.3/libjava/javax/swing/text/SimpleAttributeSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/SimpleAttributeSet.java	Tue Nov 30 23:59:08 2004
***************
*** 0 ****
--- 1,193 ----
+ /* SimpleAttributeSet.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ import java.util.Hashtable;
+ 
+ public class SimpleAttributeSet
+   implements MutableAttributeSet, Serializable, Cloneable
+ {
+   public static final AttributeSet EMPTY = new SimpleAttributeSet();
+ 
+   Hashtable tab;
+ 
+   public SimpleAttributeSet()
+   {
+     this(null);
+   }
+   
+   public SimpleAttributeSet(AttributeSet a)
+   {
+     tab = new Hashtable();
+     if (a != null)
+       addAttributes(a);
+   }
+ 
+   public void addAttribute(Object name, Object value)
+   {
+     tab.put(name, value);
+   }
+ 
+   public void addAttributes(AttributeSet attributes)
+   {
+     Enumeration e = attributes.getAttributeNames();
+     while (e.hasMoreElements())
+       {
+         Object name = e.nextElement();
+         Object val = attributes.getAttribute(name);
+         tab.put(name, val);
+       }
+   }
+ 
+   public Object clone()
+   {
+     SimpleAttributeSet s = new SimpleAttributeSet();
+     s.tab = (Hashtable) tab.clone();
+     return s;
+   }
+ 
+   public boolean containsAttribute(Object name, Object value)
+   {
+     return tab.containsKey(name) 
+       && tab.get(name).equals(value);
+   }
+     
+   public boolean containsAttributes(AttributeSet attributes)
+   {
+     Enumeration e = attributes.getAttributeNames();
+     while (e.hasMoreElements())
+       {
+         Object name = e.nextElement();
+         Object val = attributes.getAttribute(name);
+         if (! containsAttribute(name, val))
+           return false;		
+       }
+     return true;
+   }
+ 
+   public AttributeSet copyAttributes()
+   {
+     return (AttributeSet) clone();
+   }
+ 
+   public boolean equals(Object obj)
+   {
+     return (obj != null) 
+       && (obj instanceof SimpleAttributeSet)
+       && ((SimpleAttributeSet)obj).tab.equals(this.tab);
+   }
+ 
+   public Object getAttribute(Object name)
+   {
+     Object val = tab.get(name);
+     if (val != null) 
+       return val;
+ 
+     Object p = getResolveParent();
+     if (p != null && p instanceof AttributeSet)
+       return (((AttributeSet)p).getAttribute(name));
+ 
+     return null;
+   }
+ 
+   public int getAttributeCount()
+   {
+     return tab.size();
+   }
+ 
+   public Enumeration getAttributeNames()
+   {
+     return tab.keys();
+   }
+ 
+   public AttributeSet getResolveParent()
+   {
+     return (AttributeSet) tab.get(ResolveAttribute);
+   }
+ 
+   public int hashCode()
+   {
+     return tab.hashCode();
+   }
+ 
+   public boolean isDefined(Object attrName)
+   {
+     return tab.containsKey(attrName);
+   }
+ 
+   public boolean isEmpty()
+   {
+     return tab.isEmpty();	
+   }
+         
+   public boolean isEqual(AttributeSet attr)
+   {
+     return this.equals(attr);
+   }
+     
+   public void removeAttribute(Object name)
+   {
+     tab.remove(name);
+   }
+ 
+   public void removeAttributes(AttributeSet attributes)
+   {
+     removeAttributes(attributes.getAttributeNames());
+   }
+ 
+   public void removeAttributes(Enumeration names)
+   {
+     while (names.hasMoreElements())
+       {
+         removeAttribute(names.nextElement());
+       }	
+   }
+ 
+   public void setResolveParent(AttributeSet parent)
+   {
+     addAttribute(ResolveAttribute, parent);
+   }
+     
+   public String toString()
+   {
+     return tab.toString();
+   }    
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/StringContent.java gcc-4.0.0/libjava/javax/swing/text/StringContent.java
*** gcc-3.4.3/libjava/javax/swing/text/StringContent.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/StringContent.java	Thu Feb 17 07:48:53 2005
***************
*** 0 ****
--- 1,304 ----
+ /* StringContent.java --
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.io.Serializable;
+ import java.util.Iterator;
+ import java.util.Vector;
+ 
+ import javax.swing.undo.AbstractUndoableEdit;
+ import javax.swing.undo.CannotRedoException;
+ import javax.swing.undo.CannotUndoException;
+ import javax.swing.undo.UndoableEdit;
+ 
+ /**
+  * An implementation of the <code>AbstractDocument.Content</code>
+  * interface useful for small documents or debugging. The character
+  * content is a simple character array. It's not really efficient.
+  * 
+  * <p>Do not use this class for large size.</p>
+  */
+ public final class StringContent implements AbstractDocument.Content, Serializable
+ {
+   private char[] content;
+ 
+   private int count;
+ 
+   private Vector positions = new Vector();
+ 
+   private class InsertUndo extends AbstractUndoableEdit
+   {
+     private int start;
+     
+     private int length;
+ 
+     private String redoContent;
+ 
+     public InsertUndo(int start, int length)
+     {
+       super();
+       this.start = start;
+       this.length = length;
+     }
+ 
+     public void undo()
+     {
+       super.undo();
+       try
+         {
+           StringContent.this.checkLocation(this.start, this.length);
+           this.redoContent = new String(StringContent.this.content, this.start, this.length);
+           StringContent.this.remove(this.start, this.length);
+         }
+       catch (BadLocationException b)
+         {
+           throw new CannotUndoException();
+         }
+     }
+     
+     public void redo()
+     {
+       super.redo();
+       try
+         {
+           StringContent.this.insertString(this.start, this.redoContent);
+         }
+       catch (BadLocationException b)
+         {
+           throw new CannotRedoException();
+         }
+     }
+   }
+ 
+   private class RemoveUndo extends AbstractUndoableEdit
+   {
+     private int start;
+ 
+     private String undoString;
+ 
+     public RemoveUndo(int start, String str)
+     {
+       super();
+       this.start = start;
+       this.undoString = str;
+     }
+ 
+     public void undo()
+     {
+       super.undo();
+       try
+         {
+           StringContent.this.insertString(this.start, this.undoString);
+         }
+       catch (BadLocationException bad)
+         {
+           throw new CannotUndoException();
+         }
+     }
+ 
+     public void redo()
+     {
+       super.redo();
+       try
+         {
+           int end = this.undoString.length();
+           StringContent.this.remove(this.start, end);
+         }
+       catch (BadLocationException bad)
+         {
+           throw new CannotRedoException();
+         }
+     }
+   }
+ 
+   private class StickyPosition implements Position
+   {
+     private int offset = -1;
+ 
+     public StickyPosition(int offset)
+     {
+       this.offset = offset;
+     }
+ 
+     private void setOffset(int offset)
+     {
+       this.offset = this.offset >= 0 ? offset : -1;
+     }
+ 
+     /**
+      * Should be >=0.
+      */
+     public int getOffset()
+     {
+       return offset < 0 ? 0 : offset;
+     }
+   }
+ 
+   public StringContent()
+   {
+     this(1);
+   }
+ 
+   public StringContent(int initialLength)
+   {
+     super();
+     if (initialLength < 1)
+       initialLength = 1;
+     this.content = new char[initialLength];
+     this.content[0] = '\n';
+     this.count = 1;
+   }
+ 
+   protected Vector getPositionsInRange(Vector v,
+                                        int offset,
+                                        int length)
+   {
+     Vector refPos = new Vector();
+     Iterator iter = this.positions.iterator();
+     while(iter.hasNext())
+       {
+         Position p = (Position)iter.next();
+         if ((offset <= p.getOffset())
+             && (p.getOffset() <= (offset + length)))
+           refPos.add(p);
+       }
+     return refPos;
+   }
+ 
+   public Position createPosition(int offset) throws BadLocationException
+   {
+     if (offset < this.count || offset > this.count)
+       checkLocation(offset, 0);
+     StickyPosition sp = new StickyPosition(offset);
+     this.positions.add(sp);
+     return sp;
+   }
+   
+   public int length()
+   {
+     return this.count;
+   }
+   
+   public UndoableEdit insertString(int where, String str)
+     throws BadLocationException
+   {
+     checkLocation(where, 0);
+     if (where == this.count)
+       throw new BadLocationException("Invalid location", 1);
+     if (str == null)
+       throw new NullPointerException();
+     char[] insert = str.toCharArray();
+     char[] temp = new char[this.content.length + insert.length];
+     this.count += insert.length;
+     // Copy array and insert the string.
+     if (where > 0)
+       System.arraycopy(this.content, 0, temp, 0, where);
+     System.arraycopy(insert, 0, temp, where, insert.length);
+     System.arraycopy(this.content, where, temp, (where + insert.length), (temp.length - where - insert.length));
+     if (this.content.length < temp.length)
+       this.content = new char[temp.length];
+     // Copy the result in the original char array.
+     System.arraycopy(temp, 0, this.content, 0, temp.length);
+     // Move all the positions.
+     Vector refPos = getPositionsInRange(this.positions, where, temp.length - where);
+     Iterator iter = refPos.iterator();
+     while (iter.hasNext())
+       {
+         StickyPosition p = (StickyPosition)iter.next();
+         p.setOffset(p.getOffset() + str.length());
+       }
+     InsertUndo iundo = new InsertUndo(where, insert.length);
+     return iundo;
+   }
+   
+   public UndoableEdit remove(int where, int nitems) throws BadLocationException
+   {
+     checkLocation(where, nitems);
+     char[] temp = new char[(this.content.length - nitems)];
+     this.count = this.count - nitems;
+     RemoveUndo rundo = new RemoveUndo(where, new String(this.content, where, nitems));
+     // Copy array.
+     System.arraycopy(this.content, 0, temp, 0, where);
+     System.arraycopy(this.content, where + nitems, temp, where, this.content.length - where - nitems);
+     this.content = new char[temp.length];
+     // Then copy the result in the original char array.
+     System.arraycopy(temp, 0, this.content, 0, this.content.length);
+     // Move all the positions.
+     Vector refPos = getPositionsInRange(this.positions, where, this.content.length + nitems - where);
+     Iterator iter = refPos.iterator();
+     while (iter.hasNext())
+       {
+         StickyPosition p = (StickyPosition)iter.next();
+         int result = p.getOffset() - nitems;
+         p.setOffset(result);
+         if (result < 0)
+           this.positions.remove(p);
+       }
+     return rundo;
+   }
+   
+   public String getString(int where, int len) throws BadLocationException
+   {
+     checkLocation(where, len);
+     return new String (this.content, where, len);
+   }
+   
+   public void getChars(int where, int len, Segment txt) throws BadLocationException
+   {
+     checkLocation(where, len);
+     if (txt != null)
+       {
+         txt.array = this.content;
+         txt.offset = where;
+         txt.count = len;
+       }
+   }
+ 
+   private void checkLocation(int where, int len) throws BadLocationException
+   {
+     if (where < 0)
+       throw new BadLocationException("Invalid location", 1);
+     else if (where > this.count)
+       throw new BadLocationException("Invalid location", this.count);
+     else if ((where + len)>this.count)
+       throw new BadLocationException("Invalid range", this.count);
+   }
+   
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/Style.java gcc-4.0.0/libjava/javax/swing/text/Style.java
*** gcc-3.4.3/libjava/javax/swing/text/Style.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/Style.java	Thu Jun 17 23:43:15 2004
*************** package javax.swing.text;
*** 39,47 ****
  
  import javax.swing.event.ChangeListener;
  
! public interface Style
  {
!     void addChangeListener(ChangeListener l);
!     String getName();
!     void removeChangeListener(ChangeListener l);
  }
--- 39,64 ----
  
  import javax.swing.event.ChangeListener;
  
! public interface Style extends MutableAttributeSet
  {
!   /**
!    * Returns the name of the style.
!    *
!    * @return the name
!    */
!   String getName();
! 
!   /**
!    * Adds a <code>ChangeListener</code> object to the style.
!    *
!    * @param listener the listener object to add
!    */
!   void addChangeListener(ChangeListener listener);
! 
!   /**
!    * Removes a <code>ChangeListener</code> from to the style.
!    *
!    * @param listener the listener object to remove,
!    */
!   void removeChangeListener(ChangeListener listener);
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/StyleConstants.java gcc-4.0.0/libjava/javax/swing/text/StyleConstants.java
*** gcc-3.4.3/libjava/javax/swing/text/StyleConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/StyleConstants.java	Tue Nov 30 23:59:08 2004
***************
*** 0 ****
--- 1,441 ----
+ /* StyleConstants.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.Color;
+ import java.awt.Component;
+ 
+ import javax.swing.Icon;
+ 
+ public class StyleConstants
+ {
+   public static final int ALIGN_LEFT = 0;
+   public static final int ALIGN_CENTER = 1;
+   public static final int ALIGN_RIGHT = 2;
+   public static final int ALIGN_JUSTIFIED = 3;
+ 
+   public static final Object Background = CharacterConstants.Background;
+   public static final Object BidiLevel = CharacterConstants.BidiLevel;
+   public static final Object Bold = CharacterConstants.Bold;
+   public static final Object ComponentAttribute = CharacterConstants.ComponentAttribute;
+   public static final Object FontFamily = CharacterConstants.Family;
+   public static final Object FontSize = CharacterConstants.Size;
+   public static final Object Foreground = CharacterConstants.Foreground;
+   public static final Object IconAttribute = CharacterConstants.IconAttribute;
+   public static final Object Italic = CharacterConstants.Italic;
+   public static final Object StrikeThrough = CharacterConstants.StrikeThrough;
+   public static final Object Subscript = CharacterConstants.Subscript;
+   public static final Object Superscript = CharacterConstants.Superscript;
+   public static final Object Underline = CharacterConstants.Underline;
+ 
+   public static final Object Alignment = ParagraphConstants.Alignment;
+   public static final Object FirstLineIndent = ParagraphConstants.FirstLineIndent;
+   public static final Object LeftIndent = ParagraphConstants.LeftIndent;
+   public static final Object LineSpacing = ParagraphConstants.LineSpacing;
+   public static final Object Orientation = ParagraphConstants.Orientation;
+   public static final Object RightIndent = ParagraphConstants.RightIndent;
+   public static final Object SpaceAbove = ParagraphConstants.SpaceAbove;
+   public static final Object SpaceBelow = ParagraphConstants.SpaceBelow;
+   public static final Object TabSet = ParagraphConstants.TabSet;
+ 
+   public static final String ComponentElementName = "component";
+   public static final String IconElementName = "icon";
+ 
+   public static final Object ComposedTextAttribute = new StyleConstants("composed text");
+   public static final Object ModelAttribute = new StyleConstants("model");
+   public static final Object NameAttribute = new StyleConstants("name");
+   public static final Object ResolveAttribute = new StyleConstants("resolver");
+ 
+   String keyname;
+   
+   private StyleConstants(String k) 
+   {
+     keyname = k;
+   }
+ 
+   public String toString()
+   {
+     return keyname;
+   }
+ 
+   public static int getAlignment(AttributeSet a)
+   {
+     if (a.isDefined(Alignment))
+       return ((Integer)a.getAttribute(Alignment)).intValue();
+     else
+       return ALIGN_LEFT;      
+   } 
+ 
+   public static Color getBackground(AttributeSet a)
+   {
+     if (a.isDefined(Background))
+       return (Color) a.getAttribute(Background);
+     else
+       return Color.BLACK;
+   } 
+   
+   public static int getBidiLevel(AttributeSet a)
+   {
+     if (a.isDefined(BidiLevel))
+       return ((Integer)a.getAttribute(BidiLevel)).intValue();
+     else
+       return 0;
+   } 
+ 
+   public static Component getComponent(AttributeSet a)
+   {
+     if (a.isDefined(ComponentAttribute))
+       return (Component) a.getAttribute(ComponentAttribute);
+     else
+       return (Component) null;
+   } 
+ 
+   public static float getFirstLineIndent(AttributeSet a)
+   {
+     if (a.isDefined(FirstLineIndent))
+       return ((Float)a.getAttribute(FirstLineIndent)).floatValue();
+     else
+       return 0.f;
+   } 
+ 
+   public static String getFontFamily(AttributeSet a)
+   {
+     if (a.isDefined(FontFamily))
+       return (String) a.getAttribute(FontFamily);
+     else
+       return "Monospaced";
+   } 
+ 
+   public static int getFontSize(AttributeSet a)
+   {
+     if (a.isDefined(FontSize))
+       return ((Integer)a.getAttribute(FontSize)).intValue();
+     else
+       return 12;
+   } 
+ 
+   public static Color getForeground(AttributeSet a)
+   {
+     if (a.isDefined(Foreground))
+       return (Color) a.getAttribute(Foreground);
+     else
+       return Color.BLACK;
+   } 
+ 
+   public static Icon getIcon(AttributeSet a)
+   {
+     if (a.isDefined(IconAttribute))
+       return (Icon) a.getAttribute(IconAttribute);
+     else
+       return (Icon) null;
+   } 
+ 
+   public static float getLeftIndent(AttributeSet a)
+   {
+     if (a.isDefined(LeftIndent))
+       return ((Float)a.getAttribute(LeftIndent)).floatValue();
+     else
+       return 0.f;  
+   } 
+ 
+   public static float getLineSpacing(AttributeSet a)
+   {
+     if (a.isDefined(LineSpacing))
+       return ((Float)a.getAttribute(LineSpacing)).floatValue();
+     else
+       return 0.f;  
+   } 
+ 
+   public static float getRightIndent(AttributeSet a)
+   {
+     if (a.isDefined(RightIndent))
+       return ((Float)a.getAttribute(RightIndent)).floatValue();
+     else
+       return 0.f;  
+   } 
+ 
+   public static float getSpaceAbove(AttributeSet a)
+   {
+     if (a.isDefined(SpaceAbove))
+       return ((Float)a.getAttribute(SpaceAbove)).floatValue();
+     else
+       return 0.f;  
+   } 
+ 
+   public static float getSpaceBelow(AttributeSet a)
+   {
+     if (a.isDefined(SpaceBelow))
+       return ((Float)a.getAttribute(SpaceBelow)).floatValue();
+     else
+       return 0.f;  
+   } 
+ 
+   public static javax.swing.text.TabSet getTabSet(AttributeSet a)
+   {
+     if (a.isDefined(StyleConstants.TabSet))
+       return (javax.swing.text.TabSet) a.getAttribute(StyleConstants.TabSet);
+     else
+       return (javax.swing.text.TabSet) null;
+   } 
+ 
+   public static boolean isBold(AttributeSet a)
+   {
+     if (a.isDefined(Bold))
+       return ((Boolean) a.getAttribute(Bold)).booleanValue();
+     else
+       return false;    
+   } 
+ 
+   public static boolean isItalic(AttributeSet a)
+   {
+     if (a.isDefined(Italic))
+       return ((Boolean) a.getAttribute(Italic)).booleanValue();
+     else
+       return false;    
+   } 
+ 
+   public static boolean isStrikeThrough(AttributeSet a)
+   {
+     if (a.isDefined(StrikeThrough))
+       return ((Boolean) a.getAttribute(StrikeThrough)).booleanValue();
+     else
+       return false;    
+   } 
+ 
+   public static boolean isSubscript(AttributeSet a)
+   {
+     if (a.isDefined(Subscript))
+       return ((Boolean) a.getAttribute(Subscript)).booleanValue();
+     else
+       return false;    
+   } 
+ 
+   public static boolean isSuperscript(AttributeSet a)
+   {
+     if (a.isDefined(Superscript))
+       return ((Boolean) a.getAttribute(Superscript)).booleanValue();
+     else
+       return false;    
+   } 
+ 
+   public static boolean isUnderline(AttributeSet a)
+   {
+     if (a.isDefined(Underline))
+       return ((Boolean) a.getAttribute(Underline)).booleanValue();
+     else
+       return false;    
+   } 
+ 
+   public static void setAlignment(MutableAttributeSet a, int align)
+   {
+     a.addAttribute(Alignment, new Integer(align));
+   } 
+ 
+   public static void setBackground(MutableAttributeSet a, Color fg)
+   {
+     a.addAttribute(Background, fg);
+   } 
+ 
+   public static void setBidiLevel(MutableAttributeSet a, int lev)
+   {
+     a.addAttribute(BidiLevel, new Integer(lev));
+   } 
+ 
+   public static void setBold(MutableAttributeSet a, boolean b)
+   {
+     a.addAttribute(Bold, Boolean.valueOf(b));
+   } 
+   
+   public static void setComponent(MutableAttributeSet a, Component c)
+   {
+     a.addAttribute(ComponentAttribute, c);
+   } 
+ 
+   public static void setFirstLineIndent(MutableAttributeSet a, float i)
+   {
+     a.addAttribute(FirstLineIndent, new Float(i));
+   } 
+ 
+   public static void setFontFamily(MutableAttributeSet a, String fam)
+   {
+     a.addAttribute(FontFamily, fam);
+   } 
+ 
+   public static void setFontSize(MutableAttributeSet a, int s)
+   {
+     a.addAttribute(FontSize, new Integer(s));
+   } 
+ 
+   public static void setForeground(MutableAttributeSet a, Color fg)
+   {
+     a.addAttribute(Foreground, fg);
+   }
+ 
+   public static void setIcon(MutableAttributeSet a, Icon c)
+   {
+     a.addAttribute(IconAttribute, c);
+   }
+  
+   public static void setItalic(MutableAttributeSet a, boolean b)
+   {
+     a.addAttribute(Italic, Boolean.valueOf(b));
+   }
+  
+   public static void setLeftIndent(MutableAttributeSet a, float i)
+   {
+     a.addAttribute(LeftIndent, new Float(i));
+   } 
+ 
+   public static void setLineSpacing(MutableAttributeSet a, float i)
+   {
+     a.addAttribute(LineSpacing, new Float(i));
+   } 
+ 
+   public static void setRightIndent(MutableAttributeSet a, float i)
+   {
+     a.addAttribute(RightIndent, new Float(i));
+   } 
+ 
+   public static void setSpaceAbove(MutableAttributeSet a, float i)
+   {
+     a.addAttribute(SpaceAbove, new Float(i));
+   } 
+ 
+   public static void setSpaceBelow(MutableAttributeSet a, float i)
+   {
+     a.addAttribute(SpaceBelow, new Float(i));
+   } 
+ 
+   public static void setStrikeThrough(MutableAttributeSet a, boolean b)
+   {
+     a.addAttribute(StrikeThrough, Boolean.valueOf(b));
+   } 
+ 
+   public static void setSubscript(MutableAttributeSet a, boolean b)
+   {
+     a.addAttribute(Subscript, Boolean.valueOf(b));
+   } 
+ 
+   public static void setSuperscript(MutableAttributeSet a, boolean b)
+   {
+     a.addAttribute(Superscript, Boolean.valueOf(b));
+   } 
+ 
+   public static void setTabSet(MutableAttributeSet a, javax.swing.text.TabSet tabs)
+   {
+     a.addAttribute(StyleConstants.TabSet, tabs);
+   } 
+ 
+   public static void setUnderline(MutableAttributeSet a, boolean b)
+   {
+     a.addAttribute(Underline, Boolean.valueOf(b));
+   } 
+ 
+   // The remainder are so-called "typesafe enumerations" which 
+   // alias subsets of the above constants.
+   public static class CharacterConstants
+     extends StyleConstants
+     implements AttributeSet.CharacterAttribute
+   {
+     private CharacterConstants(String k) 
+     {
+       super(k);
+     }
+     
+     public static Object Background = ColorConstants.Background;
+     public static Object BidiLevel = new CharacterConstants("bidiLevel");
+     public static Object Bold = FontConstants.Bold;
+     public static Object ComponentAttribute = new CharacterConstants("component");
+     public static Object Family = FontConstants.Family;
+     public static Object Size = FontConstants.Size;
+     public static Object Foreground = ColorConstants.Foreground;
+     public static Object IconAttribute = new CharacterConstants("icon");
+     public static Object Italic = FontConstants.Italic;
+     public static Object StrikeThrough = new CharacterConstants("strikethrough");
+     public static Object Subscript = new CharacterConstants("subscript");
+     public static Object Superscript = new CharacterConstants("superscript");
+     public static Object Underline = new CharacterConstants("underline");
+   }
+ 
+   public static class ColorConstants
+     extends StyleConstants
+     implements AttributeSet.ColorAttribute, AttributeSet.CharacterAttribute
+   {
+     private ColorConstants(String k) 
+     {
+       super(k);
+     }
+     public static Object Foreground = new ColorConstants("foreground");
+     public static Object Background = new ColorConstants("background");
+   }
+ 
+   public static class FontConstants
+     extends StyleConstants
+     implements AttributeSet.FontAttribute, AttributeSet.CharacterAttribute
+   {
+     private FontConstants(String k) 
+     {
+       super(k);
+     }
+     public static Object Bold = new FontConstants("bold");
+     public static Object Family = new FontConstants("family");
+     public static Object Italic = new FontConstants("italic");
+     public static Object Size = new FontConstants("size");
+   }
+ 
+   public static class ParagraphConstants
+     extends StyleConstants
+     implements AttributeSet.ParagraphAttribute
+   {
+     private ParagraphConstants(String k) 
+     {
+       super(k);
+     }
+     public static Object Alignment = new ParagraphConstants("Alignment");
+     public static Object FirstLineIndent = new ParagraphConstants("FirstLineIndent");
+     public static Object LeftIndent = new ParagraphConstants("LeftIndent");
+     public static Object LineSpacing = new ParagraphConstants("LineSpacing");
+     public static Object Orientation = new ParagraphConstants("Orientation");
+     public static Object RightIndent = new ParagraphConstants("RightIndent");
+     public static Object SpaceAbove = new ParagraphConstants("SpaceAbove");
+     public static Object SpaceBelow = new ParagraphConstants("SpaceBelow");
+     public static Object TabSet = new ParagraphConstants("TabSet");
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/StyleContext.java gcc-4.0.0/libjava/javax/swing/text/StyleContext.java
*** gcc-3.4.3/libjava/javax/swing/text/StyleContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/StyleContext.java	Tue Nov 30 23:59:08 2004
***************
*** 0 ****
--- 1,699 ----
+ /* StyleContext.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.Color;
+ import java.awt.Font;
+ import java.awt.FontMetrics;
+ import java.awt.Toolkit;
+ import java.io.IOException;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.Serializable;
+ import java.util.Enumeration;
+ import java.util.EventListener;
+ import java.util.Hashtable;
+ 
+ import javax.swing.event.ChangeEvent;
+ import javax.swing.event.ChangeListener;
+ import javax.swing.event.EventListenerList;
+ 
+ public class StyleContext 
+     implements Serializable, AbstractDocument.AttributeContext
+ {
+   public class NamedStyle
+     implements Serializable, Style
+   {
+     protected ChangeEvent changeEvent;
+     protected EventListenerList listenerList;
+       
+     AttributeSet attributes;
+     String name;
+ 
+     public NamedStyle()
+     {
+       this(null, null);
+     }
+ 
+     public NamedStyle(Style parent)
+     {
+       this(null, parent);
+     }
+ 
+     public NamedStyle(String name, Style parent)
+     {
+       this.name = name;
+       this.attributes = getEmptySet();
+       this.changeEvent = new ChangeEvent(this);
+       this.listenerList = new EventListenerList();
+       setResolveParent(parent);
+     }
+ 
+     public String getName()
+     {
+       return name;
+     }
+ 
+     public void setName(String n)
+     {
+       name = n;
+       fireStateChanged();
+     }
+ 
+     public void addChangeListener(ChangeListener l)
+     {
+       listenerList.add(ChangeListener.class, l);
+     }
+       
+     public void removeChangeListener(ChangeListener l)
+     {
+       listenerList.remove(ChangeListener.class, l);
+     }
+       
+     public EventListener[] getListeners(Class listenerType)
+     {
+       return listenerList.getListeners(listenerType);
+     }
+ 
+     public ChangeListener[] getChangeListeners()
+     {
+       return (ChangeListener[]) getListeners(ChangeListener.class);
+     }
+ 
+     protected  void fireStateChanged()
+     {
+       ChangeListener[] listeners = getChangeListeners();
+       for (int i = 0; i < listeners.length; ++i)
+         {
+           listeners[i].stateChanged(changeEvent);
+         }
+     }
+ 
+     public void addAttribute(Object name, Object value)
+     {
+       attributes = StyleContext.this.addAttribute(attributes, name, value);
+       fireStateChanged();
+     }
+ 
+     public void addAttributes(AttributeSet attr)
+     {
+       attributes = StyleContext.this.addAttributes(attributes, attr);
+       fireStateChanged();
+     }
+ 
+     public boolean containsAttribute(Object name, Object value)
+     {
+       return attributes.containsAttribute(name, value);
+     }
+       
+     public boolean containsAttributes(AttributeSet attrs)
+     {
+       return attributes.containsAttributes(attrs);
+     }
+ 
+     public AttributeSet copyAttributes()
+     {
+       return attributes.copyAttributes();
+     }
+             
+     public Object getAttribute(Object attrName)
+     {
+       return attributes.getAttribute(attrName);
+     }
+ 
+     public int getAttributeCount()
+     {
+       return attributes.getAttributeCount();
+     }
+ 
+     public Enumeration getAttributeNames()
+     {
+       return attributes.getAttributeNames();
+     }
+       
+     public boolean isDefined(Object attrName)
+     {
+       return attributes.isDefined(attrName);        
+     }
+ 
+     public boolean isEqual(AttributeSet attr)
+     {
+       return attributes.isEqual(attr);
+     }
+ 
+     public void removeAttribute(Object name)
+     {
+       attributes = StyleContext.this.removeAttribute(attributes, name);
+       fireStateChanged();
+     }
+ 
+     public void removeAttributes(AttributeSet attrs)
+     {
+       attributes = StyleContext.this.removeAttributes(attributes, attrs);
+       fireStateChanged();
+     }
+ 
+     public void removeAttributes(Enumeration names)
+     {
+       attributes = StyleContext.this.removeAttributes(attributes, names);
+       fireStateChanged();
+     }
+ 
+ 
+     public AttributeSet getResolveParent()
+     {
+       return attributes.getResolveParent();        
+     }
+ 
+     public void setResolveParent(AttributeSet parent)
+     {
+       attributes = StyleContext.this.addAttribute(attributes, ResolveAttribute, parent);
+       fireStateChanged();
+     }
+       
+     public String toString()
+     {
+       return ("[NamedStyle: name=" + name + ", attrs=" + attributes.toString() + "]");
+     }      
+   }
+   
+   public class SmallAttributeSet
+     implements AttributeSet
+   {
+     final Object [] attrs;
+     public SmallAttributeSet(AttributeSet a)
+     {
+       if (a == null)
+         attrs = new Object[0];
+       else
+         {
+           int n = a.getAttributeCount();
+           int i = 0;
+           attrs = new Object[n * 2];
+           Enumeration e = a.getAttributeNames();
+           while (e.hasMoreElements())
+             {
+               Object name = e.nextElement();
+               attrs[i++] = name;
+               attrs[i++] = a.getAttribute(name);
+             }
+         }
+     }
+ 
+     public SmallAttributeSet(Object [] a)
+     {
+       if (a == null)
+         attrs = new Object[0];
+       else
+         {
+           attrs = new Object[a.length];
+           System.arraycopy(a, 0, attrs, 0, a.length);
+         }
+     }
+ 
+     public Object clone()
+     {
+       return new SmallAttributeSet(this.attrs);
+     }
+ 
+     public boolean containsAttribute(Object name, Object value)
+     {
+       for (int i = 0; i < attrs.length; i += 2)
+         {
+           if (attrs[i].equals(name) &&
+               attrs[i+1].equals(value))
+             return true;
+         }
+       return false;
+     }
+ 
+     public boolean containsAttributes(AttributeSet a)
+     {
+       Enumeration e = a.getAttributeNames();
+       while (e.hasMoreElements())
+         {
+           Object name = e.nextElement();
+           Object val = a.getAttribute(name);
+           if (!containsAttribute(name, val))
+             return false;
+         }
+       return true;			
+     }
+ 
+     public AttributeSet copyAttributes()
+     {
+       return (AttributeSet) clone();
+     }
+ 
+     public boolean equals(Object obj)
+     {
+       return 
+         (obj instanceof SmallAttributeSet)
+         && this.isEqual((AttributeSet)obj);
+     }
+  
+     public Object getAttribute(Object key)
+     {
+       for (int i = 0; i < attrs.length; i += 2)
+         {
+           if (attrs[i].equals(key))
+             return attrs[i+1];
+         }
+             
+       Object p = getResolveParent();
+       if (p != null && p instanceof AttributeSet)
+         return (((AttributeSet)p).getAttribute(key));
+       
+       return null;
+     }
+ 
+     public int getAttributeCount()
+     {
+       return attrs.length / 2;
+     }
+ 
+     public Enumeration getAttributeNames()
+     {      
+       return new Enumeration() 
+         {
+           int i = 0;
+           public boolean hasMoreElements() 
+           { 
+             return i < attrs.length; 
+           }
+           public Object nextElement() 
+           { 
+             i += 2; 
+             return attrs[i-2]; 
+           }
+         };
+     }
+ 
+     public AttributeSet getResolveParent()
+     {
+       return (AttributeSet) getAttribute(ResolveAttribute);
+     }
+ 
+     public int hashCode()
+     {
+       return java.util.Arrays.asList(attrs).hashCode();
+     }
+ 
+     public boolean isDefined(Object key)
+     {
+       for (int i = 0; i < attrs.length; i += 2)
+         {
+           if (attrs[i].equals(key))
+             return true;
+         }
+       return false;
+     }
+ 	
+     public boolean isEqual(AttributeSet attr)
+     {
+       return attr != null 
+         && attr.containsAttributes(this)
+         && this.containsAttributes(attr);
+     }
+ 	
+     public String toString()
+     {
+       StringBuffer sb = new StringBuffer();
+       sb.append("[StyleContext.SmallattributeSet:");
+       for (int i = 0; i < attrs.length; ++i)
+         {
+           sb.append(" (");
+           sb.append(attrs[i].toString());
+           sb.append("=");
+           sb.append(attrs[i+1].toString());
+           sb.append(")");
+         }
+       sb.append("]");
+       return sb.toString();
+     }
+   }
+ 
+   // FIXME: official javadocs suggest that these might be more usefully
+   // implemented using a WeakHashMap, but not sure if that works most
+   // places or whether it really matters anyways.
+   //
+   // FIXME: also not sure if these tables ought to be static (singletons),
+   // shared across all StyleContexts. I think so, but it's not clear in
+   // docs. revert to non-shared if you think it matters.
+ 
+   public static final String DEFAULT_STYLE = "default";
+   
+   static Hashtable sharedAttributeSets = new Hashtable();
+   static Hashtable sharedFonts = new Hashtable();
+ 
+   static StyleContext defaultStyleContext = new StyleContext();
+   static final int compressionThreshold = 9;
+   
+   EventListenerList listenerList;
+   Hashtable styleTable;
+   
+   public StyleContext()
+   {
+     listenerList = new EventListenerList();
+     styleTable = new Hashtable();
+   }
+ 
+   protected SmallAttributeSet createSmallAttributeSet(AttributeSet a)
+   {
+     return new SmallAttributeSet(a);
+   }
+   
+   protected MutableAttributeSet createLargeAttributeSet(AttributeSet a)
+   {
+     return new SimpleAttributeSet(a);
+   }
+ 
+   public void addChangeListener(ChangeListener listener)
+   {
+     listenerList.add(ChangeListener.class, listener);
+   }
+ 
+   public void removeChangeListener(ChangeListener listener)
+   {
+     listenerList.remove(ChangeListener.class, listener);
+   }
+ 
+   public ChangeListener[] getChangeListeners()
+   {
+     return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
+   }
+     
+   public Style addStyle(String name, Style parent)
+   {
+     Style newStyle = new NamedStyle(name, parent);
+     if (name != null)
+       styleTable.put(name, newStyle);
+     return newStyle;
+   }
+ 
+   public void removeStyle(String name)
+   {
+     styleTable.remove(name);
+   }
+ 
+   public Style getStyle(String name)
+   {
+     return (Style) styleTable.get(name);
+   }
+ 
+   public Enumeration getStyleNames()
+   {
+     return styleTable.keys();
+   }
+ 
+   //
+   // StyleContexts only understand the "simple" model of fonts present in
+   // pre-java2d systems: fonts are a family name, a size (integral number
+   // of points), and a mask of style parameters (plain, bold, italic, or
+   // bold|italic). We have an inner class here called SimpleFontSpec which
+   // holds such triples.
+   //
+   // A SimpleFontSpec can be built for *any* AttributeSet because the size,
+   // family, and style keys in an AttributeSet have default values (defined
+   // over in StyleConstants).
+   //
+   // We keep a static cache mapping SimpleFontSpecs to java.awt.Fonts, so
+   // that we reuse Fonts between styles and style contexts.
+   // 
+ 
+   private static class SimpleFontSpec
+   {
+     String family;
+     int style;
+     int size;
+     public SimpleFontSpec(String family,
+                           int style,
+                           int size)
+     {
+       this.family = family;
+       this.style = style;
+       this.size = size;
+     }
+     public boolean equals(Object obj)
+     {
+       return (obj != null)
+         && (obj instanceof SimpleFontSpec)
+         && (((SimpleFontSpec)obj).family.equals(this.family))
+         && (((SimpleFontSpec)obj).style == this.style)
+         && (((SimpleFontSpec)obj).size == this.size);
+     }
+     public int hashCode()
+     {
+       return family.hashCode() + style + size;
+     }
+   }
+   
+   public Font getFont(AttributeSet attr)
+   {
+     String family = StyleConstants.getFontFamily(attr);
+     int style = Font.PLAIN;
+     if (StyleConstants.isBold(attr))
+       style += Font.BOLD;
+     if (StyleConstants.isItalic(attr))
+       style += Font.ITALIC;      
+     int size = StyleConstants.getFontSize(attr);
+     return getFont(family, style, size);
+   }
+ 
+   public Font getFont(String family, int style, int size)
+   {
+     SimpleFontSpec spec = new SimpleFontSpec(family, style, size);
+     if (sharedFonts.containsKey(spec))
+       return (Font) sharedFonts.get(spec);
+     else
+       {
+         Font tmp = new Font(family, style, size);
+         sharedFonts.put(spec, tmp);
+         return tmp;
+       }
+   }
+   
+   public FontMetrics getFontMetrics(Font f)
+   {
+     return Toolkit.getDefaultToolkit().getFontMetrics(f);
+   }
+ 
+   public Color getForeground(AttributeSet a)
+   {
+     return StyleConstants.getForeground(a);
+   }
+ 
+   public Color getBackground(AttributeSet a)
+   {
+     return StyleConstants.getBackground(a);
+   }
+ 
+   protected int getCompressionThreshold() 
+   {
+     return compressionThreshold;
+   }
+ 
+   public static StyleContext getDefaultStyleContext()
+   {
+     return defaultStyleContext;
+   }
+ 
+   public AttributeSet addAttribute(AttributeSet old, Object name, Object value)
+   {
+     if (old instanceof MutableAttributeSet)
+       {
+         ((MutableAttributeSet)old).addAttribute(name, value);
+         return old;
+       }
+     else 
+       {
+         MutableAttributeSet mutable = createLargeAttributeSet(old);
+         mutable.addAttribute(name, value);
+         if (mutable.getAttributeCount() >= getCompressionThreshold())
+           return mutable;
+         else
+           {
+             SmallAttributeSet small = createSmallAttributeSet(mutable);
+             if (sharedAttributeSets.containsKey(small))
+               small = (SmallAttributeSet) sharedAttributeSets.get(small);
+             else
+               sharedAttributeSets.put(small,small);
+             return small;
+           }
+       }
+   }
+ 
+   public AttributeSet addAttributes(AttributeSet old, AttributeSet attributes)
+   {
+     if (old instanceof MutableAttributeSet)
+       {
+         ((MutableAttributeSet)old).addAttributes(attributes);
+         return old;
+       }
+     else 
+       {
+         MutableAttributeSet mutable = createLargeAttributeSet(old);
+         mutable.addAttributes(attributes);
+         if (mutable.getAttributeCount() >= getCompressionThreshold())
+           return mutable;
+         else
+           {
+             SmallAttributeSet small = createSmallAttributeSet(mutable);
+             if (sharedAttributeSets.containsKey(small))
+               small = (SmallAttributeSet) sharedAttributeSets.get(small);
+             else
+               sharedAttributeSets.put(small,small);
+             return small;
+           }
+       }
+   }
+ 
+   public AttributeSet getEmptySet()
+   {
+     AttributeSet e = createSmallAttributeSet(null);
+     if (sharedAttributeSets.containsKey(e))
+       e = (AttributeSet) sharedAttributeSets.get(e);
+     else
+       sharedAttributeSets.put(e, e);
+     return e;
+   }
+ 
+   public void reclaim(AttributeSet attributes)
+   {
+     if (sharedAttributeSets.containsKey(attributes))
+       sharedAttributeSets.remove(attributes);
+   }
+ 
+   public AttributeSet removeAttribute(AttributeSet old, Object name)
+   {
+     if (old instanceof MutableAttributeSet)
+       {
+         ((MutableAttributeSet)old).removeAttribute(name);
+         if (old.getAttributeCount() < getCompressionThreshold())
+           {
+             SmallAttributeSet small = createSmallAttributeSet(old);
+             if (!sharedAttributeSets.containsKey(small))
+               sharedAttributeSets.put(small,small);
+             old = (AttributeSet) sharedAttributeSets.get(small);
+           }
+         return old;
+       }
+     else 
+       {          
+         MutableAttributeSet mutable = createLargeAttributeSet(old);
+         mutable.removeAttribute(name);
+         SmallAttributeSet small = createSmallAttributeSet(mutable);
+         if (sharedAttributeSets.containsKey(small))
+           small = (SmallAttributeSet) sharedAttributeSets.get(small);
+         else
+           sharedAttributeSets.put(small,small);
+         return small;
+       }
+   }
+ 
+   public AttributeSet removeAttributes(AttributeSet old, AttributeSet attributes)
+   {
+     return removeAttributes(old, attributes.getAttributeNames());
+   }
+ 
+   public AttributeSet removeAttributes(AttributeSet old, Enumeration names)
+   {
+     if (old instanceof MutableAttributeSet)
+       {
+         ((MutableAttributeSet)old).removeAttributes(names);
+         if (old.getAttributeCount() < getCompressionThreshold())
+           {
+             SmallAttributeSet small = createSmallAttributeSet(old);
+             if (!sharedAttributeSets.containsKey(small))
+               sharedAttributeSets.put(small,small);
+             old = (AttributeSet) sharedAttributeSets.get(small);
+           }
+         return old;
+       }
+     else 
+       {          
+         MutableAttributeSet mutable = createLargeAttributeSet(old);
+         mutable.removeAttributes(names);
+         SmallAttributeSet small = createSmallAttributeSet(mutable);
+         if (sharedAttributeSets.containsKey(small))
+           small = (SmallAttributeSet) sharedAttributeSets.get(small);
+         else
+           sharedAttributeSets.put(small,small);
+         return small;
+       }	
+   }
+ 
+ 
+   // FIXME: there's some sort of quasi-serialization stuff in here which I
+   // have left incomplete; I'm not sure I understand the intent properly.
+ 
+   public static Object getStaticAttribute(Object key)
+   {
+     throw new InternalError("not implemented");
+   }
+   
+   public static Object getStaticAttributeKey(Object key)
+   {
+     throw new InternalError("not implemented");
+   }
+ 
+   public static void readAttributeSet(ObjectInputStream in, MutableAttributeSet a)
+     throws ClassNotFoundException, IOException
+   {
+     throw new InternalError("not implemented");
+   }
+   
+   public static void writeAttributeSet(ObjectOutputStream out, AttributeSet a)
+     throws IOException
+   {
+     throw new InternalError("not implemented");
+   }
+ 
+   public void readAttributes(ObjectInputStream in, MutableAttributeSet a)
+     throws ClassNotFoundException, IOException 
+   {
+     throw new InternalError("not implemented");
+   }
+ 
+   public void writeAttributes(ObjectOutputStream out, AttributeSet a)
+     throws IOException
+   {
+     throw new InternalError("not implemented");
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/StyledEditorKit.java gcc-4.0.0/libjava/javax/swing/text/StyledEditorKit.java
*** gcc-3.4.3/libjava/javax/swing/text/StyledEditorKit.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/StyledEditorKit.java	Wed Feb 16 20:03:13 2005
*************** this exception to your version of the li
*** 35,51 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.text;
  
  import java.awt.Color;
  import java.awt.event.ActionEvent;
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.Reader;
  import java.io.Serializable;
! import java.io.Writer;
  import javax.swing.Action;
  import javax.swing.JEditorPane;
  import javax.swing.event.CaretEvent;
--- 35,49 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.text;
  
  import java.awt.Color;
  import java.awt.event.ActionEvent;
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  import java.io.Serializable;
! 
  import javax.swing.Action;
  import javax.swing.JEditorPane;
  import javax.swing.event.CaretEvent;
*************** import javax.swing.event.CaretListener;
*** 53,620 ****
  
  /**
   * StyledEditorKit
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
  public class StyledEditorKit extends DefaultEditorKit
  {
!   static final long serialVersionUID = 7002391892985555948L;
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * UnderlineAction
! 	 */
! 	public static class UnderlineAction extends StyledEditorKit.StyledTextAction {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor UnderlineAction
! 		 */
! 		public UnderlineAction() {
! 			super("TODO");
! 			// TODO
! 		} // UnderlineAction()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * actionPerformed
! 		 * @param event TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
! 
! 
! 	} // UnderlineAction
! 
! 	/**
! 	 * ItalicAction
! 	 */
! 	public static class ItalicAction extends StyledEditorKit.StyledTextAction {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor ItalicAction
! 		 */
! 		public ItalicAction() {
! 			super("TODO");
! 			// TODO
! 		} // ItalicAction()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * actionPerformed
! 		 * @param event TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
! 
! 
! 	} // ItalicAction
! 
! 	/**
! 	 * BoldAction
! 	 */
! 	public static class BoldAction extends StyledEditorKit.StyledTextAction {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor BoldAction
! 		 */
! 		public BoldAction() {
! 			super("TODO");
! 			// TODO
! 		} // BoldAction()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * actionPerformed
! 		 * @param event TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
! 
! 
! 	} // BoldAction
! 
! 	/**
! 	 * AlignmentAction
! 	 */
! 	public static class AlignmentAction extends StyledEditorKit.StyledTextAction {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * a
! 		 */
! 		private int a;
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor AlignmentAction
! 		 * @param nm TODO
! 		 * @param a TODO
! 		 */
! 		public AlignmentAction(String nm, int a) {
! 			super("TODO");
! 			// TODO
! 		} // AlignmentAction()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * actionPerformed
! 		 * @param event TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
! 
! 
! 	} // AlignmentAction
! 
! 	/**
! 	 * ForegroundAction
! 	 */
! 	public static class ForegroundAction extends StyledEditorKit.StyledTextAction {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * fg
! 		 */
! 		private Color fg;
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor ForegroundAction
! 		 * @param nm TODO
! 		 * @param fg TODO
! 		 */
! 		public ForegroundAction(String nm, Color fg) {
! 			super("TODO");
! 			// TODO
! 		} // ForegroundAction()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * actionPerformed
! 		 * @param event TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
! 
! 
! 	} // ForegroundAction
! 
! 	/**
! 	 * FontSizeAction
! 	 */
! 	public static class FontSizeAction extends StyledEditorKit.StyledTextAction {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * size
! 		 */
! 		private int size;
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor FontSizeAction
! 		 * @param nm TODO
! 		 * @param size TODO
! 		 */
! 		public FontSizeAction(String nm, int size) {
! 			super("TODO");
! 			// TODO
! 		} // FontSizeAction()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * actionPerformed
! 		 * @param event TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
! 
! 
! 	} // FontSizeAction
! 
! 	/**
! 	 * FontFamilyAction
! 	 */
! 	public static class FontFamilyAction extends StyledEditorKit.StyledTextAction {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * family
! 		 */
! 		private String family;
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor FontFamilyAction
! 		 * @param nm TODO
! 		 * @param family TODO
! 		 */
! 		public FontFamilyAction(String nm, String family) {
! 			super("TODO");
! 			// TODO
! 		} // FontFamilyAction()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * actionPerformed
! 		 * @param event TODO
! 		 */
! 		public void actionPerformed(ActionEvent event) {
! 			// TODO
! 		} // actionPerformed()
! 
! 
! 	} // FontFamilyAction
! 
! 	/**
! 	 * StyledTextAction
! 	 */
! 	public abstract static class StyledTextAction extends TextAction {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor StyledTextAction
! 		 * @param nm TODO
! 		 */
! 		public StyledTextAction(String nm) {
! 			super(nm);
! 			// TODO
! 		} // StyledTextAction()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getEditor
! 		 * @param event TODO
! 		 * @returns JEditorPane
! 		 */
! 		protected final JEditorPane getEditor(ActionEvent event) {
! 			return null; // TODO
! 		} // getEditor()
! 
! 		/**
! 		 * setCharacterAttributes
! 		 * @param value0 TODO
! 		 * @param value1 TODO
! 		 * @param value2 TODO
! 		 */
! 		protected final void setCharacterAttributes(JEditorPane value0, AttributeSet value1, boolean value2) {
! 			// TODO
! 		} // setCharacterAttributes()
! 
! 		/**
! 		 * getStyledDocument
! 		 * @param value0 TODO
! 		 * @returns StyledDocument
! 		 */
! 		protected final StyledDocument getStyledDocument(JEditorPane value0) {
! 			return null; // TODO
! 		} // getStyledDocument()
! 
! 		/**
! 		 * getStyledEditorKit
! 		 * @param value0 TODO
! 		 * @returns StyledEditorKit
! 		 */
! 		protected final StyledEditorKit getStyledEditorKit(JEditorPane value0) {
! 			return null; // TODO
! 		} // getStyledEditorKit()
! 
! 		/**
! 		 * setParagraphAttributes
! 		 * @param value0 TODO
! 		 * @param value1 TODO
! 		 * @param value2 TODO
! 		 */
! 		protected final void setParagraphAttributes(JEditorPane value0, AttributeSet value1, boolean value2) {
! 			// TODO
! 		} // setParagraphAttributes()
  
  
! 	} // StyledTextAction
  
! 	/**
! 	 * StyledViewFactory
! 	 */
! 	static class StyledViewFactory implements ViewFactory {
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor StyledViewFactory
! 		 */
! 		StyledViewFactory() {
! 			// TODO
! 		} // StyledViewFactory()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * create
! 		 * @param value0 TODO
! 		 * @returns View
! 		 */
! 		public View create(Element value0) {
! 			return null; // TODO
! 		} // create()
  
  
! 	} // StyledViewFactory
  
! 	/**
! 	 * AttributeTracker
! 	 */
! 	 class AttributeTracker implements CaretListener, PropertyChangeListener, Serializable {
  
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
  
  
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * Constructor AttributeTracker
! 		 * @param value0 TODO
! 		 */
! 		AttributeTracker(StyledEditorKit value0) {
! 			// TODO
! 		} // AttributeTracker()
  
  
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
! 		/**
! 		 * updateInputAttributes
! 		 * @param value0 TODO
! 		 * @param value1 TODO
! 		 * @param value2 TODO
! 		 */
! 		void updateInputAttributes(int value0, int value1, JTextComponent value2) {
! 			// TODO
! 		} // updateInputAttributes()
  
! 		/**
! 		 * propertyChange
! 		 * @param value0 TODO
! 		 */
! 		public void propertyChange(PropertyChangeEvent value0) {
! 			// TODO
! 		} // propertyChange()
  
! 		/**
! 		 * caretUpdate
! 		 * @param value0 TODO
! 		 */
! 		public void caretUpdate(CaretEvent value0) {
! 			// TODO
! 		} // caretUpdate()
  
  
! 	} // AttributeTracker
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * currentRun
! 	 */
! 	Element currentRun;
  
! 	/**
! 	 * currentParagraph
! 	 */
! 	Element currentParagraph;
  
! 	/**
! 	 * inputAttributes
! 	 */
! 	MutableAttributeSet inputAttributes;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor StyledEditorKit
! 	 */
! 	public StyledEditorKit() {
! 		// TODO
! 	} // StyledEditorKit()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * clone
! 	 * @returns Object
! 	 */
! 	public Object clone() {
! 		return null; // TODO
! 	} // clone()
  
! 	/**
! 	 * getActions
! 	 * @returns Action[]
! 	 */
! 	public Action[] getActions() {
! 		return null; // TODO
! 	} // getActions()
  
! 	/**
! 	 * getInputAttributes
! 	 * @returns MutableAttributeSet
! 	 */
! 	public MutableAttributeSet getInputAttributes() {
! 		return null; // TODO
! 	} // getInputAttributes()
  
! 	/**
! 	 * getCharacterAttributeRun
! 	 * @returns Element
! 	 */
! 	public Element getCharacterAttributeRun() {
! 		return null; // TODO
! 	} // getCharacterAttributeRun()
  
! 	/**
! 	 * createDefaultDocument
! 	 * @returns Document
! 	 */
! 	public Document createDefaultDocument() {
! 		return null; // TODO
! 	} // createDefaultDocument()
  
! 	/**
! 	 * install
! 	 * @param component TODO
! 	 */
! 	public void install(JEditorPane component) {
! 		// TODO
! 	} // install()
  
! 	/**
! 	 * deinstall
! 	 * @param component TODO
! 	 */
! 	public void deinstall(JEditorPane component) {
! 		// TODO
! 	} // deinstall()
  
! 	/**
! 	 * getViewFactory
! 	 * @returns ViewFactory
! 	 */
! 	public ViewFactory getViewFactory() {
! 		return null; // TODO
! 	} // getViewFactory()
  
! 	/**
! 	 * createInputAttributes
! 	 * @param element TODO
! 	 * @param set TODO
! 	 */
! 	protected void createInputAttributes(Element element,
! 			MutableAttributeSet set) {
! 		// TODO
! 	} // createInputAttributes()
  
  
! } // StyledEditorKit
--- 51,503 ----
  
  /**
   * StyledEditorKit
!  *
!  * @author Andrew Selkirk
   */
  public class StyledEditorKit extends DefaultEditorKit
  {
!   private static final long serialVersionUID = 7002391892985555948L;
  
+   /**
+    * UnderlineAction
+    */
+   public static class UnderlineAction extends StyledEditorKit.StyledTextAction
+   {
+     /**
+      * Constructor UnderlineAction
+      */
+     public UnderlineAction()
+     {
+       super("TODO");
+       // TODO
+     }
  
!     /**
!      * actionPerformed
!      * @param event TODO
!      */
!     public void actionPerformed(ActionEvent event)
!     {
!       // TODO
!     }
!   }
  
!   /**
!    * ItalicAction
!    */
!   public static class ItalicAction extends StyledEditorKit.StyledTextAction
!   {
!     /**
!      * Constructor ItalicAction
!      */
!     public ItalicAction()
!     {
!       super("TODO");
!       // TODO
!     }
  
!     /**
!      * actionPerformed
!      * @param event TODO
!      */
!     public void actionPerformed(ActionEvent event)
!     {
!       // TODO
!     }
!   }
  
!   /**
!    * BoldAction
!    */
!   public static class BoldAction extends StyledEditorKit.StyledTextAction
!   {
!     /**
!      * Constructor BoldAction
!      */
!     public BoldAction()
!     {
!       super("TODO");
!       // TODO
!     }
  
+     /**
+      * actionPerformed
+      * @param event TODO
+      */
+     public void actionPerformed(ActionEvent event)
+     {
+       // TODO
+     }
+   }
  
!   /**
!    * AlignmentAction
!    */
!   public static class AlignmentAction extends StyledEditorKit.StyledTextAction
!   {
!     /**
!      * a
!      */
!     private int a;
  
!     /**
!      * Constructor AlignmentAction
!      * @param nm TODO
!      * @param a TODO
!      */
!     public AlignmentAction(String nm, int a)
!     {
!       super("TODO");
!       // TODO
!     }
  
+     /**
+      * actionPerformed
+      * @param event TODO
+      */
+     public void actionPerformed(ActionEvent event)
+     {
+       // TODO
+     }
+   }
  
!   /**
!    * ForegroundAction
!    */
!   public static class ForegroundAction extends StyledEditorKit.StyledTextAction
!   {
!     /**
!      * fg
!      */
!     private Color fg;
  
!     /**
!      * Constructor ForegroundAction
!      * @param nm TODO
!      * @param fg TODO
!      */
!     public ForegroundAction(String nm, Color fg)
!     {
!       super("TODO");
!       // TODO
!     }
  
!     /**
!      * actionPerformed
!      * @param event TODO
!      */
!     public void actionPerformed(ActionEvent event)
!     {
!       // TODO
!     }
!   }
  
+   /**
+    * FontSizeAction
+    */
+   public static class FontSizeAction extends StyledEditorKit.StyledTextAction
+   {
+     /**
+      * size
+      */
+     private int size;
  
!     /**
!      * Constructor FontSizeAction
!      * @param nm TODO
!      * @param size TODO
!      */
!     public FontSizeAction(String nm, int size)
!     {
!       super("TODO");
!       // TODO
!     }
  
!     /**
!      * actionPerformed
!      * @param event TODO
!      */
!     public void actionPerformed(ActionEvent event)
!     {
!       // TODO
!     }
!   }
  
+   /**
+    * FontFamilyAction
+    */
+   public static class FontFamilyAction extends StyledEditorKit.StyledTextAction
+   {
+     /**
+      * family
+      */
+     private String family;
  
!     /**
!      * Constructor FontFamilyAction
!      * @param nm TODO
!      * @param family TODO
!      */
!     public FontFamilyAction(String nm, String family)
!     {
!       super("TODO");
!       // TODO
!     }
  
!     /**
!      * actionPerformed
!      * @param event TODO
!      */
!     public void actionPerformed(ActionEvent event)
!     {
!       // TODO
!     }
!   }
  
!   /**
!    * StyledTextAction
!    */
!   public abstract static class StyledTextAction extends TextAction
!   {
!     /**
!      * Constructor StyledTextAction
!      * @param nm TODO
!      */
!     public StyledTextAction(String nm)
!     {
!       super(nm);
!       // TODO
!     }
  
!     /**
!      * getEditor
!      * @param event TODO
!      * @returns JEditorPane
!      */
!     protected final JEditorPane getEditor(ActionEvent event)
!     {
!       return null; // TODO
!     }
  
+     /**
+      * setCharacterAttributes
+      * @param value0 TODO
+      * @param value1 TODO
+      * @param value2 TODO
+      */
+     protected final void setCharacterAttributes(JEditorPane value0,
+                                                 AttributeSet value1,
+                                                 boolean value2)
+     {
+       // TODO
+     }
  
!     /**
!      * getStyledDocument
!      * @param value0 TODO
!      * @returns StyledDocument
!      */
!     protected final StyledDocument getStyledDocument(JEditorPane value0)
!     {
!       return null; // TODO
!     }
  
+     /**
+      * getStyledEditorKit
+      * @param value0 TODO
+      * @returns StyledEditorKit
+      */
+     protected final StyledEditorKit getStyledEditorKit(JEditorPane value0)
+     {
+       return null; // TODO
+     }
  
!     /**
!      * setParagraphAttributes
!      * @param value0 TODO
!      * @param value1 TODO
!      * @param value2 TODO
!      */
!     protected final void setParagraphAttributes(JEditorPane value0,
!                                                 AttributeSet value1,
!                                                 boolean value2)
!     {
!       // TODO
!     }
!   }
  
!   /**
!    * StyledViewFactory
!    */
!   static class StyledViewFactory
!     implements ViewFactory
!   {
!     /**
!      * Constructor StyledViewFactory
!      */
!     StyledViewFactory()
!     {
!       // TODO
!     }
  
!     /**
!      * create
!      * @param value0 TODO
!      * @returns View
!      */
!     public View create(Element value0)
!     {
!       return null; // TODO
!     }
!   }
  
!   /**
!    * AttributeTracker
!    */
!   class AttributeTracker
!     implements CaretListener, PropertyChangeListener, Serializable
!   {
!     /**
!      * Constructor AttributeTracker
!      * @param value0 TODO
!      */
!     AttributeTracker(StyledEditorKit value0)
!     {
!       // TODO
!     }
  
+     /**
+      * updateInputAttributes
+      * @param value0 TODO
+      * @param value1 TODO
+      * @param value2 TODO
+      */
+     void updateInputAttributes(int value0, int value1, JTextComponent value2)
+     {
+       // TODO
+     }
  
!     /**
!      * propertyChange
!      * @param value0 TODO
!      */
!     public void propertyChange(PropertyChangeEvent value0)
!     {
!       // TODO
!     }
  
!     /**
!      * caretUpdate
!      * @param value0 TODO
!      */
!     public void caretUpdate(CaretEvent value0)
!     {
!       // TODO
!     }
!   }
  
+   /**
+    * currentRun
+    */
+   Element currentRun;
  
!   /**
!    * currentParagraph
!    */
!   Element currentParagraph;
  
!   /**
!    * inputAttributes
!    */
!   MutableAttributeSet inputAttributes;
  
!   /**
!    * Constructor StyledEditorKit
!    */
!   public StyledEditorKit()
!   {
!     // TODO
!   }
  
!   /**
!    * clone
!    * @returns Object
!    */
!   public Object clone()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getActions
!    * @returns Action[]
!    */
!   public Action[] getActions()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getInputAttributes
!    * @returns MutableAttributeSet
!    */
!   public MutableAttributeSet getInputAttributes()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getCharacterAttributeRun
!    * @returns Element
!    */
!   public Element getCharacterAttributeRun()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * createDefaultDocument
!    * @returns Document
!    */
!   public Document createDefaultDocument()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * install
!    * @param component TODO
!    */
!   public void install(JEditorPane component)
!   {
!     // TODO
!   }
  
!   /**
!    * deinstall
!    * @param component TODO
!    */
!   public void deinstall(JEditorPane component)
!   {
!     // TODO
!   }
  
+   /**
+    * getViewFactory
+    * @returns ViewFactory
+    */
+   public ViewFactory getViewFactory()
+   {
+     return null; // TODO
+   }
  
!   /**
!    * createInputAttributes
!    * @param element TODO
!    * @param set TODO
!    */
!   protected void createInputAttributes(Element element, MutableAttributeSet set)
!   {
!     // TODO
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/TabExpander.java gcc-4.0.0/libjava/javax/swing/text/TabExpander.java
*** gcc-3.4.3/libjava/javax/swing/text/TabExpander.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/TabExpander.java	Thu Jul 22 15:36:03 2004
***************
*** 0 ****
--- 1,43 ----
+ /* TabExpander.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ public interface TabExpander
+ {
+   float nextTabStop(float x, int tabOffset);
+ }
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/TabSet.java gcc-4.0.0/libjava/javax/swing/text/TabSet.java
*** gcc-3.4.3/libjava/javax/swing/text/TabSet.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/TabSet.java	Thu Sep  2 06:58:08 2004
***************
*** 0 ****
--- 1,102 ----
+ /* TabSet.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.io.Serializable;
+ 
+ public class TabSet implements Serializable
+ {
+   TabStop[] tabs;
+ 
+   public TabSet(TabStop[] t) 
+   {
+     tabs = t;
+   }
+  
+   public TabStop getTab(int i) 
+   {
+     return tabs[i];
+   }
+ 
+   public TabStop getTabAfter(float location) 
+   {
+     int idx = getTabIndexAfter(location);
+     if (idx == -1)
+       return null;
+     else
+       return tabs[idx];        
+   }
+ 
+   public int getTabCount() 
+   {
+     return tabs.length;
+   }
+ 
+   public int getTabIndex(TabStop tab) 
+   {
+     for (int i = 0; i < tabs.length; ++i)
+       if (tabs[i] == tab)
+         return i;
+     return -1;
+   }
+ 
+   public int getTabIndexAfter(float location) 
+   {
+     int idx = -1;
+     for (int i = 0; i < tabs.length; ++i)
+       {
+         if (location < tabs[i].getPosition())
+           idx = i;
+       }
+     return idx;
+   }
+ 
+   public String toString()
+   {
+     StringBuffer sb = new StringBuffer();
+     sb.append("[");
+     for (int i = 0; i < tabs.length; ++i)
+       {
+         if (i != 0)
+           sb.append(" - ");
+         sb.append(tabs[i].toString());
+       }
+     sb.append("]");
+     return sb.toString();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/TabStop.java gcc-4.0.0/libjava/javax/swing/text/TabStop.java
*** gcc-3.4.3/libjava/javax/swing/text/TabStop.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/TabStop.java	Thu Sep  2 06:58:08 2004
***************
*** 0 ****
--- 1,133 ----
+ /* TabSet.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.io.Serializable;
+ 
+ public class TabStop implements Serializable
+ {
+   public static final int ALIGN_LEFT = 0;
+   public static final int ALIGN_RIGHT = 1;
+   public static final int ALIGN_CENTER = 2;
+   public static final int ALIGN_DECIMAL = 4;
+   public static final int ALIGN_BAR = 5;
+ 
+   public static final int LEAD_NONE = 0;
+   public static final int LEAD_DOTS = 1;
+   public static final int LEAD_HYPHENS = 2;
+   public static final int LEAD_UNDERLINE = 3;
+   public static final int LEAD_THICKLINE = 4;
+   public static final int LEAD_EQUALS = 5;
+ 
+   float pos;
+   int align;
+   int leader;
+ 
+   public TabStop(float pos) 
+   {
+     this(pos, ALIGN_LEFT, LEAD_NONE);
+   }
+   
+   public TabStop(float pos, int align, int leader)
+   {
+     this.pos = pos;
+     this.align = align;
+     this.leader = leader;
+   }
+     
+   public boolean equals(Object other) 
+   {
+     return (other != null)
+       && (other instanceof TabStop)
+       && (((TabStop)other).getPosition() == this.getPosition())
+       && (((TabStop)other).getLeader() == this.getLeader())
+       && (((TabStop)other).getAlignment() == this.getAlignment());
+   }
+ 
+   public int getAlignment() 
+   {
+     return align;
+   }
+ 
+   public int getLeader() 
+   {
+     return leader;
+   }
+ 
+   public float getPosition() 
+   {
+     return pos;
+   }
+ 
+   public int hashCode() 
+   {
+     return (int) pos + (int) leader + (int) align;
+   }
+ 
+   public String toString() 
+   {
+     String prefix = "";
+     switch (align)
+       {
+       case ALIGN_LEFT:
+         prefix = "left ";
+         break;
+       case ALIGN_RIGHT:
+         prefix = "right ";
+         break;
+ 
+       case ALIGN_CENTER:
+         prefix = "center ";
+         break;
+ 
+       case ALIGN_DECIMAL:
+         prefix = "decimal ";
+         break;
+         
+       case ALIGN_BAR:
+         prefix = "bar ";
+         break;
+ 
+       default:
+         break;
+       }
+     
+     return (prefix + "tab @" + pos + ((leader == LEAD_NONE) ? "" : "(w/leaders)"));
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/TabableView.java gcc-4.0.0/libjava/javax/swing/text/TabableView.java
*** gcc-3.4.3/libjava/javax/swing/text/TabableView.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/TabableView.java	Thu Jul 22 15:36:03 2004
***************
*** 0 ****
--- 1,44 ----
+ /* TabableView.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ public interface TabableView
+ {
+   float getPartialSpan(int p0, int p1);
+   float getTabbedSpan(float x, TabExpander expander);
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/TextAction.java gcc-4.0.0/libjava/javax/swing/text/TextAction.java
*** gcc-3.4.3/libjava/javax/swing/text/TextAction.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/TextAction.java	Wed Feb 16 20:03:13 2005
*************** this exception to your version of the li
*** 35,96 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.text;
  
  import java.awt.event.ActionEvent;
  import javax.swing.AbstractAction;
  import javax.swing.Action;
  
  /**
   * TextAction
!  * @author	Andrew Selkirk
!  * @version	1.0
   */
! public abstract class TextAction extends AbstractAction {
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor TextAction
! 	 * @param name TODO
! 	 */
! 	public TextAction(String name) {
! 		// TODO
! 	} // TextAction()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * getTextComponent
! 	 * @param event TODO
! 	 * @returns JTextComponent
! 	 */
! 	protected final JTextComponent getTextComponent(ActionEvent event) {
! 		return null; // TODO
! 	} // getTextComponent()
  
! 	/**
! 	 * augmentList
! 	 * @param list1 TODO
! 	 * @param list2 TODO
! 	 * @returns Action[]
! 	 */
! 	public static final Action[] augmentList(Action[] list1, Action[] list2) {
! 		return null; // TODO
! 	} // augmentList()
  
! 	/**
! 	 * getFocusedComponent
! 	 * @returns JTextComponent
! 	 */
! 	protected final JTextComponent getFocusedComponent() {
! 		return null; // TODO
! 	} // getFocusedComponent()
  
  
! } // TextAction
--- 35,111 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.text;
  
  import java.awt.event.ActionEvent;
+ import java.util.ArrayList;
+ import java.util.HashSet;
+ 
  import javax.swing.AbstractAction;
  import javax.swing.Action;
  
  /**
   * TextAction
!  * @author Andrew Selkirk
   */
! public abstract class TextAction extends AbstractAction
! {
!   /**
!    * Constructor TextAction
!    * @param name TODO
!    */
!   public TextAction(String name)
!   {
!     super(name);
!   }
  
+   /**
+    * Returns the <code>JTextComponent</code> object associated with the given
+    * <code>ActionEvent</code>. If the source of the event is not a
+    * <code>JTextComponent</code> the currently focused text component is returned.
+    * 
+    * @param event the action event
+    * 
+    * @return the <code>JTextComponent</code>
+    */
+   protected final JTextComponent getTextComponent(ActionEvent event)
+   {
+     if (event.getSource() instanceof JTextComponent)
+       return (JTextComponent) event.getSource();
  
!     return getFocusedComponent();
!   }
  
!   /**
!    * Creates a new array of <code>Action</code> containing both given arrays.
!    * 
!    * @param list1 the first action array
!    * @param list2 the second action array
!    *
!    * @return the augmented array of actions
!    */
!   public static final Action[] augmentList(Action[] list1, Action[] list2)
!   {
!     HashSet actionSet = new HashSet();
  
!     for (int i = 0; i < list1.length; ++i)
!       actionSet.add(list1[i]);
  
!     for (int i = 0; i < list2.length; ++i)
!       actionSet.add(list2[i]);
  
+     ArrayList list = new ArrayList(actionSet);
+     return (Action[]) list.toArray(new Action[actionSet.size()]);
+   }
  
!   /**
!    * Returns the current focused <code>JTextComponent</code> object.
!    * 
!    * @return the <code>JTextComponent</code>
!    */
!   protected final JTextComponent getFocusedComponent()
!   {
!     return null; // TODO
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/Utilities.java gcc-4.0.0/libjava/javax/swing/text/Utilities.java
*** gcc-3.4.3/libjava/javax/swing/text/Utilities.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/swing/text/Utilities.java	Thu Feb 17 07:48:53 2005
***************
*** 0 ****
--- 1,198 ----
+ /* Utilities.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.swing.text;
+ 
+ import java.awt.FontMetrics;
+ import java.awt.Graphics;
+ 
+ /**
+  * A set of utilities to deal with text. This is used by several other classes
+  * inside this package.
+  *
+  * @author Roman Kennke (roman@ontographics.com)
+  */
+ public class Utilities
+ {
+   /**
+    * The length of the char buffer that holds the characters to be drawn.
+    */
+   private static final int BUF_LENGTH = 64;
+ 
+   /**
+    * Creates a new <code>Utilities</code> object.
+    */
+   public Utilities()
+   {
+     // Nothing to be done here.
+   }
+ 
+   /**
+    * Draws the given text segment. Contained tabs and newline characters
+    * are taken into account. Tabs are expanded using the
+    * specified {@link TabExpander}.
+    *
+    * @param s the text fragment to be drawn.
+    * @param x the x position for drawing.
+    * @param y the y position for drawing.
+    * @param g the {@link Graphics} context for drawing.
+    * @param e the {@link TabExpander} which specifies the Tab-expanding
+    *     technique.
+    * @param startOffset starting offset in the text.
+    * @return the x coordinate at the end of the drawn text.
+    */
+   public static final int drawTabbedText(Segment s, int x, int y, Graphics g,
+                                          TabExpander e, int startOffset)
+   {
+     // This buffers the chars to be drawn.
+     char[] buffer = s.array;
+ 
+ 
+     // The current x and y pixel coordinates.
+     int pixelX = x;
+     int pixelY = y;
+ 
+     // The font metrics of the current selected font.
+     FontMetrics metrics = g.getFontMetrics();
+     int ascent = metrics.getAscent();
+ 
+     int pixelWidth = 0;
+     int pos = 0;
+     int len = 0;
+ 
+     for (int offset = s.offset; offset < (s.offset + s.count); ++offset)
+       {
+         char c = buffer[offset];
+         if (c == '\t' || c == '\n')
+           {
+             if (len > 0) {
+               g.drawChars(buffer, pos, len, pixelX, pixelY + ascent);            
+               pixelX += pixelWidth;
+               pixelWidth = 0;
+             }
+             pos = offset+1;
+             len = 0;
+           }
+         
+ 	switch (c)
+ 	  {
+ 	  case '\t':
+ 	    // In case we have a tab, we just 'jump' over the tab.
+ 	    // When we have no tab expander we just use the width of ' '.
+ 	    if (e != null)
+ 	      pixelX = (int) e.nextTabStop((float) pixelX,
+ 					   startOffset + offset - s.offset);
+ 	    else
+ 	      pixelX += metrics.charWidth(' ');
+ 	    break;
+ 	  case '\n':
+ 	    // In case we have a newline, we must jump to the next line.
+ 	    pixelY += metrics.getHeight();
+ 	    pixelX = x;
+ 	    break;
+ 	  default:
+             ++len;
+ 	    pixelWidth += metrics.charWidth(buffer[offset]);
+ 	    break;
+ 	  }
+       }
+ 
+     if (len > 0)
+       g.drawChars(buffer, pos, len, pixelX, pixelY + ascent);            
+     
+     return pixelX;
+   }
+ 
+   /**
+    * Determines the width, that the given text <code>s</code> would take
+    * if it was printed with the given {@link java.awt.FontMetrics} on the
+    * specified screen position.
+    * @param s the text fragment
+    * @param metrics the font metrics of the font to be used
+    * @param x the x coordinate of the point at which drawing should be done
+    * @param e the {@link TabExpander} to be used
+    * @param startOffset the index in <code>s</code> where to start
+    * @returns the width of the given text s. This takes tabs and newlines
+    * into account.
+    */
+   public static final int getTabbedTextWidth(Segment s, FontMetrics metrics,
+                                              int x, TabExpander e,
+                                              int startOffset)
+   {
+     // This buffers the chars to be drawn.
+     char[] buffer = s.array;
+ 
+     // The current x coordinate.
+     int pixelX = x;
+ 
+     // The current maximum width.
+     int maxWidth = 0;
+ 
+     for (int offset = s.offset; offset < (s.offset + s.count); ++offset)
+       {
+ 	switch (buffer[offset])
+ 	  {
+ 	  case '\t':
+ 	    // In case we have a tab, we just 'jump' over the tab.
+ 	    // When we have no tab expander we just use the width of 'm'.
+ 	    if (e != null)
+ 	      pixelX = (int) e.nextTabStop((float) pixelX,
+ 					   startOffset + offset - s.offset);
+ 	    else
+ 	      pixelX += metrics.charWidth(' ');
+ 	    break;
+ 	  case '\n':
+ 	    // In case we have a newline, we must 'draw'
+ 	    // the buffer and jump on the next line.
+ 	    pixelX += metrics.charWidth(buffer[offset]);
+ 	    maxWidth = Math.max(maxWidth, pixelX - x);
+ 	    pixelX = x;
+ 	    break;
+ 	  default:
+ 	    // Here we draw the char.
+ 	    pixelX += metrics.charWidth(buffer[offset]);
+ 	    break;
+ 	  }
+       }
+ 
+     // Take the last line into account.
+     maxWidth = Math.max(maxWidth, pixelX - x);
+ 
+     return maxWidth;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/View.java gcc-4.0.0/libjava/javax/swing/text/View.java
*** gcc-3.4.3/libjava/javax/swing/text/View.java	Sat Jan 10 21:07:44 2004
--- gcc-4.0.0/libjava/javax/swing/text/View.java	Wed Feb 16 20:03:13 2005
***************
*** 1,5 ****
  /* View.java -- 
!    Copyright (C) 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* View.java -- 
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,140 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.text;
  
  import java.awt.Graphics;
  import java.awt.Shape;
! import java.util.Vector;
  import javax.swing.SwingConstants;
  
  public abstract class View implements SwingConstants
  {
!     static int BadBreakWeight;    
!     static int ExcellentBreakWeight;
!     static int ForcedBreakWeight;
!     static int GoodBreakWeight;
  
!     public final static int X_AXIS = 0;
!     public final static int Y_AXIS = 1;
      
!     float width, height;
!     Element elt;
!     View parent;
! 
!     /** 
!      * this vector contains the views ordered at offsets...
!      */
!     Vector v = new Vector();
! 
  
!     public View(Element elem)
!     {
! 	elt = elem;
!     }
  
!     public int getViewCount() 
!     {
! 	return v.size();
!     }
  
!     public View getView(int a)
!     {
! 	return (View) v.get(a);
!     }
      
!     public void remove(int i)
!     {
! 	v.removeElementAt(i);
!     }
      
!     public void insert(int off, View view)
!     {
! 	v.insertElementAt(view, off);	
!     }	   
      
!     public void append(View view)
!     {
! 	v.addElement(view);
!     }
! 	
!     public void paint(Graphics g, Shape allocation)
!     {
! 	System.out.println("view.paint() !!!!");
!     }
  
!     public void setParent(View a)
!     {
! 	parent = a;
!     }
!     
!     public View getParent()
!     {
! 	return parent;
!     }
!     
!     public void setSize(int w, int h)
!     {
! 	width  = w;
! 	height = h;
!     }
  
!     public Document getDocument()
!     {
! 	return getElement().getDocument();
!     }
!     
!     public Element getElement()
!     {
!         return elt;
!     }
  
!     public float getPreferredSpan(int a)
!     {
! 	switch (a)
! 	    {
! 	    case X_AXIS:  return width;
! 	    case Y_AXIS:  return height;
! 	    default:
! 		{
! 		    System.err.println("I sure wish Java had enums !!! ");
! 		    return 0;
! 		}
! 	    }
!     }
  }
  
--- 35,264 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.text;
  
+ import java.awt.Container;
  import java.awt.Graphics;
  import java.awt.Shape;
! 
  import javax.swing.SwingConstants;
  
  public abstract class View implements SwingConstants
  {
!   public static final int BadBreakWeight = 0;
!   public static final int ExcellentBreakWeight = 2000;
!   public static final int ForcedBreakWeight = 3000;
!   public static final int GoodBreakWeight = 1000;
  
!   public static final int X_AXIS = 0;
!   public static final int Y_AXIS = 1;
      
!   private float width, height;
!   private Element elt;
!   private View parent;
  
!   /**
!    * Creates a new <code>View</code> instance.
!    *
!    * @param elem an <code>Element</code> value
!    */
!   public View(Element elem)
!   {
!     elt = elem;
!   }
  
!   public abstract void paint(Graphics g, Shape s);
  
!   public void setParent(View parent)
!   {
!     this.parent = parent;
!   }
      
!   public View getParent()
!   {
!     return parent;
!   }
      
!   public Container getContainer()
!   {
!     View parent = getParent();
!     return parent != null ? parent.getContainer() : null;
!   }
!   
!   public Document getDocument()
!   {
!     return getElement().getDocument();
!   }
      
!   public Element getElement()
!   {
!     return elt;
!   }
  
!   public abstract float getPreferredSpan(int axis);
  
!   public int getResizeWeight(int axis)
!   {
!     return 0;
!   }
  
!   public float getMaximumSpan(int axis)
!   {
!     if (getResizeWeight(axis) <= 0)
!       return getPreferredSpan(axis);
! 
!     return Integer.MAX_VALUE;
!   }
! 
!   public float getMinimumSpan(int axis)
!   {
!     if (getResizeWeight(axis) <= 0)
!       return getPreferredSpan(axis);
! 
!     return Integer.MAX_VALUE;
!   }
!   
!   public void setSize(float width, float height)
!   {
!     // The default implementation does nothing.
!   }
!   
!   public float getAlignment(int axis)
!   {
!     return 0.5f;
!   }
! 
!   public AttributeSet getAttributes()
!   {
!     return getElement().getAttributes();
!   }
!   
!   public boolean isVisible()
!   {
!     return true;
!   }
! 
!   public int getViewCount()
!   {
!     return 0;
!   }
!   
!   public View getView(int index)
!   {
!     return null;
!   }
! 
!   public ViewFactory getViewFactory()
!   {
!     View parent = getParent();
!     return parent != null ? parent.getViewFactory() : null;
!   }
! 
!   public void replace(int offset, int length, View[] views)
!   {
!     // Default implementation does nothing.
!   }
! 
!   public void insert(int offset, View view)
!   {
!     View[] array = { view };
!     replace(offset, 1, array);
!   }
! 
!   public void append(View view)
!   {
!     View[] array = { view };
!     replace(getViewCount(), 1, array);
!   }
! 
!   public void removeAll()
!   {
!     replace(0, getViewCount(), null); 
!   }
! 
!   public void remove(int index)
!   {
!     replace(index, 1, null); 
!   }
! 
!   public View createFragment(int p0, int p1)
!   {
!     // The default implementation doesn't support fragmentation.
!     return this;
!   }
! 
!   public int getStartOffset()
!   {
!     return getElement().getStartOffset();
!   }
! 
!   public int getEndOffset()
!   {
!     return getElement().getEndOffset();
!   }
! 
!   public Shape getChildAllocation(int index, Shape a)
!   {
!     return null;
!   }
!   
!   /**
!    * @since 1.4
!    */
!   public int getViewIndex(float x, float y, Shape allocation)
!   {
!     return -1;
!   }
!   
!   /**
!    * @since 1.4
!    */
!   public String getToolTipText(float x, float y, Shape allocation)
!   {
!     int index = getViewIndex(x, y, allocation);
! 
!     if (index < -1)
!       return null;
! 
!     Shape childAllocation = getChildAllocation(index, allocation);
! 
!     if (childAllocation.getBounds().contains(x, y))
!       return getView(index).getToolTipText(x, y, childAllocation);
! 
!     return null;
!   }
! 
!   /**
!    * @since 1.3
!    */
!   public Graphics getGraphics()
!   {
!     return getContainer().getGraphics();
!   }
! 
!   public void preferenceChanged(View child, boolean width, boolean height)
!   {
!     if (parent != null)
!       parent.preferenceChanged(this, width, height);
!   }
! 
!   public int getBreakWeight(int axis, float pos, float len)
!   {
!     return BadBreakWeight;
!   }
! 
!   public View breakView(int axis, int offset, float pos, float len)
!   {
!     return this;
!   }
! 
!   /**
!    * @since 1.3
!    */
!   public int getViewIndex(int pos, Position.Bias b)
!   {
!     return -1;
!   }
  }
  
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/ViewFactory.java gcc-4.0.0/libjava/javax/swing/text/ViewFactory.java
*** gcc-3.4.3/libjava/javax/swing/text/ViewFactory.java	Sun Oct 12 13:33:32 2003
--- gcc-4.0.0/libjava/javax/swing/text/ViewFactory.java	Wed Feb 16 20:03:14 2005
***************
*** 1,5 ****
  /* ViewFactory.java -- 
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* ViewFactory.java -- 
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.text;
*** 39,43 ****
  
  public interface ViewFactory
  {
!     View create (Element elem);
  }
--- 39,50 ----
  
  public interface ViewFactory
  {
!   /**
!    * Creates a view for a given element.
!    *
!    * @param elem them element to create view for
!    *
!    * @return a new created view
!    */
!   View create(Element elem);
  }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/text/html/HTML.java gcc-4.0.0/libjava/javax/swing/text/html/HTML.java
*** gcc-3.4.3/libjava/javax/swing/text/html/HTML.java	Fri Aug  9 08:34:16 2002
--- gcc-4.0.0/libjava/javax/swing/text/html/HTML.java	Tue Nov 30 23:59:08 2004
*************** public class HTML
*** 59,64 ****
--- 59,69 ----
  
    public static class UnknownTag extends Tag implements Serializable
    {
+     /**
+      * For compatability with Sun's JDK 1.4.2 rev. 5
+      */
+     private static final long serialVersionUID = -1534369342247250625L;
+ 
      public UnknownTag(String id)
      {
        super(id);
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/AbstractLayoutCache.java gcc-4.0.0/libjava/javax/swing/tree/AbstractLayoutCache.java
*** gcc-3.4.3/libjava/javax/swing/tree/AbstractLayoutCache.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/tree/AbstractLayoutCache.java	Tue Nov 30 23:59:08 2004
***************
*** 1,5 ****
  /* AbstractLayoutCache.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractLayoutCache.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.tree;
*** 40,97 ****
  
  import java.awt.Rectangle;
  import java.util.Enumeration;
  import javax.swing.event.TreeModelEvent;
  
  /**
!  * AbstractLayoutCache
   * @author Andrew Selkirk
   */
  public abstract class AbstractLayoutCache implements RowMapper
  {
- 
- 	//-------------------------------------------------------------
- 	// Classes ----------------------------------------------------
- 	//-------------------------------------------------------------
- 
  	/**
! 	 * NodeDimensions
  	 */
! 	public abstract static class NodeDimensions {
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
  		/**
! 		 * Constructor NodeDimensions
  		 */
! 		public NodeDimensions() {
! 			// TODO
! 		} // NodeDimensions()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
  
  		/**
  		 * getNodeDimensions
  		 * @param value0 TODO
  		 * @param value1 TODO
  		 * @param value2 TODO
  		 * @param value3 TODO
  		 * @param value4 TODO
! 		 * @returns Rectangle
  		 */
! 		public abstract Rectangle getNodeDimensions(Object value0, int value1, int value2, boolean value3, Rectangle value4);
! 
! 
! 	} // NodeDimensions
! 
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
  	/**
  	 * nodeDimensions
--- 40,82 ----
  
  import java.awt.Rectangle;
  import java.util.Enumeration;
+ 
  import javax.swing.event.TreeModelEvent;
  
  /**
!  * class AbstractLayoutCache
!  * 
   * @author Andrew Selkirk
   */
  public abstract class AbstractLayoutCache implements RowMapper
  {
  	/**
! 	 * class NodeDimensions
  	 */
! 	public abstract static class NodeDimensions
! 	{
  		/**
! 		 * Creates <code>NodeDimensions</code> object.
  		 */
! 		public NodeDimensions()
! 		{
! 			// Do nothing here.
! 		}
  
  		/**
  		 * getNodeDimensions
+ 		 * 
  		 * @param value0 TODO
  		 * @param value1 TODO
  		 * @param value2 TODO
  		 * @param value3 TODO
  		 * @param value4 TODO
! 		 * @return Rectangle
  		 */
! 		public abstract Rectangle getNodeDimensions(Object value0, int value1,
! 		                                            int value2, boolean value3,
! 		                                            Rectangle value4);
! 	}
  
  	/**
  	 * nodeDimensions
*************** public abstract class AbstractLayoutCach
*** 118,318 ****
  	 */
  	protected int rowHeight;
  
- 
- 	//-------------------------------------------------------------
- 	// Initialization ---------------------------------------------
- 	//-------------------------------------------------------------
- 
  	/**
  	 * Constructor AbstractLayoutCache
  	 */
! 	public AbstractLayoutCache() {
! 		// TODO
! 	} // AbstractLayoutCache()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
  	/**
  	 * setNodeDimensions
! 	 * @param value0 TODO
  	 */
! 	public void setNodeDimensions(NodeDimensions value0) {
! 		// TODO
! 	} // setNodeDimensions()
  
  	/**
  	 * getNodeDimensions
! 	 * @returns NodeDimensions
  	 */
! 	public NodeDimensions getNodeDimensions() {
! 		return null; // TODO
! 	} // getNodeDimensions()
  
  	/**
  	 * getNodeDimensions
  	 * @param value0 TODO
  	 * @param value1 TODO
  	 * @param value2 TODO
  	 * @param value3 TODO
  	 * @param value4 TODO
! 	 * @returns Rectangle
  	 */
! 	protected Rectangle getNodeDimensions(Object value0, int value1, int value2, boolean value3, Rectangle value4) {
  		return null; // TODO
! 	} // getNodeDimensions()
  
  	/**
! 	 * setModel
! 	 * @param value0 TODO
  	 */
! 	public void setModel(TreeModel value0) {
! 		// TODO
! 	} // setModel()
  
  	/**
! 	 * getModel
! 	 * @returns TreeModel
  	 */
! 	public TreeModel getModel() {
! 		return null; // TODO
! 	} // getModel()
  
  	/**
  	 * setRootVisible
! 	 * @param value0 TODO
  	 */
! 	public void setRootVisible(boolean value0) {
! 		// TODO
! 	} // setRootVisible()
  
  	/**
  	 * isRootVisible
! 	 * @returns boolean
  	 */
! 	public boolean isRootVisible() {
! 		return false; // TODO
! 	} // isRootVisible()
  
  	/**
  	 * setRowHeight
! 	 * @param value0 TODO
  	 */
! 	public void setRowHeight(int value0) {
! 		// TODO
! 	} // setRowHeight()
  
  	/**
  	 * getRowHeight
! 	 * @returns int
  	 */
! 	public int getRowHeight() {
! 		return 0; // TODO
! 	} // getRowHeight()
  
  	/**
  	 * setSelectionModel
! 	 * @param value0 TODO
  	 */
! 	public void setSelectionModel(TreeSelectionModel value0) {
! 		// TODO
! 	} // setSelectionModel()
  
  	/**
  	 * getSelectionModel
! 	 * @returns TreeSelectionModel
  	 */
! 	public TreeSelectionModel getSelectionModel() {
! 		return null; // TODO
! 	} // getSelectionModel()
  
  	/**
  	 * getPreferredHeight
! 	 * @returns int
  	 */
! 	public int getPreferredHeight() {
  		return 0; // TODO
! 	} // getPreferredHeight()
  
  	/**
  	 * getPreferredWidth
  	 * @param value0 TODO
! 	 * @returns int
  	 */
! 	public int getPreferredWidth(Rectangle value0) {
  		return 0; // TODO
! 	} // getPreferredWidth()
  
  	/**
  	 * isExpanded
  	 * @param value0 TODO
! 	 * @returns boolean
  	 */
  	public abstract boolean isExpanded(TreePath value0);
  
  	/**
  	 * getBounds
  	 * @param value0 TODO
  	 * @param value1 TODO
! 	 * @returns Rectangle
  	 */
  	public abstract Rectangle getBounds(TreePath value0, Rectangle value1);
  
  	/**
  	 * getPathForRow
! 	 * @param value0 TODO
! 	 * @returns TreePath
  	 */
! 	public abstract TreePath getPathForRow(int value0);
  
  	/**
  	 * getRowForPath
! 	 * @param value0 TODO
! 	 * @returns int
  	 */
! 	public abstract int getRowForPath(TreePath value0);
  
  	/**
  	 * getPathClosestTo
  	 * @param value0 TODO
  	 * @param value1 TODO
! 	 * @returns TreePath
  	 */
  	public abstract TreePath getPathClosestTo(int value0, int value1);
  
  	/**
  	 * getVisiblePathsFrom
! 	 * @param value0 TODO
! 	 * @returns Enumeration
  	 */
! 	public abstract Enumeration getVisiblePathsFrom(TreePath value0);
  
  	/**
  	 * getVisibleChildCount
! 	 * @param value0 TODO
! 	 * @returns int
  	 */
  	public abstract int getVisibleChildCount(TreePath value0);
  
  	/**
  	 * setExpandedState
  	 * @param value0 TODO
  	 * @param value1 TODO
  	 */
  	public abstract void setExpandedState(TreePath value0, boolean value1);
  
  	/**
  	 * getExpandedState
! 	 * @param value0 TODO
! 	 * @returns boolean
  	 */
! 	public abstract boolean getExpandedState(TreePath value0);
  
  	/**
  	 * getRowCount
! 	 * @returns int
  	 */
  	public abstract int getRowCount();
  
--- 103,343 ----
  	 */
  	protected int rowHeight;
  
  	/**
  	 * Constructor AbstractLayoutCache
  	 */
! 	public AbstractLayoutCache()
! 	{
! 	  // Do nothing here.
! 	}
  
  	/**
  	 * setNodeDimensions
! 	 * 
! 	 * @param dimensions TODO
  	 */
! 	public void setNodeDimensions(NodeDimensions dimensions)
! 	{
! 		nodeDimensions = dimensions;
! 	}
  
  	/**
  	 * getNodeDimensions
! 	 * 
! 	 * @return NodeDimensions
  	 */
! 	public NodeDimensions getNodeDimensions()
! 	{
! 		return nodeDimensions;
! 	}
  
  	/**
  	 * getNodeDimensions
+ 	 * 
  	 * @param value0 TODO
  	 * @param value1 TODO
  	 * @param value2 TODO
  	 * @param value3 TODO
  	 * @param value4 TODO
! 	 * 
! 	 * @return Rectangle
  	 */
! 	protected Rectangle getNodeDimensions(Object value0, int value1, int value2, boolean value3, Rectangle value4)
! 	{
  		return null; // TODO
! 	}
  
  	/**
! 	 * Sets the model that provides the tree data.
! 	 * 
! 	 * @param the model
  	 */
! 	public void setModel(TreeModel model)
! 	{
! 	  treeModel = model;
! 	}
  
  	/**
! 	 * Returns the model that provides the tree data.
! 	 * 
! 	 * @return the model
  	 */
! 	public TreeModel getModel()
! 	{
! 		return treeModel;
! 	}
  
  	/**
  	 * setRootVisible
! 	 * 
! 	 * @param visible <code>true</code> if root should be visible,
! 	 * <code>false</code> otherwise
  	 */
! 	public void setRootVisible(boolean visible)
! 	{
! 		rootVisible = visible;
! 	}
  
  	/**
  	 * isRootVisible
! 	 * 
! 	 * @return <code>true</code> if root is visible,
! 	 * <code>false</code> otherwise
  	 */
! 	public boolean isRootVisible()
! 	{
! 		return rootVisible;
! 	}
  
  	/**
  	 * setRowHeight
! 	 * 
! 	 * @param height the row height
  	 */
! 	public void setRowHeight(int height)
! 	{
! 		rowHeight = height;
! 	}
  
  	/**
  	 * getRowHeight
! 	 * 
! 	 * @return the row height
  	 */
! 	public int getRowHeight()
! 	{
! 		return rowHeight;
! 	}
  
  	/**
  	 * setSelectionModel
! 	 * 
! 	 * @param model the model
  	 */
! 	public void setSelectionModel(TreeSelectionModel model)
! 	{
! 		treeSelectionModel = model;
! 	}
  
  	/**
  	 * getSelectionModel
! 	 * 
! 	 * @return the model
  	 */
! 	public TreeSelectionModel getSelectionModel()
! 	{
! 		return treeSelectionModel;
! 	}
  
  	/**
  	 * getPreferredHeight
! 	 * 
! 	 * @return int
  	 */
! 	public int getPreferredHeight()
! 	{
  		return 0; // TODO
! 	}
  
  	/**
  	 * getPreferredWidth
+ 	 * 
  	 * @param value0 TODO
! 	 * 
! 	 * @return int
  	 */
! 	public int getPreferredWidth(Rectangle value0)
! 	{
  		return 0; // TODO
! 	}
  
  	/**
  	 * isExpanded
+ 	 * 
  	 * @param value0 TODO
! 	 * 
! 	 * @return boolean
  	 */
  	public abstract boolean isExpanded(TreePath value0);
  
  	/**
  	 * getBounds
+ 	 * 
  	 * @param value0 TODO
  	 * @param value1 TODO
! 	 * 
! 	 * @return Rectangle
  	 */
  	public abstract Rectangle getBounds(TreePath value0, Rectangle value1);
  
  	/**
  	 * getPathForRow
! 	 * 
! 	 * @param row the row
! 	 * 
! 	 * @return the tree path
  	 */
! 	public abstract TreePath getPathForRow(int row);
  
  	/**
  	 * getRowForPath
! 	 * 
! 	 * @param path the tree path
! 	 * 
! 	 * @return the row
  	 */
! 	public abstract int getRowForPath(TreePath path);
  
  	/**
  	 * getPathClosestTo
+ 	 * 
  	 * @param value0 TODO
  	 * @param value1 TODO
! 	 * 
! 	 * @return the tree path
  	 */
  	public abstract TreePath getPathClosestTo(int value0, int value1);
  
  	/**
  	 * getVisiblePathsFrom
! 	 * 
! 	 * @param path the tree path
! 	 * 
! 	 * @return Enumeration
  	 */
! 	public abstract Enumeration getVisiblePathsFrom(TreePath path);
  
  	/**
  	 * getVisibleChildCount
! 	 * 
! 	 * @param path the tree path
! 	 * 
! 	 * @return int
  	 */
  	public abstract int getVisibleChildCount(TreePath value0);
  
  	/**
  	 * setExpandedState
+ 	 * 
  	 * @param value0 TODO
+ 	 * 
  	 * @param value1 TODO
  	 */
  	public abstract void setExpandedState(TreePath value0, boolean value1);
  
  	/**
  	 * getExpandedState
! 	 * 
! 	 * @param path the tree path
! 	 * 
! 	 * @return boolean
  	 */
! 	public abstract boolean getExpandedState(TreePath path);
  
  	/**
  	 * getRowCount
! 	 * 
! 	 * @return the number of rows
  	 */
  	public abstract int getRowCount();
  
*************** public abstract class AbstractLayoutCach
*** 323,372 ****
  
  	/**
  	 * invalidatePathBounds
! 	 * @param value0 TODO
  	 */
! 	public abstract void invalidatePathBounds(TreePath value0);
  
  	/**
  	 * treeNodesChanged
! 	 * @param value0 TODO
  	 */
! 	public abstract void treeNodesChanged(TreeModelEvent value0);
  
  	/**
  	 * treeNodesInserted
! 	 * @param value0 TODO
  	 */
! 	public abstract void treeNodesInserted(TreeModelEvent value0);
  
  	/**
  	 * treeNodesRemoved
! 	 * @param value0 TODO
  	 */
! 	public abstract void treeNodesRemoved(TreeModelEvent value0);
  
  	/**
  	 * treeStructureChanged
! 	 * @param value0 TODO
  	 */
! 	public abstract void treeStructureChanged(TreeModelEvent value0);
  
  	/**
  	 * getRowsForPaths
! 	 * @param value0 TODO
! 	 * @returns int[]
  	 */
! 	public int[] getRowsForPaths(TreePath[] value0) {
  		return null; // TODO
! 	} // getRowsForPaths()
  
  	/**
  	 * isFixedRowHeight
! 	 * @returns boolean
  	 */
! 	protected boolean isFixedRowHeight() {
  		return false; // TODO
! 	} // isFixedRowHeight()
! 
! 
! } // AbstractLayoutCache
--- 348,405 ----
  
  	/**
  	 * invalidatePathBounds
! 	 * 
! 	 * @param path the tree path
  	 */
! 	public abstract void invalidatePathBounds(TreePath path);
  
  	/**
  	 * treeNodesChanged
! 	 * 
! 	 * @param event the event to send
  	 */
! 	public abstract void treeNodesChanged(TreeModelEvent event);
  
  	/**
  	 * treeNodesInserted
! 	 * 
! 	 * @param event the event to send
  	 */
! 	public abstract void treeNodesInserted(TreeModelEvent event);
  
  	/**
  	 * treeNodesRemoved
! 	 * 
! 	 * @param event the event to send
  	 */
! 	public abstract void treeNodesRemoved(TreeModelEvent event);
  
  	/**
  	 * treeStructureChanged
! 	 * 
! 	 * @param event the event to send
  	 */
! 	public abstract void treeStructureChanged(TreeModelEvent event);
  
  	/**
  	 * getRowsForPaths
! 	 * 
! 	 * @param paths the tree paths
! 	 * 
! 	 * @return an array of rows
  	 */
! 	public int[] getRowsForPaths(TreePath[] paths)
! 	{
  		return null; // TODO
! 	}
  
  	/**
  	 * isFixedRowHeight
! 	 * 
! 	 * @return boolean
  	 */
! 	protected boolean isFixedRowHeight()
! 	{
  		return false; // TODO
! 	}
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/DefaultMutableTreeNode.java gcc-4.0.0/libjava/javax/swing/tree/DefaultMutableTreeNode.java
*** gcc-3.4.3/libjava/javax/swing/tree/DefaultMutableTreeNode.java	Sun Oct 12 13:33:32 2003
--- gcc-4.0.0/libjava/javax/swing/tree/DefaultMutableTreeNode.java	Wed Feb 16 20:03:15 2005
***************
*** 1,5 ****
  /* DefaultMutableTreeNode.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultMutableTreeNode.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,1021 ****
  
  package javax.swing.tree;
  
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.ArrayList;
  import java.util.Enumeration;
- import java.util.Random;
  import java.util.Stack;
  import java.util.Vector;
  
  /**
   * DefaultMutableTreeNode
   * @author Andrew Selkirk
   */
  public class DefaultMutableTreeNode
    implements Cloneable, MutableTreeNode, Serializable
  {
!   static final long serialVersionUID = -4298474751201349152L;
! 
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * EMPTY_ENUMERATION
! 	 */
! 	public static final Enumeration EMPTY_ENUMERATION = null; // TODO
! 
! 	/**
! 	 * parent
! 	 */
! 	protected MutableTreeNode parent = null;
! 
! 	/**
! 	 * children
! 	 */
! 	protected Vector children = new Vector();
! 
! 	/**
! 	 * userObject
! 	 */
! 	protected transient Object userObject = "";
! 
! 	/**
! 	 * allowsChildren
! 	 */
! 	protected boolean allowsChildren = true;
! 
! 
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * Constructor DefaultMutableTreeNode
! 	 */
! 	public DefaultMutableTreeNode() {
! 		// TODO
! 	} // DefaultMutableTreeNode()
! 
! 	/**
! 	 * Constructor DefaultMutableTreeNode
! 	 * @param value0 TODO
! 	 */
! 	public DefaultMutableTreeNode(Object userObject) {
! 		this.userObject = userObject;
! 	} // DefaultMutableTreeNode()
! 
! 	/**
! 	 * Constructor DefaultMutableTreeNode
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public DefaultMutableTreeNode(Object userObject, boolean allowsChildren) {
! 		this.userObject = userObject;
! 		this.allowsChildren = allowsChildren;
! 	} // DefaultMutableTreeNode()
! 
! 
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * clone
! 	 * @returns Object
! 	 */
! 	public Object clone() {
! 		return null; // TODO
! 	} // clone()
! 
! 	/**
! 	 * toString
! 	 * @returns String
! 	 */
! 	public String toString() {
! 		if (userObject == null) {
! 			return null;
! 		} // if
! 		return userObject.toString();
! 	} // toString()
! 
! 	/**
! 	 * add
! 	 * @param value0 TODO
! 	 */
! 	public void add(MutableTreeNode child) {
! 		children.add(child);
! 		child.setParent(this);
! 	} // add()
! 
! 	/**
! 	 * getParent
! 	 * @returns TreeNode
! 	 */
! 	public TreeNode getParent() {
! 		return parent;
! 	} // getParent()
! 
! 	/**
! 	 * remove
! 	 * @param value0 TODO
! 	 */
! 	public void remove(int index) {
! 		children.remove(index);
! 	} // remove()
! 
! 	/**
! 	 * remove
! 	 * @param value0 TODO
! 	 */
! 	public void remove(MutableTreeNode node) {
! 		children.remove(node);
! 	} // remove()
! 
! 	/**
! 	 * writeObject
! 	 * @param value0 TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream value0) throws IOException {
! 		// TODO
! 	} // writeObject()
! 
! 	/**
! 	 * readObject
! 	 * @param value0 TODO
! 	 * @exception IOException TODO
! 	 * @exception ClassNotFoundException TODO
! 	 */
! 	private void readObject(ObjectInputStream value0) throws IOException, ClassNotFoundException {
! 		// TODO
! 	} // readObject()
! 
! 	/**
! 	 * insert
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void insert(MutableTreeNode node, int index) {
! 		children.insertElementAt(node, index);
! 	} // insert()
! 
! 	/**
! 	 * getPath
! 	 * @returns TreeNode[]
! 	 */
! 	public TreeNode[] getPath() {
! 
! 		// Variables
! 		TreeNode[]	path;
! 		int			size;
! 		int			index;
! 		TreeNode	current;
! 
! 		// Determine length of Path
! 		size = getLevel() + 1;
! 
! 		// Create Path
! 		path = new TreeNode[size];
! 		current = this;
! 		for (index = size - 1; index >= 0; index--) {
! 			path[index] = current;
! 			current = current.getParent();
! 		} // for
! 
! 		// Return Path
! 		return path;
! 
! 	} // getPath()
! 
! 	/**
! 	 * children
! 	 * @returns Enumeration
! 	 */
! 	public Enumeration children() {
! 		return children.elements();
! 	} // children()
! 
! 	/**
! 	 * setParent
! 	 * @param value0 TODO
! 	 */
! 	public void setParent(MutableTreeNode node) {
! 		parent = node;
! 	} // setParent()
! 
! 	/**
! 	 * getChildAt
! 	 * @param value0 TODO
! 	 * @returns TreeNode
! 	 */
! 	public TreeNode getChildAt(int index) {
! 		return (TreeNode) children.elementAt(index);
! 	} // getChildAt()
! 
! 	/**
! 	 * getChildCount
! 	 * @returns int
! 	 */
! 	public int getChildCount() {
! 		return children.size();
! 	} // getChildCount()
! 
! 	/**
! 	 * getIndex
! 	 * @param value0 TODO
! 	 * @returns int
! 	 */
! 	public int getIndex(TreeNode node) {
! 		return children.indexOf(node);
! 	} // getIndex()
! 
! 	/**
! 	 * setAllowsChildren
! 	 * @param value0 TODO
! 	 */
! 	public void setAllowsChildren(boolean allowsChildren) {
! 		this.allowsChildren = allowsChildren;
! 	} // setAllowsChildren()
! 
! 	/**
! 	 * getAllowsChildren
! 	 * @returns boolean
! 	 */
! 	public boolean getAllowsChildren() {
! 		return allowsChildren;
! 	} // getAllowsChildren()
! 
! 	/**
! 	 * setUserObject
! 	 * @param value0 TODO
! 	 */
! 	public void setUserObject(Object userObject) {
! 		this.userObject = userObject;
! 	} // setUserObject()
! 
! 	/**
! 	 * getUserObject
! 	 * @returns Object
! 	 */
! 	public Object getUserObject() {
! 		return userObject;
! 	} // getUserObject()
! 
! 	/**
! 	 * removeFromParent
! 	 */
! 	public void removeFromParent() {
! 		parent = null;
! 		// TODO
! 	} // removeFromParent()
! 
! 	/**
! 	 * removeAllChildren
! 	 */
! 	public void removeAllChildren() {
! 		children.removeAllElements();
! 	} // removeAllChildren()
! 
! 	/**
! 	 * isNodeAncestor
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isNodeAncestor(TreeNode node) {
! 
! 		// Variables
! 		TreeNode	current;
! 
! 		// Sanity Check
! 		if (node == null) {
! 			return false;
! 		} // if
! 
! 		// Search For Ancestor
! 		current = this;
! 		while (current != null && current != node) {
! 			current = current.getParent();
! 		} // while
! 
! 		// Check for Ancestor
! 		if (current == node) {
! 			return true;
! 		} // if
! 
! 		// Otherwise, no
! 		return false;
! 
! 	} // isNodeAncestor()
! 
! 	/**
! 	 * isNodeDescendant
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isNodeDescendant(DefaultMutableTreeNode node) {
! 
! 		// Variables
! 		TreeNode	current;
! 
! 		// Sanity Check
! 		if (node == null) {
! 			return false;
! 		} // if
! 
! 		// Search For Descendant
! 		current = node;
! 		while (current != null && current != this) {
! 			current = current.getParent();
! 		} // while
! 
! 		// Check for Descendant
! 		if (current == this) {
! 			return true;
! 		} // if
! 
! 		// Otherwise, no
! 		return false;
! 
! 	} // isNodeDescendant()
! 
! 	/**
! 	 * getSharedAncestor
! 	 * @param value0 TODO
! 	 * @returns TreeNode
! 	 */
! 	public TreeNode getSharedAncestor(DefaultMutableTreeNode node) {
! 
! 		// Variables
! 		ArrayList	list;
! 		TreeNode	current;
! 
! 		// Get List of Path Elements for this node
! 		current = this;
! 		list = new ArrayList();
! 		while (current != null) {
! 			list.add(current);
! 			current = current.getParent();
! 		} // while
! 
! 		// Check if any path element of node are in list
! 		current = node;
! 		while (current != null) {
! 			if (list.contains(current) == true) {
! 				return current;
! 			} // if
! 			current = current.getParent();
! 		} // while
! 
! 		// Unable to locate shared ancestor
! 		return null;
! 
! 	} // getSharedAncestor()
! 
! 	/**
! 	 * isNodeRelated
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isNodeRelated(DefaultMutableTreeNode node) {
! 
! 		// Sanity Check
! 		if (node == null) {
! 			return false;
! 		} // if
! 
! 		// Check for the same root
! 		if (node.getRoot() == getRoot()) {
! 			return true;
! 		} // if
! 
! 		// Nodes are not related
! 		return false;
! 
! 	} // isNodeRelated()
! 
! 	/**
! 	 * getDepth
! 	 * @returns int
! 	 */
! 	public int getDepth() {
! 
! 		// Variables
! 		TreeNode		node;
! 		int				depth;
! 		int				current;
! 		int				size;
! 		Stack			stack;
! 		int				index;
! 
! 		// Check for children
! 		if (allowsChildren == false || children.size() == 0) {
! 			return 0;
! 		} // if
! 
! 		// Process Depths
! 		stack = new Stack();
! 		stack.push(new Integer(0));
! 		node = getChildAt(0);
! //System.out.println("  * Descend: 0-0");
! 		depth = 0;
! 		current = 1;
! 		while (stack.empty() == false) {
! 
! 			// Check if node has children
! 			if (node.getChildCount() != 0) {
! 				node = node.getChildAt(0);
! 				stack.push(new Integer(0));
! 				current++;
! //				System.out.println("  * Descend: 0-" + current);
! 
! 			// Check for next sibling
! 			} else {
! 
! 				// Check Depth
! 				if (current > depth) {
! 					depth = current;
! 				} // if
! 
! 				do {
! 
! 					// Traverse to Parent
! 					node = node.getParent();
! 					size = node.getChildCount();
! 					current--;
! 					index = ((Integer) stack.pop()).intValue();
! //					System.out.println("  * Ascend from: " + index + "-" + current);
! 					index++;
! 
! 				} while (index >= size && node != this);
! 
! 				// Check for child
! 				if (index < size) {
! 					node = node.getChildAt(index);
! 					stack.push(new Integer(index));
! 					current++;
! //					System.out.println("  * Descend: " + index + "-" + current);
! 				} // if
! 
! 			} // if
! 
! 		} // while
! 
! 		return depth;
! 
! 	} // getDepth()
! 
! 	static Random	random = new Random(System.currentTimeMillis());
  
! 	public static void growTree(DefaultMutableTreeNode root) {
  
! 		// Variables
! 		int						index;
! 		DefaultMutableTreeNode	node;
! 		DefaultMutableTreeNode	current;
  
! 		current = root;
! 		index = 0;
! //		while (current != root) {
! 		do {
  
! //			if (random.nextInt(3) < 2) {
! 			if (random.nextBoolean()) {
! 				node = new DefaultMutableTreeNode(String.valueOf(index));
! 				index++;
! 				current.add(node);
! 				current = node;
! 			} else {
! 				current = (DefaultMutableTreeNode) current.getParent();
! 			} // if
  
! //		} // while
! 		} while (current != root && current != null);
  
! 		System.out.println("Number of nodes: " + index);
  
! /*
! 		// Calc # children
! 		size = random.nextInt(4);
  
! 		for (index = 0; index < size; index++) {
  
! 			// Create Node
! 			node = new DefaultMutableTreeNode(String.valueOf(index));
! 			growTree(node);
  
! 			// Add Node to root
! 			root.add(node);
  
! 		} // for
! */
! 	} // growTree()
  
! 	public static void main(String[] argv) {
! /*
! 		DefaultMutableTreeNode	node1 = new DefaultMutableTreeNode("node1");
! 		DefaultMutableTreeNode	node2 = new DefaultMutableTreeNode("node2");
! 		DefaultMutableTreeNode	node3 = new DefaultMutableTreeNode("node3");
! 		DefaultMutableTreeNode	node4 = new DefaultMutableTreeNode("node4");
! 		DefaultMutableTreeNode	node5 = new DefaultMutableTreeNode("node5");
! 		DefaultMutableTreeNode	node6 = new DefaultMutableTreeNode("node6");
! 		DefaultMutableTreeNode	node7 = new DefaultMutableTreeNode("node7");
! 		DefaultMutableTreeNode	node8 = new DefaultMutableTreeNode("node8");
  
! 		node1.add(node2);
! 		node1.add(node3);
! 		node2.add(node4);
! 		node2.add(node5);
! 		node3.add(node6);
! 		node3.add(node7);
! 		node5.add(node8);
  
! 		System.out.println("Depth (node1): " + node1.getDepth());
! 		System.out.println("Depth (node2): " + node2.getDepth());
! 		System.out.println("Depth (node3): " + node3.getDepth());
! */
  
! 		System.out.println("Create tree...");
! 		DefaultMutableTreeNode	root = new DefaultMutableTreeNode("root");
! 		growTree(root);
! 		System.out.println("Find depth...");
! 		System.out.println("Depth (root): " + root.getDepth());
  
! 	} // main
  
! 	/**
! 	 * getLevel
! 	 * @returns int
! 	 */
! 	public int getLevel() {
  
! 		// Variables
! 		TreeNode	current;
! 		int			count;
  
! 		// Lookup Parent
! 		count = -1;
! 		current = this;
! 		do {
! 			current = current.getParent();
! 			count++;
! 		} while (current != null);
  
! 		return count;
  
! 	} // getLevel()
  
! 	/**
! 	 * getPathToRoot
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @returns TreeNode[]
! 	 */
! 	protected TreeNode[] getPathToRoot(TreeNode value0, int value1) {
! 		return null; // TODO
! 	} // getPathToRoot()
  
! 	/**
! 	 * getUserObjectPath
! 	 * @returns Object[]
! 	 */
! 	public Object[] getUserObjectPath() {
  
! 		// Variables
! 		TreeNode[]	path;
! 		Object[]	object;
! 		int			index;
  
! 		// Get Path for Tree Nodes
! 		path = getPath();
  
! 		// Construct Object Path
! 		object = new Object[path.length];
! 		for (index = 0; index < path.length; index++) {
! 			object[index] = ((DefaultMutableTreeNode) path[index]).getUserObject();
! 		} // for
  
! 		// Return Object Path
! 		return object;
  
! 	} // getUserObjectPath()
  
! 	/**
! 	 * getRoot
! 	 * @returns TreeNode
! 	 */
! 	public TreeNode getRoot() {
  
! 		// Variables
! 		TreeNode	current;
! 		TreeNode	check;
  
! 		// Lookup Parent
! 		current = this;
! 		check = current.getParent();
! 		while (check != null) {
! 			current = check;
! 			check = current.getParent();
! 		} // while
  
! 		return current;
  
! 	} // getRoot()
  
! 	/**
! 	 * isRoot
! 	 * @returns boolean
! 	 */
! 	public boolean isRoot() {
! 		return (parent == null);
! 	} // isRoot()
  
! 	/**
! 	 * getNextNode
! 	 * @returns DefaultMutableTreeNode
! 	 */
! 	public DefaultMutableTreeNode getNextNode() {
! 		return null; // TODO
! 	} // getNextNode()
  
! 	/**
! 	 * getPreviousNode
! 	 * @returns DefaultMutableTreeNode
! 	 */
! 	public DefaultMutableTreeNode getPreviousNode() {
! 		return null; // TODO
! 	} // getPreviousNode()
  
! 	/**
! 	 * preorderEnumeration
! 	 * @returns Enumeration
! 	 */
! 	public Enumeration preorderEnumeration() {
! 		return null; // TODO
! 	} // preorderEnumeration()
  
! 	/**
! 	 * postorderEnumeration
! 	 * @returns Enumeration
! 	 */
! 	public Enumeration postorderEnumeration() {
! 		return null; // TODO
! 	} // postorderEnumeration()
  
! 	/**
! 	 * breadthFirstEnumeration
! 	 * @returns Enumeration
! 	 */
! 	public Enumeration breadthFirstEnumeration() {
! 		return null; // TODO
! 	} // breadthFirstEnumeration()
  
! 	/**
! 	 * depthFirstEnumeration
! 	 * @returns Enumeration
! 	 */
! 	public Enumeration depthFirstEnumeration() {
! 		return null; // TODO
! 	} // depthFirstEnumeration()
  
! 	/**
! 	 * pathFromAncestorEnumeration
! 	 * @param value0 TODO
! 	 * @returns Enumeration
! 	 */
! 	public Enumeration pathFromAncestorEnumeration(TreeNode value0) {
! 		return null; // TODO
! 	} // pathFromAncestorEnumeration()
  
! 	/**
! 	 * isNodeChild
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isNodeChild(TreeNode node) {
  
! 		// Variables
! 		TreeNode	current;
  
! 		// Sanity Check
! 		if (node == null) {
! 			return false;
! 		} // if
  
! 		// Process Path
! 		current = node;
! 		while (current != null) {
! 			if (current == this) {
! 				return true;
! 			} // if
! 			current = current.getParent();
! 		} // while
  
! 		// Node not located in path, not child
! 		return false;
  
! 	} // isNodeChild()
  
! 	/**
! 	 * getFirstChild
! 	 * @returns TreeNode
! 	 */
! 	public TreeNode getFirstChild() {
! 		return (TreeNode) children.firstElement();
! 	} // getFirstChild()
  
! 	/**
! 	 * getLastChild
! 	 * @returns TreeNode
! 	 */
! 	public TreeNode getLastChild() {
! 		return (TreeNode) children.lastElement();
! 	} // getLastChild()
  
! 	/**
! 	 * getChildAfter
! 	 * @param value0 TODO
! 	 * @returns TreeNode
! 	 */
! 	public TreeNode getChildAfter(TreeNode node) {
  
! 		// Variables
! 		int		index;
  
! 		// Check node
! 		if (node == null || node.getParent() != this) {
! 			throw new IllegalArgumentException();
! 		} // if
  
! 		// Get index of child node
! 		index = getIndex(node);
  
! 		// Check for child after
! 		index++;
! 		if (index == getChildCount()) {
! 			return null;
! 		} // if
  
! 		// Retrieve Child After
! 		return getChildAt(index);
  
! 	} // getChildAfter()
  
! 	/**
! 	 * getChildBefore
! 	 * @param value0 TODO
! 	 * @returns TreeNode
! 	 */
! 	public TreeNode getChildBefore(TreeNode node) {
  
! 		// Variables
! 		int		index;
  
! 		// Check node
! 		if (node == null || node.getParent() != this) {
! 			throw new IllegalArgumentException();
! 		} // if
  
! 		// Get index of child node
! 		index = getIndex(node);
  
! 		// Check for child before
! 		index--;
! 		if (index < 0) {
! 			return null;
! 		} // if
  
! 		// Retrieve Child Before
! 		return getChildAt(index);
  
! 	} // getChildBefore()
  
! 	/**
! 	 * isNodeSibling
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isNodeSibling(TreeNode node) {
  
! 		// Check for null
! 		if (node == null) {
! 			return false;
! 		} // if
  
! 		// Check if nodes share a parent
! 		if (node.getParent() == getParent() && getParent() != null) {
! 			return true;
! 		} // if
  
! 		// Nodes are not siblings
! 		return false;
  
! 	} // isNodeSibling()
  
! 	/**
! 	 * getSiblingCount
! 	 * @returns int
! 	 */
! 	public int getSiblingCount() {
  
! 		// Variables
  
! 		// Check for no parent
! 		if (parent == null) {
! 			return 1;
! 		} // if
  
! 		// Calculate sibling count from parent's child count
! 		return parent.getChildCount();
  
! 	} // getSiblingCount()
  
! 	/**
! 	 * getNextSibling
! 	 * @returns DefaultMutableTreeNode
! 	 */
! 	public DefaultMutableTreeNode getNextSibling() {
  
! 		// Variables
! 		int		index;
! 		int		size;
  
! 		// Check for Parent
! 		if (parent == null) {
! 			return null;
! 		} // if
  
! 		// Get Index of this node
! 		index = parent.getIndex(this);
  
! 		// Check for Next Sibling
! 		size = parent.getChildCount();
! 		index++;
! 		if (index == size) {
! 			return null;
! 		} // if
  
! 		return (DefaultMutableTreeNode) parent.getChildAt(index);
  
! 	} // getNextSibling()
  
! 	/**
! 	 * getPreviousSibling
! 	 * @returns DefaultMutableTreeNode
! 	 */
! 	public DefaultMutableTreeNode getPreviousSibling() {
  
! 		// Variables
! 		int		index;
  
! 		// Check for Parent
! 		if (parent == null) {
! 			return null;
! 		} // if
  
! 		// Get Index of this node
! 		index = parent.getIndex(this);
  
! 		// Check for Previous Sibling
! 		index--;
! 		if (index < 0) {
! 			return null;
! 		} // if
  
! 		return (DefaultMutableTreeNode) parent.getChildAt(index);
  
! 	} // getPreviousSibling()
  
! 	/**
! 	 * isLeaf
! 	 * @returns boolean
! 	 */
! 	public boolean isLeaf() {
! 		return (children.size() == 0); // TODO: check allowsChildren??
! 	} // isLeaf()
  
! 	/**
! 	 * getFirstLeaf
! 	 * @returns DefaultMutableTreeNode
! 	 */
! 	public DefaultMutableTreeNode getFirstLeaf() {
  
! 		// Variables
! 		TreeNode	current;
  
! 		current = this;
! 		while (current.getChildCount() > 0) {
! 			current = current.getChildAt(0);
! 		} // while
  
! 		return (DefaultMutableTreeNode) current;
  
! 	} // getFirstLeaf()
  
! 	/**
! 	 * getLastLeaf
! 	 * @returns DefaultMutableTreeNode
! 	 */
! 	public DefaultMutableTreeNode getLastLeaf() {
  
! 		// Variables
! 		TreeNode	current;
! 		int			size;
  
! 		current = this;
! 		size = current.getChildCount();
! 		while (size > 0) {
! 			current = current.getChildAt(size - 1);
! 			size = current.getChildCount();
! 		} // while
  
! 		return (DefaultMutableTreeNode) current;
  
! 	} // getLastLeaf()
  
! 	/**
! 	 * getNextLeaf
! 	 * @returns DefaultMutableTreeNode
! 	 */
! 	public DefaultMutableTreeNode getNextLeaf() {
! 		return null; // TODO
! 	} // getNextLeaf()
  
! 	/**
! 	 * getPreviousLeaf
! 	 * @returns DefaultMutableTreeNode
! 	 */
! 	public DefaultMutableTreeNode getPreviousLeaf() {
! 		return null; // TODO
! 	} // getPreviousLeaf()
  
! 	/**
! 	 * getLeafCount
! 	 * @returns int
! 	 */
! 	public int getLeafCount() {
  
! 		// Variables
! 		Enumeration	enum;
! 		int			count;
! 		TreeNode	current;
  
! 		// Get Enumeration of all descendants
! 		enum = depthFirstEnumeration();
  
! 		// Process Nodes
! 		count = 0;
! 		while (enum.hasMoreElements() == true) {
! 			current = (TreeNode) enum.nextElement();
! 			if (current.isLeaf() == true) {
! 				count++;
! 			} // if
! 		} // if
  
! 		return count;
  
! 	} // getLeafCount()
  
  
! } // DefaultMutableTreeNode
--- 38,954 ----
  
  package javax.swing.tree;
  
+ import gnu.java.util.EmptyEnumeration;
+ 
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.ArrayList;
  import java.util.Enumeration;
  import java.util.Stack;
  import java.util.Vector;
  
  /**
   * DefaultMutableTreeNode
+  *
   * @author Andrew Selkirk
   */
  public class DefaultMutableTreeNode
    implements Cloneable, MutableTreeNode, Serializable
  {
!   private static final long serialVersionUID = -4298474751201349152L;
  
!   /**
!    * EMPTY_ENUMERATION
!    */
!   public static final Enumeration EMPTY_ENUMERATION =
!     EmptyEnumeration.getInstance();
  
!   /**
!    * parent
!    */
!   protected MutableTreeNode parent;
  
!   /**
!    * children
!    */
!   protected Vector children = new Vector();
  
!   /**
!    * userObject
!    */
!   protected transient Object userObject;
  
!   /**
!    * allowsChildren
!    */
!   protected boolean allowsChildren;
  
!   /**
!    * Creates a <code>DefaultMutableTreeNode</code> object.
!    * This node allows to add child nodes.
!    */
!   public DefaultMutableTreeNode()
!   {
!     this(null, true);
!   }
  
!   /**
!    * Creates a <code>DefaultMutableTreeNode</code> object with the given
!    * user object attached to it. This node allows to add child nodes.
!    *
!    * @param userObject the user object
!    */
!   public DefaultMutableTreeNode(Object userObject)
!   {
!     this(userObject, true);
!   }
  
!   /**
!    * Creates a <code>DefaultMutableTreeNode</code> object with the given
!    * user object attached to it.
!    *
!    * @param userObject the user object
!    * @param allowsChildren <code>true</code> if the code allows to add child
!    * nodes, <code>false</code> otherwise
!    */
!   public DefaultMutableTreeNode(Object userObject, boolean allowsChildren)
!   {
!     this.userObject = userObject;
!     this.allowsChildren = allowsChildren;
!   }
  
!   /**
!    * clone
!    *
!    * @return Object
!    */
!   public Object clone()
!   {
!     try
!       {
!         return super.clone();
!         // TODO: Do we need to do more here ?
!       }
!     catch (CloneNotSupportedException e)
!       {
!         // This never happens.
!         return null;
!       }
!   }
  
!   /**
!    * Returns a string representation of this node
!    *
!    * @return a human-readable String representing this node
!    */
!   public String toString()
!   {
!     if (userObject == null)
!       return null;
  
!     return userObject.toString();
!   }
  
!   /**
!    * Adds a new child node to this node.
!    *
!    * @param child the child node
!    *
!    * @throws IllegalArgumentException if <code>child</code> is null
!    * @throws IllegalStateException if the node does not allow children
!    */
!   public void add(MutableTreeNode child)
!   {
!     if (child == null)
!       throw new IllegalArgumentException();
  
!     if (! allowsChildren)
!       throw new IllegalStateException();
!     
!     children.add(child);
!     child.setParent(this);
!   }
  
!   /**
!    * Returns the parent node of this node.
!    *
!    * @return the parent node
!    */
!   public TreeNode getParent()
!   {
!     return parent;
!   }
  
!   /**
!    * Removes the child with the given index from this node
!    *
!    * @param index the index
!    */
!   public void remove(int index)
!   {
!     children.remove(index);
!   }
  
!   /**
!    * Removes the given child from this node.
!    *
!    * @param node the child node
!    */
!   public void remove(MutableTreeNode node)
!   {
!     children.remove(node);
!   }
  
!   /**
!    * writeObject
!    *
!    * @param stream the output stream
!    *
!    * @exception IOException If an error occurs
!    */
!   private void writeObject(ObjectOutputStream stream)
!     throws IOException
!   {
!     // TODO: Implement me.
!   }
  
!   /**
!    * readObject
!    *
!    * @param stream the input stream
!    *
!    * @exception IOException If an error occurs
!    * @exception ClassNotFoundException TODO
!    */
!   private void readObject(ObjectInputStream stream)
!     throws IOException, ClassNotFoundException
!   {
!     // TODO: Implement me.
!   }
  
!   /**
!    * Inserts given child node at the given index.
!    *
!    * @param node the child node
!    * @param value the index.
!    */
!   public void insert(MutableTreeNode node, int index)
!   {
!     children.insertElementAt(node, index);
!   }
  
!   /**
!    * Returns a path to this node from the root.
!    *
!    * @return an array of tree nodes
!    */
!   public TreeNode[] getPath()
!   {
!     return getPathToRoot(this, 0);
!   }
  
!   /**
!    * Returns an enumeration containing all children of this node.
!    * <code>EMPTY_ENUMERATION</code> is returned if this node has no children.
!    *
!    * @return an enumeration of tree nodes
!    */
!   public Enumeration children()
!   {
!     if (children.size() == 0)
!       return EMPTY_ENUMERATION;
!     
!     return children.elements();
!   }
  
!   /**
!    * Set the parent node for this node.
!    *
!    * @param node the parent node
!    */
!   public void setParent(MutableTreeNode node)
!   {
!     parent = node;
!   }
  
!   /**
!    * Returns the child node at a given index.
!    *
!    * @param index the index
!    *
!    * @return the child node
!    */
!   public TreeNode getChildAt(int index)
!   {
!     return (TreeNode) children.elementAt(index);
!   }
  
!   /**
!    * Returns the number of children of this node.
!    *
!    * @return the number of children
!    */
!   public int getChildCount()
!   {
!     return children.size();
!   }
  
!   /**
!    * Returns the child index for a given node.
!    *
!    * @param node this node
!    *
!    * @return the index
!    */
!   public int getIndex(TreeNode node)
!   {
!     return children.indexOf(node);
!   }
  
!   /**
!    * setAllowsChildren
!    *
!    * @param allowsChildren TODO
!    */
!   public void setAllowsChildren(boolean allowsChildren)
!   {
!     this.allowsChildren = allowsChildren;
!   }
  
!   /**
!    * getAllowsChildren
!    *
!    * @return boolean
!    */
!   public boolean getAllowsChildren()
!   {
!     return allowsChildren;
!   }
  
!   /**
!    * Sets the user object for this node
!    *
!    * @param userObject the user object
!    */
!   public void setUserObject(Object userObject)
!   {
!     this.userObject = userObject;
!   }
  
!   /**
!    * Returns the user object attached to this node. <code>null</code> is
!    * returned when no user object is set.
!    *
!    * @return the user object
!    */
!   public Object getUserObject()
!   {
!     return userObject;
!   }
  
!   /**
!    * Removes this node from its parent.
!    */
!   public void removeFromParent()
!   {
!     // FIXME: IS this implementation really correct ?
!     parent = null;
!   }
  
!   /**
!    * Removes all child nodes from this node.
!    */
!   public void removeAllChildren()
!   {
!     children.removeAllElements();
!   }
  
!   /**
!    * isNodeAncestor
!    *
!    * @param node TODO
!    *
!    * @return boolean
!    */
!   public boolean isNodeAncestor(TreeNode node)
!   {
!     if (node == null)
!       return false;
  
!     TreeNode current = this;
  
!     while (current != null
!            && current != node)
!       current = current.getParent();
  
!     return current == node;
!   }
  
!   /**
!    * isNodeDescendant
!    *
!    * @param node0 TODO
!    *
!    * @return boolean
!    */
!   public boolean isNodeDescendant(DefaultMutableTreeNode node)
!   {
!     if (node == null)
!       return false;
  
!     TreeNode current = node;
!     
!     while (current != null
!            && current != this)
!       current = current.getParent();
  
!     return current == this;
!   }
  
!   /**
!    * getSharedAncestor
!    *
!    * @param node TODO
!    *
!    * @return TreeNode
!    */
!   public TreeNode getSharedAncestor(DefaultMutableTreeNode node)
!   {
!     TreeNode current = this;
!     ArrayList list = new ArrayList();
  
!     while (current != null)
!       {
!         list.add(current);
!         current = current.getParent();
!       }
  
!     current = node;
  
!     while (current != null)
!       {
!         if (list.contains(current))
!           return current;
  
!         current = current.getParent();
!       }
  
!     return null;
!   }
  
!   /**
!    * isNodeRelated
!    *
!    * @param node TODO
!    *
!    * @return boolean
!    */
!   public boolean isNodeRelated(DefaultMutableTreeNode node)
!   {
!     if (node == null)
!       return false;
  
!     return node.getRoot() == getRoot();
!   }
  
!   /**
!    * getDepth
!    *
!    * @return int
!    */
!   public int getDepth()
!   {
!     if ((! allowsChildren)
!         || children.size() == 0)
!       return 0;
  
!     Stack stack = new Stack();
!     stack.push(new Integer(0));
!     TreeNode node = getChildAt(0);
!     int depth = 0;
!     int current = 1;
!     
!     while (! stack.empty())
!       {
!         if (node.getChildCount() != 0)
!           {
!             node = node.getChildAt(0);
!             stack.push(new Integer(0));
!             current++;
!           }
!         else
!           {
!             if (current > depth)
!               depth = current;
  
!             int size;
!             int index;
!             
!             do
!               {
!                 node = node.getParent();
!                 size = node.getChildCount();
!                 index = ((Integer) stack.pop()).intValue() + 1;
!                 current--;
!               }
!             while (index >= size
!                    && node != this);
  
!             if (index < size)
!               {
!                 node = node.getChildAt(index);
!                 stack.push(new Integer(index));
!                 current++;
!               }
!           }
!       }
  
!     return depth;
!   }
  
!   /**
!    * getLevel
!    *
!    * @return int
!    */
!   public int getLevel()
!   {
!     int count = -1;
!     TreeNode current = this;
  
!     do
!       {
!         current = current.getParent();
!         count++;
!       }
!     while (current != null);
  
!     return count;
!   }
  
!   /**
!    * getPathToRoot
!    *
!    * @param node TODO
!    * @param depth TODO
!    *
!    * @return TreeNode[]
!    */
!   protected TreeNode[] getPathToRoot(TreeNode node, int depth)
!   {
!     if (node == null)
!       {
!         if (depth == 0)
!           return null;
!         
!         return new TreeNode[depth];
!       }
  
!     TreeNode[] path = getPathToRoot(node.getParent(), depth + 1);
!     path[path.length - depth - 1] = node;
!     return path;
!   }
  
!   /**
!    * getUserObjectPath
!    *
!    * @return Object[]
!    */
!   public Object[] getUserObjectPath()
!   {
!     TreeNode[] path = getPathToRoot(this, 0);
!     Object[] object = new Object[path.length];
!     
!     for (int index = 0; index < path.length; ++index)
!       object[index] = ((DefaultMutableTreeNode) path[index]).getUserObject();
  
!     return object;
!   }
  
!   /**
!    * Returns the root node by iterating the parents of this node.
!    *
!    * @return the root node
!    */
!   public TreeNode getRoot()
!   {
!     TreeNode current = this;
!     TreeNode check = current.getParent();
!     
!     while (check != null)
!       {
!         current = check;
!         check = current.getParent();
!       }
  
!     return current;
!   }
  
!   /**
!    * Tells whether this node is the root node or not.
!    *
!    * @return <code>true</code> if this is the root node,
!    * <code>false</code>otherwise
!    */
!   public boolean isRoot()
!   {
!     return parent == null;
!   }
  
!   /**
!    * getNextNode
!    *
!    * @return DefaultMutableTreeNode
!    */
!   public DefaultMutableTreeNode getNextNode()
!   {
!     // Return first child.
!     if (getChildCount() != 0)
!       return (DefaultMutableTreeNode) getChildAt(0);
  
!     // Return next sibling (if needed the sibling of some parent).
!     DefaultMutableTreeNode node = this;
!     DefaultMutableTreeNode sibling;
!     
!     do
!       {
!         sibling = node.getNextSibling();
!         node = (DefaultMutableTreeNode) node.getParent();
!       }
!     while (sibling == null &&
!            node != null);
!     
!     // Return sibling.
!     return sibling;
!   }
  
!   /**
!    * getPreviousNode
!    *
!    * @return DefaultMutableTreeNode
!    */
!   public DefaultMutableTreeNode getPreviousNode()
!   {
!     // Return null if no parent.
!     if (parent == null)
!       return null;
!     
!     DefaultMutableTreeNode sibling = getPreviousSibling();
  
!     // Return parent if no sibling.
!     if (sibling == null)
!       return (DefaultMutableTreeNode) parent;
  
!     // Return last leaf of sibling.
!     if (sibling.getChildCount() != 0)
!       return sibling.getLastLeaf();
  
!     // Return sibling.
!     return sibling;
!   }
  
!   /**
!    * preorderEnumeration
!    *
!    * @return Enumeration
!    */
!   public Enumeration preorderEnumeration()
!   {
!     return null; // TODO: Implement me.
!   }
  
!   /**
!    * postorderEnumeration
!    *
!    * @return Enumeration
!    */
!   public Enumeration postorderEnumeration()
!   {
!     return null; // TODO: Implement me.
!   }
  
!   /**
!    * breadthFirstEnumeration
!    *
!    * @return Enumeration
!    */
!   public Enumeration breadthFirstEnumeration()
!   {
!     return null; // TODO: Implement me.
!   }
  
!   /**
!    * depthFirstEnumeration
!    *
!    * @return Enumeration
!    */
!   public Enumeration depthFirstEnumeration()
!   {
!     return postorderEnumeration();
!   }
  
!   /**
!    * pathFromAncestorEnumeration
!    *
!    * @param node TODO
!    *
!    * @return Enumeration
!    */
!   public Enumeration pathFromAncestorEnumeration(TreeNode node)
!   {
!     if (node == null)
!       throw new IllegalArgumentException();
!     
!     TreeNode parent = this;
!     Vector nodes = new Vector();
!     nodes.add(this);
  
!     while (parent != node && parent != null)
!       {
!         parent = parent.getParent();
!         nodes.add(0, parent);
!       }
  
!     if (parent != node)
!       throw new IllegalArgumentException();
!     
!     return nodes.elements();
!   }
  
!   /**
!    * isNodeChild
!    *
!    * @param node TODO
!    *
!    * @return boolean
!    */
!   public boolean isNodeChild(TreeNode node)
!   {
!     if (node == null)
!       return false;
  
!     return node.getParent() == this;
!   }
  
!   /**
!    * getFirstChild
!    *
!    * @return TreeNode
!    */
!   public TreeNode getFirstChild()
!   {
!     return (TreeNode) children.firstElement();
!   }
  
!   /**
!    * getLastChild
!    *
!    * @return TreeNode
!    */
!   public TreeNode getLastChild()
!   {
!     return (TreeNode) children.lastElement();
!   }
  
!   /**
!    * getChildAfter
!    *
!    * @param node TODO
!    *
!    * @return TreeNode
!    */
!   public TreeNode getChildAfter(TreeNode node)
!   {
!     if (node == null
!         || node.getParent() != this)
!       throw new IllegalArgumentException();
  
!     int index = getIndex(node) + 1;
  
!     if (index == getChildCount())
!       return null;
  
!     return getChildAt(index);
!   }
  
!   /**
!    * getChildBefore
!    *
!    * @param node TODO
!    *
!    * @return TreeNode
!    */
!   public TreeNode getChildBefore(TreeNode node)
!   {
!     if (node == null
!         || node.getParent() != this)
!       throw new IllegalArgumentException();
  
!     int index = getIndex(node) - 1;
  
!     if (index < 0)
!       return null;
  
!     return getChildAt(index);
!   }
  
!   /**
!    * isNodeSibling
!    *
!    * @param node TODO
!    *
!    * @return boolean
!    */
!   public boolean isNodeSibling(TreeNode node)
!   {
!     if (node == null)
!       return false;
  
!     return (node.getParent() == getParent()
!             && getParent() != null);
!   }
  
!   /**
!    * getSiblingCount
!    *
!    * @return int
!    */
!   public int getSiblingCount()
!   {
!     if (parent == null)
!       return 1;
  
!     return parent.getChildCount();
!   }
  
!   /**
!    * getNextSibling
!    *
!    * @return DefaultMutableTreeNode
!    */
!   public DefaultMutableTreeNode getNextSibling()
!   {
!     if (parent == null)
!       return null;
  
!     int index = parent.getIndex(this) + 1;
!     
!     if (index == parent.getChildCount())
!       return null;
  
!     return (DefaultMutableTreeNode) parent.getChildAt(index);
!   }
  
!   /**
!    * getPreviousSibling
!    *
!    * @return DefaultMutableTreeNode
!    */
!   public DefaultMutableTreeNode getPreviousSibling()
!   {
!     if (parent == null)
!       return null;
  
!     int index = parent.getIndex(this) - 1;
  
!     if (index < 0)
!       return null;
  
!     return (DefaultMutableTreeNode) parent.getChildAt(index);
!   }
  
!   /**
!    * isLeaf
!    *
!    * @return boolean
!    */
!   public boolean isLeaf()
!   {
!     return children.size() == 0;
!   }
  
!   /**
!    * getFirstLeaf
!    *
!    * @return DefaultMutableTreeNode
!    */
!   public DefaultMutableTreeNode getFirstLeaf()
!   {
!     TreeNode current = this;
!     
!     while (current.getChildCount() > 0)
!       current = current.getChildAt(0);
  
!     return (DefaultMutableTreeNode) current;
!   }
  
!   /**
!    * getLastLeaf
!    *
!    * @return DefaultMutableTreeNode
!    */
!   public DefaultMutableTreeNode getLastLeaf()
!   {
!     TreeNode current = this;
!     int size = current.getChildCount();
!     
!     while (size > 0)
!       {
!         current = current.getChildAt(size - 1);
!         size = current.getChildCount();
!       }
  
!     return (DefaultMutableTreeNode) current;
!   }
  
!   /**
!    * getNextLeaf
!    *
!    * @return DefaultMutableTreeNode
!    */
!   public DefaultMutableTreeNode getNextLeaf()
!   {
!     if (parent == null)
!       return null;
  
!     return null;
!     //return parent.getChildAfter(this);
!   }
  
!   /**
!    * getPreviousLeaf
!    *
!    * @return DefaultMutableTreeNode
!    */
!   public DefaultMutableTreeNode getPreviousLeaf()
!   {
!     if (parent == null)
!       return null;
!     
!     return null;
!     //return parent.getChildBefore(this);
!   }
  
!   /**
!    * getLeafCount
!    *
!    * @return int
!    */
!   public int getLeafCount()
!   {
!     int count = 0;
!     Enumeration e = depthFirstEnumeration();
  
+     while (e.hasMoreElements())
+       {
+         TreeNode current = (TreeNode) e.nextElement();
+         
+         if (current.isLeaf())
+           count++;
+       }
  
!     return count;
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/DefaultTreeCellEditor.java gcc-4.0.0/libjava/javax/swing/tree/DefaultTreeCellEditor.java
*** gcc-3.4.3/libjava/javax/swing/tree/DefaultTreeCellEditor.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/tree/DefaultTreeCellEditor.java	Tue Nov 30 23:59:08 2004
***************
*** 1,5 ****
  /* DefaultTreeCellEditor.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultTreeCellEditor.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.IOException;
*** 50,55 ****
--- 50,56 ----
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.util.EventObject;
+ 
  import javax.swing.Icon;
  import javax.swing.JTextField;
  import javax.swing.JTree;
*************** import javax.swing.event.TreeSelectionLi
*** 63,502 ****
   * DefaultTreeCellEditor
   * @author Andrew Selkirk
   */
! public class DefaultTreeCellEditor implements ActionListener, TreeCellEditor, TreeSelectionListener {
! 
! 	//-------------------------------------------------------------
! 	// Classes ----------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * EditorContainer
! 	 */
! 	public class EditorContainer extends Container {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor EditorContainer
! 		 * @param value0 TODO
! 		 */
! 		public EditorContainer(DefaultTreeCellEditor value0) {
! 			// TODO
! 		} // EditorContainer()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getPreferredSize
! 		 * @returns Dimension
! 		 */
! 		public Dimension getPreferredSize() {
! 			return null; // TODO
! 		} // getPreferredSize()
! 
! 		/**
! 		 * paint
! 		 * @param value0 TODO
! 		 */
! 		public void paint(Graphics value0) {
! 			// TODO
! 		} // paint()
! 
! 		/**
! 		 * doLayout
! 		 */
! 		public void doLayout() {
! 			// TODO
! 		} // doLayout()
! 
! 
! 	} // EditorContainer
! 
! 	/**
! 	 * DefaultTextField
! 	 */
! 	public class DefaultTextField extends JTextField {
! 
! 		//-------------------------------------------------------------
! 		// Variables --------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * border
! 		 */
! 		protected Border border;
! 
! 
! 		//-------------------------------------------------------------
! 		// Initialization ---------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * Constructor DefaultTextField
! 		 * @param value0 TODO
! 		 * @param value1 TODO
! 		 */
! 		public DefaultTextField(DefaultTreeCellEditor value0, Border value1) {
! 			// TODO
! 		} // DefaultTextField()
! 
! 
! 		//-------------------------------------------------------------
! 		// Methods ----------------------------------------------------
! 		//-------------------------------------------------------------
! 
! 		/**
! 		 * getFont
! 		 * @returns Font
! 		 */
! 		public Font getFont() {
! 			return null; // TODO
! 		} // getFont()
! 
! 		/**
! 		 * getBorder
! 		 * @returns Border
! 		 */
! 		public Border getBorder() {
! 			return null; // TODO
! 		} // getBorder()
  
! 		/**
! 		 * getPreferredSize
! 		 * @returns Dimension
! 		 */
! 		public Dimension getPreferredSize() {
! 			return null; // TODO
! 		} // getPreferredSize()
  
  
! 	} // DefaultTextField
  
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * realEditor
! 	 */
! 	protected TreeCellEditor realEditor;
  
! 	/**
! 	 * renderer
! 	 */
! 	protected DefaultTreeCellRenderer renderer;
  
! 	/**
! 	 * editingContainer
! 	 */
! 	protected Container editingContainer;
  
! 	/**
! 	 * editingComponent
! 	 */
! 	protected transient Component editingComponent;
  
! 	/**
! 	 * canEdit
! 	 */
! 	protected boolean canEdit;
  
! 	/**
! 	 * offset
! 	 */
! 	protected transient int offset;
  
! 	/**
! 	 * tree
! 	 */
! 	protected transient JTree tree;
  
! 	/**
! 	 * lastPath
! 	 */
! 	protected transient TreePath lastPath;
  
! 	/**
! 	 * timer
! 	 */
! 	protected transient javax.swing.Timer timer; // TODO
  
! 	/**
! 	 * lastRow
! 	 */
! 	protected transient int lastRow;
  
! 	/**
! 	 * borderSelectionColor
! 	 */
! 	protected Color borderSelectionColor;
  
! 	/**
! 	 * editingIcon
! 	 */
! 	protected transient Icon editingIcon;
  
! 	/**
! 	 * font
! 	 */
! 	protected Font font;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor DefaultTreeCellEditor
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public DefaultTreeCellEditor(JTree value0, DefaultTreeCellRenderer value1) {
! 		// TODO
! 	} // DefaultTreeCellEditor()
  
! 	/**
! 	 * Constructor DefaultTreeCellEditor
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 */
! 	public DefaultTreeCellEditor(JTree value0, DefaultTreeCellRenderer value1, TreeCellEditor value2) {
! 		// TODO
! 	} // DefaultTreeCellEditor()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param value0 TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream value0) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * readObject
! 	 * @param value0 TODO
! 	 * @exception IOException TODO
! 	 * @exception ClassNotFoundException TODO
! 	 */
! 	private void readObject(ObjectInputStream value0) throws IOException, ClassNotFoundException {
! 		// TODO
! 	} // readObject()
  
! 	/**
! 	 * setBorderSelectionColor
! 	 * @param value0 TODO
! 	 */
! 	public void setBorderSelectionColor(Color value0) {
! 		// TODO
! 	} // setBorderSelectionColor()
  
! 	/**
! 	 * getBorderSelectionColor
! 	 * @returns Color
! 	 */
! 	public Color getBorderSelectionColor() {
! 		return null; // TODO
! 	} // getBorderSelectionColor()
  
! 	/**
! 	 * setFont
! 	 * @param value0 TODO
! 	 */
! 	public void setFont(Font value0) {
! 		// TODO
! 	} // setFont()
  
! 	/**
! 	 * getFont
! 	 * @returns Font
! 	 */
! 	public Font getFont() {
! 		return null; // TODO
! 	} // getFont()
  
! 	/**
! 	 * getTreeCellEditorComponent
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 * @param value3 TODO
! 	 * @param value4 TODO
! 	 * @param value5 TODO
! 	 * @returns Component
! 	 */
! 	public Component getTreeCellEditorComponent(JTree value0, Object value1, boolean value2, boolean value3, boolean value4, int value5) {
! 		return null; // TODO
! 	} // getTreeCellEditorComponent()
  
! 	/**
! 	 * getCellEditorValue
! 	 * @returns Object
! 	 */
! 	public Object getCellEditorValue() {
! 		return null; // TODO
! 	} // getCellEditorValue()
  
! 	/**
! 	 * isCellEditable
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isCellEditable(EventObject value0) {
! 		return false; // TODO
! 	} // isCellEditable()
  
! 	/**
! 	 * shouldSelectCell
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean shouldSelectCell(EventObject value0) {
! 		return false; // TODO
! 	} // shouldSelectCell()
  
! 	/**
! 	 * stopCellEditing
! 	 * @returns boolean
! 	 */
! 	public boolean stopCellEditing() {
! 		return false; // TODO
! 	} // stopCellEditing()
  
! 	/**
! 	 * cancelCellEditing
! 	 */
! 	public void cancelCellEditing() {
! 		// TODO
! 	} // cancelCellEditing()
  
! 	/**
! 	 * addCellEditorListener
! 	 * @param value0 TODO
! 	 */
! 	public void addCellEditorListener(CellEditorListener value0) {
! 		// TODO
! 	} // addCellEditorListener()
  
! 	/**
! 	 * removeCellEditorListener
! 	 * @param value0 TODO
! 	 */
! 	public void removeCellEditorListener(CellEditorListener value0) {
! 		// TODO
! 	} // removeCellEditorListener()
  
! 	/**
! 	 * valueChanged
! 	 * @param value0 TODO
! 	 */
! 	public void valueChanged(TreeSelectionEvent value0) {
! 		// TODO
! 	} // valueChanged()
  
! 	/**
! 	 * actionPerformed
! 	 * @param value0 TODO
! 	 */
! 	public void actionPerformed(ActionEvent value0) {
! 		// TODO
! 	} // actionPerformed()
  
! 	/**
! 	 * setTree
! 	 * @param value0 TODO
! 	 */
! 	protected void setTree(JTree value0) {
! 		// TODO
! 	} // setTree()
  
! 	/**
! 	 * shouldStartEditingTimer
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	protected boolean shouldStartEditingTimer(EventObject value0) {
! 		return false; // TODO
! 	} // shouldStartEditingTimer()
  
! 	/**
! 	 * startEditingTimer
! 	 */
! 	protected void startEditingTimer() {
! 		// TODO
! 	} // startEditingTimer()
  
! 	/**
! 	 * canEditImmediately
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	protected boolean canEditImmediately(EventObject value0) {
! 		return false; // TODO
! 	} // canEditImmediately()
  
! 	/**
! 	 * inHitRegion
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @returns boolean
! 	 */
! 	protected boolean inHitRegion(int value0, int value1) {
! 		return false; // TODO
! 	} // inHitRegion()
  
! 	/**
! 	 * determineOffset
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 * @param value3 TODO
! 	 * @param value4 TODO
! 	 * @param value5 TODO
! 	 */
! 	protected void determineOffset(JTree value0, Object value1, boolean value2, boolean value3, boolean value4, int value5) {
! 		// TODO
! 	} // determineOffset()
  
! 	/**
! 	 * prepareForEditing
! 	 */
! 	protected void prepareForEditing() {
! 		// TODO
! 	} // prepareForEditing()
  
! 	/**
! 	 * createContainer
! 	 * @returns Container
! 	 */
! 	protected Container createContainer() {
! 		return null; // TODO
! 	} // createContainer()
  
! 	/**
! 	 * createTreeCellEditor
! 	 * @returns TreeCellEditor
! 	 */
! 	protected TreeCellEditor createTreeCellEditor() {
! 		return null; // TODO
! 	} // createTreeCellEditor()
  
  
! } // DefaultTreeCellEditor
--- 64,516 ----
   * DefaultTreeCellEditor
   * @author Andrew Selkirk
   */
! public class DefaultTreeCellEditor
!   implements ActionListener, TreeCellEditor, TreeSelectionListener
! {
!   /**
!    * EditorContainer
!    */
!   public class EditorContainer extends Container
!   {
!     /**
!      * Creates an <code>EditorContainer</code> object.
!      */
!     public EditorContainer()
!     {
!       // Do nothing here.
!     }
  
!     /**
!      * This method only exists for API compatibility and is useless as it does
!      * nothing. It got probably introduced by accident.
!      */
!     public void EditorContainer()
!     {
!       // Do nothing here.
!     }
  
+     /**
+      * getPreferredSize
+      * @return Dimension
+      */
+     public Dimension getPreferredSize()
+     {
+       return null; // TODO
+     }
  
!     /**
!      * paint
!      * @param value0 TODO
!      */
!     public void paint(Graphics value0)
!     {
!       // TODO
!     }
  
+     /**
+      * doLayout
+      */
+     public void doLayout()
+     {
+       // TODO
+     }
+   }
  
!   /**
!    * DefaultTextField
!    */
!   public class DefaultTextField extends JTextField
!   {
!     /**
!      * border
!      */
!     protected Border border;
  
!     /**
!      * Creates a <code>DefaultTextField</code> object.
!      *
!      * @param border the border to use
!      */
!     public DefaultTextField(Border border)
!     {
!       this.border = border;
!     }
  
!     /**
!      * getFont
!      * @return Font
!      */
!     public Font getFont()
!     {
!       return null; // TODO
!     }
  
!     /**
!      * Returns the border of the text field.
!      *
!      * @return the border
!      */
!     public Border getBorder()
!     {
!       return border;
!     }
  
!     /**
!      * getPreferredSize
!      * @return Dimension
!      */
!     public Dimension getPreferredSize()
!     {
!       return null; // TODO
!     }
!   }
  
!   private EventListenerList listenerList = new EventListenerList();
  
!   /**
!    * realEditor
!    */
!   protected TreeCellEditor realEditor;
  
!   /**
!    * renderer
!    */
!   protected DefaultTreeCellRenderer renderer;
  
!   /**
!    * editingContainer
!    */
!   protected Container editingContainer;
  
!   /**
!    * editingComponent
!    */
!   protected transient Component editingComponent;
  
!   /**
!    * canEdit
!    */
!   protected boolean canEdit;
  
!   /**
!    * offset
!    */
!   protected transient int offset;
  
!   /**
!    * tree
!    */
!   protected transient JTree tree;
  
!   /**
!    * lastPath
!    */
!   protected transient TreePath lastPath;
  
+   /**
+    * timer
+    */
+   protected transient javax.swing.Timer timer; // TODO
  
!   /**
!    * lastRow
!    */
!   protected transient int lastRow;
  
!   /**
!    * borderSelectionColor
!    */
!   protected Color borderSelectionColor;
  
!   /**
!    * editingIcon
!    */
!   protected transient Icon editingIcon;
  
+   /**
+    * font
+    */
+   protected Font font;
  
!   /**
!    * Constructor DefaultTreeCellEditor
!    * @param value0 TODO
!    * @param value1 TODO
!    */
!   public DefaultTreeCellEditor(JTree value0, DefaultTreeCellRenderer value1)
!   {
!     // TODO
!   }
  
!   /**
!    * Constructor DefaultTreeCellEditor
!    * @param value0 TODO
!    * @param value1 TODO
!    * @param value2 TODO
!    */
!   public DefaultTreeCellEditor(JTree value0, DefaultTreeCellRenderer value1,
!                                TreeCellEditor value2)
!   {
!     // TODO
!   }
  
!   /**
!    * writeObject
!    * @param value0 TODO
!    * @exception IOException TODO
!    */
!   private void writeObject(ObjectOutputStream value0) throws IOException
!   {
!     // TODO
!   }
  
!   /**
!    * readObject
!    * @param value0 TODO
!    * @exception IOException TODO
!    * @exception ClassNotFoundException TODO
!    */
!   private void readObject(ObjectInputStream value0)
!     throws IOException, ClassNotFoundException
!   {
!     // TODO
!   }
  
!   /**
!    * setBorderSelectionColor
!    * @param value0 TODO
!    */
!   public void setBorderSelectionColor(Color value0)
!   {
!     // TODO
!   }
  
!   /**
!    * getBorderSelectionColor
!    * @return Color
!    */
!   public Color getBorderSelectionColor()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * setFont
!    * @param value0 TODO
!    */
!   public void setFont(Font value0)
!   {
!     // TODO
!   }
  
!   /**
!    * getFont
!    * @return Font
!    */
!   public Font getFont()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getTreeCellEditorComponent
!    * @param value0 TODO
!    * @param value1 TODO
!    * @param value2 TODO
!    * @param value3 TODO
!    * @param value4 TODO
!    * @param value5 TODO
!    * @return Component
!    */
!   public Component getTreeCellEditorComponent(JTree value0, Object value1,
!                                               boolean value2, boolean value3,
!                                               boolean value4, int value5)
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getCellEditorValue
!    * @return Object
!    */
!   public Object getCellEditorValue()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * isCellEditable
!    * @param value0 TODO
!    * @return boolean
!    */
!   public boolean isCellEditable(EventObject value0)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * shouldSelectCell
!    * @param value0 TODO
!    * @return boolean
!    */
!   public boolean shouldSelectCell(EventObject value0)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * stopCellEditing
!    * @return boolean
!    */
!   public boolean stopCellEditing()
!   {
!     return false; // TODO
!   }
  
!   /**
!    * cancelCellEditing
!    */
!   public void cancelCellEditing()
!   {
!     // TODO
!   }
  
!   /**
!    * Adds a <code>CellEditorListener</code> object to this editor.
!    *
!    * @param listener the listener to add
!    */
!   public void addCellEditorListener(CellEditorListener listener)
!   {
!     listenerList.add(CellEditorListener.class, listener);
!   }
  
!   /**
!    * Removes a <code>CellEditorListener</code> object.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeCellEditorListener(CellEditorListener listener)
!   {
!     listenerList.remove(CellEditorListener.class, listener);
!   }
  
!   /**
!    * Returns all added <code>CellEditorListener</code> objects to this editor.
!    *
!    * @return an array of listeners
!    *
!    * @since 1.4
!    */
!   public CellEditorListener[] getCellEditorListeners()
!   {
!     return (CellEditorListener[]) listenerList.getListeners(CellEditorListener.class);
!   }
  
!   /**
!    * valueChanged
!    * @param value0 TODO
!    */
!   public void valueChanged(TreeSelectionEvent value0)
!   {
!     // TODO
!   }
  
!   /**
!    * actionPerformed
!    * @param value0 TODO
!    */
!   public void actionPerformed(ActionEvent value0)
!   {
!     // TODO
!   }
  
!   /**
!    * setTree
!    * @param value0 TODO
!    */
!   protected void setTree(JTree value0)
!   {
!     // TODO
!   }
  
!   /**
!    * shouldStartEditingTimer
!    * @param value0 TODO
!    * @return boolean
!    */
!   protected boolean shouldStartEditingTimer(EventObject value0)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * startEditingTimer
!    */
!   protected void startEditingTimer()
!   {
!     // TODO
!   }
  
!   /**
!    * canEditImmediately
!    * @param value0 TODO
!    * @return boolean
!    */
!   protected boolean canEditImmediately(EventObject value0)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * inHitRegion
!    * @param value0 TODO
!    * @param value1 TODO
!    * @return boolean
!    */
!   protected boolean inHitRegion(int value0, int value1)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * determineOffset
!    * @param value0 TODO
!    * @param value1 TODO
!    * @param value2 TODO
!    * @param value3 TODO
!    * @param value4 TODO
!    * @param value5 TODO
!    */
!   protected void determineOffset(JTree value0, Object value1, boolean value2,
!                                  boolean value3, boolean value4, int value5)
!   {
!     // TODO
!   }
  
!   /**
!    * prepareForEditing
!    */
!   protected void prepareForEditing()
!   {
!     // TODO
!   }
  
+   /**
+    * createContainer
+    * @return Container
+    */
+   protected Container createContainer()
+   {
+     return null; // TODO
+   }
  
!   /**
!    * createTreeCellEditor
!    * @return TreeCellEditor
!    */
!   protected TreeCellEditor createTreeCellEditor()
!   {
!     return null; // TODO
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/DefaultTreeCellRenderer.java gcc-4.0.0/libjava/javax/swing/tree/DefaultTreeCellRenderer.java
*** gcc-3.4.3/libjava/javax/swing/tree/DefaultTreeCellRenderer.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/tree/DefaultTreeCellRenderer.java	Tue Nov 30 23:59:09 2004
***************
*** 1,5 ****
  /* DefaultTreeCellRenderer.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultTreeCellRenderer.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.awt.Dimension;
*** 44,52 ****
--- 44,56 ----
  import java.awt.Font;
  import java.awt.Graphics;
  import java.awt.Rectangle;
+ 
  import javax.swing.Icon;
  import javax.swing.JLabel;
  import javax.swing.JTree;
+ import javax.swing.UIDefaults;
+ import javax.swing.UIManager;
+ import javax.swing.plaf.UIResource;
  
  /**
   * DefaultTreeCellRenderer
*************** public class DefaultTreeCellRenderer
*** 124,131 ****
  	 * Constructor DefaultTreeCellRenderer
  	 */
  	public DefaultTreeCellRenderer() {
! 		// TODO
! 	} // DefaultTreeCellRenderer()
  
  
  	//-------------------------------------------------------------
--- 128,145 ----
  	 * Constructor DefaultTreeCellRenderer
  	 */
  	public DefaultTreeCellRenderer() {
!           UIDefaults defaults = UIManager.getLookAndFeelDefaults();
!             
!           setLeafIcon(getDefaultLeafIcon());
!           setOpenIcon(getDefaultOpenIcon());
!           setClosedIcon(getDefaultClosedIcon());
! 
!           setTextNonSelectionColor(defaults.getColor("Tree.textForeground"));
!           setTextSelectionColor(defaults.getColor("Tree.selectionForeground"));
!           setBackgroundNonSelectionColor(defaults.getColor("Tree.textBackground"));
!           setBackgroundSelectionColor(defaults.getColor("Tree.selectionBackground"));
!           setBorderSelectionColor(defaults.getColor("Tree.selectionBorderColor"));
! 	}
  
  
  	//-------------------------------------------------------------
*************** public class DefaultTreeCellRenderer
*** 137,304 ****
  	 * @returns Icon
  	 */
  	public Icon getDefaultOpenIcon() {
! 		return null; // TODO
! 	} // getDefaultOpenIcon()
  
  	/**
  	 * getDefaultClosedIcon
  	 * @returns Icon
  	 */
  	public Icon getDefaultClosedIcon() {
! 		return null; // TODO
! 	} // getDefaultClosedIcon()
  
  	/**
  	 * getDefaultLeafIcon
  	 * @returns Icon
  	 */
  	public Icon getDefaultLeafIcon() {
! 		return null; // TODO
! 	} // getDefaultLeafIcon()
  
  	/**
  	 * setOpenIcon
  	 * @param value0 TODO
  	 */
! 	public void setOpenIcon(Icon value0) {
! 		// TODO
! 	} // setOpenIcon()
  
  	/**
  	 * getOpenIcon
  	 * @returns Icon
  	 */
  	public Icon getOpenIcon() {
! 		return null; // TODO
! 	} // getOpenIcon()
  
  	/**
  	 * setClosedIcon
  	 * @param value0 TODO
  	 */
! 	public void setClosedIcon(Icon value0) {
! 		// TODO
! 	} // setClosedIcon()
  
  	/**
  	 * getClosedIcon
  	 * @returns Icon
  	 */
  	public Icon getClosedIcon() {
! 		return null; // TODO
! 	} // getClosedIcon()
  
  	/**
  	 * setLeafIcon
  	 * @param value0 TODO
  	 */
! 	public void setLeafIcon(Icon value0) {
! 		// TODO
! 	} // setLeafIcon()
  
  	/**
  	 * getLeafIcon
  	 * @returns Icon
  	 */
  	public Icon getLeafIcon() {
! 		return null; // TODO
! 	} // getLeafIcon()
  
  	/**
  	 * setTextSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setTextSelectionColor(Color value0) {
! 		// TODO
! 	} // setTextSelectionColor()
  
  	/**
  	 * getTextSelectionColor
  	 * @returns Color
  	 */
  	public Color getTextSelectionColor() {
! 		return null; // TODO
! 	} // getTextSelectionColor()
  
  	/**
  	 * setTextNonSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setTextNonSelectionColor(Color value0) {
! 		// TODO
! 	} // setTextNonSelectionColor()
  
  	/**
  	 * getTextNonSelectionColor
  	 * @returns Color
  	 */
  	public Color getTextNonSelectionColor() {
! 		return null; // TODO
! 	} // getTextNonSelectionColor()
  
  	/**
  	 * setBackgroundSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setBackgroundSelectionColor(Color value0) {
! 		// TODO
! 	} // setBackgroundSelectionColor()
  
  	/**
  	 * getBackgroundSelectionColor
  	 * @returns Color
  	 */
  	public Color getBackgroundSelectionColor() {
! 		return null; // TODO
! 	} // getBackgroundSelectionColor()
  
  	/**
  	 * setBackgroundNonSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setBackgroundNonSelectionColor(Color value0) {
! 		// TODO
! 	} // setBackgroundNonSelectionColor()
  
  	/**
  	 * getBackgroundNonSelectionColor
  	 * @returns Color
  	 */
  	public Color getBackgroundNonSelectionColor() {
! 		return null; // TODO
! 	} // getBackgroundNonSelectionColor()
  
  	/**
  	 * setBorderSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setBorderSelectionColor(Color value0) {
! 		// TODO
! 	} // setBorderSelectionColor()
  
  	/**
  	 * getBorderSelectionColor
  	 * @returns Color
  	 */
  	public Color getBorderSelectionColor() {
! 		return null; // TODO
! 	} // getBorderSelectionColor()
  
  	/**
  	 * setFont
  	 * @param value0 TODO
  	 */
! 	public void setFont(Font value0) {
! 		// TODO
! 	} // setFont()
  
  	/**
  	 * setBackground
  	 * @param value0 TODO
  	 */
! 	public void setBackground(Color value0) {
! 		// TODO
! 	} // setBackground()
  
  	/**
  	 * getTreeCellRendererComponent
--- 151,322 ----
  	 * @returns Icon
  	 */
  	public Icon getDefaultOpenIcon() {
!           return UIManager.getLookAndFeelDefaults().getIcon("Tree.openIcon");
! 	}
  
  	/**
  	 * getDefaultClosedIcon
  	 * @returns Icon
  	 */
  	public Icon getDefaultClosedIcon() {
!           return UIManager.getLookAndFeelDefaults().getIcon("Tree.closedIcon");
! 	}
  
  	/**
  	 * getDefaultLeafIcon
  	 * @returns Icon
  	 */
  	public Icon getDefaultLeafIcon() {
!           return UIManager.getLookAndFeelDefaults().getIcon("Tree.leafIcon");
! 	}
  
  	/**
  	 * setOpenIcon
  	 * @param value0 TODO
  	 */
! 	public void setOpenIcon(Icon i) {
!           openIcon = i;
! 	}
  
  	/**
  	 * getOpenIcon
  	 * @returns Icon
  	 */
  	public Icon getOpenIcon() {
!           return openIcon;
! 	} 
  
  	/**
  	 * setClosedIcon
  	 * @param value0 TODO
  	 */
! 	public void setClosedIcon(Icon i) {
!           closedIcon = i;
! 	} 
  
  	/**
  	 * getClosedIcon
  	 * @returns Icon
  	 */
  	public Icon getClosedIcon() {
!           return closedIcon;
! 	} 
  
  	/**
  	 * setLeafIcon
  	 * @param value0 TODO
  	 */
! 	public void setLeafIcon(Icon i) {
!           leafIcon = i;
! 	}
  
  	/**
  	 * getLeafIcon
  	 * @returns Icon
  	 */
  	public Icon getLeafIcon() {
!           return leafIcon;
! 	}
  
  	/**
  	 * setTextSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setTextSelectionColor(Color c) {
!           textSelectionColor = c;
! 	}
  
  	/**
  	 * getTextSelectionColor
  	 * @returns Color
  	 */
  	public Color getTextSelectionColor() {
!           return textSelectionColor;
! 	}
  
  	/**
  	 * setTextNonSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setTextNonSelectionColor(Color c) {
!           textNonSelectionColor = c;
! 	}
  
  	/**
  	 * getTextNonSelectionColor
  	 * @returns Color
  	 */
  	public Color getTextNonSelectionColor() {
!           return textNonSelectionColor;
! 	}
  
  	/**
  	 * setBackgroundSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setBackgroundSelectionColor(Color c) {
!           backgroundSelectionColor = c;
! 	}
  
  	/**
  	 * getBackgroundSelectionColor
  	 * @returns Color
  	 */
  	public Color getBackgroundSelectionColor() {
!           return backgroundSelectionColor;		
! 	}
  
  	/**
  	 * setBackgroundNonSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setBackgroundNonSelectionColor(Color c) {
!           backgroundNonSelectionColor = c;
! 	}
  
  	/**
  	 * getBackgroundNonSelectionColor
  	 * @returns Color
  	 */
  	public Color getBackgroundNonSelectionColor() {
!           return backgroundNonSelectionColor;
! 	}
  
  	/**
  	 * setBorderSelectionColor
  	 * @param value0 TODO
  	 */
! 	public void setBorderSelectionColor(Color c) {
!           borderSelectionColor = c;
! 	}
  
  	/**
  	 * getBorderSelectionColor
  	 * @returns Color
  	 */
  	public Color getBorderSelectionColor() {
!           return borderSelectionColor;
! 	}
  
  	/**
  	 * setFont
  	 * @param value0 TODO
  	 */
! 	public void setFont(Font f) {
!           if (f != null && f instanceof UIResource)
!             f = null;
!           super.setFont(f);
! 	}
  
  	/**
  	 * setBackground
  	 * @param value0 TODO
  	 */
! 	public void setBackground(Color c) {
!           if (c != null && c instanceof UIResource)
!             c = null;
!           super.setBackground(c);
! 	}
  
  	/**
  	 * getTreeCellRendererComponent
*************** public class DefaultTreeCellRenderer
*** 311,327 ****
  	 * @param value6 TODO
  	 * @returns Component
  	 */
! 	public Component getTreeCellRendererComponent(JTree value0, Object value1, boolean value2, boolean value3, boolean value4, int value5, boolean value6) {
! 		return null; // TODO
! 	} // getTreeCellRendererComponent()
  
  	/**
  	 * paint
  	 * @param value0 TODO
  	 */
! 	public void paint(Graphics value0) {
! 		// TODO
! 	} // paint()
  
  	/**
  	 * getPreferredSize
--- 329,365 ----
  	 * @param value6 TODO
  	 * @returns Component
  	 */
! 	public Component getTreeCellRendererComponent(JTree tree, 
!                                                       Object val, 
!                                                       boolean selected, 
!                                                       boolean expanded, 
!                                                       boolean leaf, 
!                                                       int row, 
!                                                       boolean hasFocus) {
!           this.selected = selected;
!           this.hasFocus = hasFocus;
! 
!           if (leaf)
!             setIcon(getLeafIcon());
!           else if (expanded)
!             setIcon(getOpenIcon());
!           else
!             setIcon(getClosedIcon());
! 
!           setText(val.toString());
!           setHorizontalAlignment(LEFT);
!           setVerticalAlignment(TOP);
! 
!           return this;
! 	}
  
  	/**
  	 * paint
  	 * @param value0 TODO
  	 */
! 	public void paint(Graphics g) {
!           super.paint(g);
! 	}
  
  	/**
  	 * getPreferredSize
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/DefaultTreeModel.java gcc-4.0.0/libjava/javax/swing/tree/DefaultTreeModel.java
*** gcc-3.4.3/libjava/javax/swing/tree/DefaultTreeModel.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/tree/DefaultTreeModel.java	Tue Nov 30 23:59:09 2004
***************
*** 1,5 ****
  /* DefaultTreeModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultTreeModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.ObjectInputStream;
*** 43,377 ****
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.EventListener;
  import javax.swing.event.EventListenerList;
  import javax.swing.event.TreeModelListener;
  
  /**
   * DefaultTreeModel
   * @author Andrew Selkirk
   */
! public class DefaultTreeModel implements Serializable, TreeModel
  {
    static final long serialVersionUID = -2621068368932566998L;
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * root
! 	 */
! 	protected TreeNode root = null;
! 
! 	/**
! 	 * listenerList
! 	 */
! 	protected EventListenerList listenerList = new EventListenerList();
! 
! 	/**
! 	 * asksAllowsChildren
! 	 */
! 	protected boolean asksAllowsChildren;
! 
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor DefaultTreeModel
! 	 * @param value0 TODO
! 	 */
! 	public DefaultTreeModel(TreeNode root) {
! 		setRoot(root);
! 	} // DefaultTreeModel()
  
! 	/**
! 	 * Constructor DefaultTreeModel
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public DefaultTreeModel(TreeNode root, boolean asksAllowsChildren) {
! 		setRoot(root);
! 		this.asksAllowsChildren = asksAllowsChildren;
! 	} // DefaultTreeModel()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * writeObject
! 	 * @param value0 TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream value0) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * readObject
! 	 * @param value0 TODO
! 	 * @exception IOException TODO
! 	 * @exception ClassNotFoundException TODO
! 	 */
! 	private void readObject(ObjectInputStream value0) throws IOException, ClassNotFoundException {
! 		// TODO
! 	} // readObject()
  
! 	/**
! 	 * asksAllowsChildren
! 	 * @returns boolean
! 	 */
! 	public boolean asksAllowsChildren() {
! 		return asksAllowsChildren;
! 	} // asksAllowsChildren()
  
! 	/**
! 	 * setAsksAllowsChildren
! 	 * @param value0 TODO
! 	 */
! 	public void setAsksAllowsChildren(boolean value) {
! 		asksAllowsChildren = value; // TODO
! 	} // setAsksAllowsChildren()
  
! 	/**
! 	 * setRoot
! 	 * @param value0 TODO
! 	 */
! 	public void setRoot(TreeNode root) {
  
! 		// Sanity Check
! 		if (root == null) {
! 			throw new IllegalArgumentException("null root");
! 		} // if
  
! 		// Set new root
! 		this.root = root;
  
! 		// TODO
! 	} // setRoot()
  
! 	/**
! 	 * getRoot
! 	 * @returns Object
! 	 */
! 	public Object getRoot() {
! 		return root;
! 	} // getRoot()
  
! 	/**
! 	 * getIndexOfChild
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @returns int
! 	 */
! 	public int getIndexOfChild(Object parent, Object child) {
! 		return 0; // TODO
! 	} // getIndexOfChild()
  
! 	/**
! 	 * getChild
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @returns Object
! 	 */
! 	public Object getChild(Object value0, int value1) {
! 		return null; // TODO
! 	} // getChild()
  
! 	/**
! 	 * getChildCount
! 	 * @param value0 TODO
! 	 * @returns int
! 	 */
! 	public int getChildCount(Object value0) {
! 		return 0; // TODO
! 	} // getChildCount()
  
! 	/**
! 	 * isLeaf
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isLeaf(Object value0) {
! 		return false; // TODO
! 	} // isLeaf()
  
! 	/**
! 	 * reload
! 	 */
! 	public void reload() {
! 		// TODO
! 	} // reload()
  
! 	/**
! 	 * reload
! 	 * @param value0 TODO
! 	 */
! 	public void reload(TreeNode value0) {
! 		// TODO
! 	} // reload()
  
! 	/**
! 	 * valueForPathChanged
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void valueForPathChanged(TreePath value0, Object value1) {
! 		// TODO
! 	} // valueForPathChanged()
  
! 	/**
! 	 * insertNodeInto
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 */
! 	public void insertNodeInto(MutableTreeNode value0, MutableTreeNode value1, int value2) {
! 		// TODO
! 	} // insertNodeInto()
  
! 	/**
! 	 * removeNodeFromParent
! 	 * @param value0 TODO
! 	 */
! 	public void removeNodeFromParent(MutableTreeNode value0) {
! 		// TODO
! 	} // removeNodeFromParent()
  
! 	/**
! 	 * nodeChanged
! 	 * @param value0 TODO
! 	 */
! 	public void nodeChanged(TreeNode value0) {
! 		// TODO
! 	} // nodeChanged()
  
! 	/**
! 	 * nodesWereInserted
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void nodesWereInserted(TreeNode value0, int[] value1) {
! 		// TODO
! 	} // nodesWereInserted()
  
! 	/**
! 	 * nodesWereRemoved
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 */
! 	public void nodesWereRemoved(TreeNode value0, int[] value1, Object[] value2) {
! 		// TODO
! 	} // nodesWereRemoved()
  
! 	/**
! 	 * nodesChanged
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	public void nodesChanged(TreeNode value0, int[] value1) {
! 		// TODO
! 	} // nodesChanged()
  
! 	/**
! 	 * nodeStructureChanged
! 	 * @param value0 TODO
! 	 */
! 	public void nodeStructureChanged(TreeNode value0) {
! 		// TODO
! 	} // nodeStructureChanged()
  
! 	/**
! 	 * getPathToRoot
! 	 * @param value0 TODO
! 	 * @returns TreeNode[]
! 	 */
! 	public TreeNode[] getPathToRoot(TreeNode value0) {
! 		return null; // TODO
! 	} // getPathToRoot()
  
! 	/**
! 	 * getPathToRoot
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @returns TreeNode[]
! 	 */
! 	protected TreeNode[] getPathToRoot(TreeNode value0, int value1) {
! 		return null; // TODO
! 	} // getPathToRoot()
  
! 	/**
! 	 * addTreeModelListener
! 	 * @param value0 TODO
! 	 */
! 	public void addTreeModelListener(TreeModelListener listener) {
! 		listenerList.add(TreeModelListener.class, listener);
! 	} // addTreeModelListener()
  
! 	/**
! 	 * removeTreeModelListener
! 	 * @param value0 TODO
! 	 */
! 	public void removeTreeModelListener(TreeModelListener listener) {
! 		listenerList.remove(TreeModelListener.class, listener);
! 	} // removeTreeModelListener()
  
! 	/**
! 	 * fireTreeNodesChanged
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 * @param value3 TODO
! 	 */
! 	protected void fireTreeNodesChanged(Object value0, Object[] value1, int[] value2, Object[] value3) {
! 		// TODO
! 	} // fireTreeNodesChanged()
  
! 	/**
! 	 * fireTreeNodesInserted
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 * @param value3 TODO
! 	 */
! 	protected void fireTreeNodesInserted(Object value0, Object[] value1, int[] value2, Object[] value3) {
! 		// TODO
! 	} // fireTreeNodesInserted()
  
! 	/**
! 	 * fireTreeNodesRemoved
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 * @param value3 TODO
! 	 */
! 	protected void fireTreeNodesRemoved(Object value0, Object[] value1, int[] value2, Object[] value3) {
! 		// TODO
! 	} // fireTreeNodesRemoved()
  
! 	/**
! 	 * fireTreeStructureChanged
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 * @param value2 TODO
! 	 * @param value3 TODO
! 	 */
! 	protected void fireTreeStructureChanged(Object value0, Object[] value1, int[] value2, Object[] value3) {
! 		// TODO
! 	} // fireTreeStructureChanged()
  
! 	/**
! 	 * getListeners
! 	 * @param value0 TODO
! 	 * @returns EventListener[]
! 	 */
! 	public EventListener[] getListeners(Class classType) {
! 		return listenerList.getListeners(classType);
! 	} // getListeners()
  
  
! } // DefaultTreeModel
--- 43,451 ----
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.EventListener;
+ 
  import javax.swing.event.EventListenerList;
+ import javax.swing.event.TreeModelEvent;
  import javax.swing.event.TreeModelListener;
  
  /**
   * DefaultTreeModel
   * @author Andrew Selkirk
   */
! public class DefaultTreeModel
!   implements Serializable, TreeModel
  {
    static final long serialVersionUID = -2621068368932566998L;
  
!   /**
!    * root
!    */
!   protected TreeNode root = null;
  
!   /**
!    * listenerList
!    */
!   protected EventListenerList listenerList = new EventListenerList();
  
!   /**
!    * asksAllowsChildren
!    */
!   protected boolean asksAllowsChildren;
  
!   /**
!    * Constructor DefaultTreeModel
!    * @param value0 TODO
!    */
!   public DefaultTreeModel(TreeNode root)
!   {
!     setRoot(root);
!   }
  
+   /**
+    * Constructor DefaultTreeModel
+    * @param value0 TODO
+    * @param value1 TODO
+    */
+   public DefaultTreeModel(TreeNode root, boolean asksAllowsChildren)
+   {
+     setRoot(root);
+     this.asksAllowsChildren = asksAllowsChildren;
+   }
  
!   /**
!    * writeObject
!    * @param value0 TODO
!    * @exception IOException TODO
!    */
!   private void writeObject(ObjectOutputStream value0) throws IOException
!   {
!     // TODO
!   }
  
!   /**
!    * readObject
!    * @param value0 TODO
!    * @exception IOException TODO
!    * @exception ClassNotFoundException TODO
!    */
!   private void readObject(ObjectInputStream value0)
!     throws IOException, ClassNotFoundException
!   {
!     // TODO
!   }
  
!   /**
!    * asksAllowsChildren
!    * @return boolean
!    */
!   public boolean asksAllowsChildren()
!   {
!     return asksAllowsChildren;
!   }
  
!   /**
!    * setAsksAllowsChildren
!    * @param value0 TODO
!    */
!   public void setAsksAllowsChildren(boolean value)
!   {
!     asksAllowsChildren = value; // TODO
!   }
  
!   /**
!    * setRoot
!    * @param value0 TODO
!    */
!   public void setRoot(TreeNode root)
!   {
!     // Sanity Check
!     if (root == null)
!       {
! 	throw new IllegalArgumentException("null root");
!       }
!     // Set new root
!     this.root = root;
  
!     // TODO
!   }
  
!   /**
!    * getRoot
!    * @return Object
!    */
!   public Object getRoot()
!   {
!     return root;
!   }
  
!   /**
!    * getIndexOfChild
!    * @param value0 TODO
!    * @param value1 TODO
!    * @return int
!    */
!   public int getIndexOfChild(Object parent, Object child)
!   {
!     return 0; // TODO
!   }
  
!   /**
!    * getChild
!    * @param value0 TODO
!    * @param value1 TODO
!    * @return Object
!    */
!   public Object getChild(Object node, int idx)
!   {
!     if (node instanceof TreeNode)
!       return ((TreeNode)node).getChildAt(idx);
!     else
!       return null;
!   }
  
!   /**
!    * getChildCount
!    * @param value0 TODO
!    * @return int
!    */
!   public int getChildCount(Object node)
!   {
!     if (node instanceof TreeNode)
!       return ((TreeNode)node).getChildCount();
!     else
!       return 0;
!   }
  
!   /**
!    * isLeaf
!    * @param value0 TODO
!    * @return boolean
!    */
!   public boolean isLeaf(Object node)
!   {
!     if (node instanceof TreeNode)
!       return ((TreeNode)node).isLeaf();
!     else
!       return true;
!   }
  
!   /**
!    * reload
!    */
!   public void reload()
!   {
!     // TODO
!   }
  
!   /**
!    * reload
!    * @param value0 TODO
!    */
!   public void reload(TreeNode value0)
!   {
!     // TODO
!   }
  
!   /**
!    * valueForPathChanged
!    * @param value0 TODO
!    * @param value1 TODO
!    */
!   public void valueForPathChanged(TreePath value0, Object value1)
!   {
!     // TODO
!   }
  
!   /**
!    * insertNodeInto
!    * @param value0 TODO
!    * @param value1 TODO
!    * @param value2 TODO
!    */
!   public void insertNodeInto(MutableTreeNode value0, MutableTreeNode value1,
!                              int value2)
!   {
!     // TODO
!   }
  
!   /**
!    * removeNodeFromParent
!    * @param value0 TODO
!    */
!   public void removeNodeFromParent(MutableTreeNode value0)
!   {
!     // TODO
!   }
  
!   /**
!    * nodeChanged
!    * @param value0 TODO
!    */
!   public void nodeChanged(TreeNode value0)
!   {
!     // TODO
!   }
  
!   /**
!    * nodesWereInserted
!    * @param value0 TODO
!    * @param value1 TODO
!    */
!   public void nodesWereInserted(TreeNode value0, int[] value1)
!   {
!     // TODO
!   }
  
!   /**
!    * nodesWereRemoved
!    * @param value0 TODO
!    * @param value1 TODO
!    * @param value2 TODO
!    */
!   public void nodesWereRemoved(TreeNode value0, int[] value1, Object[] value2)
!   {
!     // TODO
!   }
  
!   /**
!    * nodesChanged
!    * @param value0 TODO
!    * @param value1 TODO
!    */
!   public void nodesChanged(TreeNode value0, int[] value1)
!   {
!     // TODO
!   }
  
!   /**
!    * nodeStructureChanged
!    * @param value0 TODO
!    */
!   public void nodeStructureChanged(TreeNode value0)
!   {
!     // TODO
!   }
  
!   /**
!    * getPathToRoot
!    * @param value0 TODO
!    * @return TreeNode[]
!    */
!   public TreeNode[] getPathToRoot(TreeNode value0)
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getPathToRoot
!    * @param value0 TODO
!    * @param value1 TODO
!    * @return TreeNode[]
!    */
!   protected TreeNode[] getPathToRoot(TreeNode value0, int value1)
!   {
!     return null; // TODO
!   }
  
!   /**
!    * Registers a listere to the model.
!    *
!    * @param listener the listener to add
!    */
!   public void addTreeModelListener(TreeModelListener listener)
!   {
!     listenerList.add(TreeModelListener.class, listener);
!   }
  
!   /**
!    * Removes a listener from the model.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeTreeModelListener(TreeModelListener listener)
!   {
!     listenerList.remove(TreeModelListener.class, listener);
!   }
  
!   /**
!    * Returns all registered <code>TreeModelListener</code> listeners.
!    *
!    * @return an array of listeners.
!    *
!    * @since 1.4
!    */
!   public TreeModelListener[] getTreeModelListeners()
!   {
!     return (TreeModelListener[]) listenerList.getListeners(TreeModelListener.class);
!   }
  
!   /**
!    * fireTreeNodesChanged
!    *
!    * @param source the node being changed
!    * @param path the path to the root node
!    * @param childIndices the indices of the changed elements
!    * @param children the changed elements
!    */
!   protected void fireTreeNodesChanged(Object source, Object[] path,
!                                       int[] childIndices, Object[] children)
!   {
!     TreeModelEvent event =
!       new TreeModelEvent(source, path, childIndices, children);
!     TreeModelListener[] listeners = getTreeModelListeners();
  
!     for (int i = listeners.length - 1; i >= 0; --i)
!       listeners[i].treeNodesChanged(event);
!   }
  
!   /**
!    * fireTreeNodesInserted
!    *
!    * @param source the node where new nodes got inserted
!    * @param path the path to the root node
!    * @param childIndices the indices of the new elements
!    * @param children the new elements
!    */
!   protected void fireTreeNodesInserted(Object source, Object[] path,
!                                        int[] childIndices, Object[] children)
!   {
!     TreeModelEvent event =
!       new TreeModelEvent(source, path, childIndices, children);
!     TreeModelListener[] listeners = getTreeModelListeners();
  
!     for (int i = listeners.length - 1; i >= 0; --i)
!       listeners[i].treeNodesInserted(event);
!   }
  
!   /**
!    * fireTreeNodesRemoved
!    *
!    * @param source the node where nodes got removed-
!    * @param path the path to the root node
!    * @param childIndices the indices of the removed elements
!    * @param children the removed elements
!    */
!   protected void fireTreeNodesRemoved(Object source, Object[] path,
!                                       int[] childIndices, Object[] children)
!   {
!     TreeModelEvent event =
!       new TreeModelEvent(source, path, childIndices, children);
!     TreeModelListener[] listeners = getTreeModelListeners();
  
!     for (int i = listeners.length - 1; i >= 0; --i)
!       listeners[i].treeNodesRemoved(event);
!   }
  
!   /**
!    * fireTreeStructureChanged
!    *
!    * @param source the node where the model has changed
!    * @param path the path to the root node
!    * @param childIndices the indices of the affected elements
!    * @param children the affected elements
!    */
!   protected void fireTreeStructureChanged(Object source, Object[] path,
!                                           int[] childIndices, Object[] children)
!   {
!     TreeModelEvent event =
!       new TreeModelEvent(source, path, childIndices, children);
!     TreeModelListener[] listeners = getTreeModelListeners();
  
+     for (int i = listeners.length - 1; i >= 0; --i)
+       listeners[i].treeStructureChanged(event);
+   }
  
!   /**
!    * Returns the registered listeners of a given type.
!    *
!    * @param listenerType the listener type to return
!    *
!    * @return an array of listeners
!    *
!    * @since 1.3
!    */
!   public EventListener[] getListeners(Class listenerType)
!   {
!     return listenerList.getListeners(listenerType);
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/DefaultTreeSelectionModel.java gcc-4.0.0/libjava/javax/swing/tree/DefaultTreeSelectionModel.java
*** gcc-3.4.3/libjava/javax/swing/tree/DefaultTreeSelectionModel.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/tree/DefaultTreeSelectionModel.java	Tue Nov 30 23:59:09 2004
***************
*** 1,5 ****
  /* DefaultTreeSelectionModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* DefaultTreeSelectionModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** import java.io.ObjectOutputStream;
*** 45,53 ****
  import java.io.Serializable;
  import java.util.EventListener;
  import java.util.Vector;
  import javax.swing.DefaultListSelectionModel;
- import javax.swing.event.SwingPropertyChangeSupport;
  import javax.swing.event.EventListenerList;
  import javax.swing.event.TreeSelectionEvent;
  import javax.swing.event.TreeSelectionListener;
  
--- 45,54 ----
  import java.io.Serializable;
  import java.util.EventListener;
  import java.util.Vector;
+ 
  import javax.swing.DefaultListSelectionModel;
  import javax.swing.event.EventListenerList;
+ import javax.swing.event.SwingPropertyChangeSupport;
  import javax.swing.event.TreeSelectionEvent;
  import javax.swing.event.TreeSelectionListener;
  
*************** public class DefaultTreeSelectionModel
*** 60,461 ****
  {
    static final long serialVersionUID = 3288129636638950196L;
  
! 	//-------------------------------------------------------------
! 	// Variables --------------------------------------------------
! 	//-------------------------------------------------------------
! 
! 	/**
! 	 * SELECTION_MODE_PROPERTY
! 	 */
! 	public static final String SELECTION_MODE_PROPERTY = "selectionMode";
! 
! 	/**
! 	 * changeSupport
! 	 */
! 	protected SwingPropertyChangeSupport changeSupport;
! 
! 	/**
! 	 * selection
! 	 */
! 	protected TreePath[] selection;
! 
! 	/**
! 	 * listenerList
! 	 */
! 	protected EventListenerList listenerList;
  
! 	/**
! 	 * rowMapper
! 	 */
! 	protected transient RowMapper rowMapper;
  
! 	/**
! 	 * listSelectionModel
! 	 */
! 	protected DefaultListSelectionModel listSelectionModel;
  
! 	/**
! 	 * selectionMode
! 	 */
! 	protected int selectionMode;
  
! 	/**
! 	 * leadPath
! 	 */
! 	protected TreePath leadPath;
  
! 	/**
! 	 * leadIndex
! 	 */
! 	protected int leadIndex;
  
! 	/**
! 	 * leadRow
! 	 */
! 	protected int leadRow;
  
  
! 	//-------------------------------------------------------------
! 	// Initialization ---------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor DefaultTreeSelectionModel
! 	 */
! 	public DefaultTreeSelectionModel() {
! 		// TODO
! 	} // DefaultTreeSelectionModel()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
! 	/**
! 	 * clone
! 	 * @exception CloneNotSupportedException TODO
! 	 * @returns Object
! 	 */
! 	public Object clone() throws CloneNotSupportedException {
! 		return null; // TODO
! 	} // clone()
  
! 	/**
! 	 * toString
! 	 * @returns String
! 	 */
! 	public String toString() {
! 		return null; // TODO
! 	} // toString()
  
! 	/**
! 	 * writeObject
! 	 * @param value0 TODO
! 	 * @exception IOException TODO
! 	 */
! 	private void writeObject(ObjectOutputStream value0) throws IOException {
! 		// TODO
! 	} // writeObject()
  
! 	/**
! 	 * readObject
! 	 * @param value0 TODO
! 	 * @exception IOException TODO
! 	 * @exception ClassNotFoundException TODO
! 	 */
! 	private void readObject(ObjectInputStream value0) throws IOException, ClassNotFoundException {
! 		// TODO
! 	} // readObject()
  
! 	/**
! 	 * setRowMapper
! 	 * @param value0 TODO
! 	 */
! 	public void setRowMapper(RowMapper value0) {
! 		// TODO
! 	} // setRowMapper()
  
! 	/**
! 	 * getRowMapper
! 	 * @returns RowMapper
! 	 */
! 	public RowMapper getRowMapper() {
! 		return null; // TODO
! 	} // getRowMapper()
  
! 	/**
! 	 * setSelectionMode
! 	 * @param value0 TODO
! 	 */
! 	public void setSelectionMode(int value0) {
! 		// TODO
! 	} // setSelectionMode()
  
! 	/**
! 	 * getSelectionMode
! 	 * @returns int
! 	 */
! 	public int getSelectionMode() {
! 		return 0; // TODO
! 	} // getSelectionMode()
  
! 	/**
! 	 * setSelectionPath
! 	 * @param value0 TODO
! 	 */
! 	public void setSelectionPath(TreePath value0) {
! 		// TODO
! 	} // setSelectionPath()
  
! 	/**
! 	 * setSelectionPaths
! 	 * @param value0 TODO
! 	 */
! 	public void setSelectionPaths(TreePath[] value0) {
! 		// TODO
! 	} // setSelectionPaths()
  
! 	/**
! 	 * addSelectionPath
! 	 * @param value0 TODO
! 	 */
! 	public void addSelectionPath(TreePath value0) {
! 		// TODO
! 	} // addSelectionPath()
  
! 	/**
! 	 * addSelectionPaths
! 	 * @param value0 TODO
! 	 */
! 	public void addSelectionPaths(TreePath[] value0) {
! 		// TODO
! 	} // addSelectionPaths()
  
! 	/**
! 	 * removeSelectionPath
! 	 * @param value0 TODO
! 	 */
! 	public void removeSelectionPath(TreePath value0) {
! 		// TODO
! 	} // removeSelectionPath()
  
! 	/**
! 	 * removeSelectionPaths
! 	 * @param value0 TODO
! 	 */
! 	public void removeSelectionPaths(TreePath[] value0) {
! 		// TODO
! 	} // removeSelectionPaths()
  
! 	/**
! 	 * getSelectionPath
! 	 * @returns TreePath
! 	 */
! 	public TreePath getSelectionPath() {
! 		return null; // TODO
! 	} // getSelectionPath()
  
! 	/**
! 	 * getSelectionPaths
! 	 * @returns TreePath[]
! 	 */
! 	public TreePath[] getSelectionPaths() {
! 		return null; // TODO
! 	} // getSelectionPaths()
  
! 	/**
! 	 * getSelectionCount
! 	 * @returns int
! 	 */
! 	public int getSelectionCount() {
! 		return 0; // TODO
! 	} // getSelectionCount()
  
! 	/**
! 	 * isPathSelected
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isPathSelected(TreePath value0) {
! 		return false; // TODO
! 	} // isPathSelected()
  
! 	/**
! 	 * isSelectionEmpty
! 	 * @returns boolean
! 	 */
! 	public boolean isSelectionEmpty() {
! 		return false; // TODO
! 	} // isSelectionEmpty()
  
! 	/**
! 	 * clearSelection
! 	 */
! 	public void clearSelection() {
! 		// TODO
! 	} // clearSelection()
  
! 	/**
! 	 * addTreeSelectionListener
! 	 * @param value0 TODO
! 	 */
! 	public void addTreeSelectionListener(TreeSelectionListener value0) {
! 		// TODO
! 	} // addTreeSelectionListener()
  
! 	/**
! 	 * removeTreeSelectionListener
! 	 * @param value0 TODO
! 	 */
! 	public void removeTreeSelectionListener(TreeSelectionListener value0) {
! 		// TODO
! 	} // removeTreeSelectionListener()
  
! 	/**
! 	 * fireValueChanged
! 	 * @param value0 TODO
! 	 */
! 	protected void fireValueChanged(TreeSelectionEvent value0) {
! 		// TODO
! 	} // fireValueChanged()
  
! 	/**
! 	 * getListeners
! 	 * @param value0 TODO
! 	 * @returns EventListener[]
! 	 */
! 	public EventListener[] getListeners(Class value0) {
! 		return null; // TODO
! 	} // getListeners()
  
! 	/**
! 	 * getSelectionRows
! 	 * @returns int[]
! 	 */
! 	public int[] getSelectionRows() {
! 		return null; // TODO
! 	} // getSelectionRows()
  
! 	/**
! 	 * getMinSelectionRow
! 	 * @returns int
! 	 */
! 	public int getMinSelectionRow() {
! 		return 0; // TODO
! 	} // getMinSelectionRow()
  
! 	/**
! 	 * getMaxSelectionRow
! 	 * @returns int
! 	 */
! 	public int getMaxSelectionRow() {
! 		return 0; // TODO
! 	} // getMaxSelectionRow()
  
! 	/**
! 	 * isRowSelected
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public boolean isRowSelected(int value0) {
! 		return false; // TODO
! 	} // isRowSelected()
  
! 	/**
! 	 * resetRowSelection
! 	 */
! 	public void resetRowSelection() {
! 		// TODO
! 	} // resetRowSelection()
  
! 	/**
! 	 * getLeadSelectionRow
! 	 * @returns int
! 	 */
! 	public int getLeadSelectionRow() {
! 		return 0; // TODO
! 	} // getLeadSelectionRow()
  
! 	/**
! 	 * getLeadSelectionPath
! 	 * @returns TreePath
! 	 */
! 	public TreePath getLeadSelectionPath() {
! 		return null; // TODO
! 	} // getLeadSelectionPath()
  
! 	/**
! 	 * addPropertyChangeListener
! 	 * @param value0 TODO
! 	 */
! 	public synchronized void addPropertyChangeListener(PropertyChangeListener value0) {
! 		// TODO
! 	} // addPropertyChangeListener()
  
! 	/**
! 	 * removePropertyChangeListener
! 	 * @param value0 TODO
! 	 */
! 	public synchronized void removePropertyChangeListener(PropertyChangeListener value0) {
! 		// TODO
! 	} // removePropertyChangeListener()
  
! 	/**
! 	 * insureRowContinuity
! 	 */
! 	protected void insureRowContinuity() {
! 		// TODO
! 	} // insureRowContinuity()
  
! 	/**
! 	 * arePathsContiguous
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	protected boolean arePathsContiguous(TreePath[] value0) {
! 		return false; // TODO
! 	} // arePathsContiguous()
  
! 	/**
! 	 * canPathsBeAdded
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	protected boolean canPathsBeAdded(TreePath[] value0) {
! 		return false; // TODO
! 	} // canPathsBeAdded()
  
! 	/**
! 	 * canPathsBeRemoved
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	protected boolean canPathsBeRemoved(TreePath[] value0) {
! 		return false; // TODO
! 	} // canPathsBeRemoved()
  
! 	/**
! 	 * notifyPathChange
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	protected void notifyPathChange(Vector value0, TreePath value1) {
! 		// TODO
! 	} // notifyPathChange()
  
! 	/**
! 	 * updateLeadIndex
! 	 */
! 	protected void updateLeadIndex() {
! 		// TODO
! 	} // updateLeadIndex()
  
! 	/**
! 	 * insureUniqueness
! 	 */
! 	protected void insureUniqueness() {
! 		// TODO
! 	} // insureUniqueness()
  
  
! } // DefaultTreeSelectionModel
--- 61,524 ----
  {
    static final long serialVersionUID = 3288129636638950196L;
  
!   /**
!    * SELECTION_MODE_PROPERTY
!    */
!   public static final String SELECTION_MODE_PROPERTY = "selectionMode";
  
!   /**
!    * changeSupport
!    */
!   protected SwingPropertyChangeSupport changeSupport;
  
!   /**
!    * selection
!    */
!   protected TreePath[] selection;
  
!   /**
!    * listenerList
!    */
!   protected EventListenerList listenerList;
  
!   /**
!    * rowMapper
!    */
!   protected transient RowMapper rowMapper;
  
!   /**
!    * listSelectionModel
!    */
!   protected DefaultListSelectionModel listSelectionModel;
  
!   /**
!    * selectionMode
!    */
!   protected int selectionMode;
  
+   /**
+    * leadPath
+    */
+   protected TreePath leadPath;
  
!   /**
!    * leadIndex
!    */
!   protected int leadIndex;
  
!   /**
!    * leadRow
!    */
!   protected int leadRow;
  
+   /**
+    * Constructor DefaultTreeSelectionModel
+    */
+   public DefaultTreeSelectionModel()
+   {
+     // TODO
+   }
  
!   /**
!    * clone
!    * @exception CloneNotSupportedException TODO
!    * @return Object
!    */
!   public Object clone() throws CloneNotSupportedException
!   {
!     return null; // TODO
!   }
  
!   /**
!    * toString
!    * @return String
!    */
!   public String toString()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * writeObject
!    * @param value0 TODO
!    * @exception IOException TODO
!    */
!   private void writeObject(ObjectOutputStream value0) throws IOException
!   {
!     // TODO
!   }
  
!   /**
!    * readObject
!    * @param value0 TODO
!    * @exception IOException TODO
!    * @exception ClassNotFoundException TODO
!    */
!   private void readObject(ObjectInputStream value0)
!     throws IOException, ClassNotFoundException
!   {
!     // TODO
!   }
  
!   /**
!    * setRowMapper
!    * @param value0 TODO
!    */
!   public void setRowMapper(RowMapper value0)
!   {
!     // TODO
!   }
  
!   /**
!    * getRowMapper
!    * @return RowMapper
!    */
!   public RowMapper getRowMapper()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * setSelectionMode
!    * @param value0 TODO
!    */
!   public void setSelectionMode(int value0)
!   {
!     // TODO
!   }
  
!   /**
!    * getSelectionMode
!    * @return int
!    */
!   public int getSelectionMode()
!   {
!     return 0; // TODO
!   }
  
!   /**
!    * setSelectionPath
!    * @param value0 TODO
!    */
!   public void setSelectionPath(TreePath value0)
!   {
!     // TODO
!   }
  
!   /**
!    * setSelectionPaths
!    * @param value0 TODO
!    */
!   public void setSelectionPaths(TreePath[] value0)
!   {
!     // TODO
!   }
  
!   /**
!    * addSelectionPath
!    * @param value0 TODO
!    */
!   public void addSelectionPath(TreePath value0)
!   {
!     // TODO
!   }
  
!   /**
!    * addSelectionPaths
!    * @param value0 TODO
!    */
!   public void addSelectionPaths(TreePath[] value0)
!   {
!     // TODO
!   }
  
!   /**
!    * removeSelectionPath
!    * @param value0 TODO
!    */
!   public void removeSelectionPath(TreePath value0)
!   {
!     // TODO
!   }
  
!   /**
!    * removeSelectionPaths
!    * @param value0 TODO
!    */
!   public void removeSelectionPaths(TreePath[] value0)
!   {
!     // TODO
!   }
  
!   /**
!    * getSelectionPath
!    * @return TreePath
!    */
!   public TreePath getSelectionPath()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getSelectionPaths
!    * @return TreePath[]
!    */
!   public TreePath[] getSelectionPaths()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getSelectionCount
!    * @return int
!    */
!   public int getSelectionCount()
!   {
!     return 0; // TODO
!   }
  
!   /**
!    * isPathSelected
!    * @param value0 TODO
!    * @return boolean
!    */
!   public boolean isPathSelected(TreePath value0)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * isSelectionEmpty
!    * @return boolean
!    */
!   public boolean isSelectionEmpty()
!   {
!     return false; // TODO
!   }
  
!   /**
!    * clearSelection
!    */
!   public void clearSelection()
!   {
!     // TODO
!   }
  
!   /**
!    * Adds a <code>TreeSelectionListener</code> object to this model.
!    *
!    * @param listener the listener to add
!    */
!   public void addTreeSelectionListener(TreeSelectionListener listener)
!   {
!     listenerList.add(TreeSelectionListener.class, listener);
!   }
  
!   /**
!    * Removes a <code>TreeSelectionListener</code> object from this model.
!    *
!    * @param listener the listener to remove
!    */
!   public void removeTreeSelectionListener(TreeSelectionListener listener)
!   {
!     listenerList.remove(TreeSelectionListener.class, listener);
!   }
  
!   /**
!    * Returns all <code>TreeSelectionListener</code> added to this model.
!    *
!    * @return an array of listeners
!    *
!    * @since 1.4
!    */
!   public TreeSelectionListener[] getTreeSelectionListeners()
!   {
!     return (TreeSelectionListener[]) listenerList.getListeners(TreeSelectionListener.class);
!   }
  
!   /**
!    * fireValueChanged
!    *
!    * @param event the event to fire.
!    */
!   protected void fireValueChanged(TreeSelectionEvent event)
!   {
!     TreeSelectionListener[] listeners = getTreeSelectionListeners();
  
!     for (int i = listeners.length - 1; i >= 0; --i)
!       listeners[i].valueChanged(event);
!   }
  
!   /**
!    * Returns all added listeners of a special type.
!    *
!    * @param listenerType the listener type
!    *
!    * @return an array of listeners
!    *
!    * @since 1.3
!    */
!   public EventListener[] getListeners(Class listenerType)
!   {
!     return listenerList.getListeners(listenerType);
!   }
  
!   /**
!    * getSelectionRows
!    * @return int[]
!    */
!   public int[] getSelectionRows()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * getMinSelectionRow
!    * @return int
!    */
!   public int getMinSelectionRow()
!   {
!     return 0; // TODO
!   }
  
!   /**
!    * getMaxSelectionRow
!    * @return int
!    */
!   public int getMaxSelectionRow()
!   {
!     return 0; // TODO
!   }
  
!   /**
!    * isRowSelected
!    * @param value0 TODO
!    * @return boolean
!    */
!   public boolean isRowSelected(int value0)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * resetRowSelection
!    */
!   public void resetRowSelection()
!   {
!     // TODO
!   }
  
!   /**
!    * getLeadSelectionRow
!    * @return int
!    */
!   public int getLeadSelectionRow()
!   {
!     return 0; // TODO
!   }
  
!   /**
!    * getLeadSelectionPath
!    * @return TreePath
!    */
!   public TreePath getLeadSelectionPath()
!   {
!     return null; // TODO
!   }
  
!   /**
!    * Adds a <code>PropertyChangeListener</code> object to this model.
!    *
!    * @param listener the listener to add.
!    */
!   public void addPropertyChangeListener(PropertyChangeListener listener)
!   {
!     changeSupport.addPropertyChangeListener(listener);
!   }
  
!   /**
!    * Removes a <code>PropertyChangeListener</code> object from this model.
!    *
!    * @param listener the listener to remove.
!    */
!   public void removePropertyChangeListener(PropertyChangeListener listener)
!   {
!     changeSupport.removePropertyChangeListener(listener);
!   }
  
!   /**
!    * Returns all added <code>PropertyChangeListener</code> objects.
!    *
!    * @return an array of listeners.
!    *
!    * @since 1.4
!    */
!   public PropertyChangeListener[] getPropertyChangeListeners()
!   {
!     return changeSupport.getPropertyChangeListeners();
!   }
  
!   /**
!    * insureRowContinuity
!    */
!   protected void insureRowContinuity()
!   {
!     // TODO
!   }
  
!   /**
!    * arePathsContiguous
!    * @param value0 TODO
!    * @return boolean
!    */
!   protected boolean arePathsContiguous(TreePath[] value0)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * canPathsBeAdded
!    * @param value0 TODO
!    * @return boolean
!    */
!   protected boolean canPathsBeAdded(TreePath[] value0)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * canPathsBeRemoved
!    * @param value0 TODO
!    * @return boolean
!    */
!   protected boolean canPathsBeRemoved(TreePath[] value0)
!   {
!     return false; // TODO
!   }
  
!   /**
!    * notifyPathChange
!    * @param value0 TODO
!    * @param value1 TODO
!    */
!   protected void notifyPathChange(Vector value0, TreePath value1)
!   {
!     // TODO
!   }
  
+   /**
+    * updateLeadIndex
+    */
+   protected void updateLeadIndex()
+   {
+     // TODO
+   }
  
!   /**
!    * insureUniqueness
!    */
!   protected void insureUniqueness()
!   {
!     // TODO
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/FixedHeightLayoutCache.java gcc-4.0.0/libjava/javax/swing/tree/FixedHeightLayoutCache.java
*** gcc-3.4.3/libjava/javax/swing/tree/FixedHeightLayoutCache.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/tree/FixedHeightLayoutCache.java	Tue Nov 30 23:59:09 2004
***************
*** 1,5 ****
  /* FixedHeightLayoutCache.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* FixedHeightLayoutCache.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.tree;
*** 40,45 ****
--- 40,46 ----
  
  import java.awt.Rectangle;
  import java.util.Enumeration;
+ 
  import javax.swing.event.TreeModelEvent;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/MutableTreeNode.java gcc-4.0.0/libjava/javax/swing/tree/MutableTreeNode.java
*** gcc-3.4.3/libjava/javax/swing/tree/MutableTreeNode.java	Sun Oct 12 13:33:32 2003
--- gcc-4.0.0/libjava/javax/swing/tree/MutableTreeNode.java	Wed Feb 16 20:03:16 2005
***************
*** 1,5 ****
  /* MutableTreeNode.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* MutableTreeNode.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.tree;
*** 39,83 ****
  
  /**
   * MutableTreeNode public interface
   * @author Andrew Selkirk
   */
! public interface MutableTreeNode extends TreeNode {
! 
! 	/**
! 	 * insert
! 	 * @param child MutableTreeNode
! 	 * @param index Index
! 	 */
! 	void insert(MutableTreeNode child, int index);
! 
! 	/**
! 	 * remove
! 	 * @param index Index
! 	 */
! 	void remove(int index);
! 
! 	/**
! 	 * remove
! 	 * @param node MutableTreeNode
! 	 */
! 	void remove(MutableTreeNode node);
  
! 	/**
! 	 * setUserObject
! 	 * @param object Object
! 	 */
! 	void setUserObject(Object object);
  
! 	/**
! 	 * removeFromParent
! 	 */
! 	void removeFromParent();
  
! 	/**
! 	 * setParent
! 	 * @param parent MutableTreeNode
! 	 */
! 	void setParent(MutableTreeNode parent);
  
  
! } // MutableTreeNode
--- 39,104 ----
  
  /**
   * MutableTreeNode public interface
+  
   * @author Andrew Selkirk
   */
! public interface MutableTreeNode extends TreeNode
! {
!   /**
!    * Inserts a node as child at a given index.
!    *
!    * @param child the note to insert
!    * @param index the index
!    *
!    * @see #remove(int)
!    * @see #remove(MutableTreeNode)
!    * @see #setParent(MutableTreeNode)
!    */
!   void insert(MutableTreeNode child, int index);
  
!   /**
!    * Removes the child node a given index.
!    *
!    * @param index the index
!    *
!    * @see #add(MutableTreeNode,int)
!    * @see #remove(MutableTreeNode)
!    * @see #removeFromParent()
!    */
!   void remove(int index);
  
!   /**
!    * Removes a given child node.
!    *
!    * @param node the node to remove
!    *
!    * @see #add(MutableTreeNode,int)
!    * @see #remove(int)
!    * @see #removeFromParent()
!    */
!   void remove(MutableTreeNode node);
  
!   /**
!    * Sets a user object, the data represented by the node. 
!    *
!    * @param object the data
!    */
!   void setUserObject(Object object);
  
+   /**
+    * Removes this node from its parent.
+    *
+    * @see #remove(int)
+    * @see #remove(MutableTreeNode)
+    */
+   void removeFromParent();
  
!   /**
!    * Sets the parent of the node.
!    *
!    * @param parent the parent
!    *
!    * @see insert(MutableTreeNode,int)
!    */
!   void setParent(MutableTreeNode parent);
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/TreeCellEditor.java gcc-4.0.0/libjava/javax/swing/tree/TreeCellEditor.java
*** gcc-3.4.3/libjava/javax/swing/tree/TreeCellEditor.java	Sun Oct 12 13:33:32 2003
--- gcc-4.0.0/libjava/javax/swing/tree/TreeCellEditor.java	Wed Feb 16 20:03:16 2005
***************
*** 1,5 ****
  /* TreeCellEditor.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TreeCellEditor.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,65 ****
  package javax.swing.tree;
  
  import java.awt.Component;
  import javax.swing.JTree;
  
  /**
   * TreeCellEditor public interface
   * @author Andrew Selkirk
   */
! public interface TreeCellEditor {
! 
! 	/**
! 	 * getTreeCellEditorComponent
! 	 * @param tree TODO
! 	 * @param value TODO
! 	 * @param isSelected TODO
! 	 * @param expanded TODO
! 	 * @param leaf TODO
! 	 * @param row TODO
! 	 * @returns TODO
! 	 */
! 	Component getTreeCellEditorComponent(JTree tree,
! 			Object value, boolean isSelected, boolean expanded,
! 			boolean leaf, int row);
! 
! 
! } // TreeCellEditor
--- 39,65 ----
  package javax.swing.tree;
  
  import java.awt.Component;
+ 
+ import javax.swing.CellEditor;
  import javax.swing.JTree;
  
  /**
   * TreeCellEditor public interface
   * @author Andrew Selkirk
   */
! public interface TreeCellEditor extends CellEditor
! {
!   /**
!    * getTreeCellEditorComponent
!    * @param tree TODO
!    * @param value TODO
!    * @param isSelected TODO
!    * @param expanded TODO
!    * @param leaf TODO
!    * @param row TODO
!    * @return TODO
!    */
!   Component getTreeCellEditorComponent(JTree tree, Object value,
! 				       boolean isSelected, boolean expanded,
! 				       boolean leaf, int row);
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/TreeCellRenderer.java gcc-4.0.0/libjava/javax/swing/tree/TreeCellRenderer.java
*** gcc-3.4.3/libjava/javax/swing/tree/TreeCellRenderer.java	Sun Oct 12 13:33:32 2003
--- gcc-4.0.0/libjava/javax/swing/tree/TreeCellRenderer.java	Tue Nov 30 23:59:09 2004
***************
*** 1,5 ****
  /* TreeCellRenderer.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TreeCellRenderer.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** this exception to your version of the li
*** 35,44 ****
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
  package javax.swing.tree;
  
- // Imports
  import java.awt.Component;
  import javax.swing.JTree;
  
  /**
--- 35,45 ----
  obligated to do so.  If you do not wish to do so, delete this
  exception statement from your version. */
  
+ 
  package javax.swing.tree;
  
  import java.awt.Component;
+ 
  import javax.swing.JTree;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/TreeSelectionModel.java gcc-4.0.0/libjava/javax/swing/tree/TreeSelectionModel.java
*** gcc-3.4.3/libjava/javax/swing/tree/TreeSelectionModel.java	Sun Oct 12 13:33:32 2003
--- gcc-4.0.0/libjava/javax/swing/tree/TreeSelectionModel.java	Tue Nov 30 23:59:09 2004
***************
*** 1,5 ****
  /* TreeSelectionModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TreeSelectionModel.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,44 ****
--- 39,45 ----
  package javax.swing.tree;
  
  import java.beans.PropertyChangeListener;
+ 
  import javax.swing.event.TreeSelectionListener;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/tree/VariableHeightLayoutCache.java gcc-4.0.0/libjava/javax/swing/tree/VariableHeightLayoutCache.java
*** gcc-3.4.3/libjava/javax/swing/tree/VariableHeightLayoutCache.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/tree/VariableHeightLayoutCache.java	Tue Nov 30 23:59:09 2004
***************
*** 1,5 ****
  /* VariableHeightLayoutCache.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* VariableHeightLayoutCache.java --
!    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.tree;
*** 40,45 ****
--- 40,46 ----
  
  import java.awt.Rectangle;
  import java.util.Enumeration;
+ 
  import javax.swing.event.TreeModelEvent;
  
  /**
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/undo/AbstractUndoableEdit.java gcc-4.0.0/libjava/javax/swing/undo/AbstractUndoableEdit.java
*** gcc-3.4.3/libjava/javax/swing/undo/AbstractUndoableEdit.java	Wed Nov 26 22:23:40 2003
--- gcc-4.0.0/libjava/javax/swing/undo/AbstractUndoableEdit.java	Tue Nov 30 23:59:09 2004
***************
*** 1,5 ****
! /* AbstractUndoableEdit.java
!    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
! /* AbstractUndoableEdit.java --
!    Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,46 ****
  package javax.swing.undo;
  
  import java.io.Serializable;
- import javax.swing.UIManager;
  
  
  /**
   * A default implementation of <code>UndoableEdit</code> that can be
--- 39,46 ----
  package javax.swing.undo;
  
  import java.io.Serializable;
  
+ import javax.swing.UIManager;
  
  /**
   * A default implementation of <code>UndoableEdit</code> that can be
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/undo/CompoundEdit.java gcc-4.0.0/libjava/javax/swing/undo/CompoundEdit.java
*** gcc-3.4.3/libjava/javax/swing/undo/CompoundEdit.java	Sun Jan 11 12:40:49 2004
--- gcc-4.0.0/libjava/javax/swing/undo/CompoundEdit.java	Tue Apr 20 10:51:42 2004
*************** import java.util.Vector;
*** 45,61 ****
   * <code>UndoableEdits</code>.
   *
   * <p>The use of a <code>CompoundEdit</code> is divided in two separate
!  * phases.
!  *
!  * <ol><li>In the first phase, the <code>CompoundEdit</code> is
!  * initialized.  After a new instance of <code>CompoundEdit</code> has
!  * been created, {@link #addEdit(UndoableEdit)} is called for each
!  * element of the compound.  To terminate the initialization phase,
!  * call {@link #end()}.</li>
   *
   * <li>In the second phase, the the <code>CompoundEdit</code> can be
!  * used, typically by invoking {@link #undo()} and {@link
!  * #redo()}.</li></ol>
   *
   * @author Andrew Selkirk (aselkirk@sympatico.ca)
   * @author Sascha Brawer (brawer@dandelis.ch)
--- 45,62 ----
   * <code>UndoableEdits</code>.
   *
   * <p>The use of a <code>CompoundEdit</code> is divided in two separate
!  * phases.</p>
   *
+  * <ol>
+  * <li>In the first phase, the <code>CompoundEdit</code> is
+  *     initialized.  After a new instance of <code>CompoundEdit</code> has
+  *     been created, {@link #addEdit(UndoableEdit)} is called for each
+  *     element of the compound.  To terminate the initialization phase,
+  *     call {@link #end()}.</li>
   * <li>In the second phase, the the <code>CompoundEdit</code> can be
!  *     used, typically by invoking {@link #undo()} and
!  *     {@link #redo()}.</li>
!  * </ol>
   *
   * @author Andrew Selkirk (aselkirk@sympatico.ca)
   * @author Sascha Brawer (brawer@dandelis.ch)
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/undo/StateEdit.java gcc-4.0.0/libjava/javax/swing/undo/StateEdit.java
*** gcc-3.4.3/libjava/javax/swing/undo/StateEdit.java	Wed Nov 26 22:23:40 2003
--- gcc-4.0.0/libjava/javax/swing/undo/StateEdit.java	Tue Apr 20 10:51:42 2004
*************** import java.util.Iterator;
*** 44,95 ****
  /**
   * A helper class, making it easy to support undo and redo.
   *
!  * <p>The following example shows how to use this class.
   *
!  * <pre>  Foo foo; // class Foo implements {@link StateEditable}
!  *  StateEdit edit;
   *
!  *  edit = new StateEdit(foo, "Name Change");
!  *  foo.setName("Jane Doe");
!  *  edit.end();
!  *  undoManager.addEdit(edit);</pre>
   *
   * <p>If <code>Foo</code>&#x2019;s implementation of {@link
   * StateEditable} considers the name as part of the editable state,
   * the user can now choose &#x201c;Undo Name Change&#x201d; or
   * &#x201c;Redo Name Change&#x201d; from the respective menu. No
!  * further undo support is needed from the application.
!  *
!  * <p>The following explains what happens in the example.
   *
!  * <p><ol><li>When a <code>StateEdit</code> is created, the associated
!  * {@link StateEditable} gets asked to store its state into a hash
!  * table, {@link #preState}.</li>
   *
   * <li>The application will now perform some changes to the edited
!  * object.  This typically happens by invoking methods on the edited
!  * object.</li>
!  *
   * <li>The editing phase is terminated by invoking the {@link #end()}
!  * method of the <code>StateEdit</code>. The <code>end()</code> method
!  * does two things.
!  *
!  *   <ul><li>The edited object receives a second request for storing
!  *   its state.  This time, it will use a different hash table, {@link
!  *   #postState}.</li>
!  *
!  *   <li>To increase efficiency, the <code>StateEdit</code> now removes
!  *   any entries from {@link #preState} and {@link #postState} that have
!  *   the same key, and whose values are equal. Equality is determined
!  *   by invoking the <code>equals</code> method inherited from
!  *   {@link java.lang.Object}.</li></ul></li>
   *
   * <li>When the user later chooses to undo the <code>StateEdit</code>,
   * the edited object is asked to {@linkplain StateEditable#restoreState
   * restore its state} from the {@link #preState} table.  Similarly,
   * when the user chooses to <i>redo</i> the <code>StateEdit</code>,
   * the edited object gets asked to restore its state from the {@link
!  * #postState}.</li></ol>
   *
   * @author Andrew Selkirk (aselkirk@sympatico.ca)
   * @author Sascha Brawer (brawer@dandelis.ch)
--- 44,97 ----
  /**
   * A helper class, making it easy to support undo and redo.
   *
!  * <p>The following example shows how to use this class.</p>
   *
!  * <pre>
!  * Foo foo; // class Foo implements {@link StateEditable}
!  * StateEdit edit;
   *
!  * edit = new StateEdit(foo, "Name Change");
!  * foo.setName("Jane Doe");
!  * edit.end();
!  * undoManager.addEdit(edit);
!  * </pre>
   *
   * <p>If <code>Foo</code>&#x2019;s implementation of {@link
   * StateEditable} considers the name as part of the editable state,
   * the user can now choose &#x201c;Undo Name Change&#x201d; or
   * &#x201c;Redo Name Change&#x201d; from the respective menu. No
!  * further undo support is needed from the application.</p>
   *
!  * <p>The following explains what happens in the example.</p>
   *
+  * <ol>
+  * <li>When a <code>StateEdit</code> is created, the associated
+  *     {@link StateEditable} gets asked to store its state into a hash
+  *     table, {@link #preState}.</li>
   * <li>The application will now perform some changes to the edited
!  *     object. This typically happens by invoking methods on the edited
!  *     object.</li>
   * <li>The editing phase is terminated by invoking the {@link #end()}
!  *     method of the <code>StateEdit</code>. The <code>end()</code> method
!  *     does two things.
   *
+  *     <ul>
+  *     <li>The edited object receives a second request for storing
+  *         its state.  This time, it will use a different hash table, {@link
+  *         #postState}.</li>
+  *     <li>To increase efficiency, the <code>StateEdit</code> now removes
+  *         any entries from {@link #preState} and {@link #postState} that have
+  *         the same key, and whose values are equal. Equality is determined
+  *         by invoking the <code>equals</code> method inherited from
+  *         {@link java.lang.Object}.</li>
+  *     </ul></li>
   * <li>When the user later chooses to undo the <code>StateEdit</code>,
   * the edited object is asked to {@linkplain StateEditable#restoreState
   * restore its state} from the {@link #preState} table.  Similarly,
   * when the user chooses to <i>redo</i> the <code>StateEdit</code>,
   * the edited object gets asked to restore its state from the {@link
!  * #postState}.</li>
!  * </ol>
   *
   * @author Andrew Selkirk (aselkirk@sympatico.ca)
   * @author Sascha Brawer (brawer@dandelis.ch)
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/undo/UndoManager.java gcc-4.0.0/libjava/javax/swing/undo/UndoManager.java
*** gcc-3.4.3/libjava/javax/swing/undo/UndoManager.java	Wed Jun 11 13:20:41 2003
--- gcc-4.0.0/libjava/javax/swing/undo/UndoManager.java	Thu Feb 17 07:48:53 2005
***************
*** 1,5 ****
  /* AbstractTableModel.java --
!    Copyright (C) 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* AbstractTableModel.java --
!    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,260 ****
  
  package javax.swing.undo;
  
  import javax.swing.event.UndoableEditEvent;
  import javax.swing.event.UndoableEditListener;
  
  /**
!  * UndoManager
!  * @author	Andrew Selkirk
   */
! public class UndoManager extends CompoundEdit implements UndoableEditListener {
  
- 	//-------------------------------------------------------------
- 	// Variables --------------------------------------------------
- 	//-------------------------------------------------------------
  
! 	/**
! 	 * indexOfNextAdd
! 	 */
! 	int indexOfNextAdd;
  
- 	/**
- 	 * limit
- 	 */
- 	int limit;
  
  
- 	//-------------------------------------------------------------
- 	// Initialization ---------------------------------------------
- 	//-------------------------------------------------------------
  
! 	/**
! 	 * Constructor UndoManager
! 	 */
! 	public UndoManager() {
! 		// TODO
! 	} // UndoManager()
  
  
! 	//-------------------------------------------------------------
! 	// Methods ----------------------------------------------------
! 	//-------------------------------------------------------------
  
- 	/**
- 	 * toString
- 	 * @returns String
- 	 */
- 	public String toString() {
- 		return null; // TODO
- 	} // toString()
  
! 	/**
! 	 * end
! 	 */
! 	public synchronized void end() {
! 		// TODO
! 	} // end()
  
- 	/**
- 	 * getLimit
- 	 * @returns int
- 	 */
- 	public synchronized int getLimit() {
- 		return 0; // TODO
- 	} // getLimit()
  
! 	/**
! 	 * discardAllEdits
! 	 */
! 	public synchronized void discardAllEdits() {
! 		// TODO
! 	} // discardAllEdits()
  
- 	/**
- 	 * trimForLimit
- 	 */
- 	protected void trimForLimit() {
- 		// TODO
- 	} // trimForLimit()
  
! 	/**
! 	 * trimEdits
! 	 * @param value0 TODO
! 	 * @param value1 TODO
! 	 */
! 	protected void trimEdits(int value0, int value1) {
! 		// TODO
! 	} // trimEdits()
  
! 	/**
! 	 * setLimit
! 	 * @param value0 TODO
! 	 */
! 	public synchronized void setLimit(int value0) {
! 		// TODO
! 	} // setLimit()
  
- 	/**
- 	 * editToBeUndone
- 	 * @returns UndoableEdit
- 	 */
- 	protected UndoableEdit editToBeUndone() {
- 		return null; // TODO
- 	} // editToBeUndone()
  
! 	/**
! 	 * editToBeRedone
! 	 * @returns UndoableEdit
! 	 */
! 	protected UndoableEdit editToBeRedone() {
! 		return null; // TODO
! 	} // editToBeRedone()
  
! 	/**
! 	 * undoTo
! 	 * @param value0 TODO
! 	 * @exception CannotUndoException TODO
! 	 */
! 	protected void undoTo(UndoableEdit value0) throws CannotUndoException {
! 		// TODO
! 	} // undoTo()
  
- 	/**
- 	 * redoTo
- 	 * @param value0 TODO
- 	 * @exception CannotRedoException TODO
- 	 */
- 	protected void redoTo(UndoableEdit value0) throws CannotRedoException {
- 		// TODO
- 	} // redoTo()
  
! 	/**
! 	 * undoOrRedo
! 	 * @exception CannotRedoException TODO
! 	 * @exception CannotUndoException TODO
! 	 */
! 	public synchronized void undoOrRedo() throws CannotRedoException, CannotUndoException {
! 		// TODO
! 	} // undoOrRedo()
  
! 	/**
! 	 * canUndoOrRedo
! 	 * @returns boolean
! 	 */
! 	public synchronized boolean canUndoOrRedo() {
! 		return false; // TODO
! 	} // canUndoOrRedo()
  
! 	/**
! 	 * undo
! 	 * @exception CannotUndoException TODO
! 	 */
! 	public synchronized void undo() throws CannotUndoException {
! 		// TODO
! 	} // undo()
  
! 	/**
! 	 * canUndo
! 	 * @returns boolean
! 	 */
! 	public synchronized boolean canUndo() {
! 		return false; // TODO
! 	} // canUndo()
  
- 	/**
- 	 * redo
- 	 * @exception CannotRedoException TODO
- 	 */
- 	public synchronized void redo() throws CannotRedoException {
- 		// TODO
- 	} // redo()
  
! 	/**
! 	 * canRedo
! 	 * @returns boolean
! 	 */
! 	public synchronized boolean canRedo() {
! 		return false; // TODO
! 	} // canRedo()
  
! 	/**
! 	 * addEdit
! 	 * @param value0 TODO
! 	 * @returns boolean
! 	 */
! 	public synchronized boolean addEdit(UndoableEdit value0) {
! 		return false; // TODO
! 	} // addEdit()
  
! 	/**
! 	 * getUndoOrRedoPresentationName
! 	 * @returns String
! 	 */
! 	public synchronized String getUndoOrRedoPresentationName() {
! 		return null; // TODO
! 	} // getUndoOrRedoPresentationName()
  
! 	/**
! 	 * getUndoPresentationName
! 	 * @returns String
! 	 */
! 	public synchronized String getUndoPresentationName() {
! 		return null; // TODO
! 	} // getUndoPresentationName()
  
- 	/**
- 	 * getRedoPresentationName
- 	 * @returns String
- 	 */
- 	public synchronized String getRedoPresentationName() {
- 		return null; // TODO
- 	} // getRedoPresentationName()
  
! 	/**
! 	 * undoableEditHappened
! 	 * @param value0 TODO
! 	 */
! 	public void undoableEditHappened(UndoableEditEvent value0) {
! 		// TODO
! 	} // undoableEditHappened()
  
  
! } // UndoManager
--- 38,625 ----
  
  package javax.swing.undo;
  
+ import javax.swing.UIManager;
  import javax.swing.event.UndoableEditEvent;
  import javax.swing.event.UndoableEditListener;
  
+ 
  /**
!  * A manager for providing an application&#x2019;s undo/redo
!  * functionality.
!  *
!  * <p>Tyipcally, an application will create only one single instance
!  * of UndoManager. When the user performs an undoable action, for
!  * instance changing the color of an object from green to blue, the
!  * application registers an {@link UndoableEdit} object with the
!  * <code>UndoManager</code>. To implement the &#x201c;undo&#x201d; and
!  * &#x201c;redo&#x201d; menu commands, the application invokes the
!  * UndoManager&#x2019;s {@link #undo} and {@link #redo} methods.  The
!  * human-readable text of these menu commands is provided by {@link
!  * #getUndoPresentationName} and {@link #getRedoPresentationName},
!  * respectively. To determine whether the menu item should be
!  * selectable or greyed out, use {@link #canUndo} and {@link
!  * #canRedo}.
!  *
!  * <p>The UndoManager will only keep a specified number of editing
!  * actions, the <em>limit</em>. The value of this parameter can be
!  * retrieved by calling {@link #getLimit} and set with {@link
!  * #setLimit}.  If more UndoableEdits are added to the UndoManager,
!  * the oldest actions will be discarded.
!  *
!  * <p>Some applications do not provide separate menu commands for
!  * &#x201c;undo&#x201d; and &#x201c;redo.&#x201d; Instead, they
!  * have just a single command whose text switches between the two.
!  * Such applications would use an UndoManager with a <code>limit</code>
!  * of 1. The text of this combined menu item is available via
!  * {@link #getUndoOrRedoPresentationName}, and it is implemented
!  * by calling {@link #undoOrRedo}.
!  *
!  * <p><b>Thread Safety:</b> In constrast to the other classes of the
!  * <code>javax.swing.undo</code> package, the public methods of an
!  * <code>UndoManager</code> are safe to call from concurrent threads.
!  * The caller does not need to perform external synchronization, and
!  * {@link javax.swing.event.UndoableEvent} sources do not need to
!  * broadcast their events from inside the Swing worker thread.
!  *
!  * @author Sascha Brawer (brawer@dandelis.ch)
   */
! public class UndoManager
!   extends CompoundEdit
!   implements UndoableEditListener
! {
!   /**
!    * The unique ID for serializing instances of this class. Determined
!    * using the <code>serialver</code> tool of Sun JDK 1.4.1_01 on
!    * GNU/Linux.
!    */
!   static final long serialVersionUID = -2077529998244066750L;
  
  
!   /**
!    * An index into the inherited {@link #edits} Vector that indicates
!    * at which position newly added editing actions would get inserted.
!    *
!    * <p>Normally, the value of <code>indexOfNextAdd</code> equals
!    * the number of UndoableEdits stored by this UndoManager, i.e.
!    * <code>edits.size()</code>. For each call to {@link #undo},
!    * <code>indexOfNextAdd</code> is decremented by one. For each
!    * call to {@link #redo}, it is incremented again.
!    */
!   int indexOfNextAdd;
  
  
+   /**
+    * The maximum number of UndoableEdits stored by this UndoManager.
+    */
+   int limit;
  
  
!   /**
!    * Constructs an UndoManager.
!    *
!    * <p>The <code>limit</code> of the freshly constructed UndoManager
!    * is 100.
!    */
!   public UndoManager()
!   {
!     limit = 100;
!   }
  
  
!   /**
!    * Returns a string representation for this UndoManager. This may be
!    * useful for debugging purposes. For the text of menu items, please
!    * refer to {@link #getUndoPresentationName}, {@link
!    * #getRedoPresentationName}, and {@link
!    * #getUndoOrRedoPresentationName}.
!    */
!   public String toString()
!   {
!     return super.toString()
!       + " limit: " + limit
!       + " indexOfNextAdd: " + indexOfNextAdd;
!   }
  
  
!   /**
!    * Puts this UndoManager into a state where it acts as a normal
!    * {@link CompoundEdit}. It is unlikely that an application would
!    * want to do this.
!    */
!   public synchronized void end()
!   {
!     super.end();
!     trimEdits(indexOfNextAdd, edits.size() - 1);
!   }
  
  
!   /**
!    * Returns how many edits this UndoManager can maximally hold.
!    *
!    * @see #setLimit
!    */
!   public synchronized int getLimit()
!   {
!     return limit;
!   }
  
  
!   /**
!    * Changes the maximal number of edits that this UndoManager can
!    * process. If there are currently more edits than the new limit
!    * allows, they will receive a {@link UndoableEdit#die() die}
!    * message in reverse order of addition.
!    *
!    * @param limit the new limit.
!    *
!    * @throws IllegalStateException if {@link #end()} has already been
!    * called on this UndoManager.
!    */
!   public synchronized void setLimit(int limit)
!   {
!     if (!isInProgress())
!       throw new IllegalStateException();
  
!     this.limit = limit;
!     trimForLimit();
!   }
  
  
!   /**
!    * Discards all editing actions that are currently registered with
!    * this UndoManager. Each {@link UndoableEdit} will receive a {@link
!    * UndoableEdit#die() die message}.
!    */
!   public synchronized void discardAllEdits()
!   {
!     int size;
  
!     size = edits.size();
!     for (int i = size - 1; i >= 0; i--)
!       ((UndoableEdit) edits.get(i)).die();
!     indexOfNextAdd = 0;
!     edits.clear();
!   }
  
  
!   /**
!    * Called by various internal methods in order to enforce
!    * the <code>limit</code> value.
!    */
!   protected void trimForLimit()
!   {
!     int high, s;
  
!     s = edits.size();
  
!     /* The Sun J2SE1.4.1_01 implementation can be observed to do
!      * nothing (instead of throwing an exception) with a negative or
!      * zero limit. It may be debatable whether this is the best
!      * behavior, but we replicate it for sake of compatibility.
!      */
!     if (limit <= 0 || s <= limit)
!       return;
  
!     high = Math.min(indexOfNextAdd + limit/2 - 1, s - 1);
!     trimEdits(high + 1, s - 1);
!     trimEdits(0, high - limit);
!   }
  
  
!   /**
!    * Discards a range of edits. All edits in the range <code>[from
!    * .. to]</code> will receive a {@linkplain UndoableEdit#die() die
!    * message} before being removed from the edits array.  If
!    * <code>from</code> is greater than <code>to</code>, nothing
!    * happens.
!    *
!    * @param from the lower bound of the range of edits to be
!    * discarded.
!    *
!    * @param to the upper bound of the range of edits to be discarded.
!    */
!   protected void trimEdits(int from, int to)
!   {
!     if (from > to)
!       return;
  
!     for (int i = to; i >= from; i--)
!         ((UndoableEdit) edits.get(i)).die();
  
!     // Remove the range [from .. to] from edits. If from == to, which
!     // is likely to be a very common case, we can do better than
!     // creating a sub-list and clearing it.
!     if (to == from)
!       edits.remove(from);
!     else
!       edits.subList(from, to + 1).clear();
  
!     if (indexOfNextAdd > to)
!       indexOfNextAdd = indexOfNextAdd - to + from - 1;
!     else if (indexOfNextAdd >= from)
!       indexOfNextAdd = from;
!   }
  
  
!   /**
!    * Determines which significant edit would be undone if {@link
!    * #undo()} was called.
!    *
!    * @returns the significant edit that would be undone, or
!    * <code>null</code> if no significant edit would be affected by
!    * calling {@link #undo()}.
!    */
!   protected UndoableEdit editToBeUndone()
!   {
!     UndoableEdit result;
  
+     for (int i = indexOfNextAdd - 1; i >= 0; i--)
+       {
+         result = (UndoableEdit) edits.get(i);
+         if (result.isSignificant())
+           return result;
+       }
  
!     return null;
!   }
! 
! 
!   /**
!    * Determines which significant edit would be redone if {@link
!    * #redo()} was called.
!    *
!    * @returns the significant edit that would be redone, or
!    * <code>null</code> if no significant edit would be affected by
!    * calling {@link #redo()}.
!    */
!   protected UndoableEdit editToBeRedone()
!   {
!     UndoableEdit result;
! 
!     for (int i = indexOfNextAdd; i < edits.size(); i++)
!       {
!         result = (UndoableEdit) edits.get(i);
!         if (result.isSignificant())
!           return result;
!       }
! 
!     return null;
!   }
! 
! 
!   /**
!    * Undoes all editing actions in reverse order of addition,
!    * up to the specified action,
!    *
!    * @param edit the last editing action to be undone.
!    */
!   protected void undoTo(UndoableEdit edit)
!     throws CannotUndoException
!   {
!     UndoableEdit cur;
! 
!     if (!edits.contains(edit))
!       throw new CannotUndoException();
! 
!     while (true)
!       {
!         indexOfNextAdd -= 1;
!         cur = (UndoableEdit) edits.get(indexOfNextAdd);
!         cur.undo();
!         if (cur == edit)
!           return;
!       }
!   }
! 
! 
!   /**
!    * Redoes all editing actions in the same order as they were
!    * added to this UndoManager, up to the specified action.
!    *
!    * @param edit the last editing action to be redone.
!    */
!   protected void redoTo(UndoableEdit edit)
!     throws CannotRedoException
!   {
!     UndoableEdit cur;
! 
!     if (!edits.contains(edit))
!       throw new CannotRedoException();
! 
!     while (true)
!       {
!         cur = (UndoableEdit) edits.get(indexOfNextAdd);
!         indexOfNextAdd += 1;
!         cur.redo();
!         if (cur == edit)
!           return;
!       }
!   }
! 
!   
!   /**
!    * Undoes or redoes the last action. If the last action has already
!    * been undone, it will be re-done, and vice versa.
!    *
!    * <p>This is useful for applications that do not present a separate
!    * undo and redo facility, but just have a single menu item for
!    * undoing and redoing the very last action. Such applications will
!    * use an <code>UndoManager</code> whose <code>limit</code> is 1.
!    */
!   public synchronized void undoOrRedo()
!     throws CannotRedoException, CannotUndoException
!   {
!     if (indexOfNextAdd == edits.size())
!       undo();
!     else
!       redo();
!   }
! 
! 
!   /**
!    * Determines whether it would be possible to either undo or redo
!    * this editing action.
!    *
!    * <p>This is useful for applications that do not present a separate
!    * undo and redo facility, but just have a single menu item for
!    * undoing and redoing the very last action. Such applications will
!    * use an <code>UndoManager</code> whose <code>limit</code> is 1.
!    *
!    * @return <code>true</code> to indicate that this action can be
!    * undone or redone; <code>false</code> if neither is possible at
!    * the current time.
!    */
!   public synchronized boolean canUndoOrRedo()
!   {
!     return indexOfNextAdd == edits.size() ? canUndo() : canRedo();
!   }
! 
! 
!   /**
!    * Undoes one significant edit action. If insignificant actions have
!    * been posted after the last signficant action, the insignificant
!    * ones will be undone first.
!    *
!    * <p>However, if {@link #end()} has been called on this
!    * UndoManager, it will behave like a normal {@link
!    * CompoundEdit}. In this case, all actions will be undone in
!    * reverse order of addition. Typical applications will never call
!    * {@link #end()} on their <code>UndoManager</code>.
!    *
!    * @throws CannotUndoException if no action can be undone.
!    *
!    * @see #canUndo()
!    * @see #redo()
!    * @see #undoOrRedo()
!    */
!   public synchronized void undo()
!     throws CannotUndoException
!   {
!     if (!isInProgress())
!       {
!         super.undo();
!         return;
!       }
! 
!     UndoableEdit edit = editToBeUndone();
!     if (edit == null)
!       throw new CannotUndoException();
! 
!     undoTo(edit);
!   }
! 
! 
!   /**
!    * Determines whether it would be possible to undo this editing
!    * action.
!    *
!    * @return <code>true</code> to indicate that this action can be
!    * undone; <code>false</code> otherwise.
!    *
!    * @see #undo()
!    * @see #canRedo()
!    * @see #canUndoOrRedo()
!    */
!   public synchronized boolean canUndo()
!   {
!     UndoableEdit edit;
! 
!     if (!isInProgress())
!       return super.canUndo();
! 
!     edit = editToBeUndone();
!     return edit != null && edit.canUndo();
!   }
! 
! 
! 
!   /**
!    * Redoes one significant edit action. If insignificant actions have
!    * been posted in between, the insignificant ones will be redone
!    * first.
!    *
!    * <p>However, if {@link #end()} has been called on this
!    * UndoManager, it will behave like a normal {@link
!    * CompoundEdit}. In this case, <em>all</em> actions will be redone
!    * in order of addition. Typical applications will never call {@link
!    * #end()} on their <code>UndoManager</code>.
!    *
!    * @throws CannotRedoException if no action can be redone.
!    *
!    * @see #canRedo()
!    * @see #redo()
!    * @see #undoOrRedo()
!    */
!   public synchronized void redo()
!     throws CannotRedoException
!   {
!     if (!isInProgress())
!       {
!         super.redo();
!         return;
!       }
! 
!     UndoableEdit edit = editToBeRedone();
!     if (edit == null)
!       throw new CannotRedoException();
! 
!     redoTo(edit);
!   }
! 
! 
!   /**
!    * Determines whether it would be possible to redo this editing
!    * action.
!    *
!    * @return <code>true</code> to indicate that this action can be
!    * redone; <code>false</code> otherwise.
!    *
!    * @see #redo()
!    * @see #canUndo()
!    * @see #canUndoOrRedo()
!    */
!   public synchronized boolean canRedo()
!   {
!     UndoableEdit edit;
! 
!     if (!isInProgress())
!       return super.canRedo();
! 
!     edit = editToBeRedone();
!     return edit != null && edit.canRedo();
!   }
! 
! 
!   /**
!    * Registers an undoable editing action with this UndoManager.  If
!    * the capacity <code>limit</code> is reached, the oldest action
!    * will be discarded (and receives a {@linkplain UndoableEdit#die()
!    * die message}. Equally, any actions that were undone (but not re-done)
!    * will be discarded, too.
!    *
!    * @param edit the editing action that is added to this UndoManager.
!    *
!    * @return <code>true</code> if <code>edit</code> could be
!    * incorporated; <code>false</code> if <code>edit</code> has not
!    * been incorporated because {@link #end()} has already been called
!    * on this <code>UndoManager</code>.
!    */
!   public synchronized boolean addEdit(UndoableEdit edit)
!   {
!     boolean result;
! 
!     // Discard any edits starting at indexOfNextAdd.
!     trimEdits(indexOfNextAdd, edits.size() - 1);
! 
!     result = super.addEdit(edit);
!     indexOfNextAdd = edits.size();
!     trimForLimit();
!     return result;
!   }
! 
! 
!   /**
!    * Calculates a localized text for presenting the undo or redo
!    * action to the user, for example in the form of a menu command.
!    *
!    * <p>This is useful for applications that do not present a separate
!    * undo and redo facility, but just have a single menu item for
!    * undoing and redoing the very last action. Such applications will
!    * use an <code>UndoManager</code> whose <code>limit</code> is 1.
!    *
!    * @return the redo presentation name if the last action has already
!    * been undone, or the undo presentation name otherwise.
!    *
!    * @see #getUndoPresentationName()
!    * @see #getRedoPresentationName()
!    */
!   public synchronized String getUndoOrRedoPresentationName()
!   {
!     if (indexOfNextAdd == edits.size())
!       return getUndoPresentationName();
!     else
!       return getRedoPresentationName();
!   }
! 
! 
!   /**
!    * Calculates a localized text for presenting the undo action
!    * to the user, for example in the form of a menu command.
!    */
!   public synchronized String getUndoPresentationName()
!   {
!     UndoableEdit edit;
! 
!     if (!isInProgress())
!       return super.getUndoPresentationName();
! 
!     edit = editToBeUndone();
!     if (edit == null)
!       return UIManager.getString("AbstractUndoableEdit.undoText");
!     else
!       return edit.getUndoPresentationName();
!   }
! 
! 
!   /**
!    * Calculates a localized text for presenting the redo action
!    * to the user, for example in the form of a menu command.
!    */
!   public synchronized String getRedoPresentationName()
!   {
!     UndoableEdit edit;
! 
!     if (!isInProgress())
!       return super.getRedoPresentationName();
! 
!     edit = editToBeRedone();
!     if (edit == null)
!       return UIManager.getString("AbstractUndoableEdit.redoText");
!     else
!       return edit.getRedoPresentationName();
!   }
!   
!   
!   /**
!    * Registers the edit action of an {@link UndoableEditEvent}
!    * with this UndoManager.
!    *
!    * <p><b>Thread Safety:</b> This method may safely be invoked from
!    * concurrent threads.  The caller does not need to perform external
!    * synchronization. This means that {@link
!    * javax.swing.event.UndoableEvent} sources do not need to broadcast
!    * their events from inside the Swing worker thread.
!    *
!    * @param event the event whose <code>edit</code> will be
!    * passed to {@link #addEdit}.
!    *
!    * @see UndoableEditEvent#getEdit()
!    * @see #addEdit
!    */
!   public void undoableEditHappened(UndoableEditEvent event)
!   {
!     // Note that this method does not need to be synchronized,
!     // because addEdit will obtain and release the mutex.
!     addEdit(event.getEdit());
!   }
! }
diff -Nrcpad gcc-3.4.3/libjava/javax/swing/undo/UndoableEditSupport.java gcc-4.0.0/libjava/javax/swing/undo/UndoableEditSupport.java
*** gcc-3.4.3/libjava/javax/swing/undo/UndoableEditSupport.java	Wed Jan  7 14:42:04 2004
--- gcc-4.0.0/libjava/javax/swing/undo/UndoableEditSupport.java	Thu Feb 17 07:48:53 2005
***************
*** 1,5 ****
  /* UndoableEditSupport.java --
!    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UndoableEditSupport.java --
!    Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.swing.undo;
*** 40,55 ****
  
  import java.util.Iterator;
  import java.util.Vector;
  import javax.swing.event.UndoableEditEvent;
  import javax.swing.event.UndoableEditListener;
  
- 
  /**
   * A helper class for supporting {@link
   * javax.swing.event.UndoableEditListener}.
   *
!  * @author <a href="mailto:aselkirk@sympatico.ca">Andrew Selkirk</a>
!  * @author <a href="mailto:brawer@dandelis.ch">Sascha Brawer</a>
   */
  public class UndoableEditSupport
  {
--- 40,55 ----
  
  import java.util.Iterator;
  import java.util.Vector;
+ 
  import javax.swing.event.UndoableEditEvent;
  import javax.swing.event.UndoableEditListener;
  
  /**
   * A helper class for supporting {@link
   * javax.swing.event.UndoableEditListener}.
   *
!  * @author Andrew Selkirk (aselkirk@sympatico.ca)
!  * @author Sascha Brawer (brawer@dandelis.ch)
   */
  public class UndoableEditSupport
  {
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/HeuristicCommitException.java gcc-4.0.0/libjava/javax/transaction/HeuristicCommitException.java
*** gcc-3.4.3/libjava/javax/transaction/HeuristicCommitException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/HeuristicCommitException.java	Thu Feb 17 07:48:53 2005
***************
*** 1,5 ****
  /* HeuristicCommitException.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* HeuristicCommitException.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/HeuristicMixedException.java gcc-4.0.0/libjava/javax/transaction/HeuristicMixedException.java
*** gcc-3.4.3/libjava/javax/transaction/HeuristicMixedException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/HeuristicMixedException.java	Thu Feb 17 07:48:53 2005
***************
*** 1,5 ****
  /* HeuristicMixedException.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* HeuristicMixedException.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/HeuristicRollbackException.java gcc-4.0.0/libjava/javax/transaction/HeuristicRollbackException.java
*** gcc-3.4.3/libjava/javax/transaction/HeuristicRollbackException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/HeuristicRollbackException.java	Thu Feb 17 07:48:53 2005
***************
*** 1,5 ****
  /* HeuristicRollbackException.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* HeuristicRollbackException.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/InvalidTransactionException.java gcc-4.0.0/libjava/javax/transaction/InvalidTransactionException.java
*** gcc-3.4.3/libjava/javax/transaction/InvalidTransactionException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/InvalidTransactionException.java	Thu Feb 17 07:48:53 2005
***************
*** 1,5 ****
  /* InvalidTransactionException.java --
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* InvalidTransactionException.java --
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.transaction;
*** 40,46 ****
  import java.rmi.RemoteException;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date April 18, 2001
   */
  
--- 40,46 ----
  import java.rmi.RemoteException;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date April 18, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/NotSupportedException.java gcc-4.0.0/libjava/javax/transaction/NotSupportedException.java
*** gcc-3.4.3/libjava/javax/transaction/NotSupportedException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/NotSupportedException.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* NotSupportedException.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* NotSupportedException.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/RollbackException.java gcc-4.0.0/libjava/javax/transaction/RollbackException.java
*** gcc-3.4.3/libjava/javax/transaction/RollbackException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/RollbackException.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* RollbackException.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* RollbackException.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/Status.java gcc-4.0.0/libjava/javax/transaction/Status.java
*** gcc-3.4.3/libjava/javax/transaction/Status.java	Sat Oct 11 19:18:24 2003
--- gcc-4.0.0/libjava/javax/transaction/Status.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* Status.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Status.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/Synchronization.java gcc-4.0.0/libjava/javax/transaction/Synchronization.java
*** gcc-3.4.3/libjava/javax/transaction/Synchronization.java	Sat Oct 11 19:18:24 2003
--- gcc-4.0.0/libjava/javax/transaction/Synchronization.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* Synchronization.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Synchronization.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/SystemException.java gcc-4.0.0/libjava/javax/transaction/SystemException.java
*** gcc-3.4.3/libjava/javax/transaction/SystemException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/SystemException.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* SystemException.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* SystemException.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/Transaction.java gcc-4.0.0/libjava/javax/transaction/Transaction.java
*** gcc-3.4.3/libjava/javax/transaction/Transaction.java	Sat Oct 11 19:18:24 2003
--- gcc-4.0.0/libjava/javax/transaction/Transaction.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* Transaction.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Transaction.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.transaction;
*** 41,47 ****
  import javax.transaction.xa.XAResource;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 41,47 ----
  import javax.transaction.xa.XAResource;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/TransactionManager.java gcc-4.0.0/libjava/javax/transaction/TransactionManager.java
*** gcc-3.4.3/libjava/javax/transaction/TransactionManager.java	Sat Oct 11 19:18:24 2003
--- gcc-4.0.0/libjava/javax/transaction/TransactionManager.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* TransactionManager.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TransactionManager.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/TransactionRequiredException.java gcc-4.0.0/libjava/javax/transaction/TransactionRequiredException.java
*** gcc-3.4.3/libjava/javax/transaction/TransactionRequiredException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/TransactionRequiredException.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* TransactionRequiredException --
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TransactionRequiredException --
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.transaction;
*** 40,46 ****
  import java.rmi.RemoteException;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date April 18, 2001
   */
  
--- 40,46 ----
  import java.rmi.RemoteException;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date April 18, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/TransactionRolledbackException.java gcc-4.0.0/libjava/javax/transaction/TransactionRolledbackException.java
*** gcc-3.4.3/libjava/javax/transaction/TransactionRolledbackException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/TransactionRolledbackException.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* TransactionRolledbackException --
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* TransactionRolledbackException --
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** package javax.transaction;
*** 40,46 ****
  import java.rmi.RemoteException;
  
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date April 18, 2001
   */
  
--- 40,46 ----
  import java.rmi.RemoteException;
  
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date April 18, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/UserTransaction.java gcc-4.0.0/libjava/javax/transaction/UserTransaction.java
*** gcc-3.4.3/libjava/javax/transaction/UserTransaction.java	Sat Oct 11 19:18:24 2003
--- gcc-4.0.0/libjava/javax/transaction/UserTransaction.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* UserTransaction.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* UserTransaction.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,45 ****
  package javax.transaction;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 39,45 ----
  package javax.transaction;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/xa/XAException.java gcc-4.0.0/libjava/javax/transaction/xa/XAException.java
*** gcc-3.4.3/libjava/javax/transaction/xa/XAException.java	Tue Nov 26 22:48:42 2002
--- gcc-4.0.0/libjava/javax/transaction/xa/XAException.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* XAException.java --
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* XAException.java --
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  package javax.transaction.xa;
   
  /**
!  * @author Tom Tromey <tromey@redhat.com>
   * @date April 18, 2001
   */
  
--- 38,44 ----
  package javax.transaction.xa;
   
  /**
!  * @author Tom Tromey (tromey@redhat.com)
   * @date April 18, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/xa/XAResource.java gcc-4.0.0/libjava/javax/transaction/xa/XAResource.java
*** gcc-3.4.3/libjava/javax/transaction/xa/XAResource.java	Sat Oct 11 19:18:24 2003
--- gcc-4.0.0/libjava/javax/transaction/xa/XAResource.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* XAResource.java -- 
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* XAResource.java -- 
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  package javax.transaction.xa;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 38,44 ----
  package javax.transaction.xa;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/transaction/xa/Xid.java gcc-4.0.0/libjava/javax/transaction/xa/Xid.java
*** gcc-3.4.3/libjava/javax/transaction/xa/Xid.java	Sat Oct 11 19:18:24 2003
--- gcc-4.0.0/libjava/javax/transaction/xa/Xid.java	Thu Feb 17 07:48:54 2005
***************
*** 1,5 ****
  /* Xid.java --
!    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* Xid.java --
!    Copyright (C) 2001, 2002, 2005  Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 38,44 ****
  package javax.transaction.xa;
   
  /**
!  * @author Warren Levy <warrenl@redhat.com>
   * @date May 25, 2001
   */
  
--- 38,44 ----
  package javax.transaction.xa;
   
  /**
!  * @author Warren Levy (warrenl@redhat.com)
   * @date May 25, 2001
   */
  
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/XMLConstants.java gcc-4.0.0/libjava/javax/xml/XMLConstants.java
*** gcc-3.4.3/libjava/javax/xml/XMLConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/XMLConstants.java	Thu Feb 17 07:48:55 2005
***************
*** 0 ****
--- 1,126 ----
+ /* XMLConstants.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml;
+ 
+ /**
+  * Repository for well-known XML constants.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public final class XMLConstants
+ {
+ 
+   /**
+    * Dummy namespace URI indicating that there is no namespace.
+    * @see http://www.w3.org/TR/REC-xml-names/#defaulting
+    */
+   public static final String NULL_NS_URI = "";
+ 
+   /**
+    * Dummy namespace prefix indicating that there is no namespace.
+    * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames
+    */
+   public static final String DEFAULT_NS_PREFIX = "";
+ 
+   /**
+    * The XML Namespace URI.
+    * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames
+    */
+   public static final String XML_NS_URI =
+ 	 	"http://www.w3.org/XML/1998/namespace";
+ 
+   /**
+    * The XML Namespace prefix.
+    * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames
+    */
+   public static final String XML_NS_PREFIX = "xml";
+ 
+   /**
+    * The XML Namespace declaration URI.
+    * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames
+    */
+   public static final String XMLNS_ATTRIBUTE_NS_URI =
+ 	 	"http://www.w3.org/2000/xmlns/";
+ 
+   /**
+    * The XML Namespace declaration attribute.
+    * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames
+    */
+   public static final String XMLNS_ATTRIBUTE = "xmlns";
+ 
+   /**
+    * The XML Schema (XSD) namespace URI.
+    * @see http://www.w3.org/TR/xmlschema-1/#Instance_Document_Constructions
+    */
+   public static final String W3C_XML_SCHEMA_NS_URI =
+ 	 	"http://www.w3.org/2001/XMLSchema";
+ 
+   /**
+    * The XML Schema Instance (XSI) namespace URI.
+    * @see http://www.w3.org/TR/xmlschema-1/#Instance_Document_Constructions
+    */
+   public static final String W3C_XML_SCHEMA_INSTANCE_NS_URI =
+ 	 	"http://www.w3.org/2001/XMLSchema-instance";
+ 
+   /**
+    * The XPath 2.0 datatypes namespace URI.
+    * @see http://www.w3.org/TR/xpath-datamodel
+    */
+   public static final String W3C_XPATH_DATATYPE_NS_URI =
+ 	 	"http://www.w3.org/2003/11/xpath-datatypes";
+ 
+   /**
+    * The XML DTD namespace URI.
+    */
+   public static final String XML_DTD_NS_URI = "http://www.w3.org/TR/REC-xml";
+ 
+   /**
+    * The RELAX NG Namespace URI.
+    * @see http://relaxng.org/spec-20011203.html
+    */
+   public static final String RELAXNG_NS_URI =
+ 	 	"http://relaxng.org/ns/structure/1.0";
+ 
+   /**
+    * DOM feature for secure processing.
+    */
+   public static final String FEATURE_SECURE_PROCESSING =
+ 	 	"http://javax.xml.XMLConstants/feature/secure-processing";
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/datatype/DatatypeConfigurationException.java gcc-4.0.0/libjava/javax/xml/datatype/DatatypeConfigurationException.java
*** gcc-3.4.3/libjava/javax/xml/datatype/DatatypeConfigurationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/datatype/DatatypeConfigurationException.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,70 ----
+ /* DatatypeConfigurationException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.datatype;
+ 
+ /**
+  * A serious error during datatype configuration.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public class DatatypeConfigurationException
+   extends Exception
+ {
+ 
+   public DatatypeConfigurationException()
+   {
+     super();
+   }
+ 
+   public DatatypeConfigurationException(String message)
+   {
+     super(message);
+   }
+ 
+   public DatatypeConfigurationException(String message, Throwable cause)
+   {
+     super(message, cause);
+   }
+   
+   public DatatypeConfigurationException(Throwable cause)
+   {
+     super(cause);
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/datatype/DatatypeConstants.java gcc-4.0.0/libjava/javax/xml/datatype/DatatypeConstants.java
*** gcc-3.4.3/libjava/javax/xml/datatype/DatatypeConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/datatype/DatatypeConstants.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,259 ----
+ /* DatatypeConstants.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.datatype;
+ 
+ import javax.xml.namespace.QName;
+ 
+ /**
+  * Basic data type constants.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public final class DatatypeConstants
+ {
+ 
+   /**
+    * Typesafe enumerated class representing the six fields of the
+    * <a href='Duration.html'>Duration</a> class.
+    */
+   public static final class Field
+   {
+ 
+     final int id;
+     final String name;
+ 
+     Field(int id, String name)
+     {
+       this.id = id;
+       this.name = name;
+     }
+ 
+     public int getId()
+     {
+       return id;
+     }
+     
+     public String toString()
+     {
+       return name;
+     }
+     
+   }
+ 
+   /**
+    * Value for January.
+    */
+   public static final int JANUARY = 1;
+   
+   /**
+    * Value for February.
+    */
+   public static final int FEBRUARY = 2;
+   
+   /**
+    * Value for March.
+    */
+   public static final int MARCH = 3;
+   
+   /**
+    * Value for April.
+    */
+   public static final int APRIL = 4;
+   
+   /**
+    * Value for May.
+    */
+   public static final int MAY = 5;
+   
+   /**
+    * Value for June.
+    */
+   public static final int JUNE = 6;
+   
+   /**
+    * Value for July.
+    */
+   public static final int JULY = 7;
+   
+   /**
+    * Value for August.
+    */
+   public static final int AUGUST = 8;
+   
+   /**
+    * Value for September.
+    */
+   public static final int SEPTEMBER = 9;
+   
+   /**
+    * Value for October.
+    */
+   public static final int OCTOBER = 10;
+   
+   /**
+    * Value for November.
+    */
+   public static final int NOVEMBER = 11;
+   
+   /**
+    * Value for December.
+    */
+   public static final int DECEMBER = 12;
+   
+   /**
+    * Comparison result.
+    */
+   public static final int LESSER = -1;
+   
+   /**
+    * Comparison result.
+    */
+   public static final int EQUAL = 0;
+   
+   /**
+    * Comparison result.
+    */
+   public static final int GREATER = 1;
+   
+   /**
+    * Comparison result.
+    */
+   public static final int INDETERMINATE = 2;
+   
+   /**
+    * Comparison result.
+    */
+   public static final int FIELD_UNDEFINED = -2147483648;
+ 
+   /**
+    * Constant that represents the years field.
+    */
+   public static final Field YEARS = new Field(1, "YEARS");
+   
+   /**
+    * Constant that represents the months field.
+    */
+   public static final Field MONTHS = new Field(2, "MONTHS");
+   
+   /**
+    * Constant that represents the days field.
+    */
+   public static final Field DAYS = new Field(3, "DAYS");
+   
+   /**
+    * Constant that represents the hours field.
+    */
+   public static final Field HOURS = new Field(4, "HOURS");
+   
+   /**
+    * Constant that represents the minutes field.
+    */
+   public static final Field MINUTES = new Field(5, "MINUTES");
+   
+   /**
+    * Constant that represents the seconds field.
+    */
+   public static final Field SECONDS = new Field(6, "SECONDS");
+ 
+   /**
+    * The qualified-name for the <code>dateTime</code> data type.
+    */
+   public static final QName DATETIME = new QName ("http://www.w3.org/2001/XMLSchema#dateTime", "");
+   
+   /**
+    * The qualified-name for the <code>time</code> data type.
+    */
+   public static final QName TIME = new QName ("http://www.w3.org/2001/XMLSchema#time", "");
+   
+   /**
+    * The qualified-name for the <code>date</code> data type.
+    */
+   public static final QName DATE = new QName ("http://www.w3.org/2001/XMLSchema#date", "");
+   
+   /**
+    * The qualified-name for the <code>gYearMonth</code> data type.
+    */
+   public static final QName GYEARMONTH = new QName ("http://www.w3.org/2001/XMLSchema#gYearMonth", "");
+   
+   /**
+    * The qualified-name for the <code>gMonthDay</code> data type.
+    */
+   public static final QName GMONTHDAY = new QName ("http://www.w3.org/2001/XMLSchema#gMonthDay", "");
+   
+   /**
+    * The qualified-name for the <code>gYear</code> data type.
+    */
+   public static final QName GYEAR = new QName ("http://www.w3.org/2001/XMLSchema#gYear", "");
+   
+   /**
+    * The qualified-name for the <code>gMonth</code> data type.
+    */
+   public static final QName GMONTH = new QName ("http://www.w3.org/2001/XMLSchema#gMonth", "");
+   
+   /**
+    * The qualified-name for the <code>gDay</code> data type.
+    */
+   public static final QName GDAY = new QName ("http://www.w3.org/2001/XMLSchema#gDay", "");
+   
+   /**
+    * The qualified-name for the <code>duration</code> data type.
+    */
+   public static final QName DURATION = new QName ("http://www.w3.org/2001/XMLSchema#duration", "");
+   
+   /**
+    * The qualified-name for the <code>dayTimeDuration</code> data type.
+    */
+   public static final QName DURATION_DAYTIME = new QName ("http://www.w3.org/2001/XMLSchema#dayTimeDuration", "");
+   
+   /**
+    * The qualified-name for the <code>yearMonthDuration</code> data type.
+    */
+   public static final QName DURATION_YEARMONTH = new QName ("http://www.w3.org/2001/XMLSchema#yearMonthDuration", "");
+ 
+   /**
+    * XML Schema maximum timezone offset, in minutes.
+    */
+   public static final int MAX_TIMEZONE_OFFSET = -840;
+   
+   /**
+    * XML Schema minimum timezone offset, in minutes.
+    */
+   public static final int MIN_TIMEZONE_OFFSET = 840;
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/datatype/DatatypeFactory.java gcc-4.0.0/libjava/javax/xml/datatype/DatatypeFactory.java
*** gcc-3.4.3/libjava/javax/xml/datatype/DatatypeFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/datatype/DatatypeFactory.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,401 ----
+ /* DatatypeFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.datatype;
+ 
+ import java.math.BigDecimal;
+ import java.math.BigInteger;
+ import java.util.GregorianCalendar;
+ 
+ /**
+  * Factory class to create new datatype objects mapping XML to and from Java
+  * objects.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public abstract class DatatypeFactory
+ {
+ 
+   /**
+    * JAXP 1.3 default property name.
+    */
+   public static final String DATATYPEFACTORY_PROPERTY = "javax.xml.datatype.DatatypeFactory";
+ 
+   /**
+    * JAXP 1.3 default implementation class name.
+    */
+   public static final java.lang.String DATATYPEFACTORY_IMPLEMENTATION_CLASS = "gnu.xml.datatype.JAXPDatatypeFactory";
+ 
+   protected DatatypeFactory()
+   {
+   }
+ 
+   /**
+    * Returns a new factory instance.
+    */
+   public static DatatypeFactory newInstance()
+     throws DatatypeConfigurationException
+   {
+     try
+       {
+         Class t = Class.forName(DATATYPEFACTORY_IMPLEMENTATION_CLASS);
+         return (DatatypeFactory) t.newInstance();
+       }
+     catch (Exception e)
+       {
+         throw new DatatypeConfigurationException (e);
+       }
+   }
+ 
+   /**
+    * Returns a new duration from its string representation.
+    * @param lexicalRepresentation the lexical representation of the
+    * duration, as specified in XML Schema 1.0 section 3.2.6.1.
+    */
+   public abstract Duration newDuration(String lexicalRepresentation);
+ 
+   /**
+    * Returns a new duration.
+    * @param durationInMilliseconds the duration in milliseconds
+    */
+   public abstract Duration newDuration(long durationInMilliSeconds);
+ 
+   /**
+    * Returns a new duration by specifying the individual components.
+    * @param isPositive whether the duration is positive
+    * @param years the number of years
+    * @param months the number of months
+    * @param days the number of days
+    * @param hours the number of hours
+    * @param minutes th number of minutes
+    * @param seconds the number of seconds
+    */
+   public abstract Duration newDuration(boolean isPositive,
+                                        BigInteger years,
+                                        BigInteger months,
+                                        BigInteger days,
+                                        BigInteger hours,
+                                        BigInteger minutes,
+                                        BigDecimal seconds);
+ 
+   /**
+    * Returns a new duration by specifying the individual components.
+    * @param isPositive whether the duration is positive
+    * @param years the number of years
+    * @param months the number of months
+    * @param days the number of days
+    * @param hours the number of hours
+    * @param minutes th number of minutes
+    * @param seconds the number of seconds
+    */
+   public Duration newDuration(boolean isPositive,
+                               int years,
+                               int months,
+                               int days,
+                               int hours,
+                               int minutes,
+                               int seconds)
+   {
+     return newDuration(isPositive,
+                        BigInteger.valueOf((long) years),
+                        BigInteger.valueOf((long) months),
+                        BigInteger.valueOf((long) days),
+                        BigInteger.valueOf((long) hours),
+                        BigInteger.valueOf((long) minutes),
+                        BigDecimal.valueOf((long) seconds));
+   }
+ 
+   /**
+    * Returns a new dayTimeDuration from its string representation.
+    * @param lexicalRepresentation the lexical representation of the
+    * duration, as specified in XML Schema 1.0 section 3.2.6.1.
+    */
+   public Duration newDurationDayTime(String lexicalRepresentation)
+   {
+     return newDuration(lexicalRepresentation);
+   }
+ 
+   /**
+    * Returns a new dayTimeDuration.
+    * @param durationInMilliseconds the duration in milliseconds
+    */
+   public Duration newDurationDayTime(long durationInMilliseconds)
+   {
+     // TODO xmlSchemaType
+     return newDuration(durationInMilliseconds);
+   }
+ 
+   /**
+    * Returns a new dayTimeDuration by specifying the individual components.
+    * @param isPositive whether the duration is positive
+    * @param days the number of days
+    * @param hours the number of hours
+    * @param minutes th number of minutes
+    * @param seconds the number of seconds
+    */
+   public Duration newDurationDayTime(boolean isPositive,
+                                      BigInteger days,
+                                      BigInteger hours,
+                                      BigInteger minutes,
+                                      BigDecimal seconds)
+   {
+     return newDuration(isPositive,
+                        null,
+                        null,
+                        days,
+                        hours,
+                        minutes,
+                        seconds);
+   }
+ 
+   /**
+    * Returns a new dayTimeDuration by specifying the individual components.
+    * @param isPositive whether the duration is positive
+    * @param days the number of days
+    * @param hours the number of hours
+    * @param minutes th number of minutes
+    * @param seconds the number of seconds
+    */
+   public Duration newDurationDayTime(boolean isPositive,
+                                      int days,
+                                      int hours,
+                                      int minutes,
+                                      int seconds)
+   {
+     return newDuration(isPositive,
+                        null,
+                        null,
+                        BigInteger.valueOf((long) days),
+                        BigInteger.valueOf((long) hours),
+                        BigInteger.valueOf((long) minutes),
+                        BigDecimal.valueOf((long) seconds));
+   }
+ 
+   /**
+    * Returns a new yearMonthDuration from its string representation.
+    * @param lexicalRepresentation the lexical representation of the
+    * duration, as specified in XML Schema 1.0 section 3.2.6.1.
+    */
+   public Duration newDurationYearMonth(String lexicalRepresentation)
+   {
+     return newDuration(lexicalRepresentation);
+   }
+ 
+   /**
+    * Returns a new yearMonthDuration.
+    * @param durationInMilliseconds the duration in milliseconds
+    */
+   public Duration newDurationYearMonth(long durationInMilliseconds)
+   {
+     // TODO xmlSchemaType
+     return newDuration(durationInMilliseconds);
+   }
+ 
+   /**
+    * Returns a new yearMonthDuration by specifying the individual components.
+    * @param isPositive whether the duration is positive
+    * @param years the number of years
+    * @param months the number of months
+    * @param days the number of days
+    * @param hours the number of hours
+    * @param minutes th number of minutes
+    * @param seconds the number of seconds
+    */
+   public Duration newDurationYearMonth(boolean isPositive,
+                                        BigInteger years,
+                                        BigInteger months)
+   {
+     return newDuration(isPositive,
+                        years,
+                        months,
+                        null,
+                        null,
+                        null,
+                        null);
+   }
+ 
+   /**
+    * Returns a new yearMonthDuration by specifying the individual components.
+    * @param isPositive whether the duration is positive
+    * @param years the number of years
+    * @param months the number of months
+    * @param days the number of days
+    * @param hours the number of hours
+    * @param minutes th number of minutes
+    * @param seconds the number of seconds
+    */
+   public Duration newDurationYearMonth(boolean isPositive,
+                                        int years,
+                                        int months)
+   {
+     return newDuration(isPositive,
+                        BigInteger.valueOf((long) years),
+                        BigInteger.valueOf((long) months),
+                        null,
+                        null,
+                        null,
+                        null);
+   }
+ 
+   /**
+    * Returns a new XMLGregorianCalendar with no fields initialized.
+    */
+   public abstract XMLGregorianCalendar newXMLGregorianCalendar();
+ 
+   /**
+    * Returns a new XMLGregorianCalendar from a string representation.
+    * @param lexicalRepresentation the lexical representation as specified in
+    * XML Schema 1.0 Part 2, section 3.2.[7-14].1.
+    */
+   public abstract XMLGregorianCalendar newXMLGregorianCalendar(String lexicalRepresentation);
+   
+   /**
+    * Returns a new XMLGregorianCalendar based on the specified Gregorian
+    * calendar.
+    */
+   public abstract XMLGregorianCalendar newXMLGregorianCalendar(GregorianCalendar cal);
+ 
+   /**
+    * Returns a new XMLGregorianCalendar with the specified components.
+    */
+   public abstract XMLGregorianCalendar newXMLGregorianCalendar(BigInteger year,
+                                                                int month,
+                                                                int day,
+                                                                int hour,
+                                                                int minute,
+                                                                int second,
+                                                                BigDecimal fractionalSecond,
+                                                                int timezone);
+ 
+   /**
+    * Returns a new XMLGregorianCalendar with the specified components.
+    */
+   public XMLGregorianCalendar newXMLGregorianCalendar(int year,
+                                                       int month,
+                                                       int day,
+                                                       int hour,
+                                                       int minute,
+                                                       int second,
+                                                       int millisecond,
+                                                       int timezone)
+   {
+     return newXMLGregorianCalendar(BigInteger.valueOf((long) year),
+                                    month,
+                                    day,
+                                    hour,
+                                    minute,
+                                    second,
+                                    new BigDecimal(((double) millisecond) / 1000.0),
+                                    timezone);
+   }
+ 
+   /**
+    * Returns a new XMLGregorianCalendar with the specified components.
+    */
+   public XMLGregorianCalendar newXMLGregorianCalendarDate(int year,
+                                                           int month,
+                                                           int day,
+                                                           int timezone)
+   {
+     return newXMLGregorianCalendar(BigInteger.valueOf((long) year),
+                                    month,
+                                    day,
+                                    DatatypeConstants.FIELD_UNDEFINED,
+                                    DatatypeConstants.FIELD_UNDEFINED,
+                                    DatatypeConstants.FIELD_UNDEFINED,
+                                    null,
+                                    timezone);
+   }
+ 
+   /**
+    * Returns a new XMLGregorianCalendar with the specified components.
+    */
+   public XMLGregorianCalendar newXMLGregorianCalendarTime(int hours,
+                                                           int minutes,
+                                                           int seconds,
+                                                           int timezone)
+   {
+     return newXMLGregorianCalendar(null,
+                                    DatatypeConstants.FIELD_UNDEFINED,
+                                    DatatypeConstants.FIELD_UNDEFINED,
+                                    hours,
+                                    minutes,
+                                    seconds,
+                                    null,
+                                    timezone);
+   }
+ 
+   /**
+    * Returns a new XMLGregorianCalendar with the specified components.
+    */
+   public XMLGregorianCalendar newXMLGregorianCalendarTime(int hours,
+                                                           int minutes,
+                                                           int seconds,
+                                                           BigDecimal fractionalSecond,
+                                                           int timezone)
+   {
+     return newXMLGregorianCalendar(null,
+                                    DatatypeConstants.FIELD_UNDEFINED,
+                                    DatatypeConstants.FIELD_UNDEFINED,
+                                    hours,
+                                    minutes,
+                                    seconds,
+                                    fractionalSecond,
+                                    timezone);
+   }
+ 
+   /**
+    * Returns a new XMLGregorianCalendar with the specified components.
+    */
+   public XMLGregorianCalendar newXMLGregorianCalendarTime(int hours,
+                                                           int minutes,
+                                                           int seconds,
+                                                           int milliseconds,
+                                                           int timezone)
+   {
+     return newXMLGregorianCalendar(null,
+                                    DatatypeConstants.FIELD_UNDEFINED,
+                                    DatatypeConstants.FIELD_UNDEFINED,
+                                    hours,
+                                    minutes,
+                                    seconds,
+                                    new BigDecimal(((double) milliseconds) / 1000.0),
+                                    timezone);
+   }
+     
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/datatype/Duration.java gcc-4.0.0/libjava/javax/xml/datatype/Duration.java
*** gcc-3.4.3/libjava/javax/xml/datatype/Duration.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/datatype/Duration.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,295 ----
+ /* Duration.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.datatype;
+ 
+ import java.math.BigDecimal;
+ import java.util.Calendar;
+ import java.util.Date;
+ import java.util.GregorianCalendar;
+ import javax.xml.datatype.DatatypeConstants;
+ import javax.xml.namespace.QName;
+ 
+ /**
+  * An immutable time space as specified in XML Schema 1.0.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public abstract class Duration
+ {
+ 
+   /**
+    * Returns the name of the XML Schema data type this value maps to.
+    */
+   public QName getXMLSchemaType()
+   {
+     int state = 0;
+     state |= isSet(DatatypeConstants.YEARS) ? 32 : 0;
+     state |= isSet(DatatypeConstants.MONTHS) ? 16 : 0;
+     state |= isSet(DatatypeConstants.DAYS) ? 8 : 0;
+     state |= isSet(DatatypeConstants.HOURS) ? 4 : 0;
+     state |= isSet(DatatypeConstants.MINUTES) ? 2 : 0;
+     state |= isSet(DatatypeConstants.SECONDS) ? 1 : 0;
+     switch (state)
+       {
+       case 63:
+         return DatatypeConstants.DURATION;
+       case 15:
+         return DatatypeConstants.DURATION_DAYTIME;
+       case 48:
+         return DatatypeConstants.DURATION_YEARMONTH;
+       default:
+         throw new IllegalStateException();
+       }
+   }
+ 
+   /**
+    * Returns the sign of this value.
+    */
+   public abstract int getSign();
+ 
+   /**
+    * Returns the years in this duration as an int, or 0 if not present.
+    */
+   public int getYears()
+   {
+     Number val = getField(DatatypeConstants.YEARS);
+     return (val == null) ? 0 : val.intValue();
+   }
+   
+   /**
+    * Returns the months in this duration as an int, or 0 if not present.
+    */
+   public int getMonths()
+   {
+     Number val = getField(DatatypeConstants.MONTHS);
+     return (val == null) ? 0 : val.intValue();
+   }
+   
+   /**
+    * Returns the days in this duration as an int, or 0 if not present.
+    */
+   public int getDays()
+   {
+     Number val = getField(DatatypeConstants.DAYS);
+     return (val == null) ? 0 : val.intValue();
+   }
+   
+   /**
+    * Returns the hours in this duration as an int, or 0 if not present.
+    */
+   public int getHours()
+   {
+     Number val = getField(DatatypeConstants.HOURS);
+     return (val == null) ? 0 : val.intValue();
+   }
+   
+   /**
+    * Returns the minutes in this duration as an int, or 0 if not present.
+    */
+   public int getMinutes()
+   {
+     Number val = getField(DatatypeConstants.MINUTES);
+     return (val == null) ? 0 : val.intValue();
+   }
+   
+   /**
+    * Returns the seconds in this duration as an int, or 0 if not present.
+    */
+   public int getSeconds()
+   {
+     Number val = getField(DatatypeConstants.SECONDS);
+     return (val == null) ? 0 : val.intValue();
+   }
+ 
+   /**
+    * Returns the duration length in milliseconds.
+    * Because the length of a month or year may vary depending on the year,
+    * the <code>startInstant</code> parameter is used to specify the duration
+    * offset.
+    */
+   public long getTimeInMillis(Calendar startInstant)
+   {
+     Calendar cal = (Calendar) startInstant.clone();
+     long t1 = cal.getTimeInMillis();
+     addTo(cal);
+     long t2 = cal.getTimeInMillis();
+     return t2 - t1;
+   }
+ 
+   /**
+    * Returns the duration length in milliseconds.
+    * Because the length of a month or year may vary depending on the year,
+    * the <code>startInstant</code> parameter is used to specify the duration
+    * offset.
+    */
+   public long getTimeInMillis(Date startInstant)
+   {
+     Date date = (Date) startInstant.clone();
+     long t1 = date.getTime();
+     addTo(date);
+     long t2 = date.getTime();
+     return t2 - t1;
+   }
+ 
+   /**
+    * Returns the value of the specified field, or <code>null</code> if the
+    * field is undefined.
+    */
+   public abstract Number getField(DatatypeConstants.Field field);
+ 
+   /**
+    * Indicates whether the specified field is set.
+    */
+   public abstract boolean isSet(DatatypeConstants.Field field);
+ 
+   /**
+    * Returns the result of adding the specified duration to this duration.
+    */
+   public abstract Duration add(Duration rhs);
+ 
+   /**
+    * Adds this duration to the specified calendar.
+    */
+   public abstract void addTo(Calendar calendar);
+   /*{
+     switch (getSign())
+       {
+       case -1:
+         calendar.add(Calendar.YEAR, -getYears());
+         calendar.add(Calendar.MONTH, -getMonths());
+         calendar.add(Calendar.DATE, -getDays());
+         calendar.add(Calendar.HOUR, -getHours());
+         calendar.add(Calendar.MINUTE, -getMinutes());
+         calendar.add(Calendar.SECOND, -getSeconds());
+         break;
+       case 1:
+         calendar.add(Calendar.YEAR, getYears());
+         calendar.add(Calendar.MONTH, getMonths());
+         calendar.add(Calendar.DATE, getDays());
+         calendar.add(Calendar.HOUR, getHours());
+         calendar.add(Calendar.MINUTE, getMinutes());
+         calendar.add(Calendar.SECOND, getSeconds());
+       }
+   }*/
+   
+   /**
+    * Adds this duration to the specified date.
+    */
+   public void addTo(Date date)
+   {
+     Calendar calendar = new GregorianCalendar();
+     calendar.setTimeInMillis(date.getTime());
+     addTo(calendar);
+     date.setTime(calendar.getTimeInMillis());
+   }
+ 
+   /**
+    * Returns the result of subtracting the given duration from this
+    * duration.
+    */
+   public Duration subtract(Duration rhs)
+   {
+     // TODO
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Returns the result of multiplying this duration by the given factor.
+    */
+   public Duration multiply(int factor)
+   {
+     return multiply(BigDecimal.valueOf((long) factor));
+   }
+ 
+   /**
+    * Returns the result of multiplying this duration by the given factor.
+    */
+   public Duration multiply(BigDecimal factor)
+   {
+     // TODO
+     throw new UnsupportedOperationException();
+   }
+ 
+   /**
+    * Returns the unary negative of this duration.
+    */
+   public abstract Duration negate();
+   
+   /**
+    * Converts the years and months fields into the days field using a
+    * specific time instant as the reference point.
+    */
+   public abstract Duration normalizeWith(Calendar startTimeInstant);
+ 
+   /**
+    * Partial order relation comparison with this duration, in accordance
+    * with XML Schema 1.0 Part 2, Section 3.2.7.6.2.
+    */
+   public abstract int compare(Duration duration);
+ 
+   public boolean isLongerThan(Duration duration)
+   {
+     // TODO
+     throw new UnsupportedOperationException();
+   }
+ 
+   public boolean isShorterThan(Duration duration)
+   {
+     // TODO
+     throw new UnsupportedOperationException();
+   }
+ 
+   public boolean equals(java.lang.Object duration)
+   {
+     // TODO
+     throw new UnsupportedOperationException();
+   }
+   
+   public abstract int hashCode();
+ 
+   /**
+    * Returns the lexical representation of this duration.
+    */
+   public String toString()
+   {
+     // TODO
+     throw new UnsupportedOperationException();
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/datatype/XMLGregorianCalendar.java gcc-4.0.0/libjava/javax/xml/datatype/XMLGregorianCalendar.java
*** gcc-3.4.3/libjava/javax/xml/datatype/XMLGregorianCalendar.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/datatype/XMLGregorianCalendar.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,217 ----
+ /* XMLGregorianCalendar.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.datatype;
+ 
+ import java.math.BigDecimal;
+ import java.math.BigInteger;
+ import java.util.GregorianCalendar;
+ import java.util.Locale;
+ import java.util.TimeZone;
+ import javax.xml.namespace.QName;
+ 
+ /**
+  * An XML Schema 1.0 date/time data type.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public abstract class XMLGregorianCalendar
+   implements Cloneable
+ {
+ 
+   /**
+    * Resets all fields to undefined.
+    */
+   public abstract void clear();
+ 
+   /**
+    * Resets all fields to their original values.
+    */
+   public abstract void reset();
+ 
+   public abstract void setYear(BigInteger year);
+ 
+   public abstract void setYear(int year);
+ 
+   public abstract void setMonth(int month);
+ 
+   public abstract void setDay(int day);
+ 
+   public abstract void setTimezone(int offset);
+ 
+   public void setTime(int hour, int minute, int second)
+   {
+     setHour(hour);
+     setMinute(minute);
+     setSecond(second);
+   }
+ 
+   public abstract void setHour(int hour);
+ 
+   public abstract void setMinute(int minute);
+ 
+   public abstract void setSecond(int second);
+ 
+   public abstract void setMillisecond(int millisecond);
+ 
+   public abstract void setFractionalSecond(BigDecimal fractional);
+ 
+   public void setTime(int hour, int minute, int second, BigDecimal fractional)
+   {
+     setHour(hour);
+     setMinute(minute);
+     setSecond(second);
+     setFractionalSecond(fractional);
+   }
+ 
+   public void setTime(int hour, int minute, int second, int millisecond)
+   {
+     setHour(hour);
+     setMinute(minute);
+     setSecond(second);
+     setMillisecond(millisecond);
+   }
+ 
+   public abstract BigInteger getEon();
+ 
+   public abstract int getYear();
+ 
+   public abstract BigInteger getEonAndYear();
+ 
+   public abstract int getMonth();
+ 
+   public abstract int getDay();
+ 
+   public abstract int getTimezone();
+ 
+   public abstract int getHour();
+ 
+   public abstract int getMinute();
+ 
+   public abstract int getSecond();
+ 
+   public int getMillisecond()
+   {
+     BigDecimal factor = BigDecimal.valueOf(1000L);
+     BigDecimal val = getFractionalSecond().multiply(factor);
+     return val.intValue();
+   }
+ 
+   public abstract BigDecimal getFractionalSecond();
+ 
+   public abstract int compare(XMLGregorianCalendar xmlGregorianCalendar);
+ 
+   public abstract XMLGregorianCalendar normalize();
+ 
+   public boolean equals(Object obj)
+   {
+     if (obj instanceof XMLGregorianCalendar)
+       {
+         XMLGregorianCalendar xgc = (XMLGregorianCalendar) obj;
+         BigInteger y1 = getEonAndYear();
+         BigInteger y2 = xgc.getEonAndYear();
+         BigDecimal f1 = getFractionalSecond();
+         BigDecimal f2 = xgc.getFractionalSecond();
+         return ((y1 == null && y2 == null) || (y1 != null && y1.equals(y2))) &&
+           getMonth() == xgc.getMonth() &&
+           getDay() == xgc.getDay() &&
+           getTimezone() == xgc.getTimezone() &&
+           getHour() == xgc.getHour() &&
+           getMinute() == xgc.getMinute() &&
+           getSecond() == xgc.getSecond() &&
+           ((f1 == null && f2 == null) || (f1 != null && f1.equals(f2)));
+       }
+     return false;
+   }
+ 
+   public int hashCode()
+   {
+     int hash = 0;
+     BigInteger y = getEonAndYear();
+     BigDecimal f = getFractionalSecond();
+     if (y != null)
+       {
+         hash *= 31 + y.hashCode();
+       }
+     hash *= 31 + getMonth();
+     hash *= 31 + getDay();
+     hash *= 31 + getTimezone();
+     hash *= 31 + getHour();
+     hash *= 31 + getMinute();
+     hash *= 31 + getSecond();
+     if (f != null)
+       {
+         hash *= 31 + f.hashCode();
+       }
+     return hash;
+   }
+ 
+   /**
+    * Returns the XML Schema lexical representation of this calendar.
+    */
+   public abstract String toXMLFormat();
+ 
+   public abstract QName getXMLSchemaType();
+ 
+   public String toString()
+   {
+     return toXMLFormat();
+   }
+ 
+   /**
+    * Determines the validity of this calendar by
+    * <code>getXMLSchemaType</code> constraints.
+    */
+   public abstract boolean isValid();
+ 
+   /**
+    * Adds the specified duration to this calendar.
+    */
+   public abstract void add(Duration duration);
+ 
+   public abstract GregorianCalendar toGregorianCalendar();
+ 
+   public abstract GregorianCalendar toGregorianCalendar(TimeZone timezone,
+                                                         Locale locale,
+                                                         XMLGregorianCalendar defaults);
+ 
+   public abstract TimeZone getTimeZone(int defaultZoneoffset);
+ 
+   public abstract Object clone();
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/datatype/package.html gcc-4.0.0/libjava/javax/xml/datatype/package.html
*** gcc-3.4.3/libjava/javax/xml/datatype/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/datatype/package.html	Wed Feb  2 00:42:13 2005
***************
*** 0 ****
--- 1,57 ----
+ <body>
+ 
+ <div>
+ This package provides type mappings between XML and Java data types.
+ </div>
+ 
+ <table summary='XML Schema type mappings'>
+   <tr>
+     <th>XML Schema data type</th><th>Java data type</th>
+   </tr>
+   <tr>
+     <td>xs:date</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td>
+   </tr>
+   <tr>
+     <td>xs:dateTime</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td>
+   </tr>
+   <tr>
+     <td>xs:duration</td><td><a href='Duration.html'>Duration</a></td>
+   </tr>
+   <tr>
+     <td>xs:gDay</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td>
+   </tr>
+   <tr>
+     <td>xs:gMonth</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td>
+   </tr>
+   <tr>
+     <td>xs:gMonthDay</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td>
+   </tr>
+   <tr>
+     <td>xs:gYear</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td>
+   </tr>
+   <tr>
+     <td>xs:gYearMonth</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td>
+   </tr>
+   <tr>
+     <td>xs:time</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td>
+   </tr>
+ </table>
+ 
+ <table summary='XPath 2.0 data type mappings'>
+   <tr>
+     <th>XPath 2.0 data type</th><th>Java data type</th>
+   </tr>
+   <tr>
+     <td>xdt:dayTimeDuration</td><td><a href='Duration.html'>Duration</a></td>
+   </tr>
+   <tr>
+     <td>xdt:yearMonthDuration</td><td><a href='Duration.html'>Duration</a></td>
+   </tr>
+ </table>
+ 
+ <div>
+ Other XML Schema data types are considered to have a <q>natural</q> mapping to
+ Java types, which are defined by the Java Architecture for XML Binding (JAXB).
+ </div>
+ 
+ </body>
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/namespace/NamespaceContext.java gcc-4.0.0/libjava/javax/xml/namespace/NamespaceContext.java
*** gcc-3.4.3/libjava/javax/xml/namespace/NamespaceContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/namespace/NamespaceContext.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,66 ----
+ /* NamespaceContext.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.namespace;
+ 
+ import java.util.Iterator;
+ 
+ /**
+  * Interface by which namespace properties are made available.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public interface NamespaceContext
+ {
+ 
+   /**
+    * Returns the namespace URI currently bound to the given prefix.
+    */
+   public String getNamespaceURI(String prefix);
+ 
+   /**
+    * Returns the prefix currently bound to the given namespace URI.
+    */
+   public String getPrefix(String namespaceURI);
+ 
+   /**
+    * Returns all the prefixes currently bound to the given namespace URI.
+    */
+   public Iterator getPrefixes(String namespaceURI);
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/namespace/QName.java gcc-4.0.0/libjava/javax/xml/namespace/QName.java
*** gcc-3.4.3/libjava/javax/xml/namespace/QName.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/namespace/QName.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,160 ----
+ /* QName.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.namespace;
+ 
+ import javax.xml.XMLConstants;
+ 
+ /**
+  * An XML
+  * <a href='http://www.w3.org/TR/REC-xml-names/#ns-qualnames'>qualified name</a>.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public class QName
+ {
+ 
+   private final String namespaceURI;
+   private final String localPart;
+   private final String prefix;
+   private final String qName;
+ 
+   public QName(String namespaceURI, String localPart)
+   {
+     this(namespaceURI, localPart, null);
+   }
+ 
+   public QName(String namespaceURI, String localPart, String prefix)
+   {
+     if (namespaceURI == null)
+       {
+         namespaceURI = XMLConstants.NULL_NS_URI;
+       }
+     if (localPart == null)
+       {
+         throw new IllegalArgumentException();
+       }
+     if (prefix == null)
+       {
+         prefix = XMLConstants.DEFAULT_NS_PREFIX;
+       }
+     this.namespaceURI = namespaceURI;
+     this.localPart = localPart;
+     this.prefix = prefix;
+     
+     StringBuffer buf = new StringBuffer();
+     if (namespaceURI != null && namespaceURI.length() > 0)
+       {
+         buf.append('{');
+         buf.append(namespaceURI);
+         buf.append('}');
+       }
+     if (prefix != null && prefix.length() > 0)
+       {
+         buf.append(prefix);
+         buf.append(':');
+       }
+     buf.append(localPart);
+     qName = buf.toString();
+   }
+ 
+   public QName(String localPart)
+   {
+     this(null, localPart, null);
+   }
+ 
+   public String getNamespaceURI()
+   {
+     return namespaceURI;
+   }
+ 
+   public String getLocalPart()
+   {
+     return localPart;
+   }
+ 
+   public String getPrefix()
+   {
+     return prefix;
+   }
+ 
+   public boolean equals(Object obj)
+   {
+     if (obj instanceof QName)
+       {
+         QName qname = (QName) obj;
+         return qname.getLocalPart().equals(localPart) &&
+           qname.getNamespaceURI().equals(namespaceURI);
+       }
+     return false;
+   }
+ 
+   public final int hashCode()
+   {
+     return qName.hashCode();
+   }
+ 
+   public String toString()
+   {
+     return qName;
+   }
+ 
+   public static QName valueOf(String qNameAsString)
+   {
+     String namespaceUri = "", prefix = null;
+     int start = qNameAsString.indexOf('{');
+     int end = qNameAsString.indexOf('}');
+     if (start != -1)
+       {
+         if (end < start)
+           {
+             throw new IllegalArgumentException(qNameAsString);
+           }
+         namespaceUri = qNameAsString.substring(start + 1, end);
+         qNameAsString = qNameAsString.substring(end + 1);
+       }
+     start = qNameAsString.indexOf(':');
+     if (start != -1)
+       {
+         prefix = qNameAsString.substring(0, start);
+         qNameAsString = qNameAsString.substring(start + 1);
+       }
+     return new QName(namespaceUri, qNameAsString, prefix);
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/namespace/package.html gcc-4.0.0/libjava/javax/xml/namespace/package.html
*** gcc-3.4.3/libjava/javax/xml/namespace/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/namespace/package.html	Wed Feb  2 00:42:14 2005
***************
*** 0 ****
--- 1,9 ----
+ <html>
+ <body>
+ 
+ <div>
+ <a href='http://www.w3.org/TR/REC-xml-names'>XML Namespace</a> processing.
+ </div>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/parsers/DocumentBuilder.java gcc-4.0.0/libjava/javax/xml/parsers/DocumentBuilder.java
*** gcc-3.4.3/libjava/javax/xml/parsers/DocumentBuilder.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/parsers/DocumentBuilder.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,203 ----
+ /* DocumentBuilder.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.parsers;
+ 
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import javax.xml.validation.Schema;
+ import org.w3c.dom.Document;
+ import org.w3c.dom.DOMImplementation;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ 
+ /**
+  * Convenience class for parsing an XML document into a W3C DOM object
+  * graph.
+  * Instances of this class are <em>not</em> guaranteed to be thread safe.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public abstract class DocumentBuilder
+ {
+ 
+   protected DocumentBuilder()
+   {
+   }
+ 
+   /**
+    * Parse the specified input stream and return a DOM Document.
+    * Prefer the version of this method that specifies a system ID, in order
+    * to resolve external references correctly.
+    * @param is an XML input stream
+    * @exception IllegalArgumentException if the input stream is null
+    */
+   public Document parse(InputStream is) 
+     throws SAXException, IOException
+   {
+     if (is == null)
+       {
+         throw new IllegalArgumentException("input stream is null");
+       }
+     return parse(new InputSource(is));
+   }
+ 
+   /**
+    * Parse the specified input stream and return a DOM Document.
+    * @param is an XML input stream
+    * @param systemId the system ID of the XML document
+    * @exception IllegalArgumentException if the input stream is null
+    */
+   public Document parse(InputStream is, String systemId) 
+     throws SAXException, IOException
+   {
+     if (is == null)
+       {
+         throw new IllegalArgumentException("input stream is null");
+       }
+     InputSource  source = new InputSource(is);
+     source.setSystemId(systemId);
+     return parse(source);
+   }
+ 
+   /**
+    * Parse the content of the specified URI and return a DOM Document.
+    * @param uri an XML system ID
+    * @exception IllegalArgumentException if the URI is null
+    */
+   public Document parse(String uri) 
+     throws SAXException, IOException
+   {
+     if (uri == null)
+       {
+         throw new IllegalArgumentException("URI is null");
+       }
+     return parse(new InputSource(uri));
+   }
+ 
+   /**
+    * Parse the specified file and return a DOM Document.
+    * @param f the XML file
+    * @exception IllegalArgumentException if the file is null
+    */
+   public Document parse(File f) 
+     throws SAXException, IOException
+   {
+     if (f == null)
+       {
+         throw new IllegalArgumentException("file is null");
+       }
+     InputSource  source = new InputSource(new FileInputStream(f));
+     source.setSystemId(f.toURL().toString());
+     return parse(source);
+   }
+ 
+   /**
+    * Parse the specified input source and return a DOM Document.
+    * @param is the input source
+    * @exception IllegalArgumentException if the input source is null
+    */
+   public abstract Document parse(InputSource source) 
+     throws SAXException, IOException;
+ 
+   /**
+    * Indicates whether this document builder is XML Namespace aware.
+    */
+   public abstract boolean isNamespaceAware();
+ 
+   /**
+    * Indicates whether this document builder will validate its input.
+    */
+   public abstract boolean isValidating();
+ 
+   /**
+    * Sets the SAX entity resolver callback used to resolve external entities
+    * in the XML document(s) to parse.
+    * @param er an entity resolver
+    */
+   public abstract void setEntityResolver(EntityResolver er);
+ 
+   /**
+    * Sets the SAX error handler callback used to report parsing errors.
+    * @param eh the error handler
+    */
+   public abstract void setErrorHandler(ErrorHandler eh);
+ 
+   /**
+    * Creates a new, empty DOM Document.
+    * To create a document with a root element and optional doctype, use the
+    * <code>DOMImplementation</code> instead.
+    * @see org.w3c.dom.DOMImplementation#createDocument
+    */
+   public abstract Document newDocument();
+ 
+   /**
+    * Returns the DOM implementation.
+    */
+   public abstract DOMImplementation getDOMImplementation();
+ 
+   // -- JAXP 1.3 methods --
+   
+   /**
+    * Reset this document builder to its original configuration.
+    * @since 1.3
+    */
+   public void reset()
+   {
+   }
+ 
+   /**
+    * Returns the schema in use by the XML processor.
+    */
+   public Schema getSchema()
+   {
+     return null;
+   }
+ 
+   /**
+    * Returns the XInclude processing mode in use by the parser.
+    */
+   public boolean isXIncludeAware()
+   {
+     return false;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/parsers/DocumentBuilderFactory.java gcc-4.0.0/libjava/javax/xml/parsers/DocumentBuilderFactory.java
*** gcc-3.4.3/libjava/javax/xml/parsers/DocumentBuilderFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/parsers/DocumentBuilderFactory.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,346 ----
+ /* DocumentBuilderFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.parsers;
+ 
+ import java.io.BufferedReader;
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.IOException;
+ import java.util.Properties;
+ import javax.xml.validation.Schema;
+ 
+ /**
+  * Factory for obtaining document builders.
+  * Instances of this class are <em>not</em> guaranteed to be thread safe.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public abstract class DocumentBuilderFactory
+ {
+ 
+   private boolean namespaceAware;
+   private boolean validating;
+   private boolean ignoringElementContentWhitespace;
+   private boolean expandEntityReferences = true;
+   private boolean ignoringComments;
+   private boolean coalescing;
+   private Schema schema;
+   private boolean xIncludeAware;
+ 
+   protected DocumentBuilderFactory()
+   {
+   }
+ 
+   /**
+    * Creates a new factory instance.
+    * The implementation class to load is the first found in the following
+    * locations:
+    * <ol>
+    * <li>the <code>javax.xml.parsers.DocumentBuilderFactory</code> system
+    * property</li>
+    * <li>the above named property value in the
+    * <code><i>$JAVA_HOME</i>/lib/jaxp.properties</code> file</li>
+    * <li>the class name specified in the
+    * <code>META-INF/services/javax.xml.parsers.DocumentBuilderFactory</code>
+    * system resource</li>
+    * <li>the default factory class</li>
+    * </ol>
+    */
+   public static DocumentBuilderFactory newInstance()
+   {
+     ClassLoader loader = Thread.currentThread().getContextClassLoader();
+     if (loader == null)
+       {
+         loader = DocumentBuilderFactory.class.getClassLoader();
+       }
+     String className = null;
+     int count = 0;
+     do
+       {
+         className = getFactoryClassName(loader, count++);
+         if (className != null)
+           {
+             try
+               {
+                 Class t = (loader != null) ? loader.loadClass(className) :
+                   Class.forName(className);
+                 return (DocumentBuilderFactory) t.newInstance();
+               }
+             catch (ClassNotFoundException e)
+               {
+                 className = null;
+               }
+             catch (Exception e)
+               {
+                 throw new FactoryConfigurationError(e,
+                     "error instantiating class " + className);
+               } 
+           }
+       }
+     while (className == null && count < 3);
+     return new gnu.xml.dom.DomDocumentBuilderFactory();
+   }
+   
+   private static String getFactoryClassName(ClassLoader loader, int attempt)
+   {
+     final String propertyName = "javax.xml.parsers.DocumentBuilderFactory";
+     switch (attempt)
+       {
+         case 0:
+           return System.getProperty(propertyName);
+         case 1:
+           try
+             {
+               File file = new File(System.getProperty("java.home"));
+               file = new File(file, "lib");
+               file = new File(file, "jaxp.properties");
+               InputStream in = new FileInputStream(file);
+               Properties props = new Properties();
+               props.load(in);
+               in.close();
+               return props.getProperty(propertyName);
+             }
+           catch (IOException e)
+             {
+               return null;
+             }
+         case 2: 
+           try
+             {
+               String serviceKey = "/META-INF/services/" + propertyName;
+               InputStream in = (loader != null) ?
+                 loader.getResourceAsStream(serviceKey) :
+                 DocumentBuilderFactory.class.getResourceAsStream(serviceKey);
+               if (in != null)
+                 {
+                   BufferedReader r =
+                     new BufferedReader(new InputStreamReader(in));
+                   String ret = r.readLine();
+                   r.close();
+                   return ret;
+                 }
+             }
+           catch (IOException e)
+             {
+             }
+           return null;
+         default:
+           return null;
+       }
+   }
+ 
+   /**
+    * Creates a new document builder instance using the currently specified
+    * factory configuration.
+    * @exception ParserConfigurationException if the specified configuration
+    * is not supported
+    */
+   public abstract DocumentBuilder newDocumentBuilder()
+     throws ParserConfigurationException;
+ 
+   /**
+    * Sets whether document builders obtained from this factory will be XML
+    * Namespace aware.
+    */
+   public void setNamespaceAware(boolean awareness)
+   {
+     namespaceAware = awareness;
+   }
+ 
+   /**
+    * Sets whether document builders obtained from this factory will validate
+    * their input.
+    */
+   public void setValidating(boolean validating)
+   {
+     this.validating = validating;
+   }
+ 
+   /**
+    * Sets whether document builders obtained from this factory will
+    * eliminate whitespace within elements that have an element-only content
+    * model.
+    */
+   public void setIgnoringElementContentWhitespace(boolean whitespace)
+   {
+     ignoringElementContentWhitespace = whitespace;
+   }
+ 
+   /**
+    * Sets whether document builders obtained from this factory will expand
+    * entity reference nodes.
+    */
+   public void setExpandEntityReferences(boolean expandEntityRef)
+   {
+     expandEntityReferences = expandEntityRef;
+   }
+ 
+   /**
+    * Sets whether document builders obtained from this factory will discard
+    * comment nodes.
+    */
+   public void setIgnoringComments(boolean ignoreComments)
+   {
+     ignoringComments = ignoreComments;
+   }
+ 
+   /**
+    * Sets whether document builders obtained from this factory will convert
+    * CDATA sections to text nodes and normalize adjacent text nodes into a
+    * single text node.
+    */
+   public void setCoalescing(boolean coalescing)
+   {
+     this.coalescing = coalescing;
+   }
+ 
+   /**
+    * Indicates whether document builders obtained from this factory will be
+    * XML Namespace aware.
+    */
+   public boolean isNamespaceAware()
+   {
+     return namespaceAware;
+   }
+ 
+   /**
+    * Indicates whether document builders obtained from this factory will
+    * validate their input.
+    */
+   public boolean isValidating()
+   {
+     return validating;
+   }
+ 
+   /**
+    * Indicates whether document builders obtained from this factory will
+    * eliminate whitespace within elements that have an element-only content
+    * model.
+    */
+   public boolean isIgnoringElementContentWhitespace()
+   {
+     return ignoringElementContentWhitespace;
+   }
+ 
+   /**
+    * Indicates whether document builders obtained from this factory will
+    * expand entity reference nodes.
+    */
+   public boolean isExpandEntityReferences()
+   {
+     return expandEntityReferences;
+   }
+ 
+   /**
+    * Indicates whether document builders obtained from this factory will
+    * discard comment nodes.
+    */
+   public boolean isIgnoringComments()
+   {
+     return ignoringComments;
+   }
+ 
+   /**
+    * Indicates whether document builders obtained from this factory will
+    * convert CDATA sections to text nodes and normalize adjacent text nodes
+    * into a single text node.
+    */
+   public boolean isCoalescing()
+   {
+     return coalescing;
+   }
+ 
+   /**
+    * Set the named attribute on the underlying implementation.
+    * @param name the name of the attribute
+    * @param value the new value
+    * @exception IllegalArgumentException if the attribute is not recognized
+    */
+   public abstract void setAttribute(String name, Object value) 
+     throws IllegalArgumentException;
+ 
+   /**
+    * Retrieves the named attribute value from the underlying implementation.
+    * @param name the name of the attribute
+    * @exception IllegalArgumentException if the attribute is not recognized
+    */
+   public abstract Object getAttribute(String name) 
+     throws IllegalArgumentException;
+ 
+   // -- JAXP 1.3 methods --
+ 
+   /**
+    * Returns the schema.
+    * @see #setSchema
+    */
+   public Schema getSchema()
+   {
+     return schema;
+   }
+ 
+   /**
+    * Sets the schema.
+    * @see #getSchema
+    */
+   public void setSchema(Schema schema)
+   {
+     this.schema = schema;
+   }
+ 
+   /**
+    * Indicates whether parsers obtained from this factory will be XInclude
+    * aware.
+    * @since 1.3
+    */
+   public boolean isXIncludeAware()
+   {
+     return xIncludeAware;
+   }
+ 
+   /**
+    * Sets whether parsers obtained from this factory will be XInclude aware.
+    * @since 1.3
+    */
+   public void setXIncludeAware(boolean state)
+   {
+     xIncludeAware = state;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/parsers/FactoryConfigurationError.java gcc-4.0.0/libjava/javax/xml/parsers/FactoryConfigurationError.java
*** gcc-3.4.3/libjava/javax/xml/parsers/FactoryConfigurationError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/parsers/FactoryConfigurationError.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,113 ----
+ /* FactoryConfigurationError.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.parsers;
+ 
+ /**
+  * An error occurred during configuration of the parser factory.
+  * 
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class FactoryConfigurationError
+   extends Error
+ {
+ 
+   /**
+    * The underlying cause of this exception, if any.
+    */
+   private Exception  exception;
+ 
+   /**
+    * Constructor with no detail message.
+    */
+   public FactoryConfigurationError()
+   {
+     super();
+   }
+ 
+   /**
+    * Constructor with the specified detail message.
+    * @param msg the detail message
+    */
+   public FactoryConfigurationError(String msg)
+   {
+     super(msg);
+   }
+ 
+   /**
+    * Constructor with the specified underlying cause.
+    * @param e the underlying cause of this exception
+    */
+   public FactoryConfigurationError(Exception e)
+   {
+     super(e);
+     exception = e;
+   }
+ 
+   /**
+    * Constructor with the specified underlying cause and detail message.
+    * @param e the underlying cause of this exception
+    * @param msg the detail message
+    */
+   public FactoryConfigurationError(Exception e, String msg)
+   {
+     super(msg, e);
+     exception = e;
+   }
+ 
+   /**
+    * Returns the message for this error, if any.
+    */
+   public String getMessage()
+   {
+     String message = super.getMessage();
+     if (message == null && exception != null)
+       {
+         message = exception.getMessage();
+       }
+     return message;
+   }
+ 
+   /**
+    * Returns the underlying cause of this exception, if any.
+    */
+   public Exception getException()
+   {
+     return exception;
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/parsers/ParserConfigurationException.java gcc-4.0.0/libjava/javax/xml/parsers/ParserConfigurationException.java
*** gcc-3.4.3/libjava/javax/xml/parsers/ParserConfigurationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/parsers/ParserConfigurationException.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,66 ----
+ /* ParserConfigurationException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.parsers;
+ 
+ /**
+  * An exception occurred during configuration of the XML parser.
+  * 
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class ParserConfigurationException
+   extends Exception
+ {
+ 
+   /**
+    * Constructor with no detail message.
+    */
+   public ParserConfigurationException()
+   {
+     super();
+   }
+ 
+   /**
+    * Constructor with the specified detail message.
+    * @param msg the detail message
+    */
+   public ParserConfigurationException(String msg)
+   {
+     super(msg);
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/parsers/SAXParser.java gcc-4.0.0/libjava/javax/xml/parsers/SAXParser.java
*** gcc-3.4.3/libjava/javax/xml/parsers/SAXParser.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/parsers/SAXParser.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,340 ----
+ /* SAXParser.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.parsers;
+ 
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import javax.xml.validation.Schema;
+ import org.xml.sax.HandlerBase;
+ import org.xml.sax.InputSource;
+ 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;
+ import org.xml.sax.helpers.DefaultHandler;
+ 
+ /**
+  * Convenience class for using or accessing a SAX version 1 or 2 parser.
+  * Instances of this class are <em>not</em> guaranteed to be thread safe.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public abstract class SAXParser
+ {
+   
+   protected SAXParser()
+   {
+   }
+ 
+   /**
+    * Parse the specifed input stream, reporting SAX1 events to the given
+    * handler.
+    * Prefer the SAX2 version of this method, since the HandlerBase class is
+    * now deprecated.
+    * Also prefer the version of this method that specifies a system ID, in
+    * order to resolve external references correctly.
+    * @param is an XML input stream
+    * @param hb the SAX1 handler
+    * @exception IllegalArgumentException if the input stream is null
+    * @see #parse(java.io.InputStream,org.xml.sax.helpers.DefaultHandler)
+    */
+   public void parse(InputStream is, HandlerBase hb) 
+     throws SAXException, IOException
+   {
+     if (is == null)
+       {
+         throw new IllegalArgumentException("input stream is null");
+       }
+     parse(new InputSource(is), hb);
+   }
+ 
+   /**
+    * Parse the specified input stream, reporting SAX1 events to the given
+    * handler.
+    * Prefer the SAX2 version of this method, since the HandlerBase class is
+    * now deprecated.
+    * @param is an XML input stream
+    * @param hb the SAX1 handler
+    * @param systemId the system ID of the XML document
+    * @exception IllegalArgumentException if the input stream is null
+    * @see #parse(java.io.InputStream,org.xml.sax.helpers.DefaultHandler,java.lang.String)
+    */
+   public void parse(InputStream is, HandlerBase hb, String systemId)
+      throws SAXException, IOException
+   {
+     if (is == null)
+       {
+         throw new IllegalArgumentException("input stream is null");
+       }
+     InputSource  source = new InputSource(is);
+     source.setSystemId(systemId);
+     parse(source, hb);
+   }
+ 
+   /**
+    * Parse the specified input stream, reporting SAX2 events to the given
+    * handler.
+    * Prefer the version of this method that specifies a system ID, in
+    * order to resolve external references correctly.
+    * @param is an XML input stream
+    * @param dh the SAX2 handler
+    * @exception IllegalArgumentException if the input stream is null
+    */
+   public void parse(InputStream is, DefaultHandler dh) 
+     throws SAXException, IOException
+   {
+     if (is == null)
+       {
+         throw new IllegalArgumentException("input stream is null");
+       }
+     parse(new InputSource(is), dh);
+   }
+ 
+   /**
+    * Parse the specified input stream, reporting SAX2 events to the given
+    * handler.
+    * @param is an XML input stream
+    * @param dh the SAX2 handler
+    * @param systemId the system ID of the XML document
+    * @exception IllegalArgumentException if the input stream is null
+    */
+   public void parse (InputStream is, DefaultHandler dh, String systemId)
+      throws SAXException, IOException
+   {
+     if (is == null)
+       {
+         throw new IllegalArgumentException("input stream is null");
+       }
+     InputSource  source = new InputSource(is);
+     source.setSystemId(systemId);
+     parse(source, dh);
+   }
+ 
+   /**
+    * Parse the content of the specified URI, reporting SAX1 events to the
+    * given handler.
+    * Prefer the SAX2 version of this method, since the HandlerBase class is
+    * now deprecated.
+    * @param uri an XML system ID
+    * @param hb the SAX1 handler
+    * @exception IllegalArgumentException if the URI is null
+    * @see #parse(java.lang.String,org.xml.sax.helpers.DefaultHandler)
+    */
+   public void parse(String uri, HandlerBase hb) 
+     throws SAXException, IOException
+   {
+     if (uri == null)
+       {
+         throw new IllegalArgumentException("URI is null");
+       }
+     parse(new InputSource(uri), hb);
+   }
+ 
+   /**
+    * Parse the content of the specified URI, reporting SAX2 events to the
+    * given handler.
+    * @param uri an XML system ID
+    * @param dh the SAX2 handler
+    * @exception IllegalArgumentException if the URI is null
+    */
+   public void parse(String uri, DefaultHandler dh) 
+     throws SAXException, IOException
+   {
+     if (uri == null)
+       {
+         throw new IllegalArgumentException("URI is null");
+       }
+     parse(new InputSource(uri), dh);
+   }
+ 
+   /**
+    * Parse the content of the specified file, reporting SAX1 events to the
+    * given handler.
+    * Prefer the SAX2 version of this method, since the HandlerBase class is
+    * now deprecated.
+    * @param f an XML file
+    * @param hb the SAX1 handler
+    * @exception IllegalArgumentException if the file is null
+    * @see #parse(java.io.File,org.xml.sax.helpers.DefaultHandler)
+    */
+   public void parse(File f, HandlerBase hb) 
+     throws SAXException, IOException
+   {
+     if (f == null)
+       {
+         throw new IllegalArgumentException("file is null");
+       }
+     InputSource source = new InputSource(new FileInputStream(f));
+     source.setSystemId(f.toURL().toString());
+     parse(source, hb);
+   }
+ 
+   /**
+    * Parse the content of the specified file, reporting SAX2 events to the
+    * given handler.
+    * @param f an XML file
+    * @param dh the SAX2 handler
+    * @exception IllegalArgumentException if the file is null
+    */
+   public void parse(File f, DefaultHandler dh) 
+     throws SAXException, IOException
+   {
+     if (f == null)
+       {
+         throw new IllegalArgumentException("file is null");
+       }
+     InputSource source = new InputSource(new FileInputStream(f));
+     source.setSystemId(f.toURL().toString());
+     parse(source, dh);
+   }
+ 
+   /**
+    * Parse the specified input source, reporting SAX1 events to the
+    * given handler.
+    * Prefer the SAX2 version of this method, since the HandlerBase class is
+    * now deprecated.
+    * @param is the SAX input source
+    * @param hb the SAX1 handler
+    * @exception IllegalArgumentException if the input source is null
+    * @see #parse(org.xml.sax.InputSource,org.xml.sax.helpers.DefaultHandler)
+    */
+   public void parse(InputSource is, HandlerBase hb) 
+     throws SAXException, IOException
+   {
+     if (is == null)
+       {
+         throw new IllegalArgumentException("input source is null");
+       }
+     Parser parser = getParser();
+     parser.setDocumentHandler(hb);
+     parser.setDTDHandler(hb);
+     parser.setEntityResolver(hb);
+     parser.setErrorHandler(hb);
+     parser.parse(is);
+   }
+ 
+   /**
+    * Parse the specified input source, reporting SAX2 events to the
+    * given handler.
+    * @param f an XML file
+    * @param dh the SAX2 handler
+    * @exception IllegalArgumentException if the input source is null
+    */
+   public void parse(InputSource is, DefaultHandler dh) 
+     throws SAXException, IOException
+   {
+     if (is == null)
+       {
+         throw new IllegalArgumentException("input source is null");
+       }
+     XMLReader reader = getXMLReader();
+     reader.setContentHandler(dh);
+     reader.setDTDHandler(dh);
+     reader.setEntityResolver(dh);
+     reader.setErrorHandler(dh);
+     reader.parse(is);
+   }
+ 
+   /**
+    * Returns the underlying SAX1 parser.
+    */
+   public abstract Parser getParser() throws SAXException;
+ 
+   /**
+    * Returns the underlying SAX2 parser.
+    * @since 1.1
+    */
+   public abstract XMLReader getXMLReader() throws SAXException;
+ 
+   /**
+    * Indicates whether this parser is XML Namespace aware.
+    */
+   public abstract boolean isNamespaceAware();
+ 
+   /**
+    * Indicates whether this parser will validate its input.
+    */
+   public abstract boolean isValidating();
+ 
+   /**
+    * Sets the specified SAX2 parser property.
+    * @param name the name of the property
+    * @param value the value of the property
+    */
+   public abstract void setProperty(String name, Object value) 
+     throws SAXNotRecognizedException, SAXNotSupportedException;
+ 
+   /**
+    * Returns the value of the specified SAX2 parser property.
+    * @param name the name of the property
+    */
+   public abstract Object getProperty(String name) 
+     throws SAXNotRecognizedException, SAXNotSupportedException;
+ 
+   // -- JAXP 1.3 methods --
+ 
+   /**
+    * Resets this parser to its original configuration.
+    * @since 1.3
+    */
+   public void reset()
+   {
+   }
+ 
+   /**
+    * Returns the schema in use by this parser.
+    * @since 1.3
+    */
+   public Schema getSchema()
+   {
+     return null;
+   }
+ 
+   /**
+    * Indicates whether this parser is XInclude-aware.
+    * @since 1.3
+    */
+   public boolean isXIncludeAware()
+   {
+     return false;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/parsers/SAXParserFactory.java gcc-4.0.0/libjava/javax/xml/parsers/SAXParserFactory.java
*** gcc-3.4.3/libjava/javax/xml/parsers/SAXParserFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/parsers/SAXParserFactory.java	Thu Feb 17 07:48:56 2005
***************
*** 0 ****
--- 1,273 ----
+ /* SAXParserFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.parsers;
+ 
+ import java.io.BufferedReader;
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.IOException;
+ import java.util.Properties;
+ import javax.xml.validation.Schema;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXNotSupportedException;
+ 
+ /**
+  * Factory for obtaining SAX parsers.
+  * Instances of this class are <em>not</em> guaranteed to be thread safe.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public abstract class SAXParserFactory
+ {
+ 
+   private boolean validating;
+   private boolean namespaceAware;
+   private Schema schema;
+   private boolean xIncludeAware;
+ 
+   protected SAXParserFactory()
+   {
+   }
+ 
+   /**
+    * Creates a new factory instance.
+    * The implementation class to load is the first found in the following
+    * locations:
+    * <ol>
+    * <li>the <code>javax.xml.parsers.SAXParserFactory</code> system
+    * property</li>
+    * <li>the above named property value in the
+    * <code><i>$JAVA_HOME</i>/lib/jaxp.properties</code> file</li>
+    * <li>the class name specified in the
+    * <code>META-INF/services/javax.xml.parsers.SAXParserFactory</code>
+    * system resource</li>
+    * <li>the default factory class</li>
+    * </ol>
+    */
+   public static SAXParserFactory newInstance()
+     throws FactoryConfigurationError
+   {
+     ClassLoader loader = Thread.currentThread().getContextClassLoader();
+     if (loader == null)
+       {
+         loader = SAXParserFactory.class.getClassLoader();
+       }
+     String className = null;
+     int count = 0;
+     do
+       {
+         className = getFactoryClassName(loader, count++);
+         if (className != null)
+           {
+             try
+               {
+                 Class t = (loader != null) ? loader.loadClass(className) :
+                   Class.forName(className);
+                 return (SAXParserFactory) t.newInstance();
+               }
+             catch (ClassNotFoundException e)
+               {
+                 className = null;
+               }
+             catch (Exception e)
+               {
+                 throw new FactoryConfigurationError(e,
+                      "error instantiating class " + className);
+               }
+           }
+       }
+     while (className == null && count < 3);
+     return new gnu.xml.aelfred2.JAXPFactory();
+   }
+ 
+   private static String getFactoryClassName(ClassLoader loader, int attempt)
+   {
+     final String propertyName = "javax.xml.parsers.SAXParserFactory";
+     switch (attempt)
+       {
+         case 0:
+           return System.getProperty(propertyName);
+         case 1:
+           try
+             {
+               File file = new File(System.getProperty("java.home"));
+               file = new File(file, "lib");
+               file = new File(file, "jaxp.properties");
+               InputStream in = new FileInputStream(file);
+               Properties props = new Properties();
+               props.load(in);
+               in.close();
+               return props.getProperty(propertyName);
+             }
+           catch (IOException e)
+             {
+               return null;
+             }
+         case 2:
+           try
+             {
+               String serviceKey = "/META-INF/services/" + propertyName;
+               InputStream in = (loader != null) ?
+                  loader.getResourceAsStream(serviceKey) :
+                 SAXParserFactory.class.getResourceAsStream(serviceKey);
+               if (in != null)
+                 {
+                   BufferedReader r =
+                      new BufferedReader(new InputStreamReader(in));
+                   String ret = r.readLine();
+                   r.close();
+                   return ret;
+                 }
+             }
+           catch (IOException e)
+             {
+             }
+           return null;
+         default:
+           return null;
+       }
+   }
+ 
+   /**
+    * Creates a new parser instance using the currently specified factory
+    * configuration.
+    * @exception ParserConfigurationException if the specified configuration
+    * is not supported
+    */
+   public abstract SAXParser newSAXParser()
+     throws ParserConfigurationException, SAXException;
+ 
+   /**
+    * Sets whether parsers obtained from this factory will be XML Namespace
+    * aware.
+    */
+   public void setNamespaceAware(boolean awareness)
+   {
+     namespaceAware = awareness;
+   }
+ 
+   /**
+    * Sets whether parsers obtained from this factory will validate their
+    * input.
+    */
+   public void setValidating(boolean validating)
+   {
+     this.validating = validating;
+   }
+ 
+   /**
+    * Indicates whether parsers obtained from this factory will be XML
+    * Namespace aware.
+    */
+   public boolean isNamespaceAware()
+   {
+     return namespaceAware;
+   }
+ 
+   /**
+    * Indicates whether parsers obtained from this factory will validate
+    * their input.
+    */
+   public boolean isValidating()
+   {
+     return validating;
+   }
+ 
+   /**
+    * Sets the specified feature for SAX2 parsers obtained from this factory.
+    * @param name the feature name
+    * @param value the featurevalue
+    */
+   public abstract void setFeature(String name, boolean value) 
+     throws ParserConfigurationException, SAXNotRecognizedException, 
+            SAXNotSupportedException;
+ 
+   /**
+    * Returns the specified feature for SAX2 parsers obtained from this
+    * factory.
+    * @param name the feature name
+    */
+   public abstract boolean getFeature(String name) 
+     throws ParserConfigurationException, SAXNotRecognizedException, 
+            SAXNotSupportedException;
+ 
+   // -- JAXP 1.3 methods --
+ 
+   /**
+    * Returns the schema.
+    * @since 1.3
+    * @see #setSchema
+    */
+   public Schema getSchema()
+   {
+     return schema;
+   }
+ 
+   /**
+    * Sets the schema.
+    * @since 1.3
+    * @see #getSchema
+    */
+   public void setSchema(Schema schema)
+   {
+     this.schema = schema;
+   }
+ 
+   /**
+    * Indicates whether parsers obtained from this factory will be XInclude
+    * aware.
+    * @since 1.3
+    */
+   public boolean isXIncludeAware()
+   {
+     return xIncludeAware;
+   }
+ 
+   /**
+    * Sets whether parsers obtained from this factory will be XInclude aware.
+    * @since 1.3
+    */
+   public void setXIncludeAware(boolean state)
+   {
+     xIncludeAware = state;
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/parsers/package.html gcc-4.0.0/libjava/javax/xml/parsers/package.html
*** gcc-3.4.3/libjava/javax/xml/parsers/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/parsers/package.html	Wed Feb  2 00:42:14 2005
***************
*** 0 ****
--- 1,16 ----
+ <html><head>javax.xml.parsers</head><body>
+ 
+ <p>Bootstrapping APIs for JAXP parsers.
+ This is the first portable API defined for bootstrapping DOM.
+ 
+ <p>JAXP parsers bootstrap in two stages.
+ First is getting a factory, and configuring it.
+ Second is asking that factory for a parser.
+ 
+ <p>The SAX bootstrapping support corresponds to functionality
+ found in the <em>org.xml.sax.helpers</em> package, except
+ that it uses the JAXP two stage bootstrap paradigm and
+ that the parser that's bootstrapped is normally wrapping
+ a SAX parser rather than exposing it for direct use.
+ 
+ </body></html>
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/ErrorListener.java gcc-4.0.0/libjava/javax/xml/transform/ErrorListener.java
*** gcc-3.4.3/libjava/javax/xml/transform/ErrorListener.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/ErrorListener.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,66 ----
+ /* ErrorListener.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ /**
+  * Error reporting callback handler.
+  * Equivalent to the SAX ErrorHandler.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public interface ErrorListener
+ {
+ 
+   /**
+    * Reports a warning condition.
+    */
+   public void warning(TransformerException exception)
+     throws TransformerException;
+ 
+   /**
+    * Reports a recoverable error.
+    */
+   public void error(TransformerException exception)
+     throws TransformerException;
+ 
+   /**
+    * Reports a fatal error.
+    */
+   public void fatalError(TransformerException exception)
+     throws TransformerException;
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/OutputKeys.java gcc-4.0.0/libjava/javax/xml/transform/OutputKeys.java
*** gcc-3.4.3/libjava/javax/xml/transform/OutputKeys.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/OutputKeys.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,103 ----
+ /* OutputKeys.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ /**
+  * Constants for XSLT output attributes.
+  * 
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class OutputKeys
+ {
+ 
+   /**
+    * The output method (xml, html, or text).
+    */
+   public static final String METHOD = "method";
+   
+   /**
+    * The version of the output method.
+    */
+   public static final String VERSION = "version";
+   
+   /**
+    * The preferred output character encoding.
+    */
+   public static final String ENCODING = "encoding";
+   
+   /**
+    * Whether not to output an XML declaration (yes or no).
+    */
+   public static final String OMIT_XML_DECLARATION = "omit-xml-declaration";
+   
+   /**
+    * Whether to output a standalone document declaration (yes or no).
+    */
+   public static final String STANDALONE = "standalone";
+  
+    /**
+    * The public ID to output in the doctype declaration.
+    */
+   public static final String DOCTYPE_PUBLIC = "doctype-public";
+   
+   /**
+    * The system ID to output in the doctype declaration.
+    */
+   public static final String DOCTYPE_SYSTEM = "doctype-system";
+   
+   /**
+    * Whitespace-separated list of element names for which text children
+    * should be output as CDATA sections.
+    */
+   public static final String CDATA_SECTION_ELEMENTS = "cdata-section-elements";
+   
+   /**
+    * Whether to indent the result tree (yes or no).
+    */
+   public static final String INDENT = "indent";
+   
+   /**
+    * The MIME content type of the output data.
+    */
+   public static final String MEDIA_TYPE = "media-type";
+   
+   private OutputKeys()
+   {
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/Result.java gcc-4.0.0/libjava/javax/xml/transform/Result.java
*** gcc-3.4.3/libjava/javax/xml/transform/Result.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/Result.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,72 ----
+ /* Result.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ /**
+  * The result of an XSL transformation.
+  * 
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public interface Result
+ {
+ 
+   /**
+    * Constant for the processing instruction sent when the result disables
+    * output escaping.
+    */
+   public static final String PI_DISABLE_OUTPUT_ESCAPING =
+     "javax.xml.transform.disable-output-escaping";
+ 
+   /**
+    * Constant for the processing instruction sent when the result enables
+    * output escaping.
+    */
+   public static final String PI_ENABLE_OUTPUT_ESCAPING =
+     "javax.xml.transform.enable-output-escaping";
+ 
+   /**
+    * Sets the XML system ID for this result.
+    * @param systemId the system ID URI
+    */
+   public void setSystemId(String systemId);
+ 
+   /**
+    * Returns the system ID for this result.
+    */
+   public String getSystemId();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/Source.java gcc-4.0.0/libjava/javax/xml/transform/Source.java
*** gcc-3.4.3/libjava/javax/xml/transform/Source.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/Source.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,60 ----
+ /* Source.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ /**
+  * An XML input source.
+  * This is equivalent to a SAX InputSource.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public interface Source
+ {
+ 
+   /**
+    * Sets the XML system ID for this source.
+    * This can be used to resolve external entities in the source.
+    * @param systemID the system ID URI
+    */
+   public void setSystemId(String systemId);
+ 
+   /**
+    * Returns the system ID for this source.
+    */
+   public String getSystemId();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/SourceLocator.java gcc-4.0.0/libjava/javax/xml/transform/SourceLocator.java
*** gcc-3.4.3/libjava/javax/xml/transform/SourceLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/SourceLocator.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,70 ----
+ /* SourceLocator.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ /**
+  * The location in an XML resource at which an event occurred.
+  * Tis is equivalent to the SAX Locator.
+  * 
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public interface SourceLocator
+ {
+ 
+   /**
+    * Returns the XML public ID for the document.
+    */
+   public String getPublicId();
+ 
+   /**
+    * Returns the XML system ID for the document.
+    */
+   public String getSystemId();
+ 
+   /**
+    * Returns the line number at which the event occurred.
+    * @return the line number, or -1 if not available
+    */
+   public int getLineNumber();
+ 
+   /**
+    * Returns the column number at which the event occurred.
+    * @return the column number, or -1 if not available
+    */
+   public int getColumnNumber();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/Templates.java gcc-4.0.0/libjava/javax/xml/transform/Templates.java
*** gcc-3.4.3/libjava/javax/xml/transform/Templates.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/Templates.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,67 ----
+ /* Templates.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ import java.util.Properties;
+ 
+ /**
+  * A compiled, reusable XSL transformation.
+  * Implementations of this class are guaranteed to be thread safe.
+  * 
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public interface Templates
+ {
+ 
+   /**
+    * Creates a new transformer based on this transformation.
+    */
+   public Transformer newTransformer()
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Returns the static properties for the <code>xsl:output</code>
+    * instruction. Missing properties are defaulted according the
+    * <a href='http://www.w3.org/TR/xslt#output'>XSLT Recommendation, section
+    * 16</a>: <code>getProperty(String)</code> returns all properties
+    * including defaulted ones, and <code>get(Object)</code> returns only the
+    * properties explicitly set in the stylesheet.
+    */
+   public Properties getOutputProperties();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/Transformer.java gcc-4.0.0/libjava/javax/xml/transform/Transformer.java
*** gcc-3.4.3/libjava/javax/xml/transform/Transformer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/Transformer.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,164 ----
+ /* Transformer.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ import java.util.Properties;
+ 
+ /**
+  * An XSL transformation.
+  * Instances of this class may be reused, but the same instance may not be
+  * used concurrently by different threads.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public abstract class Transformer
+ {
+ 
+   protected Transformer()
+   {
+   }
+ 
+   /**
+    * Transforms the source XML to a result tree.
+    * @param xmlSource the XML source
+    * @param outputTarget the result of the transformation
+    */
+   public abstract void transform(Source xmlSource, Result outputTarget) 
+     throws TransformerException;
+   
+   /**
+    * Sets a parameter value for the transformation.
+    * Parameters may be referenced in the XSLT stylesheet.
+    * @param name the parameter name (an XML Name, or a namespace-prefixed
+    * XML Name of the form <code>{<i>namespaceURI</i>}<i>localName</i></code>
+    * @param value the value to assign
+    */
+   public abstract void setParameter(String name, Object value);
+ 
+   /**
+    * Returns the specified parameter value.
+    * @param name the parameter name (an XML Name, or a namespace-prefixed
+    * XML Name of the form <code>{<i>namespaceURI</i>}<i>localName</i></code>
+    */
+   public abstract Object getParameter(String name);
+ 
+   /**
+    * Clears all parameter values.
+    */
+   public abstract void clearParameters();
+ 
+   /**
+    * Sets the callback used to resolve entities referenced by
+    * <code>xsl:include</code>, <code>xsl:import</code>, or the XPath
+    * <code>document()</code> function.
+    */
+   public abstract void setURIResolver(URIResolver resolver);
+ 
+   /**
+    * Returns the callback used to resolve entities referenced by
+    * <code>xsl:include</code>, <code>xsl:import</code>, or the XPath
+    * <code>document()</code> function.
+    */
+   public abstract URIResolver getURIResolver();
+ 
+   /**
+    * Sets the output properties for the transformation, overriding any
+    * properties defined in the stylesheet.
+    * The format of property keys is as in the
+    * {@link #setOutputProperty(java.lang.String,java.lang.String)} method.
+    * @param oformat a set of output properties, or null to reset all the
+    * properties to their default values
+    */
+   public abstract void setOutputProperties(Properties oformat) 
+     throws IllegalArgumentException;
+ 
+   /**
+    * Returns a copy of the output properties for the transformation.
+    * Missing properties are defaulted according the
+    * <a href='http://www.w3.org/TR/xslt#output'>XSLT Recommendation, section
+    * 16</a>: <code>getProperty(String)</code> returns all properties
+    * including defaulted ones, and <code>get(Object)</code> returns only the
+    * properties explicitly set in the stylesheet.
+    */
+   public abstract Properties getOutputProperties();
+ 
+   /**
+    * Sets an output property for the transformation, overriding any property
+    * of the same name defined in the stylesheet.
+    * @param name the property name (an XML Name, or a namespace-prefixed
+    * XML Name of the form <code>{<i>namespaceURI</i>}<i>localName</i></code>
+    * @param value the string value of the property
+    * @exception IllegalArgumentException if the property is not supported
+    */
+   public abstract void setOutputProperty(String name, String value) 
+     throws IllegalArgumentException;
+ 
+   /**
+    * Returns the value of an output property for the transformation.
+    * Only explicit properties set programmatically or defined in the
+    * stylesheet, not defaulted properties, are returned by this method.
+    * @param name the property name (an XML Name, or a namespace-prefixed
+    * XML Name of the form <code>{<i>namespaceURI</i>}<i>localName</i></code>
+    * @exception IllegalArgumentException if the property is not supported
+    */
+   public abstract String getOutputProperty(String name) 
+     throws IllegalArgumentException;
+ 
+   /**
+    * Sets the callback used to report errors during the transformation.
+    *  @exception IllegalArgumentException if the listener is null
+    */
+   public abstract void setErrorListener(ErrorListener listener)
+     throws IllegalArgumentException;
+   
+   /**
+    * Returns the callback used to report errors during the transformation.
+    */
+   public abstract ErrorListener getErrorListener();
+ 
+   // -- JAXP 1.3 methods --
+ 
+   /**
+    * Reset this Transformer to its original configuration.
+    * @since 1.3
+    */
+   public void reset()
+   {
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/TransformerConfigurationException.java gcc-4.0.0/libjava/javax/xml/transform/TransformerConfigurationException.java
*** gcc-3.4.3/libjava/javax/xml/transform/TransformerConfigurationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/TransformerConfigurationException.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,103 ----
+ /* TransformerConfigurationException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ /**
+  * An exception occurred during configuration of the transformer.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class TransformerConfigurationException
+   extends TransformerException
+ {
+ 
+   private SourceLocator locator;
+   
+   /**
+    * Constructor with no detail message.
+    */
+   public TransformerConfigurationException()
+   {
+     this(null, null, null);
+   }
+ 
+   /**
+    * Constructor with a detail message.
+    */
+   public TransformerConfigurationException(String msg)
+   {
+     this(msg, null, null);
+   }
+ 
+   /**
+    * Constructor with underlying cause.
+    */
+   public TransformerConfigurationException(Throwable e)
+   {
+     this(e.getMessage(), null, e);
+   }
+ 
+   /**
+    * Constructor with detail message and underlyinmg cause.
+    */
+   public TransformerConfigurationException(String msg, Throwable e)
+   {
+     this(msg, null, e);
+   }
+ 
+   /**
+    * Constructor with detail message and locator.
+    */
+   public TransformerConfigurationException(String message,
+                                            SourceLocator locator)
+   {
+     this(message, locator, null);
+   }
+ 
+   /**
+    * Constructor with detail message, locator and underlying cause.
+    */
+   public TransformerConfigurationException(String message,
+                                            SourceLocator locator,
+                                            Throwable e)
+   {
+     super(message, e);
+     this.locator = locator;
+   }  
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/TransformerException.java gcc-4.0.0/libjava/javax/xml/transform/TransformerException.java
*** gcc-3.4.3/libjava/javax/xml/transform/TransformerException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/TransformerException.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,241 ----
+ /* TransformerException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ 
+ /**
+  * An exception occurred during the transformation process.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class TransformerException
+   extends Exception
+ {
+ 
+   private SourceLocator  locator;
+   private Throwable  cause;
+ 
+   /**
+    * Constructor with a detail message.
+    */
+   public TransformerException(String msg)
+   {
+     this(msg, null, null);
+   }
+ 
+   /**
+    * Constructor with an underlying cause.
+    */
+   public TransformerException(Throwable cause)
+   {
+     this(cause.getMessage(), null, cause);
+   }
+ 
+   /**
+    * Constructor with a detail message and underlying cause.
+    */
+   public TransformerException(String msg, Throwable cause)
+   {
+     this(msg, null, cause);
+   }
+ 
+   /**
+    * Constructor with a detail message and locator.
+    */
+   public TransformerException(String msg, SourceLocator locator)
+   {
+     this(msg, locator, null);
+   }
+ 
+   /**
+    * Constructor with detail message, locator and underlying cause.
+    */
+   public TransformerException(String msg, SourceLocator locator, 
+                               Throwable cause)
+   {
+     super(msg);
+     this.locator = locator;
+     if (cause != null)
+       {
+         initCause(cause);
+         this.cause = cause;
+       }
+   }
+ 
+   /**
+    * Returns a locator indicating where the error occurred.
+    */
+   public SourceLocator getLocator()
+   {
+     return locator;
+   }
+ 
+   /**
+    * Sets the locator indicating where the error occurred.
+    */
+   public void setLocator(SourceLocator location)
+   {
+     locator = location;
+   }
+ 
+   /**
+    * Returns the underlying cause of this exception.
+    */
+   public Throwable getException()
+   {
+     return cause;
+   }
+ 
+   /**
+    * Returns the underlying cause of this exception.
+    */
+   public Throwable getCause()
+   {
+     return cause;
+   }
+ 
+   /**
+    * Initializes the root cause of this exception.
+    * This method may be called only once, and will be called by the
+    * constructor if a non-null cause is specified.
+    * Really phenomenally poor API design.
+    * @param cause the underlying cause
+    * @exception IllegalArgumentException if this exception is passed as the
+    * argument
+    * @exception IllegalStateException if a cause has already been
+    * initialized
+    */
+   public Throwable initCause(Throwable cause)
+   {
+     if (this.cause != null)
+       {
+         throw new IllegalStateException();
+       }
+     if (cause == this)
+       {
+         throw new IllegalArgumentException();
+       }
+     this.cause = cause;
+     return this;
+   }
+ 
+   /**
+    * Returns the exception message with location information appended.
+    */
+   public String getMessageAndLocation()
+   {
+     return (locator == null) ? getMessage() :
+       getMessage() + ": " + getLocationAsString();
+   }
+ 
+   /**
+    * Returns the location information as a string.
+    */
+   public String getLocationAsString()
+   {
+     if (locator == null)
+       {
+         return null;
+       }
+     String publicId = locator.getPublicId();
+     String systemId = locator.getSystemId();
+     int lineNumber = locator.getLineNumber();
+     int columnNumber = locator.getColumnNumber();
+     StringBuffer buffer = new StringBuffer ();
+     if (publicId != null)
+       {
+         buffer.append ("publicId=");
+         buffer.append (publicId);
+       }
+     if (systemId != null)
+       {
+         if (buffer.length() > 0)
+           {
+             buffer.append(' ');
+           }
+         buffer.append ("systemId=");
+         buffer.append (systemId);
+       }
+     if (lineNumber != -1)
+       {
+         if (buffer.length() > 0)
+           {
+             buffer.append(' ');
+           }
+         buffer.append ("lineNumber=");
+         buffer.append (lineNumber);
+       }
+     if (columnNumber != -1)
+       {
+         if (buffer.length() > 0)
+           {
+             buffer.append(' ');
+           }
+         buffer.append ("columnNumber=");
+         buffer.append (columnNumber);
+       }
+     return buffer.toString();
+   }
+ 
+   public void printStackTrace()
+   {
+     printStackTrace(System.out);
+   }
+ 
+   public void printStackTrace(PrintStream s)
+   {
+     super.printStackTrace(s);
+     if (cause != null)
+       {
+         s.print("caused by ");
+         cause.printStackTrace(s);
+       }
+   }
+ 
+   public void printStackTrace(PrintWriter s)
+   {
+     super.printStackTrace(s);
+     if (cause != null)
+       {
+         s.print("caused by ");
+         cause.printStackTrace(s);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/TransformerFactory.java gcc-4.0.0/libjava/javax/xml/transform/TransformerFactory.java
*** gcc-3.4.3/libjava/javax/xml/transform/TransformerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/TransformerFactory.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,284 ----
+ /* TransformerFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ import java.io.BufferedReader;
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.IOException;
+ import java.util.Properties;
+ 
+ /**
+  * Factory for obtaining transformation contexts.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public abstract class TransformerFactory
+ {
+ 
+   protected TransformerFactory()
+   {
+   }
+ 
+   /**
+    * Creates a new factory instance.
+    * The implementation class to load is the first found in the following
+    * locations:
+    * <ol>
+    * <li>the <code>javax.xml.transform.TransformerFactory</code> system
+    * property</li>
+    * <li>the above named property value in the
+    * <code><i>$JAVA_HOME</i>/lib/jaxp.properties</code> file</li>
+    * <li>the class name specified in the
+    * <code>META-INF/services/javax.xml.parsers.DocumentBuilderFactory</code>
+    * system resource</li>
+    * <li>the default factory class</li>
+    * </ol>
+    */
+   public static TransformerFactory newInstance() 
+     throws TransformerFactoryConfigurationError
+   {
+     ClassLoader loader = Thread.currentThread().getContextClassLoader();
+     if (loader == null)
+       {
+         loader = TransformerFactory.class.getClassLoader();
+       }
+     String className = null;
+     int count = 0;
+     do
+       {
+         className = getFactoryClassName(loader, count++);
+         if (className != null)
+           {
+             try
+               {
+                 Class t = (loader != null) ? loader.loadClass(className) :
+                   Class.forName(className);
+                 return (TransformerFactory) t.newInstance();
+               }
+             catch (ClassNotFoundException e)
+               {
+                 className = null;
+               }
+             catch (Exception e)
+               { 
+                 throw new TransformerFactoryConfigurationError(e,
+                     "error instantiating class " + className);
+               } 
+           }
+       }
+     while (className == null && count < 3);
+     try
+       {
+         Class t =
+           Class.forName("gnu.xml.transform.TransformerFactoryImpl");
+         return (TransformerFactory) t.newInstance();
+       }
+     catch (Exception e)
+       {
+         throw new TransformerFactoryConfigurationError(e);
+       }
+   }
+   
+   private static String getFactoryClassName(ClassLoader loader, int attempt)
+   {
+     final String propertyName = "javax.xml.transform.TransformerFactory";
+     switch (attempt)
+       {
+         case 0:
+           return System.getProperty(propertyName);
+         case 1:
+           try
+             {
+               File file = new File(System.getProperty("java.home"));
+               file = new File(file, "lib");
+               file = new File(file, "jaxp.properties");
+               InputStream in = new FileInputStream(file);
+               Properties props = new Properties();
+               props.load(in);
+               in.close();
+               return props.getProperty(propertyName);
+             }
+           catch (IOException e)
+             {
+               return null;
+             }
+         case 2: 
+           try
+             {
+               String serviceKey = "/META-INF/services/" + propertyName;
+               InputStream in = (loader != null) ?
+                 loader.getResourceAsStream(serviceKey) :
+                 TransformerFactory.class.getResourceAsStream(serviceKey);
+               if (in != null)
+                 {
+                   BufferedReader r =
+                     new BufferedReader(new InputStreamReader(in));
+                   String ret = r.readLine();
+                   r.close();
+                   return ret;
+                 }
+             }
+           catch (IOException e)
+             {
+             }
+           return null;
+         default:
+           return null;
+       }
+   }
+   
+   /**
+    * Creates a new transformer using the specified stylesheet.
+    * @param source the source of an <a href='http://www.w3.org/TR/xslt'>XSLT
+    * stylesheet</a> specifying the transformation to apply
+    */
+   public abstract Transformer newTransformer(Source source) 
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Creates a new transformer that applies the identity transform.
+    */
+   public abstract Transformer newTransformer() 
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Creates a new compiled transformation using the specified stylesheet.
+    * @param source the source of an <a href='http://www.w3.org/TR/xslt'>XSLT
+    * stylesheet</a> specifying the transformation to apply
+    */
+   public abstract Templates newTemplates(Source source) 
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Returns a source object representing the XML resource specified by the
+    * <a href='http://www.w3.org/TR/xml-stylesheet/'>xml-stylesheet</a>
+    * processing instruction and matching the given criteria.
+    * Note that if multiple stylesheets are selected, the source represents a
+    * stylesheet composed of a list of imports.
+    * @param source the source XML document
+    * @param media the media attribute to match, or <code>null</code> to match
+    * the preferred templates
+    * @param title the title attribute to match, or <code>null</code> to match
+    * any
+    * @param charset the charset attribute to match, or <code>null</code> to
+    * match any
+    */
+   public abstract Source getAssociatedStylesheet(Source source, 
+                                                  String media,
+                                                  String title,
+                                                  String charset) 
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Set the resolver callback to be used by transformers obtained from
+    * this factory.
+    */
+   public abstract void setURIResolver(URIResolver resolver);
+ 
+   /**
+    * Returns the resolver callback to be used by transformers obtained from
+    * this factory.
+    */
+   public abstract URIResolver getURIResolver();
+ 
+   /**
+    * Sets a feature of transformers and templates obtained from this
+    * factory.
+    * Feature names are fully qualified URIs, and may depend on the factory
+    * implementation.
+    * @param name the name of the feature
+    * @param value the feature state
+    * @exception TransformerConfigurationException if the feature is
+    * unsupported
+    */
+   public abstract void setFeature(String name, boolean value)
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Returns the state of a feature in the factory implementation.
+    * Feature names are fully qualified URIs, and may depend on the factory
+    * implementation. JAXP also predefines several features, including the
+    * constants in {@link javax.xml.XMLConstants} and
+    * <ul>
+    * <li>{@link javax.xml.transform.dom.DOMSource#FEATURE}</li>
+    * <li>{@link javax.xml.transform.dom.DOMResult#FEATURE}</li>
+    * <li>{@link javax.xml.transform.sax.SAXSource#FEATURE}</li>
+    * <li>{@link javax.xml.transform.sax.SAXResult#FEATURE}</li>
+    * <li>{@link javax.xml.transform.sax.SAXTransformerFactory#FEATURE}</li>
+    * <li>{@link javax.xml.transform.sax.SAXTransformerFactory#FEATURE_XMLFILTER}</li>
+    * <li>{@link javax.xml.transform.stream.StreamSource#FEATURE}</li>
+    * <li>{@link javax.xml.transform.stream.StreamResult#FEATURE}</li>
+    * </ul>
+    * The latter expose various capabilities of the factory implementation.
+    */
+   public abstract boolean getFeature(String name);
+ 
+   /**
+    * Set a named attribute on the underlying implementation.
+    * @param name the attribute name
+    * @param value the value to assign
+    * @exception IllegalArgumentException if the attribute is not supported
+    */
+   public abstract void setAttribute(String name, Object value)
+     throws IllegalArgumentException;
+ 
+   /**
+    * Retrieve the specified named attribute value.
+    * @param name the attribute name
+    * @exception IllegalArgumentException if the attribute is not supported
+    */
+   public abstract Object getAttribute(String name) 
+     throws IllegalArgumentException;
+ 
+   /**
+    * Sets the callback to be used by transformers obtained from this factory
+    * to report transformation errors.
+    */
+   public abstract void setErrorListener(ErrorListener listener) 
+     throws IllegalArgumentException;
+ 
+   /**
+    * Returns the callback to be used by transformers obtained from this
+    * factory to report transformation errors.
+    */
+   public abstract ErrorListener getErrorListener();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/TransformerFactoryConfigurationError.java gcc-4.0.0/libjava/javax/xml/transform/TransformerFactoryConfigurationError.java
*** gcc-3.4.3/libjava/javax/xml/transform/TransformerFactoryConfigurationError.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/TransformerFactoryConfigurationError.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,104 ----
+ /* TransformerFactoryConfigurationError.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ /**
+  * An error occurred during configuration of the transformer factory.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class TransformerFactoryConfigurationError
+   extends Error
+ {
+   
+   private final Exception  exception;
+ 
+   /**
+    * Constructor with no detail message.
+    */
+   public TransformerFactoryConfigurationError()
+   {
+     this(null, null);
+   }
+ 
+   /**
+    * Constructor with a detail message.
+    */
+   public TransformerFactoryConfigurationError(String msg)
+   {
+     this(null, msg);
+   }
+ 
+   /**
+    * Constructor with an underlying cause.
+    */
+   public TransformerFactoryConfigurationError(Exception e)
+   {
+     this(e, null);
+   }
+ 
+   /**
+    * Constructor with an underlying cause and detail message.
+    */
+   public TransformerFactoryConfigurationError(Exception e, String msg)
+   {
+     super(msg);
+     exception = e;
+   }
+ 
+   /**
+    * Returns the detail message.
+    */
+   public String getMessage()
+   {
+     String message = super.getMessage();
+     if (message == null && exception != null)
+       {
+         message = exception.getMessage();
+       }
+     return message;
+   }
+ 
+   /**
+    * Returns the underlying cause.
+    */
+   public Exception getException()
+   {
+     return exception;
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/URIResolver.java gcc-4.0.0/libjava/javax/xml/transform/URIResolver.java
*** gcc-3.4.3/libjava/javax/xml/transform/URIResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/URIResolver.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,58 ----
+ /* URIResolver.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform;
+ 
+ /**
+  * Callback that can resolve a URI into source XML for transformation.
+  * Equivalent to the SAX EntityResolver.
+  * 
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public interface URIResolver
+ {
+ 
+   /**
+    * Resolves an <code>xsl:include</code>, <code>xsl:import</code>, or
+    * XPath <code>document()</code> function.
+    * @param href the URI to resolve (relative or absolute)
+    * @param base the base URI relative to which the URI is to be resolved
+    * @return a source, or null if the resource could not be found
+    */
+   public Source resolve(String href, String base)
+     throws TransformerException;
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/dom/DOMLocator.java gcc-4.0.0/libjava/javax/xml/transform/dom/DOMLocator.java
*** gcc-3.4.3/libjava/javax/xml/transform/dom/DOMLocator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/dom/DOMLocator.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,57 ----
+ /* DOMLocator.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.dom;
+ 
+ import javax.xml.transform.SourceLocator;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Locator for reporting a location in a W3C DOM object graph.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public interface DOMLocator
+   extends SourceLocator
+ {
+ 
+   /**
+    * Returns the node on which the event originated.
+    */
+   public Node getOriginatingNode();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/dom/DOMResult.java gcc-4.0.0/libjava/javax/xml/transform/dom/DOMResult.java
*** gcc-3.4.3/libjava/javax/xml/transform/dom/DOMResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/dom/DOMResult.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,163 ----
+ /* DOMResult.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.dom;
+ 
+ import javax.xml.transform.Result;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * Output result specified as a W3C DOM object graph.
+  * The result tree may be appended to an existing tree.
+  * If no target node is specified, the result tree will be made available by
+  * the {@link #getNode} method after the transformation.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class DOMResult
+   implements Result
+ {
+ 
+   /**
+    * Factory feature indicating that DOM results are supported.
+    */
+   public static final String FEATURE =
+     "http://javax.xml.transform.dom.DOMResult/feature";
+ 
+   private Node node;
+   private Node nextSibling;
+   private String systemId;
+ 
+   /**
+    * Default constructor.
+    */
+   public DOMResult()
+   {
+     this(null, null, null);
+   }
+ 
+   /**
+    * Constructor with the node to append to.
+    */
+   public DOMResult(Node node)
+   {
+     this(node, null, null);
+   }
+ 
+   /**
+    * Constructor with the node to append to and the child node before which
+    * the result should be appended.
+    * @since 1.3
+    */
+   public DOMResult(Node node, Node nextSibling)
+   {
+     this(node, nextSibling, null);
+   }
+   
+   /**
+    * Constructor with the node to append to and the system ID.
+    */
+   public DOMResult(Node node, String systemID)
+   {
+     this(node, null, systemID);
+   }
+   
+   /**
+    * Constructor with the node to append to, the child node before which
+    * the result should be appended, and the system ID.
+    * @since 1.3
+    */
+   public DOMResult(Node node, Node nextSibling, String systemID)
+   {
+     this.node = node;
+     this.nextSibling = nextSibling;
+     this.systemId = systemID;
+   }
+ 
+   /**
+    * Sets the node to which the result tree will be appended.
+    * @param node the node
+    */
+   public void setNode(Node node)
+   {
+     this.node = node;
+   }
+ 
+   /**
+    * Returns the node to which the result tree is to be appended,
+    * or the result tree after transformation if no node was previously set.
+    */
+   public Node getNode()
+   {
+     return node;
+   }
+ 
+   /**
+    * Sets the child node before which the result nodes will be inserted.
+    * @since 1.3
+    */
+   public void setNextSibling(Node nextSibling)
+   {
+     this.nextSibling = nextSibling;
+   }
+ 
+   /**
+    * Returns the child node before which the result nodes will be inserted.
+    * @since 1.3
+    */
+   public Node getNextSibling()
+   {
+     return nextSibling;
+   }
+ 
+   /**
+    * Sets the system ID used to resolve external entities.
+    */
+   public void setSystemId(String systemId)
+   {
+     this.systemId = systemId;
+   }
+ 
+   /**
+    * Returns the system ID used to resolve external entities.
+    */
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/dom/DOMSource.java gcc-4.0.0/libjava/javax/xml/transform/dom/DOMSource.java
*** gcc-3.4.3/libjava/javax/xml/transform/dom/DOMSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/dom/DOMSource.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,118 ----
+ /* DOMSource.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.dom;
+ 
+ import javax.xml.transform.Source;
+ import org.w3c.dom.Node;
+ 
+ /**
+  * An XML source specified as a W3C DOM node context.
+  * 
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class DOMSource
+   implements Source
+ {
+ 
+   /**
+    * Factory feature indicating that DOM sources are supported.
+    */
+   public static final String FEATURE =
+     "http://javax.xml.transform.dom.DOMSource/feature";
+ 
+   private Node node;
+   private String systemId;
+ 
+   /**
+    * Default constructor.
+    */
+   public DOMSource()
+   {
+     this(null, null);
+   }
+ 
+   /**
+    * Constructor with a context node.
+    */
+   public DOMSource(Node node)
+   {
+     this(node, null);
+   }
+ 
+   /**
+    * Constructor with a context node and system ID.
+    */
+   public DOMSource(Node node, String systemId)
+   {
+     this.node = node;
+     this.systemId = systemId;
+   }
+ 
+   /**
+    * Sets the context node.
+    */
+   public void setNode(Node node)
+   {
+     this.node = node;
+   }
+ 
+   /**
+    * Returns the context node.
+    */
+   public Node getNode()
+   {
+     return node;
+   }
+ 
+   /**
+    * Sets the base URI to use as the context for resolving entities.
+    */
+   public void setSystemId(String systemId)
+   {
+     this.systemId = systemId;
+   }
+ 
+   /**
+    * Returns the base URI to use as the context for resolving entities.
+    */
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/dom/package.html gcc-4.0.0/libjava/javax/xml/transform/dom/package.html
*** gcc-3.4.3/libjava/javax/xml/transform/dom/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/dom/package.html	Wed Feb  2 00:42:15 2005
***************
*** 0 ****
--- 1,5 ----
+ <html><head>trax for dom</head><body>
+ 
+ <p>Support for DOM inputs and outputs to transformers.
+ 
+ </body></html>
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/package.html gcc-4.0.0/libjava/javax/xml/transform/package.html
*** gcc-3.4.3/libjava/javax/xml/transform/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/package.html	Wed Feb  2 00:42:15 2005
***************
*** 0 ****
--- 1,38 ----
+ <html><head>trax </head><body>
+ 
+ <p>Base "TRAX" API for XSLT transformers.
+ This API borrows many structural notions from SAX,
+ such as the way error handling and external entity
+ resolution are handled, although it does not reuse
+ the corresponding SAX classes.
+ To use XSLT transformers: <ul>
+ 
+ <li>Start with <em>TransformerFactory.newInstance()</em>;
+ 
+ <li>Then you may wish to configure that factory through
+ its features and properties.  This includes modifying
+ the way errors are handled and URIs are resolved.
+ 
+ <li>Then you have several options for how to perform
+ the XSLT transformations.  One generic option is to ask the
+ factory for a <a href="Transformer.html">Transformer</a>
+ and then use <em>Transformer.transform()</em> to pull
+ input text onto output text.
+ 
+ <li>Alternatively, most factories support flexible integration
+ with SAX event streams.  You can cast such factories to a
+ <a href="sax/SAXTransformerFactory.html">SAXTransformerFactory</a>
+ and perform either push or pull mode transformations.
+ 
+ </ul>
+ 
+ <p>The <a href="OutputKeys.html">OutputKeys</a> class
+ holds constants that can be used to configure output
+ properties used with <em>Result</em> objects, as if
+ they were specified in <em>xslt:output</em> attributes
+ in the stylesheet specifying the transform.
+ 
+ <p>The <a href="Templates.html">Templates</a> class
+ accomodates the notion of "compiled" transforms.
+ 
+ </body></html>
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/sax/SAXResult.java gcc-4.0.0/libjava/javax/xml/transform/sax/SAXResult.java
*** gcc-3.4.3/libjava/javax/xml/transform/sax/SAXResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/sax/SAXResult.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,132 ----
+ /* SAXResult.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.sax;
+ 
+ import javax.xml.transform.Result;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.ext.LexicalHandler;
+ 
+ /**
+  * Specifies SAX handlers to be used as a result sink during a
+  * transformation.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class SAXResult implements Result
+ {
+   
+   /**
+    * Factory feature indicating that SAX results are supported.
+    */
+   public static final String FEATURE =
+     "http://javax.xml.transform.sax.SAXResult/feature";
+ 
+   private ContentHandler handler;
+   private LexicalHandler lexicalHandler;
+   private String systemId;
+ 
+   /**
+    * Default constructor.
+    */
+   public SAXResult()
+   {
+   }
+ 
+   /**
+    * Constructor specifying a content handler.
+    */
+   public SAXResult(ContentHandler handler)
+   {
+     this.handler = handler;
+   }
+ 
+   /**
+    * Sets the content handler to which result document events will be
+    * propagated.
+    */
+   public void setHandler(ContentHandler handler)
+   {
+     this.handler = handler;
+   }
+ 
+   /**
+    * Returns the content handler to which result document events will be
+    * propagated.
+    */
+   public ContentHandler getHandler()
+   {
+     return handler;
+   }
+ 
+   /**
+    * Sets the lexical handler to which lexical events will be propagated.
+    * If a lexical handler is not set, the transformer should attempt to cast
+    * the content handler to a lexical handler.
+    */
+   public void setLexicalHandler(LexicalHandler handler)
+   {
+     lexicalHandler = handler;
+   }
+   
+   /**
+    * Returns the lexical handler to which lexical events will be propagated.
+    * If a lexical handler is not set, the transformer should attempt to cast
+    * the content handler to a lexical handler.
+    */
+   public LexicalHandler getLexicalHandler()
+   {
+     return lexicalHandler;
+   }
+ 
+   /**
+    * Sets the system ID which this result represents.
+    */
+   public void setSystemId(String systemId)
+   {
+     this.systemId = systemId;
+   }
+ 
+   /**
+    * Returns the system ID which this result represnts.
+    */
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/sax/SAXSource.java gcc-4.0.0/libjava/javax/xml/transform/sax/SAXSource.java
*** gcc-3.4.3/libjava/javax/xml/transform/sax/SAXSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/sax/SAXSource.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,197 ----
+ /* SAXSource.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.sax;
+ 
+ import java.io.InputStream;
+ import java.io.Reader;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.stream.StreamSource;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.XMLReader;
+ 
+ /**
+  * Specifies a SAX XML source. This is a tuple of input source and SAX
+  * parser.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class SAXSource
+   implements Source
+ {
+ 
+   /**
+    * Factory feature indicating that SAX sources are supported.
+    */
+   public static final String FEATURE =
+     "http://javax.xml.transform.sax.SAXSource/feature";
+ 
+   private XMLReader  xmlReader;
+   private InputSource  inputSource;
+ 
+   /**
+    * Default constructor.
+    */
+   public SAXSource()
+   {
+   }
+ 
+   /**
+    * Constructor with a SAX parser and input source.
+    */
+   public SAXSource(XMLReader reader, InputSource inputSource)
+   {
+     xmlReader = reader;
+     this.inputSource = inputSource;
+   }
+ 
+   /**
+    * Constructor with an input source.
+    * The SAX parser will be instantiated by the transformer.
+    */
+   public SAXSource(InputSource inputSource)
+   {
+     this.inputSource = inputSource;
+   }
+ 
+   /**
+    * Sets the SAX parser to be used by this source.
+    * If null, the transformer will instantiate its own parser.
+    */
+   public void setXMLReader(XMLReader reader)
+   {
+     xmlReader = reader;
+   }
+ 
+   /**
+    * Returns the SAX parser to be used by this source.
+    * If null, the transformer will instantiate its own parser.
+    */
+   public XMLReader getXMLReader()
+   {
+     return xmlReader;
+   }
+ 
+   /**
+    * Sets the input source to parse.
+    */
+   public void setInputSource(InputSource inputSource)
+   {
+     this.inputSource = inputSource;
+   }
+ 
+   /**
+    * Returns the input source to parse.
+    */
+   public InputSource getInputSource()
+   {
+     return inputSource;
+   }
+ 
+   /**
+    * Sets the system ID for this source.
+    */
+   public void setSystemId(String systemId)
+   {
+     if (inputSource != null)
+       {
+         inputSource.setSystemId(systemId);
+       }
+   }
+ 
+   /**
+    * Returns the system ID for this source.
+    */
+   public String getSystemId()
+   {
+     if (inputSource != null)
+       {
+         return inputSource.getSystemId();
+       }
+     return null;
+   }
+ 
+   /**
+    * Converts a source into a SAX input source.
+    * This method can use a StreamSource or the system ID.
+    * @return an input source or null
+    */
+   public static InputSource sourceToInputSource(Source source)
+   {
+     InputSource in = null;
+     if (source instanceof SAXSource)
+       {
+         in = ((SAXSource) source).getInputSource();
+       }
+     else if (source instanceof StreamSource)
+       {
+         StreamSource streamSource = (StreamSource) source;
+         InputStream inputStream = streamSource.getInputStream();
+         if (inputStream != null)
+           {
+             in = new InputSource(inputStream);
+           }
+         else
+           {
+             Reader reader = streamSource.getReader();
+             if (reader != null)
+               {
+                 in = new InputSource(reader);
+               }
+           }
+         String publicId = streamSource.getPublicId();
+         if (publicId != null && in != null)
+           {
+             in.setPublicId(publicId);
+           }
+       }
+     String systemId = source.getSystemId();
+     if (systemId != null)
+       {
+         if (in == null)
+           {
+             in = new InputSource(systemId);
+           }
+         else
+           {
+             in.setSystemId(systemId);
+           }
+       }
+     return in;
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/sax/SAXTransformerFactory.java gcc-4.0.0/libjava/javax/xml/transform/sax/SAXTransformerFactory.java
*** gcc-3.4.3/libjava/javax/xml/transform/sax/SAXTransformerFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/sax/SAXTransformerFactory.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,115 ----
+ /* SAXTransformerFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.sax;
+ 
+ import javax.xml.transform.Source;
+ import javax.xml.transform.Templates;
+ import javax.xml.transform.TransformerConfigurationException;
+ import javax.xml.transform.TransformerFactory;
+ import org.xml.sax.XMLFilter;
+ 
+ /**
+  * Specialized transformer factory with support for SAX-specific factory
+  * methods.
+  * This factory provides SAX content handlers that can create transformation
+  * templates and transformers.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public abstract class SAXTransformerFactory extends TransformerFactory
+ {
+ 
+   /**
+    * Factory feature indicating that the factory can be cast to this class.
+    */
+   public static final String FEATURE =
+     "http://javax.xml.transform.sax.SAXTransformerFactory/feature";
+ 
+   /**
+    * Factory feature indicating that this factory can create new XMLFilters.
+    */
+   public static final String FEATURE_XMLFILTER =
+     "http://javax.xml.transform.sax.SAXTransformerFactory/feature/xmlfilter";
+ 
+   protected SAXTransformerFactory()
+   {
+   }
+ 
+   /**
+    * Returns a content handler that can process SAX events into a result,
+    * using the specified transformation.
+    * @param src the source stylesheet
+    */
+   public abstract TransformerHandler newTransformerHandler(Source src)
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Returns a content handler that can process SAX events into a result,
+    * using the specified transformation.
+    * @param templates the compiled stylesheet
+    */
+   public abstract TransformerHandler newTransformerHandler(Templates templates)
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Returns a content handler that can process SAX events into a result,
+    * using the identity transform.
+    */
+   public abstract TransformerHandler newTransformerHandler()
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Returns a content handler that can process SAX events into a
+    * transformation template.
+    */
+   public abstract TemplatesHandler newTemplatesHandler()
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Creates an XML filter for the specified source.
+    */
+   public abstract XMLFilter newXMLFilter(Source src)
+     throws TransformerConfigurationException;
+ 
+   /**
+    * Creates an XML filter for the specified compiled stylesheet.
+    */
+   public abstract XMLFilter newXMLFilter(Templates templates)
+     throws TransformerConfigurationException;
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/sax/TemplatesHandler.java gcc-4.0.0/libjava/javax/xml/transform/sax/TemplatesHandler.java
*** gcc-3.4.3/libjava/javax/xml/transform/sax/TemplatesHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/sax/TemplatesHandler.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,68 ----
+ /* TemplatesHandler.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.sax;
+ 
+ import javax.xml.transform.Templates;
+ import org.xml.sax.ContentHandler;
+ 
+ /**
+  * A content handler that processes SAX parse events into a compiled
+  * transformation template.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public interface TemplatesHandler
+   extends ContentHandler
+ {
+ 
+   /**
+    * Returns the templates object created by the parsing of the SAX events.
+    */
+   public Templates getTemplates();
+ 
+   /**
+    * Sets the system ID for the templates object created by this processor.
+    */
+   public void setSystemId(String systemId);
+ 
+   /**
+    * Returns the system ID for the templates object created by this processor.
+    */
+   public String getSystemId();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/sax/TransformerHandler.java gcc-4.0.0/libjava/javax/xml/transform/sax/TransformerHandler.java
*** gcc-3.4.3/libjava/javax/xml/transform/sax/TransformerHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/sax/TransformerHandler.java	Thu Feb 17 07:48:57 2005
***************
*** 0 ****
--- 1,78 ----
+ /* TransformerHandler.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.sax;
+ 
+ import javax.xml.transform.Result;
+ import javax.xml.transform.Transformer;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.DTDHandler;
+ import org.xml.sax.ext.LexicalHandler;
+ 
+ /**
+  * A content handler that transforms SAX events into a result tree.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public interface TransformerHandler
+   extends ContentHandler, LexicalHandler, DTDHandler
+ {
+   
+   /**
+    * Sets the result sink to be used as the output of the transformation.
+    * @exception IllegalArgumentException if the result is not a valid target
+    */
+   public void setResult(Result result) 
+     throws IllegalArgumentException;
+ 
+   /**
+    * Sets the system ID relative to which URLs will be resolved.
+    */
+   public void setSystemId(String systemID);
+ 
+   /**
+    * Returns the system ID relative to which URLs will be resolved.
+    */
+   public String getSystemId();
+ 
+   /**
+    * Returns the transformer associated with this handler in order to set
+    * parameters and output properties.
+    */
+   public Transformer getTransformer();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/sax/package.html gcc-4.0.0/libjava/javax/xml/transform/sax/package.html
*** gcc-3.4.3/libjava/javax/xml/transform/sax/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/sax/package.html	Wed Feb  2 00:42:15 2005
***************
*** 0 ****
--- 1,9 ----
+ <html><head>trax for sax</head><body>
+ 
+ <p>Support for SAX2-based XSLT transformers.
+ Normally you would cast a TransformerFactory to a
+ <a href="SAXTransformerFactory.html">SAXTransformerFactory</a>
+ and use that to in any of the various modes supported
+ (such as push or pull).
+ 
+ </body></html>
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/stream/StreamResult.java gcc-4.0.0/libjava/javax/xml/transform/stream/StreamResult.java
*** gcc-3.4.3/libjava/javax/xml/transform/stream/StreamResult.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/stream/StreamResult.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,173 ----
+ /* StreamResult.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.stream;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.Writer;
+ import javax.xml.transform.Result;
+ 
+ /**
+  * Specifies a stream to which to write the transformation result.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class StreamResult
+   implements Result
+ {
+ 
+   /**
+    * Factory feature indicating that stream results are supported.
+    */
+   public static final String FEATURE =
+     "http://javax.xml.transform.stream.StreamResult/feature";
+ 
+   private String systemId;
+   private OutputStream outputStream;
+   private Writer writer;
+ 
+   /**
+    * Default constructor.
+    */
+   public StreamResult()
+   {
+   }
+ 
+   /**
+    * Constructor with an output stream.
+    */
+   public StreamResult(OutputStream stream)
+   {
+     this.outputStream = stream;
+   }
+ 
+   /**
+    * Constructor with a writer.
+    * Prefer to use an output stream rather than a writer, so that the
+    * output encoding can be controlled by transformation properties.
+    */
+   public StreamResult(Writer writer)
+   {
+     this.writer = writer;
+   }
+ 
+   /**
+    * Constructor with a system ID.
+    */
+   public StreamResult(String systemID)
+   {
+     this.systemId = systemID;
+   }
+ 
+   /**
+    * Constructor with a system ID specified as a File object.
+    */
+   public StreamResult(File file)
+   {
+     setSystemId(file);
+   }
+ 
+   /**
+    * Sets the target output stream.
+    */
+   public void setOutputStream(OutputStream outputStream)
+   {
+     this.outputStream = outputStream;
+   }
+ 
+   /**
+    * Returns the target output stream.
+    */
+   public OutputStream getOutputStream()
+   {
+     return outputStream;
+   }
+ 
+   /**
+    * Sets the target writer.
+    * Prefer to use an output stream rather than a writer, so that the
+    * output encoding can be controlled by transformation properties.
+    */
+   public void setWriter(Writer writer)
+   {
+     this.writer = writer;
+   }
+ 
+   /**
+    * Returns the target writer.
+    */
+   public Writer getWriter()
+   {
+     return writer;
+   }
+ 
+   /**
+    * Sets the system ID.
+    * If neither the out stream nor the writer have been specified, the
+    * system ID will be treated as a URL for writing to.
+    */
+   public void setSystemId(String systemID)
+   {
+     this.systemId = systemID;
+   }
+ 
+   /**
+    * Sets the system ID from a File reference.
+    */
+   public void setSystemId(File f)
+   {
+     try
+       {
+         systemId = f.toURL().toString();
+       }
+     catch (IOException e)
+       {
+         throw new RuntimeException(e.getMessage(), e);
+       }
+   }
+ 
+   /**
+    * Returns the system ID.
+    */
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/stream/StreamSource.java gcc-4.0.0/libjava/javax/xml/transform/stream/StreamSource.java
*** gcc-3.4.3/libjava/javax/xml/transform/stream/StreamSource.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/stream/StreamSource.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,210 ----
+ /* StreamSource.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.transform.stream;
+ 
+ import java.io.File;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.Reader;
+ import javax.xml.transform.Source;
+ 
+ /**
+  * Specifies a stream from which to read the source XML data.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  */
+ public class StreamSource
+   implements Source
+ {
+ 
+   /**
+    * Factory feature indicating that stream sources are supported.
+    */
+   public static final String FEATURE =
+     "http://javax.xml.transform.stream.StreamSource/feature";
+ 
+   private String publicId;
+   private String systemId;
+   private InputStream inputStream;
+   private Reader reader;
+ 
+   /**
+    * Default constructor.
+    */
+   public StreamSource()
+   {
+   }
+ 
+   /**
+    * Constructor with an input stream.
+    */
+   public StreamSource(InputStream stream)
+   {
+     this.inputStream = stream;
+   }
+ 
+   /**
+    * Constructor with an input stream and system ID.
+    */
+   public StreamSource(InputStream stream, String systemId)
+   {
+     this.inputStream = stream;
+     this.systemId = systemId;
+   }
+ 
+   /**
+    * Constructor with a reader.
+    * Prefer an input stream to a reader, so that the parser can use the
+    * character encoding specified in the XML.
+    */
+   public StreamSource(Reader reader)
+   {
+     this.reader = reader;
+   }
+ 
+   /**
+    * Constructor with a reader and system ID.
+    * Prefer an input stream to a reader, so that the parser can use the
+    * character encoding specified in the XML.
+    */
+   public StreamSource(Reader reader, String systemId)
+   {
+     this.reader = reader;
+     this.systemId = systemId;
+   }
+ 
+   /**
+    * Constructor with a system ID.
+    */
+   public StreamSource(String systemId)
+   {
+     this.systemId = systemId;
+   }
+ 
+   /**
+    * Constructor with a system ID specified as a File reference.
+    */
+   public StreamSource(File file)
+   {
+     setSystemId(file);
+   }
+ 
+   /**
+    * Sets the source input stream.
+    */
+   public void setInputStream(InputStream stream)
+   {
+     this.inputStream = stream;
+   }
+ 
+   /**
+    * Returns the source input stream.
+    */
+   public InputStream getInputStream()
+   {
+     return inputStream;
+   }
+ 
+   /**
+    * Sets the source reader.
+    * Prefer an input stream to a reader, so that the parser can use the
+    * character encoding specified in the XML.
+    */
+   public void setReader(Reader reader)
+   {
+     this.reader = reader;
+   }
+ 
+   /**
+    * Returns the source reader.
+    */
+   public Reader getReader()
+   {
+     return reader;
+   }
+ 
+   /**
+    * Sets the public ID for this source.
+    */
+   public void setPublicId(String publicId)
+   {
+     this.publicId = publicId;
+   }
+ 
+   /**
+    * Returns the public ID for this source.
+    */
+   public String getPublicId()
+   {
+     return publicId;
+   }
+ 
+   /**
+    * Sets the system ID for this source.
+    * If the input stream and reader are absent, the system ID will be used
+    * as a readable URL to locate the source data.
+    */
+   public void setSystemId(String systemId)
+   {
+     this.systemId = systemId;
+   }
+ 
+   /**
+    * Returns the system ID for this source.
+    */
+   public String getSystemId()
+   {
+     return systemId;
+   }
+ 
+   /**
+    * Sets the system ID using a File reference.
+    */
+   public void setSystemId(File f)
+   {
+     try
+       {
+         this.systemId = f.toURL().toString();
+       }
+     catch (IOException e)
+       {
+         throw new RuntimeException(e.getMessage(), e);
+       }
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/transform/stream/package.html gcc-4.0.0/libjava/javax/xml/transform/stream/package.html
*** gcc-3.4.3/libjava/javax/xml/transform/stream/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/transform/stream/package.html	Wed Feb  2 00:42:16 2005
***************
*** 0 ****
--- 1,6 ----
+ <html><head>trax for streams</head><body>
+ 
+ <p>Support for text stream inputs and outputs to transformers.
+ 
+ </body></html>
+ 
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/validation/Schema.java gcc-4.0.0/libjava/javax/xml/validation/Schema.java
*** gcc-3.4.3/libjava/javax/xml/validation/Schema.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/validation/Schema.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,61 ----
+ /* Schema.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.validation;
+ 
+ /**
+  * An immutable grammar.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public abstract class Schema
+ {
+ 
+   protected Schema()
+   {
+   }
+ 
+   /**
+    * Returns a new validator that can check the set of constraints this
+    * schema represents.
+    */
+   public abstract Validator newValidator();
+ 
+   public abstract ValidatorHandler newValidatorHandler();
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/validation/SchemaFactory.java gcc-4.0.0/libjava/javax/xml/validation/SchemaFactory.java
*** gcc-3.4.3/libjava/javax/xml/validation/SchemaFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/validation/SchemaFactory.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,168 ----
+ /* SchemaFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.validation;
+ 
+ import java.io.File;
+ import java.net.URL;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.stream.StreamSource;
+ import org.w3c.dom.ls.LSResourceResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXNotSupportedException;
+ 
+ /**
+  * Factory for obtaining schemata.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public abstract class SchemaFactory
+ {
+ 
+   ErrorHandler errorHandler;
+ 
+   protected SchemaFactory()
+   {
+   }
+ 
+   /**
+    * Returns an implementation of <code>SchemaFactory</code> that supports
+    * the specified schema language.
+    * @param schemaLanguage the URI of a schema language (see
+    * <code>XMLConstants</code>)
+    */
+   public static final SchemaFactory newInstance(String schemaLanguage)
+   {
+     // TODO
+     throw new IllegalArgumentException(schemaLanguage);
+   }
+ 
+   /**
+    * Indicates whether the specified schema language is supported.
+    * @param schemaLanguage the URI of a schema language (see
+    * <code>XMLConstants</code>)
+    */
+   public abstract boolean isSchemaLanguageSupported(String schemaLanguage);
+ 
+   public boolean getFeature(String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public void setFeature(String name, boolean value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public Object getProperty(String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public void setProperty(String name, Object value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public ErrorHandler getErrorHandler()
+   {
+     return errorHandler;
+   }
+   
+   public void setErrorHandler(ErrorHandler errorHandler)
+   {
+     this.errorHandler = errorHandler;
+   }
+ 
+   public abstract LSResourceResolver getResourceResolver();
+ 
+   public abstract void setResourceResolver(LSResourceResolver resourceResolver);
+   
+   /**
+    * Returns a schema based on the specified source resource.
+    * @param schema the source resource
+    */
+   public Schema newSchema(Source schema)
+     throws SAXException
+   {
+     return newSchema(new Source[] { schema });
+   }
+ 
+   /**
+    * Returns a schema based on the specified source file.
+    * @param schema the source resource
+    */
+   public Schema newSchema(File schema)
+     throws SAXException
+   {
+     return newSchema(new StreamSource(schema));
+   }
+   
+   /**
+    * Returns a schema based on the specified URL.
+    * @param schema the source resource
+    */
+   public Schema newSchema(URL schema)
+     throws SAXException
+   {
+     return newSchema(new StreamSource(schema.toString()));
+   }
+   
+   /**
+    * Parses the specified sources, and combine them into a single schema.
+    * The exact procedure and semantics of this depends on the schema
+    * language.
+    * @param schemata the schema resources to load
+    */
+   public abstract Schema newSchema(Source[] schemata)
+     throws SAXException;
+   
+   /**
+    * Creates a special schema.
+    * The exact semantics of this depends on the schema language.
+    */
+   public abstract Schema newSchema()
+     throws SAXException;
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/validation/TypeInfoProvider.java gcc-4.0.0/libjava/javax/xml/validation/TypeInfoProvider.java
*** gcc-3.4.3/libjava/javax/xml/validation/TypeInfoProvider.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/validation/TypeInfoProvider.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,83 ----
+ /* TypeInfoProvider.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.validation;
+ 
+ import org.w3c.dom.TypeInfo;
+ 
+ /**
+  * Provides access to the PSVI type info supplied by
+  * <code>ValidatorHandler</code>.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public abstract class TypeInfoProvider
+ {
+ 
+   protected TypeInfoProvider()
+   {
+   }
+ 
+   /**
+    * Returns the type information for the current element.
+    */
+   public abstract TypeInfo getElementTypeInfo();
+ 
+   /**
+    * Returns the type information for the specified attribute of the current
+    * element.
+    * @param index the attribute index as for the Attributes object passed to
+    * the startElement callback
+    */
+   public abstract TypeInfo getAttributeTypeInfo(int index);
+ 
+   /**
+    * Indicates if the attribute at the specified index is of the ID type.
+    * @param index the attribute index as for the Attributes object passed to
+    * the startElement callback
+    */
+   public abstract boolean isIdAttribute(int index);
+ 
+   /**
+    * Returns false if the attribute was defaulted (added by the validator).
+    * @param index the attribute index as for the Attributes object passed to
+    * the startElement callback
+    */
+   public abstract boolean isSpecified(int index);
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/validation/Validator.java gcc-4.0.0/libjava/javax/xml/validation/Validator.java
*** gcc-3.4.3/libjava/javax/xml/validation/Validator.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/validation/Validator.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,117 ----
+ /* Validator.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.validation;
+ 
+ import java.io.IOException;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.Result;
+ import org.w3c.dom.ls.LSResourceResolver;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXNotSupportedException;
+ 
+ /**
+  * A processor that validates a document against a schema.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public abstract class Validator
+ {
+ 
+   protected Validator()
+   {
+   }
+ 
+   /**
+    * Reset this validator to its original state.
+    */
+   public abstract void reset();
+ 
+   /**
+    * Validate the specified input.
+    * @param source the document to validate
+    */
+   public void validate(Source source)
+     throws SAXException, IOException
+   {
+     validate(source, null);
+   }
+ 
+   /**
+    * Validate the specified input.
+    * @param source the document to validate
+    * @param result the PSVI document to output
+    */
+   public abstract void validate(Source source, Result result)
+     throws SAXException, IOException;
+   
+   public abstract void setErrorHandler(ErrorHandler errorHandler);
+ 
+   public abstract ErrorHandler getErrorHandler();
+ 
+   public abstract void setResourceResolver(LSResourceResolver resourceResolver);
+ 
+   public abstract LSResourceResolver getResourceResolver();
+ 
+   public boolean getFeature(String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public void setFeature(String name, boolean value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public Object getProperty(String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public void setProperty(String name, Object value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/validation/ValidatorHandler.java gcc-4.0.0/libjava/javax/xml/validation/ValidatorHandler.java
*** gcc-3.4.3/libjava/javax/xml/validation/ValidatorHandler.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/validation/ValidatorHandler.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,115 ----
+ /* ValidatorHandler.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.validation;
+ 
+ import org.w3c.dom.ls.LSResourceResolver;
+ import org.xml.sax.ContentHandler;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXNotRecognizedException;
+ import org.xml.sax.SAXNotSupportedException;
+ 
+ /**
+  * A streaming validator that operates on a SAX event stream.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public abstract class ValidatorHandler
+   implements ContentHandler
+ {
+ 
+   static final String NS_FEATURE =
+     "http://xml.org/sax/features/namespace-prefixes";
+ 
+   protected ValidatorHandler()
+   {
+   }
+ 
+   /**
+    * Sets the ContentHandler to receive PSVI SAX events.
+    */
+   public abstract void setContentHandler(ContentHandler receiver);
+ 
+   /**
+    * Returns the ContentHandler to receive PSVI SAX events.
+    */
+   public abstract ContentHandler getContentHandler();
+ 
+   public abstract void setErrorHandler(ErrorHandler errorHandler);
+ 
+   public abstract ErrorHandler getErrorHandler();
+   
+   public abstract void setResourceResolver(LSResourceResolver resourceResolver);
+ 
+   public abstract LSResourceResolver getResourceResolver();
+ 
+   public abstract TypeInfoProvider getTypeInfoProvider();
+ 
+   public boolean getFeature(String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     if (name.equals(NS_FEATURE))
+       {
+         return true;
+       }
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public void setFeature(String name, boolean value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     if (name.equals(NS_FEATURE))
+       {
+         throw new SAXNotSupportedException();
+       }
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public Object getProperty(String name)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+   
+   public void setProperty(String name, Object value)
+     throws SAXNotRecognizedException, SAXNotSupportedException
+   {
+     throw new SAXNotRecognizedException(name);
+   }
+     
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/validation/package.html gcc-4.0.0/libjava/javax/xml/validation/package.html
*** gcc-3.4.3/libjava/javax/xml/validation/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/validation/package.html	Wed Feb  2 00:42:16 2005
***************
*** 0 ****
--- 1,9 ----
+ <html>
+ <body>
+ 
+ <div>
+ API for the validation of XML documents using a range of schema languages.
+ </div>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPath.java gcc-4.0.0/libjava/javax/xml/xpath/XPath.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPath.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPath.java	Wed Feb  2 00:42:17 2005
***************
*** 0 ****
--- 1,115 ----
+ /* XPath.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ import javax.xml.namespace.NamespaceContext;
+ import javax.xml.namespace.QName;
+ import org.xml.sax.InputSource;
+ 
+ /**
+  * Interface to the XPath evaluation environment.
+  * @since 1.3
+  */
+ public interface XPath
+ {
+ 
+   /**
+    * Resets the environment.
+    */
+   void reset();
+ 
+   void setXPathVariableResolver(XPathVariableResolver resolver);
+ 
+   XPathVariableResolver getXPathVariableResolver();
+ 
+   void setXPathFunctionResolver(XPathFunctionResolver resolver);
+ 
+   XPathFunctionResolver getXPathFunctionResolver();
+ 
+   void setNamespaceContext(NamespaceContext nsContext);
+ 
+   NamespaceContext getNamespaceContext();
+ 
+   /**
+    * Compiles an XPath expression for future evaluation.
+    * @param expression the expression
+    */
+   XPathExpression compile(String expression)
+     throws XPathExpressionException;
+ 
+   /**
+    * Evaluates an expression.
+    * @param expression the expression
+    * @param item the expression context
+    * @param returnType the desired return type
+    */
+   Object evaluate(String expression,
+                   Object item,
+                   QName returnType)
+     throws XPathExpressionException;
+ 
+   /**
+    * Evaluates an expression and returns the result as a string.
+    * @param expression the expression
+    * @param item the expression context
+    */
+   String evaluate(String expression,
+                   Object item)
+     throws XPathExpressionException;
+ 
+   /**
+    * Evaluates an expression.
+    * @param expression the expression
+    * @param source the source to load the expression context from
+    * @param returnType the desired return type
+    */
+   Object evaluate(String expression,
+                   InputSource source,
+                   QName returnType)
+     throws XPathExpressionException;
+ 
+   /**
+    * Evaluates an expression and returns the result as a string.
+    * @param expression the expression
+    * @param source the source to load the expression context from
+    */
+   String evaluate(String expression,
+                   InputSource source)
+     throws XPathExpressionException;
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathConstants.java gcc-4.0.0/libjava/javax/xml/xpath/XPathConstants.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathConstants.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathConstants.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,87 ----
+ /* XPathConstants.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ 
+ /**
+  * XPath constants.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public class XPathConstants
+ {
+ 
+   /**
+    * The XPath 1.0 number data type.
+    */
+   public static final QName NUMBER =
+     new QName("http://java.sun.com/jaxp/xpath/dom#number", "");
+   
+   /**
+    * The XPath 1.0 string data type.
+    */
+   public static final QName STRING =
+     new QName("http://java.sun.com/jaxp/xpath/dom#string", "");
+   
+   /**
+    * The XPath 1.0 boolean data type.
+    */
+   public static final QName BOOLEAN =
+     new QName("http://java.sun.com/jaxp/xpath/dom#boolean", "");
+   
+   /**
+    * The XPath 1.0 node-set data type.
+    */
+   public static final QName NODESET =
+     new QName("http://java.sun.com/jaxp/xpath/dom#node-set", "");
+   
+   /**
+    * The XPath 1.0 node data type.
+    */
+   public static final QName NODE =
+     new QName("http://java.sun.com/jaxp/xpath/dom#node", "");
+ 
+   /**
+    * The URL for the JAXP DOM object model.
+    */
+   public static final String DOM_OBJECT_MODEL =
+     "http://java.sun.com/jaxp/xpath/dom";
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathException.java gcc-4.0.0/libjava/javax/xml/xpath/XPathException.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathException.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,86 ----
+ /* XPathException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ 
+ /**
+  * A generic XPath exception.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public class XPathException
+   extends Exception
+ {
+ 
+   Throwable cause;
+ 
+   public XPathException(String message)
+   {
+     super(message);
+   }
+   
+   public XPathException(Throwable cause)
+   {
+     super(cause);
+     this.cause = cause;
+   }
+ 
+   public Throwable getCause()
+   {
+     return cause;
+   }
+ 
+   public void printStackTrace()
+   {
+     super.printStackTrace();
+   }
+ 
+   public void printStackTrace(PrintStream out)
+   {
+     super.printStackTrace(out);
+   }
+ 
+   public void printStackTrace(PrintWriter out)
+   {
+     super.printStackTrace(out);
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathExpression.java gcc-4.0.0/libjava/javax/xml/xpath/XPathExpression.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathExpression.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathExpression.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,86 ----
+ /* XPathExpression.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ import org.xml.sax.InputSource;
+ 
+ /**
+  * An XPath expression.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public interface XPathExpression
+ {
+ 
+   /**
+    * Evaluates this expression against the specified context.
+    * @param item the evaluation context
+    * @param returnType the desired return type
+    */
+   Object evaluate(Object item,
+                   QName returnType)
+     throws XPathExpressionException;
+ 
+   /**
+    * Evaluates this expression against the specified context, returning the
+    * result as a string.
+    * @param item the evaluation context
+    */
+   String evaluate(Object item)
+     throws XPathExpressionException;
+ 
+   /**
+    * Evaluates this expression against the specified context.
+    * @param source the source to load the context from
+    * @param returnType the desired return type
+    */
+   Object evaluate(InputSource source,
+                   QName returnType)
+     throws XPathExpressionException;
+ 
+   /**
+    * Evaluates this expression against the specified context, returning the
+    * result as a string.
+    * @param source the source to load the context from
+    */
+   String evaluate(InputSource source)
+     throws XPathExpressionException;
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathExpressionException.java gcc-4.0.0/libjava/javax/xml/xpath/XPathExpressionException.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathExpressionException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathExpressionException.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,60 ----
+ /* XPathExpressionException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ /**
+  * An exception in an XPath expression.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public class XPathExpressionException
+   extends XPathException
+ {
+ 
+   public XPathExpressionException(String message)
+   {
+     super(message);
+   }
+ 
+   public XPathExpressionException(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathFactory.java gcc-4.0.0/libjava/javax/xml/xpath/XPathFactory.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathFactory.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathFactory.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,227 ----
+ /* XPathFactory.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ import java.io.BufferedReader;
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.IOException;
+ import java.util.Properties;
+ 
+ /**
+  * Factory for creating XPath environments.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public abstract class XPathFactory
+ {
+ 
+   /**
+    * The default property name according to the JAXP specification.
+    */
+   public static final String DEFAULT_PROPERTY_NAME =
+ 	 	"javax.xml.xpath.XPathFactory";
+ 
+   /**
+    * The default object model URI.
+    */
+   public static final String DEFAULT_OBJECT_MODEL_URI =
+     XPathConstants.DOM_OBJECT_MODEL;
+ 
+   protected XPathFactory()
+   {
+   }
+ 
+   /**
+    * Returns a new factory for the default (DOM) object model.
+    */
+   public static final XPathFactory newInstance()
+   {
+     try
+       {
+         return newInstance(DEFAULT_OBJECT_MODEL_URI);
+       }
+     catch (XPathFactoryConfigurationException e)
+       {
+         throw new RuntimeException(e.getMessage());
+       }
+   }
+ 
+   /**
+    * Returns a new factory for the given object model URI.
+    * The implementation class to load is the first found in the following
+    * locations that advertises support for the given model URI:
+    * <ol>
+    * <li>the <code>javax.xml.xpath.XPathFactory</code> system property</li>
+    * <li>the above named property value in the
+    * <code><i>$JAVA_HOME</i>/lib/jaxp.properties</code> file</li>
+    * <li>the class name specified in the
+    * <code>META-INF/services/javax.xml.xpath.XPathFactory</code> system
+    * resource</li>
+    * <li>the default factory class</li>
+    * </ol>
+    * @param uri the object model URI
+    */
+   public static final XPathFactory newInstance(String uri)
+     throws XPathFactoryConfigurationException
+   {
+     ClassLoader loader = Thread.currentThread().getContextClassLoader();
+     if (loader == null)
+       {
+         loader = XPathFactory.class.getClassLoader();
+       }
+     String className = null;
+     int count = 0;
+     do
+       {
+         className = getFactoryClassName(loader, count++);
+         if (className != null)
+           {
+             try
+               {
+                 Class t = (loader != null) ? loader.loadClass(className) :
+                   Class.forName(className);
+                 XPathFactory ret = (XPathFactory) t.newInstance();
+                 if (ret.isObjectModelSupported(uri))
+                   {
+                     return ret;
+                   }
+                 className = null;
+               }
+             catch (ClassNotFoundException e)
+               {
+                 className = null;
+               }
+             catch (Exception e)
+               {
+                 throw new XPathFactoryConfigurationException(e);
+               }
+           }
+       }
+     while (className == null && count < 4);
+     String msg = "no factories with support for " + uri;
+     throw new XPathFactoryConfigurationException(msg);
+   }
+ 
+   private static String getFactoryClassName(ClassLoader loader, int attempt)
+   {
+     final String propertyName = DEFAULT_PROPERTY_NAME;
+     switch (attempt)
+       {
+         case 0:
+           return System.getProperty(propertyName);
+         case 1:
+           try
+             {
+               File file = new File(System.getProperty("java.home"));
+               file = new File(file, "lib");
+               file = new File(file, "jaxp.properties");
+               InputStream in = new FileInputStream(file);
+               Properties props = new Properties();
+               props.load(in);
+               in.close();
+               return props.getProperty(propertyName);
+             }
+           catch (IOException e)
+             {
+               return null;
+             }
+         case 2:
+           try
+             {
+               String serviceKey = "/META-INF/services/" + propertyName;
+               InputStream in = (loader != null) ?
+                 loader.getResourceAsStream(serviceKey) :
+                 XPathFactory.class.getResourceAsStream(serviceKey);
+               if (in != null)
+                 {
+                   BufferedReader r =
+                     new BufferedReader(new InputStreamReader(in));
+                   String ret = r.readLine();
+                   r.close();
+                   return ret;
+                 }
+             }
+           catch (IOException e)
+             {
+             }
+           return null;
+         case 3:
+           return "gnu.xml.xpath.XPathFactoryImpl";
+         default:
+           return null;
+       }
+   }
+ 
+   /**
+    * Indicates whether the specified object model URI is supported by
+    * this factory.
+    */
+   public abstract boolean isObjectModelSupported(String objectModel);
+ 
+   /**
+    * Sets the state of the named feature.
+    */
+   public abstract void setFeature(String name, boolean value)
+     throws XPathFactoryConfigurationException;
+ 
+   /**
+    * Returns the state of the named feature.
+    */
+   public abstract boolean getFeature(String name)
+     throws XPathFactoryConfigurationException;
+ 
+   /**
+    * Sets the XPath variable resolver calback.
+    */
+   public abstract void setXPathVariableResolver(XPathVariableResolver resolver);
+ 
+   /**
+    * Sets the XPath extension function resolver calback.
+    */
+   public abstract void setXPathFunctionResolver(XPathFunctionResolver resolver);
+ 
+   /**
+    * Returns a new XPath evaluation environment.
+    */
+   public abstract XPath newXPath();
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathFactoryConfigurationException.java gcc-4.0.0/libjava/javax/xml/xpath/XPathFactoryConfigurationException.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathFactoryConfigurationException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathFactoryConfigurationException.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,60 ----
+ /* XPathFactoryConfigurationException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ /**
+  * A configuration exception in an XPath factory environment.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public class XPathFactoryConfigurationException
+   extends XPathException
+ {
+ 
+   public XPathFactoryConfigurationException(String message)
+   {
+     super(message);
+   }
+ 
+   public XPathFactoryConfigurationException(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathFunction.java gcc-4.0.0/libjava/javax/xml/xpath/XPathFunction.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathFunction.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathFunction.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,58 ----
+ /* XPathFunction.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ import java.util.List;
+ 
+ /**
+  * An XPath extension function.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public interface XPathFunction
+ {
+ 
+   /**
+    * Evaluate the function with the specified arguments.
+    * @param args the list of arguments
+    */
+   Object evaluate(List args)
+     throws XPathFunctionException;
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathFunctionException.java gcc-4.0.0/libjava/javax/xml/xpath/XPathFunctionException.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathFunctionException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathFunctionException.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,60 ----
+ /* XPathFunctionException.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ /**
+  * An exception in an XPath function.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public class XPathFunctionException
+   extends XPathExpressionException
+ {
+ 
+   public XPathFunctionException(String message)
+   {
+     super(message);
+   }
+ 
+   public XPathFunctionException(Throwable cause)
+   {
+     super(cause);
+   }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathFunctionResolver.java gcc-4.0.0/libjava/javax/xml/xpath/XPathFunctionResolver.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathFunctionResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathFunctionResolver.java	Thu Feb 17 07:48:58 2005
***************
*** 0 ****
--- 1,59 ----
+ /* XPathFunctionResolver.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ 
+ /**
+  * Interface providing the means to access XPath extension functions.
+  *
+  * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
+  * @since 1.3
+  */
+ public interface XPathFunctionResolver
+ {
+ 
+   /**
+    * Returns the function with the specified name and arity.
+    * @param functionName the function name
+    * @param arity the number of arguments
+    */
+   XPathFunction resolveFunction(QName functionName,
+                                 int arity);
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/XPathVariableResolver.java gcc-4.0.0/libjava/javax/xml/xpath/XPathVariableResolver.java
*** gcc-3.4.3/libjava/javax/xml/xpath/XPathVariableResolver.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/XPathVariableResolver.java	Wed Feb  2 00:42:17 2005
***************
*** 0 ****
--- 1,52 ----
+ /* XPathVariableResolver.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, 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.xml.xpath;
+ 
+ import javax.xml.namespace.QName;
+ 
+ /**
+  * Interface providing the means to access the values of XPath variable
+  * references.
+  * @since 1.3
+  */
+ public interface XPathVariableResolver
+ {
+ 
+   Object resolveVariable(QName variableName);
+   
+ }
diff -Nrcpad gcc-3.4.3/libjava/javax/xml/xpath/package.html gcc-4.0.0/libjava/javax/xml/xpath/package.html
*** gcc-3.4.3/libjava/javax/xml/xpath/package.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/javax/xml/xpath/package.html	Wed Feb  2 00:42:17 2005
***************
*** 0 ****
--- 1,9 ----
+ <html>
+ <body>
+ 
+ <div>
+ This package provides access to an XPath evaluation environment and expressions.
+ </div>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/libjava/jawt.c gcc-4.0.0/libjava/jawt.c
*** gcc-3.4.3/libjava/jawt.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jawt.c	Mon Mar  7 19:58:40 2005
***************
*** 0 ****
--- 1,175 ----
+ /* jawt.c -- X11 implementation 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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
+ 
+ 
+ #include <jni.h>
+ #include <jawt.h>
+ #include <jawt_md.h>
+ #include "classpath_jawt.h"
+ 
+ static jint (JNICALL _Jv_Lock) (JAWT_DrawingSurface* surface);
+ static void (JNICALL _Jv_Unlock) (JAWT_DrawingSurface* surface);
+ static JAWT_DrawingSurfaceInfo* (JNICALL _Jv_GetDrawingSurfaceInfo)
+      (JAWT_DrawingSurface* surface);
+ static void (JNICALL _Jv_FreeDrawingSurfaceInfo)
+      (JAWT_DrawingSurfaceInfo* surface_info);
+ static JAWT_DrawingSurface* (JNICALL _Jv_GetDrawingSurface) (JNIEnv* env,
+ 							     jobject canvas);
+ static void (JNICALL _Jv_FreeDrawingSurface) (JAWT_DrawingSurface* surface);
+ static void (JNICALL _Jv_AWTLock) (JNIEnv*);
+ static void (JNICALL _Jv_AWTUnlock) (JNIEnv*);
+ 
+ JNIEXPORT jboolean JNICALL
+ JAWT_GetAWT (JNIEnv* env, JAWT* awt)
+ {
+   jint retrieved_version;
+ 
+   retrieved_version = classpath_jawt_get_awt_version ();
+ 
+   if (awt->version > retrieved_version)
+     return JNI_FALSE;
+ 
+   awt->GetDrawingSurface = _Jv_GetDrawingSurface;
+   awt->FreeDrawingSurface = _Jv_FreeDrawingSurface;
+   awt->Lock = _Jv_AWTLock;
+   awt->Unlock = _Jv_AWTUnlock;
+ 
+   return JNI_TRUE;
+ }
+ 
+ /* JAWT_DrawingSurface functions */
+ 
+ static jint
+ (JNICALL _Jv_Lock) (JAWT_DrawingSurface* surface)
+ {
+   /* lock the drawing surface */
+   return classpath_jawt_lock ();
+ }
+ 
+ static void
+ (JNICALL _Jv_Unlock) (JAWT_DrawingSurface* surface)
+ {
+   classpath_jawt_unlock ();
+ }
+ 
+ static JAWT_DrawingSurfaceInfo*
+ (JNICALL _Jv_GetDrawingSurfaceInfo) (JAWT_DrawingSurface* surface)
+ {
+   if (surface == NULL)
+     return NULL;
+ 
+   return surface->surface_info;
+ }
+ 
+ static void
+ (JNICALL _Jv_FreeDrawingSurfaceInfo) (JAWT_DrawingSurfaceInfo* surface_info)
+ {
+   JAWT_X11DrawingSurfaceInfo* surface_info_x11;
+ 
+   if (surface_info == NULL)
+     return;
+ 
+   surface_info_x11 = (JAWT_X11DrawingSurfaceInfo*) surface_info->platformInfo;
+ 
+   surface_info_x11->display = NULL;
+   surface_info_x11->drawable = 0;
+   surface_info_x11->visualID = 0;
+ 
+   free (surface_info);
+   surface_info = NULL;
+ }
+ 
+ /* JAWT functions */
+ 
+ static JAWT_DrawingSurface*
+ (JNICALL _Jv_GetDrawingSurface) (JNIEnv* env, jobject canvas)
+ {
+   JAWT_DrawingSurface* surface;
+   JAWT_X11DrawingSurfaceInfo* surface_info_x11;
+ 
+   surface = (JAWT_DrawingSurface*) malloc (sizeof (JAWT_DrawingSurface));
+ 
+   if (surface == NULL)
+     return NULL;
+ 
+   /* initialize function pointers */
+   surface->GetDrawingSurfaceInfo = _Jv_GetDrawingSurfaceInfo;
+   surface->FreeDrawingSurfaceInfo = _Jv_FreeDrawingSurfaceInfo;
+ 
+   surface->Lock = _Jv_Lock;
+   surface->Unlock = _Jv_Unlock;
+ 
+   surface->surface_info = (JAWT_DrawingSurfaceInfo*) malloc (sizeof (JAWT_DrawingSurfaceInfo));
+ 
+   if (surface->surface_info == NULL)
+     return NULL;
+ 
+   surface->surface_info->platformInfo = malloc (sizeof (JAWT_X11DrawingSurfaceInfo));
+ 
+   if (surface->surface_info->platformInfo == NULL)
+     return NULL;
+ 
+   surface_info_x11 = (JAWT_X11DrawingSurfaceInfo*) surface->surface_info->platformInfo;
+ 
+   surface_info_x11->display = classpath_jawt_get_default_display (env, canvas);
+   surface_info_x11->drawable = classpath_jawt_get_drawable (env, canvas);
+   surface_info_x11->visualID = classpath_jawt_get_visualID (env, canvas);
+ 
+   /* FIXME: also include bounding rectangle of drawing surface */
+   /* FIXME: also include current clipping region */
+ 
+   return surface;
+ }
+ 
+ static void
+ (JNICALL _Jv_FreeDrawingSurface) (JAWT_DrawingSurface* surface)
+ {
+   free (surface);
+ }
+ 
+ static void
+ (JNICALL _Jv_AWTLock) (JNIEnv* env)
+ {
+   classpath_jawt_lock ();
+ }
+ 
+ static void
+ (JNICALL _Jv_AWTUnlock) (JNIEnv* env)
+ {
+   classpath_jawt_unlock ();
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/jni/classpath/classpath_jawt.h gcc-4.0.0/libjava/jni/classpath/classpath_jawt.h
*** gcc-3.4.3/libjava/jni/classpath/classpath_jawt.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/classpath/classpath_jawt.h	Mon Mar  7 19:58:41 2005
***************
*** 0 ****
--- 1,60 ----
+ /* classpath_awt.h -- libjawt's interface to the peer library
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+    This file is part of GNU Classpath.
+ 
+    GNU Classpath is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+  
+    GNU Classpath is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GNU Classpath; see the file COPYING.  If not, write to the
+    Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
+ 
+ /*
+  * libjawt.so is linked directly to the peer library with -l.  This
+  * header declares all the functions that libjawt.so needs -- X-based
+  * peer libraries wanting to support libjawt.so must implement these
+  * functions.
+  */
+ 
+ #ifndef __classpath_jawt_h__
+ #define __classpath_jawt_h__
+ 
+ #include <jni.h>
+ #include <X11/Xlib.h>
+ 
+ #define CLASSPATH_JAWT_VERSION 0x10004
+ 
+ jint     classpath_jawt_get_awt_version ();
+ Display* classpath_jawt_get_default_display (JNIEnv* env, jobject canvas);
+ Drawable classpath_jawt_get_drawable (JNIEnv* env, jobject canvas);
+ VisualID classpath_jawt_get_visualID (JNIEnv* env, jobject canvas);
+ jint     classpath_jawt_lock ();
+ void     classpath_jawt_unlock ();
+ 
+ #endif /* __classpath_jawt_h__ */
diff -Nrcpad gcc-3.4.3/libjava/jni/classpath/jcl.c gcc-4.0.0/libjava/jni/classpath/jcl.c
*** gcc-3.4.3/libjava/jni/classpath/jcl.c	Wed Oct  8 15:49:32 2003
--- gcc-4.0.0/libjava/jni/classpath/jcl.c	Thu Jan  1 00:00:00 1970
***************
*** 1,140 ****
- /* jcl.c
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you are not
- obligated to do so.  If you do not wish to do so, delete this
- exception statement from your version. */
- 
- #include <stdio.h>
- #include <jcl.h>
- #include <malloc.h>
- 
- #ifndef __GNUC__
- #define __attribute__(x) /* nothing */
- #endif
- 
- static char errstr[4098]; // this way the memory is pre-allocated, so that we do not have to worry if we are out of memory.
- 
- JNIEXPORT void JNICALL JCL_ThrowException(JNIEnv * env, char * className, char * errMsg) {
- 	jclass excClass;
- 	if((*env)->ExceptionOccurred(env)) {
- 		(*env)->ExceptionClear(env);
- 	}
- 	excClass = (*env)->FindClass(env, className);
- 	if(excClass == NULL) {
- 		jclass errExcClass;
- 		errExcClass = (*env)->FindClass(env, "java/lang/ClassNotFoundException");
- 		if(errExcClass == NULL) {
- 			errExcClass = (*env)->FindClass(env, "java/lang/InternalError");
- 			if(errExcClass == NULL) {
- 				sprintf(errstr,"JCL: Utterly failed to throw exeption %s with message %s.",className,errMsg);
- 				fprintf(stderr, errstr);
- 				return;
- 			}
- 		}
- 		sprintf(errstr,"JCL: Failed to throw exception %s with message %s: could not find exception class.", className, errMsg);
- 		(*env)->ThrowNew(env, errExcClass, errstr);
- 	}
- 	(*env)->ThrowNew(env, excClass, errMsg);
- }
- 
- JNIEXPORT void * JNICALL JCL_malloc(JNIEnv * env, size_t size) {
- 	void * mem = malloc(size);
- 	if(mem == NULL) {
- 		JCL_ThrowException(env, "java/lang/OutOfMemoryError", "malloc() failed.");
- 		return NULL;
- 	}
- 	return mem;
- }
- 
- JNIEXPORT void * JNICALL JCL_realloc(JNIEnv *env, void *ptr, size_t size)
- {
-   ptr = realloc(ptr, size);
-   if (ptr == 0)
-     {
-       JCL_ThrowException(env, "java/lang/OutOfMemoryError",
-                              "malloc() failed.");
-       return NULL;
-     }
-   return(ptr);
- }
- 
- JNIEXPORT void JNICALL JCL_free(JNIEnv * env __attribute__((unused)),
- 				void * p)
- {
- 	if(p != NULL) {
- 		free(p);
- 	}
- }
- 
- JNIEXPORT char * JNICALL JCL_jstring_to_cstring(JNIEnv * env, jstring s) {
- 	char* cstr;
- 	if(s == NULL) {
- 		JCL_ThrowException(env, "java/lang/NullPointerException","Null string");
- 		return NULL;
- 	}
- 	cstr = (char*)(*env)->GetStringUTFChars(env, s, NULL);
- 	if(cstr == NULL) {
- 		JCL_ThrowException(env, "java/lang/InternalError", "GetStringUTFChars() failed.");
- 		return NULL;
- 	}
- 	return cstr;
- }
- 
- JNIEXPORT void JNICALL JCL_free_cstring(JNIEnv * env, jstring s, char * cstr) {
- 	(*env)->ReleaseStringUTFChars(env, s, cstr);
- }
- 
- JNIEXPORT jint JNICALL JCL_MonitorEnter(JNIEnv * env, jobject o) {
- 	jint retval = (*env)->MonitorEnter(env,o);
- 	if(retval != 0) {
- 		JCL_ThrowException(env, "java/lang/InternalError", "MonitorEnter() failed.");
- 	}
- 	return retval;
- }
- 
- JNIEXPORT jint JNICALL JCL_MonitorExit(JNIEnv * env, jobject o) {
- 	jint retval = (*env)->MonitorExit(env,o);
- 	if(retval != 0) {
- 		JCL_ThrowException(env, "java/lang/InternalError", "MonitorExit() failed.");
- 	}
- 	return retval;
- }
- 
- JNIEXPORT jclass JNICALL JCL_FindClass(JNIEnv * env, char * className) {
- 	jclass retval = (*env)->FindClass(env,className);
- 	if(retval == NULL) {
- 		JCL_ThrowException(env, "java/lang/ClassNotFoundException", className);
- 	}
- 	return retval;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/classpath/jcl.h gcc-4.0.0/libjava/jni/classpath/jcl.h
*** gcc-3.4.3/libjava/jni/classpath/jcl.h	Fri Jan 31 17:54:14 2003
--- gcc-4.0.0/libjava/jni/classpath/jcl.h	Thu Jan  1 00:00:00 1970
***************
*** 1,64 ****
- /* jcl.h
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the 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 __JCL_H__
- #define __JCL_H__
- 
- #include <stddef.h>
- #include <jni.h>
- #include <config.h>
- 
- JNIEXPORT jclass JNICALL JCL_FindClass(JNIEnv * env, char * className);
- JNIEXPORT void JNICALL JCL_ThrowException(JNIEnv * env, char * className, char * errMsg);
- JNIEXPORT void * JNICALL JCL_malloc(JNIEnv *env, size_t size);
- JNIEXPORT void * JNICALL JCL_realloc(JNIEnv *env, void *ptr, size_t size);
- JNIEXPORT void JNICALL JCL_free(JNIEnv *env, void * p);
- JNIEXPORT char * JNICALL JCL_jstring_to_cstring(JNIEnv *env, jstring s);
- JNIEXPORT void JNICALL JCL_free_cstring(JNIEnv *env, jstring s, char * cstr);
- JNIEXPORT jint JNICALL JCL_MonitorEnter(JNIEnv *env, jobject o);
- JNIEXPORT jint JNICALL JCL_MonitorExit(JNIEnv *env, jobject o);
- 
- #define JCL_RETHROW_EXCEPTION(env) if((*(env))->ExceptionOccurred((env)) != NULL) return NULL;
- 
- /* Simple debug macro */
- #ifdef DEBUG
- #define DBG(x) fprintf(stderr, (x));
- #else
- #define DBG(x)
- #endif
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/classpath/jnilink.c gcc-4.0.0/libjava/jni/classpath/jnilink.c
*** gcc-3.4.3/libjava/jni/classpath/jnilink.c	Fri Jan 31 17:54:14 2003
--- gcc-4.0.0/libjava/jni/classpath/jnilink.c	Thu Jan  1 00:00:00 1970
***************
*** 1,117 ****
- /* JNILINK 1.1: JNI version.
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you are not
- obligated to do so.  If you do not wish to do so, delete this
- exception statement from your version. */
- 
- 
- #include "jnilink.h"
- #include <string.h>
- #include <jcl.h>
- 
- #include <malloc.h>
- 
- #define GETCLASS(c) *(jclass*)(c)
- 
- JNIEXPORT jclass JNICALL
- LINK_RelinkClass     (JNIEnv * env, linkedClass * c, char * name) {
- 	jclass found;
- 	LINK_UnlinkClass(env,*c);
- 
- 	found = (*env)->FindClass(env,name);
- 	if(found == NULL)
- 		return NULL;
- 
- 	*c = JCL_malloc(env,sizeof(jclass));
- 	if(*c == NULL)
- 		return NULL;
- 
- 	GETCLASS(*c) = (*env)->NewGlobalRef(env,found);
- 	return GETCLASS(*c);
- }
- 
- JNIEXPORT jclass JNICALL
- LINK_RelinkKnownClass(JNIEnv * env, linkedClass * c, jclass newClass) {
- 	LINK_UnlinkClass(env,*c);
- 
- 	*c = JCL_malloc(env,sizeof(jclass));
- 	if(*c == NULL)
- 		return NULL;
- 
- 	GETCLASS(*c) = (*env)->NewGlobalRef(env,newClass);
- 	return newClass;
- }
- 
- JNIEXPORT jmethodID JNICALL
- LINK_RelinkMethod      (JNIEnv * env, jmethodID * m, linkedClass c,
-                         char * name, char * sig) {
- 	*m = (*env)->GetMethodID(env,GETCLASS(c),name,sig);
- 	return *m;
- }
- 
- JNIEXPORT jmethodID JNICALL
- LINK_RelinkStaticMethod(JNIEnv * env, jmethodID * m, linkedClass c,
-                         char * name, char * sig) {
- 	*m = (*env)->GetStaticMethodID(env,GETCLASS(c),name,sig);
- 	return *m;
- }
- 
- JNIEXPORT jfieldID JNICALL
- LINK_RelinkField       (JNIEnv * env, jfieldID * f, linkedClass c,
-                         char * name, char * sig) {
- 	*f = (*env)->GetFieldID(env,GETCLASS(c),name,sig);
- 	return *f;
- }
- 
- JNIEXPORT jfieldID JNICALL
- LINK_RelinkStaticField (JNIEnv * env, jfieldID * f, linkedClass c,
-                         char * name, char * sig) {
- 	*f = (*env)->GetStaticFieldID(env,GETCLASS(c),name,sig);
- 	return *f;
- }
- 
- 
- /* These are for when the class referencing the symbols is unloaded; it
- destroys any object references
-  * the linker might have kept around.
-  */
- JNIEXPORT void JNICALL LINK_UnlinkClass       (JNIEnv * env, linkedClass * c) {
- 	if(*c != NULL) {
- 		if(GETCLASS(*c) != NULL)
- 			(*env)->DeleteGlobalRef(env,GETCLASS(*c));
- 		JCL_free(env,*c);
- 		*c = NULL;
- 	}
- }
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/classpath/jnilink.h gcc-4.0.0/libjava/jni/classpath/jnilink.h
*** gcc-3.4.3/libjava/jni/classpath/jnilink.h	Fri Jan 31 17:54:14 2003
--- gcc-4.0.0/libjava/jni/classpath/jnilink.h	Thu Jan  1 00:00:00 1970
***************
*** 1,86 ****
- /* JNILINK 1.1: JNI version.
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the 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 __JNILINK_H__
- #define __JNILINK_H__
- 
- #include <jni.h>
- 
- typedef void* linkedClass;
- 
- #define LINK_LinkClass(env,c,name)              ((c)==NULL ? LINK_ReallyLinkClass((env),&(c),(name)) : (c))
- #define LINK_LinkKnownClass(env,c,newClass)     ((c)==NULL ? LINK_ReallyLinkKnownClass((env),&(c),(newClass)) : (c))
- #define LINK_LinkMethod(env,m,c,name,sig)       ((m)==NULL ? LINK_RelinkMethod((env),&(m),(c),(name),(sig)) : (m))
- #define LINK_LinkStaticMethod(env,m,c,name,sig) ((m)==NULL ? LINK_RelinkStaticMethod((env),&(m),(c),(name),(sig)) : (m))
- #define LINK_LinkField(env,f,c,name,sig)        ((m)==NULL ? LINK_RelinkField((env),&(f),(c),(name),(sig)) : (f))
- #define LINK_LinkStaticField(env,f,c,name,sig)  ((m)==NULL ? LINK_RelinkStaticField((env),&(f),(c),(name),(sig)) : (f))
- 
- #define LINK_LinkConstructor(env,m,c,sig)       ((m)==NULL ? LINK_RelinkMethod((env),&(m),(c),"<init>",(sig)) : (m))
- 
- JNIEXPORT jclass JNICALL
- LINK_ReallyLinkClass     (JNIEnv * env, linkedClass * c,
-                           char * name);
- JNIEXPORT jclass JNICALL
- LINK_ReallyLinkKnownClass(JNIEnv * env, linkedClass * c,
-                           jclass newClass);
- JNIEXPORT jclass JNICALL
- LINK_RelinkClass       (JNIEnv * env, linkedClass * c,
-                         char * name);
- JNIEXPORT jclass JNICALL
- LINK_RelinkKnownClass  (JNIEnv * env, linkedClass * c,
-                         jclass newClass);
- JNIEXPORT jmethodID JNICALL
- LINK_RelinkMethod      (JNIEnv * env, jmethodID * m, linkedClass c,
-                         char * name, char * sig);
- JNIEXPORT jmethodID JNICALL
- LINK_RelinkStaticMethod(JNIEnv * env, jmethodID * m, linkedClass c,
-                         char * name, char * sig);
- JNIEXPORT jfieldID JNICALL
- LINK_RelinkField       (JNIEnv * env, jfieldID * f, linkedClass c,
-                         char * name, char * sig);
- JNIEXPORT jfieldID JNICALL
- LINK_RelinkStaticField (JNIEnv * env, jfieldID * f, linkedClass c,
-                         char * name, char * sig);
- 
- /* These are for when the class referencing the symbols is unloaded; it
- destroys any object references
-  * the linker might have kept around.
-  */
- JNIEXPORT void JNICALL LINK_UnlinkClass       (JNIEnv * env, linkedClass * c);
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/classpath/primlib.c gcc-4.0.0/libjava/jni/classpath/primlib.c
*** gcc-3.4.3/libjava/jni/classpath/primlib.c	Fri Jan 31 17:54:14 2003
--- gcc-4.0.0/libjava/jni/classpath/primlib.c	Thu Jan  1 00:00:00 1970
***************
*** 1,463 ****
- /* primlib.c
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you are not
- obligated to do so.  If you do not wish to do so, delete this
- exception statement from your version. */
- 
- #include <jnilink.h>
- #include <primlib.h>
- #include <jcl.h>
- 
- static jclass nativeWrapClass[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL, NULL,NULL,NULL,
- 						NULL,NULL,NULL, NULL,NULL,NULL};
- 
- static jclass nativeTypeClass[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL, NULL,NULL,NULL,
- 						NULL,NULL,NULL, NULL,NULL,NULL};
- 
- static jmethodID nativeWrapClassConstructor[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL, NULL,NULL,NULL,
- 						NULL,NULL,NULL, NULL,NULL,NULL};
- 
- static jmethodID nativeWrapClassAccessor[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL, NULL,NULL,NULL,
- 						NULL,NULL,NULL, NULL,NULL,NULL};
- 
- static char * nativeWrapClassName[PRIMLIB_NUMTYPES] = {
- 							NULL,
- 							NULL,
- 							"java/lang/Boolean",
- 							"java/lang/Byte",
- 							"java/lang/Character",
- 							"java/lang/Short",
- 							"java/lang/Integer",
- 							"java/lang/Long",
- 							"java/lang/Float",
- 							"java/lang/Double",
- 							"java/lang/Void",
- 							NULL
- 							};
- 
- static char * nativeWrapClassConstructorSig[PRIMLIB_NUMTYPES] = {
- 							NULL,
- 							NULL,
- 							"(Z)V",
- 							"(B)V",
- 							"(C)V",
- 							"(S)V",
- 							"(I)V",
- 							"(J)V",
- 							"(F)V",
- 							"(D)V",
- 							"()V",
- 							NULL
- 							};
- 
- static char * nativeWrapClassAccessorName[PRIMLIB_NUMTYPES] = {
- 							NULL,
- 							NULL,
- 							"booleanValue",
- 							"byteValue",
- 							"charValue",
- 							"shortValue",
- 							"intValue",
- 							"longValue",
- 							"floatValue",
- 							"doubleValue",
- 							NULL,
- 							NULL
- };
- 
- static char * nativeWrapClassAccessorSig[PRIMLIB_NUMTYPES] = {
- 							NULL,
- 							NULL,
- 							"()Z",
- 							"()B",
- 							"()C",
- 							"()S",
- 							"()I",
- 							"()J",
- 							"()F",
- 							"()D",
- 							NULL,
- 							NULL
- };
- 
- 
- JNIEXPORT jclass JNICALL PRIMLIB_GetNativeWrapClass(JNIEnv * env, int reflectType) {
- 	return LINK_LinkClass(env,nativeWrapClass[reflectType],nativeWrapClassName[reflectType]);
- }
- 
- static jclass ActuallyGetNativeTypeClass(JNIEnv * env, int reflectType) {
- 	jclass wrapClass;
- 	jfieldID typeField;
- 
- 	wrapClass = PRIMLIB_GetNativeWrapClass(env, reflectType);
- 	if(wrapClass == NULL)
- 		return NULL;
- 	typeField = (*env)->GetStaticFieldID(env, wrapClass, "TYPE", "Ljava/lang/Class");
- 	if(typeField == NULL)
- 		return NULL;
- 	return (*env)->GetStaticObjectField(env, wrapClass, typeField);
- }
- 
- JNIEXPORT jclass JNICALL PRIMLIB_GetNativeTypeClass(JNIEnv * env, int reflectType) {
- 	return LINK_LinkKnownClass(env, nativeTypeClass[reflectType], ActuallyGetNativeTypeClass(env,reflectType));
- }
- 
- JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassConstructor(JNIEnv * env, int reflectType) {
- 	PRIMLIB_GetNativeWrapClass(env,reflectType);
- 	return LINK_LinkConstructor(env, nativeWrapClassConstructor[reflectType], nativeWrapClass[reflectType], nativeWrapClassConstructorSig[reflectType]);
- }
- 
- JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassAccessor(JNIEnv * env, int reflectType) {
- 	PRIMLIB_GetNativeWrapClass(env,reflectType);
- 	return LINK_LinkMethod(env, nativeWrapClassAccessor[reflectType], nativeWrapClass[reflectType], nativeWrapClassAccessorName[reflectType], nativeWrapClassAccessorSig[reflectType]);
- }
- 
- 
- 
- JNIEXPORT jobject JNICALL PRIMLIB_WrapBoolean(JNIEnv * env, jboolean b) {
- 	jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, PRIMLIB_BOOLEAN);
- 	JCL_RETHROW_EXCEPTION(env);
- 	return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BOOLEAN), construct, b);
- }
- 
- JNIEXPORT jobject JNICALL PRIMLIB_WrapByte   (JNIEnv * env, jbyte b) {
- 	jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, PRIMLIB_BYTE);
- 	JCL_RETHROW_EXCEPTION(env);
- 	return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE), construct, b); 
- }
- 
- JNIEXPORT jobject JNICALL PRIMLIB_WrapChar   (JNIEnv * env, jchar c) {
- 	jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, PRIMLIB_CHAR);
- 	JCL_RETHROW_EXCEPTION(env);
- 	return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR), construct, c);
- }
- 
- JNIEXPORT jobject JNICALL PRIMLIB_WrapShort  (JNIEnv * env, jshort s) {
- 	jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, PRIMLIB_SHORT);
- 	JCL_RETHROW_EXCEPTION(env);
- 	return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT), construct, s);
- }
- 
- JNIEXPORT jobject JNICALL PRIMLIB_WrapInt    (JNIEnv * env, jint i) {
- 	jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, PRIMLIB_INT);
- 	JCL_RETHROW_EXCEPTION(env);
- 	return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT), construct, i);
- }
- 
- JNIEXPORT jobject JNICALL PRIMLIB_WrapLong   (JNIEnv * env, jlong l) {
- 	jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, PRIMLIB_LONG);
- 	JCL_RETHROW_EXCEPTION(env);
- 	return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG), construct, l);
- }
- 
- JNIEXPORT jobject JNICALL PRIMLIB_WrapFloat  (JNIEnv * env, jfloat f) {
- 	jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, PRIMLIB_FLOAT);
- 	JCL_RETHROW_EXCEPTION(env);
- 	return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_FLOAT), construct, f);
- }
- 
- JNIEXPORT jobject JNICALL PRIMLIB_WrapDouble (JNIEnv * env, jdouble d) {
- 	jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, PRIMLIB_DOUBLE);
- 	JCL_RETHROW_EXCEPTION(env);
- 	return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_DOUBLE), construct, d);
- }
- 
- 
- JNIEXPORT jboolean JNICALL PRIMLIB_UnwrapBoolean(JNIEnv * env, jobject obj) {
- 	if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BOOLEAN))) {
- 		return PRIMLIB_GetBooleanObjectValue(env, obj);
- 	} else {
- 		JCL_ThrowException(env, "java/lang/IllegalArgumentException", "Argument not of correct type.");
- 		return JNI_FALSE;
- 	}
- }
- 
- JNIEXPORT jbyte JNICALL PRIMLIB_UnwrapByte(JNIEnv * env, jobject obj) {
- 	if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- 		return PRIMLIB_GetByteObjectValue(env, obj);
- 	} else {
- 		JCL_ThrowException(env, "java/lang/IllegalArgumentException", "Argument not of correct type.");
- 		return 0;
- 	}
- }
- 
- JNIEXPORT jshort JNICALL PRIMLIB_UnwrapShort(JNIEnv * env, jobject obj) {
- 	if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
- 		return PRIMLIB_GetShortObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- 		return (jshort)PRIMLIB_GetByteObjectValue(env, obj);
- 	} else {
- 		JCL_ThrowException(env, "java/lang/IllegalArgumentException", "Argument not of correct type.");
- 		return 0;
- 	}
- }
- 
- JNIEXPORT jchar JNICALL PRIMLIB_UnwrapChar(JNIEnv * env, jobject obj) {
- 	if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
- 		return PRIMLIB_GetCharObjectValue(env, obj);
- 	} else {
- 		JCL_ThrowException(env, "java/lang/IllegalArgumentException", "Argument not of correct type.");
- 		return 0;
- 	}
- }
- 
- JNIEXPORT jint JNICALL PRIMLIB_UnwrapInt(JNIEnv * env, jobject obj) {
- 	if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
- 		return PRIMLIB_GetIntObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
- 		return (jint)PRIMLIB_GetShortObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
- 		return (jint)PRIMLIB_GetCharObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- 		return (jint)PRIMLIB_GetByteObjectValue(env, obj);
- 	} else {
- 		JCL_ThrowException(env, "java/lang/IllegalArgumentException", "Argument not of correct type.");
- 		return 0;
- 	}
- }
- 
- JNIEXPORT jlong JNICALL PRIMLIB_UnwrapLong(JNIEnv * env, jobject obj) {
- 	if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG))) {
- 		return PRIMLIB_GetLongObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
- 		return (jlong)PRIMLIB_GetIntObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
- 		return (jlong)PRIMLIB_GetShortObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
- 		return (jlong)PRIMLIB_GetCharObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- 		return (jlong)PRIMLIB_GetByteObjectValue(env, obj);
- 	} else {
- 		JCL_ThrowException(env, "java/lang/IllegalArgumentException", "Argument not of correct type.");
- 		return 0;
- 	}
- }
- 
- JNIEXPORT jfloat JNICALL PRIMLIB_UnwrapFloat(JNIEnv * env, jobject obj) {
- 	if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_FLOAT))) {
- 		return PRIMLIB_GetFloatObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG))) {
- 		return (jfloat)PRIMLIB_GetLongObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
- 		return (jfloat)PRIMLIB_GetIntObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
- 		return (jfloat)PRIMLIB_GetShortObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
- 		return (jfloat)PRIMLIB_GetCharObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- 		return (jfloat)PRIMLIB_GetByteObjectValue(env, obj);
- 	} else {
- 		JCL_ThrowException(env, "java/lang/IllegalArgumentException", "Argument not of correct type.");
- 		return 0;
- 	}
- }
- 
- JNIEXPORT jdouble JNICALL PRIMLIB_UnwrapDouble(JNIEnv * env, jobject obj) {
- 	if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_DOUBLE))) {
- 		return PRIMLIB_GetDoubleObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_FLOAT))) {
- 		return (jdouble)PRIMLIB_GetFloatObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG))) {
- 		return (jdouble)PRIMLIB_GetLongObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
- 		return (jdouble)PRIMLIB_GetIntObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
- 		return (jdouble)PRIMLIB_GetShortObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
- 		return (jdouble)PRIMLIB_GetCharObjectValue(env, obj);
- 	} else if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- 		return (jdouble)PRIMLIB_GetByteObjectValue(env, obj);
- 	} else {
- 		JCL_ThrowException(env, "java/lang/IllegalArgumentException", "Argument not of correct type.");
- 		return 0;
- 	}
- }
- 
- JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveWrapperType(JNIEnv * env, jobject obj) {
- 	jclass typeClass;
- 	if(obj == NULL) {
- 		return PRIMLIB_NULL;
- 	}
- 
- 	typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_DOUBLE);
- 	if((*env)->IsInstanceOf(env, obj, typeClass)) {
- 		return PRIMLIB_DOUBLE;
- 	}
- 	typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_FLOAT);
- 	if((*env)->IsInstanceOf(env, obj, typeClass)) {
- 		return PRIMLIB_FLOAT;
- 	}
- 	typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG);
- 	if((*env)->IsInstanceOf(env, obj, typeClass)) {
- 		return PRIMLIB_LONG;
- 	}
- 	typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT);
- 	if((*env)->IsInstanceOf(env, obj, typeClass)) {
- 		return PRIMLIB_INT;
- 	}
- 	typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR);
- 	if((*env)->IsInstanceOf(env, obj, typeClass)) {
- 		return PRIMLIB_CHAR;
- 	}
- 	typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT);
- 	if((*env)->IsInstanceOf(env, obj, typeClass)) {
- 		return PRIMLIB_SHORT;
- 	}
- 	typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE);
- 	if((*env)->IsInstanceOf(env, obj, typeClass)) {
- 		return PRIMLIB_BYTE;
- 	}
- 	typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BOOLEAN);
- 	if((*env)->IsInstanceOf(env, obj, typeClass)) {
- 		return PRIMLIB_BOOLEAN;
- 	}
- 	typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_VOID);
- 	if((*env)->IsInstanceOf(env, obj, typeClass)) {
- 		return PRIMLIB_VOID;
- 	}
- 	return PRIMLIB_OBJECT;
- }
- 
- JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveType(JNIEnv * env, jclass returnType) {
- 	jclass typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_DOUBLE);
- 	if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- 		return PRIMLIB_DOUBLE;
- 	}
- 	typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_FLOAT);
- 	if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- 		return PRIMLIB_FLOAT;
- 	}
- 	typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_LONG);
- 	if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- 		return PRIMLIB_LONG;
- 	}
- 	typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_INT);
- 	if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- 		return PRIMLIB_INT;
- 	}
- 	typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_CHAR);
- 	if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- 		return PRIMLIB_CHAR;
- 	}
- 	typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_SHORT);
- 	if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- 		return PRIMLIB_SHORT;
- 	}
- 	typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_BYTE);
- 	if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- 		return PRIMLIB_BYTE;
- 	}
- 	typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_BOOLEAN);
- 	if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- 		return PRIMLIB_BOOLEAN;
- 	}
- 	typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_VOID);
- 	if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- 		return PRIMLIB_VOID;
- 	}
- 	return PRIMLIB_OBJECT;
- }
- 
- 
- JNIEXPORT jboolean JNICALL PRIMLIB_GetBooleanObjectValue(JNIEnv * env, jobject obj) {
- 	jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_BOOLEAN);
- 	return (*env)->CallBooleanMethod(env, obj, acc);
- }
- 
- JNIEXPORT jbyte JNICALL PRIMLIB_GetByteObjectValue(JNIEnv * env, jobject obj) {
- 	jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_BYTE);
- 	return (*env)->CallByteMethod(env, obj, acc);
- }
- 
- JNIEXPORT jshort JNICALL PRIMLIB_GetShortObjectValue(JNIEnv * env, jobject obj) {
- 	jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_SHORT);
- 	return (*env)->CallShortMethod(env, obj, acc);
- }
- 
- JNIEXPORT jchar JNICALL PRIMLIB_GetCharObjectValue(JNIEnv * env, jobject obj) {
- 	jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_CHAR);
- 	return (*env)->CallCharMethod(env, obj, acc);
- }
- 
- JNIEXPORT jint JNICALL PRIMLIB_GetIntObjectValue(JNIEnv * env, jobject obj) {
- 	jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_INT);
- 	return (*env)->CallIntMethod(env, obj, acc);
- }
- 
- JNIEXPORT jlong JNICALL PRIMLIB_GetLongObjectValue(JNIEnv * env, jobject obj) {
- 	jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_LONG);
- 	return (*env)->CallLongMethod(env, obj, acc);
- }
- 
- JNIEXPORT jfloat JNICALL PRIMLIB_GetFloatObjectValue(JNIEnv * env, jobject obj) {
- 	jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_FLOAT);
- 	return (*env)->CallFloatMethod(env, obj, acc);
- }
- 
- JNIEXPORT jdouble JNICALL PRIMLIB_GetDoubleObjectValue(JNIEnv * env, jobject obj) {
- 	jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_DOUBLE);
- 	return (*env)->CallDoubleMethod(env, obj, acc);
- }
- 
- 
- 
- JNIEXPORT jvalue JNICALL PRIMLIB_UnwrapJValue(JNIEnv* env, jobject obj, jclass classType) {
- 	jvalue retval;
- 	jint objType = PRIMLIB_GetReflectiveType(env, classType);
- 	if(objType == PRIMLIB_BOOLEAN) {
- 		retval.z = PRIMLIB_UnwrapBoolean(env,obj);
- 	} else if(objType == PRIMLIB_BYTE) {
- 		retval.b = PRIMLIB_UnwrapByte(env,obj);
- 	} else if(objType == PRIMLIB_CHAR) {
- 		retval.c = PRIMLIB_UnwrapChar(env,obj);
- 	} else if(objType == PRIMLIB_SHORT) {
- 		retval.s = PRIMLIB_UnwrapShort(env,obj);
- 	} else if(objType == PRIMLIB_INT) {
- 		retval.i = PRIMLIB_UnwrapInt(env,obj);
- 	} else if(objType == PRIMLIB_LONG) {
- 		retval.j = PRIMLIB_UnwrapLong(env,obj);
- 	} else if(objType == PRIMLIB_FLOAT) {
- 		retval.f = PRIMLIB_UnwrapFloat(env,obj);
- 	} else if(objType == PRIMLIB_DOUBLE) {
- 		retval.d = PRIMLIB_UnwrapDouble(env,obj);
- 	} else {
- 		if(obj != NULL && !(*env)->IsInstanceOf(env, obj, classType)) {
- 			JCL_ThrowException(env, "java/lang/IllegalArgumentException", "Argument not of correct object type.");
- 			return retval;
- 		}
- 		retval.l = obj;
- 	}
- 	return retval;
- }
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/classpath/primlib.h gcc-4.0.0/libjava/jni/classpath/primlib.h
*** gcc-3.4.3/libjava/jni/classpath/primlib.h	Fri Jan 31 17:54:14 2003
--- gcc-4.0.0/libjava/jni/classpath/primlib.h	Thu Jan  1 00:00:00 1970
***************
*** 1,102 ****
- /* primlib.h
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the 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 __PRIMLIB_H__
- #define __PRIMLIB_H__
- 
- #include <jni.h>
- 
- #define PRIMLIB_UNKNOWN  0
- #define PRIMLIB_OBJECT   1
- #define PRIMLIB_BOOLEAN  2
- #define PRIMLIB_BYTE     3
- #define PRIMLIB_CHAR     4
- #define PRIMLIB_SHORT    5
- #define PRIMLIB_INT      6
- #define PRIMLIB_LONG     7
- #define PRIMLIB_FLOAT    8
- #define PRIMLIB_DOUBLE   9
- #define PRIMLIB_VOID     10
- #define PRIMLIB_NULL     11
- #define PRIMLIB_NUMTYPES 12
- 
- /* Low-level primitive class accessor functions. */
- JNIEXPORT jclass JNICALL PRIMLIB_GetNativeWrapClass(JNIEnv * env, int reflectType);
- JNIEXPORT jclass JNICALL PRIMLIB_GetNativeTypeClass(JNIEnv * env, int reflectType);
- JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassConstructor(JNIEnv * env, int reflectType);
- JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassAccessor(JNIEnv * env, int reflectType);
- 
- /* Type discovery functions: WrapperType finds out j.l.Boolean/Byte/etc., and
-    Type finds out j.l.Boolean.TYPE, etc.
- */
- JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveWrapperType(JNIEnv * env, jobject obj);
- JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveType(JNIEnv * env, jclass returnType);
- 
- /* Constructor functions. */
- JNIEXPORT jobject JNICALL PRIMLIB_WrapBoolean(JNIEnv * env, jboolean b);
- JNIEXPORT jobject JNICALL PRIMLIB_WrapByte   (JNIEnv * env, jbyte b);
- JNIEXPORT jobject JNICALL PRIMLIB_WrapChar   (JNIEnv * env, jchar c);
- JNIEXPORT jobject JNICALL PRIMLIB_WrapShort  (JNIEnv * env, jshort s);
- JNIEXPORT jobject JNICALL PRIMLIB_WrapInt    (JNIEnv * env, jint i);
- JNIEXPORT jobject JNICALL PRIMLIB_WrapLong   (JNIEnv * env, jlong l);
- JNIEXPORT jobject JNICALL PRIMLIB_WrapFloat  (JNIEnv * env, jfloat f);
- JNIEXPORT jobject JNICALL PRIMLIB_WrapDouble (JNIEnv * env, jdouble d);
- 
- /* Widening conversion unwrapping functions. */
- JNIEXPORT jboolean JNICALL PRIMLIB_UnwrapBoolean(JNIEnv * env, jobject obj);
- JNIEXPORT jbyte    JNICALL PRIMLIB_UnwrapByte   (JNIEnv * env, jobject obj);
- JNIEXPORT jshort   JNICALL PRIMLIB_UnwrapShort  (JNIEnv * env, jobject obj);
- JNIEXPORT jchar    JNICALL PRIMLIB_UnwrapChar   (JNIEnv * env, jobject obj);
- JNIEXPORT jint     JNICALL PRIMLIB_UnwrapInt    (JNIEnv * env, jobject obj);
- JNIEXPORT jlong    JNICALL PRIMLIB_UnwrapLong   (JNIEnv * env, jobject obj);
- JNIEXPORT jfloat   JNICALL PRIMLIB_UnwrapFloat  (JNIEnv * env, jobject obj);
- JNIEXPORT jdouble  JNICALL PRIMLIB_UnwrapDouble (JNIEnv * env, jobject obj);
- 
- /* Simple unwrapping functions. Objects *must* be of correct type. */
- JNIEXPORT jboolean JNICALL PRIMLIB_GetBooleanObjectValue(JNIEnv * env, jobject obj);
- JNIEXPORT jbyte    JNICALL PRIMLIB_GetByteObjectValue   (JNIEnv * env, jobject obj);
- JNIEXPORT jshort   JNICALL PRIMLIB_GetShortObjectValue  (JNIEnv * env, jobject obj);
- JNIEXPORT jchar    JNICALL PRIMLIB_GetCharObjectValue   (JNIEnv * env, jobject obj);
- JNIEXPORT jint     JNICALL PRIMLIB_GetIntObjectValue    (JNIEnv * env, jobject obj);
- JNIEXPORT jlong    JNICALL PRIMLIB_GetLongObjectValue   (JNIEnv * env, jobject obj);
- JNIEXPORT jfloat   JNICALL PRIMLIB_GetFloatObjectValue  (JNIEnv * env, jobject obj);
- JNIEXPORT jdouble  JNICALL PRIMLIB_GetDoubleObjectValue (JNIEnv * env, jobject obj);
- 
- /* jvalue conversion: Unwrap obj to the type of classType, with widening conversion. */
- JNIEXPORT jvalue JNICALL PRIMLIB_UnwrapJValue(JNIEnv* env, jobject obj, jclass classType);
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gdkfont.h gcc-4.0.0/libjava/jni/gtk-peer/gdkfont.h
*** gcc-3.4.3/libjava/jni/gtk-peer/gdkfont.h	Wed Dec 31 08:58:31 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gdkfont.h	Wed Feb 16 20:03:18 2005
***************
*** 38,44 ****
     obligated to do so.  If you do not wish to do so, delete this
     exception statement from your version. */
  
! #include "gtkcairopeer.h"
  
  #include <pango/pango.h>
  #include <pango/pango-context.h>
--- 38,44 ----
     obligated to do so.  If you do not wish to do so, delete this
     exception statement from your version. */
  
! #include "gtkpeer.h"
  
  #include <pango/pango.h>
  #include <pango/pango-context.h>
***************
*** 47,52 ****
--- 47,53 ----
  
  extern struct state_table *native_font_state_table;
  extern struct state_table *native_glyphvector_state_table;
+ extern struct state_table *native_text_layout_state_table;
  
  #define NSA_FONT_INIT(env, clazz) \
    native_font_state_table = init_state_table (env, clazz)
*************** extern struct state_table *native_glyphv
*** 73,93 ****
  #define NSA_DEL_GV_PTR(env, obj) \
    remove_state_slot (env, obj, native_glyphvector_state_table)
  
  struct peerfont
  {
    PangoFont *font;
    PangoFontDescription *desc;
    PangoContext *ctx;
  };
  
! struct glyphvec 
  {
!   /* the GList is list of PangoGlyphItems, each of which is a pair of 1
!      PangoItem and 1 PangoGlyphString. */
!   GList *glyphitems;
!   PangoFontDescription *desc;
!   PangoFont *font;
!   PangoContext *ctx;
  };
  
  #endif /* __GDKFONT_H__ */
--- 74,142 ----
  #define NSA_DEL_GV_PTR(env, obj) \
    remove_state_slot (env, obj, native_glyphvector_state_table)
  
+ 
+ #define NSA_TEXT_LAYOUT_INIT(env, clazz) \
+   native_text_layout_state_table = init_state_table (env, clazz)
+ 
+ #define NSA_GET_TEXT_LAYOUT_PTR(env, obj) \
+   get_state (env, obj, native_text_layout_state_table)
+ 
+ #define NSA_SET_TEXT_LAYOUT_PTR(env, obj, ptr) \
+   set_state (env, obj, native_text_layout_state_table, (void *)ptr)
+ 
+ #define NSA_DEL_TEXT_LAYOUT_PTR(env, obj) \
+   remove_state_slot (env, obj, native_text_layout_state_table)
+ 
+ #define FONT_METRICS_ASCENT      0
+ #define FONT_METRICS_MAX_ASCENT  1
+ #define FONT_METRICS_DESCENT     2
+ #define FONT_METRICS_MAX_DESCENT 3
+ #define FONT_METRICS_MAX_ADVANCE 4
+ #define NUM_FONT_METRICS 5
+ 
+ #define TEXT_METRICS_X_BEARING 0
+ #define TEXT_METRICS_Y_BEARING 1
+ #define TEXT_METRICS_WIDTH     2
+ #define TEXT_METRICS_HEIGHT    3
+ #define TEXT_METRICS_X_ADVANCE 4
+ #define TEXT_METRICS_Y_ADVANCE 5
+ #define NUM_TEXT_METRICS 6
+ 
+ #define NUM_GLYPH_METRICS 10
+ 
+ #define GLYPH_LOG_X(i)      (NUM_GLYPH_METRICS * (i)    )
+ #define GLYPH_LOG_Y(i)      (NUM_GLYPH_METRICS * (i) + 1)
+ #define GLYPH_LOG_WIDTH(i)  (NUM_GLYPH_METRICS * (i) + 2)
+ #define GLYPH_LOG_HEIGHT(i) (NUM_GLYPH_METRICS * (i) + 3)
+ 
+ #define GLYPH_INK_X(i)      (NUM_GLYPH_METRICS * (i) + 4)
+ #define GLYPH_INK_Y(i)      (NUM_GLYPH_METRICS * (i) + 5)
+ #define GLYPH_INK_WIDTH(i)  (NUM_GLYPH_METRICS * (i) + 6)
+ #define GLYPH_INK_HEIGHT(i) (NUM_GLYPH_METRICS * (i) + 7)
+ 
+ #define GLYPH_POS_X(i)      (NUM_GLYPH_METRICS * (i) + 8)
+ #define GLYPH_POS_Y(i)      (NUM_GLYPH_METRICS * (i) + 9)
+ 
  struct peerfont
  {
    PangoFont *font;
    PangoFontDescription *desc;
    PangoContext *ctx;
+   PangoLayout *layout;
+   /* 
+    * The GdkGraphics2D (using cairo) may store a pointer to a
+    * cairo_font_t here; since we want to work equally well with
+    * the GdkGraphics class (using GDK) we do not explicitly mention
+    * cairo types here; it is up to the higher level driver routine
+    * in GdkClasspathFontPeer.java to decide which backend functions
+    * to invoke. 
+    */
+   void *graphics_resource;
  };
  
! struct textlayout
  {
!   PangoLayout *pango_layout;
  };
  
  #endif /* __GDKFONT_H__ */
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c	Wed Feb 16 20:03:18 2005
***************
*** 0 ****
--- 1,70 ----
+ /* Native implementation of functions in GThreadNativeMethodRunner
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ #include "gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h"
+ #include "gthread-jni.h"
+ 
+ /*
+  * Class:     GThreadNativeMethodRunner
+  * Method:    nativeRun
+  * Signature: (J)V
+  *
+  * Purpose: Run the C function whose function pointer is
+  *
+  */
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_nativeRun
+   (JNIEnv *env __attribute__((unused)),
+    jobject lcl_obj __attribute__((unused)),
+    jlong funcAddr, jlong funcArg)
+ {
+   /* Convert the function's address back into a pointer to a C function. */
+   void *(*funcPtr)(void *) = (void *(*)(void *)) (size_t)funcAddr;
+ 
+   /* We do not need to worry about the return value from funcPtr(); it's
+      just thrown away.  That is part of the g_threads spec, so no reason
+      to worry about returning it.  */
+   (void) funcPtr((void *) (size_t)funcArg);
+   /* Fall off the end and terminate the thread of control. */
+ }
+ 
+ /* Local Variables: */
+ /* c-file-style: "gnu" */
+ /* End: */
+ 
+ 
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c	Thu Nov 20 22:44:01 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c	Thu Jan  1 00:00:00 1970
***************
*** 1,167 ****
- /* gnu_java_awt_GdkFont.c
-    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., 59 Temple Place, Suite 330, Boston, MA
-    02111-1307 USA.
-    
-    Linking this library statically or dynamically with other modules is
-    making a combined work based on this library.  Thus, the terms and
-    conditions of the GNU General Public License cover the whole
-    combination.
-    
-    As a special exception, the copyright holders of this library give you
-    permission to link this library with independent modules to produce an
-    executable, regardless of the license terms of these independent
-    modules, and to copy and distribute the resulting executable under
-    terms of your choice, provided that you also meet, for each linked
-    independent module, the terms and conditions of the license of that
-    module.  An independent module is a module which is not derived from
-    or based on this library.  If you modify this library, you may extend
-    this exception to your version of the library, but you are not
-    obligated to do so.  If you do not wish to do so, delete this
-    exception statement from your version. */
- 
- #include "gdkfont.h"
- #include "gnu_java_awt_peer_gtk_GdkClasspathFontPeer.h"
- 
- struct state_table *native_font_state_table;
- 
- /*
- rough sketch of the mapping between java and 
- pango text objects:
-   
-   Font              <->    - PangoFont
-                            - PangoFontDescription
-                            - PangoContext
- 
-   GlyphVector       <->    - GList of PangoGlyphItem
-                            - PangoFontDescription
-                            - PangoContext
- 
-   FontRenderContext <->    stays in plain java
- 
- */
- 
- enum java_awt_font_style {
-   java_awt_font_PLAIN = 0,
-   java_awt_font_BOLD = 1,
-   java_awt_font_ITALIC = 2
- };
- 
- enum java_awt_font_baseline {
-   java_awt_font_ROMAN_BASELINE = 0,
-   java_awt_font_CENTER_BASELINE = 1,
-   java_awt_font_HANGING_BASELINE = 2
- };
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkClasspathFontPeer_initStaticState 
-   (JNIEnv *env, jclass clazz)
- {
-   NSA_FONT_INIT (env, clazz);
- }
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkClasspathFontPeer_initState
-   (JNIEnv *env, jobject self)
- {
-   struct peerfont *pfont = NULL;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   pfont = (struct peerfont *) g_malloc0 (sizeof (struct peerfont));
-   g_assert (pfont != NULL);
-   NSA_SET_FONT_PTR (env, self, pfont);
-   gdk_threads_leave ();
- }
- 
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkClasspathFontPeer_dispose
-   (JNIEnv *env, jobject self)
- {
-   struct peerfont *pfont = NULL;
- 
-   gdk_threads_enter ();
-   pfont = (struct peerfont *)NSA_DEL_FONT_PTR (env, self);
-   g_assert (pfont != NULL);
-   if (pfont->ctx != NULL)
-     g_object_unref (pfont->ctx);
-   if (pfont->font != NULL)
-     g_object_unref (pfont->font);
-   if (pfont->desc != NULL)
-     pango_font_description_free (pfont->desc);
-   g_free (pfont);
-   gdk_threads_leave ();
- }
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkClasspathFontPeer_setFont
-   (JNIEnv *env, jobject self, jstring family_name_str, jint style_int, jint size)
- {
-   struct peerfont *pfont = NULL;
-   PangoFontMap *map = NULL; 
-   char const *family_name = NULL;
- 
-   gdk_threads_enter ();
-   enum java_awt_font_style style = (enum java_awt_font_style) style_int;
- 
-   g_assert (self != NULL);
-   pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, self);
-   g_assert (pfont != NULL);
- 
-   if (pfont->ctx != NULL)
-     g_object_unref (pfont->ctx);
-   if (pfont->font != NULL)
-     g_object_unref (pfont->font);
-   if (pfont->desc != NULL)
-     pango_font_description_free (pfont->desc);
- 
-   pfont->desc = pango_font_description_new ();
-   g_assert (pfont->desc != NULL);
- 
-   family_name = (*env)->GetStringUTFChars(env, family_name_str, 0);
-   g_assert (family_name != NULL);
-   pango_font_description_set_family (pfont->desc, family_name);
-   (*env)->ReleaseStringUTFChars(env, family_name_str, family_name);
- 
-   pango_font_description_set_size (pfont->desc, size * PANGO_SCALE);  
- 
-   if (style & java_awt_font_BOLD)
-     pango_font_description_set_weight (pfont->desc, PANGO_WEIGHT_BOLD);
- 
-   if (style & java_awt_font_ITALIC)
-     pango_font_description_set_style (pfont->desc, PANGO_STYLE_ITALIC);
-   
-   /* 
-      FIXME: these are possibly wrong, and should in any case
-      probably be cached between calls.
-    */
- 
-   map = pango_ft2_font_map_for_display ();
-   g_assert (map != NULL);
-   
-   if (pfont->ctx == NULL)
-     pfont->ctx = pango_ft2_font_map_create_context (PANGO_FT2_FONT_MAP (map));  
-   g_assert (pfont->ctx != NULL);
- 
-   if (pfont->font != NULL)
-     g_object_unref (pfont->font);
- 
-   pfont->font = pango_font_map_load_font (map, pfont->ctx, pfont->desc);
-   g_assert (pfont->font != NULL);
- 
-   gdk_threads_leave ();
- }
- 
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c	Wed Dec 31 08:58:31 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c	Thu Jan  1 00:00:00 1970
***************
*** 1,92 ****
- /* gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c
-    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., 59 Temple Place, Suite 330, Boston, MA
-    02111-1307 USA.
-    
-    Linking this library statically or dynamically with other modules is
-    making a combined work based on this library.  Thus, the terms and
-    conditions of the GNU General Public License cover the whole
-    combination.
-    
-    As a special exception, the copyright holders of this library give you
-    permission to link this library with independent modules to produce an
-    executable, regardless of the license terms of these independent
-    modules, and to copy and distribute the resulting executable under
-    terms of your choice, provided that you also meet, for each linked
-    independent module, the terms and conditions of the license of that
-    module.  An independent module is a module which is not derived from
-    or based on this library.  If you modify this library, you may extend
-    this exception to your version of the library, but you are not
-    obligated to do so.  If you do not wish to do so, delete this
-    exception statement from your version. */
- 
- #include <math.h>
- 
- #include "gdkfont.h"
- #include "gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.h"
- 
- #define ASCENT      0
- #define MAX_ASCENT  1
- #define DESCENT     2
- #define MAX_DESCENT 3
- #define MAX_ADVANCE 4
- #define NUM_METRICS 5
- 
- JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics_initState
-   (JNIEnv *env, jobject self, jobject font)
- {
-   jintArray array;
-   jint *metrics;
-   struct peerfont *pf = NULL;
- 
-   pf = NSA_GET_FONT_PTR(env, font);
-   g_assert (pf != NULL);
- 
-   array = (*env)->NewIntArray (env, NUM_METRICS);
-   metrics = (*env)->GetIntArrayElements (env, array, NULL);
- 
-   gdk_threads_enter ();
- 
- #define DOUBLE_TO_26_6(d) ((FT_F26Dot6)((d) * 63.0))
- #define DOUBLE_FROM_26_6(t) (((double)((t) >> 6)) \
- 			     + ((double)((t) & 0x3F) / 63.0))
- 
-   double pointsize = pango_font_description_get_size (pf->desc);
-   pointsize /= (double) PANGO_SCALE;
- 
-   FT_Face face = pango_ft2_font_get_face (pf->font);  
-   FT_Set_Char_Size( face, 
- 		    DOUBLE_TO_26_6 (pointsize),
- 		    DOUBLE_TO_26_6 (pointsize),
- 		    0, 0);
- 
-   metrics[ASCENT]      = ceil (DOUBLE_FROM_26_6(face->size->metrics.ascender));
-   metrics[MAX_ASCENT]  = metrics[ASCENT];
-   metrics[DESCENT]     = floor (DOUBLE_FROM_26_6(face->size->metrics.descender));
-   if (metrics[DESCENT] < 0)
-     metrics[DESCENT] = - metrics[DESCENT];
-   metrics[MAX_DESCENT] = metrics[DESCENT];
-   metrics[MAX_ADVANCE] = ceil (DOUBLE_FROM_26_6(face->size->metrics.max_advance));
- 
-   gdk_threads_leave ();
- 
-   (*env)->ReleaseIntArrayElements (env, array, metrics, 0);
- 
-   return array;
- }
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c	Tue Dec  2 21:00:05 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c	Thu Jan  1 00:00:00 1970
***************
*** 1,130 ****
- /* gdkfontmetrics.c
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you are not
- obligated to do so.  If you do not wish to do so, delete this
- exception statement from your version. */
- 
- #include "gtkpeer.h"
- #include "gnu_java_awt_peer_gtk_GdkFontMetrics.h"
- #include <gdk/gdkx.h>
- 
- #define ASCENT      0
- #define MAX_ASCENT  1
- #define DESCENT     2
- #define MAX_DESCENT 3
- #define MAX_ADVANCE 4
- #define NUM_METRICS 5
- 
- JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkFontMetrics_initState
-   (JNIEnv *env, jobject obj __attribute__((unused)), jstring fname, jint size)
- {
-   jintArray array;
-   jint *metrics;
-   const char *font_name;
-   PangoFontDescription *font_desc;
-   PangoContext *context;
-   PangoFontMetrics *pango_metrics;
- 
-   array = (*env)->NewIntArray (env, NUM_METRICS);
- 
-   metrics = (*env)->GetIntArrayElements (env, array, NULL);
-   font_name = (*env)->GetStringUTFChars (env, fname, NULL);
- 
-   gdk_threads_enter ();
- 
-   font_desc = pango_font_description_from_string (font_name);
-   pango_font_description_set_size (font_desc, size * PANGO_SCALE);
- 
-   context = gdk_pango_context_get();
-   pango_context_set_font_description (context, font_desc);
- 
-   pango_metrics = pango_context_get_metrics (context, font_desc, NULL);
- 
-   metrics[ASCENT] =
-     pango_font_metrics_get_ascent (pango_metrics) / PANGO_SCALE;
-   metrics[MAX_ASCENT]  = metrics[ASCENT];
-   metrics[DESCENT] =
-     pango_font_metrics_get_descent (pango_metrics) / PANGO_SCALE;
-   metrics[MAX_DESCENT] = metrics[DESCENT];
-   metrics[MAX_ADVANCE] =
-     pango_font_metrics_get_approximate_char_width (pango_metrics) / PANGO_SCALE;
- 
-   pango_font_metrics_unref (pango_metrics);
- 
-   pango_font_description_free (font_desc);
- 
-   gdk_threads_leave ();
- 
-   (*env)->ReleaseStringUTFChars (env, fname, font_name);
-   (*env)->ReleaseIntArrayElements (env, array, metrics, 0);
- 
-   return array;
- }
- 
- JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GdkFontMetrics_stringWidth
-   (JNIEnv *env, jobject obj __attribute__((unused)),
-    jstring fname, jint size, jstring str)
- {
-   PangoFontDescription *font_desc;
-   PangoContext *context;
-   PangoLayout *layout;
-   int width = 0;
-   const char *cstr;
-   const char *font_name;
- 
-   cstr = (*env)->GetStringUTFChars (env, str, NULL);
-   font_name = (*env)->GetStringUTFChars (env, fname, NULL);
- 
-   gdk_threads_enter ();
- 
-   font_desc = pango_font_description_from_string (font_name);
-   pango_font_description_set_size (font_desc, size * PANGO_SCALE);
- 
-   context = gdk_pango_context_get();
-   pango_context_set_font_description (context, font_desc);
- 
-   layout = pango_layout_new (context);
- 
-   pango_layout_set_text (layout, cstr, -1);
-   pango_layout_get_pixel_size (layout, &width, NULL);
- 
-   pango_font_description_free (font_desc);
- 
-   gdk_threads_leave ();
- 
-   (*env)->ReleaseStringUTFChars (env, fname, font_name);
-   (*env)->ReleaseStringUTFChars (env, str, cstr);
- 
-   return width;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c	Wed Feb 16 20:03:19 2005
***************
*** 0 ****
--- 1,401 ----
+ /* gnu_java_awt_GdkFont.c
+    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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+    
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+    
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
+ 
+ #include "gdkfont.h"
+ #include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
+ 
+ struct state_table *native_font_state_table;
+ 
+ enum java_awt_font_style {
+   java_awt_font_PLAIN = 0,
+   java_awt_font_BOLD = 1,
+   java_awt_font_ITALIC = 2
+ };
+ 
+ enum java_awt_font_baseline {
+   java_awt_font_ROMAN_BASELINE = 0,
+   java_awt_font_CENTER_BASELINE = 1,
+   java_awt_font_HANGING_BASELINE = 2
+ };
+ 
+ static jmethodID glyphVector_ctor;
+ static jclass glyphVector_class;
+ static PangoAttrList *attrs = NULL;
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkFontPeer_initStaticState 
+   (JNIEnv *env, jclass clazz)
+ {
+   NSA_FONT_INIT (env, clazz);
+ 
+   glyphVector_class = (*env)->FindClass 
+     (env, "gnu/java/awt/peer/gtk/GdkGlyphVector");
+ 
+   glyphVector_ctor = (*env)->GetMethodID 
+     (env, glyphVector_class, "<init>", 
+      "([D[ILjava/awt/Font;Ljava/awt/font/FontRenderContext;)V");
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkFontPeer_initState
+   (JNIEnv *env, jobject self)
+ {
+   struct peerfont *pfont = NULL;
+   gdk_threads_enter ();
+   g_assert (self != NULL);
+   pfont = (struct peerfont *) g_malloc0 (sizeof (struct peerfont));
+   g_assert (pfont != NULL);
+   NSA_SET_FONT_PTR (env, self, pfont);
+   gdk_threads_leave ();
+ }
+ 
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkFontPeer_dispose
+   (JNIEnv *env, jobject self)
+ {
+   struct peerfont *pfont = NULL;
+ 
+   gdk_threads_enter ();
+   pfont = (struct peerfont *)NSA_DEL_FONT_PTR (env, self);
+   g_assert (pfont != NULL);
+   if (pfont->layout != NULL)
+     g_object_unref (pfont->font);
+   if (pfont->font != NULL)
+     g_object_unref (pfont->font);
+   if (pfont->ctx != NULL)
+     g_object_unref (pfont->ctx);
+   if (pfont->desc != NULL)
+     pango_font_description_free (pfont->desc);
+   g_free (pfont);
+   gdk_threads_leave ();
+ }
+ 
+ 
+ JNIEXPORT jobject JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector
+   (JNIEnv *env, jobject self, 
+    jstring chars,
+    jobject font, 
+    jobject fontRenderContext)
+ {
+   struct peerfont *pfont = NULL;
+   GList *items = NULL, *i = NULL;
+   gchar *str = NULL;
+   int len, j;
+   double *native_extents;
+   int *native_codes;
+   jintArray java_codes = NULL;
+   jdoubleArray java_extents = NULL;
+ 
+   gdk_threads_enter ();
+ 
+   pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, self);
+   g_assert (pfont != NULL);
+ 
+   len = (*gdk_env())->GetStringUTFLength (env, chars);  
+   str = (gchar *)(*env)->GetStringUTFChars (env, chars, NULL);
+   g_assert (str != NULL);
+ 
+   if (attrs == NULL)
+     attrs = pango_attr_list_new ();
+ 
+   if (len > 0 && str[len-1] == '\0')
+     len--;
+   
+   items = pango_itemize (pfont->ctx, str, 0, len, attrs, NULL);
+ 
+   i = g_list_first (items);
+ 
+   if (i == NULL)       
+     {
+       java_extents = (*env)->NewDoubleArray (env, 0);
+       java_codes = (*env)->NewIntArray (env, 0);
+     }
+   else
+     { 
+       PangoGlyphString *glyphs;
+       PangoItem *item = (PangoItem *)i->data;
+ 
+       pango_context_set_font_description (pfont->ctx, pfont->desc);
+       pango_context_set_language (pfont->ctx, gtk_get_default_language());
+       pango_context_load_font (pfont->ctx, pfont->desc);
+ 
+       glyphs = pango_glyph_string_new ();
+       g_assert (glyphs != NULL);
+ 
+       pango_shape (str + item->offset, item->length, 
+ 		   &(item->analysis), glyphs);
+ 
+       if (glyphs->num_glyphs > 0)
+ 	{
+ 	  int x = 0;
+ 	  double scale = ((double) PANGO_SCALE);
+ 
+ 	  java_extents = (*env)->NewDoubleArray (env, glyphs->num_glyphs * NUM_GLYPH_METRICS);
+ 	  java_codes = (*env)->NewIntArray (env, glyphs->num_glyphs);
+ 	  native_extents = (*env)->GetDoubleArrayElements (env, java_extents, NULL);
+ 	  native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);
+ 
+ 	  for (j = 0; j < glyphs->num_glyphs; ++j)
+ 	    {
+ 	      PangoRectangle ink;
+ 	      PangoRectangle logical;
+ 	      PangoGlyphGeometry *geom = &glyphs->glyphs[j].geometry;
+ 
+ 	      pango_font_get_glyph_extents (pfont->font, 
+ 					    glyphs->glyphs[j].glyph,
+ 					    &ink, &logical);
+ 
+ 	      native_codes[j] = glyphs->glyphs[j].glyph;
+ 
+ 	      native_extents[ GLYPH_LOG_X(j)      ] = (logical.x)      / scale;
+ 	      native_extents[ GLYPH_LOG_Y(j)      ] = (- logical.y)    / scale;
+ 	      native_extents[ GLYPH_LOG_WIDTH(j)  ] = (logical.width)  / scale;
+ 	      native_extents[ GLYPH_LOG_HEIGHT(j) ] = (logical.height) / scale;
+ 
+ 	      native_extents[ GLYPH_INK_X(j)      ] = (ink.x)       / scale;
+ 	      native_extents[ GLYPH_INK_Y(j)      ] = (- ink.y)     / scale;
+ 	      native_extents[ GLYPH_INK_WIDTH(j)  ] = (ink.width)   / scale;
+ 	      native_extents[ GLYPH_INK_HEIGHT(j) ] = (ink.height)  / scale;
+ 
+ 	      native_extents[ GLYPH_POS_X(j)      ] = (x + geom->x_offset)  / scale;
+ 	      native_extents[ GLYPH_POS_Y(j)      ] = (  - geom->y_offset)  / scale;
+ 
+ 	      x += geom->width;
+ 	    }
+ 	  (*env)->ReleaseDoubleArrayElements (env, java_extents, native_extents, 0);
+ 	  (*env)->ReleaseIntArrayElements (env, java_codes, native_codes, 0);
+ 	}
+ 
+       pango_glyph_string_free (glyphs);
+     }
+ 
+   (*env)->ReleaseStringUTFChars (env, chars, str);
+   
+   for (i = g_list_first (items); i != NULL; i = g_list_next (i))
+     g_free (i->data);
+   
+   g_list_free (items);
+ 
+   gdk_threads_leave ();
+ 
+   return (*env)->NewObject (env, 
+ 			    glyphVector_class, 
+ 			    glyphVector_ctor, 
+ 			    java_extents, java_codes,
+ 			    font, fontRenderContext);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics
+    (JNIEnv *env, jobject java_font, jdoubleArray java_metrics)
+ {
+   struct peerfont *pfont = NULL;
+   jdouble *native_metrics = NULL;
+   PangoFontMetrics *pango_metrics;
+ 
+   gdk_threads_enter();
+ 
+   pfont = (struct peerfont *) NSA_GET_FONT_PTR (env, java_font);
+   g_assert (pfont != NULL);
+ 
+   pango_metrics 
+     = pango_context_get_metrics (pfont->ctx, pfont->desc,
+ 				 gtk_get_default_language ());
+ 
+   native_metrics 
+     = (*env)->GetDoubleArrayElements (env, java_metrics, NULL);
+ 
+   g_assert (native_metrics != NULL);
+ 
+   native_metrics[FONT_METRICS_ASCENT] 
+     = PANGO_PIXELS (pango_font_metrics_get_ascent (pango_metrics));
+ 
+   native_metrics[FONT_METRICS_MAX_ASCENT] 
+     = native_metrics[FONT_METRICS_ASCENT];
+ 
+   native_metrics[FONT_METRICS_DESCENT] 
+     = PANGO_PIXELS (pango_font_metrics_get_descent (pango_metrics));
+ 
+   if (native_metrics[FONT_METRICS_DESCENT] < 0)
+     native_metrics[FONT_METRICS_DESCENT] 
+       = - native_metrics[FONT_METRICS_DESCENT];
+ 
+   native_metrics[FONT_METRICS_MAX_DESCENT] 
+     = native_metrics[FONT_METRICS_DESCENT];
+ 
+   native_metrics[FONT_METRICS_MAX_ADVANCE] 
+     = PANGO_PIXELS (pango_font_metrics_get_approximate_char_width 
+ 		    (pango_metrics));
+ 	 
+   (*env)->ReleaseDoubleArrayElements (env, 
+ 				      java_metrics, 
+ 				      native_metrics, 0);
+ 
+   pango_font_metrics_unref (pango_metrics);
+ 
+   gdk_threads_leave();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getTextMetrics
+    (JNIEnv *env, jobject java_font, jstring str, jdoubleArray java_metrics)
+ {
+   struct peerfont *pfont = NULL;
+   const char *cstr = NULL;
+   jdouble *native_metrics = NULL;  
+   PangoRectangle log;
+ 
+   gdk_threads_enter();
+ 
+   pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, java_font);
+   g_assert (pfont != NULL);
+ 
+   cstr = (*env)->GetStringUTFChars (env, str, NULL);
+   g_assert(cstr != NULL);
+ 
+   pango_layout_set_text (pfont->layout, cstr, -1);
+   pango_layout_get_extents (pfont->layout, NULL, &log);
+ 
+   (*env)->ReleaseStringUTFChars (env, str, cstr);  
+   pango_layout_set_text (pfont->layout, "", -1);
+ 
+   native_metrics = (*env)->GetDoubleArrayElements (env, java_metrics, NULL);
+   g_assert (native_metrics != NULL);
+ 
+   native_metrics[TEXT_METRICS_X_BEARING] 
+     = PANGO_PIXELS( ((double)log.x) );
+ 
+   native_metrics[TEXT_METRICS_Y_BEARING] 
+     = PANGO_PIXELS( ((double)log.y) );
+ 
+   native_metrics[TEXT_METRICS_WIDTH] 
+     = PANGO_PIXELS( ((double)log.width) );
+ 
+   native_metrics[TEXT_METRICS_HEIGHT] 
+     = PANGO_PIXELS( ((double)log.height) );
+ 
+   native_metrics[TEXT_METRICS_X_ADVANCE] 
+     = PANGO_PIXELS( ((double) (log.x + log.width)) );
+ 
+   native_metrics[TEXT_METRICS_Y_ADVANCE] 
+     = PANGO_PIXELS( ((double) (log.y + log.height)) );
+ 	 
+   (*env)->ReleaseDoubleArrayElements (env, java_metrics, native_metrics, 0);
+ 
+   gdk_threads_leave();
+ }
+ 
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont
+   (JNIEnv *env, jobject self, jstring family_name_str, jint style_int, jint size, jboolean useGraphics2D)
+ {
+   struct peerfont *pfont = NULL;
+   char const *family_name = NULL;
+   enum java_awt_font_style style;
+   PangoFT2FontMap *ft2_map;
+ 
+   gdk_threads_enter ();
+   style = (enum java_awt_font_style) style_int;
+ 
+   g_assert (self != NULL);
+   pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, self);
+   g_assert (pfont != NULL);
+ 
+   if (pfont->ctx != NULL)
+     g_object_unref (pfont->ctx);
+   if (pfont->font != NULL)
+     g_object_unref (pfont->font);
+   if (pfont->desc != NULL)
+     pango_font_description_free (pfont->desc);
+ 
+   pfont->desc = pango_font_description_new ();
+   g_assert (pfont->desc != NULL);
+ 
+   family_name = (*env)->GetStringUTFChars(env, family_name_str, 0);
+   g_assert (family_name != NULL);
+   pango_font_description_set_family (pfont->desc, family_name);
+   (*env)->ReleaseStringUTFChars(env, family_name_str, family_name);
+ 
+ 
+   if (style & java_awt_font_BOLD)
+     pango_font_description_set_weight (pfont->desc, PANGO_WEIGHT_BOLD);
+ 
+   if (style & java_awt_font_ITALIC)
+     pango_font_description_set_style (pfont->desc, PANGO_STYLE_ITALIC);
+ 
+   if (useGraphics2D)
+     {
+       pango_font_description_set_size (pfont->desc, size * PANGO_SCALE);
+       if (pfont->ctx == NULL)
+ 	{
+ 	  ft2_map = PANGO_FT2_FONT_MAP(pango_ft2_font_map_for_display ());
+ 	  pfont->ctx = pango_ft2_font_map_create_context (ft2_map);
+ 	}
+     }
+   else
+     {
+       /* GDK uses a slightly different DPI setting. */
+       pango_font_description_set_size (pfont->desc, 
+ 				       size * dpi_conversion_factor);
+       if (pfont->ctx == NULL)
+ 	pfont->ctx = gdk_pango_context_get();
+     }
+ 
+   g_assert (pfont->ctx != NULL);
+   
+   if (pfont->font != NULL)
+     {
+       g_object_unref (pfont->font);
+       pfont->font = NULL;
+     }
+   
+   pango_context_set_font_description (pfont->ctx, pfont->desc);
+   pango_context_set_language (pfont->ctx, gtk_get_default_language());
+   pfont->font = pango_context_load_font (pfont->ctx, pfont->desc);
+   g_assert (pfont->font != NULL);
+ 
+   if (pfont->layout == NULL)
+     pfont->layout = pango_layout_new (pfont->ctx);
+   g_assert (pfont->layout != NULL);
+ 
+   gdk_threads_leave ();
+ }
+ 
+ 
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c	Thu Nov 20 22:44:01 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c	Thu Jan  1 00:00:00 1970
***************
*** 1,660 ****
- /* gdkglyphvector.c
-    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., 59 Temple Place, Suite 330, Boston, MA
-    02111-1307 USA.
-    
-    Linking this library statically or dynamically with other modules is
-    making a combined work based on this library.  Thus, the terms and
-    conditions of the GNU General Public License cover the whole
-    combination.
-    
-    As a special exception, the copyright holders of this library give you
-    permission to link this library with independent modules to produce an
-    executable, regardless of the license terms of these independent
-    modules, and to copy and distribute the resulting executable under
-    terms of your choice, provided that you also meet, for each linked
-    independent module, the terms and conditions of the license of that
-    module.  An independent module is a module which is not derived from
-    or based on this library.  If you modify this library, you may extend
-    this exception to your version of the library, but you are not
-    obligated to do so.  If you do not wish to do so, delete this
-    exception statement from your version. */
- 
- #include "gdkfont.h"
- #include "gnu_java_awt_peer_gtk_GdkGlyphVector.h"
- 
- struct state_table *native_glyphvector_state_table;
- 
- typedef struct { 
-   double x;
-   double y;
-   double width;
-   double height;
- } rect_t;
- 
- #define DOUBLE_TO_26_6(d) ((FT_F26Dot6)((d) * 63.0))
- #define DOUBLE_FROM_26_6(t) (((double)((t) >> 6)) \
- 			     + ((double)((t) & 0x3F) / 63.0))
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_initStaticState 
-   (JNIEnv *env, jclass clazz)
- {
-   NSA_GV_INIT (env, clazz);
- }
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_initState 
-   (JNIEnv *env, jobject self, jobject font, jobject ctx)
- {
-   struct glyphvec *vec = NULL;
-   struct peerfont *pfont = NULL;
- 
-   gdk_threads_enter ();
-   g_assert (font != NULL);
-   pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
-   g_assert (pfont != NULL);
-   g_assert (pfont->ctx != NULL);
-   g_assert (pfont->desc != NULL);
- 
-   g_assert (self != NULL);
-   vec = (struct glyphvec *) g_malloc0 (sizeof (struct glyphvec));
-   g_assert (vec != NULL);
- 
-   vec->desc = pango_font_describe (pfont->font); 
-   g_assert (vec->desc != NULL);
- 
-   vec->font = pfont->font;
-   g_object_ref (vec->font);
-     
-   vec->ctx = pfont->ctx;
-   g_object_ref (vec->ctx);
- 
-   NSA_SET_GV_PTR (env, self, vec);
-   gdk_threads_leave ();
- }
- 
- static void free_glyphitems (GList *list)
- {
-   GList *i = NULL;
-   PangoGlyphItem *gi = NULL;
- 
-   for (i = g_list_first (list); i != NULL; i = g_list_next (i))
-     {
-       g_assert (i->data != NULL);
-       gi = (PangoGlyphItem *)i->data;
- 
-       if (gi->glyphs != NULL)
- 	pango_glyph_string_free (gi->glyphs);
- 
-       if (gi->item != NULL)
- 	g_free (gi->item);
-     }      
-   g_list_free (list);
- }
- 
- static void seek_glyphstring_idx (GList *list, int idx, 
- 				  int *nidx, 
- 				  PangoGlyphString **gs,
- 				  PangoFont **fnt)
- {
-   GList *i = NULL;
-   PangoGlyphItem *gi = NULL;
- 
-   g_assert (list != NULL);
-   g_assert (gs != NULL);
-   g_assert (nidx != NULL);
- 
-   int begin = 0;
-   for (i = g_list_first (list); i != NULL; i = g_list_next (i))
-     {
-       g_assert (i->data != NULL);
-       gi = (PangoGlyphItem *)i->data;
- 
-       g_assert (gi->glyphs != NULL);
-       
-       if (begin <= idx && idx < begin + gi->glyphs->num_glyphs)
- 	{	  
- 	  *gs = gi->glyphs;
- 	  *nidx = idx - begin;
- 	  if (fnt && gi->item)
- 	    *fnt = gi->item->analysis.font;
- 	  return;
- 	}
-       else
- 	{
- 	  begin += gi->glyphs->num_glyphs;
- 	}
-     }
-   *gs = NULL;
-   *nidx = -1;
- }
- 
- static void seek_glyph_idx (GList *list, int idx, 
- 			    PangoGlyphInfo **g,
- 			    PangoFont **fnt)
- {
-   PangoGlyphString *gs = NULL;
-   int nidx = -1;
- 
-   g_assert (list != NULL);
-   g_assert (g != NULL);
- 
-   seek_glyphstring_idx (list, idx, &nidx, &gs, fnt);
- 
-   g_assert (gs != NULL);
-   g_assert (nidx != -1);
-   g_assert (nidx < gs->num_glyphs);
-   g_assert (gs->glyphs != NULL);
- 
-   *g = gs->glyphs + nidx;
- }
- 
- static void union_rects (rect_t *r1, 
- 			 const rect_t *r2)
- {
-   rect_t r;
- 
-   g_assert (r1 != NULL);
-   g_assert (r2 != NULL);
- 
-   /* 
-      x is the left edge of the rect,
-      y is the top edge of the rect
-   */
- 
- #ifndef min
- #define min(x,y) ((x) < (y) ? (x) : (y))
- #endif
- 
- #ifndef max
- #define max(x,y) ((x) < (y) ? (y) : (x))
- #endif
- 
-   r.x = min(r1->x, r2->x);
- 
-   r.y = min(r1->y, r2->y);
- 
-   r.width = max(r1->x + r1->width,
- 		r2->x + r2->width) - r.x;
- 
-   r.height = max(r1->y + r1->height,
- 		 r2->y + r2->height) - r.y;
- 
-   *r1 = r;  
- }
- 
- static jdoubleArray rect_to_array (JNIEnv *env, const rect_t *r)
- {
-   /* We often return rectangles as arrays : { x, y, w, h } */
-   jdoubleArray ret;
-   double *rp = NULL;
-   g_assert (r != NULL);
-   ret = (*env)->NewDoubleArray (env, 4);
-   rp = (*env)->GetDoubleArrayElements (env, ret, NULL);
-   g_assert (rp != NULL);
-   rp[0] = r->x;
-   /* freetype and pango's view of space is upside down from java2d's */
-   rp[1] = r->y * -1;
-   rp[2] = r->width;
-   rp[3] = r->height;
-   (*env)->ReleaseDoubleArrayElements (env, ret, rp, 0);
-   return ret;
- }
- 
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_dispose
-   (JNIEnv *env, jobject self)
- {
-   struct glyphvec *vec = NULL;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_DEL_GV_PTR (env, self);
-   g_assert (vec != NULL);
- 
-   if (vec->glyphitems != NULL)
-     {
-       free_glyphitems (vec->glyphitems);
-       vec->glyphitems = NULL;
-     }
-       
-   if (vec->desc != NULL)
-     pango_font_description_free (vec->desc);
- 
-   if (vec->ctx != NULL)
-     g_object_unref (vec->ctx);
- 
-   g_free (vec);
-   gdk_threads_leave ();
- }
- 
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setChars 
-   (JNIEnv *env, jobject self, jstring chars)
- {
-   struct glyphvec *vec = NULL;
-   gchar *str = NULL;
-   GList *items = NULL, *item = NULL;
-   PangoGlyphItem *gi;
-   PangoAttrList *attrs = NULL; 
-   gint len = 0;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   g_assert (vec != NULL);
-   g_assert (vec->desc != NULL);
-   g_assert (vec->ctx != NULL);
-   
-   len = (*gdk_env)->GetStringUTFLength (env, chars);
-   str = (gchar *)(*env)->GetStringUTFChars (env, chars, NULL);
-   g_assert (str != NULL);
- 
-   /* step 1: set our FontFescription in the context, then "itemize" the
-      text */
- 
-   attrs = pango_attr_list_new ();
-   g_assert (attrs != NULL);
-   
-   pango_context_set_font_description (vec->ctx, vec->desc);
- 
-   items = pango_itemize (vec->ctx, str, 0, len, attrs, NULL);
-   g_assert (items != NULL);
-   
-   /*
-     step 2: for each item:
-     - shape the item into a glyphstring
-     - store the (item, glyphstring) pair in the vec->glyphitems list
-   */
-   
-   if (vec->glyphitems != NULL)
-     {
-       free_glyphitems (vec->glyphitems);
-       vec->glyphitems = NULL;
-     }
- 
-   for (item = g_list_first (items); item != NULL; item = g_list_next (item))
-     {
-       g_assert (item->data != NULL);
- 
-       gi = NULL;
-       gi = g_malloc0 (sizeof(PangoGlyphItem));
-       g_assert (gi != NULL);
- 
-       gi->item = (PangoItem *)item->data;
-       gi->glyphs = pango_glyph_string_new ();
-       g_assert (gi->glyphs != NULL);
- 
-       pango_shape (str + gi->item->offset, 
- 		   gi->item->length, 
- 		   &(gi->item->analysis), 
- 		   gi->glyphs);
- 
-       vec->glyphitems = g_list_append (vec->glyphitems, gi);
-     }
- 
-   /* 
-      ownership of each item has been transferred to glyphitems, 
-      but the list should be freed.
-   */
- 
-   g_list_free (items);
-   pango_attr_list_unref (attrs);
- 
-   (*env)->ReleaseStringUTFChars (env, chars, str);
-   gdk_threads_leave ();
- }
- 
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_setGlyphCodes 
-   (JNIEnv *env, jobject self, jintArray codes)
- {
-   struct glyphvec *vec = NULL;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   g_assert (vec != NULL);
- 
-   /*
-     FIXME: setting glyph codes doesn't seem particularly plausible at the
-     moment. 
-    */
- 
-   gdk_threads_leave ();
- 
- }
- 
- 
- JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphCode 
-   (JNIEnv *env, jobject self, jint idx)
- {
-   struct glyphvec *vec = NULL;
-   PangoGlyphInfo *gi = NULL;
-   jint ret = 0;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   g_assert (vec != NULL);
-   g_assert (vec->glyphitems != NULL);
- 
-   seek_glyph_idx (vec->glyphitems, idx, &gi, NULL);
-   g_assert (gi != NULL);
-   ret = gi->glyph;
-   gdk_threads_leave ();
- 
-   return (jint)(ret);  
- }
- 
- 
- JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_numGlyphs 
-   (JNIEnv *env, jobject self)
- {
-   GList *i = NULL;
-   PangoGlyphItem *gi = NULL;
-   struct glyphvec *vec = NULL;
-   jint count = 0;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   g_assert (vec != NULL);
- 
-   for (i = g_list_first (vec->glyphitems); i != NULL; i = g_list_next (i))
-     {
-       g_assert (i->data != NULL);
-       gi = (PangoGlyphItem *)i->data;
-       g_assert (gi->glyphs != NULL);
-       count += gi->glyphs->num_glyphs;
-     }      
-   gdk_threads_leave ();
- 
-   return count;
- }
- 
- 
- JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphCharIndex 
-   (JNIEnv *env, jobject self, jint idx)
- {
-   /* 
-      FIXME: this is not correct, rather it assumes a (broken) 1:1
-      glyph:char model. it can be implemented in terms of bytes (also
-      broken) using pango's current interface, or perhaps in terms of
-      characters if some better byte->character conversion operator is
-      found. for the time being we leave it broken.
-   */
-   return idx;
- }
- 
- 
- JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_allInkExtents 
-   (JNIEnv *env, jobject self)
- {
-   struct glyphvec *vec = NULL;
-   int j;
-   GList *i;
-   PangoGlyphItem *gi = NULL;
-   rect_t rect = {0,0,0,0};
-   rect_t tmp;  
-   jdoubleArray ret;
-   double x = 0, y = 0;
-   double pointsize;
-   FT_Face face;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   g_assert (vec != NULL);
-   g_assert (vec->glyphitems != NULL);
- 
-   pointsize = pango_font_description_get_size (vec->desc);
-   pointsize /= (double) PANGO_SCALE;
- 
-   for (i = g_list_first (vec->glyphitems); i != NULL; i = g_list_next (i))
-     {
-       g_assert (i->data != NULL);
-       gi = (PangoGlyphItem *)i->data;
-       g_assert (gi->glyphs != NULL);
- 
-       face = pango_ft2_font_get_face (gi->item->analysis.font);
-       FT_Set_Char_Size( face, 
- 			DOUBLE_TO_26_6 (pointsize),
- 			DOUBLE_TO_26_6 (pointsize),
- 			0, 0);
-       
-       for (j = 0; j < gi->glyphs->num_glyphs; ++j)
- 	{
- 	  FT_Load_Glyph (face, gi->glyphs->glyphs[j].glyph, FT_LOAD_DEFAULT);
- 	  /* FIXME: this needs to change for vertical layouts */
- 	  tmp.x = x + DOUBLE_FROM_26_6 (face->glyph->metrics.horiBearingX);
- 	  tmp.y = y + DOUBLE_FROM_26_6 (face->glyph->metrics.horiBearingY);
- 	  tmp.width = DOUBLE_FROM_26_6 (face->glyph->metrics.width);
- 	  tmp.height = DOUBLE_FROM_26_6 (face->glyph->metrics.height);
- 	  union_rects (&rect, &tmp);
- 	  x += DOUBLE_FROM_26_6 (face->glyph->advance.x);
- 	  y += DOUBLE_FROM_26_6 (face->glyph->advance.y);
- 	}
-     }      
- 
-   ret = rect_to_array (env, &rect);
-   gdk_threads_leave ();
-   return ret;
- }
- 
- 
- JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_allLogicalExtents 
-   (JNIEnv *env, jobject self)
- {
-   struct glyphvec *vec = NULL;
-   int j;
-   GList *i;
-   PangoGlyphItem *gi = NULL;
-   rect_t rect = {0,0,0,0};
-   rect_t tmp;  
-   jdoubleArray ret;
-   double x = 0, y = 0;
-   double pointsize;
-   FT_Face face;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   g_assert (vec != NULL);
-   g_assert (vec->glyphitems != NULL);
- 
-   pointsize = pango_font_description_get_size (vec->desc);
-   pointsize /= (double) PANGO_SCALE;
- 
-   for (i = g_list_first (vec->glyphitems); i != NULL; i = g_list_next (i))
-     {
-       g_assert (i->data != NULL);
-       gi = (PangoGlyphItem *)i->data;
-       g_assert (gi->glyphs != NULL);
- 
-       face = pango_ft2_font_get_face (gi->item->analysis.font);
-       FT_Set_Char_Size( face, 
- 			DOUBLE_TO_26_6 (pointsize),
- 			DOUBLE_TO_26_6 (pointsize),
- 			0, 0);
-       
-       for (j = 0; j < gi->glyphs->num_glyphs; ++j)
- 	{
- 	  FT_Load_Glyph (face, gi->glyphs->glyphs[j].glyph, FT_LOAD_DEFAULT);
- 
- 	  /* FIXME: also, this is probably not the correct set of metrics;
- 	     the "logical bounds" are some fancy combination of hori
- 	     advance and height such that it's good for inverting as a
- 	     highlight. revisit. */
- 
- 	  tmp.x = x;
- 	  tmp.y = y;
- 	  tmp.width = DOUBLE_FROM_26_6 (face->glyph->advance.x);
- 	  tmp.height = DOUBLE_FROM_26_6 (face->glyph->advance.y);
- 	  union_rects (&rect, &tmp);
- 	  x += DOUBLE_FROM_26_6 (face->glyph->advance.x);
- 	  y += DOUBLE_FROM_26_6 (face->glyph->advance.y);
- 	}
-     }      
- 
-   ret = rect_to_array (env, &rect);
-   gdk_threads_leave ();
-   return ret;
- }
- 
- 
- JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphLogicalExtents 
-   (JNIEnv *env, jobject self, jint idx)
- {
-   struct glyphvec *vec = NULL;
-   rect_t rect = {0,0,0,0};
-   PangoGlyphInfo *gi = NULL;
-   PangoFont *font = NULL;
-   jdoubleArray ret;
-   double pointsize;
-   FT_Face face;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   g_assert (vec != NULL);
-   g_assert (vec->glyphitems != NULL);
-  
-   seek_glyph_idx (vec->glyphitems, idx, &gi, &font);
-   g_assert (gi != NULL);
-   g_assert (font != NULL);
- 
-   pointsize = pango_font_description_get_size (vec->desc);
-   pointsize /= (double) PANGO_SCALE;
-   face = pango_ft2_font_get_face (font);
-   FT_Set_Char_Size( face, 
- 		    DOUBLE_TO_26_6 (pointsize),
- 		    DOUBLE_TO_26_6 (pointsize),
- 		    0, 0);
-   
-   FT_Load_Glyph (face, gi->glyph, FT_LOAD_DEFAULT);
- 
-   /* FIXME: this is probably not the correct set of metrics;
-      the "logical bounds" are some fancy combination of hori
-      advance and height such that it's good for inverting as a
-      highlight. revisit. */
-   
-   rect.x = 0; 
-   rect.y = 0; 
-   rect.width = DOUBLE_FROM_26_6 (face->glyph->advance.x);
-   rect.height = DOUBLE_FROM_26_6 (face->glyph->advance.y);
- 
-   ret = rect_to_array (env, &rect);
-   gdk_threads_leave ();
-   return ret;
- }
- 
- 
- JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphInkExtents 
-   (JNIEnv *env, jobject self, jint idx)
- {
-   struct glyphvec *vec = NULL;
-   rect_t rect = {0,0,0,0};
-   PangoGlyphInfo *gi = NULL;
-   PangoFont *font = NULL;
-   jdoubleArray ret;
-   double pointsize;
-   FT_Face face;
-   
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   g_assert (vec != NULL);
-   g_assert (vec->glyphitems != NULL);
-  
-   seek_glyph_idx (vec->glyphitems, idx, &gi, &font);
-   g_assert (gi != NULL);
-   g_assert (font != NULL);
- 
-   pointsize = pango_font_description_get_size (vec->desc);
-   pointsize /= (double) PANGO_SCALE;
-   face = pango_ft2_font_get_face (font);
-   FT_Set_Char_Size( face, 
- 		    DOUBLE_TO_26_6 (pointsize),
- 		    DOUBLE_TO_26_6 (pointsize),
- 		    0, 0);
-   
-   FT_Load_Glyph (face, gi->glyph, FT_LOAD_DEFAULT);
-   /* FIXME: this needs to change for vertical layouts */
-   rect.x = DOUBLE_FROM_26_6 (face->glyph->metrics.horiBearingX);
-   rect.y = DOUBLE_FROM_26_6 (face->glyph->metrics.horiBearingY);
-   rect.width = DOUBLE_FROM_26_6 (face->glyph->metrics.width);
-   rect.height = DOUBLE_FROM_26_6 (face->glyph->metrics.height);
- 
-   ret = rect_to_array (env, &rect);
-   gdk_threads_leave ();
-   return ret;
- }
- 
- 
- JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphIsHorizontal 
-   (JNIEnv *env, jobject self, jint idx)
- {
-   struct glyphvec *vec = NULL;
-   PangoDirection dir;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   g_assert (vec != NULL);
-   g_assert (vec->desc != NULL);
-   g_assert (vec->ctx != NULL);
- 
-   /* 
-      FIXME: this is an approximation; it's not clear to me whether
-      glyphs themselves are horizontal or vertical so much as the
-      writing system or writing context. pango thinks it's a context
-      issue, so we use that for now.
-    */
- 
-   dir = pango_context_get_base_dir (vec->ctx);
- 
-   gdk_threads_leave ();
- 
-   return 
-     ((dir == PANGO_DIRECTION_LTR) ||
-      (dir == PANGO_DIRECTION_RTL));    
- }
- 
- 
- JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_isEqual 
-   (JNIEnv *env, jobject self, jobject other)
- {
-   struct glyphvec *vec1 = NULL, *vec2 = NULL;
-   jboolean eq = 0;
- 
-   gdk_threads_enter ();
-   g_assert (self != NULL);
-   vec1 = (struct glyphvec *)NSA_GET_GV_PTR (env, self);
-   vec2 = (struct glyphvec *)NSA_GET_GV_PTR (env, other);
-   g_assert (vec1 != NULL);
-   g_assert (vec2 != NULL);
-   
-   /* FIXME: is there some more advantageous definition of equality for
-      glyph vectors? */
-   eq = (vec1 == vec2);
-   
-   gdk_threads_leave ();
-   return eq;
- }
- 
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c	Wed Oct  8 23:38:45 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c	Wed Feb 16 20:03:19 2005
*************** obligated to do so.  If you do not wish 
*** 36,41 ****
--- 36,42 ----
  exception statement from your version. */
  
  #include "gtkpeer.h"
+ #include "gdkfont.h"
  #include "gnu_java_awt_peer_gtk_GdkGraphics.h"
  #include <gdk/gdkprivate.h>
  #include <gdk/gdkx.h>
*************** exception statement from your version. *
*** 45,52 ****
  GdkPoint *
  translate_points (JNIEnv *env, jintArray xpoints, jintArray ypoints, 
  		  jint npoints, jint x_offset, jint y_offset);
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_copyState
    (JNIEnv *env, jobject obj, jobject old)
  {
    struct graphics *g, *g_old;
--- 46,55 ----
  GdkPoint *
  translate_points (JNIEnv *env, jintArray xpoints, jintArray ypoints, 
  		  jint npoints, jint x_offset, jint y_offset);
+ static void realize_cb (GtkWidget *widget, jobject peer);
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_copyState
    (JNIEnv *env, jobject obj, jobject old)
  {
    struct graphics *g, *g_old;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 73,79 ****
    NSA_SET_PTR (env, obj, g);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__II
    (JNIEnv *env, jobject obj, jint width, jint height)
  {
    struct graphics *g;
--- 76,83 ----
    NSA_SET_PTR (env, obj, g);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__II
    (JNIEnv *env, jobject obj, jint width, jint height)
  {
    struct graphics *g;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 87,92 ****
--- 91,97 ----
    g->cm = gdk_rgb_get_cmap ();
    gdk_colormap_ref (g->cm);
    g->gc = gdk_gc_new (g->drawable);
+ 
    gdk_threads_leave ();
  
    NSA_SET_PTR (env, obj, g);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 94,108 ****
  
  /* copy the native state of the peer (GtkWidget *) to the native state
     of the graphics object */
! JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2
    (JNIEnv *env, jobject obj, jobject peer)
  {
    struct graphics *g = (struct graphics *) malloc (sizeof (struct graphics));
    void *ptr;
    GtkWidget *widget;
    GdkColor color;
-   jintArray array;
-   jint *rgb;
  
    ptr = NSA_GET_PTR (env, peer);
    g->x_offset = g->y_offset = 0;
--- 99,112 ----
  
  /* copy the native state of the peer (GtkWidget *) to the native state
     of the graphics object */
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2
    (JNIEnv *env, jobject obj, jobject peer)
  {
    struct graphics *g = (struct graphics *) malloc (sizeof (struct graphics));
    void *ptr;
    GtkWidget *widget;
    GdkColor color;
  
    ptr = NSA_GET_PTR (env, peer);
    g->x_offset = g->y_offset = 0;
*************** JNIEXPORT jintArray JNICALL Java_gnu_jav
*** 110,128 ****
    gdk_threads_enter ();
  
    widget = GTK_WIDGET (ptr);
! 
!   if (GTK_IS_WINDOW (widget))
!     {
!       g->drawable = find_gtk_layout (widget)->bin_window;
!     }
!   else if (GTK_IS_LAYOUT (widget))
!     {
!       g->drawable = (GdkDrawable *) GTK_LAYOUT (widget)->bin_window;
!     }
!   else
!     {
!       g->drawable = (GdkDrawable *) widget->window;
!     }
  
    gdk_window_ref (g->drawable);
    g->cm = gtk_widget_get_colormap (widget);
--- 114,120 ----
    gdk_threads_enter ();
  
    widget = GTK_WIDGET (ptr);
!   g->drawable = (GdkDrawable *) widget->window;
  
    gdk_window_ref (g->drawable);
    g->cm = gtk_widget_get_colormap (widget);
*************** JNIEXPORT jintArray JNICALL Java_gnu_jav
*** 133,155 ****
  
    gdk_threads_leave ();
  
-   array = (*env)->NewIntArray (env, 3);
-   rgb = (*env)->GetIntArrayElements (env, array, NULL);
-   rgb[0] = color.red >> 8;
-   rgb[1] = color.green >> 8;
-   rgb[2] = color.blue >> 8;
-   (*env)->ReleaseIntArrayElements (env, array, rgb, 0);
- 
    NSA_SET_PTR (env, obj, g);
  
!   return array;
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_dispose
    (JNIEnv *env, jobject obj)
  {
    struct graphics *g;
  
    g = (struct graphics *) NSA_DEL_PTR (env, obj);
  
    if (!g) return;		/* dispose has been called more than once */
--- 125,160 ----
  
    gdk_threads_leave ();
  
    NSA_SET_PTR (env, obj, g);
+ }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_connectSignals
!   (JNIEnv *env, jobject obj, jobject peer)
! {
!   void *ptr;
!   jobject *gref;
! 
!   NSA_SET_GLOBAL_REF (env, obj);
!   gref = NSA_GET_GLOBAL_REF (env, obj);
! 
!   ptr = NSA_GET_PTR (env, peer);
! 
!   gdk_threads_enter ();
! 
!   g_signal_connect_after (G_OBJECT (ptr), "realize",
!                           G_CALLBACK (realize_cb), *gref);
! 
!   gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_dispose
    (JNIEnv *env, jobject obj)
  {
    struct graphics *g;
  
+   
    g = (struct graphics *) NSA_DEL_PTR (env, obj);
  
    if (!g) return;		/* dispose has been called more than once */
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 168,177 ****
  
    gdk_threads_leave ();
  
    free (g);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_translateNative
    (JNIEnv *env, jobject obj, jint x, jint y)
  {
    struct graphics *g;
--- 173,184 ----
  
    gdk_threads_leave ();
  
+ 
    free (g);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_translateNative
    (JNIEnv *env, jobject obj, jint x, jint y)
  {
    struct graphics *g;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 186,237 ****
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString
!   (JNIEnv *env, jobject obj, jstring str, jint x, jint y, 
!    jstring fname, jint size)
  {
    struct graphics *g;
    const char *cstr;
-   const char *font_name;
    int baseline_y;
-   PangoFontDescription *font_desc;
-   PangoContext *context;
-   PangoLayout *layout;
    PangoLayoutIter *iter;
  
    g = (struct graphics *) NSA_GET_PTR (env, obj);
  
    cstr = (*env)->GetStringUTFChars (env, str, NULL);
-   font_name = (*env)->GetStringUTFChars (env, fname, NULL);
  
    gdk_threads_enter ();
  
!   font_desc = pango_font_description_from_string (font_name);
!   pango_font_description_set_size (font_desc, size * PANGO_SCALE);
! 
!   context = gdk_pango_context_get();
!   pango_context_set_font_description (context, font_desc);
! 
!   layout = pango_layout_new (context);
! 
!   pango_layout_set_text (layout, cstr, -1);
!   iter = pango_layout_get_iter (layout);
  
    baseline_y = pango_layout_iter_get_baseline (iter);
  
!   gdk_draw_layout (g->drawable, g->gc, 
!   		   x + g->x_offset, y + g->y_offset - (baseline_y / PANGO_SCALE), layout);
  
-   pango_font_description_free (font_desc);
    pango_layout_iter_free (iter);
  
    gdk_threads_leave ();
  
-   (*env)->ReleaseStringUTFChars (env, fname, font_name);
    (*env)->ReleaseStringUTFChars (env, str, cstr);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawLine
    (JNIEnv *env, jobject obj, jint x, jint y, jint x2, jint y2)
  {
    struct graphics *g;
--- 193,240 ----
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString
!   (JNIEnv *env, jobject obj, jobject font, jstring str, jint x, jint y)
  {
+   struct peerfont *pfont = NULL;
    struct graphics *g;
    const char *cstr;
    int baseline_y;
    PangoLayoutIter *iter;
  
    g = (struct graphics *) NSA_GET_PTR (env, obj);
+   g_assert (g != NULL);
+ 
+   pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
+   g_assert (pfont != NULL);
  
    cstr = (*env)->GetStringUTFChars (env, str, NULL);
  
    gdk_threads_enter ();
  
!   pango_layout_set_font_description (pfont->layout, pfont->desc);
!   pango_layout_set_text (pfont->layout, cstr, -1);
!   iter = pango_layout_get_iter (pfont->layout);
  
    baseline_y = pango_layout_iter_get_baseline (iter);
  
!   gdk_draw_layout (g->drawable, g->gc,
!                    x + g->x_offset,
!                    y + g->y_offset - PANGO_PIXELS (baseline_y),
!                    pfont->layout);
  
    pango_layout_iter_free (iter);
+   pango_layout_set_text (pfont->layout, "", -1);
  
+   gdk_flush ();
    gdk_threads_leave ();
  
    (*env)->ReleaseStringUTFChars (env, str, cstr);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_drawLine
    (JNIEnv *env, jobject obj, jint x, jint y, jint x2, jint y2)
  {
    struct graphics *g;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 242,251 ****
    gdk_draw_line (g->drawable, g->gc, 
  		 x + g->x_offset, y + g->y_offset, 
  		 x2 + g->x_offset, y2 + g->y_offset);
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillRect
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
--- 245,256 ----
    gdk_draw_line (g->drawable, g->gc, 
  		 x + g->x_offset, y + g->y_offset, 
  		 x2 + g->x_offset, y2 + g->y_offset);
+   gdk_flush ();
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_fillRect
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 253,264 ****
    g = (struct graphics *) NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
    gdk_draw_rectangle (g->drawable, g->gc, TRUE, 
  		      x + g->x_offset, y + g->y_offset, width, height);
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawRect
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
--- 258,272 ----
    g = (struct graphics *) NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
+ 
    gdk_draw_rectangle (g->drawable, g->gc, TRUE, 
  		      x + g->x_offset, y + g->y_offset, width, height);
+   gdk_flush ();
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_drawRect
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 268,277 ****
    gdk_threads_enter ();
    gdk_draw_rectangle (g->drawable, g->gc, FALSE, 
  		      x + g->x_offset, y + g->y_offset, width, height);
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_copyArea
    (JNIEnv *env, jobject obj, jint x, jint y, 
     jint width, jint height, jint dx, jint dy)
  {
--- 276,287 ----
    gdk_threads_enter ();
    gdk_draw_rectangle (g->drawable, g->gc, FALSE, 
  		      x + g->x_offset, y + g->y_offset, width, height);
+   gdk_flush ();
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_copyArea
    (JNIEnv *env, jobject obj, jint x, jint y, 
     jint width, jint height, jint dx, jint dy)
  {
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 286,295 ****
  			(GdkWindow *)g->drawable,
  			x + g->x_offset, y + g->y_offset,
  			width, height);
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_copyPixmap
    (JNIEnv *env, jobject obj, jobject offscreen, 
     jint x, jint y, jint width, jint height)
  {
--- 296,307 ----
  			(GdkWindow *)g->drawable,
  			x + g->x_offset, y + g->y_offset,
  			width, height);
+   gdk_flush ();
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_copyPixmap
    (JNIEnv *env, jobject obj, jobject offscreen, 
     jint x, jint y, jint width, jint height)
  {
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 305,331 ****
  			(GdkWindow *)g2->drawable,
  			0 + g2->x_offset, 0 + g2->y_offset, 
  			width, height);
    gdk_threads_leave ();
  }
    
  
  
  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
  
    g = (struct graphics *) NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
!   gdk_window_clear_area ((GdkWindow *)g->drawable, 
! 			 x + g->x_offset, y + g->y_offset, width, height);
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_setFunction
    (JNIEnv *env, jobject obj, jint func)
  {
    struct graphics *g;
--- 317,477 ----
  			(GdkWindow *)g2->drawable,
  			0 + g2->x_offset, 0 + g2->y_offset, 
  			width, height);
+   gdk_flush ();
    gdk_threads_leave ();
  }
+ 
+ static void flip_pixbuf (GdkPixbuf *pixbuf,
+                          jboolean flip_x,
+                          jboolean flip_y,
+                          jint width,
+                          jint height)
+ {
+   gint src_rs;
+   guchar *src_pix;
+ 
+   src_rs = gdk_pixbuf_get_rowstride (pixbuf);
+   src_pix = gdk_pixbuf_get_pixels (pixbuf);
+ 
+   if (flip_x) 
+     {
+       gint i, channels;
+       guchar buf[4];
+ 
+       channels = gdk_pixbuf_get_has_alpha (pixbuf) ? 4 : 3;
+ 
+       for (i = 0; i < height; i++) 
+         {
+           guchar *left = src_pix + i * src_rs;
+           guchar *right = left + channels * (width - 1);
+           while (left < right)
+             { 
+               g_memmove (buf, left, channels);
+               g_memmove (left, right, channels);
+               g_memmove (right, buf, channels);
+               left += channels;
+               right -= channels;
+             }
+         }
+     }
+ 
+   if (flip_y) 
+     {
+       guchar *top = src_pix;
+       guchar *bottom = top + (height - 1) * src_rs;
+       gpointer buf = g_malloc (src_rs);
+       
+       while (top < bottom)
+         {
+           g_memmove (buf, top, src_rs);
+           g_memmove (top, bottom, src_rs);
+           g_memmove (bottom, buf, src_rs); 
+           top += src_rs;
+           bottom -= src_rs;
+         }
+ 
+       g_free (buf);
+     }
+ }
    
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkGraphics_copyAndScalePixmap
+   (JNIEnv *env, jobject obj, jobject offscreen, jboolean flip_x, jboolean flip_y,
+    jint src_x, jint src_y, jint src_width, jint src_height,
+    jint dest_x, jint dest_y, jint dest_width, jint dest_height)
+ {
+   struct graphics *g1, *g2;
+   GdkPixbuf *buf_src, *buf_dest;
+ 
+   g1 = (struct graphics *) NSA_GET_PTR (env, obj);
+   g2 = (struct graphics *) NSA_GET_PTR (env, offscreen);
+ 
+   gdk_threads_enter ();
+ 
+   buf_src = gdk_pixbuf_get_from_drawable (NULL,
+                                           g2->drawable,
+                                           g2->cm,
+                                           src_x,
+                                           src_y,
+                                           0,
+                                           0,
+                                           src_width,
+                                           src_height);
  
+   buf_dest = gdk_pixbuf_scale_simple (buf_src, 
+                                       dest_width, 
+                                       dest_height, 
+                                       GDK_INTERP_BILINEAR);
  
+   if (flip_x || flip_y)
+     {
+       flip_pixbuf (buf_dest, flip_x, flip_y, dest_width, dest_height);
+     }
  
+   gdk_pixbuf_render_to_drawable (buf_dest,
+                                  g1->drawable,
+                                  g1->gc,
+                                  0,
+                                  0,
+                                  dest_x,
+                                  dest_y,
+                                  dest_width,
+                                  dest_height,
+                                  GDK_RGB_DITHER_NORMAL,
+                                  0,
+                                  0);
  
!   g_object_unref (G_OBJECT (buf_src));
!   g_object_unref (G_OBJECT (buf_dest));
! 
!   gdk_threads_leave ();
! }
! 
! 
! 
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
+   GdkGCValues saved;
+   GtkWidget *widget;
+   union widget_union w;
  
    g = (struct graphics *) NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
! 
!   if (!g)
!     {
!       gdk_threads_leave ();
!       return;
!     }
!   if (GDK_IS_WINDOW (g->drawable))
!     {
!       w.widget = &widget;
!       gdk_window_get_user_data (GDK_WINDOW (g->drawable), w.void_widget);
!       if (widget == NULL || !GTK_IS_EVENT_BOX (widget))
!         gdk_window_clear_area ((GdkWindow *) g->drawable,
!                                x + g->x_offset, y + g->y_offset,
!                                width, height);
!     }
!   else
!     {
!       gdk_gc_get_values (g->gc, &saved);
!       gdk_gc_set_foreground (g->gc, &(saved.background));
!       gdk_draw_rectangle (g->drawable, g->gc, TRUE, 
! 			  x + g->x_offset, y + g->y_offset, width, height);
!       gdk_gc_set_foreground (g->gc, &(saved.foreground));
!     }
! 
!   gdk_flush ();
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_setFunction
    (JNIEnv *env, jobject obj, jint func)
  {
    struct graphics *g;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 337,343 ****
  }
  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor
    (JNIEnv *env, jobject obj, jint red, jint green, jint blue)
  {
    GdkColor color;
--- 483,490 ----
  }
  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor
    (JNIEnv *env, jobject obj, jint red, jint green, jint blue)
  {
    GdkColor color;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 352,361 ****
    gdk_threads_enter ();
    gdk_color_alloc (g->cm, &color);
    gdk_gc_set_foreground (g->gc, &color);
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawArc
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height, 
     jint angle1, jint angle2)
  {
--- 499,510 ----
    gdk_threads_enter ();
    gdk_color_alloc (g->cm, &color);
    gdk_gc_set_foreground (g->gc, &color);
+ 
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_drawArc
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height, 
     jint angle1, jint angle2)
  {
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 367,372 ****
--- 516,522 ----
    gdk_draw_arc (g->drawable, g->gc, FALSE, 
  		x + g->x_offset, y + g->y_offset, 
  		width, height, angle1 << 6, angle2 << 6);
+   gdk_flush ();
    gdk_threads_leave ();
  }  
  
*************** translate_points (JNIEnv *env, jintArray
*** 397,403 ****
    return points;
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolyline
    (JNIEnv *env, jobject obj, jintArray xpoints, jintArray ypoints, 
     jint npoints)
  {
--- 547,554 ----
    return points;
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolyline
    (JNIEnv *env, jobject obj, jintArray xpoints, jintArray ypoints, 
     jint npoints)
  {
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 410,421 ****
  
    gdk_threads_enter ();
    gdk_draw_lines (g->drawable, g->gc, points, npoints);
    gdk_threads_leave ();
  
    g_free (points);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolygon
    (JNIEnv *env, jobject obj, jintArray xpoints, jintArray ypoints, 
     jint npoints)
  {
--- 561,574 ----
  
    gdk_threads_enter ();
    gdk_draw_lines (g->drawable, g->gc, points, npoints);
+   gdk_flush ();
    gdk_threads_leave ();
  
    g_free (points);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolygon
    (JNIEnv *env, jobject obj, jintArray xpoints, jintArray ypoints, 
     jint npoints)
  {
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 433,444 ****
  
    gdk_threads_enter ();
    gdk_draw_lines (g->drawable, g->gc, points, npoints);
    gdk_threads_leave ();
  
    g_free (points);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillPolygon
    (JNIEnv *env, jobject obj, jintArray xpoints, jintArray ypoints, 
     jint npoints)
  {
--- 586,599 ----
  
    gdk_threads_enter ();
    gdk_draw_lines (g->drawable, g->gc, points, npoints);
+   gdk_flush ();
    gdk_threads_leave ();
  
    g_free (points);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_fillPolygon
    (JNIEnv *env, jobject obj, jintArray xpoints, jintArray ypoints, 
     jint npoints)
  {
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 450,461 ****
  			     g->x_offset, g->y_offset);
    gdk_threads_enter ();
    gdk_draw_polygon (g->drawable, g->gc, TRUE, points, npoints);
    gdk_threads_leave ();
  
    g_free (points);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillArc
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height, 
     jint angle1, jint angle2)
  {
--- 605,618 ----
  			     g->x_offset, g->y_offset);
    gdk_threads_enter ();
    gdk_draw_polygon (g->drawable, g->gc, TRUE, points, npoints);
+   gdk_flush ();
    gdk_threads_leave ();
  
    g_free (points);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_fillArc
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height, 
     jint angle1, jint angle2)
  {
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 467,476 ****
    gdk_draw_arc (g->drawable, g->gc, TRUE, 
  		x + g->x_offset, y + g->y_offset, 
  		width, height, angle1 << 6, angle2 << 6);
    gdk_threads_leave ();
  }  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawOval
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
--- 624,635 ----
    gdk_draw_arc (g->drawable, g->gc, TRUE, 
  		x + g->x_offset, y + g->y_offset, 
  		width, height, angle1 << 6, angle2 << 6);
+   gdk_flush ();
    gdk_threads_leave ();
  }  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_drawOval
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 481,490 ****
    gdk_draw_arc (g->drawable, g->gc, FALSE, 
  		x + g->x_offset, y + g->y_offset, 
  		width, height, 0, 23040);
    gdk_threads_leave ();
  }  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillOval
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
--- 640,651 ----
    gdk_draw_arc (g->drawable, g->gc, FALSE, 
  		x + g->x_offset, y + g->y_offset, 
  		width, height, 0, 23040);
+   gdk_flush ();
    gdk_threads_leave ();
  }  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_fillOval
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 495,504 ****
    gdk_draw_arc (g->drawable, g->gc, TRUE, 
  		x + g->x_offset, y + g->y_offset, 
  		width, height, 0, 23040);
    gdk_threads_leave ();
! }  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_setClipRectangle
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
--- 656,667 ----
    gdk_draw_arc (g->drawable, g->gc, TRUE, 
  		x + g->x_offset, y + g->y_offset, 
  		width, height, 0, 23040);
+   gdk_flush ();
    gdk_threads_leave ();
! }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics_setClipRectangle
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    struct graphics *g;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 515,517 ****
--- 678,692 ----
    gdk_gc_set_clip_rectangle (g->gc, &rectangle);
    gdk_threads_leave ();
  }
+ 
+ static void realize_cb (GtkWidget *widget __attribute__ ((unused)), 
+ 			jobject peer)
+ {
+   gdk_threads_leave ();
+ 
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer, initComponentGraphicsID);
+ 
+   NSA_DEL_GLOBAL_REF (gdk_env(), peer);
+ 
+   gdk_threads_enter ();
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c	Wed Dec 31 08:58:31 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c	Wed Feb 16 20:03:19 2005
***************
*** 1,5 ****
  /* gnu_java_awt_peer_gtk_GdkGraphics2d.c
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
     This file is part of GNU Classpath.
     
--- 1,5 ----
  /* gnu_java_awt_peer_gtk_GdkGraphics2d.c
!    Copyright (C) 2003, 2005  Free Software Foundation, Inc.
  
     This file is part of GNU Classpath.
     
***************
*** 45,51 ****
  #include <gdk-pixbuf/gdk-pixbuf.h>
  #include <gdk-pixbuf/gdk-pixdata.h>
  
! #include <cairo.h>
  
  #include <stdio.h>
  #include <stdlib.h>
--- 45,52 ----
  #include <gdk-pixbuf/gdk-pixbuf.h>
  #include <gdk-pixbuf/gdk-pixdata.h>
  
! #include <cairo-ft.h>
! #include <cairo-xlib.h>
  
  #include <stdio.h>
  #include <stdlib.h>
*************** struct state_table *native_graphics2d_st
*** 64,73 ****
  #define NSA_DEL_G2D_PTR(env, obj) \
    remove_state_slot (env, obj, native_graphics2d_state_table)
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initStaticState 
    (JNIEnv *env, jclass clazz)
  {
!     NSA_G2D_INIT (env, clazz);
  }
  
  /* these public final constants are part of the java2d public API, so we
--- 65,77 ----
  #define NSA_DEL_G2D_PTR(env, obj) \
    remove_state_slot (env, obj, native_graphics2d_state_table)
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initStaticState 
    (JNIEnv *env, jclass clazz)
  {
!    gdk_threads_enter();
!    NSA_G2D_INIT (env, clazz);
!    gdk_threads_leave();
  }
  
  /* these public final constants are part of the java2d public API, so we
*************** enum java_awt_geom_path_iterator_winding
*** 114,119 ****
--- 118,158 ----
      java_awt_geom_path_iterator_WIND_NON_ZERO = 1
    };
  
+ enum java_awt_rendering_hints_filter
+   {
+     java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR = 0,    
+     java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR = 1,
+     java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED = 2,
+     java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY = 3,
+     java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT = 4
+  
+   };
+ 
+ static int
+ peer_is_disposed(JNIEnv *env, jobject obj)
+ {
+   static jfieldID fid = NULL;
+   jclass cls;
+   jobject peer;
+ 
+   return 0;
+ 
+   if (fid == NULL)
+     {
+       cls = (*env)->GetObjectClass(env, obj);
+       fid = (*env)->GetFieldID(env, cls, "component",
+ 			       "Lgnu/java/awt/peer/gtk/GtkComponentPeer;");
+     }
+   g_assert(fid != NULL);
+   peer = (*env)->GetObjectField(env, obj, fid);
+   if (peer == NULL || NSA_GET_PTR (env, peer) != NULL)
+     return 0;
+   else
+     {
+       return 1;
+     }
+ }
+ 
  
  static void 
  grab_current_drawable (GtkWidget *widget, GdkDrawable **draw, GdkWindow **win)
*************** grab_current_drawable (GtkWidget *widget
*** 122,142 ****
    g_assert (draw != NULL);
    g_assert (win != NULL);
  
!   if (GTK_IS_WINDOW (widget))
!     {
!       *win = find_gtk_layout (widget)->bin_window;
!     }
!   else if (GTK_IS_LAYOUT (widget))
!     {
!       *win = GTK_LAYOUT (widget)->bin_window;
!     }
!   else
!     {
!       *win = widget->window;
!     }
  
    *draw = *win;
!   gdk_window_get_internal_paint_info (*win, draw, 0, 0);
    g_object_ref (*draw);
  }
  
--- 161,170 ----
    g_assert (draw != NULL);
    g_assert (win != NULL);
  
!   *win = widget->window;
  
    *draw = *win;
!   gdk_window_get_internal_paint_info (*win, draw, 0, 0); 
    g_object_ref (*draw);
  }
  
*************** x_server_has_render_extension (void)
*** 148,154 ****
    return (int) XRenderQueryExtension (GDK_DISPLAY (), &ev, &err);
  }
  
- 
  static void
  init_graphics2d_as_pixbuf (struct graphics2d *gr)
  {
--- 176,181 ----
*************** init_graphics2d_as_pixbuf (struct graphi
*** 169,181 ****
    g_assert (gdk_pixbuf_get_bits_per_sample (gr->drawbuf) == bits_per_sample);
    g_assert (gdk_pixbuf_get_n_channels (gr->drawbuf) == total_channels);
    
!   gr->surface = cairo_surface_create_for_image (gdk_pixbuf_get_pixels (gr->drawbuf), 
  						CAIRO_FORMAT_ARGB32, 
  						gdk_pixbuf_get_width (gr->drawbuf), 
  						gdk_pixbuf_get_height (gr->drawbuf), 
  						gdk_pixbuf_get_rowstride (gr->drawbuf));      
    g_assert (gr->surface != NULL);
    g_assert (gr->cr != NULL);
    cairo_set_target_surface (gr->cr, gr->surface);
  }
  
--- 196,209 ----
    g_assert (gdk_pixbuf_get_bits_per_sample (gr->drawbuf) == bits_per_sample);
    g_assert (gdk_pixbuf_get_n_channels (gr->drawbuf) == total_channels);
    
!   gr->surface = cairo_surface_create_for_image ((char *) gdk_pixbuf_get_pixels (gr->drawbuf), 
  						CAIRO_FORMAT_ARGB32, 
  						gdk_pixbuf_get_width (gr->drawbuf), 
  						gdk_pixbuf_get_height (gr->drawbuf), 
  						gdk_pixbuf_get_rowstride (gr->drawbuf));      
    g_assert (gr->surface != NULL);
    g_assert (gr->cr != NULL);
+   gr->mode = MODE_DRAWABLE_NO_RENDER;
    cairo_set_target_surface (gr->cr, gr->surface);
  }
  
*************** init_graphics2d_as_renderable (struct gr
*** 205,265 ****
  					   DefaultColormap (dpy, DefaultScreen (dpy)));
    g_assert (gr->surface != NULL);
    g_assert (gr->cr != NULL);
    cairo_set_target_surface (gr->cr, gr->surface);
  }
  
  static void
! begin_drawing_operation (struct graphics2d * gr)
  {  
!   gdk_threads_enter ();
!   if (gr->drawbuf)
      {
  
!       gint drawable_width, drawable_height;
!       gint pixbuf_width, pixbuf_height;
!       gint width, height;
!       
!       gdk_drawable_get_size (gr->drawable, &drawable_width, &drawable_height);
!       pixbuf_width = gdk_pixbuf_get_width (gr->drawbuf);
!       pixbuf_height = gdk_pixbuf_get_height (gr->drawbuf);
!       width = min (drawable_width, pixbuf_width);
!       height = min (drawable_height, pixbuf_height);
  
!       gdk_pixbuf_get_from_drawable (gr->drawbuf, /* destination pixbuf */
! 				    gr->drawable, 
! 				    NULL, /* colormap */
! 				    0, 0, 0, 0,
! 				    width, height); 
!       
!       if (gr->debug) printf ("copied (%d, %d) pixels from GDK drawable to pixbuf\n",
! 			     width, height);      
      }
  }
  
  static void
! end_drawing_operation (struct graphics2d * gr)
  {
!   if (gr->drawbuf)
!     { 
!       gint drawable_width, drawable_height;
!       gint pixbuf_width, pixbuf_height;
!       gint width, height;
!       
!       gdk_drawable_get_size (gr->drawable, &drawable_width, &drawable_height);
!       pixbuf_width = gdk_pixbuf_get_width (gr->drawbuf);
!       pixbuf_height = gdk_pixbuf_get_height (gr->drawbuf);
!       width = min (drawable_width, pixbuf_width);
!       height = min (drawable_height, pixbuf_height);
  
!       gdk_draw_pixbuf (gr->drawable, NULL, gr->drawbuf,
! 		       0, 0, 0, 0, 
! 		       width, height, 
! 		       GDK_RGB_DITHER_NORMAL, 0, 0);
  
!       if (gr->debug) printf ("copied (%d, %d) pixels from pixbuf to GDK drawable\n",
! 			     width, height);
      }
-   gdk_threads_leave ();
  }
  
  
--- 233,332 ----
  					   DefaultColormap (dpy, DefaultScreen (dpy)));
    g_assert (gr->surface != NULL);
    g_assert (gr->cr != NULL);
+   gr->mode = MODE_DRAWABLE_WITH_RENDER;
    cairo_set_target_surface (gr->cr, gr->surface);
  }
  
  static void
! begin_drawing_operation (JNIEnv *env, struct graphics2d * gr)
  {  
!   g_assert(cairo_status (gr->cr) == CAIRO_STATUS_SUCCESS);
! 
!   switch (gr->mode)
      {
+     case MODE_DRAWABLE_WITH_RENDER:
+       break;
  
!     case MODE_DRAWABLE_NO_RENDER:
!       {
! 	
! 	gint drawable_width, drawable_height;
! 	gint pixbuf_width, pixbuf_height;
! 	gint width, height;
! 	
! 	gdk_drawable_get_size (gr->drawable, &drawable_width, &drawable_height);
! 	pixbuf_width = gdk_pixbuf_get_width (gr->drawbuf);
! 	pixbuf_height = gdk_pixbuf_get_height (gr->drawbuf);
! 	width = min (drawable_width, pixbuf_width);
! 	height = min (drawable_height, pixbuf_height);
! 	
! 	gdk_pixbuf_get_from_drawable (gr->drawbuf, /* destination pixbuf */
! 				      gr->drawable, 
! 				      NULL, /* colormap */
! 				      0, 0, 0, 0,
! 				      width, height); 
! 	
! 	if (gr->debug) printf ("copied (%d, %d) pixels from GDK drawable to pixbuf\n",
! 			       width, height);      
!       }
!       break;
  
!     case MODE_JAVA_ARRAY:
!       gr->javabuf = (*env)->GetIntArrayElements (env, gr->jarray, &gr->isCopy);
!       gr->surface = cairo_surface_create_for_image ((char *) gr->javabuf, 
! 						    CAIRO_FORMAT_ARGB32, 
! 						    gr->width, 
! 						    gr->height, 
! 						    gr->width * 4);
!       g_assert(gr->surface != NULL);
!       g_assert(gr->cr != NULL);
!       cairo_set_target_surface (gr->cr, gr->surface);
!       break;
      }
  }
  
  static void
! end_drawing_operation (JNIEnv *env, struct graphics2d * gr)
  {
!   g_assert(cairo_status (gr->cr) == CAIRO_STATUS_SUCCESS);
  
!   switch (gr->mode)
!     {
!     case MODE_DRAWABLE_WITH_RENDER:
!       break;
  
!     case MODE_DRAWABLE_NO_RENDER:
!       {
! 
! 	gint drawable_width, drawable_height;
! 	gint pixbuf_width, pixbuf_height;
! 	gint width, height;
! 	
! 	gdk_drawable_get_size (gr->drawable, &drawable_width, &drawable_height);
! 	pixbuf_width = gdk_pixbuf_get_width (gr->drawbuf);
! 	pixbuf_height = gdk_pixbuf_get_height (gr->drawbuf);
! 	width = min (drawable_width, pixbuf_width);
! 	height = min (drawable_height, pixbuf_height);
! 	
! 	gdk_draw_pixbuf (gr->drawable, NULL, gr->drawbuf,
! 			 0, 0, 0, 0, 
! 			 width, height, 
! 			 GDK_RGB_DITHER_NORMAL, 0, 0);
! 	
! 	if (gr->debug) printf ("copied (%d, %d) pixels from pixbuf to GDK drawable\n",
! 			       width, height);
!       }
!       break;
!       
!     case MODE_JAVA_ARRAY:
!       /* 
!        * FIXME: Perhaps this should use the isCopy flag to try to avoid
!        * tearing down the cairo surface.
!        */
!       cairo_surface_destroy (gr->surface);
!       gr->surface = NULL;
!       (*env)->ReleaseIntArrayElements (env, gr->jarray, gr->javabuf, JNI_COMMIT);
      }
  }
  
  
*************** update_pattern_transform (struct graphic
*** 279,285 ****
    mat = cairo_matrix_create ();
    g_assert (mat != NULL);
    cairo_matrix_set_affine (mat, a, b, c, d, tx, ty);
!   cairo_surface_set_matrix (gr->pattern, mat);
    cairo_matrix_destroy (mat);
  }
  
--- 346,352 ----
    mat = cairo_matrix_create ();
    g_assert (mat != NULL);
    cairo_matrix_set_affine (mat, a, b, c, d, tx, ty);
!   cairo_pattern_set_matrix (gr->pattern, mat);
    cairo_matrix_destroy (mat);
  }
  
*************** check_for_debug (struct graphics2d *gr)
*** 289,299 ****
    gr->debug = (gboolean)(getenv("DEBUGJ2D") != NULL);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState
    (JNIEnv *env, jobject obj, jobject old)
  {
    struct graphics2d *g = NULL, *g_old = NULL;
  
    g = (struct graphics2d *) malloc (sizeof (struct graphics2d));
    g_assert (g != NULL);
    memset (g, 0, sizeof(struct graphics2d));
--- 356,378 ----
    gr->debug = (gboolean)(getenv("DEBUGJ2D") != NULL);
  }
  
! static void
! realize_cb (GtkWidget *widget __attribute__ ((unused)), jobject peer)
! {
!   gdk_threads_leave ();
! 
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer, initComponentGraphics2DID);
! 
!   gdk_threads_enter ();
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState
    (JNIEnv *env, jobject obj, jobject old)
  {
    struct graphics2d *g = NULL, *g_old = NULL;
  
+   gdk_threads_enter();
    g = (struct graphics2d *) malloc (sizeof (struct graphics2d));
    g_assert (g != NULL);
    memset (g, 0, sizeof(struct graphics2d));
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 303,337 ****
  
    if (g_old->debug) printf ("copying state from existing graphics2d\n");
  
-   g->drawable = g_old->drawable;
    g->debug = g_old->debug; 
  
!   gdk_threads_enter ();
!   g_object_ref (g->drawable);
    
!   g->cr = cairo_create();
!   g_assert (g->cr != NULL);
  
!   if (x_server_has_render_extension ())
!     init_graphics2d_as_renderable (g);
!   else
!     init_graphics2d_as_pixbuf (g);
  
    cairo_surface_set_filter (g->surface, CAIRO_FILTER_FAST);
  
-   gdk_threads_leave ();
- 
    NSA_SET_G2D_PTR (env, obj, g);
  }
  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__II
!   (JNIEnv *env, jobject obj, jint width, jint height)
  {
    struct graphics2d *gr;
  
!   gdk_threads_enter ();
    
    gr = (struct graphics2d *) malloc (sizeof (struct graphics2d));
    g_assert (gr != NULL);
    memset (gr, 0, sizeof(struct graphics2d));
--- 382,456 ----
  
    if (g_old->debug) printf ("copying state from existing graphics2d\n");
  
    g->debug = g_old->debug; 
+   g->mode = g_old->mode;
  
!   if (g_old->mode == MODE_JAVA_ARRAY)
!     {
!       g->width = g_old->width;
!       g->height = g_old->height;
!       g->jarray = (*env)->NewGlobalRef(env, g_old->jarray);
!     }
!   else
!     {
!       g->drawable = g_old->drawable;
! 
!       g_object_ref (g->drawable);
    
!       g->cr = cairo_create();
!       g_assert (g->cr != NULL);
  
!       if (x_server_has_render_extension ())
! 	init_graphics2d_as_renderable (g);
!       else
! 	init_graphics2d_as_pixbuf (g);
!     }
  
    cairo_surface_set_filter (g->surface, CAIRO_FILTER_FAST);
  
    NSA_SET_G2D_PTR (env, obj, g);
+   gdk_threads_leave();
  }
  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState___3III
! (JNIEnv *env, jobject obj, jintArray jarr, jint width, jint height)
  {
    struct graphics2d *gr;
  
!   gdk_threads_enter();
!   gr = (struct graphics2d *) malloc (sizeof (struct graphics2d));
!   g_assert (gr != NULL);
!   memset (gr, 0, sizeof(struct graphics2d));
! 
!   check_for_debug (gr);  
! 
!   if (gr->debug) printf ("constructing java-backed image of size (%d,%d)\n",
! 			 width, height);
    
+   gr->cr = cairo_create();
+   g_assert (gr->cr != NULL);
+ 
+   gr->width = width;
+   gr->height = height;
+   gr->jarray = (*env)->NewGlobalRef(env, jarr);
+   gr->mode = MODE_JAVA_ARRAY;
+ 
+   if (gr->debug) printf ("constructed java-backed image of size (%d,%d)\n",
+ 			 width, height);
+ 
+   NSA_SET_G2D_PTR (env, obj, gr);
+   gdk_threads_leave();  
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__II
+   (JNIEnv *env, jobject obj, jint width, jint height)
+ {
+   struct graphics2d *gr;
+   
+   gdk_threads_enter();
    gr = (struct graphics2d *) malloc (sizeof (struct graphics2d));
    g_assert (gr != NULL);
    memset (gr, 0, sizeof(struct graphics2d));
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 340,346 ****
  
    if (gr->debug) printf ("constructing offscreen drawable of size (%d,%d)\n",
  			 width, height);
!   
    gr->drawable = (GdkDrawable *) gdk_pixmap_new (NULL, width, height, 
  						 gdk_rgb_get_visual ()->depth);
    g_assert (gr->drawable != NULL);
--- 459,465 ----
  
    if (gr->debug) printf ("constructing offscreen drawable of size (%d,%d)\n",
  			 width, height);
! 
    gr->drawable = (GdkDrawable *) gdk_pixmap_new (NULL, width, height, 
  						 gdk_rgb_get_visual ()->depth);
    g_assert (gr->drawable != NULL);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 353,371 ****
    else
      init_graphics2d_as_pixbuf (gr);
  
-   gdk_threads_leave ();
    if (gr->debug) printf ("constructed offscreen drawable of size (%d,%d)\n",
  			 width, height);
    NSA_SET_G2D_PTR (env, obj, gr);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable
    (JNIEnv *env, jobject self, jobject other, jint x, jint y)
  {
    struct graphics2d *src = NULL, *dst = NULL;
    gint s_height, s_width, d_height, d_width, height, width;
!   GdkGC *gc;
  
    src = (struct graphics2d *)NSA_GET_G2D_PTR (env, other);
    dst = (struct graphics2d *)NSA_GET_G2D_PTR (env, self);
    g_assert (src != NULL);
--- 472,494 ----
    else
      init_graphics2d_as_pixbuf (gr);
  
    if (gr->debug) printf ("constructed offscreen drawable of size (%d,%d)\n",
  			 width, height);
    NSA_SET_G2D_PTR (env, obj, gr);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable
    (JNIEnv *env, jobject self, jobject other, jint x, jint y)
  {
    struct graphics2d *src = NULL, *dst = NULL;
    gint s_height, s_width, d_height, d_width, height, width;
!   cairo_matrix_t *matrix;
!   cairo_operator_t tmp_op;
  
+   gdk_threads_enter();
+   if (peer_is_disposed(env, self)) { gdk_threads_leave(); return; }
    src = (struct graphics2d *)NSA_GET_G2D_PTR (env, other);
    dst = (struct graphics2d *)NSA_GET_G2D_PTR (env, self);
    g_assert (src != NULL);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 373,436 ****
  
    if (src->debug) printf ("copying from offscreen drawable\n");
  
!   gdk_threads_enter ();
    gdk_drawable_get_size (src->drawable, &s_width, &s_height);
    gdk_drawable_get_size (dst->drawable, &d_width, &d_height);
    width = min (s_width, d_width);
!   height = min (s_width, d_height);
! 
!   gc = gdk_gc_new (dst->drawable);
!   g_assert (gc != NULL);
! 
!   gdk_draw_drawable(dst->drawable, gc, src->drawable, 
!  		    0, 0, x, y, width, height); 
!   gdk_flush ();
! 
!   g_object_unref (gc);
! 
!   if (src->debug) printf ("copied %d x %d pixels from offscreen drawable\n", width, height);
!   gdk_threads_leave ();  
! }
  
! static jintArray
! current_colors_of_widget (GtkWidget *widget, JNIEnv *env)
! {
!   GdkColor color;
!   jintArray array;
!   jint *rgb;
  
!   g_assert (widget != NULL);
!   g_assert (env != NULL);
  
!   color = widget->style->fg[GTK_STATE_NORMAL];
!   array = (*env)->NewIntArray (env, 6);
  
!   rgb = (*env)->GetIntArrayElements (env, array, NULL);
!   rgb[0] = color.red >> 8;
!   rgb[1] = color.green >> 8;
!   rgb[2] = color.blue >> 8;
  
!   color = widget->style->bg[GTK_STATE_NORMAL];
!   rgb[3] = color.red >> 8;
!   rgb[4] = color.green >> 8;
!   rgb[5] = color.blue >> 8;
  
!   (*env)->ReleaseIntArrayElements (env, array, rgb, 0);
!   
!   return array;
  }
  
! JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2
    (JNIEnv *env, jobject obj, jobject peer)
  {
    struct graphics2d *gr = NULL;
    GtkWidget *widget = NULL;
    void *ptr = NULL;
-   jintArray color;
  
    ptr = NSA_GET_PTR (env, peer);
    g_assert (ptr != NULL);
-   gdk_threads_enter ();
  
    gr = (struct graphics2d *) malloc (sizeof (struct graphics2d));
    g_assert (gr != NULL);
--- 496,544 ----
  
    if (src->debug) printf ("copying from offscreen drawable\n");
  
!   begin_drawing_operation(env, dst); 
! 
!   /* gdk_flush(); */
! 
    gdk_drawable_get_size (src->drawable, &s_width, &s_height);
    gdk_drawable_get_size (dst->drawable, &d_width, &d_height);
    width = min (s_width, d_width);
!   height = min (s_height, d_height);
  
!   matrix = cairo_matrix_create ();
!   cairo_surface_get_matrix (src->surface, matrix);
!   cairo_matrix_translate (matrix, (double)-x, (double)-y);
!   cairo_surface_set_matrix (src->surface, matrix);
  
!   tmp_op = cairo_current_operator (dst->cr); 
!   cairo_set_operator(dst->cr, CAIRO_OPERATOR_SRC); 
!   cairo_show_surface (dst->cr, src->surface, width, height);
!   cairo_set_operator(dst->cr, tmp_op);
  
!   cairo_matrix_translate (matrix, (double)x, (double)y);
!   cairo_surface_set_matrix (src->surface, matrix);
!   cairo_matrix_destroy (matrix);
  
!   gdk_flush();
  
!   end_drawing_operation(env, dst);
  
!   if (src->debug) printf ("copied %d x %d pixels from offscreen drawable\n", width, height);
!   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2
    (JNIEnv *env, jobject obj, jobject peer)
  {
    struct graphics2d *gr = NULL;
    GtkWidget *widget = NULL;
    void *ptr = NULL;
  
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
    ptr = NSA_GET_PTR (env, peer);
    g_assert (ptr != NULL);
  
    gr = (struct graphics2d *) malloc (sizeof (struct graphics2d));
    g_assert (gr != NULL);
*************** JNIEXPORT jintArray JNICALL Java_gnu_jav
*** 452,474 ****
    else
      init_graphics2d_as_pixbuf (gr);
  
!   color = current_colors_of_widget (widget, env);
  
    gdk_threads_leave ();
-   NSA_SET_G2D_PTR (env, obj, gr);
-   return color;
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_dispose
    (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
  
    gr = (struct graphics2d *) NSA_DEL_G2D_PTR (env, obj);
    if (gr == NULL) 
!     return; /* dispose has been called more than once */
!   
!   gdk_threads_enter ();
  
    if (gr->surface)
      cairo_surface_destroy (gr->surface);
--- 560,598 ----
    else
      init_graphics2d_as_pixbuf (gr);
  
!   NSA_SET_G2D_PTR (env, obj, gr);
!   gdk_threads_leave();
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_connectSignals
!   (JNIEnv *env, jobject obj, jobject peer)
! {
!   void *ptr;
! 
!   ptr = NSA_GET_PTR (env, peer);
! 
!   gdk_threads_enter ();
! 
!   g_signal_connect_after (G_OBJECT (ptr), "realize",
!                           G_CALLBACK (realize_cb), obj);
  
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_dispose
    (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
  
+   gdk_threads_enter();
    gr = (struct graphics2d *) NSA_DEL_G2D_PTR (env, obj);
    if (gr == NULL) 
!     {
!       gdk_threads_leave();
!       return; /* dispose has been called more than once */
!     }
  
    if (gr->surface)
      cairo_surface_destroy (gr->surface);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 481,499 ****
    g_object_unref (gr->drawable);
  
    if (gr->pattern)
!     cairo_surface_destroy (gr->pattern);
  
    if (gr->pattern_pixels)
      free (gr->pattern_pixels);
  
    if (gr->debug) printf ("disposed of graphics2d\n");
-   free (gr);
  
!   gdk_threads_leave ();
  }
  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient 
    (JNIEnv *env, jobject obj, 
     jdouble x1, jdouble y1, 
     jdouble x2, jdouble y2,
--- 605,630 ----
    g_object_unref (gr->drawable);
  
    if (gr->pattern)
!     cairo_pattern_destroy (gr->pattern);
! 
!   if (gr->pattern_surface)
!     cairo_surface_destroy (gr->pattern_surface);
  
    if (gr->pattern_pixels)
      free (gr->pattern_pixels);
  
+   if (gr->mode == MODE_JAVA_ARRAY)
+     (*env)->DeleteGlobalRef(env, gr->jarray);
+ 
    if (gr->debug) printf ("disposed of graphics2d\n");
  
!   free (gr);
!   gdk_threads_leave();
  }
  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient 
    (JNIEnv *env, jobject obj, 
     jdouble x1, jdouble y1, 
     jdouble x2, jdouble y2,
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 507,512 ****
--- 638,645 ----
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
  
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
    if (gr->debug) printf ("setGradient (%f,%f) -> (%f,%f); (%d,%d,%d,%d) -> (%d,%d,%d,%d)\n",
  			 x1, y1, 
  			 x2, y2, 
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 578,623 ****
       negate offsets. oh well.
       
     */
! 
!   double a = (x2 - x1 == 0.) ? 0. : ((cyclic ? 3.0 : 2.0) / (x2 - x1));
!   double c = (y2 - y1 == 0.) ? 0. : (1. / (y2 - y1));
!   double dx = (x1 == 0.) ? 0. : 1. / x1;
!   double dy = (y1 == 0.) ? 0. : 1. / y1;
! 
!   cairo_matrix_set_affine (mat,
! 			   a, 0.,
! 			   c, 0.,
! 			   dx, dy);
! 
!   cairo_surface_set_matrix (surf, mat);
!   cairo_matrix_destroy (mat);
!   cairo_surface_set_filter (surf, CAIRO_FILTER_BILINEAR);
  
    /* FIXME: repeating gradients (not to mention hold gradients) don't seem to work. */
    /*   cairo_surface_set_repeat (surf, cyclic ? 1 : 0); */
  
    if (gr->pattern)
!     cairo_surface_destroy (gr->pattern);
  
    if (gr->pattern_pixels)
!     {
!       free (gr->pattern_pixels);
!       gr->pattern_pixels = NULL;
!     }
! 
!   gr->pattern = surf;  
  
    cairo_restore (gr->cr);    
    cairo_set_pattern (gr->cr, gr->pattern);
! 
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels 
    (JNIEnv *env, jobject obj, jintArray jarr, jint w, jint h, jint stride)
  {
    struct graphics2d *gr = NULL;
    jint *jpixels = NULL;
  
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
  
--- 711,762 ----
       negate offsets. oh well.
       
     */
!   {
!     double a = (x2 - x1 == 0.) ? 0. : ((cyclic ? 3.0 : 2.0) / (x2 - x1));
!     double c = (y2 - y1 == 0.) ? 0. : (1. / (y2 - y1));
!     double dx = (x1 == 0.) ? 0. : 1. / x1;
!     double dy = (y1 == 0.) ? 0. : 1. / y1;
!     
!     cairo_matrix_set_affine (mat,
! 			     a, 0.,
! 			     c, 0.,
! 			     dx, dy);
!     
!     cairo_surface_set_matrix (surf, mat);
!     cairo_matrix_destroy (mat);
!     cairo_surface_set_filter (surf, CAIRO_FILTER_BILINEAR);
!   }
  
    /* FIXME: repeating gradients (not to mention hold gradients) don't seem to work. */
    /*   cairo_surface_set_repeat (surf, cyclic ? 1 : 0); */
  
    if (gr->pattern)
!     cairo_pattern_destroy (gr->pattern);
!   
!   if (gr->pattern_surface)
!     cairo_surface_destroy (gr->pattern_surface);
  
    if (gr->pattern_pixels)
!     free (gr->pattern_pixels);
!   
!   gr->pattern_pixels = NULL;  
!   gr->pattern_surface = surf;  
!   gr->pattern = cairo_pattern_create_for_surface(surf);
  
    cairo_restore (gr->cr);    
    cairo_set_pattern (gr->cr, gr->pattern);
!   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels 
    (JNIEnv *env, jobject obj, jintArray jarr, jint w, jint h, jint stride)
  {
    struct graphics2d *gr = NULL;
    jint *jpixels = NULL;
  
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
  
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 625,636 ****
  			 (*env)->GetArrayLength (env, jarr), w, h, stride);
  
    if (gr->pattern)
!     cairo_surface_destroy (gr->pattern);
  
    if (gr->pattern_pixels)
      free (gr->pattern_pixels);
  
    gr->pattern = NULL;
    gr->pattern_pixels = NULL;
  
    gr->pattern_pixels = (char *) malloc (h * stride * 4);
--- 764,779 ----
  			 (*env)->GetArrayLength (env, jarr), w, h, stride);
  
    if (gr->pattern)
!     cairo_pattern_destroy (gr->pattern);
! 
!   if (gr->pattern_surface)
!     cairo_surface_destroy (gr->pattern_surface);
  
    if (gr->pattern_pixels)
      free (gr->pattern_pixels);
  
    gr->pattern = NULL;
+   gr->pattern_surface = NULL;
    gr->pattern_pixels = NULL;
  
    gr->pattern_pixels = (char *) malloc (h * stride * 4);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 641,656 ****
    memcpy (gr->pattern_pixels, jpixels, h * stride * 4);
    (*env)->ReleaseIntArrayElements (env, jarr, jpixels, 0);
  
!   gr->pattern = cairo_surface_create_for_image (gr->pattern_pixels, 
! 						CAIRO_FORMAT_ARGB32, 
! 						w, h, stride * 4);
    g_assert (gr->pattern != NULL);
-   cairo_surface_set_repeat (gr->pattern, 1);
    cairo_set_pattern (gr->cr, gr->pattern);
! 
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels 
    (JNIEnv *env, jobject obj, jintArray java_pixels, 
     jint w, jint h, jint stride, jdoubleArray java_matrix)
  {
--- 784,802 ----
    memcpy (gr->pattern_pixels, jpixels, h * stride * 4);
    (*env)->ReleaseIntArrayElements (env, jarr, jpixels, 0);
  
!   gr->pattern_surface = cairo_surface_create_for_image (gr->pattern_pixels, 
! 							CAIRO_FORMAT_ARGB32, 
! 							w, h, stride * 4);
!   g_assert (gr->pattern_surface != NULL);
!   cairo_surface_set_repeat (gr->pattern_surface, 1);
!   gr->pattern = cairo_pattern_create_for_surface (gr->pattern_surface);
    g_assert (gr->pattern != NULL);
    cairo_set_pattern (gr->cr, gr->pattern);
!   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels 
    (JNIEnv *env, jobject obj, jintArray java_pixels, 
     jint w, jint h, jint stride, jdoubleArray java_matrix)
  {
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 658,663 ****
--- 804,812 ----
    jint *native_pixels = NULL;
    jdouble *native_matrix = NULL;
  
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
  
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 670,676 ****
    g_assert (native_matrix != NULL);
    g_assert ((*env)->GetArrayLength (env, java_matrix) == 6);
  
!   begin_drawing_operation (gr);
    
   {
     cairo_matrix_t *mat = NULL;
--- 819,825 ----
    g_assert (native_matrix != NULL);
    g_assert ((*env)->GetArrayLength (env, java_matrix) == 6);
  
!   begin_drawing_operation (env, gr);
    
   {
     cairo_matrix_t *mat = NULL;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 683,745 ****
  			    native_matrix[2], native_matrix[3],
  			    native_matrix[4], native_matrix[5]);
     cairo_surface_set_matrix (surf, mat);
!    if (native_matrix[0] != 1.
!        || native_matrix[1] != 0.
!        || native_matrix[2] != 0.
!        || native_matrix[3] != 1.)
!      {
!        cairo_surface_set_filter (surf, CAIRO_FILTER_BILINEAR);
!        cairo_surface_set_filter (gr->surface, CAIRO_FILTER_BILINEAR);
!      }
!    else
!      {
!        cairo_surface_set_filter (surf, CAIRO_FILTER_FAST);
!        cairo_surface_set_filter (gr->surface, CAIRO_FILTER_FAST);
!      }
     cairo_show_surface (gr->cr, surf, w, h);
-    cairo_surface_set_filter (gr->surface, CAIRO_FILTER_FAST);
     cairo_matrix_destroy (mat);
     cairo_surface_destroy (surf);
   }
    
!  end_drawing_operation (gr);
! 
!   (*env)->ReleaseIntArrayElements (env, java_pixels, native_pixels, 0);
!   (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
! 
  }
  
  /* passthrough methods to cairo */
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSave 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_save\n");
    cairo_save (gr->cr);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRestore 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_restore\n");
    cairo_restore (gr->cr);
    update_pattern_transform (gr);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix 
     (JNIEnv *env, jobject obj, jdoubleArray java_matrix)
  {
    struct graphics2d *gr = NULL;
    jdouble *native_matrix = NULL;
  
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   g_assert (gr != NULL);
  
    native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);  
    g_assert (native_matrix != NULL);
--- 832,900 ----
  			    native_matrix[2], native_matrix[3],
  			    native_matrix[4], native_matrix[5]);
     cairo_surface_set_matrix (surf, mat);
!    cairo_surface_set_filter (surf, cairo_surface_get_filter(gr->surface));
     cairo_show_surface (gr->cr, surf, w, h);
     cairo_matrix_destroy (mat);
     cairo_surface_destroy (surf);
   }
    
!  end_drawing_operation (env, gr);
!  
!  (*env)->ReleaseIntArrayElements (env, java_pixels, native_pixels, 0);
!  (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
!  
!   gdk_threads_leave();
  }
  
  /* passthrough methods to cairo */
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSave 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_save\n");
    cairo_save (gr->cr);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRestore 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_restore\n");
    cairo_restore (gr->cr);
    update_pattern_transform (gr);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix 
     (JNIEnv *env, jobject obj, jdoubleArray java_matrix)
  {
    struct graphics2d *gr = NULL;
    jdouble *native_matrix = NULL;
  
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   /* cairoSetMatrix was called before this graphics object's component
!      was realized. */
!   if (gr == NULL) { gdk_threads_leave (); return; }
  
    native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);  
    g_assert (native_matrix != NULL);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 762,854 ****
  
    (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
    update_pattern_transform (gr);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont 
!    (JNIEnv *env, jobject obj, jobject font)
  {
!   struct graphics2d *gr = NULL;
!   struct peerfont *pfont = NULL;
!   cairo_font_t *ft = NULL;
    FT_Face face = NULL;
  
!   gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   g_assert (gr != NULL);
  
!   pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
    g_assert (pfont != NULL);
  
!   gdk_threads_enter ();
  
!   face = pango_ft2_font_get_face (pfont->font);
!   g_assert (face != NULL);
  
!   ft = cairo_ft_font_create_for_ft_face (face);
!   g_assert (ft != NULL);
  
!   if (gr->debug) printf ("cairo_set_font '%s'\n", face->family_name);
!   
!   cairo_set_font (gr->cr, ft);
  
!   cairo_scale_font (gr->cr, 
! 		    pango_font_description_get_size (pfont->desc) / 
! 		    (double)PANGO_SCALE);
  
!   cairo_font_destroy (ft);
  
!   gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoShowGlyphs
!    (JNIEnv *env, jobject obj, jintArray java_codes, jfloatArray java_posns)
  {
    struct graphics2d *gr = NULL;
    cairo_glyph_t *glyphs = NULL;
!   jfloat *native_posns = NULL;
!   jint *native_codes = NULL;
!   jint i;
!   jint ncodes, nposns;
  
!   gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   g_assert (gr != NULL);
  
!   native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);  
!   native_posns = (*env)->GetFloatArrayElements (env, java_posns, NULL);  
!   g_assert (native_codes != NULL);
!   g_assert (native_posns != NULL);
  
!   ncodes = (*env)->GetArrayLength (env, java_codes);
!   nposns = (*env)->GetArrayLength (env, java_posns);
!   g_assert (2 * ncodes == nposns);
  
!   if (gr->debug) printf ("cairo_show_glyphs (%d glyphs)\n", ncodes);
  
!   glyphs = malloc (sizeof(cairo_glyph_t) * ncodes);
!   g_assert (glyphs);
  
!   for (i = 0; i < ncodes; ++i)
      {
        glyphs[i].index = native_codes[i];
!       glyphs[i].x = (double) native_posns[2*i];
!       glyphs[i].y = (double) native_posns[2*i + 1];
!       if (gr->debug) printf ("cairo_show_glyphs (glyph %d (code %d) : %f,%f)\n", 
! 			     i, glyphs[i].index, glyphs[i].x, glyphs[i].y);
      }
  
    (*env)->ReleaseIntArrayElements (env, java_codes, native_codes, 0);
-   (*env)->ReleaseFloatArrayElements (env, java_posns, native_posns, 0);
  
!   begin_drawing_operation (gr);
!   cairo_show_glyphs (gr->cr, glyphs, ncodes);
!   end_drawing_operation (gr);
  
    free(glyphs);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetOperator 
     (JNIEnv *env, jobject obj, jint op)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_operator %d\n", op);
--- 917,1159 ----
  
    (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
    update_pattern_transform (gr);
+   gdk_threads_leave();
  }
  
! static void
! install_font_peer(cairo_t *cr,
! 		  struct peerfont *pfont,
! 		  int debug)
  {
!   cairo_font_t *ft;
    FT_Face face = NULL;
  
!   g_assert(cr != NULL);
!   g_assert(pfont != NULL);
!   
!   if (pfont->graphics_resource == NULL)
!     {
!       face = pango_ft2_font_get_face (pfont->font);
!       g_assert (face != NULL);
!       
!       ft = cairo_ft_font_create_for_ft_face (face);
!       g_assert (ft != NULL);
!       
!       if (debug) printf ("install_font_peer made new cairo font for '%s' at %f\n", 
! 			 face->family_name,
! 			 (pango_font_description_get_size (pfont->desc) / 
! 			  (double)PANGO_SCALE));
!     
!       cairo_set_font (cr, ft); 
!       cairo_font_destroy (ft);
!       cairo_scale_font (cr, 
! 			(pango_font_description_get_size (pfont->desc) / 
! 			 (double)PANGO_SCALE));
!       ft = cairo_current_font (cr);
!       pfont->graphics_resource = ft;
!     }
!   else
!     {
!       if (debug) printf ("install_font_peer reused existing font resource\n");
!       ft = (cairo_font_t *) pfont->graphics_resource;
!       cairo_set_font (cr, ft);       
!     }
! }
  
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_releasePeerGraphicsResource
!    (JNIEnv *env, jclass clazz __attribute__ ((unused)), jobject java_font)
! {
!   struct peerfont *pfont = NULL;
! 
!   g_assert(java_font != NULL);
! 
!   gdk_threads_enter();
!   pfont = (struct peerfont *) NSA_GET_FONT_PTR (env, java_font);
    g_assert (pfont != NULL);
+   if (pfont->graphics_resource != NULL)
+     {
+       cairo_font_destroy ((cairo_font_t *) pfont->graphics_resource);
+       pfont->graphics_resource = NULL;
+     }
+   gdk_threads_leave();
+ }
  
! static void
! paint_glyph_run(JNIEnv *env,
! 		struct graphics2d *gr,
! 		cairo_glyph_t **glyphs,
! 		gint *n_glyphs,
! 		PangoLayoutRun *run)
! {
!   gint i = 0;
!   gint x = 0, y = 0;
  
!   g_assert (gr != NULL);
!   g_assert (glyphs != NULL);
!   g_assert (n_glyphs != NULL);
!   g_assert (run != NULL);
  
!   if (run->glyphs != NULL && run->glyphs->num_glyphs > 0)
!     {
!       if (*n_glyphs < run->glyphs->num_glyphs)
! 	{
! 	  *glyphs = g_realloc(*glyphs, 
! 			      (sizeof(cairo_glyph_t) 
! 			       * run->glyphs->num_glyphs));
! 	  *n_glyphs = run->glyphs->num_glyphs;
! 	}
!       
!       g_assert (*glyphs != NULL);
  
!       if (gr->debug) printf ("painting %d glyphs: ", run->glyphs->num_glyphs);
  
!       for (i = 0; i < run->glyphs->num_glyphs; ++i)
! 	{	  
! 	  (*glyphs)[i].index = run->glyphs->glyphs[i].glyph;
  
! 	  (*glyphs)[i].x =
! 	    ((double) (x + run->glyphs->glyphs[i].geometry.x_offset)) 
! 	    / ((double) PANGO_SCALE);
  
! 	  (*glyphs)[i].y =
! 	    ((double) (y + run->glyphs->glyphs[i].geometry.y_offset)) 
! 	    / ((double) PANGO_SCALE);
! 	  
! 	  if (gr->debug) printf(" (%ld @ %f,%f)",  
! 				(*glyphs)[i].index,  
! 				(*glyphs)[i].x, 
! 				(*glyphs)[i].y);
! 	    
! 	  x += run->glyphs->glyphs[i].geometry.width;
! 	}
! 
!       if (gr->debug) printf("\n");
!       begin_drawing_operation (env, gr);
!       cairo_show_glyphs (gr->cr, *glyphs, run->glyphs->num_glyphs);
!       end_drawing_operation (env, gr);      
!     }
  }
  
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector
!    (JNIEnv *env, jobject self, 
!     jobject font,
!     jfloat x, jfloat y, jint n,
!     jintArray java_codes,
!     jfloatArray java_positions)
  {
+   
    struct graphics2d *gr = NULL;
+   struct peerfont *pfont = NULL;
    cairo_glyph_t *glyphs = NULL;
!   int *native_codes;
!   float *native_positions;
!   jint i = 0;
  
!   g_assert (self != NULL);
!   g_assert (java_codes != NULL);
!   g_assert (java_positions != NULL);
  
!   gdk_threads_enter ();
!   if (peer_is_disposed(env, self)) { gdk_threads_leave(); return; }
  
!   gr = (struct graphics2d *)NSA_GET_G2D_PTR (env, self);
!   g_assert (gr != NULL);
  
!   pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
!   g_assert (pfont != NULL);
  
!   install_font_peer(gr->cr, pfont, gr->debug);
  
!   glyphs = malloc( sizeof(cairo_glyph_t) * n);
!   g_assert (glyphs != NULL);
! 
!   native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);
!   native_positions = (*env)->GetFloatArrayElements (env, java_positions, NULL);
!   
!   for (i = 0; i < n; ++i)
      {
        glyphs[i].index = native_codes[i];
!       glyphs[i].x = x + native_positions[ 2*i ];
!       glyphs[i].y = y + native_positions[ 2*i + 1];
      }
  
+   (*env)->ReleaseFloatArrayElements (env, java_positions, native_positions, 0);
    (*env)->ReleaseIntArrayElements (env, java_codes, native_codes, 0);
  
!   begin_drawing_operation (env, gr);  
!   cairo_show_glyphs (gr->cr, glyphs, n);
!   end_drawing_operation (env, gr);
  
+   gdk_threads_leave ();  
    free(glyphs);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGdkTextLayout
!    (JNIEnv *env, jobject self, jobject java_layout, jfloat x, jfloat y)
! {
!   /* 
!    * FIXME: Some day we expect either cairo or pango will know how to make
!    * a pango layout paint to a cairo surface. that day is not yet here.
!    */
! 
!   struct graphics2d *gr = NULL;
!   struct textlayout *tl = NULL;
!   PangoLayoutIter *i = NULL;
!   PangoLayoutRun *run = NULL;
!   cairo_glyph_t *glyphs = NULL;
!   gint n_glyphs = 0;
! 
!   g_assert (self != NULL);
!   g_assert (java_layout != NULL);
! 
!   gr = (struct graphics2d *)NSA_GET_G2D_PTR (env, self);
!   tl = (struct textlayout *)NSA_GET_TEXT_LAYOUT_PTR (env, java_layout);
! 
!   g_assert (gr != NULL);
!   g_assert (tl != NULL);
!   g_assert (tl->pango_layout != NULL);
! 
!   if (gr->debug) printf ("painting pango layout\n");
! 
!   gdk_threads_enter ();
!   if (peer_is_disposed(env, self)) { gdk_threads_leave(); return; }
! 
!   i = pango_layout_get_iter (tl->pango_layout);
!   g_assert (i != NULL);
! 
!   cairo_translate (gr->cr, x, y);
! 
!   do 
!     {
!       run = pango_layout_iter_get_run (i);
!       if (run != NULL)
! 	paint_glyph_run (env, gr, &glyphs, &n_glyphs, run);
!     } 
!   while (pango_layout_iter_next_run (i));
!   
!   if (glyphs != NULL)
!     g_free (glyphs);
! 
!   cairo_translate (gr->cr, -x, -y);
!   
!   pango_layout_iter_free (i);
!   gdk_threads_leave ();
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetOperator 
     (JNIEnv *env, jobject obj, jint op)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_operator %d\n", op);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 902,913 ****
        cairo_set_operator (gr->cr, CAIRO_OPERATOR_XOR);
        break;
      }
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBColor 
     (JNIEnv *env, jobject obj, jdouble r, jdouble g, jdouble b)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
  
--- 1207,1224 ----
        cairo_set_operator (gr->cr, CAIRO_OPERATOR_XOR);
        break;
      }
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBColor 
     (JNIEnv *env, jobject obj, jdouble r, jdouble g, jdouble b)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
  
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 922,943 ****
      cairo_set_rgb_color (gr->cr, b, g, r);
    else
      cairo_set_rgb_color (gr->cr, r, g, b);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetAlpha 
     (JNIEnv *env, jobject obj, jdouble a)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
!   if (gr->debug) printf ("cairo_set_alpha %f\n", a);
    cairo_set_alpha (gr->cr, a);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFillRule 
     (JNIEnv *env, jobject obj, jint rule)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    if (gr->debug) printf ("cairo_set_fill_rule %d\n", rule);
    g_assert (gr != NULL);
--- 1233,1267 ----
      cairo_set_rgb_color (gr->cr, b, g, r);
    else
      cairo_set_rgb_color (gr->cr, r, g, b);
+ 
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetAlpha 
     (JNIEnv *env, jobject obj, jdouble a)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
!   if (gr->debug) printf ("cairo_set_alpha %f\n", a);  
    cairo_set_alpha (gr->cr, a);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFillRule 
     (JNIEnv *env, jobject obj, jint rule)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    if (gr->debug) printf ("cairo_set_fill_rule %d\n", rule);
    g_assert (gr != NULL);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 950,971 ****
        cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_EVEN_ODD);
        break;
      }  
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidth 
     (JNIEnv *env, jobject obj, jdouble width)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_line_width %f\n", width);
    cairo_set_line_width (gr->cr, width);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCap 
     (JNIEnv *env, jobject obj, jint cap)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_line_cap %d\n", cap);
--- 1274,1307 ----
        cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_EVEN_ODD);
        break;
      }  
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidth 
     (JNIEnv *env, jobject obj, jdouble width)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_line_width %f\n", width);
    cairo_set_line_width (gr->cr, width);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCap 
     (JNIEnv *env, jobject obj, jint cap)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_line_cap %d\n", cap);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 983,994 ****
        cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_SQUARE);
        break;
      }
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin 
     (JNIEnv *env, jobject obj, jint join)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_line_join %d\n", join);
--- 1319,1336 ----
        cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_SQUARE);
        break;
      }
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin 
     (JNIEnv *env, jobject obj, jint join)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_line_join %d\n", join);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 1006,1018 ****
        cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_BEVEL);
        break;
      }
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash 
     (JNIEnv *env, jobject obj, jdoubleArray dashes, jint ndash, jdouble offset)
  {
    struct graphics2d *gr = NULL;
    jdouble *dasharr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_dash\n");
--- 1348,1366 ----
        cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_BEVEL);
        break;
      }
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash 
     (JNIEnv *env, jobject obj, jdoubleArray dashes, jint ndash, jdouble offset)
  {
    struct graphics2d *gr = NULL;
    jdouble *dasharr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_dash\n");
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 1020,1159 ****
    g_assert (dasharr != NULL);
    cairo_set_dash (gr->cr, dasharr, ndash, offset);
    (*env)->ReleaseDoubleArrayElements (env, dashes, dasharr, 0);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMiterLimit 
     (JNIEnv *env, jobject obj, jdouble miter)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_miter_limit %f\n", miter);
    cairo_set_miter_limit (gr->cr, miter);
  }
  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoNewPath 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_new_path\n");
    cairo_new_path (gr->cr);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoMoveTo 
     (JNIEnv *env, jobject obj, jdouble x, jdouble y)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_move_to (%f, %f)\n", x, y);
    cairo_move_to (gr->cr, x, y);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoLineTo 
     (JNIEnv *env, jobject obj, jdouble x, jdouble y)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_line_to (%f, %f)\n", x, y);
    cairo_line_to (gr->cr, x, y);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoCurveTo 
     (JNIEnv *env, jobject obj, jdouble x1, jdouble y1, jdouble x2, jdouble y2, jdouble x3, jdouble y3)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_curve_to (%f, %f), (%f, %f), (%f, %f)\n", x1, y1, x2, y2, x3, y3);
    cairo_curve_to (gr->cr, x1, y1, x2, y2, x3, y3);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelMoveTo 
     (JNIEnv *env, jobject obj, jdouble dx, jdouble dy)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_rel_move_to (%f, %f)\n", dx, dy);
    cairo_rel_move_to (gr->cr, dx, dy);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelLineTo 
     (JNIEnv *env, jobject obj, jdouble dx, jdouble dy)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_rel_line_to (%f, %f)\n", dx, dy);
    cairo_rel_line_to (gr->cr, dx, dy);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelCurveTo 
     (JNIEnv *env, jobject obj, jdouble dx1, jdouble dy1, jdouble dx2, jdouble dy2, jdouble dx3, jdouble dy3)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_rel_curve_to (%f, %f), (%f, %f), (%f, %f)\n", dx1, dy1, dx2, dy2, dx3, dy3);
    cairo_rel_curve_to (gr->cr, dx1, dy1, dx2, dy2, dx3, dy3);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRectangle 
     (JNIEnv *env, jobject obj, jdouble x, jdouble y, jdouble width, jdouble height)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_rectangle (%f, %f) (%f, %f)\n", x, y, width, height);
    cairo_rectangle (gr->cr, x, y, width, height);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClosePath 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_close_path\n");
    cairo_close_path (gr->cr);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoStroke 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_stroke\n");
!   begin_drawing_operation (gr);
    cairo_stroke (gr->cr);
!   end_drawing_operation (gr);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoFill 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_fill\n");
!   begin_drawing_operation (gr);
    cairo_fill (gr->cr);
!   end_drawing_operation (gr);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClip 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_clip\n");
    cairo_clip (gr->cr);
  }
  
--- 1368,1621 ----
    g_assert (dasharr != NULL);
    cairo_set_dash (gr->cr, dasharr, ndash, offset);
    (*env)->ReleaseDoubleArrayElements (env, dashes, dasharr, 0);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMiterLimit 
     (JNIEnv *env, jobject obj, jdouble miter)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_set_miter_limit %f\n", miter);
    cairo_set_miter_limit (gr->cr, miter);
+   gdk_threads_leave();
  }
  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoNewPath 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   if (gr == NULL) { gdk_threads_leave (); return; }
    if (gr->debug) printf ("cairo_new_path\n");
    cairo_new_path (gr->cr);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoMoveTo 
     (JNIEnv *env, jobject obj, jdouble x, jdouble y)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_move_to (%f, %f)\n", x, y);
    cairo_move_to (gr->cr, x, y);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoLineTo 
     (JNIEnv *env, jobject obj, jdouble x, jdouble y)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_line_to (%f, %f)\n", x, y);
    cairo_line_to (gr->cr, x, y);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoCurveTo 
     (JNIEnv *env, jobject obj, jdouble x1, jdouble y1, jdouble x2, jdouble y2, jdouble x3, jdouble y3)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_curve_to (%f, %f), (%f, %f), (%f, %f)\n", x1, y1, x2, y2, x3, y3);
    cairo_curve_to (gr->cr, x1, y1, x2, y2, x3, y3);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelMoveTo 
     (JNIEnv *env, jobject obj, jdouble dx, jdouble dy)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_rel_move_to (%f, %f)\n", dx, dy);
    cairo_rel_move_to (gr->cr, dx, dy);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelLineTo 
     (JNIEnv *env, jobject obj, jdouble dx, jdouble dy)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_rel_line_to (%f, %f)\n", dx, dy);
    cairo_rel_line_to (gr->cr, dx, dy);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelCurveTo 
     (JNIEnv *env, jobject obj, jdouble dx1, jdouble dy1, jdouble dx2, jdouble dy2, jdouble dx3, jdouble dy3)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_rel_curve_to (%f, %f), (%f, %f), (%f, %f)\n", dx1, dy1, dx2, dy2, dx3, dy3);
    cairo_rel_curve_to (gr->cr, dx1, dy1, dx2, dy2, dx3, dy3);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRectangle 
     (JNIEnv *env, jobject obj, jdouble x, jdouble y, jdouble width, jdouble height)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   if (gr == NULL) { gdk_threads_leave (); return; }
    if (gr->debug) printf ("cairo_rectangle (%f, %f) (%f, %f)\n", x, y, width, height);
    cairo_rectangle (gr->cr, x, y, width, height);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClosePath 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_close_path\n");
    cairo_close_path (gr->cr);
+   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoStroke 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_stroke\n");
!   begin_drawing_operation (env, gr);
    cairo_stroke (gr->cr);
!   end_drawing_operation (env, gr);
!   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoFill 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
    g_assert (gr != NULL);
    if (gr->debug) printf ("cairo_fill\n");
!   begin_drawing_operation (env, gr);
    cairo_fill (gr->cr);
!   end_drawing_operation (env, gr);
!   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClip 
     (JNIEnv *env, jobject obj)
  {
    struct graphics2d *gr = NULL;
+ 
+   gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
!   if (gr == NULL) { gdk_threads_leave (); return; }
    if (gr->debug) printf ("cairo_clip\n");
+   begin_drawing_operation (env, gr);
+   cairo_init_clip (gr->cr);
    cairo_clip (gr->cr);
+   end_drawing_operation (env, gr);
+   gdk_threads_leave();
  }
  
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilter
+    (JNIEnv *env, jobject obj, jint filter)
+ {
+    struct graphics2d *gr = NULL;   
+ 
+    gdk_threads_enter();
+   if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
+ 
+    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
+    g_assert (gr != NULL);
+    if (gr->debug) printf ("cairo_surface_set_filter %d\n", filter);   
+    switch ((enum java_awt_rendering_hints_filter) filter)
+      {
+      case java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR:
+        cairo_surface_set_filter (gr->surface, CAIRO_FILTER_NEAREST);
+        break;
+      case java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR:
+        cairo_surface_set_filter (gr->surface, CAIRO_FILTER_BILINEAR);
+        break; 
+      case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED:
+        cairo_surface_set_filter (gr->surface, CAIRO_FILTER_FAST);
+        break;
+      case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT:
+        cairo_surface_set_filter (gr->surface, CAIRO_FILTER_NEAREST);
+        break;
+      case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY:
+        cairo_surface_set_filter (gr->surface, CAIRO_FILTER_BEST);
+        break;
+      }
+    gdk_threads_leave();
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c	Tue Nov 30 23:59:12 2004
***************
*** 0 ****
--- 1,99 ----
+ /* gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
+ 
+ #include "gdkfont.h"
+ #include "gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h"
+ 
+ 
+ static gint
+ cmp_families (const void *a, const void *b)
+ {
+   const char *a_name = pango_font_family_get_name (*(PangoFontFamily **)a);
+   const char *b_name = pango_font_family_get_name (*(PangoFontFamily **)b);
+ 
+   return g_utf8_collate (a_name, b_name);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_nativeGetFontFamilies
+ (JNIEnv *env, jobject  self __attribute__((unused)), jobjectArray family_name)
+ {
+   PangoContext *context;
+   PangoFontFamily **families;
+   int n_families, idx;
+ 
+   gdk_threads_enter ();
+ 
+   context = gdk_pango_context_get();
+   g_assert (context != NULL);
+ 
+   pango_context_list_families (context, &families, &n_families);
+ 
+   qsort (families, n_families, sizeof (PangoFontFamily *), cmp_families);
+ 
+   for (idx = 0;  idx < n_families;  idx++)
+     {
+       const char *name_tmp =  pango_font_family_get_name (families[idx]);
+       jstring name = (*env)->NewStringUTF (env, name_tmp);
+       (*env)->SetObjectArrayElement (env, family_name, idx, name);
+     }
+   g_free (families);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT jint JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_nativeGetNumFontFamilies
+ (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)))
+ {
+   PangoContext *context;
+   PangoFontFamily **families;
+   gint n_families;
+   jint num;
+ 
+   gdk_threads_enter ();
+ 
+   context = gdk_pango_context_get();
+   g_assert (context != NULL);
+ 
+   pango_context_list_families (context, &families, &n_families);
+ 
+   num = n_families;
+   g_free (families);
+   gdk_threads_leave ();
+   
+   return num;
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c	Mon Dec  1 18:05:32 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c	Wed Feb 16 20:03:21 2005
***************
*** 1,5 ****
  /* gdkpixbufdecoder.c
!    Copyright (C) 1999, 2003 Free Software Foundation, Inc.
  
     This file is part of GNU Classpath.
     
--- 1,5 ----
  /* gdkpixbufdecoder.c
!    Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
  
     This file is part of GNU Classpath.
     
***************
*** 35,70 ****
     obligated to do so.  If you do not wish to do so, delete this
     exception statement from your version. */
  
! 
! #include <gtk/gtk.h>
  #include <gdk-pixbuf/gdk-pixbuf.h>
  #include <gdk-pixbuf/gdk-pixbuf-loader.h>
  
! #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GdkPixbufDecoder.h"
  
! struct state_table *native_pixbufdecoder_state_table;
! 
! #define NSA_PB_INIT(env, clazz) \
!   native_pixbufdecoder_state_table = init_state_table (env, clazz)
! 
! #define NSA_GET_PB_PTR(env, obj) \
!   get_state (env, obj, native_pixbufdecoder_state_table)
  
! #define NSA_SET_PB_PTR(env, obj, ptr) \
!   set_state (env, obj, native_pixbufdecoder_state_table, (void *)ptr)
  
! #define NSA_DEL_PB_PTR(env, obj) \
!   remove_state_slot (env, obj, native_pixbufdecoder_state_table)
  
  
! jmethodID areaPreparedID;
! jmethodID areaUpdatedID;
  
  static void
  area_prepared (GdkPixbufLoader *loader, 
  	       jobject *decoder)
  {
    jint width, height;
  
    GdkPixbuf *pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
--- 35,74 ----
     obligated to do so.  If you do not wish to do so, delete this
     exception statement from your version. */
  
! #include <gtkpeer.h>
! #include <gdk/gdk.h>
  #include <gdk-pixbuf/gdk-pixbuf.h>
  #include <gdk-pixbuf/gdk-pixbuf-loader.h>
  
! #include <jni.h>
! #include "native_state.h"
  #include "gnu_java_awt_peer_gtk_GdkPixbufDecoder.h"
  
! #include <string.h>
! #include <stdlib.h>
  
! struct state_table *native_pixbufdecoder_state_table;
  
! /* Union used for type punning. */
! union env_union
! {
!   void **void_env;
!   JNIEnv **jni_env;
! };
  
+ static JavaVM *vm;
  
! static jmethodID areaPreparedID;
! static jmethodID areaUpdatedID;
! static jmethodID dataOutputWriteID;
! static jmethodID registerFormatID;
  
  static void
  area_prepared (GdkPixbufLoader *loader, 
  	       jobject *decoder)
  {
+   JNIEnv *env;
+   union env_union e;
    jint width, height;
  
    GdkPixbuf *pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
*************** area_prepared (GdkPixbufLoader *loader, 
*** 72,88 ****
      return;
  
    width = gdk_pixbuf_get_width (pixbuf); 
!   height = gdk_pixbuf_get_height (pixbuf), 
  
    gdk_threads_leave ();
  
    g_assert (decoder != NULL);
  
!   (*gdk_env)->CallVoidMethod (gdk_env,
! 			      *decoder,
! 			      areaPreparedID,
! 			      width, height);
! 
    gdk_threads_enter ();
  }
  
--- 76,94 ----
      return;
  
    width = gdk_pixbuf_get_width (pixbuf); 
!   height = gdk_pixbuf_get_height (pixbuf);
  
    gdk_threads_leave ();
  
    g_assert (decoder != NULL);
  
!   e.jni_env = &env;
!   (*vm)->GetEnv (vm, e.void_env, JNI_VERSION_1_1);
!   (*env)->CallVoidMethod (env,
! 			  *decoder,
! 			  areaPreparedID,
! 			  width, height);
!   
    gdk_threads_enter ();
  }
  
*************** area_updated (GdkPixbufLoader *loader, 
*** 92,106 ****
  	      gint width, gint height,
  	      jobject *decoder)
  {
    jint stride_bytes, stride_pixels, n_channels, n_pixels;
-   int i, px;
    jintArray jpixels;  
    jint *java_pixels;
    guchar *gdk_pixels;
  
    GdkPixbuf *pixbuf_no_alpha = NULL;
    GdkPixbuf *pixbuf = NULL;
!   
    pixbuf_no_alpha = gdk_pixbuf_loader_get_pixbuf (loader);
    if (pixbuf_no_alpha == NULL)
      return;
--- 98,117 ----
  	      gint width, gint height,
  	      jobject *decoder)
  {
+   JNIEnv *env;
+   union env_union e;
    jint stride_bytes, stride_pixels, n_channels, n_pixels;
    jintArray jpixels;  
    jint *java_pixels;
    guchar *gdk_pixels;
  
    GdkPixbuf *pixbuf_no_alpha = NULL;
    GdkPixbuf *pixbuf = NULL;
! 
! #ifndef WORDS_BIGENDIAN
!   int i;
! #endif
! 
    pixbuf_no_alpha = gdk_pixbuf_loader_get_pixbuf (loader);
    if (pixbuf_no_alpha == NULL)
      return;
*************** area_updated (GdkPixbufLoader *loader, 
*** 114,169 ****
    n_pixels = height * stride_pixels;
    gdk_pixels = gdk_pixbuf_get_pixels (pixbuf);
  
!   jpixels = (*gdk_env)->NewIntArray (gdk_env, n_pixels);
!   java_pixels = (*gdk_env)->GetIntArrayElements (gdk_env, jpixels, NULL);
  
    memcpy (java_pixels, 
  	  gdk_pixels + (y * stride_bytes), 
  	  (height * stride_bytes));
  
    for (i = 0; i < n_pixels; ++i)
      {
!       px = java_pixels[i];
! 
!       /* move alpha around (GdkPixbufLoader results are AGBR not GBRA, in
! 	 the lsb sense) */
!       /* px = ((px >> 24) & 0xff) | ((px << 8) & 0xffffff00); */
! 
!       /* it appears to require a full byte swap, now, not just a shift to
! 	 the A channel. why did this change? don't know. */
!       px = ((px >>  8) & 0x00ff00ff) | ((px <<  8) & 0xff00ff00); 
!       px = ((px >> 16) & 0x0000ffff) | ((px << 16) & 0xffff0000); 
! 
!       java_pixels[i] = px;
      }
  
    g_object_unref (pixbuf);
  
    gdk_threads_leave ();
  
!   (*gdk_env)->ReleaseIntArrayElements (gdk_env, jpixels, java_pixels, 0);
!   (*gdk_env)->CallVoidMethod (gdk_env, 
! 			      *decoder, 
! 			      areaUpdatedID,
! 			      (jint) x, (jint) y,
! 			      (jint) width, (jint) height,
! 			      jpixels,
! 			      stride_pixels);
    gdk_threads_enter ();
  }
  
  static void
  closed (GdkPixbufLoader *loader __attribute__((unused)), jobject *decoder)
  {
    gdk_threads_leave ();
!   (*gdk_env)->DeleteGlobalRef (gdk_env, *decoder); 
    free (decoder);
    gdk_threads_enter ();
  }
  
  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initState
    (JNIEnv *env, jobject obj)
  {
    GdkPixbufLoader *loader = NULL;
--- 125,180 ----
    n_pixels = height * stride_pixels;
    gdk_pixels = gdk_pixbuf_get_pixels (pixbuf);
  
!   e.jni_env = &env;
!   (*vm)->GetEnv (vm, e.void_env, JNI_VERSION_1_1);
!   jpixels = (*env)->NewIntArray (env, n_pixels);
!   java_pixels = (*env)->GetIntArrayElements (env, jpixels, NULL);
  
    memcpy (java_pixels, 
  	  gdk_pixels + (y * stride_bytes), 
  	  (height * stride_bytes));
  
+ #ifndef WORDS_BIGENDIAN
+   /* convert pixels from 0xBBGGRRAA to 0xAARRGGBB */
    for (i = 0; i < n_pixels; ++i)
      {
!       java_pixels[i] = SWAPU32 ((unsigned)java_pixels[i]);
      }
+ #endif
  
    g_object_unref (pixbuf);
  
    gdk_threads_leave ();
  
!   (*env)->ReleaseIntArrayElements (env, jpixels, java_pixels, 0);
!   (*env)->CallVoidMethod (env, 
! 			  *decoder, 
! 			  areaUpdatedID,
! 			  (jint) x, (jint) y,
! 			  (jint) width, (jint) height,
! 			  jpixels,
! 			  stride_pixels);
    gdk_threads_enter ();
  }
  
  static void
  closed (GdkPixbufLoader *loader __attribute__((unused)), jobject *decoder)
  {
+   JNIEnv *env;
+   union env_union e;
+   e.jni_env = &env;
+   (*vm)->GetEnv (vm, e.void_env, JNI_VERSION_1_1);
+ 
    gdk_threads_leave ();
!   (*env)->DeleteGlobalRef (env, *decoder); 
    free (decoder);
    gdk_threads_enter ();
  }
  
  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initState
    (JNIEnv *env, jobject obj)
  {
    GdkPixbufLoader *loader = NULL;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 184,192 ****
    NSA_SET_PB_PTR (env, obj, loader);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initStaticState 
    (JNIEnv *env, jclass clazz)
  {
    areaPreparedID = (*env)->GetMethodID (env, clazz, 
  				        "areaPrepared", 
  					"(II)V");
--- 195,268 ----
    NSA_SET_PB_PTR (env, obj, loader);
  }
  
! static void
! query_formats (JNIEnv *env, jclass clazz)
! {
!   jobject jformat;
!   GSList *formats, *f;
!   GdkPixbufFormat *format;
!   char **ch, *name;
! 
!   jclass formatClass;
!   jmethodID addExtensionID;
!   jmethodID addMimeTypeID;
! 
!   formatClass = (*env)->FindClass
!     (env, "gnu/java/awt/peer/gtk/GdkPixbufDecoder$ImageFormatSpec");
! 
!   g_assert(formatClass != NULL);
! 
!   addExtensionID = (*env)->GetMethodID (env, formatClass, 
! 				        "addExtension", 
! 					"(Ljava/lang/String;)V");
! 
!   addMimeTypeID = (*env)->GetMethodID (env, formatClass, 
! 				       "addMimeType", 
! 				       "(Ljava/lang/String;)V");
!   
!   formats = gdk_pixbuf_get_formats ();
! 
!   for (f = formats; f; f = f->next)
!     {
!       format = (GdkPixbufFormat *) f->data;
!       name = gdk_pixbuf_format_get_name(format);
! 
!       jformat = (*env)->CallStaticObjectMethod 
! 	(env, clazz, registerFormatID, 				    
! 	 (*env)->NewStringUTF(env, name),
! 	 (jboolean) gdk_pixbuf_format_is_writable(format));
! 
!       g_assert(jformat != NULL);
!       
!       ch = gdk_pixbuf_format_get_extensions(format);
!       while (*ch)
! 	{
! 	  (*env)->CallVoidMethod (env, jformat, addExtensionID, 
! 				  (*env)->NewStringUTF(env, *ch)); 
! 	  ++ch;
! 	}
!       
!       ch = gdk_pixbuf_format_get_mime_types(format);
!       while (*ch)
! 	{
! 	  (*env)->CallVoidMethod (env, jformat, addMimeTypeID, 
! 				  (*env)->NewStringUTF(env, *ch)); 
! 	  ++ch;
! 	}
!     }
!   
!   g_slist_free(formats);  
! }
! 
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initStaticState 
    (JNIEnv *env, jclass clazz)
  {
+   jclass dataOutputClass;
+ 
+   (*env)->GetJavaVM(env, &vm);
+ 
    areaPreparedID = (*env)->GetMethodID (env, clazz, 
  				        "areaPrepared", 
  					"(II)V");
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 194,204 ****
    areaUpdatedID = (*env)->GetMethodID (env, clazz,
  				       "areaUpdated",
  				       "(IIII[II)V");
    NSA_PB_INIT (env, clazz);
  }
  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_finish
    (JNIEnv *env, jobject obj)
  {
    GdkPixbufLoader *loader = NULL;
--- 270,295 ----
    areaUpdatedID = (*env)->GetMethodID (env, clazz,
  				       "areaUpdated",
  				       "(IIII[II)V");
+ 
+   registerFormatID = (*env)->GetStaticMethodID 
+     (env, clazz, 
+      "registerFormat", 
+      "(Ljava/lang/String;Z)"
+      "Lgnu/java/awt/peer/gtk/GdkPixbufDecoder$ImageFormatSpec;");
+ 
+   
+   dataOutputClass = (*env)->FindClass(env, "java/io/DataOutput");
+   dataOutputWriteID = (*env)->GetMethodID (env, dataOutputClass,
+ 					     "write", "([B)V");
+ 
+   query_formats (env, clazz);
+   
    NSA_PB_INIT (env, clazz);
  }
  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_finish
    (JNIEnv *env, jobject obj)
  {
    GdkPixbufLoader *loader = NULL;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 213,220 ****
    gdk_threads_leave (); 
  }
  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes
    (JNIEnv *env, jobject obj, jbyteArray jarr, jint len)
  {
    GdkPixbufLoader *loader = NULL;
--- 304,421 ----
    gdk_threads_leave (); 
  }
  
+ struct stream_save_request
+ {
+   JNIEnv *env;
+   jobject *stream;
+ };
+ 
+ static gboolean
+ save_to_stream(const gchar *buf,
+ 	       gsize count,
+ 	       GError **error __attribute__((unused)),
+ 	       gpointer data)
+ {
+   struct stream_save_request *ssr = (struct stream_save_request *)data;
+ 
+   jbyteArray jbuf;
+   jbyte *cbuf;
+ 
+   gdk_threads_leave ();
+   jbuf = (*(ssr->env))->NewByteArray ((ssr->env), count);
+   cbuf = (*(ssr->env))->GetByteArrayElements ((ssr->env), jbuf, NULL);
+   memcpy (cbuf, buf, count);
+   (*(ssr->env))->ReleaseByteArrayElements ((ssr->env), jbuf, cbuf, 0);
+   (*(ssr->env))->CallVoidMethod ((ssr->env), *(ssr->stream), 
+ 				 dataOutputWriteID, jbuf);  
+   gdk_threads_enter ();
+   return TRUE;
+ }
+ 
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage
! (JNIEnv *env, jclass clazz __attribute__((unused)), 
!  jintArray jarr, jstring jenctype, jint width, jint height, 
!  jboolean hasAlpha, jobject stream)
! {
!   GdkPixbuf* pixbuf;  
!   jint *ints;
!   guchar a, r, g, b, *pix, *p;
!   GError *err = NULL;
!   const char *enctype;
!   int i;
! 
!   struct stream_save_request ssr;
!   ssr.stream = &stream;
!   ssr.env = env;
! 
!   ints = (*env)->GetIntArrayElements (env, jarr, NULL);
!   pix = g_malloc(width * height * (hasAlpha ? 4 : 3));
! 
!   enctype = (*env)->GetStringUTFChars (env, jenctype, NULL);
!   g_assert(enctype != NULL);
! 
!   g_assert (pix != NULL);
!   g_assert (ints != NULL);
! 
!   p = pix;
!   for (i = 0; i < width*height; ++i)
!     {
!       /* 
!        * Java encodes pixels as integers in a predictable arithmetic order:
!        * 0xAARRGGBB. Since these are jints, JNI has already byte-swapped
!        * them for us if necessary, so they're in "our" endianness, whatever
!        * that is. It uses 4 bytes per pixel whether or not there's an alpha
!        * channel.
!        */
! 
!       a = 0xff & (ints[i] >> 24);
!       r = 0xff & (ints[i] >> 16);
!       g = 0xff & (ints[i] >> 8);
!       b = 0xff & ints[i];
! 
!       /* 
!        * GDK-pixbuf has a very different storage model:
!        *
!        *  - A different alpha order (alpha after colors).
!        *  - A different packing model (no alpha -> 3-bytes-per-pixel).
!        *  - A different "RGB" order (host memory order, not endian-neutral).
!        */
! 
!       *p++ = r;
!       *p++ = g;
!       *p++ = b;
!       if (hasAlpha)
! 	*p++ = a;
!     }
! 
!   gdk_threads_enter ();
!   pixbuf =  gdk_pixbuf_new_from_data (pix,
! 				      GDK_COLORSPACE_RGB,
! 				      (gboolean) hasAlpha,
! 				      8, width, height, 
! 				      width * (hasAlpha ? 4 : 3), /* rowstride */
! 				      NULL, NULL);
!   g_assert (pixbuf != NULL);
! 
!   g_assert(gdk_pixbuf_save_to_callback (pixbuf,
! 					&save_to_stream,
! 					&ssr,
! 					enctype,
! 					&err, NULL));
! 
!   g_object_unref (pixbuf);
! 
!   gdk_threads_leave ();
!   g_free(pix);
! 
!   (*env)->ReleaseStringUTFChars (env, jenctype, enctype);  
!   (*env)->ReleaseIntArrayElements (env, jarr, ints, 0);
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes
    (JNIEnv *env, jobject obj, jbyteArray jarr, jint len)
  {
    GdkPixbufLoader *loader = NULL;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 223,236 ****
    if (len < 1)
      return;
  
!   bytes = (*gdk_env)->GetByteArrayElements (gdk_env, jarr, NULL);
    g_assert (bytes != NULL);
    loader = (GdkPixbufLoader *)NSA_GET_PB_PTR (env, obj);
    g_assert (loader != NULL);
  
    gdk_threads_enter ();
!   gdk_pixbuf_loader_write (loader, bytes, len, NULL);
    gdk_threads_leave ();
  
!   (*gdk_env)->ReleaseByteArrayElements (gdk_env, jarr, bytes, 0);
  }
--- 424,437 ----
    if (len < 1)
      return;
  
!   bytes = (*env)->GetByteArrayElements (env, jarr, NULL);
    g_assert (bytes != NULL);
    loader = (GdkPixbufLoader *)NSA_GET_PB_PTR (env, obj);
    g_assert (loader != NULL);
  
    gdk_threads_enter ();
!   gdk_pixbuf_loader_write (loader, (const guchar *) bytes, len, NULL);
    gdk_threads_leave ();
  
!   (*env)->ReleaseByteArrayElements (env, jarr, bytes, 0);
  }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c	Wed Feb 16 20:03:21 2005
***************
*** 0 ****
--- 1,328 ----
+ /* gdkrobotpeer.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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ #include "gtkpeer.h"
+ #include "gnu_java_awt_peer_gtk_GdkRobotPeer.h"
+ #include <gdk/gdkx.h>
+ #include <X11/extensions/XTest.h>
+ 
+ static int
+ awt_button_mask_to_num (int buttons)
+ {
+   switch (buttons)
+     {
+     case AWT_BUTTON1_MASK:
+       return 1;
+     case AWT_BUTTON2_MASK:
+       return 2;
+     case AWT_BUTTON3_MASK:
+       return 3;
+     }
+ 
+   return 0;
+ }
+ 
+ JNIEXPORT jboolean JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_initXTest
+   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)))
+ {
+   GdkDisplay *display;
+   Display *xdisplay;
+   int event_basep;
+   int error_basep;
+   int majorp;
+   int minorp;
+   jboolean result;
+ 
+   gdk_threads_enter ();
+ 
+   display = gdk_display_get_default ();
+   xdisplay = GDK_DISPLAY_XDISPLAY (display);
+ 
+   result = XTestQueryExtension (xdisplay,
+ 				&event_basep,
+ 				&error_basep,
+ 				&majorp,
+ 				&minorp);
+ 
+   gdk_threads_leave ();
+ 
+   return result;
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mouseMove
+   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jint x, jint y)
+ {
+   GdkDisplay *display;
+   Display *xdisplay;
+   int result;
+ 
+   gdk_threads_enter ();
+ 
+   display = gdk_display_get_default ();
+   xdisplay = GDK_DISPLAY_XDISPLAY (display);
+ 
+   result = XTestFakeMotionEvent (xdisplay,
+ 				 -1,
+ 				 x, y, CurrentTime);
+ 
+   XFlush (xdisplay);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mousePress
+   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jint buttons)
+ {
+   GdkDisplay *display;
+   Display *xdisplay;
+   int result;
+ 
+   gdk_threads_enter ();
+ 
+   display = gdk_display_get_default ();
+   xdisplay = GDK_DISPLAY_XDISPLAY (display);
+ 
+   result = XTestFakeButtonEvent (xdisplay,
+ 				 awt_button_mask_to_num (buttons),
+ 				 True, CurrentTime);
+ 
+   XFlush (xdisplay);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mouseRelease
+   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jint buttons)
+ {
+   GdkDisplay *display;
+   Display *xdisplay;
+   int result;
+ 
+   gdk_threads_enter ();
+ 
+   display = gdk_display_get_default ();
+   xdisplay = GDK_DISPLAY_XDISPLAY (display);
+ 
+   result = XTestFakeButtonEvent (xdisplay,
+ 				 awt_button_mask_to_num (buttons),
+ 				 False, CurrentTime);
+ 
+   XFlush (xdisplay);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mouseWheel
+   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jint wheelAmt)
+ {
+   GdkDisplay *display;
+   Display *xdisplay;
+   int i = 0;
+ 
+   gdk_threads_enter ();
+ 
+   display = gdk_display_get_default ();
+   xdisplay = GDK_DISPLAY_XDISPLAY (display);
+ 
+   if (wheelAmt < 0)
+     for (i = 0; i < -wheelAmt; i++)
+       {
+ 	XTestFakeButtonEvent (xdisplay,
+ 			      4,
+ 			      True, CurrentTime);
+ 	XTestFakeButtonEvent (xdisplay,
+ 			      4,
+ 			      False, CurrentTime);
+       }
+   else
+     for (i = 0; i < wheelAmt; i++)
+       {
+ 	XTestFakeButtonEvent (xdisplay,
+ 			      5,
+ 			      True, CurrentTime);
+ 	XTestFakeButtonEvent (xdisplay,
+ 			      5,
+ 			      False, CurrentTime);
+       }
+ 
+   XFlush (xdisplay);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_keyPress
+   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jint keycode)
+ {
+   GdkDisplay *display;
+   Display *xdisplay;
+   GdkKeymapKey *keymap_keys = NULL;
+   gint n_keys = 0;
+   guint lookup_keyval = 0;
+   int result;
+ 
+   gdk_threads_enter ();
+ 
+   display = gdk_display_get_default ();
+   xdisplay = GDK_DISPLAY_XDISPLAY (display);
+ 
+   lookup_keyval = awt_keycode_to_keysym (keycode, AWT_KEY_LOCATION_LEFT);
+ 
+   if (!gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (),
+                                           lookup_keyval,
+                                           &keymap_keys,
+                                           &n_keys))
+     {
+       /* No matching keymap entry was found. */
+       g_printerr ("No matching keymap entries were found\n");
+       gdk_threads_leave ();
+       return;
+     }
+ 
+   /* If n_keys > 1 then there are multiple hardware keycodes that
+      translate to lookup_keyval.  We arbitrarily choose the first
+      hardware keycode from the list returned by
+      gdk_keymap_get_entries_for_keyval. */
+   result = XTestFakeKeyEvent (xdisplay,
+ 			      keymap_keys[0].keycode,
+ 			      True, CurrentTime);
+ 
+   g_free (keymap_keys);
+ 
+   XFlush (xdisplay);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_keyRelease
+   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jint keycode)
+ {
+   GdkDisplay *display;
+   Display *xdisplay;
+   GdkKeymapKey *keymap_keys = NULL;
+   gint n_keys = 0;
+   guint lookup_keyval = 0;
+   int result;
+ 
+   gdk_threads_enter ();
+ 
+   display = gdk_display_get_default ();
+   xdisplay = GDK_DISPLAY_XDISPLAY (display);
+ 
+   lookup_keyval = awt_keycode_to_keysym (keycode, AWT_KEY_LOCATION_LEFT);
+ 
+   if (!gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (),
+                                           lookup_keyval,
+                                           &keymap_keys,
+                                           &n_keys))
+     {
+       /* No matching keymap entry was found. */
+       g_printerr ("No matching keymap entries were found\n");
+       gdk_threads_leave ();
+       return;
+     }
+ 
+   /* If n_keys > 1 then there are multiple hardware keycodes that
+      translate to lookup_keyval.  We arbitrarily choose the first
+      hardware keycode from the list returned by
+      gdk_keymap_get_entries_for_keyval. */
+   result = XTestFakeKeyEvent (xdisplay,
+ 			      keymap_keys[0].keycode,
+ 			      False, CurrentTime);
+ 
+   g_free (keymap_keys);
+ 
+   XFlush (xdisplay);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT jintArray JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_nativeGetRGBPixels
+   (JNIEnv *env, jobject obj __attribute__((unused)), jint x, jint y,
+    jint width, jint height)
+ {
+   jint stride_bytes, stride_pixels, n_channels, n_pixels;
+   jintArray jpixels;  
+   jint *java_pixels;
+   guchar *gdk_pixels;
+   GdkPixbuf *pixbuf_no_alpha = NULL;
+   GdkPixbuf *pixbuf = NULL;
+ 
+ #ifndef WORDS_BIGENDIAN
+   int i;
+ #endif
+ 
+   gdk_threads_enter ();
+ 
+   pixbuf_no_alpha = gdk_pixbuf_get_from_drawable (NULL,
+ 						  gdk_get_default_root_window (),
+ 						  NULL, x, y, 0, 0,
+ 						  width, height);
+ 
+   pixbuf = gdk_pixbuf_add_alpha(pixbuf_no_alpha, FALSE, 0, 0, 0);
+   g_assert (gdk_pixbuf_get_has_alpha (pixbuf));
+   
+   stride_bytes = gdk_pixbuf_get_rowstride (pixbuf);
+   n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+   stride_pixels =  stride_bytes / n_channels;
+   n_pixels = height * stride_pixels;
+   gdk_pixels = gdk_pixbuf_get_pixels (pixbuf);
+ 
+   jpixels = (*env)->NewIntArray (env, n_pixels);
+   java_pixels = (*env)->GetIntArrayElements (env, jpixels, NULL);
+ 
+   memcpy (java_pixels,
+ 	  gdk_pixels,
+ 	  (height * stride_bytes));
+ 
+ #ifndef WORDS_BIGENDIAN
+   /* convert pixels from 0xBBGGRRAA to 0xAARRGGBB */
+   for (i = 0; i < n_pixels; ++i)
+     {
+       java_pixels[i] = SWAPU32 ((unsigned)java_pixels[i]);
+     }
+ #endif
+ 
+   g_object_unref (pixbuf);
+ 
+   (*env)->ReleaseIntArrayElements (env, jpixels, java_pixels, 0);
+ 
+   gdk_threads_leave ();
+ 
+   return jpixels;
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c	Tue Nov 30 23:59:12 2004
***************
*** 0 ****
--- 1,183 ----
+ /* gnu_java_awt_GdkTextLayout.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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+    
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+    
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
+ 
+ 
+ #include <jni.h>
+ #include <gtk/gtk.h>
+ #include "native_state.h"
+ #include "gdkfont.h"
+ #include "gnu_java_awt_peer_gtk_GdkTextLayout.h"
+ 
+ struct state_table *native_text_layout_state_table;
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkTextLayout_initStaticState 
+   (JNIEnv *env, jclass clazz)
+ {
+   NSA_TEXT_LAYOUT_INIT (env, clazz);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkTextLayout_initState
+   (JNIEnv *env, jobject self)
+ {
+   struct textlayout *tl;
+ 
+   gdk_threads_enter ();
+   g_assert(self != NULL);
+   tl = g_malloc0 (sizeof (struct textlayout));
+   g_assert(tl != NULL);
+   tl->pango_layout = pango_layout_new(gdk_pango_context_get());
+   g_assert(tl->pango_layout != NULL);
+   NSA_SET_TEXT_LAYOUT_PTR (env, self, tl);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText
+   (JNIEnv *env, jobject self, jstring text)
+ {
+   struct textlayout *tl;
+   gchar *str = NULL;
+   gint len = 0;
+ 
+   gdk_threads_enter ();
+   g_assert(self != NULL);
+   g_assert(text != NULL);
+ 
+   tl = (struct textlayout *)NSA_GET_TEXT_LAYOUT_PTR (env, self);
+   g_assert(tl != NULL);
+   g_assert(tl->pango_layout != NULL);
+   
+   len = (*env)->GetStringUTFLength (env, text);
+   str = (gchar *)(*env)->GetStringUTFChars (env, text, NULL);
+   g_assert (str != NULL);
+ 
+   pango_layout_set_text (tl->pango_layout, text, len);
+ 
+   (*env)->ReleaseStringUTFChars (env, text, str);
+   gdk_threads_leave ();  
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkTextLayout_indexToPos
+   (JNIEnv *env, jobject self, jint idx, jdoubleArray javaPos)
+ {
+   struct textlayout *tl;
+   PangoRectangle pangoPos;
+   jdouble *nativePos;
+ 
+   gdk_threads_enter ();
+   g_assert(self != NULL);
+   g_assert(javaPos != NULL);
+ 
+   tl = (struct textlayout *)NSA_GET_TEXT_LAYOUT_PTR (env, self);
+   g_assert(tl != NULL);
+   g_assert(tl->pango_layout != NULL);
+   
+   g_assert((*env)->GetArrayLength (env, javaPos) == 4);
+ 
+   nativePos = (*env)->GetDoubleArrayElements (env, javaPos, NULL);    
+ 
+   pango_layout_index_to_pos (tl->pango_layout, idx, &pangoPos);
+ 
+   nativePos[0] = (jdouble) pangoPos.x;
+   nativePos[1] = (jdouble) pangoPos.y;
+   nativePos[2] = (jdouble) pangoPos.width;
+   nativePos[3] = (jdouble) pangoPos.height;
+ 
+   (*env)->ReleaseDoubleArrayElements (env, javaPos, nativePos, 0);
+   gdk_threads_leave ();  
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkTextLayout_getExtents
+   (JNIEnv *env, jobject self, jdoubleArray javaInkExtents, jdoubleArray javaLogExtents)
+ {
+   struct textlayout *tl;
+   PangoRectangle pangoInkExtents, pangoLogExtents;
+   jdouble *nativeInkExtents, *nativeLogExtents;
+ 
+   gdk_threads_enter ();
+   g_assert(self != NULL);
+   g_assert(javaInkExtents != NULL);
+   g_assert(javaLogExtents != NULL);
+ 
+   tl = (struct textlayout *)NSA_GET_TEXT_LAYOUT_PTR (env, self);
+   g_assert(tl != NULL);
+   g_assert(tl->pango_layout != NULL);
+   
+   g_assert((*env)->GetArrayLength (env, javaInkExtents) == 4);
+   g_assert((*env)->GetArrayLength (env, javaLogExtents) == 4);
+ 
+   nativeInkExtents = (*env)->GetDoubleArrayElements (env, javaInkExtents, NULL);    
+   nativeLogExtents = (*env)->GetDoubleArrayElements (env, javaLogExtents, NULL);  
+ 
+   pango_layout_get_extents (tl->pango_layout, 
+ 			    &pangoInkExtents, &pangoLogExtents);
+ 
+   nativeInkExtents[0] = (jdouble) pangoInkExtents.x;
+   nativeInkExtents[1] = (jdouble) pangoInkExtents.y;
+   nativeInkExtents[2] = (jdouble) pangoInkExtents.width;
+   nativeInkExtents[3] = (jdouble) pangoInkExtents.height;
+ 
+   nativeLogExtents[0] = (jdouble) pangoLogExtents.x;
+   nativeLogExtents[1] = (jdouble) pangoLogExtents.y;
+   nativeLogExtents[2] = (jdouble) pangoLogExtents.width;
+   nativeLogExtents[3] = (jdouble) pangoLogExtents.height;
+ 
+   (*env)->ReleaseDoubleArrayElements (env, javaInkExtents, nativeInkExtents, 0);
+   (*env)->ReleaseDoubleArrayElements (env, javaLogExtents, nativeLogExtents, 0);
+ 
+   gdk_threads_leave ();    
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GdkTextLayout_dispose
+   (JNIEnv *env, jobject self)
+ {
+   struct textlayout *tl;
+ 
+   gdk_threads_enter ();
+   g_assert(self != NULL);
+   tl = (struct textlayout *) NSA_DEL_TEXT_LAYOUT_PTR (env, self);
+   g_assert(tl != NULL);
+   if (tl->pango_layout != NULL)
+     g_object_unref (tl->pango_layout);
+   g_free(tl);
+   gdk_threads_leave ();
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c	Wed Feb 16 20:03:21 2005
*************** exception statement from your version. *
*** 37,94 ****
  
  
  #include "gtkpeer.h"
- #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include "gnu_java_awt_peer_gtk_GtkButtonPeer.h"
  
  JNIEXPORT void JNICALL
  Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
!   (JNIEnv *env, jobject obj)
  {
    GtkWidget *button;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
!   
!   button = gtk_button_new();
    gtk_widget_show (button);
  
    gdk_threads_leave ();
  
!   NSA_SET_PTR (env, obj, button);
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectJObject
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
  
!   gtk_widget_realize (GTK_WIDGET (ptr));
  
!   connect_awt_hook (env, obj, 1, GTK_BUTTON(ptr)->event_window);
  
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
!   (JNIEnv *env, jobject obj)
  {
!   /* FIXME: Do we need to connect any signals here? Otherwise just do not
!      override parent method. */
  
!   /* Connect the superclass signals.  */
!   Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
  }
  
  JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont
    (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
  {
    const char *font_name;
--- 37,141 ----
  
  
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkButtonPeer.h"
  
+ static gboolean focus_in_cb (GtkWidget *widget,
+                              GdkEventFocus *event,
+                              jobject peer);
+ static gboolean focus_out_cb (GtkWidget *widget,
+                               GdkEventFocus *event,
+                               jobject peer);
+ 
+ static void block_expose_events_cb (GtkWidget *widget,
+                                     jobject peer);
+ 
  JNIEXPORT void JNICALL
  Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
!   (JNIEnv *env, jobject obj, jstring label)
  {
+   const char *c_label;
+   GtkWidget *eventbox;
    GtkWidget *button;
  
    NSA_SET_GLOBAL_REF (env, obj);
  
+   c_label = (*env)->GetStringUTFChars (env, label, NULL);
+ 
    gdk_threads_enter ();
! 
!   eventbox = gtk_event_box_new ();
!   button = gtk_button_new_with_label (c_label);
!   gtk_container_add (GTK_CONTAINER (eventbox), button);
    gtk_widget_show (button);
  
    gdk_threads_leave ();
  
!   (*env)->ReleaseStringUTFChars (env, label, c_label);
!   NSA_SET_PTR (env, obj, eventbox);
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
+   jobject *gref;
+   GtkWidget *button;
  
    ptr = NSA_GET_PTR (env, obj);
+   gref = NSA_GET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
  
!   button = gtk_bin_get_child (GTK_BIN (ptr));
  
!   g_signal_connect (G_OBJECT (ptr), "event",
!                     G_CALLBACK (pre_event_handler), *gref);
! 
!   g_signal_connect (G_OBJECT (button), "event",
!                     G_CALLBACK (pre_event_handler), *gref);
! 
!   g_signal_connect (G_OBJECT (button), "focus-in-event",
!                     G_CALLBACK (focus_in_cb), *gref);
! 
!   g_signal_connect (G_OBJECT (button), "focus-out-event",
!                     G_CALLBACK (focus_out_cb), *gref);
! 
!   g_signal_connect_after (G_OBJECT (button), "pressed",
!                           G_CALLBACK (block_expose_events_cb), *gref);
! 
!   g_signal_connect_after (G_OBJECT (button), "released",
!                           G_CALLBACK (block_expose_events_cb), *gref);
  
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetLabel
!   (JNIEnv *env, jobject obj, jstring jtext)
  {
!   const char *text;
!   GtkWidget *button;
!   GtkWidget *label;
!   void *ptr;
  
!   ptr = NSA_GET_PTR (env, obj);
! 
!   text = (*env)->GetStringUTFChars (env, jtext, NULL);
! 
!   gdk_threads_enter ();
! 
!   button = gtk_bin_get_child (GTK_BIN (ptr));
!   label = gtk_bin_get_child (GTK_BIN (button));
!   gtk_label_set_text (GTK_LABEL (label), text);
! 
!   gdk_threads_leave ();
! 
!   (*env)->ReleaseStringUTFChars (env, jtext, text);
  }
  
  JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetModifyFont
    (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
  {
    const char *font_name;
*************** Java_gnu_java_awt_peer_gtk_GtkButtonPeer
*** 99,116 ****
  
    ptr = NSA_GET_PTR (env, obj);
  
-   button = GTK_WIDGET (ptr);
-   label = gtk_bin_get_child (GTK_BIN(button));
-   
-   if (!label)
-       return;
- 
    font_name = (*env)->GetStringUTFChars (env, name, NULL);
  
    gdk_threads_enter();
  
    font_desc = pango_font_description_from_string (font_name);
!   pango_font_description_set_size (font_desc, size * PANGO_SCALE);
  
    if (style & AWT_STYLE_BOLD)
      pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
--- 146,160 ----
  
    ptr = NSA_GET_PTR (env, obj);
  
    font_name = (*env)->GetStringUTFChars (env, name, NULL);
  
    gdk_threads_enter();
  
+   button = gtk_bin_get_child (GTK_BIN (ptr));
+   label = gtk_bin_get_child (GTK_BIN (button));
+ 
    font_desc = pango_font_description_from_string (font_name);
!   pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
  
    if (style & AWT_STYLE_BOLD)
      pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
*************** Java_gnu_java_awt_peer_gtk_GtkButtonPeer
*** 128,137 ****
--- 172,227 ----
  }
  
  JNIEXPORT void JNICALL 
+ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetBackground
+   (JNIEnv *env, jobject obj, jint red, jint green, jint blue)
+ {
+   GdkColor normal_color;
+   GdkColor prelight_color;
+   GdkColor active_color;
+   int prelight_red;
+   int prelight_blue;
+   int prelight_green;
+   GtkWidget *button;
+   void *ptr;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   normal_color.red = (red / 255.0) * 65535;
+   normal_color.green = (green / 255.0) * 65535;
+   normal_color.blue = (blue / 255.0) * 65535;
+ 
+   /* This calculation only approximate the active color produced by
+      Sun's AWT. */
+   active_color.red = 0.85 * (red / 255.0) * 65535;
+   active_color.green = 0.85 * (green / 255.0) * 65535;
+   active_color.blue = 0.85 * (blue / 255.0) * 65535;
+ 
+   /* There is no separate prelight color in Motif. */
+   prelight_red = 1.15 * (red / 255.0) * 65535;
+   prelight_green = 1.15 * (green / 255.0) * 65535;
+   prelight_blue = 1.15 * (blue / 255.0) * 65535;
+ 
+   prelight_color.red = prelight_red > 65535 ? 65535 : prelight_red;
+   prelight_color.green = prelight_green > 65535 ? 65535 : prelight_green;
+   prelight_color.blue = prelight_blue > 65535 ? 65535 : prelight_blue;
+ 
+   gdk_threads_enter ();
+ 
+   button = gtk_bin_get_child (GTK_BIN (ptr));
+ 
+   gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &normal_color);
+   gtk_widget_modify_bg (button, GTK_STATE_ACTIVE, &active_color);
+   gtk_widget_modify_bg (button, GTK_STATE_PRELIGHT, &prelight_color);
+ 
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetForeground
    (JNIEnv *env, jobject obj, jint red, jint green, jint blue)
  {
    GdkColor color;
+   GtkWidget *button;
    GtkWidget *label;
    void *ptr;
  
*************** Java_gnu_java_awt_peer_gtk_GtkButtonPeer
*** 143,152 ****
  
    gdk_threads_enter ();
  
!   label = gtk_bin_get_child (GTK_BIN(ptr));
! 
!   if (!label)
!       return;
  
    gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &color);
    gtk_widget_modify_fg (label, GTK_STATE_ACTIVE, &color);
--- 233,240 ----
  
    gdk_threads_enter ();
  
!   button = gtk_bin_get_child (GTK_BIN (ptr));
!   label = gtk_bin_get_child (GTK_BIN (button));
  
    gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &color);
    gtk_widget_modify_fg (label, GTK_STATE_ACTIVE, &color);
*************** Java_gnu_java_awt_peer_gtk_GtkButtonPeer
*** 154,156 ****
--- 242,355 ----
  
    gdk_threads_leave ();
  }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkActivate
+   (JNIEnv *env, jobject obj)
+ {
+   GtkWidget *button;
+   void *ptr;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+ 
+   button = gtk_bin_get_child (GTK_BIN (ptr));
+   gtk_widget_activate (GTK_WIDGET (button));
+ 
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetRequestFocus
+   (JNIEnv *env, jobject obj)
+ {
+   void *ptr;
+   GtkWidget *button;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+   button = gtk_bin_get_child (GTK_BIN (ptr));
+   gtk_widget_grab_focus (button);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds
+   (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
+ {
+   GtkWidget *widget, *child;
+   void *ptr;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+ 
+   widget = GTK_WIDGET (ptr);
+ 
+   /* We assume that -1 is a width or height and not a request for the
+      widget's natural size. */
+   width = width < 0 ? 0 : width;
+   height = height < 0 ? 0 : height;
+   child = gtk_bin_get_child (GTK_BIN (widget));
+ 
+   if (!(width == 0 && height == 0))
+     {
+       /* Set the event box's size request... */
+       gtk_widget_set_size_request (widget, width, height);
+       /* ...and the button's size request... */
+       gtk_widget_set_size_request (child, width, height);
+       /* ...and the label's size request. */
+       gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (child)), width,
+ 						      height);
+       if (widget->parent != NULL)
+         gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);
+     }
+ 
+   gdk_threads_leave ();
+ }
+ 
+ static gboolean
+ focus_in_cb (GtkWidget *widget __attribute((unused)),
+              GdkEventFocus *event __attribute((unused)),
+              jobject peer)
+ {
+   gdk_threads_leave ();
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                               postFocusEventID,
+                               AWT_FOCUS_GAINED,
+                               JNI_FALSE);
+   gdk_threads_enter ();
+   return FALSE;
+ }
+ 
+ static gboolean
+ focus_out_cb (GtkWidget *widget __attribute((unused)),
+               GdkEventFocus *event __attribute((unused)),
+               jobject peer)
+ {
+   gdk_threads_leave ();
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                               postFocusEventID,
+                               AWT_FOCUS_LOST,
+                               JNI_FALSE);
+   gdk_threads_enter ();
+   return FALSE;
+ }
+ 
+ static void
+ block_expose_events_cb (GtkWidget *widget, jobject peer)
+ {
+   gdk_threads_leave ();
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                               beginNativeRepaintID);
+   gdk_threads_enter ();
+ 
+   gdk_window_process_updates (widget->window, TRUE);
+ 
+   gdk_threads_leave ();
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                               endNativeRepaintID);
+   gdk_threads_enter ();
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c	Tue Nov 30 23:59:12 2004
*************** exception statement from your version. *
*** 39,45 ****
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkCanvasPeer.h"
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create
    (JNIEnv *env, jobject obj)
  {
    gpointer widget;
--- 39,46 ----
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkCanvasPeer.h"
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create
    (JNIEnv *env, jobject obj)
  {
    gpointer widget;
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c	Tue Nov 30 23:59:12 2004
***************
*** 0 ****
--- 1,77 ----
+ /* gtkcheckboxgrouppeer.c -- Native implementation of GtkCheckboxGroupPeer
+    Copyright (C) 2004  Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ #include "gtkpeer.h"
+ #include "gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h"
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_dispose
+   (JNIEnv *env, jobject obj)
+ {
+   /* The actual underlying widget is owned by a different class.  So
+      we just clean up the hash table here.  */
+   NSA_DEL_PTR (env, obj);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove
+   (JNIEnv *env, jobject obj, jobject checkbox)
+ {
+   GtkRadioButton *button;
+   void *ptr;
+   GSList *list;
+ 
+   ptr = NSA_GET_PTR (env, checkbox);
+   gdk_threads_enter ();
+   button = GTK_RADIO_BUTTON (ptr);
+ 
+   /* Update the group to point to some other widget in the group.  We
+      have to do this because Gtk doesn't have a separate object to
+      represent a radio button's group.  */
+   for (list = gtk_radio_button_group (button); list != NULL;
+        list = list->next)
+     {
+       if (list->data != button)
+        break;
+     }
+ 
+   gdk_threads_leave ();
+ 
+   NSA_SET_PTR (env, obj, list ? list->data : NULL);
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c	Tue Nov 30 23:59:12 2004
*************** exception statement from your version. *
*** 37,43 ****
  
  
  #include "gtkpeer.h"
! #include "gnu_java_awt_peer_gtk_GtkMenuItemPeer.h"
  
  JNIEXPORT void JNICALL
  Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create
--- 37,43 ----
  
  
  #include "gtkpeer.h"
! #include "gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h"
  
  JNIEXPORT void JNICALL
  Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create
*************** Java_gnu_java_awt_peer_gtk_GtkCheckboxMe
*** 46,52 ****
    GtkWidget *widget;
    const char *str;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    str = (*env)->GetStringUTFChars (env, label, NULL);
--- 46,51 ----
*************** Java_gnu_java_awt_peer_gtk_GtkCheckboxMe
*** 54,60 ****
    gdk_threads_enter ();
    
    widget = gtk_check_menu_item_new_with_label (str);
-   gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (widget), 1);
    gtk_widget_show (widget);
  
    gdk_threads_leave ();
--- 53,58 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c	Wed Feb 16 20:03:22 2005
***************
*** 1,5 ****
  /* gtkcheckboxpeer.c -- Native implementation of GtkCheckboxPeer
!    Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtkcheckboxpeer.c -- Native implementation of GtkCheckboxPeer
!    Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 42,88 ****
  
  static void item_toggled (GtkToggleButton *item, jobject peer);
  
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_dispose
-   (JNIEnv *env, jobject obj)
- {
-   /* The actual underlying widget is owned by a different class.  So
-      we just clean up the hash table here.  */
-   NSA_DEL_PTR (env, obj);
- }
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove
-   (JNIEnv *env, jobject obj, jobject checkbox)
- {
-   GtkRadioButton *button;
-   void *ptr;
-   GSList *list;
- 
-   ptr = NSA_GET_PTR (env, checkbox);
-   gdk_threads_enter ();
-   button = GTK_RADIO_BUTTON (ptr);
- 
-   /* Update the group to point to some other widget in the group.  We
-      have to do this because Gtk doesn't have a separate object to
-      represent a radio button's group.  */
-   for (list = gtk_radio_button_group (button); list != NULL;
-        list = list->next)
-     {
-       if (list->data != button)
- 	break;
-     }
- 
-   gdk_threads_leave ();
- 
-   NSA_SET_PTR (env, obj, list ? list->data : NULL);
- }
- 
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate
!   (JNIEnv *env, jobject obj, jobject group, jboolean state)
  {
    GtkWidget *button;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
--- 42,53 ----
  
  static void item_toggled (GtkToggleButton *item, jobject peer);
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_create
!   (JNIEnv *env, jobject obj, jobject group)
  {
    GtkWidget *button;
  
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
*************** Java_gnu_java_awt_peer_gtk_GtkCheckboxPe
*** 100,106 ****
  	  NSA_SET_PTR (env, group, button);
  	}
      }
-   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), state);
  
    gdk_threads_leave ();
  
--- 65,70 ----
*************** Java_gnu_java_awt_peer_gtk_GtkCheckboxPe
*** 164,174 ****
      NSA_SET_PTR (env, group, native_group);
  }
  
  static void
  item_toggled (GtkToggleButton *item, jobject peer)
  {
!   //g_print ("toggled\n");
!   (*gdk_env)->CallVoidMethod (gdk_env, peer,
  			      postItemEventID,
  			      peer,
  			      item->active ?
--- 128,214 ----
      NSA_SET_PTR (env, group, native_group);
  }
  
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkToggleButtonSetActive
+   (JNIEnv *env, jobject obj, jboolean is_active)
+ {
+   void *ptr;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+ 
+   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptr), is_active);
+ 
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkWidgetModifyFont
+   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
+ {
+   const char *font_name;
+   void *ptr;
+   GtkWidget *button;
+   GtkWidget *label;
+   PangoFontDescription *font_desc;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   button = GTK_WIDGET (ptr);
+   label = gtk_bin_get_child (GTK_BIN(button));
+ 
+   if (!label)
+       return;
+ 
+   font_name = (*env)->GetStringUTFChars (env, name, NULL);
+ 
+   gdk_threads_enter();
+ 
+   font_desc = pango_font_description_from_string (font_name);
+   pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+ 
+   if (style & AWT_STYLE_BOLD)
+     pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
+ 
+   if (style & AWT_STYLE_ITALIC)
+     pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
+   
+   gtk_widget_modify_font (GTK_WIDGET(label), font_desc);
+   
+   pango_font_description_free (font_desc);
+   
+   gdk_threads_leave();
+   
+   (*env)->ReleaseStringUTFChars (env, name, font_name);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkButtonSetLabel
+   (JNIEnv *env, jobject obj, jstring label)
+ {
+   const char *c_label;
+   GtkWidget *label_widget;
+   void *ptr;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   c_label = (*env)->GetStringUTFChars (env, label, NULL);
+ 
+   gdk_threads_enter ();
+ 
+   label_widget = gtk_bin_get_child (GTK_BIN (ptr));
+   gtk_label_set_text (GTK_LABEL (label_widget), c_label);
+ 
+   gdk_threads_leave ();
+ 
+   (*env)->ReleaseStringUTFChars (env, label, c_label);
+ }
+ 
  static void
  item_toggled (GtkToggleButton *item, jobject peer)
  {
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  			      postItemEventID,
  			      peer,
  			      item->active ?
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c	Mon Jan  5 21:18:06 2004
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c	Wed Feb 16 20:03:22 2005
*************** exception statement from your version. *
*** 39,76 ****
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkChoicePeer.h"
  
! static void connect_choice_item_selectable_hook (JNIEnv *env, 
! 						 jobject peer_obj, 
! 						 GtkItem *menuitem, 
! 						 const char *label);
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create 
    (JNIEnv *env, jobject obj)
  {
!   GtkWidget *menu;
!   GtkOptionMenu *option_menu;
!   GtkRequisition child_requisition;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
    
!   option_menu = GTK_OPTION_MENU (gtk_option_menu_new ());
!   menu = gtk_menu_new ();
!   gtk_widget_show (menu);
! 
!   gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu);
  
!   gtk_widget_size_request (gtk_menu_item_new_with_label (""), 
! 			   &child_requisition);
!   option_menu->width = child_requisition.width;
!   option_menu->height = child_requisition.height;
  
    gdk_threads_leave ();
  
!   NSA_SET_PTR (env, obj, option_menu);
  }
  
  JNIEXPORT void JNICALL 
--- 39,66 ----
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkChoicePeer.h"
  
! static void selection_changed (GtkComboBox *combobox, jobject peer);
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create 
    (JNIEnv *env, jobject obj)
  {
!   GtkWidget *combobox;
!   jobject *gref;
  
    NSA_SET_GLOBAL_REF (env, obj);
+   gref = NSA_GET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
    
!   combobox = gtk_combo_box_new_text ();
  
!   g_signal_connect (combobox, "changed",
!                     G_CALLBACK (selection_changed), *gref);
  
    gdk_threads_leave ();
  
!   NSA_SET_PTR (env, obj, combobox);
  }
  
  JNIEXPORT void JNICALL 
*************** Java_gnu_java_awt_peer_gtk_GtkChoicePeer
*** 78,122 ****
    (JNIEnv *env, jobject obj, jobjectArray items)
  {
    gpointer ptr;
-   GtkMenu *menu;
    jsize count, i;
-   int need_set_history = 0;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
  
-   menu = GTK_MENU (gtk_option_menu_get_menu (GTK_OPTION_MENU (ptr)));
- 
-   /* Are we adding the first element? */
-   if (gtk_option_menu_get_history (GTK_OPTION_MENU (ptr)) < 0)
-       need_set_history = 1;
- 
    count = (*env)->GetArrayLength (env, items);
  
    for (i = 0; i < count; i++) 
      {
        jobject item;
        const char *label;
-       GtkWidget *menuitem;
  
        item = (*env)->GetObjectArrayElement (env, items, i);
        label = (*env)->GetStringUTFChars (env, item, NULL);
  
!       menuitem = gtk_menu_item_new_with_label (label);
!       gtk_menu_append (menu, menuitem);
!       gtk_widget_show (menuitem);
! 
!       connect_choice_item_selectable_hook (env, obj, 
! 					   GTK_ITEM (menuitem), label);
  
        (*env)->ReleaseStringUTFChars (env, item, label);
      }
  
-   /* If we just added the first element select it. */  
-   if (need_set_history)
-     gtk_option_menu_set_history (GTK_OPTION_MENU (ptr), 0);
- 
    gdk_threads_leave ();
  }
  
--- 68,94 ----
    (JNIEnv *env, jobject obj, jobjectArray items)
  {
    gpointer ptr;
    jsize count, i;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
  
    count = (*env)->GetArrayLength (env, items);
  
    for (i = 0; i < count; i++) 
      {
        jobject item;
        const char *label;
  
        item = (*env)->GetObjectArrayElement (env, items, i);
        label = (*env)->GetStringUTFChars (env, item, NULL);
  
!       gtk_combo_box_append_text (GTK_COMBO_BOX (ptr), label);
  
        (*env)->ReleaseStringUTFChars (env, item, label);
      }
  
    gdk_threads_leave ();
  }
  
*************** Java_gnu_java_awt_peer_gtk_GtkChoicePeer
*** 126,161 ****
  {
    void *ptr;
    const char *label;
-   GtkWidget *menu, *menuitem;
-   int current;
-   int need_set_history = 0;
  
    ptr = NSA_GET_PTR (env, obj);
    
    label = (*env)->GetStringUTFChars (env, item, 0);      
  
    gdk_threads_enter ();
!   
!   current = gtk_option_menu_get_history (GTK_OPTION_MENU (ptr));
! 
!   /* Are we adding the first element or below or at the currently
!      selected one? */
!   if ((current < 0) || (current >= index))
!       need_set_history = 1;
! 
!   menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (ptr));
!   menuitem = gtk_menu_item_new_with_label (label);
!   gtk_menu_insert (GTK_MENU (menu), menuitem, index);
!   gtk_widget_show (menuitem);
! 
!   connect_choice_item_selectable_hook (env, obj, GTK_ITEM (menuitem), label);
! 
!   /* If we just added the first element select it.
!      If we added at of below the currently selected position make
!      the first item the selected one. */  
!   if (need_set_history)
!     gtk_option_menu_set_history (GTK_OPTION_MENU (ptr), 0);
! 
    gdk_threads_leave ();
  
    (*env)->ReleaseStringUTFChars (env, item, label);
--- 98,110 ----
  {
    void *ptr;
    const char *label;
  
    ptr = NSA_GET_PTR (env, obj);
    
    label = (*env)->GetStringUTFChars (env, item, 0);      
  
    gdk_threads_enter ();
!   gtk_combo_box_insert_text (GTK_COMBO_BOX (ptr), index, label);
    gdk_threads_leave ();
  
    (*env)->ReleaseStringUTFChars (env, item, label);
*************** Java_gnu_java_awt_peer_gtk_GtkChoicePeer
*** 166,215 ****
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
-   GtkContainer *menu;
-   GtkWidget *menuitem;
-   GList *children;
-   int need_set_history = 0;
-   int i, from, to;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
  
!   menu = GTK_CONTAINER (gtk_option_menu_get_menu (GTK_OPTION_MENU (ptr)));
!   children = gtk_container_children (menu);
  
!   if (index == -1)
!     {
!       /* Remove all elements (removeAll) */
!       from = g_list_length (children) - 1;
!       to = 0;
  
!       /* Select the first item to prevent spurious activate signals */
!       gtk_option_menu_set_history (GTK_OPTION_MENU (ptr), 0);
!     }
!   else
!     {
!       /* Remove the specific index element */
!       from = index;
!       to = index;
  
!       /* Are we removing the currently selected element? */
!       if (gtk_option_menu_get_history (GTK_OPTION_MENU (ptr)) == index)
!         need_set_history = 1;
!     }
  
!   for (i = from; i >= to; i--)
!     {
!       menuitem = GTK_WIDGET (g_list_nth (children, i)->data);
!       gtk_container_remove (menu, menuitem);
!       gtk_widget_destroy (menuitem);
!     }
  
!   /* If we just removed the currently selected element and there are
!      still elements left in the list, make the first item the selected one. */  
!   if (need_set_history && gtk_container_children (menu))
!     gtk_option_menu_set_history (GTK_OPTION_MENU (ptr), 0);
  
    gdk_threads_leave ();
  }
--- 115,149 ----
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
+   gtk_combo_box_remove_text (GTK_COMBO_BOX (ptr), index);
+   gdk_threads_leave ();
+ }
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemoveAll 
!   (JNIEnv *env, jobject obj)
! {
!   void *ptr;
!   GtkTreeModel *model;
!   gint count, i;
  
!   ptr = NSA_GET_PTR (env, obj);
  
!   gdk_threads_enter ();
  
!   model = gtk_combo_box_get_model (GTK_COMBO_BOX (ptr));
!   count = gtk_tree_model_iter_n_children (model, NULL);
  
!   /* First, unselect everything, to avoid problems when removing items. */
!   gtk_combo_box_set_active (GTK_COMBO_BOX (ptr), -1);
  
!   for (i = count - 1; i >= 0; i--) {
!     gtk_combo_box_remove_text (GTK_COMBO_BOX (ptr), i);
!   }
  
    gdk_threads_leave ();
  }
*************** Java_gnu_java_awt_peer_gtk_GtkChoicePeer
*** 223,234 ****
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
!   gtk_option_menu_set_history (GTK_OPTION_MENU (ptr), index);
    gdk_threads_leave ();
  }
  
  JNIEXPORT jint JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkChoicePeer_getHistory 
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
--- 157,168 ----
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
!   gtk_combo_box_set_active (GTK_COMBO_BOX (ptr), index);
    gdk_threads_leave ();
  }
  
  JNIEXPORT jint JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeGetSelected 
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
*************** Java_gnu_java_awt_peer_gtk_GtkChoicePeer
*** 237,293 ****
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
! 
!   index = gtk_option_menu_get_history (GTK_OPTION_MENU (ptr));
! 
    gdk_threads_leave ();
  
    return index;
  }
  
! static void
! item_activate (GtkItem *item __attribute__((unused)),
! 	       struct item_event_hook_info *ie)
! {
!   gdk_threads_leave ();
! 
!   jstring label = (*gdk_env)->NewStringUTF (gdk_env, ie->label);
!   (*gdk_env)->CallVoidMethod (gdk_env, ie->peer_obj,
! 			      choicePostItemEventID,
! 			      label,
! 			      (jint) AWT_ITEM_SELECTED);
!   gdk_threads_enter ();
! }
! 
! static void
! item_removed (gpointer data, 
! 	      GClosure gc __attribute__((unused)))
  {
!   struct item_event_hook_info *ie = data;
  
!   free ((void *) ie->label);
!   free (ie);
! }
  
! static void
! connect_choice_item_selectable_hook (JNIEnv *env, 
! 				     jobject peer_obj, 
! 				     GtkItem *menuitem, 
! 				     const char *label)
! {
!   struct item_event_hook_info *ie;
!   jobject *peer_objGlobPtr;
  
!   ie = (struct item_event_hook_info *) 
!     malloc (sizeof (struct item_event_hook_info));
  
!   peer_objGlobPtr = NSA_GET_GLOBAL_REF (env, peer_obj);
!   g_assert (peer_objGlobPtr);
  
!   ie->peer_obj = *peer_objGlobPtr;
!   ie->label = strdup (label);
  
!   g_signal_connect_data (G_OBJECT (menuitem), "activate", 
! 		      GTK_SIGNAL_FUNC (item_activate), ie,
! 		      (GClosureNotify) item_removed, 0);
  }
--- 171,207 ----
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
!   index = gtk_combo_box_get_active (GTK_COMBO_BOX (ptr));
    gdk_threads_leave ();
  
    return index;
  }
  
! static void selection_changed (GtkComboBox *combobox, jobject peer)
  {
!   jstring label;
!   GtkTreeModel *model;
!   GtkTreeIter iter;
!   gchar *selected;
!   gint index;
  
!   index = gtk_combo_box_get_active(combobox);
  
!   if (index >= 0)
!     {
!       model = gtk_combo_box_get_model (combobox);
  
!       gtk_combo_box_get_active_iter (combobox, &iter);
  
!       gtk_tree_model_get (model, &iter, 0, &selected, -1);
  
!       gdk_threads_leave ();
  
!       label = (*gdk_env())->NewStringUTF (gdk_env(), selected);
!       (*gdk_env())->CallVoidMethod (gdk_env(), peer,
! 			          choicePostItemEventID,
! 			          label,
! 			          (jint) AWT_ITEM_SELECTED);
!       gdk_threads_enter ();
!     }
  }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c	Thu Dec 11 13:50:51 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c	Wed Feb 16 20:03:22 2005
*************** selection_received (GtkWidget *widget __
*** 110,124 ****
    if (selection_data->length < 0
        || selection_data->type != GDK_SELECTION_TYPE_STRING)
      {
!       (*gdk_env)->CallVoidMethod (gdk_env, cb_obj, stringSelectionReceivedID,
! 				  NULL);
      }
    else
      {
        char *str = (char *) selection_data->data;
        
!       (*gdk_env)->CallVoidMethod (gdk_env, cb_obj, stringSelectionReceivedID,
! 				  (*gdk_env)->NewStringUTF (gdk_env, str));
      }
  
    return;
--- 110,124 ----
    if (selection_data->length < 0
        || selection_data->type != GDK_SELECTION_TYPE_STRING)
      {
!       (*gdk_env())->CallVoidMethod (gdk_env(), cb_obj, stringSelectionReceivedID,
! 				    NULL);
      }
    else
      {
        char *str = (char *) selection_data->data;
        
!       (*gdk_env())->CallVoidMethod (gdk_env(), cb_obj, stringSelectionReceivedID,
! 				    (*gdk_env())->NewStringUTF (gdk_env(), str));
      }
  
    return;
*************** selection_get (GtkWidget *widget __attri
*** 135,141 ****
    const char *utf;
    jsize utflen;
  
!   jstr = (*gdk_env)->CallObjectMethod (gdk_env, cb_obj, 
  				       stringSelectionHandlerID);
  
    if (!jstr)
--- 135,141 ----
    const char *utf;
    jsize utflen;
  
!   jstr = (*gdk_env())->CallObjectMethod (gdk_env(), cb_obj, 
  				       stringSelectionHandlerID);
  
    if (!jstr)
*************** selection_get (GtkWidget *widget __attri
*** 145,157 ****
        return;
      }
  
!   utflen = (*gdk_env)->GetStringUTFLength (gdk_env, jstr);
!   utf = (*gdk_env)->GetStringUTFChars (gdk_env, jstr, NULL);
  
!   gtk_selection_data_set (selection_data, GDK_TARGET_STRING, 8, 
! 			  (char *)utf, utflen);
  
!   (*gdk_env)->ReleaseStringUTFChars (gdk_env, jstr, utf);
  }
  
  JNIEXPORT void JNICALL
--- 145,157 ----
        return;
      }
  
!   utflen = (*gdk_env())->GetStringUTFLength (gdk_env(), jstr);
!   utf = (*gdk_env())->GetStringUTFChars (gdk_env(), jstr, NULL);
  
!   gtk_selection_data_set (selection_data, GDK_TARGET_STRING, 8,
! 			  (const unsigned char*)utf, utflen);
  
!   (*gdk_env())->ReleaseStringUTFChars (gdk_env(), jstr, utf);
  }
  
  JNIEXPORT void JNICALL
*************** gint
*** 177,183 ****
  selection_clear (GtkWidget *widget __attribute__((unused)),
  		 GdkEventSelection *event __attribute__((unused)))
  {
!   (*gdk_env)->CallVoidMethod (gdk_env, cb_obj, selectionClearID);
  
    return TRUE;
  }
--- 177,183 ----
  selection_clear (GtkWidget *widget __attribute__((unused)),
  		 GdkEventSelection *event __attribute__((unused)))
  {
!   (*gdk_env())->CallVoidMethod (gdk_env(), cb_obj, selectionClearID);
  
    return TRUE;
  }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c	Mon Jan  5 21:13:46 2004
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c	Wed Feb 16 20:03:23 2005
***************
*** 1,5 ****
  /* gtkcomponentpeer.c -- Native implementation of GtkComponentPeer
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtkcomponentpeer.c -- Native implementation of GtkComponentPeer
!    Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,66 ****
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include <gtk/gtkprivate.h>
  
  static GtkWidget *find_fg_color_widget (GtkWidget *widget);
  static GtkWidget *find_bg_color_widget (GtkWidget *widget);
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose
!   (JNIEnv *env, jobject obj)
  {
!   void *ptr;
! 
!   /* Remove entries from state tables */
!   NSA_DEL_GLOBAL_REF (env, obj);
!   ptr = NSA_DEL_PTR (env, obj);
  
!   gdk_threads_enter ();
!   
!   /* For now the native state for any object must be a widget.
!      However, a subclass could override dispose() if required.  */
!   gtk_widget_destroy (GTK_WIDGET (ptr));
  
!   gdk_threads_leave ();
  }
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor 
    (JNIEnv *env, jobject obj, jint type) 
--- 39,411 ----
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include <gtk/gtkprivate.h>
+ #include <gdk/gdkkeysyms.h>
  
  static GtkWidget *find_fg_color_widget (GtkWidget *widget);
  static GtkWidget *find_bg_color_widget (GtkWidget *widget);
+ static gboolean focus_in_cb (GtkWidget *widget,
+                              GdkEventFocus *event,
+                              jobject peer);
+ static gboolean focus_out_cb (GtkWidget *widget,
+                               GdkEventFocus *event,
+                               jobject peer);
  
! /*
!  * This method returns a GDK keyval that corresponds to one of the
!  * keysyms in the X keymap table.  The return value is only used to
!  * determine the keyval's corresponding hardware keycode, and doesn't
!  * reflect an accurate translation of a Java virtual key value to a
!  * GDK keyval.
!  */
! #ifdef __GNUC__
! __inline
! #endif
! guint
! awt_keycode_to_keysym (jint keyCode, jint keyLocation)
  {
!   /* GDK_A through GDK_Z */
!   if (keyCode >= VK_A && keyCode <= VK_Z)
!     return gdk_keyval_to_lower (keyCode);
  
!   /* GDK_0 through GDK_9 */
!   if (keyCode >= VK_0 && keyCode <= VK_9)
!     return keyCode;
  
!   switch (keyCode)
!     {
!     case VK_ENTER:
!       return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Enter : GDK_Return;
!     case VK_BACK_SPACE:
!       return GDK_BackSpace;
!     case VK_TAB:
!       return GDK_Tab;
!     case VK_CANCEL:
!       return GDK_Cancel;
!     case VK_CLEAR:
!       return GDK_Clear;
!     case VK_SHIFT:
!       return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Shift_L : GDK_Shift_R;
!     case VK_CONTROL:
!       return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Control_L : GDK_Control_R;
!     case VK_ALT:
!       return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Alt_L : GDK_Alt_R;
!     case VK_PAUSE:
!       return GDK_Pause;
!     case VK_CAPS_LOCK:
!       return GDK_Caps_Lock;
!     case VK_ESCAPE:
!       return GDK_Escape;
!     case VK_SPACE:
!       return GDK_space;
!     case VK_PAGE_UP:
!       return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Page_Up : GDK_Page_Up;
!     case VK_PAGE_DOWN:
!       return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Page_Down : GDK_Page_Down;
!     case VK_END:
!       return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_End : GDK_End;
!     case VK_HOME:
!       return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Home : GDK_Home;
!     case VK_LEFT:
!       return GDK_Left;
!     case VK_UP:
!       return GDK_Up;
!     case VK_RIGHT:
!       return GDK_Right;
!     case VK_DOWN:
!       return GDK_Down;
!     case VK_COMMA:
!       return GDK_comma;
!     case VK_MINUS:
!       return GDK_minus;
!     case VK_PERIOD:
!       return GDK_period;
!     case VK_SLASH:
!       return GDK_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:
!       return GDK_semicolon;
!     case VK_EQUALS:
!       return GDK_equal;
!       /*
!     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:
!       return GDK_bracketleft;
!     case VK_BACK_SLASH:
!       return GDK_backslash;
!     case VK_CLOSE_BRACKET:
!       return GDK_bracketright;
!     case VK_NUMPAD0:
!       return GDK_KP_0;
!     case VK_NUMPAD1:
!       return GDK_KP_1;
!     case VK_NUMPAD2:
!       return GDK_KP_2;
!     case VK_NUMPAD3:
!       return GDK_KP_3;
!     case VK_NUMPAD4:
!       return GDK_KP_4;
!     case VK_NUMPAD5:
!       return GDK_KP_5;
!     case VK_NUMPAD6:
!       return GDK_KP_6;
!     case VK_NUMPAD7:
!       return GDK_KP_7;
!     case VK_NUMPAD8:
!       return GDK_KP_8;
!     case VK_NUMPAD9:
!       return GDK_KP_9;
!     case VK_MULTIPLY:
!       return GDK_KP_Multiply;
!     case VK_ADD:
!       return GDK_KP_Add;
!       /*
!     case VK_SEPARATER:
!       */
!     case VK_SEPARATOR:
!       return GDK_KP_Separator;
!     case VK_SUBTRACT:
!       return GDK_KP_Subtract;
!     case VK_DECIMAL:
!       return GDK_KP_Decimal;
!     case VK_DIVIDE:
!       return GDK_KP_Divide;
!     case VK_DELETE:
!       return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Delete : GDK_Delete;
!     case VK_NUM_LOCK:
!       return GDK_Num_Lock;
!     case VK_SCROLL_LOCK:
!       return GDK_Scroll_Lock;
!     case VK_F1:
!       return GDK_F1;
!     case VK_F2:
!       return GDK_F2;
!     case VK_F3:
!       return GDK_F3;
!     case VK_F4:
!       return GDK_F4;
!     case VK_F5:
!       return GDK_F5;
!     case VK_F6:
!       return GDK_F6;
!     case VK_F7:
!       return GDK_F7;
!     case VK_F8:
!       return GDK_F8;
!     case VK_F9:
!       return GDK_F9;
!     case VK_F10:
!       return GDK_F10;
!     case VK_F11:
!       return GDK_F11;
!     case VK_F12:
!       return GDK_F12;
!     case VK_F13:
!       return GDK_F13;
!     case VK_F14:
!       return GDK_F14;
!     case VK_F15:
!       return GDK_F15;
!     case VK_F16:
!       return GDK_F16;
!     case VK_F17:
!       return GDK_F17;
!     case VK_F18:
!       return GDK_F18;
!     case VK_F19:
!       return GDK_F19;
!     case VK_F20:
!       return GDK_F20;
!     case VK_F21:
!       return GDK_F21;
!     case VK_F22:
!       return GDK_F22;
!     case VK_F23:
!       return GDK_F23;
!     case VK_F24:
!       return GDK_F24;
!     case VK_PRINTSCREEN:
!       return GDK_Print;
!     case VK_INSERT:
!       return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Insert : GDK_Insert;
!     case VK_HELP:
!       return GDK_Help;
!     case VK_META:
!       return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Meta_L : GDK_Meta_R;
!     case VK_BACK_QUOTE:
!       return GDK_grave;
!     case VK_QUOTE:
!       return GDK_apostrophe;
!     case VK_KP_UP:
!       return GDK_KP_Up;
!     case VK_KP_DOWN:
!       return GDK_KP_Down;
!     case VK_KP_LEFT:
!       return GDK_KP_Left;
!     case VK_KP_RIGHT:
!       return GDK_KP_Right;
!     case VK_DEAD_GRAVE:
!       return GDK_dead_grave;
!     case VK_DEAD_ACUTE:
!       return GDK_dead_acute;
!     case VK_DEAD_CIRCUMFLEX:
!       return GDK_dead_circumflex;
!     case VK_DEAD_TILDE:
!       return GDK_dead_tilde;
!     case VK_DEAD_MACRON:
!       return GDK_dead_macron;
!     case VK_DEAD_BREVE:
!       return GDK_dead_breve;
!     case VK_DEAD_ABOVEDOT:
!       return GDK_dead_abovedot;
!     case VK_DEAD_DIAERESIS:
!       return GDK_dead_diaeresis;
!     case VK_DEAD_ABOVERING:
!       return GDK_dead_abovering;
!     case VK_DEAD_DOUBLEACUTE:
!       return GDK_dead_doubleacute;
!     case VK_DEAD_CARON:
!       return GDK_dead_caron;
!     case VK_DEAD_CEDILLA:
!       return GDK_dead_cedilla;
!     case VK_DEAD_OGONEK:
!       return GDK_dead_ogonek;
!     case VK_DEAD_IOTA:
!       return GDK_dead_iota;
!     case VK_DEAD_VOICED_SOUND:
!       return GDK_dead_voiced_sound;
!     case VK_DEAD_SEMIVOICED_SOUND:
!       return GDK_dead_semivoiced_sound;
!     case VK_AMPERSAND:
!       return GDK_ampersand;
!     case VK_ASTERISK:
!       return GDK_asterisk;
!     case VK_QUOTEDBL:
!       return GDK_quotedbl;
!     case VK_LESS:
!       return GDK_less;
!     case VK_GREATER:
!       return GDK_greater;
!     case VK_BRACELEFT:
!       return GDK_braceleft;
!     case VK_BRACERIGHT:
!       return GDK_braceright;
!     case VK_AT:
!       return GDK_at;
!     case VK_COLON:
!       return GDK_colon;
!     case VK_CIRCUMFLEX:
!       return GDK_asciicircum;
!     case VK_DOLLAR:
!       return GDK_dollar;
!     case VK_EURO_SIGN:
!       return GDK_EuroSign;
!     case VK_EXCLAMATION_MARK:
!       return GDK_exclam;
!     case VK_INVERTED_EXCLAMATION_MARK:
!       return GDK_exclamdown;
!     case VK_LEFT_PARENTHESIS:
!       return GDK_parenleft;
!     case VK_NUMBER_SIGN:
!       return GDK_numbersign;
!     case VK_PLUS:
!       return GDK_plus;
!     case VK_RIGHT_PARENTHESIS:
!       return GDK_parenright;
!     case VK_UNDERSCORE:
!       return GDK_underscore;
!       /*
!     case VK_FINAL:
!     case VK_CONVERT:
!     case VK_NONCONVERT:
!     case VK_ACCEPT:
!       */
!     case VK_MODECHANGE:
!       return GDK_Mode_switch;
!       /*
!     case VK_KANA:
!       */
!     case VK_KANJI:
!       return GDK_Kanji;
!       /*
!     case VK_ALPHANUMERIC:
!       */
!     case VK_KATAKANA:
!       return GDK_Katakana;
!     case VK_HIRAGANA:
!       return GDK_Hiragana;
!       /*
!     case VK_FULL_WIDTH:
!     case VK_HALF_WIDTH:
!     case VK_ROMAN_CHARACTERS:
!     case VK_ALL_CANDIDATES:
!       */
!     case VK_PREVIOUS_CANDIDATE:
!       return GDK_PreviousCandidate;
!     case VK_CODE_INPUT:
!       return GDK_Codeinput;
!       /*
!     case VK_JAPANESE_KATAKANA:
!     case VK_JAPANESE_HIRAGANA:
!     case VK_JAPANESE_ROMAN:
!       */
!     case VK_KANA_LOCK:
!       return GDK_Kana_Lock;
!       /*
!     case VK_INPUT_METHOD_ON_OFF:
!     case VK_CUT:
!     case VK_COPY:
!     case VK_PASTE:
!     case VK_UNDO:
!     case VK_AGAIN:
!     case VK_FIND:
!     case VK_PROPS:
!     case VK_STOP:
!     case VK_COMPOSE:
!     case VK_ALT_GRAPH:
!       */
!     default:
!       return GDK_VoidSymbol;
!     }
  }
  
+ 
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor 
    (JNIEnv *env, jobject obj, jint type) 
*************** Java_gnu_java_awt_peer_gtk_GtkComponentP
*** 128,134 ****
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_requestFocus
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
--- 473,543 ----
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetParent
!   (JNIEnv *env, jobject obj, jobject parent)
! {
!   void *ptr;
!   void *parent_ptr;
!   GtkWidget *widget;
!   GtkWidget *parent_widget;
! 
!   ptr = NSA_GET_PTR (env, obj);
!   parent_ptr = NSA_GET_PTR (env, parent);
! 
!   gdk_threads_enter ();
! 
!   widget = GTK_WIDGET (ptr);
!   parent_widget = GTK_WIDGET (parent_ptr);
! 
!   if (widget->parent == NULL)
!     {
!       if (GTK_IS_WINDOW (parent_widget))
!         {
!           GList *children = gtk_container_children 
!             (GTK_CONTAINER (parent_widget));
! 
!           if (GTK_IS_MENU_BAR (children->data))
!             gtk_fixed_put (GTK_FIXED (children->next->data), widget, 0, 0);
!           else
!             gtk_fixed_put (GTK_FIXED (children->data), widget, 0, 0);
!         }
!       else
!         if (GTK_IS_SCROLLED_WINDOW (parent_widget))
!           {
!             gtk_scrolled_window_add_with_viewport 
!               (GTK_SCROLLED_WINDOW (parent_widget), widget);
!             gtk_viewport_set_shadow_type (GTK_VIEWPORT (widget->parent), 
!                                           GTK_SHADOW_NONE);
! 
!           }
!         else
!           {
!             if (widget->parent == NULL)
!               gtk_fixed_put (GTK_FIXED (parent_widget), widget, 0, 0);
!           }
!     }
! 
!   gdk_threads_leave ();
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetSensitive
!   (JNIEnv *env, jobject obj, jboolean sensitive)
! {
!   void *ptr;
! 
!   ptr = NSA_GET_PTR (env, obj);
! 
!   gdk_threads_enter ();
! 
!   gtk_widget_set_sensitive (GTK_WIDGET (ptr), sensitive);
! 
!   gdk_threads_leave ();
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRequestFocus
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 141,146 ****
--- 550,675 ----
  }
  
  /*
+  * Translate a Java KeyEvent object into a GdkEventKey event, then
+  * pass it to the GTK main loop for processing.
+  */
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent
+   (JNIEnv *env, jobject obj, jint id, jlong when, jint mods,
+    jint keyCode, jint keyLocation)
+ {
+   void *ptr;
+   GdkEvent *event = NULL;
+   GdkKeymapKey *keymap_keys = NULL;
+   gint n_keys = 0;
+   guint lookup_keyval = 0;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+ 
+   if (id == AWT_KEY_PRESSED)
+     event = gdk_event_new (GDK_KEY_PRESS);
+   else if (id == AWT_KEY_RELEASED)
+     event = gdk_event_new (GDK_KEY_RELEASE);
+   else
+     {
+       gdk_threads_leave ();
+       /* Don't send AWT KEY_TYPED events to GTK. */
+       return;
+     }
+ 
+   if (GTK_IS_BUTTON (ptr))
+     event->key.window = GTK_BUTTON (ptr)->event_window;
+   else if (GTK_IS_SCROLLED_WINDOW (ptr))
+     event->key.window = GTK_WIDGET (GTK_SCROLLED_WINDOW (ptr)->container.child)->window;
+   else
+     event->key.window = GTK_WIDGET (ptr)->window;
+ 
+   event->key.send_event = 0;
+   event->key.time = (guint32) when;
+ 
+   if (mods & AWT_SHIFT_DOWN_MASK)
+     event->key.state |= GDK_SHIFT_MASK;
+   if (mods & AWT_CTRL_DOWN_MASK)
+     event->key.state |= GDK_CONTROL_MASK;
+   if (mods & AWT_ALT_DOWN_MASK)
+     event->key.state |= GDK_MOD1_MASK;
+ 
+   /* This hack is needed because the AWT has no notion of num lock.
+      It infers numlock state from the only Java virtual keys that are
+      affected by it. */
+   if (keyCode == VK_NUMPAD9
+       || keyCode == VK_NUMPAD8
+       || keyCode == VK_NUMPAD7
+       || keyCode == VK_NUMPAD6
+       || keyCode == VK_NUMPAD5
+       || keyCode == VK_NUMPAD4
+       || keyCode == VK_NUMPAD3
+       || keyCode == VK_NUMPAD2
+       || keyCode == VK_NUMPAD1
+       || keyCode == VK_NUMPAD0
+       || keyCode == VK_DECIMAL)
+     event->key.state |= GDK_MOD2_MASK;
+ 
+   /* These values don't need to be filled in since GTK doesn't use
+      them. */
+   event->key.length = 0;
+   event->key.string = NULL;
+ 
+   lookup_keyval = awt_keycode_to_keysym (keyCode, keyLocation);
+ 
+   if (!gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (),
+                                           lookup_keyval,
+                                           &keymap_keys,
+                                           &n_keys))
+     {
+       /* No matching keymap entry was found. */
+       g_printerr ("No matching keymap entries were found\n");
+       gdk_threads_leave ();
+       return;
+     }
+ 
+   /* Note: if n_keys > 1 then there are multiple hardware keycodes
+      that translate to lookup_keyval.  We arbitrarily choose the first
+      hardware keycode from the list returned by
+      gdk_keymap_get_entries_for_keyval. */
+ 
+   event->key.hardware_keycode = keymap_keys[0].keycode;
+   event->key.group =  keymap_keys[0].group;
+ 
+   g_free (keymap_keys);
+ 
+   if (!gdk_keymap_translate_keyboard_state (gdk_keymap_get_default (),
+                                             event->key.hardware_keycode,
+                                             event->key.state,
+                                             event->key.group,
+                                             &event->key.keyval,
+                                             NULL, NULL, NULL))
+     {
+       /* No matching keyval was found. */
+       g_printerr ("No matching keyval was found\n");
+       gdk_threads_leave ();
+       return;
+     }
+ 
+   /*  keyevent = (GdkEventKey *) event; */
+   /*  g_printerr ("generated event: sent: %d  time: %d  state: %d  keyval: %d  length: %d  string: %s  hardware_keycode: %d  group: %d\n", keyevent->send_event, keyevent->time, keyevent->state, keyevent->keyval, keyevent->length, keyevent->string, keyevent->hardware_keycode, keyevent->group); */
+ 
+   /* We already received the original key event on the window itself,
+      so we don't want to resend it. */
+   if (!GTK_IS_WINDOW (ptr))
+     {
+       if (GTK_IS_SCROLLED_WINDOW (ptr))
+         gtk_widget_event (GTK_WIDGET (GTK_SCROLLED_WINDOW (ptr)->container.child), event);
+       else
+         gtk_widget_event (GTK_WIDGET (ptr), event);
+     }
+ 
+   gdk_threads_leave ();
+ }
+ 
+ /*
   * Find the origin of a widget's window.
   */
  JNIEXPORT void JNICALL 
*************** Java_gnu_java_awt_peer_gtk_GtkComponentP
*** 215,253 ****
  
    gdk_threads_enter ();
  
!   /* Save the widget's current size request. */
!   gtk_widget_size_request (GTK_WIDGET (ptr), &current_req);
  
!   /* Get the widget's "natural" size request. */
!   gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
!   gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
  
!   /* Reset the widget's size request. */
!   gtk_widget_set_size_request (GTK_WIDGET (ptr),
! 			       current_req.width, current_req.height);
  
!   dims[0] = natural_req.width;
!   dims[1] = natural_req.height;
  
    gdk_threads_leave ();
  
    (*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
  }
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetUsize (JNIEnv *env, 
!     jobject obj, jint w, jint h)
! {
!   void *ptr;
! 
!   ptr = NSA_GET_PTR (env, obj);
!   
!   gdk_threads_enter ();
!   gtk_widget_set_usize (GTK_WIDGET (ptr), w, h);
!   gdk_threads_leave ();
! }
! 
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    GtkWidget *widget;
--- 744,784 ----
  
    gdk_threads_enter ();
  
!   /* Widgets that extend GtkWindow such as GtkFileChooserDialog may have
!      a default size.  These values seem more useful then the natural
!      requisition values, particularly for GtkFileChooserDialog. */
!   if (GTK_IS_WINDOW (ptr))
!     {
!       gint width, height;
!       gtk_window_get_default_size (GTK_WINDOW (ptr), &width, &height);
  
!       dims[0] = width;
!       dims[1] = height;
!     }
!   else
!     {
!       /* Save the widget's current size request. */
!       gtk_widget_size_request (GTK_WIDGET (ptr), &current_req);
  
!       /* Get the widget's "natural" size request. */
!       gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
!       gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
  
!       /* Reset the widget's size request. */
!       gtk_widget_set_size_request (GTK_WIDGET (ptr),
! 			           current_req.width, current_req.height);
! 
!       dims[0] = natural_req.width;
!       dims[1] = natural_req.height;
!     }
  
    gdk_threads_leave ();
  
    (*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds
    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
  {
    GtkWidget *widget;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 258,271 ****
    gdk_threads_enter ();
  
    widget = GTK_WIDGET (ptr);
    if (GTK_IS_VIEWPORT (widget->parent))
!     {
!       gtk_widget_set_usize (widget, width, height);
!     }
    else
      {
!       gtk_widget_set_usize (widget, width, height);
!       gtk_layout_move (GTK_LAYOUT (widget->parent), widget, x, y);
      }
  
    gdk_threads_leave ();
--- 789,810 ----
    gdk_threads_enter ();
  
    widget = GTK_WIDGET (ptr);
+ 
+   /* We assume that -1 is a width or height and not a request for the
+      widget's natural size. */
+   width = width < 0 ? 0 : width;
+   height = height < 0 ? 0 : height;
+ 
    if (GTK_IS_VIEWPORT (widget->parent))
!     gtk_widget_set_size_request (widget, width, height);
    else
      {
!       if (!(width == 0 && height == 0))
!         {
!           gtk_widget_set_size_request (widget, width, height);
!           if (widget->parent != NULL)
!             gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);
!         }
      }
  
    gdk_threads_leave ();
*************** Java_gnu_java_awt_peer_gtk_GtkComponentP
*** 380,448 ****
    gdk_threads_leave ();
  }
  
! void
! set_visible (GtkWidget *widget, jboolean visible)
! {
!   if (visible)
!     gtk_widget_show (widget);
!   else
!     gtk_widget_hide (widget);
! }
! 
! GtkLayout *
! find_gtk_layout (GtkWidget *parent)
  {
!   if (GTK_IS_WINDOW (parent))
!     {
!       GList *children = gtk_container_children 
! 	                  (GTK_CONTAINER (GTK_BIN (parent)->child));
  
!       if (GTK_IS_MENU_BAR (children->data))
! 	return GTK_LAYOUT (children->next->data);
!       else /* GTK_IS_LAYOUT (children->data) */
! 	return GTK_LAYOUT (children->data);
!     }
  
!   return NULL;
  }
  
! #define WIDGET_CLASS(w)  GTK_WIDGET_CLASS (GTK_OBJECT (w)->klass)
! 
! void
! set_parent (GtkWidget *widget, GtkContainer *parent)
  {
!   if (GTK_IS_WINDOW (parent))
!     {
!       GList *children = gtk_container_children 
! 	                  (GTK_CONTAINER (GTK_BIN (parent)->child));
! 
!       if (GTK_IS_MENU_BAR (children->data))
! 	gtk_layout_put (GTK_LAYOUT (children->next->data), widget, 0, 0);
!       else /* GTK_IS_LAYOUT (children->data) */
! 	gtk_layout_put (GTK_LAYOUT (children->data), widget, 0, 0);
!     }
!   else
!     if (GTK_IS_SCROLLED_WINDOW (parent))
!       {
! /*  	if (WIDGET_CLASS (widget)->set_scroll_adjustments_signal) */
! /*  	  gtk_container_add (GTK_CONTAINER (parent), widget); */
! /*  	else */
! /*  	  { */
! 	    gtk_scrolled_window_add_with_viewport 
! 	      (GTK_SCROLLED_WINDOW (parent), widget);
! 	    gtk_viewport_set_shadow_type (GTK_VIEWPORT (widget->parent), 
! 					  GTK_SHADOW_NONE);
! /*  	  } */
  
!       }
! /*        gtk_layout_put  */
! /*  	(GTK_LAYOUT (GTK_BIN (parent)->child), widget, 0, 0); */
  
! /*      if (GTK_IS_SCROLLED_WINDOW (parent)) */
! /*        gtk_layout_put  */
! /*  	(GTK_LAYOUT (GTK_BIN (GTK_BIN (parent)->child)->child), widget, 0, 0); */
!     else
!       gtk_layout_put (GTK_LAYOUT (parent), widget, 0, 0);
  }
  
  JNIEXPORT jboolean JNICALL 
--- 919,948 ----
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_show
!   (JNIEnv *env, jobject obj)
  {
!   void *ptr;
  
!   ptr = NSA_GET_PTR (env, obj);
  
!   gdk_threads_enter();
!   gtk_widget_show (GTK_WIDGET (ptr));
!   gdk_threads_leave();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_hide
!   (JNIEnv *env, jobject obj)
  {
!   void *ptr;
  
!   ptr = NSA_GET_PTR (env, obj);
  
!   gdk_threads_enter();
!   gtk_widget_hide (GTK_WIDGET (ptr));
!   gdk_threads_leave();
  }
  
  JNIEXPORT jboolean JNICALL 
*************** Java_gnu_java_awt_peer_gtk_GtkComponentP
*** 462,617 ****
  }
  
  JNIEXPORT jboolean JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_modalHasGrab
!   (JNIEnv *env __attribute__((unused)), jclass clazz __attribute__((unused)))
! {
!   GtkWidget *widget;
!   jboolean retval;
! 
!   gdk_threads_enter ();
!   widget = gtk_grab_get_current ();
!   retval = (widget && GTK_IS_WINDOW (widget) && GTK_WINDOW (widget)->modal);
!   gdk_threads_leave ();
! 
!   return retval;
! }
! 
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_String_2
!   (JNIEnv *env, jobject obj, jstring jname, jstring jvalue)
! {
!   const char *name;
!   const char *value;
!   void *ptr;
! 
!   ptr = NSA_GET_PTR (env, obj);
!   name = (*env)->GetStringUTFChars (env, jname, NULL);
!   value = (*env)->GetStringUTFChars (env, jvalue, NULL);
! 
!   gdk_threads_enter();
!   g_object_set(ptr, name, value, NULL);
!   gdk_threads_leave();
! 
!   (*env)->ReleaseStringUTFChars (env, jname, name);
!   (*env)->ReleaseStringUTFChars (env, jvalue, value);
! }
! 
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Z
!   (JNIEnv *env, jobject obj, jstring jname, jboolean value)
! {
!   const char *name;
!   void *ptr;
! 
!   ptr = NSA_GET_PTR (env, obj);
! 
!   name = (*env)->GetStringUTFChars (env, jname, NULL);
! 
!   gdk_threads_enter();
!   g_object_set(ptr, name, value, NULL);
!   gdk_threads_leave();
! 
!   (*env)->ReleaseStringUTFChars (env, jname, name);
! }
! 
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2I
!   (JNIEnv *env, jobject obj, jstring jname, jint value)
  {
-   const char *name;
    void *ptr;
  
    ptr = NSA_GET_PTR (env, obj);
-   name = (*env)->GetStringUTFChars (env, jname, NULL);
- 
-   gdk_threads_enter();                          
-   g_object_set(ptr, name, value, NULL);
-   gdk_threads_leave();
- 
-   (*env)->ReleaseStringUTFChars (env, jname, name);
- }
- 
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2F
-   (JNIEnv *env, jobject obj, jstring jname, jfloat value)
- {
-   const char *name;
-   void *ptr;
  
!   ptr = NSA_GET_PTR (env, obj);
!   name = (*env)->GetStringUTFChars (env, jname, NULL);
  
!   gdk_threads_enter();                          
!   g_object_set(ptr, name, value, NULL);
!   gdk_threads_leave();
  
!   (*env)->ReleaseStringUTFChars (env, jname, name);
  }
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_Object_2
!   (JNIEnv *env, jobject obj1, jstring jname, jobject obj2)
  {
!   const char *name;
!   void *ptr1, *ptr2;
! 
!   ptr1 = NSA_GET_PTR (env, obj1);
!   ptr2 = NSA_GET_PTR (env, obj2);
!   
!   name = (*env)->GetStringUTFChars (env, jname, NULL);
! 
!   /* special case to catch where we need to set the parent */
!   if (!strcmp (name, "parent"))
!     {
!       gdk_threads_enter ();
!       set_parent (GTK_WIDGET (ptr1), GTK_CONTAINER (ptr2));
!       gdk_threads_leave ();
! 
!       (*env)->ReleaseStringUTFChars (env, jname, name);
!       return;
!     }
  
!   gdk_threads_enter();                          
!   g_object_set(ptr1, name, ptr2, NULL);
!   gdk_threads_leave();
  
!   (*env)->ReleaseStringUTFChars (env, jname, name);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
  
!   gtk_widget_realize (GTK_WIDGET (ptr));
! 
!   connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
! 
!   gdk_threads_leave ();
! }
! 
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals
!   (JNIEnv *env, jobject obj)
! {
!   void *ptr = NSA_GET_PTR (env, obj);
!   jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
!   g_assert (gref);
  
!   gdk_threads_enter ();
  
!   gtk_widget_realize (GTK_WIDGET (ptr));
!   
!   /* FIXME: We could check here if this is a scrolled window with a
!      single child that does not have an associated jobject.  This
!      means that it is one of our wrapped widgets like List or TextArea
!      and thus we could connect the signal to the child without having
!      to specialize this method. */
  
!   /* Connect EVENT signal, which happens _before_ any specific signal. */
  
!   g_signal_connect (GTK_OBJECT (ptr), "event", 
!                     G_CALLBACK (pre_event_handler), *gref);
  
    gdk_threads_leave ();
  }
--- 962,1025 ----
  }
  
  JNIEXPORT jboolean JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isRealized
!   (JNIEnv *env, jobject obj)
  {
    void *ptr;
+   jboolean ret_val;
  
    ptr = NSA_GET_PTR (env, obj);
  
!   if (ptr == NULL)
!     return FALSE;
  
!   gdk_threads_enter ();
!   ret_val = GTK_WIDGET_REALIZED (GTK_WIDGET (ptr));
!   gdk_threads_leave ();
  
!   return ret_val;
  }
  
! JNIEXPORT jboolean JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_modalHasGrab
!   (JNIEnv *env __attribute__((unused)), jclass clazz __attribute__((unused)))
  {
!   GtkWidget *widget;
!   jboolean retval;
  
!   gdk_threads_enter ();
!   widget = gtk_grab_get_current ();
!   retval = (widget && GTK_IS_WINDOW (widget) && GTK_WINDOW (widget)->modal);
!   gdk_threads_leave ();
  
!   return retval;
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
+   jobject *gref;
  
    ptr = NSA_GET_PTR (env, obj);
+   gref = NSA_GET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
  
!   /* Connect EVENT signal, which happens _before_ any specific signal. */
  
!   g_signal_connect (GTK_OBJECT (ptr), "event",
!                     G_CALLBACK (pre_event_handler), *gref);
  
!   g_signal_connect (G_OBJECT (ptr), "focus-in-event",
!                     G_CALLBACK (focus_in_cb), *gref);
  
!   g_signal_connect (G_OBJECT (ptr), "focus-out-event",
!                     G_CALLBACK (focus_out_cb), *gref);
  
!   g_signal_connect_after (G_OBJECT (ptr), "realize",
!                           G_CALLBACK (connect_awt_hook_cb), *gref);
  
    gdk_threads_leave ();
  }
*************** find_fg_color_widget (GtkWidget *widget)
*** 621,627 ****
  {
    GtkWidget *fg_color_widget;
  
!   if (GTK_IS_EVENT_BOX (widget))
      fg_color_widget = gtk_bin_get_child (GTK_BIN(widget));
    else
      fg_color_widget = widget;
--- 1029,1037 ----
  {
    GtkWidget *fg_color_widget;
  
!   if (GTK_IS_EVENT_BOX (widget)
!       || (GTK_IS_BUTTON (widget)
!           && !GTK_IS_OPTION_MENU (widget)))
      fg_color_widget = gtk_bin_get_child (GTK_BIN(widget));
    else
      fg_color_widget = widget;
*************** find_bg_color_widget (GtkWidget *widget)
*** 634,653 ****
  {
    GtkWidget *bg_color_widget;
  
!   if (GTK_IS_WINDOW (widget))
!     {
!       GtkWidget *vbox;
!       GList* children;
! 
!       children = gtk_container_get_children(GTK_CONTAINER(widget));
!       vbox = children->data;
! 
!       children = gtk_container_get_children(GTK_CONTAINER(vbox));
!       bg_color_widget = children->data;
!     }
!   else
!     bg_color_widget = widget;
  
    return bg_color_widget;
  }
  
--- 1044,1078 ----
  {
    GtkWidget *bg_color_widget;
  
!   bg_color_widget = widget;
  
    return bg_color_widget;
  }
  
+ static gboolean
+ focus_in_cb (GtkWidget *widget __attribute((unused)),
+              GdkEventFocus *event __attribute((unused)),
+              jobject peer)
+ {
+   gdk_threads_leave ();
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                               postFocusEventID,
+                               AWT_FOCUS_GAINED,
+                               JNI_FALSE);
+   gdk_threads_enter ();
+   return FALSE;
+ }
+ 
+ static gboolean
+ focus_out_cb (GtkWidget *widget __attribute((unused)),
+               GdkEventFocus *event __attribute((unused)),
+               jobject peer)
+ {
+   gdk_threads_leave ();
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                               postFocusEventID,
+                               AWT_FOCUS_LOST,
+                               JNI_FALSE);
+   gdk_threads_enter ();
+   return FALSE;
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c	Mon Jan  5 21:41:21 2004
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c	Tue Nov 30 23:59:12 2004
*************** Java_gnu_java_awt_peer_gtk_GtkEmbeddedWi
*** 45,66 ****
    (JNIEnv *env, jobject obj, jlong socket_id)
  {
    GtkWidget *window;
!   GtkWidget *vbox, *layout;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
  
    window = gtk_plug_new ((GdkNativeWindow) socket_id);
  
!   vbox = gtk_vbox_new (0, 0);
!   layout = gtk_layout_new (NULL, NULL);
!   gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0);
!   gtk_container_add (GTK_CONTAINER (window), vbox);
  
!   gtk_widget_show (layout);
!   gtk_widget_show (vbox);
  
    gdk_threads_leave ();
  
--- 45,62 ----
    (JNIEnv *env, jobject obj, jlong socket_id)
  {
    GtkWidget *window;
!   GtkWidget *fixed;
  
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
  
    window = gtk_plug_new ((GdkNativeWindow) socket_id);
  
!   fixed = gtk_fixed_new ();
!   gtk_container_add (GTK_CONTAINER (window), fixed);
  
!   gtk_widget_show (fixed);
  
    gdk_threads_leave ();
  
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c	Tue Jan 13 20:54:46 2004
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c	Tue Feb 22 04:50:29 2005
***************
*** 1,5 ****
  /* gtkevents.c -- GDK/GTK event handlers
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtkevents.c -- GDK/GTK event handlers
!    Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** state_to_awt_mods (guint state)
*** 74,84 ****
    jint result = 0;
  
    if (state & GDK_SHIFT_MASK)
!     result |= AWT_SHIFT_MASK;
    if (state & GDK_CONTROL_MASK)
!     result |= AWT_CTRL_MASK;
    if (state & GDK_MOD1_MASK)
!     result |= AWT_ALT_MASK;
  
    return result;
  }
--- 74,105 ----
    jint result = 0;
  
    if (state & GDK_SHIFT_MASK)
!     result |= AWT_SHIFT_DOWN_MASK;
    if (state & GDK_CONTROL_MASK)
!     result |= AWT_CTRL_DOWN_MASK;
    if (state & GDK_MOD1_MASK)
!     result |= AWT_ALT_DOWN_MASK;
! 
!   return result;
! }
! 
! static jint
! state_to_awt_mods_with_button_states (guint state)
! {
!   jint result = 0;
! 
!   if (state & GDK_SHIFT_MASK)
!     result |= AWT_SHIFT_DOWN_MASK;
!   if (state & GDK_CONTROL_MASK)
!     result |= AWT_CTRL_DOWN_MASK;
!   if (state & GDK_MOD1_MASK)
!     result |= AWT_ALT_DOWN_MASK;
!   if (state & GDK_BUTTON1_MASK)
!     result |= AWT_BUTTON1_DOWN_MASK;
!   if (state & GDK_BUTTON2_MASK)
!     result |= AWT_BUTTON2_DOWN_MASK;
!   if (state & GDK_BUTTON3_MASK)
!     result |= AWT_BUTTON3_DOWN_MASK;
  
    return result;
  }
*************** keyevent_state_to_awt_mods (GdkEvent *ev
*** 103,131 ****
  
        if (event->key.keyval == GDK_Shift_L
            || event->key.keyval == GDK_Shift_R)
!         result |= AWT_SHIFT_MASK;
        else
          {
            if (state & GDK_SHIFT_MASK)
!             result |= AWT_SHIFT_MASK;
          }
  
        if (event->key.keyval == GDK_Control_L
            || event->key.keyval == GDK_Control_R)
!         result |= AWT_CTRL_MASK;
        else
          {
            if (state & GDK_CONTROL_MASK)
!             result |= AWT_CTRL_MASK;
          }
  
        if (event->key.keyval == GDK_Alt_L
            || event->key.keyval == GDK_Alt_R)
!         result |= AWT_ALT_MASK;
        else
          {
            if (state & GDK_MOD1_MASK)
!             result |= AWT_ALT_MASK;
          }
      }
    else if (event->type == GDK_KEY_RELEASE)
--- 124,152 ----
  
        if (event->key.keyval == GDK_Shift_L
            || event->key.keyval == GDK_Shift_R)
!         result |= AWT_SHIFT_DOWN_MASK;
        else
          {
            if (state & GDK_SHIFT_MASK)
!             result |= AWT_SHIFT_DOWN_MASK;
          }
  
        if (event->key.keyval == GDK_Control_L
            || event->key.keyval == GDK_Control_R)
!         result |= AWT_CTRL_DOWN_MASK;
        else
          {
            if (state & GDK_CONTROL_MASK)
!             result |= AWT_CTRL_DOWN_MASK;
          }
  
        if (event->key.keyval == GDK_Alt_L
            || event->key.keyval == GDK_Alt_R)
!         result |= AWT_ALT_DOWN_MASK;
        else
          {
            if (state & GDK_MOD1_MASK)
!             result |= AWT_ALT_DOWN_MASK;
          }
      }
    else if (event->type == GDK_KEY_RELEASE)
*************** keyevent_state_to_awt_mods (GdkEvent *ev
*** 136,155 ****
            && event->key.keyval != GDK_Shift_R)
          {
            if (state & GDK_SHIFT_MASK)
!             result |= AWT_SHIFT_MASK;
          }
        if (event->key.keyval != GDK_Control_L
            && event->key.keyval != GDK_Control_R)
          {
            if (state & GDK_CONTROL_MASK)
!             result |= AWT_CTRL_MASK;
          }
  
        if (event->key.keyval != GDK_Alt_L
            && event->key.keyval != GDK_Alt_R)
          {
            if (state & GDK_MOD1_MASK)
!             result |= AWT_ALT_MASK;
          }
      }
  
--- 157,176 ----
            && event->key.keyval != GDK_Shift_R)
          {
            if (state & GDK_SHIFT_MASK)
!             result |= AWT_SHIFT_DOWN_MASK;
          }
        if (event->key.keyval != GDK_Control_L
            && event->key.keyval != GDK_Control_R)
          {
            if (state & GDK_CONTROL_MASK)
!             result |= AWT_CTRL_DOWN_MASK;
          }
  
        if (event->key.keyval != GDK_Alt_L
            && event->key.keyval != GDK_Alt_R)
          {
            if (state & GDK_MOD1_MASK)
!             result |= AWT_ALT_DOWN_MASK;
          }
      }
  
*************** keyevent_to_awt_keychar (GdkEvent *event
*** 785,815 ****
      }
  }
  
- /* Checks if keyval triggers a KEY_TYPED event on the source widget.
-    This function identifies special keyvals that don't trigger
-    GtkIMContext "commit" signals, but that do trigger Java KEY_TYPED
-    events. */
- static int
- generates_key_typed_event (GdkEvent *event, GtkWidget *source)
- {
-   guint keyval;
- 
-   if (!GTK_IS_ENTRY (source)
-       && !GTK_IS_TEXT_VIEW (source))
-     return event->key.length ? 1 : 0;
- 
-   keyval = event->key.keyval;
- 
-   return (keyval == GDK_Escape
-           || keyval == GDK_BackSpace
-           || keyval == GDK_Delete
-           || keyval == GDK_KP_Delete
-           || keyval == GDK_Return
-           || keyval == GDK_KP_Enter
-           || (keyval == GDK_Tab
-               && GTK_IS_TEXT_VIEW(source))) ? 1 : 0;
- }
- 
  void
  awt_event_handler (GdkEvent *event)
  {
--- 806,811 ----
*************** pre_event_handler (GtkWidget *widget, Gd
*** 830,843 ****
    static GdkWindow *button_window = NULL;
    static guint button_number = -1;
    static jint click_count = 1;
  
    /* If it is not a focus change event, the widget must be realized already.
       If not, ignore the event (Gtk+ will do the same). */
    if (!(event->type == GDK_FOCUS_CHANGE || GTK_WIDGET_REALIZED(widget)))
      return FALSE;
!     
    /* Do not handle propagated events.  AWT has its own propagation rules */
!   gdk_window_get_user_data (event->any.window, (void **) &event_widget);
    if (event_widget != widget)
      return FALSE;
  
--- 826,842 ----
    static GdkWindow *button_window = NULL;
    static guint button_number = -1;
    static jint click_count = 1;
+   static int hasBeenDragged;
+   union widget_union w;
  
    /* If it is not a focus change event, the widget must be realized already.
       If not, ignore the event (Gtk+ will do the same). */
    if (!(event->type == GDK_FOCUS_CHANGE || GTK_WIDGET_REALIZED(widget)))
      return FALSE;
! 
    /* Do not handle propagated events.  AWT has its own propagation rules */
!   w.widget = &event_widget;
!   gdk_window_get_user_data (event->any.window, w.void_widget);
    if (event_widget != widget)
      return FALSE;
  
*************** pre_event_handler (GtkWidget *widget, Gd
*** 884,993 ****
    switch (event->type)
      {
      case GDK_BUTTON_PRESS:
!       (*gdk_env)->CallVoidMethod (gdk_env, peer,
                                    postMouseEventID,
  				  AWT_MOUSE_PRESSED, 
  				  (jlong)event->button.time,
! 				  state_to_awt_mods (event->button.state) |
! 				  button_to_awt_mods (event->button.button), 
  				  (jint)event->button.x,
  				  (jint)event->button.y, 
  				  click_count, 
  				  (event->button.button == 3) ? JNI_TRUE :
  				                                JNI_FALSE);
        break;
      case GDK_BUTTON_RELEASE:
        {
  	int width, height;
  
! 	(*gdk_env)->CallVoidMethod (gdk_env, peer,
  				    postMouseEventID,
  				    AWT_MOUSE_RELEASED, 
  				    (jlong)event->button.time,
! 				    state_to_awt_mods (event->button.state) |
! 				    button_to_awt_mods (event->button.button), 
  				    (jint)event->button.x,
  				    (jint)event->button.y, 
  				    click_count,
  				    JNI_FALSE);
  
! 	/* check to see if the release occured in the window it was pressed
! 	   in, and if so, generate an AWT click event */
  	gdk_window_get_size (event->any.window, &width, &height);
! 	if (event->button.x >= 0
              && event->button.y >= 0
  	    && event->button.x <= width 
  	    && event->button.y <= height)
            {
! 	    (*gdk_env)->CallVoidMethod (gdk_env, peer,
  				        postMouseEventID,
  				        AWT_MOUSE_CLICKED, 
  				        (jlong)event->button.time,
! 				        state_to_awt_mods (event->button.state) |
! 				        button_to_awt_mods (event->button.button), 
  				        (jint)event->button.x,
  				        (jint)event->button.y, 
  				        click_count,
  				        JNI_FALSE);
            }
        }
        break;
      case GDK_MOTION_NOTIFY:
-       (*gdk_env)->CallVoidMethod (gdk_env, peer, postMouseEventID,
- 				  AWT_MOUSE_MOVED,
- 				  (jlong)event->motion.time,
- 				  state_to_awt_mods (event->motion.state),
- 				  (jint)event->motion.x,
- 				  (jint)event->motion.y,
- 				  0,
- 				  JNI_FALSE);
- 
        if (event->motion.state & (GDK_BUTTON1_MASK
  				 | GDK_BUTTON2_MASK
  				 | GDK_BUTTON3_MASK
  				 | GDK_BUTTON4_MASK
  				 | GDK_BUTTON5_MASK))
  	{
! 	  (*gdk_env)->CallVoidMethod (gdk_env, peer,
  			              postMouseEventID,
  				      AWT_MOUSE_DRAGGED,
  				      (jlong)event->motion.time,
! 				      state_to_awt_mods (event->motion.state),
  				      (jint)event->motion.x,
  				      (jint)event->motion.y,
  				      0,
  				      JNI_FALSE);
  	}
        break;
      case GDK_ENTER_NOTIFY:
!       (*gdk_env)->CallVoidMethod (gdk_env, peer, postMouseEventID,
! 				  AWT_MOUSE_ENTERED, 
! 				  (jlong)event->crossing.time,
! 				  state_to_awt_mods (event->crossing.state), 
! 				  (jint)event->crossing.x,
! 				  (jint)event->crossing.y, 
! 				  0,
! 				  JNI_FALSE);
        break;
      case GDK_LEAVE_NOTIFY:
        if (event->crossing.mode == GDK_CROSSING_NORMAL)
! 	(*gdk_env)->CallVoidMethod (gdk_env, peer,
! 				    postMouseEventID,
! 				    AWT_MOUSE_EXITED, 
! 				    (jlong)event->crossing.time,
! 				    state_to_awt_mods (event->crossing.state),
! 				    (jint)event->crossing.x,
! 				    (jint)event->crossing.y, 
! 				    0,
! 				    JNI_FALSE);
        break;
      case GDK_CONFIGURE:
        {
! 	/* GtkWidget *widget;
! 
! 	gdk_window_get_user_data (event->any.window, (void **) &widget); */
! 	    
! 	if (widget && GTK_WIDGET_TOPLEVEL (widget))
  	  {
  	    /* Configure events are not posted to the AWT event
  	       queue, and as such, the gdk/gtk peer functions will
--- 883,1020 ----
    switch (event->type)
      {
      case GDK_BUTTON_PRESS:
!       gdk_threads_leave ();
!       (*gdk_env())->CallVoidMethod (gdk_env(), peer,
                                    postMouseEventID,
  				  AWT_MOUSE_PRESSED, 
  				  (jlong)event->button.time,
!                                   state_to_awt_mods (event->button.state)
!                                   | button_to_awt_mods (event->button.button),
  				  (jint)event->button.x,
  				  (jint)event->button.y, 
  				  click_count, 
  				  (event->button.button == 3) ? JNI_TRUE :
  				                                JNI_FALSE);
+       gdk_threads_enter ();
+       hasBeenDragged = FALSE;
        break;
      case GDK_BUTTON_RELEASE:
        {
  	int width, height;
  
! 	gdk_threads_leave ();
! 	(*gdk_env())->CallVoidMethod (gdk_env(), peer,
  				    postMouseEventID,
  				    AWT_MOUSE_RELEASED, 
  				    (jlong)event->button.time,
!                                     state_to_awt_mods (event->button.state)
!                                     | button_to_awt_mods (event->button.button),
  				    (jint)event->button.x,
  				    (jint)event->button.y, 
  				    click_count,
  				    JNI_FALSE);
+ 	gdk_threads_enter ();
  
! 	/* Generate an AWT click event only if the release occured in the
! 	   window it was pressed in, and the mouse has not been dragged since
! 	   the last time it was pressed. */
  	gdk_window_get_size (event->any.window, &width, &height);
! 	if (! hasBeenDragged
! 	    && event->button.x >= 0
              && event->button.y >= 0
  	    && event->button.x <= width 
  	    && event->button.y <= height)
            {
! 	    gdk_threads_leave ();
! 	    (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  				        postMouseEventID,
  				        AWT_MOUSE_CLICKED, 
  				        (jlong)event->button.time,
! 				        state_to_awt_mods (event->button.state)
!                                         | button_to_awt_mods (event->button.button),
  				        (jint)event->button.x,
  				        (jint)event->button.y, 
  				        click_count,
  				        JNI_FALSE);
+ 	    gdk_threads_enter ();
            }
        }
        break;
      case GDK_MOTION_NOTIFY:
        if (event->motion.state & (GDK_BUTTON1_MASK
  				 | GDK_BUTTON2_MASK
  				 | GDK_BUTTON3_MASK
  				 | GDK_BUTTON4_MASK
  				 | GDK_BUTTON5_MASK))
  	{
! 	  gdk_threads_leave ();
! 	  (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  			              postMouseEventID,
  				      AWT_MOUSE_DRAGGED,
  				      (jlong)event->motion.time,
! 				      state_to_awt_mods_with_button_states (event->motion.state),
  				      (jint)event->motion.x,
  				      (jint)event->motion.y,
  				      0,
  				      JNI_FALSE);
+ 	  gdk_threads_enter ();
+ 	  hasBeenDragged = TRUE;
+ 	}
+       else
+ 	{
+ 	  gdk_threads_leave ();
+ 	  (*gdk_env())->CallVoidMethod (gdk_env(), peer, postMouseEventID,
+ 					AWT_MOUSE_MOVED,
+ 					(jlong)event->motion.time,
+ 					state_to_awt_mods (event->motion.state),
+ 					(jint)event->motion.x,
+ 					(jint)event->motion.y,
+ 					0,
+ 					JNI_FALSE);
+ 	  gdk_threads_enter ();
  	}
+ 
        break;
      case GDK_ENTER_NOTIFY:
!       /* We are not interested in enter events that are due to
!          grab/ungrab and not to actually crossing boundaries */
!       if (event->crossing.mode == GDK_CROSSING_NORMAL)
! 	{
! 	  gdk_threads_leave ();	  
! 	  (*gdk_env())->CallVoidMethod (gdk_env(), peer, postMouseEventID,
! 					AWT_MOUSE_ENTERED, 
! 					(jlong)event->crossing.time,
! 					state_to_awt_mods_with_button_states (event->crossing.state), 
! 					(jint)event->crossing.x,
! 					(jint)event->crossing.y, 
! 					0,
! 					JNI_FALSE);
! 	  gdk_threads_enter ();
! 	}
        break;
      case GDK_LEAVE_NOTIFY:
+       /* We are not interested in leave events that are due to
+          grab/ungrab and not to actually crossing boundaries */
        if (event->crossing.mode == GDK_CROSSING_NORMAL)
! 	{
! 	  gdk_threads_leave ();	  
! 	  (*gdk_env())->CallVoidMethod (gdk_env(), peer,
! 					postMouseEventID,
! 					AWT_MOUSE_EXITED, 
! 					(jlong)event->crossing.time,
! 					state_to_awt_mods_with_button_states (event->crossing.state),
! 					(jint)event->crossing.x,
! 					(jint)event->crossing.y, 
! 					0,
! 					JNI_FALSE);
! 	  gdk_threads_enter ();	  
! 	}
        break;
      case GDK_CONFIGURE:
        {
!         /* Only send configure events to visible top-level windows. */
! 	if (widget && GTK_WIDGET_TOPLEVEL (widget)
!             && GTK_WIDGET_VISIBLE (widget))
  	  {
  	    /* Configure events are not posted to the AWT event
  	       queue, and as such, the gdk/gtk peer functions will
*************** pre_event_handler (GtkWidget *widget, Gd
*** 995,1001 ****
  	       returns. */
  	    gdk_threads_leave ();
  
!  	    (*gdk_env)->CallVoidMethod (gdk_env, peer,
  					postConfigureEventID,
  					(jint) event->configure.x,
  					(jint) event->configure.y,
--- 1022,1028 ----
  	       returns. */
  	    gdk_threads_leave ();
  
!  	    (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  					postConfigureEventID,
  					(jint) event->configure.x,
  					(jint) event->configure.y,
*************** pre_event_handler (GtkWidget *widget, Gd
*** 1006,1118 ****
        }
        break;
      case GDK_EXPOSE:
!       {
! 	(*gdk_env)->CallVoidMethod (gdk_env, peer,
! 				    postExposeEventID,
! 				    (jint)event->expose.area.x,
! 				    (jint)event->expose.area.y,
! 				    (jint)event->expose.area.width,
! 				    (jint)event->expose.area.height);
!       }
        break;
      case GDK_FOCUS_CHANGE:
!       (*gdk_env)->CallVoidMethod (gdk_env, peer,
  				  postFocusEventID,
! 				  (jint) (event->focus_change.in) ? 
  				  AWT_FOCUS_GAINED : AWT_FOCUS_LOST,
  				  JNI_FALSE);
        break;
      case GDK_KEY_PRESS:
!     case GDK_KEY_RELEASE:
!       {
!         GdkWindow *obj_window;
!         jobject *focus_obj_ptr = NULL;
! 	int generates_key_typed = 0;
! 
!         /* A widget with a grab will get key events */
! 	if (!GTK_IS_WINDOW (widget))
! 	  focus_obj_ptr = &peer;
! 	else
! 	  {
!             GtkWindow *window;
! 
!             /* Check if we have an enabled focused widget in this window.
! 	       If not don't handle the event. */
! 	    window = GTK_WINDOW (widget);
! 	    if (!window->focus_widget
! 	        || !GTK_WIDGET_IS_SENSITIVE (window->focus_widget)
! 	        || !window->focus_widget->window)
! 	      return FALSE;
! 	
!             /* TextArea peers are attached to the scrolled window
!                that contains the GtkTextView, not to the text view
!                itself.  Same for List. */
!             if (GTK_IS_TEXT_VIEW (window->focus_widget)
!                 || GTK_IS_CLIST (window->focus_widget))
!               {
!                 obj_window = gtk_widget_get_parent (window->focus_widget)->window;
!               }
!             else if (GTK_IS_BUTTON (window->focus_widget))
! 	      /* GtkButton events go to the "event_window" and this is what
! 	         we registered when the button was created. */
!               obj_window = GTK_BUTTON (window->focus_widget)->event_window;
!             else
!               obj_window = window->focus_widget->window;
! 
!             gdk_property_get (obj_window,
!                               gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE),
!                               gdk_atom_intern ("CARDINAL", FALSE),
!                               0,
!                               sizeof (jobject),
!                               FALSE,
!                               NULL,
!                               NULL,
!                               NULL,
!                               (guchar **)&focus_obj_ptr);
! 
!             /* If the window has no jobject attached we can't send anything */
! 	    if (!focus_obj_ptr)
! 	      return FALSE;
! 	      
! 	    /* Should we generate an AWT_KEY_TYPED event? */
! 	    generates_key_typed = generates_key_typed_event (event, window->focus_widget);
! 	  }	
  
! 	if (event->type == GDK_KEY_PRESS)	
! 	  {
!             (*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr,
! 				        postKeyEventID,
! 				        (jint) AWT_KEY_PRESSED,
! 				        (jlong) event->key.time,
                                          keyevent_state_to_awt_mods (event),
                                          keysym_to_awt_keycode (event),
                                          keyevent_to_awt_keychar (event),
                                          keysym_to_awt_keylocation (event));
! 
!             if (generates_key_typed)
!               {
!                 (*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr,
!                                             postKeyEventID,
!                                             (jint) AWT_KEY_TYPED,
!                                             (jlong) event->key.time,
!                                             state_to_awt_mods (event->key.state),
!                                             VK_UNDEFINED,
!                                             keyevent_to_awt_keychar (event),
!                                             AWT_KEY_LOCATION_UNKNOWN);
!               }
            }
! 	else /* GDK_KEY_RELEASE */
!           {
! 	    (*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr,
! 				        postKeyEventID,
! 				        (jint) AWT_KEY_RELEASED,
! 				        (jlong) event->key.time,
! 			                keyevent_state_to_awt_mods (event),
! 			                keysym_to_awt_keycode (event),
                                          keyevent_to_awt_keychar (event),
                                          keysym_to_awt_keylocation (event));
! 	  }
!       }
        break;
      default:
        break;
--- 1033,1100 ----
        }
        break;
      case GDK_EXPOSE:
!       gdk_threads_leave ();
!       (*gdk_env())->CallVoidMethod (gdk_env(), peer,
!                                   postExposeEventID,
!                                   (jint)event->expose.area.x,
!                                   (jint)event->expose.area.y,
!                                   (jint)event->expose.area.width,
!                                   (jint)event->expose.area.height);
!       gdk_threads_enter ();
        break;
+ 
      case GDK_FOCUS_CHANGE:
!       gdk_threads_leave ();
!       (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  				  postFocusEventID,
! 				  (jint) (event->focus_change.in) ?
  				  AWT_FOCUS_GAINED : AWT_FOCUS_LOST,
  				  JNI_FALSE);
+       gdk_threads_enter ();
        break;
      case GDK_KEY_PRESS:
!         if (GTK_IS_WINDOW (widget))
!           {
!             /*            GdkEventKey *keyevent = (GdkEventKey *) event; */
!             /*            g_printerr ("key press event: sent: %d  time: %d  state: %d  keyval: %d  length: %d  string: %s  hardware_keycode: %d  group: %d\n", keyevent->send_event, keyevent->time, keyevent->state, keyevent->keyval, keyevent->length, keyevent->string, keyevent->hardware_keycode, keyevent->group); */
  
! 	    gdk_threads_leave ();
!             (*gdk_env())->CallVoidMethod (gdk_env(), peer,
!                                         postKeyEventID,
!                                         (jint) AWT_KEY_PRESSED,
!                                         (jlong) event->key.time,
                                          keyevent_state_to_awt_mods (event),
                                          keysym_to_awt_keycode (event),
                                          keyevent_to_awt_keychar (event),
                                          keysym_to_awt_keylocation (event));
! 	    gdk_threads_enter ();
!             /* FIXME: generation of key typed events needs to be moved
!                to GtkComponentPeer.postKeyEvent.  If the key in a key
!                press event is not an "action" key
!                (KeyEvent.isActionKey) and is not a modifier key, then
!                it should generate a key typed event. */
!             return TRUE;
            }
!         else
!           return FALSE;
!         break;
!     case GDK_KEY_RELEASE:
!       if (GTK_IS_WINDOW (widget))
!         {
! 	    gdk_threads_leave ();
!             (*gdk_env())->CallVoidMethod (gdk_env(), peer,
!                                         postKeyEventID,
!                                         (jint) AWT_KEY_RELEASED,
!                                         (jlong) event->key.time,
!                                         keyevent_state_to_awt_mods (event),
!                                         keysym_to_awt_keycode (event),
                                          keyevent_to_awt_keychar (event),
                                          keysym_to_awt_keylocation (event));
! 	    gdk_threads_enter ();
!             return TRUE;
!         }
!       else
!         return FALSE;
        break;
      default:
        break;
*************** attach_jobject (GdkWindow *window, jobje
*** 1141,1147 ****
  			 | GDK_KEY_PRESS_MASK
  			 | GDK_FOCUS_CHANGE_MASK);
  
-   //  g_print("storing obj %p property on window %p\n", obj, window);
    gdk_property_change (window,
  		       addr_atom,
  		       type_atom,
--- 1123,1128 ----
*************** connect_awt_hook (JNIEnv *env, jobject p
*** 1156,1165 ****
  {
    va_list ap;
    jobject *obj;
-   //void *ptr = NSA_GET_PTR (env, peer_obj);
  
    obj = NSA_GET_GLOBAL_REF (env, peer_obj);
-   //g_print("Connection obj %s\n", gtk_widget_get_name (GTK_WIDGET (ptr)));
    g_assert (obj);
  
    va_start (ap, nwindows);
--- 1137,1144 ----
*************** connect_awt_hook (JNIEnv *env, jobject p
*** 1174,1176 ****
--- 1153,1176 ----
    va_end (ap);
  }
  
+ /*
+  * Attach a Java object that is backed by widget.  This callback is
+  * called after the widget's window has been realized.  That way, we
+  * can be sure that widget->window is non-NULL, and so can have data
+  * connected to it.
+  */
+ void connect_awt_hook_cb (GtkWidget *widget __attribute__((unused)),
+ 			  jobject peer)
+ {
+   void *ptr;
+ 
+   ptr = NSA_GET_PTR (gdk_env(), peer);
+ 
+   connect_awt_hook (gdk_env(), peer, 1, GTK_WIDGET (ptr)->window);
+ 
+   gdk_threads_leave ();
+ 
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer, setCursorID);
+ 
+   gdk_threads_enter ();
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c	Thu Jan  8 21:12:25 2004
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c	Wed Feb 16 20:03:24 2005
***************
*** 1,5 ****
  /* gtkfiledialogpeer.c -- Native implementation of GtkFileDialogPeer
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtkfiledialogpeer.c -- Native implementation of GtkFileDialogPeer
!    Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 40,52 ****
  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include "gnu_java_awt_peer_gtk_GtkFileDialogPeer.h"
  
! static void window_closed (GtkDialog *dialog,
!                            gint responseId,
!                            jobject peer_obj);
! static void ok_clicked (GtkButton *button,
! 	                jobject peer_obj);
! static void cancel_clicked (GtkButton *button,
! 	                    jobject peer_obj);
  
  /*
   * Make a new file selection dialog
--- 40,48 ----
  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include "gnu_java_awt_peer_gtk_GtkFileDialogPeer.h"
  
! static void handle_response (GtkDialog *dialog,
!                              gint responseId,
!                              jobject peer_obj);
  
  /*
   * Make a new file selection dialog
*************** static void cancel_clicked (GtkButton *b
*** 54,69 ****
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create 
!   (JNIEnv *env, jobject obj)
  {
    gpointer widget;
  
    /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
    
!   widget = gtk_file_selection_new ("");
    /* GtkFileSelect is not modal by default */
    gtk_window_set_modal (GTK_WINDOW (widget), TRUE);
  
--- 50,79 ----
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create 
!   (JNIEnv *env, jobject obj, jobject parent)
  {
+   void *parentp;
    gpointer widget;
  
    /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
+   parentp = NSA_GET_PTR(env, parent);
+ 
    gdk_threads_enter ();
    
!   /* FIXME: we should be using the default gnome-vfs backend but it is
!      not currently thread-safe.  See:
!      http://bugzilla.gnome.org/show_bug.cgi?id=166852 */
!   widget = gtk_file_chooser_dialog_new_with_backend
!     ("Open File",
!      GTK_WINDOW(parentp),
!      GTK_FILE_CHOOSER_ACTION_OPEN,
!      "gtk+",
!      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
!      GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
!      NULL);
! 
    /* GtkFileSelect is not modal by default */
    gtk_window_set_modal (GTK_WINDOW (widget), TRUE);
  
*************** Java_gnu_java_awt_peer_gtk_GtkFileDialog
*** 76,96 ****
    NSA_SET_PTR (env, obj, widget);
  }
  
- JNIEXPORT void JNICALL
- Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectJObject
-   (JNIEnv *env, jobject obj)
- {
-   void *ptr = NSA_GET_PTR (env, obj);
- 
-   gdk_threads_enter ();
- 
-   gtk_widget_realize (GTK_WIDGET (ptr));
- 
-   connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
- 
-   gdk_threads_leave ();
- }
- 
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectSignals
    (JNIEnv *env, jobject obj)
--- 86,91 ----
*************** Java_gnu_java_awt_peer_gtk_GtkFileDialog
*** 101,247 ****
  
    gdk_threads_enter ();
  
-   gtk_widget_realize (GTK_WIDGET (ptr));
- 
-   /* connect buttons to handlers */
- 
    g_signal_connect (G_OBJECT (GTK_DIALOG (ptr)),
                      "response", 
! 		    GTK_SIGNAL_FUNC (window_closed), *gref);
! 
!   g_signal_connect (G_OBJECT (GTK_FILE_SELECTION (ptr)->ok_button),
!                     "clicked", 
! 		    GTK_SIGNAL_FUNC (ok_clicked), *gref);
  
-   g_signal_connect (G_OBJECT (GTK_FILE_SELECTION (ptr)->cancel_button),
-                     "clicked", 
- 		    GTK_SIGNAL_FUNC (cancel_clicked), *gref);
- 		    
    gdk_threads_leave ();
  
    /* Connect the superclass signals.  */
    Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
  }
  
! /*
!  * Set the filename in the file selection dialog.
!  */
! 
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile 
!     (JNIEnv *env, jobject obj, jstring filename)
  {
    void *ptr;
    const char *str;
  
    ptr = NSA_GET_PTR (env, obj);
!     
!   str = (*env)->GetStringUTFChars (env, filename, 0);
!      
    gdk_threads_enter ();
  
!   gtk_file_selection_set_filename (GTK_FILE_SELECTION (ptr), str);
  
    gdk_threads_leave ();
  
!   (*env)->ReleaseStringUTFChars (env, filename, str);
  }
  
! static void
! window_closed (GtkDialog *dialog __attribute__((unused)),
!                gint responseId,
!                jobject peer_obj)
  {
-   static int isIDSet = 0;
-   static jmethodID disposeID;
    void *ptr;
  
!   // We only need this for the case when the user closed the window
!   if (responseId != GTK_RESPONSE_DELETE_EVENT)
!     return;
  
-   ptr = NSA_GET_PTR (gdk_env, peer_obj);
-   
-   if (!isIDSet)
-     {
-       jclass cx = (*gdk_env)->GetObjectClass (gdk_env, peer_obj);
-       disposeID = (*gdk_env)->GetMethodID (gdk_env, cx, "gtkDisposeFileDialog", "()V");
-       isIDSet = 1;
-     }
-     
    gdk_threads_leave ();
  
!   /* We can dispose of the dialog now (and unblock show) */
!   (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, disposeID);
  
    gdk_threads_enter ();
  }
  
! static void
! ok_clicked (GtkButton *button __attribute__((unused)),
! 	                jobject peer_obj)
  {
-   static int isIDSet = 0;
-   static jmethodID gtkSetFilenameID;
-   static jmethodID hideID;
    void *ptr;
!   G_CONST_RETURN gchar *fileName;
  
!   ptr = NSA_GET_PTR (gdk_env, peer_obj);
!   
!   fileName = gtk_file_selection_get_filename (
!                GTK_FILE_SELECTION (GTK_WIDGET (ptr)));
!   
!   if (!isIDSet)
!     {
!       jclass cx = (*gdk_env)->GetObjectClass (gdk_env, peer_obj);
!       hideID = (*gdk_env)->GetMethodID (gdk_env, cx, "gtkHideFileDialog", "()V");
!       gtkSetFilenameID = (*gdk_env)->GetMethodID (gdk_env, cx,
!                                    "gtkSetFilename", "(Ljava.lang.String;)V");
!       isIDSet = 1;
!     }
      
    gdk_threads_leave ();
-   
-   /* Set the Java object field 'file' with this value. */
-   jstring str_fileName = (*gdk_env)->NewStringUTF (gdk_env, fileName);
-   (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, gtkSetFilenameID, str_fileName);
  
!   /* We can hide the dialog now (and unblock show) */
!   (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, hideID);
! 
!   gdk_threads_enter ();
  }
  
  static void
! cancel_clicked (GtkButton *button __attribute__((unused)),
! 	                    jobject peer_obj)
  {
    static int isIDSet = 0;
    static jmethodID gtkSetFilenameID;
    static jmethodID hideID;
    void *ptr;
  
!   ptr = NSA_GET_PTR (gdk_env, peer_obj);
    
    if (!isIDSet)
      {
!       jclass cx = (*gdk_env)->GetObjectClass (gdk_env, peer_obj);
!       hideID = (*gdk_env)->GetMethodID (gdk_env, cx, "gtkHideFileDialog", "()V");
!       gtkSetFilenameID = (*gdk_env)->GetMethodID (gdk_env, cx,
!                                    "gtkSetFilename", "(Ljava.lang.String;)V");
        isIDSet = 1;
      }
      
    gdk_threads_leave ();
! 
!   /* Set the Java object field 'file' with the null value. */
!   (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, gtkSetFilenameID, NULL);
  
    /* We can hide the dialog now (and unblock show) */
!   (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, hideID);
  
    gdk_threads_enter ();
  }
  
- 
--- 96,274 ----
  
    gdk_threads_enter ();
  
    g_signal_connect (G_OBJECT (GTK_DIALOG (ptr)),
                      "response", 
! 		    GTK_SIGNAL_FUNC (handle_response), *gref);
  
    gdk_threads_leave ();
  
    /* Connect the superclass signals.  */
    Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
  }
  
! JNIEXPORT jstring JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeGetDirectory
!     (JNIEnv *env, jobject obj)
  {
    void *ptr;
    const char *str;
  
    ptr = NSA_GET_PTR (env, obj);
! 
    gdk_threads_enter ();
  
!   str = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(ptr));
  
    gdk_threads_leave ();
  
!   return (*env)->NewStringUTF(env, str);
  }
  
! 
! /* This function interfaces with the Java callback method of the same name.
!    This function extracts the filename from the GtkFileFilterInfo object,
!    and passes it to the Java method.  The Java method will call the filter's
!    accept() method and will give back the return value. */
! static gboolean filenameFilterCallback (const GtkFileFilterInfo *filter_info,
! 					gpointer obj)
! {
!   jclass cx;
!   jmethodID id;
!   jstring *filename;
!   gboolean accepted;
! 
!   cx = (*gdk_env())->GetObjectClass (gdk_env(), (jobject) obj);
!   id = (*gdk_env())->GetMethodID (gdk_env(), cx, "filenameFilterCallback",
!                                              "(Ljava/lang/String;)Z");
! 
!   filename = (*gdk_env())->NewStringUTF(gdk_env(), filter_info->filename);
! 
!   gdk_threads_leave();
!   accepted = (*gdk_env())->CallBooleanMethod(gdk_env(), obj, id, filename);
!   gdk_threads_enter();
! 
!   return accepted;
! }
! 
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter
!     (JNIEnv *env, jobject obj, jobject filter_obj __attribute__((unused)))
  {
    void *ptr;
+   GtkFileFilter *filter;
  
!   ptr = NSA_GET_PTR (env, obj);
! 
!   gdk_threads_enter ();
! 
!   filter = gtk_file_filter_new();
!   gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_FILENAME,
! 			     filenameFilterCallback, obj, NULL);
! 
!   gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(ptr), filter);
  
    gdk_threads_leave ();
+ }
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetDirectory
!     (JNIEnv *env, jobject obj, jstring directory)
! {
!   void *ptr;
!   const char *str;
! 
!   ptr = NSA_GET_PTR (env, obj);
! 
!   str = (*env)->GetStringUTFChars (env, directory, 0);
  
    gdk_threads_enter ();
+   gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(ptr), str);
+   gdk_threads_leave ();
+ 
+   (*env)->ReleaseStringUTFChars (env, directory, str);
  }
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile 
!     (JNIEnv *env, jobject obj, jstring filename)
  {
    void *ptr;
!   const char *str;
  
!   ptr = NSA_GET_PTR (env, obj);
      
+   str = (*env)->GetStringUTFChars (env, filename, 0);
+      
+   gdk_threads_enter ();
+   gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (ptr), str);
    gdk_threads_leave ();
  
!   (*env)->ReleaseStringUTFChars (env, filename, str);
  }
  
  static void
! handle_response (GtkDialog *dialog __attribute__((unused)),
!                  gint responseId,
!                  jobject peer_obj)
  {
+   static int isDisposeIDSet = 0;
    static int isIDSet = 0;
    static jmethodID gtkSetFilenameID;
    static jmethodID hideID;
+   static jmethodID disposeID;
    void *ptr;
+   G_CONST_RETURN gchar *fileName;
+   jstring str_fileName = NULL;
  
!   /* We only need this for the case when the user closed the window,
!      or clicked ok or cancel. */
!   if (responseId != GTK_RESPONSE_DELETE_EVENT
!       && responseId != GTK_RESPONSE_ACCEPT
!       && responseId != GTK_RESPONSE_CANCEL)
!     return;
! 
!   ptr = NSA_GET_PTR (gdk_env(), peer_obj);
! 
!   if (responseId == GTK_RESPONSE_DELETE_EVENT)
!   {
!     if (!isDisposeIDSet)
!       {
!         jclass cx = (*gdk_env())->GetObjectClass (gdk_env(), peer_obj);
!         disposeID = (*gdk_env())->GetMethodID (gdk_env(), cx, "gtkDisposeFileDialog", "()V");
!         isDisposeIDSet = 1;
!       }
    
+     gdk_threads_leave ();
+ 
+     /* We can dispose of the dialog now (and unblock show) */
+     (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, disposeID);
+ 
+     gdk_threads_enter ();
+     return;
+   }
+ 
+   if (responseId == GTK_RESPONSE_ACCEPT) {
+     fileName = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (GTK_WIDGET (ptr)));
+     str_fileName = (*gdk_env())->NewStringUTF (gdk_env(), fileName);
+   }
+ 
    if (!isIDSet)
      {
!       jclass cx = (*gdk_env())->GetObjectClass (gdk_env(), peer_obj);
!       hideID = (*gdk_env())->GetMethodID (gdk_env(), cx, "gtkHideFileDialog", "()V");
!       gtkSetFilenameID = (*gdk_env())->GetMethodID (gdk_env(), cx,
!                                    "gtkSetFilename", "(Ljava/lang/String;)V");
        isIDSet = 1;
      }
      
    gdk_threads_leave ();
!   
!   /* Set the Java object field 'file' with this value. */
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, gtkSetFilenameID, str_fileName);
  
    /* We can hide the dialog now (and unblock show) */
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, hideID);
  
    gdk_threads_enter ();
  }
  
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c	Wed Feb 16 20:03:24 2005
***************
*** 0 ****
--- 1,223 ----
+ /* gtkframepeer.c -- Native implementation of GtkFramePeer
+    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., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
+ 
+ #include "gtkpeer.h"
+ #include "gnu_java_awt_peer_gtk_GtkFramePeer.h"
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkFramePeer_removeMenuBarPeer
+   (JNIEnv *env, jobject obj)
+ {
+   void *ptr;
+   void *mptr;
+   void *fixed;
+   GList* children;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+ 
+   fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data;
+   children = gtk_container_get_children (GTK_CONTAINER (fixed));
+ 
+   while (children != NULL && !GTK_IS_MENU_SHELL (children->data))
+   {
+     children = children->next;
+   }
+ 
+   /* If there's a menu bar, remove it. */
+   if (children != NULL)
+     {
+       mptr = children->data;
+ 
+       /* This will actually destroy the MenuBar. By removing it from
+          its parent, the reference count for the MenuBar widget will
+          decrement to 0. The widget will be automatically destroyed by
+          GTK. */
+       gtk_container_remove (GTK_CONTAINER (fixed), GTK_WIDGET (mptr));  
+     }
+ 
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer
+   (JNIEnv *env, jobject obj, jobject menubar)
+ {
+   void *ptr;
+   void *mptr;
+   void *fixed;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+   mptr = NSA_GET_PTR (env, menubar);
+ 
+   gdk_threads_enter ();
+ 
+   fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data;
+   gtk_fixed_put (GTK_FIXED (fixed), mptr, 0, 0);
+   gtk_widget_show (mptr);
+ 
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT jint JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight
+   (JNIEnv *env, jobject obj __attribute__((unused)), jobject menubar)
+ {
+   GtkWidget *ptr;
+   GtkRequisition requisition;
+ 
+   ptr = NSA_GET_PTR (env, menubar);
+ 
+   gdk_threads_enter ();
+ 
+   gtk_widget_size_request (ptr, &requisition);
+ 
+   gdk_threads_leave ();
+ 
+   return requisition.height;
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidth
+   (JNIEnv *env, jobject obj __attribute__((unused)), jobject menubar, jint width)
+ {
+   GtkWidget *ptr;
+   GtkRequisition natural_req;
+ 
+   ptr = NSA_GET_PTR (env, menubar);
+ 
+   gdk_threads_enter ();
+ 
+   /* Get the menubar's natural size request. */
+   gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
+   gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
+ 
+   /* Set the menubar's size request to width by natural_req.height. */
+   gtk_widget_set_size_request (GTK_WIDGET (ptr),
+                                width, natural_req.height);
+ 
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkFixedSetVisible
+   (JNIEnv *env, jobject obj, jboolean visible)
+ {
+   void *ptr;
+   void *fixed;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+ 
+   fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data;
+ 
+   if (visible)
+     gtk_widget_show (GTK_WIDGET (fixed));
+   else
+     gtk_widget_hide (GTK_WIDGET (fixed));
+ 
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromDecoder
+   (JNIEnv *env, jobject obj, jobject decoder)
+ {
+   void *ptr;
+   GdkPixbufLoader *loader = NULL;
+   GdkPixbuf *pixbuf = NULL;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   loader = NSA_GET_PB_PTR (env, decoder);
+   g_assert (loader != NULL);
+ 
+   gdk_threads_enter ();
+ 
+   pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
+   g_assert (pixbuf != NULL);
+ 
+   gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf);
+ 
+   gdk_threads_leave ();
+ }
+ 
+ static void
+ free_pixbuf_data (guchar *pixels, gpointer data __attribute__((unused)))
+ {
+   free(pixels);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromData
+   (JNIEnv *env, jobject obj, jintArray pixelArray, jint width, jint height)
+ {
+   void *ptr;
+   GdkPixbuf *pixbuf;
+   jint *pixels;
+   int pixels_length, i;
+   guchar *data;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   pixels = (*env)->GetIntArrayElements (env, pixelArray, 0);
+   pixels_length = (*env)->GetArrayLength (env, pixelArray);
+ 
+   data = malloc (sizeof (guchar) * pixels_length);
+   for (i = 0; i < pixels_length; i++)
+     data[i] = (guchar) pixels[i];
+ 
+   gdk_threads_enter ();
+ 
+   pixbuf = gdk_pixbuf_new_from_data (data,
+                                      GDK_COLORSPACE_RGB,
+                                      TRUE,
+                                      8,
+                                      width,
+                                      height,
+                                      width*4,
+                                      free_pixbuf_data,
+                                      NULL);
+ 
+   gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf);
+ 
+   gdk_threads_leave ();
+ 
+   (*env)->ReleaseIntArrayElements(env, pixelArray, pixels, 0);
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c	Wed Feb 16 20:03:25 2005
***************
*** 0 ****
--- 1,100 ----
+ /* gtkgenericpeer.c -- Native implementation of GtkGenericPeer
+    Copyright (C) 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., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ #include "gtkpeer.h"
+ #include "gnu_java_awt_peer_gtk_GtkGenericPeer.h"
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose
+   (JNIEnv *env, jobject obj)
+ {
+   void *ptr;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+ 
+   /* For now the native state for any object must be a widget.
+      However, a subclass could override dispose() if required.  */
+   gtk_widget_destroy (GTK_WIDGET (ptr));
+ 
+   gdk_threads_leave ();
+ 
+   /* Remove entries from state tables */
+   NSA_DEL_GLOBAL_REF (env, obj);
+   NSA_DEL_PTR (env, obj);
+ 
+   /* 
+    * Wake up the main thread, to make sure it re-checks the window
+    * destruction condition. 
+    */
+ 
+   g_main_context_wakeup (NULL);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkGenericPeer_gtkWidgetModifyFont
+   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
+ {
+   const char *font_name;
+   void *ptr;
+   PangoFontDescription *font_desc;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   font_name = (*env)->GetStringUTFChars (env, name, NULL);
+ 
+   gdk_threads_enter();
+ 
+   font_desc = pango_font_description_from_string (font_name);
+   pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+ 
+   if (style & AWT_STYLE_BOLD)
+     pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
+ 
+   if (style & AWT_STYLE_ITALIC)
+     pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
+ 
+   gtk_widget_modify_font (GTK_WIDGET(ptr), font_desc);
+ 
+   pango_font_description_free (font_desc);
+ 
+   gdk_threads_leave();
+ 
+   (*env)->ReleaseStringUTFChars (env, name, font_name);
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c	Wed Oct  8 15:49:33 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c	Tue Nov 30 23:59:12 2004
***************
*** 1,5 ****
  /* gtkimagepainter.c
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtkimagepainter.c
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 40,53 ****
  #include <libart_lgpl/art_misc.h>
  #include <libart_lgpl/art_rgb_affine.h>
  
- #define SWAPU32(w) \
-   (((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImagePainter_drawPixels
! (JNIEnv *env, jobject obj __attribute__((unused)), jobject gc_obj,
!  jint bg_red, jint bg_green, jint bg_blue, jint x, jint y, jint width,
!  jint height, jintArray jpixels, jint offset, jint scansize,
!  jdoubleArray jaffine)
  {
    struct graphics *g;
    jint *pixels, *elems;
--- 40,52 ----
  #include <libart_lgpl/art_misc.h>
  #include <libart_lgpl/art_rgb_affine.h>
  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkImagePainter_drawPixels
!   (JNIEnv *env, jobject obj __attribute__((unused)), jobject gc_obj,
!    jint bg_red, jint bg_green, jint bg_blue, jint x, jint y, jint width,
!    jint height, jintArray jpixels, jint offset, jint scansize,
!    jdoubleArray jaffine)
  {
    struct graphics *g;
    jint *pixels, *elems;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 58,63 ****
--- 57,65 ----
  
    g = (struct graphics *) NSA_GET_PTR (env, gc_obj);
  
+   if (!jpixels)
+     return;
+ 
    elems = (*env)->GetIntArrayElements (env, jpixels, NULL);
    num_pixels = (*env)->GetArrayLength (env, jpixels);
   
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 146,151 ****
--- 148,159 ----
  
    gdk_threads_enter ();
  
+   if (!g || !GDK_IS_DRAWABLE (g->drawable))
+     {
+       gdk_threads_leave ();
+       return;
+     }
+ 
    gdk_draw_rgb_image (g->drawable,
  		      g->gc,
  		      x + g->x_offset, 
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c	Tue Nov 30 23:59:12 2004
*************** Java_gnu_java_awt_peer_gtk_GtkLabelPeer_
*** 44,72 ****
    (JNIEnv *env, jobject obj, jstring text, jfloat xalign)
  {
    GtkWidget *label;
!   GtkWidget *ebox;
!   GtkContainer *ebox_container;
    const char *str;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    str = (*env)->GetStringUTFChars (env, text, 0);
  
    gdk_threads_enter ();
!   
!   ebox = gtk_event_box_new ();
!   ebox_container = GTK_CONTAINER (ebox);
    label = gtk_label_new (str);
    gtk_misc_set_alignment (GTK_MISC (label), xalign, 0.5);
!   gtk_container_add (ebox_container, label);
    gtk_widget_show (label);
  
    gdk_threads_leave ();
  
    (*env)->ReleaseStringUTFChars (env, text, str);
  
!   NSA_SET_PTR (env, obj, ebox);
  }
  
  JNIEXPORT void JNICALL
--- 44,107 ----
    (JNIEnv *env, jobject obj, jstring text, jfloat xalign)
  {
    GtkWidget *label;
!   GtkWidget *eventbox;
    const char *str;
  
    NSA_SET_GLOBAL_REF (env, obj);
  
    str = (*env)->GetStringUTFChars (env, text, 0);
  
    gdk_threads_enter ();
! 
!   eventbox = gtk_event_box_new ();
    label = gtk_label_new (str);
    gtk_misc_set_alignment (GTK_MISC (label), xalign, 0.5);
!   gtk_container_add (GTK_CONTAINER (eventbox), label);
    gtk_widget_show (label);
  
    gdk_threads_leave ();
  
    (*env)->ReleaseStringUTFChars (env, text, str);
  
!   NSA_SET_PTR (env, obj, eventbox);
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetModifyFont
!   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
! {
!   const char *font_name;
!   void *ptr;
!   GtkWidget *label;
!   PangoFontDescription *font_desc;
! 
!   ptr = NSA_GET_PTR (env, obj);
! 
!   font_name = (*env)->GetStringUTFChars (env, name, NULL);
! 
!   gdk_threads_enter ();
! 
!   label = gtk_bin_get_child (GTK_BIN (ptr));
! 
!   if (!label)
!     return;
! 
!   font_desc = pango_font_description_from_string (font_name);
!   pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
! 
!   if (style & AWT_STYLE_BOLD)
!     pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
! 
!   if (style & AWT_STYLE_ITALIC)
!     pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
! 
!   gtk_widget_modify_font (GTK_WIDGET (label), font_desc);
! 
!   pango_font_description_free (font_desc);
! 
!   gdk_threads_leave ();
! 
!   (*env)->ReleaseStringUTFChars (env, name, font_name);
  }
  
  JNIEXPORT void JNICALL
*************** Java_gnu_java_awt_peer_gtk_GtkLabelPeer_
*** 83,89 ****
  
    gdk_threads_enter ();
  
!   label = gtk_bin_get_child (GTK_BIN(ptr));
  
    gtk_label_set_label (GTK_LABEL (label), str);
  
--- 118,124 ----
  
    gdk_threads_enter ();
  
!   label = gtk_bin_get_child (GTK_BIN (ptr));
  
    gtk_label_set_label (GTK_LABEL (label), str);
  
*************** Java_gnu_java_awt_peer_gtk_GtkLabelPeer_
*** 109,111 ****
--- 144,179 ----
  
    gdk_threads_leave ();
  }
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_setNativeBounds
+   (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
+ {
+   GtkWidget *widget;
+   void *ptr;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+ 
+   widget = GTK_WIDGET (ptr);
+ 
+   /* We assume that -1 is a width or height and not a request for the
+      widget's natural size. */
+   width = width < 0 ? 0 : width;
+   height = height < 0 ? 0 : height;
+ 
+   if (!(width == 0 && height == 0))
+     {
+       /* Set the event box's size request... */
+       gtk_widget_set_size_request (widget, width, height);
+       /* ...and the label's size request. */
+       gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (widget)),
+                                    width, height);
+ 
+       if (widget->parent != NULL)
+         gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);
+     }
+ 
+   gdk_threads_leave ();
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c	Wed Feb 16 20:03:25 2005
***************
*** 1,146 ****
! /* gtklistpeer.c -- Native implementation of GtkListPeer
!    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., 59 Temple Place, Suite 330, Boston, MA
! 02111-1307 USA.
  
! Linking this library statically or dynamically with other modules is
! making a combined work based on this library.  Thus, the terms and
! conditions of the GNU General Public License cover the whole
! combination.
  
! As a special exception, the copyright holders of this library give you
! permission to link this library with independent modules to produce an
! executable, regardless of the license terms of these independent
! modules, and to copy and distribute the resulting executable under
! terms of your choice, provided that you also meet, for each linked
! independent module, the terms and conditions of the license of that
! module.  An independent module is a module which is not derived from
! or based on this library.  If you modify this library, you may extend
! this exception to your version of the library, but you are not
! obligated to do so.  If you do not wish to do so, delete this
! exception statement from your version. */
  
  
  #include "gtkpeer.h"
- #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include "gnu_java_awt_peer_gtk_GtkListPeer.h"
  
! static void item_select (GtkCList *list __attribute__((unused)),
! 	                 int row, int col __attribute__((unused)),
! 	                 GdkEventButton *event __attribute__((unused)), 
! 	                 jobject peer_obj);
! static void item_unselect (GtkCList *list __attribute__((unused)),
! 	                   int row,
! 	                   int col __attribute__((unused)),
! 	                   GdkEventButton *event __attribute__((unused)),
! 	                   jobject peer_obj);
  
! #define CLIST_FROM_SW(obj) (GTK_CLIST(GTK_SCROLLED_WINDOW (obj)->container.child))
  
! JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkListPeer_create
!   (JNIEnv *env, jobject obj)
  {
!   GtkWidget *list, *sw;
  
    /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
!   
!   list = gtk_clist_new (1);
!   gtk_widget_show (list);
    sw = gtk_scrolled_window_new (NULL, NULL);
!   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), 
  				  GTK_POLICY_AUTOMATIC,
  				  GTK_POLICY_AUTOMATIC);
    gtk_container_add (GTK_CONTAINER (sw), list);
  
    gdk_threads_leave ();
  
    NSA_SET_PTR (env, obj, sw);
  }
  
  JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkListPeer_connectJObject
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
  
!   gtk_widget_realize (GTK_WIDGET (ptr));
  
!   connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
  
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals
!   (JNIEnv *env, jobject obj)
  {
!   GtkCList *list;
!   void *ptr = NSA_GET_PTR (env, obj);
!   jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
!   g_assert (gref);
  
!   gdk_threads_enter ();
  
!   gtk_widget_realize (GTK_WIDGET (ptr));
  
!   /* connect selectable hook */
!   
!   list = CLIST_FROM_SW (ptr);
  
!   g_signal_connect (G_OBJECT (list), "select_row", 
! 		      GTK_SIGNAL_FUNC (item_select), *gref);
  
!   g_signal_connect (G_OBJECT (list), "unselect_row", 
! 		      GTK_SIGNAL_FUNC (item_unselect), *gref);
  
!   /* Connect the superclass signals.  */
!   /* FIXME: Cannot do that here or it will get the sw and not the list.
!      We must a generic way of doing this. */
!   /* Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, peer_obj); */
!   g_signal_connect (GTK_OBJECT (list), "event", 
!                     G_CALLBACK (pre_event_handler), *gref);
  
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkListPeer_append 
    (JNIEnv *env, jobject obj, jobjectArray items)
  {
    void *ptr;
!   GtkCList *list;
!   jint count, i;
  
    ptr = NSA_GET_PTR (env, obj);
  
    count = (*env)->GetArrayLength (env, items);
  
    gdk_threads_enter ();
!   list = CLIST_FROM_SW (ptr);
!   for (i = 0; i < count; i++) 
      {
        const char *text;
        jobject item;
--- 1,222 ----
! /* GtkListPeer.c -- implements GtkListPeer's native methods
!    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., 59 Temple Place, Suite 330, Boston, MA
!    02111-1307 USA.
  
!    Linking this library statically or dynamically with other modules is
!    making a combined work based on this library.  Thus, the terms and
!    conditions of the GNU General Public License cover the whole
!    combination.
  
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
  
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkListPeer.h"
  
! enum
!   {
!     COLUMN_STRING,
!     N_COLUMNS
!   };
  
! gboolean item_highlighted (GtkTreeSelection *selection,
!                            GtkTreeModel *model,
!                            GtkTreePath *path,
!                            gboolean path_currently_selected,
!                            jobject peer);
  
! 
! #define TREE_VIEW_FROM_SW(obj) \
!            (GTK_TREE_VIEW (GTK_SCROLLED_WINDOW (obj)->container.child))
! 
! JNIEXPORT void JNICALL
  Java_gnu_java_awt_peer_gtk_GtkListPeer_create
!   (JNIEnv *env, jobject obj, jint rows)
  {
!   GtkWidget *sw;
!   GtkWidget *list;
!   GtkCellRenderer *renderer;
!   GtkTreeViewColumn *column;
!   GtkListStore *list_store;
!   GtkTreeIter iter;
!   GtkRequisition req;
!   gint i;
  
    /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
! 
!   list_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING);
!   /* Add the number of rows so that we can calculate the tree view's
!      size request. */
!   for (i = 0; i < rows; i++)
!     {
!       gtk_list_store_append (list_store, &iter);
!       gtk_list_store_set (list_store, &iter,
!                           COLUMN_STRING, "",
!                           -1);
!     }
!   list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
!   renderer = gtk_cell_renderer_text_new ();
!   column = gtk_tree_view_column_new_with_attributes (NULL,
! 				     renderer,
! 				     "text",
! 				     COLUMN_STRING,
! 				     NULL);
! 
    sw = gtk_scrolled_window_new (NULL, NULL);
!   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
  				  GTK_POLICY_AUTOMATIC,
  				  GTK_POLICY_AUTOMATIC);
+ 
+   gtk_tree_view_append_column (GTK_TREE_VIEW (list), column);
+ 
+   gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE);
+ 
+   gtk_widget_size_request (GTK_WIDGET (list), &req);
+ 
+   gtk_widget_set_size_request (GTK_WIDGET (list), req.width, req.height);
+ 
    gtk_container_add (GTK_CONTAINER (sw), list);
  
+   /* Remove the blank rows. */
+   gtk_list_store_clear (list_store);
+ 
+   gtk_widget_show (list);
+   gtk_widget_show (sw);
+ 
    gdk_threads_leave ();
  
    NSA_SET_PTR (env, obj, sw);
  }
  
  JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
+   jobject *gref;
+   GtkTreeView *list;
+   GtkTreeSelection *selection;
  
    ptr = NSA_GET_PTR (env, obj);
+   gref = NSA_GET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
  
!   g_assert (gref);
  
!   list = TREE_VIEW_FROM_SW (ptr);
! 
!   g_signal_connect (G_OBJECT (list), "event",
!                     G_CALLBACK (pre_event_handler), *gref);
! 
!   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
!   gtk_tree_selection_set_select_function (selection, item_highlighted,
!                                           *gref, NULL);
  
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetModifyFont
!   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
  {
!   const char *font_name;
!   void *ptr;
!   GtkWidget *list;
!   PangoFontDescription *font_desc;
  
!   ptr = NSA_GET_PTR (env, obj);
  
!   gdk_threads_enter();
  
!   list = GTK_WIDGET (TREE_VIEW_FROM_SW (ptr));
  
!   font_name = (*env)->GetStringUTFChars (env, name, NULL);
  
!   font_desc = pango_font_description_from_string (font_name);
!   pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
  
!   if (style & AWT_STYLE_BOLD)
!     pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
! 
!   if (style & AWT_STYLE_ITALIC)
!     pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
! 
!   gtk_widget_modify_font (GTK_WIDGET (list), font_desc);
! 
!   pango_font_description_free (font_desc);
! 
!   (*env)->ReleaseStringUTFChars (env, name, font_name);
! 
!   gdk_threads_leave();
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetRequestFocus
!   (JNIEnv *env, jobject obj)
! {
!   void *ptr;
!   GtkWidget *list;
! 
!   ptr = NSA_GET_PTR (env, obj);
!   
!   gdk_threads_enter ();
! 
!   list = GTK_WIDGET (TREE_VIEW_FROM_SW (ptr));
!   gtk_widget_grab_focus (list);
  
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkListPeer_append
    (JNIEnv *env, jobject obj, jobjectArray items)
  {
    void *ptr;
!   GtkTreeView *list;
!   GtkTreeIter iter;
!   GtkTreeModel *list_store;
!   jint count;
!   jint i;
  
    ptr = NSA_GET_PTR (env, obj);
  
    count = (*env)->GetArrayLength (env, items);
  
    gdk_threads_enter ();
! 
!   list = TREE_VIEW_FROM_SW (ptr);
!   list_store = gtk_tree_view_get_model (list);
! 
!   for (i = 0; i < count; i++)
      {
        const char *text;
        jobject item;
*************** Java_gnu_java_awt_peer_gtk_GtkListPeer_a
*** 148,158 ****
        item = (*env)->GetObjectArrayElement (env, items, i);
  
        text = (*env)->GetStringUTFChars (env, item, NULL);
!       gtk_clist_append (list, (char **)&text);
        (*env)->ReleaseStringUTFChars (env, item, text);
      }
  
-   gtk_clist_columns_autosize (list);
    gdk_threads_leave ();
  }
  
--- 224,236 ----
        item = (*env)->GetObjectArrayElement (env, items, i);
  
        text = (*env)->GetStringUTFChars (env, item, NULL);
!       gtk_list_store_append (GTK_LIST_STORE (list_store), &iter);
!       gtk_list_store_set (GTK_LIST_STORE (list_store), &iter,
!                           COLUMN_STRING, text,
!                           -1);
        (*env)->ReleaseStringUTFChars (env, item, text);
      }
  
    gdk_threads_leave ();
  }
  
*************** Java_gnu_java_awt_peer_gtk_GtkListPeer_a
*** 162,173 ****
  {
    void *ptr;
    const char *str;
!     
    ptr = NSA_GET_PTR (env, obj);
    str = (*env)->GetStringUTFChars (env, text, NULL);
  
    gdk_threads_enter ();
!   gtk_clist_insert (CLIST_FROM_SW (ptr), index, (char **)&str);
    gdk_threads_leave ();
  
    (*env)->ReleaseStringUTFChars (env, text, str);
--- 240,265 ----
  {
    void *ptr;
    const char *str;
!   GtkTreeView *list;
!   GtkTreeIter iter;
!   GtkTreeModel *list_store;
! 
    ptr = NSA_GET_PTR (env, obj);
    str = (*env)->GetStringUTFChars (env, text, NULL);
  
    gdk_threads_enter ();
! 
!   list = TREE_VIEW_FROM_SW (ptr);
!   list_store = gtk_tree_view_get_model (list);
! 
!   if (index == -1)
!     gtk_list_store_append (GTK_LIST_STORE (list_store), &iter);
!   else
!     gtk_list_store_insert (GTK_LIST_STORE (list_store), &iter, index);
! 
!   gtk_list_store_set (GTK_LIST_STORE (list_store), &iter,
!                       COLUMN_STRING, str, -1);
! 
    gdk_threads_leave ();
  
    (*env)->ReleaseStringUTFChars (env, text, str);
*************** Java_gnu_java_awt_peer_gtk_GtkListPeer_d
*** 179,200 ****
    (JNIEnv *env, jobject obj, jint start, jint end)
  {
    void *ptr;
!   GtkCList *list;
    jint i;
      
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
-   list = CLIST_FROM_SW (ptr);
  
!   if (end == -1)		/* special case for removing all rows */
!     gtk_clist_clear (list);
    else
      {
!       gtk_clist_freeze (list);
!       for (i = end; i >= start; i--)
!         gtk_clist_remove (list, i);
!       gtk_clist_thaw (list);
      }
  
    gdk_threads_leave ();
--- 271,302 ----
    (JNIEnv *env, jobject obj, jint start, jint end)
  {
    void *ptr;
!   GtkTreeView *list;
!   GtkTreeIter iter;
!   GtkTreeModel *list_store;
    jint i;
+   jint num_items;
      
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
  
!   list = TREE_VIEW_FROM_SW (ptr);
!   list_store = gtk_tree_view_get_model (list);
! 
!   /* Special case: remove all rows. */
!   if (end == -1)
!     gtk_list_store_clear (GTK_LIST_STORE (list_store));
    else
      {
!       i = 0;
!       num_items = end - start + 1;
!       gtk_tree_model_iter_nth_child (list_store, &iter, NULL, start);
!       while (i < num_items)
! 	{
! 	  gtk_list_store_remove (GTK_LIST_STORE (list_store), &iter);
! 	  i++;
! 	}
      }
  
    gdk_threads_leave ();
*************** Java_gnu_java_awt_peer_gtk_GtkListPeer_s
*** 205,215 ****
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
      
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
!   gtk_clist_select_row (CLIST_FROM_SW (ptr), index, 0);
    gdk_threads_leave ();
  }
  
--- 307,323 ----
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
+   GtkTreeView *list;
+   GtkTreePath *path;
      
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
! 
!   list = TREE_VIEW_FROM_SW (ptr);
!   path = gtk_tree_path_new_from_indices (index, -1);
!   gtk_tree_view_set_cursor (list, path, NULL, FALSE);
! 
    gdk_threads_leave ();
  }
  
*************** Java_gnu_java_awt_peer_gtk_GtkListPeer_d
*** 218,257 ****
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
!   gtk_clist_unselect_row (CLIST_FROM_SW (ptr), index, 0);
    gdk_threads_leave ();
  }
  
  JNIEXPORT void JNICALL
  Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize
!   (JNIEnv *env, jobject obj, jint rows, jintArray jdims)
  {
    void *ptr;
    jint *dims;
!   GtkWidget *list;
!   GtkScrolledWindow *sw;
!   GtkRequisition myreq;
  
    dims = (*env)->GetIntArrayElements (env, jdims, NULL);
    dims[0] = dims[1] = 0;
  
-   if (rows < 3)
-     rows = 3;
- 
    ptr = NSA_GET_PTR (env, obj);
    gdk_threads_enter ();
  
!   list = GTK_WIDGET (CLIST_FROM_SW (ptr));
!   sw = GTK_SCROLLED_WINDOW (ptr);
  
-   gtk_widget_size_request(GTK_WIDGET(sw), &myreq);
-   dims[1]=myreq.height;
-   dims[0]=myreq.width;
-   
    gdk_threads_leave ();
  
    (*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
--- 326,386 ----
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
+   GtkTreeView *list;
+   GtkTreeSelection *selection;
+   GtkTreePath *path;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
! 
!   list = TREE_VIEW_FROM_SW (ptr);
!   selection = gtk_tree_view_get_selection (list);
!   path = gtk_tree_path_new_from_indices (index, -1);
!   gtk_tree_selection_unselect_path (selection, path);
! 
    gdk_threads_leave ();
  }
  
  JNIEXPORT void JNICALL
  Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize
!   (JNIEnv *env, jobject obj, jint rows, jint visible_rows, jintArray jdims)
  {
    void *ptr;
    jint *dims;
!   GtkRequisition current_req;
!   GtkRequisition natural_req;
  
    dims = (*env)->GetIntArrayElements (env, jdims, NULL);
    dims[0] = dims[1] = 0;
  
    ptr = NSA_GET_PTR (env, obj);
+ 
    gdk_threads_enter ();
  
!   /* Save the widget's current size request. */
!   gtk_widget_size_request (GTK_WIDGET (ptr), &current_req);
!       
!   /* Get the widget's "natural" size request. */
!   gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
!   gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
! 
!   /* Reset the widget's size request. */
!   gtk_widget_set_size_request (GTK_WIDGET (ptr),
!                                current_req.width, current_req.height);
! 
!   dims[0] = natural_req.width;
! 
!   /* Calculate the final height, by comparing the number of rows
!      in the list to the number of rows requested by the caller.
!      FIXME: Is there a GTK method that counts the number of rows
!      in the list? If so, we don't need to bring visible_rows from
!      the Java peer. */
!   if (rows == visible_rows)
!     dims[1] = natural_req.height;
!   else
!     dims[1] = natural_req.height / visible_rows * rows;
  
    gdk_threads_leave ();
  
    (*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
*************** Java_gnu_java_awt_peer_gtk_GtkListPeer_g
*** 263,293 ****
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
!   GtkCList *list;
!   jintArray selection;
!   jint *sel;
!   GList *child;
!   jint count, i;
  
    ptr = NSA_GET_PTR (env, obj);
    gdk_threads_enter ();
  
!   list = CLIST_FROM_SW (ptr);
!   count = g_list_length (list->selection);
  
!   selection = (*env)->NewIntArray (env, count);
!   sel = (*env)->GetIntArrayElements (env, selection, NULL);  
  
!   for (i = 0, child = list->selection; i < count; i++)
!     {
!       sel[i] = GPOINTER_TO_INT (child->data);
!       child = g_list_next (child);
!     }
!   gdk_threads_leave ();
  
!   (*env)->ReleaseIntArrayElements (env, selection, sel, 0);
  
!   return selection;
  }
  
  JNIEXPORT void JNICALL
--- 392,444 ----
    (JNIEnv *env, jobject obj)
  {
    void *ptr;
!   GtkTreeView *list;
!   GtkTreeSelection *selection;
!   jintArray result_array;
!   jint *result_array_iter;
!   GList *current_row;
!   GList *rows;
!   gint *indices;
!   jint count;
!   jint i;
  
    ptr = NSA_GET_PTR (env, obj);
+ 
    gdk_threads_enter ();
  
!   list = TREE_VIEW_FROM_SW (ptr);
!   selection = gtk_tree_view_get_selection (list);
!   count = gtk_tree_selection_count_selected_rows (selection);
!   if (count > 0)
!     {
!       current_row = rows = gtk_tree_selection_get_selected_rows (selection, NULL);
  
!       result_array = (*env)->NewIntArray (env, count);
!       result_array_iter = (*env)->GetIntArrayElements (env, result_array, NULL);
  
!       for (i = 0; i < count; i++)
!         {
!           indices = gtk_tree_path_get_indices (current_row->data);
!           result_array_iter[i] = indices ? indices[0] : -1;
!           current_row = g_list_next (current_row);
!         }
  
!       if (rows)
!         {
!           g_list_foreach (rows, (GFunc) gtk_tree_path_free, NULL);
!           g_list_free (rows);
!         }
  
!       gdk_threads_leave ();
! 
!       (*env)->ReleaseIntArrayElements (env, result_array, result_array_iter, 0);
! 
!       return result_array;
!     }
!   else
!     gdk_threads_leave ();
! 
!   return (jintArray) NULL;
  }
  
  JNIEXPORT void JNICALL
*************** Java_gnu_java_awt_peer_gtk_GtkListPeer_m
*** 295,305 ****
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
!   gtk_clist_moveto (CLIST_FROM_SW (ptr), index, 0, 0.5, 0.5);
    gdk_threads_leave ();
  }
  
--- 446,462 ----
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
+   GtkTreeView *list;
+   GtkTreePath *path;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
! 
!   list = TREE_VIEW_FROM_SW (ptr);
!   path = gtk_tree_path_new_from_indices (index, -1);
!   gtk_tree_view_scroll_to_cell (list, path, NULL, FALSE, 0.0, 0.0);
! 
    gdk_threads_leave ();
  }
  
*************** Java_gnu_java_awt_peer_gtk_GtkListPeer_s
*** 308,347 ****
    (JNIEnv *env, jobject obj, jboolean mode)
  {
    void *ptr;
!     
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
!   gtk_clist_set_selection_mode (CLIST_FROM_SW (ptr),
! 				mode ? GTK_SELECTION_MULTIPLE : 
! 				       GTK_SELECTION_SINGLE);
    gdk_threads_leave ();
  }
  
! static void
! item_select (GtkCList *list __attribute__((unused)),
! 	     int row, int col __attribute__((unused)),
! 	     GdkEventButton *event __attribute__((unused)), 
! 	     jobject peer_obj)
  {
!   //g_print ("select_row\n");
!   (*gdk_env)->CallVoidMethod (gdk_env, peer_obj,
! 			      postListItemEventID,
! 			      row,
! 			      (jint) AWT_ITEM_SELECTED);
! }
  
! static void
! item_unselect (GtkCList *list __attribute__((unused)),
! 	       int row,
! 	       int col __attribute__((unused)),
! 	       GdkEventButton *event __attribute__((unused)),
! 	       jobject peer_obj)
! {
!   //g_print ("unselect_row\n");
!   (*gdk_env)->CallVoidMethod (gdk_env, peer_obj,
! 			      postListItemEventID,
! 			      row,
! 	   		      (jint) AWT_ITEM_DESELECTED);
! }
  
--- 465,513 ----
    (JNIEnv *env, jobject obj, jboolean mode)
  {
    void *ptr;
!   GtkTreeView *list;
!   GtkTreeSelection *selection;
! 
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
! 
!   list = TREE_VIEW_FROM_SW (ptr);
!   selection = gtk_tree_view_get_selection (list);
!   gtk_tree_selection_set_mode (selection,
!                                mode ? GTK_SELECTION_MULTIPLE
!                                : GTK_SELECTION_SINGLE);
! 
    gdk_threads_leave ();
  }
  
! gboolean
! item_highlighted (GtkTreeSelection *selection __attribute__((unused)),
!                   GtkTreeModel *model,
!                   GtkTreePath *path,
!                   gboolean path_currently_selected,
!                   jobject peer)
  {
!   GtkTreeIter iter;
!   jint row;
!   gint *indices;
  
!   if (gtk_tree_model_get_iter (model, &iter, path))
!     {
!       indices = gtk_tree_path_get_indices (path);
!       row = indices ? indices[0] : -1;
  
+       if (!path_currently_selected)
+         (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                                     postListItemEventID,
+                                     row,
+                                     (jint) AWT_ITEM_SELECTED);
+       else
+         (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                                     postListItemEventID,
+                                     row,
+                                     (jint) AWT_ITEM_DESELECTED);
+     }
+ 
+   return TRUE;
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c	Tue Jan 13 20:54:46 2004
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c	Thu Jan  1 00:00:00 1970
***************
*** 1,209 ****
- /* gtkmainthread.c -- Native implementation of GtkMainThread
-    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., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA.
- 
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- 
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module.  An independent module is a module which is not derived from
- or based on this library.  If you modify this library, you may extend
- this exception to your version of the library, but you are not
- obligated to do so.  If you do not wish to do so, delete this
- exception statement from your version. */
- 
- 
- #include "gtkpeer.h"
- #include "gnu_java_awt_peer_gtk_GtkMainThread.h"
- #include "gthread-jni.h"
- 
- #ifdef JVM_SUN
-   struct state_table *native_state_table;
-   struct state_table *native_global_ref_table;
- #endif
- 
- jmethodID setBoundsCallbackID;
- 
- jmethodID postActionEventID;
- jmethodID postMenuActionEventID;
- jmethodID postMouseEventID;
- jmethodID postConfigureEventID;
- jmethodID postExposeEventID;
- jmethodID postKeyEventID;
- jmethodID postFocusEventID;
- jmethodID postAdjustmentEventID;
- jmethodID postItemEventID;
- jmethodID choicePostItemEventID;
- jmethodID postListItemEventID;
- jmethodID postTextEventID;
- jmethodID postWindowEventID;
- 
- JNIEnv *gdk_env;
- 
- #ifdef PORTABLE_NATIVE_SYNC
- JavaVM *gdk_vm;
- #endif
- 
- GtkWindowGroup *global_gtk_window_group;
- 
- /*
-  * Call gtk_init.  It is very important that this happen before any other
-  * gtk calls.
-  */
- 
- JNIEXPORT void JNICALL 
- Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz)
- {
-   int argc = 1;
-   char **argv;
-   char *homedir, *rcpath = NULL;
- /*    jclass gtkgenericpeer; */
-   jclass gtkcomponentpeer, gtkchoicepeer, gtkwindowpeer, gtkscrollbarpeer, gtklistpeer,
-     gtkmenuitempeer, gtktextcomponentpeer, window;
- 
-   NSA_INIT (env, clazz);
- 
-   /* GTK requires a program's argc and argv variables, and requires that they
-      be valid.  */
- 
-   argv = (char **) malloc (sizeof (char *) * 2);
-   argv[0] = "";
-   argv[1] = NULL;
- 
-   /* until we have JDK 1.2 JNI, assume we have a VM with threads that 
-      match what GLIB was compiled for */
- #ifdef PORTABLE_NATIVE_SYNC
-   (*env)->GetJavaVM( env, &gdk_vm );
-   g_thread_init ( &g_thread_jni_functions );
-   printf("called gthread init\n");
- #else
-   g_thread_init ( NULL );
- #endif
- 
-   /* From GDK 2.0 onwards we have to explicitly call gdk_threads_init */
-   gdk_threads_init();
- 
-   gtk_init (&argc, &argv);
- 
-   gdk_rgb_init ();
-   gtk_widget_set_default_colormap (gdk_rgb_get_cmap ());
-   gtk_widget_set_default_visual (gdk_rgb_get_visual ());
- 
-   /* Make sure queued calls don't get sent to GTK/GDK while 
-      we're shutting down. */
-   atexit (gdk_threads_enter);
- 
-   gdk_env = env;
-   gdk_event_handler_set ((GdkEventFunc)awt_event_handler, NULL, NULL);
- 
-   if ((homedir = getenv ("HOME")))
-     {
-       rcpath = (char *) malloc (strlen (homedir) + strlen (RC_FILE) + 2);
-       sprintf (rcpath, "%s/%s", homedir, RC_FILE);
-     }
-   
-   gtk_rc_parse ((rcpath) ? rcpath : RC_FILE);
- 
-   if (rcpath)
-     free (rcpath);
- 
-   free (argv);
- 
-   /* setup cached IDs for posting GTK events to Java */
- /*    gtkgenericpeer = (*env)->FindClass (env,  */
- /*  				      "gnu/java/awt/peer/gtk/GtkGenericPeer"); */
- 
-   window = (*env)->FindClass (env, "java/awt/Window");
- 
-   gtkcomponentpeer = (*env)->FindClass (env,
- 				     "gnu/java/awt/peer/gtk/GtkComponentPeer");
-   gtkchoicepeer = (*env)->FindClass (env,
- 				     "gnu/java/awt/peer/gtk/GtkChoicePeer");
-   gtkwindowpeer = (*env)->FindClass (env,
- 				     "gnu/java/awt/peer/gtk/GtkWindowPeer");
-   gtkscrollbarpeer = (*env)->FindClass (env, 
- 				     "gnu/java/awt/peer/gtk/GtkScrollbarPeer");
-   gtklistpeer = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GtkListPeer");
-   gtkmenuitempeer = (*env)->FindClass (env,
-                                      "gnu/java/awt/peer/gtk/GtkMenuItemPeer");
-   gtktextcomponentpeer = (*env)->FindClass (env,
-                                      "gnu/java/awt/peer/gtk/GtkTextComponentPeer");
- /*    gdkColor = (*env)->FindClass (env, */
- /*  				"gnu/java/awt/peer/gtk/GdkColor"); */
- /*    gdkColorID = (*env)->GetMethodID (env, gdkColor, "<init>", "(III)V"); */
- /*    postActionEventID = (*env)->GetMethodID (env, gtkgenericpeer,  */
- /*  					   "postActionEvent",  */
- /*  					   "(Ljava/lang/String;I)V"); */
- 
-   setBoundsCallbackID = (*env)->GetMethodID (env, window,
- 					     "setBoundsCallback",
- 					     "(IIII)V");
- 
-   postMenuActionEventID = (*env)->GetMethodID (env, gtkmenuitempeer,
- 					       "postMenuActionEvent",
- 					       "()V");
-   postMouseEventID = (*env)->GetMethodID (env, gtkcomponentpeer, 
- 					  "postMouseEvent", "(IJIIIIZ)V");
-   postConfigureEventID = (*env)->GetMethodID (env, gtkwindowpeer, 
- 					      "postConfigureEvent", "(IIII)V");
-   postWindowEventID = (*env)->GetMethodID (env, gtkwindowpeer,
- 					   "postWindowEvent",
- 					   "(ILjava/awt/Window;I)V");
-   postExposeEventID = (*env)->GetMethodID (env, gtkcomponentpeer, 
- 					  "postExposeEvent", "(IIII)V");
-   postKeyEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
- 					"postKeyEvent", "(IJIICI)V");
-   postFocusEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
- 					  "postFocusEvent", "(IZ)V");
-   postAdjustmentEventID = (*env)->GetMethodID (env, gtkscrollbarpeer,
- 					       "postAdjustmentEvent", 
- 					       "(II)V");
-   postItemEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
- 					 "postItemEvent", 
- 					 "(Ljava/lang/Object;I)V");
-   choicePostItemEventID = (*env)->GetMethodID (env, gtkchoicepeer,
- 					 "choicePostItemEvent", 
- 					 "(Ljava/lang/String;I)V");
-   postListItemEventID = (*env)->GetMethodID (env, gtklistpeer,
- 					     "postItemEvent",
- 					     "(II)V");
-   postTextEventID = (*env)->GetMethodID (env, gtktextcomponentpeer,
- 					     "postTextEvent",
- 					     "()V");
-   global_gtk_window_group = gtk_window_group_new ();
- }
- 
- /*
-  * Run gtk_main and block.
-  */ 
- JNIEXPORT void JNICALL 
- Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkMain
-   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)))
- {
-   gdk_threads_enter ();
-   gtk_main ();
-   gdk_threads_leave ();
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c	Tue Nov 30 23:59:12 2004
*************** exception statement from your version. *
*** 39,50 ****
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkMenuBarPeer.h"
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create
    (JNIEnv *env, jobject obj)
  {
    GtkWidget *widget;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
--- 39,50 ----
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkMenuBarPeer.h"
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create
    (JNIEnv *env, jobject obj)
  {
    GtkWidget *widget;
  
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 57,63 ****
    NSA_SET_PTR (env, obj, widget);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu
    (JNIEnv *env, jobject obj, jobject menupeer)
  {
    void *mbar, *menu;
--- 57,64 ----
    NSA_SET_PTR (env, obj, widget);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu
    (JNIEnv *env, jobject obj, jobject menupeer)
  {
    void *mbar, *menu;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 66,76 ****
    menu = NSA_GET_PTR (env, menupeer);
  
    gdk_threads_enter ();
!   gtk_menu_bar_append (GTK_MENU_BAR (mbar), GTK_WIDGET (menu));
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_delMenu
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
--- 67,102 ----
    menu = NSA_GET_PTR (env, menupeer);
  
    gdk_threads_enter ();
!   gtk_menu_shell_append (GTK_MENU_SHELL (mbar), GTK_WIDGET (menu));
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_nativeSetHelpMenu
!   (JNIEnv *env, jobject obj, jobject menupeer)
! {
!   static void *helpmenu;
!   void *mbar, *menu;
!   GList *list;
! 
!   mbar = NSA_GET_PTR (env, obj);
!   menu = NSA_GET_PTR (env, menupeer);
! 
!   gdk_threads_enter ();
!   if (helpmenu != NULL)
!     {
!       list = gtk_container_children (GTK_CONTAINER (mbar));
!       while (list != NULL && list->data != helpmenu)
!         list = list->next;
!       if (list != NULL && list->data == helpmenu)
!         gtk_container_remove (GTK_CONTAINER (mbar), GTK_WIDGET (list->data));
!     }
!   helpmenu = menu;
!   gdk_threads_leave ();
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_delMenu
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.c	Tue Jan 27 19:29:57 2004
***************
*** 0 ****
--- 1,56 ----
+ /* gtkmenucomponentpeer.c -- Native implementation of GtkMenuComponentPeer
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ #include "gtkpeer.h"
+ #include "gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h"
+ 
+ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuComponentPeer_dispose
+   (JNIEnv *env, jobject obj)
+ {
+   /* For MenuComponents and its subclasses, the widgets are
+      automatically destroyed by Gtk when the parent MenuBar
+      is removed from the Frame. So we avoid the widget
+      destruction in GtkGenericPeer dispose() by overriding
+      it here. */
+      
+   /* However, references to the Java objects still exist in the
+      state tables, so we still have to remove those. */
+      
+   NSA_DEL_GLOBAL_REF (env, obj);
+   NSA_DEL_PTR (env, obj);  
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c	Wed Feb 16 20:03:26 2005
*************** exception statement from your version. *
*** 41,72 ****
  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  
  static void item_activate (GtkMenuItem *item __attribute__((unused)),
!                            jobject *peer_obj);
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create
    (JNIEnv *env, jobject obj, jstring label)
  {
    GtkWidget *widget;
    const char *str;
-   jobject *gref;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
-   gref = NSA_GET_GLOBAL_REF (env, obj);
  
    str = (*env)->GetStringUTFChars (env, label, NULL);
  
    gdk_threads_enter ();
!   
!   if (strcmp (str, "-") == 0) /* "-" signals that we need a separator */
      widget = gtk_menu_item_new ();
    else
      widget = gtk_menu_item_new_with_label (str);
  
-   /* Connect activate hook */
-   g_signal_connect (G_OBJECT (widget), "activate", 
- 		      GTK_SIGNAL_FUNC (item_activate), *gref);
- 
    gtk_widget_show (widget);
  
    gdk_threads_leave ();
--- 41,67 ----
  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  
  static void item_activate (GtkMenuItem *item __attribute__((unused)),
!                            jobject peer_obj);
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create
    (JNIEnv *env, jobject obj, jstring label)
  {
    GtkWidget *widget;
    const char *str;
  
    NSA_SET_GLOBAL_REF (env, obj);
  
    str = (*env)->GetStringUTFChars (env, label, NULL);
  
    gdk_threads_enter ();
! 
!   /* "-" signals that we need a separator. */
!   if (strcmp (str, "-") == 0)
      widget = gtk_menu_item_new ();
    else
      widget = gtk_menu_item_new_with_label (str);
  
    gtk_widget_show (widget);
  
    gdk_threads_leave ();
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 76,86 ****
    NSA_SET_PTR (env, obj, widget);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_setLabel
    (JNIEnv *env, jobject obj, jstring label)
  {
    void *ptr;
    const char *str;
  
    ptr = NSA_GET_PTR (env, obj);
  
--- 71,150 ----
    NSA_SET_PTR (env, obj, widget);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_connectSignals
!   (JNIEnv *env, jobject obj)
! {
!   void *ptr = NSA_GET_PTR (env, obj);
!   jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
!   g_assert (gref);
!   
!   gdk_threads_enter ();
!   
!   g_signal_connect (G_OBJECT (ptr), "activate",
!                     G_CALLBACK (item_activate), *gref);
! 
!   gdk_threads_leave ();
! }
! 
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_gtkWidgetModifyFont
!   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
! {
!   const char *font_name;
!   void *ptr;
!   GtkWidget *label;
!   PangoFontDescription *font_desc;
! 
!   ptr = NSA_GET_PTR (env, obj);
! 
!   font_name = (*env)->GetStringUTFChars (env, name, NULL);
! 
!   gdk_threads_enter();
! 
!   label = gtk_bin_get_child (GTK_BIN (ptr));
! 
!   if (label)
!     {
!       font_desc = pango_font_description_from_string (font_name);
!       pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
! 
!       if (style & AWT_STYLE_BOLD)
!         pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
! 
!       if (style & AWT_STYLE_ITALIC)
!         pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
! 
!       gtk_widget_modify_font (GTK_WIDGET(label), font_desc);
! 
!       pango_font_description_free (font_desc);
!     }
! 
!   gdk_threads_leave();
! 
!   (*env)->ReleaseStringUTFChars (env, name, font_name);
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_setEnabled
!   (JNIEnv *env, jobject obj, jboolean enabled)
! {
!   void *ptr;
! 
!   ptr = NSA_GET_PTR (env, obj);
! 
!   gdk_threads_enter ();
!   gtk_widget_set_sensitive (GTK_WIDGET (ptr), enabled);
!   gdk_threads_leave ();
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_setLabel
    (JNIEnv *env, jobject obj, jstring label)
  {
    void *ptr;
    const char *str;
+   GtkAccelLabel *accel_label;
  
    ptr = NSA_GET_PTR (env, obj);
  
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 88,102 ****
  
    gdk_threads_enter ();
  
!   if (strcmp (str, "-") == 0) /* "-" signals that we need a separator */
!     gtk_container_remove (GTK_CONTAINER (ptr), GTK_BIN (ptr)->child);
!   else
!     {
!       GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (GTK_BIN (ptr)->child);
  
!       gtk_label_set_text (GTK_LABEL (accel_label), str);
!       gtk_accel_label_refetch (accel_label);
!     }
  
    gdk_threads_leave ();
  
--- 152,161 ----
  
    gdk_threads_enter ();
  
!   accel_label = GTK_ACCEL_LABEL (GTK_BIN (ptr)->child);
  
!   gtk_label_set_text (GTK_LABEL (accel_label), str);
!   gtk_accel_label_refetch (accel_label);
  
    gdk_threads_leave ();
  
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 104,112 ****
  }
  
  static void
! item_activate (GtkMenuItem *item __attribute__((unused)), jobject *peer_obj)
  {
!   (*gdk_env)->CallVoidMethod (gdk_env, *peer_obj,
  			      postMenuActionEventID);
  }
- 
--- 163,170 ----
  }
  
  static void
! item_activate (GtkMenuItem *item __attribute__((unused)), jobject peer_obj)
  {
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj,
  			      postMenuActionEventID);
  }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c	Tue Nov 30 23:59:12 2004
***************
*** 1,5 ****
  /* gtkmenupeer.c -- Native implementation of GtkMenuPeer
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtkmenupeer.c -- Native implementation of GtkMenuPeer
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 39,56 ****
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkMenuPeer.h"
  
! static void
! accel_attach (GtkMenuItem *menu_item,
! 	      gpointer *user_data __attribute__((unused)))
! {
!   GtkAccelGroup *accel;
! 
!   accel = gtk_menu_get_accel_group (GTK_MENU (menu_item->submenu));
!   _gtk_accel_group_attach (accel, 
!     G_OBJECT (gtk_widget_get_toplevel (GTK_WIDGET(menu_item))));
! }
! 
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_setupAccelGroup
    (JNIEnv *env, jobject obj, jobject parent)
  {
    void *ptr1, *ptr2;
--- 39,46 ----
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkMenuPeer.h"
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuPeer_setupAccelGroup
    (JNIEnv *env, jobject obj, jobject parent)
  {
    void *ptr1, *ptr2;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 62,75 ****
      {
        gtk_menu_set_accel_group (GTK_MENU (GTK_MENU_ITEM (ptr1)->submenu), 
  				gtk_accel_group_new ());
- 
-       if (GTK_WIDGET_REALIZED (GTK_WIDGET (ptr1)))
- 	accel_attach (GTK_MENU_ITEM (ptr1), NULL);
-       else
- 	g_signal_connect (G_OBJECT (ptr1),
- 			    "realize",
- 			    GTK_SIGNAL_FUNC (accel_attach), 
- 			    NULL);
      }
    else
      {
--- 52,57 ----
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 86,98 ****
  }
  
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create
    (JNIEnv *env, jobject obj, jstring label)
  {
!   GtkWidget *menu_title, *menu;
    const char *str;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    str = (*env)->GetStringUTFChars (env, label, NULL);
--- 68,80 ----
  }
  
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create
    (JNIEnv *env, jobject obj, jstring label)
  {
!   GtkWidget *menu_title, *menu, *toplevel;
    const char *str;
  
    NSA_SET_GLOBAL_REF (env, obj);
  
    str = (*env)->GetStringUTFChars (env, label, NULL);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 101,110 ****
    
    menu = gtk_menu_new ();
    
!   menu_title = gtk_menu_item_new_with_label (str);
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_title), menu);
  
!   gtk_widget_show (menu);
    gtk_widget_show (menu_title);
  
    NSA_SET_PTR (env, obj, menu_title);
--- 83,103 ----
    
    menu = gtk_menu_new ();
    
!   if (str != NULL)
!     menu_title = gtk_menu_item_new_with_label (str);
!   else
!     menu_title = gtk_menu_item_new();
! 
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_title), menu);
  
!   /* Allow this menu to grab the pointer. */
!   toplevel = gtk_widget_get_toplevel (menu);
!   if (GTK_IS_WINDOW (toplevel))
!     {
!       gtk_window_group_add_window (global_gtk_window_group,
!                                    GTK_WINDOW(toplevel));
!     }
! 
    gtk_widget_show (menu_title);
  
    NSA_SET_PTR (env, obj, menu_title);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 114,137 ****
    (*env)->ReleaseStringUTFChars (env, label, str);
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem
    (JNIEnv *env, jobject obj, jobject menuitempeer, jint key, jboolean shift)
  {
    void *ptr1, *ptr2;
!   GtkMenu *menu;
  
    ptr1 = NSA_GET_PTR (env, obj);
    ptr2 = NSA_GET_PTR (env, menuitempeer);
  
    gdk_threads_enter ();
  
!   menu = GTK_MENU (GTK_MENU_ITEM (ptr1)->submenu);
!   gtk_menu_append (menu, GTK_WIDGET (ptr2));
  
    if (key)
      {
        gtk_widget_add_accelerator (GTK_WIDGET (ptr2), "activate",
! 				  gtk_menu_get_accel_group (menu), key, 
  				  (GDK_CONTROL_MASK
  				   | ((shift) ? GDK_SHIFT_MASK : 0)), 
  				  GTK_ACCEL_VISIBLE);
--- 107,150 ----
    (*env)->ReleaseStringUTFChars (env, label, str);
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addTearOff
!   (JNIEnv *env, jobject obj)
! {
!   void *ptr1;
!   GtkWidget *menu, *item;
! 
!   ptr1 = NSA_GET_PTR (env, obj);
! 
!   gdk_threads_enter ();
! 
!   menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (ptr1));
!   item = gtk_tearoff_menu_item_new ();
!   gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
!   gtk_widget_show (item);
! 
!   gdk_threads_leave ();
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem
    (JNIEnv *env, jobject obj, jobject menuitempeer, jint key, jboolean shift)
  {
    void *ptr1, *ptr2;
!   GtkWidget *menu;
  
    ptr1 = NSA_GET_PTR (env, obj);
    ptr2 = NSA_GET_PTR (env, menuitempeer);
  
    gdk_threads_enter ();
  
!   menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(ptr1));
!   gtk_menu_shell_append (GTK_MENU_SHELL(menu), GTK_WIDGET (ptr2));
  
    if (key)
      {
        gtk_widget_add_accelerator (GTK_WIDGET (ptr2), "activate",
! 				  gtk_menu_get_accel_group (GTK_MENU (menu)), key, 
  				  (GDK_CONTROL_MASK
  				   | ((shift) ? GDK_SHIFT_MASK : 0)), 
  				  GTK_ACCEL_VISIBLE);
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 140,146 ****
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_delItem
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
--- 153,160 ----
    gdk_threads_leave ();
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkMenuPeer_delItem
    (JNIEnv *env, jobject obj, jint index)
  {
    void *ptr;
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c	Tue Nov 30 23:59:12 2004
*************** JNIEXPORT void JNICALL 
*** 44,138 ****
  Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create
    (JNIEnv *env, jobject obj)
  {
-   gpointer widget;
- 
-   /* Create global reference and save it for future use */
-   NSA_SET_GLOBAL_REF (env, obj);
- 
-   gdk_threads_enter ();
-   
-   widget = gtk_layout_new (NULL, NULL);
- 
-   gdk_threads_leave ();
- 
-   NSA_SET_PTR (env, obj, widget);
- }
- 
- typedef struct _GtkLayoutChild   GtkLayoutChild;
- 
- struct _GtkLayoutChild {
    GtkWidget *widget;
-   gint x;
-   gint y;
- };
- 
- JNIEXPORT void JNICALL 
- Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectJObject
-   (JNIEnv *env, jobject obj)
- {
-   void *ptr;
- 
-   ptr = NSA_GET_PTR (env, obj);
- 
-   gdk_threads_enter ();
-   gtk_widget_realize (GTK_WIDGET (ptr));
-   connect_awt_hook (env, obj, 1, GTK_LAYOUT (ptr)->bin_window);
- 
-   gdk_threads_leave ();
- }
- 
- JNIEXPORT void JNICALL 
- Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals
-   (JNIEnv *env, jobject obj)
- {
-   void *ptr = NSA_GET_PTR (env, obj);
-   jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
-   g_assert (gref);
- 
-   gdk_threads_enter ();
-   gtk_widget_realize (GTK_WIDGET (ptr));
- 
-   /* FIXME: If we don't need this then remove this method. */
- /*    g_signal_connect (G_OBJECT (ptr), "size_request", GTK_SIGNAL_FUNC (sr), */
- /*  		      NULL); */
-   gdk_threads_leave ();
- 
-   /* Connect the superclass signals.  */
-   Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
- }
- 
- /* FIXME: The following doesn't seem to be used.
-    Is not declared as a native function in GtkPanelPeer.java */
- /*
-  * Make a new panel.
-  */
- JNIEXPORT void JNICALL 
- Java_gnu_java_awt_peer_gtk_GtkPanelPeer_gtkPanelNew
-     (JNIEnv *env, jobject obj, jobject parent_obj)
- {
-   GtkWidget *layout;
-   void *parent;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
-   parent = NSA_GET_PTR (env, parent_obj);
- 
    gdk_threads_enter ();
- 
-   layout = gtk_layout_new (NULL, NULL);
    
!   set_parent (layout, GTK_CONTAINER (parent));
! 
!   gtk_widget_realize (layout);
  
!   connect_awt_hook (env, obj, 1, GTK_LAYOUT (layout)->bin_window);
  
!   set_visible (layout, 1);
  
    gdk_threads_leave ();
  
!   NSA_SET_PTR (env, obj, layout);
  }
- 
- 
--- 44,62 ----
  Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create
    (JNIEnv *env, jobject obj)
  {
    GtkWidget *widget;
  
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
    
!   widget = gtk_fixed_new ();
  
!   gtk_fixed_set_has_window (GTK_FIXED (widget), TRUE);
  
!   GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
  
    gdk_threads_leave ();
  
!   NSA_SET_PTR (env, obj, widget);
  }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c	Wed Oct  8 15:49:33 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c	Tue Nov 30 23:59:12 2004
***************
*** 1,5 ****
  /* gtkpopupmenupeer.c -- Native implementation of GtkPopupMenuPeer
!    Copyright (C) 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtkpopupmenupeer.c -- Native implementation of GtkPopupMenuPeer
!    Copyright (C) 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** struct pos
*** 45,51 ****
    gint y;
  };
  
! void 
  menu_pos (GtkMenu *menu __attribute__((unused)),
  	  gint *x, gint *y,
  	  gboolean *push_in,
--- 45,51 ----
    gint y;
  };
  
! static void 
  menu_pos (GtkMenu *menu __attribute__((unused)),
  	  gint *x, gint *y,
  	  gboolean *push_in,
*************** menu_pos (GtkMenu *menu __attribute__((u
*** 58,64 ****
    *push_in = TRUE;
  }
  
! JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_show
    (JNIEnv *env, jobject obj, jint x, jint y, jlong time)
  {
    void *ptr;
--- 58,65 ----
    *push_in = TRUE;
  }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_show
    (JNIEnv *env, jobject obj, jint x, jint y, jlong time)
  {
    void *ptr;
*************** JNIEXPORT void JNICALL Java_gnu_java_awt
*** 72,78 ****
    
    gdk_threads_enter ();
    gtk_menu_popup (GTK_MENU (GTK_MENU_ITEM (ptr)->submenu), 
! 		  NULL, NULL, menu_pos, p, 3, time);
    gdk_threads_leave ();
  
    g_free (p);
--- 73,79 ----
    
    gdk_threads_enter ();
    gtk_menu_popup (GTK_MENU (GTK_MENU_ITEM (ptr)->submenu), 
! 		  NULL, NULL, menu_pos, p, 0, time);
    gdk_threads_leave ();
  
    g_free (p);
*************** Java_gnu_java_awt_peer_gtk_GtkPopupMenuP
*** 91,97 ****
--- 92,101 ----
    gdk_threads_enter ();
    menu = GTK_MENU (GTK_MENU_ITEM (ptr1)->submenu);
    gtk_menu_set_accel_group (menu, gtk_accel_group_new ());
+   /* FIXME: update this to use GTK-2.4 GtkActions. */
+ #if 0
    _gtk_accel_group_attach (gtk_menu_get_accel_group (menu),
  			   G_OBJECT (gtk_widget_get_toplevel (ptr2)));
+ #endif
    gdk_threads_leave ();
  }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c	Wed Feb 16 20:03:26 2005
*************** exception statement from your version. *
*** 40,111 ****
  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include "gnu_java_awt_peer_gtk_GtkScrollbarPeer.h"
  
! struct range_scrollbar
! {
!   GtkRange *range;
!   jobject *scrollbar;
! };
! 
! static void 
! post_change_event (GtkRange *range,
! 		   struct range_scrollbar *rs)
! {
!   GtkAdjustment *adj;
!   adj = gtk_range_get_adjustment (range);
!   (*gdk_env)->CallVoidMethod (gdk_env, *(rs->scrollbar), postAdjustmentEventID,
! 			      AWT_ADJUSTMENT_TRACK, (jint) adj->value);
!   
! }
! 
! static void 
! post_adjustment_event (GtkRange *range, GtkScrollType scroll, 
! 		       struct range_scrollbar *rs)
! {
!   jint type;
!   GtkAdjustment *adj;
! 
!   adj = gtk_range_get_adjustment (range);
! 
!   switch (scroll)
!     {
!     case GTK_SCROLL_STEP_UP:
!     case GTK_SCROLL_STEP_RIGHT:
!     case GTK_SCROLL_STEP_FORWARD:
!       type = AWT_ADJUSTMENT_UNIT_INCREMENT;
!       break;
!     case GTK_SCROLL_STEP_DOWN:
!     case GTK_SCROLL_STEP_LEFT:
!     case GTK_SCROLL_STEP_BACKWARD:
!       type = AWT_ADJUSTMENT_UNIT_DECREMENT;
!       break;
!     case GTK_SCROLL_PAGE_UP:
!     case GTK_SCROLL_PAGE_RIGHT:
!     case GTK_SCROLL_PAGE_FORWARD:
!       type = AWT_ADJUSTMENT_BLOCK_INCREMENT;
!       break;
!     case GTK_SCROLL_PAGE_DOWN:
!     case GTK_SCROLL_PAGE_LEFT:
!     case GTK_SCROLL_PAGE_BACKWARD:
!       type = AWT_ADJUSTMENT_BLOCK_DECREMENT;
!       break;
!     case GTK_SCROLL_JUMP:
!     case GTK_SCROLL_NONE:  /* Apparently generated when slider is dragged. */
!       type = AWT_ADJUSTMENT_TRACK;
!       break;
!     default: /* Can this happen?  If so, is this right? */
!       return;
!     }
!   
!   (*gdk_env)->CallVoidMethod (gdk_env, *(rs->scrollbar), postAdjustmentEventID,
! 			      type, (jint) adj->value);
! }
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
  (JNIEnv *env, jobject obj, jint orientation, jint value, 
   jint min, jint max, jint step_incr, jint page_incr, jint visible_amount)
  {
!   GtkWidget *sb;
    GtkObject *adj;
  
    /* Create global reference and save it for future use */
--- 40,53 ----
  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include "gnu_java_awt_peer_gtk_GtkScrollbarPeer.h"
  
! static void post_change_event (GtkRange *range, jobject peer);
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
  (JNIEnv *env, jobject obj, jint orientation, jint value, 
   jint min, jint max, jint step_incr, jint page_incr, jint visible_amount)
  {
!   GtkWidget *scrollbar;
    GtkObject *adj;
  
    /* Create global reference and save it for future use */
*************** Java_gnu_java_awt_peer_gtk_GtkScrollbarP
*** 113,172 ****
  
    gdk_threads_enter ();
    
!   adj = gtk_adjustment_new (value, min, max, 
! 			    step_incr, page_incr, 
! 			    visible_amount);
  
!   sb = (orientation) ? gtk_vscrollbar_new (GTK_ADJUSTMENT (adj)) :
                         gtk_hscrollbar_new (GTK_ADJUSTMENT (adj));
  
!   gdk_threads_leave ();
! 
!   NSA_SET_PTR (env, obj, sb);
! }
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectJObject
!   (JNIEnv *env, jobject obj)
! {
!   void *ptr;
! 
!   ptr = NSA_GET_PTR (env, obj);
! 
!   gdk_threads_enter ();
! 
!   gtk_widget_realize (GTK_WIDGET (ptr));
! 
!   connect_awt_hook (env, obj, 1, GTK_SCROLLBAR (ptr)->range);
  
    gdk_threads_leave ();
  }
  
  JNIEXPORT void JNICALL
  Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals
    (JNIEnv *env, jobject obj)
  {
-   struct range_scrollbar *rs;
    void *ptr = NSA_GET_PTR (env, obj);
    jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
    g_assert (gref);
  
-   rs = (struct range_scrollbar *) malloc (sizeof (struct range_scrollbar));
- 
    gdk_threads_enter ();
  
!   gtk_widget_realize (GTK_WIDGET (ptr));
! 
!   rs->range = GTK_RANGE (ptr);
!   rs->scrollbar = gref;
! 
!   g_signal_connect (G_OBJECT (GTK_RANGE (ptr)), 
! 		      "move-slider", 
! 		      GTK_SIGNAL_FUNC (post_adjustment_event), rs);
! 
!   g_signal_connect (G_OBJECT (GTK_RANGE (ptr)), 
! 		      "value-changed", 
! 		      GTK_SIGNAL_FUNC (post_change_event), rs);
  
    gdk_threads_leave ();
  
--- 55,94 ----
  
    gdk_threads_enter ();
    
!   adj = gtk_adjustment_new ((gdouble) value,
!                             (gdouble) min,
!                             (gdouble) max,
! 			    (gdouble) step_incr,
!                             (gdouble) page_incr,
! 			    (gdouble) visible_amount);
  
!   scrollbar = (orientation) ? gtk_vscrollbar_new (GTK_ADJUSTMENT (adj)) :
                         gtk_hscrollbar_new (GTK_ADJUSTMENT (adj));
  
!   GTK_RANGE (scrollbar)->round_digits = 0;
!   /* These calls seem redundant but they are not.  They clamp values
!      so that the slider's entirety is always between the two
!      steppers. */
!   gtk_range_set_range (GTK_RANGE (scrollbar), (gdouble) min, (gdouble) max);
!   gtk_range_set_value (GTK_RANGE (scrollbar), (gdouble) value);
  
    gdk_threads_leave ();
+ 
+   NSA_SET_PTR (env, obj, scrollbar);
  }
  
  JNIEXPORT void JNICALL
  Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals
    (JNIEnv *env, jobject obj)
  {
    void *ptr = NSA_GET_PTR (env, obj);
    jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
    g_assert (gref);
  
    gdk_threads_enter ();
  
!   g_signal_connect (G_OBJECT (ptr), "value-changed",
!                     G_CALLBACK (post_change_event), *gref);
  
    gdk_threads_leave ();
  
*************** Java_gnu_java_awt_peer_gtk_GtkScrollbarP
*** 186,193 ****
  
    gdk_threads_enter ();
  
!   adj = GTK_RANGE (ptr)->adjustment;
!   adj->step_increment = amount;
    gtk_adjustment_changed (adj);
  
    gdk_threads_leave ();
--- 108,115 ----
  
    gdk_threads_enter ();
  
!   adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
!   adj->step_increment = (gdouble) amount;
    gtk_adjustment_changed (adj);
  
    gdk_threads_leave ();
*************** Java_gnu_java_awt_peer_gtk_GtkScrollbarP
*** 204,211 ****
  
    gdk_threads_enter ();
  
!   adj = GTK_RANGE (ptr)->adjustment;
!   adj->page_increment = amount;
    gtk_adjustment_changed (adj);
  
    gdk_threads_leave ();
--- 126,133 ----
  
    gdk_threads_enter ();
  
!   adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
!   adj->page_increment = (gdouble) amount;
    gtk_adjustment_changed (adj);
  
    gdk_threads_leave ();
*************** Java_gnu_java_awt_peer_gtk_GtkScrollbarP
*** 222,233 ****
  
    gdk_threads_enter ();
  
!   adj = GTK_RANGE (ptr)->adjustment;
!   adj->value = value;
!   adj->page_size = visible;
!   adj->lower = min;
!   adj->upper = max;
    gtk_adjustment_changed (adj);
  
    gdk_threads_leave ();
  }
--- 144,165 ----
  
    gdk_threads_enter ();
  
!   adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
!   adj->page_size = (gdouble) visible;
! 
!   gtk_range_set_range (GTK_RANGE (ptr), (gdouble) min, (gdouble) max);
!   gtk_range_set_value (GTK_RANGE (ptr), (gdouble) value);
! 
    gtk_adjustment_changed (adj);
  
    gdk_threads_leave ();
  }
+ 
+ static void
+ post_change_event (GtkRange *range, jobject peer)
+ {
+   GtkAdjustment *adj;
+   adj = gtk_range_get_adjustment (range);
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer, postAdjustmentEventID,
+                               AWT_ADJUSTMENT_TRACK, (jint) adj->value);
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c	Tue Jan 13 20:58:33 2004
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c	Tue Nov 30 23:59:12 2004
*************** Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
*** 54,59 ****
--- 54,61 ----
  
    text = gtk_text_view_new ();
    gtk_widget_set_size_request (text, textview_width, textview_height);
+   gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW (text), TRUE);
+ 
    gtk_widget_show (text);
  
    sw = gtk_scrolled_window_new (NULL, NULL);
*************** Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
*** 139,145 ****
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont
    (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
  {
    const char *font_name;
--- 141,147 ----
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetModifyFont
    (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
  {
    const char *font_name;
*************** Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
*** 156,162 ****
    gdk_threads_enter();
  
    font_desc = pango_font_description_from_string (font_name);
!   pango_font_description_set_size (font_desc, size * PANGO_SCALE);
  
    if (style & AWT_STYLE_BOLD)
      pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
--- 158,164 ----
    gdk_threads_enter();
  
    font_desc = pango_font_description_from_string (font_name);
!   pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
  
    if (style & AWT_STYLE_BOLD)
      pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
*************** Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
*** 164,170 ****
    if (style & AWT_STYLE_ITALIC)
      pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
  
!   gtk_widget_modify_font (GTK_WIDGET(text), font_desc);
  
    pango_font_description_free (font_desc);
  
--- 166,172 ----
    if (style & AWT_STYLE_ITALIC)
      pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
  
!   gtk_widget_modify_font (GTK_WIDGET (text), font_desc);
  
    pango_font_description_free (font_desc);
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
*** 173,178 ****
--- 175,198 ----
    (*env)->ReleaseStringUTFChars (env, name, font_name);
  }
  
+ JNIEXPORT void JNICALL 
+ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetRequestFocus
+   (JNIEnv *env, jobject obj)
+ {
+   void *ptr;
+   GtkWidget *text;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+   
+   gdk_threads_enter ();
+ 
+   text = GTK_WIDGET (TEXT_FROM_SW (ptr));
+ 
+   gtk_widget_grab_focus (text);
+ 
+   gdk_threads_leave ();
+ }
+ 
  JNIEXPORT jint JNICALL
  Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight
    (JNIEnv *env, jobject obj)
*************** Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
*** 188,196 ****
    gdk_threads_enter ();
    sw = GTK_SCROLLED_WINDOW (ptr);
  
!   gtk_widget_size_request (sw->hscrollbar, &requisition);
!   gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
!   height = requisition.height + spacing;
  
    gdk_threads_leave ();
  
--- 208,219 ----
    gdk_threads_enter ();
    sw = GTK_SCROLLED_WINDOW (ptr);
  
!   if (sw)
!     {
!       gtk_widget_size_request (sw->hscrollbar, &requisition);
!       gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
!       height = requisition.height + spacing;
!     }
  
    gdk_threads_leave ();
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
*** 212,220 ****
    gdk_threads_enter ();
    sw = GTK_SCROLLED_WINDOW (ptr);
  
!   gtk_widget_size_request (sw->vscrollbar, &requisition);
!   gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
!   width = requisition.width + spacing;
  
    gdk_threads_leave ();
  
--- 235,246 ----
    gdk_threads_enter ();
    sw = GTK_SCROLLED_WINDOW (ptr);
  
!   if (sw)
!     {
!       gtk_widget_size_request (sw->vscrollbar, &requisition);
!       gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
!       width = requisition.width + spacing;
!     }
  
    gdk_threads_leave ();
  
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c	Wed Feb 16 20:03:27 2005
***************
*** 1,5 ****
  /* gtktextcomponentpeer.c -- Native implementation of GtkTextComponentPeer
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtktextcomponentpeer.c -- Native implementation of GtkTextComponentPeer
!    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 40,49 ****
  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include "gnu_java_awt_peer_gtk_GtkTextComponentPeer.h"
  
- static void textcomponent_commit_cb (GtkIMContext *context,
-                                  const gchar  *str,
-                                  jobject peer);
- 
  static void textcomponent_changed_cb (GtkEditable *editable,
                                    jobject peer);
  
--- 40,45 ----
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 61,69 ****
  
    if (GTK_IS_ENTRY(ptr))
      {
-       g_signal_connect (GTK_ENTRY (ptr)->im_context, "commit",
-                         G_CALLBACK (textcomponent_commit_cb), *gref);
- 
        g_signal_connect (GTK_EDITABLE (ptr), "changed",
                          G_CALLBACK (textcomponent_changed_cb), *gref);
  
--- 57,62 ----
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 85,93 ****
  
        if (text)
  	{
-           g_signal_connect (text->im_context, "commit",
-                             G_CALLBACK (textcomponent_commit_cb), *gref);
- 
            buf = gtk_text_view_get_buffer (text);
            if (buf)
              g_signal_connect (buf, "changed",
--- 78,83 ----
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 112,119 ****
  {
    void *ptr;
    int pos = 0;
!   GtkEditable *editable;    // type of GtkEntry    (TextField)
!   GtkWidget *text = NULL;   // type of GtkTextView (TextArea)
    GtkTextBuffer *buf;
    GtkTextMark *mark;
    GtkTextIter iter;
--- 102,109 ----
  {
    void *ptr;
    int pos = 0;
!   GtkEditable *editable;
!   GtkWidget *text = NULL;
    GtkTextBuffer *buf;
    GtkTextMark *mark;
    GtkTextIter iter;
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 157,166 ****
    (JNIEnv *env, jobject obj, jint pos)
  {
    void *ptr;
!   GtkEditable *editable;    // type of GtkEntry    (TextField)
!   GtkWidget *text = NULL;   // type of GtkTextView (TextArea)
    GtkTextBuffer *buf;
    GtkTextIter iter;
  
    ptr = NSA_GET_PTR (env, obj);
  
--- 147,159 ----
    (JNIEnv *env, jobject obj, jint pos)
  {
    void *ptr;
!   GtkEditable *editable;
!   GtkWidget *text = NULL;
    GtkTextBuffer *buf;
    GtkTextIter iter;
+   GtkTextMark *oldmark;
+   GtkTextIter olditer;
+   int oldpos;
  
    ptr = NSA_GET_PTR (env, obj);
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 184,191 ****
--- 177,200 ----
        if (text)
  	{
  	  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+ 
+ 	  /* Save old position. */
+ 	  oldmark = gtk_text_buffer_get_insert (buf);
+ 	  gtk_text_buffer_get_iter_at_mark (buf, &olditer, oldmark);
+ 	  oldpos = gtk_text_iter_get_offset (&olditer);
+ 
+ 	  /* Move to new position. */
  	  gtk_text_buffer_get_iter_at_offset (buf, &iter, pos);
  	  gtk_text_buffer_place_cursor (buf, &iter);
+ 
+ 	  /* Scroll to new position. Alignment is determined
+ 	     comparing the new position to the old position. */
+ 	  if (oldpos > pos)
+ 	    gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (text),
+ 	                                  &iter, 0, TRUE, 0, 0);
+ 	  else if (oldpos < pos)
+ 	    gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (text),
+ 	                                  &iter, 0, TRUE, 1, 1);
  	}
      }
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 198,205 ****
  {
    void *ptr;
    int pos = 0;
!   GtkEditable *editable;    // type of GtkEntry    (TextField)
!   GtkWidget *text = NULL;   // type of GtkTextView (TextArea)
    GtkTextBuffer *buf;
    GtkTextIter start;
    GtkTextIter end;
--- 207,214 ----
  {
    void *ptr;
    int pos = 0;
!   GtkEditable *editable;
!   GtkWidget *text = NULL;
    GtkTextBuffer *buf;
    GtkTextIter start;
    GtkTextIter end;
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 255,262 ****
  {
    void *ptr;
    int pos = 0;
!   GtkEditable *editable;    // type of GtkEntry    (TextField)
!   GtkWidget *text = NULL;   // type of GtkTextView (TextArea)
    GtkTextBuffer *buf;
    GtkTextIter start;
    GtkTextIter end;
--- 264,271 ----
  {
    void *ptr;
    int pos = 0;
!   GtkEditable *editable;
!   GtkWidget *text = NULL;
    GtkTextBuffer *buf;
    GtkTextIter start;
    GtkTextIter end;
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 311,318 ****
    (JNIEnv *env, jobject obj, jint start, jint end)
  {
    void *ptr;
!   GtkEditable *editable;    // type of GtkEntry    (TextField)
!   GtkWidget *text = NULL;   // type of GtkTextView (TextArea)
    GtkTextBuffer *buf;
    GtkTextIter iter;
  
--- 320,327 ----
    (JNIEnv *env, jobject obj, jint start, jint end)
  {
    void *ptr;
!   GtkEditable *editable;
!   GtkWidget *text = NULL;
    GtkTextBuffer *buf;
    GtkTextIter iter;
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 357,364 ****
    (JNIEnv *env, jobject obj, jboolean state)
  {
    void *ptr;
!   GtkEditable *editable;    // type of GtkEntry    (TextField)
!   GtkWidget *text = NULL;   // type of GtkTextView (TextArea)
  
    ptr = NSA_GET_PTR (env, obj);
  
--- 366,373 ----
    (JNIEnv *env, jobject obj, jboolean state)
  {
    void *ptr;
!   GtkEditable *editable;
!   GtkWidget *text = NULL;
  
    ptr = NSA_GET_PTR (env, obj);
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 396,403 ****
    void *ptr;
    char *contents = NULL;
    jstring jcontents;
!   GtkEditable *editable;    // type of GtkEntry    (TextField)
!   GtkWidget *text = NULL;   // type of GtkTextView (TextArea)
    GtkTextBuffer *buf;
    GtkTextIter start, end;
  
--- 405,412 ----
    void *ptr;
    char *contents = NULL;
    jstring jcontents;
!   GtkEditable *editable;
!   GtkWidget *text = NULL;
    GtkTextBuffer *buf;
    GtkTextIter start, end;
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 444,450 ****
  {
    void *ptr;
    const char *str;
!   GtkWidget *text = NULL;   // type of GtkTextView (TextArea)
    GtkTextBuffer *buf;
  
    ptr = NSA_GET_PTR (env, obj);
--- 453,459 ----
  {
    void *ptr;
    const char *str;
!   GtkWidget *text = NULL;
    GtkTextBuffer *buf;
  
    ptr = NSA_GET_PTR (env, obj);
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 480,509 ****
  }
  
  static void
- textcomponent_commit_cb (GtkIMContext *context __attribute__((unused)),
-                          const gchar  *str,
-                          jobject peer)
- {
-   /* str is a \0-terminated UTF-8 encoded character. */
-   gunichar2 *jc = g_utf8_to_utf16 (str, -1, NULL, NULL, NULL);
-   GdkEvent *event = gtk_get_current_event ();
- 
-   if (jc)
-     (*gdk_env)->CallVoidMethod (gdk_env, peer,
-                                 postKeyEventID,
-                                 (jint) AWT_KEY_TYPED,
-                                 (jlong) event->key.time,
-                                 keyevent_state_to_awt_mods (event),
-                                 VK_UNDEFINED,
-                                 (jchar) jc[0],
-                                 AWT_KEY_LOCATION_UNKNOWN);
-   g_free (jc);
-   gdk_event_free (event);
- }
- 
- static void
  textcomponent_changed_cb (GtkEditable *editable __attribute__((unused)),
  			  jobject peer)
  {
!   (*gdk_env)->CallVoidMethod (gdk_env, peer, postTextEventID);
  }
--- 489,498 ----
  }
  
  static void
  textcomponent_changed_cb (GtkEditable *editable __attribute__((unused)),
  			  jobject peer)
  {
!   gdk_threads_leave ();
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer, postTextEventID);
!   gdk_threads_enter ();
  }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c	Sat Dec 13 01:15:47 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c	Tue Nov 30 23:59:12 2004
*************** exception statement from your version. *
*** 39,87 ****
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkTextFieldPeer.h"
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create
!   (JNIEnv *env, jobject obj)
  {
!   GtkWidget *widget;
  
    /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
!   
!   widget = gtk_entry_new ();
  
    gdk_threads_leave ();
  
!   NSA_SET_PTR (env, obj, widget);
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetSize
!   (JNIEnv *env, jobject obj, jintArray jdims)
  {
    void *ptr;
!   jint *dims;
!   GtkRequisition myreq;
!   GtkWidget *entry;
!   
    ptr = NSA_GET_PTR (env, obj);
!   dims = (*env)->GetIntArrayElements (env, jdims, 0);  
!   
    gdk_threads_enter ();
!   
!   entry = GTK_WIDGET (ptr);
!   gtk_widget_size_request(entry, &myreq);
!   dims[0]=myreq.width;
!   dims[1]=myreq.height;
!   
    gdk_threads_leave ();
-   
-   (*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
  }
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setEchoChar
    (JNIEnv *env, jobject obj, jchar c)
  {
--- 39,154 ----
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkTextFieldPeer.h"
  
+ static jint
+ get_border_width (GtkWidget *entry);
+ 
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create
!   (JNIEnv *env, jobject obj, jint text_width)
  {
!   GtkWidget *entry;
  
    /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
! 
!   entry = gtk_entry_new ();
!   gtk_widget_set_size_request (entry,
! 			       text_width + 2 * get_border_width (entry), -1);
  
    gdk_threads_leave ();
  
!   NSA_SET_PTR (env, obj, entry);
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetSetBackground
!   (JNIEnv *env, jobject obj, jint red, jint green, jint blue)
  {
+   GdkColor color;
    void *ptr;
! 
    ptr = NSA_GET_PTR (env, obj);
! 
!   color.red = (red / 255.0) * 65535;
!   color.green = (green / 255.0) * 65535;
!   color.blue = (blue / 255.0) * 65535;
! 
    gdk_threads_enter ();
! 
!   gtk_widget_modify_base (GTK_WIDGET (ptr), GTK_STATE_NORMAL, &color);
! 
    gdk_threads_leave ();
  }
  
  JNIEXPORT void JNICALL 
+ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetSetForeground
+   (JNIEnv *env, jobject obj, jint red, jint green, jint blue)
+ {
+   GdkColor color;
+   void *ptr;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   color.red = (red / 255.0) * 65535;
+   color.green = (green / 255.0) * 65535;
+   color.blue = (blue / 255.0) * 65535;
+ 
+   gdk_threads_enter ();
+ 
+   gtk_widget_modify_text (GTK_WIDGET (ptr), GTK_STATE_NORMAL, &color);
+   gtk_widget_modify_base (GTK_WIDGET (ptr), GTK_STATE_SELECTED, &color);
+ 
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT jint JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetBorderWidth
+   (JNIEnv *env, jobject obj)
+ {
+   void *ptr;
+   int border_width = 0;
+ 
+   ptr = NSA_GET_PTR (env, obj);
+ 
+   gdk_threads_enter ();
+ 
+   border_width = get_border_width (GTK_WIDGET (ptr));
+ 
+   gdk_threads_leave ();
+ 
+   return border_width;
+ }
+ 
+ /* GTK hard-codes this value.  It is the space between a GtkEntry's
+    frame and its text. */
+ #define INNER_BORDER 2
+ 
+ static jint
+ get_border_width (GtkWidget *entry)
+ {
+   gint focus_width;
+   gboolean interior_focus;
+   int x_border_width = INNER_BORDER;
+ 
+   gtk_widget_style_get (entry,
+ 			"interior-focus", &interior_focus,
+ 			"focus-line-width", &focus_width,
+ 			NULL);
+ 
+   if (GTK_ENTRY (entry)->has_frame)
+     x_border_width += entry->style->xthickness;
+ 
+   if (!interior_focus)
+     x_border_width += focus_width;
+ 
+   return x_border_width;
+ }
+ 
+ #undef INNER_BORDER
+ 
+ JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setEchoChar
    (JNIEnv *env, jobject obj, jchar c)
  {
*************** Java_gnu_java_awt_peer_gtk_GtkTextFieldP
*** 93,102 ****
    gdk_threads_enter ();
  
    entry = GTK_ENTRY (ptr);
!     
!   if (c!=0)
      {
! /*        gtk_entry_set_echo_char (entry, c); */
        gtk_entry_set_visibility (entry, FALSE);
      }
    else
--- 160,171 ----
    gdk_threads_enter ();
  
    entry = GTK_ENTRY (ptr);
! 
!   if (c != 0)
      {
!       /* FIXME: use gtk_entry_set_invisible_char (GtkEntry *entry,
! 	 gunichar ch) here.  That means we must convert from jchar
! 	 (utf16) to gunichar (ucs4). */
        gtk_entry_set_visibility (entry, FALSE);
      }
    else
*************** Java_gnu_java_awt_peer_gtk_GtkTextFieldP
*** 106,112 ****
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkSetFont
    (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
  {
    const char *font_name;
--- 175,181 ----
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetModifyFont
    (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
  {
    const char *font_name;
*************** Java_gnu_java_awt_peer_gtk_GtkTextFieldP
*** 122,128 ****
    gdk_threads_enter();
  
    font_desc = pango_font_description_from_string (font_name);
!   pango_font_description_set_size (font_desc, size * PANGO_SCALE);
  
    if (style & AWT_STYLE_BOLD)
      pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
--- 191,197 ----
    gdk_threads_enter();
  
    font_desc = pango_font_description_from_string (font_name);
!   pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
  
    if (style & AWT_STYLE_BOLD)
      pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c	Wed Oct  8 15:49:33 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c	Tue Feb 22 06:13:03 2005
*************** exception statement from your version. *
*** 38,43 ****
--- 38,411 ----
  
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkToolkit.h"
+ #include "gthread-jni.h"
+ 
+ #include <sys/time.h>
+ 
+ #ifdef JVM_SUN
+   struct state_table *native_state_table;
+   struct state_table *native_global_ref_table;
+ #endif
+ 
+ jmethodID setBoundsCallbackID;
+ 
+ jmethodID postActionEventID;
+ jmethodID postMenuActionEventID;
+ jmethodID postMouseEventID;
+ jmethodID postConfigureEventID;
+ jmethodID postExposeEventID;
+ jmethodID postKeyEventID;
+ jmethodID postFocusEventID;
+ jmethodID postAdjustmentEventID;
+ jmethodID postItemEventID;
+ jmethodID choicePostItemEventID;
+ jmethodID postListItemEventID;
+ jmethodID postTextEventID;
+ jmethodID postWindowEventID;
+ jmethodID postInsetsChangedEventID;
+ jmethodID windowGetWidthID;
+ jmethodID windowGetHeightID;
+ 
+ jmethodID beginNativeRepaintID;
+ jmethodID endNativeRepaintID;
+ 
+ jmethodID initComponentGraphicsID;
+ jmethodID initComponentGraphics2DID;
+ jmethodID setCursorID;
+ 
+ JavaVM *java_vm;
+ 
+ union env_union
+ {
+   void *void_env;
+   JNIEnv *jni_env;
+ };
+ 
+ JNIEnv *
+ gdk_env()
+ {
+   union env_union tmp;
+   g_assert((*java_vm)->GetEnv(java_vm, &tmp.void_env, JNI_VERSION_1_2) == JNI_OK);
+   return tmp.jni_env;
+ }
+ 
+ 
+ GtkWindowGroup *global_gtk_window_group;
+ 
+ static void init_glib_threads(JNIEnv *, jint);
+ 
+ double dpi_conversion_factor;
+ 
+ static void init_dpi_conversion_factor (void);
+ static void dpi_changed_cb (GtkSettings  *settings,
+                             GParamSpec   *pspec);
+ 
+ /*
+  * Call gtk_init.  It is very important that this happen before any other
+  * gtk calls.
+  *
+  * The portableNativeSync argument may have the values:
+  *   1 if the Java property gnu.classpath.awt.gtk.portable.native.sync
+  *     is set to "true".  
+  *   0 if it is set to "false"
+  *  -1 if unset.
+  */
+ 
+ 
+ JNIEXPORT void JNICALL 
+ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit (JNIEnv *env, 
+ 					       jclass clazz __attribute__((unused)),
+ 					       jint portableNativeSync)
+ {
+   int argc = 1;
+   char **argv;
+   char *homedir, *rcpath = NULL;
+ 
+   jclass gtkgenericpeer, gtkcomponentpeer, gtkchoicepeer, gtkwindowpeer, gtkscrollbarpeer, gtklistpeer,
+     gtkmenuitempeer, gtktextcomponentpeer, window, gdkgraphics, gdkgraphics2d;
+ 
+   gtkgenericpeer = (*env)->FindClass(env, "gnu/java/awt/peer/gtk/GtkGenericPeer");
+ 
+   NSA_INIT (env, gtkgenericpeer);
+ 
+   g_assert((*env)->GetJavaVM(env, &java_vm) == 0);
+ 
+   /* GTK requires a program's argc and argv variables, and requires that they
+      be valid.   Set it up. */
+   argv = (char **) g_malloc (sizeof (char *) * 2);
+   argv[0] = (char *) g_malloc(1);
+ #if 1
+   strcpy(argv[0], "");
+ #else  /* The following is a more efficient alternative, but less intuitively
+ 	* expresses what we are trying to do.   This code is only run once, so
+ 	* I'm going for intuitive. */
+   argv[0][0] = '\0';
+ #endif
+   argv[1] = NULL;
+ 
+   init_glib_threads(env, portableNativeSync);
+ 
+   /* From GDK 2.0 onwards we have to explicitly call gdk_threads_init */
+   gdk_threads_init();
+ 
+   gtk_init (&argc, &argv);
+ 
+   gdk_rgb_init ();
+   gtk_widget_set_default_colormap (gdk_rgb_get_cmap ());
+   gtk_widget_set_default_visual (gdk_rgb_get_visual ());
+ 
+   /* Make sure queued calls don't get sent to GTK/GDK while 
+      we're shutting down. */
+   atexit (gdk_threads_enter);
+ 
+   gdk_event_handler_set ((GdkEventFunc)awt_event_handler, NULL, NULL);
+ 
+   if ((homedir = getenv ("HOME")))
+     {
+       rcpath = (char *) g_malloc (strlen (homedir) + strlen (RC_FILE) + 2);
+       sprintf (rcpath, "%s/%s", homedir, RC_FILE);
+     }
+   
+   gtk_rc_parse ((rcpath) ? rcpath : RC_FILE);
+ 
+   g_free (rcpath);
+   g_free (argv[0]);
+   g_free (argv);
+ 
+   /* setup cached IDs for posting GTK events to Java */
+ 
+   window = (*env)->FindClass (env, "java/awt/Window");
+ 
+   gtkcomponentpeer = (*env)->FindClass (env,
+ 				     "gnu/java/awt/peer/gtk/GtkComponentPeer");
+   gtkchoicepeer = (*env)->FindClass (env,
+ 				     "gnu/java/awt/peer/gtk/GtkChoicePeer");
+   gtkwindowpeer = (*env)->FindClass (env,
+ 				     "gnu/java/awt/peer/gtk/GtkWindowPeer");
+   gtkscrollbarpeer = (*env)->FindClass (env, 
+ 				     "gnu/java/awt/peer/gtk/GtkScrollbarPeer");
+   gtklistpeer = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GtkListPeer");
+   gtkmenuitempeer = (*env)->FindClass (env,
+                                      "gnu/java/awt/peer/gtk/GtkMenuItemPeer");
+   gtktextcomponentpeer = (*env)->FindClass (env,
+                                      "gnu/java/awt/peer/gtk/GtkTextComponentPeer");
+   gdkgraphics = (*env)->FindClass (env,
+                                    "gnu/java/awt/peer/gtk/GdkGraphics");
+   gdkgraphics2d = (*env)->FindClass (env,
+                                      "gnu/java/awt/peer/gtk/GdkGraphics2D");
+   setBoundsCallbackID = (*env)->GetMethodID (env, window,
+ 					     "setBoundsCallback",
+ 					     "(IIII)V");
+ 
+   postMenuActionEventID = (*env)->GetMethodID (env, gtkmenuitempeer,
+ 					       "postMenuActionEvent",
+ 					       "()V");
+   postMouseEventID = (*env)->GetMethodID (env, gtkcomponentpeer, 
+                                           "postMouseEvent", "(IJIIIIZ)V");
+   setCursorID = (*env)->GetMethodID (env, gtkcomponentpeer,
+                                      "setCursor", "()V");
+   beginNativeRepaintID = (*env)->GetMethodID (env, gtkcomponentpeer, 
+                                               "beginNativeRepaint", "()V");
+ 
+   endNativeRepaintID = (*env)->GetMethodID (env, gtkcomponentpeer, 
+                                             "endNativeRepaint", "()V");
+ 
+   postConfigureEventID = (*env)->GetMethodID (env, gtkwindowpeer, 
+ 					      "postConfigureEvent", "(IIII)V");
+   postWindowEventID = (*env)->GetMethodID (env, gtkwindowpeer,
+ 					   "postWindowEvent",
+ 					   "(ILjava/awt/Window;I)V");
+   postInsetsChangedEventID = (*env)->GetMethodID (env, gtkwindowpeer,
+ 						  "postInsetsChangedEvent",
+ 						  "(IIII)V");
+   windowGetWidthID = (*env)->GetMethodID (env, gtkwindowpeer,
+ 					  "getWidth", "()I");
+   windowGetHeightID = (*env)->GetMethodID (env, gtkwindowpeer,
+ 					  "getHeight", "()I");
+ 
+   postExposeEventID = (*env)->GetMethodID (env, gtkcomponentpeer, 
+ 					  "postExposeEvent", "(IIII)V");
+   postKeyEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
+ 					"postKeyEvent", "(IJIICI)V");
+   postFocusEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
+ 					  "postFocusEvent", "(IZ)V");
+   postAdjustmentEventID = (*env)->GetMethodID (env, gtkscrollbarpeer,
+ 					       "postAdjustmentEvent", 
+ 					       "(II)V");
+   postItemEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
+ 					 "postItemEvent", 
+ 					 "(Ljava/lang/Object;I)V");
+   choicePostItemEventID = (*env)->GetMethodID (env, gtkchoicepeer,
+ 					 "choicePostItemEvent", 
+ 					 "(Ljava/lang/String;I)V");
+   postListItemEventID = (*env)->GetMethodID (env, gtklistpeer,
+ 					     "postItemEvent",
+ 					     "(II)V");
+   postTextEventID = (*env)->GetMethodID (env, gtktextcomponentpeer,
+ 					     "postTextEvent",
+ 					     "()V");
+   initComponentGraphicsID = (*env)->GetMethodID (env, gdkgraphics,
+                                                  "initComponentGraphics",
+                                                  "()V");
+   initComponentGraphics2DID = (*env)->GetMethodID (env, gdkgraphics2d,
+                                                    "initComponentGraphics2D",
+                                                    "()V");
+   global_gtk_window_group = gtk_window_group_new ();
+ 
+   init_dpi_conversion_factor ();
+ }
+ 
+ 
+ /** Initialize GLIB's threads properly, based on the value of the
+     gnu.classpath.awt.gtk.portable.native.sync Java system property.  If
+     that's unset, use the PORTABLE_NATIVE_SYNC config.h macro.  (TODO: 
+     In some release following 0.10, that config.h macro will go away.)
+     */ 
+ static void 
+ init_glib_threads(JNIEnv *env, jint portableNativeSync)
+ {
+   if (portableNativeSync < 0)
+     {
+ #ifdef PORTABLE_NATIVE_SYNC /* Default value, if not set by the Java system
+                                property */ 
+       portableNativeSync = 1;
+ #else
+       portableNativeSync = 0;
+ #endif
+     }
+   
+   (*env)->GetJavaVM( env, &the_vm );
+   if (portableNativeSync)
+     g_thread_init ( &portable_native_sync_jni_functions );
+   else
+     g_thread_init ( NULL );
+ 
+   /* Debugging progress message; uncomment if needed: */
+   /*   printf("called gthread init\n"); */
+ }
+ 
+ 
+ /* This is a big hack, needed until this pango bug is resolved:
+    http://bugzilla.gnome.org/show_bug.cgi?id=119081.
+    See: http://mail.gnome.org/archives/gtk-i18n-list/2003-August/msg00001.html
+    for details. */
+ static void
+ init_dpi_conversion_factor ()
+ {
+   GtkSettings *settings = gtk_settings_get_default ();
+   GObjectClass *klass;
+ 
+   klass = G_OBJECT_CLASS (GTK_SETTINGS_GET_CLASS (settings));
+   if (g_object_class_find_property (klass, "gtk-xft-dpi"))
+     {
+       int int_dpi;
+       g_object_get (settings, "gtk-xft-dpi", &int_dpi, NULL);
+       /* If int_dpi == -1 gtk-xft-dpi returns the default value. So we
+ 	 have to do approximate calculation here.  */
+       if (int_dpi < 0)
+ 	dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;
+       else
+ 	dpi_conversion_factor = PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE);
+ 
+       g_signal_connect (settings, "notify::gtk-xft-dpi",
+ 			G_CALLBACK (dpi_changed_cb), NULL);
+     }
+   else
+     /* Approximate. */
+     dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;
+ }
+ 
+ static void
+ dpi_changed_cb (GtkSettings  *settings,
+ 		GParamSpec *pspec __attribute__((unused)))
+ {
+   int int_dpi;
+   g_object_get (settings, "gtk-xft-dpi", &int_dpi, NULL);
+   if (int_dpi < 0)
+     dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;
+   else
+     dpi_conversion_factor = PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE);
+ }
+ 
+ static int
+ within_human_latency_tolerance(struct timeval *init)
+ {
+   struct timeval curr;
+   unsigned long milliseconds_elapsed;
+ 
+   gettimeofday(&curr, NULL);
+   
+   milliseconds_elapsed = (((curr.tv_sec * 1000) + (curr.tv_usec / 1000))
+ 			  - ((init->tv_sec * 1000) + (init->tv_usec / 1000)));
+   
+   return milliseconds_elapsed < 100;
+ }
+ 
+ 
+ JNIEXPORT void JNICALL 
+ Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue
+ (JNIEnv *env, 
+  jobject self __attribute__((unused)),
+  jobject lockedQueue,
+  jboolean block)
+ {
+   /* We're holding an EventQueue lock, and we're about to acquire the GDK
+    * lock before dropping the EventQueue lock. This can deadlock if someone
+    * holds the GDK lock and wants to acquire the EventQueue lock; however
+    * all callbacks from GTK happen with the GDK lock released, so this
+    * would only happen in an odd case such as some JNI helper code
+    * acquiring the GDK lock and calling back into
+    * EventQueue.getNextEvent().
+    */
+ 
+   struct timeval init;
+   gettimeofday(&init, NULL);
+ 
+   gdk_threads_enter ();
+   (*env)->MonitorExit (env, lockedQueue);
+ 
+   if (block)
+     {
+       
+       /* If we're blocking-when-empty, we want a do .. while loop. */
+       do 
+ 	gtk_main_iteration ();
+       while (within_human_latency_tolerance (&init) 
+ 	     && gtk_events_pending ());
+     }
+   else
+     {
+       /* If we're not blocking-when-empty, we want a while loop. */
+       while (within_human_latency_tolerance (&init) 
+ 	     && gtk_events_pending ())
+ 	gtk_main_iteration ();      
+     }
+   
+   (*env)->MonitorEnter (env, lockedQueue);
+   gdk_threads_leave ();
+ }
+ 
+ JNIEXPORT void JNICALL 
+ Java_gnu_java_awt_peer_gtk_GtkToolkit_wakeNativeQueue
+   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)))
+ {
+   g_main_context_wakeup (NULL);
+ }
+ 
+ JNIEXPORT jboolean JNICALL 
+ Java_gnu_java_awt_peer_gtk_GtkToolkit_nativeQueueEmpty
+   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)))
+ {
+   jboolean empty = FALSE;
+   gdk_threads_enter ();
+   empty = ! gtk_events_pending();
+   gdk_threads_leave ();
+   return empty;
+ }
+ 
+ 
+ static jint gdk_color_to_java_color (GdkColor color);
+ 
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkToolkit_beep
*************** Java_gnu_java_awt_peer_gtk_GtkToolkit_ge
*** 88,90 ****
--- 456,525 ----
    return res;
  }
  
+ #define CONVERT(type, state) \
+   gdk_color_to_java_color (style->type[GTK_STATE_ ## state])
+ 
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkToolkit_loadSystemColors
+   (JNIEnv *env, jobject obj __attribute__((unused)),
+    jintArray jcolors)
+ {
+   jint *colors;
+   GtkStyle *style;
+ 
+   colors = (*env)->GetIntArrayElements (env, jcolors, 0);
+ 
+   gdk_threads_enter ();
+ 
+   style = gtk_widget_get_default_style ();
+ 
+   colors[AWT_DESKTOP]                 = CONVERT (bg, SELECTED);
+   colors[AWT_ACTIVE_CAPTION]          = CONVERT (bg, SELECTED);
+   colors[AWT_ACTIVE_CAPTION_TEXT]     = CONVERT (text, SELECTED);
+   colors[AWT_ACTIVE_CAPTION_BORDER]   = CONVERT (fg, NORMAL);
+   colors[AWT_INACTIVE_CAPTION]        = CONVERT (base, INSENSITIVE);
+   colors[AWT_INACTIVE_CAPTION_TEXT]   = CONVERT (fg, INSENSITIVE);
+   colors[AWT_INACTIVE_CAPTION_BORDER] = CONVERT (fg, INSENSITIVE);
+   colors[AWT_WINDOW]                  = CONVERT (bg, NORMAL);
+   colors[AWT_WINDOW_BORDER]           = CONVERT (fg, NORMAL);
+   colors[AWT_WINDOW_TEXT]             = CONVERT (fg, NORMAL);
+   colors[AWT_MENU]                    = CONVERT (bg, NORMAL);
+   colors[AWT_MENU_TEXT]               = CONVERT (fg, NORMAL);
+   colors[AWT_TEXT]                    = CONVERT (bg, NORMAL);
+   colors[AWT_TEXT_TEXT]               = CONVERT (fg, NORMAL);
+   colors[AWT_TEXT_HIGHLIGHT]          = CONVERT (bg, SELECTED);
+   colors[AWT_TEXT_HIGHLIGHT_TEXT]     = CONVERT (fg, SELECTED);
+   colors[AWT_TEXT_INACTIVE_TEXT]      = CONVERT (bg, INSENSITIVE);
+   colors[AWT_CONTROL]                 = CONVERT (bg, NORMAL);
+   colors[AWT_CONTROL_TEXT]            = CONVERT (fg, NORMAL);
+   colors[AWT_CONTROL_HIGHLIGHT]       = CONVERT (base, ACTIVE);
+   colors[AWT_CONTROL_LT_HIGHLIGHT]    = CONVERT (bg, PRELIGHT);
+   colors[AWT_CONTROL_SHADOW]          = CONVERT (bg, ACTIVE);
+   colors[AWT_CONTROL_DK_SHADOW]       = CONVERT (fg, INSENSITIVE);
+   colors[AWT_SCROLLBAR]               = CONVERT (base, INSENSITIVE);
+   colors[AWT_INFO]                    = CONVERT (bg, NORMAL);
+   colors[AWT_INFO_TEXT]               = CONVERT (fg, NORMAL);
+ 
+   gdk_threads_leave ();
+ 
+   (*env)->ReleaseIntArrayElements(env, jcolors, colors, 0);
+ }
+ 
+ #undef CONVERT
+ 
+ static jint
+ gdk_color_to_java_color (GdkColor gdk_color)
+ {
+   guchar red;
+   guchar green;
+   guchar blue;
+   float factor;
+ 
+   factor = 255.0 / 65535.0;
+ 
+   red   = (float) gdk_color.red   * factor;
+   green = (float) gdk_color.green * factor;
+   blue  = (float) gdk_color.blue  * factor;
+ 
+   return (jint) (0xff000000 | (red << 16) | (green << 8) | blue);
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c	Tue Jan 13 20:54:46 2004
--- gcc-4.0.0/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c	Tue Feb 22 06:13:03 2005
***************
*** 1,5 ****
  /* gtkwindowpeer.c -- Native implementation of GtkWindowPeer
!    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtkwindowpeer.c -- Native implementation of GtkWindowPeer
!    Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 37,70 ****
  
  
  #include "gtkpeer.h"
- #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
  #include "gnu_java_awt_peer_gtk_GtkWindowPeer.h"
- #include "gnu_java_awt_peer_gtk_GtkFramePeer.h"
  #include <gdk/gdkprivate.h>
  #include <gdk/gdkx.h>
  #include <X11/Xatom.h>
  
  static void window_get_frame_extents (GtkWidget *window,
                                        int *top, int *left,
                                        int *bottom, int *right);
  
  static void request_frame_extents (GtkWidget *window);
  
! static int property_notify_predicate (Display *xdisplay,
!                                       XEvent  *event,
!                                       XPointer window_id);
  
  static void window_delete_cb (GtkWidget *widget, GdkEvent *event,
  			      jobject peer);
  static void window_destroy_cb (GtkWidget *widget, GdkEvent *event,
  			       jobject peer);
  static void window_show_cb (GtkWidget *widget, jobject peer);
  static gboolean window_focus_in_cb (GtkWidget * widget,
! 				    GdkEventFocus *event,
! 				    jobject peer);
  static gboolean window_focus_out_cb (GtkWidget * widget,
! 				     GdkEventFocus *event,
! 				     jobject peer);
  static gboolean window_window_state_cb (GtkWidget *widget,
  					GdkEvent *event,
  					jobject peer);
--- 37,78 ----
  
  
  #include "gtkpeer.h"
  #include "gnu_java_awt_peer_gtk_GtkWindowPeer.h"
  #include <gdk/gdkprivate.h>
  #include <gdk/gdkx.h>
  #include <X11/Xatom.h>
  
+ /* FIXME: we're currently seeing the double-activation that occurs
+    with metacity and GTK.  See
+    http://bugzilla.gnome.org/show_bug.cgi?id=140977 for details. */
+ 
  static void window_get_frame_extents (GtkWidget *window,
                                        int *top, int *left,
                                        int *bottom, int *right);
  
  static void request_frame_extents (GtkWidget *window);
  
! static Bool property_notify_predicate (Display *display,
!                                        XEvent  *xevent,
!                                        XPointer arg);
  
  static void window_delete_cb (GtkWidget *widget, GdkEvent *event,
  			      jobject peer);
  static void window_destroy_cb (GtkWidget *widget, GdkEvent *event,
  			       jobject peer);
  static void window_show_cb (GtkWidget *widget, jobject peer);
+ static void window_active_state_change_cb (GtkWidget *widget,
+                                            GParamSpec *pspec,
+                                            jobject peer);
+ static void window_focus_state_change_cb (GtkWidget *widget,
+                                           GParamSpec *pspec,
+                                           jobject peer);
  static gboolean window_focus_in_cb (GtkWidget * widget,
!                                     GdkEventFocus *event,
!                                     jobject peer);
  static gboolean window_focus_out_cb (GtkWidget * widget,
!                                      GdkEventFocus *event,
!                                      jobject peer);
  static gboolean window_window_state_cb (GtkWidget *widget,
  					GdkEvent *event,
  					jobject peer);
*************** static jint window_get_new_state (GtkWid
*** 72,102 ****
  static gboolean window_property_changed_cb (GtkWidget *widget,
  					    GdkEventProperty *event,
  					    jobject peer);
  
! /*
!  * Make a new window.
!  */
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create 
!   (JNIEnv *env, jobject obj, jint type, jboolean decorated,
!    jint width, jint height, jobject parent, jintArray jinsets)
  {
    GtkWidget *window_widget;
    GtkWindow *window;
    void *window_parent;
!   GtkWidget *vbox;
!   GtkWidget *layout;
!   int top = 0;
!   int left = 0;
!   int bottom = 0;
!   int right = 0;
!   jint *insets;
! 
!   insets = (*env)->GetIntArrayElements (env, jinsets, 0);
!   insets[0] = insets[1] = insets[2] = insets[3] = 0;
  
-   /* Create global reference and save it for future use */
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
--- 80,109 ----
  static gboolean window_property_changed_cb (GtkWidget *widget,
  					    GdkEventProperty *event,
  					    jobject peer);
+ static void realize_cb (GtkWidget *widget, jobject peer);
  
! /* Union used for type punning. */
! union extents_union
! {
!   guchar **gu_extents;
!   unsigned long **extents;
! };
  
! union atom_list_union
! {
!   guchar **gu_extents;
!   Atom **atom_list;
! };
! 
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create
!   (JNIEnv *env, jobject obj, jint type, jboolean decorated, jobject parent)
  {
    GtkWidget *window_widget;
    GtkWindow *window;
    void *window_parent;
!   GtkWidget *fixed;
  
    NSA_SET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
*************** Java_gnu_java_awt_peer_gtk_GtkWindowPeer
*** 117,162 ****
  
    gtk_window_group_add_window (global_gtk_window_group, window);
  
!   vbox = gtk_vbox_new (0, 0);
!   layout = gtk_layout_new (NULL, NULL);
!   gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0);
!   gtk_container_add (GTK_CONTAINER (window_widget), vbox);
  
!   gtk_widget_show (layout);
!   gtk_widget_show (vbox);
!   gtk_widget_realize (window_widget);
  
!   if (decorated)
!     window_get_frame_extents (window_widget, &top, &left, &bottom, &right);
  
!   gtk_window_set_default_size (window,
! 			       MAX (1, width - left - right),
! 			       MAX (1, height - top - bottom));
  
!   /* We must set this window's size requisition.  Otherwise when a
!      resize is queued (when gtk_widget_queue_resize is called) the
!      window will snap to its default requisition of 0x0.  If we omit
!      this call, Frames and Dialogs shrink to degenerate 1x1 windows
!      when their resizable property changes. */
!   gtk_widget_set_size_request (window_widget,
! 			       MAX (1, width - left - right),
! 			       MAX (1, height - top - bottom));
  
!   insets[0] = top;
!   insets[1] = left;
!   insets[2] = bottom;
!   insets[3] = right;
  
!   gdk_threads_leave ();
  
!   (*env)->ReleaseIntArrayElements (env, jinsets, insets, 0);
  
!   NSA_SET_PTR (env, obj, window_widget);
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible
!   (JNIEnv *env, jobject obj, jboolean visible)
  {
    void *ptr;
  
--- 124,162 ----
  
    gtk_window_group_add_window (global_gtk_window_group, window);
  
!   fixed = gtk_fixed_new ();
!   gtk_container_add (GTK_CONTAINER (window_widget), fixed);
  
!   gtk_widget_show (fixed);
  
!   gdk_threads_leave ();
  
!   NSA_SET_PTR (env, obj, window_widget);
! }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetTitle
!   (JNIEnv *env, jobject obj, jstring title)
! {
!   const char *c_title;
!   void *ptr;
  
!   ptr = NSA_GET_PTR (env, obj);
  
!   c_title = (*env)->GetStringUTFChars (env, title, NULL);
  
!   gdk_threads_enter ();
  
!   gtk_window_set_title (GTK_WINDOW (ptr), c_title);
! 
!   gdk_threads_leave ();
! 
!   (*env)->ReleaseStringUTFChars (env, title, c_title);
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetResizable
!   (JNIEnv *env, jobject obj, jboolean resizable)
  {
    void *ptr;
  
*************** Java_gnu_java_awt_peer_gtk_GtkWindowPeer
*** 164,216 ****
  
    gdk_threads_enter ();
  
!   if (visible)
!     gtk_widget_show (GTK_WIDGET (ptr));
!   else
!     gtk_widget_hide (GTK_WIDGET (ptr));
! 
!   XFlush (GDK_DISPLAY ());
  
    gdk_threads_leave ();
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectJObject
!   (JNIEnv *env, jobject obj)
  {
    void *ptr;
-   GtkWidget* vbox, *layout;
-   GList* children;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
  
!   children = gtk_container_get_children(GTK_CONTAINER(ptr));
!   vbox = children->data;
! 
!   if(!GTK_IS_VBOX(vbox))
!     {
!       printf("*** this is not a vbox\n");
!     }
!   children = gtk_container_get_children(GTK_CONTAINER(vbox));
!   layout = children->data;
  
!   if(!GTK_IS_LAYOUT(layout))
!     {
!       printf("*** widget is not a layout ***");
!     }
  
!   gtk_widget_realize (layout);
  
!   connect_awt_hook (env, obj, 1, GTK_LAYOUT (layout)->bin_window);
  
!   gtk_widget_realize (ptr);
  
!   connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
  
!   g_signal_connect (G_OBJECT (ptr), "property-notify-event",
! 		    G_CALLBACK (window_property_changed_cb), obj);
  
    gdk_threads_leave ();
  }
--- 164,205 ----
  
    gdk_threads_enter ();
  
!   gtk_window_set_policy (GTK_WINDOW (ptr), resizable, resizable, FALSE);
  
    gdk_threads_leave ();
  }
  
  JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetModal
!   (JNIEnv *env, jobject obj, jboolean modal)
  {
    void *ptr;
  
    ptr = NSA_GET_PTR (env, obj);
  
    gdk_threads_enter ();
  
!   gtk_window_set_modal (GTK_WINDOW (ptr), modal);
  
!   gdk_threads_leave ();
! }
  
! JNIEXPORT void JNICALL
! Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible
!   (JNIEnv *env, jobject obj, jboolean visible)
! {
!   void *ptr;
  
!   ptr = NSA_GET_PTR (env, obj);
  
!   gdk_threads_enter ();
  
!   if (visible)
!     gtk_widget_show (GTK_WIDGET (ptr));
!   else
!     gtk_widget_hide (GTK_WIDGET (ptr));
  
!   XFlush (GDK_DISPLAY ());
  
    gdk_threads_leave ();
  }
*************** JNIEXPORT void JNICALL
*** 219,233 ****
  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
    (JNIEnv *env, jobject obj)
  {
!   void *ptr = NSA_GET_PTR (env, obj);
!   jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
!   g_assert (gref);
  
    gdk_threads_enter ();
  
!   gtk_widget_realize (ptr);
  
-   /* Connect signals for window event support. */
    g_signal_connect (G_OBJECT (ptr), "delete-event",
  		    G_CALLBACK (window_delete_cb), *gref);
  
--- 208,224 ----
  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
    (JNIEnv *env, jobject obj)
  {
!   void *ptr;
!   jobject *gref;
! 
!   ptr = NSA_GET_PTR (env, obj);
!   gref = NSA_GET_GLOBAL_REF (env, obj);
  
    gdk_threads_enter ();
  
!   g_signal_connect (G_OBJECT (ptr), "event",
!                     G_CALLBACK (pre_event_handler), *gref);
  
    g_signal_connect (G_OBJECT (ptr), "delete-event",
  		    G_CALLBACK (window_delete_cb), *gref);
  
*************** Java_gnu_java_awt_peer_gtk_GtkWindowPeer
*** 237,283 ****
    g_signal_connect (G_OBJECT (ptr), "show",
  		    G_CALLBACK (window_show_cb), *gref);
  
    g_signal_connect (G_OBJECT (ptr), "focus-in-event",
! 		    G_CALLBACK (window_focus_in_cb), *gref);
  
    g_signal_connect (G_OBJECT (ptr), "focus-out-event",
! 		    G_CALLBACK (window_focus_out_cb), *gref);
  
    g_signal_connect (G_OBJECT (ptr), "window-state-event",
  		    G_CALLBACK (window_window_state_cb), *gref);
  
!   gdk_threads_leave ();
! 
!   /* Connect the superclass signals.  */
!   Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
! }
  
! /*
!  * Set a frame's title
!  */
  
! JNIEXPORT void JNICALL 
! Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setTitle
!   (JNIEnv *env, jobject obj, jstring title)
! {
!   void *ptr;
!   const char *str;
  
-   ptr = NSA_GET_PTR (env, obj);
-   
-   str = (*env)->GetStringUTFChars (env, title, NULL);
-   
-   gdk_threads_enter ();
-   gtk_window_set_title (GTK_WINDOW (ptr), str);
    gdk_threads_leave ();
-   
-   (*env)->ReleaseStringUTFChars (env, title, str);
  }
  
- /*
-  * Lower the z-level of a window. 
-  */
- 
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toBack (JNIEnv *env, 
      jobject obj)
--- 228,260 ----
    g_signal_connect (G_OBJECT (ptr), "show",
  		    G_CALLBACK (window_show_cb), *gref);
  
+   g_signal_connect (G_OBJECT (ptr), "notify::is-active",
+   		    G_CALLBACK (window_active_state_change_cb), *gref);
+ 
+   g_signal_connect (G_OBJECT (ptr), "notify::has-toplevel-focus",
+   		    G_CALLBACK (window_focus_state_change_cb), *gref);
+ 
    g_signal_connect (G_OBJECT (ptr), "focus-in-event",
!                     G_CALLBACK (window_focus_in_cb), *gref);
  
    g_signal_connect (G_OBJECT (ptr), "focus-out-event",
!                     G_CALLBACK (window_focus_out_cb), *gref);
  
    g_signal_connect (G_OBJECT (ptr), "window-state-event",
  		    G_CALLBACK (window_window_state_cb), *gref);
  
!   g_signal_connect (G_OBJECT (ptr), "property-notify-event",
! 		    G_CALLBACK (window_property_changed_cb), *gref);
  
!   g_signal_connect_after (G_OBJECT (ptr), "realize",
!                           G_CALLBACK (realize_cb), *gref);
  
!   g_signal_connect_after (G_OBJECT (ptr), "realize",
!                           G_CALLBACK (connect_awt_hook_cb), *gref);
  
    gdk_threads_leave ();
  }
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toBack (JNIEnv *env, 
      jobject obj)
*************** Java_gnu_java_awt_peer_gtk_GtkWindowPeer
*** 286,301 ****
    ptr = NSA_GET_PTR (env, obj);
      
    gdk_threads_enter ();
    gdk_window_lower (GTK_WIDGET (ptr)->window);
  
-   XFlush (GDK_DISPLAY ());
    gdk_threads_leave ();
  }
  
- /*
-  * Raise the z-level of a window.
-  */
- 
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env, 
      jobject obj)
--- 263,275 ----
    ptr = NSA_GET_PTR (env, obj);
      
    gdk_threads_enter ();
+ 
    gdk_window_lower (GTK_WIDGET (ptr)->window);
+   gdk_flush ();
  
    gdk_threads_leave ();
  }
  
  JNIEXPORT void JNICALL 
  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env, 
      jobject obj)
*************** Java_gnu_java_awt_peer_gtk_GtkWindowPeer
*** 304,312 ****
    ptr = NSA_GET_PTR (env, obj);
      
    gdk_threads_enter ();
    gdk_window_raise (GTK_WIDGET (ptr)->window);
  
-   XFlush (GDK_DISPLAY ());
    gdk_threads_leave ();
  }
  
--- 278,287 ----
    ptr = NSA_GET_PTR (env, obj);
      
    gdk_threads_enter ();
+ 
    gdk_window_raise (GTK_WIDGET (ptr)->window);
+   gdk_flush ();
  
    gdk_threads_leave ();
  }
  
*************** Java_gnu_java_awt_peer_gtk_GtkWindowPeer
*** 317,323 ****
  {
    /* Circumvent package-private access to call Window's
       setBoundsCallback method. */
!   (*gdk_env)->CallVoidMethod (gdk_env, window, setBoundsCallbackID,
  			      x, y, width, height);
  }
  
--- 292,298 ----
  {
    /* Circumvent package-private access to call Window's
       setBoundsCallback method. */
!   (*gdk_env())->CallVoidMethod (gdk_env(), window, setBoundsCallbackID,
  			      x, y, width, height);
  }
  
*************** Java_gnu_java_awt_peer_gtk_GtkWindowPeer
*** 332,338 ****
--- 307,315 ----
    height = (height < 1) ? 1 : height;
  
    gdk_threads_enter ();
+ 
    gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height);
+ 
    gdk_threads_leave ();
  }
  
*************** Java_gnu_java_awt_peer_gtk_GtkWindowPeer
*** 347,353 ****
--- 324,346 ----
    height = (height < 1) ? 1 : height;
  
    gdk_threads_enter ();
+ 
    gtk_window_move (GTK_WINDOW(ptr), x, y);
+   /* The call to gdk_window_move is needed in addition to the call to
+      gtk_window_move.  If gdk_window_move isn't called, then the
+      following set of operations doesn't give the expected results:
+ 
+      1. show a window
+      2. manually move it to another position on the screen
+      3. hide the window
+      4. reposition the window with Component.setLocation
+      5. show the window
+ 
+      Instead of being at the position set by setLocation, the window
+      is reshown at the position to which it was moved manually. */
+   if (GTK_WIDGET (ptr)->window != NULL)
+     gdk_window_move (GTK_WIDGET (ptr)->window, x, y);
+ 
    /* Need to change the widget's request size. */
    gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height);
    /* Also need to call gtk_window_resize.  If the resize is requested
*************** Java_gnu_java_awt_peer_gtk_GtkWindowPeer
*** 357,410 ****
    gdk_threads_leave ();
  }
  
- JNIEXPORT void JNICALL
- Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer
-   (JNIEnv *env, jobject obj, jobject menubar)
- {
-   void *wptr, *mptr;
-   GtkBox *box;
- 
-   if (!menubar) return;
- 
-   wptr = NSA_GET_PTR (env, obj);
-   mptr = NSA_GET_PTR (env, menubar);
- 
-   if (!mptr) return; /* this case should remove a menu */
- 
-   gdk_threads_enter ();
-   box = GTK_BOX (GTK_BIN (wptr)->child);
-   gtk_box_pack_start (box, GTK_WIDGET (mptr), 0, 0, 0);
-   gdk_threads_leave ();
- }
- 
- JNIEXPORT jint JNICALL
- Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight
-   (JNIEnv *env, jobject obj)
- {
-   void *ptr;
-   GList *children;
-   jint height = 0;
- 
-   ptr = NSA_GET_PTR (env, obj);
- 
-   gdk_threads_enter ();
-   children = gtk_container_children (GTK_CONTAINER (GTK_BIN (ptr)->child));
-   if (g_list_length (children) == 2)
-     {
-       GtkWidget *menubar = GTK_WIDGET (children->data);
-       height = menubar->allocation.height;
- 
-     }
-   gdk_threads_leave ();
- 
-   return height;
- }
- 
  static void
  window_get_frame_extents (GtkWidget *window,
                            int *top, int *left, int *bottom, int *right)
  {
    unsigned long *extents = NULL;
  
    /* Guess frame extents in case _NET_FRAME_EXTENTS is not
       supported. */
--- 350,361 ----
    gdk_threads_leave ();
  }
  
  static void
  window_get_frame_extents (GtkWidget *window,
                            int *top, int *left, int *bottom, int *right)
  {
    unsigned long *extents = NULL;
+   union extents_union gu_ex;
  
    /* Guess frame extents in case _NET_FRAME_EXTENTS is not
       supported. */
*************** window_get_frame_extents (GtkWidget *win
*** 418,423 ****
--- 369,375 ----
    request_frame_extents (window);
  
    /* Attempt to retrieve window's frame extents. */
+   gu_ex.extents = &extents;
    if (gdk_property_get (window->window,
                          gdk_atom_intern ("_NET_FRAME_EXTENTS", FALSE),
                          gdk_atom_intern ("CARDINAL", FALSE),
*************** window_get_frame_extents (GtkWidget *win
*** 427,433 ****
                          NULL,
                          NULL,
                          NULL,
!                         (guchar **)&extents))
      {
        *left = extents [0];
        *right = extents [1];
--- 379,385 ----
                          NULL,
                          NULL,
                          NULL,
!                         gu_ex.gu_extents))
      {
        *left = extents [0];
        *right = extents [1];
*************** request_frame_extents (GtkWidget *window
*** 491,497 ****
      }
  }
  
! static int
  property_notify_predicate (Display *xdisplay __attribute__((unused)),
                             XEvent  *event,
                             XPointer window_id)
--- 443,449 ----
      }
  }
  
! static Bool
  property_notify_predicate (Display *xdisplay __attribute__((unused)),
                             XEvent  *event,
                             XPointer window_id)
*************** property_notify_predicate (Display *xdis
*** 501,509 ****
    if (event->xany.type == PropertyNotify
        && event->xany.window == *window
        && event->xproperty.atom == extents_atom)
!         return True;
! 
!   return False;
  }
  
  static void
--- 453,461 ----
    if (event->xany.type == PropertyNotify
        && event->xany.window == *window
        && event->xproperty.atom == extents_atom)
!     return True;
!   else
!     return False;
  }
  
  static void
*************** window_delete_cb (GtkWidget *widget __at
*** 511,520 ****
  		  GdkEvent *event __attribute__((unused)),
  		  jobject peer)
  {
!   (*gdk_env)->CallVoidMethod (gdk_env, peer,
  			      postWindowEventID,
  			      (jint) AWT_WINDOW_CLOSING,
  			      (jobject) NULL, (jint) 0);
  }
  
  static void
--- 463,474 ----
  		  GdkEvent *event __attribute__((unused)),
  		  jobject peer)
  {
!   gdk_threads_leave ();
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  			      postWindowEventID,
  			      (jint) AWT_WINDOW_CLOSING,
  			      (jobject) NULL, (jint) 0);
+   gdk_threads_enter ();
  }
  
  static void
*************** window_destroy_cb (GtkWidget *widget __a
*** 522,560 ****
  		   GdkEvent *event __attribute__((unused)),
  		   jobject peer)
  {
!   (*gdk_env)->CallVoidMethod (gdk_env, peer,
  			      postWindowEventID,
  			      (jint) AWT_WINDOW_CLOSED,
  			      (jobject) NULL, (jint) 0);
  }
  
  static void
  window_show_cb (GtkWidget *widget __attribute__((unused)),
  		jobject peer)
  {
!   (*gdk_env)->CallVoidMethod (gdk_env, peer,
  			      postWindowEventID,
  			      (jint) AWT_WINDOW_OPENED,
  			      (jobject) NULL, (jint) 0);
  }
  
  static gboolean
! window_focus_in_cb (GtkWidget * widget __attribute__((unused)),
! 		    GdkEventFocus *event __attribute__((unused)),
  		    jobject peer)
  {
!   /* FIXME: when hiding then showing, we get two sets of
!      (LOST_FOCUS/DEACTIVATED, ACTIVATED/GAINED_FOCUS) events. */
!   (*gdk_env)->CallVoidMethod (gdk_env, peer,
! 			      postWindowEventID,
! 			      (jint) AWT_WINDOW_ACTIVATED,
! 			      (jobject) NULL, (jint) 0);
! 
!   (*gdk_env)->CallVoidMethod (gdk_env, peer,
! 			      postWindowEventID,
! 			      (jint) AWT_WINDOW_GAINED_FOCUS,
! 			      (jobject) NULL, (jint) 0);
!   return TRUE;
  }
  
  static gboolean
--- 476,557 ----
  		   GdkEvent *event __attribute__((unused)),
  		   jobject peer)
  {
!   gdk_threads_leave ();
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  			      postWindowEventID,
  			      (jint) AWT_WINDOW_CLOSED,
  			      (jobject) NULL, (jint) 0);
+   gdk_threads_enter ();
  }
  
  static void
  window_show_cb (GtkWidget *widget __attribute__((unused)),
  		jobject peer)
  {
!   gdk_threads_leave ();
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  			      postWindowEventID,
  			      (jint) AWT_WINDOW_OPENED,
  			      (jobject) NULL, (jint) 0);
+   gdk_threads_enter ();
+ }
+ 
+ static void
+ window_active_state_change_cb (GtkWidget *widget __attribute__((unused)),
+ 			       GParamSpec *pspec __attribute__((unused)),
+ 			       jobject peer __attribute__((unused)))
+ {
+   /* FIXME: not sure if this is needed or not. */
+   /* Remove the unused attributes if you fix the below.  */
+ #if 0
+   gdk_threads_leave ();
+   if (GTK_WINDOW (widget)->is_active)
+     (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                                 postWindowEventID,
+                                 (jint) AWT_WINDOW_GAINED_FOCUS,
+                                 (jobject) NULL, (jint) 0);
+   else
+     (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                                 postWindowEventID,
+                                 (jint) AWT_WINDOW_DEACTIVATED,
+                                 (jobject) NULL, (jint) 0);
+   gdk_threads_enter ();
+ #endif
+ }
+ 
+ static void
+ window_focus_state_change_cb (GtkWidget *widget,
+ 			      GParamSpec *pspec __attribute__((unused)),
+ 			      jobject peer)
+ {
+   gdk_threads_leave ();
+   if (GTK_WINDOW (widget)->has_toplevel_focus)
+     (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                                 postWindowEventID,
+                                 (jint) AWT_WINDOW_ACTIVATED,
+                                 (jobject) NULL, (jint) 0);
+   else
+     (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+                                 postWindowEventID,
+                                 (jint) AWT_WINDOW_DEACTIVATED,
+                                 (jobject) NULL, (jint) 0);
+   gdk_threads_enter ();
  }
  
  static gboolean
! window_focus_in_cb (GtkWidget * widget  __attribute__((unused)),
! 		    GdkEventFocus *event  __attribute__((unused)),
  		    jobject peer)
  {
!   gdk_threads_leave ();
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
!                               postWindowEventID,
!                               (jint) AWT_WINDOW_GAINED_FOCUS,
!                               (jobject) NULL, (jint) 0);
!   /* FIXME: somewhere after this is handled, the child window is
!      getting an expose event. */
!   gdk_threads_enter ();
!   return FALSE;
  }
  
  static gboolean
*************** window_focus_out_cb (GtkWidget * widget 
*** 562,577 ****
  		     GdkEventFocus *event __attribute__((unused)),
  		     jobject peer)
  {
!   (*gdk_env)->CallVoidMethod (gdk_env, peer,
! 			      postWindowEventID,
! 			      (jint) AWT_WINDOW_LOST_FOCUS,
! 			      (jobject) NULL, (jint) 0);
! 
!   (*gdk_env)->CallVoidMethod (gdk_env, peer,
! 			      postWindowEventID,
! 			      (jint) AWT_WINDOW_DEACTIVATED,
! 			      (jobject) NULL, (jint) 0);
!   return TRUE;
  }
  
  static gboolean
--- 559,573 ----
  		     GdkEventFocus *event __attribute__((unused)),
  		     jobject peer)
  {
!   gdk_threads_leave ();
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
!                               postWindowEventID,
!                               (jint) AWT_WINDOW_LOST_FOCUS,
!                               (jobject) NULL, (jint) 0);
!   /* FIXME: somewhere after this is handled, the child window is
!      getting an expose event. */
!   gdk_threads_enter ();
!   return FALSE;
  }
  
  static gboolean
*************** window_window_state_cb (GtkWidget *widge
*** 588,605 ****
        if (event->window_state.new_window_state & GDK_WINDOW_STATE_ICONIFIED)
  	{
  	  /* We've been iconified. */
! 	  (*gdk_env)->CallVoidMethod (gdk_env, peer,
  				      postWindowEventID,
  				      (jint) AWT_WINDOW_ICONIFIED,
  				      (jobject) NULL, (jint) 0);
  	}
        else
  	{
  	  /* We've been deiconified. */
! 	  (*gdk_env)->CallVoidMethod (gdk_env, peer,
  				      postWindowEventID,
  				      (jint) AWT_WINDOW_DEICONIFIED,
  				      (jobject) NULL, (jint) 0);
  	}
      }
  
--- 584,605 ----
        if (event->window_state.new_window_state & GDK_WINDOW_STATE_ICONIFIED)
  	{
  	  /* We've been iconified. */
! 	  gdk_threads_leave ();
! 	  (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  				      postWindowEventID,
  				      (jint) AWT_WINDOW_ICONIFIED,
  				      (jobject) NULL, (jint) 0);
+ 	  gdk_threads_enter ();
  	}
        else
  	{
  	  /* We've been deiconified. */
! 	  gdk_threads_leave ();
! 	  (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  				      postWindowEventID,
  				      (jint) AWT_WINDOW_DEICONIFIED,
  				      (jobject) NULL, (jint) 0);
+ 	  gdk_threads_enter ();
  	}
      }
  
*************** window_window_state_cb (GtkWidget *widge
*** 612,621 ****
  
    new_state |= window_get_new_state (widget);
  
!   (*gdk_env)->CallVoidMethod (gdk_env, peer,
  			      postWindowEventID,
  			      (jint) AWT_WINDOW_STATE_CHANGED,
  			      (jobject) NULL, new_state);
    return TRUE;
  }
  
--- 612,623 ----
  
    new_state |= window_get_new_state (widget);
  
!   gdk_threads_leave ();
!   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
  			      postWindowEventID,
  			      (jint) AWT_WINDOW_STATE_CHANGED,
  			      (jobject) NULL, new_state);
+   gdk_threads_enter ();
    return TRUE;
  }
  
*************** window_get_new_state (GtkWidget *widget)
*** 629,640 ****
    gulong atom_count;
    gulong bytes_after;
    Atom *atom_list = NULL;
    gulong i;
  
!   XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (widget->window),
  		      gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE"),
  		      0, G_MAXLONG, False, XA_ATOM, &type, &format, &atom_count,
! 		      &bytes_after, (guchar **)&atom_list);
  
    if (type != None)
      {
--- 631,645 ----
    gulong atom_count;
    gulong bytes_after;
    Atom *atom_list = NULL;
+   union atom_list_union alu;
    gulong i;
  
!   alu.atom_list = &atom_list;
!   XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), 
! 		      GDK_WINDOW_XID (widget->window),
  		      gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE"),
  		      0, G_MAXLONG, False, XA_ATOM, &type, &format, &atom_count,
! 		      &bytes_after, alu.gu_extents);
  
    if (type != None)
      {
*************** window_property_changed_cb (GtkWidget *w
*** 663,682 ****
                              jobject peer)
  {
    unsigned long *extents;
  
!   static int id_set = 0;
!   static jmethodID postInsetsChangedEventID;
! 
!   if (!id_set)
!     {
!       jclass gtkwindowpeer = (*gdk_env)->FindClass (gdk_env,
! 				 "gnu/java/awt/peer/gtk/GtkWindowPeer");
!       postInsetsChangedEventID = (*gdk_env)->GetMethodID (gdk_env,
! 						      gtkwindowpeer,
! 						      "postInsetsChangedEvent",
! 						      "(IIII)V");
!     }
! 
    if (gdk_atom_intern ("_NET_FRAME_EXTENTS", FALSE) == event->atom
        && gdk_property_get (event->window,
                             gdk_atom_intern ("_NET_FRAME_EXTENTS", FALSE),
--- 668,676 ----
                              jobject peer)
  {
    unsigned long *extents;
+   union extents_union gu_ex;
  
!   gu_ex.extents = &extents;
    if (gdk_atom_intern ("_NET_FRAME_EXTENTS", FALSE) == event->atom
        && gdk_property_get (event->window,
                             gdk_atom_intern ("_NET_FRAME_EXTENTS", FALSE),
*************** window_property_changed_cb (GtkWidget *w
*** 687,699 ****
                             NULL,
                             NULL,
                             NULL,
!                            (guchar **)&extents))
!     (*gdk_env)->CallVoidMethod (gdk_env, peer,
! 				postInsetsChangedEventID,
! 				(jint) extents[2],  /* top */
! 				(jint) extents[0],  /* left */
! 				(jint) extents[3],  /* bottom */
! 				(jint) extents[1]); /* right */
  
    return FALSE;
  }
--- 681,731 ----
                             NULL,
                             NULL,
                             NULL,
!                            gu_ex.gu_extents))
!     {
!       gdk_threads_leave ();
!       (*gdk_env())->CallVoidMethod (gdk_env(), peer,
! 				    postInsetsChangedEventID,
! 				    (jint) extents[2],  /* top */
! 				    (jint) extents[0],  /* left */
! 				    (jint) extents[3],  /* bottom */
! 				    (jint) extents[1]); /* right */
!       gdk_threads_enter ();
!     }
!   
  
    return FALSE;
  }
+ 
+ static void
+ realize_cb (GtkWidget *widget, jobject peer)
+ {
+   jint top = 0;
+   jint left = 0;
+   jint bottom = 0;
+   jint right = 0;
+   jint width = 0;
+   jint height = 0;
+ 
+   width = (*gdk_env())->CallIntMethod (gdk_env(), peer, windowGetWidthID);
+   height = (*gdk_env())->CallIntMethod (gdk_env(), peer, windowGetHeightID);
+ 
+   window_get_frame_extents (widget, &top, &left, &bottom, &right);
+ 
+   (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ 				postInsetsChangedEventID,
+ 				top, left, bottom, right);
+ 
+   gtk_window_set_default_size (GTK_WINDOW (widget),
+ 			       MAX (1, width - left - right),
+ 			       MAX (1, height - top - bottom));
+ 
+   /* set the size like we do in nativeSetBounds */
+   gtk_widget_set_size_request (widget,
+ 			       MAX (1, width - left - right),
+ 			       MAX (1, height - top - bottom));
+ 
+   gtk_window_resize (GTK_WINDOW (widget),
+ 		     MAX (1, width - left - right),
+ 		     MAX (1, height - top - bottom));
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gthread-jni.c gcc-4.0.0/libjava/jni/gtk-peer/gthread-jni.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gthread-jni.c	Wed Oct  8 15:49:33 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gthread-jni.c	Sun Feb 20 04:14:24 2005
***************
*** 1,5 ****
  /* gthread-jni.c -- JNI threading routines for GLIB
!    Copyright (C) 1998 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gthread-jni.c -- JNI threading routines for GLIB
!    Copyright (C) 1998, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** exception statement from your version. *
*** 40,169 ****
  /************************************************************************/
  
  /*
!  * Julian Dolby (dolby@us.ibm.com)
!  * February 7, 2003
   *
   *  This code implements the GThreadFunctions interface for GLIB using 
   * Java threading primitives.  All of the locking and conditional variable
   * functionality required by GThreadFunctions is implemented using the
   * monitor and wait/notify functionality of Java objects.  The thread-
!  * local fucntionality uses the java.lang.ThreadLocal class. 
   *
!  *  This code is designed to be portable in that it makes no assumptions
   * about the underlying VM beyond that it implements the JNI functionality
   * that this code uses.
   *
!  *  The one piece that does not really work is trylock for mutexes.  The
!  * Java locking model does not include such functionality, and I do not
!  * see how to implement it without knowing something about how the VM
!  * implements locking.  
   *
   * NOTES:
   *
!  *  I have tested it only on JikesRVM---the CVS head as of early February
!  * 2003.
   *
!  *  Currently, use of this code is governed by the configuration option
!  * --enable-portable-native-sync
   *
   */
  
  
  /************************************************************************/
  /* Global data				     				*/
  /************************************************************************/
  
  #include "gthread-jni.h"
  
! /*  The VM handle.  This is set in GtkToolkitMain.gtkInit */
! JavaVM *gdk_vm;
  
  
  /************************************************************************/
! /* Utilities to reflect exceptions back to the VM			*/
  /************************************************************************/
  
! /*  This function checks for a pending exception, and rethrows it with
   * a wrapper RuntimeException to deal with possible type problems (in
   * case some calling piece of code does not expect the exception being
   * thrown) and to include the given extra message.
   */
! static void maybe_rethrow(JNIEnv *gdk_env, char *message, char *file, int line) {
!   jthrowable cause;
  
    /* rethrow if an exception happened */
!   if ((cause = (*gdk_env)->ExceptionOccurred(gdk_env)) != NULL) {
!     jstring jmessage;
!   jclass obj_class;
!     jobject obj;
!     jmethodID ctor;
  
!     /* allocate local message in Java */
!     int len = strlen(message) + strlen(file) + 25;
!     char buf[ len ];
!     bzero(buf, len);
!     sprintf(buf, "%s (at %s:%d)", message, file, line);
!     jmessage = (*gdk_env)->NewStringUTF(gdk_env, buf);
!     
!     /* create RuntimeException wrapper object */
!     obj_class = (*gdk_env)->FindClass (gdk_env, "java/lang/RuntimeException");
!     ctor = (*gdk_env)->GetMethodID(gdk_env, obj_class, "<init>", "(Ljava/langString;Ljava/lang/Throwable)V");
!     obj = (*gdk_env)->NewObject (gdk_env, obj_class, ctor, jmessage, cause);
  
!     /* throw it */
!     (*gdk_env)->Throw(gdk_env, (jthrowable)obj);
      }
  }
  
! /* This macro is used to include a source location in the exception message */
! #define MAYBE_RETHROW(_class, _message) \
! maybe_rethrow(_class, _message, __FILE__, __LINE__)
  
  
  /************************************************************************/
  /* Utilities to allocate and free java.lang.Objects			*/
  /************************************************************************/
  
! /*  Both the mutexes and the condition variables are java.lang.Object objects,
   * which this method allocates and returns a global ref.  Note that global
   * refs must be explicitly freed (isn't C fun?).
   */
! static jobject *allocatePlainObject() {
!   jclass obj_class;
!   jobject *obj;
!   JNIEnv *gdk_env;
!   jmethodID ctor;
! 
!   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   obj_class = (*gdk_env)->FindClass (gdk_env, "java/lang/Object");
!   MAYBE_RETHROW(gdk_env, "cannot find Object");
  
!   ctor = (*gdk_env)->GetMethodID(gdk_env, obj_class, "<init>", "()V");
!   MAYBE_RETHROW(gdk_env, "cannot find constructor");
  
!   obj = (jobject *) g_malloc (sizeof (jobject));
!   *obj = (*gdk_env)->NewObject (gdk_env, obj_class, ctor);
!   MAYBE_RETHROW(gdk_env, "cannot allocate object");
!   
!   *obj = (*gdk_env)->NewGlobalRef (gdk_env, *obj);
!   MAYBE_RETHROW(gdk_env, "cannot make global ref");
  
!   return obj;
  }
  
- /*  Frees a Java object given a global ref (isn't C fun?) */
- static void freePlainObject(jobject *obj) {
-   JNIEnv *gdk_env;
  
!   if (obj) {
!     (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!     (*gdk_env)->DeleteGlobalRef (gdk_env, *obj);
!     MAYBE_RETHROW(gdk_env, "cannot delete global ref");
!   
!     g_free (obj);
!   }
  }
  
  
--- 40,1205 ----
  /************************************************************************/
  
  /*
!  * @author Julian Dolby (dolby@us.ibm.com)
!  * @date February 7, 2003  implemented for GLIB v.1
!  * 
!  *
!  * @author Steven Augart 
!  * <steve+classpath at augart dot com>, <augart at watson dot ibm dot com>
!  * @date April 30, 2004 -- May 10 2004: Support new functions for Glib v.2,
!  * fix cond_wait to free and re-acquire the mutex,
!  * replaced trylock stub implementation with a full one.
   *
   *  This code implements the GThreadFunctions interface for GLIB using 
   * Java threading primitives.  All of the locking and conditional variable
   * functionality required by GThreadFunctions is implemented using the
   * monitor and wait/notify functionality of Java objects.  The thread-
!  * local functionality uses the java.lang.ThreadLocal class. 
   *
!  *  Classpath's AWT support uses GTK+ peers.  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 it needs this
!  * code in order to use Classpath's (GTK+-based) AWT routines.
!  *
!  *  This code should be portable; I believe it makes no assumptions
   * about the underlying VM beyond that it implements the JNI functionality
   * that this code uses.
   *
!  *  Currently, use of this code is governed by the configuration option
!  * --enable-portable-native-sync.  We will soon add a VM hook so the VM can
!  * select which threading model it wants to use at run time; at that point,
!  * the configuration option will go away.
!  *
!  * The code in this file uses only JNI 1.1, except for one JNI 1.2 function:
!  * GetEnv, in the JNI Invocation API.  (There seems to be no way around using
!  * GetEnv).
!  *
!  * ACKNOWLEDGEMENT:
!  * 
!  *  I would like to thank Mark Wielaard for his kindness in spending at least
!  * six hours of his own time in reviewing this code and correcting my GNU
!  * coding and commenting style.  --Steve Augart
!  *
   *
   * NOTES:
   *
!  *  This code has been tested with Jikes RVM and with Kaffe.
   *
!  *  This code should have proper automated unit tests.  I manually tested it
!  *  by running an application that uses AWT. --Steven Augart
   *
+  * MINOR NIT:
+  *
+  *  - Using a jboolean in the arglist to "throw()" and "rethrow()"
+  *    triggers many warnings from GCC's -Wconversion operation, because that
+  *    is not the same as the conversion (upcast to an int) that would occur in
+  *    the absence of a prototype.
+  *    
+  *    It would be very slightly more efficient to just pass the jboolean, but
+  *    is not worth the clutter of messages.  The right solution would be to
+  *    turn off the -Wconversion warning for just this file, *except* that
+  *    -Wconversion also warns you against constructs such as:
+  *        unsigned u = -1;
+  *    and that is a useful warning.  So I went from a "jboolean" to a
+  *    "gboolean"  (-Wconversion is not enabled by default for GNU Classpath,
+  *    but it is in my own CFLAGS, which, for gcc 3.3.3, read: -pipe -ggdb3 -W
+  *    -Wall -Wbad-function-cast -Wcast-align -Wpointer-arith -Wcast-qual
+  *    -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations
+  *    -fkeep-static-consts -fkeep-inline-functions -Wundef -Wwrite-strings
+  *    -Wno-aggregate-return -Wmissing-noreturn -Wnested-externs -Wtrigraphs
+  *    -Wconversion -Wsign-compare -Wno-float-equal -Wmissing-format-attribute
+  *    -Wno-unreachable-code -Wdisabled-optimization )
   */
  
+ #include <config.h>
+ 
+ /************************************************************************/
+ /* Configuration							*/
+ /************************************************************************/
+ 
+ /** Tracing and Reporting  **/
+ #define TRACE_API_CALLS	    0	/* announce entry and exit into each method,
+ 				   by printing to stderr. */
+ 
+ #define TRACE_MONITORS      0	/* Every enterMonitor() and exitMonitor() goes
+ 				   to stderr. */
+ 
+ /** Trouble handling.  There is a discussion below of this.  **/ 
+ #define EXPLAIN_TROUBLE	    1	/* Describe any unexpected trouble that
+ 				   happens.  This is a superset
+ 				   of EXPLAIN_BROKEN, and if set trumps an
+ 				   unset EXPLAIN_BROKEN.  It is not a strict
+ 				   superset, since at the moment there is no
+ 				   TROUBLE that is not also BROKEN.   
+ 
+ 				   Use criticalMsg() to describe the problem.
+ 				 */
+ 
+ #define EXPLAIN_BROKEN	    1	/* Describe trouble that is serious enough to
+ 				   be BROKEN.  (Right now all trouble is at
+ 				   least BROKEN.) */
+ 
+ /* There is no EXPLAIN_BADLY_BROKEN definition.  We always explain
+    BADLY_BROKEN trouble, since there is no other way to report it.  */
+ 
+ 
+ /** Error Handling  **/
+ #define DIE_IF_BROKEN	    1	/* Dies if serious trouble happens.  There is
+ 				   really no non-serious trouble, except
+ 				   possibly problems that arise during
+ 				   pthread_create, which are reported by a
+ 				   GError.
+ 
+ 				   If you do not set DIE_IF_BROKEN, then
+ 				   trouble will raise a Java RuntimeException.
+ 				   We probably do want to die right away,
+ 				   since anything that's BROKEN really
+ 				   indicates a programming error or a
+ 				   system-wide error, and that's what the glib
+ 				   documentation says you should do in case of
+ 				   that kind of error in a glib-style
+ 				   function.  But it does work to turn this
+ 				   off.  */
+ 
+ #if  DIE_IF_BROKEN
+ #define DIE_IF_BADLY_BROKEN 1	/* DIE_IF_BROKEN implies DIE_IF_BADLY_BROKEN */
+ #else
+ #define DIE_IF_BADLY_BROKEN 1	/* Die if the system is badly broken --
+ 				   that is, if we have further trouble while
+ 				   attempting to throw an exception
+ 				   upwards, or if we are unable to generate
+ 				   one of the classes we'll need in order to
+ 				   throw wrapped exceptions upward.
+ 
+ 				   If unset, we will print a warning message,
+ 				   and limp along anyway.  Not that the system
+ 				   is likely to work.  */
+ #endif
+ 
+ /** Performance tuning parameters **/
+ 
+ #define ENABLE_EXPENSIVE_ASSERTIONS 0	/* Enable expensive assertions? */
+ 
+ #define DELETE_LOCAL_REFS   1	/* Whether to delete local references.   
+ 
+ 				   JNI only guarantees that there wil be 16
+ 				   available.  (Jikes RVM provides an number
+ 				   only limited by VM memory.)
+ 
+ 				   Jikes RVM will probably perform faster if
+ 				   this is turned off, but other VMs may need
+ 				   this to be turned on in order to perform at
+ 				   all, or might need it if things change.
+ 
+ 				   Remember, we don't know how many of those
+ 				   local refs might have already been used up
+ 				   by higher layers of JNI code that end up
+ 				   calling g_thread_self(),
+ 				   g_thread_set_private(), and so on.
+ 
+ 				   We set this to 1 for GNU Classpath, since
+ 				   one of our principles is "always go for the
+ 				   most robust implementation" */
+ 
+ #define  HAVE_JNI_VERSION_1_2   0 /* Assume we don't.  We could
+ 				     dynamically check for this.  We will
+ 				     assume JNI 1.2 in later versions of
+ 				     Classpath.  
+ 
+                                      As it stands, the code in this file
+                                      already needs one JNI 1.2 function:
+                                      GetEnv, in the JNI Invocation API.
+ 
+ 				     TODO This code hasn't been tested yet.
+ 				     And really hasn't been implemented yet.
+ 				     */ 
  
  /************************************************************************/
  /* Global data				     				*/
  /************************************************************************/
  
+ #if defined HAVE_STDINT_H
+ #include <stdint.h>		/* provides intptr_t */
+ #elif defined HAVE_INTTYPES_H
+ #include <inttypes.h>
+ #endif
+ #include <stdarg.h>		/* va_list */
+ #include <glib.h>
  #include "gthread-jni.h"
+ #include <assert.h>		/* assert() */
  
! /* For Java thread priority constants. */
! #include <gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h>
! 
! /* Since not all JNI header generators actually define constants we
!  define them here explicitly. */
! #ifndef gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_MIN_PRIORITY
! #define gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_MIN_PRIORITY 1
! #endif
! #ifndef gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_NORM_PRIORITY
! #define gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_NORM_PRIORITY 5
! #endif
! #ifndef gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_MAX_PRIORITY
! #define gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_MAX_PRIORITY 10
! #endif
! 
! /*  The VM handle.  This is set in
!     Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit */
! JavaVM *the_vm;
! 
! /* Unions used for type punning. */
! union env_union
! {
!   void **void_env;
!   JNIEnv **jni_env;
! };
  
+ union func_union
+ {
+   void *void_func;
+   GThreadFunc g_func;
+ };
+ 
+ /* Forward Declarations for Functions  */
+ static int threadObj_set_priority (JNIEnv * env, jobject threadObj,
+ 				   GThreadPriority gpriority);
+ static void fatalMsg (const char fmt[], ...)
+      __attribute__ ((format (printf, 1, 2)))
+      __attribute__ ((noreturn));
+ 
+ static void criticalMsg (const char fmt[], ...)
+      __attribute__ ((format (printf, 1, 2)));
+ 
+ static void tracing (const char fmt[], ...)
+      __attribute__ ((format (printf, 1, 2)));
+ 
+ static jint javaPriorityLevel (GThreadPriority priority)
+      __attribute__ ((const));
  
  /************************************************************************/
! /* Trouble-handling, including utilities to reflect exceptions		*/
! /* back to the VM.  Also some status reporting.				*/
  /************************************************************************/
  
! /* How are we going to handle problems?
! 
!    There are several approaches:
! 
!    1)  Report them with the GError mechanism.
! 
!        (*thread_create)() is the only one of these functions that takes a
!        GError pointer.  And the only G_THREAD error defined maps onto EAGAIN.
!        We don't have any errors in our (*thread_create)() implementation that
!        can be mapped to EAGAIN.  So this idea is a non-starter.
! 
!    2)  Reflect the exception back to the VM, wrapped in a RuntimeException.
!        This will fail sometimes, if we're so broken (BADLY_BROKEN) that we
!        fail to throw the exception. 
! 
!    3)  Abort execution.  This is what the glib functions themselves do for
!        errors that they can't report via GError.
! 
!        Enable DIE_IF_BROKEN and/or DIE_IF_BADLY_BROKEN to
!        make this the default for BROKEN and/or BADLY_BROKEN trouble.
! 
!    4) Display messages to stderr.  We always do this for BADLY_BROKEN
!       trouble.  The glib functions do that for errors they can't report via
!       GError. 
! 
!    There are some complications.
! 
!    When I attempted to report a problem in g_thread_self() using g_critical (a
!    macro around g_log(), I found that g_log in turn looks for thread-private
!    data and calls g_thread_self() again.
! 
!    We got a segfault, probably due to stack overflow.  So, this code doesn't
!    use the g_critical() and g_error() functions any more.  Nor do we use
!    g_assert(); we use the C library's assert() instead.
! */
! 
! 
! #define WHERE __FILE__ ":" G_STRINGIFY(__LINE__) ": "
! 
! /* This is portable to older compilers that lack variable-argument macros.
!    This used to be just g_critical(), but then we ran into the error reporting
!    problem discussed above.
! */
! static void
! fatalMsg (const char fmt[], ...)
! {
!   va_list ap;
!   va_start (ap, fmt);
!   vfprintf (stderr, fmt, ap);
!   va_end (ap);
!   fputs ("\nAborting execution\n", stderr);
!   abort ();
! }
! 
! 
! static void
! criticalMsg (const char fmt[], ...)
! {
!   va_list ap;
!   va_start (ap, fmt);
!   vfprintf (stderr, fmt, ap);
!   va_end (ap);
!   putc ('\n', stderr);
! }
! 
! /* Unlike the other two, this one does not append a newline.  This is only
!    used if one of the TRACE_ macros is defined.  */
! static void
! tracing (const char fmt[], ...)
! {
!   va_list ap;
!   va_start (ap, fmt);
!   vfprintf (stderr, fmt, ap);
!   va_end (ap);
! }
! 
! #define assert_not_reached()						\
!   do									\
!     {									\
!       fputs(WHERE "You should never get here.  Aborting execution.\n", 	\
! 	    stderr);							\
!       abort();								\
!     }									\
!   while(0)
! 
! 
! #if DIE_IF_BADLY_BROKEN
! #define BADLY_BROKEN fatalMsg
! #else
! #define BADLY_BROKEN criticalMsg
! /* So, the user may still attempt to recover, even though we do not advise
!    this. */
! #endif
! 
! /* I find it so depressing to have to use C without varargs macros. */
! #define BADLY_BROKEN_MSG WHERE "Something fundamental"		\
! 	" to GNU Classpath's AWT JNI broke while we were trying to pass up a Java error message"
! 
! #define BADLY_BROKEN0()				\
!     BADLY_BROKEN(BADLY_BROKEN_MSG);
! #define	    BADLY_BROKEN1(msg)			\
!     BADLY_BROKEN(BADLY_BROKEN_MSG ": " msg)
! #define	    BADLY_BROKEN2(msg, arg)			\
!     BADLY_BROKEN(BADLY_BROKEN_MSG ": " msg, arg)
! #define	    BADLY_BROKEN3(msg, arg, arg2) 		\
!     BADLY_BROKEN(BADLY_BROKEN_MSG ": " msg, arg1, arg2)
! #define	    BADLY_BROKEN4(msg, arg, arg2, arg3) 		\
!     BADLY_BROKEN(BADLY_BROKEN_MSG ": " msg, arg1, arg2, arg3)
! 
! #define DELETE_LOCAL_REF(env, ref) 		\
!   do 						\
!     {						\
!       if ( DELETE_LOCAL_REFS )			\
! 	{					\
! 	  (*env)->DeleteLocalRef (env, ref);	\
! 	  (ref) = NULL;				\
! 	}					\
!     }						\
!   while(0)
! 
! /* Cached info for Exception-wrapping */
! 
! jclass runtimeException_class;	/* java.lang.RuntimeException */
! jmethodID runtimeException_ctor; /* constructor for it */
! 
! 
! /* Throw a new RuntimeException.  It may wrap around an existing exception.
!    1 if we did rethrow, -1 if we had trouble while rethrowing.
!    isBroken is always true in this case. */
! static int
! throw (JNIEnv * env, jthrowable cause, const char *message,
!        gboolean isBroken, const char *file, int line)
! {
!   jstring jmessage;
!   gboolean describedException = FALSE;	/* Did we already describe the
! 					   exception to stderr or the
! 					   equivalent?   */
!   jthrowable wrapper;
! 
!   /* allocate local message in Java */
!   const char fmt[] = "In AWT JNI, %s (at %s:%d)";
!   size_t len = strlen (message) + strlen (file) + sizeof fmt + 25;
!   char *buf;
! 
!   if (EXPLAIN_TROUBLE || (isBroken && EXPLAIN_BROKEN))
!     {
!       criticalMsg ("%s:%d: AWT JNI failure%s: %s\n", file, line,
! 		   isBroken ? " (BROKEN)" : "", message);
!       if (cause)
! 	{
! 	  jthrowable currentException = (*env)->ExceptionOccurred (env);
! 
! 	  if (cause == currentException)
! 	    {
! 	      criticalMsg ("Description follows to System.err:");
! 	      (*env)->ExceptionDescribe (env);
! 	      /* ExceptionDescribe has the side-effect of clearing the pending
! 	         exception; relaunch it.  */
! 	      describedException = TRUE;
! 
! 	      if ((*env)->Throw (env, cause))
! 		{
! 		  BADLY_BROKEN1
! 		    ("Relaunching an exception with Throw failed.");
! 		  return -1;
! 		}
! 	    }
! 	  else
! 	    {
! 	      DELETE_LOCAL_REF (env, currentException);
! 	      criticalMsg (WHERE
! 			   "currentException != cause; something else happened"
! 			   " while handling an exception.");
! 	    }
! 	}
!     }				/* if (EXPLAIN_TROUBLE) */
! 
!   if (isBroken && DIE_IF_BROKEN)
!     fatalMsg ("%s:%d: Aborting execution; BROKEN: %s\n", file, line, message);
! 
!   if ((buf = malloc (len)))
!     {
!       memset (buf, 0, len);
!       g_snprintf (buf, len, fmt, message, file, line);
!       jmessage = (*env)->NewStringUTF (env, buf);
!       free (buf);
!     }
!   else
!     {
!       jmessage = NULL;
!     }
! 
!   /* Create the RuntimeException wrapper object and throw it.  It is OK for
!      CAUSE to be NULL. */
!   wrapper = (jthrowable) (*env)->NewObject
!     (env, runtimeException_class, runtimeException_ctor, jmessage, cause);
!   DELETE_LOCAL_REF (env, jmessage);
! 
!   if (!wrapper)
!     {
!       /* I think this should only happen:
!          - if there are bugs in my JNI code, or
!          - if the VM is broken, or 
!          - if we run out of memory. 
!        */
!       if (EXPLAIN_TROUBLE)
! 	{
! 	  criticalMsg (WHERE "GNU Classpath: JNI NewObject() could not create"
! 		       " a new java.lang.RuntimeException.");
! 	  criticalMsg ("We were trying to warn about the following"
! 		       " previous failure:");
! 	  criticalMsg ("%s:%d: %s", file, line, message);
! 	  criticalMsg ("The latest (NewObject()) exception's description"
! 		       " follows, to System.err:");
! 	  (*env)->ExceptionDescribe (env);
! 	}
!       BADLY_BROKEN1 ("Failure of JNI NewObject()"
! 		     " to make a java.lang.RuntimeException");
!       return -1;
!     }
! 
! 
!   /* throw it */
!   if ((*env)->Throw (env, wrapper))
!     {
!       /* Throw() should just never fail, unless we're in such severe trouble
!          that we might as well die. */
!       BADLY_BROKEN1
! 	("GNU Classpath: Failure of JNI Throw to report an Exception");
!       return -1;
!     }
! 
!   DELETE_LOCAL_REF (env, wrapper);
!   return 1;
! }
! 
! 
! 
! /* Rethrow an exception we received, wrapping it with a RuntimeException.  1
!    if we did rethrow, -1 if we had trouble while rethrowing.
!    CAUSE should be identical to the most recent exception that happened, so
!    that ExceptionDescribe will work.  (Otherwise nix.) */
! static int
! rethrow (JNIEnv * env, jthrowable cause, const char *message,
! 	 gboolean isBroken, const char *file, int line)
! {
!   assert (cause);
!   return throw (env, cause, message, isBroken, file, line);
! }
! 
! 
! /* This function checks for a pending exception, and rethrows it with
   * a wrapper RuntimeException to deal with possible type problems (in
   * case some calling piece of code does not expect the exception being
   * thrown) and to include the given extra message.
+  *
+  * Returns 0 if no problems found (so no exception thrown), 1 if we rethrew an
+  * exception.   Returns -1 on failure. 
   */
! static int
! maybe_rethrow (JNIEnv * env, const char *message, gboolean isBroken,
! 	       const char *file, int line)
! {
!   jthrowable cause = (*env)->ExceptionOccurred (env);
!   int ret = 0;
  
    /* rethrow if an exception happened */
!   if (cause)
!     {
!       ret = rethrow (env, cause, message, isBroken, file, line);
!       DELETE_LOCAL_REF (env, cause);
!     }
  
!   return 0;
! }
  
! /* MAYBE_TROUBLE() is used to include a source location in the exception
!    message. Once we have run maybe_rethrow, if there WAS trouble, 
!    return TRUE, else FALSE.   
! 
!    MAYBE_TROUBLE() is actually never used; all problems that throw exceptions
!    are BROKEN, at least.  Nothing is recoverable :(.  See the discussion of
!    possible errors at thread_create_jni_impl().  */
! #define MAYBE_TROUBLE(_env, _message)				\
! 	maybe_rethrow(_env, _message, FALSE, __FILE__, __LINE__)
! 
! /* MAYBE_TROUBLE(), but something would be BROKEN if it were true. */
! #define MAYBE_BROKEN(_env, _message)				\
! 	maybe_rethrow(_env, _message, TRUE, __FILE__, __LINE__)
! 
! /* Like MAYBE_TROUBLE(), TROUBLE() is never used. */
! #define TROUBLE(_env, _message)						\
! 	rethrow(_env, (*env)->ExceptionOccurred (env), _message, FALSE, \
! 		__FILE__, __LINE__)
! 
! #define BROKEN(_env, _message)						\
! 	rethrow (_env, (*env)->ExceptionOccurred (env), _message, TRUE, \
! 		 __FILE__, __LINE__)
! 
! /* Like MAYBE_TROUBLE(), NEW_TROUBLE() is never used. */
! #define NEW_TROUBLE(_env, _message)					\
! 	throw (_env, NULL,  _message, FALSE, __FILE__, __LINE__)
! 
! #define NEW_BROKEN(_env, _message)				\
! 	throw (_env, NULL, _message, TRUE, __FILE__, __LINE__)
! 
! /* Like MAYBE_TROUBLE(), RETHROW_CAUSE() is never used. */
! #define RETHROW_CAUSE(_env, _cause, _message)				\
! 	rethrow (_env, _cause, _message, FALSE, __FILE__, __LINE__)
! 
! #define BROKEN_CAUSE(_env, _cause, _message)				\
! 	rethrow (_env, _cause, _message, TRUE, __FILE__, __LINE__)
! 
! /* Macros to handle the possibility that someone might have called one of the
!    GThreadFunctions API functions with a Java exception pending.  It is
!    generally discouraged to continue to use JNI after a Java exception has
!    been raised.  Sun's JNI book advises that one trap JNI errors immediately
!    and not continue with an exception pending.
! 
!    These are #if'd out for these reasons:
! 
!    1) They do not work in the C '89 subset that Classpath is currently 
!       (2004 May 10) sticking to; HIDE_OLD_TROUBLE() includes a declaration
!       that should be in scope for the rest of the function, so it needs a
!       language version that lets you mix declarations and statements.  (This
!       could be worked around if it were important.)
! 
!    2) They chew up more time and resources.  
! 
!    3) There does not ever seem to be old trouble -- the assertion in
!       HIDE_OLD_TROUBLE never goes off. 
! 
!    You will want to re-enable them if this code needs to be used in a context
!    where old exceptions might be pending when the GThread functions are
!    called.
! 
!    The implementations in this file are responsible for skipping around calls
!    to SHOW_OLD_TROUBLE() if they've raised exceptions during the call.  So, if
!    we reach SHOW_OLD_TROUBLE, we are guaranteed that there are no exceptions
!    pending. */
! #if 1
! #define HIDE_OLD_TROUBLE(env)				\
!     assert ( NULL == (*env)->ExceptionOccurred (env) )
! 
! #define SHOW_OLD_TROUBLE()	\
!     assert ( NULL == (*env)->ExceptionOccurred (env) )
! #else  /* 0 */
! #define HIDE_OLD_TROUBLE(env)					\
!    jthrowable savedTrouble = (*env)->ExceptionOccurred (env);	\
!    (*env)->ExceptionClear (env);
! 
! #define SHOW_OLD_TROUBLE() do 					\
! {								\
!   assert ( NULL == (*env)->ExceptionOccurred (env) )		\
!   if (savedTrouble) 						\
!     {								\
!       if ((*env)->Throw (env, savedTrouble)) 			\
! 	  BADLY_BROKEN ("ReThrowing the savedTrouble failed");	\
!     }								\
!   DELETE_LOCAL_REF (env, savedTrouble);				\
! } while(0)
! 
! #endif /* 0 */
! 
! /* Set up the cache of jclass and jmethodID primitives we need
!    in order to throw new exceptions and rethrow exceptions.  We do this
!    independently of the other caching.  We need to have this cache set up
!    first, so that we can then report errors properly. 
! 
!    If any errors while setting up the error cache, the world is BADLY_BROKEN.
! 
!    May be called more than once.
! 
!    Returns -1 if the cache was not initialized properly, 1 if it was.  
! */
! static int
! setup_exception_cache (JNIEnv * env)
! {
!   static int exception_cache_initialized = 0;	/* -1 for trouble, 1 for proper
! 						   init.  */
! 
!   jclass lcl_class;		/* a class used for local refs */
! 
!   if (exception_cache_initialized)
!     return exception_cache_initialized;
!   lcl_class = (*env)->FindClass (env, "java/lang/RuntimeException");
!   if ( ! lcl_class )
!     {
!       BADLY_BROKEN1 ("Broken Class library or VM?"
! 		     "  Couldn't find java/lang/RuntimeException");
!       return exception_cache_initialized = -1;
      }
+   /* Pin it down. */
+   runtimeException_class = (jclass) (*env)->NewGlobalRef (env, lcl_class);
+   DELETE_LOCAL_REF (env, lcl_class);
+   if (!runtimeException_class)
+     {
+       BADLY_BROKEN1 ("Serious trouble: could not turn"
+ 		     " java.lang.RuntimeException into a global reference");
+       return exception_cache_initialized = -1;
+     }
+ 
+   runtimeException_ctor = 
+     (*env)->GetMethodID (env, runtimeException_class, "<init>",
+ 			   "(Ljava/lang/String;Ljava/lang/Throwable;)V");
+   if ( ! runtimeException_ctor )
+     {
+       BADLY_BROKEN1 ("Serious trouble: classpath couldn't find a"
+ 		     " two-arg constructor for java/lang/RuntimeException");
+       return exception_cache_initialized = -1;
+     }
+ 
+   return exception_cache_initialized = 1;
  }
  
! 
! /**********************************************************/
! /***** The main cache *************************************/
! /**********************************************************/
! 
! /** This is a cache of all classes, methods, and field IDs that we use during
!    the run.  We maintain a permanent global reference to each of the classes
!    we cache, since otherwise the (local) jclass that refers to that class
!    would go out of scope and possibly be reused in further calls.
! 
!    The permanent global reference also achieves the secondary goal of
!    protecting the validity of the methods and field IDs in case the classes
!    were otherwise unloaded and then later loaded again.  Obviously, this will
!    never happen to classes such as java.lang.Thread and java.lang.Object, but
!    the primary reason for maintaining permanent global refs is sitll valid.
! 
!    The code in jnilink.c has a similar objective.  TODO: Consider using that
!    code instead.
! 
!    --Steven Augart
! */
! 
! /* All of these are cached classes and method IDs: */
! /* java.lang.Object */
! static jclass obj_class;		/* java.lang.Object */
! static jmethodID obj_ctor;		/* no-arg Constructor for java.lang.Object */
! static jmethodID obj_notify_mth;	/* java.lang.Object.notify() */
! static jmethodID obj_notifyall_mth;	/* java.lang.Object.notifyall() */
! static jmethodID obj_wait_mth;		/* java.lang.Object.wait() */
! static jmethodID obj_wait_nanotime_mth; /* java.lang.Object.wait(JI) */
! 
! /* GThreadMutex and its methods */
! static jclass mutex_class;
! static jmethodID mutex_ctor;
! static jfieldID mutex_lockForPotentialLockers_fld;
! static jfieldID mutex_potentialLockers_fld;
! 
! /* java.lang.Thread and its methods*/
! static jclass thread_class;		/* java.lang.Thread */
! static jmethodID thread_current_mth;	/* Thread.currentThread() */
! static jmethodID thread_equals_mth;	/* Thread.equals() */
! static jmethodID thread_join_mth;	/* Thread.join() */
! static jmethodID thread_setPriority_mth; /* Thread.setPriority() */
! static jmethodID thread_stop_mth;	/* Thread.stop() */
! static jmethodID thread_yield_mth;	/* Thread.yield() */
! 
! /* java.lang.ThreadLocal and its methods */
! static jclass threadlocal_class;	/* java.lang.ThreadLocal */
! static jmethodID threadlocal_ctor;	/* Its constructor */
! static jmethodID threadlocal_set_mth;	/* ThreadLocal.set() */
! static jmethodID threadlocal_get_mth;	/* ThreadLocal.get() */
! 
! /* java.lang.Long and its methods */
! static jclass long_class;		/* java.lang.Long */
! static jmethodID long_ctor;		/* constructor for it: (J) */
! static jmethodID long_longValue_mth;	/* longValue()J */
! 
! 
! /* GThreadNativeMethodRunner */
! static jclass runner_class;
! static jmethodID runner_ctor;
! static jmethodID runner_threadToThreadID_mth;
! static jmethodID runner_threadIDToThread_mth;
! static jmethodID runner_deRegisterJoinable_mth;
! static jmethodID runner_start_mth;	/* Inherited Thread.start() */
! 
! 
! /* java.lang.InterruptedException */
! static jclass interrupted_exception_class;
! 
! 
! 
! 
! /* Returns a negative value if there was trouble during initialization.
!    Returns a positive value of the cache was initialized correctly.
!    Never returns zero. */
! static int
! setup_cache (JNIEnv * env)
! {
!   jclass lcl_class;
!   static int initialized = 0;	/* 1 means initialized, 0 means uninitialized,
! 				   -1 means mis-initialized */
! 
!   if (initialized)
!     return initialized;
! 
!   /* make sure we can report on trouble */
!   if (setup_exception_cache (env) < 0)
!     return initialized = -1;
! 
! #ifdef JNI_VERSION_1_2
!   if (HAVE_JNI_VERSION_1_2)
!     assert ( ! (*env)->ExceptionCheck (env));
!   else
! #endif
!     assert ( ! (*env)->ExceptionOccurred (env));
! 
!   /* java.lang.Object and its methods */
!   lcl_class = (*env)->FindClass (env, "java/lang/Object");
!   if (!lcl_class)
!     {
!       BROKEN (env, "cannot find java.lang.Object");
!       return initialized = -1;
!     }
! 
!   /* Pin it down. */
!   obj_class = (jclass) (*env)->NewGlobalRef (env, lcl_class);
!   DELETE_LOCAL_REF (env, lcl_class);
!   if (!obj_class)
!     {
!       BROKEN (env, "Cannot get a global reference to java.lang.Object");
!       return initialized = -1;
!     }
! 
!   obj_ctor = (*env)->GetMethodID (env, obj_class, "<init>", "()V");
!   if (!obj_ctor)
!     {
!       BROKEN (env, "cannot find constructor for java.lang.Object");
!       return initialized = -1;
!     }
! 
!   obj_notify_mth = (*env)->GetMethodID (env, obj_class, "notify", "()V");
!   if ( ! obj_notify_mth )
!     {
!       BROKEN (env, "cannot find java.lang.Object.notify()V");
!       return initialized = -1;
!     }
! 
!   obj_notifyall_mth =
!     (*env)->GetMethodID (env, obj_class, "notifyAll", "()V");
!   if ( ! obj_notifyall_mth)
!     {
!       BROKEN (env, "cannot find java.lang.Object.notifyall()V");
!       return initialized = -1;
!     }
! 
!   obj_wait_mth = (*env)->GetMethodID (env, obj_class, "wait", "()V");
!   if ( ! obj_wait_mth )
!     {
!       BROKEN (env, "cannot find Object.<wait()V>");
!       return initialized = -1;
!     }
! 
!   obj_wait_nanotime_mth = 
!     (*env)->GetMethodID (env, obj_class, "wait", "(JI)V");
!   if ( ! obj_wait_nanotime_mth )
!     {
!       BROKEN (env, "cannot find Object.<wait(JI)V>");
!       return initialized = -1;
!     }
! 
!   /* GThreadMutex and its methods */
!   lcl_class = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GThreadMutex");
!   if ( ! lcl_class)
!     {
!       BROKEN (env, "cannot find gnu.java.awt.peer.gtk.GThreadMutex");
!       return initialized = -1;
!     }
!   /* Pin it down. */
!   mutex_class = (jclass) (*env)->NewGlobalRef (env, lcl_class);
!   DELETE_LOCAL_REF (env, lcl_class);
!   if ( ! mutex_class)
!     {
!       BROKEN (env, "Cannot get a global reference to GThreadMutex");
!       return initialized = -1;
!     }
! 
!   mutex_ctor = (*env)->GetMethodID (env, mutex_class, "<init>", "()V");
!   if ( ! mutex_ctor)
!     {
!       BROKEN (env, "cannot find zero-arg constructor for GThreadMutex");
!       return initialized = -1;
!     }
! 
!   mutex_potentialLockers_fld = (*env)->GetFieldID
!     (env, mutex_class, "potentialLockers", "I");
!   if ( ! mutex_class )
!     {
!       BROKEN (env, "cannot find GThreadMutex.potentialLockers");
!       return initialized = -1;
!     }
! 
!   if (! (mutex_lockForPotentialLockers_fld = (*env)->GetFieldID
! 	 (env, mutex_class, "lockForPotentialLockers", "Ljava/lang/Object;")))
!     {
!       BROKEN (env, "cannot find GThreadMutex.lockForPotentialLockers");
!       return initialized = -1;
!     }
! 
! 
!   /* java.lang.Thread */
!   if (! (lcl_class = (*env)->FindClass (env, "java/lang/Thread")))
!     {
!       BROKEN (env, "cannot find java.lang.Thread");
!       return initialized = -1;
!     }
! 
!   /* Pin it down. */
!   thread_class = (jclass) (*env)->NewGlobalRef (env, lcl_class);
!   DELETE_LOCAL_REF (env, lcl_class);
!   if (!thread_class)
!     {
!       BROKEN (env, "Cannot get a global reference to java.lang.Thread");
!       return initialized = -1;
!     }
! 
!   thread_current_mth =
!     (*env)->GetStaticMethodID (env, thread_class, "currentThread",
! 			       "()Ljava/lang/Thread;");
!   if (!thread_current_mth)
!     {
!       BROKEN (env, "cannot find Thread.currentThread() method");
!       return initialized = -1;
!     }
! 
!   thread_equals_mth = 
!     (*env)->GetMethodID (env, thread_class, "equals", "(Ljava/lang/Object;)Z");
!   if (!thread_equals_mth)
!     {
!       BROKEN (env, "cannot find Thread.equals() method");
!       return initialized = -1;
!     }
! 
!   thread_join_mth = (*env)->GetMethodID (env, thread_class, "join", "()V");
!   if (!thread_join_mth)
!     {
!       BROKEN (env, "cannot find Thread.join() method");
!       return initialized = -1;
!     }
! 
!   thread_stop_mth = (*env)->GetMethodID (env, thread_class, "stop", "()V");
!   if ( ! thread_stop_mth )
!     {
!       BROKEN (env, "cannot find Thread.stop() method");
!       return initialized = -1;
!     }
! 
!   thread_setPriority_mth = 
!     (*env)->GetMethodID (env, thread_class, "setPriority", "(I)V");
!   if ( ! thread_setPriority_mth )
!     {
!       BROKEN (env, "cannot find Thread.setPriority() method");
!       return initialized = -1;
!     }
! 
!   thread_yield_mth = 
!     (*env)->GetStaticMethodID (env, thread_class, "yield", "()V");
!   if ( ! thread_yield_mth )
!     {
!       BROKEN (env, "cannot find Thread.yield() method");
!       return initialized = -1;
!     }
! 
!   /* java.lang.ThreadLocal */
!   lcl_class = (*env)->FindClass (env, "java/lang/ThreadLocal");
!   if ( ! lcl_class )
!     {
!       BROKEN (env, "cannot find class java.lang.ThreadLocal");
!       return initialized = -1;
!     }
! 
!   /* Pin it down. */
!   threadlocal_class = (jclass) (*env)->NewGlobalRef (env, lcl_class);
!   DELETE_LOCAL_REF (env, lcl_class);
!   if ( ! threadlocal_class )
!     {
!       BROKEN (env, "Cannot get a global reference to java.lang.ThreadLocal");
!       return initialized = -1;
!     }
! 
!   threadlocal_ctor = (*env)->GetMethodID (env, threadlocal_class, 
!                                           "<init>", "()V");
!   if ( ! threadlocal_ctor )
!     {
!       BROKEN (env, "cannot find ThreadLocal.<init>()V");
!       return initialized = -1;
!     }
!   
!   threadlocal_get_mth = (*env)->GetMethodID (env, threadlocal_class,
!                                              "get", "()Ljava/lang/Object;");
!   if ( ! threadlocal_get_mth )
!     {
!       BROKEN (env, "cannot find java.lang.ThreadLocal.get()Object");
!       return initialized = -1;
!     }
! 
!   threadlocal_set_mth = (*env)->GetMethodID (env, threadlocal_class,
!                                              "set", "(Ljava/lang/Object;)V");
!   if ( ! threadlocal_set_mth )
!     {
!       BROKEN (env, "cannot find ThreadLocal.set(Object)V");
!       return initialized = -1;
!     }
! 
!   /* java.lang.Long */
!   lcl_class = (*env)->FindClass (env, "java/lang/Long");
!   if ( ! lcl_class )
!     {
!       BROKEN (env, "cannot find class java.lang.Long");
!       return initialized = -1;
!     }
! 
!   /* Pin it down. */
!   long_class = (jclass) (*env)->NewGlobalRef (env, lcl_class);
!   DELETE_LOCAL_REF (env, lcl_class);
!   if (!long_class)
!     {
!       BROKEN (env, "Cannot get a global reference to java.lang.Long");
!       return initialized = -1;
!     }
! 
!   long_ctor = (*env)->GetMethodID (env, long_class, "<init>", "(J)V");
!   if (!long_ctor)
!     {
!       BROKEN (env, "cannot find method java.lang.Long.<init>(J)V");
!       return initialized = -1;
!     }
! 
!   long_longValue_mth =
!     (*env)->GetMethodID (env, long_class, "longValue", "()J");
!   if (!long_longValue_mth)
!     {
!       BROKEN (env, "cannot find method java.lang.Long.longValue()J");
!       return initialized = -1;
!     }
! 
! 
!   /* GThreadNativeMethodRunner */
!   lcl_class = 
!     (*env)->FindClass (env,
!                        "gnu/java/awt/peer/gtk/GThreadNativeMethodRunner");
!   if ( ! lcl_class )
!     {
!       BROKEN (env,
! 	      "cannot find gnu.java.awt.peer.gtk.GThreadNativeMethodRunner");
!       return initialized = -1;
!     }
! 
!   /* Pin it down. */
!   runner_class = (jclass) (*env)->NewGlobalRef (env, lcl_class);
!   DELETE_LOCAL_REF (env, lcl_class);
!   if (!runner_class)
!     {
!       BROKEN (env,
! 	      "Cannot get a global reference to the class GThreadNativeMethodRunner");
!       return initialized = -1;
!     }
! 
!   runner_ctor = (*env)->GetMethodID (env, runner_class, "<init>", "(JJZ)V");
!   if ( ! runner_ctor )
!     {
!       BROKEN (env,
! 	      "cannot find method GThreadNativeMethodRunner.<init>(JJZ)");
!       return initialized = -1;
!     }
!       
!   runner_start_mth = (*env)->GetMethodID (env, runner_class, "start", "()V");
!   if ( ! runner_start_mth )
!     {
!       BROKEN (env, "cannot find method GThreadNativeMethodRunner.start()V");
!       return initialized = -1;
!     }
! 
! 
!   runner_threadToThreadID_mth = 
!     (*env)->GetStaticMethodID (env, runner_class,
!                                "threadToThreadID", "(Ljava/lang/Thread;)I");
!   if ( ! runner_threadToThreadID_mth )
!     {
!       BROKEN (env,
! 	      "cannot find method GThreadNativeMethodRunner.threadToThreadID(java.lang.Thread)I");
!       return initialized = -1;
!     }
! 
! 
!   runner_threadIDToThread_mth = 
!     (*env)->GetStaticMethodID (env, runner_class,
!                                "threadIDToThread", "(I)Ljava/lang/Thread;");
!   if ( ! runner_threadIDToThread_mth )
!     {
!       BROKEN (env,
! 	      "cannot find method GThreadNativeMethodRunner.threadIDToThread(I)java.lang.Thread");
!       return initialized = -1;
!     }
! 
! 
!   runner_deRegisterJoinable_mth =
!     (*env)->GetStaticMethodID (env, runner_class, "deRegisterJoinable",
! 			       "(Ljava/lang/Thread;)V");
!   if (!runner_deRegisterJoinable_mth)
!     {
!       BROKEN (env,
! 	      "cannot find method GThreadNativeMethodRunner.deRegisterJoinable(java.lang.Thread)V");
!       return initialized = -1;
!     }
! 
! 
!   /* java.lang.InterruptedException */
!   lcl_class = (*env)->FindClass (env, "java/lang/InterruptedException");
!   if ( ! lcl_class )
!     {
!       BROKEN (env, "cannot find class java.lang.InterruptedException");
!       return initialized = -1;
!     }
! 
!   /* Pin it down. */
!   interrupted_exception_class = (jclass) (*env)->NewGlobalRef (env, lcl_class);
!   DELETE_LOCAL_REF (env, lcl_class);
!   if (!interrupted_exception_class)
!     {
!       BROKEN (env, "Cannot make a global reference"
! 	      " to java.lang.InterruptedException");
!       return initialized = -1;
!     }
! 
! #ifdef JNI_VERSION_1_2
!   if (HAVE_JNI_VERSION_1_2)
!     assert ( ! (*env)->ExceptionCheck (env));
!   else
! #endif
!     assert ( ! (*env)->ExceptionOccurred (env));
! 
! 
!   return initialized = 1;
! }
! 
! 
! 
  
  
  /************************************************************************/
  /* Utilities to allocate and free java.lang.Objects			*/
  /************************************************************************/
  
! /* The condition variables are java.lang.Object objects,
   * which this method allocates and returns a global ref.  Note that global
   * refs must be explicitly freed (isn't C fun?).
   */
! static jobject
! allocatePlainObject (JNIEnv * env)
! {
!   jobject lcl_obj, global_obj;
  
!   lcl_obj = (*env)->NewObject (env, obj_class, obj_ctor);
!   if (!lcl_obj)
!     {
!       BROKEN (env, "cannot allocate object");
!       return NULL;
!     }
  
!   global_obj = (*env)->NewGlobalRef (env, lcl_obj);
!   DELETE_LOCAL_REF (env, lcl_obj);
!   if (!global_obj)
!     {
!       NEW_BROKEN (env, "cannot make global ref for a new plain Java object");
!       /* Deliberate fall-through */
!     }
  
!   return global_obj;
! }
  
! /*  Frees any Java object given a global ref (isn't C fun?) */
! static void
! freeObject (JNIEnv * env, jobject obj)
! {
!   if (obj)
!     {
!       (*env)->DeleteGlobalRef (env, obj);
!       /* DeleteGlobalRef can never fail */
!     }
  }
  
  
! /************************************************************************/
! /* Utilities to allocate and free Java mutexes				*/
! /************************************************************************/
  
! /* The mutexes are gnu.java.awt.peer.gtk.GThreadMutex objects,
!  * which this method allocates and returns a global ref.  Note that global
!  * refs must be explicitly freed (isn't C fun?).
!  *
!  * Free this with freeObject()
!  */
! static jobject
! allocateMutexObject (JNIEnv * env)
! {
!   jobject lcl_obj, global_obj;
! 
!   lcl_obj = (*env)->NewObject (env, mutex_class, mutex_ctor);
!   if (!lcl_obj)
!     {
!       BROKEN (env, "cannot allocate a GThreadMutex");
!       return NULL;
!     }
! 
!   global_obj = (*env)->NewGlobalRef (env, lcl_obj);
!   DELETE_LOCAL_REF (env, lcl_obj);
!   if (!global_obj)
!     {
!       NEW_BROKEN (env, "cannot make global ref");
!       /* Deliberate fallthrough */
!     }
! 
!   return global_obj;
  }
  
  
*************** static void freePlainObject(jobject *obj
*** 172,366 ****
  /************************************************************************/
  
  /* Lock a Java object */
! static void takeLock(JNIEnv *gdk_env, void *mutex) {
!   (*gdk_env)->MonitorEnter (gdk_env, *((jobject *)mutex));
!   MAYBE_RETHROW(gdk_env, "cannot get lock");
  }
  
  /* Unlock a Java object */
! static void releaseLock(JNIEnv *gdk_env, void *mutex) {
!     (*gdk_env)->MonitorExit (gdk_env, *((jobject *)mutex));
!   MAYBE_RETHROW(gdk_env, "cannot release lock");
  }
  
! /* Create a mutex, which is a java.lang.Object for us */
! static GMutex *g_mutex_new_jni_impl (void) {
!   return (GMutex*) allocatePlainObject();
  }
  
  /* Lock a mutex. */
! static void g_mutex_lock_jni_impl (GMutex *mutex __attribute__((unused))) {
!   JNIEnv *gdk_env;
  
!   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   takeLock(gdk_env, mutex);
  }
  
! /*  Try to lock a mutex.  Actually, do not try because Java objects
!  * do not provide such an interface.  To be at least minimally correct,
!  * pretend we tried and failed.
!  */
! static gboolean g_mutex_trylock_jni_impl
!   (GMutex *mutex __attribute__((unused)))
  {
!   // Shall we implement this in a JikesRVM-specific way under a flag?
!   return FALSE;
  }
  
  /* Unlock a mutex. */
! static void g_mutex_unlock_jni_impl (GMutex *mutex) {
!   JNIEnv *gdk_env;
  
!   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   releaseLock(gdk_env, mutex);
  }
  
! /* Free a mutex (isn't C fun?) */
! static void g_mutex_free_jni_impl (GMutex *mutex)
  {
!   freePlainObject( (jobject*)mutex );
  }
  
  
  /************************************************************************/
  /* Condition variable code		     				*/
  /************************************************************************/
  
  /* Create a new condition variable.  This is a java.lang.Object for us. */
! static GCond *g_cond_new_jni_impl () {
!   return (GCond*)allocatePlainObject();
  }
  
  /*  Signal on a condition variable.  This is simply calling Object.notify
   * for us.
   */
! static void g_cond_signal_jni_impl (GCond *cond) {
!   jclass lcl_class;
!   jmethodID signal_mth;
!   JNIEnv *gdk_env;
  
!   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   lcl_class = (*gdk_env)->FindClass (gdk_env, "java.lang.Object");
!   MAYBE_RETHROW(gdk_env, "cannot find Object");
!   
!   signal_mth = (*gdk_env)->GetMethodID(gdk_env, lcl_class, "notify", "()V");
!   MAYBE_RETHROW(gdk_env, "cannot find Object.<notify>");
  
    /* Must have locked an object to call notify */
!   takeLock(gdk_env, cond);
  
!   (*gdk_env)->CallVoidMethod(gdk_env, *(jobject*)cond, signal_mth);
!   MAYBE_RETHROW(gdk_env, "cannot signal mutex");
  
!   releaseLock(gdk_env, cond);
  }
  
  /*  Broadcast to all waiting on a condition variable.  This is simply 
   * calling Object.notifyAll for us.
   */
! static void g_cond_broadcast_jni_impl (GCond *cond) {
!   jclass lcl_class;
!   jmethodID bcast_mth;
!   JNIEnv *gdk_env;
  
!   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   lcl_class = (*gdk_env)->FindClass (gdk_env, "java.lang.Object");
!   MAYBE_RETHROW(gdk_env, "cannot find Object");
!   
!   bcast_mth = (*gdk_env)->GetMethodID(gdk_env, lcl_class, "notifyAll", "()V");
!   MAYBE_RETHROW(gdk_env, "cannot find Object.<notifyAll>");
  
    /* Must have locked an object to call notifyAll */
!   takeLock(gdk_env, cond);
  
!   (*gdk_env)->CallVoidMethod(gdk_env, *(jobject*)cond, bcast_mth);
!   MAYBE_RETHROW(gdk_env, "cannot broadcast to mutex");
  
!   releaseLock(gdk_env, cond);
  }
  
  
! /*  Wait on a condition variable.  For us, this simply means call
   * Object.wait.
   */
! static void g_cond_wait_jni_impl
!   (GCond *cond, GMutex *mutex __attribute__((unused)))
  {
!   jclass lcl_class;
!   jmethodID wait_mth;
!   JNIEnv *gdk_env;
  
!   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   lcl_class = (*gdk_env)->FindClass (gdk_env, "java.lang.Object");
!   MAYBE_RETHROW(gdk_env, "cannot find Object");
!   
!   wait_mth = (*gdk_env)->GetMethodID(gdk_env, lcl_class, "wait", "()V");
!   MAYBE_RETHROW(gdk_env, "cannot find Object.<wait>");
  
!   /* Must have locked an object to call wait */
!   takeLock(gdk_env, cond);
  
!   (*gdk_env)->CallVoidMethod(gdk_env, *(jobject*)cond, wait_mth);
!   MAYBE_RETHROW(gdk_env, "cannot wait on mutex");
  
!   releaseLock(gdk_env, cond);
  }
  
! /*  Wait on a condition vairable until a timeout.  This is a little tricky
   * for us.  We first call Object.wait(J) giving it the appropriate timeout
   * value.  On return, we check whether an InterruptedException happened.  If
!  * so, that is Java-speak for wait timing out.
   */
  static gboolean
! g_cond_timed_wait_jni_impl
!   (GCond *cond, GMutex *mutex __attribute__((unused)),
!    GTimeVal *end_time)
  {
!   jclass lcl_class;
!   jmethodID wait_mth;
!   JNIEnv *gdk_env;
!   jlong time;
    jthrowable cause;
  
!   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   lcl_class = (*gdk_env)->FindClass (gdk_env, "java.lang.Object");
!   MAYBE_RETHROW(gdk_env, "cannot find Object");
!   
!   wait_mth = (*gdk_env)->GetMethodID(gdk_env, lcl_class, "wait", "(J)V");
!   MAYBE_RETHROW(gdk_env, "cannot find Object.<wait(J)>");
!   
!   time = end_time->tv_sec*1000;
!   time += end_time->tv_usec/1000;
  
    /* Must have locked an object to call wait */
!   takeLock(gdk_env, cond);
  
!   (*gdk_env)->CallVoidMethod(gdk_env, *(jobject*)cond, wait_mth, time);
  
!   if ((cause = (*gdk_env)->ExceptionOccurred(gdk_env)) != NULL) {
!     jclass intr = (*gdk_env)->FindClass (gdk_env, "java.lang.InterruptedException");
!     if ( (*gdk_env)->IsInstanceOf(gdk_env, cause, intr) ) {
!       releaseLock(gdk_env, cond);
!   return FALSE;
!     } else {
!       MAYBE_RETHROW(gdk_env, "error in timed wait");
      }
-   }
  
!   releaseLock(gdk_env, cond);
  
!   return TRUE;
  }
  
! /* Free a condition variable.  (isn't C fun?) */
! static void g_cond_free_jni_impl (GCond *cond) {
!   freePlainObject( (jobject*)cond );
  }
  
  
--- 1208,1953 ----
  /************************************************************************/
  
  /* Lock a Java object */
! #define ENTER_MONITOR(env, m)			\
!     enterMonitor(env, m, G_STRINGIFY(m))
! 
! /* Return -1 on failure, 0 on success. */
! static int
! enterMonitor (JNIEnv * env, jobject monitorObj, const char monName[])
! {
!   if (TRACE_MONITORS)
!     tracing ("  <MonitorEnter(%s)>", monName);
!   assert (monitorObj);
!   if ((*env)->MonitorEnter (env, monitorObj) < 0)
!     {
!       BROKEN (env, "cannot enter monitor");
!       return -1;
!     }
!   return 0;
  }
  
+ 
  /* Unlock a Java object */
! #define EXIT_MONITOR(env, m)			\
!     exitMonitor(env, m, G_STRINGIFY(m))
! 
! static int
! exitMonitor (JNIEnv * env, jobject mutexObj, const char monName[])
! {
!   if (TRACE_MONITORS)
!     tracing (" <MonitorExit(%s)>", monName);
!   assert (mutexObj);
!   if ((*env)->MonitorExit (env, mutexObj) < 0)
!     {
!       BROKEN (env, "cannot exit monitor ");
!       return -1;
!     }
!   return 0;
  }
  
! 
! /************************************************************************/
! /* Miscellaneous utilities		     				*/
! /************************************************************************/
! 
! /* Get the Java Thread object that corresponds to a particular thread ID. 
!    A negative thread Id gives us a null object.
! 
!    Returns a local reference. 
! */
! static jobject
! getThreadFromThreadID (JNIEnv * env, gpointer gThreadID)
! {
!   jint threadNum = (jint) gThreadID;
!   jobject thread;
! 
!   if (threadNum < 0)
!     {
!       NEW_BROKEN (env, "getThreadFromThreadID asked to look up"
! 		       " a negative thread index");
!       return NULL;
!     }
! 
!   thread = (*env)->CallStaticObjectMethod
!     (env, runner_class, runner_threadIDToThread_mth, threadNum);
! 
!   if (MAYBE_BROKEN (env, "cannot get Thread for threadID "))
!     return NULL;
! 
!   return thread;
! }
! 
! /** Return the unique threadID of THREAD.
! 
!    Error handling: Return (gpointer) -1 on all failures, 
!    and propagate an exception. 
! */
! static gpointer
! getThreadIDFromThread (JNIEnv * env, jobject thread)
! {
!   jint threadNum;
! 
!   if (ENABLE_EXPENSIVE_ASSERTIONS)
!     assert ((*env)->IsInstanceOf (env, thread, thread_class));
! 
!   HIDE_OLD_TROUBLE (env);
! 
!   threadNum = (*env)->CallStaticIntMethod
!     (env, runner_class, runner_threadToThreadID_mth, thread);
! 
!   if (MAYBE_BROKEN (env, "cannot get ThreadID for a Thread "))
!     {
!       threadNum = -1;
!       goto done;
!     }
! 
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   return (gpointer) threadNum;
! }
! 
! 
! /************************************************************************/
! /* The Actual JNI functions that we pass to the function vector.	*/
! /************************************************************************/
! 
! 
! /************************************************************************/
! /* Mutex Functions                                                  	*/
! /************************************************************************/
! 
! /*** Mutex Utilities  ****/
! struct mutexObj_cache
! {
!   jobject lockForPotentialLockersObj;	/* Lock for the potentialLockers
! 					   field.  Local reference. */
!   jobject lockObj;		/* The real lock we use.  This is a GLOBAL
! 				   reference and must not be freed. */
! };
! 
! /* Initialize the cache of sub-locks for a particular mutex object.
! 
!   -1 on error, 0 on success.  The caller is not responsible for freeing the
!    partially-populated cache in case of failure (but in practice does anyway)
!    (This actually never fails, though, since GetObjectField allegedly never
!    fails.)  
! 
!    Guaranteed to leave all fields of the cache initialized, even if only to
!    zero. 
! */
! static int
! populate_mutexObj_cache (JNIEnv * env, jobject mutexObj,
! 			 struct mutexObj_cache *mcache)
! {
!   mcache->lockObj = mutexObj;	/* the mutexObj is its own lock.  */
!   assert (mcache->lockObj);
! 
!   mcache->lockForPotentialLockersObj = (*env)->GetObjectField
!     (env, mutexObj, mutex_lockForPotentialLockers_fld);
!   /* GetObjectField can never fail. */
! 
!   /*  Retrieving a NULL object could only happen if we somehow got a
!       a mutex object that was not properly intialized. */ 
!   assert (mcache->lockForPotentialLockersObj);
! 
!   return 0;
! }
! 
! 
! /* Clean out the mutexObj_cache, even if it was never populated. */
! static void
! clean_mutexObj_cache (JNIEnv * env, struct mutexObj_cache *mcache)
! {
!   /* OK to pass NULL refs to DELETE_LOCAL_REF */
!   DELETE_LOCAL_REF (env, mcache->lockForPotentialLockersObj);
!   /* mcache->lockObj is a GLOBAL reference. */
!   mcache->lockObj = NULL;
! }
! 
! /* -1 on failure, 0 on success.
!    The mutexObj_cache is already populated for this particular object. */
! static int
! mutexObj_lock (JNIEnv * env, jobject mutexObj, struct mutexObj_cache *mcache)
! {
!   jint potentialLockers;
! 
!   if (ENTER_MONITOR (env, mcache->lockForPotentialLockersObj))
!     return -1;
! 
!   assert(mutexObj);
!   potentialLockers = 
!     (*env)->GetIntField (env, mutexObj, mutex_potentialLockers_fld);
!   /* GetIntField() never fails. */
! 
!   ++potentialLockers;
! 
!   (*env)->SetIntField
!     (env, mutexObj, mutex_potentialLockers_fld, potentialLockers);
! 
!   if (EXIT_MONITOR (env, mcache->lockForPotentialLockersObj))
!     return -1;
! 
!   if (ENTER_MONITOR (env, mcache->lockObj))
!     return -1;
! 
!   SHOW_OLD_TROUBLE ();
! 
!   return 0;
! }
! 
! /* Unlock a GMutex, once we're already in JNI and have already gotten the
!    mutexObj for it.  This skips the messages that TRACE_API_CALLS would
!    print.
! 
!    Returns -1 on error, 0 on success. */
! static int
! mutexObj_unlock (JNIEnv * env, jobject mutexObj,
! 		 struct mutexObj_cache *mcache)
! {
!   jint potentialLockers;
!   int ret = -1;			/* assume failure until we suceed.  */
! 
!   /* Free the lock first, so that someone waiting for the lock can get it
!      ASAP. */
!   /* This is guaranteed not to block. */
!   if (EXIT_MONITOR (env, mcache->lockObj) < 0)
!     goto done;
! 
!   /* Kick down potentialLockers by one.  We do this AFTER we free the lock, so
!      that we hold it no longer than necessary. */
!   if (ENTER_MONITOR (env, mcache->lockForPotentialLockersObj) < 0)
!     goto done;
! 
!   potentialLockers = (*env)->GetIntField
!     (env, mutexObj, mutex_potentialLockers_fld);
!   /* GetIntField never fails */
! 
!   assert (potentialLockers >= 1);
!   --potentialLockers;
! 
!   (*env)->SetIntField
!     (env, mutexObj, mutex_potentialLockers_fld, potentialLockers);
!   /* Never fails, so the JNI book says. */
! 
!   /* Clean up. */
!   if (EXIT_MONITOR (env, mcache->lockForPotentialLockersObj) < 0)
!     goto done;
!   ret = 0;
! 
! done:
!   return ret;
! }
! 
! /*** Mutex Implementations ****/
! 
! /* Create a mutex, which is a java.lang.Object for us.
!    In case of failure, we'll return NULL.  Which will implicitly 
!    cause future calls to fail. */
! static GMutex *
! mutex_new_jni_impl (void)
! {
!   jobject mutexObj;
!   JNIEnv *env;
!   union env_union e;
! 
!   if (TRACE_API_CALLS)
!     tracing ("mutex_new_jni_impl()");
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
! 
!   if (setup_cache (env) < 0)
!     {
!       mutexObj = NULL;
!       goto done;
!     }
! 
!   mutexObj = allocateMutexObject (env);
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> %p \n", mutexObj);
! 
!   return (GMutex *) mutexObj;
! 
  }
  
  /* Lock a mutex. */
! static void
! mutex_lock_jni_impl (GMutex * mutex)
! {
!   struct mutexObj_cache mcache;
!   jobject mutexObj = (jobject) mutex;
!   JNIEnv *env;
!   union env_union e;
  
!   if (TRACE_API_CALLS)
!     tracing ("mutex_lock_jni_impl( mutexObj = %p )", mutexObj);
  
!   assert (mutexObj);
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
! 
!   if (setup_cache (env) < 0)
!     goto done;
! 
!   HIDE_OLD_TROUBLE (env);
! 
!   if (populate_mutexObj_cache (env, mutexObj, &mcache) < 0)
!     goto done;
! 
!   mutexObj_lock (env, mutexObj, &mcache);
!   /* No need to error check; we've already reported it in any case. */
! 
! done:
!   clean_mutexObj_cache (env, &mcache);
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID \n");
  }
  
! 
! /*  Try to lock a mutex.  Return TRUE if we succeed, FALSE if we fail.  
!     FALSE on error. */
! static gboolean
! mutex_trylock_jni_impl (GMutex * gmutex)
  {
!   jobject mutexObj = (jobject) gmutex;
!   jint potentialLockers;
!   gboolean ret = FALSE;
!   JNIEnv *env;
!   union env_union e;
!   struct mutexObj_cache mcache;
! 
!   if (TRACE_API_CALLS)
!     tracing ("mutex_trylock_jni_impl(mutexObj=%p)", mutexObj);
! 
!   assert (mutexObj);
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
! 
!   if (populate_mutexObj_cache (env, mutexObj, &mcache) < 0)
!     goto done;
! 
!   if (ENTER_MONITOR (env, mcache.lockForPotentialLockersObj))
!     goto done;
! 
!   potentialLockers = (*env)->GetIntField
!     (env, mutexObj, mutex_potentialLockers_fld);
! 
!   assert (potentialLockers >= 0);
! 
!   if (potentialLockers)
!     {
!       /* Already locked.  Clean up and leave. */
!       EXIT_MONITOR (env, mcache.lockForPotentialLockersObj);	
!       /* Ignore any error code from EXIT_MONITOR; there's nothing we could do
! 	 at this level, in any case. */
!       goto done;
!     }
! 
!   /* Guaranteed not to block. */
!   if (ENTER_MONITOR (env, mcache.lockObj))
!     {
!       /* Clean up the existing lock. */
!       EXIT_MONITOR (env, mcache.lockForPotentialLockersObj);	
!       /* Ignore any error code from EXIT_MONITOR; there's nothing we could do
! 	 at this level, in any case. */
!       goto done;
!     }
!   
! 
!   /* We have the monitor.  Record that fact. */
!   potentialLockers = 1;
!   (*env)->SetIntField
!     (env, mutexObj, mutex_potentialLockers_fld, potentialLockers);
!   /* Set*Field() never fails */
! 
!   ret = TRUE;			/* We have the lock. */
! 
!   /* Clean up. */
!   if (EXIT_MONITOR (env, mcache.lockForPotentialLockersObj))
!       goto done;		/* If we fail at this point, still keep the
! 				   main lock.  */
! 
!   SHOW_OLD_TROUBLE ();
! done:
!   clean_mutexObj_cache (env, &mcache);
!   if (TRACE_API_CALLS)
!     tracing (" ==> %s\n", ret ? "TRUE" : "FALSE");
!   return ret;
  }
  
+ 
  /* Unlock a mutex. */
! static void
! mutex_unlock_jni_impl (GMutex * gmutex)
! {
!   jobject mutexObj = (jobject) gmutex;
!   struct mutexObj_cache mcache;
!   JNIEnv *env;
!   union env_union e;
  
!   if (TRACE_API_CALLS)
!     tracing ("mutex_unlock_jni_impl(mutexObj=%p)", mutexObj);
  
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
! 
!   assert (mutexObj);
! 
!   if ( populate_mutexObj_cache (env, mutexObj, &mcache) < 0)
!     goto done;
! 
!   (void) mutexObj_unlock (env, mutexObj, &mcache);
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   clean_mutexObj_cache (env, &mcache);
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID\n");
  }
  
! 
! 
! /* Free a mutex (isn't C fun?).  OK this time for it to be NULL.  
!    No failure conditions, for a change.  */
! static void
! mutex_free_jni_impl (GMutex * mutex)
  {
!   jobject mutexObj = (jobject) mutex;
!   JNIEnv *env;
!   union env_union e;
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
! 
!   if (TRACE_API_CALLS)
!     tracing ("mutex_free_jni_impl(%p)", mutexObj);
! 
!   freeObject (env, mutexObj);
! 
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID\n");
  }
  
  
+ 
+ 
  /************************************************************************/
  /* Condition variable code		     				*/
  /************************************************************************/
  
  /* Create a new condition variable.  This is a java.lang.Object for us. */
! static GCond *
! cond_new_jni_impl (void)
! {
!   jobject condObj;
!   JNIEnv *env;
!   union env_union e;
! 
!   if (TRACE_API_CALLS)
!     tracing ("mutex_free_jni_impl()");
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
! 
!   condObj = allocatePlainObject (env);
! 
!   if (TRACE_API_CALLS)
!     tracing (" ==> %p\n", condObj);
! 
!   return (GCond *) condObj;
  }
  
  /*  Signal on a condition variable.  This is simply calling Object.notify
   * for us.
   */
! static void
! cond_signal_jni_impl (GCond * gcond)
! {
!   JNIEnv *env;
!   union env_union e;
!   jobject condObj = (jobject) gcond;
  
!   if (TRACE_API_CALLS)
!     tracing ("cond_signal_jni_impl(condObj = %p)", condObj);
  
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
! 
!   assert (condObj);
  
    /* Must have locked an object to call notify */
!   if (ENTER_MONITOR (env, condObj))
!     goto done;
  
!   (*env)->CallVoidMethod (env, condObj, obj_notify_mth);
!   if (MAYBE_BROKEN (env, "cannot signal mutex with Object.notify()"))
!     {
!       if (EXIT_MONITOR (env, condObj))
! 	BADLY_BROKEN1 ("Failed to unlock a monitor; the VM may deadlock.");
!       goto done;
!     }
  
!   EXIT_MONITOR (env, condObj);
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID\n");
  }
  
  /*  Broadcast to all waiting on a condition variable.  This is simply 
   * calling Object.notifyAll for us.
   */
! static void
! cond_broadcast_jni_impl (GCond * gcond)
! {
!   jobject condObj = (jobject) gcond;
!   JNIEnv *env;
!   union env_union e;
  
!   if (TRACE_API_CALLS)
!     tracing ("cond_broadcast_jni_impl(condObj=%p)", condObj);
  
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
  
+   assert (condObj);
    /* Must have locked an object to call notifyAll */
!   if (ENTER_MONITOR (env, condObj))
!     goto done;
  
!   (*env)->CallVoidMethod (env, condObj, obj_notifyall_mth);
!   if (MAYBE_BROKEN (env, "cannot broadcast to mutex with Object.notify()"))
!     {
!       EXIT_MONITOR (env, condObj);
!       goto done;
!     }
  
!   EXIT_MONITOR (env, condObj);
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID\n");
  }
  
  
! /* Wait on a condition variable.  For us, this simply means calling
   * Object.wait.
+  *
+  * Throws a Java exception on trouble; may leave the mutexes set arbitrarily.
+  * XXX TODO: Further improve error recovery.
   */
! static void
! cond_wait_jni_impl (GCond * gcond, GMutex * gmutex)
  {
!   struct mutexObj_cache cache;
!   jobject condObj = (jobject) gcond;
!   jobject mutexObj = (jobject) gmutex;
!   JNIEnv *env;
!   union env_union e;
  
!   if (TRACE_API_CALLS)
!     tracing ("cond_wait_jni_impl(condObj=%p, mutexObj=%p)",
! 	     condObj, mutexObj);
  
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
  
!   assert (condObj);
!   assert (mutexObj);
!   /* Must have locked a Java object to call wait on it */
!   if (ENTER_MONITOR (env, condObj) < 0)
!     goto done;
  
!   /* Our atomicity is now guaranteed; we're protected by the Java monitor on
!      condObj.  Unlock the GMutex. */
!   if (mutexObj_unlock (env, mutexObj, &cache))
!     goto done;
  
!   (*env)->CallVoidMethod (env, condObj, obj_wait_mth);
!   if (MAYBE_BROKEN (env, "cannot wait on condObj"))
!     {
!       EXIT_MONITOR (env, condObj);	/* ignore err checking */
!       goto done;
!     }
! 
!   /* Re-acquire the lock on the GMutex.  Do this while we're protected by the
!      Java monitor on condObj. */
!   if (mutexObj_lock (env, mutexObj, &cache))
!     goto done;
! 
!   EXIT_MONITOR (env, condObj);
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID\n");
  }
  
! 
! /** Wait on a condition variable until a timeout.  This is a little tricky
   * for us.  We first call Object.wait(J) giving it the appropriate timeout
   * value.  On return, we check whether an InterruptedException happened.  If
!  * so, that is Java-speak for wait timing out.  
!  * 
!  * We return FALSE if we timed out.  Return TRUE if the condition was
!  * signalled first, before we timed out.
!  *
!  * In case of trouble we throw a Java exception.  Whether we return FALSE or
!  * TRUE depends upon whether the condition was raised before the trouble
!  * happened. 
!  *
!  * I believe that this function goes to the proper lengths to try to unlock
!  * all of the locked mutexes and monitors, as appropriate, and that it further
!  * tries to make sure that the thrown exception is the current one, not any
!  * future cascaded one from something like a failure to unlock the monitors.
   */
  static gboolean
! cond_timed_wait_jni_impl (GCond * gcond, GMutex * gmutex, GTimeVal * end_time)
  {
!   JNIEnv *env;
!   union env_union e;
!   jlong time_millisec;
!   jint time_nanosec;
    jthrowable cause;
+   jobject condObj = (jobject) gcond;
+   jobject mutexObj = (jobject) gmutex;
+   gboolean condRaised = FALSE;	/*  Condition has not been raised yet. */
+   struct mutexObj_cache cache;
+   gboolean interrupted;
  
!   if (TRACE_API_CALLS)
!     {
!       tracing ("cond_timed_wait_jni_impl(cond=%p, mutex=%p,"
! 	       " end_time=< sec=%lu, usec=%lu >)", condObj, mutexObj,
! 	       (unsigned long) end_time->tv_sec,
! 	       (unsigned long) end_time->tv_usec);
!     }
  
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
! 
!   time_millisec = end_time->tv_sec * 1000 + end_time->tv_usec / 1000;
!   time_nanosec = 1000 * (end_time->tv_usec % 1000);
  
    /* Must have locked an object to call wait */
!   if (ENTER_MONITOR (env, condObj) < 0)
!     goto done;
  
!   if (mutexObj_unlock (env, mutexObj, &cache) < 0)
!     {
!       if (EXIT_MONITOR (env, condObj) < 0)
! 	criticalMsg
! 	  ("Unable to unlock an existing lock on a condition; your proram may deadlock");
!       goto done;
!     }
  
! 
!   (*env)->CallVoidMethod (env, condObj, obj_wait_nanotime_mth,
! 			  time_millisec, time_nanosec);
! 
!   /* If there was trouble, save that fact, and the reason for the trouble.  We
!      want to respond to this condition as fast as possible. */
!   cause = (*env)->ExceptionOccurred (env);
! 
!   if ( ! cause )
!     {
!       condRaised = TRUE;	/* condition was signalled */
!     }
!   else if ((*env)->IsInstanceOf (env, cause, interrupted_exception_class))
!     {
!       condRaised = FALSE;	/* Condition was not raised before timeout.
! 				   (This is redundant with the initialization
! 				   of condRaised above) */
!       (*env)->ExceptionClear (env);	/* Clear the InterruptedException. */
!       cause = NULL;		/* no pending cause now.  */
!     }
!   else
!     {
!       interrupted = FALSE;	/* Trouble, but not because of
! 				   InterruptedException.  Assume the condition
! 				   was not raised. */
!       /* Leave condRaised set to FALSE */
      }
  
!   /* Irrespective of whether there is a pending problem to report, go ahead
!      and try to clean up.  This may end up throwing an exception that is
!      different from the one that was thrown by the call to Object.wait().
!      So we will override it with the first exception (don't want to have
!      cascading problems). */
!   if (mutexObj_lock (env, mutexObj, &cache) && !cause)
!     {
!       cause = (*env)->ExceptionOccurred (env);
!       assert (cause);
!     }
  
!   if (EXIT_MONITOR (env, condObj) && !cause)
!     {
!       cause = (*env)->ExceptionOccurred (env);
!       assert (cause);
!     }
! 
!   if (cause)			/* Raise the first cause. */
!     {
!       BROKEN_CAUSE (env, cause, "error in timed wait or during its cleanup");
!       goto done;
!     }
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> condRaised = %s\n", condRaised ? "TRUE" : "FALSE");
!   return condRaised;
  }
  
! 
! /* Free a condition variable.  (isn't C fun?).  Can not fail. */
! static void
! cond_free_jni_impl (GCond * cond)
! {
!   jobject condObj = (jobject) cond;
!   JNIEnv *env;
!   union env_union e;
! 
!   if (TRACE_API_CALLS)
!     tracing ("cond_free_jni_impl(condObj = %p)", condObj);
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
! 
!   freeObject (env, condObj);
! 
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID\n");
  }
  
  
*************** static void g_cond_free_jni_impl (GCond 
*** 368,499 ****
  /* Thread-local data code		     				*/
  /************************************************************************/
  
! /*  Create a new thread-local key.  We use java.lang.ThreadLocal objects
!  * for this.
   */
! static GPrivate *g_private_new_jni_impl
!   (GDestroyNotify notify __attribute__((unused)))
  {
!   jclass lcl_class;
!   jobject *local;
!   JNIEnv *gdk_env;
!   jmethodID ctor;
  
!   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   lcl_class = (*gdk_env)->FindClass (gdk_env, "java.lang.ThreadLocal");
!   MAYBE_RETHROW(gdk_env, "cannot find ThreadLocal");
  
!   ctor = (*gdk_env)->GetMethodID(gdk_env, lcl_class, "<init>", "()V");
!   MAYBE_RETHROW(gdk_env, "cannot find ThreadLocal.<init>");
  
!   local = (jobject *) g_malloc (sizeof (jobject));
!   *local = (*gdk_env)->NewObject(gdk_env, lcl_class, ctor);
!   MAYBE_RETHROW(gdk_env, "cannot allocate a ThreadLocal");
!   
!   *local = ((*gdk_env)->NewGlobalRef (gdk_env, *local));
!   MAYBE_RETHROW(gdk_env, "cannot create a GlobalRef");
  
!   return (GPrivate*) local;
  }
  
  /*  Get this thread's value for a thread-local key.  This is simply
!  * ThreadLocal.get for us.
   */
! static gpointer g_private_get_jni_impl (GPrivate *private) {
!   jclass lcl_class;
!   jobject lcl_obj;
!   JNIEnv *gdk_env;
!   jmethodID get_mth;
!   jclass int_class;
!   jmethodID val_mth;
!   jint int_val;
  
!   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   lcl_class = (*gdk_env)->FindClass (gdk_env, "java.lang.ThreadLocal");
!   MAYBE_RETHROW(gdk_env, "cannot find ThreadLocal");
  
!   get_mth = (*gdk_env)->GetMethodID(gdk_env, lcl_class, "get", "()Ljava/lang/Object;");
!   MAYBE_RETHROW(gdk_env, "cannot find ThreadLocal.<get>");
  
!   lcl_obj = (*gdk_env)->CallObjectMethod(gdk_env, *(jobject*)private, get_mth);
!   MAYBE_RETHROW(gdk_env, "cannot find thread-local object");
  
!   int_class = (*gdk_env)->FindClass (gdk_env, "java.lang.Integer");
!   MAYBE_RETHROW(gdk_env, "cannot find Integer");
  
!   val_mth = (*gdk_env)->GetMethodID(gdk_env, int_class, "intValue", "()I");
!   MAYBE_RETHROW(gdk_env, "cannot find Integer.<intValue>");
  
!   int_val = (*gdk_env)->CallIntMethod(gdk_env, lcl_obj, val_mth);
!   MAYBE_RETHROW(gdk_env, "cannot get thread local value");
  
!   return (gpointer) int_val;
  }
  
! /*  Set this thread's value for a thread-local key.  This is simply
!  * ThreadLocal.set for us.
   */
! static void g_private_set_jni_impl (GPrivate *private, gpointer data) {
!   jclass lcl_class, int_class;
!   jobject lcl_obj;
!   JNIEnv *gdk_env;
!   jmethodID new_int, set_mth;
  
-   (*gdk_vm)->GetEnv(gdk_vm, (void **)&gdk_env, JNI_VERSION_1_1);
  
!   int_class = (*gdk_env)->FindClass (gdk_env, "java.lang.Integer");
!   MAYBE_RETHROW(gdk_env, "cannot find Integer");
  
!   new_int = (*gdk_env)->GetMethodID(gdk_env, int_class, "<init>", "(I)V");
!   MAYBE_RETHROW(gdk_env, "cannot find Integer.<init>");
  
!   lcl_obj = (*gdk_env)->NewObject(gdk_env, int_class, new_int, (jint)data);
!   MAYBE_RETHROW(gdk_env, "cannot create an Integer");
  
!   lcl_class = (*gdk_env)->FindClass (gdk_env, "java.lang.ThreadLocal");
!   MAYBE_RETHROW(gdk_env, "cannot find ThreadLocal");
  
!   set_mth = (*gdk_env)->GetMethodID(gdk_env, lcl_class, "set", "(Ljava/lang/Object;)V");
!   MAYBE_RETHROW(gdk_env, "cannot find ThreadLocal.<set>");
  
!   (*gdk_env)->CallVoidMethod(gdk_env, *(jobject*)private, set_mth, lcl_obj);
!   MAYBE_RETHROW(gdk_env, "cannot set thread local value");
  }
  
  
  /************************************************************************/
  /* GLIB interface			     				*/
  /************************************************************************/
  
  /* set of function pointers to give to glib. */
! GThreadFunctions g_thread_jni_functions =
! {
!   g_mutex_new_jni_impl,	      /* mutex_new */
!   g_mutex_lock_jni_impl,      /* mutex_lock */
!   g_mutex_trylock_jni_impl,   /* mutex_try_lock */
!   g_mutex_unlock_jni_impl,    /* mutex_unlock */
!   g_mutex_free_jni_impl,      /* mutex_free */
!   g_cond_new_jni_impl,        /* cond_new */
!   g_cond_signal_jni_impl,     /* cond_signal */
!   g_cond_broadcast_jni_impl,  /* cond_broadcast */
!   g_cond_wait_jni_impl,       /* cond_wait */
!   g_cond_timed_wait_jni_impl, /* cond_timed_wait */
!   g_cond_free_jni_impl,       /* cond_free */
!   g_private_new_jni_impl,     /* private_new */
!   g_private_get_jni_impl,     /* private_get */
!   g_private_set_jni_impl,     /* private_set */
!   NULL,
!   NULL,
!   NULL,
!   NULL,
!   NULL,
!   NULL,
!   NULL
  };
  
! /* ??? */
! void gdk_threads_wake () {
! 
! }
--- 1955,2592 ----
  /* Thread-local data code		     				*/
  /************************************************************************/
  
! /* Create a new thread-local key.  We use java.lang.ThreadLocal objects
!  * for this.  This returns the pointer representation of a Java global
!  * reference. 
!  * 
!  * We will throw a Java exception and return NULL in case of failure.
   */
! static GPrivate *
! private_new_jni_impl (GDestroyNotify notify __attribute__ ((unused)))
  {
!   JNIEnv *env;
!   union env_union e;
!   jobject lcl_key;
!   jobject global_key;
!   GPrivate *gkey = NULL;	/* Error return code */
  
!   if (TRACE_API_CALLS)
!     tracing ("private_new_jni_impl()");
  
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
  
!   lcl_key = (*env)->NewObject (env, threadlocal_class, threadlocal_ctor);
!   if ( ! lcl_key )
!     {
!       BROKEN (env, "cannot allocate a ThreadLocal");
!       goto done;
!     }
  
!   global_key = ((*env)->NewGlobalRef (env, lcl_key));
!   DELETE_LOCAL_REF (env, lcl_key);
!   if ( ! global_key)
!     {
!       NEW_BROKEN (env, "cannot create a GlobalRef to a new ThreadLocal");
!       goto done;
!     }
  
!   gkey = (GPrivate *) global_key;
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> %p\n", (void *) gkey);
! 
!   return gkey;
  }
  
  /*  Get this thread's value for a thread-local key.  This is simply
!  * ThreadLocal.get for us.  Return NULL if no value.  (I can't think of
!  * anything else to do.)
   */
! static gpointer
! private_get_jni_impl (GPrivate * gkey)
! {
!   JNIEnv *env;
!   union env_union e;
!   jobject val_wrapper;
!   jobject keyObj = (jobject) gkey;
!   gpointer thread_specific_data = NULL;	/* Init to the error-return value */
  
!   jlong val;
  
!   if (TRACE_API_CALLS)
!     tracing ("private_get_jni_impl(keyObj=%p)", keyObj);
  
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
  
!   val_wrapper = (*env)->CallObjectMethod (env, keyObj, threadlocal_get_mth);
!   if (MAYBE_BROKEN (env, "cannot find thread-local object"))
!     goto done;
  
!   if (! val_wrapper ) 
!     {
!       /* It's Java's "null" object.  No ref found.  This is OK; we must never
!          have set a value in this thread.  Note that this next statement is
!          not necessary, strictly speaking, since we're already initialized to
!          NULL.  A good optimizing C compiler will detect that and optimize out
!          this statement. */
!       thread_specific_data = NULL;
!       goto done;
!     }
  
!   val = (*env)->CallLongMethod (env, val_wrapper, long_longValue_mth);
  
!   if (MAYBE_BROKEN (env, "cannot get thread local value"))
!     goto done;
  
!   thread_specific_data = (gpointer) (intptr_t) val;
! 
!   /* Only re-raise the old pending exception if a new one hasn't come along to
!      supersede it.  */
!   SHOW_OLD_TROUBLE ();
! 
! done:
! 
!   if (TRACE_API_CALLS)
!     tracing (" ==> %p\n", thread_specific_data);
! 
!   return thread_specific_data;
  }
  
! /* Set this thread's value for a thread-local key.  This is simply
!  * ThreadLocal.set() for us.
   */
! static void
! private_set_jni_impl (GPrivate * gkey, gpointer thread_specific_data)
! {
!   JNIEnv *env;
!   union env_union e;
!   jobject val_wrapper;
!   jobject keyObj = (jobject) gkey;
  
  
!   if (TRACE_API_CALLS)
!     tracing ("private_set_jni_impl(keyObj=%p, thread_specific_data=%p)",
! 	     keyObj, thread_specific_data);
  
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
  
!   /* We are just going to always use a Java long to represent a C pointer.
!      Otherwise all of the code would end up being conditionalized for various
!      pointer sizes, and that seems like too much of a hassle, in order to save
!      a paltry few bytes, especially given the horrendous overhead of JNI in
!      any case. 
!    */
  
!   val_wrapper = (*env)->NewObject (env, long_class, long_ctor,
! 				   (jlong) (intptr_t) thread_specific_data);
!   if ( ! val_wrapper )
!     {
!       BROKEN (env, "cannot create a java.lang.Long");
!       goto done;
!     }
  
!   /* At this point, we now have set lcl_obj as a numeric class that wraps
!      around the thread-specific data we were given. */
!   (*env)->CallVoidMethod (env, keyObj, threadlocal_set_mth, val_wrapper);
!   if (MAYBE_BROKEN (env, "cannot set thread local value"))
!     goto done;
  
!   SHOW_OLD_TROUBLE ();
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID\n");
! }
! 
! 
! /** Create an object of type gnu.java.awt.peer.gtk.GThreadNativeMethodRunner.
!     Run it.
! 
!     We need to create joinable threads.  We handle the notion of a joinable
!     thread by determining whether or not we are going to maintain a permanent
!     hard reference to it until it croaks.
! 
!     Posix does not appear to have a Java-like concept of daemon threads, where
!     the JVM will exit when there are only daemon threads running.
! 
!     Error handling: 
! 
!     To quote from the glib guide:
!        "GError should only be used to report recoverable runtime errors, never
!         to report programming errors."   
! 
!     So how do we consider the failure to create a thread?  Well, each of the
!     failure cases in this function are discussed, and none of them are really
!     recoverable.
! 
!     The glib library is really designed so that you should fail
!     catastrophically in case of "programming errors".  The only error defined
!     for the GThread functions is G_THREAD_ERROR_AGAIN, and that for
!     thread_create.
! 
!     Most of these GThread functions could fail if we run out of memory, for
!     example, but the only one capable of reporting that fact is
!     thread_create. */
! static void
! thread_create_jni_impl (GThreadFunc	    func,
! 			gpointer            data,
! 			gulong              stack_size __attribute__((unused)),
! 			gboolean            joinable,
! 			gboolean            bound __attribute__((unused)),
! 			GThreadPriority     gpriority,
! 			/* This prototype is horrible.  threadIDp is actually
! 			   a gpointer to the thread's thread-ID.  Which is, 
! 			   of course, itself a gpointer-typed value.  Ouch. */ 
! 			gpointer            threadIDp, 
! 			/* Do not touch the GError stuff unless you have
! 			   RECOVERABLE trouble.   There is no recoverable
! 			   trouble in this implementation.  */ 
! 			GError	      **errorp __attribute__((unused)))
! {
!   JNIEnv *env;
!   union env_union e;
!   union func_union f;
!   jboolean jjoinable = joinable;
!   jobject newThreadObj;
!   gpointer threadID;		/* to be filled in */
! 
!   if (TRACE_API_CALLS)
!     {
!       f.g_func = func;
!       tracing ("thread_create_jni_impl(func=%p, data=%p, joinable=%s,"
!                " threadIDp=%p, *(int *) threadIDp = %d)",
!                f.void_func, data, joinable ? "TRUE" : "FALSE",
!                threadIDp, *(int *) threadIDp);
!     }
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     {
!       /*  The failed call to setup the cache is certainly not recoverable;
! 	  not appropriate for G_THREAD_ERROR_AGAIN.  */
!       *(gpointer *) threadIDp = NULL;
!       goto done;
!     }
!   HIDE_OLD_TROUBLE (env);
! 
!   /* If a thread is joinable, then notify its constructor.  The constructor
!      will enter a hard reference for it, and the hard ref. won't go away until
!      the thread has been joined. */
!   newThreadObj = 
!     (*env)->NewObject (env, runner_class, runner_ctor, 
!                        (jlong) (intptr_t) func, (jlong) (intptr_t) data, 
!                        jjoinable);
!   if ( ! newThreadObj )
!     {
!       BROKEN (env, "creating a new thread failed in the constructor");
!       *(gpointer *) threadIDp = NULL;
!       /*  The failed call to the constructor does not throw any errors such
! 	  that G_THREAD_ERROR_AGAIN is appropriate.  No other recoverable
! 	  errors defined.  Once again, we go back to the VM. */
!       goto done;
!     }
! 
!   if (threadObj_set_priority (env, newThreadObj, gpriority) < 0)
!     {
!       *(gpointer *) threadIDp = NULL;
!       /* None of these possible exceptions from Thread.setPriority() are
! 	 recoverable, so they are not appropriate for EAGAIN.  So we should
! 	 fail. */  
!       goto done;
!     }
! 
!   (*env)->CallVoidMethod (env, runner_class, runner_start_mth);
! 
!   if (MAYBE_BROKEN (env, "starting a new thread failed"))
!     {
!       *(gpointer *) threadIDp = NULL;
!       /* The only exception Thread.start() throws is
! 	 IllegalStateException.  And that would indicate a programming error. 
! 
! 	 So there are no situations such that G_THREAD_ERROR_AGAIN would be
! 	 OK. 
! 
! 	 So, we don't use g_set_error() here to perform any error reporting.
! 	 */
!       goto done;
!     }
! 
!   threadID = getThreadIDFromThread (env, newThreadObj);
! 
!   *(gpointer *) threadIDp = threadID;
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> (threadID = %p) \n", threadID);
! }
! 
! 
! /* Wraps a call to g_thread_yield. */
! static void
! thread_yield_jni_impl (void)
! {
!   JNIEnv *env;
!   union env_union e;
! 
!   if (TRACE_API_CALLS)
!     tracing ("thread_yield_jni_impl()");
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
! 
!   (*env)->CallStaticVoidMethod (env, thread_class, thread_yield_mth);
!   if (MAYBE_BROKEN (env, "Thread.yield() failed"))
!     goto done;
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID\n");
! }
! 
! 
! static void
! thread_join_jni_impl (gpointer threadID)
! {
!   JNIEnv *env;
!   union env_union e;
!   jobject threadObj = NULL;
! 
!   if ( TRACE_API_CALLS )
!     tracing ("thread_join_jni_impl(threadID=%p) ", threadID);
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
!   HIDE_OLD_TROUBLE (env);
! 
!   threadObj = getThreadFromThreadID (env, threadID);
!   if ( ! threadObj )		/* Already reported with BROKEN  */
!     goto done;
! 
!   (*env)->CallVoidMethod (env, threadObj, thread_join_mth);
!   if (MAYBE_BROKEN (env, "Thread.join() failed"))
!     goto done;
! 
! 
!   (*env)->CallStaticVoidMethod
!     (env, runner_class, runner_deRegisterJoinable_mth, threadObj);
!   if (MAYBE_BROKEN (env, "Thread.deRegisterJoinableThread() failed"))
!     goto done;
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   DELETE_LOCAL_REF (env, threadObj);
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID \n");
! }
! 
! /* Terminate the current thread.  Unlike pthread_exit(), here we do not need
!    to bother with a return value or exit value for the thread which is about
!    to croak.  (The gthreads abstraction doesn't use it.)  However, we *do*
!    need to bail immediately.  We handle this with Thread.stop(), which is
!    a deprecated method.
! 
!    It's deprecated since we might leave objects protected by monitors in
!    half-constructed states on the way out -- Thread.stop() throws a
!    ThreadDeath exception, which is usually unchecked.  There is no good
!    solution that I can see. */ 
! static void
! thread_exit_jni_impl (void)
! {
!   JNIEnv *env;
!   union env_union e;
!   jobject this_thread;
! 
!   if (TRACE_API_CALLS)
!     tracing ("thread_exit_jni_impl() ");
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     goto done;
! 
!   HIDE_OLD_TROUBLE (env);
! 
!   this_thread = (*env)->
!     CallStaticObjectMethod (env, thread_class, thread_current_mth);
! 
!   if ( ! this_thread )
!     {
!       BROKEN (env, "cannot get current thread");
!       goto done;
!     }
! 
!   (*env)->CallVoidMethod (env, this_thread, thread_stop_mth);
!   if (MAYBE_BROKEN (env, "cannot call Thread.stop() on current thread"))
!     goto done;
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID \n");
! }
! 
! 
! /* Translate a GThreadPriority to a Java priority level. */
! static jint
! javaPriorityLevel (GThreadPriority priority)
! {
!   /* We have these fields in java.lang.Thread to play with:
! 
!      static int MIN_PRIORITY     The minimum priority that a thread can have.
!      static int NORM_PRIORITY    The default priority that is assigned to a 
!      thread.
!      static int MAX_PRIORITY     The maximum priority that a thread can have.
! 
!      We get these from the header file generated by javah, even though they're
!      documented as being 1, 5, and 10.
!    */
!   static const jint minJPri	= 
!     gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_MIN_PRIORITY;
!   static const jint normJPri	= 
!     gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_NORM_PRIORITY;
!   static const jint maxJPri	= 
!     gnu_java_awt_peer_gtk_GThreadNativeMethodRunner_MAX_PRIORITY;
! 
!   switch (priority)
!     {
!     case G_THREAD_PRIORITY_LOW:
!       return minJPri;
!       break;
! 
!     default:
!       assert_not_reached ();
!       /* Deliberate fall-through if assertions are turned off; also shuts up
!          GCC warnings if they're turned on.   */
!     case G_THREAD_PRIORITY_NORMAL:
!       return normJPri;
!       break;
! 
!     case G_THREAD_PRIORITY_HIGH:
!       return (normJPri + maxJPri) / 2;
!       break;
! 
!     case G_THREAD_PRIORITY_URGENT:
!       return maxJPri;
!       break;
!     }
! }
! 
! 
! /** It would be safe not to implement this, according to the JNI docs, since
!     not all platforms do thread priorities.  However, we might as well
!     provide the hint for those who want it. 
! */
! static void
! thread_set_priority_jni_impl (gpointer gThreadID, GThreadPriority gpriority)
! {
!   jobject threadObj = NULL;
!   JNIEnv *env;
!   union env_union e;
! 
!   if (TRACE_API_CALLS)
!     tracing ("thread_set_priority_jni_impl(gThreadID=%p, gpriority = %u) ",
! 	     gThreadID, gpriority);
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
! 
!   if (setup_cache (env) < 0)
!     goto done;
! 
!   HIDE_OLD_TROUBLE (env);
! 
! 
!   threadObj = getThreadFromThreadID (env, gThreadID);
!   if ( ! threadObj)		/* Reported with BROKEN already.  */
!     goto done;
! 
!   if (threadObj_set_priority (env, threadObj, gpriority))
!     goto done;
! 
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   DELETE_LOCAL_REF (env, threadObj);
! 
!   if (TRACE_API_CALLS)
!     tracing (" ==> VOID\n");
! }
! 
! 
! /** It would be safe not to implement this, according to the JNI docs, since
!     not all platforms do thread priorities.  However, we might as well
!     provide the hint for those who want it.
! 
!     -1 on failure, 0 on success. */
! static int
! threadObj_set_priority (JNIEnv * env, jobject threadObj,
! 			GThreadPriority gpriority)
! {
!   jint javaPriority = javaPriorityLevel (gpriority);
!   (*env)->CallVoidMethod (env, threadObj, thread_setPriority_mth,
! 			  javaPriority);
!   return MAYBE_BROKEN (env, "Thread.setPriority() failed");
! }
! 
! 
! /** Return the result of Thread.currentThread(), a static method. */
! static void
! thread_self_jni_impl (/* Another confusing glib prototype.  This is
! 			 actually  a gpointer to the thread's thread-ID.
! 			 Which is, of course, a gpointer. */
! 		      gpointer my_thread_IDp)
! {
!   JNIEnv *env;
!   union env_union e;
!   jobject this_thread;
!   gpointer my_threadID;
! 
!   if (TRACE_API_CALLS)
!     tracing ("thread_self_jni_impl(my_thread_IDp=%p)", my_thread_IDp);
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
! 
!   if (setup_cache (env) < 0)
!     return;
! 
!   HIDE_OLD_TROUBLE (env);
! 
!   this_thread = (*env)->
!     CallStaticObjectMethod (env, thread_class, thread_current_mth);
!   if (! this_thread )
!     {
!       BROKEN (env, "cannot get current thread");
!       my_threadID = NULL;
!       goto done;
!     }
! 
!   my_threadID = getThreadIDFromThread (env, this_thread);
!   SHOW_OLD_TROUBLE ();
! 
! done:
!   if (TRACE_API_CALLS)
!     tracing (" ==> (my_threadID = %p) \n", my_threadID);
! 
!   *(gpointer *) my_thread_IDp = my_threadID;
! }
! 
! 
! static gboolean
! thread_equal_jni_impl (gpointer thread1, gpointer thread2)
! {
!   JNIEnv *env;
!   union env_union e;
! 
!   gpointer threadID1 = *(gpointer *) thread1;
!   gpointer threadID2 = *(gpointer *) thread2;
! 
!   jobject thread1_obj = NULL;
!   jobject thread2_obj = NULL;
!   gboolean ret;
! 
!   if (TRACE_API_CALLS)
!     tracing ("thread_equal_jni_impl(threadID1=%p, threadID2=%p)",
! 	     threadID1, threadID2);
! 
!   e.jni_env = &env;
!   (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
!   if (setup_cache (env) < 0)
!     {
!       ret = FALSE;		/* what is safer?  We really don't ever want
! 				   to return from here.  */
!       goto done;
!     }
! 
!   HIDE_OLD_TROUBLE (env);
!   thread1_obj = getThreadFromThreadID (env, threadID1);
!   thread2_obj = getThreadFromThreadID (env, threadID2);
! 
!   ret = (*env)->CallBooleanMethod (env, thread1_obj,
! 				   thread_equals_mth, thread2_obj);
! 
!   if (MAYBE_BROKEN (env, "Thread.equals() failed"))
!     {
!       ret = FALSE;
!       goto done;
!     }
! 
!   SHOW_OLD_TROUBLE ();
! 
! 
! done:
!   DELETE_LOCAL_REF (env, thread1_obj);
!   DELETE_LOCAL_REF (env, thread2_obj);
! 
!   if (TRACE_API_CALLS)
!     tracing (" ==> %s\n", ret ? "TRUE" : "FALSE");
! 
!   return ret;
  }
  
  
+ 
+ 
  /************************************************************************/
  /* GLIB interface			     				*/
  /************************************************************************/
  
  /* set of function pointers to give to glib. */
! GThreadFunctions portable_native_sync_jni_functions = {
!   mutex_new_jni_impl,		/* mutex_new */
!   mutex_lock_jni_impl,		/* mutex_lock */
!   mutex_trylock_jni_impl,	/* mutex_trylock */
!   mutex_unlock_jni_impl,	/* mutex_unlock */
!   mutex_free_jni_impl,		/* mutex_free */
!   cond_new_jni_impl,		/* cond_new */
!   cond_signal_jni_impl,		/* cond_signal */
!   cond_broadcast_jni_impl,	/* cond_broadcast */
!   cond_wait_jni_impl,		/* cond_wait */
!   cond_timed_wait_jni_impl,	/* cond_timed_wait */
!   cond_free_jni_impl,		/* cond_free */
!   private_new_jni_impl,		/* private_new */
!   private_get_jni_impl,		/* private_get */
!   private_set_jni_impl,		/* private_set */
!   thread_create_jni_impl,	/* thread_create */
!   thread_yield_jni_impl,	/* thread_yield */
!   thread_join_jni_impl,		/* thread_join */
!   thread_exit_jni_impl,		/* thread_exit */
!   thread_set_priority_jni_impl,	/* thread_set_priority */
!   thread_self_jni_impl,		/* thread_self */
!   thread_equal_jni_impl,	/* thread_equal */
  };
+ 
  
! /* Keep c-font-lock-extra-types in alphabetical order. */
! /* Local Variables: */
! /* c-file-style: "gnu" */
! /* c-font-lock-extra-types: ("\\sw+_t" "gboolean" "GError" "gpointer"
!    "GPrivate" "GThreadFunc" "GThreadFunctions" "GThreadPriority" 
!    "gulong" 
!    "JNIEnv" 
!    "jboolean" "jclass" "jfieldID" "jint" "jlong" "jmethodID" "jobject" "jstring" "jthrowable" ) */
! /* End: */
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gthread-jni.h gcc-4.0.0/libjava/jni/gtk-peer/gthread-jni.h
*** gcc-3.4.3/libjava/jni/gtk-peer/gthread-jni.h	Mon Jun 30 23:53:29 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gthread-jni.h	Thu Sep  2 05:10:34 2004
*************** exception statement from your version. *
*** 42,48 ****
  #include <glib.h>
  #include "gtkpeer.h"
  
! extern GThreadFunctions g_thread_jni_functions;
! extern JavaVM *gdk_vm;
  
  #endif /* __GTHREADJNI_H__ */
--- 42,48 ----
  #include <glib.h>
  #include "gtkpeer.h"
  
! extern GThreadFunctions portable_native_sync_jni_functions;
! extern JavaVM *the_vm;
  
  #endif /* __GTHREADJNI_H__ */
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gtk_jawt.c gcc-4.0.0/libjava/jni/gtk-peer/gtk_jawt.c
*** gcc-3.4.3/libjava/jni/gtk-peer/gtk_jawt.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/jni/gtk-peer/gtk_jawt.c	Mon Mar  7 19:58:41 2005
***************
*** 0 ****
--- 1,166 ----
+ /* gtk_jawt.c -- GTK implementation of classpath_jawt.h
+    Copyright (C) 2005 Free Software Foundation, Inc.
+ 
+    This file is part of GNU Classpath.
+ 
+    GNU Classpath is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+ 
+    GNU Classpath is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GNU Classpath; see the file COPYING.  If not, write to the
+    Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.
+ 
+    Linking this library statically or dynamically with other modules is
+    making a combined work based on this library.  Thus, the terms and
+    conditions of the GNU General Public License cover the whole
+    combination.
+ 
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent
+    modules, and to copy and distribute the resulting executable under
+    terms of your choice, provided that you also meet, for each linked
+    independent module, the terms and conditions of the license of that
+    module.  An independent module is a module which is not derived from
+    or based on this library.  If you modify this library, you may extend
+    this exception to your version of the library, but you are not
+    obligated to do so.  If you do not wish to do so, delete this
+    exception statement from your version. */
+ 
+ 
+ #include "gtkpeer.h"
+ #include <gtk/gtk.h>
+ #include <gdk/gdkx.h>
+ #include "classpath_jawt.h"
+ 
+ jint
+ classpath_jawt_get_awt_version ()
+ {
+   return CLASSPATH_JAWT_VERSION;
+ }
+ 
+ Display*
+ classpath_jawt_get_default_display (JNIEnv* env, jobject canvas)
+ {
+   GdkDisplay *display;
+   Display *xdisplay;
+   GtkWidget *widget;
+   void *ptr;
+   jobject peer;
+   jclass class_id;
+   jmethodID method_id;
+ 
+   /* retrieve peer object */
+   class_id = (*env)->GetObjectClass (env, canvas);
+ 
+   method_id = (*env)->GetMethodID (env, class_id,
+ 				   "getPeer",
+ 				   "()Ljava/awt/peer/ComponentPeer;");
+ 
+   peer = (*env)->CallObjectMethod (env, canvas, method_id);
+ 
+   ptr = NSA_GET_PTR (env, peer);
+ 
+   gdk_threads_enter ();
+ 
+   widget = GTK_WIDGET (ptr);
+ 
+   /* widget should be realized before Canvas.paint is called. */
+   g_assert (GTK_WIDGET_REALIZED (widget));
+ 
+   display = gtk_widget_get_display (widget);
+ 
+   xdisplay = GDK_DISPLAY_XDISPLAY (display);
+ 
+   gdk_threads_leave ();
+ 
+   return xdisplay;
+ }
+ 
+ VisualID
+ classpath_jawt_get_visualID (JNIEnv* env, jobject canvas)
+ {
+   GtkWidget *widget;
+   Visual *visual;
+   void *ptr;
+   jobject peer;
+   jclass class_id;
+   jmethodID method_id;
+ 
+   class_id = (*env)->GetObjectClass (env, canvas);
+ 
+   method_id = (*env)->GetMethodID (env, class_id,
+ 				   "getPeer",
+ 				   "()Ljava/awt/peer/ComponentPeer;");
+ 
+   peer = (*env)->CallObjectMethod (env, canvas, method_id);
+ 
+   ptr = NSA_GET_PTR (env, peer);
+ 
+   gdk_threads_enter ();
+ 
+   widget = GTK_WIDGET (ptr);
+ 
+   g_assert (GTK_WIDGET_REALIZED (widget));
+ 
+   visual = gdk_x11_visual_get_xvisual (gtk_widget_get_visual (widget));
+   g_assert (visual != NULL);
+ 
+   gdk_threads_leave ();
+ 
+   return visual->visualid;
+ }
+ 
+ Drawable
+ classpath_jawt_get_drawable (JNIEnv* env, jobject canvas)
+ {
+   GtkWidget *widget;
+   int drawable;
+   void *ptr;
+   jobject peer;
+   jclass class_id;
+   jmethodID method_id;
+ 
+   class_id = (*env)->GetObjectClass (env, canvas);
+ 
+   method_id = (*env)->GetMethodID (env, class_id,
+ 				   "getPeer",
+ 				   "()Ljava/awt/peer/ComponentPeer;");
+ 
+   peer = (*env)->CallObjectMethod (env, canvas, method_id);
+ 
+   ptr = NSA_GET_PTR (env, peer);
+ 
+   gdk_threads_enter ();
+ 
+   widget = GTK_WIDGET (ptr);
+ 
+   g_assert (GTK_WIDGET_REALIZED (widget));
+ 
+   drawable = GDK_DRAWABLE_XID (widget->window);
+ 
+   gdk_threads_leave ();
+ 
+   return drawable;
+ }
+ 
+ jint
+ classpath_jawt_lock ()
+ {
+   gdk_threads_enter ();
+   return 0;
+ }
+ 
+ void
+ classpath_jawt_unlock ()
+ {
+   gdk_threads_leave ();
+ }
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gtkcairopeer.h gcc-4.0.0/libjava/jni/gtk-peer/gtkcairopeer.h
*** gcc-3.4.3/libjava/jni/gtk-peer/gtkcairopeer.h	Wed Dec 31 08:58:31 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gtkcairopeer.h	Wed Feb 16 20:03:29 2005
*************** struct graphics2d
*** 71,78 ****
    GdkWindow *win;
    GdkPixbuf *drawbuf;
    char *pattern_pixels;
!   cairo_surface_t *pattern;
    gboolean debug;
  };
  
  #endif /* __GTKCAIROPEER_H */
--- 71,92 ----
    GdkWindow *win;
    GdkPixbuf *drawbuf;
    char *pattern_pixels;
!   cairo_surface_t *pattern_surface;
!   cairo_pattern_t *pattern;
    gboolean debug;
+   enum 
+     { 
+       MODE_DRAWABLE_WITH_RENDER,
+       MODE_DRAWABLE_NO_RENDER,
+       MODE_JAVA_ARRAY
+     } 
+   mode;
+ 
+   /* Support for MODE_JAVA_ARRAY */
+   jintArray jarray;
+   jint width, height;
+   jint *javabuf;
+   jboolean isCopy;
  };
  
  #endif /* __GTKCAIROPEER_H */
diff -Nrcpad gcc-3.4.3/libjava/jni/gtk-peer/gtkpeer.h gcc-4.0.0/libjava/jni/gtk-peer/gtkpeer.h
*** gcc-3.4.3/libjava/jni/gtk-peer/gtkpeer.h	Tue Dec 23 19:24:00 2003
--- gcc-4.0.0/libjava/jni/gtk-peer/gtkpeer.h	Tue Feb 22 06:13:04 2005
***************
*** 1,5 ****
  /* gtkpeer.h -- Some global variables and #defines
!    Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
--- 1,5 ----
  /* gtkpeer.h -- Some global variables and #defines
!    Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
  
  This file is part of GNU Classpath.
  
*************** extern struct state_table *native_global
*** 91,103 ****
--- 91,123 ----
      (*env)->DeleteGlobalRef (env, *globRefPtr); \
      free (globRefPtr);} while (0)
  
+ extern struct state_table *native_pixbufdecoder_state_table;
+ 
+ #define NSA_PB_INIT(env, clazz) \
+   native_pixbufdecoder_state_table = init_state_table (env, clazz)
+ 
+ #define NSA_GET_PB_PTR(env, obj) \
+   get_state (env, obj, native_pixbufdecoder_state_table)
+ 
+ #define NSA_SET_PB_PTR(env, obj, ptr) \
+   set_state (env, obj, native_pixbufdecoder_state_table, (void *)ptr)
+ 
+ #define NSA_DEL_PB_PTR(env, obj) \
+   remove_state_slot (env, obj, native_pixbufdecoder_state_table)
+ 
  #endif /* JVM_SUN */
  
+ #define SWAPU32(w)							\
+   (((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
+ 
  struct graphics
  {
    GdkDrawable *drawable;
    GdkGC *gc;
    GdkColormap *cm;
+   PangoFontDescription *pango_font;
+   PangoContext *pango_context;
+   PangoLayout *pango_layout;
    jint x_offset, y_offset;
  };
  
*************** struct graphics
*** 118,131 ****
  
  #define SYNTHETIC_EVENT_MASK (1 << 10)
  
! #define AWT_SHIFT_MASK   (1 << 0)
! #define AWT_CTRL_MASK    (1 << 1)
! #define AWT_META_MASK    (1 << 2)
! #define AWT_ALT_MASK     (1 << 3)
  
  #define AWT_BUTTON1_MASK (1 << 4)
! #define AWT_BUTTON2_MASK AWT_ALT_MASK
! #define AWT_BUTTON3_MASK AWT_META_MASK
  
  #define MULTI_CLICK_TIME   250
  /* as opposed to a MULTI_PASS_TIME :) */
--- 138,155 ----
  
  #define SYNTHETIC_EVENT_MASK (1 << 10)
  
! #define AWT_SHIFT_DOWN_MASK   (1 << 6)
! #define AWT_CTRL_DOWN_MASK    (1 << 7)
! #define AWT_META_DOWN_MASK    (1 << 8)
! #define AWT_ALT_DOWN_MASK     (1 << 9)
! 
! #define AWT_BUTTON1_DOWN_MASK (1 << 10)
! #define AWT_BUTTON2_DOWN_MASK (1 << 11)
! #define AWT_BUTTON3_DOWN_MASK (1 << 12)
  
  #define AWT_BUTTON1_MASK (1 << 4)
! #define AWT_BUTTON2_MASK (1 << 3)
! #define AWT_BUTTON3_MASK (1 << 2)
  
  #define MULTI_CLICK_TIME   250
  /* as opposed to a MULTI_PASS_TIME :) */
*************** struct graphics
*** 361,368 ****
  #define VK_ALT_GRAPH 65406
  #define VK_UNDEFINED 0
  
! #define AWT_FOCUS_LOST 1004
! #define AWT_FOCUS_GAINED 1005
  
  #define AWT_WINDOW_OPENED 200
  #define AWT_WINDOW_CLOSING 201
--- 385,392 ----
  #define VK_ALT_GRAPH 65406
  #define VK_UNDEFINED 0
  
! #define AWT_FOCUS_GAINED 1004
! #define AWT_FOCUS_LOST 1005
  
  #define AWT_WINDOW_OPENED 200
  #define AWT_WINDOW_CLOSING 201
*************** struct graphics
*** 385,390 ****
--- 409,443 ----
  #define AWT_STYLE_BOLD   1
  #define AWT_STYLE_ITALIC 2
  
+ /* From java.awt.SystemColor */
+ #define AWT_DESKTOP                  0
+ #define AWT_ACTIVE_CAPTION           1
+ #define AWT_ACTIVE_CAPTION_TEXT      2
+ #define AWT_ACTIVE_CAPTION_BORDER    3
+ #define AWT_INACTIVE_CAPTION         4
+ #define AWT_INACTIVE_CAPTION_TEXT    5
+ #define AWT_INACTIVE_CAPTION_BORDER  6
+ #define AWT_WINDOW                   7
+ #define AWT_WINDOW_BORDER            8
+ #define AWT_WINDOW_TEXT              9
+ #define AWT_MENU                    10
+ #define AWT_MENU_TEXT               11
+ #define AWT_TEXT                    12
+ #define AWT_TEXT_TEXT               13
+ #define AWT_TEXT_HIGHLIGHT          14
+ #define AWT_TEXT_HIGHLIGHT_TEXT     15
+ #define AWT_TEXT_INACTIVE_TEXT      16
+ #define AWT_CONTROL                 17
+ #define AWT_CONTROL_TEXT            18
+ #define AWT_CONTROL_HIGHLIGHT       19
+ #define AWT_CONTROL_LT_HIGHLIGHT    20
+ #define AWT_CONTROL_SHADOW          21
+ #define AWT_CONTROL_DK_SHADOW       22
+ #define AWT_SCROLLBAR               23
+ #define AWT_INFO                    24
+ #define AWT_INFO_TEXT               25
+ #define AWT_NUM_COLORS              26
+ 
  extern jmethodID setBoundsCallbackID;
  
  extern jmethodID postActionEventID;
*************** extern jmethodID postListItemEventID;
*** 401,410 ****
  extern jmethodID postTextEventID;
  extern jmethodID postWindowEventID;
  
  extern jmethodID syncAttrsID;
  extern jclass gdkColor;
  extern jmethodID gdkColorID;
! extern JNIEnv *gdk_env;
  
  extern GtkWindowGroup *global_gtk_window_group;
  
--- 454,477 ----
  extern jmethodID postTextEventID;
  extern jmethodID postWindowEventID;
  
+ extern jmethodID beginNativeRepaintID;
+ extern jmethodID endNativeRepaintID;
+ 
+ extern jmethodID initComponentGraphicsID;
+ extern jmethodID initComponentGraphics2DID;
+ extern jmethodID setCursorID;
+ 
  extern jmethodID syncAttrsID;
  extern jclass gdkColor;
  extern jmethodID gdkColorID;
! 
! extern jmethodID postInsetsChangedEventID;
! extern jmethodID windowGetWidthID;
! extern jmethodID windowGetHeightID;
! 
! JNIEnv *gdk_env(void);
! 
! extern double dpi_conversion_factor;
  
  extern GtkWindowGroup *global_gtk_window_group;
  
*************** gboolean pre_event_handler (GtkWidget *w
*** 415,431 ****
  			       jobject peer);
  
  void connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...);
  
  void set_visible (GtkWidget *widget, jboolean visible);
  void set_parent (GtkWidget *widget, GtkContainer *parent);
- GtkLayout *find_gtk_layout (GtkWidget *parent);
  
  jint keyevent_state_to_awt_mods (GdkEvent *event);
  
  struct item_event_hook_info
  {
    jobject peer_obj;
    const char *label;
  };
  
  #endif /* __GTKPEER_H */
--- 482,522 ----
  			       jobject peer);
  
  void connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...);
+ void connect_awt_hook_cb (GtkWidget *widget, jobject peer);
  
  void set_visible (GtkWidget *widget, jboolean visible);
  void set_parent (GtkWidget *widget, GtkContainer *parent);
  
  jint keyevent_state_to_awt_mods (GdkEvent *event);
  
+ guint awt_keycode_to_keysym (jint keyCode, jint keyLocation);
+ 
  struct item_event_hook_info
  {
    jobject peer_obj;
    const char *label;
  };
  
+ /* Union used for type punning. */
+ union widget_union
+ {
+   void **void_widget;
+   GtkWidget **widget;
+ };
+ 
+ #define DEBUG_LOCKING 0
+ 
+ #if DEBUG_LOCKING
+ #define gdk_threads_enter()                       \
+ {                                                 \
+   g_print ("lock: %s, %d\n", __FILE__, __LINE__); \
+   gdk_threads_enter ();                           \
+ }
+ #define gdk_threads_leave()                         \
+ {                                                   \
+   g_print ("unlock: %s, %d\n", __FILE__, __LINE__); \
+   gdk_threads_leave ();                             \
+ }
+ #endif
+ 
  #endif /* __GTKPEER_H */
diff -Nrcpad gcc-3.4.3/libjava/jni.cc gcc-4.0.0/libjava/jni.cc
*** gcc-3.4.3/libjava/jni.cc	Tue Nov 18 17:56:33 2003
--- gcc-4.0.0/libjava/jni.cc	Wed Feb 23 17:36:23 2005
***************
*** 1,6 ****
  // jni.cc - JNI implementation, including the jump table.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,7 ----
  // jni.cc - JNI implementation, including the jump table.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
!    Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 27,32 ****
--- 28,34 ----
  #include <java/lang/Throwable.h>
  #include <java/lang/ArrayIndexOutOfBoundsException.h>
  #include <java/lang/StringIndexOutOfBoundsException.h>
+ #include <java/lang/StringBuffer.h>
  #include <java/lang/UnsatisfiedLinkError.h>
  #include <java/lang/InstantiationException.h>
  #include <java/lang/NoSuchFieldError.h>
*************** details.  */
*** 39,45 ****
--- 41,49 ----
  #include <java/lang/ThreadGroup.h>
  #include <java/lang/Thread.h>
  #include <java/lang/IllegalAccessError.h>
+ #include <java/nio/Buffer.h>
  #include <java/nio/DirectByteBufferImpl.h>
+ #include <java/nio/DirectByteBufferImpl$ReadWrite.h>
  #include <java/util/IdentityHashMap.h>
  #include <gnu/gcj/RawData.h>
  
*************** extern struct JNIInvokeInterface _Jv_JNI
*** 67,73 ****
  
  // Number of slots in the default frame.  The VM must allow at least
  // 16.
! #define FRAME_SIZE 32
  
  // Mark value indicating this is an overflow frame.
  #define MARK_NONE    0
--- 71,77 ----
  
  // Number of slots in the default frame.  The VM must allow at least
  // 16.
! #define FRAME_SIZE 16
  
  // Mark value indicating this is an overflow frame.
  #define MARK_NONE    0
*************** struct _Jv_JNI_LocalFrame
*** 81,90 ****
  {
    // This is true if this frame object represents a pushed frame (eg
    // from PushLocalFrame).
!   int marker :  2;
  
    // Number of elements in frame.
!   int size   : 30;
  
    // Next frame in chain.
    _Jv_JNI_LocalFrame *next;
--- 85,97 ----
  {
    // This is true if this frame object represents a pushed frame (eg
    // from PushLocalFrame).
!   int marker;
! 
!   // Flag to indicate some locals were allocated.
!   int allocated_p;
  
    // Number of elements in frame.
!   int size;
  
    // Next frame in chain.
    _Jv_JNI_LocalFrame *next;
*************** unwrap (T *obj)
*** 220,227 ****
  
  
  
! static jobject
! (JNICALL _Jv_JNI_NewGlobalRef) (JNIEnv *, jobject obj)
  {
    // This seems weird but I think it is correct.
    obj = unwrap (obj);
--- 227,234 ----
  
  
  
! static jobject JNICALL
! _Jv_JNI_NewGlobalRef (JNIEnv *, jobject obj)
  {
    // This seems weird but I think it is correct.
    obj = unwrap (obj);
*************** static jobject
*** 229,244 ****
    return obj;
  }
  
! static void
! (JNICALL _Jv_JNI_DeleteGlobalRef) (JNIEnv *, jobject obj)
  {
    // This seems weird but I think it is correct.
    obj = unwrap (obj);
    unmark_for_gc (obj, global_ref_table);
  }
  
! static void
! (JNICALL _Jv_JNI_DeleteLocalRef) (JNIEnv *env, jobject obj)
  {
    _Jv_JNI_LocalFrame *frame;
  
--- 236,251 ----
    return obj;
  }
  
! static void JNICALL
! _Jv_JNI_DeleteGlobalRef (JNIEnv *, jobject obj)
  {
    // This seems weird but I think it is correct.
    obj = unwrap (obj);
    unmark_for_gc (obj, global_ref_table);
  }
  
! static void JNICALL
! _Jv_JNI_DeleteLocalRef (JNIEnv *env, jobject obj)
  {
    _Jv_JNI_LocalFrame *frame;
  
*************** static void
*** 264,271 ****
    JvAssert (0);
  }
  
! static jint
! (JNICALL _Jv_JNI_EnsureLocalCapacity) (JNIEnv *env, jint size)
  {
    // It is easier to just always allocate a new frame of the requested
    // size.  This isn't the most efficient thing, but for now we don't
--- 271,278 ----
    JvAssert (0);
  }
  
! static jint JNICALL
! _Jv_JNI_EnsureLocalCapacity (JNIEnv *env, jint size)
  {
    // It is easier to just always allocate a new frame of the requested
    // size.  This isn't the most efficient thing, but for now we don't
*************** static jint
*** 285,290 ****
--- 292,298 ----
  
    frame->marker = MARK_NONE;
    frame->size = size;
+   frame->allocated_p = 0;
    memset (&frame->vec[0], 0, size * sizeof (jobject));
    frame->next = env->locals;
    env->locals = frame;
*************** static jint
*** 292,299 ****
    return 0;
  }
  
! static jint
! (JNICALL _Jv_JNI_PushLocalFrame) (JNIEnv *env, jint size)
  {
    jint r = _Jv_JNI_EnsureLocalCapacity (env, size);
    if (r < 0)
--- 300,307 ----
    return 0;
  }
  
! static jint JNICALL
! _Jv_JNI_PushLocalFrame (JNIEnv *env, jint size)
  {
    jint r = _Jv_JNI_EnsureLocalCapacity (env, size);
    if (r < 0)
*************** static jint
*** 305,312 ****
    return 0;
  }
  
! static jobject
! (JNICALL _Jv_JNI_NewLocalRef) (JNIEnv *env, jobject obj)
  {
    // This seems weird but I think it is correct.
    obj = unwrap (obj);
--- 313,320 ----
    return 0;
  }
  
! static jobject JNICALL
! _Jv_JNI_NewLocalRef (JNIEnv *env, jobject obj)
  {
    // This seems weird but I think it is correct.
    obj = unwrap (obj);
*************** static jobject
*** 323,328 ****
--- 331,337 ----
  	      set = true;
  	      done = true;
  	      frame->vec[i] = obj;
+ 	      frame->allocated_p = 1;
  	      break;
  	    }
  	}
*************** static jobject
*** 340,353 ****
        _Jv_JNI_EnsureLocalCapacity (env, 16);
        // We know the first element of the new frame will be ok.
        env->locals->vec[0] = obj;
      }
  
    mark_for_gc (obj, local_ref_table);
    return obj;
  }
  
! static jobject
! (JNICALL _Jv_JNI_PopLocalFrame) (JNIEnv *env, jobject result, int stop)
  {
    _Jv_JNI_LocalFrame *rf = env->locals;
  
--- 349,363 ----
        _Jv_JNI_EnsureLocalCapacity (env, 16);
        // We know the first element of the new frame will be ok.
        env->locals->vec[0] = obj;
+       env->locals->allocated_p = 1;
      }
  
    mark_for_gc (obj, local_ref_table);
    return obj;
  }
  
! static jobject JNICALL
! _Jv_JNI_PopLocalFrame (JNIEnv *env, jobject result, int stop)
  {
    _Jv_JNI_LocalFrame *rf = env->locals;
  
*************** static jobject
*** 362,373 ****
        done = (rf->marker == stop);
  
        _Jv_JNI_LocalFrame *n = rf->next;
!       // When N==NULL, we've reached the stack-allocated frame, and we
!       // must not free it.  However, we must be sure to clear all its
!       // elements, since we might conceivably reuse it.
        if (n == NULL)
  	{
! 	  memset (&rf->vec[0], 0, rf->size * sizeof (jobject));
  	  break;
  	}
  
--- 372,385 ----
        done = (rf->marker == stop);
  
        _Jv_JNI_LocalFrame *n = rf->next;
!       // When N==NULL, we've reached the reusable bottom_locals, and we must
!       // not free it.  However, we must be sure to clear all its elements.
        if (n == NULL)
  	{
! 	  if (rf->allocated_p)
! 	    memset (&rf->vec[0], 0, rf->size * sizeof (jobject));
! 	  rf->allocated_p = 0;
! 	  rf = NULL;
  	  break;
  	}
  
*************** static jobject
*** 381,388 ****
    return result == NULL ? NULL : _Jv_JNI_NewLocalRef (env, result);
  }
  
! static jobject
! (JNICALL _Jv_JNI_PopLocalFrame) (JNIEnv *env, jobject result)
  {
    return _Jv_JNI_PopLocalFrame (env, result, MARK_USER);
  }
--- 393,400 ----
    return result == NULL ? NULL : _Jv_JNI_NewLocalRef (env, result);
  }
  
! static jobject JNICALL
! _Jv_JNI_PopLocalFrame (JNIEnv *env, jobject result)
  {
    return _Jv_JNI_PopLocalFrame (env, result, MARK_USER);
  }
*************** _Jv_JNI_check_types (JNIEnv *env, JArray
*** 408,416 ****
  extern "C" void
  _Jv_JNI_PopSystemFrame (JNIEnv *env)
  {
!   _Jv_JNI_PopLocalFrame (env, NULL, MARK_SYSTEM);
  
!   if (env->ex)
      {
        jthrowable t = env->ex;
        env->ex = NULL;
--- 420,436 ----
  extern "C" void
  _Jv_JNI_PopSystemFrame (JNIEnv *env)
  {
!   // Only enter slow path when we're not at the bottom, or there have been
!   // allocations. Usually this is false and we can just null out the locals
!   // field.
  
!   if (__builtin_expect ((env->locals->next 
! 			 || env->locals->allocated_p), false))
!     _Jv_JNI_PopLocalFrame (env, NULL, MARK_SYSTEM);
!   else
!     env->locals = NULL;
!   
!   if (__builtin_expect (env->ex != NULL, false))
      {
        jthrowable t = env->ex;
        env->ex = NULL;
*************** wrap_value (JNIEnv *env, T *value)
*** 453,467 ****
  
  
  
! static jint
! (JNICALL _Jv_JNI_GetVersion) (JNIEnv *)
  {
    return JNI_VERSION_1_4;
  }
  
! static jclass
! (JNICALL _Jv_JNI_DefineClass) (JNIEnv *env, const char *name, jobject loader,
! 		               const jbyte *buf, jsize bufLen)
  {
    try
      {
--- 473,487 ----
  
  
  
! static jint JNICALL
! _Jv_JNI_GetVersion (JNIEnv *)
  {
    return JNI_VERSION_1_4;
  }
  
! static jclass JNICALL
! _Jv_JNI_DefineClass (JNIEnv *env, const char *name, jobject loader,
! 		     const jbyte *buf, jsize bufLen)
  {
    try
      {
*************** static jclass
*** 486,493 ****
      }
  }
  
! static jclass
! (JNICALL _Jv_JNI_FindClass) (JNIEnv *env, const char *name)
  {
    // FIXME: assume that NAME isn't too long.
    int len = strlen (name);
--- 506,513 ----
      }
  }
  
! static jclass JNICALL
! _Jv_JNI_FindClass (JNIEnv *env, const char *name)
  {
    // FIXME: assume that NAME isn't too long.
    int len = strlen (name);
*************** static jclass
*** 522,541 ****
    return (jclass) wrap_value (env, r);
  }
  
! static jclass
! (JNICALL _Jv_JNI_GetSuperclass) (JNIEnv *env, jclass clazz)
  {
    return (jclass) wrap_value (env, unwrap (clazz)->getSuperclass ());
  }
  
! static jboolean
! (JNICALL _Jv_JNI_IsAssignableFrom) (JNIEnv *, jclass clazz1, jclass clazz2)
  {
    return unwrap (clazz1)->isAssignableFrom (unwrap (clazz2));
  }
  
! static jint
! (JNICALL _Jv_JNI_Throw) (JNIEnv *env, jthrowable obj)
  {
    // We check in case the user did some funky cast.
    obj = unwrap (obj);
--- 542,561 ----
    return (jclass) wrap_value (env, r);
  }
  
! static jclass JNICALL
! _Jv_JNI_GetSuperclass (JNIEnv *env, jclass clazz)
  {
    return (jclass) wrap_value (env, unwrap (clazz)->getSuperclass ());
  }
  
! static jboolean JNICALL
! _Jv_JNI_IsAssignableFrom (JNIEnv *, jclass clazz1, jclass clazz2)
  {
    return unwrap (clazz1)->isAssignableFrom (unwrap (clazz2));
  }
  
! static jint JNICALL
! _Jv_JNI_Throw (JNIEnv *env, jthrowable obj)
  {
    // We check in case the user did some funky cast.
    obj = unwrap (obj);
*************** static jint
*** 544,551 ****
    return 0;
  }
  
! static jint
! (JNICALL _Jv_JNI_ThrowNew) (JNIEnv *env, jclass clazz, const char *message)
  {
    using namespace java::lang::reflect;
  
--- 564,571 ----
    return 0;
  }
  
! static jint JNICALL
! _Jv_JNI_ThrowNew (JNIEnv *env, jclass clazz, const char *message)
  {
    using namespace java::lang::reflect;
  
*************** static jint
*** 560,570 ****
  					       NULL);
  
        jclass *elts = elements (argtypes);
!       elts[0] = &StringClass;
  
        Constructor *cons = clazz->getConstructor (argtypes);
  
!       jobjectArray values = JvNewObjectArray (1, &StringClass, NULL);
        jobject *velts = elements (values);
        velts[0] = JvNewStringUTF (message);
  
--- 580,591 ----
  					       NULL);
  
        jclass *elts = elements (argtypes);
!       elts[0] = &java::lang::String::class$;
  
        Constructor *cons = clazz->getConstructor (argtypes);
  
!       jobjectArray values = JvNewObjectArray (1, &java::lang::String::class$,
! 					      NULL);
        jobject *velts = elements (values);
        velts[0] = JvNewStringUTF (message);
  
*************** static jint
*** 581,627 ****
    return r;
  }
  
! static jthrowable
! (JNICALL _Jv_JNI_ExceptionOccurred) (JNIEnv *env)
  {
    return (jthrowable) wrap_value (env, env->ex);
  }
  
! static void
! (JNICALL _Jv_JNI_ExceptionDescribe) (JNIEnv *env)
  {
    if (env->ex != NULL)
      env->ex->printStackTrace();
  }
  
! static void
! (JNICALL _Jv_JNI_ExceptionClear) (JNIEnv *env)
  {
    env->ex = NULL;
  }
  
! static jboolean
! (JNICALL _Jv_JNI_ExceptionCheck) (JNIEnv *env)
  {
    return env->ex != NULL;
  }
  
! static void
! (JNICALL _Jv_JNI_FatalError) (JNIEnv *, const char *message)
  {
    JvFail (message);
  }
  
  
  
! static jboolean
! (JNICALL _Jv_JNI_IsSameObject) (JNIEnv *, jobject obj1, jobject obj2)
  {
    return unwrap (obj1) == unwrap (obj2);
  }
  
! static jobject
! (JNICALL _Jv_JNI_AllocObject) (JNIEnv *env, jclass clazz)
  {
    jobject obj = NULL;
    using namespace java::lang::reflect;
--- 602,648 ----
    return r;
  }
  
! static jthrowable JNICALL
! _Jv_JNI_ExceptionOccurred (JNIEnv *env)
  {
    return (jthrowable) wrap_value (env, env->ex);
  }
  
! static void JNICALL
! _Jv_JNI_ExceptionDescribe (JNIEnv *env)
  {
    if (env->ex != NULL)
      env->ex->printStackTrace();
  }
  
! static void JNICALL
! _Jv_JNI_ExceptionClear (JNIEnv *env)
  {
    env->ex = NULL;
  }
  
! static jboolean JNICALL
! _Jv_JNI_ExceptionCheck (JNIEnv *env)
  {
    return env->ex != NULL;
  }
  
! static void JNICALL
! _Jv_JNI_FatalError (JNIEnv *, const char *message)
  {
    JvFail (message);
  }
  
  
  
! static jboolean JNICALL
! _Jv_JNI_IsSameObject (JNIEnv *, jobject obj1, jobject obj2)
  {
    return unwrap (obj1) == unwrap (obj2);
  }
  
! static jobject JNICALL
! _Jv_JNI_AllocObject (JNIEnv *env, jclass clazz)
  {
    jobject obj = NULL;
    using namespace java::lang::reflect;
*************** static jobject
*** 633,639 ****
        if (clazz->isInterface() || Modifier::isAbstract(clazz->getModifiers()))
  	env->ex = new java::lang::InstantiationException ();
        else
! 	obj = JvAllocObject (clazz);
      }
    catch (jthrowable t)
      {
--- 654,660 ----
        if (clazz->isInterface() || Modifier::isAbstract(clazz->getModifiers()))
  	env->ex = new java::lang::InstantiationException ();
        else
! 	obj = _Jv_AllocObject (clazz);
      }
    catch (jthrowable t)
      {
*************** static jobject
*** 643,658 ****
    return wrap_value (env, obj);
  }
  
! static jclass
! (JNICALL _Jv_JNI_GetObjectClass) (JNIEnv *env, jobject obj)
  {
    obj = unwrap (obj);
    JvAssert (obj);
    return (jclass) wrap_value (env, obj->getClass());
  }
  
! static jboolean
! (JNICALL _Jv_JNI_IsInstanceOf) (JNIEnv *, jobject obj, jclass clazz)
  {
    return unwrap (clazz)->isInstance(unwrap (obj));
  }
--- 664,679 ----
    return wrap_value (env, obj);
  }
  
! static jclass JNICALL
! _Jv_JNI_GetObjectClass (JNIEnv *env, jobject obj)
  {
    obj = unwrap (obj);
    JvAssert (obj);
    return (jclass) wrap_value (env, obj->getClass());
  }
  
! static jboolean JNICALL
! _Jv_JNI_IsInstanceOf (JNIEnv *, jobject obj, jclass clazz)
  {
    return unwrap (clazz)->isInstance(unwrap (obj));
  }
*************** static jboolean
*** 664,672 ****
  //
  
  template<jboolean is_static>
! static jmethodID
! (JNICALL _Jv_JNI_GetAnyMethodID) (JNIEnv *env, jclass clazz,
! 			          const char *name, const char *sig)
  {
    try
      {
--- 685,693 ----
  //
  
  template<jboolean is_static>
! static jmethodID JNICALL
! _Jv_JNI_GetAnyMethodID (JNIEnv *env, jclass clazz,
! 			const char *name, const char *sig)
  {
    try
      {
*************** static jmethodID
*** 705,711 ****
  	  clazz = clazz->getSuperclass ();
  	}
  
!       env->ex = new java::lang::NoSuchMethodError ();
      }
    catch (jthrowable t)
      {
--- 726,735 ----
  	  clazz = clazz->getSuperclass ();
  	}
  
!       java::lang::StringBuffer *name_sig =
!         new java::lang::StringBuffer (JvNewStringUTF (name));
!       name_sig->append ((jchar) ' ')->append (JvNewStringUTF (s));
!       env->ex = new java::lang::NoSuchMethodError (name_sig->toString ());
      }
    catch (jthrowable t)
      {
*************** array_from_valist (jvalue *values, JArra
*** 760,768 ****
  // This can call any sort of method: virtual, "nonvirtual", static, or
  // constructor.
  template<typename T, invocation_type style>
! static T
! (JNICALL _Jv_JNI_CallAnyMethodV) (JNIEnv *env, jobject obj, jclass klass,
! 			          jmethodID id, va_list vargs)
  {
    obj = unwrap (obj);
    klass = unwrap (klass);
--- 784,792 ----
  // This can call any sort of method: virtual, "nonvirtual", static, or
  // constructor.
  template<typename T, invocation_type style>
! static T JNICALL
! _Jv_JNI_CallAnyMethodV (JNIEnv *env, jobject obj, jclass klass,
! 			jmethodID id, va_list vargs)
  {
    obj = unwrap (obj);
    klass = unwrap (klass);
*************** static T
*** 802,810 ****
  }
  
  template<typename T, invocation_type style>
! static T
! (JNICALL _Jv_JNI_CallAnyMethod) (JNIEnv *env, jobject obj, jclass klass,
! 		                 jmethodID method, ...)
  {
    va_list args;
    T result;
--- 826,834 ----
  }
  
  template<typename T, invocation_type style>
! static T JNICALL
! _Jv_JNI_CallAnyMethod (JNIEnv *env, jobject obj, jclass klass,
! 		       jmethodID method, ...)
  {
    va_list args;
    T result;
*************** static T
*** 817,825 ****
  }
  
  template<typename T, invocation_type style>
! static T
! (JNICALL _Jv_JNI_CallAnyMethodA) (JNIEnv *env, jobject obj, jclass klass,
! 			          jmethodID id, jvalue *args)
  {
    obj = unwrap (obj);
    klass = unwrap (klass);
--- 841,849 ----
  }
  
  template<typename T, invocation_type style>
! static T JNICALL
! _Jv_JNI_CallAnyMethodA (JNIEnv *env, jobject obj, jclass klass,
! 			jmethodID id, jvalue *args)
  {
    obj = unwrap (obj);
    klass = unwrap (klass);
*************** static T
*** 866,874 ****
  }
  
  template<invocation_type style>
! static void
! (JNICALL _Jv_JNI_CallAnyVoidMethodV) (JNIEnv *env, jobject obj, jclass klass,
! 			              jmethodID id, va_list vargs)
  {
    obj = unwrap (obj);
    klass = unwrap (klass);
--- 890,898 ----
  }
  
  template<invocation_type style>
! static void JNICALL
! _Jv_JNI_CallAnyVoidMethodV (JNIEnv *env, jobject obj, jclass klass,
! 			    jmethodID id, va_list vargs)
  {
    obj = unwrap (obj);
    klass = unwrap (klass);
*************** static void
*** 902,910 ****
  }
  
  template<invocation_type style>
! static void
! (JNICALL _Jv_JNI_CallAnyVoidMethod) (JNIEnv *env, jobject obj, jclass klass,
! 			             jmethodID method, ...)
  {
    va_list args;
  
--- 926,934 ----
  }
  
  template<invocation_type style>
! static void JNICALL
! _Jv_JNI_CallAnyVoidMethod (JNIEnv *env, jobject obj, jclass klass,
! 			   jmethodID method, ...)
  {
    va_list args;
  
*************** static void
*** 914,922 ****
  }
  
  template<invocation_type style>
! static void
! (JNICALL _Jv_JNI_CallAnyVoidMethodA) (JNIEnv *env, jobject obj, jclass klass,
! 			              jmethodID id, jvalue *args)
  {
    jclass decl_class = klass ? klass : obj->getClass ();
    JvAssert (decl_class != NULL);
--- 938,946 ----
  }
  
  template<invocation_type style>
! static void JNICALL
! _Jv_JNI_CallAnyVoidMethodA (JNIEnv *env, jobject obj, jclass klass,
! 			    jmethodID id, jvalue *args)
  {
    jclass decl_class = klass ? klass : obj->getClass ();
    JvAssert (decl_class != NULL);
*************** static void
*** 953,961 ****
  // Functions with this signature are used to implement functions in
  // the CallMethod family.
  template<typename T>
! static T
! (JNICALL _Jv_JNI_CallMethodV) (JNIEnv *env, jobject obj, 
!                                jmethodID id, va_list args)
  {
    return _Jv_JNI_CallAnyMethodV<T, normal> (env, obj, NULL, id, args);
  }
--- 977,985 ----
  // Functions with this signature are used to implement functions in
  // the CallMethod family.
  template<typename T>
! static T JNICALL
! _Jv_JNI_CallMethodV (JNIEnv *env, jobject obj, 
! 		     jmethodID id, va_list args)
  {
    return _Jv_JNI_CallAnyMethodV<T, normal> (env, obj, NULL, id, args);
  }
*************** static T
*** 963,970 ****
  // Functions with this signature are used to implement functions in
  // the CallMethod family.
  template<typename T>
! static T
! (JNICALL _Jv_JNI_CallMethod) (JNIEnv *env, jobject obj, jmethodID id, ...)
  {
    va_list args;
    T result;
--- 987,994 ----
  // Functions with this signature are used to implement functions in
  // the CallMethod family.
  template<typename T>
! static T JNICALL
! _Jv_JNI_CallMethod (JNIEnv *env, jobject obj, jmethodID id, ...)
  {
    va_list args;
    T result;
*************** static T
*** 979,1000 ****
  // Functions with this signature are used to implement functions in
  // the CallMethod family.
  template<typename T>
! static T
! (JNICALL _Jv_JNI_CallMethodA) (JNIEnv *env, jobject obj, 
!                                jmethodID id, jvalue *args)
  {
    return _Jv_JNI_CallAnyMethodA<T, normal> (env, obj, NULL, id, args);
  }
  
! static void
! (JNICALL _Jv_JNI_CallVoidMethodV) (JNIEnv *env, jobject obj, 
!                                    jmethodID id, va_list args)
  {
    _Jv_JNI_CallAnyVoidMethodV<normal> (env, obj, NULL, id, args);
  }
  
! static void
! (JNICALL _Jv_JNI_CallVoidMethod) (JNIEnv *env, jobject obj, jmethodID id, ...)
  {
    va_list args;
  
--- 1003,1024 ----
  // Functions with this signature are used to implement functions in
  // the CallMethod family.
  template<typename T>
! static T JNICALL
! _Jv_JNI_CallMethodA (JNIEnv *env, jobject obj, 
! 		     jmethodID id, jvalue *args)
  {
    return _Jv_JNI_CallAnyMethodA<T, normal> (env, obj, NULL, id, args);
  }
  
! static void JNICALL
! _Jv_JNI_CallVoidMethodV (JNIEnv *env, jobject obj, 
! 			 jmethodID id, va_list args)
  {
    _Jv_JNI_CallAnyVoidMethodV<normal> (env, obj, NULL, id, args);
  }
  
! static void JNICALL
! _Jv_JNI_CallVoidMethod (JNIEnv *env, jobject obj, jmethodID id, ...)
  {
    va_list args;
  
*************** static void
*** 1003,1011 ****
    va_end (args);
  }
  
! static void
! (JNICALL _Jv_JNI_CallVoidMethodA) (JNIEnv *env, jobject obj, 
!                                    jmethodID id, jvalue *args)
  {
    _Jv_JNI_CallAnyVoidMethodA<normal> (env, obj, NULL, id, args);
  }
--- 1027,1035 ----
    va_end (args);
  }
  
! static void JNICALL
! _Jv_JNI_CallVoidMethodA (JNIEnv *env, jobject obj, 
! 			 jmethodID id, jvalue *args)
  {
    _Jv_JNI_CallAnyVoidMethodA<normal> (env, obj, NULL, id, args);
  }
*************** static void
*** 1013,1021 ****
  // Functions with this signature are used to implement functions in
  // the CallStaticMethod family.
  template<typename T>
! static T
! (JNICALL _Jv_JNI_CallStaticMethodV) (JNIEnv *env, jclass klass,
! 			             jmethodID id, va_list args)
  {
    JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC));
    JvAssert (java::lang::Class::class$.isInstance (unwrap (klass)));
--- 1037,1045 ----
  // Functions with this signature are used to implement functions in
  // the CallStaticMethod family.
  template<typename T>
! static T JNICALL
! _Jv_JNI_CallStaticMethodV (JNIEnv *env, jclass klass,
! 			   jmethodID id, va_list args)
  {
    JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC));
    JvAssert (java::lang::Class::class$.isInstance (unwrap (klass)));
*************** static T
*** 1026,1034 ****
  // Functions with this signature are used to implement functions in
  // the CallStaticMethod family.
  template<typename T>
! static T
! (JNICALL _Jv_JNI_CallStaticMethod) (JNIEnv *env, jclass klass, 
!                                     jmethodID id, ...)
  {
    va_list args;
    T result;
--- 1050,1058 ----
  // Functions with this signature are used to implement functions in
  // the CallStaticMethod family.
  template<typename T>
! static T JNICALL
! _Jv_JNI_CallStaticMethod (JNIEnv *env, jclass klass, 
! 			  jmethodID id, ...)
  {
    va_list args;
    T result;
*************** static T
*** 1047,1055 ****
  // Functions with this signature are used to implement functions in
  // the CallStaticMethod family.
  template<typename T>
! static T
! (JNICALL _Jv_JNI_CallStaticMethodA) (JNIEnv *env, jclass klass, jmethodID id,
! 			             jvalue *args)
  {
    JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC));
    JvAssert (java::lang::Class::class$.isInstance (unwrap (klass)));
--- 1071,1079 ----
  // Functions with this signature are used to implement functions in
  // the CallStaticMethod family.
  template<typename T>
! static T JNICALL
! _Jv_JNI_CallStaticMethodA (JNIEnv *env, jclass klass, jmethodID id,
! 			   jvalue *args)
  {
    JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC));
    JvAssert (java::lang::Class::class$.isInstance (unwrap (klass)));
*************** static T
*** 1057,1072 ****
    return _Jv_JNI_CallAnyMethodA<T, static_type> (env, NULL, klass, id, args);
  }
  
! static void
! (JNICALL _Jv_JNI_CallStaticVoidMethodV) (JNIEnv *env, jclass klass, 
!                                          jmethodID id, va_list args)
  {
    _Jv_JNI_CallAnyVoidMethodV<static_type> (env, NULL, klass, id, args);
  }
  
! static void
! (JNICALL _Jv_JNI_CallStaticVoidMethod) (JNIEnv *env, jclass klass, 
!                                         jmethodID id, ...)
  {
    va_list args;
  
--- 1081,1096 ----
    return _Jv_JNI_CallAnyMethodA<T, static_type> (env, NULL, klass, id, args);
  }
  
! static void JNICALL
! _Jv_JNI_CallStaticVoidMethodV (JNIEnv *env, jclass klass, 
! 			       jmethodID id, va_list args)
  {
    _Jv_JNI_CallAnyVoidMethodV<static_type> (env, NULL, klass, id, args);
  }
  
! static void JNICALL
! _Jv_JNI_CallStaticVoidMethod (JNIEnv *env, jclass klass, 
! 			      jmethodID id, ...)
  {
    va_list args;
  
*************** static void
*** 1075,1090 ****
    va_end (args);
  }
  
! static void
! (JNICALL _Jv_JNI_CallStaticVoidMethodA) (JNIEnv *env, jclass klass, 
!                                          jmethodID id, jvalue *args)
  {
    _Jv_JNI_CallAnyVoidMethodA<static_type> (env, NULL, klass, id, args);
  }
  
! static jobject
! (JNICALL _Jv_JNI_NewObjectV) (JNIEnv *env, jclass klass,
! 		              jmethodID id, va_list args)
  {
    JvAssert (klass && ! klass->isArray ());
    JvAssert (! strcmp (id->name->data, "<init>")
--- 1099,1114 ----
    va_end (args);
  }
  
! static void JNICALL
! _Jv_JNI_CallStaticVoidMethodA (JNIEnv *env, jclass klass, 
! 			       jmethodID id, jvalue *args)
  {
    _Jv_JNI_CallAnyVoidMethodA<static_type> (env, NULL, klass, id, args);
  }
  
! static jobject JNICALL
! _Jv_JNI_NewObjectV (JNIEnv *env, jclass klass,
! 		    jmethodID id, va_list args)
  {
    JvAssert (klass && ! klass->isArray ());
    JvAssert (! strcmp (id->name->data, "<init>")
*************** static jobject
*** 1097,1104 ****
  						       id, args);
  }
  
! static jobject
! (JNICALL _Jv_JNI_NewObject) (JNIEnv *env, jclass klass, jmethodID id, ...)
  {
    JvAssert (klass && ! klass->isArray ());
    JvAssert (! strcmp (id->name->data, "<init>")
--- 1121,1128 ----
  						       id, args);
  }
  
! static jobject JNICALL
! _Jv_JNI_NewObject (JNIEnv *env, jclass klass, jmethodID id, ...)
  {
    JvAssert (klass && ! klass->isArray ());
    JvAssert (! strcmp (id->name->data, "<init>")
*************** static jobject
*** 1118,1126 ****
    return result;
  }
  
! static jobject
! (JNICALL _Jv_JNI_NewObjectA) (JNIEnv *env, jclass klass, jmethodID id,
! 		              jvalue *args)
  {
    JvAssert (klass && ! klass->isArray ());
    JvAssert (! strcmp (id->name->data, "<init>")
--- 1142,1150 ----
    return result;
  }
  
! static jobject JNICALL
! _Jv_JNI_NewObjectA (JNIEnv *env, jclass klass, jmethodID id,
! 		    jvalue *args)
  {
    JvAssert (klass && ! klass->isArray ());
    JvAssert (! strcmp (id->name->data, "<init>")
*************** static jobject
*** 1136,1143 ****
  
  
  template<typename T>
! static T
! (JNICALL _Jv_JNI_GetField) (JNIEnv *env, jobject obj, jfieldID field)
  {
    obj = unwrap (obj);
    JvAssert (obj);
--- 1160,1167 ----
  
  
  template<typename T>
! static T JNICALL
! _Jv_JNI_GetField (JNIEnv *env, jobject obj, jfieldID field)
  {
    obj = unwrap (obj);
    JvAssert (obj);
*************** static T
*** 1146,1153 ****
  }
  
  template<typename T>
! static void
! (JNICALL _Jv_JNI_SetField) (JNIEnv *, jobject obj, jfieldID field, T value)
  {
    obj = unwrap (obj);
    value = unwrap (value);
--- 1170,1177 ----
  }
  
  template<typename T>
! static void JNICALL
! _Jv_JNI_SetField (JNIEnv *, jobject obj, jfieldID field, T value)
  {
    obj = unwrap (obj);
    value = unwrap (value);
*************** static void
*** 1158,1166 ****
  }
  
  template<jboolean is_static>
! static jfieldID
! (JNICALL _Jv_JNI_GetAnyFieldID) (JNIEnv *env, jclass clazz,
! 		                 const char *name, const char *sig)
  {
    try
      {
--- 1182,1190 ----
  }
  
  template<jboolean is_static>
! static jfieldID JNICALL
! _Jv_JNI_GetAnyFieldID (JNIEnv *env, jclass clazz,
! 		       const char *name, const char *sig)
  {
    try
      {
*************** static jfieldID
*** 1198,1204 ****
  
  	      // The field might be resolved or it might not be.  It
  	      // is much simpler to always resolve it.
! 	      _Jv_ResolveField (field, loader);
  	      if (_Jv_equalUtf8Consts (f_name, a_name)
  		  && field->getClass() == field_class)
  		return field;
--- 1222,1228 ----
  
  	      // The field might be resolved or it might not be.  It
  	      // is much simpler to always resolve it.
! 	      _Jv_Linker::resolve_field (field, loader);
  	      if (_Jv_equalUtf8Consts (f_name, a_name)
  		  && field->getClass() == field_class)
  		return field;
*************** static jfieldID
*** 1219,1242 ****
  }
  
  template<typename T>
! static T
! (JNICALL _Jv_JNI_GetStaticField) (JNIEnv *env, jclass, jfieldID field)
  {
    T *ptr = (T *) field->u.addr;
    return wrap_value (env, *ptr);
  }
  
  template<typename T>
! static void
! (JNICALL _Jv_JNI_SetStaticField) (JNIEnv *, jclass, jfieldID field, T value)
  {
    value = unwrap (value);
    T *ptr = (T *) field->u.addr;
    *ptr = value;
  }
  
! static jstring
! (JNICALL _Jv_JNI_NewString) (JNIEnv *env, const jchar *unichars, jsize len)
  {
    try
      {
--- 1243,1266 ----
  }
  
  template<typename T>
! static T JNICALL
! _Jv_JNI_GetStaticField (JNIEnv *env, jclass, jfieldID field)
  {
    T *ptr = (T *) field->u.addr;
    return wrap_value (env, *ptr);
  }
  
  template<typename T>
! static void JNICALL
! _Jv_JNI_SetStaticField (JNIEnv *, jclass, jfieldID field, T value)
  {
    value = unwrap (value);
    T *ptr = (T *) field->u.addr;
    *ptr = value;
  }
  
! static jstring JNICALL
! _Jv_JNI_NewString (JNIEnv *env, const jchar *unichars, jsize len)
  {
    try
      {
*************** static jstring
*** 1250,1263 ****
      }
  }
  
! static jsize
! (JNICALL _Jv_JNI_GetStringLength) (JNIEnv *, jstring string)
  {
    return unwrap (string)->length();
  }
  
! static const jchar *
! (JNICALL _Jv_JNI_GetStringChars) (JNIEnv *, jstring string, jboolean *isCopy)
  {
    string = unwrap (string);
    jchar *result = _Jv_GetStringChars (string);
--- 1274,1287 ----
      }
  }
  
! static jsize JNICALL
! _Jv_JNI_GetStringLength (JNIEnv *, jstring string)
  {
    return unwrap (string)->length();
  }
  
! static const jchar * JNICALL
! _Jv_JNI_GetStringChars (JNIEnv *, jstring string, jboolean *isCopy)
  {
    string = unwrap (string);
    jchar *result = _Jv_GetStringChars (string);
*************** static const jchar *
*** 1267,1280 ****
    return (const jchar *) result;
  }
  
! static void
! (JNICALL _Jv_JNI_ReleaseStringChars) (JNIEnv *, jstring string, const jchar *)
  {
    unmark_for_gc (unwrap (string), global_ref_table);
  }
  
! static jstring
! (JNICALL _Jv_JNI_NewStringUTF) (JNIEnv *env, const char *bytes)
  {
    try
      {
--- 1291,1304 ----
    return (const jchar *) result;
  }
  
! static void JNICALL
! _Jv_JNI_ReleaseStringChars (JNIEnv *, jstring string, const jchar *)
  {
    unmark_for_gc (unwrap (string), global_ref_table);
  }
  
! static jstring JNICALL
! _Jv_JNI_NewStringUTF (JNIEnv *env, const char *bytes)
  {
    try
      {
*************** static jstring
*** 1288,1302 ****
      }
  }
  
! static jsize
! (JNICALL _Jv_JNI_GetStringUTFLength) (JNIEnv *, jstring string)
  {
    return JvGetStringUTFLength (unwrap (string));
  }
  
! static const char *
! (JNICALL _Jv_JNI_GetStringUTFChars) (JNIEnv *env, jstring string, 
!                                      jboolean *isCopy)
  {
    try
      {
--- 1312,1326 ----
      }
  }
  
! static jsize JNICALL
! _Jv_JNI_GetStringUTFLength (JNIEnv *, jstring string)
  {
    return JvGetStringUTFLength (unwrap (string));
  }
  
! static const char * JNICALL
! _Jv_JNI_GetStringUTFChars (JNIEnv *env, jstring string, 
! 			   jboolean *isCopy)
  {
    try
      {
*************** static const char *
*** 1320,1334 ****
      }
  }
  
! static void
! (JNICALL _Jv_JNI_ReleaseStringUTFChars) (JNIEnv *, jstring, const char *utf)
  {
    _Jv_Free ((void *) utf);
  }
  
! static void
! (JNICALL _Jv_JNI_GetStringRegion) (JNIEnv *env, jstring string, jsize start, 
!                                    jsize len, jchar *buf)
  {
    string = unwrap (string);
    jchar *result = _Jv_GetStringChars (string);
--- 1344,1358 ----
      }
  }
  
! static void JNICALL
! _Jv_JNI_ReleaseStringUTFChars (JNIEnv *, jstring, const char *utf)
  {
    _Jv_Free ((void *) utf);
  }
  
! static void JNICALL
! _Jv_JNI_GetStringRegion (JNIEnv *env, jstring string, jsize start, 
! 			 jsize len, jchar *buf)
  {
    string = unwrap (string);
    jchar *result = _Jv_GetStringChars (string);
*************** static void
*** 1348,1356 ****
      memcpy (buf, &result[start], len * sizeof (jchar));
  }
  
! static void
! (JNICALL _Jv_JNI_GetStringUTFRegion) (JNIEnv *env, jstring str, jsize start,
! 			              jsize len, char *buf)
  {
    str = unwrap (str);
      
--- 1372,1380 ----
      memcpy (buf, &result[start], len * sizeof (jchar));
  }
  
! static void JNICALL
! _Jv_JNI_GetStringUTFRegion (JNIEnv *env, jstring str, jsize start,
! 			    jsize len, char *buf)
  {
    str = unwrap (str);
      
*************** static void
*** 1370,1377 ****
      _Jv_GetStringUTFRegion (str, start, len, buf);
  }
  
! static const jchar *
! (JNICALL _Jv_JNI_GetStringCritical) (JNIEnv *, jstring str, jboolean *isCopy)
  {
    jchar *result = _Jv_GetStringChars (unwrap (str));
    if (isCopy)
--- 1394,1401 ----
      _Jv_GetStringUTFRegion (str, start, len, buf);
  }
  
! static const jchar * JNICALL
! _Jv_JNI_GetStringCritical (JNIEnv *, jstring str, jboolean *isCopy)
  {
    jchar *result = _Jv_GetStringChars (unwrap (str));
    if (isCopy)
*************** static const jchar *
*** 1379,1399 ****
    return result;
  }
  
! static void
! (JNICALL _Jv_JNI_ReleaseStringCritical) (JNIEnv *, jstring, const jchar *)
  {
    // Nothing.
  }
  
! static jsize
! (JNICALL _Jv_JNI_GetArrayLength) (JNIEnv *, jarray array)
  {
    return unwrap (array)->length;
  }
  
! static jarray
! (JNICALL _Jv_JNI_NewObjectArray) (JNIEnv *env, jsize length, 
!                                   jclass elementClass, jobject init)
  {
    try
      {
--- 1403,1423 ----
    return result;
  }
  
! static void JNICALL
! _Jv_JNI_ReleaseStringCritical (JNIEnv *, jstring, const jchar *)
  {
    // Nothing.
  }
  
! static jsize JNICALL
! _Jv_JNI_GetArrayLength (JNIEnv *, jarray array)
  {
    return unwrap (array)->length;
  }
  
! static jobjectArray JNICALL
! _Jv_JNI_NewObjectArray (JNIEnv *env, jsize length, 
! 			jclass elementClass, jobject init)
  {
    try
      {
*************** static jarray
*** 1402,1408 ****
  
        _Jv_CheckCast (elementClass, init);
        jarray result = JvNewObjectArray (length, elementClass, init);
!       return (jarray) wrap_value (env, result);
      }
    catch (jthrowable t)
      {
--- 1426,1432 ----
  
        _Jv_CheckCast (elementClass, init);
        jarray result = JvNewObjectArray (length, elementClass, init);
!       return (jobjectArray) wrap_value (env, result);
      }
    catch (jthrowable t)
      {
*************** static jarray
*** 1411,1419 ****
      }
  }
  
! static jobject
! (JNICALL _Jv_JNI_GetObjectArrayElement) (JNIEnv *env, jobjectArray array, 
!                                          jsize index)
  {
    if ((unsigned) index >= (unsigned) array->length)
      _Jv_ThrowBadArrayIndex (index);
--- 1435,1443 ----
      }
  }
  
! static jobject JNICALL
! _Jv_JNI_GetObjectArrayElement (JNIEnv *env, jobjectArray array, 
! 			       jsize index)
  {
    if ((unsigned) index >= (unsigned) array->length)
      _Jv_ThrowBadArrayIndex (index);
*************** static jobject
*** 1421,1429 ****
    return wrap_value (env, elts[index]);
  }
  
! static void
! (JNICALL _Jv_JNI_SetObjectArrayElement) (JNIEnv *env, jobjectArray array, 
!                                          jsize index, jobject value)
  {
    try
      {
--- 1445,1453 ----
    return wrap_value (env, elts[index]);
  }
  
! static void JNICALL
! _Jv_JNI_SetObjectArrayElement (JNIEnv *env, jobjectArray array, 
! 			       jsize index, jobject value)
  {
    try
      {
*************** static void
*** 1443,1450 ****
  }
  
  template<typename T, jclass K>
! static JArray<T> *
! (JNICALL _Jv_JNI_NewPrimitiveArray) (JNIEnv *env, jsize length)
  {
    try
      {
--- 1467,1474 ----
  }
  
  template<typename T, jclass K>
! static JArray<T> * JNICALL
! _Jv_JNI_NewPrimitiveArray (JNIEnv *env, jsize length)
  {
    try
      {
*************** static JArray<T> *
*** 1458,1466 ****
  }
  
  template<typename T, jclass K>
! static T *
! (JNICALL _Jv_JNI_GetPrimitiveArrayElements) (JNIEnv *env, JArray<T> *array,
! 				             jboolean *isCopy)
  {
    array = unwrap (array);
    if (! _Jv_JNI_check_types (env, array, K))
--- 1482,1490 ----
  }
  
  template<typename T, jclass K>
! static T * JNICALL
! _Jv_JNI_GetPrimitiveArrayElements (JNIEnv *env, JArray<T> *array,
! 				   jboolean *isCopy)
  {
    array = unwrap (array);
    if (! _Jv_JNI_check_types (env, array, K))
*************** static T *
*** 1476,1484 ****
  }
  
  template<typename T, jclass K>
! static void
! (JNICALL _Jv_JNI_ReleasePrimitiveArrayElements) (JNIEnv *env, JArray<T> *array,
! 				                 T *, jint /* mode */)
  {
    array = unwrap (array);
    _Jv_JNI_check_types (env, array, K);
--- 1500,1508 ----
  }
  
  template<typename T, jclass K>
! static void JNICALL
! _Jv_JNI_ReleasePrimitiveArrayElements (JNIEnv *env, JArray<T> *array,
! 				       T *, jint /* mode */)
  {
    array = unwrap (array);
    _Jv_JNI_check_types (env, array, K);
*************** static void
*** 1489,1497 ****
  }
  
  template<typename T, jclass K>
! static void
! (JNICALL _Jv_JNI_GetPrimitiveArrayRegion) (JNIEnv *env, JArray<T> *array,
! 				           jsize start, jsize len,
  				 T *buf)
  {
    array = unwrap (array);
--- 1513,1521 ----
  }
  
  template<typename T, jclass K>
! static void JNICALL
! _Jv_JNI_GetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array,
! 				 jsize start, jsize len,
  				 T *buf)
  {
    array = unwrap (array);
*************** static void
*** 1521,1529 ****
  }
  
  template<typename T, jclass K>
! static void
! (JNICALL _Jv_JNI_SetPrimitiveArrayRegion) (JNIEnv *env, JArray<T> *array,
! 				           jsize start, jsize len, T *buf)
  {
    array = unwrap (array);
    if (! _Jv_JNI_check_types (env, array, K))
--- 1545,1553 ----
  }
  
  template<typename T, jclass K>
! static void JNICALL
! _Jv_JNI_SetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array,
! 				 jsize start, jsize len, T *buf)
  {
    array = unwrap (array);
    if (! _Jv_JNI_check_types (env, array, K))
*************** static void
*** 1550,1558 ****
      }
  }
  
! static void *
! (JNICALL _Jv_JNI_GetPrimitiveArrayCritical) (JNIEnv *, jarray array,
! 				             jboolean *isCopy)
  {
    array = unwrap (array);
    // FIXME: does this work?
--- 1574,1582 ----
      }
  }
  
! static void * JNICALL
! _Jv_JNI_GetPrimitiveArrayCritical (JNIEnv *, jarray array,
! 				   jboolean *isCopy)
  {
    array = unwrap (array);
    // FIXME: does this work?
*************** static void *
*** 1564,1577 ****
    return r;
  }
  
! static void
! (JNICALL _Jv_JNI_ReleasePrimitiveArrayCritical) (JNIEnv *, jarray, void *, jint)
  {
    // Nothing.
  }
  
! static jint
! (JNICALL _Jv_JNI_MonitorEnter) (JNIEnv *env, jobject obj)
  {
    try
      {
--- 1588,1601 ----
    return r;
  }
  
! static void JNICALL
! _Jv_JNI_ReleasePrimitiveArrayCritical (JNIEnv *, jarray, void *, jint)
  {
    // Nothing.
  }
  
! static jint JNICALL
! _Jv_JNI_MonitorEnter (JNIEnv *env, jobject obj)
  {
    try
      {
*************** static jint
*** 1585,1592 ****
    return JNI_ERR;
  }
  
! static jint
! (JNICALL _Jv_JNI_MonitorExit) (JNIEnv *env, jobject obj)
  {
    try
      {
--- 1609,1616 ----
    return JNI_ERR;
  }
  
! static jint JNICALL
! _Jv_JNI_MonitorExit (JNIEnv *env, jobject obj)
  {
    try
      {
*************** static jint
*** 1601,1609 ****
  }
  
  // JDK 1.2
! jobject
! (JNICALL _Jv_JNI_ToReflectedField) (JNIEnv *env, jclass cls, jfieldID fieldID,
! 			            jboolean)
  {
    try
      {
--- 1625,1633 ----
  }
  
  // JDK 1.2
! jobject JNICALL
! _Jv_JNI_ToReflectedField (JNIEnv *env, jclass cls, jfieldID fieldID,
! 			  jboolean)
  {
    try
      {
*************** jobject
*** 1622,1629 ****
  }
  
  // JDK 1.2
! static jfieldID
! (JNICALL _Jv_JNI_FromReflectedField) (JNIEnv *, jobject f)
  {
    using namespace java::lang::reflect;
  
--- 1646,1653 ----
  }
  
  // JDK 1.2
! static jfieldID JNICALL
! _Jv_JNI_FromReflectedField (JNIEnv *, jobject f)
  {
    using namespace java::lang::reflect;
  
*************** static jfieldID
*** 1632,1640 ****
    return _Jv_FromReflectedField (field);
  }
  
! jobject
! (JNICALL _Jv_JNI_ToReflectedMethod) (JNIEnv *env, jclass klass, jmethodID id,
!         		             jboolean)
  {
    using namespace java::lang::reflect;
  
--- 1656,1664 ----
    return _Jv_FromReflectedField (field);
  }
  
! jobject JNICALL
! _Jv_JNI_ToReflectedMethod (JNIEnv *env, jclass klass, jmethodID id,
! 			   jboolean)
  {
    using namespace java::lang::reflect;
  
*************** jobject
*** 1667,1674 ****
    return wrap_value (env, result);
  }
  
! static jmethodID
! (JNICALL _Jv_JNI_FromReflectedMethod) (JNIEnv *, jobject method)
  {
    using namespace java::lang::reflect;
    method = unwrap (method);
--- 1691,1698 ----
    return wrap_value (env, result);
  }
  
! static jmethodID JNICALL
! _Jv_JNI_FromReflectedMethod (JNIEnv *, jobject method)
  {
    using namespace java::lang::reflect;
    method = unwrap (method);
*************** static jmethodID
*** 1679,1686 ****
  }
  
  // JDK 1.2.
! jweak
! (JNICALL _Jv_JNI_NewWeakGlobalRef) (JNIEnv *env, jobject obj)
  {
    using namespace gnu::gcj::runtime;
    JNIWeakRef *ref = NULL;
--- 1703,1710 ----
  }
  
  // JDK 1.2.
! jweak JNICALL
! _Jv_JNI_NewWeakGlobalRef (JNIEnv *env, jobject obj)
  {
    using namespace gnu::gcj::runtime;
    JNIWeakRef *ref = NULL;
*************** jweak
*** 1700,1707 ****
    return reinterpret_cast<jweak> (ref);
  }
  
! void
! (JNICALL _Jv_JNI_DeleteWeakGlobalRef) (JNIEnv *, jweak obj)
  {
    using namespace gnu::gcj::runtime;
    JNIWeakRef *ref = reinterpret_cast<JNIWeakRef *> (obj);
--- 1724,1731 ----
    return reinterpret_cast<jweak> (ref);
  }
  
! void JNICALL
! _Jv_JNI_DeleteWeakGlobalRef (JNIEnv *, jweak obj)
  {
    using namespace gnu::gcj::runtime;
    JNIWeakRef *ref = reinterpret_cast<JNIWeakRef *> (obj);
*************** void
*** 1713,1741 ****
  
  // Direct byte buffers.
  
! static jobject
! (JNICALL _Jv_JNI_NewDirectByteBuffer) (JNIEnv *, void *address, jlong length)
  {
    using namespace gnu::gcj;
    using namespace java::nio;
!   return new DirectByteBufferImpl (reinterpret_cast<RawData *> (address),
! 				   length);
  }
  
! static void *
! (JNICALL _Jv_JNI_GetDirectBufferAddress) (JNIEnv *, jobject buffer)
  {
    using namespace java::nio;
!   DirectByteBufferImpl* bb = static_cast<DirectByteBufferImpl *> (buffer);
!   return reinterpret_cast<void *> (bb->address);
  }
  
! static jlong
! (JNICALL _Jv_JNI_GetDirectBufferCapacity) (JNIEnv *, jobject buffer)
  {
    using namespace java::nio;
!   DirectByteBufferImpl* bb = static_cast<DirectByteBufferImpl *> (buffer);
!   return bb->capacity();
  }
  
  
--- 1737,1771 ----
  
  // Direct byte buffers.
  
! static jobject JNICALL
! _Jv_JNI_NewDirectByteBuffer (JNIEnv *, void *address, jlong length)
  {
    using namespace gnu::gcj;
    using namespace java::nio;
!   return new DirectByteBufferImpl$ReadWrite
!     (reinterpret_cast<RawData *> (address), length);
  }
  
! static void * JNICALL
! _Jv_JNI_GetDirectBufferAddress (JNIEnv *, jobject buffer)
  {
    using namespace java::nio;
!   if (! _Jv_IsInstanceOf (buffer, &Buffer::class$))
!     return NULL;
!   Buffer *tmp = static_cast<Buffer *> (buffer);
!   return reinterpret_cast<void *> (tmp->address);
  }
  
! static jlong JNICALL
! _Jv_JNI_GetDirectBufferCapacity (JNIEnv *, jobject buffer)
  {
    using namespace java::nio;
!   if (! _Jv_IsInstanceOf (buffer, &Buffer::class$))
!     return -1;
!   Buffer *tmp = static_cast<Buffer *> (buffer);
!   if (tmp->address == NULL)
!     return -1;
!   return tmp->capacity();
  }
  
  
*************** nathash_add (const JNINativeMethod *meth
*** 1850,1869 ****
      return;
    // FIXME
    slot->name = strdup (method->name);
!   slot->signature = strdup (method->signature);
    slot->fnPtr = method->fnPtr;
  }
  
! static jint
! (JNICALL _Jv_JNI_RegisterNatives) (JNIEnv *env, jclass klass,
! 			           const JNINativeMethod *methods,
! 			           jint nMethods)
  {
    // Synchronize while we do the work.  This must match
    // synchronization in some other functions that manipulate or use
    // the nathash table.
    JvSynchronize sync (global_ref_table);
  
    // Look at each descriptor given us, and find the corresponding
    // method in the class.
    for (int j = 0; j < nMethods; ++j)
--- 1880,1902 ----
      return;
    // FIXME
    slot->name = strdup (method->name);
!   // This was already strduped in _Jv_JNI_RegisterNatives.
!   slot->signature = method->signature;
    slot->fnPtr = method->fnPtr;
  }
  
! static jint JNICALL
! _Jv_JNI_RegisterNatives (JNIEnv *env, jclass klass,
! 			 const JNINativeMethod *methods,
! 			 jint nMethods)
  {
    // Synchronize while we do the work.  This must match
    // synchronization in some other functions that manipulate or use
    // the nathash table.
    JvSynchronize sync (global_ref_table);
  
+   JNINativeMethod dottedMethod;
+ 
    // Look at each descriptor given us, and find the corresponding
    // method in the class.
    for (int j = 0; j < nMethods; ++j)
*************** static jint
*** 1875,1890 ****
  	{
  	  _Jv_Method *self = &imeths[i];
  
! 	  if (! strcmp (self->name->data, methods[j].name)
! 	      && ! strcmp (self->signature->data, methods[j].signature))
  	    {
! 	      if (! (self->accflags
! 		     & java::lang::reflect::Modifier::NATIVE))
  		break;
  
  	      // Found a match that is native.
  	      found = true;
! 	      nathash_add (&methods[j]);
  
  	      break;
  	    }
--- 1908,1935 ----
  	{
  	  _Jv_Method *self = &imeths[i];
  
! 	  // Copy this JNINativeMethod and do a slash to dot
! 	  // conversion on the signature.
! 	  dottedMethod.name = methods[j].name;
! 	  dottedMethod.signature = strdup (methods[j].signature);
! 	  dottedMethod.fnPtr = methods[j].fnPtr;
! 	  char *c = dottedMethod.signature;
! 	  while (*c)
  	    {
! 	      if (*c == '/')
! 		*c = '.';
! 	      c++;
! 	    }
! 
! 	  if (! strcmp (self->name->chars (), dottedMethod.name)
! 	      && ! strcmp (self->signature->chars (), dottedMethod.signature))
! 	    {
! 	      if (! (self->accflags & java::lang::reflect::Modifier::NATIVE))
  		break;
  
  	      // Found a match that is native.
  	      found = true;
! 	      nathash_add (&dottedMethod);
  
  	      break;
  	    }
*************** static jint
*** 1895,1901 ****
  	  jstring m = JvNewStringUTF (methods[j].name);
  	  try
  	    {
! 	      env->ex =new java::lang::NoSuchMethodError (m);
  	    }
  	  catch (jthrowable t)
  	    {
--- 1940,1946 ----
  	  jstring m = JvNewStringUTF (methods[j].name);
  	  try
  	    {
! 	      env->ex = new java::lang::NoSuchMethodError (m);
  	    }
  	  catch (jthrowable t)
  	    {
*************** static jint
*** 1908,1915 ****
    return JNI_OK;
  }
  
! static jint
! (JNICALL _Jv_JNI_UnregisterNatives) (JNIEnv *, jclass)
  {
    // FIXME -- we could implement this.
    return JNI_ERR;
--- 1953,1960 ----
    return JNI_OK;
  }
  
! static jint JNICALL
! _Jv_JNI_UnregisterNatives (JNIEnv *, jclass)
  {
    // FIXME -- we could implement this.
    return JNI_ERR;
*************** mangled_name (jclass klass, _Jv_Utf8Cons
*** 1980,1987 ****
    // Don't use add_char because we need a literal `_'.
    buf[here++] = '_';
  
!   const unsigned char *fn = (const unsigned char *) func_name->data;
!   const unsigned char *limit = fn + func_name->length;
    for (int i = 0; ; ++i)
      {
        int ch = UTF8_GET (fn, limit);
--- 2025,2032 ----
    // Don't use add_char because we need a literal `_'.
    buf[here++] = '_';
  
!   const unsigned char *fn = (const unsigned char *) func_name->chars ();
!   const unsigned char *limit = fn + func_name->len ();
    for (int i = 0; ; ++i)
      {
        int ch = UTF8_GET (fn, limit);
*************** mangled_name (jclass klass, _Jv_Utf8Cons
*** 1995,2002 ****
    buf[here++] = '_';
    buf[here++] = '_';
  
!   const unsigned char *sig = (const unsigned char *) signature->data;
!   limit = sig + signature->length;
    JvAssert (sig[0] == '(');
    ++sig;
    while (1)
--- 2040,2047 ----
    buf[here++] = '_';
    buf[here++] = '_';
  
!   const unsigned char *sig = (const unsigned char *) signature->chars ();
!   limit = sig + signature->len ();
    JvAssert (sig[0] == '(');
    ++sig;
    while (1)
*************** extern "C" JNIEnv *
*** 2017,2023 ****
  _Jv_GetJNIEnvNewFrame (jclass klass)
  {
    JNIEnv *env = _Jv_GetCurrentJNIEnv ();
!   if (env == NULL)
      {
        env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv));
        env->p = &_Jv_JNIFunctions;
--- 2062,2068 ----
  _Jv_GetJNIEnvNewFrame (jclass klass)
  {
    JNIEnv *env = _Jv_GetCurrentJNIEnv ();
!   if (__builtin_expect (env == NULL, false))
      {
        env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv));
        env->p = &_Jv_JNIFunctions;
*************** _Jv_GetJNIEnvNewFrame (jclass klass)
*** 2025,2059 ****
        env->locals = NULL;
        // We set env->ex below.
  
        _Jv_SetCurrentJNIEnv (env);
      }
  
!   _Jv_JNI_LocalFrame *frame
!     = (_Jv_JNI_LocalFrame *) _Jv_MallocUnchecked (sizeof (_Jv_JNI_LocalFrame)
! 						  + (FRAME_SIZE
! 						     * sizeof (jobject)));
  
!   frame->marker = MARK_SYSTEM;
!   frame->size = FRAME_SIZE;
!   frame->next = env->locals;
  
!   for (int i = 0; i < frame->size; ++i)
!     frame->vec[i] = NULL;
  
-   env->locals = frame;
    env->ex = NULL;
  
    return env;
  }
  
  // Return the function which implements a particular JNI method.  If
  // we can't find the function, we throw the appropriate exception.
  // This is `extern "C"' because the compiler uses it.
  extern "C" void *
  _Jv_LookupJNIMethod (jclass klass, _Jv_Utf8Const *name,
! 		     _Jv_Utf8Const *signature, int args_size)
  {
!   char buf[10 + 6 * (name->length + signature->length) + 12];
    int long_start;
    void *function;
  
--- 2070,2149 ----
        env->locals = NULL;
        // We set env->ex below.
  
+       // Set up the bottom, reusable frame.
+       env->bottom_locals = (_Jv_JNI_LocalFrame *) 
+ 	_Jv_MallocUnchecked (sizeof (_Jv_JNI_LocalFrame)
+ 			     + (FRAME_SIZE
+ 				* sizeof (jobject)));
+       
+       env->bottom_locals->marker = MARK_SYSTEM;
+       env->bottom_locals->size = FRAME_SIZE;
+       env->bottom_locals->next = NULL;
+       env->bottom_locals->allocated_p = 0;
+       memset (&env->bottom_locals->vec[0], 0, 
+ 	      env->bottom_locals->size * sizeof (jobject));
+ 
        _Jv_SetCurrentJNIEnv (env);
      }
  
!   // If we're in a simple JNI call (non-nested), we can just reuse the
!   // locals frame we allocated many calls ago, back when the env was first
!   // built, above.
  
!   if (__builtin_expect (env->locals == NULL, true))
!     env->locals = env->bottom_locals;
  
!   else
!     {
!       // Alternatively, we might be re-entering JNI, in which case we can't
!       // reuse the bottom_locals frame, because it is already underneath
!       // us. So we need to make a new one.
! 
!       _Jv_JNI_LocalFrame *frame
! 	= (_Jv_JNI_LocalFrame *) _Jv_MallocUnchecked (sizeof (_Jv_JNI_LocalFrame)
! 						      + (FRAME_SIZE
! 							 * sizeof (jobject)));
!       
!       frame->marker = MARK_SYSTEM;
!       frame->size = FRAME_SIZE;
!       frame->allocated_p = 0;
!       frame->next = env->locals;
! 
!       memset (&frame->vec[0], 0, 
! 	      frame->size * sizeof (jobject));
! 
!       env->locals = frame;
!     }
  
    env->ex = NULL;
  
    return env;
  }
  
+ // Destroy the env's reusable resources. This is called from the thread
+ // destructor "finalize_native" in natThread.cc
+ void 
+ _Jv_FreeJNIEnv (_Jv_JNIEnv *env)
+ {
+   if (env == NULL)
+     return;
+ 
+   if (env->bottom_locals != NULL)
+     _Jv_Free (env->bottom_locals);
+ 
+   _Jv_Free (env);
+ }
+ 
  // Return the function which implements a particular JNI method.  If
  // we can't find the function, we throw the appropriate exception.
  // This is `extern "C"' because the compiler uses it.
  extern "C" void *
  _Jv_LookupJNIMethod (jclass klass, _Jv_Utf8Const *name,
! 		     _Jv_Utf8Const *signature, MAYBE_UNUSED int args_size)
  {
!   int name_length = name->len();
!   int sig_length = signature->len();
!   char buf[10 + 6 * (name_length + sig_length) + 12];
    int long_start;
    void *function;
  
*************** _Jv_LookupJNIMethod (jclass klass, _Jv_U
*** 2061,2073 ****
    JvSynchronize sync (global_ref_table);
  
    // First see if we have an override in the hash table.
!   strncpy (buf, name->data, name->length);
!   buf[name->length] = '\0';
!   strncpy (buf + name->length + 1, signature->data, signature->length);
!   buf[name->length + signature->length + 1] = '\0';
    JNINativeMethod meth;
    meth.name = buf;
!   meth.signature = buf + name->length + 1;
    function = nathash_find (&meth);
    if (function != NULL)
      return function;
--- 2151,2163 ----
    JvSynchronize sync (global_ref_table);
  
    // First see if we have an override in the hash table.
!   strncpy (buf, name->chars (), name_length);
!   buf[name_length] = '\0';
!   strncpy (buf + name_length + 1, signature->chars (), sig_length);
!   buf[name_length + sig_length + 1] = '\0';
    JNINativeMethod meth;
    meth.name = buf;
!   meth.signature = buf + name_length + 1;
    function = nathash_find (&meth);
    if (function != NULL)
      return function;
*************** _Jv_LookupJNIMethod (jclass klass, _Jv_U
*** 2134,2140 ****
            if (function == NULL)
  #endif /* WIN32 */
              {
!               jstring str = JvNewStringUTF (name->data);
                throw new java::lang::UnsatisfiedLinkError (str);
              }
  	}
--- 2224,2230 ----
            if (function == NULL)
  #endif /* WIN32 */
              {
!               jstring str = JvNewStringUTF (name->chars ());
                throw new java::lang::UnsatisfiedLinkError (str);
              }
  	}
*************** _Jv_JNIMethod::call (ffi_cif *, void *re
*** 2207,2214 ****
--- 2297,2309 ----
    memcpy (&real_args[offset], args, _this->args_raw_size);
  
    // The actual call to the JNI function.
+ #if FFI_NATIVE_RAW_API
    ffi_raw_call (&_this->jni_cif, (void (*)()) _this->function,
  		ret, real_args);
+ #else
+   ffi_java_raw_call (&_this->jni_cif, (void (*)()) _this->function,
+ 		     ret, real_args);
+ #endif
  
    if (sync != NULL)
      _Jv_MonitorExit (sync);
*************** _Jv_JNI_AttachCurrentThread (JavaVM *, j
*** 2254,2269 ****
    env->p = &_Jv_JNIFunctions;
    env->ex = NULL;
    env->klass = NULL;
!   env->locals
      = (_Jv_JNI_LocalFrame *) _Jv_MallocUnchecked (sizeof (_Jv_JNI_LocalFrame)
  						  + (FRAME_SIZE
  						     * sizeof (jobject)));
    if (env->locals == NULL)
      {
        _Jv_Free (env);
        return JNI_ERR;
      }
  
    env->locals->marker = MARK_SYSTEM;
    env->locals->size = FRAME_SIZE;
    env->locals->next = NULL;
--- 2349,2366 ----
    env->p = &_Jv_JNIFunctions;
    env->ex = NULL;
    env->klass = NULL;
!   env->bottom_locals
      = (_Jv_JNI_LocalFrame *) _Jv_MallocUnchecked (sizeof (_Jv_JNI_LocalFrame)
  						  + (FRAME_SIZE
  						     * sizeof (jobject)));
+   env->locals = env->bottom_locals;
    if (env->locals == NULL)
      {
        _Jv_Free (env);
        return JNI_ERR;
      }
  
+   env->locals->allocated_p = 0;
    env->locals->marker = MARK_SYSTEM;
    env->locals->size = FRAME_SIZE;
    env->locals->next = NULL;
*************** _Jv_JNI_AttachCurrentThread (JavaVM *, j
*** 2295,2315 ****
  }
  
  // This is the one actually used by JNI.
! static jint
! (JNICALL _Jv_JNI_AttachCurrentThread) (JavaVM *vm, void **penv, void *args)
  {
    return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args, false);
  }
  
! static jint
! (JNICALL _Jv_JNI_AttachCurrentThreadAsDaemon) (JavaVM *vm, void **penv, 
!                                                void *args)
  {
    return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args, true);
  }
  
! static jint
! (JNICALL _Jv_JNI_DestroyJavaVM) (JavaVM *vm)
  {
    JvAssert (the_vm && vm == the_vm);
  
--- 2392,2412 ----
  }
  
  // This is the one actually used by JNI.
! static jint JNICALL
! _Jv_JNI_AttachCurrentThread (JavaVM *vm, void **penv, void *args)
  {
    return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args, false);
  }
  
! static jint JNICALL
! _Jv_JNI_AttachCurrentThreadAsDaemon (JavaVM *vm, void **penv, 
! 				     void *args)
  {
    return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args, true);
  }
  
! static jint JNICALL
! _Jv_JNI_DestroyJavaVM (JavaVM *vm)
  {
    JvAssert (the_vm && vm == the_vm);
  
*************** static jint
*** 2342,2356 ****
    return JNI_ERR;
  }
  
! jint
! (JNICALL _Jv_JNI_DetachCurrentThread) (JavaVM *)
  {
    jint code = _Jv_DetachCurrentThread ();
    return code  ? JNI_EDETACHED : 0;
  }
  
! static jint
! (JNICALL _Jv_JNI_GetEnv) (JavaVM *, void **penv, jint version)
  {
    if (_Jv_ThreadCurrent () == NULL)
      {
--- 2439,2453 ----
    return JNI_ERR;
  }
  
! jint JNICALL
! _Jv_JNI_DetachCurrentThread (JavaVM *)
  {
    jint code = _Jv_DetachCurrentThread ();
    return code  ? JNI_EDETACHED : 0;
  }
  
! static jint JNICALL
! _Jv_JNI_GetEnv (JavaVM *, void **penv, jint version)
  {
    if (_Jv_ThreadCurrent () == NULL)
      {
*************** JNI_CreateJavaVM (JavaVM **vm, void **pe
*** 2401,2407 ****
  {
    JvAssert (! the_vm);
  
!   _Jv_CreateJavaVM (NULL);
  
    // FIXME: synchronize
    JavaVM *nvm = (JavaVM *) _Jv_MallocUnchecked (sizeof (JavaVM));
--- 2498,2513 ----
  {
    JvAssert (! the_vm);
  
!   jint version = * (jint *) args;
!   // We only support 1.2 and 1.4.
!   if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4)
!     return JNI_EVERSION;
! 
!   JvVMInitArgs* vm_args = reinterpret_cast<JvVMInitArgs *> (args);
! 
!   jint result = _Jv_CreateJavaVM (vm_args);
!   if (result)
!     return result;
  
    // FIXME: synchronize
    JavaVM *nvm = (JavaVM *) _Jv_MallocUnchecked (sizeof (JavaVM));
*************** JNI_CreateJavaVM (JavaVM **vm, void **pe
*** 2409,2456 ****
      return JNI_ERR;
    nvm->functions = &_Jv_JNI_InvokeFunctions;
  
-   // Parse the arguments.
-   if (args != NULL)
-     {
-       jint version = * (jint *) args;
-       // We only support 1.2 and 1.4.
-       if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4)
- 	return JNI_EVERSION;
-       JavaVMInitArgs *ia = reinterpret_cast<JavaVMInitArgs *> (args);
-       for (int i = 0; i < ia->nOptions; ++i)
- 	{
- 	  if (! strcmp (ia->options[i].optionString, "vfprintf")
- 	      || ! strcmp (ia->options[i].optionString, "exit")
- 	      || ! strcmp (ia->options[i].optionString, "abort"))
- 	    {
- 	      // We are required to recognize these, but for now we
- 	      // don't handle them in any way.  FIXME.
- 	      continue;
- 	    }
- 	  else if (! strncmp (ia->options[i].optionString,
- 			      "-verbose", sizeof ("-verbose") - 1))
- 	    {
- 	      // We don't do anything with this option either.  We
- 	      // might want to make sure the argument is valid, but we
- 	      // don't really care all that much for now.
- 	      continue;
- 	    }
- 	  else if (! strncmp (ia->options[i].optionString, "-D", 2))
- 	    {
- 	      // FIXME.
- 	      continue;
- 	    }
- 	  else if (ia->ignoreUnrecognized)
- 	    {
- 	      if (ia->options[i].optionString[0] == '_'
- 		  || ! strncmp (ia->options[i].optionString, "-X", 2))
- 		continue;
- 	    }
- 
- 	  return JNI_ERR;
- 	}
-     }
- 
    jint r =_Jv_JNI_AttachCurrentThread (nvm, penv, NULL);
    if (r < 0)
      return r;
--- 2515,2520 ----
*************** _Jv_GetJavaVM ()
*** 2501,2508 ****
    return the_vm;
  }
  
! static jint
! (JNICALL _Jv_JNI_GetJavaVM) (JNIEnv *, JavaVM **vm)
  {
    *vm = _Jv_GetJavaVM ();
    return *vm == NULL ? JNI_ERR : JNI_OK;
--- 2565,2572 ----
    return the_vm;
  }
  
! static jint JNICALL
! _Jv_JNI_GetJavaVM (JNIEnv *, JavaVM **vm)
  {
    *vm = _Jv_GetJavaVM ();
    return *vm == NULL ? JNI_ERR : JNI_OK;
diff -Nrcpad gcc-3.4.3/libjava/libart.m4 gcc-4.0.0/libjava/libart.m4
*** gcc-3.4.3/libjava/libart.m4	Mon Aug  4 18:27:27 2003
--- gcc-4.0.0/libjava/libart.m4	Thu Jan  1 00:00:00 1970
***************
*** 1,168 ****
- # Configure paths for LIBART
- # Raph Levien 98-11-18
- # stolen from Manish Singh    98-9-30
- # stolen back from Frank Belew
- # stolen from Manish Singh
- # Shamelessly stolen from Owen Taylor
- 
- dnl AM_PATH_LIBART([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
- dnl Test for LIBART, and define LIBART_CFLAGS and LIBART_LIBS
- dnl
- AC_DEFUN(AM_PATH_LIBART,
- [dnl 
- dnl Get the cflags and libraries from the libart-config script
- dnl
- AC_ARG_WITH(libart-prefix,[  --with-libart-prefix=PFX   Prefix where LIBART is installed (optional)],
-             libart_prefix="$withval", libart_prefix="")
- AC_ARG_WITH(libart-exec-prefix,[  --with-libart-exec-prefix=PFX Exec prefix where LIBART is installed (optional)],
-             libart_exec_prefix="$withval", libart_exec_prefix="")
- AC_ARG_ENABLE(libarttest, [  --disable-libarttest       Do not try to compile and run a test LIBART program],
- 		    , enable_libarttest=yes)
- 
-   if test x$libart_exec_prefix != x ; then
-      libart_args="$libart_args --exec-prefix=$libart_exec_prefix"
-      if test x${LIBART_CONFIG+set} != xset ; then
-         LIBART_CONFIG=$libart_exec_prefix/bin/libart-config
-      fi
-   fi
-   if test x$libart_prefix != x ; then
-      libart_args="$libart_args --prefix=$libart_prefix"
-      if test x${LIBART_CONFIG+set} != xset ; then
-         LIBART_CONFIG=$libart_prefix/bin/libart-config
-      fi
-   fi
- 
-   AC_PATH_PROG(LIBART_CONFIG, libart2-config, no)
-   if test "$LIBART_CONFIG" = "no" ; then
-     AC_PATH_PROG(LIBART_CONFIG, libart-config, no)
-   fi
-   min_libart_version=ifelse([$1], ,0.2.5,$1)
-   AC_MSG_CHECKING(for LIBART - version >= $min_libart_version)
-   no_libart=""
-   if test "$LIBART_CONFIG" = "no" ; then
-     no_libart=yes
-   else
-     LIBART_CFLAGS=`$LIBART_CONFIG $libartconf_args --cflags`
-     LIBART_LIBS=`$LIBART_CONFIG $libartconf_args --libs`
- 
-     libart_major_version=`$LIBART_CONFIG $libart_args --version | \
-            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-     libart_minor_version=`$LIBART_CONFIG $libart_args --version | \
-            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-     libart_micro_version=`$LIBART_CONFIG $libart_config_args --version | \
-            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-     if test "x$enable_libarttest" = "xyes" ; then
-       ac_save_CFLAGS="$CFLAGS"
-       ac_save_LIBS="$LIBS"
-       CFLAGS="$CFLAGS $LIBART_CFLAGS"
-       LIBS="$LIBS $LIBART_LIBS"
- dnl
- dnl Now check if the installed LIBART is sufficiently new. (Also sanity
- dnl checks the results of libart-config to some extent
- dnl
-       rm -f conf.libarttest
-       AC_TRY_RUN([
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <libart_lgpl/libart.h>
- 
- char*
- my_strdup (char *str)
- {
-   char *new_str;
-   
-   if (str)
-     {
-       new_str = malloc ((strlen (str) + 1) * sizeof(char));
-       strcpy (new_str, str);
-     }
-   else
-     new_str = NULL;
-   
-   return new_str;
- }
- 
- int main ()
- {
-   int major, minor, micro;
-   char *tmp_version;
- 
-   system ("touch conf.libarttest");
- 
-   /* HP/UX 9 (%@#!) writes to sscanf strings */
-   tmp_version = my_strdup("$min_libart_version");
-   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-      printf("%s, bad version string\n", "$min_libart_version");
-      exit(1);
-    }
- 
-    if (($libart_major_version > major) ||
-       (($libart_major_version == major) && ($libart_minor_version > minor)) ||
-       (($libart_major_version == major) && ($libart_minor_version == minor) && ($libart_micro_version >= micro)))
-     {
-       return 0;
-     }
-   else
-     {
-       printf("\n*** 'libart-config --version' returned %d.%d.%d, but the minimum version\n", $libart_major_version, $libart_minor_version, $libart_micro_version);
-       printf("*** of LIBART required is %d.%d.%d. If libart-config is correct, then it is\n", major, minor, micro);
-       printf("*** best to upgrade to the required version.\n");
-       printf("*** If libart-config was wrong, set the environment variable LIBART_CONFIG\n");
-       printf("*** to point to the correct copy of libart-config, and remove the file\n");
-       printf("*** config.cache before re-running configure\n");
-       return 1;
-     }
- }
- 
- ],, no_libart=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-        CFLAGS="$ac_save_CFLAGS"
-        LIBS="$ac_save_LIBS"
-      fi
-   fi
-   if test "x$no_libart" = x ; then
-      AC_MSG_RESULT(yes)
-      ifelse([$2], , :, [$2])     
-   else
-      AC_MSG_RESULT(no)
-      if test "$LIBART_CONFIG" = "no" ; then
-        echo "*** The libart-config script installed by LIBART could not be found"
-        echo "*** If LIBART was installed in PREFIX, make sure PREFIX/bin is in"
-        echo "*** your path, or set the LIBART_CONFIG environment variable to the"
-        echo "*** full path to libart-config."
-      else
-        if test -f conf.libarttest ; then
-         :
-        else
-           echo "*** Could not run LIBART test program, checking why..."
-           CFLAGS="$CFLAGS $LIBART_CFLAGS"
-           LIBS="$LIBS $LIBART_LIBS"
-           AC_TRY_LINK([
- #include <stdio.h>
- #include <libart_lgpl/libart.h>
- ],      [ return 0; ],
-         [ echo "*** The test program compiled, but did not run. This usually means"
-           echo "*** that the run-time linker is not finding LIBART or finding the wrong"
-           echo "*** version of LIBART. If it is not finding LIBART, you'll need to set your"
-           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-           echo "*** is required on your system"
- 	  echo "***"
-           echo "*** If you have an old version installed, it is best to remove it, although"
-           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
-         [ echo "*** The test program failed to compile or link. See the file config.log for the"
-           echo "*** exact error that occured. This usually means LIBART was incorrectly installed"
-           echo "*** or that you have moved LIBART since it was installed. In the latter case, you"
-           echo "*** may want to edit the libart-config script: $LIBART_CONFIG" ])
-           CFLAGS="$ac_save_CFLAGS"
-           LIBS="$ac_save_LIBS"
-        fi
-      fi
-      LIBART_CFLAGS=""
-      LIBART_LIBS=""
-      ifelse([$3], , :, [$3])
-   fi
-   AC_SUBST(LIBART_CFLAGS)
-   AC_SUBST(LIBART_LIBS)
-   rm -f conf.libarttest
- ])
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/libltdl/ChangeLog gcc-4.0.0/libjava/libltdl/ChangeLog
*** gcc-3.4.3/libjava/libltdl/ChangeLog	Fri Nov  5 03:34:42 2004
--- gcc-4.0.0/libjava/libltdl/ChangeLog	Thu Apr 21 05:20:27 2005
***************
*** 1,20 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
! 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
! 2004-02-22  Matthias Klose  <doko@debian.org>
  
  	* config.guess: Update from version 2003-10-07 to 2004-02-16.
  	* config.sub: Update from version 2003-10-07 to 2004-02-16.
--- 1,39 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
! 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
  
! 	* Makefile.in: Regenrate with Automake 1.9.3.
! 	* aclocal.m4: Likewise.
! 	* configure: Regenerate.
  
! 2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
  
! 	* Makefile.in: Regenerate with Automake 1.8.5.
! 	* aclocal.m4: Likewise.
! 	* configure: Regenerate.
  
! 2004-05-03  Andreas Tobler  <a.tobler@schweiz.ch>
  
! 	* acinclude.m4: Replace -W with more speaking -Wextra.
! 	* aclocal.m4: Regenerate.
! 	* configure: Regenerate.
  
! 2004-03-10  Kelley Cook  <kcook@gcc.gnu.org>
! 
! 	* configure.ac: Bump AC_PREREQ to 2.59.
! 	* configure: Regenerate.
! 	* config-h.in: Regenerate.
! 
! 2004-02-22  Zack Weinberg <zack@codesourcery.com>
! 	    Nathanael Nerode <neroden@twcny.rr.com>
! 	    Alexandre Oliva <aoliva@redhat.com>
! 
! 	* config.sub, config.guess: Replace with forwarding scripts
! 	which invoke the master copies in the top level.
! 
! 2004-02-20  Andrew Cagney  <cagney@redhat.com>
  
  	* config.guess: Update from version 2003-10-07 to 2004-02-16.
  	* config.sub: Update from version 2003-10-07 to 2004-02-16.
***************
*** 22,28 ****
  2003-08-07  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
  	* configure.in: Don't initialize GCINCS to boehm-gc/include.
! 	* Regenerate.	
  
  2002-04-28  Mark Mitchell  <mark@codesourcery.com>
  
--- 41,47 ----
  2003-08-07  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
  
  	* configure.in: Don't initialize GCINCS to boehm-gc/include.
! 	* Regenerate.
  
  2002-04-28  Mark Mitchell  <mark@codesourcery.com>
  
diff -Nrcpad gcc-3.4.3/libjava/libltdl/Makefile.in gcc-4.0.0/libjava/libltdl/Makefile.in
*** gcc-3.4.3/libjava/libltdl/Makefile.in	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/libjava/libltdl/Makefile.in	Thu Apr 21 07:04:10 2005
***************
*** 1,8 ****
! # Makefile.in generated by automake 1.7.9 from Makefile.am.
  # @configure_input@
  
! # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
! # 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.
--- 1,8 ----
! # 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.
***************
*** 14,19 ****
--- 14,22 ----
  
  @SET_MAKE@
  
+ 
+ SOURCES = $(libltdl_la_SOURCES) $(libltdlc_la_SOURCES)
+ 
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
*************** pkgdatadir = $(datadir)/@PACKAGE@
*** 21,27 ****
  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
--- 24,29 ----
*************** POST_INSTALL = :
*** 35,41 ****
--- 37,107 ----
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
+ build_triplet = @build@
  host_triplet = @host@
+ DIST_COMMON = README $(am__configure_deps) $(am__include_HEADERS_DIST) \
+ 	$(am__noinst_HEADERS_DIST) $(srcdir)/Makefile.am \
+ 	$(srcdir)/Makefile.in $(srcdir)/config-h.in \
+ 	$(top_srcdir)/configure COPYING.LIB ChangeLog config.guess \
+ 	config.sub install-sh ltmain.sh missing mkinstalldirs
+ subdir = .
+ 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 \
+  configure.lineno configure.status.lineno
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_CLEAN_FILES = config.h
+ 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)$(libdir)" "$(DESTDIR)$(includedir)"
+ libLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
+ am__DEPENDENCIES_1 =
+ libltdl_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+ am_libltdl_la_OBJECTS = ltdl.lo
+ libltdl_la_OBJECTS = $(am_libltdl_la_OBJECTS)
+ @INSTALL_LTDL_TRUE@am_libltdl_la_rpath = -rpath $(libdir)
+ libltdlc_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+ am_libltdlc_la_OBJECTS = ltdl.lo
+ libltdlc_la_OBJECTS = $(am_libltdlc_la_OBJECTS)
+ @CONVENIENCE_LTDL_TRUE@am_libltdlc_la_rpath =
+ DEFAULT_INCLUDES = -I. -I$(srcdir)
+ depcomp =
+ am__depfiles_maybe =
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ 	$(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+ LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+ SOURCES = $(libltdl_la_SOURCES) $(libltdlc_la_SOURCES)
+ DIST_SOURCES = $(libltdl_la_SOURCES) $(libltdlc_la_SOURCES)
+ am__include_HEADERS_DIST = ltdl.h
+ includeHEADERS_INSTALL = $(INSTALL_HEADER)
+ am__noinst_HEADERS_DIST = ltdl.h
+ HEADERS = $(include_HEADERS) $(noinst_HEADERS)
+ 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@
*************** am__fastdepCXX_TRUE = @am__fastdepCXX_TR
*** 117,122 ****
--- 183,190 ----
  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@
*************** libdir = @libdir@
*** 137,142 ****
--- 205,211 ----
  libexecdir = @libexecdir@
  localstatedir = @localstatedir@
  mandir = @mandir@
+ mkdir_p = @mkdir_p@
  oldincludedir = @oldincludedir@
  prefix = @prefix@
  program_transform_name = @program_transform_name@
*************** sbindir = @sbindir@
*** 144,266 ****
  sharedstatedir = @sharedstatedir@
  sysconfdir = @sysconfdir@
  target_alias = @target_alias@
- 
  AUTOMAKE_OPTIONS = no-dependencies foreign
- 
  INCLUDES = $(GCINCS)
- 
  @INSTALL_LTDL_TRUE@include_HEADERS = ltdl.h
  @INSTALL_LTDL_TRUE@lib_LTLIBRARIES = libltdl.la
  @INSTALL_LTDL_FALSE@noinst_HEADERS = ltdl.h
- 
  @CONVENIENCE_LTDL_TRUE@noinst_LTLIBRARIES = libltdlc.la
- 
  CLEANFILES = libltdl.la libltdlc.la
- 
  libltdl_la_SOURCES = ltdl.c
  libltdl_la_LDFLAGS = -no-undefined -version-info 4:0:1
  libltdl_la_LIBADD = $(LIBADD_DL)
- 
  libltdlc_la_SOURCES = ltdl.c
  libltdlc_la_LIBADD = $(LIBADD_DL)
! subdir = .
! ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
! CONFIG_HEADER = config.h
! CONFIG_CLEAN_FILES =
! LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
! 
! libltdl_la_DEPENDENCIES =
! am_libltdl_la_OBJECTS = ltdl.lo
! libltdl_la_OBJECTS = $(am_libltdl_la_OBJECTS)
! libltdlc_la_LDFLAGS =
! libltdlc_la_DEPENDENCIES =
! am_libltdlc_la_OBJECTS = ltdl.lo
! libltdlc_la_OBJECTS = $(am_libltdlc_la_OBJECTS)
! 
! DEFAULT_INCLUDES =  -I. -I$(srcdir) -I.
! depcomp =
! am__depfiles_maybe =
! COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
! 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
! 	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
! CCLD = $(CC)
! LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
! 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
! DIST_SOURCES = $(libltdl_la_SOURCES) $(libltdlc_la_SOURCES)
! HEADERS = $(include_HEADERS) $(noinst_HEADERS)
! 
! DIST_COMMON = README $(include_HEADERS) $(noinst_HEADERS) \
! 	$(srcdir)/Makefile.in $(srcdir)/configure COPYING.LIB ChangeLog \
! 	Makefile.am acinclude.m4 aclocal.m4 config-h.in config.guess \
! 	config.sub configure configure.ac install-sh ltmain.sh missing \
! 	mkinstalldirs
! SOURCES = $(libltdl_la_SOURCES) $(libltdlc_la_SOURCES)
! 
! all: config.h
! 	$(MAKE) $(AM_MAKEFLAGS) all-am
  
  .SUFFIXES:
  .SUFFIXES: .c .lo .o .obj
! 
! am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
!  configure.lineno
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
  	cd $(top_srcdir) && \
  	  $(AUTOMAKE) --foreign  Makefile
! Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
! 	cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
  
! $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
  	$(SHELL) ./config.status --recheck
- $(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
- 	cd $(srcdir) && $(AUTOCONF)
  
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.ac acinclude.m4
  	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
! 
! 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 config.h
! 
! $(srcdir)/config-h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOHEADER)
! 	touch $(srcdir)/config-h.in
! 
! distclean-hdr:
! 	-rm -f config.h stamp-h1
! libLTLIBRARIES_INSTALL = $(INSTALL)
  install-libLTLIBRARIES: $(lib_LTLIBRARIES)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(libdir)
  	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
  	  if test -f $$p; then \
! 	    f="`echo $$p | sed -e 's|^.*/||'`"; \
! 	    echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f"; \
! 	    $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f; \
  	  else :; fi; \
  	done
  
  uninstall-libLTLIBRARIES:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
! 	    p="`echo $$p | sed -e 's|^.*/||'`"; \
! 	  echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \
! 	  $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
  	done
  
  clean-libLTLIBRARIES:
  	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
  	@list='$(lib_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
--- 213,293 ----
  sharedstatedir = @sharedstatedir@
  sysconfdir = @sysconfdir@
  target_alias = @target_alias@
  AUTOMAKE_OPTIONS = no-dependencies foreign
  INCLUDES = $(GCINCS)
  @INSTALL_LTDL_TRUE@include_HEADERS = ltdl.h
  @INSTALL_LTDL_TRUE@lib_LTLIBRARIES = libltdl.la
  @INSTALL_LTDL_FALSE@noinst_HEADERS = ltdl.h
  @CONVENIENCE_LTDL_TRUE@noinst_LTLIBRARIES = libltdlc.la
  CLEANFILES = libltdl.la libltdlc.la
  libltdl_la_SOURCES = ltdl.c
  libltdl_la_LDFLAGS = -no-undefined -version-info 4:0:1
  libltdl_la_LIBADD = $(LIBADD_DL)
  libltdlc_la_SOURCES = ltdl.c
  libltdlc_la_LIBADD = $(LIBADD_DL)
! all: all-am
  
  .SUFFIXES:
  .SUFFIXES: .c .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*) \
! 	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
! 	      cd $(srcdir) && $(AUTOMAKE) --foreign  \
! 		&& exit 0; \
! 	      exit 1;; \
! 	  esac; \
! 	done; \
! 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
  	cd $(top_srcdir) && \
  	  $(AUTOMAKE) --foreign  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)
! config.h: $(top_builddir)/config.status $(srcdir)/config-h.in
! 	cd $(top_builddir) && $(SHELL) ./config.status $@
  install-libLTLIBRARIES: $(lib_LTLIBRARIES)
  	@$(NORMAL_INSTALL)
! 	test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
  	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
  	  if test -f $$p; then \
! 	    f=$(am__strip_dir) \
! 	    echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
! 	    $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
  	  else :; fi; \
  	done
  
  uninstall-libLTLIBRARIES:
  	@$(NORMAL_UNINSTALL)
! 	@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
! 	  p=$(am__strip_dir) \
! 	  echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
! 	  $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
  	done
  
  clean-libLTLIBRARIES:
  	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
  	@list='$(lib_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
*************** clean-noinstLTLIBRARIES:
*** 269,297 ****
  	-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
  libltdl.la: $(libltdl_la_OBJECTS) $(libltdl_la_DEPENDENCIES) 
! 	$(LINK) -rpath $(libdir) $(libltdl_la_LDFLAGS) $(libltdl_la_OBJECTS) $(libltdl_la_LIBADD) $(LIBS)
  libltdlc.la: $(libltdlc_la_OBJECTS) $(libltdlc_la_DEPENDENCIES) 
! 	$(LINK)  $(libltdlc_la_LDFLAGS) $(libltdlc_la_OBJECTS) $(libltdlc_la_LIBADD) $(LIBS)
  
  mostlyclean-compile:
! 	-rm -f *.$(OBJEXT) core *.core
  
  distclean-compile:
  	-rm -f *.tab.c
  
  .c.o:
! 	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
  
  .c.obj:
! 	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
  
  .c.lo:
! 	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
  
  mostlyclean-libtool:
  	-rm -f *.lo
--- 296,324 ----
  	-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
  libltdl.la: $(libltdl_la_OBJECTS) $(libltdl_la_DEPENDENCIES) 
! 	$(LINK) $(am_libltdl_la_rpath) $(libltdl_la_LDFLAGS) $(libltdl_la_OBJECTS) $(libltdl_la_LIBADD) $(LIBS)
  libltdlc.la: $(libltdlc_la_OBJECTS) $(libltdlc_la_DEPENDENCIES) 
! 	$(LINK) $(am_libltdlc_la_rpath) $(libltdlc_la_LDFLAGS) $(libltdlc_la_OBJECTS) $(libltdlc_la_LIBADD) $(LIBS)
  
  mostlyclean-compile:
! 	-rm -f *.$(OBJEXT)
  
  distclean-compile:
  	-rm -f *.tab.c
  
  .c.o:
! 	$(COMPILE) -c $<
  
  .c.obj:
! 	$(COMPILE) -c `$(CYGPATH_W) '$<'`
  
  .c.lo:
! 	$(LTCOMPILE) -c -o $@ $<
  
  mostlyclean-libtool:
  	-rm -f *.lo
*************** clean-libtool:
*** 302,334 ****
  distclean-libtool:
  	-rm -f libtool
  uninstall-info-am:
- includeHEADERS_INSTALL = $(INSTALL_HEADER)
  install-includeHEADERS: $(include_HEADERS)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(includedir)
  	@list='$(include_HEADERS)'; for p in $$list; do \
  	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f="`echo $$p | sed -e 's|^.*/||'`"; \
! 	  echo " $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f"; \
! 	  $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f; \
  	done
  
  uninstall-includeHEADERS:
  	@$(NORMAL_UNINSTALL)
  	@list='$(include_HEADERS)'; for p in $$list; do \
! 	  f="`echo $$p | sed -e 's|^.*/||'`"; \
! 	  echo " rm -f $(DESTDIR)$(includedir)/$$f"; \
! 	  rm -f $(DESTDIR)$(includedir)/$$f; \
  	done
  
- ETAGS = etags
- ETAGSFLAGS =
- 
- CTAGS = ctags
- CTAGSFLAGS =
- 
- tags: TAGS
- 
  ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
  	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
  	unique=`for i in $$list; do \
--- 329,352 ----
  distclean-libtool:
  	-rm -f libtool
  uninstall-info-am:
  install-includeHEADERS: $(include_HEADERS)
  	@$(NORMAL_INSTALL)
! 	test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
  	@list='$(include_HEADERS)'; for p in $$list; do \
  	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(am__strip_dir) \
! 	  echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
! 	  $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
  	done
  
  uninstall-includeHEADERS:
  	@$(NORMAL_UNINSTALL)
  	@list='$(include_HEADERS)'; for p in $$list; do \
! 	  f=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
! 	  rm -f "$(DESTDIR)$(includedir)/$$f"; \
  	done
  
  ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
  	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
  	unique=`for i in $$list; do \
*************** ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS
*** 337,363 ****
  	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
  	mkid -fID $$unique
  
! TAGS:  $(HEADERS) $(SOURCES) config-h.in $(TAGS_DEPENDENCIES) \
  		$(TAGS_FILES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) config-h.in $(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 "$(ETAGS_ARGS)$$tags$$unique" \
! 	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
! 	     $$tags $$unique
! 
  ctags: CTAGS
! CTAGS:  $(HEADERS) $(SOURCES) config-h.in $(TAGS_DEPENDENCIES) \
  		$(TAGS_FILES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS) config-h.in $(LISP) $(TAGS_FILES)'; \
  	unique=`for i in $$list; do \
  	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
  	  done | \
--- 355,383 ----
  	  $(AWK) '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
  	mkid -fID $$unique
+ tags: TAGS
  
! TAGS:  $(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; }'`; \
! 	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:  $(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 | \
*************** GTAGS:
*** 374,396 ****
  
  distclean-tags:
  	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
- 
- top_distdir = .
- distdir = $(PACKAGE)-$(VERSION)
- 
- am__remove_distdir = \
-   { test ! -d $(distdir) \
-     || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-          && rm -fr $(distdir); }; }
- 
- GZIP_ENV = --best
- distuninstallcheck_listfiles = find . -type f -print
- distcleancheck_listfiles = find . -type f -print
  
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
--- 394,404 ----
  
  distclean-tags:
  	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
  
  distdir: $(DISTFILES)
  	$(am__remove_distdir)
  	mkdir $(distdir)
+ 	$(mkdir_p) $(distdir)/.
  	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  	list='$(DISTFILES)'; for file in $$list; do \
*************** distdir: $(DISTFILES)
*** 402,408 ****
  	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  	    dir="/$$dir"; \
! 	    $(mkinstalldirs) "$(distdir)$$dir"; \
  	  else \
  	    dir=''; \
  	  fi; \
--- 410,416 ----
  	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  	    dir="/$$dir"; \
! 	    $(mkdir_p) "$(distdir)$$dir"; \
  	  else \
  	    dir=''; \
  	  fi; \
*************** distdir: $(DISTFILES)
*** 423,441 ****
  	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
  	|| chmod -R a+r $(distdir)
  dist-gzip: distdir
! 	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
  	$(am__remove_distdir)
  
  dist dist-all: distdir
! 	$(AMTAR) chof - $(distdir) | 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
! 	$(am__remove_distdir)
! 	GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
  	chmod -R a-w $(distdir); chmod a+w $(distdir)
  	mkdir $(distdir)/_build
  	mkdir $(distdir)/_inst
--- 431,476 ----
  	  ! -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
*************** distcheck: dist
*** 455,473 ****
  	        distuninstallcheck \
  	  && chmod -R a-w "$$dc_install_base" \
  	  && ({ \
! 	       (cd ../.. && $(mkinstalldirs) "$$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-gzip \
! 	  && rm -f $(distdir).tar.gz \
  	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
  	$(am__remove_distdir)
! 	@echo "$(distdir).tar.gz is ready for distribution" | \
! 	  sed 'h;s/./=/g;p;x;p;x'
  distuninstallcheck:
  	@cd $(distuninstallcheck_dir) \
  	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
--- 490,509 ----
  	        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 \
*************** distcleancheck: distclean
*** 488,497 ****
  	       exit 1; } >&2
  check-am: all-am
  check: check-am
! all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h
! 
  installdirs:
! 	$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir)
  install: install-am
  install-exec: install-exec-am
  install-data: install-data-am
--- 524,534 ----
  	       exit 1; } >&2
  check-am: all-am
  check: check-am
! all-am: Makefile $(LTLIBRARIES) $(HEADERS)
  installdirs:
! 	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
! 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
! 	done
  install: install-am
  install-exec: install-exec-am
  install-data: install-data-am
*************** clean-generic:
*** 512,518 ****
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  distclean-generic:
! 	-rm -f $(CONFIG_CLEAN_FILES)
  
  maintainer-clean-generic:
  	@echo "This command is intended for maintainers to use"
--- 549,555 ----
  	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
  
  distclean-generic:
! 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
  
  maintainer-clean-generic:
  	@echo "This command is intended for maintainers to use"
*************** clean-am: clean-generic clean-libLTLIBRA
*** 525,537 ****
  distclean: distclean-am
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -f Makefile
! distclean-am: clean-am distclean-compile distclean-generic distclean-hdr \
  	distclean-libtool distclean-tags
  
  dvi: dvi-am
  
  dvi-am:
  
  info: info-am
  
  info-am:
--- 562,576 ----
  distclean: distclean-am
  	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
  	-rm -f Makefile
! distclean-am: clean-am distclean-compile distclean-generic \
  	distclean-libtool distclean-tags
  
  dvi: dvi-am
  
  dvi-am:
  
+ html: html-am
+ 
  info: info-am
  
  info-am:
*************** ps-am:
*** 568,579 ****
  uninstall-am: uninstall-includeHEADERS uninstall-info-am \
  	uninstall-libLTLIBRARIES
  
! .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
! 	clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \
! 	ctags dist dist-all dist-gzip distcheck distclean \
! 	distclean-compile distclean-generic distclean-hdr \
! 	distclean-libtool distclean-tags distcleancheck distdir \
! 	distuninstallcheck dvi dvi-am info info-am install install-am \
  	install-data install-data-am install-exec install-exec-am \
  	install-includeHEADERS install-info install-info-am \
  	install-libLTLIBRARIES install-man install-strip installcheck \
--- 607,619 ----
  uninstall-am: uninstall-includeHEADERS uninstall-info-am \
  	uninstall-libLTLIBRARIES
  
! .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
! 	clean-generic clean-libLTLIBRARIES clean-libtool \
! 	clean-noinstLTLIBRARIES ctags dist dist-all dist-bzip2 \
! 	dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
! 	distclean-compile distclean-generic distclean-libtool \
! 	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-includeHEADERS install-info install-info-am \
  	install-libLTLIBRARIES install-man install-strip installcheck \
diff -Nrcpad gcc-3.4.3/libjava/libltdl/acinclude.m4 gcc-4.0.0/libjava/libltdl/acinclude.m4
*** gcc-3.4.3/libjava/libltdl/acinclude.m4	Tue Dec 16 21:48:24 2003
--- gcc-4.0.0/libjava/libltdl/acinclude.m4	Mon May  3 20:48:13 2004
*************** AC_MSG_CHECKING([for $compiler option to
*** 4643,4649 ****
        mvs*)
  	case $cc_basename in
  	  cxx)
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
  	    ;;
  	  *)
  	    ;;
--- 4643,4649 ----
        mvs*)
  	case $cc_basename in
  	  cxx)
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Wextra c,exportall'
  	    ;;
  	  *)
  	    ;;
diff -Nrcpad gcc-3.4.3/libjava/libltdl/aclocal.m4 gcc-4.0.0/libjava/libltdl/aclocal.m4
*** gcc-3.4.3/libjava/libltdl/aclocal.m4	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/libjava/libltdl/aclocal.m4	Wed Nov 24 21:01:00 2004
***************
*** 1,6 ****
! # generated automatically by aclocal 1.7.9 -*- Autoconf -*-
  
! # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
  # Free Software Foundation, Inc.
  # This file is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
--- 1,6 ----
! # 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,
***************
*** 11,6439 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
! 
! # serial 47 AC_PROG_LIBTOOL
! 
! 
! # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
! # -----------------------------------------------------------
! # If this macro is not defined by Autoconf, define it here.
! m4_ifdef([AC_PROVIDE_IFELSE],
!          [],
!          [m4_define([AC_PROVIDE_IFELSE],
! 	         [m4_ifdef([AC_PROVIDE_$1],
! 		           [$2], [$3])])])
! 
! 
! # AC_PROG_LIBTOOL
! # ---------------
! AC_DEFUN([AC_PROG_LIBTOOL],
! [AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
! dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
! dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
!   AC_PROVIDE_IFELSE([AC_PROG_CXX],
!     [AC_LIBTOOL_CXX],
!     [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
!   ])])
! dnl And a similar setup for Fortran 77 support
!   AC_PROVIDE_IFELSE([AC_PROG_F77],
!     [AC_LIBTOOL_F77],
!     [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
! ])])
! 
! dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
! dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
! dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
!   AC_PROVIDE_IFELSE([AC_PROG_GCJ],
!     [AC_LIBTOOL_GCJ],
!     [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
!       [AC_LIBTOOL_GCJ],
!       [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
! 	[AC_LIBTOOL_GCJ],
!       [ifdef([AC_PROG_GCJ],
! 	     [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
!        ifdef([A][M_PROG_GCJ],
! 	     [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
!        ifdef([LT_AC_PROG_GCJ],
! 	     [define([LT_AC_PROG_GCJ],
! 		defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
! ])])# AC_PROG_LIBTOOL
! 
! 
! # _AC_PROG_LIBTOOL
! # ----------------
! AC_DEFUN([_AC_PROG_LIBTOOL],
! [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
! AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
! AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
! AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
! 
! # This can be used to rebuild libtool when needed
! LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
! 
! # Always use our own libtool.
! LIBTOOL='$(SHELL) $(top_builddir)/libtool'
! AC_SUBST(LIBTOOL)dnl
! 
! # Prevent multiple expansion
! define([AC_PROG_LIBTOOL], [])
! ])# _AC_PROG_LIBTOOL
! 
! 
! # AC_LIBTOOL_SETUP
! # ----------------
! AC_DEFUN([AC_LIBTOOL_SETUP],
! [AC_PREREQ(2.50)dnl
! AC_REQUIRE([AC_ENABLE_SHARED])dnl
! AC_REQUIRE([AC_ENABLE_STATIC])dnl
! AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
! AC_REQUIRE([AC_CANONICAL_HOST])dnl
! AC_REQUIRE([AC_CANONICAL_BUILD])dnl
! AC_REQUIRE([AC_PROG_CC])dnl
! AC_REQUIRE([AC_PROG_LD])dnl
! AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
! AC_REQUIRE([AC_PROG_NM])dnl
! 
! AC_REQUIRE([AC_PROG_LN_S])dnl
! AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
! # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
! AC_REQUIRE([AC_OBJEXT])dnl
! AC_REQUIRE([AC_EXEEXT])dnl
! dnl
! 
! AC_LIBTOOL_SYS_MAX_CMD_LEN
! AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
! AC_LIBTOOL_OBJDIR
! 
! AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
! _LT_AC_PROG_ECHO_BACKSLASH
! 
! case $host_os in
! aix3*)
!   # AIX sometimes has problems with the GCC collect2 program.  For some
!   # reason, if we set the COLLECT_NAMES environment variable, the problems
!   # vanish in a puff of smoke.
!   if test "X${COLLECT_NAMES+set}" != Xset; then
!     COLLECT_NAMES=
!     export COLLECT_NAMES
!   fi
!   ;;
! esac
! 
! # Sed substitution that helps us do robust quoting.  It backslashifies
! # metacharacters that are still active within double-quoted strings.
! Xsed='sed -e s/^X//'
! [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
! 
! # Same as above, but do not quote variable references.
! [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
! 
! # Sed substitution to delay expansion of an escaped shell variable in a
! # double_quote_subst'ed string.
! delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
! 
! # Sed substitution to avoid accidental globbing in evaled expressions
! no_glob_subst='s/\*/\\\*/g'
! 
! # Constants:
! rm="rm -f"
! 
! # Global variables:
! default_ofile=libtool
! can_build_shared=yes
! 
! # All known linkers require a `.a' archive for static linking (except M$VC,
! # which needs '.lib').
! libext=a
! ltmain="$ac_aux_dir/ltmain.sh"
! ofile="$default_ofile"
! with_gnu_ld="$lt_cv_prog_gnu_ld"
! 
! AC_CHECK_TOOL(AR, ar, false)
! AC_CHECK_TOOL(RANLIB, ranlib, :)
! AC_CHECK_TOOL(STRIP, strip, :)
! 
! old_CC="$CC"
! old_CFLAGS="$CFLAGS"
! 
! # Set sane defaults for various variables
! test -z "$AR" && AR=ar
! test -z "$AR_FLAGS" && AR_FLAGS=cru
! test -z "$AS" && AS=as
! test -z "$CC" && CC=cc
! test -z "$LTCC" && LTCC=$CC
! test -z "$DLLTOOL" && DLLTOOL=dlltool
! test -z "$LD" && LD=ld
! test -z "$LN_S" && LN_S="ln -s"
! test -z "$MAGIC_CMD" && MAGIC_CMD=file
! test -z "$NM" && NM=nm
! test -z "$SED" && SED=sed
! test -z "$OBJDUMP" && OBJDUMP=objdump
! test -z "$RANLIB" && RANLIB=:
! test -z "$STRIP" && STRIP=:
! test -z "$ac_objext" && ac_objext=o
! 
! # Determine commands to create old-style static archives.
! old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
! old_postinstall_cmds='chmod 644 $oldlib'
! old_postuninstall_cmds=
! 
! if test -n "$RANLIB"; then
!   case $host_os in
!   openbsd*)
!     old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
!     ;;
!   *)
!     old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
!     ;;
!   esac
!   old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
! 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
!     AC_PATH_MAGIC
!   fi
!   ;;
! esac
! 
! AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
! AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
! enable_win32_dll=yes, enable_win32_dll=no)
! 
! AC_ARG_ENABLE([libtool-lock],
!     [AC_HELP_STRING([--disable-libtool-lock],
! 	[avoid locking (might break parallel builds)])])
! test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
! 
! AC_ARG_WITH([pic],
!     [AC_HELP_STRING([--with-pic],
! 	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
!     [pic_mode="$withval"],
!     [pic_mode=default])
! test -z "$pic_mode" && pic_mode=default
! 
! # Use C for the default configuration in the libtool script
! tagname=
! AC_LIBTOOL_LANG_C_CONFIG
! _LT_AC_TAGCONFIG
! ])# AC_LIBTOOL_SETUP
! 
! 
! # _LT_AC_SYS_COMPILER
! # -------------------
! AC_DEFUN([_LT_AC_SYS_COMPILER],
! [AC_REQUIRE([AC_PROG_CC])dnl
! 
! # If no C compiler was specified, use CC.
! LTCC=${LTCC-"$CC"}
! 
! # Allow CC to be a program name with arguments.
! compiler=$CC
! ])# _LT_AC_SYS_COMPILER
! 
! 
! # _LT_AC_SYS_LIBPATH_AIX
! # ----------------------
! # Links a minimal program and checks the executable
! # for the system default hardcoded library path. In most cases,
! # this is /usr/lib:/lib, but when the MPI compilers are used
! # the location of the communication and MPI libs are included too.
! # If we don't find anything, use the default library path according
! # to the aix ld manual.
! AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
! [AC_LINK_IFELSE(AC_LANG_PROGRAM,[
! aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
! }'`
! # Check for a 64-bit object if we didn't find anything.
! if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
! }'`; fi],[])
! if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
! ])# _LT_AC_SYS_LIBPATH_AIX
! 
! 
! # _LT_AC_SHELL_INIT(ARG)
! # ----------------------
! AC_DEFUN([_LT_AC_SHELL_INIT],
! [ifdef([AC_DIVERSION_NOTICE],
! 	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
! 	 [AC_DIVERT_PUSH(NOTICE)])
! $1
! AC_DIVERT_POP
! ])# _LT_AC_SHELL_INIT
! 
! 
! # _LT_AC_PROG_ECHO_BACKSLASH
! # --------------------------
! # Add some code to the start of the generated configure script which
! # will find an echo command which doesn't interpret backslashes.
! AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
! [_LT_AC_SHELL_INIT([
! # Check that we are running under the correct shell.
! SHELL=${CONFIG_SHELL-/bin/sh}
! 
! case X$ECHO in
! X*--fallback-echo)
!   # Remove one level of quotation (which was required for Make).
!   ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
!   ;;
! esac
! 
! echo=${ECHO-echo}
! if test "X[$]1" = X--no-reexec; then
!   # Discard the --no-reexec flag, and continue.
!   shift
! elif test "X[$]1" = X--fallback-echo; then
!   # Avoid inline document here, it may be left over
!   :
! elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
!   # Yippee, $echo works!
!   :
! else
!   # Restart under the correct shell.
!   exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
! fi
! 
! if test "X[$]1" = X--fallback-echo; then
!   # used as fallback echo
!   shift
!   cat <<EOF
! [$]*
! EOF
!   exit 0
! fi
! 
! # The HP-UX ksh and POSIX shell print the target directory to stdout
! # if CDPATH is set.
! if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
! 
! if test -z "$ECHO"; then
! if test "X${echo_test_string+set}" != Xset; then
! # find a string as large as possible, as long as the shell can cope with it
!   for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
!     # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
!     if (echo_test_string="`eval $cmd`") 2>/dev/null &&
!        echo_test_string="`eval $cmd`" &&
!        (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
!     then
!       break
!     fi
!   done
! fi
! 
! if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
!    echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
!    test "X$echo_testing_string" = "X$echo_test_string"; then
!   :
! else
!   # The Solaris, AIX, and Digital Unix default echo programs unquote
!   # backslashes.  This makes it impossible to quote backslashes using
!   #   echo "$something" | sed 's/\\/\\\\/g'
!   #
!   # So, first we look for a working echo in the user's PATH.
! 
!   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
!   for dir in $PATH /usr/ucb; do
!     IFS="$lt_save_ifs"
!     if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
!        test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
!        echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
!        test "X$echo_testing_string" = "X$echo_test_string"; then
!       echo="$dir/echo"
!       break
!     fi
!   done
!   IFS="$lt_save_ifs"
! 
!   if test "X$echo" = Xecho; then
!     # We didn't find a better echo, so look for alternatives.
!     if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
!        echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
!        test "X$echo_testing_string" = "X$echo_test_string"; then
!       # This shell has a builtin print -r that does the trick.
!       echo='print -r'
!     elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
! 	 test "X$CONFIG_SHELL" != X/bin/ksh; then
!       # If we have ksh, try running configure again with it.
!       ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
!       export ORIGINAL_CONFIG_SHELL
!       CONFIG_SHELL=/bin/ksh
!       export CONFIG_SHELL
!       exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
!     else
!       # Try using printf.
!       echo='printf %s\n'
!       if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
! 	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
! 	 test "X$echo_testing_string" = "X$echo_test_string"; then
! 	# Cool, printf works
! 	:
!       elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
! 	   test "X$echo_testing_string" = 'X\t' &&
! 	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
! 	   test "X$echo_testing_string" = "X$echo_test_string"; then
! 	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
! 	export CONFIG_SHELL
! 	SHELL="$CONFIG_SHELL"
! 	export SHELL
! 	echo="$CONFIG_SHELL [$]0 --fallback-echo"
!       elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
! 	   test "X$echo_testing_string" = 'X\t' &&
! 	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
! 	   test "X$echo_testing_string" = "X$echo_test_string"; then
! 	echo="$CONFIG_SHELL [$]0 --fallback-echo"
!       else
! 	# maybe with a smaller string...
! 	prev=:
! 
! 	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
! 	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
! 	  then
! 	    break
! 	  fi
! 	  prev="$cmd"
! 	done
! 
! 	if test "$prev" != 'sed 50q "[$]0"'; then
! 	  echo_test_string=`eval $prev`
! 	  export echo_test_string
! 	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
! 	else
! 	  # Oops.  We lost completely, so just stick with echo.
! 	  echo=echo
! 	fi
!       fi
!     fi
!   fi
! fi
! fi
! 
! # Copy echo and quote the copy suitably for passing to libtool from
! # the Makefile, instead of quoting the original, which is used later.
! ECHO=$echo
! if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
!    ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
! fi
! 
! AC_SUBST(ECHO)
! ])])# _LT_AC_PROG_ECHO_BACKSLASH
! 
! 
! # _LT_AC_LOCK
! # -----------
! AC_DEFUN([_LT_AC_LOCK],
! [AC_ARG_ENABLE([libtool-lock],
!     [AC_HELP_STRING([--disable-libtool-lock],
! 	[avoid locking (might break parallel builds)])])
! test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
! 
! # Some flags need to be propagated to the compiler or linker for good
! # libtool support.
! case $host in
! ia64-*-hpux*)
!   # Find out which ABI we are using.
!   echo 'int i;' > conftest.$ac_ext
!   if AC_TRY_EVAL(ac_compile); then
!     case `/usr/bin/file conftest.$ac_objext` in
!     *ELF-32*)
!       HPUX_IA64_MODE="32"
!       ;;
!     *ELF-64*)
!       HPUX_IA64_MODE="64"
!       ;;
!     esac
!   fi
!   rm -rf conftest*
!   ;;
! *-*-irix6*)
!   # Find out which ABI we are using.
!   echo '[#]line __oline__ "configure"' > conftest.$ac_ext
!   if AC_TRY_EVAL(ac_compile); 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*
!   ;;
! 
! 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 AC_TRY_EVAL(ac_compile); then
!     case "`/usr/bin/file conftest.o`" in
!     *32-bit*)
!       case $host in
!         x86_64-*linux*)
!           LD="${LD-ld} -m elf_i386"
!           ;;
!         ppc64-*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"
!   AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
!     [AC_LANG_PUSH(C)
!      AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
!      AC_LANG_POP])
!   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
!   ;;
! AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
! [*-*-cygwin* | *-*-mingw* | *-*-pw32*)
!   AC_CHECK_TOOL(DLLTOOL, dlltool, false)
!   AC_CHECK_TOOL(AS, as, false)
!   AC_CHECK_TOOL(OBJDUMP, objdump, false)
!   ;;
!   ])
! esac
! 
! need_locks="$enable_libtool_lock"
! 
! ])# _LT_AC_LOCK
! 
! 
! # AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
! #		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
! # ----------------------------------------------------------------
! # Check whether the given compiler option works
! AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
! [AC_CACHE_CHECK([$1], [$2],
!   [$2=no
!   ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
!    printf "$lt_simple_compile_test_code" > conftest.$ac_ext
!    lt_compiler_flag="$3"
!    # Insert the option either (1) after the last *FLAGS variable, or
!    # (2) before a word containing "conftest.", or (3) at the end.
!    # Note that $ac_compile itself does not contain backslashes and begins
!    # with a dollar sign (not a hyphen), so the echo should work correctly.
!    # The option is referenced via a variable to avoid confusing sed.
!    lt_compile=`echo "$ac_compile" | $SED \
!    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
!    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
!    -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
!    (eval "$lt_compile" 2>conftest.err)
!    ac_status=$?
!    cat conftest.err >&AS_MESSAGE_LOG_FD
!    echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
!    if (exit $ac_status) && test -s "$ac_outfile"; then
!      # The compiler can only warn and ignore the option if not recognized
!      # So say no if there are warnings
!      if test ! -s conftest.err; then
!        $2=yes
!      fi
!    fi
!    $rm conftest*
! ])
! 
! if test x"[$]$2" = xyes; then
!     ifelse([$5], , :, [$5])
! else
!     ifelse([$6], , :, [$6])
! fi
! ])# AC_LIBTOOL_COMPILER_OPTION
! 
! 
! # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
! #                          [ACTION-SUCCESS], [ACTION-FAILURE])
! # ------------------------------------------------------------
! # Check whether the given compiler option works
! AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
! [AC_CACHE_CHECK([$1], [$2],
!   [$2=no
!    save_LDFLAGS="$LDFLAGS"
!    LDFLAGS="$LDFLAGS $3"
!    printf "$lt_simple_link_test_code" > conftest.$ac_ext
!    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
!      # The compiler can only warn and ignore the option if not recognized
!      # So say no if there are warnings
!      if test -s conftest.err; then
!        # Append any errors to the config.log.
!        cat conftest.err 1>&AS_MESSAGE_LOG_FD
!      else
!        $2=yes
!      fi
!    fi
!    $rm conftest*
!    LDFLAGS="$save_LDFLAGS"
! ])
! 
! if test x"[$]$2" = xyes; then
!     ifelse([$4], , :, [$4])
! else
!     ifelse([$5], , :, [$5])
! fi
! ])# AC_LIBTOOL_LINKER_OPTION
! 
! 
! # AC_LIBTOOL_SYS_MAX_CMD_LEN
! # --------------------------
! AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
! [# find the maximum length of command line arguments
! AC_MSG_CHECKING([the maximum length of command line arguments])
! AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
!   i=0
!   testring="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
!     ;;
! 
!   gnu*)
!     # Under GNU Hurd, this test is not required because there is
!     # no limit to the length of command line arguments.
!     # Libtool will interpret -1 as no limit whatsoever
!     lt_cv_sys_max_cmd_len=-1;
!     ;;
! 
!   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;
!     ;;
! 
!  *)
!     # If test is not a shell built-in, we'll probably end up computing a
!     # maximum length that is only half of the actual maximum length, but
!     # we can't tell.
!     while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \
! 	       = "XX$testring") >/dev/null 2>&1 &&
! 	    new_result=`expr "X$testring" : ".*" 2>&1` &&
! 	    lt_cv_sys_max_cmd_len=$new_result &&
! 	    test $i != 17 # 1/2 MB should be enough
!     do
!       i=`expr $i + 1`
!       testring=$testring$testring
!     done
!     testring=
!     # Add a significant safety factor because C++ compilers can tack on massive
!     # amounts of additional arguments before passing them to the linker.
!     # It appears as though 1/2 is a usable value.
!     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
!     ;;
!   esac
! ])
! if test -n $lt_cv_sys_max_cmd_len ; then
!   AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
! else
!   AC_MSG_RESULT(none)
! fi
! ])# AC_LIBTOOL_SYS_MAX_CMD_LEN
! 
! 
! # _LT_AC_CHECK_DLFCN
! # --------------------
! AC_DEFUN([_LT_AC_CHECK_DLFCN],
! [AC_CHECK_HEADERS(dlfcn.h)dnl
! ])# _LT_AC_CHECK_DLFCN
! 
! 
! # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
! #                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
! # ------------------------------------------------------------------
! AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
! [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
! if test "$cross_compiling" = yes; then :
!   [$4]
! else
!   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
!   lt_status=$lt_dlunknown
!   cat > conftest.$ac_ext <<EOF
! [#line __oline__ "configure"
! #include "confdefs.h"
! 
! #if HAVE_DLFCN_H
! #include <dlfcn.h>
! #endif
! 
! #include <stdio.h>
! 
! #ifdef RTLD_GLOBAL
! #  define LT_DLGLOBAL		RTLD_GLOBAL
! #else
! #  ifdef DL_GLOBAL
! #    define LT_DLGLOBAL		DL_GLOBAL
! #  else
! #    define LT_DLGLOBAL		0
! #  endif
! #endif
! 
! /* We may have to define LT_DLLAZY_OR_NOW in the command line if we
!    find out it does not work in some platform. */
! #ifndef LT_DLLAZY_OR_NOW
! #  ifdef RTLD_LAZY
! #    define LT_DLLAZY_OR_NOW		RTLD_LAZY
! #  else
! #    ifdef DL_LAZY
! #      define LT_DLLAZY_OR_NOW		DL_LAZY
! #    else
! #      ifdef RTLD_NOW
! #        define LT_DLLAZY_OR_NOW	RTLD_NOW
! #      else
! #        ifdef DL_NOW
! #          define LT_DLLAZY_OR_NOW	DL_NOW
! #        else
! #          define LT_DLLAZY_OR_NOW	0
! #        endif
! #      endif
! #    endif
! #  endif
! #endif
! 
! #ifdef __cplusplus
! extern "C" void exit (int);
! #endif
! 
! void fnord() { int i=42;}
! int main ()
! {
!   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
!   int status = $lt_dlunknown;
! 
!   if (self)
!     {
!       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
!       else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
!       /* dlclose (self); */
!     }
! 
!     exit (status);
! }]
! EOF
!   if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
!     (./conftest; exit; ) 2>/dev/null
!     lt_status=$?
!     case x$lt_status in
!       x$lt_dlno_uscore) $1 ;;
!       x$lt_dlneed_uscore) $2 ;;
!       x$lt_unknown|x*) $3 ;;
!     esac
!   else :
!     # compilation failed
!     $3
!   fi
! fi
! rm -fr conftest*
! ])# _LT_AC_TRY_DLOPEN_SELF
! 
! 
! # AC_LIBTOOL_DLOPEN_SELF
! # -------------------
! AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
! [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
! if test "x$enable_dlopen" != xyes; then
!   enable_dlopen=unknown
!   enable_dlopen_self=unknown
!   enable_dlopen_self_static=unknown
! else
!   lt_cv_dlopen=no
!   lt_cv_dlopen_libs=
! 
!   case $host_os in
!   beos*)
!     lt_cv_dlopen="load_add_on"
!     lt_cv_dlopen_libs=
!     lt_cv_dlopen_self=yes
!     ;;
! 
!   mingw* | pw32*)
!     lt_cv_dlopen="LoadLibrary"
!     lt_cv_dlopen_libs=
!    ;;
! 
!   cygwin*)
!     lt_cv_dlopen="dlopen"
!     lt_cv_dlopen_libs=
!    ;;
! 
!   darwin*)
!   # if libdl is installed we need to link against it
!     AC_CHECK_LIB([dl], [dlopen],
! 		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
!     lt_cv_dlopen="dyld"
!     lt_cv_dlopen_libs=
!     lt_cv_dlopen_self=yes
!     ])
!    ;;
!     
!   *)
!     AC_CHECK_FUNC([shl_load],
! 	  [lt_cv_dlopen="shl_load"],
!       [AC_CHECK_LIB([dld], [shl_load],
! 	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
! 	[AC_CHECK_FUNC([dlopen],
! 	      [lt_cv_dlopen="dlopen"],
! 	  [AC_CHECK_LIB([dl], [dlopen],
! 		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
! 	    [AC_CHECK_LIB([svld], [dlopen],
! 		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
! 	      [AC_CHECK_LIB([dld], [dld_link],
! 		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
! 	      ])
! 	    ])
! 	  ])
! 	])
!       ])
!     ;;
!   esac
! 
!   if test "x$lt_cv_dlopen" != xno; then
!     enable_dlopen=yes
!   else
!     enable_dlopen=no
!   fi
! 
!   case $lt_cv_dlopen in
!   dlopen)
!     save_CPPFLAGS="$CPPFLAGS"
!     test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
! 
!     save_LDFLAGS="$LDFLAGS"
!     eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
! 
!     save_LIBS="$LIBS"
!     LIBS="$lt_cv_dlopen_libs $LIBS"
! 
!     AC_CACHE_CHECK([whether a program can dlopen itself],
! 	  lt_cv_dlopen_self, [dnl
! 	  _LT_AC_TRY_DLOPEN_SELF(
! 	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
! 	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
!     ])
! 
!     if test "x$lt_cv_dlopen_self" = xyes; then
!       LDFLAGS="$LDFLAGS $link_static_flag"
!       AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
!     	  lt_cv_dlopen_self_static, [dnl
! 	  _LT_AC_TRY_DLOPEN_SELF(
! 	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
! 	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
!       ])
!     fi
! 
!     CPPFLAGS="$save_CPPFLAGS"
!     LDFLAGS="$save_LDFLAGS"
!     LIBS="$save_LIBS"
!     ;;
!   esac
! 
!   case $lt_cv_dlopen_self in
!   yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
!   *) enable_dlopen_self=unknown ;;
!   esac
! 
!   case $lt_cv_dlopen_self_static in
!   yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
!   *) enable_dlopen_self_static=unknown ;;
!   esac
! fi
! ])# AC_LIBTOOL_DLOPEN_SELF
! 
! 
! # AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
! # ---------------------------------
! # Check to see if options -c and -o are simultaneously supported by compiler
! AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
! [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
! AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
!   [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
!   [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
!    $rm -r conftest 2>/dev/null
!    mkdir conftest
!    cd conftest
!    mkdir out
!    printf "$lt_simple_compile_test_code" > conftest.$ac_ext
! 
!    # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
!    # that will create temporary files in the current directory regardless of
!    # the output directory.  Thus, making CWD read-only will cause this test
!    # to fail, enabling locking or at least warning the user not to do parallel
!    # builds.
!    chmod -w .
! 
!    lt_compiler_flag="-o out/conftest2.$ac_objext"
!    # Insert the option either (1) after the last *FLAGS variable, or
!    # (2) before a word containing "conftest.", or (3) at the end.
!    # Note that $ac_compile itself does not contain backslashes and begins
!    # with a dollar sign (not a hyphen), so the echo should work correctly.
!    lt_compile=`echo "$ac_compile" | $SED \
!    -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
!    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
!    -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
!    (eval "$lt_compile" 2>out/conftest.err)
!    ac_status=$?
!    cat out/conftest.err >&AS_MESSAGE_LOG_FD
!    echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
!    if (exit $ac_status) && test -s out/conftest2.$ac_objext
!    then
!      # The compiler can only warn and ignore the option if not recognized
!      # So say no if there are warnings
!      if test ! -s out/conftest.err; then
!        _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
!      fi
!    fi
!    chmod u+w .
!    $rm conftest* out/*
!    rmdir out
!    cd ..
!    rmdir conftest
!    $rm conftest*
! ])
! ])# AC_LIBTOOL_PROG_CC_C_O
! 
! 
! # AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
! # -----------------------------------------
! # Check to see if we can do hard links to lock some files if needed
! AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
! [AC_REQUIRE([_LT_AC_LOCK])dnl
! 
! hard_links="nottested"
! if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
!   # do not overwrite the value of need_locks provided by the user
!   AC_MSG_CHECKING([if we can lock with hard links])
!   hard_links=yes
!   $rm conftest*
!   ln conftest.a conftest.b 2>/dev/null && hard_links=no
!   touch conftest.a
!   ln conftest.a conftest.b 2>&5 || hard_links=no
!   ln conftest.a conftest.b 2>/dev/null && hard_links=no
!   AC_MSG_RESULT([$hard_links])
!   if test "$hard_links" = no; then
!     AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
!     need_locks=warn
!   fi
! else
!   need_locks=no
! fi
! ])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
! 
! 
! # AC_LIBTOOL_OBJDIR
! # -----------------
! AC_DEFUN([AC_LIBTOOL_OBJDIR],
! [AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
! [rm -f .libs 2>/dev/null
! mkdir .libs 2>/dev/null
! if test -d .libs; then
!   lt_cv_objdir=.libs
! else
!   # MS-DOS does not allow filenames that begin with a dot.
!   lt_cv_objdir=_libs
! fi
! rmdir .libs 2>/dev/null])
! objdir=$lt_cv_objdir
! ])# AC_LIBTOOL_OBJDIR
! 
! 
! # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
! # ----------------------------------------------
! # Check hardcoding attributes.
! AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
! [AC_MSG_CHECKING([how to hardcode library paths into programs])
! _LT_AC_TAGVAR(hardcode_action, $1)=
! if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
!    test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
!    test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
! 
!   # We can hardcode non-existant directories.
!   if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
!      # If the only mechanism to avoid hardcoding is shlibpath_var, we
!      # have to relink, otherwise we might link with an installed library
!      # when we should be linking with a yet-to-be-installed one
!      ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
!      test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
!     # Linking always hardcodes the temporary library directory.
!     _LT_AC_TAGVAR(hardcode_action, $1)=relink
!   else
!     # We can link without hardcoding, and we can hardcode nonexisting dirs.
!     _LT_AC_TAGVAR(hardcode_action, $1)=immediate
!   fi
! else
!   # We cannot hardcode anything, or else we can only hardcode existing
!   # directories.
!   _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
! fi
! AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
! 
! if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
!   # Fast installation is not supported
!   enable_fast_install=no
! elif test "$shlibpath_overrides_runpath" = yes ||
!      test "$enable_shared" = no; then
!   # Fast installation is not necessary
!   enable_fast_install=needless
! fi
! ])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
! 
! 
! # AC_LIBTOOL_SYS_LIB_STRIP
! # ------------------------
! AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
! [striplib=
! old_striplib=
! AC_MSG_CHECKING([whether stripping libraries is possible])
! if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
!   test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
!   test -z "$striplib" && striplib="$STRIP --strip-unneeded"
!   AC_MSG_RESULT([yes])
! else
! # FIXME - insert some real tests, host_os isn't really good enough
!   case $host_os in
!    darwin*)
!        if test -n "$STRIP" ; then
!          striplib="$STRIP -x"
!          AC_MSG_RESULT([yes])
!        else
!   AC_MSG_RESULT([no])
! fi
!        ;;
!    *)
!   AC_MSG_RESULT([no])
!     ;;
!   esac  
! fi
! ])# AC_LIBTOOL_SYS_LIB_STRIP
! 
! 
! # AC_LIBTOOL_SYS_DYNAMIC_LINKER
! # -----------------------------
! # PORTME Fill in your ld.so characteristics
! AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
! [AC_MSG_CHECKING([dynamic linker characteristics])
! library_names_spec=
! libname_spec='lib$name'
! soname_spec=
! shrext=".so"
! postinstall_cmds=
! postuninstall_cmds=
! finish_cmds=
! finish_eval=
! shlibpath_var=
! shlibpath_overrides_runpath=unknown
! version_type=none
! dynamic_linker="$host_os ld.so"
! sys_lib_dlsearch_path_spec="/lib /usr/lib"
! if test "$GCC" = yes; then
!   sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
!   if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
!     # if the path contains ";" then we assume it to be the separator
!     # otherwise default to the standard path separator (i.e. ":") - it is
!     # assumed that no part of a normal pathname contains ";" but that should
!     # okay in the real world where ";" in dirpaths is itself problematic.
!     sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
!   else
!     sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
!   fi
! else
!   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
! fi
! need_lib_prefix=unknown
! hardcode_into_libs=no
! 
! # when you set need_version to no, make sure it does not cause -set_version
! # flags to be left without arguments
! need_version=unknown
! 
! case $host_os in
! aix3*)
!   version_type=linux
!   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
!   shlibpath_var=LIBPATH
! 
!   # AIX 3 has no versioning support, so we append a major version to the name.
!   soname_spec='${libname}${release}${shared_ext}$major'
!   ;;
! 
! aix4* | aix5*)
!   version_type=linux
!   need_lib_prefix=no
!   need_version=no
!   hardcode_into_libs=yes
!   if test "$host_cpu" = ia64; then
!     # AIX 5 supports IA64
!     library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
!     shlibpath_var=LD_LIBRARY_PATH
!   else
!     # With GCC up to 2.95.x, collect2 would create an import file
!     # for dependence libraries.  The import file would start with
!     # the line `#! .'.  This would cause the generated library to
!     # depend on `.', always an invalid library.  This was fixed in
!     # development snapshots of GCC prior to 3.0.
!     case $host_os in
!       aix4 | aix4.[[01]] | aix4.[[01]].*)
!       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
! 	   echo ' yes '
! 	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
! 	:
!       else
! 	can_build_shared=no
!       fi
!       ;;
!     esac
!     # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
!     # soname into executable. Probably we can add versioning support to
!     # collect2, so additional links can be useful in future.
!     if test "$aix_use_runtimelinking" = yes; then
!       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
!       # instead of lib<name>.a to let people know that these are not
!       # typical AIX shared libraries.
!       library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!     else
!       # We preserve .a as extension for shared libraries through AIX4.2
!       # and later when we are not doing run time linking.
!       library_names_spec='${libname}${release}.a $libname.a'
!       soname_spec='${libname}${release}${shared_ext}$major'
!     fi
!     shlibpath_var=LIBPATH
!   fi
!   ;;
! 
! amigaos*)
!   library_names_spec='$libname.ixlibrary $libname.a'
!   # Create ${libname}_ixlibrary.a entries in /sys/libs.
!   finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
!   ;;
! 
! beos*)
!   library_names_spec='${libname}${shared_ext}'
!   dynamic_linker="$host_os ld.so"
!   shlibpath_var=LIBRARY_PATH
!   ;;
! 
! bsdi4*)
!   version_type=linux
!   need_version=no
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!   soname_spec='${libname}${release}${shared_ext}$major'
!   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
!   shlibpath_var=LD_LIBRARY_PATH
!   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
!   sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
!   # the default ld.so.conf also contains /usr/contrib/lib and
!   # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
!   # libtool to hard-code these into programs
!   ;;
! 
! cygwin* | mingw* | pw32*)
!   version_type=windows
!   shrext=".dll"
!   need_version=no
!   need_lib_prefix=no
! 
!   case $GCC,$host_os in
!   yes,cygwin* | yes,mingw* | yes,pw32*)
!     library_names_spec='$libname.dll.a'
!     # DLL is installed to $(libdir)/../bin by postinstall_cmds
!     postinstall_cmds='base_file=`basename \${file}`~
!       dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
!       dldir=$destdir/`dirname \$dlpath`~
!       test -d \$dldir || mkdir -p \$dldir~
!       $install_prog $dir/$dlname \$dldir/$dlname'
!     postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
!       dlpath=$dir/\$dldll~
!        $rm \$dlpath'
!     shlibpath_overrides_runpath=yes
! 
!     case $host_os in
!     cygwin*)
!       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
!       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
!       sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
!       ;;
!     mingw*)
!       # MinGW DLLs use traditional 'lib' prefix
!       soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
!       sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
!       if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
!         # It is most probably a Windows format PATH printed by
!         # mingw gcc, but we are running on Cygwin. Gcc prints its search
!         # path with ; separators, and with drive letters. We can handle the
!         # drive letters (cygwin fileutils understands them), so leave them,
!         # especially as we might pass files found there to a mingw objdump,
!         # which wouldn't understand a cygwinified path. Ahh.
!         sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
!       else
!         sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
!       fi
!       ;;
!     pw32*)
!       # pw32 DLLs use 'pw' prefix rather than 'lib'
!       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
!       ;;
!     esac
!     ;;
! 
!   *)
!     library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
!     ;;
!   esac
!   dynamic_linker='Win32 ld.exe'
!   # FIXME: first we should search . and the directory the executable is in
!   shlibpath_var=PATH
!   ;;
! 
! darwin* | rhapsody*)
!   dynamic_linker="$host_os dyld"
!   version_type=darwin
!   need_lib_prefix=no
!   need_version=no
!   # FIXME: Relying on posixy $() will cause problems for
!   #        cross-compilation, but unfortunately the echo tests do not
!   #        yet detect zsh echo's removal of \ escapes.
!   library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
!   soname_spec='${libname}${release}${major}$shared_ext'
!   shlibpath_overrides_runpath=yes
!   shlibpath_var=DYLD_LIBRARY_PATH
!   shrext='$(test .$module = .yes && echo .so || echo .dylib)'
!   # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
!   if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then 
!   sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
!   fi
!   sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
!   ;;
! 
! dgux*)
!   version_type=linux
!   need_lib_prefix=no
!   need_version=no
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
!   soname_spec='${libname}${release}${shared_ext}$major'
!   shlibpath_var=LD_LIBRARY_PATH
!   ;;
! 
! freebsd1*)
!   dynamic_linker=no
!   ;;
! 
! freebsd*)
!   objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
!   version_type=freebsd-$objformat
!   case $version_type in
!     freebsd-elf*)
!       library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
!       need_version=no
!       need_lib_prefix=no
!       ;;
!     freebsd-*)
!       library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
!       need_version=yes
!       ;;
!   esac
!   shlibpath_var=LD_LIBRARY_PATH
!   case $host_os in
!   freebsd2*)
!     shlibpath_overrides_runpath=yes
!     ;;
!   freebsd3.[01]* | freebsdelf3.[01]*)
!     shlibpath_overrides_runpath=yes
!     hardcode_into_libs=yes
!     ;;
!   *) # from 3.2 on
!     shlibpath_overrides_runpath=no
!     hardcode_into_libs=yes
!     ;;
!   esac
!   ;;
! 
! gnu*)
!   version_type=linux
!   need_lib_prefix=no
!   need_version=no
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
!   soname_spec='${libname}${release}${shared_ext}$major'
!   shlibpath_var=LD_LIBRARY_PATH
!   hardcode_into_libs=yes
!   ;;
! 
! hpux9* | hpux10* | hpux11*)
!   # Give a soname corresponding to the major version so that dld.sl refuses to
!   # link against other versions.
!   version_type=sunos
!   need_lib_prefix=no
!   need_version=no
!   case "$host_cpu" in
!   ia64*)
!     shrext='.so'
!     hardcode_into_libs=yes
!     dynamic_linker="$host_os dld.so"
!     shlibpath_var=LD_LIBRARY_PATH
!     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
!     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!     soname_spec='${libname}${release}${shared_ext}$major'
!     if test "X$HPUX_IA64_MODE" = X32; then
!       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
!     else
!       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
!     fi
!     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
!     ;;
!    hppa*64*)
!      shrext='.sl'
!      hardcode_into_libs=yes
!      dynamic_linker="$host_os dld.sl"
!      shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
!      shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
!      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!      soname_spec='${libname}${release}${shared_ext}$major'
!      sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
!      sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
!      ;;
!    *)
!     shrext='.sl'
!     dynamic_linker="$host_os dld.sl"
!     shlibpath_var=SHLIB_PATH
!     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
!     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!     soname_spec='${libname}${release}${shared_ext}$major'
!     ;;
!   esac
!   # HP-UX runs *really* slowly unless shared libraries are mode 555.
!   postinstall_cmds='chmod 555 $lib'
!   ;;
! 
! irix5* | irix6* | nonstopux*)
!   case $host_os in
!     nonstopux*) version_type=nonstopux ;;
!     *)
! 	if test "$lt_cv_prog_gnu_ld" = yes; then
! 		version_type=linux
! 	else
! 		version_type=irix
! 	fi ;;
!   esac
!   need_lib_prefix=no
!   need_version=no
!   soname_spec='${libname}${release}${shared_ext}$major'
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
!   case $host_os in
!   irix5* | nonstopux*)
!     libsuff= shlibsuff=
!     ;;
!   *)
!     case $LD in # libtool.m4 will add one of these switches to LD
!     *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
!       libsuff= shlibsuff= libmagic=32-bit;;
!     *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
!       libsuff=32 shlibsuff=N32 libmagic=N32;;
!     *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
!       libsuff=64 shlibsuff=64 libmagic=64-bit;;
!     *) libsuff= shlibsuff= libmagic=never-match;;
!     esac
!     ;;
!   esac
!   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
!   shlibpath_overrides_runpath=no
!   sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
!   sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
!   hardcode_into_libs=yes
!   ;;
! 
! # No shared lib support for Linux oldld, aout, or coff.
! linux*oldld* | linux*aout* | linux*coff*)
!   dynamic_linker=no
!   ;;
! 
! # This must be Linux ELF.
! linux*)
!   version_type=linux
!   need_lib_prefix=no
!   need_version=no
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!   soname_spec='${libname}${release}${shared_ext}$major'
!   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
!   shlibpath_var=LD_LIBRARY_PATH
!   shlibpath_overrides_runpath=no
!   # This implies no fast_install, which is unacceptable.
!   # Some rework will be needed to allow for fast_install
!   # before this can be enabled.
!   hardcode_into_libs=yes
! 
!   # We used to test for /lib/ld.so.1 and disable shared libraries on
!   # powerpc, because MkLinux only supported shared libraries with the
!   # GNU dynamic linker.  Since this was broken with cross compilers,
!   # most powerpc-linux boxes support dynamic linking these days and
!   # people can always --disable-shared, the test was removed, and we
!   # assume the GNU/Linux dynamic linker is in use.
!   dynamic_linker='GNU/Linux ld.so'
!   ;;
! 
! netbsd*)
!   version_type=sunos
!   need_lib_prefix=no
!   need_version=no
!   if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
!     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
!     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
!     dynamic_linker='NetBSD (a.out) ld.so'
!   else
!     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
!     soname_spec='${libname}${release}${shared_ext}$major'
!     dynamic_linker='NetBSD ld.elf_so'
!   fi
!   shlibpath_var=LD_LIBRARY_PATH
!   shlibpath_overrides_runpath=yes
!   hardcode_into_libs=yes
!   ;;
! 
! newsos6)
!   version_type=linux
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!   shlibpath_var=LD_LIBRARY_PATH
!   shlibpath_overrides_runpath=yes
!   ;;
! 
! nto-qnx)
!   version_type=linux
!   need_lib_prefix=no
!   need_version=no
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!   soname_spec='${libname}${release}${shared_ext}$major'
!   shlibpath_var=LD_LIBRARY_PATH
!   shlibpath_overrides_runpath=yes
!   ;;
! 
! openbsd*)
!   version_type=sunos
!   need_lib_prefix=no
!   need_version=no
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
!   finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
!   shlibpath_var=LD_LIBRARY_PATH
!   if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
!     case $host_os in
!       openbsd2.[[89]] | openbsd2.[[89]].*)
! 	shlibpath_overrides_runpath=no
! 	;;
!       *)
! 	shlibpath_overrides_runpath=yes
! 	;;
!       esac
!   else
!     shlibpath_overrides_runpath=yes
!   fi
!   ;;
! 
! os2*)
!   libname_spec='$name'
!   shrext=".dll"
!   need_lib_prefix=no
!   library_names_spec='$libname${shared_ext} $libname.a'
!   dynamic_linker='OS/2 ld.exe'
!   shlibpath_var=LIBPATH
!   ;;
! 
! osf3* | osf4* | osf5*)
!   version_type=osf
!   need_lib_prefix=no
!   need_version=no
!   soname_spec='${libname}${release}${shared_ext}$major'
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!   shlibpath_var=LD_LIBRARY_PATH
!   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
!   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
!   ;;
! 
! sco3.2v5*)
!   version_type=osf
!   soname_spec='${libname}${release}${shared_ext}$major'
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!   shlibpath_var=LD_LIBRARY_PATH
!   ;;
! 
! solaris*)
!   version_type=linux
!   need_lib_prefix=no
!   need_version=no
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!   soname_spec='${libname}${release}${shared_ext}$major'
!   shlibpath_var=LD_LIBRARY_PATH
!   shlibpath_overrides_runpath=yes
!   hardcode_into_libs=yes
!   # ldd complains unless libraries are executable
!   postinstall_cmds='chmod +x $lib'
!   ;;
! 
! sunos4*)
!   version_type=sunos
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
!   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
!   shlibpath_var=LD_LIBRARY_PATH
!   shlibpath_overrides_runpath=yes
!   if test "$with_gnu_ld" = yes; then
!     need_lib_prefix=no
!   fi
!   need_version=yes
!   ;;
! 
! sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
!   version_type=linux
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!   soname_spec='${libname}${release}${shared_ext}$major'
!   shlibpath_var=LD_LIBRARY_PATH
!   case $host_vendor in
!     sni)
!       shlibpath_overrides_runpath=no
!       need_lib_prefix=no
!       export_dynamic_flag_spec='${wl}-Blargedynsym'
!       runpath_var=LD_RUN_PATH
!       ;;
!     siemens)
!       need_lib_prefix=no
!       ;;
!     motorola)
!       need_lib_prefix=no
!       need_version=no
!       shlibpath_overrides_runpath=no
!       sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
!       ;;
!   esac
!   ;;
! 
! sysv4*MP*)
!   if test -d /usr/nec ;then
!     version_type=linux
!     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
!     soname_spec='$libname${shared_ext}.$major'
!     shlibpath_var=LD_LIBRARY_PATH
!   fi
!   ;;
! 
! uts4*)
!   version_type=linux
!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
!   soname_spec='${libname}${release}${shared_ext}$major'
!   shlibpath_var=LD_LIBRARY_PATH
!   ;;
! 
! *)
!   dynamic_linker=no
!   ;;
! esac
! AC_MSG_RESULT([$dynamic_linker])
! test "$dynamic_linker" = no && can_build_shared=no
! ])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
! 
! 
! # _LT_AC_TAGCONFIG
! # ----------------
! AC_DEFUN([_LT_AC_TAGCONFIG],
! [AC_ARG_WITH([tags],
!     [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
!         [include additional configurations @<:@automatic@:>@])],
!     [tagnames="$withval"])
! 
! if test -f "$ltmain" && test -n "$tagnames"; then
!   if test ! -f "${ofile}"; then
!     AC_MSG_WARN([output file `$ofile' does not exist])
!   fi
! 
!   if test -z "$LTCC"; then
!     eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
!     if test -z "$LTCC"; then
!       AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
!     else
!       AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
!     fi
!   fi
! 
!   # Extract list of available tagged configurations in $ofile.
!   # Note that this assumes the entire list is on one line.
!   available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
! 
!   lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
!   for tagname in $tagnames; do
!     IFS="$lt_save_ifs"
!     # Check whether tagname contains only valid characters
!     case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
!     "") ;;
!     *)  AC_MSG_ERROR([invalid tag name: $tagname])
! 	;;
!     esac
! 
!     if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
!     then
!       AC_MSG_ERROR([tag name \"$tagname\" already exists])
!     fi
! 
!     # Update the list of available tags.
!     if test -n "$tagname"; then
!       echo appending configuration tag \"$tagname\" to $ofile
! 
!       case $tagname in
!       CXX)
! 	if test -n "$CXX" && test "X$CXX" != "Xno"; then
! 	  AC_LIBTOOL_LANG_CXX_CONFIG
! 	else
! 	  tagname=""
! 	fi
! 	;;
! 
!       F77)
! 	if test -n "$F77" && test "X$F77" != "Xno"; then
! 	  AC_LIBTOOL_LANG_F77_CONFIG
! 	else
! 	  tagname=""
! 	fi
! 	;;
! 
!       GCJ)
! 	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
! 	  AC_LIBTOOL_LANG_GCJ_CONFIG
! 	else
! 	  tagname=""
! 	fi
! 	;;
! 
!       RC)
! 	AC_LIBTOOL_LANG_RC_CONFIG
! 	;;
! 
!       *)
! 	AC_MSG_ERROR([Unsupported tag name: $tagname])
! 	;;
!       esac
! 
!       # Append the new tag name to the list of available tags.
!       if test -n "$tagname" ; then
!       available_tags="$available_tags $tagname"
!     fi
!     fi
!   done
!   IFS="$lt_save_ifs"
! 
!   # Now substitute the updated list of available tags.
!   if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
!     mv "${ofile}T" "$ofile"
!     chmod +x "$ofile"
!   else
!     rm -f "${ofile}T"
!     AC_MSG_ERROR([unable to update list of available tagged configurations.])
!   fi
! fi
! ])# _LT_AC_TAGCONFIG
! 
! 
! # AC_LIBTOOL_DLOPEN
! # -----------------
! # enable checks for dlopen support
! AC_DEFUN([AC_LIBTOOL_DLOPEN],
!  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
! ])# AC_LIBTOOL_DLOPEN
! 
! 
! # AC_LIBTOOL_WIN32_DLL
! # --------------------
! # declare package support for building win32 dll's
! AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
! [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
! ])# AC_LIBTOOL_WIN32_DLL
! 
! 
! # AC_ENABLE_SHARED([DEFAULT])
! # ---------------------------
! # implement the --enable-shared flag
! # DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
! AC_DEFUN([AC_ENABLE_SHARED],
! [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
! AC_ARG_ENABLE([shared],
!     [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
! 	[build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
!     [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.
!       lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
!       for pkg in $enableval; do
! 	IFS="$lt_save_ifs"
! 	if test "X$pkg" = "X$p"; then
! 	  enable_shared=yes
! 	fi
!       done
!       IFS="$lt_save_ifs"
!       ;;
!     esac],
!     [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
! ])# AC_ENABLE_SHARED
! 
! 
! # AC_DISABLE_SHARED
! # -----------------
! #- set the default shared flag to --disable-shared
! AC_DEFUN([AC_DISABLE_SHARED],
! [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
! AC_ENABLE_SHARED(no)
! ])# AC_DISABLE_SHARED
! 
! 
! # AC_ENABLE_STATIC([DEFAULT])
! # ---------------------------
! # implement the --enable-static flag
! # DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
! AC_DEFUN([AC_ENABLE_STATIC],
! [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
! AC_ARG_ENABLE([static],
!     [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
! 	[build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
!     [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.
!       lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
!       for pkg in $enableval; do
! 	IFS="$lt_save_ifs"
! 	if test "X$pkg" = "X$p"; then
! 	  enable_static=yes
! 	fi
!       done
!       IFS="$lt_save_ifs"
!       ;;
!     esac],
!     [enable_static=]AC_ENABLE_STATIC_DEFAULT)
! ])# AC_ENABLE_STATIC
! 
! 
! # AC_DISABLE_STATIC
! # -----------------
! # set the default static flag to --disable-static
! AC_DEFUN([AC_DISABLE_STATIC],
! [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
! AC_ENABLE_STATIC(no)
! ])# AC_DISABLE_STATIC
! 
! 
! # AC_ENABLE_FAST_INSTALL([DEFAULT])
! # ---------------------------------
! # implement the --enable-fast-install flag
! # DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
! AC_DEFUN([AC_ENABLE_FAST_INSTALL],
! [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
! AC_ARG_ENABLE([fast-install],
!     [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
!     [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
!     [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.
!       lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
!       for pkg in $enableval; do
! 	IFS="$lt_save_ifs"
! 	if test "X$pkg" = "X$p"; then
! 	  enable_fast_install=yes
! 	fi
!       done
!       IFS="$lt_save_ifs"
!       ;;
!     esac],
!     [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
! ])# AC_ENABLE_FAST_INSTALL
! 
! 
! # AC_DISABLE_FAST_INSTALL
! # -----------------------
! # set the default to --disable-fast-install
! AC_DEFUN([AC_DISABLE_FAST_INSTALL],
! [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
! AC_ENABLE_FAST_INSTALL(no)
! ])# AC_DISABLE_FAST_INSTALL
! 
! 
! # AC_LIBTOOL_PICMODE([MODE])
! # --------------------------
! # implement the --with-pic flag
! # MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
! AC_DEFUN([AC_LIBTOOL_PICMODE],
! [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
! pic_mode=ifelse($#,1,$1,default)
! ])# AC_LIBTOOL_PICMODE
! 
! 
! # AC_PROG_EGREP
! # -------------
! # This is predefined starting with Autoconf 2.54, so this conditional
! # definition can be removed once we require Autoconf 2.54 or later.
! m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
! [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
!    [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])
!  EGREP=$ac_cv_prog_egrep
!  AC_SUBST([EGREP])
! ])])
! 
! 
! # AC_PATH_TOOL_PREFIX
! # -------------------
! # find a file program which can recognise shared library
! AC_DEFUN([AC_PATH_TOOL_PREFIX],
! [AC_REQUIRE([AC_PROG_EGREP])dnl
! AC_MSG_CHECKING([for $1])
! AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
! [case $MAGIC_CMD in
! [[\\/*] |  ?:[\\/]*])
!   lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
!   ;;
! *)
!   lt_save_MAGIC_CMD="$MAGIC_CMD"
!   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
! dnl $ac_dummy forces splitting on constant user-supplied paths.
! dnl POSIX.2 word splitting is done only on the output of word expansions,
! dnl not every word.  This closes a longstanding sh security hole.
!   ac_dummy="ifelse([$2], , $PATH, [$2])"
!   for ac_dir in $ac_dummy; do
!     IFS="$lt_save_ifs"
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$1; then
!       lt_cv_path_MAGIC_CMD="$ac_dir/$1"
!       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="$lt_save_ifs"
!   MAGIC_CMD="$lt_save_MAGIC_CMD"
!   ;;
! esac])
! MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
! if test -n "$MAGIC_CMD"; then
!   AC_MSG_RESULT($MAGIC_CMD)
! else
!   AC_MSG_RESULT(no)
! fi
! ])# AC_PATH_TOOL_PREFIX
! 
! 
! # AC_PATH_MAGIC
! # -------------
! # find a file program which can recognise a shared library
! AC_DEFUN([AC_PATH_MAGIC],
! [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
! if test -z "$lt_cv_path_MAGIC_CMD"; then
!   if test -n "$ac_tool_prefix"; then
!     AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
!   else
!     MAGIC_CMD=:
!   fi
! fi
! ])# AC_PATH_MAGIC
! 
! 
! # AC_PROG_LD
! # ----------
! # find the path to the GNU or non-GNU linker
! AC_DEFUN([AC_PROG_LD],
! [AC_ARG_WITH([gnu-ld],
!     [AC_HELP_STRING([--with-gnu-ld],
! 	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
!     [test "$withval" = no || with_gnu_ld=yes],
!     [with_gnu_ld=no])
! AC_REQUIRE([LT_AC_PROG_SED])dnl
! AC_REQUIRE([AC_PROG_CC])dnl
! AC_REQUIRE([AC_CANONICAL_HOST])dnl
! AC_REQUIRE([AC_CANONICAL_BUILD])dnl
! ac_prog=ld
! if test "$GCC" = yes; then
!   # Check if gcc -print-prog-name=ld gives a path.
!   AC_MSG_CHECKING([for ld used by $CC])
!   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.
!     [[\\/]]* | ?:[[\\/]]*)
!       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
!   AC_MSG_CHECKING([for GNU ld])
! else
!   AC_MSG_CHECKING([for non-GNU ld])
! fi
! AC_CACHE_VAL(lt_cv_path_LD,
! [if test -z "$LD"; then
!   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
!   for ac_dir in $PATH; do
!     IFS="$lt_save_ifs"
!     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.
!       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
!       *GNU* | *'with BFD'*)
! 	test "$with_gnu_ld" != no && break
! 	;;
!       *)
! 	test "$with_gnu_ld" != yes && break
! 	;;
!       esac
!     fi
!   done
!   IFS="$lt_save_ifs"
! else
!   lt_cv_path_LD="$LD" # Let the user override the test with a path.
! fi])
! LD="$lt_cv_path_LD"
! if test -n "$LD"; then
!   AC_MSG_RESULT($LD)
! else
!   AC_MSG_RESULT(no)
! fi
! test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
! AC_PROG_LD_GNU
! ])# AC_PROG_LD
! 
! 
! # AC_PROG_LD_GNU
! # --------------
! AC_DEFUN([AC_PROG_LD_GNU],
! [AC_REQUIRE([AC_PROG_EGREP])dnl
! AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
! [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
! case `"$LD" -v 2>&1 </dev/null` in
! *GNU* | *'with BFD'*)
!   lt_cv_prog_gnu_ld=yes
!   ;;
! *)
!   lt_cv_prog_gnu_ld=no
!   ;;
! esac])
! with_gnu_ld=$lt_cv_prog_gnu_ld
! ])# AC_PROG_LD_GNU
! 
! 
! # AC_PROG_LD_RELOAD_FLAG
! # ----------------------
! # find reload flag for linker
! #   -- PORTME Some linkers may need a different reload flag.
! AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
! [AC_CACHE_CHECK([for $LD option to reload object files],
!   lt_cv_ld_reload_flag,
!   [lt_cv_ld_reload_flag='-r'])
! reload_flag=$lt_cv_ld_reload_flag
! case $reload_flag in
! "" | " "*) ;;
! *) reload_flag=" $reload_flag" ;;
! esac
! reload_cmds='$LD$reload_flag -o $output$reload_objs'
! ])# AC_PROG_LD_RELOAD_FLAG
! 
! 
! # AC_DEPLIBS_CHECK_METHOD
! # -----------------------
! # how to check for library dependencies
! #  -- PORTME fill in with the dynamic library characteristics
! AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
! [AC_CACHE_CHECK([how to recognise dependent libraries],
! lt_cv_deplibs_check_method,
! [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 extended 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
! aix4* | aix5*)
!   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*)
!   # win32_libid is a shell function defined in ltmain.sh
!   lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
!   lt_cv_file_magic_cmd='win32_libid'
!   ;;
! 
! 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*)
!   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*)
!   lt_cv_file_magic_cmd=/usr/bin/file
!   case "$host_cpu" in
!   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_test_file=/usr/lib/hpux32/libc.so
!     ;;
!   hppa*64*)
!     [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
!     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
!     ;;
!   *)
!     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_test_file=/usr/lib/libc.sl
!     ;;
!   esac
!   ;;
! 
! irix5* | irix6* | nonstopux*)
!   case $host_os in
!   irix5* | nonstopux*)
!     # 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*)
!   case $host_cpu in
!   alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh*)
!     lt_cv_deplibs_check_method=pass_all ;;
!   *)
!     # glibc up to 2.1.1 does not perform some relocations on ARM
!     lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
!   esac
!   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
!   ;;
! 
! netbsd*)
!   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
!     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
!   else
!     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
!   fi
!   ;;
! 
! newos6*)
!   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
!   ;;
! 
! nto-qnx)
!   lt_cv_deplibs_check_method=unknown
!   ;;
! 
! openbsd*)
!   lt_cv_file_magic_cmd=/usr/bin/file
!   lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
!   if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
!     lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
!   else
!     lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
!   fi
!   ;;
! 
! 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
!   ;;
! 
! sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
!   case $host_vendor in
!   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*`
!     ;;
!   ncr)
!     lt_cv_deplibs_check_method=pass_all
!     ;;
!   sequent)
!     lt_cv_file_magic_cmd='/bin/file'
!     lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
!     ;;
!   sni)
!     lt_cv_file_magic_cmd='/bin/file'
!     lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
!     lt_cv_file_magic_test_file=/lib/libc.so
!     ;;
!   siemens)
!     lt_cv_deplibs_check_method=pass_all
!     ;;
!   esac
!   ;;
! 
! sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
!   lt_cv_deplibs_check_method=pass_all
!   ;;
! esac
! ])
! file_magic_cmd=$lt_cv_file_magic_cmd
! deplibs_check_method=$lt_cv_deplibs_check_method
! test -z "$deplibs_check_method" && deplibs_check_method=unknown
! ])# AC_DEPLIBS_CHECK_METHOD
! 
! 
! # AC_PROG_NM
! # ----------
! # find the path to a BSD-compatible name lister
! AC_DEFUN([AC_PROG_NM],
! [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
! [if test -n "$NM"; then
!   # Let the user override the test.
!   lt_cv_path_NM="$NM"
! else
!   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
!   for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
!     IFS="$lt_save_ifs"
!     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
!       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
!       */dev/null* | *'Invalid file or object type'*)
! 	lt_cv_path_NM="$tmp_nm -B"
! 	break
!         ;;
!       *)
! 	case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
! 	*/dev/null*)
! 	  lt_cv_path_NM="$tmp_nm -p"
! 	  break
! 	  ;;
! 	*)
! 	  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
! 	  ;;
! 	esac
!       esac
!     fi
!   done
!   IFS="$lt_save_ifs"
!   test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
! fi])
! NM="$lt_cv_path_NM"
! ])# AC_PROG_NM
! 
! 
! # AC_CHECK_LIBM
! # -------------
! # check for math library
! AC_DEFUN([AC_CHECK_LIBM],
! [AC_REQUIRE([AC_CANONICAL_HOST])dnl
! LIBM=
! case $host in
! *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
!   # These system don't have libm, or don't need it
!   ;;
! *-ncr-sysv4.3*)
!   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
!   AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
!   ;;
! *)
!   AC_CHECK_LIB(m, cos, LIBM="-lm")
!   ;;
! esac
! ])# AC_CHECK_LIBM
! 
! 
! # AC_LIBLTDL_CONVENIENCE([DIRECTORY])
! # -----------------------------------
! # sets LIBLTDL to the link flags for the libltdl convenience library and
! # LTDLINCL to the include flags for the libltdl header and adds
! # --enable-ltdl-convenience to the configure arguments.  Note that LIBLTDL
! # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
! # DIRECTORY is not provided, it is assumed to be `libltdl'.  LIBLTDL will
! # be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
! # '${top_srcdir}/' (note the single quotes!).  If your package is not
! # flat and you're not using automake, define top_builddir and
! # top_srcdir appropriately in the Makefiles.
! AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
! [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
!   case $enable_ltdl_convenience in
!   no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
!   "") enable_ltdl_convenience=yes
!       ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
!   esac
!   LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
!   LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
!   # For backwards non-gettext consistent compatibility...
!   INCLTDL="$LTDLINCL"
! ])# AC_LIBLTDL_CONVENIENCE
! 
! 
! # AC_LIBLTDL_INSTALLABLE([DIRECTORY])
! # -----------------------------------
! # sets LIBLTDL to the link flags for the libltdl installable library and
! # LTDLINCL to the include flags for the libltdl header and adds
! # --enable-ltdl-install to the configure arguments.  Note that LIBLTDL
! # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
! # DIRECTORY is not provided and an installed libltdl is not found, it is
! # assumed to be `libltdl'.  LIBLTDL will be prefixed with '${top_builddir}/'
! # and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
! # quotes!).  If your package is not flat and you're not using automake,
! # define top_builddir and top_srcdir appropriately in the Makefiles.
! # In the future, this macro may have to be called after AC_PROG_LIBTOOL.
! AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
! [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
!   AC_CHECK_LIB(ltdl, lt_dlinit,
!   [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
!   [if test x"$enable_ltdl_install" = xno; then
!      AC_MSG_WARN([libltdl not installed, but installation disabled])
!    else
!      enable_ltdl_install=yes
!    fi
!   ])
!   if test x"$enable_ltdl_install" = x"yes"; then
!     ac_configure_args="$ac_configure_args --enable-ltdl-install"
!     LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
!     LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
!   else
!     ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
!     LIBLTDL="-lltdl"
!     LTDLINCL=
!   fi
!   # For backwards non-gettext consistent compatibility...
!   INCLTDL="$LTDLINCL"
! ])# AC_LIBLTDL_INSTALLABLE
! 
! 
! # AC_LIBTOOL_CXX
! # --------------
! # enable support for C++ libraries
! AC_DEFUN([AC_LIBTOOL_CXX],
! [AC_REQUIRE([_LT_AC_LANG_CXX])
! ])# AC_LIBTOOL_CXX
! 
! 
! # _LT_AC_LANG_CXX
! # ---------------
! AC_DEFUN([_LT_AC_LANG_CXX],
! [AC_REQUIRE([AC_PROG_CXX])
! AC_REQUIRE([AC_PROG_CXXCPP])
! _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,CXX" | sed 's/^,//'`])
! ])# _LT_AC_LANG_CXX
! 
! 
! # AC_LIBTOOL_F77
! # --------------
! # enable support for Fortran 77 libraries
! AC_DEFUN([AC_LIBTOOL_F77],
! [AC_REQUIRE([_LT_AC_LANG_F77])
! ])# AC_LIBTOOL_F77
! 
! 
! # _LT_AC_LANG_F77
! # ---------------
! AC_DEFUN([_LT_AC_LANG_F77],
! [AC_REQUIRE([AC_PROG_F77])
! _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,F77" | sed 's/^,//'`])
! ])# _LT_AC_LANG_F77
! 
! 
! # AC_LIBTOOL_GCJ
! # --------------
! # enable support for GCJ libraries
! AC_DEFUN([AC_LIBTOOL_GCJ],
! [AC_REQUIRE([_LT_AC_LANG_GCJ])
! ])# AC_LIBTOOL_GCJ
! 
! 
! # _LT_AC_LANG_GCJ
! # ---------------
! AC_DEFUN([_LT_AC_LANG_GCJ],
! [AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
!   [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
!     [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
!       [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
! 	 [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
! 	   [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
! _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,GCJ" | sed 's/^,//'`])
! ])# _LT_AC_LANG_GCJ
! 
! 
! # AC_LIBTOOL_RC
! # --------------
! # enable support for Windows resource files
! AC_DEFUN([AC_LIBTOOL_RC],
! [AC_REQUIRE([LT_AC_PROG_RC])
! _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,RC" | sed 's/^,//'`])
! ])# AC_LIBTOOL_RC
! 
! 
! # AC_LIBTOOL_LANG_C_CONFIG
! # ------------------------
! # Ensure that the configuration vars for the C compiler are
! # suitably defined.  Those variables are subsequently used by
! # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
! AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
! AC_DEFUN([_LT_AC_LANG_C_CONFIG],
! [lt_save_CC="$CC"
! AC_LANG_PUSH(C)
! 
! # Source file extension for C test sources.
! ac_ext=c
! 
! # Object file extension for compiled C test sources.
! objext=o
! _LT_AC_TAGVAR(objext, $1)=$objext
! 
! # Code to be used in simple compile tests
! lt_simple_compile_test_code="int some_variable = 0;\n"
! 
! # Code to be used in simple link tests
! lt_simple_link_test_code='int main(){return(0);}\n'
! 
! _LT_AC_SYS_COMPILER
! 
! #
! # Check for any special shared library compilation flags.
! #
! _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
! if test "$GCC" = no; then
!   case $host_os in
!   sco3.2v5*)
!     _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
!     ;;
!   esac
! fi
! if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
!   AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
!   if echo "$old_CC $old_CFLAGS " | grep "[[ 	]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ 	]]" >/dev/null; then :
!   else
!     AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
!     _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
!   fi
! fi
! 
! 
! #
! # Check to make sure the static flag actually works.
! #
! AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
!   _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
!   $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
!   [],
!   [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
! 
! 
! AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
! AC_LIBTOOL_PROG_COMPILER_PIC($1)
! AC_LIBTOOL_PROG_CC_C_O($1)
! AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
! AC_LIBTOOL_PROG_LD_SHLIBS($1)
! AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
! AC_LIBTOOL_SYS_LIB_STRIP
! AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
! AC_LIBTOOL_DLOPEN_SELF($1)
! 
! # Report which librarie types wil actually be built
! AC_MSG_CHECKING([if libtool supports shared libraries])
! AC_MSG_RESULT([$can_build_shared])
! 
! AC_MSG_CHECKING([whether to build shared libraries])
! test "$can_build_shared" = "no" && enable_shared=no
! 
! # On AIX, shared libraries and static libraries use the same namespace, and
! # are all built from PIC.
! case "$host_os" in
! aix3*)
!   test "$enable_shared" = yes && enable_static=no
!   if test -n "$RANLIB"; then
!     archive_cmds="$archive_cmds~\$RANLIB \$lib"
!     postinstall_cmds='$RANLIB $lib'
!   fi
!   ;;
! 
! aix4*)
!   if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
!     test "$enable_shared" = yes && enable_static=no
!   fi
!   ;;
!   darwin* | rhapsody*)
!   if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then 
!     _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
!     case "$host_os" in
!     rhapsody* | darwin1.[[012]])
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
!       ;;
!     *) # Darwin 1.3 on
!       test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
!       ;;
!     esac
!     # FIXME: Relying on posixy $() will cause problems for
!     #        cross-compilation, but unfortunately the echo tests do not
!     #        yet detect zsh echo's removal of \ escapes.  Also zsh mangles
!     #	       `"' quotes if we put them in here... so don't!
! 		output_verbose_link_cmd='echo'
!     _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
!     _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
!     # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
! 		  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
! 		  _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
!     _LT_AC_TAGVAR(hardcode_direct, $1)=no
!     _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
!     _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
!     _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
!     _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
!     fi
!     ;;  
! esac
! AC_MSG_RESULT([$enable_shared])
! 
! AC_MSG_CHECKING([whether to build static libraries])
! # Make sure either enable_shared or enable_static is yes.
! test "$enable_shared" = yes || enable_static=yes
! AC_MSG_RESULT([$enable_static])
! 
! AC_LIBTOOL_CONFIG($1)
! 
! AC_LANG_POP
! CC="$lt_save_CC"
! ])# AC_LIBTOOL_LANG_C_CONFIG
! 
! 
! # AC_LIBTOOL_LANG_CXX_CONFIG
! # --------------------------
! # Ensure that the configuration vars for the C compiler are
! # suitably defined.  Those variables are subsequently used by
! # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
! AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
! AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
! [AC_LANG_PUSH(C++)
! AC_REQUIRE([AC_PROG_CXX])
! AC_REQUIRE([AC_PROG_CXXCPP])
! 
! _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
! _LT_AC_TAGVAR(allow_undefined_flag, $1)=
! _LT_AC_TAGVAR(always_export_symbols, $1)=no
! _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
! _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
! _LT_AC_TAGVAR(hardcode_direct, $1)=no
! _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
! _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
! _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
! _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
! _LT_AC_TAGVAR(hardcode_automatic, $1)=no
! _LT_AC_TAGVAR(module_cmds, $1)=
! _LT_AC_TAGVAR(module_expsym_cmds, $1)=
! _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
! _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
! _LT_AC_TAGVAR(no_undefined_flag, $1)=
! _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
! _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
! 
! # Dependencies to place before and after the object being linked:
! _LT_AC_TAGVAR(predep_objects, $1)=
! _LT_AC_TAGVAR(postdep_objects, $1)=
! _LT_AC_TAGVAR(predeps, $1)=
! _LT_AC_TAGVAR(postdeps, $1)=
! _LT_AC_TAGVAR(compiler_lib_search_path, $1)=
! 
! # Source file extension for C++ test sources.
! ac_ext=cc
! 
! # Object file extension for compiled C++ test sources.
! objext=o
! _LT_AC_TAGVAR(objext, $1)=$objext
! 
! # Code to be used in simple compile tests
! lt_simple_compile_test_code="int some_variable = 0;\n"
! 
! # Code to be used in simple link tests
! lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
! 
! # ltmain only uses $CC for tagged configurations so make sure $CC is set.
! _LT_AC_SYS_COMPILER
! 
! # Allow CC to be a program name with arguments.
! lt_save_CC=$CC
! lt_save_LD=$LD
! lt_save_GCC=$GCC
! GCC=$GXX
! lt_save_with_gnu_ld=$with_gnu_ld
! lt_save_path_LD=$lt_cv_path_LD
! if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
!   lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
! else
!   unset lt_cv_prog_gnu_ld
! fi
! if test -n "${lt_cv_path_LDCXX+set}"; then
!   lt_cv_path_LD=$lt_cv_path_LDCXX
! else
!   unset lt_cv_path_LD
! fi
! test -z "${LDCXX+set}" || LD=$LDCXX
! CC=${CXX-"c++"}
! compiler=$CC
! _LT_AC_TAGVAR(compiler, $1)=$CC
! cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
! 
! # We don't want -fno-exception wen compiling C++ code, so set the
! # no_builtin_flag separately
! if test "$GXX" = yes; then
!   _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
! else
!   _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
! fi
! 
! if test "$GXX" = yes; then
!   # Set up default GNU C++ configuration
! 
!   AC_PROG_LD
! 
!   # Check if GNU C++ uses GNU ld as the underlying linker, since the
!   # archiving commands below assume that GNU ld is being used.
!   if test "$with_gnu_ld" = yes; then
!     _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
!     _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
! 
!     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
!     _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
! 
!     # If archive_cmds runs LD, not CC, wlarc should be empty
!     # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
!     #     investigate it a little bit more. (MM)
!     wlarc='${wl}'
! 
!     # ancient GNU ld didn't support --whole-archive et. al.
!     if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
! 	grep 'no-whole-archive' > /dev/null; then
!       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
!     else
!       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
!     fi
!   else
!     with_gnu_ld=no
!     wlarc=
! 
!     # A generic and very simple default shared library creation
!     # command for GNU C++ for the case where it uses the native
!     # linker, instead of GNU ld.  If possible, this setting should
!     # overridden to take advantage of the native linker features on
!     # the platform it is being used on.
!     _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
!   fi
! 
!   # Commands to make compiler produce verbose output that lists
!   # what "hidden" libraries, object files and flags are used when
!   # linking a shared library.
!   output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
! 
! else
!   GXX=no
!   with_gnu_ld=no
!   wlarc=
! fi
! 
! # PORTME: fill in a description of your system's C++ link characteristics
! AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
! _LT_AC_TAGVAR(ld_shlibs, $1)=yes
! case $host_os in
!   aix3*)
!     # FIXME: insert proper C++ library support
!     _LT_AC_TAGVAR(ld_shlibs, $1)=no
!     ;;
!   aix4* | aix5*)
!     if test "$host_cpu" = ia64; then
!       # On IA64, the linker does run time linking by default, so we don't
!       # have to do anything special.
!       aix_use_runtimelinking=no
!       exp_sym_flag='-Bexport'
!       no_entry_flag=""
!     else
!       aix_use_runtimelinking=no
! 
!       # Test if we are trying to use run time linking or normal
!       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
!       # need to do runtime linking.
!       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
! 	for ld_flag in $LDFLAGS; do
! 	  case $ld_flag in
! 	  *-brtl*)
! 	    aix_use_runtimelinking=yes
! 	    break
! 	    ;;
! 	  esac
! 	done
!       esac
! 
!       exp_sym_flag='-bexport'
!       no_entry_flag='-bnoentry'
!     fi
! 
!     # When large executables or shared objects are built, AIX ld can
!     # have problems creating the table of contents.  If linking a library
!     # or program results in "error TOC overflow" add -mminimal-toc to
!     # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
!     # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
! 
!     _LT_AC_TAGVAR(archive_cmds, $1)=''
!     _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!     _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
!     _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
! 
!     if test "$GXX" = yes; then
!       case $host_os in aix4.[012]|aix4.[012].*)
!       # We only want to do this on AIX 4.2 and lower, the check
!       # below for broken collect2 doesn't work under 4.3+
! 	collect2name=`${CC} -print-prog-name=collect2`
! 	if test -f "$collect2name" && \
! 	   strings "$collect2name" | grep resolve_lib_name >/dev/null
! 	then
! 	  # We have reworked collect2
! 	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
! 	else
! 	  # We have old collect2
! 	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
! 	  # It fails to find uninstalled libraries when the uninstalled
! 	  # path is not listed in the libpath.  Setting hardcode_minus_L
! 	  # to unsupported forces relinking
! 	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
! 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
! 	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
! 	fi
!       esac
!       shared_flag='-shared'
!     else
!       # not using gcc
!       if test "$host_cpu" = ia64; then
! 	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
! 	# chokes on -Wl,-G. The following line is correct:
! 	shared_flag='-G'
!       else
! 	if test "$aix_use_runtimelinking" = yes; then
! 	  shared_flag='${wl}-G'
! 	else
! 	  shared_flag='${wl}-bM:SRE'
! 	fi
!       fi
!     fi
! 
!     # It seems that -bexpall does not export symbols beginning with
!     # underscore (_), so it is better to generate a list of symbols to export.
!     _LT_AC_TAGVAR(always_export_symbols, $1)=yes
!     if test "$aix_use_runtimelinking" = yes; then
!       # Warning - without using the other runtime loading flags (-brtl),
!       # -berok will link without error, but may produce a broken library.
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
!       # Determine the default libpath from the value encoded in an empty executable.
!       _LT_AC_SYS_LIBPATH_AIX
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
! 
!       _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
!      else
!       if test "$host_cpu" = ia64; then
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
!       else
! 	# Determine the default libpath from the value encoded in an empty executable.
! 	_LT_AC_SYS_LIBPATH_AIX
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
! 	# Warning - without using the other run time loading flags,
! 	# -berok will link without error, but may produce a broken library.
! 	_LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
! 	# -bexpall does not export symbols beginning with underscore (_)
! 	_LT_AC_TAGVAR(always_export_symbols, $1)=yes
! 	# Exported symbols can be pulled into shared objects from archives
! 	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
! 	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
! 	# This is similar to how AIX traditionally builds it's shared libraries.
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
!       fi
!     fi
!     ;;
!   chorus*)
!     case $cc_basename in
!       *)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!     esac
!     ;;
! 
!   cygwin* | mingw* | pw32*)
!     # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
!     # as there is no search path for DLLs.
!     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!     _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
!     _LT_AC_TAGVAR(always_export_symbols, $1)=no
!     _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
! 
!     if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
!       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
!       # If the export-symbols file already is a .def file (1st line
!       # is EXPORTS), use it as is; otherwise, prepend...
!       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
! 	cp $export_symbols $output_objdir/$soname.def;
!       else
! 	echo EXPORTS > $output_objdir/$soname.def;
! 	cat $export_symbols >> $output_objdir/$soname.def;
!       fi~
!       $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
!     else
!       _LT_AC_TAGVAR(ld_shlibs, $1)=no
!     fi
!   ;;
! 
!   darwin* | rhapsody*)
!    if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then 
!     _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
!     case "$host_os" in
!     rhapsody* | darwin1.[[012]])
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
!       ;;
!     *) # Darwin 1.3 on
!       test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
!       ;;
!     esac
!     	lt_int_apple_cc_single_mod=no
!     	output_verbose_link_cmd='echo'
!     	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
!     	  lt_int_apple_cc_single_mod=yes
!     	fi
!     	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
!     	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
!     	else
!         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
!       fi
!       _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
! 
!     # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
!       if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
!         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
!       else
!         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
!       fi
!         _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
!     _LT_AC_TAGVAR(hardcode_direct, $1)=no
!     _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
!     _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
!     _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
!     _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
!    fi 
!     ;;
! 
!   dgux*)
!     case $cc_basename in
!       ec++)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       ghcx)
! 	# Green Hills C++ Compiler
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       *)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!     esac
!     ;;
!   freebsd[12]*)
!     # C++ shared libraries reported to be fairly broken before switch to ELF
!     _LT_AC_TAGVAR(ld_shlibs, $1)=no
!     ;;
!   freebsd-elf*)
!     _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
!     ;;
!   freebsd*)
!     # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
!     # conventions
!     _LT_AC_TAGVAR(ld_shlibs, $1)=yes
!     ;;
!   gnu*)
!     ;;
!   hpux9*)
!     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
!     _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
!     _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
!     _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!     _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
! 				# but as the default
! 				# location of the library.
! 
!     case $cc_basename in
!     CC)
!       # FIXME: insert proper C++ library support
!       _LT_AC_TAGVAR(ld_shlibs, $1)=no
!       ;;
!     aCC)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
!       # Commands to make compiler produce verbose output that lists
!       # what "hidden" libraries, object files and flags are used when
!       # linking a shared library.
!       #
!       # There doesn't appear to be a way to prevent this compiler from
!       # explicitly linking system object files so we need to strip them
!       # from the output so that they don't get included in the library
!       # dependencies.
!       output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
!       ;;
!     *)
!       if test "$GXX" = yes; then
!         _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
!       else
!         # FIXME: insert proper C++ library support
!         _LT_AC_TAGVAR(ld_shlibs, $1)=no
!       fi
!       ;;
!     esac
!     ;;
!   hpux10*|hpux11*)
!     if test $with_gnu_ld = no; then
!       case "$host_cpu" in
!       hppa*64*)
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
! 	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
!         ;;
!       ia64*)
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!         ;;
!       *)
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
! 	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
!         ;;
!       esac
!     fi
!     case "$host_cpu" in
!     hppa*64*)
!       _LT_AC_TAGVAR(hardcode_direct, $1)=no
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
!     ia64*)
!       _LT_AC_TAGVAR(hardcode_direct, $1)=no
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
! 					      # but as the default
! 					      # location of the library.
!       ;;
!     *)
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
! 					      # but as the default
! 					      # location of the library.
!       ;;
!     esac
! 
!     case $cc_basename in
!       CC)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       aCC)
! 	case "$host_cpu" in
! 	hppa*64*|ia64*)
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
! 	  ;;
! 	*)
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
! 	  ;;
! 	esac
! 	# Commands to make compiler produce verbose output that lists
! 	# what "hidden" libraries, object files and flags are used when
! 	# linking a shared library.
! 	#
! 	# There doesn't appear to be a way to prevent this compiler from
! 	# explicitly linking system object files so we need to strip them
! 	# from the output so that they don't get included in the library
! 	# dependencies.
! 	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
! 	;;
!       *)
! 	if test "$GXX" = yes; then
! 	  if test $with_gnu_ld = no; then
! 	    case "$host_cpu" in
! 	    ia64*|hppa*64*)
! 	      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
! 	      ;;
! 	    *)
! 	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
! 	      ;;
! 	    esac
! 	  fi
! 	else
! 	  # FIXME: insert proper C++ library support
! 	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	fi
! 	;;
!     esac
!     ;;
!   irix5* | irix6*)
!     case $cc_basename in
!       CC)
! 	# SGI C++
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
! 
! 	# Archives containing C++ object files must be created using
! 	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
! 	# necessary to make sure instantiated templates are included
! 	# in the archive.
! 	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
! 	;;
!       *)
! 	if test "$GXX" = yes; then
! 	  if test "$with_gnu_ld" = no; then
! 	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
! 	  else
! 	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
! 	  fi
! 	fi
! 	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
! 	;;
!     esac
!     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
!     _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
!     ;;
!   linux*)
!     case $cc_basename in
!       KCC)
! 	# Kuck and Associates, Inc. (KAI) C++ Compiler
! 
! 	# KCC will only create a shared library if the output file
! 	# ends with ".so" (or ".sl" for HP-UX), so rename the library
! 	# to its proper name (with version) after linking.
! 	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
! 	# Commands to make compiler produce verbose output that lists
! 	# what "hidden" libraries, object files and flags are used when
! 	# linking a shared library.
! 	#
! 	# There doesn't appear to be a way to prevent this compiler from
! 	# explicitly linking system object files so we need to strip them
! 	# from the output so that they don't get included in the library
! 	# dependencies.
! 	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
! 
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
! 	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
! 
! 	# Archives containing C++ object files must be created using
! 	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
! 	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
! 	;;
!       icpc)
! 	# Intel C++
! 	with_gnu_ld=yes
! 	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
! 	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
! 	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
! 	;;
!       cxx)
! 	# Compaq C++
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
! 
! 	runpath_var=LD_RUN_PATH
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
! 	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 
! 	# Commands to make compiler produce verbose output that lists
! 	# what "hidden" libraries, object files and flags are used when
! 	# linking a shared library.
! 	#
! 	# There doesn't appear to be a way to prevent this compiler from
! 	# explicitly linking system object files so we need to strip them
! 	# from the output so that they don't get included in the library
! 	# dependencies.
! 	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
! 	;;
!     esac
!     ;;
!   lynxos*)
!     # FIXME: insert proper C++ library support
!     _LT_AC_TAGVAR(ld_shlibs, $1)=no
!     ;;
!   m88k*)
!     # FIXME: insert proper C++ library support
!     _LT_AC_TAGVAR(ld_shlibs, $1)=no
!     ;;
!   mvs*)
!     case $cc_basename in
!       cxx)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       *)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!     esac
!     ;;
!   netbsd*)
!     if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
!       wlarc=
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!     fi
!     # Workaround some broken pre-1.5 toolchains
!     output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
!     ;;
!   osf3*)
!     case $cc_basename in
!       KCC)
! 	# Kuck and Associates, Inc. (KAI) C++ Compiler
! 
! 	# KCC will only create a shared library if the output file
! 	# ends with ".so" (or ".sl" for HP-UX), so rename the library
! 	# to its proper name (with version) after linking.
! 	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
! 
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
! 	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 
! 	# Archives containing C++ object files must be created using
! 	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
! 	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
! 
! 	;;
!       RCC)
! 	# Rational C++ 2.4.1
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       cxx)
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
! 
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
! 	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 
! 	# Commands to make compiler produce verbose output that lists
! 	# what "hidden" libraries, object files and flags are used when
! 	# linking a shared library.
! 	#
! 	# There doesn't appear to be a way to prevent this compiler from
! 	# explicitly linking system object files so we need to strip them
! 	# from the output so that they don't get included in the library
! 	# dependencies.
! 	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
! 	;;
!       *)
! 	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
! 	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
! 
! 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
! 	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 
! 	  # Commands to make compiler produce verbose output that lists
! 	  # what "hidden" libraries, object files and flags are used when
! 	  # linking a shared library.
! 	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
! 
! 	else
! 	  # FIXME: insert proper C++ library support
! 	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	fi
! 	;;
!     esac
!     ;;
!   osf4* | osf5*)
!     case $cc_basename in
!       KCC)
! 	# Kuck and Associates, Inc. (KAI) C++ Compiler
! 
! 	# KCC will only create a shared library if the output file
! 	# ends with ".so" (or ".sl" for HP-UX), so rename the library
! 	# to its proper name (with version) after linking.
! 	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
! 
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
! 	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 
! 	# Archives containing C++ object files must be created using
! 	# the KAI C++ compiler.
! 	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
! 	;;
!       RCC)
! 	# Rational C++ 2.4.1
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       cxx)
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
! 	  echo "-hidden">> $lib.exp~
! 	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry $objdir/so_locations -o $lib~
! 	  $rm $lib.exp'
! 
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
! 	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 
! 	# Commands to make compiler produce verbose output that lists
! 	# what "hidden" libraries, object files and flags are used when
! 	# linking a shared library.
! 	#
! 	# There doesn't appear to be a way to prevent this compiler from
! 	# explicitly linking system object files so we need to strip them
! 	# from the output so that they don't get included in the library
! 	# dependencies.
! 	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
! 	;;
!       *)
! 	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
! 	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
! 	 _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
! 
! 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
! 	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 
! 	  # Commands to make compiler produce verbose output that lists
! 	  # what "hidden" libraries, object files and flags are used when
! 	  # linking a shared library.
! 	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
! 
! 	else
! 	  # FIXME: insert proper C++ library support
! 	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	fi
! 	;;
!     esac
!     ;;
!   psos*)
!     # FIXME: insert proper C++ library support
!     _LT_AC_TAGVAR(ld_shlibs, $1)=no
!     ;;
!   sco*)
!     _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
!     case $cc_basename in
!       CC)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       *)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!     esac
!     ;;
!   sunos4*)
!     case $cc_basename in
!       CC)
! 	# Sun C++ 4.x
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       lcc)
! 	# Lucid
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       *)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!     esac
!     ;;
!   solaris*)
!     case $cc_basename in
!       CC)
! 	# Sun C++ 4.2, 5.x and Centerline C++
! 	_LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
! 	$CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
! 
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
! 	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
! 	case $host_os in
! 	  solaris2.[0-5] | solaris2.[0-5].*) ;;
! 	  *)
! 	    # The C++ compiler is used as linker so we must use $wl
! 	    # flag to pass the commands to the underlying system
! 	    # linker.
! 	    # Supported since Solaris 2.6 (maybe 2.5.1?)
! 	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
! 	    ;;
! 	esac
! 	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
! 
! 	# Commands to make compiler produce verbose output that lists
! 	# what "hidden" libraries, object files and flags are used when
! 	# linking a shared library.
! 	#
! 	# There doesn't appear to be a way to prevent this compiler from
! 	# explicitly linking system object files so we need to strip them
! 	# from the output so that they don't get included in the library
! 	# dependencies.
! 	output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
! 
! 	# Archives containing C++ object files must be created using
! 	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
! 	# necessary to make sure instantiated templates are included
! 	# in the archive.
! 	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
! 	;;
!       gcx)
! 	# Green Hills C++ Compiler
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
! 
! 	# The C++ compiler must be used to create the archive.
! 	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
! 	;;
!       *)
! 	# GNU C++ compiler with Solaris linker
! 	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
! 	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
! 	  if $CC --version | grep -v '^2\.7' > /dev/null; then
! 	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
! 	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
! 		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
! 
! 	    # Commands to make compiler produce verbose output that lists
! 	    # what "hidden" libraries, object files and flags are used when
! 	    # linking a shared library.
! 	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
! 	  else
! 	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
! 	    # platform.
! 	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
! 	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
! 		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
! 
! 	    # Commands to make compiler produce verbose output that lists
! 	    # what "hidden" libraries, object files and flags are used when
! 	    # linking a shared library.
! 	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
! 	  fi
! 
! 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
! 	fi
! 	;;
!     esac
!     ;;
!   sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
!     _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
!     ;;
!   tandem*)
!     case $cc_basename in
!       NCC)
! 	# NonStop-UX NCC 3.20
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!       *)
! 	# FIXME: insert proper C++ library support
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	;;
!     esac
!     ;;
!   vxworks*)
!     # FIXME: insert proper C++ library support
!     _LT_AC_TAGVAR(ld_shlibs, $1)=no
!     ;;
!   *)
!     # FIXME: insert proper C++ library support
!     _LT_AC_TAGVAR(ld_shlibs, $1)=no
!     ;;
! esac
! AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
! test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
! 
! _LT_AC_TAGVAR(GCC, $1)="$GXX"
! _LT_AC_TAGVAR(LD, $1)="$LD"
! 
! AC_LIBTOOL_POSTDEP_PREDEP($1)
! AC_LIBTOOL_PROG_COMPILER_PIC($1)
! AC_LIBTOOL_PROG_CC_C_O($1)
! AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
! AC_LIBTOOL_PROG_LD_SHLIBS($1)
! AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
! AC_LIBTOOL_SYS_LIB_STRIP
! AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
! AC_LIBTOOL_DLOPEN_SELF($1)
! 
! AC_LIBTOOL_CONFIG($1)
! 
! AC_LANG_POP
! CC=$lt_save_CC
! LDCXX=$LD
! LD=$lt_save_LD
! GCC=$lt_save_GCC
! with_gnu_ldcxx=$with_gnu_ld
! with_gnu_ld=$lt_save_with_gnu_ld
! lt_cv_path_LDCXX=$lt_cv_path_LD
! lt_cv_path_LD=$lt_save_path_LD
! lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
! lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
! ])# AC_LIBTOOL_LANG_CXX_CONFIG
! 
! # AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
! # ------------------------
! # Figure out "hidden" library dependencies from verbose
! # compiler output when linking a shared library.
! # Parse the compiler output and extract the necessary
! # objects, libraries and library flags.
! AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
! dnl we can't use the lt_simple_compile_test_code here,
! dnl because it contains code intended for an executable,
! dnl not a library.  It's possible we should let each
! dnl tag define a new lt_????_link_test_code variable,
! dnl but it's only used here...
! ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
! int a;
! void foo (void) { a = 0; }
! EOF
! ],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
! class Foo
! {
! public:
!   Foo (void) { a = 0; }
! private:
!   int a;
! };
! EOF
! ],[$1],[F77],[cat > conftest.$ac_ext <<EOF
!       subroutine foo
!       implicit none
!       integer*4 a
!       a=0
!       return
!       end
! EOF
! ],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
! public class foo {
!   private int a;
!   public void bar (void) {
!     a = 0;
!   }
! };
! EOF
! ])
! dnl Parse the compiler output and extract the necessary
! dnl objects, libraries and library flags.
! if AC_TRY_EVAL(ac_compile); then
!   # Parse the compiler output and extract the necessary
!   # objects, libraries and library flags.
! 
!   # Sentinel used to keep track of whether or not we are before
!   # the conftest object file.
!   pre_test_object_deps_done=no
! 
!   # The `*' in the case matches for architectures that use `case' in
!   # $output_verbose_cmd can trigger glob expansion during the loop
!   # eval without this substitution.
!   output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
! 
!   for p in `eval $output_verbose_link_cmd`; do
!     case $p in
! 
!     -L* | -R* | -l*)
!        # Some compilers place space between "-{L,R}" and the path.
!        # Remove the space.
!        if test $p = "-L" \
! 	  || test $p = "-R"; then
! 	 prev=$p
! 	 continue
!        else
! 	 prev=
!        fi
! 
!        if test "$pre_test_object_deps_done" = no; then
! 	 case $p in
! 	 -L* | -R*)
! 	   # Internal compiler library paths should come after those
! 	   # provided the user.  The postdeps already come after the
! 	   # user supplied libs so there is no need to process them.
! 	   if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
! 	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
! 	   else
! 	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
! 	   fi
! 	   ;;
! 	 # The "-l" case would never come before the object being
! 	 # linked, so don't bother handling this case.
! 	 esac
!        else
! 	 if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
! 	   _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
! 	 else
! 	   _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
! 	 fi
!        fi
!        ;;
! 
!     *.$objext)
!        # This assumes that the test object file only shows up
!        # once in the compiler output.
!        if test "$p" = "conftest.$objext"; then
! 	 pre_test_object_deps_done=yes
! 	 continue
!        fi
! 
!        if test "$pre_test_object_deps_done" = no; then
! 	 if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
! 	   _LT_AC_TAGVAR(predep_objects, $1)="$p"
! 	 else
! 	   _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
! 	 fi
!        else
! 	 if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
! 	   _LT_AC_TAGVAR(postdep_objects, $1)="$p"
! 	 else
! 	   _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
! 	 fi
!        fi
!        ;;
! 
!     *) ;; # Ignore the rest.
! 
!     esac
!   done
! 
!   # Clean up.
!   rm -f a.out a.exe
! else
!   echo "libtool.m4: error: problem compiling $1 test program"
! fi
! 
! $rm -f confest.$objext
! 
! case " $_LT_AC_TAGVAR(postdeps, $1) " in
! *" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
! esac
! ])# AC_LIBTOOL_POSTDEP_PREDEP
! 
! # AC_LIBTOOL_LANG_F77_CONFIG
! # ------------------------
! # Ensure that the configuration vars for the C compiler are
! # suitably defined.  Those variables are subsequently used by
! # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
! AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
! AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
! [AC_REQUIRE([AC_PROG_F77])
! AC_LANG_PUSH(Fortran 77)
! 
! _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
! _LT_AC_TAGVAR(allow_undefined_flag, $1)=
! _LT_AC_TAGVAR(always_export_symbols, $1)=no
! _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
! _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
! _LT_AC_TAGVAR(hardcode_direct, $1)=no
! _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
! _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
! _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
! _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
! _LT_AC_TAGVAR(hardcode_automatic, $1)=no
! _LT_AC_TAGVAR(module_cmds, $1)=
! _LT_AC_TAGVAR(module_expsym_cmds, $1)=
! _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
! _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
! _LT_AC_TAGVAR(no_undefined_flag, $1)=
! _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
! _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
! 
! # Source file extension for f77 test sources.
! ac_ext=f
! 
! # Object file extension for compiled f77 test sources.
! objext=o
! _LT_AC_TAGVAR(objext, $1)=$objext
! 
! # Code to be used in simple compile tests
! lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
! 
! # Code to be used in simple link tests
! lt_simple_link_test_code="      program t\n      end\n"
! 
! # ltmain only uses $CC for tagged configurations so make sure $CC is set.
! _LT_AC_SYS_COMPILER
! 
! # Allow CC to be a program name with arguments.
! lt_save_CC="$CC"
! CC=${F77-"f77"}
! compiler=$CC
! _LT_AC_TAGVAR(compiler, $1)=$CC
! cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
! 
! AC_MSG_CHECKING([if libtool supports shared libraries])
! AC_MSG_RESULT([$can_build_shared])
! 
! AC_MSG_CHECKING([whether to build shared libraries])
! test "$can_build_shared" = "no" && enable_shared=no
! 
! # On AIX, shared libraries and static libraries use the same namespace, and
! # are all built from PIC.
! case "$host_os" in
! aix3*)
!   test "$enable_shared" = yes && enable_static=no
!   if test -n "$RANLIB"; then
!     archive_cmds="$archive_cmds~\$RANLIB \$lib"
!     postinstall_cmds='$RANLIB $lib'
!   fi
!   ;;
! aix4*)
!   test "$enable_shared" = yes && enable_static=no
!   ;;
! esac
! AC_MSG_RESULT([$enable_shared])
! 
! AC_MSG_CHECKING([whether to build static libraries])
! # Make sure either enable_shared or enable_static is yes.
! test "$enable_shared" = yes || enable_static=yes
! AC_MSG_RESULT([$enable_static])
! 
! test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
! 
! _LT_AC_TAGVAR(GCC, $1)="$G77"
! _LT_AC_TAGVAR(LD, $1)="$LD"
! 
! AC_LIBTOOL_PROG_COMPILER_PIC($1)
! AC_LIBTOOL_PROG_CC_C_O($1)
! AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
! AC_LIBTOOL_PROG_LD_SHLIBS($1)
! AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
! AC_LIBTOOL_SYS_LIB_STRIP
! AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
! 
! AC_LIBTOOL_CONFIG($1)
! 
! AC_LANG_POP
! CC="$lt_save_CC"
! ])# AC_LIBTOOL_LANG_F77_CONFIG
! 
! 
! # AC_LIBTOOL_LANG_GCJ_CONFIG
! # --------------------------
! # Ensure that the configuration vars for the C compiler are
! # suitably defined.  Those variables are subsequently used by
! # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
! AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
! AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
! [AC_LANG_SAVE
! 
! # Source file extension for Java test sources.
! ac_ext=java
! 
! # Object file extension for compiled Java test sources.
! objext=o
! _LT_AC_TAGVAR(objext, $1)=$objext
! 
! # Code to be used in simple compile tests
! lt_simple_compile_test_code="class foo {}\n"
! 
! # Code to be used in simple link tests
! lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
! 
! # ltmain only uses $CC for tagged configurations so make sure $CC is set.
! _LT_AC_SYS_COMPILER
! 
! # Allow CC to be a program name with arguments.
! lt_save_CC="$CC"
! CC=${GCJ-"gcj"}
! compiler=$CC
! _LT_AC_TAGVAR(compiler, $1)=$CC
! 
! # GCJ did not exist at the time GCC didn't implicitly link libc in.
! _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
! 
! AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
! AC_LIBTOOL_PROG_COMPILER_PIC($1)
! AC_LIBTOOL_PROG_CC_C_O($1)
! AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
! AC_LIBTOOL_PROG_LD_SHLIBS($1)
! AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
! AC_LIBTOOL_SYS_LIB_STRIP
! AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
! AC_LIBTOOL_DLOPEN_SELF($1)
! 
! AC_LIBTOOL_CONFIG($1)
! 
! AC_LANG_RESTORE
! CC="$lt_save_CC"
! ])# AC_LIBTOOL_LANG_GCJ_CONFIG
! 
! 
! # AC_LIBTOOL_LANG_RC_CONFIG
! # --------------------------
! # Ensure that the configuration vars for the Windows resource compiler are
! # suitably defined.  Those variables are subsequently used by
! # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
! AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
! AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
! [AC_LANG_SAVE
! 
! # Source file extension for RC test sources.
! ac_ext=rc
! 
! # Object file extension for compiled RC test sources.
! objext=o
! _LT_AC_TAGVAR(objext, $1)=$objext
! 
! # Code to be used in simple compile tests
! lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
! 
! # Code to be used in simple link tests
! lt_simple_link_test_code="$lt_simple_compile_test_code"
! 
! # ltmain only uses $CC for tagged configurations so make sure $CC is set.
! _LT_AC_SYS_COMPILER
! 
! # Allow CC to be a program name with arguments.
! lt_save_CC="$CC"
! CC=${RC-"windres"}
! compiler=$CC
! _LT_AC_TAGVAR(compiler, $1)=$CC
! _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
! 
! AC_LIBTOOL_CONFIG($1)
! 
! AC_LANG_RESTORE
! CC="$lt_save_CC"
! ])# AC_LIBTOOL_LANG_RC_CONFIG
! 
! 
! # AC_LIBTOOL_CONFIG([TAGNAME])
! # ----------------------------
! # If TAGNAME is not passed, then create an initial libtool script
! # with a default configuration from the untagged config vars.  Otherwise
! # add code to config.status for appending the configuration named by
! # TAGNAME from the matching tagged config vars.
! AC_DEFUN([AC_LIBTOOL_CONFIG],
! [# The else clause should only fire when bootstrapping the
! # libtool distribution, otherwise you forgot to ship ltmain.sh
! # with your package, and you will get complaints that there are
! # no rules to generate ltmain.sh.
! if test -f "$ltmain"; then
!   # See if we are running on zsh, and set the options which allow our commands through
!   # without removal of \ escapes.
!   if test -n "${ZSH_VERSION+set}" ; then
!     setopt NO_GLOB_SUBST
!   fi  
!   # Now quote all the things that may contain metacharacters while being
!   # careful not to overquote the AC_SUBSTed values.  We take copies of the
!   # variables and quote the copies for generation of the libtool script.
!   for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
!     libname_spec library_names_spec soname_spec extract_expsyms_cmds \
!     old_striplib striplib file_magic_cmd finish_cmds finish_eval \
!     deplibs_check_method reload_flag reload_cmds need_locks \
!     lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
!     lt_cv_sys_global_symbol_to_c_name_address \
!     sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
!     old_postinstall_cmds old_postuninstall_cmds \
!     _LT_AC_TAGVAR(compiler, $1) \
!     _LT_AC_TAGVAR(CC, $1) \
!     _LT_AC_TAGVAR(LD, $1) \
!     _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
!     _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
!     _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
!     _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
!     _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
!     _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
!     _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
!     _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
!     _LT_AC_TAGVAR(old_archive_cmds, $1) \
!     _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
!     _LT_AC_TAGVAR(predep_objects, $1) \
!     _LT_AC_TAGVAR(postdep_objects, $1) \
!     _LT_AC_TAGVAR(predeps, $1) \
!     _LT_AC_TAGVAR(postdeps, $1) \
!     _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
!     _LT_AC_TAGVAR(archive_cmds, $1) \
!     _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
!     _LT_AC_TAGVAR(postinstall_cmds, $1) \
!     _LT_AC_TAGVAR(postuninstall_cmds, $1) \
!     _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
!     _LT_AC_TAGVAR(allow_undefined_flag, $1) \
!     _LT_AC_TAGVAR(no_undefined_flag, $1) \
!     _LT_AC_TAGVAR(export_symbols_cmds, $1) \
!     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
!     _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
!     _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
!     _LT_AC_TAGVAR(hardcode_automatic, $1) \
!     _LT_AC_TAGVAR(module_cmds, $1) \
!     _LT_AC_TAGVAR(module_expsym_cmds, $1) \
!     _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
!     _LT_AC_TAGVAR(exclude_expsyms, $1) \
!     _LT_AC_TAGVAR(include_expsyms, $1); do
! 
!     case $var in
!     _LT_AC_TAGVAR(old_archive_cmds, $1) | \
!     _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
!     _LT_AC_TAGVAR(archive_cmds, $1) | \
!     _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
!     _LT_AC_TAGVAR(module_cmds, $1) | \
!     _LT_AC_TAGVAR(module_expsym_cmds, $1) | \   
!     _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
!     _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
!     extract_expsyms_cmds | reload_cmds | finish_cmds | \
!     postinstall_cmds | postuninstall_cmds | \
!     old_postinstall_cmds | old_postuninstall_cmds | \
!     sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
!       # Double-quote double-evaled strings.
!       eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
!       ;;
!     *)
!       eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
!       ;;
!     esac
!   done
! 
!   case $lt_echo in
!   *'\[$]0 --fallback-echo"')
!     lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
!     ;;
!   esac
! 
! ifelse([$1], [],
!   [cfgfile="${ofile}T"
!   trap "$rm \"$cfgfile\"; exit 1" 1 2 15
!   $rm -f "$cfgfile"
!   AC_MSG_NOTICE([creating $ofile])],
!   [cfgfile="$ofile"])
! 
!   cat <<__EOF__ >> "$cfgfile"
! ifelse([$1], [],
! [#! $SHELL
! 
! # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
! # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
! # NOTE: Changes made to this file will be lost: look at ltmain.sh.
! #
! # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
! # Free Software Foundation, Inc.
! #
! # This file is part of GNU Libtool:
! # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
! #
! # 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 02111-1307, 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.
! 
! # A sed program that does not truncate output.
! SED=$lt_SED
! 
! # Sed that helps us avoid accidentally triggering echo(1) options like -n.
! Xsed="$SED -e s/^X//"
! 
! # The HP-UX ksh and POSIX shell print the target directory to stdout
! # if CDPATH is set.
! if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
! 
! # The names of the tagged configurations supported by this script.
! available_tags=
! 
! # ### BEGIN LIBTOOL CONFIG],
! [# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
! 
! # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
! 
! # Shell to use when invoking shell scripts.
! SHELL=$lt_SHELL
! 
! # Whether or not to build shared libraries.
! build_libtool_libs=$enable_shared
! 
! # Whether or not to build static libraries.
! build_old_libs=$enable_static
! 
! # Whether or not to add -lc for building shared libraries.
! build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
! 
! # Whether or not to disallow shared libs when runtime libs are static
! allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
! 
! # Whether or not to optimize for fast installation.
! fast_install=$enable_fast_install
! 
! # The host system.
! host_alias=$host_alias
! host=$host
! 
! # An echo program that does not interpret backslashes.
! echo=$lt_echo
! 
! # The archiver.
! AR=$lt_AR
! AR_FLAGS=$lt_AR_FLAGS
! 
! # A C compiler.
! LTCC=$lt_LTCC
! 
! # A language-specific compiler.
! CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
! 
! # Is the compiler the GNU C compiler?
! with_gcc=$_LT_AC_TAGVAR(GCC, $1)
! 
! # An ERE matcher.
! EGREP=$lt_EGREP
! 
! # The linker used to build libraries.
! LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
! 
! # Whether we need hard or soft links.
! LN_S=$lt_LN_S
! 
! # A BSD-compatible nm program.
! NM=$lt_NM
! 
! # A symbol stripping program
! STRIP=$STRIP
! 
! # Used to examine libraries when file_magic_cmd begins "file"
! MAGIC_CMD=$MAGIC_CMD
! 
! # Used on cygwin: DLL creation program.
! DLLTOOL="$DLLTOOL"
! 
! # Used on cygwin: object dumper.
! OBJDUMP="$OBJDUMP"
! 
! # Used on cygwin: assembler.
! AS="$AS"
! 
! # The name of the directory that contains temporary libtool files.
! objdir=$objdir
! 
! # How to create reloadable object files.
! reload_flag=$lt_reload_flag
! reload_cmds=$lt_reload_cmds
! 
! # How to pass a linker flag through the compiler.
! wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
! 
! # Object file suffix (normally "o").
! objext="$ac_objext"
! 
! # Old archive suffix (normally "a").
! libext="$libext"
! 
! # Shared library suffix (normally ".so").
! shrext='$shrext'
! 
! # Executable file suffix (normally "").
! exeext="$exeext"
! 
! # Additional compiler flags for building library objects.
! pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
! pic_mode=$pic_mode
! 
! # What is the maximum length of a command?
! max_cmd_len=$lt_cv_sys_max_cmd_len
! 
! # Does compiler simultaneously support -c and -o options?
! compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
! 
! # Must we lock files when doing compilation ?
! need_locks=$lt_need_locks
! 
! # Do we need the lib prefix for modules?
! need_lib_prefix=$need_lib_prefix
! 
! # Do we need a version for libraries?
! need_version=$need_version
! 
! # Whether dlopen is supported.
! dlopen_support=$enable_dlopen
! 
! # Whether dlopen of programs is supported.
! dlopen_self=$enable_dlopen_self
! 
! # Whether dlopen of statically linked programs is supported.
! dlopen_self_static=$enable_dlopen_self_static
! 
! # Compiler flag to prevent dynamic linking.
! link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
! 
! # Compiler flag to turn off builtin functions.
! no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
! 
! # Compiler flag to allow reflexive dlopens.
! export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
! 
! # Compiler flag to generate shared objects directly from archives.
! whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
! 
! # Compiler flag to generate thread-safe objects.
! thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
! 
! # Library versioning type.
! version_type=$version_type
! 
! # Format of library name prefix.
! libname_spec=$lt_libname_spec
! 
! # List of archive names.  First name is the real one, the rest are links.
! # The last name is the one that the linker finds with -lNAME.
! library_names_spec=$lt_library_names_spec
! 
! # The coded name of the library, if different from the real name.
! soname_spec=$lt_soname_spec
! 
! # Commands used to build and install an old-style archive.
! RANLIB=$lt_RANLIB
! old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
! old_postinstall_cmds=$lt_old_postinstall_cmds
! old_postuninstall_cmds=$lt_old_postuninstall_cmds
! 
! # Create an old-style archive from a shared archive.
! old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
! 
! # Create a temporary old-style archive to link instead of a shared archive.
! old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
! 
! # Commands used to build and install a shared archive.
! archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
! archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
! postinstall_cmds=$lt_postinstall_cmds
! postuninstall_cmds=$lt_postuninstall_cmds
! 
! # Commands used to build a loadable module (assumed same as above if empty)
! module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
! module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
! 
! # Commands to strip libraries.
! old_striplib=$lt_old_striplib
! striplib=$lt_striplib
! 
! # Dependencies to place before the objects being linked to create a
! # shared library.
! predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
! 
! # Dependencies to place after the objects being linked to create a
! # shared library.
! postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
! 
! # Dependencies to place before the objects being linked to create a
! # shared library.
! predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
! 
! # Dependencies to place after the objects being linked to create a
! # shared library.
! postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
! 
! # The library search path used internally by the compiler when linking
! # a shared library.
! compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
! 
! # Method to check whether dependent libraries are shared objects.
! deplibs_check_method=$lt_deplibs_check_method
! 
! # Command to use when deplibs_check_method == file_magic.
! file_magic_cmd=$lt_file_magic_cmd
! 
! # Flag that allows shared libraries with undefined symbols to be built.
! allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
! 
! # Flag that forces no undefined symbols.
! no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
! 
! # Commands used to finish a libtool library installation in a directory.
! finish_cmds=$lt_finish_cmds
! 
! # Same as above, but a single script fragment to be evaled but not shown.
! finish_eval=$lt_finish_eval
! 
! # Take the output of nm and produce a listing of raw symbols and C names.
! global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
! 
! # Transform the output of nm in a proper C declaration
! global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
! 
! # Transform the output of nm in a C name address pair
! global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
! 
! # This is the shared library runtime path variable.
! runpath_var=$runpath_var
! 
! # This is the shared library path variable.
! shlibpath_var=$shlibpath_var
! 
! # Is shlibpath searched before the hard-coded library search path?
! shlibpath_overrides_runpath=$shlibpath_overrides_runpath
! 
! # How to hardcode a shared library path into an executable.
! hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
! 
! # Whether we should hardcode library paths into libraries.
! hardcode_into_libs=$hardcode_into_libs
! 
! # Flag to hardcode \$libdir into a binary during linking.
! # This must work even if \$libdir does not exist.
! hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
! 
! # If ld is used when linking, flag to hardcode \$libdir into
! # a binary during linking. This must work even if \$libdir does
! # not exist.
! hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
! 
! # Whether we need a single -rpath flag with a separated argument.
! hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
! 
! # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
! # resulting binary.
! hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
! 
! # Set to yes if using the -LDIR flag during linking hardcodes DIR into the
! # resulting binary.
! hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
! 
! # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
! # the resulting binary.
! hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
! 
! # Set to yes if building a shared library automatically hardcodes DIR into the library
! # and all subsequent libraries and executables linked against it.
! hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
! 
! # Variables whose values should be saved in libtool wrapper scripts and
! # restored at relink time.
! variables_saved_for_relink="$variables_saved_for_relink"
! 
! # Whether libtool must link a program against all its dependency libraries.
! link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
! 
! # Compile-time system search path for libraries
! sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
! 
! # Run-time system search path for libraries
! sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
! 
! # Fix the shell variable \$srcfile for the compiler.
! fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
! 
! # Set to yes if exported symbols are required.
! always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
! 
! # The commands to list exported symbols.
! export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
! 
! # The commands to extract the exported symbol list from a shared archive.
! extract_expsyms_cmds=$lt_extract_expsyms_cmds
! 
! # Symbols that should not be listed in the preloaded symbols.
! exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
! 
! # Symbols that must always be exported.
! include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
! 
! ifelse([$1],[],
! [# ### END LIBTOOL CONFIG],
! [# ### END LIBTOOL TAG CONFIG: $tagname])
! 
! __EOF__
! 
! ifelse([$1],[], [
!   case $host_os in
!   aix3*)
!     cat <<\EOF >> "$cfgfile"
! 
! # AIX sometimes has problems with the GCC collect2 program.  For some
! # reason, if we set the COLLECT_NAMES environment variable, the problems
! # vanish in a puff of smoke.
! if test "X${COLLECT_NAMES+set}" != Xset; then
!   COLLECT_NAMES=
!   export COLLECT_NAMES
! fi
! EOF
!     ;;
!   esac
! 
!   # We use sed instead of cat because bash on DJGPP gets confused if
!   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
!   # text mode, it properly converts lines to CR/LF.  This bash problem
!   # is reportedly fixed, but why not run on old versions too?
!   sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
! 
!   mv -f "$cfgfile" "$ofile" || \
!     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
!   chmod +x "$ofile"
! ])
! else
!   # If there is no Makefile yet, we rely on a make rule to execute
!   # `config.status --recheck' to rerun these tests and create the
!   # libtool script then.
!   test -f Makefile && make "$ltmain"
! fi
! ])# AC_LIBTOOL_CONFIG
! 
! 
! # AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
! # -------------------------------------------
! AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
! [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
! 
! _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
! 
! if test "$GCC" = yes; then
!   _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
! 
!   AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
!     lt_cv_prog_compiler_rtti_exceptions,
!     [-fno-rtti -fno-exceptions], [],
!     [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
! fi
! ])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
! 
! 
! # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
! # ---------------------------------
! AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
! [AC_REQUIRE([AC_CANONICAL_HOST])
! AC_REQUIRE([AC_PROG_NM])
! AC_REQUIRE([AC_OBJEXT])
! # Check for command to grab the raw symbol name followed by C symbol from nm.
! AC_MSG_CHECKING([command to parse $NM output from $compiler object])
! AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
! [
! # These are sane defaults that work on at least a few old systems.
! # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
! 
! # Character class describing NM global symbol codes.
! symcode='[[BCDEGRST]]'
! 
! # Regexp to match symbols that can be accessed directly from C.
! sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
! 
! # Transform the above into a raw symbol and a C symbol.
! symxfrm='\1 \2\3 \3'
! 
! # Transform an extracted symbol line into a proper C declaration
! lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
! 
! # Transform an extracted symbol line into symbol name and symbol address
! lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
! 
! # Define system-specific variables.
! case $host_os in
! aix*)
!   symcode='[[BCDT]]'
!   ;;
! cygwin* | mingw* | pw32*)
!   symcode='[[ABCDGISTW]]'
!   ;;
! hpux*) # Its linker distinguishes data from code symbols
!   if test "$host_cpu" = ia64; then
!     symcode='[[ABCDEGRST]]'
!   fi
!   lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
!   lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
!   ;;
! irix* | nonstopux*)
!   symcode='[[BCDEGRST]]'
!   ;;
! osf*)
!   symcode='[[BCDEGQRST]]'
!   ;;
! solaris* | sysv5*)
!   symcode='[[BDT]]'
!   ;;
! sysv4)
!   symcode='[[DFNSTU]]'
!   ;;
! esac
! 
! # Handle CRLF in mingw tool chain
! opt_cr=
! case $build_os in
! mingw*)
!   opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
!   ;;
! esac
! 
! # If we're using GNU nm, then use its standard symbol codes.
! case `$NM -V 2>&1` in
! *GNU* | *'with BFD'*)
!   symcode='[[ABCDGISTW]]' ;;
! esac
! 
! # Try without a prefix undercore, then with it.
! for ac_symprfx in "" "_"; do
! 
!   # Write the raw and C identifiers.
!   lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
! 
!   # Check to see that the pipe works correctly.
!   pipe_works=no
! 
!   rm -f conftest*
!   cat > conftest.$ac_ext <<EOF
! #ifdef __cplusplus
! extern "C" {
! #endif
! char nm_test_var;
! void nm_test_func(){}
! #ifdef __cplusplus
! }
! #endif
! int main(){nm_test_var='a';nm_test_func();return(0);}
! EOF
! 
!   if AC_TRY_EVAL(ac_compile); then
!     # Now try to grab the symbols.
!     nlist=conftest.nm
!     if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
!       # Try sorting and uniquifying the output.
!       if sort "$nlist" | uniq > "$nlist"T; then
! 	mv -f "$nlist"T "$nlist"
!       else
! 	rm -f "$nlist"T
!       fi
! 
!       # Make sure that we snagged all the symbols we need.
!       if grep ' nm_test_var$' "$nlist" >/dev/null; then
! 	if grep ' nm_test_func$' "$nlist" >/dev/null; then
! 	  cat <<EOF > conftest.$ac_ext
! #ifdef __cplusplus
! extern "C" {
! #endif
! 
! EOF
! 	  # Now generate the symbol file.
! 	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
! 
! 	  cat <<EOF >> conftest.$ac_ext
! #if defined (__STDC__) && __STDC__
! # define lt_ptr_t void *
! #else
! # define lt_ptr_t char *
! # define const
! #endif
! 
! /* The mapping between symbol names and symbols. */
! const struct {
!   const char *name;
!   lt_ptr_t address;
! }
! lt_preloaded_symbols[[]] =
! {
! EOF
! 	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
! 	  cat <<\EOF >> conftest.$ac_ext
!   {0, (lt_ptr_t) 0}
! };
! 
! #ifdef __cplusplus
! }
! #endif
! EOF
! 	  # Now try linking the two files.
! 	  mv conftest.$ac_objext conftstm.$ac_objext
! 	  lt_save_LIBS="$LIBS"
! 	  lt_save_CFLAGS="$CFLAGS"
! 	  LIBS="conftstm.$ac_objext"
! 	  CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
! 	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
! 	    pipe_works=yes
! 	  fi
! 	  LIBS="$lt_save_LIBS"
! 	  CFLAGS="$lt_save_CFLAGS"
! 	else
! 	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
! 	fi
!       else
! 	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
!       fi
!     else
!       echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
!     fi
!   else
!     echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
!     cat conftest.$ac_ext >&5
!   fi
!   rm -f conftest* conftst*
! 
!   # Do not use the global_symbol_pipe unless it works.
!   if test "$pipe_works" = yes; then
!     break
!   else
!     lt_cv_sys_global_symbol_pipe=
!   fi
! done
! ])
! if test -z "$lt_cv_sys_global_symbol_pipe"; then
!   lt_cv_sys_global_symbol_to_cdecl=
! fi
! if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
!   AC_MSG_RESULT(failed)
! else
!   AC_MSG_RESULT(ok)
! fi
! ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
! 
! 
! # AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
! # ---------------------------------------
! AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
! [_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
! _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
! _LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
! 
! AC_MSG_CHECKING([for $compiler option to produce PIC])
!  ifelse([$1],[CXX],[
!   # C++ specific cases for pic, static, wl, etc.
!   if test "$GXX" = yes; then
!     _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
!     _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
! 
!     case $host_os in
!     aix*)
!       # All AIX code is PIC.
!       if test "$host_cpu" = ia64; then
! 	# AIX 5 now supports IA64 processor
! 	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
!       fi
!       ;;
!     amigaos*)
!       # FIXME: we need at least 68020 code to build shared libraries, but
!       # adding the `-m68020' flag to GCC prevents building anything better,
!       # like `-m68040'.
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
!       ;;
!     beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
!       # PIC is the default for these OSes.
!       ;;
!     mingw* | os2* | pw32*)
!       # This hack is so that the source file can tell whether it is being
!       # built for inclusion in a dll (and should export symbols for example).
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
!       ;;
!     darwin* | rhapsody*)
!       # PIC is the default on this platform
!       # Common symbols not allowed in MH_DYLIB files
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
!       ;;
!     *djgpp*)
!       # DJGPP does not support shared libraries at all
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
!       ;;
!     sysv4*MP*)
!       if test -d /usr/nec; then
! 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
!       fi
!       ;;
!     hpux*)
!       # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
!       # not for PA HP-UX.
!       case "$host_cpu" in
!       hppa*64*|ia64*)
! 	;;
!       *)
! 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
! 	;;
!       esac
!       ;;
!     *)
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
!       ;;
!     esac
!   else
!     case $host_os in
!       aix4* | aix5*)
! 	# All AIX code is PIC.
! 	if test "$host_cpu" = ia64; then
! 	  # AIX 5 now supports IA64 processor
! 	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
! 	else
! 	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
! 	fi
! 	;;
!       chorus*)
! 	case $cc_basename in
! 	cxch68)
! 	  # Green Hills C++ Compiler
! 	  # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
! 	  ;;
! 	esac
! 	;;
!       dgux*)
! 	case $cc_basename in
! 	  ec++)
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
! 	    ;;
! 	  ghcx)
! 	    # Green Hills C++ Compiler
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       freebsd*)
! 	# FreeBSD uses GNU C++
! 	;;
!       hpux9* | hpux10* | hpux11*)
! 	case $cc_basename in
! 	  CC)
! 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
! 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
! 	    if test "$host_cpu" != ia64; then
! 	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
! 	    fi
! 	    ;;
! 	  aCC)
! 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
! 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
! 	    case "$host_cpu" in
! 	    hppa*64*|ia64*)
! 	      # +Z the default
! 	      ;;
! 	    *)
! 	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
! 	      ;;
! 	    esac
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       irix5* | irix6* | nonstopux*)
! 	case $cc_basename in
! 	  CC)
! 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
! 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
! 	    # CC pic flag -KPIC is the default.
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       linux*)
! 	case $cc_basename in
! 	  KCC)
! 	    # KAI C++ Compiler
! 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
! 	    ;;
! 	  icpc)
! 	    # Intel C++
! 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
! 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
! 	    ;; 
! 	  cxx)
! 	    # Compaq C++
! 	    # Make sure the PIC flag is empty.  It appears that all Alpha
! 	    # Linux and Compaq Tru64 Unix objects are PIC.
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
! 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       lynxos*)
! 	;;
!       m88k*)
! 	;;
!       mvs*)
! 	case $cc_basename in
! 	  cxx)
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       netbsd*)
! 	;;
!       osf3* | osf4* | osf5*)
! 	case $cc_basename in
! 	  KCC)
! 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
! 	    ;;
! 	  RCC)
! 	    # Rational C++ 2.4.1
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
! 	    ;;
! 	  cxx)
! 	    # Digital/Compaq C++
! 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
! 	    # Make sure the PIC flag is empty.  It appears that all Alpha
! 	    # Linux and Compaq Tru64 Unix objects are PIC.
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
! 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       psos*)
! 	;;
!       sco*)
! 	case $cc_basename in
! 	  CC)
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       solaris*)
! 	case $cc_basename in
! 	  CC)
! 	    # Sun C++ 4.2, 5.x and Centerline C++
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
! 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
! 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
! 	    ;;
! 	  gcx)
! 	    # Green Hills C++ Compiler
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       sunos4*)
! 	case $cc_basename in
! 	  CC)
! 	    # Sun C++ 4.x
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
! 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
! 	    ;;
! 	  lcc)
! 	    # Lucid
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       tandem*)
! 	case $cc_basename in
! 	  NCC)
! 	    # NonStop-UX NCC 3.20
! 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
! 	    ;;
! 	  *)
! 	    ;;
! 	esac
! 	;;
!       unixware*)
! 	;;
!       vxworks*)
! 	;;
!       *)
! 	_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
! 	;;
!     esac
!   fi
! ],
! [
!   if test "$GCC" = yes; then
!     _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
!     _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
! 
!     case $host_os in
!       aix*)
!       # All AIX code is PIC.
!       if test "$host_cpu" = ia64; then
! 	# AIX 5 now supports IA64 processor
! 	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
!       fi
!       ;;
! 
!     amigaos*)
!       # FIXME: we need at least 68020 code to build shared libraries, but
!       # adding the `-m68020' flag to GCC prevents building anything better,
!       # like `-m68040'.
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
!       ;;
! 
!     beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
!       # PIC is the default for these OSes.
!       ;;
! 
!     mingw* | pw32* | os2*)
!       # This hack is so that the source file can tell whether it is being
!       # built for inclusion in a dll (and should export symbols for example).
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
!       ;;
! 
!     darwin* | rhapsody*)
!       # PIC is the default on this platform
!       # Common symbols not allowed in MH_DYLIB files
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
!       ;;
! 
!     msdosdjgpp*)
!       # Just because we use GCC doesn't mean we suddenly get shared libraries
!       # on systems that don't support them.
!       _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
!       enable_shared=no
!       ;;
! 
!     sysv4*MP*)
!       if test -d /usr/nec; then
! 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
!       fi
!       ;;
! 
!     hpux*)
!       # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
!       # not for PA HP-UX.
!       case "$host_cpu" in
!       hppa*64*|ia64*)
! 	# +Z the default
! 	;;
!       *)
! 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
! 	;;
!       esac
!       ;;
! 
!     *)
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
!       ;;
!     esac
!   else
!     # PORTME Check for flag to pass linker flags through the system compiler.
!     case $host_os in
!     aix*)
!       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
!       if test "$host_cpu" = ia64; then
! 	# AIX 5 now supports IA64 processor
! 	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
!       else
! 	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
!       fi
!       ;;
! 
!     mingw* | pw32* | os2*)
!       # This hack is so that the source file can tell whether it is being
!       # built for inclusion in a dll (and should export symbols for example).
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
!       ;;
! 
!     hpux9* | hpux10* | hpux11*)
!       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
!       # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
!       # not for PA HP-UX.
!       case "$host_cpu" in
!       hppa*64*|ia64*)
! 	# +Z the default
! 	;;
!       *)
! 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
! 	;;
!       esac
!       # Is there a better lt_prog_compiler_static that works with the bundled CC?
!       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
!       ;;
! 
!     irix5* | irix6* | nonstopux*)
!       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
!       # PIC (with -KPIC) is the default.
!       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
!       ;;
! 
!     newsos6)
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
!       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
!       ;;
! 
!     linux*)
!       case $CC in
!       icc|ecc)
! 	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
! 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
! 	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
!         ;;
!       ccc)
!         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
!         # All Alpha code is PIC.
!         _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
!         ;;
!       esac
!       ;;
! 
!     osf3* | osf4* | osf5*)
!       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
!       # All OSF/1 code is PIC.
!       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
!       ;;
! 
!     sco3.2v5*)
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
!       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
!       ;;
! 
!     solaris*)
!       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
!       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
!       ;;
! 
!     sunos4*)
!       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
!       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
!       ;;
! 
!     sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
!       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
!       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
!       ;;
! 
!     sysv4*MP*)
!       if test -d /usr/nec ;then
! 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
! 	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
!       fi
!       ;;
! 
!     uts4*)
!       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
!       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
!       ;;
! 
!     *)
!       _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
!       ;;
!     esac
!   fi
! ])
! AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
! 
! #
! # Check to make sure the PIC flag actually works.
! #
! if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
!   AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
!     _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
!     [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
!     [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
!      "" | " "*) ;;
!      *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
!      esac],
!     [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
!      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
! fi
! case "$host_os" in
!   # For platforms which do not support PIC, -DPIC is meaningless:
!   *djgpp*)
!     _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
!     ;;
!   *)
!     _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
!     ;;
! esac
! ])
! 
! 
! # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
! # ------------------------------------
! # See if the linker supports building shared libraries.
! AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
! [AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
! ifelse([$1],[CXX],[
!   _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
!   case $host_os in
!   aix4* | aix5*)
!     # If we're using GNU nm, then we don't want the "-C" option.
!     # -C means demangle to AIX nm, but means don't demangle with GNU nm
!     if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
!       _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
!     else
!       _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
!     fi
!     ;;
!   pw32*)
!     _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
!   ;;
!   cygwin* | mingw*)
!     _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
!   ;;
!   *)
!     _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
!   ;;
!   esac
! ],[
!   runpath_var=
!   _LT_AC_TAGVAR(allow_undefined_flag, $1)=
!   _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
!   _LT_AC_TAGVAR(archive_cmds, $1)=
!   _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
!   _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
!   _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
!   _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
!   _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
!   _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
!   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
!   _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
!   _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
!   _LT_AC_TAGVAR(hardcode_direct, $1)=no
!   _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
!   _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
!   _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
!   _LT_AC_TAGVAR(hardcode_automatic, $1)=no
!   _LT_AC_TAGVAR(module_cmds, $1)=
!   _LT_AC_TAGVAR(module_expsym_cmds, $1)=  
!   _LT_AC_TAGVAR(always_export_symbols, $1)=no
!   _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
!   # include_expsyms should be a list of space-separated symbols to be *always*
!   # included in the symbol list
!   _LT_AC_TAGVAR(include_expsyms, $1)=
!   # exclude_expsyms can be an extended regexp of symbols to exclude
!   # it will be wrapped by ` (' and `)$', so one must not match beginning or
!   # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
!   # as well as any symbol that contains `d'.
!   _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
!   # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
!   # platforms (ab)use it in PIC code, but their linkers get confused if
!   # the symbol is explicitly referenced.  Since portable code cannot
!   # rely on this symbol name, it's probably fine to never include it in
!   # preloaded symbol tables.
!   extract_expsyms_cmds=
! 
!   case $host_os in
!   cygwin* | mingw* | pw32*)
!     # FIXME: the MSVC++ port hasn't been tested in a loooong time
!     # When not using gcc, we currently assume that we are using
!     # Microsoft Visual C++.
!     if test "$GCC" != yes; then
!       with_gnu_ld=no
!     fi
!     ;;
!   openbsd*)
!     with_gnu_ld=no
!     ;;
!   esac
! 
!   _LT_AC_TAGVAR(ld_shlibs, $1)=yes
!   if test "$with_gnu_ld" = yes; then
!     # If archive_cmds runs LD, not CC, wlarc should be empty
!     wlarc='${wl}'
! 
!     # See if GNU ld supports shared libraries.
!     case $host_os in
!     aix3* | aix4* | aix5*)
!       # On AIX/PPC, the GNU linker is very broken
!       if test "$host_cpu" != ia64; then
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	cat <<EOF 1>&2
! 
! *** Warning: the GNU linker, at least up to release 2.9.1, is reported
! *** to be unable to reliably create shared libraries on AIX.
! *** Therefore, libtool is disabling shared libraries support.  If you
! *** really care for shared libraries, you may want to modify your PATH
! *** so that a non-GNU linker is found, and then restart.
! 
! EOF
!       fi
!       ;;
! 
!     amigaos*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
! 
!       # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
!       # that the semantics of dynamic libraries on AmigaOS, at least up
!       # to version 4, is to share data among multiple programs linked
!       # with the same dynamic library.  Since this doesn't match the
!       # behavior of shared libraries on other platforms, we can't use
!       # them.
!       _LT_AC_TAGVAR(ld_shlibs, $1)=no
!       ;;
! 
!     beos*)
!       if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
! 	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
! 	# support --undefined.  This deserves some investigation.  FIXME
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
!       else
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
!       fi
!       ;;
! 
!     cygwin* | mingw* | pw32*)
!       # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
!       # as there is no search path for DLLs.
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
!       _LT_AC_TAGVAR(always_export_symbols, $1)=no
!       _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
!       _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
! 
!       if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
!         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
! 	# If the export-symbols file already is a .def file (1st line
! 	# is EXPORTS), use it as is; otherwise, prepend...
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
! 	  cp $export_symbols $output_objdir/$soname.def;
! 	else
! 	  echo EXPORTS > $output_objdir/$soname.def;
! 	  cat $export_symbols >> $output_objdir/$soname.def;
! 	fi~
! 	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
!       else
! 	ld_shlibs=no
!       fi
!       ;;
! 
!     netbsd*)
!       if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
! 	wlarc=
!       else
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
!       fi
!       ;;
! 
!     solaris* | sysv5*)
!       if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
! 	cat <<EOF 1>&2
! 
! *** Warning: The releases 2.8.* of the GNU linker cannot reliably
! *** create shared libraries on Solaris systems.  Therefore, libtool
! *** is disabling shared libraries support.  We urge you to upgrade GNU
! *** binutils to release 2.9.1 or newer.  Another option is to modify
! *** your PATH or compiler configuration so that the native linker is
! *** used, and then restart.
! 
! EOF
!       elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
!       else
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
!       fi
!       ;;
! 
!     sunos4*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
!       wlarc=
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     *)
!       if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
!       else
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
!       fi
!       ;;
!     esac
! 
!     if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
!       runpath_var=LD_RUN_PATH
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
!       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
!       # ancient GNU ld didn't support --whole-archive et. al.
!       if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
!  	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
!       else
!   	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
!       fi
!     fi
!   else
!     # PORTME fill in a description of your system's linker (not GNU ld)
!     case $host_os in
!     aix3*)
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
!       _LT_AC_TAGVAR(always_export_symbols, $1)=yes
!       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
!       # Note: this linker hardcodes the directories in LIBPATH if there
!       # are no directories specified by -L.
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
!       if test "$GCC" = yes && test -z "$link_static_flag"; then
! 	# Neither direct hardcoding nor static linking is supported with a
! 	# broken collect2.
! 	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
!       fi
!       ;;
! 
!     aix4* | aix5*)
!       if test "$host_cpu" = ia64; then
! 	# On IA64, the linker does run time linking by default, so we don't
! 	# have to do anything special.
! 	aix_use_runtimelinking=no
! 	exp_sym_flag='-Bexport'
! 	no_entry_flag=""
!       else
! 	# If we're using GNU nm, then we don't want the "-C" option.
! 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
! 	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
! 	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
! 	else
! 	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
! 	fi
! 	aix_use_runtimelinking=no
! 
! 	# Test if we are trying to use run time linking or normal
! 	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
! 	# need to do runtime linking.
! 	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
! 	  for ld_flag in $LDFLAGS; do
!   	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
!   	    aix_use_runtimelinking=yes
!   	    break
!   	  fi
! 	  done
! 	esac
! 
! 	exp_sym_flag='-bexport'
! 	no_entry_flag='-bnoentry'
!       fi
! 
!       # When large executables or shared objects are built, AIX ld can
!       # have problems creating the table of contents.  If linking a library
!       # or program results in "error TOC overflow" add -mminimal-toc to
!       # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
!       # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
! 
!       _LT_AC_TAGVAR(archive_cmds, $1)=''
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
!       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
! 
!       if test "$GCC" = yes; then
! 	case $host_os in aix4.[012]|aix4.[012].*)
! 	# We only want to do this on AIX 4.2 and lower, the check
! 	# below for broken collect2 doesn't work under 4.3+
! 	  collect2name=`${CC} -print-prog-name=collect2`
! 	  if test -f "$collect2name" && \
!   	   strings "$collect2name" | grep resolve_lib_name >/dev/null
! 	  then
!   	  # We have reworked collect2
!   	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
! 	  else
!   	  # We have old collect2
!   	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
!   	  # It fails to find uninstalled libraries when the uninstalled
!   	  # path is not listed in the libpath.  Setting hardcode_minus_L
!   	  # to unsupported forces relinking
!   	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
!   	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!   	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
! 	  fi
! 	esac
! 	shared_flag='-shared'
!       else
! 	# not using gcc
! 	if test "$host_cpu" = ia64; then
!   	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
!   	# chokes on -Wl,-G. The following line is correct:
! 	  shared_flag='-G'
! 	else
!   	if test "$aix_use_runtimelinking" = yes; then
! 	    shared_flag='${wl}-G'
! 	  else
! 	    shared_flag='${wl}-bM:SRE'
!   	fi
! 	fi
!       fi
! 
!       # It seems that -bexpall does not export symbols beginning with
!       # underscore (_), so it is better to generate a list of symbols to export.
!       _LT_AC_TAGVAR(always_export_symbols, $1)=yes
!       if test "$aix_use_runtimelinking" = yes; then
! 	# Warning - without using the other runtime loading flags (-brtl),
! 	# -berok will link without error, but may produce a broken library.
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
!        # Determine the default libpath from the value encoded in an empty executable.
!        _LT_AC_SYS_LIBPATH_AIX
!        _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
!        else
! 	if test "$host_cpu" = ia64; then
! 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
! 	  _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
! 	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
! 	else
! 	 # Determine the default libpath from the value encoded in an empty executable.
! 	 _LT_AC_SYS_LIBPATH_AIX
! 	 _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
! 	  # Warning - without using the other run time loading flags,
! 	  # -berok will link without error, but may produce a broken library.
! 	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
! 	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
! 	  # -bexpall does not export symbols beginning with underscore (_)
! 	  _LT_AC_TAGVAR(always_export_symbols, $1)=yes
! 	  # Exported symbols can be pulled into shared objects from archives
! 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
! 	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
! 	  # This is similar to how AIX traditionally builds it's shared libraries.
! 	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
! 	fi
!       fi
!       ;;
! 
!     amigaos*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
!       # see comment about different semantics on the GNU ld section
!       _LT_AC_TAGVAR(ld_shlibs, $1)=no
!       ;;
! 
!     bsdi4*)
!       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
!       ;;
! 
!     cygwin* | mingw* | pw32*)
!       # When not using gcc, we currently assume that we are using
!       # Microsoft Visual C++.
!       # hardcode_libdir_flag_spec is actually meaningless, as there is
!       # no search path for DLLs.
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
!       # Tell ltmain to make .lib files, not .a files.
!       libext=lib
!       # Tell ltmain to make .dll files, not .so files.
!       shrext=".dll"
!       # FIXME: Setting linknames here is a bad hack.
!       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
!       # The linker will automatically build a .lib file if we build a DLL.
!       _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
!       # FIXME: Should let the user specify the lib program.
!       _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
!       fix_srcfile_path='`cygpath -w "$srcfile"`'
!       _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
!       ;;
! 
!     darwin* | rhapsody*)
!     if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then 
!       _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
!       case "$host_os" in
!       rhapsody* | darwin1.[[012]])
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
! 	;;
!       *) # Darwin 1.3 on
! 	test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
! 	;;
!       esac
!       # FIXME: Relying on posixy $() will cause problems for
!       #        cross-compilation, but unfortunately the echo tests do not
!       #        yet detect zsh echo's removal of \ escapes.  Also zsh mangles
!       #	       `"' quotes if we put them in here... so don't!
!     	lt_int_apple_cc_single_mod=no
!     	output_verbose_link_cmd='echo'
!     	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
!     	  lt_int_apple_cc_single_mod=yes
!     	fi
!     	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
!     	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
!     	else
!         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
!       fi
!       _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
!       # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
!         if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
!           _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
!         else
!           _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
!         fi
!           _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
!       _LT_AC_TAGVAR(hardcode_direct, $1)=no
!       _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
!       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
!       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
!     fi  
!       ;;
! 
!     dgux*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     freebsd1*)
!       _LT_AC_TAGVAR(ld_shlibs, $1)=no
!       ;;
! 
!     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
!     # support.  Future versions do this automatically, but an explicit c++rt0.o
!     # does not break anything, and helps significantly (at the cost of a little
!     # extra space).
!     freebsd2.2*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
!     freebsd2*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
!     freebsd*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     hpux9*)
!       if test "$GCC" = yes; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
!       else
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
!       fi
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
!       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
! 
!       # hardcode_minus_L: Not really in the search PATH,
!       # but as the default location of the library.
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
!       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
!       ;;
! 
!     hpux10* | hpux11*)
!       if test "$GCC" = yes -a "$with_gnu_ld" = no; then
! 	case "$host_cpu" in
! 	hppa*64*|ia64*)
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
! 	  ;;
! 	*)
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
! 	  ;;
! 	esac
!       else
! 	case "$host_cpu" in
! 	hppa*64*|ia64*)
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
! 	  ;;
! 	*)
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
! 	  ;;
! 	esac
!       fi
!       if test "$with_gnu_ld" = no; then
! 	case "$host_cpu" in
! 	hppa*64*)
! 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
! 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
! 	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
! 	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
! 	  ;;
! 	ia64*)
! 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
! 	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
! 	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
! 
! 	  # hardcode_minus_L: Not really in the search PATH,
! 	  # but as the default location of the library.
! 	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
! 	  ;;
! 	*)
! 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
! 	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
! 	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
! 	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
! 
! 	  # hardcode_minus_L: Not really in the search PATH,
! 	  # but as the default location of the library.
! 	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
! 	  ;;
! 	esac
!       fi
!       ;;
! 
!     irix5* | irix6* | nonstopux*)
!       if test "$GCC" = yes; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
!       else
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
!       fi
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
!       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
!       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
!       ;;
! 
!     netbsd*)
!       if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
!       else
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
!       fi
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     newsos6)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
!       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     openbsd*)
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
! 	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
!       else
!        case $host_os in
! 	 openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
! 	   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
! 	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
! 	   ;;
! 	 *)
! 	   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
! 	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
! 	   ;;
!        esac
!       fi
!       ;;
! 
!     os2*)
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
!       _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
!       _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
!       ;;
! 
!     osf3*)
!       if test "$GCC" = yes; then
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
!       else
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
!       fi
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
!       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
!       ;;
! 
!     osf4* | osf5*)	# as osf3* with the addition of -msym flag
!       if test "$GCC" = yes; then
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
!       else
! 	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
! 	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
! 
! 	# Both c and cxx compiler support -rpath directly
! 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
!       fi
!       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
!       ;;
! 
!     sco3.2v5*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
!       runpath_var=LD_RUN_PATH
!       hardcode_runpath_var=yes
!       ;;
! 
!     solaris*)
!       _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
!       if test "$GCC" = yes; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
! 	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
!       else
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
! 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
!   	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
!       fi
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       case $host_os in
!       solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
!       *) # Supported since Solaris 2.6 (maybe 2.5.1?)
! 	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
!       esac
!       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
!       ;;
! 
!     sunos4*)
!       if test "x$host_vendor" = xsequent; then
! 	# Use $CC to link under sequent, because it throws in some extra .o
! 	# files that make .init and .fini sections work.
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
!       else
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
!       fi
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     sysv4)
!       case $host_vendor in
! 	sni)
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
! 	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
! 	;;
! 	siemens)
! 	  ## LD is ld it makes a PLAMLIB
! 	  ## CC just makes a GrossModule.
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
! 	  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
! 	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
!         ;;
! 	motorola)
! 	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
! 	  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
! 	;;
!       esac
!       runpath_var='LD_RUN_PATH'
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     sysv4.3*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
!       ;;
! 
!     sysv4*MP*)
!       if test -d /usr/nec; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
! 	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
! 	runpath_var=LD_RUN_PATH
! 	hardcode_runpath_var=yes
! 	_LT_AC_TAGVAR(ld_shlibs, $1)=yes
!       fi
!       ;;
! 
!     sysv4.2uw2*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
!       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
!       _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       hardcode_runpath_var=yes
!       runpath_var=LD_RUN_PATH
!       ;;
! 
!    sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[[78]]* | unixware7*)
!       _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
!       if test "$GCC" = yes; then
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
!       else
! 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
!       fi
!       runpath_var='LD_RUN_PATH'
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     sysv5*)
!       _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
!       # $CC -shared without GNU ld will not create a library from C++
!       # object files and a static libstdc++, better avoid it by now
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
!       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
!   		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       runpath_var='LD_RUN_PATH'
!       ;;
! 
!     uts4*)
!       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
!       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
!       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
!       ;;
! 
!     *)
!       _LT_AC_TAGVAR(ld_shlibs, $1)=no
!       ;;
!     esac
!   fi
! ])
! AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
! test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
! 
! variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
! if test "$GCC" = yes; then
!   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
! fi
! 
! #
! # Do we need to explicitly link libc?
! #
! case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
! x|xyes)
!   # Assume -lc should be added
!   _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
! 
!   if test "$enable_shared" = yes && test "$GCC" = yes; then
!     case $_LT_AC_TAGVAR(archive_cmds, $1) in
!     *'~'*)
!       # FIXME: we may have to deal with multi-command sequences.
!       ;;
!     '$CC '*)
!       # Test whether the compiler implicitly links with -lc since on some
!       # systems, -lgcc has to come before -lc. If gcc already passes -lc
!       # to ld, don't add -lc before -lgcc.
!       AC_MSG_CHECKING([whether -lc should be explicitly linked in])
!       $rm conftest*
!       printf "$lt_simple_compile_test_code" > conftest.$ac_ext
!   
!       if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
!         soname=conftest
!         lib=conftest
!         libobjs=conftest.$ac_objext
!         deplibs=
!         wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
!         compiler_flags=-v
!         linker_flags=-v
!         verstring=
!         output_objdir=.
!         libname=conftest
!         lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
!         _LT_AC_TAGVAR(allow_undefined_flag, $1)=
!         if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
!         then
! 	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
!         else
! 	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
!         fi
!         _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
!       else
!         cat conftest.err 1>&5
!       fi
!       $rm conftest*
!       AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
!       ;;
!     esac
!   fi
!   ;;
! esac
! ])# AC_LIBTOOL_PROG_LD_SHLIBS
! 
! 
! # _LT_AC_FILE_LTDLL_C
! # -------------------
! # Be careful that the start marker always follows a newline.
! AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
! # /* ltdll.c starts here */
! # #define WIN32_LEAN_AND_MEAN
! # #include <windows.h>
! # #undef WIN32_LEAN_AND_MEAN
! # #include <stdio.h>
! #
! # #ifndef __CYGWIN__
! # #  ifdef __CYGWIN32__
! # #    define __CYGWIN__ __CYGWIN32__
! # #  endif
! # #endif
! #
! # #ifdef __cplusplus
! # extern "C" {
! # #endif
! # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
! # #ifdef __cplusplus
! # }
! # #endif
! #
! # #ifdef __CYGWIN__
! # #include <cygwin/cygwin_dll.h>
! # DECLARE_CYGWIN_DLL( DllMain );
! # #endif
! # HINSTANCE __hDllInstance_base;
! #
! # BOOL APIENTRY
! # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
! # {
! #   __hDllInstance_base = hInst;
! #   return TRUE;
! # }
! # /* ltdll.c ends here */
! ])# _LT_AC_FILE_LTDLL_C
! 
! 
! # _LT_AC_TAGVAR(VARNAME, [TAGNAME])
! # ---------------------------------
! AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
! 
! 
! # old names
! AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
! AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
! AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
! AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
! AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
! AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
! AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
! 
! # This is just to silence aclocal about the macro not being used
! ifelse([AC_DISABLE_FAST_INSTALL])
! 
! AC_DEFUN([LT_AC_PROG_GCJ],
! [AC_CHECK_TOOL(GCJ, gcj, no)
!   test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
!   AC_SUBST(GCJFLAGS)
! ])
! 
! AC_DEFUN([LT_AC_PROG_RC],
! [AC_CHECK_TOOL(RC, windres, no)
! ])
! 
! # NOTE: This macro has been submitted for inclusion into   #
! #  GNU Autoconf as AC_PROG_SED.  When it is available in   #
! #  a released version of Autoconf we should remove this    #
! #  macro and use it instead.                               #
! # LT_AC_PROG_SED
! # --------------
! # Check for a fully-functional sed program, that truncates
! # as few characters as possible.  Prefer GNU sed if found.
! AC_DEFUN([LT_AC_PROG_SED],
! [AC_MSG_CHECKING([for a sed that does not truncate output])
! AC_CACHE_VAL(lt_cv_path_SED,
! [# Loop through the user's path and test for sed and gsed.
! # Then use that list of sed's as ones to test for truncation.
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for lt_ac_prog in sed gsed; do
!     for ac_exec_ext in '' $ac_executable_extensions; do
!       if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
!         lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
!       fi
!     done
!   done
! done
! lt_ac_max=0
! lt_ac_count=0
! # Add /usr/xpg4/bin/sed as it is typically found on Solaris
! # along with /bin/sed that truncates output.
! for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
!   test ! -f $lt_ac_sed && break
!   cat /dev/null > conftest.in
!   lt_ac_count=0
!   echo $ECHO_N "0123456789$ECHO_C" >conftest.in
!   # Check for GNU sed and select it if it is found.
!   if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
!     lt_cv_path_SED=$lt_ac_sed
!     break
!   fi
!   while true; do
!     cat conftest.in conftest.in >conftest.tmp
!     mv conftest.tmp conftest.in
!     cp conftest.in conftest.nl
!     echo >>conftest.nl
!     $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
!     cmp -s conftest.out conftest.nl || break
!     # 10000 chars as input seems more than enough
!     test $lt_ac_count -gt 10 && break
!     lt_ac_count=`expr $lt_ac_count + 1`
!     if test $lt_ac_count -gt $lt_ac_max; then
!       lt_ac_max=$lt_ac_count
!       lt_cv_path_SED=$lt_ac_sed
!     fi
!   done
! done
! SED=$lt_cv_path_SED
! ])
! AC_MSG_RESULT([$SED])
! ])
! 
! # serial 6 AC_LIB_LTDL
! 
! # AC_WITH_LTDL
! # ------------
! # Clients of libltdl can use this macro to allow the installer to
! # choose between a shipped copy of the ltdl sources or a preinstalled
! # version of the library.
! AC_DEFUN([AC_WITH_LTDL],
! [AC_REQUIRE([AC_LIB_LTDL])
! AC_SUBST([LIBLTDL])
! AC_SUBST([INCLTDL])
! 
! # Unless the user asks us to check, assume no installed ltdl exists.
! use_installed_libltdl=no
! 
! AC_ARG_WITH([included_ltdl],
!     [  --with-included-ltdl    use the GNU ltdl sources included here])
! 
! if test "x$with_included_ltdl" != xyes; then
!   # We are not being forced to use the included libltdl sources, so
!   # decide whether there is a useful installed version we can use.
!   AC_CHECK_HEADER([ltdl.h],
!       [AC_CHECK_LIB([ltdl], [lt_dlcaller_register],
!           [with_included_ltdl=no],
!           [with_included_ltdl=yes])
!   ])
! fi
! 
! if test "x$enable_ltdl_install" != xyes; then
!   # If the user did not specify an installable libltdl, then default
!   # to a convenience lib.
!   AC_LIBLTDL_CONVENIENCE
! fi
! 
! if test "x$with_included_ltdl" = xno; then
!   # If the included ltdl is not to be used. then Use the
!   # preinstalled libltdl we found.
!   AC_DEFINE([HAVE_LTDL], 1,
!     [Define this if a modern libltdl is already installed])
!   LIBLTDL=-lltdl
! fi
! 
! # Report our decision...
! AC_MSG_CHECKING([whether to use included libltdl])
! AC_MSG_RESULT([$with_included_ltdl])
! 
! AC_CONFIG_SUBDIRS([libltdl])
! ])# AC_WITH_LTDL
! 
! 
! # AC_LIB_LTDL
! # -----------
! # Perform all the checks necessary for compilation of the ltdl objects
! #  -- including compiler checks and header checks.
! AC_DEFUN([AC_LIB_LTDL],
! [AC_PREREQ(2.50)
! AC_REQUIRE([AC_PROG_CC])
! AC_REQUIRE([AC_C_CONST])
! AC_REQUIRE([AC_HEADER_STDC])
! AC_REQUIRE([AC_HEADER_DIRENT])
! AC_REQUIRE([_LT_AC_CHECK_DLFCN])
! AC_REQUIRE([AC_LTDL_ENABLE_INSTALL])
! AC_REQUIRE([AC_LTDL_SHLIBEXT])
! AC_REQUIRE([AC_LTDL_SHLIBPATH])
! AC_REQUIRE([AC_LTDL_SYSSEARCHPATH])
! AC_REQUIRE([AC_LTDL_OBJDIR])
! AC_REQUIRE([AC_LTDL_DLPREOPEN])
! AC_REQUIRE([AC_LTDL_DLLIB])
! AC_REQUIRE([AC_LTDL_SYMBOL_USCORE])
! AC_REQUIRE([AC_LTDL_DLSYM_USCORE])
! AC_REQUIRE([AC_LTDL_SYS_DLOPEN_DEPLIBS])
! AC_REQUIRE([AC_LTDL_FUNC_ARGZ])
! 
! AC_CHECK_HEADERS([assert.h ctype.h errno.h malloc.h memory.h stdlib.h \
! 		  stdio.h unistd.h])
! AC_CHECK_HEADERS([dl.h sys/dl.h dld.h mach-o/dyld.h])
! AC_CHECK_HEADERS([string.h strings.h], [break])
! 
! AC_CHECK_FUNCS([strchr index], [break])
! AC_CHECK_FUNCS([strrchr rindex], [break])
! AC_CHECK_FUNCS([memcpy bcopy], [break])
! AC_CHECK_FUNCS([memmove strcmp])
! AC_CHECK_FUNCS([closedir opendir readdir])
! ])# AC_LIB_LTDL
! 
! 
! # AC_LTDL_ENABLE_INSTALL
! # ----------------------
! AC_DEFUN([AC_LTDL_ENABLE_INSTALL],
! [AC_ARG_ENABLE([ltdl-install],
!     [AC_HELP_STRING([--enable-ltdl-install], [install libltdl])])
! 
! AM_CONDITIONAL(INSTALL_LTDL, test x"${enable_ltdl_install-no}" != xno)
! AM_CONDITIONAL(CONVENIENCE_LTDL, test x"${enable_ltdl_convenience-no}" != xno)
! ])])# AC_LTDL_ENABLE_INSTALL
! 
! 
! # AC_LTDL_SYS_DLOPEN_DEPLIBS
! # --------------------------
! AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS],
! [AC_REQUIRE([AC_CANONICAL_HOST])
! AC_CACHE_CHECK([whether deplibs are loaded by dlopen],
!   [libltdl_cv_sys_dlopen_deplibs],
!   [# PORTME does your system automatically load deplibs for dlopen?
!   # or its logical equivalent (e.g. shl_load for HP-UX < 11)
!   # For now, we just catch OSes we know something about -- in the
!   # future, we'll try test this programmatically.
!   libltdl_cv_sys_dlopen_deplibs=unknown
!   case "$host_os" in
!   aix3*|aix4.1.*|aix4.2.*)
!     # Unknown whether this is true for these versions of AIX, but
!     # we want this `case' here to explicitly catch those versions.
!     libltdl_cv_sys_dlopen_deplibs=unknown
!     ;;
!   aix[[45]]*)
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;
!   darwin*)
!     # Assuming the user has installed a libdl from somewhere, this is true
!     # If you are looking for one http://www.opendarwin.org/projects/dlcompat
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;   
!   gnu*)
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;
!   hpux10*|hpux11*)
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;
!   irix[[12345]]*|irix6.[[01]]*)
!     # Catch all versions of IRIX before 6.2, and indicate that we don't
!     # know how it worked for any of those versions.
!     libltdl_cv_sys_dlopen_deplibs=unknown
!     ;;
!   irix*)
!     # The case above catches anything before 6.2, and it's known that
!     # at 6.2 and later dlopen does load deplibs.
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;
!   linux*)
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;
!   netbsd*)
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;
!   openbsd*)
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;
!   osf[[1234]]*)
!     # dlopen did load deplibs (at least at 4.x), but until the 5.x series,
!     # it did *not* use an RPATH in a shared library to find objects the
!     # library depends on, so we explictly say `no'.
!     libltdl_cv_sys_dlopen_deplibs=no
!     ;;
!   osf5.0|osf5.0a|osf5.1)
!     # dlopen *does* load deplibs and with the right loader patch applied
!     # it even uses RPATH in a shared library to search for shared objects
!     # that the library depends on, but there's no easy way to know if that
!     # patch is installed.  Since this is the case, all we can really
!     # say is unknown -- it depends on the patch being installed.  If
!     # it is, this changes to `yes'.  Without it, it would be `no'.
!     libltdl_cv_sys_dlopen_deplibs=unknown
!     ;;
!   osf*)
!     # the two cases above should catch all versions of osf <= 5.1.  Read
!     # the comments above for what we know about them.
!     # At > 5.1, deplibs are loaded *and* any RPATH in a shared library
!     # is used to find them so we can finally say `yes'.
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;
!   solaris*)
!     libltdl_cv_sys_dlopen_deplibs=yes
!     ;;
!   esac
!   ])
! if test "$libltdl_cv_sys_dlopen_deplibs" != yes; then
!  AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1],
!     [Define if the OS needs help to load dependent libraries for dlopen().])
! fi
! ])# AC_LTDL_SYS_DLOPEN_DEPLIBS
! 
! 
! # AC_LTDL_SHLIBEXT
! # ----------------
! AC_DEFUN([AC_LTDL_SHLIBEXT],
! [AC_REQUIRE([AC_LIBTOOL_SYS_DYNAMIC_LINKER])
! AC_CACHE_CHECK([which extension is used for loadable modules],
!   [libltdl_cv_shlibext],
! [
! # Here in libltdl for libgcj we don't build modules for darwin.
! # So we say no. Then the extension gets .dylib which is the right
! # thing for shared libraries on darwin.
! case "$host_os" in
! darwin*)
! 	module=no
! 	;;
! *)
! 	module=yes
! 	;;
! esac
! eval libltdl_cv_shlibext=$shrext
!   ])
! if test -n "$libltdl_cv_shlibext"; then
!   AC_DEFINE_UNQUOTED(LTDL_SHLIB_EXT, "$libltdl_cv_shlibext",
!     [Define to the extension used for shared libraries, say, ".so".])
! fi
! ])# AC_LTDL_SHLIBEXT
! 
! 
! # AC_LTDL_SHLIBPATH
! # -----------------
! AC_DEFUN([AC_LTDL_SHLIBPATH],
! [AC_REQUIRE([AC_LIBTOOL_SYS_DYNAMIC_LINKER])
! AC_CACHE_CHECK([which variable specifies run-time library path],
!   [libltdl_cv_shlibpath_var], [libltdl_cv_shlibpath_var="$shlibpath_var"])
! if test -n "$libltdl_cv_shlibpath_var"; then
!   AC_DEFINE_UNQUOTED(LTDL_SHLIBPATH_VAR, "$libltdl_cv_shlibpath_var",
!     [Define to the name of the environment variable that determines the dynamic library search path.])
! fi
! ])# AC_LTDL_SHLIBPATH
! 
! 
! # AC_LTDL_SYSSEARCHPATH
! # ---------------------
! AC_DEFUN([AC_LTDL_SYSSEARCHPATH],
! [AC_REQUIRE([AC_LIBTOOL_SYS_DYNAMIC_LINKER])
! AC_CACHE_CHECK([for the default library search path],
!   [libltdl_cv_sys_search_path],
!   [libltdl_cv_sys_search_path="$sys_lib_dlsearch_path_spec"])
! if test -n "$libltdl_cv_sys_search_path"; then
!   sys_search_path=
!   for dir in $libltdl_cv_sys_search_path; do
!     if test -z "$sys_search_path"; then
!       sys_search_path="$dir"
!     else
!       sys_search_path="$sys_search_path$PATH_SEPARATOR$dir"
!     fi
!   done
!   AC_DEFINE_UNQUOTED(LTDL_SYSSEARCHPATH, "$sys_search_path",
!     [Define to the system default library search path.])
! fi
! ])# AC_LTDL_SYSSEARCHPATH
! 
! 
! # AC_LTDL_OBJDIR
! # --------------
! AC_DEFUN([AC_LTDL_OBJDIR],
! [AC_CACHE_CHECK([for objdir],
!   [libltdl_cv_objdir],
!   [libltdl_cv_objdir="$objdir"
!   if test -n "$objdir"; then
!     :
!   else
!     rm -f .libs 2>/dev/null
!     mkdir .libs 2>/dev/null
!     if test -d .libs; then
!       libltdl_cv_objdir=.libs
!     else
!       # MS-DOS does not allow filenames that begin with a dot.
!       libltdl_cv_objdir=_libs
!     fi
!   rmdir .libs 2>/dev/null
!   fi
!   ])
! AC_DEFINE_UNQUOTED(LTDL_OBJDIR, "$libltdl_cv_objdir/",
!   [Define to the sub-directory in which libtool stores uninstalled libraries.])
! ])# AC_LTDL_OBJDIR
! 
! 
! # AC_LTDL_DLPREOPEN
! # -----------------
! AC_DEFUN([AC_LTDL_DLPREOPEN],
! [AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])
! AC_CACHE_CHECK([whether libtool supports -dlopen/-dlpreopen],
!   [libltdl_cv_preloaded_symbols],
!   [if test -n "$lt_cv_sys_global_symbol_pipe"; then
!     libltdl_cv_preloaded_symbols=yes
!   else
!     libltdl_cv_preloaded_symbols=no
!   fi
!   ])
! if test x"$libltdl_cv_preloaded_symbols" = xyes; then
!   AC_DEFINE(HAVE_PRELOADED_SYMBOLS, 1,
!     [Define if libtool can extract symbol lists from object files.])
! fi
! ])# AC_LTDL_DLPREOPEN
! 
! 
! # AC_LTDL_DLLIB
! # -------------
! AC_DEFUN([AC_LTDL_DLLIB],
! [LIBADD_DL=
! AC_SUBST(LIBADD_DL)
! AC_LANG_PUSH([C])
! 
! AC_CHECK_FUNC([shl_load],
!       [AC_DEFINE([HAVE_SHL_LOAD], [1],
! 		 [Define if you have the shl_load function.])],
!   [AC_CHECK_LIB([dld], [shl_load],
! 	[AC_DEFINE([HAVE_SHL_LOAD], [1],
! 		   [Define if you have the shl_load function.])
! 	LIBADD_DL="$LIBADD_DL -ldld"],
!     [AC_CHECK_LIB([dl], [dlopen],
! 	  [AC_DEFINE([HAVE_LIBDL], [1],
! 		     [Define if you have the libdl library or equivalent.])
! 	        LIBADD_DL="-ldl" libltdl_cv_lib_dl_dlopen="yes"],
!       [AC_TRY_LINK([#if HAVE_DLFCN_H
! #  include <dlfcn.h>
! #endif
!       ],
! 	[dlopen(0, 0);],
! 	    [AC_DEFINE([HAVE_LIBDL], [1],
! 		             [Define if you have the libdl library or equivalent.]) libltdl_cv_func_dlopen="yes"],
! 	[AC_CHECK_LIB([svld], [dlopen],
! 	      [AC_DEFINE([HAVE_LIBDL], [1],
! 			 [Define if you have the libdl library or equivalent.])
! 	            LIBADD_DL="-lsvld" libltdl_cv_func_dlopen="yes"],
! 	  [AC_CHECK_LIB([dld], [dld_link],
! 	        [AC_DEFINE([HAVE_DLD], [1],
! 			   [Define if you have the GNU dld library.])
! 	 	LIBADD_DL="$LIBADD_DL -ldld"],
! 	 	[AC_CHECK_FUNC([_dyld_func_lookup],
! 	 	       [AC_DEFINE([HAVE_DYLD], [1],
! 	 	          [Define if you have the _dyld_func_lookup function.])])
!           ])
!         ])
!       ])
!     ])
!   ])
! ])
! 
! if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes
! then
!   lt_save_LIBS="$LIBS"
!   LIBS="$LIBS $LIBADD_DL"
!   AC_CHECK_FUNCS([dlerror])
!   LIBS="$lt_save_LIBS"
! fi
! AC_LANG_POP
! ])# AC_LTDL_DLLIB
! 
! 
! # AC_LTDL_SYMBOL_USCORE
! # ---------------------
! # does the compiler prefix global symbols with an underscore?
! AC_DEFUN([AC_LTDL_SYMBOL_USCORE],
! [AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])
! AC_CACHE_CHECK([for _ prefix in compiled symbols],
!   [ac_cv_sys_symbol_underscore],
!   [ac_cv_sys_symbol_underscore=no
!   cat > conftest.$ac_ext <<EOF
! void nm_test_func(){}
! int main(){nm_test_func;return 0;}
! EOF
!   if AC_TRY_EVAL(ac_compile); then
!     # Now try to grab the symbols.
!     ac_nlist=conftest.nm
!     if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
!       # See whether the symbols have a leading underscore.
!       if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
!         ac_cv_sys_symbol_underscore=yes
!       else
!         if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
! 	  :
!         else
! 	  echo "configure: cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
!         fi
!       fi
!     else
!       echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
!     fi
!   else
!     echo "configure: failed program was:" >&AC_FD_CC
!     cat conftest.c >&AC_FD_CC
!   fi
!   rm -rf conftest*
!   ])
! ])# AC_LTDL_SYMBOL_USCORE
! 
! 
! # AC_LTDL_DLSYM_USCORE
! # --------------------
! AC_DEFUN([AC_LTDL_DLSYM_USCORE],
! [AC_REQUIRE([AC_LTDL_SYMBOL_USCORE])
! if test x"$ac_cv_sys_symbol_underscore" = xyes; then
!   if test x"$libltdl_cv_func_dlopen" = xyes ||
!      test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then
! 	AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
! 	  [libltdl_cv_need_uscore],
! 	  [libltdl_cv_need_uscore=unknown
!           save_LIBS="$LIBS"
!           LIBS="$LIBS $LIBADD_DL"
! 	  _LT_AC_TRY_DLOPEN_SELF(
! 	    [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes],
! 	    [],				 [libltdl_cv_need_uscore=cross])
! 	  LIBS="$save_LIBS"
! 	])
!   fi
! fi
! 
! if test x"$libltdl_cv_need_uscore" = xyes; then
!   AC_DEFINE(NEED_USCORE, 1,
!     [Define if dlsym() requires a leading underscore in symbol names.])
! fi
! ])# AC_LTDL_DLSYM_USCORE
! 
! # AC_LTDL_FUNC_ARGZ
! # -----------------
! AC_DEFUN([AC_LTDL_FUNC_ARGZ],
! [AC_CHECK_HEADERS([argz.h])
! 
! AC_CHECK_TYPES([error_t],
!   [],
!   [AC_DEFINE([error_t], [int],
!     [Define to a type to use for `error_t' if it is not otherwise available.])],
!   [#if HAVE_ARGZ_H
! #  include <argz.h>
! #endif])
! 
! AC_CHECK_FUNCS([argz_append argz_create_sep argz_insert argz_next argz_stringify])
! ])# AC_LTDL_FUNC_ARGZ
! 
! # AM_CONDITIONAL                                              -*- Autoconf -*-
! 
! # Copyright 1997, 2000, 2001 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 5
! 
! AC_PREREQ(2.52)
! 
! # AM_CONDITIONAL(NAME, SHELL-CONDITION)
! # -------------------------------------
! # Define a conditional.
! AC_DEFUN([AM_CONDITIONAL],
! [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])])
! 
! # 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
! # 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 10
! 
! AC_PREREQ([2.54])
! 
! # Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
! # the ones we care about.
! m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
! 
! # 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_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_MISSING_PROG(AMTAR, tar)
! AM_PROG_INSTALL_SH
! AM_PROG_INSTALL_STRIP
! # 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([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])
! 
! # Copyright 2002  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
--- 11,19 ----
  # 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
*************** echo "timestamp for $1" >`AS_DIRNAME([$1
*** 6453,6624 ****
  # ----------------------------
  # 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.7"])
  
  # 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.7.9])])
! 
! # Helper functions for option handling.                    -*- Autoconf -*-
! 
! # Copyright 2001, 2002  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])])
! 
! #
! # Check to make sure that the build environment is sane.
! #
! 
! # Copyright 1996, 1997, 2000, 2001 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)])
! 
! #  -*- Autoconf -*-
! 
! 
! # Copyright 1997, 1999, 2000, 2001 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_AUX_DIR_EXPAND
  
! # Copyright 2001 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
--- 33,50 ----
  # ----------------------------
  # 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
*************** fi
*** 6673,6753 ****
  # absolute PATH.  The drawback is that using absolute paths prevent a
  # configured tree to be moved without reconfiguration.
  
! # Rely on autoconf to set up CDPATH properly.
! AC_PREREQ([2.50])
! 
! AC_DEFUN([AM_AUX_DIR_EXPAND], [
  # expand $ac_aux_dir to an absolute path
  am_aux_dir=`cd $ac_aux_dir && pwd`
  ])
  
! # AM_PROG_INSTALL_SH
! # ------------------
! # Define $install_sh.
! 
! # Copyright 2001 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)])
! 
! # AM_PROG_INSTALL_STRIP
! 
! # Copyright 2001 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])])
  
! #                                                          -*- 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
--- 99,114 ----
  # 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
*************** AC_SUBST([INSTALL_STRIP_PROGRAM])])
*** 6764,6787 ****
  # 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])])
  
! # serial 5						-*- Autoconf -*-
  
! # Copyright (C) 1999, 2000, 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
--- 125,158 ----
  # 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
*************** AC_CACHE_CHECK([dependency style of $dep
*** 6865,6871 ****
      : > sub/conftest.c
      for i in 1 2 3 4 5 6; do
        echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       : > sub/conftst$i.h
      done
      echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  
--- 236,244 ----
      : > 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
  
*************** AC_CACHE_CHECK([dependency style of $dep
*** 6893,6901 ****
         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
!       # (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored.
!       if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
          am_cv_$1_dependencies_compiler_type=$depmode
          break
        fi
--- 266,279 ----
         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
*************** AC_SUBST([DEPDIR], ["${am__leading_dot}d
*** 6929,6936 ****
  # ------------
  AC_DEFUN([AM_DEP_TRACK],
  [AC_ARG_ENABLE(dependency-tracking,
! [  --disable-dependency-tracking Speeds up one-time builds
!   --enable-dependency-tracking  Do not reject slow dependency extractors])
  if test "x$enable_dependency_tracking" != xno; then
    am_depcomp="$ac_aux_dir/depcomp"
    AMDEPBACKSLASH='\'
--- 307,314 ----
  # ------------
  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='\'
*************** AC_SUBST([AMDEPBACKSLASH])
*** 6941,6947 ****
  
  # Generate code to set up dependency tracking.   -*- Autoconf -*-
  
! # Copyright 1999, 2000, 2001, 2002 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
--- 319,326 ----
  
  # 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
*************** AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS
*** 6977,7003 ****
    else
      continue
    fi
!   grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
!   # Extract the definition of DEP_FILES from the Makefile without
!   # running `make'.
!   DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
    test -z "$DEPDIR" && continue
    # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n -e '/^U = / s///p' < "$mf"`
!   test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
!   # 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 -e '
!     /^DEP_FILES = .*\\\\$/ {
!       s/^DEP_FILES = //
!       :loop
! 	s/\\\\$//
! 	p
! 	n
! 	/\\\\$/ b loop
!       p
!     }
!     /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
         sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
--- 356,376 ----
    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
*************** AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS]
*** 7023,7028 ****
--- 396,625 ----
       [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.
*************** AC_MSG_RESULT([$_am_result])
*** 7086,7094 ****
  rm -f confinc confmf
  ])
  
! # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
  
! # Copyright 1996, 1997, 2000, 2001 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
--- 683,692 ----
  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
*************** rm -f confinc confmf
*** 7105,7121 ****
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  # 02111-1307, USA.
  
! AC_PREREQ([2.52])
  
! # serial 6
  
- # AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
- AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
  
! # Add --enable-maintainer-mode option to configure.
! # From Jim Meyering
  
! # Copyright 1996, 1998, 2000, 2001, 2002  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
--- 703,811 ----
  # 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
*************** AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_
*** 7134,7153 ****
  
  # serial 2
  
! 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])
  
--- 824,1061 ----
  
  # 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])])
! 
! #
! # 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([acinclude.m4])
diff -Nrcpad gcc-3.4.3/libjava/libltdl/config-h.in gcc-4.0.0/libjava/libltdl/config-h.in
*** gcc-3.4.3/libjava/libltdl/config-h.in	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/libjava/libltdl/config-h.in	Thu Apr 21 07:04:10 2005
***************
*** 188,193 ****
  /* Define to a type to use for `error_t' if it is not otherwise available. */
  #undef error_t
  
! /* Define as `__inline' if that's what the C compiler calls it, or to nothing
!    if it is not supported. */
  #undef inline
--- 188,195 ----
  /* Define to a type to use for `error_t' if it is not otherwise available. */
  #undef error_t
  
! /* Define to `__inline__' or `__inline' if that's what the C compiler
!    calls it, or to nothing if 'inline' is not supported under any name.  */
! #ifndef __cplusplus
  #undef inline
+ #endif
diff -Nrcpad gcc-3.4.3/libjava/libltdl/config.guess gcc-4.0.0/libjava/libltdl/config.guess
*** gcc-3.4.3/libjava/libltdl/config.guess	Sun Feb 22 14:43:12 2004
--- gcc-4.0.0/libjava/libltdl/config.guess	Mon Feb 23 20:53:55 2004
***************
*** 1,1450 ****
  #! /bin/sh
- # Attempt to guess a canonical system name.
- #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
- 
- timestamp='2004-02-16'
- 
- # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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
! 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 0 ;;
!     --version | -v )
!        echo "$version" ; exit 0 ;;
!     --help | --h* | -h )
!        echo "$usage"; exit 0 ;;
!     -- )     # 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 ;'
! 
! # 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 0 ;;
!     amd64:OpenBSD:*:*)
! 	echo x86_64-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     amiga:OpenBSD:*:*)
! 	echo m68k-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     arc:OpenBSD:*:*)
! 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     cats:OpenBSD:*:*)
! 	echo arm-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     hp300:OpenBSD:*:*)
! 	echo m68k-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     mac68k:OpenBSD:*:*)
! 	echo m68k-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     macppc:OpenBSD:*:*)
! 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     mvme68k:OpenBSD:*:*)
! 	echo m68k-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     mvme88k:OpenBSD:*:*)
! 	echo m88k-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     mvmeppc:OpenBSD:*:*)
! 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     pegasos:OpenBSD:*:*)
! 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     pmax:OpenBSD:*:*)
! 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     sgi:OpenBSD:*:*)
! 	echo mipseb-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     sun3:OpenBSD:*:*)
! 	echo m68k-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     wgrisc:OpenBSD:*:*)
! 	echo mipsel-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     *:OpenBSD:*:*)
! 	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     *:ekkoBSD:*:*)
! 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
! 	exit 0 ;;
!     macppc:MirBSD:*:*)
! 	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     *:MirBSD:*:*)
! 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
! 	exit 0 ;;
!     alpha:OSF1:*:*)
! 	if test $UNAME_RELEASE = "V4.0"; then
! 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
! 	fi
! 	# 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 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/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
! 	exit 0 ;;
!     Alpha*:OpenVMS:*:*)
! 	echo alpha-hp-vms
! 	exit 0 ;;
!     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 0 ;;
!     21064:Windows_NT:50:3)
! 	echo alpha-dec-winnt3.5
! 	exit 0 ;;
!     Amiga*:UNIX_System_V:4.0:*)
! 	echo m68k-unknown-sysv4
! 	exit 0;;
!     *:[Aa]miga[Oo][Ss]:*:*)
! 	echo ${UNAME_MACHINE}-unknown-amigaos
! 	exit 0 ;;
!     *:[Mm]orph[Oo][Ss]:*:*)
! 	echo ${UNAME_MACHINE}-unknown-morphos
! 	exit 0 ;;
!     *:OS/390:*:*)
! 	echo i370-ibm-openedition
! 	exit 0 ;;
!     *:OS400:*:*)
!         echo powerpc-ibm-os400
! 	exit 0 ;;
!     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
! 	echo arm-acorn-riscix${UNAME_RELEASE}
! 	exit 0;;
!     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
! 	echo hppa1.1-hitachi-hiuxmpp
! 	exit 0;;
!     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 0 ;;
!     NILE*:*:*:dcosx)
! 	echo pyramid-pyramid-svr4
! 	exit 0 ;;
!     DRS?6000:unix:4.0:6*)
! 	echo sparc-icl-nx6
! 	exit 0 ;;
!     DRS?6000:UNIX_SV:4.2*:7*)
! 	case `/usr/bin/uname -p` in
! 	    sparc) echo sparc-icl-nx7 && exit 0 ;;
! 	esac ;;
!     sun4H:SunOS:5.*:*)
! 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
! 	exit 0 ;;
!     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
! 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
! 	exit 0 ;;
!     i86pc:SunOS:5.*:*)
! 	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
! 	exit 0 ;;
!     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 0 ;;
!     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 0 ;;
!     sun3*:SunOS:*:*)
! 	echo m68k-sun-sunos${UNAME_RELEASE}
! 	exit 0 ;;
!     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 0 ;;
!     aushp:SunOS:*:*)
! 	echo sparc-auspex-sunos${UNAME_RELEASE}
! 	exit 0 ;;
!     # 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 0 ;;
!     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
! 	echo m68k-atari-mint${UNAME_RELEASE}
!         exit 0 ;;
!     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
!         echo m68k-atari-mint${UNAME_RELEASE}
! 	exit 0 ;;
!     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
!         echo m68k-milan-mint${UNAME_RELEASE}
!         exit 0 ;;
!     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
!         echo m68k-hades-mint${UNAME_RELEASE}
!         exit 0 ;;
!     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
!         echo m68k-unknown-mint${UNAME_RELEASE}
!         exit 0 ;;
!     m68k:machten:*:*)
! 	echo m68k-apple-machten${UNAME_RELEASE}
! 	exit 0 ;;
!     powerpc:machten:*:*)
! 	echo powerpc-apple-machten${UNAME_RELEASE}
! 	exit 0 ;;
!     RISC*:Mach:*:*)
! 	echo mips-dec-mach_bsd4.3
! 	exit 0 ;;
!     RISC*:ULTRIX:*:*)
! 	echo mips-dec-ultrix${UNAME_RELEASE}
! 	exit 0 ;;
!     VAX*:ULTRIX*:*:*)
! 	echo vax-dec-ultrix${UNAME_RELEASE}
! 	exit 0 ;;
!     2020:CLIX:*:* | 2430:CLIX:*:*)
! 	echo clipper-intergraph-clix${UNAME_RELEASE}
! 	exit 0 ;;
!     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 \
! 	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
! 	  && exit 0
! 	echo mips-mips-riscos${UNAME_RELEASE}
! 	exit 0 ;;
!     Motorola:PowerMAX_OS:*:*)
! 	echo powerpc-motorola-powermax
! 	exit 0 ;;
!     Motorola:*:4.3:PL8-*)
! 	echo powerpc-harris-powermax
! 	exit 0 ;;
!     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
! 	echo powerpc-harris-powermax
! 	exit 0 ;;
!     Night_Hawk:Power_UNIX:*:*)
! 	echo powerpc-harris-powerunix
! 	exit 0 ;;
!     m88k:CX/UX:7*:*)
! 	echo m88k-harris-cxux7
! 	exit 0 ;;
!     m88k:*:4*:R4*)
! 	echo m88k-motorola-sysv4
! 	exit 0 ;;
!     m88k:*:3*:R3*)
! 	echo m88k-motorola-sysv3
! 	exit 0 ;;
!     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 0 ;;
!     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
! 	echo m88k-dolphin-sysv3
! 	exit 0 ;;
!     M88*:*:R3*:*)
! 	# Delta 88k system running SVR3
! 	echo m88k-motorola-sysv3
! 	exit 0 ;;
!     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
! 	echo m88k-tektronix-sysv3
! 	exit 0 ;;
!     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
! 	echo m68k-tektronix-bsd
! 	exit 0 ;;
!     *:IRIX*:*:*)
! 	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
! 	exit 0 ;;
!     ????????: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 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
!     i*86:AIX:*:*)
! 	echo i386-ibm-aix
! 	exit 0 ;;
!     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 0 ;;
!     *: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
! 		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
! 		echo rs6000-ibm-aix3.2.5
! 	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 0 ;;
!     *: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 0 ;;
!     *:AIX:*:*)
! 	echo rs6000-ibm-aix
! 	exit 0 ;;
!     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
! 	echo romp-ibm-bsd4.4
! 	exit 0 ;;
!     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
! 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
! 	exit 0 ;;                           # report: romp-ibm BSD 4.3
!     *:BOSX:*:*)
! 	echo rs6000-bull-bosx
! 	exit 0 ;;
!     DPX/2?00:B.O.S.:*:*)
! 	echo m68k-bull-sysv3
! 	exit 0 ;;
!     9000/[34]??:4.3bsd:1.*:*)
! 	echo m68k-hp-bsd
! 	exit 0 ;;
!     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
! 	echo m68k-hp-bsd4.4
! 	exit 0 ;;
!     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
! 	    # avoid double evaluation of $set_cc_for_build
! 	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
! 	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
! 	    then
! 		HP_ARCH="hppa2.0w"
! 	    else
! 		HP_ARCH="hppa64"
! 	    fi
! 	fi
! 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
! 	exit 0 ;;
!     ia64:HP-UX:*:*)
! 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
! 	echo ia64-hp-hpux${HPUX_REV}
! 	exit 0 ;;
!     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 && $dummy && exit 0
! 	echo unknown-hitachi-hiuxwe2
! 	exit 0 ;;
!     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
! 	echo hppa1.1-hp-bsd
! 	exit 0 ;;
!     9000/8??:4.3bsd:*:*)
! 	echo hppa1.0-hp-bsd
! 	exit 0 ;;
!     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
! 	echo hppa1.0-hp-mpeix
! 	exit 0 ;;
!     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
! 	echo hppa1.1-hp-osf
! 	exit 0 ;;
!     hp8??:OSF1:*:*)
! 	echo hppa1.0-hp-osf
! 	exit 0 ;;
!     i*86:OSF1:*:*)
! 	if [ -x /usr/sbin/sysversion ] ; then
! 	    echo ${UNAME_MACHINE}-unknown-osf1mk
! 	else
! 	    echo ${UNAME_MACHINE}-unknown-osf1
! 	fi
! 	exit 0 ;;
!     parisc*:Lites*:*:*)
! 	echo hppa1.1-hp-lites
! 	exit 0 ;;
!     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
! 	echo c1-convex-bsd
!         exit 0 ;;
!     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
! 	if getsysinfo -f scalar_acc
! 	then echo c32-convex-bsd
! 	else echo c2-convex-bsd
! 	fi
!         exit 0 ;;
!     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
! 	echo c34-convex-bsd
!         exit 0 ;;
!     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
! 	echo c38-convex-bsd
!         exit 0 ;;
!     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
! 	echo c4-convex-bsd
!         exit 0 ;;
!     CRAY*Y-MP:*:*:*)
! 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
! 	exit 0 ;;
!     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 0 ;;
!     CRAY*TS:*:*:*)
! 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
! 	exit 0 ;;
!     CRAY*T3E:*:*:*)
! 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
! 	exit 0 ;;
!     CRAY*SV1:*:*:*)
! 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
! 	exit 0 ;;
!     *:UNICOS/mp:*:*)
! 	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
! 	exit 0 ;;
!     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 0 ;;
!     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 0 ;;
!     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
! 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
! 	exit 0 ;;
!     sparc*:BSD/OS:*:*)
! 	echo sparc-unknown-bsdi${UNAME_RELEASE}
! 	exit 0 ;;
!     *:BSD/OS:*:*)
! 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
! 	exit 0 ;;
!     *:FreeBSD:*:*)
! 	# Determine whether the default compiler uses glibc.
! 	eval $set_cc_for_build
! 	sed 's/^	//' << EOF >$dummy.c
! 	#include <features.h>
! 	#if __GLIBC__ >= 2
! 	LIBC=gnu
! 	#else
! 	LIBC=
! 	#endif
! EOF
! 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
! 	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
! 	# FreeBSD's kernel, but not the complete OS.
! 	case ${LIBC} in gnu) kernel_only='k' ;; esac
! 	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
! 	exit 0 ;;
!     i*:CYGWIN*:*)
! 	echo ${UNAME_MACHINE}-pc-cygwin
! 	exit 0 ;;
!     i*:MINGW*:*)
! 	echo ${UNAME_MACHINE}-pc-mingw32
! 	exit 0 ;;
!     i*:PW*:*)
! 	echo ${UNAME_MACHINE}-pc-pw32
! 	exit 0 ;;
!     x86:Interix*:[34]*)
! 	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
! 	exit 0 ;;
!     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
! 	echo i${UNAME_MACHINE}-pc-mks
! 	exit 0 ;;
!     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 0 ;;
!     i*:UWIN*:*)
! 	echo ${UNAME_MACHINE}-pc-uwin
! 	exit 0 ;;
!     p*:CYGWIN*:*)
! 	echo powerpcle-unknown-cygwin
! 	exit 0 ;;
!     prep*:SunOS:5.*:*)
! 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
! 	exit 0 ;;
!     *:GNU:*:*)
! 	# the GNU system
! 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
! 	exit 0 ;;
!     *: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 0 ;;
!     i*86:Minix:*:*)
! 	echo ${UNAME_MACHINE}-pc-minix
! 	exit 0 ;;
!     arm*:Linux:*:*)
! 	echo ${UNAME_MACHINE}-unknown-linux-gnu
! 	exit 0 ;;
!     cris:Linux:*:*)
! 	echo cris-axis-linux-gnu
! 	exit 0 ;;
!     ia64:Linux:*:*)
! 	echo ${UNAME_MACHINE}-unknown-linux-gnu
! 	exit 0 ;;
!     m68*:Linux:*:*)
! 	echo ${UNAME_MACHINE}-unknown-linux-gnu
! 	exit 0 ;;
!     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 0
! 	;;
!     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 0
! 	;;
!     ppc:Linux:*:*)
! 	echo powerpc-unknown-linux-gnu
! 	exit 0 ;;
!     ppc64:Linux:*:*)
! 	echo powerpc64-unknown-linux-gnu
! 	exit 0 ;;
!     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 0 ;;
!     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 0 ;;
!     parisc64:Linux:*:* | hppa64:Linux:*:*)
! 	echo hppa64-unknown-linux-gnu
! 	exit 0 ;;
!     s390:Linux:*:* | s390x:Linux:*:*)
! 	echo ${UNAME_MACHINE}-ibm-linux
! 	exit 0 ;;
!     sh64*:Linux:*:*)
!     	echo ${UNAME_MACHINE}-unknown-linux-gnu
! 	exit 0 ;;
!     sh*:Linux:*:*)
! 	echo ${UNAME_MACHINE}-unknown-linux-gnu
! 	exit 0 ;;
!     sparc:Linux:*:* | sparc64:Linux:*:*)
! 	echo ${UNAME_MACHINE}-unknown-linux-gnu
! 	exit 0 ;;
!     x86_64:Linux:*:*)
! 	echo x86_64-unknown-linux-gnu
! 	exit 0 ;;
!     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 0 ;;
! 	  coff-i386)
! 		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
! 		exit 0 ;;
! 	  "")
! 		# 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 0 ;;
! 	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 0
! 	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
! 	;;
!     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 0 ;;
!     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 0 ;;
!     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 0 ;;
!     i*86:XTS-300:*:STOP)
! 	echo ${UNAME_MACHINE}-unknown-stop
! 	exit 0 ;;
!     i*86:atheos:*:*)
! 	echo ${UNAME_MACHINE}-unknown-atheos
! 	exit 0 ;;
! 	i*86:syllable:*:*)
! 	echo ${UNAME_MACHINE}-pc-syllable
! 	exit 0 ;;
!     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
! 	echo i386-unknown-lynxos${UNAME_RELEASE}
! 	exit 0 ;;
!     i*86:*DOS:*:*)
! 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
! 	exit 0 ;;
!     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 0 ;;
!     i*86:*:5:[78]*)
! 	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 0 ;;
!     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 0 ;;
!     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 0 ;;
!     Intel:Mach:3*:*)
! 	echo i386-pc-mach3
! 	exit 0 ;;
!     paragon:*:*:*)
! 	echo i860-intel-osf1
! 	exit 0 ;;
!     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 0 ;;
!     mini*:CTIX:SYS*5:*)
! 	# "miniframe"
! 	echo m68010-convergent-sysv
! 	exit 0 ;;
!     mc68k:UNIX:SYSTEM5:3.51m)
! 	echo m68k-convergent-sysv
! 	exit 0 ;;
!     M680?0:D-NIX:5.3:*)
! 	echo m68k-diab-dnix
! 	exit 0 ;;
!     M68*:*:R3V[567]*:*)
! 	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
!     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)
! 	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 0
! 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
! 	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
!     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
!         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
!           && echo i486-ncr-sysv4 && exit 0 ;;
!     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
! 	echo m68k-unknown-lynxos${UNAME_RELEASE}
! 	exit 0 ;;
!     mc68030:UNIX_System_V:4.*:*)
! 	echo m68k-atari-sysv4
! 	exit 0 ;;
!     TSUNAMI:LynxOS:2.*:*)
! 	echo sparc-unknown-lynxos${UNAME_RELEASE}
! 	exit 0 ;;
!     rs6000:LynxOS:2.*:*)
! 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
! 	exit 0 ;;
!     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
! 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
! 	exit 0 ;;
!     SM[BE]S:UNIX_SV:*:*)
! 	echo mips-dde-sysv${UNAME_RELEASE}
! 	exit 0 ;;
!     RM*:ReliantUNIX-*:*:*)
! 	echo mips-sni-sysv4
! 	exit 0 ;;
!     RM*:SINIX-*:*:*)
! 	echo mips-sni-sysv4
! 	exit 0 ;;
!     *: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 0 ;;
!     PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
!                       # says <Richard.M.Bartel@ccMail.Census.GOV>
!         echo i586-unisys-sysv4
!         exit 0 ;;
!     *:UNIX_System_V:4*:FTX*)
! 	# From Gerald Hewes <hewes@openmarket.com>.
! 	# How about differentiating between stratus architectures? -djm
! 	echo hppa1.1-stratus-sysv4
! 	exit 0 ;;
!     *:*:*:FTX*)
! 	# From seanf@swdc.stratus.com.
! 	echo i860-stratus-sysv4
! 	exit 0 ;;
!     *:VOS:*:*)
! 	# From Paul.Green@stratus.com.
! 	echo hppa1.1-stratus-vos
! 	exit 0 ;;
!     mc68*:A/UX:*:*)
! 	echo m68k-apple-aux${UNAME_RELEASE}
! 	exit 0 ;;
!     news*:NEWS-OS:6*:*)
! 	echo mips-sony-newsos6
! 	exit 0 ;;
!     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 0 ;;
!     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
! 	echo powerpc-be-beos
! 	exit 0 ;;
!     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
! 	echo powerpc-apple-beos
! 	exit 0 ;;
!     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
! 	echo i586-pc-beos
! 	exit 0 ;;
!     SX-4:SUPER-UX:*:*)
! 	echo sx4-nec-superux${UNAME_RELEASE}
! 	exit 0 ;;
!     SX-5:SUPER-UX:*:*)
! 	echo sx5-nec-superux${UNAME_RELEASE}
! 	exit 0 ;;
!     SX-6:SUPER-UX:*:*)
! 	echo sx6-nec-superux${UNAME_RELEASE}
! 	exit 0 ;;
!     Power*:Rhapsody:*:*)
! 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
! 	exit 0 ;;
!     *:Rhapsody:*:*)
! 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
! 	exit 0 ;;
!     *:Darwin:*:*)
! 	case `uname -p` in
! 	    *86) UNAME_PROCESSOR=i686 ;;
! 	    powerpc) UNAME_PROCESSOR=powerpc ;;
! 	esac
! 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
! 	exit 0 ;;
!     *: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 0 ;;
!     *:QNX:*:4*)
! 	echo i386-pc-qnx
! 	exit 0 ;;
!     NSR-?:NONSTOP_KERNEL:*:*)
! 	echo nsr-tandem-nsk${UNAME_RELEASE}
! 	exit 0 ;;
!     *:NonStop-UX:*:*)
! 	echo mips-compaq-nonstopux
! 	exit 0 ;;
!     BS2000:POSIX*:*:*)
! 	echo bs2000-siemens-sysv
! 	exit 0 ;;
!     DS/*:UNIX_System_V:*:*)
! 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
! 	exit 0 ;;
!     *: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 0 ;;
!     *:TOPS-10:*:*)
! 	echo pdp10-unknown-tops10
! 	exit 0 ;;
!     *:TENEX:*:*)
! 	echo pdp10-unknown-tenex
! 	exit 0 ;;
!     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
! 	echo pdp10-dec-tops20
! 	exit 0 ;;
!     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
! 	echo pdp10-xkl-tops20
! 	exit 0 ;;
!     *:TOPS-20:*:*)
! 	echo pdp10-unknown-tops20
! 	exit 0 ;;
!     *:ITS:*:*)
! 	echo pdp10-unknown-its
! 	exit 0 ;;
!     SEI:*:*:SEIUX)
!         echo mips-sei-seiux${UNAME_RELEASE}
! 	exit 0 ;;
!     *:DragonFly:*:*)
! 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
! 	exit 0 ;;
  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"); 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 && $dummy && exit 0
- 
- # Apollos put the system type in the environment.
- 
- test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
- 
- # 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 0 ;;
-     c2*)
- 	if getsysinfo -f scalar_acc
- 	then echo c32-convex-bsd
- 	else echo c2-convex-bsd
- 	fi
- 	exit 0 ;;
-     c34*)
- 	echo c34-convex-bsd
- 	exit 0 ;;
-     c38*)
- 	echo c38-convex-bsd
- 	exit 0 ;;
-     c4*)
- 	echo c4-convex-bsd
- 	exit 0 ;;
-     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
- 
-     ftp://ftp.gnu.org/pub/gnu/config/
- 
- 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:
--- 1,32 ----
  #! /bin/sh
  
! # Copyright (C) 2004 Free Software Foundation, Inc.
  #
! # This script is free software; the Free Software Foundation gives
! # unlimited permission to copy, distribute and modify it.
  
! # Invoke a shell script with the same name two directories up from this
! # file.  Robust against all kinds of pathological file and directory
! # names, as well as all kinds of pathological shells.
! # By Nathanael Nerode, Zack Weinberg, and Alexandre Oliva.
  
! # Insert "../../" just before the last slash in the pathname.
! # We use a here-document to avoid problems with "echo" and
! # pathnames containing backslashes or a leading dash.
  
! script=`sed 's,[^/]*$,../../&,' << EOF
! $0
  EOF
! `
  
! # Must honor CONFIG_SHELL if set.
! # Simple "$@" does the wrong thing for zero arguments with 
! # OSF/1 4.0 /bin/sh, possibly others.
! # ${1+"$@"} does the wrong thing with zsh (== /bin/sh in
! # some iterations of Darwin).
  
! case $# in
!    0) exec ${CONFIG_SHELL-/bin/sh} "$script" ;;
!    *) exec ${CONFIG_SHELL-/bin/sh} "$script" "$@" ;;
  esac
  
diff -Nrcpad gcc-3.4.3/libjava/libltdl/config.sub gcc-4.0.0/libjava/libltdl/config.sub
*** gcc-3.4.3/libjava/libltdl/config.sub	Sun Feb 22 14:43:12 2004
--- gcc-4.0.0/libjava/libltdl/config.sub	Mon Feb 23 20:53:55 2004
***************
*** 1,1545 ****
  #! /bin/sh
- # Configuration validation subroutine script.
- #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
! timestamp='2004-02-16'
! 
! # 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., 59 Temple Place - Suite 330,
! # Boston, MA 02111-1307, 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
! 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 0 ;;
!     --version | -v )
!        echo "$version" ; exit 0 ;;
!     --help | --h* | -h )
!        echo "$usage"; exit 0 ;;
!     -- )     # 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 0;;
  
!     * )
!        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)
! 		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 \
! 	| 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 | m68000 | m68k | m88k | mcore \
! 	| mips | mipsbe | mipseb | mipsel | mipsle \
! 	| mips16 \
! 	| mips64 | mips64el \
! 	| mips64vr | mips64vrel \
! 	| mips64orion | mips64orionel \
! 	| mips64vr4100 | mips64vr4100el \
! 	| mips64vr4300 | mips64vr4300el \
! 	| mips64vr5000 | mips64vr5000el \
! 	| mipsisa32 | mipsisa32el \
! 	| mipsisa32r2 | mipsisa32r2el \
! 	| mipsisa64 | mipsisa64el \
! 	| mipsisa64r2 | mipsisa64r2el \
! 	| mipsisa64sb1 | mipsisa64sb1el \
! 	| mipsisa64sr71k | mipsisa64sr71kel \
! 	| mipstx39 | mipstx39el \
! 	| mn10200 | mn10300 \
! 	| msp430 \
! 	| ns16k | ns32k \
! 	| openrisc | or32 \
! 	| pdp10 | pdp11 | pj | pjl \
! 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
! 	| pyramid \
! 	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
! 	| sh64 | sh64le \
! 	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
! 	| strongarm \
! 	| tahoe | thumb | tic4x | tic80 | tron \
! 	| v850 | v850e \
! 	| we32k \
! 	| x86 | xscale | xstormy16 | xtensa \
! 	| z8k)
! 		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-* \
! 	| bs2000-* \
! 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
! 	| clipper-* | 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-* \
! 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
! 	| m88110-* | m88k-* | mcore-* \
! 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
! 	| mips16-* \
! 	| mips64-* | mips64el-* \
! 	| mips64vr-* | mips64vrel-* \
! 	| mips64orion-* | mips64orionel-* \
! 	| mips64vr4100-* | mips64vr4100el-* \
! 	| mips64vr4300-* | mips64vr4300el-* \
! 	| mips64vr5000-* | mips64vr5000el-* \
! 	| mipsisa32-* | mipsisa32el-* \
! 	| mipsisa32r2-* | mipsisa32r2el-* \
! 	| mipsisa64-* | mipsisa64el-* \
! 	| mipsisa64r2-* | mipsisa64r2el-* \
! 	| mipsisa64sb1-* | mipsisa64sb1el-* \
! 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
! 	| mipstx39-* | mipstx39el-* \
! 	| msp430-* \
! 	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
! 	| orion-* \
! 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
! 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
! 	| pyramid-* \
! 	| romp-* | rs6000-* \
! 	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
! 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
! 	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
! 	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
! 	| tahoe-* | thumb-* \
! 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
! 	| tron-* \
! 	| v850-* | v850e-* | vax-* \
! 	| we32k-* \
! 	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
! 	| xtensa-* \
! 	| ymp-* \
! 	| z8k-*)
! 		;;
! 	# 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
! 		;;
! 	cr16c)
! 		basic_machine=cr16c-unknown
! 		os=-elf
! 		;;
! 	crds | unos)
! 		basic_machine=m68k-crds
! 		;;
! 	cris | cris-* | etrax*)
! 		basic_machine=cris-axis
! 		;;
! 	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
! 		;;
! 	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
! 		;;
! 	mmix*)
! 		basic_machine=mmix-knuth
! 		os=-mmixware
! 		;;
! 	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
! 		;;
! 	nv1)
! 		basic_machine=nv1-cray
! 		os=-unicosmp
! 		;;
! 	nsr-tandem)
! 		basic_machine=nsr-tandem
! 		;;
! 	op50n-* | op60c-*)
! 		basic_machine=hppa1.1-oki
! 		os=-proelf
! 		;;
! 	or32 | or32-*)
! 		basic_machine=or32-unknown
! 		os=-coff
! 		;;
! 	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
! 		;;
! 	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
! 		;;
! 	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
! 		;;
! 	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
! 		basic_machine=sh-unknown
! 		;;
! 	sh64)
! 		basic_machine=sh64-unknown
! 		;;
! 	sparc | 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*)
! 	# 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* \
! 	      | -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
! 		;;
! 	-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
! 		;;
! 	*-ibm)
! 		os=-aix
! 		;;
! 	*-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 0
- 
- # Local variables:
- # eval: (add-hook 'write-file-hooks 'time-stamp)
- # time-stamp-start: "timestamp='"
- # time-stamp-format: "%:y-%02m-%02d"
- # time-stamp-end: "'"
- # End:
--- 1,32 ----
  #! /bin/sh
  
! # Copyright (C) 2004 Free Software Foundation, Inc.
  #
! # This script is free software; the Free Software Foundation gives
! # unlimited permission to copy, distribute and modify it.
  
! # Invoke a shell script with the same name two directories up from this
! # file.  Robust against all kinds of pathological file and directory
! # names, as well as all kinds of pathological shells.
! # By Nathanael Nerode, Zack Weinberg, and Alexandre Oliva.
  
! # Insert "../../" just before the last slash in the pathname.
! # We use a here-document to avoid problems with "echo" and
! # pathnames containing backslashes or a leading dash.
  
! script=`sed 's,[^/]*$,../../&,' << EOF
! $0
! EOF
! `
  
! # Must honor CONFIG_SHELL if set.
! # Simple "$@" does the wrong thing for zero arguments with 
! # OSF/1 4.0 /bin/sh, possibly others.
! # ${1+"$@"} does the wrong thing with zsh (== /bin/sh in
! # some iterations of Darwin).
  
  case $# in
!    0) exec ${CONFIG_SHELL-/bin/sh} "$script" ;;
!    *) exec ${CONFIG_SHELL-/bin/sh} "$script" "$@" ;;
  esac
  
diff -Nrcpad gcc-3.4.3/libjava/libltdl/configure gcc-4.0.0/libjava/libltdl/configure
*** gcc-3.4.3/libjava/libltdl/configure	Fri Nov  5 04:14:05 2004
--- gcc-4.0.0/libjava/libltdl/configure	Wed Nov 24 21:01:02 2004
***************
*** 1,11 ****
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # Generated by GNU Autoconf 2.57 for libltdl 1.2.
  #
  # Report bugs to <bug-libtool@gnu.org>.
  #
! # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
! # Free Software Foundation, Inc.
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
  ## --------------------- ##
--- 1,10 ----
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # Generated by GNU Autoconf 2.59 for libltdl 1.2.
  #
  # Report bugs to <bug-libtool@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.
  ## --------------------- ##
*************** if test -n "${ZSH_VERSION+set}" && (emul
*** 22,30 ****
  elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
    set -o posix
  fi
  
  # Support unset when possible.
! if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
    as_unset=unset
  else
    as_unset=false
--- 21,30 ----
  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
*************** for as_var in \
*** 43,49 ****
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
    LC_TELEPHONE LC_TIME
  do
!   if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
      eval $as_var=C; export $as_var
    else
      $as_unset $as_var
--- 43,49 ----
    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
*************** rm -f conf$$ conf$$.exe conf$$.file
*** 220,235 ****
  if mkdir -p . 2>/dev/null; then
    as_mkdir_p=:
  else
    as_mkdir_p=false
  fi
  
  as_executable_p="test -f"
  
  # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  
  
  # IFS
--- 220,236 ----
  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
*************** ac_includes_default="\
*** 464,470 ****
  # 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 AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT 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 build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB DLLTOOL ac_ct_DLLTOOL AS ac_ct_AS OBJDUMP ac_ct_OBJDUMP CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBTOOL_DEPS INSTALL_LTDL_TRUE INSTALL_LTDL_FALSE CONVENIENCE_LTDL_TRUE CONVENIENCE_LTDL_FALSE LIBADD_DL LIBOBJS LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
--- 465,471 ----
  # 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 MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT 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 build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB DLLTOOL ac_ct_DLLTOOL AS ac_ct_AS OBJDUMP ac_ct_OBJDUMP CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBTOOL_DEPS INSTALL_LTDL_TRUE INSTALL_LTDL_FALSE CONVENIENCE_LTDL_TRUE CONVENIENCE_LTDL_FALSE LIBADD_DL LIBOBJS LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
*************** done
*** 823,829 ****
  
  # 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
--- 824,830 ----
  
  # 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
*************** if test -z "$srcdir"; then
*** 863,872 ****
    # 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; }
--- 864,873 ----
    # 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; }
*************** _ACEOF
*** 978,986 ****
    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
--- 979,987 ----
    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
*************** if test -n "$ac_init_help"; then
*** 1026,1035 ****
  Optional Features:
    --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
    --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer
!   --disable-dependency-tracking Speeds up one-time builds
!   --enable-dependency-tracking  Do not reject slow dependency extractors
    --enable-shared[=PKGS]
                            build shared libraries [default=yes]
    --enable-static[=PKGS]
--- 1027,1036 ----
  Optional Features:
    --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
    --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --enable-maintainer-mode  enable make rules and dependencies not useful
! 			  (and sometimes confusing) to the casual installer
!   --disable-dependency-tracking  speeds up one-time build
!   --enable-dependency-tracking   do not reject slow dependency extractors
    --enable-shared[=PKGS]
                            build shared libraries [default=yes]
    --enable-static[=PKGS]
*************** case $srcdir in
*** 1099,1110 ****
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
! # absolute.
! ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
! ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
! ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
! ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  
      cd $ac_dir
      # Check for guested configure; otherwise get Cygnus style configure.
--- 1100,1144 ----
      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.
*************** ac_abs_top_srcdir=`cd "$ac_dir" && cd $a
*** 1115,1127 ****
        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
  
--- 1149,1161 ----
        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
*** 1129,1138 ****
  if $ac_init_version; then
    cat <<\_ACEOF
  libltdl configure 1.2
! generated by GNU Autoconf 2.57
  
! Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
! Free Software Foundation, Inc.
  This configure script is free software; the Free Software Foundation
  gives unlimited permission to copy, distribute and modify it.
  _ACEOF
--- 1163,1171 ----
  if $ac_init_version; then
    cat <<\_ACEOF
  libltdl configure 1.2
! 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
*************** This file contains any messages produced
*** 1144,1150 ****
  running configure, to aid debugging if configure makes a mistake.
  
  It was created by libltdl $as_me 1.2, which was
! generated by GNU Autoconf 2.57.  Invocation command line was
  
    $ $0 $@
  
--- 1177,1183 ----
  running configure, to aid debugging if configure makes a mistake.
  
  It was created by libltdl $as_me 1.2, which was
! generated by GNU Autoconf 2.59.  Invocation command line was
  
    $ $0 $@
  
*************** do
*** 1221,1239 ****
      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.
--- 1254,1272 ----
      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.
*************** _ASBOX
*** 1267,1278 ****
      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;
  }
--- 1300,1311 ----
      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;
  }
*************** _ASBOX
*** 1301,1307 ****
        for ac_var in $ac_subst_files
        do
  	eval ac_val=$`echo $ac_var`
!         echo "$ac_var='"'"'$ac_val'"'"'"
        done | sort
        echo
      fi
--- 1334,1340 ----
        for ac_var in $ac_subst_files
        do
  	eval ac_val=$`echo $ac_var`
! 	echo "$ac_var='"'"'$ac_val'"'"'"
        done | sort
        echo
      fi
*************** fi
*** 1400,1406 ****
  # 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"
--- 1433,1439 ----
  # 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"
*************** echo "$as_me: error: \`$ac_var' was not 
*** 1417,1429 ****
      ,);;
      *)
        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.
--- 1450,1462 ----
      ,);;
      *)
        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.
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 1480,1485 ****
--- 1513,1520 ----
  
  
  
+           ac_config_files="$ac_config_files config.h:config-h.in"
+ 
  
  
  ## ------------------------------- ##
*************** fi
*** 1532,1538 ****
  ## ------------------------ ##
  ## Automake Initialisation. ##
  ## ------------------------ ##
! am__api_version="1.7"
  # 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:
--- 1567,1573 ----
  ## ------------------------ ##
  ## Automake Initialisation. ##
  ## ------------------------ ##
! 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:
*************** am__api_version="1.7"
*** 1544,1549 ****
--- 1579,1585 ----
  # 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
*************** do
*** 1560,1565 ****
--- 1596,1602 ----
  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.
*************** case $as_dir/ in
*** 1567,1586 ****
      # 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
      ;;
--- 1604,1623 ----
      # 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
      ;;
*************** _ACEOF
*** 1668,1674 ****
  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`
  
--- 1705,1710 ----
*************** else
*** 1682,1687 ****
--- 1718,1756 ----
  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.
*************** done
*** 1724,1730 ****
  
  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
--- 1793,1799 ----
  
  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
*************** else
*** 1760,1766 ****
  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
--- 1829,1835 ----
  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
*************** fi
*** 1779,1788 ****
  
  
  # Define the identity of the package.
!  PACKAGE=libltdl
!  VERSION=1.2
  
  
  # Some tools Automake needs.
  
  ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
--- 1848,1866 ----
  
  
  # Define the identity of the package.
!  PACKAGE='libltdl'
!  VERSION='1.2'
! 
! 
! 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}"}
*************** AUTOHEADER=${AUTOHEADER-"${am_missing_ru
*** 1799,1807 ****
  
  MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
  
- 
- AMTAR=${AMTAR-"${am_missing_run}tar"}
- 
  install_sh=${install_sh-"$am_aux_dir/install-sh"}
  
  # Installed binaries are usually stripped using `strip' when the user
--- 1877,1882 ----
*************** INSTALL_STRIP_PROGRAM="\${SHELL} \$(inst
*** 1894,1903 ****
  
  # We need awk for the "check" target.  The system "awk" is bad on
  # some platforms.
  
  
  
-           ac_config_headers="$ac_config_headers config.h:config-h.in"
  
  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
--- 1969,1983 ----
  
  # 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"}
+ 
+ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+ 
  
  
  
  
  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
*************** fi
*** 1924,1929 ****
--- 2004,2010 ----
  
  
  
+ 
  ## ------------------ ##
  ## C compiler checks. ##
  ## ------------------ ##
*************** ac_compiler=`set X $ac_compile; echo $2`
*** 2263,2269 ****
    (exit $ac_status); }
  
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2344,2349 ----
*************** ac_clean_files="$ac_clean_files a.out a.
*** 2283,2290 ****
  # 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" >&5
! echo $ECHO_N "checking for C compiler default output... $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
--- 2363,2370 ----
  # 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
*************** do
*** 2304,2326 ****
    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
--- 2384,2406 ----
    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
*************** for ac_file in conftest.exe conftest con
*** 2394,2401 ****
    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
--- 2474,2481 ----
    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
*************** if test "${ac_cv_objext+set}" = set; the
*** 2420,2426 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2500,2505 ----
*************** if test "${ac_cv_c_compiler_gnu+set}" = 
*** 2471,2477 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2550,2555 ----
*************** main ()
*** 2491,2501 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2569,2589 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 2508,2514 ****
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  ac_cv_c_compiler_gnu=$ac_compiler_gnu
  
  fi
--- 2596,2602 ----
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  ac_cv_c_compiler_gnu=$ac_compiler_gnu
  
  fi
*************** if test "${ac_cv_prog_cc_g+set}" = set; 
*** 2524,2530 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2612,2617 ----
*************** main ()
*** 2541,2551 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2628,2648 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 2558,2564 ****
  
  ac_cv_prog_cc_g=no
  fi
! rm -f 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
--- 2655,2661 ----
  
  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
*************** else
*** 2585,2591 ****
    ac_cv_prog_cc_stdc=no
  ac_save_CC=$CC
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2682,2687 ----
*************** static char *f (char * (*g) (char **, in
*** 2613,2618 ****
--- 2709,2724 ----
    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);};
*************** do
*** 2639,2649 ****
    CC="$ac_save_CC $ac_arg"
    rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2745,2765 ----
    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=$?
*************** else
*** 2656,2662 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext
  done
  rm -f conftest.$ac_ext conftest.$ac_objext
  CC=$ac_save_CC
--- 2772,2778 ----
  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
*************** cat >conftest.$ac_ext <<_ACEOF
*** 2684,2694 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2800,2820 ----
  _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=$?
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 2703,2709 ****
     'void exit (int);'
  do
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2829,2834 ----
*************** exit (42);
*** 2721,2731 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2846,2866 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 2738,2746 ****
  
  continue
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 2873,2880 ----
  
  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
*************** exit (42);
*** 2757,2767 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 2891,2911 ----
  _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=$?
*************** else
*** 2773,2779 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  done
  rm -f conftest*
  if test -n "$ac_declaration"; then
--- 2917,2923 ----
  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
*************** else
*** 2787,2793 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 2931,2937 ----
  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'
*************** else
*** 2900,2906 ****
      : > sub/conftest.c
      for i in 1 2 3 4 5 6; do
        echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       : > sub/conftst$i.h
      done
      echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  
--- 3044,3052 ----
      : > 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
  
*************** else
*** 2928,2936 ****
         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
!       # (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored.
!       if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
          am_cv_CC_dependencies_compiler_type=$depmode
          break
        fi
--- 3074,3087 ----
         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
*************** if test "${ac_cv_c_const+set}" = set; th
*** 2968,2974 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3119,3124 ----
*************** main ()
*** 3031,3041 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3181,3201 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3048,3054 ****
  
  ac_cv_c_const=no
  fi
! rm -f 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
--- 3208,3214 ----
  
  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
*************** else
*** 3068,3074 ****
    ac_cv_c_inline=no
  for ac_kw in inline __inline__ __inline; do
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 3228,3233 ----
*************** $ac_kw foo_t foo () {return 0; }
*** 3083,3093 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 3242,3262 ----
  _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=$?
*************** else
*** 3099,3121 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  done
  
  fi
  echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
  echo "${ECHO_T}$ac_cv_c_inline" >&6
  case $ac_cv_c_inline in
    inline | yes) ;;
!   no)
! cat >>confdefs.h <<\_ACEOF
! #define inline
! _ACEOF
!  ;;
!   *)  cat >>confdefs.h <<_ACEOF
! #define inline $ac_cv_c_inline
  _ACEOF
!  ;;
  esac
  
  
--- 3268,3294 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  done
  
  fi
  echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
  echo "${ECHO_T}$ac_cv_c_inline" >&6
+ 
+ 
  case $ac_cv_c_inline in
    inline | yes) ;;
!   *)
!     case $ac_cv_c_inline in
!       no) ac_val=;;
!       *) ac_val=$ac_cv_c_inline;;
!     esac
!     cat >>confdefs.h <<_ACEOF
! #ifndef __cplusplus
! #define inline $ac_val
! #endif
  _ACEOF
!     ;;
  esac
  
  
*************** ia64-*-hpux*)
*** 3749,3755 ****
    ;;
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 3752 "configure"' > conftest.$ac_ext
    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
    (eval $ac_compile) 2>&5
    ac_status=$?
--- 3922,3928 ----
    ;;
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 3925 "configure"' > conftest.$ac_ext
    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
    (eval $ac_compile) 2>&5
    ac_status=$?
*************** ac_link='$CC -o conftest$ac_exeext $CFLA
*** 3846,3852 ****
  ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
       cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4019,4024 ----
*************** main ()
*** 3863,3873 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4035,4055 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 3880,3886 ****
  
  lt_cv_cc_needs_belf=no
  fi
! rm -f 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'
--- 4062,4069 ----
  
  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'
*************** do
*** 4171,4177 ****
    # 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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4354,4359 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 4182,4188 ****
  #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
--- 4364,4370 ----
  #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
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4194,4199 ****
--- 4376,4382 ----
    (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
*************** rm -f conftest.err conftest.$ac_ext
*** 4214,4220 ****
    # OK, works on sane cases.  Now check whether non-existent headers
    # can be detected and how.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4397,4402 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4232,4237 ****
--- 4414,4420 ----
    (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
*************** do
*** 4278,4284 ****
    # 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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4461,4466 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 4289,4295 ****
  #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
--- 4471,4477 ----
  #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
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4301,4306 ****
--- 4483,4489 ----
    (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
*************** rm -f conftest.err conftest.$ac_ext
*** 4321,4327 ****
    # OK, works on sane cases.  Now check whether non-existent headers
    # can be detected and how.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4504,4509 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4339,4344 ****
--- 4521,4527 ----
    (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
*************** if test "${ac_cv_header_stdc+set}" = set
*** 4384,4390 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4567,4572 ----
*************** main ()
*** 4405,4415 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4587,4607 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4422,4433 ****
  
  ac_cv_header_stdc=no
  fi
! rm -f 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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4614,4624 ----
  
  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
*************** fi
*** 4449,4455 ****
  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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4640,4645 ----
*************** if test $ac_cv_header_stdc = yes; then
*** 4474,4480 ****
    :
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4664,4669 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 4486,4494 ****
  # 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
  
--- 4675,4683 ----
  # 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
  
*************** main ()
*** 4499,4505 ****
    int i;
    for (i = 0; i < 256; i++)
      if (XOR (islower (i), ISLOWER (i))
!         || toupper (i) != TOUPPER (i))
        exit(2);
    exit (0);
  }
--- 4688,4694 ----
    int i;
    for (i = 0; i < 256; i++)
      if (XOR (islower (i), ISLOWER (i))
! 	|| toupper (i) != TOUPPER (i))
        exit(2);
    exit (0);
  }
*************** fi
*** 4549,4555 ****
  
  
  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
--- 4738,4744 ----
  
  
  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
*************** if eval "test \"\${$as_ac_Header+set}\" 
*** 4558,4564 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4747,4752 ----
*************** $ac_includes_default
*** 4570,4580 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4758,4778 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4587,4593 ****
  
  eval "$as_ac_Header=no"
  fi
! rm -f 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
--- 4785,4791 ----
  
  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
*************** else
*** 4618,4624 ****
  echo "$as_me:$LINENO: checking $ac_header usability" >&5
  echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4816,4821 ----
*************** $ac_includes_default
*** 4629,4639 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 4826,4846 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4646,4652 ****
  
  ac_header_compiler=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  echo "${ECHO_T}$ac_header_compiler" >&6
  
--- 4853,4859 ----
  
  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
  
*************** echo "${ECHO_T}$ac_header_compiler" >&6
*** 4654,4660 ****
  echo "$as_me:$LINENO: checking $ac_header presence" >&5
  echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 4861,4866 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 4672,4677 ****
--- 4878,4884 ----
    (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
*************** echo "$as_me:$LINENO: result: $ac_header
*** 4691,4723 ****
  echo "${ECHO_T}$ac_header_preproc" >&6
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc 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 preprocessor's result" >&5
! echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
!     (
!       cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
! _ASBOX
!     ) |
!       sed "s/^/$as_me: WARNING:     /" >&2
      ;;
!   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: proceeding with the preprocessor's result" >&5
  echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
      (
        cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
--- 4898,4929 ----
  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 bug-libtool@gnu.org ##
! ## ---------------------------------- ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
*************** echo $ECHO_N "checking for $ac_header...
*** 4728,4734 ****
  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
--- 4934,4940 ----
  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
*************** if test "${ac_cv_cxx_compiler_gnu+set}" 
*** 4862,4868 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5068,5073 ----
*************** main ()
*** 4882,4892 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 5087,5107 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4899,4905 ****
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
  
  fi
--- 5114,5120 ----
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
  
  fi
*************** if test "${ac_cv_prog_cxx_g+set}" = set;
*** 4915,4921 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5130,5135 ----
*************** main ()
*** 4932,4942 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 5146,5166 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 4949,4955 ****
  
  ac_cv_prog_cxx_g=no
  fi
! rm -f 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
--- 5173,5179 ----
  
  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
*************** for ac_declaration in \
*** 4977,4983 ****
     'void exit (int);'
  do
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5201,5206 ----
*************** exit (42);
*** 4995,5005 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 5218,5238 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 5012,5020 ****
  
  continue
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5245,5252 ----
  
  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
*************** exit (42);
*** 5031,5041 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 5263,5283 ----
  _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=$?
*************** else
*** 5047,5053 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  done
  rm -f conftest*
  if test -n "$ac_declaration"; then
--- 5289,5295 ----
  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
*************** else
*** 5103,5109 ****
      : > sub/conftest.c
      for i in 1 2 3 4 5 6; do
        echo '#include "conftst'$i'.h"' >> sub/conftest.c
!       : > sub/conftst$i.h
      done
      echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  
--- 5345,5353 ----
      : > 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
  
*************** else
*** 5131,5139 ****
         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
!       # (even with -Werror).  So we grep stderr for any message
!       # that says an option was ignored.
!       if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
          am_cv_CXX_dependencies_compiler_type=$depmode
          break
        fi
--- 5375,5388 ----
         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
*************** do
*** 5188,5194 ****
    # 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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5437,5442 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 5199,5205 ****
  #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
--- 5447,5453 ----
  #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
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 5211,5216 ****
--- 5459,5465 ----
    (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
*************** rm -f conftest.err conftest.$ac_ext
*** 5231,5237 ****
    # OK, works on sane cases.  Now check whether non-existent headers
    # can be detected and how.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5480,5485 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 5249,5254 ****
--- 5497,5503 ----
    (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
*************** do
*** 5295,5301 ****
    # 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
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5544,5549 ----
*************** cat >>conftest.$ac_ext <<_ACEOF
*** 5306,5312 ****
  #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
--- 5554,5560 ----
  #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
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 5318,5323 ****
--- 5566,5572 ----
    (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
*************** rm -f conftest.err conftest.$ac_ext
*** 5338,5344 ****
    # OK, works on sane cases.  Now check whether non-existent headers
    # can be detected and how.
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 5587,5592 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 5356,5361 ****
--- 5604,5610 ----
    (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
*************** ac_compile='$F77 -c $FFLAGS conftest.$ac
*** 5400,5406 ****
  ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  ac_compiler_gnu=$ac_cv_f77_compiler_gnu
  if test -n "$ac_tool_prefix"; then
!   for ac_prog in g77 f77 xlf frt pgf77 fl32 af77 fort77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95
    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
--- 5649,5655 ----
  ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  ac_compiler_gnu=$ac_cv_f77_compiler_gnu
  if test -n "$ac_tool_prefix"; then
!   for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
    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
*************** fi
*** 5442,5448 ****
  fi
  if test -z "$F77"; then
    ac_ct_F77=$F77
!   for ac_prog in g77 f77 xlf frt pgf77 fl32 af77 fort77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95
  do
    # Extract the first word of "$ac_prog", so it can be a program name with args.
  set dummy $ac_prog; ac_word=$2
--- 5691,5697 ----
  fi
  if test -z "$F77"; then
    ac_ct_F77=$F77
!   for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
  do
    # Extract the first word of "$ac_prog", so it can be a program name with args.
  set dummy $ac_prog; ac_word=$2
*************** fi
*** 5487,5493 ****
  
  
  # Provide some information about the compiler.
! echo "$as_me:5490:" \
       "checking for Fortran 77 compiler version" >&5
  ac_compiler=`set X $ac_compile; echo $2`
  { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
--- 5736,5742 ----
  
  
  # Provide some information about the compiler.
! echo "$as_me:5739:" \
       "checking for Fortran 77 compiler version" >&5
  ac_compiler=`set X $ac_compile; echo $2`
  { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
*************** ac_compiler=`set X $ac_compile; echo $2`
*** 5505,5513 ****
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }
  
  # If we don't use `.F' as extension, the preprocessor is not run on the
! # input file.
  ac_save_ext=$ac_ext
  ac_ext=F
  echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
--- 5754,5763 ----
    ac_status=$?
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); }
+ rm -f a.out
  
  # If we don't use `.F' as extension, the preprocessor is not run on the
! # input file.  (Note that this only needs to work for GNU compilers.)
  ac_save_ext=$ac_ext
  ac_ext=F
  echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
*************** else
*** 5525,5535 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 5775,5795 ----
  _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_f77_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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 5542,5555 ****
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  ac_cv_f77_compiler_gnu=$ac_compiler_gnu
  
  fi
  echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
  echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
  ac_ext=$ac_save_ext
- G77=`test $ac_compiler_gnu = yes && echo yes`
  ac_test_FFLAGS=${FFLAGS+set}
  ac_save_FFLAGS=$FFLAGS
  FFLAGS=
--- 5802,5814 ----
  
  ac_compiler_gnu=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  ac_cv_f77_compiler_gnu=$ac_compiler_gnu
  
  fi
  echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
  echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
  ac_ext=$ac_save_ext
  ac_test_FFLAGS=${FFLAGS+set}
  ac_save_FFLAGS=$FFLAGS
  FFLAGS=
*************** cat >conftest.$ac_ext <<_ACEOF
*** 5566,5576 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 5825,5845 ----
  _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_f77_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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 5583,5589 ****
  
  ac_cv_prog_f77_g=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  
  fi
  echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
--- 5852,5858 ----
  
  ac_cv_prog_f77_g=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  
  fi
  echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
*************** echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
*** 5591,5608 ****
  if test "$ac_test_FFLAGS" = set; then
    FFLAGS=$ac_save_FFLAGS
  elif test $ac_cv_prog_f77_g = yes; then
!   if test "$G77" = yes; then
      FFLAGS="-g -O2"
    else
      FFLAGS="-g"
    fi
  else
!   if test "$G77" = yes; then
      FFLAGS="-O2"
    else
      FFLAGS=
    fi
  fi
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 5860,5879 ----
  if test "$ac_test_FFLAGS" = set; then
    FFLAGS=$ac_save_FFLAGS
  elif test $ac_cv_prog_f77_g = yes; then
!   if test "x$ac_cv_f77_compiler_gnu" = xyes; then
      FFLAGS="-g -O2"
    else
      FFLAGS="-g"
    fi
  else
!   if test "x$ac_cv_f77_compiler_gnu" = xyes; then
      FFLAGS="-O2"
    else
      FFLAGS=
    fi
  fi
+ 
+ G77=`test $ac_compiler_gnu = yes && echo yes`
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
*************** fi
*** 6468,6473 ****
--- 6739,6748 ----
  
  
  
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
  
  lt_prog_compiler_no_builtin_flag=
  
*************** else
*** 6492,6502 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:6495: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:6499: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
--- 6767,6777 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:6770: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:6774: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
*************** else
*** 6724,6734 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:6727: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:6731: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
--- 6999,7009 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:7002: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:7006: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
*************** else
*** 6791,6801 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:6794: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>out/conftest.err)
     ac_status=$?
     cat out/conftest.err >&5
!    echo "$as_me:6798: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s out/conftest2.$ac_objext
     then
       # The compiler can only warn and ignore the option if not recognized
--- 7066,7076 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:7069: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>out/conftest.err)
     ac_status=$?
     cat out/conftest.err >&5
!    echo "$as_me:7073: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s out/conftest2.$ac_objext
     then
       # The compiler can only warn and ignore the option if not recognized
*************** EOF
*** 7131,7137 ****
  	allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an empty executable.
         cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 7406,7411 ----
*************** main ()
*** 7148,7158 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 7422,7442 ----
  _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=$?
*************** else
*** 7169,7175 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
         hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 7453,7460 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
         hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
*************** if test -z "$aix_libpath"; then aix_libp
*** 7182,7188 ****
  	else
  	 # Determine the default libpath from the value encoded in an empty executable.
  	 cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 7467,7472 ----
*************** main ()
*** 7199,7209 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 7483,7503 ----
  _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=$?
*************** else
*** 7220,7226 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
  	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 7514,7521 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
  	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
*************** else
*** 8319,8325 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 8614,8619 ----
*************** dlopen ();
*** 8343,8353 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 8637,8657 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 8360,8366 ****
  
  ac_cv_lib_dl_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
--- 8664,8671 ----
  
  ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
*************** if test "${ac_cv_func_shl_load+set}" = s
*** 8384,8404 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char shl_load (); 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 8689,8716 ----
    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 shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define shl_load innocuous_shl_load
+ 
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char shl_load (); 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 shl_load
+ 
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
*************** return f != shl_load;
*** 8429,8439 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 8741,8761 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 8446,8452 ****
  
  ac_cv_func_shl_load=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
  echo "${ECHO_T}$ac_cv_func_shl_load" >&6
--- 8768,8775 ----
  
  ac_cv_func_shl_load=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
  echo "${ECHO_T}$ac_cv_func_shl_load" >&6
*************** else
*** 8461,8467 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 8784,8789 ----
*************** shl_load ();
*** 8485,8495 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 8807,8827 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 8502,8508 ****
  
  ac_cv_lib_dld_shl_load=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
--- 8834,8841 ----
  
  ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5
*************** if test "${ac_cv_func_dlopen+set}" = set
*** 8516,8536 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char dlopen (); 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 8849,8876 ----
    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 dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define dlopen innocuous_dlopen
+ 
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char dlopen (); 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 dlopen
+ 
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
*************** return f != dlopen;
*** 8561,8571 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 8901,8921 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 8578,8584 ****
  
  ac_cv_func_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
  echo "${ECHO_T}$ac_cv_func_dlopen" >&6
--- 8928,8935 ----
  
  ac_cv_func_dlopen=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
  echo "${ECHO_T}$ac_cv_func_dlopen" >&6
*************** else
*** 8593,8599 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 8944,8949 ----
*************** dlopen ();
*** 8617,8627 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 8967,8987 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 8634,8640 ****
  
  ac_cv_lib_dl_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
--- 8994,9001 ----
  
  ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
*************** else
*** 8650,8656 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-lsvld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 9011,9016 ----
*************** dlopen ();
*** 8674,8684 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 9034,9054 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 8691,8697 ****
  
  ac_cv_lib_svld_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
--- 9061,9068 ----
  
  ac_cv_lib_svld_dlopen=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_svld_dlopen" >&5
*************** else
*** 8707,8713 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 9078,9083 ----
*************** dld_link ();
*** 8731,8741 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 9101,9121 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 8748,8754 ****
  
  ac_cv_lib_dld_dld_link=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
--- 9128,9135 ----
  
  ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
*************** else
*** 8803,8809 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 8806 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 9184,9190 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 9187 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 8901,8907 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 8904 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 9282,9288 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 9285 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** case $host_os in
*** 9937,9943 ****
        allow_undefined_flag_CXX='-berok'
        # Determine the default libpath from the value encoded in an empty executable.
        cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 10318,10323 ----
*************** main ()
*** 9954,9964 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 10334,10354 ----
  _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_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_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 9975,9981 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
        hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 10365,10372 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
        hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
*************** if test -z "$aix_libpath"; then aix_libp
*** 9989,9995 ****
        else
  	# Determine the default libpath from the value encoded in an empty executable.
  	cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 10380,10385 ----
*************** main ()
*** 10006,10016 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 10396,10416 ----
  _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_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_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** else
*** 10027,10033 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
  	hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 10427,10434 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
  	hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
*************** test "$ld_shlibs_CXX" = no && can_build_
*** 10646,10651 ****
--- 11047,11056 ----
  GCC_CXX="$GXX"
  LD_CXX="$LD"
  
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
  
  cat > conftest.$ac_ext <<EOF
  class Foo
*************** echo $ECHO_N "checking for $compiler opt
*** 10917,10923 ****
        mvs*)
  	case $cc_basename in
  	  cxx)
! 	    lt_prog_compiler_pic_CXX='-W c,exportall'
  	    ;;
  	  *)
  	    ;;
--- 11322,11328 ----
        mvs*)
  	case $cc_basename in
  	  cxx)
! 	    lt_prog_compiler_pic_CXX='-Wextra c,exportall'
  	    ;;
  	  *)
  	    ;;
*************** else
*** 11033,11043 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:11036: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:11040: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
--- 11438,11448 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:11441: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:11445: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
*************** else
*** 11100,11110 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:11103: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>out/conftest.err)
     ac_status=$?
     cat out/conftest.err >&5
!    echo "$as_me:11107: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s out/conftest2.$ac_objext
     then
       # The compiler can only warn and ignore the option if not recognized
--- 11505,11515 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:11508: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>out/conftest.err)
     ac_status=$?
     cat out/conftest.err >&5
!    echo "$as_me:11512: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s out/conftest2.$ac_objext
     then
       # The compiler can only warn and ignore the option if not recognized
*************** else
*** 11859,11865 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 12264,12269 ----
*************** dlopen ();
*** 11883,11893 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 12287,12307 ----
  _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_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_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 11900,11906 ****
  
  ac_cv_lib_dl_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
--- 12314,12321 ----
  
  ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
*************** if test "${ac_cv_func_shl_load+set}" = s
*** 11924,11944 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char shl_load (); 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 12339,12366 ----
    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 shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define shl_load innocuous_shl_load
+ 
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char shl_load (); 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 shl_load
+ 
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
*************** return f != shl_load;
*** 11969,11979 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 12391,12411 ----
  _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_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_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 11986,11992 ****
  
  ac_cv_func_shl_load=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
  echo "${ECHO_T}$ac_cv_func_shl_load" >&6
--- 12418,12425 ----
  
  ac_cv_func_shl_load=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
  echo "${ECHO_T}$ac_cv_func_shl_load" >&6
*************** else
*** 12001,12007 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 12434,12439 ----
*************** shl_load ();
*** 12025,12035 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 12457,12477 ----
  _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_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_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 12042,12048 ****
  
  ac_cv_lib_dld_shl_load=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
--- 12484,12491 ----
  
  ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5
*************** if test "${ac_cv_func_dlopen+set}" = set
*** 12056,12076 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char dlopen (); 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 12499,12526 ----
    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 dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define dlopen innocuous_dlopen
+ 
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char dlopen (); 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 dlopen
+ 
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
*************** return f != dlopen;
*** 12101,12111 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 12551,12571 ----
  _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_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_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 12118,12124 ****
  
  ac_cv_func_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
  echo "${ECHO_T}$ac_cv_func_dlopen" >&6
--- 12578,12585 ----
  
  ac_cv_func_dlopen=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
  echo "${ECHO_T}$ac_cv_func_dlopen" >&6
*************** else
*** 12133,12139 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 12594,12599 ----
*************** dlopen ();
*** 12157,12167 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 12617,12637 ----
  _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_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_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 12174,12180 ****
  
  ac_cv_lib_dl_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
--- 12644,12651 ----
  
  ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
*************** else
*** 12190,12196 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-lsvld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 12661,12666 ----
*************** dlopen ();
*** 12214,12224 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 12684,12704 ----
  _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_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_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 12231,12237 ****
  
  ac_cv_lib_svld_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
--- 12711,12718 ----
  
  ac_cv_lib_svld_dlopen=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_svld_dlopen" >&5
*************** else
*** 12247,12253 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 12728,12733 ----
*************** dld_link ();
*** 12271,12281 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 12751,12771 ----
  _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_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_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 12288,12294 ****
  
  ac_cv_lib_dld_dld_link=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
--- 12778,12785 ----
  
  ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
*************** else
*** 12343,12349 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 12346 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12834,12840 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 12837 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12441,12447 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 12444 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12932,12938 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 12935 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 13263,13273 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:13266: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:13270: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
--- 13754,13764 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:13757: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:13761: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
*************** else
*** 13330,13340 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:13333: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>out/conftest.err)
     ac_status=$?
     cat out/conftest.err >&5
!    echo "$as_me:13337: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s out/conftest2.$ac_objext
     then
       # The compiler can only warn and ignore the option if not recognized
--- 13821,13831 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:13824: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>out/conftest.err)
     ac_status=$?
     cat out/conftest.err >&5
!    echo "$as_me:13828: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s out/conftest2.$ac_objext
     then
       # The compiler can only warn and ignore the option if not recognized
*************** EOF
*** 13676,13686 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 14167,14187 ----
  _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_f77_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=$?
*************** else
*** 13697,13703 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
         hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 14198,14205 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
         hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
*************** if test -z "$aix_libpath"; then aix_libp
*** 13716,13726 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 14218,14238 ----
  _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_f77_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=$?
*************** else
*** 13737,13743 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
  	 hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 14249,14256 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
  	 hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
*************** compiler_GCJ=$CC
*** 15246,15251 ****
--- 15759,15768 ----
  # GCJ did not exist at the time GCC didn't implicitly link libc in.
  archive_cmds_need_lc_GCJ=no
  
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
  
  lt_prog_compiler_no_builtin_flag_GCJ=
  
*************** else
*** 15270,15280 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:15273: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:15277: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
--- 15787,15797 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:15790: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:15794: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
*************** else
*** 15502,15512 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:15505: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:15509: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
--- 16019,16029 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:16022: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>conftest.err)
     ac_status=$?
     cat conftest.err >&5
!    echo "$as_me:16026: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s "$ac_outfile"; then
       # The compiler can only warn and ignore the option if not recognized
       # So say no if there are warnings
*************** else
*** 15569,15579 ****
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:15572: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>out/conftest.err)
     ac_status=$?
     cat out/conftest.err >&5
!    echo "$as_me:15576: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s out/conftest2.$ac_objext
     then
       # The compiler can only warn and ignore the option if not recognized
--- 16086,16096 ----
     -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
     -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
     -e 's:$: $lt_compiler_flag:'`
!    (eval echo "\"\$as_me:16089: $lt_compile\"" >&5)
     (eval "$lt_compile" 2>out/conftest.err)
     ac_status=$?
     cat out/conftest.err >&5
!    echo "$as_me:16093: \$? = $ac_status" >&5
     if (exit $ac_status) && test -s out/conftest2.$ac_objext
     then
       # The compiler can only warn and ignore the option if not recognized
*************** EOF
*** 15909,15915 ****
  	allow_undefined_flag_GCJ='-berok'
         # Determine the default libpath from the value encoded in an empty executable.
         cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 16426,16431 ----
*************** main ()
*** 15926,15936 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 16442,16462 ----
  _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=$?
*************** else
*** 15947,15953 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
         hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 16473,16480 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
         hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
*************** if test -z "$aix_libpath"; then aix_libp
*** 15960,15966 ****
  	else
  	 # Determine the default libpath from the value encoded in an empty executable.
  	 cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 16487,16492 ----
*************** main ()
*** 15977,15987 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 16503,16523 ----
  _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=$?
*************** else
*** 15998,16004 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
  	 hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 16534,16541 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
  
  	 hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
*************** else
*** 17097,17103 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 17634,17639 ----
*************** dlopen ();
*** 17121,17131 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 17657,17677 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 17138,17144 ****
  
  ac_cv_lib_dl_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
--- 17684,17691 ----
  
  ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
*************** if test "${ac_cv_func_shl_load+set}" = s
*** 17162,17182 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char shl_load (); 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 17709,17736 ----
    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 shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define shl_load innocuous_shl_load
+ 
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char shl_load (); 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 shl_load
+ 
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
*************** return f != shl_load;
*** 17207,17217 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 17761,17781 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 17224,17230 ****
  
  ac_cv_func_shl_load=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
  echo "${ECHO_T}$ac_cv_func_shl_load" >&6
--- 17788,17795 ----
  
  ac_cv_func_shl_load=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
  echo "${ECHO_T}$ac_cv_func_shl_load" >&6
*************** else
*** 17239,17245 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 17804,17809 ----
*************** shl_load ();
*** 17263,17273 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 17827,17847 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 17280,17286 ****
  
  ac_cv_lib_dld_shl_load=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
--- 17854,17861 ----
  
  ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5
*************** if test "${ac_cv_func_dlopen+set}" = set
*** 17294,17314 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char dlopen (); 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 17869,17896 ----
    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 dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define dlopen innocuous_dlopen
+ 
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char dlopen (); 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 dlopen
+ 
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
*************** return f != dlopen;
*** 17339,17349 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 17921,17941 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 17356,17362 ****
  
  ac_cv_func_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
  echo "${ECHO_T}$ac_cv_func_dlopen" >&6
--- 17948,17955 ----
  
  ac_cv_func_dlopen=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
  echo "${ECHO_T}$ac_cv_func_dlopen" >&6
*************** else
*** 17371,17377 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 17964,17969 ----
*************** dlopen ();
*** 17395,17405 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 17987,18007 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 17412,17418 ****
  
  ac_cv_lib_dl_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
--- 18014,18021 ----
  
  ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
*************** else
*** 17428,17434 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-lsvld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 18031,18036 ----
*************** dlopen ();
*** 17452,17462 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 18054,18074 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 17469,17475 ****
  
  ac_cv_lib_svld_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
--- 18081,18088 ----
  
  ac_cv_lib_svld_dlopen=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_svld_dlopen" >&5
*************** else
*** 17485,17491 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 18098,18103 ----
*************** dld_link ();
*** 17509,17519 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 18121,18141 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 17526,17532 ****
  
  ac_cv_lib_dld_dld_link=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
--- 18148,18155 ----
  
  ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
*************** else
*** 17581,17587 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 17584 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 18204,18210 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 18207 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 17679,17685 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 17682 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 18302,18308 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 18305 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** if eval "test \"\${$as_ac_Header+set}\" 
*** 18701,18707 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 19324,19329 ----
*************** return 0;
*** 18721,18731 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 19343,19363 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 18738,18744 ****
  
  eval "$as_ac_Header=no"
  fi
! rm -f 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
--- 19370,19376 ----
  
  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
*************** else
*** 18761,18767 ****
    ac_func_search_save_LIBS=$LIBS
  ac_cv_search_opendir=no
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 19393,19398 ----
*************** opendir ();
*** 18785,18795 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 19416,19436 ----
  _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=$?
*************** else
*** 18801,18812 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in dir; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 19442,19453 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in dir; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** opendir ();
*** 18830,18840 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 19471,19491 ----
  _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=$?
*************** else
*** 18847,18853 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
--- 19498,19505 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
*************** else
*** 18868,18874 ****
    ac_func_search_save_LIBS=$LIBS
  ac_cv_search_opendir=no
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 19520,19525 ----
*************** opendir ();
*** 18892,18902 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 19543,19563 ----
  _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=$?
*************** else
*** 18908,18919 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in x; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 19569,19580 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  if test "$ac_cv_search_opendir" = no; then
    for ac_lib in x; do
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
*************** opendir ();
*** 18937,18947 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 19598,19618 ----
  _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=$?
*************** else
*** 18954,18960 ****
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
--- 19625,19632 ----
  sed 's/^/| /' conftest.$ac_ext >&5
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
    done
  fi
  LIBS=$ac_func_search_save_LIBS
*************** if test "${ac_cv_func_shl_load+set}" = s
*** 19137,19157 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char shl_load (); 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 19809,19836 ----
    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 shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define shl_load innocuous_shl_load
+ 
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char shl_load (); 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 shl_load
+ 
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
*************** return f != shl_load;
*** 19182,19192 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 19861,19881 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 19199,19205 ****
  
  ac_cv_func_shl_load=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
  echo "${ECHO_T}$ac_cv_func_shl_load" >&6
--- 19888,19895 ----
  
  ac_cv_func_shl_load=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
  echo "${ECHO_T}$ac_cv_func_shl_load" >&6
*************** else
*** 19218,19224 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 19908,19913 ----
*************** shl_load ();
*** 19242,19252 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 19931,19951 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 19259,19265 ****
  
  ac_cv_lib_dld_shl_load=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
--- 19958,19965 ----
  
  ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5
*************** else
*** 19280,19286 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldl  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 19980,19985 ----
*************** dlopen ();
*** 19304,19314 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 20003,20023 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 19321,19327 ****
  
  ac_cv_lib_dl_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
--- 20030,20037 ----
  
  ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
*************** _ACEOF
*** 19335,19341 ****
  	        LIBADD_DL="-ldl" libltdl_cv_lib_dl_dlopen="yes"
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 20045,20050 ----
*************** dlopen(0, 0);
*** 19355,19365 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 20064,20084 ----
  _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=$?
*************** else
*** 19382,19388 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-lsvld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 20101,20106 ----
*************** dlopen ();
*** 19406,19416 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 20124,20144 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 19423,19429 ****
  
  ac_cv_lib_svld_dlopen=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
--- 20151,20158 ----
  
  ac_cv_lib_svld_dlopen=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_svld_dlopen" >&5
*************** else
*** 19444,19450 ****
    ac_check_lib_save_LIBS=$LIBS
  LIBS="-ldld  $LIBS"
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 20173,20178 ----
*************** dld_link ();
*** 19468,19478 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 20196,20216 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 19485,19491 ****
  
  ac_cv_lib_dld_dld_link=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  LIBS=$ac_check_lib_save_LIBS
  fi
  echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
--- 20223,20230 ----
  
  ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
*************** if test "${ac_cv_func__dyld_func_lookup+
*** 19504,19524 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char _dyld_func_lookup (); 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 20243,20270 ----
    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 _dyld_func_lookup to an innocuous variant, in case <limits.h> declares _dyld_func_lookup.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define _dyld_func_lookup innocuous__dyld_func_lookup
+ 
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char _dyld_func_lookup (); 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 _dyld_func_lookup
+ 
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
*************** return f != _dyld_func_lookup;
*** 19549,19559 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 20295,20315 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 19566,19572 ****
  
  ac_cv_func__dyld_func_lookup=no
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func__dyld_func_lookup" >&5
  echo "${ECHO_T}$ac_cv_func__dyld_func_lookup" >&6
--- 20322,20329 ----
  
  ac_cv_func__dyld_func_lookup=no
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_func__dyld_func_lookup" >&5
  echo "${ECHO_T}$ac_cv_func__dyld_func_lookup" >&6
*************** fi
*** 19586,19592 ****
  
  
  fi
! rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  
  fi
  
--- 20343,20350 ----
  
  
  fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
  
  fi
  
*************** if eval "test \"\${$as_ac_var+set}\" = s
*** 19611,19631 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 20369,20396 ----
    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"
*************** return f != $ac_func;
*** 19656,19666 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 20421,20441 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 19673,19679 ****
  
  eval "$as_ac_var=no"
  fi
! rm -f 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
--- 20448,20455 ----
  
  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
*************** else
*** 19758,19764 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 19761 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 20534,20540 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
! #line 20537 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 19959,19965 ****
  echo "$as_me:$LINENO: checking $ac_header usability" >&5
  echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 20735,20740 ----
*************** $ac_includes_default
*** 19970,19980 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 20745,20765 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 19987,19993 ****
  
  ac_header_compiler=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  echo "${ECHO_T}$ac_header_compiler" >&6
  
--- 20772,20778 ----
  
  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
  
*************** echo "${ECHO_T}$ac_header_compiler" >&6
*** 19995,20001 ****
  echo "$as_me:$LINENO: checking $ac_header presence" >&5
  echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 20780,20785 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 20013,20018 ****
--- 20797,20803 ----
    (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
*************** echo "$as_me:$LINENO: result: $ac_header
*** 20032,20064 ****
  echo "${ECHO_T}$ac_header_preproc" >&6
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc 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 preprocessor's result" >&5
! echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
!     (
!       cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
! _ASBOX
!     ) |
!       sed "s/^/$as_me: WARNING:     /" >&2
      ;;
!   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: proceeding with the preprocessor's result" >&5
  echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
      (
        cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
--- 20817,20848 ----
  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 bug-libtool@gnu.org ##
! ## ---------------------------------- ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
*************** echo $ECHO_N "checking for $ac_header...
*** 20069,20075 ****
  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
--- 20853,20859 ----
  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
*************** if test "${ac_cv_type_error_t+set}" = se
*** 20091,20097 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 20875,20880 ----
*************** if (sizeof (error_t))
*** 20114,20124 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 20897,20917 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 20131,20137 ****
  
  ac_cv_type_error_t=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_type_error_t" >&5
  echo "${ECHO_T}$ac_cv_type_error_t" >&6
--- 20924,20930 ----
  
  ac_cv_type_error_t=no
  fi
! rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  echo "$as_me:$LINENO: result: $ac_cv_type_error_t" >&5
  echo "${ECHO_T}$ac_cv_type_error_t" >&6
*************** if eval "test \"\${$as_ac_var+set}\" = s
*** 20165,20185 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 20958,20985 ----
    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"
*************** return f != $ac_func;
*** 20210,20220 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 21010,21030 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 20227,20233 ****
  
  eval "$as_ac_var=no"
  fi
! rm -f 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
--- 21037,21044 ----
  
  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
*************** else
*** 20283,20289 ****
  echo "$as_me:$LINENO: checking $ac_header usability" >&5
  echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 21094,21099 ----
*************** $ac_includes_default
*** 20294,20304 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 21104,21124 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 20311,20317 ****
  
  ac_header_compiler=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  echo "${ECHO_T}$ac_header_compiler" >&6
  
--- 21131,21137 ----
  
  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
  
*************** echo "${ECHO_T}$ac_header_compiler" >&6
*** 20319,20325 ****
  echo "$as_me:$LINENO: checking $ac_header presence" >&5
  echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 21139,21144 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 20337,20342 ****
--- 21156,21162 ----
    (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
*************** echo "$as_me:$LINENO: result: $ac_header
*** 20356,20388 ****
  echo "${ECHO_T}$ac_header_preproc" >&6
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc 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 preprocessor's result" >&5
! echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
!     (
!       cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
! _ASBOX
!     ) |
!       sed "s/^/$as_me: WARNING:     /" >&2
      ;;
!   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: proceeding with the preprocessor's result" >&5
  echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
      (
        cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
--- 21176,21207 ----
  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 bug-libtool@gnu.org ##
! ## ---------------------------------- ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
*************** echo $ECHO_N "checking for $ac_header...
*** 20393,20399 ****
  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
--- 21212,21218 ----
  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
*************** else
*** 20428,20434 ****
  echo "$as_me:$LINENO: checking $ac_header usability" >&5
  echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 21247,21252 ----
*************** $ac_includes_default
*** 20439,20449 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 21257,21277 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 20456,20462 ****
  
  ac_header_compiler=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  echo "${ECHO_T}$ac_header_compiler" >&6
  
--- 21284,21290 ----
  
  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
  
*************** echo "${ECHO_T}$ac_header_compiler" >&6
*** 20464,20470 ****
  echo "$as_me:$LINENO: checking $ac_header presence" >&5
  echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 21292,21297 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 20482,20487 ****
--- 21309,21315 ----
    (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
*************** echo "$as_me:$LINENO: result: $ac_header
*** 20501,20533 ****
  echo "${ECHO_T}$ac_header_preproc" >&6
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc 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 preprocessor's result" >&5
! echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
!     (
!       cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
! _ASBOX
!     ) |
!       sed "s/^/$as_me: WARNING:     /" >&2
      ;;
!   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: proceeding with the preprocessor's result" >&5
  echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
      (
        cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
--- 21329,21360 ----
  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 bug-libtool@gnu.org ##
! ## ---------------------------------- ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
*************** echo $ECHO_N "checking for $ac_header...
*** 20538,20544 ****
  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
--- 21365,21371 ----
  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
*************** else
*** 20571,20577 ****
  echo "$as_me:$LINENO: checking $ac_header usability" >&5
  echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 21398,21403 ----
*************** $ac_includes_default
*** 20582,20592 ****
  _ACEOF
  rm -f conftest.$ac_objext
  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); } &&
!          { ac_try='test -s conftest.$ac_objext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 21408,21428 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 20599,20605 ****
  
  ac_header_compiler=no
  fi
! rm -f conftest.$ac_objext conftest.$ac_ext
  echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  echo "${ECHO_T}$ac_header_compiler" >&6
  
--- 21435,21441 ----
  
  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
  
*************** echo "${ECHO_T}$ac_header_compiler" >&6
*** 20607,20613 ****
  echo "$as_me:$LINENO: checking $ac_header presence" >&5
  echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
--- 21443,21448 ----
*************** if { (eval echo "$as_me:$LINENO: \"$ac_c
*** 20625,20630 ****
--- 21460,21466 ----
    (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
*************** echo "$as_me:$LINENO: result: $ac_header
*** 20644,20676 ****
  echo "${ECHO_T}$ac_header_preproc" >&6
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc 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 preprocessor's result" >&5
! echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
!     (
!       cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
! _ASBOX
!     ) |
!       sed "s/^/$as_me: WARNING:     /" >&2
      ;;
!   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: proceeding with the preprocessor's result" >&5
  echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
      (
        cat <<\_ASBOX
! ## ------------------------------------ ##
! ## Report this to bug-autoconf@gnu.org. ##
! ## ------------------------------------ ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
--- 21480,21511 ----
  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 bug-libtool@gnu.org ##
! ## ---------------------------------- ##
  _ASBOX
      ) |
        sed "s/^/$as_me: WARNING:     /" >&2
*************** echo $ECHO_N "checking for $ac_header...
*** 20681,20687 ****
  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
--- 21516,21522 ----
  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
*************** if eval "test \"\${$as_ac_var+set}\" = s
*** 20708,20728 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 21543,21570 ----
    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"
*************** return f != $ac_func;
*** 20753,20763 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 21595,21615 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 20770,20776 ****
  
  eval "$as_ac_var=no"
  fi
! rm -f 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
--- 21622,21629 ----
  
  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 eval "test \"\${$as_ac_var+set}\" = s
*** 20793,20813 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 21646,21673 ----
    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"
*************** return f != $ac_func;
*** 20838,20848 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 21698,21718 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 20855,20861 ****
  
  eval "$as_ac_var=no"
  fi
! rm -f 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
--- 21725,21732 ----
  
  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 eval "test \"\${$as_ac_var+set}\" = s
*** 20878,20898 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 21749,21776 ----
    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"
*************** return f != $ac_func;
*** 20923,20933 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 21801,21821 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 20940,20946 ****
  
  eval "$as_ac_var=no"
  fi
! rm -f 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
--- 21828,21835 ----
  
  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 eval "test \"\${$as_ac_var+set}\" = s
*** 20963,20983 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 21852,21879 ----
    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"
*************** return f != $ac_func;
*** 21008,21018 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 21904,21924 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 21025,21031 ****
  
  eval "$as_ac_var=no"
  fi
! rm -f 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
--- 21931,21938 ----
  
  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 eval "test \"\${$as_ac_var+set}\" = s
*** 21049,21069 ****
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
  /* confdefs.h.  */
  _ACEOF
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  /* 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
  /* Override any gcc2 internal prototype to avoid an error.  */
  #ifdef __cplusplus
  extern "C"
--- 21956,21983 ----
    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"
*************** return f != $ac_func;
*** 21094,21104 ****
  _ACEOF
  rm -f conftest.$ac_objext 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='test -s conftest$ac_exeext'
    { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    (eval $ac_try) 2>&5
    ac_status=$?
--- 22008,22028 ----
  _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=$?
*************** sed 's/^/| /' conftest.$ac_ext >&5
*** 21111,21117 ****
  
  eval "$as_ac_var=no"
  fi
! rm -f 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
--- 22035,22042 ----
  
  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
*************** _ACEOF
*** 21159,21171 ****
        # `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;
  } |
--- 22084,22096 ----
        # `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;
  } |
*************** test "x$exec_prefix" = xNONE && exec_pre
*** 21195,21218 ****
  # 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'
--- 22120,22174 ----
  # 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
  
! # Transform confdefs.h into DEFS.
! # Protect against shell expansion while executing Makefile rules.
! # Protect against Makefile macro expansion.
! #
! # If the first sed substitution is executed (which looks for macros that
! # take arguments), then we branch to the quote section.  Otherwise,
! # look for a macro that doesn't take arguments.
! cat >confdef2opt.sed <<\_ACEOF
! t clear
! : clear
! s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\),-D\1=\2,g
! t quote
! s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\),-D\1=\2,g
! t quote
! d
! : quote
! s,[	 `~#$^&*(){}\\|;'"<>?],\\&,g
! s,\[,\\&,g
! s,\],\\&,g
! s,\$,$$,g
! p
! _ACEOF
! # We use echo to avoid assuming a particular line-breaking character.
! # The extra dot is to prevent the shell from consuming trailing
! # line-breaks from the sub-command output.  A line-break within
! # single-quotes doesn't work because, if this script is created in a
! # platform that uses two characters for line-breaks (e.g., DOS), tr
! # would break.
! ac_LF_and_DOT=`echo; echo .`
! DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
! rm -f confdef2opt.sed
! 
  
  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'
*************** if test -n "${ZSH_VERSION+set}" && (emul
*** 21298,21306 ****
  elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
    set -o posix
  fi
  
  # Support unset when possible.
! if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
    as_unset=unset
  else
    as_unset=false
--- 22254,22263 ----
  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
*************** for as_var in \
*** 21319,21325 ****
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
    LC_TELEPHONE LC_TIME
  do
!   if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
      eval $as_var=C; export $as_var
    else
      $as_unset $as_var
--- 22276,22282 ----
    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
*************** rm -f conf$$ conf$$.exe conf$$.file
*** 21498,21513 ****
  if mkdir -p . 2>/dev/null; then
    as_mkdir_p=:
  else
    as_mkdir_p=false
  fi
  
  as_executable_p="test -f"
  
  # Sed expression to map a string onto a valid CPP name.
! as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  
  
  # IFS
--- 22455,22471 ----
  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
*************** _ASBOX
*** 21534,21540 ****
  cat >&5 <<_CSEOF
  
  This file was extended by libltdl $as_me 1.2, which was
! generated by GNU Autoconf 2.57.  Invocation command line was
  
    CONFIG_FILES    = $CONFIG_FILES
    CONFIG_HEADERS  = $CONFIG_HEADERS
--- 22492,22498 ----
  cat >&5 <<_CSEOF
  
  This file was extended by libltdl $as_me 1.2, which was
! generated by GNU Autoconf 2.59.  Invocation command line was
  
    CONFIG_FILES    = $CONFIG_FILES
    CONFIG_HEADERS  = $CONFIG_HEADERS
*************** Usage: $0 [OPTIONS] [FILE]...
*** 21578,21593 ****
    -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 commands:
  $config_commands
  
--- 22536,22546 ----
    -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
  
  Configuration files:
  $config_files
  
  Configuration commands:
  $config_commands
  
*************** _ACEOF
*** 21597,21607 ****
  cat >>$CONFIG_STATUS <<_ACEOF
  ac_cs_version="\\
  libltdl config.status 1.2
! configured by $0, generated by GNU Autoconf 2.57,
    with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  
! Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
! 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
--- 22550,22559 ----
  cat >>$CONFIG_STATUS <<_ACEOF
  ac_cs_version="\\
  libltdl config.status 1.2
! 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
*************** for ac_config_target in $ac_config_targe
*** 21707,21715 ****
  do
    case "$ac_config_target" in
    # Handling of arguments.
    "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
    "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-   "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config-h.in" ;;
    *) { { 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; }; };;
--- 22659,22667 ----
  do
    case "$ac_config_target" in
    # Handling of arguments.
+   "config.h" ) CONFIG_FILES="$CONFIG_FILES config.h:config-h.in" ;;
    "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
    "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
    *) { { 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; }; };;
*************** done
*** 21722,21728 ****
  # 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_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
  fi
  
--- 22674,22679 ----
*************** s,@AUTOCONF@,$AUTOCONF,;t t
*** 21806,21819 ****
  s,@AUTOMAKE@,$AUTOMAKE,;t t
  s,@AUTOHEADER@,$AUTOHEADER,;t t
  s,@MAKEINFO@,$MAKEINFO,;t t
- s,@AMTAR@,$AMTAR,;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,@AWK@,$AWK,;t t
  s,@SET_MAKE@,$SET_MAKE,;t t
  s,@am__leading_dot@,$am__leading_dot,;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
--- 22757,22773 ----
  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,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
  s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
  s,@MAINT@,$MAINT,;t t
*************** _ACEOF
*** 21903,21911 ****
        (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
--- 22857,22865 ----
        (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
*************** for ac_file in : $CONFIG_FILES; do test 
*** 21923,21943 ****
    # 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; }
--- 22877,22897 ----
    # 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; }
*************** echo X"$ac_file" |
*** 21953,21962 ****
        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; }
--- 22907,22916 ----
        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; }
*************** case $srcdir in
*** 21994,22005 ****
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
! # absolute.
! ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
! ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
! ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
! ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  
  
    case $INSTALL in
--- 22948,22992 ----
      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
*************** echo "$as_me: creating $ac_file" >&6;}
*** 22021,22027 ****
      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.
--- 23008,23014 ----
      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.
*************** echo "$as_me: creating $ac_file" >&6;}
*** 22030,22053 ****
        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
--- 23017,23040 ----
        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
*************** _ACEOF
*** 22082,22273 ****
  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; }; }
!          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"
--- 23069,23092 ----
  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"
*************** echo X"$ac_file" |
*** 22276,22285 ****
        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; }
--- 23095,23104 ----
        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; }
*************** echo X"$as_dir" |
*** 22292,22348 ****
  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_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'`
    ac_builddir=.
  
  if test "$ac_dir" != .; then
--- 23111,23116 ----
*************** case $srcdir in
*** 22368,22379 ****
      ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
      ac_top_srcdir=$ac_top_builddir$srcdir ;;
  esac
! # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
! # absolute.
! ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
! ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
! ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
! ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  
  
    { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
--- 23136,23180 ----
      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 command
*** 22391,22400 ****
    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; }
--- 23192,23201 ----
    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; }
*************** echo X"$mf" |
*** 22404,22439 ****
    else
      continue
    fi
!   grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
!   # Extract the definition of DEP_FILES from the Makefile without
!   # running `make'.
!   DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
    test -z "$DEPDIR" && continue
    # When using ansi2knr, U may be empty or an underscore; expand it
!   U=`sed -n -e '/^U = / s///p' < "$mf"`
!   test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
!   # 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 -e '
!     /^DEP_FILES = .*\\\\$/ {
!       s/^DEP_FILES = //
!       :loop
! 	s/\\\\$//
! 	p
! 	n
! 	/\\\\$/ b loop
!       p
!     }
!     /^DEP_FILES = / s/^DEP_FILES = //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; }
--- 23205,23234 ----
    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; }
*************** echo X"$file" |
*** 22449,22458 ****
        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; }
--- 23244,23253 ----
        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; }
diff -Nrcpad gcc-3.4.3/libjava/libltdl/configure.ac gcc-4.0.0/libjava/libltdl/configure.ac
*** gcc-3.4.3/libjava/libltdl/configure.ac	Thu Jan 15 03:41:49 2004
--- gcc-4.0.0/libjava/libltdl/configure.ac	Sun Sep 12 17:11:12 2004
***************
*** 20,28 ****
  ## ------------------------ ##
  ## Autoconf initialisation. ##
  ## ------------------------ ##
! AC_PREREQ(2.57)
  AC_INIT([libltdl], [1.2], [bug-libtool@gnu.org])
  AC_CONFIG_SRCDIR([ltdl.c])
  
  
  ## ------------------------------- ##
--- 20,29 ----
  ## ------------------------ ##
  ## Autoconf initialisation. ##
  ## ------------------------ ##
! AC_PREREQ(2.59)
  AC_INIT([libltdl], [1.2], [bug-libtool@gnu.org])
  AC_CONFIG_SRCDIR([ltdl.c])
+ AC_CONFIG_FILES([config.h:config-h.in])
  
  
  ## ------------------------------- ##
*************** fi
*** 47,54 ****
  ## ------------------------ ##
  ## Automake Initialisation. ##
  ## ------------------------ ##
! AM_INIT_AUTOMAKE(AC_PACKAGE_TARNAME, AC_PACKAGE_VERSION, -)
! AM_CONFIG_HEADER([config.h:config-h.in])
  AM_MAINTAINER_MODE
  
  
--- 48,54 ----
  ## ------------------------ ##
  ## Automake Initialisation. ##
  ## ------------------------ ##
! AM_INIT_AUTOMAKE([1.9.1])
  AM_MAINTAINER_MODE
  
  
diff -Nrcpad gcc-3.4.3/libjava/libtool-version gcc-4.0.0/libjava/libtool-version
*** gcc-3.4.3/libjava/libtool-version	Mon Jan 19 18:58:47 2004
--- gcc-4.0.0/libjava/libtool-version	Mon Jan 19 19:01:59 2004
***************
*** 3,6 ****
  # a separate file so that version updates don't involve re-running
  # automake.
  # CURRENT:REVISION:AGE
! 5:0:0
--- 3,6 ----
  # a separate file so that version updates don't involve re-running
  # automake.
  # CURRENT:REVISION:AGE
! 6:0:0
diff -Nrcpad gcc-3.4.3/libjava/link.cc gcc-4.0.0/libjava/link.cc
*** gcc-3.4.3/libjava/link.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/link.cc	Thu Mar 17 00:15:40 2005
***************
*** 0 ****
--- 1,1737 ----
+ // link.cc - Code for linking and resolving classes and pool entries.
+ 
+ /* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ /* Author: Kresten Krab Thorup <krab@gnu.org>  */
+ 
+ #include <config.h>
+ #include <platform.h>
+ 
+ #include <stdio.h>
+ 
+ #include <java-interp.h>
+ 
+ #include <jvm.h>
+ #include <gcj/cni.h>
+ #include <string.h>
+ #include <limits.h>
+ #include <java-cpool.h>
+ #include <execution.h>
+ #include <java/lang/Class.h>
+ #include <java/lang/String.h>
+ #include <java/lang/StringBuffer.h>
+ #include <java/lang/Thread.h>
+ #include <java/lang/InternalError.h>
+ #include <java/lang/VirtualMachineError.h>
+ #include <java/lang/VerifyError.h>
+ #include <java/lang/NoSuchFieldError.h>
+ #include <java/lang/NoSuchMethodError.h>
+ #include <java/lang/ClassFormatError.h>
+ #include <java/lang/IllegalAccessError.h>
+ #include <java/lang/AbstractMethodError.h>
+ #include <java/lang/NoClassDefFoundError.h>
+ #include <java/lang/IncompatibleClassChangeError.h>
+ #include <java/lang/VerifyError.h>
+ #include <java/lang/VMClassLoader.h>
+ #include <java/lang/reflect/Modifier.h>
+ #include <java/security/CodeSource.h>
+ 
+ using namespace gcj;
+ 
+ // When true, print debugging information about class loading.
+ bool gcj::verbose_class_flag;
+ 
+ typedef unsigned int uaddr __attribute__ ((mode (pointer)));
+ 
+ template<typename T>
+ struct aligner
+ {
+   char c;
+   T field;
+ };
+ 
+ #define ALIGNOF(TYPE) (offsetof (aligner<TYPE>, field))
+ 
+ // This returns the alignment of a type as it would appear in a
+ // structure.  This can be different from the alignment of the type
+ // itself.  For instance on x86 double is 8-aligned but struct{double}
+ // is 4-aligned.
+ int
+ _Jv_Linker::get_alignment_from_class (jclass klass)
+ {
+   if (klass == JvPrimClass (byte))
+     return ALIGNOF (jbyte);
+   else if (klass == JvPrimClass (short))
+     return ALIGNOF (jshort);
+   else if (klass == JvPrimClass (int)) 
+     return ALIGNOF (jint);
+   else if (klass == JvPrimClass (long))
+     return ALIGNOF (jlong);
+   else if (klass == JvPrimClass (boolean))
+     return ALIGNOF (jboolean);
+   else if (klass == JvPrimClass (char))
+     return ALIGNOF (jchar);
+   else if (klass == JvPrimClass (float))
+     return ALIGNOF (jfloat);
+   else if (klass == JvPrimClass (double))
+     return ALIGNOF (jdouble);
+   else
+     return ALIGNOF (jobject);
+ }
+ 
+ void
+ _Jv_Linker::resolve_field (_Jv_Field *field, java::lang::ClassLoader *loader)
+ {
+   if (! field->isResolved ())
+     {
+       _Jv_Utf8Const *sig = (_Jv_Utf8Const*)field->type;
+       field->type = _Jv_FindClassFromSignature (sig->chars(), loader);
+       field->flags &= ~_Jv_FIELD_UNRESOLVED_FLAG;
+     }
+ }
+ 
+ // A helper for find_field that knows how to recursively search
+ // superclasses and interfaces.
+ _Jv_Field *
+ _Jv_Linker::find_field_helper (jclass search, _Jv_Utf8Const *name,
+ 			       _Jv_Utf8Const *type_name,
+ 			       jclass *declarer)
+ {
+   while (search)
+     {
+       // From 5.4.3.2.  First search class itself.
+       for (int i = 0; i < search->field_count; ++i)
+ 	{
+ 	  _Jv_Field *field = &search->fields[i];
+ 	  if (! _Jv_equalUtf8Consts (field->name, name))
+ 	    continue;
+ 
+ 	  if (! field->isResolved ())
+ 	    resolve_field (field, search->loader);
+ 
+ 	  // Note that we compare type names and not types.  This is
+ 	  // bizarre, but we do it because we want to find a field
+ 	  // (and terminate the search) if it has the correct
+ 	  // descriptor -- but then later reject it if the class
+ 	  // loader check results in different classes.  We can't just
+ 	  // pass in the descriptor and check that way, because when
+ 	  // the field is already resolved there is no easy way to
+ 	  // find its descriptor again.
+ 	  if (_Jv_equalUtf8Consts (type_name, field->type->name))
+ 	    {
+ 	      *declarer = search;
+ 	      return field;
+ 	    }
+ 	}
+ 
+       // Next search direct interfaces.
+       for (int i = 0; i < search->interface_count; ++i)
+ 	{
+ 	  _Jv_Field *result = find_field_helper (search->interfaces[i], name,
+ 						 type_name, declarer);
+ 	  if (result)
+ 	    return result;
+ 	}
+ 
+       // Now search superclass.
+       search = search->superclass;
+     }
+ 
+   return NULL;
+ }
+ 
+ bool
+ _Jv_Linker::has_field_p (jclass search, _Jv_Utf8Const *field_name)
+ {
+   for (int i = 0; i < search->field_count; ++i)
+     {
+       _Jv_Field *field = &search->fields[i];
+       if (_Jv_equalUtf8Consts (field->name, field_name))
+ 	return true;
+     }
+   return false;
+ }
+ 
+ // Find a field.
+ // KLASS is the class that is requesting the field.
+ // OWNER is the class in which the field should be found.
+ // FIELD_TYPE_NAME is the type descriptor for the field.
+ // This function does the class loader type checks, and
+ // also access checks.  Returns the field, or throws an
+ // exception on error.
+ _Jv_Field *
+ _Jv_Linker::find_field (jclass klass, jclass owner,
+ 			_Jv_Utf8Const *field_name,
+ 			_Jv_Utf8Const *field_type_name)
+ {
+   // FIXME: this allocates a _Jv_Utf8Const each time.  We should make
+   // it cheaper.
+   jclass field_type = _Jv_FindClassFromSignature (field_type_name->chars(),
+ 						  klass->loader);
+ 
+   jclass found_class = 0;
+   _Jv_Field *the_field = find_field_helper (owner, field_name,
+ 					    field_type->name, &found_class);
+ 
+   if (the_field == 0)
+     {
+       java::lang::StringBuffer *sb = new java::lang::StringBuffer();
+       sb->append(JvNewStringLatin1("field "));
+       sb->append(owner->getName());
+       sb->append(JvNewStringLatin1("."));
+       sb->append(_Jv_NewStringUTF(field_name->chars()));
+       sb->append(JvNewStringLatin1(" was not found."));
+       throw new java::lang::NoSuchFieldError (sb->toString());
+     }
+ 
+   if (_Jv_CheckAccess (klass, found_class, the_field->flags))
+     {
+       // Note that the field returned by find_field_helper is always
+       // resolved.  There's no point checking class loaders here,
+       // since we already did the work to look up all the types.
+       // FIXME: being lazy here would be nice.
+       if (the_field->type != field_type)
+ 	throw new java::lang::LinkageError
+ 	  (JvNewStringLatin1 
+ 	   ("field type mismatch with different loaders"));
+     }
+   else
+     {
+       java::lang::StringBuffer *sb
+ 	= new java::lang::StringBuffer ();
+       sb->append(klass->getName());
+       sb->append(JvNewStringLatin1(": "));
+       sb->append(found_class->getName());
+       sb->append(JvNewStringLatin1("."));
+       sb->append(_Jv_NewStringUtf8Const (field_name));
+       throw new java::lang::IllegalAccessError(sb->toString());
+     }
+ 
+   return the_field;
+ }
+ 
+ _Jv_word
+ _Jv_Linker::resolve_pool_entry (jclass klass, int index)
+ {
+   using namespace java::lang::reflect;
+ 
+   _Jv_Constants *pool = &klass->constants;
+ 
+   if ((pool->tags[index] & JV_CONSTANT_ResolvedFlag) != 0)
+     return pool->data[index];
+ 
+   switch (pool->tags[index])
+     {
+     case JV_CONSTANT_Class:
+       {
+ 	_Jv_Utf8Const *name = pool->data[index].utf8;
+ 
+ 	jclass found;
+ 	if (name->first() == '[')
+ 	  found = _Jv_FindClassFromSignature (name->chars(),
+ 					      klass->loader);
+ 	else
+ 	  found = _Jv_FindClass (name, klass->loader);
+ 
+ 	if (! found)
+ 	  throw new java::lang::NoClassDefFoundError (name->toString());
+ 
+ 	// Check accessibility, but first strip array types as
+ 	// _Jv_ClassNameSamePackage can't handle arrays.
+ 	jclass check;
+ 	for (check = found;
+ 	     check && check->isArray();
+ 	     check = check->getComponentType())
+ 	  ;
+ 	if ((found->accflags & Modifier::PUBLIC) == Modifier::PUBLIC
+ 	    || (_Jv_ClassNameSamePackage (check->name,
+ 					  klass->name)))
+ 	  {
+ 	    pool->data[index].clazz = found;
+ 	    pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
+ 	  }
+ 	else
+ 	  {
+ 	    java::lang::StringBuffer *sb = new java::lang::StringBuffer ();
+ 	    sb->append(klass->getName());
+ 	    sb->append(JvNewStringLatin1(" can't access class "));
+ 	    sb->append(found->getName());
+ 	    throw new java::lang::IllegalAccessError(sb->toString());
+ 	  }
+       }
+       break;
+ 
+     case JV_CONSTANT_String:
+       {
+ 	jstring str;
+ 	str = _Jv_NewStringUtf8Const (pool->data[index].utf8);
+ 	pool->data[index].o = str;
+ 	pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
+       }
+       break;
+ 
+     case JV_CONSTANT_Fieldref:
+       {
+ 	_Jv_ushort class_index, name_and_type_index;
+ 	_Jv_loadIndexes (&pool->data[index],
+ 			 class_index,
+ 			 name_and_type_index);
+ 	jclass owner = (resolve_pool_entry (klass, class_index)).clazz;
+ 
+ 	if (owner != klass)
+ 	  _Jv_InitClass (owner);
+ 
+ 	_Jv_ushort name_index, type_index;
+ 	_Jv_loadIndexes (&pool->data[name_and_type_index],
+ 			 name_index,
+ 			 type_index);
+ 
+ 	_Jv_Utf8Const *field_name = pool->data[name_index].utf8;
+ 	_Jv_Utf8Const *field_type_name = pool->data[type_index].utf8;
+ 
+ 	_Jv_Field *the_field = find_field (klass, owner, field_name,
+ 					   field_type_name);
+ 
+ 	pool->data[index].field = the_field;
+ 	pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
+       }
+       break;
+ 
+     case JV_CONSTANT_Methodref:
+     case JV_CONSTANT_InterfaceMethodref:
+       {
+ 	_Jv_ushort class_index, name_and_type_index;
+ 	_Jv_loadIndexes (&pool->data[index],
+ 			 class_index,
+ 			 name_and_type_index);
+ 	jclass owner = (resolve_pool_entry (klass, class_index)).clazz;
+ 
+ 	if (owner != klass)
+ 	  _Jv_InitClass (owner);
+ 
+ 	_Jv_ushort name_index, type_index;
+ 	_Jv_loadIndexes (&pool->data[name_and_type_index],
+ 			 name_index,
+ 			 type_index);
+ 
+ 	_Jv_Utf8Const *method_name = pool->data[name_index].utf8;
+ 	_Jv_Utf8Const *method_signature = pool->data[type_index].utf8;
+ 
+ 	_Jv_Method *the_method = 0;
+ 	jclass found_class = 0;
+ 
+ 	// We're going to cache a pointer to the _Jv_Method object
+ 	// when we find it.  So, to ensure this doesn't get moved from
+ 	// beneath us, we first put all the needed Miranda methods
+ 	// into the target class.
+ 	wait_for_state (klass, JV_STATE_LOADED);
+ 
+ 	// First search the class itself.
+ 	the_method = search_method_in_class (owner, klass,
+ 					     method_name, method_signature);
+ 
+ 	if (the_method != 0)
+ 	  {
+ 	    found_class = owner;
+ 	    goto end_of_method_search;
+ 	  }
+ 
+ 	// If we are resolving an interface method, search the
+ 	// interface's superinterfaces (A superinterface is not an
+ 	// interface's superclass - a superinterface is implemented by
+ 	// the interface).
+ 	if (pool->tags[index] == JV_CONSTANT_InterfaceMethodref)
+ 	  {
+ 	    _Jv_ifaces ifaces;
+ 	    ifaces.count = 0;
+ 	    ifaces.len = 4;
+ 	    ifaces.list = (jclass *) _Jv_Malloc (ifaces.len
+ 						 * sizeof (jclass *));
+ 
+ 	    get_interfaces (owner, &ifaces);
+ 
+ 	    for (int i = 0; i < ifaces.count; i++)
+ 	      {
+ 		jclass cls = ifaces.list[i];
+ 		the_method = search_method_in_class (cls, klass, method_name, 
+ 						     method_signature);
+ 		if (the_method != 0)
+ 		  {
+ 		    found_class = cls;
+ 		    break;
+ 		  }
+ 	      }
+ 
+ 	    _Jv_Free (ifaces.list);
+ 
+ 	    if (the_method != 0)
+ 	      goto end_of_method_search;
+ 	  }
+ 
+ 	// Finally, search superclasses. 
+ 	for (jclass cls = owner->getSuperclass (); cls != 0; 
+ 	     cls = cls->getSuperclass ())
+ 	  {
+ 	    the_method = search_method_in_class (cls, klass, method_name,
+ 						 method_signature);
+ 	    if (the_method != 0)
+ 	      {
+ 		found_class = cls;
+ 		break;
+ 	      }
+ 	  }
+ 
+       end_of_method_search:
+     
+ 	// FIXME: if (cls->loader != klass->loader), then we
+ 	// must actually check that the types of arguments
+ 	// correspond.  That is, for each argument type, and
+ 	// the return type, doing _Jv_FindClassFromSignature
+ 	// with either loader should produce the same result,
+ 	// i.e., exactly the same jclass object. JVMS 5.4.3.3    
+     
+ 	if (the_method == 0)
+ 	  {
+ 	    java::lang::StringBuffer *sb = new java::lang::StringBuffer();
+ 	    sb->append(JvNewStringLatin1("method "));
+ 	    sb->append(owner->getName());
+ 	    sb->append(JvNewStringLatin1("."));
+ 	    sb->append(_Jv_NewStringUTF(method_name->chars()));
+ 	    sb->append(JvNewStringLatin1(" with signature "));
+ 	    sb->append(_Jv_NewStringUTF(method_signature->chars()));
+ 	    sb->append(JvNewStringLatin1(" was not found."));
+ 	    throw new java::lang::NoSuchMethodError (sb->toString());
+ 	  }
+       
+ 	int vtable_index = -1;
+ 	if (pool->tags[index] != JV_CONSTANT_InterfaceMethodref)
+ 	  vtable_index = (jshort)the_method->index;
+ 
+ 	pool->data[index].rmethod
+ 	  = klass->engine->resolve_method(the_method,
+ 					  found_class,
+ 					  ((the_method->accflags
+ 					    & Modifier::STATIC) != 0),
+ 					  vtable_index);
+ 	pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
+       }
+       break;
+     }
+   return pool->data[index];
+ }
+ 
+ // This function is used to lazily locate superclasses and
+ // superinterfaces.  This must be called with the class lock held.
+ void
+ _Jv_Linker::resolve_class_ref (jclass klass, jclass *classref)
+ {
+   jclass ret = *classref;
+ 
+   // If superclass looks like a constant pool entry, resolve it now.
+   if (ret && (uaddr) ret < (uaddr) klass->constants.size)
+     {
+       if (klass->state < JV_STATE_LINKED)
+ 	{
+ 	  _Jv_Utf8Const *name = klass->constants.data[(uaddr) *classref].utf8;
+ 	  ret = _Jv_FindClass (name, klass->loader);
+ 	  if (! ret)
+ 	    {
+ 	      throw new java::lang::NoClassDefFoundError (name->toString());
+ 	    }
+ 	}
+       else
+ 	ret = klass->constants.data[(uaddr) classref].clazz;
+       *classref = ret;
+     }
+ }
+ 
+ // Find a method declared in the cls that is referenced from klass and
+ // perform access checks.
+ _Jv_Method *
+ _Jv_Linker::search_method_in_class (jclass cls, jclass klass, 
+ 				    _Jv_Utf8Const *method_name, 
+ 				    _Jv_Utf8Const *method_signature)
+ {
+   using namespace java::lang::reflect;
+ 
+   for (int i = 0;  i < cls->method_count;  i++)
+     {
+       _Jv_Method *method = &cls->methods[i];
+       if (   (!_Jv_equalUtf8Consts (method->name,
+ 				    method_name))
+ 	  || (!_Jv_equalUtf8Consts (method->signature,
+ 				    method_signature)))
+ 	continue;
+ 
+       if (_Jv_CheckAccess (klass, cls, method->accflags))
+ 	return method;
+       else
+ 	{
+ 	  java::lang::StringBuffer *sb = new java::lang::StringBuffer();
+ 	  sb->append(klass->getName());
+ 	  sb->append(JvNewStringLatin1(": "));
+ 	  sb->append(cls->getName());
+ 	  sb->append(JvNewStringLatin1("."));
+ 	  sb->append(_Jv_NewStringUTF(method_name->chars()));
+ 	  sb->append(_Jv_NewStringUTF(method_signature->chars()));
+ 	  throw new java::lang::IllegalAccessError (sb->toString());
+ 	}
+     }
+   return 0;
+ }
+ 
+ 
+ #define INITIAL_IOFFSETS_LEN 4
+ #define INITIAL_IFACES_LEN 4
+ 
+ static _Jv_IDispatchTable null_idt = { {SHRT_MAX, 0, NULL} };
+ 
+ // Generate tables for constant-time assignment testing and interface
+ // method lookup. This implements the technique described by Per Bothner
+ // <per@bothner.com> on the java-discuss mailing list on 1999-09-02:
+ // http://gcc.gnu.org/ml/java/1999-q3/msg00377.html
+ void
+ _Jv_Linker::prepare_constant_time_tables (jclass klass)
+ {  
+   if (klass->isPrimitive () || klass->isInterface ())
+     return;
+ 
+   // Short-circuit in case we've been called already.
+   if ((klass->idt != NULL) || klass->depth != 0)
+     return;
+ 
+   // Calculate the class depth and ancestor table. The depth of a class 
+   // is how many "extends" it is removed from Object. Thus the depth of 
+   // java.lang.Object is 0, but the depth of java.io.FilterOutputStream 
+   // is 2. Depth is defined for all regular and array classes, but not 
+   // interfaces or primitive types.
+    
+   jclass klass0 = klass;
+   jboolean has_interfaces = 0;
+   while (klass0 != &java::lang::Object::class$)
+     {
+       has_interfaces += klass0->interface_count;
+       klass0 = klass0->superclass;
+       klass->depth++;
+     }
+ 
+   // We do class member testing in constant time by using a small table 
+   // of all the ancestor classes within each class. The first element is 
+   // a pointer to the current class, and the rest are pointers to the 
+   // classes ancestors, ordered from the current class down by decreasing 
+   // depth. We do not include java.lang.Object in the table of ancestors, 
+   // since it is redundant.
+ 
+   // FIXME: _Jv_AllocBytes
+   klass->ancestors = (jclass *) _Jv_Malloc (klass->depth
+ 						* sizeof (jclass));
+   klass0 = klass;
+   for (int index = 0; index < klass->depth; index++)
+     {
+       klass->ancestors[index] = klass0;
+       klass0 = klass0->superclass;
+     }
+ 
+   if ((klass->accflags & java::lang::reflect::Modifier::ABSTRACT) != 0)
+     return;
+ 
+   // Optimization: If class implements no interfaces, use a common
+   // predefined interface table.
+   if (!has_interfaces)
+     {
+       klass->idt = &null_idt;
+       return;
+     }
+ 
+   // FIXME: _Jv_AllocBytes
+   klass->idt = 
+     (_Jv_IDispatchTable *) _Jv_Malloc (sizeof (_Jv_IDispatchTable));
+ 
+   _Jv_ifaces ifaces;
+   ifaces.count = 0;
+   ifaces.len = INITIAL_IFACES_LEN;
+   ifaces.list = (jclass *) _Jv_Malloc (ifaces.len * sizeof (jclass *));
+ 
+   int itable_size = get_interfaces (klass, &ifaces);
+ 
+   if (ifaces.count > 0)
+     {
+       klass->idt->cls.itable = 
+ 	// FIXME: _Jv_AllocBytes
+ 	(void **) _Jv_Malloc (itable_size * sizeof (void *));
+       klass->idt->cls.itable_length = itable_size;
+ 
+       jshort *itable_offsets = 
+ 	(jshort *) _Jv_Malloc (ifaces.count * sizeof (jshort));
+ 
+       generate_itable (klass, &ifaces, itable_offsets);
+ 
+       jshort cls_iindex = find_iindex (ifaces.list, itable_offsets,
+ 				       ifaces.count);
+ 
+       for (int i = 0; i < ifaces.count; i++)
+ 	{
+ 	  ifaces.list[i]->idt->iface.ioffsets[cls_iindex] =
+ 	    itable_offsets[i];
+ 	}
+ 
+       klass->idt->cls.iindex = cls_iindex;	    
+ 
+       _Jv_Free (ifaces.list);
+       _Jv_Free (itable_offsets);
+     }
+   else 
+     {
+       klass->idt->cls.iindex = SHRT_MAX;
+     }
+ }
+ 
+ // Return index of item in list, or -1 if item is not present.
+ inline jshort
+ _Jv_Linker::indexof (void *item, void **list, jshort list_len)
+ {
+   for (int i=0; i < list_len; i++)
+     {
+       if (list[i] == item)
+         return i;
+     }
+   return -1;
+ }
+ 
+ // Find all unique interfaces directly or indirectly implemented by klass.
+ // Returns the size of the interface dispatch table (itable) for klass, which 
+ // is the number of unique interfaces plus the total number of methods that 
+ // those interfaces declare. May extend ifaces if required.
+ jshort
+ _Jv_Linker::get_interfaces (jclass klass, _Jv_ifaces *ifaces)
+ {
+   jshort result = 0;
+   
+   for (int i = 0; i < klass->interface_count; i++)
+     {
+       jclass iface = klass->interfaces[i];
+ 
+       /* Make sure interface is linked.  */
+       wait_for_state(iface, JV_STATE_LINKED);
+ 
+       if (indexof (iface, (void **) ifaces->list, ifaces->count) == -1)
+         {
+ 	  if (ifaces->count + 1 >= ifaces->len)
+ 	    {
+ 	      /* Resize ifaces list */
+ 	      ifaces->len = ifaces->len * 2;
+ 	      ifaces->list
+ 		= (jclass *) _Jv_Realloc (ifaces->list,
+ 					  ifaces->len * sizeof(jclass));
+ 	    }
+ 	  ifaces->list[ifaces->count] = iface;
+ 	  ifaces->count++;
+ 
+ 	  result += get_interfaces (klass->interfaces[i], ifaces);
+ 	}
+     }
+     
+   if (klass->isInterface())
+     result += klass->method_count + 1;
+   else if (klass->superclass)
+     result += get_interfaces (klass->superclass, ifaces);
+   return result;
+ }
+ 
+ // Fill out itable in klass, resolving method declarations in each ifaces.
+ // itable_offsets is filled out with the position of each iface in itable,
+ // such that itable[itable_offsets[n]] == ifaces.list[n].
+ void
+ _Jv_Linker::generate_itable (jclass klass, _Jv_ifaces *ifaces,
+ 			       jshort *itable_offsets)
+ {
+   void **itable = klass->idt->cls.itable;
+   jshort itable_pos = 0;
+ 
+   for (int i = 0; i < ifaces->count; i++)
+     { 
+       jclass iface = ifaces->list[i];
+       itable_offsets[i] = itable_pos;
+       itable_pos = append_partial_itable (klass, iface, itable, itable_pos);
+ 
+       /* Create interface dispatch table for iface */
+       if (iface->idt == NULL)
+ 	{
+ 	  // FIXME: _Jv_AllocBytes
+ 	  iface->idt
+ 	    = (_Jv_IDispatchTable *) _Jv_Malloc (sizeof (_Jv_IDispatchTable));
+ 
+ 	  // The first element of ioffsets is its length (itself included).
+ 	  // FIXME: _Jv_AllocBytes
+ 	  jshort *ioffsets = (jshort *) _Jv_Malloc (INITIAL_IOFFSETS_LEN
+ 						    * sizeof (jshort));
+ 	  ioffsets[0] = INITIAL_IOFFSETS_LEN;
+ 	  for (int i = 1; i < INITIAL_IOFFSETS_LEN; i++)
+ 	    ioffsets[i] = -1;
+ 
+ 	  iface->idt->iface.ioffsets = ioffsets;	    
+ 	}
+     }
+ }
+ 
+ // Format method name for use in error messages.
+ jstring
+ _Jv_GetMethodString (jclass klass, _Jv_Method *meth,
+ 		     jclass derived)
+ {
+   using namespace java::lang;
+   StringBuffer *buf = new StringBuffer (klass->name->toString());
+   buf->append (jchar ('.'));
+   buf->append (meth->name->toString());
+   buf->append ((jchar) ' ');
+   buf->append (meth->signature->toString());
+   if (derived)
+     {
+       buf->append(JvNewStringLatin1(" in "));
+       buf->append(derived->name->toString());
+     }
+   return buf->toString();
+ }
+ 
+ void 
+ _Jv_ThrowNoSuchMethodError ()
+ {
+   throw new java::lang::NoSuchMethodError;
+ }
+ 
+ // This is put in empty vtable slots.
+ static void
+ _Jv_abstractMethodError (void)
+ {
+   throw new java::lang::AbstractMethodError();
+ }
+ 
+ // Each superinterface of a class (i.e. each interface that the class
+ // directly or indirectly implements) has a corresponding "Partial
+ // Interface Dispatch Table" whose size is (number of methods + 1) words.
+ // The first word is a pointer to the interface (i.e. the java.lang.Class
+ // instance for that interface).  The remaining words are pointers to the
+ // actual methods that implement the methods declared in the interface,
+ // in order of declaration.
+ //
+ // Append partial interface dispatch table for "iface" to "itable", at
+ // position itable_pos.
+ // Returns the offset at which the next partial ITable should be appended.
+ jshort
+ _Jv_Linker::append_partial_itable (jclass klass, jclass iface,
+ 				     void **itable, jshort pos)
+ {
+   using namespace java::lang::reflect;
+ 
+   itable[pos++] = (void *) iface;
+   _Jv_Method *meth;
+   
+   for (int j=0; j < iface->method_count; j++)
+     {
+       meth = NULL;
+       for (jclass cl = klass; cl; cl = cl->getSuperclass())
+         {
+ 	  meth = _Jv_GetMethodLocal (cl, iface->methods[j].name,
+ 				     iface->methods[j].signature);
+ 		 
+ 	  if (meth)
+ 	    break;
+ 	}
+ 
+       if (meth && (meth->name->first() == '<'))
+ 	{
+ 	  // leave a placeholder in the itable for hidden init methods.
+           itable[pos] = NULL;	
+ 	}
+       else if (meth)
+         {
+ 	  if ((meth->accflags & Modifier::STATIC) != 0)
+ 	    throw new java::lang::IncompatibleClassChangeError
+ 	      (_Jv_GetMethodString (klass, meth));
+ 	  if ((meth->accflags & Modifier::PUBLIC) == 0)
+ 	    throw new java::lang::IllegalAccessError
+ 	      (_Jv_GetMethodString (klass, meth));
+ 
+  	  if ((meth->accflags & Modifier::ABSTRACT) != 0)
+ 	    itable[pos] = (void *) &_Jv_abstractMethodError;
+ 	  else
+ 	    itable[pos] = meth->ncode;
+ 	}
+       else
+         {
+ 	  // The method doesn't exist in klass. Binary compatibility rules
+ 	  // permit this, so we delay the error until runtime using a pointer
+ 	  // to a method which throws an exception.
+ 	  itable[pos] = (void *) _Jv_ThrowNoSuchMethodError;
+ 	}
+       pos++;
+     }
+     
+   return pos;
+ }
+ 
+ static _Jv_Mutex_t iindex_mutex;
+ static bool iindex_mutex_initialized = false;
+ 
+ // We need to find the correct offset in the Class Interface Dispatch 
+ // Table for a given interface. Once we have that, invoking an interface 
+ // method just requires combining the Method's index in the interface 
+ // (known at compile time) to get the correct method.  Doing a type test 
+ // (cast or instanceof) is the same problem: Once we have a possible Partial 
+ // Interface Dispatch Table, we just compare the first element to see if it 
+ // matches the desired interface. So how can we find the correct offset?  
+ // Our solution is to keep a vector of candiate offsets in each interface 
+ // (idt->iface.ioffsets), and in each class we have an index 
+ // (idt->cls.iindex) used to select the correct offset from ioffsets.
+ //
+ // Calculate and return iindex for a new class. 
+ // ifaces is a vector of num interfaces that the class implements.
+ // offsets[j] is the offset in the interface dispatch table for the
+ // interface corresponding to ifaces[j].
+ // May extend the interface ioffsets if required.
+ jshort
+ _Jv_Linker::find_iindex (jclass *ifaces, jshort *offsets, jshort num)
+ {
+   int i;
+   int j;
+   
+   // Acquire a global lock to prevent itable corruption in case of multiple 
+   // classes that implement an intersecting set of interfaces being linked
+   // simultaneously. We can assume that the mutex will be initialized
+   // single-threaded.
+   if (! iindex_mutex_initialized)
+     {
+       _Jv_MutexInit (&iindex_mutex);
+       iindex_mutex_initialized = true;
+     }
+   
+   _Jv_MutexLock (&iindex_mutex);
+   
+   for (i=1;; i++)  /* each potential position in ioffsets */
+     {
+       for (j=0;; j++)  /* each iface */
+         {
+ 	  if (j >= num)
+ 	    goto found;
+ 	  if (i >= ifaces[j]->idt->iface.ioffsets[0])
+ 	    continue;
+ 	  int ioffset = ifaces[j]->idt->iface.ioffsets[i];
+ 	  /* We can potentially share this position with another class. */
+ 	  if (ioffset >= 0 && ioffset != offsets[j])
+ 	    break; /* Nope. Try next i. */	  
+ 	}
+     }
+   found:
+   for (j = 0; j < num; j++)
+     {
+       int len = ifaces[j]->idt->iface.ioffsets[0];
+       if (i >= len) 
+ 	{
+ 	  // Resize ioffsets.
+ 	  int newlen = 2 * len;
+ 	  if (i >= newlen)
+ 	    newlen = i + 3;
+ 	  jshort *old_ioffsets = ifaces[j]->idt->iface.ioffsets;
+ 	  // FIXME: _Jv_AllocBytes
+ 	  jshort *new_ioffsets = (jshort *) _Jv_Malloc (newlen
+ 							* sizeof(jshort));
+ 	  memcpy (&new_ioffsets[1], &old_ioffsets[1],
+ 		  (len - 1) * sizeof (jshort));
+ 	  new_ioffsets[0] = newlen;
+ 
+ 	  while (len < newlen)
+ 	    new_ioffsets[len++] = -1;
+ 	  
+ 	  ifaces[j]->idt->iface.ioffsets = new_ioffsets;
+ 	}
+       ifaces[j]->idt->iface.ioffsets[i] = offsets[j];
+     }
+ 
+   _Jv_MutexUnlock (&iindex_mutex);
+ 
+   return i;
+ }
+ 
+ 
+ // Functions for indirect dispatch (symbolic virtual binding) support.
+ 
+ // There are three tables, atable otable and itable.  atable is an
+ // array of addresses, and otable is an array of offsets, and these
+ // are used for static and virtual members respectively.  itable is an
+ // array of pairs {address, index} where each address is a pointer to
+ // an interface.
+ 
+ // {a,o,i}table_syms is an array of _Jv_MethodSymbols.  Each such
+ // symbol is a tuple of {classname, member name, signature}.
+ 
+ // Set this to true to enable debugging of indirect dispatch tables/linking.
+ static bool debug_link = false;
+ 
+ // link_symbol_table() scans these two arrays and fills in the
+ // corresponding atable and otable with the addresses of static
+ // members and the offsets of virtual members.
+ 
+ // The offset (in bytes) for each resolved method or field is placed
+ // at the corresponding position in the virtual method offset table
+ // (klass->otable). 
+ 
+ // The same otable and atable may be shared by many classes.
+ 
+ // This must be called while holding the class lock.
+ 
+ void
+ _Jv_Linker::link_symbol_table (jclass klass)
+ {
+   int index = 0;
+   _Jv_MethodSymbol sym;
+   if (klass->otable == NULL
+       || klass->otable->state != 0)
+     goto atable;
+    
+   klass->otable->state = 1;
+ 
+   if (debug_link)
+     fprintf (stderr, "Fixing up otable in %s:\n", klass->name->chars());
+   for (index = 0;
+        (sym = klass->otable_syms[index]).class_name != NULL;
+        ++index)
+     {
+       jclass target_class = _Jv_FindClass (sym.class_name, klass->loader);
+       _Jv_Method *meth = NULL;            
+ 
+       _Jv_Utf8Const *signature = sym.signature;
+ 
+       {
+ 	static char *bounce = (char *)_Jv_ThrowNoSuchMethodError;
+ 	ptrdiff_t offset = (char *)(klass->vtable) - bounce;
+ 	klass->otable->offsets[index] = offset;
+       }
+ 
+       if (target_class == NULL)
+ 	throw new java::lang::NoClassDefFoundError 
+ 	  (_Jv_NewStringUTF (sym.class_name->chars()));
+ 
+       // We're looking for a field or a method, and we can tell
+       // which is needed by looking at the signature.
+       if (signature->first() == '(' && signature->len() >= 2)
+ 	{
+ 	  // Looks like someone is trying to invoke an interface method
+ 	  if (target_class->isInterface())
+ 	    {
+ 	      using namespace java::lang;
+ 	      StringBuffer *sb = new StringBuffer();
+ 	      sb->append(JvNewStringLatin1("found interface "));
+ 	      sb->append(target_class->getName());
+ 	      sb->append(JvNewStringLatin1(" when searching for a class"));
+ 	      throw new VerifyError(sb->toString());
+ 	    }
+ 
+  	  // If the target class does not have a vtable_method_count yet, 
+ 	  // then we can't tell the offsets for its methods, so we must lay 
+ 	  // it out now.
+ 	  wait_for_state(target_class, JV_STATE_PREPARED);
+ 
+ 	  meth = _Jv_LookupDeclaredMethod(target_class, sym.name, 
+ 					  sym.signature);
+ 
+ 	  if (meth != NULL)
+ 	    {
+ 	      int offset = _Jv_VTable::idx_to_offset (meth->index);
+ 	      if (offset == -1)
+ 		JvFail ("Bad method index");
+ 	      JvAssert (meth->index < target_class->vtable_method_count);
+ 	      klass->otable->offsets[index] = offset;
+ 	    }
+ 	  if (debug_link)
+ 	    fprintf (stderr, "  offsets[%d] = %d (class %s@%p : %s(%s))\n",
+ 		     (int)index,
+ 		     (int)klass->otable->offsets[index],
+ 		     (const char*)target_class->name->chars(),
+ 		     target_class,
+ 		     (const char*)sym.name->chars(),
+ 		     (const char*)signature->chars());
+ 	  continue;
+ 	}
+ 
+       // Try fields.
+       {
+ 	wait_for_state(target_class, JV_STATE_PREPARED);
+ 	_Jv_Field *the_field = find_field (klass, target_class,
+ 					   sym.name, sym.signature);
+ 	if ((the_field->flags & java::lang::reflect::Modifier::STATIC))
+ 	  throw new java::lang::IncompatibleClassChangeError;
+ 	else
+ 	  klass->otable->offsets[index] = the_field->u.boffset;
+       }
+     }
+ 
+  atable:
+   if (klass->atable == NULL || klass->atable->state != 0)
+     goto itable;
+ 
+   klass->atable->state = 1;
+ 
+   for (index = 0;
+        (sym = klass->atable_syms[index]).class_name != NULL;
+        ++index)
+     {
+       jclass target_class = _Jv_FindClass (sym.class_name, klass->loader);
+       _Jv_Method *meth = NULL;            
+       _Jv_Utf8Const *signature = sym.signature;
+ 
+       // ??? Setting this pointer to null will at least get us a
+       // NullPointerException
+       klass->atable->addresses[index] = NULL;
+       
+       if (target_class == NULL)
+ 	throw new java::lang::NoClassDefFoundError 
+ 	  (_Jv_NewStringUTF (sym.class_name->chars()));
+       
+       // We're looking for a static field or a static method, and we
+       // can tell which is needed by looking at the signature.
+       if (signature->first() == '(' && signature->len() >= 2)
+ 	{
+  	  // If the target class does not have a vtable_method_count yet, 
+ 	  // then we can't tell the offsets for its methods, so we must lay 
+ 	  // it out now.
+ 	  wait_for_state (target_class, JV_STATE_PREPARED);
+ 
+ 	  // Interface methods cannot have bodies.
+ 	  if (target_class->isInterface())
+ 	    {
+ 	      using namespace java::lang;
+ 	      StringBuffer *sb = new StringBuffer();
+ 	      sb->append(JvNewStringLatin1("class "));
+ 	      sb->append(target_class->getName());
+ 	      sb->append(JvNewStringLatin1(" is an interface: "
+ 					   "class expected"));
+ 	      throw new VerifyError(sb->toString());
+ 	    }
+ 
+ 	  meth = _Jv_LookupDeclaredMethod(target_class, sym.name, 
+ 					  sym.signature);
+ 
+ 	  if (meth != NULL)
+ 	    {
+ 	      if (meth->ncode) // Maybe abstract?
+ 		{
+ 		  klass->atable->addresses[index] = meth->ncode;
+ 		  if (debug_link)
+ 		    fprintf (stderr, "  addresses[%d] = %p (class %s@%p : %s(%s))\n",
+ 			     index,
+ 			     &klass->atable->addresses[index],
+ 			     (const char*)target_class->name->chars(),
+ 			     klass,
+ 			     (const char*)sym.name->chars(),
+ 			     (const char*)signature->chars());
+ 		}
+ 	    }
+ 	  else
+ 	    klass->atable->addresses[index]
+ 	      = (void *)_Jv_ThrowNoSuchMethodError;
+ 
+ 	  continue;
+ 	}
+ 
+       // Try fields.
+       {
+ 	wait_for_state(target_class, JV_STATE_PREPARED);
+ 	_Jv_Field *the_field = find_field (klass, target_class,
+ 					   sym.name, sym.signature);
+ 	if ((the_field->flags & java::lang::reflect::Modifier::STATIC))
+ 	  klass->atable->addresses[index] = the_field->u.addr;
+ 	else
+ 	  throw new java::lang::IncompatibleClassChangeError;
+       }
+     }
+ 
+  itable:
+   if (klass->itable == NULL
+       || klass->itable->state != 0)
+     return;
+ 
+   klass->itable->state = 1;
+ 
+   for (index = 0;
+        (sym = klass->itable_syms[index]).class_name != NULL; 
+        ++index)
+     {
+       jclass target_class = _Jv_FindClass (sym.class_name, klass->loader);
+       _Jv_Utf8Const *signature = sym.signature;
+ 
+       jclass cls;
+       int i;
+ 
+       wait_for_state(target_class, JV_STATE_LOADED);
+       bool found = _Jv_getInterfaceMethod (target_class, cls, i,
+ 					   sym.name, sym.signature);
+ 
+       if (found)
+ 	{
+ 	  klass->itable->addresses[index * 2] = cls;
+ 	  klass->itable->addresses[index * 2 + 1] = (void *)(unsigned long) i;
+ 	  if (debug_link)
+ 	    {
+ 	      fprintf (stderr, "  interfaces[%d] = %p (interface %s@%p : %s(%s))\n",
+ 		       index,
+ 		       klass->itable->addresses[index * 2],
+ 		       (const char*)cls->name->chars(),
+ 		       cls,
+ 		       (const char*)sym.name->chars(),
+ 		       (const char*)signature->chars());
+ 	      fprintf (stderr, "            [%d] = offset %d\n",
+ 		       index + 1,
+ 		       (int)(unsigned long)klass->itable->addresses[index * 2 + 1]);
+ 	    }
+ 
+ 	}
+       else
+ 	throw new java::lang::IncompatibleClassChangeError;
+     }
+ 
+ }
+ 
+ // For each catch_record in the list of caught classes, fill in the
+ // address field.
+ void 
+ _Jv_Linker::link_exception_table (jclass self)
+ {
+   struct _Jv_CatchClass *catch_record = self->catch_classes;
+   if (!catch_record || catch_record->classname)
+     return;  
+   catch_record++;
+   while (catch_record->classname)
+     {
+       try
+ 	{
+ 	  jclass target_class
+ 	    = _Jv_FindClass (catch_record->classname,  
+ 			     self->getClassLoaderInternal ());
+ 	  *catch_record->address = target_class;
+ 	}
+       catch (::java::lang::Throwable *t)
+ 	{
+ 	  // FIXME: We need to do something better here.
+ 	  *catch_record->address = 0;
+ 	}
+       catch_record++;
+     }
+   self->catch_classes->classname = (_Jv_Utf8Const *)-1;
+ }
+   
+ // Set itable method indexes for members of interface IFACE.
+ void
+ _Jv_Linker::layout_interface_methods (jclass iface)
+ {
+   if (! iface->isInterface())
+     return;
+ 
+   // itable indexes start at 1. 
+   // FIXME: Static initalizers currently get a NULL placeholder entry in the
+   // itable so they are also assigned an index here.
+   for (int i = 0; i < iface->method_count; i++)
+     iface->methods[i].index = i + 1;
+ }
+ 
+ // Prepare virtual method declarations in KLASS, and any superclasses
+ // as required, by determining their vtable index, setting
+ // method->index, and finally setting the class's vtable_method_count.
+ // Must be called with the lock for KLASS held.
+ void
+ _Jv_Linker::layout_vtable_methods (jclass klass)
+ {
+   if (klass->vtable != NULL || klass->isInterface() 
+       || klass->vtable_method_count != -1)
+     return;
+ 
+   jclass superclass = klass->getSuperclass();
+ 
+   if (superclass != NULL && superclass->vtable_method_count == -1)
+     {
+       JvSynchronize sync (superclass);
+       layout_vtable_methods (superclass);
+     }
+ 
+   int index = (superclass == NULL ? 0 : superclass->vtable_method_count);
+ 
+   for (int i = 0; i < klass->method_count; ++i)
+     {
+       _Jv_Method *meth = &klass->methods[i];
+       _Jv_Method *super_meth = NULL;
+ 
+       if (! _Jv_isVirtualMethod (meth))
+ 	continue;
+ 
+       if (superclass != NULL)
+ 	{
+ 	  jclass declarer;
+ 	  super_meth = _Jv_LookupDeclaredMethod (superclass, meth->name,
+ 						 meth->signature, &declarer);
+ 	  // See if this method actually overrides the other method
+ 	  // we've found.
+ 	  if (super_meth)
+ 	    {
+ 	      if (! _Jv_isVirtualMethod (super_meth)
+ 		  || ! _Jv_CheckAccess (klass, declarer,
+ 					super_meth->accflags))
+ 		super_meth = NULL;
+ 	      else if ((super_meth->accflags
+ 			& java::lang::reflect::Modifier::FINAL) != 0)
+ 		{
+ 		  using namespace java::lang;
+ 		  StringBuffer *sb = new StringBuffer();
+ 		  sb->append(JvNewStringLatin1("method "));
+ 		  sb->append(_Jv_GetMethodString(klass, meth));
+ 		  sb->append(JvNewStringLatin1(" overrides final method "));
+ 		  sb->append(_Jv_GetMethodString(declarer, super_meth));
+ 		  throw new VerifyError(sb->toString());
+ 		}
+ 	    }
+ 	}
+ 
+       if (super_meth)
+         meth->index = super_meth->index;
+       else
+ 	meth->index = index++;
+     }
+ 
+   klass->vtable_method_count = index;
+ }
+ 
+ // Set entries in VTABLE for virtual methods declared in KLASS.
+ void
+ _Jv_Linker::set_vtable_entries (jclass klass, _Jv_VTable *vtable)
+ {
+   for (int i = klass->method_count - 1; i >= 0; i--)
+     {
+       using namespace java::lang::reflect;
+ 
+       _Jv_Method *meth = &klass->methods[i];
+       if (meth->index == (_Jv_ushort) -1)
+ 	continue;
+       if ((meth->accflags & Modifier::ABSTRACT))
+ 	// FIXME: it might be nice to have a libffi trampoline here,
+ 	// so we could pass in the method name and other information.
+ 	vtable->set_method(meth->index, (void *) &_Jv_abstractMethodError);
+       else
+ 	vtable->set_method(meth->index, meth->ncode);
+     }
+ }
+ 
+ // Allocate and lay out the virtual method table for KLASS.  This will
+ // also cause vtables to be generated for any non-abstract
+ // superclasses, and virtual method layout to occur for any abstract
+ // superclasses.  Must be called with monitor lock for KLASS held.
+ void
+ _Jv_Linker::make_vtable (jclass klass)
+ {
+   using namespace java::lang::reflect;  
+ 
+   // If the vtable exists, or for interface classes, do nothing.  All
+   // other classes, including abstract classes, need a vtable.
+   if (klass->vtable != NULL || klass->isInterface())
+     return;
+ 
+   // Ensure all the `ncode' entries are set.
+   klass->engine->create_ncode(klass);
+ 
+   // Class must be laid out before we can create a vtable. 
+   if (klass->vtable_method_count == -1)
+     layout_vtable_methods (klass);
+ 
+   // Allocate the new vtable.
+   _Jv_VTable *vtable = _Jv_VTable::new_vtable (klass->vtable_method_count);
+   klass->vtable = vtable;
+ 
+   // Copy the vtable of the closest superclass.
+   jclass superclass = klass->superclass;
+   {
+     JvSynchronize sync (superclass);
+     make_vtable (superclass);
+   }
+   for (int i = 0; i < superclass->vtable_method_count; ++i)
+     vtable->set_method (i, superclass->vtable->get_method (i));
+ 
+   // Set the class pointer and GC descriptor.
+   vtable->clas = klass;
+   vtable->gc_descr = _Jv_BuildGCDescr (klass);
+ 
+   // For each virtual declared in klass, set new vtable entry or
+   // override an old one.
+   set_vtable_entries (klass, vtable);
+ 
+   // Note that we don't check for abstract methods here.  We used to,
+   // but there is a JVMS clarification that indicates that a check
+   // here would be too eager.  And, a simple test case confirms this.
+ }
+ 
+ // Lay out the class, allocating space for static fields and computing
+ // offsets of instance fields.  The class lock must be held by the
+ // caller.
+ void
+ _Jv_Linker::ensure_fields_laid_out (jclass klass)
+ {  
+   if (klass->size_in_bytes != -1)
+     return;
+ 
+   // Compute the alignment for this type by searching through the
+   // superclasses and finding the maximum required alignment.  We
+   // could consider caching this in the Class.
+   int max_align = __alignof__ (java::lang::Object);
+   jclass super = klass->getSuperclass();
+   while (super != NULL)
+     {
+       // Ensure that our super has its super installed before
+       // recursing.
+       wait_for_state(super, JV_STATE_LOADING);
+       ensure_fields_laid_out(super);
+       int num = JvNumInstanceFields (super);
+       _Jv_Field *field = JvGetFirstInstanceField (super);
+       while (num > 0)
+ 	{
+ 	  int field_align = get_alignment_from_class (field->type);
+ 	  if (field_align > max_align)
+ 	    max_align = field_align;
+ 	  ++field;
+ 	  --num;
+ 	}
+       super = super->getSuperclass();
+     }
+ 
+   int instance_size;
+   int static_size = 0;
+ 
+   // Although java.lang.Object is never interpreted, an interface can
+   // have a null superclass.  Note that we have to lay out an
+   // interface because it might have static fields.
+   if (klass->superclass)
+     instance_size = klass->superclass->size();
+   else
+     instance_size = java::lang::Object::class$.size();
+ 
+   for (int i = 0; i < klass->field_count; i++)
+     {
+       int field_size;
+       int field_align;
+ 
+       _Jv_Field *field = &klass->fields[i];
+ 
+       if (! field->isRef ())
+ 	{
+ 	  // It is safe to resolve the field here, since it's a
+ 	  // primitive class, which does not cause loading to happen.
+ 	  resolve_field (field, klass->loader);
+ 
+ 	  field_size = field->type->size ();
+ 	  field_align = get_alignment_from_class (field->type);
+ 	}
+       else 
+ 	{
+ 	  field_size = sizeof (jobject);
+ 	  field_align = __alignof__ (jobject);
+ 	}
+ 
+       field->bsize = field_size;
+ 
+       if ((field->flags & java::lang::reflect::Modifier::STATIC))
+ 	{
+ 	  if (field->u.addr == NULL)
+ 	    {
+ 	      // This computes an offset into a region we'll allocate
+ 	      // shortly, and then add this offset to the start
+ 	      // address.
+ 	      static_size       = ROUND (static_size, field_align);
+ 	      field->u.boffset   = static_size;
+ 	      static_size       += field_size;
+ 	    }
+ 	}
+       else
+ 	{
+ 	  instance_size      = ROUND (instance_size, field_align);
+ 	  field->u.boffset   = instance_size;
+ 	  instance_size     += field_size;
+ 	  if (field_align > max_align)
+ 	    max_align = field_align;
+ 	}
+     }
+ 
+   if (static_size != 0)
+     klass->engine->allocate_static_fields (klass, static_size);
+ 
+   // Set the instance size for the class.  Note that first we round it
+   // to the alignment required for this object; this keeps us in sync
+   // with our current ABI.
+   instance_size = ROUND (instance_size, max_align);
+   klass->size_in_bytes = instance_size;
+ }
+ 
+ // This takes the class to state JV_STATE_LINKED.  The class lock must
+ // be held when calling this.
+ void
+ _Jv_Linker::ensure_class_linked (jclass klass)
+ {
+   if (klass->state >= JV_STATE_LINKED)
+     return;
+ 
+   int state = klass->state;
+   try
+     {
+       // Short-circuit, so that mutually dependent classes are ok.
+       klass->state = JV_STATE_LINKED;
+ 
+       _Jv_Constants *pool = &klass->constants;
+ 
+       // Compiled classes require that their class constants be
+       // resolved here.  However, interpreted classes need their
+       // constants to be resolved lazily.  If we resolve an
+       // interpreted class' constants eagerly, we can end up with
+       // spurious IllegalAccessErrors when the constant pool contains
+       // a reference to a class we can't access.  This can validly
+       // occur in an obscure case involving the InnerClasses
+       // attribute.
+       if (! _Jv_IsInterpretedClass (klass))
+ 	{
+ 	  // Resolve class constants first, since other constant pool
+ 	  // entries may rely on these.
+ 	  for (int index = 1; index < pool->size; ++index)
+ 	    {
+ 	      if (pool->tags[index] == JV_CONSTANT_Class)
+ 		resolve_pool_entry (klass, index);
+ 	    }
+ 	}
+ 
+ #if 0  // Should be redundant now
+       // If superclass looks like a constant pool entry,
+       // resolve it now.
+       if ((uaddr) klass->superclass < (uaddr) pool->size)
+ 	klass->superclass = pool->data[(uaddr) klass->superclass].clazz;
+ 
+       // Likewise for interfaces.
+       for (int i = 0; i < klass->interface_count; i++)
+ 	{
+ 	  if ((uaddr) klass->interfaces[i] < (uaddr) pool->size)
+ 	    klass->interfaces[i]
+ 	      = pool->data[(uaddr) klass->interfaces[i]].clazz;
+ 	}
+ #endif
+ 
+       // Resolve the remaining constant pool entries.
+       for (int index = 1; index < pool->size; ++index)
+ 	{
+ 	  if (pool->tags[index] == JV_CONSTANT_String)
+ 	    {
+ 	      jstring str;
+ 
+ 	      str = _Jv_NewStringUtf8Const (pool->data[index].utf8);
+ 	      pool->data[index].o = str;
+ 	      pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
+ 	    }
+ 	}
+ 
+       if (klass->engine->need_resolve_string_fields())
+ 	{
+ 	  jfieldID f = JvGetFirstStaticField (klass);
+ 	  for (int n = JvNumStaticFields (klass); n > 0; --n)
+ 	    {
+ 	      int mod = f->getModifiers ();
+ 	      // If we have a static String field with a non-null initial
+ 	      // value, we know it points to a Utf8Const.
+ 	      resolve_field(f, klass->loader);
+ 	      if (f->getClass () == &java::lang::String::class$
+ 		  && (mod & java::lang::reflect::Modifier::STATIC) != 0)
+ 		{
+ 		  jstring *strp = (jstring *) f->u.addr;
+ 		  if (*strp)
+ 		    *strp = _Jv_NewStringUtf8Const ((_Jv_Utf8Const *) *strp);
+ 		}
+ 	      f = f->getNextField ();
+ 	    }
+ 	}
+ 
+       klass->notifyAll ();
+ 
+       _Jv_PushClass (klass);
+     }
+   catch (java::lang::Throwable *t)
+     {
+       klass->state = state;
+       throw t;
+     }
+ }
+ 
+ // This ensures that symbolic superclass and superinterface references
+ // are resolved for the indicated class.  This must be called with the
+ // class lock held.
+ void
+ _Jv_Linker::ensure_supers_installed (jclass klass)
+ {
+   resolve_class_ref (klass, &klass->superclass);
+   // An interface won't have a superclass.
+   if (klass->superclass)
+     wait_for_state (klass->superclass, JV_STATE_LOADING);
+ 
+   for (int i = 0; i < klass->interface_count; ++i)
+     {
+       resolve_class_ref (klass, &klass->interfaces[i]);
+       wait_for_state (klass->interfaces[i], JV_STATE_LOADING);
+     }
+ }
+ 
+ // This adds missing `Miranda methods' to a class.
+ void
+ _Jv_Linker::add_miranda_methods (jclass base, jclass iface_class)
+ {
+   // Note that at this point, all our supers, and the supers of all
+   // our superclasses and superinterfaces, will have been installed.
+ 
+   for (int i = 0; i < iface_class->interface_count; ++i)
+     {
+       jclass interface = iface_class->interfaces[i];
+ 
+       for (int j = 0; j < interface->method_count; ++j)
+ 	{
+  	  _Jv_Method *meth = &interface->methods[j];
+ 	  // Don't bother with <clinit>.
+ 	  if (meth->name->first() == '<')
+ 	    continue;
+ 	  _Jv_Method *new_meth = _Jv_LookupDeclaredMethod (base, meth->name,
+ 							   meth->signature);
+ 	  if (! new_meth)
+ 	    {
+ 	      // We assume that such methods are very unlikely, so we
+ 	      // just reallocate the method array each time one is
+ 	      // found.  This greatly simplifies the searching --
+ 	      // otherwise we have to make sure that each such method
+ 	      // found is really unique among all superinterfaces.
+ 	      int new_count = base->method_count + 1;
+ 	      _Jv_Method *new_m
+ 		= (_Jv_Method *) _Jv_AllocBytes (sizeof (_Jv_Method)
+ 						 * new_count);
+ 	      memcpy (new_m, base->methods,
+ 		      sizeof (_Jv_Method) * base->method_count);
+ 
+ 	      // Add new method.
+ 	      new_m[base->method_count] = *meth;
+ 	      new_m[base->method_count].index = (_Jv_ushort) -1;
+ 	      new_m[base->method_count].accflags
+ 		|= java::lang::reflect::Modifier::INVISIBLE;
+ 
+ 	      base->methods = new_m;
+ 	      base->method_count = new_count;
+ 	    }
+ 	}
+ 
+       wait_for_state (interface, JV_STATE_LOADED);
+       add_miranda_methods (base, interface);
+     }
+ }
+ 
+ // This ensures that the class' method table is "complete".  This must
+ // be called with the class lock held.
+ void
+ _Jv_Linker::ensure_method_table_complete (jclass klass)
+ {
+   if (klass->vtable != NULL || klass->isInterface())
+     return;
+ 
+   // We need our superclass to have its own Miranda methods installed.
+   wait_for_state (klass->getSuperclass (), JV_STATE_LOADED);
+ 
+   // A class might have so-called "Miranda methods".  This is a method
+   // that is declared in an interface and not re-declared in an
+   // abstract class.  Some compilers don't emit declarations for such
+   // methods in the class; this will give us problems since we expect
+   // a declaration for any method requiring a vtable entry.  We handle
+   // this here by searching for such methods and constructing new
+   // internal declarations for them.  Note that we do this
+   // unconditionally, and not just for abstract classes, to correctly
+   // account for cases where a class is modified to be concrete and
+   // still incorrectly inherits an abstract method.
+   int pre_count = klass->method_count;
+   add_miranda_methods (klass, klass);
+ 
+   // Let the execution engine know that we've added methods.
+   if (klass->method_count != pre_count)
+     klass->engine->post_miranda_hook(klass);
+ }
+ 
+ // Verify a class.  Must be called with class lock held.
+ void
+ _Jv_Linker::verify_class (jclass klass)
+ {
+   klass->engine->verify(klass);
+ }
+ 
+ // Check the assertions contained in the type assertion table for KLASS.
+ // This is the equivilent of bytecode verification for native, BC-ABI code.
+ void
+ _Jv_Linker::verify_type_assertions (jclass klass)
+ {
+   if (debug_link)
+     fprintf (stderr, "Evaluating type assertions for %s:\n",
+ 	     klass->name->chars());
+ 
+   if (klass->assertion_table == NULL)
+     return;
+ 
+   for (int i = 0;; i++)
+     {
+       int assertion_code = klass->assertion_table[i].assertion_code;
+       _Jv_Utf8Const *op1 = klass->assertion_table[i].op1;
+       _Jv_Utf8Const *op2 = klass->assertion_table[i].op2;
+       
+       if (assertion_code == JV_ASSERT_END_OF_TABLE)
+         return;
+       else if (assertion_code == JV_ASSERT_TYPES_COMPATIBLE)
+         {
+ 	  if (debug_link)
+ 	    {
+ 	      fprintf (stderr, "  code=%i, operand A=%s B=%s\n",
+ 		       assertion_code, op1->chars(), op2->chars());
+ 	    }
+ 	
+ 	  // The operands are class signatures. op1 is the source, 
+ 	  // op2 is the target.
+ 	  jclass cl1 = _Jv_FindClassFromSignature (op1->chars(), 
+ 	    klass->getClassLoaderInternal());
+ 	  jclass cl2 = _Jv_FindClassFromSignature (op2->chars(),
+ 	    klass->getClassLoaderInternal());
+ 	    
+ 	  // If the class doesn't exist, ignore the assertion. An exception
+ 	  // will be thrown later if an attempt is made to actually 
+ 	  // instantiate the class.
+ 	  if (cl1 == NULL || cl2 == NULL)
+ 	    continue;
+ 
+           if (! _Jv_IsAssignableFromSlow (cl2, cl1))
+ 	    {
+ 	      jstring s = JvNewStringUTF ("Incompatible types: In class ");
+ 	      s = s->concat (klass->getName());
+ 	      s = s->concat (JvNewStringUTF (": "));
+ 	      s = s->concat (cl1->getName());
+ 	      s = s->concat (JvNewStringUTF (" is not assignable to "));
+ 	      s = s->concat (cl2->getName());
+ 	      throw new java::lang::VerifyError (s);
+ 	    }
+ 	}
+       else if (assertion_code == JV_ASSERT_IS_INSTANTIABLE)
+         {
+ 	  // TODO: Implement this.
+ 	}
+       // Unknown assertion codes are ignored, for forwards-compatibility.
+     }
+ }
+    
+ void
+ _Jv_Linker::print_class_loaded (jclass klass)
+ {
+   char *codesource = NULL;
+   if (klass->protectionDomain != NULL)
+     {
+       java::security::CodeSource *cs
+ 	= klass->protectionDomain->getCodeSource();
+       if (cs != NULL)
+ 	{
+ 	  jstring css = cs->toString();
+ 	  int len = JvGetStringUTFLength(css);
+ 	  codesource = (char *) _Jv_AllocBytes(len + 1);
+ 	  JvGetStringUTFRegion(css, 0, css->length(), codesource);
+ 	  codesource[len] = '\0';
+ 	}
+     }
+   if (codesource == NULL)
+     codesource = "<no code source>";
+ 
+   // We use a somewhat bogus test for the ABI here.
+   char *abi;
+   if (_Jv_IsInterpretedClass (klass))
+     abi = "bytecode";
+   else if (klass->state == JV_STATE_PRELOADING)
+     abi = "BC-compiled";
+   else
+     abi = "pre-compiled";
+ 
+   fprintf (stderr, "[Loaded (%s) %s from %s]\n", abi, klass->name->chars(),
+ 	   codesource);
+ }
+ 
+ // FIXME: mention invariants and stuff.
+ void
+ _Jv_Linker::wait_for_state (jclass klass, int state)
+ {
+   if (klass->state >= state)
+     return;
+ 
+   JvSynchronize sync (klass);
+ 
+   // This is similar to the strategy for class initialization.  If we
+   // already hold the lock, just leave.
+   java::lang::Thread *self = java::lang::Thread::currentThread();
+   while (klass->state <= state
+ 	 && klass->thread 
+ 	 && klass->thread != self)
+     klass->wait ();
+ 
+   java::lang::Thread *save = klass->thread;
+   klass->thread = self;
+ 
+   // Print some debugging info if requested.  Interpreted classes are
+   // handled in defineclass, so we only need to handle the two
+   // pre-compiled cases here.
+   if (gcj::verbose_class_flag
+       && (klass->state == JV_STATE_COMPILED
+ 	  || klass->state == JV_STATE_PRELOADING)
+       && ! _Jv_IsInterpretedClass (klass))
+     print_class_loaded (klass);
+ 
+   try
+     {
+       if (state >= JV_STATE_LOADING && klass->state < JV_STATE_LOADING)
+ 	{
+ 	  ensure_supers_installed (klass);
+ 	  klass->set_state(JV_STATE_LOADING);
+ 	}
+ 
+       if (state >= JV_STATE_LOADED && klass->state < JV_STATE_LOADED)
+ 	{
+ 	  ensure_method_table_complete (klass);
+ 	  klass->set_state(JV_STATE_LOADED);
+ 	}
+ 
+       if (state >= JV_STATE_PREPARED && klass->state < JV_STATE_PREPARED)
+ 	{
+ 	  ensure_fields_laid_out (klass);
+ 	  make_vtable (klass);
+ 	  layout_interface_methods (klass);
+ 	  prepare_constant_time_tables (klass);
+ 	  klass->set_state(JV_STATE_PREPARED);
+ 	}
+ 
+       if (state >= JV_STATE_LINKED && klass->state < JV_STATE_LINKED)
+ 	{
+ 	  verify_class (klass);
+ 
+ 	  ensure_class_linked (klass);
+ 	  link_exception_table (klass);
+ 	  link_symbol_table (klass);
+ 	  klass->set_state(JV_STATE_LINKED);
+ 	}
+     }
+   catch (java::lang::Throwable *exc)
+     {
+       klass->thread = save;
+       klass->set_state(JV_STATE_ERROR);
+       throw exc;
+     }
+ 
+   klass->thread = save;
+ 
+   if (klass->state == JV_STATE_ERROR)
+     throw new java::lang::LinkageError;
+ }
diff -Nrcpad gcc-3.4.3/libjava/mauve-libgcj gcc-4.0.0/libjava/mauve-libgcj
*** gcc-3.4.3/libjava/mauve-libgcj	Thu Dec 18 20:23:48 2003
--- gcc-4.0.0/libjava/mauve-libgcj	Mon Jan 10 22:57:53 2005
*************** JDBC2.0
*** 14,24 ****
  # This a problem when running Mauve "standalone".
  !java.lang.reflect.Array.newInstance
  
- # Character.unicode seems to be very broken (the test)
- # Does not give meaningfull test results at the moment.
- !java.lang.Character.unicode
- 
  # These are almost certainly buggy test cases.
  # The behaviour of the garbarge collector cannot be predicted.
  # Note the . at the end so we do test java.lang.reflect
  !java.lang.ref.
--- 14,28 ----
  # This a problem when running Mauve "standalone".
  !java.lang.reflect.Array.newInstance
  
  # These are almost certainly buggy test cases.
  # The behaviour of the garbarge collector cannot be predicted.
  # Note the . at the end so we do test java.lang.reflect
  !java.lang.ref.
+ 
+ # Tests for not yet implemented classes and/or methods.
+ !javax.swing.plaf
+ !javax.swing.text
+ !javax.swing.table
+ !javax.swing.SpinnerListModel
+ !javax.swing.SwingUtilities
+ !java.beans.XMLDecoder
diff -Nrcpad gcc-3.4.3/libjava/org/ietf/jgss/ChannelBinding.java gcc-4.0.0/libjava/org/ietf/jgss/ChannelBinding.java
*** gcc-3.4.3/libjava/org/ietf/jgss/ChannelBinding.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/org/ietf/jgss/ChannelBinding.java	Tue Sep 21 08:33:35 2004
***************
*** 0 ****
--- 1,215 ----
+ /* ChannelBinding.java -- a channel binding in the GSS-API.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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 documentation comments of this class are 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. */
+ 
+ 
+ package org.ietf.jgss;
+ 
+ import java.net.InetAddress;
+ import java.util.Arrays;
+ 
+ /**
+  * <p>The GSS-API accommodates the concept of caller-provided channel
+  * binding information.  Channel bindings are used to strengthen the
+  * quality with which peer entity authentication is provided during
+  * context establishment.  They enable the GSS-API callers to bind the
+  * establishment of the security context to relevant characteristics
+  * like addresses or to application specific data.</p>
+  *
+  * <p>The caller initiating the security context must determine the
+  * appropriate channel binding values to set in the {@link GSSContext}
+  * object. The acceptor must provide an identical binding in order to
+  * validate that received tokens possess correct channel-related
+  * characteristics.</p>
+  *
+  * <p>Use of channel bindings is optional in GSS-API.  Since channel-binding
+  * information may be transmitted in context establishment tokens,
+  * applications should therefore not use confidential data as
+  * channel-binding components.</p>
+  */
+ public class ChannelBinding
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private final byte[] appData;
+   private final InetAddress initAddr;
+   private final InetAddress acceptAddr;
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Create a ChannelBinding object with user supplied address information
+    * and data. <code>null</code> values can be used for any fields which the
+    * application does not want to specify.
+    *
+    * @param initAddr   The address of the context initiator. <code>null</code>
+    *                   value can be supplied to indicate that the application
+    *                   does not want to set this value.
+    * @param acceptAddr The address of the context acceptor. <code>null</code>
+    *                   value can be supplied to indicate that the application
+    *                   does not want to set this value.
+    * @param appData    Application supplied data to be used as part of the
+    *                   channel bindings. <code>null</code> value can be
+    *                   supplied to indicate that the application does not
+    *                   want to set this value.
+    */
+   public ChannelBinding(InetAddress initAddr, InetAddress acceptAddr,
+                         byte[] appData)
+   {
+     this.appData = (appData != null) ? (byte[]) appData.clone() : null;
+     this.initAddr = initAddr;
+     this.acceptAddr = acceptAddr;
+   }
+ 
+   /**
+    * Creates a ChannelBinding object without any addressing information.
+    *
+    * @param appData Application supplied data to be used as part of the
+    *                channel bindings.
+    */
+   public ChannelBinding(byte[] appData)
+   {
+     this(null, null, appData);
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns the initiator's address for this channel binding.
+    * <code>null</code> is returned if the address has not been set.
+    *
+    * @return The initiator's address, or <code>null</code>.
+    */
+   public InetAddress getInitiatorAddress()
+   {
+     return initAddr;
+   }
+ 
+   /**
+    * Returns the acceptor's address for this channel binding.
+    * <code>null</code> is returned if the address has not been set.
+    *
+    * @return The acceptor's address, or <code>null</code>.
+    */
+   public InetAddress getAcceptorAddress()
+   {
+     return acceptAddr;
+   }
+ 
+   /**
+    * Returns application data being used as part of the ChannelBinding.
+    * <code>null</code> is returned if no application data has been
+    * specified for the channel binding.
+    *
+    * @return The application data, or <code>null</code>.
+    */
+   public byte[] getApplicationData()
+   {
+     if (appData != null)
+       return (byte[]) appData.clone();
+     return null;
+   }
+ 
+   /**
+    * Returns <code>true</code> if two channel bindings match.
+    *
+    * @param obj Another channel binding to compare with.
+    * @return True if this channel binding equals the other.
+    */
+   public boolean equals(Object obj)
+   {
+     if (!(obj instanceof ChannelBinding))
+       return false;
+     ChannelBinding cb = (ChannelBinding) obj;
+     boolean b1 = Arrays.equals(appData, cb.appData);
+     boolean b2 = (initAddr == null && cb.initAddr == null)
+       || (cb.initAddr != null && initAddr.equals(cb.initAddr));
+     boolean b3 = (acceptAddr == null && cb.acceptAddr == null)
+       || (cb.acceptAddr != null && acceptAddr.equals(cb.acceptAddr));
+     return b1 && b2 && b3;
+   }
+ 
+   /**
+    * Returns the hash code for this channel binding.
+    *
+    * @return The hash code.
+    */
+   public int hashCode()
+   {
+     int code = 0;
+     if (appData != null)
+       for (int i = 0; i < appData.length; i++)
+         code ^= appData[i] << ((8 * i) & 31);
+     if (initAddr != null)
+       code ^= initAddr.hashCode();
+     if (acceptAddr != null)
+       code ^= acceptAddr.hashCode();
+     return code;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/org/ietf/jgss/GSSContext.java gcc-4.0.0/libjava/org/ietf/jgss/GSSContext.java
*** gcc-3.4.3/libjava/org/ietf/jgss/GSSContext.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/org/ietf/jgss/GSSContext.java	Tue Sep 21 08:33:35 2004
***************
*** 0 ****
--- 1,924 ----
+ /* GSSContext.java -- The GSS context interface.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+ 
+ 
+ package org.ietf.jgss;
+ 
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ 
+ /**
+  * <p>This interface encapsulates the GSS-API security context and provides
+  * the security services ({@link #wrap(byte[],int,int,org.ietf.jgss.MessageProp)},
+  * {@link #unwrap(byte[],int,int,org.ietf.jgss.MessageProp)}, {@link
+  * #getMIC(byte[],int,int,org.ietf.jgss.MessageProp)}, {@link
+  * #verifyMIC(byte[],int,int,byte[],int,int,org.ietf.jgss.MessageProp)}) that
+  * are available over the context.  Security contexts are established
+  * between peers using locally acquired credentials.  Multiple contexts
+  * may exist simultaneously between a pair of peers, using the same or
+  * different set of credentials.  GSS-API functions in a manner
+  * independent of the underlying transport protocol and depends on its
+  * calling application to transport its tokens between peers.</p>
+  *
+  * <p>Before the context establishment phase is initiated, the context
+  * initiator may request specific characteristics desired of the
+  * established context.  These can be set using the set methods.  After
+  * the context is established, the caller can check the actual
+  * characteristic and services offered by the context using the query
+  * methods.</p>
+  *
+  * <p>The context establishment phase begins with the first call to the
+  * init method by the context initiator.  During this phase the
+  * {@link #initSecContext(byte[],int,int)} and {@link
+  * #acceptSecContext(byte[],int,int)} methods will produce GSS-API
+  * authentication tokens which the calling application needs to send to
+  * its peer.  If an error occurs at any point, an exception will get
+  * thrown and the code will start executing in a catch block.  If not,
+  * the normal flow of code continues and the application can make a call
+  * to the {@link #isEstablished()} method. If this method returns false it
+  * indicates that a token is needed from its peer in order to continue
+  * the context establishment phase.  A return value of true signals that
+  * the local end of the context is established.  This may still require
+  * that a token be sent to the peer, if one is produced by GSS-API.
+  * During the context establishment phase, the {@link #isProtReady()}
+  * method may be called to determine if the context can be used for the
+  * per-message operations.  This allows applications to use per-message
+  * operations on contexts which aren't fully established.</p>
+  *
+  * <p>After the context has been established or the {@link #isProtReady()}
+  * method returns <code>true</code>, the query routines can be invoked to
+  * determine the actual characteristics and services of the established
+  * context.  The application can also start using the per-message methods
+  * of {@link #wrap(byte[],int,int,org.ietf.jgss.MessageProp)} and
+  * {@link #getMIC(byte[],int,int,org.ietf.jgss.MessageProp)} to obtain
+  * cryptographic operations on application supplied data.</p>
+  *
+  * <p>When the context is no longer needed, the application should call
+  * {@link dispose()} to release any system resources the context may be
+  * using.</p>
+  *
+  * <h3>Example Code</h3>
+  *
+  * <pre>
+ GSSManager mgr = GSSManager.getInstance();
+ 
+ // start by creating the name for a service entity
+ GSSName targetName = mgr.createName("service@host",
+                                     GSSName.NT_HOSTBASED_SERVICE);
+ 
+ // create a context using default credentials for the above entity
+ // and the implementation specific default mechanism
+ GSSContext context = mgr.createContext(targetName,
+                                        null,   // default mechanism
+                                        null,   // default credentials
+                                        GSSContext.INDEFINITE_LIFETIME);
+ 
+ // set desired context options - all others are false by default
+ context.requestConf(true);
+ context.requestMutualAuth(true);
+ context.requestReplayDet(true);
+ context.requestSequenceDet(true);
+ 
+ // establish a context between peers - using byte arrays
+ byte []inTok = new byte[0];
+ 
+ try
+   {
+     do
+       {
+         byte[] outTok = context.initSecContext(inTok, 0,
+                                                inTok.length);
+ 
+         // send the token if present
+         if (outTok != null)
+           sendToken(outTok);
+ 
+         // check if we should expect more tokens
+         if (context.isEstablished())
+           break;
+ 
+         // another token expected from peer
+         inTok = readToken();
+ 
+       }
+     while (true);
+   }
+ catch (GSSException e)
+   {
+     print("GSSAPI error: " + e.getMessage());
+   }
+ 
+ // display context information
+ print("Remaining lifetime in seconds = " + context.getLifetime());
+ print("Context mechanism = " + context.getMech().toString());
+ print("Initiator = " + context.getSrcName().toString());
+ print("Acceptor = " + context.getTargName().toString());
+ 
+ if (context.getConfState())
+   print("Confidentiality security service available");
+ 
+ if (context.getIntegState())
+   print("Integrity security service available");
+ 
+ // perform wrap on an application supplied message, appMsg,
+ // using QOP = 0, and requesting privacy service
+ byte[] appMsg ...
+ MessageProp mProp = new MessageProp(0, true);
+ byte[] tok = context.wrap(appMsg, 0, appMsg.length, mProp);
+ 
+ if (mProp.getPrivacy())
+   print("Message protected with privacy.");
+ 
+ sendToken(tok);
+ 
+ 
+ // release the local-end of the context
+ context.dispose();
+  * </pre>
+  */
+ public interface GSSContext
+ {
+ 
+   // Constants.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * A lifetime constant representing the default context lifetime.
+    */
+   int DEFAULT_LIFETIME = 0;
+ 
+   /**
+    * A lifetime constant representing indefinite context lifetime.
+    */
+   int INDEFINITE_LIFETIME = Integer.MAX_VALUE;
+ 
+   // Methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Called by the context initiator to start the context creation
+    * process.  This is equivalent to the stream based method except that
+    * the token buffers are handled as byte arrays instead of using stream
+    * objects.  This method may return an output token which the
+    * application will need to send to the peer for processing by the
+    * accept call.  Typically, the application would do so by calling the
+    * {@link OutputStream#flush()} method on an OutputStream that
+    * encapsulates the connection between the two peers.  The application
+    * can call {@link #isEstablished()} to determine if the context
+    * establishment phase is complete for this peer.  A return value of
+    * <code>false</code> from {@link #isEstablished()} indicates that more
+    * tokens are expected to be supplied to the initSecContext() method. Note
+    * that it is possible that the initSecContext() method return a token for
+    * the peer, and {@link #isEstablished()} to return <code>true</code> also.
+    * This indicates that the token needs to be sent to the peer, but the local
+    * end of the context is now fully established.</p>
+    *
+    * <p>Upon completion of the context establishment, the available context
+    * options may be queried through the get methods.</p>
+    *
+    * @param inputBuf Token generated by the peer. This parameter is ignored
+    *                 on the first call.
+    * @param offset   The offset within the <i>inputBuf</i> where the token
+    *                 begins.
+    * @param len      The length of the token within the <i>inputBuf</i>
+    *                 (starting at the offset).
+    * @return The output token, if any.
+    * @throws GSSException If this operation fails.
+    */
+   byte[] initSecContext(byte[] inputBuf, int offset, int len)
+     throws GSSException;
+ 
+   /**
+    * <p>Called by the context initiator to start the context creation
+    * process.  This is equivalent to the byte array based method.  This
+    * method may write an output token to the <i>outStream</i>, which the
+    * application will need to send to the peer for processing by the
+    * accept call. Typically, the application would do so by calling the
+    * {@link OutputStream#flush()} method on an OutputStream that encapsulates
+    * the connection between the two peers. The application can call {@link
+    * #isEstablished()} to determine if the context establishment phase is
+    * complete for this peer. A return value of <code>false</code> from
+    * isEstablished indicates that more tokens are expected to be supplied
+    * to the initSecContext() method. Note that it is possible that the
+    * initSecContext() method return a token for the peer, and {@link
+    * #isEstablished() return <code>true</code> also. This indicates that
+    * the token needs to be sent to the peer, but the local end of the context
+    * is now fully established.</p>
+    *
+    * <p>The GSS-API authentication tokens contain a definitive start and end.
+    * This method will attempt to read one of these tokens per invocation,
+    * and may block on the stream if only part of the token is available.</p>
+    *
+    * <p>Upon completion of the context establishment, the available context
+    * options may be queried through the get methods.</p>
+    *
+    * @param inStream  Contains the token generated by the peer. This
+    *                  parameter is ignored on the first call.
+    * @param outStream Output stream where the output token will be written.
+    *                  During the final stage of context establishment, there
+    *                  may be no bytes written.
+    * @return The number of bytes written to <i>outStream</i>, or 0 if no
+    *         token is written.
+    * @throws GSSException If this operation fails.
+    */
+   int initSecContext(InputStream inStream, OutputStream outStream)
+     throws GSSException;
+ 
+   /**
+    * <p>Called by the context acceptor upon receiving a token from the peer.
+    * This call is equivalent to the stream based method except that the
+    * token buffers are handled as byte arrays instead of using stream
+    * objects.</p>
+    *
+    * <p>This method may return an output token which the application will
+    * need to send to the peer for further processing by the init call.</p>
+    *
+    * <p><code>null</code> return value indicates that no token needs to be
+    * sent to the peer. The application can call {@link #isEstablished()}
+    * to determine if the context establishment phase is complete for this
+    * peer. A return value of <code>false</code> from {@link #isEstablished()}
+    * indicates that more tokens are expected to be supplied to this
+    * method.</p>
+    *
+    * <p>Note that it is possible that acceptSecContext() return a token for
+    * the peer, and isEstablished() return <code>true</code> also. This
+    * indicates that the token needs to be sent to the peer, but the local
+    * end of the context is now fully established.</p>
+    *
+    * <p>Upon completion of the context establishment, the available context
+    * options may be queried through the get methods.</p>
+    *
+    * @param inTok  Token generated by the peer.
+    * @param offset The offset within the <i>inTok</i> where the token begins.
+    * @param len    The length of the token within the <i>inTok</i> (starting
+    *               at the offset).
+    * @return The output token, if any.
+    * @throws GSSException If this operation fails.
+    */
+   byte[] acceptSecContext(byte[] inTok, int offset, int len)
+     throws GSSException;
+ 
+   /**
+    * <p>Called by the context acceptor upon receiving a token from the peer.
+    * This call is equivalent to the byte array method.  It may write an
+    * output token to the outStream, which the application will need to
+    * send to the peer for processing by its initSecContext method.
+    * Typically, the application would do so by calling the {@link
+    * OutputStream#flush()} method on an OutputStream that encapsulates the
+    * connection between the two peers. The application can call {@link
+    * #isEstablished()} to determine if the context establishment phase is
+    * complete for this peer. A return value of <code>false</code> from
+    * {@link #isEstablished()} indicates that more tokens are expected to be
+    * supplied to this method.</p>
+    *
+    * <p>Note that it is possible that acceptSecContext() return a token for
+    * the peer, and isEstablished() return <code>true</code> also. This
+    * indicates that the token needs to be sent to the peer, but the local
+    * end of the context is now fully established.</p>
+    *
+    * <p>The GSS-API authentication tokens contain a definitive start and end.
+    * This method will attempt to read one of these tokens per invocation,
+    * and may block on the stream if only part of the token is available.</p>
+    *
+    * <p>Upon completion of the context establishment, the available context
+    * options may be queried through the get methods.</p>
+    *
+    * @param inStream  Contains the token generated by the peer.
+    * @param outStream Output stream where the output token will be written.
+    *                  During the final stage of context establishment, there
+    *                  may be no bytes written.
+    * @return The number of bytes written, or 0 if no token is written.
+    * @throws GSSException If this operation fails.
+    */
+   void acceptSecContext(InputStream inStream, OutputStream outStream)
+     throws GSSException;
+ 
+   /**
+    * Used during context establishment to determine the state of the
+    * context. Returns <code>true</code> if this is a fully established
+    * context on the caller's side and no more tokens are needed from the
+    * peer. Should be called after a call to {@link
+    * #initSecContext(byte[],int,int)} or {@link
+    * #acceptSecContext(byte[],int,int)} when no {@link GSSException}
+    * is thrown.
+    *
+    * @return True of this context is fully established on this side.
+    */
+   boolean isEstablished();
+ 
+   /**
+    * Releases any system resources and cryptographic information stored in
+    * the context object. This will invalidate the context.
+    *
+    * @throws GSSException If this operation fails.
+    */
+   void dispose() throws GSSException;
+ 
+   /**
+    * <p>Returns the maximum message size that, if presented to the
+    * {@link #wrap(byte[],int,int,org.ietf.jgss.MessageProp)} method with
+    * the same <i>confReq</i> and <i>qop</i> parameters, will result in an
+    * output token containing no more than the <i>maxTokenSize</i> bytes.</p>
+    *
+    * <p>This call is intended for use by applications that communicate over
+    * protocols that impose a maximum message size.  It enables the
+    * application to fragment messages prior to applying protection.</p>
+    *
+    * <p>GSS-API implementations are recommended but not required to detect
+    * invalid QOP values when getWrapSizeLimit is called.  This routine
+    * guarantees only a maximum message size, not the availability of
+    * specific QOP values for message protection.</p>
+    *
+    * <p>Successful completion of this call does not guarantee that wrap will
+    * be able to protect a message of the computed length, since this
+    * ability may depend on the availability of system resources at the
+    * time that wrap is called.  However, if the implementation itself
+    * imposes an upper limit on the length of messages that may be
+    * processed by wrap, the implementation should not return a value that
+    * is greater than this length.</p>
+    *
+    * @param qop          Indicates the level of protection wrap will be asked
+    *                     to provide.
+    * @param confReq      Indicates if wrap will be asked to provide privacy
+    *                     service.
+    * @param maxTokenSize The desired maximum size of the token emitted
+    *                     by {@link #wrap(byte[],int,int,org.ietf.jgss.MessageProp)}.
+    * @return The maximum wrapped output size.
+    * @throws GSSException If this operation fails.
+    */
+   int getWrapSizeLimit(int qop, boolean confReq, int maxTokenSize)
+     throws GSSException;
+ 
+   /**
+    * <p>Applies per-message security services over the established security
+    * context.  The method will return a token with a cryptographic MIC and
+    * may optionally encrypt the specified <i>inBuf</i>. This method is
+    * equivalent in functionality to its stream counterpart. The returned
+    * byte array will contain both the MIC and the message.</p>
+    *
+    * <p>The {@link MessageProp} object is instantiated by the application
+    * and used to specify a QOP value which selects cryptographic algorithms,
+    * and a privacy service to optionally encrypt the message. The underlying
+    * mechanism that is used in the call may not be able to provide the
+    * privacy service.  It sets the actual privacy service that it does
+    * provide in this {@link MessageProp} object which the caller should then
+    * query upon return. If the mechanism is not able to provide the
+    * requested QOP, it throws a {@link GSSException} with the {@link
+    * GSSException#BAD_QOP} code.</p>
+    *
+    * <p>Since some application-level protocols may wish to use tokens emitted
+    * by wrap to provide "secure framing", implementations should support
+    * the wrapping of zero-length messages.</p>
+    *
+    * <p>The application will be responsible for sending the token to the
+    * peer.</p>
+    *
+    * @param inBuf   Application data to be protected.
+    * @param offset  The offset within the inBuf where the data begins.
+    * @param len     The length of the data within the inBuf (starting at
+    *                the offset).
+    * @param msgProp Instance of {@link MessageProp} that is used by the
+    *                application to set the desired QOP and privacy state.
+    *                Set the desired QOP to 0 to request the default QOP.
+    *                Upon return from this method, this object will contain
+    *                the the actual privacy state that was applied to the
+    *                message by the underlying mechanism.
+    * @return The wrapped data.
+    * @throws GSSException If this operation fails.
+    */
+   byte[] wrap(byte[] inBuf, int offset, int len, MessageProp msgProp)
+     throws GSSException;
+ 
+   /**
+    * <p>Allows to apply per-message security services over the established
+    * security context.  The method will produce a token with a
+    * cryptographic MIC and may optionally encrypt the message in inStream.
+    * The outStream will contain both the MIC and the message.</p>
+    *
+    * <p>The {@link MessageProp} object is instantiated by the application and
+    * used to specify a QOP value which selects cryptographic algorithms, and
+    * a privacy service to optionally encrypt the message.  The underlying
+    * mechanism that is used in the call may not be able to provide the
+    * privacy service.  It sets the actual privacy service that it does
+    * provide in this MessageProp object which the caller should then query
+    * upon return.  If the mechanism is not able to provide the requested
+    * QOP, it throws a {@link GSSException} with the {@link
+    * GSSException#BAD_QOP} code.</p>
+    *
+    * <p>Since some application-level protocols may wish to use tokens emitted
+    * by wrap to provide "secure framing", implementations should support
+    * the wrapping of zero-length messages.</p>
+    *
+    * <p>The application will be responsible for sending the token to the
+    * peer.</p>
+    *
+    * @param inStream  Input stream containing the application data to be
+    *                  protected.
+    * @param outStream The output stream to write the protected message to.
+    *                  The application is responsible for sending this to the
+    *                  other peer for processing in its unwrap method.
+    * @param msgProp   Instance of {@link MessageProp} that is used by the
+    *                  application to set the desired QOP and privacy state.
+    *                  Set the desired QOP to 0 to request the default QOP.
+    *                  Upon return from this method, this object will contain
+    *                  the the actual privacy state that was applied to the
+    *                  message by the underlying mechanism.
+    * @throws GSSException If this operation fails.
+    */
+   void wrap(InputStream inStream, OutputStream outStream, MessageProp msgProp)
+     throws GSSException;
+ 
+   /**
+    * <p>Used by the peer application to process tokens generated with the
+    * wrap call. This call is equal in functionality to its stream
+    * counterpart. The method will return the message supplied in the peer
+    * application to the wrap call, verifying the embedded MIC.</p>
+    *
+    * <p>The {@link MessageProp} object is instantiated by the application and
+    * is used by the underlying mechanism to return information to the caller
+    * such as the QOP, whether confidentiality was applied to the message, and
+    * other supplementary message state information.</p>
+    *
+    * <p>Since some application-level protocols may wish to use tokens emitted
+    * by wrap to provide "secure framing", implementations should support
+    * the wrapping and unwrapping of zero-length messages.</p>
+    *
+    * @param inBuf   GSS-API wrap token received from peer.
+    * @param offset  The offset within the inBuf where the token begins.
+    * @param len     The length of the token within the inBuf (starting at
+    *                the offset).
+    * @param msgProp Upon return from the method, this object will contain
+    *                the applied QOP, the privacy state of the message, and
+    *                supplementary information stating whether the token was
+    *                a duplicate, old, out of sequence or arriving after a gap.
+    * @return The unwrapped token.
+    * @throws GSSException If this operation fails.
+    */
+   byte[] unwrap(byte[] inBuf, int offset, int len, MessageProp msgProp)
+     throws GSSException;
+ 
+   /**
+    * <p>Used by the peer application to process tokens generated with the
+    * wrap call.  This call is equal in functionality to its byte array
+    * counterpart.  It will produce the message supplied in the peer
+    * application to the wrap call, verifying the embedded MIC.</p>
+    *
+    * <p>The {@link MessageProp} object is instantiated by the application
+    * and is used by the underlying mechanism to return information to the
+    * caller such as the QOP, whether confidentiality was applied to the
+    * message, and other supplementary message state information.</p>
+    *
+    * <p>Since some application-level protocols may wish to use tokens emitted
+    * by wrap to provide "secure framing", implementations should support
+    * the wrapping and unwrapping of zero-length messages.</p>
+    *
+    * @param inStream  Input stream containing the GSS-API wrap token
+    *                  received from the peer.
+    * @param outStream The output stream to write the application message to.
+    * @param msgProp   Upon return from the method, this object will contain
+    *                  the applied QOP, the privacy state of the message, and
+    *                  supplementary information stating whether the token was
+    *                  a duplicate, old, out of sequence or arriving after a gap.
+    * @throws GSSException If this operation fails.
+    */
+   void unwrap(InputStream inStream, OutputStream outStream, MessageProp msgProp)
+     throws GSSException;
+ 
+   /**
+    * <p>Returns a token containing a cryptographic MIC for the supplied
+    * message, for transfer to the peer application.  Unlike wrap, which
+    * encapsulates the user message in the returned token, only the message
+    * MIC is returned in the output token.  This method is identical in
+    * functionality to its stream counterpart.</p>
+    *
+    * <p>Note that privacy can only be applied through the wrap call.</p>
+    *
+    * <p>Since some application-level protocols may wish to use tokens emitted
+    * by getMIC to provide "secure framing", implementations should support
+    * derivation of MICs from zero-length messages.</p>
+    *
+    * @param inMsg   Message to generate MIC over.
+    * @param offset  The offset within the inMsg where the token begins.
+    * @param len     The length of the token within the inMsg (starting at
+    *                the offset).
+    * @param msgProp Instance of MessageProp that is used by the
+    *                application to set the desired QOP.  Set the desired
+    *                QOP to 0 in msgProp to request the default QOP.
+    *                Alternatively pass in <code>null</code> for msgProp to
+    *                request default QOP.
+    * @return The MIC.
+    * @throws GSSException If this operation fails.
+    */
+   byte[] getMIC(byte[] inMsg, int offset, int len, MessageProp msgProp)
+     throws GSSException;
+ 
+   /**
+    * <p>Produces a token containing a cryptographic MIC for the supplied
+    * message, for transfer to the peer application.  Unlike wrap, which
+    * encapsulates the user message in the returned token, only the message
+    * MIC is produced in the output token.  This method is identical in
+    * functionality to its byte array counterpart.</p>
+    *
+    * <p>Note that privacy can only be applied through the wrap call.</p>
+    *
+    * <p>Since some application-level protocols may wish to use tokens emitted
+    * by getMIC to provide "secure framing", implementations should support
+    * derivation of MICs from zero-length messages.</p>
+    *
+    * @param inStream  Input stream containing the message to generate
+    *                  the MIC over.
+    * @param outStream Output stream to write the GSS-API output token to.
+    * @param msgProp   Instance of MessageProp that is used by the
+    *                  application to set the desired QOP.  Set the desired
+    *                  QOP to 0 in msgProp to request the default QOP.
+    *                  Alternatively pass in <code>null</code> for msgProp
+    *                  to request default QOP.
+    * @throws GSSException If this operation fails.
+    */
+   void getMIC(InputStream inStream, OutputStream outStream, MessageProp mgProp)
+     throws GSSException;
+ 
+   /**
+    * <p>Verifies the cryptographic MIC, contained in the token parameter,
+    * over the supplied message.  This method is equivalent in
+    * functionality to its stream counterpart.</p>
+    *
+    * <p>The MessageProp object is instantiated by the application and is used
+    * by the underlying mechanism to return information to the caller such
+    * as the QOP indicating the strength of protection that was applied to
+    * the message and other supplementary message state information.</p>
+    *
+    * <p>Since some application-level protocols may wish to use tokens emitted
+    * by getMIC to provide "secure framing", implementations should support
+    * the calculation and verification of MICs over zero-length messages.</p>
+    *
+    * @param inTok     Token generated by peer's getMIC method.
+    * @param tokOffset The offset within the inTok where the token begins.
+    * @param tokLen    The length of the token within the inTok (starting at
+    *                  the offset).
+    * @param inMsg     Application message to verify the cryptographic MIC
+    *                  over.
+    * @param msgOffset The offset within the inMsg where the message begins.
+    * @param msgLen    The length of the message within the inMsg (starting
+    *                  at the offset).
+    * @param msgProp   Upon return from the method, this object will contain
+    *                  the applied QOP and supplementary information
+    *                  stating whether the token was a duplicate, old, out
+    *                  of sequence or arriving after a gap.  The
+    *                  confidentiality state will be set to <code>false</code>.
+    * @throws GSSException If this operation fails.
+    */
+   void verifyMIC(byte[] inTok, int tokOffset, int tokLen, byte[] inMsg,
+                  int msgOffset, int msgLen, MessageProp msgProp)
+     throws GSSException;
+ 
+   /**
+    * <p>Verifies the cryptographic MIC, contained in the token parameter,
+    * over the supplied message.  This method is equivalent in
+    * functionality to its byte array counterpart.</p>
+    *
+    * <p>The MessageProp object is instantiated by the application and is used
+    * by the underlying mechanism to return information to the caller such
+    * as the QOP indicating the strength of protection that was applied to
+    * the message and other supplementary message state information.</p>
+    *
+    * <p>Since some application-level protocols may wish to use tokens emitted
+    * by getMIC to provide "secure framing", implementations should support
+    * the calculation and verification of MICs over zero-length messages.</p>
+    *
+    * @param tokStream Input stream containing the token generated by peer's
+    *                  getMIC method.
+    * @param msgStream Input stream containing the application message to
+    *                  verify the cryptographic MIC over.
+    * @param msgProp   Upon return from the method, this object will contain
+    *                  the applied QOP and supplementary information
+    *                  stating whether the token was a duplicate, old, out of
+    *                  sequence or arriving after a gap.  The confidentiality
+    *                  state will be set to <code>false</code>.
+    * @throws GSSException If this operation fails.
+    */
+   void verifyMIC(InputStream tokStream, InputStream msgStream, MessageProp msgProp)
+     throws GSSException;
+ 
+   /**
+    * <p>Provided to support the sharing of work between multiple processes.
+    * This routine will typically be used by the context-acceptor, in an
+    * application where a single process receives incoming connection
+    * requests and accepts security contexts over them, then passes the
+    * established context to one or more other processes for message
+    * exchange.</p>
+    *
+    * <p>This method deactivates the security context and creates an
+    * interprocess token which, when passed to the byte array constructor
+    * of the GSSContext interface in another process, will re-activate the
+    * context in the second process.  Only a single instantiation of a
+    * given context may be active at any one time; a subsequent attempt by
+    * a context exporter to access the exported security context will fail.</p>
+    *
+    * <p>The implementation may constrain the set of processes by which the
+    * interprocess token may be imported, either as a function of local
+    * security policy, or as a result of implementation decisions.  For
+    * example, some implementations may constrain contexts to be passed
+    * only between processes that run under the same account, or which are
+    * part of the same process group.</p>
+    *
+    * <p>The interprocess token may contain security-sensitive information
+    * (for example cryptographic keys).  While mechanisms are encouraged to
+    * either avoid placing such sensitive information within interprocess
+    * tokens, or to encrypt the token before returning it to the
+    * application, in a typical GSS-API implementation this may not be
+    * possible.  Thus the application must take care to protect the
+    * interprocess token, and ensure that any process to which the token is
+    * transferred is trustworthy.</p>
+    *
+    * @return The exported context.
+    * @throws GSSException If this operation fails.
+    */
+   byte[] export() throws GSSException;
+ 
+   /**
+    * <p>Sets the request state of the mutual authentication flag for the
+    * context.  This method is only valid before the context creation
+    * process begins and only for the initiator.</p>
+    *
+    * @param state Boolean representing if mutual authentication should
+    *              be requested during context establishment.
+    * @throws GSSException If this operation fails.
+    */
+   void requestMutualAuth(boolean state) throws GSSException;
+ 
+   /**
+    * <p>Sets the request state of the replay detection service for the
+    * context.  This method is only valid before the context creation
+    * process begins and only for the initiator.</p>
+    *
+    * @param state Boolean representing if replay detection is desired
+    *              over the established context.
+    * @throws GSSException If this operation fails.
+    */
+   void requestReplayDet(boolean state) throws GSSException;
+ 
+   /**
+    * <p>Sets the request state for the sequence checking service of the
+    * context.  This method is only valid before the context creation
+    * process begins and only for the initiator.</p>
+    *
+    * @param state Boolean representing if sequence detection is desired
+    *              over the established context.
+    * @throws GSSException If this operation fails.
+    */
+   void requestSequenceDet(boolean state) throws GSSException;
+ 
+   /**
+    * <p>Sets the request state for the credential delegation flag for the
+    * context.  This method is only valid before the context creation
+    * process begins and only for the initiator.</p>
+    *
+    * @param state Boolean representing if credential delegation is
+    *              desired.
+    * @throws GSSException If this operation fails.
+    */
+   void requestCredDeleg(boolean state) throws GSSException;
+ 
+   /**
+    * <p>Requests anonymous support over the context.  This method is only
+    * valid before the context creation process begins and only for the
+    * initiator.</p>
+    *
+    * @param state Boolean representing if anonymity support is requested.
+    * @throws GSSException If this operation fails.
+    */
+   void requestAnonymity(boolean state) throws GSSException;
+ 
+   /**
+    * <p>Requests that confidentiality service be available over the context.
+    * This method is only valid before the context creation process begins
+    * and only for the initiator.</p>
+    *
+    * @param state Boolean indicating if confidentiality services are to
+    *              be requested for the context.
+    * @throws GSSException If this operation fails.
+    */
+   void requestConf(boolean state) throws GSSException;
+ 
+   /**
+    * <p>Requests that integrity services be available over the context. This
+    * method is only valid before the context creation process begins and
+    * only for the initiator.</p>
+    *
+    * @param state Boolean indicating if integrity services are to be
+    *              requested for the context.
+    * @throws GSSException If this operation fails.
+    */
+   void requestInteg(boolean state) throws GSSException;
+ 
+   /**
+    * <p>Sets the desired lifetime for the context in seconds. This method is
+    * only valid before the context creation process begins and only for
+    * the initiator. Use {@link #INDEFINITE_LIFETIME} and {@link
+    * #DEFAULT_LIFETIME} to request indefinite or default context lifetime.</p>
+    *
+    * @param lifetime The desired context lifetime in seconds.
+    * @throws GSSException If this operation fails.
+    */
+   void requestLifetime(int lifetime) throws GSSException;
+ 
+   /**
+    * <p>Sets the channel bindings to be used during context establishment.
+    * This method is only valid before the context creation process begins.</p>
+    *
+    * @param cb Channel bindings to be used.
+    * @throws GSSException If this operation fails.
+    */
+   void setChannelBinding(ChannelBinding cb) throws GSSException;
+ 
+   /**
+    * <p>Returns the state of the delegated credentials for the context.
+    * When issued before context establishment is completed or when the
+    * isProtReady method returns "false", it returns the desired state,
+    * otherwise it will indicate the actual state over the established
+    * context.</p>
+    *
+    * @return The state of the delegated credentials for the context.
+    */
+   boolean getCredDelegState();
+ 
+   /**
+    * <p>Returns the state of the mutual authentication option for the
+    * context.  When issued before context establishment completes or when
+    * the isProtReady method returns "false", it returns the desired state,
+    * otherwise it will indicate the actual state over the established
+    * context.</p>
+    *
+    * @return The state of the mutual authentication option.
+    */
+   boolean getMutualAuthState();
+ 
+   /**
+    * <p>Returns the state of the replay detection option for the context.
+    * When issued before context establishment completes or when the
+    * isProtReady method returns "false", it returns the desired state,
+    * otherwise it will indicate the actual state over the established
+    * context.</p>
+    *
+    * @return The state of the replay detection option.
+    */
+   boolean getReplayDetState();
+ 
+   /**
+    * <p>Returns the state of the sequence detection option for the context.
+    * When issued before context establishment completes or when the
+    * isProtReady method returns "false", it returns the desired state,
+    * otherwise it will indicate the actual state over the established
+    * context.</p>
+    *
+    * @return The state of the sequence detection option.
+    */
+   boolean getSequenceDetState();
+ 
+   /**
+    * <p>Returns "true" if this is an anonymous context. When issued before
+    * context establishment completes or when the isProtReady method
+    * returns "false", it returns the desired state, otherwise it will
+    * indicate the actual state over the established context.</p>
+    *
+    * @return True if this is an anonymous context.
+    */
+   boolean getAnonymityState();
+ 
+   /**
+    * <p>Returns "true" if the context is transferable to other processes
+    * through the use of the {@link #export()} method. This call is only
+    * valid on fully established contexts.</p>
+    *
+    * @return True if the context is transferable.
+    * @throws GSSException If this operation fails.
+    */
+   boolean isTransferable() throws GSSException;
+ 
+   /**
+    * <p>Returns "true" if the per message operations can be applied over
+    * the context.  Some mechanisms may allow the usage of per-message
+    * operations before the context is fully established.  This will also
+    * indicate that the get methods will return actual context state
+    * characteristics instead of the desired ones.</p>
+    *
+    * @return True if the per message operations can be applied over
+    *         the context.
+    */
+   boolean isProtReady();
+ 
+   /**
+    * <p>Returns the confidentiality service state over the context. When
+    * issued before context establishment completes or when the isProtReady
+    * method returns "false", it returns the desired state, otherwise it
+    * will indicate the actual state over the established context.</p>
+    *
+    * @return True the confidentiality service state.
+    */
+   boolean getConfState();
+ 
+   /**
+    * <p>Returns the integrity service state over the context. When issued
+    * before context establishment completes or when the isProtReady method
+    * returns "false", it returns the desired state, otherwise it will
+    * indicate the actual state over the established context.</p>
+    *
+    * @return The integrity service state.
+    */
+   boolean getIntegState();
+ 
+   /**
+    * <p>Returns the context lifetime in seconds. When issued before context
+    * establishment completes or when the isProtReady method returns
+    * "false", it returns the desired lifetime, otherwise it will indicate
+    * the remaining lifetime for the context.</p>
+    *
+    * @return The lifetime.
+    */
+   int getLifetime();
+ 
+   /**
+    * <p>Returns the name of the context initiator. This call is valid only
+    * after the context is fully established or the isProtReady method
+    * returns "true".  It is guaranteed to return an MN.</p>
+    *
+    * @return The name of the context initiator.
+    * @throws GSSException If this operation fails.
+    */
+   GSSName getSrcName() throws GSSException;
+ 
+   /**
+    * <p>Returns the name of the context target (acceptor).  This call is
+    * valid only after the context is fully established or the isProtReady
+    * method returns "true".  It is guaranteed to return an MN.</p>
+    *
+    * @return The name of the context target.
+    * @throws GSSException If this operation fails.
+    */
+   GSSName getTargName() throws GSSException;
+ 
+   /**
+    * <p>Returns the mechanism oid for this context. This method may be called
+    * before the context is fully established, but the mechanism returned
+    * may change on successive calls in negotiated mechanism case.</p>
+    *
+    * @return The mechanism OID.
+    * @throws GSSException If this operation fails.
+    */
+   Oid getMech() throws GSSException;
+ 
+   /**
+    * <p>Returns the delegated credential object on the acceptor's side.
+    * To check for availability of delegated credentials call
+    * {@link #getDelegCredState()}. This call is only valid on fully
+    * established contexts.</p>
+    *
+    * @return The delegated credential object.
+    * @throws GSSException If this operation fails.
+    */
+   GSSCredential getDelegCred() throws GSSException;
+ 
+   /**
+    * <p>Returns "true" if this is the initiator of the context. This call is
+    * only valid after the context creation process has started.</p>
+    *
+    * @return True if this is the initiator.
+    * @throws GSSException If this operation fails.
+    */
+   boolean isInitiator() throws GSSException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/org/ietf/jgss/GSSCredential.java gcc-4.0.0/libjava/org/ietf/jgss/GSSCredential.java
*** gcc-3.4.3/libjava/org/ietf/jgss/GSSCredential.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/org/ietf/jgss/GSSCredential.java	Tue Sep 21 08:33:35 2004
***************
*** 0 ****
--- 1,334 ----
+ /* GSSCredential.java -- GSS credential interface.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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 documentation comments of this class are 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. */
+ 
+ 
+ package org.ietf.jgss;
+ 
+ /**
+  * <p>This interface encapsulates the GSS-API credentials for an entity.
+  * A credential contains all the necessary cryptographic information to
+  * enable the creation of a context on behalf of the entity that it
+  * represents.  It may contain multiple, distinct, mechanism specific
+  * credential elements, each containing information for a specific
+  * security mechanism, but all referring to the same entity.</p>
+  *
+  * <p>A credential may be used to perform context initiation, acceptance,
+  * or both.</p>
+  *
+  * <p>GSS-API implementations must impose a local access-control policy on
+  * callers to prevent unauthorized callers from acquiring credentials to
+  * which they are not entitled.  GSS-API credential creation is not
+  * intended to provide a "login to the network" function, as such a
+  * function would involve the creation of new credentials rather than
+  * merely acquiring a handle to existing credentials.  Such functions,
+  * if required, should be defined in implementation-specific extensions
+  * to the API.</p>
+  *
+  * <p>If credential acquisition is time-consuming for a mechanism, the
+  * mechanism may choose to delay the actual acquisition until the
+  * credential is required (e.g.  by {@link GSSContext}). Such mechanism-
+  * specific implementation decisions should be invisible to the calling
+  * application; thus the query methods immediately following the
+  * creation of a credential object must return valid credential data,
+  * and may therefore incur the overhead of a deferred credential
+  * acquisition.</p>
+  *
+  * <p>Applications will create a credential object passing the desired
+  * parameters.  The application can then use the query methods to obtain
+  * specific information about the instantiated credential object
+  * (equivalent to the gss_inquire routines).  When the credential is no
+  * longer needed, the application should call the dispose (equivalent to
+  * gss_release_cred) method to release any resources held by the
+  * credential object and to destroy any cryptographically sensitive
+  * information.</p>
+  *
+  * <p>Classes implementing this interface also implement the {@link Cloneable}
+  * interface. This indicates the the class will support the {@link
+  * Cloneable#clone()} method that will allow the creation of duplicate
+  * credentials. This is useful when called just before the {@link
+  * #add(org.ietf.jgss.GSSName,int,int,org.ietf.jgss.Oid,int)} call to retain
+  * a copy of the original credential.</p>
+  *
+  * <h3>Example Code</h3>
+  *
+  * <pre>
+ GSSManager mgr = GSSManager.getInstance();
+ 
+ // start by creating a name object for the entity
+ GSSName name = mgr.createName("userName", GSSName.NT_USER_NAME);
+ 
+ // now acquire credentials for the entity
+ GSSCredential cred = mgr.createCredential(name,
+                                           GSSCredential.ACCEPT_ONLY);
+ 
+ // display credential information - name, remaining lifetime,
+ // and the mechanisms it has been acquired over
+ print(cred.getName().toString());
+ print(cred.getRemainingLifetime());
+ 
+ Oid [] mechs = cred.getMechs();
+ if (mechs != null)
+   {
+     for (int i = 0; i < mechs.length; i++)
+       print(mechs[i].toString());
+   }
+ 
+ // release system resources held by the credential
+ cred.dispose();
+  * </pre>
+  */
+ public interface GSSCredential extends Cloneable
+ {
+ 
+   // Constants.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Credential usage flag requesting that it be able to be used for both
+    * context initiation and acceptance.
+    */
+   int INITIATE_AND_ACCEPT = 0;
+ 
+   /**
+    * Credential usage flag requesting that it be able to be used for
+    * context initiation only.
+    */
+   int INITIATE_ONLY = 1;
+ 
+   /**
+    * Credential usage flag requesting that it be able to be used for
+    * context acceptance only.
+    */
+   int ACCEPT_ONLY = 2;
+ 
+   /**
+    * A lifetime constant representing the default credential lifetime.
+    */
+   int DEFAULT_LIFETIME = 0;
+ 
+   /**
+    * A lifetime constant representing indefinite credential lifetime.
+    */
+   int INDEFINITE_LIFETIME = Integer.MAX_VALUE;
+ 
+   // Methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Releases any sensitive information that the GSSCredential object may
+    * be containing.  Applications should call this method as soon as the
+    * credential is no longer needed to minimize the time any sensitive
+    * information is maintained.
+    *
+    * @throws GSSException If this operation fails.
+    */
+   void dispose() throws GSSException;
+ 
+   /**
+    * Retrieves the name of the entity that the credential asserts.
+    *
+    * @return The name.
+    * @throws GSSException If this operation fails.
+    */
+   GSSName getName() throws GSSException;
+ 
+   /**
+    * Retrieves a mechanism name of the entity that the credential asserts.
+    * Equivalent to calling {@link GSSName#canonicalize(org.ietf.jgss.Oid)}
+    * on the name returned by {@link #getName()}.
+    *
+    * @param mechOID The mechanism for which information should be returned.
+    * @return The name.
+    * @throws GSSException If this operation fails.
+    */
+   GSSName getName(Oid mechOID) throws GSSException;
+ 
+   /**
+    * Returns the remaining lifetime in seconds for a credential.  The
+    * remaining lifetime is the minimum lifetime for any of the underlying
+    * credential mechanisms.  A return value of {@link
+    * GSSCredential#INDEFINITE_LIFETIME} indicates that the credential does
+    * not expire.  A return value of 0 indicates that the credential is
+    * already expired.
+    *
+    * @return The remaining lifetime.
+    * @throws GSSException If this operation fails.
+    */
+   int getRemainingLifetime() throws GSSException;
+ 
+   /**
+    * Returns the remaining lifetime is seconds for the credential to
+    * remain capable of initiating security contexts under the specified
+    * mechanism.  A return value of {@link GSSCredential#INDEFINITE_LIFETIME}
+    * indicates that the credential does not expire for context initiation.
+    * A return value of 0 indicates that the credential is already expired.
+    *
+    * @param mech The mechanism for which information should be returned.
+    * @return The remaining lifetime.
+    * @throws GSSException If this operation fails.
+    */
+   int getRemainingInitLifetime(Oid mech) throws GSSException;
+ 
+   /**
+    * Returns the remaining lifetime is seconds for the credential to
+    * remain capable of accepting security contexts under the specified
+    * mechanism.  A return value of {@link GSSCredential#INDEFINITE_LIFETIME}
+    * indicates that the credential does not expire for context acceptance.
+    * A return value of 0 indicates that the credential is already expired.
+    *
+    * @param mech The mechanism for which information should be returned.
+    * @return The remaining lifetime.
+    * @throws GSSException If this operation fails.
+    */
+   int getRemainingAcceptLifetime(Oid mech) throws GSSException;
+ 
+   /**
+    * Returns the credential usage flag.  The return value will be one of
+    * {@link GSSCredential#INITIATE_ONLY}, {@link GSSCredential#ACCEPT_ONLY},
+    * or {@link GSSCredential#INITIATE_AND_ACCEPT}.
+    *
+    * @return The credential usage flag.
+    * @throws GSSException If this operation fails.
+    */
+   int getUsage() throws GSSException;
+ 
+   /**
+    * Returns the credential usage flag for the specified credential
+    * mechanism.  The return value will be one of
+    * {@link GSSCredential#INITIATE_ONLY}, {@link GSSCredential#ACCEPT_ONLY},
+    * or {@link GSSCredential#INITIATE_AND_ACCEPT}.
+    *
+    * @param mechOID The mechanism for which information should be returned.
+    * @return The credential usage flag.
+    * @throws GSSException If this operation fails.
+    */
+   int getUsage(Oid mechOID) throws GSSException;
+ 
+   /**
+    * Returns an array of mechanisms supported by this credential.
+    *
+    * @return The supported mechanism.
+    * @throws GSSException If this operation fails.
+    */
+   Oid[] getMechs() throws GSSException;
+ 
+   /**
+    * <p>Adds a mechanism specific credential-element to an existing
+    * credential.  This method allows the construction of credentials one
+    * mechanism at a time.</p>
+    *
+    * <p>This routine is envisioned to be used mainly by context acceptors
+    * during the creation of acceptance credentials which are to be used
+    * with a variety of clients using different security mechanisms.</p>
+    *
+    * <p>This routine adds the new credential element "in-place".  To add the
+    * element in a new credential, first call {@link Cloneable#clone()} to
+    * obtain a copy of this credential, then call its <code>add()</code>
+    * method.</p>
+    *
+    * @param aName          Name of the principal for whom this credential
+    *                       is to be acquired. Use <code>null</code> to
+    *                       specify the default principal.
+    * @param initLifetime   The number of seconds that credentials should
+    *                       remain valid for initiating of security contexts.
+    *                       Use {@link #INDEFINITE_LIFETIME} to request that
+    *                       the credentials have the maximum permitted lifetime.
+    *                       Use {@link GSSCredential#DEFAULT_LIFETIME} to
+    *                       request the default credential lifetime.
+    * @param acceptLifetime The number of seconds that credentials should
+    *                       remain valid for accepting of security contexts.
+    *                       Use {@link GSSCredential#INDEFINITE_LIFETIME} to
+    *                       request that the credentials have the maximum
+    *                       permitted lifetime. Use {@link
+    *                       GSSCredential#DEFAULT_LIFETIME} to request
+    *                       the default credential lifetime.
+    * @param mech           The mechanisms over which the credential is to be
+    *                       acquired.
+    * @param usage          The intended usage for this credential object. The
+    *                       value of this parameter must be one of:
+    *                       {@link GSSCredential#ACCEPT_AND_INITIATE},
+    *                       {@link GSSCredential#ACCEPT_ONLY},
+    *                       {@link GSSCredential#INITIATE_ONLY}.
+    * @throws GSSException If this operation fails.
+    */
+   void add(GSSName aName, int initLifetime, int acceptLifetime,
+            Oid mech, int usage) throws GSSException;
+ 
+   /**
+    * Tests if this GSSCredential refers to the same entity as the supplied
+    * object.  The two credentials must be acquired over the same
+    * mechanisms and must refer to the same principal. Returns <code>true</code>
+    * if the two GSSCredentials refer to the same entity; <code>false</code>
+    * otherwise. (Note that the Java language specification requires that two
+    * objects that are equal according to the {@link
+    * Object#equals(java.lang.Object)} method must return the same integer
+    * result when the {@link Object#hashCode()} method is called on them.)
+    *
+    * @param another Another GSSCredential object for comparison.
+    * @return True if this object equals the other.
+    */
+   boolean equals(Object another);
+ }
diff -Nrcpad gcc-3.4.3/libjava/org/ietf/jgss/GSSException.java gcc-4.0.0/libjava/org/ietf/jgss/GSSException.java
*** gcc-3.4.3/libjava/org/ietf/jgss/GSSException.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/org/ietf/jgss/GSSException.java	Tue Sep 21 08:33:35 2004
***************
*** 0 ****
--- 1,431 ----
+ /* GSSException.java -- a general exception in GSS.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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 documentation comments of this class are 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. */
+ 
+ 
+ package org.ietf.jgss;
+ 
+ import java.util.PropertyResourceBundle;
+ import java.util.ResourceBundle;
+ 
+ /**
+  * This exception is thrown whenever a fatal GSS-API error occurs
+  * including mechanism specific errors.  It may contain both, the major
+  * and minor, GSS-API status codes.  The mechanism implementers are
+  * responsible for setting appropriate minor status codes when throwing
+  * this exception.  Aside from delivering the numeric error code(s) to
+  * the caller, this class performs the mapping from their numeric values
+  * to textual representations.  All Java GSS-API methods are declared
+  * throwing this exception.
+  */
+ public class GSSException extends Exception
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   // These values do not jive with the "Constant Field Values" in the J2SE
+   // 1.4.1, but do follow RFC 2853. I trust the IETF, but not Sun.
+ 
+   /**
+    * Channel bindings mismatch error.
+    */
+   public static final int BAD_BINDINGS = 4;
+ 
+   /**
+    * Unsupported mechanism requested error.
+    */
+   public static final int BAD_MECH = 1;
+ 
+   /**
+    * Invalid name provided error.
+    */
+   public static final int BAD_NAME = 2;
+ 
+   /**
+    * Name of unsupported type provided error.
+    */
+   public static final int BAD_NAMETYPE = 3;
+ 
+   /**
+    * Invalid status code error - this is the default status value.
+    */
+   public static final int BAD_STATUS = 5;
+ 
+   /**
+    * Token had invalid integrity check error.
+    */
+   public static final int BAD_MIC = 6;
+ 
+   /**
+    * Specified security context expired error.
+    */
+   public static final int CONTEXT_EXPIRED = 12;
+ 
+   /**
+    * Expired credentials detected error.
+    */
+   public static final int CREDENTIALS_EXPIRED = 11;
+ 
+   /**
+    * Defective credential error.
+    */
+   public static final int DEFECTIVE_CREDENTIAL = 10;
+ 
+   /**
+    * Defective token error.
+    */
+   public static final int DEFECTIVE_TOKEN = 9;
+ 
+   /**
+    * General failure, unspecified at GSS-API level.
+    */
+   public static final int FAILURE = 13;
+ 
+   /**
+    * Invalid security context error.
+    */
+   public static final int NO_CONTEXT = 8;
+ 
+   /**
+    * Invalid credentials error.
+    */
+   public static final int NO_CRED = 7;
+ 
+   /**
+    * Unsupported QOP value error.
+    */
+   public static final int BAD_QOP = 14;
+ 
+   /**
+    * Operation unauthorized error.
+    */
+   public static final int UNAUTHORIZED = 15;
+ 
+   /**
+    * Operation unavailable error.
+    */
+   public static final int UNAVAILABLE = 16;
+ 
+   /**
+    * Duplicate credential element requested error.
+    */
+   public static final int DUPLICATE_ELEMENT = 17;
+ 
+   /**
+    * Name contains multi-mechanism elements error.
+    */
+   public static final int NAME_NOT_MN = 18;
+ 
+   /**
+    * The token was a duplicate of an earlier token.  This is a fatal error
+    * code that may occur during context establishment.  It is not used to
+    * indicate supplementary status values.  The MessageProp object is used
+    * for that purpose.
+    */
+   public static final int DUPLICATE_TOKEN = 20;
+ 
+   /**
+    * The token's validity period has expired.  This is a fatal error code
+    * that may occur during context establishment.  It is not used to
+    * indicate supplementary status values.  The MessageProp object is used
+    * for that purpose.
+    */
+   public static final int OLD_TOKEN = 19;
+ 
+   /**
+    * A later token has already been processed.  This is a fatal error code
+    * that may occur during context establishment.  It is not used to
+    * indicate supplementary status values.  The MessageProp object is used
+    * for that purpose.
+    */
+   public static final int UNSEQ_TOKEN = 21;
+ 
+   /**
+    * An expected per-message token was not received.  This is a fatal
+    * error code that may occur during context establishment.  It is not
+    * used to indicate supplementary status values.  The MessageProp object
+    * is used for that purpose.
+    */
+   public static final int GAP_TOKEN = 22;
+ 
+   private final int major;
+   private int minor;
+   private String minorString;
+ 
+   private ResourceBundle messages;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Create a new GSS exception with the given major code.
+    *
+    * @param major The major GSS error code.
+    */
+   public GSSException(int major)
+   {
+     this(major, 0, null);
+   }
+ 
+   /**
+    * Create a new GSS exception with the given major and minor codes, and a
+    * minor explanation string.
+    *
+    * @param major The major GSS error code.
+    * @param minor The minor application-specific error code.
+    * @param minorString An explanation of the minor error code.
+    */
+   public GSSException(int major, int minor, String minorString)
+   {
+     this.major = major;
+     this.minor = minor;
+     this.minorString = minorString;
+     try
+       {
+         messages = PropertyResourceBundle.getBundle("org/ietf/jgss/MessagesBundle");
+       }
+     catch (Exception e)
+       {
+         messages = null;
+       }
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns the major code representing the GSS error code that caused
+    * this exception to be thrown.
+    *
+    * @return The major error code.
+    */
+   public int getMajor()
+   {
+     return major;
+   }
+ 
+   /**
+    * Returns the mechanism error code that caused this exception.  The
+    * minor code is set by the underlying mechanism.  Value of 0 indicates
+    * that mechanism error code is not set.
+    *
+    * @return The minor error code, or 0 if not set.
+    */
+   public int getMinor()
+   {
+     return minor;
+   }
+ 
+   /**
+    * Returns a string explaining the GSS major error code causing this
+    * exception to be thrown.
+    *
+    * @return The major error string.
+    */
+   public String getMajorString()
+   {
+     switch (major)
+       {
+       case BAD_MECH:
+         return getMsg("GSSException.BAD_MECH",
+                       "An unsupported mechanism was requested.");
+       case BAD_NAME:
+         return getMsg("GSSException.BAD_NAME",
+                       "An invalid name was supplied.");
+       case BAD_NAMETYPE:
+         return getMsg("GSSException.BAD_NAMETYPE",
+                       "A supplied name was of an unsupported type.");
+       case BAD_BINDINGS:
+         return getMsg("GSSException.BAD_BINDINGS",
+                       "Incorrect channel bindings were supplied.");
+       case BAD_STATUS:
+         return getMsg("GSSException.BAD_STATUS",
+                       "An invalid status code was supplied.");
+       case BAD_MIC:
+         return getMsg("GSSException.BAD_MIC",
+                       "A token had an invalid MIC.");
+       case NO_CRED:
+         return getMsg("GSSException.NO_CRED",
+                       "No credentials were supplied, or the credentials were "+
+                       "unavailable or inaccessible.");
+       case NO_CONTEXT:
+         return getMsg("GSSException.NO_CONTEXT",
+                       "Invalid context has been supplied.");
+       case DEFECTIVE_TOKEN:
+         return getMsg("GSSException.DEFECTIVE_TOKEN",
+                       "A supplied token was invalid.");
+       case DEFECTIVE_CREDENTIAL:
+         return getMsg("GSSException.DEFECTIVE_CREDENTIAL",
+                       "A supplied credential was invalid.");
+       case CREDENTIALS_EXPIRED:
+         return getMsg("GSSException.CREDENTIALS_EXPIRED",
+                       "The referenced credentials have expired.");
+       case CONTEXT_EXPIRED:
+         return getMsg("GSSException.CONTEXT_EXPIRED",
+                       "The context has expired.");
+       case FAILURE:
+         return getMsg("GSSException.FAILURE",
+                       "Miscellaneous failure.");
+       case BAD_QOP:
+         return getMsg("GSSException.BAD_QOP",
+                       "The quality-of-protection requested could not be provided.");
+       case UNAUTHORIZED:
+         return getMsg("GSSException.UNAUTHORIZED",
+                       "The operation is forbidden by local security policy.");
+       case UNAVAILABLE:
+         return getMsg("GSSException.UNAVAILABLE",
+                       "The operation or option is unavailable.");
+       case DUPLICATE_ELEMENT:
+         return getMsg("GSSException.DUPLICATE_ELEMENT",
+                       "The requested credential element already exists.");
+       case NAME_NOT_MN:
+         return getMsg("GSSException.NAME_NOT_MN",
+                       "The provided name was not a mechanism name.");
+       case OLD_TOKEN:
+         return getMsg("GSSException.OLD_TOKEN",
+                       "The token's validity period has expired.");
+       case DUPLICATE_TOKEN:
+         return getMsg("GSSException.DUPLICATE_TOKEN",
+                       "The token was a duplicate of an earlier version.");
+       case UNSEQ_TOKEN:
+         return getMsg("GSSException.UNSEQ_TOKEN",
+                       "A later token has already been processed.");
+       case GAP_TOKEN:
+         return getMsg("GSSException.GAP_TOKEN",
+                       "An expected per-message token was not received.");
+       default: return "Unknown or invalid error code.";
+       }
+   }
+ 
+   /**
+    * Returns a string explaining the mechanism specific error code.
+    * <code>null</code> will be returned when no mechanism error code has
+    * been set.
+    *
+    * @return The minor error string, or <code>null</code>.
+    */
+   public String getMinorString()
+   {
+     return minorString;
+   }
+ 
+   /**
+    * Used internally by the GSS-API implementation and the underlying
+    * mechanisms to set the minor code and its textual representation.
+    *
+    * @param minorCode The mechanism specific error code.
+    * @param message   A textual explanation of the mechanism error code.
+    */
+   public void setMinor(int minorCode, String message)
+   {
+     this.minor = minorCode;
+     this.minorString = message;
+   }
+ 
+   /**
+    * Returns a textual representation of both the major and minor status
+    * codes.
+    *
+    * @return The textual representation.
+    */
+   public String toString()
+   {
+     return GSSException.class.getName() + ": " + getMessage();
+   }
+ 
+   /**
+    * Returns a detailed message of this exception.  Overrides {@link
+    * Throwable#getMessage()}. It is customary in Java to use this method to
+    * obtain exception information.
+    *
+    * @return The detail message.
+    */
+   public String getMessage()
+   {
+     if (minor == 0)
+       return getMajorString();
+     else
+       return getMajorString() + " (" + minorString + ")";
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private String getMsg(String key, String defaultText)
+   {
+     if (messages != null)
+       {
+         try
+           {
+             return messages.getString(key);
+           }
+         catch (Exception e)
+           {
+           }
+       }
+     return defaultText;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/org/ietf/jgss/GSSManager.java gcc-4.0.0/libjava/org/ietf/jgss/GSSManager.java
*** gcc-3.4.3/libjava/org/ietf/jgss/GSSManager.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/org/ietf/jgss/GSSManager.java	Tue Sep 21 08:33:35 2004
***************
*** 0 ****
--- 1,501 ----
+ /* GSSManager.java -- manager class for the GSS-API.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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 documentation comments of this class are 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. */
+ 
+ 
+ package org.ietf.jgss;
+ 
+ import java.security.Provider;
+ import java.security.Security;
+ 
+ /**
+  * <p>The GSSManager class is an abstract class that serves as a factory
+  * for three GSS interfaces: {@link GSSName}, {@link GSSCredential}, and
+  * {@link GSSContext}. It also provides methods for applications to determine
+  * what mechanisms are available from the GSS implementation and what
+  * nametypes these mechanisms support. An instance of the default GSSManager
+  * subclass may be obtained through the static method {@link #getInstance()},
+  * but applications are free to instantiate other subclasses of GSSManager.</p>
+  *
+  * <p>All but one method in this class are declared abstract. This means
+  * that subclasses have to provide the complete implementation for those
+  * methods. The only exception to this is the static method {@link
+  * #getInstance()} which will have platform specific code to return an
+  * instance of the default subclass.</p>
+  *
+  * <p>Platform providers of GSS are required not to add any constructors to
+  * this class, private, public, or protected. This will ensure that all
+  * subclasses invoke only the default constructor provided to the base
+  * class by the compiler.</p>
+  *
+  * <p>A subclass extending the GSSManager abstract class may be implemented
+  * as a modular provider based layer that utilizes some well known
+  * service provider specification. The GSSManager API provides the
+  * application with methods to set provider preferences on such an
+  * implementation. These methods also allow the implementation to throw
+  * a well-defined exception in case provider based configuration is not
+  * supported. Applications that expect to be portable should be aware of
+  * this and recover cleanly by catching the exception.</p>
+  *
+  * <p>It is envisioned that there will be three most common ways in which
+  * providers will be used:</p>
+  *
+  * <ol>
+  * <li>The application does not care about what provider is used (the
+  * default case).</li>
+  *
+  * <li>The application wants a particular provider to be used
+  * preferentially, either for a particular mechanism or all the
+  * time, irrespective of mechanism.</li>
+  *
+  * <li>The application wants to use the locally configured providers
+  * as far as possible but if support is missing for one or more
+  * mechanisms then it wants to fall back on its own provider.</li>
+  * </ol>
+  *
+  * <p>The GSSManager class has two methods that enable these modes of
+  * usage: {@link #addProviderAtFront(java.security.Provider,org.ietf.jgss.Oid)}
+  * and {@link #addProviderAtEnd(java.security.Provider,org.ietf.jgss.Oid)}.
+  * These methods have the effect of creating an ordered list of
+  * (<i>provider</i>, <i>oid</i>) pairs where each pair indicates a preference
+  * of provider for a given oid.</p>
+  *
+  * <p>The use of these methods does not require any knowledge of whatever
+  * service provider specification the GSSManager subclass follows. It is
+  * hoped that these methods will serve the needs of most applications.
+  * Additional methods may be added to an extended GSSManager that could
+  * be part of a service provider specification that is standardized
+  * later.</p>
+  *
+  * <h3>Example Code</h3>
+  *
+  * <pre>
+ GSSManager mgr = GSSManager.getInstance();
+ 
+ // What mechs are available to us?
+ Oid[] supportedMechs = mgr.getMechs();
+ 
+ // Set a preference for the provider to be used when support is needed
+ // for the mechanisms "1.2.840.113554.1.2.2" and "1.3.6.1.5.5.1.1".
+ 
+ Oid krb = new Oid("1.2.840.113554.1.2.2");
+ Oid spkm1 = new Oid("1.3.6.1.5.5.1.1");
+ 
+ Provider p = (Provider) (new com.foo.security.Provider());
+ 
+ mgr.addProviderAtFront(p, krb);
+ mgr.addProviderAtFront(p, spkm1);
+ 
+ // What name types does this spkm implementation support?
+ Oid[] nameTypes = mgr.getNamesForMech(spkm1);
+ </pre>
+  */
+ public abstract class GSSManager
+ {
+ 
+   // Constructor.
+   // -------------------------------------------------------------------------
+ 
+   public GSSManager()
+   {
+   }
+ 
+   // Class method.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns the default GSSManager implementation.
+    *
+    * @return The default GSSManager implementation.
+    */
+   public static synchronized GSSManager getInstance()
+   {
+     String impl = Security.getProperty("org.ietf.jgss.GSSManager");
+     if (impl == null)
+       impl = "gnu.crypto.gssapi.GSSManagerImpl";
+     try
+       {
+         ClassLoader loader = GSSManager.class.getClassLoader();
+         if (loader == null)
+           loader = ClassLoader.getSystemClassLoader();
+         Class c = loader.loadClass(impl);
+         return (GSSManager) c.newInstance();
+       }
+     catch (Exception x)
+       {
+         throw new RuntimeException(x.toString());
+       }
+   }
+ 
+   // Abstract methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>This method is used to indicate to the GSSManager that the
+    * application would like a particular provider to be used if no other
+    * provider can be found that supports the given mechanism. When a value
+    * of null is used instead of an Oid for the mechanism, the GSSManager
+    * must use the indicated provider for any mechanism.</p>
+    *
+    * <p>Calling this method repeatedly preserves the older settings but
+    * raises them above newer ones in preference thus forming an ordered
+    * list of providers and Oid pairs that grows at the bottom. Thus the
+    * older provider settings will be utilized first before this one is.</p>
+    *
+    * <p>If there are any previously existing preferences that conflict with
+    * the preference being set here, then the GSSManager should ignore this
+    * request.</p>
+    *
+    * <p>If the GSSManager implementation does not support an SPI with a
+    * pluggable provider architecture it should throw a GSSException with
+    * the status code {@link GSSException#UNAVAILABLE} to indicate that the
+    * operation is unavailable.</p>
+    *
+    * @param p    The provider instance that should be used whenever
+    *             support is needed for <i>mech</i>.
+    * @param mech The mechanism for which the provider is being set.
+    * @throws GSSException If this service is unavailable.
+    */
+   public abstract void addProviderAtEnd(Provider p, Oid mech)
+     throws GSSException;
+ 
+   /**
+    * <p>This method is used to indicate to the GSSManager that the
+    * application would like a particular provider to be used ahead of all
+    * others when support is desired for the given mechanism. When a value
+    * of null is used instead of an Oid for the mechanism, the GSSManager
+    * must use the indicated provider ahead of all others no matter what
+    * the mechanism is. Only when the indicated provider does not support
+    * the needed mechanism should the GSSManager move on to a different
+    * provider.</p>
+    *
+    * <p>Calling this method repeatedly preserves the older settings but
+    * lowers them in preference thus forming an ordered list of provider
+    * and Oid pairs that grows at the top.</p>
+    *
+    * <p>Calling addProviderAtFront with a null Oid will remove all previous
+    * preferences that were set for this provider in the GSSManager
+    * instance. Calling addProviderAtFront with a non-null Oid will remove
+    * any previous preference that was set using this mechanism and this
+    * provider together.</p>
+    *
+    * <p>If the GSSManager implementation does not support an SPI with a
+    * pluggable provider architecture it should throw a GSSException with
+    * the status code {@link GSSException#UNAVAILABLE} to indicate that the
+    * operation is unavailable.</p>
+    *
+    * @param p    The provider instance that should be used whenever
+    *             support is needed for <i>mech</i>.
+    * @param mech The mechanism for which the provider is being set.
+    * @throws GSSException If this service is unavailable.
+    */
+   public abstract void addProviderAtFront(Provider p, Oid mech)
+     throws GSSException;
+ 
+   /**
+    * Factory method for creating a previously exported context.  The
+    * context properties will be determined from the input token and can't
+    * be modified through the set methods.
+    *
+    * @param interProcessToken The token previously emitted from the
+    *                          export method.
+    * @return The context.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSContext createContext(byte[] interProcessToken)
+     throws GSSException;
+ 
+   /**
+    * Factory method for creating a context on the acceptor' side.  The
+    * context's properties will be determined from the input token supplied
+    * to the accept method.
+    *
+    * @param myCred Credentials for the acceptor.  Use <code>null</code> to
+    *               act as a default acceptor principal.
+    * @return The context.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSContext createContext(GSSCredential myCred)
+     throws GSSException;
+ 
+   /**
+    * Factory method for creating a context on the initiator's side.
+    * Context flags may be modified through the mutator methods prior to
+    * calling {@link
+    * GSSContext#initSecContext(java.io.InputStream,java.io.OutputStream)}.
+    *
+    * @param peer     Name of the target peer.
+    * @param mech     Oid of the desired mechanism.  Use <code>null</code>
+    *                 to request default mechanism.
+    * @param myCred   Credentials of the initiator.  Use <code>null</code>
+    *                 default initiator principal.
+    * @param lifetime The request lifetime, in seconds, for the context.
+    *                 Use {@link GSSContext#INDEFINITE_LIFETIME} and
+    *                 {@link GSSContext#DEFAULT_LIFETIME} to request
+    *                 indefinite or default context lifetime.
+    * @return The context.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSContext createContext(GSSName peer, Oid mech,
+                                            GSSCredential myCred, int lifetime)
+     throws GSSException;
+ 
+   /**
+    * Factory method for acquiring default credentials.  This will cause
+    * the GSS-API to use system specific defaults for the set of
+    * mechanisms, name, and a DEFAULT lifetime.
+    *
+    * @param usage The intended usage for this credential object.  The
+    *              value of this parameter must be one of:
+    *              {@link GSSCredential#ACCEPT_AND_INITIATE},
+    *              {@link GSSCredential#ACCEPT_ONLY},
+    *              {@link GSSCredential#INITIATE_ONLY}.
+    * @return The credential.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSCredential createCredential(int usage) throws GSSException;
+ 
+   /**
+    * Factory method for acquiring a single mechanism credential.
+    *
+    * @param aName    Name of the principal for whom this credential is to
+    *                 be acquired.  Use <code>null</code> to specify the
+    *                 default principal.
+    * @param lifetime The number of seconds that credentials should remain
+    *                 valid.  Use {@link GSSCredential#INDEFINITE_LIFETIME}
+    *                 to request that the credentials have the maximum
+    *                 permitted lifetime.  Use {@link
+    *                 GSSCredential#DEFAULT_LIFETIME} to request default
+    *                 credential lifetime.
+    * @param mech     The oid of the desired mechanism.  Use <code>null</code>
+    *                 to request the default mechanism(s).
+    * @param usage    The intended usage for this credential object.  The
+    *                 value of this parameter must be one of:
+    *                 {@link GSSCredential#ACCEPT_AND_INITIATE},
+    *                 {@link GSSCredential#ACCEPT_ONLY},
+    *                 {@link GSSCredential#INITIATE_ONLY}.
+    * @return The credential.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSCredential createCredential(GSSName aName, int lifetime,
+                                                  Oid mech, int usage)
+     throws GSSException;
+ 
+   /**
+    * Factory method for acquiring credentials over a set of mechanisms.
+    * Acquires credentials for each of the mechanisms specified in the
+    * array called mechs.  To determine the list of mechanisms' for which
+    * the acquisition of credentials succeeded, the caller should use the
+    * {@link GSSCredential#getMechs()} method.
+    *
+    * @param aName    Name of the principal for whom this credential is to
+    *                 be acquired.  Use <code>null</code> to specify the
+    *                 default principal.
+    * @param lifetime The number of seconds that credentials should remain
+    *                 valid.  Use {@link GSSCredential#INDEFINITE_LIFETIME}
+    *                 to request that the credentials have the maximum
+    *                 permitted lifetime.  Use {@link
+    *                 GSSCredential#DEFAULT_LIFETIME} to request default
+    *                 credential lifetime.
+    * @param mechs    The array of mechanisms over which the credential is
+    *                 to be acquired.  Use <code>null</code> for requesting
+    *                 a system specific default set of mechanisms.
+    * @param usage    The intended usage for this credential object.  The
+    *                 value of this parameter must be one of:
+    *                 {@link GSSCredential#ACCEPT_AND_INITIATE},
+    *                 {@link GSSCredential#ACCEPT_ONLY},
+    *                 {@link GSSCredential#INITIATE_ONLY}.
+    * @return The credential.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSCredential createCredential(GSSName aName, int lifetime,
+                                                  Oid[] mechs, int usage)
+     throws GSSException;
+ 
+   /**
+    * Factory method to convert a contiguous byte array containing a name
+    * from the specified namespace to a {@link GSSName} object.  In general,
+    * the {@link GSSName} object created will not be an MN; two examples that
+    * are exceptions to this are when the namespace type parameter indicates
+    * {@link GSSName#NT_EXPORT_NAME} or when the GSS-API implementation is not
+    * multi-mechanism.
+    *
+    * @param name     The byte array containing the name to create.
+    * @param nameType The Oid specifying the namespace of the name supplied
+    *                 in the byte array.  Note that nameType serves to
+    *                 describe and qualify the interpretation of the input
+    *                 name byte array, it does not necessarily imply a type
+    *                 for the output GSSName implementation. "null" value
+    *                 can be used to specify that a mechanism specific
+    *                 default syntax should be assumed by each mechanism
+    *                 that examines the byte array.
+    * @return The name.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSName createName(byte[] name, Oid nameType)
+     throws GSSException;
+ 
+   /**
+    * Factory method to convert a contiguous byte array containing a name
+    * from the specified namespace to a GSSName object that is an MN.  In
+    * other words, this method is a utility that does the equivalent of two
+    * steps: {@link #createName(byte[],org.ietf.jgss.Oid)} and then also
+    * {@link GSSName#canonicalize(org.ietf.jgss.Oid)}.
+    *
+    * @param name     The byte array representing the name to create.
+    * @param nameType The Oid specifying the namespace of the name supplied
+    *                 in the byte array.  Note that nameType serves to
+    *                 describe and qualify the interpretation of the input
+    *                 name byte array, it does not necessarily imply a type
+    *                 for the output GSSName implementation. "null" value
+    *                 can be used to specify that a mechanism specific
+    *                 default syntax should be assumed by each mechanism
+    *                 that examines the byte array.
+    * @param mech     Oid specifying the mechanism for which this name
+    *                 should be created.
+    * @return The name.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSName createName(byte[] name, Oid nameType, Oid mech)
+     throws GSSException;
+ 
+   /**
+    * Factory method to convert a contiguous string name from the specified
+    * namespace to a {@link GSSName} object.  In general, the {@link GSSName}
+    * object created will not be an MN; two examples that are exceptions to
+    * this are when the namespace type parameter indicates {@link
+    * GSSName#NT_EXPORT_NAME} or when the GSS-API implementation is not
+    * multi-mechanism.
+    *
+    * @param nameStr  The string representing a printable form of the name
+    *                 to create.
+    * @param nameType The Oid specifying the namespace of the printable name
+    *                 supplied. Note that nameType serves to describe and
+    *                 qualify the interpretation of the input nameStr, it
+    *                 does not necessarily imply a type for the output
+    *                 GSSName implementation. "null" value can be used to
+    *                 specify that a mechanism specific default printable
+    *                 syntax should be assumed by each mechanism that
+    *                 examines nameStr.
+    * @return The name.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSName createName(String nameStr, Oid nameType)
+     throws GSSException;
+ 
+   /**
+    * Factory method to convert a contiguous string name from the specified
+    * namespace to an GSSName object that is a mechanism name (MN).  In
+    * other words, this method is a utility that does the equivalent of two
+    * steps: the {@link #createName(java.lang.String,org.ietf.jgss.Oid)}
+    * and then also {@link GSSName#canonicalize(org.ietf.jgss.Oid)}.
+    *
+    * @param nameStr  The string representing a printable form of the name
+    *                 to create.
+    * @param nameType The Oid specifying the namespace of the printable name
+    *                 supplied.  Note that nameType serves to describe and
+    *                 qualify the interpretation of the input nameStr, it
+    *                 does not necessarily imply a type for the output
+    *                 GSSName implementation. "null" value can be used to
+    *                 specify that a mechanism specific default printable
+    *                 syntax should be assumed when the mechanism examines
+    *                 nameStr.
+    * @param mech     Oid specifying the mechanism for which this name
+    *                 should be created.
+    * @return The name.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract GSSName createName(String nameStr, Oid nameType, Oid mech)
+     throws GSSException;
+ 
+   /**
+    * Returns an array of {@link Oid} objects indicating mechanisms available
+    * to GSS-API callers.  A <code>null</code> value is returned when no
+    * mechanism are available (an example of this would be when mechanism are
+    * dynamically configured, and currently no mechanisms are installed).
+    *
+    * @return The array of available mechanisms, or <code>null</code>.
+    */
+   public abstract Oid[] getMechs();
+ 
+   /**
+    * Returns an array of {@link Oid} objects corresponding to the mechanisms
+    * that support the specific name type. <code>null</code> is returned when
+    * no mechanisms are found to support the specified name type.
+    *
+    * @param name The Oid object for the name type.
+    * @return The array of mechanisms, or <code>null</code>.
+    */
+   public abstract Oid[] getMechsForName(Oid name);
+ 
+   /**
+    * Returns name type Oid's supported by the specified mechanism.
+    *
+    * @param mechanism The Oid object for the mechanism to query.
+    * @return The name type Oid's supported by the mechanism.
+    * @throws GSSException If this operation fails.
+    */
+   public abstract Oid[] getNamesForMech(Oid mechanism) throws GSSException;
+ }
diff -Nrcpad gcc-3.4.3/libjava/org/ietf/jgss/GSSName.java gcc-4.0.0/libjava/org/ietf/jgss/GSSName.java
*** gcc-3.4.3/libjava/org/ietf/jgss/GSSName.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/org/ietf/jgss/GSSName.java	Tue Sep 21 08:33:35 2004
***************
*** 0 ****
--- 1,269 ----
+ /* GSSName.java -- a name interface for GSS.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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 documentation comments of this class are 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. */
+ 
+ 
+ package org.ietf.jgss;
+ 
+ /**
+  * <p>This interface encapsulates a single GSS-API principal entity.
+  * Different name formats and their definitions are identified with
+  * universal Object Identifiers (Oids).  The format of the names can be
+  * derived based on the unique oid of its namespace type.</p>
+  *
+  * <h3>Example Code</h3>
+  *
+  * <pre>
+ GSSManager mgr = GSSManager.getInstance();
+ 
+ // create a host based service name
+ GSSName name = mgr.createName("service@host",
+                               GSSName.NT_HOSTBASED_SERVICE);
+ 
+ Oid krb5 = new Oid("1.2.840.113554.1.2.2");
+ 
+ GSSName mechName = name.canonicalize(krb5);
+ 
+ // the above two steps are equivalent to the following
+ GSSName mechName = mgr.createName("service@host",
+                                   GSSName.NT_HOSTBASED_SERVICE, krb5);
+ 
+ // perform name comparison
+ if (name.equals(mechName))
+   print("Names are equal.");
+ 
+ // obtain textual representation of name and its printable
+ // name type
+ print(mechName.toString() +
+       mechName.getStringNameType().toString());
+ 
+ // export and re-import the name
+ byte [] exportName = mechName.export();
+ 
+ // create a new name object from the exported buffer
+ GSSName newName = mgr.createName(exportName,
+                                  GSSName.NT_EXPORT_NAME);
+ </pre>
+  */
+ public interface GSSName
+ {
+ 
+   // Constants.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Name type for representing an anonymous entity. It represents the
+    * following value: <code>{ 1(iso), 3(org), 6(dod), 1(internet), 5(security),
+    * 6(nametypes), 3(gss-anonymous-name) }</code>.</p>
+    */
+   Oid NT_ANONYMOUS = new Oid(new int[] { 1, 3, 6, 1, 5, 6, 3 });
+ 
+   /**
+    * <p>Name type used to indicate an exported name produced by the export
+    * method. It represents the following value: <code>{ 1(iso), 3(org), 6(dod),
+    * 1(internet), 5(security), 6(nametypes), 4(gss-api-exported-name)
+    * }</code>.</p>
+    */
+   Oid NT_EXPORT_NAME = new Oid(new int[] { 1, 3, 6, 1, 5, 6, 4 });
+ 
+   /**
+    * <p>Oid indicating a host-based service name form.  It is used to
+    * represent services associated with host computers.  This name form is
+    * constructed using two elements, "service" and "hostname", as follows:</p>
+    *
+    * <blockquote><code>service@hostname</code></blockquote>
+    *
+    * <p>Values for the "service" element are registered with the IANA. It
+    * represents the following value: <code>{ 1(iso), 3(org), 6(dod),
+    * 1(internet), 5(security), 6(nametypes), 2(gss-host-based-services)
+    * }</code>.</p>
+    */
+   Oid NT_HOSTBASED_SERVICE = new Oid(new int[] { 1, 3, 6, 1, 5, 6, 2 });
+ 
+   /**
+    * <p>Name type to indicate a numeric user identifier corresponding to a
+    * user on a local system. (e.g. Uid).  It represents the following
+    * value: <code>{ iso(1) member-body(2) United States(840) mit(113554)
+    * infosys(1) gssapi(2) generic(1) machine_uid_name(2) }</code>.</p>
+    */
+   Oid NT_MACHINE_UID_NAME = new Oid(new int[] { 1, 2, 840, 113554, 1, 2, 1, 2 });
+ 
+   /**
+    * <p>Name type to indicate a string of digits representing the numeric
+    * user identifier of a user on a local system. It represents the
+    * following value: <code>{ iso(1) member-body(2) United States(840)
+    * mit(113554) infosys(1) gssapi(2) generic(1) string_uid_name(3)
+    * }</code>.</p>
+    */
+   Oid NT_STRING_UID_NAME = new Oid(new int[] { 1, 2, 840, 113554, 1, 2, 1, 3 });
+ 
+   /**
+    * <p>Name type to indicate a named user on a local system.  It represents
+    * the following value: <code>{ iso(1) member-body(2) United States(840)
+    * mit(113554) infosys(1) gssapi(2) generic(1) user_name(1) }</code>.</p>
+    */
+   Oid NT_USER_NAME = new Oid(new int[] { 1, 2, 840, 113554, 1, 2, 1, 1 });
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Compares two GSSName objects to determine whether they refer to the
+    * same entity.  This method may throw a {@link GSSException} when the
+    * names cannot be compared.  If either of the names represents an
+    * anonymous entity, the method will return <code>false</code>.
+    *
+    * @param another GSSName object to compare with.
+    * @return True if this name equals the other, and if neither name
+    *         represents an anonymous entity.
+    * @throws GSSException If the names cannot be compared.
+    */
+   boolean equals(GSSName another) throws GSSException;
+ 
+   /**
+    * A variation of the {@link #equals(org.ietf.jgss.GSSName)} method that
+    * is provided to override the {@link Object#equals(java.lang.Object)}
+    * method that the implementing class will inherit.  The behavior is
+    * exactly the same as that in the other equals method except that no
+    * {@link GSSException} is thrown; instead, <code>false</code> will be
+    * returned in the situation where an error occurs. (Note that the Java
+    * language specification requires that two objects that are equal
+    * according to the {@link Object#equals(java.lang.Object)} method must
+    * return the same integer when the {@link hashCode()} method is called
+    * on them.
+    *
+    * @param another GSSName object to compare with.
+    * @return True if this name equals the other, if neither name
+    *         represents an anonymous entity, or if an error occurs.
+    */
+   boolean equals(Object another);
+ 
+   /**
+    * Creates a mechanism name (MN) from an arbitrary internal name.  This
+    * is equivalent to using the factory methods {@link
+    * GSSManager#createName(java.lang.String,org.ietf.jgss.Oid,org.ietf.jgss.Oid)}
+    * or {@link
+    * GSSManager#createName(byte[],org.ietf.jgss.Oid,org.ietf.jgss.Oid)}.
+    *
+    * @param mech The oid for the mechanism for which the canonical form
+    *             of the name is requested.
+    * @return The mechanism name.
+    * @throws GSSException If this operation fails.
+    */
+   GSSName canonicalize(Oid mech) throws GSSException;
+ 
+   /**
+    * Returns a canonical contiguous byte representation of a mechanism
+    * name (MN), suitable for direct, byte by byte comparison by
+    * authorization functions.  If the name is not an MN, implementations
+    * may throw a {@link GSSException} with the {@link GSSException#NAME_NOT_MN}
+    * status code.  If an implementation chooses not to throw an exception,
+    * it should use some system specific default mechanism to canonicalize
+    * the name and then export it. The format of the header of the output
+    * buffer is specified in <a
+    * href="http://www.ietf.org/rfc/rfc2743.txt">RFC 2743</a>.
+    *
+    * @return The exported name.
+    * @throws GSSException If the name is not an MN and the implementation
+    *         throws an exception for this case.
+    */
+   byte[] export() throws GSSException;
+ 
+   /**
+    * Returns a textual representation of the GSSName object.  To retrieve
+    * the printed name format, which determines the syntax of the returned
+    * string, the {@link #getStringNameType()} method can be used.
+    *
+    * @return The textual representation of the GSSName object.
+    */
+   String toString();
+ 
+   /**
+    * Returns the oid representing the type of name returned through the
+    * {@link #toString()} method.  Using this oid, the syntax of the printable
+    * name can be determined.
+    *
+    * @return The name type.
+    * @throws GSSException If this operation fails.
+    */
+   Oid getStringNameType() throws GSSException;
+ 
+   /**
+    * Tests if this name object represents an anonymous entity.  Returns
+    * <code>true</code> if this is an anonymous name.
+    *
+    * @return True if this name represents an anonymous entity.
+    */
+   boolean isAnonymous();
+ 
+   /**
+    * Tests if this name object contains only one mechanism element and is
+    * thus a mechanism name as defined by <a
+    * href="http://www.ietf.org/rfc/rfc2743.txt">RFC 2743</a>.
+    *
+    * @return True if this name is a mechanism name.
+    */
+   boolean isMN();
+ }
diff -Nrcpad gcc-3.4.3/libjava/org/ietf/jgss/MessageProp.java gcc-4.0.0/libjava/org/ietf/jgss/MessageProp.java
*** gcc-3.4.3/libjava/org/ietf/jgss/MessageProp.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/org/ietf/jgss/MessageProp.java	Tue Sep 21 08:33:35 2004
***************
*** 0 ****
--- 1,273 ----
+ /* MessageProp.java -- GSS-API message property.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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 documentation comments of this class are 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. */
+ 
+ 
+ package org.ietf.jgss;
+ 
+ /**
+  * <p>This is a utility class used within the per-message {@link
+  * GSSContext} methods to convey per-message properties.</p>
+  *
+  * <p>When used with the GSSContext interface's {@link
+  * GSSContext#wrap(byte[],int,int,org.ietf.jgss.MessageProp)} and {@link
+  * GSSContext#getMIC(byte[],int,int,org.ietf.jgss.MessageProp)} methods, an
+  * instance of this class is used to indicate the desired QOP and to
+  * request if confidentiality services are to be applied to caller
+  * supplied data (wrap only).  To request default QOP, the value of 0
+  * should be used for QOP.</p>
+  *
+  * <p>When used with the {@link
+  * GSSContext#unwrap(byte[],int,int,org.ietf.jgss.MessageProp)} and {@link
+  * GSSContext#verifyMIC(byte[],int,int,byte[],int,int,org.ietf.jgss.MessageProp)}
+  * methods of the GSSContext interface, an instance of this class will be
+  * used to indicate the applied QOP and confidentiality services over the
+  * supplied message. In the case of verifyMIC, the confidentiality state
+  * will always be "false".  Upon return from these methods, this object will
+  * also contain any supplementary status values applicable to the processed
+  * token.  The supplementary status values can indicate old tokens, out
+  * of sequence tokens, gap tokens or duplicate tokens.</p>
+  */
+ public class MessageProp
+ {
+ 
+   // Fields.
+   // -------------------------------------------------------------------------
+ 
+   private int qopVal;
+   private boolean privState;
+   private boolean duplicate;
+   private boolean old;
+   private boolean unseq;
+   private boolean gap;
+   private int minorStatus;
+   private String minorString;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * <p>Constructor which sets QOP to 0 indicating that the default QOP is
+    * requested.</p>
+    *
+    * @param privState The desired privacy state. "true" for privacy and
+    *                  "false" for integrity only.
+    */
+   public MessageProp(boolean privState)
+   {
+     this(0, privState);
+   }
+ 
+   /**
+    * <p>Constructor which sets the values for the qop and privacy state.</p>
+    *
+    * @param qop       The desired QOP.  Use 0 to request a default QOP.
+    * @param privState The desired privacy state. "true" for privacy and
+    *                  "false" for integrity only.
+    */
+   public MessageProp(int qop, boolean privState)
+   {
+     this.qopVal = qop;
+     this.privState = privState;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Retrieves the QOP value.
+    *
+    * @return The QOP value.
+    */
+   public int getQOP()
+   {
+     return qopVal;
+   }
+ 
+   /**
+    * Retrieves the privacy state.
+    *
+    * @return The privacy state.
+    */
+   public boolean getPrivacy()
+   {
+     return privState;
+   }
+ 
+   /**
+    * Retrieves the minor status that the underlying mechanism might have
+    * set.
+    *
+    * @return The minor status.
+    */
+   public int getMinorStatus()
+   {
+     return minorStatus;
+   }
+ 
+   /**
+    * Returns a string explaining the mechanism specific error code.
+    * <code>null</code> will be returned when no mechanism error code has
+    * been set.
+    *
+    * @return The minor status string.
+    */
+   public String getMinorString()
+   {
+     return minorString;
+   }
+ 
+   /**
+    * Sets the QOP value.
+    *
+    * @param qopVal The QOP value to be set.  Use 0 to request a default
+    *               QOP value.
+    */
+   public void setQOP(int qopVal)
+   {
+     this.qopVal = qopVal;
+   }
+ 
+   /**
+    * Sets the privacy state.
+    *
+    * @param privState The privacy state to set.
+    */
+   public void setPrivacy(boolean privState)
+   {
+     this.privState = privState;
+   }
+ 
+   /**
+    * Returns "true" if this is a duplicate of an earlier token.
+    *
+    * @return True if this is a duplicate of an earlier token.
+    */
+   public boolean isDuplicateToken()
+   {
+     return duplicate;
+   }
+ 
+   /**
+    * Returns "true" if the token's validity period has expired.
+    *
+    * @return True if the token's validity period has expired.
+    */
+   public boolean isOldToken()
+   {
+     return old;
+   }
+ 
+   /**
+    * Returns "true" if a later token has already been processed.
+    *
+    * @return True if a later token has already been processed.
+    */
+   public boolean isUnseqToken()
+   {
+     return unseq;
+   }
+ 
+   /**
+    * Returns "true" if an expected per-message token was not received.
+    *
+    * @return True if an expected per-message token was not received.
+    */
+   public boolean isGapToken()
+   {
+     return gap;
+   }
+ 
+   /**
+    * This method sets the state for the supplementary information flags
+    * and the minor status in MessageProp.  It is not used by the
+    * application but by the GSS implementation to return this information
+    * to the caller of a per-message context method.
+    *
+    * @param duplicate   True if the token was a duplicate of an earlier
+    *                    token, false otherwise.
+    * @param old         True if the token's validity period has expired,
+    *                    false otherwise.
+    * @param unseq       True if a later token has already been processed,
+    *                    false otherwise.
+    * @param gap         True if one or more predecessor tokens have not yet
+    *                    been successfully processed, false otherwise.
+    * @param minorStatus The integer minor status code that the underlying
+    *                    mechanism wants to set.
+    * @param minorString The textual representation of the minorStatus
+    *                    value.
+    */
+   public void setSupplementaryStates(boolean duplicate, boolean old,
+                                      boolean unseq, boolean gap,
+                                      int minorStatus, String minorString)
+   {
+     this.duplicate = duplicate;
+     this.old = old;
+     this.unseq = unseq;
+     this.gap = gap;
+     this.minorStatus = minorStatus;
+     this.minorString = minorString;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/org/ietf/jgss/MessagesBundle.properties gcc-4.0.0/libjava/org/ietf/jgss/MessagesBundle.properties
*** gcc-3.4.3/libjava/org/ietf/jgss/MessagesBundle.properties	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/org/ietf/jgss/MessagesBundle.properties	Tue Sep 21 08:33:35 2004
***************
*** 0 ****
--- 1,60 ----
+ # MessagesBundle.properties -- English GSS messages.
+ # Copyright (C) 2004  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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ # USA
+ #
+ # Linking this library statically or dynamically with other modules is
+ # making a combined work based on this library.  Thus, the terms and
+ # conditions of the GNU General Public License cover the whole
+ # combination.
+ #
+ # As a special exception, the copyright holders of this library give
+ # you permission to link this library with independent modules to
+ # produce an executable, regardless of the license terms of these
+ # independent modules, and to copy and distribute the resulting
+ # executable under terms of your choice, provided that you also meet,
+ # for each linked independent module, the terms and conditions of the
+ # license of that module.  An independent module is a module which is
+ # not derived from or based on this library.  If you modify this
+ # library, you may extend this exception to your version of the
+ # library, but you are not obligated to do so.  If you do not wish to
+ # do so, delete this exception statement from your version.
+ 
+ GSSException.BAD_MECH=An unsupported mechanism was requested.
+ GSSException.BAD_NAME=An invalid name was supplied.
+ GSSException.BAD_NAMETYPE=A supplied name was of an unsupported type.
+ GSSException.BAD_BINDINGS=Incorrect channel bindings were supplied.
+ GSSException.BAD_STATUS=An invalid status code was supplied.
+ GSSException.BAD_MIC=A token had an invalid MIC.
+ GSSException.NO_CRED=No credentials were supplied, or the credentials were unavailable or inaccessible.
+ GSSException.NO_CONTEXT=Invalid context has been supplied.
+ GSSException.DEFECTIVE_TOKEN=A supplied token was invalid.
+ GSSException.DEFECTIVE_CREDENTIAL=A supplied credential was invalid.
+ GSSException.CREDENTIALS_EXPIRED=The referenced credentials have expired.
+ GSSException.CONTEXT_EXPIRED=The context has expired.
+ GSSException.FAILURE=Miscellaneous failure.
+ GSSException.BAD_QOP=The quality-of-protection requested could not be provided.
+ GSSException.UNAUTHORIZED=The operation is forbidden by local security policy.
+ GSSException.UNAVAILABLE=The operation or option is unavailable.
+ GSSException.DUPLICATE_ELEMENT=The requested credential element already exists.
+ GSSException.NAME_NOT_MN=The provided name was not a mechanism name.
+ GSSException.OLD_TOKEN=The token\'s validity period has expired.
+ GSSException.DUPLICATE_TOKEN=The token was a duplicate of an earlier version.
+ GSSException.UNSEQ_TOKEN=A later token has already been processed.
+ GSSException.GAP_TOKEN=An expected per-message token was not received.
+ 
diff -Nrcpad gcc-3.4.3/libjava/org/ietf/jgss/Oid.java gcc-4.0.0/libjava/org/ietf/jgss/Oid.java
*** gcc-3.4.3/libjava/org/ietf/jgss/Oid.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/org/ietf/jgss/Oid.java	Tue Sep 21 08:33:35 2004
***************
*** 0 ****
--- 1,385 ----
+ /* Oid.java -- Object identifier class.
+    Copyright (C) 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ 
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+ 
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+ 
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the 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 documentation comments of this class are 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. */
+ 
+ 
+ package org.ietf.jgss;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.DataInputStream;
+ import java.io.InputStream;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ 
+ import java.math.BigInteger;
+ 
+ import java.util.Arrays;
+ import java.util.StringTokenizer;
+ 
+ /**
+  * <p>This class represents Universal Object Identifiers (Oids) and their
+  * associated operations.</p>
+  *
+  * <p>Oids are hierarchically globally-interpretable identifiers used
+  * within the GSS-API framework to identify mechanisms and name formats.</p>
+  *
+  * <p>The structure and encoding of Oids is defined in ISOIEC-8824 and
+  * ISOIEC-8825.  For example the Oid representation of Kerberos V5
+  * mechanism is "1.2.840.113554.1.2.2".</p>
+  *
+  * <p>The {@link GSSName} name class contains <code>public static Oid</code>
+  * objects representing the standard name types defined in GSS-API.</p>
+  */
+ public class Oid
+ {
+ 
+   // Constants and fields.
+   // -------------------------------------------------------------------------
+ 
+   private static final int OBJECT_IDENTIFIER = 0x06;
+   private static final int RELATIVE_OID      = 0x0d;
+ 
+   private final int[] components;
+   private byte[] derOid;
+   private String strOid;
+   private boolean relative;
+ 
+   // Constructors.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Creates an Oid object from a string representation of its integer
+    * components (e.g. "1.2.840.113554.1.2.2").
+    *
+    * @param strOid The string representation for the oid.
+    * @throws GSSException If the argument is badly formed.
+    */
+   public Oid(String strOid) throws GSSException
+   {
+     if (strOid == null)
+       throw new NullPointerException();
+     this.strOid = strOid;
+     try
+       {
+         StringTokenizer tok = new StringTokenizer(strOid, ".");
+         components = new int[tok.countTokens()];
+         int i = 0;
+         while (tok.hasMoreTokens() && i < components.length)
+           {
+             components[i++] = Integer.parseInt(tok.nextToken());
+           }
+       }
+     catch (Exception x)
+       {
+         throw new GSSException(GSSException.FAILURE);
+       }
+     relative = false;
+   }
+ 
+   /**
+    * Creates an Oid object from its DER encoding. This refers to the full
+    * encoding including tag and length.  The structure and encoding of
+    * Oids is defined in ISOIEC-8824 and ISOIEC-8825.  This method is
+    * identical in functionality to its byte array counterpart.
+    *
+    * @param derOid Stream containing the DER encoded oid.
+    * @throws GSSException If the DER stream is badly formed, or if the
+    *                      input stream throws an exception.
+    */
+   public Oid(InputStream derOid) throws GSSException
+   {
+     DataInputStream in = new DataInputStream(derOid);
+     try
+       {
+         int tag = in.read() & 0x1F;
+         if (tag != OBJECT_IDENTIFIER && tag != RELATIVE_OID)
+           throw new IOException();
+         int len = in.read();
+         if ((len & ~0x7F) != 0)
+           {
+             byte[] buf = new byte[len & 0x7F];
+             in.readFully(buf);
+             len = new BigInteger(1, buf).intValue();
+           }
+         if (len < 0)
+           throw new IOException();
+         byte[] enc = new byte[len];
+         in.readFully(enc);
+         int[] comp = new int[len + 1];
+         int count = 0;
+         int i = 0;
+         relative = tag == RELATIVE_OID;
+         if (!relative && i < len)
+           {
+             int j = (enc[i] & 0xFF);
+             comp[count++] = j / 40;
+             comp[count++] = j % 40;
+             i++;
+           }
+         while (i < len)
+           {
+             int j = 0;
+             do
+               {
+                 j = enc[i++] & 0xFF;
+                 comp[count] <<= 7;
+                 comp[count]  |= j & 0x7F;
+                 if (i >= len && (j & 0x80) != 0)
+                   throw new IOException();
+               }
+             while ((j & 0x80) != 0);
+             count++;
+           }
+         if (count == len)
+           this.components = comp;
+         else
+           {
+             this.components = new int[count];
+             System.arraycopy(comp, 0, components, 0, count);
+           }
+       }
+     catch (IOException ioe)
+       {
+         throw new GSSException(GSSException.FAILURE);
+       }
+   }
+ 
+   /**
+    * Creates an Oid object from its DER encoding. This refers to the full
+    * encoding including tag and length.  The structure and encoding of
+    * Oids is defined in ISOIEC-8824 and ISOIEC-8825.  This method is
+    * identical in functionality to its streaming counterpart.
+    *
+    * @param derOid Byte array storing a DER encoded oid.
+    * @throws GSSException If the DER bytes are badly formed.
+    */
+   public Oid(byte[] derOid) throws GSSException
+   {
+     this(new ByteArrayInputStream(derOid));
+     this.derOid = (byte[]) derOid.clone();
+   }
+ 
+   Oid(int[] components)
+   {
+     this.components = components;
+     relative = false;
+   }
+ 
+   // Instance methods.
+   // -------------------------------------------------------------------------
+ 
+   /**
+    * Returns a string representation of the oid's integer components in
+    * dot separated notation (e.g. "1.2.840.113554.1.2.2").
+    *
+    * @return The string representation of this oid.
+    */
+   public String toString()
+   {
+     if (strOid == null)
+       {
+         StringBuffer buf = new StringBuffer();
+         for (int i = 0; i < components.length; i++)
+           {
+             buf.append(components[i]);
+             if (i < components.length - 1)
+               buf.append('.');
+           }
+         strOid = buf.toString();
+       }
+     return strOid;
+   }
+ 
+   /**
+    * Returns the full ASN.1 DER encoding for this oid object, which
+    * includes the tag and length.
+    *
+    * @return The ASN.1 DER encoding for this oid.
+    * @throws GSSException If encoding fails.
+    */
+   public byte[] getDER() throws GSSException
+   {
+     if (derOid == null)
+       {
+         ByteArrayOutputStream out = new ByteArrayOutputStream(256);
+         try
+           {
+             int i = 0;
+             if (!relative)
+               {
+                 int b = components[i++] * 40 + (components.length > 1
+                                                 ? components[i++] : 0);
+                 encodeSubId(out, b);
+               }
+             for ( ; i < components.length; i++)
+               encodeSubId(out, components[i]);
+             byte[] oid = out.toByteArray();
+             out.reset();
+             if (relative)
+               out.write(RELATIVE_OID);
+             else
+               out.write(OBJECT_IDENTIFIER);
+             if (oid.length < 128)
+               out.write(oid.length);
+             else if (oid.length < 256)
+               {
+                 out.write(0x81);
+                 out.write(oid.length);
+               }
+             else if (oid.length < 65536)
+               {
+                 out.write(0x82);
+                 out.write((oid.length >>> 8) & 0xFF);
+                 out.write(oid.length & 0xFF);
+               }
+             else if (oid.length < 16777216)
+               {
+                 out.write(0x83);
+                 out.write((oid.length >>> 16) & 0xFF);
+                 out.write((oid.length >>>  8) & 0xFF);
+                 out.write(oid.length & 0xFF);
+               }
+             else
+               {
+                 out.write(0x84);
+                 out.write((oid.length >>> 24) & 0xFF);
+                 out.write((oid.length >>> 16) & 0xFF);
+                 out.write((oid.length >>>  8) & 0xFF);
+                 out.write(oid.length & 0xFF);
+               }
+             out.write(oid);
+           }
+         catch (IOException ioe)
+           {
+             throw new GSSException(GSSException.FAILURE);
+           }
+         derOid = out.toByteArray();
+       }
+     return (byte[]) derOid.clone();
+   }
+ 
+   /**
+    * A utility method to test if an Oid object is contained within the
+    * supplied Oid object array.
+    *
+    * @param oids An array of oids to search.
+    * @return True if this oid is contained in the given array.
+    */
+   public boolean containedIn(Oid[] oids)
+   {
+     for (int i = 0; i < oids.length; i++)
+       {
+         if (equals(oids[i]))
+           return true;
+       }
+     return false;
+   }
+ 
+   public boolean equals(Object o)
+   {
+     if (!(o instanceof Oid))
+       return false;
+     Oid that = (Oid) o;
+     return Arrays.equals(components, that.components);
+   }
+ 
+   public int hashCode()
+   {
+     int code = 0;
+     for (int i = 0; i < components.length; i++)
+       code += components[i];
+     return code;
+   }
+ 
+   // Own methods.
+   // -------------------------------------------------------------------------
+ 
+   private static void encodeSubId(OutputStream out, int id) throws IOException
+   {
+     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-3.4.3/libjava/org/w3c/dom/Attr.java gcc-4.0.0/libjava/org/w3c/dom/Attr.java
*** gcc-3.4.3/libjava/org/w3c/dom/Attr.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/Attr.java	Thu Jan  1 00:00:00 1970
***************
*** 1,111 ****
- /*
-  * 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;
- 
- /**
-  *  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 document type definition.
-  * <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>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>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). Because the DOM Core is not aware of attribute types, it 
-  * treats all attribute values as simple strings, even if the DTD or schema 
-  * declares them as having tokenized types. 
-  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface Attr extends Node {
-     /**
-      * Returns the name of this attribute. 
-      */
-     public String getName();
- 
-     /**
-      * If this attribute was explicitly given a value in the original 
-      * document, this is <code>true</code>; otherwise, it is 
-      * <code>false</code>. Note that the implementation is in charge of this 
-      * attribute, not the user. If the user changes the value of the 
-      * attribute (even if it ends up having the same value as the default 
-      * value) then the <code>specified</code> flag is automatically flipped 
-      * to <code>true</code>. To re-specify the attribute as the default 
-      * value from the DTD, the user must delete the attribute. The 
-      * implementation will then make a new attribute available with 
-      * <code>specified</code> set to <code>false</code> and the default 
-      * value (if one exists).
-      * <br>In summary:  If the attribute has an assigned value in the document 
-      * then <code>specified</code> is <code>true</code>, and the value is 
-      * the assigned value.  If the attribute has no assigned value in the 
-      * document and has a default value in the DTD, then 
-      * <code>specified</code> is <code>false</code>, and the value is the 
-      * default value in the DTD. If the attribute has no assigned value in 
-      * the document and has a value of #IMPLIED in the DTD, then the 
-      * attribute does not appear in the structure model of the document. If 
-      * the <code>ownerElement</code> attribute is <code>null</code> (i.e. 
-      * because it was just created or was set to <code>null</code> by the 
-      * various removal and cloning operations) <code>specified</code> is 
-      * <code>true</code>. 
-      */
-     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>setAttribute</code> on the <code>Element</code> 
-      * interface.
-      * @exception DOMException
-      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
-      */
-     public String getValue();
-     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();
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/CDATASection.java gcc-4.0.0/libjava/org/w3c/dom/CDATASection.java
*** gcc-3.4.3/libjava/org/w3c/dom/CDATASection.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/CDATASection.java	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- /*
-  * 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;
- 
- /**
-  * 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>DOMString</code> attribute of the <code>Text</code> node holds 
-  * the text that is contained by the CDATA section. Note that this may 
-  * 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.
-  * 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.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/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface CDATASection extends Text {
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/CharacterData.java gcc-4.0.0/libjava/org/w3c/dom/CharacterData.java
*** gcc-3.4.3/libjava/org/w3c/dom/CharacterData.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/CharacterData.java	Thu Jan  1 00:00:00 1970
***************
*** 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;
- 
- /**
-  * 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/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 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
-      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
-      * @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;
-     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 offsetStart offset of substring to extract.
-      * @param countThe 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 argThe <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 offsetThe character offset at which to insert.
-      * @param argThe <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 offsetThe offset from which to start removing.
-      * @param countThe 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 offsetThe offset from which to start replacing.
-      * @param countThe 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 argThe <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;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/Comment.java gcc-4.0.0/libjava/org/w3c/dom/Comment.java
*** gcc-3.4.3/libjava/org/w3c/dom/Comment.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/Comment.java	Thu Jan  1 00:00:00 1970
***************
*** 1,24 ****
- /*
-  * 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;
- 
- /**
-  * 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>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface Comment extends CharacterData {
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/DOMException.java gcc-4.0.0/libjava/org/w3c/dom/DOMException.java
*** gcc-3.4.3/libjava/org/w3c/dom/DOMException.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/DOMException.java	Thu Jan  1 00:00:00 1970
***************
*** 1,117 ****
- /*
-  * 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;
- 
- /**
-  * 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. 
-  * <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/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public class DOMException extends RuntimeException {
-     public DOMException(short code, String message) {
-        super(message);
-        this.code = code;
-     }
-     /** @serial */
-     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 DOMString
-      */
-     public static final short DOMSTRING_SIZE_ERR        = 2;
-     /**
-      * If any node is inserted somewhere it doesn't belong
-      */
-     public static final short HIERARCHY_REQUEST_ERR     = 3;
-     /**
-      * If a node 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 a name. See 
-      * production 2 in the XML specification for the definition of a legal 
-      * character, and production 5 for the definition of a legal name 
-      * character.
-      */
-     public static final short INVALID_CHARACTER_ERR     = 5;
-     /**
-      * If data is specified for a node 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 node 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;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/DOMImplementation.java gcc-4.0.0/libjava/org/w3c/dom/DOMImplementation.java
*** gcc-3.4.3/libjava/org/w3c/dom/DOMImplementation.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/DOMImplementation.java	Thu Jan  1 00:00:00 1970
***************
*** 1,100 ****
- /*
-  * 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;
- 
- /**
-  * 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/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface DOMImplementation {
-     /**
-      * Test if the DOM implementation implements a specific feature.
-      * @param featureThe name of the feature to test (case-insensitive). The 
-      *   values used by DOM features are defined throughout the DOM Level 2 
-      *   specifications and listed in the  section. The name must be an XML 
-      *   name. To avoid possible conflicts, as a convention, names referring 
-      *   to features defined outside the DOM specification should be made 
-      *   unique by reversing the name of the Internet domain name of the 
-      *   person (or the organization that the person belongs to) who defines 
-      *   the feature, component by component, and using this as a prefix. 
-      *   For instance, the W3C SVG Working Group defines the feature 
-      *   "org.w3c.dom.svg".
-      * @param versionThis is the version number of the feature to test. In 
-      *   Level 2, the string can be either "2.0" or "1.0". If the version is 
-      *   not specified, supporting any version of the feature causes the 
-      *   method to return <code>true</code>.
-      * @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. It is expected that a 
-      * future version of the DOM will provide a way for populating a 
-      * <code>DocumentType</code>.
-      * <br>HTML-only DOM implementations do not need to implement this method.
-      * @param qualifiedNameThe qualified name of the document type to be 
-      *   created. 
-      * @param publicIdThe external subset public identifier.
-      * @param systemIdThe 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 
-      *   contains an illegal character.
-      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is 
-      *   malformed.
-      * @since DOM Level 2
-      */
-     public DocumentType createDocumentType(String qualifiedName, 
-                                            String publicId, 
-                                            String systemId)
-                                            throws DOMException;
- 
-     /**
-      * Creates an XML <code>Document</code> object of the specified type with 
-      * its document element. HTML-only DOM implementations do not need to 
-      * implement this method.
-      * @param namespaceURIThe namespace URI of the document element to create.
-      * @param qualifiedNameThe qualified name of the document element to be 
-      *   created.
-      * @param doctypeThe 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.
-      * @exception DOMException
-      *   INVALID_CHARACTER_ERR: Raised if the specified qualified name 
-      *   contains an illegal character.
-      *   <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> has a prefix that is "xml" and the 
-      *   <code>namespaceURI</code> is different from "
-      *   http://www.w3.org/XML/1998/namespace" .
-      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>doctype</code> has already 
-      *   been used with a different document or was created from a different 
-      *   implementation.
-      * @since DOM Level 2
-      */
-     public Document createDocument(String namespaceURI, 
-                                    String qualifiedName, 
-                                    DocumentType doctype)
-                                    throws DOMException;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/Document.java gcc-4.0.0/libjava/org/w3c/dom/Document.java
*** gcc-3.4.3/libjava/org/w3c/dom/Document.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/Document.java	Thu Jan  1 00:00:00 1970
***************
*** 1,365 ****
- /*
-  * 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;
- 
- /**
-  * 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/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface Document extends Node {
-     /**
-      * The Document Type Declaration (see <code>DocumentType</code>) 
-      * associated with this document. For HTML documents as well as XML 
-      * documents without a document type declaration this returns 
-      * <code>null</code>. The DOM Level 2 does not support editing the 
-      * Document Type Declaration. <code>docType</code> cannot be altered in 
-      * any way, including through the use of methods inherited from the 
-      * <code>Node</code> interface, such as <code>insertNode</code> or 
-      * <code>removeNode</code>.
-      */
-     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 root element of the document. For HTML documents, 
-      * this is the element with the tagName "HTML".
-      */
-     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 tagNameThe name of the element type to instantiate. For XML, 
-      *   this is case-sensitive. For HTML, the <code>tagName</code> 
-      *   parameter may be provided in any case, but it must be mapped to the 
-      *   canonical uppercase form 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 contains an 
-      *   illegal character.
-      */
-     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 dataThe 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 dataThe 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 dataThe 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 targetThe target part of the processing instruction.
-      * @param dataThe data for the node.
-      * @return The new <code>ProcessingInstruction</code> object.
-      * @exception DOMException
-      *   INVALID_CHARACTER_ERR: Raised if the specified target contains an 
-      *   illegal character.
-      *   <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 nameThe 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 contains an 
-      *   illegal character.
-      */
-     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.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 does not support any mechanism to 
-      * resolve namespace prefixes.
-      * @param nameThe name of the entity to reference. 
-      * @return The new <code>EntityReference</code> object.
-      * @exception DOMException
-      *   INVALID_CHARACTER_ERR: Raised if the specified name contains an 
-      *   illegal character.
-      *   <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> with a 
-      * given tag name in the order in which they are encountered in a 
-      * preorder traversal of the <code>Document</code> tree. 
-      * @param tagnameThe name of the tag to match on. The special value "*" 
-      *   matches all tags.
-      * @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. The returned 
-      * node has no parent; (<code>parentNode</code> is <code>null</code>). 
-      * The source node is not altered or removed from the original document; 
-      * this method creates a new copy of the source node.
-      * <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 on a <code>Node</code>, the source 
-      * node is not altered.
-      * <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 element 
-      * are recursively imported and the resulting nodes reassembled 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>Specified 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 not 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 
-      * <code>Notation</code> nodes since they never 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.</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.</dd>
-      *  
-      * @param importedNodeThe node to import.
-      * @param deepIf <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 <code>Attr</code>
-      *   , <code>EntityReference</code>, and <code>Notation</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.
-      * @since DOM Level 2
-      */
-     public Node importNode(Node importedNode, 
-                            boolean deep)
-                            throws DOMException;
- 
-     /**
-      * Creates an element of the given qualified name and namespace URI. 
-      * HTML-only DOM implementations do not need to implement this method.
-      * @param namespaceURIThe namespace URI of the element to create.
-      * @param qualifiedNameThe qualified name of the element type to 
-      *   instantiate.
-      * @return A new <code>Element</code> object with the following 
-      *   attributes:AttributeValue<code>Node.nodeName</code>
-      *   <code>qualifiedName</code><code>Node.namespaceURI</code>
-      *   <code>namespaceURI</code><code>Node.prefix</code>prefix, extracted 
-      *   from <code>qualifiedName</code>, or <code>null</code> if there is 
-      *   no prefix<code>Node.localName</code>local name, extracted from 
-      *   <code>qualifiedName</code><code>Element.tagName</code>
-      *   <code>qualifiedName</code>
-      * @exception DOMException
-      *   INVALID_CHARACTER_ERR: Raised if the specified qualified name 
-      *   contains an illegal character.
-      *   <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> has a prefix that is "xml" and the 
-      *   <code>namespaceURI</code> is different from "
-      *   http://www.w3.org/XML/1998/namespace" .
-      * @since DOM Level 2
-      */
-     public Element createElementNS(String namespaceURI, 
-                                    String qualifiedName)
-                                    throws DOMException;
- 
-     /**
-      * Creates an attribute of the given qualified name and namespace URI. 
-      * HTML-only DOM implementations do not need to implement this method.
-      * @param namespaceURIThe namespace URI of the attribute to create.
-      * @param qualifiedNameThe qualified name of the attribute to instantiate.
-      * @return A new <code>Attr</code> object with the following attributes:
-      *   AttributeValue<code>Node.nodeName</code>qualifiedName
-      *   <code>Node.namespaceURI</code><code>namespaceURI</code>
-      *   <code>Node.prefix</code>prefix, extracted from 
-      *   <code>qualifiedName</code>, or <code>null</code> if there is no 
-      *   prefix<code>Node.localName</code>local name, extracted from 
-      *   <code>qualifiedName</code><code>Attr.name</code>
-      *   <code>qualifiedName</code><code>Node.nodeValue</code>the empty 
-      *   string
-      * @exception DOMException
-      *   INVALID_CHARACTER_ERR: Raised if the specified qualified name 
-      *   contains an illegal character.
-      *   <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>, if the 
-      *   <code>qualifiedName</code> has a prefix that is "xml" and the 
-      *   <code>namespaceURI</code> is different from "
-      *   http://www.w3.org/XML/1998/namespace", or if the 
-      *   <code>qualifiedName</code> is "xmlns" and the 
-      *   <code>namespaceURI</code> is different from "
-      *   http://www.w3.org/2000/xmlns/".
-      * @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 the order in which they are 
-      * encountered in a preorder traversal of the <code>Document</code> tree.
-      * @param namespaceURIThe namespace URI of the elements to match on. The 
-      *   special value "*" matches all namespaces.
-      * @param localNameThe 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> whose <code>ID</code> is given by 
-      * <code>elementId</code>. If no such element exists, returns 
-      * <code>null</code>. Behavior is not defined if more than one element 
-      * has this <code>ID</code>. The DOM implementation must have 
-      * information that says which attributes are of type ID. Attributes 
-      * with the name "ID" are not of type ID unless so defined. 
-      * Implementations that do not know whether attributes are of type ID or 
-      * not are expected to return <code>null</code>.
-      * @param elementIdThe unique <code>id</code> value for an element.
-      * @return The matching element.
-      * @since DOM Level 2
-      */
-     public Element getElementById(String elementId);
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/DocumentFragment.java gcc-4.0.0/libjava/org/w3c/dom/DocumentFragment.java
*** gcc-3.4.3/libjava/org/w3c/dom/DocumentFragment.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/DocumentFragment.java	Thu Jan  1 00:00:00 1970
***************
*** 1,52 ****
- /*
-  * 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;
- 
- /**
-  * <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>insertBefore</code> and <code>appendChild</code>.
-  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface DocumentFragment extends Node {
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/DocumentType.java gcc-4.0.0/libjava/org/w3c/dom/DocumentType.java
*** gcc-3.4.3/libjava/org/w3c/dom/DocumentType.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/DocumentType.java	Thu Jan  1 00:00:00 1970
***************
*** 1,79 ****
- /*
-  * 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;
- 
- /**
-  * 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>The DOM Level 2 doesn't support editing <code>DocumentType</code> nodes.
-  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 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.
-      * @since DOM Level 2
-      */
-     public String getSystemId();
- 
-     /**
-      * The internal subset as a string.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();
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/Element.java gcc-4.0.0/libjava/org/w3c/dom/Element.java
*** gcc-3.4.3/libjava/org/w3c/dom/Element.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/Element.java	Thu Jan  1 00:00:00 1970
***************
*** 1,302 ****
- /*
-  * 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;
- 
- /**
-  * 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.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/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface Element extends Node {
-     /**
-      * The name of the element. 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 nameThe 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 nameThe name of the attribute to create or alter.
-      * @param valueValue to set in string form.
-      * @exception DOMException
-      *   INVALID_CHARACTER_ERR: Raised if the specified name contains an 
-      *   illegal character.
-      *   <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 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.
-      * <br>To remove an attribute by local name and namespace URI, use the 
-      * <code>removeAttributeNS</code> method.
-      * @param nameThe 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 nameThe 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.
-      * <br>To add a new attribute node with a qualified name and namespace 
-      * URI, use the <code>setAttributeNodeNS</code> method.
-      * @param newAttrThe <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 the removed <code>Attr</code> 
-      * has a default value it is immediately replaced. The replacing 
-      * attribute has the same namespace URI and local name, as well as the 
-      * original prefix, when applicable.
-      * @param oldAttrThe <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 the order in which they are encountered in 
-      * a preorder traversal of this <code>Element</code> tree.
-      * @param nameThe 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. HTML-only 
-      * DOM implementations do not need to implement this method.
-      * @param namespaceURIThe namespace URI of the attribute to retrieve.
-      * @param localNameThe 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.
-      * @since DOM Level 2
-      */
-     public String getAttributeNS(String namespaceURI, 
-                                  String localName);
- 
-     /**
-      * 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>HTML-only DOM implementations do not need to implement this method.
-      * @param namespaceURIThe namespace URI of the attribute to create or 
-      *   alter.
-      * @param qualifiedNameThe qualified name of the attribute to create or 
-      *   alter.
-      * @param valueThe value to set in string form.
-      * @exception DOMException
-      *   INVALID_CHARACTER_ERR: Raised if the specified qualified name 
-      *   contains an illegal character.
-      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
-      *   <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>, if the 
-      *   <code>qualifiedName</code> has a prefix that is "xml" and the 
-      *   <code>namespaceURI</code> is different from "
-      *   http://www.w3.org/XML/1998/namespace", or if the 
-      *   <code>qualifiedName</code> is "xmlns" and the 
-      *   <code>namespaceURI</code> is different from "
-      *   http://www.w3.org/2000/xmlns/".
-      * @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 the removed 
-      * attribute has a default value it is immediately replaced. The 
-      * replacing attribute has the same namespace URI and local name, as 
-      * well as the original prefix.
-      * <br>HTML-only DOM implementations do not need to implement this method.
-      * @param namespaceURIThe namespace URI of the attribute to remove.
-      * @param localNameThe local name of the attribute to remove.
-      * @exception DOMException
-      *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
-      * @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. 
-      * HTML-only DOM implementations do not need to implement this method.
-      * @param namespaceURIThe namespace URI of the attribute to retrieve.
-      * @param localNameThe 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.
-      * @since DOM Level 2
-      */
-     public Attr getAttributeNodeNS(String namespaceURI, 
-                                    String localName);
- 
-     /**
-      * 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.
-      * <br>HTML-only DOM implementations do not need to implement this method.
-      * @param newAttrThe <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.
-      * @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 
-      * the order in which they are encountered in a preorder traversal of 
-      * this <code>Element</code> tree.
-      * <br>HTML-only DOM implementations do not need to implement this method.
-      * @param namespaceURIThe namespace URI of the elements to match on. The 
-      *   special value "*" matches all namespaces.
-      * @param localNameThe 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 <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 nameThe 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. HTML-only DOM implementations do not 
-      * need to implement this method.
-      * @param namespaceURIThe namespace URI of the attribute to look for.
-      * @param localNameThe 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.
-      * @since DOM Level 2
-      */
-     public boolean hasAttributeNS(String namespaceURI, 
-                                   String localName);
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/Entity.java gcc-4.0.0/libjava/org/w3c/dom/Entity.java
*** gcc-3.4.3/libjava/org/w3c/dom/Entity.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/Entity.java	Thu Jan  1 00:00:00 1970
***************
*** 1,68 ****
- /*
-  * 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;
- 
- /**
-  * This interface represents an entity, either parsed or unparsed, in an XML 
-  * document. Note that this models the entity itself not the entity 
-  * declaration. <code>Entity</code> declaration modeling has been left for a 
-  * later Level of the DOM specification.
-  * <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 
-  * external 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 value of the entity may not be available. When 
-  * the replacement value is available, the corresponding <code>Entity</code> 
-  * node's child list represents the structure of that replacement text. 
-  * Otherwise, the child list is empty.
-  * <p>The DOM Level 2 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.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. The DOM Level 2 does not support any mechanism to resolve 
-  * namespace prefixes.
-  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface Entity extends Node {
-     /**
-      * The public identifier associated with the entity, if specified. If the 
-      * public identifier was not specified, this is <code>null</code>.
-      */
-     public String getPublicId();
- 
-     /**
-      * The system identifier associated with the entity, if specified. If the 
-      * system identifier was not specified, this is <code>null</code>.
-      */
-     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();
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/EntityReference.java gcc-4.0.0/libjava/org/w3c/dom/EntityReference.java
*** gcc-3.4.3/libjava/org/w3c/dom/EntityReference.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/EntityReference.java	Thu Jan  1 00:00:00 1970
***************
*** 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;
- 
- /**
-  * <code>EntityReference</code> objects may be inserted into the structure 
-  * model when an entity reference is in the source document, or when the 
-  * user wishes to insert an entity reference. 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 
-  * structure model, instead of providing <code>EntityReference</code> 
-  * objects. If it does provide such objects, then for a given 
-  * <code>EntityReference</code> node, it may be that there is no 
-  * <code>Entity</code> node representing the referenced entity. If such an 
-  * <code>Entity</code> exists, then the subtree of the 
-  * <code>EntityReference</code> node is in general a copy of the 
-  * <code>Entity</code> node subtree. However, this 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.
-  * <p>As for <code>Entity</code> nodes, <code>EntityReference</code> nodes and 
-  * all their descendants are readonly.
-  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface EntityReference extends Node {
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/NamedNodeMap.java gcc-4.0.0/libjava/org/w3c/dom/NamedNodeMap.java
*** gcc-3.4.3/libjava/org/w3c/dom/NamedNodeMap.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/NamedNodeMap.java	Thu Jan  1 00:00:00 1970
***************
*** 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;
- 
- /**
-  * 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/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 Core Specification</a>.
-  */
- public interface NamedNodeMap {
-     /**
-      * Retrieves a node specified by name.
-      * @param nameThe <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.
-      * <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 argA 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.
-      */
-     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 nameThe <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 indexIndex 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. HTML-only 
-      * DOM implementations do not need to implement this method.
-      * @param namespaceURIThe namespace URI of the node to retrieve.
-      * @param localNameThe 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.
-      * @since DOM Level 2
-      */
-     public Node getNamedItemNS(String namespaceURI, 
-                                String localName);
- 
-     /**
-      * 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.
-      * <br>HTML-only DOM implementations do not need to implement this method.
-      * @param argA 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.
-      * @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>HTML-only DOM implementations do not need to implement this method.
-      * @param namespaceURIThe namespace URI of the node to remove.
-      * @param localNameThe 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.
-      * @since DOM Level 2
-      */
-     public Node removeNamedItemNS(String namespaceURI, 
-                                   String localName)
-                                   throws DOMException;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/Node.java gcc-4.0.0/libjava/org/w3c/dom/Node.java
*** gcc-3.4.3/libjava/org/w3c/dom/Node.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/Node.java	Thu Jan  1 00:00:00 1970
***************
*** 1,390 ****
- /*
-  * 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;
- 
- /**
-  * 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>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 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.
-      * @exception DOMException
-      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
-      * @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;
-     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.
-      * @param newChildThe node to insert.
-      * @param refChildThe 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.
-      *   <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.
-      */
-     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.
-      * @param newChildThe new node to put in the child list.
-      * @param oldChildThe 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.
-      *   <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.
-      */
-     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 oldChildThe 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.
-      */
-     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 newChildThe 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.
-      *   <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.
-      */
-     public Node appendChild(Node newChild)
-                             throws DOMException;
- 
-     /**
-      * Returns whether this node has any children.
-      * @return  <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>.).
-      * <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 text it 
-      * contains unless it is a deep clone, since the text is contained in a 
-      * child <code>Text</code> node. Cloning an <code>Attribute</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 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 deepIf <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  lookups) that depend on a particular document tree 
-      * structure are to be used.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 2
-      */
-     public void normalize();
- 
-     /**
-      * Tests whether the DOM implementation implements a specific feature and 
-      * that feature is supported by this node.
-      * @param featureThe name of the feature to test. This is the same name 
-      *   which can be passed to the method <code>hasFeature</code> on 
-      *   <code>DOMImplementation</code>.
-      * @param versionThis is the version number of the feature to test. In 
-      *   Level 2, version 1, this is the string "2.0". If the version is not 
-      *   specified, supporting any version of the feature will cause the 
-      *   method to return <code>true</code>.
-      * @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.
-      * <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>createElement</code> from the 
-      * <code>Document</code> interface, this is always <code>null</code>.Per 
-      * the Namespaces in XML Specification  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.
-      * <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>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.
-      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
-      *   <br>NAMESPACE_ERR: Raised if the specified <code>prefix</code> is 
-      *   malformed, 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 "
-      *   http://www.w3.org/XML/1998/namespace", if this node is an attribute 
-      *   and the specified prefix is "xmlns" and the 
-      *   <code>namespaceURI</code> of this node is different from "
-      *   http://www.w3.org/2000/xmlns/", or if this node is an attribute and 
-      *   the <code>qualifiedName</code> of this node is "xmlns" .
-      * @since DOM Level 2
-      */
-     public String getPrefix();
-     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>createElement</code> from the 
-      * <code>Document</code> interface, 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 <code>true</code> if this node has any attributes, 
-      *   <code>false</code> otherwise.
-      * @since DOM Level 2
-      */
-     public boolean hasAttributes();
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/NodeList.java gcc-4.0.0/libjava/org/w3c/dom/NodeList.java
*** gcc-3.4.3/libjava/org/w3c/dom/NodeList.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/NodeList.java	Thu Jan  1 00:00:00 1970
***************
*** 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;
- 
- /**
-  * 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/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 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 indexIndex 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();
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/Notation.java gcc-4.0.0/libjava/org/w3c/dom/Notation.java
*** gcc-3.4.3/libjava/org/w3c/dom/Notation.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/Notation.java	Thu Jan  1 00:00:00 1970
***************
*** 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;
- 
- /**
-  * This interface represents a notation declared in the DTD. A notation either 
-  * declares, by name, the format of an unparsed entity (see section 4.7 of 
-  * the XML 1.0 specification ), or is used for formal declaration of 
-  * processing instruction targets (see section 2.6 of the XML 1.0 
-  * specification ). The <code>nodeName</code> attribute inherited from 
-  * <code>Node</code> is set to the declared name of the notation.
-  * <p>The DOM Level 1 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/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 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>.
-      */
-     public String getSystemId();
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/ProcessingInstruction.java gcc-4.0.0/libjava/org/w3c/dom/ProcessingInstruction.java
*** gcc-3.4.3/libjava/org/w3c/dom/ProcessingInstruction.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/ProcessingInstruction.java	Thu Jan  1 00:00:00 1970
***************
*** 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;
- 
- /**
-  * 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>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 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>.
-      * @exception DOMException
-      *   NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
-      */
-     public String getData();
-     public void setData(String data)
-                           throws DOMException;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/Text.java gcc-4.0.0/libjava/org/w3c/dom/Text.java
*** gcc-3.4.3/libjava/org/w3c/dom/Text.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/Text.java	Thu Jan  1 00:00:00 1970
***************
*** 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;
- 
- /**
-  * The <code>Text</code> interface inherits from <code>CharacterData</code> 
-  * and represents the textual content (termed character data 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>normalize()</code> method on <code>Node</code> merges any such 
-  * adjacent <code>Text</code> objects into a single node for each block of 
-  * text.
-  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113'>Document Object Model (DOM) Level 2 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 offsetThe 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;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/ranges/DocumentRange.java gcc-4.0.0/libjava/org/w3c/dom/ranges/DocumentRange.java
*** gcc-3.4.3/libjava/org/w3c/dom/ranges/DocumentRange.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/ranges/DocumentRange.java	Thu Jan  1 00:00:00 1970
***************
*** 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();
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/ranges/Range.java gcc-4.0.0/libjava/org/w3c/dom/ranges/Range.java
*** gcc-3.4.3/libjava/org/w3c/dom/ranges/Range.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/ranges/Range.java	Thu Jan  1 00:00:00 1970
***************
*** 1,399 ****
- /*
-  * 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.DocumentFragment;
- import org.w3c.dom.DOMException;
- 
- /**
-  * <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 refNodeThe <code>refNode</code> value. This parameter must be 
-      *   different from <code>null</code>.
-      * @param offsetThe <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.
-      */
-     public void setStart(Node refNode, 
-                          int offset)
-                          throws RangeException, DOMException;
- 
-     /**
-      * Sets the attributes describing the end of a Range.
-      * @param refNodeThe <code>refNode</code> value. This parameter must be 
-      *   different from <code>null</code>.
-      * @param offsetThe <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.
-      */
-     public void setEnd(Node refNode, 
-                        int offset)
-                        throws RangeException, DOMException;
- 
-     /**
-      * Sets the start position to be before a node
-      * @param refNodeRange 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.
-      */
-     public void setStartBefore(Node refNode)
-                                throws RangeException, DOMException;
- 
-     /**
-      * Sets the start position to be after a node
-      * @param refNodeRange 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.
-      */
-     public void setStartAfter(Node refNode)
-                               throws RangeException, DOMException;
- 
-     /**
-      * Sets the end position to be before a node. 
-      * @param refNodeRange 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.
-      */
-     public void setEndBefore(Node refNode)
-                              throws RangeException, DOMException;
- 
-     /**
-      * Sets the end of a Range to be after a node 
-      * @param refNodeRange 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.
-      */
-     public void setEndAfter(Node refNode)
-                             throws RangeException, DOMException;
- 
-     /**
-      * Collapse a Range onto one of its boundary-points 
-      * @param toStartIf 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 refNodeThe 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.
-      */
-     public void selectNode(Node refNode)
-                            throws RangeException, DOMException;
- 
-     /**
-      * Select the contents within a node 
-      * @param refNodeNode 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.
-      */
-     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 howA code representing the type of comparison, as defined above.
-      * @param sourceRangeThe <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 newNodeThe 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 newParentThe 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;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/ranges/RangeException.java gcc-4.0.0/libjava/org/w3c/dom/ranges/RangeException.java
*** gcc-3.4.3/libjava/org/w3c/dom/ranges/RangeException.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/ranges/RangeException.java	Thu Jan  1 00:00:00 1970
***************
*** 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;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/traversal/DocumentTraversal.java gcc-4.0.0/libjava/org/w3c/dom/traversal/DocumentTraversal.java
*** gcc-3.4.3/libjava/org/w3c/dom/traversal/DocumentTraversal.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/traversal/DocumentTraversal.java	Thu Jan  1 00:00:00 1970
***************
*** 1,90 ****
- /*
-  * 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 iterators and 
-  * tree-walkers 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 rootThe node which will be iterated together with its children. 
-      *   The iterator 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 whatToShowThis flag specifies which node types may appear in 
-      *   the logical view of the tree presented by the iterator. 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 filterThe <code>NodeFilter</code> to be used with this 
-      *   <code>TreeWalker</code>, or <code>null</code> to indicate no filter.
-      * @param entityReferenceExpansionThe 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 rootThe 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 whatToShowThis flag specifies which node types may appear in 
-      *   the logical view of the tree presented by the tree-walker. See the 
-      *   description of <code>NodeFilter</code> for the set of possible 
-      *   SHOW_ values.These flags can be combined using <code>OR</code>.
-      * @param filterThe <code>NodeFilter</code> to be used with this 
-      *   <code>TreeWalker</code>, or <code>null</code> to indicate no filter.
-      * @param entityReferenceExpansionIf 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;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/traversal/NodeFilter.java gcc-4.0.0/libjava/org/w3c/dom/traversal/NodeFilter.java
*** gcc-3.4.3/libjava/org/w3c/dom/traversal/NodeFilter.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/traversal/NodeFilter.java	Thu Jan  1 00:00:00 1970
***************
*** 1,142 ****
- /*
-  * 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 
-      * iterator or tree-walker 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 iterator or tree-walker 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 iterator or tree-walker 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 nThe 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);
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/traversal/NodeIterator.java gcc-4.0.0/libjava/org/w3c/dom/traversal/NodeIterator.java
*** gcc-3.4.3/libjava/org/w3c/dom/traversal/NodeIterator.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/traversal/NodeIterator.java	Thu Jan  1 00:00:00 1970
***************
*** 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.traversal;
- 
- import org.w3c.dom.Node;
- import org.w3c.dom.DOMException;
- 
- /**
-  * <code>Iterators</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 iterators 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 
-      * iterator. 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 iterator. If false, they  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 
-      * iterator. 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 
-      * iterator 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 iterator 
-      * 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();
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/w3c/dom/traversal/TreeWalker.java gcc-4.0.0/libjava/org/w3c/dom/traversal/TreeWalker.java
*** gcc-3.4.3/libjava/org/w3c/dom/traversal/TreeWalker.java	Wed Jul 11 03:59:15 2001
--- gcc-4.0.0/libjava/org/w3c/dom/traversal/TreeWalker.java	Thu Jan  1 00:00:00 1970
***************
*** 1,167 ****
- /*
-  * 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, 
-      * they  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. 
-      * @exception DOMException
-      *   NOT_SUPPORTED_ERR: Raised if an attempt is made to set 
-      *   <code>currentNode</code> to <code>null</code>.
-      */
-     public Node getCurrentNode();
-     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();
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/AttributeList.java gcc-4.0.0/libjava/org/xml/sax/AttributeList.java
*** gcc-3.4.3/libjava/org/xml/sax/AttributeList.java	Fri Dec 20 03:49:18 2002
--- gcc-4.0.0/libjava/org/xml/sax/AttributeList.java	Thu Jan  1 00:00:00 1970
***************
*** 1,193 ****
- // SAX Attribute List Interface.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: AttributeList.java,v 1.3.2.3 2002/01/29 21:34:14 dbrownell 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 i The index of the attribute in the list.
-      * @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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/Attributes.java gcc-4.0.0/libjava/org/xml/sax/Attributes.java
*** gcc-3.4.3/libjava/org/xml/sax/Attributes.java	Fri Dec 20 03:49:18 2002
--- gcc-4.0.0/libjava/org/xml/sax/Attributes.java	Thu Jan  1 00:00:00 1970
***************
*** 1,252 ****
- // 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.5.2.4 2002/01/29 21:34:14 dbrownell 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 "Namespaces in XML" specification,
-  * it does not give namespace declaration attributes a namespace URI.
-  * Some other W3C specifications are in conflict with that, expecting
-  * these declarations to be in a namespace.
-  * Handler code may need to resolve that conflict.
-  * </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 1.0 qualified name by index.
-      *
-      * @param index The attribute index (zero-based).
-      * @return The XML 1.0 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 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 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 1.0 qualified 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 1.0 qualified name.
-      *
-      * <p>See {@link #getType(int) getType(int)} for a description
-      * of the possible types.</p>
-      *
-      * @param qName The XML 1.0 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 1.0 qualified name.
-      *
-      * <p>See {@link #getValue(int) getValue(int)} for a description
-      * of the possible values.</p>
-      *
-      * @param qName The XML 1.0 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/ContentHandler.java gcc-4.0.0/libjava/org/xml/sax/ContentHandler.java
*** gcc-3.4.3/libjava/org/xml/sax/ContentHandler.java	Fri Dec 20 03:49:18 2002
--- gcc-4.0.0/libjava/org/xml/sax/ContentHandler.java	Thu Jan  1 00:00:00 1970
***************
*** 1,408 ****
- // 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.4.2.9 2002/01/29 21:34:14 dbrownell 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 Java class
-  * {@link java.net.ContentHandler ContentHandler} in the java.net
-  * package; that means that it's probably a bad idea to do</p>
-  *
-  * <blockquote>
-  * import java.net.*;
-  * import org.xml.sax.*;
-  * </blockquote>
-  *
-  * <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 (sax2r2)
-  * @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 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 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>
-      *
-      * @exception 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>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.
-      * @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.
-      * @exception 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 mapping.
-      *	This is the empty string when a default mapping scope ends.
-      * @exception 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.
-      * @exception org.xml.sax.SAXException Any SAX exception, possibly
-      *            wrapping another exception.
-      * @see #endElement
-      * @see org.xml.sax.Attributes
-      */
-     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 1.0 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.
-      */
-     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.
-      * @exception 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.
-      * @exception 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.
-      * @exception 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]".
-      * @exception org.xml.sax.SAXException Any SAX exception, possibly
-      *            wrapping another exception.
-      */
-     public void skippedEntity (String name)
- 	throws SAXException;
- }
- 
- // end of ContentHandler.java
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/DTDHandler.java gcc-4.0.0/libjava/org/xml/sax/DTDHandler.java
*** gcc-3.4.3/libjava/org/xml/sax/DTDHandler.java	Fri Dec 20 03:49:18 2002
--- gcc-4.0.0/libjava/org/xml/sax/DTDHandler.java	Thu Jan  1 00:00:00 1970
***************
*** 1,117 ****
- // SAX DTD handler.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: DTDHandler.java,v 1.5.2.4 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/DocumentHandler.java gcc-4.0.0/libjava/org/xml/sax/DocumentHandler.java
*** gcc-3.4.3/libjava/org/xml/sax/DocumentHandler.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/DocumentHandler.java	Thu Jan  1 00:00:00 1970
***************
*** 1,232 ****
- // SAX document handler.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: DocumentHandler.java,v 1.3.2.3 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/EntityResolver.java gcc-4.0.0/libjava/org/xml/sax/EntityResolver.java
*** gcc-3.4.3/libjava/org/xml/sax/EntityResolver.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/EntityResolver.java	Thu Jan  1 00:00:00 1970
***************
*** 1,119 ****
- // SAX entity resolver.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: EntityResolver.java,v 1.7.2.3 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/ErrorHandler.java gcc-4.0.0/libjava/org/xml/sax/ErrorHandler.java
*** gcc-3.4.3/libjava/org/xml/sax/ErrorHandler.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/ErrorHandler.java	Thu Jan  1 00:00:00 1970
***************
*** 1,125 ****
- // SAX error handler.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: ErrorHandler.java,v 1.4.2.3 2002/01/29 21:34:14 dbrownell 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
-  * and bizarre behaviour may result.</p>
-  *
-  * <p>For XML processing errors, a SAX driver must use this interface 
-  * instead of 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 provide useful information after a call to 
-  * {@link #fatalError fatalError} (in other words, a SAX driver class 
-  * could catch an exception and report a fatalError).</p>
-  *
-  * @since SAX 1.0
-  * @author David Megginson
-  * @version 2.0.1 (sax2r2)
-  * @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 1.0
-      * 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 1.0 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>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 addition 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/HandlerBase.java gcc-4.0.0/libjava/org/xml/sax/HandlerBase.java
*** gcc-3.4.3/libjava/org/xml/sax/HandlerBase.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/HandlerBase.java	Thu Jan  1 00:00:00 1970
***************
*** 1,370 ****
- // SAX default handler base class.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: HandlerBase.java,v 1.3.2.3 2002/01/29 21:34:14 dbrownell 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 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#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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/InputSource.java gcc-4.0.0/libjava/org/xml/sax/InputSource.java
*** gcc-3.4.3/libjava/org/xml/sax/InputSource.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/InputSource.java	Thu Jan  1 00:00:00 1970
***************
*** 1,336 ****
- // SAX input source.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: InputSource.java,v 1.5.2.4 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/Locator.java gcc-4.0.0/libjava/org/xml/sax/Locator.java
*** gcc-3.4.3/libjava/org/xml/sax/Locator.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/Locator.java	Thu Jan  1 00:00:00 1970
***************
*** 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.4.2.5 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/Parser.java gcc-4.0.0/libjava/org/xml/sax/Parser.java
*** gcc-3.4.3/libjava/org/xml/sax/Parser.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/Parser.java	Thu Jan  1 00:00:00 1970
***************
*** 1,209 ****
- // SAX parser interface.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: Parser.java,v 1.3.2.3 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/SAXException.java gcc-4.0.0/libjava/org/xml/sax/SAXException.java
*** gcc-3.4.3/libjava/org/xml/sax/SAXException.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/SAXException.java	Thu Jan  1 00:00:00 1970
***************
*** 1,153 ****
- // SAX exception class.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: SAXException.java,v 1.4.2.4 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/SAXNotRecognizedException.java gcc-4.0.0/libjava/org/xml/sax/SAXNotRecognizedException.java
*** gcc-3.4.3/libjava/org/xml/sax/SAXNotRecognizedException.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/SAXNotRecognizedException.java	Thu Jan  1 00:00:00 1970
***************
*** 1,55 ****
- // 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.4.2.3 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/SAXNotSupportedException.java gcc-4.0.0/libjava/org/xml/sax/SAXNotSupportedException.java
*** gcc-3.4.3/libjava/org/xml/sax/SAXNotSupportedException.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/SAXNotSupportedException.java	Thu Jan  1 00:00:00 1970
***************
*** 1,55 ****
- // 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.4.2.3 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/SAXParseException.java gcc-4.0.0/libjava/org/xml/sax/SAXParseException.java
*** gcc-3.4.3/libjava/org/xml/sax/SAXParseException.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/SAXParseException.java	Thu Jan  1 00:00:00 1970
***************
*** 1,270 ****
- // SAX exception class.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: SAXParseException.java,v 1.3.2.5 2002/01/29 21:34:14 dbrownell 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 identifer of the entity that generated
-      *                 the error or warning.
-      * @param systemId The system identifer 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 identifer of the entity that generated
-      *                 the error or warning.
-      * @param systemId The system identifer 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/XMLFilter.java gcc-4.0.0/libjava/org/xml/sax/XMLFilter.java
*** gcc-3.4.3/libjava/org/xml/sax/XMLFilter.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/XMLFilter.java	Thu Jan  1 00:00:00 1970
***************
*** 1,67 ****
- // 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.3.2.3 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/XMLReader.java gcc-4.0.0/libjava/org/xml/sax/XMLReader.java
*** gcc-3.4.3/libjava/org/xml/sax/XMLReader.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/XMLReader.java	Thu Jan  1 00:00:00 1970
***************
*** 1,398 ****
- // 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.3.2.5 2002/01/29 21:34:14 dbrownell 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 (sax2r2)
-  * @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.</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 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 #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;
- 
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/ext/DeclHandler.java gcc-4.0.0/libjava/org/xml/sax/ext/DeclHandler.java
*** gcc-3.4.3/libjava/org/xml/sax/ext/DeclHandler.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/ext/DeclHandler.java	Thu Jan  1 00:00:00 1970
***************
*** 1,143 ****
- // DeclHandler.java - Optional handler for DTD declaration events.
- // http://www.saxproject.org
- // Public Domain: no warranty.
- // $Id: DeclHandler.java,v 1.2.2.5 2002/01/29 21:34:14 dbrownell 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>
-      *
-      * @param name The name of the entity.  If it is a parameter
-      *        entity, the name will begin with '%'.
-      * @param publicId The declared public identifier of the entity, or
-      *        null if none was declared.
-      * @param systemId The declared system identifier of the entity.
-      * @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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/ext/LexicalHandler.java gcc-4.0.0/libjava/org/xml/sax/ext/LexicalHandler.java
*** gcc-3.4.3/libjava/org/xml/sax/ext/LexicalHandler.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/ext/LexicalHandler.java	Thu Jan  1 00:00:00 1970
***************
*** 1,212 ****
- // LexicalHandler.java - optional handler for lexical parse events.
- // http://www.saxproject.org
- // Public Domain: no warranty.
- // $Id: LexicalHandler.java,v 1.2.2.4 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/ext/package.html gcc-4.0.0/libjava/org/xml/sax/ext/package.html
*** gcc-3.4.3/libjava/org/xml/sax/ext/package.html	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/ext/package.html	Thu Jan  1 00:00:00 1970
***************
*** 1,49 ****
- <HTML><HEAD>
- 
- </HEAD><BODY>
- 
- <p>
- This package contains interfaces to optional SAX2 handlers.
- 
- <p>See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
- for more information about SAX.</p>
- 
- <p>
- The package is independent of the SAX2 core, though the functionality
- exposed generally needs to be implemented within a parser.
- That independence has several consequences:</p>
- 
- <ul>
- 
- <li>SAX2 drivers are <em>not</em> required to recognize these handlers,
- and 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 may be added without updating SAX2 itself).</li>
- 
- <li>The 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 behaviour.</li>
- 
- <li>The handlers need to be registered differently than regular 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 schema systems can be cleanly layered on top
- of parsers supporting the standardized SAX2 interfaces.  </p>
- 
- <p><strong>NOTE:</strong> this package alone does add any
- functionality; it simply provides optional interfaces for SAX2 drivers
- to use.  You must use a SAX2 driver that recognizes these interfaces if
- you actually want to have access to lexical and declaration
- information.</p>
- 
- </BODY></HTML>
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/AttributeListImpl.java gcc-4.0.0/libjava/org/xml/sax/helpers/AttributeListImpl.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/AttributeListImpl.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/AttributeListImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 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.3.2.3 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/AttributesImpl.java gcc-4.0.0/libjava/org/xml/sax/helpers/AttributesImpl.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/AttributesImpl.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/AttributesImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 1,620 ****
- // 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.6.2.3 2002/01/29 21:34:14 dbrownell 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
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/DefaultHandler.java gcc-4.0.0/libjava/org/xml/sax/helpers/DefaultHandler.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/DefaultHandler.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/DefaultHandler.java	Thu Jan  1 00:00:00 1970
***************
*** 1,468 ****
- // 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.5.2.3 2002/01/29 21:34:14 dbrownell 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 atts 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/LocatorImpl.java gcc-4.0.0/libjava/org/xml/sax/helpers/LocatorImpl.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/LocatorImpl.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/LocatorImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 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.3.2.3 2002/01/29 21:34:14 dbrownell 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/NamespaceSupport.java gcc-4.0.0/libjava/org/xml/sax/helpers/NamespaceSupport.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/NamespaceSupport.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/NamespaceSupport.java	Thu Jan  1 00:00:00 1970
***************
*** 1,770 ****
- // 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.6.2.5 2002/01/29 21:34:14 dbrownell 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 1.0 names into their
-  * Namespace parts; it can also be used in reverse for generating
-  * XML 1.0 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 XML Namespaces specification.
-      *
-      * <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";
- 
- 
-     /**
-      * 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.</p>
-      */
-     public void reset ()
-     {
- 	contexts = new Context[32];
- 	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
-      * @exception IllegalStateException when a prefix is declared
-      *	after looking up a name in the context, or after pushing
-      *	another context on top of it.
-      *
-      * @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 1.0 name, after all declarations in the current
-      * context have been handled by {@link #declarePrefix declarePrefix()}.
-      *
-      * <p>This method processes a raw XML 1.0 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 received the
-      * default Namespace (if any), while an unprefixed attribute name
-      * will not.</p>
-      *
-      * @param qName The raw XML 1.0 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 raw XML 1.0 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 currently declared.
-      *
-      * <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 all prefixes declared in the
-      *         current context except for the empty (default)
-      *         prefix.
-      * @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.
-      * @param isAttribute true if this prefix is for an attribute
-      *        (and the default Namespace is not allowed).
-      * @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 currently declared for a URI.
-      *
-      * <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 all prefixes declared in the
-      *         current context.
-      * @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();
-     }
- 
- 
- 
-     ////////////////////////////////////////////////////////////////////
-     // Internal state.
-     ////////////////////////////////////////////////////////////////////
- 
-     private Context contexts[];
-     private Context currentContext;
-     private int contextPos;
- 
- 
- 
-     ////////////////////////////////////////////////////////////////////
-     // 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 a raw XML 1.0 name in this context.
- 	 *
- 	 * @param qName The raw XML 1.0 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 || 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) {
- 		    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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/NewInstance.java gcc-4.0.0/libjava/org/xml/sax/helpers/NewInstance.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/NewInstance.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/NewInstance.java	Thu Jan  1 00:00:00 1970
***************
*** 1,80 ****
- // 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.1.2.4 2002/01/29 21:34:14 dbrownell 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());
-         }
-     }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/ParserAdapter.java gcc-4.0.0/libjava/org/xml/sax/helpers/ParserAdapter.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/ParserAdapter.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/ParserAdapter.java	Thu Jan  1 00:00:00 1970
***************
*** 1,1026 ****
- // 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.8.2.4 2002/01/29 21:34:14 dbrownell 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";
- 
- 
-     /**
-      * 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 {
- 	    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 {
- 	    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 resolver 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 resolver 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 resolver 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 1.0 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(n+1);
- 		}
- 				// Yes, decl:  report or prune
- 		if (prefix != null) {
- 		    if (prefixes)
- 			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 ()
-     {
- 	nsSupport.reset();
- 
- 	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;
- 
- 				// 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/ParserFactory.java gcc-4.0.0/libjava/org/xml/sax/helpers/ParserFactory.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/ParserFactory.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/ParserFactory.java	Thu Jan  1 00:00:00 1970
***************
*** 1,129 ****
- // SAX parser factory.
- // http://www.saxproject.org
- // No warranty; no copyright -- use this as you will.
- // $Id: ParserFactory.java,v 1.4.2.3 2002/01/29 21:34:14 dbrownell 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);
-     }
-     
- }
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/XMLFilterImpl.java gcc-4.0.0/libjava/org/xml/sax/helpers/XMLFilterImpl.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/XMLFilterImpl.java	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/XMLFilterImpl.java	Thu Jan  1 00:00:00 1970
***************
*** 1,714 ****
- // 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.3.2.7 2002/01/29 21:34:14 dbrownell 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 resolver 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 resolver 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 handle 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/XMLReaderAdapter.java gcc-4.0.0/libjava/org/xml/sax/helpers/XMLReaderAdapter.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/XMLReaderAdapter.java	Fri Dec 20 03:49:20 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/XMLReaderAdapter.java	Thu Jan  1 00:00:00 1970
***************
*** 1,539 ****
- // 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.5.2.3 2002/01/29 21:34:15 dbrownell 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 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
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/XMLReaderFactory.java gcc-4.0.0/libjava/org/xml/sax/helpers/XMLReaderFactory.java
*** gcc-3.4.3/libjava/org/xml/sax/helpers/XMLReaderFactory.java	Fri Dec 20 03:49:20 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/XMLReaderFactory.java	Thu Jan  1 00:00:00 1970
***************
*** 1,203 ****
- // 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.5.2.4 2002/01/29 21:34:15 dbrownell 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 (Exception 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);
- 	}
-     }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/helpers/package.html gcc-4.0.0/libjava/org/xml/sax/helpers/package.html
*** gcc-3.4.3/libjava/org/xml/sax/helpers/package.html	Fri Dec 20 03:49:20 2002
--- gcc-4.0.0/libjava/org/xml/sax/helpers/package.html	Thu Jan  1 00:00:00 1970
***************
*** 1,13 ****
- <HTML><HEAD>
- 
- <!-- $Id: package.html,v 1.3.2.1 2001/11/09 20:32:58 dbrownell 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>
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/org/xml/sax/package.html gcc-4.0.0/libjava/org/xml/sax/package.html
*** gcc-3.4.3/libjava/org/xml/sax/package.html	Fri Dec 20 03:49:19 2002
--- gcc-4.0.0/libjava/org/xml/sax/package.html	Thu Jan  1 00:00:00 1970
***************
*** 1,164 ****
- <html><head>
- 
- <!-- $Id: package.html,v 1.2.2.2 2002/01/12 21:42:21 dbrownell 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 maintainance 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>Default</th>
- 	<th>Description</th>
- 	</tr>
- 
-     <tr>
- 	<td>external-general-entities</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>unspecified</em></td>
- 	<td> Reports whether this parser processes external
- 	    parameter entities; always true if validating</td>
- 	</tr>
- 
-     <tr>
- 	<td>lexical-handler/parameter-entities</td>
- 	<td><em>unspecified</em></td>
- 	<td> true indicates that the LexicalHandler will report the
- 	    beginning and end of parameter entities
- 	    </td>
- 	</tr>
- 
-     <tr>
- 	<td>namespaces</td>
- 	<td>true</td>
- 	<td> true indicates namespace URIs and unprefixed local names
- 	    for element and attribute names will be available </td>
- 	</tr>
- 
-     <tr>
- 	<td>namespace-prefixes</td>
- 	<td>false</td>
- 	<td> true indicates XML 1.0 names (with prefixes) and attributes
- 	    (including <em>xmlns*</em> attributes) will be available </td>
- 	</tr>
- 
-     <tr>
- 	<td>string-interning</td>
- 	<td><em>unspecified</em></td>
- 	<td> 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.</td>
- 	</tr>
- 
-     <tr>
- 	<td>validation</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>
- 
- </table>
- 
- <p> Support for the default values of the
- <em>namespaces</em> and <em>namespace-prefixes</em>
- properties is required.
- </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>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 delimeters, 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>
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/pkg.m4 gcc-4.0.0/libjava/pkg.m4
*** gcc-3.4.3/libjava/pkg.m4	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/pkg.m4	Fri Jan 30 22:01:11 2004
***************
*** 0 ****
--- 1,57 ----
+ 
+ dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
+ dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
+ dnl also defines GSTUFF_PKG_ERRORS on error
+ AC_DEFUN([PKG_CHECK_MODULES], [
+   succeeded=no
+ 
+   if test -z "$PKG_CONFIG"; then
+     AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+   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
+         AC_MSG_CHECKING(for $2)
+ 
+         if $PKG_CONFIG --exists "$2" ; then
+             AC_MSG_RESULT(yes)
+             succeeded=yes
+ 
+             AC_MSG_CHECKING($1_CFLAGS)
+             $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
+             AC_MSG_RESULT($$1_CFLAGS)
+ 
+             AC_MSG_CHECKING($1_LIBS)
+             $1_LIBS=`$PKG_CONFIG --libs "$2"`
+             AC_MSG_RESULT($$1_LIBS)
+         else
+             $1_CFLAGS=""
+             $1_LIBS=""
+             ## If we have a custom action on failure, don't print errors, but 
+             ## do set a variable so people can do so.
+             $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+             ifelse([$4], ,echo $$1_PKG_ERRORS,)
+         fi
+ 
+         AC_SUBST($1_CFLAGS)
+         AC_SUBST($1_LIBS)
+      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
+      ifelse([$3], , :, [$3])
+   else
+      ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
+   fi
+ ])
+ 
+ 
diff -Nrcpad gcc-3.4.3/libjava/posix-threads.cc gcc-4.0.0/libjava/posix-threads.cc
*** gcc-3.4.3/libjava/posix-threads.cc	Tue Oct 21 04:46:19 2003
--- gcc-4.0.0/libjava/posix-threads.cc	Wed Feb 16 04:16:06 2005
***************
*** 1,6 ****
  // posix-threads.cc - interface between libjava and POSIX threads.
  
! /* Copyright (C) 1998, 1999, 2000, 2001  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // posix-threads.cc - interface between libjava and POSIX threads.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 34,39 ****
--- 34,40 ----
  #include <java/lang/System.h>
  #include <java/lang/Long.h>
  #include <java/lang/OutOfMemoryError.h>
+ #include <java/lang/InternalError.h>
  
  // This is used to implement thread startup.
  struct starter
*************** handle_intr (int)
*** 280,285 ****
--- 281,297 ----
    // Do nothing.
  }
  
+ static void
+ block_sigchld()
+ {
+   sigset_t mask;
+   sigemptyset (&mask);
+   sigaddset (&mask, SIGCHLD);
+   int c = pthread_sigmask (SIG_BLOCK, &mask, NULL);
+   if (c != 0)
+     JvFail (strerror (c));
+ }
+ 
  void
  _Jv_InitThreads (void)
  {
*************** _Jv_InitThreads (void)
*** 295,300 ****
--- 307,316 ----
    sigemptyset (&act.sa_mask);
    act.sa_flags = 0;
    sigaction (INTR, &act, NULL);
+ 
+   // Block SIGCHLD here to ensure that any non-Java threads inherit the new 
+   // signal mask.
+   block_sigchld();
  }
  
  _Jv_Thread_t *
*************** _Jv_ThreadRegister (_Jv_Thread_t *data)
*** 358,363 ****
--- 374,381 ----
  	_Jv_self_cache[current_index].high_sp_bits = BAD_HIGH_SP_VALUE;
        }
  # endif
+   // Block SIGCHLD which is used in natPosixProcess.cc.
+   block_sigchld();
  }
  
  void
*************** _Jv_ThreadStart (java::lang::Thread *thr
*** 403,408 ****
--- 421,430 ----
      return;
    data->flags |= FLAG_START;
  
+   // Block SIGCHLD which is used in natPosixProcess.cc.
+   // The current mask is inherited by the child thread.
+   block_sigchld();
+ 
    param.sched_priority = thread->getPriority();
  
    pthread_attr_init (&attr);
diff -Nrcpad gcc-3.4.3/libjava/prims.cc gcc-4.0.0/libjava/prims.cc
*** gcc-3.4.3/libjava/prims.cc	Wed Jul 14 00:24:05 2004
--- gcc-4.0.0/libjava/prims.cc	Wed Apr 13 16:32:25 2005
***************
*** 1,6 ****
  // prims.cc - Code for core of runtime environment.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // prims.cc - Code for core of runtime environment.
  
! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 59,72 ****
  #include <java/io/PrintStream.h>
  #include <java/lang/UnsatisfiedLinkError.h>
  #include <java/lang/VirtualMachineError.h>
! #include <gnu/gcj/runtime/VMClassLoader.h>
  #include <gnu/gcj/runtime/FinalizerThread.h>
! #include <gnu/gcj/runtime/FirstThread.h>
  
  #ifdef USE_LTDL
  #include <ltdl.h>
  #endif
  
  // We allocate a single OutOfMemoryError exception which we keep
  // around for use if we run out of memory.
  static java::lang::OutOfMemoryError *no_memory;
--- 59,77 ----
  #include <java/io/PrintStream.h>
  #include <java/lang/UnsatisfiedLinkError.h>
  #include <java/lang/VirtualMachineError.h>
! #include <gnu/gcj/runtime/ExtensionClassLoader.h>
  #include <gnu/gcj/runtime/FinalizerThread.h>
! #include <execution.h>
! #include <gnu/java/lang/MainThread.h>
! #include <java/lang/VMClassLoader.h>
  
  #ifdef USE_LTDL
  #include <ltdl.h>
  #endif
  
+ // Execution engine for compiled code.
+ _Jv_CompiledEngine _Jv_soleCompiledEngine;
+ 
  // We allocate a single OutOfMemoryError exception which we keep
  // around for use if we run out of memory.
  static java::lang::OutOfMemoryError *no_memory;
*************** static java::lang::OutOfMemoryError *no_
*** 76,88 ****
  // functions are changed to take a size_t argument instead of jint.
  #define MAX_OBJECT_SIZE ((1<<31) - 1)
  
- static const char *no_properties[] = { NULL };
- 
  // Properties set at compile time.
! const char **_Jv_Compiler_Properties = no_properties;
! 
! // The JAR file to add to the beginning of java.class.path.
! const char *_Jv_Jar_Class_Path;
  
  #ifndef DISABLE_GETENV_PROPERTIES
  // Property key/value pairs.
--- 81,89 ----
  // functions are changed to take a size_t argument instead of jint.
  #define MAX_OBJECT_SIZE ((1<<31) - 1)
  
  // Properties set at compile time.
! const char **_Jv_Compiler_Properties = NULL;
! int _Jv_Properties_Count = 0;
  
  #ifndef DISABLE_GETENV_PROPERTIES
  // Property key/value pairs.
*************** void (*_Jv_JVMPI_Notify_THREAD_END) (JVM
*** 125,134 ****
  #endif
  
  
  /* Unblock a signal.  Unless we do this, the signal may only be sent
     once.  */
  static void 
! unblock_signal (int signum)
  {
  #ifdef _POSIX_VERSION
    sigset_t sigs;
--- 126,136 ----
  #endif
  
  
+ #if defined (HANDLE_SEGV) || defined(HANDLE_FPE)
  /* Unblock a signal.  Unless we do this, the signal may only be sent
     once.  */
  static void 
! unblock_signal (int signum __attribute__ ((__unused__)))
  {
  #ifdef _POSIX_VERSION
    sigset_t sigs;
*************** unblock_signal (int signum)
*** 138,143 ****
--- 140,146 ----
    sigprocmask (SIG_UNBLOCK, &sigs, NULL);
  #endif
  }
+ #endif
  
  #ifdef HANDLE_SEGV
  SIGNAL_HANDLER (catch_segv)
*************** _Jv_strLengthUtf8(char* str, int len)
*** 255,262 ****
  /* Calculate a hash value for a string encoded in Utf8 format.
   * This returns the same hash value as specified or java.lang.String.hashCode.
   */
! static jint
! hashUtf8String (char* str, int len)
  {
    unsigned char* ptr = (unsigned char*) str;
    unsigned char* limit = ptr + len;
--- 258,265 ----
  /* Calculate a hash value for a string encoded in Utf8 format.
   * This returns the same hash value as specified or java.lang.String.hashCode.
   */
! jint
! _Jv_hashUtf8String (char* str, int len)
  {
    unsigned char* ptr = (unsigned char*) str;
    unsigned char* limit = ptr + len;
*************** hashUtf8String (char* str, int len)
*** 272,288 ****
    return hash;
  }
  
  _Jv_Utf8Const *
  _Jv_makeUtf8Const (char* s, int len)
  {
    if (len < 0)
      len = strlen (s);
!   Utf8Const* m = (Utf8Const*) _Jv_AllocBytes (sizeof(Utf8Const) + len + 1);
!   memcpy (m->data, s, len);
!   m->data[len] = 0;
!   m->length = len;
!   m->hash = hashUtf8String (s, len) & 0xFFFF;
!   return (m);
  }
  
  _Jv_Utf8Const *
--- 275,298 ----
    return hash;
  }
  
+ void
+ _Jv_Utf8Const::init(char *s, int len)
+ {
+   ::memcpy (data, s, len);
+   data[len] = 0;
+   length = len;
+   hash = _Jv_hashUtf8String (s, len) & 0xFFFF;
+ }
+ 
  _Jv_Utf8Const *
  _Jv_makeUtf8Const (char* s, int len)
  {
    if (len < 0)
      len = strlen (s);
!   Utf8Const* m
!     = (Utf8Const*) _Jv_AllocBytes (_Jv_Utf8Const::space_needed(s, len));
!   m->init(s, len);
!   return m;
  }
  
  _Jv_Utf8Const *
*************** void _Jv_ThrowNoMemory()
*** 357,426 ****
  }
  
  #ifdef ENABLE_JVMPI
  static void
  jvmpi_notify_alloc(jclass klass, jint size, jobject obj)
  {
    // Service JVMPI allocation request.
!   if (__builtin_expect (_Jv_JVMPI_Notify_OBJECT_ALLOC != 0, false))
!     {
!       JVMPI_Event event;
  
!       event.event_type = JVMPI_EVENT_OBJECT_ALLOC;
!       event.env_id = NULL;
!       event.u.obj_alloc.arena_id = 0;
!       event.u.obj_alloc.class_id = (jobjectID) klass;
!       event.u.obj_alloc.is_array = 0;
!       event.u.obj_alloc.size = size;
!       event.u.obj_alloc.obj_id = (jobjectID) obj;
  
!       // FIXME:  This doesn't look right for the Boehm GC.  A GC may
!       // already be in progress.  _Jv_DisableGC () doesn't wait for it.
!       // More importantly, I don't see the need for disabling GC, since we
!       // blatantly have a pointer to obj on our stack, ensuring that the
!       // object can't be collected.  Even for a nonconservative collector,
!       // it appears to me that this must be true, since we are about to
!       // return obj. Isn't this whole approach way too intrusive for
!       // a useful profiling interface?			- HB
!       _Jv_DisableGC ();
!       (*_Jv_JVMPI_Notify_OBJECT_ALLOC) (&event);
!       _Jv_EnableGC ();
!     }
  }
  #else /* !ENABLE_JVMPI */
! # define jvmpi_notify_alloc(klass,size,obj) /* do nothing */
  #endif
  
! // Allocate a new object of class KLASS.  SIZE is the size of the object
! // to allocate.  You might think this is redundant, but it isn't; some
! // classes, such as String, aren't of fixed size.
  // First a version that assumes that we have no finalizer, and that
  // the class is already initialized.
  // If we know that JVMPI is disabled, this can be replaced by a direct call
  // to the allocator for the appropriate GC.
  jobject
! _Jv_AllocObjectNoInitNoFinalizer (jclass klass, jint size)
  {
    jobject obj = (jobject) _Jv_AllocObj (size, klass);
!   jvmpi_notify_alloc (klass, size, obj);
    return obj;
  }
  
  // And now a version that initializes if necessary.
  jobject
! _Jv_AllocObjectNoFinalizer (jclass klass, jint size)
  {
    _Jv_InitClass (klass);
    jobject obj = (jobject) _Jv_AllocObj (size, klass);
!   jvmpi_notify_alloc (klass, size, obj);
    return obj;
  }
  
  // And now the general version that registers a finalizer if necessary.
  jobject
! _Jv_AllocObject (jclass klass, jint size)
  {
!   jobject obj = _Jv_AllocObjectNoFinalizer (klass, size);
! 
    // We assume that the compiler only generates calls to this routine
    // if there really is an interesting finalizer.
    // Unfortunately, we still have to the dynamic test, since there may
--- 367,436 ----
  }
  
  #ifdef ENABLE_JVMPI
+ # define JVMPI_NOTIFY_ALLOC(klass,size,obj) \
+     if (__builtin_expect (_Jv_JVMPI_Notify_OBJECT_ALLOC != 0, false)) \
+       jvmpi_notify_alloc(klass,size,obj);
  static void
  jvmpi_notify_alloc(jclass klass, jint size, jobject obj)
  {
    // Service JVMPI allocation request.
!   JVMPI_Event event;
  
!   event.event_type = JVMPI_EVENT_OBJECT_ALLOC;
!   event.env_id = NULL;
!   event.u.obj_alloc.arena_id = 0;
!   event.u.obj_alloc.class_id = (jobjectID) klass;
!   event.u.obj_alloc.is_array = 0;
!   event.u.obj_alloc.size = size;
!   event.u.obj_alloc.obj_id = (jobjectID) obj;
  
!   // FIXME:  This doesn't look right for the Boehm GC.  A GC may
!   // already be in progress.  _Jv_DisableGC () doesn't wait for it.
!   // More importantly, I don't see the need for disabling GC, since we
!   // blatantly have a pointer to obj on our stack, ensuring that the
!   // object can't be collected.  Even for a nonconservative collector,
!   // it appears to me that this must be true, since we are about to
!   // return obj. Isn't this whole approach way too intrusive for
!   // a useful profiling interface?			- HB
!   _Jv_DisableGC ();
!   (*_Jv_JVMPI_Notify_OBJECT_ALLOC) (&event);
!   _Jv_EnableGC ();
  }
  #else /* !ENABLE_JVMPI */
! # define JVMPI_NOTIFY_ALLOC(klass,size,obj) /* do nothing */
  #endif
  
! // Allocate a new object of class KLASS.
  // First a version that assumes that we have no finalizer, and that
  // the class is already initialized.
  // If we know that JVMPI is disabled, this can be replaced by a direct call
  // to the allocator for the appropriate GC.
  jobject
! _Jv_AllocObjectNoInitNoFinalizer (jclass klass)
  {
+   jint size = klass->size ();
    jobject obj = (jobject) _Jv_AllocObj (size, klass);
!   JVMPI_NOTIFY_ALLOC (klass, size, obj);
    return obj;
  }
  
  // And now a version that initializes if necessary.
  jobject
! _Jv_AllocObjectNoFinalizer (jclass klass)
  {
    _Jv_InitClass (klass);
+   jint size = klass->size ();
    jobject obj = (jobject) _Jv_AllocObj (size, klass);
!   JVMPI_NOTIFY_ALLOC (klass, size, obj);
    return obj;
  }
  
  // And now the general version that registers a finalizer if necessary.
  jobject
! _Jv_AllocObject (jclass klass)
  {
!   jobject obj = _Jv_AllocObjectNoFinalizer (klass);
!   
    // We assume that the compiler only generates calls to this routine
    // if there really is an interesting finalizer.
    // Unfortunately, we still have to the dynamic test, since there may
*************** _Jv_AllocObject (jclass klass, jint size
*** 433,469 ****
    return obj;
  }
  
  // A version of the above that assumes the object contains no pointers,
  // and requires no finalization.  This can't happen if we need pointers
  // to locks.
  #ifdef JV_HASH_SYNCHRONIZATION
  jobject
! _Jv_AllocPtrFreeObject (jclass klass, jint size)
  {
    _Jv_InitClass (klass);
  
    jobject obj = (jobject) _Jv_AllocPtrFreeObj (size, klass);
  
! #ifdef ENABLE_JVMPI
!   // Service JVMPI request.
! 
!   if (__builtin_expect (_Jv_JVMPI_Notify_OBJECT_ALLOC != 0, false))
!     {
!       JVMPI_Event event;
! 
!       event.event_type = JVMPI_EVENT_OBJECT_ALLOC;
!       event.env_id = NULL;
!       event.u.obj_alloc.arena_id = 0;
!       event.u.obj_alloc.class_id = (jobjectID) klass;
!       event.u.obj_alloc.is_array = 0;
!       event.u.obj_alloc.size = size;
!       event.u.obj_alloc.obj_id = (jobjectID) obj;
! 
!       _Jv_DisableGC ();
!       (*_Jv_JVMPI_Notify_OBJECT_ALLOC) (&event);
!       _Jv_EnableGC ();
!     }
! #endif
  
    return obj;
  }
--- 443,489 ----
    return obj;
  }
  
+ // Allocate a String, including variable length storage.
+ jstring
+ _Jv_AllocString(jsize len)
+ {
+   using namespace java::lang;
+ 
+   jsize sz = sizeof(java::lang::String) + len * sizeof(jchar);
+ 
+   // We assert that for strings allocated this way, the data field
+   // will always point to the object itself.  Thus there is no reason
+   // for the garbage collector to scan any of it.
+   // Furthermore, we're about to overwrite the string data, so
+   // initialization of the object is not an issue.
+ 
+   // String needs no initialization, and there is no finalizer, so
+   // we can go directly to the collector's allocator interface.
+   jstring obj = (jstring) _Jv_AllocPtrFreeObj(sz, &String::class$);
+ 
+   obj->data = obj;
+   obj->boffset = sizeof(java::lang::String);
+   obj->count = len;
+   obj->cachedHashCode = 0;
+ 
+   JVMPI_NOTIFY_ALLOC (&String::class$, sz, obj);
+   
+   return obj;
+ }
+ 
  // A version of the above that assumes the object contains no pointers,
  // and requires no finalization.  This can't happen if we need pointers
  // to locks.
  #ifdef JV_HASH_SYNCHRONIZATION
  jobject
! _Jv_AllocPtrFreeObject (jclass klass)
  {
    _Jv_InitClass (klass);
+   jint size = klass->size ();
  
    jobject obj = (jobject) _Jv_AllocPtrFreeObj (size, klass);
  
!   JVMPI_NOTIFY_ALLOC (klass, size, obj);
  
    return obj;
  }
*************** _Jv_NewMultiArray (jclass array_type, ji
*** 622,628 ****
  
  // Ensure 8-byte alignment, for hash synchronization.
  #define DECLARE_PRIM_TYPE(NAME)			\
-   _Jv_ArrayVTable _Jv_##NAME##VTable;		\
    java::lang::Class _Jv_##NAME##Class __attribute__ ((aligned (8)));
  
  DECLARE_PRIM_TYPE(byte)
--- 642,647 ----
*************** DECLARE_PRIM_TYPE(double)
*** 636,643 ****
  DECLARE_PRIM_TYPE(void)
  
  void
! _Jv_InitPrimClass (jclass cl, char *cname, char sig, int len, 
!                    _Jv_ArrayVTable *array_vtable)
  {    
    using namespace java::lang::reflect;
  
--- 655,661 ----
  DECLARE_PRIM_TYPE(void)
  
  void
! _Jv_InitPrimClass (jclass cl, char *cname, char sig, int len)
  {    
    using namespace java::lang::reflect;
  
*************** _Jv_InitPrimClass (jclass cl, char *cnam
*** 654,661 ****
    cl->vtable = JV_PRIMITIVE_VTABLE;
    cl->state = JV_STATE_DONE;
    cl->depth = -1;
-   if (sig != 'V')
-     _Jv_NewArrayClass (cl, NULL, (_Jv_VTable *) array_vtable);
  }
  
  jclass
--- 672,677 ----
*************** JvConvertArgv (int argc, const char **ar
*** 708,714 ****
  {
    if (argc < 0)
      argc = 0;
!   jobjectArray ar = JvNewObjectArray(argc, &StringClass, NULL);
    jobject *ptr = elements(ar);
    jbyteArray bytes = NULL;
    for (int i = 0;  i < argc;  i++)
--- 724,730 ----
  {
    if (argc < 0)
      argc = 0;
!   jobjectArray ar = JvNewObjectArray(argc, &java::lang::String::class$, NULL);
    jobject *ptr = elements(ar);
    jbyteArray bytes = NULL;
    for (int i = 0;  i < argc;  i++)
*************** process_gcj_properties ()
*** 868,883 ****
      }
    memset ((void *) &_Jv_Environment_Properties[property_count], 
  	  0, sizeof (property_pair));
-   {
-     size_t i = 0;
  
!     // Null terminate the strings.
!     while (_Jv_Environment_Properties[i].key)
!       {
! 	_Jv_Environment_Properties[i].key[_Jv_Environment_Properties[i].key_length] = 0;
! 	_Jv_Environment_Properties[i++].value[_Jv_Environment_Properties[i].value_length] = 0;
!       }
!   }
  }
  #endif // DISABLE_GETENV_PROPERTIES
  
--- 884,898 ----
      }
    memset ((void *) &_Jv_Environment_Properties[property_count], 
  	  0, sizeof (property_pair));
  
!   // Null terminate the strings.
!   for (property_pair *prop = &_Jv_Environment_Properties[0];
!        prop->key != NULL;
!        prop++)
!     {
!       prop->key[prop->key_length] = 0;
!       prop->value[prop->value_length] = 0;
!     }
  }
  #endif // DISABLE_GETENV_PROPERTIES
  
*************** namespace gcj
*** 891,908 ****
    bool runtimeInitialized = false;
  }
  
  jint
! _Jv_CreateJavaVM (void* /*vm_args*/)
  {
    using namespace gcj;
!   
    if (runtimeInitialized)
      return -1;
  
    runtimeInitialized = true;
  
    PROCESS_GCJ_PROPERTIES;
  
    _Jv_InitThreads ();
    _Jv_InitGC ();
    _Jv_InitializeSyncMutex ();
--- 906,1208 ----
    bool runtimeInitialized = false;
  }
  
+ // We accept all non-standard options accepted by Sun's java command,
+ // for compatibility with existing application launch scripts.
+ static jint
+ parse_x_arg (char* option_string)
+ {
+   if (strlen (option_string) <= 0)
+     return -1;
+ 
+   if (! strcmp (option_string, "int"))
+     {
+       // FIXME: this should cause the vm to never load shared objects
+     }
+   else if (! strcmp (option_string, "mixed"))
+     {
+       // FIXME: allow interpreted and native code
+     }
+   else if (! strcmp (option_string, "batch"))
+     {
+       // FIXME: disable background JIT'ing
+     }
+   else if (! strcmp (option_string, "debug"))
+     {
+       // FIXME: add JDWP/JVMDI support
+     }
+   else if (! strncmp (option_string, "bootclasspath:", 14))
+     {
+       // FIXME: add a parse_bootclasspath_arg function
+     }
+   else if (! strncmp (option_string, "bootclasspath/a:", 16))
+     {
+     }
+   else if (! strncmp (option_string, "bootclasspath/p:", 16))
+     {
+     }
+   else if (! strcmp (option_string, "check:jni"))
+     {
+       // FIXME: enable strict JNI checking
+     }
+   else if (! strcmp (option_string, "future"))
+     {
+       // FIXME: enable strict class file format checks
+     }
+   else if (! strcmp (option_string, "noclassgc"))
+     {
+       // FIXME: disable garbage collection for classes
+     }
+   else if (! strcmp (option_string, "incgc"))
+     {
+       // FIXME: incremental garbage collection
+     }
+   else if (! strncmp (option_string, "loggc:", 6))
+     {
+       if (option_string[6] == '\0')
+         {
+           fprintf (stderr,
+                    "libgcj: filename argument expected for loggc option\n");
+           return -1;
+         }
+       // FIXME: set gc logging filename
+     }
+   else if (! strncmp (option_string, "ms", 2))
+     {
+       // FIXME: ignore this option until PR 20699 is fixed.
+       // _Jv_SetInitialHeapSize (option_string + 2);
+     }
+   else if (! strncmp (option_string, "mx", 2))
+     _Jv_SetMaximumHeapSize (option_string + 2);
+   else if (! strcmp (option_string, "prof"))
+     {
+       // FIXME: enable profiling of program running in vm
+     }
+   else if (! strncmp (option_string, "runhprof:", 9))
+     {
+       // FIXME: enable specific type of vm profiling.  add a
+       // parse_runhprof_arg function
+     }
+   else if (! strcmp (option_string, "rs"))
+     {
+       // FIXME: reduced system signal usage.  disable thread dumps,
+       // only terminate in response to user-initiated calls,
+       // e.g. System.exit()
+     }
+   else if (! strncmp (option_string, "ss", 2))
+     {
+       // FIXME: set thread stack size
+     }
+   else if (! strcmp (option_string, "X:+UseAltSigs"))
+     {
+       // FIXME: use signals other than SIGUSR1 and SIGUSR2
+     }
+   else if (! strcmp (option_string, "share:off"))
+     {
+       // FIXME: don't share class data
+     }
+   else if (! strcmp (option_string, "share:auto"))
+     {
+       // FIXME: share class data where possible
+     }
+   else if (! strcmp (option_string, "share:on"))
+     {
+       // FIXME: fail if impossible to share class data
+     }
+ 
+   return 0;
+ }
+ 
+ static jint
+ parse_verbose_args (char* option_string,
+                     bool ignore_unrecognized)
+ {
+   size_t len = sizeof ("-verbose") - 1;
+ 
+   if (strlen (option_string) < len)
+     return -1;
+ 
+   if (option_string[len] == ':'
+       && option_string[len + 1] != '\0')
+     {
+       char* verbose_args = option_string + len + 1;
+ 
+       do
+ 	{
+ 	  if (! strncmp (verbose_args,
+ 			 "gc", sizeof ("gc") - 1))
+             {
+               if (verbose_args[sizeof ("gc") - 1] == '\0'
+                   || verbose_args[sizeof ("gc") - 1] == ',')
+                 {
+                   // FIXME: we should add functions to boehm-gc that
+                   // toggle GC_print_stats, GC_PRINT_ADDRESS_MAP and
+                   // GC_print_back_height.
+                   verbose_args += sizeof ("gc") - 1;
+                 }
+               else
+                 {
+                 verbose_arg_err:
+                   fprintf (stderr, "libgcj: unknown verbose option: %s\n",
+                            option_string);
+                   return -1;
+                 }
+             }
+ 	  else if (! strncmp (verbose_args,
+ 			      "class",
+ 			      sizeof ("class") - 1))
+             {
+               if (verbose_args[sizeof ("class") - 1] == '\0'
+                   || verbose_args[sizeof ("class") - 1] == ',')
+                 {
+                   gcj::verbose_class_flag = true;
+                   verbose_args += sizeof ("class") - 1;
+                 }
+               else
+                 goto verbose_arg_err;
+             }
+ 	  else if (! strncmp (verbose_args, "jni",
+ 			      sizeof ("jni") - 1))
+             {
+               if (verbose_args[sizeof ("jni") - 1] == '\0'
+                   || verbose_args[sizeof ("jni") - 1] == ',')
+                 {
+                   // FIXME: enable JNI messages.
+                   verbose_args += sizeof ("jni") - 1;
+                 }
+               else
+                 goto verbose_arg_err;
+             }
+ 	  else if (ignore_unrecognized
+ 		   && verbose_args[0] == 'X')
+ 	    {
+ 	      // ignore unrecognized non-standard verbose option
+ 	      while (verbose_args[0] != '\0'
+ 		     && verbose_args[0] != ',')
+                 verbose_args++;
+ 	    }
+           else if (verbose_args[0] == ',')
+             {
+               verbose_args++;
+             }
+           else
+             goto verbose_arg_err;
+ 
+           if (verbose_args[0] == ',')
+             verbose_args++;
+ 	}
+       while (verbose_args[0] != '\0');
+     }
+   else if (option_string[len] == 'g'
+ 	   && option_string[len + 1] == 'c'
+ 	   && option_string[len + 2] == '\0')
+     {
+       // FIXME: we should add functions to boehm-gc that
+       // toggle GC_print_stats, GC_PRINT_ADDRESS_MAP and
+       // GC_print_back_height.
+       return 0;
+     }
+   else if (option_string[len] == '\0')
+     {
+       gcj::verbose_class_flag = true;
+       return 0;
+     }
+   else
+     {
+       // unrecognized option beginning with -verbose
+       return -1;
+     }
+   return 0;
+ }
+ 
+ static jint
+ parse_init_args (JvVMInitArgs* vm_args)
+ {
+   // if _Jv_Compiler_Properties is non-NULL then it needs to be
+   // re-allocated dynamically.
+   if (_Jv_Compiler_Properties)
+     {
+       const char** props = _Jv_Compiler_Properties;
+       _Jv_Compiler_Properties = NULL;
+ 
+       for (int i = 0; props[i]; i++)
+ 	{
+ 	  _Jv_Compiler_Properties = (const char**) _Jv_Realloc
+ 	    (_Jv_Compiler_Properties,
+ 	     (_Jv_Properties_Count + 1) * sizeof (const char*));
+ 	  _Jv_Compiler_Properties[_Jv_Properties_Count++] = props[i];
+ 	}
+     }
+ 
+   if (vm_args == NULL)
+     return 0;
+ 
+   for (int i = 0; i < vm_args->nOptions; ++i)
+     {
+       char* option_string = vm_args->options[i].optionString;
+       if (! strcmp (option_string, "vfprintf")
+ 	  || ! strcmp (option_string, "exit")
+ 	  || ! strcmp (option_string, "abort"))
+ 	{
+ 	  // FIXME: we are required to recognize these, but for
+ 	  // now we don't handle them in any way.
+ 	  continue;
+ 	}
+       else if (! strncmp (option_string,
+ 			  "-verbose", sizeof ("-verbose") - 1))
+ 	{
+ 	  jint result = parse_verbose_args (option_string,
+                                             vm_args->ignoreUnrecognized);
+ 	  if (result < 0)
+ 	    return result;
+ 	}
+       else if (! strncmp (option_string, "-D", 2))
+ 	{
+ 	  _Jv_Compiler_Properties = (const char**) _Jv_Realloc
+ 	    (_Jv_Compiler_Properties,
+ 	     (_Jv_Properties_Count + 1) * sizeof (char*));
+ 
+ 	  _Jv_Compiler_Properties[_Jv_Properties_Count++] =
+ 	    strdup (option_string + 2);
+ 
+ 	  continue;
+ 	}
+       else if (vm_args->ignoreUnrecognized)
+         {
+           if (option_string[0] == '_')
+             parse_x_arg (option_string + 1);
+           else if (! strncmp (option_string, "-X", 2))
+             parse_x_arg (option_string + 2);
+           else
+             {
+             unknown_option:
+               fprintf (stderr, "libgcj: unknown option: %s\n", option_string);
+               return -1;
+             }
+ 	}
+       else
+         goto unknown_option;
+     }
+   return 0;
+ }
+ 
  jint
! _Jv_CreateJavaVM (JvVMInitArgs* vm_args)
  {
    using namespace gcj;
! 
    if (runtimeInitialized)
      return -1;
  
    runtimeInitialized = true;
  
+   jint result = parse_init_args (vm_args);
+   if (result < 0)
+     return -1;
+ 
    PROCESS_GCJ_PROPERTIES;
  
+   /* Threads must be initialized before the GC, so that it inherits the
+      signal mask.  */
    _Jv_InitThreads ();
    _Jv_InitGC ();
    _Jv_InitializeSyncMutex ();
*************** _Jv_CreateJavaVM (void* /*vm_args*/)
*** 911,916 ****
--- 1211,1224 ----
    _Jv_InitInterpreter ();
  #endif  
  
+ #ifdef HANDLE_SEGV
+   INIT_SEGV;
+ #endif
+ 
+ #ifdef HANDLE_FPE
+   INIT_FPE;
+ #endif
+ 
    /* Initialize Utf8 constants declared in jvm.h. */
    void_signature = _Jv_makeUtf8Const ("()V", 3);
    clinit_name = _Jv_makeUtf8Const ("<clinit>", 8);
*************** _Jv_CreateJavaVM (void* /*vm_args*/)
*** 918,932 ****
    finit_name = _Jv_makeUtf8Const ("finit$", 6);
  
    /* Initialize built-in classes to represent primitive TYPEs. */
!   _Jv_InitPrimClass (&_Jv_byteClass,    "byte",    'B', 1, &_Jv_byteVTable);
!   _Jv_InitPrimClass (&_Jv_shortClass,   "short",   'S', 2, &_Jv_shortVTable);
!   _Jv_InitPrimClass (&_Jv_intClass,     "int",     'I', 4, &_Jv_intVTable);
!   _Jv_InitPrimClass (&_Jv_longClass,    "long",    'J', 8, &_Jv_longVTable);
!   _Jv_InitPrimClass (&_Jv_booleanClass, "boolean", 'Z', 1, &_Jv_booleanVTable);
!   _Jv_InitPrimClass (&_Jv_charClass,    "char",    'C', 2, &_Jv_charVTable);
!   _Jv_InitPrimClass (&_Jv_floatClass,   "float",   'F', 4, &_Jv_floatVTable);
!   _Jv_InitPrimClass (&_Jv_doubleClass,  "double",  'D', 8, &_Jv_doubleVTable);
!   _Jv_InitPrimClass (&_Jv_voidClass,    "void",    'V', 0, &_Jv_voidVTable);
  
    // Turn stack trace generation off while creating exception objects.
    _Jv_InitClass (&java::lang::VMThrowable::class$);
--- 1226,1240 ----
    finit_name = _Jv_makeUtf8Const ("finit$", 6);
  
    /* Initialize built-in classes to represent primitive TYPEs. */
!   _Jv_InitPrimClass (&_Jv_byteClass,    "byte",    'B', 1);
!   _Jv_InitPrimClass (&_Jv_shortClass,   "short",   'S', 2);
!   _Jv_InitPrimClass (&_Jv_intClass,     "int",     'I', 4);
!   _Jv_InitPrimClass (&_Jv_longClass,    "long",    'J', 8);
!   _Jv_InitPrimClass (&_Jv_booleanClass, "boolean", 'Z', 1);
!   _Jv_InitPrimClass (&_Jv_charClass,    "char",    'C', 2);
!   _Jv_InitPrimClass (&_Jv_floatClass,   "float",   'F', 4);
!   _Jv_InitPrimClass (&_Jv_doubleClass,  "double",  'D', 8);
!   _Jv_InitPrimClass (&_Jv_voidClass,    "void",    'V', 0);
  
    // Turn stack trace generation off while creating exception objects.
    _Jv_InitClass (&java::lang::VMThrowable::class$);
*************** _Jv_CreateJavaVM (void* /*vm_args*/)
*** 937,951 ****
    // initialization of ClassLoader before we start the initialization
    // of VMClassLoader.
    _Jv_InitClass (&java::lang::ClassLoader::class$);
-   // Once the bootstrap loader is in place, change it into a kind of
-   // system loader, by having it read the class path.
-   gnu::gcj::runtime::VMClassLoader::initialize();
  
!   INIT_SEGV;
! #ifdef HANDLE_FPE
!   INIT_FPE;
! #endif
!   
    no_memory = new java::lang::OutOfMemoryError;
  
    java::lang::VMThrowable::trace_enabled = 1;
--- 1245,1257 ----
    // initialization of ClassLoader before we start the initialization
    // of VMClassLoader.
    _Jv_InitClass (&java::lang::ClassLoader::class$);
  
!   // Set up the system class loader and the bootstrap class loader.
!   gnu::gcj::runtime::ExtensionClassLoader::initialize();
!   java::lang::VMClassLoader::initialize(JvNewStringLatin1(TOOLEXECLIBDIR));
! 
!   _Jv_RegisterBootstrapPackages();
! 
    no_memory = new java::lang::OutOfMemoryError;
  
    java::lang::VMThrowable::trace_enabled = 1;
*************** _Jv_CreateJavaVM (void* /*vm_args*/)
*** 976,995 ****
  }
  
  void
! _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, 
! 	     bool is_jar)
  {
    _Jv_SetArgs (argc, argv);
  
    java::lang::Runtime *runtime = NULL;
  
    try
      {
!       // Set this very early so that it is seen when java.lang.System
!       // is initialized.
!       if (is_jar)
! 	_Jv_Jar_Class_Path = strdup (name);
!       _Jv_CreateJavaVM (NULL);
  
        // Get the Runtime here.  We want to initialize it before searching
        // for `main'; that way it will be set up if `main' is a JNI method.
--- 1282,1303 ----
  }
  
  void
! _Jv_RunMain (JvVMInitArgs *vm_args, jclass klass, const char *name, int argc,
!              const char **argv, bool is_jar)
  {
+ #ifndef DISABLE_MAIN_ARGS
    _Jv_SetArgs (argc, argv);
+ #endif
  
    java::lang::Runtime *runtime = NULL;
  
    try
      {
!       if (_Jv_CreateJavaVM (vm_args) < 0)
! 	{
! 	  fprintf (stderr, "libgcj: couldn't create virtual machine\n");
! 	  exit (1);
! 	}
  
        // Get the Runtime here.  We want to initialize it before searching
        // for `main'; that way it will be set up if `main' is a JNI method.
*************** _Jv_RunMain (jclass klass, const char *n
*** 1001,1019 ****
        arg_vec = JvConvertArgv (argc - 1, argv + 1);
  #endif
  
!       using namespace gnu::gcj::runtime;
        if (klass)
! 	main_thread = new FirstThread (klass, arg_vec);
        else
! 	main_thread = new FirstThread (JvNewStringLatin1 (name),
! 				       arg_vec, is_jar);
      }
    catch (java::lang::Throwable *t)
      {
        java::lang::System::err->println (JvNewStringLatin1 
          ("Exception during runtime initialization"));
        t->printStackTrace();
!       runtime->exit (1);
      }
  
    _Jv_AttachCurrentThread (main_thread);
--- 1309,1330 ----
        arg_vec = JvConvertArgv (argc - 1, argv + 1);
  #endif
  
!       using namespace gnu::java::lang;
        if (klass)
! 	main_thread = new MainThread (klass, arg_vec);
        else
! 	main_thread = new MainThread (JvNewStringLatin1 (name),
! 				      arg_vec, is_jar);
      }
    catch (java::lang::Throwable *t)
      {
        java::lang::System::err->println (JvNewStringLatin1 
          ("Exception during runtime initialization"));
        t->printStackTrace();
!       if (runtime)
! 	runtime->exit (1);
!       // In case the runtime creation failed.
!       ::exit (1);
      }
  
    _Jv_AttachCurrentThread (main_thread);
*************** _Jv_RunMain (jclass klass, const char *n
*** 1025,1030 ****
--- 1336,1348 ----
  }
  
  void
+ _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, 
+ 	     bool is_jar)
+ {
+   _Jv_RunMain (NULL, klass, name, argc, argv, is_jar);
+ }
+ 
+ void
  JvRunMain (jclass klass, int argc, const char **argv)
  {
    _Jv_RunMain (klass, NULL, argc, argv, false);
*************** _Jv_CheckAccess (jclass self_klass, jcla
*** 1184,1190 ****
    return ((self_klass == other_klass)
  	  || ((flags & Modifier::PUBLIC) != 0)
  	  || (((flags & Modifier::PROTECTED) != 0)
! 	      && other_klass->isAssignableFrom (self_klass))
  	  || (((flags & Modifier::PRIVATE) == 0)
  	      && _Jv_ClassNameSamePackage (self_klass->name,
  					   other_klass->name)));
--- 1502,1508 ----
    return ((self_klass == other_klass)
  	  || ((flags & Modifier::PUBLIC) != 0)
  	  || (((flags & Modifier::PROTECTED) != 0)
! 	      && _Jv_IsAssignableFromSlow (other_klass, self_klass))
  	  || (((flags & Modifier::PRIVATE) == 0)
  	      && _Jv_ClassNameSamePackage (self_klass->name,
  					   other_klass->name)));
diff -Nrcpad gcc-3.4.3/libjava/resolve.cc gcc-4.0.0/libjava/resolve.cc
*** gcc-3.4.3/libjava/resolve.cc	Fri Oct 24 09:29:41 2003
--- gcc-4.0.0/libjava/resolve.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,1109 ****
- // resolve.cc - Code for linking and resolving classes and pool entries.
- 
- /* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
- 
-    This file is part of libgcj.
- 
- This software is copyrighted work licensed under the terms of the
- Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
- details.  */
- 
- /* Author: Kresten Krab Thorup <krab@gnu.org>  */
- 
- #include <config.h>
- #include <platform.h>
- 
- #include <java-interp.h>
- 
- #include <jvm.h>
- #include <gcj/cni.h>
- #include <string.h>
- #include <java-cpool.h>
- #include <java/lang/Class.h>
- #include <java/lang/String.h>
- #include <java/lang/StringBuffer.h>
- #include <java/lang/Thread.h>
- #include <java/lang/InternalError.h>
- #include <java/lang/VirtualMachineError.h>
- #include <java/lang/NoSuchFieldError.h>
- #include <java/lang/NoSuchMethodError.h>
- #include <java/lang/ClassFormatError.h>
- #include <java/lang/IllegalAccessError.h>
- #include <java/lang/AbstractMethodError.h>
- #include <java/lang/NoClassDefFoundError.h>
- #include <java/lang/IncompatibleClassChangeError.h>
- #include <java/lang/VMClassLoader.h>
- #include <java/lang/reflect/Modifier.h>
- 
- using namespace gcj;
- 
- void
- _Jv_ResolveField (_Jv_Field *field, java::lang::ClassLoader *loader)
- {
-   if (! field->isResolved ())
-     {
-       _Jv_Utf8Const *sig = (_Jv_Utf8Const*)field->type;
-       field->type = _Jv_FindClassFromSignature (sig->data, loader);
-       field->flags &= ~_Jv_FIELD_UNRESOLVED_FLAG;
-     }
- }
- 
- #ifdef INTERPRETER
- 
- static void throw_internal_error (char *msg)
- 	__attribute__ ((__noreturn__));
- static void throw_class_format_error (jstring msg)
- 	__attribute__ ((__noreturn__));
- static void throw_class_format_error (char *msg)
- 	__attribute__ ((__noreturn__));
- 
- static int get_alignment_from_class (jclass);
- 
- static _Jv_ResolvedMethod* 
- _Jv_BuildResolvedMethod (_Jv_Method*,
- 			 jclass,
- 			 jboolean,
- 			 jint);
- 
- 
- static void throw_incompatible_class_change_error (jstring msg)
- {
-   throw new java::lang::IncompatibleClassChangeError (msg);
- }
- 
- _Jv_word
- _Jv_ResolvePoolEntry (jclass klass, int index)
- {
-   using namespace java::lang::reflect;
- 
-   _Jv_Constants *pool = &klass->constants;
- 
-   if ((pool->tags[index] & JV_CONSTANT_ResolvedFlag) != 0)
-     return pool->data[index];
- 
-   switch (pool->tags[index]) {
-   case JV_CONSTANT_Class:
-     {
-       _Jv_Utf8Const *name = pool->data[index].utf8;
- 
-       jclass found;
-       if (name->data[0] == '[')
- 	found = _Jv_FindClassFromSignature (&name->data[0],
- 					    klass->loader);
-       else
- 	found = _Jv_FindClass (name, klass->loader);
- 
-       if (! found)
- 	{
- 	  jstring str = _Jv_NewStringUTF (name->data);
- 	  // This exception is specified in JLS 2nd Ed, section 5.1.
- 	  throw new java::lang::NoClassDefFoundError (str);
- 	}
- 
-       if ((found->accflags & Modifier::PUBLIC) == Modifier::PUBLIC
- 	  || (_Jv_ClassNameSamePackage (found->name,
- 					klass->name)))
- 	{
- 	  pool->data[index].clazz = found;
- 	  pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
- 	}
-       else
- 	{
- 	  throw new java::lang::IllegalAccessError (found->getName());
- 	}
-     }
-     break;
- 
-   case JV_CONSTANT_String:
-     {
-       jstring str;
-       str = _Jv_NewStringUtf8Const (pool->data[index].utf8);
-       pool->data[index].o = str;
-       pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
-     }
-     break;
- 
- 
-   case JV_CONSTANT_Fieldref:
-     {
-       _Jv_ushort class_index, name_and_type_index;
-       _Jv_loadIndexes (&pool->data[index],
- 		       class_index,
- 		       name_and_type_index);
-       jclass owner = (_Jv_ResolvePoolEntry (klass, class_index)).clazz;
- 
-       if (owner != klass)
- 	_Jv_InitClass (owner);
- 
-       _Jv_ushort name_index, type_index;
-       _Jv_loadIndexes (&pool->data[name_and_type_index],
- 		       name_index,
- 		       type_index);
- 
-       _Jv_Utf8Const *field_name = pool->data[name_index].utf8;
-       _Jv_Utf8Const *field_type_name = pool->data[type_index].utf8;
- 
-       // FIXME: The implementation of this function
-       // (_Jv_FindClassFromSignature) will generate an instance of
-       // _Jv_Utf8Const for each call if the field type is a class name
-       // (Lxx.yy.Z;).  This may be too expensive to do for each and
-       // every fieldref being resolved.  For now, we fix the problem by
-       // only doing it when we have a loader different from the class
-       // declaring the field.
- 
-       jclass field_type = 0;
- 
-       if (owner->loader != klass->loader)
- 	field_type = _Jv_FindClassFromSignature (field_type_name->data,
- 						 klass->loader);
-       
-       _Jv_Field* the_field = 0;
- 
-       for (jclass cls = owner; cls != 0; cls = cls->getSuperclass ())
- 	{
- 	  for (int i = 0;  i < cls->field_count;  i++)
- 	    {
- 	      _Jv_Field *field = &cls->fields[i];
- 	      if (! _Jv_equalUtf8Consts (field->name, field_name))
- 		continue;
- 
- 	      if (_Jv_CheckAccess (klass, cls, field->flags))
- 		{
- 		  /* resove the field using the class' own loader
- 		     if necessary */
- 
- 		  if (!field->isResolved ())
- 		    _Jv_ResolveField (field, cls->loader);
- 
- 		  if (field_type != 0 && field->type != field_type)
- 		    throw new java::lang::LinkageError
- 		      (JvNewStringLatin1 
- 		       ("field type mismatch with different loaders"));
- 
- 		  the_field = field;
- 		  goto end_of_field_search;
- 		}
- 	      else
- 		{
- 		  throw new java::lang::IllegalAccessError;
- 		}
- 	    }
- 	}
- 
-     end_of_field_search:
-       if (the_field == 0)
- 	{
- 	  java::lang::StringBuffer *sb = new java::lang::StringBuffer();
- 	  sb->append(JvNewStringLatin1("field "));
- 	  sb->append(owner->getName());
- 	  sb->append(JvNewStringLatin1("."));
- 	  sb->append(_Jv_NewStringUTF(field_name->data));
- 	  sb->append(JvNewStringLatin1(" was not found."));
- 	  throw_incompatible_class_change_error(sb->toString());
- 	}
- 
-       pool->data[index].field = the_field;
-       pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
-     }
-     break;
- 
-   case JV_CONSTANT_Methodref:
-   case JV_CONSTANT_InterfaceMethodref:
-     {
-       _Jv_ushort class_index, name_and_type_index;
-       _Jv_loadIndexes (&pool->data[index],
- 		       class_index,
- 		       name_and_type_index);
-       jclass owner = (_Jv_ResolvePoolEntry (klass, class_index)).clazz;
- 
-       if (owner != klass)
- 	_Jv_InitClass (owner);
- 
-       _Jv_ushort name_index, type_index;
-       _Jv_loadIndexes (&pool->data[name_and_type_index],
- 		       name_index,
- 		       type_index);
- 
-       _Jv_Utf8Const *method_name = pool->data[name_index].utf8;
-       _Jv_Utf8Const *method_signature = pool->data[type_index].utf8;
- 
-       _Jv_Method *the_method = 0;
-       jclass found_class = 0;
- 
-       // First search the class itself.
-       the_method = _Jv_SearchMethodInClass (owner, klass, 
- 					    method_name, method_signature);
- 
-       if (the_method != 0)
-         {
- 	  found_class = owner;
-           goto end_of_method_search;
- 	}
- 
-       // If we are resolving an interface method, search the
-       // interface's superinterfaces (A superinterface is not an
-       // interface's superclass - a superinterface is implemented by
-       // the interface).
-       if (pool->tags[index] == JV_CONSTANT_InterfaceMethodref)
-         {
- 	  _Jv_ifaces ifaces;
- 	  ifaces.count = 0;
- 	  ifaces.len = 4;
- 	  ifaces.list = (jclass *) _Jv_Malloc (ifaces.len * sizeof (jclass *));
- 
- 	  _Jv_GetInterfaces (owner, &ifaces);	  
- 
- 	  for (int i = 0; i < ifaces.count; i++)
- 	    {
- 	      jclass cls = ifaces.list[i];
- 	      the_method = _Jv_SearchMethodInClass (cls, klass, method_name, 
- 	                                            method_signature);
- 	      if (the_method != 0)
- 	        {
- 		  found_class = cls;
-                   break;
- 		}
- 	    }
- 
- 	  _Jv_Free (ifaces.list);
- 
- 	  if (the_method != 0)
- 	    goto end_of_method_search;
- 	}
- 
-       // Finally, search superclasses. 
-       for (jclass cls = owner->getSuperclass (); cls != 0; 
-            cls = cls->getSuperclass ())
- 	{
- 	  the_method = _Jv_SearchMethodInClass (cls, klass, 
- 						method_name, method_signature);
-           if (the_method != 0)
- 	    {
- 	      found_class = cls;
- 	      break;
- 	    }
- 	}
- 
-     end_of_method_search:
-     
-       // FIXME: if (cls->loader != klass->loader), then we
-       // must actually check that the types of arguments
-       // correspond.  That is, for each argument type, and
-       // the return type, doing _Jv_FindClassFromSignature
-       // with either loader should produce the same result,
-       // i.e., exactly the same jclass object. JVMS 5.4.3.3    
-     
-       if (the_method == 0)
- 	{
- 	  java::lang::StringBuffer *sb = new java::lang::StringBuffer();
- 	  sb->append(JvNewStringLatin1("method "));
- 	  sb->append(owner->getName());
- 	  sb->append(JvNewStringLatin1("."));
- 	  sb->append(_Jv_NewStringUTF(method_name->data));
- 	  sb->append(JvNewStringLatin1(" was not found."));
- 	  throw new java::lang::NoSuchMethodError (sb->toString());
- 	}
-       
-       int vtable_index = -1;
-       if (pool->tags[index] != JV_CONSTANT_InterfaceMethodref)
- 	vtable_index = (jshort)the_method->index;
- 
-       pool->data[index].rmethod = 
- 	_Jv_BuildResolvedMethod(the_method,
- 				found_class,
- 				(the_method->accflags & Modifier::STATIC) != 0,
- 				vtable_index);
-       pool->tags[index] |= JV_CONSTANT_ResolvedFlag;
-     }
-     break;
- 
-   }
- 
-   return pool->data[index];
- }
- 
- // Find a method declared in the cls that is referenced from klass and
- // perform access checks.
- _Jv_Method *
- _Jv_SearchMethodInClass (jclass cls, jclass klass, 
-                          _Jv_Utf8Const *method_name, 
- 			 _Jv_Utf8Const *method_signature)
- {
-   using namespace java::lang::reflect;
- 
-   for (int i = 0;  i < cls->method_count;  i++)
-     {
-       _Jv_Method *method = &cls->methods[i];
-       if (   (!_Jv_equalUtf8Consts (method->name,
- 				    method_name))
- 	  || (!_Jv_equalUtf8Consts (method->signature,
- 				    method_signature)))
- 	continue;
- 
-       if (_Jv_CheckAccess (klass, cls, method->accflags))
- 	return method;
-       else
- 	throw new java::lang::IllegalAccessError;
-     }
-   return 0;
- }
- 
- // A helper for _Jv_PrepareClass.  This adds missing `Miranda methods'
- // to a class.
- void
- _Jv_PrepareMissingMethods (jclass base2, jclass iface_class)
- {
-   _Jv_InterpClass *base = reinterpret_cast<_Jv_InterpClass *> (base2);
-   for (int i = 0; i < iface_class->interface_count; ++i)
-     {
-       for (int j = 0; j < iface_class->interfaces[i]->method_count; ++j)
- 	{
- 	  _Jv_Method *meth = &iface_class->interfaces[i]->methods[j];
- 	  // Don't bother with <clinit>.
- 	  if (meth->name->data[0] == '<')
- 	    continue;
- 	  _Jv_Method *new_meth = _Jv_LookupDeclaredMethod (base, meth->name,
- 							   meth->signature);
- 	  if (! new_meth)
- 	    {
- 	      // We assume that such methods are very unlikely, so we
- 	      // just reallocate the method array each time one is
- 	      // found.  This greatly simplifies the searching --
- 	      // otherwise we have to make sure that each such method
- 	      // found is really unique among all superinterfaces.
- 	      int new_count = base->method_count + 1;
- 	      _Jv_Method *new_m
- 		= (_Jv_Method *) _Jv_AllocBytes (sizeof (_Jv_Method)
- 						 * new_count);
- 	      memcpy (new_m, base->methods,
- 		      sizeof (_Jv_Method) * base->method_count);
- 
- 	      // Add new method.
- 	      new_m[base->method_count] = *meth;
- 	      new_m[base->method_count].index = (_Jv_ushort) -1;
- 	      new_m[base->method_count].accflags
- 		|= java::lang::reflect::Modifier::INVISIBLE;
- 
- 	      _Jv_MethodBase **new_im
- 		= (_Jv_MethodBase **) _Jv_AllocBytes (sizeof (_Jv_MethodBase *)
- 						      * new_count);
- 	      memcpy (new_im, base->interpreted_methods,
- 		      sizeof (_Jv_MethodBase *) * base->method_count);
- 
- 	      base->methods = new_m;
- 	      base->interpreted_methods = new_im;
- 	      base->method_count = new_count;
- 	    }
- 	}
- 
-       _Jv_PrepareMissingMethods (base, iface_class->interfaces[i]);
-     }
- }
- 
- void 
- _Jv_PrepareClass(jclass klass)
- {
-   using namespace java::lang::reflect;
- 
-  /*
-   * The job of this function is to: 1) assign storage to fields, and 2)
-   * build the vtable.  static fields are assigned real memory, instance
-   * fields are assigned offsets.
-   *
-   * NOTE: we have a contract with the garbage collector here.  Static
-   * reference fields must not be resolved, until after they have storage
-   * assigned which is the check used by the collector to see if it
-   * should indirect the static field reference and mark the object
-   * pointed to. 
-   *
-   * Most fields are resolved lazily (i.e. have their class-type
-   * assigned) when they are accessed the first time by calling as part
-   * of _Jv_ResolveField, which is allways called after _Jv_PrepareClass.
-   * Static fields with initializers are resolved as part of this
-   * function, as are fields with primitive types.
-   */
- 
-   if (! _Jv_IsInterpretedClass (klass))
-     return;
- 
-   if (klass->state >= JV_STATE_PREPARED)
-     return;
- 
-   // Make sure super-class is linked.  This involves taking a lock on
-   // the super class, so we use the Java method resolveClass, which
-   // will unlock it properly, should an exception happen.  If there's
-   // no superclass, do nothing -- Object will already have been
-   // resolved.
- 
-   if (klass->superclass)
-     java::lang::VMClassLoader::resolveClass (klass->superclass);
- 
-   _Jv_InterpClass *clz = (_Jv_InterpClass*)klass;
- 
-   /************ PART ONE: OBJECT LAYOUT ***************/
- 
-   // Compute the alignment for this type by searching through the
-   // superclasses and finding the maximum required alignment.  We
-   // could consider caching this in the Class.
-   int max_align = __alignof__ (java::lang::Object);
-   jclass super = clz->superclass;
-   while (super != NULL)
-     {
-       int num = JvNumInstanceFields (super);
-       _Jv_Field *field = JvGetFirstInstanceField (super);
-       while (num > 0)
- 	{
- 	  int field_align = get_alignment_from_class (field->type);
- 	  if (field_align > max_align)
- 	    max_align = field_align;
- 	  ++field;
- 	  --num;
- 	}
-       super = super->superclass;
-     }
- 
-   int instance_size;
-   int static_size = 0;
- 
-   // Although java.lang.Object is never interpreted, an interface can
-   // have a null superclass.  Note that we have to lay out an
-   // interface because it might have static fields.
-   if (clz->superclass)
-     instance_size = clz->superclass->size();
-   else
-     instance_size = java::lang::Object::class$.size();
- 
-   for (int i = 0; i < clz->field_count; i++)
-     {
-       int field_size;
-       int field_align;
- 
-       _Jv_Field *field = &clz->fields[i];
- 
-       if (! field->isRef ())
- 	{
- 	  // it's safe to resolve the field here, since it's 
- 	  // a primitive class, which does not cause loading to happen.
- 	  _Jv_ResolveField (field, clz->loader);
- 
- 	  field_size = field->type->size ();
- 	  field_align = get_alignment_from_class (field->type);
- 	}
-       else 
- 	{
- 	  field_size = sizeof (jobject);
- 	  field_align = __alignof__ (jobject);
- 	}
- 
- #ifndef COMPACT_FIELDS
-       field->bsize = field_size;
- #endif
- 
-       if (field->flags & Modifier::STATIC)
- 	{
- 	  /* this computes an offset into a region we'll allocate 
- 	     shortly, and then add this offset to the start address */
- 
- 	  static_size        = ROUND (static_size, field_align);
- 	  field->u.boffset   = static_size;
- 	  static_size       += field_size;
- 	}
-       else
- 	{
- 	  instance_size      = ROUND (instance_size, field_align);
- 	  field->u.boffset   = instance_size;
- 	  instance_size     += field_size;
- 	  if (field_align > max_align)
- 	    max_align = field_align;
- 	}
-     }
- 
-   // Set the instance size for the class.  Note that first we round it
-   // to the alignment required for this object; this keeps us in sync
-   // with our current ABI.
-   instance_size = ROUND (instance_size, max_align);
-   clz->size_in_bytes = instance_size;
- 
-   // allocate static memory
-   if (static_size != 0)
-     {
-       char *static_data = (char*)_Jv_AllocBytes (static_size);
- 
-       memset (static_data, 0, static_size);
- 
-       for (int i = 0; i < clz->field_count; i++)
- 	{
- 	  _Jv_Field *field = &clz->fields[i];
- 
- 	  if ((field->flags & Modifier::STATIC) != 0)
- 	    {
- 	      field->u.addr  = static_data + field->u.boffset;
- 			    
- 	      if (clz->field_initializers[i] != 0)
- 		{
- 		  _Jv_ResolveField (field, clz->loader);
- 		  _Jv_InitField (0, clz, i);
- 		}
- 	    }
- 	}
- 
-       // now we don't need the field_initializers anymore, so let the
-       // collector get rid of it!
- 
-       clz->field_initializers = 0;
-     }
- 
-   /************ PART TWO: VTABLE LAYOUT ***************/
- 
-   /* preparation: build the vtable stubs (even interfaces can)
-      have code -- for static constructors. */
-   for (int i = 0; i < clz->method_count; i++)
-     {
-       _Jv_MethodBase *imeth = clz->interpreted_methods[i];
- 
-       if ((clz->methods[i].accflags & Modifier::NATIVE) != 0)
- 	{
- 	  // You might think we could use a virtual `ncode' method in
- 	  // the _Jv_MethodBase and unify the native and non-native
- 	  // cases.  Well, we can't, because we don't allocate these
- 	  // objects using `new', and thus they don't get a vtable.
- 	  _Jv_JNIMethod *jnim = reinterpret_cast<_Jv_JNIMethod *> (imeth);
- 	  clz->methods[i].ncode = jnim->ncode ();
- 	}
-       else if (imeth != 0)		// it could be abstract
- 	{
- 	  _Jv_InterpMethod *im = reinterpret_cast<_Jv_InterpMethod *> (imeth);
- 	  _Jv_VerifyMethod (im);
- 	  clz->methods[i].ncode = im->ncode ();
- 
- 	  // Resolve ctable entries pointing to this method.  See
- 	  // _Jv_Defer_Resolution.
- 	  void **code = (void **)imeth->deferred;
- 	  while (code)
- 	    {
- 	      void **target = (void **)*code;
- 	      *code = clz->methods[i].ncode;
- 	      code = target;
- 	    }
- 	}
-     }
- 
-   if ((clz->accflags & Modifier::INTERFACE))
-     {
-       clz->state = JV_STATE_PREPARED;
-       clz->notifyAll ();
-       return;
-     }
- 
-   // A class might have so-called "Miranda methods".  This is a method
-   // that is declared in an interface and not re-declared in an
-   // abstract class.  Some compilers don't emit declarations for such
-   // methods in the class; this will give us problems since we expect
-   // a declaration for any method requiring a vtable entry.  We handle
-   // this here by searching for such methods and constructing new
-   // internal declarations for them.  We only need to do this for
-   // abstract classes.
-   if ((clz->accflags & Modifier::ABSTRACT))
-     _Jv_PrepareMissingMethods (clz, clz);
- 
-   clz->vtable_method_count = -1;
-   _Jv_MakeVTable (clz);
- 
-   /* wooha! we're done. */
-   clz->state = JV_STATE_PREPARED;
-   clz->notifyAll ();
- }
- 
- /** Do static initialization for fields with a constant initializer */
- void
- _Jv_InitField (jobject obj, jclass klass, int index)
- {
-   using namespace java::lang::reflect;
- 
-   if (obj != 0 && klass == 0)
-     klass = obj->getClass ();
- 
-   if (!_Jv_IsInterpretedClass (klass))
-     return;
- 
-   _Jv_InterpClass *clz = (_Jv_InterpClass*)klass;
- 
-   _Jv_Field * field = (&clz->fields[0]) + index;
- 
-   if (index > clz->field_count)
-     throw_internal_error ("field out of range");
- 
-   int init = clz->field_initializers[index];
-   if (init == 0)
-     return;
- 
-   _Jv_Constants *pool = &clz->constants;
-   int tag = pool->tags[init];
- 
-   if (! field->isResolved ())
-     throw_internal_error ("initializing unresolved field");
- 
-   if (obj==0 && ((field->flags & Modifier::STATIC) == 0))
-     throw_internal_error ("initializing non-static field with no object");
- 
-   void *addr = 0;
- 
-   if ((field->flags & Modifier::STATIC) != 0)
-     addr = (void*) field->u.addr;
-   else
-     addr = (void*) (((char*)obj) + field->u.boffset);
- 
-   switch (tag)
-     {
-     case JV_CONSTANT_String:
-       {
- 	_Jv_MonitorEnter (clz);
- 	jstring str;
- 	str = _Jv_NewStringUtf8Const (pool->data[init].utf8);
- 	pool->data[init].string = str;
- 	pool->tags[init] = JV_CONSTANT_ResolvedString;
- 	_Jv_MonitorExit (clz);
-       }
-       /* fall through */
- 
-     case JV_CONSTANT_ResolvedString:
-       if (! (field->type == &StringClass
-  	     || field->type == &java::lang::Class::class$))
- 	throw_class_format_error ("string initialiser to non-string field");
- 
-       *(jstring*)addr = pool->data[init].string;
-       break;
- 
-     case JV_CONSTANT_Integer:
-       {
- 	int value = pool->data[init].i;
- 
- 	if (field->type == JvPrimClass (boolean))
- 	  *(jboolean*)addr = (jboolean)value;
- 	
- 	else if (field->type == JvPrimClass (byte))
- 	  *(jbyte*)addr = (jbyte)value;
- 	
- 	else if (field->type == JvPrimClass (char))
- 	  *(jchar*)addr = (jchar)value;
- 
- 	else if (field->type == JvPrimClass (short))
- 	  *(jshort*)addr = (jshort)value;
- 	
- 	else if (field->type == JvPrimClass (int))
- 	  *(jint*)addr = (jint)value;
- 
- 	else
- 	  throw_class_format_error ("erroneous field initializer");
-       }  
-       break;
- 
-     case JV_CONSTANT_Long:
-       if (field->type != JvPrimClass (long))
- 	throw_class_format_error ("erroneous field initializer");
- 
-       *(jlong*)addr = _Jv_loadLong (&pool->data[init]);
-       break;
- 
-     case JV_CONSTANT_Float:
-       if (field->type != JvPrimClass (float))
- 	throw_class_format_error ("erroneous field initializer");
- 
-       *(jfloat*)addr = pool->data[init].f;
-       break;
- 
-     case JV_CONSTANT_Double:
-       if (field->type != JvPrimClass (double))
- 	throw_class_format_error ("erroneous field initializer");
- 
-       *(jdouble*)addr = _Jv_loadDouble (&pool->data[init]);
-       break;
- 
-     default:
-       throw_class_format_error ("erroneous field initializer");
-     }
- }
- 
- template<typename T>
- struct aligner
- {
-   T field;
- };
- 
- #define ALIGNOF(TYPE) (__alignof__ (((aligner<TYPE> *) 0)->field))
- 
- // This returns the alignment of a type as it would appear in a
- // structure.  This can be different from the alignment of the type
- // itself.  For instance on x86 double is 8-aligned but struct{double}
- // is 4-aligned.
- static int
- get_alignment_from_class (jclass klass)
- {
-   if (klass == JvPrimClass (byte))
-     return ALIGNOF (jbyte);
-   else if (klass == JvPrimClass (short))
-     return ALIGNOF (jshort);
-   else if (klass == JvPrimClass (int)) 
-     return ALIGNOF (jint);
-   else if (klass == JvPrimClass (long))
-     return ALIGNOF (jlong);
-   else if (klass == JvPrimClass (boolean))
-     return ALIGNOF (jboolean);
-   else if (klass == JvPrimClass (char))
-     return ALIGNOF (jchar);
-   else if (klass == JvPrimClass (float))
-     return ALIGNOF (jfloat);
-   else if (klass == JvPrimClass (double))
-     return ALIGNOF (jdouble);
-   else
-     return ALIGNOF (jobject);
- }
- 
- 
- inline static unsigned char*
- skip_one_type (unsigned char* ptr)
- {
-   int ch = *ptr++;
- 
-   while (ch == '[')
-     { 
-       ch = *ptr++;
-     }
-   
-   if (ch == 'L')
-     {
-       do { ch = *ptr++; } while (ch != ';');
-     }
- 
-   return ptr;
- }
- 
- static ffi_type*
- get_ffi_type_from_signature (unsigned char* ptr)
- {
-   switch (*ptr) 
-     {
-     case 'L':
-     case '[':
-       return &ffi_type_pointer;
-       break;
- 
-     case 'Z':
-       // On some platforms a bool is a byte, on others an int.
-       if (sizeof (jboolean) == sizeof (jbyte))
- 	return &ffi_type_sint8;
-       else
- 	{
- 	  JvAssert (sizeof (jbyte) == sizeof (jint));
- 	  return &ffi_type_sint32;
- 	}
-       break;
- 
-     case 'B':
-       return &ffi_type_sint8;
-       break;
-       
-     case 'C':
-       return &ffi_type_uint16;
-       break;
- 	  
-     case 'S': 
-       return &ffi_type_sint16;
-       break;
- 	  
-     case 'I':
-       return &ffi_type_sint32;
-       break;
- 	  
-     case 'J':
-       return &ffi_type_sint64;
-       break;
- 	  
-     case 'F':
-       return &ffi_type_float;
-       break;
- 	  
-     case 'D':
-       return &ffi_type_double;
-       break;
- 
-     case 'V':
-       return &ffi_type_void;
-       break;
-     }
- 
-   throw_internal_error ("unknown type in signature");
- }
- 
- /* this function yields the number of actual arguments, that is, if the
-  * function is non-static, then one is added to the number of elements
-  * found in the signature */
- 
- int 
- _Jv_count_arguments (_Jv_Utf8Const *signature,
- 		     jboolean staticp)
- {
-   unsigned char *ptr = (unsigned char*) signature->data;
-   int arg_count = staticp ? 0 : 1;
- 
-   /* first, count number of arguments */
- 
-   // skip '('
-   ptr++;
- 
-   // count args
-   while (*ptr != ')')
-     {
-       ptr = skip_one_type (ptr);
-       arg_count += 1;
-     }
- 
-   return arg_count;
- }
- 
- /* This beast will build a cif, given the signature.  Memory for
-  * the cif itself and for the argument types must be allocated by the
-  * caller.
-  */
- 
- static int 
- init_cif (_Jv_Utf8Const* signature,
- 	  int arg_count,
- 	  jboolean staticp,
- 	  ffi_cif *cif,
- 	  ffi_type **arg_types,
- 	  ffi_type **rtype_p)
- {
-   unsigned char *ptr = (unsigned char*) signature->data;
- 
-   int arg_index = 0;		// arg number
-   int item_count = 0;		// stack-item count
- 
-   // setup receiver
-   if (!staticp)
-     {
-       arg_types[arg_index++] = &ffi_type_pointer;
-       item_count += 1;
-     }
- 
-   // skip '('
-   ptr++;
- 
-   // assign arg types
-   while (*ptr != ')')
-     {
-       arg_types[arg_index++] = get_ffi_type_from_signature (ptr);
- 
-       if (*ptr == 'J' || *ptr == 'D')
- 	item_count += 2;
-       else
- 	item_count += 1;
- 
-       ptr = skip_one_type (ptr);
-     }
- 
-   // skip ')'
-   ptr++;
-   ffi_type *rtype = get_ffi_type_from_signature (ptr);
- 
-   ptr = skip_one_type (ptr);
-   if (ptr != (unsigned char*)signature->data + signature->length)
-     throw_internal_error ("did not find end of signature");
- 
-   if (ffi_prep_cif (cif, FFI_DEFAULT_ABI,
- 		    arg_count, rtype, arg_types) != FFI_OK)
-     throw_internal_error ("ffi_prep_cif failed");
- 
-   if (rtype_p != NULL)
-     *rtype_p = rtype;
- 
-   return item_count;
- }
- 
- #if FFI_NATIVE_RAW_API
- #   define FFI_PREP_RAW_CLOSURE ffi_prep_raw_closure
- #   define FFI_RAW_SIZE ffi_raw_size
- #else
- #   define FFI_PREP_RAW_CLOSURE ffi_prep_java_raw_closure
- #   define FFI_RAW_SIZE ffi_java_raw_size
- #endif
- 
- /* we put this one here, and not in interpret.cc because it
-  * calls the utility routines _Jv_count_arguments 
-  * which are static to this module.  The following struct defines the
-  * layout we use for the stubs, it's only used in the ncode method. */
- 
- typedef struct {
-   ffi_raw_closure  closure;
-   ffi_cif   cif;
-   ffi_type *arg_types[0];
- } ncode_closure;
- 
- typedef void (*ffi_closure_fun) (ffi_cif*,void*,ffi_raw*,void*);
- 
- void *
- _Jv_InterpMethod::ncode ()
- {
-   using namespace java::lang::reflect;
- 
-   if (self->ncode != 0)
-     return self->ncode;
- 
-   jboolean staticp = (self->accflags & Modifier::STATIC) != 0;
-   int arg_count = _Jv_count_arguments (self->signature, staticp);
- 
-   ncode_closure *closure =
-     (ncode_closure*)_Jv_AllocBytes (sizeof (ncode_closure)
- 					+ arg_count * sizeof (ffi_type*));
- 
-   init_cif (self->signature,
- 	    arg_count,
- 	    staticp,
- 	    &closure->cif,
- 	    &closure->arg_types[0],
- 	    NULL);
- 
-   ffi_closure_fun fun;
- 
-   args_raw_size = FFI_RAW_SIZE (&closure->cif);
- 
-   JvAssert ((self->accflags & Modifier::NATIVE) == 0);
- 
-   if ((self->accflags & Modifier::SYNCHRONIZED) != 0)
-     {
-       if (staticp)
- 	fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_class;
-       else
- 	fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_object; 
-     }
-   else
-     {
-       if (staticp)
- 	fun = (ffi_closure_fun)&_Jv_InterpMethod::run_class;
-       else
- 	fun = (ffi_closure_fun)&_Jv_InterpMethod::run_normal;
-     }
- 
-   FFI_PREP_RAW_CLOSURE (&closure->closure,
- 		        &closure->cif, 
- 		        fun,
- 		        (void*)this);
- 
-   self->ncode = (void*)closure;
-   return self->ncode;
- }
- 
- void *
- _Jv_JNIMethod::ncode ()
- {
-   using namespace java::lang::reflect;
- 
-   if (self->ncode != 0)
-     return self->ncode;
- 
-   jboolean staticp = (self->accflags & Modifier::STATIC) != 0;
-   int arg_count = _Jv_count_arguments (self->signature, staticp);
- 
-   ncode_closure *closure =
-     (ncode_closure*)_Jv_AllocBytes (sizeof (ncode_closure)
- 				    + arg_count * sizeof (ffi_type*));
- 
-   ffi_type *rtype;
-   init_cif (self->signature,
- 	    arg_count,
- 	    staticp,
- 	    &closure->cif,
- 	    &closure->arg_types[0],
- 	    &rtype);
- 
-   ffi_closure_fun fun;
- 
-   args_raw_size = FFI_RAW_SIZE (&closure->cif);
- 
-   // Initialize the argument types and CIF that represent the actual
-   // underlying JNI function.
-   int extra_args = 1;
-   if ((self->accflags & Modifier::STATIC))
-     ++extra_args;
-   jni_arg_types = (ffi_type **) _Jv_Malloc ((extra_args + arg_count)
- 					    * sizeof (ffi_type *));
-   int offset = 0;
-   jni_arg_types[offset++] = &ffi_type_pointer;
-   if ((self->accflags & Modifier::STATIC))
-     jni_arg_types[offset++] = &ffi_type_pointer;
-   memcpy (&jni_arg_types[offset], &closure->arg_types[0],
- 	  arg_count * sizeof (ffi_type *));
- 
-   if (ffi_prep_cif (&jni_cif, _Jv_platform_ffi_abi,
- 		    extra_args + arg_count, rtype,
- 		    jni_arg_types) != FFI_OK)
-     throw_internal_error ("ffi_prep_cif failed for JNI function");
- 
-   JvAssert ((self->accflags & Modifier::NATIVE) != 0);
- 
-   // FIXME: for now we assume that all native methods for
-   // interpreted code use JNI.
-   fun = (ffi_closure_fun) &_Jv_JNIMethod::call;
- 
-   FFI_PREP_RAW_CLOSURE (&closure->closure,
- 			&closure->cif, 
- 			fun,
- 			(void*) this);
- 
-   self->ncode = (void *) closure;
-   return self->ncode;
- }
- 
- 
- /* A _Jv_ResolvedMethod is what is put in the constant pool for a
-  * MethodRef or InterfacemethodRef.  */
- static _Jv_ResolvedMethod*
- _Jv_BuildResolvedMethod (_Jv_Method* method,
- 			 jclass      klass,
- 			 jboolean staticp,
- 			 jint vtable_index)
- {
-   int arg_count = _Jv_count_arguments (method->signature, staticp);
- 
-   _Jv_ResolvedMethod* result = (_Jv_ResolvedMethod*)
-     _Jv_AllocBytes (sizeof (_Jv_ResolvedMethod)
- 		    + arg_count*sizeof (ffi_type*));
- 
-   result->stack_item_count
-     = init_cif (method->signature,
- 		arg_count,
- 		staticp,
- 		&result->cif,
- 		&result->arg_types[0],
- 		NULL);
- 
-   result->vtable_index        = vtable_index;
-   result->method              = method;
-   result->klass               = klass;
- 
-   return result;
- }
- 
- 
- static void
- throw_class_format_error (jstring msg)
- {
-   throw (msg
- 	 ? new java::lang::ClassFormatError (msg)
- 	 : new java::lang::ClassFormatError);
- }
- 
- static void
- throw_class_format_error (char *msg)
- {
-   throw_class_format_error (JvNewStringLatin1 (msg));
- }
- 
- static void
- throw_internal_error (char *msg)
- {
-   throw new java::lang::InternalError (JvNewStringLatin1 (msg));
- }
- 
- 
- #endif /* INTERPRETER */
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/scripts/unicode-blocks.pl gcc-4.0.0/libjava/scripts/unicode-blocks.pl
*** gcc-3.4.3/libjava/scripts/unicode-blocks.pl	Wed Mar  6 18:54:45 2002
--- gcc-4.0.0/libjava/scripts/unicode-blocks.pl	Wed Nov 24 13:33:01 2004
*************** while (<BLOCKS>) {
*** 186,192 ****
       * $block.
       * $extra'\\u$start' - '\\u$end'.$since
       */
!     public final static UnicodeBlock $name
        = new UnicodeBlock('\\u$start', '\\u$end',
                           "$name");
  EOF
--- 186,192 ----
       * $block.
       * $extra'\\u$start' - '\\u$end'.$since
       */
!     public static final UnicodeBlock $name
        = new UnicodeBlock('\\u$start', '\\u$end',
                           "$name");
  EOF
diff -Nrcpad gcc-3.4.3/libjava/scripts/unicode-muncher.pl gcc-4.0.0/libjava/scripts/unicode-muncher.pl
*** gcc-3.4.3/libjava/scripts/unicode-muncher.pl	Wed Mar  6 18:54:45 2002
--- gcc-4.0.0/libjava/scripts/unicode-muncher.pl	Fri Jul  9 21:00:11 2004
***************
*** 1,6 ****
  #!/usr/bin/perl -w
  # unicode-muncher.pl -- generate Unicode database for java.lang.Character
! # Copyright (C) 1998, 2002 Free Software Foundation, Inc.
  #
  # This file is part of GNU Classpath.
  #
--- 1,6 ----
  #!/usr/bin/perl -w
  # unicode-muncher.pl -- generate Unicode database for java.lang.Character
! # Copyright (C) 1998, 2002, 2004  Free Software Foundation, Inc.
  #
  # This file is part of GNU Classpath.
  #
***************
*** 36,53 ****
  # obligated to do so.  If you do not wish to do so, delete this
  # exception statement from your version.
  
! # Code for reading UnicodeData.txt and generating the code for
! # gnu.java.lang.CharData.  For now, the relevant Unicode definition files
! # are found in libjava/gnu/gcj/convert/.
  #
  # Inspired by code from Jochen Hoenicke.
  # author Eric Blake <ebb9@email.byu.edu>
  #
! # Usage: ./unicode-muncher <UnicodeData.txt> <CharData.java>
  #   where <UnicodeData.txt> is obtained from www.unicode.org (named
! #   UnicodeData-3.0.0.txt for Unicode version 3.0.0), and <CharData.java>
! #   is the final location for the Java interface gnu.java.lang.CharData.
! #   As of JDK 1.4, use Unicode version 3.0.0 for best results.
  
  ##
  ## Convert a 16-bit integer to a Java source code String literal character
--- 36,57 ----
  # obligated to do so.  If you do not wish to do so, delete this
  # exception statement from your version.
  
! # Code for reading UnicodeData-3.0.0.txt and SpecialCasing-2.txt to generate
! # the code for gnu.java.lang.CharData. The relevant files can be found here:
! #
! #   http://www.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt
! #   http://www.unicode.org/Public/3.0-Update/SpecialCasing-2.txt
  #
  # Inspired by code from Jochen Hoenicke.
  # author Eric Blake <ebb9@email.byu.edu>
  #
! # Usage: ./unicode-muncher <UnicodeData.txt> <SpecialCasing> <CharData.java>
  #   where <UnicodeData.txt> is obtained from www.unicode.org (named
! #   UnicodeData-3.0.0.txt for Unicode version 3.0.0), <SpecialCasing>
! #   is obtained from www.unicode too (named SpecialCasing-2.txt for Unicode
! #   version 3.0.0), and <CharData.java> is the final location for the Java
! #   interface gnu.java.lang.CharData. As of JDK 1.4, use Unicode version 3.0.0
! #   for best results.
  
  ##
  ## Convert a 16-bit integer to a Java source code String literal character
*************** my @DIRCODES = qw(L R AL EN ES ET AN CS 
*** 75,94 ****
  my $NOBREAK_FLAG  = 32;
  my $MIRRORED_FLAG = 64;
  
  my @info = ();
  my $titlecase = "";
  my $count = 0;
  my $range = 0;
  
! die "Usage: $0 <UnicodeData.txt> <CharData.java>" unless @ARGV == 2;
! open (UNICODE, "< $ARGV[0]") || die "Can't open Unicode attribute file: $!\n";
! 
! # Stage 1: Parse the attribute file
  $| = 1;
! print "GNU Classpath Unicode Attribute Database Generator 2.0\n";
  print "Copyright (C) 1998, 2002 Free Software Foundation, Inc.\n";
  print "Parsing attributes file";
! while(<UNICODE>) {
      print "." unless $count++ % 1000;
      chomp;
      s/\r//g;
--- 79,120 ----
  my $NOBREAK_FLAG  = 32;
  my $MIRRORED_FLAG = 64;
  
+ my %special = ();
  my @info = ();
  my $titlecase = "";
  my $count = 0;
  my $range = 0;
  
! die "Usage: $0 <UnicodeData.txt> <SpecialCasing.txt> <CharData.java>"
!     unless @ARGV == 3;
  $| = 1;
! print "GNU Classpath Unicode Attribute Database Generator 2.1\n";
  print "Copyright (C) 1998, 2002 Free Software Foundation, Inc.\n";
+ 
+ # Stage 0: Parse the special casing file
+ print "Parsing special casing file\n";
+ open (SPECIAL, "< $ARGV[1]") || die "Can't open special casing file: $!\n";
+ while (<SPECIAL>) {
+     next if /^\#/;
+     my ($ch, undef, undef, $upper) = split / *; */;
+ 
+     # This grabs only the special casing for multi-char uppercase. Note that
+     # there are no multi-char lowercase, and that Sun ignores multi-char
+     # titlecase rules. This script omits 3 special cases in Unicode 3.0.0,
+     # which must be hardcoded in java.lang.String:
+     #  \u03a3 (Sun ignores this special case)
+     #  \u0049 - lowercases to \u0131, but only in Turkish locale
+     #  \u0069 - uppercases to \u0130, but only in Turkish locale
+     next unless defined $upper and $upper =~ / /;
+     $special{hex $ch} = [map {hex} split ' ', $upper];
+ }
+ 
+ close SPECIAL;
+ 
+ # Stage 1: Parse the attribute file
  print "Parsing attributes file";
! open (UNICODE, "< $ARGV[0]") || die "Can't open Unicode attribute file: $!\n";
! while (<UNICODE>) {
      print "." unless $count++ % 1000;
      chomp;
      s/\r//g;
*************** while(<UNICODE>) {
*** 142,147 ****
--- 168,175 ----
              last;
          }
      }
+     $direction <<= 2;
+     $direction += $#{$special{$ch}} if defined $special{$ch};
  
      if ($range) {
          die "Expecting end of range at $ch\n" unless $name =~ /Last>$/;
*************** my @charinfo = ();
*** 167,175 ****
  
  for my $ch (0 .. 0xffff) {
      print "." unless $count++ % 0x1000;
!     if (! defined $info[$ch]) {
!         $info[$ch] = pack("n5", 0, -1, 0, 0, -1);
!     }
  
      my ($type, $numVal, $upper, $lower, $direction) = unpack("n5", $info[$ch]);
      if (! exists $charhash{$info[$ch]}) {
--- 195,201 ----
  
  for my $ch (0 .. 0xffff) {
      print "." unless $count++ % 0x1000;
!     $info[$ch] = pack("n5", 0, -1, 0, 0, -4) unless defined $info[$ch];
  
      my ($type, $numVal, $upper, $lower, $direction) = unpack("n5", $info[$ch]);
      if (! exists $charhash{$info[$ch]}) {
*************** for my $i (3 .. 8) {
*** 209,215 ****
      for ($j = $blksize - 1; $j > 0; $j--) {
          my %tails = ();
          for $k (0 .. $#blkarray) {
!             next if ! defined $blkarray[$k];
              my $len = length $blkarray[$k];
              my $tail = substr $blkarray[$k], $len - $j * 2;
              if (exists $tails{$tail}) {
--- 235,241 ----
      for ($j = $blksize - 1; $j > 0; $j--) {
          my %tails = ();
          for $k (0 .. $#blkarray) {
!             next unless defined $blkarray[$k];
              my $len = length $blkarray[$k];
              my $tail = substr $blkarray[$k], $len - $j * 2;
              if (exists $tails{$tail}) {
*************** for my $i (3 .. 8) {
*** 222,233 ****
          # tails are calculated, now calculate the heads and merge.
        BLOCK:
          for $k (0 .. $#blkarray) {
!             next if ! defined $blkarray[$k];
              my $tomerge = $k;
              while (1) {
                  my $head = substr($blkarray[$tomerge], 0, $j * 2);
                  my $entry = $tails{$head};
!                 next BLOCK if ! defined $entry;
  
                  my $other = shift @{$entry};
                  if ($other == $tomerge) {
--- 248,259 ----
          # tails are calculated, now calculate the heads and merge.
        BLOCK:
          for $k (0 .. $#blkarray) {
!             next unless defined $blkarray[$k];
              my $tomerge = $k;
              while (1) {
                  my $head = substr($blkarray[$tomerge], 0, $j * 2);
                  my $entry = $tails{$head};
!                 next BLOCK unless defined $entry;
  
                  my $other = shift @{$entry};
                  if ($other == $tomerge) {
*************** die "UTF-8 limit of blocks may be exceed
*** 297,306 ****
  die "UTF-8 limit of data may be exceeded: " . length($bestblkstr) . "\n"
      if length($bestblkstr) > 0xffff / 3;
  {
!     print "Generating $ARGV[1] with shift of $bestshift";
      my ($i, $j);
  
!     open OUTPUT, "> $ARGV[1]" or die "Failed creating output file: $!\n";
      print OUTPUT <<EOF;
  /* gnu/java/lang/CharData -- Database for java.lang.Character Unicode info
     Copyright (C) 2002 Free Software Foundation, Inc.
--- 323,332 ----
  die "UTF-8 limit of data may be exceeded: " . length($bestblkstr) . "\n"
      if length($bestblkstr) > 0xffff / 3;
  {
!     print "Generating $ARGV[2] with shift of $bestshift";
      my ($i, $j);
  
!     open OUTPUT, "> $ARGV[2]" or die "Failed creating output file: $!\n";
      print OUTPUT <<EOF;
  /* gnu/java/lang/CharData -- Database for java.lang.Character Unicode info
     Copyright (C) 2002 Free Software Foundation, Inc.
*************** package gnu.java.lang;
*** 345,352 ****
  /**
   * This contains the info about the unicode characters, that
   * java.lang.Character needs.  It is generated automatically from
!  * <code>$ARGV[0]</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.
   *
--- 371,379 ----
  /**
   * This contains the info about the unicode characters, that
   * java.lang.Character needs.  It is generated automatically from
!  * <code>$ARGV[0]</code> and
!  * <code>$ARGV[1]</code>, by some
!  * perl scripts. These Unicode definition files 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.
   *
*************** package gnu.java.lang;
*** 358,370 ****
   * 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.  Finally, there is a listing for
!  * <code>TITLE</code> exceptions (most characters just have the same
!  * title case as upper case).
   *
   * \@author scripts/unicode-muncher.pl (written by Jochen Hoenicke,
   *         Eric Blake)
   * \@see Character
   */
  public interface CharData
  {
--- 385,402 ----
   * 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
  {
*************** EOF
*** 417,423 ****
          print OUTPUT $i ? "\n    + \"" : "    = \"";
          for $j (0 .. 10) {
              last if $len <= $i * 11 + $j;
!             my $val = unpack "n", substr($bestblkstr, 2 * ($i*11 + $j), 2);
              print OUTPUT javaChar($val);
          }
          print OUTPUT "\"";
--- 449,455 ----
          print OUTPUT $i ? "\n    + \"" : "    = \"";
          for $j (0 .. 10) {
              last if $len <= $i * 11 + $j;
!             my $val = unpack "n", substr($bestblkstr, 2 * ($i * 11 + $j), 2);
              print OUTPUT javaChar($val);
          }
          print OUTPUT "\"";
*************** EOF
*** 451,460 ****
  ;
  
    /**
!    * This is the attribute table for computing the 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.
     */
    String UPPER
  EOF
--- 483,494 ----
  ;
  
    /**
!    * 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
  EOF
*************** EOF
*** 483,493 ****
  EOF
  
      $len = @charinfo;
!     for ($i = 0; $i < $len / 11; $i++) {
          print OUTPUT $i ? "\n    + \"" : "    = \"";
!         for $j (0 .. 10) {
!             last if $len <= $i * 11 + $j;
!             my $val = $charinfo[$i * 11 + $j][2];
              print OUTPUT javaChar($val);
          }
          print OUTPUT "\"";
--- 517,527 ----
  EOF
  
      $len = @charinfo;
!     for ($i = 0; $i < $len / 13; $i++) {
          print OUTPUT $i ? "\n    + \"" : "    = \"";
!         for $j (0 .. 12) {
!             last if $len <= $i * 13 + $j;
!             my $val = $charinfo[$i * 13 + $j][2];
              print OUTPUT javaChar($val);
          }
          print OUTPUT "\"";
*************** EOF
*** 498,516 ****
  
    /**
     * This is the attribute table for computing the directionality class
!    * of a character.  At present, the value is in the range 0 - 18 if the
!    * character has a direction, otherwise it is -1.  Note that this is
!    * stored as an unsigned char since this is a String literal.
     */
    String DIRECTION
  EOF
  
      $len = @charinfo;
!     for ($i = 0; $i < $len / 11; $i++) {
          print OUTPUT $i ? "\n    + \"" : "    = \"";
!         for $j (0 .. 10) {
!             last if $len <= $i * 11 + $j;
!             my $val = $charinfo[$i * 11 + $j][3];
              print OUTPUT javaChar($val);
          }
          print OUTPUT "\"";
--- 532,556 ----
  
    /**
     * 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
  EOF
  
      $len = @charinfo;
!     for ($i = 0; $i < $len / 17; $i++) {
          print OUTPUT $i ? "\n    + \"" : "    = \"";
!         for $j (0 .. 16) {
!             last if $len <= $i * 17 + $j;
!             my $val = $charinfo[$i * 17 + $j][3];
              print OUTPUT javaChar($val);
          }
          print OUTPUT "\"";
*************** EOF
*** 520,529 ****
  ;
  
    /**
!    * This is the listing of titlecase special cases (all other character
     * can use <code>UPPER</code> to determine their titlecase).  The listing
!    * is a sequence of character pairs; converting the first character of the
!    * pair to titlecase produces the second character.
     */
    String TITLE
  EOF
--- 560,569 ----
  ;
  
    /**
!    * 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
  EOF
*************** EOF
*** 533,539 ****
          print OUTPUT $i ? "\n    + \"" : "    = \"";
          for $j (0 .. 10) {
              last if $len <= $i * 11 + $j;
!             my $val = unpack "n", substr($titlecase, 2 * ($i*11 + $j), 2);
              print OUTPUT javaChar($val);
          }
          print OUTPUT "\"";
--- 573,636 ----
          print OUTPUT $i ? "\n    + \"" : "    = \"";
          for $j (0 .. 10) {
              last if $len <= $i * 11 + $j;
!             my $val = unpack "n", substr($titlecase, 2 * ($i * 11 + $j), 2);
!             print OUTPUT javaChar($val);
!         }
!         print OUTPUT "\"";
!     }
! 
!     print OUTPUT <<EOF;
! ;
! 
!   /**
!    * 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
! EOF
! 
!     my @list = sort {$a <=> $b} keys %special;
!     my $expansion = "";
!     my $offset = 0;
!     $len = @list;
!     for ($i = 0; $i < $len / 5; $i++) {
!         print OUTPUT $i ? "\n    + \"" : "    = \"";
!         for $j (0 .. 4) {
!             last if $len <= $i * 5 + $j;
!             my $ch = $list[$i * 5 + $j];
!             print OUTPUT javaChar($ch);
!             print OUTPUT javaChar($offset);
!             $offset += @{$special{$ch}};
!             $expansion .= pack "n*", @{$special{$ch}};
!         }
!         print OUTPUT "\"";
!     }
! 
!     print OUTPUT <<EOF;
! ;
! 
!   /**
!    * 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
! EOF
! 
!     $len = length($expansion) / 2;
!     for ($i = 0; $i < $len / 11; $i++) {
!         print OUTPUT $i ? "\n    + \"" : "    = \"";
!         for $j (0 .. 10) {
!             last if $len <= $i * 11 + $j;
!             my $val = unpack "n", substr($expansion, 2 * ($i * 11 + $j), 2);
              print OUTPUT javaChar($val);
          }
          print OUTPUT "\"";
diff -Nrcpad gcc-3.4.3/libjava/sysdep/pa/locks.h gcc-4.0.0/libjava/sysdep/pa/locks.h
*** gcc-3.4.3/libjava/sysdep/pa/locks.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/sysdep/pa/locks.h	Fri Mar 19 22:39:10 2004
***************
*** 0 ****
--- 1,78 ----
+ // locks.h - Thread synchronization primitives. PARISC implementation.
+ 
+ /* Copyright (C) 2002  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+ details.  */
+ 
+ #ifndef __SYSDEP_LOCKS_H__
+ #define __SYSDEP_LOCKS_H__
+ 
+ typedef size_t obj_addr_t;	/* Integer type big enough for object	*/
+ 				/* address.				*/
+ 
+ // Atomically replace *addr by new_val if it was initially equal to old.
+ // Return true if the comparison succeeded.
+ // Assumed to have acquire semantics, i.e. later memory operations
+ // cannot execute before the compare_and_swap finishes.
+ inline static bool
+ compare_and_swap(volatile obj_addr_t *addr,
+ 	 	 obj_addr_t old,
+ 		 obj_addr_t new_val) 
+ {
+   /* FIXME: not atomic */
+   obj_addr_t prev;
+ 
+   if ((prev = *addr) == old)
+     {
+       *addr = new_val;
+       return true;
+     }
+   else
+     {
+       return false;
+     }
+ }
+ 
+ // Set *addr to new_val with release semantics, i.e. making sure
+ // that prior loads and stores complete before this
+ // assignment.
+ inline static void
+ release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
+ {
+   __asm__ __volatile__(" " : : : "memory");
+   *(addr) = new_val;
+ }
+ 
+ // Compare_and_swap with release semantics instead of acquire semantics.
+ // On many architecture, the operation makes both guarantees, so the
+ // implementation can be the same.
+ inline static bool
+ compare_and_swap_release(volatile obj_addr_t *addr,
+ 	 				             obj_addr_t old,
+ 						     obj_addr_t new_val) 
+ {
+   return compare_and_swap(addr, old, new_val);
+ }
+ 
+ // Ensure that subsequent instructions do not execute on stale
+ // data that was loaded from memory before the barrier.
+ inline static void
+ read_barrier()
+ {
+   __asm__ __volatile__(" " : : : "memory");
+ }
+ 
+ // Ensure that prior stores to memory are completed with respect to other
+ // processors.
+ inline static void
+ write_barrier()
+ {
+   __asm__ __volatile__(" " : : : "memory");
+ }
+ 
+ #endif
+ 
diff -Nrcpad gcc-3.4.3/libjava/sysdep/powerpc/locks.h gcc-4.0.0/libjava/sysdep/powerpc/locks.h
*** gcc-3.4.3/libjava/sysdep/powerpc/locks.h	Mon Jul 29 23:26:27 2002
--- gcc-4.0.0/libjava/sysdep/powerpc/locks.h	Wed Jul  7 18:24:00 2004
*************** compare_and_swap (volatile obj_addr_t *a
*** 33,44 ****
    int ret;
  
    __asm__ __volatile__ (
! 	   "0:    " _LARX "%0,0,%1 ;"
! 	   "      xor. %0,%3,%0;"
! 	   "      bne 1f;"
! 	   "      " _STCX "%2,0,%1;"
! 	   "      bne- 0b;"
! 	   "1:    "
  	: "=&r" (ret)
  	: "r" (addr), "r" (new_val), "r" (old)
  	: "cr0", "memory");
--- 33,44 ----
    int ret;
  
    __asm__ __volatile__ (
! 	   "0:    " _LARX "%0,0,%1 \n"
! 	   "      xor. %0,%3,%0\n"
! 	   "      bne 1f\n"
! 	   "      " _STCX "%2,0,%1\n"
! 	   "      bne- 0b\n"
! 	   "1:   \n"
  	: "=&r" (ret)
  	: "r" (addr), "r" (new_val), "r" (old)
  	: "cr0", "memory");
*************** compare_and_swap_release (volatile obj_a
*** 67,78 ****
    __asm__ __volatile__ ("sync" : : : "memory");
  
    __asm__ __volatile__ (
! 	   "0:    " _LARX "%0,0,%1 ;"
! 	   "      xor. %0,%3,%0;"
! 	   "      bne 1f;"
! 	   "      " _STCX "%2,0,%1;"
! 	   "      bne- 0b;"
! 	   "1:    "
  	: "=&r" (ret)
  	: "r" (addr), "r" (new_val), "r" (old)
  	: "cr0", "memory");
--- 67,78 ----
    __asm__ __volatile__ ("sync" : : : "memory");
  
    __asm__ __volatile__ (
! 	   "0:    " _LARX "%0,0,%1 \n"
! 	   "      xor. %0,%3,%0\n"
! 	   "      bne 1f\n"
! 	   "      " _STCX "%2,0,%1\n"
! 	   "      bne- 0b\n"
! 	   "1:   \n"
  	: "=&r" (ret)
  	: "r" (addr), "r" (new_val), "r" (old)
  	: "cr0", "memory");
diff -Nrcpad gcc-3.4.3/libjava/testsuite/ChangeLog gcc-4.0.0/libjava/testsuite/ChangeLog
*** gcc-3.4.3/libjava/testsuite/ChangeLog	Fri Nov  5 03:34:46 2004
--- gcc-4.0.0/libjava/testsuite/ChangeLog	Thu Jan  1 00:00:00 1970
***************
*** 1,2164 ****
- 2004-11-04  Release Manager
- 
- 	* GCC 3.4.3 released.
- 
- 2004-09-06  Release Manager
- 
- 	* GCC 3.4.2 released.
- 
- 2004-07-01  Release Manager
- 
- 	* GCC 3.4.1 released.
- 
- 2004-04-18  Release Manager
- 
- 	* GCC 3.4.0 released.
- 
- 2004-01-12  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* lib/libjava.exp: Add LD_LIBRARY_PATH_32/64 to get proper
- 	path setting for Ssolaris 32/64-bit testing.
- 	Reorganize LD_LIBRARY_PATH setting.
- 
- 2004-01-09  Andrew Haley  <aph@redhat.com>
- 
- 	* lib/libjava.exp (bytecompile_file): Log compile command.
- 
- 2004-01-07  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	PR libgcj/13011:
- 	* libjava.jar/simple.jar: Add a working MANIFEST.MF.
- 
- 2003-12-03  Ralph Loader  <rcl@ihug.co.nz>
- 
- 	PR java/12374:
- 	* libjava.compile/PR12374.java: New file.
- 
- 2003-12-01  Jeff Sturm  <jsturm@one-point.com>
- 
- 	PR optimization/13024
- 	* libjava.compile/PR13024.java: New file.
- 
- 	PR java/13237
- 	* libjava.compile/PR13237.java: New file.
- 
- 2003-11-18  Andreas Tobler  <a.tobler@schweiz.ch>
- 
- 	* libjava.jar/jar.exp: Cleanup files and reset CLASSPATH.
- 
- 2003-11-17  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* libjava.compile/PR12857.java: New test case.
- 
- 2003-11-14  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jar/simple.jar: Replaced.
- 
- 2003-11-13  Tom Fitzsimmons  <fitzsim@redhat.com>
- 
- 	* libjava.jni/jniutf.c: New file.
- 	* libjava.jni/jniutf.java: New file.
- 	* libjava.jni/jniutf.out: New file.
- 
- 2003-11-11  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/12915:
- 	* libjava.lang/PR12915.java: New file.
- 	* libjava.lang/PR12915.out: New file.
- 
- 	* libjava.jacks/jacks.exp (gcj_jacks_write): Enable "assert"
- 	constraint.
- 	* libjava.jacks/jacks.xfail: Added new xfails.
- 
- 2003-11-10  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/12996:
- 	* libjava.jar/simple.jar: New file.
- 	* libjava.jar/simple.xfail: New file.
- 	* libjava.jar/simple.out: New file.
- 	* libjava.jar/simple.java: New file.
- 	* libjava.jar/jar.exp: New file.
- 
- 2003-11-08  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.xfail: Updated.
- 
- 2003-11-03  Jeff Sturm  <jsturm@one-point.com>
- 
- 	PR java/12866:
- 	* libjava.compile/InnerExcept.java: New File.
- 
- 2003-10-22  Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/12416:
- 	* libjava.lang/PR12416.out: New file.
- 	* libjava.lang/PR12416.java: New file.
- 
- 	PR libgcj/12656:
- 	* libjava.lang/PR12656.java: New file.
- 	* libjava.lang/PR12656.out: New file.
- 
- 2003-10-21  Tom Tromey  <tromey@redhat.com>
- 
- 	* lib/libjava.exp (find_javac): Use -Wno-unreachable-bytecode.
- 
- 2003-10-08  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.mauve/xfails: Removed some tests.
- 
- 2003-09-27  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.xfail: Updated for new passes.
- 
- 2003-09-21  Ralph Loader  <suckfish@ihug.co.nz>
- 
- 	PR java/12350
- 	* libjava.lang/PR12350.java: New file.
- 	* libjava.lang/PR12350.out: New file.
- 
- 2003-09-17  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	PR java/9577
- 	* libjava.cni/PR9577.java: New file.
- 	* libjava.cni/natPR9577.cc: New file.
- 	* libjava.cni/PR9577.out: New file.
- 
- 2003-09-04  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* libjava.compile/compile.exp: Test with -O3 rather than -O.
- 	* libjava.lang/lang.exp: Likewise.
- 
- 2003-09-04  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* lib/libjava.exp (libjava_arguments): Remove unneeded variables.
- 	(test_libjava_from_source): Likewise.
- 	(test_libjava_from_javac): Likewise.
- 
- 2003-08-23  Andreas Tobler <a.tobler@schweiz.ch> 
- 
- 	PR libgcj/8823
-         * libjava.lang/pr8823.xfail: Removed.
- 
- 2003-08-19  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* lib/libjava.exp (libjava_arguments): Add $libjava to the list of
- 	libraries.
- 
- 2003-08-18  Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/11951:
- 	* libjava.jni/pr11951.c: New file.
- 	* libjava.jni/pr11951.out: New file.
- 	* libjava.jni/pr11951.java: New file.
- 
- 2003-08-12  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.xfail: Updated to account for new passes.
- 	* libjava.compile/abstr.xfail: Now can compile from bytecode.
- 	* libjava.compile/PR5641.xfail: Now can compile from bytecode.
- 
- 	* libjava.mauve/mauve.exp (test_mauve_sim): Don't find
- 	DejaGNUTestHarness in gnu/testlet.
- 	(test_mauve): Use correct object extension.
- 
- 2003-08-12  Tom Tromey  <tromey@redhat.com>
- 
- 	* lib/libjava.exp (libjava_find_lib): Search for .so file first.
- 	(libjava_arguments): Don't add libraries to link line explictly.
- 
- 2003-08-05  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/11600:
- 	* libjava.compile/PR11600.xfail: New file.
- 	* libjava.compile/PR11600.java: New file.
- 
- 2003-08-04  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.exp (gcj_jacks_run): Just ignore errors
- 	from jacks.
- 
- 2003-07-24  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR libgcj/7482:
- 	* libjava.lang/PR7482.java: New file.
- 	* libjava.lang/PR7482.out: New file.
- 
- 2003-07-20  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.mauve/mauve.exp (mauve_find_harness_files): New proc.
- 	(test_mauve): Use it.
- 	(test_mauve_sim): Likewise.
- 
- 2003-07-19  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.verify/verify.exp (gcj_verify_list_tests): Only change
- 	directory if new directory exists.
- 
- 2003-07-13  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.verify/verify.exp: Fixed variable init.
- 
- 2003-07-10  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.verify/verify.exp: New file.
- 	* libjava.verify/README.verify: New file.
- 
- 2003-07-09  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* libjava.lang/SyncTest.java (run): Cache .class value.
- 
- 2003-06-08  Roger Sayle  <roger@eyesopen.com>
- 
- 	* libjava.lang/MathBuiltin.java: New test case.
- 	* libjava.lang/MathBuiltin.out: New file.
- 
- 2003-06-05  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/mauve.exp (test_mauve): Add -wno-deprecated to GCJ.
- 	
- 	PR libgcj/6181:
- 	* libjava.mauve/xfails: Remove getBeanInfo() failures.
- 
- 	PR libgcj/6293:
- 	* libjava.mauve/xfails: Remove PipedStream.close() failure.
- 
- 2003-05-31  Roger Sayle  <roger@eyesopen.com>
- 
- 	* libjava.lang/Overflow.java: New test.
- 	* libjava.lang/Overflow.out: New file.
- 
- 2003-05-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/verify.java: New file.
- 	* libjava.lang/verify.out: New file.
- 
- 2003-05-01  Tom Tromey  <tromey@redhat.com>
- 
- 	PR java/10459:
- 	* libjava.compile/pr10459_2.java: New file.
- 	* libjava.compile/pr10459.java: New file.
- 
- 2003-04-30  Tom Tromey  <tromey@redhat.com>
- 
- 	PR libgcj/10582:
- 	* libjava.lang/assign.java: New file.
- 	* libjava.lang/assign.out: New file.
- 
- 2003-04-16  Mark Mitchell  <mark@codesourcery.com>
- 
- 	PR middle-end/8866
- 	* libjava.lang/PR8866.java: New test.
- 
- 2003-04-16  Andrew Haley  <aph@redhat.com>
- 
- 	* libjava.lang/Throw_2.java (main): Make a successful test produce
- 	some output.
- 
- 2003-03-22  Andreas Tobler <a.tobler@schweiz.ch>
- 
- 	* libjava.jni/jni.exp: Add compilation/link fix dor darwin dylibs.
- 
- 2003-03-22  Tom Tromey  <tromey@redhat.com>
- 
- 	* lib/libjava.exp (gcj_invoke): Moved...
- 	* libjava.jni/jni.exp: ...from here.
- 
- 	* libjava.cni/shortfield.out: New file.
- 	* libjava.cni/shortfield.java: New file.
- 	* libjava.cni/natshortfield.cc: New file.
- 	* libjava.cni/natlongfield.cc: New file.
- 	* libjava.cni/longfield.out: New file.
- 	* libjava.cni/longfield.java: New file.
- 
- 	* libjava.cni/cni.exp: New file.
- 
- 2003-03-11  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/initfield.java: New file.
- 	* libjava.lang/initfield.out: New file.
- 
- 2003-03-08  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/initfield.java: New file.
- 	* libjava.lang/initfield.out: New file.
- 
- 2003-03-10  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.xfail: Updated to reflect reality.
- 
- 2003-03-02  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/xfails: Remove all AcuniaPropertiesTest failures
- 
- 2003-02-23  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.xfail: Most 4.7.10 tests pass now.
- 
- 2003-02-16  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* libjava.lang/CompareNaN.java: New test.
- 	* libjava.lang/CompareNaN.out: New test.
- 
- 2003-02-16  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/xfails: Add Class.reflect2 and String.getBytes FAILs.
- 
- 2003-02-15  Mark Wielaard  <mark@klomp.org>
- 
- 	* lib/libjava.exp (test_libjava_from_javac): Use regsub not string map.
- 	* libjava.mauve/mauve.exp (mauve_compute_uses): Likewise.
- 	(test_mauve): Likewise.
- 
- 2003-02-14  Mark Wielaard  <mark@klomp.org>
- 
- 	* lib/libjava.exp (test_libjava_from_javac): Don't create .o files
- 	containing $ characters and always quote class files with "'"s.
- 
- 2003-02-14  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/mauve.exp (mauve_compute_uses): Add inner class
- 	object files by changing all occurances of $ to ^.
- 	(test_mauve): Replace ^ with $ for class file names and quote
- 	them with "'"s.
- 
- 2003-02-13  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.mauve/xfails: Added entries for an unimplemented Class
- 	method.
- 
- 2003-02-07  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/xfails: Add new entries for
- 	gnu.testlet.java.text.CollationElementIterator.jdk11
- 
- 2003-02-03  Ulrich Weigand  <uweigand@de.ibm.com>
- 
- 	* libjava.jacks/jacks.exp (gcj_jacks_write): Set LD_LIBRARY_PATH
- 	to find libgcc_s.  Set JAVA_CLASSPATH to find libgcj.jar.
- 
- 2003-01-31  Mark Wielaard  <mark@klomp.org>
- 
- 	* lib/libjava.exp (libjava_prune_warnings): Remove all unreachable
- 	bytecode warnings.
- 
- 2003-01-28  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.loader/TestEarlyGC.java: Added comment explaining
- 	bytecode.
- 
- 	* libjava.jacks/jacks.xfail: More lexer tests now pass.
- 
- 2003-01-27  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/consthrow.java: New file.
- 	* libjava.compile/consthrow.xfail: New file.
- 
- 2003-01-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
- 
- 	* libjava.lang/pr8823.xfail: New file, add "xfail-byte".
- 
- 2003-01-24  Ranjit Mathew  <rmathew@hotmail.com>
- 
- 	* libjava.jni/calls.c (Java_calls_docall): Define with
- 	JNIEXPORT and JNICALL method attributes.
- 	* libjava.jni/field.c (Java_field_fetch): Likewise.
- 	* libjava.jni/final_method.c (Java_final_1method_meth): Likewise.
- 	* libjava.jni/findclass.c (Java_findclass_doit): Likewise.
- 	* libjava.jni/invoke.c (Java_invoke_val): Likewise.
- 	* libjava.jni/martin.c (Java_martin_myNative): Likewise.
- 	* libjava.jni/noclass.c (Java_noclass_find_1it): Likewise.
- 	* libjava.jni/overload.c (Java_overload_over__I): Likewise.
- 	(Java_overload_over__II): Likewise.
- 	* libjava.jni/register.c (JNI_OnLoad): Likewise.
- 	* libjava.jni/simple_int.c (Java_simple_1int_nat): Likewise.
- 	* libjava.jni/throwit.c (Java_throwit_throwit): Likewise.
- 	* libjava.jni/virtual.c (Java_virtual_equals): Likewise.
- 
- 2003-01-21  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.xfail: All 8.4.3 tests and 9.4-modifier-10
- 	now pass.
- 
- 2003-01-12  Tom Tromey  <tromey@redhat.com>
- 
- 	Fix for PR libgcj/9139:
- 	* lib/libjava.exp (find_javac): Put value of libgcj_jar into
- 	return value when gcj is used.
- 	* libjava.mauve/mauve.exp (test_mauve): Use libgcj_jar global.
- 
- 2003-01-03  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/pr8712.java: New file, for PR java/8712.
- 
- 2003-01-01  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/pr8955.java: New test, for PR java/8955.
- 
- 2002-12-19  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.xfail: Updated.
- 
- 2002-12-18  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/pr8945.java: New file.
- 	* libjava.lang/pr8945.out: New file.
- 
- 2002-12-12  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.loader/loader.exp (gcj_loader_test_one): Use
- 	libjava_prune_warnings.
- 	(gcj_loader_run): Likewise.
- 	* libjava.mauve/mauve.exp (test_mauve): Use
- 	libjava_prune_warnings.
- 	(test_mauve_sim): Likewise.
- 	* libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Use
- 	libjava_prune_warnings.
- 	(gcj_jni_build_header): Likewise.
- 	* lib/libjava.exp (libjava_prune_warnings): New proc.
- 	(gcj_link): Use it.
- 	(test_libjava_from_source): Likewise.
- 	(test_libjava_from_javac): Likewise.
- 
- 2002-12-08  Tom Tromey  <tromey@redhat.com>
- 
- 	Test for PR libgcj/8823:
- 	* libjava.lang/pr8823.java: New file.
- 	* libjava.lang/pr8823.out: New file.
- 
- 2002-12-05  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/override.java: New file.
- 	* libjava.lang/override.out: New file.
- 
- 2002-12-01  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.exp (gcj_jacks_setup_xfail): New function.
- 	(gcj_jacks_parse): Use it; set up xfails.
- 	* libjava.jacks/jacks.xfail: New file.
- 
- 2002-12-01  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/xfails: Remove Inspector FAILs that now PASS.
- 
- 2002-11-21  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/8676:
- 	* libjava.lang/pr8676.java: New file.
- 	* libjava.lang/pr8676.out: New file.
- 
- 2002-11-21  Ulrich Weigand  <uweigand@de.ibm.com>
- 
- 	* libjava.loader/loader.exp (gcj_loader_test_one): Fix typo in
- 	'type' argument to libjava_tcompile.
- 	(gcj_loader_run): Use libjava_tcompile instead of running
- 	GCJ_UNDER_TEST directly.
- 
- 2002-11-05  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jacks/jacks.exp: New file.
- 
- 2002-11-04  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/pr7912.java: New file.
- 
- 2002-11-04  Andrew Haley  <aph@redhat.com>
- 
- 	* libjava.lang/utilTest.java: New.
- 	* libjava.lang/utilTest.out: New.
- 
- 2002-11-04  Anthony Green  <green@redhat.com>
- 
- 	* libjava.loader/MyLoader.java: New constructor.
- 	* libjava.loader/TestParent.java: New file.
- 	* libjava.loader/TestParent.out: New file.
- 
- 2002-11-04  Anthony Green  <green@redhat.com>
- 
- 	* libjava.loader/TestEarlyGC.java,
- 	libjava.loader/TestEarlyGC.out: New files (from
- 	Jeff Sturm).
- 
- 2002-11-04  Anthony Green  <green@redhat.com>
- 
- 	* libjava.loader/dummy.java, libjava.loader/loader.exp,
- 	libjava.loader/MyLoader.java, libjava.loader/TestLeak.java,
- 	libjava.loader/TestLeak.out, libjava.loader/TestMultiple.java,
- 	libjava.loader/TestMultiple.out: New files.
- 
- 2002-11-02  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/initexc.java (fail): Static initializers must be
- 	able to complete normally.  From Eric Blake.
- 
- 	* libjava.lang/initexc.java: New file.
- 	* libjava.lang/initexc.out: New file.
- 
- 2002-11-01  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/8415:
- 	* libjava.lang/pr8415.java: New file.
- 	* libjava.lang/pr8415.out: New file.
- 
- 	* libjava.mauve/mauve.exp (find_mauve_sources): New proc.
- 	(test_mauve): Use it.
- 	(test_mauve_sim): Likewise.
- 
- 2002-10-24  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/Primes.java: Removed.
- 	* libjava.lang/Primes.out: Removed.
- 
- 2002-10-23  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/6388:
- 	* libjava.lang/pr6388.java: New file.
- 	* libjava.lang/pr6388.out: New file.
- 
- 2002-10-15  Andrew Haley  <aph@redhat.com>
- 
- 	* libjava.lang/EvaluationOrder.java (EvaluationOrder): New.
- 	* libjava.lang/EvaluationOrder.out (EvaluationOrder): New.
- 
- 2002-10-14  Andrew Haley  <aph@redhat.com>
- 
- 	* libjava.lang/StaticConstructor.java: New.
- 	* libjava.lang/StaticConstructor.out: New.
- 
- 2002-10-13  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/xfails: Remove tests that now XPASS.
- 
- 2002-10-03  Andrew Haley  <aph@redhat.com>
- 
- 	* libjava.lang/Array_3.java (baz): New.
- 	(main): Call baz.
- 
- 2002-09-29  Anthony Green  <green@redhat.com>
- 
- 	* libjava.lang/TestProxy.java: New file.
- 	* libjava.lang/TestProxy.out: Ditto.
- 
- 2002-09-29  Anthony Green  <green@redhat.com>
- 
- 	* libjava.lang/utf8concat.java: New file.
- 	* libjava.lang/utf8concat.out: Ditto.
- 
- 2002-08-26  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/narrow_case.java: New file.
- 
- 2002-08-25  Adam Megacz <adam@xwt.org>
- 
- 	* lib/libjava.exp: don't apply -no-install when platform is mingw.
- 
- 2002-08-16  H.J. Lu <hjl@gnu.org>
- 
- 	* lib/libjava.exp (gcc_version): Removed.
- 	(libgcj_jar): New.
- 	(libjava_init): Set libgcj_jar with tcl glob.
- 	(libjava_arguments): Use libgcj_jar.
- 
- 2002-07-22  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/zeroexp.java: New file.
- 
- 2002-07-18  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
- 
- 	* libjava.compile/compile.exp: Sort sources.
- 	* libjava.jni/jni.exp (gcj_jni_run): Likewise.
- 	* libjava.lang/lang.exp: Likewise.
- 
- 2002-07-02  Andrew Haley  <aph@redhat.com>
- 
- 	* libjava.lang/inline.java: New file.
- 	* libjava.lang/inline.out: Likewise.
- 
- 	* libjava.lang/Array_3.java: Add another case.
- 
- 2002-06-23  Tom Tromey  <tromey@redhat.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (RUNTEST): Added AM_RUNTESTFLAGS.
- 	(AM_RUNTESTFLAGS): New variable.
- 	(RUNTESTFLAGS): Don't define.
- 	* lib/libjava.exp (libjava_invoke): New proc.
- 	(test_libjava_from_source): Use it.
- 	(test_libjava_from_javac): Likewise.
- 	(libjava_find_gij): New proc.
- 
- 2002-06-12  Tom Tromey  <tromey@redhat.com>
- 
- 	* lib/libjava.exp (test_libjava): Fixed typo.
- 	* libjava.compile/PR6865.xfail: New file.
- 
- 2002-06-11  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/PR6865.java: New file.  For PR java/6865.
- 
- 	* libjava.lang/PR6520.java: Fixed typo.
- 
- 2002-06-10  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/PR6520.java: New file.  For PR java/6520.
- 
- 2002-06-04  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/T20020604.java: New file.
- 
- 	For PR libgcj/6389:
- 	* libjava.mauve/xfails: Now passes System.getProperty test.
- 
- 	For PR java/1343 and PR java/6336:
- 	* libjava.compile/PR1343.java: New file.
- 
- 	For PR java/5913:
- 	* libjava.compile/PR5913.xfail: Removed.
- 
- 2002-05-29  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
- 
- 	* libjava.compile/T20020529.java: New file.
- 
- 2002-05-27  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
- 
- 	* libjava.lang/PR6820.java: New file.
- 	* libjava.lang/PR6820.out: New file.
- 
- 2002-05-23  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
- 
- 	* libjava.lang/PR6729.java: New file.
- 	* libjava.lang/PR6729.out: New file.
- 
- 2002-05-04  Mark Wielaard  <mark@klomp.org>
- 
- 	For PR java/6519:
- 	* libjava.lang/emptystring.java: New.
- 	* libjava.lang/emptystring.out: New.
- 
- 2002-04-21  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/xfail: Expect failures for PR java/6391 and
- 	libgcj/6389.
- 
- 2002-04-16  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.lang/negzero.java: New.
- 	* libjava.lang/negzero.out: New.
- 
- 2002-04-14  Mark Wielaard  <mark@klomp.org>
- 
-         * libjava.mauve/xfails: Expect failures for PR libgcj/6302 and
-         libgcj/6298.
- 
- 2002-04-14  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/xfails: Expect failures for PR libgcj/6293,
- 	libgcj/6295, libgcj/6296 and libgcj/6297.
- 
- 2002-04-12  Anthony Green  <green@redhat.com>
- 
- 	* lib/libjava.exp: Use libgcj-VERSION.jar, not libgcj.jar.
- 
- 2002-04-12  Loren J. Rittle <ljrittle@acm.org>
- 
- 	* libjava.lang/SyncGlobal.java, libjava.lang/SyncGlobal.out:
- 	New test case.
- 
- 2002-04-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
- 
- 	* libjava.lang/PR6204.java, libjava.lang/PR6204.out: New test case.
- 	* libjava.lang/PR6085.java, libjava.lang/PR6085.out: Likewise.
- 
- 2002-04-07  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/xfails: Add CASE_INSENSITIVE_ORDER, result was
- 	unspecified and test should be updated to match latest spec.
- 	Add AcuniaPropertiesTest, known bug #6219. Add test_getClassLoader,
- 	what we do seems to be not really right or wrong.
- 
- 2002-04-06  Mark Wielaard  <mark@klomp.org>
- 
- 	* libjava.mauve/mauve.exp: Use libgcj.jar not libgcj.zip.
- 	* libjava.mauve/xfails: add Character.classify12 (number 1),
- 	Character.getType (number 11), Character.getType (number 20) and
- 	Character.getType (number 22). We implement 1.4 Character.
- 
- 2002-03-28  Andrew Haley  <aph@redhat.com>
- 
- 	* libjava.lang/Throw_2.java: New.
- 	* libjava.lang/Throw_2.out: New.
- 
- 2002-03-27  Anthony Green  <green@redhat.com>
- 
- 	* libjava.lang/InvokeReturn.java: Modify test for targets
- 	which do not yet support reflection.
- 
- 2002-03-27  Anthony Green  <green@redhat.com>
- 
- 	* libjava.jni/jni.exp (gcj_jni_run): Fix cross build test.
- 
- 2002-03-27  Anthony Green  <green@redhat.com>
- 
- 	* lib/libjava.exp: Add the wrapper link options only when we're
- 	linking.
- 
- 2002-03-26  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.mauve/mauve.exp (test_mauve): Use correct stderr
- 	redirection code.
- 
- 2002-03-22  Eric Blake  <ebb9@email.byu.edu>
- 
- 	For PR java/6026:
- 	* libjava.compile/PR6026.java: New file.
- 
- 2002-03-21  Andrew Haley  <aph@redhat.com>
- 
- 	* libjava.lang/Thread_Interrupt.java (Looper.calibrate): New.
- 	(yields): New.
- 
- 2002-03-18  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jni/jni.exp (gcj_jni_test_one): Find libstdc++ in build
- 	tree.
- 	(gcj_invoke): Added ld_library_additions argument.
- 
- 2002-03-17  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jni/jni.exp (gcj_jni_build_header): Use local_exec, not
- 	target_compile.  Fixes PR other/5874.
- 
- 2002-03-15  Eric Blake  <ebb9@email.byu.edu>
- 
- 	For PR java/5902:
- 	* libjava.compile/PR5902.java: Does not need to execute.
- 	For PR java/5913:
- 	* libjava.compile/PR5913.java: Ditto.
- 
- 2002-03-12  Tom Tromey  <tromey@redhat.com>
- 
- 	Test for PR java/5848:
- 	* libjava.compile/PR5848.xfail: New file.
- 	* libjava.compile/PR5848.java: New file.
- 
- 2002-03-12  Eric Blake  <ebb9@email.byu.edu>
- 
- 	* libjava.compile/PR5913.java: Expand test.
- 
- 2002-03-11  Eric Blake  <ebb9@email.byu.edu>
- 
- 	* libjava.compile/PR5902.java: New file.
- 	* libjava.compile/PR5913.java: New file.
- 	* libjava.compile/PR5913.xfail: New file.
- 
- 2002-02-23  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* libjava.lang/InvokeReturn.java: New file.
- 	* libjava.lang/InvokeReturn.out: New file.
- 
- 2002-02-20  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
- 
- 	* lib/libjava.exp: Add "xfail-byte-output" and "xfail-source-output".
- 	Don't display expected and actual output for a failed output test.
- 
- 	* libjava.lang/ArrayStore.java: New file.
- 	* libjava.lang/ArrayStore.out: New file.
- 	* libjava.lang/ArrayStore.xfail: New file. xfail-byte-output.
- 	* libjava.lang/ArrayStore2.java: New file.
- 	* libjava.lang/ArrayStore2.out: New file.
- 	* libjava.lang/ArrayStore2.xfail: New file. xfail-source-output.
- 
- 	* libjava.lang/stringconst.xfail: xfail-output -> xfail-source-output.
- 
- 2002-02-18  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
- 
- 	* libjava.lang/err7.xfail: Removed.
- 	* libjava.lang/err8.xfail: Removed.
- 	
- 	* libjava.lang/ArrayStore.java: New file.
- 	* libjava.lang/ArrayStore.out: New file.
- 
- 2002-02-10  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/5641:
- 	* libjava.compile/PR5641.xfail: New file.
- 	* libjava.compile/PR5641.java: New file.
- 
- 2002-02-10  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
- 
- 	* lib/libjava.exp (libjava_find_lib): Remove duplicate .la files.
- 
- 2002-01-05  H.J. Lu <hjl@gnu.org>
- 
- 	* libjava.jni/jni.exp: Add -I.. for generated header.
- 
- 2001-12-20  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/4766:
- 	* libjava.compile/PR4766.java: New file.
- 
- 2001-12-20  Andrew Haley  <aph@redhat.com>
- 
- 	* libjava.lang/FileHandleGcTest.out:  New file.
- 	* libjava.lang/FileHandleGcTest.java: New file.
- 	* libjava.lang/Array_3.out: New file.
- 	* libjava.lang/Array_3.java: New file.
- 
- 2001-12-18  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR java/3417:
- 	* libjava.compile/PR3417.xfail: New file.
- 	* libjava.compile/PR3417.java: New file.
- 
- 2001-12-17  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/PR3731.xfail: Removed.
- 
- 	Inspired by PR java/5057:
- 	* libjava.lang/PR5057_2.java: New file.
- 	* libjava.lang/PR5057_2.out: New file.
- 
- 	For PR java/5057:
- 	* libjava.lang/PR5057.out: New file.
- 	* libjava.lang/PR5057.java: New file.
- 
- 2001-12-13  Tom Tromey  <tromey@redhat.com>
- 
- 	For PR libgcj/5103:
- 	* libjava.jni/cxxtest.out: New file.
- 	* libjava.jni/cxxtest.cc: New file.
- 	* libjava.jni/cxxtest.java: New file.
- 	* libjava.jni/jni.exp (gcj_jni_test_one): If there is no .c file,
- 	assume there is a .cc file.
- 
- 2001-12-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
- 
- 	* libjava.lang/PR3731.out: Adjust output to reflect that "instanceof"
- 	shouldn't trigger class initialization.
- 
- 2001-12-06  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/BlankFinal.java: Removed; incorrect test.
- 
- 2001-11-02  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
- 
- 	* libjava.lang/TLtest.xfail: New file. Needs threads.
- 
- 2001-10-04  Alexandre Petit-Bianco  <apbianco@redhat.com>
- 
- 	* libjava.lang/PR3096.java: New file.
- 	* libjava.lang/PR3096.out: Likewise.
- 
- 2001-09-27  Alexandre Petit-Bianco  <apbianco@redhat.com>
- 
- 	* libjava.compile/final_initialization_in_ctor.java: New file
- 
- 2001-08-28  Alexandre Petit-Bianco  <apbianco@redhat.com>
- 
- 	* libjava.compile/final_assignment_check.java: New file.
- 	* libjava.compile/final_assignment_check.xfail: Likewise.
- 	* libjava.compile/final_local_switch.java: Likewise.
- 	
- 2001-08-24  Alexandre Petit-Bianco  <apbianco@redhat.com>
- 
- 	* libjava.lang/KeepInline.out: Fixed content.
- 
- 2001-08-17  Alexandre Petit-Bianco  <apbianco@redhat.com>
- 
- 	* libjava.compile/XercesBug.java: New file.
- 
- 2001-08-12  Alexandre Petit-Bianco  <apbianco@redhat.com>
- 	
- 	* libjava.lang/Matrix4f.java: New file.
- 	* libjava.lang/Matrix4f.out: New file.
- 
- 2001-08-03  Richard Henderson  <rth@redhat.com>
- 
- 	* libjava.jni/calls.c (Java_calls_docall): Fix typo.
- 
- 2001-08-01  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* libjava.lang/KeepInline.java: New file.
- 	* libjava.lang/KeepInline.out: New file.
- 
- 2001-07-30  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* libjava.lang/SyncTest.java: New file.
- 	* libjava.lang/SyncTest.out: New file.
- 	* libjava.lang/SyncTest.xfail: New file.
- 
- 2001-07-27  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
- 
- 	* lib/libjava.exp (${tool}_set_ld_library_path): New, copied from
- 	g++.exp.
- 
- 2001-07-19  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* libjava.lang/PR3731.java: New file.
- 	* libjava.lang/PR3731.out: New file.
- 	* libjava.lang/PR3731.xfail: New file.
- 
- 2001-07-12  Alexandre Petit-Bianco  <apbianco@redhat.com>
- 
- 	* libjava.compile/anon_ctor_itf_arg.java: Moved to `libjava.lang.'
- 	* libjava.compile/anon_ctor_itf_arg.out: Likewise
- 	* libjava.lang/invoke_from_inner.java: New file.
- 	* libjava.lang/invoke_from_inner.out: Likewise.
- 
- 2001-07-12  Alexandre Petit-Bianco  <apbianco@redhat.com>
- 
- 	* libjava.compile/anon_ctor_itf_arg.java: New file.
- 	* libjava.compile/anon_ctor_itf_arg.out: New file.
- 
- 2001-07-12  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/N19990310_4.xfail: Removed.
- 
- 2001-07-10  Alexandre Petit-Bianco  <apbianco@readhat.com>
- 
- 	* libjava.lang/TLtest.java: New file.
- 	* libjava.lang/TLtest.out: New file.
- 
- 2001-07-06  Andrew Haley  <aph@cambridge.redhat.com>
- 
- 	* libjava.lang/Divide_1.java: Add many more test cases.
- 	* libjava.lang/Divide_1.out: Likewise.
- 
- 2001-07-03  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* libjava.lang/II.java: New file.
- 	* libjava.lang/II.out: New file.
- 
- 2001-06-25  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/stub.xfail: Removed.
- 
- 2001-06-24  Andreas Jaeger  <aj@suse.de>
- 
- 	* libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Fix path for
- 	jni.h.
- 
- 2001-06-14  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jni/jni.exp: New file.
- 	* lib/libjava.exp (gcj_link): New proc.
- 
- 2001-06-08  Tom Tromey  <tromey@redhat.com>
- 
- 	Fix for PR libgcj/2874:
- 	* libjava.mauve/mauve.exp (gcj_run_mauve_tests): New proc.
- 	(test_mauve): Return 0 on failure.
- 	* lib/libjava.exp (test_libjava_from_source): Remove generated
- 	files if test is successful.
- 	(test_libjava_from_javac): Likewise.
- 	(gcj_cleanup): New proc.
- 
- 2001-06-05  Jeff Sturm  <jsturm@one-point.com>
- 
- 	* lib/libjava.exp (libjava_arguments): Build with `-no-install'
- 	when $mode == "link".
- 
- 2001-06-02  Anthony Green  <green@redhat.com>
- 
- 	* libjava.lang/invokethrow.java: Fake a pass for systems which
- 	don't support invocation.
- 
- 2001-05-30  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/invokethrow.out: New file.
- 	* libjava.lang/invokethrow.java: New file.
- 
- 2001-05-03  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/Thread_Wait_Interrupt.xfail: New file.
- 	* libjava.lang/Thread_Wait_2.xfail: New file.
- 	* libjava.lang/Thread_Wait.xfail: New file.
- 	* libjava.lang/Thread_Sleep.xfail: New file.
- 	* libjava.lang/Thread_Monitor.xfail: New file.
- 	* libjava.lang/Thread_Join.xfail: New file.
- 	* libjava.lang/Thread_Interrupt.xfail: New file.
- 	* libjava.lang/Thread_Alive.xfail: New file.
- 	* lib/libjava.exp (libjava_init): Set global
- 	libjava_uses_threads.
- 	(test_libjava): Document `need-threads' tag.
- 	(test_libjava_from_source): handle need-threads tag.
- 	(test_libjava_from_javac): Likewise.
- 
- 2001-05-03  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/err11.xfail: Removed.
- 
- 2001-04-25  Tom Tromey  <tromey@redhat.com>
- 
- 	* lib/libjava.exp (libjava_init): Use UTF-8 encoding.
- 	(test_libjava_from_javac): Likewise.
- 
- 2001-04-09  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/pr83.xfail: Removed.
- 	* libjava.lang/Shazam.xfail: Removed.
- 	* libjava.lang/PR162.xfail: Removed.
- 	* libjava.compile/PR375.xfail: Removed.
- 	* libjava.compile/PR208.xfail: Removed xfail-byte.
- 	* libjava.compile/PR207.xfail: Removed xfail-byte.
- 
- 2001-04-07  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/weirddecl.xfail: Removed xfail-*.
- 	* libjava.compile/PR374.xfail: Removed.
- 
- 2001-03-29  Alexandre Petit-Bianco  <apbianco@redhat.com>
- 
- 	* libjava.lang/instinit2.out: Fixed.
- 
- 2001-03-22  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jni/field.out: New file.
- 	* libjava.jni/field.c: New file.
- 	* libjava.jni/field.java: New file.
- 
- 2001-03-20  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/uesc.java: New file.
- 	* libjava.compile/uesc.xfail: New file.
- 
- 2001-03-16  Tom Tromey  <tromey@redhat.com>
- 
- 	* lib/libjava.exp (libjava_arguments): Rewrote computation of
- 	LD_LIBRARY_PATH.  Add gcc build directory if it contains
- 	libgcc_s.so.
- 
- 2001-03-14  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.compile/assignment.xfail: Removed.
- 	* libjava.compile/assignment_2.xfail: Removed.
- 
- 2001-02-08  Warren Levy  <warrenl@redhat.com>
- 
- 	* libjava.mauve/mauve.exp: Added support for XFAILs.
- 	* libjava.mauve/xfails: New file.
- 
- 2001-01-26  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.jni/martin.c (Java_martin_myNative): Flush stdout.
- 
- 	* libjava.jni/martin.out: New file.
- 	* libjava.jni/martin.c: New file.
- 	* libjava.jni/martin.java: New file.
- 
- 2001-01-16  Richard Henderson  <rth@redhat.com>
- 
- 	* lib/libjava.exp (bytecompile_file): Don't unset CLASSPATH.
- 	(libjava_arguments): Use .jar extension for libgcj.
- 
- 2001-01-08  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.compile/SuperConstr.java: New test case.
- 
- 2000-12-18  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.mauve/mauve.exp (test_mauve): Don't look for exceptions
- 	thrown in the test harness.
- 	(test_mauve_sim): Likewise.
- 
- 2000-12-16  Tom Tromey  <tromey@redhat.com>
- 
- 	* lib/libjava.exp (test_libjava_from_javac): Strange quoting trick
- 	for `.class' link case.
- 	(bytecompile_file): Change directory outside of `catch'.
- 
- 	* libjava.lang/Thread_1.java: Removed.
- 	* libjava.lang/Thread_1.out: Likewise.
- 
- 	* libjava.lang/N19990310_4.xfail: New file.
- 	* libjava.lang/stub.xfail: Added new failure modes.
- 	* libjava.lang/stringconst.xfail: New file.
- 	* libjava.lang/PR162.xfail: New file.
- 	* libjava.lang/Final.xfail: Removed.
- 
- 2000-12-15  Tom Tromey  <tromey@redhat.com>
- 
- 	* libjava.lang/instinit.out: Removed erroneous line.
- 
- 	* libjava.lang/Thread_1.out: Expect `0' active count.
- 
- 	* libjava.lang/stub.xfail: New file.
- 	* libjava.lang/pr83.xfail: New file.
- 	* libjava.lang/err8.xfail: New file.
- 	* libjava.lang/err7.xfail: New file.
- 	* libjava.lang/Shazam.xfail: New file.
- 	* libjava.lang/err11.xfail: New file.
- 
- 	* libjava.lang/instinit2.java: Renamed class to `instinit2'.
- 
- 	* libjava.lang/anon3.out: Fixed typo.
- 
- 	* libjava.lang/Class_1.java (main): Uncommented out previously
- 	failing code; now it works
- 
- 	* lib/libjava.exp (libjava_tcompile): New proc.
- 	(test_libjava_from_source): Use it.
- 	(test_libjava_from_javac): Likewise.
- 	(find_javac): New proc.
- 	(bytecompile_file): Use it.
- 	(test_libjava_from_javac): Handle `xfail-gcjC' tag.  If no-exec
- 	set, then don't link even if program has a `main'.
- 
- 	* libjava.compile/static_3.xfail: New file.
- 	* libjava.compile/weirddecl.xfail: New file.
- 	* libjava.compile/static_2.xfail: New file.
- 	* libjava.compile/not_a_redef.xfail: New file.
- 	* libjava.compile/inner_1.xfail: New file.
- 	* libjava.compile/assignment_2.xfail: New file.
- 	* libjava.compile/assignment.xfail: New file.
- 	* libjava.compile/abstr.xfail: New file.
- 	* libjava.compile/PR375.xfail: New file.
- 	* libjava.compile/PR374.java: New file.
- 	* libjava.compile/PR238.xfail: New file.
- 	* libjava.compile/PR208.xfail: New file.
- 	* libjava.compile/PR207.xfail: New file.
- 
- 2000-11-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/instinit.java: Don't extend `foo'.
- 
- 2000-11-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/weirddecl.java: New file.
- 
- Fri Nov 24 11:25:20 2000  Anthony Green  <green@redhat.com>
- 
- 	* lib/libjava.exp (bytecompile_file): Change default from javac to
- 	gcj -C.
- 	(libjava_arguments): Fix classpath.
- 
- 	* libjava.compile/PR129_B.no-link: New file.
- 
- 2000-11-24  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/PR375.java: New file.  For PR gcj/375.
- 
- 	* libjava.compile/PR374.java: New file.  For PR gcj/374.
- 
- 2000-11-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/sjis_comment3.java: Removed.
- 	* libjava.compile/sjis_comment2.java: Removed.
- 	* libjava.compile/sjis_comment1.java: Removed.
- 	* libjava.compile/euc_comment3.java: Removed.
- 	* libjava.compile/euc_comment2.java: Removed.
- 	* libjava.compile/euc_comment1.java: Removed.
- 
- 2000-11-03  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (libjava_arguments): Set --tag on libtool
- 	invocation.
- 
- Sun Oct  8 19:14:05 2000  Anthony Green  <green@redhat.com>
- 
- 	* libjava.compile/ArrayClass.java: New file.
- 
- 2000-08-31  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/abstr.xfail: New file.
- 	* libjava.compile/abstr.java: New file.
- 
- 2000-08-09  Tom Tromey  <tromey@cygnus.com>
- 
- 	From PR gcj/310:
- 	* libjava.compile/PR310.java: New file.
- 	* libjava.compile/PR310.xfail: New file.
- 
- 2000-07-30  Anthony Green  <green@redhat.com>
- 
- 	* libjava.compile/PR295.java: New file.
- 	See PR gcj/295.
- 
- 2000-07-11  Andrew Haley  <aph@cygnus.com>
- 
- 	* libjava.compile/static_init2.java: New file.
- 
- 2000-07-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/stringconst2.out: New file.
- 	* libjava.lang/stringconst2.java: New file.
- 
- 2000-06-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	For PR gcj/260:
- 	* libjava.lang/PR260.out: New file.
- 	* libjava.lang/PR260.java: New file.
- 
- 2000-06-13  Warren Levy  <warrenl@cygnus.com>
- 
- 	Test for PR java.lang/258:
- 	* libjava.lang/Class_1.java: New file.
- 	* libjava.lang/Class_1.out: New file.
- 
- 2000-05-29  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.lang/PR242.java: New file. PR gcj/242.
- 
- 2000-05-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/PR238.java: New file.  For PR gcj/238.
- 
- 	* libjava.lang/stringconst.out: New file.
- 	* libjava.lang/stringconst.java: New file.
- 
- 2000-05-22  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.compile/PR232B.java: Additional PR gcj/232 test.
- 
- 2000-05-22  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/PR235.java: New file.  For PR gcj/235.
- 
- 2000-05-21  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/PR234.java: New file.  For PR gcj/234.
- 
- 2000-05-22  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Test for PR gcj/232:
- 	* libjava.compile/PR232.java: New file.
- 
- 2000-05-18  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (bytecompile_file): Use exec, not system.
- 
- 2000-05-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.mauve/mauve.exp (test_mauve): Call `prune_warnings'.
- 	(test_mauve_sim): Likewise.
- 	(test_mauve): Redirect stderr in system call.
- 	(test_mauve_sim): Likewise.
- 	* lib/libjava.exp (test_libjava_from_source): Call
- 	`prune_warnings'.
- 	(test_libjava_from_javac): Likewise.
- 	(bytecompile_file): Redirect stderr in system call.
- 	* lib/libjava.exp (libjava_find_program): New proc.
- 	(find_jvscan): Use it.
- 	(find_gcjh): New proc.
- 
- 	* libjava.compile/compile.exp: Use "", not $options.
- 
- 2000-05-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/instance.out: New file.
- 	* libjava.lang/instance.java: New file.
- 
- 2000-05-10  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.lang/StringBuffer_1.java: New file.
- 	* libjava.lang/StringBuffer_1.out: New file.
- 
- 2000-05-08  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Test for PR gcj/224:
- 	* libjava.compile/PR224.java: New file.
- 	* libjava.compile/PR224.xfail: New file.
- 
- 2000-04-28  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Test for PR gcj/218:
- 	* libjava.lang/PR218.java: New file.
- 	* libjava.lang/PR218.out: New file.
- 
- 2000-04-25  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* libjava.compile/MethodFailure4.java: New file.
- 	* libjava.compile/MethodFailure4.out: New file.
- 
- 2000-04-20  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* libjava.compile/block.java: New file.
- 	* libjava.compile/block.out: New file.
- 
- 2000-04-20  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.jni/throwit.out: Fixed output to be correct.
- 
- 	* libjava.jni/noclass.java (main): `find_it' throws an exception.
- 
- 2000-04-16  Anthony Green  <green@redhat.com>
- 
- 	* libjava.compile/PR209.java: New file.
- 
- 2000-04-16  Anthony Green  <green@redhat.com>
- 
- 	* libjava.compile/PR208.java: New file.
- 
- 2000-04-16  Anthony Green  <green@redhat.com>
- 
- 	* libjava.compile/PR207.java: New file.
- 	libjava.compile/PR207_A.java: New file.
- 	libjava.compile/PR206.java: New file.
- 	libjava.compile/PR206_A.java: New file.
- 
- 2000-04-14  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Additional test for PR gcj/148:
- 	* libjava.compile/assignment_2.java: New file.
- 
- 2000-03-28  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Test case for PR libgcj/184:
- 	* libjava.lang/pr184.java: New file.
- 	* libjava.lang/pr184.out: New file.
- 
- 2000-03-27  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/test_long.out: New file.
- 	* libjava.lang/test_long.java: New file.
- 
- 2000-03-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Array_1.xfail: Removed.
- 
- 2000-03-23  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.lang/Thread_Wait.java: New file.
- 	* libjava.lang/Thread_Sleep.java: New file.
- 	* libjava.lang/Thread_Monitor.java: New file.
- 	* libjava.lang/Thread_Wait.out: New file.
- 	* libjava.lang/Thread_Sleep.out: New file.
- 	* libjava.lang/Thread_Monitor.out: New file.
- 	* libjava.lang/Thread_Interrupt.java: New file.
- 	* libjava.lang/Thread_Wait_2.java: New file.
- 	* libjava.lang/Thread_Wait_2.out: New file.
- 	* libjava.lang/Thread_Wait_Interrupt.java: New file.
- 	* libjava.lang/Thread_Wait_Interrupt.out: New file.
- 	* libjava.lang/Thread_Interrupt.out: New file.
- 	* libjava.lang/Thread_Join.java: New file.
- 	* libjava.lang/Thread_Join.out: New file.
- 	* libjava.lang/Thread_Alive.java: New file.
- 	* libjava.lang/Thread_Alive.out: New file.
- 
- 2000-03-22  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/iface.java: New file.
- 	* libjava.compile/static_3.java: New file.
- 	* libjava.compile/static_2.java: New file.
- 	* libjava.compile/static_1.xfail: New file.
- 	* libjava.compile/static_1.java: New file.
- 	* libjava.compile/redef6.xfail: New file.
- 	* libjava.compile/redef6.java: New file.
- 	* libjava.compile/redef5.xfail: New file.
- 	* libjava.compile/redef5.java: New file.
- 	* libjava.compile/redef4.xfail: New file.
- 	* libjava.compile/redef4.java: New file.
- 	* libjava.compile/redef3.xfail: New file.
- 	* libjava.compile/redef3.java: New file.
- 	* libjava.compile/redef2.xfail: New file.
- 	* libjava.compile/redef2.java: New file.
- 	* libjava.compile/redef1.xfail: New file.
- 	* libjava.compile/redef1.java: New file.
- 	* libjava.compile/not_a_redef.java: New file.
- 	* libjava.compile/inner_1.java: New file.
- 	* libjava.compile/static_init.xfail: New file.
- 	* libjava.compile/static_init.java: New file.
- 
- 2000-03-21  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Test case for PR libgcj/179:
- 	* libjava.lang/pr179.java: New file.
- 	* libjava.lang/pr179.out: New file.
- 
- 2000-03-18  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/pr109.java: Added `println' at end.
- 
- 2000-03-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/pr176.java: New file, for PR gcj/176.
- 
- 2000-03-15  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.compile/pr172.java: Correct classname to match file name.
- 	* libjava.compile/pr174.java: ditto. Remove superfluous main()
- 	method.
- 	* libjava.compile/PR140.xfail: New file.
- 
- 2000-03-14  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/PR140.java: New file, for PR gcj/140.
- 
- 	* libjava.compile/pr172.java: New file, for PR gcj/172.
- 
- 	* libjava.compile/pr174.java: New file, for PR gcj/174.
- 
- 2000-03-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/PR162.java: Mention `PR162', not `Test', as class
- 	name.
- 
- 2000-03-07  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	Test for PR gcj/163:
- 	* libjava.lang/PR163.java: New file.
- 	* libjava.lang/PR163.xfail: New file.
- 
- 2000-03-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (test_libjava_from_javac): Removed hack for
- 	interfaces.  Fail if jv-scan reports a parse error.
- 
- 	Test for PR gcj/162:
- 	* libjava.lang/PR162.out: New file.
- 	* libjava.lang/PR162.java: New file.
- 
- 2000-03-06  Tom Tromey  <tromey@cygnus.com>
- 
- 	Test for PR gcj/164:
- 	* libjava.compile/PR164.xfail: New file.
- 	* libjava.compile/PR164.java: New file.
- 
- 2000-03-06  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.compile/PR127.java: New file.
- 	* libjava.compile/PR127.xfail: New file.
-         PR 127 test case from Joerg Brunsmann.
- 
- 2000-03-05  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (test_libjava): Document `shouldfail' token.
- 	(test_libjava_from_source): Handle `shouldfail' case.
- 	(test_libjava_from_javac): Likewise.
- 
- 	Test for PR libgcj/124:
- 	* libjava.compile/PR124.java: New file.
- 	* libjava.compile/PR124.xfail: New file.
- 
- 2000-03-05  Anthony Green  <green@redhat.com>
- 
- 	* libjava.lang/PR141.java: New file.
- 	* libjava.lang/PR141.out: New file.
- 	For PR java.io/141.
- 
- 2000-03-05  Anthony Green  <green@redhat.com>
- 
- 	* libjava.compile/PR129_B.java: New file.
- 	* libjava.compile/support/PR129_A.java: New file.
- 	For PR gcj/129.
- 
- 2000-03-04  Anthony Green  <green@redhat.com>
- 
- 	* libjava.lang/PR160.java: New file.
- 	* libjava.lang/PR160.out: New file.
- 
- 2000-02-28  Mo DeJong <mdejong@cygnus.com>
- 
- 	* libjava.compile/static_inner.java: New file.
- 
- 2000-02-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.jni/noclass.c: New file.
- 	* libjava.jni/noclass.out: New file.
- 	* libjava.jni/noclass.java: New file.
- 
- 2000-02-18  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.jni/register.java: New file.
- 	* libjava.jni/register.c: New file.
- 	* libjava.jni/register.out: New file.
- 
- 2000-02-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.jni/calls.c: New file.
- 	* libjava.jni/calls.out: New file.
- 	* libjava.jni/calls.java: New file.
- 
- 	* libjava.jni/throwit.java: New file.
- 	* libjava.jni/throwit.c: New file.
- 	* libjava.jni/throwit.out: New file.
- 
- 2000-02-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.jni/findclass.java: New file
- 	* libjava.jni/findclass.c: New file
- 	* libjava.jni/findclass.out: New file
- 
- 2000-02-16  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.lang/InterfaceDispatch.java: New file.
- 	* libjava.lang/InterfaceDispatch.out: New file.
- 
- 2000-02-15  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.jni/virtual.java: New file.
- 	* libjava.jni/virtual.c: New file.
- 	* libjava.jni/virtual.out: New file.
- 	* libjava.jni/final_method.java: New file.
- 	* libjava.jni/final_method.c: New file.
- 	* libjava.jni/final_method.out: New file.
- 	* libjava.jni/overload.java: New file.
- 	* libjava.jni/overload.c: New file.
- 	* libjava.jni/overload.out: New file.
- 	* libjava.jni/simple_int.java: New file.
- 	* libjava.jni/simple_int.c: New file.
- 	* libjava.jni/simple_int.out: New file.
- 	* libjava.jni/invoke.out: New file.
- 	* libjava.jni/invoke.c: New file.
- 	* libjava.jni/invoke.java: New file.
- 
- 2000-02-12  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.compile/comment.java: New file.
- 
- 2000-02-12  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.compile/assignment.java: New file.
- 
- 2000-02-12  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.compile/inner_data.java: New file.
- 
- 2000-02-12  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.compile/inner_inherit.java: New file.
- 
- 2000-02-12  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* libjava.lang/inner_interface.out: New file.
- 	* libjava.lang/inner_interface.java: New file.
- 	* libjava.lang/final_int.out: New file.
- 	* libjava.lang/final_int.java: New file.
- 	* libjava.lang/final_static_and_friend.out: New file.
- 	* libjava.lang/final_static_and_friend.java: New file.
- 
- 2000-02-07  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* libjava.lang/anonarray3.out: New file.
- 	* libjava.lang/anonarray3.java: New file.
- 
- 2000-02-09  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/inner_priv.java: New file.
- 
- 2000-02-07  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* libjava.lang/instinit2.out: New file.
- 	* libjava.lang/instinit2.java: New file.
- 	* libjava.lang/instinit.out: New file.
- 	* libjava.lang/instinit.java: New file.
- 	* libjava.lang/anonarray2.out: New file.
- 	* libjava.lang/anonarray2.java: New file.
- 	* libjava.lang/anonarray.out: New file.
- 	* libjava.lang/anonarray.java: New file.
- 	* libjava.lang/nested_with_ctor.out: New file.
- 	* libjava.lang/nested_with_ctor.java: New file.
- 	* libjava.lang/anfi.out: New file.
- 	* libjava.lang/anfi.java: New file.
- 	* libjava.lang/stub.out: New file.
- 	* libjava.lang/stub.java: New file.
- 
- 2000-01-30  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* libjava.lang/final_inner.java: New file.
- 	* libjava.lang/final_inner.out: Likewise.
- 
- 2000-01-20  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/BlankFinal.java: New file.
- 
- 2000-01-19  Alexandre Petit-Bianco  <apbianco@cygnus.com>
- 
- 	* libjava.lang/anon.java, libjava.lang/anon2.java,
- 	libjava.lang/anon3.java, libjava.lang/anon4.java,
- 	libjava.lang/direct_read.java, libjava.lang/direct_write.java,
- 	libjava.lang/indirect.java, libjava.lang/indirect_read.java,
- 	libjava.lang/indirect_write.java, libjava.lang/inner1.java,
- 	libjava.lang/inner2.java, libjava.lang/inner3.java,
- 	libjava.lang/inner4.java, libjava.lang/inner_array.java,
- 	libjava.lang/multiple_finit.java,
- 	libjava.lang/private_direct_read.java,
- 	libjava.lang/private_direct_write.java,
- 	libjava.lang/private_indirect_read.java,
- 	libjava.lang/private_indirect_write.java,
- 	libjava.lang/search_outer.java, libjava.lang/tmi.java,
- 	libjava.lang/tp.java, libjava.lang/update_outer.java: New files.
- 
- 2000-01-18  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/inner_pub.java: New file.
- 
- 2000-01-16  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.lang/pr133.out: New file.
- 	* libjava.lang/pr133.java: New file.
- 
- 	* libjava.lang/pr100.xpo: New file.
- 	* libjava.lang/pr100.java: New file.
- 
- 2000-01-16  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.lang/pr93.xpo: New file.
- 	* libjava.lang/pr93.java: New file.
- 
- 2000-01-16  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.lang/lang.exp: Handle regexp matches correctly.
- 
- 2000-01-16  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.lang/pr83.out: New file.
- 	* libjava.lang/pr83.java: New file.
- 
- 	* libjava.lang/pr109.out: New file.
- 	* libjava.lang/pr109.java: New file.
- 
- 2000-01-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/klass.out: New file.
- 	* libjava.lang/klass.java: New file.
- 
- 1999-12-31  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.mauve/mauve.exp (mauve_compute_uses): Let user select
- 	specific tests to run.
- 
- 1999-10-19  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.compile/invokeinterface: New directory.
- 	* libjava.compile/invokeinterface/Test.java: New file. Test code for
- 	PR gcj/71 and PR gcj/72.
- 	* libjava.compile/invokeinterface/A.java: New file.
- 	* libjava.compile/invokeinterface/B.java: New file.
- 
- 1999-10-02  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.compile/Case.xfail: Removed.  This test should pass now.
- 
- 	* libjava.compile/compile.exp: Copied from test.exp.
- 	* libjava.compile/test.exp: Removed.
- 
- 	* libjava.lang/lang.exp: Copied from test.exp.
- 	* libjava.lang/test.exp: Removed.
- 
- 1999-10-01  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/PR56.out: New file.
- 	* libjava.lang/PR56.java: New file.
- 
- 1999-09-29  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/PR55.out: New file.
- 	* libjava.lang/PR55.java: New file.
- 
- 1999-08-25  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.toshiba/G19990304_01.out: New file.
- 	* libjava.toshiba/G19990304_01.java: New file.
- 
- 	* libjava.lang/G19990310_01.out: New file.
- 	* libjava.lang/G19990310_01.java: New file.
- 
- 1999-08-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	From Bryce McKinlay:
- 	* libjava.lang/Array_2.java: New file.
- 	* libjava.lang/Array_2.out: New file.
- 
- 1999-08-09  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.lang/Primes.java: New file.
- 	* libjava.lang/Primes.out: New file.
- 
- 1999-07-31  Alexandre Oliva  <oliva@dcc.unicamp.br>
- 
- 	* lib/libjava.exp (bytecompile_file): Use `env(SUN_JAVAC)', that
- 	defaults to javac, as Sun-javac compiler or compatible.
- 	(libjava_init): Get GCJ from environment if neither GCJ_UNDER_TEST
- 	nor TOOL_EXECUTABLE are set.  Set `original_ld_library_path' from
- 	environment.
- 	(libjava_arguments): Prepend `.' and `$srcdir/$subdir' to
- 	CLASSPATH, for `support' sources.  Search for libgcj.spec in
- 	`$objdir/..', by adding -B to GCJ_UNDER_TEST.  Append
- 	original_ld_library_path to ld_library_path.
- 	* libjava.mauve/mauve.exp (test_mauve): Set `env(GCJ)' from
- 	GCJ_UNDER_TEST, calculated just like in libjava.exp.
- 
- 1999-07-14  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/G19990217_02.no-link: New file.
- 	* libjava.compile/test.exp: Look for `.no-link' file.
- 	* lib/libjava.exp (test_libjava_from_source): Added `no-link'
- 	option.
- 	(test_libjava_from_javac): Likewise.  Also, handle package
- 	information from class name when creating class file name.
- 
- 1999-07-13  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/test.exp: New file.
- 	* libjava.lang/err9.out: New file.
- 	* libjava.lang/err9.java: New file.
- 	* libjava.lang/err8.out: New file.
- 	* libjava.lang/err8.java: New file.
- 	* libjava.lang/err7.out: New file.
- 	* libjava.lang/err7.java: New file.
- 	* libjava.lang/err6.out: New file.
- 	* libjava.lang/err6.java: New file.
- 	* libjava.lang/err5.out: New file.
- 	* libjava.lang/err5.java: New file.
- 	* libjava.lang/err4.out: New file.
- 	* libjava.lang/err4.java: New file.
- 	* libjava.lang/err3.out: New file.
- 	* libjava.lang/err3.java: New file.
- 	* libjava.lang/err2.out: New file.
- 	* libjava.lang/err2.java: New file.
- 	* libjava.lang/err13.out: New file.
- 	* libjava.lang/err13.java: New file.
- 	* libjava.lang/err12.out: New file.
- 	* libjava.lang/err12.java: New file.
- 	* libjava.lang/err11.out: New file.
- 	* libjava.lang/err11.java: New file.
- 	* libjava.lang/err10.out: New file.
- 	* libjava.lang/err10.java: New file.
- 	* libjava.lang/err1.out: New file.
- 	* libjava.lang/err1.java: New file.
- 	* libjava.lang/N19990310_5.out: New file.
- 	* libjava.lang/N19990310_5.java: New file.
- 	* libjava.lang/N19990310_4.out: New file.
- 	* libjava.lang/N19990310_4.java: New file.
- 	* libjava.lang/N19990310_3.out: New file.
- 	* libjava.lang/N19990310_3.java: New file.
- 	* libjava.lang/N19990310_02.out: New file.
- 	* libjava.lang/N19990310_02.java: New file.
- 	* libjava.lang/G19990303_02.out: New file.
- 	* libjava.lang/G19990303_02.java: New file.
- 	* libjava.lang/G19990303_01.out: New file.
- 	* libjava.lang/G19990303_01.java: New file.
- 	* libjava.lang/G19990302_02.out: New file.
- 	* libjava.lang/G19990302_02.java: New file.
- 	* libjava.lang/G19990301_01.out: New file.
- 	* libjava.lang/G19990301_01.java: New file.
- 
- 	* libjava.compile/N19990317.java: New file.
- 	* libjava.compile/N19990310_01.java: New file.
- 	* libjava.compile/G19990225_01.java: New file.
- 	* libjava.compile/G19990217_02.java: New file.
- 	* libjava.compile/G19990217_01.java: New file.
- 	* libjava.compile/G19990210_3.java: New file.
- 	* libjava.compile/G19990210_2.java: New file.
- 	* libjava.compile/G19990210_1.java: New file.
- 
- 1999-07-06  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Final.xfail: Output fails, not exec.
- 
- 	* libjava.lang/Final.xfail: New file.
- 	* libjava.compile/Case.xfail: New file.
- 	* libjava.compile/Where.xfail: New file.
- 	* libjava.compile/test.exp: Look for `.xfail' files.
- 	* libjava.lang/test.exp: Don't look for `.arg' files.
- 	Do look for `.xfail' files.
- 	* lib/libjava.exp (test_libjava_from_source): Changed meaning of
- 	`exec_args' argument.  Handle `xfail-*' arguments.
- 	(test_libjava_from_javac): Likewise.
- 	(test_libjava): Likewise.
- 	(libjava_read_xfail): New proc.
- 
- 1999-07-05  Bryce McKinlay  <bryce@albatross.co.nz>
- 
- 	* libjava.lang/Final.java: Added.
- 	* libjava.lang/Final.out: Added.
- 
- 1999-07-02  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Finalize_1.out: Removed.
- 	* libjava.lang/Finalize_1.java: Removed.
- 
- 	* libjava.lang/Thread_1.out: Updated.
- 	* libjava.lang/Thread_1.java: Don't run exit test.
- 
- Thu Jul  1 16:22:19 1999  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.mauve/mauve.exp: Don't stop counting test results
- 	prematurely.
- 
- 1999-06-25  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (test_libjava_from_javac): Fixed typo.  Always
- 	make class_files a list.
- 
- 	* lib/libjava.exp (test_libjava_from_javac): Prepend `$objdir/' to
- 	class file names.
- 
- 1999-06-24  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (libjava_arguments): If `libtool' not found in
- 	build tree, just use $GCJ_UNDER_TEST as compiler.
- 
- 1999-06-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (libjava_arguments): Handle -lzgcj.
- 
- 1999-05-24  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.lang/Shazam.java: New file.
- 	libjava.lang/Shazam.out: New file.
- 
- 1999-05-12  Andrew Haley  <aph@cygnus.com>
- 
- 	* libjava.lang/Invoke_2.java: New file.
- 
- 1999-05-03  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (libjava_arguments): Don't use -nodefaultlibs.
- 	(libjava_find_lib): Add `-L' option to find the actual library.
- 
- 	* libjava.mauve/mauve.exp (test_mauve): Pass `link' to
- 	libjava_arguments when linking.
- 	(test_mauve_sim): Likewise.
- 	* lib/libjava.exp (libjava_arguments): Run `libtool' to link.
- 	Don't use `-static'.  Added `mode' argument.  Use -nodefaultlibs
- 	when linking.
- 	(test_libjava_from_source): Mention why target_compile failed.
- 	Pass `link' to libjava_arguments when linking.  Only do `xfails'
- 	for tests we would actually have run.
- 	(test_libjava_from_javac): Likewise.
- 	(libjava_find_lib): Return name of `.la' file.
- 
- 1999-04-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (libjava_find_lib): New proc.
- 	(libjava_arguments): Use it.  Force static linking.
- 
- Thu Apr 22 14:19:35 1999  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.compile/OperatorBenchmark.java: New file.
- 
- 1999-04-09  Warren Levy  <warrenl@cygnus.com>
- 
- 	* libjava.mauve/mauve.exp (KEYS): Default to libgcj.
- 
- 1999-04-09  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/plusplus.java: New file.
- 	From MoT <Sebastien.Villemot@ens.fr>.
- 
- 1999-04-06  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.mauve/mauve.exp (test_mauve_sim): Reference
- 	mauve-libgcj.
- 	(test_mauve): Likewise.
- 
- 1999-03-30  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.mauve/mauve.exp: Renamed from test.exp.  With the new
- 	name it is easier to run just the Mauve tests.
- 
- 	* libjava.mauve/test.exp (test_mauve): Added gnu/testlet/config to
- 	list of files to link in.
- 	(test_mauve_sim): Likewise.
- 	* libjava.mauve/DejaGNUTestHarness.java (srcdir, tmpdir): New
- 	static variables.
- 	(DejaGNUTestHarness): Removed argument from constructor.
- 	(dejasrcdir): New static variable.
- 	(main): Set `dejasrcdir'.
- 	(getSourceDirectory): New method.
- 
- 1999-03-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.compile/perc.java: New file.
- 
- 1999-02-26  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.util/test.exp: Removed.
- 
- 1999-02-25  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.mauve/test.exp: Make sure current directory is correct
- 	after tests are run.
- 
- 	* libjava.mauve/test.exp (test_mauve): Removed extra arg in call
- 	to bytecompile_file.
- 	(test_mauve_sim): Likewise.
- 
- Thu Feb 25 09:21:03 1999  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.compile/euc_comment1.java,
- 	libjava.compile/euc_comment2.java,
- 	libjava.compile/euc_comment3.java,
- 	libjava.compile/euc_comment1.java,
- 	libjava.compile/euc_comment2.java,
- 	libjava.compile/euc_comment3.java: New files.
- 
- 	* libjava.compile/Case.java, libjava.compile/support/Case.java:
- 	New files.
- 
- 1999-02-24  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (find_jvscan): New proc.
- 	(bytecompile_file): Removed `srcfile_in' argument.
- 	(test_libjava_from_javac): Use `jv-scan' program to find name of
- 	`main' and name of all generated classes.  Compile all generated
- 	classes, not just primary class.  For no-exec tests, only try to
- 	build the .o, not the full executable.
- 
- Wed Feb 24 11:22:32 1999  Anthony Green  <green@hoser.cygnus.com>
- 
- 	* libjava.compile/test.exp: Minor fix.
- 
- 1999-02-23  Anthony Green  <green@cygnus.com>
- 
- 	* libjava.compile/Where.java, libjava.compile/support/Waldo.java,
- 	libjava.compile/Twice.java, libjava.compile/Semi.java,
- 	libjava.compile/Statics.java, libjava.compile/test.exp,
- 	libjava.lang/Synch.java, libjava.lang/Synch.out: New files.
- 
- 1999-02-16  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Makefile.in: Rebuilt.
- 	* Makefile.am (AUTOMAKE_OPTIONS): Added no-installinfo.
- 
- Wed Feb 17 19:53:51 1999  Warren Levy  <warrenl@cygnus.com>
- 
- 	* libjava.mauve/test.exp: modified file allows Mauve tests to
- 	run on JMR board; simplified script to use same procedure for
- 	all testing
- 
- 1999-02-10  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (libjava_arguments): Updated to track library
- 	renames.
- 
- 1999-02-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/slash.java: New file.
- 	* libjava.lang/slash.out: New file.
- 
- Mon Feb  1 05:17:40 1999  Anthony Green  <green@fencer.cygnus.com>
- 
- 	* lib/libjava.exp: Test compiling from source as well as from
- 	bytecodes.
- 
- 1999-01-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.mauve/test.exp (mauve_compute_uses): Read classes file,
- 	not choices file.
- 
- 	* libjava.mauve/test.exp (test_mauve): Added
- 	ResourceNotFoundException to list of harness files to compile.
- 	(test_mauve_sim): Likewise.
- 
- 1998-12-17  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Invoke_1.java: New file.
- 
- 	* libjava.lang/Thread_1.java (Thread_1): Class now public.
- 	* libjava.lang/Array_1.java (Array_1): Class now public.
- 
- 	* libjava.lang/Throw_1.out: New file.
- 	* libjava.lang/Throw_1.java: New file.
- 
- 1998-12-11  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (libjava_arguments): New proc.
- 	(test_libjava): Use it.
- 	(bytecompile_file): Added classpath argument.
- 	* libjava.mauve/test.exp: New file.
- 	* libjava.mauve/DejaGNUTestHarness.java: New file.
- 
- 1998-12-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* Various: removed all test files that migrated to Mauve.
- 
- 1998-12-07  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Array_1.java (main): Removed extraneous
- 	getSuperclass call.
- 
- 1998-11-23  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Finalize_1.java (main): Clear `f' before GC.
- 
- 1998-10-08  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Thread_1.out: Added missing line.
- 
- Fri Oct  2 14:55:46 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Array_1.java: Changed so Cloneable test can run
- 	even if clone test itself fails.
- 
- 	* libjava.lang/Array_1.java: Uncommented calls to getSuperclass.
- 	Added test to see if array implements Cloneable.
- 
- Thu Oct  1 11:28:06 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Array_1.java: New file.
- 	* libjava.lang/Array_1.out: New file.
- 
- Thu Oct  1 13:51:00 1998  Anthony Green  <green@cygnus.com>
- 
- 	* testsuite/lib/libjava.exp: Find qthreads library correctly.
- 
- Tue Sep 29 16:36:43 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* libjava.util/Hashtable_1.java, libjava.util/Hashtable_1.out: Created.
- 
- Tue Sep 29 00:40:26 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Thread_1.java (started): New field.
- 	(run): Set `started'.  Handle all synchronization here.
- 	(Thread_1): Initialize `started'.
- 	(doit): Just start both threads and let them handle their own
- 	synchronization.
- 
- 	* libjava.lang/Boolean_5.out: Changed to reflect the
- 	Boolean_5.java changes.
- 	* libjava.lang/Boolean_5.java: Don't replace the system
- 	properties, just augment them.  Don't print the property object.
- 	* libjava.lang/Long_2.out: Changed to reflect Long_2.java
- 	changes.
- 	* libjava.lang/Long_2.java: Don't replace the system properties,
- 	just augment them.  Don't print the property object.
- 	* libjava.lang/Integer_2.out: Changed to reflect Integer_2.java
- 	changes.
- 	* libjava.lang/Integer_2.java: Don't replace the system
- 	properties, just augment them.  Don't print the property object.
- 
- Sat Sep 26 15:57:39 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Thread_1.java (main): Catch InterruptedException.
- 
- Tue Sep 22 13:45:58 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Thread_1.out: New file.
- 	* libjava.lang/Thread_1.java: New file.
- 
- Mon Sep 21 14:20:08 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (test_libjava): Use runtest_file_p to see if
- 	test should be short-circuited.
- 
- Tue Sep 15 13:57:45 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Character_9.java: New file.
- 	* libjava.lang/Character_9.out: New file.
- 
- Mon Sep 14 12:27:04 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Character_8.out: New file.
- 	* libjava.lang/Character_8.java: New file.
- 	* libjava.lang/Character_7.out: New file.
- 	* libjava.lang/Character_7.java: New file.
- 	* libjava.lang/Character_6.out: New file.
- 	* libjava.lang/Character_6.java: New file.
- 	* libjava.lang/Character_5.out: New file.
- 	* libjava.lang/Character_5.java: New file.
- 	* libjava.lang/Character_4.out: New file.
- 	* libjava.lang/Character_4.java: New file.
- 	* libjava.lang/Character_3.out: New file.
- 	* libjava.lang/Character_3.java: New file.
- 	* libjava.lang/Character_2.out: New file.
- 	* libjava.lang/Character_2.java: New file.
- 
- Fri Sep 11 10:04:55 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* libjava.lang/Character_1.out: New file.
- 	* libjava.lang/Character_1.java: New file.
- 
- Fri Sep 18 14:43:59 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* libjava.lang/Long_1.java, libjava.lang/Long_1.out,
- 	libjava.lang/Long_2.java, libjava.lang/Long_2.out: Created.
- 
- Fri Sep 18 12:43:52 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* libjava.lang/Integer_1.java, libjava.lang/Integer_1.out,
- 	libjava.lang/Integer_2.java, libjava.lang/Integer_2.out: Created.
- 
- 	* libjava.lang/String_2.java, libjava.lang/String_2.out: Use JDK 1.2
- 	values for hashCode.
- 
- Thu Sep 10 12:44:42 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* libjava.lang/String_1.java, libjava.lang/String_1.out,
- 	libjava.lang/String_2.java, libjava.lang/String_2.out,
- 	libjava.lang/String_3.java, libjava.lang/String_3.out,
- 	libjava.lang/String_4.java, libjava.lang/String_4.out,
- 	libjava.lang/String_5.java, libjava.lang/String_5.out,
- 	libjava.lang/String_6.java, libjava.lang/String_6.out,
- 	libjava.lang/String_7.java, libjava.lang/String_7.out,
- 	libjava.lang/String_8.java, libjava.lang/String_8.out,
- 	libjava.lang/String_9.java, libjava.lang/String_9.out: Created.
- 
- Tue Sep  8 13:31:59 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* libjava.lang/Byte_1.java, libjava.lang/Byte_1.out,
- 	libjava.lang/Short_1.java, libjava.lang/Short_1.out: New files.
- 
- Thu Sep  3 15:57:57 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* libjava.lang/Boolean_1.java, libjava.lang/Boolean_1.out,
- 	libjava.lang/Boolean_2.java, libjava.lang/Boolean_2.out,
- 	libjava.lang/Boolean_3.java, libjava.lang/Boolean_3.out,
- 	libjava.lang/Boolean_4.java, libjava.lang/Boolean_4.out,
- 	libjava.lang/Boolean_5.java, libjava.lang/Boolean_5.out: Created.
- 
- Tue Sep  1 12:27:54 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp (bytecompile_file): Don't throw error if byte
- 	compilation fails.  Added `srcfile_in' argument.  Changed return
- 	value.
- 	(test_libjava): Gracefully handle byte-compilation failure.
- 
- 	* libjava.lang/System_15.java (main): Typo fix.
- 	(System_15): Choose correct class name.
- 	(X): Moved into System_15.
- 
- 	* libjava.lang/System_1.java, libjava.lang/System_1.out,
- 	libjava.lang/System_10.java, libjava.lang/System_10.out,
- 	libjava.lang/System_11.java, libjava.lang/System_11.out,
- 	libjava.lang/System_12.java, libjava.lang/System_12.out,
- 	libjava.lang/System_13.java, libjava.lang/System_13.out,
- 	libjava.lang/System_14.java, libjava.lang/System_14.out,
- 	libjava.lang/System_15.java, libjava.lang/System_15.out,
- 	libjava.lang/System_2.java, libjava.lang/System_2.out,
- 	libjava.lang/System_3.java, libjava.lang/System_3.out,
- 	libjava.lang/System_4.java, libjava.lang/System_4.out,
- 	libjava.lang/System_5.java, libjava.lang/System_5.out,
- 	libjava.lang/System_6.java, libjava.lang/System_6.out,
- 	libjava.lang/System_7.java, libjava.lang/System_7.out,
- 	libjava.lang/System_8.java, libjava.lang/System_8.out,
- 	libjava.lang/System_9.java, libjava.lang/System_9.out: New files.
- 
- 	* lib/libjava.exp (test_libjava): Only add -lgc or -lqthreads if
- 	library is actually found.
- 
- 	* lib/libjava.exp (test_libjava): Look for qthreads.
- 
- Mon Aug 31 17:49:21 1998  Warren Levy  <warrenl@cygnus.com>
- 
- 	* libjava.util/Random_1.java, libjava.util/Random_1.out,
- 	libjava.util/Random_2.java, libjava.util/Random_2.out,
- 	libjava.util/Random_3.java, libjava.util/Random_3.out,
- 	libjava.util/Random_4.java, libjava.util/Random_4.out,
- 	libjava.util/Random_5.java, libjava.util/Random_5.out,
- 	libjava.util/Random_6.java, libjava.util/Random_6.out,
- 	libjava.util/Random_7.java, libjava.util/Random_7.out,
- 	libjava.util/Random_8.java, libjava.util/Random_8.out,
- 	libjava.util/test.exp: Created.
- 
- Mon Aug 31 16:37:19 1998  Tom Tromey  <tromey@cygnus.com>
- 
- 	* lib/libjava.exp: Changed gjavac to gcj everywhere.
- 
- Wed Aug 26 12:20:10 1998  Anthony Green  <green@cygnus.com>
- 
- 	* Makefile.am (EXPECT,RUNTEST): Find expect and runtest
- 	correctly.
- 	* Makefile.in: Rebuild.
- 
- Tue Aug 25 18:43:33 1998  Anthony Green  <green@cygnus.com>
- 
- 	* lib/libjava.exp: Fix CLASSPATH setting.
- 
- Tue Aug 25 17:27:37 1998  Anthony Green  <green@cygnus.com>
- 
- 	* ChangeLog, lib/libjava.exp, config/default.exp,
- 	libjava.lang/Finalize_1.java, libjava.lang/Finalize_1.out,
- 	libjava.lang/Float_1.java, libjava.lang/Float_1.out
- 	libjava.lang/test.exp, Makefile.am, Makefile.in: Created.
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/testsuite/ChangeLog-old gcc-4.0.0/libjava/testsuite/ChangeLog-old
*** gcc-3.4.3/libjava/testsuite/ChangeLog-old	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/ChangeLog-old	Tue Jun  8 13:30:31 2004
***************
*** 0 ****
--- 1,2153 ----
+ 2004-06-08  Andrew Pinski  <pinskia@physics.uc.edu>
+ 
+ 	PR java/15769
+ 	* libjava.compile/PR15769.java: New test.
+ 
+ 2004-01-12  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* lib/libjava.exp: Add LD_LIBRARY_PATH_32/64 to get proper
+ 	path setting for Ssolaris 32/64-bit testing.
+ 	Reorganize LD_LIBRARY_PATH setting.
+ 
+ 2004-01-09  Andrew Haley  <aph@redhat.com>
+ 
+ 	* lib/libjava.exp (bytecompile_file): Log compile command.
+ 
+ 2004-01-07  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	PR libgcj/13011:
+ 	* libjava.jar/simple.jar: Add a working MANIFEST.MF.
+ 
+ 2003-12-03  Ralph Loader  <rcl@ihug.co.nz>
+ 
+ 	PR java/12374:
+ 	* libjava.compile/PR12374.java: New file.
+ 
+ 2003-12-01  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	PR optimization/13024
+ 	* libjava.compile/PR13024.java: New file.
+ 
+ 	PR java/13237
+ 	* libjava.compile/PR13237.java: New file.
+ 
+ 2003-11-18  Andreas Tobler  <a.tobler@schweiz.ch>
+ 
+ 	* libjava.jar/jar.exp: Cleanup files and reset CLASSPATH.
+ 
+ 2003-11-17  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* libjava.compile/PR12857.java: New test case.
+ 
+ 2003-11-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jar/simple.jar: Replaced.
+ 
+ 2003-11-13  Tom Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	* libjava.jni/jniutf.c: New file.
+ 	* libjava.jni/jniutf.java: New file.
+ 	* libjava.jni/jniutf.out: New file.
+ 
+ 2003-11-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/12915:
+ 	* libjava.lang/PR12915.java: New file.
+ 	* libjava.lang/PR12915.out: New file.
+ 
+ 	* libjava.jacks/jacks.exp (gcj_jacks_write): Enable "assert"
+ 	constraint.
+ 	* libjava.jacks/jacks.xfail: Added new xfails.
+ 
+ 2003-11-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/12996:
+ 	* libjava.jar/simple.jar: New file.
+ 	* libjava.jar/simple.xfail: New file.
+ 	* libjava.jar/simple.out: New file.
+ 	* libjava.jar/simple.java: New file.
+ 	* libjava.jar/jar.exp: New file.
+ 
+ 2003-11-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.xfail: Updated.
+ 
+ 2003-11-03  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	PR java/12866:
+ 	* libjava.compile/InnerExcept.java: New File.
+ 
+ 2003-10-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/12416:
+ 	* libjava.lang/PR12416.out: New file.
+ 	* libjava.lang/PR12416.java: New file.
+ 
+ 	PR libgcj/12656:
+ 	* libjava.lang/PR12656.java: New file.
+ 	* libjava.lang/PR12656.out: New file.
+ 
+ 2003-10-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/libjava.exp (find_javac): Use -Wno-unreachable-bytecode.
+ 
+ 2003-10-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.mauve/xfails: Removed some tests.
+ 
+ 2003-09-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.xfail: Updated for new passes.
+ 
+ 2003-09-21  Ralph Loader  <suckfish@ihug.co.nz>
+ 
+ 	PR java/12350
+ 	* libjava.lang/PR12350.java: New file.
+ 	* libjava.lang/PR12350.out: New file.
+ 
+ 2003-09-17  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	PR java/9577
+ 	* libjava.cni/PR9577.java: New file.
+ 	* libjava.cni/natPR9577.cc: New file.
+ 	* libjava.cni/PR9577.out: New file.
+ 
+ 2003-09-04  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* libjava.compile/compile.exp: Test with -O3 rather than -O.
+ 	* libjava.lang/lang.exp: Likewise.
+ 
+ 2003-09-04  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): Remove unneeded variables.
+ 	(test_libjava_from_source): Likewise.
+ 	(test_libjava_from_javac): Likewise.
+ 
+ 2003-08-23  Andreas Tobler <a.tobler@schweiz.ch> 
+ 
+ 	PR libgcj/8823
+         * libjava.lang/pr8823.xfail: Removed.
+ 
+ 2003-08-19  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): Add $libjava to the list of
+ 	libraries.
+ 
+ 2003-08-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/11951:
+ 	* libjava.jni/pr11951.c: New file.
+ 	* libjava.jni/pr11951.out: New file.
+ 	* libjava.jni/pr11951.java: New file.
+ 
+ 2003-08-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.xfail: Updated to account for new passes.
+ 	* libjava.compile/abstr.xfail: Now can compile from bytecode.
+ 	* libjava.compile/PR5641.xfail: Now can compile from bytecode.
+ 
+ 	* libjava.mauve/mauve.exp (test_mauve_sim): Don't find
+ 	DejaGNUTestHarness in gnu/testlet.
+ 	(test_mauve): Use correct object extension.
+ 
+ 2003-08-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/libjava.exp (libjava_find_lib): Search for .so file first.
+ 	(libjava_arguments): Don't add libraries to link line explictly.
+ 
+ 2003-08-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/11600:
+ 	* libjava.compile/PR11600.xfail: New file.
+ 	* libjava.compile/PR11600.java: New file.
+ 
+ 2003-08-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.exp (gcj_jacks_run): Just ignore errors
+ 	from jacks.
+ 
+ 2003-07-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR libgcj/7482:
+ 	* libjava.lang/PR7482.java: New file.
+ 	* libjava.lang/PR7482.out: New file.
+ 
+ 2003-07-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.mauve/mauve.exp (mauve_find_harness_files): New proc.
+ 	(test_mauve): Use it.
+ 	(test_mauve_sim): Likewise.
+ 
+ 2003-07-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.verify/verify.exp (gcj_verify_list_tests): Only change
+ 	directory if new directory exists.
+ 
+ 2003-07-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.verify/verify.exp: Fixed variable init.
+ 
+ 2003-07-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.verify/verify.exp: New file.
+ 	* libjava.verify/README.verify: New file.
+ 
+ 2003-07-09  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* libjava.lang/SyncTest.java (run): Cache .class value.
+ 
+ 2003-06-08  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* libjava.lang/MathBuiltin.java: New test case.
+ 	* libjava.lang/MathBuiltin.out: New file.
+ 
+ 2003-06-05  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/mauve.exp (test_mauve): Add -wno-deprecated to GCJ.
+ 	
+ 	PR libgcj/6181:
+ 	* libjava.mauve/xfails: Remove getBeanInfo() failures.
+ 
+ 	PR libgcj/6293:
+ 	* libjava.mauve/xfails: Remove PipedStream.close() failure.
+ 
+ 2003-05-31  Roger Sayle  <roger@eyesopen.com>
+ 
+ 	* libjava.lang/Overflow.java: New test.
+ 	* libjava.lang/Overflow.out: New file.
+ 
+ 2003-05-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/verify.java: New file.
+ 	* libjava.lang/verify.out: New file.
+ 
+ 2003-05-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR java/10459:
+ 	* libjava.compile/pr10459_2.java: New file.
+ 	* libjava.compile/pr10459.java: New file.
+ 
+ 2003-04-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/10582:
+ 	* libjava.lang/assign.java: New file.
+ 	* libjava.lang/assign.out: New file.
+ 
+ 2003-04-16  Mark Mitchell  <mark@codesourcery.com>
+ 
+ 	PR middle-end/8866
+ 	* libjava.lang/PR8866.java: New test.
+ 
+ 2003-04-16  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libjava.lang/Throw_2.java (main): Make a successful test produce
+ 	some output.
+ 
+ 2003-03-22  Andreas Tobler <a.tobler@schweiz.ch>
+ 
+ 	* libjava.jni/jni.exp: Add compilation/link fix dor darwin dylibs.
+ 
+ 2003-03-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/libjava.exp (gcj_invoke): Moved...
+ 	* libjava.jni/jni.exp: ...from here.
+ 
+ 	* libjava.cni/shortfield.out: New file.
+ 	* libjava.cni/shortfield.java: New file.
+ 	* libjava.cni/natshortfield.cc: New file.
+ 	* libjava.cni/natlongfield.cc: New file.
+ 	* libjava.cni/longfield.out: New file.
+ 	* libjava.cni/longfield.java: New file.
+ 
+ 	* libjava.cni/cni.exp: New file.
+ 
+ 2003-03-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/initfield.java: New file.
+ 	* libjava.lang/initfield.out: New file.
+ 
+ 2003-03-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/initfield.java: New file.
+ 	* libjava.lang/initfield.out: New file.
+ 
+ 2003-03-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.xfail: Updated to reflect reality.
+ 
+ 2003-03-02  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/xfails: Remove all AcuniaPropertiesTest failures
+ 
+ 2003-02-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.xfail: Most 4.7.10 tests pass now.
+ 
+ 2003-02-16  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* libjava.lang/CompareNaN.java: New test.
+ 	* libjava.lang/CompareNaN.out: New test.
+ 
+ 2003-02-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/xfails: Add Class.reflect2 and String.getBytes FAILs.
+ 
+ 2003-02-15  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/libjava.exp (test_libjava_from_javac): Use regsub not string map.
+ 	* libjava.mauve/mauve.exp (mauve_compute_uses): Likewise.
+ 	(test_mauve): Likewise.
+ 
+ 2003-02-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/libjava.exp (test_libjava_from_javac): Don't create .o files
+ 	containing $ characters and always quote class files with "'"s.
+ 
+ 2003-02-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/mauve.exp (mauve_compute_uses): Add inner class
+ 	object files by changing all occurances of $ to ^.
+ 	(test_mauve): Replace ^ with $ for class file names and quote
+ 	them with "'"s.
+ 
+ 2003-02-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.mauve/xfails: Added entries for an unimplemented Class
+ 	method.
+ 
+ 2003-02-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/xfails: Add new entries for
+ 	gnu.testlet.java.text.CollationElementIterator.jdk11
+ 
+ 2003-02-03  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* libjava.jacks/jacks.exp (gcj_jacks_write): Set LD_LIBRARY_PATH
+ 	to find libgcc_s.  Set JAVA_CLASSPATH to find libgcj.jar.
+ 
+ 2003-01-31  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* lib/libjava.exp (libjava_prune_warnings): Remove all unreachable
+ 	bytecode warnings.
+ 
+ 2003-01-28  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.loader/TestEarlyGC.java: Added comment explaining
+ 	bytecode.
+ 
+ 	* libjava.jacks/jacks.xfail: More lexer tests now pass.
+ 
+ 2003-01-27  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/consthrow.java: New file.
+ 	* libjava.compile/consthrow.xfail: New file.
+ 
+ 2003-01-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+ 
+ 	* libjava.lang/pr8823.xfail: New file, add "xfail-byte".
+ 
+ 2003-01-24  Ranjit Mathew  <rmathew@hotmail.com>
+ 
+ 	* libjava.jni/calls.c (Java_calls_docall): Define with
+ 	JNIEXPORT and JNICALL method attributes.
+ 	* libjava.jni/field.c (Java_field_fetch): Likewise.
+ 	* libjava.jni/final_method.c (Java_final_1method_meth): Likewise.
+ 	* libjava.jni/findclass.c (Java_findclass_doit): Likewise.
+ 	* libjava.jni/invoke.c (Java_invoke_val): Likewise.
+ 	* libjava.jni/martin.c (Java_martin_myNative): Likewise.
+ 	* libjava.jni/noclass.c (Java_noclass_find_1it): Likewise.
+ 	* libjava.jni/overload.c (Java_overload_over__I): Likewise.
+ 	(Java_overload_over__II): Likewise.
+ 	* libjava.jni/register.c (JNI_OnLoad): Likewise.
+ 	* libjava.jni/simple_int.c (Java_simple_1int_nat): Likewise.
+ 	* libjava.jni/throwit.c (Java_throwit_throwit): Likewise.
+ 	* libjava.jni/virtual.c (Java_virtual_equals): Likewise.
+ 
+ 2003-01-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.xfail: All 8.4.3 tests and 9.4-modifier-10
+ 	now pass.
+ 
+ 2003-01-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/9139:
+ 	* lib/libjava.exp (find_javac): Put value of libgcj_jar into
+ 	return value when gcj is used.
+ 	* libjava.mauve/mauve.exp (test_mauve): Use libgcj_jar global.
+ 
+ 2003-01-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/pr8712.java: New file, for PR java/8712.
+ 
+ 2003-01-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/pr8955.java: New test, for PR java/8955.
+ 
+ 2002-12-19  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.xfail: Updated.
+ 
+ 2002-12-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/pr8945.java: New file.
+ 	* libjava.lang/pr8945.out: New file.
+ 
+ 2002-12-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.loader/loader.exp (gcj_loader_test_one): Use
+ 	libjava_prune_warnings.
+ 	(gcj_loader_run): Likewise.
+ 	* libjava.mauve/mauve.exp (test_mauve): Use
+ 	libjava_prune_warnings.
+ 	(test_mauve_sim): Likewise.
+ 	* libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Use
+ 	libjava_prune_warnings.
+ 	(gcj_jni_build_header): Likewise.
+ 	* lib/libjava.exp (libjava_prune_warnings): New proc.
+ 	(gcj_link): Use it.
+ 	(test_libjava_from_source): Likewise.
+ 	(test_libjava_from_javac): Likewise.
+ 
+ 2002-12-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Test for PR libgcj/8823:
+ 	* libjava.lang/pr8823.java: New file.
+ 	* libjava.lang/pr8823.out: New file.
+ 
+ 2002-12-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/override.java: New file.
+ 	* libjava.lang/override.out: New file.
+ 
+ 2002-12-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.exp (gcj_jacks_setup_xfail): New function.
+ 	(gcj_jacks_parse): Use it; set up xfails.
+ 	* libjava.jacks/jacks.xfail: New file.
+ 
+ 2002-12-01  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/xfails: Remove Inspector FAILs that now PASS.
+ 
+ 2002-11-21  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/8676:
+ 	* libjava.lang/pr8676.java: New file.
+ 	* libjava.lang/pr8676.out: New file.
+ 
+ 2002-11-21  Ulrich Weigand  <uweigand@de.ibm.com>
+ 
+ 	* libjava.loader/loader.exp (gcj_loader_test_one): Fix typo in
+ 	'type' argument to libjava_tcompile.
+ 	(gcj_loader_run): Use libjava_tcompile instead of running
+ 	GCJ_UNDER_TEST directly.
+ 
+ 2002-11-05  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jacks/jacks.exp: New file.
+ 
+ 2002-11-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/pr7912.java: New file.
+ 
+ 2002-11-04  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libjava.lang/utilTest.java: New.
+ 	* libjava.lang/utilTest.out: New.
+ 
+ 2002-11-04  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.loader/MyLoader.java: New constructor.
+ 	* libjava.loader/TestParent.java: New file.
+ 	* libjava.loader/TestParent.out: New file.
+ 
+ 2002-11-04  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.loader/TestEarlyGC.java,
+ 	libjava.loader/TestEarlyGC.out: New files (from
+ 	Jeff Sturm).
+ 
+ 2002-11-04  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.loader/dummy.java, libjava.loader/loader.exp,
+ 	libjava.loader/MyLoader.java, libjava.loader/TestLeak.java,
+ 	libjava.loader/TestLeak.out, libjava.loader/TestMultiple.java,
+ 	libjava.loader/TestMultiple.out: New files.
+ 
+ 2002-11-02  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/initexc.java (fail): Static initializers must be
+ 	able to complete normally.  From Eric Blake.
+ 
+ 	* libjava.lang/initexc.java: New file.
+ 	* libjava.lang/initexc.out: New file.
+ 
+ 2002-11-01  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/8415:
+ 	* libjava.lang/pr8415.java: New file.
+ 	* libjava.lang/pr8415.out: New file.
+ 
+ 	* libjava.mauve/mauve.exp (find_mauve_sources): New proc.
+ 	(test_mauve): Use it.
+ 	(test_mauve_sim): Likewise.
+ 
+ 2002-10-24  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/Primes.java: Removed.
+ 	* libjava.lang/Primes.out: Removed.
+ 
+ 2002-10-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/6388:
+ 	* libjava.lang/pr6388.java: New file.
+ 	* libjava.lang/pr6388.out: New file.
+ 
+ 2002-10-15  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libjava.lang/EvaluationOrder.java (EvaluationOrder): New.
+ 	* libjava.lang/EvaluationOrder.out (EvaluationOrder): New.
+ 
+ 2002-10-14  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libjava.lang/StaticConstructor.java: New.
+ 	* libjava.lang/StaticConstructor.out: New.
+ 
+ 2002-10-13  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/xfails: Remove tests that now XPASS.
+ 
+ 2002-10-03  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libjava.lang/Array_3.java (baz): New.
+ 	(main): Call baz.
+ 
+ 2002-09-29  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.lang/TestProxy.java: New file.
+ 	* libjava.lang/TestProxy.out: Ditto.
+ 
+ 2002-09-29  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.lang/utf8concat.java: New file.
+ 	* libjava.lang/utf8concat.out: Ditto.
+ 
+ 2002-08-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/narrow_case.java: New file.
+ 
+ 2002-08-25  Adam Megacz <adam@xwt.org>
+ 
+ 	* lib/libjava.exp: don't apply -no-install when platform is mingw.
+ 
+ 2002-08-16  H.J. Lu <hjl@gnu.org>
+ 
+ 	* lib/libjava.exp (gcc_version): Removed.
+ 	(libgcj_jar): New.
+ 	(libjava_init): Set libgcj_jar with tcl glob.
+ 	(libjava_arguments): Use libgcj_jar.
+ 
+ 2002-07-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/zeroexp.java: New file.
+ 
+ 2002-07-18  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* libjava.compile/compile.exp: Sort sources.
+ 	* libjava.jni/jni.exp (gcj_jni_run): Likewise.
+ 	* libjava.lang/lang.exp: Likewise.
+ 
+ 2002-07-02  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libjava.lang/inline.java: New file.
+ 	* libjava.lang/inline.out: Likewise.
+ 
+ 	* libjava.lang/Array_3.java: Add another case.
+ 
+ 2002-06-23  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (RUNTEST): Added AM_RUNTESTFLAGS.
+ 	(AM_RUNTESTFLAGS): New variable.
+ 	(RUNTESTFLAGS): Don't define.
+ 	* lib/libjava.exp (libjava_invoke): New proc.
+ 	(test_libjava_from_source): Use it.
+ 	(test_libjava_from_javac): Likewise.
+ 	(libjava_find_gij): New proc.
+ 
+ 2002-06-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/libjava.exp (test_libjava): Fixed typo.
+ 	* libjava.compile/PR6865.xfail: New file.
+ 
+ 2002-06-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/PR6865.java: New file.  For PR java/6865.
+ 
+ 	* libjava.lang/PR6520.java: Fixed typo.
+ 
+ 2002-06-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/PR6520.java: New file.  For PR java/6520.
+ 
+ 2002-06-04  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/T20020604.java: New file.
+ 
+ 	For PR libgcj/6389:
+ 	* libjava.mauve/xfails: Now passes System.getProperty test.
+ 
+ 	For PR java/1343 and PR java/6336:
+ 	* libjava.compile/PR1343.java: New file.
+ 
+ 	For PR java/5913:
+ 	* libjava.compile/PR5913.xfail: Removed.
+ 
+ 2002-05-29  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* libjava.compile/T20020529.java: New file.
+ 
+ 2002-05-27  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* libjava.lang/PR6820.java: New file.
+ 	* libjava.lang/PR6820.out: New file.
+ 
+ 2002-05-23  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* libjava.lang/PR6729.java: New file.
+ 	* libjava.lang/PR6729.out: New file.
+ 
+ 2002-05-04  Mark Wielaard  <mark@klomp.org>
+ 
+ 	For PR java/6519:
+ 	* libjava.lang/emptystring.java: New.
+ 	* libjava.lang/emptystring.out: New.
+ 
+ 2002-04-21  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/xfail: Expect failures for PR java/6391 and
+ 	libgcj/6389.
+ 
+ 2002-04-16  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.lang/negzero.java: New.
+ 	* libjava.lang/negzero.out: New.
+ 
+ 2002-04-14  Mark Wielaard  <mark@klomp.org>
+ 
+         * libjava.mauve/xfails: Expect failures for PR libgcj/6302 and
+         libgcj/6298.
+ 
+ 2002-04-14  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/xfails: Expect failures for PR libgcj/6293,
+ 	libgcj/6295, libgcj/6296 and libgcj/6297.
+ 
+ 2002-04-12  Anthony Green  <green@redhat.com>
+ 
+ 	* lib/libjava.exp: Use libgcj-VERSION.jar, not libgcj.jar.
+ 
+ 2002-04-12  Loren J. Rittle <ljrittle@acm.org>
+ 
+ 	* libjava.lang/SyncGlobal.java, libjava.lang/SyncGlobal.out:
+ 	New test case.
+ 
+ 2002-04-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* libjava.lang/PR6204.java, libjava.lang/PR6204.out: New test case.
+ 	* libjava.lang/PR6085.java, libjava.lang/PR6085.out: Likewise.
+ 
+ 2002-04-07  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/xfails: Add CASE_INSENSITIVE_ORDER, result was
+ 	unspecified and test should be updated to match latest spec.
+ 	Add AcuniaPropertiesTest, known bug #6219. Add test_getClassLoader,
+ 	what we do seems to be not really right or wrong.
+ 
+ 2002-04-06  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* libjava.mauve/mauve.exp: Use libgcj.jar not libgcj.zip.
+ 	* libjava.mauve/xfails: add Character.classify12 (number 1),
+ 	Character.getType (number 11), Character.getType (number 20) and
+ 	Character.getType (number 22). We implement 1.4 Character.
+ 
+ 2002-03-28  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libjava.lang/Throw_2.java: New.
+ 	* libjava.lang/Throw_2.out: New.
+ 
+ 2002-03-27  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.lang/InvokeReturn.java: Modify test for targets
+ 	which do not yet support reflection.
+ 
+ 2002-03-27  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.jni/jni.exp (gcj_jni_run): Fix cross build test.
+ 
+ 2002-03-27  Anthony Green  <green@redhat.com>
+ 
+ 	* lib/libjava.exp: Add the wrapper link options only when we're
+ 	linking.
+ 
+ 2002-03-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.mauve/mauve.exp (test_mauve): Use correct stderr
+ 	redirection code.
+ 
+ 2002-03-22  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	For PR java/6026:
+ 	* libjava.compile/PR6026.java: New file.
+ 
+ 2002-03-21  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libjava.lang/Thread_Interrupt.java (Looper.calibrate): New.
+ 	(yields): New.
+ 
+ 2002-03-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jni/jni.exp (gcj_jni_test_one): Find libstdc++ in build
+ 	tree.
+ 	(gcj_invoke): Added ld_library_additions argument.
+ 
+ 2002-03-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jni/jni.exp (gcj_jni_build_header): Use local_exec, not
+ 	target_compile.  Fixes PR other/5874.
+ 
+ 2002-03-15  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	For PR java/5902:
+ 	* libjava.compile/PR5902.java: Does not need to execute.
+ 	For PR java/5913:
+ 	* libjava.compile/PR5913.java: Ditto.
+ 
+ 2002-03-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Test for PR java/5848:
+ 	* libjava.compile/PR5848.xfail: New file.
+ 	* libjava.compile/PR5848.java: New file.
+ 
+ 2002-03-12  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* libjava.compile/PR5913.java: Expand test.
+ 
+ 2002-03-11  Eric Blake  <ebb9@email.byu.edu>
+ 
+ 	* libjava.compile/PR5902.java: New file.
+ 	* libjava.compile/PR5913.java: New file.
+ 	* libjava.compile/PR5913.xfail: New file.
+ 
+ 2002-02-23  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* libjava.lang/InvokeReturn.java: New file.
+ 	* libjava.lang/InvokeReturn.out: New file.
+ 
+ 2002-02-20  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* lib/libjava.exp: Add "xfail-byte-output" and "xfail-source-output".
+ 	Don't display expected and actual output for a failed output test.
+ 
+ 	* libjava.lang/ArrayStore.java: New file.
+ 	* libjava.lang/ArrayStore.out: New file.
+ 	* libjava.lang/ArrayStore.xfail: New file. xfail-byte-output.
+ 	* libjava.lang/ArrayStore2.java: New file.
+ 	* libjava.lang/ArrayStore2.out: New file.
+ 	* libjava.lang/ArrayStore2.xfail: New file. xfail-source-output.
+ 
+ 	* libjava.lang/stringconst.xfail: xfail-output -> xfail-source-output.
+ 
+ 2002-02-18  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* libjava.lang/err7.xfail: Removed.
+ 	* libjava.lang/err8.xfail: Removed.
+ 	
+ 	* libjava.lang/ArrayStore.java: New file.
+ 	* libjava.lang/ArrayStore.out: New file.
+ 
+ 2002-02-10  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/5641:
+ 	* libjava.compile/PR5641.xfail: New file.
+ 	* libjava.compile/PR5641.java: New file.
+ 
+ 2002-02-10  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* lib/libjava.exp (libjava_find_lib): Remove duplicate .la files.
+ 
+ 2002-01-05  H.J. Lu <hjl@gnu.org>
+ 
+ 	* libjava.jni/jni.exp: Add -I.. for generated header.
+ 
+ 2001-12-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/4766:
+ 	* libjava.compile/PR4766.java: New file.
+ 
+ 2001-12-20  Andrew Haley  <aph@redhat.com>
+ 
+ 	* libjava.lang/FileHandleGcTest.out:  New file.
+ 	* libjava.lang/FileHandleGcTest.java: New file.
+ 	* libjava.lang/Array_3.out: New file.
+ 	* libjava.lang/Array_3.java: New file.
+ 
+ 2001-12-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR java/3417:
+ 	* libjava.compile/PR3417.xfail: New file.
+ 	* libjava.compile/PR3417.java: New file.
+ 
+ 2001-12-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/PR3731.xfail: Removed.
+ 
+ 	Inspired by PR java/5057:
+ 	* libjava.lang/PR5057_2.java: New file.
+ 	* libjava.lang/PR5057_2.out: New file.
+ 
+ 	For PR java/5057:
+ 	* libjava.lang/PR5057.out: New file.
+ 	* libjava.lang/PR5057.java: New file.
+ 
+ 2001-12-13  Tom Tromey  <tromey@redhat.com>
+ 
+ 	For PR libgcj/5103:
+ 	* libjava.jni/cxxtest.out: New file.
+ 	* libjava.jni/cxxtest.cc: New file.
+ 	* libjava.jni/cxxtest.java: New file.
+ 	* libjava.jni/jni.exp (gcj_jni_test_one): If there is no .c file,
+ 	assume there is a .cc file.
+ 
+ 2001-12-09  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* libjava.lang/PR3731.out: Adjust output to reflect that "instanceof"
+ 	shouldn't trigger class initialization.
+ 
+ 2001-12-06  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/BlankFinal.java: Removed; incorrect test.
+ 
+ 2001-11-02  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+ 
+ 	* libjava.lang/TLtest.xfail: New file. Needs threads.
+ 
+ 2001-10-04  Alexandre Petit-Bianco  <apbianco@redhat.com>
+ 
+ 	* libjava.lang/PR3096.java: New file.
+ 	* libjava.lang/PR3096.out: Likewise.
+ 
+ 2001-09-27  Alexandre Petit-Bianco  <apbianco@redhat.com>
+ 
+ 	* libjava.compile/final_initialization_in_ctor.java: New file
+ 
+ 2001-08-28  Alexandre Petit-Bianco  <apbianco@redhat.com>
+ 
+ 	* libjava.compile/final_assignment_check.java: New file.
+ 	* libjava.compile/final_assignment_check.xfail: Likewise.
+ 	* libjava.compile/final_local_switch.java: Likewise.
+ 	
+ 2001-08-24  Alexandre Petit-Bianco  <apbianco@redhat.com>
+ 
+ 	* libjava.lang/KeepInline.out: Fixed content.
+ 
+ 2001-08-17  Alexandre Petit-Bianco  <apbianco@redhat.com>
+ 
+ 	* libjava.compile/XercesBug.java: New file.
+ 
+ 2001-08-12  Alexandre Petit-Bianco  <apbianco@redhat.com>
+ 	
+ 	* libjava.lang/Matrix4f.java: New file.
+ 	* libjava.lang/Matrix4f.out: New file.
+ 
+ 2001-08-03  Richard Henderson  <rth@redhat.com>
+ 
+ 	* libjava.jni/calls.c (Java_calls_docall): Fix typo.
+ 
+ 2001-08-01  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* libjava.lang/KeepInline.java: New file.
+ 	* libjava.lang/KeepInline.out: New file.
+ 
+ 2001-07-30  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* libjava.lang/SyncTest.java: New file.
+ 	* libjava.lang/SyncTest.out: New file.
+ 	* libjava.lang/SyncTest.xfail: New file.
+ 
+ 2001-07-27  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+ 
+ 	* lib/libjava.exp (${tool}_set_ld_library_path): New, copied from
+ 	g++.exp.
+ 
+ 2001-07-19  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* libjava.lang/PR3731.java: New file.
+ 	* libjava.lang/PR3731.out: New file.
+ 	* libjava.lang/PR3731.xfail: New file.
+ 
+ 2001-07-12  Alexandre Petit-Bianco  <apbianco@redhat.com>
+ 
+ 	* libjava.compile/anon_ctor_itf_arg.java: Moved to `libjava.lang.'
+ 	* libjava.compile/anon_ctor_itf_arg.out: Likewise
+ 	* libjava.lang/invoke_from_inner.java: New file.
+ 	* libjava.lang/invoke_from_inner.out: Likewise.
+ 
+ 2001-07-12  Alexandre Petit-Bianco  <apbianco@redhat.com>
+ 
+ 	* libjava.compile/anon_ctor_itf_arg.java: New file.
+ 	* libjava.compile/anon_ctor_itf_arg.out: New file.
+ 
+ 2001-07-12  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/N19990310_4.xfail: Removed.
+ 
+ 2001-07-10  Alexandre Petit-Bianco  <apbianco@readhat.com>
+ 
+ 	* libjava.lang/TLtest.java: New file.
+ 	* libjava.lang/TLtest.out: New file.
+ 
+ 2001-07-06  Andrew Haley  <aph@cambridge.redhat.com>
+ 
+ 	* libjava.lang/Divide_1.java: Add many more test cases.
+ 	* libjava.lang/Divide_1.out: Likewise.
+ 
+ 2001-07-03  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* libjava.lang/II.java: New file.
+ 	* libjava.lang/II.out: New file.
+ 
+ 2001-06-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/stub.xfail: Removed.
+ 
+ 2001-06-24  Andreas Jaeger  <aj@suse.de>
+ 
+ 	* libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Fix path for
+ 	jni.h.
+ 
+ 2001-06-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jni/jni.exp: New file.
+ 	* lib/libjava.exp (gcj_link): New proc.
+ 
+ 2001-06-08  Tom Tromey  <tromey@redhat.com>
+ 
+ 	Fix for PR libgcj/2874:
+ 	* libjava.mauve/mauve.exp (gcj_run_mauve_tests): New proc.
+ 	(test_mauve): Return 0 on failure.
+ 	* lib/libjava.exp (test_libjava_from_source): Remove generated
+ 	files if test is successful.
+ 	(test_libjava_from_javac): Likewise.
+ 	(gcj_cleanup): New proc.
+ 
+ 2001-06-05  Jeff Sturm  <jsturm@one-point.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): Build with `-no-install'
+ 	when $mode == "link".
+ 
+ 2001-06-02  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.lang/invokethrow.java: Fake a pass for systems which
+ 	don't support invocation.
+ 
+ 2001-05-30  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/invokethrow.out: New file.
+ 	* libjava.lang/invokethrow.java: New file.
+ 
+ 2001-05-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/Thread_Wait_Interrupt.xfail: New file.
+ 	* libjava.lang/Thread_Wait_2.xfail: New file.
+ 	* libjava.lang/Thread_Wait.xfail: New file.
+ 	* libjava.lang/Thread_Sleep.xfail: New file.
+ 	* libjava.lang/Thread_Monitor.xfail: New file.
+ 	* libjava.lang/Thread_Join.xfail: New file.
+ 	* libjava.lang/Thread_Interrupt.xfail: New file.
+ 	* libjava.lang/Thread_Alive.xfail: New file.
+ 	* lib/libjava.exp (libjava_init): Set global
+ 	libjava_uses_threads.
+ 	(test_libjava): Document `need-threads' tag.
+ 	(test_libjava_from_source): handle need-threads tag.
+ 	(test_libjava_from_javac): Likewise.
+ 
+ 2001-05-03  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/err11.xfail: Removed.
+ 
+ 2001-04-25  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/libjava.exp (libjava_init): Use UTF-8 encoding.
+ 	(test_libjava_from_javac): Likewise.
+ 
+ 2001-04-09  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/pr83.xfail: Removed.
+ 	* libjava.lang/Shazam.xfail: Removed.
+ 	* libjava.lang/PR162.xfail: Removed.
+ 	* libjava.compile/PR375.xfail: Removed.
+ 	* libjava.compile/PR208.xfail: Removed xfail-byte.
+ 	* libjava.compile/PR207.xfail: Removed xfail-byte.
+ 
+ 2001-04-07  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/weirddecl.xfail: Removed xfail-*.
+ 	* libjava.compile/PR374.xfail: Removed.
+ 
+ 2001-03-29  Alexandre Petit-Bianco  <apbianco@redhat.com>
+ 
+ 	* libjava.lang/instinit2.out: Fixed.
+ 
+ 2001-03-22  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jni/field.out: New file.
+ 	* libjava.jni/field.c: New file.
+ 	* libjava.jni/field.java: New file.
+ 
+ 2001-03-20  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/uesc.java: New file.
+ 	* libjava.compile/uesc.xfail: New file.
+ 
+ 2001-03-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): Rewrote computation of
+ 	LD_LIBRARY_PATH.  Add gcc build directory if it contains
+ 	libgcc_s.so.
+ 
+ 2001-03-14  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.compile/assignment.xfail: Removed.
+ 	* libjava.compile/assignment_2.xfail: Removed.
+ 
+ 2001-02-08  Warren Levy  <warrenl@redhat.com>
+ 
+ 	* libjava.mauve/mauve.exp: Added support for XFAILs.
+ 	* libjava.mauve/xfails: New file.
+ 
+ 2001-01-26  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.jni/martin.c (Java_martin_myNative): Flush stdout.
+ 
+ 	* libjava.jni/martin.out: New file.
+ 	* libjava.jni/martin.c: New file.
+ 	* libjava.jni/martin.java: New file.
+ 
+ 2001-01-16  Richard Henderson  <rth@redhat.com>
+ 
+ 	* lib/libjava.exp (bytecompile_file): Don't unset CLASSPATH.
+ 	(libjava_arguments): Use .jar extension for libgcj.
+ 
+ 2001-01-08  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.compile/SuperConstr.java: New test case.
+ 
+ 2000-12-18  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.mauve/mauve.exp (test_mauve): Don't look for exceptions
+ 	thrown in the test harness.
+ 	(test_mauve_sim): Likewise.
+ 
+ 2000-12-16  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* lib/libjava.exp (test_libjava_from_javac): Strange quoting trick
+ 	for `.class' link case.
+ 	(bytecompile_file): Change directory outside of `catch'.
+ 
+ 	* libjava.lang/Thread_1.java: Removed.
+ 	* libjava.lang/Thread_1.out: Likewise.
+ 
+ 	* libjava.lang/N19990310_4.xfail: New file.
+ 	* libjava.lang/stub.xfail: Added new failure modes.
+ 	* libjava.lang/stringconst.xfail: New file.
+ 	* libjava.lang/PR162.xfail: New file.
+ 	* libjava.lang/Final.xfail: Removed.
+ 
+ 2000-12-15  Tom Tromey  <tromey@redhat.com>
+ 
+ 	* libjava.lang/instinit.out: Removed erroneous line.
+ 
+ 	* libjava.lang/Thread_1.out: Expect `0' active count.
+ 
+ 	* libjava.lang/stub.xfail: New file.
+ 	* libjava.lang/pr83.xfail: New file.
+ 	* libjava.lang/err8.xfail: New file.
+ 	* libjava.lang/err7.xfail: New file.
+ 	* libjava.lang/Shazam.xfail: New file.
+ 	* libjava.lang/err11.xfail: New file.
+ 
+ 	* libjava.lang/instinit2.java: Renamed class to `instinit2'.
+ 
+ 	* libjava.lang/anon3.out: Fixed typo.
+ 
+ 	* libjava.lang/Class_1.java (main): Uncommented out previously
+ 	failing code; now it works
+ 
+ 	* lib/libjava.exp (libjava_tcompile): New proc.
+ 	(test_libjava_from_source): Use it.
+ 	(test_libjava_from_javac): Likewise.
+ 	(find_javac): New proc.
+ 	(bytecompile_file): Use it.
+ 	(test_libjava_from_javac): Handle `xfail-gcjC' tag.  If no-exec
+ 	set, then don't link even if program has a `main'.
+ 
+ 	* libjava.compile/static_3.xfail: New file.
+ 	* libjava.compile/weirddecl.xfail: New file.
+ 	* libjava.compile/static_2.xfail: New file.
+ 	* libjava.compile/not_a_redef.xfail: New file.
+ 	* libjava.compile/inner_1.xfail: New file.
+ 	* libjava.compile/assignment_2.xfail: New file.
+ 	* libjava.compile/assignment.xfail: New file.
+ 	* libjava.compile/abstr.xfail: New file.
+ 	* libjava.compile/PR375.xfail: New file.
+ 	* libjava.compile/PR374.java: New file.
+ 	* libjava.compile/PR238.xfail: New file.
+ 	* libjava.compile/PR208.xfail: New file.
+ 	* libjava.compile/PR207.xfail: New file.
+ 
+ 2000-11-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/instinit.java: Don't extend `foo'.
+ 
+ 2000-11-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/weirddecl.java: New file.
+ 
+ Fri Nov 24 11:25:20 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* lib/libjava.exp (bytecompile_file): Change default from javac to
+ 	gcj -C.
+ 	(libjava_arguments): Fix classpath.
+ 
+ 	* libjava.compile/PR129_B.no-link: New file.
+ 
+ 2000-11-24  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/PR375.java: New file.  For PR gcj/375.
+ 
+ 	* libjava.compile/PR374.java: New file.  For PR gcj/374.
+ 
+ 2000-11-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/sjis_comment3.java: Removed.
+ 	* libjava.compile/sjis_comment2.java: Removed.
+ 	* libjava.compile/sjis_comment1.java: Removed.
+ 	* libjava.compile/euc_comment3.java: Removed.
+ 	* libjava.compile/euc_comment2.java: Removed.
+ 	* libjava.compile/euc_comment1.java: Removed.
+ 
+ 2000-11-03  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): Set --tag on libtool
+ 	invocation.
+ 
+ Sun Oct  8 19:14:05 2000  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.compile/ArrayClass.java: New file.
+ 
+ 2000-08-31  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/abstr.xfail: New file.
+ 	* libjava.compile/abstr.java: New file.
+ 
+ 2000-08-09  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	From PR gcj/310:
+ 	* libjava.compile/PR310.java: New file.
+ 	* libjava.compile/PR310.xfail: New file.
+ 
+ 2000-07-30  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.compile/PR295.java: New file.
+ 	See PR gcj/295.
+ 
+ 2000-07-11  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* libjava.compile/static_init2.java: New file.
+ 
+ 2000-07-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/stringconst2.out: New file.
+ 	* libjava.lang/stringconst2.java: New file.
+ 
+ 2000-06-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	For PR gcj/260:
+ 	* libjava.lang/PR260.out: New file.
+ 	* libjava.lang/PR260.java: New file.
+ 
+ 2000-06-13  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	Test for PR java.lang/258:
+ 	* libjava.lang/Class_1.java: New file.
+ 	* libjava.lang/Class_1.out: New file.
+ 
+ 2000-05-29  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.lang/PR242.java: New file. PR gcj/242.
+ 
+ 2000-05-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/PR238.java: New file.  For PR gcj/238.
+ 
+ 	* libjava.lang/stringconst.out: New file.
+ 	* libjava.lang/stringconst.java: New file.
+ 
+ 2000-05-22  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.compile/PR232B.java: Additional PR gcj/232 test.
+ 
+ 2000-05-22  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/PR235.java: New file.  For PR gcj/235.
+ 
+ 2000-05-21  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/PR234.java: New file.  For PR gcj/234.
+ 
+ 2000-05-22  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Test for PR gcj/232:
+ 	* libjava.compile/PR232.java: New file.
+ 
+ 2000-05-18  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (bytecompile_file): Use exec, not system.
+ 
+ 2000-05-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.mauve/mauve.exp (test_mauve): Call `prune_warnings'.
+ 	(test_mauve_sim): Likewise.
+ 	(test_mauve): Redirect stderr in system call.
+ 	(test_mauve_sim): Likewise.
+ 	* lib/libjava.exp (test_libjava_from_source): Call
+ 	`prune_warnings'.
+ 	(test_libjava_from_javac): Likewise.
+ 	(bytecompile_file): Redirect stderr in system call.
+ 	* lib/libjava.exp (libjava_find_program): New proc.
+ 	(find_jvscan): Use it.
+ 	(find_gcjh): New proc.
+ 
+ 	* libjava.compile/compile.exp: Use "", not $options.
+ 
+ 2000-05-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/instance.out: New file.
+ 	* libjava.lang/instance.java: New file.
+ 
+ 2000-05-10  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.lang/StringBuffer_1.java: New file.
+ 	* libjava.lang/StringBuffer_1.out: New file.
+ 
+ 2000-05-08  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Test for PR gcj/224:
+ 	* libjava.compile/PR224.java: New file.
+ 	* libjava.compile/PR224.xfail: New file.
+ 
+ 2000-04-28  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Test for PR gcj/218:
+ 	* libjava.lang/PR218.java: New file.
+ 	* libjava.lang/PR218.out: New file.
+ 
+ 2000-04-25  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* libjava.compile/MethodFailure4.java: New file.
+ 	* libjava.compile/MethodFailure4.out: New file.
+ 
+ 2000-04-20  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* libjava.compile/block.java: New file.
+ 	* libjava.compile/block.out: New file.
+ 
+ 2000-04-20  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.jni/throwit.out: Fixed output to be correct.
+ 
+ 	* libjava.jni/noclass.java (main): `find_it' throws an exception.
+ 
+ 2000-04-16  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.compile/PR209.java: New file.
+ 
+ 2000-04-16  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.compile/PR208.java: New file.
+ 
+ 2000-04-16  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.compile/PR207.java: New file.
+ 	libjava.compile/PR207_A.java: New file.
+ 	libjava.compile/PR206.java: New file.
+ 	libjava.compile/PR206_A.java: New file.
+ 
+ 2000-04-14  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Additional test for PR gcj/148:
+ 	* libjava.compile/assignment_2.java: New file.
+ 
+ 2000-03-28  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Test case for PR libgcj/184:
+ 	* libjava.lang/pr184.java: New file.
+ 	* libjava.lang/pr184.out: New file.
+ 
+ 2000-03-27  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/test_long.out: New file.
+ 	* libjava.lang/test_long.java: New file.
+ 
+ 2000-03-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Array_1.xfail: Removed.
+ 
+ 2000-03-23  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.lang/Thread_Wait.java: New file.
+ 	* libjava.lang/Thread_Sleep.java: New file.
+ 	* libjava.lang/Thread_Monitor.java: New file.
+ 	* libjava.lang/Thread_Wait.out: New file.
+ 	* libjava.lang/Thread_Sleep.out: New file.
+ 	* libjava.lang/Thread_Monitor.out: New file.
+ 	* libjava.lang/Thread_Interrupt.java: New file.
+ 	* libjava.lang/Thread_Wait_2.java: New file.
+ 	* libjava.lang/Thread_Wait_2.out: New file.
+ 	* libjava.lang/Thread_Wait_Interrupt.java: New file.
+ 	* libjava.lang/Thread_Wait_Interrupt.out: New file.
+ 	* libjava.lang/Thread_Interrupt.out: New file.
+ 	* libjava.lang/Thread_Join.java: New file.
+ 	* libjava.lang/Thread_Join.out: New file.
+ 	* libjava.lang/Thread_Alive.java: New file.
+ 	* libjava.lang/Thread_Alive.out: New file.
+ 
+ 2000-03-22  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/iface.java: New file.
+ 	* libjava.compile/static_3.java: New file.
+ 	* libjava.compile/static_2.java: New file.
+ 	* libjava.compile/static_1.xfail: New file.
+ 	* libjava.compile/static_1.java: New file.
+ 	* libjava.compile/redef6.xfail: New file.
+ 	* libjava.compile/redef6.java: New file.
+ 	* libjava.compile/redef5.xfail: New file.
+ 	* libjava.compile/redef5.java: New file.
+ 	* libjava.compile/redef4.xfail: New file.
+ 	* libjava.compile/redef4.java: New file.
+ 	* libjava.compile/redef3.xfail: New file.
+ 	* libjava.compile/redef3.java: New file.
+ 	* libjava.compile/redef2.xfail: New file.
+ 	* libjava.compile/redef2.java: New file.
+ 	* libjava.compile/redef1.xfail: New file.
+ 	* libjava.compile/redef1.java: New file.
+ 	* libjava.compile/not_a_redef.java: New file.
+ 	* libjava.compile/inner_1.java: New file.
+ 	* libjava.compile/static_init.xfail: New file.
+ 	* libjava.compile/static_init.java: New file.
+ 
+ 2000-03-21  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Test case for PR libgcj/179:
+ 	* libjava.lang/pr179.java: New file.
+ 	* libjava.lang/pr179.out: New file.
+ 
+ 2000-03-18  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/pr109.java: Added `println' at end.
+ 
+ 2000-03-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/pr176.java: New file, for PR gcj/176.
+ 
+ 2000-03-15  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.compile/pr172.java: Correct classname to match file name.
+ 	* libjava.compile/pr174.java: ditto. Remove superfluous main()
+ 	method.
+ 	* libjava.compile/PR140.xfail: New file.
+ 
+ 2000-03-14  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/PR140.java: New file, for PR gcj/140.
+ 
+ 	* libjava.compile/pr172.java: New file, for PR gcj/172.
+ 
+ 	* libjava.compile/pr174.java: New file, for PR gcj/174.
+ 
+ 2000-03-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/PR162.java: Mention `PR162', not `Test', as class
+ 	name.
+ 
+ 2000-03-07  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	Test for PR gcj/163:
+ 	* libjava.lang/PR163.java: New file.
+ 	* libjava.lang/PR163.xfail: New file.
+ 
+ 2000-03-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (test_libjava_from_javac): Removed hack for
+ 	interfaces.  Fail if jv-scan reports a parse error.
+ 
+ 	Test for PR gcj/162:
+ 	* libjava.lang/PR162.out: New file.
+ 	* libjava.lang/PR162.java: New file.
+ 
+ 2000-03-06  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	Test for PR gcj/164:
+ 	* libjava.compile/PR164.xfail: New file.
+ 	* libjava.compile/PR164.java: New file.
+ 
+ 2000-03-06  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.compile/PR127.java: New file.
+ 	* libjava.compile/PR127.xfail: New file.
+         PR 127 test case from Joerg Brunsmann.
+ 
+ 2000-03-05  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (test_libjava): Document `shouldfail' token.
+ 	(test_libjava_from_source): Handle `shouldfail' case.
+ 	(test_libjava_from_javac): Likewise.
+ 
+ 	Test for PR libgcj/124:
+ 	* libjava.compile/PR124.java: New file.
+ 	* libjava.compile/PR124.xfail: New file.
+ 
+ 2000-03-05  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.lang/PR141.java: New file.
+ 	* libjava.lang/PR141.out: New file.
+ 	For PR java.io/141.
+ 
+ 2000-03-05  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.compile/PR129_B.java: New file.
+ 	* libjava.compile/support/PR129_A.java: New file.
+ 	For PR gcj/129.
+ 
+ 2000-03-04  Anthony Green  <green@redhat.com>
+ 
+ 	* libjava.lang/PR160.java: New file.
+ 	* libjava.lang/PR160.out: New file.
+ 
+ 2000-02-28  Mo DeJong <mdejong@cygnus.com>
+ 
+ 	* libjava.compile/static_inner.java: New file.
+ 
+ 2000-02-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.jni/noclass.c: New file.
+ 	* libjava.jni/noclass.out: New file.
+ 	* libjava.jni/noclass.java: New file.
+ 
+ 2000-02-18  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.jni/register.java: New file.
+ 	* libjava.jni/register.c: New file.
+ 	* libjava.jni/register.out: New file.
+ 
+ 2000-02-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.jni/calls.c: New file.
+ 	* libjava.jni/calls.out: New file.
+ 	* libjava.jni/calls.java: New file.
+ 
+ 	* libjava.jni/throwit.java: New file.
+ 	* libjava.jni/throwit.c: New file.
+ 	* libjava.jni/throwit.out: New file.
+ 
+ 2000-02-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.jni/findclass.java: New file
+ 	* libjava.jni/findclass.c: New file
+ 	* libjava.jni/findclass.out: New file
+ 
+ 2000-02-16  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.lang/InterfaceDispatch.java: New file.
+ 	* libjava.lang/InterfaceDispatch.out: New file.
+ 
+ 2000-02-15  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.jni/virtual.java: New file.
+ 	* libjava.jni/virtual.c: New file.
+ 	* libjava.jni/virtual.out: New file.
+ 	* libjava.jni/final_method.java: New file.
+ 	* libjava.jni/final_method.c: New file.
+ 	* libjava.jni/final_method.out: New file.
+ 	* libjava.jni/overload.java: New file.
+ 	* libjava.jni/overload.c: New file.
+ 	* libjava.jni/overload.out: New file.
+ 	* libjava.jni/simple_int.java: New file.
+ 	* libjava.jni/simple_int.c: New file.
+ 	* libjava.jni/simple_int.out: New file.
+ 	* libjava.jni/invoke.out: New file.
+ 	* libjava.jni/invoke.c: New file.
+ 	* libjava.jni/invoke.java: New file.
+ 
+ 2000-02-12  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.compile/comment.java: New file.
+ 
+ 2000-02-12  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.compile/assignment.java: New file.
+ 
+ 2000-02-12  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.compile/inner_data.java: New file.
+ 
+ 2000-02-12  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.compile/inner_inherit.java: New file.
+ 
+ 2000-02-12  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* libjava.lang/inner_interface.out: New file.
+ 	* libjava.lang/inner_interface.java: New file.
+ 	* libjava.lang/final_int.out: New file.
+ 	* libjava.lang/final_int.java: New file.
+ 	* libjava.lang/final_static_and_friend.out: New file.
+ 	* libjava.lang/final_static_and_friend.java: New file.
+ 
+ 2000-02-07  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* libjava.lang/anonarray3.out: New file.
+ 	* libjava.lang/anonarray3.java: New file.
+ 
+ 2000-02-09  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/inner_priv.java: New file.
+ 
+ 2000-02-07  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* libjava.lang/instinit2.out: New file.
+ 	* libjava.lang/instinit2.java: New file.
+ 	* libjava.lang/instinit.out: New file.
+ 	* libjava.lang/instinit.java: New file.
+ 	* libjava.lang/anonarray2.out: New file.
+ 	* libjava.lang/anonarray2.java: New file.
+ 	* libjava.lang/anonarray.out: New file.
+ 	* libjava.lang/anonarray.java: New file.
+ 	* libjava.lang/nested_with_ctor.out: New file.
+ 	* libjava.lang/nested_with_ctor.java: New file.
+ 	* libjava.lang/anfi.out: New file.
+ 	* libjava.lang/anfi.java: New file.
+ 	* libjava.lang/stub.out: New file.
+ 	* libjava.lang/stub.java: New file.
+ 
+ 2000-01-30  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* libjava.lang/final_inner.java: New file.
+ 	* libjava.lang/final_inner.out: Likewise.
+ 
+ 2000-01-20  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/BlankFinal.java: New file.
+ 
+ 2000-01-19  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+ 
+ 	* libjava.lang/anon.java, libjava.lang/anon2.java,
+ 	libjava.lang/anon3.java, libjava.lang/anon4.java,
+ 	libjava.lang/direct_read.java, libjava.lang/direct_write.java,
+ 	libjava.lang/indirect.java, libjava.lang/indirect_read.java,
+ 	libjava.lang/indirect_write.java, libjava.lang/inner1.java,
+ 	libjava.lang/inner2.java, libjava.lang/inner3.java,
+ 	libjava.lang/inner4.java, libjava.lang/inner_array.java,
+ 	libjava.lang/multiple_finit.java,
+ 	libjava.lang/private_direct_read.java,
+ 	libjava.lang/private_direct_write.java,
+ 	libjava.lang/private_indirect_read.java,
+ 	libjava.lang/private_indirect_write.java,
+ 	libjava.lang/search_outer.java, libjava.lang/tmi.java,
+ 	libjava.lang/tp.java, libjava.lang/update_outer.java: New files.
+ 
+ 2000-01-18  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/inner_pub.java: New file.
+ 
+ 2000-01-16  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.lang/pr133.out: New file.
+ 	* libjava.lang/pr133.java: New file.
+ 
+ 	* libjava.lang/pr100.xpo: New file.
+ 	* libjava.lang/pr100.java: New file.
+ 
+ 2000-01-16  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.lang/pr93.xpo: New file.
+ 	* libjava.lang/pr93.java: New file.
+ 
+ 2000-01-16  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.lang/lang.exp: Handle regexp matches correctly.
+ 
+ 2000-01-16  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.lang/pr83.out: New file.
+ 	* libjava.lang/pr83.java: New file.
+ 
+ 	* libjava.lang/pr109.out: New file.
+ 	* libjava.lang/pr109.java: New file.
+ 
+ 2000-01-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/klass.out: New file.
+ 	* libjava.lang/klass.java: New file.
+ 
+ 1999-12-31  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.mauve/mauve.exp (mauve_compute_uses): Let user select
+ 	specific tests to run.
+ 
+ 1999-10-19  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.compile/invokeinterface: New directory.
+ 	* libjava.compile/invokeinterface/Test.java: New file. Test code for
+ 	PR gcj/71 and PR gcj/72.
+ 	* libjava.compile/invokeinterface/A.java: New file.
+ 	* libjava.compile/invokeinterface/B.java: New file.
+ 
+ 1999-10-02  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.compile/Case.xfail: Removed.  This test should pass now.
+ 
+ 	* libjava.compile/compile.exp: Copied from test.exp.
+ 	* libjava.compile/test.exp: Removed.
+ 
+ 	* libjava.lang/lang.exp: Copied from test.exp.
+ 	* libjava.lang/test.exp: Removed.
+ 
+ 1999-10-01  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/PR56.out: New file.
+ 	* libjava.lang/PR56.java: New file.
+ 
+ 1999-09-29  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/PR55.out: New file.
+ 	* libjava.lang/PR55.java: New file.
+ 
+ 1999-08-25  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.toshiba/G19990304_01.out: New file.
+ 	* libjava.toshiba/G19990304_01.java: New file.
+ 
+ 	* libjava.lang/G19990310_01.out: New file.
+ 	* libjava.lang/G19990310_01.java: New file.
+ 
+ 1999-08-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	From Bryce McKinlay:
+ 	* libjava.lang/Array_2.java: New file.
+ 	* libjava.lang/Array_2.out: New file.
+ 
+ 1999-08-09  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.lang/Primes.java: New file.
+ 	* libjava.lang/Primes.out: New file.
+ 
+ 1999-07-31  Alexandre Oliva  <oliva@dcc.unicamp.br>
+ 
+ 	* lib/libjava.exp (bytecompile_file): Use `env(SUN_JAVAC)', that
+ 	defaults to javac, as Sun-javac compiler or compatible.
+ 	(libjava_init): Get GCJ from environment if neither GCJ_UNDER_TEST
+ 	nor TOOL_EXECUTABLE are set.  Set `original_ld_library_path' from
+ 	environment.
+ 	(libjava_arguments): Prepend `.' and `$srcdir/$subdir' to
+ 	CLASSPATH, for `support' sources.  Search for libgcj.spec in
+ 	`$objdir/..', by adding -B to GCJ_UNDER_TEST.  Append
+ 	original_ld_library_path to ld_library_path.
+ 	* libjava.mauve/mauve.exp (test_mauve): Set `env(GCJ)' from
+ 	GCJ_UNDER_TEST, calculated just like in libjava.exp.
+ 
+ 1999-07-14  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/G19990217_02.no-link: New file.
+ 	* libjava.compile/test.exp: Look for `.no-link' file.
+ 	* lib/libjava.exp (test_libjava_from_source): Added `no-link'
+ 	option.
+ 	(test_libjava_from_javac): Likewise.  Also, handle package
+ 	information from class name when creating class file name.
+ 
+ 1999-07-13  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/test.exp: New file.
+ 	* libjava.lang/err9.out: New file.
+ 	* libjava.lang/err9.java: New file.
+ 	* libjava.lang/err8.out: New file.
+ 	* libjava.lang/err8.java: New file.
+ 	* libjava.lang/err7.out: New file.
+ 	* libjava.lang/err7.java: New file.
+ 	* libjava.lang/err6.out: New file.
+ 	* libjava.lang/err6.java: New file.
+ 	* libjava.lang/err5.out: New file.
+ 	* libjava.lang/err5.java: New file.
+ 	* libjava.lang/err4.out: New file.
+ 	* libjava.lang/err4.java: New file.
+ 	* libjava.lang/err3.out: New file.
+ 	* libjava.lang/err3.java: New file.
+ 	* libjava.lang/err2.out: New file.
+ 	* libjava.lang/err2.java: New file.
+ 	* libjava.lang/err13.out: New file.
+ 	* libjava.lang/err13.java: New file.
+ 	* libjava.lang/err12.out: New file.
+ 	* libjava.lang/err12.java: New file.
+ 	* libjava.lang/err11.out: New file.
+ 	* libjava.lang/err11.java: New file.
+ 	* libjava.lang/err10.out: New file.
+ 	* libjava.lang/err10.java: New file.
+ 	* libjava.lang/err1.out: New file.
+ 	* libjava.lang/err1.java: New file.
+ 	* libjava.lang/N19990310_5.out: New file.
+ 	* libjava.lang/N19990310_5.java: New file.
+ 	* libjava.lang/N19990310_4.out: New file.
+ 	* libjava.lang/N19990310_4.java: New file.
+ 	* libjava.lang/N19990310_3.out: New file.
+ 	* libjava.lang/N19990310_3.java: New file.
+ 	* libjava.lang/N19990310_02.out: New file.
+ 	* libjava.lang/N19990310_02.java: New file.
+ 	* libjava.lang/G19990303_02.out: New file.
+ 	* libjava.lang/G19990303_02.java: New file.
+ 	* libjava.lang/G19990303_01.out: New file.
+ 	* libjava.lang/G19990303_01.java: New file.
+ 	* libjava.lang/G19990302_02.out: New file.
+ 	* libjava.lang/G19990302_02.java: New file.
+ 	* libjava.lang/G19990301_01.out: New file.
+ 	* libjava.lang/G19990301_01.java: New file.
+ 
+ 	* libjava.compile/N19990317.java: New file.
+ 	* libjava.compile/N19990310_01.java: New file.
+ 	* libjava.compile/G19990225_01.java: New file.
+ 	* libjava.compile/G19990217_02.java: New file.
+ 	* libjava.compile/G19990217_01.java: New file.
+ 	* libjava.compile/G19990210_3.java: New file.
+ 	* libjava.compile/G19990210_2.java: New file.
+ 	* libjava.compile/G19990210_1.java: New file.
+ 
+ 1999-07-06  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Final.xfail: Output fails, not exec.
+ 
+ 	* libjava.lang/Final.xfail: New file.
+ 	* libjava.compile/Case.xfail: New file.
+ 	* libjava.compile/Where.xfail: New file.
+ 	* libjava.compile/test.exp: Look for `.xfail' files.
+ 	* libjava.lang/test.exp: Don't look for `.arg' files.
+ 	Do look for `.xfail' files.
+ 	* lib/libjava.exp (test_libjava_from_source): Changed meaning of
+ 	`exec_args' argument.  Handle `xfail-*' arguments.
+ 	(test_libjava_from_javac): Likewise.
+ 	(test_libjava): Likewise.
+ 	(libjava_read_xfail): New proc.
+ 
+ 1999-07-05  Bryce McKinlay  <bryce@albatross.co.nz>
+ 
+ 	* libjava.lang/Final.java: Added.
+ 	* libjava.lang/Final.out: Added.
+ 
+ 1999-07-02  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Finalize_1.out: Removed.
+ 	* libjava.lang/Finalize_1.java: Removed.
+ 
+ 	* libjava.lang/Thread_1.out: Updated.
+ 	* libjava.lang/Thread_1.java: Don't run exit test.
+ 
+ Thu Jul  1 16:22:19 1999  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.mauve/mauve.exp: Don't stop counting test results
+ 	prematurely.
+ 
+ 1999-06-25  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (test_libjava_from_javac): Fixed typo.  Always
+ 	make class_files a list.
+ 
+ 	* lib/libjava.exp (test_libjava_from_javac): Prepend `$objdir/' to
+ 	class file names.
+ 
+ 1999-06-24  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): If `libtool' not found in
+ 	build tree, just use $GCJ_UNDER_TEST as compiler.
+ 
+ 1999-06-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): Handle -lzgcj.
+ 
+ 1999-05-24  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.lang/Shazam.java: New file.
+ 	libjava.lang/Shazam.out: New file.
+ 
+ 1999-05-12  Andrew Haley  <aph@cygnus.com>
+ 
+ 	* libjava.lang/Invoke_2.java: New file.
+ 
+ 1999-05-03  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): Don't use -nodefaultlibs.
+ 	(libjava_find_lib): Add `-L' option to find the actual library.
+ 
+ 	* libjava.mauve/mauve.exp (test_mauve): Pass `link' to
+ 	libjava_arguments when linking.
+ 	(test_mauve_sim): Likewise.
+ 	* lib/libjava.exp (libjava_arguments): Run `libtool' to link.
+ 	Don't use `-static'.  Added `mode' argument.  Use -nodefaultlibs
+ 	when linking.
+ 	(test_libjava_from_source): Mention why target_compile failed.
+ 	Pass `link' to libjava_arguments when linking.  Only do `xfails'
+ 	for tests we would actually have run.
+ 	(test_libjava_from_javac): Likewise.
+ 	(libjava_find_lib): Return name of `.la' file.
+ 
+ 1999-04-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (libjava_find_lib): New proc.
+ 	(libjava_arguments): Use it.  Force static linking.
+ 
+ Thu Apr 22 14:19:35 1999  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.compile/OperatorBenchmark.java: New file.
+ 
+ 1999-04-09  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* libjava.mauve/mauve.exp (KEYS): Default to libgcj.
+ 
+ 1999-04-09  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/plusplus.java: New file.
+ 	From MoT <Sebastien.Villemot@ens.fr>.
+ 
+ 1999-04-06  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.mauve/mauve.exp (test_mauve_sim): Reference
+ 	mauve-libgcj.
+ 	(test_mauve): Likewise.
+ 
+ 1999-03-30  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.mauve/mauve.exp: Renamed from test.exp.  With the new
+ 	name it is easier to run just the Mauve tests.
+ 
+ 	* libjava.mauve/test.exp (test_mauve): Added gnu/testlet/config to
+ 	list of files to link in.
+ 	(test_mauve_sim): Likewise.
+ 	* libjava.mauve/DejaGNUTestHarness.java (srcdir, tmpdir): New
+ 	static variables.
+ 	(DejaGNUTestHarness): Removed argument from constructor.
+ 	(dejasrcdir): New static variable.
+ 	(main): Set `dejasrcdir'.
+ 	(getSourceDirectory): New method.
+ 
+ 1999-03-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.compile/perc.java: New file.
+ 
+ 1999-02-26  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.util/test.exp: Removed.
+ 
+ 1999-02-25  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.mauve/test.exp: Make sure current directory is correct
+ 	after tests are run.
+ 
+ 	* libjava.mauve/test.exp (test_mauve): Removed extra arg in call
+ 	to bytecompile_file.
+ 	(test_mauve_sim): Likewise.
+ 
+ Thu Feb 25 09:21:03 1999  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.compile/euc_comment1.java,
+ 	libjava.compile/euc_comment2.java,
+ 	libjava.compile/euc_comment3.java,
+ 	libjava.compile/euc_comment1.java,
+ 	libjava.compile/euc_comment2.java,
+ 	libjava.compile/euc_comment3.java: New files.
+ 
+ 	* libjava.compile/Case.java, libjava.compile/support/Case.java:
+ 	New files.
+ 
+ 1999-02-24  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (find_jvscan): New proc.
+ 	(bytecompile_file): Removed `srcfile_in' argument.
+ 	(test_libjava_from_javac): Use `jv-scan' program to find name of
+ 	`main' and name of all generated classes.  Compile all generated
+ 	classes, not just primary class.  For no-exec tests, only try to
+ 	build the .o, not the full executable.
+ 
+ Wed Feb 24 11:22:32 1999  Anthony Green  <green@hoser.cygnus.com>
+ 
+ 	* libjava.compile/test.exp: Minor fix.
+ 
+ 1999-02-23  Anthony Green  <green@cygnus.com>
+ 
+ 	* libjava.compile/Where.java, libjava.compile/support/Waldo.java,
+ 	libjava.compile/Twice.java, libjava.compile/Semi.java,
+ 	libjava.compile/Statics.java, libjava.compile/test.exp,
+ 	libjava.lang/Synch.java, libjava.lang/Synch.out: New files.
+ 
+ 1999-02-16  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Makefile.in: Rebuilt.
+ 	* Makefile.am (AUTOMAKE_OPTIONS): Added no-installinfo.
+ 
+ Wed Feb 17 19:53:51 1999  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* libjava.mauve/test.exp: modified file allows Mauve tests to
+ 	run on JMR board; simplified script to use same procedure for
+ 	all testing
+ 
+ 1999-02-10  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): Updated to track library
+ 	renames.
+ 
+ 1999-02-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/slash.java: New file.
+ 	* libjava.lang/slash.out: New file.
+ 
+ Mon Feb  1 05:17:40 1999  Anthony Green  <green@fencer.cygnus.com>
+ 
+ 	* lib/libjava.exp: Test compiling from source as well as from
+ 	bytecodes.
+ 
+ 1999-01-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.mauve/test.exp (mauve_compute_uses): Read classes file,
+ 	not choices file.
+ 
+ 	* libjava.mauve/test.exp (test_mauve): Added
+ 	ResourceNotFoundException to list of harness files to compile.
+ 	(test_mauve_sim): Likewise.
+ 
+ 1998-12-17  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Invoke_1.java: New file.
+ 
+ 	* libjava.lang/Thread_1.java (Thread_1): Class now public.
+ 	* libjava.lang/Array_1.java (Array_1): Class now public.
+ 
+ 	* libjava.lang/Throw_1.out: New file.
+ 	* libjava.lang/Throw_1.java: New file.
+ 
+ 1998-12-11  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (libjava_arguments): New proc.
+ 	(test_libjava): Use it.
+ 	(bytecompile_file): Added classpath argument.
+ 	* libjava.mauve/test.exp: New file.
+ 	* libjava.mauve/DejaGNUTestHarness.java: New file.
+ 
+ 1998-12-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* Various: removed all test files that migrated to Mauve.
+ 
+ 1998-12-07  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Array_1.java (main): Removed extraneous
+ 	getSuperclass call.
+ 
+ 1998-11-23  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Finalize_1.java (main): Clear `f' before GC.
+ 
+ 1998-10-08  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Thread_1.out: Added missing line.
+ 
+ Fri Oct  2 14:55:46 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Array_1.java: Changed so Cloneable test can run
+ 	even if clone test itself fails.
+ 
+ 	* libjava.lang/Array_1.java: Uncommented calls to getSuperclass.
+ 	Added test to see if array implements Cloneable.
+ 
+ Thu Oct  1 11:28:06 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Array_1.java: New file.
+ 	* libjava.lang/Array_1.out: New file.
+ 
+ Thu Oct  1 13:51:00 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* testsuite/lib/libjava.exp: Find qthreads library correctly.
+ 
+ Tue Sep 29 16:36:43 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* libjava.util/Hashtable_1.java, libjava.util/Hashtable_1.out: Created.
+ 
+ Tue Sep 29 00:40:26 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Thread_1.java (started): New field.
+ 	(run): Set `started'.  Handle all synchronization here.
+ 	(Thread_1): Initialize `started'.
+ 	(doit): Just start both threads and let them handle their own
+ 	synchronization.
+ 
+ 	* libjava.lang/Boolean_5.out: Changed to reflect the
+ 	Boolean_5.java changes.
+ 	* libjava.lang/Boolean_5.java: Don't replace the system
+ 	properties, just augment them.  Don't print the property object.
+ 	* libjava.lang/Long_2.out: Changed to reflect Long_2.java
+ 	changes.
+ 	* libjava.lang/Long_2.java: Don't replace the system properties,
+ 	just augment them.  Don't print the property object.
+ 	* libjava.lang/Integer_2.out: Changed to reflect Integer_2.java
+ 	changes.
+ 	* libjava.lang/Integer_2.java: Don't replace the system
+ 	properties, just augment them.  Don't print the property object.
+ 
+ Sat Sep 26 15:57:39 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Thread_1.java (main): Catch InterruptedException.
+ 
+ Tue Sep 22 13:45:58 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Thread_1.out: New file.
+ 	* libjava.lang/Thread_1.java: New file.
+ 
+ Mon Sep 21 14:20:08 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (test_libjava): Use runtest_file_p to see if
+ 	test should be short-circuited.
+ 
+ Tue Sep 15 13:57:45 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Character_9.java: New file.
+ 	* libjava.lang/Character_9.out: New file.
+ 
+ Mon Sep 14 12:27:04 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Character_8.out: New file.
+ 	* libjava.lang/Character_8.java: New file.
+ 	* libjava.lang/Character_7.out: New file.
+ 	* libjava.lang/Character_7.java: New file.
+ 	* libjava.lang/Character_6.out: New file.
+ 	* libjava.lang/Character_6.java: New file.
+ 	* libjava.lang/Character_5.out: New file.
+ 	* libjava.lang/Character_5.java: New file.
+ 	* libjava.lang/Character_4.out: New file.
+ 	* libjava.lang/Character_4.java: New file.
+ 	* libjava.lang/Character_3.out: New file.
+ 	* libjava.lang/Character_3.java: New file.
+ 	* libjava.lang/Character_2.out: New file.
+ 	* libjava.lang/Character_2.java: New file.
+ 
+ Fri Sep 11 10:04:55 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* libjava.lang/Character_1.out: New file.
+ 	* libjava.lang/Character_1.java: New file.
+ 
+ Fri Sep 18 14:43:59 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* libjava.lang/Long_1.java, libjava.lang/Long_1.out,
+ 	libjava.lang/Long_2.java, libjava.lang/Long_2.out: Created.
+ 
+ Fri Sep 18 12:43:52 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* libjava.lang/Integer_1.java, libjava.lang/Integer_1.out,
+ 	libjava.lang/Integer_2.java, libjava.lang/Integer_2.out: Created.
+ 
+ 	* libjava.lang/String_2.java, libjava.lang/String_2.out: Use JDK 1.2
+ 	values for hashCode.
+ 
+ Thu Sep 10 12:44:42 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* libjava.lang/String_1.java, libjava.lang/String_1.out,
+ 	libjava.lang/String_2.java, libjava.lang/String_2.out,
+ 	libjava.lang/String_3.java, libjava.lang/String_3.out,
+ 	libjava.lang/String_4.java, libjava.lang/String_4.out,
+ 	libjava.lang/String_5.java, libjava.lang/String_5.out,
+ 	libjava.lang/String_6.java, libjava.lang/String_6.out,
+ 	libjava.lang/String_7.java, libjava.lang/String_7.out,
+ 	libjava.lang/String_8.java, libjava.lang/String_8.out,
+ 	libjava.lang/String_9.java, libjava.lang/String_9.out: Created.
+ 
+ Tue Sep  8 13:31:59 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* libjava.lang/Byte_1.java, libjava.lang/Byte_1.out,
+ 	libjava.lang/Short_1.java, libjava.lang/Short_1.out: New files.
+ 
+ Thu Sep  3 15:57:57 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* libjava.lang/Boolean_1.java, libjava.lang/Boolean_1.out,
+ 	libjava.lang/Boolean_2.java, libjava.lang/Boolean_2.out,
+ 	libjava.lang/Boolean_3.java, libjava.lang/Boolean_3.out,
+ 	libjava.lang/Boolean_4.java, libjava.lang/Boolean_4.out,
+ 	libjava.lang/Boolean_5.java, libjava.lang/Boolean_5.out: Created.
+ 
+ Tue Sep  1 12:27:54 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp (bytecompile_file): Don't throw error if byte
+ 	compilation fails.  Added `srcfile_in' argument.  Changed return
+ 	value.
+ 	(test_libjava): Gracefully handle byte-compilation failure.
+ 
+ 	* libjava.lang/System_15.java (main): Typo fix.
+ 	(System_15): Choose correct class name.
+ 	(X): Moved into System_15.
+ 
+ 	* libjava.lang/System_1.java, libjava.lang/System_1.out,
+ 	libjava.lang/System_10.java, libjava.lang/System_10.out,
+ 	libjava.lang/System_11.java, libjava.lang/System_11.out,
+ 	libjava.lang/System_12.java, libjava.lang/System_12.out,
+ 	libjava.lang/System_13.java, libjava.lang/System_13.out,
+ 	libjava.lang/System_14.java, libjava.lang/System_14.out,
+ 	libjava.lang/System_15.java, libjava.lang/System_15.out,
+ 	libjava.lang/System_2.java, libjava.lang/System_2.out,
+ 	libjava.lang/System_3.java, libjava.lang/System_3.out,
+ 	libjava.lang/System_4.java, libjava.lang/System_4.out,
+ 	libjava.lang/System_5.java, libjava.lang/System_5.out,
+ 	libjava.lang/System_6.java, libjava.lang/System_6.out,
+ 	libjava.lang/System_7.java, libjava.lang/System_7.out,
+ 	libjava.lang/System_8.java, libjava.lang/System_8.out,
+ 	libjava.lang/System_9.java, libjava.lang/System_9.out: New files.
+ 
+ 	* lib/libjava.exp (test_libjava): Only add -lgc or -lqthreads if
+ 	library is actually found.
+ 
+ 	* lib/libjava.exp (test_libjava): Look for qthreads.
+ 
+ Mon Aug 31 17:49:21 1998  Warren Levy  <warrenl@cygnus.com>
+ 
+ 	* libjava.util/Random_1.java, libjava.util/Random_1.out,
+ 	libjava.util/Random_2.java, libjava.util/Random_2.out,
+ 	libjava.util/Random_3.java, libjava.util/Random_3.out,
+ 	libjava.util/Random_4.java, libjava.util/Random_4.out,
+ 	libjava.util/Random_5.java, libjava.util/Random_5.out,
+ 	libjava.util/Random_6.java, libjava.util/Random_6.out,
+ 	libjava.util/Random_7.java, libjava.util/Random_7.out,
+ 	libjava.util/Random_8.java, libjava.util/Random_8.out,
+ 	libjava.util/test.exp: Created.
+ 
+ Mon Aug 31 16:37:19 1998  Tom Tromey  <tromey@cygnus.com>
+ 
+ 	* lib/libjava.exp: Changed gjavac to gcj everywhere.
+ 
+ Wed Aug 26 12:20:10 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* Makefile.am (EXPECT,RUNTEST): Find expect and runtest
+ 	correctly.
+ 	* Makefile.in: Rebuild.
+ 
+ Tue Aug 25 18:43:33 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* lib/libjava.exp: Fix CLASSPATH setting.
+ 
+ Tue Aug 25 17:27:37 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* ChangeLog, lib/libjava.exp, config/default.exp,
+ 	libjava.lang/Finalize_1.java, libjava.lang/Finalize_1.out,
+ 	libjava.lang/Float_1.java, libjava.lang/Float_1.out
+ 	libjava.lang/test.exp, Makefile.am, Makefile.in: Created.
diff -Nrcpad gcc-3.4.3/libjava/testsuite/Makefile.am gcc-4.0.0/libjava/testsuite/Makefile.am
*** gcc-3.4.3/libjava/testsuite/Makefile.am	Mon Jun 24 04:44:51 2002
--- gcc-4.0.0/libjava/testsuite/Makefile.am	Fri Jul 16 05:36:35 2004
***************
*** 2,7 ****
--- 2,10 ----
  
  AUTOMAKE_OPTIONS = foreign dejagnu
  
+ # autoconf2.13's target_alias
+ target_noncanonical = @target_noncanonical@
+ 
  # Setup the testing framework, if you have one
  EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \
              echo $(top_builddir)/../expect/expect ; \
diff -Nrcpad gcc-3.4.3/libjava/testsuite/Makefile.in gcc-4.0.0/libjava/testsuite/Makefile.in
*** gcc-3.4.3/libjava/testsuite/Makefile.in	Tue Jan 13 17:37:23 2004
--- gcc-4.0.0/libjava/testsuite/Makefile.in	Wed Apr  6 21:38:31 2005
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999 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.
--- 1,8 ----
! # 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.
***************
*** 10,110 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
! 
! SHELL = @SHELL@
! 
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = ..
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
  AR = @AR@
  AS = @AS@
  BACKTRACESPEC = @BACKTRACESPEC@
  CAIRO_CFLAGS = @CAIRO_CFLAGS@
  CAIRO_LIBS = @CAIRO_LIBS@
  CC = @CC@
  CHECKREFSPEC = @CHECKREFSPEC@
! COMPPATH = @COMPPATH@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
  DIRLTDL = @DIRLTDL@
  DIVIDESPEC = @DIVIDESPEC@
! DLLTOOL = @DLLTOOL@
  EXCEPTIONSPEC = @EXCEPTIONSPEC@
  EXEEXT = @EXEEXT@
- EXTRA_CC_FILES = @EXTRA_CC_FILES@
  GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  GCDEPS = @GCDEPS@
  GCINCS = @GCINCS@
  GCJ = @GCJ@
  GCJFLAGS = @GCJFLAGS@
  GCJVERSION = @GCJVERSION@
  GCLIBS = @GCLIBS@
- GCOBJS = @GCOBJS@
  GCSPEC = @GCSPEC@
  GCTESTSPEC = @GCTESTSPEC@
  GLIB_CFLAGS = @GLIB_CFLAGS@
- GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
  GLIB_LIBS = @GLIB_LIBS@
! GLIB_MKENUMS = @GLIB_MKENUMS@
! GOBJECT_QUERY = @GOBJECT_QUERY@
  GTK_CFLAGS = @GTK_CFLAGS@
  GTK_LIBS = @GTK_LIBS@
  HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
- HAVE_LIB = @HAVE_LIB@
  IEEESPEC = @IEEESPEC@
  INCLTDL = @INCLTDL@
  INTERPRETER = @INTERPRETER@
  JC1GCSPEC = @JC1GCSPEC@
! LIB = @LIB@
  LIBART_CFLAGS = @LIBART_CFLAGS@
- LIBART_CONFIG = @LIBART_CONFIG@
  LIBART_LIBS = @LIBART_LIBS@
  LIBFFI = @LIBFFI@
  LIBFFIINCS = @LIBFFIINCS@
--- 12,135 ----
  # 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 = 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/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)
+ CONFIG_HEADER = $(top_builddir)/include/config.h \
+ 	$(top_builddir)/gcj/libgcj-config.h
+ CONFIG_CLEAN_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ DEJATOOL = $(PACKAGE)
+ RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
  AR = @AR@
  AS = @AS@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
  BACKTRACESPEC = @BACKTRACESPEC@
  CAIRO_CFLAGS = @CAIRO_CFLAGS@
  CAIRO_LIBS = @CAIRO_LIBS@
  CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
  CHECKREFSPEC = @CHECKREFSPEC@
! CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
! CPP = @CPP@
! CPPFLAGS = @CPPFLAGS@
  CXX = @CXX@
  CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
  DIRLTDL = @DIRLTDL@
  DIVIDESPEC = @DIVIDESPEC@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXCEPTIONSPEC = @EXCEPTIONSPEC@
  EXEEXT = @EXEEXT@
  GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
  GCDEPS = @GCDEPS@
  GCINCS = @GCINCS@
  GCJ = @GCJ@
+ GCJDEPMODE = @GCJDEPMODE@
  GCJFLAGS = @GCJFLAGS@
+ GCJH = @GCJH@
  GCJVERSION = @GCJVERSION@
  GCLIBS = @GCLIBS@
  GCSPEC = @GCSPEC@
  GCTESTSPEC = @GCTESTSPEC@
  GLIB_CFLAGS = @GLIB_CFLAGS@
  GLIB_LIBS = @GLIB_LIBS@
! GTK_AWT_FALSE = @GTK_AWT_FALSE@
! GTK_AWT_TRUE = @GTK_AWT_TRUE@
! GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
! GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
  GTK_CFLAGS = @GTK_CFLAGS@
  GTK_LIBS = @GTK_LIBS@
  HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
  IEEESPEC = @IEEESPEC@
  INCLTDL = @INCLTDL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
  INTERPRETER = @INTERPRETER@
+ JAVA_HOME = @JAVA_HOME@
+ JAVA_HOME_SET_FALSE = @JAVA_HOME_SET_FALSE@
+ JAVA_HOME_SET_TRUE = @JAVA_HOME_SET_TRUE@
  JC1GCSPEC = @JC1GCSPEC@
! LDFLAGS = @LDFLAGS@
  LIBART_CFLAGS = @LIBART_CFLAGS@
  LIBART_LIBS = @LIBART_LIBS@
  LIBFFI = @LIBFFI@
  LIBFFIINCS = @LIBFFIINCS@
*************** LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
*** 113,161 ****
  LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
  LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
  LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
  LIBICONV = @LIBICONV@
  LIBLTDL = @LIBLTDL@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
! LTLIB = @LTLIB@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
! OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
  PANGOFT2_LIBS = @PANGOFT2_LIBS@
  PERL = @PERL@
  PKG_CONFIG = @PKG_CONFIG@
! PLATFORMOBJS = @PLATFORMOBJS@
  RANLIB = @RANLIB@
  STRIP = @STRIP@
  SYSDEP_SOURCES = @SYSDEP_SOURCES@
  SYSTEMSPEC = @SYSTEMSPEC@
  SYS_ZLIBS = @SYS_ZLIBS@
  THREADCXXFLAGS = @THREADCXXFLAGS@
  THREADDEPS = @THREADDEPS@
  THREADINCS = @THREADINCS@
  THREADLDFLAGS = @THREADLDFLAGS@
  THREADLIBS = @THREADLIBS@
- THREADOBJS = @THREADOBJS@
  THREADSPEC = @THREADSPEC@
  TOOLKIT = @TOOLKIT@
  VERSION = @VERSION@
  ZINCS = @ZINCS@
  ZLIBS = @ZLIBS@
  ZLIBSPEC = @ZLIBSPEC@
  ZLIBTESTSPEC = @ZLIBTESTSPEC@
  gcc_version = @gcc_version@
! glibjava_CXX = @glibjava_CXX@
  here = @here@
  libgcj_basedir = @libgcj_basedir@
  mkinstalldirs = @mkinstalldirs@
  tool_include_dir = @tool_include_dir@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
  toolexecmainlibdir = @toolexecmainlibdir@
- 
  AUTOMAKE_OPTIONS = foreign dejagnu
  
  # Setup the testing framework, if you have one
--- 138,291 ----
  LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
  LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
  LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@
+ LIBGCJ_LD_SYMBOLIC = @LIBGCJ_LD_SYMBOLIC@
  LIBICONV = @LIBICONV@
  LIBLTDL = @LIBLTDL@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
! LTLIBICONV = @LTLIBICONV@
! LTLIBOBJS = @LTLIBOBJS@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
! NATIVE_FALSE = @NATIVE_FALSE@
! NATIVE_TRUE = @NATIVE_TRUE@
! NEEDS_DATA_START_FALSE = @NEEDS_DATA_START_FALSE@
! NEEDS_DATA_START_TRUE = @NEEDS_DATA_START_TRUE@
  OBJEXT = @OBJEXT@
+ ONESTEP_FALSE = @ONESTEP_FALSE@
+ ONESTEP_TRUE = @ONESTEP_TRUE@
  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@
  PERL = @PERL@
  PKG_CONFIG = @PKG_CONFIG@
! PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@
  RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
  STRIP = @STRIP@
+ SUPPLY_BACKTRACE_FALSE = @SUPPLY_BACKTRACE_FALSE@
+ SUPPLY_BACKTRACE_TRUE = @SUPPLY_BACKTRACE_TRUE@
  SYSDEP_SOURCES = @SYSDEP_SOURCES@
  SYSTEMSPEC = @SYSTEMSPEC@
  SYS_ZLIBS = @SYS_ZLIBS@
+ TESTSUBDIR_FALSE = @TESTSUBDIR_FALSE@
+ TESTSUBDIR_TRUE = @TESTSUBDIR_TRUE@
  THREADCXXFLAGS = @THREADCXXFLAGS@
  THREADDEPS = @THREADDEPS@
  THREADINCS = @THREADINCS@
  THREADLDFLAGS = @THREADLDFLAGS@
  THREADLIBS = @THREADLIBS@
  THREADSPEC = @THREADSPEC@
  TOOLKIT = @TOOLKIT@
+ USING_BOEHMGC_FALSE = @USING_BOEHMGC_FALSE@
+ 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@
+ USING_NOGC_TRUE = @USING_NOGC_TRUE@
+ USING_NO_THREADS_FALSE = @USING_NO_THREADS_FALSE@
+ USING_NO_THREADS_TRUE = @USING_NO_THREADS_TRUE@
+ USING_POSIX_PLATFORM_FALSE = @USING_POSIX_PLATFORM_FALSE@
+ USING_POSIX_PLATFORM_TRUE = @USING_POSIX_PLATFORM_TRUE@
+ USING_POSIX_THREADS_FALSE = @USING_POSIX_THREADS_FALSE@
+ USING_POSIX_THREADS_TRUE = @USING_POSIX_THREADS_TRUE@
+ USING_WIN32_PLATFORM_FALSE = @USING_WIN32_PLATFORM_FALSE@
+ USING_WIN32_PLATFORM_TRUE = @USING_WIN32_PLATFORM_TRUE@
+ USING_WIN32_THREADS_FALSE = @USING_WIN32_THREADS_FALSE@
+ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
  VERSION = @VERSION@
+ XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
+ XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+ X_CFLAGS = @X_CFLAGS@
+ X_EXTRA_LIBS = @X_EXTRA_LIBS@
+ X_LIBS = @X_LIBS@
+ X_PRE_LIBS = @X_PRE_LIBS@
  ZINCS = @ZINCS@
+ ZIP = @ZIP@
  ZLIBS = @ZLIBS@
  ZLIBSPEC = @ZLIBSPEC@
  ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ ac_ct_AR = @ac_ct_AR@
+ ac_ct_AS = @ac_ct_AS@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_CXX = @ac_ct_CXX@
+ ac_ct_GCJ = @ac_ct_GCJ@
+ 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__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
+ am__fastdepGCJ_TRUE = @am__fastdepGCJ_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@
+ 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@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
  libgcj_basedir = @libgcj_basedir@
+ libstdcxx_incdir = @libstdcxx_incdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
  mkinstalldirs = @mkinstalldirs@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ subdirs = @subdirs@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ 
+ # 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 dejagnu
  
  # Setup the testing framework, if you have one
*************** EXPECT = `if [ -f $(top_builddir)/../exp
*** 163,313 ****
              echo $(top_builddir)/../expect/expect ; \
            else echo expect ; fi`
  
- 
  RUNTEST = "`if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \
  	       echo $(top_srcdir)/../dejagnu/runtest ; \
  	    else echo runtest; fi` $(AM_RUNTESTFLAGS)"
  
- 
  AM_RUNTESTFLAGS = INTERPRETER=$(INTERPRETER)
! CONFIG_HEADER = ../include/config.h ../gcj/libgcj-config.h
! CONFIG_CLEAN_FILES = 
! DIST_COMMON =  ChangeLog Makefile.am Makefile.in
! 
! 
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
  
- TAR = gtar
- GZIP_ENV = --best
- all: all-redirect
  .SUFFIXES:
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile
! 
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
! 
! tags: TAGS
! TAGS:
  
  
! distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
  
! subdir = testsuite
  
! distdir: $(DISTFILES)
! 	here=`cd $(top_builddir) && pwd`; \
! 	top_distdir=`cd $(top_distdir) && pwd`; \
! 	distdir=`cd $(distdir) && pwd`; \
! 	cd $(top_srcdir) \
! 	  && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign testsuite/Makefile
! 	@for file in $(DISTFILES); do \
! 	  d=$(srcdir); \
! 	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
! 	  else \
! 	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
! 	  fi; \
! 	done
  
! RUNTESTFLAGS =
  
! DEJATOOL = $(PACKAGE)
  
- RUNTESTDEFAULTFLAGS = --tool $(DEJATOOL) --srcdir $$srcdir
  
  check-DEJAGNU: site.exp
! 	srcdir=`cd $(srcdir) && pwd`; export srcdir; \
  	EXPECT=$(EXPECT); export EXPECT; \
  	runtest=$(RUNTEST); \
  	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
! 	  $$runtest $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
  	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
  	fi
  site.exp: Makefile
  	@echo 'Making a new site.exp file...'
! 	@test ! -f site.bak || rm -f site.bak
! 	@echo '## these variables are automatically generated by make ##' > $@-t
! 	@echo '# Do not edit here.  If you wish to override these values' >> $@-t
! 	@echo '# edit the last section' >> $@-t
! 	@echo 'set tool $(DEJATOOL)' >> $@-t
! 	@echo 'set srcdir $(srcdir)' >> $@-t
! 	@echo 'set objdir' `pwd` >> $@-t
! 	@echo 'set host_alias $(host_alias)' >> $@-t
! 	@echo 'set host_triplet $(host_triplet)' >> $@-t
! 	@echo 'set target_alias $(target_alias)' >> $@-t
! 	@echo 'set target_triplet $(target_triplet)' >> $@-t
! 	@echo 'set build_alias $(build_alias)' >> $@-t
! 	@echo 'set build_triplet $(build_triplet)' >> $@-t
! 	@echo '## All variables above are generated by configure. Do Not Edit ##' >> $@-t
! 	@test ! -f site.exp || sed '1,/^## All variables above are.*##/ d' site.exp >> $@-t
  	@test ! -f site.exp || mv site.exp site.bak
! 	@mv $@-t site.exp
! info-am:
! info: info-am
! dvi-am:
! dvi: dvi-am
  check-am: all-am
  	$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
  check: check-am
! installcheck-am:
! installcheck: installcheck-am
! install-exec-am:
  install-exec: install-exec-am
- 
- install-data-am:
  install-data: install-data-am
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-am
- uninstall-am:
- uninstall: uninstall-am
- all-am: Makefile
- all-redirect: all-am
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs:
- 
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-generic
  
! mostlyclean: mostlyclean-am
  
! clean-am:  clean-generic mostlyclean-am
  
! clean: clean-am
  
! distclean-am:  distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-am
  
! maintainer-clean-am:  maintainer-clean-generic distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
  maintainer-clean: maintainer-clean-am
  
! .PHONY: tags distdir check-DEJAGNU info-am info dvi-am dvi check \
! check-am installcheck-am installcheck install-exec-am install-exec \
! install-data-am install-data install-am install uninstall-am uninstall \
! all-redirect all-am all installdirs mostlyclean-generic \
! distclean-generic clean-generic maintainer-clean-generic clean \
! mostlyclean distclean maintainer-clean
  
  
  # 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.
--- 293,500 ----
              echo $(top_builddir)/../expect/expect ; \
            else echo expect ; fi`
  
  RUNTEST = "`if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \
  	       echo $(top_srcdir)/../dejagnu/runtest ; \
  	    else echo runtest; fi` $(AM_RUNTESTFLAGS)"
  
  AM_RUNTESTFLAGS = INTERPRETER=$(INTERPRETER)
! 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) --foreign  testsuite/Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  testsuite/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:
  
  
  check-DEJAGNU: site.exp
! 	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
  	EXPECT=$(EXPECT); export EXPECT; \
  	runtest=$(RUNTEST); \
  	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
! 	  l='$(DEJATOOL)'; for tool in $$l; do \
! 	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
! 	  done; \
  	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
  	fi
  site.exp: Makefile
  	@echo 'Making a new site.exp file...'
! 	@echo '## these variables are automatically generated by make ##' >site.tmp
! 	@echo '# Do not edit here.  If you wish to override these values' >>site.tmp
! 	@echo '# edit the last section' >>site.tmp
! 	@echo 'set srcdir $(srcdir)' >>site.tmp
! 	@echo "set objdir `pwd`" >>site.tmp
! 	@echo 'set build_alias "$(build_alias)"' >>site.tmp
! 	@echo 'set build_triplet $(build_triplet)' >>site.tmp
! 	@echo 'set host_alias "$(host_alias)"' >>site.tmp
! 	@echo 'set host_triplet $(host_triplet)' >>site.tmp
! 	@echo 'set target_alias "$(target_alias)"' >>site.tmp
! 	@echo 'set target_triplet $(target_triplet)' >>site.tmp
! 	@echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
! 	@test ! -f site.exp || \
! 	  sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
! 	@-rm -f site.bak
  	@test ! -f site.exp || mv site.exp site.bak
! 	@mv site.tmp site.exp
! 
! distclean-DEJAGNU:
! 	-rm -f site.exp site.bak
! 	-l='$(DEJATOOL)'; for tool in $$l; do \
! 	  rm -f $$tool.sum $$tool.log; \
! 	done
! 
! 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
  	$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
  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-DEJAGNU 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-DEJAGNU check-am clean clean-generic \
+ 	clean-libtool distclean distclean-DEJAGNU 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.
diff -Nrcpad gcc-3.4.3/libjava/testsuite/lib/libjava.exp gcc-4.0.0/libjava/testsuite/lib/libjava.exp
*** gcc-3.4.3/libjava/testsuite/lib/libjava.exp	Mon Oct 25 09:22:45 2004
--- gcc-4.0.0/libjava/testsuite/lib/libjava.exp	Wed Mar 30 18:43:06 2005
***************
*** 1,6 ****
! # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation
  
! load_lib "libgloss.exp"
  
  # GCJ_UNDER_TEST is the compiler under test.
  
--- 1,12 ----
! # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
  
! proc load_gcc_lib { filename } {
!     global srcdir
!     load_file $srcdir/../../gcc/testsuite/lib/$filename
! }
! 
! load_lib libgloss.exp
! load_gcc_lib target-libpath.exp
  
  # GCJ_UNDER_TEST is the compiler under test.
  
*************** proc bytecompile_file { file objdir {cla
*** 109,117 ****
      }
      set here [pwd]
      cd $dirname
!     send_log "byte compile: $javac [list $file] -d $objdir 2>@ stdout\n"
      if {[catch {
! 	set q [eval exec "$javac [list $file] -d $objdir 2>@ stdout"]
      } msg]} then {
  	send_log "couldn't compile $file: $msg\n"
  	set r 0
--- 115,123 ----
      }
      set here [pwd]
      cd $dirname
!     send_log "byte compile: $javac -g [list $file] -d $objdir 2>@ stdout\n"
      if {[catch {
! 	set q [eval exec "$javac -g [list $file] -d $objdir 2>@ stdout"]
      } msg]} then {
  	send_log "couldn't compile $file: $msg\n"
  	set r 0
*************** proc libjava_init { args } {
*** 133,145 ****
      global libjava_initialized libjava_uses_threads
      global GCJ_UNDER_TEST
      global TOOL_EXECUTABLE
-     global original_ld_library_path
      global env objdir
      global env libgcj_jar
      global tool_root_dir
      global libjava_libgcc_s_path
      global target_triplet
  
      if { $libjava_initialized == 1 } { return; }
  
      if ![info exists GCJ_UNDER_TEST] {
--- 139,154 ----
      global libjava_initialized libjava_uses_threads
      global GCJ_UNDER_TEST
      global TOOL_EXECUTABLE
      global env objdir
      global env libgcj_jar
      global tool_root_dir
      global libjava_libgcc_s_path
      global target_triplet
  
+     # We set LC_ALL and LANG to C so that we get the same error messages as expected.
+     setenv LC_ALL C
+     setenv LANG C
+ 
      if { $libjava_initialized == 1 } { return; }
  
      if ![info exists GCJ_UNDER_TEST] {
*************** proc libjava_init { args } {
*** 173,196 ****
      # Always set encoding used by gcj.
      append GCJ_UNDER_TEST " --encoding=UTF-8"
  
-     if [info exists env(LD_LIBRARY_PATH)] {
- 	set original_ld_library_path $env(LD_LIBRARY_PATH)
- 	# For HP-UX.
-     } elseif [info exists env(SHLIB_PATH)] {
- 	set original_ld_library_path $env(SHLIB_PATH)
- 	# For Darwin.
-     } elseif [info exists env(DYLD_LIBRARY_PATH)] {
- 	set original_ld_library_path $env(DYLD_LIBRARY_PATH)
- 	# For Solaris 32 bit.
-     } elseif [info exists env(LD_LIBRARY_PATH_32)] {
- 	set original_ld_library_path $env(LD_LIBRARY_PATH_32)
- 	# For Solaris 64 bit.
-     } elseif [info exists env(LD_LIBRARY_PATH_64)] {
- 	set original_ld_library_path $env(LD_LIBRARY_PATH_64)
-     } else {
- 	set original_ld_library_path ""
-     }
- 
      set wrapper_file "";
      set wrap_compile_flags "";
      if [target_info exists needs_status_wrapper] {
--- 182,187 ----
*************** proc libjava_init { args } {
*** 206,213 ****
      # Finally, add the gcc build directory so that we can find the
      # shared libgcc.  This, like much of dejagnu, is hideous.
      set libjava_libgcc_s_path {}
!     
!     if { [string match "powerpc-*-darwin*" $target_triplet] } {
  	set so_extension "dylib"
      } else {
  	set so_extension "so"
--- 197,204 ----
      # Finally, add the gcc build directory so that we can find the
      # shared libgcc.  This, like much of dejagnu, is hideous.
      set libjava_libgcc_s_path {}
! 
!     if { [istarget "*-*-darwin*"] } {
  	set so_extension "dylib"
      } else {
  	set so_extension "so"
*************** proc libjava_find_lib {dir name} {
*** 279,306 ****
  # is used with -B.
  proc libjava_find_spec {} {
      global objdir
-     set gp [get_multilibs]
- 
-     if {[file exists $gp/libjava/libgcj.spec]} then {
- 	return "$gp/libjava/"
-     }
      return "$objdir/../"
  }
  
! # Find `gij'.
  proc libjava_find_gij {} {
!     global base_dir
!     set gp [get_multilibs]
!     if {$gp != ""} {
! 	set file $gp/libjava/gij
!     } else {
! 	set file $base_dir/../gij
!     }
  
!     if {[file exists $file]} {
! 	return $file
      }
!     return gij
  }
  
  # Remove a bunch of files.
--- 270,287 ----
  # is used with -B.
  proc libjava_find_spec {} {
      global objdir
      return "$objdir/../"
  }
  
! # Find `gij'.  Return empty string if not found.
  proc libjava_find_gij {} {
!     global base_dir objdir
  
!     set gijdir [lookfor_file [get_multilibs] libjava];
!     if {! [file exists $gijdir/gij]} {
! 	return ""
      }
!     return $gijdir/gij
  }
  
  # Remove a bunch of files.
*************** proc libjava_arguments {{mode compile}} 
*** 332,337 ****
--- 313,321 ----
      global tool_root_dir
      global libgcj_jar
      global libjava_libgcc_s_path
+     global libjava_ld_library_path
+     global ld_library_path
+     global target_triplet
  
      if [info exists LIBJAVA] {
  	set libjava $LIBJAVA;
*************** proc libjava_arguments {{mode compile}} 
*** 345,351 ****
      # Basically we want to build up a colon separated path list from
      # the value of $libjava.
  
!     set lpath {}
      foreach dir [list $libjava] {
  	foreach item [split $dir " "] {
  	    switch -glob -- $item {
--- 329,335 ----
      # Basically we want to build up a colon separated path list from
      # the value of $libjava.
  
!     set lpath "."
      foreach dir [list $libjava] {
  	foreach item [split $dir " "] {
  	    switch -glob -- $item {
*************** proc libjava_arguments {{mode compile}} 
*** 359,379 ****
      set lpath [concat $lpath $libjava_libgcc_s_path]
      verbose "lpath = $lpath ; libgcc_s_path = $libjava_libgcc_s_path"
      set ld_library_path [join $lpath :]
  
      # That's enough to make things work for the normal case.
      # If we wanted to handle an arbitrary value of libjava,
      # then we'd have to do a lot more work.
  
!     # Set variables the dynamic linker looks at.
!     global original_ld_library_path
!     setenv LD_LIBRARY_PATH "$ld_library_path:$original_ld_library_path"
  
!     verbose "LD_LIBRARY_PATH = $env(LD_LIBRARY_PATH)"
  
      # Set the CLASSPATH environment variable
-     verbose "CLASSPATH is .:$srcdir/$subdir:$objdir:$libgcj_jar"
      global env
!     set env(CLASSPATH) ".:$srcdir/$subdir:$objdir:$libgcj_jar"
  
      if {$mode == "link"} {
  	global wrapper_file wrap_compile_flags
--- 343,371 ----
      set lpath [concat $lpath $libjava_libgcc_s_path]
      verbose "lpath = $lpath ; libgcc_s_path = $libjava_libgcc_s_path"
      set ld_library_path [join $lpath :]
+     set libjava_ld_library_path "$ld_library_path"
  
      # That's enough to make things work for the normal case.
      # If we wanted to handle an arbitrary value of libjava,
      # then we'd have to do a lot more work.
  
!     set_ld_library_path_env_vars
!     if [info exists env(LD_LIBRARY_PATH)] {
! 	verbose "LD_LIBRARY_PATH = $env(LD_LIBRARY_PATH)"
!     }
  
!     # Determine CLASSPATH separator
!     if { [string match "i?86-pc-mingw32*" $target_triplet] } {
! 	set sep ";"
!     } else {
! 	set sep ":"
!     }
  
      # Set the CLASSPATH environment variable
      global env
!     set env(CLASSPATH) \
! 	[join [list . $srcdir/$subdir $objdir $libgcj_jar] $sep]
!     verbose "CLASSPATH is $env(CLASSPATH)"
  
      if {$mode == "link"} {
  	global wrapper_file wrap_compile_flags
*************** proc gcj_link {program main files {optio
*** 453,476 ****
  # Invoke the program and see what happens.  Return 0 on failure.
  proc gcj_invoke {program expectFile ld_library_additions} {
    global env
!   set lib_path $env(LD_LIBRARY_PATH)
  
!   set newval .
    if {[llength $ld_library_additions] > 0} {
!     append newval :[join $ld_library_additions :]
    }
-   append newval :$lib_path
- 
-   setenv LD_LIBRARY_PATH $newval
  
!   verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)"
  
    set result [libjava_load ./$program]
    set status [lindex $result 0]
    set output [lindex $result 1]
  
    # Restore setting
!   setenv LD_LIBRARY_PATH $lib_path
  
    if {$status != "pass"} {
      verbose "got $output"
--- 445,469 ----
  # Invoke the program and see what happens.  Return 0 on failure.
  proc gcj_invoke {program expectFile ld_library_additions} {
    global env
!   global libjava_ld_library_path
!   global ld_library_path
  
!   set ld_library_path "$libjava_ld_library_path"
    if {[llength $ld_library_additions] > 0} {
!     append ld_library_path :[join $ld_library_additions :]
    }
  
!   set_ld_library_path_env_vars
!   if [info exists env(LD_LIBRARY_PATH)] {
!     verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)"
!   }
  
    set result [libjava_load ./$program]
    set status [lindex $result 0]
    set output [lindex $result 1]
  
    # Restore setting
!   restore_ld_library_path_env_vars
  
    if {$status != "pass"} {
      verbose "got $output"
*************** proc gcj_invoke {program expectFile ld_l
*** 495,501 ****
  # Invoke a program and check its output.  EXECUTABLE is the program;
  # ARGS are the arguments to the program.  Returns 1 if tests passed
  # (or things were left untested), 0 otherwise.
! proc libjava_invoke {errname testName optName executable inpfile resultfile args} {
      upvar $optName opts
  
      if {[info exists opts(no-exec)]} {
--- 488,509 ----
  # Invoke a program and check its output.  EXECUTABLE is the program;
  # ARGS are the arguments to the program.  Returns 1 if tests passed
  # (or things were left untested), 0 otherwise.
! proc libjava_invoke {errname testName optName executable inpfile resultfile
! 		      ld_library_additions args} {
!     global env
!     global libjava_ld_library_path
!     global ld_library_path
! 
!     set ld_library_path "$libjava_ld_library_path"
!     if {[llength $ld_library_additions] > 0} {
! 	append ld_library_path :[join $ld_library_additions :]
!     }
! 
!     set_ld_library_path_env_vars
!     if [info exists env(LD_LIBRARY_PATH)] {
! 	verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)"
!     }
! 
      upvar $optName opts
  
      if {[info exists opts(no-exec)]} {
*************** proc libjava_invoke {errname testName op
*** 512,517 ****
--- 520,529 ----
      set result [libjava_load $executable $args "$inpfile"]
      set status [lindex $result 0]
      set output [lindex $result 1]
+ 
+     # Restore LD_LIBRARY_PATH setting.
+     restore_ld_library_path_env_vars
+ 
      if {[info exists opts(xfail-exec)]} then {
  	setup_xfail *-*-*
      }
*************** proc test_libjava_from_source { options 
*** 658,664 ****
  	set opts(xfail-output) x
      }
      if {[libjava_invoke $errname "source compiled test" opts $executable \
! 	   $inpfile $resultfile]} {
  	# Everything ok, so clean up.
  	eval gcj_cleanup $removeList
      }
--- 670,676 ----
  	set opts(xfail-output) x
      }
      if {[libjava_invoke $errname "source compiled test" opts $executable \
! 	   $inpfile $resultfile ""]} {
  	# Everything ok, so clean up.
  	eval gcj_cleanup $removeList
      }
*************** proc test_libjava_from_javac { options s
*** 792,802 ****
      # We purposely ignore errors here; we still want to run the other
      # appropriate tests.
      set gij [libjava_find_gij]
!     # libjava_find_gij will return `gij' if it couldn't find the
      # program; in this case we want to skip the test.
!     if {$INTERPRETER == "yes" && $gij != "gij"} {
  	libjava_invoke $errname "gij test" opts $gij \
! 	  $inpfile $resultfile $main_name
      }
  
      # Initial arguments.
--- 804,814 ----
      # We purposely ignore errors here; we still want to run the other
      # appropriate tests.
      set gij [libjava_find_gij]
!     # libjava_find_gij will return "" if it couldn't find the
      # program; in this case we want to skip the test.
!     if {$INTERPRETER == "yes" && $gij != ""} {
  	libjava_invoke $errname "gij test" opts $gij \
! 	  $inpfile $resultfile "" $main_name
      }
  
      # Initial arguments.
*************** proc test_libjava_from_javac { options s
*** 859,865 ****
  	set opts(xfail-output) x
      }
      if {[libjava_invoke $errname "bytecode->native test" opts $executable \
! 	   $inpfile $resultfile]} {
  	# Everything ok, so clean up.
  	eval gcj_cleanup $removeList
      }
--- 871,877 ----
  	set opts(xfail-output) x
      }
      if {[libjava_invoke $errname "bytecode->native test" opts $executable \
! 	   $inpfile $resultfile ""]} {
  	# Everything ok, so clean up.
  	eval gcj_cleanup $removeList
      }
*************** proc default_libjava_version {} {
*** 903,927 ****
  proc default_libjava_start { } {
  }
  
- # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but
- # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH
- # (for the 64-bit ABI).  The right way to do this would be to modify
- # unix.exp -- but that's not an option since it's part of DejaGNU
- # proper, so we do it here, by trickery.
- # The same applies to darwin (DYLD_LIBRARY_PATH), solaris 32 bit
- # (LD_LIBRARY_PATH_32), solaris 64 bit (LD_LIBRARY_PATH_64), and HP-UX
- # (SHLIB_PATH).
- proc ${tool}_set_ld_library_path { name element op } {
-   setenv LD_LIBRARYN32_PATH [getenv LD_LIBRARY_PATH]
-   setenv LD_LIBRARY64_PATH [getenv LD_LIBRARY_PATH]
-   setenv SHLIB_PATH [getenv LD_LIBRARY_PATH]
-   setenv DYLD_LIBRARY_PATH [getenv LD_LIBRARY_PATH]
-   setenv LD_LIBRARY_PATH_32 [getenv LD_LIBRARY_PATH]
-   setenv LD_LIBRARY_PATH_64 [getenv LD_LIBRARY_PATH]
- }
- 
- trace variable env(LD_LIBRARY_PATH) w ${tool}_set_ld_library_path
- 
  # Local Variables:
  # tcl-indent-level:4
  # End:
--- 915,920 ----
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/AssertBug.java gcc-4.0.0/libjava/testsuite/libjava.compile/AssertBug.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/AssertBug.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/AssertBug.java	Fri Sep 24 13:55:42 2004
***************
*** 0 ****
--- 1,7 ----
+ // PR java/16927
+ public class AssertBug {
+     public void bug(Integer i) {
+         assert(false):
+             i.toString() + "!";
+     }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR13733.java gcc-4.0.0/libjava/testsuite/libjava.compile/PR13733.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR13733.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR13733.java	Fri Jan 23 00:21:05 2004
***************
*** 0 ****
--- 1,10 ----
+ // 15.26: "The type of an assignment expression is the type of the variable"
+ // (LHS).
+ class PR13733 {
+   String a, c = "";
+   Object b;
+ 
+   void bug() {
+     a = (b = c);	// invalid without cast
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR13733.xfail gcc-4.0.0/libjava/testsuite/libjava.compile/PR13733.xfail
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR13733.xfail	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR13733.xfail	Fri Jan 23 00:21:05 2004
***************
*** 0 ****
--- 1 ----
+ shouldfail
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR14853.java gcc-4.0.0/libjava/testsuite/libjava.compile/PR14853.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR14853.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR14853.java	Mon Dec  6 15:30:57 2004
***************
*** 0 ****
--- 1,17 ----
+ class tt
+ {
+   static final tt tt1 = new tt();
+   tt()
+   {
+   }
+ }
+ 
+ public class PR14853
+ {
+   public static void main (String[] args)
+   {
+     // This is an invalid assignment.  gcj would get confused in
+     // definite assignment when compiling to object code.
+     tt.tt1 = new tt();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR14853.xfail gcc-4.0.0/libjava/testsuite/libjava.compile/PR14853.xfail
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR14853.xfail	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR14853.xfail	Mon Dec  6 15:30:57 2004
***************
*** 0 ****
--- 1 ----
+ shouldfail
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR15769.java gcc-4.0.0/libjava/testsuite/libjava.compile/PR15769.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR15769.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR15769.java	Tue Jun  8 13:30:33 2004
***************
*** 0 ****
--- 1,10 ----
+ class PR15769 {
+         private boolean foo () { return false; }
+ 
+ 
+         public boolean bar (double blaz)
+         {       
+                 return (Double.POSITIVE_INFINITY != blaz) && foo ();
+         }
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR16249.java gcc-4.0.0/libjava/testsuite/libjava.compile/PR16249.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR16249.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR16249.java	Tue Jun 29 18:09:58 2004
***************
*** 0 ****
--- 1,18 ----
+ // Regression test for PR java/16249.
+ 
+ class PR16249
+ {
+     static void bug(byte[] iCode, int pc)
+     {
+         while (pc < 100) {
+             try {
+                 switch (iCode[pc] & 0xff) {
+                     case 666:
+                         iCode[++pc] = 1;
+                 }
+             }
+             catch (Throwable ex) {
+             }
+         }
+     }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR16675.java gcc-4.0.0/libjava/testsuite/libjava.compile/PR16675.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR16675.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR16675.java	Thu Dec  2 19:38:49 2004
***************
*** 0 ****
--- 1,13 ----
+ public class PR16675 {
+     public PR16675(Object obj) { }
+ 
+     public void someTestMethod() {
+         // gcj crashed compiling this, as `null' had type `void*'.
+         new PR16675(null) { };
+     }
+ 
+     public void someTestMethod2() {
+         new PR16675((Object) null) { };
+     }
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR16701.java gcc-4.0.0/libjava/testsuite/libjava.compile/PR16701.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR16701.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR16701.java	Mon Aug  2 21:20:46 2004
***************
*** 0 ****
--- 1,10 ----
+ class Cl
+ {
+   private static final int CONSTANT1 = 0x001;
+   public static final int CONSTANT2 = 0x002 >> CONSTANT1;
+ }
+ 
+ public class PR16701
+ {
+   public static final int VALUE = Cl.CONSTANT2;
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR19277.java gcc-4.0.0/libjava/testsuite/libjava.compile/PR19277.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR19277.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR19277.java	Mon Jan 10 18:07:22 2005
***************
*** 0 ****
--- 1,7 ----
+ class PR19277
+ {
+   void snafu (int[] array)
+   {
+     array.length++;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR19277.xfail gcc-4.0.0/libjava/testsuite/libjava.compile/PR19277.xfail
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR19277.xfail	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR19277.xfail	Mon Jan 10 18:07:22 2005
***************
*** 0 ****
--- 1 ----
+ shouldfail
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/PR19295.java gcc-4.0.0/libjava/testsuite/libjava.compile/PR19295.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/PR19295.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/PR19295.java	Mon Jan 24 14:34:19 2005
***************
*** 0 ****
--- 1,16 ----
+ public class PR19295 implements myInterface {
+         public long tagBits = 0;
+ 
+         public final boolean isArrayType() {
+             return (tagBits & IsArrayType) != 0;
+         }
+ }
+ 
+ abstract class blah {
+ 	public final static int Bit1 = 0x2;
+ }
+ 
+ interface myInterface {
+         long IsArrayType = blah.Bit1;
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/inner_data.java gcc-4.0.0/libjava/testsuite/libjava.compile/inner_data.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/inner_data.java	Sat Feb 12 22:57:18 2000
--- gcc-4.0.0/libjava/testsuite/libjava.compile/inner_data.java	Fri Jul  9 23:36:50 2004
*************** import java.util.Random;
*** 4,10 ****
  
  public class inner_data
  {
!     private class Randomer extends Random {
  	public long xxx ()
  	{
  	    return seed;
--- 4,10 ----
  
  public class inner_data
  {
!     private class Randomer extends Super {
  	public long xxx ()
  	{
  	    return seed;
*************** public class inner_data
*** 12,14 ****
--- 12,18 ----
      }
  }
  
+ class Super
+ {
+   protected long seed;
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/pr10459.java gcc-4.0.0/libjava/testsuite/libjava.compile/pr10459.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/pr10459.java	Sat May  3 00:33:18 2003
--- gcc-4.0.0/libjava/testsuite/libjava.compile/pr10459.java	Fri Jul  9 23:36:51 2004
*************** public class pr10459
*** 4,10 ****
  
    public void aMethod() throws Throwable
    {
!     for (; ;x.clone().clone())
        ;
    }
  }
--- 4,15 ----
  
    public void aMethod() throws Throwable
    {
!     for (; ;x.foo().foo())
        ;
    }
+   
+   pr10459 foo() 
+   {
+     return null;
+   }
  }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/pr10459_2.java gcc-4.0.0/libjava/testsuite/libjava.compile/pr10459_2.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/pr10459_2.java	Sat May  3 00:33:18 2003
--- gcc-4.0.0/libjava/testsuite/libjava.compile/pr10459_2.java	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- public class pr10459_2
- {
-   pr10459_2 x;
- 
-   public void aMethod() throws Throwable
-   {
-     for (; ;x.clone().clone())
-       break;
-   }
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/pr15656.java gcc-4.0.0/libjava/testsuite/libjava.compile/pr15656.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/pr15656.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/pr15656.java	Fri Sep 24 15:42:57 2004
***************
*** 0 ****
--- 1,8 ----
+ // This used to cause a gcj crash in error_if_numeric_overflow.
+ 
+ public class pr15656 {
+         public static void defineClass ()
+         {
+                 Object ctor = new Object;
+         }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/pr15656.xfail gcc-4.0.0/libjava/testsuite/libjava.compile/pr15656.xfail
*** gcc-3.4.3/libjava/testsuite/libjava.compile/pr15656.xfail	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/pr15656.xfail	Fri Sep 24 15:42:57 2004
***************
*** 0 ****
--- 1 ----
+ shouldfail
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/pr17329.java gcc-4.0.0/libjava/testsuite/libjava.compile/pr17329.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/pr17329.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/pr17329.java	Thu Sep 23 16:24:42 2004
***************
*** 0 ****
--- 1,14 ----
+ // gcj had a problem with "SomeClass.field++" when gimplifying.
+ 
+ class helper
+ {
+   static int value;
+ }
+ 
+ public class pr17329
+ {
+   static void doit ()
+   {
+     helper.value += 2;
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.compile/pr17500.java gcc-4.0.0/libjava/testsuite/libjava.compile/pr17500.java
*** gcc-3.4.3/libjava/testsuite/libjava.compile/pr17500.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.compile/pr17500.java	Sat Sep 25 19:08:27 2004
***************
*** 0 ****
--- 1,28 ----
+ // gcj had a problem compiling code where two anonymous classes had
+ // captured constructor arguments of the same type but with different
+ // names.
+ 
+ public class pr17500
+ {
+   public Object m1 (final Object one)
+   {
+     return new Comparable()
+       {
+ 	public int compareTo(Object other)
+ 	{
+ 	  return one == other ? 0 : 1;
+ 	}
+       };
+   }
+ 
+   public Object m2 (final Object two)
+   {
+     return new Comparable()
+       {
+ 	public int compareTo(Object other)
+ 	{
+ 	  return two == other ? 0 : 1;
+ 	}
+       };
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jacks/jacks.exp gcc-4.0.0/libjava/testsuite/libjava.jacks/jacks.exp
*** gcc-3.4.3/libjava/testsuite/libjava.jacks/jacks.exp	Tue Nov 11 20:04:22 2003
--- gcc-4.0.0/libjava/testsuite/libjava.jacks/jacks.exp	Wed Nov 24 04:39:40 2004
***************
*** 1,6 ****
--- 1,13 ----
  # Run the Jacks test suite.
  # See http://www-124.ibm.com/developerworks/oss/cvs/jikes/~checkout~/jacks/jacks.html
  
+ proc load_gcc_lib { filename } {
+     global srcdir
+     load_file $srcdir/../../gcc/testsuite/lib/$filename
+ }
+ 
+ load_gcc_lib target-libpath.exp
+ 
  proc gcj_jacks_setup_xfail {ary} {
    upvar $ary array
    global srcdir
*************** proc gcj_jacks_write {filename} {
*** 16,22 ****
    global GCJ_UNDER_TEST
    global libgcj_jar
    global libjava_libgcc_s_path
!   global original_ld_library_path
  
    set gcjl [split $GCJ_UNDER_TEST]
    set gcj_cmd [lindex $gcjl 0]
--- 23,29 ----
    global GCJ_UNDER_TEST
    global libgcj_jar
    global libjava_libgcc_s_path
!   global ld_library_path
  
    set gcjl [split $GCJ_UNDER_TEST]
    set gcj_cmd [lindex $gcjl 0]
*************** proc gcj_jacks_write {filename} {
*** 28,35 ****
    puts $fd "set JAVA_CLASSPATH \"$libgcj_jar\""
    puts $fd "set JAVAC_FLAGS [list $rest]"
    puts $fd "set JAVA [list [libjava_find_gij]]"
!   puts $fd "set JAVA_FLAGS \"\""
    puts $fd "set JAVAC_ENCODING_FLAG --encoding="
    puts $fd "set tcltest::testConstraints(encoding) 1"
    puts $fd "set tcltest::testConstraints(gcj) 1"
    puts $fd "set tcltest::testConstraints(assert) 1"
--- 35,48 ----
    puts $fd "set JAVA_CLASSPATH \"$libgcj_jar\""
    puts $fd "set JAVAC_FLAGS [list $rest]"
    puts $fd "set JAVA [list [libjava_find_gij]]"
! 
!   # Without an explicit limit on the heap size, tests depending on
!   # an OutOfMemoryError (e.g. "15.9.4-runtime-creation-2") can result
!   # in a lot of unnecessary thrashing.
!   puts $fd "set JAVA_FLAGS \"-mx=64m\""
! 
    puts $fd "set JAVAC_ENCODING_FLAG --encoding="
+   puts $fd "set JAVAC_DEPRECATION_FLAG -Wdeprecated"
    puts $fd "set tcltest::testConstraints(encoding) 1"
    puts $fd "set tcltest::testConstraints(gcj) 1"
    puts $fd "set tcltest::testConstraints(assert) 1"
*************** proc gcj_jacks_write {filename} {
*** 37,43 ****
    # puts $fd "set tcltest::testConstraints(jvm) 1"
    close $fd
  
!   setenv LD_LIBRARY_PATH $libjava_libgcc_s_path:$original_ld_library_path
  }
  
  proc gcj_jacks_parse {file} {
--- 50,57 ----
    # puts $fd "set tcltest::testConstraints(jvm) 1"
    close $fd
  
!   set ld_library_path $libjava_libgcc_s_path
!   set_ld_library_path_env_vars
  }
  
  proc gcj_jacks_parse {file} {
*************** proc gcj_jacks_run {} {
*** 92,100 ****
    verbose "Running Jacks..."
    # Just ignore error exits from the jacks program.
    # It will always error exit for us, since don't completely pass.
!   catch {exec ./jacks gcj} msg
! 
!   gcj_jacks_parse logging/gcj.log
  
    cd $here
  }
--- 106,125 ----
    verbose "Running Jacks..."
    # Just ignore error exits from the jacks program.
    # It will always error exit for us, since don't completely pass.
!   # At the moment jacks has a hardcoded call to tclsh8.3. To override this,
!   # we check here on the version and launch the script directly with the
!   # tclsh$tcl_ver.
!   set tcl_ver [info tclversion]
!   if {[package vcompare  $tcl_ver 8.3] >= 0 } {
!     if {[catch {exec tclsh$tcl_ver jacks gcj} msg]} {
! 	send_log "Couldn't run jacks: $msg\n"
! 	return
!     }
!     gcj_jacks_parse logging/gcj.log
!   } else {
!       send_log "No suitable tclsh found, you need at least version 8.3 or up.\n"
!       return
!   }
  
    cd $here
  }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jacks/jacks.xfail gcc-4.0.0/libjava/testsuite/libjava.jacks/jacks.xfail
*** gcc-3.4.3/libjava/testsuite/libjava.jacks/jacks.xfail	Tue Nov 11 20:04:22 2003
--- gcc-4.0.0/libjava/testsuite/libjava.jacks/jacks.xfail	Wed Jan 26 02:28:15 2005
***************
*** 1,28 ****
! 14.14-plain-2
! 14.14-plain-5
  14.14-label-1
  14.14-label-2
  14.14-label-5
  14.14-label-8
! 14.7-shadow-3
! 14.3-1
! 14.3-scope-2
! 14.3-scope-4
! 14.3-scope-5
! 14.3-scope-9
! 14.3-scope-11
! 14.4.2-shadow-5
! 14.4.2-shadow-6
! 14.4.2-shadow-7
! 14.4.2-shadow-9
! 14.19-shadow-4
! 14.19-shadow-5
! 14.19-shadow-6
! 14.19-shadow-7
  14.19-shadow-12
  14.19-shadow-13
  14.19-shadow-14
  14.19-shadow-15
  14.19.exception-13
  14.19.exception-14
  14.19.exception-15
--- 1,34 ----
! 12.4.1-runtime-1
! 12.4.1-runtime-2
! 12.4.1-runtime-3
! 12.4.1-runtime-4
! 13.1-runtime-constant-1
! 13.1-runtime-constant-3
! 13.1-runtime-field-1
! 13.1-runtime-method-5
! 13.1-runtime-method-6
! 13.4.8-constant-runtime-1
! 13.4.8-constant-runtime-2
! 14-runtime-jump-1
! 14-runtime-jump-2
  14.14-label-1
  14.14-label-2
  14.14-label-5
  14.14-label-8
! 14.14-plain-2
! 14.14-plain-5
! 14.17-null-1
! 14.17-null-3
! 14.17-null-4
! 14.17-null-5
  14.19-shadow-12
  14.19-shadow-13
  14.19-shadow-14
  14.19-shadow-15
+ 14.19-shadow-4
+ 14.19-shadow-5
+ 14.19-shadow-6
+ 14.19-shadow-7
  14.19.exception-13
  14.19.exception-14
  14.19.exception-15
***************
*** 31,69 ****
  14.19.exception-22
  14.19.exception-23
  14.19.exception-24
  14.20-block-4
  14.20-block-9
! 14.20-local-2
! 14.20-label-5
! 14.20-label-8
! 14.20-label-9
! 14.20-label-10
! 14.20-label-11
! 14.20-label-12
! 14.20-label-13
! 14.20-label-14
! 14.20-label-15
! 14.20-switch-8
! 14.20-switch-14
! 14.20-switch-17
! 14.20-switch-18
! 14.20-switch-19
! 14.20-switch-20
! 14.20-switch-21
! 14.20-switch-22
! 14.20-switch-23
! 14.20-switch-24
! 14.20-while-4
! 14.20-while-12
! 14.20-while-13
! 14.20-while-14
! 14.20-while-15
! 14.20-while-16
! 14.20-while-17
! 14.20-while-18
! 14.20-while-19
! 14.20-do-6
! 14.20-do-9
  14.20-do-10
  14.20-do-11
  14.20-do-12
--- 37,50 ----
  14.19.exception-22
  14.19.exception-23
  14.19.exception-24
+ 14.20-abrupt-10
+ 14.20-abrupt-14
+ 14.20-abrupt-2
+ 14.20-abrupt-6
  14.20-block-4
  14.20-block-9
! 14.20-catch-15
! 14.20-catch-17
  14.20-do-10
  14.20-do-11
  14.20-do-12
***************
*** 88,95 ****
  14.20-do-31
  14.20-do-32
  14.20-do-33
! 14.20-for-4
! 14.20-for-8
  14.20-for-15
  14.20-for-16
  14.20-for-17
--- 69,76 ----
  14.20-do-31
  14.20-do-32
  14.20-do-33
! 14.20-do-6
! 14.20-do-9
  14.20-for-15
  14.20-for-16
  14.20-for-17
***************
*** 98,352 ****
  14.20-for-20
  14.20-for-21
  14.20-for-22
! 14.20-abrupt-2
! 14.20-abrupt-6
! 14.20-abrupt-10
! 14.20-abrupt-14
  14.20-synchronized-3
- 14.20-try-3
- 14.20-try-9
  14.20-try-14
  14.20-try-18
  14.20-try-22
  14.20-try-27
  14.20-try-31
! 14.20-catch-15
! 14.20-catch-17
! 14.20-if-6
! 14.20-for-update-1
! 8.1.1.1-default-abstract-11
! 8.1.1.1-default-abstract-13
! 8.1.1.1-default-abstract-15
! 8.1.1.1-default-abstract-19
! 8.1.1.1-default-abstract-21
! 8.1.1.1-default-abstract-25
! 8.1.2-static-1
! 8.1.2-static-11
! 8.1.2-static-16
! 8.1.2-enclosing-4
! 8.1.2-enclosing-5
! 8.1.3-object-3
! 8.1.3-superclass-5
! 8.1.3-superclass-6
! 8.8.5.1-example-1
! 8.8.5.1-example-3
! 8.8.5.1-qualified-1
! 8.8.5.1-qualified-2
! 8.8.5.1-qualified-3
! 8.8.5.1-qualified-4
! 8.8.5.1-qualified-10
! 8.8.5.1-qualified-11
! 8.8.5.1-qualified-12
! 8.8.5.1-qualified-13
! 8.8.5.1-qualified-15
! 8.8.7-inaccessible-default-constructor-toplevel-2
! 8.8.7-accessible-default-constructor-inner-18
! 8.8.7-accessible-default-constructor-inner-26
! 8.3-inheritance-1
! 8.3-inheritance-2
! 8.3-inheritance-3
! 8.3-inheritance-5
! 8.3-inheritance-6
! 8.3.1.2-final-2
! 8.3.1.2-final-17
! 8.3.1.2-final-19
! 8.3.1.2-final-21
! 8.3.1.2-final-24
! 8.3.1.2-final-27
! 8.3.1.2-final-28
! 8.3.1.2-final-29
! 8.3.2-abrupt-3
! 8.3.2-abrupt-5
! 8.3.2-abrupt-6
! 8.3.2-abrupt-7
! 8.3.2.2-super-2
! 8.3.2.3-illegal-forward-instance-1
! 8.3.2.3-illegal-forward-instance-2
! 8.3.2.3-illegal-forward-instance-3
! 8.3.2.3-illegal-forward-instance-4
! 8.3.2.3-illegal-forward-instance-5
! 8.3.2.3-illegal-forward-instance-6
! 8.3.2.3-illegal-forward-instance-7
! 8.3.2.3-illegal-forward-instance-8
! 8.3.2.3-illegal-forward-instance-9
! 8.3.2.3-legal-forward-instance-11
! 8.3.2.3-illegal-forward-static-1
! 8.3.2.3-illegal-forward-static-2
! 8.3.2.3-illegal-forward-static-3
! 8.3.2.3-illegal-forward-static-4
! 8.3.2.3-illegal-forward-static-5
! 8.3.2.3-illegal-forward-static-6
! 8.3.2.3-illegal-forward-static-7
! 8.3.2.3-illegal-forward-static-8
! 8.3.2.3-illegal-forward-static-9
! 8.3.2.3-illegal-forward-static-10
! 8.6-checked-exception-2
! 8.6-checked-exception-4
! 8.6-checked-exception-5
! 8.6-checked-exception-6
! 8.6-checked-exception-8
! 8.6-checked-exception-10
! 8.6-checked-exception-11
! 8.6-checked-exception-12
! 8.6-complete-1
! 8.6-complete-4
! 8.6-complete-5
! 8.6-abrupt-1
! 8.6-abrupt-4
! 8.5-inheritance-1
! 8.5-inheritance-2
! 8.5-inheritance-3
! 8.5-inheritance-6
! 8.5.2-non-static-member-usage-2
! 8.4.6-inheritance-1
! 8.4.6-inheritance-2
! 8.4.6.2-hiding-3
! 8.4.6.4-multiple-3
! 8.4.6.4-multiple-4
! 8.4.6.4-multiple-7
! 8.4.6.4-multiple-8
! 8.4.6.4-abstract-1
! 8.4.6.4-abstract-2
! 8.4.6.4-abstract-10
! 8.4.6.1-override-3
! 8.4.6.3-modifier-8
! 8.4.6.3-modifier-9
! 8.4.6.3-modifier-10
! 8.4.6.3-modifier-11
! 8.4.6.3-modifier-12
! 8.4.6.3-modifier-13
! 8.4.6.3-default-4
! 8.4.6.3-default-6
! 8.4.6.3-default-10
! 8.4.6.3-default-12
! 8.4.6.3-default-14
! 8.4.6.3-signature-4
! 8.7-abrupt-1
! 8.7-complete-1
! 8.7-complete-3
! 5.1.2-bts-1
! 5.1.2-bts-2
! 5.1.2-bts-3
! 5.1.2-bts-4
! 5.1.2-bts-5
! 5.1.2-bti-1
! 5.1.2-bti-3
! 5.1.2-bti-5
! 5.1.2-btl-1
! 5.1.2-btl-3
! 5.1.2-btl-5
! 5.1.2-btf-1
! 5.1.2-btf-3
! 5.1.2-btf-5
! 5.1.2-btd-1
! 5.1.2-btd-3
! 5.1.2-btd-5
! 5.1.2-sti-1
! 5.1.2-sti-5
! 5.1.2-stl-1
! 5.1.2-stl-3
! 5.1.2-stl-5
! 5.1.2-stf-1
! 5.1.2-stf-3
! 5.1.2-stf-5
! 5.1.2-std-3
! 5.1.2-std-5
! 16-static-1
! 16-static-2
! 16-instance-5
! 16-instance-6
! 16-instance-7
! 16.5-anonymous-3
! 16.8-constructor-6
! 16.8-constructor-7
! 16.8-constructor-8
! 16.1.7-simple-definite-assignment-fail-8
! 16.1.7-simple-definite-assignment-fail-9
! 16.1.7-compound-definite-assignment-fail-8
! 16.1.7-compound-definite-assignment-fail-9
! 16.1.7-simple-definite-unassignment-fail-1
! 16.1.7-compound-definite-unassignment-fail-1
! 16.1.7-compound-definite-unassignment-fail-6
! 16.1.7-compound-definite-unassignment-pass-6
! 16.1.7-compound-definite-unassignment-pass-7
! 16.1.2-definite-unassignment-fail-6
! 16.1.5-definite-unassignment-pass-4
! 16.1.5-definite-unassignment-pass-7
! 16.1.5-not-assignable-7
! 16.1.5-not-assignable-8
! 16.1.3-definite-unassignment-fail-6
! 16.1.8-definite-unassign-fail-1
! 16.1.8-definite-unassign-fail-2
! 16.1.8-definite-unassign-fail-3
! 16.1.8-definite-unassign-fail-4
! 16.2.10-definite-unassign-pass-1
! 16.2.10-definite-unassign-pass-2
! 16.2.10-definite-unassign-pass-4
! 16.2.10-definite-unassign-pass-5
! 16.2.10-definite-unassign-pass-6
! 16.2.10-definite-unassign-pass-7
! 16.2.10-definite-unassign-pass-8
! 16.2.10-definite-unassign-pass-9
! 16.2.10-definite-unassign-fail-6
! 16.2.10-definite-unassign-fail-7
! 16.2.10-definite-unassign-fail-8
! 16.2.10-definite-unassign-fail-9
! 16.2.10-definite-assign-pass-2
! 16.2.10-definite-assign-fail-2
! 16.2.11-definite-unassign-pass-1
! 16.2.11-definite-unassign-pass-2
! 16.2.11-definite-unassign-pass-4
! 16.2.11-definite-unassign-pass-5
! 16.2.11-definite-unassign-pass-6
! 16.2.11-definite-unassign-pass-7
! 16.2.11-definite-unassign-pass-8
! 16.2.11-definite-unassign-fail-7
! 16.2.11-definite-unassign-fail-8
! 16.2.11-definite-unassign-fail-9
! 16.2.11-definite-assign-pass-2
! 16.2.11-definite-assign-fail-3
! 16.2.7-final-4
! 16.2.7-final-6
! 16.2.5-definite-unassign-pass-1
! 16.2.5-definite-unassign-pass-2
! 16.2.5-definite-unassign-pass-3
! 16.2.3-switch-1
! 16.2.8-final-1
! 16.2.8-final-2
! 16.2.8-unassigned-1
! 16.2.8-unassigned-6
! 16.2.8-unassigned-8
! 16.2.14-definite-unassign-fail-5
! 16.2.14-definite-unassign-fail-6
! 16.2.14-definite-unassign-fail-7
! 16.2.14-definite-unassign-fail-8
! 16.2.14-definite-unassign-fail-12
! 16.2.14-definite-unassign-fail-13
! 16.2.9-definite-unassign-pass-1
! 16.2.9-definite-unassign-pass-2
! 16.2.9-definite-unassign-pass-4
! 16.2.9-definite-unassign-pass-5
! 16.2.9-definite-unassign-pass-6
! 16.2.9-definite-unassign-pass-7
! 16.2.9-definite-unassign-pass-8
! 16.2.9-definite-unassign-fail-5
! 16.2.9-definite-unassign-fail-6
! 16.2.9-definite-unassign-fail-7
! 16.2.9-definite-assign-pass-2
! 16.2.9-definite-assign-fail-3
! 15.18.1-float-1
! 15.18.1-float-2
! 15.18.1-float-3
! 15.18.1-float-4
! 15.18.1-float-5
! 15.18.1-float-6
! 15.18.1-float-7
! 15.18.1-float-8
! 15.18.1-float-9
! 15.18.1-float-10
! 15.18.1-float-11
! 15.18.1-float-12
  15.18.1-double-1
  15.18.1-double-2
  15.18.1-double-3
  15.18.1-double-4
--- 79,231 ----
  14.20-for-20
  14.20-for-21
  14.20-for-22
! 14.20-for-4
! 14.20-for-8
! 14.20-for-update-1
! 14.20-if-6
! 14.20-label-10
! 14.20-label-11
! 14.20-label-12
! 14.20-label-13
! 14.20-label-14
! 14.20-label-15
! 14.20-label-5
! 14.20-label-8
! 14.20-label-9
! 14.20-local-2
! 14.20-switch-14
! 14.20-switch-17
! 14.20-switch-18
! 14.20-switch-19
! 14.20-switch-20
! 14.20-switch-21
! 14.20-switch-22
! 14.20-switch-23
! 14.20-switch-24
! 14.20-switch-8
  14.20-synchronized-3
  14.20-try-14
  14.20-try-18
  14.20-try-22
  14.20-try-27
+ 14.20-try-3
  14.20-try-31
! 14.20-try-9
! 14.20-while-12
! 14.20-while-13
! 14.20-while-14
! 14.20-while-15
! 14.20-while-16
! 14.20-while-17
! 14.20-while-18
! 14.20-while-19
! 14.20-while-4
! 14.3-1
! 14.3-scope-10
! 14.3-scope-2
! 14.3-scope-4
! 14.3-scope-5
! 14.3-scope-9
! 14.3.1-runtime-3
! 14.4.2-shadow-5
! 14.4.2-shadow-6
! 14.4.2-shadow-7
! 14.4.2-shadow-9
! 14.7-shadow-3
! 15.11.1-ambiguous-2
! 15.11.1-ambiguous-3
! 15.11.1-explicit-constructor-3
! 15.11.1-runtime-static-1
! 15.11.1-runtime-static-2
! 15.11.1-runtime-static-3
! 15.11.1-runtime-static-4
! 15.11.2-explicit-constructor-2
! 15.11.2-meaning-11
! 15.11.2-meaning-13
! 15.11.2-meaning-14
! 15.11.2-meaning-17
! 15.11.2-meaning-6
! 15.11.2-meaning-8
! 15.11.2-meaning-9
! 15.11.2-runtime-1
! 15.11.2-runtime-2
! 15.11.2-syntax-1
! 15.12.1-syntax-1
! 15.12.1-type-14
! 15.12.2.1-accessibility-method-3
! 15.12.2.1-accessibility-method-5
! 15.12.2.1-accessibility-method-6
! 15.12.2.2-ambiguous-10
! 15.12.2.2-ambiguous-12
! 15.12.2.2-ambiguous-14
! 15.12.2.2-ambiguous-17
! 15.12.2.2-ambiguous-18
! 15.12.2.2-ambiguous-21
! 15.12.2.2-ambiguous-25
! 15.12.2.2-ambiguous-27
! 15.12.2.2-ambiguous-3
! 15.12.2.2-ambiguous-6
! 15.12.2.2-ambiguous-9
! 15.12.3-abstract-1
! 15.12.3-abstract-2
! 15.12.3-abstract-3
! 15.12.3-explicit-constructor-10
! 15.12.3-explicit-constructor-3
! 15.12.3-explicit-constructor-4
! 15.12.3-explicit-constructor-5
! 15.12.3-explicit-constructor-7
! 15.12.3-runtime-mode-1
! 15.12.3-runtime-mode-2
! 15.12.3-runtime-mode-3
! 15.12.3-runtime-mode-4
! 15.12.3-runtime-mode-6
! 15.12.4.1-runtime-static-1
! 15.12.4.1-runtime-static-2
! 15.12.4.1-runtime-super-1
! 15.12.4.1-runtime-super-2
! 15.14-runtime-3
! 15.14-runtime-4
! 15.15-runtime-3
! 15.15-runtime-4
! 15.16-semantic-5
! 15.16-value-1
! 15.16-value-2
! 15.17-mod-3
! 15.17-mod-4
! 15.17.3-assoc-2
! 15.17.3-double-1
! 15.17.3-double-10
! 15.17.3-double-11
! 15.17.3-double-12
! 15.17.3-double-13
! 15.17.3-double-14
! 15.17.3-double-2
! 15.17.3-double-3
! 15.17.3-double-4
! 15.17.3-double-5
! 15.17.3-double-6
! 15.17.3-double-7
! 15.17.3-double-8
! 15.17.3-double-9
! 15.17.3-float-1
! 15.17.3-float-10
! 15.17.3-float-11
! 15.17.3-float-12
! 15.17.3-float-13
! 15.17.3-float-14
! 15.17.3-float-2
! 15.17.3-float-3
! 15.17.3-float-4
! 15.17.3-float-5
! 15.17.3-float-6
! 15.17.3-float-7
! 15.17.3-float-8
! 15.17.3-float-9
  15.18.1-double-1
+ 15.18.1-double-10
+ 15.18.1-double-11
+ 15.18.1-double-12
+ 15.18.1-double-13
  15.18.1-double-2
  15.18.1-double-3
  15.18.1-double-4
***************
*** 355,545 ****
  15.18.1-double-7
  15.18.1-double-8
  15.18.1-double-9
! 15.18.1-double-10
! 15.18.1-double-11
! 15.18.1-double-12
! 15.18.1-double-13
  15.18.1-valid-1
! 15.13-anon-1
! 15.26.2-mult-12
! 15.26.2-div-12
! 15.26.2-mod-12
  15.26.2-add-12
! 15.26.2-sub-12
  15.26.2-left-shift-12
  15.26.2-signed-right-shift-12
  15.26.2-unsigned-right-shift-12
- 15.26.2-and-10
- 15.26.2-and-12
  15.26.2-xor-10
  15.26.2-xor-12
- 15.26.2-or-10
- 15.26.2-or-12
- 15.16-value-1
- 15.16-value-2
- 15.16-semantic-5
- 15.9.5.1-superconstructor-2
- 15.9.5.1-superconstructor-4
- 15.9.5.1-superconstructor-7
- 15.9.5.1-superconstructor-8
- 15.9.5.1-exception-1
- 15.9.5.1-exception-3
- 15.9.5.1-exception-4
- 15.9.3-choosing-4
- 15.9.1-unqualified-anonymous-2
- 15.9.1-unqualified-anonymous-4
- 15.9.1-unqualified-anonymous-5
- 15.9.1-unqualified-anonymous-12
- 15.9.1-unqualified-anonymous-14
- 15.9.1-unqualified-anonymous-15
- 15.9.1-unqualified-anonymous-23
- 15.9.1-unqualified-anonymous-24
- 15.9.1-unqualified-anonymous-26
- 15.9.1-unqualified-anonymous-27
- 15.9.1-qualified-anonymous-2
- 15.9.1-qualified-anonymous-4
- 15.9.1-qualified-anonymous-5
- 15.9.1-qualified-anonymous-10
- 15.9.1-qualified-anonymous-12
- 15.9.1-qualified-anonymous-13
- 15.9.1-qualified-anonymous-14
- 15.9.1-qualified-anonymous-17
- 15.9.1-qualified-anonymous-18
- 15.9.1-qualified-anonymous-20
- 15.9.1-qualified-anonymous-22
- 15.9.1-qualified-anonymous-26
- 15.9.1-qualified-anonymous-28
- 15.9.1-unqualified-concrete-2
- 15.9.1-unqualified-concrete-4
- 15.9.1-unqualified-concrete-5
- 15.9.1-unqualified-concrete-10
- 15.9.1-unqualified-concrete-14
- 15.9.1-unqualified-concrete-15
- 15.9.1-qualified-concrete-4
- 15.9.1-qualified-concrete-5
- 15.9.1-qualified-concrete-10
- 15.9.1-qualified-concrete-12
- 15.9.1-qualified-concrete-14
- 15.9.1-qualified-concrete-16
- 15.9.1-qualified-concrete-20
- 15.9.1-qualified-concrete-24
- 15.28-primitive-9
- 15.28-primitive-15
- 15.28-primitive-16
- 15.28-primitive-17
- 15.28-simple-name-6
- 15.28-simple-name-8
- 15.28-uninitialized-simple-name-3
  15.28-cast-simple-name-1
  15.28-cast-simple-name-2
  15.28-cast-simple-name-3
  15.28-qualified-name-5
  15.28-qualified-name-6
  15.28-qualified-name-7
  15.28-qualified-name-8
  15.28-qualified-name-9
! 15.28-qualified-name-10
! 15.28-string-2
! 15.28-string-5
! 15.28-string-9
  15.28-string-11
- 15.28-string-13
  15.28-string-15
  15.28-string-16
  15.28-string-17
  15.28-string-18
! 15.28-simple-namestr-1
! 15.28-simple-namestr-2
! 15.28-simple-namestr-3
! 15.28-simple-namestr-4
! 15.28-qualified-namestr-7
! 15.28-qualified-namestr-8
! 15.28-qualified-namestr-9
! 15.28-notstring-1
! 15.28-null-1
! 15.28-null-3
! 15.28-instanceof-3
! 15.21-assoc-7
! 15.21-assoc-8
! 15.21-equal-3
! 15.21-type-7
! 15.21-type-17
! 15.21-type-21
! 15.21-type-22
! 15.21-type-23
! 15.21-type-24
! 15.21-type-30
! 15.11.2-syntax-1
! 15.11.2-explicit-constructor-2
! 15.11.2-meaning-3
! 15.11.2-meaning-6
! 15.11.2-meaning-8
! 15.11.2-meaning-9
! 15.11.2-meaning-10
! 15.11.2-meaning-11
! 15.11.2-meaning-13
! 15.11.2-meaning-14
! 15.11.2-meaning-17
! 15.11.1-ambiguous-2
! 15.11.1-ambiguous-3
! 15.11.1-explicit-constructor-3
! 15.12.3-explicit-constructor-3
! 15.12.3-explicit-constructor-4
! 15.12.3-explicit-constructor-5
! 15.12.3-explicit-constructor-7
! 15.12.3-explicit-constructor-10
! 15.12.3-abstract-1
! 15.12.3-abstract-2
! 15.12.3-abstract-3
! 15.12.1-syntax-1
! 15.12.1-type-14
! 15.12.2.1-accessibility-method-2
! 15.12.2.1-accessibility-method-4
! 15.12.2.1-accessibility-method-6
! 15.12.2.2-ambiguous-1
! 15.12.2.2-ambiguous-2
! 15.12.2.2-ambiguous-6
! 15.12.2.2-ambiguous-9
! 15.12.2.2-ambiguous-10
! 15.12.2.2-ambiguous-12
! 15.12.2.2-ambiguous-14
! 15.12.2.2-ambiguous-18
! 15.12.2.2-ambiguous-21
! 15.17-mod-3
! 15.17-mod-4
! 15.17.3-assoc-2
! 15.17.3-float-1
! 15.17.3-float-2
! 15.17.3-float-3
! 15.17.3-float-4
! 15.17.3-float-5
! 15.17.3-float-6
! 15.17.3-float-7
! 15.17.3-float-8
! 15.17.3-float-9
! 15.17.3-float-10
! 15.17.3-float-11
! 15.17.3-float-12
! 15.17.3-float-13
! 15.17.3-float-14
! 15.17.3-double-1
! 15.17.3-double-2
! 15.17.3-double-3
! 15.17.3-double-4
! 15.17.3-double-5
! 15.17.3-double-6
! 15.17.3-double-7
! 15.17.3-double-8
! 15.17.3-double-9
! 15.17.3-double-10
! 15.17.3-double-11
! 15.17.3-double-12
! 15.17.3-double-13
! 15.17.3-double-14
! 15.14.2-final-2
! 15.14.2-final-3
! 15.14.1-final-2
! 15.14.1-final-3
  15.8.2-synthetic-1
  15.8.2-type-11
  15.8.2-type-12
--- 234,306 ----
  15.18.1-double-7
  15.18.1-double-8
  15.18.1-double-9
! 15.18.1-float-1
! 15.18.1-float-10
! 15.18.1-float-11
! 15.18.1-float-12
! 15.18.1-float-2
! 15.18.1-float-3
! 15.18.1-float-4
! 15.18.1-float-5
! 15.18.1-float-6
! 15.18.1-float-7
! 15.18.1-float-8
! 15.18.1-float-9
  15.18.1-valid-1
! 15.20-2-runtime-1
! 15.21-assoc-7
! 15.21-assoc-8
! 15.21-equal-3
! 15.25-runtime-1
  15.26.2-add-12
! 15.26.2-and-10
! 15.26.2-and-12
! 15.26.2-div-12
  15.26.2-left-shift-12
+ 15.26.2-mod-12
+ 15.26.2-mult-12
+ 15.26.2-or-10
+ 15.26.2-or-12
  15.26.2-signed-right-shift-12
+ 15.26.2-sub-12
  15.26.2-unsigned-right-shift-12
  15.26.2-xor-10
  15.26.2-xor-12
  15.28-cast-simple-name-1
  15.28-cast-simple-name-2
  15.28-cast-simple-name-3
+ 15.28-instanceof-3
+ 15.28-notstring-1
+ 15.28-null-1
+ 15.28-null-3
+ 15.28-primitive-15
+ 15.28-primitive-16
+ 15.28-primitive-17
+ 15.28-primitive-9
+ 15.28-qualified-name-10
  15.28-qualified-name-5
  15.28-qualified-name-6
  15.28-qualified-name-7
  15.28-qualified-name-8
  15.28-qualified-name-9
! 15.28-qualified-namestr-7
! 15.28-qualified-namestr-8
! 15.28-qualified-namestr-9
! 15.28-simple-name-6
! 15.28-simple-name-8
! 15.28-simple-namestr-1
! 15.28-simple-namestr-2
! 15.28-simple-namestr-3
! 15.28-simple-namestr-4
  15.28-string-11
  15.28-string-15
  15.28-string-16
  15.28-string-17
  15.28-string-18
! 15.28-string-2
! 15.28-string-5
! 15.28-string-9
! 15.28-uninitialized-simple-name-3
  15.8.2-synthetic-1
  15.8.2-type-11
  15.8.2-type-12
***************
*** 551,749 ****
  15.8.5-variable-6
  15.8.5-variable-7
  15.8.5-variable-8
! 15.15-precedence-5
! 15.15.2-final-2
! 15.15.2-final-3
! 15.15.1-final-2
! 15.15.1-final-3
! 9.4.1-conflict-2
! 9.3.1-init-1
! 9.3.1-illegal-forward-1
! 9.3.1-illegal-forward-2
! 9.1.3-body-5
! 9.1.1-in-class-17
! 9.1.1-in-class-24
! 9.1.1-in-interface-2
! 9.1.1-in-interface-3
! 9.1.1-in-interface-9
! 9.1.1-in-interface-16
! 9.1.2-supertype-1
! 9.2-implicit-2
! 9.2-implicit-3
! 9.2-implicit-4
! 9.2-implicit-6
! 9.2-implicit-7
! 9.2-implicit-15
! 9.2-implicit-18
! 9.2-implicit-19
! 3.2-valid-1
! 3.10.2-round-6
! 3.10.2-round-7
! 3.10.2-round-9
  3.10.2-round-10
  3.10.2-round-11
  3.10.2-round-12
! 3.10.2-double-13
! 3.10.2-double-14
! 3.10.1-invalid-3
! 3.10.1-invalid-4
! 6.6.2.2-protected-creation-3
! 6.6.2.1-protected-instance-field-3
! 6.6.2.1-protected-instance-field-4
! 6.6.2.1-protected-instance-field-6
! 6.6.2.1-protected-instance-field-7
! 6.6.2.1-protected-instance-method-3
! 6.6.2.1-protected-instance-method-5
! 6.6.2.1-protected-instance-method-6
! 6.6.2.1-protected-instance-method-7
! 6.6.2.1-protected-type-2
! 6.6.1-8
  6.6.1-11
! 6.6.1-array-2
! 6.6.1-array-3
! 6.6.1-array-5
! 6.6.1-array-8
  6.6.1-array-11
  6.6.1-array-13
  6.6.1-array-14
  6.6.1-array-17
  6.6.1-array-20
  6.6.1-array-22
  6.6.1-array-23
  6.6.1-array-26
  6.6.1-array-29
  6.6.1-array-31
  6.6.1-array-32
  6.6.1-array-35
! 6.5.6.2-type-2
! 6.5.6.2-type-6
! 6.5.6.2-type-8
! 6.5.6.2-type-9
! 6.5.6.2-expression-6
! 6.5.6.1-local-3
! 6.5.6.1-local-4
! 6.5.6.1-field-6
! 6.5.6.1-explicit-constructor-2
! 6.5.4.1-simple-6
! 6.5.4.1-simple-10
! 6.5.4.1-simple-11
! 6.5.1-type-15
! 6.5.1-type-16
! 6.5.1-typeorpackage-2
! 6.5.5.2-type-4
! 6.5.5.2-type-5
! 6.5.5.2-type-6
! 6.5.5.2-type-7
! 6.5.5.2-type-8
! 6.5.5.1-import-2
! 6.5.5.1-import-3
! 6.5.5.1-nested-4
! 6.5.5.1-nested-7
! 6.5.5.1-nested-8
! 6.5.5.1-nested-9
! 6.5.5.1-nested-14
! 6.5.5.1-nested-16
! 6.5.5.1-nested-17
! 6.5.5.1-nested-19
! 6.5.5.1-nested-20
! 6.5.5.1-nested-21
! 6.5.5.1-nested-23
! 6.3-1
  7.4.2-2
- 7.5.1-canonical-3
  7.5.1-accessible-4
  7.5.1-accessible-5
  7.5.1-duplicate-4
  7.5.1-shadow-2
- 7.5.2-canonical-2
- 7.5.2-canonical-3
  7.5.2-accessible-1
  7.5.2-accessible-3
  7.5.2-accessible-4
  7.5.2-duplicate-1
  7.5.2-duplicate-2
  7.5.2-duplicate-3
  7.5.2-duplicate-4
- 7.1-named-5
- 7.1-named-6
- 7.1-named-7
  7.6-optional-restrictions-1
  7.6-unnamed-scope-1
  7.6-unnamed-scope-2
! 4.5.4-static-1
! 4.5.4-static-5
! 4.5.4-parameter-2
! 4.5.4-parameter-3
! 4.7.10-jvms-class-6
! 4.7.10-jvms-class-7
! 4.7.10-jvms-class-8
! 4.7.10-jvms-class-18
! 4.7.10-jvms-method-6
! 4.7.10-jvms-method-8
! 4.7.10-jvms-constructor-6
! 4.7.10-jvms-constructor-8
! 4.7.10-jvms-field-6
! 4.7.10-jvms-field-8
  non-jls-argument-expansion-11
  non-jls-argument-expansion-12
  non-jls-argument-expansion-13
  non-jls-argument-expansion-error-2
  non-jls-argument-expansion-tokens-1
! non-jls-argument-expansion-tokens-2
! non-jls-argument-expansion-tokens-4
! non-jls-argument-expansion-tokens-5
! non-jls-zip-2
! 13.1-runtime-constant-1
! 13.1-runtime-constant-3
! 13.1-runtime-field-1
! 13.4.8-constant-runtime-1
! 14-runtime-jump-1
! 14-runtime-jump-2
! 14.3.1-runtime-3
! 8.1.2-runtime-1
! 6.6.1-runtime-privateconstructor-1
! 8.8.3-runtime-inner-4
! 8.8.7-runtime-accessible-default-1
! 8.3-runtime-1
! 8.4.6.4-multiple-runtime-1
! 16.5-runtime-1
! 16.5-runtime-2
! 16.5-runtime-3
! 16.5-runtime-4
! 16.5-runtime-5
! 12.4.1-runtime-1
! 12.4.1-runtime-2
! 12.4.1-runtime-3
! 12.4.1-runtime-4
! 15.9-runtime-numcalls-1
! 15.9.4-runtime-creation-1
! 15.9.4-runtime-creation-2
! 15.9.4-runtime-creation-5
! 15.25-runtime-1
! 15.11.2-runtime-1
! 15.11.2-runtime-2
! 15.11.1-runtime-static-1
! 15.11.1-runtime-static-2
! 15.11.1-runtime-static-3
! 15.11.1-runtime-static-4
! 15.12.3-runtime-mode-1
! 15.12.3-runtime-mode-2
! 15.12.3-runtime-mode-3
! 15.12.3-runtime-mode-4
! 15.12.3-runtime-mode-6
! 15.12.4.1-runtime-static-1
! 15.12.4.1-runtime-static-2
! 15.12.4.1-runtime-super-1
! 15.12.4.1-runtime-super-2
! 15.14-runtime-3
! 15.14-runtime-4
! 15.20-2-runtime-1
! 15.15-runtime-3
! 15.15-runtime-4
  non-jls-jsr41.4-definite-unassignment-fail-22
- non-jls-jsr41.4-definite-unassignment-pass-2
- non-jls-jsr41.4-definite-unassignment-pass-9
  non-jls-jsr41.4-definite-unassignment-pass-10
  non-jls-jsr41.4-definite-unassignment-try-1
  non-jls-jsr41.4-definite-unassignment-try-2
  non-jls-jsr41.4-definite-unassignment-try-3
--- 312,698 ----
  15.8.5-variable-6
  15.8.5-variable-7
  15.8.5-variable-8
! 15.9-runtime-numcalls-1
! 15.9.1-qualified-anonymous-10
! 15.9.1-qualified-anonymous-12
! 15.9.1-qualified-anonymous-13
! 15.9.1-qualified-anonymous-14
! 15.9.1-qualified-anonymous-17
! 15.9.1-qualified-anonymous-18
! 15.9.1-qualified-anonymous-2
! 15.9.1-qualified-anonymous-20
! 15.9.1-qualified-anonymous-22
! 15.9.1-qualified-anonymous-26
! 15.9.1-qualified-anonymous-28
! 15.9.1-qualified-anonymous-4
! 15.9.1-qualified-anonymous-5
! 15.9.1-qualified-concrete-12
! 15.9.1-qualified-concrete-14
! 15.9.1-qualified-concrete-16
! 15.9.1-qualified-concrete-4
! 15.9.1-qualified-concrete-5
! 15.9.1-unqualified-anonymous-12
! 15.9.1-unqualified-anonymous-14
! 15.9.1-unqualified-anonymous-15
! 15.9.1-unqualified-anonymous-2
! 15.9.1-unqualified-anonymous-23
! 15.9.1-unqualified-anonymous-24
! 15.9.1-unqualified-anonymous-26
! 15.9.1-unqualified-anonymous-27
! 15.9.1-unqualified-anonymous-4
! 15.9.1-unqualified-anonymous-5
! 15.9.1-unqualified-concrete-14
! 15.9.1-unqualified-concrete-15
! 15.9.1-unqualified-concrete-2
! 15.9.1-unqualified-concrete-4
! 15.9.1-unqualified-concrete-5
! 15.9.4-runtime-creation-1
! 15.9.4-runtime-creation-2
! 15.9.4-runtime-creation-5
! 15.9.5.1-exception-1
! 15.9.5.1-exception-3
! 15.9.5.1-exception-4
! 15.9.5.1-superconstructor-7
! 15.9.5.1-superconstructor-8
! 16-instance-5
! 16-instance-6
! 16-instance-7
! 16-static-1
! 16-static-2
! 16.1.2-definite-unassignment-fail-6
! 16.1.3-definite-unassignment-fail-6
! 16.1.5-not-assignable-7
! 16.1.5-not-assignable-8
! 16.1.7-compound-definite-unassignment-fail-6
! 16.1.7-compound-definite-unassignment-fail-7
! 16.2.10-definite-assign-pass-2
! 16.2.10-definite-unassign-pass-1
! 16.2.10-definite-unassign-pass-2
! 16.2.10-definite-unassign-pass-3
! 16.2.10-definite-unassign-pass-4
! 16.2.10-definite-unassign-pass-5
! 16.2.10-definite-unassign-pass-6
! 16.2.10-definite-unassign-pass-7
! 16.2.10-definite-unassign-pass-8
! 16.2.11-definite-assign-pass-2
! 16.2.11-definite-unassign-pass-1
! 16.2.11-definite-unassign-pass-2
! 16.2.11-definite-unassign-pass-3
! 16.2.11-definite-unassign-pass-4
! 16.2.11-definite-unassign-pass-5
! 16.2.11-definite-unassign-pass-6
! 16.2.11-definite-unassign-pass-7
! 16.2.11-definite-unassign-pass-8
! 16.2.14-definite-unassign-fail-12
! 16.2.14-definite-unassign-fail-13
! 16.2.14-definite-unassign-fail-5
! 16.2.14-definite-unassign-fail-6
! 16.2.14-definite-unassign-fail-7
! 16.2.14-definite-unassign-fail-8
! 16.2.3-local-class-11
! 16.2.3-local-class-4
! 16.2.3-local-class-5
! 16.2.5-definite-unassign-pass-1
! 16.2.5-definite-unassign-pass-2
! 16.2.5-definite-unassign-pass-3
! 16.2.8-final-3
! 16.2.8-final-4
! 16.2.8-unassigned-1
! 16.2.8-unassigned-20
! 16.2.8-unassigned-21
! 16.2.8-unassigned-22
! 16.2.8-unassigned-23
! 16.2.8-unassigned-6
! 16.2.8-unassigned-8
! 16.2.8-unassigned-9
! 16.2.9-definite-assign-pass-2
! 16.2.9-definite-unassign-pass-1
! 16.2.9-definite-unassign-pass-2
! 16.2.9-definite-unassign-pass-3
! 16.2.9-definite-unassign-pass-4
! 16.2.9-definite-unassign-pass-5
! 16.2.9-definite-unassign-pass-6
! 16.2.9-definite-unassign-pass-7
! 16.5-anonymous-3
! 16.5-runtime-1
! 16.5-runtime-2
! 16.5-runtime-3
! 16.5-runtime-4
! 16.5-runtime-5
! 16.8-constructor-8
! 3.10.1-invalid-3
! 3.10.1-invalid-4
! 3.10.2-double-13
! 3.10.2-double-14
  3.10.2-round-10
  3.10.2-round-11
  3.10.2-round-12
! 3.10.2-round-6
! 3.10.2-round-7
! 3.10.2-round-9
! 3.2-valid-1
! 4.5.4-parameter-2
! 4.5.4-parameter-3
! 4.5.4-static-1
! 4.5.4-static-5
! 4.7.10-jvms-class-18
! 4.7.10-jvms-class-6
! 4.7.10-jvms-class-7
! 4.7.10-jvms-class-8
! 4.7.10-jvms-constructor-6
! 4.7.10-jvms-constructor-8
! 4.7.10-jvms-field-6
! 4.7.10-jvms-field-8
! 4.7.10-jvms-method-6
! 4.7.10-jvms-method-8
! 5.1.2-btd-1
! 5.1.2-btd-3
! 5.1.2-btd-5
! 5.1.2-btf-1
! 5.1.2-btf-3
! 5.1.2-btf-5
! 5.1.2-bti-1
! 5.1.2-bti-3
! 5.1.2-bti-5
! 5.1.2-btl-1
! 5.1.2-btl-3
! 5.1.2-btl-5
! 5.1.2-bts-1
! 5.1.2-bts-2
! 5.1.2-bts-3
! 5.1.2-bts-4
! 5.1.2-bts-5
! 5.1.2-std-3
! 5.1.2-std-5
! 5.1.2-stf-1
! 5.1.2-stf-3
! 5.1.2-stf-5
! 5.1.2-sti-1
! 5.1.2-sti-5
! 5.1.2-stl-1
! 5.1.2-stl-3
! 5.1.2-stl-5
! 6.3-1
! 6.5.1-type-15
! 6.5.1-type-16
! 6.5.1-typeorpackage-2
! 6.5.4.1-simple-10
! 6.5.4.1-simple-11
! 6.5.4.1-simple-6
! 6.5.5.1-import-2
! 6.5.5.1-import-3
! 6.5.5.1-nested-14
! 6.5.5.1-nested-16
! 6.5.5.1-nested-17
! 6.5.5.1-nested-19
! 6.5.5.1-nested-20
! 6.5.5.1-nested-21
! 6.5.5.1-nested-23
! 6.5.5.1-nested-4
! 6.5.5.1-nested-7
! 6.5.5.1-nested-8
! 6.5.5.1-nested-9
! 6.5.5.2-type-4
! 6.5.5.2-type-5
! 6.5.5.2-type-6
! 6.5.5.2-type-7
! 6.5.5.2-type-8
! 6.5.6.1-explicit-constructor-2
! 6.5.6.1-field-6
! 6.5.6.1-local-3
! 6.5.6.1-local-4
! 6.5.6.2-expression-6
! 6.5.6.2-type-2
! 6.5.6.2-type-6
! 6.5.6.2-type-8
! 6.5.6.2-type-9
  6.6.1-11
! 6.6.1-8
  6.6.1-array-11
  6.6.1-array-13
  6.6.1-array-14
  6.6.1-array-17
+ 6.6.1-array-2
  6.6.1-array-20
  6.6.1-array-22
  6.6.1-array-23
  6.6.1-array-26
  6.6.1-array-29
+ 6.6.1-array-3
  6.6.1-array-31
  6.6.1-array-32
  6.6.1-array-35
! 6.6.1-array-5
! 6.6.1-array-8
! 6.6.2.1-protected-type-2
! 6.6.2.2-protected-creation-3
! 7.1-named-5
! 7.1-named-6
! 7.1-named-7
  7.4.2-2
  7.5.1-accessible-4
  7.5.1-accessible-5
+ 7.5.1-canonical-3
  7.5.1-duplicate-4
  7.5.1-shadow-2
  7.5.2-accessible-1
  7.5.2-accessible-3
  7.5.2-accessible-4
+ 7.5.2-canonical-2
+ 7.5.2-canonical-3
  7.5.2-duplicate-1
  7.5.2-duplicate-2
  7.5.2-duplicate-3
  7.5.2-duplicate-4
  7.6-optional-restrictions-1
  7.6-unnamed-scope-1
  7.6-unnamed-scope-2
! 8.1.1.1-12
! 8.1.1.1-default-abstract-11
! 8.1.1.1-default-abstract-13
! 8.1.1.1-default-abstract-15
! 8.1.1.1-default-abstract-19
! 8.1.1.1-default-abstract-21
! 8.1.1.1-default-abstract-25
! 8.1.2-enclosing-10
! 8.1.2-enclosing-4
! 8.1.2-enclosing-5
! 8.1.2-enclosing-7
! 8.1.2-runtime-1
! 8.1.2-static-1
! 8.1.2-static-11
! 8.1.2-static-16
! 8.1.3-object-3
! 8.3-inheritance-1
! 8.3-inheritance-2
! 8.3-inheritance-3
! 8.3-runtime-1
! 8.3.1.2-final-17
! 8.3.1.2-final-19
! 8.3.1.2-final-2
! 8.3.1.2-final-21
! 8.3.1.2-final-24
! 8.3.1.2-final-27
! 8.3.1.2-final-28
! 8.3.1.2-final-29
! 8.3.2-abrupt-3
! 8.3.2-abrupt-5
! 8.3.2-abrupt-6
! 8.3.2-abrupt-7
! 8.3.2.2-super-2
! 8.3.2.3-illegal-forward-instance-1
! 8.3.2.3-illegal-forward-instance-2
! 8.3.2.3-illegal-forward-instance-3
! 8.3.2.3-illegal-forward-instance-4
! 8.3.2.3-illegal-forward-instance-5
! 8.3.2.3-illegal-forward-instance-6
! 8.3.2.3-illegal-forward-instance-7
! 8.3.2.3-illegal-forward-instance-8
! 8.3.2.3-illegal-forward-instance-9
! 8.3.2.3-illegal-forward-static-1
! 8.3.2.3-illegal-forward-static-10
! 8.3.2.3-illegal-forward-static-2
! 8.3.2.3-illegal-forward-static-3
! 8.3.2.3-illegal-forward-static-4
! 8.3.2.3-illegal-forward-static-5
! 8.3.2.3-illegal-forward-static-6
! 8.3.2.3-illegal-forward-static-7
! 8.3.2.3-illegal-forward-static-8
! 8.3.2.3-illegal-forward-static-9
! 8.3.2.3-legal-forward-instance-11
! 8.4.6-inheritance-1
! 8.4.6-inheritance-2
! 8.4.6.1-override-3
! 8.4.6.2-hiding-3
! 8.4.6.2-hiding-5
! 8.4.6.3-default-10
! 8.4.6.3-default-12
! 8.4.6.3-default-14
! 8.4.6.3-default-4
! 8.4.6.3-default-6
! 8.4.6.3-modifier-10
! 8.4.6.3-modifier-11
! 8.4.6.3-modifier-12
! 8.4.6.3-modifier-13
! 8.4.6.3-modifier-8
! 8.4.6.3-modifier-9
! 8.4.6.3-signature-4
! 8.4.6.4-abstract-1
! 8.4.6.4-abstract-10
! 8.4.6.4-abstract-2
! 8.4.6.4-abstract-9
! 8.4.6.4-multiple-3
! 8.4.6.4-multiple-4
! 8.4.6.4-multiple-7
! 8.4.6.4-multiple-8
! 8.5-inheritance-1
! 8.5-inheritance-2
! 8.5-inheritance-3
! 8.5-inheritance-6
! 8.5.2-non-static-member-usage-2
! 8.5.2-non-static-member-usage-4
! 8.5.2-non-static-member-usage-5
! 8.6-abrupt-1
! 8.6-abrupt-4
! 8.6-checked-exception-10
! 8.6-checked-exception-11
! 8.6-checked-exception-12
! 8.6-checked-exception-2
! 8.6-checked-exception-4
! 8.6-checked-exception-5
! 8.6-checked-exception-6
! 8.6-checked-exception-8
! 8.6-complete-1
! 8.6-complete-4
! 8.6-complete-5
! 8.7-abrupt-1
! 8.7-complete-1
! 8.7-complete-3
! 8.8.5.1-example-1
! 8.8.5.1-example-3
! 8.8.5.1-qualified-1
! 8.8.5.1-qualified-10
! 8.8.5.1-qualified-11
! 8.8.5.1-qualified-12
! 8.8.5.1-qualified-13
! 8.8.5.1-qualified-15
! 8.8.5.1-qualified-2
! 8.8.5.1-qualified-3
! 8.8.5.1-qualified-4
! 8.8.5.1-runtime-super-1
! 8.8.7-accessible-default-constructor-inner-18
! 8.8.7-accessible-default-constructor-inner-26
! 8.8.7-runtime-accessible-default-1
! 9.1.1-in-class-17
! 9.1.1-in-class-24
! 9.1.1-in-interface-16
! 9.1.1-in-interface-2
! 9.1.1-in-interface-3
! 9.1.1-in-interface-9
! 9.1.2-supertype-1
! 9.1.3-body-5
! 9.2-implicit-15
! 9.2-implicit-18
! 9.2-implicit-19
! 9.2-implicit-2
! 9.2-implicit-3
! 9.2-implicit-4
! 9.2-implicit-6
! 9.2-implicit-7
! 9.3.1-illegal-forward-1
! 9.3.1-illegal-forward-2
! 9.3.1-init-1
! 9.4.1-conflict-2
  non-jls-argument-expansion-11
  non-jls-argument-expansion-12
  non-jls-argument-expansion-13
  non-jls-argument-expansion-error-2
  non-jls-argument-expansion-tokens-1
! non-jls-jsr41.2-clash-1
! non-jls-jsr41.3-runtime-2
  non-jls-jsr41.4-definite-unassignment-fail-22
  non-jls-jsr41.4-definite-unassignment-pass-10
+ non-jls-jsr41.4-definite-unassignment-pass-9
  non-jls-jsr41.4-definite-unassignment-try-1
  non-jls-jsr41.4-definite-unassignment-try-2
  non-jls-jsr41.4-definite-unassignment-try-3
*************** non-jls-jsr41.4-definite-unassignment-tr
*** 753,767 ****
  non-jls-jsr41.4-definite-unassignment-try-7
  non-jls-jsr41.4-definite-unassignment-try-8
  non-jls-jsr41.4-loop-1
- non-jls-jsr41.4-loop-2
- non-jls-jsr41.4-loop-3
- non-jls-jsr41.4-loop-7
- non-jls-jsr41.4-loop-8
- non-jls-jsr41.4-loop-9
  non-jls-jsr41.4-loop-10
  non-jls-jsr41.4-loop-11
  non-jls-jsr41.4-loop-12
  non-jls-jsr41.4-loop-13
  non-jls-jsr41.4-loop-14
  non-jls-jsr41.4-loop-15
! non-jls-jsr41.2-clash-1
--- 702,716 ----
  non-jls-jsr41.4-definite-unassignment-try-7
  non-jls-jsr41.4-definite-unassignment-try-8
  non-jls-jsr41.4-loop-1
  non-jls-jsr41.4-loop-10
  non-jls-jsr41.4-loop-11
  non-jls-jsr41.4-loop-12
  non-jls-jsr41.4-loop-13
  non-jls-jsr41.4-loop-14
  non-jls-jsr41.4-loop-15
! non-jls-jsr41.4-loop-2
! non-jls-jsr41.4-loop-3
! non-jls-jsr41.4-loop-7
! non-jls-jsr41.4-loop-8
! non-jls-jsr41.4-loop-9
! non-jls-zip-2
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jar/jar.exp gcc-4.0.0/libjava/testsuite/libjava.jar/jar.exp
*** gcc-3.4.3/libjava/testsuite/libjava.jar/jar.exp	Tue Nov 18 07:17:01 2003
--- gcc-4.0.0/libjava/testsuite/libjava.jar/jar.exp	Tue Dec 21 01:01:06 2004
*************** proc gcj_jar_interpret {jarfile} {
*** 20,28 ****
    global INTERPRETER srcdir
  
    set gij [libjava_find_gij]
!   # libjava_find_gij will return `gij' if it couldn't find the
    # program; in this case we want to skip the test.
!   if {$INTERPRETER != "yes" || $gij == "gij"} {
      untested "$jarfile execution - gij test"
      untested "$jarfile output - gij test"
      return
--- 20,28 ----
    global INTERPRETER srcdir
  
    set gij [libjava_find_gij]
!   # libjava_find_gij will return "" if it couldn't find the
    # program; in this case we want to skip the test.
!   if {$INTERPRETER != "yes" || $gij == ""} {
      untested "$jarfile execution - gij test"
      untested "$jarfile output - gij test"
      return
*************** proc gcj_jar_interpret {jarfile} {
*** 31,37 ****
    set opts(_) {}
    set out [file rootname $jarfile].out
    libjava_invoke $jarfile "gij test" opts $gij {} $out \
!     -jar $jarfile
  }
  
  proc gcj_jar_run {} {
--- 31,37 ----
    set opts(_) {}
    set out [file rootname $jarfile].out
    libjava_invoke $jarfile "gij test" opts $gij {} $out \
!       "" -jar $jarfile
  }
  
  proc gcj_jar_run {} {
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/PR15133.c gcc-4.0.0/libjava/testsuite/libjava.jni/PR15133.c
*** gcc-3.4.3/libjava/testsuite/libjava.jni/PR15133.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/PR15133.c	Fri Apr 30 18:19:37 2004
***************
*** 0 ****
--- 1,9 ----
+ #include <stdio.h>
+ #include <jni.h>
+ #include "PR15133.h"
+ 
+ JNIEXPORT void JNICALL
+ Java_PR15133_printIt (JNIEnv *env, jobject x, jint y)
+ {
+   printf ("%d\n", y);
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/PR15133.java gcc-4.0.0/libjava/testsuite/libjava.jni/PR15133.java
*** gcc-3.4.3/libjava/testsuite/libjava.jni/PR15133.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/PR15133.java	Fri Apr 30 18:19:37 2004
***************
*** 0 ****
--- 1,14 ----
+ /* Test case for PR java/15133 */
+ public class PR15133
+ {
+   public void printIt (String dummy) { }
+ 
+   public native void printIt (int num);
+ 
+   public static void main (String[] args)
+   {
+     System.loadLibrary ("PR15133");
+ 
+     new PR15133( ).printIt( 1729);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/PR15133.out gcc-4.0.0/libjava/testsuite/libjava.jni/PR15133.out
*** gcc-3.4.3/libjava/testsuite/libjava.jni/PR15133.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/PR15133.out	Fri Apr 30 18:19:37 2004
***************
*** 0 ****
--- 1 ----
+ 1729
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/PR18116.c gcc-4.0.0/libjava/testsuite/libjava.jni/PR18116.c
*** gcc-3.4.3/libjava/testsuite/libjava.jni/PR18116.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/PR18116.c	Mon Feb 14 14:57:37 2005
***************
*** 0 ****
--- 1,35 ----
+ #include <stdlib.h>
+ #include <assert.h>
+ #include <PR18116.h>
+ 
+ // The purpose of this test is to ensure that signatures with non-top
+ // level class arguments work.
+ 
+ static jint
+ some_random_name (JNIEnv *env, jclass k, jobject v)
+ {
+   return 555;
+ }
+ 
+ JNIEXPORT jint JNICALL
+ JNI_OnLoad (JavaVM *vm, void *nothing)
+ {
+   JNIEnv *env;
+   JNINativeMethod meth;
+   jclass k;
+   jint r;
+ 
+   r = (*vm)->GetEnv (vm, (void **) &env, JNI_VERSION_1_2);
+   assert (r == JNI_OK);
+   k = (*env)->FindClass (env, "PR18116");
+   assert (k != NULL);
+ 
+   meth.name = "doit";
+   meth.signature = "(Ljava/lang/String;)I";
+   meth.fnPtr = some_random_name;
+ 
+   r = (*env)->RegisterNatives (env, k, &meth, 1);
+   assert (r == JNI_OK);
+ 
+   return JNI_VERSION_1_2;
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/PR18116.java gcc-4.0.0/libjava/testsuite/libjava.jni/PR18116.java
*** gcc-3.4.3/libjava/testsuite/libjava.jni/PR18116.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/PR18116.java	Mon Feb 14 14:57:37 2005
***************
*** 0 ****
--- 1,16 ----
+ // PR18116.java - Test RegisterNatives with more complex signatures.
+ 
+ public class PR18116
+ {
+   static
+   {
+     System.loadLibrary ("PR18116");
+   }
+ 
+   public static native int doit (java.lang.String s);
+ 
+   public static void main (String[] args)
+   {
+     System.out.println (doit ("Hello World!"));
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/PR18116.out gcc-4.0.0/libjava/testsuite/libjava.jni/PR18116.out
*** gcc-3.4.3/libjava/testsuite/libjava.jni/PR18116.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/PR18116.out	Mon Feb 14 14:57:37 2005
***************
*** 0 ****
--- 1 ----
+ 555
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/bytebuffer.c gcc-4.0.0/libjava/testsuite/libjava.jni/bytebuffer.c
*** gcc-3.4.3/libjava/testsuite/libjava.jni/bytebuffer.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/bytebuffer.c	Fri Jan  7 11:32:07 2005
***************
*** 0 ****
--- 1,62 ----
+ #include "bytebuffer.h"
+ 
+ static void
+ test_buffer (JNIEnv *env, jobject buffer, const char *name)
+ {
+   void *tmp = (*env)->GetDirectBufferAddress (env, buffer);
+ 
+   if (tmp == NULL)
+     printf ("PASS: address of %s\n", name);
+   else
+     printf ("FAIL: address of %s\n", name);
+ 
+   int tmplen = (*env)->GetDirectBufferCapacity (env, buffer);
+ 
+   if (tmplen == -1)
+     printf ("PASS: length of %s\n", name);
+   else
+     printf ("FAIL: length of %s\n", name);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_bytebuffer_testByteBuffer (JNIEnv *env, jclass k, jobject buffer)
+ {
+   test_buffer (env, buffer, "java.nio.ByteBuffer");
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_bytebuffer_testCharBuffer (JNIEnv *env, jclass k, jobject buffer)
+ {
+   test_buffer (env, buffer, "java.nio.CharBuffer");
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_bytebuffer_testDoubleBuffer (JNIEnv *env, jclass k, jobject buffer)
+ {
+   test_buffer (env, buffer, "java.nio.DoubleBuffer");
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_bytebuffer_testFloatBuffer (JNIEnv *env, jclass k, jobject buffer)
+ {
+   test_buffer (env, buffer, "java.nio.FloatBuffer");
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_bytebuffer_testIntBuffer (JNIEnv *env, jclass k, jobject buffer)
+ {
+   test_buffer (env, buffer, "java.nio.IntBuffer");
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_bytebuffer_testLongBuffer (JNIEnv *env, jclass k, jobject buffer)
+ {
+   test_buffer (env, buffer, "java.nio.LongBuffer");
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_bytebuffer_testShortBuffer (JNIEnv *env, jclass k, jobject buffer)
+ {
+   test_buffer (env, buffer, "java.nio.ShortBuffer");
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/bytebuffer.java gcc-4.0.0/libjava/testsuite/libjava.jni/bytebuffer.java
*** gcc-3.4.3/libjava/testsuite/libjava.jni/bytebuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/bytebuffer.java	Fri Jan  7 11:32:07 2005
***************
*** 0 ****
--- 1,38 ----
+ // Test to make sure JNI implementation catches exceptions.
+ 
+ import java.nio.*;
+ 
+ public class bytebuffer
+ {
+   static
+   {
+     System.loadLibrary("bytebuffer");
+   }
+ 
+   public static native void testByteBuffer(ByteBuffer bb);
+   public static native void testCharBuffer(CharBuffer b);
+   public static native void testDoubleBuffer(DoubleBuffer b);
+   public static native void testFloatBuffer(FloatBuffer b);
+   public static native void testIntBuffer(IntBuffer b);
+   public static native void testLongBuffer(LongBuffer b);
+   public static native void testShortBuffer(ShortBuffer b);
+ 
+   public static void main(String[] args)
+   {
+     ByteBuffer bb = ByteBuffer.allocate(1024);
+     testByteBuffer(bb);
+     testCharBuffer(bb.asCharBuffer());
+     testDoubleBuffer(bb.asDoubleBuffer());
+     testFloatBuffer(bb.asFloatBuffer());
+     testIntBuffer(bb.asIntBuffer());
+     testLongBuffer(bb.asLongBuffer());
+     testShortBuffer(bb.asShortBuffer());
+ 
+     testCharBuffer(CharBuffer.allocate(1024));
+     testDoubleBuffer(DoubleBuffer.allocate(1024));
+     testFloatBuffer(FloatBuffer.allocate(1024));
+     testIntBuffer(IntBuffer.allocate(1024));
+     testLongBuffer(LongBuffer.allocate(1024));
+     testShortBuffer(ShortBuffer.allocate(1024));
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/bytebuffer.out gcc-4.0.0/libjava/testsuite/libjava.jni/bytebuffer.out
*** gcc-3.4.3/libjava/testsuite/libjava.jni/bytebuffer.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/bytebuffer.out	Fri Jan  7 11:32:07 2005
***************
*** 0 ****
--- 1,26 ----
+ PASS: address of java.nio.ByteBuffer
+ PASS: length of java.nio.ByteBuffer
+ PASS: address of java.nio.CharBuffer
+ PASS: length of java.nio.CharBuffer
+ PASS: address of java.nio.DoubleBuffer
+ PASS: length of java.nio.DoubleBuffer
+ PASS: address of java.nio.FloatBuffer
+ PASS: length of java.nio.FloatBuffer
+ PASS: address of java.nio.IntBuffer
+ PASS: length of java.nio.IntBuffer
+ PASS: address of java.nio.LongBuffer
+ PASS: length of java.nio.LongBuffer
+ PASS: address of java.nio.ShortBuffer
+ PASS: length of java.nio.ShortBuffer
+ PASS: address of java.nio.CharBuffer
+ PASS: length of java.nio.CharBuffer
+ PASS: address of java.nio.DoubleBuffer
+ PASS: length of java.nio.DoubleBuffer
+ PASS: address of java.nio.FloatBuffer
+ PASS: length of java.nio.FloatBuffer
+ PASS: address of java.nio.IntBuffer
+ PASS: length of java.nio.IntBuffer
+ PASS: address of java.nio.LongBuffer
+ PASS: length of java.nio.LongBuffer
+ PASS: address of java.nio.ShortBuffer
+ PASS: length of java.nio.ShortBuffer
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/directbuffer.c gcc-4.0.0/libjava/testsuite/libjava.jni/directbuffer.c
*** gcc-3.4.3/libjava/testsuite/libjava.jni/directbuffer.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/directbuffer.c	Fri Jan  7 11:32:07 2005
***************
*** 0 ****
--- 1,75 ----
+ #include <stdlib.h>
+ 
+ #include "directbuffer.h"
+ 
+ #define BUFFER_SIZE 1024
+ 
+ static void *address;
+ 
+ JNIEXPORT jobject JNICALL
+ Java_directbuffer_createDirectByteBuffer (JNIEnv *env, jclass k)
+ {
+   address = malloc (BUFFER_SIZE);
+   return (*env)->NewDirectByteBuffer (env, address, 1024);
+ }
+ 
+ static void
+ test_buffer (JNIEnv *env, jobject buffer, const char *name, int len)
+ {
+   void *tmp = (*env)->GetDirectBufferAddress (env, buffer);
+ 
+   if (address == tmp)
+     printf ("PASS: address of %s\n", name);
+   else
+     printf ("FAIL: address of %s\n", name);
+ 
+   int tmplen = (*env)->GetDirectBufferCapacity (env, buffer);
+ 
+   if (len == tmplen)
+     printf ("PASS: length of %s\n", name);
+   else
+     printf ("FAIL: length of %s\n", name);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_directbuffer_testDirectByteBuffer (JNIEnv *env, jclass k, jobject buffer, jint len)
+ {
+   test_buffer (env, buffer, "direct java.nio.ByteBuffer", len);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_directbuffer_testCharBuffer (JNIEnv *env, jclass k, jobject buffer, jint len)
+ {
+   test_buffer (env, buffer, "java.nio.CharBuffer view", len);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_directbuffer_testDoubleBuffer (JNIEnv *env, jclass k, jobject buffer, jint len)
+ {
+   test_buffer (env, buffer, "java.nio.DoubleBuffer view", len);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_directbuffer_testFloatBuffer (JNIEnv *env, jclass k, jobject buffer, jint len)
+ {
+   test_buffer (env, buffer, "java.nio.FloatBuffer view", len);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_directbuffer_testIntBuffer (JNIEnv *env, jclass k, jobject buffer, jint len)
+ {
+   test_buffer (env, buffer, "java.nio.IntBuffer view", len);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_directbuffer_testLongBuffer (JNIEnv *env, jclass k, jobject buffer, jint len)
+ {
+   test_buffer (env, buffer, "java.nio.LongBuffer view", len);
+ }
+ 
+ JNIEXPORT void JNICALL
+ Java_directbuffer_testShortBuffer (JNIEnv *env, jclass k, jobject buffer, jint len)
+ {
+   test_buffer (env, buffer, "java.nio.ShortBuffer view", len);
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/directbuffer.java gcc-4.0.0/libjava/testsuite/libjava.jni/directbuffer.java
*** gcc-3.4.3/libjava/testsuite/libjava.jni/directbuffer.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/directbuffer.java	Fri Jan  7 11:32:07 2005
***************
*** 0 ****
--- 1,40 ----
+ // Test to make sure JNI implementation catches exceptions.
+ 
+ import java.nio.*;
+ 
+ public class directbuffer
+ {
+   static
+   {
+     System.loadLibrary("directbuffer");
+   }
+ 
+   public static native ByteBuffer createDirectByteBuffer();
+   
+   public static native void testDirectByteBuffer(ByteBuffer bb, int len);
+   public static native void testCharBuffer(CharBuffer b, int len);
+   public static native void testDoubleBuffer(DoubleBuffer b, int len);
+   public static native void testFloatBuffer(FloatBuffer b, int len);
+   public static native void testIntBuffer(IntBuffer b, int len);
+   public static native void testLongBuffer(LongBuffer b, int len);
+   public static native void testShortBuffer(ShortBuffer b, int len);
+ 
+   public static void main(String[] args)
+   {
+     ByteBuffer bb = createDirectByteBuffer();
+     CharBuffer cb = bb.asCharBuffer();
+     DoubleBuffer db = bb.asDoubleBuffer();
+     FloatBuffer fb = bb.asFloatBuffer();
+     IntBuffer ib = bb.asIntBuffer();
+     LongBuffer lb = bb.asLongBuffer();
+     ShortBuffer sb = bb.asShortBuffer();
+ 
+     testDirectByteBuffer(bb, 1024);
+     testCharBuffer(cb, 512);
+     testDoubleBuffer(db, 128);
+     testFloatBuffer(fb, 256);
+     testIntBuffer(ib, 256);
+     testLongBuffer(lb, 128);
+     testShortBuffer(sb, 512);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/directbuffer.out gcc-4.0.0/libjava/testsuite/libjava.jni/directbuffer.out
*** gcc-3.4.3/libjava/testsuite/libjava.jni/directbuffer.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/directbuffer.out	Fri Jan  7 11:32:07 2005
***************
*** 0 ****
--- 1,14 ----
+ PASS: address of direct java.nio.ByteBuffer
+ PASS: length of direct java.nio.ByteBuffer
+ PASS: address of java.nio.CharBuffer view
+ PASS: length of java.nio.CharBuffer view
+ PASS: address of java.nio.DoubleBuffer view
+ PASS: length of java.nio.DoubleBuffer view
+ PASS: address of java.nio.FloatBuffer view
+ PASS: length of java.nio.FloatBuffer view
+ PASS: address of java.nio.IntBuffer view
+ PASS: length of java.nio.IntBuffer view
+ PASS: address of java.nio.LongBuffer view
+ PASS: length of java.nio.LongBuffer view
+ PASS: address of java.nio.ShortBuffer view
+ PASS: length of java.nio.ShortBuffer view
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/iface.c gcc-4.0.0/libjava/testsuite/libjava.jni/iface.c
*** gcc-3.4.3/libjava/testsuite/libjava.jni/iface.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/iface.c	Tue Dec 21 00:49:45 2004
***************
*** 0 ****
--- 1,40 ----
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <iface.h>
+ 
+ void check (JNIEnv *);
+ 
+ void check(JNIEnv *env)
+ {
+   if ((*env)->ExceptionCheck(env) != JNI_FALSE)
+     {
+       fprintf(stderr, "UNEXPECTED EXCEPTION\n");
+       exit(-1);
+     }
+ }
+ 
+ void
+ Java_iface_doCalls (JNIEnv *env, jobject self, jobject other)
+ {
+   jclass iface_class, comparable_class;
+   jmethodID iface_meth, comparable_meth;
+   jvalue args[1];
+ 
+   iface_class = (*env)->FindClass(env, "iface");
+   check (env);
+   comparable_class = (*env)->FindClass (env, "mycomp");
+   check (env);
+ 
+   iface_meth = (*env)->GetMethodID (env, iface_class, "compareTo",
+ 				    "(Ljava/lang/Object;)I");
+   check (env);
+   comparable_meth = (*env)->GetMethodID (env, comparable_class, "compareTo",
+ 					 "(Ljava/lang/Object;)I");
+   check (env);
+ 
+   args[0].l = other;
+   (*env)->CallObjectMethodA (env, self, iface_meth, args);
+   check (env);
+   (*env)->CallObjectMethodA (env, self, comparable_meth, args);
+   check (env);
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/iface.java gcc-4.0.0/libjava/testsuite/libjava.jni/iface.java
*** gcc-3.4.3/libjava/testsuite/libjava.jni/iface.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/iface.java	Tue Dec 21 00:49:45 2004
***************
*** 0 ****
--- 1,27 ----
+ // JNI calls via an interface method were broken in a couple releases.
+ 
+ interface mycomp
+ {
+   int compareTo(Object x);
+ }
+ 
+ public class iface implements mycomp
+ {
+   static
+   {
+     System.loadLibrary("iface");
+   }
+ 
+   public int compareTo (Object x)
+   {
+     System.out.println ("hi maude");
+     return 3;
+   }
+ 
+   public native void doCalls(Object x);
+ 
+   public static void main (String[] args)
+   {
+     new iface().doCalls(args);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/iface.out gcc-4.0.0/libjava/testsuite/libjava.jni/iface.out
*** gcc-3.4.3/libjava/testsuite/libjava.jni/iface.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/iface.out	Tue Dec 21 00:49:45 2004
***************
*** 0 ****
--- 1,2 ----
+ hi maude
+ hi maude
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/invocation/PR16923.c gcc-4.0.0/libjava/testsuite/libjava.jni/invocation/PR16923.c
*** gcc-3.4.3/libjava/testsuite/libjava.jni/invocation/PR16923.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/invocation/PR16923.c	Wed Feb 23 17:36:25 2005
***************
*** 0 ****
--- 1,43 ----
+ #include <assert.h>
+ #include <jni.h>
+ 
+ union env_union
+ {
+   void *void_env;
+   JNIEnv *jni_env;
+ };
+ 
+ int
+ main (int argc, const char** argv)
+ {
+   union env_union tmp;
+   JNIEnv* env;
+   JavaVM* jvm;
+   JavaVMInitArgs vm_args;
+   JavaVMOption options[1];
+   jclass class_id;
+   jmethodID method_id;
+   jint result;
+ 
+   options[0].optionString = "-DPR16923=optionReceived";
+ 
+   vm_args.version = JNI_VERSION_1_2;
+   vm_args.ignoreUnrecognized = JNI_TRUE;
+   vm_args.options = options;
+   vm_args.nOptions = 1;
+ 
+   result = JNI_CreateJavaVM (&jvm, &tmp.void_env, &vm_args);
+   assert (result >= 0);
+ 
+   env = tmp.jni_env;
+ 
+   class_id = (*env)->FindClass (env, "PR16923");
+   assert (class_id);
+ 
+   method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
+   assert (method_id);
+ 
+   (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/invocation/PR16923.java gcc-4.0.0/libjava/testsuite/libjava.jni/invocation/PR16923.java
*** gcc-3.4.3/libjava/testsuite/libjava.jni/invocation/PR16923.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/invocation/PR16923.java	Wed Feb 23 17:36:26 2005
***************
*** 0 ****
--- 1,7 ----
+ public class PR16923
+ {
+   public static void printIt ()
+   {
+     System.out.println (System.getProperty ("PR16923"));
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/invocation/PR16923.out gcc-4.0.0/libjava/testsuite/libjava.jni/invocation/PR16923.out
*** gcc-3.4.3/libjava/testsuite/libjava.jni/invocation/PR16923.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.jni/invocation/PR16923.out	Wed Feb 23 17:36:26 2005
***************
*** 0 ****
--- 1 ----
+ optionReceived
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/jni.exp gcc-4.0.0/libjava/testsuite/libjava.jni/jni.exp
*** gcc-3.4.3/libjava/testsuite/libjava.jni/jni.exp	Sat Mar 22 10:45:04 2003
--- gcc-4.0.0/libjava/testsuite/libjava.jni/jni.exp	Wed Mar 30 18:43:05 2005
*************** proc gcj_jni_compile_c_to_so {file {opti
*** 11,44 ****
    set options ""
  
  # apple uses a different extension for shared/dynamic libraries
! # so we check against powerpc-apple-darwin and set them to 
  # dylib, else we assume it's .so
  
!   if { [ regexp {powerpc-apple-darwin} $host_triplet] } {
        set so_extension "dylib"
        set so_flag "-dynamiclib"
    } else {
        set so_extension "so"
        set so_flag "-shared"
    }
!   set name [file rootname [file tail $file]]
    set soname lib${name}.${so_extension}
  
    lappend options "additional_flags=${so_flag} -fPIC"
    # Find the generated header.
    lappend options "additional_flags=-I. -I.."
    # Find jni.h.
    lappend options "additional_flags=-I$srcdir/../include"
  
    set x [libjava_prune_warnings \
  	   [target_compile $file $soname executable $options]]
    if {$x != ""} {
      verbose "target_compile failed: $x" 2
!     fail "$name.c compilation"
      return 0
    }
  
!   pass "$name.c compilation"
    return 1
  }
  
--- 11,56 ----
    set options ""
  
  # apple uses a different extension for shared/dynamic libraries
! # so we check against powerpc-apple-darwin and set them to
  # dylib, else we assume it's .so
  
!   if { [istarget "*-*-darwin*"] } {
        set so_extension "dylib"
        set so_flag "-dynamiclib"
    } else {
        set so_extension "so"
        set so_flag "-shared"
    }
!   set filename [file tail $file]
!   set name [file rootname $filename]
    set soname lib${name}.${so_extension}
  
    lappend options "additional_flags=${so_flag} -fPIC"
    # Find the generated header.
    lappend options "additional_flags=-I. -I.."
+ 
+   # Ensure that the generated header has correct prototypes.
+   set cfile [file rootname $file].c
+   if { [file exists $cfile]} {
+     # This option is only valid for C sources.
+     lappend options "additional_flags=-Wmissing-prototypes"
+   }
+ 
    # Find jni.h.
    lappend options "additional_flags=-I$srcdir/../include"
  
+   # Append C++ options
+   lappend options "additional_flags=$options_cxx"
+ 
    set x [libjava_prune_warnings \
  	   [target_compile $file $soname executable $options]]
    if {$x != ""} {
      verbose "target_compile failed: $x" 2
!     fail "$filename compilation"
      return 0
    }
  
!   pass "$filename compilation"
    return 1
  }
  
*************** proc gcj_jni_build_header {file} {
*** 62,73 ****
  proc gcj_jni_test_one {file} {
    global runtests
    global host_triplet
  
  # apple uses a different extension for shared/dynamic libraries
! # so we check against powerpc-apple-darwin and set them to 
  # dylib, else we assume it's .so
  
!   if { [ regexp {powerpc-apple-darwin} $host_triplet] } {
        set so_extension "dylib"
    } else {
        set so_extension "so"
--- 74,86 ----
  proc gcj_jni_test_one {file} {
    global runtests
    global host_triplet
+   global INTERPRETER
  
  # apple uses a different extension for shared/dynamic libraries
! # so we check against powerpc-apple-darwin and set them to
  # dylib, else we assume it's .so
  
!   if { [istarget "*-*-darwin*"] } {
        set so_extension "dylib"
    } else {
        set so_extension "so"
*************** proc gcj_jni_test_one {file} {
*** 113,144 ****
  	}
        }
        lappend cxxflaglist $arg
      }
  
-     lappend cxxflaglist "-lstdc++"
      set cxxflags [join $cxxflaglist]
    }
  
!   if {! [gcj_jni_compile_c_to_so $cfile]} {
      # FIXME
      return 0
    }
  
!   # We use -l$main because the .so is named the same as the main
!   # program.
!   set args [list "additional_flags=-fjni -L. -l$main $cxxflags"]
    if {! [gcj_link $main $main $file $args]} {
      # FIXME
      return 0
    }
  
!   if {! [gcj_invoke $main [file rootname $file].out $cxxldlibflags]} {
      # FIXME
      return 0
    }
  
    # When we succeed we remove all our clutter.
!   eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main lib${main}.${so_extension}]
  
    return 1
  }
--- 126,279 ----
  	}
        }
        lappend cxxflaglist $arg
+       # In case the libstdc++ is not installed yet, we pass the build
+       # directory of it to the cxxflaglist.
+       lappend cxxflaglist "-L$cxxldlibflags"
+     }
+ 
+     # Darwin does not yet have a libgcc_s.dylib library.
+     # So we add it here. If the libgcc_s is installed, the libstdc++
+     # would pick it up.
+     if { [istarget "*-*-darwin*"] } {
+ 	lappend cxxflaglist "-lgcc_s -lstdc++"
+     } else {
+ 	lappend cxxflaglist "-lstdc++"
      }
  
      set cxxflags [join $cxxflaglist]
    }
  
!   if {! [gcj_jni_compile_c_to_so $cfile $cxxflags]} {
      # FIXME
      return 0
    }
  
!   set args [list "additional_flags=-fjni"]
    if {! [gcj_link $main $main $file $args]} {
      # FIXME
      return 0
    }
  
!   set resultfile [file rootname $file].out
! 
!   if {! [gcj_invoke $main $resultfile $cxxldlibflags]} {
      # FIXME
      return 0
    }
  
+   # We purposely ignore errors here; we still want to run the other
+   # appropriate tests.
+   set errname [file rootname [file tail $file]]
+   set gij [libjava_find_gij]
+   # libjava_find_gij will return "" if it couldn't find the
+   # program; in this case we want to skip the test.
+   # If the libraries are not installed yet, we have to pass them via
+   # cxxldlibflags to libjava_invoke.
+   if {$INTERPRETER == "yes" && $gij != ""} {
+     libjava_invoke $errname "gij test" opts $gij \
+       "" $resultfile $cxxldlibflags $main
+   }
+ 
    # When we succeed we remove all our clutter.
!   eval gcj_cleanup [glob -nocomplain -- ${main}.*] \
!     [list $main lib${main}.${so_extension}]
! 
!   return 1
! }
! 
! # Compile a single C file and produce a binary.  OPTIONS is a list of
! # options to pass to the compiler.  Returns 0 on failure, 1 on
! # success.
! proc gcj_jni_invocation_compile_c_to_binary {file {options {}}} {
!   global srcdir
!   global host_triplet
!   verbose "options: $options"
!   set options_cxx $options
!   set options ""
! 
!   set filename [file tail $file]
!   set name [file rootname $filename]
! 
!   # Set some darwin specific options
!   if { [istarget "*-*-darwin*"] } {
!       lappend options "additional_flags=-multiply_defined suppress"
!   }
!   # Find the generated header.
!   lappend options "additional_flags=-I. -I.."
! 
!   # Find jni.h.
!   lappend options "additional_flags=-I$srcdir/../include"
! 
!   # Append C++ options
!   lappend options "additional_flags=$options_cxx"
! 
!   set x [libjava_prune_warnings \
! 	   [target_compile $file $name executable $options]]
!   if {$x != ""} {
!     verbose "target_compile failed: $x" 2
!     fail "$filename compilation"
!     return 0
!   }
! 
!   pass "$filename compilation"
!   return 1
! }
! 
! # Do all the work for a single invocation API test.  Return 0 on
! # failure.
! proc gcj_jni_invocation_test_one {file} {
!   global runtests
!   global host_triplet
!   global INTERPRETER
! 
!   # The base name.  We use it for several purposes.
!   set main [file rootname [file tail $file]]
!   if {! [runtest_file_p $runtests $main]} {
!     # Simply skip it.
!     return 1
!   }
! 
!   if {! [bytecompile_file $file [pwd]]} {
!     fail "bytecompile $file"
!     # FIXME - should use `untested' on all remaining tests.
!     # But that is hard.
!     return 0
!   }
!   pass "bytecompile $file"
! 
!   set cfile [file rootname $file].c
!   # Darwin needs -liconv linked, otherwise we get some unresolved.
!   # Also, like in the cxxtest we need to add -lgcc_s since Darwin
!   # has no libgcc_s.dylib installed yet.
!   if { [istarget "*-*-darwin*"] } {
!       set cxxflags "-L../.libs -lgcc_s -lgcj -liconv"
!   } else {
!       set cxxflags "-L../.libs -lgcj"
!   }
! 
!   if { [istarget "*-*-solaris*"] } {
!     lappend cxxflags "-lsocket"
!   }
! 
!   if {! [gcj_jni_invocation_compile_c_to_binary $cfile $cxxflags]} {
!     # FIXME
!     return 0
!   }
! 
!   set resultfile [file rootname $file].out
! 
!   if {! [gcj_invoke $main $resultfile ""]} {
!     # FIXME
!     return 0
!   }
! 
!   # We purposely ignore errors here; we still want to run the other
!   # appropriate tests.
!   set errname [file rootname [file tail $file]]
! 
!   # When we succeed we remove all our clutter.
!   eval gcj_cleanup [glob -nocomplain -- ${main}.*] \
!     [list $main]
  
    return 1
  }
*************** proc gcj_jni_run {} {
*** 155,160 ****
--- 290,302 ----
      foreach x $srcfiles {
        gcj_jni_test_one $x
      }
+ 
+     # Run JNI invocation API tests
+     catch { lsort [glob -nocomplain ${srcdir}/${subdir}/invocation/*.java] } srcfiles
+ 
+     foreach x $srcfiles {
+       gcj_jni_invocation_test_one $x
+     }
    } else {
      verbose "JNI tests not run in cross-compilation environment"
    }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.jni/pr11951.java gcc-4.0.0/libjava/testsuite/libjava.jni/pr11951.java
*** gcc-3.4.3/libjava/testsuite/libjava.jni/pr11951.java	Mon Aug 18 14:35:34 2003
--- gcc-4.0.0/libjava/testsuite/libjava.jni/pr11951.java	Wed May  5 20:58:54 2004
*************** public class pr11951
*** 11,14 ****
--- 11,18 ----
    {
      nmethod();
    }
+ 
+   static {
+     System.loadLibrary("pr11951");
+   }  
  }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/ExtraClassLoader.java gcc-4.0.0/libjava/testsuite/libjava.lang/ExtraClassLoader.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/ExtraClassLoader.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/ExtraClassLoader.java	Mon Oct 18 14:13:18 2004
***************
*** 0 ****
--- 1,36 ----
+ // PR java/18036
+ 
+ public class ExtraClassLoader extends ClassLoader
+ {
+   public static void main(String args[]) throws Exception
+   {
+     ClassLoader loader = new ExtraClassLoader();
+     Class c = Class.forName("C", false, loader);
+     Object o = c.newInstance();
+     System.out.println(o.getClass() == c);
+     System.out.println(c.getClassLoader() == loader);
+   }
+ 
+   public Class findClass(String name) throws ClassNotFoundException
+   {
+     return defineClass("C", Cbytes, 0, Cbytes.length);
+   }
+ 
+  /*
+   * Generated by compiling the following program with gcj -C C.java:
+   *
+   * public class C
+   * {
+   *   public C() throws ClassNotFoundException
+   *   {
+   *     System.out.println(getClass() == Class.forName("C"));
+   *   }
+   * }
+   *
+   * And then processing the byte code as follows:
+   * od -w1000 -An -td1 C.class | sed "s/\ \+/,/g"
+   */
+   private static byte[] Cbytes = new byte[] {
+ -54,-2,-70,-66,0,3,0,45,0,39,1,0,1,67,7,0,1,1,0,16,106,97,118,97,47,108,97,110,103,47,79,98,106,101,99,116,7,0,3,1,0,6,60,105,110,105,116,62,1,0,3,40,41,86,1,0,4,67,111,100,101,12,0,5,0,6,10,0,4,0,8,1,0,16,106,97,118,97,47,108,97,110,103,47,83,121,115,116,101,109,7,0,10,1,0,3,111,117,116,1,0,21,76,106,97,118,97,47,105,111,47,80,114,105,110,116,83,116,114,101,97,109,59,12,0,12,0,13,9,0,11,0,14,1,0,8,103,101,116,67,108,97,115,115,1,0,19,40,41,76,106,97,118,97,47,108,97,110,103,47,67,108,97,115,115,59,12,0,16,0,17,10,0,4,0,18,8,0,1,1,0,15,106,97,118,97,47,108,97,110,103,47,67,108,97,115,115,7,0,21,1,0,7,102,111,114,78,97,109,101,1,0,37,40,76,106,97,118,97,47,108,97,110,103,47,83,116,114,105,110,103,59,41,76,106,97,118,97,47,108,97,110,103,47,67,108,97,115,115,59,12,0,23,0,24,10,0,22,0,25,1,0,19,106,97,118,97,47,105,111,47,80,114,105,110,116,83,116,114,101,97,109,7,0,27,1,0,7,112,114,105,110,116,108,110,1,0,4,40,90,41,86,12,0,29,0,30,10,0,28,0,31,1,0,15,76,105,110,101,78,117,109,98,101,114,84,97,98,108,101,1,0,10,69,120,99,101,112,116,105,111,110,115,1,0,32,106,97,118,97,47,108,97,110,103,47,67,108,97,115,115,78,111,116,70,111,117,110,100,69,120,99,101,112,116,105,111,110,7,0,35,1,0,10,83,111,117,114,99,101,70,105,108,101,1,0,6,67,46,106,97,118,97,0,33,0,2,0,4,0,0,0,0,0,1,0,1,0,5,0,6,0,2,0,7,0,0,0,52,0,3,0,1,0,0,0,28,42,-73,0,9,-78,0,15,42,-74,0,19,18,20,-72,0,26,-90,0,7,4,-89,0,4,3,-74,0,32,-79,0,0,0,1,0,33,0,0,0,6,0,1,0,4,0,5,0,34,0,0,0,4,0,1,0,36,0,1,0,37,0,0,0,2,0,38
+   };
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/InvokeInterface.java gcc-4.0.0/libjava/testsuite/libjava.lang/InvokeInterface.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/InvokeInterface.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/InvokeInterface.java	Wed Apr 14 17:45:20 2004
***************
*** 0 ****
--- 1,55 ----
+ import java.lang.reflect.*;
+ 
+ interface one
+ {
+   int n(int N);
+ }
+ 
+ interface two
+ {
+   int nn(int N);
+ }
+ 
+ interface three
+ {
+   int nnn(int N);
+ }
+ 
+ class arse implements one, two
+ {
+   public int n(int N) { return N; }
+   public int nn(int N) { return N*2; }
+ }
+ 
+ class arsey implements two, one, three
+ {
+   public int n(int N) { return N*4; }
+   public int nn(int N) { return N*8; }
+   public int nnn(int N) { return N*16; }
+ }
+ 
+ public class InvokeInterface extends arse
+ {
+   int f ()
+   {
+ 	return flunk.nn(1);
+   }
+   static two flunk = new arse();
+   static three flunkey = new arsey();
+   public static void main(String[] s) throws Throwable
+   {
+ 	Class[] argtypes = {Integer.TYPE};
+ 	Method m = two.class.getMethod("nn", argtypes);
+ 	Object[] args = {new Integer(1)};
+ 	System.out.println(flunk.nn(1));
+ 	System.out.println(m.invoke(new arse(), args));
+ 	m = arse.class.getMethod("nn", argtypes);
+ 	System.out.println(m.invoke(new arse(), args));
+ 	m = two.class.getMethod("nn", argtypes);
+ 	System.out.println(m.invoke(new arsey(), args));
+ 	m = three.class.getMethod("nnn", argtypes);
+ 	System.out.println(m.invoke(new arsey(), args));	
+ 	m = arsey.class.getMethod("nnn", argtypes);
+ 	System.out.println(m.invoke(new arsey(), args));	
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/InvokeInterface.out gcc-4.0.0/libjava/testsuite/libjava.lang/InvokeInterface.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/InvokeInterface.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/InvokeInterface.out	Wed Apr 14 17:45:20 2004
***************
*** 0 ****
--- 1,6 ----
+ 2
+ 2
+ 2
+ 8
+ 16
+ 16
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/LargeFile.java gcc-4.0.0/libjava/testsuite/libjava.lang/LargeFile.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/LargeFile.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/LargeFile.java	Thu Jul 15 00:58:41 2004
***************
*** 0 ****
--- 1,36 ----
+ /* Test to ensure files >= 2^31 bytes are supported. */
+ 
+ import java.io.*;
+ 
+ public class LargeFile
+ {
+   public static void main(String[] args) throws IOException
+   {
+     File file = new File("LargeFile.tmp");
+ 
+     try
+       {
+ 	RandomAccessFile rfile = new RandomAccessFile(file, "rw");
+ 
+ 	long pos = (long) Math.pow(2, 31);
+ 
+ 	rfile.seek(pos);
+ 	rfile.write('O');
+ 	rfile.write('K');
+ 	rfile.close();
+ 
+ 	// Re-open, read byte back using FileInputStream and clean up.
+ 
+ 	FileInputStream fis = new FileInputStream(file);
+ 	fis.skip(pos);
+ 	System.out.print((char) fis.read());
+ 	System.out.println((char) fis.read());
+ 	fis.close();
+       }
+     finally
+       {
+         if (file.exists())
+ 	  file.delete();
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/LargeFile.out gcc-4.0.0/libjava/testsuite/libjava.lang/LargeFile.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/LargeFile.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/LargeFile.out	Thu Jul 15 00:58:41 2004
***************
*** 0 ****
--- 1 ----
+ OK
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/MathBuiltin.java gcc-4.0.0/libjava/testsuite/libjava.lang/MathBuiltin.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/MathBuiltin.java	Sun Jun  8 18:17:53 2003
--- gcc-4.0.0/libjava/testsuite/libjava.lang/MathBuiltin.java	Fri Apr 30 14:15:08 2004
*************** class MathBuiltin
*** 5,10 ****
--- 5,20 ----
      return Math.abs(x);
    }
  
+   static double acos(double x)
+   {
+     return Math.acos(x);
+   }
+ 
+   static double asin(double x)
+   {
+     return Math.asin(x);
+   }
+ 
    static double atan(double x)
    {
      return Math.atan(x);
*************** class MathBuiltin
*** 15,20 ****
--- 25,35 ----
      return Math.atan2(x,y);
    }
  
+   static double ceil(double x)
+   {
+     return Math.ceil(x);
+   }
+ 
    static double cos(double x)
    {
      return Math.cos(x);
*************** class MathBuiltin
*** 25,30 ****
--- 40,50 ----
      return Math.exp(x);
    }
  
+   static double floor(double x)
+   {
+     return Math.floor(x);
+   }
+ 
    static double log(double x)
    {
      return Math.log(x);
*************** class MathBuiltin
*** 62,69 ****
  
    public static void main(String argv[])
    {
!     double sum = abs (1.0) + atan (1.0) + atan2 (1.0, 1.0) + cos (1.0)
!                  + exp (1.0) + log(1.0) + max(1.0, 1.0) + min (1.0, 1.0)
  		 + pow (1.0, 1.0) + sin (1.0) + sqrt(1.0) + tan(1.0);
    }
  }
--- 82,90 ----
  
    public static void main(String argv[])
    {
!     double sum = abs (1.0) + acos (1.0) + asin (1.0) + atan (1.0)
! 		 + atan2 (1.0, 1.0) + ceil (1.0) + cos (1.0) + exp (1.0)
! 		 + floor (1.0) + log(1.0) + max(1.0, 1.0) + min (1.0, 1.0)
  		 + pow (1.0, 1.0) + sin (1.0) + sqrt(1.0) + tan(1.0);
    }
  }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/PR16867.java gcc-4.0.0/libjava/testsuite/libjava.lang/PR16867.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/PR16867.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/PR16867.java	Thu Aug 12 14:34:11 2004
***************
*** 0 ****
--- 1,17 ----
+ /* SSA-DCE was removing the initialization of the temporary object
+    in getFoo because it wasn't realizing that the pointer was needed
+    outside of it.  */
+ 
+ public class PR16867
+ {
+   public static Object[] getFoo()
+   {
+     return new Object[] {"OK"};
+   }
+ 
+   public static void main(String[] args)
+   {
+     Object[] a = getFoo();
+     System.out.println(a[0]);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/PR16867.out gcc-4.0.0/libjava/testsuite/libjava.lang/PR16867.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/PR16867.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/PR16867.out	Thu Aug 12 14:34:11 2004
***************
*** 0 ****
--- 1 ----
+ OK
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/PR18699.java gcc-4.0.0/libjava/testsuite/libjava.lang/PR18699.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/PR18699.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/PR18699.java	Wed Dec  1 18:34:54 2004
***************
*** 0 ****
--- 1,36 ----
+ // Test for thread-local allocation problems.
+ 
+ import java.util.HashMap;
+ import java.util.Observable;
+ import java.util.Observer;
+ 
+ class PR18699 extends Observable implements Runnable, Observer {
+ 
+   public static void main(String[] args) throws InterruptedException {
+     PR18699 PR18699_1 = new PR18699();
+     PR18699 PR18699_2 = new PR18699();
+     PR18699_1.addObserver(PR18699_2);
+     PR18699_2.addObserver(PR18699_1);
+     new Thread(PR18699_1).start();
+     new Thread(PR18699_2).start();
+   }
+ 
+   public void run() {
+     int c = 0;
+     String s = "";
+     while (++c < 50) {
+       this.setChanged();
+       s = "";
+       for (int i = 0; i < 200; i++)
+         s += String.valueOf(i);
+       this.notifyObservers(s);
+     }
+   }
+ 
+   HashMap map = new HashMap();
+   
+   public void update(Observable o, Object obj) 
+   {
+     map.put(o, obj);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/PR19921.java gcc-4.0.0/libjava/testsuite/libjava.lang/PR19921.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/PR19921.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/PR19921.java	Mon Feb 14 20:56:11 2005
***************
*** 0 ****
--- 1,11 ----
+ interface I {
+     void f(Object x);
+ }
+ 
+ class PR19921 {
+     static void g(I i) {
+       // gcj used to create invalid bytecode for this.
+       i.f(new Object[1][1]);
+     }
+   public static void main(String[] args) { }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/PR20056.java gcc-4.0.0/libjava/testsuite/libjava.lang/PR20056.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/PR20056.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/PR20056.java	Sat Feb 19 03:57:21 2005
***************
*** 0 ****
--- 1,13 ----
+ public class PR20056 {
+   int x;
+   PR20056(int x) {}
+   PR20056(PR20056 f) {
+     // The verifier rejected the generated code in this case.
+     this(f.x = 0);
+   }
+ 
+   public static void main(String[] args)
+   {
+     System.out.println("maude");
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/PR20056.out gcc-4.0.0/libjava/testsuite/libjava.lang/PR20056.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/PR20056.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/PR20056.out	Sat Feb 19 03:57:21 2005
***************
*** 0 ****
--- 1 ----
+ maude
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_1.java gcc-4.0.0/libjava/testsuite/libjava.lang/Process_1.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_1.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_1.java	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1,41 ----
+ // Create a process and read from its standard output.
+ //
+ import java.io.BufferedReader;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ 
+ 
+ public class Process_1
+ {
+   public static void main(String[] args)
+   {
+     try
+       {
+ 	Runtime r = Runtime.getRuntime();
+ 	String s = "Hello World";
+ 	String[] a = { "echo", s };
+ 	Process p = r.exec(a);
+ 	InputStream is = p.getInputStream();
+ 	InputStreamReader isr = new InputStreamReader(is);
+ 	BufferedReader br = new BufferedReader(isr);
+ 	String result = br.readLine();
+ 	if (! s.equals(result))
+ 	  {
+ 	    System.out.println("bad 1");
+ 	    return;
+ 	  }
+ 	result = br.readLine();
+ 	if (result != null)
+ 	  {
+ 	    System.out.println("bad 2");
+ 	    return;
+ 	  }
+ 	int c = p.waitFor();
+ 	System.out.println(c == 0 ? "ok" : "bad 3");
+       }
+     catch (Exception ex)
+       {
+ 	System.out.println(ex.toString());
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_1.out gcc-4.0.0/libjava/testsuite/libjava.lang/Process_1.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_1.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_1.out	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1 ----
+ ok
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_2.java gcc-4.0.0/libjava/testsuite/libjava.lang/Process_2.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_2.java	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1,40 ----
+ // Create a process and read from its standard error.
+ import java.io.BufferedReader;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ 
+ 
+ public class Process_2
+ {
+   public static void main(String[] args)
+   {
+     try
+       {
+ 	Runtime r = Runtime.getRuntime();
+ 	String s = "Hello World";
+ 	String[] a = { "sh", "-c", "echo " + s + " >&2" };
+ 	Process p = r.exec(a);
+ 	InputStream is = p.getErrorStream();
+ 	InputStreamReader isr = new InputStreamReader(is);
+ 	BufferedReader br = new BufferedReader(isr);
+ 	String result = br.readLine();
+ 	if (! s.equals(result))
+ 	  {
+ 	    System.out.println("bad 1");
+ 	    return;
+ 	  }
+ 	result = br.readLine();
+ 	if (result != null)
+ 	  {
+ 	    System.out.println("bad 2");
+ 	    return;
+ 	  }
+ 	int c = p.waitFor();
+ 	System.out.println(c == 0 ? "ok" : "bad 3");
+       }
+     catch (Exception ex)
+       {
+ 	System.out.println(ex.toString());
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_2.out gcc-4.0.0/libjava/testsuite/libjava.lang/Process_2.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_2.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_2.out	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1 ----
+ ok
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_3.java gcc-4.0.0/libjava/testsuite/libjava.lang/Process_3.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_3.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_3.java	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1,72 ----
+ // Create a process and pipe data through it.  waitFor() the process
+ // in a different thread than the one that created it.
+ import java.io.BufferedReader;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.OutputStream;
+ import java.io.PrintStream;
+ 
+ 
+ public class Process_3 implements Runnable
+ {
+   Process p;
+ 
+   public void run()
+   {
+     try
+       {
+ 	Runtime r = Runtime.getRuntime();
+ 	String[] a = { "sed", "-e", "s/Hello/Goodbye/" };
+ 	synchronized (this)
+ 	  {
+ 	    p = r.exec(a);
+ 	    this.notifyAll();
+ 	  }
+ 	OutputStream os = p.getOutputStream();
+ 	PrintStream ps = new PrintStream(os);
+ 	ps.println("Hello World");
+ 	ps.close();
+       }
+     catch (Exception ex)
+       {
+ 	System.out.println(ex.toString());
+       }
+   }
+ 
+   public static void main(String[] args)
+   {
+     try
+       {
+ 	Process_3 p3 = new Process_3();
+ 	Thread t = new Thread(p3);
+ 	t.start();
+ 	synchronized (p3)
+ 	  {
+ 	    while (p3.p == null)
+ 	      p3.wait();
+ 	  }
+ 
+ 	InputStream is = p3.p.getInputStream();
+ 	InputStreamReader isr = new InputStreamReader(is);
+ 	BufferedReader br = new BufferedReader(isr);
+ 	String result = br.readLine();
+ 	if (! "Goodbye World".equals(result))
+ 	  {
+ 	    System.out.println("bad 1");
+ 	    return;
+ 	  }
+ 	result = br.readLine();
+ 	if (result != null)
+ 	  {
+ 	    System.out.println("bad 2");
+ 	    return;
+ 	  }
+ 	int c = p3.p.waitFor();
+ 	System.out.println(c == 0 ? "ok" : "bad 3");
+       }
+     catch (Exception ex)
+       {
+ 	System.out.println(ex.toString());
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_3.out gcc-4.0.0/libjava/testsuite/libjava.lang/Process_3.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_3.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_3.out	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1 ----
+ ok
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_4.java gcc-4.0.0/libjava/testsuite/libjava.lang/Process_4.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_4.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_4.java	Mon Jan  3 19:13:12 2005
***************
*** 0 ****
--- 1,20 ----
+ // Create a process and verify failure exit code.
+ public class Process_4
+ {
+   public static void main(String[] args)
+   {
+     try
+       {
+ 	Runtime r = Runtime.getRuntime();
+ 	String[] a = { "false" };
+ 	Process p = r.exec(a);
+ 	int c = p.waitFor();
+ 	// Solaris' false doesn't return 1.
+ 	System.out.println(c != 0 ? "ok" : "bad");
+       }
+     catch (Exception ex)
+       {
+ 	System.out.println(ex.toString());
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_4.out gcc-4.0.0/libjava/testsuite/libjava.lang/Process_4.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_4.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_4.out	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1 ----
+ ok
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_5.java gcc-4.0.0/libjava/testsuite/libjava.lang/Process_5.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_5.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_5.java	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1,43 ----
+ // Create a long running process and verify that the exitValue is not
+ // immediately available.  Then destroy() it and verify that it
+ // terminates quickly with a non-zero exitValue.
+ public class Process_5
+ {
+   public static void main(String[] args)
+   {
+     try
+       {
+ 	int c;
+ 	long startTime = System.currentTimeMillis();
+ 	Runtime r = Runtime.getRuntime();
+ 	String[] a = { "sleep", "120" };
+ 	Process p = r.exec(a);
+ 
+ 	try
+ 	  {
+ 	    c = p.exitValue();
+ 	    System.out.println("bad 1");
+ 	    return;
+ 	  }
+ 	catch (IllegalThreadStateException itse)
+ 	  {
+ 	    // Ignore as this is good here.
+ 	  }
+ 
+ 	p.destroy();
+ 
+ 	c = p.waitFor();
+ 
+ 	long endTime = System.currentTimeMillis();
+ 
+ 	if (endTime - startTime > 110000L)
+ 	  System.out.println("bad 2");
+ 
+ 	System.out.println(c != 0 ? "ok" : "bad 3");
+       }
+     catch (Exception ex)
+       {
+ 	System.out.println(ex.toString());
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_5.out gcc-4.0.0/libjava/testsuite/libjava.lang/Process_5.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_5.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_5.out	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1 ----
+ ok
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_6.java gcc-4.0.0/libjava/testsuite/libjava.lang/Process_6.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_6.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_6.java	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1,31 ----
+ // Create a running process for a non existent executable.
+ // Verify that IOException is thrown.
+ import java.io.IOException;
+ 
+ 
+ public class Process_6
+ {
+   public static void main(String[] args)
+   {
+     try
+       {
+ 	int c;
+ 	Runtime r = Runtime.getRuntime();
+ 	String[] a = { "blablabla_failure" };
+ 
+ 	try
+ 	  {
+ 	    Process p = r.exec(a);
+ 	    System.out.println("bad");
+ 	  }
+ 	catch (IOException ioe)
+ 	  {
+ 	    System.out.println("ok");
+ 	  }
+       }
+     catch (Exception ex)
+       {
+ 	System.out.println(ex.toString());
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Process_6.out gcc-4.0.0/libjava/testsuite/libjava.lang/Process_6.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Process_6.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Process_6.out	Thu Aug 12 16:24:56 2004
***************
*** 0 ****
--- 1 ----
+ ok
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Serialization.java gcc-4.0.0/libjava/testsuite/libjava.lang/Serialization.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Serialization.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Serialization.java	Fri Jul 23 21:46:09 2004
***************
*** 0 ****
--- 1,32 ----
+ import java.io.*;
+ import java.util.*;
+ 
+ public class Serialization
+ {
+   public static void main(String[] args) 
+     throws IOException, ClassNotFoundException
+   {    
+     File f = new File("test.ser");
+     ObjectOutputStream objStream = 
+       new ObjectOutputStream(new FileOutputStream(f));
+     objStream.writeInt(8);
+     objStream.writeObject(new Integer(99));
+     List l = new LinkedList();
+     l.add(new Integer(1));
+     l.add(new Short((short) 7));
+     l.add(new Float(9.95));
+     l.add(new Long(-900000000000001l));
+     l.add(new Double(-3.14159));
+     l.add(new Character('X'));
+     l.add(new Byte((byte) 'z'));
+     objStream.writeObject(l);
+     objStream.close();
+     
+     ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
+     System.out.println (ois.readInt());
+     System.out.println (ois.readObject());
+     System.out.println (ois.readObject());
+     ois.close();
+     f.delete();
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Serialization.out gcc-4.0.0/libjava/testsuite/libjava.lang/Serialization.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Serialization.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Serialization.out	Fri Jul 23 21:46:09 2004
***************
*** 0 ****
--- 1,3 ----
+ 8
+ 99
+ [1, 7, 9.95, -900000000000001, -3.14159, X, 122]
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/TLtest.java gcc-4.0.0/libjava/testsuite/libjava.lang/TLtest.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/TLtest.java	Wed Jul 11 00:47:37 2001
--- gcc-4.0.0/libjava/testsuite/libjava.lang/TLtest.java	Wed Jul 28 02:44:06 2004
*************** class ThreadTest extends Thread {
*** 46,52 ****
  	    d.set (Integer.toString (value));
  
  	    try {
! 		sleep((int)(Math.random() * 500));
  	    } catch (InterruptedException e) {}
  	}
  
--- 46,52 ----
  	    d.set (Integer.toString (value));
  
  	    try {
! 		sleep((int)((Math.random() * 20)));
  	    } catch (InterruptedException e) {}
  	}
  
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Alive.java gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Alive.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Alive.java	Thu Mar 23 12:35:44 2000
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Alive.java	Wed Jul 28 02:44:06 2004
***************
*** 1,6 ****
  // Test the status of the isAlive() flag before, during, and after thread 
  // execution. Check that thread's threadgroup is null after thread exits.
- // Origin: Bryce McKinlay <bryce@albatross.co.nz>
  
  public class Thread_Alive implements Runnable
  {
--- 1,5 ----
*************** public class Thread_Alive implements Run
*** 12,18 ****
      t.start();
      System.out.println(t.isAlive());
  
!     Thread.sleep(100);
      
      synchronized (ta)
      {
--- 11,17 ----
      t.start();
      System.out.println(t.isAlive());
  
!     Thread.sleep(50);
      
      synchronized (ta)
      {
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_HoldsLock.java gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_HoldsLock.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_HoldsLock.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_HoldsLock.java	Wed Jul 28 02:44:06 2004
***************
*** 0 ****
--- 1,27 ----
+ // Test that Thread.holdsLock() works.
+ 
+ class Lock {}
+ 
+ public class Thread_HoldsLock
+ {
+   static Lock lock = new Lock();
+   
+   public static void main(String args[]) throws InterruptedException
+   {
+     Thread_HoldsLock thl = new Thread_HoldsLock();
+     
+     thl.check();
+     synchronized (lock)
+       {
+         thl.check();
+       }
+     thl.check();
+   }
+   
+   public void check()
+   {
+     Thread this_thread = Thread.currentThread();
+     System.out.println(this_thread.holdsLock(lock));
+   }
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_HoldsLock.out gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_HoldsLock.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_HoldsLock.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_HoldsLock.out	Tue Jul 27 22:04:36 2004
***************
*** 0 ****
--- 1,3 ----
+ false
+ true
+ false
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Interrupt.java gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Interrupt.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Interrupt.java	Fri Mar 22 11:18:03 2002
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Interrupt.java	Wed Jul 28 02:44:06 2004
***************
*** 1,11 ****
  // Test interrupt() behaviour on a thread in wait(), sleep(), and spinning 
  // in a loop.
- // Origin: Bryce McKinlay <bryce@albatross.co.nz>
  
! class Waiter extends Thread
  {
    public synchronized void run()
    {
      System.out.println ("wait()");
      try
      {
--- 1,21 ----
  // Test interrupt() behaviour on a thread in wait(), sleep(), and spinning 
  // in a loop.
  
! class ThreadBase extends Thread
! {
!   boolean ready = false;
!   
!   synchronized void ready()
!   {
!     ready = true;
!   }
! }
! 
! class Waiter extends ThreadBase
  {
    public synchronized void run()
    {
+     super.ready();
      System.out.println ("wait()");
      try
      {
*************** class Waiter extends Thread
*** 22,35 ****
    }
  }
  
! class Sleeper extends Thread
  {
    public void run()
    {
      System.out.println ("sleep()");
      try
      {
!       sleep(2000);
        System.out.println("Error: sleep() completed normally.");
      }
      catch (InterruptedException x)
--- 32,46 ----
    }
  }
  
! class Sleeper extends ThreadBase
  {
    public void run()
    {
+     super.ready();
      System.out.println ("sleep()");
      try
      {
!       sleep(5000);
        System.out.println("Error: sleep() completed normally.");
      }
      catch (InterruptedException x)
*************** class Sleeper extends Thread
*** 42,81 ****
    }
  }
  
! class Looper extends Thread
  {
-   // Return the number of Thread.yield()s we can do in 500ms.
-   static long calibrate ()
-   {
-     long i = 1;
- 
-     for (int tries = 0; tries < 40; tries++)
-       {
- 	long t = System.currentTimeMillis();
- 	for (long n = 0; n < i; n++)
- 	  Thread.yield();
- 	long t_prime = System.currentTimeMillis();
- 	if (t_prime - t > 500)
- 	  return i;
- 	i *= 2;
-       }
-     // We have no system clock.  Give up.
-     throw new RuntimeException ("We have no system clock.");
-   }
- 
-   static long yields = calibrate ();
- 
    public void run()
    {
      System.out.println ("Busy waiting");
  
      int count = 0;
!     for (long i=0; i < yields; i++)
        {
          Thread.yield();
- 	count += 5;
  	if (isInterrupted ())
  	  break;
        }
      synchronized (this)
      {  
--- 53,75 ----
    }
  }
  
! class Looper extends ThreadBase
  {
    public void run()
    {
+     super.ready();
      System.out.println ("Busy waiting");
  
      int count = 0;
!     long start = System.currentTimeMillis();
!     while (true)
        {
          Thread.yield();
  	if (isInterrupted ())
  	  break;
+ 	long now = System.currentTimeMillis();	
+ 	if ((now - start) > 5000)
+ 	  break;
        }
      synchronized (this)
      {  
*************** class Looper extends Thread
*** 91,100 ****
    }
  }
  
! class Joiner extends Thread
  {
    public void run()
    {
      System.out.println("join()");
      try
      {
--- 85,95 ----
    }
  }
  
! class Joiner extends ThreadBase
  {
    public void run()
    {
+     super.ready();
      System.out.println("join()");
      try
      {
*************** public class Thread_Interrupt
*** 133,143 ****
      sleep_and_interrupt (j);
    }
    
!   public static void sleep_and_interrupt(Thread t)
    {
      try
      {
!       Thread.sleep (250);
        t.interrupt ();
        long t1 = System.currentTimeMillis();
        t.join (5000);
--- 128,144 ----
      sleep_and_interrupt (j);
    }
    
!   public static void sleep_and_interrupt(ThreadBase t)
    {
      try
      {
!       synchronized (t)
!         {
! 	  while (!t.ready)
! 	    t.wait(10);
! 	}
!     
!       Thread.sleep (50);
        t.interrupt ();
        long t1 = System.currentTimeMillis();
        t.join (5000);
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Join.java gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Join.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Join.java	Thu Mar 23 12:35:44 2000
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Join.java	Wed Jul 28 02:44:06 2004
***************
*** 1,5 ****
  // Many threads join a single thread.
- // Origin: Bryce McKinlay <bryce@albatross.co.nz>
  
  class Sleeper implements Runnable
  {
--- 1,4 ----
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Monitor.java gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Monitor.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Monitor.java	Thu Mar 23 12:35:44 2000
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Monitor.java	Wed Jul 28 02:44:06 2004
***************
*** 1,5 ****
  // Test that monitor locks work and are recursive.
- // Origin: Bryce McKinlay <bryce@albatross.co.nz>
  
  class T implements Runnable
  {
--- 1,4 ----
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Sleep.java gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Sleep.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Sleep.java	Thu Mar 23 12:35:44 2000
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Sleep.java	Wed Jul 28 02:44:06 2004
***************
*** 1,5 ****
  // Test that Thread.sleep() works.
- // Origin: Bryce McKinlay <bryce@albatross.co.nz>
  
  public class Thread_Sleep
  {
--- 1,4 ----
*************** public class Thread_Sleep
*** 9,17 ****
      {
        long start = System.currentTimeMillis();
        System.out.println("sleeping");
!       Thread.sleep(1000);
        long end = System.currentTimeMillis();
!       if ((end - start) > 1100 || (end - start) < 990)
          System.out.println ("failed");
        else
  	System.out.println("ok");
--- 8,16 ----
      {
        long start = System.currentTimeMillis();
        System.out.println("sleeping");
!       Thread.sleep(50);
        long end = System.currentTimeMillis();
!       if ((end - start) < 50)
          System.out.println ("failed");
        else
  	System.out.println("ok");
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Wait.java gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Wait.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Wait.java	Wed Oct 31 00:48:17 2001
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Wait.java	Wed Jul 28 02:44:06 2004
***************
*** 1,5 ****
  // Test basic thread creation and wait/notify functionality.
- // Origin: Bryce McKinlay <bryce@albatross.co.nz>
  
  public class Thread_Wait implements Runnable
  {
--- 1,4 ----
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Wait_2.java gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Wait_2.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Wait_2.java	Thu Mar 23 12:35:44 2000
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Wait_2.java	Wed Jul 28 02:44:06 2004
***************
*** 1,6 ****
  // Create many threads waiting on a monitor. Interrupt some of them. Do the 
  // others wake up correctly with notify() and/or notifyAll()?
- // Origin: Bryce McKinlay <bryce@albatross.co.nz>
  
  import java.util.Vector;
  
--- 1,5 ----
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java	Thu Mar 23 12:35:44 2000
--- gcc-4.0.0/libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java	Wed Jul 28 02:44:06 2004
***************
*** 1,6 ****
  // Create two threads waiting on a monitor. Interrupt one of them. Does the 
  // other wake up correctly?
- // Origin: Bryce McKinlay <bryce@albatross.co.nz>
  
  class Waiter extends Thread
  {
--- 1,5 ----
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/assign2.java gcc-4.0.0/libjava/testsuite/libjava.lang/assign2.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/assign2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/assign2.java	Thu Nov 25 03:47:08 2004
***************
*** 0 ****
--- 1,21 ----
+ // Test for an array assignment bug we've had.
+ 
+ public class assign2
+ {
+   public static Object[][] c () { return new Long[5][5]; }
+ 
+   public static Object[] d () { return new Integer[3]; }
+ 
+   public static void main(String[] args)
+   {
+     try
+       {
+ 	Object[][] x = c();
+ 	x[0] = d();
+       }
+     catch (ArrayStoreException _)
+       {
+ 	System.out.println("good");
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/assign2.out gcc-4.0.0/libjava/testsuite/libjava.lang/assign2.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/assign2.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/assign2.out	Thu Nov 25 03:47:08 2004
***************
*** 0 ****
--- 1 ----
+ good
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/bytearray.java gcc-4.0.0/libjava/testsuite/libjava.lang/bytearray.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/bytearray.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/bytearray.java	Wed Apr  6 22:40:52 2005
***************
*** 0 ****
--- 1,10 ----
+ public class bytearray
+ {
+   public static void main (String[] argv) throws Throwable {
+     Class c = Class.forName ("[Ljava.lang.String;");
+     c = Class.forName ("[B");
+     System.out.println (c);
+     c = ClassLoader.getSystemClassLoader().loadClass ("[[Ljava.lang.String;");
+     System.out.println (c);
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/bytearray.out gcc-4.0.0/libjava/testsuite/libjava.lang/bytearray.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/bytearray.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/bytearray.out	Wed Apr  6 22:40:52 2005
***************
*** 0 ****
--- 1,2 ----
+ class [B
+ class [[Ljava.lang.String;
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/err14.java gcc-4.0.0/libjava/testsuite/libjava.lang/err14.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/err14.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/err14.java	Tue Aug 10 14:21:05 2004
***************
*** 0 ****
--- 1,20 ----
+ /* Check for incorrectly aligned byte args.  */
+ 
+ public class err14
+ {
+   protected final String getClearToolCommand(Object a, Object b,
+                                              Object c, Object d, 
+                                              int e, int f, boolean x) 
+   {
+     return x ? "hi" : "byte";
+   }
+   
+   
+   public static void main(String[] args)
+   {
+     System.out.println(new err14().getClearToolCommand(null, null,
+                                                        null, null, 0, 0, false));
+     System.out.println(new err14().getClearToolCommand(null, null,
+                                                        null, null, 0, 0, true));
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/err14.out gcc-4.0.0/libjava/testsuite/libjava.lang/err14.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/err14.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/err14.out	Tue Aug 10 14:21:05 2004
***************
*** 0 ****
--- 1,2 ----
+ byte
+ hi
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/md5test.java gcc-4.0.0/libjava/testsuite/libjava.lang/md5test.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/md5test.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/md5test.java	Tue Oct 12 10:13:39 2004
***************
*** 0 ****
--- 1,63 ----
+ import java.security.*;
+ 
+ class md5test {
+ 
+ 
+     // gnu-crypto/source/gnu/testlet/gnu/crypto/hash/TestOfMD5.java
+ 
+     public static void main(String[] argv) {
+ 	String[] strings = {
+ 	    "a",
+ 	    "abc",
+ 	    "message digest",
+ 	    "abcdefghijklmnopqrstuvwxyz",
+ 	    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
+ 	    "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+ 	};
+ 
+ 	String[] expected = {
+ 	    "0CC175B9C0F1B6A831C399E269772661",
+ 	    "900150983CD24FB0D6963F7D28E17F72",
+ 	    "F96B697D7CB7938D525A2F31AAF161D0",
+ 	    "C3FCD3D76192E4007DFB496CCA67E13B",
+ 	    "D174AB98D277D9F5A5611C2C9F419D9F",
+ 	    "57EDF4A22BE3C955AC49DA2E2107B67A"
+ 	};
+ 
+ 	for (int i = 0; i < strings.length; i++)
+ 	    testString(strings[i], expected[i]);
+ 
+     }
+ 
+     public static void testString(String string, String expected) {
+ 
+ 	MessageDigest md=null;
+ 	try {
+ 	    md = MessageDigest.getInstance("MD5");
+ 	    md.update(string.getBytes(), 0, string.length());
+ 	    String result = toString(md.digest());
+ 	    System.out.println(expected);
+ 	    System.out.println(result);
+ 	    if (!expected.equals(result))
+ 		System.out.println("NOT EQUAL!");
+ 	} catch (Exception x) {
+ 	    x.printStackTrace();
+ 	}
+     }
+ 
+     public static String toString(byte[] ba) {
+ 	return toString(ba, 0, ba.length);
+     }
+     public static final String toString(byte[] ba, int offset, int length) {
+ 	char[] buf = new char[length * 2];
+ 	for (int i = 0, j = 0, k; i < length; ) {
+ 	    k = ba[offset + i++];
+ 	    buf[j++] = HEX_DIGITS[(k >>> 4) & 0x0F];
+ 	    buf[j++] = HEX_DIGITS[ k        & 0x0F];
+ 	}
+ 	return new String(buf);
+     }
+ 
+     private static final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/md5test.out gcc-4.0.0/libjava/testsuite/libjava.lang/md5test.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/md5test.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/md5test.out	Tue Oct 12 10:13:39 2004
***************
*** 0 ****
--- 1,12 ----
+ 0CC175B9C0F1B6A831C399E269772661
+ 0CC175B9C0F1B6A831C399E269772661
+ 900150983CD24FB0D6963F7D28E17F72
+ 900150983CD24FB0D6963F7D28E17F72
+ F96B697D7CB7938D525A2F31AAF161D0
+ F96B697D7CB7938D525A2F31AAF161D0
+ C3FCD3D76192E4007DFB496CCA67E13B
+ C3FCD3D76192E4007DFB496CCA67E13B
+ D174AB98D277D9F5A5611C2C9F419D9F
+ D174AB98D277D9F5A5611C2C9F419D9F
+ 57EDF4A22BE3C955AC49DA2E2107B67A
+ 57EDF4A22BE3C955AC49DA2E2107B67A
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107.java gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107.java	Fri Jan 23 02:49:56 2004
***************
*** 0 ****
--- 1,25 ----
+ class pr13107
+ {
+   public static void main(String[] args)
+   {
+     for (int i = 0; i < 1; i++) {
+       String s = "A";
+ 
+       if (s == "A")
+         continue;
+       
+       try{
+ 	try{
+           System.out.println(s);
+ 	}
+ 	finally{
+ 	  if (s != "A")
+ 	    throw new Error();
+ 	}
+       }
+       catch(Exception e){
+ 	s = "B";
+       }
+     }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_2.java gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_2.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_2.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_2.java	Fri Jan 23 02:49:57 2004
***************
*** 0 ****
--- 1,19 ----
+ public class pr13107_2
+ {
+   public static int foo (boolean b)
+   {
+     int i;
+     try {
+ 	if (b) return 1;
+ 	i= 2;
+       }
+     finally {
+       if (b) i = 3;
+     }
+     return i;
+   }
+ 
+   public static void main(String[] args)
+   {
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_2.xfail gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_2.xfail
*** gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_2.xfail	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_2.xfail	Fri Jan 23 02:49:57 2004
***************
*** 0 ****
--- 1 ----
+ xfail-byte
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_3.java gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_3.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_3.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_3.java	Fri Jan 23 02:49:57 2004
***************
*** 0 ****
--- 1,16 ----
+ public class pr13107_3
+ {
+   public static void main(String[] args)
+   {
+     for (int i = 0; i < 1; i++)
+       {
+ 	try {
+ 	  System.out.println(i);
+ 	}
+ 	finally {
+ 	  if (i == 3)
+ 	    continue;
+ 	}
+       }
+   }
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_3.out gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_3.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_3.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_3.out	Fri Jan 23 02:49:57 2004
***************
*** 0 ****
--- 1 ----
+ 0
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_3.xfail gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_3.xfail
*** gcc-3.4.3/libjava/testsuite/libjava.lang/pr13107_3.xfail	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/pr13107_3.xfail	Fri Jan 23 02:49:57 2004
***************
*** 0 ****
--- 1 ----
+ xfail-byte
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/pr16789.java gcc-4.0.0/libjava/testsuite/libjava.lang/pr16789.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/pr16789.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/pr16789.java	Fri Sep 24 15:41:17 2004
***************
*** 0 ****
--- 1,15 ----
+ // gcj used to generate incorrect bytecode for
+ // staticMethod().staticMethod()
+ public class pr16789
+ {
+   public void foo()
+   {
+     System.out.println(Thread.currentThread().holdsLock(this));
+   }
+ 
+   public static void main(String[] args)
+   {
+     new pr16789().foo();
+   }
+ }
+ 
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/pr16789.out gcc-4.0.0/libjava/testsuite/libjava.lang/pr16789.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/pr16789.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/pr16789.out	Fri Sep 24 15:41:17 2004
***************
*** 0 ****
--- 1 ----
+ false
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/pr179.java gcc-4.0.0/libjava/testsuite/libjava.lang/pr179.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/pr179.java	Tue Mar 21 04:55:43 2000
--- gcc-4.0.0/libjava/testsuite/libjava.lang/pr179.java	Wed Jul 28 02:44:06 2004
***************
*** 4,11 ****
  // Class.isInstance() and Class.isAssignableFrom(), and isAssignableFrom()
  // functionality in the event that an interface argument that is not 
  // implemented by any loaded class is given.
- //
- // Bryce McKinlay <bryce@albatross.co.nz>
  
  class A
  {
--- 4,9 ----
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/shatest.java gcc-4.0.0/libjava/testsuite/libjava.lang/shatest.java
*** gcc-3.4.3/libjava/testsuite/libjava.lang/shatest.java	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/shatest.java	Tue Oct 12 10:13:39 2004
***************
*** 0 ****
--- 1,39 ----
+ import java.security.*;
+ 
+ class shatest {
+ 
+     // gnu-crypto/source/gnu/testlet/gnu/crypto/hash/TestOfSha160.java
+ 
+     public static void main(String[] argv) {
+ 	MessageDigest md=null;
+ 	try {
+ 	    md = MessageDigest.getInstance("SHA-1");
+ 	} catch (Exception e) {
+ 	    e.printStackTrace();
+ 	}
+ 	md.update("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq".getBytes(), 0, 56);
+ 	String exp = "84983E441C3BD26EBAAE4AA1F95129E5E54670F1";
+ 	String result = toString(md.digest());
+ 	System.out.println(exp);
+ 	System.out.println(result);
+ 	if (!exp.equals(result))
+ 	    System.out.println("NOT EQUAL!");
+ 
+     }
+ 
+     public static String toString(byte[] ba) {
+ 	return toString(ba, 0, ba.length);
+     }
+     public static final String toString(byte[] ba, int offset, int length) {
+ 	char[] buf = new char[length * 2];
+ 	for (int i = 0, j = 0, k; i < length; ) {
+ 	    k = ba[offset + i++];
+ 	    buf[j++] = HEX_DIGITS[(k >>> 4) & 0x0F];
+ 	    buf[j++] = HEX_DIGITS[ k        & 0x0F];
+ 	}
+ 	return new String(buf);
+     }
+ 
+     private static final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
+ 
+ }
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.lang/shatest.out gcc-4.0.0/libjava/testsuite/libjava.lang/shatest.out
*** gcc-3.4.3/libjava/testsuite/libjava.lang/shatest.out	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/libjava/testsuite/libjava.lang/shatest.out	Tue Oct 12 10:13:39 2004
***************
*** 0 ****
--- 1,2 ----
+ 84983E441C3BD26EBAAE4AA1F95129E5E54670F1
+ 84983E441C3BD26EBAAE4AA1F95129E5E54670F1
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.loader/loader.exp gcc-4.0.0/libjava/testsuite/libjava.loader/loader.exp
*** gcc-3.4.3/libjava/testsuite/libjava.loader/loader.exp	Fri Dec 13 05:00:14 2002
--- gcc-4.0.0/libjava/testsuite/libjava.loader/loader.exp	Thu Nov 25 03:47:08 2004
***************
*** 1,5 ****
--- 1,15 ----
  # Tests for ClassLoader and native library loader code.
  
+ # Compute the correct name for an object file.
+ # This is an awful hack.
+ proc gcj_object_file_name {compiler base} {
+   verbose "OBJECT: compiler = $compiler"
+   if {[string match *libtool* $compiler]} {
+     return $base.lo
+   }
+   return $base.o
+ }
+ 
  # Do all the work for a single JNI test.  Return 0 on failure.
  proc gcj_loader_test_one {srcfile} {
    global objdir srcdir subdir
*************** proc gcj_loader_test_one {srcfile} {
*** 9,17 ****
    regsub "^.*/(\[^/.\]+)\[.\]\[^/]*$" "$srcfile" "\\1" out
    set executable "${objdir}/$out.exe"
  
!     set errname [file rootname [file tail $srcfile]]
!     set args [libjava_arguments link]
!     lappend args "additional_flags=--main=[file rootname [file tail $srcfile]] $srcdir/$subdir/MyLoader.java $objdir/dummy.o"
    set x [libjava_prune_warnings \
  	     [libjava_tcompile $srcfile "$executable" executable $args]]
  
--- 19,27 ----
    regsub "^.*/(\[^/.\]+)\[.\]\[^/]*$" "$srcfile" "\\1" out
    set executable "${objdir}/$out.exe"
  
!   set errname [file rootname [file tail $srcfile]]
!   set args [libjava_arguments link]
!   lappend args "additional_flags=--main=[file rootname [file tail $srcfile]] $srcdir/$subdir/MyLoader.java $objdir/[gcj_object_file_name $args dummy]"
    set x [libjava_prune_warnings \
  	     [libjava_tcompile $srcfile "$executable" executable $args]]
  
*************** proc gcj_loader_run {} {
*** 47,53 ****
    set args [libjava_arguments compile]
    lappend args "additional_flags=--resource $objdir/dummy.class"
    set x [libjava_prune_warnings \
! 	   [libjava_tcompile "$objdir/dummy.class" "$objdir/dummy.o" object $args]]
  
      if { $x != "" } {
  	verbose "resource compilation failed: $x" 2
--- 57,63 ----
    set args [libjava_arguments compile]
    lappend args "additional_flags=--resource $objdir/dummy.class"
    set x [libjava_prune_warnings \
! 	   [libjava_tcompile "$objdir/dummy.class" "$objdir/[gcj_object_file_name $args dummy]" object $args]]
  
      if { $x != "" } {
  	verbose "resource compilation failed: $x" 2
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.mauve/xfails gcc-4.0.0/libjava/testsuite/libjava.mauve/xfails
*** gcc-3.4.3/libjava/testsuite/libjava.mauve/xfails	Wed Dec 31 10:29:05 2003
--- gcc-4.0.0/libjava/testsuite/libjava.mauve/xfails	Thu Feb 10 05:54:07 2005
***************
*** 1,5 ****
! FAIL: gnu.testlet.java.io.BufferedByteOutputStream.interrupt: single-byte writes (number 3)
! FAIL: gnu.testlet.java.io.BufferedByteOutputStream.interrupt: single-byte writes (number 4)
  FAIL: gnu.testlet.java.io.Utf8Encoding.mojo: Four Byte Range Error (0) (number 1)
  FAIL: gnu.testlet.java.io.Utf8Encoding.mojo: Four Byte Range Error (1) (number 1)
  FAIL: gnu.testlet.java.io.Utf8Encoding.mojo: Five Bytes (0) (number 1)
--- 1,64 ----
! FAIL: gnu.testlet.BinaryCompatibility.BinaryCompatibilityTest: Adding a method to a class (number 1)
! FAIL: gnu.testlet.BinaryCompatibility.BinaryCompatibilityTest: Adding a field to a class (number 1)
! FAIL: gnu.testlet.BinaryCompatibility.BinaryCompatibilityTest: Adding a method to an interface (number 1)
! FAIL: gnu.testlet.BinaryCompatibility.BinaryCompatibilityTest: Deleting a method from a class (number 1)
! FAIL: gnu.testlet.BinaryCompatibility.BinaryCompatibilityTest: Deleting a field from a class (number 1)
! FAIL: gnu.testlet.BinaryCompatibility.BinaryCompatibilityTest: Reordering fields of a class (number 1)
! FAIL: gnu.testlet.BinaryCompatibility.BinaryCompatibilityTest: Reordering methods of a class (number 1)
! FAIL: gnu.testlet.BinaryCompatibility.BinaryCompatibilityTest: Moving a method upward in the class hierarchy (number 1)
! FAIL: gnu.testlet.BinaryCompatibility.BinaryCompatibilityTest: Inserting a new class in the type hierarchy (number 1)
! FAIL: gnu.testlet.java.awt.AWTKeyStroke.getAWTKeyStroke: (String) (number 2)
! FAIL: gnu.testlet.java.awt.AWTKeyStroke.getAWTKeyStroke: (String) (number 3)
! FAIL: gnu.testlet.java.awt.AWTKeyStroke.getAWTKeyStroke: (String) (number 4)
! FAIL: gnu.testlet.java.awt.AWTKeyStroke.getAWTKeyStroke: uncaught exception at "(String)" number 6: java.lang.NullPointerException
! FAIL: gnu.testlet.java.awt.Robot.constructors: uncaught exception: java.lang.Error: not implemented
! FAIL: gnu.testlet.java.awt.Robot.createScreenCapture: uncaught exception: java.lang.Error: not implemented
! FAIL: gnu.testlet.java.awt.Robot.getPixelColor: uncaught exception: java.lang.Error: not implemented
! FAIL: gnu.testlet.java.awt.Robot.keyPress: uncaught exception: java.lang.Error: not implemented
! FAIL: gnu.testlet.java.awt.Robot.keyRelease: uncaught exception: java.lang.Error: not implemented
! FAIL: gnu.testlet.java.awt.Robot.mouseMove: uncaught exception: java.lang.Error: not implemented
! FAIL: gnu.testlet.java.awt.Robot.mousePress: uncaught exception: java.lang.Error: not implemented
! FAIL: gnu.testlet.java.awt.Robot.mouseRelease: uncaught exception: java.lang.Error: not implemented
! FAIL: gnu.testlet.java.awt.Robot.mouseWheel: uncaught exception: java.lang.Error: not implemented
! FAIL: gnu.testlet.java.awt.geom.Arc2D.getEndPoint (number 1)
! FAIL: gnu.testlet.java.awt.geom.Arc2D.getPathIterator (number 8)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.constructors: (int, int, int, int[]) (number 8)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.constructors: (int, int, int, int, int[]) (number 8)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.createSubsetSampleModel (number 7)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.equals (number 1)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.equals (number 2)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.equals (number 5)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.equals (number 7)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.equals (number 9)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.equals (number 11)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.equals (number 13)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.getDataElements: uncaught exception at "(int, int, Object, DataBuffer(Byte))" number 5: java.lang.ArrayStoreException
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.hashCode (number 1)
! FAIL: gnu.testlet.java.awt.image.SinglePixelPackedSampleModel.hashCode (number 2)
! FAIL: Link for gnu.testlet.java.beans.Beans.instantiate_1
! FAIL: gnu.testlet.java.beans.Introspector.getBeanInfo2: MATCH_EXPECTED_METHOD_COUNT (number 1)
! FAIL: gnu.testlet.java.beans.Introspector.getBeanInfo2: EXPECTED_METHOD_AVAILABLE: setSomeStaticValue (number 1)
! FAIL: gnu.testlet.java.beans.Introspector.getBeanInfo2: EXPECTED_METHOD_AVAILABLE: getSomeStaticValue (number 1)
! FAIL: gnu.testlet.java.beans.PropertyDescriptor.constructorTest2: new PropertyDescriptor(prop5) (check bindings) (number 3)
! FAIL: gnu.testlet.java.beans.PropertyDescriptor.constructorTest2: new PropertyDescriptor(prop5) (check bindings) (number 5)
! FAIL: gnu.testlet.java.beans.PropertyDescriptor.constructorTest2: new PropertyDescriptor(prop6) (check bindings) (number 3)
! FAIL: gnu.testlet.java.beans.PropertyDescriptor.constructorTest2: new PropertyDescriptor(prop6) (check bindings) (number 5)
! FAIL: gnu.testlet.java.io.File.jdk11: getCanonicalPath () (number 1)
! FAIL: gnu.testlet.java.io.File.security: createTempFile(2-args) - unexpected exception (number 1)
! FAIL: gnu.testlet.java.io.File.security: File.listRoots() (number 1)
! FAIL: gnu.testlet.java.io.File.security: file.renameTo - unexpected exception (number 1)
! FAIL: gnu.testlet.java.io.File.security: dir.deleteOnExit() - unexpected exception (number 1)
! FAIL: gnu.testlet.java.io.ObjectInputOutput.Deserializable: Wrong exception (number 1)
! FAIL: gnu.testlet.java.io.ObjectInputOutput.Deserializable: Was expecting an InvalidClassException (number 1)
! FAIL: gnu.testlet.java.io.ObjectInputOutput.ExtTest (number 2)
! FAIL: gnu.testlet.java.io.ObjectInputOutput.InputTest: gnu.testlet.java.io.ObjectInputOutput.Test$GetPutField (number 1)
! FAIL: gnu.testlet.java.io.ObjectInputOutput.OutputTest: Serializable: test(str=null, x=0) (number 2)
! FAIL: Link for gnu.testlet.java.io.ObjectInputStream.registerValidation
! FAIL: gnu.testlet.java.io.OutputStreamWriter.jdk11: OutputStreamWriter(writer, encoding) (number 1)
! FAIL: gnu.testlet.java.io.OutputStreamWriter.jdk11: OutputStreamWriter(writer, encoding) // alias (number 1)
! FAIL: gnu.testlet.java.io.PrintWriter.checkError (number 3)
! FAIL: gnu.testlet.java.io.PrintWriter.jdk11: checkError() after close() (number 1)
! FAIL: gnu.testlet.java.io.RandomAccessFile.setLength (number 14)
  FAIL: gnu.testlet.java.io.Utf8Encoding.mojo: Four Byte Range Error (0) (number 1)
  FAIL: gnu.testlet.java.io.Utf8Encoding.mojo: Four Byte Range Error (1) (number 1)
  FAIL: gnu.testlet.java.io.Utf8Encoding.mojo: Five Bytes (0) (number 1)
*************** FAIL: gnu.testlet.java.lang.Character.cl
*** 13,20 ****
  FAIL: gnu.testlet.java.lang.Character.getType (number 11)
  FAIL: gnu.testlet.java.lang.Character.getType (number 20)
  FAIL: gnu.testlet.java.lang.Character.getType (number 22)
! FAIL: gnu.testlet.java.lang.Class.ClassTest: Error: test_getClassLoader failed - 1 (number 1)
! FAIL: gnu.testlet.java.lang.Class.ClassTest: Error: test_getClassLoader failed - 2 (number 1)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 2)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 3)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 5)
--- 72,78 ----
  FAIL: gnu.testlet.java.lang.Character.getType (number 11)
  FAIL: gnu.testlet.java.lang.Character.getType (number 20)
  FAIL: gnu.testlet.java.lang.Character.getType (number 22)
! FAIL: gnu.testlet.java.lang.Class.init (number 14)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 2)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 3)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 5)
*************** FAIL: gnu.testlet.java.lang.Class.reflec
*** 24,143 ****
  FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaredClasses (number 1)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaredClasses (number 2)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaredClasses (number 3)
  FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UTF-16") (number 1)
  FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeBig") (number 1)
  FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeBigUnmarked") (number 1)
  FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeLittle") (number 1)
- FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeLittleUnmarked") (number 1)
  FAIL: gnu.testlet.java.lang.String.getBytes14: String.getBytes("ISO8859_15") (number 1)
! FAIL: gnu.testlet.java.lang.String.getBytes14: String.getBytes("UTF-16BE") (number 1)
! FAIL: gnu.testlet.java.lang.String.getBytes14: String.getBytes("UTF-16LE") (number 1)
! FAIL: gnu.testlet.java.text.AttributedString.Test: Attribute key count (number 1)
! FAIL: gnu.testlet.java.text.DateFormatSymbols.Test: patterns (number 2)
! FAIL: gnu.testlet.java.text.SimpleDateFormat.getAndSet2DigitYearStart: get2DigitYearStart() initial (number 1)
! FAIL: gnu.testlet.java.text.DateFormatSymbols.Test: invalid locale (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: CollationElementIterator (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 0 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 1 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 10 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 11 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 12 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 13 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 2 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 3 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 5 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 6 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 7 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 8 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 9 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 0 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 1 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 10 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 11 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 12 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 13 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 2 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 3 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 5 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 6 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 7 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 8 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 12 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 5 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 7 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 9 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: tertiaryOrder() 10 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 2 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 2 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 4 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 4 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 6 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 6 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 8 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 8 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 10 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 10 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 12 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 12 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 14 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 14 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 16 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 16 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 18 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 18 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 20 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 20 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 22 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 22 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 24 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 24 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 26 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 26 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 28 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 28 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 30 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 30 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 32 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 32 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 34 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 34 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 36 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 36 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 38 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 38 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 40 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 40 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 42 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 42 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 44 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 44 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 46 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 46 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 48 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 48 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 50 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 50 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 52 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 52 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 54 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 54 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 56 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 56 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 58 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 58 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 60 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 60 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 62 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no primary difference 62 test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: wrong number of keys test string #4 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 2 test string #5 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: no tertiary difference2 test string #5 (number 1)
! FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: not tertiary ordered0, 2 test set #0 (number 1)
! FAIL: gnu.testlet.java.net.URLConnection.URLConnectionTest: Error in test_Basics  - 2  should not have raised  Throwable here  (number 1)
! FAIL: gnu.testlet.java.net.URLConnection.URLConnectionTest: Error in test_getHeaderField  - 2  4 header field wrong (number 1)
! FAIL: gnu.testlet.java.net.URL.URLTest: openStream (number 1)
! FAIL: gnu.testlet.java.net.URL.URLTest:  Error in test_toString  - 5  exception should not be thrown here (number 1)
  FAIL: gnu.testlet.java.net.MulticastSocket.MulticastSocketTest: joinGroup() twice. (number 1)
--- 82,605 ----
  FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaredClasses (number 1)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaredClasses (number 2)
  FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaredClasses (number 3)
+ FAIL: gnu.testlet.java.lang.ClassLoader.redefine: normal loading (number 1)
+ FAIL: gnu.testlet.java.lang.Double.parseDouble (number 16)
+ FAIL: gnu.testlet.java.lang.Double.parseDouble (number 19)
+ FAIL: gnu.testlet.java.lang.Double.valueOf (number 16)
+ FAIL: gnu.testlet.java.lang.Double.valueOf (number 19)
+ FAIL: gnu.testlet.java.lang.Float.parseFloat (number 16)
+ FAIL: gnu.testlet.java.lang.Float.parseFloat (number 19)
+ FAIL: gnu.testlet.java.lang.Float.valueOf (number 16)
+ FAIL: gnu.testlet.java.lang.Float.valueOf (number 19)
+ FAIL: gnu.testlet.java.lang.Math.MathTest: Error : test_pow failed - 9 (number 1)
  FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UTF-16") (number 1)
  FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeBig") (number 1)
  FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeBigUnmarked") (number 1)
  FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeLittle") (number 1)
  FAIL: gnu.testlet.java.lang.String.getBytes14: String.getBytes("ISO8859_15") (number 1)
! FAIL: gnu.testlet.java.lang.Thread.contextClassLoader: null is a valid contextClassLoader (number 1)
! FAIL: gnu.testlet.java.lang.Thread.contextClassLoader: New thread inherits null classloader (number 1)
! FAIL: gnu.testlet.java.lang.Thread.contextClassLoader: run with null classloader (number 1)
! FAIL: gnu.testlet.java.lang.Thread.daemon: Can change daemon state on an exitted Thread (number 1)
! FAIL: gnu.testlet.java.lang.Thread.daemon: Daemon status changed when set on an exitted Thread (number 1)
! FAIL: gnu.testlet.java.lang.Thread.security10: Thread.enumerate(Thread[]) (number 1)
! FAIL: gnu.testlet.java.lang.Thread.stop: Unexpected exception during test() (number 1)
! FAIL: gnu.testlet.java.net.DatagramPacket.DatagramPacketOffset: DatagramPacket Offset Test byte[]='Hello Worl..........Hello World 12345' should be='Hello WorlHello WorlHello World 12345' (number 1)
! FAIL: gnu.testlet.java.net.InetAddress.isSiteLocalAddress (number 5)
! FAIL: gnu.testlet.java.net.InetAddress.isSiteLocalAddress (number 6)
! FAIL: gnu.testlet.java.net.InetAddress.isSiteLocalAddress (number 9)
! FAIL: gnu.testlet.java.net.InetAddress.isSiteLocalAddress (number 10)
  FAIL: gnu.testlet.java.net.MulticastSocket.MulticastSocketTest: joinGroup() twice. (number 1)
+ FAIL: Compile gnu/testlet/java/net/ServerSocket/ServerSocketTest.lo for gnu.testlet.java.net.ServerSocket.ServerSocketTest
+ FAIL: gnu.testlet.java.net.Socket.SocketTest: Error : test_Basics failed - 7 exception should not have been thrown. (number 1)
+ FAIL: gnu.testlet.java.net.URI.URITest: g:h (number 4)
+ FAIL: gnu.testlet.java.net.URI.URITest: g:h (number 9)
+ FAIL: gnu.testlet.java.net.URI.URITest: unexpected exception (number 1)
+ FAIL: gnu.testlet.java.net.URI.URITest: ?y (number 4)
+ FAIL: gnu.testlet.java.net.URI.URITest: ?y (number 9)
+ FAIL: gnu.testlet.java.net.URI.URITest: #s (number 4)
+ FAIL: gnu.testlet.java.net.URI.URITest: #s (number 9)
+ FAIL: gnu.testlet.java.net.URI.URITest: #s (number 11)
+ FAIL: gnu.testlet.java.net.URI.URITest: #s (number 14)
+ FAIL: gnu.testlet.java.net.URI.URITest: jrmi://localhost:2000 (number 4)
+ FAIL: gnu.testlet.java.net.URI.URITest: jrmi://localhost:2000 (number 9)
+ FAIL: gnu.testlet.java.net.URL.URLTest:  Error in test_toString  - 5  exception should not be thrown here (number 1)
+ FAIL: gnu.testlet.java.net.URL.URLTest: contextResolution (number 5)
+ FAIL: gnu.testlet.java.net.URL.URLTest: contextResolution (number 6)
+ FAIL: gnu.testlet.java.net.URLConnection.URLConnectionTest: Error in test_getHeaderField  - 2  4 header field wrong (number 1)
+ FAIL: gnu.testlet.java.nio.ByteBuffer.Allocating: mark: mark not invalidated (number 1)
+ FAIL: gnu.testlet.java.nio.ByteBuffer.Allocating: mark: mark not invalidated (number 1)
+ FAIL: gnu.testlet.java.nio.ByteBuffer.Allocating: mark: mark not invalidated (number 1)
+ FAIL: gnu.testlet.java.nio.ByteBuffer.Allocating: mark: mark not invalidated (number 1)
+ FAIL: gnu.testlet.java.nio.ByteBuffer.compact: position after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.ByteBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.ByteBuffer.compact: position after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.ByteBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.CharBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.CharBuffer.compact: position after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.CharBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.DoubleBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.DoubleBuffer.compact: position after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.DoubleBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.FloatBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.FloatBuffer.compact: position after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.FloatBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.IntBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.IntBuffer.compact: position after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.IntBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.LongBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.LongBuffer.compact: position after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.LongBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.ShortBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.ShortBuffer.compact: position after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.ShortBuffer.compact: limit after compact() (number 1)
+ FAIL: gnu.testlet.java.nio.channels.FileChannel.copyIO: Unexpected result: source=abcdefghijklmnopqrstuvwxyz, result=aababcabcdabcdeabcdefabcdef (number 1)
+ FAIL: gnu.testlet.java.nio.channels.FileChannel.manyopen: Unexpected exception at nr 339: java.io.IOException: Too many open files (number 1)
+ FAIL: gnu.testlet.java.nio.charset.Charset.encode: Wrong limit in byte buffer (number 1)
+ FAIL: gnu.testlet.java.nio.charset.Charset.encode: uncaught exception at "Wrong limit in char buffer" number 2: java.lang.IllegalStateException
+ FAIL: gnu.testlet.java.text.DateFormatSymbols.setAmPmStrings (number 1)
+ FAIL: gnu.testlet.java.text.DateFormatSymbols.setEras (number 1)
+ FAIL: gnu.testlet.java.text.DateFormatSymbols.setMonths (number 1)
+ FAIL: gnu.testlet.java.text.DateFormatSymbols.setShortMonths (number 1)
+ FAIL: gnu.testlet.java.text.DateFormatSymbols.setShortWeekdays (number 1)
+ FAIL: gnu.testlet.java.text.DateFormatSymbols.setWeekdays (number 1)
+ FAIL: gnu.testlet.java.text.DateFormatSymbols.setZoneStrings (number 1)
+ FAIL: gnu.testlet.java.text.DecimalFormat.equals (number 1)
+ FAIL: gnu.testlet.java.text.DecimalFormat.equals (number 2)
+ FAIL: gnu.testlet.java.text.DecimalFormat.formatExp: pattern ##.###E0 (number 2)
+ FAIL: gnu.testlet.java.text.DecimalFormatSymbols.getCurrency (number 1)
+ FAIL: gnu.testlet.java.text.MessageFormat.format14: number (number 2)
+ FAIL: gnu.testlet.java.text.MessageFormat.format14: number (number 4)
+ FAIL: gnu.testlet.java.text.MessageFormat.format14: date (number 3)
+ FAIL: gnu.testlet.java.text.MessageFormat.format14: time (number 3)
+ FAIL: gnu.testlet.java.text.MessageFormat.format14: choice (number 1)
+ FAIL: gnu.testlet.java.text.NumberFormat.UK: Double-based fraction formatting with integer number format (0.333). (number 1)
+ FAIL: gnu.testlet.java.text.NumberFormat.UK: Double-based fraction formatting with integer number format (123,456.789). (number 1)
+ FAIL: gnu.testlet.java.text.NumberFormat.UK: Long-based integer formatting with currency number format ($30.00). (number 1)
+ FAIL: gnu.testlet.java.text.NumberFormat.UK: Double-based integer formatting with currency number format ($30.00). (number 1)
+ FAIL: gnu.testlet.java.text.NumberFormat.UK: Double-based fraction formatting with currency number format ($0.333). (number 1)
+ FAIL: gnu.testlet.java.text.NumberFormat.UK: Double-based fraction formatting with currency number format ($123,456.789). (number 1)
+ FAIL: gnu.testlet.java.text.NumberFormat.UK: Long-based integer formatting with percentile number format (30%). (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.Cloning: Cloned symbols (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.Cloning: Cloned 2 digit year start date (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.Localization: uncaught exception at "Non-localized pattern comes back as is with toPattern()." number 2: java.lang.StringIndexOutOfBoundsException: String index out of range: 18
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.applyLocalizedPattern (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.applyLocalizedPattern (number 2)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.applyPattern (number 2)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.constructors: SimpleDateFormat(String) (number 2)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.constructors: SimpleDateFormat(String, DateFormatSymbols) (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.constructors: SimpleDateFormat(String, DateFormatSymbols) (number 5)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.constructors: SimpleDateFormat(String, Locale) (number 3)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.getDateFormatSymbols (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.getDateFormatSymbols (number 2)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: parse pattern MMMM yyyy (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: parse pattern MMMM yyyy (number 2)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.lang.NullPointerException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: parse pattern EEEE MMMM yyyy (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 2)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: parse pattern EEE MMM (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.text.ParseException:  (number 2)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.parse: java.lang.NullPointerException:  (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.regress: DST timezone (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.setDateFormatSymbols (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.setDateFormatSymbols (number 2)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.setDateFormatSymbols (number 3)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.toLocalizedPattern (number 1)
+ FAIL: gnu.testlet.java.text.SimpleDateFormat.toLocalizedPattern (number 2)
+ FAIL: gnu.testlet.java.util.Calendar.set: Simple tests (number 2)
+ FAIL: gnu.testlet.java.util.Calendar.set: setting only some fields (number 3)
+ FAIL: gnu.testlet.java.util.Calendar.set: setting only some fields (number 4)
+ FAIL: gnu.testlet.java.util.Calendar.set: setting only some fields (number 5)
+ FAIL: gnu.testlet.java.util.Calendar.set: setting only some fields (number 6)
+ FAIL: gnu.testlet.java.util.Calendar.set: setting only some fields (number 7)
+ FAIL: gnu.testlet.java.util.Calendar.set: test setting conflicting values of different fields (number 2)
+ FAIL: gnu.testlet.java.util.Calendar.set: test setting conflicting values of different fields (number 3)
+ FAIL: gnu.testlet.java.util.Calendar.set: test setting conflicting values of different fields (number 4)
+ FAIL: gnu.testlet.java.util.Calendar.set: test setting conflicting values of different fields (number 5)
+ FAIL: gnu.testlet.java.util.Calendar.set: Normalization (number 2)
+ FAIL: gnu.testlet.java.util.Calendar.set: Normalization (number 3)
+ FAIL: gnu.testlet.java.util.Currency.Constructors: uncaught exception: java.lang.IllegalArgumentException: The currency code, null, is not supported.
+ FAIL: gnu.testlet.java.util.Currency.France: Euro ISO 4217 currency code retrieval check (FRF). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.France: Euro currency symbol retrieval check (F). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.France: Euro ISO 4217 currency code retrieval check (FRF). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.Germany: Euro ISO 4217 currency code retrieval check (DEM). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.Germany: Euro currency symbol retrieval check (DM). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.Germany: Euro ISO 4217 currency code retrieval check (DEM). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.Italy: Euro ISO 4217 currency code retrieval check (ITL). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.Italy: Euro currency symbol retrieval check (L.). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.Italy: Euro currency fraction digits retrieval check (0). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.Italy: Euro ISO 4217 currency code retrieval check (ITL). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.ReferenceEquality: uncaught exception at "Reference equality for currencies (UK) check." number 2: java.lang.IllegalArgumentException: The currency code, GBP, is not supported.
+ FAIL: gnu.testlet.java.util.Currency.US: Non local currency symbol retrieval check (CAD). (number 1)
+ FAIL: gnu.testlet.java.util.Currency.getInstance (number 1)
+ FAIL: gnu.testlet.java.util.Currency.getInstance (number 3)
+ FAIL: gnu.testlet.java.util.Currency.getInstance (number 4)
+ FAIL: gnu.testlet.java.util.Currency.getInstance (number 5)
+ FAIL: gnu.testlet.java.util.Date.getTimezoneOffset: getTimezoneOffset for zone: GMT (number 1)
+ FAIL: gnu.testlet.java.util.Date.getTimezoneOffset: getTimezoneOffset for zone: GMT (number 2)
+ FAIL: gnu.testlet.java.util.Date.getTimezoneOffset: getTimezoneOffset for zone: Europe/London (number 2)
+ FAIL: gnu.testlet.java.util.Date.range (number 6)
+ FAIL: gnu.testlet.java.util.Date.range (number 7)
+ FAIL: gnu.testlet.java.util.Date.range (number 8)
+ FAIL: gnu.testlet.java.util.Date.range (number 9)
+ FAIL: gnu.testlet.java.util.Date.range (number 10)
+ FAIL: gnu.testlet.java.util.GregorianCalendar.conversion: uncaught exception at "Testing setTimeInMillis(281474976710656) i = 48" number 3: java.lang.IllegalArgumentException: month out of range
+ FAIL: gnu.testlet.java.util.GregorianCalendar.getMinimalDaysInFirstWeek (number 1)
+ FAIL: gnu.testlet.java.util.GregorianCalendar.getMinimalDaysInFirstWeek (number 2)
+ FAIL: gnu.testlet.java.util.GregorianCalendar.getMinimum (number 2)
+ FAIL: gnu.testlet.java.util.GregorianCalendar.getMinimum (number 3)
+ FAIL: gnu.testlet.java.util.GregorianCalendar.getMinimum (number 4)
+ FAIL: gnu.testlet.java.util.SimpleTimeZone.check12 (number 22)
+ FAIL: gnu.testlet.java.util.SimpleTimeZone.check12 (number 23)
+ FAIL: gnu.testlet.java.util.SimpleTimeZone.equals (number 21)
+ FAIL: gnu.testlet.java.util.SimpleTimeZone.getDSTSavings (number 2)
+ FAIL: gnu.testlet.java.util.SimpleTimeZone.hasSameRules (number 19)
+ FAIL: gnu.testlet.java.util.Timer.taskException: still able to schedule tasks (number 1)
+ FAIL: gnu.testlet.java.util.logging.Logger.getLogger (number 9)
+ FAIL: gnu.testlet.java.util.logging.Logger.securityChecks: Logger.getAnonymousLogger() (number 7)
+ FAIL: gnu.testlet.java.util.logging.Logger.securityChecks: Logger.getAnonymousLogger(null) (number 7)
+ FAIL: gnu.testlet.java.util.logging.XMLFormatter.formatMessage (number 2)
+ FAIL: gnu.testlet.java.util.logging.XMLFormatter.formatMessage (number 3)
+ FAIL: gnu.testlet.java.util.logging.XMLFormatter.formatMessage (number 4)
+ FAIL: gnu.testlet.java.util.logging.XMLFormatter.formatMessage (number 5)
+ FAIL: gnu.testlet.java.util.logging.XMLFormatter.formatMessage (number 6)
+ FAIL: gnu.testlet.java.util.zip.ZipFile.DirEntryTest: getEntry("dir/") (number 2)
+ FAIL: gnu.testlet.java.util.zip.ZipFile.newZipFile: non-zipfile gets rejected (number 1)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.add: add(int, Object) (number 5)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.add: add(int, Object) (number 9)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.add: add(int, Object) (number 13)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.add: add(int, Object) (number 18)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.addElement: addElement(Object) (number 3)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.addElement: addElement(Object) (number 4)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.addElement: addElement(Object) (number 7)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.addElement: addElement(Object) (number 8)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.addElement: addElement(Object) (number 11)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.addElement: addElement(Object) (number 12)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.addElement: addElement(Object) (number 15)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.addElement: addElement(Object) (number 16)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.clear: clear() (number 4)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.clear: clear() (number 6)
+ FAIL: Link for gnu.testlet.javax.swing.DefaultListModel.removeAllElements
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.setSize: setSize(int) (number 6)
+ FAIL: gnu.testlet.javax.swing.DefaultListModel.setSize: uncaught exception at "setSize(int)" number 10: java.lang.NullPointerException
+ FAIL: Link for gnu.testlet.javax.swing.JComboBox.MutableTest1
+ FAIL: Link for gnu.testlet.javax.swing.JComboBox.MutableTest2
+ FAIL: Link for gnu.testlet.javax.swing.JComboBox.SimpleSelectionTest
+ FAIL: gnu.testlet.javax.swing.UIDefaults.remove: put with null gave NullPointerException (number 1)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.add: uncaught exception: java.lang.NullPointerException
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.breadthFirstEnumeration: uncaught exception: java.lang.NullPointerException
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.constructors: userObject (number 1)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 2)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 3)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 4)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 5)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 7)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 8)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 9)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 10)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 11)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode (number 12)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.pathFromAncestorEnumeration: rejects invalid arguments (number 1)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.pathFromAncestorEnumeration: rejects invalid arguments (null) (number 1)
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.pathFromAncestorEnumeration: uncaught exception at "rejects invalid arguments (null)" number 2: java.lang.NullPointerException
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.postorderEnumeration: uncaught exception: java.lang.NullPointerException
+ FAIL: gnu.testlet.javax.swing.tree.DefaultMutableTreeNode.preorderEnumeration: uncaught exception: java.lang.NullPointerException
+ FAIL: gnu.testlet.locales.LocaleTest: Locale de_DE (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale de_DE (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale de_DE (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT de_DE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT de_DE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM de_DE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM de_DE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG de_DE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: de_DE (number 6)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: de_DE (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: de_DE (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: de_DE (number 9)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: de_DE (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: de_DE (number 14)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: de_DE (number 15)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: de_DE (number 21)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: de_DE (number 22)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: de_DE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: de_DE (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fr_BE (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fr_BE (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fr_BE (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 2)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 5)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 6)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 9)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 11)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 12)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 14)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 15)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 16)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 17)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 20)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 21)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 22)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 23)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 24)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fr_BE (number 25)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: fr_BE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: fr_BE (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: BEF (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale en_IE (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale en_IE (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale en_IE (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 2)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 4)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 5)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 6)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 9)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 11)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 12)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 14)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 15)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 16)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 17)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 19)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 20)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 21)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 22)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 23)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 24)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_IE (number 25)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: en_IE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: en_IE (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: IEP (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fr_FR (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fr_FR (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fr_FR (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: fr_FR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: fr_FR (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: FRF (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale es_ES (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale es_ES (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale es_ES (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: es_ES (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: es_ES (number 2)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: es_ES (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: ESP (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale pt_PT (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale pt_PT (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale pt_PT (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: pt_PT (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: pt_PT (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: PTE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale it_IT (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale it_IT (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale it_IT (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: it_IT (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: it_IT (number 2)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: it_IT (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: ITL (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale nl_NL (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale nl_NL (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale nl_NL (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT nl_NL (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT nl_NL (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM nl_NL (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM nl_NL (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG nl_NL (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 2)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 5)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 6)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 9)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 11)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 12)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 14)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 15)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 16)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 17)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 20)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 21)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 22)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 23)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 24)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: nl_NL (number 25)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: nl_NL (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: nl_NL (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: NLG (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fr_LU (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fr_LU (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fr_LU (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: fr_LU (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: fr_LU (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: LUF (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale en_GB (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale en_GB (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale en_GB (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT en_GB (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM en_GB (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG en_GB (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM en_GB (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT en_GB (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT en_GB (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM en_GB (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG en_GB (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM en_GB (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_GB (number 6)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_GB (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_GB (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_GB (number 9)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_GB (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_GB (number 14)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_GB (number 15)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_GB (number 21)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_GB (number 22)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: en_GB (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: GBP (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale en_US (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale en_US (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale en_US (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT en_US (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT en_US (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM en_US (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM en_US (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG en_US (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_US (number 14)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_US (number 15)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_US (number 21)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: en_US (number 22)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: en_US (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: USD (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fi_FI (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fi_FI (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale fi_FI (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 2)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 5)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 6)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 9)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 11)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 12)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 14)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 15)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 16)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 17)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 20)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 21)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 22)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 23)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 24)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: fi_FI (number 25)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: fi_FI (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: fi_FI (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: FIM (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale tr_TR (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale tr_TR (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale tr_TR (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 2)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 4)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 5)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 6)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 9)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 11)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 12)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 14)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 15)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 16)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 17)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 19)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 20)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 21)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 22)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 23)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 24)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: tr_TR (number 25)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: tr_TR (number 2)
+ FAIL: gnu.testlet.locales.LocaleTest: Currencies locale: tr_TR (number 3)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: TRL (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale et_EE (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale et_EE (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: Locale et_EE (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.SHORT et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.MEDIUM et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.LONG et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: DateFormat.DEFAULT == DateFormat.MEDIUM et_EE (number 1)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: et_EE (number 6)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: et_EE (number 7)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: et_EE (number 8)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: et_EE (number 9)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: et_EE (number 10)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: et_EE (number 14)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: et_EE (number 15)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: et_EE (number 21)
+ FAIL: gnu.testlet.locales.LocaleTest: numberformats locale: et_EE (number 22)
+ FAIL: gnu.testlet.locales.LocaleTest: Currency code not supported: EEK (number 1)
diff -Nrcpad gcc-3.4.3/libjava/testsuite/libjava.verify/verify.exp gcc-4.0.0/libjava/testsuite/libjava.verify/verify.exp
*** gcc-3.4.3/libjava/testsuite/libjava.verify/verify.exp	Sat Jul 19 15:43:20 2003
--- gcc-4.0.0/libjava/testsuite/libjava.verify/verify.exp	Tue Dec 21 01:01:08 2004
*************** proc gcj_verify_run {} {
*** 61,69 ****
  
    set gij [libjava_find_gij] 
    set interpret 1
!   # libjava_find_gij will return `gij' if it couldn't find the
    # program; in this case we want to skip the test.
!   if {$INTERPRETER != "yes" || $gij == "gij"} {
      set interpret 0
    }
  
--- 61,69 ----
  
    set gij [libjava_find_gij] 
    set interpret 1
!   # libjava_find_gij will return "" if it couldn't find the
    # program; in this case we want to skip the test.
!   if {$INTERPRETER != "yes" || $gij == ""} {
      set interpret 0
    }
  
diff -Nrcpad gcc-3.4.3/libjava/verify.cc gcc-4.0.0/libjava/verify.cc
*** gcc-3.4.3/libjava/verify.cc	Fri Mar 19 17:40:03 2004
--- gcc-4.0.0/libjava/verify.cc	Tue Feb 22 18:14:04 2005
***************
*** 1,6 ****
  // verify.cc - verify bytecode
  
! /* Copyright (C) 2001, 2002, 2003  Free Software Foundation
  
     This file is part of libgcj.
  
--- 1,6 ----
  // verify.cc - verify bytecode
  
! /* Copyright (C) 2001, 2002, 2003, 2004, 2005  Free Software Foundation
  
     This file is part of libgcj.
  
*************** details.  */
*** 37,47 ****
  #endif /* VERIFY_DEBUG */
  
  
  static void debug_print (const char *fmt, ...)
    __attribute__ ((format (printf, 1, 2)));
  
  static inline void
! debug_print (const char *fmt, ...)
  {
  #ifdef VERIFY_DEBUG
    va_list ap;
--- 37,51 ----
  #endif /* VERIFY_DEBUG */
  
  
+ // This is used to mark states which are not scheduled for
+ // verification.
+ #define INVALID_STATE ((state *) -1)
+ 
  static void debug_print (const char *fmt, ...)
    __attribute__ ((format (printf, 1, 2)));
  
  static inline void
! debug_print (MAYBE_UNUSED const char *fmt, ...)
  {
  #ifdef VERIFY_DEBUG
    va_list ap;
*************** debug_print (const char *fmt, ...)
*** 51,56 ****
--- 55,134 ----
  #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
+ // of each opcode as it is encountered.  For most opcodes, this is a
+ // straightforward operation.
+ //
+ // This verifier does not do type merging.  It used to, but this
+ // results in difficulty verifying some relatively simple code
+ // involving interfaces, and it pushed some verification work into the
+ // interpreter.
+ //
+ // Instead of merging reference types, when we reach a point where two
+ // flows of control merge, we simply keep the union of reference types
+ // from each branch.  Then, when we need to verify a fact about a
+ // reference on the stack (e.g., that it is compatible with the
+ // argument type of a method), we check to ensure that all possible
+ // types satisfy the requirement.
+ //
+ // Another area this verifier differs from the norm is in its handling
+ // of subroutines.  The JVM specification has some confusing things to
+ // say about subroutines.  For instance, it makes claims about not
+ // allowing subroutines to merge and it rejects recursive subroutines.
+ // For the most part these are red herrings; we used to try to follow
+ // these things but they lead to problems.  For example, the notion of
+ // "being in a subroutine" is not well-defined: is an exception
+ // handler in a subroutine?  If you never execute the `ret' but
+ // instead `goto 1' do you remain in the subroutine?
+ //
+ // For clarity on what is really required for type safety, read
+ // "Simple Verification Technique for Complex Java Bytecode
+ // Subroutines" by Alessandro Coglio.  Among other things this paper
+ // shows that recursive subroutines are not harmful to type safety.
+ // We implement something similar to what he proposes.  Note that this
+ // means that this verifier will accept code that is rejected by some
+ // other verifiers.
+ //
+ // For those not wanting to read the paper, the basic observation is
+ // that we can maintain split states in subroutines.  We maintain one
+ // state for each calling `jsr'.  In other words, we re-verify a
+ // subroutine once for each caller, using the exact types held by the
+ // callers (as opposed to the old approach of merging types and
+ // keeping a bitmap registering what did or did not change).  This
+ // approach lets us continue to verify correctly even when a
+ // subroutine is exited via `goto' or `athrow' and not `ret'.
+ //
+ // In some other areas the JVM specification is (mildly) incorrect,
+ // so we diverge.  For instance, you cannot
+ // violate type safety by allocating an object with `new' and then
+ // failing to initialize it, no matter how one branches or where one
+ // stores the uninitialized reference.  See "Improving the official
+ // specification of Java bytecode verification" by Alessandro Coglio.
+ //
+ // Note that there's no real point in enforcing that padding bytes or
+ // the mystery byte of invokeinterface must be 0, but we do that
+ // regardless.
+ //
+ // The verifier is currently neither completely lazy nor eager when it
+ // comes to loading classes.  It tries to represent types by name when
+ // possible, and then loads them when it needs to verify a fact about
+ // the type.  Checking types by name is valid because we only use
+ // names which come from the current class' constant pool.  Since all
+ // such names are looked up using the same class loader, there is no
+ // danger that we might be fooled into comparing different types with
+ // the same name.
+ //
+ // In the future we plan to allow for a completely lazy mode of
+ // operation, where the verifier will construct a list of type
+ // assertions to be checked later.
+ //
+ // Some test cases for the verifier live in the "verify" module of the
+ // Mauve test suite.  However, some of these are presently
+ // (2004-01-20) believed to be incorrect.  (More precisely the notion
+ // of "correct" is not well-defined, and this verifier differs from
+ // others while remaining type-safe.)  Some other tests live in the
+ // libgcj test suite.
  class _Jv_BytecodeVerifier
  {
  private:
*************** private:
*** 60,70 ****
  
    struct state;
    struct type;
-   struct subr_info;
-   struct subr_entry_info;
    struct linked_utf8;
    struct ref_intersection;
  
    // The current PC.
    int PC;
    // The PC corresponding to the start of the current instruction.
--- 138,153 ----
  
    struct state;
    struct type;
    struct linked_utf8;
    struct ref_intersection;
  
+   template<typename T>
+   struct linked
+   {
+     T *val;
+     linked<T> *next;
+   };
+ 
    // The current PC.
    int PC;
    // The PC corresponding to the start of the current instruction.
*************** private:
*** 73,101 ****
    // The current state of the stack, locals, etc.
    state *current_state;
  
!   // We store the state at branch targets, for merging.  This holds
!   // such states.
!   state **states;
  
!   // We keep a linked list of all the PCs which we must reverify.
!   // The link is done using the PC values.  This is the head of the
!   // list.
!   int next_verify_pc;
  
    // We keep some flags for each instruction.  The values are the
!   // FLAG_* constants defined above.
    char *flags;
  
-   // We need to keep track of which instructions can call a given
-   // subroutine.  FIXME: this is inefficient.  We keep a linked list
-   // of all calling `jsr's at at each jsr target.
-   subr_info **jsr_ptrs;
- 
-   // We keep a linked list of entries which map each `ret' instruction
-   // to its unique subroutine entry point.  We expect that there won't
-   // be many `ret' instructions, so a linked list is ok.
-   subr_entry_info *entry_points;
- 
    // The bytecode itself.
    unsigned char *bytecode;
    // The exceptions.
--- 156,176 ----
    // The current state of the stack, locals, etc.
    state *current_state;
  
!   // At each branch target we keep a linked list of all the states we
!   // can process at that point.  We'll only have multiple states at a
!   // given PC if they both have different return-address types in the
!   // same stack or local slot.  This array is indexed by PC and holds
!   // the list of all such states.
!   linked<state> **states;
  
!   // We keep a linked list of all the states which we must reverify.
!   // This is the head of the list.
!   state *next_verify_state;
  
    // We keep some flags for each instruction.  The values are the
!   // FLAG_* constants defined above.  This is an array indexed by PC.
    char *flags;
  
    // The bytecode itself.
    unsigned char *bytecode;
    // The exceptions.
*************** private:
*** 106,135 ****
    // This method.
    _Jv_InterpMethod *current_method;
  
!   // A linked list of utf8 objects we allocate.  This is really ugly,
!   // but without this our utf8 objects would be collected.
!   linked_utf8 *utf8_list;
  
    // A linked list of all ref_intersection objects we allocate.
    ref_intersection *isect_list;
  
!   struct linked_utf8
!   {
!     _Jv_Utf8Const *val;
!     linked_utf8 *next;
!   };
! 
    _Jv_Utf8Const *make_utf8_const (char *s, int len)
    {
!     _Jv_Utf8Const *val = _Jv_makeUtf8Const (s, len);
!     _Jv_Utf8Const *r = (_Jv_Utf8Const *) _Jv_Malloc (sizeof (_Jv_Utf8Const)
! 						     + val->length
! 						     + 1);
!     r->length = val->length;
!     r->hash = val->hash;
!     memcpy (r->data, val->data, val->length + 1);
! 
!     linked_utf8 *lu = (linked_utf8 *) _Jv_Malloc (sizeof (linked_utf8));
      lu->val = r;
      lu->next = utf8_list;
      utf8_list = lu;
--- 181,201 ----
    // This method.
    _Jv_InterpMethod *current_method;
  
!   // A linked list of utf8 objects we allocate.
!   linked<_Jv_Utf8Const> *utf8_list;
  
    // A linked list of all ref_intersection objects we allocate.
    ref_intersection *isect_list;
  
!   // Create a new Utf-8 constant and return it.  We do this to avoid
!   // having our Utf-8 constants prematurely collected.
    _Jv_Utf8Const *make_utf8_const (char *s, int len)
    {
!     linked<_Jv_Utf8Const> *lu = (linked<_Jv_Utf8Const> *)
!       _Jv_Malloc (sizeof (linked<_Jv_Utf8Const>)
! 		  + _Jv_Utf8Const::space_needed(s, len));
!     _Jv_Utf8Const *r = (_Jv_Utf8Const *) (lu + 1);
!     r->init(s, len);
      lu->val = r;
      lu->next = utf8_list;
      utf8_list = lu;
*************** private:
*** 155,163 ****
      buf->append (JvNewStringLatin1 (" in "));
      buf->append (current_class->getName());
      buf->append ((jchar) ':');
!     buf->append (JvNewStringUTF (method->get_method()->name->data));
      buf->append ((jchar) '(');
!     buf->append (JvNewStringUTF (method->get_method()->signature->data));
      buf->append ((jchar) ')');
  
      buf->append (JvNewStringLatin1 (": "));
--- 221,229 ----
      buf->append (JvNewStringLatin1 (" in "));
      buf->append (current_class->getName());
      buf->append ((jchar) ':');
!     buf->append (method->get_method()->name->toString());
      buf->append ((jchar) '(');
!     buf->append (method->get_method()->signature->toString());
      buf->append ((jchar) ')');
  
      buf->append (JvNewStringLatin1 (": "));
*************** private:
*** 188,200 ****
      // to indicate an unusable value.
      unsuitable_type,
      return_address_type,
      continuation_type,
  
-     // There is an obscure special case which requires us to note when
-     // a local variable has not been used by a subroutine.  See
-     // push_jump_merge for more information.
-     unused_by_subroutine_type,
- 
      // Everything after `reference_type' must be a reference type.
      reference_type,
      null_type,
--- 254,263 ----
      // to indicate an unusable value.
      unsuitable_type,
      return_address_type,
+     // This is the second word of a two-word value, i.e., a double or
+     // a long.
      continuation_type,
  
      // Everything after `reference_type' must be a reference type.
      reference_type,
      null_type,
*************** private:
*** 304,312 ****
        java::lang::ClassLoader *loader
  	= verifier->current_class->getClassLoaderInternal();
        // We might see either kind of name.  Sigh.
!       if (data.name->data[0] == 'L'
! 	  && data.name->data[data.name->length - 1] == ';')
! 	data.klass = _Jv_FindClassFromSignature (data.name->data, loader);
        else
  	data.klass = Class::forName (_Jv_NewStringUtf8Const (data.name),
  				     false, loader);
--- 367,374 ----
        java::lang::ClassLoader *loader
  	= verifier->current_class->getClassLoaderInternal();
        // We might see either kind of name.  Sigh.
!       if (data.name->first() == 'L' && data.name->limit()[-1] == ';')
! 	data.klass = _Jv_FindClassFromSignature (data.name->chars(), loader);
        else
  	data.klass = Class::forName (_Jv_NewStringUtf8Const (data.name),
  				     false, loader);
*************** private:
*** 354,360 ****
        if (is_resolved)
  	return data.klass->isArray ();
        else
! 	return data.name->data[0] == '[';
      }
  
      bool isinterface (_Jv_BytecodeVerifier *verifier)
--- 416,422 ----
        if (is_resolved)
  	return data.klass->isArray ();
        else
! 	return data.name->first() == '[';
      }
  
      bool isinterface (_Jv_BytecodeVerifier *verifier)
*************** private:
*** 395,401 ****
  	}
        else
  	{
! 	  char *p = data.name->data;
  	  while (*p++ == '[')
  	    ++ndims;
  	}
--- 457,463 ----
  	}
        else
  	{
! 	  char *p = data.name->chars();
  	  while (*p++ == '[')
  	    ++ndims;
  	}
*************** private:
*** 491,497 ****
  	      {
  		// We use a recursive call because we also need to
  		// check superinterfaces.
! 		if (is_assignable_from_slow (target, source->interfaces[i]))
  		  return true;
  	      }
  	  }
--- 553,559 ----
  	      {
  		// We use a recursive call because we also need to
  		// check superinterfaces.
! 		if (is_assignable_from_slow (target, source->getInterface (i)))
  		  return true;
  	      }
  	  }
*************** private:
*** 502,529 ****
      return false;
    }
  
-   // This is used to keep track of which `jsr's correspond to a given
-   // jsr target.
-   struct subr_info
-   {
-     // PC of the instruction just after the jsr.
-     int pc;
-     // Link.
-     subr_info *next;
-   };
- 
-   // This is used to keep track of which subroutine entry point
-   // corresponds to which `ret' instruction.
-   struct subr_entry_info
-   {
-     // PC of the subroutine entry point.
-     int pc;
-     // PC of the `ret' instruction.
-     int ret_pc;
-     // Link.
-     subr_entry_info *next;
-   };
- 
    // The `type' class is used to represent a single type in the
    // verifier.
    struct type
--- 564,569 ----
*************** private:
*** 534,548 ****
      // For reference types, the representation of the type.
      ref_intersection *klass;
  
!     // This is used when constructing a new object.  It is the PC of the
      // `new' instruction which created the object.  We use the special
!     // value -2 to mean that this is uninitialized, and the special
!     // value -1 for the case where the current method is itself the
!     // <init> method.
      int pc;
  
      static const int UNINIT = -2;
      static const int SELF = -1;
  
      // Basic constructor.
      type ()
--- 574,596 ----
      // For reference types, the representation of the type.
      ref_intersection *klass;
  
!     // This is used in two situations.
!     //
!     // First, when constructing a new object, it is the PC of the
      // `new' instruction which created the object.  We use the special
!     // value UNINIT to mean that this is uninitialized.  The special
!     // value SELF is used for the case where the current method is
!     // itself the <init> method.  the special value EITHER is used
!     // when we may optionally allow either an uninitialized or
!     // initialized reference to match.
!     //
!     // Second, when the key is return_address_type, this holds the PC
!     // of the instruction following the `jsr'.
      int pc;
  
      static const int UNINIT = -2;
      static const int SELF = -1;
+     static const int EITHER = -3;
  
      // Basic constructor.
      type ()
*************** private:
*** 645,650 ****
--- 693,715 ----
  	}
      }
  
+     // Mark this type as a particular return address.
+     void set_return_address (int npc)
+     {
+       pc = npc;
+     }
+ 
+     // Return true if this type and type OTHER are considered
+     // mergeable for the purposes of state merging.  This is related
+     // to subroutine handling.  For this purpose two types are
+     // considered unmergeable if they are both return-addresses but
+     // have different PCs.
+     bool state_mergeable_p (const type &other) const
+     {
+       return (key != return_address_type
+ 	      || other.key != return_address_type
+ 	      || pc == other.pc);
+     }
  
      // Return true if an object of type K can be assigned to a variable
      // of type *THIS.  Handle various special cases too.  Might modify
*************** private:
*** 672,694 ****
        if (k.klass == NULL)
  	verifier->verify_fail ("programmer error in type::compatible");
  
!       // An initialized type and an uninitialized type are not
!       // compatible.
!       if (isinitialized () != k.isinitialized ())
! 	return false;
! 
!       // Two uninitialized objects are compatible if either:
!       // * The PCs are identical, or
!       // * One PC is UNINIT.
!       if (! isinitialized ())
  	{
! 	  if (pc != k.pc && pc != UNINIT && k.pc != UNINIT)
  	    return false;
  	}
  
        return klass->compatible(k.klass, verifier);
      }
  
      bool isvoid () const
      {
        return key == void_type;
--- 737,787 ----
        if (k.klass == NULL)
  	verifier->verify_fail ("programmer error in type::compatible");
  
!       // Handle the special 'EITHER' case, which is only used in a
!       // special case of 'putfield'.  Note that we only need to handle
!       // this on the LHS of a check.
!       if (! isinitialized () && pc == EITHER)
  	{
! 	  // If the RHS is uninitialized, it must be an uninitialized
! 	  // 'this'.
! 	  if (! k.isinitialized () && k.pc != SELF)
  	    return false;
  	}
+       else if (isinitialized () != k.isinitialized ())
+ 	{
+ 	  // An initialized type and an uninitialized type are not
+ 	  // otherwise compatible.
+ 	  return false;
+ 	}
+       else
+ 	{
+ 	  // Two uninitialized objects are compatible if either:
+ 	  // * The PCs are identical, or
+ 	  // * One PC is UNINIT.
+ 	  if (! isinitialized ())
+ 	    {
+ 	      if (pc != k.pc && pc != UNINIT && k.pc != UNINIT)
+ 		return false;
+ 	    }
+ 	}
  
        return klass->compatible(k.klass, verifier);
      }
  
+     bool equals (const type &other, _Jv_BytecodeVerifier *vfy)
+     {
+       // Only works for reference types.
+       if ((key != reference_type
+ 	   && key != uninitialized_reference_type)
+ 	  || (other.key != reference_type
+ 	      && other.key != uninitialized_reference_type))
+ 	return false;
+       // Only for single-valued types.
+       if (klass->ref_next || other.klass->ref_next)
+ 	return false;
+       return klass->equals (other.klass, vfy);
+     }
+ 
      bool isvoid () const
      {
        return key == void_type;
*************** private:
*** 785,797 ****
      {
        // The way this is written, we don't need to check isarray().
        if (key != reference_type)
! 	verifier->verify_fail ("internal error in verify_dimensions: not a reference type");
  
        if (klass->count_dimensions () < ndims)
! 	verifier->verify_fail ("array type has fewer dimensions than required");
      }
  
!     // Merge OLD_TYPE into this.  On error throw exception.
      bool merge (type& old_type, bool local_semantics,
  		_Jv_BytecodeVerifier *verifier)
      {
--- 878,893 ----
      {
        // The way this is written, we don't need to check isarray().
        if (key != reference_type)
! 	verifier->verify_fail ("internal error in verify_dimensions:"
! 			       " not a reference type");
  
        if (klass->count_dimensions () < ndims)
! 	verifier->verify_fail ("array type has fewer dimensions"
! 			       " than required");
      }
  
!     // Merge OLD_TYPE into this.  On error throw exception.  Return
!     // true if the merge caused a type change.
      bool merge (type& old_type, bool local_semantics,
  		_Jv_BytecodeVerifier *verifier)
      {
*************** private:
*** 834,853 ****
  	{
  	  if (local_semantics)
  	    {
- 	      // If we're merging into an "unused" slot, then we
- 	      // simply accept whatever we're merging from.
- 	      if (key == unused_by_subroutine_type)
- 		{
- 		  *this = old_type;
- 		  changed = true;
- 		}
- 	      else if (old_type.key == unused_by_subroutine_type)
- 		{
- 		  // Do nothing.
- 		}
  	      // If we already have an `unsuitable' type, then we
  	      // don't need to change again.
! 	      else if (key != unsuitable_type)
  		{
  		  key = unsuitable_type;
  		  changed = true;
--- 930,938 ----
  	{
  	  if (local_semantics)
  	    {
  	      // If we already have an `unsuitable' type, then we
  	      // don't need to change again.
! 	      if (key != unsuitable_type)
  		{
  		  key = unsuitable_type;
  		  changed = true;
*************** private:
*** 877,883 ****
  	case unsuitable_type: c = '-'; break;
  	case return_address_type: c = 'r'; break;
  	case continuation_type: c = '+'; break;
- 	case unused_by_subroutine_type: c = '_'; break;
  	case reference_type: c = 'L'; break;
  	case null_type: c = '@'; break;
  	case uninitialized_reference_type: c = 'U'; break;
--- 962,967 ----
*************** private:
*** 900,915 ****
      type *stack;
      // The local variables.
      type *locals;
-     // Flags are used in subroutines to keep track of which local
-     // variables have been accessed.  They are also used after 
-     char *flags;
-     // If not 0, then we are in a subroutine.  The value is the PC of
-     // the subroutine's entry point.  We can use 0 as an exceptional
-     // value because PC=0 can never be a subroutine.
-     int subroutine;
-     // This is used to keep a linked list of all the states which
-     // require re-verification.  We use the PC to keep track.
-     int next;
      // We keep track of the type of `this' specially.  This is used to
      // ensure that an instance initializer invokes another initializer
      // on `this' before returning.  We must keep track of this
--- 984,989 ----
*************** private:
*** 917,956 ****
      // assigns to locals[0] (overwriting `this') and then returns
      // without really initializing.
      type this_type;
-     // This is a list of all subroutines that have been seen at this
-     // point.  Ordinarily this is NULL; it is only allocated and used
-     // in relatively weird situations involving non-ret exit from a
-     // subroutine.  We have to keep track of this in this way to avoid
-     // endless recursion in these cases.
-     subr_info *seen_subrs;
  
!     // INVALID marks a state which is not on the linked list of states
!     // requiring reverification.
!     static const int INVALID = -1;
!     // NO_NEXT marks the state at the end of the reverification list.
!     static const int NO_NEXT = -2;
! 
!     // This is used to mark the stack depth at the instruction just
!     // after a `jsr' when we haven't yet processed the corresponding
!     // `ret'.  See handle_jsr_insn for more information.
!     static const int NO_STACK = -1;
  
!     // This flag indicates that the local was changed in this
!     // subroutine.
!     static const int FLAG_CHANGED = 1;
!     // This is set only on the flags of the state of an instruction
!     // directly following a "jsr".  It indicates that the local
!     // variable was changed by the subroutine corresponding to the
!     // "jsr".
!     static const int FLAG_USED = 2;
  
      state ()
        : this_type ()
      {
        stack = NULL;
        locals = NULL;
!       flags = NULL;
!       seen_subrs = NULL;
      }
  
      state (int max_stack, int max_locals)
--- 991,1017 ----
      // assigns to locals[0] (overwriting `this') and then returns
      // without really initializing.
      type this_type;
  
!     // The PC for this state.  This is only valid on states which are
!     // permanently attached to a given PC.  For an object like
!     // `current_state', which is used transiently, this has no
!     // meaning.
!     int pc;
!     // We keep a linked list of all states requiring reverification.
!     // If this is the special value INVALID_STATE then this state is
!     // not on the list.  NULL marks the end of the linked list.
!     state *next;
  
!     // NO_NEXT is the PC value meaning that a new state must be
!     // acquired from the verification list.
!     static const int NO_NEXT = -1;
  
      state ()
        : this_type ()
      {
        stack = NULL;
        locals = NULL;
!       next = INVALID_STATE;
      }
  
      state (int max_stack, int max_locals)
*************** private:
*** 962,987 ****
        for (int i = 0; i < max_stack; ++i)
  	stack[i] = unsuitable_type;
        locals = new type[max_locals];
-       flags = (char *) _Jv_Malloc (sizeof (char) * max_locals);
-       seen_subrs = NULL;
        for (int i = 0; i < max_locals; ++i)
! 	{
! 	  locals[i] = unsuitable_type;
! 	  flags[i] = 0;
! 	}
!       next = INVALID;
!       subroutine = 0;
      }
  
!     state (const state *orig, int max_stack, int max_locals,
! 	   bool ret_semantics = false)
      {
        stack = new type[max_stack];
        locals = new type[max_locals];
!       flags = (char *) _Jv_Malloc (sizeof (char) * max_locals);
!       seen_subrs = NULL;
!       copy (orig, max_stack, max_locals, ret_semantics);
!       next = INVALID;
      }
  
      ~state ()
--- 1023,1041 ----
        for (int i = 0; i < max_stack; ++i)
  	stack[i] = unsuitable_type;
        locals = new type[max_locals];
        for (int i = 0; i < max_locals; ++i)
! 	locals[i] = unsuitable_type;
!       pc = NO_NEXT;
!       next = INVALID_STATE;
      }
  
!     state (const state *orig, int max_stack, int max_locals)
      {
        stack = new type[max_stack];
        locals = new type[max_locals];
!       copy (orig, max_stack, max_locals);
!       pc = NO_NEXT;
!       next = INVALID_STATE;
      }
  
      ~state ()
*************** private:
*** 990,998 ****
  	delete[] stack;
        if (locals)
  	delete[] locals;
-       if (flags)
- 	_Jv_Free (flags);
-       clean_subrs ();
      }
  
      void *operator new[] (size_t bytes)
--- 1044,1049 ----
*************** private:
*** 1015,1079 ****
        _Jv_Free (mem);
      }
  
!     void clean_subrs ()
!     {
!       subr_info *info = seen_subrs;
!       while (info != NULL)
! 	{
! 	  subr_info *next = info->next;
! 	  _Jv_Free (info);
! 	  info = next;
! 	}
!       seen_subrs = NULL;
!     }
! 
!     void copy (const state *copy, int max_stack, int max_locals,
! 	       bool ret_semantics = false)
      {
        stacktop = copy->stacktop;
        stackdepth = copy->stackdepth;
-       subroutine = copy->subroutine;
        for (int i = 0; i < max_stack; ++i)
  	stack[i] = copy->stack[i];
        for (int i = 0; i < max_locals; ++i)
! 	{
! 	  // See push_jump_merge to understand this case.
! 	  if (ret_semantics)
! 	    {
! 	      if ((copy->flags[i] & FLAG_CHANGED))
! 		{
! 		  // Changed in the subroutine, so we copy it here.
! 		  locals[i] = copy->locals[i];
! 		  flags[i] |= FLAG_USED;
! 		}
! 	      else
! 		{
! 		  // Not changed in the subroutine.  Use a special
! 		  // type so the coming merge will overwrite.
! 		  locals[i] = type (unused_by_subroutine_type);
! 		}
! 	    }
! 	  else
! 	    locals[i] = copy->locals[i];
! 
! 	  // Clear the flag unconditionally just so printouts look ok,
! 	  // then only set it if we're still in a subroutine and it
! 	  // did in fact change.
! 	  flags[i] &= ~FLAG_CHANGED;
! 	  if (subroutine && (copy->flags[i] & FLAG_CHANGED) != 0)
! 	    flags[i] |= FLAG_CHANGED;
! 	}
! 
!       clean_subrs ();
!       if (copy->seen_subrs)
! 	{
! 	  for (subr_info *info = copy->seen_subrs;
! 	       info != NULL; info = info->next)
! 	    add_subr (info->pc);
! 	}
  
        this_type = copy->this_type;
!       // Don't modify `next'.
      }
  
      // Modify this state to reflect entry to an exception handler.
--- 1066,1082 ----
        _Jv_Free (mem);
      }
  
!     void copy (const state *copy, int max_stack, int max_locals)
      {
        stacktop = copy->stacktop;
        stackdepth = copy->stackdepth;
        for (int i = 0; i < max_stack; ++i)
  	stack[i] = copy->stack[i];
        for (int i = 0; i < max_locals; ++i)
! 	locals[i] = copy->locals[i];
  
        this_type = copy->this_type;
!       // Don't modify `next' or `pc'.
      }
  
      // Modify this state to reflect entry to an exception handler.
*************** private:
*** 1086,1118 ****
  	stack[i] = unsuitable_type;
      }
  
!     // Modify this state to reflect entry into a subroutine.
!     void enter_subroutine (int npc, int max_locals)
      {
!       subroutine = npc;
!       // Mark all items as unchanged.  Each subroutine needs to keep
!       // track of its `changed' state independently.  In the case of
!       // nested subroutines, this information will be merged back into
!       // parent by the `ret'.
!       for (int i = 0; i < max_locals; ++i)
! 	flags[i] &= ~FLAG_CHANGED;
      }
  
!     // Indicate that we've been in this this subroutine.
!     void add_subr (int pc)
      {
!       subr_info *n = (subr_info *) _Jv_Malloc (sizeof (subr_info));
!       n->pc = pc;
!       n->next = seen_subrs;
!       seen_subrs = n;
      }
  
      // Merge STATE_OLD into this state.  Destructively modifies this
      // state.  Returns true if the new state was in fact changed.
      // Will throw an exception if the states are not mergeable.
!     bool merge (state *state_old, bool ret_semantics,
! 		int max_locals, _Jv_BytecodeVerifier *verifier,
! 		bool jsr_semantics = false)
      {
        bool changed = false;
  
--- 1089,1109 ----
  	stack[i] = unsuitable_type;
      }
  
!     inline int get_pc () const
      {
!       return pc;
      }
  
!     void set_pc (int npc)
      {
!       pc = npc;
      }
  
      // Merge STATE_OLD into this state.  Destructively modifies this
      // state.  Returns true if the new state was in fact changed.
      // Will throw an exception if the states are not mergeable.
!     bool merge (state *state_old, int max_locals,
! 		_Jv_BytecodeVerifier *verifier)
      {
        bool changed = false;
  
*************** private:
*** 1121,1282 ****
        if (this_type.isinitialized ())
  	this_type = state_old->this_type;
  
!       // Merge subroutine states.  Here we just keep track of what
!       // subroutine we think we're in.  We only check for a merge
!       // (which is invalid) when we see a `ret'.
!       if (subroutine == state_old->subroutine)
! 	{
! 	  // Nothing.
! 	}
!       else if (subroutine == 0)
! 	{
! 	  subroutine = state_old->subroutine;
! 	  changed = true;
! 	}
!       else
! 	{
! 	  // If the subroutines differ, and we haven't seen this
! 	  // subroutine before, indicate that the state changed.  This
! 	  // is needed to detect when subroutines have merged.
! 	  bool found = false;
! 	  for (subr_info *info = seen_subrs; info != NULL; info = info->next)
! 	    {
! 	      if (info->pc == state_old->subroutine)
! 		{
! 		  found = true;
! 		  break;
! 		}
! 	    }
! 	  if (! found)
! 	    {
! 	      add_subr (state_old->subroutine);
! 	      changed = true;
! 	    }
! 	}
! 
!       // Merge stacks, including special handling for NO_STACK case.
!       // If the destination is NO_STACK, this means it is the
!       // instruction following a "jsr" and has not yet been processed
!       // in any way.  In this situation, if we are currently
!       // processing a "ret", then we must *copy* any locals changed in
!       // the subroutine into the current state.  Merging in this
!       // situation is incorrect because the locals we've noted didn't
!       // come real program flow, they are just an artifact of how
!       // we've chosen to handle the post-jsr state.
!       bool copy_in_locals = ret_semantics && stacktop == NO_STACK;
! 
!       if (state_old->stacktop == NO_STACK)
! 	{
! 	  // This can happen if we're doing a pass-through jsr merge.
! 	  // Here we can just ignore the stack.
! 	}
!       else if (stacktop == NO_STACK)
! 	{
! 	  stacktop = state_old->stacktop;
! 	  stackdepth = state_old->stackdepth;
! 	  for (int i = 0; i < stacktop; ++i)
! 	    stack[i] = state_old->stack[i];
! 	  changed = true;
! 	}
!       else if (state_old->stacktop != stacktop)
  	verifier->verify_fail ("stack sizes differ");
!       else
  	{
! 	  for (int i = 0; i < state_old->stacktop; ++i)
! 	    {
! 	      if (stack[i].merge (state_old->stack[i], false, verifier))
! 		changed = true;
! 	    }
  	}
  
        // Merge local variables.
        for (int i = 0; i < max_locals; ++i)
  	{
! 	  // If we're not processing a `ret', then we merge every
! 	  // local variable.  If we are processing a `ret', then we
! 	  // only merge locals which changed in the subroutine.  When
! 	  // processing a `ret', STATE_OLD is the state at the point
! 	  // of the `ret', and THIS is the state just after the `jsr'.
! 	  // See comment above for explanation of COPY_IN_LOCALS.
! 	  if (copy_in_locals)
! 	    {
! 	      if ((state_old->flags[i] & FLAG_CHANGED) != 0)
! 		{
! 		  locals[i] = state_old->locals[i];
! 		  changed = true;
! 		  // There's no point in calling note_variable here,
! 		  // since we call it under the same condition before
! 		  // the loop ends.
! 		}
! 	    }
! 	  else if (jsr_semantics && (flags[i] & FLAG_USED) != 0)
! 	    {
! 	      // We are processing the "pass-through" part of a jsr
! 	      // statement.  In this particular case, the local was
! 	      // changed by the subroutine.  So, we have no work to
! 	      // do, as the pre-jsr value does not survive the
! 	      // subroutine call.
! 	    }
! 	  else if (! ret_semantics
! 		   || (state_old->flags[i] & FLAG_CHANGED) != 0)
! 	    {
! 	      // If we have ordinary (not ret) semantics, then we have
! 	      // merging flow control, so we merge types.  Or, we have
! 	      // jsr pass-through semantics and the type survives the
! 	      // subroutine (see above), so again we merge.  Or,
! 	      // finally, we have ret semantics and this value did
! 	      // change, in which case we merge the change from the
! 	      // subroutine into the post-jsr instruction.
! 	      if (locals[i].merge (state_old->locals[i], true, verifier))
! 		{
! 		  // Note that we don't call `note_variable' here.
! 		  // This change doesn't represent a real change to a
! 		  // local, but rather a merge artifact.  If we're in
! 		  // a subroutine which is called with two
! 		  // incompatible types in a slot that is unused by
! 		  // the subroutine, then we don't want to mark that
! 		  // variable as having been modified.
! 		  changed = true;
! 		}
! 	    }
! 
! 	  // If we're in a subroutine, we must compute the union of
! 	  // all the changed local variables.
! 	  if ((state_old->flags[i] & FLAG_CHANGED) != 0)
! 	    note_variable (i);
! 
! 	  // If we're returning from a subroutine, we must mark the
! 	  // post-jsr instruction with information about what changed,
! 	  // so that future "pass-through" jsr merges work correctly.
! 	  if (ret_semantics && (state_old->flags[i] & FLAG_CHANGED) != 0)
! 	    flags[i] |= FLAG_USED;
  	}
  
        return changed;
      }
  
-     // Throw an exception if there is an uninitialized object on the
-     // stack or in a local variable.  EXCEPTION_SEMANTICS controls
-     // whether we're using backwards-branch or exception-handing
-     // semantics.
-     void check_no_uninitialized_objects (int max_locals,
- 					 _Jv_BytecodeVerifier *verifier,
- 					 bool exception_semantics = false)
-     {
-       if (! exception_semantics)
- 	{
- 	  for (int i = 0; i < stacktop; ++i)
- 	    if (stack[i].isreference () && ! stack[i].isinitialized ())
- 	      verifier->verify_fail ("uninitialized object on stack");
- 	}
- 
-       for (int i = 0; i < max_locals; ++i)
- 	if (locals[i].isreference () && ! locals[i].isinitialized ())
- 	  verifier->verify_fail ("uninitialized object in local variable");
- 
-       check_this_initialized (verifier);
-     }
- 
      // Ensure that `this' has been initialized.
      void check_this_initialized (_Jv_BytecodeVerifier *verifier)
      {
--- 1112,1136 ----
        if (this_type.isinitialized ())
  	this_type = state_old->this_type;
  
!       // Merge stacks.
!       if (state_old->stacktop != stacktop)  // FIXME stackdepth instead?
  	verifier->verify_fail ("stack sizes differ");
!       for (int i = 0; i < state_old->stacktop; ++i)
  	{
! 	  if (stack[i].merge (state_old->stack[i], false, verifier))
! 	    changed = true;
  	}
  
        // Merge local variables.
        for (int i = 0; i < max_locals; ++i)
  	{
! 	  if (locals[i].merge (state_old->locals[i], true, verifier))
! 	    changed = true;
  	}
  
        return changed;
      }
  
      // Ensure that `this' has been initialized.
      void check_this_initialized (_Jv_BytecodeVerifier *verifier)
      {
*************** private:
*** 1290,1302 ****
        this_type = k;
      }
  
-     // Note that a local variable was modified.
-     void note_variable (int index)
-     {
-       if (subroutine > 0)
- 	flags[index] |= FLAG_CHANGED;
-     }
- 
      // Mark each `new'd object we know of that was allocated at PC as
      // initialized.
      void set_initialized (int pc, int max_locals)
--- 1144,1149 ----
*************** private:
*** 1308,1324 ****
        this_type.set_initialized (pc);
      }
  
!     // Return true if this state is the unmerged result of a `ret'.
!     bool is_unmerged_ret_state (int max_locals) const
      {
!       if (stacktop == NO_STACK)
! 	return true;
        for (int i = 0; i < max_locals; ++i)
  	{
! 	  if (locals[i].key == unused_by_subroutine_type)
! 	    return true;
  	}
-       return false;
      }
  
  #ifdef VERIFY_DEBUG
--- 1155,1190 ----
        this_type.set_initialized (pc);
      }
  
!     // This tests to see whether two states can be considered "merge
!     // compatible".  If both states have a return-address in the same
!     // slot, and the return addresses are different, then they are not
!     // compatible and we must not try to merge them.
!     bool state_mergeable_p (state *other, int max_locals,
! 			    _Jv_BytecodeVerifier *verifier)
      {
!       // This is tricky: if the stack sizes differ, then not only are
!       // these not mergeable, but in fact we should give an error, as
!       // we've found two execution paths that reach a branch target
!       // with different stack depths.  FIXME stackdepth instead?
!       if (stacktop != other->stacktop)
! 	verifier->verify_fail ("stack sizes differ");
! 
!       for (int i = 0; i < stacktop; ++i)
! 	if (! stack[i].state_mergeable_p (other->stack[i]))
! 	  return false;
        for (int i = 0; i < max_locals; ++i)
+ 	if (! locals[i].state_mergeable_p (other->locals[i]))
+ 	  return false;
+       return true;
+     }
+ 
+     void reverify (_Jv_BytecodeVerifier *verifier)
+     {
+       if (next == INVALID_STATE)
  	{
! 	  next = verifier->next_verify_state;
! 	  verifier->next_verify_state = this;
  	}
      }
  
  #ifdef VERIFY_DEBUG
*************** private:
*** 1333,1349 ****
  	debug_print (".");
        debug_print ("    [local] ");
        for (i = 0; i < max_locals; ++i)
! 	{
! 	  locals[i].print ();
! 	  if ((flags[i] & FLAG_USED) != 0)
! 	    debug_print ((flags[i] & FLAG_CHANGED) ? ">" : "<");
! 	  else
! 	    debug_print ((flags[i] & FLAG_CHANGED) ? "+" : " ");
! 	}
!       if (subroutine == 0)
! 	debug_print ("   | None");
!       else
! 	debug_print ("   | %4d", subroutine);
        debug_print (" | %p\n", this);
      }
  #else
--- 1199,1205 ----
  	debug_print (".");
        debug_print ("    [local] ");
        for (i = 0; i < max_locals; ++i)
! 	locals[i].print ();
        debug_print (" | %p\n", this);
      }
  #else
*************** private:
*** 1424,1441 ****
      if (index > current_method->max_locals - depth)
        verify_fail ("invalid local variable");
      current_state->locals[index] = t;
-     current_state->note_variable (index);
  
      if (depth == 2)
!       {
! 	current_state->locals[index + 1] = continuation_type;
! 	current_state->note_variable (index + 1);
!       }
      if (index > 0 && current_state->locals[index - 1].iswide ())
!       {
! 	current_state->locals[index - 1] = unsuitable_type;
! 	// There's no need to call note_variable here.
!       }
    }
  
    type get_variable (int index, type t)
--- 1280,1290 ----
      if (index > current_method->max_locals - depth)
        verify_fail ("invalid local variable");
      current_state->locals[index] = t;
  
      if (depth == 2)
!       current_state->locals[index + 1] = continuation_type;
      if (index > 0 && current_state->locals[index - 1].iswide ())
!       current_state->locals[index - 1] = unsuitable_type;
    }
  
    type get_variable (int index, type t)
*************** private:
*** 1525,1631 ****
      return npc;
    }
  
    // Merge the indicated state into the state at the branch target and
!   // schedule a new PC if there is a change.  If RET_SEMANTICS is
!   // true, then we are merging from a `ret' instruction into the
!   // instruction after a `jsr'.  This is a special case with its own
!   // modified semantics.  If JSR_SEMANTICS is true, then we're merging
!   // some type information from a "jsr" instruction to the immediately
!   // following instruction.  In this situation we have to be careful
!   // not to merge local variables whose values are modified by the
!   // subroutine we're about to call.
!   void push_jump_merge (int npc, state *nstate,
! 			bool ret_semantics = false,
! 			bool jsr_semantics = false)
    {
!     bool changed = true;
!     if (states[npc] == NULL)
!       {
! 	// There's a weird situation here.  If are examining the
! 	// branch that results from a `ret', and there is not yet a
! 	// state available at the branch target (the instruction just
! 	// after the `jsr'), then we have to construct a special kind
! 	// of state at that point for future merging.  This special
! 	// state has the type `unused_by_subroutine_type' in each slot
! 	// which was not modified by the subroutine.
! 	states[npc] = new state (nstate, current_method->max_stack,
! 				 current_method->max_locals, ret_semantics);
! 	debug_print ("== New state in push_jump_merge (ret_semantics = %s)\n",
! 		     ret_semantics ? "true" : "false");
! 	states[npc]->print ("New", npc, current_method->max_stack,
! 			    current_method->max_locals);
!       }
!     else
        {
! 	debug_print ("== Merge states in push_jump_merge\n");
! 	nstate->print ("Frm", start_PC, current_method->max_stack,
! 		       current_method->max_locals);
! 	states[npc]->print (" To", npc, current_method->max_stack,
! 			    current_method->max_locals);
! 	changed = states[npc]->merge (nstate, ret_semantics,
! 				      current_method->max_locals, this,
! 				      jsr_semantics);
! 	states[npc]->print ("New", npc, current_method->max_stack,
! 			    current_method->max_locals);
        }
  
!     if (changed && states[npc]->next == state::INVALID)
        {
! 	// The merge changed the state, and the new PC isn't yet on our
! 	// list of PCs to re-verify.
! 	states[npc]->next = next_verify_pc;
! 	next_verify_pc = npc;
        }
    }
  
    void push_jump (int offset)
    {
      int npc = compute_jump (offset);
!     if (npc < PC)
!       current_state->check_no_uninitialized_objects (current_method->max_locals, this);
!     push_jump_merge (npc, current_state);
    }
  
    void push_exception_jump (type t, int pc)
    {
!     current_state->check_no_uninitialized_objects (current_method->max_locals,
! 						   this, true);
      state s (current_state, current_method->max_stack,
  	     current_method->max_locals);
      if (current_method->max_stack < 1)
        verify_fail ("stack overflow at exception handler");
      s.set_exception (t, current_method->max_stack);
!     push_jump_merge (pc, &s);
    }
  
!   int pop_jump ()
    {
!     int *prev_loc = &next_verify_pc;
!     int npc = next_verify_pc;
! 
!     while (npc != state::NO_NEXT)
        {
! 	// If the next available PC is an unmerged `ret' state, then
! 	// we aren't yet ready to handle it.  That's because we would
! 	// need all kind of special cases to do so.  So instead we
! 	// defer this jump until after we've processed it via a
! 	// fall-through.  This has to happen because the instruction
! 	// before this one must be a `jsr'.
! 	if (! states[npc]->is_unmerged_ret_state (current_method->max_locals))
! 	  {
! 	    *prev_loc = states[npc]->next;
! 	    states[npc]->next = state::INVALID;
! 	    return npc;
! 	  }
! 
! 	prev_loc = &states[npc]->next;
! 	npc = states[npc]->next;
        }
! 
!     // Note that we might have gotten here even when there are
!     // remaining states to process.  That can happen if we find a
!     // `jsr' without a `ret'.
!     return state::NO_NEXT;
    }
  
    void invalidate_pc ()
--- 1374,1482 ----
      return npc;
    }
  
+   // Add a new state to the state list at NPC.
+   state *add_new_state (int npc, state *old_state)
+   {
+     state *new_state = new state (old_state, current_method->max_stack,
+ 				  current_method->max_locals);
+     debug_print ("== New state in add_new_state\n");
+     new_state->print ("New", npc, current_method->max_stack,
+ 		      current_method->max_locals);
+     linked<state> *nlink
+       = (linked<state> *) _Jv_Malloc (sizeof (linked<state>));
+     nlink->val = new_state;
+     nlink->next = states[npc];
+     states[npc] = nlink;
+     new_state->set_pc (npc);
+     return new_state;
+   }
+ 
    // Merge the indicated state into the state at the branch target and
!   // schedule a new PC if there is a change.  NPC is the PC of the
!   // branch target, and FROM_STATE is the state at the source of the
!   // branch.  This method returns true if the destination state
!   // changed and requires reverification, false otherwise.
!   void merge_into (int npc, state *from_state)
    {
!     // Iterate over all target states and merge our state into each,
!     // if applicable.  FIXME one improvement we could make here is
!     // "state destruction".  Merging a new state into an existing one
!     // might cause a return_address_type to be merged to
!     // unsuitable_type.  In this case the resulting state may now be
!     // mergeable with other states currently held in parallel at this
!     // location.  So in this situation we could pairwise compare and
!     // reduce the number of parallel states.
!     bool applicable = false;
!     for (linked<state> *iter = states[npc]; iter != NULL; iter = iter->next)
        {
! 	state *new_state = iter->val;
! 	if (new_state->state_mergeable_p (from_state,
! 					  current_method->max_locals, this))
! 	  {
! 	    applicable = true;
! 
! 	    debug_print ("== Merge states in merge_into\n");
! 	    from_state->print ("Frm", start_PC, current_method->max_stack,
! 			       current_method->max_locals);
! 	    new_state->print (" To", npc, current_method->max_stack,
! 			      current_method->max_locals);
! 	    bool changed = new_state->merge (from_state,
! 					     current_method->max_locals,
! 					     this);
! 	    new_state->print ("New", npc, current_method->max_stack,
! 			      current_method->max_locals);
! 
! 	    if (changed)
! 	      new_state->reverify (this);
! 	  }
        }
  
!     if (! applicable)
        {
! 	// Either we don't yet have a state at NPC, or we have a
! 	// return-address type that is in conflict with all existing
! 	// state.  So, we need to create a new entry.
! 	state *new_state = add_new_state (npc, from_state);
! 	// A new state added in this way must always be reverified.
! 	new_state->reverify (this);
        }
    }
  
    void push_jump (int offset)
    {
      int npc = compute_jump (offset);
!     // According to the JVM Spec, we need to check for uninitialized
!     // objects here.  However, this does not actually affect type
!     // safety, and the Eclipse java compiler generates code that
!     // violates this constraint.
!     merge_into (npc, current_state);
    }
  
    void push_exception_jump (type t, int pc)
    {
!     // According to the JVM Spec, we need to check for uninitialized
!     // objects here.  However, this does not actually affect type
!     // safety, and the Eclipse java compiler generates code that
!     // violates this constraint.
      state s (current_state, current_method->max_stack,
  	     current_method->max_locals);
      if (current_method->max_stack < 1)
        verify_fail ("stack overflow at exception handler");
      s.set_exception (t, current_method->max_stack);
!     merge_into (pc, &s);
    }
  
!   state *pop_jump ()
    {
!     state *new_state = next_verify_state;
!     if (new_state == INVALID_STATE)
!       verify_fail ("programmer error in pop_jump");
!     if (new_state != NULL)
        {
! 	next_verify_state = new_state->next;
! 	new_state->next = INVALID_STATE;
        }
!     return new_state;
    }
  
    void invalidate_pc ()
*************** private:
*** 1633,1639 ****
      PC = state::NO_NEXT;
    }
  
!   void note_branch_target (int pc, bool is_jsr_target = false)
    {
      // Don't check `pc <= PC', because we've advanced PC after
      // fetching the target and we haven't yet checked the next
--- 1484,1490 ----
      PC = state::NO_NEXT;
    }
  
!   void note_branch_target (int pc)
    {
      // Don't check `pc <= PC', because we've advanced PC after
      // fetching the target and we haven't yet checked the next
*************** private:
*** 1641,1654 ****
      if (pc < PC && ! (flags[pc] & FLAG_INSN_START))
        verify_fail ("branch not to instruction start", start_PC);
      flags[pc] |= FLAG_BRANCH_TARGET;
-     if (is_jsr_target)
-       {
- 	// Record the jsr which called this instruction.
- 	subr_info *info = (subr_info *) _Jv_Malloc (sizeof (subr_info));
- 	info->pc = PC;
- 	info->next = jsr_ptrs[pc];
- 	jsr_ptrs[pc] = info;
-       }
    }
  
    void skip_padding ()
--- 1492,1497 ----
*************** private:
*** 1658,1765 ****
  	verify_fail ("found nonzero padding byte");
    }
  
-   // Return the subroutine to which the instruction at PC belongs.
-   int get_subroutine (int pc)
-   {
-     if (states[pc] == NULL)
-       return 0;
-     return states[pc]->subroutine;
-   }
- 
    // Do the work for a `ret' instruction.  INDEX is the index into the
    // local variables.
    void handle_ret_insn (int index)
    {
!     get_variable (index, return_address_type);
! 
!     int csub = current_state->subroutine;
!     if (csub == 0)
!       verify_fail ("no subroutine");
! 
!     // Check to see if we've merged subroutines.
!     subr_entry_info *entry;
!     for (entry = entry_points; entry != NULL; entry = entry->next)
!       {
! 	if (entry->ret_pc == start_PC)
! 	  break;
!       }
!     if (entry == NULL)
!       {
! 	entry = (subr_entry_info *) _Jv_Malloc (sizeof (subr_entry_info));
! 	entry->pc = csub;
! 	entry->ret_pc = start_PC;
! 	entry->next = entry_points;
! 	entry_points = entry;
!       }
!     else if (entry->pc != csub)
!       verify_fail ("subroutines merged");
! 
!     for (subr_info *subr = jsr_ptrs[csub]; subr != NULL; subr = subr->next)
!       {
! 	// We might be returning to a `jsr' that is at the end of the
! 	// bytecode.  This is ok if we never return from the called
! 	// subroutine, but if we see this here it is an error.
! 	if (subr->pc >= current_method->code_length)
! 	  verify_fail ("fell off end");
  
! 	// Temporarily modify the current state so it looks like we're
! 	// in the enclosing context.
! 	current_state->subroutine = get_subroutine (subr->pc);
! 	if (subr->pc < PC)
! 	  current_state->check_no_uninitialized_objects (current_method->max_locals, this);
! 	push_jump_merge (subr->pc, current_state, true);
!       }
  
!     current_state->subroutine = csub;
      invalidate_pc ();
    }
  
-   // We're in the subroutine SUB, calling a subroutine at DEST.  Make
-   // sure this subroutine isn't already on the stack.
-   void check_nonrecursive_call (int sub, int dest)
-   {
-     if (sub == 0)
-       return;
-     if (sub == dest)
-       verify_fail ("recursive subroutine call");
-     for (subr_info *info = jsr_ptrs[sub]; info != NULL; info = info->next)
-       check_nonrecursive_call (get_subroutine (info->pc), dest);
-   }
- 
    void handle_jsr_insn (int offset)
    {
      int npc = compute_jump (offset);
  
!     if (npc < PC)
!       current_state->check_no_uninitialized_objects (current_method->max_locals, this);
!     check_nonrecursive_call (current_state->subroutine, npc);
  
      // Modify our state as appropriate for entry into a subroutine.
!     push_type (return_address_type);
!     push_jump_merge (npc, current_state);
!     // Clean up.
!     pop_type (return_address_type);
! 
!     // On entry to the subroutine, the subroutine number must be set
!     // and the locals must be marked as cleared.  We do this after
!     // merging state so that we don't erroneously "notice" a variable
!     // change merely on entry.
!     states[npc]->enter_subroutine (npc, current_method->max_locals);
! 
!     // Indicate that we don't know the stack depth of the instruction
!     // following the `jsr'.  The idea here is that we need to merge
!     // the local variable state across the jsr, but the subroutine
!     // might change the stack depth, so we can't make any assumptions
!     // about it.  So we have yet another special case.  We know that
!     // at this point PC points to the instruction after the jsr.  Note
!     // that it is ok to have a `jsr' at the end of the bytecode,
!     // provided that the called subroutine never returns.  So, we have
!     // a special case here and another one when we handle the ret.
!     if (PC < current_method->code_length)
!       {
! 	current_state->stacktop = state::NO_STACK;
! 	push_jump_merge (PC, current_state, false, true);
!       }
      invalidate_pc ();
    }
  
--- 1501,1546 ----
  	verify_fail ("found nonzero padding byte");
    }
  
    // Do the work for a `ret' instruction.  INDEX is the index into the
    // local variables.
    void handle_ret_insn (int index)
    {
!     type ret_addr = get_variable (index, return_address_type);
!     // It would be nice if we could do this.  However, the JVM Spec
!     // doesn't say that this is what happens.  It is implied that
!     // reusing a return address is invalid, but there's no actual
!     // prohibition against it.
!     // set_variable (index, unsuitable_type);
  
!     int npc = ret_addr.get_pc ();
!     // We might be returning to a `jsr' that is at the end of the
!     // bytecode.  This is ok if we never return from the called
!     // subroutine, but if we see this here it is an error.
!     if (npc >= current_method->code_length)
!       verify_fail ("fell off end");
  
!     // According to the JVM Spec, we need to check for uninitialized
!     // objects here.  However, this does not actually affect type
!     // safety, and the Eclipse java compiler generates code that
!     // violates this constraint.
!     merge_into (npc, current_state);
      invalidate_pc ();
    }
  
    void handle_jsr_insn (int offset)
    {
      int npc = compute_jump (offset);
  
!     // According to the JVM Spec, we need to check for uninitialized
!     // objects here.  However, this does not actually affect type
!     // safety, and the Eclipse java compiler generates code that
!     // violates this constraint.
  
      // Modify our state as appropriate for entry into a subroutine.
!     type ret_addr (return_address_type);
!     ret_addr.set_return_address (PC);
!     push_type (ret_addr);
!     merge_into (npc, current_state);
      invalidate_pc ();
    }
  
*************** private:
*** 1799,1805 ****
        case unsuitable_type:
        case return_address_type:
        case continuation_type:
-       case unused_by_subroutine_type:
        case reference_type:
        case null_type:
        case uninitialized_reference_type:
--- 1580,1585 ----
*************** private:
*** 1815,1830 ****
    void branch_prepass ()
    {
      flags = (char *) _Jv_Malloc (current_method->code_length);
-     jsr_ptrs = (subr_info **) _Jv_Malloc (sizeof (subr_info *)
- 					  * current_method->code_length);
  
      for (int i = 0; i < current_method->code_length; ++i)
!       {
! 	flags[i] = 0;
! 	jsr_ptrs[i] = NULL;
!       }
! 
!     bool last_was_jsr = false;
  
      PC = 0;
      while (PC < current_method->code_length)
--- 1595,1603 ----
    void branch_prepass ()
    {
      flags = (char *) _Jv_Malloc (current_method->code_length);
  
      for (int i = 0; i < current_method->code_length; ++i)
!       flags[i] = 0;
  
      PC = 0;
      while (PC < current_method->code_length)
*************** private:
*** 1834,1846 ****
  	start_PC = PC;
  	flags[PC] |= FLAG_INSN_START;
  
- 	// If the previous instruction was a jsr, then the next
- 	// instruction is a branch target -- the branch being the
- 	// corresponding `ret'.
- 	if (last_was_jsr)
- 	  note_branch_target (PC);
- 	last_was_jsr = false;
- 
  	java_opcode opcode = (java_opcode) bytecode[PC++];
  	switch (opcode)
  	  {
--- 1607,1612 ----
*************** private:
*** 2034,2041 ****
  	    break;
  
  	  case op_jsr:
- 	    last_was_jsr = true;
- 	    // Fall through.
  	  case op_ifeq:
  	  case op_ifne:
  	  case op_iflt:
--- 1800,1805 ----
*************** private:
*** 2053,2059 ****
  	  case op_ifnull:
  	  case op_ifnonnull:
  	  case op_goto:
! 	    note_branch_target (compute_jump (get_short ()), last_was_jsr);
  	    break;
  
  	  case op_tableswitch:
--- 1817,1823 ----
  	  case op_ifnull:
  	  case op_ifnonnull:
  	  case op_goto:
! 	    note_branch_target (compute_jump (get_short ()));
  	    break;
  
  	  case op_tableswitch:
*************** private:
*** 2100,2109 ****
  	    break;
  
  	  case op_jsr_w:
- 	    last_was_jsr = true;
- 	    // Fall through.
  	  case op_goto_w:
! 	    note_branch_target (compute_jump (get_int ()), last_was_jsr);
  	    break;
  
  	  // These are unused here, but we call them out explicitly
--- 1864,1871 ----
  	    break;
  
  	  case op_jsr_w:
  	  case op_goto_w:
! 	    note_branch_target (compute_jump (get_int ()));
  	    break;
  
  	  // These are unused here, but we call them out explicitly
*************** private:
*** 2232,2238 ****
    }
  
    // Return field's type, compute class' type if requested.
!   type check_field_constant (int index, type *class_type = NULL)
    {
      _Jv_Utf8Const *name, *field_type;
      type ct = handle_field_or_method (index,
--- 1994,2002 ----
    }
  
    // Return field's type, compute class' type if requested.
!   // If PUTFIELD is true, use the special 'putfield' semantics.
!   type check_field_constant (int index, type *class_type = NULL,
! 			     bool putfield = false)
    {
      _Jv_Utf8Const *name, *field_type;
      type ct = handle_field_or_method (index,
*************** private:
*** 2240,2248 ****
  				      &name, &field_type);
      if (class_type)
        *class_type = ct;
!     if (field_type->data[0] == '[' || field_type->data[0] == 'L')
!       return type (field_type, this);
!     return get_type_val_for_signature (field_type->data[0]);
    }
  
    type check_method_constant (int index, bool is_interface,
--- 2004,2032 ----
  				      &name, &field_type);
      if (class_type)
        *class_type = ct;
!     type result;
!     if (field_type->first() == '[' || field_type->first() == 'L')
!       result = type (field_type, this);
!     else
!       result = get_type_val_for_signature (field_type->first());
! 
!     // We have an obscure special case here: we can use `putfield' on
!     // a field declared in this class, even if `this' has not yet been
!     // initialized.
!     if (putfield
! 	&& ! current_state->this_type.isinitialized ()
! 	&& current_state->this_type.pc == type::SELF
! 	&& current_state->this_type.equals (ct, this)
! 	// We don't look at the signature, figuring that if it is
! 	// wrong we will fail during linking.  FIXME?
! 	&& _Jv_Linker::has_field_p (current_class, name))
!       // Note that we don't actually know whether we're going to match
!       // against 'this' or some other object of the same type.  So,
!       // here we set things up so that it doesn't matter.  This relies
!       // on knowing what our caller is up to.
!       class_type->set_uninitialized (type::EITHER, this);
! 
!     return result;
    }
  
    type check_method_constant (int index, bool is_interface,
*************** private:
*** 2298,2304 ****
    void compute_argument_types (_Jv_Utf8Const *signature,
  			       type *types)
    {
!     char *p = signature->data;
      // Skip `('.
      ++p;
  
--- 2082,2089 ----
    void compute_argument_types (_Jv_Utf8Const *signature,
  			       type *types)
    {
!     char *p = signature->chars();
! 
      // Skip `('.
      ++p;
  
*************** private:
*** 2309,2315 ****
  
    type compute_return_type (_Jv_Utf8Const *signature)
    {
!     char *p = signature->data;
      while (*p != ')')
        ++p;
      ++p;
--- 2094,2100 ----
  
    type compute_return_type (_Jv_Utf8Const *signature)
    {
!     char *p = signature->chars();
      while (*p != ')')
        ++p;
      ++p;
*************** private:
*** 2380,2416 ****
      // True if we are verifying an instance initializer.
      bool this_is_init = initialize_stack ();
  
!     states = (state **) _Jv_Malloc (sizeof (state *)
! 				    * current_method->code_length);
      for (int i = 0; i < current_method->code_length; ++i)
        states[i] = NULL;
  
!     next_verify_pc = state::NO_NEXT;
  
      while (true)
        {
  	// If the PC was invalidated, get a new one from the work list.
  	if (PC == state::NO_NEXT)
  	  {
! 	    PC = pop_jump ();
! 	    if (PC == state::INVALID)
! 	      verify_fail ("can't happen: saw state::INVALID");
! 	    if (PC == state::NO_NEXT)
  	      break;
  	    debug_print ("== State pop from pending list\n");
  	    // Set up the current state.
! 	    current_state->copy (states[PC], current_method->max_stack,
  				 current_method->max_locals);
  	  }
  	else
  	  {
- 	    // Control can't fall off the end of the bytecode.  We
- 	    // only need to check this in the fall-through case,
- 	    // because branch bounds are checked when they are
- 	    // pushed.
- 	    if (PC >= current_method->code_length)
- 	      verify_fail ("fell off end");
- 
  	    // 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
--- 2165,2195 ----
      // True if we are verifying an instance initializer.
      bool this_is_init = initialize_stack ();
  
!     states = (linked<state> **) _Jv_Malloc (sizeof (linked<state> *)
! 					    * current_method->code_length);
      for (int i = 0; i < current_method->code_length; ++i)
        states[i] = NULL;
  
!     next_verify_state = NULL;
  
      while (true)
        {
  	// If the PC was invalidated, get a new one from the work list.
  	if (PC == state::NO_NEXT)
  	  {
! 	    state *new_state = pop_jump ();
! 	    // If it is null, we're done.
! 	    if (new_state == NULL)
  	      break;
+ 
+ 	    PC = new_state->get_pc ();
  	    debug_print ("== State pop from pending list\n");
  	    // Set up the current state.
! 	    current_state->copy (new_state, current_method->max_stack,
  				 current_method->max_locals);
  	  }
  	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
*************** private:
*** 2418,2456 ****
  	    if (states[PC] != NULL)
  	      {
  		// We've already visited this instruction.  So merge
! 		// the states together.  If this yields no change then
! 		// we don't have to re-verify.  However, if the new
! 		// state is an the result of an unmerged `ret', we
! 		// must continue through it.
! 		debug_print ("== Fall through merge\n");
! 		states[PC]->print ("Old", PC, current_method->max_stack,
! 				   current_method->max_locals);
! 		current_state->print ("Cur", PC, current_method->max_stack,
! 				      current_method->max_locals);
! 		if (! current_state->merge (states[PC], false,
! 					    current_method->max_locals, this)
! 		    && ! states[PC]->is_unmerged_ret_state (current_method->max_locals))
! 		  {
! 		    debug_print ("== Fall through optimization\n");
! 		    invalidate_pc ();
! 		    continue;
! 		  }
! 		// Save a copy of it for later.
! 		states[PC]->copy (current_state, current_method->max_stack,
! 				  current_method->max_locals);
! 		current_state->print ("New", PC, current_method->max_stack,
! 				      current_method->max_locals);
  	      }
  	  }
  
  	// We only have to keep saved state at branch targets.  If
  	// we're at a branch target and the state here hasn't been set
! 	// yet, we set it now.
  	if (states[PC] == NULL && (flags[PC] & FLAG_BRANCH_TARGET))
! 	  {
! 	    states[PC] = new state (current_state, current_method->max_stack,
! 				    current_method->max_locals);
! 	  }
  
  	// Set this before handling exceptions so that debug output is
  	// sane.
--- 2197,2225 ----
  	    if (states[PC] != NULL)
  	      {
  		// We've already visited this instruction.  So merge
! 		// the states together.  It is simplest, but not most
! 		// efficient, to just always invalidate the PC here.
! 		merge_into (PC, current_state);
! 		invalidate_pc ();
! 		continue;
  	      }
  	  }
  
+ 	// Control can't fall off the end of the bytecode.  We need to
+ 	// check this in both cases, not just the fall-through case,
+ 	// because we don't check to see whether a `jsr' appears at
+ 	// the end of the bytecode until we process a `ret'.
+ 	if (PC >= current_method->code_length)
+ 	  verify_fail ("fell off end");
+ 
  	// We only have to keep saved state at branch targets.  If
  	// we're at a branch target and the state here hasn't been set
! 	// yet, we set it now.  You might notice that `ret' targets
! 	// won't necessarily have FLAG_BRANCH_TARGET set.  This
! 	// doesn't matter, since those states will be filled in by
! 	// merge_into.
  	if (states[PC] == NULL && (flags[PC] & FLAG_BRANCH_TARGET))
! 	  add_new_state (PC, current_state);
  
  	// Set this before handling exceptions so that debug output is
  	// sane.
*************** private:
*** 3067,3081 ****
  	  case op_putfield:
  	    {
  	      type klass;
! 	      type field = check_field_constant (get_ushort (), &klass);
  	      pop_type (field);
- 
- 	      // We have an obscure special case here: we can use
- 	      // `putfield' on a field declared in this class, even if
- 	      // `this' has not yet been initialized.
- 	      if (! current_state->this_type.isinitialized ()
- 		  && current_state->this_type.pc == type::SELF)
- 		klass.set_uninitialized (type::SELF, this);
  	      pop_type (klass);
  	    }
  	    break;
--- 2836,2843 ----
  	  case op_putfield:
  	    {
  	      type klass;
! 	      type field = check_field_constant (get_ushort (), &klass, true);
  	      pop_type (field);
  	      pop_type (klass);
  	    }
  	    break;
*************** private:
*** 3109,3115 ****
  		  if (opcode != op_invokespecial)
  		    verify_fail ("can't invoke <init>");
  		}
! 	      else if (method_name->data[0] == '<')
  		verify_fail ("can't invoke method starting with `<'");
  
  	      // Pop arguments and check types.
--- 2871,2877 ----
  		  if (opcode != op_invokespecial)
  		    verify_fail ("can't invoke <init>");
  		}
! 	      else if (method_name->first() == '<')
  		verify_fail ("can't invoke method starting with `<'");
  
  	      // Pop arguments and check types.
*************** public:
*** 3324,3330 ****
      // We just print the text as utf-8.  This is just for debugging
      // anyway.
      debug_print ("--------------------------------\n");
!     debug_print ("-- Verifying method `%s'\n", m->self->name->data);
  
      current_method = m;
      bytecode = m->bytecode ();
--- 3086,3092 ----
      // We just print the text as utf-8.  This is just for debugging
      // anyway.
      debug_print ("--------------------------------\n");
!     debug_print ("-- Verifying method `%s'\n", m->self->name->chars());
  
      current_method = m;
      bytecode = m->bytecode ();
*************** public:
*** 3333,3390 ****
  
      states = NULL;
      flags = NULL;
-     jsr_ptrs = NULL;
      utf8_list = NULL;
      isect_list = NULL;
-     entry_points = NULL;
    }
  
    ~_Jv_BytecodeVerifier ()
    {
-     if (states)
-       _Jv_Free (states);
      if (flags)
        _Jv_Free (flags);
  
-     if (jsr_ptrs)
-       {
- 	for (int i = 0; i < current_method->code_length; ++i)
- 	  {
- 	    if (jsr_ptrs[i] != NULL)
- 	      {
- 		subr_info *info = jsr_ptrs[i];
- 		while (info != NULL)
- 		  {
- 		    subr_info *next = info->next;
- 		    _Jv_Free (info);
- 		    info = next;
- 		  }
- 	      }
- 	  }
- 	_Jv_Free (jsr_ptrs);
-       }
- 
      while (utf8_list != NULL)
        {
! 	linked_utf8 *n = utf8_list->next;
! 	_Jv_Free (utf8_list->val);
  	_Jv_Free (utf8_list);
  	utf8_list = n;
        }
  
-     while (entry_points != NULL)
-       {
- 	subr_entry_info *next = entry_points->next;
- 	_Jv_Free (entry_points);
- 	entry_points = next;
-       }
- 
      while (isect_list != NULL)
        {
  	ref_intersection *next = isect_list->alloc_next;
  	delete isect_list;
  	isect_list = next;
        }
    }
  };
  
--- 3095,3138 ----
  
      states = NULL;
      flags = NULL;
      utf8_list = NULL;
      isect_list = NULL;
    }
  
    ~_Jv_BytecodeVerifier ()
    {
      if (flags)
        _Jv_Free (flags);
  
      while (utf8_list != NULL)
        {
! 	linked<_Jv_Utf8Const> *n = utf8_list->next;
  	_Jv_Free (utf8_list);
  	utf8_list = n;
        }
  
      while (isect_list != NULL)
        {
  	ref_intersection *next = isect_list->alloc_next;
  	delete isect_list;
  	isect_list = next;
        }
+ 
+     if (states)
+       {
+ 	for (int i = 0; i < current_method->code_length; ++i)
+ 	  {
+ 	    linked<state> *iter = states[i];
+ 	    while (iter != NULL)
+ 	      {
+ 		linked<state> *next = iter->next;
+ 		delete iter->val;
+ 		_Jv_Free (iter);
+ 		iter = next;
+ 	      }
+ 	  }
+ 	_Jv_Free (states);
+       }
    }
  };
  
*************** _Jv_VerifyMethod (_Jv_InterpMethod *meth
*** 3394,3397 ****
--- 3142,3146 ----
    _Jv_BytecodeVerifier v (meth);
    v.verify_instructions ();
  }
+ 
  #endif	/* INTERPRETER */
diff -Nrcpad gcc-3.4.3/libjava/win32-threads.cc gcc-4.0.0/libjava/win32-threads.cc
*** gcc-3.4.3/libjava/win32-threads.cc	Fri Oct 31 03:36:38 2003
--- gcc-4.0.0/libjava/win32-threads.cc	Sat Sep 11 19:13:50 2004
*************** _Jv_ThreadInitData (java::lang::Thread* 
*** 262,267 ****
--- 262,268 ----
  {
    _Jv_Thread_t *data = (_Jv_Thread_t*)_Jv_Malloc(sizeof(_Jv_Thread_t));
    data->flags = 0;
+   data->handle = 0;
    data->thread_obj = obj;
    data->interrupt_event = 0;
    InitializeCriticalSection (&data->interrupt_mutex);
*************** _Jv_ThreadDestroyData (_Jv_Thread_t *dat
*** 275,280 ****
--- 276,282 ----
    DeleteCriticalSection (&data->interrupt_mutex);
    if (data->interrupt_event)
      CloseHandle(data->interrupt_event);
+   CloseHandle(data->handle);
    _Jv_Free(data);
  }
  
*************** _Jv_ThreadStart (java::lang::Thread *thr
*** 365,371 ****
      return;
    data->flags |= FLAG_START;
  
-   // FIXME: handle marking the info object for GC.
    info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter));
    info->method = meth;
    info->data = data;
--- 367,372 ----
*************** _Jv_ThreadStart (java::lang::Thread *thr
*** 379,385 ****
    else
      data->flags |= FLAG_DAEMON;
  
!   GC_CreateThread(NULL, 0, really_start, info, 0, &id);
    _Jv_ThreadSetPriority(data, thread->getPriority());
  }
  
--- 380,386 ----
    else
      data->flags |= FLAG_DAEMON;
  
!   data->handle = GC_CreateThread(NULL, 0, really_start, info, 0, &id);
    _Jv_ThreadSetPriority(data, thread->getPriority());
  }
  
diff -Nrcpad gcc-3.4.3/libjava/win32.cc gcc-4.0.0/libjava/win32.cc
*** gcc-3.4.3/libjava/win32.cc	Tue Dec 16 22:54:21 2003
--- gcc-4.0.0/libjava/win32.cc	Sun Aug  1 04:29:31 2004
*************** _Jv_platform_initialize (void)
*** 256,262 ****
  {
    // Initialise winsock for networking
    WSADATA data;
!   if (WSAStartup (MAKEWORD (1, 1), &data))
      MessageBox (NULL, _T("Error initialising winsock library."), _T("Error"),
      MB_OK | MB_ICONEXCLAMATION);
  
--- 256,262 ----
  {
    // Initialise winsock for networking
    WSADATA data;
!   if (WSAStartup (MAKEWORD (2, 2), &data))
      MessageBox (NULL, _T("Error initialising winsock library."), _T("Error"),
      MB_OK | MB_ICONEXCLAMATION);
  
diff -Nrcpad gcc-3.4.3/zlib/.cvsignore gcc-4.0.0/zlib/.cvsignore
*** gcc-3.4.3/zlib/.cvsignore	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/.cvsignore	Mon Oct 11 17:35:35 2004
***************
*** 0 ****
--- 1 ----
+ autom4te.cache
diff -Nrcpad gcc-3.4.3/zlib/ChangeLog gcc-4.0.0/zlib/ChangeLog
*** gcc-3.4.3/zlib/ChangeLog	Fri Nov  5 03:34:59 2004
--- gcc-4.0.0/zlib/ChangeLog	Thu Apr 21 05:20:52 2005
***************
*** 1,21 ****
! 2004-11-04  Release Manager
  
! 	* GCC 3.4.3 released.
  
- 2004-09-06  Release Manager
  
! 	* GCC 3.4.2 released.
  
! 2004-07-01  Release Manager
  
! 	* GCC 3.4.1 released.
  
! 2004-04-18  Release Manager
  
! 	* GCC 3.4.0 released.
  
  
! 		ChangeLog file for zlib
  
  Changes in 1.1.4 (11 March 2002)
  - ZFREE was repeated on same allocation on some error conditions.
--- 1,250 ----
! 2005-04-20  Release Manager
  
! 	* GCC 4.0.0 released.
  
  
!                 ChangeLog file for zlib
  
! Changes in 1.2.1 (17 November 2003)
! - Remove a tab in contrib/gzappend/gzappend.c
! - Update some interfaces in contrib for new zlib functions
! - Update zlib version number in some contrib entries
! - Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta]
! - Support shared libraries on Hurd and KFreeBSD [Brown]
! - Fix error in NO_DIVIDE option of adler32.c
  
! Changes in 1.2.0.8 (4 November 2003)
! - Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas
! - Add experimental NO_DIVIDE #define in adler32.c
!     - Possibly faster on some processors (let me know if it is)
! - Correct Z_BLOCK to not return on first inflate call if no wrap
! - Fix strm->data_type on inflate() return to correctly indicate EOB
! - Add deflatePrime() function for appending in the middle of a byte
! - Add contrib/gzappend for an example of appending to a stream
! - Update win32/DLL_FAQ.txt [Truta]
! - Delete Turbo C comment in README [Truta]
! - Improve some indentation in zconf.h [Truta]
! - Fix infinite loop on bad input in configure script [Church]
! - Fix gzeof() for concatenated gzip files [Johnson]
! - Add example to contrib/visual-basic.txt [Michael B.]
! - Add -p to mkdir's in Makefile.in [vda]
! - Fix configure to properly detect presence or lack of printf functions
! - Add AS400 support [Monnerat]
! - Add a little Cygwin support [Wilson]
  
! Changes in 1.2.0.7 (21 September 2003)
! - Correct some debug formats in contrib/infback9
! - Cast a type in a debug statement in trees.c
! - Change search and replace delimiter in configure from % to # [Beebe]
! - Update contrib/untgz to 0.2 with various fixes [Truta]
! - Add build support for Amiga [Nikl]
! - Remove some directories in old that have been updated to 1.2
! - Add dylib building for Mac OS X in configure and Makefile.in
! - Remove old distribution stuff from Makefile
! - Update README to point to DLL_FAQ.txt, and add comment on Mac OS X
! - Update links in README
  
! Changes in 1.2.0.6 (13 September 2003)
! - Minor FAQ updates
! - Update contrib/minizip to 1.00 [Vollant]
! - Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta]
! - Update POSTINC comment for 68060 [Nikl]
! - Add contrib/infback9 with deflate64 decoding (unsupported)
! - For MVS define NO_vsnprintf and undefine FAR [van Burik]
! - Add pragma for fdopen on MVS [van Burik]
  
+ Changes in 1.2.0.5 (8 September 2003)
+ - Add OF to inflateBackEnd() declaration in zlib.h
+ - Remember start when using gzdopen in the middle of a file
+ - Use internal off_t counters in gz* functions to properly handle seeks
+ - Perform more rigorous check for distance-too-far in inffast.c
+ - Add Z_BLOCK flush option to return from inflate at block boundary
+ - Set strm->data_type on return from inflate
+     - Indicate bits unused, if at block boundary, and if in last block
+ - Replace size_t with ptrdiff_t in crc32.c, and check for correct size
+ - Add condition so old NO_DEFLATE define still works for compatibility
+ - FAQ update regarding the Windows DLL [Truta]
+ - INDEX update: add qnx entry, remove aix entry [Truta]
+ - Install zlib.3 into mandir [Wilson]
+ - Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta]
+ - Adapt the zlib interface to the new DLL convention guidelines [Truta]
+ - Introduce ZLIB_WINAPI macro to allow the export of functions using
+   the WINAPI calling convention, for Visual Basic [Vollant, Truta]
+ - Update msdos and win32 scripts and makefiles [Truta]
+ - Export symbols by name, not by ordinal, in win32/zlib.def [Truta]
+ - Add contrib/ada [Anisimkov]
+ - Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta]
+ - Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant]
+ - Add contrib/masm686 [Truta]
+ - Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm
+   [Truta, Vollant]
+ - Update contrib/delphi; rename to contrib/pascal; add example [Truta]
+ - Remove contrib/delphi2; add a new contrib/delphi [Truta]
+ - Avoid inclusion of the nonstandard <memory.h> in contrib/iostream,
+   and fix some method prototypes [Truta]
+ - Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip
+   [Truta]
+ - Avoid the use of backslash (\) in contrib/minizip [Vollant]
+ - Fix file time handling in contrib/untgz; update makefiles [Truta]
+ - Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines
+   [Vollant]
+ - Remove contrib/vstudio/vc15_16 [Vollant]
+ - Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta]
+ - Update README.contrib [Truta]
+ - Invert the assignment order of match_head and s->prev[...] in
+   INSERT_STRING [Truta]
+ - Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings
+   [Truta]
+ - Compare function pointers with 0, not with NULL or Z_NULL [Truta]
+ - Fix prototype of syncsearch in inflate.c [Truta]
+ - Introduce ASMINF macro to be enabled when using an ASM implementation
+   of inflate_fast [Truta]
+ - Change NO_DEFLATE to NO_GZCOMPRESS [Truta]
+ - Modify test_gzio in example.c to take a single file name as a
+   parameter [Truta]
+ - Exit the example.c program if gzopen fails [Truta]
+ - Add type casts around strlen in example.c [Truta]
+ - Remove casting to sizeof in minigzip.c; give a proper type
+   to the variable compared with SUFFIX_LEN [Truta]
+ - Update definitions of STDC and STDC99 in zconf.h [Truta]
+ - Synchronize zconf.h with the new Windows DLL interface [Truta]
+ - Use SYS16BIT instead of __32BIT__ to distinguish between
+   16- and 32-bit platforms [Truta]
+ - Use far memory allocators in small 16-bit memory models for
+   Turbo C [Truta]
+ - Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in
+   zlibCompileFlags [Truta]
+ - Cygwin has vsnprintf [Wilson]
+ - In Windows16, OS_CODE is 0, as in MSDOS [Truta]
+ - In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson]
  
! Changes in 1.2.0.4 (10 August 2003)
! - Minor FAQ updates
! - Be more strict when checking inflateInit2's windowBits parameter
! - Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well
! - Add gzip wrapper option to deflateInit2 using windowBits
! - Add updated QNX rule in configure and qnx directory [Bonnefoy]
! - Make inflate distance-too-far checks more rigorous
! - Clean up FAR usage in inflate
! - Add casting to sizeof() in gzio.c and minigzip.c
! 
! Changes in 1.2.0.3 (19 July 2003)
! - Fix silly error in gzungetc() implementation [Vollant]
! - Update contrib/minizip and contrib/vstudio [Vollant]
! - Fix printf format in example.c
! - Correct cdecl support in zconf.in.h [Anisimkov]
! - Minor FAQ updates
! 
! Changes in 1.2.0.2 (13 July 2003)
! - Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons
! - Attempt to avoid warnings in crc32.c for pointer-int conversion
! - Add AIX to configure, remove aix directory [Bakker]
! - Add some casts to minigzip.c
! - Improve checking after insecure sprintf() or vsprintf() calls
! - Remove #elif's from crc32.c
! - Change leave label to inf_leave in inflate.c and infback.c to avoid
!   library conflicts
! - Remove inflate gzip decoding by default--only enable gzip decoding by
!   special request for stricter backward compatibility
! - Add zlibCompileFlags() function to return compilation information
! - More typecasting in deflate.c to avoid warnings
! - Remove leading underscore from _Capital #defines [Truta]
! - Fix configure to link shared library when testing
! - Add some Windows CE target adjustments [Mai]
! - Remove #define ZLIB_DLL in zconf.h [Vollant]
! - Add zlib.3 [Rodgers]
! - Update RFC URL in deflate.c and algorithm.txt [Mai]
! - Add zlib_dll_FAQ.txt to contrib [Truta]
! - Add UL to some constants [Truta]
! - Update minizip and vstudio [Vollant]
! - Remove vestigial NEED_DUMMY_RETURN from zconf.in.h
! - Expand use of NO_DUMMY_DECL to avoid all dummy structures
! - Added iostream3 to contrib [Schwardt]
! - Replace rewind() with fseek() for WinCE [Truta]
! - Improve setting of zlib format compression level flags
!     - Report 0 for huffman and rle strategies and for level == 0 or 1
!     - Report 2 only for level == 6
! - Only deal with 64K limit when necessary at compile time [Truta]
! - Allow TOO_FAR check to be turned off at compile time [Truta]
! - Add gzclearerr() function [Souza]
! - Add gzungetc() function
! 
! Changes in 1.2.0.1 (17 March 2003)
! - Add Z_RLE strategy for run-length encoding [Truta]
!     - When Z_RLE requested, restrict matches to distance one
!     - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE
! - Correct FASTEST compilation to allow level == 0
! - Clean up what gets compiled for FASTEST
! - Incorporate changes to zconf.in.h [Vollant]
!     - Refine detection of Turbo C need for dummy returns
!     - Refine ZLIB_DLL compilation
!     - Include additional header file on VMS for off_t typedef
! - Try to use _vsnprintf where it supplants vsprintf [Vollant]
! - Add some casts in inffast.c
! - Enchance comments in zlib.h on what happens if gzprintf() tries to
!   write more than 4095 bytes before compression
! - Remove unused state from inflateBackEnd()
! - Remove exit(0) from minigzip.c, example.c
! - Get rid of all those darn tabs
! - Add "check" target to Makefile.in that does the same thing as "test"
! - Add "mostlyclean" and "maintainer-clean" targets to Makefile.in
! - Update contrib/inflate86 [Anderson]
! - Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant]
! - Add msdos and win32 directories with makefiles [Truta]
! - More additions and improvements to the FAQ
! 
! Changes in 1.2.0 (9 March 2003)
! - New and improved inflate code
!     - About 20% faster
!     - Does not allocate 32K window unless and until needed
!     - Automatically detects and decompresses gzip streams
!     - Raw inflate no longer needs an extra dummy byte at end
!     - Added inflateBack functions using a callback interface--even faster
!       than inflate, useful for file utilities (gzip, zip)
!     - Added inflateCopy() function to record state for random access on
!       externally generated deflate streams (e.g. in gzip files)
!     - More readable code (I hope)
! - New and improved crc32()
!     - About 50% faster, thanks to suggestions from Rodney Brown
! - Add deflateBound() and compressBound() functions
! - Fix memory leak in deflateInit2()
! - Permit setting dictionary for raw deflate (for parallel deflate)
! - Fix const declaration for gzwrite()
! - Check for some malloc() failures in gzio.c
! - Fix bug in gzopen() on single-byte file 0x1f
! - Fix bug in gzread() on concatenated file with 0x1f at end of buffer
!   and next buffer doesn't start with 0x8b
! - Fix uncompress() to return Z_DATA_ERROR on truncated input
! - Free memory at end of example.c
! - Remove MAX #define in trees.c (conflicted with some libraries)
! - Fix static const's in deflate.c, gzio.c, and zutil.[ch]
! - Declare malloc() and free() in gzio.c if STDC not defined
! - Use malloc() instead of calloc() in zutil.c if int big enough
! - Define STDC for AIX
! - Add aix/ with approach for compiling shared library on AIX
! - Add HP-UX support for shared libraries in configure
! - Add OpenUNIX support for shared libraries in configure
! - Use $cc instead of gcc to build shared library
! - Make prefix directory if needed when installing
! - Correct Macintosh avoidance of typedef Byte in zconf.h
! - Correct Turbo C memory allocation when under Linux
! - Use libz.a instead of -lz in Makefile (assure use of compiled library)
! - Update configure to check for snprintf or vsnprintf functions and their
!   return value, warn during make if using an insecure function
! - Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that
!   is lost when library is used--resolution is to build new zconf.h
! - Documentation improvements (in zlib.h):
!     - Document raw deflate and inflate
!     - Update RFCs URL
!     - Point out that zlib and gzip formats are different
!     - Note that Z_BUF_ERROR is not fatal
!     - Document string limit for gzprintf() and possible buffer overflow
!     - Note requirement on avail_out when flushing
!     - Note permitted values of flush parameter of inflate()
! - Add some FAQs (and even answers) to the FAQ
! - Add contrib/inflate86/ for x86 faster inflate
! - Add contrib/blast/ for PKWare Data Compression Library decompression
! - Add contrib/puff/ simple inflate for deflate format description
  
  Changes in 1.1.4 (11 March 2002)
  - ZFREE was repeated on same allocation on some error conditions.
*************** Changes in 1.1.4 (11 March 2002)
*** 26,32 ****
    less than 32K.
  - force windowBits > 8 to avoid a bug in the encoder for a window size
    of 256 bytes. (A complete fix will be available in 1.1.5).
! 	
  Changes in 1.1.3 (9 July 1998)
  - fix "an inflate input buffer bug that shows up on rare but persistent
    occasions" (Mark)
--- 255,261 ----
    less than 32K.
  - force windowBits > 8 to avoid a bug in the encoder for a window size
    of 256 bytes. (A complete fix will be available in 1.1.5).
! 
  Changes in 1.1.3 (9 July 1998)
  - fix "an inflate input buffer bug that shows up on rare but persistent
    occasions" (Mark)
*************** Changes in 1.0.6 (19 Jan 1998)
*** 200,212 ****
  - added Makefile.nt (thanks to Stephen Williams)
  - added the unsupported "contrib" directory:
     contrib/asm386/ by Gilles Vollant <info@winimage.com>
! 	386 asm code replacing longest_match().
     contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
          A C++ I/O streams interface to the zlib gz* functions
     contrib/iostream2/  by Tyge Løvset <Tyge.Lovset@cmr.no>
! 	Another C++ I/O streams interface
     contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
! 	A very simple tar.gz file extractor using zlib
     contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
          How to use compress(), uncompress() and the gz* functions from VB.
  - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
--- 429,441 ----
  - added Makefile.nt (thanks to Stephen Williams)
  - added the unsupported "contrib" directory:
     contrib/asm386/ by Gilles Vollant <info@winimage.com>
!         386 asm code replacing longest_match().
     contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
          A C++ I/O streams interface to the zlib gz* functions
     contrib/iostream2/  by Tyge Løvset <Tyge.Lovset@cmr.no>
!         Another C++ I/O streams interface
     contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
!         A very simple tar.gz file extractor using zlib
     contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
          How to use compress(), uncompress() and the gz* functions from VB.
  - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
*************** Changes in 1.0.6 (19 Jan 1998)
*** 233,239 ****
  - add NEED_DUMMY_RETURN for Borland
  - use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
  - allow compilation with CC
! - defined STDC for OS/2 (David Charlap)	
  - limit external names to 8 chars for MVS (Thomas Lund)
  - in minigzip.c, use static buffers only for 16-bit systems
  - fix suffix check for "minigzip -d foo.gz"
--- 462,468 ----
  - add NEED_DUMMY_RETURN for Borland
  - use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
  - allow compilation with CC
! - defined STDC for OS/2 (David Charlap)
  - limit external names to 8 chars for MVS (Thomas Lund)
  - in minigzip.c, use static buffers only for 16-bit systems
  - fix suffix check for "minigzip -d foo.gz"
*************** Changes in 1.0.5 (3 Jan 98)
*** 258,264 ****
  - Eliminate memory leaks on error conditions in inflate
  - Removed some vestigial code in inflate
  - Update web address in README
!   
  Changes in 1.0.4 (24 Jul 96)
  - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
    bit, so the decompressor could decompress all the correct data but went
--- 487,493 ----
  - Eliminate memory leaks on error conditions in inflate
  - Removed some vestigial code in inflate
  - Update web address in README
! 
  Changes in 1.0.4 (24 Jul 96)
  - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
    bit, so the decompressor could decompress all the correct data but went
diff -Nrcpad gcc-3.4.3/zlib/ChangeLog.gcj gcc-4.0.0/zlib/ChangeLog.gcj
*** gcc-3.4.3/zlib/ChangeLog.gcj	Thu Jan 15 03:41:47 2004
--- gcc-4.0.0/zlib/ChangeLog.gcj	Mon Nov 29 23:51:45 2004
***************
*** 1,3 ****
--- 1,50 ----
+ 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure: Regenerate for libtool change.
+ 
+ 2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.in, aclocal.m4: Regenerate with automake 1.9.3.
+ 
+ 2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* zconf.h: Define NO_vsnprintf on Solaris 2.5.1.
+ 
+ 2004-10-11  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/14856:
+ 	* Imported zlib 1.2.1; merged local changes.
+ 
+ 2005-06-15  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	* Makefile.am: Remove useless multilib rules.
+ 	* configure.ac: Rewrite multilib support to use
+ 	features of recent automakes.
+ 	* aclocal.m4: Regenerate with Automake 1.8.5.
+ 	* Makefile.in: Regenerate with Automake 1.8.5.
+ 	* configure: Regenerate.
+ 
+ 2004-04-12  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* Makefile.am: Add in libz_a_CFLAGS as recommended by automake doc.
+ 	* Makefile.in: Regenerate with automake 1.7.9.
+ 	* aclocal.m4: Likewise.
+ 	* configure: Regenerate.
+ 
+ 2004-04-10  Kelley Cook  <kcook@gcc.gnu.org>
+ 
+ 	* configure.in: Rename file to ...
+ 	* configure.ac: ...this.
+ 	* Makefile.in: Regenerate.
+ 
+ 2004-04-09  Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+ 	* configure.in: Update to autoconf 2.59; clean up slightly.
+ 	* acinclude.m4: Update to autoconf 2.59.
+ 	* aclocal.m4: Regenerate. 
+ 	* Makefile.in: Regenerate.
+ 	* configure: Regenerate.
+ 
  2004-01-14  Kelley Cook  <kcook@gcc.gnu.org>
  
  	* configure.in: Add in AC_PREREQ(2.13)
diff -Nrcpad gcc-3.4.3/zlib/FAQ gcc-4.0.0/zlib/FAQ
*** gcc-3.4.3/zlib/FAQ	Mon Mar 11 22:11:16 2002
--- gcc-4.0.0/zlib/FAQ	Mon Oct 11 18:45:37 2004
***************
*** 1,8 ****
  
! 		Frequently Asked Questions about zlib
  
  
! If your question is not there, please check the zlib home page 
  http://www.zlib.org which may have more recent information.
  The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html
  
--- 1,8 ----
  
!                 Frequently Asked Questions about zlib
  
  
! If your question is not there, please check the zlib home page
  http://www.zlib.org which may have more recent information.
  The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html
  
*************** The lastest zlib FAQ is at http://www.gz
*** 13,26 ****
  
   2. Where can I get a Windows DLL version?
  
!     The zlib sources can be compiled without change to produce a DLL. If you
!     want a precompiled DLL, see http://www.winimage.com/zLibDll/ . Questions
!     about the zlib DLL should be sent to Gilles Vollant (info@winimage.com).
  
   3. Where can I get a Visual Basic interface to zlib?
  
      See
!         * http://www.winimage.com/zLibDll/cmp-z-it.zip
          * http://www.dogma.net/markn/articles/zlibtool/zlibtool.htm
          * contrib/visual-basic.txt in the zlib distribution
  
--- 13,27 ----
  
   2. Where can I get a Windows DLL version?
  
!     The zlib sources can be compiled without change to produce a DLL.
!     See the file win32/DLL_FAQ.txt in the zlib distribution.
!     Pointers to the precompiled DLL are found in the zlib web site at
!     http://www.zlib.org.
  
   3. Where can I get a Visual Basic interface to zlib?
  
      See
!         * http://www.winimage.com/zLibDll/
          * http://www.dogma.net/markn/articles/zlibtool/zlibtool.htm
          * contrib/visual-basic.txt in the zlib distribution
  
*************** The lastest zlib FAQ is at http://www.gz
*** 36,41 ****
--- 37,47 ----
      Before making the call, make sure that avail_in and avail_out are not
      zero. When setting the parameter flush equal to Z_FINISH, also make sure
      that avail_out is big enough to allow processing all pending input.
+     Note that a Z_BUF_ERROR is not fatal--another call to deflate() or
+     inflate() can be made with more input or output space. A Z_BUF_ERROR
+     may in fact be unavoidable depending on how the functions are used, since
+     it is not possible to tell whether or not there is more output pending
+     when strm.avail_out returns with zero.
  
   6. Where's the zlib documentation (man pages, etc.)?
  
*************** The lastest zlib FAQ is at http://www.gz
*** 61,74 ****
      If "make test" produces something like
  
         example.o(.text+0x154): undefined reference to `gzputc'
!       
      check that you don't have old files libz.* in /usr/lib, /usr/local/lib or
      /usr/X11R6/lib. Remove any old versions, then do "make install".
  
  10. I need a Delphi interface to zlib.
  
!     See the directories contrib/delphi and contrib/delphi2 in the zlib
!     distribution.
  
  11. Can zlib handle .zip archives?
  
--- 67,79 ----
      If "make test" produces something like
  
         example.o(.text+0x154): undefined reference to `gzputc'
! 
      check that you don't have old files libz.* in /usr/lib, /usr/local/lib or
      /usr/X11R6/lib. Remove any old versions, then do "make install".
  
  10. I need a Delphi interface to zlib.
  
!     See the contrib/delphi directory in the zlib distribution.
  
  11. Can zlib handle .zip archives?
  
*************** The lastest zlib FAQ is at http://www.gz
*** 85,100 ****
      ./configure -s
      make
  
! 14. Why does "make test" fail on Mac OS X?
  
!     Mac OS X already includes zlib as a shared library, and so -lz links the
!     shared library instead of the one that the "make" compiled. For zlib
!     1.1.3, the two are incompatible due to different compile-time
!     options. Simply change the -lz in the Makefile to libz.a, and it will use
!     the compiled library instead of the shared one and the "make test" will
!     succeed.
  
  15. I have a question about OttoPDF
  
      We are not the authors of OttoPDF. The real author is on the OttoPDF web
      site Joel Hainley jhainley@myndkryme.com.
--- 90,315 ----
      ./configure -s
      make
  
! 14. How do I install a shared zlib library on Unix?
  
!     make install
! 
!     However, many flavors of Unix come with a shared zlib already installed.
!     Before going to the trouble of compiling a shared version of zlib and
!     trying to install it, you may want to check if it's already there! If you
!     can #include <zlib.h>, it's there. The -lz option will probably link to it.
  
  15. I have a question about OttoPDF
  
      We are not the authors of OttoPDF. The real author is on the OttoPDF web
      site Joel Hainley jhainley@myndkryme.com.
+ 
+ 16. Why does gzip give an error on a file I make with compress/deflate?
+ 
+     The compress and deflate functions produce data in the zlib format, which
+     is different and incompatible with the gzip format. The gz* functions in
+     zlib on the other hand use the gzip format. Both the zlib and gzip
+     formats use the same compressed data format internally, but have different
+     headers and trailers around the compressed data.
+ 
+ 17. Ok, so why are there two different formats?
+ 
+     The gzip format was designed to retain the directory information about
+     a single file, such as the name and last modification date. The zlib
+     format on the other hand was designed for in-memory and communication
+     channel applications, and has a much more compact header and trailer and
+     uses a faster integrity check than gzip.
+ 
+ 18. Well that's nice, but how do I make a gzip file in memory?
+ 
+     You can request that deflate write the gzip format instead of the zlib
+     format using deflateInit2(). You can also request that inflate decode
+     the gzip format using inflateInit2(). Read zlib.h for more details.
+ 
+     Note that you cannot specify special gzip header contents (e.g. a file
+     name or modification date), nor will inflate tell you what was in the
+     gzip header. If you need to customize the header or see what's in it,
+     you can use the raw deflate and inflate operations and the crc32()
+     function and roll your own gzip encoding and decoding. Read the gzip
+     RFC 1952 for details of the header and trailer format.
+ 
+ 19. Is zlib thread-safe?
+ 
+     Yes. However any library routines that zlib uses and any application-
+     provided memory allocation routines must also be thread-safe. zlib's gz*
+     functions use stdio library routines, and most of zlib's functions use the
+     library memory allocation routines by default. zlib's Init functions allow
+     for the application to provide custom memory allocation routines.
+ 
+     Of course, you should only operate on any given zlib or gzip stream from a
+     single thread at a time.
+ 
+ 20. Can I use zlib in my commercial application?
+ 
+     Yes. Please read the license in zlib.h.
+ 
+ 21. Is zlib under the GNU license?
+ 
+     No. Please read the license in zlib.h.
+ 
+ 22. The license says that altered source versions must be "plainly marked". So
+     what exactly do I need to do to meet that requirement?
+ 
+     You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In
+     particular, the final version number needs to be changed to "f", and an
+     identification string should be appended to ZLIB_VERSION. Version numbers
+     x.x.x.f are reserved for modifications to zlib by others than the zlib
+     maintainers. For example, if the version of the base zlib you are altering
+     is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and
+     ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also
+     update the version strings in deflate.c and inftrees.c.
+ 
+     For altered source distributions, you should also note the origin and
+     nature of the changes in zlib.h, as well as in ChangeLog and README, along
+     with the dates of the alterations. The origin should include at least your
+     name (or your company's name), and an email address to contact for help or
+     issues with the library.
+ 
+     Note that distributing a compiled zlib library along with zlib.h and
+     zconf.h is also a source distribution, and so you should change
+     ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes
+     in zlib.h as you would for a full source distribution.
+ 
+ 23. Will zlib work on a big-endian or little-endian architecture, and can I
+     exchange compressed data between them?
+ 
+     Yes and yes.
+ 
+ 24. Will zlib work on a 64-bit machine?
+ 
+     It should. It has been tested on 64-bit machines, and has no dependence
+     on any data types being limited to 32-bits in length. If you have any
+     difficulties, please provide a complete problem report to zlib@gzip.org
+ 
+ 25. Will zlib decompress data from the PKWare Data Compression Library?
+ 
+     No. The PKWare DCL uses a completely different compressed data format
+     than does PKZIP and zlib. However, you can look in zlib's contrib/blast
+     directory for a possible solution to your problem.
+ 
+ 26. Can I access data randomly in a compressed stream?
+ 
+     No, not without some preparation. If when compressing you periodically
+     use Z_FULL_FLUSH, carefully write all the pending data at those points,
+     and keep an index of those locations, then you can start decompression
+     at those points. You have to be careful to not use Z_FULL_FLUSH too
+     often, since it can significantly degrade compression.
+ 
+ 27. Does zlib work on MVS, OS/390, CICS, etc.?
+ 
+     We don't know for sure. We have heard occasional reports of success on
+     these systems. If you do use it on one of these, please provide us with
+     a report, instructions, and patches that we can reference when we get
+     these questions. Thanks.
+ 
+ 28. Is there some simpler, easier to read version of inflate I can look at
+     to understand the deflate format?
+ 
+     First off, you should read RFC 1951. Second, yes. Look in zlib's
+     contrib/puff directory.
+ 
+ 29. Does zlib infringe on any patents?
+ 
+     As far as we know, no. In fact, that was originally the whole point behind
+     zlib. Look here for some more information:
+ 
+     http://www.gzip.org/#faq11
+ 
+ 30. Can zlib work with greater than 4 GB of data?
+ 
+     Yes. inflate() and deflate() will process any amount of data correctly.
+     Each call of inflate() or deflate() is limited to input and output chunks
+     of the maximum value that can be stored in the compiler's "unsigned int"
+     type, but there is no limit to the number of chunks. Note however that the
+     strm.total_in and strm_total_out counters may be limited to 4 GB. These
+     counters are provided as a convenience and are not used internally by
+     inflate() or deflate(). The application can easily set up its own counters
+     updated after each call of inflate() or deflate() to count beyond 4 GB.
+     compress() and uncompress() may be limited to 4 GB, since they operate in a
+     single call. gzseek() and gztell() may be limited to 4 GB depending on how
+     zlib is compiled. See the zlibCompileFlags() function in zlib.h.
+ 
+     The word "may" appears several times above since there is a 4 GB limit
+     only if the compiler's "long" type is 32 bits. If the compiler's "long"
+     type is 64 bits, then the limit is 16 exabytes.
+ 
+ 31. Does zlib have any security vulnerabilities?
+ 
+     The only one that we are aware of is potentially in gzprintf(). If zlib
+     is compiled to use sprintf() or vsprintf(), then there is no protection
+     against a buffer overflow of a 4K string space, other than the caller of
+     gzprintf() assuring that the output will not exceed 4K. On the other
+     hand, if zlib is compiled to use snprintf() or vsnprintf(), which should
+     normally be the case, then there is no vulnerability. The ./configure
+     script will display warnings if an insecure variation of sprintf() will
+     be used by gzprintf(). Also the zlibCompileFlags() function will return
+     information on what variant of sprintf() is used by gzprintf().
+ 
+     If you don't have snprintf() or vsnprintf() and would like one, you can
+     find a portable implementation here:
+ 
+         http://www.ijs.si/software/snprintf/
+ 
+     Note that you should be using the most recent version of zlib. Versions
+     1.1.3 and before were subject to a double-free vulnerability.
+ 
+ 32. Is there a Java version of zlib?
+ 
+     Probably what you want is to use zlib in Java. zlib is already included
+     as part of the Java SDK in the java.util.zip package. If you really want
+     a version of zlib written in the Java language, look on the zlib home
+     page for links: http://www.zlib.org/
+ 
+ 33. I get this or that compiler or source-code scanner warning when I crank it
+     up to maximally-pendantic. Can't you guys write proper code?
+ 
+     Many years ago, we gave up attempting to avoid warnings on every compiler
+     in the universe. It just got to be a waste of time, and some compilers
+     were downright silly. So now, we simply make sure that the code always
+     works.
+ 
+ 34. Will zlib read the (insert any ancient or arcane format here) compressed
+     data format?
+ 
+     Probably not. Look in the comp.compression FAQ for pointers to various
+     formats and associated software.
+ 
+ 35. How can I encrypt/decrypt zip files with zlib?
+ 
+     zlib doesn't support encryption. The original PKZIP encryption is very weak
+     and can be broken with freely available programs. To get strong encryption,
+     use gpg ( http://www.gnupg.org/ ) which already includes zlib compression.
+     For PKZIP compatible "encryption", look at http://www.info-zip.org/
+ 
+ 36. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
+ 
+     "gzip" is the gzip format, and "deflate" is the zlib format. They should
+     probably have called the second one "zlib" instead to avoid confusion
+     with the raw deflate compressed data format. While the HTTP 1.1 RFC 2616
+     correctly points to the zlib specification in RFC 1950 for the "deflate"
+     transfer encoding, there have been reports of servers and browsers that
+     incorrectly produce or expect raw deflate data per the deflate
+     specficiation in RFC 1951, most notably Microsoft. So even though the
+     "deflate" transfer encoding using the zlib format would be the more
+     efficient approach (and in fact exactly what the zlib format was designed
+     for), using the "gzip" transfer encoding is probably more reliable due to
+     an unfortunate choice of name on the part of the HTTP 1.1 authors.
+ 
+     Bottom line: use the gzip format for HTTP 1.1 encoding.
+ 
+ 37. Does zlib support the new "Deflate64" format introduced by PKWare?
+ 
+     No. PKWare has apparently decided to keep that format proprietary, since
+     they have not documented it as they have previous compression formats.
+     In any case, the compression improvements are so modest compared to other
+     more modern approaches, that it's not worth the effort to implement.
+ 
+ 38. Can you please sign these lengthy legal documents and fax them back to us
+     so that we can use your software in our product?
+ 
+     No. Go away. Shoo.
diff -Nrcpad gcc-3.4.3/zlib/INDEX gcc-4.0.0/zlib/INDEX
*** gcc-3.4.3/zlib/INDEX	Mon Mar 11 21:49:11 2002
--- gcc-4.0.0/zlib/INDEX	Mon Oct 11 18:45:37 2004
***************
*** 1,86 ****
! ChangeLog		history of changes
! INDEX			this file
! FAQ			Frequently Asked Questions about zlib
! Make_vms.com		script for Vax/VMS
! Makefile		makefile for Unix (generated by configure)
! Makefile.in		makefile for Unix (template for configure)
! Makefile.riscos 	makefile for RISCOS
! README			guess what
! algorithm.txt		description of the (de)compression algorithm
! configure		configure script for Unix
! descrip.mms		makefile for Vax/VMS
! zlib.3			mini man page for zlib (volunteers to write full
! 			man pages from zlib.h welcome. write to jloup@gzip.org)
! 
! amiga/Makefile.sas	makefile for Amiga SAS/C
! amiga/Makefile.pup      makefile for Amiga powerUP SAS/C PPC
! 
! msdos/Makefile.w32      makefile for Microsoft Visual C++ 32-bit
! msdos/Makefile.b32	makefile for Borland C++   32-bit
! msdos/Makefile.bor	makefile for Borland C/C++ 16-bit
! msdos/Makefile.dj2	makefile for DJGPP 2.x
! msdos/Makefile.emx	makefile for EMX 0.9c (32-bit DOS/OS2)
! msdos/Makefile.msc	makefile for Microsoft C 16-bit
! msdos/Makefile.tc	makefile for Turbo C
! msdos/Makefile.wat	makefile for Watcom C
! msdos/zlib.def        	definition file for Windows DLL
! msdos/zlib.rc         	definition file for Windows DLL
! 
! nt/Makefile.nt		makefile for Windows NT
! nt/zlib.dnt		definition file for Windows NT DLL
! nt/Makefile.emx		makefile for EMX 0.9c/RSXNT 1.41 (Win32 Intel)
! nt/Makefile.gcc		makefile for Windows NT using GCC (mingw32)
  
  
! 		zlib public header files (must be kept):
  zconf.h
  zlib.h
  
! 		private source files used to build the zlib library:
  adler32.c
  compress.c
  crc32.c
  deflate.c
  deflate.h
  gzio.c
! infblock.c
! infblock.h
! infcodes.c
! infcodes.h
  inffast.c
  inffast.h
  inflate.c
  inftrees.c
  inftrees.h
- infutil.c
- infutil.h
- maketree.c
  trees.c
  uncompr.c
  zutil.c
  zutil.h
  
! 		source files for sample programs:
  example.c
  minigzip.c
  
! 		unsupported contribution by third parties
! 
! contrib/asm386/ by Gilles Vollant <info@winimage.com>
! 	386 asm code replacing longest_match().
! 
! contrib/minizip/ by Gilles Vollant <info@winimage.com>
! 	Mini zip and unzip based on zlib
!         See http://www.winimage.com/zLibDll/unzip.html
! 
! contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
!         A C++ I/O streams interface to the zlib gz* functions
! 
! contrib/iostream2/  by Tyge Løvset <Tyge.Lovset@cmr.no>
! 	Another C++ I/O streams interface
! 
! contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
! 	A very simple tar.gz extractor using zlib
! 
! contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
!         How to use compress(), uncompress() and the gz* functions from VB.
--- 1,48 ----
! ChangeLog       history of changes
! FAQ             Frequently Asked Questions about zlib
! INDEX           this file
! Makefile        makefile for Unix (generated by configure)
! Makefile.in     makefile for Unix (template for configure)
! README          guess what
! algorithm.txt   description of the (de)compression algorithm
! configure       configure script for Unix
! zconf.in.h      template for zconf.h (used by configure)
  
+ msdos/          makefiles for MSDOS
+ old/            makefiles for various architectures and zlib documentation
+                 files that have not yet been updated for zlib 1.2.x
+ qnx/            makefiles for QNX
+ win32/          makefiles for Windows
  
!                 zlib public header files (must be kept):
  zconf.h
  zlib.h
  
!                 private source files used to build the zlib library:
  adler32.c
  compress.c
  crc32.c
+ crc32.h
  deflate.c
  deflate.h
  gzio.c
! infback.c
  inffast.c
  inffast.h
+ inffixed.h
  inflate.c
+ inflate.h
  inftrees.c
  inftrees.h
  trees.c
+ trees.h
  uncompr.c
  zutil.c
  zutil.h
  
!                 source files for sample programs:
  example.c
  minigzip.c
  
!                 unsupported contribution by third parties
! See contrib/README.contrib
diff -Nrcpad gcc-3.4.3/zlib/Make_vms.com gcc-4.0.0/zlib/Make_vms.com
*** gcc-3.4.3/zlib/Make_vms.com	Mon Mar 11 21:49:11 2002
--- gcc-4.0.0/zlib/Make_vms.com	Thu Jan  1 00:00:00 1970
***************
*** 1,115 ****
- $! make libz under VMS
- $! written by Martin P.J. Zinser <m.zinser@gsi.de>
- $!
- $! Look for the compiler used
- $!
- $ ccopt = ""
- $ if f$getsyi("HW_MODEL").ge.1024
- $ then
- $  ccopt = "/prefix=all"+ccopt
- $  comp  = "__decc__=1"
- $  if f$trnlnm("SYS").eqs."" then define sys sys$library:
- $ else
- $  if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").eqs.""
- $   then
- $    comp  = "__vaxc__=1"
- $    if f$trnlnm("SYS").eqs."" then define sys sys$library:
- $   else
- $    if f$trnlnm("SYS").eqs."" then define sys decc$library_include:
- $    ccopt = "/decc/prefix=all"+ccopt
- $    comp  = "__decc__=1"
- $  endif
- $ endif
- $!
- $! Build the thing plain or with mms
- $!
- $ write sys$output "Compiling Zlib sources ..."
- $ if f$search("SYS$SYSTEM:MMS.EXE").eqs.""
- $  then
- $   dele example.obj;*,minigzip.obj;*
- $   CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" -
-                 adler32.c zlib.h zconf.h
- $   CALL MAKE compress.OBJ "CC ''CCOPT' compress" -
-                 compress.c zlib.h zconf.h
- $   CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" -
-                 crc32.c zlib.h zconf.h
- $   CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" -
-                 deflate.c deflate.h zutil.h zlib.h zconf.h
- $   CALL MAKE gzio.OBJ "CC ''CCOPT' gzio" -
-                 gzio.c zutil.h zlib.h zconf.h
- $   CALL MAKE infblock.OBJ "CC ''CCOPT' infblock" -
-                 infblock.c zutil.h zlib.h zconf.h infblock.h
- $   CALL MAKE infcodes.OBJ "CC ''CCOPT' infcodes" -
-                 infcodes.c zutil.h zlib.h zconf.h inftrees.h
- $   CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" -
-                 inffast.c zutil.h zlib.h zconf.h inffast.h
- $   CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" -
-                 inflate.c zutil.h zlib.h zconf.h infblock.h
- $   CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" -
-                 inftrees.c zutil.h zlib.h zconf.h inftrees.h
- $   CALL MAKE infutil.OBJ "CC ''CCOPT' infutil" -
-                 infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
- $   CALL MAKE trees.OBJ "CC ''CCOPT' trees" -
-                 trees.c deflate.h zutil.h zlib.h zconf.h
- $   CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" -
-                 uncompr.c zlib.h zconf.h
- $   CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" -
-                 zutil.c zutil.h zlib.h zconf.h
- $   write sys$output "Building Zlib ..."
- $   CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ
- $   write sys$output "Building example..."
- $   CALL MAKE example.OBJ "CC ''CCOPT' example" -
-                 example.c zlib.h zconf.h
- $   call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb
- $   write sys$output "Building minigzip..."
- $   CALL MAKE minigzip.OBJ "CC ''CCOPT' minigzip" -
-                 minigzip.c zlib.h zconf.h
- $   call make minigzip.exe - 
-                 "LINK minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib" - 
-                 minigzip.obj libz.olb
- $  else
- $   mms/macro=('comp')
- $  endif
- $ write sys$output "Zlib build completed"
- $ exit
- $!
- $!
- $MAKE: SUBROUTINE   !SUBROUTINE TO CHECK DEPENDENCIES
- $ V = 'F$Verify(0)
- $! P1 = What we are trying to make
- $! P2 = Command to make it
- $! P3 - P8  What it depends on
- $
- $ If F$Search(P1) .Eqs. "" Then Goto Makeit
- $ Time = F$CvTime(F$File(P1,"RDT"))
- $arg=3
- $Loop:
- $       Argument = P'arg
- $       If Argument .Eqs. "" Then Goto Exit
- $       El=0
- $Loop2:
- $       File = F$Element(El," ",Argument)
- $       If File .Eqs. " " Then Goto Endl
- $       AFile = ""
- $Loop3:
- $       OFile = AFile
- $       AFile = F$Search(File)
- $       If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
- $       If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
- $       Goto Loop3
- $NextEL:
- $       El = El + 1
- $       Goto Loop2
- $EndL:
- $ arg=arg+1
- $ If arg .Le. 8 Then Goto Loop
- $ Goto Exit
- $
- $Makeit:
- $ VV=F$VERIFY(0)
- $ write sys$output P2
- $ 'P2
- $ VV='F$Verify(VV)
- $Exit:
- $ If V Then Set Verify
- $ENDSUBROUTINE
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/Makefile.am gcc-4.0.0/zlib/Makefile.am
*** gcc-3.4.3/zlib/Makefile.am	Tue Jan 28 01:48:38 2003
--- gcc-4.0.0/zlib/Makefile.am	Mon Oct 11 18:45:37 2004
***************
*** 1,19 ****
  ## Process this file with automake to create Makefile.in.
  
! AUTOMAKE_OPTIONS = cygnus
! 
! # Multilib support variables.
! MULTISRCTOP =
! MULTIBUILDTOP =
! MULTIDIRS =
! MULTISUBDIR =
! MULTIDO = true
! MULTICLEAN = true
  
! ZLIB_SOURCES = adler32.c compress.c crc32.c deflate.c deflate.h \
! gzio.c infblock.c infblock.h infcodes.c infcodes.h inffast.c inffast.h \
! inffixed.h inflate.c inftrees.c inftrees.h infutil.c infutil.h trees.c \
! trees.h uncompr.c zconf.h zlib.h zutil.c zutil.h
  
  if TARGET_LIBRARY
  noinst_LTLIBRARIES = libzgcj_convenience.la
--- 1,11 ----
  ## Process this file with automake to create Makefile.in.
  
! AUTOMAKE_OPTIONS = 1.8 cygnus
  
! ZLIB_SOURCES = adler32.c compress.c crc32.c crc32.h deflate.c \
! deflate.h gzio.c infback.c inffast.c inffast.h inffixed.h inflate.c \
! inflate.h inftrees.c inftrees.h trees.c trees.h uncompr.c zconf.h \
! zconf.in.h zlib.h zutil.c zutil.h
  
  if TARGET_LIBRARY
  noinst_LTLIBRARIES = libzgcj_convenience.la
*************** libzgcj_convenience_la_SOURCES = $(ZLIB_
*** 21,26 ****
--- 13,19 ----
  else
  toolexeclib_LIBRARIES = libz.a
  libz_a_SOURCES = $(ZLIB_SOURCES)
+ libz_a_CFLAGS = $(AM_CFLAGS)
  endif
  
  # Work around what appears to be a GNU make bug handling MAKEFLAGS
*************** AM_MAKEFLAGS = \
*** 63,89 ****
  	"PICFLAG=$(PICFLAG)" \
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
- 
- # Multilib support.
- .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
- 	maintainer-clean-multi
- 
- all-am: all-multi
- install-am: install-multi
- mostlyclean-am: mostlyclean-multi
- clean-am: clean-multi
- distclean-am: distclean-multi
- maintainer-clean-am: maintainer-clean-multi
- 
- all-multi:
- 	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
- install-multi:
- 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
- mostlyclean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean
- clean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean
- distclean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
- maintainer-clean-multi:
- 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
--- 56,58 ----
diff -Nrcpad gcc-3.4.3/zlib/Makefile.in gcc-4.0.0/zlib/Makefile.in
*** gcc-3.4.3/zlib/Makefile.in	Tue Jan 28 01:48:38 2003
--- gcc-4.0.0/zlib/Makefile.in	Wed Nov 24 21:04:28 2004
***************
*** 1,6 ****
! # Makefile.in generated automatically by automake 1.4 from Makefile.am
  
! # Copyright (C) 1994, 1995-8, 1999 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.
--- 1,8 ----
! # 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.
***************
*** 10,114 ****
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
  
! SHELL = @SHELL@
  
  srcdir = @srcdir@
  top_srcdir = @top_srcdir@
  VPATH = @srcdir@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- 
- bindir = @bindir@
- sbindir = @sbindir@
- libexecdir = @libexecdir@
- datadir = @datadir@
- sysconfdir = @sysconfdir@
- sharedstatedir = @sharedstatedir@
- localstatedir = @localstatedir@
- libdir = @libdir@
- infodir = @infodir@
- mandir = @mandir@
- includedir = @includedir@
- oldincludedir = /usr/include
- 
- DESTDIR =
- 
  pkgdatadir = $(datadir)/@PACKAGE@
  pkglibdir = $(libdir)/@PACKAGE@
  pkgincludedir = $(includedir)/@PACKAGE@
- 
  top_builddir = .
! 
! ACLOCAL = @ACLOCAL@
! AUTOCONF = @AUTOCONF@
! AUTOMAKE = @AUTOMAKE@
! AUTOHEADER = @AUTOHEADER@
! 
  INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! transform = @program_transform_name@
! 
  NORMAL_INSTALL = :
  PRE_INSTALL = :
  POST_INSTALL = :
  NORMAL_UNINSTALL = :
  PRE_UNINSTALL = :
  POST_UNINSTALL = :
- build_alias = @build_alias@
  build_triplet = @build@
- host_alias = @host_alias@
  host_triplet = @host@
- target_alias = @target_alias@
  target_triplet = @target@
! AS = @AS@
  CC = @CC@
  COMPPATH = @COMPPATH@
  CPP = @CPP@
! CXX = @CXX@
! CXXCPP = @CXXCPP@
! DLLTOOL = @DLLTOOL@
  EXEEXT = @EXEEXT@
! GCJ = @GCJ@
! GCJFLAGS = @GCJFLAGS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
  MAINT = @MAINT@
  MAKEINFO = @MAKEINFO@
- OBJDUMP = @OBJDUMP@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
  RANLIB = @RANLIB@
  STRIP = @STRIP@
  VERSION = @VERSION@
  mkinstalldirs = @mkinstalldirs@
  target_all = @target_all@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
! zlib_basedir = @zlib_basedir@
! 
! AUTOMAKE_OPTIONS = cygnus
! 
! # Multilib support variables.
! MULTISRCTOP = 
! MULTIBUILDTOP = 
! MULTIDIRS = 
! MULTISUBDIR = 
! MULTIDO = true
! MULTICLEAN = true
! 
! ZLIB_SOURCES = adler32.c compress.c crc32.c deflate.c deflate.h \
! gzio.c infblock.c infblock.h infcodes.c infcodes.h inffast.c inffast.h \
! inffixed.h inflate.c inftrees.c inftrees.h infutil.c infutil.h trees.c \
! trees.h uncompr.c zconf.h zlib.h zutil.c zutil.h
! 
  
! @TARGET_LIBRARY_TRUE@noinst_LTLIBRARIES = @TARGET_LIBRARY_TRUE@libzgcj_convenience.la
! @TARGET_LIBRARY_TRUE@libzgcj_convenience_la_SOURCES = @TARGET_LIBRARY_TRUE@$(ZLIB_SOURCES)
! @TARGET_LIBRARY_FALSE@toolexeclib_LIBRARIES = @TARGET_LIBRARY_FALSE@libz.a
! @TARGET_LIBRARY_FALSE@libz_a_SOURCES = @TARGET_LIBRARY_FALSE@$(ZLIB_SOURCES)
  
  # 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
--- 12,223 ----
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
+ @SET_MAKE@
  
! 
! SOURCES = $(libz_a_SOURCES) $(libzgcj_convenience_la_SOURCES)
  
  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 = $(srcdir)/../config.guess $(srcdir)/../config.sub README \
! 	ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
! 	$(top_srcdir)/configure $(am__configure_deps) \
! 	$(srcdir)/../mkinstalldirs $(srcdir)/../compile \
! 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
! 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
! 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
! 	$(srcdir)/../compile $(srcdir)/../compile \
! 	$(srcdir)/../ltmain.sh $(srcdir)/../config.guess \
! 	$(srcdir)/../config.sub
! subdir = .
! ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(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 \
!  configure.lineno configure.status.lineno
! CONFIG_CLEAN_FILES =
! 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)$(toolexeclibdir)"
! toolexeclibLIBRARIES_INSTALL = $(INSTALL_DATA)
! LIBRARIES = $(toolexeclib_LIBRARIES)
! AR = ar
! ARFLAGS = cru
! libz_a_AR = $(AR) $(ARFLAGS)
! libz_a_LIBADD =
! am__objects_1 = libz_a-adler32.$(OBJEXT) libz_a-compress.$(OBJEXT) \
! 	libz_a-crc32.$(OBJEXT) libz_a-deflate.$(OBJEXT) \
! 	libz_a-gzio.$(OBJEXT) libz_a-infback.$(OBJEXT) \
! 	libz_a-inffast.$(OBJEXT) libz_a-inflate.$(OBJEXT) \
! 	libz_a-inftrees.$(OBJEXT) libz_a-trees.$(OBJEXT) \
! 	libz_a-uncompr.$(OBJEXT) libz_a-zutil.$(OBJEXT)
! @TARGET_LIBRARY_FALSE@am_libz_a_OBJECTS = $(am__objects_1)
! libz_a_OBJECTS = $(am_libz_a_OBJECTS)
! LTLIBRARIES = $(noinst_LTLIBRARIES)
! libzgcj_convenience_la_LIBADD =
! am__objects_2 = adler32.lo compress.lo crc32.lo deflate.lo gzio.lo \
! 	infback.lo inffast.lo inflate.lo inftrees.lo trees.lo \
! 	uncompr.lo zutil.lo
! @TARGET_LIBRARY_TRUE@am_libzgcj_convenience_la_OBJECTS =  \
! @TARGET_LIBRARY_TRUE@	$(am__objects_2)
! libzgcj_convenience_la_OBJECTS = $(am_libzgcj_convenience_la_OBJECTS)
! @TARGET_LIBRARY_TRUE@am_libzgcj_convenience_la_rpath =
! DEFAULT_INCLUDES = -I. -I$(srcdir)
! depcomp =
! am__depfiles_maybe =
! COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
! 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
! 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
! 	$(AM_CFLAGS) $(CFLAGS)
! CCLD = $(CC)
! LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
! 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
! SOURCES = $(libz_a_SOURCES) $(libzgcj_convenience_la_SOURCES)
! MULTISRCTOP = 
! MULTIBUILDTOP = 
! MULTIDIRS = 
! MULTISUBDIR = 
! MULTIDO = true
! MULTICLEAN = true
! ETAGS = etags
! CTAGS = ctags
! ACLOCAL = @ACLOCAL@
! AMDEP_FALSE = @AMDEP_FALSE@
! AMDEP_TRUE = @AMDEP_TRUE@
! AMTAR = @AMTAR@
! AUTOCONF = @AUTOCONF@
! AUTOHEADER = @AUTOHEADER@
! AUTOMAKE = @AUTOMAKE@
! AWK = @AWK@
  CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
  COMPPATH = @COMPPATH@
  CPP = @CPP@
! CPPFLAGS = @CPPFLAGS@
! CYGPATH_W = @CYGPATH_W@
! DEFS = @DEFS@
! DEPDIR = @DEPDIR@
! ECHO_C = @ECHO_C@
! ECHO_N = @ECHO_N@
! ECHO_T = @ECHO_T@
! EGREP = @EGREP@
  EXEEXT = @EXEEXT@
! INSTALL_DATA = @INSTALL_DATA@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@
! INSTALL_SCRIPT = @INSTALL_SCRIPT@
! INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
! LIBOBJS = @LIBOBJS@
! LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
  MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  MAKEINFO = @MAKEINFO@
  OBJEXT = @OBJEXT@
  PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
  RANLIB = @RANLIB@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
  STRIP = @STRIP@
+ TARGET_LIBRARY_FALSE = @TARGET_LIBRARY_FALSE@
+ TARGET_LIBRARY_TRUE = @TARGET_LIBRARY_TRUE@
  VERSION = @VERSION@
+ ac_ct_CC = @ac_ct_CC@
+ 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__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@
+ exec_prefix = @exec_prefix@
+ 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@
  mkinstalldirs = @mkinstalldirs@
+ multi_basedir = @multi_basedir@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
  target_all = @target_all@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
  toolexecdir = @toolexecdir@
  toolexeclibdir = @toolexeclibdir@
! AUTOMAKE_OPTIONS = 1.8 cygnus
! ZLIB_SOURCES = adler32.c compress.c crc32.c crc32.h deflate.c \
! deflate.h gzio.c infback.c inffast.c inffast.h inffixed.h inflate.c \
! inflate.h inftrees.c inftrees.h trees.c trees.h uncompr.c zconf.h \
! zconf.in.h zlib.h zutil.c zutil.h
  
! @TARGET_LIBRARY_TRUE@noinst_LTLIBRARIES = libzgcj_convenience.la
! @TARGET_LIBRARY_TRUE@libzgcj_convenience_la_SOURCES = $(ZLIB_SOURCES)
! @TARGET_LIBRARY_FALSE@toolexeclib_LIBRARIES = libz.a
! @TARGET_LIBRARY_FALSE@libz_a_SOURCES = $(ZLIB_SOURCES)
! @TARGET_LIBRARY_FALSE@libz_a_CFLAGS = $(AM_CFLAGS)
  
  # 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
*************** AM_MAKEFLAGS = \
*** 151,495 ****
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! CONFIG_CLEAN_FILES = 
! LIBRARIES =  $(toolexeclib_LIBRARIES)
! 
! 
! DEFS = @DEFS@ -I. -I$(srcdir) 
! CPPFLAGS = @CPPFLAGS@
! LDFLAGS = @LDFLAGS@
! LIBS = @LIBS@
! libz_a_LIBADD = 
! @TARGET_LIBRARY_FALSE@libz_a_OBJECTS =  adler32.$(OBJEXT) \
! @TARGET_LIBRARY_FALSE@compress.$(OBJEXT) crc32.$(OBJEXT) \
! @TARGET_LIBRARY_FALSE@deflate.$(OBJEXT) gzio.$(OBJEXT) \
! @TARGET_LIBRARY_FALSE@infblock.$(OBJEXT) infcodes.$(OBJEXT) \
! @TARGET_LIBRARY_FALSE@inffast.$(OBJEXT) inflate.$(OBJEXT) \
! @TARGET_LIBRARY_FALSE@inftrees.$(OBJEXT) infutil.$(OBJEXT) \
! @TARGET_LIBRARY_FALSE@trees.$(OBJEXT) uncompr.$(OBJEXT) zutil.$(OBJEXT)
! AR = ar
! LTLIBRARIES =  $(noinst_LTLIBRARIES)
! 
! libzgcj_convenience_la_LDFLAGS = 
! libzgcj_convenience_la_LIBADD = 
! @TARGET_LIBRARY_TRUE@libzgcj_convenience_la_OBJECTS =  adler32.lo \
! @TARGET_LIBRARY_TRUE@compress.lo crc32.lo deflate.lo gzio.lo \
! @TARGET_LIBRARY_TRUE@infblock.lo infcodes.lo inffast.lo inflate.lo \
! @TARGET_LIBRARY_TRUE@inftrees.lo infutil.lo trees.lo uncompr.lo \
! @TARGET_LIBRARY_TRUE@zutil.lo
! CFLAGS = @CFLAGS@
! COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
! CCLD = $(CC)
! LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
! DIST_COMMON =  README ChangeLog Makefile.am Makefile.in acinclude.m4 \
! aclocal.m4 configure configure.in
! 
! 
! DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
! 
! TAR = gtar
! GZIP_ENV = --best
! SOURCES = $(libz_a_SOURCES) $(libzgcj_convenience_la_SOURCES)
! OBJECTS = $(libz_a_OBJECTS) $(libzgcj_convenience_la_OBJECTS)
  
- all: all-redirect
  .SUFFIXES:
! .SUFFIXES: .S .c .lo .o .obj .s
! $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
! 	cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
! 
! Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
! 	cd $(top_builddir) \
! 	  && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
! 
! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in  acinclude.m4
! 	cd $(srcdir) && $(ACLOCAL)
  
! config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
  	$(SHELL) ./config.status --recheck
- $(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
- 	cd $(srcdir) && $(AUTOCONF)
- 
- mostlyclean-toolexeclibLIBRARIES:
- 
- clean-toolexeclibLIBRARIES:
- 	-test -z "$(toolexeclib_LIBRARIES)" || rm -f $(toolexeclib_LIBRARIES)
- 
- distclean-toolexeclibLIBRARIES:
- 
- maintainer-clean-toolexeclibLIBRARIES:
  
  install-toolexeclibLIBRARIES: $(toolexeclib_LIBRARIES)
  	@$(NORMAL_INSTALL)
! 	$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir)
  	@list='$(toolexeclib_LIBRARIES)'; for p in $$list; do \
  	  if test -f $$p; then \
! 	    echo " $(INSTALL_DATA) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \
! 	    $(INSTALL_DATA) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \
  	  else :; fi; \
  	done
  	@$(POST_INSTALL)
  	@list='$(toolexeclib_LIBRARIES)'; for p in $$list; do \
  	  if test -f $$p; then \
! 	    echo " $(RANLIB) $(DESTDIR)$(toolexeclibdir)/$$p"; \
! 	    $(RANLIB) $(DESTDIR)$(toolexeclibdir)/$$p; \
  	  else :; fi; \
  	done
  
  uninstall-toolexeclibLIBRARIES:
  	@$(NORMAL_UNINSTALL)
! 	list='$(toolexeclib_LIBRARIES)'; for p in $$list; do \
! 	  rm -f $(DESTDIR)$(toolexeclibdir)/$$p; \
  	done
  
  .c.o:
  	$(COMPILE) -c $<
  
- # FIXME: We should only use cygpath when building on Windows,
- # and only if it is available.
  .c.obj:
! 	$(COMPILE) -c `cygpath -w $<`
  
! .s.o:
! 	$(COMPILE) -c $<
  
! .S.o:
! 	$(COMPILE) -c $<
  
! mostlyclean-compile:
! 	-rm -f *.o core *.core
! 	-rm -f *.$(OBJEXT)
  
! clean-compile:
  
! distclean-compile:
! 	-rm -f *.tab.c
  
! maintainer-clean-compile:
  
! .c.lo:
! 	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
  
! .s.lo:
! 	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
  
! .S.lo:
! 	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
  
! mostlyclean-libtool:
! 	-rm -f *.lo
  
! clean-libtool:
! 	-rm -rf .libs _libs
  
! distclean-libtool:
  
! maintainer-clean-libtool:
  
! libz.a: $(libz_a_OBJECTS) $(libz_a_DEPENDENCIES)
! 	-rm -f libz.a
! 	$(AR) cru libz.a $(libz_a_OBJECTS) $(libz_a_LIBADD)
! 	$(RANLIB) libz.a
  
! mostlyclean-noinstLTLIBRARIES:
  
! clean-noinstLTLIBRARIES:
! 	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
  
! distclean-noinstLTLIBRARIES:
  
! maintainer-clean-noinstLTLIBRARIES:
  
! libzgcj_convenience.la: $(libzgcj_convenience_la_OBJECTS) $(libzgcj_convenience_la_DEPENDENCIES)
! 	$(LINK)  $(libzgcj_convenience_la_LDFLAGS) $(libzgcj_convenience_la_OBJECTS) $(libzgcj_convenience_la_LIBADD) $(LIBS)
  
! tags: TAGS
  
! ID: $(HEADERS) $(SOURCES) $(LISP)
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	here=`pwd` && cd $(srcdir) \
! 	  && mkid -f$$here/ID $$unique $(LISP)
  
! TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
  	tags=; \
  	here=`pwd`; \
! 	list='$(SOURCES) $(HEADERS)'; \
! 	unique=`for i in $$list; do echo $$i; done | \
! 	  awk '    { files[$$0] = 1; } \
  	       END { for (i in files) print i; }'`; \
! 	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
! 	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
! 
! mostlyclean-tags:
  
! clean-tags:
  
  distclean-tags:
! 	-rm -f TAGS ID
! 
! maintainer-clean-tags:
! 
! distdir = $(PACKAGE)-$(VERSION)
! top_distdir = $(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
! 	-rm -rf $(distdir)
! 	GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
! 	mkdir $(distdir)/=build
! 	mkdir $(distdir)/=inst
! 	dc_install_base=`cd $(distdir)/=inst && pwd`; \
! 	cd $(distdir)/=build \
! 	  && ../configure --srcdir=.. --prefix=$$dc_install_base \
! 	  && $(MAKE) $(AM_MAKEFLAGS) \
! 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
! 	  && $(MAKE) $(AM_MAKEFLAGS) check \
! 	  && $(MAKE) $(AM_MAKEFLAGS) install \
! 	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
! 	  && $(MAKE) $(AM_MAKEFLAGS) dist
! 	-rm -rf $(distdir)
! 	@banner="$(distdir).tar.gz is ready for distribution"; \
! 	dashes=`echo "$$banner" | sed s/./=/g`; \
! 	echo "$$dashes"; \
! 	echo "$$banner"; \
! 	echo "$$dashes"
! dist: distdir
! 	-chmod -R a+r $(distdir)
! 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
! 	-rm -rf $(distdir)
! dist-all: distdir
! 	-chmod -R a+r $(distdir)
! 	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
! 	-rm -rf $(distdir)
! distdir: $(DISTFILES)
! 	-rm -rf $(distdir)
! 	mkdir $(distdir)
! 	-chmod 777 $(distdir)
! 	@for file in $(DISTFILES); do \
! 	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
! 	  if test -d $$d/$$file; then \
! 	    cp -pr $$d/$$file $(distdir)/$$file; \
! 	  else \
! 	    test -f $(distdir)/$$file \
! 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
! 	    || cp -p $$d/$$file $(distdir)/$$file || :; \
! 	  fi; \
! 	done
! info-am:
! info: info-am
! dvi-am:
! dvi: dvi-am
  check-am:
  check: check-am
! installcheck-am:
! installcheck: installcheck-am
! install-info-am: 
! install-info: install-info-am
! install-exec-am: install-toolexeclibLIBRARIES
  install-exec: install-exec-am
- 
- install-data-am:
  install-data: install-data-am
  
  install-am: all-am
  	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
- install: install-am
- uninstall-am: uninstall-toolexeclibLIBRARIES
- uninstall: uninstall-am
- all-am: Makefile $(LIBRARIES) $(LTLIBRARIES)
- all-redirect: all-am
- install-strip:
- 	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
- installdirs:
- 	$(mkinstalldirs)  $(DESTDIR)$(toolexeclibdir)
- 
  
  mostlyclean-generic:
  
  clean-generic:
  
  distclean-generic:
! 	-rm -f Makefile $(CONFIG_CLEAN_FILES)
! 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
  
  maintainer-clean-generic:
! mostlyclean-am:  mostlyclean-toolexeclibLIBRARIES mostlyclean-compile \
! 		mostlyclean-libtool mostlyclean-noinstLTLIBRARIES \
! 		mostlyclean-tags mostlyclean-generic
  
! mostlyclean: mostlyclean-am
  
! clean-am:  clean-toolexeclibLIBRARIES clean-compile clean-libtool \
! 		clean-noinstLTLIBRARIES clean-tags clean-generic \
! 		mostlyclean-am
  
! clean: clean-am
  
! distclean-am:  distclean-toolexeclibLIBRARIES distclean-compile \
! 		distclean-libtool distclean-noinstLTLIBRARIES \
! 		distclean-tags distclean-generic clean-am
! 	-rm -f libtool
  
! distclean: distclean-am
! 	-rm -f config.status
  
! maintainer-clean-am:  maintainer-clean-toolexeclibLIBRARIES \
! 		maintainer-clean-compile maintainer-clean-libtool \
! 		maintainer-clean-noinstLTLIBRARIES \
! 		maintainer-clean-tags maintainer-clean-generic \
! 		distclean-am
! 	@echo "This command is intended for maintainers to use;"
! 	@echo "it deletes files that may require special tools to rebuild."
  
! maintainer-clean: maintainer-clean-am
! 	-rm -f config.status
  
! .PHONY: mostlyclean-toolexeclibLIBRARIES distclean-toolexeclibLIBRARIES \
! clean-toolexeclibLIBRARIES maintainer-clean-toolexeclibLIBRARIES \
! uninstall-toolexeclibLIBRARIES install-toolexeclibLIBRARIES \
! mostlyclean-compile distclean-compile clean-compile \
! maintainer-clean-compile mostlyclean-libtool distclean-libtool \
! clean-libtool maintainer-clean-libtool mostlyclean-noinstLTLIBRARIES \
! distclean-noinstLTLIBRARIES clean-noinstLTLIBRARIES \
! maintainer-clean-noinstLTLIBRARIES tags mostlyclean-tags distclean-tags \
! clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
! check-am installcheck-am installcheck install-info-am install-info \
! install-exec-am install-exec install-data-am install-data install-am \
! install uninstall-am uninstall all-redirect all-am all installdirs \
! mostlyclean-generic distclean-generic clean-generic \
! maintainer-clean-generic clean mostlyclean distclean maintainer-clean
  
  
! # Multilib support.
! .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
! 	maintainer-clean-multi
  
! all-am: all-multi
! install-am: install-multi
! mostlyclean-am: mostlyclean-multi
! clean-am: clean-multi
! distclean-am: distclean-multi
! maintainer-clean-am: maintainer-clean-multi
  
! all-multi:
! 	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
! install-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
! mostlyclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean
! clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean
! distclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
! maintainer-clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
  
  # 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.
--- 260,605 ----
  	"RANLIB=$(RANLIB)" \
  	"DESTDIR=$(DESTDIR)"
  
! all: all-am
  
  .SUFFIXES:
! .SUFFIXES: .c .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*) \
! 	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
! 	      cd $(srcdir) && $(AUTOMAKE) --foreign  \
! 		&& exit 0; \
! 	      exit 1;; \
! 	  esac; \
! 	done; \
! 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
! 	cd $(top_srcdir) && \
! 	  $(AUTOMAKE) --foreign  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)
  install-toolexeclibLIBRARIES: $(toolexeclib_LIBRARIES)
  	@$(NORMAL_INSTALL)
! 	test -z "$(toolexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(toolexeclibdir)"
  	@list='$(toolexeclib_LIBRARIES)'; for p in $$list; do \
  	  if test -f $$p; then \
! 	    f=$(am__strip_dir) \
! 	    echo " $(toolexeclibLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(toolexeclibdir)/$$f'"; \
! 	    $(toolexeclibLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(toolexeclibdir)/$$f"; \
  	  else :; fi; \
  	done
  	@$(POST_INSTALL)
  	@list='$(toolexeclib_LIBRARIES)'; for p in $$list; do \
  	  if test -f $$p; then \
! 	    p=$(am__strip_dir) \
! 	    echo " $(RANLIB) '$(DESTDIR)$(toolexeclibdir)/$$p'"; \
! 	    $(RANLIB) "$(DESTDIR)$(toolexeclibdir)/$$p"; \
  	  else :; fi; \
  	done
  
  uninstall-toolexeclibLIBRARIES:
  	@$(NORMAL_UNINSTALL)
! 	@list='$(toolexeclib_LIBRARIES)'; for p in $$list; do \
! 	  p=$(am__strip_dir) \
! 	  echo " rm -f '$(DESTDIR)$(toolexeclibdir)/$$p'"; \
! 	  rm -f "$(DESTDIR)$(toolexeclibdir)/$$p"; \
  	done
  
+ clean-toolexeclibLIBRARIES:
+ 	-test -z "$(toolexeclib_LIBRARIES)" || rm -f $(toolexeclib_LIBRARIES)
+ libz.a: $(libz_a_OBJECTS) $(libz_a_DEPENDENCIES) 
+ 	-rm -f libz.a
+ 	$(libz_a_AR) libz.a $(libz_a_OBJECTS) $(libz_a_LIBADD)
+ 	$(RANLIB) libz.a
+ 
+ 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
+ libzgcj_convenience.la: $(libzgcj_convenience_la_OBJECTS) $(libzgcj_convenience_la_DEPENDENCIES) 
+ 	$(LINK) $(am_libzgcj_convenience_la_rpath) $(libzgcj_convenience_la_LDFLAGS) $(libzgcj_convenience_la_OBJECTS) $(libzgcj_convenience_la_LIBADD) $(LIBS)
+ 
+ mostlyclean-compile:
+ 	-rm -f *.$(OBJEXT)
+ 
+ distclean-compile:
+ 	-rm -f *.tab.c
+ 
  .c.o:
  	$(COMPILE) -c $<
  
  .c.obj:
! 	$(COMPILE) -c `$(CYGPATH_W) '$<'`
  
! .c.lo:
! 	$(LTCOMPILE) -c -o $@ $<
  
! libz_a-adler32.o: adler32.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-adler32.o `test -f 'adler32.c' || echo '$(srcdir)/'`adler32.c
  
! libz_a-adler32.obj: adler32.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-adler32.obj `if test -f 'adler32.c'; then $(CYGPATH_W) 'adler32.c'; else $(CYGPATH_W) '$(srcdir)/adler32.c'; fi`
  
! libz_a-compress.o: compress.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-compress.o `test -f 'compress.c' || echo '$(srcdir)/'`compress.c
  
! libz_a-compress.obj: compress.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-compress.obj `if test -f 'compress.c'; then $(CYGPATH_W) 'compress.c'; else $(CYGPATH_W) '$(srcdir)/compress.c'; fi`
  
! libz_a-crc32.o: crc32.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-crc32.o `test -f 'crc32.c' || echo '$(srcdir)/'`crc32.c
  
! libz_a-crc32.obj: crc32.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-crc32.obj `if test -f 'crc32.c'; then $(CYGPATH_W) 'crc32.c'; else $(CYGPATH_W) '$(srcdir)/crc32.c'; fi`
  
! libz_a-deflate.o: deflate.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-deflate.o `test -f 'deflate.c' || echo '$(srcdir)/'`deflate.c
  
! libz_a-deflate.obj: deflate.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-deflate.obj `if test -f 'deflate.c'; then $(CYGPATH_W) 'deflate.c'; else $(CYGPATH_W) '$(srcdir)/deflate.c'; fi`
  
! libz_a-gzio.o: gzio.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzio.o `test -f 'gzio.c' || echo '$(srcdir)/'`gzio.c
  
! libz_a-gzio.obj: gzio.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzio.obj `if test -f 'gzio.c'; then $(CYGPATH_W) 'gzio.c'; else $(CYGPATH_W) '$(srcdir)/gzio.c'; fi`
  
! libz_a-infback.o: infback.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-infback.o `test -f 'infback.c' || echo '$(srcdir)/'`infback.c
  
! libz_a-infback.obj: infback.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-infback.obj `if test -f 'infback.c'; then $(CYGPATH_W) 'infback.c'; else $(CYGPATH_W) '$(srcdir)/infback.c'; fi`
  
! libz_a-inffast.o: inffast.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-inffast.o `test -f 'inffast.c' || echo '$(srcdir)/'`inffast.c
  
! libz_a-inffast.obj: inffast.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-inffast.obj `if test -f 'inffast.c'; then $(CYGPATH_W) 'inffast.c'; else $(CYGPATH_W) '$(srcdir)/inffast.c'; fi`
  
! libz_a-inflate.o: inflate.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-inflate.o `test -f 'inflate.c' || echo '$(srcdir)/'`inflate.c
  
! libz_a-inflate.obj: inflate.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-inflate.obj `if test -f 'inflate.c'; then $(CYGPATH_W) 'inflate.c'; else $(CYGPATH_W) '$(srcdir)/inflate.c'; fi`
  
! libz_a-inftrees.o: inftrees.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-inftrees.o `test -f 'inftrees.c' || echo '$(srcdir)/'`inftrees.c
  
! libz_a-inftrees.obj: inftrees.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-inftrees.obj `if test -f 'inftrees.c'; then $(CYGPATH_W) 'inftrees.c'; else $(CYGPATH_W) '$(srcdir)/inftrees.c'; fi`
  
! libz_a-trees.o: trees.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-trees.o `test -f 'trees.c' || echo '$(srcdir)/'`trees.c
  
! libz_a-trees.obj: trees.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-trees.obj `if test -f 'trees.c'; then $(CYGPATH_W) 'trees.c'; else $(CYGPATH_W) '$(srcdir)/trees.c'; fi`
! 
! libz_a-uncompr.o: uncompr.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-uncompr.o `test -f 'uncompr.c' || echo '$(srcdir)/'`uncompr.c
! 
! libz_a-uncompr.obj: uncompr.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-uncompr.obj `if test -f 'uncompr.c'; then $(CYGPATH_W) 'uncompr.c'; else $(CYGPATH_W) '$(srcdir)/uncompr.c'; fi`
! 
! libz_a-zutil.o: zutil.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-zutil.o `test -f 'zutil.c' || echo '$(srcdir)/'`zutil.c
! 
! libz_a-zutil.obj: zutil.c
! 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-zutil.obj `if test -f 'zutil.c'; then $(CYGPATH_W) 'zutil.c'; else $(CYGPATH_W) '$(srcdir)/zutil.c'; fi`
! 
! mostlyclean-libtool:
! 	-rm -f *.lo
! 
! clean-libtool:
! 	-rm -rf .libs _libs
! 
! distclean-libtool:
! 	-rm -f libtool
! 
! # GNU Make needs to see an explicit $(MAKE) variable in the command it
! # runs to enable its job server during parallel builds.  Hence the
! # comments below.
! all-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE)
! install-multi:
! 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE)
! 
! mostlyclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE)
! clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE)
! distclean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE)
! maintainer-clean-multi:
! 	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean # $(MAKE)
! uninstall-info-am:
! 
! 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:  $(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; }'`; \
! 	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:  $(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
  check-am:
  check: check-am
! all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) all-multi
! installdirs:
! 	for dir in "$(DESTDIR)$(toolexeclibdir)"; do \
! 	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
! 	done
! 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-multi
  
! clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
! 	clean-toolexeclibLIBRARIES mostlyclean-am
  
! distclean: distclean-am distclean-multi
! 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
! 	-rm -f Makefile
! distclean-am: clean-am distclean-compile distclean-generic \
! 	distclean-libtool distclean-tags
  
! dvi: dvi-am
  
! dvi-am:
  
! html: html-am
  
! info: info-am
  
! info-am:
  
! install-data-am:
  
+ install-exec-am: install-multi install-toolexeclibLIBRARIES
  
! install-info: install-info-am
  
! install-man:
  
! installcheck-am:
! 
! maintainer-clean: maintainer-clean-am maintainer-clean-multi
! 	-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-am mostlyclean-multi
! 
! mostlyclean-am: mostlyclean-compile mostlyclean-generic \
! 	mostlyclean-libtool
! 
! pdf: pdf-am
! 
! pdf-am:
! 
! ps: ps-am
! 
! ps-am:
! 
! uninstall-am: uninstall-toolexeclibLIBRARIES
! 
! .PHONY: CTAGS GTAGS all all-am all-multi am--refresh check check-am \
! 	clean clean-generic clean-libtool clean-multi \
! 	clean-noinstLTLIBRARIES clean-toolexeclibLIBRARIES ctags \
! 	distclean distclean-compile distclean-generic \
! 	distclean-libtool distclean-multi distclean-tags 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-multi install-strip \
! 	install-toolexeclibLIBRARIES installcheck installcheck-am \
! 	installdirs maintainer-clean maintainer-clean-generic \
! 	maintainer-clean-multi mostlyclean mostlyclean-compile \
! 	mostlyclean-generic mostlyclean-libtool mostlyclean-multi pdf \
! 	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am \
! 	uninstall-toolexeclibLIBRARIES
  
  # 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.
diff -Nrcpad gcc-3.4.3/zlib/Makefile.riscos gcc-4.0.0/zlib/Makefile.riscos
*** gcc-3.4.3/zlib/Makefile.riscos	Mon Mar 11 21:49:12 2002
--- gcc-4.0.0/zlib/Makefile.riscos	Thu Jan  1 00:00:00 1970
***************
*** 1,151 ****
- # Project:   zlib_1_03
- # Patched for zlib 1.1.2 rw@shadow.org.uk 19980430
- # test works out-of-the-box, installs `somewhere' on demand
- 
- # Toolflags:
- CCflags = -c -depend !Depend -IC: -g -throwback  -DRISCOS  -fah 
- C++flags = -c -depend !Depend -IC: -throwback
- Linkflags = -aif -c++ -o $@ 
- ObjAsmflags = -throwback -NoCache -depend !Depend
- CMHGflags = 
- LibFileflags = -c -l -o $@ 
- Squeezeflags = -o $@
- 
- # change the line below to where _you_ want the library installed.
- libdest = lib:zlib
- 
- # Final targets:
- @.lib:   @.o.adler32 @.o.compress @.o.crc32 @.o.deflate @.o.gzio \
-         @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil @.o.trees \
-         @.o.uncompr @.o.zutil 
-         LibFile $(LibFileflags) @.o.adler32 @.o.compress @.o.crc32 @.o.deflate \
-         @.o.gzio @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil \
-         @.o.trees @.o.uncompr @.o.zutil 
- test:   @.minigzip @.example @.lib
- 	@copy @.lib @.libc  A~C~DF~L~N~P~Q~RS~TV
- 	@echo running tests: hang on.
- 	@/@.minigzip -f -9 libc
- 	@/@.minigzip -d libc-gz
- 	@/@.minigzip -f -1 libc
- 	@/@.minigzip -d libc-gz
- 	@/@.minigzip -h -9 libc
- 	@/@.minigzip -d libc-gz
- 	@/@.minigzip -h -1 libc
- 	@/@.minigzip -d libc-gz
- 	@/@.minigzip -9 libc
- 	@/@.minigzip -d libc-gz
- 	@/@.minigzip -1 libc
- 	@/@.minigzip -d libc-gz
- 	@diff @.lib @.libc
- 	@echo that should have reported '@.lib and @.libc identical' if you have diff.
- 	@/@.example @.fred @.fred
- 	@echo that will have given lots of hello!'s.
- 
- @.minigzip:   @.o.minigzip @.lib C:o.Stubs 
-         Link $(Linkflags) @.o.minigzip @.lib C:o.Stubs 
- @.example:   @.o.example @.lib C:o.Stubs 
-         Link $(Linkflags) @.o.example @.lib C:o.Stubs
- 
- install: @.lib
- 	cdir $(libdest)
- 	cdir $(libdest).h
- 	@copy @.h.zlib $(libdest).h.zlib A~C~DF~L~N~P~Q~RS~TV
- 	@copy @.h.zconf $(libdest).h.zconf A~C~DF~L~N~P~Q~RS~TV
- 	@copy @.lib $(libdest).lib  A~C~DF~L~N~P~Q~RS~TV
- 	@echo okay, installed zlib in $(libdest)
- 
- clean:; remove @.minigzip
- 	remove @.example
- 	remove @.libc
- 	-wipe @.o.* F~r~cV
- 	remove @.fred
- 
- # User-editable dependencies:
- .c.o:
-         cc $(ccflags) -o $@ $<
- 
- # Static dependencies:
- 
- # Dynamic dependencies:
- o.example:	c.example
- o.example:	h.zlib
- o.example:	h.zconf
- o.minigzip:	c.minigzip
- o.minigzip:	h.zlib
- o.minigzip:	h.zconf
- o.adler32:	c.adler32
- o.adler32:	h.zlib
- o.adler32:	h.zconf
- o.compress:	c.compress
- o.compress:	h.zlib
- o.compress:	h.zconf
- o.crc32:	c.crc32
- o.crc32:	h.zlib
- o.crc32:	h.zconf
- o.deflate:	c.deflate
- o.deflate:	h.deflate
- o.deflate:	h.zutil
- o.deflate:	h.zlib
- o.deflate:	h.zconf
- o.gzio:	c.gzio
- o.gzio:	h.zutil
- o.gzio:	h.zlib
- o.gzio:	h.zconf
- o.infblock:	c.infblock
- o.infblock:	h.zutil
- o.infblock:	h.zlib
- o.infblock:	h.zconf
- o.infblock:	h.infblock
- o.infblock:	h.inftrees
- o.infblock:	h.infcodes
- o.infblock:	h.infutil
- o.infcodes:	c.infcodes
- o.infcodes:	h.zutil
- o.infcodes:	h.zlib
- o.infcodes:	h.zconf
- o.infcodes:	h.inftrees
- o.infcodes:	h.infblock
- o.infcodes:	h.infcodes
- o.infcodes:	h.infutil
- o.infcodes:	h.inffast
- o.inffast:	c.inffast
- o.inffast:	h.zutil
- o.inffast:	h.zlib
- o.inffast:	h.zconf
- o.inffast:	h.inftrees
- o.inffast:	h.infblock
- o.inffast:	h.infcodes
- o.inffast:	h.infutil
- o.inffast:	h.inffast
- o.inflate:	c.inflate
- o.inflate:	h.zutil
- o.inflate:	h.zlib
- o.inflate:	h.zconf
- o.inflate:	h.infblock
- o.inftrees:	c.inftrees
- o.inftrees:	h.zutil
- o.inftrees:	h.zlib
- o.inftrees:	h.zconf
- o.inftrees:	h.inftrees
- o.inftrees:	h.inffixed
- o.infutil:	c.infutil
- o.infutil:	h.zutil
- o.infutil:	h.zlib
- o.infutil:	h.zconf
- o.infutil:	h.infblock
- o.infutil:	h.inftrees
- o.infutil:	h.infcodes
- o.infutil:	h.infutil
- o.trees:	c.trees
- o.trees:	h.deflate
- o.trees:	h.zutil
- o.trees:	h.zlib
- o.trees:	h.zconf
- o.trees:	h.trees
- o.uncompr:	c.uncompr
- o.uncompr:	h.zlib
- o.uncompr:	h.zconf
- o.zutil:	c.zutil
- o.zutil:	h.zutil
- o.zutil:	h.zlib
- o.zutil:	h.zconf
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/README gcc-4.0.0/zlib/README
*** gcc-3.4.3/zlib/README	Fri Jul 11 21:54:40 2003
--- gcc-4.0.0/zlib/README	Mon Oct 11 18:45:37 2004
***************
*** 1,113 ****
  This directory contains the zlib package, which is not part of GCC but
  shipped with GCC as convenience.
  
! zlib 1.1.4 is a general purpose data compression library.  All the code
! is thread safe.  The data format used by the zlib library
! is described by RFCs (Request for Comments) 1950 to 1952 in the files 
! http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate
! format) and rfc1952.txt (gzip format). These documents are also available in
! other formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
  
  All functions of the compression library are documented in the file zlib.h
! (volunteer to write man pages welcome, contact jloup@gzip.org). A usage
! example of the library is given in the file example.c which also tests that
! the library is working correctly. Another example is given in the file
! minigzip.c. The compression library itself is composed of all source files
! except example.c and minigzip.c.
  
! To compile all files and run the test program, follow the instructions
! given at the top of Makefile. In short "make test; make install"
! should work for most machines. For Unix: "./configure; make test; make install"
! For MSDOS, use one of the special makefiles such as Makefile.msc.
! For VMS, use Make_vms.com or descrip.mms.
  
! Questions about zlib should be sent to <zlib@gzip.org>, or to
! Gilles Vollant <info@winimage.com> for the Windows DLL version.
! The zlib home page is http://www.zlib.org or http://www.gzip.org/zlib/
! Before reporting a problem, please check this site to verify that
! you have the latest version of zlib; otherwise get the latest version and
! check whether the problem still exists or not.
  
! PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html
! before asking for help.
  
  Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
  issue of  Dr. Dobb's Journal; a copy of the article is available in
  http://dogma.net/markn/articles/zlibtool/zlibtool.htm
  
! The changes made in version 1.1.4 are documented in the file ChangeLog.
! The only changes made since 1.1.3 are bug corrections:
! 
! - ZFREE was repeated on same allocation on some error conditions.
!   This creates a security problem described in
!   http://www.zlib.org/advisory-2002-03-11.txt
! - Returned incorrect error (Z_MEM_ERROR) on some invalid data
! - Avoid accesses before window for invalid distances with inflate window
!   less than 32K.
! - force windowBits > 8 to avoid a bug in the encoder for a window size
!   of 256 bytes. (A complete fix will be available in 1.1.5).
! 
! The beta version 1.1.5beta includes many more changes. A new official
! version 1.1.5 will be released as soon as extensive testing has been
! completed on it.
! 
  
  Unsupported third party contributions are provided in directory "contrib".
  
  A Java implementation of zlib is available in the Java Development Kit
! http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html
  See the zlib home page http://www.zlib.org for details.
  
! A Perl interface to zlib written by Paul Marquess <pmarquess@bfsec.bt.co.uk>
! is in the CPAN (Comprehensive Perl Archive Network) sites
  http://www.cpan.org/modules/by-module/Compress/
  
! A Python interface to zlib written by A.M. Kuchling <amk@magnet.com>
! is available in Python 1.5 and later versions, see
  http://www.python.org/doc/lib/module-zlib.html
  
! A zlib binding for TCL written by Andreas Kupries <a.kupries@westend.com>
! is availlable at http://www.westend.com/~kupries/doc/trf/man/man.html
  
! An experimental package to read and write files in .zip format,
! written on top of zlib by Gilles Vollant <info@winimage.com>, is
! available at http://www.winimage.com/zLibDll/unzip.html
! and also in the contrib/minizip directory of zlib.
  
  
  Notes for some targets:
  
! - To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc
!   and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL
!   The zlib DLL support was initially done by Alessandro Iacopetti and is
!   now maintained by Gilles Vollant <info@winimage.com>. Check the zlib DLL
!   home page at http://www.winimage.com/zLibDll
! 
!   From Visual Basic, you can call the DLL functions which do not take
!   a structure as argument: compress, uncompress and all gz* functions.
!   See contrib/visual-basic.txt for more information, or get
!   http://www.tcfb.com/dowseware/cmp-z-it.zip
  
! - For 64-bit Irix, deflate.c must be compiled without any optimization.
!   With -O, one libpng test fails. The test works in 32 bit mode (with
!   the -n32 compiler flag). The compiler bug has been reported to SGI.
  
! - zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1   
!   it works when compiled with cc.
  
! - on Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1
!   is necessary to get gzprintf working correctly. This is done by configure.
  
! - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works
!   with other compilers. Use "make test" to check your compiler.
  
  - gzdopen is not supported on RISCOS, BEOS and by some Mac compilers.
  
! - For Turbo C the small model is supported only with reduced performance to
!   avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
  
! - For PalmOs, see http://www.cs.uit.no/~perm/PASTA/pilot/software.html
!   Per Harald Myrvang <perm@stud.cs.uit.no>
  
  
  Acknowledgments:
--- 1,90 ----
  This directory contains the zlib package, which is not part of GCC but
  shipped with GCC as convenience.
  
! ZLIB DATA COMPRESSION LIBRARY
! 
! zlib 1.2.1 is a general purpose data compression library.  All the code is
! thread safe.  The data format used by the zlib library is described by RFCs
! (Request for Comments) 1950 to 1952 in the files
! http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
! and rfc1952.txt (gzip format). These documents are also available in other
! formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
  
  All functions of the compression library are documented in the file zlib.h
! (volunteer to write man pages welcome, contact zlib@gzip.org). A usage example
! of the library is given in the file example.c which also tests that the library
! is working correctly. Another example is given in the file minigzip.c. The
! compression library itself is composed of all source files except example.c and
! minigzip.c.
  
! To compile all files and run the test program, follow the instructions given at
! the top of Makefile. In short "make test; make install" should work for most
! machines. For Unix: "./configure; make test; make install" For MSDOS, use one
! of the special makefiles such as Makefile.msc. For VMS, use Make_vms.com or
! descrip.mms.
  
! Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
! <info@winimage.com> for the Windows DLL version. The zlib home page is
! http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem,
! please check this site to verify that you have the latest version of zlib;
! otherwise get the latest version and check whether the problem still exists or
! not.
  
! PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking
! for help.
  
  Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
  issue of  Dr. Dobb's Journal; a copy of the article is available in
  http://dogma.net/markn/articles/zlibtool/zlibtool.htm
  
! The changes made in version 1.2.1 are documented in the file ChangeLog.
  
  Unsupported third party contributions are provided in directory "contrib".
  
  A Java implementation of zlib is available in the Java Development Kit
! http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html
  See the zlib home page http://www.zlib.org for details.
  
! A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is in the
! CPAN (Comprehensive Perl Archive Network) sites
  http://www.cpan.org/modules/by-module/Compress/
  
! A Python interface to zlib written by A.M. Kuchling <amk@magnet.com> is
! available in Python 1.5 and later versions, see
  http://www.python.org/doc/lib/module-zlib.html
  
! A zlib binding for TCL written by Andreas Kupries <a.kupries@westend.com> is
! availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html
  
! An experimental package to read and write files in .zip format, written on top
! of zlib by Gilles Vollant <info@winimage.com>, is available in the
! contrib/minizip directory of zlib.
  
  
  Notes for some targets:
  
! - For Windows DLL versions, please see win32/DLL_FAQ.txt
  
! - For 64-bit Irix, deflate.c must be compiled without any optimization. With
!   -O, one libpng test fails. The test works in 32 bit mode (with the -n32
!   compiler flag). The compiler bug has been reported to SGI.
  
! - zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
!   when compiled with cc.
  
! - On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
!   necessary to get gzprintf working correctly. This is done by configure.
  
! - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
!   other compilers. Use "make test" to check your compiler.
  
  - gzdopen is not supported on RISCOS, BEOS and by some Mac compilers.
  
! - For PalmOs, see http://palmzlib.sourceforge.net/
  
! - When building a shared, i.e. dynamic library on Mac OS X, the library must be
!   installed before testing (do "make install" before "make test"), since the
!   library location is specified in the library.
  
  
  Acknowledgments:
*************** Acknowledgments:
*** 119,125 ****
  
  Copyright notice:
  
!  (C) 1995-2002 Jean-loup Gailly and Mark Adler
  
    This software is provided 'as-is', without any express or implied
    warranty.  In no event will the authors be held liable for any damages
--- 96,102 ----
  
  Copyright notice:
  
!  (C) 1995-2003 Jean-loup Gailly and Mark Adler
  
    This software is provided 'as-is', without any express or implied
    warranty.  In no event will the authors be held liable for any damages
*************** entirely written by Jean-loup Gailly and
*** 147,150 ****
  include third-party code.
  
  If you redistribute modified sources, we would appreciate that you include
! in the file ChangeLog history information documenting your changes.
--- 124,129 ----
  include third-party code.
  
  If you redistribute modified sources, we would appreciate that you include
! in the file ChangeLog history information documenting your changes. Please
! read the FAQ for more information on the distribution of modified source
! versions.
diff -Nrcpad gcc-3.4.3/zlib/acinclude.m4 gcc-4.0.0/zlib/acinclude.m4
*** gcc-3.4.3/zlib/acinclude.m4	Mon Mar 11 21:49:12 2002
--- gcc-4.0.0/zlib/acinclude.m4	Mon Oct 11 17:35:35 2004
***************
*** 1,43 ****
! # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
! # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
! # are probably using a cross compiler, which will not be able to fully
! # link an executable.  This should really be fixed in autoconf
! # itself.
! 
! AC_DEFUN(LIB_AC_PROG_CC,
! [AC_BEFORE([$0], [AC_PROG_CPP])dnl
! dnl Fool anybody using AC_PROG_CC.
! AC_PROVIDE([AC_PROG_CC])
! AC_CHECK_PROG(CC, gcc, gcc)
! if test -z "$CC"; then
!   AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
!   test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
! fi
! 
! AC_PROG_CC_GNU
! 
! if test $ac_cv_prog_gcc = yes; then
!   GCC=yes
! dnl Check whether -g works, even if CFLAGS is set, in case the package
! dnl plays around with CFLAGS (such as to build both debugging and
! dnl normal versions of a library), tasteless as that idea is.
!   ac_test_CFLAGS="${CFLAGS+set}"
!   ac_save_CFLAGS="$CFLAGS"
!   CFLAGS=
!   AC_PROG_CC_G
!   if test "$ac_test_CFLAGS" = set; then
!     CFLAGS="$ac_save_CFLAGS"
!   elif test $ac_cv_prog_cc_g = yes; then
!     CFLAGS="-g -O2"
!   else
!     CFLAGS="-O2"
!   fi
! else
!   GCC=
!   test "${CFLAGS+set}" = set || CFLAGS="-g"
! fi
! ])
! 
  sinclude(../libtool.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
--- 1,4 ----
! sinclude(../config/no-executables.m4)
  sinclude(../libtool.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
diff -Nrcpad gcc-3.4.3/zlib/aclocal.m4 gcc-4.0.0/zlib/aclocal.m4
*** gcc-3.4.3/zlib/aclocal.m4	Mon Mar 11 21:49:12 2002
--- gcc-4.0.0/zlib/aclocal.m4	Wed Nov 24 21:04:28 2004
***************
*** 1,119 ****
! dnl aclocal.m4 generated automatically by aclocal 1.4
  
! dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
! dnl This file is free software; the Free Software Foundation
! dnl gives unlimited permission to copy and/or distribute it,
! dnl with or without modifications, as long as this notice is preserved.
  
! dnl This program is distributed in the hope that it will be useful,
! dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
! dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
! dnl PARTICULAR PURPOSE.
  
! # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
! # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
! # are probably using a cross compiler, which will not be able to fully
! # link an executable.  This should really be fixed in autoconf
! # itself.
  
! AC_DEFUN(LIB_AC_PROG_CC,
! [AC_BEFORE([$0], [AC_PROG_CPP])dnl
! dnl Fool anybody using AC_PROG_CC.
! AC_PROVIDE([AC_PROG_CC])
! AC_CHECK_PROG(CC, gcc, gcc)
! if test -z "$CC"; then
!   AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
!   test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
  fi
  
! AC_PROG_CC_GNU
  
! if test $ac_cv_prog_gcc = yes; then
!   GCC=yes
! dnl Check whether -g works, even if CFLAGS is set, in case the package
! dnl plays around with CFLAGS (such as to build both debugging and
! dnl normal versions of a library), tasteless as that idea is.
!   ac_test_CFLAGS="${CFLAGS+set}"
!   ac_save_CFLAGS="$CFLAGS"
!   CFLAGS=
!   AC_PROG_CC_G
!   if test "$ac_test_CFLAGS" = set; then
!     CFLAGS="$ac_save_CFLAGS"
!   elif test $ac_cv_prog_cc_g = yes; then
!     CFLAGS="-g -O2"
!   else
!     CFLAGS="-O2"
    fi
  else
!   GCC=
!   test "${CFLAGS+set}" = set || CFLAGS="-g"
  fi
  ])
  
! sinclude(../libtool.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.
! ifelse(yes,no,[
! AC_DEFUN([AM_PROG_LIBTOOL],)
! AC_SUBST(LIBTOOL)
  ])
  
- # Do all the work for Automake.  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.
  
! # serial 1
  
! dnl Usage:
! dnl AM_INIT_AUTOMAKE(package,version, [no-define])
  
! AC_DEFUN(AM_INIT_AUTOMAKE,
! [AC_REQUIRE([AC_PROG_INSTALL])
! PACKAGE=[$1]
! AC_SUBST(PACKAGE)
! VERSION=[$2]
! AC_SUBST(VERSION)
! 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
! ifelse([$3],,
! AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
! AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
! AC_REQUIRE([AM_SANITY_CHECK])
! AC_REQUIRE([AC_ARG_PROGRAM])
! dnl FIXME This is truly gross.
! missing_dir=`cd $ac_aux_dir && pwd`
! AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
! AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
! AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
! AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
! AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
! AC_REQUIRE([AC_PROG_MAKE_SET])])
  
  #
  # Check to make sure that the build environment is sane.
  #
  
! AC_DEFUN(AM_SANITY_CHECK,
  [AC_MSG_CHECKING([whether build environment is sane])
  # Just in case
  sleep 1
! echo timestamp > conftestfile
  # 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 conftestfile 2> /dev/null`
!    if test "[$]*" = "X"; then
        # -L didn't work.
!       set X `ls -t $srcdir/configure conftestfile`
     fi
!    if test "[$]*" != "X $srcdir/configure conftestfile" \
!       && test "[$]*" != "X conftestfile $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
--- 1,965 ----
! # 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])])
! 
! # Copyright (C) 1998, 1999, 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 4
! 
! # AM_ENABLE_MULTILIB([MAKEFILE], [REL-TO-TOP-SRCDIR])
! # ---------------------------------------------------
! # Add --enable-multilib to configure.
! AC_DEFUN([AM_ENABLE_MULTILIB],
! [# Default to --enable-multilib
! AC_ARG_ENABLE(multilib,
! [  --enable-multilib       build many library versions (default)],
! [case "$enableval" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
!  esac],
! 	      [multilib=yes])
! 
! # We may get other options which we leave undocumented:
! # --with-target-subdir, --with-multisrctop, --with-multisubdir
! # See config-ml.in if you want the gory details.
! 
! if test "$srcdir" = "."; then
!   if test "$with_target_subdir" != "."; then
!     multi_basedir="$srcdir/$with_multisrctop../$2"
!   else
!     multi_basedir="$srcdir/$with_multisrctop$2"
!   fi
! else
!   multi_basedir="$srcdir/$2"
! fi
! AC_SUBST(multi_basedir)
! 
! AC_OUTPUT_COMMANDS([
! # Only add multilib support code if we just rebuilt the top-level
! # Makefile.
! case " $CONFIG_FILES " in
!  *" ]m4_default([$1],Makefile)[ "*)
!    ac_file=]m4_default([$1],Makefile)[ . ${multi_basedir}/config-ml.in
!    ;;
! esac],
! 		   [
! srcdir="$srcdir"
! host="$host"
! target="$target"
! with_multisubdir="$with_multisubdir"
! with_multisrctop="$with_multisrctop"
! with_target_subdir="$with_target_subdir"
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! multi_basedir="$multi_basedir"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! CC="$CC"])])dnl
! 
! # 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])])
  
  #
  # 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
*************** if (
*** 123,129 ****
  alias in your environment])
     fi
  
!    test "[$]2" = conftestfile
     )
  then
     # Ok.
--- 969,975 ----
  alias in your environment])
     fi
  
!    test "$[2]" = conftest.file
     )
  then
     # Ok.
*************** else
*** 132,186 ****
     AC_MSG_ERROR([newly created file is older than distributed files!
  Check your system clock])
  fi
- rm -f conftest*
  AC_MSG_RESULT(yes)])
  
! dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
! dnl The program must properly implement --version.
! AC_DEFUN(AM_MISSING_PROG,
! [AC_MSG_CHECKING(for working $2)
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if ($2 --version) < /dev/null > /dev/null 2>&1; then
!    $1=$2
!    AC_MSG_RESULT(found)
! else
!    $1="$3/missing $2"
!    AC_MSG_RESULT(missing)
  fi
! AC_SUBST($1)])
  
! # Add --enable-maintainer-mode option to configure.
! # From Jim Meyering
  
  # serial 1
  
- 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
- ]
- )
  
! # Define a conditional.
  
! AC_DEFUN(AM_CONDITIONAL,
! [AC_SUBST($1_TRUE)
! AC_SUBST($1_FALSE)
! if $2; then
!   $1_TRUE=
!   $1_FALSE='#'
! else
!   $1_TRUE='#'
!   $1_FALSE=
! fi])
  
--- 978,1130 ----
     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([acinclude.m4])
diff -Nrcpad gcc-3.4.3/zlib/adler32.c gcc-4.0.0/zlib/adler32.c
*** gcc-3.4.3/zlib/adler32.c	Mon Mar 11 22:11:16 2002
--- gcc-4.0.0/zlib/adler32.c	Mon Oct 11 18:45:37 2004
***************
*** 1,13 ****
  /* adler32.c -- compute the Adler-32 checksum of a data stream
!  * Copyright (C) 1995-2002 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* @(#) $Id: adler32.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
  
  #include "zlib.h"
  
! #define BASE 65521L /* largest prime smaller than 65536 */
  #define NMAX 5552
  /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
  
--- 1,14 ----
  /* adler32.c -- compute the Adler-32 checksum of a data stream
!  * Copyright (C) 1995-2003 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /* @(#) $Id: adler32.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
  
+ #define ZLIB_INTERNAL
  #include "zlib.h"
  
! #define BASE 65521UL    /* largest prime smaller than 65536 */
  #define NMAX 5552
  /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
  
***************
*** 17,22 ****
--- 18,48 ----
  #define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
  #define DO16(buf)   DO8(buf,0); DO8(buf,8);
  
+ #ifdef NO_DIVIDE
+ #  define MOD(a) \
+     do { \
+         if (a >= (BASE << 16)) a -= (BASE << 16); \
+         if (a >= (BASE << 15)) a -= (BASE << 15); \
+         if (a >= (BASE << 14)) a -= (BASE << 14); \
+         if (a >= (BASE << 13)) a -= (BASE << 13); \
+         if (a >= (BASE << 12)) a -= (BASE << 12); \
+         if (a >= (BASE << 11)) a -= (BASE << 11); \
+         if (a >= (BASE << 10)) a -= (BASE << 10); \
+         if (a >= (BASE << 9)) a -= (BASE << 9); \
+         if (a >= (BASE << 8)) a -= (BASE << 8); \
+         if (a >= (BASE << 7)) a -= (BASE << 7); \
+         if (a >= (BASE << 6)) a -= (BASE << 6); \
+         if (a >= (BASE << 5)) a -= (BASE << 5); \
+         if (a >= (BASE << 4)) a -= (BASE << 4); \
+         if (a >= (BASE << 3)) a -= (BASE << 3); \
+         if (a >= (BASE << 2)) a -= (BASE << 2); \
+         if (a >= (BASE << 1)) a -= (BASE << 1); \
+         if (a >= BASE) a -= BASE; \
+     } while (0)
+ #else
+ #  define MOD(a) a %= BASE
+ #endif
+ 
  /* ========================================================================= */
  uLong ZEXPORT adler32(adler, buf, len)
      uLong adler;
*************** uLong ZEXPORT adler32(adler, buf, len)
*** 30,48 ****
      if (buf == Z_NULL) return 1L;
  
      while (len > 0) {
!         k = len < NMAX ? len : NMAX;
          len -= k;
          while (k >= 16) {
              DO16(buf);
! 	    buf += 16;
              k -= 16;
          }
          if (k != 0) do {
              s1 += *buf++;
! 	    s2 += s1;
          } while (--k);
!         s1 %= BASE;
!         s2 %= BASE;
      }
      return (s2 << 16) | s1;
  }
--- 56,74 ----
      if (buf == Z_NULL) return 1L;
  
      while (len > 0) {
!         k = len < NMAX ? (int)len : NMAX;
          len -= k;
          while (k >= 16) {
              DO16(buf);
!             buf += 16;
              k -= 16;
          }
          if (k != 0) do {
              s1 += *buf++;
!             s2 += s1;
          } while (--k);
!         MOD(s1);
!         MOD(s2);
      }
      return (s2 << 16) | s1;
  }
diff -Nrcpad gcc-3.4.3/zlib/algorithm.txt gcc-4.0.0/zlib/algorithm.txt
*** gcc-3.4.3/zlib/algorithm.txt	Mon Mar 11 21:49:12 2002
--- gcc-4.0.0/zlib/algorithm.txt	Mon Oct 11 18:45:37 2004
*************** but saves time since there are both fewe
*** 59,68 ****
  
  2.1 Introduction
  
! The real question is, given a Huffman tree, how to decode fast.  The most
! important realization is that shorter codes are much more common than
! longer codes, so pay attention to decoding the short codes fast, and let
! the long codes take longer to decode.
  
  inflate() sets up a first level table that covers some number of bits of
  input less than the length of longest code.  It gets that many bits from the
--- 59,68 ----
  
  2.1 Introduction
  
! The key question is how to represent a Huffman code (or any prefix code) so
! that you can decode fast.  The most important characteristic is that shorter
! codes are much more common than longer codes, so pay attention to decoding the
! short codes fast, and let the long codes take longer to decode.
  
  inflate() sets up a first level table that covers some number of bits of
  input less than the length of longest code.  It gets that many bits from the
*************** table took no time (and if you had infin
*** 77,134 ****
  be a first level table to cover all the way to the longest code.  However,
  building the table ends up taking a lot longer for more bits since short
  codes are replicated many times in such a table.  What inflate() does is
! simply to make the number of bits in the first table a variable, and set it
! for the maximum speed.
  
! inflate() sends new trees relatively often, so it is possibly set for a
! smaller first level table than an application that has only one tree for
! all the data.  For inflate, which has 286 possible codes for the
! literal/length tree, the size of the first table is nine bits.  Also the
! distance trees have 30 possible values, and the size of the first table is
! six bits.  Note that for each of those cases, the table ended up one bit
! longer than the ``average'' code length, i.e. the code length of an
! approximately flat code which would be a little more than eight bits for
! 286 symbols and a little less than five bits for 30 symbols.  It would be
! interesting to see if optimizing the first level table for other
! applications gave values within a bit or two of the flat code size.
  
  
  2.2 More details on the inflate table lookup
  
! Ok, you want to know what this cleverly obfuscated inflate tree actually  
! looks like.  You are correct that it's not a Huffman tree.  It is simply a  
! lookup table for the first, let's say, nine bits of a Huffman symbol.  The  
! symbol could be as short as one bit or as long as 15 bits.  If a particular  
  symbol is shorter than nine bits, then that symbol's translation is duplicated
! in all those entries that start with that symbol's bits.  For example, if the  
! symbol is four bits, then it's duplicated 32 times in a nine-bit table.  If a  
  symbol is nine bits long, it appears in the table once.
  
! If the symbol is longer than nine bits, then that entry in the table points  
! to another similar table for the remaining bits.  Again, there are duplicated  
  entries as needed.  The idea is that most of the time the symbol will be short
! and there will only be one table look up.  (That's whole idea behind data  
! compression in the first place.)  For the less frequent long symbols, there  
! will be two lookups.  If you had a compression method with really long  
! symbols, you could have as many levels of lookups as is efficient.  For  
  inflate, two is enough.
  
! So a table entry either points to another table (in which case nine bits in  
! the above example are gobbled), or it contains the translation for the symbol  
! and the number of bits to gobble.  Then you start again with the next  
  ungobbled bit.
  
! You may wonder: why not just have one lookup table for how ever many bits the  
! longest symbol is?  The reason is that if you do that, you end up spending  
! more time filling in duplicate symbol entries than you do actually decoding.   
! At least for deflate's output that generates new trees every several 10's of  
! kbytes.  You can imagine that filling in a 2^15 entry table for a 15-bit code  
! would take too long if you're only decoding several thousand symbols.  At the  
  other extreme, you could make a new table for every bit in the code.  In fact,
! that's essentially a Huffman tree.  But then you spend two much time  
  traversing the tree while decoding, even for short symbols.
  
! So the number of bits for the first lookup table is a trade of the time to  
  fill out the table vs. the time spent looking at the second level and above of
  the table.
  
--- 77,130 ----
  be a first level table to cover all the way to the longest code.  However,
  building the table ends up taking a lot longer for more bits since short
  codes are replicated many times in such a table.  What inflate() does is
! simply to make the number of bits in the first table a variable, and  then
! to set that variable for the maximum speed.
  
! For inflate, which has 286 possible codes for the literal/length tree, the size
! of the first table is nine bits.  Also the distance trees have 30 possible
! values, and the size of the first table is six bits.  Note that for each of
! those cases, the table ended up one bit longer than the ``average'' code
! length, i.e. the code length of an approximately flat code which would be a
! little more than eight bits for 286 symbols and a little less than five bits
! for 30 symbols.
  
  
  2.2 More details on the inflate table lookup
  
! Ok, you want to know what this cleverly obfuscated inflate tree actually
! looks like.  You are correct that it's not a Huffman tree.  It is simply a
! lookup table for the first, let's say, nine bits of a Huffman symbol.  The
! symbol could be as short as one bit or as long as 15 bits.  If a particular
  symbol is shorter than nine bits, then that symbol's translation is duplicated
! in all those entries that start with that symbol's bits.  For example, if the
! symbol is four bits, then it's duplicated 32 times in a nine-bit table.  If a
  symbol is nine bits long, it appears in the table once.
  
! If the symbol is longer than nine bits, then that entry in the table points
! to another similar table for the remaining bits.  Again, there are duplicated
  entries as needed.  The idea is that most of the time the symbol will be short
! and there will only be one table look up.  (That's whole idea behind data
! compression in the first place.)  For the less frequent long symbols, there
! will be two lookups.  If you had a compression method with really long
! symbols, you could have as many levels of lookups as is efficient.  For
  inflate, two is enough.
  
! So a table entry either points to another table (in which case nine bits in
! the above example are gobbled), or it contains the translation for the symbol
! and the number of bits to gobble.  Then you start again with the next
  ungobbled bit.
  
! You may wonder: why not just have one lookup table for how ever many bits the
! longest symbol is?  The reason is that if you do that, you end up spending
! more time filling in duplicate symbol entries than you do actually decoding.
! At least for deflate's output that generates new trees every several 10's of
! kbytes.  You can imagine that filling in a 2^15 entry table for a 15-bit code
! would take too long if you're only decoding several thousand symbols.  At the
  other extreme, you could make a new table for every bit in the code.  In fact,
! that's essentially a Huffman tree.  But then you spend two much time
  traversing the tree while decoding, even for short symbols.
  
! So the number of bits for the first lookup table is a trade of the time to
  fill out the table vs. the time spent looking at the second level and above of
  the table.
  
*************** Let's make the first table three bits lo
*** 158,164 ****
  110: -> table X (gobble 3 bits)
  111: -> table Y (gobble 3 bits)
  
! Each entry is what the bits decode to and how many bits that is, i.e. how  
  many bits to gobble.  Or the entry points to another table, with the number of
  bits to gobble implicit in the size of the table.
  
--- 154,160 ----
  110: -> table X (gobble 3 bits)
  111: -> table Y (gobble 3 bits)
  
! Each entry is what the bits decode as and how many bits that is, i.e. how
  many bits to gobble.  Or the entry points to another table, with the number of
  bits to gobble implicit in the size of the table.
  
*************** long:
*** 170,176 ****
  10: D,2
  11: E,2
  
! Table Y is three bits long since the longest code starting with 111 is six  
  bits long:
  
  000: F,2
--- 166,172 ----
  10: D,2
  11: E,2
  
! Table Y is three bits long since the longest code starting with 111 is six
  bits long:
  
  000: F,2
*************** bits long:
*** 182,201 ****
  110: I,3
  111: J,3
  
! So what we have here are three tables with a total of 20 entries that had to  
! be constructed.  That's compared to 64 entries for a single table.  Or  
! compared to 16 entries for a Huffman tree (six two entry tables and one four  
! entry table).  Assuming that the code ideally represents the probability of  
  the symbols, it takes on the average 1.25 lookups per symbol.  That's compared
! to one lookup for the single table, or 1.66 lookups per symbol for the  
  Huffman tree.
  
! There, I think that gives you a picture of what's going on.  For inflate, the  
! meaning of a particular symbol is often more than just a letter.  It can be a  
! byte (a "literal"), or it can be either a length or a distance which  
! indicates a base value and a number of bits to fetch after the code that is  
! added to the base value.  Or it might be the special end-of-block code.  The  
! data structures created in inftrees.c try to encode all that information  
  compactly in the tables.
  
  
--- 178,197 ----
  110: I,3
  111: J,3
  
! So what we have here are three tables with a total of 20 entries that had to
! be constructed.  That's compared to 64 entries for a single table.  Or
! compared to 16 entries for a Huffman tree (six two entry tables and one four
! entry table).  Assuming that the code ideally represents the probability of
  the symbols, it takes on the average 1.25 lookups per symbol.  That's compared
! to one lookup for the single table, or 1.66 lookups per symbol for the
  Huffman tree.
  
! There, I think that gives you a picture of what's going on.  For inflate, the
! meaning of a particular symbol is often more than just a letter.  It can be a
! byte (a "literal"), or it can be either a length or a distance which
! indicates a base value and a number of bits to fetch after the code that is
! added to the base value.  Or it might be the special end-of-block code.  The
! data structures created in inftrees.c try to encode all that information
  compactly in the tables.
  
  
*************** Compression,'' IEEE Transactions on Info
*** 210,213 ****
  pp. 337-343.
  
  ``DEFLATE Compressed Data Format Specification'' available in
! ftp://ds.internic.net/rfc/rfc1951.txt
--- 206,209 ----
  pp. 337-343.
  
  ``DEFLATE Compressed Data Format Specification'' available in
! http://www.ietf.org/rfc/rfc1951.txt
diff -Nrcpad gcc-3.4.3/zlib/amiga/Makefile.pup gcc-4.0.0/zlib/amiga/Makefile.pup
*** gcc-3.4.3/zlib/amiga/Makefile.pup	Mon Mar 11 21:49:17 2002
--- gcc-4.0.0/zlib/amiga/Makefile.pup	Mon Oct 11 18:45:38 2004
***************
*** 2,66 ****
  # makefile for libpng and SAS C V6.58/7.00 PPC compiler
  # Copyright (C) 1998 by Andreas R. Kleinert
  
! CC       = scppc
! CFLAGS   = NOSTKCHK NOSINT OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL \
!            OPTLOOP OPTRDEP=8 OPTDEP=8 OPTCOMP=8
! LIBNAME  = libzip.a
! AR       = ppc-amigaos-ar
! AR_FLAGS = cr
! RANLIB   = ppc-amigaos-ranlib
! LDFLAGS  = -r -o
! LDLIBS   = LIB:scppc.a
! LN       = ppc-amigaos-ld
! RM       = delete quiet
  
  OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
!        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
  
  TEST_OBJS = example.o minigzip.o
  
  all: example minigzip
  
  test: all
!         example
!         echo hello world | minigzip | minigzip -d
  
  $(LIBNAME): $(OBJS)
!             $(AR) $(AR_FLAGS) $@ $(OBJS)
!             $(RANLIB) $@
  
  example: example.o $(LIBNAME)
!         $(LN) $(LDFLAGS) example LIB:c_ppc.o example.o $(LIBNAME) $(LDLIBS) LIB:end.o
  
  minigzip: minigzip.o $(LIBNAME)
!         $(LN) $(LDFLAGS) minigzip LIB:c_ppc.o minigzip.o $(LIBNAME) $(LDLIBS) LIB:end.o
  
  clean:
!         $(RM) *.o example minigzip $(LIBNAME) foo.gz
  
  zip:
!         zip -ul9 zlib README ChangeLog Makefile Make????.??? Makefile.?? \
!           descrip.mms *.[ch]
  
  tgz:
!         cd ..; tar cfz zlib/zlib.tgz zlib/README zlib/ChangeLog zlib/Makefile \
!           zlib/Make????.??? zlib/Makefile.?? zlib/descrip.mms zlib/*.[ch]
  
  # DO NOT DELETE THIS LINE -- make depend depends on it.
  
! adler32.o: zutil.h zlib.h zconf.h
  compress.o: zlib.h zconf.h
! crc32.o: zutil.h zlib.h zconf.h
  deflate.o: deflate.h zutil.h zlib.h zconf.h
  example.o: zlib.h zconf.h
  gzio.o: zutil.h zlib.h zconf.h
! infblock.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h
! infcodes.o: zutil.h zlib.h zconf.h inftrees.h infutil.h infcodes.h inffast.h
! inffast.o: zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
! inflate.o: zutil.h zlib.h zconf.h infblock.h
  inftrees.o: zutil.h zlib.h zconf.h inftrees.h
- infutil.o: zutil.h zlib.h zconf.h inftrees.h infutil.h
  minigzip.o: zlib.h zconf.h
! trees.o: deflate.h zutil.h zlib.h zconf.h
  uncompr.o: zlib.h zconf.h
  zutil.o: zutil.h zlib.h zconf.h
--- 2,66 ----
  # makefile for libpng and SAS C V6.58/7.00 PPC compiler
  # Copyright (C) 1998 by Andreas R. Kleinert
  
! LIBNAME	= libzip.a
! 
! CC	= scppc
! CFLAGS	= NOSTKCHK NOSINT OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL \
! 	  OPTLOOP OPTRDEP=8 OPTDEP=8 OPTCOMP=8 NOVER
! AR	= ppc-amigaos-ar cr
! RANLIB	= ppc-amigaos-ranlib
! LD	= ppc-amigaos-ld -r
! LDFLAGS	= -o
! LDLIBS	= LIB:scppc.a LIB:end.o
! RM	= delete quiet
  
  OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
!        zutil.o inflate.o infback.o inftrees.o inffast.o
  
  TEST_OBJS = example.o minigzip.o
  
  all: example minigzip
  
+ check: test
  test: all
! 	example
! 	echo hello world | minigzip | minigzip -d
  
  $(LIBNAME): $(OBJS)
! 	$(AR) $@ $(OBJS)
! 	-$(RANLIB) $@
  
  example: example.o $(LIBNAME)
! 	$(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS)
  
  minigzip: minigzip.o $(LIBNAME)
! 	$(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS)
  
+ mostlyclean: clean
  clean:
! 	$(RM) *.o example minigzip $(LIBNAME) foo.gz
  
  zip:
! 	zip -ul9 zlib README ChangeLog Makefile Make????.??? Makefile.?? \
! 	  descrip.mms *.[ch]
  
  tgz:
! 	cd ..; tar cfz zlib/zlib.tgz zlib/README zlib/ChangeLog zlib/Makefile \
! 	  zlib/Make????.??? zlib/Makefile.?? zlib/descrip.mms zlib/*.[ch]
  
  # DO NOT DELETE THIS LINE -- make depend depends on it.
  
! adler32.o: zlib.h zconf.h
  compress.o: zlib.h zconf.h
! crc32.o: crc32.h zlib.h zconf.h
  deflate.o: deflate.h zutil.h zlib.h zconf.h
  example.o: zlib.h zconf.h
  gzio.o: zutil.h zlib.h zconf.h
! inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
! inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
! infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
  inftrees.o: zutil.h zlib.h zconf.h inftrees.h
  minigzip.o: zlib.h zconf.h
! trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
  uncompr.o: zlib.h zconf.h
  zutil.o: zutil.h zlib.h zconf.h
diff -Nrcpad gcc-3.4.3/zlib/amiga/Makefile.sas gcc-4.0.0/zlib/amiga/Makefile.sas
*** gcc-3.4.3/zlib/amiga/Makefile.sas	Mon Mar 11 21:49:17 2002
--- gcc-4.0.0/zlib/amiga/Makefile.sas	Mon Oct 11 18:45:38 2004
*************** CFLAGS=OPT
*** 10,31 ****
  LDFLAGS=LIB z.lib
  
  SCOPTIONS=OPTSCHED OPTINLINE OPTALIAS OPTTIME OPTINLOCAL STRMERGE \
!        NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX 
  
  OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
!        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
  
  TEST_OBJS = example.o minigzip.o
  
  all: SCOPTIONS example minigzip
  
  test: all
! 	`cd`/example
  	echo hello world | minigzip | minigzip -d 
  
  install: z.lib
! 	copy zlib.h zconf.h INCLUDE: clone
! 	copy z.lib LIB: clone
  
  z.lib: $(OBJS)
  	oml z.lib r $(OBJS)
--- 10,33 ----
  LDFLAGS=LIB z.lib
  
  SCOPTIONS=OPTSCHED OPTINLINE OPTALIAS OPTTIME OPTINLOCAL STRMERGE \
!        NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX \
!        DEF=POSTINC
  
  OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
!        zutil.o inflate.o infback.o inftrees.o inffast.o
  
  TEST_OBJS = example.o minigzip.o
  
  all: SCOPTIONS example minigzip
  
+ check: test
  test: all
! 	example
  	echo hello world | minigzip | minigzip -d 
  
  install: z.lib
! 	copy clone zlib.h zconf.h INCLUDE:
! 	copy clone z.lib LIB:
  
  z.lib: $(OBJS)
  	oml z.lib r $(OBJS)
*************** example: example.o z.lib
*** 36,64 ****
  minigzip: minigzip.o z.lib
  	$(CC) $(CFLAGS) LINK TO $@ minigzip.o $(LDFLAGS)
  
  clean:
! 	-delete force quiet *.o example minigzip z.lib foo.gz *.lnk SCOPTIONS
  
! SCOPTIONS: Smakefile
!         copy to $@ <from <
  $(SCOPTIONS)
  <
  
  # DO NOT DELETE THIS LINE -- make depend depends on it.
  
! adler32.o: zutil.h zlib.h zconf.h
  compress.o: zlib.h zconf.h
! crc32.o: zutil.h zlib.h zconf.h
  deflate.o: deflate.h zutil.h zlib.h zconf.h
  example.o: zlib.h zconf.h
  gzio.o: zutil.h zlib.h zconf.h
! infblock.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h
! infcodes.o: zutil.h zlib.h zconf.h inftrees.h infutil.h infcodes.h inffast.h
! inffast.o: zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
! inflate.o: zutil.h zlib.h zconf.h infblock.h
  inftrees.o: zutil.h zlib.h zconf.h inftrees.h
- infutil.o: zutil.h zlib.h zconf.h inftrees.h infutil.h
  minigzip.o: zlib.h zconf.h
! trees.o: deflate.h zutil.h zlib.h zconf.h
  uncompr.o: zlib.h zconf.h
  zutil.o: zutil.h zlib.h zconf.h
--- 38,65 ----
  minigzip: minigzip.o z.lib
  	$(CC) $(CFLAGS) LINK TO $@ minigzip.o $(LDFLAGS)
  
+ mostlyclean: clean
  clean:
! 	-delete force quiet example minigzip *.o z.lib foo.gz *.lnk SCOPTIONS
  
! SCOPTIONS: Makefile.sas
! 	copy to $@ <from <
  $(SCOPTIONS)
  <
  
  # DO NOT DELETE THIS LINE -- make depend depends on it.
  
! adler32.o: zlib.h zconf.h
  compress.o: zlib.h zconf.h
! crc32.o: crc32.h zlib.h zconf.h
  deflate.o: deflate.h zutil.h zlib.h zconf.h
  example.o: zlib.h zconf.h
  gzio.o: zutil.h zlib.h zconf.h
! inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
! inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
! infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
  inftrees.o: zutil.h zlib.h zconf.h inftrees.h
  minigzip.o: zlib.h zconf.h
! trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
  uncompr.o: zlib.h zconf.h
  zutil.o: zutil.h zlib.h zconf.h
diff -Nrcpad gcc-3.4.3/zlib/as400/bndsrc gcc-4.0.0/zlib/as400/bndsrc
*** gcc-3.4.3/zlib/as400/bndsrc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/as400/bndsrc	Mon Oct 11 17:44:27 2004
***************
*** 0 ****
--- 1,132 ----
+ STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB')
+ 
+ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+ /*   Version 1.1.3 entry points.                                    */
+ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+ 
+ /********************************************************************/
+ /*   *MODULE      ADLER32      ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("adler32")
+ 
+ /********************************************************************/
+ /*   *MODULE      COMPRESS     ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("compress")
+   EXPORT SYMBOL("compress2")
+ 
+ /********************************************************************/
+ /*   *MODULE      CRC32        ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("crc32")
+   EXPORT SYMBOL("get_crc_table")
+ 
+ /********************************************************************/
+ /*   *MODULE      DEFLATE      ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("deflate")
+   EXPORT SYMBOL("deflateEnd")
+   EXPORT SYMBOL("deflateSetDictionary")
+   EXPORT SYMBOL("deflateCopy")
+   EXPORT SYMBOL("deflateReset")
+   EXPORT SYMBOL("deflateParams")
+   EXPORT SYMBOL("deflatePrime")
+   EXPORT SYMBOL("deflateInit_")
+   EXPORT SYMBOL("deflateInit2_")
+ 
+ /********************************************************************/
+ /*   *MODULE      GZIO         ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("gzopen")
+   EXPORT SYMBOL("gzdopen")
+   EXPORT SYMBOL("gzsetparams")
+   EXPORT SYMBOL("gzread")
+   EXPORT SYMBOL("gzwrite")
+   EXPORT SYMBOL("gzprintf")
+   EXPORT SYMBOL("gzputs")
+   EXPORT SYMBOL("gzgets")
+   EXPORT SYMBOL("gzputc")
+   EXPORT SYMBOL("gzgetc")
+   EXPORT SYMBOL("gzflush")
+   EXPORT SYMBOL("gzseek")
+   EXPORT SYMBOL("gzrewind")
+   EXPORT SYMBOL("gztell")
+   EXPORT SYMBOL("gzeof")
+   EXPORT SYMBOL("gzclose")
+   EXPORT SYMBOL("gzerror")
+ 
+ /********************************************************************/
+ /*   *MODULE      INFLATE      ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("inflate")
+   EXPORT SYMBOL("inflateEnd")
+   EXPORT SYMBOL("inflateSetDictionary")
+   EXPORT SYMBOL("inflateSync")
+   EXPORT SYMBOL("inflateReset")
+   EXPORT SYMBOL("inflateInit_")
+   EXPORT SYMBOL("inflateInit2_")
+   EXPORT SYMBOL("inflateSyncPoint")
+ 
+ /********************************************************************/
+ /*   *MODULE      UNCOMPR      ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("uncompress")
+ 
+ /********************************************************************/
+ /*   *MODULE      ZUTIL        ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("zlibVersion")
+   EXPORT SYMBOL("zError")
+ 
+ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+ /*   Version 1.2.1 additional entry points.                         */
+ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+ 
+ /********************************************************************/
+ /*   *MODULE      COMPRESS     ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("compressBound")
+ 
+ /********************************************************************/
+ /*   *MODULE      DEFLATE      ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("deflateBound")
+ 
+ /********************************************************************/
+ /*   *MODULE      GZIO         ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("gzungetc")
+   EXPORT SYMBOL("gzclearerr")
+ 
+ /********************************************************************/
+ /*   *MODULE      INFBACK      ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("inflateBack")
+   EXPORT SYMBOL("inflateBackEnd")
+   EXPORT SYMBOL("inflateBackInit_")
+ 
+ /********************************************************************/
+ /*   *MODULE      INFLATE      ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("inflateCopy")
+ 
+ /********************************************************************/
+ /*   *MODULE      ZUTIL        ZLIB         01/02/01  00:15:09      */
+ /********************************************************************/
+ 
+   EXPORT SYMBOL("zlibCompileFlags")
+ 
+ ENDPGMEXP
diff -Nrcpad gcc-3.4.3/zlib/as400/compile.clp gcc-4.0.0/zlib/as400/compile.clp
*** gcc-3.4.3/zlib/as400/compile.clp	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/as400/compile.clp	Mon Oct 11 17:44:27 2004
***************
*** 0 ****
--- 1,123 ----
+ /******************************************************************************/
+ /*                                                                            */
+ /*  ZLIB                                                                      */
+ /*                                                                            */
+ /*    Compile sources into modules and link them into a service program.      */
+ /*                                                                            */
+ /******************************************************************************/
+ 
+              PGM
+ 
+ /*      Configuration adjustable parameters.                                  */
+ 
+              DCL        VAR(&SRCLIB) TYPE(*CHAR) LEN(10) +
+                           VALUE('ZLIB')                         /* Source library. */
+              DCL        VAR(&SRCFILE) TYPE(*CHAR) LEN(10) +
+                           VALUE('SOURCES')                      /* Source member file. */
+              DCL        VAR(&CTLFILE) TYPE(*CHAR) LEN(10) +
+                           VALUE('TOOLS')                        /* Control member file. */
+ 
+              DCL        VAR(&MODLIB) TYPE(*CHAR) LEN(10) +
+                           VALUE('ZLIB')                         /* Module library. */
+ 
+              DCL        VAR(&SRVLIB) TYPE(*CHAR) LEN(10) +
+                           VALUE('LGPL')                         /* Service program library. */
+ 
+              DCL        VAR(&CFLAGS) TYPE(*CHAR) +
+                           VALUE('OPTIMIZE(40)')                 /* Compile options. */
+ 
+ 
+ /*      Working storage.                                                      */
+ 
+              DCL        VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(300)    /* Command length. */
+              DCL        VAR(&CMD) TYPE(*CHAR) LEN(512)
+ 
+ 
+ /*      Compile sources into modules.                                         */
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/ADLER32)               SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/COMPRESS)              SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/CRC32)                 SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/DEFLATE)               SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/GZIO)                  SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/INFBACK)               SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/INFFAST)               SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/INFLATE)               SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/INFTREES)              SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/TREES)                 SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/UNCOMPR)               SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+              CHGVAR     VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT  +
+                         '/ZUTIL)                 SRCFILE(' *TCAT               +
+                         &SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT                 +
+                         ') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
+              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+ 
+ 
+ /*      Link modules into a service program.                                  */
+ 
+              CRTSRVPGM  SRVPGM(&SRVLIB/ZLIB) +
+                           MODULE(&MODLIB/ADLER32     &MODLIB/COMPRESS    +
+                                  &MODLIB/CRC32       &MODLIB/DEFLATE     +
+                                  &MODLIB/GZIO        &MODLIB/INFBACK     +
+                                  &MODLIB/INFFAST     &MODLIB/INFLATE     +
+                                  &MODLIB/INFTREES    &MODLIB/TREES       +
+                                  &MODLIB/UNCOMPR     &MODLIB/ZUTIL)      +
+                           SRCFILE(&SRCLIB/&CTLFILE) SRCMBR(BNDSRC) +
+                           TEXT('ZLIB 1.2.1') TGTRLS(V4R4M0)
+ 
+              ENDPGM
diff -Nrcpad gcc-3.4.3/zlib/as400/readme.txt gcc-4.0.0/zlib/as400/readme.txt
*** gcc-3.4.3/zlib/as400/readme.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/as400/readme.txt	Mon Oct 11 17:44:27 2004
***************
*** 0 ****
--- 1,111 ----
+         ZLIB version 1.2.1 for AS400 installation instructions
+ 
+ I) From an AS400 *SAVF file:
+ 
+ 1)      Unpacking archive to an AS400 save file
+ 
+ On the AS400:
+ 
+ _       Create the ZLIB AS400 library:
+ 
+         CRTLIB LIB(ZLIB) TYPE(PROD) TEXT('ZLIB compression API library')
+ 
+ _       Create a work save file, for example:
+ 
+                 CRTSAVF FILE(ZLIB/ZLIBSAVF)
+ 
+ On a PC connected to the target AS400:
+ 
+ _       Unpack the save file image to a PC file "ZLIBSAVF"
+ _       Upload this file into the save file on the AS400, for example
+                 using ftp in BINARY mode.
+ 
+ 
+ 2)      Populating the ZLIB AS400 source library
+ 
+ On the AS400:
+ 
+ _       Extract the saved objects into the ZLIB AS400 library using:
+ 
+ RSTOBJ OBJ(*ALL) SAVLIB(ZLIB) DEV(*SAVF) SAVF(ZLIB/ZLIBSAVF) RSTLIB(ZLIB)
+ 
+ 
+ 3)      Customize installation:
+ 
+ _       Edit CL member ZLIB/TOOLS(COMPILE) and change parameters if needed,
+                 according to the comments.
+ 
+ _       Compile this member with:
+ 
+         CRTCLPGM PGM(ZLIB/COMPILE) SRCFILE(ZLIB/TOOLS) SRCMBR(COMPILE)
+ 
+ 
+ 4)      Compile and generate the service program:
+ 
+ _       This can now be done by executing:
+ 
+         CALL PGM(ZLIB/COMPILE)
+ 
+ 
+ 
+ II) From the original source distribution:
+ 
+ 1)      On the AS400, create the source library:
+ 
+         CRTLIB LIB(ZLIB) TYPE(PROD) TEXT('ZLIB compression API library')
+ 
+ 2)      Create the source files:
+ 
+         CRTSRCPF FILE(ZLIB/SOURCES) RCDLEN(112) TEXT('ZLIB library modules')
+         CRTSRCPF FILE(ZLIB/H)       RCDLEN(112) TEXT('ZLIB library includes')
+         CRTSRCPF FILE(ZLIB/TOOLS)   RCDLEN(112) TEXT('ZLIB library control utilities')
+ 
+ 3)      From the machine hosting the distribution files, upload them (with
+                 FTP in text mode, for example) according to the following table:
+ 
+     Original    AS400   AS400    AS400 AS400
+     file        file    member   type  description
+                 SOURCES                Original ZLIB C subprogram sources
+     adler32.c           ADLER32  C     ZLIB - Compute the Adler-32 checksum of a dta strm
+     compress.c          COMPRESS C     ZLIB - Compress a memory buffer
+     crc32.c             CRC32    C     ZLIB - Compute the CRC-32 of a data stream
+     deflate.c           DEFLATE  C     ZLIB - Compress data using the deflation algorithm
+     gzio.c              GZIO     C     ZLIB - IO on .gz files
+     infback.c           INFBACK  C     ZLIB - Inflate using a callback interface
+     inffast.c           INFFAST  C     ZLIB - Fast proc. literals & length/distance pairs
+     inflate.c           INFLATE  C     ZLIB - Interface to inflate modules
+     inftrees.c          INFTREES C     ZLIB - Generate Huffman trees for efficient decode
+     trees.c             TREES    C     ZLIB - Output deflated data using Huffman coding
+     uncompr.c           UNCOMPR  C     ZLIB - Decompress a memory buffer
+     zutil.c             ZUTIL    C     ZLIB - Target dependent utility functions
+                 H                      Original ZLIB C and ILE/RPG include files
+     crc32.h             CRC32    C     ZLIB - CRC32 tables
+     deflate.h           DEFLATE  C     ZLIB - Internal compression state
+     inffast.h           INFFAST  C     ZLIB - Header to use inffast.c
+     inffixed.h          INFFIXED C     ZLIB - Table for decoding fixed codes
+     inflate.h           INFLATE  C     ZLIB - Internal inflate state definitions
+     inftrees.h          INFTREES C     ZLIB - Header to use inftrees.c
+     trees.h             TREES    C     ZLIB - Created automatically with -DGEN_TREES_H
+     zconf.h             ZCONF    C     ZLIB - Compression library configuration
+     zlib.h              ZLIB     C     ZLIB - Compression library C user interface
+     as400/zlib.inc      ZLIB.INC RPGLE ZLIB - Compression library ILE RPG user interface
+     zutil.h             ZUTIL    C     ZLIB - Internal interface and configuration
+                 TOOLS                  Building source software & AS/400 README
+     as400/bndsrc        BNDSRC         Entry point exportation list
+     as400/compile.clp   COMPILE  CLP   Compile sources & generate service program
+     as400/readme.txt    README   TXT   Installation instructions
+ 
+ 4)      Continue as in I)3).
+ 
+ 
+ 
+ 
+ Notes:  For AS400 ILE RPG programmers, a /copy member defining the ZLIB
+                 API prototypes for ILE RPG can be found in ZLIB/H(ZLIB.INC).
+                 Please read comments in this member for more information.
+ 
+         Remember that most foreign textual data are ASCII coded: this
+                 implementation does not handle conversion from/to ASCII, so
+                 text data code conversions must be done explicitely.
+ 
+         Always open zipped files in binary mode.
diff -Nrcpad gcc-3.4.3/zlib/as400/zlib.inc gcc-4.0.0/zlib/as400/zlib.inc
*** gcc-3.4.3/zlib/as400/zlib.inc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/as400/zlib.inc	Mon Oct 11 17:44:27 2004
***************
*** 0 ****
--- 1,327 ----
+       *  ZLIB.INC - Interface to the general purpose compression library
+       *
+       *  ILE RPG400 version by Patrick Monnerat, DATASPHERE.
+       *  Version 1.2.1
+       *
+       *
+       *  WARNING:
+       *     Procedures inflateInit(), inflateInit2(), deflateInit(),
+       *         deflateInit2() and inflateBackInit() need to be called with
+       *         two additional arguments:
+       *         the package version string and the stream control structure.
+       *         size. This is needed because RPG lacks some macro feature.
+       *         Call these procedures as:
+       *             inflateInit(...: ZLIB_VERSION: %size(z_stream))
+       *
+       /if not defined(ZLIB_H_)
+       /define ZLIB_H_
+       *
+       **************************************************************************
+       *                               Constants
+       **************************************************************************
+       *
+      D ZLIB_VERSION    C                   '1.2.1'                            Header's version
+      D ZLIB_VERNUM     C                   X'1210'
+       *
+      D Z_NO_FLUSH      C                   0
+      D Z_SYNC_FLUSH    C                   2
+      D Z_FULL_FLUSH    C                   3
+      D Z_FINISH        C                   4
+      D Z_BLOCK         C                   5
+       *
+      D Z_OK            C                   0
+      D Z_STREAM_END    C                   1
+      D Z_NEED_DICT     C                   2
+      D Z_ERRNO         C                   -1
+      D Z_STREAM_ERROR  C                   -2
+      D Z_DATA_ERROR    C                   -3
+      D Z_MEM_ERROR     C                   -4
+      D Z_BUF_ERROR     C                   -5
+      DZ_VERSION_ERROR  C                   -6
+       *
+      D Z_NO_COMPRESSION...
+      D                 C                   0
+      D Z_BEST_SPEED    C                   1
+      D Z_BEST_COMPRESSION...
+      D                 C                   9
+      D Z_DEFAULT_COMPRESSION...
+      D                 C                   -1
+       *
+      D Z_FILTERED      C                   1
+      D Z_HUFFMAN_ONLY  C                   2
+      D Z_RLE           C                   3
+      D Z_DEFAULT_STRATEGY...
+      D                 C                   0
+       *
+      D Z_BINARY        C                   0
+      D Z_ASCII         C                   1
+      D Z_UNKNOWN       C                   2
+       *
+      D Z_DEFLATED      C                   8
+       *
+      D Z_NULL          C                   0
+       *
+       **************************************************************************
+       *                                 Types
+       **************************************************************************
+       *
+      D z_streamp       S               *                                        Stream struct ptr
+      D gzFile          S               *                                        File pointer
+      D z_off_t         S             10i 0                                      Stream offsets
+       *
+       **************************************************************************
+       *                               Structures
+       **************************************************************************
+       *
+       *  The GZIP encode/decode stream support structure.
+       *
+      D z_stream        DS                  align based(z_streamp)
+      D  zs_next_in                     *                                        Next input byte
+      D  zs_avail_in                  10U 0                                      Byte cnt at next_in
+      D  zs_total_in                  10U 0                                      Total bytes read
+      D  zs_next_out                    *                                        Output buffer ptr
+      D  zs_avail_out                 10U 0                                      Room left @ next_out
+      D  zs_total_out                 10U 0                                      Total bytes written
+      D  zs_msg                         *                                        Last errmsg or null
+      D  zs_state                       *                                        Internal state
+      D  zs_zalloc                      *   procptr                              Int. state allocator
+      D  zs_free                        *   procptr                              Int. state dealloc.
+      D  zs_opaque                      *                                        Private alloc. data
+      D  zs_data_type                 10i 0                                      ASC/BIN best guess
+      D  zs_adler                     10u 0                                      Uncompr. adler32 val
+      D                               10U 0                                      Reserved
+      D                               10U 0                                      Ptr. alignment
+       *
+       **************************************************************************
+       *                     Utility function prototypes
+       **************************************************************************
+       *
+      D compress        PR            10I 0 extproc('compress')
+      D  dest                      32767    options(*varsize)                    Destination buffer
+      D  destLen                      10U 0                                      Destination length
+      D  source                    32767    const options(*varsize)              Source buffer
+      D  sourceLen                    10u 0 value                                Source length
+       *
+      D compress2       PR            10I 0 extproc('compress2')
+      D  dest                      32767    options(*varsize)                    Destination buffer
+      D  destLen                      10U 0                                      Destination length
+      D  source                    32767    const options(*varsize)              Source buffer
+      D  sourceLen                    10U 0 value                                Source length
+      D  level                        10I 0 value                                Compression level
+       *
+      D compressBound   PR            10U 0 extproc('compressBound')
+      D  sourceLen                    10U 0 value
+       *
+      D uncompress      PR            10I 0 extproc('uncompress')
+      D  dest                      32767    options(*varsize)                    Destination buffer
+      D  destLen                      10U 0                                      Destination length
+      D  source                    32767    const options(*varsize)              Source buffer
+      D  sourceLen                    10U 0 value                                Source length
+       *
+      D gzopen          PR                  extproc('gzopen')
+      D                                     like(gzFile)
+      D  path                           *   value options(*string)               File pathname
+      D  mode                           *   value options(*string)               Open mode
+       *
+      D gzdopen         PR                  extproc('gzdopen')
+      D                                     like(gzFile)
+      D  fd                           10i 0 value                                File descriptor
+      D  mode                           *   value options(*string)               Open mode
+       *
+      D gzsetparams     PR            10I 0 extproc('gzsetparams')
+      D  file                               value like(gzFile)                   File pointer
+      D  level                        10I 0 value
+      D  strategy                     10i 0 value
+       *
+      D gzread          PR            10I 0 extproc('gzread')
+      D  file                               value like(gzFile)                   File pointer
+      D  buf                       32767    options(*varsize)                    Buffer
+      D  len                          10u 0 value                                Buffer length
+       *
+      D gzwrite         PR            10I 0 extproc('gzwrite')
+      D  file                               value like(gzFile)                   File pointer
+      D  buf                       32767    const options(*varsize)              Buffer
+      D  len                          10u 0 value                                Buffer length
+       *
+      D gzputs          PR            10I 0 extproc('gzputs')
+      D  file                               value like(gzFile)                   File pointer
+      D  s                              *   value options(*string)               String to output
+       *
+      D gzgets          PR              *   extproc('gzgets')
+      D  file                               value like(gzFile)                   File pointer
+      D  buf                       32767    options(*varsize)                    Read buffer
+      D  len                          10i 0 value                                Buffer length
+       *
+      D gzflush         PR            10i 0 extproc('gzflush')
+      D  file                               value like(gzFile)                   File pointer
+      D  flush                        10I 0 value                                Type of flush
+       *
+      D gzseek          PR                  extproc('gzseek')
+      D                                     like(z_off_t)
+      D  file                               value like(gzFile)                   File pointer
+      D  offset                             value like(z_off_t)                  Offset
+      D  whence                       10i 0 value                                Origin
+       *
+      D gzrewind        PR            10i 0 extproc('gzrewind')
+      D  file                               value like(gzFile)                   File pointer
+       *
+      D gztell          PR                  extproc('gztell')
+      D                                     like(z_off_t)
+      D  file                               value like(gzFile)                   File pointer
+       *
+      D gzeof           PR            10i 0 extproc('gzeof')
+      D  file                               value like(gzFile)                   File pointer
+       *
+      D gzclose         PR            10i 0 extproc('gzclose')
+      D  file                               value like(gzFile)                   File pointer
+       *
+      D gzerror         PR              *   extproc('gzerror')                   Error string
+      D  file                               value like(gzFile)                   File pointer
+      D  errnum                       10I 0                                      Error code
+       *
+      D gzclearerr      PR                  extproc('gzclearerr')
+      D  file                               value like(gzFile)                   File pointer
+       *
+       **************************************************************************
+       *                        Basic function prototypes
+       **************************************************************************
+       *
+      D zlibVersion     PR              *   extproc('zlibVersion')               Version string
+       *
+      D deflateInit     PR            10I 0 extproc('deflateInit_')              Init. compression
+      D  strm                               like(z_stream)                       Compression stream
+      D  level                        10I 0 value                                Compression level
+      D  version                        *   value options(*string)               Version string
+      D  stream_size                  10i 0 value                                Stream struct. size
+       *
+      D deflate         PR            10I 0 extproc('deflate')                   Compress data
+      D  strm                               like(z_stream)                       Compression stream
+      D  flush                        10I 0 value                                Flush type required
+       *
+      D deflateEnd      PR            10I 0 extproc('deflateEnd')                Termin. compression
+      D  strm                               like(z_stream)                       Compression stream
+       *
+      D inflateInit     PR            10I 0 extproc('inflateInit_')              Init. expansion
+      D  strm                               like(z_stream)                       Expansion stream
+      D  version                        *   value options(*string)               Version string
+      D  stream_size                  10i 0 value                                Stream struct. size
+       *
+      D inflate         PR            10I 0 extproc('inflate')                   Expand data
+      D  strm                               like(z_stream)                       Expansion stream
+      D  flush                        10I 0 value                                Flush type required
+       *
+      D inflateEnd      PR            10I 0 extproc('inflateEnd')                Termin. expansion
+      D  strm                               like(z_stream)                       Expansion stream
+       *
+       **************************************************************************
+       *                        Advanced function prototypes
+       **************************************************************************
+       *
+      D deflateInit2    PR            10I 0 extproc('deflateInit2_')             Init. compression
+      D  strm                               like(z_stream)                       Compression stream
+      D  level                        10I 0 value                                Compression level
+      D  method                       10I 0 value                                Compression method
+      D  windowBits                   10I 0 value                                log2(window size)
+      D  memLevel                     10I 0 value                                Mem/cmpress tradeoff
+      D  strategy                     10I 0 value                                Compression stategy
+      D  version                        *   value options(*string)               Version string
+      D  stream_size                  10i 0 value                                Stream struct. size
+       *
+      D deflateSetDictionary...
+      D                 PR            10I 0 extproc('deflateSetDictionary')      Init. dictionary
+      D  strm                               like(z_stream)                       Compression stream
+      D  dictionary                32767    const options(*varsize)              Dictionary bytes
+      D  dictLength                   10U 0 value                                Dictionary length
+       *
+      D deflateCopy     PR            10I 0 extproc('deflateCopy')               Compress strm 2 strm
+      D  dest                               like(z_stream)                       Destination stream
+      D  source                             like(z_stream)                       Source stream
+       *
+      D deflateReset    PR            10I 0 extproc('deflateReset')              End and init. stream
+      D  strm                               like(z_stream)                       Compression stream
+       *
+      D deflateParams   PR            10I 0 extproc('deflateParams')             Change level & strat
+      D  strm                               like(z_stream)                       Compression stream
+      D  level                        10I 0 value                                Compression level
+      D  strategy                     10I 0 value                                Compression stategy
+       *
+      D deflateBound    PR            10U 0 extproc('deflateBound')              Change level & strat
+      D  strm                               like(z_stream)                       Compression stream
+      D  sourcelen                    10U 0 value                                Compression level
+       *
+      D deflatePrime    PR            10I 0 extproc('deflatePrime')              Change level & strat
+      D  strm                               like(z_stream)                       Compression stream
+      D  bits                         10I 0 value                                Number of bits to insert
+      D  value                        10I 0 value                                Bits to insert
+       *
+      D inflateInit2    PR            10I 0 extproc('inflateInit2_')             Init. expansion
+      D  strm                               like(z_stream)                       Expansion stream
+      D  windowBits                   10I 0 value                                log2(window size)
+      D  version                        *   value options(*string)               Version string
+      D  stream_size                  10i 0 value                                Stream struct. size
+       *
+      D inflateSetDictionary...
+      D                 PR            10I 0 extproc('inflateSetDictionary')      Init. dictionary
+      D  strm                               like(z_stream)                       Expansion stream
+      D  dictionary                32767    const options(*varsize)              Dictionary bytes
+      D  dictLength                   10U 0 value                                Dictionary length
+       *
+      D inflateSync     PR            10I 0 extproc('inflateSync')               Sync. expansion
+      D  strm                               like(z_stream)                       Expansion stream
+       *
+      D inflateCopy     PR            10I 0 extproc('inflateCopy')
+      D  dest                               like(z_stream)                       Destination stream
+      D  source                             like(z_stream)                       Source stream
+       *
+      D inflateReset    PR            10I 0 extproc('inflateReset')              End and init. stream
+      D  strm                               like(z_stream)                       Expansion stream
+       *
+      D inflateBackInit...
+      D                 PR            10I 0 extproc('inflateBackInit_')
+      D  strm                               like(z_stream)                       Expansion stream
+      D  windowBits                   10I 0 value                                Log2(buffer size)
+      D  window                    32767    options(*varsize)                    Buffer
+      D  version                        *   value options(*string)               Version string
+      D  stream_size                  10i 0 value                                Stream struct. size
+       *
+      D inflateBack     PR            10I 0 extproc('inflateBack')
+      D  strm                               like(z_stream)                       Expansion stream
+      D  in                             *   value procptr                        Input function
+      D  in_desc                        *   value                                Input descriptor
+      D  out                            *   value procptr                        Output function
+      D  out_desc                       *   value                                Output descriptor
+       *
+      D inflateBackEnd  PR            10I 0 extproc('inflateBackEnd')
+      D  strm                               like(z_stream)                       Expansion stream
+       *
+      D zlibCompileFlags...
+      D                 PR            10U 0 extproc('zlibCompileFlags')
+       *
+       **************************************************************************
+       *                        Checksum function prototypes
+       **************************************************************************
+       *
+      D adler32         PR            10U 0 extproc('adler32')                   New checksum
+      D  adler                        10U 0 value                                Old checksum
+      D  buf                       32767    const options(*varsize)              Bytes to accumulate
+      D  len                          10U 0 value                                Buffer length
+       *
+      D crc32           PR            10U 0 extproc('crc32')                     New checksum
+      D  crc                          10U 0 value                                Old checksum
+      D  buf                       32767    const options(*varsize)              Bytes to accumulate
+      D  len                          10U 0 value                                Buffer length
+       *
+       **************************************************************************
+       *                     Miscellaneous function prototypes
+       **************************************************************************
+       *
+      D zError          PR              *   extproc('zError')                    Error string
+      D  err                          10I 0 value                                Error code
+       *
+      D inflateSyncPoint...
+      D                 PR            10I 0 extproc('inflateSyncPoint')
+      D  strm                               like(z_stream)                       Expansion stream
+       *
+      D get_crc_table   PR              *   extproc('get_crc_table')             Ptr to ulongs
+       *
+       /endif
diff -Nrcpad gcc-3.4.3/zlib/compress.c gcc-4.0.0/zlib/compress.c
*** gcc-3.4.3/zlib/compress.c	Mon Mar 11 22:11:16 2002
--- gcc-4.0.0/zlib/compress.c	Mon Oct 11 18:45:37 2004
***************
*** 1,10 ****
  /* compress.c -- compress a memory buffer
   * Copyright (C) 1995-2002 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* @(#) $Id: compress.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
  
  #include "zlib.h"
  
  /* ===========================================================================
--- 1,11 ----
  /* compress.c -- compress a memory buffer
   * Copyright (C) 1995-2002 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /* @(#) $Id: compress.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
  
+ #define ZLIB_INTERNAL
  #include "zlib.h"
  
  /* ===========================================================================
*************** int ZEXPORT compress (dest, destLen, sou
*** 66,68 ****
--- 67,79 ----
  {
      return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
  }
+ 
+ /* ===========================================================================
+      If the default memLevel or windowBits for deflateInit() is changed, then
+    this function needs to be updated.
+  */
+ uLong ZEXPORT compressBound (sourceLen)
+     uLong sourceLen;
+ {
+     return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11;
+ }
diff -Nrcpad gcc-3.4.3/zlib/configure gcc-4.0.0/zlib/configure
*** gcc-3.4.3/zlib/configure	Tue May 18 09:09:14 2004
--- gcc-4.0.0/zlib/configure	Wed Nov 24 22:04:38 2004
***************
*** 1,50 ****
  #! /bin/sh
- 
  # Guess values for system-dependent variables and create Makefiles.
! # Generated automatically using autoconf version 2.13 
! # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  #
  # This configure script is free software; the Free Software Foundation
  # gives unlimited permission to copy, distribute and modify it.
  
! # Defaults:
! ac_help=
  ac_default_prefix=/usr/local
! # Any additions from configure.in:
! ac_help="$ac_help
!   --enable-maintainer-mode enable make rules and dependencies not useful
!                           (and sometimes confusing) to the casual installer"
! ac_help="$ac_help
!   --with-target-subdir=SUBDIR
!                           configuring in a subdirectory"
! ac_help="$ac_help
!   --with-cross-host=HOST  configuring with a cross compiler"
! ac_help="$ac_help
!   --enable-multilib       build many library versions (default)"
! ac_help="$ac_help
!   --with-system-zlib      use installed libz"
! ac_help="$ac_help
!   --enable-shared[=PKGS]  build shared libraries [default=yes]"
! ac_help="$ac_help
!   --enable-static[=PKGS]  build static libraries [default=yes]"
! ac_help="$ac_help
!   --enable-fast-install[=PKGS]  optimize for fast installation [default=yes]"
! ac_help="$ac_help
!   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]"
! ac_help="$ac_help
!   --disable-libtool-lock  avoid locking (might break parallel builds)"
! ac_help="$ac_help
!   --with-pic              try to use only PIC/non-PIC objects [default=use both]"
  
  # Initialize some variables set by options.
  # The variables have the same names as the options, with
  # dashes changed to underlines.
! build=NONE
! cache_file=./config.cache
  exec_prefix=NONE
- host=NONE
  no_create=
- nonopt=NONE
  no_recursion=
  prefix=NONE
  program_prefix=NONE
--- 1,325 ----
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
! # 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.
+ ## --------------------- ##
+ ## 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=
! PACKAGE_TARNAME=
! PACKAGE_VERSION=
! PACKAGE_STRING=
! PACKAGE_BUGREPORT=
! 
! ac_unique_file="zlib.h"
! # 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 multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os mkinstalldirs 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 MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT COMPPATH CC ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CFLAGS LN_S RANLIB ac_ct_RANLIB LIBTOOL CPP CPPFLAGS EGREP target_all toolexecdir toolexeclibdir TARGET_LIBRARY_TRUE TARGET_LIBRARY_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_transform_name=s,x,x,
*** 53,62 ****
  silent=
  site=
  srcdir=
- target=NONE
  verbose=
  x_includes=NONE
  x_libraries=NONE
  bindir='${exec_prefix}/bin'
  sbindir='${exec_prefix}/sbin'
  libexecdir='${exec_prefix}/libexec'
--- 328,342 ----
  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'
*************** oldincludedir='/usr/include'
*** 70,86 ****
  infodir='${prefix}/info'
  mandir='${prefix}/man'
  
- # Initialize some other variables.
- subdirs=
- MFLAGS= MAKEFLAGS=
- SHELL=${CONFIG_SHELL-/bin/sh}
- # Maximum number of lines to put in a shell here document.
- ac_max_here_lines=12
- 
  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"
--- 350,358 ----
*************** do
*** 88,146 ****
      continue
    fi
  
!   case "$ac_option" in
!   -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
!   *) ac_optarg= ;;
!   esac
  
    # 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 ;;
    -build=* | --build=* | --buil=* | --bui=* | --bu=*)
!     build="$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" ;;
  
    -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
      ac_prev=datadir ;;
    -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
    | --da=*)
!     datadir="$ac_optarg" ;;
  
    -disable-* | --disable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     eval "enable_${ac_feature}=no" ;;
  
    -enable-* | --enable-*)
!     ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
!     fi
!     ac_feature=`echo $ac_feature| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) 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- \
--- 360,418 ----
      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- \
*************** do
*** 149,243 ****
    -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)
!     # 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 << EOF
! Usage: configure [options] [host]
! Options: [defaults in brackets after descriptions]
! Configuration:
!   --cache-file=FILE       cache test results in FILE
!   --help                  print this message
!   --no-create             do not create output files
!   --quiet, --silent       do not print \`checking...' messages
!   --version               print the version of autoconf that created configure
! Directory and file names:
!   --prefix=PREFIX         install architecture-independent files in PREFIX
!                           [$ac_default_prefix]
!   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
!                           [same as prefix]
!   --bindir=DIR            user executables in DIR [EPREFIX/bin]
!   --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
!   --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
!   --datadir=DIR           read-only architecture-independent data in DIR
!                           [PREFIX/share]
!   --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
!   --sharedstatedir=DIR    modifiable architecture-independent data in DIR
!                           [PREFIX/com]
!   --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
!   --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
!   --includedir=DIR        C header files in DIR [PREFIX/include]
!   --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
!   --infodir=DIR           info documentation in DIR [PREFIX/info]
!   --mandir=DIR            man documentation in DIR [PREFIX/man]
!   --srcdir=DIR            find the sources in DIR [configure dir or ..]
!   --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
! EOF
!     cat << EOF
! Host type:
!   --build=BUILD           configure for building on BUILD [BUILD=HOST]
!   --host=HOST             configure for HOST [guessed]
!   --target=TARGET         configure for TARGET [TARGET=HOST]
! Features and packages:
!   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
!   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
!   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
!   --x-includes=DIR        X include files are in DIR
!   --x-libraries=DIR       X library files are in DIR
! EOF
!     if test -n "$ac_help"; then
!       echo "--enable and --with options recognized:$ac_help"
!     fi
!     exit 0 ;;
  
    -host | --host | --hos | --ho)
!     ac_prev=host ;;
    -host=* | --host=* | --hos=* | --ho=*)
!     host="$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 \
--- 421,467 ----
    -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 \
*************** EOF
*** 246,264 ****
    -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)
      no_create=yes ;;
  
    -no-recursion | --no-recursion | --no-recursio | --no-recursi \
--- 470,488 ----
    -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 \
*************** EOF
*** 272,297 ****
    -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 \
--- 496,521 ----
    -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 \
*************** EOF
*** 308,314 ****
    | --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)
--- 532,538 ----
    | --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)
*************** EOF
*** 318,324 ****
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir="$ac_optarg" ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
--- 542,548 ----
      ac_prev=sbindir ;;
    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
    | --sbi=* | --sb=*)
!     sbindir=$ac_optarg ;;
  
    -sharedstatedir | --sharedstatedir | --sharedstatedi \
    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
*************** EOF
*** 329,386 ****
    | --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 ;;
    -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
!     target="$ac_optarg" ;;
  
    -v | -verbose | --verbose | --verbos | --verbo | --verb)
      verbose=yes ;;
  
!   -version | --version | --versio | --versi | --vers)
!     echo "configure generated by autoconf version 2.13"
!     exit 0 ;;
  
    -with-* | --with-*)
!     ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
      ac_package=`echo $ac_package| sed 's/-/_/g'`
!     case "$ac_option" in
!       *=*) ;;
        *) ac_optarg=yes ;;
      esac
!     eval "with_${ac_package}='$ac_optarg'" ;;
  
    -without-* | --without-*)
!     ac_package=`echo $ac_option|sed -e 's/-*without-//'`
      # Reject names that are not valid shell variable names.
!     if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
!       { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
!     fi
!     ac_package=`echo $ac_package| sed 's/-/_/g'`
!     eval "with_${ac_package}=no" ;;
  
    --x)
      # Obsolete; use --with-x.
--- 553,609 ----
    | --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.
*************** EOF
*** 391,489 ****
      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 "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
      ;;
  
    *)
!     if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
!       echo "configure: warning: $ac_option: invalid host type" 1>&2
!     fi
!     if test "x$nonopt" != xNONE; then
!       { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
!     fi
!     nonopt="$ac_option"
      ;;
  
    esac
  done
  
  if test -n "$ac_prev"; then
!   { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
! fi
! 
! trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
! 
! # File descriptor usage:
! # 0 standard input
! # 1 file creation
! # 2 errors and warnings
! # 3 some systems may open it to /dev/tty
! # 4 used on the Kubota Titan
! # 6 checking for... messages and results
! # 5 compiler messages saved in config.log
! if test "$silent" = yes; then
!   exec 6>/dev/null
! else
!   exec 6>&1
  fi
- exec 5>./config.log
  
! echo "\
! This file contains any messages produced by compilers while
! running configure, to aid debugging if configure makes a mistake.
! " 1>&5
  
! # Strip out --no-create and --no-recursion so they do not pile up.
! # Also quote any args containing shell metacharacters.
! ac_configure_args=
! for ac_arg
  do
!   case "$ac_arg" in
!   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
!   | --no-cr | --no-c) ;;
!   -no-recursion | --no-recursion | --no-recursio | --no-recursi \
!   | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
!   *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
!   ac_configure_args="$ac_configure_args '$ac_arg'" ;;
!   *) ac_configure_args="$ac_configure_args $ac_arg" ;;
    esac
  done
  
! # NLS nuisances.
! # Only set these to C if already set.  These must not be set unconditionally
! # because not all systems understand e.g. LANG=C (notably SCO).
! # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
! # Non-C LC_CTYPE values break the ctype check.
! if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
! if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
! if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
! if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  
! # 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
  
- # A filename unique to this package, relative to the directory that
- # configure is in, which we can look for to find out if srcdir is correct.
- ac_unique_file=zlib.h
  
  # 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_prog=$0
!   ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
!   test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
    srcdir=$ac_confdir
    if test ! -r $srcdir/$ac_unique_file; then
      srcdir=..
--- 614,723 ----
      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=..
*************** else
*** 493,505 ****
  fi
  if test ! -r $srcdir/$ac_unique_file; then
    if test "$ac_srcdir_defaulted" = yes; then
!     { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
    else
!     { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
    fi
  fi
! srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
  
  # Prefer explicitly selected file to automatically selected ones.
  if test -z "$CONFIG_SITE"; then
    if test "x$prefix" != xNONE; then
--- 727,1201 ----
  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_CPP_set=${CPP+set}
! ac_env_CPP_value=$CPP
! ac_cv_env_CPP_set=${CPP+set}
! ac_cv_env_CPP_value=$CPP
! ac_env_CPPFLAGS_set=${CPPFLAGS+set}
! ac_env_CPPFLAGS_value=$CPPFLAGS
! ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
! ac_cv_env_CPPFLAGS_value=$CPPFLAGS
! 
! #
! # 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 this package 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
! 
! 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
! 
!   cat <<\_ACEOF
! 
! Optional Features:
!   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
!   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
!   --enable-multilib       build many library versions (default)
!   --enable-maintainer-mode  enable make rules and dependencies not useful
! 			  (and sometimes confusing) to the casual installer
!   --disable-dependency-tracking  speeds up one-time build
!   --enable-dependency-tracking   do not reject slow dependency extractors
!   --enable-shared=PKGS  build shared libraries default=yes
!   --enable-static=PKGS  build static libraries default=yes
!   --enable-fast-install=PKGS  optimize for fast installation default=yes
!   --disable-libtool-lock  avoid locking (might break parallel builds)
! 
! Optional Packages:
!   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
!   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
!   --with-target-subdir=SUBDIR
!                           configuring in a subdirectory
!   --with-cross-host=HOST  configuring with a cross compiler
!   --with-system-zlib      use installed libz
!   --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
! 
! 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
! 
! Use these variables to override the choices made by `configure' or to help
! it to find libraries and programs with nonstandard names/locations.
! 
! _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
! 
! 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 $as_me, 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
*************** if test -z "$CONFIG_SITE"; then
*** 510,571 ****
  fi
  for ac_site_file in $CONFIG_SITE; do
    if test -r "$ac_site_file"; then
!     echo "loading site script $ac_site_file"
      . "$ac_site_file"
    fi
  done
  
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
- ac_exeext=
- ac_objext=o
- if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-     ac_n= ac_c='
- ' ac_t='	'
-   else
-     ac_n=-n ac_c= ac_t=
-   fi
- else
-   ac_n= ac_c='\c' ac_t=
- fi
  
  
  
- # This works around the fact that libtool configuration may change LD
- # for this particular configuration, but some shells, instead of
- # keeping the changes in LD private, export them just because LD is
- # exported.
- ORIGINAL_LD_FOR_MULTILIBS=$LD
  
  
! if test "x${with_target_subdir}" != x && \
!    test "${srcdir}" = "."; then
!   if test "${with_target_subdir}" != "."; then
!     zlib_basedir="${srcdir}/${with_multisrctop}../"
    else
!     zlib_basedir="${srcdir}/${with_multisrctop}"
    fi
  else
!   zlib_basedir="${srcdir}/"
  fi
  
  ac_aux_dir=
! for ac_dir in $zlib_basedir.. $srcdir/$zlib_basedir..; do
    if test -f $ac_dir/install-sh; then
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install-sh -c"
--- 1206,1347 ----
  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
  
  
  
  
  
  
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! # Default to --enable-multilib
! # Check whether --enable-multilib or --disable-multilib was given.
! if test "${enable_multilib+set}" = set; then
!   enableval="$enable_multilib"
!   case "$enableval" in
!   yes) multilib=yes ;;
!   no)  multilib=no ;;
!   *)   { { echo "$as_me:$LINENO: error: bad value $enableval for multilib option" >&5
! echo "$as_me: error: bad value $enableval for multilib option" >&2;}
!    { (exit 1); exit 1; }; } ;;
!  esac
! else
!   multilib=yes
! fi;
! 
! # We may get other options which we leave undocumented:
! # --with-target-subdir, --with-multisrctop, --with-multisubdir
! # See config-ml.in if you want the gory details.
! 
! if test "$srcdir" = "."; then
!   if test "$with_target_subdir" != "."; then
!     multi_basedir="$srcdir/$with_multisrctop../.."
    else
!     multi_basedir="$srcdir/$with_multisrctop.."
    fi
  else
!   multi_basedir="$srcdir/.."
  fi
  
+ 
+           ac_config_commands="$ac_config_commands default-1"
+ 
+ 
  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"
*************** for ac_dir in $zlib_basedir.. $srcdir/$z
*** 574,706 ****
      ac_aux_dir=$ac_dir
      ac_install_sh="$ac_aux_dir/install.sh -c"
      break
!   fi
! done
! if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in $zlib_basedir.. $srcdir/$zlib_basedir.." 1>&2; exit 1; }
! fi
! ac_config_guess=$ac_aux_dir/config.guess
! ac_config_sub=$ac_aux_dir/config.sub
! ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
! 
! if :; then :; else
!   # This overrides the previous occurrence for automake, but not for
!   # autoconf, which is exactly what we want.
!   ac_aux_dir=
! for ac_dir in .. $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
    fi
  done
  if test -z "$ac_aux_dir"; then
!   { echo "configure: error: can not find install-sh or install.sh in .. $srcdir/.." 1>&2; exit 1; }
! fi
! ac_config_guess=$ac_aux_dir/config.guess
! ac_config_sub=$ac_aux_dir/config.sub
! ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
! 
  fi
! 
! 
! # Do some error checking and defaulting for the host and target type.
! # The inputs are:
! #    configure --host=HOST --target=TARGET --build=BUILD NONOPT
! #
! # The rules are:
! # 1. You are not allowed to specify --host, --target, and nonopt at the
! #    same time.
! # 2. Host defaults to nonopt.
! # 3. If nonopt is not specified, then host defaults to the current host,
! #    as determined by config.guess.
! # 4. Target and build default to nonopt.
! # 5. If nonopt is not specified, then target and build default to host.
! 
! # The aliases save the names the user supplied, while $host etc.
! # will get canonicalized.
! case $host---$target---$nonopt in
! NONE---*---* | *---NONE---* | *---*---NONE) ;;
! *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
! esac
! 
  
  # Make sure we can run config.sub.
! if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
! else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
! fi
  
! echo $ac_n "checking host system type""... $ac_c" 1>&6
! echo "configure:639: checking host system type" >&5
  
! host_alias=$host
! case "$host_alias" in
! NONE)
!   case $nonopt in
!   NONE)
!     if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
!     else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
!     fi ;;
!   *) host_alias=$nonopt ;;
!   esac ;;
! esac
  
- host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
- host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
- host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
- host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
- echo "$ac_t""$host" 1>&6
  
! echo $ac_n "checking target system type""... $ac_c" 1>&6
! echo "configure:660: checking target system type" >&5
  
! target_alias=$target
! case "$target_alias" in
! NONE)
!   case $nonopt in
!   NONE) target_alias=$host_alias ;;
!   *) target_alias=$nonopt ;;
!   esac ;;
! esac
  
- target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
- target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
- target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
- target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
- echo "$ac_t""$target" 1>&6
  
! echo $ac_n "checking build system type""... $ac_c" 1>&6
! echo "configure:678: checking build system type" >&5
  
! build_alias=$build
! case "$build_alias" in
! NONE)
!   case $nonopt in
!   NONE) build_alias=$host_alias ;;
!   *) build_alias=$nonopt ;;
!   esac ;;
! esac
  
- build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
- build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
- build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
- build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
- echo "$ac_t""$build" 1>&6
  
! test "$host_alias" != "$target_alias" &&
    test "$program_prefix$program_suffix$program_transform_name" = \
      NONENONEs,x,x, &&
    program_prefix=${target_alias}-
  
- 
  # This works around an automake problem.
  mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
  
  
  # 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:
--- 1350,1458 ----
      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}-
  
  # This works around an automake problem.
  mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
  
  
+ 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:
*************** mkinstalldirs="`cd $ac_aux_dir && ${PWDC
*** 708,952 ****
  # SunOS /usr/etc/install
  # IRIX /sbin/install
  # AIX /bin/install
  # 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"
  # ./install, which can be erroneously created by make from ./install.sh.
! echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:717: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
! if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
!   for ac_dir in $PATH; do
!     # Account for people who put trailing slashes in PATH elements.
!     case "$ac_dir/" in
!     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
!         if test -f $ac_dir/$ac_prog; then
  	  if test $ac_prog = install &&
!             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
  	    # AIX install.  It has an incompatible calling convention.
  	    :
  	  else
! 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
! 	    break 2
  	  fi
  	fi
        done
!       ;;
!     esac
!   done
!   IFS="$ac_save_IFS"
  
  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 "$ac_t""$INSTALL" 1>&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_PROGRAM}'
  
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
! echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
! echo "configure:770: checking whether build environment is sane" >&5
  # Just in case
  sleep 1
! echo timestamp > conftestfile
  # 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 conftestfile 2> /dev/null`
     if test "$*" = "X"; then
        # -L didn't work.
!       set X `ls -t $srcdir/configure conftestfile`
     fi
!    if test "$*" != "X $srcdir/configure conftestfile" \
!       && test "$*" != "X conftestfile $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 "configure: error: ls -t appears to fail.  Make sure there is not a broken
! alias in your environment" 1>&2; exit 1; }
     fi
  
!    test "$2" = conftestfile
     )
  then
     # Ok.
     :
  else
!    { echo "configure: error: newly created file is older than distributed files!
! Check your system clock" 1>&2; exit 1; }
! fi
! rm -f conftest*
! echo "$ac_t""yes" 1>&6
! if test "$program_transform_name" = s,x,x,; then
!   program_transform_name=
! else
!   # Double any \ or $.  echo might interpret backslashes.
!   cat <<\EOF_SED > conftestsed
! s,\\,\\\\,g; s,\$,$$,g
! EOF_SED
!   program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
!   rm -f conftestsed
  fi
  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"
  
! # sed with no file args requires a program.
! test "$program_transform_name" = "" && program_transform_name="s,x,x,"
  
! echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
! echo "configure:827: checking whether ${MAKE-make} sets \${MAKE}" >&5
! set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftestmake <<\EOF
  all:
! 	@echo 'ac_maketemp="${MAKE}"'
! EOF
  # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
! eval `${MAKE-make} -f conftestmake 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 conftestmake
  fi
  if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    SET_MAKE=
  else
!   echo "$ac_t""no" 1>&6
    SET_MAKE="MAKE=${MAKE-make}"
  fi
  
  
! PACKAGE=zlib
! 
! VERSION=1.1.4
  
! if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
!   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
  fi
! cat >> confdefs.h <<EOF
  #define PACKAGE "$PACKAGE"
! EOF
  
! cat >> confdefs.h <<EOF
  #define VERSION "$VERSION"
! EOF
  
  
  
! missing_dir=`cd $ac_aux_dir && pwd`
! echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
! echo "configure:873: checking for working aclocal" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (aclocal --version) < /dev/null > /dev/null 2>&1; then
!    ACLOCAL=aclocal
!    echo "$ac_t""found" 1>&6
  else
!    ACLOCAL="$missing_dir/missing aclocal"
!    echo "$ac_t""missing" 1>&6
! fi
  
! echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
! echo "configure:886: checking for working autoconf" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoconf --version) < /dev/null > /dev/null 2>&1; then
!    AUTOCONF=autoconf
!    echo "$ac_t""found" 1>&6
  else
!    AUTOCONF="$missing_dir/missing autoconf"
!    echo "$ac_t""missing" 1>&6
  fi
  
- echo $ac_n "checking for working automake""... $ac_c" 1>&6
- echo "configure:899: checking for working automake" >&5
- # Run test in a subshell; some versions of sh will print an error if
- # an executable is not found, even if stderr is redirected.
- # Redirect stdin to placate older versions of autoconf.  Sigh.
- if (automake --version) < /dev/null > /dev/null 2>&1; then
-    AUTOMAKE=automake
-    echo "$ac_t""found" 1>&6
- else
-    AUTOMAKE="$missing_dir/missing automake"
-    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
! echo "configure:912: checking for working autoheader" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (autoheader --version) < /dev/null > /dev/null 2>&1; then
!    AUTOHEADER=autoheader
!    echo "$ac_t""found" 1>&6
  else
!    AUTOHEADER="$missing_dir/missing autoheader"
!    echo "$ac_t""missing" 1>&6
  fi
  
! echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
! echo "configure:925: checking for working makeinfo" >&5
! # Run test in a subshell; some versions of sh will print an error if
! # an executable is not found, even if stderr is redirected.
! # Redirect stdin to placate older versions of autoconf.  Sigh.
! if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
!    MAKEINFO=makeinfo
!    echo "$ac_t""found" 1>&6
  else
!    MAKEINFO="$missing_dir/missing makeinfo"
!    echo "$ac_t""missing" 1>&6
  fi
  
  
  
! echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
! echo "configure:940: checking whether to enable maintainer-specific portions of Makefiles" >&5
      # 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 "$ac_t""$USE_MAINTAINER_MODE" 1>&6
-   
  
  if test $USE_MAINTAINER_MODE = yes; then
    MAINTAINER_MODE_TRUE=
--- 1460,1882 ----
  # 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=zlib
!  VERSION=1.1.4
! 
! 
! 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"}
! 
! am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
! 
! 
! 
! 
! 
! 
! 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=
*************** else
*** 955,976 ****
    MAINTAINER_MODE_TRUE='#'
    MAINTAINER_MODE_FALSE=
  fi
    MAINT=$MAINTAINER_MODE_TRUE
!   
  
  
  # Check whether --with-target-subdir or --without-target-subdir was given.
  if test "${with_target_subdir+set}" = set; then
    withval="$with_target_subdir"
!   :
  fi
  
  # Check whether --with-cross-host or --without-cross-host was given.
  if test "${with_cross_host+set}" = set; then
    withval="$with_cross_host"
-   :
- fi
  
  
  # Check whether --enable-multilib or --disable-multilib was given.
  if test "${enable_multilib+set}" = set; then
--- 1885,1915 ----
    MAINTAINER_MODE_TRUE='#'
    MAINTAINER_MODE_FALSE=
  fi
+ 
    MAINT=$MAINTAINER_MODE_TRUE
! 
! 
  
  
  # Check whether --with-target-subdir or --without-target-subdir was given.
  if test "${with_target_subdir+set}" = set; then
    withval="$with_target_subdir"
! 
! fi;
! 
! if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
!    COMPPATH=.
! else
!    COMPPATH=..
  fi
  
+ 
+ 
  # Check whether --with-cross-host or --without-cross-host was given.
  if test "${with_cross_host+set}" = set; then
    withval="$with_cross_host"
  
+ fi;
  
  # Check whether --enable-multilib or --disable-multilib was given.
  if test "${enable_multilib+set}" = set; then
*************** if test "${enable_multilib+set}" = set; 
*** 978,1238 ****
    case "${enableval}" in
    yes) multilib=yes ;;
    no)  multilib=no ;;
!   *)   { echo "configure: error: bad value ${enableval} for multilib option" 1>&2; exit 1; } ;;
   esac
  else
    test -z "$with_target_subdir" && multilib=no || multilib=yes
! fi
  
  # Check whether --with-system-zlib or --without-system-zlib was given.
  if test "${with_system_zlib+set}" = set; then
    withval="$with_system_zlib"
-   :
- fi
  
  
  
! # Extract the first word of "gcc", so it can be a program name with args.
  set dummy gcc; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:999: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$CC"; then
    ac_cv_prog_CC="$CC" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_CC="gcc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! CC="$ac_cv_prog_CC"
  if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1029: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$CC"; then
    ac_cv_prog_CC="$CC" # Let the user override the test.
  else
-   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
    ac_prog_rejected=no
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
!         ac_prog_rejected=yes
! 	continue
!       fi
!       ac_cv_prog_CC="cc"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  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 $# -gt 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
!     set dummy "$ac_dir/$ac_word" "$@"
!     shift
!     ac_cv_prog_CC="$@"
    fi
  fi
  fi
  fi
! CC="$ac_cv_prog_CC"
  if test -n "$CC"; then
!   echo "$ac_t""$CC" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
-   test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  fi
  
! echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
! echo "configure:1078: checking whether we are using GNU C" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.c <<EOF
! #ifdef __GNUC__
!   yes;
! #endif
! EOF
! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1087: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
!   ac_cv_prog_gcc=yes
  else
!   ac_cv_prog_gcc=no
  fi
  fi
  
! echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  
! if test $ac_cv_prog_gcc = yes; then
!   GCC=yes
!   ac_test_CFLAGS="${CFLAGS+set}"
!   ac_save_CFLAGS="$CFLAGS"
!   CFLAGS=
!   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
! echo "configure:1102: checking whether ${CC-cc} accepts -g" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   echo 'void f(){}' > conftest.c
! if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
!   ac_cv_prog_cc_g=yes
  else
!   ac_cv_prog_cc_g=no
  fi
- rm -f conftest*
  
  fi
  
! echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
!   if test "$ac_test_CFLAGS" = set; then
!     CFLAGS="$ac_save_CFLAGS"
!   elif test $ac_cv_prog_cc_g = yes; then
      CFLAGS="-g -O2"
    else
!     CFLAGS="-O2"
    fi
  else
!   GCC=
!   test "${CFLAGS+set}" = set || CFLAGS="-g"
  fi
  
! # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
! # at least currently, we never actually build a program, so we never
! # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
! # fails, because we are probably configuring with a cross compiler
! # which cant create executables.  So we include AC_EXEEXT to keep
! # automake happy, but we dont execute it, since we dont care about
! # the result.
! if false; then
!   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
!   # to nothing, so nothing would remain between `then' and `fi' if it
!   # were not for the `:' below.
!   :
!   echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
! echo "configure:1142: checking for Cygwin environment" >&5
! if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 1147 "configure"
! #include "confdefs.h"
  
! int main() {
  
! #ifndef __CYGWIN__
! #define __CYGWIN__ __CYGWIN32__
  #endif
! return __CYGWIN__;
! ; return 0; }
! EOF
! if { (eval echo configure:1158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
!   rm -rf conftest*
!   ac_cv_cygwin=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   ac_cv_cygwin=no
  fi
  rm -f conftest*
! rm -f conftest*
  fi
  
- echo "$ac_t""$ac_cv_cygwin" 1>&6
- CYGWIN=
- test "$ac_cv_cygwin" = yes && CYGWIN=yes
- echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
- echo "configure:1175: checking for mingw32 environment" >&5
- if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 1180 "configure"
! #include "confdefs.h"
  
- int main() {
- return __MINGW32__;
- ; return 0; }
- EOF
- if { (eval echo configure:1187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_mingw32=yes
- else
-   echo "configure: failed program was:" >&5
-   cat conftest.$ac_ext >&5
-   rm -rf conftest*
-   ac_cv_mingw32=no
  fi
! rm -f conftest*
! rm -f conftest*
  fi
  
- echo "$ac_t""$ac_cv_mingw32" 1>&6
- MINGW32=
- test "$ac_cv_mingw32" = yes && MINGW32=yes
  
  
! echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
! echo "configure:1206: checking for executable suffix" >&5
! if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
!   ac_cv_exeext=.exe
  else
!   rm -f conftest*
!   echo 'int main () { return 0; }' > conftest.$ac_ext
!   ac_cv_exeext=
!   if { (eval echo configure:1216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
!     for file in conftest.*; do
!       case $file in
!       *.$ac_ext | *.c | *.o | *.obj) ;;
!       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
!       esac
!     done
!   else
!     { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
    fi
!   rm -f conftest*
!   test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
  fi
  fi
  
- EXEEXT=""
- test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
- echo "$ac_t""${ac_cv_exeext}" 1>&6
- ac_exeext=$EXEEXT
  
  fi
  # Check whether --enable-shared or --disable-shared was given.
  if test "${enable_shared+set}" = set; then
    enableval="$enable_shared"
--- 1917,3088 ----
    case "${enableval}" in
    yes) multilib=yes ;;
    no)  multilib=no ;;
!   *)   { { echo "$as_me:$LINENO: error: bad value ${enableval} for multilib option" >&5
! echo "$as_me: error: bad value ${enableval} for multilib option" >&2;}
!    { (exit 1); exit 1; }; } ;;
   esac
  else
    test -z "$with_target_subdir" && multilib=no || multilib=yes
! fi;
  
  # Check whether --with-system-zlib or --without-system-zlib was given.
  if test "${with_system_zlib+set}" = set; then
    withval="$with_system_zlib"
  
+ fi;
  
+ # Make sure we don't test executables when making cross-tools.
  
! 
! # The same as in boehm-gc and libstdc++. Have to borrow it from there.
! # We must force CC to /not/ be precious variables; otherwise
! # the wrong, non-multilib-adjusted value will be used in multilibs.
! # As a side effect, we have to subst CFLAGS ourselves.
! 
! 
! 
! 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
! # FIXME: Cleanup?
! 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
!   gcc_no_link=no
  else
!   gcc_no_link=yes
! fi
! 
! if test x$gcc_no_link = xyes; then
!   # Setting cross_compile will disable run tests; it will
!   # also disable AC_CHECK_FILE but that's generally
!   # correct if we can't link.
!   cross_compiling=yes
!   EXEEXT=
  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
! 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
! fi
! 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
! 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
! 
! 
! 
! 
! 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
+ 
+ 
+ 
+ 
+ 
+ 
  # Check whether --enable-shared or --disable-shared was given.
  if test "${enable_shared+set}" = set; then
    enableval="$enable_shared"
*************** no) enable_shared=no ;;
*** 1254,1261 ****
  esac
  else
    enable_shared=yes
! fi
! 
  # Check whether --enable-static or --disable-static was given.
  if test "${enable_static+set}" = set; then
    enableval="$enable_static"
--- 3104,3110 ----
  esac
  else
    enable_shared=yes
! fi;
  # Check whether --enable-static or --disable-static was given.
  if test "${enable_static+set}" = set; then
    enableval="$enable_static"
*************** no) enable_static=no ;;
*** 1277,1284 ****
  esac
  else
    enable_static=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"
--- 3126,3132 ----
  esac
  else
    enable_static=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"
*************** no) enable_fast_install=no ;;
*** 1300,1306 ****
  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
--- 3148,3154 ----
  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
*************** if test "${with_gnu_ld+set}" = set; then
*** 1308,1320 ****
    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 $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
! echo "configure:1318: checking for ld used by GCC" >&5
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
--- 3156,3167 ----
    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
*************** echo "configure:1318: checking for ld us
*** 1343,1356 ****
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
!   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
! echo "configure:1348: checking for GNU ld" >&5
  else
!   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
! echo "configure:1351: checking for non-GNU ld" >&5
  fi
! if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
--- 3190,3203 ----
      ;;
    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-:}"
*************** fi
*** 1376,1390 ****
  
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
!   echo "$ac_t""$LD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
! test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
! echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
! echo "configure:1386: checking if the linker ($LD) is GNU ld" >&5
! if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&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
--- 3223,3241 ----
  
  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
*************** else
*** 1393,1419 ****
    lt_cv_prog_gnu_ld=no
  fi
  fi
! 
! echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6
  with_gnu_ld=$lt_cv_prog_gnu_ld
  
  
! echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
! echo "configure:1403: checking for $LD option to reload object files" >&5
! if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_ld_reload_flag='-r'
  fi
! 
! echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  
! echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
! echo "configure:1415: checking for BSD-compatible nm" >&5
! if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$NM"; then
    # Let the user override the test.
--- 3244,3270 ----
    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.
*************** fi
*** 1446,1478 ****
  fi
  
  NM="$lt_cv_path_NM"
! echo "$ac_t""$NM" 1>&6
  
! echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
! echo "configure:1453: checking whether ln -s works" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
! else
!   rm -f conftestdata
! if ln -s X conftestdata 2>/dev/null
! then
!   rm -f conftestdata
!   ac_cv_prog_LN_S="ln -s"
! else
!   ac_cv_prog_LN_S=ln
! fi
! fi
! LN_S="$ac_cv_prog_LN_S"
! if test "$ac_cv_prog_LN_S" = "ln -s"; then
!   echo "$ac_t""yes" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
! echo "configure:1474: checking how to recognise dependant libraries" >&5
! if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
--- 3297,3320 ----
  fi
  
  NM="$lt_cv_path_NM"
! echo "$as_me:$LINENO: result: $NM" >&5
! echo "${ECHO_T}$NM" >&6
  
! 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
  
! 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=
*************** cygwin* | mingw* |pw32*)
*** 1509,1514 ****
--- 3351,3357 ----
    ;;
  
  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
*************** darwin* | rhapsody*)
*** 1519,1527 ****
      lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
      ;;
    esac
    ;;
  
! freebsd* )
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
--- 3362,3371 ----
      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 )
*************** irix5* | irix6*)
*** 1579,1595 ****
  
  # This must be Linux ELF.
  linux-gnu*)
!   case $host_cpu in
!   alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
!     lt_cv_deplibs_check_method=pass_all ;;
!   *)
!     # glibc up to 2.1.1 does not perform some relocations on ARM
!     lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
!   esac
!   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
! netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
    else
--- 3423,3432 ----
  
  # 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
*************** sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
*** 1637,1676 ****
  esac
  
  fi
! 
! echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  
- echo $ac_n "checking for object suffix""... $ac_c" 1>&6
- echo "configure:1647: checking for object suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   rm -f conftest*
- echo 'int i = 1;' > conftest.$ac_ext
- if { (eval echo configure:1653: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   for ac_file in conftest.*; do
-     case $ac_file in
-     *.c) ;;
-     *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;;
-     esac
-   done
- else
-   { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; }
- fi
- rm -f conftest*
- fi
  
- echo "$ac_t""$ac_cv_objext" 1>&6
- OBJEXT=$ac_cv_objext
- ac_objext=$ac_cv_objext
  
! if test $host != $build; then
!   ac_tool_prefix=${host_alias}-
! else
!   ac_tool_prefix=
! fi
  
  # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
  
--- 3474,3487 ----
  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!
  
*************** fi
*** 1678,1687 ****
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
!     echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
! echo "configure:1683: checking for ${ac_tool_prefix}file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 3489,3498 ----
  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
    /*)
*************** fi
*** 1733,1749 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
!     echo $ac_n "checking for file""... $ac_c" 1>&6
! echo "configure:1745: checking for file" >&5
! if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    case $MAGIC_CMD in
    /*)
--- 3544,3562 ----
  
  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
    /*)
*************** fi
*** 1795,1803 ****
  
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
!   echo "$ac_t""$MAGIC_CMD" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
    else
--- 3608,3618 ----
  
  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
*************** fi
*** 1809,1946 ****
    ;;
  esac
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1816: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$RANLIB"; then
    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
  if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_RANLIB"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1848: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$RANLIB"; then
!   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_RANLIB="ranlib"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
  fi
  fi
! RANLIB="$ac_cv_prog_RANLIB"
! if test -n "$RANLIB"; then
!   echo "$ac_t""$RANLIB" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   RANLIB=":"
! fi
  fi
  
! # 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1883: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test -n "$STRIP"; then
    ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="${ac_tool_prefix}strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
  if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
! 
  if test -z "$ac_cv_prog_STRIP"; then
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "strip", so it can be a program name with args.
  set dummy strip; ac_word=$2
! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1915: checking for $ac_word" >&5
! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   if test -n "$STRIP"; then
!   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  else
!   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
!   ac_dummy="$PATH"
!   for ac_dir in $ac_dummy; do
!     test -z "$ac_dir" && ac_dir=.
!     if test -f $ac_dir/$ac_word; then
!       ac_cv_prog_STRIP="strip"
!       break
!     fi
!   done
!   IFS="$ac_save_ifs"
!   test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":"
  fi
  fi
! STRIP="$ac_cv_prog_STRIP"
! if test -n "$STRIP"; then
!   echo "$ac_t""$STRIP" 1>&6
  else
!   echo "$ac_t""no" 1>&6
  fi
  
  else
!   STRIP=":"
! fi
  fi
  
  
--- 3624,3787 ----
    ;;
  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
  
  
*************** test "$lt_cv_prog_gnu_ld" = yes && libto
*** 1956,1975 ****
  # 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"
  
--- 3797,3815 ----
  # 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"
  
*************** test x"$pic_mode" = xno && libtool_flags
*** 1978,1985 ****
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 1982 "configure"' > conftest.$ac_ext
!   if { (eval echo configure:1983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     if test "$lt_cv_prog_gnu_ld" = yes; then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
--- 3818,3829 ----
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
!   echo '#line 3821 "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*)
*************** case $host in
*** 2012,2018 ****
  ia64-*-hpux*)
    # Find out which ABI we are using.
    echo 'int i;' > conftest.$ac_ext
!   if { (eval echo configure:2016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *ELF-32*)
        HPUX_IA64_MODE="32"
--- 3856,3866 ----
  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"
*************** ia64-*-hpux*)
*** 2028,2034 ****
  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 configure:2032: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
      case "`/usr/bin/file conftest.o`" in
      *32-bit*)
        case $host in
--- 3876,3886 ----
  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*|ppc*-*linux*|powerpc*-*li
*** 2071,2117 ****
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
!   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
! echo "configure:2076: checking whether the C compiler needs -belf" >&5
! if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
!      cat > conftest.$ac_ext <<EOF
! #line 2089 "configure"
! #include "confdefs.h"
  
! int main() {
  
! ; return 0; }
! EOF
! if { (eval echo configure:2096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
    lt_cv_cc_needs_belf=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   lt_cv_cc_needs_belf=no
  fi
! rm -f conftest*
       ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  ac_cpp='$CPP $CPPFLAGS'
! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
! cross_compiling=$ac_cv_prog_cc_cross
  
  fi
! 
! echo "$ac_t""$lt_cv_cc_needs_belf" 1>&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"
--- 3923,4001 ----
    # 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
  
!      if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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"
*************** esac
*** 2123,2176 ****
  
  
  # Save cache, so that ltconfig can load it
! cat > confcache <<\EOF
  # 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.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # 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 \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     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" \
--- 4007,4067 ----
  
  
  # 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" \
*************** objext="$OBJEXT" exeext="$EXEEXT" reload
*** 2180,2194 ****
  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 "configure: error: libtool configure failed" 1>&2; exit 1; }
  
  # Reload cache, that may have been modified by ltconfig
  if test -r "$cache_file"; then
!   echo "loading cache $cache_file"
!   . $cache_file
  else
!   echo "creating cache $cache_file"
!   > $cache_file
  fi
  
  
--- 4071,4096 ----
  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
  
  
*************** LIBTOOL='$(SHELL) $(top_builddir)/libtoo
*** 2202,2301 ****
  # clobbered by the next message.
  exec 5>>./config.log
  
-   
  
-   
- 	 
- 	 
  
! if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
!    COMPPATH=.
! else
!    COMPPATH=..
! fi
  
  
  # Find CPP now so that any conditional tests below won't do it and
  # thereby make the resulting definitions conditional.
! echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
! echo "configure:2222: checking how to run the C preprocessor" >&5
  # On Suns, sometimes $CPP names a directory.
  if test -n "$CPP" && test -d "$CPP"; then
    CPP=
  fi
  if test -z "$CPP"; then
! if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!     # This must be in double quotes, not single quotes, because CPP may get
!   # substituted into the Makefile and "${CC-cc}" will confuse make.
!   CPP="${CC-cc} -E"
    # On the NeXT, cc -E runs the code through the compiler's parser,
!   # not just through cpp.
!   cat > conftest.$ac_ext <<EOF
! #line 2237 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2243: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -E -traditional-cpp"
!   cat > conftest.$ac_ext <<EOF
! #line 2254 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2260: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
    :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP="${CC-cc} -nologo -E"
!   cat > conftest.$ac_ext <<EOF
! #line 2271 "configure"
! #include "confdefs.h"
! #include <assert.h>
! Syntax Error
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2277: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   :
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   CPP=/lib/cpp
  fi
! rm -f conftest*
  fi
! rm -f conftest*
  fi
! rm -f conftest*
!   ac_cv_prog_CPP="$CPP"
  fi
!   CPP="$ac_cv_prog_CPP"
  else
!   ac_cv_prog_CPP="$CPP"
  fi
! echo "$ac_t""$CPP" 1>&6
  
  
  if test -n "$with_cross_host"; then
--- 4104,4350 ----
  # clobbered by the next message.
  exec 5>>./config.log
  
  
  
! 
! 
  
  
  # Find CPP now so that any conditional tests below won't do it and
  # thereby make the resulting definitions conditional.
! 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
  
  
  if test -n "$with_cross_host"; then
*************** if test -n "$with_cross_host"; then
*** 2305,2428 ****
  
     # We assume newlib.  This lets us hard-code the functions we know
     # we'll have.
!    cat >> confdefs.h <<\EOF
  #define HAVE_MEMCPY 1
! EOF
  
!    cat >> confdefs.h <<\EOF
  #define HAVE_STRERROR 1
! EOF
  
  
     # We ignore --with-system-zlib in this case.
     target_all=libzgcj.la
  else
!    for ac_hdr in unistd.h
! do
! ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:2325: checking for $ac_hdr" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 2330 "configure"
! #include "confdefs.h"
! #include <$ac_hdr>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
  rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_hdr 1
! EOF
!  
  else
!   echo "$ac_t""no" 1>&6
  fi
  done
  
  for ac_func in getpagesize
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:2364: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 2369 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:2392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
! echo $ac_n "checking for working mmap""... $ac_c" 1>&6
! echo "configure:2417: checking for working mmap" >&5
! if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test "$cross_compiling" = yes; then
    ac_cv_func_mmap_fixed_mapped=no
  else
!   cat > conftest.$ac_ext <<EOF
! #line 2425 "configure"
! #include "confdefs.h"
  
  /* Thanks to Mike Haertel and Jim Avera for this test.
     Here is a matrix of mmap possibilities:
--- 4354,4906 ----
  
     # We assume newlib.  This lets us hard-code the functions we know
     # we'll have.
!    cat >>confdefs.h <<\_ACEOF
  #define HAVE_MEMCPY 1
! _ACEOF
  
!    cat >>confdefs.h <<\_ACEOF
  #define HAVE_STRERROR 1
! _ACEOF
  
  
     # We ignore --with-system-zlib in this case.
     target_all=libzgcj.la
  else
!    if test x$gcc_no_link = xyes; then
!   if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then
!     ac_cv_func_mmap_fixed_mapped=no
!   fi
! fi
! if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then
! 
! 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
! 
! 
! 
! 
! for ac_header in stdlib.h unistd.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 the AC_PACKAGE_NAME lists.  ##
+ ## ------------------------------------------ ##
+ _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
  
+ 
  for ac_func in getpagesize
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 for working mmap" >&5
! echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
! if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    if test "$cross_compiling" = yes; then
    ac_cv_func_mmap_fixed_mapped=no
  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
! /* malloc might have been renamed as rpl_malloc. */
! #undef malloc
  
  /* Thanks to Mike Haertel and Jim Avera for this test.
     Here is a matrix of mmap possibilities:
*************** else
*** 2436,2469 ****
     back from the file, nor mmap's back from the file at a different
     address.  (There have been systems where private was not correctly
     implemented like the infamous i386 svr4.0, and systems where the
!    VM page cache was not coherent with the filesystem buffer cache
     like early versions of FreeBSD and possibly contemporary NetBSD.)
     For shared mappings, we should conversely verify that changes get
!    propogated back to all the places they're supposed to be.
  
     Grep wants private fixed already mapped.
     The main things grep needs to know about mmap are:
     * does it exist and is it safe to write into the mmap'd area
     * how to use it (BSD variants)  */
! #include <sys/types.h>
  #include <fcntl.h>
  #include <sys/mman.h>
  
! /* This mess was copied from the GNU getpagesize.h.  */
! #ifndef HAVE_GETPAGESIZE
! # ifdef HAVE_UNISTD_H
! #  include <unistd.h>
! # endif
  
  /* Assume that all systems that can run configure have sys/param.h.  */
! # ifndef HAVE_SYS_PARAM_H
  #  define HAVE_SYS_PARAM_H 1
  # endif
  
  # ifdef _SC_PAGESIZE
  #  define getpagesize() sysconf(_SC_PAGESIZE)
  # else /* no _SC_PAGESIZE */
! #  ifdef HAVE_SYS_PARAM_H
  #   include <sys/param.h>
  #   ifdef EXEC_PAGESIZE
  #    define getpagesize() EXEC_PAGESIZE
--- 4914,4947 ----
     back from the file, nor mmap's back from the file at a different
     address.  (There have been systems where private was not correctly
     implemented like the infamous i386 svr4.0, and systems where the
!    VM page cache was not coherent with the file system buffer cache
     like early versions of FreeBSD and possibly contemporary NetBSD.)
     For shared mappings, we should conversely verify that changes get
!    propagated back to all the places they're supposed to be.
  
     Grep wants private fixed already mapped.
     The main things grep needs to know about mmap are:
     * does it exist and is it safe to write into the mmap'd area
     * how to use it (BSD variants)  */
! 
  #include <fcntl.h>
  #include <sys/mman.h>
  
! #if !STDC_HEADERS && !HAVE_STDLIB_H
! char *malloc ();
! #endif
  
+ /* This mess was copied from the GNU getpagesize.h.  */
+ #if !HAVE_GETPAGESIZE
  /* Assume that all systems that can run configure have sys/param.h.  */
! # if !HAVE_SYS_PARAM_H
  #  define HAVE_SYS_PARAM_H 1
  # endif
  
  # ifdef _SC_PAGESIZE
  #  define getpagesize() sysconf(_SC_PAGESIZE)
  # else /* no _SC_PAGESIZE */
! #  if HAVE_SYS_PARAM_H
  #   include <sys/param.h>
  #   ifdef EXEC_PAGESIZE
  #    define getpagesize() EXEC_PAGESIZE
*************** else
*** 2490,2684 ****
  
  #endif /* no HAVE_GETPAGESIZE */
  
- #ifdef __cplusplus
- extern "C" { void *malloc(unsigned); }
- #else
- char *malloc();
- #endif
- 
  int
! main()
  {
! 	char *data, *data2, *data3;
! 	int i, pagesize;
! 	int fd;
  
! 	pagesize = getpagesize();
  
! 	/*
! 	 * First, make a file with some known garbage in it.
! 	 */
! 	data = malloc(pagesize);
! 	if (!data)
! 		exit(1);
! 	for (i = 0; i < pagesize; ++i)
! 		*(data + i) = rand();
! 	umask(0);
! 	fd = creat("conftestmmap", 0600);
! 	if (fd < 0)
! 		exit(1);
! 	if (write(fd, data, pagesize) != pagesize)
! 		exit(1);
! 	close(fd);
  
! 	/*
! 	 * Next, try to mmap the file at a fixed address which
! 	 * already has something else allocated at it.  If we can,
! 	 * also make sure that we see the same garbage.
! 	 */
! 	fd = open("conftestmmap", O_RDWR);
! 	if (fd < 0)
! 		exit(1);
! 	data2 = malloc(2 * pagesize);
! 	if (!data2)
! 		exit(1);
! 	data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
! 	if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE,
! 	    MAP_PRIVATE | MAP_FIXED, fd, 0L))
! 		exit(1);
! 	for (i = 0; i < pagesize; ++i)
! 		if (*(data + i) != *(data2 + i))
! 			exit(1);
  
! 	/*
! 	 * Finally, make sure that changes to the mapped area
! 	 * do not percolate back to the file as seen by read().
! 	 * (This is a bug on some variants of i386 svr4.0.)
! 	 */
! 	for (i = 0; i < pagesize; ++i)
! 		*(data2 + i) = *(data2 + i) + 1;
! 	data3 = malloc(pagesize);
! 	if (!data3)
! 		exit(1);
! 	if (read(fd, data3, pagesize) != pagesize)
! 		exit(1);
! 	for (i = 0; i < pagesize; ++i)
! 		if (*(data + i) != *(data3 + i))
! 			exit(1);
! 	close(fd);
! 	unlink("conftestmmap");
! 	exit(0);
  }
! 
! EOF
! if { (eval echo configure:2565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
! then
    ac_cv_func_mmap_fixed_mapped=yes
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -fr conftest*
!   ac_cv_func_mmap_fixed_mapped=no
  fi
! rm -fr conftest*
  fi
- 
  fi
! 
! echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6
  if test $ac_cv_func_mmap_fixed_mapped = yes; then
!   cat >> confdefs.h <<\EOF
  #define HAVE_MMAP 1
! EOF
  
  fi
  
!    for ac_func in memcpy strerror
  do
! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:2590: checking for $ac_func" >&5
! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 2595 "configure"
! #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* 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();
  
! int main() {
  
  /* 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
! $ac_func();
  #endif
  
! ; return 0; }
! EOF
! if { (eval echo configure:2618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_func_$ac_func=no"
  fi
! rm -f conftest*
  fi
  
- if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-   echo "$ac_t""yes" 1>&6
-     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-   cat >> confdefs.h <<EOF
- #define $ac_tr_func 1
- EOF
-  
- else
-   echo "$ac_t""no" 1>&6
  fi
  done
  
  
     if test "$with_system_zlib" = yes; then
!       echo $ac_n "checking for deflate in -lz""... $ac_c" 1>&6
! echo "configure:2645: checking for deflate in -lz" >&5
! ac_lib_var=`echo z'_'deflate | sed 'y%./+-%__p_%'`
! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   ac_save_LIBS="$LIBS"
  LIBS="-lz  $LIBS"
! cat > conftest.$ac_ext <<EOF
! #line 2653 "configure"
! #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char deflate();
! 
! int main() {
! deflate()
! ; return 0; }
! EOF
! if { (eval echo configure:2664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=yes"
  else
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_lib_$ac_lib_var=no"
! fi
! rm -f conftest*
! LIBS="$ac_save_LIBS"
  
  fi
! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
    target_all=
  else
!   echo "$ac_t""no" 1>&6
! target_all=libzgcj.la
  fi
  
     else
--- 4968,5248 ----
  
  #endif /* no HAVE_GETPAGESIZE */
  
  int
! main ()
  {
!   char *data, *data2, *data3;
!   int i, pagesize;
!   int fd;
  
!   pagesize = getpagesize ();
  
!   /* First, make a file with some known garbage in it. */
!   data = (char *) malloc (pagesize);
!   if (!data)
!     exit (1);
!   for (i = 0; i < pagesize; ++i)
!     *(data + i) = rand ();
!   umask (0);
!   fd = creat ("conftest.mmap", 0600);
!   if (fd < 0)
!     exit (1);
!   if (write (fd, data, pagesize) != pagesize)
!     exit (1);
!   close (fd);
  
!   /* Next, try to mmap the file at a fixed address which already has
!      something else allocated at it.  If we can, also make sure that
!      we see the same garbage.  */
!   fd = open ("conftest.mmap", O_RDWR);
!   if (fd < 0)
!     exit (1);
!   data2 = (char *) malloc (2 * pagesize);
!   if (!data2)
!     exit (1);
!   data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1);
!   if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
! 		     MAP_PRIVATE | MAP_FIXED, fd, 0L))
!     exit (1);
!   for (i = 0; i < pagesize; ++i)
!     if (*(data + i) != *(data2 + i))
!       exit (1);
  
!   /* Finally, make sure that changes to the mapped area do not
!      percolate back to the file as seen by read().  (This is a bug on
!      some variants of i386 svr4.0.)  */
!   for (i = 0; i < pagesize; ++i)
!     *(data2 + i) = *(data2 + i) + 1;
!   data3 = (char *) malloc (pagesize);
!   if (!data3)
!     exit (1);
!   if (read (fd, data3, pagesize) != pagesize)
!     exit (1);
!   for (i = 0; i < pagesize; ++i)
!     if (*(data + i) != *(data3 + i))
!       exit (1);
!   close (fd);
!   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
    ac_cv_func_mmap_fixed_mapped=yes
  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_func_mmap_fixed_mapped=no
  fi
! rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  fi
  fi
! echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
! echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
  if test $ac_cv_func_mmap_fixed_mapped = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
  #define HAVE_MMAP 1
! _ACEOF
  
  fi
+ rm -f conftest.mmap
  
! fi
! 
! 
! for ac_func in memcpy strerror
  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
!   if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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
  
  
     if test "$with_system_zlib" = yes; then
!       echo "$as_me:$LINENO: checking for deflate in -lz" >&5
! echo $ECHO_N "checking for deflate in -lz... $ECHO_C" >&6
! if test "${ac_cv_lib_z_deflate+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
  else
!   ac_check_lib_save_LIBS=$LIBS
  LIBS="-lz  $LIBS"
! if test x$gcc_no_link = xyes; then
!   { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
! echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
!    { (exit 1); exit 1; }; }
! fi
! 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 deflate ();
! int
! main ()
! {
! deflate ();
!   ;
!   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_z_deflate=yes
  else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
  
+ ac_cv_lib_z_deflate=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_z_deflate" >&5
! echo "${ECHO_T}$ac_cv_lib_z_deflate" >&6
! if test $ac_cv_lib_z_deflate = yes; then
    target_all=
  else
!   target_all=libzgcj.la
  fi
  
     else
*************** fi
*** 2688,2731 ****
  
  
  
! for ac_hdr in unistd.h
  do
! ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
! echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:2696: checking for $ac_hdr" >&5
! if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
!   echo $ac_n "(cached) $ac_c" 1>&6
  else
!   cat > conftest.$ac_ext <<EOF
! #line 2701 "configure"
! #include "confdefs.h"
! #include <$ac_hdr>
! EOF
! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2706: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
! if test -z "$ac_err"; then
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=yes"
  else
!   echo "$ac_err" >&5
!   echo "configure: failed program was:" >&5
!   cat conftest.$ac_ext >&5
!   rm -rf conftest*
!   eval "ac_cv_header_$ac_safe=no"
  fi
! rm -f conftest*
  fi
! if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
!   echo "$ac_t""yes" 1>&6
!     ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
!   cat >> confdefs.h <<EOF
! #define $ac_tr_hdr 1
! EOF
!  
  else
!   echo "$ac_t""no" 1>&6
  fi
  done
  
  
--- 5252,5405 ----
  
  
  
! 
! for ac_header in unistd.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 the AC_PACKAGE_NAME lists.  ##
! ## ------------------------------------------ ##
! _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
  
  
*************** else
*** 2759,3082 ****
    TARGET_LIBRARY_FALSE=
  fi
  
  if test "${multilib}" = "yes"; then
    multilib_arg="--enable-multilib"
  else
    multilib_arg=
  fi
  
! trap '' 1 2 15
! cat > confcache <<\EOF
  # 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.  It is not useful on other systems.
! # If it contains results you don't want to keep, you may remove or edit it.
  #
! # By default, configure uses ./config.cache as the cache file,
! # creating it if it does not exist already.  You can give configure
! # the --cache-file=FILE option to use a different cache file; that is
! # what configure does when it calls configure scripts in
! # subdirectories, so they share the cache.
! # Giving --cache-file=/dev/null disables caching, for debugging configure.
! # config.status only pays attention to the cache file if you give it the
! # --recheck option to rerun configure.
  #
! EOF
  # 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 \
!       -e "s/'/'\\\\''/g" \
!       -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
!     ;;
!   *)
!     # `set' quotes correctly as required by POSIX, so do not add quotes.
!     sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
!     ;;
!   esac >> confcache
! if cmp -s $cache_file confcache; then
!   :
! else
    if test -w $cache_file; then
!     echo "updating cache $cache_file"
!     cat confcache > $cache_file
    else
      echo "not updating unwritable cache $cache_file"
    fi
  fi
  rm -f confcache
  
- trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
- 
  test "x$prefix" = xNONE && prefix=$ac_default_prefix
  # Let make expand exec_prefix.
  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  
! # Any assignment to VPATH causes Sun make to only execute
! # the first set of double-colon rules, so remove it if not needed.
! # If there is a colon in the path, we need to keep it.
  if test "x$srcdir" = x.; then
!   ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  fi
  
- trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
- 
  # Transform confdefs.h into DEFS.
  # Protect against shell expansion while executing Makefile rules.
  # Protect against Makefile macro expansion.
! cat > conftest.defs <<\EOF
! s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
! s%[ 	`~#$^&*(){}\\|;'"<>?]%\\&%g
! s%\[%\\&%g
! s%\]%\\&%g
! s%\$%$$%g
! EOF
! DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
! rm -f conftest.defs
  
  
! # Without the "./", some shells look in PATH for config.status.
! : ${CONFIG_STATUS=./config.status}
  
! echo creating $CONFIG_STATUS
! rm -f $CONFIG_STATUS
! cat > $CONFIG_STATUS <<EOF
! #! /bin/sh
! # Generated automatically by configure.
  # Run this file to recreate the current configuration.
- # This directory was configured as follows,
- # on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
- #
- # $0 $ac_configure_args
- #
  # Compiler output produced by configure, useful for debugging
! # configure, is in ./config.log if it exists.
  
! ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
! for ac_option
  do
!   case "\$ac_option" in
!   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
!     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
!   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
!     echo "$CONFIG_STATUS generated by autoconf version 2.13"
!     exit 0 ;;
!   -help | --help | --hel | --he | --h)
!     echo "\$ac_cs_usage"; exit 0 ;;
!   *) echo "\$ac_cs_usage"; exit 1 ;;
!   esac
  done
  
! ac_given_srcdir=$srcdir
! ac_given_INSTALL="$INSTALL"
  
! trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
! EOF
! cat >> $CONFIG_STATUS <<EOF
  
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
-  s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
- $ac_vpsub
- $extrasub
- s%@SHELL@%$SHELL%g
- s%@CFLAGS@%$CFLAGS%g
- s%@CPPFLAGS@%$CPPFLAGS%g
- s%@CXXFLAGS@%$CXXFLAGS%g
- s%@FFLAGS@%$FFLAGS%g
- s%@DEFS@%$DEFS%g
- s%@LDFLAGS@%$LDFLAGS%g
- s%@LIBS@%$LIBS%g
- s%@exec_prefix@%$exec_prefix%g
- s%@prefix@%$prefix%g
- s%@program_transform_name@%$program_transform_name%g
- s%@bindir@%$bindir%g
- s%@sbindir@%$sbindir%g
- s%@libexecdir@%$libexecdir%g
- s%@datadir@%$datadir%g
- s%@sysconfdir@%$sysconfdir%g
- s%@sharedstatedir@%$sharedstatedir%g
- s%@localstatedir@%$localstatedir%g
- s%@libdir@%$libdir%g
- s%@includedir@%$includedir%g
- s%@oldincludedir@%$oldincludedir%g
- s%@infodir@%$infodir%g
- s%@mandir@%$mandir%g
- s%@zlib_basedir@%$zlib_basedir%g
- s%@host@%$host%g
- s%@host_alias@%$host_alias%g
- s%@host_cpu@%$host_cpu%g
- s%@host_vendor@%$host_vendor%g
- s%@host_os@%$host_os%g
- s%@target@%$target%g
- s%@target_alias@%$target_alias%g
- s%@target_cpu@%$target_cpu%g
- s%@target_vendor@%$target_vendor%g
- s%@target_os@%$target_os%g
- s%@build@%$build%g
- s%@build_alias@%$build_alias%g
- s%@build_cpu@%$build_cpu%g
- s%@build_vendor@%$build_vendor%g
- s%@build_os@%$build_os%g
- s%@mkinstalldirs@%$mkinstalldirs%g
- s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
- s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
- s%@INSTALL_DATA@%$INSTALL_DATA%g
- s%@PACKAGE@%$PACKAGE%g
- s%@VERSION@%$VERSION%g
- s%@ACLOCAL@%$ACLOCAL%g
- s%@AUTOCONF@%$AUTOCONF%g
- s%@AUTOMAKE@%$AUTOMAKE%g
- s%@AUTOHEADER@%$AUTOHEADER%g
- s%@MAKEINFO@%$MAKEINFO%g
- s%@SET_MAKE@%$SET_MAKE%g
- s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
- s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
- s%@MAINT@%$MAINT%g
- s%@CC@%$CC%g
- s%@EXEEXT@%$EXEEXT%g
- s%@LN_S@%$LN_S%g
- s%@OBJEXT@%$OBJEXT%g
- s%@RANLIB@%$RANLIB%g
- s%@STRIP@%$STRIP%g
- s%@LIBTOOL@%$LIBTOOL%g
- s%@COMPPATH@%$COMPPATH%g
- s%@CPP@%$CPP%g
- s%@target_all@%$target_all%g
- s%@toolexecdir@%$toolexecdir%g
- s%@toolexeclibdir@%$toolexeclibdir%g
- s%@TARGET_LIBRARY_TRUE@%$TARGET_LIBRARY_TRUE%g
- s%@TARGET_LIBRARY_FALSE@%$TARGET_LIBRARY_FALSE%g
  
! CEOF
! EOF
  
- cat >> $CONFIG_STATUS <<\EOF
  
! # 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_cmds=90 # Maximum number of lines to put in a sed script.
! ac_file=1 # Number of current file.
! ac_beg=1 # First line for current file.
! ac_end=$ac_max_sed_cmds # 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" conftest.subs > conftest.s$ac_file
    else
!     sed "${ac_end}q" conftest.subs > conftest.s$ac_file
    fi
!   if test ! -s conftest.s$ac_file; then
!     ac_more_lines=false
!     rm -f conftest.s$ac_file
    else
!     if test -z "$ac_sed_cmds"; then
!       ac_sed_cmds="sed -f conftest.s$ac_file"
!     else
!       ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
!     fi
!     ac_file=`expr $ac_file + 1`
!     ac_beg=$ac_end
!     ac_end=`expr $ac_end + $ac_max_sed_cmds`
    fi
  done
! if test -z "$ac_sed_cmds"; then
!   ac_sed_cmds=cat
  fi
- EOF
  
! cat >> $CONFIG_STATUS <<EOF
  
! CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
    # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
!   case "$ac_file" in
!   *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
!        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
!   *) ac_file_in="${ac_file}.in" ;;
    esac
  
!   # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  
!   # Remove last slash and all that follows it.  Not all systems have dirname.
!   ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
!   if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
!     # The file is in a subdirectory.
!     test ! -d "$ac_dir" && mkdir "$ac_dir"
!     ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
!     # A "../" for each directory in $ac_dir_suffix.
!     ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
    else
!     ac_dir_suffix= ac_dots=
    fi
  
!   case "$ac_given_srcdir" in
!   .)  srcdir=.
!       if test -z "$ac_dots"; then top_srcdir=.
!       else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
!   /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
    *) # Relative path.
!     srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
!     top_srcdir="$ac_dots$ac_given_srcdir" ;;
!   esac
  
!   case "$ac_given_INSTALL" in
!   [/$]*) INSTALL="$ac_given_INSTALL" ;;
!   *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
!   esac
  
!   echo creating "$ac_file"
!   rm -f "$ac_file"
!   configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
!   case "$ac_file" in
!   *Makefile*) ac_comsub="1i\\
! # $configure_input" ;;
!   *) ac_comsub= ;;
    esac
  
!   ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
!   sed -e "$ac_comsub
! s%@configure_input@%$configure_input%g
! s%@srcdir@%$srcdir%g
! s%@top_srcdir@%$top_srcdir%g
! s%@INSTALL@%$INSTALL%g
! " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
! fi; done
! rm -f conftest.s*
  
! EOF
! cat >> $CONFIG_STATUS <<EOF
! srcdir=${srcdir}
! host=${host}
! target=${target}
! with_multisubdir=${with_multisubdir}
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! zlib_basedir=${zlib_basedir}
! CC="${CC}"
! CXX="${CXX}"
! ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
  
! EOF
! cat >> $CONFIG_STATUS <<\EOF
! if test -n "$CONFIG_FILES"; then
!   LD="${ORIGINAL_LD_FOR_MULTILIBS}"
!   ac_file=Makefile . ${zlib_basedir}/../config-ml.in
  fi
- exit 0
- EOF
- chmod +x $CONFIG_STATUS
- rm -fr confdefs* $ac_clean_files
- test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  
--- 5433,6677 ----
    TARGET_LIBRARY_FALSE=
  fi
  
+ 
  if test "${multilib}" = "yes"; then
    multilib_arg="--enable-multilib"
  else
    multilib_arg=
  fi
  
!           ac_config_files="$ac_config_files Makefile"
! 
! 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
  
  # Transform confdefs.h into DEFS.
  # Protect against shell expansion while executing Makefile rules.
  # Protect against Makefile macro expansion.
! #
! # If the first sed substitution is executed (which looks for macros that
! # take arguments), then we branch to the quote section.  Otherwise,
! # look for a macro that doesn't take arguments.
! cat >confdef2opt.sed <<\_ACEOF
! t clear
! : clear
! s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\),-D\1=\2,g
! t quote
! s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\),-D\1=\2,g
! t quote
! d
! : quote
! s,[	 `~#$^&*(){}\\|;'"<>?],\\&,g
! s,\[,\\&,g
! s,\],\\&,g
! s,\$,$$,g
! p
! _ACEOF
! # We use echo to avoid assuming a particular line-breaking character.
! # The extra dot is to prevent the shell from consuming trailing
! # line-breaks from the sub-command output.  A line-break within
! # single-quotes doesn't work because, if this script is created in a
! # platform that uses two characters for line-breaks (e.g., DOS), tr
! # would break.
! ac_LF_and_DOT=`echo; echo .`
! DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
! rm -f confdef2opt.sed
  
  
! 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 "${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 "${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 "${TARGET_LIBRARY_TRUE}" && test -z "${TARGET_LIBRARY_FALSE}"; then
!   { { echo "$as_me:$LINENO: error: conditional \"TARGET_LIBRARY\" was never defined.
! Usually this means the macro was only invoked conditionally." >&5
! echo "$as_me: error: conditional \"TARGET_LIBRARY\" 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 $as_me, 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
+ 
+ Configuration files:
+ $config_files
+ 
+ Configuration commands:
+ $config_commands
+ 
+ Report bugs to <bug-autoconf@gnu.org>."
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<_ACEOF
+ ac_cs_version="\\
+ config.status
+ 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.
! #
! 
! 
! srcdir="$srcdir"
! host="$host"
! target="$target"
! with_multisubdir="$with_multisubdir"
! with_multisrctop="$with_multisrctop"
! with_target_subdir="$with_target_subdir"
! ac_configure_args="${multilib_arg} ${ac_configure_args}"
! multi_basedir="$multi_basedir"
! CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
! CC="$CC"
! 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" ;;
!   "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
!   "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
!   *) { { 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_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,@multi_basedir@,$multi_basedir,;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,@mkinstalldirs@,$mkinstalldirs,;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,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
! s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
! s,@MAINT@,$MAINT,;t t
! s,@COMPPATH@,$COMPPATH,;t t
! s,@CC@,$CC,;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,@CFLAGS@,$CFLAGS,;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,@CPP@,$CPP,;t t
! s,@CPPFLAGS@,$CPPFLAGS,;t t
! s,@EGREP@,$EGREP,;t t
! s,@target_all@,$target_all,;t t
! s,@toolexecdir@,$toolexecdir,;t t
! s,@toolexeclibdir@,$toolexeclibdir,;t t
! s,@TARGET_LIBRARY_TRUE@,$TARGET_LIBRARY_TRUE,;t t
! s,@TARGET_LIBRARY_FALSE@,$TARGET_LIBRARY_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_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
!     default-1 )
! # Only add multilib support code if we just rebuilt the top-level
! # Makefile.
! case " $CONFIG_FILES " in
!  *" Makefile "*)
!    ac_file=Makefile . ${multi_basedir}/config-ml.in
!    ;;
! esac ;;
!     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
!  ;;
    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-3.4.3/zlib/configure.ac gcc-4.0.0/zlib/configure.ac
*** gcc-3.4.3/zlib/configure.ac	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/configure.ac	Mon Oct 11 17:35:36 2004
***************
*** 0 ****
--- 1,123 ----
+ dnl Process this with autoconf to create configure
+ 
+ AC_PREREQ(2.59)
+ AC_INIT
+ AC_CONFIG_SRCDIR([zlib.h])
+ 
+ AM_ENABLE_MULTILIB(, ..)
+ 
+ AC_CANONICAL_SYSTEM
+ 
+ # This works around an automake problem.
+ mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
+ AC_SUBST(mkinstalldirs)
+ 
+ AM_INIT_AUTOMAKE(zlib, 1.1.4)
+ 
+ AM_MAINTAINER_MODE
+ 
+ dnl We use these options to decide which functions to include.
+ AC_ARG_WITH(target-subdir,
+ [  --with-target-subdir=SUBDIR
+                           configuring in a subdirectory])
+ 
+ if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
+    COMPPATH=.
+ else
+    COMPPATH=..
+ fi
+ AC_SUBST(COMPPATH)
+ 
+ AC_ARG_WITH(cross-host,
+ [  --with-cross-host=HOST  configuring with a cross compiler])
+ 
+ dnl Default to --enable-multilib
+ AC_ARG_ENABLE(multilib,
+ [  --enable-multilib       build many library versions (default)],
+ [case "${enableval}" in
+   yes) multilib=yes ;;
+   no)  multilib=no ;;
+   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
+  esac], [test -z "$with_target_subdir" && multilib=no || multilib=yes])dnl
+ 
+ AC_ARG_WITH(system-zlib,
+ [  --with-system-zlib      use installed libz])
+ 
+ # Make sure we don't test executables when making cross-tools.
+ GCC_NO_EXECUTABLES
+ 
+ # The same as in boehm-gc and libstdc++. Have to borrow it from there.
+ # We must force CC to /not/ be precious variables; otherwise
+ # the wrong, non-multilib-adjusted value will be used in multilibs.
+ # As a side effect, we have to subst CFLAGS ourselves.
+ 
+ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
+ m4_define([_AC_ARG_VAR_PRECIOUS],[])
+ AC_PROG_CC
+ m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+ 
+ AC_SUBST(CFLAGS)
+ 
+ AC_PROG_LIBTOOL
+ 
+ # Find CPP now so that any conditional tests below won't do it and
+ # thereby make the resulting definitions conditional.
+ AC_PROG_CPP
+ 
+ if test -n "$with_cross_host"; then
+    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
+    # may not work correctly, because the compiler may not be able to
+    # link executables.
+ 
+    # We assume newlib.  This lets us hard-code the functions we know
+    # we'll have.
+    AC_DEFINE(HAVE_MEMCPY)
+    AC_DEFINE(HAVE_STRERROR)
+ 
+    # We ignore --with-system-zlib in this case.
+    target_all=libzgcj.la
+ else
+    AC_FUNC_MMAP
+    AC_CHECK_FUNCS(memcpy strerror)
+ 
+    if test "$with_system_zlib" = yes; then
+       AC_CHECK_LIB(z, deflate, target_all=, target_all=libzgcj.la)
+    else
+       target_all=libzgcj.la
+    fi
+ fi
+ 
+ AC_SUBST(target_all)
+ 
+ AC_CHECK_HEADERS(unistd.h)
+ 
+ if test -n "$with_cross_host" &&
+    test x"$with_cross_host" != x"no"; then
+   toolexecdir='$(exec_prefix)/$(target_alias)'
+   toolexeclibdir='$(toolexecdir)/lib'
+ else
+   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
+   toolexeclibdir='$(libdir)'
+ fi
+ if test "$GCC" = yes && $CC -print-multi-os-directory > /dev/null 2>&1; then
+   multiosdir=/`$CC -print-multi-os-directory`
+   case $multiosdir in
+     /.) multiosdir= ;; # Avoid trailing /.
+   esac
+ else
+   multiosdir=
+ fi
+ toolexeclibdir=${toolexeclibdir}${multiosdir}
+ AC_SUBST(toolexecdir)
+ AC_SUBST(toolexeclibdir)
+ 
+ AM_CONDITIONAL(TARGET_LIBRARY, test -n "$with_target_subdir")
+ 
+ if test "${multilib}" = "yes"; then
+   multilib_arg="--enable-multilib"
+ else
+   multilib_arg=
+ fi
+ 
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
diff -Nrcpad gcc-3.4.3/zlib/configure.in gcc-4.0.0/zlib/configure.in
*** gcc-3.4.3/zlib/configure.in	Thu Jan 15 03:41:47 2004
--- gcc-4.0.0/zlib/configure.in	Thu Jan  1 00:00:00 1970
***************
*** 1,160 ****
- dnl Process this with autoconf to create configure
- 
- AC_PREREQ(2.13)
- AC_INIT(zlib.h)
- 
- # This works around the fact that libtool configuration may change LD
- # for this particular configuration, but some shells, instead of
- # keeping the changes in LD private, export them just because LD is
- # exported.
- ORIGINAL_LD_FOR_MULTILIBS=$LD
- 
- dnl We may get other options which we dont document:
- dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
- 
- if test "x[$]{with_target_subdir}" != x && \
-    test "[$]{srcdir}" = "."; then
-   if test "[$]{with_target_subdir}" != "."; then
-     zlib_basedir="[$]{srcdir}/[$]{with_multisrctop}../"
-   else
-     zlib_basedir="[$]{srcdir}/[$]{with_multisrctop}"
-   fi
- else
-   zlib_basedir="[$]{srcdir}/"
- fi
- AC_SUBST(zlib_basedir)
- AC_CONFIG_AUX_DIR($zlib_basedir..)
- if :; then :; else
-   # This overrides the previous occurrence for automake, but not for
-   # autoconf, which is exactly what we want.
-   AC_CONFIG_AUX_DIR(..)
- fi
- 
- AC_CANONICAL_SYSTEM
- 
- # This works around an automake problem.
- mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"
- AC_SUBST(mkinstalldirs)
- 
- AM_INIT_AUTOMAKE(zlib, 1.1.4)
- 
- AM_MAINTAINER_MODE
- 
- dnl We use these options to decide which functions to include.
- AC_ARG_WITH(target-subdir,
- [  --with-target-subdir=SUBDIR
-                           configuring in a subdirectory])
- AC_ARG_WITH(cross-host,
- [  --with-cross-host=HOST  configuring with a cross compiler])
- 
- dnl Default to --enable-multilib
- AC_ARG_ENABLE(multilib,
- [  --enable-multilib       build many library versions (default)],
- [case "${enableval}" in
-   yes) multilib=yes ;;
-   no)  multilib=no ;;
-   *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
-  esac], [test -z "$with_target_subdir" && multilib=no || multilib=yes])dnl
- 
- AC_ARG_WITH(system-zlib,
- [  --with-system-zlib      use installed libz])
- 
- LIB_AC_PROG_CC
- # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
- # at least currently, we never actually build a program, so we never
- # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
- # fails, because we are probably configuring with a cross compiler
- # which cant create executables.  So we include AC_EXEEXT to keep
- # automake happy, but we dont execute it, since we dont care about
- # the result.
- if false; then
-   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
-   # to nothing, so nothing would remain between `then' and `fi' if it
-   # were not for the `:' below.
-   :
-   AC_EXEEXT
- fi
- AM_PROG_LIBTOOL
- 
- if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
-    COMPPATH=.
- else
-    COMPPATH=..
- fi
- AC_SUBST(COMPPATH)
- 
- # Find CPP now so that any conditional tests below won't do it and
- # thereby make the resulting definitions conditional.
- AC_PROG_CPP
- 
- if test -n "$with_cross_host"; then
-    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
-    # may not work correctly, because the compiler may not be able to
-    # link executables.
- 
-    # We assume newlib.  This lets us hard-code the functions we know
-    # we'll have.
-    AC_DEFINE(HAVE_MEMCPY)
-    AC_DEFINE(HAVE_STRERROR)
- 
-    # We ignore --with-system-zlib in this case.
-    target_all=libzgcj.la
- else
-    AC_FUNC_MMAP
-    AC_CHECK_FUNCS(memcpy strerror)
- 
-    if test "$with_system_zlib" = yes; then
-       AC_CHECK_LIB(z, deflate, target_all=, target_all=libzgcj.la)
-    else
-       target_all=libzgcj.la
-    fi
- fi
- 
- AC_SUBST(target_all)
- 
- AC_CHECK_HEADERS(unistd.h)
- 
- if test -n "$with_cross_host" &&
-    test x"$with_cross_host" != x"no"; then
-   toolexecdir='$(exec_prefix)/$(target_alias)'
-   toolexeclibdir='$(toolexecdir)/lib'
- else
-   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
-   toolexeclibdir='$(libdir)'
- fi
- if test "$GCC" = yes && $CC -print-multi-os-directory > /dev/null 2>&1; then
-   multiosdir=/`$CC -print-multi-os-directory`
-   case $multiosdir in
-     /.) multiosdir= ;; # Avoid trailing /.
-   esac
- else
-   multiosdir=
- fi
- toolexeclibdir=${toolexeclibdir}${multiosdir}
- AC_SUBST(toolexecdir)
- AC_SUBST(toolexeclibdir)
- 
- AM_CONDITIONAL(TARGET_LIBRARY, test -n "$with_target_subdir")
- 
- if test "${multilib}" = "yes"; then
-   multilib_arg="--enable-multilib"
- else
-   multilib_arg=
- fi
- 
- AC_OUTPUT(Makefile,
- [if test -n "$CONFIG_FILES"; then
-   LD="${ORIGINAL_LD_FOR_MULTILIBS}"
-   ac_file=Makefile . ${zlib_basedir}/../config-ml.in
- fi],
- srcdir=${srcdir}
- host=${host}
- target=${target}
- with_multisubdir=${with_multisubdir}
- ac_configure_args="${multilib_arg} ${ac_configure_args}"
- CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- zlib_basedir=${zlib_basedir}
- CC="${CC}"
- CXX="${CXX}"
- ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
- )
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/README.contrib gcc-4.0.0/zlib/contrib/README.contrib
*** gcc-3.4.3/zlib/contrib/README.contrib	Mon Mar 11 21:49:20 2002
--- gcc-4.0.0/zlib/contrib/README.contrib	Mon Oct 11 18:45:38 2004
*************** Use at your own risk. Please contact the
*** 4,34 ****
  for help about these, not the zlib authors. Thanks.
  
  
! asm386/     by Gilles Vollant <info@winimage.com>
! 	386 asm code replacing longest_match(), for Visual C++ 4.2 and ML 6.11c
  
! asm586/ and asm686/    by Brian Raiter <breadbox@muppetlabs.com> 
!         asm code for Pentium and Pentium Pro
          See http://www.muppetlabs.com/~breadbox/software/assembly.html
  
! delphi/      by Bob Dellaca <bobdl@xtra.co.nz>
! 	Support for Delphi
  
! delphi2/     by Davide Moretti <dave@rimini.com>
!         Another support for C++Builder and Delphi
  
! minizip/    by Gilles Vollant <info@winimage.com>
! 	Mini zip and unzip based on zlib
!         See http://www.winimage.com/zLibDll/unzip.html
  
  iostream/   by Kevin Ruland <kevin@rodin.wustl.edu>
          A C++ I/O streams interface to the zlib gz* functions
  
  iostream2/  by Tyge Løvset <Tyge.Lovset@cmr.no>
! 	Another C++ I/O streams interface
  
  untgz/      by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
! 	A very simple tar.gz file extractor using zlib
  
  visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
!         How to use compress(), uncompress() and the gz* functions from VB.
--- 4,70 ----
  for help about these, not the zlib authors. Thanks.
  
  
! ada/        by Dmitriy Anisimkov <anisimkov@yahoo.com>
!         Support for Ada
!         See http://zlib-ada.sourceforge.net/
  
! asm586/
! asm686/     by Brian Raiter <breadbox@muppetlabs.com>
!         asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax
          See http://www.muppetlabs.com/~breadbox/software/assembly.html
  
! blast/      by Mark Adler <madler@alumni.caltech.edu>
!         Decompressor for output of PKWare Data Compression Library (DCL)
  
! delphi/     by Cosmin Truta <cosmint@cs.ubbcluj.ro>
!         Support for Delphi and C++ Builder
  
! gzappend/   by Mark Adler <madler@alumni.caltech.edu>
!         append to a gzip file -- illustrates the use of Z_BLOCK
! 
! infback9/   by Mark Adler <madler@alumni.caltech.edu>
!         Unsupported diffs to infback to decode the deflate64 format
! 
! inflate86/  by Chris Anderson <christop@charm.net>
!         Tuned x86 gcc asm code to replace inflate_fast()
  
  iostream/   by Kevin Ruland <kevin@rodin.wustl.edu>
          A C++ I/O streams interface to the zlib gz* functions
  
  iostream2/  by Tyge Løvset <Tyge.Lovset@cmr.no>
!         Another C++ I/O streams interface
! 
! iostream3/  by Ludwig Schwardt <schwardt@sun.ac.za>
!             and Kevin Ruland <kevin@rodin.wustl.edu>
!         Yet another C++ I/O streams interface
! 
! masm686/    by Dan Higdon <hdan@kinesoft.com>
!             and Chuck Walbourn <chuckw@kinesoft.com>
!         asm code for Pentium Pro/PII, using the MASM syntax
! 
! masmx86/    by Gilles Vollant <info@winimage.com>
!         x86 asm code to replace longest_match() and inflate_fast(),
!         for Visual C++ and MASM
! 
! minizip/    by Gilles Vollant <info@winimage.com>
!         Mini zip and unzip based on zlib
!         See http://www.winimage.com/zLibDll/unzip.html
! 
! pascal/     by Bob Dellaca <bobdl@xtra.co.nz> et al.
!         Support for Pascal
! 
! puff/       by Mark Adler <madler@alumni.caltech.edu>
!         Small, low memory usage inflate.  Also serves to provide an
!         unambiguous description of the deflate format.
! 
! testzlib/   by Gilles Vollant <info@winimage.com>
!         Example of the use of zlib
  
  untgz/      by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
!         A very simple tar.gz file extractor using zlib
  
  visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
!         How to use compress(), uncompress() and the gz* functions from VB
! 
! vstudio/    by Gilles Vollant <info@winimage.com>
!         Building zlib with Visual Studio .NET
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/mtest.adb gcc-4.0.0/zlib/contrib/ada/mtest.adb
*** gcc-3.4.3/zlib/contrib/ada/mtest.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/mtest.adb	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,153 ----
+ ----------------------------------------------------------------
+ --  ZLib for Ada thick binding.                               --
+ --                                                            --
+ --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
+ --                                                            --
+ --  Open source license information is in the zlib.ads file.  --
+ ----------------------------------------------------------------
+ --  Continuous test for ZLib multithreading. If the test is fail
+ --  Wou should provide thread safe allocation routines for the Z_Stream.
+ --
+ --  $Id: mtest.adb,v 1.1.1.1 2004/10/11 17:44:23 tromey Exp $
+ 
+ with ZLib;
+ with Ada.Streams;
+ with Ada.Numerics.Discrete_Random;
+ with Ada.Text_IO;
+ with Ada.Exceptions;
+ with Ada.Task_Identification;
+ 
+ procedure MTest is
+    use Ada.Streams;
+    use ZLib;
+ 
+    Stop : Boolean := False;
+ 
+    pragma Atomic (Stop);
+ 
+    subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;
+ 
+    package Random_Elements is
+       new Ada.Numerics.Discrete_Random (Visible_Symbols);
+ 
+    task type Test_Task;
+ 
+    task body Test_Task is
+       Buffer : Stream_Element_Array (1 .. 100_000);
+       Gen : Random_Elements.Generator;
+ 
+       Buffer_First  : Stream_Element_Offset;
+       Compare_First : Stream_Element_Offset;
+ 
+       Deflate : Filter_Type;
+       Inflate : Filter_Type;
+ 
+       procedure Further (Item : in Stream_Element_Array);
+ 
+       procedure Read_Buffer
+         (Item : out Ada.Streams.Stream_Element_Array;
+          Last : out Ada.Streams.Stream_Element_Offset);
+ 
+       -------------
+       -- Further --
+       -------------
+ 
+       procedure Further (Item : in Stream_Element_Array) is
+ 
+          procedure Compare (Item : in Stream_Element_Array);
+ 
+          -------------
+          -- Compare --
+          -------------
+ 
+          procedure Compare (Item : in Stream_Element_Array) is
+             Next_First : Stream_Element_Offset := Compare_First + Item'Length;
+          begin
+             if Buffer (Compare_First .. Next_First - 1) /= Item then
+                raise Program_Error;
+             end if;
+ 
+             Compare_First := Next_First;
+          end Compare;
+ 
+          procedure Compare_Write is new ZLib.Write (Write => Compare);
+       begin
+          Compare_Write (Inflate, Item, No_Flush);
+       end Further;
+ 
+       -----------------
+       -- Read_Buffer --
+       -----------------
+ 
+       procedure Read_Buffer
+         (Item : out Ada.Streams.Stream_Element_Array;
+          Last : out Ada.Streams.Stream_Element_Offset)
+       is
+          Buff_Diff   : Stream_Element_Offset := Buffer'Last - Buffer_First;
+          Next_First : Stream_Element_Offset;
+       begin
+          if Item'Length <= Buff_Diff then
+             Last := Item'Last;
+ 
+             Next_First := Buffer_First + Item'Length;
+ 
+             Item := Buffer (Buffer_First .. Next_First - 1);
+ 
+             Buffer_First := Next_First;
+          else
+             Last := Item'First + Buff_Diff;
+             Item (Item'First .. Last) := Buffer (Buffer_First .. Buffer'Last);
+             Buffer_First := Buffer'Last + 1;
+          end if;
+       end Read_Buffer;
+ 
+       procedure Translate is new Generic_Translate
+                                    (Data_In  => Read_Buffer,
+                                     Data_Out => Further);
+ 
+    begin
+       Random_Elements.Reset (Gen);
+ 
+       Buffer := (others => 20);
+ 
+       Main : loop
+          for J in Buffer'Range loop
+             Buffer (J) := Random_Elements.Random (Gen);
+ 
+             Deflate_Init (Deflate);
+             Inflate_Init (Inflate);
+ 
+             Buffer_First  := Buffer'First;
+             Compare_First := Buffer'First;
+ 
+             Translate (Deflate);
+ 
+             if Compare_First /= Buffer'Last + 1 then
+                raise Program_Error;
+             end if;
+ 
+             Ada.Text_IO.Put_Line
+               (Ada.Task_Identification.Image
+                  (Ada.Task_Identification.Current_Task)
+                & Stream_Element_Offset'Image (J)
+                & ZLib.Count'Image (Total_Out (Deflate)));
+ 
+             Close (Deflate);
+             Close (Inflate);
+ 
+             exit Main when Stop;
+          end loop;
+       end loop Main;
+    exception
+       when E : others =>
+          Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (E));
+          Stop := True;
+    end Test_Task;
+ 
+    Test : array (1 .. 4) of Test_Task;
+ 
+    pragma Unreferenced (Test);
+ 
+ begin
+    null;
+ end MTest;
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/read.adb gcc-4.0.0/zlib/contrib/ada/read.adb
*** gcc-3.4.3/zlib/contrib/ada/read.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/read.adb	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,151 ----
+ ----------------------------------------------------------------
+ --  ZLib for Ada thick binding.                               --
+ --                                                            --
+ --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
+ --                                                            --
+ --  Open source license information is in the zlib.ads file.  --
+ ----------------------------------------------------------------
+ 
+ --  $Id: read.adb,v 1.1.1.1 2004/10/11 17:44:23 tromey Exp $
+ 
+ --  Test/demo program for the generic read interface.
+ 
+ with Ada.Numerics.Discrete_Random;
+ with Ada.Streams;
+ with Ada.Text_IO;
+ 
+ with ZLib;
+ 
+ procedure Read is
+ 
+    use Ada.Streams;
+ 
+    ------------------------------------
+    --  Test configuration parameters --
+    ------------------------------------
+ 
+    File_Size   : Stream_Element_Offset := 100_000;
+ 
+    Continuous  : constant Boolean          := False;
+    --  If this constant is True, the test would be repeated again and again,
+    --  with increment File_Size for every iteration.
+ 
+    Header      : constant ZLib.Header_Type := ZLib.Default;
+    --  Do not use Header other than Default in ZLib versions 1.1.4 and older.
+ 
+    Init_Random : constant := 8;
+    --  We are using the same random sequence, in case of we catch bug,
+    --  so we would be able to reproduce it.
+ 
+    -- End --
+ 
+    Pack_Size : Stream_Element_Offset;
+    Offset    : Stream_Element_Offset;
+ 
+    Filter     : ZLib.Filter_Type;
+ 
+    subtype Visible_Symbols
+       is Stream_Element range 16#20# .. 16#7E#;
+ 
+    package Random_Elements is new
+       Ada.Numerics.Discrete_Random (Visible_Symbols);
+ 
+    Gen : Random_Elements.Generator;
+    Period  : constant Stream_Element_Offset := 200;
+    --  Period constant variable for random generator not to be very random.
+    --  Bigger period, harder random.
+ 
+    Read_Buffer : Stream_Element_Array (1 .. 2048);
+    Read_First  : Stream_Element_Offset;
+    Read_Last   : Stream_Element_Offset;
+ 
+    procedure Reset;
+ 
+    procedure Read
+      (Item : out Stream_Element_Array;
+       Last : out Stream_Element_Offset);
+    --  this procedure is for generic instantiation of
+    --  ZLib.Read
+    --  reading data from the File_In.
+ 
+    procedure Read is new ZLib.Read (Read, Read_Buffer, Read_First, Read_Last);
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Item : out Stream_Element_Array;
+       Last : out Stream_Element_Offset) is
+    begin
+       Last := Stream_Element_Offset'Min
+                (Item'Last,
+                 Item'First + File_Size - Offset);
+ 
+       for J in Item'First .. Last loop
+          if J < Item'First + Period then
+             Item (J) := Random_Elements.Random (Gen);
+          else
+             Item (J) := Item (J - Period);
+          end if;
+ 
+          Offset   := Offset + 1;
+       end loop;
+    end Read;
+ 
+    -----------
+    -- Reset --
+    -----------
+ 
+    procedure Reset is
+    begin
+       Random_Elements.Reset (Gen, Init_Random);
+       Pack_Size := 0;
+       Offset := 1;
+       Read_First := Read_Buffer'Last + 1;
+    end Reset;
+ 
+ begin
+    Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
+ 
+    loop
+       for Level in ZLib.Compression_Level'Range loop
+ 
+          Ada.Text_IO.Put ("Level ="
+             & ZLib.Compression_Level'Image (Level));
+ 
+          --  Deflate using generic instantiation.
+ 
+          ZLib.Deflate_Init
+                (Filter,
+                 Level,
+                 Header => Header);
+ 
+          Reset;
+ 
+          Ada.Text_IO.Put
+            (Stream_Element_Offset'Image (File_Size) & " ->");
+ 
+          loop
+             declare
+                Buffer : Stream_Element_Array (1 .. 1024);
+                Last   : Stream_Element_Offset;
+             begin
+                Read (Filter, Buffer, Last);
+ 
+                Pack_Size := Pack_Size + Last - Buffer'First + 1;
+ 
+                exit when Last < Buffer'Last;
+             end;
+          end loop;
+ 
+          Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size));
+ 
+          ZLib.Close (Filter);
+       end loop;
+ 
+       exit when not Continuous;
+ 
+       File_Size := File_Size + 1;
+    end loop;
+ end Read;
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/readme.txt gcc-4.0.0/zlib/contrib/ada/readme.txt
*** gcc-3.4.3/zlib/contrib/ada/readme.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/readme.txt	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,52 ----
+ 
+ 			ZLib for Ada thick binding (ZLib.Ada)
+ 			Release 1.2
+ 
+ ZLib.Ada is a thick binding interface to the popular ZLib data
+ compression library, available at http://www.gzip.org/zlib/.
+ It provides Ada-style access to the ZLib C library.
+ 
+ 
+ 	Here are the main changes since ZLib.Ada 1.1:
+ 
+ - The default header type has a name "Default" now. Auto is used only for
+   automatic GZip/ZLib header detection.
+ 
+ - Added test for multitasking mtest.adb.
+ 
+ - Added GNAT project file zlib.gpr.
+ 
+ 
+ 	How to build ZLib.Ada under GNAT
+ 
+ You should have the ZLib library already build on your computer, before
+ building ZLib.Ada. Make the directory of ZLib.Ada sources current and
+ issue the command:
+ 
+   gnatmake test -largs -L<directory where libz.a is> -lz
+ 
+ Or use the GNAT project file build for GNAT 3.15 or later:
+ 
+   gnatmake -Pzlib.gpr -L<directory where libz.a is>
+ 
+ 
+ 	How to build ZLib.Ada under Aonix ObjectAda for Win32 7.2.2
+ 
+ 1. Make a project with all *.ads and *.adb files from the distribution.
+ 2. Build the libz.a library from the ZLib C sources.
+ 3. Rename libz.a to z.lib.
+ 4. Add the library z.lib to the project.
+ 5. Add the libc.lib library from the ObjectAda distribution to the project.
+ 6. Build the executable using test.adb as a main procedure.
+ 
+ 
+ 	How to use ZLib.Ada
+ 
+ The source files test.adb and read.adb are small demo programs that show
+ the main functionality of ZLib.Ada.
+ 
+ The routines from the package specifications are commented.
+ 
+ 
+ Homepage: http://zlib-ada.sourceforge.net/
+ Author: Dmitriy Anisimkov <anisimkov@yahoo.com>
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/test.adb gcc-4.0.0/zlib/contrib/ada/test.adb
*** gcc-3.4.3/zlib/contrib/ada/test.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/test.adb	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,463 ----
+ ----------------------------------------------------------------
+ --  ZLib for Ada thick binding.                               --
+ --                                                            --
+ --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
+ --                                                            --
+ --  Open source license information is in the zlib.ads file.  --
+ ----------------------------------------------------------------
+ 
+ --  $Id: test.adb,v 1.1.1.1 2004/10/11 17:44:23 tromey Exp $
+ 
+ --  The program has a few aims.
+ --  1. Test ZLib.Ada95 thick binding functionality.
+ --  2. Show the example of use main functionality of the ZLib.Ada95 binding.
+ --  3. Build this program automatically compile all ZLib.Ada95 packages under
+ --     GNAT Ada95 compiler.
+ 
+ with ZLib.Streams;
+ with Ada.Streams.Stream_IO;
+ with Ada.Numerics.Discrete_Random;
+ 
+ with Ada.Text_IO;
+ 
+ with Ada.Calendar;
+ 
+ procedure Test is
+ 
+    use Ada.Streams;
+    use Stream_IO;
+ 
+    ------------------------------------
+    --  Test configuration parameters --
+    ------------------------------------
+ 
+    File_Size   : Count   := 100_000;
+    Continuous  : constant Boolean := False;
+ 
+    Header      : constant ZLib.Header_Type := ZLib.Default;
+                                               --  ZLib.None;
+                                               --  ZLib.Auto;
+                                               --  ZLib.GZip;
+    --  Do not use Header other then Default in ZLib versions 1.1.4
+    --  and older.
+ 
+    Strategy    : constant ZLib.Strategy_Type := ZLib.Default_Strategy;
+    Init_Random : constant := 10;
+ 
+    -- End --
+ 
+    In_File_Name  : constant String := "testzlib.in";
+    --  Name of the input file
+ 
+    Z_File_Name   : constant String := "testzlib.zlb";
+    --  Name of the compressed file.
+ 
+    Out_File_Name : constant String := "testzlib.out";
+    --  Name of the decompressed file.
+ 
+    File_In   : File_Type;
+    File_Out  : File_Type;
+    File_Back : File_Type;
+    File_Z    : ZLib.Streams.Stream_Type;
+ 
+    Filter : ZLib.Filter_Type;
+ 
+    Time_Stamp : Ada.Calendar.Time;
+ 
+    procedure Generate_File;
+    --  Generate file of spetsified size with some random data.
+    --  The random data is repeatable, for the good compression.
+ 
+    procedure Compare_Streams
+      (Left, Right : in out Root_Stream_Type'Class);
+    --  The procedure compearing data in 2 streams.
+    --  It is for compare data before and after compression/decompression.
+ 
+    procedure Compare_Files (Left, Right : String);
+    --  Compare files. Based on the Compare_Streams.
+ 
+    procedure Copy_Streams
+      (Source, Target : in out Root_Stream_Type'Class;
+       Buffer_Size    : in     Stream_Element_Offset := 1024);
+    --  Copying data from one stream to another. It is for test stream
+    --  interface of the library.
+ 
+    procedure Data_In
+      (Item : out Stream_Element_Array;
+       Last : out Stream_Element_Offset);
+    --  this procedure is for generic instantiation of
+    --  ZLib.Generic_Translate.
+    --  reading data from the File_In.
+ 
+    procedure Data_Out (Item : in Stream_Element_Array);
+    --  this procedure is for generic instantiation of
+    --  ZLib.Generic_Translate.
+    --  writing data to the File_Out.
+ 
+    procedure Stamp;
+    --  Store the timestamp to the local variable.
+ 
+    procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count);
+    --  Print the time statistic with the message.
+ 
+    procedure Translate is new ZLib.Generic_Translate
+                                 (Data_In  => Data_In,
+                                  Data_Out => Data_Out);
+    --  This procedure is moving data from File_In to File_Out
+    --  with compression or decompression, depend on initialization of
+    --  Filter parameter.
+ 
+    -------------------
+    -- Compare_Files --
+    -------------------
+ 
+    procedure Compare_Files (Left, Right : String) is
+       Left_File, Right_File : File_Type;
+    begin
+       Open (Left_File, In_File, Left);
+       Open (Right_File, In_File, Right);
+       Compare_Streams (Stream (Left_File).all, Stream (Right_File).all);
+       Close (Left_File);
+       Close (Right_File);
+    end Compare_Files;
+ 
+    ---------------------
+    -- Compare_Streams --
+    ---------------------
+ 
+    procedure Compare_Streams
+      (Left, Right : in out Ada.Streams.Root_Stream_Type'Class)
+    is
+       Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#);
+       Left_Last, Right_Last : Stream_Element_Offset;
+    begin
+       loop
+          Read (Left, Left_Buffer, Left_Last);
+          Read (Right, Right_Buffer, Right_Last);
+ 
+          if Left_Last /= Right_Last then
+             Ada.Text_IO.Put_Line ("Compare error :"
+               & Stream_Element_Offset'Image (Left_Last)
+               & " /= "
+               & Stream_Element_Offset'Image (Right_Last));
+ 
+             raise Constraint_Error;
+ 
+          elsif Left_Buffer (0 .. Left_Last)
+                /= Right_Buffer (0 .. Right_Last)
+          then
+             Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal.");
+             raise Constraint_Error;
+ 
+          end if;
+ 
+          exit when Left_Last < Left_Buffer'Last;
+       end loop;
+    end Compare_Streams;
+ 
+    ------------------
+    -- Copy_Streams --
+    ------------------
+ 
+    procedure Copy_Streams
+      (Source, Target : in out Ada.Streams.Root_Stream_Type'Class;
+       Buffer_Size    : in     Stream_Element_Offset := 1024)
+    is
+       Buffer : Stream_Element_Array (1 .. Buffer_Size);
+       Last   : Stream_Element_Offset;
+    begin
+       loop
+          Read  (Source, Buffer, Last);
+          Write (Target, Buffer (1 .. Last));
+ 
+          exit when Last < Buffer'Last;
+       end loop;
+    end Copy_Streams;
+ 
+    -------------
+    -- Data_In --
+    -------------
+ 
+    procedure Data_In
+      (Item : out Stream_Element_Array;
+       Last : out Stream_Element_Offset) is
+    begin
+       Read (File_In, Item, Last);
+    end Data_In;
+ 
+    --------------
+    -- Data_Out --
+    --------------
+ 
+    procedure Data_Out (Item : in Stream_Element_Array) is
+    begin
+       Write (File_Out, Item);
+    end Data_Out;
+ 
+    -------------------
+    -- Generate_File --
+    -------------------
+ 
+    procedure Generate_File is
+       subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;
+ 
+       package Random_Elements is
+          new Ada.Numerics.Discrete_Random (Visible_Symbols);
+ 
+       Gen    : Random_Elements.Generator;
+       Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10;
+ 
+       Buffer_Count : constant Count := File_Size / Buffer'Length;
+       --  Number of same buffers in the packet.
+ 
+       Density : constant Count := 30; --  from 0 to Buffer'Length - 2;
+ 
+       procedure Fill_Buffer (J, D : in Count);
+       --  Change the part of the buffer.
+ 
+       -----------------
+       -- Fill_Buffer --
+       -----------------
+ 
+       procedure Fill_Buffer (J, D : in Count) is
+       begin
+          for K in 0 .. D loop
+             Buffer
+               (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1))
+              := Random_Elements.Random (Gen);
+ 
+          end loop;
+       end Fill_Buffer;
+ 
+    begin
+       Random_Elements.Reset (Gen, Init_Random);
+ 
+       Create (File_In, Out_File, In_File_Name);
+ 
+       Fill_Buffer (1, Buffer'Length - 2);
+ 
+       for J in 1 .. Buffer_Count loop
+          Write (File_In, Buffer);
+ 
+          Fill_Buffer (J, Density);
+       end loop;
+ 
+       --  fill remain size.
+ 
+       Write
+         (File_In,
+          Buffer
+            (1 .. Stream_Element_Offset
+                    (File_Size - Buffer'Length * Buffer_Count)));
+ 
+       Flush (File_In);
+       Close (File_In);
+    end Generate_File;
+ 
+    ---------------------
+    -- Print_Statistic --
+    ---------------------
+ 
+    procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is
+       use Ada.Calendar;
+       use Ada.Text_IO;
+ 
+       package Count_IO is new Integer_IO (ZLib.Count);
+ 
+       Curr_Dur : Duration := Clock - Time_Stamp;
+    begin
+       Put (Msg);
+ 
+       Set_Col (20);
+       Ada.Text_IO.Put ("size =");
+ 
+       Count_IO.Put
+         (Data_Size,
+          Width => Stream_IO.Count'Image (File_Size)'Length);
+ 
+       Put_Line (" duration =" & Duration'Image (Curr_Dur));
+    end Print_Statistic;
+ 
+    -----------
+    -- Stamp --
+    -----------
+ 
+    procedure Stamp is
+    begin
+       Time_Stamp := Ada.Calendar.Clock;
+    end Stamp;
+ 
+ begin
+    Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
+ 
+    loop
+       Generate_File;
+ 
+       for Level in ZLib.Compression_Level'Range loop
+ 
+          Ada.Text_IO.Put_Line ("Level ="
+             & ZLib.Compression_Level'Image (Level));
+ 
+          --  Test generic interface.
+          Open   (File_In, In_File, In_File_Name);
+          Create (File_Out, Out_File, Z_File_Name);
+ 
+          Stamp;
+ 
+          --  Deflate using generic instantiation.
+ 
+          ZLib.Deflate_Init
+                (Filter   => Filter,
+                 Level    => Level,
+                 Strategy => Strategy,
+                 Header   => Header);
+ 
+          Translate (Filter);
+          Print_Statistic ("Generic compress", ZLib.Total_Out (Filter));
+          ZLib.Close (Filter);
+ 
+          Close (File_In);
+          Close (File_Out);
+ 
+          Open   (File_In, In_File, Z_File_Name);
+          Create (File_Out, Out_File, Out_File_Name);
+ 
+          Stamp;
+ 
+          --  Inflate using generic instantiation.
+ 
+          ZLib.Inflate_Init (Filter, Header => Header);
+ 
+          Translate (Filter);
+          Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter));
+ 
+          ZLib.Close (Filter);
+ 
+          Close (File_In);
+          Close (File_Out);
+ 
+          Compare_Files (In_File_Name, Out_File_Name);
+ 
+          --  Test stream interface.
+ 
+          --  Compress to the back stream.
+ 
+          Open   (File_In, In_File, In_File_Name);
+          Create (File_Back, Out_File, Z_File_Name);
+ 
+          Stamp;
+ 
+          ZLib.Streams.Create
+            (Stream          => File_Z,
+             Mode            => ZLib.Streams.Out_Stream,
+             Back            => ZLib.Streams.Stream_Access
+                                  (Stream (File_Back)),
+             Back_Compressed => True,
+             Level           => Level,
+             Strategy        => Strategy,
+             Header          => Header);
+ 
+          Copy_Streams
+            (Source => Stream (File_In).all,
+             Target => File_Z);
+ 
+          --  Flushing internal buffers to the back stream.
+ 
+          ZLib.Streams.Flush (File_Z, ZLib.Finish);
+ 
+          Print_Statistic ("Write compress",
+                           ZLib.Streams.Write_Total_Out (File_Z));
+ 
+          ZLib.Streams.Close (File_Z);
+ 
+          Close (File_In);
+          Close (File_Back);
+ 
+          --  Compare reading from original file and from
+          --  decompression stream.
+ 
+          Open (File_In,   In_File, In_File_Name);
+          Open (File_Back, In_File, Z_File_Name);
+ 
+          ZLib.Streams.Create
+            (Stream          => File_Z,
+             Mode            => ZLib.Streams.In_Stream,
+             Back            => ZLib.Streams.Stream_Access
+                                  (Stream (File_Back)),
+             Back_Compressed => True,
+             Header          => Header);
+ 
+          Stamp;
+          Compare_Streams (Stream (File_In).all, File_Z);
+ 
+          Print_Statistic ("Read decompress",
+                           ZLib.Streams.Read_Total_Out (File_Z));
+ 
+          ZLib.Streams.Close (File_Z);
+          Close (File_In);
+          Close (File_Back);
+ 
+          --  Compress by reading from compression stream.
+ 
+          Open (File_Back, In_File, In_File_Name);
+          Create (File_Out, Out_File, Z_File_Name);
+ 
+          ZLib.Streams.Create
+            (Stream          => File_Z,
+             Mode            => ZLib.Streams.In_Stream,
+             Back            => ZLib.Streams.Stream_Access
+                                  (Stream (File_Back)),
+             Back_Compressed => False,
+             Level           => Level,
+             Strategy        => Strategy,
+             Header          => Header);
+ 
+          Stamp;
+          Copy_Streams
+            (Source => File_Z,
+             Target => Stream (File_Out).all);
+ 
+          Print_Statistic ("Read compress",
+                           ZLib.Streams.Read_Total_Out (File_Z));
+ 
+          ZLib.Streams.Close (File_Z);
+ 
+          Close (File_Out);
+          Close (File_Back);
+ 
+          --  Decompress to decompression stream.
+ 
+          Open   (File_In,   In_File, Z_File_Name);
+          Create (File_Back, Out_File, Out_File_Name);
+ 
+          ZLib.Streams.Create
+            (Stream          => File_Z,
+             Mode            => ZLib.Streams.Out_Stream,
+             Back            => ZLib.Streams.Stream_Access
+                                  (Stream (File_Back)),
+             Back_Compressed => False,
+             Header          => Header);
+ 
+          Stamp;
+ 
+          Copy_Streams
+            (Source => Stream (File_In).all,
+             Target => File_Z);
+ 
+          Print_Statistic ("Write decompress",
+                           ZLib.Streams.Write_Total_Out (File_Z));
+ 
+          ZLib.Streams.Close (File_Z);
+          Close (File_In);
+          Close (File_Back);
+ 
+          Compare_Files (In_File_Name, Out_File_Name);
+       end loop;
+ 
+       Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok.");
+ 
+       exit when not Continuous;
+ 
+       File_Size := File_Size + 1;
+    end loop;
+ end Test;
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/zlib-streams.adb gcc-4.0.0/zlib/contrib/ada/zlib-streams.adb
*** gcc-3.4.3/zlib/contrib/ada/zlib-streams.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/zlib-streams.adb	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,215 ----
+ ----------------------------------------------------------------
+ --  ZLib for Ada thick binding.                               --
+ --                                                            --
+ --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
+ --                                                            --
+ --  Open source license information is in the zlib.ads file.  --
+ ----------------------------------------------------------------
+ 
+ --  $Id: zlib-streams.adb,v 1.1.1.1 2004/10/11 17:44:23 tromey Exp $
+ 
+ with Ada.Unchecked_Deallocation;
+ 
+ package body ZLib.Streams is
+ 
+    -----------
+    -- Close --
+    -----------
+ 
+    procedure Close (Stream : in out Stream_Type) is
+       procedure Free is new Ada.Unchecked_Deallocation
+          (Stream_Element_Array, Buffer_Access);
+    begin
+       if Stream.Mode = Out_Stream or Stream.Mode = Duplex then
+          --  We should flush the data written by the writer.
+ 
+          Flush (Stream, Finish);
+ 
+          Close (Stream.Writer);
+       end if;
+ 
+       if Stream.Mode = In_Stream or Stream.Mode = Duplex then
+          Close (Stream.Reader);
+          Free (Stream.Buffer);
+       end if;
+    end Close;
+ 
+    ------------
+    -- Create --
+    ------------
+ 
+    procedure Create
+      (Stream            :    out Stream_Type;
+       Mode              : in     Stream_Mode;
+       Back              : in     Stream_Access;
+       Back_Compressed   : in     Boolean;
+       Level             : in     Compression_Level := Default_Compression;
+       Strategy          : in     Strategy_Type     := Default_Strategy;
+       Header            : in     Header_Type       := Default;
+       Read_Buffer_Size  : in     Ada.Streams.Stream_Element_Offset
+                                     := Default_Buffer_Size;
+       Write_Buffer_Size : in     Ada.Streams.Stream_Element_Offset
+                                     := Default_Buffer_Size)
+    is
+ 
+       subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size);
+ 
+       procedure Init_Filter
+          (Filter   : in out Filter_Type;
+           Compress : in     Boolean);
+ 
+       -----------------
+       -- Init_Filter --
+       -----------------
+ 
+       procedure Init_Filter
+          (Filter   : in out Filter_Type;
+           Compress : in     Boolean) is
+       begin
+          if Compress then
+             Deflate_Init
+               (Filter, Level, Strategy, Header => Header);
+          else
+             Inflate_Init (Filter, Header => Header);
+          end if;
+       end Init_Filter;
+ 
+    begin
+       Stream.Back := Back;
+       Stream.Mode := Mode;
+ 
+       if Mode = Out_Stream or Mode = Duplex then
+          Init_Filter (Stream.Writer, Back_Compressed);
+          Stream.Buffer_Size := Write_Buffer_Size;
+       else
+          Stream.Buffer_Size := 0;
+       end if;
+ 
+       if Mode = In_Stream or Mode = Duplex then
+          Init_Filter (Stream.Reader, not Back_Compressed);
+ 
+          Stream.Buffer     := new Buffer_Subtype;
+          Stream.Rest_First := Stream.Buffer'Last + 1;
+       end if;
+    end Create;
+ 
+    -----------
+    -- Flush --
+    -----------
+ 
+    procedure Flush
+      (Stream : in out Stream_Type;
+       Mode   : in     Flush_Mode := Sync_Flush)
+    is
+       Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size);
+       Last   : Stream_Element_Offset;
+    begin
+       loop
+          Flush (Stream.Writer, Buffer, Last, Mode);
+ 
+          Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last));
+ 
+          exit when Last < Buffer'Last;
+       end loop;
+    end Flush;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Stream : in out Stream_Type;
+       Item   :    out Stream_Element_Array;
+       Last   :    out Stream_Element_Offset)
+    is
+ 
+       procedure Read
+         (Item : out Stream_Element_Array;
+          Last : out Stream_Element_Offset);
+ 
+       ----------
+       -- Read --
+       ----------
+ 
+       procedure Read
+         (Item : out Stream_Element_Array;
+          Last : out Stream_Element_Offset) is
+       begin
+          Ada.Streams.Read (Stream.Back.all, Item, Last);
+       end Read;
+ 
+       procedure Read is new ZLib.Read
+          (Read       => Read,
+           Buffer     => Stream.Buffer.all,
+           Rest_First => Stream.Rest_First,
+           Rest_Last  => Stream.Rest_Last);
+ 
+    begin
+       Read (Stream.Reader, Item, Last);
+    end Read;
+ 
+    -------------------
+    -- Read_Total_In --
+    -------------------
+ 
+    function Read_Total_In (Stream : in Stream_Type) return Count is
+    begin
+       return Total_In (Stream.Reader);
+    end Read_Total_In;
+ 
+    --------------------
+    -- Read_Total_Out --
+    --------------------
+ 
+    function Read_Total_Out (Stream : in Stream_Type) return Count is
+    begin
+       return Total_Out (Stream.Reader);
+    end Read_Total_Out;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Stream : in out Stream_Type;
+       Item   : in     Stream_Element_Array)
+    is
+ 
+       procedure Write (Item : in Stream_Element_Array);
+ 
+       -----------
+       -- Write --
+       -----------
+ 
+       procedure Write (Item : in Stream_Element_Array) is
+       begin
+          Ada.Streams.Write (Stream.Back.all, Item);
+       end Write;
+ 
+       procedure Write is new ZLib.Write
+          (Write       => Write,
+           Buffer_Size => Stream.Buffer_Size);
+ 
+    begin
+       Write (Stream.Writer, Item, No_Flush);
+    end Write;
+ 
+    --------------------
+    -- Write_Total_In --
+    --------------------
+ 
+    function Write_Total_In (Stream : in Stream_Type) return Count is
+    begin
+       return Total_In (Stream.Writer);
+    end Write_Total_In;
+ 
+    ---------------------
+    -- Write_Total_Out --
+    ---------------------
+ 
+    function Write_Total_Out (Stream : in Stream_Type) return Count is
+    begin
+       return Total_Out (Stream.Writer);
+    end Write_Total_Out;
+ 
+ end ZLib.Streams;
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/zlib-streams.ads gcc-4.0.0/zlib/contrib/ada/zlib-streams.ads
*** gcc-3.4.3/zlib/contrib/ada/zlib-streams.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/zlib-streams.ads	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,112 ----
+ ----------------------------------------------------------------
+ --  ZLib for Ada thick binding.                               --
+ --                                                            --
+ --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
+ --                                                            --
+ --  Open source license information is in the zlib.ads file.  --
+ ----------------------------------------------------------------
+ 
+ --  $Id: zlib-streams.ads,v 1.1.1.1 2004/10/11 17:44:23 tromey Exp $
+ 
+ package ZLib.Streams is
+ 
+    type Stream_Mode is (In_Stream, Out_Stream, Duplex);
+ 
+    type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class;
+ 
+    type Stream_Type is
+       new Ada.Streams.Root_Stream_Type with private;
+ 
+    procedure Read
+      (Stream : in out Stream_Type;
+       Item   :    out Ada.Streams.Stream_Element_Array;
+       Last   :    out Ada.Streams.Stream_Element_Offset);
+ 
+    procedure Write
+      (Stream : in out Stream_Type;
+       Item   : in     Ada.Streams.Stream_Element_Array);
+ 
+    procedure Flush
+      (Stream : in out Stream_Type;
+       Mode   : in     Flush_Mode := Sync_Flush);
+    --  Flush the written data to the back stream,
+    --  all data placed to the compressor is flushing to the Back stream.
+    --  Should not be used untill necessary, becouse it is decreasing
+    --  compression.
+ 
+    function Read_Total_In (Stream : in Stream_Type) return Count;
+    pragma Inline (Read_Total_In);
+    --  Return total number of bytes read from back stream so far.
+ 
+    function Read_Total_Out (Stream : in Stream_Type) return Count;
+    pragma Inline (Read_Total_Out);
+    --  Return total number of bytes read so far.
+ 
+    function Write_Total_In (Stream : in Stream_Type) return Count;
+    pragma Inline (Write_Total_In);
+    --  Return total number of bytes written so far.
+ 
+    function Write_Total_Out (Stream : in Stream_Type) return Count;
+    pragma Inline (Write_Total_Out);
+    --  Return total number of bytes written to the back stream.
+ 
+    procedure Create
+      (Stream            :    out Stream_Type;
+       Mode              : in     Stream_Mode;
+       Back              : in     Stream_Access;
+       Back_Compressed   : in     Boolean;
+       Level             : in     Compression_Level := Default_Compression;
+       Strategy          : in     Strategy_Type     := Default_Strategy;
+       Header            : in     Header_Type       := Default;
+       Read_Buffer_Size  : in     Ada.Streams.Stream_Element_Offset
+                                     := Default_Buffer_Size;
+       Write_Buffer_Size : in     Ada.Streams.Stream_Element_Offset
+                                     := Default_Buffer_Size);
+    --  Create the Comression/Decompression stream.
+    --  If mode is In_Stream then Write operation is disabled.
+    --  If mode is Out_Stream then Read operation is disabled.
+ 
+    --  If Back_Compressed is true then
+    --  Data written to the Stream is compressing to the Back stream
+    --  and data read from the Stream is decompressed data from the Back stream.
+ 
+    --  If Back_Compressed is false then
+    --  Data written to the Stream is decompressing to the Back stream
+    --  and data read from the Stream is compressed data from the Back stream.
+ 
+    --  !!! When the Need_Header is False ZLib-Ada is using undocumented
+    --  ZLib 1.1.4 functionality to do not create/wait for ZLib headers.
+ 
+    procedure Close (Stream : in out Stream_Type);
+ 
+ private
+ 
+    use Ada.Streams;
+ 
+    type Buffer_Access is access all Stream_Element_Array;
+ 
+    type Stream_Type
+      is new Root_Stream_Type with
+    record
+       Mode       : Stream_Mode;
+ 
+       Buffer     : Buffer_Access;
+       Rest_First : Stream_Element_Offset;
+       Rest_Last  : Stream_Element_Offset;
+       --  Buffer for Read operation.
+       --  We need to have this buffer in the record
+       --  becouse not all read data from back stream
+       --  could be processed during the read operation.
+ 
+       Buffer_Size : Stream_Element_Offset;
+       --  Buffer size for write operation.
+       --  We do not need to have this buffer
+       --  in the record becouse all data could be
+       --  processed in the write operation.
+ 
+       Back       : Stream_Access;
+       Reader     : Filter_Type;
+       Writer     : Filter_Type;
+    end record;
+ 
+ end ZLib.Streams;
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/zlib-thin.adb gcc-4.0.0/zlib/contrib/ada/zlib-thin.adb
*** gcc-3.4.3/zlib/contrib/ada/zlib-thin.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/zlib-thin.adb	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,185 ----
+ ----------------------------------------------------------------
+ --  ZLib for Ada thick binding.                               --
+ --                                                            --
+ --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
+ --                                                            --
+ --  Open source license information is in the zlib.ads file.  --
+ ----------------------------------------------------------------
+ 
+ --  $Id: zlib-thin.adb,v 1.1.1.1 2004/10/11 17:44:23 tromey Exp $
+ 
+ package body ZLib.Thin is
+ 
+    ZLIB_VERSION : constant Chars_Ptr :=
+       Interfaces.C.Strings.New_String ("1.1.4");
+ 
+    Z_Stream_Size : constant Int := Z_Stream'Size / System.Storage_Unit;
+ 
+    --------------
+    -- Avail_In --
+    --------------
+ 
+    function Avail_In (Strm : in Z_Stream) return UInt is
+    begin
+       return Strm.Avail_In;
+    end Avail_In;
+ 
+    ---------------
+    -- Avail_Out --
+    ---------------
+ 
+    function Avail_Out (Strm : in Z_Stream) return UInt is
+    begin
+       return Strm.Avail_Out;
+    end Avail_Out;
+ 
+    ------------------
+    -- Deflate_Init --
+    ------------------
+ 
+    function Deflate_Init
+      (strm  : in Z_Streamp;
+       level : in Int := Z_DEFAULT_COMPRESSION)
+       return  Int is
+    begin
+       return deflateInit (strm, level, ZLIB_VERSION, Z_Stream_Size);
+    end Deflate_Init;
+ 
+    function Deflate_Init
+      (strm       : Z_Streamp;
+       level      : Int;
+       method     : Int;
+       windowBits : Int;
+       memLevel   : Int;
+       strategy   : Int)
+       return       Int is
+    begin
+       return deflateInit2
+                (strm,
+                 level,
+                 method,
+                 windowBits,
+                 memLevel,
+                 strategy,
+                 ZLIB_VERSION,
+                 Z_Stream_Size);
+    end Deflate_Init;
+ 
+    ------------------
+    -- Inflate_Init --
+    ------------------
+ 
+    function Inflate_Init (strm : Z_Streamp) return Int is
+    begin
+       return inflateInit (strm, ZLIB_VERSION, Z_Stream_Size);
+    end Inflate_Init;
+ 
+    function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int is
+    begin
+       return inflateInit2 (strm, windowBits, ZLIB_VERSION, Z_Stream_Size);
+    end Inflate_Init;
+ 
+    function Last_Error_Message (Strm : in Z_Stream) return String is
+       use Interfaces.C.Strings;
+    begin
+       if Strm.msg = Null_Ptr then
+          return "";
+       else
+          return Value (Strm.msg);
+       end if;
+    end Last_Error_Message;
+ 
+    -------------
+    -- Need_In --
+    -------------
+ 
+    function Need_In (strm : Z_Stream) return Boolean is
+    begin
+       return strm.Avail_In = 0;
+    end Need_In;
+ 
+    --------------
+    -- Need_Out --
+    --------------
+ 
+    function Need_Out (strm : Z_Stream) return Boolean is
+    begin
+       return strm.Avail_Out = 0;
+    end Need_Out;
+ 
+    ------------
+    -- Set_In --
+    ------------
+ 
+    procedure Set_In
+      (Strm   : in out Z_Stream;
+       Buffer : in Byte_Access;
+       Size   : in UInt) is
+    begin
+       Strm.Next_In  := Buffer;
+       Strm.Avail_In := Size;
+    end Set_In;
+ 
+    procedure Set_In
+      (Strm   : in out Z_Stream;
+       Buffer : in Voidp;
+       Size   : in UInt) is
+    begin
+       Set_In (Strm, Bytes.To_Pointer (Buffer), Size);
+    end Set_In;
+ 
+    ------------------
+    -- Set_Mem_Func --
+    ------------------
+ 
+    procedure Set_Mem_Func
+      (Strm   : in out Z_Stream;
+       Opaque : in Voidp;
+       Alloc  : in alloc_func;
+       Free   : in free_func) is
+    begin
+       Strm.opaque := Opaque;
+       Strm.zalloc := Alloc;
+       Strm.zfree  := Free;
+    end Set_Mem_Func;
+ 
+    -------------
+    -- Set_Out --
+    -------------
+ 
+    procedure Set_Out
+      (Strm   : in out Z_Stream;
+       Buffer : in Byte_Access;
+       Size   : in UInt) is
+    begin
+       Strm.Next_Out  := Buffer;
+       Strm.Avail_Out := Size;
+    end Set_Out;
+ 
+    procedure Set_Out
+      (Strm   : in out Z_Stream;
+       Buffer : in Voidp;
+       Size   : in UInt) is
+    begin
+       Set_Out (Strm, Bytes.To_Pointer (Buffer), Size);
+    end Set_Out;
+ 
+    --------------
+    -- Total_In --
+    --------------
+ 
+    function Total_In (Strm : in Z_Stream) return ULong is
+    begin
+       return Strm.Total_In;
+    end Total_In;
+ 
+    ---------------
+    -- Total_Out --
+    ---------------
+ 
+    function Total_Out (Strm : in Z_Stream) return ULong is
+    begin
+       return Strm.Total_Out;
+    end Total_Out;
+ 
+ end ZLib.Thin;
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/zlib-thin.ads gcc-4.0.0/zlib/contrib/ada/zlib-thin.ads
*** gcc-3.4.3/zlib/contrib/ada/zlib-thin.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/zlib-thin.ads	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,485 ----
+ ----------------------------------------------------------------
+ --  ZLib for Ada thick binding.                               --
+ --                                                            --
+ --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
+ --                                                            --
+ --  Open source license information is in the zlib.ads file.  --
+ ----------------------------------------------------------------
+ 
+ --  $Id: zlib-thin.ads,v 1.1.1.1 2004/10/11 17:44:23 tromey Exp $
+ 
+ with Interfaces.C.Strings;
+ with System.Address_To_Access_Conversions;
+ 
+ private package ZLib.Thin is
+ 
+    --  From zconf.h
+ 
+    MAX_MEM_LEVEL : constant := 9;         --  zconf.h:105
+                                           --  zconf.h:105
+    MAX_WBITS : constant := 15;      --  zconf.h:115
+                                     --  32K LZ77 window
+                                     --  zconf.h:115
+    SEEK_SET : constant := 8#0000#;  --  zconf.h:244
+                                     --  Seek from beginning of file.
+                                     --  zconf.h:244
+    SEEK_CUR : constant := 1;        --  zconf.h:245
+                                     --  Seek from current position.
+                                     --  zconf.h:245
+    SEEK_END : constant := 2;        --  zconf.h:246
+                                     --  Set file pointer to EOF plus "offset"
+                                     --  zconf.h:246
+ 
+    type Byte is new Interfaces.C.unsigned_char; --  8 bits
+                                                 --  zconf.h:214
+    type UInt is new Interfaces.C.unsigned;      --  16 bits or more
+                                                 --  zconf.h:216
+    type Int is new Interfaces.C.int;
+ 
+    type ULong is new Interfaces.C.unsigned;     --  32 bits or more
+                                                 --  zconf.h:217
+    subtype Chars_Ptr is Interfaces.C.Strings.chars_ptr;
+ 
+    type ULong_Access is access ULong;
+    type Int_Access is access Int;
+    subtype Voidp is System.Address;            --  zconf.h:232
+ 
+    package Bytes is new System.Address_To_Access_Conversions (Byte);
+ 
+    subtype Byte_Access is Bytes.Object_Pointer;
+ 
+    --  end from zconf
+ 
+    Z_NO_FLUSH : constant := 8#0000#;   --  zlib.h:125
+                                        --  zlib.h:125
+    Z_PARTIAL_FLUSH : constant := 1;       --  zlib.h:126
+                                           --  will be removed, use
+                                           --  Z_SYNC_FLUSH instead
+                                           --  zlib.h:126
+    Z_SYNC_FLUSH : constant := 2;       --  zlib.h:127
+                                        --  zlib.h:127
+    Z_FULL_FLUSH : constant := 3;       --  zlib.h:128
+                                        --  zlib.h:128
+    Z_FINISH : constant := 4;        --  zlib.h:129
+                                     --  zlib.h:129
+    Z_OK : constant := 8#0000#;   --  zlib.h:132
+                                  --  zlib.h:132
+    Z_STREAM_END : constant := 1;       --  zlib.h:133
+                                        --  zlib.h:133
+    Z_NEED_DICT : constant := 2;        --  zlib.h:134
+                                        --  zlib.h:134
+    Z_ERRNO : constant := -1;        --  zlib.h:135
+                                     --  zlib.h:135
+    Z_STREAM_ERROR : constant := -2;       --  zlib.h:136
+                                           --  zlib.h:136
+    Z_DATA_ERROR : constant := -3;      --  zlib.h:137
+                                        --  zlib.h:137
+    Z_MEM_ERROR : constant := -4;       --  zlib.h:138
+                                        --  zlib.h:138
+    Z_BUF_ERROR : constant := -5;       --  zlib.h:139
+                                        --  zlib.h:139
+    Z_VERSION_ERROR : constant := -6;      --  zlib.h:140
+                                           --  zlib.h:140
+    Z_NO_COMPRESSION : constant := 8#0000#;   --  zlib.h:145
+                                              --  zlib.h:145
+    Z_BEST_SPEED : constant := 1;       --  zlib.h:146
+                                        --  zlib.h:146
+    Z_BEST_COMPRESSION : constant := 9;       --  zlib.h:147
+                                              --  zlib.h:147
+    Z_DEFAULT_COMPRESSION : constant := -1;      --  zlib.h:148
+                                                 --  zlib.h:148
+    Z_FILTERED : constant := 1;      --  zlib.h:151
+                                     --  zlib.h:151
+    Z_HUFFMAN_ONLY : constant := 2;        --  zlib.h:152
+                                           --  zlib.h:152
+    Z_DEFAULT_STRATEGY : constant := 8#0000#; --  zlib.h:153
+                                              --  zlib.h:153
+    Z_BINARY : constant := 8#0000#;  --  zlib.h:156
+                                     --  zlib.h:156
+    Z_ASCII : constant := 1;      --  zlib.h:157
+                                  --  zlib.h:157
+    Z_UNKNOWN : constant := 2;       --  zlib.h:158
+                                     --  zlib.h:158
+    Z_DEFLATED : constant := 8;      --  zlib.h:161
+                                     --  zlib.h:161
+    Z_NULL : constant := 8#0000#; --  zlib.h:164
+                                  --  for initializing zalloc, zfree, opaque
+                                  --  zlib.h:164
+    type gzFile is new Voidp;                  --  zlib.h:646
+ 
+    type Z_Stream is private;
+ 
+    type Z_Streamp is access all Z_Stream;     --  zlib.h:89
+ 
+    type alloc_func is access function
+      (Opaque : Voidp;
+       Items  : UInt;
+       Size   : UInt)
+       return Voidp; --  zlib.h:63
+ 
+    type free_func is access procedure (opaque : Voidp; address : Voidp);
+ 
+    function zlibVersion return Chars_Ptr;
+ 
+    function Deflate (strm : Z_Streamp; flush : Int) return Int;
+ 
+    function DeflateEnd (strm : Z_Streamp) return Int;
+ 
+    function Inflate (strm : Z_Streamp; flush : Int) return Int;
+ 
+    function InflateEnd (strm : Z_Streamp) return Int;
+ 
+    function deflateSetDictionary
+      (strm       : Z_Streamp;
+       dictionary : Byte_Access;
+       dictLength : UInt)
+       return       Int;
+ 
+    function deflateCopy (dest : Z_Streamp; source : Z_Streamp) return Int;
+    --  zlib.h:478
+ 
+    function deflateReset (strm : Z_Streamp) return Int; -- zlib.h:495
+ 
+    function deflateParams
+      (strm     : Z_Streamp;
+       level    : Int;
+       strategy : Int)
+       return     Int;       -- zlib.h:506
+ 
+    function inflateSetDictionary
+      (strm       : Z_Streamp;
+       dictionary : Byte_Access;
+       dictLength : UInt)
+       return       Int; --  zlib.h:548
+ 
+    function inflateSync (strm : Z_Streamp) return Int;  --  zlib.h:565
+ 
+    function inflateReset (strm : Z_Streamp) return Int; --  zlib.h:580
+ 
+    function compress
+      (dest      : Byte_Access;
+       destLen   : ULong_Access;
+       source    : Byte_Access;
+       sourceLen : ULong)
+       return      Int;           -- zlib.h:601
+ 
+    function compress2
+      (dest      : Byte_Access;
+       destLen   : ULong_Access;
+       source    : Byte_Access;
+       sourceLen : ULong;
+       level     : Int)
+       return      Int;          -- zlib.h:615
+ 
+    function uncompress
+      (dest      : Byte_Access;
+       destLen   : ULong_Access;
+       source    : Byte_Access;
+       sourceLen : ULong)
+       return      Int;
+ 
+    function gzopen (path : Chars_Ptr; mode : Chars_Ptr) return gzFile;
+ 
+    function gzdopen (fd : Int; mode : Chars_Ptr) return gzFile;
+ 
+    function gzsetparams
+      (file     : gzFile;
+       level    : Int;
+       strategy : Int)
+       return     Int;
+ 
+    function gzread
+      (file : gzFile;
+       buf  : Voidp;
+       len  : UInt)
+       return Int;
+ 
+    function gzwrite
+      (file : in gzFile;
+       buf  : in Voidp;
+       len  : in UInt)
+       return Int;
+ 
+    function gzprintf (file : in gzFile; format : in Chars_Ptr) return Int;
+ 
+    function gzputs (file : in gzFile; s : in Chars_Ptr) return Int;
+ 
+    function gzgets
+      (file : gzFile;
+       buf  : Chars_Ptr;
+       len  : Int)
+       return Chars_Ptr;
+ 
+    function gzputc (file : gzFile; char : Int) return Int;
+ 
+    function gzgetc (file : gzFile) return Int;
+ 
+    function gzflush (file : gzFile; flush : Int) return Int;
+ 
+    function gzseek
+      (file   : gzFile;
+       offset : Int;
+       whence : Int)
+       return   Int;
+ 
+    function gzrewind (file : gzFile) return Int;
+ 
+    function gztell (file : gzFile) return Int;
+ 
+    function gzeof (file : gzFile) return Int;
+ 
+    function gzclose (file : gzFile) return Int;
+ 
+    function gzerror (file : gzFile; errnum : Int_Access) return Chars_Ptr;
+ 
+    function adler32
+      (adler : ULong;
+       buf   : Byte_Access;
+       len   : UInt)
+       return  ULong;
+ 
+    function crc32
+      (crc  : ULong;
+       buf  : Byte_Access;
+       len  : UInt)
+       return ULong;
+ 
+    function deflateInit
+      (strm        : Z_Streamp;
+       level       : Int;
+       version     : Chars_Ptr;
+       stream_size : Int)
+       return        Int;
+ 
+    function Deflate_Init
+      (strm  : in Z_Streamp;
+       level : in Int := Z_DEFAULT_COMPRESSION)
+       return  Int;
+    pragma Inline (Deflate_Init);
+ 
+    function deflateInit2
+      (strm        : Z_Streamp;
+       level       : Int;
+       method      : Int;
+       windowBits  : Int;
+       memLevel    : Int;
+       strategy    : Int;
+       version     : Chars_Ptr;
+       stream_size : Int)
+       return        Int;
+ 
+    function Deflate_Init
+      (strm       : Z_Streamp;
+       level      : Int;
+       method     : Int;
+       windowBits : Int;
+       memLevel   : Int;
+       strategy   : Int)
+       return       Int;
+    pragma Inline (Deflate_Init);
+ 
+    function inflateInit
+      (strm        : Z_Streamp;
+       version     : Chars_Ptr;
+       stream_size : Int)
+       return        Int;
+ 
+    function Inflate_Init (strm : Z_Streamp) return Int;
+    pragma Inline (Inflate_Init);
+ 
+    function inflateInit2
+      (strm        : in Z_Streamp;
+       windowBits  : in Int;
+       version     : in Chars_Ptr;
+       stream_size : in Int)
+       return      Int;
+ 
+    function inflateBackInit
+      (strm        : in Z_Streamp;
+       windowBits  : in Int;
+       window      : in Byte_Access;
+       version     : in Chars_Ptr;
+       stream_size : in Int)
+       return      Int;
+    --  Size of window have to be 2**windowBits.
+ 
+    function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int;
+    pragma Inline (Inflate_Init);
+ 
+    function zError (err : Int) return Chars_Ptr;
+ 
+    function inflateSyncPoint (z : Z_Streamp) return Int;
+ 
+    function get_crc_table return ULong_Access;
+ 
+    --  Interface to the available fields of the z_stream structure.
+    --  The application must update next_in and avail_in when avail_in has
+    --  dropped to zero. It must update next_out and avail_out when avail_out
+    --  has dropped to zero. The application must initialize zalloc, zfree and
+    --  opaque before calling the init function.
+ 
+    function Need_In (strm : in Z_Stream) return Boolean;
+    --  return true when we do not need to setup Next_In and Avail_In fields.
+    pragma Inline (Need_In);
+ 
+    function Need_Out (strm : in Z_Stream) return Boolean;
+    --  return true when we do not need to setup Next_Out and Avail_Out field.
+    pragma Inline (Need_Out);
+ 
+    procedure Set_In
+      (Strm   : in out Z_Stream;
+       Buffer : in Byte_Access;
+       Size   : in UInt);
+    pragma Inline (Set_In);
+ 
+    procedure Set_In
+      (Strm   : in out Z_Stream;
+       Buffer : in Voidp;
+       Size   : in UInt);
+    pragma Inline (Set_In);
+ 
+    procedure Set_Out
+      (Strm   : in out Z_Stream;
+       Buffer : in Byte_Access;
+       Size   : in UInt);
+    pragma Inline (Set_Out);
+ 
+    procedure Set_Out
+      (Strm   : in out Z_Stream;
+       Buffer : in Voidp;
+       Size   : in UInt);
+    pragma Inline (Set_Out);
+ 
+    procedure Set_Mem_Func
+      (Strm   : in out Z_Stream;
+       Opaque : in Voidp;
+       Alloc  : in alloc_func;
+       Free   : in free_func);
+    pragma Inline (Set_Mem_Func);
+ 
+    function Last_Error_Message (Strm : in Z_Stream) return String;
+    pragma Inline (Last_Error_Message);
+ 
+    function Avail_Out (Strm : in Z_Stream) return UInt;
+    pragma Inline (Avail_Out);
+ 
+    function Avail_In (Strm : in Z_Stream) return UInt;
+    pragma Inline (Avail_In);
+ 
+    function Total_In (Strm : in Z_Stream) return ULong;
+    pragma Inline (Total_In);
+ 
+    function Total_Out (Strm : in Z_Stream) return ULong;
+    pragma Inline (Total_Out);
+ 
+    function inflateCopy
+      (dest   : in Z_Streamp;
+       Source : in Z_Streamp)
+       return Int;
+ 
+    function compressBound (Source_Len : in ULong) return ULong;
+ 
+    function deflateBound
+      (Strm       : in Z_Streamp;
+       Source_Len : in ULong)
+       return     ULong;
+ 
+    function gzungetc (C : in Int; File : in  gzFile) return Int;
+ 
+    function zlibCompileFlags return ULong;
+ 
+    function deflatePrime
+      (strm     : Z_Streamp;
+       bits     : Int;
+       value    : Int)
+       return     Int;
+ 
+ private
+ 
+    type Z_Stream is record            -- zlib.h:68
+       Next_In   : Byte_Access;        -- next input byte
+       Avail_In  : UInt       := 0;    -- number of bytes available at next_in
+       Total_In  : ULong      := 0;    -- total nb of input bytes read so far
+       Next_Out  : Byte_Access;        -- next output byte should be put there
+       Avail_Out : UInt       := 0;    -- remaining free space at next_out
+       Total_Out : ULong      := 0;    -- total nb of bytes output so far
+       msg       : Chars_Ptr;          -- last error message, NULL if no error
+       state     : Voidp;              -- not visible by applications
+       zalloc    : alloc_func := null; -- used to allocate the internal state
+       zfree     : free_func  := null; -- used to free the internal state
+       opaque    : Voidp;              -- private data object passed to
+                                       --  zalloc and zfree
+       data_type : Int;                -- best guess about the data type:
+                                       --  ascii or binary
+       adler     : ULong;              -- adler32 value of the uncompressed
+                                       --  data
+       reserved  : ULong;              -- reserved for future use
+    end record;
+ 
+    pragma Convention (C, Z_Stream);
+ 
+    pragma Import (C, zlibVersion, "zlibVersion");
+    pragma Import (C, Deflate, "deflate");
+    pragma Import (C, DeflateEnd, "deflateEnd");
+    pragma Import (C, Inflate, "inflate");
+    pragma Import (C, InflateEnd, "inflateEnd");
+    pragma Import (C, deflateSetDictionary, "deflateSetDictionary");
+    pragma Import (C, deflateCopy, "deflateCopy");
+    pragma Import (C, deflateReset, "deflateReset");
+    pragma Import (C, deflateParams, "deflateParams");
+    pragma Import (C, inflateSetDictionary, "inflateSetDictionary");
+    pragma Import (C, inflateSync, "inflateSync");
+    pragma Import (C, inflateReset, "inflateReset");
+    pragma Import (C, compress, "compress");
+    pragma Import (C, compress2, "compress2");
+    pragma Import (C, uncompress, "uncompress");
+    pragma Import (C, gzopen, "gzopen");
+    pragma Import (C, gzdopen, "gzdopen");
+    pragma Import (C, gzsetparams, "gzsetparams");
+    pragma Import (C, gzread, "gzread");
+    pragma Import (C, gzwrite, "gzwrite");
+    pragma Import (C, gzprintf, "gzprintf");
+    pragma Import (C, gzputs, "gzputs");
+    pragma Import (C, gzgets, "gzgets");
+    pragma Import (C, gzputc, "gzputc");
+    pragma Import (C, gzgetc, "gzgetc");
+    pragma Import (C, gzflush, "gzflush");
+    pragma Import (C, gzseek, "gzseek");
+    pragma Import (C, gzrewind, "gzrewind");
+    pragma Import (C, gztell, "gztell");
+    pragma Import (C, gzeof, "gzeof");
+    pragma Import (C, gzclose, "gzclose");
+    pragma Import (C, gzerror, "gzerror");
+    pragma Import (C, adler32, "adler32");
+    pragma Import (C, crc32, "crc32");
+    pragma Import (C, deflateInit, "deflateInit_");
+    pragma Import (C, inflateInit, "inflateInit_");
+    pragma Import (C, deflateInit2, "deflateInit2_");
+    pragma Import (C, inflateInit2, "inflateInit2_");
+    pragma Import (C, zError, "zError");
+    pragma Import (C, inflateSyncPoint, "inflateSyncPoint");
+    pragma Import (C, get_crc_table, "get_crc_table");
+ 
+    --  added in zlib 1.2.1:
+ 
+    pragma Import (C, inflateCopy, "inflateCopy");
+    pragma Import (C, compressBound, "compressBound");
+    pragma Import (C, deflateBound, "deflateBound");
+    pragma Import (C, gzungetc, "gzungetc");
+    pragma Import (C, zlibCompileFlags, "zlibCompileFlags");
+    pragma Import (C, deflatePrime, "deflatePrime");
+ 
+    pragma Import (C, inflateBackInit, "inflateBackInit_");
+ 
+    --  I stopped binding the inflateBack routines, becouse realize that
+    --  it does not support zlib and gzip headers for now, and have no
+    --  symmetric deflateBack routines.
+    --  ZLib-Ada is symmetric regarding deflate/inflate data transformation
+    --  and has a similar generic callback interface for the
+    --  deflate/inflate transformation based on the regular Deflate/Inflate
+    --  routines.
+ 
+    --  pragma Import (C, inflateBack, "inflateBack");
+    --  pragma Import (C, inflateBackEnd, "inflateBackEnd");
+ 
+ end ZLib.Thin;
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/zlib.adb gcc-4.0.0/zlib/contrib/ada/zlib.adb
*** gcc-3.4.3/zlib/contrib/ada/zlib.adb	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/zlib.adb	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,674 ----
+ ----------------------------------------------------------------
+ --  ZLib for Ada thick binding.                               --
+ --                                                            --
+ --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
+ --                                                            --
+ --  Open source license information is in the zlib.ads file.  --
+ ----------------------------------------------------------------
+ 
+ --  $Id: zlib.adb,v 1.1.1.1 2004/10/11 17:44:23 tromey Exp $
+ 
+ with Ada.Exceptions;
+ with Ada.Unchecked_Conversion;
+ with Ada.Unchecked_Deallocation;
+ 
+ with Interfaces.C.Strings;
+ 
+ with ZLib.Thin;
+ 
+ package body ZLib is
+ 
+    use type Thin.Int;
+ 
+    type Z_Stream is new Thin.Z_Stream;
+ 
+    type Return_Code_Enum is
+       (OK,
+        STREAM_END,
+        NEED_DICT,
+        ERRNO,
+        STREAM_ERROR,
+        DATA_ERROR,
+        MEM_ERROR,
+        BUF_ERROR,
+        VERSION_ERROR);
+ 
+    type Flate_Step_Function is access
+      function (Strm : Thin.Z_Streamp; flush : Thin.Int) return Thin.Int;
+    pragma Convention (C, Flate_Step_Function);
+ 
+    type Flate_End_Function is access
+       function (Ctrm : in Thin.Z_Streamp) return Thin.Int;
+    pragma Convention (C, Flate_End_Function);
+ 
+    type Flate_Type is record
+       Step : Flate_Step_Function;
+       Done : Flate_End_Function;
+    end record;
+ 
+    subtype Footer_Array is Stream_Element_Array (1 .. 8);
+ 
+    Simple_GZip_Header : constant Stream_Element_Array (1 .. 10)
+      := (16#1f#, 16#8b#,                 --  Magic header
+          16#08#,                         --  Z_DEFLATED
+          16#00#,                         --  Flags
+          16#00#, 16#00#, 16#00#, 16#00#, --  Time
+          16#00#,                         --  XFlags
+          16#03#                          --  OS code
+         );
+    --  The simplest gzip header is not for informational, but just for
+    --  gzip format compatibility.
+    --  Note that some code below is using assumption
+    --  Simple_GZip_Header'Last > Footer_Array'Last, so do not make
+    --  Simple_GZip_Header'Last <= Footer_Array'Last.
+ 
+    Return_Code : constant array (Thin.Int range <>) of Return_Code_Enum
+      := (0 => OK,
+          1 => STREAM_END,
+          2 => NEED_DICT,
+         -1 => ERRNO,
+         -2 => STREAM_ERROR,
+         -3 => DATA_ERROR,
+         -4 => MEM_ERROR,
+         -5 => BUF_ERROR,
+         -6 => VERSION_ERROR);
+ 
+    Flate : constant array (Boolean) of Flate_Type
+      := (True  => (Step => Thin.Deflate'Access,
+                    Done => Thin.DeflateEnd'Access),
+          False => (Step => Thin.Inflate'Access,
+                    Done => Thin.InflateEnd'Access));
+ 
+    Flush_Finish : constant array (Boolean) of Flush_Mode
+      := (True => Finish, False => No_Flush);
+ 
+    procedure Raise_Error (Stream : Z_Stream);
+    pragma Inline (Raise_Error);
+ 
+    procedure Raise_Error (Message : String);
+    pragma Inline (Raise_Error);
+ 
+    procedure Check_Error (Stream : Z_Stream; Code : Thin.Int);
+ 
+    procedure Free is new Ada.Unchecked_Deallocation
+       (Z_Stream, Z_Stream_Access);
+ 
+    function To_Thin_Access is new Ada.Unchecked_Conversion
+      (Z_Stream_Access, Thin.Z_Streamp);
+ 
+    procedure Translate_GZip
+      (Filter    : in out Filter_Type;
+       In_Data   : in     Ada.Streams.Stream_Element_Array;
+       In_Last   :    out Ada.Streams.Stream_Element_Offset;
+       Out_Data  :    out Ada.Streams.Stream_Element_Array;
+       Out_Last  :    out Ada.Streams.Stream_Element_Offset;
+       Flush     : in     Flush_Mode);
+    --  Separate translate routine for make gzip header.
+ 
+    procedure Translate_Auto
+      (Filter    : in out Filter_Type;
+       In_Data   : in     Ada.Streams.Stream_Element_Array;
+       In_Last   :    out Ada.Streams.Stream_Element_Offset;
+       Out_Data  :    out Ada.Streams.Stream_Element_Array;
+       Out_Last  :    out Ada.Streams.Stream_Element_Offset;
+       Flush     : in     Flush_Mode);
+    --  translate routine without additional headers.
+ 
+    -----------------
+    -- Check_Error --
+    -----------------
+ 
+    procedure Check_Error (Stream : Z_Stream; Code : Thin.Int) is
+       use type Thin.Int;
+    begin
+       if Code /= Thin.Z_OK then
+          Raise_Error
+             (Return_Code_Enum'Image (Return_Code (Code))
+               & ": " & Last_Error_Message (Stream));
+       end if;
+    end Check_Error;
+ 
+    -----------
+    -- Close --
+    -----------
+ 
+    procedure Close
+      (Filter       : in out Filter_Type;
+       Ignore_Error : in     Boolean := False)
+    is
+       Code : Thin.Int;
+    begin
+       Code := Flate (Filter.Compression).Done
+           (To_Thin_Access (Filter.Strm));
+ 
+       Filter.Opened := False;
+ 
+       if Ignore_Error or else Code = Thin.Z_OK then
+          Free (Filter.Strm);
+       else
+          declare
+             Error_Message : constant String
+               := Last_Error_Message (Filter.Strm.all);
+          begin
+             Free (Filter.Strm);
+             Ada.Exceptions.Raise_Exception
+                (ZLib_Error'Identity,
+                 Return_Code_Enum'Image (Return_Code (Code))
+                 & ": " & Error_Message);
+          end;
+       end if;
+    end Close;
+ 
+    -----------
+    -- CRC32 --
+    -----------
+ 
+    function CRC32
+      (CRC  : in Unsigned_32;
+       Data : in Ada.Streams.Stream_Element_Array)
+       return Unsigned_32
+    is
+       use Thin;
+    begin
+       return Unsigned_32 (crc32
+         (ULong (CRC),
+          Bytes.To_Pointer (Data'Address),
+          Data'Length));
+    end CRC32;
+ 
+    procedure CRC32
+      (CRC  : in out Unsigned_32;
+       Data : in     Ada.Streams.Stream_Element_Array) is
+    begin
+       CRC := CRC32 (CRC, Data);
+    end CRC32;
+ 
+    ------------------
+    -- Deflate_Init --
+    ------------------
+ 
+    procedure Deflate_Init
+      (Filter       : in out Filter_Type;
+       Level        : in     Compression_Level  := Default_Compression;
+       Strategy     : in     Strategy_Type      := Default_Strategy;
+       Method       : in     Compression_Method := Deflated;
+       Window_Bits  : in     Window_Bits_Type   := 15;
+       Memory_Level : in     Memory_Level_Type  := 8;
+       Header       : in     Header_Type        := Default)
+    is
+       use type Thin.Int;
+       Win_Bits : Thin.Int := Thin.Int (Window_Bits);
+    begin
+       --  We allow ZLib to make header only in case of default header type.
+       --  Otherwise we would either do header by ourselfs, or do not do
+       --  header at all.
+ 
+       if Header = None or else Header = GZip then
+          Win_Bits := -Win_Bits;
+       end if;
+ 
+       --  For the GZip CRC calculation and make headers.
+ 
+       if Header = GZip then
+          Filter.CRC    := 0;
+          Filter.Offset := Simple_GZip_Header'First;
+       else
+          Filter.Offset := Simple_GZip_Header'Last + 1;
+       end if;
+ 
+       Filter.Strm := new Z_Stream;
+       Filter.Compression := True;
+       Filter.Stream_End  := False;
+       Filter.Opened      := True;
+       Filter.Header      := Header;
+ 
+       if Thin.Deflate_Init
+            (To_Thin_Access (Filter.Strm),
+             Level      => Thin.Int (Level),
+             method     => Thin.Int (Method),
+             windowBits => Win_Bits,
+             memLevel   => Thin.Int (Memory_Level),
+             strategy   => Thin.Int (Strategy)) /= Thin.Z_OK
+       then
+          Raise_Error (Filter.Strm.all);
+       end if;
+    end Deflate_Init;
+ 
+    -----------
+    -- Flush --
+    -----------
+ 
+    procedure Flush
+      (Filter    : in out Filter_Type;
+       Out_Data  :    out Ada.Streams.Stream_Element_Array;
+       Out_Last  :    out Ada.Streams.Stream_Element_Offset;
+       Flush     : in     Flush_Mode)
+    is
+       No_Data : Stream_Element_Array := (1 .. 0 => 0);
+       Last    : Stream_Element_Offset;
+    begin
+       Translate (Filter, No_Data, Last, Out_Data, Out_Last, Flush);
+    end Flush;
+ 
+    -----------------------
+    -- Generic_Translate --
+    -----------------------
+ 
+    procedure Generic_Translate
+      (Filter : in out ZLib.Filter_Type;
+       In_Buffer_Size  : Integer := Default_Buffer_Size;
+       Out_Buffer_Size : Integer := Default_Buffer_Size)
+    is
+       In_Buffer : Stream_Element_Array
+          (1 .. Stream_Element_Offset (In_Buffer_Size));
+       Out_Buffer : Stream_Element_Array
+         (1 .. Stream_Element_Offset (Out_Buffer_Size));
+       Last : Stream_Element_Offset;
+       In_Last : Stream_Element_Offset;
+       In_First : Stream_Element_Offset;
+       Out_Last : Stream_Element_Offset;
+    begin
+       Main : loop
+          Data_In (In_Buffer, Last);
+ 
+          In_First := In_Buffer'First;
+ 
+          loop
+             Translate
+               (Filter,
+                In_Buffer (In_First .. Last),
+                In_Last,
+                Out_Buffer,
+                Out_Last,
+                Flush_Finish (Last < In_Buffer'First));
+ 
+             Data_Out (Out_Buffer (Out_Buffer'First .. Out_Last));
+ 
+             exit Main when Stream_End (Filter);
+ 
+             --  The end of in buffer.
+             exit when In_Last = Last;
+ 
+             In_First := In_Last + 1;
+          end loop;
+       end loop Main;
+ 
+    end Generic_Translate;
+ 
+    ------------------
+    -- Inflate_Init --
+    ------------------
+ 
+    procedure Inflate_Init
+      (Filter      : in out Filter_Type;
+       Window_Bits : in     Window_Bits_Type := 15;
+       Header      : in     Header_Type      := Default)
+    is
+       use type Thin.Int;
+       Win_Bits : Thin.Int := Thin.Int (Window_Bits);
+ 
+       procedure Check_Version;
+       --  Check the latest header types compatibility.
+ 
+       procedure Check_Version is
+       begin
+          if Version <= "1.1.4" then
+             Raise_Error
+               ("Inflate header type " & Header_Type'Image (Header)
+                & " incompatible with ZLib version " & Version);
+          end if;
+       end Check_Version;
+ 
+    begin
+       case Header is
+          when None =>
+             Check_Version;
+ 
+             --  Inflate data without headers determined
+             --  by negative Win_Bits.
+ 
+             Win_Bits := -Win_Bits;
+          when GZip =>
+             Check_Version;
+ 
+             --  Inflate gzip data defined by flag 16.
+ 
+             Win_Bits := Win_Bits + 16;
+          when Auto =>
+             Check_Version;
+ 
+             --  Inflate with automatic detection
+             --  of gzip or native header defined by flag 32.
+ 
+             Win_Bits := Win_Bits + 32;
+          when Default => null;
+       end case;
+ 
+       Filter.Strm := new Z_Stream;
+       Filter.Compression := False;
+       Filter.Stream_End  := False;
+       Filter.Opened      := True;
+       Filter.Header      := Header;
+ 
+       if Thin.Inflate_Init
+          (To_Thin_Access (Filter.Strm), Win_Bits) /= Thin.Z_OK
+       then
+          Raise_Error (Filter.Strm.all);
+       end if;
+    end Inflate_Init;
+ 
+    -----------------
+    -- Raise_Error --
+    -----------------
+ 
+    procedure Raise_Error (Message : String) is
+    begin
+       Ada.Exceptions.Raise_Exception (ZLib_Error'Identity, Message);
+    end Raise_Error;
+ 
+    procedure Raise_Error (Stream : Z_Stream) is
+    begin
+       Raise_Error (Last_Error_Message (Stream));
+    end Raise_Error;
+ 
+    ----------
+    -- Read --
+    ----------
+ 
+    procedure Read
+      (Filter : in out Filter_Type;
+       Item   :    out Ada.Streams.Stream_Element_Array;
+       Last   :    out Ada.Streams.Stream_Element_Offset)
+    is
+       In_Last    : Stream_Element_Offset;
+       Item_First : Ada.Streams.Stream_Element_Offset := Item'First;
+ 
+    begin
+       pragma Assert (Rest_First in Buffer'First .. Buffer'Last + 1);
+ 
+       loop
+          if Rest_First > Buffer'Last then
+             Read (Buffer, Rest_Last);
+             Rest_First := Buffer'First;
+          end if;
+ 
+          pragma Assert (Rest_Last in Buffer'First - 1 .. Buffer'Last);
+ 
+          Translate
+            (Filter   => Filter,
+             In_Data  => Buffer (Rest_First .. Rest_Last),
+             In_Last  => In_Last,
+             Out_Data => Item (Item_First .. Item'Last),
+             Out_Last => Last,
+             Flush    => Flush_Finish (Rest_Last < Rest_First));
+ 
+          Rest_First := In_Last + 1;
+ 
+          exit when Last = Item'Last or else Stream_End (Filter);
+ 
+          Item_First := Last + 1;
+       end loop;
+    end Read;
+ 
+    ----------------
+    -- Stream_End --
+    ----------------
+ 
+    function Stream_End (Filter : in Filter_Type) return Boolean is
+    begin
+       if Filter.Header = GZip and Filter.Compression then
+          return Filter.Stream_End
+             and then Filter.Offset = Footer_Array'Last + 1;
+       else
+          return Filter.Stream_End;
+       end if;
+    end Stream_End;
+ 
+    --------------
+    -- Total_In --
+    --------------
+ 
+    function Total_In (Filter : in Filter_Type) return Count is
+    begin
+       return Count (Thin.Total_In (To_Thin_Access (Filter.Strm).all));
+    end Total_In;
+ 
+    ---------------
+    -- Total_Out --
+    ---------------
+ 
+    function Total_Out (Filter : in Filter_Type) return Count is
+    begin
+       return Count (Thin.Total_Out (To_Thin_Access (Filter.Strm).all));
+    end Total_Out;
+ 
+    ---------------
+    -- Translate --
+    ---------------
+ 
+    procedure Translate
+      (Filter    : in out Filter_Type;
+       In_Data   : in     Ada.Streams.Stream_Element_Array;
+       In_Last   :    out Ada.Streams.Stream_Element_Offset;
+       Out_Data  :    out Ada.Streams.Stream_Element_Array;
+       Out_Last  :    out Ada.Streams.Stream_Element_Offset;
+       Flush     : in     Flush_Mode) is
+    begin
+       if Filter.Header = GZip and then Filter.Compression then
+          Translate_GZip
+            (Filter   => Filter,
+             In_Data  => In_Data,
+             In_Last  => In_Last,
+             Out_Data => Out_Data,
+             Out_Last => Out_Last,
+             Flush    => Flush);
+       else
+          Translate_Auto
+            (Filter   => Filter,
+             In_Data  => In_Data,
+             In_Last  => In_Last,
+             Out_Data => Out_Data,
+             Out_Last => Out_Last,
+             Flush    => Flush);
+       end if;
+    end Translate;
+ 
+    --------------------
+    -- Translate_Auto --
+    --------------------
+ 
+    procedure Translate_Auto
+      (Filter    : in out Filter_Type;
+       In_Data   : in     Ada.Streams.Stream_Element_Array;
+       In_Last   :    out Ada.Streams.Stream_Element_Offset;
+       Out_Data  :    out Ada.Streams.Stream_Element_Array;
+       Out_Last  :    out Ada.Streams.Stream_Element_Offset;
+       Flush     : in     Flush_Mode)
+    is
+       use type Thin.Int;
+       Code : Thin.Int;
+ 
+    begin
+       if Filter.Opened = False then
+          raise ZLib_Error;
+       end if;
+ 
+       if Out_Data'Length = 0 then
+          raise Constraint_Error;
+       end if;
+ 
+       Set_Out (Filter.Strm.all, Out_Data'Address, Out_Data'Length);
+       Set_In  (Filter.Strm.all, In_Data'Address, In_Data'Length);
+ 
+       Code := Flate (Filter.Compression).Step
+         (To_Thin_Access (Filter.Strm),
+          Thin.Int (Flush));
+ 
+       if Code = Thin.Z_STREAM_END then
+          Filter.Stream_End := True;
+       else
+          Check_Error (Filter.Strm.all, Code);
+       end if;
+ 
+       In_Last  := In_Data'Last
+          - Stream_Element_Offset (Avail_In (Filter.Strm.all));
+       Out_Last := Out_Data'Last
+          - Stream_Element_Offset (Avail_Out (Filter.Strm.all));
+ 
+    end Translate_Auto;
+ 
+    --------------------
+    -- Translate_GZip --
+    --------------------
+ 
+    procedure Translate_GZip
+      (Filter    : in out Filter_Type;
+       In_Data   : in     Ada.Streams.Stream_Element_Array;
+       In_Last   :    out Ada.Streams.Stream_Element_Offset;
+       Out_Data  :    out Ada.Streams.Stream_Element_Array;
+       Out_Last  :    out Ada.Streams.Stream_Element_Offset;
+       Flush     : in     Flush_Mode)
+    is
+       Out_First  : Stream_Element_Offset;
+ 
+       procedure Add_Data (Data : in Stream_Element_Array);
+       --  Add data to stream from the Filter.Offset till necessary,
+       --  used for add gzip headr/footer.
+ 
+       procedure Put_32
+         (Item : in out Stream_Element_Array;
+          Data : in     Unsigned_32);
+       pragma Inline (Put_32);
+ 
+       --------------
+       -- Add_Data --
+       --------------
+ 
+       procedure Add_Data (Data : in Stream_Element_Array) is
+          Data_First : Stream_Element_Offset renames Filter.Offset;
+          Data_Last  : Stream_Element_Offset;
+          Data_Len   : Stream_Element_Offset; --  -1
+          Out_Len    : Stream_Element_Offset; --  -1
+       begin
+          Out_First := Out_Last + 1;
+ 
+          if Data_First > Data'Last then
+             return;
+          end if;
+ 
+          Data_Len  := Data'Last     - Data_First;
+          Out_Len   := Out_Data'Last - Out_First;
+ 
+          if Data_Len <= Out_Len then
+             Out_Last  := Out_First  + Data_Len;
+             Data_Last := Data'Last;
+          else
+             Out_Last  := Out_Data'Last;
+             Data_Last := Data_First + Out_Len;
+          end if;
+ 
+          Out_Data (Out_First .. Out_Last) := Data (Data_First .. Data_Last);
+ 
+          Data_First := Data_Last + 1;
+          Out_First  := Out_Last + 1;
+       end Add_Data;
+ 
+       ------------
+       -- Put_32 --
+       ------------
+ 
+       procedure Put_32
+         (Item : in out Stream_Element_Array;
+          Data : in     Unsigned_32)
+       is
+          D : Unsigned_32 := Data;
+       begin
+          for J in Item'First .. Item'First + 3 loop
+             Item (J) := Stream_Element (D and 16#FF#);
+             D := Shift_Right (D, 8);
+          end loop;
+       end Put_32;
+ 
+    begin
+       Out_Last := Out_Data'First - 1;
+ 
+       if not Filter.Stream_End then
+          Add_Data (Simple_GZip_Header);
+ 
+          Translate_Auto
+            (Filter => Filter,
+             In_Data  => In_Data,
+             In_Last  => In_Last,
+             Out_Data => Out_Data (Out_First .. Out_Data'Last),
+             Out_Last => Out_Last,
+             Flush    => Flush);
+ 
+          CRC32 (Filter.CRC, In_Data (In_Data'First .. In_Last));
+ 
+       end if;
+ 
+       if Filter.Stream_End and then Out_Last <= Out_Data'Last then
+          --  This detection method would work only when
+          --  Simple_GZip_Header'Last > Footer_Array'Last
+ 
+          if Filter.Offset = Simple_GZip_Header'Last + 1 then
+             Filter.Offset := Footer_Array'First;
+          end if;
+ 
+          declare
+             Footer : Footer_Array;
+          begin
+             Put_32 (Footer, Filter.CRC);
+             Put_32 (Footer (Footer'First + 4 .. Footer'Last),
+                     Unsigned_32 (Total_In (Filter)));
+             Add_Data (Footer);
+          end;
+       end if;
+    end Translate_GZip;
+ 
+    -------------
+    -- Version --
+    -------------
+ 
+    function Version return String is
+    begin
+       return Interfaces.C.Strings.Value (Thin.zlibVersion);
+    end Version;
+ 
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write
+      (Filter : in out Filter_Type;
+       Item   : in     Ada.Streams.Stream_Element_Array;
+       Flush  : in     Flush_Mode)
+    is
+       Buffer : Stream_Element_Array (1 .. Buffer_Size);
+       In_Last, Out_Last : Stream_Element_Offset;
+       In_First : Stream_Element_Offset := Item'First;
+    begin
+       if Item'Length = 0 and Flush = No_Flush then
+          return;
+       end if;
+ 
+       loop
+          Translate
+            (Filter => Filter,
+             In_Data  => Item (In_First .. Item'Last),
+             In_Last  => In_Last,
+             Out_Data => Buffer,
+             Out_Last => Out_Last,
+             Flush    => Flush);
+ 
+          if Out_Last >= Buffer'First then
+             Write (Buffer (1 .. Out_Last));
+          end if;
+ 
+          exit when In_Last = Item'Last or Stream_End (Filter);
+ 
+          In_First := In_Last + 1;
+       end loop;
+    end Write;
+ 
+ end ZLib;
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/zlib.ads gcc-4.0.0/zlib/contrib/ada/zlib.ads
*** gcc-3.4.3/zlib/contrib/ada/zlib.ads	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/zlib.ads	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,311 ----
+ ------------------------------------------------------------------------------
+ --                      ZLib for Ada thick binding.                         --
+ --                                                                          --
+ --              Copyright (C) 2002-2003 Dmitriy Anisimkov                   --
+ --                                                                          --
+ --  This library is free software; you can redistribute 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 library is distributed in the hope that it will be useful, but     --
+ --  WITHOUT ANY WARRANTY; without even the implied warranty of              --
+ --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       --
+ --  General Public License for more details.                                --
+ --                                                                          --
+ --  You should have received a copy of the GNU General Public License       --
+ --  along with this library; if not, write to the Free Software Foundation, --
+ --  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.          --
+ --                                                                          --
+ --  As a special exception, if other files instantiate generics from this   --
+ --  unit, or you link this unit with other files to produce an executable,  --
+ --  this  unit  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 Public License.                                     --
+ ------------------------------------------------------------------------------
+ 
+ --  $Id: zlib.ads,v 1.1.1.1 2004/10/11 17:44:23 tromey Exp $
+ 
+ with Ada.Streams;
+ 
+ with Interfaces;
+ 
+ package ZLib is
+ 
+    ZLib_Error : exception;
+ 
+    type Compression_Level is new Integer range -1 .. 9;
+ 
+    type Flush_Mode is private;
+ 
+    type Compression_Method is private;
+ 
+    type Window_Bits_Type is new Integer range 8 .. 15;
+ 
+    type Memory_Level_Type is new Integer range 1 .. 9;
+ 
+    type Unsigned_32 is new Interfaces.Unsigned_32;
+ 
+    type Strategy_Type is private;
+ 
+    type Header_Type is (None, Auto, Default, GZip);
+    --  Header type usage have a some limitation for inflate.
+    --  See comment for Inflate_Init.
+ 
+    subtype Count is Ada.Streams.Stream_Element_Count;
+ 
+    ----------------------------------
+    -- Compression method constants --
+    ----------------------------------
+ 
+    Deflated : constant Compression_Method;
+    --  Only one method allowed in this ZLib version.
+ 
+    ---------------------------------
+    -- Compression level constants --
+    ---------------------------------
+ 
+    No_Compression      : constant Compression_Level := 0;
+    Best_Speed          : constant Compression_Level := 1;
+    Best_Compression    : constant Compression_Level := 9;
+    Default_Compression : constant Compression_Level := -1;
+ 
+    --------------------------
+    -- Flush mode constants --
+    --------------------------
+ 
+    No_Flush      : constant Flush_Mode;
+    --  Regular way for compression, no flush
+ 
+    Partial_Flush : constant Flush_Mode;
+    --  will be removed, use Z_SYNC_FLUSH instead
+ 
+    Sync_Flush    : constant Flush_Mode;
+    --  all pending output is flushed to the output buffer and the output
+    --  is aligned on a byte boundary, so that the decompressor can get all
+    --  input data available so far. (In particular avail_in is zero after the
+    --  call if enough output space has been provided  before the call.)
+    --  Flushing may degrade compression for some compression algorithms and so
+    --  it should be used only when necessary.
+ 
+    Full_Flush    : constant Flush_Mode;
+    --  all output is flushed as with SYNC_FLUSH, and the compression state
+    --  is reset so that decompression can restart from this point if previous
+    --  compressed data has been damaged or if random access is desired. Using
+    --  FULL_FLUSH too often can seriously degrade the compression.
+ 
+    Finish        : constant Flush_Mode;
+    --  Just for tell the compressor that input data is complete.
+ 
+    ------------------------------------
+    -- Compression strategy constants --
+    ------------------------------------
+ 
+    --  RLE stategy could be used only in version 1.2.0 and later.
+ 
+    Filtered         : constant Strategy_Type;
+    Huffman_Only     : constant Strategy_Type;
+    RLE              : constant Strategy_Type;
+    Default_Strategy : constant Strategy_Type;
+ 
+    Default_Buffer_Size : constant := 4096;
+ 
+    type Filter_Type is limited private;
+    --  The filter is for compression and for decompression.
+    --  The usage of the type is depend of its initialization.
+ 
+    function Version return String;
+    pragma Inline (Version);
+    --  Return string representation of the ZLib version.
+ 
+    procedure Deflate_Init
+      (Filter       : in out Filter_Type;
+       Level        : in     Compression_Level  := Default_Compression;
+       Strategy     : in     Strategy_Type      := Default_Strategy;
+       Method       : in     Compression_Method := Deflated;
+       Window_Bits  : in     Window_Bits_Type   := 15;
+       Memory_Level : in     Memory_Level_Type  := 8;
+       Header       : in     Header_Type        := Default);
+    --  Compressor initialization.
+    --  When Header parameter is Auto or Default, then default zlib header
+    --  would be provided for compressed data.
+    --  When Header is GZip, then gzip header would be set instead of
+    --  default header.
+    --  When Header is None, no header would be set for compressed data.
+ 
+    procedure Inflate_Init
+      (Filter      : in out Filter_Type;
+       Window_Bits : in     Window_Bits_Type := 15;
+       Header      : in     Header_Type      := Default);
+    --  Decompressor initialization.
+    --  Default header type mean that ZLib default header is expecting in the
+    --  input compressed stream.
+    --  Header type None mean that no header is expecting in the input stream.
+    --  GZip header type mean that GZip header is expecting in the
+    --  input compressed stream.
+    --  Auto header type mean that header type (GZip or Native) would be
+    --  detected automatically in the input stream.
+    --  Note that header types parameter values None, GZip and Auto is
+    --  supporting for inflate routine only in ZLib versions 1.2.0.2 and later.
+    --  Deflate_Init is supporting all header types.
+ 
+    procedure Close
+      (Filter       : in out Filter_Type;
+       Ignore_Error : in     Boolean := False);
+    --  Closing the compression or decompressor.
+    --  If stream is closing before the complete and Ignore_Error is False,
+    --  The exception would be raised.
+ 
+    generic
+       with procedure Data_In
+         (Item : out Ada.Streams.Stream_Element_Array;
+          Last : out Ada.Streams.Stream_Element_Offset);
+       with procedure Data_Out
+         (Item : in Ada.Streams.Stream_Element_Array);
+    procedure Generic_Translate
+      (Filter          : in out Filter_Type;
+       In_Buffer_Size  : in     Integer := Default_Buffer_Size;
+       Out_Buffer_Size : in     Integer := Default_Buffer_Size);
+    --  Compressing/decompressing data arrived from Data_In routine
+    --  to the Data_Out routine. User should provide Data_In and Data_Out
+    --  for compression/decompression data flow.
+    --  Compression or decompression depend on initialization of Filter.
+ 
+    function Total_In (Filter : in Filter_Type) return Count;
+    pragma Inline (Total_In);
+    --  Return total number of input bytes read so far.
+ 
+    function Total_Out (Filter : in Filter_Type) return Count;
+    pragma Inline (Total_Out);
+    --  Return total number of bytes output so far.
+ 
+    function CRC32
+      (CRC    : in Unsigned_32;
+       Data   : in Ada.Streams.Stream_Element_Array)
+       return Unsigned_32;
+    pragma Inline (CRC32);
+    --  Calculate CRC32, it could be necessary for make gzip format.
+ 
+    procedure CRC32
+      (CRC  : in out Unsigned_32;
+       Data : in     Ada.Streams.Stream_Element_Array);
+    pragma Inline (CRC32);
+    --  Calculate CRC32, it could be necessary for make gzip format.
+ 
+    -------------------------------------------------
+    --  Below is more complex low level routines.  --
+    -------------------------------------------------
+ 
+    procedure Translate
+      (Filter    : in out Filter_Type;
+       In_Data   : in     Ada.Streams.Stream_Element_Array;
+       In_Last   :    out Ada.Streams.Stream_Element_Offset;
+       Out_Data  :    out Ada.Streams.Stream_Element_Array;
+       Out_Last  :    out Ada.Streams.Stream_Element_Offset;
+       Flush     : in     Flush_Mode);
+    --  Compressing/decompressing the datas from In_Data buffer to the
+    --  Out_Data buffer.
+    --  In_Data is incoming data portion,
+    --  In_Last is the index of last element from In_Data accepted by the
+    --  Filter.
+    --  Out_Data is the buffer for output data from the filter.
+    --  Out_Last is the last element of the received data from Filter.
+    --  To tell the filter that incoming data is complete put the
+    --  Flush parameter to FINISH.
+ 
+    function Stream_End (Filter : in Filter_Type) return Boolean;
+    pragma Inline (Stream_End);
+    --  Return the true when the stream is complete.
+ 
+    procedure Flush
+      (Filter    : in out Filter_Type;
+       Out_Data  :    out Ada.Streams.Stream_Element_Array;
+       Out_Last  :    out Ada.Streams.Stream_Element_Offset;
+       Flush     : in     Flush_Mode);
+    pragma Inline (Flush);
+    --  Flushing the data from the compressor.
+ 
+    generic
+       with procedure Write
+         (Item : in Ada.Streams.Stream_Element_Array);
+       --  User should provide this routine for accept
+       --  compressed/decompressed data.
+ 
+       Buffer_Size : in Ada.Streams.Stream_Element_Offset
+          := Default_Buffer_Size;
+       --  Buffer size for Write user routine.
+ 
+    procedure Write
+      (Filter  : in out Filter_Type;
+       Item    : in     Ada.Streams.Stream_Element_Array;
+       Flush   : in     Flush_Mode);
+    --  Compressing/Decompressing data from Item to the
+    --  generic parameter procedure Write.
+    --  Output buffer size could be set in Buffer_Size generic parameter.
+ 
+    generic
+       with procedure Read
+         (Item : out Ada.Streams.Stream_Element_Array;
+          Last : out Ada.Streams.Stream_Element_Offset);
+       --  User should provide data for compression/decompression
+       --  thru this routine.
+ 
+       Buffer : in out Ada.Streams.Stream_Element_Array;
+       --  Buffer for keep remaining data from the previous
+       --  back read.
+ 
+       Rest_First, Rest_Last : in out Ada.Streams.Stream_Element_Offset;
+       --  Rest_First have to be initialized to Buffer'Last + 1
+       --  before usage.
+ 
+    procedure Read
+      (Filter : in out Filter_Type;
+       Item   :    out Ada.Streams.Stream_Element_Array;
+       Last   :    out Ada.Streams.Stream_Element_Offset);
+    --  Compressing/Decompressing data from generic parameter
+    --  procedure Read to the Item.
+    --  User should provide Buffer for the operation
+    --  and Rest_First variable first time initialized to the Buffer'Last + 1.
+ 
+ private
+ 
+    use Ada.Streams;
+ 
+    type Flush_Mode is new Integer range 0 .. 4;
+ 
+    type Compression_Method is new Integer range 8 .. 8;
+ 
+    type Strategy_Type is new Integer range 0 .. 3;
+ 
+    No_Flush      : constant Flush_Mode := 0;
+    Sync_Flush    : constant Flush_Mode := 2;
+    Full_Flush    : constant Flush_Mode := 3;
+    Finish        : constant Flush_Mode := 4;
+    Partial_Flush : constant Flush_Mode := 1;
+    --  will be removed, use Z_SYNC_FLUSH instead
+ 
+    Filtered         : constant Strategy_Type := 1;
+    Huffman_Only     : constant Strategy_Type := 2;
+    RLE              : constant Strategy_Type := 3;
+    Default_Strategy : constant Strategy_Type := 0;
+ 
+    Deflated : constant Compression_Method := 8;
+ 
+    type Z_Stream;
+ 
+    type Z_Stream_Access is access all Z_Stream;
+ 
+    type Filter_Type is record
+       Strm        : Z_Stream_Access;
+       Compression : Boolean;
+       Stream_End  : Boolean;
+       Header      : Header_Type;
+       CRC         : Unsigned_32;
+       Offset      : Stream_Element_Offset;
+       --  Offset for gzip header/footer output.
+ 
+       Opened      : Boolean := False;
+    end record;
+ 
+ end ZLib;
diff -Nrcpad gcc-3.4.3/zlib/contrib/ada/zlib.gpr gcc-4.0.0/zlib/contrib/ada/zlib.gpr
*** gcc-3.4.3/zlib/contrib/ada/zlib.gpr	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/ada/zlib.gpr	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,21 ----
+ project Zlib is
+ 
+    for Languages use ("Ada");
+    for Source_Dirs use (".");
+    for Object_Dir use ".";
+    for Main use ("test.adb", "mtest.adb", "read.adb");
+ 
+    package Compiler is
+       for Default_Switches ("ada") use ("-gnatwbcfilopru", "-gnatVcdfimorst", "-gnatyabcefhiklmnoprst");
+    end Compiler;
+ 
+    package Linker is
+       for Default_Switches ("ada") use ("-lz");
+    end Linker;
+ 
+    package Builder is
+       for Default_Switches ("ada") use ("-s", "-gnatQ");
+    end Builder;
+ 
+ end Zlib;
+ 
diff -Nrcpad gcc-3.4.3/zlib/contrib/asm386/gvmat32.asm gcc-4.0.0/zlib/contrib/asm386/gvmat32.asm
*** gcc-3.4.3/zlib/contrib/asm386/gvmat32.asm	Mon Mar 11 21:49:25 2002
--- gcc-4.0.0/zlib/contrib/asm386/gvmat32.asm	Thu Jan  1 00:00:00 1970
***************
*** 1,559 ****
- ;
- ; gvmat32.asm -- Asm portion of the optimized longest_match for 32 bits x86
- ; Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
- ; File written by Gilles Vollant, by modifiying the longest_match
- ;  from Jean-loup Gailly in deflate.c
- ; It need wmask == 0x7fff
- ;     (assembly code is faster with a fixed wmask)
- ;
- ; For Visual C++ 4.2 and ML 6.11c (version in directory \MASM611C of Win95 DDK)
- ;   I compile with : "ml /coff /Zi /c gvmat32.asm"
- ;
- 
- ;uInt longest_match_7fff(s, cur_match)
- ;    deflate_state *s;
- ;    IPos cur_match;                             /* current match */
- 
-         NbStack         equ     76
-         cur_match       equ     dword ptr[esp+NbStack-0]
-         str_s           equ     dword ptr[esp+NbStack-4]
- ; 5 dword on top (ret,ebp,esi,edi,ebx)
-         adrret          equ     dword ptr[esp+NbStack-8]
-         pushebp         equ     dword ptr[esp+NbStack-12]
-         pushedi         equ     dword ptr[esp+NbStack-16]
-         pushesi         equ     dword ptr[esp+NbStack-20]
-         pushebx         equ     dword ptr[esp+NbStack-24]
- 
-         chain_length    equ     dword ptr [esp+NbStack-28]
-         limit           equ     dword ptr [esp+NbStack-32]
-         best_len        equ     dword ptr [esp+NbStack-36]
-         window          equ     dword ptr [esp+NbStack-40]
-         prev            equ     dword ptr [esp+NbStack-44]
-         scan_start      equ      word ptr [esp+NbStack-48]
-         wmask           equ     dword ptr [esp+NbStack-52]
-         match_start_ptr equ     dword ptr [esp+NbStack-56]
-         nice_match      equ     dword ptr [esp+NbStack-60]
-         scan            equ     dword ptr [esp+NbStack-64]
- 
-         windowlen       equ     dword ptr [esp+NbStack-68]
-         match_start     equ     dword ptr [esp+NbStack-72]
-         strend          equ     dword ptr [esp+NbStack-76]
-         NbStackAdd      equ     (NbStack-24)
- 
-     .386p
- 
-     name    gvmatch
-     .MODEL  FLAT
- 
- 
- 
- ;  all the +4 offsets are due to the addition of pending_buf_size (in zlib
- ;  in the deflate_state structure since the asm code was first written
- ;  (if you compile with zlib 1.0.4 or older, remove the +4).
- ;  Note : these value are good with a 8 bytes boundary pack structure
-     dep_chain_length    equ     70h+4
-     dep_window          equ     2ch+4
-     dep_strstart        equ     60h+4
-     dep_prev_length     equ     6ch+4
-     dep_nice_match      equ     84h+4
-     dep_w_size          equ     20h+4
-     dep_prev            equ     34h+4
-     dep_w_mask          equ     28h+4
-     dep_good_match      equ     80h+4
-     dep_match_start     equ     64h+4
-     dep_lookahead       equ     68h+4
- 
- 
- _TEXT                   segment
- 
- IFDEF NOUNDERLINE
-                         public  longest_match_7fff
- ;                        public  match_init
- ELSE
-                         public  _longest_match_7fff
- ;                        public  _match_init
- ENDIF
- 
-     MAX_MATCH           equ     258
-     MIN_MATCH           equ     3
-     MIN_LOOKAHEAD       equ     (MAX_MATCH+MIN_MATCH+1)
- 
- 
- 
- IFDEF NOUNDERLINE
- ;match_init      proc near
- ;                ret
- ;match_init      endp
- ELSE
- ;_match_init     proc near
- ;                ret
- ;_match_init     endp
- ENDIF
- 
- 
- IFDEF NOUNDERLINE
- longest_match_7fff   proc near
- ELSE
- _longest_match_7fff  proc near
- ENDIF
- 
-         mov     edx,[esp+4]
- 
- 
- 
-         push    ebp
-         push    edi
-         push    esi
-         push    ebx
- 
-         sub     esp,NbStackAdd
- 
- ; initialize or check the variables used in match.asm.
-         mov     ebp,edx
- 
- ; chain_length = s->max_chain_length
- ; if (prev_length>=good_match) chain_length >>= 2
-         mov     edx,[ebp+dep_chain_length]
-         mov     ebx,[ebp+dep_prev_length]
-         cmp     [ebp+dep_good_match],ebx
-         ja      noshr
-         shr     edx,2
- noshr:
- ; we increment chain_length because in the asm, the --chain_lenght is in the beginning of the loop
-         inc     edx
-         mov     edi,[ebp+dep_nice_match]
-         mov     chain_length,edx
-         mov     eax,[ebp+dep_lookahead]
-         cmp     eax,edi
- ; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
-         jae     nolookaheadnicematch
-         mov     edi,eax
- nolookaheadnicematch:
- ; best_len = s->prev_length
-         mov     best_len,ebx
- 
- ; window = s->window
-         mov     esi,[ebp+dep_window]
-         mov     ecx,[ebp+dep_strstart]
-         mov     window,esi
- 
-         mov     nice_match,edi
- ; scan = window + strstart
-         add     esi,ecx
-         mov     scan,esi
- ; dx = *window
-         mov     dx,word ptr [esi]
- ; bx = *(window+best_len-1)
-         mov     bx,word ptr [esi+ebx-1]
-         add     esi,MAX_MATCH-1
- ; scan_start = *scan
-         mov     scan_start,dx
- ; strend = scan + MAX_MATCH-1
-         mov     strend,esi
- ; bx = scan_end = *(window+best_len-1)
- 
- ;    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
- ;        s->strstart - (IPos)MAX_DIST(s) : NIL;
- 
-         mov     esi,[ebp+dep_w_size]
-         sub     esi,MIN_LOOKAHEAD
- ; here esi = MAX_DIST(s)
-         sub     ecx,esi
-         ja      nodist
-         xor     ecx,ecx
- nodist:
-         mov     limit,ecx
- 
- ; prev = s->prev
-         mov     edx,[ebp+dep_prev]
-         mov     prev,edx
- 
- ;
-         mov     edx,dword ptr [ebp+dep_match_start]
-         mov     bp,scan_start
-         mov     eax,cur_match
-         mov     match_start,edx
- 
-         mov     edx,window
-         mov     edi,edx
-         add     edi,best_len
-         mov     esi,prev
-         dec     edi
- ; windowlen = window + best_len -1
-         mov     windowlen,edi
- 
-         jmp     beginloop2
-         align   4
- 
- ; here, in the loop
- ;       eax = ax = cur_match
- ;       ecx = limit
- ;        bx = scan_end
- ;        bp = scan_start
- ;       edi = windowlen (window + best_len -1)
- ;       esi = prev
- 
- 
- ;// here; chain_length <=16
- normalbeg0add16:
-         add     chain_length,16
-         jz      exitloop
- normalbeg0:
-         cmp     word ptr[edi+eax],bx
-         je      normalbeg2noroll
- rcontlabnoroll:
- ; cur_match = prev[cur_match & wmask]
-         and     eax,7fffh
-         mov     ax,word ptr[esi+eax*2]
- ; if cur_match > limit, go to exitloop
-         cmp     ecx,eax
-         jnb     exitloop
- ; if --chain_length != 0, go to exitloop
-         dec     chain_length
-         jnz     normalbeg0
-         jmp     exitloop
- 
- normalbeg2noroll:
- ; if (scan_start==*(cur_match+window)) goto normalbeg2
-         cmp     bp,word ptr[edx+eax]
-         jne     rcontlabnoroll
-         jmp     normalbeg2
- 
- contloop3:
-         mov     edi,windowlen
- 
- ; cur_match = prev[cur_match & wmask]
-         and     eax,7fffh
-         mov     ax,word ptr[esi+eax*2]
- ; if cur_match > limit, go to exitloop
-         cmp     ecx,eax
- jnbexitloopshort1:
-         jnb     exitloop
- ; if --chain_length != 0, go to exitloop
- 
- 
- ; begin the main loop
- beginloop2:
-         sub     chain_length,16+1
- ; if chain_length <=16, don't use the unrolled loop
-         jna     normalbeg0add16
- 
- do16:
-         cmp     word ptr[edi+eax],bx
-         je      normalbeg2dc0
- 
- maccn   MACRO   lab
-         and     eax,7fffh
-         mov     ax,word ptr[esi+eax*2]
-         cmp     ecx,eax
-         jnb     exitloop
-         cmp     word ptr[edi+eax],bx
-         je      lab
-         ENDM
- 
- rcontloop0:
-         maccn   normalbeg2dc1
- 
- rcontloop1:
-         maccn   normalbeg2dc2
- 
- rcontloop2:
-         maccn   normalbeg2dc3
- 
- rcontloop3:
-         maccn   normalbeg2dc4
- 
- rcontloop4:
-         maccn   normalbeg2dc5
- 
- rcontloop5:
-         maccn   normalbeg2dc6
- 
- rcontloop6:
-         maccn   normalbeg2dc7
- 
- rcontloop7:
-         maccn   normalbeg2dc8
- 
- rcontloop8:
-         maccn   normalbeg2dc9
- 
- rcontloop9:
-         maccn   normalbeg2dc10
- 
- rcontloop10:
-         maccn   short normalbeg2dc11
- 
- rcontloop11:
-         maccn   short normalbeg2dc12
- 
- rcontloop12:
-         maccn   short normalbeg2dc13
- 
- rcontloop13:
-         maccn   short normalbeg2dc14
- 
- rcontloop14:
-         maccn   short normalbeg2dc15
- 
- rcontloop15:
-         and     eax,7fffh
-         mov     ax,word ptr[esi+eax*2]
-         cmp     ecx,eax
-         jnb     exitloop
- 
-         sub     chain_length,16
-         ja      do16
-         jmp     normalbeg0add16
- 
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- 
- normbeg MACRO   rcontlab,valsub
- ; if we are here, we know that *(match+best_len-1) == scan_end
-         cmp     bp,word ptr[edx+eax]
- ; if (match != scan_start) goto rcontlab
-         jne     rcontlab
- ; calculate the good chain_length, and we'll compare scan and match string
-         add     chain_length,16-valsub
-         jmp     iseq
-         ENDM
- 
- 
- normalbeg2dc11:
-         normbeg rcontloop11,11
- 
- normalbeg2dc12:
-         normbeg short rcontloop12,12
- 
- normalbeg2dc13:
-         normbeg short rcontloop13,13
- 
- normalbeg2dc14:
-         normbeg short rcontloop14,14
- 
- normalbeg2dc15:
-         normbeg short rcontloop15,15
- 
- normalbeg2dc10:
-         normbeg rcontloop10,10
- 
- normalbeg2dc9:
-         normbeg rcontloop9,9
- 
- normalbeg2dc8:
-         normbeg rcontloop8,8
- 
- normalbeg2dc7:
-         normbeg rcontloop7,7
- 
- normalbeg2dc6:
-         normbeg rcontloop6,6
- 
- normalbeg2dc5:
-         normbeg rcontloop5,5
- 
- normalbeg2dc4:
-         normbeg rcontloop4,4
- 
- normalbeg2dc3:
-         normbeg rcontloop3,3
- 
- normalbeg2dc2:
-         normbeg rcontloop2,2
- 
- normalbeg2dc1:
-         normbeg rcontloop1,1
- 
- normalbeg2dc0:
-         normbeg rcontloop0,0
- 
- 
- ; we go in normalbeg2 because *(ushf*)(match+best_len-1) == scan_end
- 
- normalbeg2:
-         mov     edi,window
- 
-         cmp     bp,word ptr[edi+eax]
-         jne     contloop3                   ; if *(ushf*)match != scan_start, continue
- 
- iseq:
- ; if we are here, we know that *(match+best_len-1) == scan_end
- ; and (match == scan_start)
- 
-         mov     edi,edx
-         mov     esi,scan                    ; esi = scan
-         add     edi,eax                     ; edi = window + cur_match = match
- 
-         mov     edx,[esi+3]                 ; compare manually dword at match+3
-         xor     edx,[edi+3]                 ; and scan +3
- 
-         jz      begincompare                ; if equal, go to long compare
- 
- ; we will determine the unmatch byte and calculate len (in esi)
-         or      dl,dl
-         je      eq1rr
-         mov     esi,3
-         jmp     trfinval
- eq1rr:
-         or      dx,dx
-         je      eq1
- 
-         mov     esi,4
-         jmp     trfinval
- eq1:
-         and     edx,0ffffffh
-         jz      eq11
-         mov     esi,5
-         jmp     trfinval
- eq11:
-         mov     esi,6
-         jmp     trfinval
- 
- begincompare:
-         ; here we now scan and match begin same
-         add     edi,6
-         add     esi,6
-         mov     ecx,(MAX_MATCH-(2+4))/4     ; scan for at most MAX_MATCH bytes
-         repe    cmpsd                       ; loop until mismatch
- 
-         je      trfin                       ; go to trfin if not unmatch
- ; we determine the unmatch byte
-         sub     esi,4
-         mov     edx,[edi-4]
-         xor     edx,[esi]
- 
-         or      dl,dl
-         jnz     trfin
-         inc     esi
- 
-         or      dx,dx
-         jnz     trfin
-         inc     esi
- 
-         and     edx,0ffffffh
-         jnz     trfin
-         inc     esi
- 
- trfin:
-         sub     esi,scan          ; esi = len
- trfinval:
- ; here we have finised compare, and esi contain len of equal string
-         cmp     esi,best_len        ; if len > best_len, go newbestlen
-         ja      short newbestlen
- ; now we restore edx, ecx and esi, for the big loop
-         mov     esi,prev
-         mov     ecx,limit
-         mov     edx,window
-         jmp     contloop3
- 
- newbestlen:
-         mov     best_len,esi        ; len become best_len
- 
-         mov     match_start,eax     ; save new position as match_start
-         cmp     esi,nice_match      ; if best_len >= nice_match, exit
-         jae     exitloop
-         mov     ecx,scan
-         mov     edx,window          ; restore edx=window
-         add     ecx,esi
-         add     esi,edx
- 
-         dec     esi
-         mov     windowlen,esi       ; windowlen = window + best_len-1
-         mov     bx,[ecx-1]          ; bx = *(scan+best_len-1) = scan_end
- 
- ; now we restore ecx and esi, for the big loop :
-         mov     esi,prev
-         mov     ecx,limit
-         jmp     contloop3
- 
- exitloop:
- ; exit : s->match_start=match_start
-         mov     ebx,match_start
-         mov     ebp,str_s
-         mov     ecx,best_len
-         mov     dword ptr [ebp+dep_match_start],ebx        
-         mov     eax,dword ptr [ebp+dep_lookahead]
-         cmp     ecx,eax
-         ja      minexlo
-         mov     eax,ecx
- minexlo:
- ; return min(best_len,s->lookahead)
-         
- ; restore stack and register ebx,esi,edi,ebp
-         add     esp,NbStackAdd
- 
-         pop     ebx
-         pop     esi
-         pop     edi
-         pop     ebp
-         ret
- InfoAuthor:
- ; please don't remove this string !
- ; Your are free use gvmat32 in any fre or commercial apps if you don't remove the string in the binary!
-         db     0dh,0ah,"GVMat32 optimised assembly code written 1996-98 by Gilles Vollant",0dh,0ah
- 
- 
- 
- IFDEF NOUNDERLINE
- longest_match_7fff   endp
- ELSE
- _longest_match_7fff  endp
- ENDIF
- 
- 
- IFDEF NOUNDERLINE
- cpudetect32     proc near
- ELSE
- _cpudetect32    proc near
- ENDIF
- 
- 
- 	pushfd                  ; push original EFLAGS
- 	pop     eax             ; get original EFLAGS
- 	mov     ecx, eax        ; save original EFLAGS
- 	xor     eax, 40000h     ; flip AC bit in EFLAGS
- 	push    eax             ; save new EFLAGS value on stack
- 	popfd                   ; replace current EFLAGS value
- 	pushfd                  ; get new EFLAGS
- 	pop     eax             ; store new EFLAGS in EAX
- 	xor     eax, ecx        ; can’t toggle AC bit, processor=80386
- 	jz      end_cpu_is_386  ; jump if 80386 processor
- 	push    ecx
- 	popfd                   ; restore AC bit in EFLAGS first
- 
- 	pushfd
- 	pushfd
- 	pop     ecx
- 			
- 	mov     eax, ecx        ; get original EFLAGS
- 	xor     eax, 200000h    ; flip ID bit in EFLAGS
- 	push    eax             ; save new EFLAGS value on stack
- 	popfd                   ; replace current EFLAGS value
- 	pushfd                  ; get new EFLAGS
- 	pop		eax	            ; store new EFLAGS in EAX
- 	popfd                   ; restore original EFLAGS
- 	xor		eax, ecx        ; can’t toggle ID bit,
- 	je		is_old_486		; processor=old
- 
- 	mov     eax,1
- 	db      0fh,0a2h        ;CPUID   
- 
- exitcpudetect:
- 	ret
- 
- end_cpu_is_386:
- 	mov     eax,0300h
- 	jmp     exitcpudetect
- 
- is_old_486:
- 	mov     eax,0400h
- 	jmp     exitcpudetect
- 
- IFDEF NOUNDERLINE
- cpudetect32     endp
- ELSE
- _cpudetect32    endp
- ENDIF
- 
- _TEXT   ends
- end
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/asm386/gvmat32c.c gcc-4.0.0/zlib/contrib/asm386/gvmat32c.c
*** gcc-3.4.3/zlib/contrib/asm386/gvmat32c.c	Mon Mar 11 21:49:26 2002
--- gcc-4.0.0/zlib/contrib/asm386/gvmat32c.c	Thu Jan  1 00:00:00 1970
***************
*** 1,200 ****
- /* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86
-  * Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
-  * File written by Gilles Vollant, by modifiying the longest_match
-  *  from Jean-loup Gailly in deflate.c
-  *  it prepare all parameters and call the assembly longest_match_gvasm
-  *  longest_match execute standard C code is wmask != 0x7fff
-  *     (assembly code is faster with a fixed wmask)
-  *
-  */
- 
- #include "deflate.h"
- 
- #undef FAR
- #include <windows.h>
- 
- #ifdef ASMV
- #define NIL 0
- 
- #define UNALIGNED_OK
- 
- 
- /* if your C compiler don't add underline before function name,
- 		define ADD_UNDERLINE_ASMFUNC */
- #ifdef ADD_UNDERLINE_ASMFUNC
- #define longest_match_7fff _longest_match_7fff
- #endif
- 
- 
- 
- void match_init()
- {
- }
- 
- unsigned long cpudetect32();
- 
- uInt longest_match_c(
-     deflate_state *s,
-     IPos cur_match);                             /* current match */
- 
- 
- uInt longest_match_7fff(
-     deflate_state *s,
-     IPos cur_match);                             /* current match */
- 
- uInt longest_match(
-     deflate_state *s,
-     IPos cur_match)                             /* current match */
- {
- 	static uInt iIsPPro=2;
- 
-     if ((s->w_mask == 0x7fff) && (iIsPPro==0))
-         return longest_match_7fff(s,cur_match);
- 
- 	if (iIsPPro==2)
- 		iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0;
- 
- 	return longest_match_c(s,cur_match);
- }
- 
- 
- 
- uInt longest_match_c(s, cur_match)
-     deflate_state *s;
-     IPos cur_match;                             /* current match */
- {
-     unsigned chain_length = s->max_chain_length;/* max hash chain length */
-     register Bytef *scan = s->window + s->strstart; /* current string */
-     register Bytef *match;                       /* matched string */
-     register int len;                           /* length of current match */
-     int best_len = s->prev_length;              /* best match length so far */
-     int nice_match = s->nice_match;             /* stop if match long enough */
-     IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
-         s->strstart - (IPos)MAX_DIST(s) : NIL;
-     /* Stop when cur_match becomes <= limit. To simplify the code,
-      * we prevent matches with the string of window index 0.
-      */
-     Posf *prev = s->prev;
-     uInt wmask = s->w_mask;
- 
- #ifdef UNALIGNED_OK
-     /* Compare two bytes at a time. Note: this is not always beneficial.
-      * Try with and without -DUNALIGNED_OK to check.
-      */
-     register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
-     register ush scan_start = *(ushf*)scan;
-     register ush scan_end   = *(ushf*)(scan+best_len-1);
- #else
-     register Bytef *strend = s->window + s->strstart + MAX_MATCH;
-     register Byte scan_end1  = scan[best_len-1];
-     register Byte scan_end   = scan[best_len];
- #endif
- 
-     /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
-      * It is easy to get rid of this optimization if necessary.
-      */
-     Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
- 
-     /* Do not waste too much time if we already have a good match: */
-     if (s->prev_length >= s->good_match) {
-         chain_length >>= 2;
-     }
-     /* Do not look for matches beyond the end of the input. This is necessary
-      * to make deflate deterministic.
-      */
-     if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
- 
-     Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
- 
-     do {
-         Assert(cur_match < s->strstart, "no future");
-         match = s->window + cur_match;
- 
-         /* Skip to next match if the match length cannot increase
-          * or if the match length is less than 2:
-          */
- #if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
-         /* This code assumes sizeof(unsigned short) == 2. Do not use
-          * UNALIGNED_OK if your compiler uses a different size.
-          */
-         if (*(ushf*)(match+best_len-1) != scan_end ||
-             *(ushf*)match != scan_start) continue;
- 
-         /* It is not necessary to compare scan[2] and match[2] since they are
-          * always equal when the other bytes match, given that the hash keys
-          * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
-          * strstart+3, +5, ... up to strstart+257. We check for insufficient
-          * lookahead only every 4th comparison; the 128th check will be made
-          * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
-          * necessary to put more guard bytes at the end of the window, or
-          * to check more often for insufficient lookahead.
-          */
-         Assert(scan[2] == match[2], "scan[2]?");
-         scan++, match++;
-         do {
-         } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                  scan < strend);
-         /* The funny "do {}" generates better code on most compilers */
- 
-         /* Here, scan <= window+strstart+257 */
-         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-         if (*scan == *match) scan++;
- 
-         len = (MAX_MATCH - 1) - (int)(strend-scan);
-         scan = strend - (MAX_MATCH-1);
- 
- #else /* UNALIGNED_OK */
- 
-         if (match[best_len]   != scan_end  ||
-             match[best_len-1] != scan_end1 ||
-             *match            != *scan     ||
-             *++match          != scan[1])      continue;
- 
-         /* The check at best_len-1 can be removed because it will be made
-          * again later. (This heuristic is not always a win.)
-          * It is not necessary to compare scan[2] and match[2] since they
-          * are always equal when the other bytes match, given that
-          * the hash keys are equal and that HASH_BITS >= 8.
-          */
-         scan += 2, match++;
-         Assert(*scan == *match, "match[2]?");
- 
-         /* We check for insufficient lookahead only every 8th comparison;
-          * the 256th check will be made at strstart+258.
-          */
-         do {
-         } while (*++scan == *++match && *++scan == *++match &&
-                  *++scan == *++match && *++scan == *++match &&
-                  *++scan == *++match && *++scan == *++match &&
-                  *++scan == *++match && *++scan == *++match &&
-                  scan < strend);
- 
-         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
- 
-         len = MAX_MATCH - (int)(strend - scan);
-         scan = strend - MAX_MATCH;
- 
- #endif /* UNALIGNED_OK */
- 
-         if (len > best_len) {
-             s->match_start = cur_match;
-             best_len = len;
-             if (len >= nice_match) break;
- #ifdef UNALIGNED_OK
-             scan_end = *(ushf*)(scan+best_len-1);
- #else
-             scan_end1  = scan[best_len-1];
-             scan_end   = scan[best_len];
- #endif
-         }
-     } while ((cur_match = prev[cur_match & wmask]) > limit
-              && --chain_length != 0);
- 
-     if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
-     return s->lookahead;
- }
- 
- #endif /* ASMV */
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/asm386/mkgvmt32.bat gcc-4.0.0/zlib/contrib/asm386/mkgvmt32.bat
*** gcc-3.4.3/zlib/contrib/asm386/mkgvmt32.bat	Mon Mar 11 21:49:26 2002
--- gcc-4.0.0/zlib/contrib/asm386/mkgvmt32.bat	Thu Jan  1 00:00:00 1970
***************
*** 1 ****
- c:\masm611\bin\ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/asm386/zlibvc.def gcc-4.0.0/zlib/contrib/asm386/zlibvc.def
*** gcc-3.4.3/zlib/contrib/asm386/zlibvc.def	Mon Mar 11 21:49:26 2002
--- gcc-4.0.0/zlib/contrib/asm386/zlibvc.def	Thu Jan  1 00:00:00 1970
***************
*** 1,74 ****
- LIBRARY		"zlib"
- 
- DESCRIPTION	'"""zlib data compression library"""'
- 
- 
- VERSION		1.11
- 
- 
- HEAPSIZE	1048576,8192
- 
- EXPORTS
-     adler32                        @1
-     compress                       @2
-     crc32                          @3
-     deflate                        @4
-     deflateCopy                    @5
-     deflateEnd                     @6
-     deflateInit2_                  @7
-     deflateInit_                   @8
-     deflateParams                  @9
-     deflateReset                   @10
-     deflateSetDictionary           @11
-     gzclose                        @12
-     gzdopen                        @13
-     gzerror                        @14
-     gzflush                        @15
-     gzopen                         @16
-     gzread                         @17
-     gzwrite                        @18
-     inflate                        @19
-     inflateEnd                     @20
-     inflateInit2_                  @21
-     inflateInit_                   @22
-     inflateReset                   @23
-     inflateSetDictionary           @24
-     inflateSync                    @25
-     uncompress                     @26
-     zlibVersion                    @27
-     gzprintf                       @28
-     gzputc                         @29
-     gzgetc                         @30
-     gzseek                         @31
-     gzrewind                       @32
-     gztell                         @33
-     gzeof                          @34
-     gzsetparams                    @35
-     zError                         @36
-     inflateSyncPoint               @37
-     get_crc_table                  @38
-     compress2                      @39
-     gzputs                         @40
-     gzgets                         @41
- 
- 	unzOpen                       @61
- 	unzClose                      @62
- 	unzGetGlobalInfo              @63
- 	unzGetCurrentFileInfo         @64
- 	unzGoToFirstFile              @65
- 	unzGoToNextFile               @66
- 	unzOpenCurrentFile            @67
- 	unzReadCurrentFile            @68
- 	unztell                       @70
- 	unzeof                        @71
- 	unzCloseCurrentFile           @72
- 	unzGetGlobalComment           @73
- 	unzStringFileNameCompare      @74
- 	unzLocateFile                 @75
- 	unzGetLocalExtrafield         @76
- 
- 	zipOpen                       @80
- 	zipOpenNewFileInZip           @81
- 	zipWriteInFileInZip           @82
- 	zipCloseFileInZip             @83
- 	zipClose                      @84
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/asm386/zlibvc.dsp gcc-4.0.0/zlib/contrib/asm386/zlibvc.dsp
*** gcc-3.4.3/zlib/contrib/asm386/zlibvc.dsp	Mon Mar 11 21:49:26 2002
--- gcc-4.0.0/zlib/contrib/asm386/zlibvc.dsp	Thu Jan  1 00:00:00 1970
***************
*** 1,651 ****
- # Microsoft Developer Studio Project File - Name="zlibvc" - Package Owner=<4>
- # Microsoft Developer Studio Generated Build File, Format Version 5.00
- # ** DO NOT EDIT **
- 
- # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
- # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602
- 
- CFG=zlibvc - Win32 Release
- !MESSAGE This is not a valid makefile. To build this project using NMAKE,
- !MESSAGE use the Export Makefile command and run
- !MESSAGE 
- !MESSAGE NMAKE /f "zlibvc.mak".
- !MESSAGE 
- !MESSAGE You can specify a configuration when running NMAKE
- !MESSAGE by defining the macro CFG on the command line. For example:
- !MESSAGE 
- !MESSAGE NMAKE /f "zlibvc.mak" CFG="zlibvc - Win32 Release"
- !MESSAGE 
- !MESSAGE Possible choices for configuration are:
- !MESSAGE 
- !MESSAGE "zlibvc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
- !MESSAGE "zlibvc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
- !MESSAGE "zlibvc - Win32 ReleaseAxp" (based on\
-  "Win32 (ALPHA) Dynamic-Link Library")
- !MESSAGE "zlibvc - Win32 ReleaseWithoutAsm" (based on\
-  "Win32 (x86) Dynamic-Link Library")
- !MESSAGE "zlibvc - Win32 ReleaseWithoutCrtdll" (based on\
-  "Win32 (x86) Dynamic-Link Library")
- !MESSAGE 
- 
- # Begin Project
- # PROP Scc_ProjName ""
- # PROP Scc_LocalPath ""
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 0
- # PROP BASE Output_Dir ".\Release"
- # PROP BASE Intermediate_Dir ".\Release"
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 0
- # PROP Output_Dir ".\Release"
- # PROP Intermediate_Dir ".\Release"
- # PROP Ignore_Export_Lib 0
- # PROP Target_Dir ""
- CPP=cl.exe
- # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
- # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /D "ASMV" /FAcs /FR /FD /c
- # SUBTRACT CPP /YX
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "NDEBUG" /win32
- # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "NDEBUG"
- # ADD RSC /l 0x40c /d "NDEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
- # ADD LINK32 gvmat32.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\Release\zlib.dll"
- # SUBTRACT LINK32 /pdb:none
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 1
- # PROP BASE Output_Dir ".\Debug"
- # PROP BASE Intermediate_Dir ".\Debug"
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 1
- # PROP Output_Dir ".\Debug"
- # PROP Intermediate_Dir ".\Debug"
- # PROP Target_Dir ""
- CPP=cl.exe
- # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
- # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /FD /c
- # SUBTRACT CPP /YX
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "_DEBUG" /win32
- # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "_DEBUG"
- # ADD RSC /l 0x40c /d "_DEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
- # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:".\Debug\zlib.dll"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 0
- # PROP BASE Output_Dir "zlibvc__"
- # PROP BASE Intermediate_Dir "zlibvc__"
- # PROP BASE Ignore_Export_Lib 0
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 0
- # PROP Output_Dir "zlibvc__"
- # PROP Intermediate_Dir "zlibvc__"
- # PROP Ignore_Export_Lib 0
- # PROP Target_Dir ""
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- CPP=cl.exe
- # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /YX /FD /c
- # ADD CPP /nologo /MT /Gt0 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /FD /c
- # SUBTRACT CPP /YX
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "NDEBUG"
- # ADD RSC /l 0x40c /d "NDEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 crtdll.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /map /machine:ALPHA /nodefaultlib /out:".\Release\zlib.dll"
- # SUBTRACT BASE LINK32 /pdb:none
- # ADD LINK32 crtdll.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /map /machine:ALPHA /nodefaultlib /out:"zlibvc__\zlib.dll"
- # SUBTRACT LINK32 /pdb:none
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 0
- # PROP BASE Output_Dir "zlibvc_0"
- # PROP BASE Intermediate_Dir "zlibvc_0"
- # PROP BASE Ignore_Export_Lib 0
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 0
- # PROP Output_Dir "zlibvc_0"
- # PROP Intermediate_Dir "zlibvc_0"
- # PROP Ignore_Export_Lib 0
- # PROP Target_Dir ""
- CPP=cl.exe
- # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /YX /FD /c
- # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /FD /c
- # SUBTRACT CPP /YX
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "NDEBUG"
- # ADD RSC /l 0x40c /d "NDEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\Release\zlib.dll"
- # SUBTRACT BASE LINK32 /pdb:none
- # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\zlibvc_0\zlib.dll"
- # SUBTRACT LINK32 /pdb:none
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 0
- # PROP BASE Output_Dir "zlibvc_1"
- # PROP BASE Intermediate_Dir "zlibvc_1"
- # PROP BASE Ignore_Export_Lib 0
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 0
- # PROP Output_Dir "zlibvc_1"
- # PROP Intermediate_Dir "zlibvc_1"
- # PROP Ignore_Export_Lib 0
- # PROP Target_Dir ""
- CPP=cl.exe
- # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /D "ASMV" /FAcs /FR /YX /FD /c
- # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /D "ASMV" /FAcs /FR /FD /c
- # SUBTRACT CPP /YX
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "NDEBUG"
- # ADD RSC /l 0x40c /d "NDEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 gvmat32.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\Release\zlib.dll"
- # SUBTRACT BASE LINK32 /pdb:none
- # ADD LINK32 gvmat32.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\zlibvc_1\zlib.dll"
- # SUBTRACT LINK32 /pdb:none
- 
- !ENDIF 
- 
- # Begin Target
- 
- # Name "zlibvc - Win32 Release"
- # Name "zlibvc - Win32 Debug"
- # Name "zlibvc - Win32 ReleaseAxp"
- # Name "zlibvc - Win32 ReleaseWithoutAsm"
- # Name "zlibvc - Win32 ReleaseWithoutCrtdll"
- # Begin Group "Source Files"
- 
- # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
- # Begin Source File
- 
- SOURCE=.\adler32.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_ADLER=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\compress.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_COMPR=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\crc32.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_CRC32=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\deflate.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_DEFLA=\
- 	".\deflate.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\gvmat32c.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\gzio.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_GZIO_=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infblock.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFBL=\
- 	".\infblock.h"\
- 	".\infcodes.h"\
- 	".\inftrees.h"\
- 	".\infutil.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infcodes.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFCO=\
- 	".\infblock.h"\
- 	".\infcodes.h"\
- 	".\inffast.h"\
- 	".\inftrees.h"\
- 	".\infutil.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inffast.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFFA=\
- 	".\infblock.h"\
- 	".\infcodes.h"\
- 	".\inffast.h"\
- 	".\inftrees.h"\
- 	".\infutil.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inflate.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFLA=\
- 	".\infblock.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inftrees.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFTR=\
- 	".\inftrees.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infutil.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFUT=\
- 	".\infblock.h"\
- 	".\infcodes.h"\
- 	".\inftrees.h"\
- 	".\infutil.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\trees.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_TREES=\
- 	".\deflate.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\uncompr.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_UNCOM=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\unzip.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zip.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zlib.rc
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zlibvc.def
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zutil.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_ZUTIL=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # End Group
- # Begin Group "Header Files"
- 
- # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
- # Begin Source File
- 
- SOURCE=.\deflate.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infblock.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infcodes.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inffast.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inftrees.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infutil.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zconf.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zlib.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zutil.h
- # End Source File
- # End Group
- # Begin Group "Resource Files"
- 
- # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
- # End Group
- # End Target
- # End Project
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/asm386/zlibvc.dsw gcc-4.0.0/zlib/contrib/asm386/zlibvc.dsw
*** gcc-3.4.3/zlib/contrib/asm386/zlibvc.dsw	Mon Mar 11 21:49:26 2002
--- gcc-4.0.0/zlib/contrib/asm386/zlibvc.dsw	Thu Jan  1 00:00:00 1970
***************
*** 1,41 ****
- Microsoft Developer Studio Workspace File, Format Version 5.00
- # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
- 
- ###############################################################################
- 
- Project: "zlibstat"=.\zlibstat.dsp - Package Owner=<4>
- 
- Package=<5>
- {{{
- }}}
- 
- Package=<4>
- {{{
- }}}
- 
- ###############################################################################
- 
- Project: "zlibvc"=.\zlibvc.dsp - Package Owner=<4>
- 
- Package=<5>
- {{{
- }}}
- 
- Package=<4>
- {{{
- }}}
- 
- ###############################################################################
- 
- Global:
- 
- Package=<5>
- {{{
- }}}
- 
- Package=<3>
- {{{
- }}}
- 
- ###############################################################################
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/blast/Makefile gcc-4.0.0/zlib/contrib/blast/Makefile
*** gcc-3.4.3/zlib/contrib/blast/Makefile	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/blast/Makefile	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,8 ----
+ blast: blast.c blast.h
+ 	cc -DTEST -o blast blast.c
+ 
+ test: blast
+ 	blast < test.pk | cmp - test.txt
+ 
+ clean:
+ 	rm -f blast blast.o
diff -Nrcpad gcc-3.4.3/zlib/contrib/blast/README gcc-4.0.0/zlib/contrib/blast/README
*** gcc-3.4.3/zlib/contrib/blast/README	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/blast/README	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,4 ----
+ Read blast.h for purpose and usage.
+ 
+ Mark Adler
+ madler@alumni.caltech.edu
diff -Nrcpad gcc-3.4.3/zlib/contrib/blast/blast.c gcc-4.0.0/zlib/contrib/blast/blast.c
*** gcc-3.4.3/zlib/contrib/blast/blast.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/blast/blast.c	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,444 ----
+ /* blast.c
+  * Copyright (C) 2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in blast.h
+  * version 1.1, 16 Feb 2003
+  *
+  * blast.c decompresses data compressed by the PKWare Compression Library.
+  * This function provides functionality similar to the explode() function of
+  * the PKWare library, hence the name "blast".
+  *
+  * This decompressor is based on the excellent format description provided by
+  * Ben Rudiak-Gould in comp.compression on August 13, 2001.  Interestingly, the
+  * example Ben provided in the post is incorrect.  The distance 110001 should
+  * instead be 111000.  When corrected, the example byte stream becomes:
+  *
+  *    00 04 82 24 25 8f 80 7f
+  *
+  * which decompresses to "AIAIAIAIAIAIA" (without the quotes).
+  */
+ 
+ /*
+  * Change history:
+  *
+  * 1.0  12 Feb 2003     - First version
+  * 1.1  16 Feb 2003     - Fixed distance check for > 4 GB uncompressed data
+  */
+ 
+ #include <setjmp.h>             /* for setjmp(), longjmp(), and jmp_buf */
+ #include "blast.h"              /* prototype for blast() */
+ 
+ #define local static            /* for local function definitions */
+ #define MAXBITS 13              /* maximum code length */
+ #define MAXWIN 4096             /* maximum window size */
+ 
+ /* input and output state */
+ struct state {
+     /* input state */
+     blast_in infun;             /* input function provided by user */
+     void *inhow;                /* opaque information passed to infun() */
+     unsigned char *in;          /* next input location */
+     unsigned left;              /* available input at in */
+     int bitbuf;                 /* bit buffer */
+     int bitcnt;                 /* number of bits in bit buffer */
+ 
+     /* input limit error return state for bits() and decode() */
+     jmp_buf env;
+ 
+     /* output state */
+     blast_out outfun;           /* output function provided by user */
+     void *outhow;               /* opaque information passed to outfun() */
+     unsigned next;              /* index of next write location in out[] */
+     int first;                  /* true to check distances (for first 4K) */
+     unsigned char out[MAXWIN];  /* output buffer and sliding window */
+ };
+ 
+ /*
+  * Return need bits from the input stream.  This always leaves less than
+  * eight bits in the buffer.  bits() works properly for need == 0.
+  *
+  * Format notes:
+  *
+  * - Bits are stored in bytes from the least significant bit to the most
+  *   significant bit.  Therefore bits are dropped from the bottom of the bit
+  *   buffer, using shift right, and new bytes are appended to the top of the
+  *   bit buffer, using shift left.
+  */
+ local int bits(struct state *s, int need)
+ {
+     int val;            /* bit accumulator */
+ 
+     /* load at least need bits into val */
+     val = s->bitbuf;
+     while (s->bitcnt < need) {
+         if (s->left == 0) {
+             s->left = s->infun(s->inhow, &(s->in));
+             if (s->left == 0) longjmp(s->env, 1);       /* out of input */
+         }
+         val |= (int)(*(s->in)++) << s->bitcnt;          /* load eight bits */
+         s->left--;
+         s->bitcnt += 8;
+     }
+ 
+     /* drop need bits and update buffer, always zero to seven bits left */
+     s->bitbuf = val >> need;
+     s->bitcnt -= need;
+ 
+     /* return need bits, zeroing the bits above that */
+     return val & ((1 << need) - 1);
+ }
+ 
+ /*
+  * Huffman code decoding tables.  count[1..MAXBITS] is the number of symbols of
+  * each length, which for a canonical code are stepped through in order.
+  * symbol[] are the symbol values in canonical order, where the number of
+  * entries is the sum of the counts in count[].  The decoding process can be
+  * seen in the function decode() below.
+  */
+ struct huffman {
+     short *count;       /* number of symbols of each length */
+     short *symbol;      /* canonically ordered symbols */
+ };
+ 
+ /*
+  * Decode a code from the stream s using huffman table h.  Return the symbol or
+  * a negative value if there is an error.  If all of the lengths are zero, i.e.
+  * an empty code, or if the code is incomplete and an invalid code is received,
+  * then -9 is returned after reading MAXBITS bits.
+  *
+  * Format notes:
+  *
+  * - The codes as stored in the compressed data are bit-reversed relative to
+  *   a simple integer ordering of codes of the same lengths.  Hence below the
+  *   bits are pulled from the compressed data one at a time and used to
+  *   build the code value reversed from what is in the stream in order to
+  *   permit simple integer comparisons for decoding.
+  *
+  * - The first code for the shortest length is all ones.  Subsequent codes of
+  *   the same length are simply integer decrements of the previous code.  When
+  *   moving up a length, a one bit is appended to the code.  For a complete
+  *   code, the last code of the longest length will be all zeros.  To support
+  *   this ordering, the bits pulled during decoding are inverted to apply the
+  *   more "natural" ordering starting with all zeros and incrementing.
+  */
+ local int decode(struct state *s, struct huffman *h)
+ {
+     int len;            /* current number of bits in code */
+     int code;           /* len bits being decoded */
+     int first;          /* first code of length len */
+     int count;          /* number of codes of length len */
+     int index;          /* index of first code of length len in symbol table */
+     int bitbuf;         /* bits from stream */
+     int left;           /* bits left in next or left to process */
+     short *next;        /* next number of codes */
+ 
+     bitbuf = s->bitbuf;
+     left = s->bitcnt;
+     code = first = index = 0;
+     len = 1;
+     next = h->count + 1;
+     while (1) {
+         while (left--) {
+             code |= (bitbuf & 1) ^ 1;   /* invert code */
+             bitbuf >>= 1;
+             count = *next++;
+             if (code < first + count) { /* if length len, return symbol */
+                 s->bitbuf = bitbuf;
+                 s->bitcnt = (s->bitcnt - len) & 7;
+                 return h->symbol[index + (code - first)];
+             }
+             index += count;             /* else update for next length */
+             first += count;
+             first <<= 1;
+             code <<= 1;
+             len++;
+         }
+         left = (MAXBITS+1) - len;
+         if (left == 0) break;
+         if (s->left == 0) {
+             s->left = s->infun(s->inhow, &(s->in));
+             if (s->left == 0) longjmp(s->env, 1);       /* out of input */
+         }
+         bitbuf = *(s->in)++;
+         s->left--;
+         if (left > 8) left = 8;
+     }
+     return -9;                          /* ran out of codes */
+ }
+ 
+ /*
+  * Given a list of repeated code lengths rep[0..n-1], where each byte is a
+  * count (high four bits + 1) and a code length (low four bits), generate the
+  * list of code lengths.  This compaction reduces the size of the object code.
+  * Then given the list of code lengths length[0..n-1] representing a canonical
+  * Huffman code for n symbols, construct the tables required to decode those
+  * codes.  Those tables are the number of codes of each length, and the symbols
+  * sorted by length, retaining their original order within each length.  The
+  * return value is zero for a complete code set, negative for an over-
+  * subscribed code set, and positive for an incomplete code set.  The tables
+  * can be used if the return value is zero or positive, but they cannot be used
+  * if the return value is negative.  If the return value is zero, it is not
+  * possible for decode() using that table to return an error--any stream of
+  * enough bits will resolve to a symbol.  If the return value is positive, then
+  * it is possible for decode() using that table to return an error for received
+  * codes past the end of the incomplete lengths.
+  */
+ local int construct(struct huffman *h, const unsigned char *rep, int n)
+ {
+     int symbol;         /* current symbol when stepping through length[] */
+     int len;            /* current length when stepping through h->count[] */
+     int left;           /* number of possible codes left of current length */
+     short offs[MAXBITS+1];      /* offsets in symbol table for each length */
+     short length[256];  /* code lengths */
+ 
+     /* convert compact repeat counts into symbol bit length list */
+     symbol = 0;
+     do {
+         len = *rep++;
+         left = (len >> 4) + 1;
+         len &= 15;
+         do {
+             length[symbol++] = len;
+         } while (--left);
+     } while (--n);
+     n = symbol;
+ 
+     /* count number of codes of each length */
+     for (len = 0; len <= MAXBITS; len++)
+         h->count[len] = 0;
+     for (symbol = 0; symbol < n; symbol++)
+         (h->count[length[symbol]])++;   /* assumes lengths are within bounds */
+     if (h->count[0] == n)               /* no codes! */
+         return 0;                       /* complete, but decode() will fail */
+ 
+     /* check for an over-subscribed or incomplete set of lengths */
+     left = 1;                           /* one possible code of zero length */
+     for (len = 1; len <= MAXBITS; len++) {
+         left <<= 1;                     /* one more bit, double codes left */
+         left -= h->count[len];          /* deduct count from possible codes */
+         if (left < 0) return left;      /* over-subscribed--return negative */
+     }                                   /* left > 0 means incomplete */
+ 
+     /* generate offsets into symbol table for each length for sorting */
+     offs[1] = 0;
+     for (len = 1; len < MAXBITS; len++)
+         offs[len + 1] = offs[len] + h->count[len];
+ 
+     /*
+      * put symbols in table sorted by length, by symbol order within each
+      * length
+      */
+     for (symbol = 0; symbol < n; symbol++)
+         if (length[symbol] != 0)
+             h->symbol[offs[length[symbol]]++] = symbol;
+ 
+     /* return zero for complete set, positive for incomplete set */
+     return left;
+ }
+ 
+ /*
+  * Decode PKWare Compression Library stream.
+  *
+  * Format notes:
+  *
+  * - First byte is 0 if literals are uncoded or 1 if they are coded.  Second
+  *   byte is 4, 5, or 6 for the number of extra bits in the distance code.
+  *   This is the base-2 logarithm of the dictionary size minus six.
+  *
+  * - Compressed data is a combination of literals and length/distance pairs
+  *   terminated by an end code.  Literals are either Huffman coded or
+  *   uncoded bytes.  A length/distance pair is a coded length followed by a
+  *   coded distance to represent a string that occurs earlier in the
+  *   uncompressed data that occurs again at the current location.
+  *
+  * - A bit preceding a literal or length/distance pair indicates which comes
+  *   next, 0 for literals, 1 for length/distance.
+  *
+  * - If literals are uncoded, then the next eight bits are the literal, in the
+  *   normal bit order in th stream, i.e. no bit-reversal is needed. Similarly,
+  *   no bit reversal is needed for either the length extra bits or the distance
+  *   extra bits.
+  *
+  * - Literal bytes are simply written to the output.  A length/distance pair is
+  *   an instruction to copy previously uncompressed bytes to the output.  The
+  *   copy is from distance bytes back in the output stream, copying for length
+  *   bytes.
+  *
+  * - Distances pointing before the beginning of the output data are not
+  *   permitted.
+  *
+  * - Overlapped copies, where the length is greater than the distance, are
+  *   allowed and common.  For example, a distance of one and a length of 518
+  *   simply copies the last byte 518 times.  A distance of four and a length of
+  *   twelve copies the last four bytes three times.  A simple forward copy
+  *   ignoring whether the length is greater than the distance or not implements
+  *   this correctly.
+  */
+ local int decomp(struct state *s)
+ {
+     int lit;            /* true if literals are coded */
+     int dict;           /* log2(dictionary size) - 6 */
+     int symbol;         /* decoded symbol, extra bits for distance */
+     int len;            /* length for copy */
+     int dist;           /* distance for copy */
+     int copy;           /* copy counter */
+     unsigned char *from, *to;   /* copy pointers */
+     static int virgin = 1;                              /* build tables once */
+     static short litcnt[MAXBITS+1], litsym[256];        /* litcode memory */
+     static short lencnt[MAXBITS+1], lensym[16];         /* lencode memory */
+     static short distcnt[MAXBITS+1], distsym[64];       /* distcode memory */
+     static struct huffman litcode = {litcnt, litsym};   /* length code */
+     static struct huffman lencode = {lencnt, lensym};   /* length code */
+     static struct huffman distcode = {distcnt, distsym};/* distance code */
+         /* bit lengths of literal codes */
+     static const unsigned char litlen[] = {
+         11, 124, 8, 7, 28, 7, 188, 13, 76, 4, 10, 8, 12, 10, 12, 10, 8, 23, 8,
+         9, 7, 6, 7, 8, 7, 6, 55, 8, 23, 24, 12, 11, 7, 9, 11, 12, 6, 7, 22, 5,
+         7, 24, 6, 11, 9, 6, 7, 22, 7, 11, 38, 7, 9, 8, 25, 11, 8, 11, 9, 12,
+         8, 12, 5, 38, 5, 38, 5, 11, 7, 5, 6, 21, 6, 10, 53, 8, 7, 24, 10, 27,
+         44, 253, 253, 253, 252, 252, 252, 13, 12, 45, 12, 45, 12, 61, 12, 45,
+         44, 173};
+         /* bit lengths of length codes 0..15 */
+     static const unsigned char lenlen[] = {2, 35, 36, 53, 38, 23};
+         /* bit lengths of distance codes 0..63 */
+     static const unsigned char distlen[] = {2, 20, 53, 230, 247, 151, 248};
+     static const short base[16] = {     /* base for length codes */
+         3, 2, 4, 5, 6, 7, 8, 9, 10, 12, 16, 24, 40, 72, 136, 264};
+     static const char extra[16] = {     /* extra bits for length codes */
+         0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8};
+ 
+     /* set up decoding tables (once--might not be thread-safe) */
+     if (virgin) {
+         construct(&litcode, litlen, sizeof(litlen));
+         construct(&lencode, lenlen, sizeof(lenlen));
+         construct(&distcode, distlen, sizeof(distlen));
+         virgin = 0;
+     }
+ 
+     /* read header */
+     lit = bits(s, 8);
+     if (lit > 1) return -1;
+     dict = bits(s, 8);
+     if (dict < 4 || dict > 6) return -2;
+ 
+     /* decode literals and length/distance pairs */
+     do {
+         if (bits(s, 1)) {
+             /* get length */
+             symbol = decode(s, &lencode);
+             len = base[symbol] + bits(s, extra[symbol]);
+             if (len == 519) break;              /* end code */
+ 
+             /* get distance */
+             symbol = len == 2 ? 2 : dict;
+             dist = decode(s, &distcode) << symbol;
+             dist += bits(s, symbol);
+             dist++;
+             if (s->first && dist > s->next)
+                 return -3;              /* distance too far back */
+ 
+             /* copy length bytes from distance bytes back */
+             do {
+                 to = s->out + s->next;
+                 from = to - dist;
+                 copy = MAXWIN;
+                 if (s->next < dist) {
+                     from += copy;
+                     copy = dist;
+                 }
+                 copy -= s->next;
+                 if (copy > len) copy = len;
+                 len -= copy;
+                 s->next += copy;
+                 do {
+                     *to++ = *from++;
+                 } while (--copy);
+                 if (s->next == MAXWIN) {
+                     if (s->outfun(s->outhow, s->out, s->next)) return 1;
+                     s->next = 0;
+                     s->first = 0;
+                 }
+             } while (len != 0);
+         }
+         else {
+             /* get literal and write it */
+             symbol = lit ? decode(s, &litcode) : bits(s, 8);
+             s->out[s->next++] = symbol;
+             if (s->next == MAXWIN) {
+                 if (s->outfun(s->outhow, s->out, s->next)) return 1;
+                 s->next = 0;
+                 s->first = 0;
+             }
+         }
+     } while (1);
+     return 0;
+ }
+ 
+ /* See comments in blast.h */
+ int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow)
+ {
+     struct state s;             /* input/output state */
+     int err;                    /* return value */
+ 
+     /* initialize input state */
+     s.infun = infun;
+     s.inhow = inhow;
+     s.left = 0;
+     s.bitbuf = 0;
+     s.bitcnt = 0;
+ 
+     /* initialize output state */
+     s.outfun = outfun;
+     s.outhow = outhow;
+     s.next = 0;
+     s.first = 1;
+ 
+     /* return if bits() or decode() tries to read past available input */
+     if (setjmp(s.env) != 0)             /* if came back here via longjmp(), */
+         err = 2;                        /*  then skip decomp(), return error */
+     else
+         err = decomp(&s);               /* decompress */
+ 
+     /* write any leftover output and update the error code if needed */
+     if (err != 1 && s.next && s.outfun(s.outhow, s.out, s.next) && err == 0)
+         err = 1;
+     return err;
+ }
+ 
+ #ifdef TEST
+ /* Example of how to use blast() */
+ #include <stdio.h>
+ #include <stdlib.h>
+ 
+ #define CHUNK 16384
+ 
+ local unsigned inf(void *how, unsigned char **buf)
+ {
+     static unsigned char hold[CHUNK];
+ 
+     *buf = hold;
+     return fread(hold, 1, CHUNK, (FILE *)how);
+ }
+ 
+ local int outf(void *how, unsigned char *buf, unsigned len)
+ {
+     return fwrite(buf, 1, len, (FILE *)how) != len;
+ }
+ 
+ /* Decompress a PKWare Compression Library stream from stdin to stdout */
+ int main(void)
+ {
+     int ret, n;
+ 
+     /* decompress to stdout */
+     ret = blast(inf, stdin, outf, stdout);
+     if (ret != 0) fprintf(stderr, "blast error: %d\n", ret);
+ 
+     /* see if there are any leftover bytes */
+     n = 0;
+     while (getchar() != EOF) n++;
+     if (n) fprintf(stderr, "blast warning: %d unused bytes of input\n", n);
+ 
+     /* return blast() error code */
+     return ret;
+ }
+ #endif
diff -Nrcpad gcc-3.4.3/zlib/contrib/blast/blast.h gcc-4.0.0/zlib/contrib/blast/blast.h
*** gcc-3.4.3/zlib/contrib/blast/blast.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/blast/blast.h	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,71 ----
+ /* blast.h -- interface for blast.c
+   Copyright (C) 2003 Mark Adler
+   version 1.1, 16 Feb 2003
+ 
+   This software is provided 'as-is', without any express or implied
+   warranty.  In no event will the author be held liable for any damages
+   arising from the use of this software.
+ 
+   Permission is granted to anyone to use this software for any purpose,
+   including commercial applications, and to alter it and redistribute it
+   freely, subject to the following restrictions:
+ 
+   1. The origin of this software must not be misrepresented; you must not
+      claim that you wrote the original software. If you use this software
+      in a product, an acknowledgment in the product documentation would be
+      appreciated but is not required.
+   2. Altered source versions must be plainly marked as such, and must not be
+      misrepresented as being the original software.
+   3. This notice may not be removed or altered from any source distribution.
+ 
+   Mark Adler    madler@alumni.caltech.edu
+  */
+ 
+ 
+ /*
+  * blast() decompresses the PKWare Data Compression Library (DCL) compressed
+  * format.  It provides the same functionality as the explode() function in
+  * that library.  (Note: PKWare overused the "implode" verb, and the format
+  * used by their library implode() function is completely different and
+  * incompatible with the implode compression method supported by PKZIP.)
+  */
+ 
+ 
+ typedef unsigned (*blast_in)(void *how, unsigned char **buf);
+ typedef int (*blast_out)(void *how, unsigned char *buf, unsigned len);
+ /* Definitions for input/output functions passed to blast().  See below for
+  * what the provided functions need to do.
+  */
+ 
+ 
+ int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow);
+ /* Decompress input to output using the provided infun() and outfun() calls.
+  * On success, the return value of blast() is zero.  If there is an error in
+  * the source data, i.e. it is not in the proper format, then a negative value
+  * is returned.  If there is not enough input available or there is not enough
+  * output space, then a positive error is returned.
+  *
+  * The input function is invoked: len = infun(how, &buf), where buf is set by
+  * infun() to point to the input buffer, and infun() returns the number of
+  * available bytes there.  If infun() returns zero, then blast() returns with
+  * an input error.  (blast() only asks for input if it needs it.)  inhow is for
+  * use by the application to pass an input descriptor to infun(), if desired.
+  *
+  * The output function is invoked: err = outfun(how, buf, len), where the bytes
+  * to be written are buf[0..len-1].  If err is not zero, then blast() returns
+  * with an output error.  outfun() is always called with len <= 4096.  outhow
+  * is for use by the application to pass an output descriptor to outfun(), if
+  * desired.
+  *
+  * The return codes are:
+  *
+  *   2:  ran out of input before completing decompression
+  *   1:  output error before completing decompression
+  *   0:  successful decompression
+  *  -1:  literal flag not zero or one
+  *  -2:  dictionary size not in 4..6
+  *  -3:  distance is too far back
+  *
+  * At the bottom of blast.c is an example program that uses blast() that can be
+  * compiled to produce a command-line decompression filter by defining TEST.
+  */
diff -Nrcpad gcc-3.4.3/zlib/contrib/blast/test.pk gcc-4.0.0/zlib/contrib/blast/test.pk
*** gcc-3.4.3/zlib/contrib/blast/test.pk	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/blast/test.pk	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1 ----
+ ‚$%�€
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/zlib/contrib/blast/test.txt gcc-4.0.0/zlib/contrib/blast/test.txt
*** gcc-3.4.3/zlib/contrib/blast/test.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/blast/test.txt	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1 ----
+ AIAIAIAIAIAIA
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi/ZLib.pas gcc-4.0.0/zlib/contrib/delphi/ZLib.pas
*** gcc-3.4.3/zlib/contrib/delphi/ZLib.pas	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/delphi/ZLib.pas	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,557 ----
+ {*******************************************************}
+ {                                                       }
+ {       Borland Delphi Supplemental Components          }
+ {       ZLIB Data Compression Interface Unit            }
+ {                                                       }
+ {       Copyright (c) 1997,99 Borland Corporation       }
+ {                                                       }
+ {*******************************************************}
+ 
+ { Updated for zlib 1.2.x by Cosmin Truta <cosmint@cs.ubbcluj.ro> }
+ 
+ unit ZLib;
+ 
+ interface
+ 
+ uses SysUtils, Classes;
+ 
+ type
+   TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; cdecl;
+   TFree = procedure (AppData, Block: Pointer); cdecl;
+ 
+   // Internal structure.  Ignore.
+   TZStreamRec = packed record
+     next_in: PChar;       // next input byte
+     avail_in: Integer;    // number of bytes available at next_in
+     total_in: Longint;    // total nb of input bytes read so far
+ 
+     next_out: PChar;      // next output byte should be put here
+     avail_out: Integer;   // remaining free space at next_out
+     total_out: Longint;   // total nb of bytes output so far
+ 
+     msg: PChar;           // last error message, NULL if no error
+     internal: Pointer;    // not visible by applications
+ 
+     zalloc: TAlloc;       // used to allocate the internal state
+     zfree: TFree;         // used to free the internal state
+     AppData: Pointer;     // private data object passed to zalloc and zfree
+ 
+     data_type: Integer;   // best guess about the data type: ascii or binary
+     adler: Longint;       // adler32 value of the uncompressed data
+     reserved: Longint;    // reserved for future use
+   end;
+ 
+   // Abstract ancestor class
+   TCustomZlibStream = class(TStream)
+   private
+     FStrm: TStream;
+     FStrmPos: Integer;
+     FOnProgress: TNotifyEvent;
+     FZRec: TZStreamRec;
+     FBuffer: array [Word] of Char;
+   protected
+     procedure Progress(Sender: TObject); dynamic;
+     property OnProgress: TNotifyEvent read FOnProgress write FOnProgress;
+     constructor Create(Strm: TStream);
+   end;
+ 
+ { TCompressionStream compresses data on the fly as data is written to it, and
+   stores the compressed data to another stream.
+ 
+   TCompressionStream is write-only and strictly sequential. Reading from the
+   stream will raise an exception. Using Seek to move the stream pointer
+   will raise an exception.
+ 
+   Output data is cached internally, written to the output stream only when
+   the internal output buffer is full.  All pending output data is flushed
+   when the stream is destroyed.
+ 
+   The Position property returns the number of uncompressed bytes of
+   data that have been written to the stream so far.
+ 
+   CompressionRate returns the on-the-fly percentage by which the original
+   data has been compressed:  (1 - (CompressedBytes / UncompressedBytes)) * 100
+   If raw data size = 100 and compressed data size = 25, the CompressionRate
+   is 75%
+ 
+   The OnProgress event is called each time the output buffer is filled and
+   written to the output stream.  This is useful for updating a progress
+   indicator when you are writing a large chunk of data to the compression
+   stream in a single call.}
+ 
+ 
+   TCompressionLevel = (clNone, clFastest, clDefault, clMax);
+ 
+   TCompressionStream = class(TCustomZlibStream)
+   private
+     function GetCompressionRate: Single;
+   public
+     constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream);
+     destructor Destroy; override;
+     function Read(var Buffer; Count: Longint): Longint; override;
+     function Write(const Buffer; Count: Longint): Longint; override;
+     function Seek(Offset: Longint; Origin: Word): Longint; override;
+     property CompressionRate: Single read GetCompressionRate;
+     property OnProgress;
+   end;
+ 
+ { TDecompressionStream decompresses data on the fly as data is read from it.
+ 
+   Compressed data comes from a separate source stream.  TDecompressionStream
+   is read-only and unidirectional; you can seek forward in the stream, but not
+   backwards.  The special case of setting the stream position to zero is
+   allowed.  Seeking forward decompresses data until the requested position in
+   the uncompressed data has been reached.  Seeking backwards, seeking relative
+   to the end of the stream, requesting the size of the stream, and writing to
+   the stream will raise an exception.
+ 
+   The Position property returns the number of bytes of uncompressed data that
+   have been read from the stream so far.
+ 
+   The OnProgress event is called each time the internal input buffer of
+   compressed data is exhausted and the next block is read from the input stream.
+   This is useful for updating a progress indicator when you are reading a
+   large chunk of data from the decompression stream in a single call.}
+ 
+   TDecompressionStream = class(TCustomZlibStream)
+   public
+     constructor Create(Source: TStream);
+     destructor Destroy; override;
+     function Read(var Buffer; Count: Longint): Longint; override;
+     function Write(const Buffer; Count: Longint): Longint; override;
+     function Seek(Offset: Longint; Origin: Word): Longint; override;
+     property OnProgress;
+   end;
+ 
+ 
+ 
+ { CompressBuf compresses data, buffer to buffer, in one call.
+    In: InBuf = ptr to compressed data
+        InBytes = number of bytes in InBuf
+   Out: OutBuf = ptr to newly allocated buffer containing decompressed data
+        OutBytes = number of bytes in OutBuf   }
+ procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
+                       out OutBuf: Pointer; out OutBytes: Integer);
+ 
+ 
+ { DecompressBuf decompresses data, buffer to buffer, in one call.
+    In: InBuf = ptr to compressed data
+        InBytes = number of bytes in InBuf
+        OutEstimate = zero, or est. size of the decompressed data
+   Out: OutBuf = ptr to newly allocated buffer containing decompressed data
+        OutBytes = number of bytes in OutBuf   }
+ procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
+  OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);
+ 
+ { DecompressToUserBuf decompresses data, buffer to buffer, in one call.
+    In: InBuf = ptr to compressed data
+        InBytes = number of bytes in InBuf
+   Out: OutBuf = ptr to user-allocated buffer to contain decompressed data
+        BufSize = number of bytes in OutBuf   }
+ procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
+   const OutBuf: Pointer; BufSize: Integer);
+ 
+ const
+   zlib_version = '1.2.1';
+ 
+ type
+   EZlibError = class(Exception);
+   ECompressionError = class(EZlibError);
+   EDecompressionError = class(EZlibError);
+ 
+ implementation
+ 
+ uses ZLibConst;
+ 
+ const
+   Z_NO_FLUSH      = 0;
+   Z_PARTIAL_FLUSH = 1;
+   Z_SYNC_FLUSH    = 2;
+   Z_FULL_FLUSH    = 3;
+   Z_FINISH        = 4;
+ 
+   Z_OK            = 0;
+   Z_STREAM_END    = 1;
+   Z_NEED_DICT     = 2;
+   Z_ERRNO         = (-1);
+   Z_STREAM_ERROR  = (-2);
+   Z_DATA_ERROR    = (-3);
+   Z_MEM_ERROR     = (-4);
+   Z_BUF_ERROR     = (-5);
+   Z_VERSION_ERROR = (-6);
+ 
+   Z_NO_COMPRESSION       =   0;
+   Z_BEST_SPEED           =   1;
+   Z_BEST_COMPRESSION     =   9;
+   Z_DEFAULT_COMPRESSION  = (-1);
+ 
+   Z_FILTERED            = 1;
+   Z_HUFFMAN_ONLY        = 2;
+   Z_RLE                 = 3;
+   Z_DEFAULT_STRATEGY    = 0;
+ 
+   Z_BINARY   = 0;
+   Z_ASCII    = 1;
+   Z_UNKNOWN  = 2;
+ 
+   Z_DEFLATED = 8;
+ 
+ 
+ {$L adler32.obj}
+ {$L compress.obj}
+ {$L crc32.obj}
+ {$L deflate.obj}
+ {$L infback.obj}
+ {$L inffast.obj}
+ {$L inflate.obj}
+ {$L inftrees.obj}
+ {$L trees.obj}
+ {$L uncompr.obj}
+ {$L zutil.obj}
+ 
+ procedure adler32; external;
+ procedure compressBound; external;
+ procedure crc32; external;
+ procedure deflateInit2_; external;
+ procedure deflateParams; external;
+ 
+ function _malloc(Size: Integer): Pointer; cdecl;
+ begin
+   Result := AllocMem(Size);
+ end;
+ 
+ procedure _free(Block: Pointer); cdecl;
+ begin
+   FreeMem(Block);
+ end;
+ 
+ procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl;
+ begin
+   FillChar(P^, count, B);
+ end;
+ 
+ procedure _memcpy(dest, source: Pointer; count: Integer); cdecl;
+ begin
+   Move(source^, dest^, count);
+ end;
+ 
+ 
+ 
+ // deflate compresses data
+ function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar;
+   recsize: Integer): Integer; external;
+ function deflate(var strm: TZStreamRec; flush: Integer): Integer; external;
+ function deflateEnd(var strm: TZStreamRec): Integer; external;
+ 
+ // inflate decompresses data
+ function inflateInit_(var strm: TZStreamRec; version: PChar;
+   recsize: Integer): Integer; external;
+ function inflate(var strm: TZStreamRec; flush: Integer): Integer; external;
+ function inflateEnd(var strm: TZStreamRec): Integer; external;
+ function inflateReset(var strm: TZStreamRec): Integer; external;
+ 
+ 
+ function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl;
+ begin
+ //  GetMem(Result, Items*Size);
+   Result := AllocMem(Items * Size);
+ end;
+ 
+ procedure zlibFreeMem(AppData, Block: Pointer); cdecl;
+ begin
+   FreeMem(Block);
+ end;
+ 
+ {function zlibCheck(code: Integer): Integer;
+ begin
+   Result := code;
+   if code < 0 then
+     raise EZlibError.Create('error');    //!!
+ end;}
+ 
+ function CCheck(code: Integer): Integer;
+ begin
+   Result := code;
+   if code < 0 then
+     raise ECompressionError.Create('error'); //!!
+ end;
+ 
+ function DCheck(code: Integer): Integer;
+ begin
+   Result := code;
+   if code < 0 then
+     raise EDecompressionError.Create('error');  //!!
+ end;
+ 
+ procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
+                       out OutBuf: Pointer; out OutBytes: Integer);
+ var
+   strm: TZStreamRec;
+   P: Pointer;
+ begin
+   FillChar(strm, sizeof(strm), 0);
+   strm.zalloc := zlibAllocMem;
+   strm.zfree := zlibFreeMem;
+   OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255;
+   GetMem(OutBuf, OutBytes);
+   try
+     strm.next_in := InBuf;
+     strm.avail_in := InBytes;
+     strm.next_out := OutBuf;
+     strm.avail_out := OutBytes;
+     CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm)));
+     try
+       while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do
+       begin
+         P := OutBuf;
+         Inc(OutBytes, 256);
+         ReallocMem(OutBuf, OutBytes);
+         strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
+         strm.avail_out := 256;
+       end;
+     finally
+       CCheck(deflateEnd(strm));
+     end;
+     ReallocMem(OutBuf, strm.total_out);
+     OutBytes := strm.total_out;
+   except
+     FreeMem(OutBuf);
+     raise
+   end;
+ end;
+ 
+ 
+ procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
+   OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);
+ var
+   strm: TZStreamRec;
+   P: Pointer;
+   BufInc: Integer;
+ begin
+   FillChar(strm, sizeof(strm), 0);
+   strm.zalloc := zlibAllocMem;
+   strm.zfree := zlibFreeMem;
+   BufInc := (InBytes + 255) and not 255;
+   if OutEstimate = 0 then
+     OutBytes := BufInc
+   else
+     OutBytes := OutEstimate;
+   GetMem(OutBuf, OutBytes);
+   try
+     strm.next_in := InBuf;
+     strm.avail_in := InBytes;
+     strm.next_out := OutBuf;
+     strm.avail_out := OutBytes;
+     DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));
+     try
+       while DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END do
+       begin
+         P := OutBuf;
+         Inc(OutBytes, BufInc);
+         ReallocMem(OutBuf, OutBytes);
+         strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
+         strm.avail_out := BufInc;
+       end;
+     finally
+       DCheck(inflateEnd(strm));
+     end;
+     ReallocMem(OutBuf, strm.total_out);
+     OutBytes := strm.total_out;
+   except
+     FreeMem(OutBuf);
+     raise
+   end;
+ end;
+ 
+ procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
+   const OutBuf: Pointer; BufSize: Integer);
+ var
+   strm: TZStreamRec;
+ begin
+   FillChar(strm, sizeof(strm), 0);
+   strm.zalloc := zlibAllocMem;
+   strm.zfree := zlibFreeMem;
+   strm.next_in := InBuf;
+   strm.avail_in := InBytes;
+   strm.next_out := OutBuf;
+   strm.avail_out := BufSize;
+   DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));
+   try
+     if DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END then
+       raise EZlibError.CreateRes(@sTargetBufferTooSmall);
+   finally
+     DCheck(inflateEnd(strm));
+   end;
+ end;
+ 
+ // TCustomZlibStream
+ 
+ constructor TCustomZLibStream.Create(Strm: TStream);
+ begin
+   inherited Create;
+   FStrm := Strm;
+   FStrmPos := Strm.Position;
+   FZRec.zalloc := zlibAllocMem;
+   FZRec.zfree := zlibFreeMem;
+ end;
+ 
+ procedure TCustomZLibStream.Progress(Sender: TObject);
+ begin
+   if Assigned(FOnProgress) then FOnProgress(Sender);
+ end;
+ 
+ 
+ // TCompressionStream
+ 
+ constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel;
+   Dest: TStream);
+ const
+   Levels: array [TCompressionLevel] of ShortInt =
+     (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION);
+ begin
+   inherited Create(Dest);
+   FZRec.next_out := FBuffer;
+   FZRec.avail_out := sizeof(FBuffer);
+   CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec)));
+ end;
+ 
+ destructor TCompressionStream.Destroy;
+ begin
+   FZRec.next_in := nil;
+   FZRec.avail_in := 0;
+   try
+     if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
+     while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END)
+       and (FZRec.avail_out = 0) do
+     begin
+       FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
+       FZRec.next_out := FBuffer;
+       FZRec.avail_out := sizeof(FBuffer);
+     end;
+     if FZRec.avail_out < sizeof(FBuffer) then
+       FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out);
+   finally
+     deflateEnd(FZRec);
+   end;
+   inherited Destroy;
+ end;
+ 
+ function TCompressionStream.Read(var Buffer; Count: Longint): Longint;
+ begin
+   raise ECompressionError.CreateRes(@sInvalidStreamOp);
+ end;
+ 
+ function TCompressionStream.Write(const Buffer; Count: Longint): Longint;
+ begin
+   FZRec.next_in := @Buffer;
+   FZRec.avail_in := Count;
+   if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
+   while (FZRec.avail_in > 0) do
+   begin
+     CCheck(deflate(FZRec, 0));
+     if FZRec.avail_out = 0 then
+     begin
+       FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
+       FZRec.next_out := FBuffer;
+       FZRec.avail_out := sizeof(FBuffer);
+       FStrmPos := FStrm.Position;
+       Progress(Self);
+     end;
+   end;
+   Result := Count;
+ end;
+ 
+ function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
+ begin
+   if (Offset = 0) and (Origin = soFromCurrent) then
+     Result := FZRec.total_in
+   else
+     raise ECompressionError.CreateRes(@sInvalidStreamOp);
+ end;
+ 
+ function TCompressionStream.GetCompressionRate: Single;
+ begin
+   if FZRec.total_in = 0 then
+     Result := 0
+   else
+     Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0;
+ end;
+ 
+ 
+ // TDecompressionStream
+ 
+ constructor TDecompressionStream.Create(Source: TStream);
+ begin
+   inherited Create(Source);
+   FZRec.next_in := FBuffer;
+   FZRec.avail_in := 0;
+   DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec)));
+ end;
+ 
+ destructor TDecompressionStream.Destroy;
+ begin
+   FStrm.Seek(-FZRec.avail_in, 1);
+   inflateEnd(FZRec);
+   inherited Destroy;
+ end;
+ 
+ function TDecompressionStream.Read(var Buffer; Count: Longint): Longint;
+ begin
+   FZRec.next_out := @Buffer;
+   FZRec.avail_out := Count;
+   if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
+   while (FZRec.avail_out > 0) do
+   begin
+     if FZRec.avail_in = 0 then
+     begin
+       FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer));
+       if FZRec.avail_in = 0 then
+       begin
+         Result := Count - FZRec.avail_out;
+         Exit;
+       end;
+           FZRec.next_in := FBuffer;
+       FStrmPos := FStrm.Position;
+       Progress(Self);
+     end;
+     CCheck(inflate(FZRec, 0));
+   end;
+   Result := Count;
+ end;
+ 
+ function TDecompressionStream.Write(const Buffer; Count: Longint): Longint;
+ begin
+   raise EDecompressionError.CreateRes(@sInvalidStreamOp);
+ end;
+ 
+ function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
+ var
+   I: Integer;
+   Buf: array [0..4095] of Char;
+ begin
+   if (Offset = 0) and (Origin = soFromBeginning) then
+   begin
+     DCheck(inflateReset(FZRec));
+     FZRec.next_in := FBuffer;
+     FZRec.avail_in := 0;
+     FStrm.Position := 0;
+     FStrmPos := 0;
+   end
+   else if ( (Offset >= 0) and (Origin = soFromCurrent)) or
+           ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then
+   begin
+     if Origin = soFromBeginning then Dec(Offset, FZRec.total_out);
+     if Offset > 0 then
+     begin
+       for I := 1 to Offset div sizeof(Buf) do
+         ReadBuffer(Buf, sizeof(Buf));
+       ReadBuffer(Buf, Offset mod sizeof(Buf));
+     end;
+   end
+   else
+     raise EDecompressionError.CreateRes(@sInvalidStreamOp);
+   Result := FZRec.total_out;
+ end;
+ 
+ 
+ end.
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi/ZLibConst.pas gcc-4.0.0/zlib/contrib/delphi/ZLibConst.pas
*** gcc-3.4.3/zlib/contrib/delphi/ZLibConst.pas	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/delphi/ZLibConst.pas	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,11 ----
+ unit ZLibConst;
+ 
+ interface
+ 
+ resourcestring
+   sTargetBufferTooSmall = 'ZLib error: target buffer may be too small';
+   sInvalidStreamOp = 'Invalid stream operation';
+ 
+ implementation
+ 
+ end.
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi/readme.txt gcc-4.0.0/zlib/contrib/delphi/readme.txt
*** gcc-3.4.3/zlib/contrib/delphi/readme.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/delphi/readme.txt	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,76 ----
+ 
+ Overview
+ ========
+ 
+ This directory contains an update to the ZLib interface unit,
+ distributed by Borland as a Delphi supplemental component.
+ 
+ The original ZLib unit is Copyright (c) 1997,99 Borland Corp.,
+ and is based on zlib version 1.0.4.  There are a series of bugs
+ and security problems associated with that old zlib version, and
+ we recommend the users to update their ZLib unit.
+ 
+ 
+ Summary of modifications
+ ========================
+ 
+ - Improved makefile, adapted to zlib version 1.2.1.
+ 
+ - Some field types from TZStreamRec are changed from Integer to
+   Longint, for consistency with the zlib.h header, and for 64-bit
+   readiness.
+ 
+ - The zlib_version constant is updated.
+ 
+ - The new Z_RLE strategy has its corresponding symbolic constant.
+ 
+ - The allocation and deallocation functions and function types
+   (TAlloc, TFree, zlibAllocMem and zlibFreeMem) are now cdecl,
+   and _malloc and _free are added as C RTL stubs.  As a result,
+   the original C sources of zlib can be compiled out of the box,
+   and linked to the ZLib unit.
+ 
+ 
+ Suggestions for improvements
+ ============================
+ 
+ Currently, the ZLib unit provides only a limited wrapper around
+ the zlib library, and much of the original zlib functionality is
+ missing.  Handling compressed file formats like ZIP/GZIP or PNG
+ cannot be implemented without having this functionality.
+ Applications that handle these formats are either using their own,
+ duplicated code, or not using the ZLib unit at all.
+ 
+ Here are a few suggestions:
+ 
+ - Checksum class wrappers around adler32() and crc32(), similar
+   to the Java classes that implement the java.util.zip.Checksum
+   interface.
+ 
+ - The ability to read and write raw deflate streams, without the
+   zlib stream header and trailer.  Raw deflate streams are used
+   in the ZIP file format.
+ 
+ - The ability to read and write gzip streams, used in the GZIP
+   file format, and normally produced by the gzip program.
+ 
+ - The ability to select a different compression strategy, useful
+   to PNG and MNG image compression, and to multimedia compression
+   in general.  Besides the compression level
+ 
+     TCompressionLevel = (clNone, clFastest, clDefault, clMax);
+ 
+   which, in fact, could have used the 'z' prefix and avoided
+   TColor-like symbols
+ 
+     TCompressionLevel = (zcNone, zcFastest, zcDefault, zcMax);
+ 
+   there could be a compression strategy
+ 
+     TCompressionStrategy = (zsDefault, zsFiltered, zsHuffmanOnly, zsRle);
+ 
+ - ZIP and GZIP stream handling via TStreams.
+ 
+ 
+ --
+ Cosmin Truta <cosmint@cs.ubbcluj.ro>
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi/zlib.mak gcc-4.0.0/zlib/contrib/delphi/zlib.mak
*** gcc-3.4.3/zlib/contrib/delphi/zlib.mak	Mon Mar 11 21:49:35 2002
--- gcc-4.0.0/zlib/contrib/delphi/zlib.mak	Thu Jan  1 00:00:00 1970
***************
*** 1,36 ****
- # Makefile for zlib32bd.lib
- # ------------- Borland C++ 4.5 -------------
- 
- # The (32-bit) zlib32bd.lib made with this makefile is intended for use 
- # in making the (32-bit) DLL, png32bd.dll. It uses the "stdcall" calling 
- # convention.
- 
- CFLAGS= -ps -O2 -C -K -N- -k- -d -3 -r- -w-par -w-aus -WDE
- CC=f:\bc45\bin\bcc32
- LIBFLAGS= /C
- LIB=f:\bc45\bin\tlib
- ZLIB=zlib32bd.lib
- 
- .autodepend
- .c.obj:
-         $(CC) -c $(CFLAGS) $<
- 
- OBJ1=adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infblock.obj 
- OBJ2=infcodes.obj inflate.obj inftrees.obj infutil.obj inffast.obj 
- OBJ3=trees.obj uncompr.obj zutil.obj
- pOBJ1=+adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infblock.obj 
- pOBJ2=+infcodes.obj+inflate.obj+inftrees.obj+infutil.obj+inffast.obj 
- pOBJ3=+trees.obj+uncompr.obj+zutil.obj
- 
- all: $(ZLIB)
- 
- $(ZLIB): $(OBJ1) $(OBJ2) $(OBJ3)
-         @if exist $@ del $@
-         $(LIB) @&&|
- $@ $(LIBFLAGS) &
- $(pOBJ1) &
- $(pOBJ2) &
- $(pOBJ3)
- |
- 
- # End of makefile for zlib32bd.lib
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi/zlibd32.mak gcc-4.0.0/zlib/contrib/delphi/zlibd32.mak
*** gcc-3.4.3/zlib/contrib/delphi/zlibd32.mak	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/delphi/zlibd32.mak	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,93 ----
+ # Makefile for zlib
+ # For use with Delphi and C++ Builder under Win32
+ # Updated for zlib 1.2.x by Cosmin Truta
+ 
+ # ------------ Borland C++ ------------
+ 
+ # This project uses the Delphi (fastcall/register) calling convention:
+ LOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl
+ 
+ CC = bcc32
+ LD = bcc32
+ AR = tlib
+ # do not use "-pr" in CFLAGS
+ CFLAGS = -a -d -k- -O2 $(LOC)
+ LDFLAGS =
+ 
+ 
+ # variables
+ ZLIB_LIB = zlib.lib
+ 
+ OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj
+ OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj
+ OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj
+ OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj
+ 
+ 
+ # targets
+ all: $(ZLIB_LIB) example.exe minigzip.exe
+ 
+ .c.obj:
+ 	$(CC) -c $(CFLAGS) $*.c
+ 
+ adler32.obj: adler32.c zlib.h zconf.h
+ 
+ compress.obj: compress.c zlib.h zconf.h
+ 
+ crc32.obj: crc32.c zlib.h zconf.h crc32.h
+ 
+ deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
+ 
+ gzio.obj: gzio.c zutil.h zlib.h zconf.h
+ 
+ infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+  inffast.h inffixed.h
+ 
+ inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+  inffast.h
+ 
+ inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+  inffast.h inffixed.h
+ 
+ inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
+ 
+ trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h
+ 
+ uncompr.obj: uncompr.c zlib.h zconf.h
+ 
+ zutil.obj: zutil.c zutil.h zlib.h zconf.h
+ 
+ example.obj: example.c zlib.h zconf.h
+ 
+ minigzip.obj: minigzip.c zlib.h zconf.h
+ 
+ 
+ # For the sake of the old Borland make,
+ # the command line is cut to fit in the MS-DOS 128 byte limit:
+ $(ZLIB_LIB): $(OBJ1) $(OBJ2)
+ 	-del $(ZLIB_LIB)
+ 	$(AR) $(ZLIB_LIB) $(OBJP1)
+ 	$(AR) $(ZLIB_LIB) $(OBJP2)
+ 
+ 
+ # testing
+ test: example.exe minigzip.exe
+ 	example
+ 	echo hello world | minigzip | minigzip -d
+ 
+ example.exe: example.obj $(ZLIB_LIB)
+ 	$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
+ 
+ minigzip.exe: minigzip.obj $(ZLIB_LIB)
+ 	$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)
+ 
+ 
+ # cleanup
+ clean:
+ 	-del *.obj
+ 	-del *.exe
+ 	-del *.lib
+ 	-del *.tds
+ 	-del zlib.bak
+ 	-del foo.gz
+ 
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi/zlibdef.pas gcc-4.0.0/zlib/contrib/delphi/zlibdef.pas
*** gcc-3.4.3/zlib/contrib/delphi/zlibdef.pas	Mon Mar 11 21:49:35 2002
--- gcc-4.0.0/zlib/contrib/delphi/zlibdef.pas	Thu Jan  1 00:00:00 1970
***************
*** 1,169 ****
- unit zlibdef;
- 
- interface
- 
- uses
-   Windows;
- 
- const
-   ZLIB_VERSION = '1.1.3';
- 
- type
-   voidpf = Pointer;
-   int    = Integer;
-   uInt   = Cardinal;
-   pBytef = PChar;
-   uLong  = Cardinal;
- 
-   alloc_func = function(opaque: voidpf; items, size: uInt): voidpf;
-                     stdcall;
-   free_func  = procedure(opaque, address: voidpf);
-                     stdcall;
- 
-   internal_state = Pointer;
- 
-   z_streamp = ^z_stream;
-   z_stream = packed record
-     next_in: pBytef;          // next input byte
-     avail_in: uInt;           // number of bytes available at next_in
-     total_in: uLong;          // total nb of input bytes read so far
- 
-     next_out: pBytef;         // next output byte should be put there
-     avail_out: uInt;          // remaining free space at next_out
-     total_out: uLong;         // total nb of bytes output so far
- 
-     msg: PChar;               // last error message, NULL if no error
-     state: internal_state;    // not visible by applications
- 
-     zalloc: alloc_func;       // used to allocate the internal state
-     zfree: free_func;         // used to free the internal state
-     opaque: voidpf;           // private data object passed to zalloc and zfree
- 
-     data_type: int;           // best guess about the data type: ascii or binary
-     adler: uLong;             // adler32 value of the uncompressed data
-     reserved: uLong;          // reserved for future use
-     end;
- 
- const
-   Z_NO_FLUSH      = 0;
-   Z_SYNC_FLUSH    = 2;
-   Z_FULL_FLUSH    = 3;
-   Z_FINISH        = 4;
- 
-   Z_OK            = 0;
-   Z_STREAM_END    = 1;
- 
-   Z_NO_COMPRESSION         =  0;
-   Z_BEST_SPEED             =  1;
-   Z_BEST_COMPRESSION       =  9;
-   Z_DEFAULT_COMPRESSION    = -1;
- 
-   Z_FILTERED            = 1;
-   Z_HUFFMAN_ONLY        = 2;
-   Z_DEFAULT_STRATEGY    = 0;
- 
-   Z_BINARY   = 0;
-   Z_ASCII    = 1;
-   Z_UNKNOWN  = 2;
- 
-   Z_DEFLATED    = 8;
- 
-   MAX_MEM_LEVEL = 9;
- 
- function adler32(adler: uLong; const buf: pBytef; len: uInt): uLong;
-              stdcall;
- function crc32(crc: uLong; const buf: pBytef; len: uInt): uLong;
-              stdcall;
- function deflate(strm: z_streamp; flush: int): int;
-              stdcall;
- function deflateCopy(dest, source: z_streamp): int;
-              stdcall;
- function deflateEnd(strm: z_streamp): int;
-              stdcall;
- function deflateInit2_(strm: z_streamp; level, method,
-                        windowBits, memLevel, strategy: int;
-                        const version: PChar; stream_size: int): int;
-              stdcall;
- function deflateInit_(strm: z_streamp; level: int;
-                       const version: PChar; stream_size: int): int;
-              stdcall;
- function deflateParams(strm: z_streamp; level, strategy: int): int;
-              stdcall;
- function deflateReset(strm: z_streamp): int;
-              stdcall;
- function deflateSetDictionary(strm: z_streamp;
-                               const dictionary: pBytef;
-                               dictLength: uInt): int;
-              stdcall;
- function inflate(strm: z_streamp; flush: int): int;
-              stdcall;
- function inflateEnd(strm: z_streamp): int;
-              stdcall;
- function inflateInit2_(strm: z_streamp; windowBits: int;
-                        const version: PChar; stream_size: int): int;
-              stdcall;
- function inflateInit_(strm: z_streamp; const version: PChar;
-                       stream_size: int): int;
-              stdcall;
- function inflateReset(strm: z_streamp): int;
-              stdcall;
- function inflateSetDictionary(strm: z_streamp;
-                               const dictionary: pBytef;
-                               dictLength: uInt): int;
-              stdcall;
- function inflateSync(strm: z_streamp): int;
-              stdcall;
- 
- function deflateInit(strm: z_streamp; level: int): int;
- function deflateInit2(strm: z_streamp; level, method, windowBits,
-                       memLevel, strategy: int): int;
- function inflateInit(strm: z_streamp): int;
- function inflateInit2(strm: z_streamp; windowBits: int): int;
- 
- implementation
- 
- function deflateInit(strm: z_streamp; level: int): int;
- begin
-   Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream));
- end;
- 
- function deflateInit2(strm: z_streamp; level, method, windowBits,
-                       memLevel, strategy: int): int;
- begin
-   Result := deflateInit2_(strm, level, method, windowBits, memLevel,
-                           strategy, ZLIB_VERSION, sizeof(z_stream));
- end;
- 
- function inflateInit(strm: z_streamp): int;
- begin
-   Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream));
- end;
- 
- function inflateInit2(strm: z_streamp; windowBits: int): int;
- begin
-   Result := inflateInit2_(strm, windowBits, ZLIB_VERSION,
-                           sizeof(z_stream));
- end;
- 
- const
-   zlibDLL = 'png32bd.dll';
- 
- function adler32; external zlibDLL;
- function crc32; external zlibDLL;
- function deflate; external zlibDLL;
- function deflateCopy; external zlibDLL;
- function deflateEnd; external zlibDLL;
- function deflateInit2_; external zlibDLL;
- function deflateInit_; external zlibDLL;
- function deflateParams; external zlibDLL;
- function deflateReset; external zlibDLL;
- function deflateSetDictionary; external zlibDLL;
- function inflate; external zlibDLL;
- function inflateEnd; external zlibDLL;
- function inflateInit2_; external zlibDLL;
- function inflateInit_; external zlibDLL;
- function inflateReset; external zlibDLL;
- function inflateSetDictionary; external zlibDLL;
- function inflateSync; external zlibDLL;
- 
- end.
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi2/d_zlib.bpr gcc-4.0.0/zlib/contrib/delphi2/d_zlib.bpr
*** gcc-3.4.3/zlib/contrib/delphi2/d_zlib.bpr	Mon Mar 11 21:49:38 2002
--- gcc-4.0.0/zlib/contrib/delphi2/d_zlib.bpr	Thu Jan  1 00:00:00 1970
***************
*** 1,224 ****
- # ---------------------------------------------------------------------------
- !if !$d(BCB)
- BCB = $(MAKEDIR)\..
- !endif
- 
- # ---------------------------------------------------------------------------
- # IDE SECTION
- # ---------------------------------------------------------------------------
- # The following section of the project makefile is managed by the BCB IDE.
- # It is recommended to use the IDE to change any of the values in this
- # section.
- # ---------------------------------------------------------------------------
- 
- VERSION = BCB.03
- # ---------------------------------------------------------------------------
- PROJECT = d_zlib.lib
- OBJFILES = d_zlib.obj adler32.obj deflate.obj infblock.obj infcodes.obj inffast.obj \
-   inflate.obj inftrees.obj infutil.obj trees.obj
- RESFILES =
- RESDEPEN = $(RESFILES)
- LIBFILES =
- LIBRARIES = VCL35.lib
- SPARELIBS = VCL35.lib
- DEFFILE =
- PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi ibsmp35.bpi bcbsmp35.bpi \
-   dclocx35.bpi QRPT35.bpi TEEUI35.bpi TEEDB35.bpi TEE35.bpi DSS35.bpi \
-   NMFAST35.bpi INETDB35.bpi INET35.bpi VCLMID35.bpi
- # ---------------------------------------------------------------------------
- PATHCPP = .;
- PATHASM = .;
- PATHPAS = .;
- PATHRC = .;
- DEBUGLIBPATH = $(BCB)\lib\debug
- RELEASELIBPATH = $(BCB)\lib\release
- # ---------------------------------------------------------------------------
- CFLAG1 = -O2 -Ve -d -k- -vi
- CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm
- CFLAG3 = -ff -pr -5
- PFLAGS = -U;$(DEBUGLIBPATH) -I$(BCB)\include;$(BCB)\include\vcl -H -W -$I- -v -JPHN -M
- RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl 
- AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn
- LFLAGS =
- IFLAGS = -g -Gn
- # ---------------------------------------------------------------------------
- ALLOBJ = c0w32.obj $(OBJFILES)
- ALLRES = $(RESFILES)
- ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib
- # ---------------------------------------------------------------------------
- !!ifdef IDEOPTIONS
- 
- [Version Info]
- IncludeVerInfo=0
- AutoIncBuild=0
- MajorVer=1
- MinorVer=0
- Release=0
- Build=0
- Debug=0
- PreRelease=0
- Special=0
- Private=0
- DLL=0
- Locale=1040
- CodePage=1252
- 
- [Version Info Keys]
- CompanyName=
- FileDescription=
- FileVersion=1.0.0.0
- InternalName=
- LegalCopyright=
- LegalTrademarks=
- OriginalFilename=
- ProductName=
- ProductVersion=1.0.0.0
- Comments=
- 
- [HistoryLists\hlIncludePath]
- Count=2
- Item0=$(BCB)\include
- Item1=$(BCB)\include;$(BCB)\include\vcl
- 
- [HistoryLists\hlLibraryPath]
- Count=1
- Item0=$(BCB)\lib\obj;$(BCB)\lib
- 
- [HistoryLists\hlDebugSourcePath]
- Count=1
- Item0=$(BCB)\source\vcl
- 
- [Debugging]
- DebugSourceDirs=
- 
- [Parameters]
- RunParams=
- HostApplication=
- 
- !endif
- 
-  ---------------------------------------------------------------------------
- # MAKE SECTION
- # ---------------------------------------------------------------------------
- # This section of the project file is not used by the BCB IDE.  It is for
- # the benefit of building from the command-line using the MAKE utility.
- # ---------------------------------------------------------------------------
- 
- .autodepend
- # ---------------------------------------------------------------------------
- !if !$d(BCC32)
- BCC32 = bcc32
- !endif
- 
- !if !$d(DCC32)
- DCC32 = dcc32
- !endif
- 
- !if !$d(TASM32)
- TASM32 = tasm32
- !endif
- 
- !if !$d(LINKER)
- LINKER = TLib
- !endif
- 
- !if !$d(BRCC32)
- BRCC32 = brcc32
- !endif
- # ---------------------------------------------------------------------------
- !if $d(PATHCPP)
- .PATH.CPP = $(PATHCPP)
- .PATH.C   = $(PATHCPP)
- !endif
- 
- !if $d(PATHPAS)
- .PATH.PAS = $(PATHPAS)
- !endif
- 
- !if $d(PATHASM)
- .PATH.ASM = $(PATHASM)
- !endif
- 
- !if $d(PATHRC)
- .PATH.RC  = $(PATHRC)
- !endif
- # ---------------------------------------------------------------------------
- !ifdef IDEOPTIONS
- 
- [Version Info]
- IncludeVerInfo=0
- AutoIncBuild=0
- MajorVer=1
- MinorVer=0
- Release=0
- Build=0
- Debug=0
- PreRelease=0
- Special=0
- Private=0
- DLL=0
- Locale=1040
- CodePage=1252
- 
- [Version Info Keys]
- CompanyName=
- FileDescription=
- FileVersion=1.0.0.0
- InternalName=
- LegalCopyright=
- LegalTrademarks=
- OriginalFilename=
- ProductName=
- ProductVersion=1.0.0.0
- Comments=
- 
- [HistoryLists\hlIncludePath]
- Count=2
- Item0=$(BCB)\include;$(BCB)\include\vcl
- Item1=$(BCB)\include
- 
- [HistoryLists\hlLibraryPath]
- Count=1
- Item0=$(BCB)\lib\obj;$(BCB)\lib
- 
- [HistoryLists\hlDebugSourcePath]
- Count=1
- Item0=$(BCB)\source\vcl
- 
- [Debugging]
- DebugSourceDirs=
- 
- [Parameters]
- RunParams=
- HostApplication=
- 
- !endif
- 
- $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE)
-     $(BCB)\BIN\$(LINKER) @&&!
-     $(LFLAGS) $(IFLAGS) +
-     $(ALLOBJ), +
-     $(PROJECT),, +
-     $(ALLLIB), +
-     $(DEFFILE), +
-     $(ALLRES)
- !
- # ---------------------------------------------------------------------------
- .pas.hpp:
-     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
- 
- .pas.obj:
-     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
- 
- .cpp.obj:
-     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
- 
- .c.obj:
-     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
- 
- .asm.obj:
-     $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@
- 
- .rc.res:
-     $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $<
- # ---------------------------------------------------------------------------
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi2/d_zlib.cpp gcc-4.0.0/zlib/contrib/delphi2/d_zlib.cpp
*** gcc-3.4.3/zlib/contrib/delphi2/d_zlib.cpp	Mon Mar 11 21:49:38 2002
--- gcc-4.0.0/zlib/contrib/delphi2/d_zlib.cpp	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- #include <condefs.h>
- #pragma hdrstop
- //---------------------------------------------------------------------------
- USEUNIT("adler32.c");
- USEUNIT("deflate.c");
- USEUNIT("infblock.c");
- USEUNIT("infcodes.c");
- USEUNIT("inffast.c");
- USEUNIT("inflate.c");
- USEUNIT("inftrees.c");
- USEUNIT("infutil.c");
- USEUNIT("trees.c");
- //---------------------------------------------------------------------------
- #define Library
- 
- // To add a file to the library use the Project menu 'Add to Project'.
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi2/readme.txt gcc-4.0.0/zlib/contrib/delphi2/readme.txt
*** gcc-3.4.3/zlib/contrib/delphi2/readme.txt	Mon Mar 11 21:49:38 2002
--- gcc-4.0.0/zlib/contrib/delphi2/readme.txt	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- These are files used to compile zlib under Borland C++ Builder 3.
- 
- zlib.bpg is the main project group that can be loaded in the BCB IDE and
- loads all other *.bpr projects
- 
- zlib.bpr is a project used to create a static zlib.lib library with C calling
- convention for functions.
- 
- zlib32.bpr creates a zlib32.dll dynamic link library with Windows standard
- calling convention.
- 
- d_zlib.bpr creates a set of .obj files with register calling convention.
- These files are used by zlib.pas to create a Delphi unit containing zlib.
- The d_zlib.lib file generated isn't useful and can be deleted.
- 
- zlib.cpp, zlib32.cpp and d_zlib.cpp are used by the above projects.
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi2/zlib.bpg gcc-4.0.0/zlib/contrib/delphi2/zlib.bpg
*** gcc-3.4.3/zlib/contrib/delphi2/zlib.bpg	Mon Mar 11 21:49:38 2002
--- gcc-4.0.0/zlib/contrib/delphi2/zlib.bpg	Thu Jan  1 00:00:00 1970
***************
*** 1,26 ****
- #------------------------------------------------------------------------------
- VERSION = BWS.01
- #------------------------------------------------------------------------------
- !ifndef ROOT
- ROOT = $(MAKEDIR)\..
- !endif
- #------------------------------------------------------------------------------
- MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
- DCC = $(ROOT)\bin\dcc32.exe $**
- BRCC = $(ROOT)\bin\brcc32.exe $**
- #------------------------------------------------------------------------------
- PROJECTS = zlib zlib32 d_zlib
- #------------------------------------------------------------------------------
- default: $(PROJECTS)
- #------------------------------------------------------------------------------
- 
- zlib: zlib.bpr
-   $(MAKE)
- 
- zlib32: zlib32.bpr
-   $(MAKE)
- 
- d_zlib: d_zlib.bpr
-   $(MAKE)
- 
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi2/zlib.bpr gcc-4.0.0/zlib/contrib/delphi2/zlib.bpr
*** gcc-3.4.3/zlib/contrib/delphi2/zlib.bpr	Mon Mar 11 21:49:39 2002
--- gcc-4.0.0/zlib/contrib/delphi2/zlib.bpr	Thu Jan  1 00:00:00 1970
***************
*** 1,225 ****
- # ---------------------------------------------------------------------------
- !if !$d(BCB)
- BCB = $(MAKEDIR)\..
- !endif
- 
- # ---------------------------------------------------------------------------
- # IDE SECTION
- # ---------------------------------------------------------------------------
- # The following section of the project makefile is managed by the BCB IDE.
- # It is recommended to use the IDE to change any of the values in this
- # section.
- # ---------------------------------------------------------------------------
- 
- VERSION = BCB.03
- # ---------------------------------------------------------------------------
- PROJECT = zlib.lib
- OBJFILES = zlib.obj adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infblock.obj \
-   infcodes.obj inffast.obj inflate.obj inftrees.obj infutil.obj trees.obj \
-   uncompr.obj zutil.obj
- RESFILES =
- RESDEPEN = $(RESFILES)
- LIBFILES =
- LIBRARIES = VCL35.lib
- SPARELIBS = VCL35.lib
- DEFFILE =
- PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi ibsmp35.bpi bcbsmp35.bpi \
-   dclocx35.bpi QRPT35.bpi TEEUI35.bpi TEEDB35.bpi TEE35.bpi DSS35.bpi \
-   NMFAST35.bpi INETDB35.bpi INET35.bpi VCLMID35.bpi
- # ---------------------------------------------------------------------------
- PATHCPP = .;
- PATHASM = .;
- PATHPAS = .;
- PATHRC = .;
- DEBUGLIBPATH = $(BCB)\lib\debug
- RELEASELIBPATH = $(BCB)\lib\release
- # ---------------------------------------------------------------------------
- CFLAG1 = -O2 -Ve -d -k- -vi
- CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm
- CFLAG3 = -ff -5
- PFLAGS = -U;$(DEBUGLIBPATH) -I$(BCB)\include;$(BCB)\include\vcl -H -W -$I- -v -JPHN -M
- RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl 
- AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn
- LFLAGS =
- IFLAGS = -g -Gn
- # ---------------------------------------------------------------------------
- ALLOBJ = c0w32.obj $(OBJFILES)
- ALLRES = $(RESFILES)
- ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib
- # ---------------------------------------------------------------------------
- !!ifdef IDEOPTIONS
- 
- [Version Info]
- IncludeVerInfo=0
- AutoIncBuild=0
- MajorVer=1
- MinorVer=0
- Release=0
- Build=0
- Debug=0
- PreRelease=0
- Special=0
- Private=0
- DLL=0
- Locale=1040
- CodePage=1252
- 
- [Version Info Keys]
- CompanyName=
- FileDescription=
- FileVersion=1.0.0.0
- InternalName=
- LegalCopyright=
- LegalTrademarks=
- OriginalFilename=
- ProductName=
- ProductVersion=1.0.0.0
- Comments=
- 
- [HistoryLists\hlIncludePath]
- Count=2
- Item0=$(BCB)\include
- Item1=$(BCB)\include;$(BCB)\include\vcl
- 
- [HistoryLists\hlLibraryPath]
- Count=1
- Item0=$(BCB)\lib\obj;$(BCB)\lib
- 
- [HistoryLists\hlDebugSourcePath]
- Count=1
- Item0=$(BCB)\source\vcl
- 
- [Debugging]
- DebugSourceDirs=
- 
- [Parameters]
- RunParams=
- HostApplication=
- 
- !endif
- 
-  ---------------------------------------------------------------------------
- # MAKE SECTION
- # ---------------------------------------------------------------------------
- # This section of the project file is not used by the BCB IDE.  It is for
- # the benefit of building from the command-line using the MAKE utility.
- # ---------------------------------------------------------------------------
- 
- .autodepend
- # ---------------------------------------------------------------------------
- !if !$d(BCC32)
- BCC32 = bcc32
- !endif
- 
- !if !$d(DCC32)
- DCC32 = dcc32
- !endif
- 
- !if !$d(TASM32)
- TASM32 = tasm32
- !endif
- 
- !if !$d(LINKER)
- LINKER = TLib
- !endif
- 
- !if !$d(BRCC32)
- BRCC32 = brcc32
- !endif
- # ---------------------------------------------------------------------------
- !if $d(PATHCPP)
- .PATH.CPP = $(PATHCPP)
- .PATH.C   = $(PATHCPP)
- !endif
- 
- !if $d(PATHPAS)
- .PATH.PAS = $(PATHPAS)
- !endif
- 
- !if $d(PATHASM)
- .PATH.ASM = $(PATHASM)
- !endif
- 
- !if $d(PATHRC)
- .PATH.RC  = $(PATHRC)
- !endif
- # ---------------------------------------------------------------------------
- !ifdef IDEOPTIONS
- 
- [Version Info]
- IncludeVerInfo=0
- AutoIncBuild=0
- MajorVer=1
- MinorVer=0
- Release=0
- Build=0
- Debug=0
- PreRelease=0
- Special=0
- Private=0
- DLL=0
- Locale=1040
- CodePage=1252
- 
- [Version Info Keys]
- CompanyName=
- FileDescription=
- FileVersion=1.0.0.0
- InternalName=
- LegalCopyright=
- LegalTrademarks=
- OriginalFilename=
- ProductName=
- ProductVersion=1.0.0.0
- Comments=
- 
- [HistoryLists\hlIncludePath]
- Count=2
- Item0=$(BCB)\include;$(BCB)\include\vcl
- Item1=$(BCB)\include
- 
- [HistoryLists\hlLibraryPath]
- Count=1
- Item0=$(BCB)\lib\obj;$(BCB)\lib
- 
- [HistoryLists\hlDebugSourcePath]
- Count=1
- Item0=$(BCB)\source\vcl
- 
- [Debugging]
- DebugSourceDirs=
- 
- [Parameters]
- RunParams=
- HostApplication=
- 
- !endif
- 
- $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE)
-     $(BCB)\BIN\$(LINKER) @&&!
-     $(LFLAGS) $(IFLAGS) +
-     $(ALLOBJ), +
-     $(PROJECT),, +
-     $(ALLLIB), +
-     $(DEFFILE), +
-     $(ALLRES)
- !
- # ---------------------------------------------------------------------------
- .pas.hpp:
-     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
- 
- .pas.obj:
-     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
- 
- .cpp.obj:
-     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
- 
- .c.obj:
-     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
- 
- .asm.obj:
-     $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@
- 
- .rc.res:
-     $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $<
- # ---------------------------------------------------------------------------
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi2/zlib.cpp gcc-4.0.0/zlib/contrib/delphi2/zlib.cpp
*** gcc-3.4.3/zlib/contrib/delphi2/zlib.cpp	Mon Mar 11 21:49:39 2002
--- gcc-4.0.0/zlib/contrib/delphi2/zlib.cpp	Thu Jan  1 00:00:00 1970
***************
*** 1,22 ****
- #include <condefs.h>
- #pragma hdrstop
- //---------------------------------------------------------------------------
- USEUNIT("adler32.c");
- USEUNIT("compress.c");
- USEUNIT("crc32.c");
- USEUNIT("deflate.c");
- USEUNIT("gzio.c");
- USEUNIT("infblock.c");
- USEUNIT("infcodes.c");
- USEUNIT("inffast.c");
- USEUNIT("inflate.c");
- USEUNIT("inftrees.c");
- USEUNIT("infutil.c");
- USEUNIT("trees.c");
- USEUNIT("uncompr.c");
- USEUNIT("zutil.c");
- //---------------------------------------------------------------------------
- #define Library
- 
- // To add a file to the library use the Project menu 'Add to Project'.
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi2/zlib.pas gcc-4.0.0/zlib/contrib/delphi2/zlib.pas
*** gcc-3.4.3/zlib/contrib/delphi2/zlib.pas	Mon Mar 11 21:49:39 2002
--- gcc-4.0.0/zlib/contrib/delphi2/zlib.pas	Thu Jan  1 00:00:00 1970
***************
*** 1,534 ****
- {*******************************************************}
- {                                                       }
- {       Delphi Supplemental Components                  }
- {       ZLIB Data Compression Interface Unit            }
- {                                                       }
- {       Copyright (c) 1997 Borland International        }
- {                                                       }
- {*******************************************************}
- 
- { Modified for zlib 1.1.3 by Davide Moretti <dave@rimini.com }
- 
- unit zlib;
- 
- interface
- 
- uses Sysutils, Classes;
- 
- type
-   TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer;
-   TFree = procedure (AppData, Block: Pointer);
- 
-   // Internal structure.  Ignore.
-   TZStreamRec = packed record
-     next_in: PChar;       // next input byte
-     avail_in: Integer;    // number of bytes available at next_in
-     total_in: Integer;    // total nb of input bytes read so far
- 
-     next_out: PChar;      // next output byte should be put here
-     avail_out: Integer;   // remaining free space at next_out
-     total_out: Integer;   // total nb of bytes output so far
- 
-     msg: PChar;           // last error message, NULL if no error
-     internal: Pointer;    // not visible by applications
- 
-     zalloc: TAlloc;       // used to allocate the internal state
-     zfree: TFree;         // used to free the internal state
-     AppData: Pointer;     // private data object passed to zalloc and zfree
- 
-     data_type: Integer;   //  best guess about the data type: ascii or binary
-     adler: Integer;       // adler32 value of the uncompressed data
-     reserved: Integer;    // reserved for future use
-   end;
- 
-   // Abstract ancestor class
-   TCustomZlibStream = class(TStream)
-   private
-     FStrm: TStream;
-     FStrmPos: Integer;
-     FOnProgress: TNotifyEvent;
-     FZRec: TZStreamRec;
-     FBuffer: array [Word] of Char;
-   protected
-     procedure Progress(Sender: TObject); dynamic;
-     property OnProgress: TNotifyEvent read FOnProgress write FOnProgress;
-     constructor Create(Strm: TStream);
-   end;
- 
- { TCompressionStream compresses data on the fly as data is written to it, and
-   stores the compressed data to another stream.
- 
-   TCompressionStream is write-only and strictly sequential. Reading from the
-   stream will raise an exception. Using Seek to move the stream pointer
-   will raise an exception.
- 
-   Output data is cached internally, written to the output stream only when
-   the internal output buffer is full.  All pending output data is flushed
-   when the stream is destroyed.
- 
-   The Position property returns the number of uncompressed bytes of
-   data that have been written to the stream so far.
- 
-   CompressionRate returns the on-the-fly percentage by which the original
-   data has been compressed:  (1 - (CompressedBytes / UncompressedBytes)) * 100
-   If raw data size = 100 and compressed data size = 25, the CompressionRate
-   is 75%
- 
-   The OnProgress event is called each time the output buffer is filled and
-   written to the output stream.  This is useful for updating a progress
-   indicator when you are writing a large chunk of data to the compression
-   stream in a single call.}
- 
- 
-   TCompressionLevel = (clNone, clFastest, clDefault, clMax);
- 
-   TCompressionStream = class(TCustomZlibStream)
-   private
-     function GetCompressionRate: Single;
-   public
-     constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream);
-     destructor Destroy; override;
-     function Read(var Buffer; Count: Longint): Longint; override;
-     function Write(const Buffer; Count: Longint): Longint; override;
-     function Seek(Offset: Longint; Origin: Word): Longint; override;
-     property CompressionRate: Single read GetCompressionRate;
-     property OnProgress;
-   end;
- 
- { TDecompressionStream decompresses data on the fly as data is read from it.
- 
-   Compressed data comes from a separate source stream.  TDecompressionStream
-   is read-only and unidirectional; you can seek forward in the stream, but not
-   backwards.  The special case of setting the stream position to zero is
-   allowed.  Seeking forward decompresses data until the requested position in
-   the uncompressed data has been reached.  Seeking backwards, seeking relative
-   to the end of the stream, requesting the size of the stream, and writing to
-   the stream will raise an exception.
- 
-   The Position property returns the number of bytes of uncompressed data that
-   have been read from the stream so far.
- 
-   The OnProgress event is called each time the internal input buffer of
-   compressed data is exhausted and the next block is read from the input stream.
-   This is useful for updating a progress indicator when you are reading a
-   large chunk of data from the decompression stream in a single call.}
- 
-   TDecompressionStream = class(TCustomZlibStream)
-   public
-     constructor Create(Source: TStream);
-     destructor Destroy; override;
-     function Read(var Buffer; Count: Longint): Longint; override;
-     function Write(const Buffer; Count: Longint): Longint; override;
-     function Seek(Offset: Longint; Origin: Word): Longint; override;
-     property OnProgress;
-   end;
- 
- 
- 
- { CompressBuf compresses data, buffer to buffer, in one call.
-    In: InBuf = ptr to compressed data
-        InBytes = number of bytes in InBuf
-   Out: OutBuf = ptr to newly allocated buffer containing decompressed data
-        OutBytes = number of bytes in OutBuf   }
- procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
-                       out OutBuf: Pointer; out OutBytes: Integer);
- 
- 
- { DecompressBuf decompresses data, buffer to buffer, in one call.
-    In: InBuf = ptr to compressed data
-        InBytes = number of bytes in InBuf
-        OutEstimate = zero, or est. size of the decompressed data
-   Out: OutBuf = ptr to newly allocated buffer containing decompressed data
-        OutBytes = number of bytes in OutBuf   }
- procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
-  OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);
- 
- const
-   zlib_version = '1.1.3';
- 
- type
-   EZlibError = class(Exception);
-   ECompressionError = class(EZlibError);
-   EDecompressionError = class(EZlibError);
- 
- function adler32(adler: Integer; buf: PChar; len: Integer): Integer;
- 
- implementation
- 
- const
-   Z_NO_FLUSH      = 0;
-   Z_PARTIAL_FLUSH = 1;
-   Z_SYNC_FLUSH    = 2;
-   Z_FULL_FLUSH    = 3;
-   Z_FINISH        = 4;
- 
-   Z_OK            = 0;
-   Z_STREAM_END    = 1;
-   Z_NEED_DICT     = 2;
-   Z_ERRNO         = (-1);
-   Z_STREAM_ERROR  = (-2);
-   Z_DATA_ERROR    = (-3);
-   Z_MEM_ERROR     = (-4);
-   Z_BUF_ERROR     = (-5);
-   Z_VERSION_ERROR = (-6);
- 
-   Z_NO_COMPRESSION       =   0;
-   Z_BEST_SPEED           =   1;
-   Z_BEST_COMPRESSION     =   9;
-   Z_DEFAULT_COMPRESSION  = (-1);
- 
-   Z_FILTERED            = 1;
-   Z_HUFFMAN_ONLY        = 2;
-   Z_DEFAULT_STRATEGY    = 0;
- 
-   Z_BINARY   = 0;
-   Z_ASCII    = 1;
-   Z_UNKNOWN  = 2;
- 
-   Z_DEFLATED = 8;
- 
-   _z_errmsg: array[0..9] of PChar = (
-     'need dictionary',      // Z_NEED_DICT      (2)
-     'stream end',           // Z_STREAM_END     (1)
-     '',                     // Z_OK             (0)
-     'file error',           // Z_ERRNO          (-1)
-     'stream error',         // Z_STREAM_ERROR   (-2)
-     'data error',           // Z_DATA_ERROR     (-3)
-     'insufficient memory',  // Z_MEM_ERROR      (-4)
-     'buffer error',         // Z_BUF_ERROR      (-5)
-     'incompatible version', // Z_VERSION_ERROR  (-6)
-     ''
-   );
- 
- {$L deflate.obj}
- {$L inflate.obj}
- {$L inftrees.obj}
- {$L trees.obj}
- {$L adler32.obj}
- {$L infblock.obj}
- {$L infcodes.obj}
- {$L infutil.obj}
- {$L inffast.obj}
- 
- procedure _tr_init; external;
- procedure _tr_tally; external;
- procedure _tr_flush_block; external;
- procedure _tr_align; external;
- procedure _tr_stored_block; external;
- function adler32; external;
- procedure inflate_blocks_new; external;
- procedure inflate_blocks; external;
- procedure inflate_blocks_reset; external;
- procedure inflate_blocks_free; external;
- procedure inflate_set_dictionary; external;
- procedure inflate_trees_bits; external;
- procedure inflate_trees_dynamic; external;
- procedure inflate_trees_fixed; external;
- procedure inflate_codes_new; external;
- procedure inflate_codes; external;
- procedure inflate_codes_free; external;
- procedure _inflate_mask; external;
- procedure inflate_flush; external;
- procedure inflate_fast; external;
- 
- procedure _memset(P: Pointer; B: Byte; count: Integer);cdecl;
- begin
-   FillChar(P^, count, B);
- end;
- 
- procedure _memcpy(dest, source: Pointer; count: Integer);cdecl;
- begin
-   Move(source^, dest^, count);
- end;
- 
- 
- 
- // deflate compresses data
- function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar;
-   recsize: Integer): Integer; external;
- function deflate(var strm: TZStreamRec; flush: Integer): Integer; external;
- function deflateEnd(var strm: TZStreamRec): Integer; external;
- 
- // inflate decompresses data
- function inflateInit_(var strm: TZStreamRec; version: PChar;
-   recsize: Integer): Integer; external;
- function inflate(var strm: TZStreamRec; flush: Integer): Integer; external;
- function inflateEnd(var strm: TZStreamRec): Integer; external;
- function inflateReset(var strm: TZStreamRec): Integer; external;
- 
- 
- function zcalloc(AppData: Pointer; Items, Size: Integer): Pointer;
- begin
-   GetMem(Result, Items*Size);
- end;
- 
- procedure zcfree(AppData, Block: Pointer);
- begin
-   FreeMem(Block);
- end;
- 
- function zlibCheck(code: Integer): Integer;
- begin
-   Result := code;
-   if code < 0 then
-     raise EZlibError.Create('error');    //!!
- end;
- 
- function CCheck(code: Integer): Integer;
- begin
-   Result := code;
-   if code < 0 then
-     raise ECompressionError.Create('error'); //!!
- end;
- 
- function DCheck(code: Integer): Integer;
- begin
-   Result := code;
-   if code < 0 then
-     raise EDecompressionError.Create('error');  //!!
- end;
- 
- procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
-                       out OutBuf: Pointer; out OutBytes: Integer);
- var
-   strm: TZStreamRec;
-   P: Pointer;
- begin
-   FillChar(strm, sizeof(strm), 0);
-   OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255;
-   GetMem(OutBuf, OutBytes);
-   try
-     strm.next_in := InBuf;
-     strm.avail_in := InBytes;
-     strm.next_out := OutBuf;
-     strm.avail_out := OutBytes;
-     CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm)));
-     try
-       while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do
-       begin
-         P := OutBuf;
-         Inc(OutBytes, 256);
-         ReallocMem(OutBuf, OutBytes);
-         strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
-         strm.avail_out := 256;
-       end;
-     finally
-       CCheck(deflateEnd(strm));
-     end;
-     ReallocMem(OutBuf, strm.total_out);
-     OutBytes := strm.total_out;
-   except
-     FreeMem(OutBuf);
-     raise
-   end;
- end;
- 
- 
- procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
-   OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);
- var
-   strm: TZStreamRec;
-   P: Pointer;
-   BufInc: Integer;
- begin
-   FillChar(strm, sizeof(strm), 0);
-   BufInc := (InBytes + 255) and not 255;
-   if OutEstimate = 0 then
-     OutBytes := BufInc
-   else
-     OutBytes := OutEstimate;
-   GetMem(OutBuf, OutBytes);
-   try
-     strm.next_in := InBuf;
-     strm.avail_in := InBytes;
-     strm.next_out := OutBuf;
-     strm.avail_out := OutBytes;
-     DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));
-     try
-       while DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END do
-       begin
-         P := OutBuf;
-         Inc(OutBytes, BufInc);
-         ReallocMem(OutBuf, OutBytes);
-         strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
-         strm.avail_out := BufInc;
-       end;
-     finally
-       DCheck(inflateEnd(strm));
-     end;
-     ReallocMem(OutBuf, strm.total_out);
-     OutBytes := strm.total_out;
-   except
-     FreeMem(OutBuf);
-     raise
-   end;
- end;
- 
- 
- // TCustomZlibStream
- 
- constructor TCustomZLibStream.Create(Strm: TStream);
- begin
-   inherited Create;
-   FStrm := Strm;
-   FStrmPos := Strm.Position;
- end;
- 
- procedure TCustomZLibStream.Progress(Sender: TObject);
- begin
-   if Assigned(FOnProgress) then FOnProgress(Sender);
- end;
- 
- 
- // TCompressionStream
- 
- constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel;
-   Dest: TStream);
- const
-   Levels: array [TCompressionLevel] of ShortInt =
-     (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION);
- begin
-   inherited Create(Dest);
-   FZRec.next_out := FBuffer;
-   FZRec.avail_out := sizeof(FBuffer);
-   CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec)));
- end;
- 
- destructor TCompressionStream.Destroy;
- begin
-   FZRec.next_in := nil;
-   FZRec.avail_in := 0;
-   try
-     if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
-     while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END)
-       and (FZRec.avail_out = 0) do
-     begin
-       FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
-       FZRec.next_out := FBuffer;
-       FZRec.avail_out := sizeof(FBuffer);
-     end;
-     if FZRec.avail_out < sizeof(FBuffer) then
-       FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out);
-   finally
-     deflateEnd(FZRec);
-   end;
-   inherited Destroy;
- end;
- 
- function TCompressionStream.Read(var Buffer; Count: Longint): Longint;
- begin
-   raise ECompressionError.Create('Invalid stream operation');
- end;
- 
- function TCompressionStream.Write(const Buffer; Count: Longint): Longint;
- begin
-   FZRec.next_in := @Buffer;
-   FZRec.avail_in := Count;
-   if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
-   while (FZRec.avail_in > 0) do
-   begin
-     CCheck(deflate(FZRec, 0));
-     if FZRec.avail_out = 0 then
-     begin
-       FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
-       FZRec.next_out := FBuffer;
-       FZRec.avail_out := sizeof(FBuffer);
-       FStrmPos := FStrm.Position;
-       Progress(Self);
-     end;
-   end;
-   Result := Count;
- end;
- 
- function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
- begin
-   if (Offset = 0) and (Origin = soFromCurrent) then
-     Result := FZRec.total_in
-   else
-     raise ECompressionError.Create('Invalid stream operation');
- end;
- 
- function TCompressionStream.GetCompressionRate: Single;
- begin
-   if FZRec.total_in = 0 then
-     Result := 0
-   else
-     Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0;
- end;
- 
- 
- // TDecompressionStream
- 
- constructor TDecompressionStream.Create(Source: TStream);
- begin
-   inherited Create(Source);
-   FZRec.next_in := FBuffer;
-   FZRec.avail_in := 0;
-   DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec)));
- end;
- 
- destructor TDecompressionStream.Destroy;
- begin
-   inflateEnd(FZRec);
-   inherited Destroy;
- end;
- 
- function TDecompressionStream.Read(var Buffer; Count: Longint): Longint;
- begin
-   FZRec.next_out := @Buffer;
-   FZRec.avail_out := Count;
-   if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
-   while (FZRec.avail_out > 0) do
-   begin
-     if FZRec.avail_in = 0 then
-     begin
-       FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer));
-       if FZRec.avail_in = 0 then
-         begin
-           Result := Count - FZRec.avail_out;
-           Exit;
-         end;
-       FZRec.next_in := FBuffer;
-       FStrmPos := FStrm.Position;
-       Progress(Self);
-     end;
-     DCheck(inflate(FZRec, 0));
-   end;
-   Result := Count;
- end;
- 
- function TDecompressionStream.Write(const Buffer; Count: Longint): Longint;
- begin
-   raise EDecompressionError.Create('Invalid stream operation');
- end;
- 
- function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
- var
-   I: Integer;
-   Buf: array [0..4095] of Char;
- begin
-   if (Offset = 0) and (Origin = soFromBeginning) then
-   begin
-     DCheck(inflateReset(FZRec));
-     FZRec.next_in := FBuffer;
-     FZRec.avail_in := 0;
-     FStrm.Position := 0;
-     FStrmPos := 0;
-   end
-   else if ( (Offset >= 0) and (Origin = soFromCurrent)) or
-           ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then
-   begin
-     if Origin = soFromBeginning then Dec(Offset, FZRec.total_out);
-     if Offset > 0 then
-     begin
-       for I := 1 to Offset div sizeof(Buf) do
-         ReadBuffer(Buf, sizeof(Buf));
-       ReadBuffer(Buf, Offset mod sizeof(Buf));
-     end;
-   end
-   else
-     raise EDecompressionError.Create('Invalid stream operation');
-   Result := FZRec.total_out;
- end;
- 
- end.
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi2/zlib32.bpr gcc-4.0.0/zlib/contrib/delphi2/zlib32.bpr
*** gcc-3.4.3/zlib/contrib/delphi2/zlib32.bpr	Mon Mar 11 21:49:39 2002
--- gcc-4.0.0/zlib/contrib/delphi2/zlib32.bpr	Thu Jan  1 00:00:00 1970
***************
*** 1,174 ****
- # ---------------------------------------------------------------------------
- !if !$d(BCB)
- BCB = $(MAKEDIR)\..
- !endif
- 
- # ---------------------------------------------------------------------------
- # IDE SECTION
- # ---------------------------------------------------------------------------
- # The following section of the project makefile is managed by the BCB IDE.
- # It is recommended to use the IDE to change any of the values in this
- # section.
- # ---------------------------------------------------------------------------
- 
- VERSION = BCB.03
- # ---------------------------------------------------------------------------
- PROJECT = zlib32.dll
- OBJFILES = zlib32.obj adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infblock.obj \
-   infcodes.obj inffast.obj inflate.obj inftrees.obj infutil.obj trees.obj \
-   uncompr.obj zutil.obj
- RESFILES =
- RESDEPEN = $(RESFILES)
- LIBFILES =
- LIBRARIES = 
- SPARELIBS = 
- DEFFILE =
- PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi ibsmp35.bpi bcbsmp35.bpi \
-   dclocx35.bpi QRPT35.bpi TEEUI35.bpi TEEDB35.bpi TEE35.bpi DSS35.bpi \
-   NMFAST35.bpi INETDB35.bpi INET35.bpi VCLMID35.bpi
- # ---------------------------------------------------------------------------
- PATHCPP = .;
- PATHASM = .;
- PATHPAS = .;
- PATHRC = .;
- DEBUGLIBPATH = $(BCB)\lib\debug
- RELEASELIBPATH = $(BCB)\lib\release
- # ---------------------------------------------------------------------------
- CFLAG1 = -WD -O2 -Ve -d -k- -vi -c -tWD
- CFLAG2 = -D_NO_VCL;ZLIB_DLL -I$(BCB)\include
- CFLAG3 = -ff -5
- PFLAGS = -D_NO_VCL;ZLIB_DLL -U$(BCB)\lib;$(RELEASELIBPATH) -I$(BCB)\include -$I- -v \
-   -JPHN -M
- RFLAGS = -D_NO_VCL;ZLIB_DLL -i$(BCB)\include
- AFLAGS = /i$(BCB)\include /d_NO_VCL /dZLIB_DLL /mx /w2 /zn
- LFLAGS = -L$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpd -x -Gi
- IFLAGS = -Gn -g
- # ---------------------------------------------------------------------------
- ALLOBJ = c0d32.obj $(OBJFILES)
- ALLRES = $(RESFILES)
- ALLLIB = $(LIBFILES)  import32.lib cw32mt.lib
- # ---------------------------------------------------------------------------
- !ifdef IDEOPTIONS
- 
- [Version Info]
- IncludeVerInfo=0
- AutoIncBuild=0
- MajorVer=1
- MinorVer=0
- Release=0
- Build=0
- Debug=0
- PreRelease=0
- Special=0
- Private=0
- DLL=1
- Locale=1040
- CodePage=1252
- 
- [Version Info Keys]
- CompanyName=
- FileDescription=DLL (GUI)
- FileVersion=1.0.0.0
- InternalName=
- LegalCopyright=
- LegalTrademarks=
- OriginalFilename=
- ProductName=
- ProductVersion=1.0.0.0
- Comments=
- 
- [HistoryLists\hlIncludePath]
- Count=1
- Item0=$(BCB)\include
- 
- [HistoryLists\hlLibraryPath]
- Count=1
- Item0=$(BCB)\lib
- 
- [HistoryLists\hlConditionals]
- Count=1
- Item0=_NO_VCL;ZLIB_DLL
- 
- [Debugging]
- DebugSourceDirs=
- 
- [Parameters]
- RunParams=
- HostApplication=
- 
- !endif
- 
- # ---------------------------------------------------------------------------
- # MAKE SECTION
- # ---------------------------------------------------------------------------
- # This section of the project file is not used by the BCB IDE.  It is for
- # the benefit of building from the command-line using the MAKE utility.
- # ---------------------------------------------------------------------------
- 
- .autodepend
- # ---------------------------------------------------------------------------
- !if !$d(BCC32)
- BCC32 = bcc32
- !endif
- 
- !if !$d(DCC32)
- DCC32 = dcc32
- !endif
- 
- !if !$d(TASM32)
- TASM32 = tasm32
- !endif
- 
- !if !$d(LINKER)
- LINKER = ilink32
- !endif
- 
- !if !$d(BRCC32)
- BRCC32 = brcc32
- !endif
- # ---------------------------------------------------------------------------
- !if $d(PATHCPP)
- .PATH.CPP = $(PATHCPP)
- .PATH.C   = $(PATHCPP)
- !endif
- 
- !if $d(PATHPAS)
- .PATH.PAS = $(PATHPAS)
- !endif
- 
- !if $d(PATHASM)
- .PATH.ASM = $(PATHASM)
- !endif
- 
- !if $d(PATHRC)
- .PATH.RC  = $(PATHRC)
- !endif
- # ---------------------------------------------------------------------------
- $(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE)
-     $(BCB)\BIN\$(LINKER) @&&!
-     $(LFLAGS) $(IFLAGS) +
-     $(ALLOBJ), +
-     $(PROJECT),, +
-     $(ALLLIB), +
-     $(DEFFILE), +
-     $(ALLRES)
- !
- # ---------------------------------------------------------------------------
- .pas.hpp:
-     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
- 
- .pas.obj:
-     $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
- 
- .cpp.obj:
-     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
- 
- .c.obj:
-     $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
- 
- .asm.obj:
-     $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@
- 
- .rc.res:
-     $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $<
- # ---------------------------------------------------------------------------
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/delphi2/zlib32.cpp gcc-4.0.0/zlib/contrib/delphi2/zlib32.cpp
*** gcc-3.4.3/zlib/contrib/delphi2/zlib32.cpp	Mon Mar 11 21:49:39 2002
--- gcc-4.0.0/zlib/contrib/delphi2/zlib32.cpp	Thu Jan  1 00:00:00 1970
***************
*** 1,42 ****
- 
- #include <windows.h>
- #pragma hdrstop
- #include <condefs.h>
- 
- 
- //---------------------------------------------------------------------------
- //   Important note about DLL memory management in a VCL DLL:
- //
- //
- //
- // If your DLL uses VCL and exports any functions that pass VCL String objects
- // (or structs/classes containing nested Strings) as parameter or function
- // results, you will need to build both your DLL project and any EXE projects
- // that use your DLL with the dynamic RTL (the RTL DLL).  This will change your
- // DLL and its calling EXE's to use BORLNDMM.DLL as their memory manager. In
- // these cases, the file BORLNDMM.DLL should be deployed along with your DLL
- // and the RTL DLL (CP3240MT.DLL). To avoid the requiring BORLNDMM.DLL in
- // these situations, pass string information using "char *" or ShortString
- // parameters and then link with the static RTL.
- //
- //---------------------------------------------------------------------------
- USEUNIT("adler32.c");
- USEUNIT("compress.c");
- USEUNIT("crc32.c");
- USEUNIT("deflate.c");
- USEUNIT("gzio.c");
- USEUNIT("infblock.c");
- USEUNIT("infcodes.c");
- USEUNIT("inffast.c");
- USEUNIT("inflate.c");
- USEUNIT("inftrees.c");
- USEUNIT("infutil.c");
- USEUNIT("trees.c");
- USEUNIT("uncompr.c");
- USEUNIT("zutil.c");
- //---------------------------------------------------------------------------
- #pragma argsused
- int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
- {
-         return 1;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/gzappend/gzappend.c gcc-4.0.0/zlib/contrib/gzappend/gzappend.c
*** gcc-3.4.3/zlib/contrib/gzappend/gzappend.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/gzappend/gzappend.c	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,500 ----
+ /* gzappend -- command to append to a gzip file
+ 
+   Copyright (C) 2003 Mark Adler, all rights reserved
+   version 1.1, 4 Nov 2003
+ 
+   This software is provided 'as-is', without any express or implied
+   warranty.  In no event will the author be held liable for any damages
+   arising from the use of this software.
+ 
+   Permission is granted to anyone to use this software for any purpose,
+   including commercial applications, and to alter it and redistribute it
+   freely, subject to the following restrictions:
+ 
+   1. The origin of this software must not be misrepresented; you must not
+      claim that you wrote the original software. If you use this software
+      in a product, an acknowledgment in the product documentation would be
+      appreciated but is not required.
+   2. Altered source versions must be plainly marked as such, and must not be
+      misrepresented as being the original software.
+   3. This notice may not be removed or altered from any source distribution.
+ 
+   Mark Adler    madler@alumni.caltech.edu
+  */
+ 
+ /*
+  * Change history:
+  *
+  * 1.0  19 Oct 2003     - First version
+  * 1.1   4 Nov 2003     - Expand and clarify some comments and notes
+  *                      - Add version and copyright to help
+  *                      - Send help to stdout instead of stderr
+  *                      - Add some preemptive typecasts
+  *                      - Add L to constants in lseek() calls
+  *                      - Remove some debugging information in error messages
+  *                      - Use new data_type definition for zlib 1.2.1
+  *                      - Simplfy and unify file operations
+  *                      - Finish off gzip file in gztack()
+  *                      - Use deflatePrime() instead of adding empty blocks
+  *                      - Keep gzip file clean on appended file read errors
+  *                      - Use in-place rotate instead of auxiliary buffer
+  *                        (Why you ask?  Because it was fun to write!)
+  */
+ 
+ /*
+    gzappend takes a gzip file and appends to it, compressing files from the
+    command line or data from stdin.  The gzip file is written to directly, to
+    avoid copying that file, in case it's large.  Note that this results in the
+    unfriendly behavior that if gzappend fails, the gzip file is corrupted.
+ 
+    This program was written to illustrate the use of the new Z_BLOCK option of
+    zlib 1.2.1's inflate() function.  This option returns from inflate() at each
+    block boundary to facilitate locating and modifying the last block bit at
+    the start of the final deflate block.  Also whether using Z_BLOCK or not,
+    another required feature of zlib 1.2.1 is that inflate() now provides the
+    number of unusued bits in the last input byte used.  gzappend will not work
+    with versions of zlib earlier than 1.2.1.
+ 
+    gzappend first decompresses the gzip file internally, discarding all but
+    the last 32K of uncompressed data, and noting the location of the last block
+    bit and the number of unused bits in the last byte of the compressed data.
+    The gzip trailer containing the CRC-32 and length of the uncompressed data
+    is verified.  This trailer will be later overwritten.
+ 
+    Then the last block bit is cleared by seeking back in the file and rewriting
+    the byte that contains it.  Seeking forward, the last byte of the compressed
+    data is saved along with the number of unused bits to initialize deflate.
+ 
+    A deflate process is initialized, using the last 32K of the uncompressed
+    data from the gzip file to initialize the dictionary.  If the total
+    uncompressed data was less than 32K, then all of it is used to initialize
+    the dictionary.  The deflate output bit buffer is also initialized with the
+    last bits from the original deflate stream.  From here on, the data to
+    append is simply compressed using deflate, and written to the gzip file.
+    When that is complete, the new CRC-32 and uncompressed length are written
+    as the trailer of the gzip file.
+  */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include "zlib.h"
+ 
+ #define local static
+ #define LGCHUNK 14
+ #define CHUNK (1U << LGCHUNK)
+ #define DSIZE 32768U
+ 
+ /* print an error message and terminate with extreme prejudice */
+ local void bye(char *msg1, char *msg2)
+ {
+     fprintf(stderr, "gzappend error: %s%s\n", msg1, msg2);
+     exit(1);
+ }
+ 
+ /* return the greatest common divisor of a and b using Euclid's algorithm,
+    modified to be fast when one argument much greater than the other, and
+    coded to avoid unnecessary swapping */
+ local unsigned gcd(unsigned a, unsigned b)
+ {
+     unsigned c;
+ 
+     while (a && b)
+         if (a > b) {
+             c = b;
+             while (a - c >= c)
+                 c <<= 1;
+             a -= c;
+         }
+         else {
+             c = a;
+             while (b - c >= c)
+                 c <<= 1;
+             b -= c;
+         }
+     return a + b;
+ }
+ 
+ /* rotate list[0..len-1] left by rot positions, in place */
+ local void rotate(unsigned char *list, unsigned len, unsigned rot)
+ {
+     unsigned char tmp;
+     unsigned cycles;
+     unsigned char *start, *last, *to, *from;
+ 
+     /* normalize rot and handle degenerate cases */
+     if (len < 2) return;
+     if (rot >= len) rot %= len;
+     if (rot == 0) return;
+ 
+     /* pointer to last entry in list */
+     last = list + (len - 1);
+ 
+     /* do simple left shift by one */
+     if (rot == 1) {
+         tmp = *list;
+         memcpy(list, list + 1, len - 1);
+         *last = tmp;
+         return;
+     }
+ 
+     /* do simple right shift by one */
+     if (rot == len - 1) {
+         tmp = *last;
+         memmove(list + 1, list, len - 1);
+         *list = tmp;
+         return;
+     }
+ 
+     /* otherwise do rotate as a set of cycles in place */
+     cycles = gcd(len, rot);             /* number of cycles */
+     do {
+         start = from = list + cycles;   /* start index is arbitrary */
+         tmp = *from;                    /* save entry to be overwritten */
+         for (;;) {
+             to = from;                  /* next step in cycle */
+             from += rot;                /* go right rot positions */
+             if (from > last) from -= len;   /* (pointer better not wrap) */
+             if (from == start) break;   /* all but one shifted */
+             *to = *from;                /* shift left */
+         }
+         *to = tmp;                      /* complete the circle */
+     } while (--cycles);
+ }
+ 
+ /* structure for gzip file read operations */
+ typedef struct {
+     int fd;                     /* file descriptor */
+     int size;                   /* 1 << size is bytes in buf */
+     unsigned left;              /* bytes available at next */
+     unsigned char *buf;         /* buffer */
+     unsigned char *next;        /* next byte in buffer */
+     char *name;                 /* file name for error messages */
+ } file;
+ 
+ /* reload buffer */
+ local int readin(file *in)
+ {
+     int len;
+ 
+     len = read(in->fd, in->buf, 1 << in->size);
+     if (len == -1) bye("error reading ", in->name);
+     in->left = (unsigned)len;
+     in->next = in->buf;
+     return len;
+ }
+ 
+ /* read from file in, exit if end-of-file */
+ local int readmore(file *in)
+ {
+     if (readin(in) == 0) bye("unexpected end of ", in->name);
+     return 0;
+ }
+ 
+ #define read1(in) (in->left == 0 ? readmore(in) : 0, \
+                    in->left--, *(in->next)++)
+ 
+ /* skip over n bytes of in */
+ local void skip(file *in, unsigned n)
+ {
+     unsigned bypass;
+ 
+     if (n > in->left) {
+         n -= in->left;
+         bypass = n & ~((1U << in->size) - 1);
+         if (bypass) {
+             if (lseek(in->fd, (off_t)bypass, SEEK_CUR) == -1)
+                 bye("seeking ", in->name);
+             n -= bypass;
+         }
+         readmore(in);
+         if (n > in->left)
+             bye("unexpected end of ", in->name);
+     }
+     in->left -= n;
+     in->next += n;
+ }
+ 
+ /* read a four-byte unsigned integer, little-endian, from in */
+ unsigned long read4(file *in)
+ {
+     unsigned long val;
+ 
+     val = read1(in);
+     val += (unsigned)read1(in) << 8;
+     val += (unsigned long)read1(in) << 16;
+     val += (unsigned long)read1(in) << 24;
+     return val;
+ }
+ 
+ /* skip over gzip header */
+ local void gzheader(file *in)
+ {
+     int flags;
+     unsigned n;
+ 
+     if (read1(in) != 31 || read1(in) != 139) bye(in->name, " not a gzip file");
+     if (read1(in) != 8) bye("unknown compression method in", in->name);
+     flags = read1(in);
+     if (flags & 0xe0) bye("unknown header flags set in", in->name);
+     skip(in, 6);
+     if (flags & 4) {
+         n = read1(in);
+         n += (unsigned)(read1(in)) << 8;
+         skip(in, n);
+     }
+     if (flags & 8) while (read1(in) != 0) ;
+     if (flags & 16) while (read1(in) != 0) ;
+     if (flags & 2) skip(in, 2);
+ }
+ 
+ /* decompress gzip file "name", return strm with a deflate stream ready to
+    continue compression of the data in the gzip file, and return a file
+    descriptor pointing to where to write the compressed data -- the deflate
+    stream is initialized to compress using level "level" */
+ local int gzscan(char *name, z_stream *strm, int level)
+ {
+     int ret, lastbit, left, full;
+     unsigned have;
+     unsigned long crc, tot;
+     unsigned char *window;
+     off_t lastoff, end;
+     file gz;
+ 
+     /* open gzip file */
+     gz.name = name;
+     gz.fd = open(name, O_RDWR, 0);
+     if (gz.fd == -1) bye("cannot open ", name);
+     gz.buf = malloc(CHUNK);
+     if (gz.buf == NULL) bye("out of memory", "");
+     gz.size = LGCHUNK;
+     gz.left = 0;
+ 
+     /* skip gzip header */
+     gzheader(&gz);
+ 
+     /* prepare to decompress */
+     window = malloc(DSIZE);
+     if (window == NULL) bye("out of memory", "");
+     strm->zalloc = Z_NULL;
+     strm->zfree = Z_NULL;
+     strm->opaque = Z_NULL;
+     ret = inflateInit2(strm, -15);
+     if (ret != Z_OK) bye("out of memory", " or library mismatch");
+ 
+     /* decompress the deflate stream, saving append information */
+     lastbit = 0;
+     lastoff = lseek(gz.fd, 0L, SEEK_CUR) - gz.left;
+     left = 0;
+     strm->avail_in = gz.left;
+     strm->next_in = gz.next;
+     crc = crc32(0L, Z_NULL, 0);
+     have = full = 0;
+     do {
+         /* if needed, get more input */
+         if (strm->avail_in == 0) {
+             readmore(&gz);
+             strm->avail_in = gz.left;
+             strm->next_in = gz.next;
+         }
+ 
+         /* set up output to next available section of sliding window */
+         strm->avail_out = DSIZE - have;
+         strm->next_out = window + have;
+ 
+         /* inflate and check for errors */
+         ret = inflate(strm, Z_BLOCK);
+         if (ret == Z_STREAM_ERROR) bye("internal stream error!", "");
+         if (ret == Z_MEM_ERROR) bye("out of memory", "");
+         if (ret == Z_DATA_ERROR)
+             bye("invalid compressed data--format violated in", name);
+ 
+         /* update crc and sliding window pointer */
+         crc = crc32(crc, window + have, DSIZE - have - strm->avail_out);
+         if (strm->avail_out)
+             have = DSIZE - strm->avail_out;
+         else {
+             have = 0;
+             full = 1;
+         }
+ 
+         /* process end of block */
+         if (strm->data_type & 128) {
+             if (strm->data_type & 64)
+                 left = strm->data_type & 0x1f;
+             else {
+                 lastbit = strm->data_type & 0x1f;
+                 lastoff = lseek(gz.fd, 0L, SEEK_CUR) - strm->avail_in;
+             }
+         }
+     } while (ret != Z_STREAM_END);
+     inflateEnd(strm);
+     gz.left = strm->avail_in;
+     gz.next = strm->next_in;
+ 
+     /* save the location of the end of the compressed data */
+     end = lseek(gz.fd, 0L, SEEK_CUR) - gz.left;
+ 
+     /* check gzip trailer and save total for deflate */
+     if (crc != read4(&gz))
+         bye("invalid compressed data--crc mismatch in ", name);
+     tot = strm->total_out;
+     if ((tot & 0xffffffffUL) != read4(&gz))
+         bye("invalid compressed data--length mismatch in", name);
+ 
+     /* if not at end of file, warn */
+     if (gz.left || readin(&gz))
+         fprintf(stderr,
+             "gzappend warning: junk at end of gzip file overwritten\n");
+ 
+     /* clear last block bit */
+     lseek(gz.fd, lastoff - (lastbit != 0), SEEK_SET);
+     if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name);
+     *gz.buf = (unsigned char)(*gz.buf ^ (1 << ((8 - lastbit) & 7)));
+     lseek(gz.fd, -1L, SEEK_CUR);
+     if (write(gz.fd, gz.buf, 1) != 1) bye("writing after seek to ", name);
+ 
+     /* if window wrapped, build dictionary from window by rotating */
+     if (full) {
+         rotate(window, DSIZE, have);
+         have = DSIZE;
+     }
+ 
+     /* set up deflate stream with window, crc, total_in, and leftover bits */
+     ret = deflateInit2(strm, level, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY);
+     if (ret != Z_OK) bye("out of memory", "");
+     deflateSetDictionary(strm, window, have);
+     strm->adler = crc;
+     strm->total_in = tot;
+     if (left) {
+         lseek(gz.fd, --end, SEEK_SET);
+         if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name);
+         deflatePrime(strm, 8 - left, *gz.buf);
+     }
+     lseek(gz.fd, end, SEEK_SET);
+ 
+     /* clean up and return */
+     free(window);
+     free(gz.buf);
+     return gz.fd;
+ }
+ 
+ /* append file "name" to gzip file gd using deflate stream strm -- if last
+    is true, then finish off the deflate stream at the end */
+ local void gztack(char *name, int gd, z_stream *strm, int last)
+ {
+     int fd, len, ret;
+     unsigned left;
+     unsigned char *in, *out;
+ 
+     /* open file to compress and append */
+     fd = 0;
+     if (name != NULL) {
+         fd = open(name, O_RDONLY, 0);
+         if (fd == -1)
+             fprintf(stderr, "gzappend warning: %s not found, skipping ...\n",
+                     name);
+     }
+ 
+     /* allocate buffers */
+     in = fd == -1 ? NULL : malloc(CHUNK);
+     out = malloc(CHUNK);
+     if (out == NULL) bye("out of memory", "");
+ 
+     /* compress input file and append to gzip file */
+     do {
+         /* get more input */
+         len = fd == -1 ? 0 : read(fd, in, CHUNK);
+         if (len == -1) {
+             fprintf(stderr,
+                     "gzappend warning: error reading %s, skipping rest ...\n",
+                     name);
+             len = 0;
+         }
+         strm->avail_in = (unsigned)len;
+         strm->next_in = in;
+         if (len) strm->adler = crc32(strm->adler, in, (unsigned)len);
+ 
+         /* compress and write all available output */
+         do {
+             strm->avail_out = CHUNK;
+             strm->next_out = out;
+             ret = deflate(strm, last && len == 0 ? Z_FINISH : Z_NO_FLUSH);
+             left = CHUNK - strm->avail_out;
+             while (left) {
+                 len = write(gd, out + CHUNK - strm->avail_out - left, left);
+                 if (len == -1) bye("writing gzip file", "");
+                 left -= (unsigned)len;
+             }
+         } while (strm->avail_out == 0 && ret != Z_STREAM_END);
+     } while (len != 0);
+ 
+     /* write trailer after last entry */
+     if (last) {
+         deflateEnd(strm);
+         out[0] = (unsigned char)(strm->adler);
+         out[1] = (unsigned char)(strm->adler >> 8);
+         out[2] = (unsigned char)(strm->adler >> 16);
+         out[3] = (unsigned char)(strm->adler >> 24);
+         out[4] = (unsigned char)(strm->total_in);
+         out[5] = (unsigned char)(strm->total_in >> 8);
+         out[6] = (unsigned char)(strm->total_in >> 16);
+         out[7] = (unsigned char)(strm->total_in >> 24);
+         len = 8;
+         do {
+             ret = write(gd, out + 8 - len, len);
+             if (ret == -1) bye("writing gzip file", "");
+             len -= ret;
+         } while (len);
+         close(gd);
+     }
+ 
+     /* clean up and return */
+     free(out);
+     if (in != NULL) free(in);
+     if (fd > 0) close(fd);
+ }
+ 
+ /* process the compression level option if present, scan the gzip file, and
+    append the specified files, or append the data from stdin if no other file
+    names are provided on the command line -- the gzip file must be writable
+    and seekable */
+ int main(int argc, char **argv)
+ {
+     int gd, level;
+     z_stream strm;
+ 
+     /* ignore command name */
+     argv++;
+ 
+     /* provide usage if no arguments */
+     if (*argv == NULL) {
+         printf("gzappend 1.1 (4 Nov 2003) Copyright (C) 2003 Mark Adler\n");
+         printf(
+             "usage: gzappend [-level] file.gz [ addthis [ andthis ... ]]\n");
+         return 0;
+     }
+ 
+     /* set compression level */
+     level = Z_DEFAULT_COMPRESSION;
+     if (argv[0][0] == '-') {
+         if (argv[0][1] < '0' || argv[0][1] > '9' || argv[0][2] != 0)
+             bye("invalid compression level", "");
+         level = argv[0][1] - '0';
+         if (*++argv == NULL) bye("no gzip file name after options", "");
+     }
+ 
+     /* prepare to append to gzip file */
+     gd = gzscan(*argv++, &strm, level);
+ 
+     /* append files on command line, or from stdin if none */
+     if (*argv == NULL)
+         gztack(NULL, gd, &strm, 1);
+     else
+         do {
+             gztack(*argv, gd, &strm, argv[1] == NULL);
+         } while (*++argv != NULL);
+     return 0;
+ }
diff -Nrcpad gcc-3.4.3/zlib/contrib/infback9/README gcc-4.0.0/zlib/contrib/infback9/README
*** gcc-3.4.3/zlib/contrib/infback9/README	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/infback9/README	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1 ----
+ See infback9.h for what this is and how to use it.
diff -Nrcpad gcc-3.4.3/zlib/contrib/infback9/infback9.c gcc-4.0.0/zlib/contrib/infback9/infback9.c
*** gcc-3.4.3/zlib/contrib/infback9/infback9.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/infback9/infback9.c	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,605 ----
+ /* infback9.c -- inflate deflate64 data using a call-back interface
+  * Copyright (C) 1995-2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
+ #include "zutil.h"
+ #include "infback9.h"
+ #include "inftree9.h"
+ #include "inflate9.h"
+ 
+ #define WSIZE 65536UL
+ 
+ /*
+    strm provides memory allocation functions in zalloc and zfree, or
+    Z_NULL to use the library memory allocation functions.
+ 
+    window is a user-supplied window and output buffer that is 64K bytes.
+  */
+ int ZEXPORT inflateBack9Init_(strm, window, version, stream_size)
+ z_stream FAR *strm;
+ unsigned char FAR *window;
+ const char *version;
+ int stream_size;
+ {
+     struct inflate_state FAR *state;
+ 
+     if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+         stream_size != (int)(sizeof(z_stream)))
+         return Z_VERSION_ERROR;
+     if (strm == Z_NULL || window == Z_NULL)
+         return Z_STREAM_ERROR;
+     strm->msg = Z_NULL;                 /* in case we return an error */
+     if (strm->zalloc == (alloc_func)0) {
+         strm->zalloc = zcalloc;
+         strm->opaque = (voidpf)0;
+     }
+     if (strm->zfree == (free_func)0) strm->zfree = zcfree;
+     state = (struct inflate_state FAR *)ZALLOC(strm, 1,
+                                                sizeof(struct inflate_state));
+     if (state == Z_NULL) return Z_MEM_ERROR;
+     Tracev((stderr, "inflate: allocated\n"));
+     strm->state = (voidpf)state;
+     state->window = window;
+     return Z_OK;
+ }
+ 
+ /*
+    Build and output length and distance decoding tables for fixed code
+    decoding.
+  */
+ #ifdef MAKEFIXED
+ #include <stdio.h>
+ 
+ void makefixed9(void)
+ {
+     unsigned sym, bits, low, size;
+     code *next, *lenfix, *distfix;
+     struct inflate_state state;
+     code fixed[544];
+ 
+     /* literal/length table */
+     sym = 0;
+     while (sym < 144) state.lens[sym++] = 8;
+     while (sym < 256) state.lens[sym++] = 9;
+     while (sym < 280) state.lens[sym++] = 7;
+     while (sym < 288) state.lens[sym++] = 8;
+     next = fixed;
+     lenfix = next;
+     bits = 9;
+     inflate_table9(LENS, state.lens, 288, &(next), &(bits), state.work);
+ 
+     /* distance table */
+     sym = 0;
+     while (sym < 32) state.lens[sym++] = 5;
+     distfix = next;
+     bits = 5;
+     inflate_table9(DISTS, state.lens, 32, &(next), &(bits), state.work);
+ 
+     /* write tables */
+     puts("    /* inffix9.h -- table for decoding deflate64 fixed codes");
+     puts("     * Generated automatically by makefixed9().");
+     puts("     */");
+     puts("");
+     puts("    /* WARNING: this file should *not* be used by applications.");
+     puts("       It is part of the implementation of this library and is");
+     puts("       subject to change. Applications should only use zlib.h.");
+     puts("     */");
+     puts("");
+     size = 1U << 9;
+     printf("    static const code lenfix[%u] = {", size);
+     low = 0;
+     for (;;) {
+         if ((low % 6) == 0) printf("\n        ");
+         printf("{%u,%u,%d}", lenfix[low].op, lenfix[low].bits,
+                lenfix[low].val);
+         if (++low == size) break;
+         putchar(',');
+     }
+     puts("\n    };");
+     size = 1U << 5;
+     printf("\n    static const code distfix[%u] = {", size);
+     low = 0;
+     for (;;) {
+         if ((low % 5) == 0) printf("\n        ");
+         printf("{%u,%u,%d}", distfix[low].op, distfix[low].bits,
+                distfix[low].val);
+         if (++low == size) break;
+         putchar(',');
+     }
+     puts("\n    };");
+ }
+ #endif /* MAKEFIXED */
+ 
+ /* Macros for inflateBack(): */
+ 
+ /* Clear the input bit accumulator */
+ #define INITBITS() \
+     do { \
+         hold = 0; \
+         bits = 0; \
+     } while (0)
+ 
+ /* Assure that some input is available.  If input is requested, but denied,
+    then return a Z_BUF_ERROR from inflateBack(). */
+ #define PULL() \
+     do { \
+         if (have == 0) { \
+             have = in(in_desc, &next); \
+             if (have == 0) { \
+                 next = Z_NULL; \
+                 ret = Z_BUF_ERROR; \
+                 goto inf_leave; \
+             } \
+         } \
+     } while (0)
+ 
+ /* Get a byte of input into the bit accumulator, or return from inflateBack()
+    with an error if there is no input available. */
+ #define PULLBYTE() \
+     do { \
+         PULL(); \
+         have--; \
+         hold += (unsigned long)(*next++) << bits; \
+         bits += 8; \
+     } while (0)
+ 
+ /* Assure that there are at least n bits in the bit accumulator.  If there is
+    not enough available input to do that, then return from inflateBack() with
+    an error. */
+ #define NEEDBITS(n) \
+     do { \
+         while (bits < (unsigned)(n)) \
+             PULLBYTE(); \
+     } while (0)
+ 
+ /* Return the low n bits of the bit accumulator (n <= 16) */
+ #define BITS(n) \
+     ((unsigned)hold & ((1U << (n)) - 1))
+ 
+ /* Remove n bits from the bit accumulator */
+ #define DROPBITS(n) \
+     do { \
+         hold >>= (n); \
+         bits -= (unsigned)(n); \
+     } while (0)
+ 
+ /* Remove zero to seven bits as needed to go to a byte boundary */
+ #define BYTEBITS() \
+     do { \
+         hold >>= bits & 7; \
+         bits -= bits & 7; \
+     } while (0)
+ 
+ /* Assure that some output space is available, by writing out the window
+    if it's full.  If the write fails, return from inflateBack() with a
+    Z_BUF_ERROR. */
+ #define ROOM() \
+     do { \
+         if (left == 0) { \
+             put = window; \
+             left = WSIZE; \
+             wrap = 1; \
+             if (out(out_desc, put, (unsigned)left)) { \
+                 ret = Z_BUF_ERROR; \
+                 goto inf_leave; \
+             } \
+         } \
+     } while (0)
+ 
+ /*
+    strm provides the memory allocation functions and window buffer on input,
+    and provides information on the unused input on return.  For Z_DATA_ERROR
+    returns, strm will also provide an error message.
+ 
+    in() and out() are the call-back input and output functions.  When
+    inflateBack() needs more input, it calls in().  When inflateBack() has
+    filled the window with output, or when it completes with data in the
+    window, it calls out() to write out the data.  The application must not
+    change the provided input until in() is called again or inflateBack()
+    returns.  The application must not change the window/output buffer until
+    inflateBack() returns.
+ 
+    in() and out() are called with a descriptor parameter provided in the
+    inflateBack() call.  This parameter can be a structure that provides the
+    information required to do the read or write, as well as accumulated
+    information on the input and output such as totals and check values.
+ 
+    in() should return zero on failure.  out() should return non-zero on
+    failure.  If either in() or out() fails, than inflateBack() returns a
+    Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it
+    was in() or out() that caused in the error.  Otherwise,  inflateBack()
+    returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
+    error, or Z_MEM_ERROR if it could not allocate memory for the state.
+    inflateBack() can also return Z_STREAM_ERROR if the input parameters
+    are not correct, i.e. strm is Z_NULL or the state was not initialized.
+  */
+ int ZEXPORT inflateBack9(strm, in, in_desc, out, out_desc)
+ z_stream FAR *strm;
+ in_func in;
+ void FAR *in_desc;
+ out_func out;
+ void FAR *out_desc;
+ {
+     struct inflate_state FAR *state;
+     unsigned char FAR *next;    /* next input */
+     unsigned char FAR *put;     /* next output */
+     unsigned have;              /* available input */
+     unsigned long left;         /* available output */
+     inflate_mode mode;          /* current inflate mode */
+     int lastblock;              /* true if processing last block */
+     int wrap;                   /* true if the window has wrapped */
+     unsigned long write;        /* window write index */
+     unsigned char FAR *window;  /* allocated sliding window, if needed */
+     unsigned long hold;         /* bit buffer */
+     unsigned bits;              /* bits in bit buffer */
+     unsigned extra;             /* extra bits needed */
+     unsigned long length;       /* literal or length of data to copy */
+     unsigned long offset;       /* distance back to copy string from */
+     unsigned long copy;         /* number of stored or match bytes to copy */
+     unsigned char FAR *from;    /* where to copy match bytes from */
+     code const FAR *lencode;    /* starting table for length/literal codes */
+     code const FAR *distcode;   /* starting table for distance codes */
+     unsigned lenbits;           /* index bits for lencode */
+     unsigned distbits;          /* index bits for distcode */
+     code this;                  /* current decoding table entry */
+     code last;                  /* parent table entry */
+     unsigned len;               /* length to copy for repeats, bits to drop */
+     int ret;                    /* return code */
+     static const unsigned short order[19] = /* permutation of code lengths */
+         {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+ #include "inffix9.h"
+ 
+     /* Check that the strm exists and that the state was initialized */
+     if (strm == Z_NULL || strm->state == Z_NULL)
+         return Z_STREAM_ERROR;
+     state = (struct inflate_state FAR *)strm->state;
+ 
+     /* Reset the state */
+     strm->msg = Z_NULL;
+     mode = TYPE;
+     lastblock = 0;
+     write = 0;
+     wrap = 0;
+     window = state->window;
+     next = strm->next_in;
+     have = next != Z_NULL ? strm->avail_in : 0;
+     hold = 0;
+     bits = 0;
+     put = window;
+     left = WSIZE;
+     lencode = Z_NULL;
+     distcode = Z_NULL;
+ 
+     /* Inflate until end of block marked as last */
+     for (;;)
+         switch (mode) {
+         case TYPE:
+             /* determine and dispatch block type */
+             if (lastblock) {
+                 BYTEBITS();
+                 mode = DONE;
+                 break;
+             }
+             NEEDBITS(3);
+             lastblock = BITS(1);
+             DROPBITS(1);
+             switch (BITS(2)) {
+             case 0:                             /* stored block */
+                 Tracev((stderr, "inflate:     stored block%s\n",
+                         lastblock ? " (last)" : ""));
+                 mode = STORED;
+                 break;
+             case 1:                             /* fixed block */
+                 lencode = lenfix;
+                 lenbits = 9;
+                 distcode = distfix;
+                 distbits = 5;
+                 Tracev((stderr, "inflate:     fixed codes block%s\n",
+                         lastblock ? " (last)" : ""));
+                 mode = LEN;                     /* decode codes */
+                 break;
+             case 2:                             /* dynamic block */
+                 Tracev((stderr, "inflate:     dynamic codes block%s\n",
+                         lastblock ? " (last)" : ""));
+                 mode = TABLE;
+                 break;
+             case 3:
+                 strm->msg = (char *)"invalid block type";
+                 mode = BAD;
+             }
+             DROPBITS(2);
+             break;
+ 
+         case STORED:
+             /* get and verify stored block length */
+             BYTEBITS();                         /* go to byte boundary */
+             NEEDBITS(32);
+             if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+                 strm->msg = (char *)"invalid stored block lengths";
+                 mode = BAD;
+                 break;
+             }
+             length = (unsigned)hold & 0xffff;
+             Tracev((stderr, "inflate:       stored length %lu\n",
+                     length));
+             INITBITS();
+ 
+             /* copy stored block from input to output */
+             while (length != 0) {
+                 copy = length;
+                 PULL();
+                 ROOM();
+                 if (copy > have) copy = have;
+                 if (copy > left) copy = left;
+                 zmemcpy(put, next, copy);
+                 have -= copy;
+                 next += copy;
+                 left -= copy;
+                 put += copy;
+                 length -= copy;
+             }
+             Tracev((stderr, "inflate:       stored end\n"));
+             mode = TYPE;
+             break;
+ 
+         case TABLE:
+             /* get dynamic table entries descriptor */
+             NEEDBITS(14);
+             state->nlen = BITS(5) + 257;
+             DROPBITS(5);
+             state->ndist = BITS(5) + 1;
+             DROPBITS(5);
+             state->ncode = BITS(4) + 4;
+             DROPBITS(4);
+             if (state->nlen > 286) {
+                 strm->msg = (char *)"too many length symbols";
+                 mode = BAD;
+                 break;
+             }
+             Tracev((stderr, "inflate:       table sizes ok\n"));
+ 
+             /* get code length code lengths (not a typo) */
+             state->have = 0;
+             while (state->have < state->ncode) {
+                 NEEDBITS(3);
+                 state->lens[order[state->have++]] = (unsigned short)BITS(3);
+                 DROPBITS(3);
+             }
+             while (state->have < 19)
+                 state->lens[order[state->have++]] = 0;
+             state->next = state->codes;
+             lencode = (code const FAR *)(state->next);
+             lenbits = 7;
+             ret = inflate_table9(CODES, state->lens, 19, &(state->next),
+                                 &(lenbits), state->work);
+             if (ret) {
+                 strm->msg = (char *)"invalid code lengths set";
+                 mode = BAD;
+                 break;
+             }
+             Tracev((stderr, "inflate:       code lengths ok\n"));
+ 
+             /* get length and distance code code lengths */
+             state->have = 0;
+             while (state->have < state->nlen + state->ndist) {
+                 for (;;) {
+                     this = lencode[BITS(lenbits)];
+                     if ((unsigned)(this.bits) <= bits) break;
+                     PULLBYTE();
+                 }
+                 if (this.val < 16) {
+                     NEEDBITS(this.bits);
+                     DROPBITS(this.bits);
+                     state->lens[state->have++] = this.val;
+                 }
+                 else {
+                     if (this.val == 16) {
+                         NEEDBITS(this.bits + 2);
+                         DROPBITS(this.bits);
+                         if (state->have == 0) {
+                             strm->msg = (char *)"invalid bit length repeat";
+                             mode = BAD;
+                             break;
+                         }
+                         len = (unsigned)(state->lens[state->have - 1]);
+                         copy = 3 + BITS(2);
+                         DROPBITS(2);
+                     }
+                     else if (this.val == 17) {
+                         NEEDBITS(this.bits + 3);
+                         DROPBITS(this.bits);
+                         len = 0;
+                         copy = 3 + BITS(3);
+                         DROPBITS(3);
+                     }
+                     else {
+                         NEEDBITS(this.bits + 7);
+                         DROPBITS(this.bits);
+                         len = 0;
+                         copy = 11 + BITS(7);
+                         DROPBITS(7);
+                     }
+                     if (state->have + copy > state->nlen + state->ndist) {
+                         strm->msg = (char *)"invalid bit length repeat";
+                         mode = BAD;
+                         break;
+                     }
+                     while (copy--)
+                         state->lens[state->have++] = (unsigned short)len;
+                 }
+             }
+ 
+             /* build code tables */
+             state->next = state->codes;
+             lencode = (code const FAR *)(state->next);
+             lenbits = 9;
+             ret = inflate_table9(LENS, state->lens, state->nlen,
+                             &(state->next), &(lenbits), state->work);
+             if (ret) {
+                 strm->msg = (char *)"invalid literal/lengths set";
+                 mode = BAD;
+                 break;
+             }
+             distcode = (code const FAR *)(state->next);
+             distbits = 6;
+             ret = inflate_table9(DISTS, state->lens + state->nlen,
+                             state->ndist, &(state->next), &(distbits),
+                             state->work);
+             if (ret) {
+                 strm->msg = (char *)"invalid distances set";
+                 mode = BAD;
+                 break;
+             }
+             Tracev((stderr, "inflate:       codes ok\n"));
+             mode = LEN;
+ 
+         case LEN:
+             /* get a literal, length, or end-of-block code */
+             for (;;) {
+                 this = lencode[BITS(lenbits)];
+                 if ((unsigned)(this.bits) <= bits) break;
+                 PULLBYTE();
+             }
+             if (this.op && (this.op & 0xf0) == 0) {
+                 last = this;
+                 for (;;) {
+                     this = lencode[last.val +
+                             (BITS(last.bits + last.op) >> last.bits)];
+                     if ((unsigned)(last.bits + this.bits) <= bits) break;
+                     PULLBYTE();
+                 }
+                 DROPBITS(last.bits);
+             }
+             DROPBITS(this.bits);
+             length = (unsigned)this.val;
+ 
+             /* process literal */
+             if (this.op == 0) {
+                 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
+                         "inflate:         literal '%c'\n" :
+                         "inflate:         literal 0x%02x\n", this.val));
+                 ROOM();
+                 *put++ = (unsigned char)(length);
+                 left--;
+                 mode = LEN;
+                 break;
+             }
+ 
+             /* process end of block */
+             if (this.op & 32) {
+                 Tracevv((stderr, "inflate:         end of block\n"));
+                 mode = TYPE;
+                 break;
+             }
+ 
+             /* invalid code */
+             if (this.op & 64) {
+                 strm->msg = (char *)"invalid literal/length code";
+                 mode = BAD;
+                 break;
+             }
+ 
+             /* length code -- get extra bits, if any */
+             extra = (unsigned)(this.op) & 31;
+             if (extra != 0) {
+                 NEEDBITS(extra);
+                 length += BITS(extra);
+                 DROPBITS(extra);
+             }
+             Tracevv((stderr, "inflate:         length %lu\n", length));
+ 
+             /* get distance code */
+             for (;;) {
+                 this = distcode[BITS(distbits)];
+                 if ((unsigned)(this.bits) <= bits) break;
+                 PULLBYTE();
+             }
+             if ((this.op & 0xf0) == 0) {
+                 last = this;
+                 for (;;) {
+                     this = distcode[last.val +
+                             (BITS(last.bits + last.op) >> last.bits)];
+                     if ((unsigned)(last.bits + this.bits) <= bits) break;
+                     PULLBYTE();
+                 }
+                 DROPBITS(last.bits);
+             }
+             DROPBITS(this.bits);
+             if (this.op & 64) {
+                 strm->msg = (char *)"invalid distance code";
+                 mode = BAD;
+                 break;
+             }
+             offset = (unsigned)this.val;
+ 
+             /* get distance extra bits, if any */
+             extra = (unsigned)(this.op) & 15;
+             if (extra != 0) {
+                 NEEDBITS(extra);
+                 offset += BITS(extra);
+                 DROPBITS(extra);
+             }
+             if (offset > WSIZE - (wrap ? 0: left)) {
+                 strm->msg = (char *)"invalid distance too far back";
+                 mode = BAD;
+                 break;
+             }
+             Tracevv((stderr, "inflate:         distance %lu\n", offset));
+ 
+             /* copy match from window to output */
+             do {
+                 ROOM();
+                 copy = WSIZE - offset;
+                 if (copy < left) {
+                     from = put + copy;
+                     copy = left - copy;
+                 }
+                 else {
+                     from = put - offset;
+                     copy = left;
+                 }
+                 if (copy > length) copy = length;
+                 length -= copy;
+                 left -= copy;
+                 do {
+                     *put++ = *from++;
+                 } while (--copy);
+             } while (length != 0);
+             break;
+ 
+         case DONE:
+             /* inflate stream terminated properly -- write leftover output */
+             ret = Z_STREAM_END;
+             if (left < WSIZE) {
+                 if (out(out_desc, window, (unsigned)(WSIZE - left)))
+                     ret = Z_BUF_ERROR;
+             }
+             goto inf_leave;
+ 
+         case BAD:
+             ret = Z_DATA_ERROR;
+             goto inf_leave;
+ 
+         default:                /* can't happen, but makes compilers happy */
+             ret = Z_STREAM_ERROR;
+             goto inf_leave;
+         }
+ 
+     /* Return unused input */
+   inf_leave:
+     strm->next_in = next;
+     strm->avail_in = have;
+     return ret;
+ }
+ 
+ int ZEXPORT inflateBack9End(strm)
+ z_stream FAR *strm;
+ {
+     if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+         return Z_STREAM_ERROR;
+     ZFREE(strm, strm->state);
+     strm->state = Z_NULL;
+     Tracev((stderr, "inflate: end\n"));
+     return Z_OK;
+ }
diff -Nrcpad gcc-3.4.3/zlib/contrib/infback9/infback9.h gcc-4.0.0/zlib/contrib/infback9/infback9.h
*** gcc-3.4.3/zlib/contrib/infback9/infback9.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/infback9/infback9.h	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,29 ----
+ /* infback9.h -- header for using inflateBack9 functions
+  * Copyright (C) 2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
+ /*
+  * This header file and associated patches provide a decoder for PKWare's
+  * undocumented deflate64 compression method (method 9).  Use with infback9.c,
+  * inftree9.h, inftree9.c, and inffix9.h.  These patches are not supported.
+  * This should be compiled with zlib, since it uses zutil.h and zutil.o.
+  * This code has not yet been tested on 16-bit architectures.  See the
+  * comments in zlib.h for inflateBack() usage.  These functions are used
+  * identically, except that there is no windowBits parameter, and a 64K
+  * window must be provided.  Also if int's are 16 bits, then a zero for
+  * the third parameter of the "out" function actually means 65536UL.
+  * zlib.h must be included before this header file.
+  */
+ 
+ ZEXTERN int ZEXPORT inflateBack9 OF((z_stream FAR *strm,
+                                     in_func in, void FAR *in_desc,
+                                     out_func out, void FAR *out_desc));
+ ZEXTERN int ZEXPORT inflateBack9End OF((z_stream FAR *strm));
+ ZEXTERN int ZEXPORT inflateBack9Init_ OF((z_stream FAR *strm,
+                                          unsigned char FAR *window,
+                                          const char *version,
+                                          int stream_size));
+ #define inflateBack9Init(strm, window) \
+         inflateBack9Init_((strm), (window), \
+         ZLIB_VERSION, sizeof(z_stream))
diff -Nrcpad gcc-3.4.3/zlib/contrib/infback9/inffix9.h gcc-4.0.0/zlib/contrib/infback9/inffix9.h
*** gcc-3.4.3/zlib/contrib/infback9/inffix9.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/infback9/inffix9.h	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,107 ----
+     /* inffix9.h -- table for decoding deflate64 fixed codes
+      * Generated automatically by makefixed9().
+      */
+ 
+     /* WARNING: this file should *not* be used by applications.
+        It is part of the implementation of this library and is
+        subject to change. Applications should only use zlib.h.
+      */
+ 
+     static const code lenfix[512] = {
+         {96,7,0},{0,8,80},{0,8,16},{132,8,115},{130,7,31},{0,8,112},
+         {0,8,48},{0,9,192},{128,7,10},{0,8,96},{0,8,32},{0,9,160},
+         {0,8,0},{0,8,128},{0,8,64},{0,9,224},{128,7,6},{0,8,88},
+         {0,8,24},{0,9,144},{131,7,59},{0,8,120},{0,8,56},{0,9,208},
+         {129,7,17},{0,8,104},{0,8,40},{0,9,176},{0,8,8},{0,8,136},
+         {0,8,72},{0,9,240},{128,7,4},{0,8,84},{0,8,20},{133,8,227},
+         {131,7,43},{0,8,116},{0,8,52},{0,9,200},{129,7,13},{0,8,100},
+         {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},
+         {128,7,8},{0,8,92},{0,8,28},{0,9,152},{132,7,83},{0,8,124},
+         {0,8,60},{0,9,216},{130,7,23},{0,8,108},{0,8,44},{0,9,184},
+         {0,8,12},{0,8,140},{0,8,76},{0,9,248},{128,7,3},{0,8,82},
+         {0,8,18},{133,8,163},{131,7,35},{0,8,114},{0,8,50},{0,9,196},
+         {129,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},{0,8,130},
+         {0,8,66},{0,9,228},{128,7,7},{0,8,90},{0,8,26},{0,9,148},
+         {132,7,67},{0,8,122},{0,8,58},{0,9,212},{130,7,19},{0,8,106},
+         {0,8,42},{0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},
+         {128,7,5},{0,8,86},{0,8,22},{65,8,0},{131,7,51},{0,8,118},
+         {0,8,54},{0,9,204},{129,7,15},{0,8,102},{0,8,38},{0,9,172},
+         {0,8,6},{0,8,134},{0,8,70},{0,9,236},{128,7,9},{0,8,94},
+         {0,8,30},{0,9,156},{132,7,99},{0,8,126},{0,8,62},{0,9,220},
+         {130,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
+         {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{133,8,131},
+         {130,7,31},{0,8,113},{0,8,49},{0,9,194},{128,7,10},{0,8,97},
+         {0,8,33},{0,9,162},{0,8,1},{0,8,129},{0,8,65},{0,9,226},
+         {128,7,6},{0,8,89},{0,8,25},{0,9,146},{131,7,59},{0,8,121},
+         {0,8,57},{0,9,210},{129,7,17},{0,8,105},{0,8,41},{0,9,178},
+         {0,8,9},{0,8,137},{0,8,73},{0,9,242},{128,7,4},{0,8,85},
+         {0,8,21},{144,8,3},{131,7,43},{0,8,117},{0,8,53},{0,9,202},
+         {129,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},
+         {0,8,69},{0,9,234},{128,7,8},{0,8,93},{0,8,29},{0,9,154},
+         {132,7,83},{0,8,125},{0,8,61},{0,9,218},{130,7,23},{0,8,109},
+         {0,8,45},{0,9,186},{0,8,13},{0,8,141},{0,8,77},{0,9,250},
+         {128,7,3},{0,8,83},{0,8,19},{133,8,195},{131,7,35},{0,8,115},
+         {0,8,51},{0,9,198},{129,7,11},{0,8,99},{0,8,35},{0,9,166},
+         {0,8,3},{0,8,131},{0,8,67},{0,9,230},{128,7,7},{0,8,91},
+         {0,8,27},{0,9,150},{132,7,67},{0,8,123},{0,8,59},{0,9,214},
+         {130,7,19},{0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},
+         {0,8,75},{0,9,246},{128,7,5},{0,8,87},{0,8,23},{77,8,0},
+         {131,7,51},{0,8,119},{0,8,55},{0,9,206},{129,7,15},{0,8,103},
+         {0,8,39},{0,9,174},{0,8,7},{0,8,135},{0,8,71},{0,9,238},
+         {128,7,9},{0,8,95},{0,8,31},{0,9,158},{132,7,99},{0,8,127},
+         {0,8,63},{0,9,222},{130,7,27},{0,8,111},{0,8,47},{0,9,190},
+         {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},
+         {0,8,16},{132,8,115},{130,7,31},{0,8,112},{0,8,48},{0,9,193},
+         {128,7,10},{0,8,96},{0,8,32},{0,9,161},{0,8,0},{0,8,128},
+         {0,8,64},{0,9,225},{128,7,6},{0,8,88},{0,8,24},{0,9,145},
+         {131,7,59},{0,8,120},{0,8,56},{0,9,209},{129,7,17},{0,8,104},
+         {0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},{0,9,241},
+         {128,7,4},{0,8,84},{0,8,20},{133,8,227},{131,7,43},{0,8,116},
+         {0,8,52},{0,9,201},{129,7,13},{0,8,100},{0,8,36},{0,9,169},
+         {0,8,4},{0,8,132},{0,8,68},{0,9,233},{128,7,8},{0,8,92},
+         {0,8,28},{0,9,153},{132,7,83},{0,8,124},{0,8,60},{0,9,217},
+         {130,7,23},{0,8,108},{0,8,44},{0,9,185},{0,8,12},{0,8,140},
+         {0,8,76},{0,9,249},{128,7,3},{0,8,82},{0,8,18},{133,8,163},
+         {131,7,35},{0,8,114},{0,8,50},{0,9,197},{129,7,11},{0,8,98},
+         {0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
+         {128,7,7},{0,8,90},{0,8,26},{0,9,149},{132,7,67},{0,8,122},
+         {0,8,58},{0,9,213},{130,7,19},{0,8,106},{0,8,42},{0,9,181},
+         {0,8,10},{0,8,138},{0,8,74},{0,9,245},{128,7,5},{0,8,86},
+         {0,8,22},{65,8,0},{131,7,51},{0,8,118},{0,8,54},{0,9,205},
+         {129,7,15},{0,8,102},{0,8,38},{0,9,173},{0,8,6},{0,8,134},
+         {0,8,70},{0,9,237},{128,7,9},{0,8,94},{0,8,30},{0,9,157},
+         {132,7,99},{0,8,126},{0,8,62},{0,9,221},{130,7,27},{0,8,110},
+         {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},
+         {96,7,0},{0,8,81},{0,8,17},{133,8,131},{130,7,31},{0,8,113},
+         {0,8,49},{0,9,195},{128,7,10},{0,8,97},{0,8,33},{0,9,163},
+         {0,8,1},{0,8,129},{0,8,65},{0,9,227},{128,7,6},{0,8,89},
+         {0,8,25},{0,9,147},{131,7,59},{0,8,121},{0,8,57},{0,9,211},
+         {129,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},{0,8,137},
+         {0,8,73},{0,9,243},{128,7,4},{0,8,85},{0,8,21},{144,8,3},
+         {131,7,43},{0,8,117},{0,8,53},{0,9,203},{129,7,13},{0,8,101},
+         {0,8,37},{0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},
+         {128,7,8},{0,8,93},{0,8,29},{0,9,155},{132,7,83},{0,8,125},
+         {0,8,61},{0,9,219},{130,7,23},{0,8,109},{0,8,45},{0,9,187},
+         {0,8,13},{0,8,141},{0,8,77},{0,9,251},{128,7,3},{0,8,83},
+         {0,8,19},{133,8,195},{131,7,35},{0,8,115},{0,8,51},{0,9,199},
+         {129,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
+         {0,8,67},{0,9,231},{128,7,7},{0,8,91},{0,8,27},{0,9,151},
+         {132,7,67},{0,8,123},{0,8,59},{0,9,215},{130,7,19},{0,8,107},
+         {0,8,43},{0,9,183},{0,8,11},{0,8,139},{0,8,75},{0,9,247},
+         {128,7,5},{0,8,87},{0,8,23},{77,8,0},{131,7,51},{0,8,119},
+         {0,8,55},{0,9,207},{129,7,15},{0,8,103},{0,8,39},{0,9,175},
+         {0,8,7},{0,8,135},{0,8,71},{0,9,239},{128,7,9},{0,8,95},
+         {0,8,31},{0,9,159},{132,7,99},{0,8,127},{0,8,63},{0,9,223},
+         {130,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},
+         {0,8,79},{0,9,255}
+     };
+ 
+     static const code distfix[32] = {
+         {128,5,1},{135,5,257},{131,5,17},{139,5,4097},{129,5,5},
+         {137,5,1025},{133,5,65},{141,5,16385},{128,5,3},{136,5,513},
+         {132,5,33},{140,5,8193},{130,5,9},{138,5,2049},{134,5,129},
+         {142,5,32769},{128,5,2},{135,5,385},{131,5,25},{139,5,6145},
+         {129,5,7},{137,5,1537},{133,5,97},{141,5,24577},{128,5,4},
+         {136,5,769},{132,5,49},{140,5,12289},{130,5,13},{138,5,3073},
+         {134,5,193},{142,5,49153}
+     };
diff -Nrcpad gcc-3.4.3/zlib/contrib/infback9/inflate9.h gcc-4.0.0/zlib/contrib/infback9/inflate9.h
*** gcc-3.4.3/zlib/contrib/infback9/inflate9.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/infback9/inflate9.h	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,47 ----
+ /* inflate9.h -- internal inflate state definition
+  * Copyright (C) 1995-2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
+ /* WARNING: this file should *not* be used by applications. It is
+    part of the implementation of the compression library and is
+    subject to change. Applications should only use zlib.h.
+  */
+ 
+ /* Possible inflate modes between inflate() calls */
+ typedef enum {
+         TYPE,       /* i: waiting for type bits, including last-flag bit */
+         STORED,     /* i: waiting for stored size (length and complement) */
+         TABLE,      /* i: waiting for dynamic block table lengths */
+             LEN,        /* i: waiting for length/lit code */
+     DONE,       /* finished check, done -- remain here until reset */
+     BAD         /* got a data error -- remain here until reset */
+ } inflate_mode;
+ 
+ /*
+     State transitions between above modes -
+ 
+     (most modes can go to the BAD mode -- not shown for clarity)
+ 
+     Read deflate blocks:
+             TYPE -> STORED or TABLE or LEN or DONE
+             STORED -> TYPE
+             TABLE -> LENLENS -> CODELENS -> LEN
+     Read deflate codes:
+                 LEN -> LEN or TYPE
+  */
+ 
+ /* state maintained between inflate() calls.  Approximately 7K bytes. */
+ struct inflate_state {
+         /* sliding window */
+     unsigned char FAR *window;  /* allocated sliding window, if needed */
+         /* dynamic table building */
+     unsigned ncode;             /* number of code length code lengths */
+     unsigned nlen;              /* number of length code lengths */
+     unsigned ndist;             /* number of distance code lengths */
+     unsigned have;              /* number of code lengths in lens[] */
+     code FAR *next;             /* next available space in codes[] */
+     unsigned short lens[320];   /* temporary storage for code lengths */
+     unsigned short work[288];   /* work area for code table building */
+     code codes[ENOUGH];         /* space for code tables */
+ };
diff -Nrcpad gcc-3.4.3/zlib/contrib/infback9/inftree9.c gcc-4.0.0/zlib/contrib/infback9/inftree9.c
*** gcc-3.4.3/zlib/contrib/infback9/inftree9.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/infback9/inftree9.c	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,323 ----
+ /* inftree9.c -- generate Huffman trees for efficient decoding
+  * Copyright (C) 1995-2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
+ #include "zutil.h"
+ #include "inftree9.h"
+ 
+ #define MAXBITS 15
+ 
+ const char inflate9_copyright[] =
+    " inflate9 1.2.1 Copyright 1995-2003 Mark Adler ";
+ /*
+   If you use the zlib library in a product, an acknowledgment is welcome
+   in the documentation of your product. If for some reason you cannot
+   include such an acknowledgment, I would appreciate that you keep this
+   copyright string in the executable of your product.
+  */
+ 
+ /*
+    Build a set of tables to decode the provided canonical Huffman code.
+    The code lengths are lens[0..codes-1].  The result starts at *table,
+    whose indices are 0..2^bits-1.  work is a writable array of at least
+    lens shorts, which is used as a work area.  type is the type of code
+    to be generated, CODES, LENS, or DISTS.  On return, zero is success,
+    -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
+    on return points to the next available entry's address.  bits is the
+    requested root table index bits, and on return it is the actual root
+    table index bits.  It will differ if the request is greater than the
+    longest code or if it is less than the shortest code.
+  */
+ int inflate_table9(type, lens, codes, table, bits, work)
+ codetype type;
+ unsigned short FAR *lens;
+ unsigned codes;
+ code FAR * FAR *table;
+ unsigned FAR *bits;
+ unsigned short FAR *work;
+ {
+     unsigned len;               /* a code's length in bits */
+     unsigned sym;               /* index of code symbols */
+     unsigned min, max;          /* minimum and maximum code lengths */
+     unsigned root;              /* number of index bits for root table */
+     unsigned curr;              /* number of index bits for current table */
+     unsigned drop;              /* code bits to drop for sub-table */
+     int left;                   /* number of prefix codes available */
+     unsigned used;              /* code entries in table used */
+     unsigned huff;              /* Huffman code */
+     unsigned incr;              /* for incrementing code, index */
+     unsigned fill;              /* index for replicating entries */
+     unsigned low;               /* low bits for current root entry */
+     unsigned mask;              /* mask for low root bits */
+     code this;                  /* table entry for duplication */
+     code FAR *next;             /* next available space in table */
+     const unsigned short FAR *base;     /* base value table to use */
+     const unsigned short FAR *extra;    /* extra bits table to use */
+     int end;                    /* use base and extra for symbol > end */
+     unsigned short count[MAXBITS+1];    /* number of codes of each length */
+     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
+     static const unsigned short lbase[31] = { /* Length codes 257..285 base */
+         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, 3, 0, 0};
+     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
+         128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
+         130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,
+         133, 133, 133, 133, 144, 76, 66};
+     static const unsigned short dbase[32] = { /* Distance codes 0..31 base */
+         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, 32769, 49153};
+     static const unsigned short dext[32] = { /* Distance codes 0..31 extra */
+         128, 128, 128, 128, 129, 129, 130, 130, 131, 131, 132, 132,
+         133, 133, 134, 134, 135, 135, 136, 136, 137, 137, 138, 138,
+         139, 139, 140, 140, 141, 141, 142, 142};
+ 
+     /*
+        Process a set of code lengths to create a canonical Huffman code.  The
+        code lengths are lens[0..codes-1].  Each length corresponds to the
+        symbols 0..codes-1.  The Huffman code is generated by first sorting the
+        symbols by length from short to long, and retaining the symbol order
+        for codes with equal lengths.  Then the code starts with all zero bits
+        for the first code of the shortest length, and the codes are integer
+        increments for the same length, and zeros are appended as the length
+        increases.  For the deflate format, these bits are stored backwards
+        from their more natural integer increment ordering, and so when the
+        decoding tables are built in the large loop below, the integer codes
+        are incremented backwards.
+ 
+        This routine assumes, but does not check, that all of the entries in
+        lens[] are in the range 0..MAXBITS.  The caller must assure this.
+        1..MAXBITS is interpreted as that code length.  zero means that that
+        symbol does not occur in this code.
+ 
+        The codes are sorted by computing a count of codes for each length,
+        creating from that a table of starting indices for each length in the
+        sorted table, and then entering the symbols in order in the sorted
+        table.  The sorted table is work[], with that space being provided by
+        the caller.
+ 
+        The length counts are used for other purposes as well, i.e. finding
+        the minimum and maximum length codes, determining if there are any
+        codes at all, checking for a valid set of lengths, and looking ahead
+        at length counts to determine sub-table sizes when building the
+        decoding tables.
+      */
+ 
+     /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+     for (len = 0; len <= MAXBITS; len++)
+         count[len] = 0;
+     for (sym = 0; sym < codes; sym++)
+         count[lens[sym]]++;
+ 
+     /* bound code lengths, force root to be within code lengths */
+     root = *bits;
+     for (max = MAXBITS; max >= 1; max--)
+         if (count[max] != 0) break;
+     if (root > max) root = max;
+     if (max == 0) return -1;            /* no codes! */
+     for (min = 1; min <= MAXBITS; min++)
+         if (count[min] != 0) break;
+     if (root < min) root = min;
+ 
+     /* check for an over-subscribed or incomplete set of lengths */
+     left = 1;
+     for (len = 1; len <= MAXBITS; len++) {
+         left <<= 1;
+         left -= count[len];
+         if (left < 0) return -1;        /* over-subscribed */
+     }
+     if (left > 0 && (type == CODES || (codes - count[0] != 1)))
+         return -1;                      /* incomplete set */
+ 
+     /* generate offsets into symbol table for each length for sorting */
+     offs[1] = 0;
+     for (len = 1; len < MAXBITS; len++)
+         offs[len + 1] = offs[len] + count[len];
+ 
+     /* sort symbols by length, by symbol order within each length */
+     for (sym = 0; sym < codes; sym++)
+         if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
+ 
+     /*
+        Create and fill in decoding tables.  In this loop, the table being
+        filled is at next and has curr index bits.  The code being used is huff
+        with length len.  That code is converted to an index by dropping drop
+        bits off of the bottom.  For codes where len is less than drop + curr,
+        those top drop + curr - len bits are incremented through all values to
+        fill the table with replicated entries.
+ 
+        root is the number of index bits for the root table.  When len exceeds
+        root, sub-tables are created pointed to by the root entry with an index
+        of the low root bits of huff.  This is saved in low to check for when a
+        new sub-table should be started.  drop is zero when the root table is
+        being filled, and drop is root when sub-tables are being filled.
+ 
+        When a new sub-table is needed, it is necessary to look ahead in the
+        code lengths to determine what size sub-table is needed.  The length
+        counts are used for this, and so count[] is decremented as codes are
+        entered in the tables.
+ 
+        used keeps track of how many table entries have been allocated from the
+        provided *table space.  It is checked when a LENS table is being made
+        against the space in *table, ENOUGH, minus the maximum space needed by
+        the worst case distance code, MAXD.  This should never happen, but the
+        sufficiency of ENOUGH has not been proven exhaustively, hence the check.
+        This assumes that when type == LENS, bits == 9.
+ 
+        sym increments through all symbols, and the loop terminates when
+        all codes of length max, i.e. all codes, have been processed.  This
+        routine permits incomplete codes, so another loop after this one fills
+        in the rest of the decoding tables with invalid code markers.
+      */
+ 
+     /* set up for code type */
+     switch (type) {
+     case CODES:
+         base = extra = work;    /* dummy value--not used */
+         end = 19;
+         break;
+     case LENS:
+         base = lbase;
+         base -= 257;
+         extra = lext;
+         extra -= 257;
+         end = 256;
+         break;
+     default:            /* DISTS */
+         base = dbase;
+         extra = dext;
+         end = -1;
+     }
+ 
+     /* initialize state for loop */
+     huff = 0;                   /* starting code */
+     sym = 0;                    /* starting code symbol */
+     len = min;                  /* starting code length */
+     next = *table;              /* current table to fill in */
+     curr = root;                /* current table index bits */
+     drop = 0;                   /* current bits to drop from code for index */
+     low = (unsigned)(-1);       /* trigger new sub-table when len > root */
+     used = 1U << root;          /* use root table entries */
+     mask = used - 1;            /* mask for comparing low */
+ 
+     /* check available table space */
+     if (type == LENS && used >= ENOUGH - MAXD)
+         return 1;
+ 
+     /* process all codes and make table entries */
+     for (;;) {
+         /* create table entry */
+         this.bits = (unsigned char)(len - drop);
+         if ((int)(work[sym]) < end) {
+             this.op = (unsigned char)0;
+             this.val = work[sym];
+         }
+         else if ((int)(work[sym]) > end) {
+             this.op = (unsigned char)(extra[work[sym]]);
+             this.val = base[work[sym]];
+         }
+         else {
+             this.op = (unsigned char)(32 + 64);         /* end of block */
+             this.val = 0;
+         }
+ 
+         /* replicate for those indices with low len bits equal to huff */
+         incr = 1U << (len - drop);
+         fill = 1U << curr;
+         do {
+             fill -= incr;
+             next[(huff >> drop) + fill] = this;
+         } while (fill != 0);
+ 
+         /* backwards increment the len-bit code huff */
+         incr = 1U << (len - 1);
+         while (huff & incr)
+             incr >>= 1;
+         if (incr != 0) {
+             huff &= incr - 1;
+             huff += incr;
+         }
+         else
+             huff = 0;
+ 
+         /* go to next symbol, update count, len */
+         sym++;
+         if (--(count[len]) == 0) {
+             if (len == max) break;
+             len = lens[work[sym]];
+         }
+ 
+         /* create new sub-table if needed */
+         if (len > root && (huff & mask) != low) {
+             /* if first time, transition to sub-tables */
+             if (drop == 0)
+                 drop = root;
+ 
+             /* increment past last table */
+             next += 1U << curr;
+ 
+             /* determine length of next table */
+             curr = len - drop;
+             left = (int)(1 << curr);
+             while (curr + drop < max) {
+                 left -= count[curr + drop];
+                 if (left <= 0) break;
+                 curr++;
+                 left <<= 1;
+             }
+ 
+             /* check for enough space */
+             used += 1U << curr;
+             if (type == LENS && used >= ENOUGH - MAXD)
+                 return 1;
+ 
+             /* point entry in root table to sub-table */
+             low = huff & mask;
+             (*table)[low].op = (unsigned char)curr;
+             (*table)[low].bits = (unsigned char)root;
+             (*table)[low].val = (unsigned short)(next - *table);
+         }
+     }
+ 
+     /*
+        Fill in rest of table for incomplete codes.  This loop is similar to the
+        loop above in incrementing huff for table indices.  It is assumed that
+        len is equal to curr + drop, so there is no loop needed to increment
+        through high index bits.  When the current sub-table is filled, the loop
+        drops back to the root table to fill in any remaining entries there.
+      */
+     this.op = (unsigned char)64;                /* invalid code marker */
+     this.bits = (unsigned char)(len - drop);
+     this.val = (unsigned short)0;
+     while (huff != 0) {
+         /* when done with sub-table, drop back to root table */
+         if (drop != 0 && (huff & mask) != low) {
+             drop = 0;
+             len = root;
+             next = *table;
+             curr = root;
+             this.bits = (unsigned char)len;
+         }
+ 
+         /* put invalid code marker in table */
+         next[huff >> drop] = this;
+ 
+         /* backwards increment the len-bit code huff */
+         incr = 1U << (len - 1);
+         while (huff & incr)
+             incr >>= 1;
+         if (incr != 0) {
+             huff &= incr - 1;
+             huff += incr;
+         }
+         else
+             huff = 0;
+     }
+ 
+     /* set return parameters */
+     *table += used;
+     *bits = root;
+     return 0;
+ }
diff -Nrcpad gcc-3.4.3/zlib/contrib/infback9/inftree9.h gcc-4.0.0/zlib/contrib/infback9/inftree9.h
*** gcc-3.4.3/zlib/contrib/infback9/inftree9.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/infback9/inftree9.h	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,55 ----
+ /* inftree9.h -- header to use inftree9.c
+  * Copyright (C) 1995-2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
+ /* WARNING: this file should *not* be used by applications. It is
+    part of the implementation of the compression library and is
+    subject to change. Applications should only use zlib.h.
+  */
+ 
+ /* Structure for decoding tables.  Each entry provides either the
+    information needed to do the operation requested by the code that
+    indexed that table entry, or it provides a pointer to another
+    table that indexes more bits of the code.  op indicates whether
+    the entry is a pointer to another table, a literal, a length or
+    distance, an end-of-block, or an invalid code.  For a table
+    pointer, the low four bits of op is the number of index bits of
+    that table.  For a length or distance, the low four bits of op
+    is the number of extra bits to get after the code.  bits is
+    the number of bits in this code or part of the code to drop off
+    of the bit buffer.  val is the actual byte to output in the case
+    of a literal, the base length or distance, or the offset from
+    the current table to the next table.  Each entry is four bytes. */
+ typedef struct {
+     unsigned char op;           /* operation, extra bits, table bits */
+     unsigned char bits;         /* bits in this part of the code */
+     unsigned short val;         /* offset in table or code value */
+ } code;
+ 
+ /* op values as set by inflate_table():
+     00000000 - literal
+     0000tttt - table link, tttt != 0 is the number of table index bits
+     100eeeee - length or distance, eeee is the number of extra bits
+     01100000 - end of block
+     01000000 - invalid code
+  */
+ 
+ /* Maximum size of dynamic tree.  The maximum found in a long but non-
+    exhaustive search was 1004 code structures (850 for length/literals
+    and 154 for distances, the latter actually the result of an
+    exhaustive search).  The true maximum is not known, but the value
+    below is more than safe. */
+ #define ENOUGH 1440
+ #define MAXD 154
+ 
+ /* Type of code to build for inftable() */
+ typedef enum {
+     CODES,
+     LENS,
+     DISTS
+ } codetype;
+ 
+ extern int inflate_table9 OF((codetype type, unsigned short FAR *lens,
+                              unsigned codes, code FAR * FAR *table,
+                              unsigned FAR *bits, unsigned short FAR *work));
diff -Nrcpad gcc-3.4.3/zlib/contrib/inflate86/inffas86.c gcc-4.0.0/zlib/contrib/inflate86/inffas86.c
*** gcc-3.4.3/zlib/contrib/inflate86/inffas86.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/inflate86/inffas86.c	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,783 ----
+ /* inffas86.c is a hand tuned assembler version of
+  *
+  * inffast.c -- fast decoding
+  * Copyright (C) 1995-2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  *
+  * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+  * Please use the copyright conditions above.
+  *
+  * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from
+  * the gcc -S output of zlib-1.2.0/inffast.c.  Zlib-1.2.0 is in beta release at
+  * the moment.  I have successfully compiled and tested this code with gcc2.96,
+  * gcc3.2, icc5.0, msvc6.0.  It is very close to the speed of inffast.S
+  * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX
+  * enabled.  I will attempt to merge the MMX code into this version.  Newer
+  * versions of this and inffast.S can be found at
+  * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
+  */
+ 
+ #include "zutil.h"
+ #include "inftrees.h"
+ #include "inflate.h"
+ #include "inffast.h"
+ 
+ /* Mark Adler's comments from inffast.c: */
+ 
+ /*
+    Decode literal, length, and distance codes and write out the resulting
+    literal and match bytes until either not enough input or output is
+    available, an end-of-block is encountered, or a data error is encountered.
+    When large enough input and output buffers are supplied to inflate(), for
+    example, a 16K input buffer and a 64K output buffer, more than 95% of the
+    inflate execution time is spent in this routine.
+ 
+    Entry assumptions:
+ 
+         state->mode == LEN
+         strm->avail_in >= 6
+         strm->avail_out >= 258
+         start >= strm->avail_out
+         state->bits < 8
+ 
+    On return, state->mode is one of:
+ 
+         LEN -- ran out of enough output space or enough available input
+         TYPE -- reached end of block code, inflate() to interpret next block
+         BAD -- error in block data
+ 
+    Notes:
+ 
+     - The maximum input bits used by a length/distance pair is 15 bits for the
+       length code, 5 bits for the length extra, 15 bits for the distance code,
+       and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
+       Therefore if strm->avail_in >= 6, then there is enough input to avoid
+       checking for available input while decoding.
+ 
+     - The maximum bytes that a single length/distance pair can output is 258
+       bytes, which is the maximum length that can be coded.  inflate_fast()
+       requires strm->avail_out >= 258 for each loop to avoid checking for
+       output space.
+  */
+ void inflate_fast(strm, start)
+ z_streamp strm;
+ unsigned start;         /* inflate()'s starting value for strm->avail_out */
+ {
+     struct inflate_state FAR *state;
+     struct inffast_ar {
+       void *esp;                  /* esp save */
+       unsigned char FAR *in;      /* local strm->next_in */
+       unsigned char FAR *last;    /* while in < last, enough input available */
+       unsigned char FAR *out;     /* local strm->next_out */
+       unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */
+       unsigned char FAR *end;     /* while out < end, enough space available */
+       unsigned wsize;             /* window size or zero if not using window */
+       unsigned write;             /* window write index */
+       unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */
+       unsigned long hold;         /* local strm->hold */
+       unsigned bits;              /* local strm->bits */
+       code const FAR *lcode;      /* local strm->lencode */
+       code const FAR *dcode;      /* local strm->distcode */
+       unsigned lmask;             /* mask for first level of length codes */
+       unsigned dmask;             /* mask for first level of distance codes */
+       unsigned len;               /* match length, unused bytes */
+       unsigned dist;              /* match distance */
+       unsigned status;            /* this is set when state changes */
+     } ar;
+ 
+     /* copy state to local variables */
+     state = (struct inflate_state FAR *)strm->state;
+     ar.in = strm->next_in;
+     ar.last = ar.in + (strm->avail_in - 5);
+     ar.out = strm->next_out;
+     ar.beg = ar.out - (start - strm->avail_out);
+     ar.end = ar.out + (strm->avail_out - 257);
+     ar.wsize = state->wsize;
+     ar.write = state->write;
+     ar.window = state->window;
+     ar.hold = state->hold;
+     ar.bits = state->bits;
+     ar.lcode = state->lencode;
+     ar.dcode = state->distcode;
+     ar.lmask = (1U << state->lenbits) - 1;
+     ar.dmask = (1U << state->distbits) - 1;
+ 
+     /* decode literals and length/distances until end-of-block or not enough
+        input data or output space */
+ 
+     /* align in on 2 byte boundary */
+     if (((unsigned long)(void *)ar.in & 0x1) != 0) {
+         ar.hold += (unsigned long)*ar.in++ << ar.bits;
+         ar.bits += 8;
+     }
+ 
+ #if defined( __GNUC__ ) || defined( __ICC )
+     __asm__ __volatile__ (
+ "        leal    %0, %%eax\n"
+ "        pushf\n"
+ "        pushl   %%ebp\n"
+ "        movl    %%esp, (%%eax)\n"
+ "        movl    %%eax, %%esp\n"
+ "        movl    4(%%esp), %%esi\n"       /* esi = in */
+ "        movl    12(%%esp), %%edi\n"      /* edi = out */
+ "        movl    36(%%esp), %%edx\n"      /* edx = hold */
+ "        movl    40(%%esp), %%ebx\n"      /* ebx = bits */
+ "        movl    44(%%esp), %%ebp\n"      /* ebp = lcode */
+ 
+ "        cld\n"
+ "        jmp     .L_do_loop\n"
+ 
+ ".L_while_test:\n"
+ "        cmpl    %%edi, 20(%%esp)\n"
+ "        jbe     .L_break_loop\n"
+ "        cmpl    %%esi, 8(%%esp)\n"
+ "        jbe     .L_break_loop\n"
+ 
+ ".L_do_loop:\n"
+ "        cmpb    $15, %%bl\n"
+ "        ja      .L_get_length_code\n"    /* if (15 < bits) */
+ 
+ "        xorl    %%eax, %%eax\n"
+ "        lodsw\n"                         /* al = *(ushort *)in++ */
+ "        movb    %%bl, %%cl\n"            /* cl = bits, needs it for shifting */
+ "        addb    $16, %%bl\n"             /* bits += 16 */
+ "        shll    %%cl, %%eax\n"
+ "        orl     %%eax, %%edx\n"        /* hold |= *((ushort *)in)++ << bits */
+ 
+ ".L_get_length_code:\n"
+ "        movl    52(%%esp), %%eax\n"      /* eax = lmask */
+ "        andl    %%edx, %%eax\n"          /* eax &= hold */
+ "        movl    (%%ebp,%%eax,4), %%eax\n" /* eax = lcode[hold & lmask] */
+ 
+ ".L_dolen:\n"
+ "        movb    %%ah, %%cl\n"            /* cl = this.bits */
+ "        subb    %%ah, %%bl\n"            /* bits -= this.bits */
+ "        shrl    %%cl, %%edx\n"           /* hold >>= this.bits */
+ 
+ "        testb   %%al, %%al\n"
+ "        jnz     .L_test_for_length_base\n" /* if (op != 0) 45.7% */
+ 
+ "        shrl    $16, %%eax\n"            /* output this.val char */
+ "        stosb\n"
+ "        jmp     .L_while_test\n"
+ 
+ ".L_test_for_length_base:\n"
+ "        movl    %%eax, %%ecx\n"          /* len = this */
+ "        shrl    $16, %%ecx\n"            /* len = this.val */
+ "        movl    %%ecx, 60(%%esp)\n"      /* len = this */
+ "        movb    %%al, %%cl\n"
+ 
+ "        testb   $16, %%al\n"
+ "        jz      .L_test_for_second_level_length\n" /* if ((op & 16) == 0) 8% */
+ "        andb    $15, %%cl\n"             /* op &= 15 */
+ "        jz      .L_decode_distance\n"    /* if (!op) */
+ "        cmpb    %%cl, %%bl\n"
+ "        jae     .L_add_bits_to_len\n"    /* if (op <= bits) */
+ 
+ "        movb    %%cl, %%ch\n"            /* stash op in ch, freeing cl */
+ "        xorl    %%eax, %%eax\n"
+ "        lodsw\n"                         /* al = *(ushort *)in++ */
+ "        movb    %%bl, %%cl\n"            /* cl = bits, needs it for shifting */
+ "        addb    $16, %%bl\n"             /* bits += 16 */
+ "        shll    %%cl, %%eax\n"
+ "        orl     %%eax, %%edx\n"         /* hold |= *((ushort *)in)++ << bits */
+ "        movb    %%ch, %%cl\n"            /* move op back to ecx */
+ 
+ ".L_add_bits_to_len:\n"
+ "        movl    $1, %%eax\n"
+ "        shll    %%cl, %%eax\n"
+ "        decl    %%eax\n"
+ "        subb    %%cl, %%bl\n"
+ "        andl    %%edx, %%eax\n"          /* eax &= hold */
+ "        shrl    %%cl, %%edx\n"
+ "        addl    %%eax, 60(%%esp)\n"      /* len += hold & mask[op] */
+ 
+ ".L_decode_distance:\n"
+ "        cmpb    $15, %%bl\n"
+ "        ja      .L_get_distance_code\n"  /* if (15 < bits) */
+ 
+ "        xorl    %%eax, %%eax\n"
+ "        lodsw\n"                         /* al = *(ushort *)in++ */
+ "        movb    %%bl, %%cl\n"            /* cl = bits, needs it for shifting */
+ "        addb    $16, %%bl\n"             /* bits += 16 */
+ "        shll    %%cl, %%eax\n"
+ "        orl     %%eax, %%edx\n"         /* hold |= *((ushort *)in)++ << bits */
+ 
+ ".L_get_distance_code:\n"
+ "        movl    56(%%esp), %%eax\n"      /* eax = dmask */
+ "        movl    48(%%esp), %%ecx\n"      /* ecx = dcode */
+ "        andl    %%edx, %%eax\n"          /* eax &= hold */
+ "        movl    (%%ecx,%%eax,4), %%eax\n"/* eax = dcode[hold & dmask] */
+ 
+ ".L_dodist:\n"
+ "        movl    %%eax, %%ebp\n"          /* dist = this */
+ "        shrl    $16, %%ebp\n"            /* dist = this.val */
+ "        movb    %%ah, %%cl\n"
+ "        subb    %%ah, %%bl\n"            /* bits -= this.bits */
+ "        shrl    %%cl, %%edx\n"           /* hold >>= this.bits */
+ "        movb    %%al, %%cl\n"            /* cl = this.op */
+ 
+ "        testb   $16, %%al\n"             /* if ((op & 16) == 0) */
+ "        jz      .L_test_for_second_level_dist\n"
+ "        andb    $15, %%cl\n"             /* op &= 15 */
+ "        jz      .L_check_dist_one\n"
+ "        cmpb    %%cl, %%bl\n"
+ "        jae     .L_add_bits_to_dist\n"   /* if (op <= bits) 97.6% */
+ 
+ "        movb    %%cl, %%ch\n"            /* stash op in ch, freeing cl */
+ "        xorl    %%eax, %%eax\n"
+ "        lodsw\n"                         /* al = *(ushort *)in++ */
+ "        movb    %%bl, %%cl\n"            /* cl = bits, needs it for shifting */
+ "        addb    $16, %%bl\n"             /* bits += 16 */
+ "        shll    %%cl, %%eax\n"
+ "        orl     %%eax, %%edx\n"        /* hold |= *((ushort *)in)++ << bits */
+ "        movb    %%ch, %%cl\n"            /* move op back to ecx */
+ 
+ ".L_add_bits_to_dist:\n"
+ "        movl    $1, %%eax\n"
+ "        shll    %%cl, %%eax\n"
+ "        decl    %%eax\n"                 /* (1 << op) - 1 */
+ "        subb    %%cl, %%bl\n"
+ "        andl    %%edx, %%eax\n"          /* eax &= hold */
+ "        shrl    %%cl, %%edx\n"
+ "        addl    %%eax, %%ebp\n"          /* dist += hold & ((1 << op) - 1) */
+ 
+ ".L_check_window:\n"
+ "        movl    %%esi, 4(%%esp)\n"       /* save in so from can use it's reg */
+ "        movl    %%edi, %%eax\n"
+ "        subl    16(%%esp), %%eax\n"      /* nbytes = out - beg */
+ 
+ "        cmpl    %%ebp, %%eax\n"
+ "        jb      .L_clip_window\n"        /* if (dist > nbytes) 4.2% */
+ 
+ "        movl    60(%%esp), %%ecx\n"
+ "        movl    %%edi, %%esi\n"
+ "        subl    %%ebp, %%esi\n"          /* from = out - dist */
+ 
+ "        subl    $3, %%ecx\n"             /* copy from to out */
+ "        movb    (%%esi), %%al\n"
+ "        movb    %%al, (%%edi)\n"
+ "        movb    1(%%esi), %%al\n"
+ "        movb    2(%%esi), %%ah\n"
+ "        addl    $3, %%esi\n"
+ "        movb    %%al, 1(%%edi)\n"
+ "        movb    %%ah, 2(%%edi)\n"
+ "        addl    $3, %%edi\n"
+ "        rep     movsb\n"
+ 
+ "        movl    4(%%esp), %%esi\n"      /* move in back to %esi, toss from */
+ "        movl    44(%%esp), %%ebp\n"     /* ebp = lcode */
+ "        jmp     .L_while_test\n"
+ 
+ ".L_check_dist_one:\n"
+ "        cmpl    $1, %%ebp\n"            /* if dist 1, is a memset */
+ "        jne     .L_check_window\n"
+ "        cmpl    %%edi, 16(%%esp)\n"
+ "        je      .L_check_window\n"
+ 
+ "        decl    %%edi\n"
+ "        movl    60(%%esp), %%ecx\n"
+ "        movb    (%%edi), %%al\n"
+ "        subl    $3, %%ecx\n"
+ 
+ "        movb    %%al, 1(%%edi)\n"       /* memset out with from[-1] */
+ "        movb    %%al, 2(%%edi)\n"
+ "        movb    %%al, 3(%%edi)\n"
+ "        addl    $4, %%edi\n"
+ "        rep     stosb\n"
+ "        movl    44(%%esp), %%ebp\n"      /* ebp = lcode */
+ "        jmp     .L_while_test\n"
+ 
+ ".L_test_for_second_level_length:\n"
+ "        testb   $64, %%al\n"
+ "        jnz     .L_test_for_end_of_block\n" /* if ((op & 64) != 0) */
+ 
+ "        movl    $1, %%eax\n"
+ "        shll    %%cl, %%eax\n"
+ "        decl    %%eax\n"
+ "        andl    %%edx, %%eax\n"         /* eax &= hold */
+ "        addl    60(%%esp), %%eax\n"     /* eax += this.val */
+ "        movl    (%%ebp,%%eax,4), %%eax\n" /* eax = lcode[val+(hold&mask[op])]*/
+ "        jmp     .L_dolen\n"
+ 
+ ".L_test_for_second_level_dist:\n"
+ "        testb   $64, %%al\n"
+ "        jnz     .L_invalid_distance_code\n" /* if ((op & 64) != 0) */
+ 
+ "        movl    $1, %%eax\n"
+ "        shll    %%cl, %%eax\n"
+ "        decl    %%eax\n"
+ "        andl    %%edx, %%eax\n"         /* eax &= hold */
+ "        addl    %%ebp, %%eax\n"         /* eax += this.val */
+ "        movl    48(%%esp), %%ecx\n"     /* ecx = dcode */
+ "        movl    (%%ecx,%%eax,4), %%eax\n" /* eax = dcode[val+(hold&mask[op])]*/
+ "        jmp     .L_dodist\n"
+ 
+ ".L_clip_window:\n"
+ "        movl    %%eax, %%ecx\n"
+ "        movl    24(%%esp), %%eax\n"     /* prepare for dist compare */
+ "        negl    %%ecx\n"                /* nbytes = -nbytes */
+ "        movl    32(%%esp), %%esi\n"     /* from = window */
+ 
+ "        cmpl    %%ebp, %%eax\n"
+ "        jb      .L_invalid_distance_too_far\n" /* if (dist > wsize) */
+ 
+ "        addl    %%ebp, %%ecx\n"         /* nbytes = dist - nbytes */
+ "        cmpl    $0, 28(%%esp)\n"
+ "        jne     .L_wrap_around_window\n" /* if (write != 0) */
+ 
+ "        subl    %%ecx, %%eax\n"
+ "        addl    %%eax, %%esi\n"         /* from += wsize - nbytes */
+ 
+ "        movl    60(%%esp), %%eax\n"
+ "        cmpl    %%ecx, %%eax\n"
+ "        jbe     .L_do_copy1\n"          /* if (nbytes >= len) */
+ 
+ "        subl    %%ecx, %%eax\n"         /* len -= nbytes */
+ "        rep     movsb\n"
+ "        movl    %%edi, %%esi\n"
+ "        subl    %%ebp, %%esi\n"         /* from = out - dist */
+ "        jmp     .L_do_copy1\n"
+ 
+ "        cmpl    %%ecx, %%eax\n"
+ "        jbe     .L_do_copy1\n"          /* if (nbytes >= len) */
+ 
+ "        subl    %%ecx, %%eax\n"         /* len -= nbytes */
+ "        rep     movsb\n"
+ "        movl    %%edi, %%esi\n"
+ "        subl    %%ebp, %%esi\n"         /* from = out - dist */
+ "        jmp     .L_do_copy1\n"
+ 
+ ".L_wrap_around_window:\n"
+ "        movl    28(%%esp), %%eax\n"
+ "        cmpl    %%eax, %%ecx\n"
+ "        jbe     .L_contiguous_in_window\n" /* if (write >= nbytes) */
+ 
+ "        addl    24(%%esp), %%esi\n"
+ "        addl    %%eax, %%esi\n"
+ "        subl    %%ecx, %%esi\n"         /* from += wsize + write - nbytes */
+ "        subl    %%eax, %%ecx\n"         /* nbytes -= write */
+ 
+ "        movl    60(%%esp), %%eax\n"
+ "        cmpl    %%ecx, %%eax\n"
+ "        jbe     .L_do_copy1\n"          /* if (nbytes >= len) */
+ 
+ "        subl    %%ecx, %%eax\n"         /* len -= nbytes */
+ "        rep     movsb\n"
+ "        movl    32(%%esp), %%esi\n"     /* from = window */
+ "        movl    28(%%esp), %%ecx\n"     /* nbytes = write */
+ "        cmpl    %%ecx, %%eax\n"
+ "        jbe     .L_do_copy1\n"          /* if (nbytes >= len) */
+ 
+ "        subl    %%ecx, %%eax\n"         /* len -= nbytes */
+ "        rep     movsb\n"
+ "        movl    %%edi, %%esi\n"
+ "        subl    %%ebp, %%esi\n"         /* from = out - dist */
+ "        jmp     .L_do_copy1\n"
+ 
+ ".L_contiguous_in_window:\n"
+ "        addl    %%eax, %%esi\n"
+ "        subl    %%ecx, %%esi\n"         /* from += write - nbytes */
+ 
+ "        movl    60(%%esp), %%eax\n"
+ "        cmpl    %%ecx, %%eax\n"
+ "        jbe     .L_do_copy1\n"          /* if (nbytes >= len) */
+ 
+ "        subl    %%ecx, %%eax\n"         /* len -= nbytes */
+ "        rep     movsb\n"
+ "        movl    %%edi, %%esi\n"
+ "        subl    %%ebp, %%esi\n"         /* from = out - dist */
+ 
+ ".L_do_copy1:\n"
+ "        movl    %%eax, %%ecx\n"
+ "        rep     movsb\n"
+ 
+ "        movl    4(%%esp), %%esi\n"      /* move in back to %esi, toss from */
+ "        movl    44(%%esp), %%ebp\n"     /* ebp = lcode */
+ "        jmp     .L_while_test\n"
+ 
+ ".L_test_for_end_of_block:\n"
+ "        testb   $32, %%al\n"
+ "        jz      .L_invalid_literal_length_code\n"
+ "        movl    $1, 68(%%esp)\n"
+ "        jmp     .L_break_loop_with_status\n"
+ 
+ ".L_invalid_literal_length_code:\n"
+ "        movl    $2, 68(%%esp)\n"
+ "        jmp     .L_break_loop_with_status\n"
+ 
+ ".L_invalid_distance_code:\n"
+ "        movl    $3, 68(%%esp)\n"
+ "        jmp     .L_break_loop_with_status\n"
+ 
+ ".L_invalid_distance_too_far:\n"
+ "        movl    4(%%esp), %%esi\n"
+ "        movl    $4, 68(%%esp)\n"
+ "        jmp     .L_break_loop_with_status\n"
+ 
+ ".L_break_loop:\n"
+ "        movl    $0, 68(%%esp)\n"
+ 
+ ".L_break_loop_with_status:\n"
+ /* put in, out, bits, and hold back into ar and pop esp */
+ "        movl    %%esi, 4(%%esp)\n"
+ "        movl    %%edi, 12(%%esp)\n"
+ "        movl    %%ebx, 40(%%esp)\n"
+ "        movl    %%edx, 36(%%esp)\n"
+ "        movl    (%%esp), %%esp\n"
+ "        popl    %%ebp\n"
+ "        popf\n"
+           :
+           : "m" (ar)
+           : "memory", "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi"
+     );
+ #elif defined( _MSC_VER )
+     __asm {
+ 	lea	eax, ar
+ 	pushfd
+ 	push	ebp
+ 	mov	[eax], esp
+ 	mov	esp, eax
+ 	mov	esi, [esp+4]       /* esi = in */
+ 	mov	edi, [esp+12]      /* edi = out */
+ 	mov	edx, [esp+36]      /* edx = hold */
+ 	mov	ebx, [esp+40]      /* ebx = bits */
+ 	mov	ebp, [esp+44]      /* ebp = lcode */
+ 
+ 	cld
+ 	jmp	L_do_loop
+ 
+ L_while_test:
+ 	cmp	[esp+20], edi
+ 	jbe	L_break_loop
+ 	cmp	[esp+8], esi
+ 	jbe	L_break_loop
+ 
+ L_do_loop:
+ 	cmp	bl, 15
+ 	ja	L_get_length_code    /* if (15 < bits) */
+ 
+ 	xor	eax, eax
+ 	lodsw                         /* al = *(ushort *)in++ */
+ 	mov	cl, bl            /* cl = bits, needs it for shifting */
+ 	add	bl, 16             /* bits += 16 */
+ 	shl	eax, cl
+ 	or	edx, eax        /* hold |= *((ushort *)in)++ << bits */
+ 
+ L_get_length_code:
+ 	mov	eax, [esp+52]      /* eax = lmask */
+ 	and	eax, edx          /* eax &= hold */
+ 	mov	eax, [ebp+eax*4] /* eax = lcode[hold & lmask] */
+ 
+ L_dolen:
+ 	mov	cl, ah            /* cl = this.bits */
+ 	sub	bl, ah            /* bits -= this.bits */
+ 	shr	edx, cl           /* hold >>= this.bits */
+ 
+ 	test	al, al
+ 	jnz	L_test_for_length_base /* if (op != 0) 45.7% */
+ 
+ 	shr	eax, 16            /* output this.val char */
+ 	stosb
+ 	jmp	L_while_test
+ 
+ L_test_for_length_base:
+ 	mov	ecx, eax          /* len = this */
+ 	shr	ecx, 16            /* len = this.val */
+ 	mov	[esp+60], ecx      /* len = this */
+ 	mov	cl, al
+ 
+ 	test	al, 16
+ 	jz	L_test_for_second_level_length /* if ((op & 16) == 0) 8% */
+ 	and	cl, 15             /* op &= 15 */
+ 	jz	L_decode_distance    /* if (!op) */
+ 	cmp	bl, cl
+ 	jae	L_add_bits_to_len    /* if (op <= bits) */
+ 
+ 	mov	ch, cl            /* stash op in ch, freeing cl */
+ 	xor	eax, eax
+ 	lodsw                         /* al = *(ushort *)in++ */
+ 	mov	cl, bl            /* cl = bits, needs it for shifting */
+ 	add	bl, 16             /* bits += 16 */
+ 	shl	eax, cl
+ 	or	edx, eax         /* hold |= *((ushort *)in)++ << bits */
+ 	mov	cl, ch            /* move op back to ecx */
+ 
+ L_add_bits_to_len:
+ 	mov	eax, 1
+ 	shl	eax, cl
+ 	dec	eax
+ 	sub	bl, cl
+ 	and	eax, edx          /* eax &= hold */
+ 	shr	edx, cl
+ 	add	[esp+60], eax      /* len += hold & mask[op] */
+ 
+ L_decode_distance:
+ 	cmp	bl, 15
+ 	ja	L_get_distance_code  /* if (15 < bits) */
+ 
+ 	xor	eax, eax
+ 	lodsw                         /* al = *(ushort *)in++ */
+ 	mov	cl, bl            /* cl = bits, needs it for shifting */
+ 	add	bl, 16             /* bits += 16 */
+ 	shl	eax, cl
+ 	or	edx, eax         /* hold |= *((ushort *)in)++ << bits */
+ 
+ L_get_distance_code:
+ 	mov	eax, [esp+56]      /* eax = dmask */
+ 	mov	ecx, [esp+48]      /* ecx = dcode */
+ 	and	eax, edx          /* eax &= hold */
+ 	mov	eax, [ecx+eax*4]/* eax = dcode[hold & dmask] */
+ 
+ L_dodist:
+ 	mov	ebp, eax          /* dist = this */
+ 	shr	ebp, 16            /* dist = this.val */
+ 	mov	cl, ah
+ 	sub	bl, ah            /* bits -= this.bits */
+ 	shr	edx, cl           /* hold >>= this.bits */
+ 	mov	cl, al            /* cl = this.op */
+ 
+ 	test	al, 16             /* if ((op & 16) == 0) */
+ 	jz	L_test_for_second_level_dist
+ 	and	cl, 15             /* op &= 15 */
+ 	jz	L_check_dist_one
+ 	cmp	bl, cl
+ 	jae	L_add_bits_to_dist   /* if (op <= bits) 97.6% */
+ 
+ 	mov	ch, cl            /* stash op in ch, freeing cl */
+ 	xor	eax, eax
+ 	lodsw                         /* al = *(ushort *)in++ */
+ 	mov	cl, bl            /* cl = bits, needs it for shifting */
+ 	add	bl, 16             /* bits += 16 */
+ 	shl	eax, cl
+ 	or	edx, eax        /* hold |= *((ushort *)in)++ << bits */
+ 	mov	cl, ch            /* move op back to ecx */
+ 
+ L_add_bits_to_dist:
+ 	mov	eax, 1
+ 	shl	eax, cl
+ 	dec	eax                 /* (1 << op) - 1 */
+ 	sub	bl, cl
+ 	and	eax, edx          /* eax &= hold */
+ 	shr	edx, cl
+ 	add	ebp, eax          /* dist += hold & ((1 << op) - 1) */
+ 
+ L_check_window:
+ 	mov	[esp+4], esi       /* save in so from can use it's reg */
+ 	mov	eax, edi
+ 	sub	eax, [esp+16]      /* nbytes = out - beg */
+ 
+ 	cmp	eax, ebp
+ 	jb	L_clip_window        /* if (dist > nbytes) 4.2% */
+ 
+ 	mov	ecx, [esp+60]
+ 	mov	esi, edi
+ 	sub	esi, ebp          /* from = out - dist */
+ 
+ 	sub	ecx, 3             /* copy from to out */
+ 	mov	al, [esi]
+ 	mov	[edi], al
+ 	mov	al, [esi+1]
+ 	mov	ah, [esi+2]
+ 	add	esi, 3
+ 	mov	[edi+1], al
+ 	mov	[edi+2], ah
+ 	add	edi, 3
+ 	rep     movsb
+ 
+ 	mov	esi, [esp+4]      /* move in back to %esi, toss from */
+ 	mov	ebp, [esp+44]     /* ebp = lcode */
+ 	jmp	L_while_test
+ 
+ L_check_dist_one:
+ 	cmp	ebp, 1            /* if dist 1, is a memset */
+ 	jne	L_check_window
+ 	cmp	[esp+16], edi
+ 	je	L_check_window
+ 
+ 	dec	edi
+ 	mov	ecx, [esp+60]
+ 	mov	al, [edi]
+ 	sub	ecx, 3
+ 
+ 	mov	[edi+1], al       /* memset out with from[-1] */
+ 	mov	[edi+2], al
+ 	mov	[edi+3], al
+ 	add	edi, 4
+ 	rep     stosb
+ 	mov	ebp, [esp+44]      /* ebp = lcode */
+ 	jmp	L_while_test
+ 
+ L_test_for_second_level_length:
+ 	test	al, 64
+ 	jnz	L_test_for_end_of_block /* if ((op & 64) != 0) */
+ 
+ 	mov	eax, 1
+ 	shl	eax, cl
+ 	dec	eax
+ 	and	eax, edx         /* eax &= hold */
+ 	add	eax, [esp+60]     /* eax += this.val */
+ 	mov	eax, [ebp+eax*4] /* eax = lcode[val+(hold&mask[op])]*/
+ 	jmp	L_dolen
+ 
+ L_test_for_second_level_dist:
+ 	test	al, 64
+ 	jnz	L_invalid_distance_code /* if ((op & 64) != 0) */
+ 
+ 	mov	eax, 1
+ 	shl	eax, cl
+ 	dec	eax
+ 	and	eax, edx         /* eax &= hold */
+ 	add	eax, ebp         /* eax += this.val */
+ 	mov	ecx, [esp+48]     /* ecx = dcode */
+ 	mov	eax, [ecx+eax*4] /* eax = dcode[val+(hold&mask[op])]*/
+ 	jmp	L_dodist
+ 
+ L_clip_window:
+ 	mov	ecx, eax
+ 	mov	eax, [esp+24]     /* prepare for dist compare */
+ 	neg	ecx                /* nbytes = -nbytes */
+ 	mov	esi, [esp+32]     /* from = window */
+ 
+ 	cmp	eax, ebp
+ 	jb	L_invalid_distance_too_far /* if (dist > wsize) */
+ 
+ 	add	ecx, ebp         /* nbytes = dist - nbytes */
+ 	cmp	dword ptr [esp+28], 0
+ 	jne	L_wrap_around_window /* if (write != 0) */
+ 
+ 	sub	eax, ecx
+ 	add	esi, eax         /* from += wsize - nbytes */
+ 
+ 	mov	eax, [esp+60]
+ 	cmp	eax, ecx
+ 	jbe	L_do_copy1          /* if (nbytes >= len) */
+ 
+ 	sub	eax, ecx         /* len -= nbytes */
+ 	rep     movsb
+ 	mov	esi, edi
+ 	sub	esi, ebp         /* from = out - dist */
+ 	jmp	L_do_copy1
+ 
+ 	cmp	eax, ecx
+ 	jbe	L_do_copy1          /* if (nbytes >= len) */
+ 
+ 	sub	eax, ecx         /* len -= nbytes */
+ 	rep     movsb
+ 	mov	esi, edi
+ 	sub	esi, ebp         /* from = out - dist */
+ 	jmp	L_do_copy1
+ 
+ L_wrap_around_window:
+ 	mov	eax, [esp+28]
+ 	cmp	ecx, eax
+ 	jbe	L_contiguous_in_window /* if (write >= nbytes) */
+ 
+ 	add	esi, [esp+24]
+ 	add	esi, eax
+ 	sub	esi, ecx         /* from += wsize + write - nbytes */
+ 	sub	ecx, eax         /* nbytes -= write */
+ 
+ 	mov	eax, [esp+60]
+ 	cmp	eax, ecx
+ 	jbe	L_do_copy1          /* if (nbytes >= len) */
+ 
+ 	sub	eax, ecx         /* len -= nbytes */
+ 	rep     movsb
+ 	mov	esi, [esp+32]     /* from = window */
+ 	mov	ecx, [esp+28]     /* nbytes = write */
+ 	cmp	eax, ecx
+ 	jbe	L_do_copy1          /* if (nbytes >= len) */
+ 
+ 	sub	eax, ecx         /* len -= nbytes */
+ 	rep     movsb
+ 	mov	esi, edi
+ 	sub	esi, ebp         /* from = out - dist */
+ 	jmp	L_do_copy1
+ 
+ L_contiguous_in_window:
+ 	add	esi, eax
+ 	sub	esi, ecx         /* from += write - nbytes */
+ 
+ 	mov	eax, [esp+60]
+ 	cmp	eax, ecx
+ 	jbe	L_do_copy1          /* if (nbytes >= len) */
+ 
+ 	sub	eax, ecx         /* len -= nbytes */
+ 	rep     movsb
+ 	mov	esi, edi
+ 	sub	esi, ebp         /* from = out - dist */
+ 
+ L_do_copy1:
+ 	mov	ecx, eax
+ 	rep     movsb
+ 
+ 	mov	esi, [esp+4]      /* move in back to %esi, toss from */
+ 	mov	ebp, [esp+44]     /* ebp = lcode */
+ 	jmp	L_while_test
+ 
+ L_test_for_end_of_block:
+ 	test	al, 32
+ 	jz	L_invalid_literal_length_code
+ 	mov	dword ptr [esp+68], 1
+ 	jmp	L_break_loop_with_status
+ 
+ L_invalid_literal_length_code:
+ 	mov	dword ptr [esp+68], 2
+ 	jmp	L_break_loop_with_status
+ 
+ L_invalid_distance_code:
+ 	mov	dword ptr [esp+68], 3
+ 	jmp	L_break_loop_with_status
+ 
+ L_invalid_distance_too_far:
+ 	mov	esi, [esp+4]
+ 	mov	dword ptr [esp+68], 4
+ 	jmp	L_break_loop_with_status
+ 
+ L_break_loop:
+ 	mov	dword ptr [esp+68], 0
+ 
+ L_break_loop_with_status:
+ /* put in, out, bits, and hold back into ar and pop esp */
+ 	mov	[esp+4], esi
+ 	mov	[esp+12], edi
+ 	mov	[esp+40], ebx
+ 	mov	[esp+36], edx
+ 	mov	esp, [esp]
+ 	pop	ebp
+ 	popfd
+     }
+ #endif
+ 
+     if (ar.status > 1) {
+         if (ar.status == 2)
+             strm->msg = "invalid literal/length code";
+         else if (ar.status == 3)
+             strm->msg = "invalid distance code";
+         else
+             strm->msg = "invalid distance too far back";
+         state->mode = BAD;
+     }
+     else if ( ar.status == 1 ) {
+         state->mode = TYPE;
+     }
+ 
+     /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+     ar.len = ar.bits >> 3;
+     ar.in -= ar.len;
+     ar.bits -= ar.len << 3;
+     ar.hold &= (1U << ar.bits) - 1;
+ 
+     /* update state and return */
+     strm->next_in = ar.in;
+     strm->next_out = ar.out;
+     strm->avail_in = (unsigned)(ar.in < ar.last ? 5 + (ar.last - ar.in) :
+                                                   5 - (ar.in - ar.last));
+     strm->avail_out = (unsigned)(ar.out < ar.end ? 257 + (ar.end - ar.out) :
+                                                    257 - (ar.out - ar.end));
+     state->hold = ar.hold;
+     state->bits = ar.bits;
+     return;
+ }
+ 
diff -Nrcpad gcc-3.4.3/zlib/contrib/inflate86/inffast.S gcc-4.0.0/zlib/contrib/inflate86/inffast.S
*** gcc-3.4.3/zlib/contrib/inflate86/inffast.S	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/inflate86/inffast.S	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,1377 ----
+ /*
+  * inffast.S is a hand tuned assembler version of:
+  *
+  * inffast.c -- fast decoding
+  * Copyright (C) 1995-2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  *
+  * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+  * Please use the copyright conditions above.
+  *
+  * This version (Jan-23-2003) of inflate_fast was coded and tested under
+  * GNU/Linux on a pentium 3, using the gcc-3.2 compiler distribution.  On that
+  * machine, I found that gzip style archives decompressed about 20% faster than
+  * the gcc-3.2 -O3 -fomit-frame-pointer compiled version.  Your results will
+  * depend on how large of a buffer is used for z_stream.next_in & next_out
+  * (8K-32K worked best for my 256K cpu cache) and how much overhead there is in
+  * stream processing I/O and crc32/addler32.  In my case, this routine used
+  * 70% of the cpu time and crc32 used 20%.
+  *
+  * I am confident that this version will work in the general case, but I have
+  * not tested a wide variety of datasets or a wide variety of platforms.
+  *
+  * Jan-24-2003 -- Added -DUSE_MMX define for slightly faster inflating.
+  * It should be a runtime flag instead of compile time flag...
+  *
+  * Jan-26-2003 -- Added runtime check for MMX support with cpuid instruction.
+  * With -DUSE_MMX, only MMX code is compiled.  With -DNO_MMX, only non-MMX code
+  * is compiled.  Without either option, runtime detection is enabled.  Runtime
+  * detection should work on all modern cpus and the recomended algorithm (flip
+  * ID bit on eflags and then use the cpuid instruction) is used in many
+  * multimedia applications.  Tested under win2k with gcc-2.95 and gas-2.12
+  * distributed with cygwin3.  Compiling with gcc-2.95 -c inffast.S -o
+  * inffast.obj generates a COFF object which can then be linked with MSVC++
+  * compiled code.  Tested under FreeBSD 4.7 with gcc-2.95.
+  *
+  * Jan-28-2003 -- Tested Athlon XP... MMX mode is slower than no MMX (and
+  * slower than compiler generated code).  Adjusted cpuid check to use the MMX
+  * code only for Pentiums < P4 until I have more data on the P4.  Speed
+  * improvment is only about 15% on the Athlon when compared with code generated
+  * with MSVC++.  Not sure yet, but I think the P4 will also be slower using the
+  * MMX mode because many of it's x86 ALU instructions execute in .5 cycles and
+  * have less latency than MMX ops.  Added code to buffer the last 11 bytes of
+  * the input stream since the MMX code grabs bits in chunks of 32, which
+  * differs from the inffast.c algorithm.  I don't think there would have been
+  * read overruns where a page boundary was crossed (a segfault), but there
+  * could have been overruns when next_in ends on unaligned memory (unintialized
+  * memory read).
+  *
+  * Mar-13-2003 -- P4 MMX is slightly slower than P4 NO_MMX.  I created a C
+  * version of the non-MMX code so that it doesn't depend on zstrm and zstate
+  * structure offsets which are hard coded in this file.  This was last tested
+  * with zlib-1.2.0 which is currently in beta testing, newer versions of this
+  * and inffas86.c can be found at http://www.eetbeetee.com/zlib/ and
+  * http://www.charm.net/~christop/zlib/
+  */
+ 
+ 
+ /*
+  * if you have underscore linking problems (_inflate_fast undefined), try
+  * using -DGAS_COFF
+  */
+ #if ! defined( GAS_COFF ) && ! defined( GAS_ELF )
+ 
+ #if defined( WIN32 ) || defined( __CYGWIN__ )
+ #define GAS_COFF /* windows object format */
+ #else
+ #define GAS_ELF
+ #endif
+ 
+ #endif /* ! GAS_COFF && ! GAS_ELF */
+ 
+ 
+ #if defined( GAS_COFF )
+ 
+ /* coff externals have underscores */
+ #define inflate_fast _inflate_fast
+ #define inflate_fast_use_mmx _inflate_fast_use_mmx
+ 
+ #endif /* GAS_COFF */
+ 
+ 
+ .file "inffast.S"
+ 
+ .globl inflate_fast
+ 
+ .text
+ .align 4,0
+ .L_invalid_literal_length_code_msg:
+ .string "invalid literal/length code"
+ 
+ .align 4,0
+ .L_invalid_distance_code_msg:
+ .string "invalid distance code"
+ 
+ .align 4,0
+ .L_invalid_distance_too_far_msg:
+ .string "invalid distance too far back"
+ 
+ #if ! defined( NO_MMX )
+ .align 4,0
+ .L_mask: /* mask[N] = ( 1 << N ) - 1 */
+ .long 0
+ .long 1
+ .long 3
+ .long 7
+ .long 15
+ .long 31
+ .long 63
+ .long 127
+ .long 255
+ .long 511
+ .long 1023
+ .long 2047
+ .long 4095
+ .long 8191
+ .long 16383
+ .long 32767
+ .long 65535
+ .long 131071
+ .long 262143
+ .long 524287
+ .long 1048575
+ .long 2097151
+ .long 4194303
+ .long 8388607
+ .long 16777215
+ .long 33554431
+ .long 67108863
+ .long 134217727
+ .long 268435455
+ .long 536870911
+ .long 1073741823
+ .long 2147483647
+ .long 4294967295
+ #endif /* NO_MMX */
+ 
+ .text
+ 
+ /*
+  * struct z_stream offsets, in zlib.h
+  */
+ #define next_in_strm   0   /* strm->next_in */
+ #define avail_in_strm  4   /* strm->avail_in */
+ #define next_out_strm  12  /* strm->next_out */
+ #define avail_out_strm 16  /* strm->avail_out */
+ #define msg_strm       24  /* strm->msg */
+ #define state_strm     28  /* strm->state */
+ 
+ /*
+  * struct inflate_state offsets, in inflate.h
+  */
+ #define mode_state     0   /* state->mode */
+ #define wsize_state    32  /* state->wsize */
+ #define write_state    40  /* state->write */
+ #define window_state   44  /* state->window */
+ #define hold_state     48  /* state->hold */
+ #define bits_state     52  /* state->bits */
+ #define lencode_state  68  /* state->lencode */
+ #define distcode_state 72  /* state->distcode */
+ #define lenbits_state  76  /* state->lenbits */
+ #define distbits_state 80  /* state->distbits */
+ 
+ /*
+  * inflate_fast's activation record
+  */
+ #define local_var_size 64 /* how much local space for vars */
+ #define strm_sp        88 /* first arg: z_stream * (local_var_size + 24) */
+ #define start_sp       92 /* second arg: unsigned int (local_var_size + 28) */
+ 
+ /*
+  * offsets for local vars on stack
+  */
+ #define out            60  /* unsigned char* */
+ #define window         56  /* unsigned char* */
+ #define wsize          52  /* unsigned int */
+ #define write          48  /* unsigned int */
+ #define in             44  /* unsigned char* */
+ #define beg            40  /* unsigned char* */
+ #define buf            28  /* char[ 12 ] */
+ #define len            24  /* unsigned int */
+ #define last           20  /* unsigned char* */
+ #define end            16  /* unsigned char* */
+ #define dcode          12  /* code* */
+ #define lcode           8  /* code* */
+ #define dmask           4  /* unsigned int */
+ #define lmask           0  /* unsigned int */
+ 
+ /*
+  * typedef enum inflate_mode consts, in inflate.h
+  */
+ #ifndef NO_GUNZIP
+ #define GUNZIP
+ #endif
+ 
+ #ifdef GUNZIP
+ #define INFLATE_MODE_TYPE 11  /* state->mode flags enum-ed in inflate.h */
+ #define INFLATE_MODE_BAD  26
+ #else
+ #define INFLATE_MODE_TYPE 3
+ #define INFLATE_MODE_BAD  17
+ #endif
+ 
+ 
+ #if ! defined( USE_MMX ) && ! defined( NO_MMX )
+ 
+ #define RUN_TIME_MMX
+ 
+ #define CHECK_MMX    1
+ #define DO_USE_MMX   2
+ #define DONT_USE_MMX 3
+ 
+ .globl inflate_fast_use_mmx
+ 
+ .data
+ 
+ .align 4,0
+ inflate_fast_use_mmx: /* integer flag for run time control 1=check,2=mmx,3=no */
+ .long CHECK_MMX
+ 
+ #if defined( GAS_ELF )
+ /* elf info */
+ .type   inflate_fast_use_mmx,@object
+ .size   inflate_fast_use_mmx,4
+ #endif
+ 
+ #endif /* RUN_TIME_MMX */
+ 
+ #if defined( GAS_COFF )
+ /* coff info: scl 2 = extern, type 32 = function */
+ .def inflate_fast; .scl 2; .type 32; .endef
+ #endif
+ 
+ .text
+ 
+ .align 32,0x90
+ inflate_fast:
+         pushl   %edi
+         pushl   %esi
+         pushl   %ebp
+         pushl   %ebx
+         pushf   /* save eflags (strm_sp, state_sp assumes this is 32 bits) */
+         subl    $local_var_size, %esp
+         cld
+ 
+ #define strm_r  %esi
+ #define state_r %edi
+ 
+         movl    strm_sp(%esp), strm_r
+         movl    state_strm(strm_r), state_r
+ 
+         /* in = strm->next_in;
+          * out = strm->next_out;
+          * last = in + strm->avail_in - 11;
+          * beg = out - (start - strm->avail_out);
+          * end = out + (strm->avail_out - 257);
+          */
+         movl    avail_in_strm(strm_r), %edx
+         movl    next_in_strm(strm_r), %eax
+ 
+         addl    %eax, %edx      /* avail_in += next_in */
+         subl    $11, %edx       /* avail_in -= 11 */
+ 
+         movl    %eax, in(%esp)
+         movl    %edx, last(%esp)
+ 
+         movl    start_sp(%esp), %ebp
+         movl    avail_out_strm(strm_r), %ecx
+         movl    next_out_strm(strm_r), %ebx
+ 
+         subl    %ecx, %ebp      /* start -= avail_out */
+         negl    %ebp            /* start = -start */
+         addl    %ebx, %ebp      /* start += next_out */
+ 
+         subl    $257, %ecx      /* avail_out -= 257 */
+         addl    %ebx, %ecx      /* avail_out += out */
+ 
+         movl    %ebx, out(%esp)
+         movl    %ebp, beg(%esp)
+         movl    %ecx, end(%esp)
+ 
+         /* wsize = state->wsize;
+          * write = state->write;
+          * window = state->window;
+          * hold = state->hold;
+          * bits = state->bits;
+          * lcode = state->lencode;
+          * dcode = state->distcode;
+          * lmask = ( 1 << state->lenbits ) - 1;
+          * dmask = ( 1 << state->distbits ) - 1;
+          */
+ 
+         movl    lencode_state(state_r), %eax
+         movl    distcode_state(state_r), %ecx
+ 
+         movl    %eax, lcode(%esp)
+         movl    %ecx, dcode(%esp)
+ 
+         movl    $1, %eax
+         movl    lenbits_state(state_r), %ecx
+         shll    %cl, %eax
+         decl    %eax
+         movl    %eax, lmask(%esp)
+ 
+         movl    $1, %eax
+         movl    distbits_state(state_r), %ecx
+         shll    %cl, %eax
+         decl    %eax
+         movl    %eax, dmask(%esp)
+ 
+         movl    wsize_state(state_r), %eax
+         movl    write_state(state_r), %ecx
+         movl    window_state(state_r), %edx
+ 
+         movl    %eax, wsize(%esp)
+         movl    %ecx, write(%esp)
+         movl    %edx, window(%esp)
+ 
+         movl    hold_state(state_r), %ebp
+         movl    bits_state(state_r), %ebx
+ 
+ #undef strm_r
+ #undef state_r
+ 
+ #define in_r       %esi
+ #define from_r     %esi
+ #define out_r      %edi
+ 
+         movl    in(%esp), in_r
+         movl    last(%esp), %ecx
+         cmpl    in_r, %ecx
+         ja      .L_align_long           /* if in < last */
+ 
+         addl    $11, %ecx               /* ecx = &in[ avail_in ] */
+         subl    in_r, %ecx              /* ecx = avail_in */
+         movl    $12, %eax
+         subl    %ecx, %eax              /* eax = 12 - avail_in */
+         leal    buf(%esp), %edi
+         rep     movsb                   /* memcpy( buf, in, avail_in ) */
+         movl    %eax, %ecx
+         xorl    %eax, %eax
+         rep     stosb         /* memset( &buf[ avail_in ], 0, 12 - avail_in ) */
+         leal    buf(%esp), in_r         /* in = buf */
+         movl    in_r, last(%esp)        /* last = in, do just one iteration */
+         jmp     .L_is_aligned
+ 
+         /* align in_r on long boundary */
+ .L_align_long:
+         testl   $3, in_r
+         jz      .L_is_aligned
+         xorl    %eax, %eax
+         movb    (in_r), %al
+         incl    in_r
+         movl    %ebx, %ecx
+         addl    $8, %ebx
+         shll    %cl, %eax
+         orl     %eax, %ebp
+         jmp     .L_align_long
+ 
+ .L_is_aligned:
+         movl    out(%esp), out_r
+ 
+ #if defined( NO_MMX )
+         jmp     .L_do_loop
+ #endif
+ 
+ #if defined( USE_MMX )
+         jmp     .L_init_mmx
+ #endif
+ 
+ /*** Runtime MMX check ***/
+ 
+ #if defined( RUN_TIME_MMX )
+ .L_check_mmx:
+         cmpl    $DO_USE_MMX, inflate_fast_use_mmx
+         je      .L_init_mmx
+         ja      .L_do_loop /* > 2 */
+ 
+         pushl   %eax
+         pushl   %ebx
+         pushl   %ecx
+         pushl   %edx
+         pushf
+         movl    (%esp), %eax      /* copy eflags to eax */
+         xorl    $0x200000, (%esp) /* try toggling ID bit of eflags (bit 21)
+                                    * to see if cpu supports cpuid...
+                                    * ID bit method not supported by NexGen but
+                                    * bios may load a cpuid instruction and
+                                    * cpuid may be disabled on Cyrix 5-6x86 */
+         popf
+         pushf
+         popl    %edx              /* copy new eflags to edx */
+         xorl    %eax, %edx        /* test if ID bit is flipped */
+         jz      .L_dont_use_mmx   /* not flipped if zero */
+         xorl    %eax, %eax
+         cpuid
+         cmpl    $0x756e6547, %ebx /* check for GenuineIntel in ebx,ecx,edx */
+         jne     .L_dont_use_mmx
+         cmpl    $0x6c65746e, %ecx
+         jne     .L_dont_use_mmx
+         cmpl    $0x49656e69, %edx
+         jne     .L_dont_use_mmx
+         movl    $1, %eax
+         cpuid                     /* get cpu features */
+         shrl    $8, %eax
+         andl    $15, %eax
+         cmpl    $6, %eax          /* check for Pentium family, is 0xf for P4 */
+         jne     .L_dont_use_mmx
+         testl   $0x800000, %edx   /* test if MMX feature is set (bit 23) */
+         jnz     .L_use_mmx
+         jmp     .L_dont_use_mmx
+ .L_use_mmx:
+         movl    $DO_USE_MMX, inflate_fast_use_mmx
+         jmp     .L_check_mmx_pop
+ .L_dont_use_mmx:
+         movl    $DONT_USE_MMX, inflate_fast_use_mmx
+ .L_check_mmx_pop:
+         popl    %edx
+         popl    %ecx
+         popl    %ebx
+         popl    %eax
+         jmp     .L_check_mmx
+ #endif
+ 
+ 
+ /*** Non-MMX code ***/
+ 
+ #if defined ( NO_MMX ) || defined( RUN_TIME_MMX )
+ 
+ #define hold_r     %ebp
+ #define bits_r     %bl
+ #define bitslong_r %ebx
+ 
+ .align 32,0x90
+ .L_while_test:
+         /* while (in < last && out < end)
+          */
+         cmpl    out_r, end(%esp)
+         jbe     .L_break_loop           /* if (out >= end) */
+ 
+         cmpl    in_r, last(%esp)
+         jbe     .L_break_loop
+ 
+ .L_do_loop:
+         /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out
+          *
+          * do {
+          *   if (bits < 15) {
+          *     hold |= *((unsigned short *)in)++ << bits;
+          *     bits += 16
+          *   }
+          *   this = lcode[hold & lmask]
+          */
+         cmpb    $15, bits_r
+         ja      .L_get_length_code      /* if (15 < bits) */
+ 
+         xorl    %eax, %eax
+         lodsw                           /* al = *(ushort *)in++ */
+         movb    bits_r, %cl             /* cl = bits, needs it for shifting */
+         addb    $16, bits_r             /* bits += 16 */
+         shll    %cl, %eax
+         orl     %eax, hold_r            /* hold |= *((ushort *)in)++ << bits */
+ 
+ .L_get_length_code:
+         movl    lmask(%esp), %edx       /* edx = lmask */
+         movl    lcode(%esp), %ecx       /* ecx = lcode */
+         andl    hold_r, %edx            /* edx &= hold */
+         movl    (%ecx,%edx,4), %eax     /* eax = lcode[hold & lmask] */
+ 
+ .L_dolen:
+         /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out
+          *
+          * dolen:
+          *    bits -= this.bits;
+          *    hold >>= this.bits
+          */
+         movb    %ah, %cl                /* cl = this.bits */
+         subb    %ah, bits_r             /* bits -= this.bits */
+         shrl    %cl, hold_r             /* hold >>= this.bits */
+ 
+         /* check if op is a literal
+          * if (op == 0) {
+          *    PUP(out) = this.val;
+          *  }
+          */
+         testb   %al, %al
+         jnz     .L_test_for_length_base /* if (op != 0) 45.7% */
+ 
+         shrl    $16, %eax               /* output this.val char */
+         stosb
+         jmp     .L_while_test
+ 
+ .L_test_for_length_base:
+         /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = len
+          *
+          * else if (op & 16) {
+          *   len = this.val
+          *   op &= 15
+          *   if (op) {
+          *     if (op > bits) {
+          *       hold |= *((unsigned short *)in)++ << bits;
+          *       bits += 16
+          *     }
+          *     len += hold & mask[op];
+          *     bits -= op;
+          *     hold >>= op;
+          *   }
+          */
+ #define len_r %edx
+         movl    %eax, len_r             /* len = this */
+         shrl    $16, len_r              /* len = this.val */
+         movb    %al, %cl
+ 
+         testb   $16, %al
+         jz      .L_test_for_second_level_length /* if ((op & 16) == 0) 8% */
+         andb    $15, %cl                /* op &= 15 */
+         jz      .L_save_len             /* if (!op) */
+         cmpb    %cl, bits_r
+         jae     .L_add_bits_to_len      /* if (op <= bits) */
+ 
+         movb    %cl, %ch                /* stash op in ch, freeing cl */
+         xorl    %eax, %eax
+         lodsw                           /* al = *(ushort *)in++ */
+         movb    bits_r, %cl             /* cl = bits, needs it for shifting */
+         addb    $16, bits_r             /* bits += 16 */
+         shll    %cl, %eax
+         orl     %eax, hold_r            /* hold |= *((ushort *)in)++ << bits */
+         movb    %ch, %cl                /* move op back to ecx */
+ 
+ .L_add_bits_to_len:
+         movl    $1, %eax
+         shll    %cl, %eax
+         decl    %eax
+         subb    %cl, bits_r
+         andl    hold_r, %eax            /* eax &= hold */
+         shrl    %cl, hold_r
+         addl    %eax, len_r             /* len += hold & mask[op] */
+ 
+ .L_save_len:
+         movl    len_r, len(%esp)        /* save len */
+ #undef  len_r
+ 
+ .L_decode_distance:
+         /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+          *
+          *   if (bits < 15) {
+          *     hold |= *((unsigned short *)in)++ << bits;
+          *     bits += 16
+          *   }
+          *   this = dcode[hold & dmask];
+          * dodist:
+          *   bits -= this.bits;
+          *   hold >>= this.bits;
+          *   op = this.op;
+          */
+ 
+         cmpb    $15, bits_r
+         ja      .L_get_distance_code    /* if (15 < bits) */
+ 
+         xorl    %eax, %eax
+         lodsw                           /* al = *(ushort *)in++ */
+         movb    bits_r, %cl             /* cl = bits, needs it for shifting */
+         addb    $16, bits_r             /* bits += 16 */
+         shll    %cl, %eax
+         orl     %eax, hold_r            /* hold |= *((ushort *)in)++ << bits */
+ 
+ .L_get_distance_code:
+         movl    dmask(%esp), %edx       /* edx = dmask */
+         movl    dcode(%esp), %ecx       /* ecx = dcode */
+         andl    hold_r, %edx            /* edx &= hold */
+         movl    (%ecx,%edx,4), %eax     /* eax = dcode[hold & dmask] */
+ 
+ #define dist_r %edx
+ .L_dodist:
+         movl    %eax, dist_r            /* dist = this */
+         shrl    $16, dist_r             /* dist = this.val */
+         movb    %ah, %cl
+         subb    %ah, bits_r             /* bits -= this.bits */
+         shrl    %cl, hold_r             /* hold >>= this.bits */
+ 
+         /* if (op & 16) {
+          *   dist = this.val
+          *   op &= 15
+          *   if (op > bits) {
+          *     hold |= *((unsigned short *)in)++ << bits;
+          *     bits += 16
+          *   }
+          *   dist += hold & mask[op];
+          *   bits -= op;
+          *   hold >>= op;
+          */
+         movb    %al, %cl                /* cl = this.op */
+ 
+         testb   $16, %al                /* if ((op & 16) == 0) */
+         jz      .L_test_for_second_level_dist
+         andb    $15, %cl                /* op &= 15 */
+         jz      .L_check_dist_one
+         cmpb    %cl, bits_r
+         jae     .L_add_bits_to_dist     /* if (op <= bits) 97.6% */
+ 
+         movb    %cl, %ch                /* stash op in ch, freeing cl */
+         xorl    %eax, %eax
+         lodsw                           /* al = *(ushort *)in++ */
+         movb    bits_r, %cl             /* cl = bits, needs it for shifting */
+         addb    $16, bits_r             /* bits += 16 */
+         shll    %cl, %eax
+         orl     %eax, hold_r            /* hold |= *((ushort *)in)++ << bits */
+         movb    %ch, %cl                /* move op back to ecx */
+ 
+ .L_add_bits_to_dist:
+         movl    $1, %eax
+         shll    %cl, %eax
+         decl    %eax                    /* (1 << op) - 1 */
+         subb    %cl, bits_r
+         andl    hold_r, %eax            /* eax &= hold */
+         shrl    %cl, hold_r
+         addl    %eax, dist_r            /* dist += hold & ((1 << op) - 1) */
+         jmp     .L_check_window
+ 
+ .L_check_window:
+         /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+          *       %ecx = nbytes
+          *
+          * nbytes = out - beg;
+          * if (dist <= nbytes) {
+          *   from = out - dist;
+          *   do {
+          *     PUP(out) = PUP(from);
+          *   } while (--len > 0) {
+          * }
+          */
+ 
+         movl    in_r, in(%esp)          /* save in so from can use it's reg */
+         movl    out_r, %eax
+         subl    beg(%esp), %eax         /* nbytes = out - beg */
+ 
+         cmpl    dist_r, %eax
+         jb      .L_clip_window          /* if (dist > nbytes) 4.2% */
+ 
+         movl    len(%esp), %ecx
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+ 
+         subl    $3, %ecx
+         movb    (from_r), %al
+         movb    %al, (out_r)
+         movb    1(from_r), %al
+         movb    2(from_r), %dl
+         addl    $3, from_r
+         movb    %al, 1(out_r)
+         movb    %dl, 2(out_r)
+         addl    $3, out_r
+         rep     movsb
+ 
+         movl    in(%esp), in_r          /* move in back to %esi, toss from */
+         jmp     .L_while_test
+ 
+ .align 16,0x90
+ .L_check_dist_one:
+         cmpl    $1, dist_r
+         jne     .L_check_window
+         cmpl    out_r, beg(%esp)
+         je      .L_check_window
+ 
+         decl    out_r
+         movl    len(%esp), %ecx
+         movb    (out_r), %al
+         subl    $3, %ecx
+ 
+         movb    %al, 1(out_r)
+         movb    %al, 2(out_r)
+         movb    %al, 3(out_r)
+         addl    $4, out_r
+         rep     stosb
+ 
+         jmp     .L_while_test
+ 
+ .align 16,0x90
+ .L_test_for_second_level_length:
+         /* else if ((op & 64) == 0) {
+          *   this = lcode[this.val + (hold & mask[op])];
+          * }
+          */
+         testb   $64, %al
+         jnz     .L_test_for_end_of_block  /* if ((op & 64) != 0) */
+ 
+         movl    $1, %eax
+         shll    %cl, %eax
+         decl    %eax
+         andl    hold_r, %eax            /* eax &= hold */
+         addl    %edx, %eax              /* eax += this.val */
+         movl    lcode(%esp), %edx       /* edx = lcode */
+         movl    (%edx,%eax,4), %eax     /* eax = lcode[val + (hold&mask[op])] */
+         jmp     .L_dolen
+ 
+ .align 16,0x90
+ .L_test_for_second_level_dist:
+         /* else if ((op & 64) == 0) {
+          *   this = dcode[this.val + (hold & mask[op])];
+          * }
+          */
+         testb   $64, %al
+         jnz     .L_invalid_distance_code  /* if ((op & 64) != 0) */
+ 
+         movl    $1, %eax
+         shll    %cl, %eax
+         decl    %eax
+         andl    hold_r, %eax            /* eax &= hold */
+         addl    %edx, %eax              /* eax += this.val */
+         movl    dcode(%esp), %edx       /* edx = dcode */
+         movl    (%edx,%eax,4), %eax     /* eax = dcode[val + (hold&mask[op])] */
+         jmp     .L_dodist
+ 
+ .align 16,0x90
+ .L_clip_window:
+         /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+          *       %ecx = nbytes
+          *
+          * else {
+          *   if (dist > wsize) {
+          *     invalid distance
+          *   }
+          *   from = window;
+          *   nbytes = dist - nbytes;
+          *   if (write == 0) {
+          *     from += wsize - nbytes;
+          */
+ #define nbytes_r %ecx
+         movl    %eax, nbytes_r
+         movl    wsize(%esp), %eax       /* prepare for dist compare */
+         negl    nbytes_r                /* nbytes = -nbytes */
+         movl    window(%esp), from_r    /* from = window */
+ 
+         cmpl    dist_r, %eax
+         jb      .L_invalid_distance_too_far /* if (dist > wsize) */
+ 
+         addl    dist_r, nbytes_r        /* nbytes = dist - nbytes */
+         cmpl    $0, write(%esp)
+         jne     .L_wrap_around_window   /* if (write != 0) */
+ 
+         subl    nbytes_r, %eax
+         addl    %eax, from_r            /* from += wsize - nbytes */
+ 
+         /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+          *       %ecx = nbytes, %eax = len
+          *
+          *     if (nbytes < len) {
+          *       len -= nbytes;
+          *       do {
+          *         PUP(out) = PUP(from);
+          *       } while (--nbytes);
+          *       from = out - dist;
+          *     }
+          *   }
+          */
+ #define len_r %eax
+         movl    len(%esp), len_r
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1             /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+         jmp     .L_do_copy1
+ 
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1             /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+         jmp     .L_do_copy1
+ 
+ .L_wrap_around_window:
+         /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+          *       %ecx = nbytes, %eax = write, %eax = len
+          *
+          *   else if (write < nbytes) {
+          *     from += wsize + write - nbytes;
+          *     nbytes -= write;
+          *     if (nbytes < len) {
+          *       len -= nbytes;
+          *       do {
+          *         PUP(out) = PUP(from);
+          *       } while (--nbytes);
+          *       from = window;
+          *       nbytes = write;
+          *       if (nbytes < len) {
+          *         len -= nbytes;
+          *         do {
+          *           PUP(out) = PUP(from);
+          *         } while(--nbytes);
+          *         from = out - dist;
+          *       }
+          *     }
+          *   }
+          */
+ #define write_r %eax
+         movl    write(%esp), write_r
+         cmpl    write_r, nbytes_r
+         jbe     .L_contiguous_in_window /* if (write >= nbytes) */
+ 
+         addl    wsize(%esp), from_r
+         addl    write_r, from_r
+         subl    nbytes_r, from_r        /* from += wsize + write - nbytes */
+         subl    write_r, nbytes_r       /* nbytes -= write */
+ #undef write_r
+ 
+         movl    len(%esp), len_r
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1             /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    window(%esp), from_r    /* from = window */
+         movl    write(%esp), nbytes_r   /* nbytes = write */
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1             /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+         jmp     .L_do_copy1
+ 
+ .L_contiguous_in_window:
+         /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+          *       %ecx = nbytes, %eax = write, %eax = len
+          *
+          *   else {
+          *     from += write - nbytes;
+          *     if (nbytes < len) {
+          *       len -= nbytes;
+          *       do {
+          *         PUP(out) = PUP(from);
+          *       } while (--nbytes);
+          *       from = out - dist;
+          *     }
+          *   }
+          */
+ #define write_r %eax
+         addl    write_r, from_r
+         subl    nbytes_r, from_r        /* from += write - nbytes */
+ #undef write_r
+ 
+         movl    len(%esp), len_r
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1             /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+ 
+ .L_do_copy1:
+         /* regs: %esi = from, %esi = in, %ebp = hold, %bl = bits, %edi = out
+          *       %eax = len
+          *
+          *     while (len > 0) {
+          *       PUP(out) = PUP(from);
+          *       len--;
+          *     }
+          *   }
+          * } while (in < last && out < end);
+          */
+ #undef nbytes_r
+ #define in_r %esi
+         movl    len_r, %ecx
+         rep     movsb
+ 
+         movl    in(%esp), in_r          /* move in back to %esi, toss from */
+         jmp     .L_while_test
+ 
+ #undef len_r
+ #undef dist_r
+ 
+ #endif /* NO_MMX || RUN_TIME_MMX */
+ 
+ 
+ /*** MMX code ***/
+ 
+ #if defined( USE_MMX ) || defined( RUN_TIME_MMX )
+ 
+ .align 32,0x90
+ .L_init_mmx:
+         emms
+ 
+ #undef  bits_r
+ #undef  bitslong_r
+ #define bitslong_r %ebp
+ #define hold_mm    %mm0
+         movd    %ebp, hold_mm
+         movl    %ebx, bitslong_r
+ 
+ #define used_mm   %mm1
+ #define dmask2_mm %mm2
+ #define lmask2_mm %mm3
+ #define lmask_mm  %mm4
+ #define dmask_mm  %mm5
+ #define tmp_mm    %mm6
+ 
+         movd    lmask(%esp), lmask_mm
+         movq    lmask_mm, lmask2_mm
+         movd    dmask(%esp), dmask_mm
+         movq    dmask_mm, dmask2_mm
+         pxor    used_mm, used_mm
+         movl    lcode(%esp), %ebx       /* ebx = lcode */
+         jmp     .L_do_loop_mmx
+ 
+ .align 32,0x90
+ .L_while_test_mmx:
+         /* while (in < last && out < end)
+          */
+         cmpl    out_r, end(%esp)
+         jbe     .L_break_loop           /* if (out >= end) */
+ 
+         cmpl    in_r, last(%esp)
+         jbe     .L_break_loop
+ 
+ .L_do_loop_mmx:
+         psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */
+ 
+         cmpl    $32, bitslong_r
+         ja      .L_get_length_code_mmx  /* if (32 < bits) */
+ 
+         movd    bitslong_r, tmp_mm
+         movd    (in_r), %mm7
+         addl    $4, in_r
+         psllq   tmp_mm, %mm7
+         addl    $32, bitslong_r
+         por     %mm7, hold_mm           /* hold_mm |= *((uint *)in)++ << bits */
+ 
+ .L_get_length_code_mmx:
+         pand    hold_mm, lmask_mm
+         movd    lmask_mm, %eax
+         movq    lmask2_mm, lmask_mm
+         movl    (%ebx,%eax,4), %eax     /* eax = lcode[hold & lmask] */
+ 
+ .L_dolen_mmx:
+         movzbl  %ah, %ecx               /* ecx = this.bits */
+         movd    %ecx, used_mm
+         subl    %ecx, bitslong_r        /* bits -= this.bits */
+ 
+         testb   %al, %al
+         jnz     .L_test_for_length_base_mmx /* if (op != 0) 45.7% */
+ 
+         shrl    $16, %eax               /* output this.val char */
+         stosb
+         jmp     .L_while_test_mmx
+ 
+ .L_test_for_length_base_mmx:
+ #define len_r  %edx
+         movl    %eax, len_r             /* len = this */
+         shrl    $16, len_r              /* len = this.val */
+ 
+         testb   $16, %al
+         jz      .L_test_for_second_level_length_mmx /* if ((op & 16) == 0) 8% */
+         andl    $15, %eax               /* op &= 15 */
+         jz      .L_decode_distance_mmx  /* if (!op) */
+ 
+         psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */
+         movd    %eax, used_mm
+         movd    hold_mm, %ecx
+         subl    %eax, bitslong_r
+         andl    .L_mask(,%eax,4), %ecx
+         addl    %ecx, len_r             /* len += hold & mask[op] */
+ 
+ .L_decode_distance_mmx:
+         psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */
+ 
+         cmpl    $32, bitslong_r
+         ja      .L_get_dist_code_mmx    /* if (32 < bits) */
+ 
+         movd    bitslong_r, tmp_mm
+         movd    (in_r), %mm7
+         addl    $4, in_r
+         psllq   tmp_mm, %mm7
+         addl    $32, bitslong_r
+         por     %mm7, hold_mm           /* hold_mm |= *((uint *)in)++ << bits */
+ 
+ .L_get_dist_code_mmx:
+         movl    dcode(%esp), %ebx       /* ebx = dcode */
+         pand    hold_mm, dmask_mm
+         movd    dmask_mm, %eax
+         movq    dmask2_mm, dmask_mm
+         movl    (%ebx,%eax,4), %eax     /* eax = dcode[hold & lmask] */
+ 
+ .L_dodist_mmx:
+ #define dist_r %ebx
+         movzbl  %ah, %ecx               /* ecx = this.bits */
+         movl    %eax, dist_r
+         shrl    $16, dist_r             /* dist  = this.val */
+         subl    %ecx, bitslong_r        /* bits -= this.bits */
+         movd    %ecx, used_mm
+ 
+         testb   $16, %al                /* if ((op & 16) == 0) */
+         jz      .L_test_for_second_level_dist_mmx
+         andl    $15, %eax               /* op &= 15 */
+         jz      .L_check_dist_one_mmx
+ 
+ .L_add_bits_to_dist_mmx:
+         psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */
+         movd    %eax, used_mm           /* save bit length of current op */
+         movd    hold_mm, %ecx           /* get the next bits on input stream */
+         subl    %eax, bitslong_r        /* bits -= op bits */
+         andl    .L_mask(,%eax,4), %ecx  /* ecx   = hold & mask[op] */
+         addl    %ecx, dist_r            /* dist += hold & mask[op] */
+ 
+ .L_check_window_mmx:
+         movl    in_r, in(%esp)          /* save in so from can use it's reg */
+         movl    out_r, %eax
+         subl    beg(%esp), %eax         /* nbytes = out - beg */
+ 
+         cmpl    dist_r, %eax
+         jb      .L_clip_window_mmx      /* if (dist > nbytes) 4.2% */
+ 
+         movl    len_r, %ecx
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+ 
+         subl    $3, %ecx
+         movb    (from_r), %al
+         movb    %al, (out_r)
+         movb    1(from_r), %al
+         movb    2(from_r), %dl
+         addl    $3, from_r
+         movb    %al, 1(out_r)
+         movb    %dl, 2(out_r)
+         addl    $3, out_r
+         rep     movsb
+ 
+         movl    in(%esp), in_r          /* move in back to %esi, toss from */
+         movl    lcode(%esp), %ebx       /* move lcode back to %ebx, toss dist */
+         jmp     .L_while_test_mmx
+ 
+ .align 16,0x90
+ .L_check_dist_one_mmx:
+         cmpl    $1, dist_r
+         jne     .L_check_window_mmx
+         cmpl    out_r, beg(%esp)
+         je      .L_check_window_mmx
+ 
+         decl    out_r
+         movl    len_r, %ecx
+         movb    (out_r), %al
+         subl    $3, %ecx
+ 
+         movb    %al, 1(out_r)
+         movb    %al, 2(out_r)
+         movb    %al, 3(out_r)
+         addl    $4, out_r
+         rep     stosb
+ 
+         movl    lcode(%esp), %ebx       /* move lcode back to %ebx, toss dist */
+         jmp     .L_while_test_mmx
+ 
+ .align 16,0x90
+ .L_test_for_second_level_length_mmx:
+         testb   $64, %al
+         jnz     .L_test_for_end_of_block  /* if ((op & 64) != 0) */
+ 
+         andl    $15, %eax
+         psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */
+         movd    hold_mm, %ecx
+         andl    .L_mask(,%eax,4), %ecx
+         addl    len_r, %ecx
+         movl    (%ebx,%ecx,4), %eax     /* eax = lcode[hold & lmask] */
+         jmp     .L_dolen_mmx
+ 
+ .align 16,0x90
+ .L_test_for_second_level_dist_mmx:
+         testb   $64, %al
+         jnz     .L_invalid_distance_code  /* if ((op & 64) != 0) */
+ 
+         andl    $15, %eax
+         psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */
+         movd    hold_mm, %ecx
+         andl    .L_mask(,%eax,4), %ecx
+         movl    dcode(%esp), %eax       /* ecx = dcode */
+         addl    dist_r, %ecx
+         movl    (%eax,%ecx,4), %eax     /* eax = lcode[hold & lmask] */
+         jmp     .L_dodist_mmx
+ 
+ .align 16,0x90
+ .L_clip_window_mmx:
+ #define nbytes_r %ecx
+         movl    %eax, nbytes_r
+         movl    wsize(%esp), %eax       /* prepare for dist compare */
+         negl    nbytes_r                /* nbytes = -nbytes */
+         movl    window(%esp), from_r    /* from = window */
+ 
+         cmpl    dist_r, %eax
+         jb      .L_invalid_distance_too_far /* if (dist > wsize) */
+ 
+         addl    dist_r, nbytes_r        /* nbytes = dist - nbytes */
+         cmpl    $0, write(%esp)
+         jne     .L_wrap_around_window_mmx /* if (write != 0) */
+ 
+         subl    nbytes_r, %eax
+         addl    %eax, from_r            /* from += wsize - nbytes */
+ 
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+         jmp     .L_do_copy1_mmx
+ 
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+         jmp     .L_do_copy1_mmx
+ 
+ .L_wrap_around_window_mmx:
+ #define write_r %eax
+         movl    write(%esp), write_r
+         cmpl    write_r, nbytes_r
+         jbe     .L_contiguous_in_window_mmx /* if (write >= nbytes) */
+ 
+         addl    wsize(%esp), from_r
+         addl    write_r, from_r
+         subl    nbytes_r, from_r        /* from += wsize + write - nbytes */
+         subl    write_r, nbytes_r       /* nbytes -= write */
+ #undef write_r
+ 
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    window(%esp), from_r    /* from = window */
+         movl    write(%esp), nbytes_r   /* nbytes = write */
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+         jmp     .L_do_copy1_mmx
+ 
+ .L_contiguous_in_window_mmx:
+ #define write_r %eax
+         addl    write_r, from_r
+         subl    nbytes_r, from_r        /* from += write - nbytes */
+ #undef write_r
+ 
+         cmpl    nbytes_r, len_r
+         jbe     .L_do_copy1_mmx         /* if (nbytes >= len) */
+ 
+         subl    nbytes_r, len_r         /* len -= nbytes */
+         rep     movsb
+         movl    out_r, from_r
+         subl    dist_r, from_r          /* from = out - dist */
+ 
+ .L_do_copy1_mmx:
+ #undef nbytes_r
+ #define in_r %esi
+         movl    len_r, %ecx
+         rep     movsb
+ 
+         movl    in(%esp), in_r          /* move in back to %esi, toss from */
+         movl    lcode(%esp), %ebx       /* move lcode back to %ebx, toss dist */
+         jmp     .L_while_test_mmx
+ 
+ #undef hold_r
+ #undef bitslong_r
+ 
+ #endif /* USE_MMX || RUN_TIME_MMX */
+ 
+ 
+ /*** USE_MMX, NO_MMX, and RUNTIME_MMX from here on ***/
+ 
+ .L_invalid_distance_code:
+         /* else {
+          *   strm->msg = "invalid distance code";
+          *   state->mode = BAD;
+          * }
+          */
+         movl    $.L_invalid_distance_code_msg, %ecx
+         movl    $INFLATE_MODE_BAD, %edx
+         jmp     .L_update_stream_state
+ 
+ .L_test_for_end_of_block:
+         /* else if (op & 32) {
+          *   state->mode = TYPE;
+          *   break;
+          * }
+          */
+         testb   $32, %al
+         jz      .L_invalid_literal_length_code  /* if ((op & 32) == 0) */
+ 
+         movl    $0, %ecx
+         movl    $INFLATE_MODE_TYPE, %edx
+         jmp     .L_update_stream_state
+ 
+ .L_invalid_literal_length_code:
+         /* else {
+          *   strm->msg = "invalid literal/length code";
+          *   state->mode = BAD;
+          * }
+          */
+         movl    $.L_invalid_literal_length_code_msg, %ecx
+         movl    $INFLATE_MODE_BAD, %edx
+         jmp     .L_update_stream_state
+ 
+ .L_invalid_distance_too_far:
+         /* strm->msg = "invalid distance too far back";
+          * state->mode = BAD;
+          */
+         movl    in(%esp), in_r          /* from_r has in's reg, put in back */
+         movl    $.L_invalid_distance_too_far_msg, %ecx
+         movl    $INFLATE_MODE_BAD, %edx
+         jmp     .L_update_stream_state
+ 
+ .L_update_stream_state:
+         /* set strm->msg = %ecx, strm->state->mode = %edx */
+         movl    strm_sp(%esp), %eax
+         testl   %ecx, %ecx              /* if (msg != NULL) */
+         jz      .L_skip_msg
+         movl    %ecx, msg_strm(%eax)    /* strm->msg = msg */
+ .L_skip_msg:
+         movl    state_strm(%eax), %eax  /* state = strm->state */
+         movl    %edx, mode_state(%eax)  /* state->mode = edx (BAD | TYPE) */
+         jmp     .L_break_loop
+ 
+ .align 32,0x90
+ .L_break_loop:
+ 
+ /*
+  * Regs:
+  *
+  * bits = %ebp when mmx, and in %ebx when non-mmx
+  * hold = %hold_mm when mmx, and in %ebp when non-mmx
+  * in   = %esi
+  * out  = %edi
+  */
+ 
+ #if defined( USE_MMX ) || defined( RUN_TIME_MMX )
+ 
+ #if defined( RUN_TIME_MMX )
+ 
+         cmpl    $DO_USE_MMX, inflate_fast_use_mmx
+         jne     .L_update_next_in
+ 
+ #endif /* RUN_TIME_MMX */
+ 
+         movl    %ebp, %ebx
+ 
+ .L_update_next_in:
+ 
+ #endif
+ 
+ #define strm_r  %eax
+ #define state_r %edx
+ 
+         /* len = bits >> 3;
+          * in -= len;
+          * bits -= len << 3;
+          * hold &= (1U << bits) - 1;
+          * state->hold = hold;
+          * state->bits = bits;
+          * strm->next_in = in;
+          * strm->next_out = out;
+          */
+         movl    strm_sp(%esp), strm_r
+         movl    %ebx, %ecx
+         movl    state_strm(strm_r), state_r
+         shrl    $3, %ecx
+         subl    %ecx, in_r
+         shll    $3, %ecx
+         subl    %ecx, %ebx
+         movl    out_r, next_out_strm(strm_r)
+         movl    %ebx, bits_state(state_r)
+         movl    %ebx, %ecx
+ 
+         leal    buf(%esp), %ebx
+         cmpl    %ebx, last(%esp)
+         jne     .L_buf_not_used         /* if buf != last */
+ 
+         subl    %ebx, in_r              /* in -= buf */
+         movl    next_in_strm(strm_r), %ebx
+         movl    %ebx, last(%esp)        /* last = strm->next_in */
+         addl    %ebx, in_r              /* in += strm->next_in */
+         movl    avail_in_strm(strm_r), %ebx
+         subl    $11, %ebx
+         addl    %ebx, last(%esp)    /* last = &strm->next_in[ avail_in - 11 ] */
+ 
+ .L_buf_not_used:
+         movl    in_r, next_in_strm(strm_r)
+ 
+         movl    $1, %ebx
+         shll    %cl, %ebx
+         decl    %ebx
+ 
+ #if defined( USE_MMX ) || defined( RUN_TIME_MMX )
+ 
+ #if defined( RUN_TIME_MMX )
+ 
+         cmpl    $DO_USE_MMX, inflate_fast_use_mmx
+         jne     .L_update_hold
+ 
+ #endif /* RUN_TIME_MMX */
+ 
+         psrlq   used_mm, hold_mm        /* hold_mm >>= last bit length */
+         movd    hold_mm, %ebp
+ 
+         emms
+ 
+ .L_update_hold:
+ 
+ #endif /* USE_MMX || RUN_TIME_MMX */
+ 
+         andl    %ebx, %ebp
+         movl    %ebp, hold_state(state_r)
+ 
+ #define last_r %ebx
+ 
+         /* strm->avail_in = in < last ? 11 + (last - in) : 11 - (in - last) */
+         movl    last(%esp), last_r
+         cmpl    in_r, last_r
+         jbe     .L_last_is_smaller     /* if (in >= last) */
+ 
+         subl    in_r, last_r           /* last -= in */
+         addl    $11, last_r            /* last += 11 */
+         movl    last_r, avail_in_strm(strm_r)
+         jmp     .L_fixup_out
+ .L_last_is_smaller:
+         subl    last_r, in_r           /* in -= last */
+         negl    in_r                   /* in = -in */
+         addl    $11, in_r              /* in += 11 */
+         movl    in_r, avail_in_strm(strm_r)
+ 
+ #undef last_r
+ #define end_r %ebx
+ 
+ .L_fixup_out:
+         /* strm->avail_out = out < end ? 257 + (end - out) : 257 - (out - end)*/
+         movl    end(%esp), end_r
+         cmpl    out_r, end_r
+         jbe     .L_end_is_smaller      /* if (out >= end) */
+ 
+         subl    out_r, end_r           /* end -= out */
+         addl    $257, end_r            /* end += 257 */
+         movl    end_r, avail_out_strm(strm_r)
+         jmp     .L_done
+ .L_end_is_smaller:
+         subl    end_r, out_r           /* out -= end */
+         negl    out_r                  /* out = -out */
+         addl    $257, out_r            /* out += 257 */
+         movl    out_r, avail_out_strm(strm_r)
+ 
+ #undef end_r
+ #undef strm_r
+ #undef state_r
+ 
+ .L_done:
+         addl    $local_var_size, %esp
+         popf
+         popl    %ebx
+         popl    %ebp
+         popl    %esi
+         popl    %edi
+         ret
+ 
+ #if defined( GAS_ELF )
+ /* elf info */
+ .type inflate_fast,@function
+ .size inflate_fast,.-inflate_fast
+ #endif
diff -Nrcpad gcc-3.4.3/zlib/contrib/iostream/zfstream.cpp gcc-4.0.0/zlib/contrib/iostream/zfstream.cpp
*** gcc-3.4.3/zlib/contrib/iostream/zfstream.cpp	Mon Mar 11 21:49:43 2002
--- gcc-4.0.0/zlib/contrib/iostream/zfstream.cpp	Mon Oct 11 18:45:40 2004
***************
*** 1,5 ****
  
- #include <memory.h>
  #include "zfstream.h"
  
  gzfilebuf::gzfilebuf() :
--- 1,4 ----
*************** gzfilebuf::~gzfilebuf() {
*** 17,31 ****
  }
  
  gzfilebuf *gzfilebuf::open( const char *name,
! 			    int io_mode ) {
  
    if ( is_open() )
      return NULL;
  
    char char_mode[10];
!   char *p;
!   memset(char_mode,'\0',10);
!   p = char_mode;
  
    if ( io_mode & ios::in ) {
      mode = ios::in;
--- 16,28 ----
  }
  
  gzfilebuf *gzfilebuf::open( const char *name,
!                             int io_mode ) {
  
    if ( is_open() )
      return NULL;
  
    char char_mode[10];
!   char *p = char_mode;
  
    if ( io_mode & ios::in ) {
      mode = ios::in;
*************** gzfilebuf *gzfilebuf::open( const char *
*** 48,53 ****
--- 45,53 ----
      *p++ = '9';
    }
  
+   // Put the end-of-string indicator
+   *p = '\0';
+ 
    if ( (file = gzopen(name, char_mode)) == NULL )
      return NULL;
  
*************** gzfilebuf *gzfilebuf::open( const char *
*** 58,72 ****
  }
  
  gzfilebuf *gzfilebuf::attach( int file_descriptor,
! 			      int io_mode ) {
  
    if ( is_open() )
      return NULL;
  
    char char_mode[10];
!   char *p;
!   memset(char_mode,'\0',10);
!   p = char_mode;
  
    if ( io_mode & ios::in ) {
      mode = ios::in;
--- 58,70 ----
  }
  
  gzfilebuf *gzfilebuf::attach( int file_descriptor,
!                               int io_mode ) {
  
    if ( is_open() )
      return NULL;
  
    char char_mode[10];
!   char *p = char_mode;
  
    if ( io_mode & ios::in ) {
      mode = ios::in;
*************** gzfilebuf *gzfilebuf::attach( int file_d
*** 89,94 ****
--- 87,95 ----
      *p++ = '9';
    }
  
+   // Put the end-of-string indicator
+   *p = '\0';
+ 
    if ( (file = gzdopen(file_descriptor, char_mode)) == NULL )
      return NULL;
  
*************** gzfilebuf *gzfilebuf::close() {
*** 112,124 ****
  
  }
  
! int gzfilebuf::setcompressionlevel( short comp_level ) {
  
    return gzsetparams(file, comp_level, -2);
  
  }
  
! int gzfilebuf::setcompressionstrategy( short comp_strategy ) {
  
    return gzsetparams(file, -2, comp_strategy);
  
--- 113,125 ----
  
  }
  
! int gzfilebuf::setcompressionlevel( int comp_level ) {
  
    return gzsetparams(file, comp_level, -2);
  
  }
  
! int gzfilebuf::setcompressionstrategy( int comp_strategy ) {
  
    return gzsetparams(file, -2, comp_strategy);
  
*************** int gzfilebuf::underflow() {
*** 151,157 ****
  
      if ( out_waiting() ) {
        if ( flushbuf() == EOF )
! 	return EOF;
      }
  
    }
--- 152,158 ----
  
      if ( out_waiting() ) {
        if ( flushbuf() == EOF )
!         return EOF;
      }
  
    }
*************** int gzfilebuf::overflow( int c ) {
*** 180,190 ****
      setg(0,0,0);
    } else {
      if (in_avail()) {
! 	return EOF;
      }
      if (out_waiting()) {
        if (flushbuf() == EOF)
! 	return EOF;
      }
    }
  
--- 181,191 ----
      setg(0,0,0);
    } else {
      if (in_avail()) {
!         return EOF;
      }
      if (out_waiting()) {
        if (flushbuf() == EOF)
!         return EOF;
      }
    }
  
*************** void gzfilestream_common::close() {
*** 282,293 ****
  
  }
  
! gzfilebuf *gzfilestream_common::rdbuf() {
! 
    return &buffer;
- 
  }
!      
  gzifstream::gzifstream() :
    ios( gzfilestream_common::rdbuf() )
  {
--- 283,293 ----
  
  }
  
! gzfilebuf *gzfilestream_common::rdbuf()
! {
    return &buffer;
  }
! 
  gzifstream::gzifstream() :
    ios( gzfilestream_common::rdbuf() )
  {
diff -Nrcpad gcc-3.4.3/zlib/contrib/iostream/zfstream.h gcc-4.0.0/zlib/contrib/iostream/zfstream.h
*** gcc-3.4.3/zlib/contrib/iostream/zfstream.h	Mon Mar 11 21:49:43 2002
--- gcc-4.0.0/zlib/contrib/iostream/zfstream.h	Mon Oct 11 18:45:40 2004
***************
*** 1,6 ****
  
! #ifndef _zfstream_h
! #define _zfstream_h
  
  #include <fstream.h>
  #include "zlib.h"
--- 1,6 ----
  
! #ifndef zfstream_h
! #define zfstream_h
  
  #include <fstream.h>
  #include "zlib.h"
*************** public:
*** 16,23 ****
    gzfilebuf *attach( int file_descriptor, int io_mode );
    gzfilebuf *close();
  
!   int setcompressionlevel( short comp_level );
!   int setcompressionstrategy( short comp_strategy );
  
    inline int is_open() const { return (file !=NULL); }
  
--- 16,23 ----
    gzfilebuf *attach( int file_descriptor, int io_mode );
    gzfilebuf *close();
  
!   int setcompressionlevel( int comp_level );
!   int setcompressionstrategy( int comp_strategy );
  
    inline int is_open() const { return (file !=NULL); }
  
*************** private:
*** 98,115 ****
    T val;
  };
  
! template<class T> gzofstream &operator<<(gzofstream &s,
! 					 const gzomanip<T> &m) {
    return (*m.func)(s, m.val);
-   
  }
  
! inline gzofstream &setcompressionlevel( gzofstream &s, int l ) {
    (s.rdbuf())->setcompressionlevel(l);
    return s;
  }
  
! inline gzofstream &setcompressionstrategy( gzofstream &s, int l ) {
    (s.rdbuf())->setcompressionstrategy(l);
    return s;
  }
--- 98,116 ----
    T val;
  };
  
! template<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &m)
! {
    return (*m.func)(s, m.val);
  }
  
! inline gzofstream &setcompressionlevel( gzofstream &s, int l )
! {
    (s.rdbuf())->setcompressionlevel(l);
    return s;
  }
  
! inline gzofstream &setcompressionstrategy( gzofstream &s, int l )
! {
    (s.rdbuf())->setcompressionstrategy(l);
    return s;
  }
*************** inline gzomanip<int> setcompressionstrat
*** 125,142 ****
  }
  
  #endif
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
--- 126,128 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/iostream2/zstream_test.cpp gcc-4.0.0/zlib/contrib/iostream2/zstream_test.cpp
*** gcc-3.4.3/zlib/contrib/iostream2/zstream_test.cpp	Mon Mar 11 21:49:47 2002
--- gcc-4.0.0/zlib/contrib/iostream2/zstream_test.cpp	Mon Oct 11 18:45:40 2004
***************
*** 4,12 ****
  #include <iomanip.h>
  
  void main() {
! 	char h[256] = "Hello";
! 	char* g = "Goodbye";
! 	ozstream out("temp.gz");
      out < "This works well" < h < g;
      out.close();
  
--- 4,12 ----
  #include <iomanip.h>
  
  void main() {
!     char h[256] = "Hello";
!     char* g = "Goodbye";
!     ozstream out("temp.gz");
      out < "This works well" < h < g;
      out.close();
  
diff -Nrcpad gcc-3.4.3/zlib/contrib/iostream3/README gcc-4.0.0/zlib/contrib/iostream3/README
*** gcc-3.4.3/zlib/contrib/iostream3/README	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/iostream3/README	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,35 ----
+ These classes provide a C++ stream interface to the zlib library. It allows you
+ to do things like:
+ 
+   gzofstream outf("blah.gz");
+   outf << "These go into the gzip file " << 123 << endl;
+ 
+ It does this by deriving a specialized stream buffer for gzipped files, which is
+ the way Stroustrup would have done it. :->
+ 
+ The gzifstream and gzofstream classes were originally written by Kevin Ruland
+ and made available in the zlib contrib/iostream directory. The older version still
+ compiles under gcc 2.xx, but not under gcc 3.xx, which sparked the development of
+ this version.
+ 
+ The new classes are as standard-compliant as possible, closely following the
+ approach of the standard library's fstream classes. It compiles under gcc versions
+ 3.2 and 3.3, but not under gcc 2.xx. This is mainly due to changes in the standard
+ library naming scheme. The new version of gzifstream/gzofstream/gzfilebuf differs
+ from the previous one in the following respects:
+ - added showmanyc
+ - added setbuf, with support for unbuffered output via setbuf(0,0)
+ - a few bug fixes of stream behavior
+ - gzipped output file opened with default compression level instead of maximum level
+ - setcompressionlevel()/strategy() members replaced by single setcompression()
+ 
+ The code is provided "as is", with the permission to use, copy, modify, distribute
+ and sell it for any purpose without fee.
+ 
+ Ludwig Schwardt
+ <schwardt@sun.ac.za>
+ 
+ DSP Lab
+ Electrical & Electronic Engineering Department
+ University of Stellenbosch
+ South Africa
diff -Nrcpad gcc-3.4.3/zlib/contrib/iostream3/TODO gcc-4.0.0/zlib/contrib/iostream3/TODO
*** gcc-3.4.3/zlib/contrib/iostream3/TODO	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/iostream3/TODO	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,17 ----
+ Possible upgrades to gzfilebuf:
+ 
+ - The ability to do putback (e.g. putbackfail)
+ 
+ - The ability to seek (zlib supports this, but could be slow/tricky)
+ 
+ - Simultaneous read/write access (does it make sense?)
+ 
+ - Support for ios_base::ate open mode
+ 
+ - Locale support?
+ 
+ - Check public interface to see which calls give problems
+   (due to dependence on library internals)
+ 
+ - Override operator<<(ostream&, gzfilebuf*) to allow direct copying
+   of stream buffer to stream ( i.e. os << is.rdbuf(); )
diff -Nrcpad gcc-3.4.3/zlib/contrib/iostream3/test.cc gcc-4.0.0/zlib/contrib/iostream3/test.cc
*** gcc-3.4.3/zlib/contrib/iostream3/test.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/iostream3/test.cc	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,50 ----
+ /*
+  * Test program for gzifstream and gzofstream
+  *
+  * by Ludwig Schwardt <schwardt@sun.ac.za>
+  * original version by Kevin Ruland <kevin@rodin.wustl.edu>
+  */
+ 
+ #include "zfstream.h"
+ #include <iostream>      // for cout
+ 
+ int main() {
+ 
+   gzofstream outf;
+   gzifstream inf;
+   char buf[80];
+ 
+   outf.open("test1.txt.gz");
+   outf << "The quick brown fox sidestepped the lazy canine\n"
+        << 1.3 << "\nPlan " << 9 << std::endl;
+   outf.close();
+   std::cout << "Wrote the following message to 'test1.txt.gz' (check with zcat or zless):\n"
+             << "The quick brown fox sidestepped the lazy canine\n"
+             << 1.3 << "\nPlan " << 9 << std::endl;
+ 
+   std::cout << "\nReading 'test1.txt.gz' (buffered) produces:\n";
+   inf.open("test1.txt.gz");
+   while (inf.getline(buf,80,'\n')) {
+     std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n";
+   }
+   inf.close();
+ 
+   outf.rdbuf()->pubsetbuf(0,0);
+   outf.open("test2.txt.gz");
+   outf << setcompression(Z_NO_COMPRESSION)
+        << "The quick brown fox sidestepped the lazy canine\n"
+        << 1.3 << "\nPlan " << 9 << std::endl;
+   outf.close();
+   std::cout << "\nWrote the same message to 'test2.txt.gz' in uncompressed form";
+ 
+   std::cout << "\nReading 'test2.txt.gz' (unbuffered) produces:\n";
+   inf.rdbuf()->pubsetbuf(0,0);
+   inf.open("test2.txt.gz");
+   while (inf.getline(buf,80,'\n')) {
+     std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n";
+   }
+   inf.close();
+ 
+   return 0;
+ 
+ }
diff -Nrcpad gcc-3.4.3/zlib/contrib/iostream3/zfstream.cc gcc-4.0.0/zlib/contrib/iostream3/zfstream.cc
*** gcc-3.4.3/zlib/contrib/iostream3/zfstream.cc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/iostream3/zfstream.cc	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,479 ----
+ /*
+  * A C++ I/O streams interface to the zlib gz* functions
+  *
+  * by Ludwig Schwardt <schwardt@sun.ac.za>
+  * original version by Kevin Ruland <kevin@rodin.wustl.edu>
+  *
+  * This version is standard-compliant and compatible with gcc 3.x.
+  */
+ 
+ #include "zfstream.h"
+ #include <cstring>          // for strcpy, strcat, strlen (mode strings)
+ #include <cstdio>           // for BUFSIZ
+ 
+ // Internal buffer sizes (default and "unbuffered" versions)
+ #define BIGBUFSIZE BUFSIZ
+ #define SMALLBUFSIZE 1
+ 
+ /*****************************************************************************/
+ 
+ // Default constructor
+ gzfilebuf::gzfilebuf()
+ : file(NULL), io_mode(std::ios_base::openmode(0)), own_fd(false),
+   buffer(NULL), buffer_size(BIGBUFSIZE), own_buffer(true)
+ {
+   // No buffers to start with
+   this->disable_buffer();
+ }
+ 
+ // Destructor
+ gzfilebuf::~gzfilebuf()
+ {
+   // Sync output buffer and close only if responsible for file
+   // (i.e. attached streams should be left open at this stage)
+   this->sync();
+   if (own_fd)
+     this->close();
+   // Make sure internal buffer is deallocated
+   this->disable_buffer();
+ }
+ 
+ // Set compression level and strategy
+ int
+ gzfilebuf::setcompression(int comp_level,
+                           int comp_strategy)
+ {
+   return gzsetparams(file, comp_level, comp_strategy);
+ }
+ 
+ // Open gzipped file
+ gzfilebuf*
+ gzfilebuf::open(const char *name,
+                 std::ios_base::openmode mode)
+ {
+   // Fail if file already open
+   if (this->is_open())
+     return NULL;
+   // Don't support simultaneous read/write access (yet)
+   if ((mode & std::ios_base::in) && (mode & std::ios_base::out))
+     return NULL;
+ 
+   // Build mode string for gzopen and check it [27.8.1.3.2]
+   char char_mode[6] = "\0\0\0\0\0";
+   if (!this->open_mode(mode, char_mode))
+     return NULL;
+ 
+   // Attempt to open file
+   if ((file = gzopen(name, char_mode)) == NULL)
+     return NULL;
+ 
+   // On success, allocate internal buffer and set flags
+   this->enable_buffer();
+   io_mode = mode;
+   own_fd = true;
+   return this;
+ }
+ 
+ // Attach to gzipped file
+ gzfilebuf*
+ gzfilebuf::attach(int fd,
+                   std::ios_base::openmode mode)
+ {
+   // Fail if file already open
+   if (this->is_open())
+     return NULL;
+   // Don't support simultaneous read/write access (yet)
+   if ((mode & std::ios_base::in) && (mode & std::ios_base::out))
+     return NULL;
+ 
+   // Build mode string for gzdopen and check it [27.8.1.3.2]
+   char char_mode[6] = "\0\0\0\0\0";
+   if (!this->open_mode(mode, char_mode))
+     return NULL;
+ 
+   // Attempt to attach to file
+   if ((file = gzdopen(fd, char_mode)) == NULL)
+     return NULL;
+ 
+   // On success, allocate internal buffer and set flags
+   this->enable_buffer();
+   io_mode = mode;
+   own_fd = false;
+   return this;
+ }
+ 
+ // Close gzipped file
+ gzfilebuf*
+ gzfilebuf::close()
+ {
+   // Fail immediately if no file is open
+   if (!this->is_open())
+     return NULL;
+   // Assume success
+   gzfilebuf* retval = this;
+   // Attempt to sync and close gzipped file
+   if (this->sync() == -1)
+     retval = NULL;
+   if (gzclose(file) < 0)
+     retval = NULL;
+   // File is now gone anyway (postcondition [27.8.1.3.8])
+   file = NULL;
+   own_fd = false;
+   // Destroy internal buffer if it exists
+   this->disable_buffer();
+   return retval;
+ }
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+ 
+ // Convert int open mode to mode string
+ bool
+ gzfilebuf::open_mode(std::ios_base::openmode mode,
+                      char* c_mode) const
+ {
+   bool testb = mode & std::ios_base::binary;
+   bool testi = mode & std::ios_base::in;
+   bool testo = mode & std::ios_base::out;
+   bool testt = mode & std::ios_base::trunc;
+   bool testa = mode & std::ios_base::app;
+ 
+   // Check for valid flag combinations - see [27.8.1.3.2] (Table 92)
+   // Original zfstream hardcoded the compression level to maximum here...
+   // Double the time for less than 1% size improvement seems
+   // excessive though - keeping it at the default level
+   // To change back, just append "9" to the next three mode strings
+   if (!testi && testo && !testt && !testa)
+     strcpy(c_mode, "w");
+   if (!testi && testo && !testt && testa)
+     strcpy(c_mode, "a");
+   if (!testi && testo && testt && !testa)
+     strcpy(c_mode, "w");
+   if (testi && !testo && !testt && !testa)
+     strcpy(c_mode, "r");
+   // No read/write mode yet
+ //  if (testi && testo && !testt && !testa)
+ //    strcpy(c_mode, "r+");
+ //  if (testi && testo && testt && !testa)
+ //    strcpy(c_mode, "w+");
+ 
+   // Mode string should be empty for invalid combination of flags
+   if (strlen(c_mode) == 0)
+     return false;
+   if (testb)
+     strcat(c_mode, "b");
+   return true;
+ }
+ 
+ // Determine number of characters in internal get buffer
+ std::streamsize
+ gzfilebuf::showmanyc()
+ {
+   // Calls to underflow will fail if file not opened for reading
+   if (!this->is_open() || !(io_mode & std::ios_base::in))
+     return -1;
+   // Make sure get area is in use
+   if (this->gptr() && (this->gptr() < this->egptr()))
+     return std::streamsize(this->egptr() - this->gptr());
+   else
+     return 0;
+ }
+ 
+ // Fill get area from gzipped file
+ gzfilebuf::int_type
+ gzfilebuf::underflow()
+ {
+   // If something is left in the get area by chance, return it
+   // (this shouldn't normally happen, as underflow is only supposed
+   // to be called when gptr >= egptr, but it serves as error check)
+   if (this->gptr() && (this->gptr() < this->egptr()))
+     return traits_type::to_int_type(*(this->gptr()));
+ 
+   // If the file hasn't been opened for reading, produce error
+   if (!this->is_open() || !(io_mode & std::ios_base::in))
+     return traits_type::eof();
+ 
+   // Attempt to fill internal buffer from gzipped file
+   // (buffer must be guaranteed to exist...)
+   int bytes_read = gzread(file, buffer, buffer_size);
+   // Indicates error or EOF
+   if (bytes_read <= 0)
+   {
+     // Reset get area
+     this->setg(buffer, buffer, buffer);
+     return traits_type::eof();
+   }
+   // Make all bytes read from file available as get area
+   this->setg(buffer, buffer, buffer + bytes_read);
+ 
+   // Return next character in get area
+   return traits_type::to_int_type(*(this->gptr()));
+ }
+ 
+ // Write put area to gzipped file
+ gzfilebuf::int_type
+ gzfilebuf::overflow(int_type c)
+ {
+   // Determine whether put area is in use
+   if (this->pbase())
+   {
+     // Double-check pointer range
+     if (this->pptr() > this->epptr() || this->pptr() < this->pbase())
+       return traits_type::eof();
+     // Add extra character to buffer if not EOF
+     if (!traits_type::eq_int_type(c, traits_type::eof()))
+     {
+       *(this->pptr()) = traits_type::to_char_type(c);
+       this->pbump(1);
+     }
+     // Number of characters to write to file
+     int bytes_to_write = this->pptr() - this->pbase();
+     // Overflow doesn't fail if nothing is to be written
+     if (bytes_to_write > 0)
+     {
+       // If the file hasn't been opened for writing, produce error
+       if (!this->is_open() || !(io_mode & std::ios_base::out))
+         return traits_type::eof();
+       // If gzipped file won't accept all bytes written to it, fail
+       if (gzwrite(file, this->pbase(), bytes_to_write) != bytes_to_write)
+         return traits_type::eof();
+       // Reset next pointer to point to pbase on success
+       this->pbump(-bytes_to_write);
+     }
+   }
+   // Write extra character to file if not EOF
+   else if (!traits_type::eq_int_type(c, traits_type::eof()))
+   {
+     // If the file hasn't been opened for writing, produce error
+     if (!this->is_open() || !(io_mode & std::ios_base::out))
+       return traits_type::eof();
+     // Impromptu char buffer (allows "unbuffered" output)
+     char_type last_char = traits_type::to_char_type(c);
+     // If gzipped file won't accept this character, fail
+     if (gzwrite(file, &last_char, 1) != 1)
+       return traits_type::eof();
+   }
+ 
+   // If you got here, you have succeeded (even if c was EOF)
+   // The return value should therefore be non-EOF
+   if (traits_type::eq_int_type(c, traits_type::eof()))
+     return traits_type::not_eof(c);
+   else
+     return c;
+ }
+ 
+ // Assign new buffer
+ std::streambuf*
+ gzfilebuf::setbuf(char_type* p,
+                   std::streamsize n)
+ {
+   // First make sure stuff is sync'ed, for safety
+   if (this->sync() == -1)
+     return NULL;
+   // If buffering is turned off on purpose via setbuf(0,0), still allocate one...
+   // "Unbuffered" only really refers to put [27.8.1.4.10], while get needs at
+   // least a buffer of size 1 (very inefficient though, therefore make it bigger?)
+   // This follows from [27.5.2.4.3]/12 (gptr needs to point at something, it seems)
+   if (!p || !n)
+   {
+     // Replace existing buffer (if any) with small internal buffer
+     this->disable_buffer();
+     buffer = NULL;
+     buffer_size = 0;
+     own_buffer = true;
+     this->enable_buffer();
+   }
+   else
+   {
+     // Replace existing buffer (if any) with external buffer
+     this->disable_buffer();
+     buffer = p;
+     buffer_size = n;
+     own_buffer = false;
+     this->enable_buffer();
+   }
+   return this;
+ }
+ 
+ // Write put area to gzipped file (i.e. ensures that put area is empty)
+ int
+ gzfilebuf::sync()
+ {
+   return traits_type::eq_int_type(this->overflow(), traits_type::eof()) ? -1 : 0;
+ }
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+ 
+ // Allocate internal buffer
+ void
+ gzfilebuf::enable_buffer()
+ {
+   // If internal buffer required, allocate one
+   if (own_buffer && !buffer)
+   {
+     // Check for buffered vs. "unbuffered"
+     if (buffer_size > 0)
+     {
+       // Allocate internal buffer
+       buffer = new char_type[buffer_size];
+       // Get area starts empty and will be expanded by underflow as need arises
+       this->setg(buffer, buffer, buffer);
+       // Setup entire internal buffer as put area.
+       // The one-past-end pointer actually points to the last element of the buffer,
+       // so that overflow(c) can safely add the extra character c to the sequence.
+       // These pointers remain in place for the duration of the buffer
+       this->setp(buffer, buffer + buffer_size - 1);
+     }
+     else
+     {
+       // Even in "unbuffered" case, (small?) get buffer is still required
+       buffer_size = SMALLBUFSIZE;
+       buffer = new char_type[buffer_size];
+       this->setg(buffer, buffer, buffer);
+       // "Unbuffered" means no put buffer
+       this->setp(0, 0);
+     }
+   }
+   else
+   {
+     // If buffer already allocated, reset buffer pointers just to make sure no
+     // stale chars are lying around
+     this->setg(buffer, buffer, buffer);
+     this->setp(buffer, buffer + buffer_size - 1);
+   }
+ }
+ 
+ // Destroy internal buffer
+ void
+ gzfilebuf::disable_buffer()
+ {
+   // If internal buffer exists, deallocate it
+   if (own_buffer && buffer)
+   {
+     // Preserve unbuffered status by zeroing size
+     if (!this->pbase())
+       buffer_size = 0;
+     delete[] buffer;
+     buffer = NULL;
+     this->setg(0, 0, 0);
+     this->setp(0, 0);
+   }
+   else
+   {
+     // Reset buffer pointers to initial state if external buffer exists
+     this->setg(buffer, buffer, buffer);
+     if (buffer)
+       this->setp(buffer, buffer + buffer_size - 1);
+     else
+       this->setp(0, 0);
+   }
+ }
+ 
+ /*****************************************************************************/
+ 
+ // Default constructor initializes stream buffer
+ gzifstream::gzifstream()
+ : std::istream(NULL), sb()
+ { this->init(&sb); }
+ 
+ // Initialize stream buffer and open file
+ gzifstream::gzifstream(const char* name,
+                        std::ios_base::openmode mode)
+ : std::istream(NULL), sb()
+ {
+   this->init(&sb);
+   this->open(name, mode);
+ }
+ 
+ // Initialize stream buffer and attach to file
+ gzifstream::gzifstream(int fd,
+                        std::ios_base::openmode mode)
+ : std::istream(NULL), sb()
+ {
+   this->init(&sb);
+   this->attach(fd, mode);
+ }
+ 
+ // Open file and go into fail() state if unsuccessful
+ void
+ gzifstream::open(const char* name,
+                  std::ios_base::openmode mode)
+ {
+   if (!sb.open(name, mode | std::ios_base::in))
+     this->setstate(std::ios_base::failbit);
+   else
+     this->clear();
+ }
+ 
+ // Attach to file and go into fail() state if unsuccessful
+ void
+ gzifstream::attach(int fd,
+                    std::ios_base::openmode mode)
+ {
+   if (!sb.attach(fd, mode | std::ios_base::in))
+     this->setstate(std::ios_base::failbit);
+   else
+     this->clear();
+ }
+ 
+ // Close file
+ void
+ gzifstream::close()
+ {
+   if (!sb.close())
+     this->setstate(std::ios_base::failbit);
+ }
+ 
+ /*****************************************************************************/
+ 
+ // Default constructor initializes stream buffer
+ gzofstream::gzofstream()
+ : std::ostream(NULL), sb()
+ { this->init(&sb); }
+ 
+ // Initialize stream buffer and open file
+ gzofstream::gzofstream(const char* name,
+                        std::ios_base::openmode mode)
+ : std::ostream(NULL), sb()
+ {
+   this->init(&sb);
+   this->open(name, mode);
+ }
+ 
+ // Initialize stream buffer and attach to file
+ gzofstream::gzofstream(int fd,
+                        std::ios_base::openmode mode)
+ : std::ostream(NULL), sb()
+ {
+   this->init(&sb);
+   this->attach(fd, mode);
+ }
+ 
+ // Open file and go into fail() state if unsuccessful
+ void
+ gzofstream::open(const char* name,
+                  std::ios_base::openmode mode)
+ {
+   if (!sb.open(name, mode | std::ios_base::out))
+     this->setstate(std::ios_base::failbit);
+   else
+     this->clear();
+ }
+ 
+ // Attach to file and go into fail() state if unsuccessful
+ void
+ gzofstream::attach(int fd,
+                    std::ios_base::openmode mode)
+ {
+   if (!sb.attach(fd, mode | std::ios_base::out))
+     this->setstate(std::ios_base::failbit);
+   else
+     this->clear();
+ }
+ 
+ // Close file
+ void
+ gzofstream::close()
+ {
+   if (!sb.close())
+     this->setstate(std::ios_base::failbit);
+ }
diff -Nrcpad gcc-3.4.3/zlib/contrib/iostream3/zfstream.h gcc-4.0.0/zlib/contrib/iostream3/zfstream.h
*** gcc-3.4.3/zlib/contrib/iostream3/zfstream.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/iostream3/zfstream.h	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,466 ----
+ /*
+  * A C++ I/O streams interface to the zlib gz* functions
+  *
+  * by Ludwig Schwardt <schwardt@sun.ac.za>
+  * original version by Kevin Ruland <kevin@rodin.wustl.edu>
+  *
+  * This version is standard-compliant and compatible with gcc 3.x.
+  */
+ 
+ #ifndef ZFSTREAM_H
+ #define ZFSTREAM_H
+ 
+ #include <istream>  // not iostream, since we don't need cin/cout
+ #include <ostream>
+ #include "zlib.h"
+ 
+ /*****************************************************************************/
+ 
+ /**
+  *  @brief  Gzipped file stream buffer class.
+  *
+  *  This class implements basic_filebuf for gzipped files. It doesn't yet support
+  *  seeking (allowed by zlib but slow/limited), putback and read/write access
+  *  (tricky). Otherwise, it attempts to be a drop-in replacement for the standard
+  *  file streambuf.
+ */
+ class gzfilebuf : public std::streambuf
+ {
+ public:
+   //  Default constructor.
+   gzfilebuf();
+ 
+   //  Destructor.
+   virtual
+   ~gzfilebuf();
+ 
+   /**
+    *  @brief  Set compression level and strategy on the fly.
+    *  @param  comp_level  Compression level (see zlib.h for allowed values)
+    *  @param  comp_strategy  Compression strategy (see zlib.h for allowed values)
+    *  @return  Z_OK on success, Z_STREAM_ERROR otherwise.
+    *
+    *  Unfortunately, these parameters cannot be modified separately, as the
+    *  previous zfstream version assumed. Since the strategy is seldom changed,
+    *  it can default and setcompression(level) then becomes like the old
+    *  setcompressionlevel(level).
+   */
+   int
+   setcompression(int comp_level,
+                  int comp_strategy = Z_DEFAULT_STRATEGY);
+ 
+   /**
+    *  @brief  Check if file is open.
+    *  @return  True if file is open.
+   */
+   bool
+   is_open() const { return (file != NULL); }
+ 
+   /**
+    *  @brief  Open gzipped file.
+    *  @param  name  File name.
+    *  @param  mode  Open mode flags.
+    *  @return  @c this on success, NULL on failure.
+   */
+   gzfilebuf*
+   open(const char* name,
+        std::ios_base::openmode mode);
+ 
+   /**
+    *  @brief  Attach to already open gzipped file.
+    *  @param  fd  File descriptor.
+    *  @param  mode  Open mode flags.
+    *  @return  @c this on success, NULL on failure.
+   */
+   gzfilebuf*
+   attach(int fd,
+          std::ios_base::openmode mode);
+ 
+   /**
+    *  @brief  Close gzipped file.
+    *  @return  @c this on success, NULL on failure.
+   */
+   gzfilebuf*
+   close();
+ 
+ protected:
+   /**
+    *  @brief  Convert ios open mode int to mode string used by zlib.
+    *  @return  True if valid mode flag combination.
+   */
+   bool
+   open_mode(std::ios_base::openmode mode,
+             char* c_mode) const;
+ 
+   /**
+    *  @brief  Number of characters available in stream buffer.
+    *  @return  Number of characters.
+    *
+    *  This indicates number of characters in get area of stream buffer.
+    *  These characters can be read without accessing the gzipped file.
+   */
+   virtual std::streamsize
+   showmanyc();
+ 
+   /**
+    *  @brief  Fill get area from gzipped file.
+    *  @return  First character in get area on success, EOF on error.
+    *
+    *  This actually reads characters from gzipped file to stream
+    *  buffer. Always buffered.
+   */
+   virtual int_type
+   underflow();
+ 
+   /**
+    *  @brief  Write put area to gzipped file.
+    *  @param  c  Extra character to add to buffer contents.
+    *  @return  Non-EOF on success, EOF on error.
+    *
+    *  This actually writes characters in stream buffer to
+    *  gzipped file. With unbuffered output this is done one
+    *  character at a time.
+   */
+   virtual int_type
+   overflow(int_type c = traits_type::eof());
+ 
+   /**
+    *  @brief  Installs external stream buffer.
+    *  @param  p  Pointer to char buffer.
+    *  @param  n  Size of external buffer.
+    *  @return  @c this on success, NULL on failure.
+    *
+    *  Call setbuf(0,0) to enable unbuffered output.
+   */
+   virtual std::streambuf*
+   setbuf(char_type* p,
+          std::streamsize n);
+ 
+   /**
+    *  @brief  Flush stream buffer to file.
+    *  @return  0 on success, -1 on error.
+    *
+    *  This calls underflow(EOF) to do the job.
+   */
+   virtual int
+   sync();
+ 
+ //
+ // Some future enhancements
+ //
+ //  virtual int_type uflow();
+ //  virtual int_type pbackfail(int_type c = traits_type::eof());
+ //  virtual pos_type
+ //  seekoff(off_type off,
+ //          std::ios_base::seekdir way,
+ //          std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out);
+ //  virtual pos_type
+ //  seekpos(pos_type sp,
+ //          std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out);
+ 
+ private:
+   /**
+    *  @brief  Allocate internal buffer.
+    *
+    *  This function is safe to call multiple times. It will ensure
+    *  that a proper internal buffer exists if it is required. If the
+    *  buffer already exists or is external, the buffer pointers will be
+    *  reset to their original state.
+   */
+   void
+   enable_buffer();
+ 
+   /**
+    *  @brief  Destroy internal buffer.
+    *
+    *  This function is safe to call multiple times. It will ensure
+    *  that the internal buffer is deallocated if it exists. In any
+    *  case, it will also reset the buffer pointers.
+   */
+   void
+   disable_buffer();
+ 
+   /**
+    *  Underlying file pointer.
+   */
+   gzFile file;
+ 
+   /**
+    *  Mode in which file was opened.
+   */
+   std::ios_base::openmode io_mode;
+ 
+   /**
+    *  @brief  True if this object owns file descriptor.
+    *
+    *  This makes the class responsible for closing the file
+    *  upon destruction.
+   */
+   bool own_fd;
+ 
+   /**
+    *  @brief  Stream buffer.
+    *
+    *  For simplicity this remains allocated on the free store for the
+    *  entire life span of the gzfilebuf object, unless replaced by setbuf.
+   */
+   char_type* buffer;
+ 
+   /**
+    *  @brief  Stream buffer size.
+    *
+    *  Defaults to system default buffer size (typically 8192 bytes).
+    *  Modified by setbuf.
+   */
+   std::streamsize buffer_size;
+ 
+   /**
+    *  @brief  True if this object owns stream buffer.
+    *
+    *  This makes the class responsible for deleting the buffer
+    *  upon destruction.
+   */
+   bool own_buffer;
+ };
+ 
+ /*****************************************************************************/
+ 
+ /**
+  *  @brief  Gzipped file input stream class.
+  *
+  *  This class implements ifstream for gzipped files. Seeking and putback
+  *  is not supported yet.
+ */
+ class gzifstream : public std::istream
+ {
+ public:
+   //  Default constructor
+   gzifstream();
+ 
+   /**
+    *  @brief  Construct stream on gzipped file to be opened.
+    *  @param  name  File name.
+    *  @param  mode  Open mode flags (forced to contain ios::in).
+   */
+   explicit
+   gzifstream(const char* name,
+              std::ios_base::openmode mode = std::ios_base::in);
+ 
+   /**
+    *  @brief  Construct stream on already open gzipped file.
+    *  @param  fd    File descriptor.
+    *  @param  mode  Open mode flags (forced to contain ios::in).
+   */
+   explicit
+   gzifstream(int fd,
+              std::ios_base::openmode mode = std::ios_base::in);
+ 
+   /**
+    *  Obtain underlying stream buffer.
+   */
+   gzfilebuf*
+   rdbuf() const
+   { return const_cast<gzfilebuf*>(&sb); }
+ 
+   /**
+    *  @brief  Check if file is open.
+    *  @return  True if file is open.
+   */
+   bool
+   is_open() { return sb.is_open(); }
+ 
+   /**
+    *  @brief  Open gzipped file.
+    *  @param  name  File name.
+    *  @param  mode  Open mode flags (forced to contain ios::in).
+    *
+    *  Stream will be in state good() if file opens successfully;
+    *  otherwise in state fail(). This differs from the behavior of
+    *  ifstream, which never sets the state to good() and therefore
+    *  won't allow you to reuse the stream for a second file unless
+    *  you manually clear() the state. The choice is a matter of
+    *  convenience.
+   */
+   void
+   open(const char* name,
+        std::ios_base::openmode mode = std::ios_base::in);
+ 
+   /**
+    *  @brief  Attach to already open gzipped file.
+    *  @param  fd  File descriptor.
+    *  @param  mode  Open mode flags (forced to contain ios::in).
+    *
+    *  Stream will be in state good() if attach succeeded; otherwise
+    *  in state fail().
+   */
+   void
+   attach(int fd,
+          std::ios_base::openmode mode = std::ios_base::in);
+ 
+   /**
+    *  @brief  Close gzipped file.
+    *
+    *  Stream will be in state fail() if close failed.
+   */
+   void
+   close();
+ 
+ private:
+   /**
+    *  Underlying stream buffer.
+   */
+   gzfilebuf sb;
+ };
+ 
+ /*****************************************************************************/
+ 
+ /**
+  *  @brief  Gzipped file output stream class.
+  *
+  *  This class implements ofstream for gzipped files. Seeking and putback
+  *  is not supported yet.
+ */
+ class gzofstream : public std::ostream
+ {
+ public:
+   //  Default constructor
+   gzofstream();
+ 
+   /**
+    *  @brief  Construct stream on gzipped file to be opened.
+    *  @param  name  File name.
+    *  @param  mode  Open mode flags (forced to contain ios::out).
+   */
+   explicit
+   gzofstream(const char* name,
+              std::ios_base::openmode mode = std::ios_base::out);
+ 
+   /**
+    *  @brief  Construct stream on already open gzipped file.
+    *  @param  fd    File descriptor.
+    *  @param  mode  Open mode flags (forced to contain ios::out).
+   */
+   explicit
+   gzofstream(int fd,
+              std::ios_base::openmode mode = std::ios_base::out);
+ 
+   /**
+    *  Obtain underlying stream buffer.
+   */
+   gzfilebuf*
+   rdbuf() const
+   { return const_cast<gzfilebuf*>(&sb); }
+ 
+   /**
+    *  @brief  Check if file is open.
+    *  @return  True if file is open.
+   */
+   bool
+   is_open() { return sb.is_open(); }
+ 
+   /**
+    *  @brief  Open gzipped file.
+    *  @param  name  File name.
+    *  @param  mode  Open mode flags (forced to contain ios::out).
+    *
+    *  Stream will be in state good() if file opens successfully;
+    *  otherwise in state fail(). This differs from the behavior of
+    *  ofstream, which never sets the state to good() and therefore
+    *  won't allow you to reuse the stream for a second file unless
+    *  you manually clear() the state. The choice is a matter of
+    *  convenience.
+   */
+   void
+   open(const char* name,
+        std::ios_base::openmode mode = std::ios_base::out);
+ 
+   /**
+    *  @brief  Attach to already open gzipped file.
+    *  @param  fd  File descriptor.
+    *  @param  mode  Open mode flags (forced to contain ios::out).
+    *
+    *  Stream will be in state good() if attach succeeded; otherwise
+    *  in state fail().
+   */
+   void
+   attach(int fd,
+          std::ios_base::openmode mode = std::ios_base::out);
+ 
+   /**
+    *  @brief  Close gzipped file.
+    *
+    *  Stream will be in state fail() if close failed.
+   */
+   void
+   close();
+ 
+ private:
+   /**
+    *  Underlying stream buffer.
+   */
+   gzfilebuf sb;
+ };
+ 
+ /*****************************************************************************/
+ 
+ /**
+  *  @brief  Gzipped file output stream manipulator class.
+  *
+  *  This class defines a two-argument manipulator for gzofstream. It is used
+  *  as base for the setcompression(int,int) manipulator.
+ */
+ template<typename T1, typename T2>
+   class gzomanip2
+   {
+   public:
+     // Allows insertor to peek at internals
+     template <typename Ta, typename Tb>
+       friend gzofstream&
+       operator<<(gzofstream&,
+                  const gzomanip2<Ta,Tb>&);
+ 
+     // Constructor
+     gzomanip2(gzofstream& (*f)(gzofstream&, T1, T2),
+               T1 v1,
+               T2 v2);
+   private:
+     // Underlying manipulator function
+     gzofstream&
+     (*func)(gzofstream&, T1, T2);
+ 
+     // Arguments for manipulator function
+     T1 val1;
+     T2 val2;
+   };
+ 
+ /*****************************************************************************/
+ 
+ // Manipulator function thunks through to stream buffer
+ inline gzofstream&
+ setcompression(gzofstream &gzs, int l, int s = Z_DEFAULT_STRATEGY)
+ {
+   (gzs.rdbuf())->setcompression(l, s);
+   return gzs;
+ }
+ 
+ // Manipulator constructor stores arguments
+ template<typename T1, typename T2>
+   inline
+   gzomanip2<T1,T2>::gzomanip2(gzofstream &(*f)(gzofstream &, T1, T2),
+                               T1 v1,
+                               T2 v2)
+   : func(f), val1(v1), val2(v2)
+   { }
+ 
+ // Insertor applies underlying manipulator function to stream
+ template<typename T1, typename T2>
+   inline gzofstream&
+   operator<<(gzofstream& s, const gzomanip2<T1,T2>& m)
+   { return (*m.func)(s, m.val1, m.val2); }
+ 
+ // Insert this onto stream to simplify setting of compression level
+ inline gzomanip2<int,int>
+ setcompression(int l, int s = Z_DEFAULT_STRATEGY)
+ { return gzomanip2<int,int>(&setcompression, l, s); }
+ 
+ #endif // ZFSTREAM_H
diff -Nrcpad gcc-3.4.3/zlib/contrib/masm686/match.asm gcc-4.0.0/zlib/contrib/masm686/match.asm
*** gcc-3.4.3/zlib/contrib/masm686/match.asm	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/masm686/match.asm	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,408 ----
+ 
+ ; match.asm -- Pentium-Pro optimized version of longest_match()
+ ;
+ ; Updated for zlib 1.1.3 and converted to MASM 6.1x
+ ; Copyright (C) 2000 Dan Higdon <hdan@kinesoft.com>
+ ;                    and Chuck Walbourn <chuckw@kinesoft.com>
+ ; Corrections by Cosmin Truta <cosmint@cs.ubbcluj.ro>
+ ;
+ ; This is free software; you can redistribute it and/or modify it
+ ; under the terms of the GNU General Public License.
+ 
+ ; Based on match.S
+ ; Written for zlib 1.1.2
+ ; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
+ 
+ 	.686P
+ 	.MODEL	FLAT
+ 
+ ;===========================================================================
+ ; EQUATES
+ ;===========================================================================
+ 
+ MAX_MATCH	EQU 258
+ MIN_MATCH	EQU 3
+ MIN_LOOKAHEAD	EQU (MAX_MATCH + MIN_MATCH + 1)
+ MAX_MATCH_8	EQU ((MAX_MATCH + 7) AND (NOT 7))
+ 
+ ;===========================================================================
+ ; STRUCTURES
+ ;===========================================================================
+ 
+ ; This STRUCT assumes a 4-byte alignment
+ 
+ DEFLATE_STATE	STRUCT
+ ds_strm			dd ?
+ ds_status		dd ?
+ ds_pending_buf		dd ?
+ ds_pending_buf_size	dd ?
+ ds_pending_out		dd ?
+ ds_pending		dd ?
+ ds_wrap			dd ?
+ ds_data_type		db ?
+ ds_method		db ?
+ 			db ?	; padding
+ 			db ?	; padding
+ ds_last_flush		dd ?
+ ds_w_size		dd ?	; used
+ ds_w_bits		dd ?
+ ds_w_mask		dd ?	; used
+ ds_window		dd ?	; used
+ ds_window_size		dd ?
+ ds_prev			dd ?	; used
+ ds_head			dd ?
+ ds_ins_h		dd ?
+ ds_hash_size		dd ?
+ ds_hash_bits		dd ?
+ ds_hash_mask		dd ?
+ ds_hash_shift		dd ?
+ ds_block_start		dd ?
+ ds_match_length		dd ?	; used
+ ds_prev_match		dd ?	; used
+ ds_match_available	dd ?
+ ds_strstart		dd ?	; used
+ ds_match_start		dd ?	; used
+ ds_lookahead		dd ?	; used
+ ds_prev_length		dd ?	; used
+ ds_max_chain_length	dd ?	; used
+ ds_max_laxy_match	dd ?
+ ds_level		dd ?
+ ds_strategy		dd ?
+ ds_good_match		dd ?	; used
+ ds_nice_match		dd ?	; used
+ 
+ ; Don't need anymore of the struct for match
+ DEFLATE_STATE	ENDS
+ 
+ ;===========================================================================
+ ; CODE
+ ;===========================================================================
+ _TEXT	SEGMENT
+ 
+ ;---------------------------------------------------------------------------
+ ; match_init
+ ;---------------------------------------------------------------------------
+ 	ALIGN	4
+ PUBLIC	_match_init
+ _match_init	PROC
+ 	; no initialization needed
+ 	ret
+ _match_init	ENDP
+ 
+ ;---------------------------------------------------------------------------
+ ; uInt longest_match(deflate_state *deflatestate, IPos curmatch)
+ ;---------------------------------------------------------------------------
+ 	ALIGN	4
+ 
+ PUBLIC	_longest_match
+ _longest_match	PROC
+ 
+ ; Since this code uses EBP for a scratch register, the stack frame must
+ ; be manually constructed and referenced relative to the ESP register.
+ 
+ ; Stack image
+ ; Variables
+ chainlenwmask	=  0	; high word: current chain len
+ 			; low word: s->wmask
+ window		=  4	; local copy of s->window
+ windowbestlen	=  8	; s->window + bestlen
+ scanend		= 12	; last two bytes of string
+ scanstart	= 16	; first two bytes of string
+ scanalign	= 20	; dword-misalignment of string
+ nicematch	= 24	; a good enough match size
+ bestlen		= 28	; size of best match so far
+ scan		= 32	; ptr to string wanting match
+ varsize		= 36	; number of bytes (also offset to last saved register)
+ 
+ ; Saved Registers (actually pushed into place)
+ ebx_save	= 36
+ edi_save	= 40
+ esi_save	= 44
+ ebp_save	= 48
+ 
+ ; Parameters
+ retaddr		= 52
+ deflatestate	= 56
+ curmatch	= 60
+ 
+ ; Save registers that the compiler may be using
+ 	push	ebp
+ 	push	edi
+ 	push	esi
+ 	push	ebx
+ 
+ ; Allocate local variable space
+ 	sub	esp,varsize
+ 
+ ; Retrieve the function arguments. ecx will hold cur_match
+ ; throughout the entire function. edx will hold the pointer to the
+ ; deflate_state structure during the function's setup (before
+ ; entering the main loop).
+ 
+ 	mov	edx, [esp+deflatestate]
+ ASSUME	edx:PTR DEFLATE_STATE
+ 
+ 	mov	ecx, [esp+curmatch]
+ 
+ ; uInt wmask = s->w_mask;
+ ; unsigned chain_length = s->max_chain_length;
+ ; if (s->prev_length >= s->good_match) {
+ ;     chain_length >>= 2;
+ ; }
+ 
+ 	mov	eax, [edx].ds_prev_length
+ 	mov	ebx, [edx].ds_good_match
+ 	cmp	eax, ebx
+ 	mov	eax, [edx].ds_w_mask
+ 	mov	ebx, [edx].ds_max_chain_length
+ 	jl	SHORT LastMatchGood
+ 	shr	ebx, 2
+ LastMatchGood:
+ 
+ ; chainlen is decremented once beforehand so that the function can
+ ; use the sign flag instead of the zero flag for the exit test.
+ ; It is then shifted into the high word, to make room for the wmask
+ ; value, which it will always accompany.
+ 
+ 	dec	ebx
+ 	shl	ebx, 16
+ 	or	ebx, eax
+ 	mov	[esp+chainlenwmask], ebx
+ 
+ ; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+ 
+ 	mov	eax, [edx].ds_nice_match
+ 	mov	ebx, [edx].ds_lookahead
+ 	cmp	ebx, eax
+ 	jl	SHORT LookaheadLess
+ 	mov	ebx, eax
+ LookaheadLess:
+ 	mov	[esp+nicematch], ebx
+ 
+ ;/* register Bytef *scan = s->window + s->strstart;                     */
+ 
+ 	mov	esi, [edx].ds_window
+ 	mov	[esp+window], esi
+ 	mov	ebp, [edx].ds_strstart
+ 	lea	edi, [esi+ebp]
+ 	mov	[esp+scan],edi
+ 
+ ;/* Determine how many bytes the scan ptr is off from being             */
+ ;/* dword-aligned.                                                      */
+ 
+ 	mov	eax, edi
+ 	neg	eax
+ 	and	eax, 3
+ 	mov	[esp+scanalign], eax
+ 
+ ;/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ?                      */
+ ;/*     s->strstart - (IPos)MAX_DIST(s) : NIL;                          */
+ 
+ 	mov	eax, [edx].ds_w_size
+ 	sub	eax, MIN_LOOKAHEAD
+ 	sub	ebp, eax
+ 	jg	SHORT LimitPositive
+ 	xor	ebp, ebp
+ LimitPositive:
+ 
+ ;/* int best_len = s->prev_length;                                      */
+ 
+ 	mov	eax, [edx].ds_prev_length
+ 	mov	[esp+bestlen], eax
+ 
+ ;/* Store the sum of s->window + best_len in %esi locally, and in %esi. */
+ 
+ 	add	esi, eax
+ 	mov	[esp+windowbestlen], esi
+ 
+ ;/* register ush scan_start = *(ushf*)scan;                             */
+ ;/* register ush scan_end   = *(ushf*)(scan+best_len-1);                */
+ ;/* Posf *prev = s->prev;                                               */
+ 
+ 	movzx	ebx, WORD PTR[edi]
+ 	mov	[esp+scanstart], ebx
+ 	movzx	ebx, WORD PTR[eax+edi-1]
+ 	mov	[esp+scanend], ebx
+ 	mov	edi, [edx].ds_prev
+ 
+ ;/* Jump into the main loop.                                            */
+ 
+ 	mov	edx, [esp+chainlenwmask]
+ 	jmp	SHORT LoopEntry
+ 
+ ;/* do {
+ ; *     match = s->window + cur_match;
+ ; *     if (*(ushf*)(match+best_len-1) != scan_end ||
+ ; *         *(ushf*)match != scan_start) continue;
+ ; *     [...]
+ ; * } while ((cur_match = prev[cur_match & wmask]) > limit
+ ; *          && --chain_length != 0);
+ ; *
+ ; * Here is the inner loop of the function. The function will spend the
+ ; * majority of its time in this loop, and majority of that time will
+ ; * be spent in the first ten instructions.
+ ; *
+ ; * Within this loop:
+ ; * %ebx = scanend
+ ; * %ecx = curmatch
+ ; * %edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
+ ; * %esi = windowbestlen - i.e., (window + bestlen)
+ ; * %edi = prev
+ ; * %ebp = limit
+ ; */
+ 
+ 	ALIGN	4
+ LookupLoop:
+ 	and	ecx, edx
+ 	movzx	ecx, WORD PTR[edi+ecx*2]
+ 	cmp	ecx, ebp
+ 	jbe	LeaveNow
+ 	sub	edx, 000010000H
+ 	js	LeaveNow
+ 
+ LoopEntry:
+ 	movzx	eax, WORD PTR[esi+ecx-1]
+ 	cmp	eax, ebx
+ 	jnz	SHORT LookupLoop
+ 
+ 	mov	eax, [esp+window]
+ 	movzx	eax, WORD PTR[eax+ecx]
+ 	cmp	eax, [esp+scanstart]
+ 	jnz	SHORT LookupLoop
+ 
+ ;/* Store the current value of chainlen.                                */
+ 
+ 	mov	[esp+chainlenwmask], edx
+ 
+ ;/* Point %edi to the string under scrutiny, and %esi to the string we  */
+ ;/* are hoping to match it up with. In actuality, %esi and %edi are     */
+ ;/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is     */
+ ;/* initialized to -(MAX_MATCH_8 - scanalign).                          */
+ 
+ 	mov	esi, [esp+window]
+ 	mov	edi, [esp+scan]
+ 	add	esi, ecx
+ 	mov	eax, [esp+scanalign]
+ 	mov	edx, -MAX_MATCH_8
+ 	lea	edi, [edi+eax+MAX_MATCH_8]
+ 	lea	esi, [esi+eax+MAX_MATCH_8]
+ 
+ ;/* Test the strings for equality, 8 bytes at a time. At the end,
+ ; * adjust %edx so that it is offset to the exact byte that mismatched.
+ ; *
+ ; * We already know at this point that the first three bytes of the
+ ; * strings match each other, and they can be safely passed over before
+ ; * starting the compare loop. So what this code does is skip over 0-3
+ ; * bytes, as much as necessary in order to dword-align the %edi
+ ; * pointer. (%esi will still be misaligned three times out of four.)
+ ; *
+ ; * It should be confessed that this loop usually does not represent
+ ; * much of the total running time. Replacing it with a more
+ ; * straightforward "rep cmpsb" would not drastically degrade
+ ; * performance.
+ ; */
+ 
+ LoopCmps:
+ 	mov	eax, DWORD PTR[esi+edx]
+ 	xor	eax, DWORD PTR[edi+edx]
+ 	jnz	SHORT LeaveLoopCmps
+ 
+ 	mov	eax, DWORD PTR[esi+edx+4]
+ 	xor	eax, DWORD PTR[edi+edx+4]
+ 	jnz	SHORT LeaveLoopCmps4
+ 
+ 	add	edx, 8
+ 	jnz	SHORT LoopCmps
+ 	jmp	LenMaximum
+ 	ALIGN	4
+ 
+ LeaveLoopCmps4:
+ 	add	edx, 4
+ 
+ LeaveLoopCmps:
+ 	test	eax, 00000FFFFH
+ 	jnz	SHORT LenLower
+ 
+ 	add	edx, 2
+ 	shr	eax, 16
+ 
+ LenLower:
+ 	sub	al, 1
+ 	adc	edx, 0
+ 
+ ;/* Calculate the length of the match. If it is longer than MAX_MATCH,  */
+ ;/* then automatically accept it as the best possible match and leave.  */
+ 
+ 	lea	eax, [edi+edx]
+ 	mov	edi, [esp+scan]
+ 	sub	eax, edi
+ 	cmp	eax, MAX_MATCH
+ 	jge	SHORT LenMaximum
+ 
+ ;/* If the length of the match is not longer than the best match we     */
+ ;/* have so far, then forget it and return to the lookup loop.          */
+ 
+ 	mov	edx, [esp+deflatestate]
+ 	mov	ebx, [esp+bestlen]
+ 	cmp	eax, ebx
+ 	jg	SHORT LongerMatch
+ 	mov	esi, [esp+windowbestlen]
+ 	mov	edi, [edx].ds_prev
+ 	mov	ebx, [esp+scanend]
+ 	mov	edx, [esp+chainlenwmask]
+ 	jmp	LookupLoop
+ 	ALIGN	4
+ 
+ ;/*         s->match_start = cur_match;                                 */
+ ;/*         best_len = len;                                             */
+ ;/*         if (len >= nice_match) break;                               */
+ ;/*         scan_end = *(ushf*)(scan+best_len-1);                       */
+ 
+ LongerMatch:
+ 	mov	ebx, [esp+nicematch]
+ 	mov	[esp+bestlen], eax
+ 	mov	[edx].ds_match_start, ecx
+ 	cmp	eax, ebx
+ 	jge	SHORT LeaveNow
+ 	mov	esi, [esp+window]
+ 	add	esi, eax
+ 	mov	[esp+windowbestlen], esi
+ 	movzx	ebx, WORD PTR[edi+eax-1]
+ 	mov	edi, [edx].ds_prev
+ 	mov	[esp+scanend], ebx
+ 	mov	edx, [esp+chainlenwmask]
+ 	jmp	LookupLoop
+ 	ALIGN	4
+ 
+ ;/* Accept the current string, with the maximum possible length.        */
+ 
+ LenMaximum:
+ 	mov	edx, [esp+deflatestate]
+ 	mov	DWORD PTR[esp+bestlen], MAX_MATCH
+ 	mov	[edx].ds_match_start, ecx
+ 
+ ;/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len;          */
+ ;/* return s->lookahead;                                                */
+ 
+ LeaveNow:
+ 	mov	edx, [esp+deflatestate]
+ 	mov	ebx, [esp+bestlen]
+ 	mov	eax, [edx].ds_lookahead
+ 	cmp	ebx, eax
+ 	jg	SHORT LookaheadRet
+ 	mov	eax, ebx
+ LookaheadRet:
+ 
+ ; Restore the stack and return from whence we came.
+ 
+ 	add	esp, varsize
+ 	pop	ebx
+ 	pop	esi
+ 	pop	edi
+ 	pop	ebp
+ 	ret
+ 
+ _longest_match	ENDP
+ 
+ _TEXT	ENDS
+ END
diff -Nrcpad gcc-3.4.3/zlib/contrib/masmx86/gvmat32.asm gcc-4.0.0/zlib/contrib/masmx86/gvmat32.asm
*** gcc-3.4.3/zlib/contrib/masmx86/gvmat32.asm	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/masmx86/gvmat32.asm	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,905 ----
+ ;
+ ; gvmat32.asm -- Asm portion of the optimized longest_match for 32 bits x86
+ ; Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
+ ; File written by Gilles Vollant, by modifiying the longest_match
+ ;  from Jean-loup Gailly in deflate.c
+ ; It need wmask == 0x7fff
+ ;     (assembly code is faster with a fixed wmask)
+ ;
+ ; For Visual C++ 4.2 and ML 6.11c (version in directory \MASM611C of Win95 DDK)
+ ;   I compile with : "ml /coff /Zi /c gvmat32.asm"
+ ;
+ 
+ ;uInt longest_match_7fff(s, cur_match)
+ ;    deflate_state *s;
+ ;    IPos cur_match;                             /* current match */
+ 
+ 	NbStack         equ     76
+ 	cur_match       equ     dword ptr[esp+NbStack-0]
+ 	str_s           equ     dword ptr[esp+NbStack-4]
+ ; 5 dword on top (ret,ebp,esi,edi,ebx)
+ 	adrret          equ     dword ptr[esp+NbStack-8]
+ 	pushebp         equ     dword ptr[esp+NbStack-12]
+ 	pushedi         equ     dword ptr[esp+NbStack-16]
+ 	pushesi         equ     dword ptr[esp+NbStack-20]
+ 	pushebx         equ     dword ptr[esp+NbStack-24]
+ 
+ 	chain_length    equ     dword ptr [esp+NbStack-28]
+ 	limit           equ     dword ptr [esp+NbStack-32]
+ 	best_len        equ     dword ptr [esp+NbStack-36]
+ 	window          equ     dword ptr [esp+NbStack-40]
+ 	prev            equ     dword ptr [esp+NbStack-44]
+ 	scan_start      equ      word ptr [esp+NbStack-48]
+ 	wmask           equ     dword ptr [esp+NbStack-52]
+ 	match_start_ptr equ     dword ptr [esp+NbStack-56]
+ 	nice_match      equ     dword ptr [esp+NbStack-60]
+ 	scan            equ     dword ptr [esp+NbStack-64]
+ 
+ 	windowlen       equ     dword ptr [esp+NbStack-68]
+ 	match_start     equ     dword ptr [esp+NbStack-72]
+ 	strend          equ     dword ptr [esp+NbStack-76]
+ 	NbStackAdd      equ     (NbStack-24)
+ 
+     .386p
+ 
+     name    gvmatch
+     .MODEL  FLAT
+ 
+ 
+ 
+ ;  all the +4 offsets are due to the addition of pending_buf_size (in zlib
+ ;  in the deflate_state structure since the asm code was first written
+ ;  (if you compile with zlib 1.0.4 or older, remove the +4).
+ ;  Note : these value are good with a 8 bytes boundary pack structure
+     dep_chain_length    equ     70h+4
+     dep_window          equ     2ch+4
+     dep_strstart        equ     60h+4
+     dep_prev_length     equ     6ch+4
+     dep_nice_match      equ     84h+4
+     dep_w_size          equ     20h+4
+     dep_prev            equ     34h+4
+     dep_w_mask          equ     28h+4
+     dep_good_match      equ     80h+4
+     dep_match_start     equ     64h+4
+     dep_lookahead       equ     68h+4
+ 
+ 
+ _TEXT                   segment
+ 
+ IFDEF NOUNDERLINE
+ 			public  longest_match_7fff
+ 			public  longest_match_686
+ ;                        public  match_init
+ ELSE
+ 			public  _longest_match_7fff
+ 			public  _longest_match_686
+ ;                        public  _match_init
+ ENDIF
+ 
+     MAX_MATCH           equ     258
+     MIN_MATCH           equ     3
+     MIN_LOOKAHEAD       equ     (MAX_MATCH+MIN_MATCH+1)
+ 
+ 
+ 
+ IFDEF NOUNDERLINE
+ ;match_init      proc near
+ ;                ret
+ ;match_init      endp
+ ELSE
+ ;_match_init     proc near
+ ;                ret
+ ;_match_init     endp
+ ENDIF
+ 
+ 
+ IFDEF NOUNDERLINE
+ longest_match_7fff   proc near
+ ELSE
+ _longest_match_7fff  proc near
+ ENDIF
+ 
+ 	mov     edx,[esp+4]
+ 
+ 
+ 
+ 	push    ebp
+ 	push    edi
+ 	push    esi
+ 	push    ebx
+ 
+ 	sub     esp,NbStackAdd
+ 
+ ; initialize or check the variables used in match.asm.
+ 	mov     ebp,edx
+ 
+ ; chain_length = s->max_chain_length
+ ; if (prev_length>=good_match) chain_length >>= 2
+ 	mov     edx,[ebp+dep_chain_length]
+ 	mov     ebx,[ebp+dep_prev_length]
+ 	cmp     [ebp+dep_good_match],ebx
+ 	ja      noshr
+ 	shr     edx,2
+ noshr:
+ ; we increment chain_length because in the asm, the --chain_lenght is in the beginning of the loop
+ 	inc     edx
+ 	mov     edi,[ebp+dep_nice_match]
+ 	mov     chain_length,edx
+ 	mov     eax,[ebp+dep_lookahead]
+ 	cmp     eax,edi
+ ; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+ 	jae     nolookaheadnicematch
+ 	mov     edi,eax
+ nolookaheadnicematch:
+ ; best_len = s->prev_length
+ 	mov     best_len,ebx
+ 
+ ; window = s->window
+ 	mov     esi,[ebp+dep_window]
+ 	mov     ecx,[ebp+dep_strstart]
+ 	mov     window,esi
+ 
+ 	mov     nice_match,edi
+ ; scan = window + strstart
+ 	add     esi,ecx
+ 	mov     scan,esi
+ ; dx = *window
+ 	mov     dx,word ptr [esi]
+ ; bx = *(window+best_len-1)
+ 	mov     bx,word ptr [esi+ebx-1]
+ 	add     esi,MAX_MATCH-1
+ ; scan_start = *scan
+ 	mov     scan_start,dx
+ ; strend = scan + MAX_MATCH-1
+ 	mov     strend,esi
+ ; bx = scan_end = *(window+best_len-1)
+ 
+ ;    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+ ;        s->strstart - (IPos)MAX_DIST(s) : NIL;
+ 
+ 	mov     esi,[ebp+dep_w_size]
+ 	sub     esi,MIN_LOOKAHEAD
+ ; here esi = MAX_DIST(s)
+ 	sub     ecx,esi
+ 	ja      nodist
+ 	xor     ecx,ecx
+ nodist:
+ 	mov     limit,ecx
+ 
+ ; prev = s->prev
+ 	mov     edx,[ebp+dep_prev]
+ 	mov     prev,edx
+ 
+ ;
+ 	mov     edx,dword ptr [ebp+dep_match_start]
+ 	mov     bp,scan_start
+ 	mov     eax,cur_match
+ 	mov     match_start,edx
+ 
+ 	mov     edx,window
+ 	mov     edi,edx
+ 	add     edi,best_len
+ 	mov     esi,prev
+ 	dec     edi
+ ; windowlen = window + best_len -1
+ 	mov     windowlen,edi
+ 
+ 	jmp     beginloop2
+ 	align   4
+ 
+ ; here, in the loop
+ ;       eax = ax = cur_match
+ ;       ecx = limit
+ ;        bx = scan_end
+ ;        bp = scan_start
+ ;       edi = windowlen (window + best_len -1)
+ ;       esi = prev
+ 
+ 
+ ;// here; chain_length <=16
+ normalbeg0add16:
+ 	add     chain_length,16
+ 	jz      exitloop
+ normalbeg0:
+ 	cmp     word ptr[edi+eax],bx
+ 	je      normalbeg2noroll
+ rcontlabnoroll:
+ ; cur_match = prev[cur_match & wmask]
+ 	and     eax,7fffh
+ 	mov     ax,word ptr[esi+eax*2]
+ ; if cur_match > limit, go to exitloop
+ 	cmp     ecx,eax
+ 	jnb     exitloop
+ ; if --chain_length != 0, go to exitloop
+ 	dec     chain_length
+ 	jnz     normalbeg0
+ 	jmp     exitloop
+ 
+ normalbeg2noroll:
+ ; if (scan_start==*(cur_match+window)) goto normalbeg2
+ 	cmp     bp,word ptr[edx+eax]
+ 	jne     rcontlabnoroll
+ 	jmp     normalbeg2
+ 
+ contloop3:
+ 	mov     edi,windowlen
+ 
+ ; cur_match = prev[cur_match & wmask]
+ 	and     eax,7fffh
+ 	mov     ax,word ptr[esi+eax*2]
+ ; if cur_match > limit, go to exitloop
+ 	cmp     ecx,eax
+ jnbexitloopshort1:
+ 	jnb     exitloop
+ ; if --chain_length != 0, go to exitloop
+ 
+ 
+ ; begin the main loop
+ beginloop2:
+ 	sub     chain_length,16+1
+ ; if chain_length <=16, don't use the unrolled loop
+ 	jna     normalbeg0add16
+ 
+ do16:
+ 	cmp     word ptr[edi+eax],bx
+ 	je      normalbeg2dc0
+ 
+ maccn   MACRO   lab
+ 	and     eax,7fffh
+ 	mov     ax,word ptr[esi+eax*2]
+ 	cmp     ecx,eax
+ 	jnb     exitloop
+ 	cmp     word ptr[edi+eax],bx
+ 	je      lab
+ 	ENDM
+ 
+ rcontloop0:
+ 	maccn   normalbeg2dc1
+ 
+ rcontloop1:
+ 	maccn   normalbeg2dc2
+ 
+ rcontloop2:
+ 	maccn   normalbeg2dc3
+ 
+ rcontloop3:
+ 	maccn   normalbeg2dc4
+ 
+ rcontloop4:
+ 	maccn   normalbeg2dc5
+ 
+ rcontloop5:
+ 	maccn   normalbeg2dc6
+ 
+ rcontloop6:
+ 	maccn   normalbeg2dc7
+ 
+ rcontloop7:
+ 	maccn   normalbeg2dc8
+ 
+ rcontloop8:
+ 	maccn   normalbeg2dc9
+ 
+ rcontloop9:
+ 	maccn   normalbeg2dc10
+ 
+ rcontloop10:
+ 	maccn   short normalbeg2dc11
+ 
+ rcontloop11:
+ 	maccn   short normalbeg2dc12
+ 
+ rcontloop12:
+ 	maccn   short normalbeg2dc13
+ 
+ rcontloop13:
+ 	maccn   short normalbeg2dc14
+ 
+ rcontloop14:
+ 	maccn   short normalbeg2dc15
+ 
+ rcontloop15:
+ 	and     eax,7fffh
+ 	mov     ax,word ptr[esi+eax*2]
+ 	cmp     ecx,eax
+ 	jnb     exitloop
+ 
+ 	sub     chain_length,16
+ 	ja      do16
+ 	jmp     normalbeg0add16
+ 
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ normbeg MACRO   rcontlab,valsub
+ ; if we are here, we know that *(match+best_len-1) == scan_end
+ 	cmp     bp,word ptr[edx+eax]
+ ; if (match != scan_start) goto rcontlab
+ 	jne     rcontlab
+ ; calculate the good chain_length, and we'll compare scan and match string
+ 	add     chain_length,16-valsub
+ 	jmp     iseq
+ 	ENDM
+ 
+ 
+ normalbeg2dc11:
+ 	normbeg rcontloop11,11
+ 
+ normalbeg2dc12:
+ 	normbeg short rcontloop12,12
+ 
+ normalbeg2dc13:
+ 	normbeg short rcontloop13,13
+ 
+ normalbeg2dc14:
+ 	normbeg short rcontloop14,14
+ 
+ normalbeg2dc15:
+ 	normbeg short rcontloop15,15
+ 
+ normalbeg2dc10:
+ 	normbeg rcontloop10,10
+ 
+ normalbeg2dc9:
+ 	normbeg rcontloop9,9
+ 
+ normalbeg2dc8:
+ 	normbeg rcontloop8,8
+ 
+ normalbeg2dc7:
+ 	normbeg rcontloop7,7
+ 
+ normalbeg2dc6:
+ 	normbeg rcontloop6,6
+ 
+ normalbeg2dc5:
+ 	normbeg rcontloop5,5
+ 
+ normalbeg2dc4:
+ 	normbeg rcontloop4,4
+ 
+ normalbeg2dc3:
+ 	normbeg rcontloop3,3
+ 
+ normalbeg2dc2:
+ 	normbeg rcontloop2,2
+ 
+ normalbeg2dc1:
+ 	normbeg rcontloop1,1
+ 
+ normalbeg2dc0:
+ 	normbeg rcontloop0,0
+ 
+ 
+ ; we go in normalbeg2 because *(ushf*)(match+best_len-1) == scan_end
+ 
+ normalbeg2:
+ 	mov     edi,window
+ 
+ 	cmp     bp,word ptr[edi+eax]
+ 	jne     contloop3                   ; if *(ushf*)match != scan_start, continue
+ 
+ iseq:
+ ; if we are here, we know that *(match+best_len-1) == scan_end
+ ; and (match == scan_start)
+ 
+ 	mov     edi,edx
+ 	mov     esi,scan                    ; esi = scan
+ 	add     edi,eax                     ; edi = window + cur_match = match
+ 
+ 	mov     edx,[esi+3]                 ; compare manually dword at match+3
+ 	xor     edx,[edi+3]                 ; and scan +3
+ 
+ 	jz      begincompare                ; if equal, go to long compare
+ 
+ ; we will determine the unmatch byte and calculate len (in esi)
+ 	or      dl,dl
+ 	je      eq1rr
+ 	mov     esi,3
+ 	jmp     trfinval
+ eq1rr:
+ 	or      dx,dx
+ 	je      eq1
+ 
+ 	mov     esi,4
+ 	jmp     trfinval
+ eq1:
+ 	and     edx,0ffffffh
+ 	jz      eq11
+ 	mov     esi,5
+ 	jmp     trfinval
+ eq11:
+ 	mov     esi,6
+ 	jmp     trfinval
+ 
+ begincompare:
+ 	; here we now scan and match begin same
+ 	add     edi,6
+ 	add     esi,6
+ 	mov     ecx,(MAX_MATCH-(2+4))/4     ; scan for at most MAX_MATCH bytes
+ 	repe    cmpsd                       ; loop until mismatch
+ 
+ 	je      trfin                       ; go to trfin if not unmatch
+ ; we determine the unmatch byte
+ 	sub     esi,4
+ 	mov     edx,[edi-4]
+ 	xor     edx,[esi]
+ 
+ 	or      dl,dl
+ 	jnz     trfin
+ 	inc     esi
+ 
+ 	or      dx,dx
+ 	jnz     trfin
+ 	inc     esi
+ 
+ 	and     edx,0ffffffh
+ 	jnz     trfin
+ 	inc     esi
+ 
+ trfin:
+ 	sub     esi,scan          ; esi = len
+ trfinval:
+ ; here we have finised compare, and esi contain len of equal string
+ 	cmp     esi,best_len        ; if len > best_len, go newbestlen
+ 	ja      short newbestlen
+ ; now we restore edx, ecx and esi, for the big loop
+ 	mov     esi,prev
+ 	mov     ecx,limit
+ 	mov     edx,window
+ 	jmp     contloop3
+ 
+ newbestlen:
+ 	mov     best_len,esi        ; len become best_len
+ 
+ 	mov     match_start,eax     ; save new position as match_start
+ 	cmp     esi,nice_match      ; if best_len >= nice_match, exit
+ 	jae     exitloop
+ 	mov     ecx,scan
+ 	mov     edx,window          ; restore edx=window
+ 	add     ecx,esi
+ 	add     esi,edx
+ 
+ 	dec     esi
+ 	mov     windowlen,esi       ; windowlen = window + best_len-1
+ 	mov     bx,[ecx-1]          ; bx = *(scan+best_len-1) = scan_end
+ 
+ ; now we restore ecx and esi, for the big loop :
+ 	mov     esi,prev
+ 	mov     ecx,limit
+ 	jmp     contloop3
+ 
+ exitloop:
+ ; exit : s->match_start=match_start
+ 	mov     ebx,match_start
+ 	mov     ebp,str_s
+ 	mov     ecx,best_len
+ 	mov     dword ptr [ebp+dep_match_start],ebx
+ 	mov     eax,dword ptr [ebp+dep_lookahead]
+ 	cmp     ecx,eax
+ 	ja      minexlo
+ 	mov     eax,ecx
+ minexlo:
+ ; return min(best_len,s->lookahead)
+ 
+ ; restore stack and register ebx,esi,edi,ebp
+ 	add     esp,NbStackAdd
+ 
+ 	pop     ebx
+ 	pop     esi
+ 	pop     edi
+ 	pop     ebp
+ 	ret
+ InfoAuthor:
+ ; please don't remove this string !
+ ; Your are free use gvmat32 in any fre or commercial apps if you don't remove the string in the binary!
+ 	db     0dh,0ah,"GVMat32 optimised assembly code written 1996-98 by Gilles Vollant",0dh,0ah
+ 
+ 
+ 
+ IFDEF NOUNDERLINE
+ longest_match_7fff   endp
+ ELSE
+ _longest_match_7fff  endp
+ ENDIF
+ 
+ 
+ IFDEF NOUNDERLINE
+ cpudetect32     proc near
+ ELSE
+ _cpudetect32    proc near
+ ENDIF
+ 
+ 	push	ebx
+ 
+ 	pushfd                  ; push original EFLAGS
+ 	pop     eax             ; get original EFLAGS
+ 	mov     ecx, eax        ; save original EFLAGS
+ 	xor     eax, 40000h     ; flip AC bit in EFLAGS
+ 	push    eax             ; save new EFLAGS value on stack
+ 	popfd                   ; replace current EFLAGS value
+ 	pushfd                  ; get new EFLAGS
+ 	pop     eax             ; store new EFLAGS in EAX
+ 	xor     eax, ecx        ; can’t toggle AC bit, processor=80386
+ 	jz      end_cpu_is_386  ; jump if 80386 processor
+ 	push    ecx
+ 	popfd                   ; restore AC bit in EFLAGS first
+ 
+ 	pushfd
+ 	pushfd
+ 	pop     ecx
+ 
+ 	mov     eax, ecx        ; get original EFLAGS
+ 	xor     eax, 200000h    ; flip ID bit in EFLAGS
+ 	push    eax             ; save new EFLAGS value on stack
+ 	popfd                   ; replace current EFLAGS value
+ 	pushfd                  ; get new EFLAGS
+ 	pop		eax	            ; store new EFLAGS in EAX
+ 	popfd                   ; restore original EFLAGS
+ 	xor		eax, ecx        ; can’t toggle ID bit,
+ 	je		is_old_486		; processor=old
+ 
+ 	mov     eax,1
+ 	db      0fh,0a2h        ;CPUID
+ 
+ exitcpudetect:
+ 	pop	ebx
+ 	ret
+ 
+ end_cpu_is_386:
+ 	mov     eax,0300h
+ 	jmp     exitcpudetect
+ 
+ is_old_486:
+ 	mov     eax,0400h
+ 	jmp     exitcpudetect
+ 
+ IFDEF NOUNDERLINE
+ cpudetect32     endp
+ ELSE
+ _cpudetect32    endp
+ ENDIF
+ 
+ 
+ 
+ 
+ MAX_MATCH       equ     258
+ MIN_MATCH       equ     3
+ MIN_LOOKAHEAD   equ     (MAX_MATCH + MIN_MATCH + 1)
+ MAX_MATCH_8_     equ     ((MAX_MATCH + 7) AND 0FFF0h)
+ 
+ 
+ ;;; stack frame offsets
+ 
+ chainlenwmask	equ  esp + 0	; high word: current chain len
+ 					; low word: s->wmask
+ window		equ  esp + 4	; local copy of s->window
+ windowbestlen	equ  esp + 8	; s->window + bestlen
+ scanstart	equ  esp + 16	; first two bytes of string
+ scanend		equ  esp + 12	; last two bytes of string
+ scanalign	equ  esp + 20	; dword-misalignment of string
+ nicematch	equ  esp + 24	; a good enough match size
+ bestlen		equ  esp + 28	; size of best match so far
+ scan		equ  esp + 32	; ptr to string wanting match
+ 
+ LocalVarsSize	equ 36
+ ;	saved ebx	byte esp + 36
+ ;	saved edi	byte esp + 40
+ ;	saved esi	byte esp + 44
+ ;	saved ebp	byte esp + 48
+ ;	return address	byte esp + 52
+ deflatestate	equ  esp + 56	; the function arguments
+ curmatch	equ  esp + 60
+ 
+ ;;; Offsets for fields in the deflate_state structure. These numbers
+ ;;; are calculated from the definition of deflate_state, with the
+ ;;; assumption that the compiler will dword-align the fields. (Thus,
+ ;;; changing the definition of deflate_state could easily cause this
+ ;;; program to crash horribly, without so much as a warning at
+ ;;; compile time. Sigh.)
+ 
+ dsWSize		equ 36
+ dsWMask		equ 44
+ dsWindow	equ 48
+ dsPrev		equ 56
+ dsMatchLen	equ 88
+ dsPrevMatch	equ 92
+ dsStrStart	equ 100
+ dsMatchStart	equ 104
+ dsLookahead	equ 108
+ dsPrevLen	equ 112
+ dsMaxChainLen	equ 116
+ dsGoodMatch	equ 132
+ dsNiceMatch	equ 136
+ 
+ 
+ ;;; match.asm -- Pentium-Pro-optimized version of longest_match()
+ ;;; Written for zlib 1.1.2
+ ;;; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
+ ;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html
+ ;;;
+ ;;; This is free software; you can redistribute it and/or modify it
+ ;;; under the terms of the GNU General Public License.
+ 
+ ;GLOBAL	_longest_match, _match_init
+ 
+ 
+ ;SECTION	.text
+ 
+ ;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch)
+ 
+ ;_longest_match:
+ IFDEF NOUNDERLINE
+ longest_match_686   proc near
+ ELSE
+ _longest_match_686  proc near
+ ENDIF
+ 
+ 
+ ;;; Save registers that the compiler may be using, and adjust esp to
+ ;;; make room for our stack frame.
+ 
+ 		push	ebp
+ 		push	edi
+ 		push	esi
+ 		push	ebx
+ 		sub	esp, LocalVarsSize
+ 
+ ;;; Retrieve the function arguments. ecx will hold cur_match
+ ;;; throughout the entire function. edx will hold the pointer to the
+ ;;; deflate_state structure during the function's setup (before
+ ;;; entering the main loop.
+ 
+ 		mov	edx, [deflatestate]
+ 		mov	ecx, [curmatch]
+ 
+ ;;; uInt wmask = s->w_mask;
+ ;;; unsigned chain_length = s->max_chain_length;
+ ;;; if (s->prev_length >= s->good_match) {
+ ;;;     chain_length >>= 2;
+ ;;; }
+ 
+ 		mov	eax, [edx + dsPrevLen]
+ 		mov	ebx, [edx + dsGoodMatch]
+ 		cmp	eax, ebx
+ 		mov	eax, [edx + dsWMask]
+ 		mov	ebx, [edx + dsMaxChainLen]
+ 		jl	LastMatchGood
+ 		shr	ebx, 2
+ LastMatchGood:
+ 
+ ;;; chainlen is decremented once beforehand so that the function can
+ ;;; use the sign flag instead of the zero flag for the exit test.
+ ;;; It is then shifted into the high word, to make room for the wmask
+ ;;; value, which it will always accompany.
+ 
+ 		dec	ebx
+ 		shl	ebx, 16
+ 		or	ebx, eax
+ 		mov	[chainlenwmask], ebx
+ 
+ ;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+ 
+ 		mov	eax, [edx + dsNiceMatch]
+ 		mov	ebx, [edx + dsLookahead]
+ 		cmp	ebx, eax
+ 		jl	LookaheadLess
+ 		mov	ebx, eax
+ LookaheadLess:	mov	[nicematch], ebx
+ 
+ ;;; register Bytef *scan = s->window + s->strstart;
+ 
+ 		mov	esi, [edx + dsWindow]
+ 		mov	[window], esi
+ 		mov	ebp, [edx + dsStrStart]
+ 		lea	edi, [esi + ebp]
+ 		mov	[scan], edi
+ 
+ ;;; Determine how many bytes the scan ptr is off from being
+ ;;; dword-aligned.
+ 
+ 		mov	eax, edi
+ 		neg	eax
+ 		and	eax, 3
+ 		mov	[scanalign], eax
+ 
+ ;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+ ;;;     s->strstart - (IPos)MAX_DIST(s) : NIL;
+ 
+ 		mov	eax, [edx + dsWSize]
+ 		sub	eax, MIN_LOOKAHEAD
+ 		sub	ebp, eax
+ 		jg	LimitPositive
+ 		xor	ebp, ebp
+ LimitPositive:
+ 
+ ;;; int best_len = s->prev_length;
+ 
+ 		mov	eax, [edx + dsPrevLen]
+ 		mov	[bestlen], eax
+ 
+ ;;; Store the sum of s->window + best_len in esi locally, and in esi.
+ 
+ 		add	esi, eax
+ 		mov	[windowbestlen], esi
+ 
+ ;;; register ush scan_start = *(ushf*)scan;
+ ;;; register ush scan_end   = *(ushf*)(scan+best_len-1);
+ ;;; Posf *prev = s->prev;
+ 
+ 		movzx	ebx, word ptr [edi]
+ 		mov	[scanstart], ebx
+ 		movzx	ebx, word ptr [edi + eax - 1]
+ 		mov	[scanend], ebx
+ 		mov	edi, [edx + dsPrev]
+ 
+ ;;; Jump into the main loop.
+ 
+ 		mov	edx, [chainlenwmask]
+ 		jmp	short LoopEntry
+ 
+ align 4
+ 
+ ;;; do {
+ ;;;     match = s->window + cur_match;
+ ;;;     if (*(ushf*)(match+best_len-1) != scan_end ||
+ ;;;         *(ushf*)match != scan_start) continue;
+ ;;;     [...]
+ ;;; } while ((cur_match = prev[cur_match & wmask]) > limit
+ ;;;          && --chain_length != 0);
+ ;;;
+ ;;; Here is the inner loop of the function. The function will spend the
+ ;;; majority of its time in this loop, and majority of that time will
+ ;;; be spent in the first ten instructions.
+ ;;;
+ ;;; Within this loop:
+ ;;; ebx = scanend
+ ;;; ecx = curmatch
+ ;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
+ ;;; esi = windowbestlen - i.e., (window + bestlen)
+ ;;; edi = prev
+ ;;; ebp = limit
+ 
+ LookupLoop:
+ 		and	ecx, edx
+ 		movzx	ecx, word ptr [edi + ecx*2]
+ 		cmp	ecx, ebp
+ 		jbe	LeaveNow
+ 		sub	edx, 00010000h
+ 		js	LeaveNow
+ LoopEntry:	movzx	eax, word ptr [esi + ecx - 1]
+ 		cmp	eax, ebx
+ 		jnz	LookupLoop
+ 		mov	eax, [window]
+ 		movzx	eax, word ptr [eax + ecx]
+ 		cmp	eax, [scanstart]
+ 		jnz	LookupLoop
+ 
+ ;;; Store the current value of chainlen.
+ 
+ 		mov	[chainlenwmask], edx
+ 
+ ;;; Point edi to the string under scrutiny, and esi to the string we
+ ;;; are hoping to match it up with. In actuality, esi and edi are
+ ;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is
+ ;;; initialized to -(MAX_MATCH_8 - scanalign).
+ 
+ 		mov	esi, [window]
+ 		mov	edi, [scan]
+ 		add	esi, ecx
+ 		mov	eax, [scanalign]
+ 		mov	edx, 0fffffef8h; -(MAX_MATCH_8)
+ 		lea	edi, [edi + eax + 0108h] ;MAX_MATCH_8]
+ 		lea	esi, [esi + eax + 0108h] ;MAX_MATCH_8]
+ 
+ ;;; Test the strings for equality, 8 bytes at a time. At the end,
+ ;;; adjust edx so that it is offset to the exact byte that mismatched.
+ ;;;
+ ;;; We already know at this point that the first three bytes of the
+ ;;; strings match each other, and they can be safely passed over before
+ ;;; starting the compare loop. So what this code does is skip over 0-3
+ ;;; bytes, as much as necessary in order to dword-align the edi
+ ;;; pointer. (esi will still be misaligned three times out of four.)
+ ;;;
+ ;;; It should be confessed that this loop usually does not represent
+ ;;; much of the total running time. Replacing it with a more
+ ;;; straightforward "rep cmpsb" would not drastically degrade
+ ;;; performance.
+ 
+ LoopCmps:
+ 		mov	eax, [esi + edx]
+ 		xor	eax, [edi + edx]
+ 		jnz	LeaveLoopCmps
+ 		mov	eax, [esi + edx + 4]
+ 		xor	eax, [edi + edx + 4]
+ 		jnz	LeaveLoopCmps4
+ 		add	edx, 8
+ 		jnz	LoopCmps
+ 		jmp	short LenMaximum
+ LeaveLoopCmps4:	add	edx, 4
+ LeaveLoopCmps:	test	eax, 0000FFFFh
+ 		jnz	LenLower
+ 		add	edx,  2
+ 		shr	eax, 16
+ LenLower:	sub	al, 1
+ 		adc	edx, 0
+ 
+ ;;; Calculate the length of the match. If it is longer than MAX_MATCH,
+ ;;; then automatically accept it as the best possible match and leave.
+ 
+ 		lea	eax, [edi + edx]
+ 		mov	edi, [scan]
+ 		sub	eax, edi
+ 		cmp	eax, MAX_MATCH
+ 		jge	LenMaximum
+ 
+ ;;; If the length of the match is not longer than the best match we
+ ;;; have so far, then forget it and return to the lookup loop.
+ 
+ 		mov	edx, [deflatestate]
+ 		mov	ebx, [bestlen]
+ 		cmp	eax, ebx
+ 		jg	LongerMatch
+ 		mov	esi, [windowbestlen]
+ 		mov	edi, [edx + dsPrev]
+ 		mov	ebx, [scanend]
+ 		mov	edx, [chainlenwmask]
+ 		jmp	LookupLoop
+ 
+ ;;;         s->match_start = cur_match;
+ ;;;         best_len = len;
+ ;;;         if (len >= nice_match) break;
+ ;;;         scan_end = *(ushf*)(scan+best_len-1);
+ 
+ LongerMatch:	mov	ebx, [nicematch]
+ 		mov	[bestlen], eax
+ 		mov	[edx + dsMatchStart], ecx
+ 		cmp	eax, ebx
+ 		jge	LeaveNow
+ 		mov	esi, [window]
+ 		add	esi, eax
+ 		mov	[windowbestlen], esi
+ 		movzx	ebx, word ptr [edi + eax - 1]
+ 		mov	edi, [edx + dsPrev]
+ 		mov	[scanend], ebx
+ 		mov	edx, [chainlenwmask]
+ 		jmp	LookupLoop
+ 
+ ;;; Accept the current string, with the maximum possible length.
+ 
+ LenMaximum:	mov	edx, [deflatestate]
+ 		mov	dword ptr [bestlen], MAX_MATCH
+ 		mov	[edx + dsMatchStart], ecx
+ 
+ ;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+ ;;; return s->lookahead;
+ 
+ LeaveNow:
+ 		mov	edx, [deflatestate]
+ 		mov	ebx, [bestlen]
+ 		mov	eax, [edx + dsLookahead]
+ 		cmp	ebx, eax
+ 		jg	LookaheadRet
+ 		mov	eax, ebx
+ LookaheadRet:
+ 
+ ;;; Restore the stack and return from whence we came.
+ 
+ 		add	esp, LocalVarsSize
+ 		pop	ebx
+ 		pop	esi
+ 		pop	edi
+ 		pop	ebp
+ 
+ 		ret
+ ; please don't remove this string !
+ ; Your can freely use gvmat32 in any free or commercial app if you don't remove the string in the binary!
+ 	db     0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah
+ 
+ IFDEF NOUNDERLINE
+ longest_match_686   endp
+ ELSE
+ _longest_match_686  endp
+ ENDIF
+ 
+ _TEXT   ends
+ end
diff -Nrcpad gcc-3.4.3/zlib/contrib/masmx86/gvmat32c.c gcc-4.0.0/zlib/contrib/masmx86/gvmat32c.c
*** gcc-3.4.3/zlib/contrib/masmx86/gvmat32c.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/masmx86/gvmat32c.c	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,206 ----
+ /* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86
+  * Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
+  * File written by Gilles Vollant, by modifiying the longest_match
+  *  from Jean-loup Gailly in deflate.c
+  *  it prepare all parameters and call the assembly longest_match_gvasm
+  *  longest_match execute standard C code is wmask != 0x7fff
+  *     (assembly code is faster with a fixed wmask)
+  *
+  */
+ 
+ #include "deflate.h"
+ 
+ #ifdef ASMV
+ #define NIL 0
+ 
+ #define UNALIGNED_OK
+ 
+ 
+ /* if your C compiler don't add underline before function name,
+         define ADD_UNDERLINE_ASMFUNC */
+ #ifdef ADD_UNDERLINE_ASMFUNC
+ #define longest_match_7fff _longest_match_7fff
+ #define longest_match_686  _longest_match_686
+ #define cpudetect32        _cpudetect32
+ #endif
+ 
+ 
+ 
+ void match_init()
+ {
+ }
+ 
+ unsigned long cpudetect32();
+ 
+ uInt longest_match_c(
+     deflate_state *s,
+     IPos cur_match);                             /* current match */
+ 
+ 
+ uInt longest_match_7fff(
+     deflate_state *s,
+     IPos cur_match);                             /* current match */
+ 
+ uInt longest_match_686(
+     deflate_state *s,
+     IPos cur_match);                             /* current match */
+ 
+ uInt longest_match(
+     deflate_state *s,
+     IPos cur_match)                             /* current match */
+ {
+     static uInt iIsPPro=2;
+ 
+     if ((s->w_mask == 0x7fff) && (iIsPPro==0))
+         return longest_match_7fff(s,cur_match);
+ 
+     if (iIsPPro==1)
+         return longest_match_686(s,cur_match);
+ 
+     if (iIsPPro==2)
+         iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0;
+ 
+     return longest_match_c(s,cur_match);
+ }
+ 
+ 
+ 
+ uInt longest_match_c(s, cur_match)
+     deflate_state *s;
+     IPos cur_match;                             /* current match */
+ {
+     unsigned chain_length = s->max_chain_length;/* max hash chain length */
+     register Bytef *scan = s->window + s->strstart; /* current string */
+     register Bytef *match;                       /* matched string */
+     register int len;                           /* length of current match */
+     int best_len = s->prev_length;              /* best match length so far */
+     int nice_match = s->nice_match;             /* stop if match long enough */
+     IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+         s->strstart - (IPos)MAX_DIST(s) : NIL;
+     /* Stop when cur_match becomes <= limit. To simplify the code,
+      * we prevent matches with the string of window index 0.
+      */
+     Posf *prev = s->prev;
+     uInt wmask = s->w_mask;
+ 
+ #ifdef UNALIGNED_OK
+     /* Compare two bytes at a time. Note: this is not always beneficial.
+      * Try with and without -DUNALIGNED_OK to check.
+      */
+     register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
+     register ush scan_start = *(ushf*)scan;
+     register ush scan_end   = *(ushf*)(scan+best_len-1);
+ #else
+     register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+     register Byte scan_end1  = scan[best_len-1];
+     register Byte scan_end   = scan[best_len];
+ #endif
+ 
+     /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+      * It is easy to get rid of this optimization if necessary.
+      */
+     Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+ 
+     /* Do not waste too much time if we already have a good match: */
+     if (s->prev_length >= s->good_match) {
+         chain_length >>= 2;
+     }
+     /* Do not look for matches beyond the end of the input. This is necessary
+      * to make deflate deterministic.
+      */
+     if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+ 
+     Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+ 
+     do {
+         Assert(cur_match < s->strstart, "no future");
+         match = s->window + cur_match;
+ 
+         /* Skip to next match if the match length cannot increase
+          * or if the match length is less than 2:
+          */
+ #if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
+         /* This code assumes sizeof(unsigned short) == 2. Do not use
+          * UNALIGNED_OK if your compiler uses a different size.
+          */
+         if (*(ushf*)(match+best_len-1) != scan_end ||
+             *(ushf*)match != scan_start) continue;
+ 
+         /* It is not necessary to compare scan[2] and match[2] since they are
+          * always equal when the other bytes match, given that the hash keys
+          * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
+          * strstart+3, +5, ... up to strstart+257. We check for insufficient
+          * lookahead only every 4th comparison; the 128th check will be made
+          * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
+          * necessary to put more guard bytes at the end of the window, or
+          * to check more often for insufficient lookahead.
+          */
+         Assert(scan[2] == match[2], "scan[2]?");
+         scan++, match++;
+         do {
+         } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                  scan < strend);
+         /* The funny "do {}" generates better code on most compilers */
+ 
+         /* Here, scan <= window+strstart+257 */
+         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+         if (*scan == *match) scan++;
+ 
+         len = (MAX_MATCH - 1) - (int)(strend-scan);
+         scan = strend - (MAX_MATCH-1);
+ 
+ #else /* UNALIGNED_OK */
+ 
+         if (match[best_len]   != scan_end  ||
+             match[best_len-1] != scan_end1 ||
+             *match            != *scan     ||
+             *++match          != scan[1])      continue;
+ 
+         /* The check at best_len-1 can be removed because it will be made
+          * again later. (This heuristic is not always a win.)
+          * It is not necessary to compare scan[2] and match[2] since they
+          * are always equal when the other bytes match, given that
+          * the hash keys are equal and that HASH_BITS >= 8.
+          */
+         scan += 2, match++;
+         Assert(*scan == *match, "match[2]?");
+ 
+         /* We check for insufficient lookahead only every 8th comparison;
+          * the 256th check will be made at strstart+258.
+          */
+         do {
+         } while (*++scan == *++match && *++scan == *++match &&
+                  *++scan == *++match && *++scan == *++match &&
+                  *++scan == *++match && *++scan == *++match &&
+                  *++scan == *++match && *++scan == *++match &&
+                  scan < strend);
+ 
+         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+ 
+         len = MAX_MATCH - (int)(strend - scan);
+         scan = strend - MAX_MATCH;
+ 
+ #endif /* UNALIGNED_OK */
+ 
+         if (len > best_len) {
+             s->match_start = cur_match;
+             best_len = len;
+             if (len >= nice_match) break;
+ #ifdef UNALIGNED_OK
+             scan_end = *(ushf*)(scan+best_len-1);
+ #else
+             scan_end1  = scan[best_len-1];
+             scan_end   = scan[best_len];
+ #endif
+         }
+     } while ((cur_match = prev[cur_match & wmask]) > limit
+              && --chain_length != 0);
+ 
+     if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+     return s->lookahead;
+ }
+ 
+ #endif /* ASMV */
diff -Nrcpad gcc-3.4.3/zlib/contrib/masmx86/inffas32.asm gcc-4.0.0/zlib/contrib/masmx86/inffas32.asm
*** gcc-3.4.3/zlib/contrib/masmx86/inffas32.asm	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/masmx86/inffas32.asm	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,1033 ----
+ ; 75 "inffast.S"
+ ;FILE "inffast.S"
+ 
+ ;;;GLOBAL _inflate_fast
+ 
+ ;;;SECTION .text
+ 
+ 
+ 
+ 	.586p
+ 	.mmx
+ 
+ 	name	inflate_fast_x86
+ 	.MODEL	FLAT
+ 
+ _DATA			segment
+ inflate_fast_use_mmx:
+ 	dd	1
+ 
+ 
+ _TEXT			segment
+ PUBLIC _inflate_fast
+ 
+ ALIGN 4
+ _inflate_fast:
+ 	jmp inflate_fast_entry
+ 
+ 
+ 
+ ALIGN 4
+ 	db	'Fast decoding Code from Chris Anderson'
+ 	db	0
+ 
+ ALIGN 4
+ invalid_literal_length_code_msg:
+ 	db	'invalid literal/length code'
+ 	db	0
+ 
+ ALIGN 4
+ invalid_distance_code_msg:
+ 	db	'invalid distance code'
+ 	db	0
+ 
+ ALIGN 4
+ invalid_distance_too_far_msg:
+ 	db	'invalid distance too far back'
+ 	db	0
+ 
+ 
+ ALIGN 4
+ inflate_fast_mask:
+ dd	0
+ dd	1
+ dd	3
+ dd	7
+ dd	15
+ dd	31
+ dd	63
+ dd	127
+ dd	255
+ dd	511
+ dd	1023
+ dd	2047
+ dd	4095
+ dd	8191
+ dd	16383
+ dd	32767
+ dd	65535
+ dd	131071
+ dd	262143
+ dd	524287
+ dd	1048575
+ dd	2097151
+ dd	4194303
+ dd	8388607
+ dd	16777215
+ dd	33554431
+ dd	67108863
+ dd	134217727
+ dd	268435455
+ dd	536870911
+ dd	1073741823
+ dd	2147483647
+ dd	4294967295
+ 
+ 
+ 
+ mode_state	 equ	0	;/* state->mode	*/
+ wsize_state	 equ	32	;/* state->wsize */
+ write_state	 equ	(36+4)	;/* state->write */
+ window_state	 equ	(40+4)	;/* state->window */
+ hold_state	 equ	(44+4)	;/* state->hold	*/
+ bits_state	 equ	(48+4)	;/* state->bits	*/
+ lencode_state	 equ	(64+4)	;/* state->lencode */
+ distcode_state	 equ	(68+4)	;/* state->distcode */
+ lenbits_state	 equ	(72+4)	;/* state->lenbits */
+ distbits_state	 equ	(76+4)	;/* state->distbits */
+ 
+ 
+ ;;SECTION .text
+ ; 205 "inffast.S"
+ ;GLOBAL	inflate_fast_use_mmx
+ 
+ ;SECTION .data
+ 
+ 
+ ; GLOBAL inflate_fast_use_mmx:object
+ ;.size inflate_fast_use_mmx, 4
+ ; 226 "inffast.S"
+ ;SECTION .text
+ 
+ ALIGN 4
+ inflate_fast_entry:
+ 	push  edi
+ 	push  esi
+ 	push  ebp
+ 	push  ebx
+ 	pushfd
+ 	sub  esp,64
+ 	cld
+ 
+ 
+ 
+ 
+ 	mov  esi, [esp+88]
+ 	mov  edi, [esi+28]
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 	mov  edx, [esi+4]
+ 	mov  eax, [esi+0]
+ 
+ 	add  edx,eax
+ 	sub  edx,11
+ 
+ 	mov  [esp+44],eax
+ 	mov  [esp+20],edx
+ 
+ 	mov  ebp, [esp+92]
+ 	mov  ecx, [esi+16]
+ 	mov  ebx, [esi+12]
+ 
+ 	sub  ebp,ecx
+ 	neg  ebp
+ 	add  ebp,ebx
+ 
+ 	sub  ecx,257
+ 	add  ecx,ebx
+ 
+ 	mov  [esp+60],ebx
+ 	mov  [esp+40],ebp
+ 	mov  [esp+16],ecx
+ ; 285 "inffast.S"
+ 	mov  eax, [edi+lencode_state]
+ 	mov  ecx, [edi+distcode_state]
+ 
+ 	mov  [esp+8],eax
+ 	mov  [esp+12],ecx
+ 
+ 	mov  eax,1
+ 	mov  ecx, [edi+lenbits_state]
+ 	shl  eax,cl
+ 	dec  eax
+ 	mov  [esp+0],eax
+ 
+ 	mov  eax,1
+ 	mov  ecx, [edi+distbits_state]
+ 	shl  eax,cl
+ 	dec  eax
+ 	mov  [esp+4],eax
+ 
+ 	mov  eax, [edi+wsize_state]
+ 	mov  ecx, [edi+write_state]
+ 	mov  edx, [edi+window_state]
+ 
+ 	mov  [esp+52],eax
+ 	mov  [esp+48],ecx
+ 	mov  [esp+56],edx
+ 
+ 	mov  ebp, [edi+hold_state]
+ 	mov  ebx, [edi+bits_state]
+ ; 321 "inffast.S"
+ 	mov  esi, [esp+44]
+ 	mov  ecx, [esp+20]
+ 	cmp  ecx,esi
+ 	ja   L_align_long
+ 
+ 	add  ecx,11
+ 	sub  ecx,esi
+ 	mov  eax,12
+ 	sub  eax,ecx
+ 	lea  edi, [esp+28]
+ 	rep movsb
+ 	mov  ecx,eax
+ 	xor  eax,eax
+ 	rep stosb
+ 	lea  esi, [esp+28]
+ 	mov  [esp+20],esi
+ 	jmp  L_is_aligned
+ 
+ 
+ L_align_long:
+ 	test  esi,3
+ 	jz   L_is_aligned
+ 	xor  eax,eax
+ 	mov  al, [esi]
+ 	inc  esi
+ 	mov  ecx,ebx
+ 	add  ebx,8
+ 	shl  eax,cl
+ 	or  ebp,eax
+ 	jmp L_align_long
+ 
+ L_is_aligned:
+ 	mov  edi, [esp+60]
+ ; 366 "inffast.S"
+ L_check_mmx:
+ 	cmp  dword ptr [inflate_fast_use_mmx],2
+ 	je   L_init_mmx
+ 	ja   L_do_loop
+ 
+ 	push  eax
+ 	push  ebx
+ 	push  ecx
+ 	push  edx
+ 	pushfd
+ 	mov  eax, [esp]
+ 	xor  dword ptr [esp],0200000h
+ 
+ 
+ 
+ 
+ 	popfd
+ 	pushfd
+ 	pop  edx
+ 	xor  edx,eax
+ 	jz   L_dont_use_mmx
+ 	xor  eax,eax
+ 	cpuid
+ 	cmp  ebx,0756e6547h
+ 	jne  L_dont_use_mmx
+ 	cmp  ecx,06c65746eh
+ 	jne  L_dont_use_mmx
+ 	cmp  edx,049656e69h
+ 	jne  L_dont_use_mmx
+ 	mov  eax,1
+ 	cpuid
+ 	shr  eax,8
+ 	and  eax,15
+ 	cmp  eax,6
+ 	jne  L_dont_use_mmx
+ 	test  edx,0800000h
+ 	jnz  L_use_mmx
+ 	jmp  L_dont_use_mmx
+ L_use_mmx:
+ 	mov  dword ptr [inflate_fast_use_mmx],2
+ 	jmp  L_check_mmx_pop
+ L_dont_use_mmx:
+ 	mov  dword ptr [inflate_fast_use_mmx],3
+ L_check_mmx_pop:
+ 	pop  edx
+ 	pop  ecx
+ 	pop  ebx
+ 	pop  eax
+ 	jmp  L_check_mmx
+ ; 426 "inffast.S"
+ ALIGN 4
+ L_do_loop:
+ ; 437 "inffast.S"
+ 	cmp  bl,15
+ 	ja   L_get_length_code
+ 
+ 	xor  eax,eax
+ 	lodsw
+ 	mov  cl,bl
+ 	add  bl,16
+ 	shl  eax,cl
+ 	or  ebp,eax
+ 
+ L_get_length_code:
+ 	mov  edx, [esp+0]
+ 	mov  ecx, [esp+8]
+ 	and  edx,ebp
+ 	mov  eax, [ecx+edx*4]
+ 
+ L_dolen:
+ 
+ 
+ 
+ 
+ 
+ 
+ 	mov  cl,ah
+ 	sub  bl,ah
+ 	shr  ebp,cl
+ 
+ 
+ 
+ 
+ 
+ 
+ 	test  al,al
+ 	jnz   L_test_for_length_base
+ 
+ 	shr  eax,16
+ 	stosb
+ 
+ L_while_test:
+ 
+ 
+ 	cmp  [esp+16],edi
+ 	jbe  L_break_loop
+ 
+ 	cmp  [esp+20],esi
+ 	ja   L_do_loop
+ 	jmp  L_break_loop
+ 
+ L_test_for_length_base:
+ ; 502 "inffast.S"
+ 	mov  edx,eax
+ 	shr  edx,16
+ 	mov  cl,al
+ 
+ 	test  al,16
+ 	jz   L_test_for_second_level_length
+ 	and  cl,15
+ 	jz   L_save_len
+ 	cmp  bl,cl
+ 	jae  L_add_bits_to_len
+ 
+ 	mov  ch,cl
+ 	xor  eax,eax
+ 	lodsw
+ 	mov  cl,bl
+ 	add  bl,16
+ 	shl  eax,cl
+ 	or  ebp,eax
+ 	mov  cl,ch
+ 
+ L_add_bits_to_len:
+ 	mov  eax,1
+ 	shl  eax,cl
+ 	dec  eax
+ 	sub  bl,cl
+ 	and  eax,ebp
+ 	shr  ebp,cl
+ 	add  edx,eax
+ 
+ L_save_len:
+ 	mov  [esp+24],edx
+ 
+ 
+ L_decode_distance:
+ ; 549 "inffast.S"
+ 	cmp  bl,15
+ 	ja   L_get_distance_code
+ 
+ 	xor  eax,eax
+ 	lodsw
+ 	mov  cl,bl
+ 	add  bl,16
+ 	shl  eax,cl
+ 	or  ebp,eax
+ 
+ L_get_distance_code:
+ 	mov  edx, [esp+4]
+ 	mov  ecx, [esp+12]
+ 	and  edx,ebp
+ 	mov  eax, [ecx+edx*4]
+ 
+ 
+ L_dodist:
+ 	mov  edx,eax
+ 	shr  edx,16
+ 	mov  cl,ah
+ 	sub  bl,ah
+ 	shr  ebp,cl
+ ; 584 "inffast.S"
+ 	mov  cl,al
+ 
+ 	test  al,16
+ 	jz  L_test_for_second_level_dist
+ 	and  cl,15
+ 	jz  L_check_dist_one
+ 	cmp  bl,cl
+ 	jae  L_add_bits_to_dist
+ 
+ 	mov  ch,cl
+ 	xor  eax,eax
+ 	lodsw
+ 	mov  cl,bl
+ 	add  bl,16
+ 	shl  eax,cl
+ 	or  ebp,eax
+ 	mov  cl,ch
+ 
+ L_add_bits_to_dist:
+ 	mov  eax,1
+ 	shl  eax,cl
+ 	dec  eax
+ 	sub  bl,cl
+ 	and  eax,ebp
+ 	shr  ebp,cl
+ 	add  edx,eax
+ 	jmp  L_check_window
+ 
+ L_check_window:
+ ; 625 "inffast.S"
+ 	mov  [esp+44],esi
+ 	mov  eax,edi
+ 	sub  eax, [esp+40]
+ 
+ 	cmp  eax,edx
+ 	jb   L_clip_window
+ 
+ 	mov  ecx, [esp+24]
+ 	mov  esi,edi
+ 	sub  esi,edx
+ 
+ 	sub  ecx,3
+ 	mov  al, [esi]
+ 	mov  [edi],al
+ 	mov  al, [esi+1]
+ 	mov  dl, [esi+2]
+ 	add  esi,3
+ 	mov  [edi+1],al
+ 	mov  [edi+2],dl
+ 	add  edi,3
+ 	rep movsb
+ 
+ 	mov  esi, [esp+44]
+ 	jmp  L_while_test
+ 
+ ALIGN 4
+ L_check_dist_one:
+ 	cmp  edx,1
+ 	jne  L_check_window
+ 	cmp  [esp+40],edi
+ 	je  L_check_window
+ 
+ 	dec  edi
+ 	mov  ecx, [esp+24]
+ 	mov  al, [edi]
+ 	sub  ecx,3
+ 
+ 	mov  [edi+1],al
+ 	mov  [edi+2],al
+ 	mov  [edi+3],al
+ 	add  edi,4
+ 	rep stosb
+ 
+ 	jmp  L_while_test
+ 
+ ALIGN 4
+ L_test_for_second_level_length:
+ 
+ 
+ 
+ 
+ 	test  al,64
+ 	jnz   L_test_for_end_of_block
+ 
+ 	mov  eax,1
+ 	shl  eax,cl
+ 	dec  eax
+ 	and  eax,ebp
+ 	add  eax,edx
+ 	mov  edx, [esp+8]
+ 	mov  eax, [edx+eax*4]
+ 	jmp  L_dolen
+ 
+ ALIGN 4
+ L_test_for_second_level_dist:
+ 
+ 
+ 
+ 
+ 	test  al,64
+ 	jnz   L_invalid_distance_code
+ 
+ 	mov  eax,1
+ 	shl  eax,cl
+ 	dec  eax
+ 	and  eax,ebp
+ 	add  eax,edx
+ 	mov  edx, [esp+12]
+ 	mov  eax, [edx+eax*4]
+ 	jmp  L_dodist
+ 
+ ALIGN 4
+ L_clip_window:
+ ; 721 "inffast.S"
+ 	mov  ecx,eax
+ 	mov  eax, [esp+52]
+ 	neg  ecx
+ 	mov  esi, [esp+56]
+ 
+ 	cmp  eax,edx
+ 	jb   L_invalid_distance_too_far
+ 
+ 	add  ecx,edx
+ 	cmp  dword ptr [esp+48],0
+ 	jne  L_wrap_around_window
+ 
+ 	sub  eax,ecx
+ 	add  esi,eax
+ ; 749 "inffast.S"
+ 	mov  eax, [esp+24]
+ 	cmp  eax,ecx
+ 	jbe  L_do_copy1
+ 
+ 	sub  eax,ecx
+ 	rep movsb
+ 	mov  esi,edi
+ 	sub  esi,edx
+ 	jmp  L_do_copy1
+ 
+ 	cmp  eax,ecx
+ 	jbe  L_do_copy1
+ 
+ 	sub  eax,ecx
+ 	rep movsb
+ 	mov  esi,edi
+ 	sub  esi,edx
+ 	jmp  L_do_copy1
+ 
+ L_wrap_around_window:
+ ; 793 "inffast.S"
+ 	mov  eax, [esp+48]
+ 	cmp  ecx,eax
+ 	jbe  L_contiguous_in_window
+ 
+ 	add  esi, [esp+52]
+ 	add  esi,eax
+ 	sub  esi,ecx
+ 	sub  ecx,eax
+ 
+ 
+ 	mov  eax, [esp+24]
+ 	cmp  eax,ecx
+ 	jbe  L_do_copy1
+ 
+ 	sub  eax,ecx
+ 	rep movsb
+ 	mov  esi, [esp+56]
+ 	mov  ecx, [esp+48]
+ 	cmp  eax,ecx
+ 	jbe  L_do_copy1
+ 
+ 	sub  eax,ecx
+ 	rep movsb
+ 	mov  esi,edi
+ 	sub  esi,edx
+ 	jmp  L_do_copy1
+ 
+ L_contiguous_in_window:
+ ; 836 "inffast.S"
+ 	add  esi,eax
+ 	sub  esi,ecx
+ 
+ 
+ 	mov  eax, [esp+24]
+ 	cmp  eax,ecx
+ 	jbe  L_do_copy1
+ 
+ 	sub  eax,ecx
+ 	rep movsb
+ 	mov  esi,edi
+ 	sub  esi,edx
+ 
+ L_do_copy1:
+ ; 862 "inffast.S"
+ 	mov  ecx,eax
+ 	rep movsb
+ 
+ 	mov  esi, [esp+44]
+ 	jmp  L_while_test
+ ; 878 "inffast.S"
+ ALIGN 4
+ L_init_mmx:
+ 	emms
+ 
+ 
+ 
+ 
+ 
+ 	movd mm0,ebp
+ 	mov  ebp,ebx
+ ; 896 "inffast.S"
+ 	movd mm4,[esp+0]
+ 	movq mm3,mm4
+ 	movd mm5,[esp+4]
+ 	movq mm2,mm5
+ 	pxor mm1,mm1
+ 	mov  ebx, [esp+8]
+ 	jmp  L_do_loop_mmx
+ 
+ ALIGN 4
+ L_do_loop_mmx:
+ 	psrlq mm0,mm1
+ 
+ 	cmp  ebp,32
+ 	ja  L_get_length_code_mmx
+ 
+ 	movd mm6,ebp
+ 	movd mm7,[esi]
+ 	add  esi,4
+ 	psllq mm7,mm6
+ 	add  ebp,32
+ 	por mm0,mm7
+ 
+ L_get_length_code_mmx:
+ 	pand mm4,mm0
+ 	movd eax,mm4
+ 	movq mm4,mm3
+ 	mov  eax, [ebx+eax*4]
+ 
+ L_dolen_mmx:
+ 	movzx  ecx,ah
+ 	movd mm1,ecx
+ 	sub  ebp,ecx
+ 
+ 	test  al,al
+ 	jnz L_test_for_length_base_mmx
+ 
+ 	shr  eax,16
+ 	stosb
+ 
+ L_while_test_mmx:
+ 
+ 
+ 	cmp  [esp+16],edi
+ 	jbe L_break_loop
+ 
+ 	cmp  [esp+20],esi
+ 	ja L_do_loop_mmx
+ 	jmp L_break_loop
+ 
+ L_test_for_length_base_mmx:
+ 
+ 	mov  edx,eax
+ 	shr  edx,16
+ 
+ 	test  al,16
+ 	jz  L_test_for_second_level_length_mmx
+ 	and  eax,15
+ 	jz L_decode_distance_mmx
+ 
+ 	psrlq mm0,mm1
+ 	movd mm1,eax
+ 	movd ecx,mm0
+ 	sub  ebp,eax
+ 	and  ecx, [inflate_fast_mask+eax*4]
+ 	add  edx,ecx
+ 
+ L_decode_distance_mmx:
+ 	psrlq mm0,mm1
+ 
+ 	cmp  ebp,32
+ 	ja L_get_dist_code_mmx
+ 
+ 	movd mm6,ebp
+ 	movd mm7,[esi]
+ 	add  esi,4
+ 	psllq mm7,mm6
+ 	add  ebp,32
+ 	por mm0,mm7
+ 
+ L_get_dist_code_mmx:
+ 	mov  ebx, [esp+12]
+ 	pand mm5,mm0
+ 	movd eax,mm5
+ 	movq mm5,mm2
+ 	mov  eax, [ebx+eax*4]
+ 
+ L_dodist_mmx:
+ 
+ 	movzx  ecx,ah
+ 	mov  ebx,eax
+ 	shr  ebx,16
+ 	sub  ebp,ecx
+ 	movd mm1,ecx
+ 
+ 	test  al,16
+ 	jz L_test_for_second_level_dist_mmx
+ 	and  eax,15
+ 	jz L_check_dist_one_mmx
+ 
+ L_add_bits_to_dist_mmx:
+ 	psrlq mm0,mm1
+ 	movd mm1,eax
+ 	movd ecx,mm0
+ 	sub  ebp,eax
+ 	and  ecx, [inflate_fast_mask+eax*4]
+ 	add  ebx,ecx
+ 
+ L_check_window_mmx:
+ 	mov  [esp+44],esi
+ 	mov  eax,edi
+ 	sub  eax, [esp+40]
+ 
+ 	cmp  eax,ebx
+ 	jb L_clip_window_mmx
+ 
+ 	mov  ecx,edx
+ 	mov  esi,edi
+ 	sub  esi,ebx
+ 
+ 	sub  ecx,3
+ 	mov  al, [esi]
+ 	mov  [edi],al
+ 	mov  al, [esi+1]
+ 	mov  dl, [esi+2]
+ 	add  esi,3
+ 	mov  [edi+1],al
+ 	mov  [edi+2],dl
+ 	add  edi,3
+ 	rep movsb
+ 
+ 	mov  esi, [esp+44]
+ 	mov  ebx, [esp+8]
+ 	jmp  L_while_test_mmx
+ 
+ ALIGN 4
+ L_check_dist_one_mmx:
+ 	cmp  ebx,1
+ 	jne  L_check_window_mmx
+ 	cmp  [esp+40],edi
+ 	je   L_check_window_mmx
+ 
+ 	dec  edi
+ 	mov  ecx,edx
+ 	mov  al, [edi]
+ 	sub  ecx,3
+ 
+ 	mov  [edi+1],al
+ 	mov  [edi+2],al
+ 	mov  [edi+3],al
+ 	add  edi,4
+ 	rep stosb
+ 
+ 	mov  ebx, [esp+8]
+ 	jmp  L_while_test_mmx
+ 
+ ALIGN 4
+ L_test_for_second_level_length_mmx:
+ 	test  al,64
+ 	jnz L_test_for_end_of_block
+ 
+ 	and  eax,15
+ 	psrlq mm0,mm1
+ 	movd ecx,mm0
+ 	and  ecx, [inflate_fast_mask+eax*4]
+ 	add  ecx,edx
+ 	mov  eax, [ebx+ecx*4]
+ 	jmp L_dolen_mmx
+ 
+ ALIGN 4
+ L_test_for_second_level_dist_mmx:
+ 	test  al,64
+ 	jnz L_invalid_distance_code
+ 
+ 	and  eax,15
+ 	psrlq mm0,mm1
+ 	movd ecx,mm0
+ 	and  ecx, [inflate_fast_mask+eax*4]
+ 	mov  eax, [esp+12]
+ 	add  ecx,ebx
+ 	mov  eax, [eax+ecx*4]
+ 	jmp  L_dodist_mmx
+ 
+ ALIGN 4
+ L_clip_window_mmx:
+ 
+ 	mov  ecx,eax
+ 	mov  eax, [esp+52]
+ 	neg  ecx
+ 	mov  esi, [esp+56]
+ 
+ 	cmp  eax,ebx
+ 	jb  L_invalid_distance_too_far
+ 
+ 	add  ecx,ebx
+ 	cmp  dword ptr [esp+48],0
+ 	jne  L_wrap_around_window_mmx
+ 
+ 	sub  eax,ecx
+ 	add  esi,eax
+ 
+ 	cmp  edx,ecx
+ 	jbe  L_do_copy1_mmx
+ 
+ 	sub  edx,ecx
+ 	rep movsb
+ 	mov  esi,edi
+ 	sub  esi,ebx
+ 	jmp  L_do_copy1_mmx
+ 
+ 	cmp  edx,ecx
+ 	jbe  L_do_copy1_mmx
+ 
+ 	sub  edx,ecx
+ 	rep movsb
+ 	mov  esi,edi
+ 	sub  esi,ebx
+ 	jmp  L_do_copy1_mmx
+ 
+ L_wrap_around_window_mmx:
+ 
+ 	mov  eax, [esp+48]
+ 	cmp  ecx,eax
+ 	jbe  L_contiguous_in_window_mmx
+ 
+ 	add  esi, [esp+52]
+ 	add  esi,eax
+ 	sub  esi,ecx
+ 	sub  ecx,eax
+ 
+ 
+ 	cmp  edx,ecx
+ 	jbe  L_do_copy1_mmx
+ 
+ 	sub  edx,ecx
+ 	rep movsb
+ 	mov  esi, [esp+56]
+ 	mov  ecx, [esp+48]
+ 	cmp  edx,ecx
+ 	jbe  L_do_copy1_mmx
+ 
+ 	sub  edx,ecx
+ 	rep movsb
+ 	mov  esi,edi
+ 	sub  esi,ebx
+ 	jmp  L_do_copy1_mmx
+ 
+ L_contiguous_in_window_mmx:
+ 
+ 	add  esi,eax
+ 	sub  esi,ecx
+ 
+ 
+ 	cmp  edx,ecx
+ 	jbe  L_do_copy1_mmx
+ 
+ 	sub  edx,ecx
+ 	rep movsb
+ 	mov  esi,edi
+ 	sub  esi,ebx
+ 
+ L_do_copy1_mmx:
+ 
+ 
+ 	mov  ecx,edx
+ 	rep movsb
+ 
+ 	mov  esi, [esp+44]
+ 	mov  ebx, [esp+8]
+ 	jmp  L_while_test_mmx
+ ; 1174 "inffast.S"
+ L_invalid_distance_code:
+ 
+ 
+ 
+ 
+ 
+ 	mov  ecx, invalid_distance_code_msg
+ 	mov  edx,26
+ 	jmp  L_update_stream_state
+ 
+ L_test_for_end_of_block:
+ 
+ 
+ 
+ 
+ 
+ 	test  al,32
+ 	jz  L_invalid_literal_length_code
+ 
+ 	mov  ecx,0
+ 	mov  edx,11
+ 	jmp  L_update_stream_state
+ 
+ L_invalid_literal_length_code:
+ 
+ 
+ 
+ 
+ 
+ 	mov  ecx, invalid_literal_length_code_msg
+ 	mov  edx,26
+ 	jmp  L_update_stream_state
+ 
+ L_invalid_distance_too_far:
+ 
+ 
+ 
+ 	mov  esi, [esp+44]
+ 	mov  ecx, invalid_distance_too_far_msg
+ 	mov  edx,26
+ 	jmp  L_update_stream_state
+ 
+ L_update_stream_state:
+ 
+ 	mov  eax, [esp+88]
+ 	test  ecx,ecx
+ 	jz  L_skip_msg
+ 	mov  [eax+24],ecx
+ L_skip_msg:
+ 	mov  eax, [eax+28]
+ 	mov  [eax+mode_state],edx
+ 	jmp  L_break_loop
+ 
+ ALIGN 4
+ L_break_loop:
+ ; 1243 "inffast.S"
+ 	cmp  dword ptr [inflate_fast_use_mmx],2
+ 	jne  L_update_next_in
+ 
+ 
+ 
+ 	mov  ebx,ebp
+ 
+ L_update_next_in:
+ ; 1266 "inffast.S"
+ 	mov  eax, [esp+88]
+ 	mov  ecx,ebx
+ 	mov  edx, [eax+28]
+ 	shr  ecx,3
+ 	sub  esi,ecx
+ 	shl  ecx,3
+ 	sub  ebx,ecx
+ 	mov  [eax+12],edi
+ 	mov  [edx+bits_state],ebx
+ 	mov  ecx,ebx
+ 
+ 	lea  ebx, [esp+28]
+ 	cmp  [esp+20],ebx
+ 	jne  L_buf_not_used
+ 
+ 	sub  esi,ebx
+ 	mov  ebx, [eax+0]
+ 	mov  [esp+20],ebx
+ 	add  esi,ebx
+ 	mov  ebx, [eax+4]
+ 	sub  ebx,11
+ 	add  [esp+20],ebx
+ 
+ L_buf_not_used:
+ 	mov  [eax+0],esi
+ 
+ 	mov  ebx,1
+ 	shl  ebx,cl
+ 	dec  ebx
+ 
+ 
+ 
+ 
+ 
+ 	cmp  dword ptr [inflate_fast_use_mmx],2
+ 	jne  L_update_hold
+ 
+ 
+ 
+ 	psrlq mm0,mm1
+ 	movd ebp,mm0
+ 
+ 	emms
+ 
+ L_update_hold:
+ 
+ 
+ 
+ 	and  ebp,ebx
+ 	mov  [edx+hold_state],ebp
+ 
+ 
+ 
+ 
+ 	mov  ebx, [esp+20]
+ 	cmp  ebx,esi
+ 	jbe  L_last_is_smaller
+ 
+ 	sub  ebx,esi
+ 	add  ebx,11
+ 	mov  [eax+4],ebx
+ 	jmp  L_fixup_out
+ L_last_is_smaller:
+ 	sub  esi,ebx
+ 	neg  esi
+ 	add  esi,11
+ 	mov  [eax+4],esi
+ 
+ 
+ 
+ 
+ L_fixup_out:
+ 
+ 	mov  ebx, [esp+16]
+ 	cmp  ebx,edi
+ 	jbe  L_end_is_smaller
+ 
+ 	sub  ebx,edi
+ 	add  ebx,257
+ 	mov  [eax+16],ebx
+ 	jmp  L_done
+ L_end_is_smaller:
+ 	sub  edi,ebx
+ 	neg  edi
+ 	add  edi,257
+ 	mov  [eax+16],edi
+ 
+ 
+ 
+ 
+ 
+ L_done:
+ 	add  esp,64
+ 	popfd
+ 	pop  ebx
+ 	pop  ebp
+ 	pop  esi
+ 	pop  edi
+ 	ret
+ 
+ 
+ 
+ 
+ _TEXT	ends
+ end
diff -Nrcpad gcc-3.4.3/zlib/contrib/masmx86/mkasm.bat gcc-4.0.0/zlib/contrib/masmx86/mkasm.bat
*** gcc-3.4.3/zlib/contrib/masmx86/mkasm.bat	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/masmx86/mkasm.bat	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,3 ----
+ cl /I..\.. /O2 /c gvmat32c.c
+ ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm
+ ml /coff /Zi /c /Flinffas32.lst inffas32.asm
diff -Nrcpad gcc-3.4.3/zlib/contrib/masmx86/readme.txt gcc-4.0.0/zlib/contrib/masmx86/readme.txt
*** gcc-3.4.3/zlib/contrib/masmx86/readme.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/masmx86/readme.txt	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,21 ----
+ 
+ Summary
+ -------
+ This directory contains ASM implementations of the functions
+ longest_match() and inflate_fast().
+ 
+ 
+ Use instructions
+ ----------------
+ Copy these files into the zlib source directory, then run the
+ appropriate makefile, as suggested below.
+ 
+ 
+ Build instructions
+ ------------------
+ * With Microsoft C and MASM:
+ nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="gvmat32c.obj gvmat32.obj inffas32.obj"
+ 
+ * With Borland C and TASM:
+ make -f win32/Makefile.bor LOCAL_ZLIB="-DASMV -DASMINF" OBJA="gvmat32c.obj gvmat32.obj inffas32.obj" OBJPA="+gvmat32c.obj+gvmat32.obj+inffas32.obj"
+ 
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/ChangeLogUnzip gcc-4.0.0/zlib/contrib/minizip/ChangeLogUnzip
*** gcc-3.4.3/zlib/contrib/minizip/ChangeLogUnzip	Mon Mar 11 21:49:49 2002
--- gcc-4.0.0/zlib/contrib/minizip/ChangeLogUnzip	Mon Oct 11 18:45:41 2004
***************
*** 1,10 ****
  Change in 0.15: (19 Mar 98)
  - fix memory leak in minizip.c
  
  Change in 0.14: (10 Mar 98)
  - fix bugs in minizip.c sample for zipping big file
  - fix problem in month in date handling
! - fix bug in unzlocal_GetCurrentFileInfoInternal in unzip.c for 
      comment handling
  
  Change in 0.13: (6 Mar 98)
--- 1,27 ----
+ Change in 1.00: (10 sept 03)
+ - rename to 1.00
+ - cosmetic code change
+ 
+ Change in 0.22: (19 May 03)
+ - crypting support (unless you define NOCRYPT)
+ - append file in existing zipfile
+ 
+ Change in 0.21: (10 Mar 03)
+ - bug fixes
+ 
+ Change in 0.17: (27 Jan 02)
+ - bug fixes
+ 
+ Change in 0.16: (19 Jan 02)
+ - Support of ioapi for virtualize zip file access
+ 
  Change in 0.15: (19 Mar 98)
  - fix memory leak in minizip.c
  
  Change in 0.14: (10 Mar 98)
  - fix bugs in minizip.c sample for zipping big file
  - fix problem in month in date handling
! - fix bug in unzlocal_GetCurrentFileInfoInternal in unzip.c for
      comment handling
  
  Change in 0.13: (6 Mar 98)
*************** Change in 0.10: (2 Mar 98)
*** 32,38 ****
  - add a new sample, miniunz.c
  
  Change in 0.4: (25 Feb 98)
! - suppress the type unzipFileInZip. 
    Only on file in the zipfile can be open at the same time
  - fix somes typo in code
  - added tm_unz structure in unzip_file_info (date/time in readable format)
--- 49,55 ----
  - add a new sample, miniunz.c
  
  Change in 0.4: (25 Feb 98)
! - suppress the type unzipFileInZip.
    Only on file in the zipfile can be open at the same time
  - fix somes typo in code
  - added tm_unz structure in unzip_file_info (date/time in readable format)
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/Makefile gcc-4.0.0/zlib/contrib/minizip/Makefile
*** gcc-3.4.3/zlib/contrib/minizip/Makefile	Mon Mar 11 21:49:49 2002
--- gcc-4.0.0/zlib/contrib/minizip/Makefile	Mon Oct 11 18:45:41 2004
***************
*** 1,8 ****
  CC=cc
  CFLAGS=-O -I../..
  
! UNZ_OBJS = miniunz.o unzip.o ../../libz.a
! ZIP_OBJS = minizip.o zip.o   ../../libz.a
  
  .c.o:
  	$(CC) -c $(CFLAGS) $*.c
--- 1,8 ----
  CC=cc
  CFLAGS=-O -I../..
  
! UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
! ZIP_OBJS = minizip.o zip.o   ioapi.o ../../libz.a
  
  .c.o:
  	$(CC) -c $(CFLAGS) $*.c
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/crypt.h gcc-4.0.0/zlib/contrib/minizip/crypt.h
*** gcc-3.4.3/zlib/contrib/minizip/crypt.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/minizip/crypt.h	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,132 ----
+ /* crypt.h -- base code for crypt/uncrypt ZIPfile
+ 
+ 
+    Version 1.00, September 10th, 2003
+ 
+    Copyright (C) 1998-2003 Gilles Vollant
+ 
+    This code is a modified version of crypting code in Infozip distribution
+ 
+    The encryption/decryption parts of this source code (as opposed to the
+    non-echoing password parts) were originally written in Europe.  The
+    whole source package can be freely distributed, including from the USA.
+    (Prior to January 2000, re-export from the US was a violation of US law.)
+ 
+    This encryption code is a direct transcription of the algorithm from
+    Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
+    file (appnote.txt) is distributed with the PKZIP program (even in the
+    version without encryption capabilities).
+ 
+    If you don't need crypting in your application, just define symbols
+    NOCRYPT and NOUNCRYPT.
+ 
+    This code support the "Traditional PKWARE Encryption".
+ 
+    The new AES encryption added on Zip format by Winzip (see the page
+    http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
+    Encryption is not supported.
+ */
+ 
+ #define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))
+ 
+ /***********************************************************************
+  * Return the next byte in the pseudo-random sequence
+  */
+ static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab)
+ {
+     unsigned temp;  /* POTENTIAL BUG:  temp*(temp^1) may overflow in an
+                      * unpredictable manner on 16-bit systems; not a problem
+                      * with any known compiler so far, though */
+ 
+     temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
+     return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
+ }
+ 
+ /***********************************************************************
+  * Update the encryption keys with the next byte of plain text
+  */
+ static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c)
+ {
+     (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
+     (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
+     (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
+     {
+       register int keyshift = (int)((*(pkeys+1)) >> 24);
+       (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
+     }
+     return c;
+ }
+ 
+ 
+ /***********************************************************************
+  * Initialize the encryption keys and the random header according to
+  * the given password.
+  */
+ static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab)
+ {
+     *(pkeys+0) = 305419896L;
+     *(pkeys+1) = 591751049L;
+     *(pkeys+2) = 878082192L;
+     while (*passwd != '\0') {
+         update_keys(pkeys,pcrc_32_tab,(int)*passwd);
+         passwd++;
+     }
+ }
+ 
+ #define zdecode(pkeys,pcrc_32_tab,c) \
+     (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
+ 
+ #define zencode(pkeys,pcrc_32_tab,c,t) \
+     (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
+ 
+ #ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
+ 
+ #define RAND_HEAD_LEN  12
+    /* "last resort" source for second part of crypt seed pattern */
+ #  ifndef ZCR_SEED2
+ #    define ZCR_SEED2 3141592654UL     /* use PI as default pattern */
+ #  endif
+ 
+ static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting)
+     const char *passwd;         /* password string */
+     unsigned char *buf;         /* where to write header */
+     int bufSize;
+     unsigned long* pkeys;
+     const unsigned long* pcrc_32_tab;
+     unsigned long crcForCrypting;
+ {
+     int n;                       /* index in random header */
+     int t;                       /* temporary */
+     int c;                       /* random byte */
+     unsigned char header[RAND_HEAD_LEN-2]; /* random header */
+     static unsigned calls = 0;   /* ensure different random header each time */
+ 
+     if (bufSize<RAND_HEAD_LEN)
+       return 0;
+ 
+     /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
+      * output of rand() to get less predictability, since rand() is
+      * often poorly implemented.
+      */
+     if (++calls == 1)
+     {
+         srand((unsigned)(time(NULL) ^ ZCR_SEED2));
+     }
+     init_keys(passwd, pkeys, pcrc_32_tab);
+     for (n = 0; n < RAND_HEAD_LEN-2; n++)
+     {
+         c = (rand() >> 7) & 0xff;
+         header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
+     }
+     /* Encrypt random header (last two bytes is high word of crc) */
+     init_keys(passwd, pkeys, pcrc_32_tab);
+     for (n = 0; n < RAND_HEAD_LEN-2; n++)
+     {
+         buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);
+     }
+     buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);
+     buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);
+     return n;
+ }
+ 
+ #endif
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/ioapi.c gcc-4.0.0/zlib/contrib/minizip/ioapi.c
*** gcc-3.4.3/zlib/contrib/minizip/ioapi.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/minizip/ioapi.c	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,177 ----
+ /* ioapi.c -- IO base function header for compress/uncompress .zip
+    files using zlib + zip or unzip API
+ 
+    Version 1.00, September 10th, 2003
+ 
+    Copyright (C) 1998-2003 Gilles Vollant
+ */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ 
+ #include "zlib.h"
+ #include "ioapi.h"
+ 
+ 
+ 
+ /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
+ 
+ #ifndef SEEK_CUR
+ #define SEEK_CUR    1
+ #endif
+ 
+ #ifndef SEEK_END
+ #define SEEK_END    2
+ #endif
+ 
+ #ifndef SEEK_SET
+ #define SEEK_SET    0
+ #endif
+ 
+ voidpf ZCALLBACK fopen_file_func OF((
+    voidpf opaque,
+    const char* filename,
+    int mode));
+ 
+ uLong ZCALLBACK fread_file_func OF((
+    voidpf opaque,
+    voidpf stream,
+    void* buf,
+    uLong size));
+ 
+ uLong ZCALLBACK fwrite_file_func OF((
+    voidpf opaque,
+    voidpf stream,
+    const void* buf,
+    uLong size));
+ 
+ long ZCALLBACK ftell_file_func OF((
+    voidpf opaque,
+    voidpf stream));
+ 
+ long ZCALLBACK fseek_file_func OF((
+    voidpf opaque,
+    voidpf stream,
+    uLong offset,
+    int origin));
+ 
+ int ZCALLBACK fclose_file_func OF((
+    voidpf opaque,
+    voidpf stream));
+ 
+ int ZCALLBACK ferror_file_func OF((
+    voidpf opaque,
+    voidpf stream));
+ 
+ 
+ voidpf ZCALLBACK fopen_file_func (opaque, filename, mode)
+    voidpf opaque;
+    const char* filename;
+    int mode;
+ {
+     FILE* file = NULL;
+     const char* mode_fopen = NULL;
+     if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+         mode_fopen = "rb";
+     else
+     if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+         mode_fopen = "r+b";
+     else
+     if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+         mode_fopen = "wb";
+ 
+     if ((filename!=NULL) && (mode_fopen != NULL))
+         file = fopen(filename, mode_fopen);
+     return file;
+ }
+ 
+ 
+ uLong ZCALLBACK fread_file_func (opaque, stream, buf, size)
+    voidpf opaque;
+    voidpf stream;
+    void* buf;
+    uLong size;
+ {
+     uLong ret;
+     ret = fread(buf, 1, (size_t)size, (FILE *)stream);
+     return ret;
+ }
+ 
+ 
+ uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size)
+    voidpf opaque;
+    voidpf stream;
+    const void* buf;
+    uLong size;
+ {
+     uLong ret;
+     ret = fwrite(buf, 1, (size_t)size, (FILE *)stream);
+     return ret;
+ }
+ 
+ long ZCALLBACK ftell_file_func (opaque, stream)
+    voidpf opaque;
+    voidpf stream;
+ {
+     long ret;
+     ret = ftell((FILE *)stream);
+     return ret;
+ }
+ 
+ long ZCALLBACK fseek_file_func (opaque, stream, offset, origin)
+    voidpf opaque;
+    voidpf stream;
+    uLong offset;
+    int origin;
+ {
+     int fseek_origin=0;
+     long ret;
+     switch (origin)
+     {
+     case ZLIB_FILEFUNC_SEEK_CUR :
+         fseek_origin = SEEK_CUR;
+         break;
+     case ZLIB_FILEFUNC_SEEK_END :
+         fseek_origin = SEEK_END;
+         break;
+     case ZLIB_FILEFUNC_SEEK_SET :
+         fseek_origin = SEEK_SET;
+         break;
+     default: return -1;
+     }
+     ret = 0;
+     fseek((FILE *)stream, offset, fseek_origin);
+     return ret;
+ }
+ 
+ int ZCALLBACK fclose_file_func (opaque, stream)
+    voidpf opaque;
+    voidpf stream;
+ {
+     int ret;
+     ret = fclose((FILE *)stream);
+     return ret;
+ }
+ 
+ int ZCALLBACK ferror_file_func (opaque, stream)
+    voidpf opaque;
+    voidpf stream;
+ {
+     int ret;
+     ret = ferror((FILE *)stream);
+     return ret;
+ }
+ 
+ void fill_fopen_filefunc (pzlib_filefunc_def)
+   zlib_filefunc_def* pzlib_filefunc_def;
+ {
+     pzlib_filefunc_def->zopen_file = fopen_file_func;
+     pzlib_filefunc_def->zread_file = fread_file_func;
+     pzlib_filefunc_def->zwrite_file = fwrite_file_func;
+     pzlib_filefunc_def->ztell_file = ftell_file_func;
+     pzlib_filefunc_def->zseek_file = fseek_file_func;
+     pzlib_filefunc_def->zclose_file = fclose_file_func;
+     pzlib_filefunc_def->zerror_file = ferror_file_func;
+     pzlib_filefunc_def->opaque = NULL;
+ }
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/ioapi.h gcc-4.0.0/zlib/contrib/minizip/ioapi.h
*** gcc-3.4.3/zlib/contrib/minizip/ioapi.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/minizip/ioapi.h	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,75 ----
+ /* ioapi.h -- IO base function header for compress/uncompress .zip
+    files using zlib + zip or unzip API
+ 
+    Version 1.00, September 10th, 2003
+ 
+    Copyright (C) 1998-2003 Gilles Vollant
+ */
+ 
+ #ifndef _ZLIBIOAPI_H
+ #define _ZLIBIOAPI_H
+ 
+ 
+ #define ZLIB_FILEFUNC_SEEK_CUR (1)
+ #define ZLIB_FILEFUNC_SEEK_END (2)
+ #define ZLIB_FILEFUNC_SEEK_SET (0)
+ 
+ #define ZLIB_FILEFUNC_MODE_READ      (1)
+ #define ZLIB_FILEFUNC_MODE_WRITE     (2)
+ #define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
+ 
+ #define ZLIB_FILEFUNC_MODE_EXISTING (4)
+ #define ZLIB_FILEFUNC_MODE_CREATE   (8)
+ 
+ 
+ #ifndef ZCALLBACK
+ 
+ #if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
+ #define ZCALLBACK CALLBACK
+ #else
+ #define ZCALLBACK
+ #endif
+ #endif
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode));
+ typedef uLong  (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+ typedef uLong  (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+ typedef long   (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
+ typedef long   (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
+ typedef int    (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
+ typedef int    (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
+ 
+ typedef struct zlib_filefunc_def_s
+ {
+     open_file_func      zopen_file;
+     read_file_func      zread_file;
+     write_file_func     zwrite_file;
+     tell_file_func      ztell_file;
+     seek_file_func      zseek_file;
+     close_file_func     zclose_file;
+     testerror_file_func zerror_file;
+     voidpf              opaque;
+ } zlib_filefunc_def;
+ 
+ 
+ 
+ void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
+ 
+ #define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size))
+ #define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size))
+ #define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream))
+ #define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode))
+ #define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream))
+ #define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream))
+ 
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif
+ 
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/iowin32.c gcc-4.0.0/zlib/contrib/minizip/iowin32.c
*** gcc-3.4.3/zlib/contrib/minizip/iowin32.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/minizip/iowin32.c	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,270 ----
+ /* iowin32.c -- IO base function header for compress/uncompress .zip
+    files using zlib + zip or unzip API
+    This IO API version uses the Win32 API (for Microsoft Windows)
+ 
+    Version 1.00, September 10th, 2003
+ 
+    Copyright (C) 1998-2003 Gilles Vollant
+ */
+ 
+ #include <stdlib.h>
+ 
+ #include "zlib.h"
+ #include "ioapi.h"
+ #include "iowin32.h"
+ 
+ #ifndef INVALID_HANDLE_VALUE
+ #define INVALID_HANDLE_VALUE (0xFFFFFFFF)
+ #endif
+ 
+ #ifndef INVALID_SET_FILE_POINTER
+ #define INVALID_SET_FILE_POINTER ((DWORD)-1)
+ #endif
+ 
+ voidpf ZCALLBACK win32_open_file_func OF((
+    voidpf opaque,
+    const char* filename,
+    int mode));
+ 
+ uLong ZCALLBACK win32_read_file_func OF((
+    voidpf opaque,
+    voidpf stream,
+    void* buf,
+    uLong size));
+ 
+ uLong ZCALLBACK win32_write_file_func OF((
+    voidpf opaque,
+    voidpf stream,
+    const void* buf,
+    uLong size));
+ 
+ long ZCALLBACK win32_tell_file_func OF((
+    voidpf opaque,
+    voidpf stream));
+ 
+ long ZCALLBACK win32_seek_file_func OF((
+    voidpf opaque,
+    voidpf stream,
+    uLong offset,
+    int origin));
+ 
+ int ZCALLBACK win32_close_file_func OF((
+    voidpf opaque,
+    voidpf stream));
+ 
+ int ZCALLBACK win32_error_file_func OF((
+    voidpf opaque,
+    voidpf stream));
+ 
+ typedef struct
+ {
+     HANDLE hf;
+     int error;
+ } WIN32FILE_IOWIN;
+ 
+ voidpf ZCALLBACK win32_open_file_func (opaque, filename, mode)
+    voidpf opaque;
+    const char* filename;
+    int mode;
+ {
+     const char* mode_fopen = NULL;
+     DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+     HANDLE hFile = 0;
+     voidpf ret=NULL;
+ 
+     dwDesiredAccess = dwShareMode = dwFlagsAndAttributes = 0;
+ 
+     if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+     {
+         dwDesiredAccess = GENERIC_READ;
+         dwCreationDisposition = OPEN_EXISTING;
+         dwShareMode = FILE_SHARE_READ;
+     }
+     else
+     if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+     {
+         dwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+         dwCreationDisposition = OPEN_EXISTING;
+     }
+     else
+     if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+     {
+         dwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+         dwCreationDisposition = CREATE_ALWAYS;
+     }
+ 
+     if ((filename!=NULL) && (dwDesiredAccess != 0))
+         hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL,
+                       dwCreationDisposition, dwFlagsAndAttributes, NULL);
+ 
+     if (hFile == INVALID_HANDLE_VALUE)
+         hFile = NULL;
+ 
+     if (hFile != NULL)
+     {
+         WIN32FILE_IOWIN w32fiow;
+         w32fiow.hf = hFile;
+         w32fiow.error = 0;
+         ret = malloc(sizeof(WIN32FILE_IOWIN));
+         if (ret==NULL)
+             CloseHandle(hFile);
+         else *((WIN32FILE_IOWIN*)ret) = w32fiow;
+     }
+     return ret;
+ }
+ 
+ 
+ uLong ZCALLBACK win32_read_file_func (opaque, stream, buf, size)
+    voidpf opaque;
+    voidpf stream;
+    void* buf;
+    uLong size;
+ {
+     uLong ret=0;
+     HANDLE hFile = NULL;
+     if (stream!=NULL)
+         hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+     if (hFile != NULL)
+         if (!ReadFile(hFile, buf, size, &ret, NULL))
+         {
+             DWORD dwErr = GetLastError();
+             if (dwErr == ERROR_HANDLE_EOF)
+                 dwErr = 0;
+             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+         }
+ 
+     return ret;
+ }
+ 
+ 
+ uLong ZCALLBACK win32_write_file_func (opaque, stream, buf, size)
+    voidpf opaque;
+    voidpf stream;
+    const void* buf;
+    uLong size;
+ {
+     uLong ret=0;
+     HANDLE hFile = NULL;
+     if (stream!=NULL)
+         hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+ 
+     if (hFile !=NULL)
+         if (!WriteFile(hFile, buf, size, &ret, NULL))
+         {
+             DWORD dwErr = GetLastError();
+             if (dwErr == ERROR_HANDLE_EOF)
+                 dwErr = 0;
+             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+         }
+ 
+     return ret;
+ }
+ 
+ long ZCALLBACK win32_tell_file_func (opaque, stream)
+    voidpf opaque;
+    voidpf stream;
+ {
+     long ret=-1;
+     HANDLE hFile = NULL;
+     if (stream!=NULL)
+         hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+     if (hFile != NULL)
+     {
+         DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
+         if (dwSet == INVALID_SET_FILE_POINTER)
+         {
+             DWORD dwErr = GetLastError();
+             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+             ret = -1;
+         }
+         else
+             ret=(long)dwSet;
+     }
+     return ret;
+ }
+ 
+ long ZCALLBACK win32_seek_file_func (opaque, stream, offset, origin)
+    voidpf opaque;
+    voidpf stream;
+    uLong offset;
+    int origin;
+ {
+     DWORD dwMoveMethod=0xFFFFFFFF;
+     HANDLE hFile = NULL;
+ 
+     long ret=-1;
+     if (stream!=NULL)
+         hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+     switch (origin)
+     {
+     case ZLIB_FILEFUNC_SEEK_CUR :
+         dwMoveMethod = FILE_CURRENT;
+         break;
+     case ZLIB_FILEFUNC_SEEK_END :
+         dwMoveMethod = FILE_END;
+         break;
+     case ZLIB_FILEFUNC_SEEK_SET :
+         dwMoveMethod = FILE_BEGIN;
+         break;
+     default: return -1;
+     }
+ 
+     if (hFile != NULL)
+     {
+         DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod);
+         if (dwSet == INVALID_SET_FILE_POINTER)
+         {
+             DWORD dwErr = GetLastError();
+             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+             ret = -1;
+         }
+         else
+             ret=0;
+     }
+     return ret;
+ }
+ 
+ int ZCALLBACK win32_close_file_func (opaque, stream)
+    voidpf opaque;
+    voidpf stream;
+ {
+     int ret=-1;
+ 
+     if (stream!=NULL)
+     {
+         HANDLE hFile;
+         hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+         if (hFile != NULL)
+         {
+             CloseHandle(hFile);
+             ret=0;
+         }
+         free(stream);
+     }
+     return ret;
+ }
+ 
+ int ZCALLBACK win32_error_file_func (opaque, stream)
+    voidpf opaque;
+    voidpf stream;
+ {
+     int ret=-1;
+     if (stream!=NULL)
+     {
+         ret = ((WIN32FILE_IOWIN*)stream) -> error;
+     }
+     return ret;
+ }
+ 
+ void fill_win32_filefunc (pzlib_filefunc_def)
+   zlib_filefunc_def* pzlib_filefunc_def;
+ {
+     pzlib_filefunc_def->zopen_file = win32_open_file_func;
+     pzlib_filefunc_def->zread_file = win32_read_file_func;
+     pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+     pzlib_filefunc_def->ztell_file = win32_tell_file_func;
+     pzlib_filefunc_def->zseek_file = win32_seek_file_func;
+     pzlib_filefunc_def->zclose_file = win32_close_file_func;
+     pzlib_filefunc_def->zerror_file = win32_error_file_func;
+     pzlib_filefunc_def->opaque=NULL;
+ }
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/iowin32.h gcc-4.0.0/zlib/contrib/minizip/iowin32.h
*** gcc-3.4.3/zlib/contrib/minizip/iowin32.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/minizip/iowin32.h	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,21 ----
+ /* iowin32.h -- IO base function header for compress/uncompress .zip
+    files using zlib + zip or unzip API
+    This IO API version uses the Win32 API (for Microsoft Windows)
+ 
+    Version 1.00, September 10th, 2003
+ 
+    Copyright (C) 1998-2003 Gilles Vollant
+ */
+ 
+ #include <windows.h>
+ 
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/miniunz.c gcc-4.0.0/zlib/contrib/minizip/miniunz.c
*** gcc-3.4.3/zlib/contrib/minizip/miniunz.c	Mon Mar 11 21:49:49 2002
--- gcc-4.0.0/zlib/contrib/minizip/miniunz.c	Mon Oct 11 18:45:41 2004
***************
*** 17,23 ****
--- 17,28 ----
  
  #define CASESENSITIVITY (0)
  #define WRITEBUFFERSIZE (8192)
+ #define MAXFILENAME (256)
  
+ #ifdef WIN32
+ #define USEWIN32IOAPI
+ #include "iowin32.h"
+ #endif
  /*
    mini unzip, demo of unzip package
  
***************
*** 34,42 ****
      dosdate : the new date at the MSDos format (4 bytes)
      tmu_date : the SAME new date at the tm_unz format */
  void change_file_date(filename,dosdate,tmu_date)
! 	const char *filename;
! 	uLong dosdate;
! 	tm_unz tmu_date;
  {
  #ifdef WIN32
    HANDLE hFile;
--- 39,47 ----
      dosdate : the new date at the MSDos format (4 bytes)
      tmu_date : the SAME new date at the tm_unz format */
  void change_file_date(filename,dosdate,tmu_date)
!     const char *filename;
!     uLong dosdate;
!     tm_unz tmu_date;
  {
  #ifdef WIN32
    HANDLE hFile;
*************** void change_file_date(filename,dosdate,t
*** 75,91 ****
     As I don't know well Unix, I wait feedback for the unix portion */
  
  int mymkdir(dirname)
! 	const char* dirname;
  {
      int ret=0;
  #ifdef WIN32
! 	ret = mkdir(dirname);
  #else
  #ifdef unix
! 	ret = mkdir (dirname,0775);
  #endif
  #endif
! 	return ret;
  }
  
  int makedir (newdir)
--- 80,96 ----
     As I don't know well Unix, I wait feedback for the unix portion */
  
  int mymkdir(dirname)
!     const char* dirname;
  {
      int ret=0;
  #ifdef WIN32
!     ret = mkdir(dirname);
  #else
  #ifdef unix
!     ret = mkdir (dirname,0775);
  #endif
  #endif
!     return ret;
  }
  
  int makedir (newdir)
*************** int makedir (newdir)
*** 93,106 ****
  {
    char *buffer ;
    char *p;
!   int  len = strlen(newdir);  
  
!   if (len <= 0) 
      return 0;
  
    buffer = (char*)malloc(len+1);
    strcpy(buffer,newdir);
!   
    if (buffer[len-1] == '/') {
      buffer[len-1] = '\0';
    }
--- 98,111 ----
  {
    char *buffer ;
    char *p;
!   int  len = (int)strlen(newdir);
  
!   if (len <= 0)
      return 0;
  
    buffer = (char*)malloc(len+1);
    strcpy(buffer,newdir);
! 
    if (buffer[len-1] == '/') {
      buffer[len-1] = '\0';
    }
*************** int makedir (newdir)
*** 135,238 ****
  
  void do_banner()
  {
! 	printf("MiniUnz 0.15, demo of zLib + Unz package written by Gilles Vollant\n");
! 	printf("more info at http://wwww.winimage/zLibDll/unzip.htm\n\n");
  }
  
  void do_help()
! {	
! 	printf("Usage : miniunz [-exvlo] file.zip [file_to_extract]\n\n") ;
  }
  
  
  int do_list(uf)
! 	unzFile uf;
  {
! 	uLong i;
! 	unz_global_info gi;
! 	int err;
  
! 	err = unzGetGlobalInfo (uf,&gi);
! 	if (err!=UNZ_OK)
! 		printf("error %d with zipfile in unzGetGlobalInfo \n",err);
      printf(" Length  Method   Size  Ratio   Date    Time   CRC-32     Name\n");
      printf(" ------  ------   ----  -----   ----    ----   ------     ----\n");
! 	for (i=0;i<gi.number_entry;i++)
! 	{
! 		char filename_inzip[256];
! 		unz_file_info file_info;
! 		uLong ratio=0;
! 		const char *string_method;
! 		err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
! 		if (err!=UNZ_OK)
! 		{
! 			printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
! 			break;
! 		}
! 		if (file_info.uncompressed_size>0)
! 			ratio = (file_info.compressed_size*100)/file_info.uncompressed_size;
  
! 		if (file_info.compression_method==0)
! 			string_method="Stored";
! 		else
! 		if (file_info.compression_method==Z_DEFLATED)
! 		{
! 			uInt iLevel=(uInt)((file_info.flag & 0x6)/2);
! 			if (iLevel==0)
! 			  string_method="Defl:N";
! 			else if (iLevel==1)
! 			  string_method="Defl:X";
! 			else if ((iLevel==2) || (iLevel==3))
! 			  string_method="Defl:F"; /* 2:fast , 3 : extra fast*/
! 		}
! 		else
! 			string_method="Unkn. ";
  
! 		printf("%7lu  %6s %7lu %3lu%%  %2.2lu-%2.2lu-%2.2lu  %2.2lu:%2.2lu  %8.8lx   %s\n",
! 			    file_info.uncompressed_size,string_method,file_info.compressed_size,
! 				ratio,
! 				(uLong)file_info.tmu_date.tm_mon + 1,
                  (uLong)file_info.tmu_date.tm_mday,
! 				(uLong)file_info.tmu_date.tm_year % 100,
! 				(uLong)file_info.tmu_date.tm_hour,(uLong)file_info.tmu_date.tm_min,
! 				(uLong)file_info.crc,filename_inzip);
! 		if ((i+1)<gi.number_entry)
! 		{
! 			err = unzGoToNextFile(uf);
! 			if (err!=UNZ_OK)
! 			{
! 				printf("error %d with zipfile in unzGoToNextFile\n",err);
! 				break;
! 			}
! 		}
! 	}
  
! 	return 0;
  }
  
  
! int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite)
! 	unzFile uf;
! 	const int* popt_extract_without_path;
      int* popt_overwrite;
  {
! 	char filename_inzip[256];
! 	char* filename_withoutpath;
! 	char* p;
      int err=UNZ_OK;
      FILE *fout=NULL;
      void* buf;
      uInt size_buf;
- 	
- 	unz_file_info file_info;
- 	uLong ratio=0;
- 	err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
  
! 	if (err!=UNZ_OK)
! 	{
! 		printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
! 		return err;
! 	}
  
      size_buf = WRITEBUFFERSIZE;
      buf = (void*)malloc(size_buf);
--- 140,257 ----
  
  void do_banner()
  {
!     printf("MiniUnz 1.00, demo of zLib + Unz package written by Gilles Vollant\n");
!     printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
  }
  
  void do_help()
! {
!     printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.]\n\n" \
!            "  -e  Extract without pathname (junk paths)\n" \
!            "  -x  Extract with pathname\n" \
!            "  -v  list files\n" \
!            "  -l  list files\n" \
!            "  -o  overwrite files without prompting\n" \
!            "  -p  extract crypted file using password\n\n");
  }
  
  
  int do_list(uf)
!     unzFile uf;
  {
!     uLong i;
!     unz_global_info gi;
!     int err;
  
!     err = unzGetGlobalInfo (uf,&gi);
!     if (err!=UNZ_OK)
!         printf("error %d with zipfile in unzGetGlobalInfo \n",err);
      printf(" Length  Method   Size  Ratio   Date    Time   CRC-32     Name\n");
      printf(" ------  ------   ----  -----   ----    ----   ------     ----\n");
!     for (i=0;i<gi.number_entry;i++)
!     {
!         char filename_inzip[256];
!         unz_file_info file_info;
!         uLong ratio=0;
!         const char *string_method;
!         char charCrypt=' ';
!         err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
!         if (err!=UNZ_OK)
!         {
!             printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
!             break;
!         }
!         if (file_info.uncompressed_size>0)
!             ratio = (file_info.compressed_size*100)/file_info.uncompressed_size;
  
!         /* display a '*' if the file is crypted */
!         if ((file_info.flag & 1) != 0)
!             charCrypt='*';
  
!         if (file_info.compression_method==0)
!             string_method="Stored";
!         else
!         if (file_info.compression_method==Z_DEFLATED)
!         {
!             uInt iLevel=(uInt)((file_info.flag & 0x6)/2);
!             if (iLevel==0)
!               string_method="Defl:N";
!             else if (iLevel==1)
!               string_method="Defl:X";
!             else if ((iLevel==2) || (iLevel==3))
!               string_method="Defl:F"; /* 2:fast , 3 : extra fast*/
!         }
!         else
!             string_method="Unkn. ";
! 
!         printf("%7lu  %6s%c%7lu %3lu%%  %2.2lu-%2.2lu-%2.2lu  %2.2lu:%2.2lu  %8.8lx   %s\n",
!                 file_info.uncompressed_size,string_method,
!                 charCrypt,
!                 file_info.compressed_size,
!                 ratio,
!                 (uLong)file_info.tmu_date.tm_mon + 1,
                  (uLong)file_info.tmu_date.tm_mday,
!                 (uLong)file_info.tmu_date.tm_year % 100,
!                 (uLong)file_info.tmu_date.tm_hour,(uLong)file_info.tmu_date.tm_min,
!                 (uLong)file_info.crc,filename_inzip);
!         if ((i+1)<gi.number_entry)
!         {
!             err = unzGoToNextFile(uf);
!             if (err!=UNZ_OK)
!             {
!                 printf("error %d with zipfile in unzGoToNextFile\n",err);
!                 break;
!             }
!         }
!     }
  
!     return 0;
  }
  
  
! int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
!     unzFile uf;
!     const int* popt_extract_without_path;
      int* popt_overwrite;
+     const char* password;
  {
!     char filename_inzip[256];
!     char* filename_withoutpath;
!     char* p;
      int err=UNZ_OK;
      FILE *fout=NULL;
      void* buf;
      uInt size_buf;
  
!     unz_file_info file_info;
!     uLong ratio=0;
!     err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
! 
!     if (err!=UNZ_OK)
!     {
!         printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
!         return err;
!     }
  
      size_buf = WRITEBUFFERSIZE;
      buf = (void*)malloc(size_buf);
*************** int do_extract_currentfile(uf,popt_extra
*** 242,312 ****
          return UNZ_INTERNALERROR;
      }
  
! 	p = filename_withoutpath = filename_inzip;
! 	while ((*p) != '\0')
! 	{
! 		if (((*p)=='/') || ((*p)=='\\'))
! 			filename_withoutpath = p+1;
! 		p++;
! 	}
  
! 	if ((*filename_withoutpath)=='\0')
! 	{
! 		if ((*popt_extract_without_path)==0)
! 		{
! 			printf("creating directory: %s\n",filename_inzip);
! 			mymkdir(filename_inzip);
! 		}
! 	}
! 	else
! 	{
! 		const char* write_filename;
! 		int skip=0;
  
! 		if ((*popt_extract_without_path)==0)
! 			write_filename = filename_inzip;
! 		else
! 			write_filename = filename_withoutpath;
  
! 		err = unzOpenCurrentFile(uf);
! 		if (err!=UNZ_OK)
! 		{
! 			printf("error %d with zipfile in unzOpenCurrentFile\n",err);
! 		}
  
! 		if (((*popt_overwrite)==0) && (err==UNZ_OK))
! 		{
! 			char rep;
! 			FILE* ftestexist;
! 			ftestexist = fopen(write_filename,"rb");
! 			if (ftestexist!=NULL)
! 			{
! 				fclose(ftestexist);
! 				do
! 				{
! 					char answer[128];
! 					printf("The file %s exist. Overwrite ? [y]es, [n]o, [A]ll: ",write_filename);
! 					scanf("%1s",answer);
! 					rep = answer[0] ;
! 					if ((rep>='a') && (rep<='z'))
! 						rep -= 0x20;
! 				}
! 				while ((rep!='Y') && (rep!='N') && (rep!='A'));
! 			}
  
! 			if (rep == 'N')
! 				skip = 1;
  
! 			if (rep == 'A')
! 				*popt_overwrite=1;
! 		}
  
! 		if ((skip==0) && (err==UNZ_OK))
! 		{
! 			fout=fopen(write_filename,"wb");
  
              /* some zipfile don't contain directory alone before file */
!             if ((fout==NULL) && ((*popt_extract_without_path)==0) && 
                                  (filename_withoutpath!=(char*)filename_inzip))
              {
                  char c=*(filename_withoutpath-1);
--- 261,331 ----
          return UNZ_INTERNALERROR;
      }
  
!     p = filename_withoutpath = filename_inzip;
!     while ((*p) != '\0')
!     {
!         if (((*p)=='/') || ((*p)=='\\'))
!             filename_withoutpath = p+1;
!         p++;
!     }
  
!     if ((*filename_withoutpath)=='\0')
!     {
!         if ((*popt_extract_without_path)==0)
!         {
!             printf("creating directory: %s\n",filename_inzip);
!             mymkdir(filename_inzip);
!         }
!     }
!     else
!     {
!         const char* write_filename;
!         int skip=0;
  
!         if ((*popt_extract_without_path)==0)
!             write_filename = filename_inzip;
!         else
!             write_filename = filename_withoutpath;
  
!         err = unzOpenCurrentFilePassword(uf,password);
!         if (err!=UNZ_OK)
!         {
!             printf("error %d with zipfile in unzOpenCurrentFilePassword\n",err);
!         }
  
!         if (((*popt_overwrite)==0) && (err==UNZ_OK))
!         {
!             char rep=0;
!             FILE* ftestexist;
!             ftestexist = fopen(write_filename,"rb");
!             if (ftestexist!=NULL)
!             {
!                 fclose(ftestexist);
!                 do
!                 {
!                     char answer[128];
!                     printf("The file %s exist. Overwrite ? [y]es, [n]o, [A]ll: ",write_filename);
!                     scanf("%1s",answer);
!                     rep = answer[0] ;
!                     if ((rep>='a') && (rep<='z'))
!                         rep -= 0x20;
!                 }
!                 while ((rep!='Y') && (rep!='N') && (rep!='A'));
!             }
  
!             if (rep == 'N')
!                 skip = 1;
  
!             if (rep == 'A')
!                 *popt_overwrite=1;
!         }
  
!         if ((skip==0) && (err==UNZ_OK))
!         {
!             fout=fopen(write_filename,"wb");
  
              /* some zipfile don't contain directory alone before file */
!             if ((fout==NULL) && ((*popt_extract_without_path)==0) &&
                                  (filename_withoutpath!=(char*)filename_inzip))
              {
                  char c=*(filename_withoutpath-1);
*************** int do_extract_currentfile(uf,popt_extra
*** 316,410 ****
                  fout=fopen(write_filename,"wb");
              }
  
! 			if (fout==NULL)
! 			{
! 				printf("error opening %s\n",write_filename);
! 			}
! 		}
  
! 		if (fout!=NULL)
! 		{
! 			printf(" extracting: %s\n",write_filename);
  
! 			do
! 			{
! 				err = unzReadCurrentFile(uf,buf,size_buf);
! 				if (err<0)	
! 				{
! 					printf("error %d with zipfile in unzReadCurrentFile\n",err);
! 					break;
! 				}
! 				if (err>0)
! 					if (fwrite(buf,err,1,fout)!=1)
! 					{
! 						printf("error in writing extracted file\n");
                          err=UNZ_ERRNO;
! 						break;
! 					}
! 			}
! 			while (err>0);
! 			fclose(fout);
! 			if (err==0) 
! 				change_file_date(write_filename,file_info.dosDate,
! 					             file_info.tmu_date);
! 		}
  
          if (err==UNZ_OK)
          {
! 		    err = unzCloseCurrentFile (uf);
! 		    if (err!=UNZ_OK)
! 		    {
! 			    printf("error %d with zipfile in unzCloseCurrentFile\n",err);
! 		    }
          }
          else
!             unzCloseCurrentFile(uf); /* don't lose the error */       
! 	}
  
!     free(buf);    
      return err;
  }
  
  
! int do_extract(uf,opt_extract_without_path,opt_overwrite)
! 	unzFile uf;
! 	int opt_extract_without_path;
      int opt_overwrite;
  {
! 	uLong i;
! 	unz_global_info gi;
! 	int err;
! 	FILE* fout=NULL;	
  
! 	err = unzGetGlobalInfo (uf,&gi);
! 	if (err!=UNZ_OK)
! 		printf("error %d with zipfile in unzGetGlobalInfo \n",err);
  
! 	for (i=0;i<gi.number_entry;i++)
! 	{
          if (do_extract_currentfile(uf,&opt_extract_without_path,
!                                       &opt_overwrite) != UNZ_OK)
              break;
  
! 		if ((i+1)<gi.number_entry)
! 		{
! 			err = unzGoToNextFile(uf);
! 			if (err!=UNZ_OK)
! 			{
! 				printf("error %d with zipfile in unzGoToNextFile\n",err);
! 				break;
! 			}
! 		}
! 	}
  
! 	return 0;
  }
  
! int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite)
! 	unzFile uf;
! 	const char* filename;
! 	int opt_extract_without_path;
      int opt_overwrite;
  {
      int err = UNZ_OK;
      if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
--- 335,434 ----
                  fout=fopen(write_filename,"wb");
              }
  
!             if (fout==NULL)
!             {
!                 printf("error opening %s\n",write_filename);
!             }
!         }
  
!         if (fout!=NULL)
!         {
!             printf(" extracting: %s\n",write_filename);
  
!             do
!             {
!                 err = unzReadCurrentFile(uf,buf,size_buf);
!                 if (err<0)
!                 {
!                     printf("error %d with zipfile in unzReadCurrentFile\n",err);
!                     break;
!                 }
!                 if (err>0)
!                     if (fwrite(buf,err,1,fout)!=1)
!                     {
!                         printf("error in writing extracted file\n");
                          err=UNZ_ERRNO;
!                         break;
!                     }
!             }
!             while (err>0);
!             if (fout)
!                     fclose(fout);
! 
!             if (err==0)
!                 change_file_date(write_filename,file_info.dosDate,
!                                  file_info.tmu_date);
!         }
  
          if (err==UNZ_OK)
          {
!             err = unzCloseCurrentFile (uf);
!             if (err!=UNZ_OK)
!             {
!                 printf("error %d with zipfile in unzCloseCurrentFile\n",err);
!             }
          }
          else
!             unzCloseCurrentFile(uf); /* don't lose the error */
!     }
  
!     free(buf);
      return err;
  }
  
  
! int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
!     unzFile uf;
!     int opt_extract_without_path;
      int opt_overwrite;
+     const char* password;
  {
!     uLong i;
!     unz_global_info gi;
!     int err;
!     FILE* fout=NULL;
  
!     err = unzGetGlobalInfo (uf,&gi);
!     if (err!=UNZ_OK)
!         printf("error %d with zipfile in unzGetGlobalInfo \n",err);
  
!     for (i=0;i<gi.number_entry;i++)
!     {
          if (do_extract_currentfile(uf,&opt_extract_without_path,
!                                       &opt_overwrite,
!                                       password) != UNZ_OK)
              break;
  
!         if ((i+1)<gi.number_entry)
!         {
!             err = unzGoToNextFile(uf);
!             if (err!=UNZ_OK)
!             {
!                 printf("error %d with zipfile in unzGoToNextFile\n",err);
!                 break;
!             }
!         }
!     }
  
!     return 0;
  }
  
! int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
!     unzFile uf;
!     const char* filename;
!     int opt_extract_without_path;
      int opt_overwrite;
+     const char* password;
  {
      int err = UNZ_OK;
      if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
*************** int do_extract_onefile(uf,filename,opt_e
*** 414,420 ****
      }
  
      if (do_extract_currentfile(uf,&opt_extract_without_path,
!                                       &opt_overwrite) == UNZ_OK)
          return 0;
      else
          return 1;
--- 438,445 ----
      }
  
      if (do_extract_currentfile(uf,&opt_extract_without_path,
!                                       &opt_overwrite,
!                                       password) == UNZ_OK)
          return 0;
      else
          return 1;
*************** int do_extract_onefile(uf,filename,opt_e
*** 422,508 ****
  
  
  int main(argc,argv)
! 	int argc;
! 	char *argv[];
  {
! 	const char *zipfilename=NULL;
      const char *filename_to_extract=NULL;
! 	int i;
! 	int opt_do_list=0;
! 	int opt_do_extract=1;
! 	int opt_do_extract_withoutpath=0;
! 	int opt_overwrite=0;
! 	char filename_try[512];
! 	unzFile uf=NULL;
  
! 	do_banner();
! 	if (argc==1)
! 	{
! 		do_help();
! 		exit(0);
! 	}
! 	else
! 	{
! 		for (i=1;i<argc;i++)
! 		{
! 			if ((*argv[i])=='-')
! 			{
! 				const char *p=argv[i]+1;
! 				
! 				while ((*p)!='\0')
! 				{			
! 					char c=*(p++);;
! 					if ((c=='l') || (c=='L'))
! 						opt_do_list = 1;
! 					if ((c=='v') || (c=='V'))
! 						opt_do_list = 1;
! 					if ((c=='x') || (c=='X'))
! 						opt_do_extract = 1;
! 					if ((c=='e') || (c=='E'))
! 						opt_do_extract = opt_do_extract_withoutpath = 1;
! 					if ((c=='o') || (c=='O'))
! 						opt_overwrite=1;
! 				}
! 			}
! 			else
              {
! 				if (zipfilename == NULL)
! 					zipfilename = argv[i];
                  else if (filename_to_extract==NULL)
                          filename_to_extract = argv[i] ;
              }
! 		}
! 	}
  
! 	if (zipfilename!=NULL)
! 	{
! 		strcpy(filename_try,zipfilename);
! 		uf = unzOpen(zipfilename);
! 		if (uf==NULL)
! 		{
! 			strcat(filename_try,".zip");
! 			uf = unzOpen(filename_try);
! 		}
! 	}
  
! 	if (uf==NULL)
! 	{
! 		printf("Cannot open %s or %s.zip\n",zipfilename,zipfilename);
! 		exit (1);
! 	}
      printf("%s opened\n",filename_try);
  
! 	if (opt_do_list==1)
! 		return do_list(uf);
! 	else if (opt_do_extract==1)
      {
          if (filename_to_extract == NULL)
! 		    return do_extract(uf,opt_do_extract_withoutpath,opt_overwrite);
          else
              return do_extract_onefile(uf,filename_to_extract,
!                                       opt_do_extract_withoutpath,opt_overwrite);
      }
! 	unzCloseCurrentFile(uf);
  
! 	return 0;  /* to avoid warning */
  }
--- 447,556 ----
  
  
  int main(argc,argv)
!     int argc;
!     char *argv[];
  {
!     const char *zipfilename=NULL;
      const char *filename_to_extract=NULL;
!     const char *password=NULL;
!     char filename_try[MAXFILENAME+16] = "";
!     int i;
!     int opt_do_list=0;
!     int opt_do_extract=1;
!     int opt_do_extract_withoutpath=0;
!     int opt_overwrite=0;
!     unzFile uf=NULL;
  
!     do_banner();
!     if (argc==1)
!     {
!         do_help();
!         return 0;
!     }
!     else
!     {
!         for (i=1;i<argc;i++)
!         {
!             if ((*argv[i])=='-')
              {
!                 const char *p=argv[i]+1;
! 
!                 while ((*p)!='\0')
!                 {
!                     char c=*(p++);;
!                     if ((c=='l') || (c=='L'))
!                         opt_do_list = 1;
!                     if ((c=='v') || (c=='V'))
!                         opt_do_list = 1;
!                     if ((c=='x') || (c=='X'))
!                         opt_do_extract = 1;
!                     if ((c=='e') || (c=='E'))
!                         opt_do_extract = opt_do_extract_withoutpath = 1;
!                     if ((c=='o') || (c=='O'))
!                         opt_overwrite=1;
!                     if (((c=='p') || (c=='P')) && (i+1<argc))
!                     {
!                         password=argv[i+1];
!                         i++;
!                     }
!                 }
!             }
!             else
!             {
!                 if (zipfilename == NULL)
!                     zipfilename = argv[i];
                  else if (filename_to_extract==NULL)
                          filename_to_extract = argv[i] ;
              }
!         }
!     }
  
!     if (zipfilename!=NULL)
!     {
  
! #        ifdef USEWIN32IOAPI
!         zlib_filefunc_def ffunc;
! #        endif
! 
!         strncpy(filename_try, zipfilename,MAXFILENAME-1);
!         /* strncpy doesnt append the trailing NULL, of the string is too long. */
!         filename_try[ MAXFILENAME ] = '\0';
! 
! #        ifdef USEWIN32IOAPI
!         fill_win32_filefunc(&ffunc);
!         uf = unzOpen2(zipfilename,&ffunc);
! #        else
!         uf = unzOpen(zipfilename);
! #        endif
!         if (uf==NULL)
!         {
!             strcat(filename_try,".zip");
! #            ifdef USEWIN32IOAPI
!             uf = unzOpen2(filename_try,&ffunc);
! #            else
!             uf = unzOpen(filename_try);
! #            endif
!         }
!     }
! 
!     if (uf==NULL)
!     {
!         printf("Cannot open %s or %s.zip\n",zipfilename,zipfilename);
!         return 1;
!     }
      printf("%s opened\n",filename_try);
  
!     if (opt_do_list==1)
!         return do_list(uf);
!     else if (opt_do_extract==1)
      {
          if (filename_to_extract == NULL)
!             return do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,password);
          else
              return do_extract_onefile(uf,filename_to_extract,
!                                       opt_do_extract_withoutpath,opt_overwrite,password);
      }
!     unzCloseCurrentFile(uf);
  
!     return 0;
  }
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/minizip.c gcc-4.0.0/zlib/contrib/minizip/minizip.c
*** gcc-3.4.3/zlib/contrib/minizip/minizip.c	Mon Mar 11 21:49:49 2002
--- gcc-4.0.0/zlib/contrib/minizip/minizip.c	Mon Oct 11 18:45:41 2004
***************
*** 17,22 ****
--- 17,28 ----
  
  #include "zip.h"
  
+ #ifdef WIN32
+ #define USEWIN32IOAPI
+ #include "iowin32.h"
+ #endif
+ 
+ 
  
  #define WRITEBUFFERSIZE (16384)
  #define MAXFILENAME (256)
*************** uLong filetime(f, tmzip, dt)
*** 55,66 ****
    struct stat s;        /* results of stat() */
    struct tm* filedate;
    time_t tm_t=0;
!   
    if (strcmp(f,"-")!=0)
    {
!     char name[MAXFILENAME];
      int len = strlen(f);
!     strcpy(name, f);
      if (name[len - 1] == '/')
        name[len - 1] = '\0';
      /* not all systems allow stat'ing a file with / appended */
--- 61,76 ----
    struct stat s;        /* results of stat() */
    struct tm* filedate;
    time_t tm_t=0;
! 
    if (strcmp(f,"-")!=0)
    {
!     char name[MAXFILENAME+1];
      int len = strlen(f);
! 
!     strncpy(name, f,MAXFILENAME-1);
!     /* strncpy doesnt append the trailing NULL, of the string is too long. */
!     name[ MAXFILENAME ] = '\0';
! 
      if (name[len - 1] == '/')
        name[len - 1] = '\0';
      /* not all systems allow stat'ing a file with / appended */
*************** uLong filetime(f, tmzip, dt)
*** 98,107 ****
  int check_exist_file(filename)
      const char* filename;
  {
! 	FILE* ftestexist;
      int ret = 1;
! 	ftestexist = fopen(filename,"rb");
! 	if (ftestexist==NULL)
          ret = 0;
      else
          fclose(ftestexist);
--- 108,117 ----
  int check_exist_file(filename)
      const char* filename;
  {
!     FILE* ftestexist;
      int ret = 1;
!     ftestexist = fopen(filename,"rb");
!     if (ftestexist==NULL)
          ret = 0;
      else
          fclose(ftestexist);
*************** int check_exist_file(filename)
*** 110,168 ****
  
  void do_banner()
  {
! 	printf("MiniZip 0.15, demo of zLib + Zip package written by Gilles Vollant\n");
! 	printf("more info at http://wwww.winimage/zLibDll/unzip.htm\n\n");
  }
  
  void do_help()
! {	
! 	printf("Usage : minizip [-o] file.zip [files_to_add]\n\n") ;
  }
  
  int main(argc,argv)
! 	int argc;
! 	char *argv[];
  {
! 	int i;
! 	int opt_overwrite=0;
      int opt_compress_level=Z_DEFAULT_COMPRESSION;
      int zipfilenamearg = 0;
! 	char filename_try[MAXFILENAME];
      int zipok;
      int err=0;
      int size_buf=0;
!     void* buf=NULL,
  
  
! 	do_banner();
! 	if (argc==1)
! 	{
! 		do_help();
! 		exit(0);
          return 0;
! 	}
! 	else
! 	{
! 		for (i=1;i<argc;i++)
! 		{
! 			if ((*argv[i])=='-')
! 			{
! 				const char *p=argv[i]+1;
! 				
! 				while ((*p)!='\0')
! 				{			
! 					char c=*(p++);;
! 					if ((c=='o') || (c=='O'))
! 						opt_overwrite = 1;
                      if ((c>='0') && (c<='9'))
                          opt_compress_level = c-'0';
! 				}
! 			}
! 			else
! 				if (zipfilenamearg == 0)
                      zipfilenamearg = i ;
! 		}
! 	}
  
      size_buf = WRITEBUFFERSIZE;
      buf = (void*)malloc(size_buf);
--- 120,231 ----
  
  void do_banner()
  {
!     printf("MiniZip 1.00, demo of zLib + Zip package written by Gilles Vollant\n");
!     printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
  }
  
  void do_help()
! {
!     printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] file.zip [files_to_add]\n\n" \
!            "  -o  Overwrite existing file.zip\n" \
!            "  -a  Append to existing file.zip\n" \
!            "  -0  Store only\n" \
!            "  -1  Compress faster\n" \
!            "  -9  Compress better\n\n");
! }
! 
! /* calculate the CRC32 of a file,
!    because to encrypt a file, we need known the CRC32 of the file before */
! int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
! {
!    unsigned long calculate_crc=0;
!    int err=ZIP_OK;
!    FILE * fin = fopen(filenameinzip,"rb");
!    unsigned long size_read = 0;
!    unsigned long total_read = 0;
!    if (fin==NULL)
!    {
!        err = ZIP_ERRNO;
!    }
! 
!     if (err == ZIP_OK)
!         do
!         {
!             err = ZIP_OK;
!             size_read = (int)fread(buf,1,size_buf,fin);
!             if (size_read < size_buf)
!                 if (feof(fin)==0)
!             {
!                 printf("error in reading %s\n",filenameinzip);
!                 err = ZIP_ERRNO;
!             }
! 
!             if (size_read>0)
!                 calculate_crc = crc32(calculate_crc,buf,size_read);
!             total_read += size_read;
! 
!         } while ((err == ZIP_OK) && (size_read>0));
! 
!     if (fin)
!         fclose(fin);
! 
!     *result_crc=calculate_crc;
!     printf("file %s crc %x\n",filenameinzip,calculate_crc);
!     return err;
  }
  
  int main(argc,argv)
!     int argc;
!     char *argv[];
  {
!     int i;
!     int opt_overwrite=0;
      int opt_compress_level=Z_DEFAULT_COMPRESSION;
      int zipfilenamearg = 0;
!     char filename_try[MAXFILENAME+16];
      int zipok;
      int err=0;
      int size_buf=0;
!     void* buf=NULL;
!     const char* password=NULL;
  
  
!     do_banner();
!     if (argc==1)
!     {
!         do_help();
          return 0;
!     }
!     else
!     {
!         for (i=1;i<argc;i++)
!         {
!             if ((*argv[i])=='-')
!             {
!                 const char *p=argv[i]+1;
! 
!                 while ((*p)!='\0')
!                 {
!                     char c=*(p++);;
!                     if ((c=='o') || (c=='O'))
!                         opt_overwrite = 1;
!                     if ((c=='a') || (c=='A'))
!                         opt_overwrite = 2;
                      if ((c>='0') && (c<='9'))
                          opt_compress_level = c-'0';
! 
!                     if (((c=='p') || (c=='P')) && (i+1<argc))
!                     {
!                         password=argv[i+1];
!                         i++;
!                     }
!                 }
!             }
!             else
!                 if (zipfilenamearg == 0)
                      zipfilenamearg = i ;
!         }
!     }
  
      size_buf = WRITEBUFFERSIZE;
      buf = (void*)malloc(size_buf);
*************** int main(argc,argv)
*** 172,187 ****
          return ZIP_INTERNALERROR;
      }
  
! 	if (zipfilenamearg==0)
          zipok=0;
      else
! 	{
          int i,len;
          int dot_found=0;
  
          zipok = 1 ;
! 		strcpy(filename_try,argv[zipfilenamearg]);
!         len=strlen(filename_try);
          for (i=0;i<len;i++)
              if (filename_try[i]=='.')
                  dot_found=1;
--- 235,253 ----
          return ZIP_INTERNALERROR;
      }
  
!     if (zipfilenamearg==0)
          zipok=0;
      else
!     {
          int i,len;
          int dot_found=0;
  
          zipok = 1 ;
!         strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1);
!         /* strncpy doesnt append the trailing NULL, of the string is too long. */
!         filename_try[ MAXFILENAME ] = '\0';
! 
!         len=(int)strlen(filename_try);
          for (i=0;i<len;i++)
              if (filename_try[i]=='.')
                  dot_found=1;
*************** int main(argc,argv)
*** 189,224 ****
          if (dot_found==0)
              strcat(filename_try,".zip");
  
          if (opt_overwrite==0)
              if (check_exist_file(filename_try)!=0)
! 			{
!                 char rep;
! 				do
! 				{
! 					char answer[128];
! 					printf("The file %s exist. Overwrite ? [y]es, [n]o : ",filename_try);
! 					scanf("%1s",answer);
! 					rep = answer[0] ;
! 					if ((rep>='a') && (rep<='z'))
! 						rep -= 0x20;
! 				}
! 				while ((rep!='Y') && (rep!='N'));
                  if (rep=='N')
                      zipok = 0;
! 			}
      }
  
      if (zipok==1)
      {
          zipFile zf;
          int errclose;
!         zf = zipOpen(filename_try,0);
          if (zf == NULL)
          {
              printf("error opening %s\n",filename_try);
              err= ZIP_ERRNO;
          }
!         else 
              printf("creating %s\n",filename_try);
  
          for (i=zipfilenamearg+1;(i<argc) && (err==ZIP_OK);i++)
--- 255,306 ----
          if (dot_found==0)
              strcat(filename_try,".zip");
  
+         if (opt_overwrite==2)
+         {
+             /* if the file don't exist, we not append file */
+             if (check_exist_file(filename_try)==0)
+                 opt_overwrite=1;
+         }
+         else
          if (opt_overwrite==0)
              if (check_exist_file(filename_try)!=0)
!             {
!                 char rep=0;
!                 do
!                 {
!                     char answer[128];
!                     printf("The file %s exist. Overwrite ? [y]es, [n]o, [a]ppend : ",filename_try);
!                     scanf("%1s",answer);
!                     rep = answer[0] ;
!                     if ((rep>='a') && (rep<='z'))
!                         rep -= 0x20;
!                 }
!                 while ((rep!='Y') && (rep!='N') && (rep!='A'));
                  if (rep=='N')
                      zipok = 0;
!                 if (rep=='A')
!                     opt_overwrite = 2;
!             }
      }
  
      if (zipok==1)
      {
          zipFile zf;
          int errclose;
! #        ifdef USEWIN32IOAPI
!         zlib_filefunc_def ffunc;
!         fill_win32_filefunc(&ffunc);
!         zf = zipOpen2(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc);
! #        else
!         zf = zipOpen(filename_try,(opt_overwrite==2) ? 2 : 0);
! #        endif
! 
          if (zf == NULL)
          {
              printf("error opening %s\n",filename_try);
              err= ZIP_ERRNO;
          }
!         else
              printf("creating %s\n",filename_try);
  
          for (i=zipfilenamearg+1;(i<argc) && (err==ZIP_OK);i++)
*************** int main(argc,argv)
*** 229,247 ****
                  int size_read;
                  const char* filenameinzip = argv[i];
                  zip_fileinfo zi;
  
!                 zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = 
!                 zi.tmz_date.tm_mday = zi.tmz_date.tm_min = zi.tmz_date.tm_year = 0;
                  zi.dosDate = 0;
                  zi.internal_fa = 0;
                  zi.external_fa = 0;
                  filetime(filenameinzip,&zi.tmz_date,&zi.dosDate);
  
! 
                  err = zipOpenNewFileInZip(zf,filenameinzip,&zi,
!                                  NULL,0,NULL,0,NULL /* comment*/,
                                   (opt_compress_level != 0) ? Z_DEFLATED : 0,
                                   opt_compress_level);
  
                  if (err != ZIP_OK)
                      printf("error in opening %s in zipfile\n",filenameinzip);
--- 311,341 ----
                  int size_read;
                  const char* filenameinzip = argv[i];
                  zip_fileinfo zi;
+                 unsigned long crcFile=0;
  
!                 zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour =
!                 zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0;
                  zi.dosDate = 0;
                  zi.internal_fa = 0;
                  zi.external_fa = 0;
                  filetime(filenameinzip,&zi.tmz_date,&zi.dosDate);
  
! /*
                  err = zipOpenNewFileInZip(zf,filenameinzip,&zi,
!                                  NULL,0,NULL,0,NULL / * comment * /,
                                   (opt_compress_level != 0) ? Z_DEFLATED : 0,
                                   opt_compress_level);
+ */
+                 if ((password != NULL) && (err==ZIP_OK))
+                     err = getFileCrc(filenameinzip,buf,size_buf,&crcFile);
+ 
+                 err = zipOpenNewFileInZip3(zf,filenameinzip,&zi,
+                                  NULL,0,NULL,0,NULL /* comment*/,
+                                  (opt_compress_level != 0) ? Z_DEFLATED : 0,
+                                  opt_compress_level,0,
+                                  /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */
+                                  -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                  password,crcFile);
  
                  if (err != ZIP_OK)
                      printf("error in opening %s in zipfile\n",filenameinzip);
*************** int main(argc,argv)
*** 259,265 ****
                      do
                      {
                          err = ZIP_OK;
!                         size_read = fread(buf,1,size_buf,fin);
                          if (size_read < size_buf)
                              if (feof(fin)==0)
                          {
--- 353,359 ----
                      do
                      {
                          err = ZIP_OK;
!                         size_read = (int)fread(buf,1,size_buf,fin);
                          if (size_read < size_buf)
                              if (feof(fin)==0)
                          {
*************** int main(argc,argv)
*** 275,289 ****
                                  printf("error in writing %s in the zipfile\n",
                                                   filenameinzip);
                              }
!                                 
                          }
                      } while ((err == ZIP_OK) && (size_read>0));
  
!                 fclose(fin);
                  if (err<0)
                      err=ZIP_ERRNO;
                  else
!                 {                    
                      err = zipCloseFileInZip(zf);
                      if (err!=ZIP_OK)
                          printf("error in closing %s in the zipfile\n",
--- 369,385 ----
                                  printf("error in writing %s in the zipfile\n",
                                                   filenameinzip);
                              }
! 
                          }
                      } while ((err == ZIP_OK) && (size_read>0));
  
!                 if (fin)
!                     fclose(fin);
! 
                  if (err<0)
                      err=ZIP_ERRNO;
                  else
!                 {
                      err = zipCloseFileInZip(zf);
                      if (err!=ZIP_OK)
                          printf("error in closing %s in the zipfile\n",
*************** int main(argc,argv)
*** 297,302 ****
     }
  
      free(buf);
!     exit(0);
! 	return 0;  /* to avoid warning */
  }
--- 393,397 ----
     }
  
      free(buf);
!     return 0;
  }
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/readme.txt gcc-4.0.0/zlib/contrib/minizip/readme.txt
*** gcc-3.4.3/zlib/contrib/minizip/readme.txt	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/readme.txt	Thu Jan  1 00:00:00 1970
***************
*** 1,37 ****
- 
- UnZip 0.15 additionnal library
- 
- 
-   This unzip package allow extract file from .ZIP file, compatible with 
- PKZip 2.04g, WinZip, InfoZip tools and compatible.
- 
-   Multi volume ZipFile (span) are not supported, and old compression used by old 
- PKZip 1.x are not supported.
- 
- See probdesc.zip from PKWare for specification of .ZIP format.
- 
- What is Unzip
-   The Zlib library support the deflate compression and the creation of gzip (.gz) 
- file. Zlib is free and small.
-   The .Zip format, which can contain several compressed files (.gz can containt
- only one file) is a very popular format. This is why I've written a package for reading file compressed in Zipfile.
- 
- Using Unzip package
- 
- You need source of Zlib (get zlib111.zip and read zlib.h).
- Get unzlb015.zip and read unzip.h (whith documentation of unzip functions)
- 
- The Unzip package is only two file : unzip.h and unzip.c. But it use the Zlib 
-   files.
- unztst.c is a simple sample program, which list file in a zipfile and display
-   README.TXT or FILE_ID.DIZ (if these files are found).
- miniunz.c is a mini unzip program.
- 
- I'm also currenlyt writing a zipping portion (zip.h, zip.c and test with minizip.c)
- 
- Please email me for feedback.
- I hope my source is compatible with Unix system, but I need your help for be sure
- 
- Latest revision : Mar 04th, 1998
- 
- Check http://www.winimage.com/zLibDll/unzip.html for up to date info.
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/unzip.c gcc-4.0.0/zlib/contrib/minizip/unzip.c
*** gcc-3.4.3/zlib/contrib/minizip/unzip.c	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/unzip.c	Mon Oct 11 18:45:41 2004
***************
*** 1,9 ****
! /* unzip.c -- IO on .zip files using zlib 
!    Version 0.15 beta, Mar 19th, 1998,
  
     Read unzip.h for more info
  */
  
  
  #include <stdio.h>
  #include <stdlib.h>
--- 1,39 ----
! /* unzip.c -- IO for uncompress .zip files using zlib
!    Version 1.00, September 10th, 2003
! 
!    Copyright (C) 1998-2003 Gilles Vollant
  
     Read unzip.h for more info
  */
  
+ /* Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of
+ compatibility with older software. The following is from the original crypt.c. Code
+ woven in by Terry Thorsen 1/2003.
+ */
+ /*
+   Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.
+ 
+   See the accompanying file LICENSE, version 2000-Apr-09 or later
+   (the contents of which are also included in zip.h) for terms of use.
+   If, for some reason, all these files are missing, the Info-ZIP license
+   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+ */
+ /*
+   crypt.c (full version) by Info-ZIP.      Last revised:  [see crypt.h]
+ 
+   The encryption/decryption parts of this source code (as opposed to the
+   non-echoing password parts) were originally written in Europe.  The
+   whole source package can be freely distributed, including from the USA.
+   (Prior to January 2000, re-export from the US was a violation of US law.)
+  */
+ 
+ /*
+   This encryption code is a direct transcription of the algorithm from
+   Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
+   file (appnote.txt) is distributed with the PKZIP program (even in the
+   version without encryption capabilities).
+  */
+ 
  
  #include <stdio.h>
  #include <stdlib.h>
***************
*** 29,38 ****
  /* compile with -Dlocal if your debugger can't find static symbols */
  
  
! 
! #if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \
!                       !defined(CASESENSITIVITYDEFAULT_NO)
! #define CASESENSITIVITYDEFAULT_NO
  #endif
  
  
--- 59,68 ----
  /* compile with -Dlocal if your debugger can't find static symbols */
  
  
! #ifndef CASESENSITIVITYDEFAULT_NO
! #  if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)
! #    define CASESENSITIVITYDEFAULT_NO
! #  endif
  #endif
  
  
***************
*** 55,76 ****
  #define SIZEZIPLOCALHEADER (0x1e)
  
  
- /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
  
- #ifndef SEEK_CUR
- #define SEEK_CUR    1
- #endif
- 
- #ifndef SEEK_END
- #define SEEK_END    2
- #endif
- 
- #ifndef SEEK_SET
- #define SEEK_SET    0
- #endif
  
  const char unz_copyright[] =
!    " unzip 0.15 Copyright 1998 Gilles Vollant ";
  
  /* unz_file_info_interntal contain internal info about a file in zipfile*/
  typedef struct unz_file_info_internal_s
--- 85,94 ----
  #define SIZEZIPLOCALHEADER (0x1e)
  
  
  
  
  const char unz_copyright[] =
!    " unzip 1.00 Copyright 1998-2003 Gilles Vollant - http://www.winimage.com/zLibDll";
  
  /* unz_file_info_interntal contain internal info about a file in zipfile*/
  typedef struct unz_file_info_internal_s
*************** typedef struct unz_file_info_internal_s
*** 83,105 ****
      when reading and decompress it */
  typedef struct
  {
! 	char  *read_buffer;         /* internal buffer for compressed data */
! 	z_stream stream;            /* zLib stream structure for inflate */
  
! 	uLong pos_in_zipfile;       /* position in byte on the zipfile, for fseek*/
! 	uLong stream_initialised;   /* flag set if stream structure is initialised*/
  
! 	uLong offset_local_extrafield;/* offset of the local extra field */
! 	uInt  size_local_extrafield;/* size of the local extra field */
! 	uLong pos_local_extrafield;   /* position in the local extra field in read*/
  
! 	uLong crc32;                /* crc32 of all data uncompressed */
! 	uLong crc32_wait;           /* crc32 we must obtain after decompress all */
! 	uLong rest_read_compressed; /* number of byte to be decompressed */
! 	uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/
! 	FILE* file;                 /* io structore of the zipfile */
! 	uLong compression_method;   /* compression method (0==store) */
! 	uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
  } file_in_zip_read_info_s;
  
  
--- 101,125 ----
      when reading and decompress it */
  typedef struct
  {
!     char  *read_buffer;         /* internal buffer for compressed data */
!     z_stream stream;            /* zLib stream structure for inflate */
  
!     uLong pos_in_zipfile;       /* position in byte on the zipfile, for fseek*/
!     uLong stream_initialised;   /* flag set if stream structure is initialised*/
  
!     uLong offset_local_extrafield;/* offset of the local extra field */
!     uInt  size_local_extrafield;/* size of the local extra field */
!     uLong pos_local_extrafield;   /* position in the local extra field in read*/
  
!     uLong crc32;                /* crc32 of all data uncompressed */
!     uLong crc32_wait;           /* crc32 we must obtain after decompress all */
!     uLong rest_read_compressed; /* number of byte to be decompressed */
!     uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/
!     zlib_filefunc_def z_filefunc;
!     voidpf filestream;        /* io structore of the zipfile */
!     uLong compression_method;   /* compression method (0==store) */
!     uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
!     int   raw;
  } file_in_zip_read_info_s;
  
  
*************** typedef struct
*** 107,131 ****
  */
  typedef struct
  {
! 	FILE* file;                 /* io structore of the zipfile */
! 	unz_global_info gi;       /* public global information */
! 	uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
! 	uLong num_file;             /* number of the current file in the zipfile*/
! 	uLong pos_in_central_dir;   /* pos of the current file in the central dir*/
! 	uLong current_file_ok;      /* flag about the usability of the current file*/
! 	uLong central_pos;          /* position of the beginning of the central dir*/
  
! 	uLong size_central_dir;     /* size of the central directory  */
! 	uLong offset_central_dir;   /* offset of start of central directory with
! 								   respect to the starting disk number */
  
! 	unz_file_info cur_file_info; /* public info about the current file in zip*/
! 	unz_file_info_internal cur_file_info_internal; /* private info about it*/
      file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current
! 	                                    file if we are decompressing it */
  } unz_s;
  
  
  /* ===========================================================================
       Read a byte from a gz_stream; update next_in and avail_in. Return EOF
     for end of file.
--- 127,161 ----
  */
  typedef struct
  {
!     zlib_filefunc_def z_filefunc;
!     voidpf filestream;        /* io structore of the zipfile */
!     unz_global_info gi;       /* public global information */
!     uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
!     uLong num_file;             /* number of the current file in the zipfile*/
!     uLong pos_in_central_dir;   /* pos of the current file in the central dir*/
!     uLong current_file_ok;      /* flag about the usability of the current file*/
!     uLong central_pos;          /* position of the beginning of the central dir*/
  
!     uLong size_central_dir;     /* size of the central directory  */
!     uLong offset_central_dir;   /* offset of start of central directory with
!                                    respect to the starting disk number */
  
!     unz_file_info cur_file_info; /* public info about the current file in zip*/
!     unz_file_info_internal cur_file_info_internal; /* private info about it*/
      file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current
!                                         file if we are decompressing it */
!     int encrypted;
! #    ifndef NOUNCRYPT
!     unsigned long keys[3];     /* keys defining the pseudo-random sequence */
!     const unsigned long* pcrc_32_tab;
! #    endif
  } unz_s;
  
  
+ #ifndef NOUNCRYPT
+ #include "crypt.h"
+ #endif
+ 
  /* ===========================================================================
       Read a byte from a gz_stream; update next_in and avail_in. Return EOF
     for end of file.
*************** typedef struct
*** 133,144 ****
  */
  
  
! local int unzlocal_getByte(fin,pi)
! 	FILE *fin;
! 	int *pi;
  {
      unsigned char c;
! 	int err = fread(&c, 1, 1, fin);
      if (err==1)
      {
          *pi = (int)c;
--- 163,180 ----
  */
  
  
! local int unzlocal_getByte OF((
!     const zlib_filefunc_def* pzlib_filefunc_def,
!     voidpf filestream,
!     int *pi));
! 
! local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi)
!     const zlib_filefunc_def* pzlib_filefunc_def;
!     voidpf filestream;
!     int *pi;
  {
      unsigned char c;
!     int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1);
      if (err==1)
      {
          *pi = (int)c;
*************** local int unzlocal_getByte(fin,pi)
*** 146,152 ****
      }
      else
      {
!         if (ferror(fin)) 
              return UNZ_ERRNO;
          else
              return UNZ_EOF;
--- 182,188 ----
      }
      else
      {
!         if (ZERROR(*pzlib_filefunc_def,filestream))
              return UNZ_ERRNO;
          else
              return UNZ_EOF;
*************** local int unzlocal_getByte(fin,pi)
*** 155,177 ****
  
  
  /* ===========================================================================
!    Reads a long in LSB order from the given gz_stream. Sets 
  */
! local int unzlocal_getShort (fin,pX)
! 	FILE* fin;
      uLong *pX;
  {
      uLong x ;
      int i;
      int err;
  
!     err = unzlocal_getByte(fin,&i);
      x = (uLong)i;
!     
      if (err==UNZ_OK)
!         err = unzlocal_getByte(fin,&i);
      x += ((uLong)i)<<8;
!    
      if (err==UNZ_OK)
          *pX = x;
      else
--- 191,219 ----
  
  
  /* ===========================================================================
!    Reads a long in LSB order from the given gz_stream. Sets
  */
! local int unzlocal_getShort OF((
!     const zlib_filefunc_def* pzlib_filefunc_def,
!     voidpf filestream,
!     uLong *pX));
! 
! local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX)
!     const zlib_filefunc_def* pzlib_filefunc_def;
!     voidpf filestream;
      uLong *pX;
  {
      uLong x ;
      int i;
      int err;
  
!     err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
      x = (uLong)i;
! 
      if (err==UNZ_OK)
!         err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
      x += ((uLong)i)<<8;
! 
      if (err==UNZ_OK)
          *pX = x;
      else
*************** local int unzlocal_getShort (fin,pX)
*** 179,207 ****
      return err;
  }
  
! local int unzlocal_getLong (fin,pX)
! 	FILE* fin;
      uLong *pX;
  {
      uLong x ;
      int i;
      int err;
  
!     err = unzlocal_getByte(fin,&i);
      x = (uLong)i;
!     
      if (err==UNZ_OK)
!         err = unzlocal_getByte(fin,&i);
      x += ((uLong)i)<<8;
  
      if (err==UNZ_OK)
!         err = unzlocal_getByte(fin,&i);
      x += ((uLong)i)<<16;
  
      if (err==UNZ_OK)
!         err = unzlocal_getByte(fin,&i);
      x += ((uLong)i)<<24;
!    
      if (err==UNZ_OK)
          *pX = x;
      else
--- 221,255 ----
      return err;
  }
  
! local int unzlocal_getLong OF((
!     const zlib_filefunc_def* pzlib_filefunc_def,
!     voidpf filestream,
!     uLong *pX));
! 
! local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX)
!     const zlib_filefunc_def* pzlib_filefunc_def;
!     voidpf filestream;
      uLong *pX;
  {
      uLong x ;
      int i;
      int err;
  
!     err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
      x = (uLong)i;
! 
      if (err==UNZ_OK)
!         err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
      x += ((uLong)i)<<8;
  
      if (err==UNZ_OK)
!         err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
      x += ((uLong)i)<<16;
  
      if (err==UNZ_OK)
!         err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
      x += ((uLong)i)<<24;
! 
      if (err==UNZ_OK)
          *pX = x;
      else
*************** local int unzlocal_getLong (fin,pX)
*** 212,237 ****
  
  /* My own strcmpi / strcasecmp */
  local int strcmpcasenosensitive_internal (fileName1,fileName2)
! 	const char* fileName1;
! 	const char* fileName2;
  {
! 	for (;;)
! 	{
! 		char c1=*(fileName1++);
! 		char c2=*(fileName2++);
! 		if ((c1>='a') && (c1<='z'))
! 			c1 -= 0x20;
! 		if ((c2>='a') && (c2<='z'))
! 			c2 -= 0x20;
! 		if (c1=='\0')
! 			return ((c2=='\0') ? 0 : -1);
! 		if (c2=='\0')
! 			return 1;
! 		if (c1<c2)
! 			return -1;
! 		if (c1>c2)
! 			return 1;
! 	}
  }
  
  
--- 260,285 ----
  
  /* My own strcmpi / strcasecmp */
  local int strcmpcasenosensitive_internal (fileName1,fileName2)
!     const char* fileName1;
!     const char* fileName2;
  {
!     for (;;)
!     {
!         char c1=*(fileName1++);
!         char c2=*(fileName2++);
!         if ((c1>='a') && (c1<='z'))
!             c1 -= 0x20;
!         if ((c2>='a') && (c2<='z'))
!             c2 -= 0x20;
!         if (c1=='\0')
!             return ((c2=='\0') ? 0 : -1);
!         if (c2=='\0')
!             return 1;
!         if (c1<c2)
!             return -1;
!         if (c1>c2)
!             return 1;
!     }
  }
  
  
*************** local int strcmpcasenosensitive_internal
*** 245,251 ****
  #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
  #endif
  
! /* 
     Compare two filename (fileName1,fileName2).
     If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
     If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
--- 293,299 ----
  #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
  #endif
  
! /*
     Compare two filename (fileName1,fileName2).
     If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
     If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
*************** local int strcmpcasenosensitive_internal
*** 255,457 ****
  
  */
  extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity)
! 	const char* fileName1;
! 	const char* fileName2;
! 	int iCaseSensitivity;
  {
! 	if (iCaseSensitivity==0)
! 		iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
  
! 	if (iCaseSensitivity==1)
! 		return strcmp(fileName1,fileName2);
  
! 	return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
! } 
  
  #define BUFREADCOMMENT (0x400)
  
  /*
    Locate the Central directory of a zipfile (at the end, just before
      the global comment)
  */
! local uLong unzlocal_SearchCentralDir(fin)
! 	FILE *fin;
  {
! 	unsigned char* buf;
! 	uLong uSizeFile;
! 	uLong uBackRead;
! 	uLong uMaxBack=0xffff; /* maximum size of global comment */
! 	uLong uPosFound=0;
! 	
! 	if (fseek(fin,0,SEEK_END) != 0)
! 		return 0;
  
  
- 	uSizeFile = ftell( fin );
- 	
- 	if (uMaxBack>uSizeFile)
- 		uMaxBack = uSizeFile;
  
! 	buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
! 	if (buf==NULL)
! 		return 0;
  
! 	uBackRead = 4;
! 	while (uBackRead<uMaxBack)
! 	{
! 		uLong uReadSize,uReadPos ;
! 		int i;
! 		if (uBackRead+BUFREADCOMMENT>uMaxBack) 
! 			uBackRead = uMaxBack;
! 		else
! 			uBackRead+=BUFREADCOMMENT;
! 		uReadPos = uSizeFile-uBackRead ;
! 		
! 		uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? 
                       (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
! 		if (fseek(fin,uReadPos,SEEK_SET)!=0)
! 			break;
  
! 		if (fread(buf,(uInt)uReadSize,1,fin)!=1)
! 			break;
  
!                 for (i=(int)uReadSize-3; (i--)>0;)
! 			if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && 
! 				((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
! 			{
! 				uPosFound = uReadPos+i;
! 				break;
! 			}
  
! 		if (uPosFound!=0)
! 			break;
! 	}
! 	TRYFREE(buf);
! 	return uPosFound;
  }
  
  /*
    Open a Zip file. path contain the full pathname (by example,
!      on a Windows NT computer "c:\\test\\zlib109.zip" or on an Unix computer
! 	 "zlib/zlib109.zip".
! 	 If the zipfile cannot be opened (file don't exist or in not valid), the
! 	   return value is NULL.
       Else, the return value is a unzFile Handle, usable with other function
! 	   of this unzip package.
  */
! extern unzFile ZEXPORT unzOpen (path)
! 	const char *path;
  {
! 	unz_s us;
! 	unz_s *s;
! 	uLong central_pos,uL;
! 	FILE * fin ;
  
! 	uLong number_disk;          /* number of the current dist, used for 
! 								   spaning ZIP, unsupported, always 0*/
! 	uLong number_disk_with_CD;  /* number the the disk with central dir, used
! 								   for spaning ZIP, unsupported, always 0*/
! 	uLong number_entry_CD;      /* total number of entries in
! 	                               the central dir 
! 	                               (same than number_entry on nospan) */
  
! 	int err=UNZ_OK;
  
      if (unz_copyright[0]!=' ')
          return NULL;
  
!     fin=fopen(path,"rb");
! 	if (fin==NULL)
! 		return NULL;
  
! 	central_pos = unzlocal_SearchCentralDir(fin);
! 	if (central_pos==0)
! 		err=UNZ_ERRNO;
  
! 	if (fseek(fin,central_pos,SEEK_SET)!=0)
! 		err=UNZ_ERRNO;
  
! 	/* the signature, already checked */
! 	if (unzlocal_getLong(fin,&uL)!=UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	/* number of this disk */
! 	if (unzlocal_getShort(fin,&number_disk)!=UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	/* number of the disk with the start of the central directory */
! 	if (unzlocal_getShort(fin,&number_disk_with_CD)!=UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	/* total number of entries in the central dir on this disk */
! 	if (unzlocal_getShort(fin,&us.gi.number_entry)!=UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	/* total number of entries in the central dir */
! 	if (unzlocal_getShort(fin,&number_entry_CD)!=UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if ((number_entry_CD!=us.gi.number_entry) ||
! 		(number_disk_with_CD!=0) ||
! 		(number_disk!=0))
! 		err=UNZ_BADZIPFILE;
  
! 	/* size of the central directory */
! 	if (unzlocal_getLong(fin,&us.size_central_dir)!=UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	/* offset of start of central directory with respect to the 
! 	      starting disk number */
! 	if (unzlocal_getLong(fin,&us.offset_central_dir)!=UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	/* zipfile comment length */
! 	if (unzlocal_getShort(fin,&us.gi.size_comment)!=UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if ((central_pos<us.offset_central_dir+us.size_central_dir) && 
! 		(err==UNZ_OK))
! 		err=UNZ_BADZIPFILE;
  
! 	if (err!=UNZ_OK)
! 	{
! 		fclose(fin);
! 		return NULL;
! 	}
  
! 	us.file=fin;
! 	us.byte_before_the_zipfile = central_pos -
! 		                    (us.offset_central_dir+us.size_central_dir);
! 	us.central_pos = central_pos;
      us.pfile_in_zip_read = NULL;
! 	
  
! 	s=(unz_s*)ALLOC(sizeof(unz_s));
! 	*s=us;
! 	unzGoToFirstFile((unzFile)s);	
! 	return (unzFile)s;	
  }
  
  
  /*
    Close a ZipFile opened with unzipOpen.
    If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
      these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
    return UNZ_OK if there is no problem. */
  extern int ZEXPORT unzClose (file)
! 	unzFile file;
  {
! 	unz_s* s;
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
  
      if (s->pfile_in_zip_read!=NULL)
          unzCloseCurrentFile(file);
  
! 	fclose(s->file);
! 	TRYFREE(s);
! 	return UNZ_OK;
  }
  
  
--- 303,527 ----
  
  */
  extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity)
!     const char* fileName1;
!     const char* fileName2;
!     int iCaseSensitivity;
  {
!     if (iCaseSensitivity==0)
!         iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
  
!     if (iCaseSensitivity==1)
!         return strcmp(fileName1,fileName2);
  
!     return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
! }
  
+ #ifndef BUFREADCOMMENT
  #define BUFREADCOMMENT (0x400)
+ #endif
  
  /*
    Locate the Central directory of a zipfile (at the end, just before
      the global comment)
  */
! local uLong unzlocal_SearchCentralDir OF((
!     const zlib_filefunc_def* pzlib_filefunc_def,
!     voidpf filestream));
! 
! local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream)
!     const zlib_filefunc_def* pzlib_filefunc_def;
!     voidpf filestream;
  {
!     unsigned char* buf;
!     uLong uSizeFile;
!     uLong uBackRead;
!     uLong uMaxBack=0xffff; /* maximum size of global comment */
!     uLong uPosFound=0;
  
+     if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+         return 0;
  
  
!     uSizeFile = ZTELL(*pzlib_filefunc_def,filestream);
  
!     if (uMaxBack>uSizeFile)
!         uMaxBack = uSizeFile;
! 
!     buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
!     if (buf==NULL)
!         return 0;
! 
!     uBackRead = 4;
!     while (uBackRead<uMaxBack)
!     {
!         uLong uReadSize,uReadPos ;
!         int i;
!         if (uBackRead+BUFREADCOMMENT>uMaxBack)
!             uBackRead = uMaxBack;
!         else
!             uBackRead+=BUFREADCOMMENT;
!         uReadPos = uSizeFile-uBackRead ;
! 
!         uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
                       (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
!         if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
!             break;
  
!         if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
!             break;
  
!         for (i=(int)uReadSize-3; (i--)>0;)
!             if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
!                 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
!             {
!                 uPosFound = uReadPos+i;
!                 break;
!             }
  
!         if (uPosFound!=0)
!             break;
!     }
!     TRYFREE(buf);
!     return uPosFound;
  }
  
  /*
    Open a Zip file. path contain the full pathname (by example,
!      on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer
!      "zlib/zlib114.zip".
!      If the zipfile cannot be opened (file doesn't exist or in not valid), the
!        return value is NULL.
       Else, the return value is a unzFile Handle, usable with other function
!        of this unzip package.
  */
! extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def)
!     const char *path;
!     zlib_filefunc_def* pzlib_filefunc_def;
  {
!     unz_s us;
!     unz_s *s;
!     uLong central_pos,uL;
  
!     uLong number_disk;          /* number of the current dist, used for
!                                    spaning ZIP, unsupported, always 0*/
!     uLong number_disk_with_CD;  /* number the the disk with central dir, used
!                                    for spaning ZIP, unsupported, always 0*/
!     uLong number_entry_CD;      /* total number of entries in
!                                    the central dir
!                                    (same than number_entry on nospan) */
  
!     int err=UNZ_OK;
  
      if (unz_copyright[0]!=' ')
          return NULL;
  
!     if (pzlib_filefunc_def==NULL)
!         fill_fopen_filefunc(&us.z_filefunc);
!     else
!         us.z_filefunc = *pzlib_filefunc_def;
  
!     us.filestream= (*(us.z_filefunc.zopen_file))(us.z_filefunc.opaque,
!                                                  path,
!                                                  ZLIB_FILEFUNC_MODE_READ |
!                                                  ZLIB_FILEFUNC_MODE_EXISTING);
!     if (us.filestream==NULL)
!         return NULL;
  
!     central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream);
!     if (central_pos==0)
!         err=UNZ_ERRNO;
  
!     if (ZSEEK(us.z_filefunc, us.filestream,
!                                       central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
!         err=UNZ_ERRNO;
  
!     /* the signature, already checked */
!     if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
!         err=UNZ_ERRNO;
  
!     /* number of this disk */
!     if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
!         err=UNZ_ERRNO;
  
!     /* number of the disk with the start of the central directory */
!     if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
!         err=UNZ_ERRNO;
  
!     /* total number of entries in the central dir on this disk */
!     if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)
!         err=UNZ_ERRNO;
  
!     /* total number of entries in the central dir */
!     if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if ((number_entry_CD!=us.gi.number_entry) ||
!         (number_disk_with_CD!=0) ||
!         (number_disk!=0))
!         err=UNZ_BADZIPFILE;
  
!     /* size of the central directory */
!     if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)
!         err=UNZ_ERRNO;
  
!     /* offset of start of central directory with respect to the
!           starting disk number */
!     if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)
!         err=UNZ_ERRNO;
  
!     /* zipfile comment length */
!     if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if ((central_pos<us.offset_central_dir+us.size_central_dir) &&
!         (err==UNZ_OK))
!         err=UNZ_BADZIPFILE;
  
!     if (err!=UNZ_OK)
!     {
!         ZCLOSE(us.z_filefunc, us.filestream);
!         return NULL;
!     }
! 
!     us.byte_before_the_zipfile = central_pos -
!                             (us.offset_central_dir+us.size_central_dir);
!     us.central_pos = central_pos;
      us.pfile_in_zip_read = NULL;
!     us.encrypted = 0;
  
! 
!     s=(unz_s*)ALLOC(sizeof(unz_s));
!     *s=us;
!     unzGoToFirstFile((unzFile)s);
!     return (unzFile)s;
  }
  
  
+ extern unzFile ZEXPORT unzOpen (path)
+     const char *path;
+ {
+     return unzOpen2(path, NULL);
+ }
+ 
  /*
    Close a ZipFile opened with unzipOpen.
    If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
      these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
    return UNZ_OK if there is no problem. */
  extern int ZEXPORT unzClose (file)
!     unzFile file;
  {
!     unz_s* s;
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
  
      if (s->pfile_in_zip_read!=NULL)
          unzCloseCurrentFile(file);
  
!     ZCLOSE(s->z_filefunc, s->filestream);
!     TRYFREE(s);
!     return UNZ_OK;
  }
  
  
*************** extern int ZEXPORT unzClose (file)
*** 460,474 ****
    No preparation of the structure is needed
    return UNZ_OK if there is no problem. */
  extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info)
! 	unzFile file;
! 	unz_global_info *pglobal_info;
  {
! 	unz_s* s;
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
! 	*pglobal_info=s->gi;
! 	return UNZ_OK;
  }
  
  
--- 530,544 ----
    No preparation of the structure is needed
    return UNZ_OK if there is no problem. */
  extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info)
!     unzFile file;
!     unz_global_info *pglobal_info;
  {
!     unz_s* s;
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
!     *pglobal_info=s->gi;
!     return UNZ_OK;
  }
  
  
*************** local void unzlocal_DosDateToTmuDate (ul
*** 495,508 ****
  */
  local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file,
                                                    unz_file_info *pfile_info,
!                                                   unz_file_info_internal 
                                                    *pfile_info_internal,
                                                    char *szFileName,
! 												  uLong fileNameBufferSize,
                                                    void *extraField,
! 												  uLong extraFieldBufferSize,
                                                    char *szComment,
! 												  uLong commentBufferSize));
  
  local int unzlocal_GetCurrentFileInfoInternal (file,
                                                pfile_info,
--- 565,578 ----
  */
  local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file,
                                                    unz_file_info *pfile_info,
!                                                   unz_file_info_internal
                                                    *pfile_info_internal,
                                                    char *szFileName,
!                                                   uLong fileNameBufferSize,
                                                    void *extraField,
!                                                   uLong extraFieldBufferSize,
                                                    char *szComment,
!                                                   uLong commentBufferSize));
  
  local int unzlocal_GetCurrentFileInfoInternal (file,
                                                pfile_info,
*************** local int unzlocal_GetCurrentFileInfoInt
*** 510,665 ****
                                                szFileName, fileNameBufferSize,
                                                extraField, extraFieldBufferSize,
                                                szComment,  commentBufferSize)
! 	unzFile file;
! 	unz_file_info *pfile_info;
! 	unz_file_info_internal *pfile_info_internal;
! 	char *szFileName;
! 	uLong fileNameBufferSize;
! 	void *extraField;
! 	uLong extraFieldBufferSize;
! 	char *szComment;
! 	uLong commentBufferSize;
  {
! 	unz_s* s;
! 	unz_file_info file_info;
! 	unz_file_info_internal file_info_internal;
! 	int err=UNZ_OK;
! 	uLong uMagic;
! 	long lSeek=0;
  
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
! 	if (fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0)
! 		err=UNZ_ERRNO;
  
  
! 	/* we check the magic */
! 	if (err==UNZ_OK)
! 		if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
! 			err=UNZ_ERRNO;
! 		else if (uMagic!=0x02014b50)
! 			err=UNZ_BADZIPFILE;
  
! 	if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getShort(s->file,&file_info.version_needed) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getShort(s->file,&file_info.flag) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getShort(s->file,&file_info.compression_method) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getLong(s->file,&file_info.dosDate) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
      unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
  
! 	if (unzlocal_getLong(s->file,&file_info.crc) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getLong(s->file,&file_info.compressed_size) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getLong(s->file,&file_info.uncompressed_size) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getShort(s->file,&file_info.size_filename) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getShort(s->file,&file_info.size_file_extra) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getShort(s->file,&file_info.size_file_comment) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getShort(s->file,&file_info.disk_num_start) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getShort(s->file,&file_info.internal_fa) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getLong(s->file,&file_info.external_fa) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getLong(s->file,&file_info_internal.offset_curfile) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	lSeek+=file_info.size_filename;
! 	if ((err==UNZ_OK) && (szFileName!=NULL))
! 	{
! 		uLong uSizeRead ;
! 		if (file_info.size_filename<fileNameBufferSize)
! 		{
! 			*(szFileName+file_info.size_filename)='\0';
! 			uSizeRead = file_info.size_filename;
! 		}
! 		else
! 			uSizeRead = fileNameBufferSize;
  
! 		if ((file_info.size_filename>0) && (fileNameBufferSize>0))
! 			if (fread(szFileName,(uInt)uSizeRead,1,s->file)!=1)
! 				err=UNZ_ERRNO;
! 		lSeek -= uSizeRead;
! 	}
  
- 	
- 	if ((err==UNZ_OK) && (extraField!=NULL))
- 	{
- 		uLong uSizeRead ;
- 		if (file_info.size_file_extra<extraFieldBufferSize)
- 			uSizeRead = file_info.size_file_extra;
- 		else
- 			uSizeRead = extraFieldBufferSize;
  
! 		if (lSeek!=0)
! 			if (fseek(s->file,lSeek,SEEK_CUR)==0)
! 				lSeek=0;
! 			else
! 				err=UNZ_ERRNO;
! 		if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
! 			if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1)
! 				err=UNZ_ERRNO;
! 		lSeek += file_info.size_file_extra - uSizeRead;
! 	}
! 	else
! 		lSeek+=file_info.size_file_extra; 
  
! 	
! 	if ((err==UNZ_OK) && (szComment!=NULL))
! 	{
! 		uLong uSizeRead ;
! 		if (file_info.size_file_comment<commentBufferSize)
! 		{
! 			*(szComment+file_info.size_file_comment)='\0';
! 			uSizeRead = file_info.size_file_comment;
! 		}
! 		else
! 			uSizeRead = commentBufferSize;
  
- 		if (lSeek!=0)
- 			if (fseek(s->file,lSeek,SEEK_CUR)==0)
- 				lSeek=0;
- 			else
- 				err=UNZ_ERRNO;
- 		if ((file_info.size_file_comment>0) && (commentBufferSize>0))
- 			if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1)
- 				err=UNZ_ERRNO;
- 		lSeek+=file_info.size_file_comment - uSizeRead;
- 	}
- 	else
- 		lSeek+=file_info.size_file_comment;
  
! 	if ((err==UNZ_OK) && (pfile_info!=NULL))
! 		*pfile_info=file_info;
  
! 	if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
! 		*pfile_info_internal=file_info_internal;
  
! 	return err;
  }
  
  
--- 580,737 ----
                                                szFileName, fileNameBufferSize,
                                                extraField, extraFieldBufferSize,
                                                szComment,  commentBufferSize)
!     unzFile file;
!     unz_file_info *pfile_info;
!     unz_file_info_internal *pfile_info_internal;
!     char *szFileName;
!     uLong fileNameBufferSize;
!     void *extraField;
!     uLong extraFieldBufferSize;
!     char *szComment;
!     uLong commentBufferSize;
  {
!     unz_s* s;
!     unz_file_info file_info;
!     unz_file_info_internal file_info_internal;
!     int err=UNZ_OK;
!     uLong uMagic;
!     long lSeek=0;
  
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
!     if (ZSEEK(s->z_filefunc, s->filestream,
!               s->pos_in_central_dir+s->byte_before_the_zipfile,
!               ZLIB_FILEFUNC_SEEK_SET)!=0)
!         err=UNZ_ERRNO;
  
  
!     /* we check the magic */
!     if (err==UNZ_OK)
!         if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
!             err=UNZ_ERRNO;
!         else if (uMagic!=0x02014b50)
!             err=UNZ_BADZIPFILE;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)
!         err=UNZ_ERRNO;
  
      unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     lSeek+=file_info.size_filename;
!     if ((err==UNZ_OK) && (szFileName!=NULL))
!     {
!         uLong uSizeRead ;
!         if (file_info.size_filename<fileNameBufferSize)
!         {
!             *(szFileName+file_info.size_filename)='\0';
!             uSizeRead = file_info.size_filename;
!         }
!         else
!             uSizeRead = fileNameBufferSize;
  
!         if ((file_info.size_filename>0) && (fileNameBufferSize>0))
!             if (ZREAD(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)
!                 err=UNZ_ERRNO;
!         lSeek -= uSizeRead;
!     }
  
  
!     if ((err==UNZ_OK) && (extraField!=NULL))
!     {
!         uLong uSizeRead ;
!         if (file_info.size_file_extra<extraFieldBufferSize)
!             uSizeRead = file_info.size_file_extra;
!         else
!             uSizeRead = extraFieldBufferSize;
  
!         if (lSeek!=0)
!             if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
!                 lSeek=0;
!             else
!                 err=UNZ_ERRNO;
!         if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
!             if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead)
!                 err=UNZ_ERRNO;
!         lSeek += file_info.size_file_extra - uSizeRead;
!     }
!     else
!         lSeek+=file_info.size_file_extra;
  
  
!     if ((err==UNZ_OK) && (szComment!=NULL))
!     {
!         uLong uSizeRead ;
!         if (file_info.size_file_comment<commentBufferSize)
!         {
!             *(szComment+file_info.size_file_comment)='\0';
!             uSizeRead = file_info.size_file_comment;
!         }
!         else
!             uSizeRead = commentBufferSize;
  
!         if (lSeek!=0)
!             if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
!                 lSeek=0;
!             else
!                 err=UNZ_ERRNO;
!         if ((file_info.size_file_comment>0) && (commentBufferSize>0))
!             if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
!                 err=UNZ_ERRNO;
!         lSeek+=file_info.size_file_comment - uSizeRead;
!     }
!     else
!         lSeek+=file_info.size_file_comment;
  
!     if ((err==UNZ_OK) && (pfile_info!=NULL))
!         *pfile_info=file_info;
! 
!     if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
!         *pfile_info_internal=file_info_internal;
! 
!     return err;
  }
  
  
*************** local int unzlocal_GetCurrentFileInfoInt
*** 670,692 ****
    return UNZ_OK if there is no problem.
  */
  extern int ZEXPORT unzGetCurrentFileInfo (file,
!                                                   pfile_info,
!                                                   szFileName, fileNameBufferSize,
!                                                   extraField, extraFieldBufferSize,
!                                                   szComment,  commentBufferSize)
! 	unzFile file;
! 	unz_file_info *pfile_info;
! 	char *szFileName;
! 	uLong fileNameBufferSize;
! 	void *extraField;
! 	uLong extraFieldBufferSize;
! 	char *szComment;
! 	uLong commentBufferSize;
  {
! 	return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL,
! 												szFileName,fileNameBufferSize,
! 												extraField,extraFieldBufferSize,
! 												szComment,commentBufferSize);
  }
  
  /*
--- 742,764 ----
    return UNZ_OK if there is no problem.
  */
  extern int ZEXPORT unzGetCurrentFileInfo (file,
!                                           pfile_info,
!                                           szFileName, fileNameBufferSize,
!                                           extraField, extraFieldBufferSize,
!                                           szComment,  commentBufferSize)
!     unzFile file;
!     unz_file_info *pfile_info;
!     char *szFileName;
!     uLong fileNameBufferSize;
!     void *extraField;
!     uLong extraFieldBufferSize;
!     char *szComment;
!     uLong commentBufferSize;
  {
!     return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL,
!                                                 szFileName,fileNameBufferSize,
!                                                 extraField,extraFieldBufferSize,
!                                                 szComment,commentBufferSize);
  }
  
  /*
*************** extern int ZEXPORT unzGetCurrentFileInfo
*** 694,743 ****
    return UNZ_OK if there is no problem
  */
  extern int ZEXPORT unzGoToFirstFile (file)
! 	unzFile file;
  {
! 	int err=UNZ_OK;
! 	unz_s* s;
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
! 	s->pos_in_central_dir=s->offset_central_dir;
! 	s->num_file=0;
! 	err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
! 											 &s->cur_file_info_internal,
! 											 NULL,0,NULL,0,NULL,0);
! 	s->current_file_ok = (err == UNZ_OK);
! 	return err;
  }
  
- 
  /*
    Set the current file of the zipfile to the next file.
    return UNZ_OK if there is no problem
    return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
  */
  extern int ZEXPORT unzGoToNextFile (file)
! 	unzFile file;
  {
! 	unz_s* s;	
! 	int err;
  
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
! 	if (!s->current_file_ok)
! 		return UNZ_END_OF_LIST_OF_FILE;
! 	if (s->num_file+1==s->gi.number_entry)
! 		return UNZ_END_OF_LIST_OF_FILE;
  
! 	s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
! 			s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
! 	s->num_file++;
! 	err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
! 											   &s->cur_file_info_internal,
! 											   NULL,0,NULL,0,NULL,0);
! 	s->current_file_ok = (err == UNZ_OK);
! 	return err;
  }
  
  
--- 766,814 ----
    return UNZ_OK if there is no problem
  */
  extern int ZEXPORT unzGoToFirstFile (file)
!     unzFile file;
  {
!     int err=UNZ_OK;
!     unz_s* s;
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
!     s->pos_in_central_dir=s->offset_central_dir;
!     s->num_file=0;
!     err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
!                                              &s->cur_file_info_internal,
!                                              NULL,0,NULL,0,NULL,0);
!     s->current_file_ok = (err == UNZ_OK);
!     return err;
  }
  
  /*
    Set the current file of the zipfile to the next file.
    return UNZ_OK if there is no problem
    return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
  */
  extern int ZEXPORT unzGoToNextFile (file)
!     unzFile file;
  {
!     unz_s* s;
!     int err;
  
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
!     if (!s->current_file_ok)
!         return UNZ_END_OF_LIST_OF_FILE;
!     if (s->num_file+1==s->gi.number_entry)
!         return UNZ_END_OF_LIST_OF_FILE;
  
!     s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
!             s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
!     s->num_file++;
!     err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
!                                                &s->cur_file_info_internal,
!                                                NULL,0,NULL,0,NULL,0);
!     s->current_file_ok = (err == UNZ_OK);
!     return err;
  }
  
  
*************** extern int ZEXPORT unzGoToNextFile (file
*** 750,801 ****
    UNZ_END_OF_LIST_OF_FILE if the file is not found
  */
  extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity)
! 	unzFile file;
! 	const char *szFileName;
! 	int iCaseSensitivity;
  {
! 	unz_s* s;	
! 	int err;
  
! 	
! 	uLong num_fileSaved;
! 	uLong pos_in_central_dirSaved;
  
  
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
  
      if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
          return UNZ_PARAMERROR;
  
! 	s=(unz_s*)file;
! 	if (!s->current_file_ok)
! 		return UNZ_END_OF_LIST_OF_FILE;
  
! 	num_fileSaved = s->num_file;
! 	pos_in_central_dirSaved = s->pos_in_central_dir;
  
! 	err = unzGoToFirstFile(file);
  
! 	while (err == UNZ_OK)
! 	{
! 		char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
! 		unzGetCurrentFileInfo(file,NULL,
! 								szCurrentFileName,sizeof(szCurrentFileName)-1,
! 								NULL,0,NULL,0);
! 		if (unzStringFileNameCompare(szCurrentFileName,
! 										szFileName,iCaseSensitivity)==0)
! 			return UNZ_OK;
! 		err = unzGoToNextFile(file);
! 	}
  
! 	s->num_file = num_fileSaved ;
! 	s->pos_in_central_dir = pos_in_central_dirSaved ;
! 	return err;
  }
  
  
  /*
    Read the local header of the current zipfile
    Check the coherency of the local header and info in the end of central
          directory about this file
--- 821,952 ----
    UNZ_END_OF_LIST_OF_FILE if the file is not found
  */
  extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity)
!     unzFile file;
!     const char *szFileName;
!     int iCaseSensitivity;
  {
!     unz_s* s;
!     int err;
  
!     /* We remember the 'current' position in the file so that we can jump
!      * back there if we fail.
!      */
!     unz_file_info cur_file_infoSaved;
!     unz_file_info_internal cur_file_info_internalSaved;
!     uLong num_fileSaved;
!     uLong pos_in_central_dirSaved;
  
  
!     if (file==NULL)
!         return UNZ_PARAMERROR;
  
      if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
          return UNZ_PARAMERROR;
  
!     s=(unz_s*)file;
!     if (!s->current_file_ok)
!         return UNZ_END_OF_LIST_OF_FILE;
  
!     /* Save the current state */
!     num_fileSaved = s->num_file;
!     pos_in_central_dirSaved = s->pos_in_central_dir;
!     cur_file_infoSaved = s->cur_file_info;
!     cur_file_info_internalSaved = s->cur_file_info_internal;
  
!     err = unzGoToFirstFile(file);
  
!     while (err == UNZ_OK)
!     {
!         char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
!         err = unzGetCurrentFileInfo(file,NULL,
!                                     szCurrentFileName,sizeof(szCurrentFileName)-1,
!                                     NULL,0,NULL,0);
!         if (err == UNZ_OK)
!         {
!             if (unzStringFileNameCompare(szCurrentFileName,
!                                             szFileName,iCaseSensitivity)==0)
!                 return UNZ_OK;
!             err = unzGoToNextFile(file);
!         }
!     }
  
!     /* We failed, so restore the state of the 'current file' to where we
!      * were.
!      */
!     s->num_file = num_fileSaved ;
!     s->pos_in_central_dir = pos_in_central_dirSaved ;
!     s->cur_file_info = cur_file_infoSaved;
!     s->cur_file_info_internal = cur_file_info_internalSaved;
!     return err;
  }
  
  
  /*
+ ///////////////////////////////////////////
+ // Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)
+ // I need random access
+ //
+ // Further optimization could be realized by adding an ability
+ // to cache the directory in memory. The goal being a single
+ // comprehensive file read to put the file I need in a memory.
+ */
+ 
+ /*
+ typedef struct unz_file_pos_s
+ {
+     uLong pos_in_zip_directory;   // offset in file
+     uLong num_of_file;            // # of file
+ } unz_file_pos;
+ */
+ 
+ extern int ZEXPORT unzGetFilePos(file, file_pos)
+     unzFile file;
+     unz_file_pos* file_pos;
+ {
+     unz_s* s;
+ 
+     if (file==NULL || file_pos==NULL)
+         return UNZ_PARAMERROR;
+     s=(unz_s*)file;
+     if (!s->current_file_ok)
+         return UNZ_END_OF_LIST_OF_FILE;
+ 
+     file_pos->pos_in_zip_directory  = s->pos_in_central_dir;
+     file_pos->num_of_file           = s->num_file;
+ 
+     return UNZ_OK;
+ }
+ 
+ extern int ZEXPORT unzGoToFilePos(file, file_pos)
+     unzFile file;
+     unz_file_pos* file_pos;
+ {
+     unz_s* s;
+     int err;
+ 
+     if (file==NULL || file_pos==NULL)
+         return UNZ_PARAMERROR;
+     s=(unz_s*)file;
+ 
+     /* jump to the right spot */
+     s->pos_in_central_dir = file_pos->pos_in_zip_directory;
+     s->num_file           = file_pos->num_of_file;
+ 
+     /* set the current file */
+     err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+                                                &s->cur_file_info_internal,
+                                                NULL,0,NULL,0,NULL,0);
+     /* return results */
+     s->current_file_ok = (err == UNZ_OK);
+     return err;
+ }
+ 
+ /*
+ // Unzip Helper Functions - should be here?
+ ///////////////////////////////////////////
+ */
+ 
+ /*
    Read the local header of the current zipfile
    Check the coherency of the local header and info in the end of central
          directory about this file
*************** extern int ZEXPORT unzLocateFile (file, 
*** 803,987 ****
          (filename and size of extra field data)
  */
  local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar,
! 													poffset_local_extrafield,
! 													psize_local_extrafield)
! 	unz_s* s;
! 	uInt* piSizeVar;
! 	uLong *poffset_local_extrafield;
! 	uInt  *psize_local_extrafield;
  {
! 	uLong uMagic,uData,uFlags;
! 	uLong size_filename;
! 	uLong size_extra_field;
! 	int err=UNZ_OK;
  
! 	*piSizeVar = 0;
! 	*poffset_local_extrafield = 0;
! 	*psize_local_extrafield = 0;
  
! 	if (fseek(s->file,s->cur_file_info_internal.offset_curfile +
! 								s->byte_before_the_zipfile,SEEK_SET)!=0)
! 		return UNZ_ERRNO;
  
  
! 	if (err==UNZ_OK)
! 		if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
! 			err=UNZ_ERRNO;
! 		else if (uMagic!=0x04034b50)
! 			err=UNZ_BADZIPFILE;
  
! 	if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
! 		err=UNZ_ERRNO;
  /*
! 	else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
! 		err=UNZ_BADZIPFILE;
  */
! 	if (unzlocal_getShort(s->file,&uFlags) != UNZ_OK)
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
! 		err=UNZ_ERRNO;
! 	else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
! 		err=UNZ_BADZIPFILE;
  
      if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
                           (s->cur_file_info.compression_method!=Z_DEFLATED))
          err=UNZ_BADZIPFILE;
  
! 	if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* date/time */
! 		err=UNZ_ERRNO;
  
! 	if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* crc */
! 		err=UNZ_ERRNO;
! 	else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) &&
! 		                      ((uFlags & 8)==0))
! 		err=UNZ_BADZIPFILE;
  
! 	if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size compr */
! 		err=UNZ_ERRNO;
! 	else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) &&
! 							  ((uFlags & 8)==0))
! 		err=UNZ_BADZIPFILE;
  
! 	if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size uncompr */
! 		err=UNZ_ERRNO;
! 	else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && 
! 							  ((uFlags & 8)==0))
! 		err=UNZ_BADZIPFILE;
  
  
! 	if (unzlocal_getShort(s->file,&size_filename) != UNZ_OK)
! 		err=UNZ_ERRNO;
! 	else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
! 		err=UNZ_BADZIPFILE;
  
! 	*piSizeVar += (uInt)size_filename;
  
! 	if (unzlocal_getShort(s->file,&size_extra_field) != UNZ_OK)
! 		err=UNZ_ERRNO;
! 	*poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
! 									SIZEZIPLOCALHEADER + size_filename;
! 	*psize_local_extrafield = (uInt)size_extra_field;
  
! 	*piSizeVar += (uInt)size_extra_field;
  
! 	return err;
  }
! 												
  /*
    Open for reading data the current file in the zipfile.
    If there is no error and the file is opened, the return value is UNZ_OK.
  */
! extern int ZEXPORT unzOpenCurrentFile (file)
! 	unzFile file;
  {
! 	int err=UNZ_OK;
! 	int Store;
! 	uInt iSizeVar;
! 	unz_s* s;
! 	file_in_zip_read_info_s* pfile_in_zip_read_info;
! 	uLong offset_local_extrafield;  /* offset of the local extra field */
! 	uInt  size_local_extrafield;    /* size of the local extra field */
  
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
! 	if (!s->current_file_ok)
! 		return UNZ_PARAMERROR;
  
      if (s->pfile_in_zip_read != NULL)
          unzCloseCurrentFile(file);
  
! 	if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar,
! 				&offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
! 		return UNZ_BADZIPFILE;
  
! 	pfile_in_zip_read_info = (file_in_zip_read_info_s*)
! 									    ALLOC(sizeof(file_in_zip_read_info_s));
! 	if (pfile_in_zip_read_info==NULL)
! 		return UNZ_INTERNALERROR;
  
! 	pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
! 	pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
! 	pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
! 	pfile_in_zip_read_info->pos_local_extrafield=0;
  
! 	if (pfile_in_zip_read_info->read_buffer==NULL)
! 	{
! 		TRYFREE(pfile_in_zip_read_info);
! 		return UNZ_INTERNALERROR;
! 	}
  
! 	pfile_in_zip_read_info->stream_initialised=0;
! 	
! 	if ((s->cur_file_info.compression_method!=0) &&
          (s->cur_file_info.compression_method!=Z_DEFLATED))
! 		err=UNZ_BADZIPFILE;
! 	Store = s->cur_file_info.compression_method==0;
  
! 	pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
! 	pfile_in_zip_read_info->crc32=0;
! 	pfile_in_zip_read_info->compression_method =
              s->cur_file_info.compression_method;
! 	pfile_in_zip_read_info->file=s->file;
! 	pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
  
      pfile_in_zip_read_info->stream.total_out = 0;
  
! 	if (!Store)
! 	{
! 	  pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
! 	  pfile_in_zip_read_info->stream.zfree = (free_func)0;
! 	  pfile_in_zip_read_info->stream.opaque = (voidpf)0; 
!       
! 	  err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
! 	  if (err == Z_OK)
! 	    pfile_in_zip_read_info->stream_initialised=1;
          /* windowBits is passed < 0 to tell that there is no zlib header.
           * Note that in this case inflate *requires* an extra "dummy" byte
           * after the compressed stream in order to complete decompression and
!          * return Z_STREAM_END. 
!          * In unzip, i don't wait absolutely Z_STREAM_END because I known the 
           * size of both compressed and uncompressed data
           */
! 	}
! 	pfile_in_zip_read_info->rest_read_compressed = 
              s->cur_file_info.compressed_size ;
! 	pfile_in_zip_read_info->rest_read_uncompressed = 
              s->cur_file_info.uncompressed_size ;
  
! 	
! 	pfile_in_zip_read_info->pos_in_zipfile = 
!             s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + 
! 			  iSizeVar;
! 	
! 	pfile_in_zip_read_info->stream.avail_in = (uInt)0;
  
  
- 	s->pfile_in_zip_read = pfile_in_zip_read_info;
      return UNZ_OK;
  }
  
  
  /*
    Read bytes from the current file.
--- 954,1211 ----
          (filename and size of extra field data)
  */
  local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar,
!                                                     poffset_local_extrafield,
!                                                     psize_local_extrafield)
!     unz_s* s;
!     uInt* piSizeVar;
!     uLong *poffset_local_extrafield;
!     uInt  *psize_local_extrafield;
  {
!     uLong uMagic,uData,uFlags;
!     uLong size_filename;
!     uLong size_extra_field;
!     int err=UNZ_OK;
  
!     *piSizeVar = 0;
!     *poffset_local_extrafield = 0;
!     *psize_local_extrafield = 0;
  
!     if (ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
!                                 s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
!         return UNZ_ERRNO;
  
  
!     if (err==UNZ_OK)
!         if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
!             err=UNZ_ERRNO;
!         else if (uMagic!=0x04034b50)
!             err=UNZ_BADZIPFILE;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
!         err=UNZ_ERRNO;
  /*
!     else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
!         err=UNZ_BADZIPFILE;
  */
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
!         err=UNZ_ERRNO;
!     else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
!         err=UNZ_BADZIPFILE;
  
      if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
                           (s->cur_file_info.compression_method!=Z_DEFLATED))
          err=UNZ_BADZIPFILE;
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */
!         err=UNZ_ERRNO;
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */
!         err=UNZ_ERRNO;
!     else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) &&
!                               ((uFlags & 8)==0))
!         err=UNZ_BADZIPFILE;
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */
!         err=UNZ_ERRNO;
!     else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) &&
!                               ((uFlags & 8)==0))
!         err=UNZ_BADZIPFILE;
  
!     if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */
!         err=UNZ_ERRNO;
!     else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) &&
!                               ((uFlags & 8)==0))
!         err=UNZ_BADZIPFILE;
  
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)
!         err=UNZ_ERRNO;
!     else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
!         err=UNZ_BADZIPFILE;
  
!     *piSizeVar += (uInt)size_filename;
  
!     if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)
!         err=UNZ_ERRNO;
!     *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
!                                     SIZEZIPLOCALHEADER + size_filename;
!     *psize_local_extrafield = (uInt)size_extra_field;
  
!     *piSizeVar += (uInt)size_extra_field;
  
!     return err;
  }
! 
  /*
    Open for reading data the current file in the zipfile.
    If there is no error and the file is opened, the return value is UNZ_OK.
  */
! extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password)
!     unzFile file;
!     int* method;
!     int* level;
!     int raw;
!     const char* password;
  {
!     int err=UNZ_OK;
!     uInt iSizeVar;
!     unz_s* s;
!     file_in_zip_read_info_s* pfile_in_zip_read_info;
!     uLong offset_local_extrafield;  /* offset of the local extra field */
!     uInt  size_local_extrafield;    /* size of the local extra field */
! #    ifndef NOUNCRYPT
!     char source[12];
! #    else
!     if (password != NULL)
!         return UNZ_PARAMERROR;
! #    endif
  
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
!     if (!s->current_file_ok)
!         return UNZ_PARAMERROR;
  
      if (s->pfile_in_zip_read != NULL)
          unzCloseCurrentFile(file);
  
!     if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar,
!                 &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
!         return UNZ_BADZIPFILE;
  
!     pfile_in_zip_read_info = (file_in_zip_read_info_s*)
!                                         ALLOC(sizeof(file_in_zip_read_info_s));
!     if (pfile_in_zip_read_info==NULL)
!         return UNZ_INTERNALERROR;
  
!     pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
!     pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
!     pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
!     pfile_in_zip_read_info->pos_local_extrafield=0;
!     pfile_in_zip_read_info->raw=raw;
  
!     if (pfile_in_zip_read_info->read_buffer==NULL)
!     {
!         TRYFREE(pfile_in_zip_read_info);
!         return UNZ_INTERNALERROR;
!     }
  
!     pfile_in_zip_read_info->stream_initialised=0;
! 
!     if (method!=NULL)
!         *method = (int)s->cur_file_info.compression_method;
! 
!     if (level!=NULL)
!     {
!         *level = 6;
!         switch (s->cur_file_info.flag & 0x06)
!         {
!           case 6 : *level = 1; break;
!           case 4 : *level = 2; break;
!           case 2 : *level = 9; break;
!         }
!     }
! 
!     if ((s->cur_file_info.compression_method!=0) &&
          (s->cur_file_info.compression_method!=Z_DEFLATED))
!         err=UNZ_BADZIPFILE;
  
!     pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
!     pfile_in_zip_read_info->crc32=0;
!     pfile_in_zip_read_info->compression_method =
              s->cur_file_info.compression_method;
!     pfile_in_zip_read_info->filestream=s->filestream;
!     pfile_in_zip_read_info->z_filefunc=s->z_filefunc;
!     pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
  
      pfile_in_zip_read_info->stream.total_out = 0;
  
!     if ((s->cur_file_info.compression_method==Z_DEFLATED) &&
!         (!raw))
!     {
!       pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
!       pfile_in_zip_read_info->stream.zfree = (free_func)0;
!       pfile_in_zip_read_info->stream.opaque = (voidpf)0;
!       pfile_in_zip_read_info->stream.next_in = (voidpf)0;
!       pfile_in_zip_read_info->stream.avail_in = 0;
! 
!       err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
!       if (err == Z_OK)
!         pfile_in_zip_read_info->stream_initialised=1;
!       else
!         return err;
          /* windowBits is passed < 0 to tell that there is no zlib header.
           * Note that in this case inflate *requires* an extra "dummy" byte
           * after the compressed stream in order to complete decompression and
!          * return Z_STREAM_END.
!          * In unzip, i don't wait absolutely Z_STREAM_END because I known the
           * size of both compressed and uncompressed data
           */
!     }
!     pfile_in_zip_read_info->rest_read_compressed =
              s->cur_file_info.compressed_size ;
!     pfile_in_zip_read_info->rest_read_uncompressed =
              s->cur_file_info.uncompressed_size ;
  
! 
!     pfile_in_zip_read_info->pos_in_zipfile =
!             s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
!               iSizeVar;
! 
!     pfile_in_zip_read_info->stream.avail_in = (uInt)0;
! 
!     s->pfile_in_zip_read = pfile_in_zip_read_info;
! 
! #    ifndef NOUNCRYPT
!     if (password != NULL)
!     {
!         int i;
!         s->pcrc_32_tab = get_crc_table();
!         init_keys(password,s->keys,s->pcrc_32_tab);
!         if (ZSEEK(s->z_filefunc, s->filestream,
!                   s->pfile_in_zip_read->pos_in_zipfile +
!                      s->pfile_in_zip_read->byte_before_the_zipfile,
!                   SEEK_SET)!=0)
!             return UNZ_INTERNALERROR;
!         if(ZREAD(s->z_filefunc, s->filestream,source, 12)<12)
!             return UNZ_INTERNALERROR;
! 
!         for (i = 0; i<12; i++)
!             zdecode(s->keys,s->pcrc_32_tab,source[i]);
! 
!         s->pfile_in_zip_read->pos_in_zipfile+=12;
!         s->encrypted=1;
!     }
! #    endif
  
  
      return UNZ_OK;
  }
  
+ extern int ZEXPORT unzOpenCurrentFile (file)
+     unzFile file;
+ {
+     return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
+ }
+ 
+ extern int ZEXPORT unzOpenCurrentFilePassword (file, password)
+     unzFile file;
+     const char* password;
+ {
+     return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
+ }
+ 
+ extern int ZEXPORT unzOpenCurrentFile2 (file,method,level,raw)
+     unzFile file;
+     int* method;
+     int* level;
+     int raw;
+ {
+     return unzOpenCurrentFile3(file, method, level, raw, NULL);
+ }
  
  /*
    Read bytes from the current file.
*************** extern int ZEXPORT unzOpenCurrentFile (f
*** 994,1119 ****
      (UNZ_ERRNO for IO error, or zLib error for uncompress error)
  */
  extern int ZEXPORT unzReadCurrentFile  (file, buf, len)
! 	unzFile file;
! 	voidp buf;
! 	unsigned len;
  {
! 	int err=UNZ_OK;
! 	uInt iRead = 0;
! 	unz_s* s;
! 	file_in_zip_read_info_s* pfile_in_zip_read_info;
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
! 	if (pfile_in_zip_read_info==NULL)
! 		return UNZ_PARAMERROR;
  
  
! 	if ((pfile_in_zip_read_info->read_buffer == NULL))
! 		return UNZ_END_OF_LIST_OF_FILE;
! 	if (len==0)
! 		return 0;
  
! 	pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;
  
! 	pfile_in_zip_read_info->stream.avail_out = (uInt)len;
! 	
! 	if (len>pfile_in_zip_read_info->rest_read_uncompressed)
! 		pfile_in_zip_read_info->stream.avail_out = 
! 		  (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
  
! 	while (pfile_in_zip_read_info->stream.avail_out>0)
! 	{
! 		if ((pfile_in_zip_read_info->stream.avail_in==0) &&
              (pfile_in_zip_read_info->rest_read_compressed>0))
! 		{
! 			uInt uReadThis = UNZ_BUFSIZE;
! 			if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
! 				uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
! 			if (uReadThis == 0)
! 				return UNZ_EOF;
! 			if (fseek(pfile_in_zip_read_info->file,
!                       pfile_in_zip_read_info->pos_in_zipfile + 
!                          pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0)
! 				return UNZ_ERRNO;
! 			if (fread(pfile_in_zip_read_info->read_buffer,uReadThis,1,
!                          pfile_in_zip_read_info->file)!=1)
! 				return UNZ_ERRNO;
! 			pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
  
! 			pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
! 			
! 			pfile_in_zip_read_info->stream.next_in = 
                  (Bytef*)pfile_in_zip_read_info->read_buffer;
! 			pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
! 		}
  
! 		if (pfile_in_zip_read_info->compression_method==0)
! 		{
! 			uInt uDoCopy,i ;
! 			if (pfile_in_zip_read_info->stream.avail_out < 
                              pfile_in_zip_read_info->stream.avail_in)
! 				uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
! 			else
! 				uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
! 				
! 			for (i=0;i<uDoCopy;i++)
! 				*(pfile_in_zip_read_info->stream.next_out+i) =
                          *(pfile_in_zip_read_info->stream.next_in+i);
! 					
! 			pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
! 								pfile_in_zip_read_info->stream.next_out,
! 								uDoCopy);
! 			pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
! 			pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
! 			pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
! 			pfile_in_zip_read_info->stream.next_out += uDoCopy;
! 			pfile_in_zip_read_info->stream.next_in += uDoCopy;
              pfile_in_zip_read_info->stream.total_out += uDoCopy;
! 			iRead += uDoCopy;
! 		}
! 		else
! 		{
! 			uLong uTotalOutBefore,uTotalOutAfter;
! 			const Bytef *bufBefore;
! 			uLong uOutThis;
! 			int flush=Z_SYNC_FLUSH;
  
! 			uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
! 			bufBefore = pfile_in_zip_read_info->stream.next_out;
  
! 			/*
! 			if ((pfile_in_zip_read_info->rest_read_uncompressed ==
! 			         pfile_in_zip_read_info->stream.avail_out) &&
! 				(pfile_in_zip_read_info->rest_read_compressed == 0))
! 				flush = Z_FINISH;
! 			*/
! 			err=inflate(&pfile_in_zip_read_info->stream,flush);
  
! 			uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
! 			uOutThis = uTotalOutAfter-uTotalOutBefore;
! 			
! 			pfile_in_zip_read_info->crc32 = 
                  crc32(pfile_in_zip_read_info->crc32,bufBefore,
                          (uInt)(uOutThis));
  
! 			pfile_in_zip_read_info->rest_read_uncompressed -=
                  uOutThis;
  
! 			iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
!             
! 			if (err==Z_STREAM_END)
! 				return (iRead==0) ? UNZ_EOF : iRead;
! 			if (err!=Z_OK) 
! 				break;
! 		}
! 	}
  
! 	if (err==Z_OK)
! 		return iRead;
! 	return err;
  }
  
  
--- 1218,1366 ----
      (UNZ_ERRNO for IO error, or zLib error for uncompress error)
  */
  extern int ZEXPORT unzReadCurrentFile  (file, buf, len)
!     unzFile file;
!     voidp buf;
!     unsigned len;
  {
!     int err=UNZ_OK;
!     uInt iRead = 0;
!     unz_s* s;
!     file_in_zip_read_info_s* pfile_in_zip_read_info;
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
!     if (pfile_in_zip_read_info==NULL)
!         return UNZ_PARAMERROR;
  
  
!     if ((pfile_in_zip_read_info->read_buffer == NULL))
!         return UNZ_END_OF_LIST_OF_FILE;
!     if (len==0)
!         return 0;
  
!     pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;
  
!     pfile_in_zip_read_info->stream.avail_out = (uInt)len;
  
!     if (len>pfile_in_zip_read_info->rest_read_uncompressed)
!         pfile_in_zip_read_info->stream.avail_out =
!           (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
! 
!     while (pfile_in_zip_read_info->stream.avail_out>0)
!     {
!         if ((pfile_in_zip_read_info->stream.avail_in==0) &&
              (pfile_in_zip_read_info->rest_read_compressed>0))
!         {
!             uInt uReadThis = UNZ_BUFSIZE;
!             if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
!                 uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
!             if (uReadThis == 0)
!                 return UNZ_EOF;
!             if (ZSEEK(pfile_in_zip_read_info->z_filefunc,
!                       pfile_in_zip_read_info->filestream,
!                       pfile_in_zip_read_info->pos_in_zipfile +
!                          pfile_in_zip_read_info->byte_before_the_zipfile,
!                          ZLIB_FILEFUNC_SEEK_SET)!=0)
!                 return UNZ_ERRNO;
!             if (ZREAD(pfile_in_zip_read_info->z_filefunc,
!                       pfile_in_zip_read_info->filestream,
!                       pfile_in_zip_read_info->read_buffer,
!                       uReadThis)!=uReadThis)
!                 return UNZ_ERRNO;
  
! 
! #            ifndef NOUNCRYPT
!             if(s->encrypted)
!             {
!                 uInt i;
!                 for(i=0;i<uReadThis;i++)
!                   pfile_in_zip_read_info->read_buffer[i] =
!                       zdecode(s->keys,s->pcrc_32_tab,
!                               pfile_in_zip_read_info->read_buffer[i]);
!             }
! #            endif
! 
! 
!             pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
! 
!             pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
! 
!             pfile_in_zip_read_info->stream.next_in =
                  (Bytef*)pfile_in_zip_read_info->read_buffer;
!             pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
!         }
  
!         if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))
!         {
!             uInt uDoCopy,i ;
! 
!             if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
!                 (pfile_in_zip_read_info->rest_read_compressed == 0))
!                 return (iRead==0) ? UNZ_EOF : iRead;
! 
!             if (pfile_in_zip_read_info->stream.avail_out <
                              pfile_in_zip_read_info->stream.avail_in)
!                 uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
!             else
!                 uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
! 
!             for (i=0;i<uDoCopy;i++)
!                 *(pfile_in_zip_read_info->stream.next_out+i) =
                          *(pfile_in_zip_read_info->stream.next_in+i);
! 
!             pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
!                                 pfile_in_zip_read_info->stream.next_out,
!                                 uDoCopy);
!             pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
!             pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
!             pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
!             pfile_in_zip_read_info->stream.next_out += uDoCopy;
!             pfile_in_zip_read_info->stream.next_in += uDoCopy;
              pfile_in_zip_read_info->stream.total_out += uDoCopy;
!             iRead += uDoCopy;
!         }
!         else
!         {
!             uLong uTotalOutBefore,uTotalOutAfter;
!             const Bytef *bufBefore;
!             uLong uOutThis;
!             int flush=Z_SYNC_FLUSH;
  
!             uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
!             bufBefore = pfile_in_zip_read_info->stream.next_out;
  
!             /*
!             if ((pfile_in_zip_read_info->rest_read_uncompressed ==
!                      pfile_in_zip_read_info->stream.avail_out) &&
!                 (pfile_in_zip_read_info->rest_read_compressed == 0))
!                 flush = Z_FINISH;
!             */
!             err=inflate(&pfile_in_zip_read_info->stream,flush);
  
!             uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
!             uOutThis = uTotalOutAfter-uTotalOutBefore;
! 
!             pfile_in_zip_read_info->crc32 =
                  crc32(pfile_in_zip_read_info->crc32,bufBefore,
                          (uInt)(uOutThis));
  
!             pfile_in_zip_read_info->rest_read_uncompressed -=
                  uOutThis;
  
!             iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
  
!             if (err==Z_STREAM_END)
!                 return (iRead==0) ? UNZ_EOF : iRead;
!             if (err!=Z_OK)
!                 break;
!         }
!     }
! 
!     if (err==Z_OK)
!         return iRead;
!     return err;
  }
  
  
*************** extern int ZEXPORT unzReadCurrentFile  (
*** 1121,1162 ****
    Give the current position in uncompressed data
  */
  extern z_off_t ZEXPORT unztell (file)
! 	unzFile file;
  {
! 	unz_s* s;
! 	file_in_zip_read_info_s* pfile_in_zip_read_info;
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
! 	if (pfile_in_zip_read_info==NULL)
! 		return UNZ_PARAMERROR;
  
! 	return (z_off_t)pfile_in_zip_read_info->stream.total_out;
  }
  
  
  /*
!   return 1 if the end of file was reached, 0 elsewhere 
  */
  extern int ZEXPORT unzeof (file)
! 	unzFile file;
  {
! 	unz_s* s;
! 	file_in_zip_read_info_s* pfile_in_zip_read_info;
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
! 	if (pfile_in_zip_read_info==NULL)
! 		return UNZ_PARAMERROR;
! 	
! 	if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
! 		return 1;
! 	else
! 		return 0;
  }
  
  
--- 1368,1409 ----
    Give the current position in uncompressed data
  */
  extern z_off_t ZEXPORT unztell (file)
!     unzFile file;
  {
!     unz_s* s;
!     file_in_zip_read_info_s* pfile_in_zip_read_info;
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
!     if (pfile_in_zip_read_info==NULL)
!         return UNZ_PARAMERROR;
  
!     return (z_off_t)pfile_in_zip_read_info->stream.total_out;
  }
  
  
  /*
!   return 1 if the end of file was reached, 0 elsewhere
  */
  extern int ZEXPORT unzeof (file)
!     unzFile file;
  {
!     unz_s* s;
!     file_in_zip_read_info_s* pfile_in_zip_read_info;
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
!     if (pfile_in_zip_read_info==NULL)
!         return UNZ_PARAMERROR;
! 
!     if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
!         return 1;
!     else
!         return 0;
  }
  
  
*************** extern int ZEXPORT unzeof (file)
*** 1169,1219 ****
    if buf==NULL, it return the size of the local extra field that can be read
  
    if buf!=NULL, len is the size of the buffer, the extra header is copied in
! 	buf.
!   the return value is the number of bytes copied in buf, or (if <0) 
! 	the error code
  */
  extern int ZEXPORT unzGetLocalExtrafield (file,buf,len)
! 	unzFile file;
! 	voidp buf;
! 	unsigned len;
  {
! 	unz_s* s;
! 	file_in_zip_read_info_s* pfile_in_zip_read_info;
! 	uInt read_now;
! 	uLong size_to_read;
  
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
! 	if (pfile_in_zip_read_info==NULL)
! 		return UNZ_PARAMERROR;
  
! 	size_to_read = (pfile_in_zip_read_info->size_local_extrafield - 
! 				pfile_in_zip_read_info->pos_local_extrafield);
  
! 	if (buf==NULL)
! 		return (int)size_to_read;
! 	
! 	if (len>size_to_read)
! 		read_now = (uInt)size_to_read;
! 	else
! 		read_now = (uInt)len ;
  
! 	if (read_now==0)
! 		return 0;
! 	
! 	if (fseek(pfile_in_zip_read_info->file,
!               pfile_in_zip_read_info->offset_local_extrafield + 
! 			  pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0)
! 		return UNZ_ERRNO;
  
! 	if (fread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1)
! 		return UNZ_ERRNO;
  
! 	return (int)read_now;
  }
  
  /*
--- 1416,1470 ----
    if buf==NULL, it return the size of the local extra field that can be read
  
    if buf!=NULL, len is the size of the buffer, the extra header is copied in
!     buf.
!   the return value is the number of bytes copied in buf, or (if <0)
!     the error code
  */
  extern int ZEXPORT unzGetLocalExtrafield (file,buf,len)
!     unzFile file;
!     voidp buf;
!     unsigned len;
  {
!     unz_s* s;
!     file_in_zip_read_info_s* pfile_in_zip_read_info;
!     uInt read_now;
!     uLong size_to_read;
  
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
!     if (pfile_in_zip_read_info==NULL)
!         return UNZ_PARAMERROR;
  
!     size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
!                 pfile_in_zip_read_info->pos_local_extrafield);
  
!     if (buf==NULL)
!         return (int)size_to_read;
  
!     if (len>size_to_read)
!         read_now = (uInt)size_to_read;
!     else
!         read_now = (uInt)len ;
  
!     if (read_now==0)
!         return 0;
  
!     if (ZSEEK(pfile_in_zip_read_info->z_filefunc,
!               pfile_in_zip_read_info->filestream,
!               pfile_in_zip_read_info->offset_local_extrafield +
!               pfile_in_zip_read_info->pos_local_extrafield,
!               ZLIB_FILEFUNC_SEEK_SET)!=0)
!         return UNZ_ERRNO;
! 
!     if (ZREAD(pfile_in_zip_read_info->z_filefunc,
!               pfile_in_zip_read_info->filestream,
!               buf,size_to_read)!=size_to_read)
!         return UNZ_ERRNO;
! 
!     return (int)read_now;
  }
  
  /*
*************** extern int ZEXPORT unzGetLocalExtrafield
*** 1221,1259 ****
    Return UNZ_CRCERROR if all the file was read but the CRC is not good
  */
  extern int ZEXPORT unzCloseCurrentFile (file)
! 	unzFile file;
  {
! 	int err=UNZ_OK;
  
! 	unz_s* s;
! 	file_in_zip_read_info_s* pfile_in_zip_read_info;
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
! 	if (pfile_in_zip_read_info==NULL)
! 		return UNZ_PARAMERROR;
  
  
! 	if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
! 	{
! 		if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
! 			err=UNZ_CRCERROR;
! 	}
  
  
! 	TRYFREE(pfile_in_zip_read_info->read_buffer);
! 	pfile_in_zip_read_info->read_buffer = NULL;
! 	if (pfile_in_zip_read_info->stream_initialised)
! 		inflateEnd(&pfile_in_zip_read_info->stream);
  
! 	pfile_in_zip_read_info->stream_initialised = 0;
! 	TRYFREE(pfile_in_zip_read_info);
  
      s->pfile_in_zip_read=NULL;
  
! 	return err;
  }
  
  
--- 1472,1511 ----
    Return UNZ_CRCERROR if all the file was read but the CRC is not good
  */
  extern int ZEXPORT unzCloseCurrentFile (file)
!     unzFile file;
  {
!     int err=UNZ_OK;
  
!     unz_s* s;
!     file_in_zip_read_info_s* pfile_in_zip_read_info;
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
      pfile_in_zip_read_info=s->pfile_in_zip_read;
  
!     if (pfile_in_zip_read_info==NULL)
!         return UNZ_PARAMERROR;
  
  
!     if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&
!         (!pfile_in_zip_read_info->raw))
!     {
!         if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
!             err=UNZ_CRCERROR;
!     }
  
  
!     TRYFREE(pfile_in_zip_read_info->read_buffer);
!     pfile_in_zip_read_info->read_buffer = NULL;
!     if (pfile_in_zip_read_info->stream_initialised)
!         inflateEnd(&pfile_in_zip_read_info->stream);
  
!     pfile_in_zip_read_info->stream_initialised = 0;
!     TRYFREE(pfile_in_zip_read_info);
  
      s->pfile_in_zip_read=NULL;
  
!     return err;
  }
  
  
*************** extern int ZEXPORT unzCloseCurrentFile (
*** 1263,1294 ****
    return the number of byte copied or an error code <0
  */
  extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf)
! 	unzFile file;
! 	char *szComment;
! 	uLong uSizeBuf;
  {
! 	int err=UNZ_OK;
! 	unz_s* s;
! 	uLong uReadThis ;
! 	if (file==NULL)
! 		return UNZ_PARAMERROR;
! 	s=(unz_s*)file;
  
! 	uReadThis = uSizeBuf;
! 	if (uReadThis>s->gi.size_comment)
! 		uReadThis = s->gi.size_comment;
  
! 	if (fseek(s->file,s->central_pos+22,SEEK_SET)!=0)
! 		return UNZ_ERRNO;
  
! 	if (uReadThis>0)
      {
        *szComment='\0';
! 	  if (fread(szComment,(uInt)uReadThis,1,s->file)!=1)
! 		return UNZ_ERRNO;
      }
  
! 	if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
! 		*(szComment+s->gi.size_comment)='\0';
! 	return (int)uReadThis;
  }
--- 1515,1546 ----
    return the number of byte copied or an error code <0
  */
  extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf)
!     unzFile file;
!     char *szComment;
!     uLong uSizeBuf;
  {
!     int err=UNZ_OK;
!     unz_s* s;
!     uLong uReadThis ;
!     if (file==NULL)
!         return UNZ_PARAMERROR;
!     s=(unz_s*)file;
  
!     uReadThis = uSizeBuf;
!     if (uReadThis>s->gi.size_comment)
!         uReadThis = s->gi.size_comment;
  
!     if (ZSEEK(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)
!         return UNZ_ERRNO;
  
!     if (uReadThis>0)
      {
        *szComment='\0';
!       if (ZREAD(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
!         return UNZ_ERRNO;
      }
  
!     if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
!         *(szComment+s->gi.size_comment)='\0';
!     return (int)uReadThis;
  }
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/unzip.def gcc-4.0.0/zlib/contrib/minizip/unzip.def
*** gcc-3.4.3/zlib/contrib/minizip/unzip.def	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/unzip.def	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- 	unzOpen                       @61
- 	unzClose                      @62
- 	unzGetGlobalInfo              @63
- 	unzGetCurrentFileInfo         @64
- 	unzGoToFirstFile              @65
- 	unzGoToNextFile               @66
- 	unzOpenCurrentFile            @67
- 	unzReadCurrentFile            @68
- 	unztell                       @70
- 	unzeof                        @71
- 	unzCloseCurrentFile           @72
- 	unzGetGlobalComment           @73
- 	unzStringFileNameCompare      @74
- 	unzLocateFile                 @75
- 	unzGetLocalExtrafield         @76
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/unzip.h gcc-4.0.0/zlib/contrib/minizip/unzip.h
*** gcc-3.4.3/zlib/contrib/minizip/unzip.h	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/unzip.h	Mon Oct 11 18:45:41 2004
***************
*** 1,15 ****
! /* unzip.h -- IO for uncompress .zip files using zlib 
!    Version 0.15 beta, Mar 19th, 1998,
  
!    Copyright (C) 1998 Gilles Vollant
  
     This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
       WinZip, InfoZip tools and compatible.
     Encryption and multi volume ZipFile (span) are not supported.
     Old compressions used by old PKZip 1.x are not supported
  
!    THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE
!    CAN CHANGE IN FUTURE VERSION !!
     I WAIT FEEDBACK at mail info@winimage.com
     Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution
  
--- 1,14 ----
! /* unzip.h -- IO for uncompress .zip files using zlib
!    Version 1.00, September 10th, 2003
  
!    Copyright (C) 1998-2003 Gilles Vollant
  
     This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
       WinZip, InfoZip tools and compatible.
     Encryption and multi volume ZipFile (span) are not supported.
     Old compressions used by old PKZip 1.x are not supported
  
! 
     I WAIT FEEDBACK at mail info@winimage.com
     Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution
  
***************
*** 33,42 ****
  
  
  */
! /* for more info about .ZIP format, see 
!       ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip
     PkWare has also a specification at :
!       ftp://ftp.pkware.com/probdesc.zip */
  
  #ifndef _unz_H
  #define _unz_H
--- 32,44 ----
  
  
  */
! 
! /* for more info about .ZIP format, see
!       http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip
!       http://www.info-zip.org/pub/infozip/doc/
     PkWare has also a specification at :
!       ftp://ftp.pkware.com/probdesc.zip
! */
  
  #ifndef _unz_H
  #define _unz_H
*************** extern "C" {
*** 49,91 ****
  #include "zlib.h"
  #endif
  
  #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
  /* like the STRICT of WIN32, we define a pointer that cannot be converted
      from (void*) without cast */
! typedef struct TagunzFile__ { int unused; } unzFile__; 
  typedef unzFile__ *unzFile;
  #else
  typedef voidp unzFile;
  #endif
  
  
! #define UNZ_OK                                  (0)
! #define UNZ_END_OF_LIST_OF_FILE (-100)
! #define UNZ_ERRNO               (Z_ERRNO)
! #define UNZ_EOF                 (0)
  #define UNZ_PARAMERROR                  (-102)
  #define UNZ_BADZIPFILE                  (-103)
  #define UNZ_INTERNALERROR               (-104)
  #define UNZ_CRCERROR                    (-105)
  
  /* tm_unz contain date/time info */
! typedef struct tm_unz_s 
  {
! 	uInt tm_sec;            /* seconds after the minute - [0,59] */
! 	uInt tm_min;            /* minutes after the hour - [0,59] */
! 	uInt tm_hour;           /* hours since midnight - [0,23] */
! 	uInt tm_mday;           /* day of the month - [1,31] */
! 	uInt tm_mon;            /* months since January - [0,11] */
! 	uInt tm_year;           /* years - [1980..2044] */
  } tm_unz;
  
  /* unz_global_info structure contain global data about the ZIPfile
     These data comes from the end of central dir */
  typedef struct unz_global_info_s
  {
! 	uLong number_entry;         /* total number of entries in
! 				       the central dir on this disk */
! 	uLong size_comment;         /* size of the global comment of the zipfile */
  } unz_global_info;
  
  
--- 51,97 ----
  #include "zlib.h"
  #endif
  
+ #ifndef _ZLIBIOAPI_H
+ #include "ioapi.h"
+ #endif
+ 
  #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
  /* like the STRICT of WIN32, we define a pointer that cannot be converted
      from (void*) without cast */
! typedef struct TagunzFile__ { int unused; } unzFile__;
  typedef unzFile__ *unzFile;
  #else
  typedef voidp unzFile;
  #endif
  
  
! #define UNZ_OK                          (0)
! #define UNZ_END_OF_LIST_OF_FILE         (-100)
! #define UNZ_ERRNO                       (Z_ERRNO)
! #define UNZ_EOF                         (0)
  #define UNZ_PARAMERROR                  (-102)
  #define UNZ_BADZIPFILE                  (-103)
  #define UNZ_INTERNALERROR               (-104)
  #define UNZ_CRCERROR                    (-105)
  
  /* tm_unz contain date/time info */
! typedef struct tm_unz_s
  {
!     uInt tm_sec;            /* seconds after the minute - [0,59] */
!     uInt tm_min;            /* minutes after the hour - [0,59] */
!     uInt tm_hour;           /* hours since midnight - [0,23] */
!     uInt tm_mday;           /* day of the month - [1,31] */
!     uInt tm_mon;            /* months since January - [0,11] */
!     uInt tm_year;           /* years - [1980..2044] */
  } tm_unz;
  
  /* unz_global_info structure contain global data about the ZIPfile
     These data comes from the end of central dir */
  typedef struct unz_global_info_s
  {
!     uLong number_entry;         /* total number of entries in
!                        the central dir on this disk */
!     uLong size_comment;         /* size of the global comment of the zipfile */
  } unz_global_info;
  
  
*************** typedef struct unz_file_info_s
*** 98,105 ****
      uLong compression_method;   /* compression method              2 bytes */
      uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */
      uLong crc;                  /* crc-32                          4 bytes */
!     uLong compressed_size;      /* compressed size                 4 bytes */ 
!     uLong uncompressed_size;    /* uncompressed size               4 bytes */ 
      uLong size_filename;        /* filename length                 2 bytes */
      uLong size_file_extra;      /* extra field length              2 bytes */
      uLong size_file_comment;    /* file comment length             2 bytes */
--- 104,111 ----
      uLong compression_method;   /* compression method              2 bytes */
      uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */
      uLong crc;                  /* crc-32                          4 bytes */
!     uLong compressed_size;      /* compressed size                 4 bytes */
!     uLong uncompressed_size;    /* uncompressed size               4 bytes */
      uLong size_filename;        /* filename length                 2 bytes */
      uLong size_file_extra;      /* extra field length              2 bytes */
      uLong size_file_comment;    /* file comment length             2 bytes */
*************** typedef struct unz_file_info_s
*** 112,138 ****
  } unz_file_info;
  
  extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
! 												 const char* fileName2,
! 												 int iCaseSensitivity));
  /*
     Compare two filename (fileName1,fileName2).
     If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
     If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
! 								or strcasecmp)
     If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
! 	(like 1 on Unix, 2 on Windows)
  */
  
  
  extern unzFile ZEXPORT unzOpen OF((const char *path));
  /*
    Open a Zip file. path contain the full pathname (by example,
!      on a Windows NT computer "c:\\zlib\\zlib111.zip" or on an Unix computer
! 	 "zlib/zlib111.zip".
! 	 If the zipfile cannot be opened (file don't exist or in not valid), the
! 	   return value is NULL.
       Else, the return value is a unzFile Handle, usable with other function
! 	   of this unzip package.
  */
  
  extern int ZEXPORT unzClose OF((unzFile file));
--- 118,151 ----
  } unz_file_info;
  
  extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
!                                                  const char* fileName2,
!                                                  int iCaseSensitivity));
  /*
     Compare two filename (fileName1,fileName2).
     If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
     If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
!                                 or strcasecmp)
     If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
!     (like 1 on Unix, 2 on Windows)
  */
  
  
  extern unzFile ZEXPORT unzOpen OF((const char *path));
  /*
    Open a Zip file. path contain the full pathname (by example,
!      on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
!      "zlib/zlib113.zip".
!      If the zipfile cannot be opened (file don't exist or in not valid), the
!        return value is NULL.
       Else, the return value is a unzFile Handle, usable with other function
!        of this unzip package.
! */
! 
! extern unzFile ZEXPORT unzOpen2 OF((const char *path,
!                                     zlib_filefunc_def* pzlib_filefunc_def));
! /*
!    Open a Zip file, like unzOpen, but provide a set of file low level API
!       for read/write the zip file (see ioapi.h)
  */
  
  extern int ZEXPORT unzClose OF((unzFile file));
*************** extern int ZEXPORT unzClose OF((unzFile 
*** 143,149 ****
    return UNZ_OK if there is no problem. */
  
  extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
! 					unz_global_info *pglobal_info));
  /*
    Write info about the ZipFile in the *pglobal_info structure.
    No preparation of the structure is needed
--- 156,162 ----
    return UNZ_OK if there is no problem. */
  
  extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
!                                         unz_global_info *pglobal_info));
  /*
    Write info about the ZipFile in the *pglobal_info structure.
    No preparation of the structure is needed
*************** extern int ZEXPORT unzGetGlobalInfo OF((
*** 151,158 ****
  
  
  extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
! 										   char *szComment,
! 					   uLong uSizeBuf));
  /*
    Get the global comment string of the ZipFile, in the szComment buffer.
    uSizeBuf is the size of the szComment buffer.
--- 164,171 ----
  
  
  extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
!                                            char *szComment,
!                                            uLong uSizeBuf));
  /*
    Get the global comment string of the ZipFile, in the szComment buffer.
    uSizeBuf is the size of the szComment buffer.
*************** extern int ZEXPORT unzGoToNextFile OF((u
*** 176,184 ****
    return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
  */
  
! extern int ZEXPORT unzLocateFile OF((unzFile file, 
! 				     const char *szFileName,
! 				     int iCaseSensitivity));
  /*
    Try locate the file szFileName in the zipfile.
    For the iCaseSensitivity signification, see unzStringFileNameCompare
--- 189,197 ----
    return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
  */
  
! extern int ZEXPORT unzLocateFile OF((unzFile file,
!                      const char *szFileName,
!                      int iCaseSensitivity));
  /*
    Try locate the file szFileName in the zipfile.
    For the iCaseSensitivity signification, see unzStringFileNameCompare
*************** extern int ZEXPORT unzLocateFile OF((unz
*** 189,213 ****
  */
  
  
  extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
! 					     unz_file_info *pfile_info,
! 					     char *szFileName,
! 					     uLong fileNameBufferSize,
! 					     void *extraField,
! 					     uLong extraFieldBufferSize,
! 					     char *szComment,
! 					     uLong commentBufferSize));
  /*
    Get Info about the current file
    if pfile_info!=NULL, the *pfile_info structure will contain somes info about
! 	    the current file
    if szFileName!=NULL, the filemane string will be copied in szFileName
! 			(fileNameBufferSize is the size of the buffer)
    if extraField!=NULL, the extra field information will be copied in extraField
! 			(extraFieldBufferSize is the size of the buffer).
! 			This is the Central-header version of the extra field
    if szComment!=NULL, the comment string of the file will be copied in szComment
! 			(commentBufferSize is the size of the buffer)
  */
  
  /***************************************************************************/
--- 202,245 ----
  */
  
  
+ /* ****************************************** */
+ /* Ryan supplied functions */
+ /* unz_file_info contain information about a file in the zipfile */
+ typedef struct unz_file_pos_s
+ {
+     uLong pos_in_zip_directory;   /* offset in zip file directory */
+     uLong num_of_file;            /* # of file */
+ } unz_file_pos;
+ 
+ extern int ZEXPORT unzGetFilePos(
+     unzFile file,
+     unz_file_pos* file_pos);
+ 
+ extern int ZEXPORT unzGoToFilePos(
+     unzFile file,
+     unz_file_pos* file_pos);
+ 
+ /* ****************************************** */
+ 
  extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
!                          unz_file_info *pfile_info,
!                          char *szFileName,
!                          uLong fileNameBufferSize,
!                          void *extraField,
!                          uLong extraFieldBufferSize,
!                          char *szComment,
!                          uLong commentBufferSize));
  /*
    Get Info about the current file
    if pfile_info!=NULL, the *pfile_info structure will contain somes info about
!         the current file
    if szFileName!=NULL, the filemane string will be copied in szFileName
!             (fileNameBufferSize is the size of the buffer)
    if extraField!=NULL, the extra field information will be copied in extraField
!             (extraFieldBufferSize is the size of the buffer).
!             This is the Central-header version of the extra field
    if szComment!=NULL, the comment string of the file will be copied in szComment
!             (commentBufferSize is the size of the buffer)
  */
  
  /***************************************************************************/
*************** extern int ZEXPORT unzOpenCurrentFile OF
*** 221,236 ****
    If there is no error, the return value is UNZ_OK.
  */
  
  extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
  /*
    Close the file in zip opened with unzOpenCurrentFile
    Return UNZ_CRCERROR if all the file was read but the CRC is not good
  */
  
! 												
! extern int ZEXPORT unzReadCurrentFile OF((unzFile file, 
! 					  voidp buf,
! 					  unsigned len));
  /*
    Read bytes from the current file (opened by unzOpenCurrentFile)
    buf contain buffer where data must be copied
--- 253,303 ----
    If there is no error, the return value is UNZ_OK.
  */
  
+ extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
+                                                   const char* password));
+ /*
+   Open for reading data the current file in the zipfile.
+   password is a crypting password
+   If there is no error, the return value is UNZ_OK.
+ */
+ 
+ extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
+                                            int* method,
+                                            int* level,
+                                            int raw));
+ /*
+   Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+     if raw==1
+   *method will receive method of compression, *level will receive level of
+      compression
+   note : you can set level parameter as NULL (if you did not want known level,
+          but you CANNOT set method parameter as NULL
+ */
+ 
+ extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
+                                            int* method,
+                                            int* level,
+                                            int raw,
+                                            const char* password));
+ /*
+   Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+     if raw==1
+   *method will receive method of compression, *level will receive level of
+      compression
+   note : you can set level parameter as NULL (if you did not want known level,
+          but you CANNOT set method parameter as NULL
+ */
+ 
+ 
  extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
  /*
    Close the file in zip opened with unzOpenCurrentFile
    Return UNZ_CRCERROR if all the file was read but the CRC is not good
  */
  
! extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
!                       voidp buf,
!                       unsigned len));
  /*
    Read bytes from the current file (opened by unzOpenCurrentFile)
    buf contain buffer where data must be copied
*************** extern z_off_t ZEXPORT unztell OF((unzFi
*** 249,260 ****
  
  extern int ZEXPORT unzeof OF((unzFile file));
  /*
!   return 1 if the end of file was reached, 0 elsewhere 
  */
  
  extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
! 											 voidp buf,
! 											 unsigned len));
  /*
    Read extra field from the current file (opened by unzOpenCurrentFile)
    This is the local-header version of the extra field (sometimes, there is
--- 316,327 ----
  
  extern int ZEXPORT unzeof OF((unzFile file));
  /*
!   return 1 if the end of file was reached, 0 elsewhere
  */
  
  extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
!                                              voidp buf,
!                                              unsigned len));
  /*
    Read extra field from the current file (opened by unzOpenCurrentFile)
    This is the local-header version of the extra field (sometimes, there is
*************** extern int ZEXPORT unzGetLocalExtrafield
*** 263,271 ****
    if buf==NULL, it return the size of the local extra field
  
    if buf!=NULL, len is the size of the buffer, the extra header is copied in
! 	buf.
!   the return value is the number of bytes copied in buf, or (if <0) 
! 	the error code
  */
  
  #ifdef __cplusplus
--- 330,338 ----
    if buf==NULL, it return the size of the local extra field
  
    if buf!=NULL, len is the size of the buffer, the extra header is copied in
!     buf.
!   the return value is the number of bytes copied in buf, or (if <0)
!     the error code
  */
  
  #ifdef __cplusplus
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/zip.c gcc-4.0.0/zlib/contrib/minizip/zip.c
*** gcc-3.4.3/zlib/contrib/minizip/zip.c	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/zip.c	Mon Oct 11 18:45:41 2004
***************
*** 1,5 ****
! /* zip.c -- IO on .zip files using zlib 
!    Version 0.15 beta, Mar 19th, 1998,
  
     Read zip.h for more info
  */
--- 1,7 ----
! /* zip.c -- IO on .zip files using zlib
!    Version 1.00, September 10th, 2003
! 
!    Copyright (C) 1998-2003 Gilles Vollant
  
     Read zip.h for more info
  */
***************
*** 8,13 ****
--- 10,16 ----
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
+ #include <time.h>
  #include "zlib.h"
  #include "zip.h"
  
***************
*** 66,73 ****
  #define SEEK_SET    0
  #endif
  
  const char zip_copyright[] =
!    " zip 0.15 Copyright 1998 Gilles Vollant ";
  
  
  #define SIZEDATA_INDATABLOCK (4096-(4*4))
--- 69,83 ----
  #define SEEK_SET    0
  #endif
  
+ #ifndef DEF_MEM_LEVEL
+ #if MAX_MEM_LEVEL >= 8
+ #  define DEF_MEM_LEVEL 8
+ #else
+ #  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+ #endif
+ #endif
  const char zip_copyright[] =
!    " zip 1.00 Copyright 1998-2003 Gilles Vollant - http://www.winimage.com/zLibDll";
  
  
  #define SIZEDATA_INDATABLOCK (4096-(4*4))
*************** typedef struct linkedlist_data_s
*** 99,131 ****
  
  typedef struct
  {
! 	z_stream stream;            /* zLib stream structure for inflate */
      int  stream_initialised;    /* 1 is stream is initialised */
      uInt pos_in_buffered_data;  /* last written byte in buffered_data */
  
!     uLong pos_local_header;     /* offset of the local header of the file 
                                       currenty writing */
      char* central_header;       /* central header data for the current file */
      uLong size_centralheader;   /* size of the central header for cur file */
      uLong flag;                 /* flag of the file currently writing */
  
      int  method;                /* compression method of file currenty wr.*/
      Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/
      uLong dosDate;
      uLong crc32;
  } curfile_info;
  
  typedef struct
  {
!     FILE * filezip;
      linkedlist_data central_dir;/* datablock with central dir in construction*/
      int  in_opened_file_inzip;  /* 1 if a file in the zip is currently writ.*/
      curfile_info ci;            /* info on the file curretly writing */
  
      uLong begin_pos;            /* position of the beginning of the zipfile */
      uLong number_entry;
  } zip_internal;
  
  local linkedlist_datablock_internal* allocate_new_datablock()
  {
      linkedlist_datablock_internal* ldi;
--- 109,157 ----
  
  typedef struct
  {
!     z_stream stream;            /* zLib stream structure for inflate */
      int  stream_initialised;    /* 1 is stream is initialised */
      uInt pos_in_buffered_data;  /* last written byte in buffered_data */
  
!     uLong pos_local_header;     /* offset of the local header of the file
                                       currenty writing */
      char* central_header;       /* central header data for the current file */
      uLong size_centralheader;   /* size of the central header for cur file */
      uLong flag;                 /* flag of the file currently writing */
  
      int  method;                /* compression method of file currenty wr.*/
+     int  raw;                   /* 1 for directly writing raw data */
      Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/
      uLong dosDate;
      uLong crc32;
+     int  encrypt;
+ #ifndef NOCRYPT
+     unsigned long keys[3];     /* keys defining the pseudo-random sequence */
+     const unsigned long* pcrc_32_tab;
+     int crypt_header_size;
+ #endif
  } curfile_info;
  
  typedef struct
  {
!     zlib_filefunc_def z_filefunc;
!     voidpf filestream;        /* io structore of the zipfile */
      linkedlist_data central_dir;/* datablock with central dir in construction*/
      int  in_opened_file_inzip;  /* 1 if a file in the zip is currently writ.*/
      curfile_info ci;            /* info on the file curretly writing */
  
      uLong begin_pos;            /* position of the beginning of the zipfile */
+     uLong add_position_when_writting_offset;
      uLong number_entry;
  } zip_internal;
  
+ 
+ 
+ #ifndef NOCRYPT
+ #define INCLUDECRYPTINGCODE_IFCRYPTALLOWED
+ #include "crypt.h"
+ #endif
+ 
  local linkedlist_datablock_internal* allocate_new_datablock()
  {
      linkedlist_datablock_internal* ldi;
*************** local void free_linkedlist(ll)
*** 166,172 ****
  
  
  local int add_data_in_datablock(ll,buf,len)
!     linkedlist_data* ll;    
      const void* buf;
      uLong len;
  {
--- 192,198 ----
  
  
  local int add_data_in_datablock(ll,buf,len)
!     linkedlist_data* ll;
      const void* buf;
      uLong len;
  {
*************** local int add_data_in_datablock(ll,buf,l
*** 220,251 ****
  }
  
  
- local int write_datablock(fout,ll)
-     FILE * fout;
-     linkedlist_data* ll;    
- {
-     linkedlist_datablock_internal* ldi;
-     ldi = ll->first_block;
-     while (ldi!=NULL)
-     {
-         if (ldi->filled_in_this_block > 0)
-             if (fwrite(ldi->data,(uInt)ldi->filled_in_this_block,1,fout)!=1)
-                 return ZIP_ERRNO;
-         ldi = ldi->next_datablock;
-     }
-     return ZIP_OK;
- }
  
  /****************************************************************************/
  
  /* ===========================================================================
!    Outputs a long in LSB order to the given file
     nbByte == 1, 2 or 4 (byte, short or long)
  */
  
! local int ziplocal_putValue OF((FILE *file, uLong x, int nbByte));
! local int ziplocal_putValue (file, x, nbByte)
!     FILE *file;
      uLong x;
      int nbByte;
  {
--- 246,265 ----
  }
  
  
  
  /****************************************************************************/
  
+ #ifndef NO_ADDFILEINEXISTINGZIP
  /* ===========================================================================
!    Inputs a long in LSB order to the given file
     nbByte == 1, 2 or 4 (byte, short or long)
  */
  
! local int ziplocal_putValue OF((const zlib_filefunc_def* pzlib_filefunc_def,
!                                 voidpf filestream, uLong x, int nbByte));
! local int ziplocal_putValue (pzlib_filefunc_def, filestream, x, nbByte)
!     const zlib_filefunc_def* pzlib_filefunc_def;
!     voidpf filestream;
      uLong x;
      int nbByte;
  {
*************** local int ziplocal_putValue (file, x, nb
*** 255,261 ****
          buf[n] = (unsigned char)(x & 0xff);
          x >>= 8;
      }
!     if (fwrite(buf,nbByte,1,file)!=1)
          return ZIP_ERRNO;
      else
          return ZIP_OK;
--- 269,275 ----
          buf[n] = (unsigned char)(x & 0xff);
          x >>= 8;
      }
!     if (ZWRITE(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
          return ZIP_ERRNO;
      else
          return ZIP_OK;
*************** local void ziplocal_putValue_inmemory (d
*** 278,284 ****
  
  
  local uLong ziplocal_TmzDateToDosDate(ptm,dosDate)
!     tm_zip* ptm;
      uLong dosDate;
  {
      uLong year = (uLong)ptm->tm_year;
--- 292,298 ----
  
  
  local uLong ziplocal_TmzDateToDosDate(ptm,dosDate)
!     const tm_zip* ptm;
      uLong dosDate;
  {
      uLong year = (uLong)ptm->tm_year;
*************** local uLong ziplocal_TmzDateToDosDate(pt
*** 294,331 ****
  
  /****************************************************************************/
  
! extern zipFile ZEXPORT zipOpen (pathname, append)
      const char *pathname;
      int append;
  {
      zip_internal ziinit;
      zip_internal* zi;
  
!     ziinit.filezip = fopen(pathname,(append == 0) ? "wb" : "ab");
!     if (ziinit.filezip == NULL)
          return NULL;
!     ziinit.begin_pos = ftell(ziinit.filezip);
      ziinit.in_opened_file_inzip = 0;
      ziinit.ci.stream_initialised = 0;
      ziinit.number_entry = 0;
      init_linkedlist(&(ziinit.central_dir));
  
  
      zi = (zip_internal*)ALLOC(sizeof(zip_internal));
      if (zi==NULL)
      {
!         fclose(ziinit.filezip);
          return NULL;
      }
  
!     *zi = ziinit;
!     return (zipFile)zi;
  }
  
! extern int ZEXPORT zipOpenNewFileInZip (file, filename, zipfi, 
!                                         extrafield_local, size_extrafield_local,
!                                         extrafield_global, size_extrafield_global,
!                                         comment, method, level)
      zipFile file;
      const char* filename;
      const zip_fileinfo* zipfi;
--- 308,655 ----
  
  /****************************************************************************/
  
! local int ziplocal_getByte OF((
!     const zlib_filefunc_def* pzlib_filefunc_def,
!     voidpf filestream,
!     int *pi));
! 
! local int ziplocal_getByte(pzlib_filefunc_def,filestream,pi)
!     const zlib_filefunc_def* pzlib_filefunc_def;
!     voidpf filestream;
!     int *pi;
! {
!     unsigned char c;
!     int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1);
!     if (err==1)
!     {
!         *pi = (int)c;
!         return ZIP_OK;
!     }
!     else
!     {
!         if (ZERROR(*pzlib_filefunc_def,filestream))
!             return ZIP_ERRNO;
!         else
!             return ZIP_EOF;
!     }
! }
! 
! 
! /* ===========================================================================
!    Reads a long in LSB order from the given gz_stream. Sets
! */
! local int ziplocal_getShort OF((
!     const zlib_filefunc_def* pzlib_filefunc_def,
!     voidpf filestream,
!     uLong *pX));
! 
! local int ziplocal_getShort (pzlib_filefunc_def,filestream,pX)
!     const zlib_filefunc_def* pzlib_filefunc_def;
!     voidpf filestream;
!     uLong *pX;
! {
!     uLong x ;
!     int i;
!     int err;
! 
!     err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
!     x = (uLong)i;
! 
!     if (err==ZIP_OK)
!         err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
!     x += ((uLong)i)<<8;
! 
!     if (err==ZIP_OK)
!         *pX = x;
!     else
!         *pX = 0;
!     return err;
! }
! 
! local int ziplocal_getLong OF((
!     const zlib_filefunc_def* pzlib_filefunc_def,
!     voidpf filestream,
!     uLong *pX));
! 
! local int ziplocal_getLong (pzlib_filefunc_def,filestream,pX)
!     const zlib_filefunc_def* pzlib_filefunc_def;
!     voidpf filestream;
!     uLong *pX;
! {
!     uLong x ;
!     int i;
!     int err;
! 
!     err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
!     x = (uLong)i;
! 
!     if (err==ZIP_OK)
!         err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
!     x += ((uLong)i)<<8;
! 
!     if (err==ZIP_OK)
!         err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
!     x += ((uLong)i)<<16;
! 
!     if (err==ZIP_OK)
!         err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
!     x += ((uLong)i)<<24;
! 
!     if (err==ZIP_OK)
!         *pX = x;
!     else
!         *pX = 0;
!     return err;
! }
! 
! #ifndef BUFREADCOMMENT
! #define BUFREADCOMMENT (0x400)
! #endif
! /*
!   Locate the Central directory of a zipfile (at the end, just before
!     the global comment)
! */
! local uLong ziplocal_SearchCentralDir OF((
!     const zlib_filefunc_def* pzlib_filefunc_def,
!     voidpf filestream));
! 
! local uLong ziplocal_SearchCentralDir(pzlib_filefunc_def,filestream)
!     const zlib_filefunc_def* pzlib_filefunc_def;
!     voidpf filestream;
! {
!     unsigned char* buf;
!     uLong uSizeFile;
!     uLong uBackRead;
!     uLong uMaxBack=0xffff; /* maximum size of global comment */
!     uLong uPosFound=0;
! 
!     if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
!         return 0;
! 
! 
!     uSizeFile = ZTELL(*pzlib_filefunc_def,filestream);
! 
!     if (uMaxBack>uSizeFile)
!         uMaxBack = uSizeFile;
! 
!     buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
!     if (buf==NULL)
!         return 0;
! 
!     uBackRead = 4;
!     while (uBackRead<uMaxBack)
!     {
!         uLong uReadSize,uReadPos ;
!         int i;
!         if (uBackRead+BUFREADCOMMENT>uMaxBack)
!             uBackRead = uMaxBack;
!         else
!             uBackRead+=BUFREADCOMMENT;
!         uReadPos = uSizeFile-uBackRead ;
! 
!         uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
!                      (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
!         if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
!             break;
! 
!         if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
!             break;
! 
!         for (i=(int)uReadSize-3; (i--)>0;)
!             if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
!                 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
!             {
!                 uPosFound = uReadPos+i;
!                 break;
!             }
! 
!         if (uPosFound!=0)
!             break;
!     }
!     TRYFREE(buf);
!     return uPosFound;
! }
! #endif /* !NO_ADDFILEINEXISTINGZIP*/
! 
! /************************************************************/
! extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc_def)
      const char *pathname;
      int append;
+     zipcharpc* globalcomment;
+     zlib_filefunc_def* pzlib_filefunc_def;
  {
      zip_internal ziinit;
      zip_internal* zi;
+     int err=ZIP_OK;
  
! 
!     if (pzlib_filefunc_def==NULL)
!         fill_fopen_filefunc(&ziinit.z_filefunc);
!     else
!         ziinit.z_filefunc = *pzlib_filefunc_def;
! 
!     ziinit.filestream = (*(ziinit.z_filefunc.zopen_file))
!                  (ziinit.z_filefunc.opaque,
!                   pathname,
!                   (append == APPEND_STATUS_CREATE) ?
!                   (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :
!                     (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));
! 
!     if (ziinit.filestream == NULL)
          return NULL;
!     ziinit.begin_pos = ZTELL(ziinit.z_filefunc,ziinit.filestream);
      ziinit.in_opened_file_inzip = 0;
      ziinit.ci.stream_initialised = 0;
      ziinit.number_entry = 0;
+     ziinit.add_position_when_writting_offset = 0;
      init_linkedlist(&(ziinit.central_dir));
  
  
      zi = (zip_internal*)ALLOC(sizeof(zip_internal));
      if (zi==NULL)
      {
!         ZCLOSE(ziinit.z_filefunc,ziinit.filestream);
          return NULL;
      }
  
!     /* now we add file in a zipfile */
! #    ifndef NO_ADDFILEINEXISTINGZIP
!     if (append == APPEND_STATUS_ADDINZIP)
!     {
!         uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
! 
!         uLong size_central_dir;     /* size of the central directory  */
!         uLong offset_central_dir;   /* offset of start of central directory */
!         uLong central_pos,uL;
! 
!         uLong number_disk;          /* number of the current dist, used for
!                                     spaning ZIP, unsupported, always 0*/
!         uLong number_disk_with_CD;  /* number the the disk with central dir, used
!                                     for spaning ZIP, unsupported, always 0*/
!         uLong number_entry;
!         uLong number_entry_CD;      /* total number of entries in
!                                     the central dir
!                                     (same than number_entry on nospan) */
!         uLong size_comment;
! 
!         central_pos = ziplocal_SearchCentralDir(&ziinit.z_filefunc,ziinit.filestream);
!         if (central_pos==0)
!             err=ZIP_ERRNO;
! 
!         if (ZSEEK(ziinit.z_filefunc, ziinit.filestream,
!                                         central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
!             err=ZIP_ERRNO;
! 
!         /* the signature, already checked */
!         if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&uL)!=ZIP_OK)
!             err=ZIP_ERRNO;
! 
!         /* number of this disk */
!         if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk)!=ZIP_OK)
!             err=ZIP_ERRNO;
! 
!         /* number of the disk with the start of the central directory */
!         if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk_with_CD)!=ZIP_OK)
!             err=ZIP_ERRNO;
! 
!         /* total number of entries in the central dir on this disk */
!         if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry)!=ZIP_OK)
!             err=ZIP_ERRNO;
! 
!         /* total number of entries in the central dir */
!         if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry_CD)!=ZIP_OK)
!             err=ZIP_ERRNO;
! 
!         if ((number_entry_CD!=number_entry) ||
!             (number_disk_with_CD!=0) ||
!             (number_disk!=0))
!             err=ZIP_BADZIPFILE;
! 
!         /* size of the central directory */
!         if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&size_central_dir)!=ZIP_OK)
!             err=ZIP_ERRNO;
! 
!         /* offset of start of central directory with respect to the
!             starting disk number */
!         if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&offset_central_dir)!=ZIP_OK)
!             err=ZIP_ERRNO;
! 
!         /* zipfile comment length */
!         if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&size_comment)!=ZIP_OK)
!             err=ZIP_ERRNO;
! 
!         if ((central_pos<offset_central_dir+size_central_dir) &&
!             (err==ZIP_OK))
!             err=ZIP_BADZIPFILE;
! 
!         if (err!=ZIP_OK)
!         {
!             ZCLOSE(ziinit.z_filefunc, ziinit.filestream);
!             return NULL;
!         }
! 
!         byte_before_the_zipfile = central_pos -
!                                 (offset_central_dir+size_central_dir);
!         ziinit.add_position_when_writting_offset = byte_before_the_zipfile ;
! 
!         {
!             uLong size_central_dir_to_read = size_central_dir;
!             size_t buf_size = SIZEDATA_INDATABLOCK;
!             void* buf_read = (void*)ALLOC(buf_size);
!             if (ZSEEK(ziinit.z_filefunc, ziinit.filestream,
!                   offset_central_dir + byte_before_the_zipfile,
!                   ZLIB_FILEFUNC_SEEK_SET) != 0)
!                   err=ZIP_ERRNO;
! 
!             while ((size_central_dir_to_read>0) && (err==ZIP_OK))
!             {
!                 uLong read_this = SIZEDATA_INDATABLOCK;
!                 if (read_this > size_central_dir_to_read)
!                     read_this = size_central_dir_to_read;
!                 if (ZREAD(ziinit.z_filefunc, ziinit.filestream,buf_read,read_this) != read_this)
!                     err=ZIP_ERRNO;
! 
!                 if (err==ZIP_OK)
!                     err = add_data_in_datablock(&ziinit.central_dir,buf_read,
!                                                 (uLong)read_this);
!                 size_central_dir_to_read-=read_this;
!             }
!             TRYFREE(buf_read);
!         }
!         ziinit.begin_pos = byte_before_the_zipfile;
!         ziinit.number_entry = number_entry_CD;
! 
!         if (ZSEEK(ziinit.z_filefunc, ziinit.filestream,
!                   offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
!             err=ZIP_ERRNO;
!     }
! #    endif /* !NO_ADDFILEINEXISTINGZIP*/
! 
!     if (err != ZIP_OK)
!     {
!         TRYFREE(zi);
!         return NULL;
!     }
!     else
!     {
!         *zi = ziinit;
!         return (zipFile)zi;
!     }
  }
  
! extern zipFile ZEXPORT zipOpen (pathname, append)
!     const char *pathname;
!     int append;
! {
!     return zipOpen2(pathname,append,NULL,NULL);
! }
! 
! extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi,
!                                          extrafield_local, size_extrafield_local,
!                                          extrafield_global, size_extrafield_global,
!                                          comment, method, level, raw,
!                                          windowBits, memLevel, strategy,
!                                          password, crcForCrypting)
      zipFile file;
      const char* filename;
      const zip_fileinfo* zipfi;
*************** extern int ZEXPORT zipOpenNewFileInZip (
*** 336,341 ****
--- 660,671 ----
      const char* comment;
      int method;
      int level;
+     int raw;
+     int windowBits;
+     int memLevel;
+     int strategy;
+     const char* password;
+     uLong crcForCrypting;
  {
      zip_internal* zi;
      uInt size_filename;
*************** extern int ZEXPORT zipOpenNewFileInZip (
*** 343,348 ****
--- 673,683 ----
      uInt i;
      int err = ZIP_OK;
  
+ #    ifdef NOCRYPT
+     if (password != NULL)
+         return ZIP_PARAMERROR;
+ #    endif
+ 
      if (file == NULL)
          return ZIP_PARAMERROR;
      if ((method!=0) && (method!=Z_DEFLATED))
*************** extern int ZEXPORT zipOpenNewFileInZip (
*** 384,396 ****
        zi->ci.flag |= 4;
      if ((level==1))
        zi->ci.flag |= 6;
  
      zi->ci.crc32 = 0;
      zi->ci.method = method;
      zi->ci.stream_initialised = 0;
      zi->ci.pos_in_buffered_data = 0;
!     zi->ci.pos_local_header = ftell(zi->filezip);
!     zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + 
                                        size_extrafield_global + size_comment;
      zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader);
  
--- 719,735 ----
        zi->ci.flag |= 4;
      if ((level==1))
        zi->ci.flag |= 6;
+     if (password != NULL)
+       zi->ci.flag |= 1;
  
      zi->ci.crc32 = 0;
      zi->ci.method = method;
+     zi->ci.encrypt = 0;
      zi->ci.stream_initialised = 0;
      zi->ci.pos_in_buffered_data = 0;
!     zi->ci.raw = raw;
!     zi->ci.pos_local_header = ZTELL(zi->z_filefunc,zi->filestream) ;
!     zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename +
                                        size_extrafield_global + size_comment;
      zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader);
  
*************** extern int ZEXPORT zipOpenNewFileInZip (
*** 410,425 ****
      ziplocal_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
  
      if (zipfi==NULL)
!         ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2); 
      else
!         ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2); 
  
      if (zipfi==NULL)
!         ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4); 
      else
          ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
  
!     ziplocal_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header,4);
  
      for (i=0;i<size_filename;i++)
          *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
--- 749,764 ----
      ziplocal_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
  
      if (zipfi==NULL)
!         ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);
      else
!         ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);
  
      if (zipfi==NULL)
!         ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);
      else
          ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
  
!     ziplocal_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header- zi->add_position_when_writting_offset,4);
  
      for (i=0;i<size_filename;i++)
          *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
*************** extern int ZEXPORT zipOpenNewFileInZip (
*** 430,473 ****
  
      for (i=0;i<size_comment;i++)
          *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+
!               size_extrafield_global+i) = *(filename+i);
      if (zi->ci.central_header == NULL)
          return ZIP_INTERNALERROR;
  
      /* write the local header */
!     err = ziplocal_putValue(zi->filezip,(uLong)LOCALHEADERMAGIC,4);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(zi->filezip,(uLong)20,2);/* version needed to extract */
      if (err==ZIP_OK)
!         err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.flag,2);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.method,2);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.dosDate,4);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(zi->filezip,(uLong)0,4); /* crc 32, unknown */
      if (err==ZIP_OK)
!         err = ziplocal_putValue(zi->filezip,(uLong)0,4); /* compressed size, unknown */
      if (err==ZIP_OK)
!         err = ziplocal_putValue(zi->filezip,(uLong)0,4); /* uncompressed size, unknown */
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(zi->filezip,(uLong)size_filename,2);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(zi->filezip,(uLong)size_extrafield_local,2);
  
      if ((err==ZIP_OK) && (size_filename>0))
!         if (fwrite(filename,(uInt)size_filename,1,zi->filezip)!=1)
                  err = ZIP_ERRNO;
  
      if ((err==ZIP_OK) && (size_extrafield_local>0))
!         if (fwrite(extrafield_local,(uInt)size_extrafield_local,1,zi->filezip)
!                                                                            !=1)
                  err = ZIP_ERRNO;
  
      zi->ci.stream.avail_in = (uInt)0;
--- 769,812 ----
  
      for (i=0;i<size_comment;i++)
          *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+
!               size_extrafield_global+i) = *(comment+i);
      if (zi->ci.central_header == NULL)
          return ZIP_INTERNALERROR;
  
      /* write the local header */
!     err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC,4);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */
      if (err==ZIP_OK)
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */
      if (err==ZIP_OK)
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */
      if (err==ZIP_OK)
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);
  
      if (err==ZIP_OK)
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield_local,2);
  
      if ((err==ZIP_OK) && (size_filename>0))
!         if (ZWRITE(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)
                  err = ZIP_ERRNO;
  
      if ((err==ZIP_OK) && (size_extrafield_local>0))
!         if (ZWRITE(zi->z_filefunc,zi->filestream,extrafield_local,size_extrafield_local)
!                                                                            !=size_extrafield_local)
                  err = ZIP_ERRNO;
  
      zi->ci.stream.avail_in = (uInt)0;
*************** extern int ZEXPORT zipOpenNewFileInZip (
*** 476,503 ****
      zi->ci.stream.total_in = 0;
      zi->ci.stream.total_out = 0;
  
!     if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED))
      {
          zi->ci.stream.zalloc = (alloc_func)0;
          zi->ci.stream.zfree = (free_func)0;
          zi->ci.stream.opaque = (voidpf)0;
  
          err = deflateInit2(&zi->ci.stream, level,
!                Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, 0);
  
          if (err==Z_OK)
              zi->ci.stream_initialised = 1;
      }
  
  
      if (err==Z_OK)
          zi->in_opened_file_inzip = 1;
      return err;
  }
  
  extern int ZEXPORT zipWriteInFileInZip (file, buf, len)
      zipFile file;
!     const voidp buf;
      unsigned len;
  {
      zip_internal* zi;
--- 815,928 ----
      zi->ci.stream.total_in = 0;
      zi->ci.stream.total_out = 0;
  
!     if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
      {
          zi->ci.stream.zalloc = (alloc_func)0;
          zi->ci.stream.zfree = (free_func)0;
          zi->ci.stream.opaque = (voidpf)0;
  
+         if (windowBits>0)
+             windowBits = -windowBits;
+ 
          err = deflateInit2(&zi->ci.stream, level,
!                Z_DEFLATED, windowBits, memLevel, strategy);
  
          if (err==Z_OK)
              zi->ci.stream_initialised = 1;
      }
+ #    ifndef NOCRYPT
+     zi->ci.crypt_header_size = 0;
+     if ((err==Z_OK) && (password != NULL))
+     {
+         unsigned char bufHead[RAND_HEAD_LEN];
+         unsigned int sizeHead;
+         zi->ci.encrypt = 1;
+         zi->ci.pcrc_32_tab = get_crc_table();
+         /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/
  
+         sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);
+         zi->ci.crypt_header_size = sizeHead;
+ 
+         if (ZWRITE(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)
+                 err = ZIP_ERRNO;
+     }
+ #    endif
  
      if (err==Z_OK)
          zi->in_opened_file_inzip = 1;
      return err;
  }
  
+ extern int ZEXPORT zipOpenNewFileInZip2(file, filename, zipfi,
+                                         extrafield_local, size_extrafield_local,
+                                         extrafield_global, size_extrafield_global,
+                                         comment, method, level, raw)
+     zipFile file;
+     const char* filename;
+     const zip_fileinfo* zipfi;
+     const void* extrafield_local;
+     uInt size_extrafield_local;
+     const void* extrafield_global;
+     uInt size_extrafield_global;
+     const char* comment;
+     int method;
+     int level;
+     int raw;
+ {
+     return zipOpenNewFileInZip3 (file, filename, zipfi,
+                                  extrafield_local, size_extrafield_local,
+                                  extrafield_global, size_extrafield_global,
+                                  comment, method, level, raw,
+                                  -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                  NULL, 0);
+ }
+ 
+ extern int ZEXPORT zipOpenNewFileInZip (file, filename, zipfi,
+                                         extrafield_local, size_extrafield_local,
+                                         extrafield_global, size_extrafield_global,
+                                         comment, method, level)
+     zipFile file;
+     const char* filename;
+     const zip_fileinfo* zipfi;
+     const void* extrafield_local;
+     uInt size_extrafield_local;
+     const void* extrafield_global;
+     uInt size_extrafield_global;
+     const char* comment;
+     int method;
+     int level;
+ {
+     return zipOpenNewFileInZip2 (file, filename, zipfi,
+                                  extrafield_local, size_extrafield_local,
+                                  extrafield_global, size_extrafield_global,
+                                  comment, method, level, 0);
+ }
+ 
+ local int zipFlushWriteBuffer(zi)
+   zip_internal* zi;
+ {
+     int err=ZIP_OK;
+ 
+     if (zi->ci.encrypt != 0)
+     {
+ #ifndef NOCRYPT
+         uInt i;
+         int t;
+         for (i=0;i<zi->ci.pos_in_buffered_data;i++)
+             zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab,
+                                        zi->ci.buffered_data[i],t);
+ #endif
+     }
+     if (ZWRITE(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data)
+                                                                     !=zi->ci.pos_in_buffered_data)
+       err = ZIP_ERRNO;
+     zi->ci.pos_in_buffered_data = 0;
+     return err;
+ }
+ 
  extern int ZEXPORT zipWriteInFileInZip (file, buf, len)
      zipFile file;
!     const void* buf;
      unsigned len;
  {
      zip_internal* zi;
*************** extern int ZEXPORT zipWriteInFileInZip (
*** 510,516 ****
      if (zi->in_opened_file_inzip == 0)
          return ZIP_PARAMERROR;
  
!     zi->ci.stream.next_in = buf;
      zi->ci.stream.avail_in = len;
      zi->ci.crc32 = crc32(zi->ci.crc32,buf,len);
  
--- 935,941 ----
      if (zi->in_opened_file_inzip == 0)
          return ZIP_PARAMERROR;
  
!     zi->ci.stream.next_in = (void*)buf;
      zi->ci.stream.avail_in = len;
      zi->ci.crc32 = crc32(zi->ci.crc32,buf,len);
  
*************** extern int ZEXPORT zipWriteInFileInZip (
*** 518,532 ****
      {
          if (zi->ci.stream.avail_out == 0)
          {
!             if (fwrite(zi->ci.buffered_data,(uInt)zi->ci.pos_in_buffered_data,1,zi->filezip)
!                                                                            !=1)
                  err = ZIP_ERRNO;
-             zi->ci.pos_in_buffered_data = 0;
              zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
              zi->ci.stream.next_out = zi->ci.buffered_data;
          }
  
!         if (zi->ci.method == Z_DEFLATED)
          {
              uLong uTotalOutBefore = zi->ci.stream.total_out;
              err=deflate(&zi->ci.stream,  Z_NO_FLUSH);
--- 943,959 ----
      {
          if (zi->ci.stream.avail_out == 0)
          {
!             if (zipFlushWriteBuffer(zi) == ZIP_ERRNO)
                  err = ZIP_ERRNO;
              zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
              zi->ci.stream.next_out = zi->ci.buffered_data;
          }
  
! 
!         if(err != ZIP_OK)
!             break;
! 
!         if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
          {
              uLong uTotalOutBefore = zi->ci.stream.total_out;
              err=deflate(&zi->ci.stream,  Z_NO_FLUSH);
*************** extern int ZEXPORT zipWriteInFileInZip (
*** 555,587 ****
          }
      }
  
!     return 0;
  }
  
! extern int ZEXPORT zipCloseFileInZip (file)
      zipFile file;
  {
      zip_internal* zi;
      int err=ZIP_OK;
  
      if (file == NULL)
          return ZIP_PARAMERROR;
      zi = (zip_internal*)file;
  
!     if (zi->in_opened_file_inzip == 0)    
          return ZIP_PARAMERROR;
      zi->ci.stream.avail_in = 0;
!     
!     if (zi->ci.method == Z_DEFLATED)
          while (err==ZIP_OK)
      {
          uLong uTotalOutBefore;
          if (zi->ci.stream.avail_out == 0)
          {
!             if (fwrite(zi->ci.buffered_data,(uInt)zi->ci.pos_in_buffered_data,1,zi->filezip)
!                                                                            !=1)
                  err = ZIP_ERRNO;
-             zi->ci.pos_in_buffered_data = 0;
              zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
              zi->ci.stream.next_out = zi->ci.buffered_data;
          }
--- 982,1015 ----
          }
      }
  
!     return err;
  }
  
! extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32)
      zipFile file;
+     uLong uncompressed_size;
+     uLong crc32;
  {
      zip_internal* zi;
+     uLong compressed_size;
      int err=ZIP_OK;
  
      if (file == NULL)
          return ZIP_PARAMERROR;
      zi = (zip_internal*)file;
  
!     if (zi->in_opened_file_inzip == 0)
          return ZIP_PARAMERROR;
      zi->ci.stream.avail_in = 0;
! 
!     if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
          while (err==ZIP_OK)
      {
          uLong uTotalOutBefore;
          if (zi->ci.stream.avail_out == 0)
          {
!             if (zipFlushWriteBuffer(zi) == ZIP_ERRNO)
                  err = ZIP_ERRNO;
              zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
              zi->ci.stream.next_out = zi->ci.buffered_data;
          }
*************** extern int ZEXPORT zipCloseFileInZip (fi
*** 594,614 ****
          err=ZIP_OK; /* this is normal */
  
      if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))
!         if (fwrite(zi->ci.buffered_data,(uInt)zi->ci.pos_in_buffered_data,1,zi->filezip)
!                                                                        !=1)
              err = ZIP_ERRNO;
  
!     if ((zi->ci.method == Z_DEFLATED) && (err==ZIP_OK))
      {
          err=deflateEnd(&zi->ci.stream);
          zi->ci.stream_initialised = 0;
      }
  
!     ziplocal_putValue_inmemory(zi->ci.central_header+16,(uLong)zi->ci.crc32,4); /*crc*/
      ziplocal_putValue_inmemory(zi->ci.central_header+20,
!                                 (uLong)zi->ci.stream.total_out,4); /*compr size*/
      ziplocal_putValue_inmemory(zi->ci.central_header+24,
!                                 (uLong)zi->ci.stream.total_in,4); /*uncompr size*/
  
      if (err==ZIP_OK)
          err = add_data_in_datablock(&zi->central_dir,zi->ci.central_header,
--- 1022,1053 ----
          err=ZIP_OK; /* this is normal */
  
      if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))
!         if (zipFlushWriteBuffer(zi)==ZIP_ERRNO)
              err = ZIP_ERRNO;
  
!     if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
      {
          err=deflateEnd(&zi->ci.stream);
          zi->ci.stream_initialised = 0;
      }
  
!     if (!zi->ci.raw)
!     {
!         crc32 = (uLong)zi->ci.crc32;
!         uncompressed_size = (uLong)zi->ci.stream.total_in;
!     }
!     compressed_size = (uLong)zi->ci.stream.total_out;
! #    ifndef NOCRYPT
!     compressed_size += zi->ci.crypt_header_size;
! #    endif
! 
!     ziplocal_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/
      ziplocal_putValue_inmemory(zi->ci.central_header+20,
!                                 compressed_size,4); /*compr size*/
!     if (zi->ci.stream.data_type == Z_ASCII)
!         ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);
      ziplocal_putValue_inmemory(zi->ci.central_header+24,
!                                 uncompressed_size,4); /*uncompr size*/
  
      if (err==ZIP_OK)
          err = add_data_in_datablock(&zi->central_dir,zi->ci.central_header,
*************** extern int ZEXPORT zipCloseFileInZip (fi
*** 617,639 ****
  
      if (err==ZIP_OK)
      {
!         long cur_pos_inzip = ftell(zi->filezip);
! 	    if (fseek(zi->filezip,
!                   zi->ci.pos_local_header + 14,SEEK_SET)!=0)
! 		    err = ZIP_ERRNO;
  
          if (err==ZIP_OK)
!             err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.crc32,4); /* crc 32, unknown */
  
          if (err==ZIP_OK) /* compressed size, unknown */
!             err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.stream.total_out,4); 
  
          if (err==ZIP_OK) /* uncompressed size, unknown */
!             err = ziplocal_putValue(zi->filezip,(uLong)zi->ci.stream.total_in,4);
  
! 	    if (fseek(zi->filezip,
!                   cur_pos_inzip,SEEK_SET)!=0)
! 		    err = ZIP_ERRNO;
      }
  
      zi->number_entry ++;
--- 1056,1078 ----
  
      if (err==ZIP_OK)
      {
!         long cur_pos_inzip = ZTELL(zi->z_filefunc,zi->filestream);
!         if (ZSEEK(zi->z_filefunc,zi->filestream,
!                   zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)
!             err = ZIP_ERRNO;
  
          if (err==ZIP_OK)
!             err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
  
          if (err==ZIP_OK) /* compressed size, unknown */
!             err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
  
          if (err==ZIP_OK) /* uncompressed size, unknown */
!             err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
  
!         if (ZSEEK(zi->z_filefunc,zi->filestream,
!                   cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)
!             err = ZIP_ERRNO;
      }
  
      zi->number_entry ++;
*************** extern int ZEXPORT zipCloseFileInZip (fi
*** 642,647 ****
--- 1081,1092 ----
      return err;
  }
  
+ extern int ZEXPORT zipCloseFileInZip (file)
+     zipFile file;
+ {
+     return zipCloseFileInZipRaw (file,0,0);
+ }
+ 
  extern int ZEXPORT zipClose (file, global_comment)
      zipFile file;
      const char* global_comment;
*************** extern int ZEXPORT zipClose (file, globa
*** 666,680 ****
          size_global_comment = strlen(global_comment);
  
  
!     centraldir_pos_inzip = ftell(zi->filezip);
      if (err==ZIP_OK)
      {
          linkedlist_datablock_internal* ldi = zi->central_dir.first_block ;
          while (ldi!=NULL)
          {
              if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))
!                 if (fwrite(ldi->data,(uInt)ldi->filled_in_this_block,
!                                         1,zi->filezip) !=1 )
                      err = ZIP_ERRNO;
  
              size_centraldir += ldi->filled_in_this_block;
--- 1111,1126 ----
          size_global_comment = strlen(global_comment);
  
  
!     centraldir_pos_inzip = ZTELL(zi->z_filefunc,zi->filestream);
      if (err==ZIP_OK)
      {
          linkedlist_datablock_internal* ldi = zi->central_dir.first_block ;
          while (ldi!=NULL)
          {
              if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))
!                 if (ZWRITE(zi->z_filefunc,zi->filestream,
!                            ldi->data,ldi->filled_in_this_block)
!                               !=ldi->filled_in_this_block )
                      err = ZIP_ERRNO;
  
              size_centraldir += ldi->filled_in_this_block;
*************** extern int ZEXPORT zipClose (file, globa
*** 684,717 ****
      free_datablock(zi->central_dir.first_block);
  
      if (err==ZIP_OK) /* Magic End */
!         err = ziplocal_putValue(zi->filezip,(uLong)ENDHEADERMAGIC,4);
  
      if (err==ZIP_OK) /* number of this disk */
!         err = ziplocal_putValue(zi->filezip,(uLong)0,2);
  
      if (err==ZIP_OK) /* number of the disk with the start of the central directory */
!         err = ziplocal_putValue(zi->filezip,(uLong)0,2);
  
      if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
!         err = ziplocal_putValue(zi->filezip,(uLong)zi->number_entry,2);
  
      if (err==ZIP_OK) /* total number of entries in the central dir */
!         err = ziplocal_putValue(zi->filezip,(uLong)zi->number_entry,2);
  
      if (err==ZIP_OK) /* size of the central directory */
!         err = ziplocal_putValue(zi->filezip,(uLong)size_centraldir,4);
  
!     if (err==ZIP_OK) /* offset of start of central directory with respect to the 
! 	                        starting disk number */
!         err = ziplocal_putValue(zi->filezip,(uLong)centraldir_pos_inzip ,4);
  
      if (err==ZIP_OK) /* zipfile comment length */
!         err = ziplocal_putValue(zi->filezip,(uLong)size_global_comment,2);
  
      if ((err==ZIP_OK) && (size_global_comment>0))
!         if (fwrite(global_comment,(uInt)size_global_comment,1,zi->filezip) !=1 )
                  err = ZIP_ERRNO;
!     fclose(zi->filezip);
      TRYFREE(zi);
  
      return err;
--- 1130,1169 ----
      free_datablock(zi->central_dir.first_block);
  
      if (err==ZIP_OK) /* Magic End */
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
  
      if (err==ZIP_OK) /* number of this disk */
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
  
      if (err==ZIP_OK) /* number of the disk with the start of the central directory */
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
  
      if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
  
      if (err==ZIP_OK) /* total number of entries in the central dir */
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
  
      if (err==ZIP_OK) /* size of the central directory */
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);
  
!     if (err==ZIP_OK) /* offset of start of central directory with respect to the
!                             starting disk number */
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,
!                                 (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
  
      if (err==ZIP_OK) /* zipfile comment length */
!         err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);
  
      if ((err==ZIP_OK) && (size_global_comment>0))
!         if (ZWRITE(zi->z_filefunc,zi->filestream,
!                    global_comment,size_global_comment) != size_global_comment)
                  err = ZIP_ERRNO;
! 
!     if (ZCLOSE(zi->z_filefunc,zi->filestream) != 0)
!         if (err == ZIP_OK)
!             err = ZIP_ERRNO;
! 
      TRYFREE(zi);
  
      return err;
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/zip.def gcc-4.0.0/zlib/contrib/minizip/zip.def
*** gcc-3.4.3/zlib/contrib/minizip/zip.def	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/zip.def	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- 	zipOpen                       @80
- 	zipOpenNewFileInZip           @81
- 	zipWriteInFileInZip           @82
- 	zipCloseFileInZip             @83
- 	zipClose                      @84
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/zip.h gcc-4.0.0/zlib/contrib/minizip/zip.h
*** gcc-3.4.3/zlib/contrib/minizip/zip.h	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/zip.h	Mon Oct 11 18:45:41 2004
***************
*** 1,7 ****
! /* zip.h -- IO for compress .zip files using zlib 
!    Version 0.15 alpha, Mar 19th, 1998,
  
!    Copyright (C) 1998 Gilles Vollant
  
     This unzip package allow creates .ZIP file, compatible with PKZip 2.04g
       WinZip, InfoZip tools and compatible.
--- 1,7 ----
! /* zip.h -- IO for compress .zip files using zlib
!    Version 1.00, September 10th, 2003
  
!    Copyright (C) 1998-2003 Gilles Vollant
  
     This unzip package allow creates .ZIP file, compatible with PKZip 2.04g
       WinZip, InfoZip tools and compatible.
***************
*** 10,19 ****
  
    For uncompress .zip file, look at unzip.h
  
!    THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE
!    CAN CHANGE IN FUTURE VERSION !!
     I WAIT FEEDBACK at mail info@winimage.com
!    Visit also http://www.winimage.com/zLibDll/zip.htm for evolution
  
     Condition of use and distribution are the same than zlib :
  
--- 10,18 ----
  
    For uncompress .zip file, look at unzip.h
  
! 
     I WAIT FEEDBACK at mail info@winimage.com
!    Visit also http://www.winimage.com/zLibDll/unzip.html for evolution
  
     Condition of use and distribution are the same than zlib :
  
***************
*** 36,43 ****
  
  */
  
! /* for more info about .ZIP format, see 
!       ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip
     PkWare has also a specification at :
        ftp://ftp.pkware.com/probdesc.zip
  */
--- 35,43 ----
  
  */
  
! /* for more info about .ZIP format, see
!       http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip
!       http://www.info-zip.org/pub/infozip/doc/
     PkWare has also a specification at :
        ftp://ftp.pkware.com/probdesc.zip
  */
*************** extern "C" {
*** 53,86 ****
  #include "zlib.h"
  #endif
  
  #if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
  /* like the STRICT of WIN32, we define a pointer that cannot be converted
      from (void*) without cast */
! typedef struct TagzipFile__ { int unused; } zipFile__; 
  typedef zipFile__ *zipFile;
  #else
  typedef voidp zipFile;
  #endif
  
! #define ZIP_OK                                  (0)
! #define ZIP_ERRNO               (Z_ERRNO)
  #define ZIP_PARAMERROR                  (-102)
  #define ZIP_INTERNALERROR               (-104)
  
  /* tm_zip contain date/time info */
! typedef struct tm_zip_s 
  {
! 	uInt tm_sec;            /* seconds after the minute - [0,59] */
! 	uInt tm_min;            /* minutes after the hour - [0,59] */
! 	uInt tm_hour;           /* hours since midnight - [0,23] */
! 	uInt tm_mday;           /* day of the month - [1,31] */
! 	uInt tm_mon;            /* months since January - [0,11] */
! 	uInt tm_year;           /* years - [1980..2044] */
  } tm_zip;
  
  typedef struct
  {
! 	tm_zip      tmz_date;       /* date in understandable format           */
      uLong       dosDate;       /* if dos_date == 0, tmu_date is used      */
  /*    uLong       flag;        */   /* general purpose bit flag        2 bytes */
  
--- 53,101 ----
  #include "zlib.h"
  #endif
  
+ #ifndef _ZLIBIOAPI_H
+ #include "ioapi.h"
+ #endif
+ 
  #if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
  /* like the STRICT of WIN32, we define a pointer that cannot be converted
      from (void*) without cast */
! typedef struct TagzipFile__ { int unused; } zipFile__;
  typedef zipFile__ *zipFile;
  #else
  typedef voidp zipFile;
  #endif
  
! #define ZIP_OK                          (0)
! #define ZIP_EOF                         (0)
! #define ZIP_ERRNO                       (Z_ERRNO)
  #define ZIP_PARAMERROR                  (-102)
+ #define ZIP_BADZIPFILE                  (-103)
  #define ZIP_INTERNALERROR               (-104)
  
+ #ifndef DEF_MEM_LEVEL
+ #  if MAX_MEM_LEVEL >= 8
+ #    define DEF_MEM_LEVEL 8
+ #  else
+ #    define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+ #  endif
+ #endif
+ /* default memLevel */
+ 
  /* tm_zip contain date/time info */
! typedef struct tm_zip_s
  {
!     uInt tm_sec;            /* seconds after the minute - [0,59] */
!     uInt tm_min;            /* minutes after the hour - [0,59] */
!     uInt tm_hour;           /* hours since midnight - [0,23] */
!     uInt tm_mday;           /* day of the month - [1,31] */
!     uInt tm_mon;            /* months since January - [0,11] */
!     uInt tm_year;           /* years - [1980..2044] */
  } tm_zip;
  
  typedef struct
  {
!     tm_zip      tmz_date;       /* date in understandable format           */
      uLong       dosDate;       /* if dos_date == 0, tmu_date is used      */
  /*    uLong       flag;        */   /* general purpose bit flag        2 bytes */
  
*************** typedef struct
*** 88,117 ****
      uLong       external_fa;    /* external file attributes        4 bytes */
  } zip_fileinfo;
  
  extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
  /*
    Create a zipfile.
! 	 pathname contain on Windows NT a filename like "c:\\zlib\\zlib111.zip" or on
! 	   an Unix computer "zlib/zlib111.zip".
! 	 if the file pathname exist and append=1, the zip will be created at the end
! 	   of the file. (useful if the file contain a self extractor code)
! 	 If the zipfile cannot be opened, the return value is NULL.
       Else, the return value is a zipFile Handle, usable with other function
! 	   of this zip package.
! 
  
  */
  
  extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
! 					   const char* filename,
! 					   const zip_fileinfo* zipfi,
! 					   const void* extrafield_local,
! 					   uInt size_extrafield_local,
! 					   const void* extrafield_global,
! 					   uInt size_extrafield_global,
! 					   const char* comment,
! 					   int method,
! 					   int level));
  /*
    Open a file in the ZIP for writing.
    filename : the filename in zip (if NULL, '-' without quote will be used
--- 103,150 ----
      uLong       external_fa;    /* external file attributes        4 bytes */
  } zip_fileinfo;
  
+ typedef const char* zipcharpc;
+ 
+ 
+ #define APPEND_STATUS_CREATE        (0)
+ #define APPEND_STATUS_CREATEAFTER   (1)
+ #define APPEND_STATUS_ADDINZIP      (2)
+ 
  extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
  /*
    Create a zipfile.
!      pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
!        an Unix computer "zlib/zlib113.zip".
!      if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
!        will be created at the end of the file.
!          (useful if the file contain a self extractor code)
!      if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
!        add files in existing zip (be sure you don't add file that doesn't exist)
!      If the zipfile cannot be opened, the return value is NULL.
       Else, the return value is a zipFile Handle, usable with other function
!        of this zip package.
! */
  
+ /* Note : there is no delete function into a zipfile.
+    If you want delete file into a zipfile, you must open a zipfile, and create another
+    Of couse, you can use RAW reading and writing to copy the file you did not want delte
  */
  
+ extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
+                                    int append,
+                                    zipcharpc* globalcomment,
+                                    zlib_filefunc_def* pzlib_filefunc_def));
+ 
  extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
!                        const char* filename,
!                        const zip_fileinfo* zipfi,
!                        const void* extrafield_local,
!                        uInt size_extrafield_local,
!                        const void* extrafield_global,
!                        uInt size_extrafield_global,
!                        const char* comment,
!                        int method,
!                        int level));
  /*
    Open a file in the ZIP for writing.
    filename : the filename in zip (if NULL, '-' without quote will be used
*************** extern int ZEXPORT zipOpenNewFileInZip O
*** 125,133 ****
    level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
  */
  
  extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
! 					   const voidp buf,
! 					   unsigned len));
  /*
    Write data in the zipfile
  */
--- 158,208 ----
    level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
  */
  
+ 
+ extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
+                                             const char* filename,
+                                             const zip_fileinfo* zipfi,
+                                             const void* extrafield_local,
+                                             uInt size_extrafield_local,
+                                             const void* extrafield_global,
+                                             uInt size_extrafield_global,
+                                             const char* comment,
+                                             int method,
+                                             int level,
+                                             int raw));
+ 
+ /*
+   Same than zipOpenNewFileInZip, except if raw=1, we write raw file
+  */
+ 
+ extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
+                                             const char* filename,
+                                             const zip_fileinfo* zipfi,
+                                             const void* extrafield_local,
+                                             uInt size_extrafield_local,
+                                             const void* extrafield_global,
+                                             uInt size_extrafield_global,
+                                             const char* comment,
+                                             int method,
+                                             int level,
+                                             int raw,
+                                             int windowBits,
+                                             int memLevel,
+                                             int strategy,
+                                             const char* password,
+                                             uLong crcForCtypting));
+ 
+ /*
+   Same than zipOpenNewFileInZip2, except
+     windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
+     password : crypting password (NULL for no crypting)
+     crcForCtypting : crc of file to compress (needed for crypting)
+  */
+ 
+ 
  extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
!                        const void* buf,
!                        unsigned len));
  /*
    Write data in the zipfile
  */
*************** extern int ZEXPORT zipCloseFileInZip OF(
*** 137,144 ****
    Close the current file in the zipfile
  */
  
  extern int ZEXPORT zipClose OF((zipFile file,
! 				const char* global_comment));
  /*
    Close the zipfile
  */
--- 212,229 ----
    Close the current file in the zipfile
  */
  
+ 
+ extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
+                                             uLong uncompressed_size,
+                                             uLong crc32));
+ /*
+   Close the current file in the zipfile, for fiel opened with
+     parameter raw=1 in zipOpenNewFileInZip2
+   uncompressed_size and crc32 are value for the uncompressed size
+ */
+ 
  extern int ZEXPORT zipClose OF((zipFile file,
!                 const char* global_comment));
  /*
    Close the zipfile
  */
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/zlibvc.def gcc-4.0.0/zlib/contrib/minizip/zlibvc.def
*** gcc-3.4.3/zlib/contrib/minizip/zlibvc.def	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/zlibvc.def	Thu Jan  1 00:00:00 1970
***************
*** 1,74 ****
- LIBRARY		"zlib"
- 
- DESCRIPTION	'"""zlib data compression library"""'
- 
- 
- VERSION		1.11
- 
- 
- HEAPSIZE	1048576,8192
- 
- EXPORTS
-     adler32                        @1
-     compress                       @2
-     crc32                          @3
-     deflate                        @4
-     deflateCopy                    @5
-     deflateEnd                     @6
-     deflateInit2_                  @7
-     deflateInit_                   @8
-     deflateParams                  @9
-     deflateReset                   @10
-     deflateSetDictionary           @11
-     gzclose                        @12
-     gzdopen                        @13
-     gzerror                        @14
-     gzflush                        @15
-     gzopen                         @16
-     gzread                         @17
-     gzwrite                        @18
-     inflate                        @19
-     inflateEnd                     @20
-     inflateInit2_                  @21
-     inflateInit_                   @22
-     inflateReset                   @23
-     inflateSetDictionary           @24
-     inflateSync                    @25
-     uncompress                     @26
-     zlibVersion                    @27
-     gzprintf                       @28
-     gzputc                         @29
-     gzgetc                         @30
-     gzseek                         @31
-     gzrewind                       @32
-     gztell                         @33
-     gzeof                          @34
-     gzsetparams                    @35
-     zError                         @36
-     inflateSyncPoint               @37
-     get_crc_table                  @38
-     compress2                      @39
-     gzputs                         @40
-     gzgets                         @41
- 
- 	unzOpen                       @61
- 	unzClose                      @62
- 	unzGetGlobalInfo              @63
- 	unzGetCurrentFileInfo         @64
- 	unzGoToFirstFile              @65
- 	unzGoToNextFile               @66
- 	unzOpenCurrentFile            @67
- 	unzReadCurrentFile            @68
- 	unztell                       @70
- 	unzeof                        @71
- 	unzCloseCurrentFile           @72
- 	unzGetGlobalComment           @73
- 	unzStringFileNameCompare      @74
- 	unzLocateFile                 @75
- 	unzGetLocalExtrafield         @76
- 
- 	zipOpen                       @80
- 	zipOpenNewFileInZip           @81
- 	zipWriteInFileInZip           @82
- 	zipCloseFileInZip             @83
- 	zipClose                      @84
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/zlibvc.dsp gcc-4.0.0/zlib/contrib/minizip/zlibvc.dsp
*** gcc-3.4.3/zlib/contrib/minizip/zlibvc.dsp	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/zlibvc.dsp	Thu Jan  1 00:00:00 1970
***************
*** 1,651 ****
- # Microsoft Developer Studio Project File - Name="zlibvc" - Package Owner=<4>
- # Microsoft Developer Studio Generated Build File, Format Version 5.00
- # ** DO NOT EDIT **
- 
- # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
- # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602
- 
- CFG=zlibvc - Win32 Release
- !MESSAGE This is not a valid makefile. To build this project using NMAKE,
- !MESSAGE use the Export Makefile command and run
- !MESSAGE 
- !MESSAGE NMAKE /f "zlibvc.mak".
- !MESSAGE 
- !MESSAGE You can specify a configuration when running NMAKE
- !MESSAGE by defining the macro CFG on the command line. For example:
- !MESSAGE 
- !MESSAGE NMAKE /f "zlibvc.mak" CFG="zlibvc - Win32 Release"
- !MESSAGE 
- !MESSAGE Possible choices for configuration are:
- !MESSAGE 
- !MESSAGE "zlibvc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
- !MESSAGE "zlibvc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
- !MESSAGE "zlibvc - Win32 ReleaseAxp" (based on\
-  "Win32 (ALPHA) Dynamic-Link Library")
- !MESSAGE "zlibvc - Win32 ReleaseWithoutAsm" (based on\
-  "Win32 (x86) Dynamic-Link Library")
- !MESSAGE "zlibvc - Win32 ReleaseWithoutCrtdll" (based on\
-  "Win32 (x86) Dynamic-Link Library")
- !MESSAGE 
- 
- # Begin Project
- # PROP Scc_ProjName ""
- # PROP Scc_LocalPath ""
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 0
- # PROP BASE Output_Dir ".\Release"
- # PROP BASE Intermediate_Dir ".\Release"
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 0
- # PROP Output_Dir ".\Release"
- # PROP Intermediate_Dir ".\Release"
- # PROP Ignore_Export_Lib 0
- # PROP Target_Dir ""
- CPP=cl.exe
- # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
- # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /D "ASMV" /FAcs /FR /FD /c
- # SUBTRACT CPP /YX
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "NDEBUG" /win32
- # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "NDEBUG"
- # ADD RSC /l 0x40c /d "NDEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
- # ADD LINK32 gvmat32.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\Release\zlib.dll"
- # SUBTRACT LINK32 /pdb:none
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 1
- # PROP BASE Output_Dir ".\Debug"
- # PROP BASE Intermediate_Dir ".\Debug"
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 1
- # PROP Output_Dir ".\Debug"
- # PROP Intermediate_Dir ".\Debug"
- # PROP Target_Dir ""
- CPP=cl.exe
- # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
- # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /FD /c
- # SUBTRACT CPP /YX
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "_DEBUG" /win32
- # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "_DEBUG"
- # ADD RSC /l 0x40c /d "_DEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
- # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:".\Debug\zlib.dll"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 0
- # PROP BASE Output_Dir "zlibvc__"
- # PROP BASE Intermediate_Dir "zlibvc__"
- # PROP BASE Ignore_Export_Lib 0
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 0
- # PROP Output_Dir "zlibvc__"
- # PROP Intermediate_Dir "zlibvc__"
- # PROP Ignore_Export_Lib 0
- # PROP Target_Dir ""
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- CPP=cl.exe
- # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /YX /FD /c
- # ADD CPP /nologo /MT /Gt0 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /FD /c
- # SUBTRACT CPP /YX
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "NDEBUG"
- # ADD RSC /l 0x40c /d "NDEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 crtdll.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /map /machine:ALPHA /nodefaultlib /out:".\Release\zlib.dll"
- # SUBTRACT BASE LINK32 /pdb:none
- # ADD LINK32 crtdll.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /map /machine:ALPHA /nodefaultlib /out:"zlibvc__\zlib.dll"
- # SUBTRACT LINK32 /pdb:none
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 0
- # PROP BASE Output_Dir "zlibvc_0"
- # PROP BASE Intermediate_Dir "zlibvc_0"
- # PROP BASE Ignore_Export_Lib 0
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 0
- # PROP Output_Dir "zlibvc_0"
- # PROP Intermediate_Dir "zlibvc_0"
- # PROP Ignore_Export_Lib 0
- # PROP Target_Dir ""
- CPP=cl.exe
- # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /YX /FD /c
- # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /FAcs /FR /FD /c
- # SUBTRACT CPP /YX
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "NDEBUG"
- # ADD RSC /l 0x40c /d "NDEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\Release\zlib.dll"
- # SUBTRACT BASE LINK32 /pdb:none
- # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\zlibvc_0\zlib.dll"
- # SUBTRACT LINK32 /pdb:none
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- # PROP BASE Use_MFC 0
- # PROP BASE Use_Debug_Libraries 0
- # PROP BASE Output_Dir "zlibvc_1"
- # PROP BASE Intermediate_Dir "zlibvc_1"
- # PROP BASE Ignore_Export_Lib 0
- # PROP BASE Target_Dir ""
- # PROP Use_MFC 0
- # PROP Use_Debug_Libraries 0
- # PROP Output_Dir "zlibvc_1"
- # PROP Intermediate_Dir "zlibvc_1"
- # PROP Ignore_Export_Lib 0
- # PROP Target_Dir ""
- CPP=cl.exe
- # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /D "ASMV" /FAcs /FR /YX /FD /c
- # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "DYNAMIC_CRC_TABLE" /D "ASMV" /FAcs /FR /FD /c
- # SUBTRACT CPP /YX
- MTL=midl.exe
- # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
- RSC=rc.exe
- # ADD BASE RSC /l 0x40c /d "NDEBUG"
- # ADD RSC /l 0x40c /d "NDEBUG"
- BSC32=bscmake.exe
- # ADD BASE BSC32 /nologo
- # ADD BSC32 /nologo
- LINK32=link.exe
- # ADD BASE LINK32 gvmat32.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\Release\zlib.dll"
- # SUBTRACT BASE LINK32 /pdb:none
- # ADD LINK32 gvmat32.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\zlibvc_1\zlib.dll"
- # SUBTRACT LINK32 /pdb:none
- 
- !ENDIF 
- 
- # Begin Target
- 
- # Name "zlibvc - Win32 Release"
- # Name "zlibvc - Win32 Debug"
- # Name "zlibvc - Win32 ReleaseAxp"
- # Name "zlibvc - Win32 ReleaseWithoutAsm"
- # Name "zlibvc - Win32 ReleaseWithoutCrtdll"
- # Begin Group "Source Files"
- 
- # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
- # Begin Source File
- 
- SOURCE=.\adler32.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_ADLER=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\compress.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_COMPR=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\crc32.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_CRC32=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\deflate.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_DEFLA=\
- 	".\deflate.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\gvmat32c.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\gzio.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_GZIO_=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infblock.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFBL=\
- 	".\infblock.h"\
- 	".\infcodes.h"\
- 	".\inftrees.h"\
- 	".\infutil.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infcodes.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFCO=\
- 	".\infblock.h"\
- 	".\infcodes.h"\
- 	".\inffast.h"\
- 	".\inftrees.h"\
- 	".\infutil.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inffast.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFFA=\
- 	".\infblock.h"\
- 	".\infcodes.h"\
- 	".\inffast.h"\
- 	".\inftrees.h"\
- 	".\infutil.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inflate.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFLA=\
- 	".\infblock.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inftrees.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFTR=\
- 	".\inftrees.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infutil.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_INFUT=\
- 	".\infblock.h"\
- 	".\infcodes.h"\
- 	".\inftrees.h"\
- 	".\infutil.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\trees.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_TREES=\
- 	".\deflate.h"\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\uncompr.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_UNCOM=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\unzip.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zip.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zlib.rc
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zlibvc.def
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zutil.c
- 
- !IF  "$(CFG)" == "zlibvc - Win32 Release"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseAxp"
- 
- DEP_CPP_ZUTIL=\
- 	".\zconf.h"\
- 	".\zlib.h"\
- 	".\zutil.h"\
- 	
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm"
- 
- !ELSEIF  "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll"
- 
- !ENDIF 
- 
- # End Source File
- # End Group
- # Begin Group "Header Files"
- 
- # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
- # Begin Source File
- 
- SOURCE=.\deflate.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infblock.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infcodes.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inffast.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\inftrees.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\infutil.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zconf.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zlib.h
- # End Source File
- # Begin Source File
- 
- SOURCE=.\zutil.h
- # End Source File
- # End Group
- # Begin Group "Resource Files"
- 
- # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
- # End Group
- # End Target
- # End Project
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/minizip/zlibvc.dsw gcc-4.0.0/zlib/contrib/minizip/zlibvc.dsw
*** gcc-3.4.3/zlib/contrib/minizip/zlibvc.dsw	Mon Mar 11 21:49:50 2002
--- gcc-4.0.0/zlib/contrib/minizip/zlibvc.dsw	Thu Jan  1 00:00:00 1970
***************
*** 1,41 ****
- Microsoft Developer Studio Workspace File, Format Version 5.00
- # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
- 
- ###############################################################################
- 
- Project: "zlibstat"=.\zlibstat.dsp - Package Owner=<4>
- 
- Package=<5>
- {{{
- }}}
- 
- Package=<4>
- {{{
- }}}
- 
- ###############################################################################
- 
- Project: "zlibvc"=.\zlibvc.dsp - Package Owner=<4>
- 
- Package=<5>
- {{{
- }}}
- 
- Package=<4>
- {{{
- }}}
- 
- ###############################################################################
- 
- Global:
- 
- Package=<5>
- {{{
- }}}
- 
- Package=<3>
- {{{
- }}}
- 
- ###############################################################################
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/pascal/example.pas gcc-4.0.0/zlib/contrib/pascal/example.pas
*** gcc-3.4.3/zlib/contrib/pascal/example.pas	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/pascal/example.pas	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,599 ----
+ (* example.c -- usage example of the zlib compression library
+  * Copyright (C) 1995-2003 Jean-loup Gailly.
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  *
+  * Pascal translation
+  * Copyright (C) 1998 by Jacques Nomssi Nzali.
+  * For conditions of distribution and use, see copyright notice in readme.txt
+  *
+  * Adaptation to the zlibpas interface
+  * Copyright (C) 2003 by Cosmin Truta.
+  * For conditions of distribution and use, see copyright notice in readme.txt
+  *)
+ 
+ program example;
+ 
+ {$DEFINE TEST_COMPRESS}
+ {DO NOT $DEFINE TEST_GZIO}
+ {$DEFINE TEST_DEFLATE}
+ {$DEFINE TEST_INFLATE}
+ {$DEFINE TEST_FLUSH}
+ {$DEFINE TEST_SYNC}
+ {$DEFINE TEST_DICT}
+ 
+ uses SysUtils, zlibpas;
+ 
+ const TESTFILE = 'foo.gz';
+ 
+ (* "hello world" would be more standard, but the repeated "hello"
+  * stresses the compression code better, sorry...
+  *)
+ const hello: PChar = 'hello, hello!';
+ 
+ const dictionary: PChar = 'hello';
+ 
+ var dictId: LongInt; (* Adler32 value of the dictionary *)
+ 
+ procedure CHECK_ERR(err: Integer; msg: String);
+ begin
+   if err <> Z_OK then
+   begin
+     WriteLn(msg, ' error: ', err);
+     Halt(1);
+   end;
+ end;
+ 
+ procedure EXIT_ERR(const msg: String);
+ begin
+   WriteLn('Error: ', msg);
+   Halt(1);
+ end;
+ 
+ (* ===========================================================================
+  * Test compress and uncompress
+  *)
+ {$IFDEF TEST_COMPRESS}
+ procedure test_compress(compr: Pointer; comprLen: LongInt;
+                         uncompr: Pointer; uncomprLen: LongInt);
+ var err: Integer;
+     len: LongInt;
+ begin
+   len := StrLen(hello)+1;
+ 
+   err := compress(compr, comprLen, hello, len);
+   CHECK_ERR(err, 'compress');
+ 
+   StrCopy(PChar(uncompr), 'garbage');
+ 
+   err := uncompress(uncompr, uncomprLen, compr, comprLen);
+   CHECK_ERR(err, 'uncompress');
+ 
+   if StrComp(PChar(uncompr), hello) <> 0 then
+     EXIT_ERR('bad uncompress')
+   else
+     WriteLn('uncompress(): ', PChar(uncompr));
+ end;
+ {$ENDIF}
+ 
+ (* ===========================================================================
+  * Test read/write of .gz files
+  *)
+ {$IFDEF TEST_GZIO}
+ procedure test_gzio(const fname: PChar; (* compressed file name *)
+                     uncompr: Pointer;
+                     uncomprLen: LongInt);
+ var err: Integer;
+     len: Integer;
+     zfile: gzFile;
+     pos: LongInt;
+ begin
+   len := StrLen(hello)+1;
+ 
+   zfile := gzopen(fname, 'wb');
+   if zfile = NIL then
+   begin
+     WriteLn('gzopen error');
+     Halt(1);
+   end;
+   gzputc(zfile, 'h');
+   if gzputs(zfile, 'ello') <> 4 then
+   begin
+     WriteLn('gzputs err: ', gzerror(zfile, err));
+     Halt(1);
+   end;
+   {$IFDEF GZ_FORMAT_STRING}
+   if gzprintf(zfile, ', %s!', 'hello') <> 8 then
+   begin
+     WriteLn('gzprintf err: ', gzerror(zfile, err));
+     Halt(1);
+   end;
+   {$ELSE}
+   if gzputs(zfile, ', hello!') <> 8 then
+   begin
+     WriteLn('gzputs err: ', gzerror(zfile, err));
+     Halt(1);
+   end;
+   {$ENDIF}
+   gzseek(zfile, 1, SEEK_CUR); (* add one zero byte *)
+   gzclose(zfile);
+ 
+   zfile := gzopen(fname, 'rb');
+   if zfile = NIL then
+   begin
+     WriteLn('gzopen error');
+     Halt(1);
+   end;
+ 
+   StrCopy(PChar(uncompr), 'garbage');
+ 
+   if gzread(zfile, uncompr, uncomprLen) <> len then
+   begin
+     WriteLn('gzread err: ', gzerror(zfile, err));
+     Halt(1);
+   end;
+   if StrComp(PChar(uncompr), hello) <> 0 then
+   begin
+     WriteLn('bad gzread: ', PChar(uncompr));
+     Halt(1);
+   end
+   else
+     WriteLn('gzread(): ', PChar(uncompr));
+ 
+   pos := gzseek(zfile, -8, SEEK_CUR);
+   if (pos <> 6) or (gztell(zfile) <> pos) then
+   begin
+     WriteLn('gzseek error, pos=', pos, ', gztell=', gztell(zfile));
+     Halt(1);
+   end;
+ 
+   if gzgetc(zfile) <> ' ' then
+   begin
+     WriteLn('gzgetc error');
+     Halt(1);
+   end;
+ 
+   if gzungetc(' ', zfile) <> ' ' then
+   begin
+     WriteLn('gzungetc error');
+     Halt(1);
+   end;
+ 
+   gzgets(zfile, PChar(uncompr), uncomprLen);
+   uncomprLen := StrLen(PChar(uncompr));
+   if uncomprLen <> 7 then (* " hello!" *)
+   begin
+     WriteLn('gzgets err after gzseek: ', gzerror(zfile, err));
+     Halt(1);
+   end;
+   if StrComp(PChar(uncompr), hello + 6) <> 0 then
+   begin
+     WriteLn('bad gzgets after gzseek');
+     Halt(1);
+   end
+   else
+     WriteLn('gzgets() after gzseek: ', PChar(uncompr));
+ 
+   gzclose(zfile);
+ end;
+ {$ENDIF}
+ 
+ (* ===========================================================================
+  * Test deflate with small buffers
+  *)
+ {$IFDEF TEST_DEFLATE}
+ procedure test_deflate(compr: Pointer; comprLen: LongInt);
+ var c_stream: z_stream; (* compression stream *)
+     err: Integer;
+     len: LongInt;
+ begin
+   len := StrLen(hello)+1;
+ 
+   c_stream.zalloc := NIL;
+   c_stream.zfree := NIL;
+   c_stream.opaque := NIL;
+ 
+   err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION);
+   CHECK_ERR(err, 'deflateInit');
+ 
+   c_stream.next_in := hello;
+   c_stream.next_out := compr;
+ 
+   while (c_stream.total_in <> len) and
+         (c_stream.total_out < comprLen) do
+   begin
+     c_stream.avail_out := 1; { force small buffers }
+     c_stream.avail_in := 1;
+     err := deflate(c_stream, Z_NO_FLUSH);
+     CHECK_ERR(err, 'deflate');
+   end;
+ 
+   (* Finish the stream, still forcing small buffers: *)
+   while TRUE do
+   begin
+     c_stream.avail_out := 1;
+     err := deflate(c_stream, Z_FINISH);
+     if err = Z_STREAM_END then
+       break;
+     CHECK_ERR(err, 'deflate');
+   end;
+ 
+   err := deflateEnd(c_stream);
+   CHECK_ERR(err, 'deflateEnd');
+ end;
+ {$ENDIF}
+ 
+ (* ===========================================================================
+  * Test inflate with small buffers
+  *)
+ {$IFDEF TEST_INFLATE}
+ procedure test_inflate(compr: Pointer; comprLen : LongInt;
+                        uncompr: Pointer; uncomprLen : LongInt);
+ var err: Integer;
+     d_stream: z_stream; (* decompression stream *)
+ begin
+   StrCopy(PChar(uncompr), 'garbage');
+ 
+   d_stream.zalloc := NIL;
+   d_stream.zfree := NIL;
+   d_stream.opaque := NIL;
+ 
+   d_stream.next_in := compr;
+   d_stream.avail_in := 0;
+   d_stream.next_out := uncompr;
+ 
+   err := inflateInit(d_stream);
+   CHECK_ERR(err, 'inflateInit');
+ 
+   while (d_stream.total_out < uncomprLen) and
+         (d_stream.total_in < comprLen) do
+   begin
+     d_stream.avail_out := 1; (* force small buffers *)
+     d_stream.avail_in := 1;
+     err := inflate(d_stream, Z_NO_FLUSH);
+     if err = Z_STREAM_END then
+       break;
+     CHECK_ERR(err, 'inflate');
+   end;
+ 
+   err := inflateEnd(d_stream);
+   CHECK_ERR(err, 'inflateEnd');
+ 
+   if StrComp(PChar(uncompr), hello) <> 0 then
+     EXIT_ERR('bad inflate')
+   else
+     WriteLn('inflate(): ', PChar(uncompr));
+ end;
+ {$ENDIF}
+ 
+ (* ===========================================================================
+  * Test deflate with large buffers and dynamic change of compression level
+  *)
+ {$IFDEF TEST_DEFLATE}
+ procedure test_large_deflate(compr: Pointer; comprLen: LongInt;
+                              uncompr: Pointer; uncomprLen: LongInt);
+ var c_stream: z_stream; (* compression stream *)
+     err: Integer;
+ begin
+   c_stream.zalloc := NIL;
+   c_stream.zfree := NIL;
+   c_stream.opaque := NIL;
+ 
+   err := deflateInit(c_stream, Z_BEST_SPEED);
+   CHECK_ERR(err, 'deflateInit');
+ 
+   c_stream.next_out := compr;
+   c_stream.avail_out := Integer(comprLen);
+ 
+   (* At this point, uncompr is still mostly zeroes, so it should compress
+    * very well:
+    *)
+   c_stream.next_in := uncompr;
+   c_stream.avail_in := Integer(uncomprLen);
+   err := deflate(c_stream, Z_NO_FLUSH);
+   CHECK_ERR(err, 'deflate');
+   if c_stream.avail_in <> 0 then
+     EXIT_ERR('deflate not greedy');
+ 
+   (* Feed in already compressed data and switch to no compression: *)
+   deflateParams(c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY);
+   c_stream.next_in := compr;
+   c_stream.avail_in := Integer(comprLen div 2);
+   err := deflate(c_stream, Z_NO_FLUSH);
+   CHECK_ERR(err, 'deflate');
+ 
+   (* Switch back to compressing mode: *)
+   deflateParams(c_stream, Z_BEST_COMPRESSION, Z_FILTERED);
+   c_stream.next_in := uncompr;
+   c_stream.avail_in := Integer(uncomprLen);
+   err := deflate(c_stream, Z_NO_FLUSH);
+   CHECK_ERR(err, 'deflate');
+ 
+   err := deflate(c_stream, Z_FINISH);
+   if err <> Z_STREAM_END then
+     EXIT_ERR('deflate should report Z_STREAM_END');
+ 
+   err := deflateEnd(c_stream);
+   CHECK_ERR(err, 'deflateEnd');
+ end;
+ {$ENDIF}
+ 
+ (* ===========================================================================
+  * Test inflate with large buffers
+  *)
+ {$IFDEF TEST_INFLATE}
+ procedure test_large_inflate(compr: Pointer; comprLen: LongInt;
+                              uncompr: Pointer; uncomprLen: LongInt);
+ var err: Integer;
+     d_stream: z_stream; (* decompression stream *)
+ begin
+   StrCopy(PChar(uncompr), 'garbage');
+ 
+   d_stream.zalloc := NIL;
+   d_stream.zfree := NIL;
+   d_stream.opaque := NIL;
+ 
+   d_stream.next_in := compr;
+   d_stream.avail_in := Integer(comprLen);
+ 
+   err := inflateInit(d_stream);
+   CHECK_ERR(err, 'inflateInit');
+ 
+   while TRUE do
+   begin
+     d_stream.next_out := uncompr;            (* discard the output *)
+     d_stream.avail_out := Integer(uncomprLen);
+     err := inflate(d_stream, Z_NO_FLUSH);
+     if err = Z_STREAM_END then
+       break;
+     CHECK_ERR(err, 'large inflate');
+   end;
+ 
+   err := inflateEnd(d_stream);
+   CHECK_ERR(err, 'inflateEnd');
+ 
+   if d_stream.total_out <> 2 * uncomprLen + comprLen div 2 then
+   begin
+     WriteLn('bad large inflate: ', d_stream.total_out);
+     Halt(1);
+   end
+   else
+     WriteLn('large_inflate(): OK');
+ end;
+ {$ENDIF}
+ 
+ (* ===========================================================================
+  * Test deflate with full flush
+  *)
+ {$IFDEF TEST_FLUSH}
+ procedure test_flush(compr: Pointer; var comprLen : LongInt);
+ var c_stream: z_stream; (* compression stream *)
+     err: Integer;
+     len: Integer;
+ begin
+   len := StrLen(hello)+1;
+ 
+   c_stream.zalloc := NIL;
+   c_stream.zfree := NIL;
+   c_stream.opaque := NIL;
+ 
+   err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION);
+   CHECK_ERR(err, 'deflateInit');
+ 
+   c_stream.next_in := hello;
+   c_stream.next_out := compr;
+   c_stream.avail_in := 3;
+   c_stream.avail_out := Integer(comprLen);
+   err := deflate(c_stream, Z_FULL_FLUSH);
+   CHECK_ERR(err, 'deflate');
+ 
+   Inc(PByteArray(compr)^[3]); (* force an error in first compressed block *)
+   c_stream.avail_in := len - 3;
+ 
+   err := deflate(c_stream, Z_FINISH);
+   if err <> Z_STREAM_END then
+     CHECK_ERR(err, 'deflate');
+ 
+   err := deflateEnd(c_stream);
+   CHECK_ERR(err, 'deflateEnd');
+ 
+   comprLen := c_stream.total_out;
+ end;
+ {$ENDIF}
+ 
+ (* ===========================================================================
+  * Test inflateSync()
+  *)
+ {$IFDEF TEST_SYNC}
+ procedure test_sync(compr: Pointer; comprLen: LongInt;
+                     uncompr: Pointer; uncomprLen : LongInt);
+ var err: Integer;
+     d_stream: z_stream; (* decompression stream *)
+ begin
+   StrCopy(PChar(uncompr), 'garbage');
+ 
+   d_stream.zalloc := NIL;
+   d_stream.zfree := NIL;
+   d_stream.opaque := NIL;
+ 
+   d_stream.next_in := compr;
+   d_stream.avail_in := 2; (* just read the zlib header *)
+ 
+   err := inflateInit(d_stream);
+   CHECK_ERR(err, 'inflateInit');
+ 
+   d_stream.next_out := uncompr;
+   d_stream.avail_out := Integer(uncomprLen);
+ 
+   inflate(d_stream, Z_NO_FLUSH);
+   CHECK_ERR(err, 'inflate');
+ 
+   d_stream.avail_in := Integer(comprLen-2);   (* read all compressed data *)
+   err := inflateSync(d_stream);               (* but skip the damaged part *)
+   CHECK_ERR(err, 'inflateSync');
+ 
+   err := inflate(d_stream, Z_FINISH);
+   if err <> Z_DATA_ERROR then
+     EXIT_ERR('inflate should report DATA_ERROR');
+     (* Because of incorrect adler32 *)
+ 
+   err := inflateEnd(d_stream);
+   CHECK_ERR(err, 'inflateEnd');
+ 
+   WriteLn('after inflateSync(): hel', PChar(uncompr));
+ end;
+ {$ENDIF}
+ 
+ (* ===========================================================================
+  * Test deflate with preset dictionary
+  *)
+ {$IFDEF TEST_DICT}
+ procedure test_dict_deflate(compr: Pointer; comprLen: LongInt);
+ var c_stream: z_stream; (* compression stream *)
+     err: Integer;
+ begin
+   c_stream.zalloc := NIL;
+   c_stream.zfree := NIL;
+   c_stream.opaque := NIL;
+ 
+   err := deflateInit(c_stream, Z_BEST_COMPRESSION);
+   CHECK_ERR(err, 'deflateInit');
+ 
+   err := deflateSetDictionary(c_stream, dictionary, StrLen(dictionary));
+   CHECK_ERR(err, 'deflateSetDictionary');
+ 
+   dictId := c_stream.adler;
+   c_stream.next_out := compr;
+   c_stream.avail_out := Integer(comprLen);
+ 
+   c_stream.next_in := hello;
+   c_stream.avail_in := StrLen(hello)+1;
+ 
+   err := deflate(c_stream, Z_FINISH);
+   if err <> Z_STREAM_END then
+     EXIT_ERR('deflate should report Z_STREAM_END');
+ 
+   err := deflateEnd(c_stream);
+   CHECK_ERR(err, 'deflateEnd');
+ end;
+ {$ENDIF}
+ 
+ (* ===========================================================================
+  * Test inflate with a preset dictionary
+  *)
+ {$IFDEF TEST_DICT}
+ procedure test_dict_inflate(compr: Pointer; comprLen: LongInt;
+                             uncompr: Pointer; uncomprLen: LongInt);
+ var err: Integer;
+     d_stream: z_stream; (* decompression stream *)
+ begin
+   StrCopy(PChar(uncompr), 'garbage');
+ 
+   d_stream.zalloc := NIL;
+   d_stream.zfree := NIL;
+   d_stream.opaque := NIL;
+ 
+   d_stream.next_in := compr;
+   d_stream.avail_in := Integer(comprLen);
+ 
+   err := inflateInit(d_stream);
+   CHECK_ERR(err, 'inflateInit');
+ 
+   d_stream.next_out := uncompr;
+   d_stream.avail_out := Integer(uncomprLen);
+ 
+   while TRUE do
+   begin
+     err := inflate(d_stream, Z_NO_FLUSH);
+     if err = Z_STREAM_END then
+       break;
+     if err = Z_NEED_DICT then
+     begin
+       if d_stream.adler <> dictId then
+         EXIT_ERR('unexpected dictionary');
+       err := inflateSetDictionary(d_stream, dictionary, StrLen(dictionary));
+     end;
+     CHECK_ERR(err, 'inflate with dict');
+   end;
+ 
+   err := inflateEnd(d_stream);
+   CHECK_ERR(err, 'inflateEnd');
+ 
+   if StrComp(PChar(uncompr), hello) <> 0 then
+     EXIT_ERR('bad inflate with dict')
+   else
+     WriteLn('inflate with dictionary: ', PChar(uncompr));
+ end;
+ {$ENDIF}
+ 
+ var compr, uncompr: Pointer;
+     comprLen, uncomprLen: LongInt;
+ 
+ begin
+   if zlibVersion^ <> ZLIB_VERSION[1] then
+     EXIT_ERR('Incompatible zlib version');
+ 
+   WriteLn('zlib version: ', zlibVersion);
+   WriteLn('zlib compile flags: ', Format('0x%x', [zlibCompileFlags]));
+ 
+   comprLen := 10000 * SizeOf(Integer); (* don't overflow on MSDOS *)
+   uncomprLen := comprLen;
+   GetMem(compr, comprLen);
+   GetMem(uncompr, uncomprLen);
+   if (compr = NIL) or (uncompr = NIL) then
+     EXIT_ERR('Out of memory');
+   (* compr and uncompr are cleared to avoid reading uninitialized
+    * data and to ensure that uncompr compresses well.
+    *)
+   FillChar(compr^, comprLen, 0);
+   FillChar(uncompr^, uncomprLen, 0);
+ 
+   {$IFDEF TEST_COMPRESS}
+   WriteLn('** Testing compress');
+   test_compress(compr, comprLen, uncompr, uncomprLen);
+   {$ENDIF}
+ 
+   {$IFDEF TEST_GZIO}
+   WriteLn('** Testing gzio');
+   if ParamCount >= 1 then
+     test_gzio(ParamStr(1), uncompr, uncomprLen)
+   else
+     test_gzio(TESTFILE, uncompr, uncomprLen);
+   {$ENDIF}
+ 
+   {$IFDEF TEST_DEFLATE}
+   WriteLn('** Testing deflate with small buffers');
+   test_deflate(compr, comprLen);
+   {$ENDIF}
+   {$IFDEF TEST_INFLATE}
+   WriteLn('** Testing inflate with small buffers');
+   test_inflate(compr, comprLen, uncompr, uncomprLen);
+   {$ENDIF}
+ 
+   {$IFDEF TEST_DEFLATE}
+   WriteLn('** Testing deflate with large buffers');
+   test_large_deflate(compr, comprLen, uncompr, uncomprLen);
+   {$ENDIF}
+   {$IFDEF TEST_INFLATE}
+   WriteLn('** Testing inflate with large buffers');
+   test_large_inflate(compr, comprLen, uncompr, uncomprLen);
+   {$ENDIF}
+ 
+   {$IFDEF TEST_FLUSH}
+   WriteLn('** Testing deflate with full flush');
+   test_flush(compr, comprLen);
+   {$ENDIF}
+   {$IFDEF TEST_SYNC}
+   WriteLn('** Testing inflateSync');
+   test_sync(compr, comprLen, uncompr, uncomprLen);
+   {$ENDIF}
+   comprLen := uncomprLen;
+ 
+   {$IFDEF TEST_DICT}
+   WriteLn('** Testing deflate and inflate with preset dictionary');
+   test_dict_deflate(compr, comprLen);
+   test_dict_inflate(compr, comprLen, uncompr, uncomprLen);
+   {$ENDIF}
+ 
+   FreeMem(compr, comprLen);
+   FreeMem(uncompr, uncomprLen);
+ end.
diff -Nrcpad gcc-3.4.3/zlib/contrib/pascal/readme.txt gcc-4.0.0/zlib/contrib/pascal/readme.txt
*** gcc-3.4.3/zlib/contrib/pascal/readme.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/pascal/readme.txt	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,76 ----
+ 
+ This directory contains a Pascal (Delphi, Kylix) interface to the
+ zlib data compression library.
+ 
+ 
+ Directory listing
+ =================
+ 
+ zlibd32.mak     makefile for Borland C++
+ example.pas     usage example of zlib
+ zlibpas.pas     the Pascal interface to zlib
+ readme.txt      this file
+ 
+ 
+ Compatibility notes
+ ===================
+ 
+ - Although the name "zlib" would have been more normal for the
+   zlibpas unit, this name is already taken by Borland's ZLib unit.
+   This is somehow unfortunate, because that unit is not a genuine
+   interface to the full-fledged zlib functionality, but a suite of
+   class wrappers around zlib streams.  Other essential features,
+   such as checksums, are missing.
+   It would have been more appropriate for that unit to have a name
+   like "ZStreams", or something similar.
+ 
+ - The C and zlib-supplied types int, uInt, long, uLong, etc. are
+   translated directly into Pascal types of similar sizes (Integer,
+   LongInt, etc.), to avoid namespace pollution.  In particular,
+   there is no conversion of unsigned int into a Pascal unsigned
+   integer.  The Word type is non-portable and has the same size
+   (16 bits) both in a 16-bit and in a 32-bit environment, unlike
+   Integer.  Even if there is a 32-bit Cardinal type, there is no
+   real need for unsigned int in zlib under a 32-bit environment.
+ 
+ - Except for the callbacks, the zlib function interfaces are
+   assuming the calling convention normally used in Pascal
+   (__pascal for DOS and Windows16, __fastcall for Windows32).
+   Since the cdecl keyword is used, the old Turbo Pascal does
+   not work with this interface.
+ 
+ - The gz* function interfaces are not translated, to avoid
+   interfacing problems with the C runtime library.  Besides,
+     gzprintf(gzFile file, const char *format, ...)
+   cannot be translated into Pascal.
+ 
+ 
+ Legal issues
+ ============
+ 
+ The zlibpas interface is:
+   Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler.
+   Copyright (C) 1998 by Bob Dellaca.
+   Copyright (C) 2003 by Cosmin Truta.
+ 
+ The example program is:
+   Copyright (C) 1995-2003 by Jean-loup Gailly.
+   Copyright (C) 1998,1999,2000 by Jacques Nomssi Nzali.
+   Copyright (C) 2003 by Cosmin Truta.
+ 
+   This software is provided 'as-is', without any express or implied
+   warranty.  In no event will the author be held liable for any damages
+   arising from the use of this software.
+ 
+   Permission is granted to anyone to use this software for any purpose,
+   including commercial applications, and to alter it and redistribute it
+   freely, subject to the following restrictions:
+ 
+   1. The origin of this software must not be misrepresented; you must not
+      claim that you wrote the original software. If you use this software
+      in a product, an acknowledgment in the product documentation would be
+      appreciated but is not required.
+   2. Altered source versions must be plainly marked as such, and must not be
+      misrepresented as being the original software.
+   3. This notice may not be removed or altered from any source distribution.
+ 
diff -Nrcpad gcc-3.4.3/zlib/contrib/pascal/zlibd32.mak gcc-4.0.0/zlib/contrib/pascal/zlibd32.mak
*** gcc-3.4.3/zlib/contrib/pascal/zlibd32.mak	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/pascal/zlibd32.mak	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,93 ----
+ # Makefile for zlib
+ # For use with Delphi and C++ Builder under Win32
+ # Updated for zlib 1.2.x by Cosmin Truta
+ 
+ # ------------ Borland C++ ------------
+ 
+ # This project uses the Delphi (fastcall/register) calling convention:
+ LOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl
+ 
+ CC = bcc32
+ LD = bcc32
+ AR = tlib
+ # do not use "-pr" in CFLAGS
+ CFLAGS = -a -d -k- -O2 $(LOC)
+ LDFLAGS =
+ 
+ 
+ # variables
+ ZLIB_LIB = zlib.lib
+ 
+ OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj
+ OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj
+ OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj
+ OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj
+ 
+ 
+ # targets
+ all: $(ZLIB_LIB) example.exe minigzip.exe
+ 
+ .c.obj:
+ 	$(CC) -c $(CFLAGS) $*.c
+ 
+ adler32.obj: adler32.c zlib.h zconf.h
+ 
+ compress.obj: compress.c zlib.h zconf.h
+ 
+ crc32.obj: crc32.c zlib.h zconf.h crc32.h
+ 
+ deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
+ 
+ gzio.obj: gzio.c zutil.h zlib.h zconf.h
+ 
+ infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+  inffast.h inffixed.h
+ 
+ inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+  inffast.h
+ 
+ inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+  inffast.h inffixed.h
+ 
+ inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
+ 
+ trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h
+ 
+ uncompr.obj: uncompr.c zlib.h zconf.h
+ 
+ zutil.obj: zutil.c zutil.h zlib.h zconf.h
+ 
+ example.obj: example.c zlib.h zconf.h
+ 
+ minigzip.obj: minigzip.c zlib.h zconf.h
+ 
+ 
+ # For the sake of the old Borland make,
+ # the command line is cut to fit in the MS-DOS 128 byte limit:
+ $(ZLIB_LIB): $(OBJ1) $(OBJ2)
+ 	-del $(ZLIB_LIB)
+ 	$(AR) $(ZLIB_LIB) $(OBJP1)
+ 	$(AR) $(ZLIB_LIB) $(OBJP2)
+ 
+ 
+ # testing
+ test: example.exe minigzip.exe
+ 	example
+ 	echo hello world | minigzip | minigzip -d
+ 
+ example.exe: example.obj $(ZLIB_LIB)
+ 	$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
+ 
+ minigzip.exe: minigzip.obj $(ZLIB_LIB)
+ 	$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)
+ 
+ 
+ # cleanup
+ clean:
+ 	-del *.obj
+ 	-del *.exe
+ 	-del *.lib
+ 	-del *.tds
+ 	-del zlib.bak
+ 	-del foo.gz
+ 
diff -Nrcpad gcc-3.4.3/zlib/contrib/pascal/zlibpas.pas gcc-4.0.0/zlib/contrib/pascal/zlibpas.pas
*** gcc-3.4.3/zlib/contrib/pascal/zlibpas.pas	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/pascal/zlibpas.pas	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,236 ----
+ (* zlibpas -- Pascal interface to the zlib data compression library
+  *
+  * Copyright (C) 2003 Cosmin Truta.
+  * Derived from original sources by Bob Dellaca.
+  * For conditions of distribution and use, see copyright notice in readme.txt
+  *)
+ 
+ unit zlibpas;
+ 
+ interface
+ 
+ const
+   ZLIB_VERSION = '1.2.1';
+ 
+ type
+   alloc_func = function(opaque: Pointer; items, size: Integer): Pointer;
+                  cdecl;
+   free_func  = procedure(opaque, address: Pointer);
+                  cdecl;
+ 
+   in_func    = function(opaque: Pointer; var buf: PByte): Integer;
+                  cdecl;
+   out_func   = function(opaque: Pointer; buf: PByte; size: Integer): Integer;
+                  cdecl;
+ 
+   z_streamp = ^z_stream;
+   z_stream = packed record
+     next_in: PChar;       (* next input byte *)
+     avail_in: Integer;    (* number of bytes available at next_in *)
+     total_in: LongInt;    (* total nb of input bytes read so far *)
+ 
+     next_out: PChar;      (* next output byte should be put there *)
+     avail_out: Integer;   (* remaining free space at next_out *)
+     total_out: LongInt;   (* total nb of bytes output so far *)
+ 
+     msg: PChar;           (* last error message, NULL if no error *)
+     state: Pointer;       (* not visible by applications *)
+ 
+     zalloc: alloc_func;   (* used to allocate the internal state *)
+     zfree: free_func;     (* used to free the internal state *)
+     opaque: Pointer;      (* private data object passed to zalloc and zfree *)
+ 
+     data_type: Integer;   (* best guess about the data type: ascii or binary *)
+     adler: LongInt;       (* adler32 value of the uncompressed data *)
+     reserved: LongInt;    (* reserved for future use *)
+   end;
+ 
+ (* constants *)
+ const
+   Z_NO_FLUSH      = 0;
+   Z_PARTIAL_FLUSH = 1;
+   Z_SYNC_FLUSH    = 2;
+   Z_FULL_FLUSH    = 3;
+   Z_FINISH        = 4;
+ 
+   Z_OK            =  0;
+   Z_STREAM_END    =  1;
+   Z_NEED_DICT     =  2;
+   Z_ERRNO         = -1;
+   Z_STREAM_ERROR  = -2;
+   Z_DATA_ERROR    = -3;
+   Z_MEM_ERROR     = -4;
+   Z_BUF_ERROR     = -5;
+   Z_VERSION_ERROR = -6;
+ 
+   Z_NO_COMPRESSION       =  0;
+   Z_BEST_SPEED           =  1;
+   Z_BEST_COMPRESSION     =  9;
+   Z_DEFAULT_COMPRESSION  = -1;
+ 
+   Z_FILTERED            = 1;
+   Z_HUFFMAN_ONLY        = 2;
+   Z_RLE                 = 3;
+   Z_DEFAULT_STRATEGY    = 0;
+ 
+   Z_BINARY   = 0;
+   Z_ASCII    = 1;
+   Z_UNKNOWN  = 2;
+ 
+   Z_DEFLATED = 8;
+ 
+ (* basic functions *)
+ function zlibVersion: PChar;
+ function deflateInit(var strm: z_stream; level: Integer): Integer;
+ function deflate(var strm: z_stream; flush: Integer): Integer;
+ function deflateEnd(var strm: z_stream): Integer;
+ function inflateInit(var strm: z_stream): Integer;
+ function inflate(var strm: z_stream; flush: Integer): Integer;
+ function inflateEnd(var strm: z_stream): Integer;
+ 
+ (* advanced functions *)
+ function deflateInit2(var strm: z_stream; level, method, windowBits,
+                       memLevel, strategy: Integer): Integer;
+ function deflateSetDictionary(var strm: z_stream; const dictionary: PChar;
+                               dictLength: Integer): Integer;
+ function deflateCopy(var dest, source: z_stream): Integer;
+ function deflateReset(var strm: z_stream): Integer;
+ function deflateParams(var strm: z_stream; level, strategy: Integer): Integer;
+ function deflateBound(var strm: z_stream; sourceLen: LongInt): LongInt;
+ function deflatePrime(var strm: z_stream; bits, value: Integer): Integer;
+ function inflateInit2(var strm: z_stream; windowBits: Integer): Integer;
+ function inflateSetDictionary(var strm: z_stream; const dictionary: PChar;
+                               dictLength: Integer): Integer;
+ function inflateSync(var strm: z_stream): Integer;
+ function inflateCopy(var dest, source: z_stream): Integer;
+ function inflateReset(var strm: z_stream): Integer;
+ function inflateBackInit(var strm: z_stream;
+                          windowBits: Integer; window: PChar): Integer;
+ function inflateBack(var strm: z_stream; in_fn: in_func; in_desc: Pointer;
+                      out_fn: out_func; out_desc: Pointer): Integer;
+ function inflateBackEnd(var strm: z_stream): Integer;
+ function zlibCompileFlags: LongInt;
+ 
+ (* utility functions *)
+ function compress(dest: PChar; var destLen: LongInt;
+                   const source: PChar; sourceLen: LongInt): Integer;
+ function compress2(dest: PChar; var destLen: LongInt;
+                   const source: PChar; sourceLen: LongInt;
+                   level: Integer): Integer;
+ function compressBound(sourceLen: LongInt): LongInt;
+ function uncompress(dest: PChar; var destLen: LongInt;
+                     const source: PChar; sourceLen: LongInt): Integer;
+ 
+ (* checksum functions *)
+ function adler32(adler: LongInt; const buf: PChar; len: Integer): LongInt;
+ function crc32(crc: LongInt; const buf: PChar; len: Integer): LongInt;
+ 
+ (* various hacks, don't look :) *)
+ function deflateInit_(var strm: z_stream; level: Integer;
+                       const version: PChar; stream_size: Integer): Integer;
+ function inflateInit_(var strm: z_stream; const version: PChar;
+                       stream_size: Integer): Integer;
+ function deflateInit2_(var strm: z_stream;
+                        level, method, windowBits, memLevel, strategy: Integer;
+                        const version: PChar; stream_size: Integer): Integer;
+ function inflateInit2_(var strm: z_stream; windowBits: Integer;
+                        const version: PChar; stream_size: Integer): Integer;
+ function inflateBackInit_(var strm: z_stream;
+                           windowBits: Integer; window: PChar;
+                           const version: PChar; stream_size: Integer): Integer;
+ 
+ 
+ implementation
+ 
+ {$L adler32.obj}
+ {$L compress.obj}
+ {$L crc32.obj}
+ {$L deflate.obj}
+ {$L infback.obj}
+ {$L inffast.obj}
+ {$L inflate.obj}
+ {$L inftrees.obj}
+ {$L trees.obj}
+ {$L uncompr.obj}
+ {$L zutil.obj}
+ 
+ function adler32; external;
+ function compress; external;
+ function compress2; external;
+ function compressBound; external;
+ function crc32; external;
+ function deflate; external;
+ function deflateBound; external;
+ function deflateCopy; external;
+ function deflateEnd; external;
+ function deflateInit_; external;
+ function deflateInit2_; external;
+ function deflateParams; external;
+ function deflatePrime; external;
+ function deflateReset; external;
+ function deflateSetDictionary; external;
+ function inflate; external;
+ function inflateBack; external;
+ function inflateBackEnd; external;
+ function inflateBackInit_; external;
+ function inflateCopy; external;
+ function inflateEnd; external;
+ function inflateInit_; external;
+ function inflateInit2_; external;
+ function inflateReset; external;
+ function inflateSetDictionary; external;
+ function inflateSync; external;
+ function uncompress; external;
+ function zlibCompileFlags; external;
+ function zlibVersion; external;
+ 
+ function deflateInit(var strm: z_stream; level: Integer): Integer;
+ begin
+   Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream));
+ end;
+ 
+ function deflateInit2(var strm: z_stream; level, method, windowBits, memLevel,
+                       strategy: Integer): Integer;
+ begin
+   Result := deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
+                           ZLIB_VERSION, sizeof(z_stream));
+ end;
+ 
+ function inflateInit(var strm: z_stream): Integer;
+ begin
+   Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream));
+ end;
+ 
+ function inflateInit2(var strm: z_stream; windowBits: Integer): Integer;
+ begin
+   Result := inflateInit2_(strm, windowBits, ZLIB_VERSION, sizeof(z_stream));
+ end;
+ 
+ function inflateBackInit(var strm: z_stream;
+                          windowBits: Integer; window: PChar): Integer;
+ begin
+   Result := inflateBackInit_(strm, windowBits, window,
+                              ZLIB_VERSION, sizeof(z_stream));
+ end;
+ 
+ function _malloc(Size: Integer): Pointer; cdecl;
+ begin
+   GetMem(Result, Size);
+ end;
+ 
+ procedure _free(Block: Pointer); cdecl;
+ begin
+   FreeMem(Block);
+ end;
+ 
+ procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl;
+ begin
+   FillChar(P^, count, B);
+ end;
+ 
+ procedure _memcpy(dest, source: Pointer; count: Integer); cdecl;
+ begin
+   Move(source^, dest^, count);
+ end;
+ 
+ end.
diff -Nrcpad gcc-3.4.3/zlib/contrib/puff/Makefile gcc-4.0.0/zlib/contrib/puff/Makefile
*** gcc-3.4.3/zlib/contrib/puff/Makefile	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/puff/Makefile	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,8 ----
+ puff: puff.c puff.h
+ 	cc -DTEST -o puff puff.c
+ 
+ test: puff
+ 	puff zeros.raw
+ 
+ clean:
+ 	rm -f puff puff.o
diff -Nrcpad gcc-3.4.3/zlib/contrib/puff/README gcc-4.0.0/zlib/contrib/puff/README
*** gcc-3.4.3/zlib/contrib/puff/README	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/puff/README	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,63 ----
+ Puff -- A Simple Inflate
+ 3 Mar 2003
+ Mark Adler
+ madler@alumni.caltech.edu
+ 
+ What this is --
+ 
+ puff.c provides the routine puff() to decompress the deflate data format.  It
+ does so more slowly than zlib, but the code is about one-fifth the size of the
+ inflate code in zlib, and written to be very easy to read.
+ 
+ Why I wrote this --
+ 
+ puff.c was written to document the deflate format unambiguously, by virtue of
+ being working C code.  It is meant to supplement RFC 1951, which formally
+ describes the deflate format.  I have received many questions on details of the
+ deflate format, and I hope that reading this code will answer those questions.
+ puff.c is heavily commented with details of the deflate format, especially
+ those little nooks and cranies of the format that might not be obvious from a
+ specification.
+ 
+ puff.c may also be useful in applications where code size or memory usage is a
+ very limited resource, and speed is not as important.
+ 
+ How to use it --
+ 
+ Well, most likely you should just be reading puff.c and using zlib for actual
+ applications, but if you must ...
+ 
+ Include puff.h in your code, which provides this prototype:
+ 
+ int puff(unsigned char *dest,           /* pointer to destination pointer */
+          unsigned long *destlen,        /* amount of output space */
+          unsigned char *source,         /* pointer to source data pointer */
+          unsigned long *sourcelen);     /* amount of input available */
+ 
+ Then you can call puff() to decompress a deflate stream that is in memory in
+ its entirety at source, to a sufficiently sized block of memory for the
+ decompressed data at dest.  puff() is the only external symbol in puff.c  The
+ only C library functions that puff.c needs are setjmp() and longjmp(), which
+ are used to simplify error checking in the code to improve readabilty.  puff.c
+ does no memory allocation, and uses less than 2K bytes off of the stack.
+ 
+ If destlen is not enough space for the uncompressed data, then inflate will
+ return an error without writing more than destlen bytes.  Note that this means
+ that in order to decompress the deflate data successfully, you need to know
+ the size of the uncompressed data ahead of time.
+ 
+ If needed, puff() can determine the size of the uncompressed data with no
+ output space.  This is done by passing dest equal to (unsigned char *)0.  Then
+ the initial value of *destlen is ignored and *destlen is set to the length of
+ the uncompressed data.  So if the size of the uncompressed data is not known,
+ then two passes of puff() can be used--first to determine the size, and second
+ to do the actual inflation after allocating the appropriate memory.  Not
+ pretty, but it works.  (This is one of the reasons you should be using zlib.)
+ 
+ The deflate format is self-terminating.  If the deflate stream does not end
+ in *sourcelen bytes, puff() will return an error without reading at or past
+ endsource.
+ 
+ On return, *sourcelen is updated to the amount of input data consumed, and
+ *destlen is updated to the size of the uncompressed data.  See the comments
+ in puff.c for the possible return codes for puff().
diff -Nrcpad gcc-3.4.3/zlib/contrib/puff/puff.c gcc-4.0.0/zlib/contrib/puff/puff.c
*** gcc-3.4.3/zlib/contrib/puff/puff.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/puff/puff.c	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,833 ----
+ /*
+  * puff.c
+  * Copyright (C) 2002, 2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in puff.h
+  * version 1.7, 3 Mar 2003
+  *
+  * puff.c is a simple inflate written to be an unambiguous way to specify the
+  * deflate format.  It is not written for speed but rather simplicity.  As a
+  * side benefit, this code might actually be useful when small code is more
+  * important than speed, such as bootstrap applications.  For typical deflate
+  * data, zlib's inflate() is about four times as fast as puff().  zlib's
+  * inflate compiles to around 20K on my machine, whereas puff.c compiles to
+  * around 4K on my machine (a PowerPC using GNU cc).  If the faster decode()
+  * function here is used, then puff() is only twice as slow as zlib's
+  * inflate().
+  *
+  * All dynamically allocated memory comes from the stack.  The stack required
+  * is less than 2K bytes.  This code is compatible with 16-bit int's and
+  * assumes that long's are at least 32 bits.  puff.c uses the short data type,
+  * assumed to be 16 bits, for arrays in order to to conserve memory.  The code
+  * works whether integers are stored big endian or little endian.
+  *
+  * In the comments below are "Format notes" that describe the inflate process
+  * and document some of the less obvious aspects of the format.  This source
+  * code is meant to supplement RFC 1951, which formally describes the deflate
+  * format:
+  *
+  *    http://www.zlib.org/rfc-deflate.html
+  */
+ 
+ /*
+  * Change history:
+  *
+  * 1.0  10 Feb 2002     - First version
+  * 1.1  17 Feb 2002     - Clarifications of some comments and notes
+  *                      - Update puff() dest and source pointers on negative
+  *                        errors to facilitate debugging deflators
+  *                      - Remove longest from struct huffman -- not needed
+  *                      - Simplify offs[] index in construct()
+  *                      - Add input size and checking, using longjmp() to
+  *                        maintain easy readability
+  *                      - Use short data type for large arrays
+  *                      - Use pointers instead of long to specify source and
+  *                        destination sizes to avoid arbitrary 4 GB limits
+  * 1.2  17 Mar 2002     - Add faster version of decode(), doubles speed (!),
+  *                        but leave simple version for readabilty
+  *                      - Make sure invalid distances detected if pointers
+  *                        are 16 bits
+  *                      - Fix fixed codes table error
+  *                      - Provide a scanning mode for determining size of
+  *                        uncompressed data
+  * 1.3  20 Mar 2002     - Go back to lengths for puff() parameters [Jean-loup]
+  *                      - Add a puff.h file for the interface
+  *                      - Add braces in puff() for else do [Jean-loup]
+  *                      - Use indexes instead of pointers for readability
+  * 1.4  31 Mar 2002     - Simplify construct() code set check
+  *                      - Fix some comments
+  *                      - Add FIXLCODES #define
+  * 1.5   6 Apr 2002     - Minor comment fixes
+  * 1.6   7 Aug 2002     - Minor format changes
+  * 1.7   3 Mar 2003     - Added test code for distribution
+  *                      - Added zlib-like license
+  */
+ 
+ #include <setjmp.h>             /* for setjmp(), longjmp(), and jmp_buf */
+ #include "puff.h"               /* prototype for puff() */
+ 
+ #define local static            /* for local function definitions */
+ #define NIL ((unsigned char *)0)        /* for no output option */
+ 
+ /*
+  * Maximums for allocations and loops.  It is not useful to change these --
+  * they are fixed by the deflate format.
+  */
+ #define MAXBITS 15              /* maximum bits in a code */
+ #define MAXLCODES 286           /* maximum number of literal/length codes */
+ #define MAXDCODES 30            /* maximum number of distance codes */
+ #define MAXCODES (MAXLCODES+MAXDCODES)  /* maximum codes lengths to read */
+ #define FIXLCODES 288           /* number of fixed literal/length codes */
+ 
+ /* input and output state */
+ struct state {
+     /* output state */
+     unsigned char *out;         /* output buffer */
+     unsigned long outlen;       /* available space at out */
+     unsigned long outcnt;       /* bytes written to out so far */
+ 
+     /* input state */
+     unsigned char *in;          /* input buffer */
+     unsigned long inlen;        /* available input at in */
+     unsigned long incnt;        /* bytes read so far */
+     int bitbuf;                 /* bit buffer */
+     int bitcnt;                 /* number of bits in bit buffer */
+ 
+     /* input limit error return state for bits() and decode() */
+     jmp_buf env;
+ };
+ 
+ /*
+  * Return need bits from the input stream.  This always leaves less than
+  * eight bits in the buffer.  bits() works properly for need == 0.
+  *
+  * Format notes:
+  *
+  * - Bits are stored in bytes from the least significant bit to the most
+  *   significant bit.  Therefore bits are dropped from the bottom of the bit
+  *   buffer, using shift right, and new bytes are appended to the top of the
+  *   bit buffer, using shift left.
+  */
+ local int bits(struct state *s, int need)
+ {
+     long val;           /* bit accumulator (can use up to 20 bits) */
+ 
+     /* load at least need bits into val */
+     val = s->bitbuf;
+     while (s->bitcnt < need) {
+         if (s->incnt == s->inlen) longjmp(s->env, 1);   /* out of input */
+         val |= (long)(s->in[s->incnt++]) << s->bitcnt;  /* load eight bits */
+         s->bitcnt += 8;
+     }
+ 
+     /* drop need bits and update buffer, always zero to seven bits left */
+     s->bitbuf = (int)(val >> need);
+     s->bitcnt -= need;
+ 
+     /* return need bits, zeroing the bits above that */
+     return (int)(val & ((1L << need) - 1));
+ }
+ 
+ /*
+  * Process a stored block.
+  *
+  * Format notes:
+  *
+  * - After the two-bit stored block type (00), the stored block length and
+  *   stored bytes are byte-aligned for fast copying.  Therefore any leftover
+  *   bits in the byte that has the last bit of the type, as many as seven, are
+  *   discarded.  The value of the discarded bits are not defined and should not
+  *   be checked against any expectation.
+  *
+  * - The second inverted copy of the stored block length does not have to be
+  *   checked, but it's probably a good idea to do so anyway.
+  *
+  * - A stored block can have zero length.  This is sometimes used to byte-align
+  *   subsets of the compressed data for random access or partial recovery.
+  */
+ local int stored(struct state *s)
+ {
+     unsigned len;       /* length of stored block */
+ 
+     /* discard leftover bits from current byte (assumes s->bitcnt < 8) */
+     s->bitbuf = 0;
+     s->bitcnt = 0;
+ 
+     /* get length and check against its one's complement */
+     if (s->incnt + 4 > s->inlen) return 2;      /* not enough input */
+     len = s->in[s->incnt++];
+     len |= s->in[s->incnt++] << 8;
+     if (s->in[s->incnt++] != (~len & 0xff) ||
+         s->in[s->incnt++] != ((~len >> 8) & 0xff))
+         return -2;                              /* didn't match complement! */
+ 
+     /* copy len bytes from in to out */
+     if (s->incnt + len > s->inlen) return 2;    /* not enough input */
+     if (s->out != NIL) {
+         if (s->outcnt + len > s->outlen)
+             return 1;                           /* not enough output space */
+         while (len--)
+             s->out[s->outcnt++] = s->in[s->incnt++];
+     }
+     else {                                      /* just scanning */
+         s->outcnt += len;
+         s->incnt += len;
+     }
+ 
+     /* done with a valid stored block */
+     return 0;
+ }
+ 
+ /*
+  * Huffman code decoding tables.  count[1..MAXBITS] is the number of symbols of
+  * each length, which for a canonical code are stepped through in order.
+  * symbol[] are the symbol values in canonical order, where the number of
+  * entries is the sum of the counts in count[].  The decoding process can be
+  * seen in the function decode() below.
+  */
+ struct huffman {
+     short *count;       /* number of symbols of each length */
+     short *symbol;      /* canonically ordered symbols */
+ };
+ 
+ /*
+  * Decode a code from the stream s using huffman table h.  Return the symbol or
+  * a negative value if there is an error.  If all of the lengths are zero, i.e.
+  * an empty code, or if the code is incomplete and an invalid code is received,
+  * then -9 is returned after reading MAXBITS bits.
+  *
+  * Format notes:
+  *
+  * - The codes as stored in the compressed data are bit-reversed relative to
+  *   a simple integer ordering of codes of the same lengths.  Hence below the
+  *   bits are pulled from the compressed data one at a time and used to
+  *   build the code value reversed from what is in the stream in order to
+  *   permit simple integer comparisons for decoding.  A table-based decoding
+  *   scheme (as used in zlib) does not need to do this reversal.
+  *
+  * - The first code for the shortest length is all zeros.  Subsequent codes of
+  *   the same length are simply integer increments of the previous code.  When
+  *   moving up a length, a zero bit is appended to the code.  For a complete
+  *   code, the last code of the longest length will be all ones.
+  *
+  * - Incomplete codes are handled by this decoder, since they are permitted
+  *   in the deflate format.  See the format notes for fixed() and dynamic().
+  */
+ #ifdef SLOW
+ local int decode(struct state *s, struct huffman *h)
+ {
+     int len;            /* current number of bits in code */
+     int code;           /* len bits being decoded */
+     int first;          /* first code of length len */
+     int count;          /* number of codes of length len */
+     int index;          /* index of first code of length len in symbol table */
+ 
+     code = first = index = 0;
+     for (len = 1; len <= MAXBITS; len++) {
+         code |= bits(s, 1);             /* get next bit */
+         count = h->count[len];
+         if (code < first + count)       /* if length len, return symbol */
+             return h->symbol[index + (code - first)];
+         index += count;                 /* else update for next length */
+         first += count;
+         first <<= 1;
+         code <<= 1;
+     }
+     return -9;                          /* ran out of codes */
+ }
+ 
+ /*
+  * A faster version of decode() for real applications of this code.   It's not
+  * as readable, but it makes puff() twice as fast.  And it only makes the code
+  * a few percent larger.
+  */
+ #else /* !SLOW */
+ local int decode(struct state *s, struct huffman *h)
+ {
+     int len;            /* current number of bits in code */
+     int code;           /* len bits being decoded */
+     int first;          /* first code of length len */
+     int count;          /* number of codes of length len */
+     int index;          /* index of first code of length len in symbol table */
+     int bitbuf;         /* bits from stream */
+     int left;           /* bits left in next or left to process */
+     short *next;        /* next number of codes */
+ 
+     bitbuf = s->bitbuf;
+     left = s->bitcnt;
+     code = first = index = 0;
+     len = 1;
+     next = h->count + 1;
+     while (1) {
+         while (left--) {
+             code |= bitbuf & 1;
+             bitbuf >>= 1;
+             count = *next++;
+             if (code < first + count) { /* if length len, return symbol */
+                 s->bitbuf = bitbuf;
+                 s->bitcnt = (s->bitcnt - len) & 7;
+                 return h->symbol[index + (code - first)];
+             }
+             index += count;             /* else update for next length */
+             first += count;
+             first <<= 1;
+             code <<= 1;
+             len++;
+         }
+         left = (MAXBITS+1) - len;
+         if (left == 0) break;
+         if (s->incnt == s->inlen) longjmp(s->env, 1);   /* out of input */
+         bitbuf = s->in[s->incnt++];
+         if (left > 8) left = 8;
+     }
+     return -9;                          /* ran out of codes */
+ }
+ #endif /* SLOW */
+ 
+ /*
+  * Given the list of code lengths length[0..n-1] representing a canonical
+  * Huffman code for n symbols, construct the tables required to decode those
+  * codes.  Those tables are the number of codes of each length, and the symbols
+  * sorted by length, retaining their original order within each length.  The
+  * return value is zero for a complete code set, negative for an over-
+  * subscribed code set, and positive for an incomplete code set.  The tables
+  * can be used if the return value is zero or positive, but they cannot be used
+  * if the return value is negative.  If the return value is zero, it is not
+  * possible for decode() using that table to return an error--any stream of
+  * enough bits will resolve to a symbol.  If the return value is positive, then
+  * it is possible for decode() using that table to return an error for received
+  * codes past the end of the incomplete lengths.
+  *
+  * Not used by decode(), but used for error checking, h->count[0] is the number
+  * of the n symbols not in the code.  So n - h->count[0] is the number of
+  * codes.  This is useful for checking for incomplete codes that have more than
+  * one symbol, which is an error in a dynamic block.
+  *
+  * Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS
+  * This is assured by the construction of the length arrays in dynamic() and
+  * fixed() and is not verified by construct().
+  *
+  * Format notes:
+  *
+  * - Permitted and expected examples of incomplete codes are one of the fixed
+  *   codes and any code with a single symbol which in deflate is coded as one
+  *   bit instead of zero bits.  See the format notes for fixed() and dynamic().
+  *
+  * - Within a given code length, the symbols are kept in ascending order for
+  *   the code bits definition.
+  */
+ local int construct(struct huffman *h, short *length, int n)
+ {
+     int symbol;         /* current symbol when stepping through length[] */
+     int len;            /* current length when stepping through h->count[] */
+     int left;           /* number of possible codes left of current length */
+     short offs[MAXBITS+1];      /* offsets in symbol table for each length */
+ 
+     /* count number of codes of each length */
+     for (len = 0; len <= MAXBITS; len++)
+         h->count[len] = 0;
+     for (symbol = 0; symbol < n; symbol++)
+         (h->count[length[symbol]])++;   /* assumes lengths are within bounds */
+     if (h->count[0] == n)               /* no codes! */
+         return 0;                       /* complete, but decode() will fail */
+ 
+     /* check for an over-subscribed or incomplete set of lengths */
+     left = 1;                           /* one possible code of zero length */
+     for (len = 1; len <= MAXBITS; len++) {
+         left <<= 1;                     /* one more bit, double codes left */
+         left -= h->count[len];          /* deduct count from possible codes */
+         if (left < 0) return left;      /* over-subscribed--return negative */
+     }                                   /* left > 0 means incomplete */
+ 
+     /* generate offsets into symbol table for each length for sorting */
+     offs[1] = 0;
+     for (len = 1; len < MAXBITS; len++)
+         offs[len + 1] = offs[len] + h->count[len];
+ 
+     /*
+      * put symbols in table sorted by length, by symbol order within each
+      * length
+      */
+     for (symbol = 0; symbol < n; symbol++)
+         if (length[symbol] != 0)
+             h->symbol[offs[length[symbol]]++] = symbol;
+ 
+     /* return zero for complete set, positive for incomplete set */
+     return left;
+ }
+ 
+ /*
+  * Decode literal/length and distance codes until an end-of-block code.
+  *
+  * Format notes:
+  *
+  * - Compressed data that is after the block type if fixed or after the code
+  *   description if dynamic is a combination of literals and length/distance
+  *   pairs terminated by and end-of-block code.  Literals are simply Huffman
+  *   coded bytes.  A length/distance pair is a coded length followed by a
+  *   coded distance to represent a string that occurs earlier in the
+  *   uncompressed data that occurs again at the current location.
+  *
+  * - Literals, lengths, and the end-of-block code are combined into a single
+  *   code of up to 286 symbols.  They are 256 literals (0..255), 29 length
+  *   symbols (257..285), and the end-of-block symbol (256).
+  *
+  * - There are 256 possible lengths (3..258), and so 29 symbols are not enough
+  *   to represent all of those.  Lengths 3..10 and 258 are in fact represented
+  *   by just a length symbol.  Lengths 11..257 are represented as a symbol and
+  *   some number of extra bits that are added as an integer to the base length
+  *   of the length symbol.  The number of extra bits is determined by the base
+  *   length symbol.  These are in the static arrays below, lens[] for the base
+  *   lengths and lext[] for the corresponding number of extra bits.
+  *
+  * - The reason that 258 gets its own symbol is that the longest length is used
+  *   often in highly redundant files.  Note that 258 can also be coded as the
+  *   base value 227 plus the maximum extra value of 31.  While a good deflate
+  *   should never do this, it is not an error, and should be decoded properly.
+  *
+  * - If a length is decoded, including its extra bits if any, then it is
+  *   followed a distance code.  There are up to 30 distance symbols.  Again
+  *   there are many more possible distances (1..32768), so extra bits are added
+  *   to a base value represented by the symbol.  The distances 1..4 get their
+  *   own symbol, but the rest require extra bits.  The base distances and
+  *   corresponding number of extra bits are below in the static arrays dist[]
+  *   and dext[].
+  *
+  * - Literal bytes are simply written to the output.  A length/distance pair is
+  *   an instruction to copy previously uncompressed bytes to the output.  The
+  *   copy is from distance bytes back in the output stream, copying for length
+  *   bytes.
+  *
+  * - Distances pointing before the beginning of the output data are not
+  *   permitted.
+  *
+  * - Overlapped copies, where the length is greater than the distance, are
+  *   allowed and common.  For example, a distance of one and a length of 258
+  *   simply copies the last byte 258 times.  A distance of four and a length of
+  *   twelve copies the last four bytes three times.  A simple forward copy
+  *   ignoring whether the length is greater than the distance or not implements
+  *   this correctly.  You should not use memcpy() since its behavior is not
+  *   defined for overlapped arrays.  You should not use memmove() or bcopy()
+  *   since though their behavior -is- defined for overlapping arrays, it is
+  *   defined to do the wrong thing in this case.
+  */
+ local int codes(struct state *s,
+                 struct huffman *lencode,
+                 struct huffman *distcode)
+ {
+     int symbol;         /* decoded symbol */
+     int len;            /* length for copy */
+     unsigned dist;      /* distance for copy */
+     static const short lens[29] = { /* Size base for length codes 257..285 */
+         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};
+     static const short lext[29] = { /* Extra bits for length codes 257..285 */
+         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};
+     static const short dists[30] = { /* Offset base for distance codes 0..29 */
+         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};
+     static const short dext[30] = { /* Extra bits for distance codes 0..29 */
+         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};
+ 
+     /* decode literals and length/distance pairs */
+     do {
+         symbol = decode(s, lencode);
+         if (symbol < 0) return symbol;  /* invalid symbol */
+         if (symbol < 256) {             /* literal: symbol is the byte */
+             /* write out the literal */
+             if (s->out != NIL) {
+                 if (s->outcnt == s->outlen) return 1;
+                 s->out[s->outcnt] = symbol;
+             }
+             s->outcnt++;
+         }
+         else if (symbol > 256) {        /* length */
+             /* get and compute length */
+             symbol -= 257;
+             if (symbol >= 29) return -9;        /* invalid fixed code */
+             len = lens[symbol] + bits(s, lext[symbol]);
+ 
+             /* get and check distance */
+             symbol = decode(s, distcode);
+             if (symbol < 0) return symbol;      /* invalid symbol */
+             dist = dists[symbol] + bits(s, dext[symbol]);
+             if (dist > s->outcnt)
+                 return -10;     /* distance too far back */
+ 
+             /* copy length bytes from distance bytes back */
+             if (s->out != NIL) {
+                 if (s->outcnt + len > s->outlen) return 1;
+                 while (len--) {
+                     s->out[s->outcnt] = s->out[s->outcnt - dist];
+                     s->outcnt++;
+                 }
+             }
+             else
+                 s->outcnt += len;
+         }
+     } while (symbol != 256);            /* end of block symbol */
+ 
+     /* done with a valid fixed or dynamic block */
+     return 0;
+ }
+ 
+ /*
+  * Process a fixed codes block.
+  *
+  * Format notes:
+  *
+  * - This block type can be useful for compressing small amounts of data for
+  *   which the size of the code descriptions in a dynamic block exceeds the
+  *   benefit of custom codes for that block.  For fixed codes, no bits are
+  *   spent on code descriptions.  Instead the code lengths for literal/length
+  *   codes and distance codes are fixed.  The specific lengths for each symbol
+  *   can be seen in the "for" loops below.
+  *
+  * - The literal/length code is complete, but has two symbols that are invalid
+  *   and should result in an error if received.  This cannot be implemented
+  *   simply as an incomplete code since those two symbols are in the "middle"
+  *   of the code.  They are eight bits long and the longest literal/length\
+  *   code is nine bits.  Therefore the code must be constructed with those
+  *   symbols, and the invalid symbols must be detected after decoding.
+  *
+  * - The fixed distance codes also have two invalid symbols that should result
+  *   in an error if received.  Since all of the distance codes are the same
+  *   length, this can be implemented as an incomplete code.  Then the invalid
+  *   codes are detected while decoding.
+  */
+ local int fixed(struct state *s)
+ {
+     static int virgin = 1;
+     static short lencnt[MAXBITS+1], lensym[FIXLCODES];
+     static short distcnt[MAXBITS+1], distsym[MAXDCODES];
+     static struct huffman lencode = {lencnt, lensym};
+     static struct huffman distcode = {distcnt, distsym};
+ 
+     /* build fixed huffman tables if first call (may not be thread safe) */
+     if (virgin) {
+         int symbol;
+         short lengths[FIXLCODES];
+ 
+         /* literal/length table */
+         for (symbol = 0; symbol < 144; symbol++)
+             lengths[symbol] = 8;
+         for (; symbol < 256; symbol++)
+             lengths[symbol] = 9;
+         for (; symbol < 280; symbol++)
+             lengths[symbol] = 7;
+         for (; symbol < FIXLCODES; symbol++)
+             lengths[symbol] = 8;
+         construct(&lencode, lengths, FIXLCODES);
+ 
+         /* distance table */
+         for (symbol = 0; symbol < MAXDCODES; symbol++)
+             lengths[symbol] = 5;
+         construct(&distcode, lengths, MAXDCODES);
+ 
+         /* do this just once */
+         virgin = 0;
+     }
+ 
+     /* decode data until end-of-block code */
+     return codes(s, &lencode, &distcode);
+ }
+ 
+ /*
+  * Process a dynamic codes block.
+  *
+  * Format notes:
+  *
+  * - A dynamic block starts with a description of the literal/length and
+  *   distance codes for that block.  New dynamic blocks allow the compressor to
+  *   rapidly adapt to changing data with new codes optimized for that data.
+  *
+  * - The codes used by the deflate format are "canonical", which means that
+  *   the actual bits of the codes are generated in an unambiguous way simply
+  *   from the number of bits in each code.  Therefore the code descriptions
+  *   are simply a list of code lengths for each symbol.
+  *
+  * - The code lengths are stored in order for the symbols, so lengths are
+  *   provided for each of the literal/length symbols, and for each of the
+  *   distance symbols.
+  *
+  * - If a symbol is not used in the block, this is represented by a zero as
+  *   as the code length.  This does not mean a zero-length code, but rather
+  *   that no code should be created for this symbol.  There is no way in the
+  *   deflate format to represent a zero-length code.
+  *
+  * - The maximum number of bits in a code is 15, so the possible lengths for
+  *   any code are 1..15.
+  *
+  * - The fact that a length of zero is not permitted for a code has an
+  *   interesting consequence.  Normally if only one symbol is used for a given
+  *   code, then in fact that code could be represented with zero bits.  However
+  *   in deflate, that code has to be at least one bit.  So for example, if
+  *   only a single distance base symbol appears in a block, then it will be
+  *   represented by a single code of length one, in particular one 0 bit.  This
+  *   is an incomplete code, since if a 1 bit is received, it has no meaning,
+  *   and should result in an error.  So incomplete distance codes of one symbol
+  *   should be permitted, and the receipt of invalid codes should be handled.
+  *
+  * - It is also possible to have a single literal/length code, but that code
+  *   must be the end-of-block code, since every dynamic block has one.  This
+  *   is not the most efficient way to create an empty block (an empty fixed
+  *   block is fewer bits), but it is allowed by the format.  So incomplete
+  *   literal/length codes of one symbol should also be permitted.
+  *
+  * - The list of up to 286 length/literal lengths and up to 30 distance lengths
+  *   are themselves compressed using Huffman codes and run-length encoding.  In
+  *   the list of code lengths, a 0 symbol means no code, a 1..15 symbol means
+  *   that length, and the symbols 16, 17, and 18 are run-length instructions.
+  *   Each of 16, 17, and 18 are follwed by extra bits to define the length of
+  *   the run.  16 copies the last length 3 to 6 times.  17 represents 3 to 10
+  *   zero lengths, and 18 represents 11 to 138 zero lengths.  Unused symbols
+  *   are common, hence the special coding for zero lengths.
+  *
+  * - The symbols for 0..18 are Huffman coded, and so that code must be
+  *   described first.  This is simply a sequence of up to 19 three-bit values
+  *   representing no code (0) or the code length for that symbol (1..7).
+  *
+  * - A dynamic block starts with three fixed-size counts from which is computed
+  *   the number of literal/length code lengths, the number of distance code
+  *   lengths, and the number of code length code lengths (ok, you come up with
+  *   a better name!) in the code descriptions.  For the literal/length and
+  *   distance codes, lengths after those provided are considered zero, i.e. no
+  *   code.  The code length code lengths are received in a permuted order (see
+  *   the order[] array below) to make a short code length code length list more
+  *   likely.  As it turns out, very short and very long codes are less likely
+  *   to be seen in a dynamic code description, hence what may appear initially
+  *   to be a peculiar ordering.
+  *
+  * - Given the number of literal/length code lengths (nlen) and distance code
+  *   lengths (ndist), then they are treated as one long list of nlen + ndist
+  *   code lengths.  Therefore run-length coding can and often does cross the
+  *   boundary between the two sets of lengths.
+  *
+  * - So to summarize, the code description at the start of a dynamic block is
+  *   three counts for the number of code lengths for the literal/length codes,
+  *   the distance codes, and the code length codes.  This is followed by the
+  *   code length code lengths, three bits each.  This is used to construct the
+  *   code length code which is used to read the remainder of the lengths.  Then
+  *   the literal/length code lengths and distance lengths are read as a single
+  *   set of lengths using the code length codes.  Codes are constructed from
+  *   the resulting two sets of lengths, and then finally you can start
+  *   decoding actual compressed data in the block.
+  *
+  * - For reference, a "typical" size for the code description in a dynamic
+  *   block is around 80 bytes.
+  */
+ local int dynamic(struct state *s)
+ {
+     int nlen, ndist, ncode;             /* number of lengths in descriptor */
+     int index;                          /* index of lengths[] */
+     int err;                            /* construct() return value */
+     short lengths[MAXCODES];            /* descriptor code lengths */
+     short lencnt[MAXBITS+1], lensym[MAXLCODES];         /* lencode memory */
+     short distcnt[MAXBITS+1], distsym[MAXDCODES];       /* distcode memory */
+     struct huffman lencode = {lencnt, lensym};          /* length code */
+     struct huffman distcode = {distcnt, distsym};       /* distance code */
+     static const short order[19] =      /* permutation of code length codes */
+         {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+ 
+     /* get number of lengths in each table, check lengths */
+     nlen = bits(s, 5) + 257;
+     ndist = bits(s, 5) + 1;
+     ncode = bits(s, 4) + 4;
+     if (nlen > MAXLCODES || ndist > MAXDCODES)
+         return -3;                      /* bad counts */
+ 
+     /* read code length code lengths (really), missing lengths are zero */
+     for (index = 0; index < ncode; index++)
+         lengths[order[index]] = bits(s, 3);
+     for (; index < 19; index++)
+         lengths[order[index]] = 0;
+ 
+     /* build huffman table for code lengths codes (use lencode temporarily) */
+     err = construct(&lencode, lengths, 19);
+     if (err != 0) return -4;            /* require complete code set here */
+ 
+     /* read length/literal and distance code length tables */
+     index = 0;
+     while (index < nlen + ndist) {
+         int symbol;             /* decoded value */
+         int len;                /* last length to repeat */
+ 
+         symbol = decode(s, &lencode);
+         if (symbol < 16)                /* length in 0..15 */
+             lengths[index++] = symbol;
+         else {                          /* repeat instruction */
+             len = 0;                    /* assume repeating zeros */
+             if (symbol == 16) {         /* repeat last length 3..6 times */
+                 if (index == 0) return -5;      /* no last length! */
+                 len = lengths[index - 1];       /* last length */
+                 symbol = 3 + bits(s, 2);
+             }
+             else if (symbol == 17)      /* repeat zero 3..10 times */
+                 symbol = 3 + bits(s, 3);
+             else                        /* == 18, repeat zero 11..138 times */
+                 symbol = 11 + bits(s, 7);
+             if (index + symbol > nlen + ndist)
+                 return -6;              /* too many lengths! */
+             while (symbol--)            /* repeat last or zero symbol times */
+                 lengths[index++] = len;
+         }
+     }
+ 
+     /* build huffman table for literal/length codes */
+     err = construct(&lencode, lengths, nlen);
+     if (err < 0 || (err > 0 && nlen - lencode.count[0] != 1))
+         return -7;      /* only allow incomplete codes if just one code */
+ 
+     /* build huffman table for distance codes */
+     err = construct(&distcode, lengths + nlen, ndist);
+     if (err < 0 || (err > 0 && ndist - distcode.count[0] != 1))
+         return -8;      /* only allow incomplete codes if just one code */
+ 
+     /* decode data until end-of-block code */
+     return codes(s, &lencode, &distcode);
+ }
+ 
+ /*
+  * Inflate source to dest.  On return, destlen and sourcelen are updated to the
+  * size of the uncompressed data and the size of the deflate data respectively.
+  * On success, the return value of puff() is zero.  If there is an error in the
+  * source data, i.e. it is not in the deflate format, then a negative value is
+  * returned.  If there is not enough input available or there is not enough
+  * output space, then a positive error is returned.  In that case, destlen and
+  * sourcelen are not updated to facilitate retrying from the beginning with the
+  * provision of more input data or more output space.  In the case of invalid
+  * inflate data (a negative error), the dest and source pointers are updated to
+  * facilitate the debugging of deflators.
+  *
+  * puff() also has a mode to determine the size of the uncompressed output with
+  * no output written.  For this dest must be (unsigned char *)0.  In this case,
+  * the input value of *destlen is ignored, and on return *destlen is set to the
+  * size of the uncompressed output.
+  *
+  * The return codes are:
+  *
+  *   2:  available inflate data did not terminate
+  *   1:  output space exhausted before completing inflate
+  *   0:  successful inflate
+  *  -1:  invalid block type (type == 3)
+  *  -2:  stored block length did not match one's complement
+  *  -3:  dynamic block code description: too many length or distance codes
+  *  -4:  dynamic block code description: code lengths codes incomplete
+  *  -5:  dynamic block code description: repeat lengths with no first length
+  *  -6:  dynamic block code description: repeat more than specified lengths
+  *  -7:  dynamic block code description: invalid literal/length code lengths
+  *  -8:  dynamic block code description: invalid distance code lengths
+  *  -9:  invalid literal/length or distance code in fixed or dynamic block
+  * -10:  distance is too far back in fixed or dynamic block
+  *
+  * Format notes:
+  *
+  * - Three bits are read for each block to determine the kind of block and
+  *   whether or not it is the last block.  Then the block is decoded and the
+  *   process repeated if it was not the last block.
+  *
+  * - The leftover bits in the last byte of the deflate data after the last
+  *   block (if it was a fixed or dynamic block) are undefined and have no
+  *   expected values to check.
+  */
+ int puff(unsigned char *dest,           /* pointer to destination pointer */
+          unsigned long *destlen,        /* amount of output space */
+          unsigned char *source,         /* pointer to source data pointer */
+          unsigned long *sourcelen)      /* amount of input available */
+ {
+     struct state s;             /* input/output state */
+     int last, type;             /* block information */
+     int err;                    /* return value */
+ 
+     /* initialize output state */
+     s.out = dest;
+     s.outlen = *destlen;                /* ignored if dest is NIL */
+     s.outcnt = 0;
+ 
+     /* initialize input state */
+     s.in = source;
+     s.inlen = *sourcelen;
+     s.incnt = 0;
+     s.bitbuf = 0;
+     s.bitcnt = 0;
+ 
+     /* return if bits() or decode() tries to read past available input */
+     if (setjmp(s.env) != 0)             /* if came back here via longjmp() */
+         err = 2;                        /* then skip do-loop, return error */
+     else {
+         /* process blocks until last block or error */
+         do {
+             last = bits(&s, 1);         /* one if last block */
+             type = bits(&s, 2);         /* block type 0..3 */
+             err = type == 0 ? stored(&s) :
+                   (type == 1 ? fixed(&s) :
+                    (type == 2 ? dynamic(&s) :
+                     -1));               /* type == 3, invalid */
+             if (err != 0) break;        /* return with error */
+         } while (!last);
+     }
+ 
+     /* update the lengths and return */
+     if (err <= 0) {
+         *destlen = s.outcnt;
+         *sourcelen = s.incnt;
+     }
+     return err;
+ }
+ 
+ #ifdef TEST
+ /* Example of how to use puff() */
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ 
+ local unsigned char *yank(char *name, unsigned long *len)
+ {
+     unsigned long size;
+     unsigned char *buf;
+     FILE *in;
+     struct stat s;
+ 
+     *len = 0;
+     if (stat(name, &s)) return NULL;
+     if ((s.st_mode & S_IFMT) != S_IFREG) return NULL;
+     size = (unsigned long)(s.st_size);
+     if (size == 0 || (off_t)size != s.st_size) return NULL;
+     in = fopen(name, "r");
+     if (in == NULL) return NULL;
+     buf = malloc(size);
+     if (buf != NULL && fread(buf, 1, size, in) != size) {
+         free(buf);
+         buf = NULL;
+     }
+     fclose(in);
+     *len = size;
+     return buf;
+ }
+ 
+ int main(int argc, char **argv)
+ {
+     int ret;
+     unsigned char *source;
+     unsigned long len, sourcelen, destlen;
+ 
+     if (argc < 2) return 2;
+     source = yank(argv[1], &len);
+     if (source == NULL) return 2;
+     sourcelen = len;
+     ret = puff(NIL, &destlen, source, &sourcelen);
+     if (ret)
+         printf("puff() failed with return code %d\n", ret);
+     else {
+         printf("puff() succeeded uncompressing %lu bytes\n", destlen);
+         if (sourcelen < len) printf("%lu compressed bytes unused\n",
+                                     len - sourcelen);
+     }
+     free(source);
+     return ret;
+ }
+ #endif
diff -Nrcpad gcc-3.4.3/zlib/contrib/puff/puff.h gcc-4.0.0/zlib/contrib/puff/puff.h
*** gcc-3.4.3/zlib/contrib/puff/puff.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/puff/puff.h	Mon Oct 11 17:44:22 2004
***************
*** 0 ****
--- 1,31 ----
+ /* puff.h
+   Copyright (C) 2002, 2003 Mark Adler, all rights reserved
+   version 1.7, 3 Mar 2002
+ 
+   This software is provided 'as-is', without any express or implied
+   warranty.  In no event will the author be held liable for any damages
+   arising from the use of this software.
+ 
+   Permission is granted to anyone to use this software for any purpose,
+   including commercial applications, and to alter it and redistribute it
+   freely, subject to the following restrictions:
+ 
+   1. The origin of this software must not be misrepresented; you must not
+      claim that you wrote the original software. If you use this software
+      in a product, an acknowledgment in the product documentation would be
+      appreciated but is not required.
+   2. Altered source versions must be plainly marked as such, and must not be
+      misrepresented as being the original software.
+   3. This notice may not be removed or altered from any source distribution.
+ 
+   Mark Adler    madler@alumni.caltech.edu
+  */
+ 
+ 
+ /*
+  * See puff.c for purpose and usage.
+  */
+ int puff(unsigned char *dest,           /* pointer to destination pointer */
+          unsigned long *destlen,        /* amount of output space */
+          unsigned char *source,         /* pointer to source data pointer */
+          unsigned long *sourcelen);     /* amount of input available */
diff -Nrcpad gcc-3.4.3/zlib/contrib/puff/zeros.raw gcc-4.0.0/zlib/contrib/puff/zeros.raw
*** gcc-3.4.3/zlib/contrib/puff/zeros.raw	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/puff/zeros.raw	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1 ----
+ íÁ�Ã ùS_áUp
\ No newline at end of file
diff -Nrcpad gcc-3.4.3/zlib/contrib/testzlib/testzlib.c gcc-4.0.0/zlib/contrib/testzlib/testzlib.c
*** gcc-3.4.3/zlib/contrib/testzlib/testzlib.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/testzlib/testzlib.c	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,149 ----
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <windows.h>
+ #include "zlib.h"
+ 
+ int ReadFileMemory(const char* filename,long* plFileSize,void** pFilePtr)
+ {
+     FILE* stream;
+     void* ptr;
+     int retVal=1;
+     stream=fopen(filename, "rb");
+     if (stream==NULL)
+         return 0;
+ 
+     fseek(stream,0,SEEK_END);
+ 
+     *plFileSize=ftell(stream);
+     fseek(stream,0,SEEK_SET);
+     ptr=malloc((*plFileSize)+1);
+     if (ptr==NULL)
+         retVal=0;
+     else
+     {
+         if (fread(ptr, 1, *plFileSize,stream) != (*plFileSize))
+             retVal=0;
+     }
+     fclose(stream);
+     *pFilePtr=ptr;
+     return retVal;
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+     int BlockSizeCompress=0x8000;
+     int BlockSizeUncompress=0x8000;
+     int cprLevel=Z_DEFAULT_COMPRESSION ;
+     long lFileSize;
+     unsigned char* FilePtr;
+     long lBufferSizeCpr;
+     long lBufferSizeUncpr;
+     long lCompressedSize=0;
+     unsigned char* CprPtr;
+     unsigned char* UncprPtr;
+     long lSizeCpr,lSizeUncpr;
+     DWORD dwGetTick;
+ 
+     if (argc<=1)
+     {
+         printf("run TestZlib <File> [BlockSizeCompress] [BlockSizeUncompress] [compres. level]\n");
+         return 0;
+     }
+ 
+     if (ReadFileMemory(argv[1],&lFileSize,&FilePtr)==0)
+     {
+         printf("error reading %s\n",argv[1]);
+         return 1;
+     }
+     else printf("file %s read, %u bytes\n",argv[1],lFileSize);
+ 
+     if (argc>=3)
+         BlockSizeCompress=atol(argv[2]);
+ 
+     if (argc>=4)
+         BlockSizeUncompress=atol(argv[3]);
+ 
+     if (argc>=5)
+         cprLevel=(int)atol(argv[4]);
+ 
+     lBufferSizeCpr = lFileSize + (lFileSize/0x10) + 0x200;
+     lBufferSizeUncpr = lBufferSizeCpr;
+ 
+     CprPtr=(unsigned char*)malloc(lBufferSizeCpr + BlockSizeCompress);
+     UncprPtr=(unsigned char*)malloc(lBufferSizeUncpr + BlockSizeUncompress);
+ 
+     dwGetTick=GetTickCount();
+     {
+         z_stream zcpr;
+         int ret=Z_OK;
+         long lOrigToDo = lFileSize;
+         long lOrigDone = 0;
+         int step=0;
+         memset(&zcpr,0,sizeof(z_stream));
+         deflateInit(&zcpr,cprLevel);
+ 
+         zcpr.next_in = FilePtr;
+         zcpr.next_out = CprPtr;
+ 
+ 
+         do
+         {
+             long all_read_before = zcpr.total_in;
+             zcpr.avail_in = min(lOrigToDo,BlockSizeCompress);
+             zcpr.avail_out = BlockSizeCompress;
+             ret=deflate(&zcpr,(zcpr.avail_in==lOrigToDo) ? Z_FINISH : Z_SYNC_FLUSH);
+             lOrigDone += (zcpr.total_in-all_read_before);
+             lOrigToDo -= (zcpr.total_in-all_read_before);
+             step++;
+         } while (ret==Z_OK);
+ 
+         lSizeCpr=zcpr.total_out;
+         deflateEnd(&zcpr);
+         dwGetTick=GetTickCount()-dwGetTick;
+         printf("total compress size = %u, in %u step\n",lSizeCpr,step);
+         printf("time = %u msec = %f sec\n\n",dwGetTick,dwGetTick/(double)1000.);
+     }
+ 
+     dwGetTick=GetTickCount();
+     {
+         z_stream zcpr;
+         int ret=Z_OK;
+         long lOrigToDo = lSizeCpr;
+         long lOrigDone = 0;
+         int step=0;
+         memset(&zcpr,0,sizeof(z_stream));
+         inflateInit(&zcpr);
+ 
+         zcpr.next_in = CprPtr;
+         zcpr.next_out = UncprPtr;
+ 
+ 
+         do
+         {
+             long all_read_before = zcpr.total_in;
+             zcpr.avail_in = min(lOrigToDo,BlockSizeUncompress);
+             zcpr.avail_out = BlockSizeUncompress;
+             ret=inflate(&zcpr,Z_SYNC_FLUSH);
+             lOrigDone += (zcpr.total_in-all_read_before);
+             lOrigToDo -= (zcpr.total_in-all_read_before);
+             step++;
+         } while (ret==Z_OK);
+ 
+         lSizeUncpr=zcpr.total_out;
+         inflateEnd(&zcpr);
+         dwGetTick=GetTickCount()-dwGetTick;
+         printf("total uncompress size = %u, in %u step\n",lSizeUncpr,step);
+         printf("time = %u msec = %f sec\n\n",dwGetTick,dwGetTick/(double)1000.);
+     }
+ 
+     if (lSizeUncpr==lFileSize)
+     {
+         if (memcmp(FilePtr,UncprPtr,lFileSize)==0)
+             printf("compare ok\n");
+ 
+     }
+ 
+     return 0;
+ 
+ }
diff -Nrcpad gcc-3.4.3/zlib/contrib/testzlib/testzlib.sln gcc-4.0.0/zlib/contrib/testzlib/testzlib.sln
*** gcc-3.4.3/zlib/contrib/testzlib/testzlib.sln	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/testzlib/testzlib.sln	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,21 ----
+ Microsoft Visual Studio Solution File, Format Version 7.00
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"
+ EndProject
+ Global
+ 	GlobalSection(SolutionConfiguration) = preSolution
+ 		ConfigName.0 = Debug
+ 		ConfigName.1 = Release
+ 	EndGlobalSection
+ 	GlobalSection(ProjectDependencies) = postSolution
+ 	EndGlobalSection
+ 	GlobalSection(ProjectConfiguration) = postSolution
+ 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug.ActiveCfg = Debug|Win32
+ 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug.Build.0 = Debug|Win32
+ 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release.ActiveCfg = Release|Win32
+ 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release.Build.0 = Release|Win32
+ 	EndGlobalSection
+ 	GlobalSection(ExtensibilityGlobals) = postSolution
+ 	EndGlobalSection
+ 	GlobalSection(ExtensibilityAddIns) = postSolution
+ 	EndGlobalSection
+ EndGlobal
diff -Nrcpad gcc-3.4.3/zlib/contrib/testzlib/testzlib.vcproj gcc-4.0.0/zlib/contrib/testzlib/testzlib.vcproj
*** gcc-3.4.3/zlib/contrib/testzlib/testzlib.vcproj	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/testzlib/testzlib.vcproj	Mon Oct 11 17:44:20 2004
***************
*** 0 ****
--- 1,124 ----
+ <?xml version="1.0" encoding = "Windows-1252"?>
+ <VisualStudioProject
+ 	ProjectType="Visual C++"
+ 	Version="7.00"
+ 	Name="testzlib"
+ 	ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"
+ 	Keyword="Win32Proj">
+ 	<Platforms>
+ 		<Platform
+ 			Name="Win32"/>
+ 	</Platforms>
+ 	<Configurations>
+ 		<Configuration
+ 			Name="Debug|Win32"
+ 			OutputDirectory="Debug"
+ 			IntermediateDirectory="Debug"
+ 			ConfigurationType="1"
+ 			CharacterSet="2">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				Optimization="0"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE"
+ 				MinimalRebuild="TRUE"
+ 				BasicRuntimeChecks="3"
+ 				RuntimeLibrary="5"
+ 				UsePrecompiledHeader="0"
+ 				WarningLevel="3"
+ 				Detect64BitPortabilityProblems="TRUE"
+ 				DebugInformationFormat="4"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				OutputFile="$(OutDir)/testzlib.exe"
+ 				LinkIncremental="2"
+ 				GenerateDebugInformation="TRUE"
+ 				ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ 				SubSystem="1"
+ 				TargetMachine="1"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="Release|Win32"
+ 			OutputDirectory="Release"
+ 			IntermediateDirectory="Release"
+ 			ConfigurationType="1"
+ 			CharacterSet="2">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				Optimization="2"
+ 				InlineFunctionExpansion="1"
+ 				OmitFramePointers="TRUE"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ 				StringPooling="TRUE"
+ 				RuntimeLibrary="4"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				UsePrecompiledHeader="0"
+ 				WarningLevel="3"
+ 				Detect64BitPortabilityProblems="TRUE"
+ 				DebugInformationFormat="3"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				OutputFile="$(OutDir)/testzlib.exe"
+ 				LinkIncremental="1"
+ 				GenerateDebugInformation="TRUE"
+ 				SubSystem="1"
+ 				OptimizeReferences="2"
+ 				EnableCOMDATFolding="2"
+ 				OptimizeForWindows98="1"
+ 				TargetMachine="1"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 	</Configurations>
+ 	<Files>
+ 		<Filter
+ 			Name="Source Files"
+ 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
+ 			<File
+ 				RelativePath="testzlib.c">
+ 			</File>
+ 		</Filter>
+ 		<Filter
+ 			Name="Header Files"
+ 			Filter="h;hpp;hxx;hm;inl;inc">
+ 		</Filter>
+ 		<Filter
+ 			Name="Resource Files"
+ 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ 		</Filter>
+ 		<File
+ 			RelativePath="zlibwapi.lib">
+ 		</File>
+ 	</Files>
+ 	<Globals>
+ 	</Globals>
+ </VisualStudioProject>
diff -Nrcpad gcc-3.4.3/zlib/contrib/untgz/Makefile gcc-4.0.0/zlib/contrib/untgz/Makefile
*** gcc-3.4.3/zlib/contrib/untgz/Makefile	Mon Mar 11 21:49:53 2002
--- gcc-4.0.0/zlib/contrib/untgz/Makefile	Mon Oct 11 18:45:41 2004
***************
*** 1,14 ****
  CC=cc
  CFLAGS=-g
  
! untgz: untgz.o  ../../libz.a
! 	$(CC) $(CFLAGS) -o untgz  untgz.o -L../.. -lz
  
  untgz.o: untgz.c ../../zlib.h
  	$(CC) $(CFLAGS) -c -I../.. untgz.c
  
  ../../libz.a:
! 	cd ../..; make
  
  clean:
  	rm -f untgz untgz.o *~
--- 1,14 ----
  CC=cc
  CFLAGS=-g
  
! untgz: untgz.o ../../libz.a
! 	$(CC) $(CFLAGS) -o untgz untgz.o -L../.. -lz
  
  untgz.o: untgz.c ../../zlib.h
  	$(CC) $(CFLAGS) -c -I../.. untgz.c
  
  ../../libz.a:
! 	cd ../..; ./configure; make
  
  clean:
  	rm -f untgz untgz.o *~
diff -Nrcpad gcc-3.4.3/zlib/contrib/untgz/Makefile.msc gcc-4.0.0/zlib/contrib/untgz/Makefile.msc
*** gcc-3.4.3/zlib/contrib/untgz/Makefile.msc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/untgz/Makefile.msc	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,17 ----
+ CC=cl
+ CFLAGS=-MD
+ 
+ untgz.exe: untgz.obj ..\..\zlib.lib
+ 	$(CC) $(CFLAGS) untgz.obj ..\..\zlib.lib
+ 
+ untgz.obj: untgz.c ..\..\zlib.h
+ 	$(CC) $(CFLAGS) -c -I..\.. untgz.c
+ 
+ ..\..\zlib.lib:
+ 	cd ..\..
+ 	$(MAKE) -f win32\makefile.msc
+ 	cd contrib\untgz
+ 
+ clean:
+ 	-del untgz.obj
+ 	-del untgz.exe
diff -Nrcpad gcc-3.4.3/zlib/contrib/untgz/makefile.w32 gcc-4.0.0/zlib/contrib/untgz/makefile.w32
*** gcc-3.4.3/zlib/contrib/untgz/makefile.w32	Mon Mar 11 21:49:53 2002
--- gcc-4.0.0/zlib/contrib/untgz/makefile.w32	Thu Jan  1 00:00:00 1970
***************
*** 1,63 ****
- # Makefile for zlib.  Modified for mingw32
- # For conditions of distribution and use, see copyright notice in zlib.h 
- 
- # To compile, 
- # 
- #   make -fmakefile.w32
- # 
- 
- CC=gcc
- 
- # Generate dependencies (see end of the file)
- 
- CPPFLAGS=-MMD 
- 
- #CFLAGS=-MMD -O
- #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
- #CFLAGS=-MMD -g -DDEBUG
- CFLAGS=-O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
-              -Wstrict-prototypes -Wmissing-prototypes
- 
- # If cp.exe is not found, replace with copy /Y .
- CP=cp -f
- 
- # The default value of RM is "rm -f."  
- # If "rm.exe" is not found, uncomment:
- # RM=del
- 
- LD=gcc
- LDLIBS=-L. -lz
- LDFLAGS=-s
- 
- 
- INCL=zlib.h zconf.h
- LIBS=libz.a
- 
- AR=ar rcs
- 
- OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
-        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o \
-        inffast.o
- 
- TEST_OBJS = minigzip.o untgz.o
- 
- all: minigzip.exe untgz.exe
- 
- rebuild:	clean	all
- 
- libz.a: $(OBJS)
- 	$(AR) $@ $(OBJS)
- 
- %.exe : %.o $(LIBS)
- 	$(LD) $(LDFLAGS) -o $@ $< $(LDLIBS)
- 
- .PHONY : clean
- 
- clean:
- 	$(RM) *.d *.o *.exe libz.a foo.gz
- 
- DEPS := $(wildcard *.d)
- ifneq ($(DEPS),)
- include $(DEPS)
- endif
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/contrib/untgz/untgz.c gcc-4.0.0/zlib/contrib/untgz/untgz.c
*** gcc-3.4.3/zlib/contrib/untgz/untgz.c	Mon Mar 11 21:49:53 2002
--- gcc-4.0.0/zlib/contrib/untgz/untgz.c	Mon Oct 11 18:45:42 2004
***************
*** 1,8 ****
  /*
!  * untgz.c -- Display contents and/or extract file from
!  * a gzip'd TAR file
   * written by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
   * adaptation to Unix by Jean-loup Gailly <jloup@gzip.org>
   */
  
  #include <stdio.h>
--- 1,9 ----
  /*
!  * untgz.c -- Display contents and extract files from a gzip'd TAR file
!  *
   * written by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
   * adaptation to Unix by Jean-loup Gailly <jloup@gzip.org>
+  * various fixes by Cosmin Truta <cosmint@cs.ubbcluj.ro>
   */
  
  #include <stdio.h>
***************
*** 10,16 ****
  #include <string.h>
  #include <time.h>
  #include <errno.h>
! #include <fcntl.h>
  #ifdef unix
  # include <unistd.h>
  #else
--- 11,19 ----
  #include <string.h>
  #include <time.h>
  #include <errno.h>
! 
! #include "zlib.h"
! 
  #ifdef unix
  # include <unistd.h>
  #else
***************
*** 18,75 ****
  # include <io.h>
  #endif
  
- #include "zlib.h"
- 
  #ifdef WIN32
  #  ifndef F_OK
! #    define F_OK (0)
  #  endif
  #  ifdef _MSC_VER
- #    define mkdir(dirname,mode) _mkdir(dirname)
  #    define strdup(str)         _strdup(str)
- #    define unlink(fn)          _unlink(fn)
  #    define access(path,mode)   _access(path,mode)
- #  else
- #    define mkdir(dirname,mode) _mkdir(dirname)
  #  endif
  #else
  #  include <utime.h>
  #endif
  
  
! /* Values used in typeflag field.  */
  
! #define REGTYPE	 '0'		/* regular file */
! #define AREGTYPE '\0'		/* regular file */
! #define LNKTYPE  '1'		/* link */
! #define SYMTYPE  '2'		/* reserved */
! #define CHRTYPE  '3'		/* character special */
! #define BLKTYPE  '4'		/* block special */
! #define DIRTYPE  '5'		/* directory */
! #define FIFOTYPE '6'		/* FIFO special */
! #define CONTTYPE '7'		/* reserved */
  
  #define BLOCKSIZE 512
  
  struct tar_header
! {				/* byte offset */
!   char name[100];		/*   0 */
!   char mode[8];			/* 100 */
!   char uid[8];			/* 108 */
!   char gid[8];			/* 116 */
!   char size[12];		/* 124 */
!   char mtime[12];		/* 136 */
!   char chksum[8];		/* 148 */
!   char typeflag;		/* 156 */
!   char linkname[100];		/* 157 */
!   char magic[6];		/* 257 */
!   char version[2];		/* 263 */
!   char uname[32];		/* 265 */
!   char gname[32];		/* 297 */
!   char devmajor[8];		/* 329 */
!   char devminor[8];		/* 337 */
!   char prefix[155];		/* 345 */
! 				/* 500 */
  };
  
  union tar_buffer {
--- 21,74 ----
  # include <io.h>
  #endif
  
  #ifdef WIN32
+ #include <windows.h>
  #  ifndef F_OK
! #    define F_OK  0
  #  endif
+ #  define mkdir(dirname,mode)   _mkdir(dirname)
  #  ifdef _MSC_VER
  #    define strdup(str)         _strdup(str)
  #    define access(path,mode)   _access(path,mode)
  #  endif
  #else
  #  include <utime.h>
  #endif
  
  
! /* values used in typeflag field */
  
! #define REGTYPE  '0'            /* regular file */
! #define AREGTYPE '\0'           /* regular file */
! #define LNKTYPE  '1'            /* link */
! #define SYMTYPE  '2'            /* reserved */
! #define CHRTYPE  '3'            /* character special */
! #define BLKTYPE  '4'            /* block special */
! #define DIRTYPE  '5'            /* directory */
! #define FIFOTYPE '6'            /* FIFO special */
! #define CONTTYPE '7'            /* reserved */
  
  #define BLOCKSIZE 512
  
  struct tar_header
! {                               /* byte offset */
!   char name[100];               /*   0 */
!   char mode[8];                 /* 100 */
!   char uid[8];                  /* 108 */
!   char gid[8];                  /* 116 */
!   char size[12];                /* 124 */
!   char mtime[12];               /* 136 */
!   char chksum[8];               /* 148 */
!   char typeflag;                /* 156 */
!   char linkname[100];           /* 157 */
!   char magic[6];                /* 257 */
!   char version[2];              /* 263 */
!   char uname[32];               /* 265 */
!   char gname[32];               /* 297 */
!   char devmajor[8];             /* 329 */
!   char devminor[8];             /* 337 */
!   char prefix[155];             /* 345 */
!                                 /* 500 */
  };
  
  union tar_buffer {
*************** union tar_buffer {
*** 77,170 ****
    struct tar_header  header;
  };
  
! enum { TGZ_EXTRACT = 0, TGZ_LIST };
  
! static char *TGZfname	OF((const char *));
! void TGZnotfound	OF((const char *));
  
! int getoct		OF((char *, int));
! char *strtime		OF((time_t *));
! int ExprMatch		OF((char *,char *));
  
! int makedir		OF((char *));
! int matchname		OF((int,int,char **,char *));
  
! void error		OF((const char *));
! int  tar		OF((gzFile, int, int, int, char **));
  
! void help		OF((int));
! int main		OF((int, char **));
  
  char *prog;
  
! /* This will give a benign warning */
! 
! static char *TGZprefix[] = { "\0", ".tgz", ".tar.gz", ".tar", NULL };
  
! /* Return the real name of the TGZ archive */
! /* or NULL if it does not exist. */
  
! static char *TGZfname OF((const char *fname))
  {
    static char buffer[1024];
    int origlen,i;
!   
!   strcpy(buffer,fname);
    origlen = strlen(buffer);
  
!   for (i=0; TGZprefix[i]; i++)
      {
!        strcpy(buffer+origlen,TGZprefix[i]);
         if (access(buffer,F_OK) == 0)
           return buffer;
      }
    return NULL;
  }
  
  /* error message for the filename */
  
! void TGZnotfound OF((const char *fname))
  {
    int i;
  
!   fprintf(stderr,"%s : couldn't find ",prog);
!   for (i=0;TGZprefix[i];i++)
!     fprintf(stderr,(TGZprefix[i+1]) ? "%s%s, " : "or %s%s\n",
!             fname,
!             TGZprefix[i]);
    exit(1);
  }
  
  
! /* help functions */
  
! int getoct(char *p,int width)
  {
    int result = 0;
    char c;
!   
!   while (width --)
      {
        c = *p++;
-       if (c == ' ')
- 	continue;
        if (c == 0)
! 	break;
        result = result * 8 + (c - '0');
      }
    return result;
  }
  
  char *strtime (time_t *t)
  {
    struct tm   *local;
    static char result[32];
  
    local = localtime(t);
!   sprintf(result,"%2d/%02d/%4d %02d:%02d:%02d",
! 	  local->tm_mday, local->tm_mon+1, local->tm_year+1900,
! 	  local->tm_hour, local->tm_min,   local->tm_sec);
    return result;
  }
  
  
--- 76,223 ----
    struct tar_header  header;
  };
  
! enum { TGZ_EXTRACT, TGZ_LIST, TGZ_INVALID };
  
! char *TGZfname          OF((const char *));
! void TGZnotfound        OF((const char *));
  
! int getoct              OF((char *, int));
! char *strtime           OF((time_t *));
! int setfiletime         OF((char *, time_t));
! int ExprMatch           OF((char *, char *));
  
! int makedir             OF((char *));
! int matchname           OF((int, int, char **, char *));
  
! void error              OF((const char *));
! int tar                 OF((gzFile, int, int, int, char **));
  
! void help               OF((int));
! int main                OF((int, char **));
  
  char *prog;
  
! const char *TGZsuffix[] = { "\0", ".tar", ".tar.gz", ".taz", ".tgz", NULL };
  
! /* return the file name of the TGZ archive */
! /* or NULL if it does not exist */
  
! char *TGZfname (const char *arcname)
  {
    static char buffer[1024];
    int origlen,i;
! 
!   strcpy(buffer,arcname);
    origlen = strlen(buffer);
  
!   for (i=0; TGZsuffix[i]; i++)
      {
!        strcpy(buffer+origlen,TGZsuffix[i]);
         if (access(buffer,F_OK) == 0)
           return buffer;
      }
    return NULL;
  }
  
+ 
  /* error message for the filename */
  
! void TGZnotfound (const char *arcname)
  {
    int i;
  
!   fprintf(stderr,"%s: Couldn't find ",prog);
!   for (i=0;TGZsuffix[i];i++)
!     fprintf(stderr,(TGZsuffix[i+1]) ? "%s%s, " : "or %s%s\n",
!             arcname,
!             TGZsuffix[i]);
    exit(1);
  }
  
  
! /* convert octal digits to int */
! /* on error return -1 */
  
! int getoct (char *p,int width)
  {
    int result = 0;
    char c;
! 
!   while (width--)
      {
        c = *p++;
        if (c == 0)
!         break;
!       if (c == ' ')
!         continue;
!       if (c < '0' || c > '7')
!         return -1;
        result = result * 8 + (c - '0');
      }
    return result;
  }
  
+ 
+ /* convert time_t to string */
+ /* use the "YYYY/MM/DD hh:mm:ss" format */
+ 
  char *strtime (time_t *t)
  {
    struct tm   *local;
    static char result[32];
  
    local = localtime(t);
!   sprintf(result,"%4d/%02d/%02d %02d:%02d:%02d",
!           local->tm_year+1900, local->tm_mon+1, local->tm_mday,
!           local->tm_hour, local->tm_min, local->tm_sec);
!   return result;
! }
! 
! 
! /* set file time */
! 
! int setfiletime (char *fname,time_t ftime)
! {
! #ifdef WIN32
!   static int isWinNT = -1;
!   SYSTEMTIME st;
!   FILETIME locft, modft;
!   struct tm *loctm;
!   HANDLE hFile;
!   int result;
! 
!   loctm = localtime(&ftime);
!   if (loctm == NULL)
!     return -1;
! 
!   st.wYear         = (WORD)loctm->tm_year + 1900;
!   st.wMonth        = (WORD)loctm->tm_mon + 1;
!   st.wDayOfWeek    = (WORD)loctm->tm_wday;
!   st.wDay          = (WORD)loctm->tm_mday;
!   st.wHour         = (WORD)loctm->tm_hour;
!   st.wMinute       = (WORD)loctm->tm_min;
!   st.wSecond       = (WORD)loctm->tm_sec;
!   st.wMilliseconds = 0;
!   if (!SystemTimeToFileTime(&st, &locft) ||
!       !LocalFileTimeToFileTime(&locft, &modft))
!     return -1;
! 
!   if (isWinNT < 0)
!     isWinNT = (GetVersion() < 0x80000000) ? 1 : 0;
!   hFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
!                      (isWinNT ? FILE_FLAG_BACKUP_SEMANTICS : 0),
!                      NULL);
!   if (hFile == INVALID_HANDLE_VALUE)
!     return -1;
!   result = SetFileTime(hFile, NULL, NULL, &modft) ? 0 : -1;
!   CloseHandle(hFile);
    return result;
+ #else
+   struct utimbuf settime;
+ 
+   settime.actime = settime.modtime = ftime;
+   return utime(fname,&settime);
+ #endif
  }
  
  
*************** char *strtime (time_t *t)
*** 172,213 ****
  
  #define ISSPECIAL(c) (((c) == '*') || ((c) == '/'))
  
! int ExprMatch(char *string,char *expr)
  {
    while (1)
      {
        if (ISSPECIAL(*expr))
! 	{
! 	  if (*expr == '/')
! 	    {
! 	      if (*string != '\\' && *string != '/')
! 		return 0;
! 	      string ++; expr++;
! 	    }
! 	  else if (*expr == '*')
! 	    {
! 	      if (*expr ++ == 0)
! 		return 1;
! 	      while (*++string != *expr)
! 		if (*string == 0)
! 		  return 0;
! 	    }
! 	}
        else
! 	{
! 	  if (*string != *expr)
! 	    return 0;
! 	  if (*expr++ == 0)
! 	    return 1;
! 	  string++;
! 	}
      }
  }
  
! /* recursive make directory */
! /* abort if you get an ENOENT errno somewhere in the middle */
! /* e.g. ignore error "mkdir on existing directory" */
! /* */
  /* return 1 if OK */
  /*        0 on error */
  
--- 225,265 ----
  
  #define ISSPECIAL(c) (((c) == '*') || ((c) == '/'))
  
! int ExprMatch (char *string,char *expr)
  {
    while (1)
      {
        if (ISSPECIAL(*expr))
!         {
!           if (*expr == '/')
!             {
!               if (*string != '\\' && *string != '/')
!                 return 0;
!               string ++; expr++;
!             }
!           else if (*expr == '*')
!             {
!               if (*expr ++ == 0)
!                 return 1;
!               while (*++string != *expr)
!                 if (*string == 0)
!                   return 0;
!             }
!         }
        else
!         {
!           if (*string != *expr)
!             return 0;
!           if (*expr++ == 0)
!             return 1;
!           string++;
!         }
      }
  }
  
! 
! /* recursive mkdir */
! /* abort on ENOENT; ignore other errors like "directory already exists" */
  /* return 1 if OK */
  /*        0 on error */
  
*************** int makedir (char *newdir)
*** 216,222 ****
    char *buffer = strdup(newdir);
    char *p;
    int  len = strlen(buffer);
!   
    if (len <= 0) {
      free(buffer);
      return 0;
--- 268,274 ----
    char *buffer = strdup(newdir);
    char *p;
    int  len = strlen(buffer);
! 
    if (len <= 0) {
      free(buffer);
      return 0;
*************** int makedir (char *newdir)
*** 224,230 ****
    if (buffer[len-1] == '/') {
      buffer[len-1] = '\0';
    }
!   if (mkdir(buffer, 0775) == 0)
      {
        free(buffer);
        return 1;
--- 276,282 ----
    if (buffer[len-1] == '/') {
      buffer[len-1] = '\0';
    }
!   if (mkdir(buffer, 0755) == 0)
      {
        free(buffer);
        return 1;
*************** int makedir (char *newdir)
*** 234,261 ****
    while (1)
      {
        char hold;
!       
        while(*p && *p != '\\' && *p != '/')
! 	p++;
        hold = *p;
        *p = 0;
!       if ((mkdir(buffer, 0775) == -1) && (errno == ENOENT))
! 	{
! 	  fprintf(stderr,"%s: couldn't create directory %s\n",prog,buffer);
! 	  free(buffer);
! 	  return 0;
! 	}
        if (hold == 0)
! 	break;
        *p++ = hold;
      }
    free(buffer);
    return 1;
  }
  
  int matchname (int arg,int argc,char **argv,char *fname)
  {
!   if (arg == argc)		/* no arguments given (untgz tgzarchive) */
      return 1;
  
    while (arg < argc)
--- 286,314 ----
    while (1)
      {
        char hold;
! 
        while(*p && *p != '\\' && *p != '/')
!         p++;
        hold = *p;
        *p = 0;
!       if ((mkdir(buffer, 0755) == -1) && (errno == ENOENT))
!         {
!           fprintf(stderr,"%s: Couldn't create directory %s\n",prog,buffer);
!           free(buffer);
!           return 0;
!         }
        if (hold == 0)
!         break;
        *p++ = hold;
      }
    free(buffer);
    return 1;
  }
  
+ 
  int matchname (int arg,int argc,char **argv,char *fname)
  {
!   if (arg == argc)      /* no arguments given (untgz tgzarchive) */
      return 1;
  
    while (arg < argc)
*************** int matchname (int arg,int argc,char **a
*** 266,272 ****
  }
  
  
! /* Tar file list or extract */
  
  int tar (gzFile in,int action,int arg,int argc,char **argv)
  {
--- 319,325 ----
  }
  
  
! /* tar file list or extract */
  
  int tar (gzFile in,int action,int arg,int argc,char **argv)
  {
*************** int tar (gzFile in,int action,int arg,in
*** 277,421 ****
    int    remaining = 0;
    FILE   *outfile = NULL;
    char   fname[BLOCKSIZE];
    time_t tartime;
!   
    if (action == TGZ_LIST)
!     printf("     day      time     size                       file\n"
! 	   " ---------- -------- --------- -------------------------------------\n");
    while (1)
      {
        len = gzread(in, &buffer, BLOCKSIZE);
        if (len < 0)
! 	error (gzerror(in, &err));
        /*
         * Always expect complete blocks to process
         * the tar information.
         */
        if (len != BLOCKSIZE)
! 	error("gzread: incomplete block read");
!       
        /*
         * If we have to get a tar header
         */
        if (getheader == 1)
! 	{
! 	  /*
! 	   * if we met the end of the tar
! 	   * or the end-of-tar block,
! 	   * we are done
! 	   */
! 	  if ((len == 0)  || (buffer.header.name[0]== 0)) break;
! 
! 	  tartime = (time_t)getoct(buffer.header.mtime,12);
! 	  strcpy(fname,buffer.header.name);
! 	  
! 	  switch (buffer.header.typeflag)
! 	    {
! 	    case DIRTYPE:
! 	      if (action == TGZ_LIST)
! 		printf(" %s     <dir> %s\n",strtime(&tartime),fname);
! 	      if (action == TGZ_EXTRACT)
! 		makedir(fname);
! 	      break;
! 	    case REGTYPE:
! 	    case AREGTYPE:
! 	      remaining = getoct(buffer.header.size,12);
! 	      if (action == TGZ_LIST)
! 		printf(" %s %9d %s\n",strtime(&tartime),remaining,fname);
! 	      if (action == TGZ_EXTRACT)
! 		{
! 		  if ((remaining) && (matchname(arg,argc,argv,fname)))
! 		    {
! 		      outfile = fopen(fname,"wb");
! 		      if (outfile == NULL) {
! 			/* try creating directory */
! 			char *p = strrchr(fname, '/');
! 			if (p != NULL) {
! 			  *p = '\0';
! 			  makedir(fname);
! 			  *p = '/';
! 			  outfile = fopen(fname,"wb");
! 			}
! 		      }
! 		      fprintf(stderr,
! 			      "%s %s\n",
! 			      (outfile) ? "Extracting" : "Couldn't create",
! 			      fname);
! 		    }
! 		  else
! 		    outfile = NULL;
! 		}
! 	      /*
! 	       * could have no contents
! 	       */
! 	      getheader = (remaining) ? 0 : 1;
! 	      break;
! 	    default:
! 	      if (action == TGZ_LIST)
! 		printf(" %s     <---> %s\n",strtime(&tartime),fname);
! 	      break;
! 	    }
! 	}
!       else
! 	{
! 	  unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining;
  
! 	  if ((action == TGZ_EXTRACT) && (outfile != NULL))
! 	    {
! 	      if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes)
! 		{
! 		  fprintf(stderr,"%s : error writing %s skipping...\n",prog,fname);
! 		  fclose(outfile);
! 		  unlink(fname);
! 		}
! 	    }
! 	  remaining -= bytes;
! 	  if (remaining == 0)
! 	    {
! 	      getheader = 1;
! 	      if ((action == TGZ_EXTRACT) && (outfile != NULL))
! 		{
! #ifdef WIN32
! 		  HANDLE hFile;
! 		  FILETIME ftm,ftLocal;
! 		  SYSTEMTIME st;
! 		  struct tm localt;
!  
! 		  fclose(outfile);
  
! 		  localt = *localtime(&tartime);
  
! 		  hFile = CreateFile(fname, GENERIC_READ | GENERIC_WRITE,
! 				     0, NULL, OPEN_EXISTING, 0, NULL);
! 		  
! 		  st.wYear = (WORD)localt.tm_year+1900;
! 		  st.wMonth = (WORD)localt.tm_mon;
! 		  st.wDayOfWeek = (WORD)localt.tm_wday;
! 		  st.wDay = (WORD)localt.tm_mday;
! 		  st.wHour = (WORD)localt.tm_hour;
! 		  st.wMinute = (WORD)localt.tm_min;
! 		  st.wSecond = (WORD)localt.tm_sec;
! 		  st.wMilliseconds = 0;
! 		  SystemTimeToFileTime(&st,&ftLocal);
! 		  LocalFileTimeToFileTime(&ftLocal,&ftm);
! 		  SetFileTime(hFile,&ftm,NULL,&ftm);
! 		  CloseHandle(hFile);
  
! 		  outfile = NULL;
! #else
! 		  struct utimbuf settime;
  
! 		  settime.actime = settime.modtime = tartime;
  
! 		  fclose(outfile);
! 		  outfile = NULL;
! 		  utime(fname,&settime);
! #endif
! 		}
! 	    }
! 	}
      }
!   
    if (gzclose(in) != Z_OK)
      error("failed gzclose");
  
--- 330,469 ----
    int    remaining = 0;
    FILE   *outfile = NULL;
    char   fname[BLOCKSIZE];
+   int    tarmode;
    time_t tartime;
! 
    if (action == TGZ_LIST)
!     printf("    date      time     size                       file\n"
!            " ---------- -------- --------- -------------------------------------\n");
    while (1)
      {
        len = gzread(in, &buffer, BLOCKSIZE);
        if (len < 0)
!         error(gzerror(in, &err));
        /*
         * Always expect complete blocks to process
         * the tar information.
         */
        if (len != BLOCKSIZE)
!         {
!           action = TGZ_INVALID; /* force error exit */
!           remaining = 0;        /* force I/O cleanup */
!         }
! 
        /*
         * If we have to get a tar header
         */
        if (getheader == 1)
!         {
!           /*
!            * if we met the end of the tar
!            * or the end-of-tar block,
!            * we are done
!            */
!           if ((len == 0) || (buffer.header.name[0] == 0)) break;
  
!           tarmode = getoct(buffer.header.mode,8);
!           tartime = (time_t)getoct(buffer.header.mtime,12);
!           if (tarmode == -1 || tartime == (time_t)-1)
!             {
!               buffer.header.name[0] = 0;
!               action = TGZ_INVALID;
!             }
  
!           strcpy(fname,buffer.header.name);
  
!           switch (buffer.header.typeflag)
!             {
!             case DIRTYPE:
!               if (action == TGZ_LIST)
!                 printf(" %s     <dir> %s\n",strtime(&tartime),fname);
!               if (action == TGZ_EXTRACT)
!                 {
!                   makedir(fname);
!                   setfiletime(fname,tartime);
!                 }
!               break;
!             case REGTYPE:
!             case AREGTYPE:
!               remaining = getoct(buffer.header.size,12);
!               if (remaining == -1)
!                 {
!                   action = TGZ_INVALID;
!                   break;
!                 }
!               if (action == TGZ_LIST)
!                 printf(" %s %9d %s\n",strtime(&tartime),remaining,fname);
!               else if (action == TGZ_EXTRACT)
!                 {
!                   if (matchname(arg,argc,argv,fname))
!                     {
!                       outfile = fopen(fname,"wb");
!                       if (outfile == NULL) {
!                         /* try creating directory */
!                         char *p = strrchr(fname, '/');
!                         if (p != NULL) {
!                           *p = '\0';
!                           makedir(fname);
!                           *p = '/';
!                           outfile = fopen(fname,"wb");
!                         }
!                       }
!                       if (outfile != NULL)
!                         printf("Extracting %s\n",fname);
!                       else
!                         fprintf(stderr, "%s: Couldn't create %s",prog,fname);
!                     }
!                   else
!                     outfile = NULL;
!                 }
!               getheader = 0;
!               break;
!             default:
!               if (action == TGZ_LIST)
!                 printf(" %s     <---> %s\n",strtime(&tartime),fname);
!               break;
!             }
!         }
!       else
!         {
!           unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining;
  
!           if (outfile != NULL)
!             {
!               if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes)
!                 {
!                   fprintf(stderr,"%s: Error writing %s -- skipping\n",prog,fname);
!                   fclose(outfile);
!                   outfile = NULL;
!                   remove(fname);
!                 }
!             }
!           remaining -= bytes;
!         }
  
!       if (remaining == 0)
!         {
!           getheader = 1;
!           if (outfile != NULL)
!             {
!               fclose(outfile);
!               outfile = NULL;
!               if (action != TGZ_INVALID)
!                 setfiletime(fname,tartime);
!             }
!         }
  
!       /*
!        * Abandon if errors are found
!        */
!       if (action == TGZ_INVALID)
!         {
!           error("broken archive");
!           break;
!         }
      }
! 
    if (gzclose(in) != Z_OK)
      error("failed gzclose");
  
*************** int tar (gzFile in,int action,int arg,in
*** 423,495 ****
  }
  
  
! /* =========================================================== */
  
  void help(int exitval)
  {
!   fprintf(stderr,
! 	  "untgz v 0.1\n"
! 	  " an sample application of zlib 1.0.4\n\n"
!           "Usage : untgz TGZfile            to extract all files\n"
!           "        untgz TGZfile fname ...  to extract selected files\n"
!           "        untgz -l TGZfile         to list archive contents\n"
!           "        untgz -h                 to display this help\n\n");
    exit(exitval);
  }
  
  void error(const char *msg)
  {
!     fprintf(stderr, "%s: %s\n", prog, msg);
!     exit(1);
  }
  
  
! /* ====================================================================== */
  
! int _CRT_glob = 0;	/* disable globbing of the arguments */
  
  int main(int argc,char **argv)
  {
!     int 	action = TGZ_EXTRACT;
!     int 	arg = 1;
!     char	*TGZfile;
!     gzFile	*f;
!     
  
      prog = strrchr(argv[0],'\\');
      if (prog == NULL)
        {
! 	prog = strrchr(argv[0],'/');
! 	if (prog == NULL)
! 	  {
! 	    prog = strrchr(argv[0],':');
! 	    if (prog == NULL)
! 	      prog = argv[0];
! 	    else
! 	      prog++;
! 	  }
! 	else
! 	  prog++;
        }
      else
        prog++;
!     
      if (argc == 1)
        help(0);
  
      if (strcmp(argv[arg],"-l") == 0)
        {
! 	action = TGZ_LIST;
! 	if (argc == ++arg)
! 	  help(0);
        }
      else if (strcmp(argv[arg],"-h") == 0)
        {
! 	help(0);
        }
  
      if ((TGZfile = TGZfname(argv[arg])) == NULL)
!       TGZnotfound(argv[arg]);            
  
      ++arg;
      if ((action == TGZ_LIST) && (arg != argc))
--- 471,544 ----
  }
  
  
! /* ============================================================ */
  
  void help(int exitval)
  {
!   printf("untgz version 0.2\n"
!          "  using zlib version %s\n\n",
!          zlibVersion());
!   printf("Usage: untgz file.tgz            extract all files\n"
!          "       untgz file.tgz fname ...  extract selected files\n"
!          "       untgz -l file.tgz         list archive contents\n"
!          "       untgz -h                  display this help\n");
    exit(exitval);
  }
  
  void error(const char *msg)
  {
!   fprintf(stderr, "%s: %s\n", prog, msg);
!   exit(1);
  }
  
  
! /* ============================================================ */
  
! #if defined(WIN32) && defined(__GNUC__)
! int _CRT_glob = 0;      /* disable argument globbing in MinGW */
! #endif
  
  int main(int argc,char **argv)
  {
!     int         action = TGZ_EXTRACT;
!     int         arg = 1;
!     char        *TGZfile;
!     gzFile      *f;
  
      prog = strrchr(argv[0],'\\');
      if (prog == NULL)
        {
!         prog = strrchr(argv[0],'/');
!         if (prog == NULL)
!           {
!             prog = strrchr(argv[0],':');
!             if (prog == NULL)
!               prog = argv[0];
!             else
!               prog++;
!           }
!         else
!           prog++;
        }
      else
        prog++;
! 
      if (argc == 1)
        help(0);
  
      if (strcmp(argv[arg],"-l") == 0)
        {
!         action = TGZ_LIST;
!         if (argc == ++arg)
!           help(0);
        }
      else if (strcmp(argv[arg],"-h") == 0)
        {
!         help(0);
        }
  
      if ((TGZfile = TGZfname(argv[arg])) == NULL)
!       TGZnotfound(argv[arg]);
  
      ++arg;
      if ((action == TGZ_LIST) && (arg != argc))
*************** int main(int argc,char **argv)
*** 502,521 ****
        {
        case TGZ_LIST:
        case TGZ_EXTRACT:
! 	f = gzopen(TGZfile,"rb");
! 	if (f == NULL)
! 	  {
! 	    fprintf(stderr,"%s: Couldn't gzopen %s\n",
! 		    prog,
! 		    TGZfile);
! 	    return 1;
! 	  }
! 	exit(tar(f, action, arg, argc, argv));
        break;
! 	
        default:
! 	error("Unknown option!");
! 	exit(1);
        }
  
      return 0;
--- 551,568 ----
        {
        case TGZ_LIST:
        case TGZ_EXTRACT:
!         f = gzopen(TGZfile,"rb");
!         if (f == NULL)
!           {
!             fprintf(stderr,"%s: Couldn't gzopen %s\n",prog,TGZfile);
!             return 1;
!           }
!         exit(tar(f, action, arg, argc, argv));
        break;
! 
        default:
!         error("Unknown option");
!         exit(1);
        }
  
      return 0;
diff -Nrcpad gcc-3.4.3/zlib/contrib/visual-basic.txt gcc-4.0.0/zlib/contrib/visual-basic.txt
*** gcc-3.4.3/zlib/contrib/visual-basic.txt	Mon Mar 11 21:49:21 2002
--- gcc-4.0.0/zlib/contrib/visual-basic.txt	Mon Oct 11 18:45:39 2004
*************** Declare Function gzclose Lib "ZLIB32.DLL
*** 67,69 ****
--- 67,160 ----
  -Jon Caruana
  jon-net@usa.net
  Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member
+ 
+ 
+ Here is another example from Michael <michael_borgsys@hotmail.com> that he
+ says conforms to the VB guidelines, and that solves the problem of not
+ knowing the uncompressed size by storing it at the end of the file:
+ 
+ 'Calling the functions:
+ 'bracket meaning: <parameter> [optional] {Range of possible values}
+ 'Call subCompressFile(<path with filename to compress> [, <path with
+ filename to write to>, [level of compression {1..9}]])
+ 'Call subUncompressFile(<path with filename to compress>)
+ 
+ Option Explicit
+ Private lngpvtPcnSml As Long 'Stores value for 'lngPercentSmaller'
+ Private Const SUCCESS As Long = 0
+ Private Const strFilExt As String = ".cpr"
+ Private Declare Function lngfncCpr Lib "zlib.dll" Alias "compress2" (ByRef
+ dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long,
+ ByVal level As Integer) As Long
+ Private Declare Function lngfncUcp Lib "zlib.dll" Alias "uncompress" (ByRef
+ dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long)
+ As Long
+ 
+ Public Sub subCompressFile(ByVal strargOriFilPth As String, Optional ByVal
+ strargCprFilPth As String, Optional ByVal intLvl As Integer = 9)
+     Dim strCprPth As String
+     Dim lngOriSiz As Long
+     Dim lngCprSiz As Long
+     Dim bytaryOri() As Byte
+     Dim bytaryCpr() As Byte
+     lngOriSiz = FileLen(strargOriFilPth)
+     ReDim bytaryOri(lngOriSiz - 1)
+     Open strargOriFilPth For Binary Access Read As #1
+         Get #1, , bytaryOri()
+     Close #1
+     strCprPth = IIf(strargCprFilPth = "", strargOriFilPth, strargCprFilPth)
+ 'Select file path and name
+     strCprPth = strCprPth & IIf(Right(strCprPth, Len(strFilExt)) =
+ strFilExt, "", strFilExt) 'Add file extension if not exists
+     lngCprSiz = (lngOriSiz * 1.01) + 12 'Compression needs temporary a bit
+ more space then original file size
+     ReDim bytaryCpr(lngCprSiz - 1)
+     If lngfncCpr(bytaryCpr(0), lngCprSiz, bytaryOri(0), lngOriSiz, intLvl) =
+ SUCCESS Then
+         lngpvtPcnSml = (1# - (lngCprSiz / lngOriSiz)) * 100
+         ReDim Preserve bytaryCpr(lngCprSiz - 1)
+         Open strCprPth For Binary Access Write As #1
+             Put #1, , bytaryCpr()
+             Put #1, , lngOriSiz 'Add the the original size value to the end
+ (last 4 bytes)
+         Close #1
+     Else
+         MsgBox "Compression error"
+     End If
+     Erase bytaryCpr
+     Erase bytaryOri
+ End Sub
+ 
+ Public Sub subUncompressFile(ByVal strargFilPth As String)
+     Dim bytaryCpr() As Byte
+     Dim bytaryOri() As Byte
+     Dim lngOriSiz As Long
+     Dim lngCprSiz As Long
+     Dim strOriPth As String
+     lngCprSiz = FileLen(strargFilPth)
+     ReDim bytaryCpr(lngCprSiz - 1)
+     Open strargFilPth For Binary Access Read As #1
+         Get #1, , bytaryCpr()
+     Close #1
+     'Read the original file size value:
+     lngOriSiz = bytaryCpr(lngCprSiz - 1) * (2 ^ 24) _
+               + bytaryCpr(lngCprSiz - 2) * (2 ^ 16) _
+               + bytaryCpr(lngCprSiz - 3) * (2 ^ 8) _
+               + bytaryCpr(lngCprSiz - 4)
+     ReDim Preserve bytaryCpr(lngCprSiz - 5) 'Cut of the original size value
+     ReDim bytaryOri(lngOriSiz - 1)
+     If lngfncUcp(bytaryOri(0), lngOriSiz, bytaryCpr(0), lngCprSiz) = SUCCESS
+ Then
+         strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt))
+         Open strOriPth For Binary Access Write As #1
+             Put #1, , bytaryOri()
+         Close #1
+     Else
+         MsgBox "Uncompression error"
+     End If
+     Erase bytaryCpr
+     Erase bytaryOri
+ End Sub
+ Public Property Get lngPercentSmaller() As Long
+     lngPercentSmaller = lngpvtPcnSml
+ End Property
diff -Nrcpad gcc-3.4.3/zlib/contrib/vstudio/readme.txt gcc-4.0.0/zlib/contrib/vstudio/readme.txt
*** gcc-3.4.3/zlib/contrib/vstudio/readme.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/vstudio/readme.txt	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,55 ----
+ Building instructions for the DLL versions of Zlib 1.21
+ =======================================================
+ 
+ This directory contains projects that build zlib and minizip using
+ Microsoft Visual C++ 7.0/7.1.
+ 
+ You don't need to build these projects yourself. You can download the
+ binaries from:
+   http://www.winimage.com/zLibDll
+ 
+ More information can be found at this site.
+ 
+ 
+ Build instructions
+ ------------------
+ - Unzip zlib*.zip and copy the files from contrib\vstudio\vc7,
+   from contrib\vstudio\masmx86 and from contrib\minizip into the same
+   directory.
+ - Download the crtdll library from
+     http://www.winimage.com/zLibDll/crtdll.zip
+   Unzip crtdll.zip to extract crtdll.lib.
+ - If you are using x86, use the Release target.
+ - Open zlibvc.sln with Microsoft Visual C++ 7.0 or 7.1
+   (Visual Studio .Net 2002 or 2003).
+ 
+ 
+ Important
+ ---------
+ - To use zlibwapi.dll in your application, you must define the
+   macro ZLIB_WINAPI when compiling your application's source files.
+ 
+ 
+ Additional notes
+ ----------------
+ - This DLL, named zlibwapi.dll, is compatible to the old zlib.dll built
+   by Gilles Vollant from the zlib 1.1.x sources, and distributed at
+     http://www.winimage.com/zLibDll
+   It uses the WINAPI calling convention for the exported functions, and
+   includes the minizip functionality. If your application needs that
+   particular build of zlib.dll, you can rename zlibwapi.dll to zlib.dll.
+ 
+ - The new DLL was renamed because there exist several incompatible
+   versions of zlib.dll on the Internet.
+ 
+ - There is also an official DLL build of zlib, named zlib1.dll. This one
+   is exporting the functions using the CDECL convention. See the file
+   win32\DLL_FAQ.txt found in this zlib distribution.
+ 
+ - There used to be a ZLIB_DLL macro in zlib 1.1.x, but now this symbol
+   has a slightly different effect. To avoid compatibility problems, do
+   not define it here.
+ 
+ 
+ Gilles Vollant
+ info@winimage.com
diff -Nrcpad gcc-3.4.3/zlib/contrib/vstudio/vc7/miniunz.vcproj gcc-4.0.0/zlib/contrib/vstudio/vc7/miniunz.vcproj
*** gcc-3.4.3/zlib/contrib/vstudio/vc7/miniunz.vcproj	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/vstudio/vc7/miniunz.vcproj	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,124 ----
+ <?xml version="1.0" encoding = "Windows-1252"?>
+ <VisualStudioProject
+ 	ProjectType="Visual C++"
+ 	Version="7.00"
+ 	Name="miniunz"
+ 	ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
+ 	Keyword="Win32Proj">
+ 	<Platforms>
+ 		<Platform
+ 			Name="Win32"/>
+ 	</Platforms>
+ 	<Configurations>
+ 		<Configuration
+ 			Name="Debug|Win32"
+ 			OutputDirectory="Debug"
+ 			IntermediateDirectory="Debug"
+ 			ConfigurationType="1"
+ 			CharacterSet="2">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				Optimization="0"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE"
+ 				MinimalRebuild="TRUE"
+ 				BasicRuntimeChecks="3"
+ 				RuntimeLibrary="5"
+ 				UsePrecompiledHeader="0"
+ 				WarningLevel="3"
+ 				Detect64BitPortabilityProblems="TRUE"
+ 				DebugInformationFormat="4"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				OutputFile="$(OutDir)/miniunz.exe"
+ 				LinkIncremental="2"
+ 				GenerateDebugInformation="TRUE"
+ 				ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
+ 				SubSystem="1"
+ 				TargetMachine="1"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="Release|Win32"
+ 			OutputDirectory="Release"
+ 			IntermediateDirectory="Release"
+ 			ConfigurationType="1"
+ 			CharacterSet="2">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				Optimization="2"
+ 				InlineFunctionExpansion="1"
+ 				OmitFramePointers="TRUE"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ 				StringPooling="TRUE"
+ 				RuntimeLibrary="4"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				UsePrecompiledHeader="0"
+ 				WarningLevel="3"
+ 				Detect64BitPortabilityProblems="TRUE"
+ 				DebugInformationFormat="3"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				OutputFile="$(OutDir)/miniunz.exe"
+ 				LinkIncremental="1"
+ 				GenerateDebugInformation="TRUE"
+ 				SubSystem="1"
+ 				OptimizeReferences="2"
+ 				EnableCOMDATFolding="2"
+ 				OptimizeForWindows98="1"
+ 				TargetMachine="1"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 	</Configurations>
+ 	<Files>
+ 		<Filter
+ 			Name="Source Files"
+ 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
+ 			<File
+ 				RelativePath="miniunz.c">
+ 			</File>
+ 		</Filter>
+ 		<Filter
+ 			Name="Header Files"
+ 			Filter="h;hpp;hxx;hm;inl;inc">
+ 		</Filter>
+ 		<Filter
+ 			Name="Resource Files"
+ 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ 		</Filter>
+ 		<File
+ 			RelativePath="zlibwapi.lib">
+ 		</File>
+ 	</Files>
+ 	<Globals>
+ 	</Globals>
+ </VisualStudioProject>
diff -Nrcpad gcc-3.4.3/zlib/contrib/vstudio/vc7/minizip.vcproj gcc-4.0.0/zlib/contrib/vstudio/vc7/minizip.vcproj
*** gcc-3.4.3/zlib/contrib/vstudio/vc7/minizip.vcproj	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/vstudio/vc7/minizip.vcproj	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,124 ----
+ <?xml version="1.0" encoding = "Windows-1252"?>
+ <VisualStudioProject
+ 	ProjectType="Visual C++"
+ 	Version="7.00"
+ 	Name="minizip"
+ 	ProjectGUID="{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
+ 	Keyword="Win32Proj">
+ 	<Platforms>
+ 		<Platform
+ 			Name="Win32"/>
+ 	</Platforms>
+ 	<Configurations>
+ 		<Configuration
+ 			Name="Debug|Win32"
+ 			OutputDirectory="Debug"
+ 			IntermediateDirectory="Debug"
+ 			ConfigurationType="1"
+ 			CharacterSet="2">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				Optimization="0"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE"
+ 				MinimalRebuild="TRUE"
+ 				BasicRuntimeChecks="3"
+ 				RuntimeLibrary="5"
+ 				UsePrecompiledHeader="0"
+ 				WarningLevel="3"
+ 				Detect64BitPortabilityProblems="TRUE"
+ 				DebugInformationFormat="4"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				OutputFile="$(OutDir)/minizip.exe"
+ 				LinkIncremental="2"
+ 				GenerateDebugInformation="TRUE"
+ 				ProgramDatabaseFile="$(OutDir)/minizip.pdb"
+ 				SubSystem="1"
+ 				TargetMachine="1"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="Release|Win32"
+ 			OutputDirectory="Release"
+ 			IntermediateDirectory="Release"
+ 			ConfigurationType="1"
+ 			CharacterSet="2">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				Optimization="2"
+ 				InlineFunctionExpansion="1"
+ 				OmitFramePointers="TRUE"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ 				StringPooling="TRUE"
+ 				RuntimeLibrary="4"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				UsePrecompiledHeader="0"
+ 				WarningLevel="3"
+ 				Detect64BitPortabilityProblems="TRUE"
+ 				DebugInformationFormat="3"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				OutputFile="$(OutDir)/minizip.exe"
+ 				LinkIncremental="1"
+ 				GenerateDebugInformation="TRUE"
+ 				SubSystem="1"
+ 				OptimizeReferences="2"
+ 				EnableCOMDATFolding="2"
+ 				OptimizeForWindows98="1"
+ 				TargetMachine="1"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 	</Configurations>
+ 	<Files>
+ 		<Filter
+ 			Name="Source Files"
+ 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
+ 			<File
+ 				RelativePath="minizip.c">
+ 			</File>
+ 		</Filter>
+ 		<Filter
+ 			Name="Header Files"
+ 			Filter="h;hpp;hxx;hm;inl;inc">
+ 		</Filter>
+ 		<Filter
+ 			Name="Resource Files"
+ 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ 		</Filter>
+ 		<File
+ 			RelativePath="zlibwapi.lib">
+ 		</File>
+ 	</Files>
+ 	<Globals>
+ 	</Globals>
+ </VisualStudioProject>
diff -Nrcpad gcc-3.4.3/zlib/contrib/vstudio/vc7/zlib.rc gcc-4.0.0/zlib/contrib/vstudio/vc7/zlib.rc
*** gcc-3.4.3/zlib/contrib/vstudio/vc7/zlib.rc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/vstudio/vc7/zlib.rc	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,32 ----
+ #include <windows.h>
+ 
+ #define IDR_VERSION1  1
+ IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE
+   FILEVERSION	 1,2,1,0
+   PRODUCTVERSION 1,2,1,0
+   FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
+   FILEFLAGS	0
+   FILEOS	VOS_DOS_WINDOWS32
+   FILETYPE	VFT_DLL
+   FILESUBTYPE	0	// not used
+ BEGIN
+   BLOCK "StringFileInfo"
+   BEGIN
+     BLOCK "040904E4"
+     //language ID = U.S. English, char set = Windows, Multilingual
+ 
+     BEGIN
+       VALUE "FileDescription", "zlib data compression library\0"
+       VALUE "FileVersion",	"1.2.1.0\0"
+       VALUE "InternalName",	"zlib\0"
+       VALUE "OriginalFilename",	"zlib.dll\0"
+       VALUE "ProductName",	"ZLib.DLL\0"
+       VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
+       VALUE "LegalCopyright", "(C) 1995-2003 Jean-loup Gailly & Mark Adler\0"
+     END
+   END
+   BLOCK "VarFileInfo"
+   BEGIN
+     VALUE "Translation", 0x0409, 1252
+   END
+ END
diff -Nrcpad gcc-3.4.3/zlib/contrib/vstudio/vc7/zlibstat.vcproj gcc-4.0.0/zlib/contrib/vstudio/vc7/zlibstat.vcproj
*** gcc-3.4.3/zlib/contrib/vstudio/vc7/zlibstat.vcproj	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/vstudio/vc7/zlibstat.vcproj	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,242 ----
+ <?xml version="1.0" encoding = "Windows-1252"?>
+ <VisualStudioProject
+ 	ProjectType="Visual C++"
+ 	Version="7.00"
+ 	Name="zlibstat"
+ 	SccProjectName=""
+ 	SccLocalPath="">
+ 	<Platforms>
+ 		<Platform
+ 			Name="Win32"/>
+ 	</Platforms>
+ 	<Configurations>
+ 		<Configuration
+ 			Name="Debug|Win32"
+ 			OutputDirectory=".\zlibstatDebug"
+ 			IntermediateDirectory=".\zlibstatDebug"
+ 			ConfigurationType="4"
+ 			UseOfMFC="0"
+ 			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				Optimization="0"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI"
+ 				ExceptionHandling="FALSE"
+ 				RuntimeLibrary="5"
+ 				PrecompiledHeaderFile=".\zlibstatDebug/zlibstat.pch"
+ 				AssemblerListingLocation=".\zlibstatDebug/"
+ 				ObjectFile=".\zlibstatDebug/"
+ 				ProgramDataBaseFileName=".\zlibstatDebug/"
+ 				WarningLevel="3"
+ 				SuppressStartupBanner="TRUE"
+ 				DebugInformationFormat="1"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLibrarianTool"
+ 				AdditionalOptions="/NODEFAULTLIB "
+ 				OutputFile=".\zlibstatDebug\zlibstat.lib"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"
+ 				Culture="1036"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="ReleaseAxp|Win32"
+ 			OutputDirectory=".\zlibsta0"
+ 			IntermediateDirectory=".\zlibsta0"
+ 			ConfigurationType="4"
+ 			UseOfMFC="0"
+ 			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				InlineFunctionExpansion="1"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI"
+ 				StringPooling="TRUE"
+ 				ExceptionHandling="FALSE"
+ 				RuntimeLibrary="4"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				PrecompiledHeaderFile=".\zlibsta0/zlibstat.pch"
+ 				AssemblerListingLocation=".\zlibsta0/"
+ 				ObjectFile=".\zlibsta0/"
+ 				ProgramDataBaseFileName=".\zlibsta0/"
+ 				WarningLevel="3"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLibrarianTool"
+ 				AdditionalOptions="/NODEFAULTLIB "
+ 				OutputFile=".\zlibsta0\zlibstat.lib"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="Release|Win32"
+ 			OutputDirectory=".\zlibstat"
+ 			IntermediateDirectory=".\zlibstat"
+ 			ConfigurationType="4"
+ 			UseOfMFC="0"
+ 			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				InlineFunctionExpansion="1"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;ASMV;ASMINF"
+ 				StringPooling="TRUE"
+ 				ExceptionHandling="FALSE"
+ 				RuntimeLibrary="4"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				PrecompiledHeaderFile=".\zlibstat/zlibstat.pch"
+ 				AssemblerListingLocation=".\zlibstat/"
+ 				ObjectFile=".\zlibstat/"
+ 				ProgramDataBaseFileName=".\zlibstat/"
+ 				WarningLevel="3"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLibrarianTool"
+ 				AdditionalOptions="gvmat32.obj inffas32.obj /NODEFAULTLIB "
+ 				OutputFile=".\zlibstat\zlibstat.lib"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"
+ 				Culture="1036"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="ReleaseWithoutAsm|Win32"
+ 			OutputDirectory="zlibstatWithoutAsm"
+ 			IntermediateDirectory="zlibstatWithoutAsm"
+ 			ConfigurationType="4"
+ 			UseOfMFC="0"
+ 			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				InlineFunctionExpansion="1"
+ 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI"
+ 				StringPooling="TRUE"
+ 				ExceptionHandling="FALSE"
+ 				RuntimeLibrary="4"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				PrecompiledHeaderFile=".\zlibstat/zlibstat.pch"
+ 				AssemblerListingLocation=".\zlibstatWithoutAsm/"
+ 				ObjectFile=".\zlibstatWithoutAsm/"
+ 				ProgramDataBaseFileName=".\zlibstatWithoutAsm/"
+ 				WarningLevel="3"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLibrarianTool"
+ 				AdditionalOptions=" /NODEFAULTLIB "
+ 				OutputFile=".\zlibstatWithoutAsm\zlibstat.lib"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCMIDLTool"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"
+ 				Culture="1036"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 		</Configuration>
+ 	</Configurations>
+ 	<Files>
+ 		<Filter
+ 			Name="Source Files"
+ 			Filter="">
+ 			<File
+ 				RelativePath=".\adler32.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\compress.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\crc32.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\deflate.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\gvmat32c.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\gzio.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\infback.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\inffast.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\inflate.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\inftrees.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\ioapi.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\trees.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\uncompr.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\unzip.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\zip.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\zlib.rc">
+ 			</File>
+ 			<File
+ 				RelativePath=".\zlibvc.def">
+ 			</File>
+ 			<File
+ 				RelativePath=".\zutil.c">
+ 			</File>
+ 		</Filter>
+ 	</Files>
+ 	<Globals>
+ 	</Globals>
+ </VisualStudioProject>
diff -Nrcpad gcc-3.4.3/zlib/contrib/vstudio/vc7/zlibvc.def gcc-4.0.0/zlib/contrib/vstudio/vc7/zlibvc.def
*** gcc-3.4.3/zlib/contrib/vstudio/vc7/zlibvc.def	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/vstudio/vc7/zlibvc.def	Tue Oct 19 22:00:48 2004
***************
*** 0 ****
--- 1,92 ----
+ 
+ VERSION		1.21
+ 
+ HEAPSIZE	1048576,8192
+ 
+ EXPORTS
+         adler32                                  @1
+         compress                                 @2
+         crc32                                    @3
+         deflate                                  @4
+         deflateCopy                              @5
+         deflateEnd                               @6
+         deflateInit2_                            @7
+         deflateInit_                             @8
+         deflateParams                            @9
+         deflateReset                             @10
+         deflateSetDictionary                     @11
+         gzclose                                  @12
+         gzdopen                                  @13
+         gzerror                                  @14
+         gzflush                                  @15
+         gzopen                                   @16
+         gzread                                   @17
+         gzwrite                                  @18
+         inflate                                  @19
+         inflateEnd                               @20
+         inflateInit2_                            @21
+         inflateInit_                             @22
+         inflateReset                             @23
+         inflateSetDictionary                     @24
+         inflateSync                              @25
+         uncompress                               @26
+         zlibVersion                              @27
+         gzprintf                                 @28
+         gzputc                                   @29
+         gzgetc                                   @30
+         gzseek                                   @31
+         gzrewind                                 @32
+         gztell                                   @33
+         gzeof                                    @34
+         gzsetparams                              @35
+         zError                                   @36
+         inflateSyncPoint                         @37
+         get_crc_table                            @38
+         compress2                                @39
+         gzputs                                   @40
+         gzgets                                   @41
+         inflateCopy                              @42
+         inflateBackInit_                         @43
+         inflateBack                              @44
+         inflateBackEnd                           @45
+         compressBound                            @46
+         deflateBound                             @47
+         gzclearerr                               @48
+         gzungetc                                 @49
+         zlibCompileFlags                         @50
+         deflatePrime                             @51
+ 
+         unzOpen                                  @61
+         unzClose                                 @62
+         unzGetGlobalInfo                         @63
+         unzGetCurrentFileInfo                    @64
+         unzGoToFirstFile                         @65
+         unzGoToNextFile                          @66
+         unzOpenCurrentFile                       @67
+         unzReadCurrentFile                       @68
+         unzOpenCurrentFile3                      @69
+         unztell                                  @70
+         unzeof                                   @71
+         unzCloseCurrentFile                      @72
+         unzGetGlobalComment                      @73
+         unzStringFileNameCompare                 @74
+         unzLocateFile                            @75
+         unzGetLocalExtrafield                    @76
+         unzOpen2                                 @77
+         unzOpenCurrentFile2                      @78
+         unzOpenCurrentFilePassword               @79
+ 
+         zipOpen                                  @80
+         zipOpenNewFileInZip                      @81
+         zipWriteInFileInZip                      @82
+         zipCloseFileInZip                        @83
+         zipClose                                 @84
+         zipOpenNewFileInZip2                     @86
+         zipCloseFileInZipRaw                     @87
+         zipOpen2                                 @88
+         zipOpenNewFileInZip3                     @89
+ 
+         unzGetFilePos                            @100
+         unzGoToFilePos                           @101
+ 
+         fill_win32_filefunc                      @110
diff -Nrcpad gcc-3.4.3/zlib/contrib/vstudio/vc7/zlibvc.sln gcc-4.0.0/zlib/contrib/vstudio/vc7/zlibvc.sln
*** gcc-3.4.3/zlib/contrib/vstudio/vc7/zlibvc.sln	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/vstudio/vc7/zlibvc.sln	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,66 ----
+ Microsoft Visual Studio Solution File, Format Version 7.00
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
+ EndProject
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
+ EndProject
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
+ EndProject
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
+ EndProject
+ Global
+ 	GlobalSection(SolutionConfiguration) = preSolution
+ 		ConfigName.0 = Debug
+ 		ConfigName.1 = Release
+ 		ConfigName.2 = ReleaseAxp
+ 		ConfigName.3 = ReleaseWithoutAsm
+ 		ConfigName.4 = ReleaseWithoutCrtdll
+ 	EndGlobalSection
+ 	GlobalSection(ProjectDependencies) = postSolution
+ 	EndGlobalSection
+ 	GlobalSection(ProjectConfiguration) = postSolution
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug.ActiveCfg = Debug|Win32
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug.Build.0 = Debug|Win32
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release.ActiveCfg = Release|Win32
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release.Build.0 = Release|Win32
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseAxp.ActiveCfg = ReleaseAxp|Win32
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseAxp.Build.0 = ReleaseAxp|Win32
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm.ActiveCfg = ReleaseWithoutAsm|Win32
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm.Build.0 = ReleaseWithoutAsm|Win32
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutCrtdll.ActiveCfg = ReleaseAxp|Win32
+ 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutCrtdll.Build.0 = ReleaseAxp|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug.ActiveCfg = Debug|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug.Build.0 = Debug|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release.ActiveCfg = Release|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release.Build.0 = Release|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseAxp.ActiveCfg = ReleaseAxp|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseAxp.Build.0 = ReleaseAxp|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm.ActiveCfg = ReleaseWithoutAsm|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm.Build.0 = ReleaseWithoutAsm|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutCrtdll.ActiveCfg = ReleaseWithoutCrtdll|Win32
+ 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutCrtdll.Build.0 = ReleaseWithoutCrtdll|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug.ActiveCfg = Debug|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug.Build.0 = Debug|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release.ActiveCfg = Release|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release.Build.0 = Release|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseAxp.ActiveCfg = Release|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseAxp.Build.0 = Release|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm.ActiveCfg = Release|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm.Build.0 = Release|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutCrtdll.ActiveCfg = Release|Win32
+ 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutCrtdll.Build.0 = Release|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug.ActiveCfg = Debug|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug.Build.0 = Debug|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release.ActiveCfg = Release|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release.Build.0 = Release|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseAxp.ActiveCfg = Release|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseAxp.Build.0 = Release|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm.ActiveCfg = Release|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm.Build.0 = Release|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutCrtdll.ActiveCfg = Release|Win32
+ 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutCrtdll.Build.0 = Release|Win32
+ 	EndGlobalSection
+ 	GlobalSection(ExtensibilityGlobals) = postSolution
+ 	EndGlobalSection
+ 	GlobalSection(ExtensibilityAddIns) = postSolution
+ 	EndGlobalSection
+ EndGlobal
diff -Nrcpad gcc-3.4.3/zlib/contrib/vstudio/vc7/zlibvc.vcproj gcc-4.0.0/zlib/contrib/vstudio/vc7/zlibvc.vcproj
*** gcc-3.4.3/zlib/contrib/vstudio/vc7/zlibvc.vcproj	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/contrib/vstudio/vc7/zlibvc.vcproj	Mon Oct 11 17:44:21 2004
***************
*** 0 ****
--- 1,436 ----
+ <?xml version="1.0" encoding = "Windows-1252"?>
+ <VisualStudioProject
+ 	ProjectType="Visual C++"
+ 	Version="7.00"
+ 	Name="zlibvc"
+ 	SccProjectName=""
+ 	SccLocalPath="">
+ 	<Platforms>
+ 		<Platform
+ 			Name="Win32"/>
+ 	</Platforms>
+ 	<Configurations>
+ 		<Configuration
+ 			Name="Debug|Win32"
+ 			OutputDirectory=".\DebugDll"
+ 			IntermediateDirectory=".\DebugDll"
+ 			ConfigurationType="2"
+ 			UseOfMFC="0"
+ 			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				Optimization="0"
+ 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF"
+ 				ExceptionHandling="FALSE"
+ 				RuntimeLibrary="1"
+ 				PrecompiledHeaderFile=".\DebugDll/zlibvc.pch"
+ 				AssemblerListingLocation=".\DebugDll/"
+ 				ObjectFile=".\DebugDll/"
+ 				ProgramDataBaseFileName=".\DebugDll/"
+ 				WarningLevel="3"
+ 				SuppressStartupBanner="TRUE"
+ 				DebugInformationFormat="4"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				AdditionalOptions="/MACHINE:I386"
+ 				AdditionalDependencies="gvmat32.obj inffas32.obj"
+ 				OutputFile=".\DebugDll\zlibwapi.dll"
+ 				LinkIncremental="2"
+ 				SuppressStartupBanner="TRUE"
+ 				ModuleDefinitionFile=".\zlibvc.def"
+ 				GenerateDebugInformation="TRUE"
+ 				ProgramDatabaseFile=".\DebugDll/zlibwapi.pdb"
+ 				SubSystem="2"
+ 				ImportLibrary=".\DebugDll/zlibwapi.lib"/>
+ 			<Tool
+ 				Name="VCMIDLTool"
+ 				PreprocessorDefinitions="_DEBUG"
+ 				MkTypLibCompatible="TRUE"
+ 				SuppressStartupBanner="TRUE"
+ 				TargetEnvironment="1"
+ 				TypeLibraryName=".\DebugDll/zlibvc.tlb"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"
+ 				PreprocessorDefinitions="_DEBUG"
+ 				Culture="1036"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="ReleaseWithoutAsm|Win32"
+ 			OutputDirectory=".\zlibDllWithoutAsm"
+ 			IntermediateDirectory=".\zlibDllWithoutAsm"
+ 			ConfigurationType="2"
+ 			UseOfMFC="0"
+ 			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				InlineFunctionExpansion="1"
+ 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI"
+ 				StringPooling="TRUE"
+ 				ExceptionHandling="FALSE"
+ 				RuntimeLibrary="0"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				PrecompiledHeaderFile=".\zlibDllWithoutAsm/zlibvc.pch"
+ 				AssemblerOutput="2"
+ 				AssemblerListingLocation=".\zlibDllWithoutAsm/"
+ 				ObjectFile=".\zlibDllWithoutAsm/"
+ 				ProgramDataBaseFileName=".\zlibDllWithoutAsm/"
+ 				BrowseInformation="1"
+ 				WarningLevel="3"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				AdditionalOptions="/MACHINE:I386"
+ 				AdditionalDependencies="crtdll.lib"
+ 				OutputFile=".\zlibDllWithoutAsm\zlibwapi.dll"
+ 				LinkIncremental="1"
+ 				SuppressStartupBanner="TRUE"
+ 				IgnoreAllDefaultLibraries="TRUE"
+ 				ModuleDefinitionFile=".\zlibvc.def"
+ 				ProgramDatabaseFile=".\zlibDllWithoutAsm/zlibwapi.pdb"
+ 				GenerateMapFile="TRUE"
+ 				MapFileName=".\zlibDllWithoutAsm/zlibwapi.map"
+ 				SubSystem="2"
+ 				OptimizeForWindows98="1"
+ 				ImportLibrary=".\zlibDllWithoutAsm/zlibwapi.lib"/>
+ 			<Tool
+ 				Name="VCMIDLTool"
+ 				PreprocessorDefinitions="NDEBUG"
+ 				MkTypLibCompatible="TRUE"
+ 				SuppressStartupBanner="TRUE"
+ 				TargetEnvironment="1"
+ 				TypeLibraryName=".\zlibDllWithoutAsm/zlibvc.tlb"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"
+ 				PreprocessorDefinitions="NDEBUG"
+ 				Culture="1036"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="ReleaseWithoutCrtdll|Win32"
+ 			OutputDirectory=".\zlibDllWithoutCrtDll"
+ 			IntermediateDirectory=".\zlibDllWithoutCrtDll"
+ 			ConfigurationType="2"
+ 			UseOfMFC="0"
+ 			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				InlineFunctionExpansion="1"
+ 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF"
+ 				StringPooling="TRUE"
+ 				ExceptionHandling="FALSE"
+ 				RuntimeLibrary="0"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				PrecompiledHeaderFile=".\zlibDllWithoutCrtDll/zlibvc.pch"
+ 				AssemblerOutput="2"
+ 				AssemblerListingLocation=".\zlibDllWithoutCrtDll/"
+ 				ObjectFile=".\zlibDllWithoutCrtDll/"
+ 				ProgramDataBaseFileName=".\zlibDllWithoutCrtDll/"
+ 				BrowseInformation="1"
+ 				WarningLevel="3"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				AdditionalOptions="/MACHINE:I386"
+ 				AdditionalDependencies="gvmat32.obj inffas32.obj "
+ 				OutputFile=".\zlibDllWithoutCrtDll\zlibwapi.dll"
+ 				LinkIncremental="1"
+ 				SuppressStartupBanner="TRUE"
+ 				IgnoreAllDefaultLibraries="FALSE"
+ 				ModuleDefinitionFile=".\zlibvc.def"
+ 				ProgramDatabaseFile=".\zlibDllWithoutCrtDll/zlibwapi.pdb"
+ 				GenerateMapFile="TRUE"
+ 				MapFileName=".\zlibDllWithoutCrtDll/zlibwapi.map"
+ 				SubSystem="2"
+ 				OptimizeForWindows98="1"
+ 				ImportLibrary=".\zlibDllWithoutCrtDll/zlibwapi.lib"/>
+ 			<Tool
+ 				Name="VCMIDLTool"
+ 				PreprocessorDefinitions="NDEBUG"
+ 				MkTypLibCompatible="TRUE"
+ 				SuppressStartupBanner="TRUE"
+ 				TargetEnvironment="1"
+ 				TypeLibraryName=".\zlibDllWithoutCrtDll/zlibvc.tlb"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"
+ 				PreprocessorDefinitions="NDEBUG"
+ 				Culture="1036"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="ReleaseAxp|Win32"
+ 			OutputDirectory=".\zlibvc__"
+ 			IntermediateDirectory=".\zlibvc__"
+ 			ConfigurationType="2"
+ 			UseOfMFC="0"
+ 			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				InlineFunctionExpansion="1"
+ 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI"
+ 				StringPooling="TRUE"
+ 				ExceptionHandling="FALSE"
+ 				RuntimeLibrary="0"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				PrecompiledHeaderFile=".\zlibvc__/zlibvc.pch"
+ 				AssemblerOutput="2"
+ 				AssemblerListingLocation=".\zlibvc__/"
+ 				ObjectFile=".\zlibvc__/"
+ 				ProgramDataBaseFileName=".\zlibvc__/"
+ 				BrowseInformation="1"
+ 				WarningLevel="3"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				AdditionalDependencies="crtdll.lib"
+ 				OutputFile="zlibvc__\zlibwapi.dll"
+ 				LinkIncremental="1"
+ 				SuppressStartupBanner="TRUE"
+ 				IgnoreAllDefaultLibraries="TRUE"
+ 				ModuleDefinitionFile=".\zlibvc.def"
+ 				ProgramDatabaseFile=".\zlibvc__/zlibwapi.pdb"
+ 				GenerateMapFile="TRUE"
+ 				MapFileName=".\zlibvc__/zlibwapi.map"
+ 				SubSystem="2"
+ 				ImportLibrary=".\zlibvc__/zlibwapi.lib"/>
+ 			<Tool
+ 				Name="VCMIDLTool"
+ 				PreprocessorDefinitions="NDEBUG"
+ 				MkTypLibCompatible="TRUE"
+ 				SuppressStartupBanner="TRUE"
+ 				TargetEnvironment="1"
+ 				TypeLibraryName=".\zlibvc__/zlibvc.tlb"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"
+ 				PreprocessorDefinitions="NDEBUG"
+ 				Culture="1036"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 		<Configuration
+ 			Name="Release|Win32"
+ 			OutputDirectory=".\ReleaseDll"
+ 			IntermediateDirectory=".\ReleaseDll"
+ 			ConfigurationType="2"
+ 			UseOfMFC="0"
+ 			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ 			<Tool
+ 				Name="VCCLCompilerTool"
+ 				InlineFunctionExpansion="1"
+ 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF"
+ 				StringPooling="TRUE"
+ 				ExceptionHandling="FALSE"
+ 				RuntimeLibrary="0"
+ 				EnableFunctionLevelLinking="TRUE"
+ 				PrecompiledHeaderFile=".\ReleaseDll/zlibvc.pch"
+ 				AssemblerOutput="2"
+ 				AssemblerListingLocation=".\ReleaseDll/"
+ 				ObjectFile=".\ReleaseDll/"
+ 				ProgramDataBaseFileName=".\ReleaseDll/"
+ 				BrowseInformation="1"
+ 				WarningLevel="3"
+ 				SuppressStartupBanner="TRUE"/>
+ 			<Tool
+ 				Name="VCCustomBuildTool"/>
+ 			<Tool
+ 				Name="VCLinkerTool"
+ 				AdditionalOptions="/MACHINE:I386"
+ 				AdditionalDependencies="gvmat32.obj inffas32.obj crtdll.lib"
+ 				OutputFile=".\ReleaseDll\zlibwapi.dll"
+ 				LinkIncremental="1"
+ 				SuppressStartupBanner="TRUE"
+ 				IgnoreAllDefaultLibraries="TRUE"
+ 				ModuleDefinitionFile=".\zlibvc.def"
+ 				ProgramDatabaseFile=".\ReleaseDll/zlibwapi.pdb"
+ 				GenerateMapFile="TRUE"
+ 				MapFileName=".\ReleaseDll/zlibwapi.map"
+ 				SubSystem="2"
+ 				OptimizeForWindows98="1"
+ 				ImportLibrary=".\ReleaseDll/zlibwapi.lib"/>
+ 			<Tool
+ 				Name="VCMIDLTool"
+ 				PreprocessorDefinitions="NDEBUG"
+ 				MkTypLibCompatible="TRUE"
+ 				SuppressStartupBanner="TRUE"
+ 				TargetEnvironment="1"
+ 				TypeLibraryName=".\Release/zlibvc.tlb"/>
+ 			<Tool
+ 				Name="VCPostBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreBuildEventTool"/>
+ 			<Tool
+ 				Name="VCPreLinkEventTool"/>
+ 			<Tool
+ 				Name="VCResourceCompilerTool"
+ 				PreprocessorDefinitions="NDEBUG"
+ 				Culture="1036"/>
+ 			<Tool
+ 				Name="VCWebServiceProxyGeneratorTool"/>
+ 			<Tool
+ 				Name="VCWebDeploymentTool"/>
+ 		</Configuration>
+ 	</Configurations>
+ 	<Files>
+ 		<Filter
+ 			Name="Source Files"
+ 			Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90">
+ 			<File
+ 				RelativePath=".\adler32.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\compress.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\crc32.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\deflate.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\gvmat32c.c">
+ 				<FileConfiguration
+ 					Name="ReleaseWithoutAsm|Win32"
+ 					ExcludedFromBuild="TRUE">
+ 					<Tool
+ 						Name="VCCLCompilerTool"/>
+ 				</FileConfiguration>
+ 			</File>
+ 			<File
+ 				RelativePath=".\gzio.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\infback.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\inffast.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\inflate.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\inftrees.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\ioapi.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\iowin32.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\trees.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\uncompr.c">
+ 			</File>
+ 			<File
+ 				RelativePath=".\unzip.c">
+ 				<FileConfiguration
+ 					Name="Release|Win32">
+ 					<Tool
+ 						Name="VCCLCompilerTool"
+ 						AdditionalIncludeDirectories=""
+ 						PreprocessorDefinitions="ZLIB_INTERNAL"/>
+ 				</FileConfiguration>
+ 			</File>
+ 			<File
+ 				RelativePath=".\zip.c">
+ 				<FileConfiguration
+ 					Name="Release|Win32">
+ 					<Tool
+ 						Name="VCCLCompilerTool"
+ 						AdditionalIncludeDirectories=""
+ 						PreprocessorDefinitions="ZLIB_INTERNAL"/>
+ 				</FileConfiguration>
+ 			</File>
+ 			<File
+ 				RelativePath=".\zlib.rc">
+ 			</File>
+ 			<File
+ 				RelativePath=".\zlibvc.def">
+ 			</File>
+ 			<File
+ 				RelativePath=".\zutil.c">
+ 			</File>
+ 		</Filter>
+ 		<Filter
+ 			Name="Header Files"
+ 			Filter="h;hpp;hxx;hm;inl;fi;fd">
+ 			<File
+ 				RelativePath=".\deflate.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\infblock.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\infcodes.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\inffast.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\inftrees.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\infutil.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\zconf.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\zlib.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\zutil.h">
+ 			</File>
+ 		</Filter>
+ 		<Filter
+ 			Name="Resource Files"
+ 			Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe">
+ 		</Filter>
+ 	</Files>
+ 	<Globals>
+ 	</Globals>
+ </VisualStudioProject>
diff -Nrcpad gcc-3.4.3/zlib/crc32.c gcc-4.0.0/zlib/crc32.c
*** gcc-3.4.3/zlib/crc32.c	Mon Mar 11 22:11:16 2002
--- gcc-4.0.0/zlib/crc32.c	Mon Oct 11 18:45:37 2004
***************
*** 1,22 ****
  /* crc32.c -- compute the CRC-32 of a data stream
!  * Copyright (C) 1995-2002 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* @(#) $Id: crc32.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
  
! #include "zlib.h"
  
  #define local static
  
  #ifdef DYNAMIC_CRC_TABLE
  
  local int crc_table_empty = 1;
! local uLongf crc_table[256];
  local void make_crc_table OF((void));
  
  /*
!   Generate a table for a byte-wise 32-bit CRC calculation on the polynomial:
    x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
  
    Polynomials over GF(2) are represented in binary, one bit per coefficient,
--- 1,72 ----
  /* crc32.c -- compute the CRC-32 of a data stream
!  * Copyright (C) 1995-2003 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h
!  *
!  * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
!  * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
!  * tables for updating the shift register in one step with three exclusive-ors
!  * instead of four steps with four exclusive-ors.  This results about a factor
!  * of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
   */
  
  /* @(#) $Id: crc32.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
  
! #ifdef MAKECRCH
! #  include <stdio.h>
! #  ifndef DYNAMIC_CRC_TABLE
! #    define DYNAMIC_CRC_TABLE
! #  endif /* !DYNAMIC_CRC_TABLE */
! #endif /* MAKECRCH */
! 
! #include "zutil.h"      /* for STDC and FAR definitions */
  
  #define local static
  
+ /* Find a four-byte integer type for crc32_little() and crc32_big(). */
+ #ifndef NOBYFOUR
+ #  ifdef STDC           /* need ANSI C limits.h to determine sizes */
+ #    include <limits.h>
+ #    define BYFOUR
+ #    if (UINT_MAX == 0xffffffffUL)
+        typedef unsigned int u4;
+ #    else
+ #      if (ULONG_MAX == 0xffffffffUL)
+          typedef unsigned long u4;
+ #      else
+ #        if (USHRT_MAX == 0xffffffffUL)
+            typedef unsigned short u4;
+ #        else
+ #          undef BYFOUR     /* can't find a four-byte integer type! */
+ #        endif
+ #      endif
+ #    endif
+ #  endif /* STDC */
+ #endif /* !NOBYFOUR */
+ 
+ /* Definitions for doing the crc four data bytes at a time. */
+ #ifdef BYFOUR
+ #  define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \
+                 (((w)&0xff00)<<8)+(((w)&0xff)<<24))
+    local unsigned long crc32_little OF((unsigned long,
+                         const unsigned char FAR *, unsigned));
+    local unsigned long crc32_big OF((unsigned long,
+                         const unsigned char FAR *, unsigned));
+ #  define TBLS 8
+ #else
+ #  define TBLS 1
+ #endif /* BYFOUR */
+ 
  #ifdef DYNAMIC_CRC_TABLE
  
  local int crc_table_empty = 1;
! local unsigned long FAR crc_table[TBLS][256];
  local void make_crc_table OF((void));
+ #ifdef MAKECRCH
+    local void write_table OF((FILE *, const unsigned long FAR *));
+ #endif /* MAKECRCH */
  
  /*
!   Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
    x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
  
    Polynomials over GF(2) are represented in binary, one bit per coefficient,
*************** local void make_crc_table OF((void));
*** 35,162 ****
    out is a one).  We start with the highest power (least significant bit) of
    q and repeat for all eight bits of q.
  
!   The table is simply the CRC of all possible eight bit values.  This is all
!   the information needed to generate CRC's on data a byte at a time for all
!   combinations of CRC register values and incoming bytes.
  */
  local void make_crc_table()
  {
!   uLong c;
!   int n, k;
!   uLong poly;            /* polynomial exclusive-or pattern */
!   /* terms of polynomial defining this crc (except x^32): */
!   static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
  
-   /* make exclusive-or pattern from polynomial (0xedb88320L) */
-   poly = 0L;
-   for (n = 0; n < sizeof(p)/sizeof(Byte); n++)
-     poly |= 1L << (31 - p[n]);
-  
-   for (n = 0; n < 256; n++)
-   {
-     c = (uLong)n;
-     for (k = 0; k < 8; k++)
-       c = c & 1 ? poly ^ (c >> 1) : c >> 1;
-     crc_table[n] = c;
-   }
    crc_table_empty = 0;
  }
! #else
  /* ========================================================================
!  * Table of CRC-32's of all single-byte values (made by make_crc_table)
   */
! local const uLongf crc_table[256] = {
!   0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
!   0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
!   0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
!   0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
!   0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
!   0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
!   0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
!   0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
!   0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
!   0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
!   0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
!   0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
!   0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
!   0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
!   0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
!   0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
!   0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
!   0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
!   0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
!   0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
!   0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
!   0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
!   0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
!   0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
!   0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
!   0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
!   0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
!   0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
!   0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
!   0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
!   0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
!   0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
!   0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
!   0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
!   0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
!   0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
!   0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
!   0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
!   0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
!   0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
!   0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
!   0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
!   0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
!   0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
!   0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
!   0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
!   0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
!   0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
!   0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
!   0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
!   0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
!   0x2d02ef8dL
! };
! #endif
  
  /* =========================================================================
   * This function can be used by asm versions of crc32()
   */
! const uLongf * ZEXPORT get_crc_table()
  {
  #ifdef DYNAMIC_CRC_TABLE
    if (crc_table_empty) make_crc_table();
! #endif
!   return (const uLongf *)crc_table;
  }
  
  /* ========================================================================= */
! #define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
! #define DO2(buf)  DO1(buf); DO1(buf);
! #define DO4(buf)  DO2(buf); DO2(buf);
! #define DO8(buf)  DO4(buf); DO4(buf);
  
  /* ========================================================================= */
! uLong ZEXPORT crc32(crc, buf, len)
!     uLong crc;
!     const Bytef *buf;
!     uInt len;
  {
!     if (buf == Z_NULL) return 0L;
  #ifdef DYNAMIC_CRC_TABLE
      if (crc_table_empty)
!       make_crc_table();
! #endif
!     crc = crc ^ 0xffffffffL;
!     while (len >= 8)
!     {
!       DO8(buf);
!       len -= 8;
      }
      if (len) do {
!       DO1(buf);
      } while (--len);
!     return crc ^ 0xffffffffL;
  }
--- 85,311 ----
    out is a one).  We start with the highest power (least significant bit) of
    q and repeat for all eight bits of q.
  
!   The first table is simply the CRC of all possible eight bit values.  This is
!   all the information needed to generate CRCs on data a byte at a time for all
!   combinations of CRC register values and incoming bytes.  The remaining tables
!   allow for word-at-a-time CRC calculation for both big-endian and little-
!   endian machines, where a word is four bytes.
  */
  local void make_crc_table()
  {
!     unsigned long c;
!     int n, k;
!     unsigned long poly;            /* polynomial exclusive-or pattern */
!     /* terms of polynomial defining this crc (except x^32): */
!     static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
! 
!     /* make exclusive-or pattern from polynomial (0xedb88320UL) */
!     poly = 0UL;
!     for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++)
!         poly |= 1UL << (31 - p[n]);
! 
!     /* generate a crc for every 8-bit value */
!     for (n = 0; n < 256; n++) {
!         c = (unsigned long)n;
!         for (k = 0; k < 8; k++)
!             c = c & 1 ? poly ^ (c >> 1) : c >> 1;
!         crc_table[0][n] = c;
!     }
! 
! #ifdef BYFOUR
!     /* generate crc for each value followed by one, two, and three zeros, and
!        then the byte reversal of those as well as the first table */
!     for (n = 0; n < 256; n++) {
!         c = crc_table[0][n];
!         crc_table[4][n] = REV(c);
!         for (k = 1; k < 4; k++) {
!             c = crc_table[0][c & 0xff] ^ (c >> 8);
!             crc_table[k][n] = c;
!             crc_table[k + 4][n] = REV(c);
!         }
!     }
! #endif /* BYFOUR */
  
    crc_table_empty = 0;
+ 
+ #ifdef MAKECRCH
+     /* write out CRC tables to crc32.h */
+     {
+         FILE *out;
+ 
+         out = fopen("crc32.h", "w");
+         if (out == NULL) return;
+         fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
+         fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
+         fprintf(out, "local const unsigned long FAR ");
+         fprintf(out, "crc_table[TBLS][256] =\n{\n  {\n");
+         write_table(out, crc_table[0]);
+ #  ifdef BYFOUR
+         fprintf(out, "#ifdef BYFOUR\n");
+         for (k = 1; k < 8; k++) {
+             fprintf(out, "  },\n  {\n");
+             write_table(out, crc_table[k]);
+         }
+         fprintf(out, "#endif\n");
+ #  endif /* BYFOUR */
+         fprintf(out, "  }\n};\n");
+         fclose(out);
+     }
+ #endif /* MAKECRCH */
  }
! 
! #ifdef MAKECRCH
! local void write_table(out, table)
!     FILE *out;
!     const unsigned long FAR *table;
! {
!     int n;
! 
!     for (n = 0; n < 256; n++)
!         fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : "    ", table[n],
!                 n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
! }
! #endif /* MAKECRCH */
! 
! #else /* !DYNAMIC_CRC_TABLE */
  /* ========================================================================
!  * Tables of CRC-32s of all single-byte values, made by make_crc_table().
   */
! #include "crc32.h"
! #endif /* DYNAMIC_CRC_TABLE */
  
  /* =========================================================================
   * This function can be used by asm versions of crc32()
   */
! const unsigned long FAR * ZEXPORT get_crc_table()
  {
  #ifdef DYNAMIC_CRC_TABLE
    if (crc_table_empty) make_crc_table();
! #endif /* DYNAMIC_CRC_TABLE */
!   return (const unsigned long FAR *)crc_table;
  }
  
  /* ========================================================================= */
! #define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
! #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
  
  /* ========================================================================= */
! unsigned long ZEXPORT crc32(crc, buf, len)
!     unsigned long crc;
!     const unsigned char FAR *buf;
!     unsigned len;
  {
!     if (buf == Z_NULL) return 0UL;
! 
  #ifdef DYNAMIC_CRC_TABLE
      if (crc_table_empty)
!         make_crc_table();
! #endif /* DYNAMIC_CRC_TABLE */
! 
! #ifdef BYFOUR
!     if (sizeof(void *) == sizeof(ptrdiff_t)) {
!         u4 endian;
! 
!         endian = 1;
!         if (*((unsigned char *)(&endian)))
!             return crc32_little(crc, buf, len);
!         else
!             return crc32_big(crc, buf, len);
!     }
! #endif /* BYFOUR */
!     crc = crc ^ 0xffffffffUL;
!     while (len >= 8) {
!         DO8;
!         len -= 8;
      }
      if (len) do {
!         DO1;
      } while (--len);
!     return crc ^ 0xffffffffUL;
! }
! 
! #ifdef BYFOUR
! 
! /* ========================================================================= */
! #define DOLIT4 c ^= *buf4++; \
!         c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
!             crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
! #define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
! 
! /* ========================================================================= */
! local unsigned long crc32_little(crc, buf, len)
!     unsigned long crc;
!     const unsigned char FAR *buf;
!     unsigned len;
! {
!     register u4 c;
!     register const u4 FAR *buf4;
! 
!     c = (u4)crc;
!     c = ~c;
!     while (len && ((ptrdiff_t)buf & 3)) {
!         c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
!         len--;
!     }
! 
!     buf4 = (const u4 FAR *)buf;
!     while (len >= 32) {
!         DOLIT32;
!         len -= 32;
!     }
!     while (len >= 4) {
!         DOLIT4;
!         len -= 4;
!     }
!     buf = (const unsigned char FAR *)buf4;
! 
!     if (len) do {
!         c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
!     } while (--len);
!     c = ~c;
!     return (unsigned long)c;
  }
+ 
+ /* ========================================================================= */
+ #define DOBIG4 c ^= *++buf4; \
+         c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
+             crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
+ #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
+ 
+ /* ========================================================================= */
+ local unsigned long crc32_big(crc, buf, len)
+     unsigned long crc;
+     const unsigned char FAR *buf;
+     unsigned len;
+ {
+     register u4 c;
+     register const u4 FAR *buf4;
+ 
+     c = REV((u4)crc);
+     c = ~c;
+     while (len && ((ptrdiff_t)buf & 3)) {
+         c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+         len--;
+     }
+ 
+     buf4 = (const u4 FAR *)buf;
+     buf4--;
+     while (len >= 32) {
+         DOBIG32;
+         len -= 32;
+     }
+     while (len >= 4) {
+         DOBIG4;
+         len -= 4;
+     }
+     buf4++;
+     buf = (const unsigned char FAR *)buf4;
+ 
+     if (len) do {
+         c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+     } while (--len);
+     c = ~c;
+     return (unsigned long)(REV(c));
+ }
+ 
+ #endif /* BYFOUR */
diff -Nrcpad gcc-3.4.3/zlib/crc32.h gcc-4.0.0/zlib/crc32.h
*** gcc-3.4.3/zlib/crc32.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/crc32.h	Mon Oct 11 17:44:12 2004
***************
*** 0 ****
--- 1,441 ----
+ /* crc32.h -- tables for rapid CRC calculation
+  * Generated automatically by crc32.c
+  */
+ 
+ local const unsigned long FAR crc_table[TBLS][256] =
+ {
+   {
+     0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
+     0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
+     0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
+     0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
+     0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
+     0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
+     0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
+     0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
+     0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
+     0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
+     0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
+     0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
+     0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
+     0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
+     0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
+     0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
+     0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
+     0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
+     0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
+     0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
+     0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
+     0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
+     0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
+     0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
+     0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
+     0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
+     0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
+     0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
+     0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
+     0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
+     0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
+     0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
+     0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
+     0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
+     0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
+     0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
+     0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
+     0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
+     0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
+     0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
+     0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
+     0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
+     0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
+     0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
+     0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
+     0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
+     0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
+     0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
+     0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
+     0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
+     0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
+     0x2d02ef8dUL
+ #ifdef BYFOUR
+   },
+   {
+     0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
+     0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
+     0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
+     0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
+     0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
+     0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
+     0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
+     0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
+     0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
+     0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
+     0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
+     0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
+     0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
+     0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
+     0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
+     0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
+     0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
+     0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
+     0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
+     0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
+     0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
+     0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
+     0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
+     0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
+     0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
+     0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
+     0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
+     0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
+     0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
+     0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
+     0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
+     0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
+     0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
+     0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
+     0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
+     0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
+     0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
+     0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
+     0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
+     0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
+     0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
+     0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
+     0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
+     0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
+     0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
+     0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
+     0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
+     0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
+     0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
+     0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
+     0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
+     0x9324fd72UL
+   },
+   {
+     0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
+     0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
+     0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
+     0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
+     0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
+     0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
+     0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
+     0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
+     0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
+     0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
+     0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
+     0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
+     0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
+     0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
+     0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
+     0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
+     0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
+     0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
+     0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
+     0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
+     0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
+     0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
+     0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
+     0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
+     0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
+     0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
+     0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
+     0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
+     0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
+     0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
+     0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
+     0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
+     0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
+     0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
+     0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
+     0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
+     0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
+     0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
+     0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
+     0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
+     0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
+     0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
+     0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
+     0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
+     0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
+     0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
+     0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
+     0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
+     0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
+     0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
+     0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
+     0xbe9834edUL
+   },
+   {
+     0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
+     0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
+     0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
+     0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
+     0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
+     0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
+     0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
+     0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
+     0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
+     0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
+     0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
+     0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
+     0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
+     0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
+     0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
+     0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
+     0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
+     0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
+     0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
+     0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
+     0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
+     0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
+     0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
+     0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
+     0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
+     0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
+     0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
+     0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
+     0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
+     0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
+     0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
+     0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
+     0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
+     0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
+     0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
+     0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
+     0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
+     0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
+     0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
+     0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
+     0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
+     0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
+     0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
+     0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
+     0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
+     0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
+     0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
+     0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
+     0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
+     0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
+     0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
+     0xde0506f1UL
+   },
+   {
+     0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
+     0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
+     0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
+     0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
+     0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
+     0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
+     0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
+     0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
+     0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
+     0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
+     0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
+     0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
+     0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
+     0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
+     0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
+     0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
+     0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
+     0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
+     0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
+     0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
+     0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
+     0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
+     0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
+     0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
+     0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
+     0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
+     0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
+     0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
+     0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
+     0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
+     0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
+     0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
+     0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
+     0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
+     0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
+     0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
+     0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
+     0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
+     0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
+     0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
+     0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
+     0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
+     0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
+     0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
+     0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
+     0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
+     0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
+     0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
+     0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
+     0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
+     0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
+     0x8def022dUL
+   },
+   {
+     0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
+     0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
+     0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
+     0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
+     0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
+     0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
+     0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
+     0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
+     0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
+     0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
+     0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
+     0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
+     0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
+     0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
+     0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
+     0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
+     0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
+     0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
+     0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
+     0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
+     0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
+     0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
+     0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
+     0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
+     0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
+     0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
+     0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
+     0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
+     0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
+     0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
+     0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
+     0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
+     0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
+     0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
+     0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
+     0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
+     0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
+     0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
+     0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
+     0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
+     0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
+     0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
+     0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
+     0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
+     0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
+     0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
+     0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
+     0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
+     0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
+     0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
+     0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
+     0x72fd2493UL
+   },
+   {
+     0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
+     0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
+     0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
+     0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
+     0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
+     0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
+     0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
+     0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
+     0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
+     0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
+     0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
+     0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
+     0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
+     0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
+     0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
+     0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
+     0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
+     0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
+     0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
+     0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
+     0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
+     0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
+     0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
+     0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
+     0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
+     0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
+     0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
+     0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
+     0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
+     0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
+     0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
+     0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
+     0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
+     0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
+     0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
+     0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
+     0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
+     0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
+     0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
+     0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
+     0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
+     0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
+     0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
+     0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
+     0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
+     0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
+     0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
+     0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
+     0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
+     0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
+     0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
+     0xed3498beUL
+   },
+   {
+     0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
+     0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
+     0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
+     0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
+     0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
+     0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
+     0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
+     0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
+     0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
+     0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
+     0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
+     0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
+     0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
+     0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
+     0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
+     0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
+     0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
+     0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
+     0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
+     0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
+     0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
+     0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
+     0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
+     0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
+     0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
+     0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
+     0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
+     0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
+     0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
+     0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
+     0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
+     0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
+     0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
+     0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
+     0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
+     0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
+     0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
+     0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
+     0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
+     0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
+     0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
+     0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
+     0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
+     0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
+     0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
+     0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
+     0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
+     0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
+     0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
+     0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
+     0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
+     0xf10605deUL
+ #endif
+   }
+ };
diff -Nrcpad gcc-3.4.3/zlib/deflate.c gcc-4.0.0/zlib/deflate.c
*** gcc-3.4.3/zlib/deflate.c	Mon Mar 11 22:11:16 2002
--- gcc-4.0.0/zlib/deflate.c	Mon Oct 11 18:45:37 2004
***************
*** 1,6 ****
  /* deflate.c -- compress data using the deflation algorithm
!  * Copyright (C) 1995-2002 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /*
--- 1,6 ----
  /* deflate.c -- compress data using the deflation algorithm
!  * Copyright (C) 1995-2003 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /*
***************
*** 37,43 ****
   *  REFERENCES
   *
   *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
!  *      Available in ftp://ds.internic.net/rfc/rfc1951.txt
   *
   *      A description of the Rabin and Karp algorithm is given in the book
   *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
--- 37,43 ----
   *  REFERENCES
   *
   *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
!  *      Available in http://www.ietf.org/rfc/rfc1951.txt
   *
   *      A description of the Rabin and Karp algorithm is given in the book
   *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
***************
*** 52,58 ****
  #include "deflate.h"
  
  const char deflate_copyright[] =
!    " deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly ";
  /*
    If you use the zlib library in a product, an acknowledgment is welcome
    in the documentation of your product. If for some reason you cannot
--- 52,58 ----
  #include "deflate.h"
  
  const char deflate_copyright[] =
!    " deflate 1.2.1 Copyright 1995-2003 Jean-loup Gailly ";
  /*
    If you use the zlib library in a product, an acknowledgment is welcome
    in the documentation of your product. If for some reason you cannot
*************** typedef block_state (*compress_func) OF(
*** 76,92 ****
--- 76,97 ----
  local void fill_window    OF((deflate_state *s));
  local block_state deflate_stored OF((deflate_state *s, int flush));
  local block_state deflate_fast   OF((deflate_state *s, int flush));
+ #ifndef FASTEST
  local block_state deflate_slow   OF((deflate_state *s, int flush));
+ #endif
  local void lm_init        OF((deflate_state *s));
  local void putShortMSB    OF((deflate_state *s, uInt b));
  local void flush_pending  OF((z_streamp strm));
  local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));
+ #ifndef FASTEST
  #ifdef ASMV
        void match_init OF((void)); /* asm code initialization */
        uInt longest_match  OF((deflate_state *s, IPos cur_match));
  #else
  local uInt longest_match  OF((deflate_state *s, IPos cur_match));
  #endif
+ #endif
+ local uInt longest_match_fast OF((deflate_state *s, IPos cur_match));
  
  #ifdef DEBUG
  local  void check_match OF((deflate_state *s, IPos start, IPos match,
*************** typedef struct config_s {
*** 123,132 ****
     compress_func func;
  } config;
  
  local const config configuration_table[10] = {
  /*      good lazy nice chain */
  /* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
! /* 1 */ {4,    4,  8,    4, deflate_fast}, /* maximum speed, no lazy matches */
  /* 2 */ {4,    5, 16,    8, deflate_fast},
  /* 3 */ {4,    6, 32,   32, deflate_fast},
  
--- 128,143 ----
     compress_func func;
  } config;
  
+ #ifdef FASTEST
+ local const config configuration_table[2] = {
+ /*      good lazy nice chain */
+ /* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
+ /* 1 */ {4,    4,  8,    4, deflate_fast}}; /* max speed, no lazy matches */
+ #else
  local const config configuration_table[10] = {
  /*      good lazy nice chain */
  /* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
! /* 1 */ {4,    4,  8,    4, deflate_fast}, /* max speed, no lazy matches */
  /* 2 */ {4,    5, 16,    8, deflate_fast},
  /* 3 */ {4,    6, 32,   32, deflate_fast},
  
*************** local const config configuration_table[1
*** 135,141 ****
  /* 6 */ {8,   16, 128, 128, deflate_slow},
  /* 7 */ {8,   32, 128, 256, deflate_slow},
  /* 8 */ {32, 128, 258, 1024, deflate_slow},
! /* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */
  
  /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
   * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
--- 146,153 ----
  /* 6 */ {8,   16, 128, 128, deflate_slow},
  /* 7 */ {8,   32, 128, 256, deflate_slow},
  /* 8 */ {32, 128, 258, 1024, deflate_slow},
! /* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
! #endif
  
  /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
   * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
*************** local const config configuration_table[1
*** 145,151 ****
--- 157,165 ----
  #define EQUAL 0
  /* result of memcmp for equal strings */
  
+ #ifndef NO_DUMMY_DECL
  struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
+ #endif
  
  /* ===========================================================================
   * Update a hash value with the given input byte
*************** struct static_tree_desc_s {int dummy;}; 
*** 174,180 ****
  #else
  #define INSERT_STRING(s, str, match_head) \
     (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
!     s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
      s->head[s->ins_h] = (Pos)(str))
  #endif
  
--- 188,194 ----
  #else
  #define INSERT_STRING(s, str, match_head) \
     (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
!     match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
      s->head[s->ins_h] = (Pos)(str))
  #endif
  
*************** int ZEXPORT deflateInit_(strm, level, ve
*** 194,206 ****
      int stream_size;
  {
      return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
! 			 Z_DEFAULT_STRATEGY, version, stream_size);
      /* To do: ignore strm->next_in if we use it as window */
  }
  
  /* ========================================================================= */
  int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
! 		  version, stream_size)
      z_streamp strm;
      int  level;
      int  method;
--- 208,220 ----
      int stream_size;
  {
      return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
!                          Z_DEFAULT_STRATEGY, version, stream_size);
      /* To do: ignore strm->next_in if we use it as window */
  }
  
  /* ========================================================================= */
  int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
!                   version, stream_size)
      z_streamp strm;
      int  level;
      int  method;
*************** int ZEXPORT deflateInit2_(strm, level, m
*** 211,218 ****
      int stream_size;
  {
      deflate_state *s;
!     int noheader = 0;
!     static const char* my_version = ZLIB_VERSION;
  
      ushf *overlay;
      /* We overlay pending_buf and d_buf+l_buf. This works since the average
--- 225,232 ----
      int stream_size;
  {
      deflate_state *s;
!     int wrap = 1;
!     static const char my_version[] = ZLIB_VERSION;
  
      ushf *overlay;
      /* We overlay pending_buf and d_buf+l_buf. This works since the average
*************** int ZEXPORT deflateInit2_(strm, level, m
*** 221,257 ****
  
      if (version == Z_NULL || version[0] != my_version[0] ||
          stream_size != sizeof(z_stream)) {
! 	return Z_VERSION_ERROR;
      }
      if (strm == Z_NULL) return Z_STREAM_ERROR;
  
      strm->msg = Z_NULL;
!     if (strm->zalloc == Z_NULL) {
! 	strm->zalloc = zcalloc;
! 	strm->opaque = (voidpf)0;
      }
!     if (strm->zfree == Z_NULL) strm->zfree = zcfree;
  
-     if (level == Z_DEFAULT_COMPRESSION) level = 6;
  #ifdef FASTEST
!     level = 1;
  #endif
  
!     if (windowBits < 0) { /* undocumented feature: suppress zlib header */
!         noheader = 1;
          windowBits = -windowBits;
      }
      if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
!         windowBits < 9 || windowBits > 15 || level < 0 || level > 9 ||
! 	strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
          return Z_STREAM_ERROR;
      }
      s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
      if (s == Z_NULL) return Z_MEM_ERROR;
      strm->state = (struct internal_state FAR *)s;
      s->strm = strm;
  
!     s->noheader = noheader;
      s->w_bits = windowBits;
      s->w_size = 1 << s->w_bits;
      s->w_mask = s->w_size - 1;
--- 235,279 ----
  
      if (version == Z_NULL || version[0] != my_version[0] ||
          stream_size != sizeof(z_stream)) {
!         return Z_VERSION_ERROR;
      }
      if (strm == Z_NULL) return Z_STREAM_ERROR;
  
      strm->msg = Z_NULL;
!     if (strm->zalloc == (alloc_func)0) {
!         strm->zalloc = zcalloc;
!         strm->opaque = (voidpf)0;
      }
!     if (strm->zfree == (free_func)0) strm->zfree = zcfree;
  
  #ifdef FASTEST
!     if (level != 0) level = 1;
! #else
!     if (level == Z_DEFAULT_COMPRESSION) level = 6;
  #endif
  
!     if (windowBits < 0) { /* suppress zlib wrapper */
!         wrap = 0;
          windowBits = -windowBits;
      }
+ #ifdef GZIP
+     else if (windowBits > 15) {
+         wrap = 2;       /* write gzip wrapper instead */
+         windowBits -= 16;
+     }
+ #endif
      if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
!         windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
!         strategy < 0 || strategy > Z_RLE) {
          return Z_STREAM_ERROR;
      }
+     if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
      s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
      if (s == Z_NULL) return Z_MEM_ERROR;
      strm->state = (struct internal_state FAR *)s;
      s->strm = strm;
  
!     s->wrap = wrap;
      s->w_bits = windowBits;
      s->w_size = 1 << s->w_bits;
      s->w_mask = s->w_size - 1;
*************** int ZEXPORT deflateInit2_(strm, level, m
*** 273,278 ****
--- 295,301 ----
  
      if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
          s->pending_buf == Z_NULL) {
+         s->status = FINISH_STATE;
          strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
          deflateEnd (strm);
          return Z_MEM_ERROR;
*************** int ZEXPORT deflateSetDictionary (strm, 
*** 299,314 ****
      IPos hash_head = 0;
  
      if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL ||
!         strm->state->status != INIT_STATE) return Z_STREAM_ERROR;
  
      s = strm->state;
!     strm->adler = adler32(strm->adler, dictionary, dictLength);
  
      if (length < MIN_MATCH) return Z_OK;
      if (length > MAX_DIST(s)) {
! 	length = MAX_DIST(s);
  #ifndef USE_DICT_HEAD
! 	dictionary += dictLength - length; /* use the tail of the dictionary */
  #endif
      }
      zmemcpy(s->window, dictionary, length);
--- 322,340 ----
      IPos hash_head = 0;
  
      if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL ||
!         strm->state->wrap == 2 ||
!         (strm->state->wrap == 1 && strm->state->status != INIT_STATE))
!         return Z_STREAM_ERROR;
  
      s = strm->state;
!     if (s->wrap)
!         strm->adler = adler32(strm->adler, dictionary, dictLength);
  
      if (length < MIN_MATCH) return Z_OK;
      if (length > MAX_DIST(s)) {
!         length = MAX_DIST(s);
  #ifndef USE_DICT_HEAD
!         dictionary += dictLength - length; /* use the tail of the dictionary */
  #endif
      }
      zmemcpy(s->window, dictionary, length);
*************** int ZEXPORT deflateSetDictionary (strm, 
*** 322,328 ****
      s->ins_h = s->window[0];
      UPDATE_HASH(s, s->ins_h, s->window[1]);
      for (n = 0; n <= length - MIN_MATCH; n++) {
! 	INSERT_STRING(s, n, hash_head);
      }
      if (hash_head) hash_head = 0;  /* to make compiler happy */
      return Z_OK;
--- 348,354 ----
      s->ins_h = s->window[0];
      UPDATE_HASH(s, s->ins_h, s->window[1]);
      for (n = 0; n <= length - MIN_MATCH; n++) {
!         INSERT_STRING(s, n, hash_head);
      }
      if (hash_head) hash_head = 0;  /* to make compiler happy */
      return Z_OK;
*************** int ZEXPORT deflateReset (strm)
*** 333,341 ****
      z_streamp strm;
  {
      deflate_state *s;
!     
      if (strm == Z_NULL || strm->state == Z_NULL ||
!         strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR;
  
      strm->total_in = strm->total_out = 0;
      strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
--- 359,369 ----
      z_streamp strm;
  {
      deflate_state *s;
! 
      if (strm == Z_NULL || strm->state == Z_NULL ||
!         strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
!         return Z_STREAM_ERROR;
!     }
  
      strm->total_in = strm->total_out = 0;
      strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
*************** int ZEXPORT deflateReset (strm)
*** 345,355 ****
      s->pending = 0;
      s->pending_out = s->pending_buf;
  
!     if (s->noheader < 0) {
!         s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */
      }
!     s->status = s->noheader ? BUSY_STATE : INIT_STATE;
!     strm->adler = 1;
      s->last_flush = Z_NO_FLUSH;
  
      _tr_init(s);
--- 373,387 ----
      s->pending = 0;
      s->pending_out = s->pending_buf;
  
!     if (s->wrap < 0) {
!         s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
      }
!     s->status = s->wrap ? INIT_STATE : BUSY_STATE;
!     strm->adler =
! #ifdef GZIP
!         s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
! #endif
!         adler32(0L, Z_NULL, 0);
      s->last_flush = Z_NO_FLUSH;
  
      _tr_init(s);
*************** int ZEXPORT deflateReset (strm)
*** 359,364 ****
--- 391,408 ----
  }
  
  /* ========================================================================= */
+ int ZEXPORT deflatePrime (strm, bits, value)
+     z_streamp strm;
+     int bits;
+     int value;
+ {
+     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+     strm->state->bi_valid = bits;
+     strm->state->bi_buf = (ush)(value & ((1 << bits) - 1));
+     return Z_OK;
+ }
+ 
+ /* ========================================================================= */
  int ZEXPORT deflateParams(strm, level, strategy)
      z_streamp strm;
      int level;
*************** int ZEXPORT deflateParams(strm, level, s
*** 371,400 ****
      if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
      s = strm->state;
  
!     if (level == Z_DEFAULT_COMPRESSION) {
! 	level = 6;
!     }
!     if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
! 	return Z_STREAM_ERROR;
      }
      func = configuration_table[s->level].func;
  
      if (func != configuration_table[level].func && strm->total_in != 0) {
! 	/* Flush the last buffer: */
! 	err = deflate(strm, Z_PARTIAL_FLUSH);
      }
      if (s->level != level) {
! 	s->level = level;
! 	s->max_lazy_match   = configuration_table[level].max_lazy;
! 	s->good_match       = configuration_table[level].good_length;
! 	s->nice_match       = configuration_table[level].nice_length;
! 	s->max_chain_length = configuration_table[level].max_chain;
      }
      s->strategy = strategy;
      return err;
  }
  
  /* =========================================================================
   * Put a short in the pending buffer. The 16-bit value is put in MSB order.
   * IN assertion: the stream state is correct and there is enough room in
   * pending_buf.
--- 415,487 ----
      if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
      s = strm->state;
  
! #ifdef FASTEST
!     if (level != 0) level = 1;
! #else
!     if (level == Z_DEFAULT_COMPRESSION) level = 6;
! #endif
!     if (level < 0 || level > 9 || strategy < 0 || strategy > Z_RLE) {
!         return Z_STREAM_ERROR;
      }
      func = configuration_table[s->level].func;
  
      if (func != configuration_table[level].func && strm->total_in != 0) {
!         /* Flush the last buffer: */
!         err = deflate(strm, Z_PARTIAL_FLUSH);
      }
      if (s->level != level) {
!         s->level = level;
!         s->max_lazy_match   = configuration_table[level].max_lazy;
!         s->good_match       = configuration_table[level].good_length;
!         s->nice_match       = configuration_table[level].nice_length;
!         s->max_chain_length = configuration_table[level].max_chain;
      }
      s->strategy = strategy;
      return err;
  }
  
  /* =========================================================================
+  * For the default windowBits of 15 and memLevel of 8, this function returns
+  * a close to exact, as well as small, upper bound on the compressed size.
+  * They are coded as constants here for a reason--if the #define's are
+  * changed, then this function needs to be changed as well.  The return
+  * value for 15 and 8 only works for those exact settings.
+  *
+  * For any setting other than those defaults for windowBits and memLevel,
+  * the value returned is a conservative worst case for the maximum expansion
+  * resulting from using fixed blocks instead of stored blocks, which deflate
+  * can emit on compressed data for some combinations of the parameters.
+  *
+  * This function could be more sophisticated to provide closer upper bounds
+  * for every combination of windowBits and memLevel, as well as wrap.
+  * But even the conservative upper bound of about 14% expansion does not
+  * seem onerous for output buffer allocation.
+  */
+ uLong ZEXPORT deflateBound(strm, sourceLen)
+     z_streamp strm;
+     uLong sourceLen;
+ {
+     deflate_state *s;
+     uLong destLen;
+ 
+     /* conservative upper bound */
+     destLen = sourceLen +
+               ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11;
+ 
+     /* if can't get parameters, return conservative bound */
+     if (strm == Z_NULL || strm->state == Z_NULL)
+         return destLen;
+ 
+     /* if not default parameters, return conservative bound */
+     s = strm->state;
+     if (s->w_bits != 15 || s->hash_bits != 8 + 7)
+         return destLen;
+ 
+     /* default settings: return tight bound for that case */
+     return compressBound(sourceLen);
+ }
+ 
+ /* =========================================================================
   * Put a short in the pending buffer. The 16-bit value is put in MSB order.
   * IN assertion: the stream state is correct and there is enough room in
   * pending_buf.
*************** local void putShortMSB (s, b)
*** 405,411 ****
  {
      put_byte(s, (Byte)(b >> 8));
      put_byte(s, (Byte)(b & 0xff));
! }   
  
  /* =========================================================================
   * Flush as much pending output as possible. All deflate() output goes
--- 492,498 ----
  {
      put_byte(s, (Byte)(b >> 8));
      put_byte(s, (Byte)(b & 0xff));
! }
  
  /* =========================================================================
   * Flush as much pending output as possible. All deflate() output goes
*************** int ZEXPORT deflate (strm, flush)
*** 441,454 ****
      deflate_state *s;
  
      if (strm == Z_NULL || strm->state == Z_NULL ||
! 	flush > Z_FINISH || flush < 0) {
          return Z_STREAM_ERROR;
      }
      s = strm->state;
  
      if (strm->next_out == Z_NULL ||
          (strm->next_in == Z_NULL && strm->avail_in != 0) ||
! 	(s->status == FINISH_STATE && flush != Z_FINISH)) {
          ERR_RETURN(strm, Z_STREAM_ERROR);
      }
      if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
--- 528,541 ----
      deflate_state *s;
  
      if (strm == Z_NULL || strm->state == Z_NULL ||
!         flush > Z_FINISH || flush < 0) {
          return Z_STREAM_ERROR;
      }
      s = strm->state;
  
      if (strm->next_out == Z_NULL ||
          (strm->next_in == Z_NULL && strm->avail_in != 0) ||
!         (s->status == FINISH_STATE && flush != Z_FINISH)) {
          ERR_RETURN(strm, Z_STREAM_ERROR);
      }
      if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
*************** int ZEXPORT deflate (strm, flush)
*** 457,504 ****
      old_flush = s->last_flush;
      s->last_flush = flush;
  
!     /* Write the zlib header */
      if (s->status == INIT_STATE) {
  
!         uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
!         uInt level_flags = (s->level-1) >> 1;
! 
!         if (level_flags > 3) level_flags = 3;
!         header |= (level_flags << 6);
! 	if (s->strstart != 0) header |= PRESET_DICT;
!         header += 31 - (header % 31);
  
!         s->status = BUSY_STATE;
!         putShortMSB(s, header);
  
! 	/* Save the adler32 of the preset dictionary: */
! 	if (s->strstart != 0) {
! 	    putShortMSB(s, (uInt)(strm->adler >> 16));
! 	    putShortMSB(s, (uInt)(strm->adler & 0xffff));
! 	}
! 	strm->adler = 1L;
      }
  
      /* Flush as much pending output as possible */
      if (s->pending != 0) {
          flush_pending(strm);
          if (strm->avail_out == 0) {
! 	    /* Since avail_out is 0, deflate will be called again with
! 	     * more output space, but possibly with both pending and
! 	     * avail_in equal to zero. There won't be anything to do,
! 	     * but this is not an error situation so make sure we
! 	     * return OK instead of BUF_ERROR at next call of deflate:
               */
! 	    s->last_flush = -1;
! 	    return Z_OK;
! 	}
  
      /* Make sure there is something to do and avoid duplicate consecutive
       * flushes. For repeated and useless calls with Z_FINISH, we keep
!      * returning Z_STREAM_END instead of Z_BUFF_ERROR.
       */
      } else if (strm->avail_in == 0 && flush <= old_flush &&
! 	       flush != Z_FINISH) {
          ERR_RETURN(strm, Z_BUF_ERROR);
      }
  
--- 544,618 ----
      old_flush = s->last_flush;
      s->last_flush = flush;
  
!     /* Write the header */
      if (s->status == INIT_STATE) {
+ #ifdef GZIP
+         if (s->wrap == 2) {
+             put_byte(s, 31);
+             put_byte(s, 139);
+             put_byte(s, 8);
+             put_byte(s, 0);
+             put_byte(s, 0);
+             put_byte(s, 0);
+             put_byte(s, 0);
+             put_byte(s, 0);
+             put_byte(s, s->level == 9 ? 2 :
+                         (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+                          4 : 0));
+             put_byte(s, 255);
+             s->status = BUSY_STATE;
+             strm->adler = crc32(0L, Z_NULL, 0);
+         }
+         else
+ #endif
+         {
+             uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+             uInt level_flags;
  
!             if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
!                 level_flags = 0;
!             else if (s->level < 6)
!                 level_flags = 1;
!             else if (s->level == 6)
!                 level_flags = 2;
!             else
!                 level_flags = 3;
!             header |= (level_flags << 6);
!             if (s->strstart != 0) header |= PRESET_DICT;
!             header += 31 - (header % 31);
  
!             s->status = BUSY_STATE;
!             putShortMSB(s, header);
  
!             /* Save the adler32 of the preset dictionary: */
!             if (s->strstart != 0) {
!                 putShortMSB(s, (uInt)(strm->adler >> 16));
!                 putShortMSB(s, (uInt)(strm->adler & 0xffff));
!             }
!             strm->adler = adler32(0L, Z_NULL, 0);
!         }
      }
  
      /* Flush as much pending output as possible */
      if (s->pending != 0) {
          flush_pending(strm);
          if (strm->avail_out == 0) {
!             /* Since avail_out is 0, deflate will be called again with
!              * more output space, but possibly with both pending and
!              * avail_in equal to zero. There won't be anything to do,
!              * but this is not an error situation so make sure we
!              * return OK instead of BUF_ERROR at next call of deflate:
               */
!             s->last_flush = -1;
!             return Z_OK;
!         }
  
      /* Make sure there is something to do and avoid duplicate consecutive
       * flushes. For repeated and useless calls with Z_FINISH, we keep
!      * returning Z_STREAM_END instead of Z_BUF_ERROR.
       */
      } else if (strm->avail_in == 0 && flush <= old_flush &&
!                flush != Z_FINISH) {
          ERR_RETURN(strm, Z_BUF_ERROR);
      }
  
*************** int ZEXPORT deflate (strm, flush)
*** 513,536 ****
          (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
          block_state bstate;
  
! 	bstate = (*(configuration_table[s->level].func))(s, flush);
  
          if (bstate == finish_started || bstate == finish_done) {
              s->status = FINISH_STATE;
          }
          if (bstate == need_more || bstate == finish_started) {
! 	    if (strm->avail_out == 0) {
! 	        s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
! 	    }
! 	    return Z_OK;
! 	    /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
! 	     * of deflate should use the same flush parameter to make sure
! 	     * that the flush is complete. So we don't have to output an
! 	     * empty block here, this will be done at next call. This also
! 	     * ensures that for a very small output buffer, we emit at most
! 	     * one empty block.
! 	     */
! 	}
          if (bstate == block_done) {
              if (flush == Z_PARTIAL_FLUSH) {
                  _tr_align(s);
--- 627,650 ----
          (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
          block_state bstate;
  
!         bstate = (*(configuration_table[s->level].func))(s, flush);
  
          if (bstate == finish_started || bstate == finish_done) {
              s->status = FINISH_STATE;
          }
          if (bstate == need_more || bstate == finish_started) {
!             if (strm->avail_out == 0) {
!                 s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
!             }
!             return Z_OK;
!             /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
!              * of deflate should use the same flush parameter to make sure
!              * that the flush is complete. So we don't have to output an
!              * empty block here, this will be done at next call. This also
!              * ensures that for a very small output buffer, we emit at most
!              * one empty block.
!              */
!         }
          if (bstate == block_done) {
              if (flush == Z_PARTIAL_FLUSH) {
                  _tr_align(s);
*************** int ZEXPORT deflate (strm, flush)
*** 544,568 ****
                  }
              }
              flush_pending(strm);
! 	    if (strm->avail_out == 0) {
! 	      s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
! 	      return Z_OK;
! 	    }
          }
      }
      Assert(strm->avail_out > 0, "bug2");
  
      if (flush != Z_FINISH) return Z_OK;
!     if (s->noheader) return Z_STREAM_END;
  
!     /* Write the zlib trailer (adler32) */
!     putShortMSB(s, (uInt)(strm->adler >> 16));
!     putShortMSB(s, (uInt)(strm->adler & 0xffff));
      flush_pending(strm);
      /* If avail_out is zero, the application will call deflate again
       * to flush the rest.
       */
!     s->noheader = -1; /* write the trailer only once! */
      return s->pending != 0 ? Z_OK : Z_STREAM_END;
  }
  
--- 658,697 ----
                  }
              }
              flush_pending(strm);
!             if (strm->avail_out == 0) {
!               s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
!               return Z_OK;
!             }
          }
      }
      Assert(strm->avail_out > 0, "bug2");
  
      if (flush != Z_FINISH) return Z_OK;
!     if (s->wrap <= 0) return Z_STREAM_END;
  
!     /* Write the trailer */
! #ifdef GZIP
!     if (s->wrap == 2) {
!         put_byte(s, (Byte)(strm->adler & 0xff));
!         put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
!         put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
!         put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
!         put_byte(s, (Byte)(strm->total_in & 0xff));
!         put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
!         put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
!         put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
!     }
!     else
! #endif
!     {
!         putShortMSB(s, (uInt)(strm->adler >> 16));
!         putShortMSB(s, (uInt)(strm->adler & 0xffff));
!     }
      flush_pending(strm);
      /* If avail_out is zero, the application will call deflate again
       * to flush the rest.
       */
!     if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
      return s->pending != 0 ? Z_OK : Z_STREAM_END;
  }
  
*************** int ZEXPORT deflateEnd (strm)
*** 576,582 ****
  
      status = strm->state->status;
      if (status != INIT_STATE && status != BUSY_STATE &&
! 	status != FINISH_STATE) {
        return Z_STREAM_ERROR;
      }
  
--- 705,711 ----
  
      status = strm->state->status;
      if (status != INIT_STATE && status != BUSY_STATE &&
!         status != FINISH_STATE) {
        return Z_STREAM_ERROR;
      }
  
*************** int ZEXPORT deflateCopy (dest, source)
*** 649,655 ****
      ds->bl_desc.dyn_tree = ds->bl_tree;
  
      return Z_OK;
! #endif
  }
  
  /* ===========================================================================
--- 778,784 ----
      ds->bl_desc.dyn_tree = ds->bl_tree;
  
      return Z_OK;
! #endif /* MAXSEG_64K */
  }
  
  /* ===========================================================================
*************** local int read_buf(strm, buf, size)
*** 671,679 ****
  
      strm->avail_in  -= len;
  
!     if (!strm->state->noheader) {
          strm->adler = adler32(strm->adler, strm->next_in, len);
      }
      zmemcpy(buf, strm->next_in, len);
      strm->next_in  += len;
      strm->total_in += len;
--- 800,813 ----
  
      strm->avail_in  -= len;
  
!     if (strm->state->wrap == 1) {
          strm->adler = adler32(strm->adler, strm->next_in, len);
      }
+ #ifdef GZIP
+     else if (strm->state->wrap == 2) {
+         strm->adler = crc32(strm->adler, strm->next_in, len);
+     }
+ #endif
      zmemcpy(buf, strm->next_in, len);
      strm->next_in  += len;
      strm->total_in += len;
*************** local void lm_init (s)
*** 709,714 ****
--- 843,849 ----
  #endif
  }
  
+ #ifndef FASTEST
  /* ===========================================================================
   * Set match_start to the longest match starting at the given string and
   * return its length. Matches shorter or equal to prev_length are discarded,
*************** local void lm_init (s)
*** 722,728 ****
  /* For 80x86 and 680x0, an optimized version will be provided in match.asm or
   * match.S. The code will be functionally equivalent.
   */
- #ifndef FASTEST
  local uInt longest_match(s, cur_match)
      deflate_state *s;
      IPos cur_match;                             /* current match */
--- 857,862 ----
*************** local uInt longest_match(s, cur_match)
*** 860,871 ****
      if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
      return s->lookahead;
  }
  
- #else /* FASTEST */
  /* ---------------------------------------------------------------------------
!  * Optimized version for level == 1 only
   */
! local uInt longest_match(s, cur_match)
      deflate_state *s;
      IPos cur_match;                             /* current match */
  {
--- 994,1006 ----
      if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
      return s->lookahead;
  }
+ #endif /* ASMV */
+ #endif /* FASTEST */
  
  /* ---------------------------------------------------------------------------
!  * Optimized version for level == 1 or strategy == Z_RLE only
   */
! local uInt longest_match_fast(s, cur_match)
      deflate_state *s;
      IPos cur_match;                             /* current match */
  {
*************** local uInt longest_match(s, cur_match)
*** 903,912 ****
       */
      do {
      } while (*++scan == *++match && *++scan == *++match &&
! 	     *++scan == *++match && *++scan == *++match &&
! 	     *++scan == *++match && *++scan == *++match &&
! 	     *++scan == *++match && *++scan == *++match &&
! 	     scan < strend);
  
      Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
  
--- 1038,1047 ----
       */
      do {
      } while (*++scan == *++match && *++scan == *++match &&
!              *++scan == *++match && *++scan == *++match &&
!              *++scan == *++match && *++scan == *++match &&
!              *++scan == *++match && *++scan == *++match &&
!              scan < strend);
  
      Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
  
*************** local uInt longest_match(s, cur_match)
*** 915,924 ****
      if (len < MIN_MATCH) return MIN_MATCH - 1;
  
      s->match_start = cur_match;
!     return len <= s->lookahead ? len : s->lookahead;
  }
- #endif /* FASTEST */
- #endif /* ASMV */
  
  #ifdef DEBUG
  /* ===========================================================================
--- 1050,1057 ----
      if (len < MIN_MATCH) return MIN_MATCH - 1;
  
      s->match_start = cur_match;
!     return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
  }
  
  #ifdef DEBUG
  /* ===========================================================================
*************** local void check_match(s, start, match, 
*** 933,942 ****
      if (zmemcmp(s->window + match,
                  s->window + start, length) != EQUAL) {
          fprintf(stderr, " start %u, match %u, length %d\n",
! 		start, match, length);
          do {
! 	    fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
! 	} while (--length != 0);
          z_error("invalid match");
      }
      if (z_verbose > 1) {
--- 1066,1075 ----
      if (zmemcmp(s->window + match,
                  s->window + start, length) != EQUAL) {
          fprintf(stderr, " start %u, match %u, length %d\n",
!                 start, match, length);
          do {
!             fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
!         } while (--length != 0);
          z_error("invalid match");
      }
      if (z_verbose > 1) {
*************** local void check_match(s, start, match, 
*** 946,952 ****
  }
  #else
  #  define check_match(s, start, match, length)
! #endif
  
  /* ===========================================================================
   * Fill the window when the lookahead becomes insufficient.
--- 1079,1085 ----
  }
  #else
  #  define check_match(s, start, match, length)
! #endif /* DEBUG */
  
  /* ===========================================================================
   * Fill the window when the lookahead becomes insufficient.
*************** local void fill_window(s)
*** 970,988 ****
          more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
  
          /* Deal with !@#$% 64K limit: */
!         if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
!             more = wsize;
  
!         } else if (more == (unsigned)(-1)) {
!             /* Very unlikely, but possible on 16 bit machine if strstart == 0
!              * and lookahead == 1 (input done one byte at time)
!              */
!             more--;
  
          /* 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.
           */
!         } else if (s->strstart >= wsize+MAX_DIST(s)) {
  
              zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
              s->match_start -= wsize;
--- 1103,1124 ----
          more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
  
          /* Deal with !@#$% 64K limit: */
!         if (sizeof(int) <= 2) {
!             if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
!                 more = wsize;
  
!             } else if (more == (unsigned)(-1)) {
!                 /* Very unlikely, but possible on 16 bit machine if
!                  * strstart == 0 && lookahead == 1 (input done a byte at time)
!                  */
!                 more--;
!             }
!         }
  
          /* 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 (s->strstart >= wsize+MAX_DIST(s)) {
  
              zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
              s->match_start -= wsize;
*************** local void fill_window(s)
*** 995,1017 ****
                 later. (Using level 0 permanently is not an optimal usage of
                 zlib, so we don't care about this pathological case.)
               */
! 	    n = s->hash_size;
! 	    p = &s->head[n];
! 	    do {
! 		m = *--p;
! 		*p = (Pos)(m >= wsize ? m-wsize : NIL);
! 	    } while (--n);
  
! 	    n = wsize;
  #ifndef FASTEST
! 	    p = &s->prev[n];
! 	    do {
! 		m = *--p;
! 		*p = (Pos)(m >= wsize ? m-wsize : NIL);
! 		/* If n is not on any hash chain, prev[n] is garbage but
! 		 * its value will never be used.
! 		 */
! 	    } while (--n);
  #endif
              more += wsize;
          }
--- 1131,1153 ----
                 later. (Using level 0 permanently is not an optimal usage of
                 zlib, so we don't care about this pathological case.)
               */
!             n = s->hash_size;
!             p = &s->head[n];
!             do {
!                 m = *--p;
!                 *p = (Pos)(m >= wsize ? m-wsize : NIL);
!             } while (--n);
  
!             n = wsize;
  #ifndef FASTEST
!             p = &s->prev[n];
!             do {
!                 m = *--p;
!                 *p = (Pos)(m >= wsize ? m-wsize : NIL);
!                 /* If n is not on any hash chain, prev[n] is garbage but
!                  * its value will never be used.
!                  */
!             } while (--n);
  #endif
              more += wsize;
          }
*************** local void fill_window(s)
*** 1056,1063 ****
     _tr_flush_block(s, (s->block_start >= 0L ? \
                     (charf *)&s->window[(unsigned)s->block_start] : \
                     (charf *)Z_NULL), \
! 		(ulg)((long)s->strstart - s->block_start), \
! 		(eof)); \
     s->block_start = s->strstart; \
     flush_pending(s->strm); \
     Tracev((stderr,"[FLUSH]")); \
--- 1192,1199 ----
     _tr_flush_block(s, (s->block_start >= 0L ? \
                     (charf *)&s->window[(unsigned)s->block_start] : \
                     (charf *)Z_NULL), \
!                 (ulg)((long)s->strstart - s->block_start), \
!                 (eof)); \
     s->block_start = s->strstart; \
     flush_pending(s->strm); \
     Tracev((stderr,"[FLUSH]")); \
*************** local block_state deflate_stored(s, flus
*** 1098,1129 ****
          if (s->lookahead <= 1) {
  
              Assert(s->strstart < s->w_size+MAX_DIST(s) ||
! 		   s->block_start >= (long)s->w_size, "slide too late");
  
              fill_window(s);
              if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
  
              if (s->lookahead == 0) break; /* flush the current block */
          }
! 	Assert(s->block_start >= 0L, "block gone");
  
! 	s->strstart += s->lookahead;
! 	s->lookahead = 0;
  
! 	/* Emit a stored block if pending_buf will be full: */
!  	max_start = s->block_start + max_block_size;
          if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
! 	    /* strstart == 0 is possible when wraparound on 16-bit machine */
! 	    s->lookahead = (uInt)(s->strstart - max_start);
! 	    s->strstart = (uInt)max_start;
              FLUSH_BLOCK(s, 0);
! 	}
! 	/* Flush if we may have to slide, otherwise block_start may become
           * negative and the data will be gone:
           */
          if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
              FLUSH_BLOCK(s, 0);
! 	}
      }
      FLUSH_BLOCK(s, flush == Z_FINISH);
      return flush == Z_FINISH ? finish_done : block_done;
--- 1234,1265 ----
          if (s->lookahead <= 1) {
  
              Assert(s->strstart < s->w_size+MAX_DIST(s) ||
!                    s->block_start >= (long)s->w_size, "slide too late");
  
              fill_window(s);
              if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
  
              if (s->lookahead == 0) break; /* flush the current block */
          }
!         Assert(s->block_start >= 0L, "block gone");
  
!         s->strstart += s->lookahead;
!         s->lookahead = 0;
  
!         /* Emit a stored block if pending_buf will be full: */
!         max_start = s->block_start + max_block_size;
          if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
!             /* strstart == 0 is possible when wraparound on 16-bit machine */
!             s->lookahead = (uInt)(s->strstart - max_start);
!             s->strstart = (uInt)max_start;
              FLUSH_BLOCK(s, 0);
!         }
!         /* Flush if we may have to slide, otherwise block_start may become
           * negative and the data will be gone:
           */
          if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
              FLUSH_BLOCK(s, 0);
!         }
      }
      FLUSH_BLOCK(s, flush == Z_FINISH);
      return flush == Z_FINISH ? finish_done : block_done;
*************** local block_state deflate_fast(s, flush)
*** 1152,1159 ****
          if (s->lookahead < MIN_LOOKAHEAD) {
              fill_window(s);
              if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
! 	        return need_more;
! 	    }
              if (s->lookahead == 0) break; /* flush the current block */
          }
  
--- 1288,1295 ----
          if (s->lookahead < MIN_LOOKAHEAD) {
              fill_window(s);
              if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
!                 return need_more;
!             }
              if (s->lookahead == 0) break; /* flush the current block */
          }
  
*************** local block_state deflate_fast(s, flush)
*** 1172,1181 ****
               * of window index 0 (in particular we have to avoid a match
               * of the string with itself at the start of the input file).
               */
!             if (s->strategy != Z_HUFFMAN_ONLY) {
                  s->match_length = longest_match (s, hash_head);
              }
!             /* longest_match() sets match_start */
          }
          if (s->match_length >= MIN_MATCH) {
              check_match(s, s->strstart, s->match_start, s->match_length);
--- 1308,1326 ----
               * of window index 0 (in particular we have to avoid a match
               * of the string with itself at the start of the input file).
               */
! #ifdef FASTEST
!             if ((s->strategy < Z_HUFFMAN_ONLY) ||
!                 (s->strategy == Z_RLE && s->strstart - hash_head == 1)) {
!                 s->match_length = longest_match_fast (s, hash_head);
!             }
! #else
!             if (s->strategy < Z_HUFFMAN_ONLY) {
                  s->match_length = longest_match (s, hash_head);
+             } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) {
+                 s->match_length = longest_match_fast (s, hash_head);
              }
! #endif
!             /* longest_match() or longest_match_fast() sets match_start */
          }
          if (s->match_length >= MIN_MATCH) {
              check_match(s, s->strstart, s->match_start, s->match_length);
*************** local block_state deflate_fast(s, flush)
*** 1191,1197 ****
  #ifndef FASTEST
              if (s->match_length <= s->max_insert_length &&
                  s->lookahead >= MIN_MATCH) {
!                 s->match_length--; /* string at strstart already in hash table */
                  do {
                      s->strstart++;
                      INSERT_STRING(s, s->strstart, hash_head);
--- 1336,1342 ----
  #ifndef FASTEST
              if (s->match_length <= s->max_insert_length &&
                  s->lookahead >= MIN_MATCH) {
!                 s->match_length--; /* string at strstart already in table */
                  do {
                      s->strstart++;
                      INSERT_STRING(s, s->strstart, hash_head);
*************** local block_state deflate_fast(s, flush)
*** 1199,1208 ****
                       * always MIN_MATCH bytes ahead.
                       */
                  } while (--s->match_length != 0);
!                 s->strstart++; 
              } else
  #endif
! 	    {
                  s->strstart += s->match_length;
                  s->match_length = 0;
                  s->ins_h = s->window[s->strstart];
--- 1344,1353 ----
                       * always MIN_MATCH bytes ahead.
                       */
                  } while (--s->match_length != 0);
!                 s->strstart++;
              } else
  #endif
!             {
                  s->strstart += s->match_length;
                  s->match_length = 0;
                  s->ins_h = s->window[s->strstart];
*************** local block_state deflate_fast(s, flush)
*** 1219,1225 ****
              Tracevv((stderr,"%c", s->window[s->strstart]));
              _tr_tally_lit (s, s->window[s->strstart], bflush);
              s->lookahead--;
!             s->strstart++; 
          }
          if (bflush) FLUSH_BLOCK(s, 0);
      }
--- 1364,1370 ----
              Tracevv((stderr,"%c", s->window[s->strstart]));
              _tr_tally_lit (s, s->window[s->strstart], bflush);
              s->lookahead--;
!             s->strstart++;
          }
          if (bflush) FLUSH_BLOCK(s, 0);
      }
*************** local block_state deflate_fast(s, flush)
*** 1227,1232 ****
--- 1372,1378 ----
      return flush == Z_FINISH ? finish_done : block_done;
  }
  
+ #ifndef FASTEST
  /* ===========================================================================
   * Same as above, but achieves better compression. We use a lazy
   * evaluation for matches: a match is finally adopted only if there is
*************** local block_state deflate_slow(s, flush)
*** 1249,1256 ****
          if (s->lookahead < MIN_LOOKAHEAD) {
              fill_window(s);
              if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
! 	        return need_more;
! 	    }
              if (s->lookahead == 0) break; /* flush the current block */
          }
  
--- 1395,1402 ----
          if (s->lookahead < MIN_LOOKAHEAD) {
              fill_window(s);
              if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
!                 return need_more;
!             }
              if (s->lookahead == 0) break; /* flush the current block */
          }
  
*************** local block_state deflate_slow(s, flush)
*** 1272,1285 ****
               * of window index 0 (in particular we have to avoid a match
               * of the string with itself at the start of the input file).
               */
!             if (s->strategy != Z_HUFFMAN_ONLY) {
                  s->match_length = longest_match (s, hash_head);
              }
!             /* longest_match() sets match_start */
  
!             if (s->match_length <= 5 && (s->strategy == Z_FILTERED ||
!                  (s->match_length == MIN_MATCH &&
!                   s->strstart - s->match_start > TOO_FAR))) {
  
                  /* If prev_match is also MIN_MATCH, match_start is garbage
                   * but we will ignore the current match anyway.
--- 1418,1436 ----
               * of window index 0 (in particular we have to avoid a match
               * of the string with itself at the start of the input file).
               */
!             if (s->strategy < Z_HUFFMAN_ONLY) {
                  s->match_length = longest_match (s, hash_head);
+             } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) {
+                 s->match_length = longest_match_fast (s, hash_head);
              }
!             /* longest_match() or longest_match_fast() sets match_start */
  
!             if (s->match_length <= 5 && (s->strategy == Z_FILTERED
! #if TOO_FAR <= 32767
!                 || (s->match_length == MIN_MATCH &&
!                     s->strstart - s->match_start > TOO_FAR)
! #endif
!                 )) {
  
                  /* If prev_match is also MIN_MATCH, match_start is garbage
                   * but we will ignore the current match anyway.
*************** local block_state deflate_slow(s, flush)
*** 1297,1303 ****
              check_match(s, s->strstart-1, s->prev_match, s->prev_length);
  
              _tr_tally_dist(s, s->strstart -1 - s->prev_match,
! 			   s->prev_length - MIN_MATCH, bflush);
  
              /* Insert in hash table all strings up to the end of the match.
               * strstart-1 and strstart are already inserted. If there is not
--- 1448,1454 ----
              check_match(s, s->strstart-1, s->prev_match, s->prev_length);
  
              _tr_tally_dist(s, s->strstart -1 - s->prev_match,
!                            s->prev_length - MIN_MATCH, bflush);
  
              /* Insert in hash table all strings up to the end of the match.
               * strstart-1 and strstart are already inserted. If there is not
*************** local block_state deflate_slow(s, flush)
*** 1323,1330 ****
               * is longer, truncate the previous match to a single literal.
               */
              Tracevv((stderr,"%c", s->window[s->strstart-1]));
! 	    _tr_tally_lit(s, s->window[s->strstart-1], bflush);
! 	    if (bflush) {
                  FLUSH_BLOCK_ONLY(s, 0);
              }
              s->strstart++;
--- 1474,1481 ----
               * is longer, truncate the previous match to a single literal.
               */
              Tracevv((stderr,"%c", s->window[s->strstart-1]));
!             _tr_tally_lit(s, s->window[s->strstart-1], bflush);
!             if (bflush) {
                  FLUSH_BLOCK_ONLY(s, 0);
              }
              s->strstart++;
*************** local block_state deflate_slow(s, flush)
*** 1348,1350 ****
--- 1499,1502 ----
      FLUSH_BLOCK(s, flush == Z_FINISH);
      return flush == Z_FINISH ? finish_done : block_done;
  }
+ #endif /* FASTEST */
diff -Nrcpad gcc-3.4.3/zlib/deflate.h gcc-4.0.0/zlib/deflate.h
*** gcc-3.4.3/zlib/deflate.h	Mon Mar 11 22:11:16 2002
--- gcc-4.0.0/zlib/deflate.h	Mon Oct 11 18:45:37 2004
***************
*** 1,6 ****
  /* deflate.h -- internal compression state
   * Copyright (C) 1995-2002 Jean-loup Gailly
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* WARNING: this file should *not* be used by applications. It is
--- 1,6 ----
  /* deflate.h -- internal compression state
   * Copyright (C) 1995-2002 Jean-loup Gailly
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /* WARNING: this file should *not* be used by applications. It is
***************
*** 10,20 ****
  
  /* @(#) $Id: deflate.h,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
  
! #ifndef _DEFLATE_H
! #define _DEFLATE_H
  
  #include "zutil.h"
  
  /* ===========================================================================
   * Internal compression state.
   */
--- 10,28 ----
  
  /* @(#) $Id: deflate.h,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
  
! #ifndef DEFLATE_H
! #define DEFLATE_H
  
  #include "zutil.h"
  
+ /* define NO_GZIP when compiling if you want to disable gzip header and
+    trailer creation by deflate().  NO_GZIP would be used to avoid linking in
+    the crc code when it is not needed.  For shared libraries, gzip encoding
+    should be left enabled. */
+ #ifndef NO_GZIP
+ #  define GZIP
+ #endif
+ 
  /* ===========================================================================
   * Internal compression state.
   */
*************** typedef struct internal_state {
*** 86,92 ****
      ulg   pending_buf_size; /* size of pending_buf */
      Bytef *pending_out;  /* next pending byte to output to the stream */
      int   pending;       /* nb of bytes in the pending buffer */
!     int   noheader;      /* suppress zlib header and adler32 */
      Byte  data_type;     /* UNKNOWN, BINARY or ASCII */
      Byte  method;        /* STORED (for zip only) or DEFLATED */
      int   last_flush;    /* value of flush param for previous deflate call */
--- 94,100 ----
      ulg   pending_buf_size; /* size of pending_buf */
      Bytef *pending_out;  /* next pending byte to output to the stream */
      int   pending;       /* nb of bytes in the pending buffer */
!     int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */
      Byte  data_type;     /* UNKNOWN, BINARY or ASCII */
      Byte  method;        /* STORED (for zip only) or DEFLATED */
      int   last_flush;    /* value of flush param for previous deflate call */
*************** typedef struct internal_state {
*** 269,275 ****
  void _tr_init         OF((deflate_state *s));
  int  _tr_tally        OF((deflate_state *s, unsigned dist, unsigned lc));
  void _tr_flush_block  OF((deflate_state *s, charf *buf, ulg stored_len,
! 			  int eof));
  void _tr_align        OF((deflate_state *s));
  void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
                            int eof));
--- 277,283 ----
  void _tr_init         OF((deflate_state *s));
  int  _tr_tally        OF((deflate_state *s, unsigned dist, unsigned lc));
  void _tr_flush_block  OF((deflate_state *s, charf *buf, ulg stored_len,
!                           int eof));
  void _tr_align        OF((deflate_state *s));
  void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
                            int eof));
*************** void _tr_stored_block OF((deflate_state 
*** 312,318 ****
  #else
  # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
  # define _tr_tally_dist(s, distance, length, flush) \
!               flush = _tr_tally(s, distance, length) 
  #endif
  
! #endif
--- 320,326 ----
  #else
  # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
  # define _tr_tally_dist(s, distance, length, flush) \
!               flush = _tr_tally(s, distance, length)
  #endif
  
! #endif /* DEFLATE_H */
diff -Nrcpad gcc-3.4.3/zlib/descrip.mms gcc-4.0.0/zlib/descrip.mms
*** gcc-3.4.3/zlib/descrip.mms	Mon Mar 11 21:49:12 2002
--- gcc-4.0.0/zlib/descrip.mms	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- # descrip.mms: MMS description file for building zlib on VMS
- # written by Martin P.J. Zinser <m.zinser@gsi.de>
- 
- cc_defs = 
- c_deb = 
- 
- .ifdef __DECC__
- pref = /prefix=all
- .endif
- 
- OBJS = adler32.obj, compress.obj, crc32.obj, gzio.obj, uncompr.obj,\
-        deflate.obj, trees.obj, zutil.obj, inflate.obj, infblock.obj,\
-        inftrees.obj, infcodes.obj, infutil.obj, inffast.obj
- 
- CFLAGS= $(C_DEB) $(CC_DEFS) $(PREF)
- 
- all : example.exe minigzip.exe
-         @ write sys$output " Example applications available"
- libz.olb : libz.olb($(OBJS))
- 	@ write sys$output " libz available"
- 
- example.exe : example.obj libz.olb
-               link example,libz.olb/lib
- 
- minigzip.exe : minigzip.obj libz.olb
-               link minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib
- 
- clean : 
- 	delete *.obj;*,libz.olb;*
- 
- 
- # Other dependencies.
- adler32.obj : zutil.h zlib.h zconf.h
- compress.obj : zlib.h zconf.h
- crc32.obj : zutil.h zlib.h zconf.h
- deflate.obj : deflate.h zutil.h zlib.h zconf.h
- example.obj : zlib.h zconf.h
- gzio.obj : zutil.h zlib.h zconf.h
- infblock.obj : zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h
- infcodes.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h infcodes.h inffast.h
- inffast.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
- inflate.obj : zutil.h zlib.h zconf.h infblock.h
- inftrees.obj : zutil.h zlib.h zconf.h inftrees.h
- infutil.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h
- minigzip.obj : zlib.h zconf.h
- trees.obj : deflate.h zutil.h zlib.h zconf.h
- uncompr.obj : zlib.h zconf.h
- zutil.obj : zutil.h zlib.h zconf.h
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/example.c gcc-4.0.0/zlib/example.c
*** gcc-3.4.3/zlib/example.c	Mon Mar 11 22:11:16 2002
--- gcc-4.0.0/zlib/example.c	Mon Oct 11 18:45:37 2004
***************
*** 1,6 ****
  /* example.c -- usage example of the zlib compression library
!  * Copyright (C) 1995-2002 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* @(#) $Id: example.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
--- 1,6 ----
  /* example.c -- usage example of the zlib compression library
!  * Copyright (C) 1995-2003 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /* @(#) $Id: example.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
*************** const char dictionary[] = "hello";
*** 37,58 ****
  uLong dictId; /* Adler32 value of the dictionary */
  
  void test_compress      OF((Byte *compr, uLong comprLen,
! 		            Byte *uncompr, uLong uncomprLen));
! void test_gzio          OF((const char *out, const char *in, 
! 		            Byte *uncompr, int uncomprLen));
  void test_deflate       OF((Byte *compr, uLong comprLen));
  void test_inflate       OF((Byte *compr, uLong comprLen,
! 		            Byte *uncompr, uLong uncomprLen));
  void test_large_deflate OF((Byte *compr, uLong comprLen,
! 		            Byte *uncompr, uLong uncomprLen));
  void test_large_inflate OF((Byte *compr, uLong comprLen,
! 		            Byte *uncompr, uLong uncomprLen));
  void test_flush         OF((Byte *compr, uLong *comprLen));
  void test_sync          OF((Byte *compr, uLong comprLen,
! 		            Byte *uncompr, uLong uncomprLen));
  void test_dict_deflate  OF((Byte *compr, uLong comprLen));
  void test_dict_inflate  OF((Byte *compr, uLong comprLen,
! 		            Byte *uncompr, uLong uncomprLen));
  int  main               OF((int argc, char *argv[]));
  
  /* ===========================================================================
--- 37,58 ----
  uLong dictId; /* Adler32 value of the dictionary */
  
  void test_compress      OF((Byte *compr, uLong comprLen,
!                             Byte *uncompr, uLong uncomprLen));
! void test_gzio          OF((const char *fname,
!                             Byte *uncompr, uLong uncomprLen));
  void test_deflate       OF((Byte *compr, uLong comprLen));
  void test_inflate       OF((Byte *compr, uLong comprLen,
!                             Byte *uncompr, uLong uncomprLen));
  void test_large_deflate OF((Byte *compr, uLong comprLen,
!                             Byte *uncompr, uLong uncomprLen));
  void test_large_inflate OF((Byte *compr, uLong comprLen,
!                             Byte *uncompr, uLong uncomprLen));
  void test_flush         OF((Byte *compr, uLong *comprLen));
  void test_sync          OF((Byte *compr, uLong comprLen,
!                             Byte *uncompr, uLong uncomprLen));
  void test_dict_deflate  OF((Byte *compr, uLong comprLen));
  void test_dict_inflate  OF((Byte *compr, uLong comprLen,
!                             Byte *uncompr, uLong uncomprLen));
  int  main               OF((int argc, char *argv[]));
  
  /* ===========================================================================
*************** void test_compress(compr, comprLen, unco
*** 63,69 ****
      uLong comprLen, uncomprLen;
  {
      int err;
!     uLong len = strlen(hello)+1;
  
      err = compress(compr, &comprLen, (const Bytef*)hello, len);
      CHECK_ERR(err, "compress");
--- 63,69 ----
      uLong comprLen, uncomprLen;
  {
      int err;
!     uLong len = (uLong)strlen(hello)+1;
  
      err = compress(compr, &comprLen, (const Bytef*)hello, len);
      CHECK_ERR(err, "compress");
*************** void test_compress(compr, comprLen, unco
*** 75,81 ****
  
      if (strcmp((char*)uncompr, hello)) {
          fprintf(stderr, "bad uncompress\n");
! 	exit(1);
      } else {
          printf("uncompress(): %s\n", (char *)uncompr);
      }
--- 75,81 ----
  
      if (strcmp((char*)uncompr, hello)) {
          fprintf(stderr, "bad uncompress\n");
!         exit(1);
      } else {
          printf("uncompress(): %s\n", (char *)uncompr);
      }
*************** void test_compress(compr, comprLen, unco
*** 84,101 ****
  /* ===========================================================================
   * Test read/write of .gz files
   */
! void test_gzio(out, in, uncompr, uncomprLen)
!     const char *out; /* compressed output file */
!     const char *in;  /* compressed input file */
      Byte *uncompr;
!     int  uncomprLen;
  {
      int err;
!     int len = strlen(hello)+1;
      gzFile file;
      z_off_t pos;
  
!     file = gzopen(out, "wb");
      if (file == NULL) {
          fprintf(stderr, "gzopen error\n");
          exit(1);
--- 84,103 ----
  /* ===========================================================================
   * Test read/write of .gz files
   */
! void test_gzio(fname, uncompr, uncomprLen)
!     const char *fname; /* compressed file name */
      Byte *uncompr;
!     uLong uncomprLen;
  {
+ #ifdef NO_GZCOMPRESS
+     fprintf(stderr, "NO_GZCOMPRESS -- gz* functions cannot compress\n");
+ #else
      int err;
!     int len = (int)strlen(hello)+1;
      gzFile file;
      z_off_t pos;
  
!     file = gzopen(fname, "wb");
      if (file == NULL) {
          fprintf(stderr, "gzopen error\n");
          exit(1);
*************** void test_gzio(out, in, uncompr, uncompr
*** 103,161 ****
      gzputc(file, 'h');
      if (gzputs(file, "ello") != 4) {
          fprintf(stderr, "gzputs err: %s\n", gzerror(file, &err));
! 	exit(1);
      }
      if (gzprintf(file, ", %s!", "hello") != 8) {
          fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err));
! 	exit(1);
      }
      gzseek(file, 1L, SEEK_CUR); /* add one zero byte */
      gzclose(file);
  
!     file = gzopen(in, "rb");
      if (file == NULL) {
          fprintf(stderr, "gzopen error\n");
      }
      strcpy((char*)uncompr, "garbage");
  
!     uncomprLen = gzread(file, uncompr, (unsigned)uncomprLen);
!     if (uncomprLen != len) {
          fprintf(stderr, "gzread err: %s\n", gzerror(file, &err));
! 	exit(1);
      }
      if (strcmp((char*)uncompr, hello)) {
          fprintf(stderr, "bad gzread: %s\n", (char*)uncompr);
! 	exit(1);
      } else {
!         printf("gzread(): %s\n", (char *)uncompr);
      }
  
      pos = gzseek(file, -8L, SEEK_CUR);
      if (pos != 6 || gztell(file) != pos) {
! 	fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n",
! 		(long)pos, (long)gztell(file));
! 	exit(1);
      }
  
      if (gzgetc(file) != ' ') {
! 	fprintf(stderr, "gzgetc error\n");
! 	exit(1);
      }
  
!     gzgets(file, (char*)uncompr, uncomprLen);
!     uncomprLen = strlen((char*)uncompr);
!     if (uncomprLen != 6) { /* "hello!" */
          fprintf(stderr, "gzgets err after gzseek: %s\n", gzerror(file, &err));
! 	exit(1);
      }
!     if (strcmp((char*)uncompr, hello+7)) {
          fprintf(stderr, "bad gzgets after gzseek\n");
! 	exit(1);
      } else {
!         printf("gzgets() after gzseek: %s\n", (char *)uncompr);
      }
  
      gzclose(file);
  }
  
  /* ===========================================================================
--- 105,168 ----
      gzputc(file, 'h');
      if (gzputs(file, "ello") != 4) {
          fprintf(stderr, "gzputs err: %s\n", gzerror(file, &err));
!         exit(1);
      }
      if (gzprintf(file, ", %s!", "hello") != 8) {
          fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err));
!         exit(1);
      }
      gzseek(file, 1L, SEEK_CUR); /* add one zero byte */
      gzclose(file);
  
!     file = gzopen(fname, "rb");
      if (file == NULL) {
          fprintf(stderr, "gzopen error\n");
+         exit(1);
      }
      strcpy((char*)uncompr, "garbage");
  
!     if (gzread(file, uncompr, (unsigned)uncomprLen) != len) {
          fprintf(stderr, "gzread err: %s\n", gzerror(file, &err));
!         exit(1);
      }
      if (strcmp((char*)uncompr, hello)) {
          fprintf(stderr, "bad gzread: %s\n", (char*)uncompr);
!         exit(1);
      } else {
!         printf("gzread(): %s\n", (char*)uncompr);
      }
  
      pos = gzseek(file, -8L, SEEK_CUR);
      if (pos != 6 || gztell(file) != pos) {
!         fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n",
!                 (long)pos, (long)gztell(file));
!         exit(1);
      }
  
      if (gzgetc(file) != ' ') {
!         fprintf(stderr, "gzgetc error\n");
!         exit(1);
      }
  
!     if (gzungetc(' ', file) != ' ') {
!         fprintf(stderr, "gzungetc error\n");
!         exit(1);
!     }
! 
!     gzgets(file, (char*)uncompr, (int)uncomprLen);
!     if (strlen((char*)uncompr) != 7) { /* " hello!" */
          fprintf(stderr, "gzgets err after gzseek: %s\n", gzerror(file, &err));
!         exit(1);
      }
!     if (strcmp((char*)uncompr, hello + 6)) {
          fprintf(stderr, "bad gzgets after gzseek\n");
!         exit(1);
      } else {
!         printf("gzgets() after gzseek: %s\n", (char*)uncompr);
      }
  
      gzclose(file);
+ #endif
  }
  
  /* ===========================================================================
*************** void test_deflate(compr, comprLen)
*** 167,173 ****
  {
      z_stream c_stream; /* compression stream */
      int err;
!     int len = strlen(hello)+1;
  
      c_stream.zalloc = (alloc_func)0;
      c_stream.zfree = (free_func)0;
--- 174,180 ----
  {
      z_stream c_stream; /* compression stream */
      int err;
!     uLong len = (uLong)strlen(hello)+1;
  
      c_stream.zalloc = (alloc_func)0;
      c_stream.zfree = (free_func)0;
*************** void test_deflate(compr, comprLen)
*** 179,185 ****
      c_stream.next_in  = (Bytef*)hello;
      c_stream.next_out = compr;
  
!     while (c_stream.total_in != (uLong)len && c_stream.total_out < comprLen) {
          c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */
          err = deflate(&c_stream, Z_NO_FLUSH);
          CHECK_ERR(err, "deflate");
--- 186,192 ----
      c_stream.next_in  = (Bytef*)hello;
      c_stream.next_out = compr;
  
!     while (c_stream.total_in != len && c_stream.total_out < comprLen) {
          c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */
          err = deflate(&c_stream, Z_NO_FLUSH);
          CHECK_ERR(err, "deflate");
*************** void test_inflate(compr, comprLen, uncom
*** 231,237 ****
  
      if (strcmp((char*)uncompr, hello)) {
          fprintf(stderr, "bad inflate\n");
! 	exit(1);
      } else {
          printf("inflate(): %s\n", (char *)uncompr);
      }
--- 238,244 ----
  
      if (strcmp((char*)uncompr, hello)) {
          fprintf(stderr, "bad inflate\n");
!         exit(1);
      } else {
          printf("inflate(): %s\n", (char *)uncompr);
      }
*************** void test_large_deflate(compr, comprLen,
*** 266,272 ****
      CHECK_ERR(err, "deflate");
      if (c_stream.avail_in != 0) {
          fprintf(stderr, "deflate not greedy\n");
! 	exit(1);
      }
  
      /* Feed in already compressed data and switch to no compression: */
--- 273,279 ----
      CHECK_ERR(err, "deflate");
      if (c_stream.avail_in != 0) {
          fprintf(stderr, "deflate not greedy\n");
!         exit(1);
      }
  
      /* Feed in already compressed data and switch to no compression: */
*************** void test_large_deflate(compr, comprLen,
*** 286,292 ****
      err = deflate(&c_stream, Z_FINISH);
      if (err != Z_STREAM_END) {
          fprintf(stderr, "deflate should report Z_STREAM_END\n");
! 	exit(1);
      }
      err = deflateEnd(&c_stream);
      CHECK_ERR(err, "deflateEnd");
--- 293,299 ----
      err = deflate(&c_stream, Z_FINISH);
      if (err != Z_STREAM_END) {
          fprintf(stderr, "deflate should report Z_STREAM_END\n");
!         exit(1);
      }
      err = deflateEnd(&c_stream);
      CHECK_ERR(err, "deflateEnd");
*************** void test_large_inflate(compr, comprLen,
*** 316,322 ****
  
      for (;;) {
          d_stream.next_out = uncompr;            /* discard the output */
! 	d_stream.avail_out = (uInt)uncomprLen;
          err = inflate(&d_stream, Z_NO_FLUSH);
          if (err == Z_STREAM_END) break;
          CHECK_ERR(err, "large inflate");
--- 323,329 ----
  
      for (;;) {
          d_stream.next_out = uncompr;            /* discard the output */
!         d_stream.avail_out = (uInt)uncomprLen;
          err = inflate(&d_stream, Z_NO_FLUSH);
          if (err == Z_STREAM_END) break;
          CHECK_ERR(err, "large inflate");
*************** void test_large_inflate(compr, comprLen,
*** 327,333 ****
  
      if (d_stream.total_out != 2*uncomprLen + comprLen/2) {
          fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out);
! 	exit(1);
      } else {
          printf("large_inflate(): OK\n");
      }
--- 334,340 ----
  
      if (d_stream.total_out != 2*uncomprLen + comprLen/2) {
          fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out);
!         exit(1);
      } else {
          printf("large_inflate(): OK\n");
      }
*************** void test_flush(compr, comprLen)
*** 342,348 ****
  {
      z_stream c_stream; /* compression stream */
      int err;
!     int len = strlen(hello)+1;
  
      c_stream.zalloc = (alloc_func)0;
      c_stream.zfree = (free_func)0;
--- 349,355 ----
  {
      z_stream c_stream; /* compression stream */
      int err;
!     uInt len = (uInt)strlen(hello)+1;
  
      c_stream.zalloc = (alloc_func)0;
      c_stream.zfree = (free_func)0;
*************** void test_sync(compr, comprLen, uncompr,
*** 407,413 ****
      if (err != Z_DATA_ERROR) {
          fprintf(stderr, "inflate should report DATA_ERROR\n");
          /* Because of incorrect adler32 */
! 	exit(1);
      }
      err = inflateEnd(&d_stream);
      CHECK_ERR(err, "inflateEnd");
--- 414,420 ----
      if (err != Z_DATA_ERROR) {
          fprintf(stderr, "inflate should report DATA_ERROR\n");
          /* Because of incorrect adler32 */
!         exit(1);
      }
      err = inflateEnd(&d_stream);
      CHECK_ERR(err, "inflateEnd");
*************** void test_dict_deflate(compr, comprLen)
*** 433,439 ****
      CHECK_ERR(err, "deflateInit");
  
      err = deflateSetDictionary(&c_stream,
! 			       (const Bytef*)dictionary, sizeof(dictionary));
      CHECK_ERR(err, "deflateSetDictionary");
  
      dictId = c_stream.adler;
--- 440,446 ----
      CHECK_ERR(err, "deflateInit");
  
      err = deflateSetDictionary(&c_stream,
!                                (const Bytef*)dictionary, sizeof(dictionary));
      CHECK_ERR(err, "deflateSetDictionary");
  
      dictId = c_stream.adler;
*************** void test_dict_deflate(compr, comprLen)
*** 446,452 ****
      err = deflate(&c_stream, Z_FINISH);
      if (err != Z_STREAM_END) {
          fprintf(stderr, "deflate should report Z_STREAM_END\n");
! 	exit(1);
      }
      err = deflateEnd(&c_stream);
      CHECK_ERR(err, "deflateEnd");
--- 453,459 ----
      err = deflate(&c_stream, Z_FINISH);
      if (err != Z_STREAM_END) {
          fprintf(stderr, "deflate should report Z_STREAM_END\n");
!         exit(1);
      }
      err = deflateEnd(&c_stream);
      CHECK_ERR(err, "deflateEnd");
*************** void test_dict_inflate(compr, comprLen, 
*** 480,493 ****
      for (;;) {
          err = inflate(&d_stream, Z_NO_FLUSH);
          if (err == Z_STREAM_END) break;
! 	if (err == Z_NEED_DICT) {
! 	    if (d_stream.adler != dictId) {
! 		fprintf(stderr, "unexpected dictionary");
! 		exit(1);
! 	    }
! 	    err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,
! 				       sizeof(dictionary));
! 	}
          CHECK_ERR(err, "inflate with dict");
      }
  
--- 487,500 ----
      for (;;) {
          err = inflate(&d_stream, Z_NO_FLUSH);
          if (err == Z_STREAM_END) break;
!         if (err == Z_NEED_DICT) {
!             if (d_stream.adler != dictId) {
!                 fprintf(stderr, "unexpected dictionary");
!                 exit(1);
!             }
!             err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,
!                                        sizeof(dictionary));
!         }
          CHECK_ERR(err, "inflate with dict");
      }
  
*************** void test_dict_inflate(compr, comprLen, 
*** 496,502 ****
  
      if (strcmp((char*)uncompr, hello)) {
          fprintf(stderr, "bad inflate with dict\n");
! 	exit(1);
      } else {
          printf("inflate with dictionary: %s\n", (char *)uncompr);
      }
--- 503,509 ----
  
      if (strcmp((char*)uncompr, hello)) {
          fprintf(stderr, "bad inflate with dict\n");
!         exit(1);
      } else {
          printf("inflate with dictionary: %s\n", (char *)uncompr);
      }
*************** int main(argc, argv)
*** 523,528 ****
--- 530,538 ----
          fprintf(stderr, "warning: different zlib version\n");
      }
  
+     printf("zlib version %s = 0x%04x, compile flags = 0x%lx\n",
+             ZLIB_VERSION, ZLIB_VERNUM, zlibCompileFlags());
+ 
      compr    = (Byte*)calloc((uInt)comprLen, 1);
      uncompr  = (Byte*)calloc((uInt)uncomprLen, 1);
      /* compr and uncompr are cleared to avoid reading uninitialized
*************** int main(argc, argv)
*** 530,542 ****
       */
      if (compr == Z_NULL || uncompr == Z_NULL) {
          printf("out of memory\n");
! 	exit(1);
      }
      test_compress(compr, comprLen, uncompr, uncomprLen);
  
      test_gzio((argc > 1 ? argv[1] : TESTFILE),
!               (argc > 2 ? argv[2] : TESTFILE),
! 	      uncompr, (int)uncomprLen);
  
      test_deflate(compr, comprLen);
      test_inflate(compr, comprLen, uncompr, uncomprLen);
--- 540,551 ----
       */
      if (compr == Z_NULL || uncompr == Z_NULL) {
          printf("out of memory\n");
!         exit(1);
      }
      test_compress(compr, comprLen, uncompr, uncomprLen);
  
      test_gzio((argc > 1 ? argv[1] : TESTFILE),
!               uncompr, uncomprLen);
  
      test_deflate(compr, comprLen);
      test_inflate(compr, comprLen, uncompr, uncomprLen);
*************** int main(argc, argv)
*** 551,556 ****
      test_dict_deflate(compr, comprLen);
      test_dict_inflate(compr, comprLen, uncompr, uncomprLen);
  
!     exit(0);
!     return 0; /* to avoid warning */
  }
--- 560,567 ----
      test_dict_deflate(compr, comprLen);
      test_dict_inflate(compr, comprLen, uncompr, uncomprLen);
  
!     free(compr);
!     free(uncompr);
! 
!     return 0;
  }
diff -Nrcpad gcc-3.4.3/zlib/gzio.c gcc-4.0.0/zlib/gzio.c
*** gcc-3.4.3/zlib/gzio.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/gzio.c	Mon Oct 11 18:45:37 2004
***************
*** 1,8 ****
  /* gzio.c -- IO on .gz files
!  * Copyright (C) 1995-2002 Jean-loup Gailly.
   * For conditions of distribution and use, see copyright notice in zlib.h
   *
!  * Compile this file with -DNO_DEFLATE to avoid the compression code.
   */
  
  /* @(#) $Id: gzio.c,v 1.1.1.2 2002/03/11 21:53:24 tromey Exp $ */
--- 1,8 ----
  /* gzio.c -- IO on .gz files
!  * Copyright (C) 1995-2003 Jean-loup Gailly.
   * For conditions of distribution and use, see copyright notice in zlib.h
   *
!  * Compile this file with -DNO_GZCOMPRESS to avoid the compression code.
   */
  
  /* @(#) $Id: gzio.c,v 1.1.1.2 2002/03/11 21:53:24 tromey Exp $ */
***************
*** 11,17 ****
--- 11,23 ----
  
  #include "zutil.h"
  
+ #ifdef NO_DEFLATE       /* for compatiblity with old definition */
+ #  define NO_GZCOMPRESS
+ #endif
+ 
+ #ifndef NO_DUMMY_DECL
  struct internal_state {int dummy;}; /* for buggy compilers */
+ #endif
  
  #ifndef Z_BUFSIZE
  #  ifdef MAXSEG_64K
*************** struct internal_state {int dummy;}; /* f
*** 24,33 ****
  #  define Z_PRINTF_BUFSIZE 4096
  #endif
  
  #define ALLOC(size) malloc(size)
  #define TRYFREE(p) {if (p) free(p);}
  
! static int gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */
  
  /* gzip flag byte */
  #define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */
--- 30,49 ----
  #  define Z_PRINTF_BUFSIZE 4096
  #endif
  
+ #ifdef __MVS__
+ #  pragma map (fdopen , "\174\174FDOPEN")
+    FILE *fdopen(int, const char *);
+ #endif
+ 
+ #ifndef STDC
+ extern voidp  malloc OF((uInt size));
+ extern void   free   OF((voidpf ptr));
+ #endif
+ 
  #define ALLOC(size) malloc(size)
  #define TRYFREE(p) {if (p) free(p);}
  
! static int const gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */
  
  /* gzip flag byte */
  #define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */
*************** typedef struct gz_stream {
*** 49,55 ****
      char     *path;   /* path name for debugging only */
      int      transparent; /* 1 if input file is not a .gz file */
      char     mode;    /* 'w' or 'r' */
!     long     startpos; /* start of compressed data in file (header skipped) */
  } gz_stream;
  
  
--- 65,75 ----
      char     *path;   /* path name for debugging only */
      int      transparent; /* 1 if input file is not a .gz file */
      char     mode;    /* 'w' or 'r' */
!     z_off_t  start;   /* start of compressed data in file (header skipped) */
!     z_off_t  in;      /* bytes into deflate or inflate */
!     z_off_t  out;     /* bytes out of deflate or inflate */
!     int      back;    /* one character push-back */
!     int      last;    /* true if push-back is last character */
  } gz_stream;
  
  
*************** local uLong  getLong      OF((gz_stream 
*** 65,71 ****
       Opens a gzip (.gz) file for reading or writing. The mode parameter
     is as in fopen ("rb" or "wb"). The file is given either by file descriptor
     or path name (if fd == -1).
!      gz_open return NULL if the file could not be opened or if there was
     insufficient memory to allocate the (de)compression state; errno
     can be checked to distinguish the two cases (if errno is zero, the
     zlib error is Z_MEM_ERROR).
--- 85,91 ----
       Opens a gzip (.gz) file for reading or writing. The mode parameter
     is as in fopen ("rb" or "wb"). The file is given either by file descriptor
     or path name (if fd == -1).
!      gz_open returns NULL if the file could not be opened or if there was
     insufficient memory to allocate the (de)compression state; errno
     can be checked to distinguish the two cases (if errno is zero, the
     zlib error is Z_MEM_ERROR).
*************** local gzFile gz_open (path, mode, fd)
*** 97,102 ****
--- 117,125 ----
      s->file = NULL;
      s->z_err = Z_OK;
      s->z_eof = 0;
+     s->in = 0;
+     s->out = 0;
+     s->back = EOF;
      s->crc = crc32(0L, Z_NULL, 0);
      s->msg = NULL;
      s->transparent = 0;
*************** local gzFile gz_open (path, mode, fd)
*** 112,130 ****
          if (*p == 'r') s->mode = 'r';
          if (*p == 'w' || *p == 'a') s->mode = 'w';
          if (*p >= '0' && *p <= '9') {
! 	    level = *p - '0';
! 	} else if (*p == 'f') {
! 	  strategy = Z_FILTERED;
! 	} else if (*p == 'h') {
! 	  strategy = Z_HUFFMAN_ONLY;
! 	} else {
! 	    *m++ = *p; /* copy the mode */
! 	}
      } while (*p++ && m != fmode + sizeof(fmode));
      if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL;
!     
      if (s->mode == 'w') {
! #ifdef NO_DEFLATE
          err = Z_STREAM_ERROR;
  #else
          err = deflateInit2(&(s->stream), level,
--- 135,155 ----
          if (*p == 'r') s->mode = 'r';
          if (*p == 'w' || *p == 'a') s->mode = 'w';
          if (*p >= '0' && *p <= '9') {
!             level = *p - '0';
!         } else if (*p == 'f') {
!           strategy = Z_FILTERED;
!         } else if (*p == 'h') {
!           strategy = Z_HUFFMAN_ONLY;
!         } else if (*p == 'R') {
!           strategy = Z_RLE;
!         } else {
!             *m++ = *p; /* copy the mode */
!         }
      } while (*p++ && m != fmode + sizeof(fmode));
      if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL;
! 
      if (s->mode == 'w') {
! #ifdef NO_GZCOMPRESS
          err = Z_STREAM_ERROR;
  #else
          err = deflateInit2(&(s->stream), level,
*************** local gzFile gz_open (path, mode, fd)
*** 163,179 ****
           */
          fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1],
               Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE);
! 	s->startpos = 10L;
! 	/* We use 10L instead of ftell(s->file) to because ftell causes an
           * fflush on some systems. This version of the library doesn't use
!          * startpos anyway in write mode, so this initialization is not
           * necessary.
           */
      } else {
! 	check_header(s); /* skip the .gz header */
! 	s->startpos = (ftell(s->file) - s->stream.avail_in);
      }
!     
      return (gzFile)s;
  }
  
--- 188,204 ----
           */
          fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1],
               Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE);
!         s->start = 10L;
!         /* We use 10L instead of ftell(s->file) to because ftell causes an
           * fflush on some systems. This version of the library doesn't use
!          * start anyway in write mode, so this initialization is not
           * necessary.
           */
      } else {
!         check_header(s); /* skip the .gz header */
!         s->start = ftell(s->file) - s->stream.avail_in;
      }
! 
      return (gzFile)s;
  }
  
*************** int ZEXPORT gzsetparams (file, level, st
*** 218,228 ****
      /* Make room to allow flushing */
      if (s->stream.avail_out == 0) {
  
! 	s->stream.next_out = s->outbuf;
! 	if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
! 	    s->z_err = Z_ERRNO;
! 	}
! 	s->stream.avail_out = Z_BUFSIZE;
      }
  
      return deflateParams (&(s->stream), level, strategy);
--- 243,253 ----
      /* Make room to allow flushing */
      if (s->stream.avail_out == 0) {
  
!         s->stream.next_out = s->outbuf;
!         if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
!             s->z_err = Z_ERRNO;
!         }
!         s->stream.avail_out = Z_BUFSIZE;
      }
  
      return deflateParams (&(s->stream), level, strategy);
*************** local int get_byte(s)
*** 238,251 ****
  {
      if (s->z_eof) return EOF;
      if (s->stream.avail_in == 0) {
! 	errno = 0;
! 	s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file);
! 	if (s->stream.avail_in == 0) {
! 	    s->z_eof = 1;
! 	    if (ferror(s->file)) s->z_err = Z_ERRNO;
! 	    return EOF;
! 	}
! 	s->stream.next_in = s->inbuf;
      }
      s->stream.avail_in--;
      return *(s->stream.next_in)++;
--- 263,276 ----
  {
      if (s->z_eof) return EOF;
      if (s->stream.avail_in == 0) {
!         errno = 0;
!         s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file);
!         if (s->stream.avail_in == 0) {
!             s->z_eof = 1;
!             if (ferror(s->file)) s->z_err = Z_ERRNO;
!             return EOF;
!         }
!         s->stream.next_in = s->inbuf;
      }
      s->stream.avail_in--;
      return *(s->stream.next_in)++;
*************** local void check_header(s)
*** 268,310 ****
      uInt len;
      int c;
  
!     /* Check the gzip magic header */
!     for (len = 0; len < 2; len++) {
! 	c = get_byte(s);
! 	if (c != gz_magic[len]) {
! 	    if (len != 0) s->stream.avail_in++, s->stream.next_in--;
! 	    if (c != EOF) {
! 		s->stream.avail_in++, s->stream.next_in--;
! 		s->transparent = 1;
! 	    }
! 	    s->z_err = s->stream.avail_in != 0 ? Z_OK : Z_STREAM_END;
! 	    return;
! 	}
      }
      method = get_byte(s);
      flags = get_byte(s);
      if (method != Z_DEFLATED || (flags & RESERVED) != 0) {
! 	s->z_err = Z_DATA_ERROR;
! 	return;
      }
  
      /* Discard time, xflags and OS code: */
      for (len = 0; len < 6; len++) (void)get_byte(s);
  
      if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */
! 	len  =  (uInt)get_byte(s);
! 	len += ((uInt)get_byte(s))<<8;
! 	/* len is garbage if EOF but the loop below will quit anyway */
! 	while (len-- != 0 && get_byte(s) != EOF) ;
      }
      if ((flags & ORIG_NAME) != 0) { /* skip the original file name */
! 	while ((c = get_byte(s)) != 0 && c != EOF) ;
      }
      if ((flags & COMMENT) != 0) {   /* skip the .gz file comment */
! 	while ((c = get_byte(s)) != 0 && c != EOF) ;
      }
      if ((flags & HEAD_CRC) != 0) {  /* skip the header crc */
! 	for (len = 0; len < 2; len++) (void)get_byte(s);
      }
      s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK;
  }
--- 293,349 ----
      uInt len;
      int c;
  
!     /* Assure two bytes in the buffer so we can peek ahead -- handle case
!        where first byte of header is at the end of the buffer after the last
!        gzip segment */
!     len = s->stream.avail_in;
!     if (len < 2) {
!         if (len) s->inbuf[0] = s->stream.next_in[0];
!         errno = 0;
!         len = fread(s->inbuf + len, 1, Z_BUFSIZE >> len, s->file);
!         if (len == 0 && ferror(s->file)) s->z_err = Z_ERRNO;
!         s->stream.avail_in += len;
!         s->stream.next_in = s->inbuf;
!         if (s->stream.avail_in < 2) {
!             s->transparent = s->stream.avail_in;
!             return;
!         }
!     }
! 
!     /* Peek ahead to check the gzip magic header */
!     if (s->stream.next_in[0] != gz_magic[0] ||
!         s->stream.next_in[1] != gz_magic[1]) {
!         s->transparent = 1;
!         return;
      }
+     s->stream.avail_in -= 2;
+     s->stream.next_in += 2;
+ 
+     /* Check the rest of the gzip header */
      method = get_byte(s);
      flags = get_byte(s);
      if (method != Z_DEFLATED || (flags & RESERVED) != 0) {
!         s->z_err = Z_DATA_ERROR;
!         return;
      }
  
      /* Discard time, xflags and OS code: */
      for (len = 0; len < 6; len++) (void)get_byte(s);
  
      if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */
!         len  =  (uInt)get_byte(s);
!         len += ((uInt)get_byte(s))<<8;
!         /* len is garbage if EOF but the loop below will quit anyway */
!         while (len-- != 0 && get_byte(s) != EOF) ;
      }
      if ((flags & ORIG_NAME) != 0) { /* skip the original file name */
!         while ((c = get_byte(s)) != 0 && c != EOF) ;
      }
      if ((flags & COMMENT) != 0) {   /* skip the .gz file comment */
!         while ((c = get_byte(s)) != 0 && c != EOF) ;
      }
      if ((flags & HEAD_CRC) != 0) {  /* skip the header crc */
!         for (len = 0; len < 2; len++) (void)get_byte(s);
      }
      s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK;
  }
*************** local int destroy (s)
*** 323,343 ****
      TRYFREE(s->msg);
  
      if (s->stream.state != NULL) {
! 	if (s->mode == 'w') {
! #ifdef NO_DEFLATE
! 	    err = Z_STREAM_ERROR;
  #else
! 	    err = deflateEnd(&(s->stream));
  #endif
! 	} else if (s->mode == 'r') {
! 	    err = inflateEnd(&(s->stream));
! 	}
      }
      if (s->file != NULL && fclose(s->file)) {
  #ifdef ESPIPE
! 	if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */
  #endif
! 	    err = Z_ERRNO;
      }
      if (s->z_err < 0) err = s->z_err;
  
--- 362,382 ----
      TRYFREE(s->msg);
  
      if (s->stream.state != NULL) {
!         if (s->mode == 'w') {
! #ifdef NO_GZCOMPRESS
!             err = Z_STREAM_ERROR;
  #else
!             err = deflateEnd(&(s->stream));
  #endif
!         } else if (s->mode == 'r') {
!             err = inflateEnd(&(s->stream));
!         }
      }
      if (s->file != NULL && fclose(s->file)) {
  #ifdef ESPIPE
!         if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */
  #endif
!             err = Z_ERRNO;
      }
      if (s->z_err < 0) err = s->z_err;
  
*************** int ZEXPORT gzread (file, buf, len)
*** 370,440 ****
      s->stream.next_out = (Bytef*)buf;
      s->stream.avail_out = len;
  
      while (s->stream.avail_out != 0) {
  
! 	if (s->transparent) {
! 	    /* Copy first the lookahead bytes: */
! 	    uInt n = s->stream.avail_in;
! 	    if (n > s->stream.avail_out) n = s->stream.avail_out;
! 	    if (n > 0) {
! 		zmemcpy(s->stream.next_out, s->stream.next_in, n);
! 		next_out += n;
! 		s->stream.next_out = next_out;
! 		s->stream.next_in   += n;
! 		s->stream.avail_out -= n;
! 		s->stream.avail_in  -= n;
! 	    }
! 	    if (s->stream.avail_out > 0) {
! 		s->stream.avail_out -= fread(next_out, 1, s->stream.avail_out,
! 					     s->file);
! 	    }
! 	    len -= s->stream.avail_out;
! 	    s->stream.total_in  += (uLong)len;
! 	    s->stream.total_out += (uLong)len;
              if (len == 0) s->z_eof = 1;
! 	    return (int)len;
! 	}
          if (s->stream.avail_in == 0 && !s->z_eof) {
  
              errno = 0;
              s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file);
              if (s->stream.avail_in == 0) {
                  s->z_eof = 1;
! 		if (ferror(s->file)) {
! 		    s->z_err = Z_ERRNO;
! 		    break;
! 		}
              }
              s->stream.next_in = s->inbuf;
          }
          s->z_err = inflate(&(s->stream), Z_NO_FLUSH);
  
! 	if (s->z_err == Z_STREAM_END) {
! 	    /* Check CRC and original size */
! 	    s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
! 	    start = s->stream.next_out;
! 
! 	    if (getLong(s) != s->crc) {
! 		s->z_err = Z_DATA_ERROR;
! 	    } else {
! 	        (void)getLong(s);
!                 /* The uncompressed length returned by above getlong() may
!                  * be different from s->stream.total_out) in case of
! 		 * concatenated .gz files. Check for such files:
! 		 */
! 		check_header(s);
! 		if (s->z_err == Z_OK) {
! 		    uLong total_in = s->stream.total_in;
! 		    uLong total_out = s->stream.total_out;
  
! 		    inflateReset(&(s->stream));
! 		    s->stream.total_in = total_in;
! 		    s->stream.total_out = total_out;
! 		    s->crc = crc32(0L, Z_NULL, 0);
! 		}
! 	    }
! 	}
! 	if (s->z_err != Z_OK || s->z_eof) break;
      }
      s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
  
--- 409,490 ----
      s->stream.next_out = (Bytef*)buf;
      s->stream.avail_out = len;
  
+     if (s->stream.avail_out && s->back != EOF) {
+         *next_out++ = s->back;
+         s->stream.next_out++;
+         s->stream.avail_out--;
+         s->back = EOF;
+         s->out++;
+         if (s->last) {
+             s->z_err = Z_STREAM_END;
+             return 1;
+         }
+     }
+ 
      while (s->stream.avail_out != 0) {
  
!         if (s->transparent) {
!             /* Copy first the lookahead bytes: */
!             uInt n = s->stream.avail_in;
!             if (n > s->stream.avail_out) n = s->stream.avail_out;
!             if (n > 0) {
!                 zmemcpy(s->stream.next_out, s->stream.next_in, n);
!                 next_out += n;
!                 s->stream.next_out = next_out;
!                 s->stream.next_in   += n;
!                 s->stream.avail_out -= n;
!                 s->stream.avail_in  -= n;
!             }
!             if (s->stream.avail_out > 0) {
!                 s->stream.avail_out -= fread(next_out, 1, s->stream.avail_out,
!                                              s->file);
!             }
!             len -= s->stream.avail_out;
!             s->in  += len;
!             s->out += len;
              if (len == 0) s->z_eof = 1;
!             return (int)len;
!         }
          if (s->stream.avail_in == 0 && !s->z_eof) {
  
              errno = 0;
              s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file);
              if (s->stream.avail_in == 0) {
                  s->z_eof = 1;
!                 if (ferror(s->file)) {
!                     s->z_err = Z_ERRNO;
!                     break;
!                 }
              }
              s->stream.next_in = s->inbuf;
          }
+         s->in += s->stream.avail_in;
+         s->out += s->stream.avail_out;
          s->z_err = inflate(&(s->stream), Z_NO_FLUSH);
+         s->in -= s->stream.avail_in;
+         s->out -= s->stream.avail_out;
  
!         if (s->z_err == Z_STREAM_END) {
!             /* Check CRC and original size */
!             s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
!             start = s->stream.next_out;
  
!             if (getLong(s) != s->crc) {
!                 s->z_err = Z_DATA_ERROR;
!             } else {
!                 (void)getLong(s);
!                 /* The uncompressed length returned by above getlong() may be
!                  * different from s->out in case of concatenated .gz files.
!                  * Check for such files:
!                  */
!                 check_header(s);
!                 if (s->z_err == Z_OK) {
!                     inflateReset(&(s->stream));
!                     s->crc = crc32(0L, Z_NULL, 0);
!                 }
!             }
!         }
!         if (s->z_err != Z_OK || s->z_eof) break;
      }
      s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
  
*************** int ZEXPORT gzgetc(file)
*** 456,461 ****
--- 506,530 ----
  
  
  /* ===========================================================================
+       Push one byte back onto the stream.
+ */
+ int ZEXPORT gzungetc(c, file)
+     int c;
+     gzFile file;
+ {
+     gz_stream *s = (gz_stream*)file;
+ 
+     if (s == NULL || s->mode != 'r' || c == EOF || s->back != EOF) return EOF;
+     s->back = c;
+     s->out--;
+     s->last = (s->z_err == Z_STREAM_END);
+     if (s->last) s->z_err = Z_OK;
+     s->z_eof = 0;
+     return c;
+ }
+ 
+ 
+ /* ===========================================================================
        Reads bytes from the compressed file until len-1 characters are
     read, or a newline character is read and transferred to buf, or an
     end-of-file condition is encountered.  The string is then terminated
*************** char * ZEXPORT gzgets(file, buf, len)
*** 478,491 ****
  }
  
  
! #ifndef NO_DEFLATE
  /* ===========================================================================
       Writes the given number of uncompressed bytes into the compressed file.
     gzwrite returns the number of bytes actually written (0 in case of error).
  */
  int ZEXPORT gzwrite (file, buf, len)
      gzFile file;
!     const voidp buf;
      unsigned len;
  {
      gz_stream *s = (gz_stream*)file;
--- 547,560 ----
  }
  
  
! #ifndef NO_GZCOMPRESS
  /* ===========================================================================
       Writes the given number of uncompressed bytes into the compressed file.
     gzwrite returns the number of bytes actually written (0 in case of error).
  */
  int ZEXPORT gzwrite (file, buf, len)
      gzFile file;
!     voidpc buf;
      unsigned len;
  {
      gz_stream *s = (gz_stream*)file;
*************** int ZEXPORT gzwrite (file, buf, len)
*** 506,512 ****
--- 575,585 ----
              }
              s->stream.avail_out = Z_BUFSIZE;
          }
+         s->in += s->stream.avail_in;
+         s->out += s->stream.avail_out;
          s->z_err = deflate(&(s->stream), Z_NO_FLUSH);
+         s->in -= s->stream.avail_in;
+         s->out -= s->stream.avail_out;
          if (s->z_err != Z_OK) break;
      }
      s->crc = crc32(s->crc, (const Bytef *)buf, len);
*************** int ZEXPORT gzwrite (file, buf, len)
*** 514,519 ****
--- 587,593 ----
      return (int)(len - s->stream.avail_in);
  }
  
+ 
  /* ===========================================================================
       Converts, formats, and writes the args to the compressed file under
     control of the format string, as in fprintf. gzprintf returns the number of
*************** int ZEXPORTVA gzprintf (gzFile file, con
*** 528,567 ****
      va_list va;
      int len;
  
      va_start(va, format);
! #ifdef HAS_vsnprintf
!     (void)vsnprintf(buf, sizeof(buf), format, va);
! #else
      (void)vsprintf(buf, format, va);
- #endif
      va_end(va);
!     len = strlen(buf); /* some *sprintf don't return the nb of bytes written */
!     if (len <= 0) return 0;
! 
      return gzwrite(file, buf, (unsigned)len);
  }
  #else /* not ANSI C */
  
  int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
! 	               a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
      gzFile file;
      const char *format;
      int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
! 	a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
  {
      char buf[Z_PRINTF_BUFSIZE];
      int len;
  
! #ifdef HAS_snprintf
!     snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,
! 	     a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
! #else
      sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,
! 	    a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
  #endif
!     len = strlen(buf); /* old sprintf doesn't return the nb of bytes written */
!     if (len <= 0) return 0;
! 
      return gzwrite(file, buf, len);
  }
  #endif
--- 602,668 ----
      va_list va;
      int len;
  
+     buf[sizeof(buf) - 1] = 0;
      va_start(va, format);
! #ifdef NO_vsnprintf
! #  ifdef HAS_vsprintf_void
      (void)vsprintf(buf, format, va);
      va_end(va);
!     for (len = 0; len < sizeof(buf); len++)
!         if (buf[len] == 0) break;
! #  else
!     len = vsprintf(buf, format, va);
!     va_end(va);
! #  endif
! #else
! #  ifdef HAS_vsnprintf_void
!     (void)vsnprintf(buf, sizeof(buf), format, va);
!     va_end(va);
!     len = strlen(buf);
! #  else
!     len = vsnprintf(buf, sizeof(buf), format, va);
!     va_end(va);
! #  endif
! #endif
!     if (len <= 0 || len >= (int)sizeof(buf) || buf[sizeof(buf) - 1] != 0)
!         return 0;
      return gzwrite(file, buf, (unsigned)len);
  }
  #else /* not ANSI C */
  
  int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
!                        a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
      gzFile file;
      const char *format;
      int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
!         a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
  {
      char buf[Z_PRINTF_BUFSIZE];
      int len;
  
!     buf[sizeof(buf) - 1] = 0;
! #ifdef NO_snprintf
! #  ifdef HAS_sprintf_void
      sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,
!             a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
!     for (len = 0; len < sizeof(buf); len++)
!         if (buf[len] == 0) break;
! #  else
!     len = sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,
!                 a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
! #  endif
! #else
! #  ifdef HAS_snprintf_void
!     snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,
!              a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
!     len = strlen(buf);
! #  else
!     len = snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,
!                  a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
! #  endif
  #endif
!     if (len <= 0 || len >= sizeof(buf) || buf[sizeof(buf) - 1] != 0)
!         return 0;
      return gzwrite(file, buf, len);
  }
  #endif
*************** local int do_flush (file, flush)
*** 621,636 ****
              s->stream.avail_out = Z_BUFSIZE;
          }
          if (done) break;
          s->z_err = deflate(&(s->stream), flush);
  
! 	/* Ignore the second of two consecutive flushes: */
! 	if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK;
  
          /* deflate has finished flushing only when it hasn't used up
!          * all the available space in the output buffer: 
           */
          done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END);
!  
          if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break;
      }
      return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
--- 722,739 ----
              s->stream.avail_out = Z_BUFSIZE;
          }
          if (done) break;
+         s->out += s->stream.avail_out;
          s->z_err = deflate(&(s->stream), flush);
+         s->out -= s->stream.avail_out;
  
!         /* Ignore the second of two consecutive flushes: */
!         if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK;
  
          /* deflate has finished flushing only when it hasn't used up
!          * all the available space in the output buffer:
           */
          done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END);
! 
          if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break;
      }
      return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
*************** int ZEXPORT gzflush (file, flush)
*** 647,653 ****
      fflush(s->file);
      return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
  }
! #endif /* NO_DEFLATE */
  
  /* ===========================================================================
        Sets the starting position for the next gzread or gzwrite on the given
--- 750,756 ----
      fflush(s->file);
      return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
  }
! #endif /* NO_GZCOMPRESS */
  
  /* ===========================================================================
        Sets the starting position for the next gzread or gzwrite on the given
*************** z_off_t ZEXPORT gzseek (file, offset, wh
*** 665,763 ****
      gz_stream *s = (gz_stream*)file;
  
      if (s == NULL || whence == SEEK_END ||
! 	s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) {
! 	return -1L;
      }
!     
      if (s->mode == 'w') {
! #ifdef NO_DEFLATE
! 	return -1L;
  #else
! 	if (whence == SEEK_SET) {
! 	    offset -= s->stream.total_in;
! 	}
! 	if (offset < 0) return -1L;
  
! 	/* At this point, offset is the number of zero bytes to write. */
! 	if (s->inbuf == Z_NULL) {
! 	    s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */
! 	    zmemzero(s->inbuf, Z_BUFSIZE);
! 	}
! 	while (offset > 0)  {
! 	    uInt size = Z_BUFSIZE;
! 	    if (offset < Z_BUFSIZE) size = (uInt)offset;
  
! 	    size = gzwrite(file, s->inbuf, size);
! 	    if (size == 0) return -1L;
  
! 	    offset -= size;
! 	}
! 	return (z_off_t)s->stream.total_in;
  #endif
      }
      /* Rest of function is for reading only */
  
      /* compute absolute position */
      if (whence == SEEK_CUR) {
! 	offset += s->stream.total_out;
      }
      if (offset < 0) return -1L;
  
      if (s->transparent) {
! 	/* map to fseek */
! 	s->stream.avail_in = 0;
! 	s->stream.next_in = s->inbuf;
          if (fseek(s->file, offset, SEEK_SET) < 0) return -1L;
  
! 	s->stream.total_in = s->stream.total_out = (uLong)offset;
! 	return offset;
      }
  
      /* For a negative seek, rewind and use positive seek */
!     if ((uLong)offset >= s->stream.total_out) {
! 	offset -= s->stream.total_out;
      } else if (gzrewind(file) < 0) {
! 	return -1L;
      }
      /* offset is now the number of bytes to skip. */
  
      if (offset != 0 && s->outbuf == Z_NULL) {
! 	s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
      }
      while (offset > 0)  {
! 	int size = Z_BUFSIZE;
! 	if (offset < Z_BUFSIZE) size = (int)offset;
  
! 	size = gzread(file, s->outbuf, (uInt)size);
! 	if (size <= 0) return -1L;
! 	offset -= size;
      }
!     return (z_off_t)s->stream.total_out;
  }
  
  /* ===========================================================================
!      Rewinds input file. 
  */
  int ZEXPORT gzrewind (file)
      gzFile file;
  {
      gz_stream *s = (gz_stream*)file;
!     
      if (s == NULL || s->mode != 'r') return -1;
  
      s->z_err = Z_OK;
      s->z_eof = 0;
      s->stream.avail_in = 0;
      s->stream.next_in = s->inbuf;
      s->crc = crc32(0L, Z_NULL, 0);
! 	
!     if (s->startpos == 0) { /* not a compressed file */
! 	rewind(s->file);
! 	return 0;
!     }
! 
!     (void) inflateReset(&s->stream);
!     return fseek(s->file, s->startpos, SEEK_SET);
  }
  
  /* ===========================================================================
--- 768,872 ----
      gz_stream *s = (gz_stream*)file;
  
      if (s == NULL || whence == SEEK_END ||
!         s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) {
!         return -1L;
      }
! 
      if (s->mode == 'w') {
! #ifdef NO_GZCOMPRESS
!         return -1L;
  #else
!         if (whence == SEEK_SET) {
!             offset -= s->in;
!         }
!         if (offset < 0) return -1L;
  
!         /* At this point, offset is the number of zero bytes to write. */
!         if (s->inbuf == Z_NULL) {
!             s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */
!             if (s->inbuf == Z_NULL) return -1L;
!             zmemzero(s->inbuf, Z_BUFSIZE);
!         }
!         while (offset > 0)  {
!             uInt size = Z_BUFSIZE;
!             if (offset < Z_BUFSIZE) size = (uInt)offset;
  
!             size = gzwrite(file, s->inbuf, size);
!             if (size == 0) return -1L;
  
!             offset -= size;
!         }
!         return s->in;
  #endif
      }
      /* Rest of function is for reading only */
  
      /* compute absolute position */
      if (whence == SEEK_CUR) {
!         offset += s->out;
      }
      if (offset < 0) return -1L;
  
      if (s->transparent) {
!         /* map to fseek */
!         s->back = EOF;
!         s->stream.avail_in = 0;
!         s->stream.next_in = s->inbuf;
          if (fseek(s->file, offset, SEEK_SET) < 0) return -1L;
  
!         s->in = s->out = offset;
!         return offset;
      }
  
      /* For a negative seek, rewind and use positive seek */
!     if (offset >= s->out) {
!         offset -= s->out;
      } else if (gzrewind(file) < 0) {
!         return -1L;
      }
      /* offset is now the number of bytes to skip. */
  
      if (offset != 0 && s->outbuf == Z_NULL) {
!         s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
!         if (s->outbuf == Z_NULL) return -1L;
!     }
!     if (offset && s->back != EOF) {
!         s->back = EOF;
!         s->out++;
!         offset--;
!         if (s->last) s->z_err = Z_STREAM_END;
      }
      while (offset > 0)  {
!         int size = Z_BUFSIZE;
!         if (offset < Z_BUFSIZE) size = (int)offset;
  
!         size = gzread(file, s->outbuf, (uInt)size);
!         if (size <= 0) return -1L;
!         offset -= size;
      }
!     return s->out;
  }
  
  /* ===========================================================================
!      Rewinds input file.
  */
  int ZEXPORT gzrewind (file)
      gzFile file;
  {
      gz_stream *s = (gz_stream*)file;
! 
      if (s == NULL || s->mode != 'r') return -1;
  
      s->z_err = Z_OK;
      s->z_eof = 0;
+     s->back = EOF;
      s->stream.avail_in = 0;
      s->stream.next_in = s->inbuf;
      s->crc = crc32(0L, Z_NULL, 0);
!     if (!s->transparent) (void)inflateReset(&s->stream);
!     s->in = 0;
!     s->out = 0;
!     return fseek(s->file, s->start, SEEK_SET);
  }
  
  /* ===========================================================================
*************** int ZEXPORT gzeof (file)
*** 779,786 ****
      gzFile file;
  {
      gz_stream *s = (gz_stream*)file;
!     
!     return (s == NULL || s->mode != 'r') ? 0 : s->z_eof;
  }
  
  /* ===========================================================================
--- 888,901 ----
      gzFile file;
  {
      gz_stream *s = (gz_stream*)file;
! 
!     /* With concatenated compressed files that can have embedded
!      * crc trailers, z_eof is no longer the only/best indicator of EOF
!      * on a gz_stream. Handle end-of-stream error explicitly here.
!      */
!     if (s == NULL || s->mode != 'r') return 0;
!     if (s->z_eof) return 1;
!     return s->z_err == Z_STREAM_END;
  }
  
  /* ===========================================================================
*************** int ZEXPORT gzclose (file)
*** 828,841 ****
      if (s == NULL) return Z_STREAM_ERROR;
  
      if (s->mode == 'w') {
! #ifdef NO_DEFLATE
! 	return Z_STREAM_ERROR;
  #else
          err = do_flush (file, Z_FINISH);
          if (err != Z_OK) return destroy((gz_stream*)file);
  
          putLong (s->file, s->crc);
!         putLong (s->file, s->stream.total_in);
  #endif
      }
      return destroy((gz_stream*)file);
--- 943,956 ----
      if (s == NULL) return Z_STREAM_ERROR;
  
      if (s->mode == 'w') {
! #ifdef NO_GZCOMPRESS
!         return Z_STREAM_ERROR;
  #else
          err = do_flush (file, Z_FINISH);
          if (err != Z_OK) return destroy((gz_stream*)file);
  
          putLong (s->file, s->crc);
!         putLong (s->file, (uLong)(s->in & 0xffffffff));
  #endif
      }
      return destroy((gz_stream*)file);
*************** int ZEXPORT gzclose (file)
*** 848,854 ****
     errnum is set to Z_ERRNO and the application may consult errno
     to get the exact error code.
  */
! const char*  ZEXPORT gzerror (file, errnum)
      gzFile file;
      int *errnum;
  {
--- 963,969 ----
     errnum is set to Z_ERRNO and the application may consult errno
     to get the exact error code.
  */
! const char * ZEXPORT gzerror (file, errnum)
      gzFile file;
      int *errnum;
  {
*************** const char*  ZEXPORT gzerror (file, errn
*** 862,875 ****
      *errnum = s->z_err;
      if (*errnum == Z_OK) return (const char*)"";
  
!     m =  (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg);
  
      if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err);
  
      TRYFREE(s->msg);
      s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3);
      strcpy(s->msg, s->path);
      strcat(s->msg, ": ");
      strcat(s->msg, m);
      return (const char*)s->msg;
  }
--- 977,1005 ----
      *errnum = s->z_err;
      if (*errnum == Z_OK) return (const char*)"";
  
!     m = (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg);
  
      if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err);
  
      TRYFREE(s->msg);
      s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3);
+     if (s->msg == Z_NULL) return (const char*)ERR_MSG(Z_MEM_ERROR);
      strcpy(s->msg, s->path);
      strcat(s->msg, ": ");
      strcat(s->msg, m);
      return (const char*)s->msg;
  }
+ 
+ /* ===========================================================================
+      Clear the error and end-of-file flags, and do the same for the real file.
+ */
+ void ZEXPORT gzclearerr (file)
+     gzFile file;
+ {
+     gz_stream *s = (gz_stream*)file;
+ 
+     if (s == NULL) return;
+     if (s->z_err != Z_STREAM_END) s->z_err = Z_OK;
+     s->z_eof = 0;
+     clearerr(s->file);
+ }
diff -Nrcpad gcc-3.4.3/zlib/infback.c gcc-4.0.0/zlib/infback.c
*** gcc-3.4.3/zlib/infback.c	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/infback.c	Mon Oct 11 17:44:13 2004
***************
*** 0 ****
--- 1,619 ----
+ /* infback.c -- inflate using a call-back interface
+  * Copyright (C) 1995-2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
+ /*
+    This code is largely copied from inflate.c.  Normally either infback.o or
+    inflate.o would be linked into an application--not both.  The interface
+    with inffast.c is retained so that optimized assembler-coded versions of
+    inflate_fast() can be used with either inflate.c or infback.c.
+  */
+ 
+ #include "zutil.h"
+ #include "inftrees.h"
+ #include "inflate.h"
+ #include "inffast.h"
+ 
+ /* function prototypes */
+ local void fixedtables OF((struct inflate_state FAR *state));
+ 
+ /*
+    strm provides memory allocation functions in zalloc and zfree, or
+    Z_NULL to use the library memory allocation functions.
+ 
+    windowBits is in the range 8..15, and window is a user-supplied
+    window and output buffer that is 2**windowBits bytes.
+  */
+ int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
+ z_stream FAR *strm;
+ int windowBits;
+ unsigned char FAR *window;
+ const char *version;
+ int stream_size;
+ {
+     struct inflate_state FAR *state;
+ 
+     if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+         stream_size != (int)(sizeof(z_stream)))
+         return Z_VERSION_ERROR;
+     if (strm == Z_NULL || window == Z_NULL ||
+         windowBits < 8 || windowBits > 15)
+         return Z_STREAM_ERROR;
+     strm->msg = Z_NULL;                 /* in case we return an error */
+     if (strm->zalloc == (alloc_func)0) {
+         strm->zalloc = zcalloc;
+         strm->opaque = (voidpf)0;
+     }
+     if (strm->zfree == (free_func)0) strm->zfree = zcfree;
+     state = (struct inflate_state FAR *)ZALLOC(strm, 1,
+                                                sizeof(struct inflate_state));
+     if (state == Z_NULL) return Z_MEM_ERROR;
+     Tracev((stderr, "inflate: allocated\n"));
+     strm->state = (voidpf)state;
+     state->wbits = windowBits;
+     state->wsize = 1U << windowBits;
+     state->window = window;
+     state->write = 0;
+     state->whave = 0;
+     return Z_OK;
+ }
+ 
+ /*
+    Return state with length and distance decoding tables and index sizes set to
+    fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+    If BUILDFIXED is defined, then instead this routine builds the tables the
+    first time it's called, and returns those tables the first time and
+    thereafter.  This reduces the size of the code by about 2K bytes, in
+    exchange for a little execution time.  However, BUILDFIXED should not be
+    used for threaded applications, since the rewriting of the tables and virgin
+    may not be thread-safe.
+  */
+ local void fixedtables(state)
+ struct inflate_state FAR *state;
+ {
+ #ifdef BUILDFIXED
+     static int virgin = 1;
+     static code *lenfix, *distfix;
+     static code fixed[544];
+ 
+     /* build fixed huffman tables if first call (may not be thread safe) */
+     if (virgin) {
+         unsigned sym, bits;
+         static code *next;
+ 
+         /* literal/length table */
+         sym = 0;
+         while (sym < 144) state->lens[sym++] = 8;
+         while (sym < 256) state->lens[sym++] = 9;
+         while (sym < 280) state->lens[sym++] = 7;
+         while (sym < 288) state->lens[sym++] = 8;
+         next = fixed;
+         lenfix = next;
+         bits = 9;
+         inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+ 
+         /* distance table */
+         sym = 0;
+         while (sym < 32) state->lens[sym++] = 5;
+         distfix = next;
+         bits = 5;
+         inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+ 
+         /* do this just once */
+         virgin = 0;
+     }
+ #else /* !BUILDFIXED */
+ #   include "inffixed.h"
+ #endif /* BUILDFIXED */
+     state->lencode = lenfix;
+     state->lenbits = 9;
+     state->distcode = distfix;
+     state->distbits = 5;
+ }
+ 
+ /* Macros for inflateBack(): */
+ 
+ /* Load returned state from inflate_fast() */
+ #define LOAD() \
+     do { \
+         put = strm->next_out; \
+         left = strm->avail_out; \
+         next = strm->next_in; \
+         have = strm->avail_in; \
+         hold = state->hold; \
+         bits = state->bits; \
+     } while (0)
+ 
+ /* Set state from registers for inflate_fast() */
+ #define RESTORE() \
+     do { \
+         strm->next_out = put; \
+         strm->avail_out = left; \
+         strm->next_in = next; \
+         strm->avail_in = have; \
+         state->hold = hold; \
+         state->bits = bits; \
+     } while (0)
+ 
+ /* Clear the input bit accumulator */
+ #define INITBITS() \
+     do { \
+         hold = 0; \
+         bits = 0; \
+     } while (0)
+ 
+ /* Assure that some input is available.  If input is requested, but denied,
+    then return a Z_BUF_ERROR from inflateBack(). */
+ #define PULL() \
+     do { \
+         if (have == 0) { \
+             have = in(in_desc, &next); \
+             if (have == 0) { \
+                 next = Z_NULL; \
+                 ret = Z_BUF_ERROR; \
+                 goto inf_leave; \
+             } \
+         } \
+     } while (0)
+ 
+ /* Get a byte of input into the bit accumulator, or return from inflateBack()
+    with an error if there is no input available. */
+ #define PULLBYTE() \
+     do { \
+         PULL(); \
+         have--; \
+         hold += (unsigned long)(*next++) << bits; \
+         bits += 8; \
+     } while (0)
+ 
+ /* Assure that there are at least n bits in the bit accumulator.  If there is
+    not enough available input to do that, then return from inflateBack() with
+    an error. */
+ #define NEEDBITS(n) \
+     do { \
+         while (bits < (unsigned)(n)) \
+             PULLBYTE(); \
+     } while (0)
+ 
+ /* Return the low n bits of the bit accumulator (n < 16) */
+ #define BITS(n) \
+     ((unsigned)hold & ((1U << (n)) - 1))
+ 
+ /* Remove n bits from the bit accumulator */
+ #define DROPBITS(n) \
+     do { \
+         hold >>= (n); \
+         bits -= (unsigned)(n); \
+     } while (0)
+ 
+ /* Remove zero to seven bits as needed to go to a byte boundary */
+ #define BYTEBITS() \
+     do { \
+         hold >>= bits & 7; \
+         bits -= bits & 7; \
+     } while (0)
+ 
+ /* Assure that some output space is available, by writing out the window
+    if it's full.  If the write fails, return from inflateBack() with a
+    Z_BUF_ERROR. */
+ #define ROOM() \
+     do { \
+         if (left == 0) { \
+             put = state->window; \
+             left = state->wsize; \
+             state->whave = left; \
+             if (out(out_desc, put, left)) { \
+                 ret = Z_BUF_ERROR; \
+                 goto inf_leave; \
+             } \
+         } \
+     } while (0)
+ 
+ /*
+    strm provides the memory allocation functions and window buffer on input,
+    and provides information on the unused input on return.  For Z_DATA_ERROR
+    returns, strm will also provide an error message.
+ 
+    in() and out() are the call-back input and output functions.  When
+    inflateBack() needs more input, it calls in().  When inflateBack() has
+    filled the window with output, or when it completes with data in the
+    window, it calls out() to write out the data.  The application must not
+    change the provided input until in() is called again or inflateBack()
+    returns.  The application must not change the window/output buffer until
+    inflateBack() returns.
+ 
+    in() and out() are called with a descriptor parameter provided in the
+    inflateBack() call.  This parameter can be a structure that provides the
+    information required to do the read or write, as well as accumulated
+    information on the input and output such as totals and check values.
+ 
+    in() should return zero on failure.  out() should return non-zero on
+    failure.  If either in() or out() fails, than inflateBack() returns a
+    Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it
+    was in() or out() that caused in the error.  Otherwise,  inflateBack()
+    returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
+    error, or Z_MEM_ERROR if it could not allocate memory for the state.
+    inflateBack() can also return Z_STREAM_ERROR if the input parameters
+    are not correct, i.e. strm is Z_NULL or the state was not initialized.
+  */
+ int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)
+ z_stream FAR *strm;
+ in_func in;
+ void FAR *in_desc;
+ out_func out;
+ void FAR *out_desc;
+ {
+     struct inflate_state FAR *state;
+     unsigned char FAR *next;    /* next input */
+     unsigned char FAR *put;     /* next output */
+     unsigned have, left;        /* available input and output */
+     unsigned long hold;         /* bit buffer */
+     unsigned bits;              /* bits in bit buffer */
+     unsigned copy;              /* number of stored or match bytes to copy */
+     unsigned char FAR *from;    /* where to copy match bytes from */
+     code this;                  /* current decoding table entry */
+     code last;                  /* parent table entry */
+     unsigned len;               /* length to copy for repeats, bits to drop */
+     int ret;                    /* return code */
+     static const unsigned short order[19] = /* permutation of code lengths */
+         {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+ 
+     /* Check that the strm exists and that the state was initialized */
+     if (strm == Z_NULL || strm->state == Z_NULL)
+         return Z_STREAM_ERROR;
+     state = (struct inflate_state FAR *)strm->state;
+ 
+     /* Reset the state */
+     strm->msg = Z_NULL;
+     state->mode = TYPE;
+     state->last = 0;
+     state->whave = 0;
+     next = strm->next_in;
+     have = next != Z_NULL ? strm->avail_in : 0;
+     hold = 0;
+     bits = 0;
+     put = state->window;
+     left = state->wsize;
+ 
+     /* Inflate until end of block marked as last */
+     for (;;)
+         switch (state->mode) {
+         case TYPE:
+             /* determine and dispatch block type */
+             if (state->last) {
+                 BYTEBITS();
+                 state->mode = DONE;
+                 break;
+             }
+             NEEDBITS(3);
+             state->last = BITS(1);
+             DROPBITS(1);
+             switch (BITS(2)) {
+             case 0:                             /* stored block */
+                 Tracev((stderr, "inflate:     stored block%s\n",
+                         state->last ? " (last)" : ""));
+                 state->mode = STORED;
+                 break;
+             case 1:                             /* fixed block */
+                 fixedtables(state);
+                 Tracev((stderr, "inflate:     fixed codes block%s\n",
+                         state->last ? " (last)" : ""));
+                 state->mode = LEN;              /* decode codes */
+                 break;
+             case 2:                             /* dynamic block */
+                 Tracev((stderr, "inflate:     dynamic codes block%s\n",
+                         state->last ? " (last)" : ""));
+                 state->mode = TABLE;
+                 break;
+             case 3:
+                 strm->msg = (char *)"invalid block type";
+                 state->mode = BAD;
+             }
+             DROPBITS(2);
+             break;
+ 
+         case STORED:
+             /* get and verify stored block length */
+             BYTEBITS();                         /* go to byte boundary */
+             NEEDBITS(32);
+             if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+                 strm->msg = (char *)"invalid stored block lengths";
+                 state->mode = BAD;
+                 break;
+             }
+             state->length = (unsigned)hold & 0xffff;
+             Tracev((stderr, "inflate:       stored length %u\n",
+                     state->length));
+             INITBITS();
+ 
+             /* copy stored block from input to output */
+             while (state->length != 0) {
+                 copy = state->length;
+                 PULL();
+                 ROOM();
+                 if (copy > have) copy = have;
+                 if (copy > left) copy = left;
+                 zmemcpy(put, next, copy);
+                 have -= copy;
+                 next += copy;
+                 left -= copy;
+                 put += copy;
+                 state->length -= copy;
+             }
+             Tracev((stderr, "inflate:       stored end\n"));
+             state->mode = TYPE;
+             break;
+ 
+         case TABLE:
+             /* get dynamic table entries descriptor */
+             NEEDBITS(14);
+             state->nlen = BITS(5) + 257;
+             DROPBITS(5);
+             state->ndist = BITS(5) + 1;
+             DROPBITS(5);
+             state->ncode = BITS(4) + 4;
+             DROPBITS(4);
+ #ifndef PKZIP_BUG_WORKAROUND
+             if (state->nlen > 286 || state->ndist > 30) {
+                 strm->msg = (char *)"too many length or distance symbols";
+                 state->mode = BAD;
+                 break;
+             }
+ #endif
+             Tracev((stderr, "inflate:       table sizes ok\n"));
+ 
+             /* get code length code lengths (not a typo) */
+             state->have = 0;
+             while (state->have < state->ncode) {
+                 NEEDBITS(3);
+                 state->lens[order[state->have++]] = (unsigned short)BITS(3);
+                 DROPBITS(3);
+             }
+             while (state->have < 19)
+                 state->lens[order[state->have++]] = 0;
+             state->next = state->codes;
+             state->lencode = (code const FAR *)(state->next);
+             state->lenbits = 7;
+             ret = inflate_table(CODES, state->lens, 19, &(state->next),
+                                 &(state->lenbits), state->work);
+             if (ret) {
+                 strm->msg = (char *)"invalid code lengths set";
+                 state->mode = BAD;
+                 break;
+             }
+             Tracev((stderr, "inflate:       code lengths ok\n"));
+ 
+             /* get length and distance code code lengths */
+             state->have = 0;
+             while (state->have < state->nlen + state->ndist) {
+                 for (;;) {
+                     this = state->lencode[BITS(state->lenbits)];
+                     if ((unsigned)(this.bits) <= bits) break;
+                     PULLBYTE();
+                 }
+                 if (this.val < 16) {
+                     NEEDBITS(this.bits);
+                     DROPBITS(this.bits);
+                     state->lens[state->have++] = this.val;
+                 }
+                 else {
+                     if (this.val == 16) {
+                         NEEDBITS(this.bits + 2);
+                         DROPBITS(this.bits);
+                         if (state->have == 0) {
+                             strm->msg = (char *)"invalid bit length repeat";
+                             state->mode = BAD;
+                             break;
+                         }
+                         len = (unsigned)(state->lens[state->have - 1]);
+                         copy = 3 + BITS(2);
+                         DROPBITS(2);
+                     }
+                     else if (this.val == 17) {
+                         NEEDBITS(this.bits + 3);
+                         DROPBITS(this.bits);
+                         len = 0;
+                         copy = 3 + BITS(3);
+                         DROPBITS(3);
+                     }
+                     else {
+                         NEEDBITS(this.bits + 7);
+                         DROPBITS(this.bits);
+                         len = 0;
+                         copy = 11 + BITS(7);
+                         DROPBITS(7);
+                     }
+                     if (state->have + copy > state->nlen + state->ndist) {
+                         strm->msg = (char *)"invalid bit length repeat";
+                         state->mode = BAD;
+                         break;
+                     }
+                     while (copy--)
+                         state->lens[state->have++] = (unsigned short)len;
+                 }
+             }
+ 
+             /* build code tables */
+             state->next = state->codes;
+             state->lencode = (code const FAR *)(state->next);
+             state->lenbits = 9;
+             ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+                                 &(state->lenbits), state->work);
+             if (ret) {
+                 strm->msg = (char *)"invalid literal/lengths set";
+                 state->mode = BAD;
+                 break;
+             }
+             state->distcode = (code const FAR *)(state->next);
+             state->distbits = 6;
+             ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+                             &(state->next), &(state->distbits), state->work);
+             if (ret) {
+                 strm->msg = (char *)"invalid distances set";
+                 state->mode = BAD;
+                 break;
+             }
+             Tracev((stderr, "inflate:       codes ok\n"));
+             state->mode = LEN;
+ 
+         case LEN:
+             /* use inflate_fast() if we have enough input and output */
+             if (have >= 6 && left >= 258) {
+                 RESTORE();
+                 if (state->whave < state->wsize)
+                     state->whave = state->wsize - left;
+                 inflate_fast(strm, state->wsize);
+                 LOAD();
+                 break;
+             }
+ 
+             /* get a literal, length, or end-of-block code */
+             for (;;) {
+                 this = state->lencode[BITS(state->lenbits)];
+                 if ((unsigned)(this.bits) <= bits) break;
+                 PULLBYTE();
+             }
+             if (this.op && (this.op & 0xf0) == 0) {
+                 last = this;
+                 for (;;) {
+                     this = state->lencode[last.val +
+                             (BITS(last.bits + last.op) >> last.bits)];
+                     if ((unsigned)(last.bits + this.bits) <= bits) break;
+                     PULLBYTE();
+                 }
+                 DROPBITS(last.bits);
+             }
+             DROPBITS(this.bits);
+             state->length = (unsigned)this.val;
+ 
+             /* process literal */
+             if (this.op == 0) {
+                 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
+                         "inflate:         literal '%c'\n" :
+                         "inflate:         literal 0x%02x\n", this.val));
+                 ROOM();
+                 *put++ = (unsigned char)(state->length);
+                 left--;
+                 state->mode = LEN;
+                 break;
+             }
+ 
+             /* process end of block */
+             if (this.op & 32) {
+                 Tracevv((stderr, "inflate:         end of block\n"));
+                 state->mode = TYPE;
+                 break;
+             }
+ 
+             /* invalid code */
+             if (this.op & 64) {
+                 strm->msg = (char *)"invalid literal/length code";
+                 state->mode = BAD;
+                 break;
+             }
+ 
+             /* length code -- get extra bits, if any */
+             state->extra = (unsigned)(this.op) & 15;
+             if (state->extra != 0) {
+                 NEEDBITS(state->extra);
+                 state->length += BITS(state->extra);
+                 DROPBITS(state->extra);
+             }
+             Tracevv((stderr, "inflate:         length %u\n", state->length));
+ 
+             /* get distance code */
+             for (;;) {
+                 this = state->distcode[BITS(state->distbits)];
+                 if ((unsigned)(this.bits) <= bits) break;
+                 PULLBYTE();
+             }
+             if ((this.op & 0xf0) == 0) {
+                 last = this;
+                 for (;;) {
+                     this = state->distcode[last.val +
+                             (BITS(last.bits + last.op) >> last.bits)];
+                     if ((unsigned)(last.bits + this.bits) <= bits) break;
+                     PULLBYTE();
+                 }
+                 DROPBITS(last.bits);
+             }
+             DROPBITS(this.bits);
+             if (this.op & 64) {
+                 strm->msg = (char *)"invalid distance code";
+                 state->mode = BAD;
+                 break;
+             }
+             state->offset = (unsigned)this.val;
+ 
+             /* get distance extra bits, if any */
+             state->extra = (unsigned)(this.op) & 15;
+             if (state->extra != 0) {
+                 NEEDBITS(state->extra);
+                 state->offset += BITS(state->extra);
+                 DROPBITS(state->extra);
+             }
+             if (state->offset > state->wsize - (state->whave < state->wsize ?
+                                                 left : 0)) {
+                 strm->msg = (char *)"invalid distance too far back";
+                 state->mode = BAD;
+                 break;
+             }
+             Tracevv((stderr, "inflate:         distance %u\n", state->offset));
+ 
+             /* copy match from window to output */
+             do {
+                 ROOM();
+                 copy = state->wsize - state->offset;
+                 if (copy < left) {
+                     from = put + copy;
+                     copy = left - copy;
+                 }
+                 else {
+                     from = put - state->offset;
+                     copy = left;
+                 }
+                 if (copy > state->length) copy = state->length;
+                 state->length -= copy;
+                 left -= copy;
+                 do {
+                     *put++ = *from++;
+                 } while (--copy);
+             } while (state->length != 0);
+             break;
+ 
+         case DONE:
+             /* inflate stream terminated properly -- write leftover output */
+             ret = Z_STREAM_END;
+             if (left < state->wsize) {
+                 if (out(out_desc, state->window, state->wsize - left))
+                     ret = Z_BUF_ERROR;
+             }
+             goto inf_leave;
+ 
+         case BAD:
+             ret = Z_DATA_ERROR;
+             goto inf_leave;
+ 
+         default:                /* can't happen, but makes compilers happy */
+             ret = Z_STREAM_ERROR;
+             goto inf_leave;
+         }
+ 
+     /* Return unused input */
+   inf_leave:
+     strm->next_in = next;
+     strm->avail_in = have;
+     return ret;
+ }
+ 
+ int ZEXPORT inflateBackEnd(strm)
+ z_stream FAR *strm;
+ {
+     if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+         return Z_STREAM_ERROR;
+     ZFREE(strm, strm->state);
+     strm->state = Z_NULL;
+     Tracev((stderr, "inflate: end\n"));
+     return Z_OK;
+ }
diff -Nrcpad gcc-3.4.3/zlib/infblock.c gcc-4.0.0/zlib/infblock.c
*** gcc-3.4.3/zlib/infblock.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/infblock.c	Thu Jan  1 00:00:00 1970
***************
*** 1,403 ****
- /* infblock.c -- interpret and process block types to last block
-  * Copyright (C) 1995-2002 Mark Adler
-  * For conditions of distribution and use, see copyright notice in zlib.h 
-  */
- 
- #include "zutil.h"
- #include "infblock.h"
- #include "inftrees.h"
- #include "infcodes.h"
- #include "infutil.h"
- 
- struct inflate_codes_state {int dummy;}; /* for buggy compilers */
- 
- /* simplify the use of the inflate_huft type with some defines */
- #define exop word.what.Exop
- #define bits word.what.Bits
- 
- /* Table for deflate from PKZIP's appnote.txt. */
- local const uInt border[] = { /* Order of the bit length code lengths */
-         16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
- 
- /*
-    Notes beyond the 1.93a appnote.txt:
- 
-    1. Distance pointers never point before the beginning of the output
-       stream.
-    2. Distance pointers can point back across blocks, up to 32k away.
-    3. There is an implied maximum of 7 bits for the bit length table and
-       15 bits for the actual data.
-    4. If only one code exists, then it is encoded using one bit.  (Zero
-       would be more efficient, but perhaps a little confusing.)  If two
-       codes exist, they are coded using one bit each (0 and 1).
-    5. There is no way of sending zero distance codes--a dummy must be
-       sent if there are none.  (History: a pre 2.0 version of PKZIP would
-       store blocks with no distance codes, but this was discovered to be
-       too harsh a criterion.)  Valid only for 1.93a.  2.04c does allow
-       zero distance codes, which is sent as one code of zero bits in
-       length.
-    6. There are up to 286 literal/length codes.  Code 256 represents the
-       end-of-block.  Note however that the static length tree defines
-       288 codes just to fill out the Huffman codes.  Codes 286 and 287
-       cannot be used though, since there is no length base or extra bits
-       defined for them.  Similarily, there are up to 30 distance codes.
-       However, static trees define 32 codes (all 5 bits) to fill out the
-       Huffman codes, but the last two had better not show up in the data.
-    7. Unzip can check dynamic Huffman blocks for complete code sets.
-       The exception is that a single code would not be complete (see #4).
-    8. The five bits following the block type is really the number of
-       literal codes sent minus 257.
-    9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
-       (1+6+6).  Therefore, to output three times the length, you output
-       three codes (1+1+1), whereas to output four times the same length,
-       you only need two codes (1+3).  Hmm.
-   10. In the tree reconstruction algorithm, Code = Code + Increment
-       only if BitLength(i) is not zero.  (Pretty obvious.)
-   11. Correction: 4 Bits: # of Bit Length codes - 4     (4 - 19)
-   12. Note: length code 284 can represent 227-258, but length code 285
-       really is 258.  The last length deserves its own, short code
-       since it gets used a lot in very redundant files.  The length
-       258 is special since 258 - 3 (the min match length) is 255.
-   13. The literal/length and distance code bit lengths are read as a
-       single stream of lengths.  It is possible (and advantageous) for
-       a repeat code (16, 17, or 18) to go across the boundary between
-       the two sets of lengths.
-  */
- 
- 
- void inflate_blocks_reset(s, z, c)
- inflate_blocks_statef *s;
- z_streamp z;
- uLongf *c;
- {
-   if (c != Z_NULL)
-     *c = s->check;
-   if (s->mode == BTREE || s->mode == DTREE)
-     ZFREE(z, s->sub.trees.blens);
-   if (s->mode == CODES)
-     inflate_codes_free(s->sub.decode.codes, z);
-   s->mode = TYPE;
-   s->bitk = 0;
-   s->bitb = 0;
-   s->read = s->write = s->window;
-   if (s->checkfn != Z_NULL)
-     z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0);
-   Tracev((stderr, "inflate:   blocks reset\n"));
- }
- 
- 
- inflate_blocks_statef *inflate_blocks_new(z, c, w)
- z_streamp z;
- check_func c;
- uInt w;
- {
-   inflate_blocks_statef *s;
- 
-   if ((s = (inflate_blocks_statef *)ZALLOC
-        (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
-     return s;
-   if ((s->hufts =
-        (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL)
-   {
-     ZFREE(z, s);
-     return Z_NULL;
-   }
-   if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
-   {
-     ZFREE(z, s->hufts);
-     ZFREE(z, s);
-     return Z_NULL;
-   }
-   s->end = s->window + w;
-   s->checkfn = c;
-   s->mode = TYPE;
-   Tracev((stderr, "inflate:   blocks allocated\n"));
-   inflate_blocks_reset(s, z, Z_NULL);
-   return s;
- }
- 
- 
- int inflate_blocks(s, z, r)
- inflate_blocks_statef *s;
- z_streamp z;
- int r;
- {
-   uInt t;               /* temporary storage */
-   uLong b;              /* bit buffer */
-   uInt k;               /* bits in bit buffer */
-   Bytef *p;             /* input data pointer */
-   uInt n;               /* bytes available there */
-   Bytef *q;             /* output window write pointer */
-   uInt m;               /* bytes to end of window or read pointer */
- 
-   /* copy input/output information to locals (UPDATE macro restores) */
-   LOAD
- 
-   /* process input based on current state */
-   while (1) switch (s->mode)
-   {
-     case TYPE:
-       NEEDBITS(3)
-       t = (uInt)b & 7;
-       s->last = t & 1;
-       switch (t >> 1)
-       {
-         case 0:                         /* stored */
-           Tracev((stderr, "inflate:     stored block%s\n",
-                  s->last ? " (last)" : ""));
-           DUMPBITS(3)
-           t = k & 7;                    /* go to byte boundary */
-           DUMPBITS(t)
-           s->mode = LENS;               /* get length of stored block */
-           break;
-         case 1:                         /* fixed */
-           Tracev((stderr, "inflate:     fixed codes block%s\n",
-                  s->last ? " (last)" : ""));
-           {
-             uInt bl, bd;
-             inflate_huft *tl, *td;
- 
-             inflate_trees_fixed(&bl, &bd, &tl, &td, z);
-             s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
-             if (s->sub.decode.codes == Z_NULL)
-             {
-               r = Z_MEM_ERROR;
-               LEAVE
-             }
-           }
-           DUMPBITS(3)
-           s->mode = CODES;
-           break;
-         case 2:                         /* dynamic */
-           Tracev((stderr, "inflate:     dynamic codes block%s\n",
-                  s->last ? " (last)" : ""));
-           DUMPBITS(3)
-           s->mode = TABLE;
-           break;
-         case 3:                         /* illegal */
-           DUMPBITS(3)
-           s->mode = BAD;
-           z->msg = (char*)"invalid block type";
-           r = Z_DATA_ERROR;
-           LEAVE
-       }
-       break;
-     case LENS:
-       NEEDBITS(32)
-       if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
-       {
-         s->mode = BAD;
-         z->msg = (char*)"invalid stored block lengths";
-         r = Z_DATA_ERROR;
-         LEAVE
-       }
-       s->sub.left = (uInt)b & 0xffff;
-       b = k = 0;                      /* dump bits */
-       Tracev((stderr, "inflate:       stored length %u\n", s->sub.left));
-       s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
-       break;
-     case STORED:
-       if (n == 0)
-         LEAVE
-       NEEDOUT
-       t = s->sub.left;
-       if (t > n) t = n;
-       if (t > m) t = m;
-       zmemcpy(q, p, t);
-       p += t;  n -= t;
-       q += t;  m -= t;
-       if ((s->sub.left -= t) != 0)
-         break;
-       Tracev((stderr, "inflate:       stored end, %lu total out\n",
-               z->total_out + (q >= s->read ? q - s->read :
-               (s->end - s->read) + (q - s->window))));
-       s->mode = s->last ? DRY : TYPE;
-       break;
-     case TABLE:
-       NEEDBITS(14)
-       s->sub.trees.table = t = (uInt)b & 0x3fff;
- #ifndef PKZIP_BUG_WORKAROUND
-       if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
-       {
-         s->mode = BAD;
-         z->msg = (char*)"too many length or distance symbols";
-         r = Z_DATA_ERROR;
-         LEAVE
-       }
- #endif
-       t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
-       if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
-       {
-         r = Z_MEM_ERROR;
-         LEAVE
-       }
-       DUMPBITS(14)
-       s->sub.trees.index = 0;
-       Tracev((stderr, "inflate:       table sizes ok\n"));
-       s->mode = BTREE;
-     case BTREE:
-       while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
-       {
-         NEEDBITS(3)
-         s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
-         DUMPBITS(3)
-       }
-       while (s->sub.trees.index < 19)
-         s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
-       s->sub.trees.bb = 7;
-       t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
-                              &s->sub.trees.tb, s->hufts, z);
-       if (t != Z_OK)
-       {
-         r = t;
-         if (r == Z_DATA_ERROR)
-         {
-           ZFREE(z, s->sub.trees.blens);
-           s->mode = BAD;
-         }
-         LEAVE
-       }
-       s->sub.trees.index = 0;
-       Tracev((stderr, "inflate:       bits tree ok\n"));
-       s->mode = DTREE;
-     case DTREE:
-       while (t = s->sub.trees.table,
-              s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
-       {
-         inflate_huft *h;
-         uInt i, j, c;
- 
-         t = s->sub.trees.bb;
-         NEEDBITS(t)
-         h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
-         t = h->bits;
-         c = h->base;
-         if (c < 16)
-         {
-           DUMPBITS(t)
-           s->sub.trees.blens[s->sub.trees.index++] = c;
-         }
-         else /* c == 16..18 */
-         {
-           i = c == 18 ? 7 : c - 14;
-           j = c == 18 ? 11 : 3;
-           NEEDBITS(t + i)
-           DUMPBITS(t)
-           j += (uInt)b & inflate_mask[i];
-           DUMPBITS(i)
-           i = s->sub.trees.index;
-           t = s->sub.trees.table;
-           if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
-               (c == 16 && i < 1))
-           {
-             ZFREE(z, s->sub.trees.blens);
-             s->mode = BAD;
-             z->msg = (char*)"invalid bit length repeat";
-             r = Z_DATA_ERROR;
-             LEAVE
-           }
-           c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
-           do {
-             s->sub.trees.blens[i++] = c;
-           } while (--j);
-           s->sub.trees.index = i;
-         }
-       }
-       s->sub.trees.tb = Z_NULL;
-       {
-         uInt bl, bd;
-         inflate_huft *tl, *td;
-         inflate_codes_statef *c;
- 
-         bl = 9;         /* must be <= 9 for lookahead assumptions */
-         bd = 6;         /* must be <= 9 for lookahead assumptions */
-         t = s->sub.trees.table;
-         t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
-                                   s->sub.trees.blens, &bl, &bd, &tl, &td,
-                                   s->hufts, z);
-         if (t != Z_OK)
-         {
-           if (t == (uInt)Z_DATA_ERROR)
-           {
-             ZFREE(z, s->sub.trees.blens);
-             s->mode = BAD;
-           }
-           r = t;
-           LEAVE
-         }
-         Tracev((stderr, "inflate:       trees ok\n"));
-         if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
-         {
-           r = Z_MEM_ERROR;
-           LEAVE
-         }
-         s->sub.decode.codes = c;
-       }
-       ZFREE(z, s->sub.trees.blens);
-       s->mode = CODES;
-     case CODES:
-       UPDATE
-       if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
-         return inflate_flush(s, z, r);
-       r = Z_OK;
-       inflate_codes_free(s->sub.decode.codes, z);
-       LOAD
-       Tracev((stderr, "inflate:       codes end, %lu total out\n",
-               z->total_out + (q >= s->read ? q - s->read :
-               (s->end - s->read) + (q - s->window))));
-       if (!s->last)
-       {
-         s->mode = TYPE;
-         break;
-       }
-       s->mode = DRY;
-     case DRY:
-       FLUSH
-       if (s->read != s->write)
-         LEAVE
-       s->mode = DONE;
-     case DONE:
-       r = Z_STREAM_END;
-       LEAVE
-     case BAD:
-       r = Z_DATA_ERROR;
-       LEAVE
-     default:
-       r = Z_STREAM_ERROR;
-       LEAVE
-   }
- }
- 
- 
- int inflate_blocks_free(s, z)
- inflate_blocks_statef *s;
- z_streamp z;
- {
-   inflate_blocks_reset(s, z, Z_NULL);
-   ZFREE(z, s->window);
-   ZFREE(z, s->hufts);
-   ZFREE(z, s);
-   Tracev((stderr, "inflate:   blocks freed\n"));
-   return Z_OK;
- }
- 
- 
- void inflate_set_dictionary(s, d, n)
- inflate_blocks_statef *s;
- const Bytef *d;
- uInt  n;
- {
-   zmemcpy(s->window, d, n);
-   s->read = s->write = s->window + n;
- }
- 
- 
- /* Returns true if inflate is currently at the end of a block generated
-  * by Z_SYNC_FLUSH or Z_FULL_FLUSH. 
-  * IN assertion: s != Z_NULL
-  */
- int inflate_blocks_sync_point(s)
- inflate_blocks_statef *s;
- {
-   return s->mode == LENS;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/infblock.h gcc-4.0.0/zlib/infblock.h
*** gcc-3.4.3/zlib/infblock.h	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/infblock.h	Thu Jan  1 00:00:00 1970
***************
*** 1,39 ****
- /* infblock.h -- header to use infblock.c
-  * Copyright (C) 1995-2002 Mark Adler
-  * For conditions of distribution and use, see copyright notice in zlib.h 
-  */
- 
- /* WARNING: this file should *not* be used by applications. It is
-    part of the implementation of the compression library and is
-    subject to change. Applications should only use zlib.h.
-  */
- 
- struct inflate_blocks_state;
- typedef struct inflate_blocks_state FAR inflate_blocks_statef;
- 
- extern inflate_blocks_statef * inflate_blocks_new OF((
-     z_streamp z,
-     check_func c,               /* check function */
-     uInt w));                   /* window size */
- 
- extern int inflate_blocks OF((
-     inflate_blocks_statef *,
-     z_streamp ,
-     int));                      /* initial return code */
- 
- extern void inflate_blocks_reset OF((
-     inflate_blocks_statef *,
-     z_streamp ,
-     uLongf *));                  /* check value on output */
- 
- extern int inflate_blocks_free OF((
-     inflate_blocks_statef *,
-     z_streamp));
- 
- extern void inflate_set_dictionary OF((
-     inflate_blocks_statef *s,
-     const Bytef *d,  /* dictionary */
-     uInt  n));       /* dictionary length */
- 
- extern int inflate_blocks_sync_point OF((
-     inflate_blocks_statef *s));
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/infcodes.c gcc-4.0.0/zlib/infcodes.c
*** gcc-3.4.3/zlib/infcodes.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/infcodes.c	Thu Jan  1 00:00:00 1970
***************
*** 1,251 ****
- /* infcodes.c -- process literals and length/distance pairs
-  * Copyright (C) 1995-2002 Mark Adler
-  * For conditions of distribution and use, see copyright notice in zlib.h 
-  */
- 
- #include "zutil.h"
- #include "inftrees.h"
- #include "infblock.h"
- #include "infcodes.h"
- #include "infutil.h"
- #include "inffast.h"
- 
- /* simplify the use of the inflate_huft type with some defines */
- #define exop word.what.Exop
- #define bits word.what.Bits
- 
- typedef enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
-       START,    /* x: set up for LEN */
-       LEN,      /* i: get length/literal/eob next */
-       LENEXT,   /* i: getting length extra (have base) */
-       DIST,     /* i: get distance next */
-       DISTEXT,  /* i: getting distance extra */
-       COPY,     /* o: copying bytes in window, waiting for space */
-       LIT,      /* o: got literal, waiting for output space */
-       WASH,     /* o: got eob, possibly still output waiting */
-       END,      /* x: got eob and all data flushed */
-       BADCODE}  /* x: got error */
- inflate_codes_mode;
- 
- /* inflate codes private state */
- struct inflate_codes_state {
- 
-   /* mode */
-   inflate_codes_mode mode;      /* current inflate_codes mode */
- 
-   /* mode dependent information */
-   uInt len;
-   union {
-     struct {
-       inflate_huft *tree;       /* pointer into tree */
-       uInt need;                /* bits needed */
-     } code;             /* if LEN or DIST, where in tree */
-     uInt lit;           /* if LIT, literal */
-     struct {
-       uInt get;                 /* bits to get for extra */
-       uInt dist;                /* distance back to copy from */
-     } copy;             /* if EXT or COPY, where and how much */
-   } sub;                /* submode */
- 
-   /* mode independent information */
-   Byte lbits;           /* ltree bits decoded per branch */
-   Byte dbits;           /* dtree bits decoder per branch */
-   inflate_huft *ltree;          /* literal/length/eob tree */
-   inflate_huft *dtree;          /* distance tree */
- 
- };
- 
- 
- inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z)
- uInt bl, bd;
- inflate_huft *tl;
- inflate_huft *td; /* need separate declaration for Borland C++ */
- z_streamp z;
- {
-   inflate_codes_statef *c;
- 
-   if ((c = (inflate_codes_statef *)
-        ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
-   {
-     c->mode = START;
-     c->lbits = (Byte)bl;
-     c->dbits = (Byte)bd;
-     c->ltree = tl;
-     c->dtree = td;
-     Tracev((stderr, "inflate:       codes new\n"));
-   }
-   return c;
- }
- 
- 
- int inflate_codes(s, z, r)
- inflate_blocks_statef *s;
- z_streamp z;
- int r;
- {
-   uInt j;               /* temporary storage */
-   inflate_huft *t;      /* temporary pointer */
-   uInt e;               /* extra bits or operation */
-   uLong b;              /* bit buffer */
-   uInt k;               /* bits in bit buffer */
-   Bytef *p;             /* input data pointer */
-   uInt n;               /* bytes available there */
-   Bytef *q;             /* output window write pointer */
-   uInt m;               /* bytes to end of window or read pointer */
-   Bytef *f;             /* pointer to copy strings from */
-   inflate_codes_statef *c = s->sub.decode.codes;  /* codes state */
- 
-   /* copy input/output information to locals (UPDATE macro restores) */
-   LOAD
- 
-   /* process input and output based on current state */
-   while (1) switch (c->mode)
-   {             /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
-     case START:         /* x: set up for LEN */
- #ifndef SLOW
-       if (m >= 258 && n >= 10)
-       {
-         UPDATE
-         r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
-         LOAD
-         if (r != Z_OK)
-         {
-           c->mode = r == Z_STREAM_END ? WASH : BADCODE;
-           break;
-         }
-       }
- #endif /* !SLOW */
-       c->sub.code.need = c->lbits;
-       c->sub.code.tree = c->ltree;
-       c->mode = LEN;
-     case LEN:           /* i: get length/literal/eob next */
-       j = c->sub.code.need;
-       NEEDBITS(j)
-       t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
-       DUMPBITS(t->bits)
-       e = (uInt)(t->exop);
-       if (e == 0)               /* literal */
-       {
-         c->sub.lit = t->base;
-         Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
-                  "inflate:         literal '%c'\n" :
-                  "inflate:         literal 0x%02x\n", t->base));
-         c->mode = LIT;
-         break;
-       }
-       if (e & 16)               /* length */
-       {
-         c->sub.copy.get = e & 15;
-         c->len = t->base;
-         c->mode = LENEXT;
-         break;
-       }
-       if ((e & 64) == 0)        /* next table */
-       {
-         c->sub.code.need = e;
-         c->sub.code.tree = t + t->base;
-         break;
-       }
-       if (e & 32)               /* end of block */
-       {
-         Tracevv((stderr, "inflate:         end of block\n"));
-         c->mode = WASH;
-         break;
-       }
-       c->mode = BADCODE;        /* invalid code */
-       z->msg = (char*)"invalid literal/length code";
-       r = Z_DATA_ERROR;
-       LEAVE
-     case LENEXT:        /* i: getting length extra (have base) */
-       j = c->sub.copy.get;
-       NEEDBITS(j)
-       c->len += (uInt)b & inflate_mask[j];
-       DUMPBITS(j)
-       c->sub.code.need = c->dbits;
-       c->sub.code.tree = c->dtree;
-       Tracevv((stderr, "inflate:         length %u\n", c->len));
-       c->mode = DIST;
-     case DIST:          /* i: get distance next */
-       j = c->sub.code.need;
-       NEEDBITS(j)
-       t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
-       DUMPBITS(t->bits)
-       e = (uInt)(t->exop);
-       if (e & 16)               /* distance */
-       {
-         c->sub.copy.get = e & 15;
-         c->sub.copy.dist = t->base;
-         c->mode = DISTEXT;
-         break;
-       }
-       if ((e & 64) == 0)        /* next table */
-       {
-         c->sub.code.need = e;
-         c->sub.code.tree = t + t->base;
-         break;
-       }
-       c->mode = BADCODE;        /* invalid code */
-       z->msg = (char*)"invalid distance code";
-       r = Z_DATA_ERROR;
-       LEAVE
-     case DISTEXT:       /* i: getting distance extra */
-       j = c->sub.copy.get;
-       NEEDBITS(j)
-       c->sub.copy.dist += (uInt)b & inflate_mask[j];
-       DUMPBITS(j)
-       Tracevv((stderr, "inflate:         distance %u\n", c->sub.copy.dist));
-       c->mode = COPY;
-     case COPY:          /* o: copying bytes in window, waiting for space */
-       f = q - c->sub.copy.dist;
-       while (f < s->window)             /* modulo window size-"while" instead */
-         f += s->end - s->window;        /* of "if" handles invalid distances */
-       while (c->len)
-       {
-         NEEDOUT
-         OUTBYTE(*f++)
-         if (f == s->end)
-           f = s->window;
-         c->len--;
-       }
-       c->mode = START;
-       break;
-     case LIT:           /* o: got literal, waiting for output space */
-       NEEDOUT
-       OUTBYTE(c->sub.lit)
-       c->mode = START;
-       break;
-     case WASH:          /* o: got eob, possibly more output */
-       if (k > 7)        /* return unused byte, if any */
-       {
-         Assert(k < 16, "inflate_codes grabbed too many bytes")
-         k -= 8;
-         n++;
-         p--;            /* can always return one */
-       }
-       FLUSH
-       if (s->read != s->write)
-         LEAVE
-       c->mode = END;
-     case END:
-       r = Z_STREAM_END;
-       LEAVE
-     case BADCODE:       /* x: got error */
-       r = Z_DATA_ERROR;
-       LEAVE
-     default:
-       r = Z_STREAM_ERROR;
-       LEAVE
-   }
- #ifdef NEED_DUMMY_RETURN
-   return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
- #endif
- }
- 
- 
- void inflate_codes_free(c, z)
- inflate_codes_statef *c;
- z_streamp z;
- {
-   ZFREE(z, c);
-   Tracev((stderr, "inflate:       codes free\n"));
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/infcodes.h gcc-4.0.0/zlib/infcodes.h
*** gcc-3.4.3/zlib/infcodes.h	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/infcodes.h	Thu Jan  1 00:00:00 1970
***************
*** 1,27 ****
- /* infcodes.h -- header to use infcodes.c
-  * Copyright (C) 1995-2002 Mark Adler
-  * For conditions of distribution and use, see copyright notice in zlib.h 
-  */
- 
- /* WARNING: this file should *not* be used by applications. It is
-    part of the implementation of the compression library and is
-    subject to change. Applications should only use zlib.h.
-  */
- 
- struct inflate_codes_state;
- typedef struct inflate_codes_state FAR inflate_codes_statef;
- 
- extern inflate_codes_statef *inflate_codes_new OF((
-     uInt, uInt,
-     inflate_huft *, inflate_huft *,
-     z_streamp ));
- 
- extern int inflate_codes OF((
-     inflate_blocks_statef *,
-     z_streamp ,
-     int));
- 
- extern void inflate_codes_free OF((
-     inflate_codes_statef *,
-     z_streamp ));
- 
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/inffast.c gcc-4.0.0/zlib/inffast.c
*** gcc-3.4.3/zlib/inffast.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/inffast.c	Mon Oct 11 18:45:37 2004
***************
*** 1,183 ****
! /* inffast.c -- process literals and length/distance pairs fast
!  * Copyright (C) 1995-2002 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  #include "zutil.h"
  #include "inftrees.h"
! #include "infblock.h"
! #include "infcodes.h"
! #include "infutil.h"
  #include "inffast.h"
  
! struct inflate_codes_state {int dummy;}; /* for buggy compilers */
  
! /* simplify the use of the inflate_huft type with some defines */
! #define exop word.what.Exop
! #define bits word.what.Bits
  
! /* macros for bit input with no checking and for returning unused bytes */
! #define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
! #define UNGRAB {c=z->avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;}
  
! /* Called with number of bytes left to write in window at least 258
!    (the maximum string length) and number of input bytes available
!    at least ten.  The ten bytes are six bytes for the longest length/
!    distance pair plus four bytes for overloading the bit buffer. */
  
! int inflate_fast(bl, bd, tl, td, s, z)
! uInt bl, bd;
! inflate_huft *tl;
! inflate_huft *td; /* need separate declaration for Borland C++ */
! inflate_blocks_statef *s;
! z_streamp z;
! {
!   inflate_huft *t;      /* temporary pointer */
!   uInt e;               /* extra bits or operation */
!   uLong b;              /* bit buffer */
!   uInt k;               /* bits in bit buffer */
!   Bytef *p;             /* input data pointer */
!   uInt n;               /* bytes available there */
!   Bytef *q;             /* output window write pointer */
!   uInt m;               /* bytes to end of window or read pointer */
!   uInt ml;              /* mask for literal/length tree */
!   uInt md;              /* mask for distance tree */
!   uInt c;               /* bytes to copy */
!   uInt d;               /* distance back to copy from */
!   Bytef *r;             /* copy source pointer */
  
!   /* load input, output, bit values */
!   LOAD
  
!   /* initialize masks */
!   ml = inflate_mask[bl];
!   md = inflate_mask[bd];
  
!   /* do until not enough input or output space for fast loop */
!   do {                          /* assume called with m >= 258 && n >= 10 */
!     /* get literal/length code */
!     GRABBITS(20)                /* max bits for literal/length code */
!     if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
!     {
!       DUMPBITS(t->bits)
!       Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
!                 "inflate:         * literal '%c'\n" :
!                 "inflate:         * literal 0x%02x\n", t->base));
!       *q++ = (Byte)t->base;
!       m--;
!       continue;
!     }
!     do {
!       DUMPBITS(t->bits)
!       if (e & 16)
!       {
!         /* get extra bits for length */
!         e &= 15;
!         c = t->base + ((uInt)b & inflate_mask[e]);
!         DUMPBITS(e)
!         Tracevv((stderr, "inflate:         * length %u\n", c));
  
!         /* decode distance base of block to copy */
!         GRABBITS(15);           /* max bits for distance code */
!         e = (t = td + ((uInt)b & md))->exop;
!         do {
!           DUMPBITS(t->bits)
!           if (e & 16)
!           {
!             /* get extra bits to add to distance base */
!             e &= 15;
!             GRABBITS(e)         /* get extra bits (up to 13) */
!             d = t->base + ((uInt)b & inflate_mask[e]);
!             DUMPBITS(e)
!             Tracevv((stderr, "inflate:         * distance %u\n", d));
  
!             /* do the copy */
!             m -= c;
!             r = q - d;
!             if (r < s->window)                  /* wrap if needed */
!             {
!               do {
!                 r += s->end - s->window;        /* force pointer in window */
!               } while (r < s->window);          /* covers invalid distances */
!               e = s->end - r;
!               if (c > e)
!               {
!                 c -= e;                         /* wrapped copy */
!                 do {
!                     *q++ = *r++;
!                 } while (--e);
!                 r = s->window;
!                 do {
!                     *q++ = *r++;
!                 } while (--c);
!               }
!               else                              /* normal copy */
!               {
!                 *q++ = *r++;  c--;
!                 *q++ = *r++;  c--;
!                 do {
!                     *q++ = *r++;
!                 } while (--c);
!               }
              }
!             else                                /* normal copy */
!             {
!               *q++ = *r++;  c--;
!               *q++ = *r++;  c--;
!               do {
!                 *q++ = *r++;
!               } while (--c);
              }
              break;
-           }
-           else if ((e & 64) == 0)
-           {
-             t += t->base;
-             e = (t += ((uInt)b & inflate_mask[e]))->exop;
-           }
-           else
-           {
-             z->msg = (char*)"invalid distance code";
-             UNGRAB
-             UPDATE
-             return Z_DATA_ERROR;
-           }
-         } while (1);
-         break;
-       }
-       if ((e & 64) == 0)
-       {
-         t += t->base;
-         if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0)
-         {
-           DUMPBITS(t->bits)
-           Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
-                     "inflate:         * literal '%c'\n" :
-                     "inflate:         * literal 0x%02x\n", t->base));
-           *q++ = (Byte)t->base;
-           m--;
-           break;
          }
!       }
!       else if (e & 32)
!       {
!         Tracevv((stderr, "inflate:         * end of block\n"));
!         UNGRAB
!         UPDATE
!         return Z_STREAM_END;
!       }
!       else
!       {
!         z->msg = (char*)"invalid literal/length code";
!         UNGRAB
!         UPDATE
!         return Z_DATA_ERROR;
!       }
!     } while (1);
!   } while (m >= 258 && n >= 10);
  
!   /* not enough input or output--restore pointers and return */
!   UNGRAB
!   UPDATE
!   return Z_OK;
  }
--- 1,305 ----
! /* inffast.c -- fast decoding
!  * Copyright (C) 1995-2003 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  #include "zutil.h"
  #include "inftrees.h"
! #include "inflate.h"
  #include "inffast.h"
  
! #ifndef ASMINF
  
! /* Allow machine dependent optimization for post-increment or pre-increment.
!    Based on testing to date,
!    Pre-increment preferred for:
!    - PowerPC G3 (Adler)
!    - MIPS R5000 (Randers-Pehrson)
!    Post-increment preferred for:
!    - none
!    No measurable difference:
!    - Pentium III (Anderson)
!    - 68060 (Nikl)
!  */
! #ifdef POSTINC
! #  define OFF 0
! #  define PUP(a) *(a)++
! #else
! #  define OFF 1
! #  define PUP(a) *++(a)
! #endif
  
! /*
!    Decode literal, length, and distance codes and write out the resulting
!    literal and match bytes until either not enough input or output is
!    available, an end-of-block is encountered, or a data error is encountered.
!    When large enough input and output buffers are supplied to inflate(), for
!    example, a 16K input buffer and a 64K output buffer, more than 95% of the
!    inflate execution time is spent in this routine.
  
!    Entry assumptions:
  
!         state->mode == LEN
!         strm->avail_in >= 6
!         strm->avail_out >= 258
!         start >= strm->avail_out
!         state->bits < 8
  
!    On return, state->mode is one of:
  
!         LEN -- ran out of enough output space or enough available input
!         TYPE -- reached end of block code, inflate() to interpret next block
!         BAD -- error in block data
  
!    Notes:
  
!     - The maximum input bits used by a length/distance pair is 15 bits for the
!       length code, 5 bits for the length extra, 15 bits for the distance code,
!       and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
!       Therefore if strm->avail_in >= 6, then there is enough input to avoid
!       checking for available input while decoding.
  
!     - The maximum bytes that a single length/distance pair can output is 258
!       bytes, which is the maximum length that can be coded.  inflate_fast()
!       requires strm->avail_out >= 258 for each loop to avoid checking for
!       output space.
!  */
! void inflate_fast(strm, start)
! z_streamp strm;
! unsigned start;         /* inflate()'s starting value for strm->avail_out */
! {
!     struct inflate_state FAR *state;
!     unsigned char FAR *in;      /* local strm->next_in */
!     unsigned char FAR *last;    /* while in < last, enough input available */
!     unsigned char FAR *out;     /* local strm->next_out */
!     unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */
!     unsigned char FAR *end;     /* while out < end, enough space available */
!     unsigned wsize;             /* window size or zero if not using window */
!     unsigned whave;             /* valid bytes in the window */
!     unsigned write;             /* window write index */
!     unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */
!     unsigned long hold;         /* local strm->hold */
!     unsigned bits;              /* local strm->bits */
!     code const FAR *lcode;      /* local strm->lencode */
!     code const FAR *dcode;      /* local strm->distcode */
!     unsigned lmask;             /* mask for first level of length codes */
!     unsigned dmask;             /* mask for first level of distance codes */
!     code this;                  /* retrieved table entry */
!     unsigned op;                /* code bits, operation, extra bits, or */
!                                 /*  window position, window bytes to copy */
!     unsigned len;               /* match length, unused bytes */
!     unsigned dist;              /* match distance */
!     unsigned char FAR *from;    /* where to copy match from */
! 
!     /* copy state to local variables */
!     state = (struct inflate_state FAR *)strm->state;
!     in = strm->next_in - OFF;
!     last = in + (strm->avail_in - 5);
!     out = strm->next_out - OFF;
!     beg = out - (start - strm->avail_out);
!     end = out + (strm->avail_out - 257);
!     wsize = state->wsize;
!     whave = state->whave;
!     write = state->write;
!     window = state->window;
!     hold = state->hold;
!     bits = state->bits;
!     lcode = state->lencode;
!     dcode = state->distcode;
!     lmask = (1U << state->lenbits) - 1;
!     dmask = (1U << state->distbits) - 1;
! 
!     /* decode literals and length/distances until end-of-block or not enough
!        input data or output space */
!     do {
!         if (bits < 15) {
!             hold += (unsigned long)(PUP(in)) << bits;
!             bits += 8;
!             hold += (unsigned long)(PUP(in)) << bits;
!             bits += 8;
!         }
!         this = lcode[hold & lmask];
!       dolen:
!         op = (unsigned)(this.bits);
!         hold >>= op;
!         bits -= op;
!         op = (unsigned)(this.op);
!         if (op == 0) {                          /* literal */
!             Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
!                     "inflate:         literal '%c'\n" :
!                     "inflate:         literal 0x%02x\n", this.val));
!             PUP(out) = (unsigned char)(this.val);
!         }
!         else if (op & 16) {                     /* length base */
!             len = (unsigned)(this.val);
!             op &= 15;                           /* number of extra bits */
!             if (op) {
!                 if (bits < op) {
!                     hold += (unsigned long)(PUP(in)) << bits;
!                     bits += 8;
!                 }
!                 len += (unsigned)hold & ((1U << op) - 1);
!                 hold >>= op;
!                 bits -= op;
              }
!             Tracevv((stderr, "inflate:         length %u\n", len));
!             if (bits < 15) {
!                 hold += (unsigned long)(PUP(in)) << bits;
!                 bits += 8;
!                 hold += (unsigned long)(PUP(in)) << bits;
!                 bits += 8;
              }
+             this = dcode[hold & dmask];
+           dodist:
+             op = (unsigned)(this.bits);
+             hold >>= op;
+             bits -= op;
+             op = (unsigned)(this.op);
+             if (op & 16) {                      /* distance base */
+                 dist = (unsigned)(this.val);
+                 op &= 15;                       /* number of extra bits */
+                 if (bits < op) {
+                     hold += (unsigned long)(PUP(in)) << bits;
+                     bits += 8;
+                     if (bits < op) {
+                         hold += (unsigned long)(PUP(in)) << bits;
+                         bits += 8;
+                     }
+                 }
+                 dist += (unsigned)hold & ((1U << op) - 1);
+                 hold >>= op;
+                 bits -= op;
+                 Tracevv((stderr, "inflate:         distance %u\n", dist));
+                 op = (unsigned)(out - beg);     /* max distance in output */
+                 if (dist > op) {                /* see if copy from window */
+                     op = dist - op;             /* distance back in window */
+                     if (op > whave) {
+                         strm->msg = (char *)"invalid distance too far back";
+                         state->mode = BAD;
+                         break;
+                     }
+                     from = window - OFF;
+                     if (write == 0) {           /* very common case */
+                         from += wsize - op;
+                         if (op < len) {         /* some from window */
+                             len -= op;
+                             do {
+                                 PUP(out) = PUP(from);
+                             } while (--op);
+                             from = out - dist;  /* rest from output */
+                         }
+                     }
+                     else if (write < op) {      /* wrap around window */
+                         from += wsize + write - op;
+                         op -= write;
+                         if (op < len) {         /* some from end of window */
+                             len -= op;
+                             do {
+                                 PUP(out) = PUP(from);
+                             } while (--op);
+                             from = window - OFF;
+                             if (write < len) {  /* some from start of window */
+                                 op = write;
+                                 len -= op;
+                                 do {
+                                     PUP(out) = PUP(from);
+                                 } while (--op);
+                                 from = out - dist;      /* rest from output */
+                             }
+                         }
+                     }
+                     else {                      /* contiguous in window */
+                         from += write - op;
+                         if (op < len) {         /* some from window */
+                             len -= op;
+                             do {
+                                 PUP(out) = PUP(from);
+                             } while (--op);
+                             from = out - dist;  /* rest from output */
+                         }
+                     }
+                     while (len > 2) {
+                         PUP(out) = PUP(from);
+                         PUP(out) = PUP(from);
+                         PUP(out) = PUP(from);
+                         len -= 3;
+                     }
+                     if (len) {
+                         PUP(out) = PUP(from);
+                         if (len > 1)
+                             PUP(out) = PUP(from);
+                     }
+                 }
+                 else {
+                     from = out - dist;          /* copy direct from output */
+                     do {                        /* minimum length is three */
+                         PUP(out) = PUP(from);
+                         PUP(out) = PUP(from);
+                         PUP(out) = PUP(from);
+                         len -= 3;
+                     } while (len > 2);
+                     if (len) {
+                         PUP(out) = PUP(from);
+                         if (len > 1)
+                             PUP(out) = PUP(from);
+                     }
+                 }
+             }
+             else if ((op & 64) == 0) {          /* 2nd level distance code */
+                 this = dcode[this.val + (hold & ((1U << op) - 1))];
+                 goto dodist;
+             }
+             else {
+                 strm->msg = (char *)"invalid distance code";
+                 state->mode = BAD;
+                 break;
+             }
+         }
+         else if ((op & 64) == 0) {              /* 2nd level length code */
+             this = lcode[this.val + (hold & ((1U << op) - 1))];
+             goto dolen;
+         }
+         else if (op & 32) {                     /* end-of-block */
+             Tracevv((stderr, "inflate:         end of block\n"));
+             state->mode = TYPE;
              break;
          }
!         else {
!             strm->msg = (char *)"invalid literal/length code";
!             state->mode = BAD;
!             break;
!         }
!     } while (in < last && out < end);
  
!     /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
!     len = bits >> 3;
!     in -= len;
!     bits -= len << 3;
!     hold &= (1U << bits) - 1;
! 
!     /* update state and return */
!     strm->next_in = in + OFF;
!     strm->next_out = out + OFF;
!     strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
!     strm->avail_out = (unsigned)(out < end ?
!                                  257 + (end - out) : 257 - (out - end));
!     state->hold = hold;
!     state->bits = bits;
!     return;
  }
+ 
+ /*
+    inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
+    - Using bit fields for code structure
+    - Different op definition to avoid & for extra bits (do & for table bits)
+    - Three separate decoding do-loops for direct, window, and write == 0
+    - Special case for distance > 1 copies to do overlapped load and store copy
+    - Explicit branch predictions (based on measured branch probabilities)
+    - Deferring match copy and interspersed it with decoding subsequent codes
+    - Swapping literal/length else
+    - Swapping window/direct else
+    - Larger unrolled copy loops (three is about right)
+    - Moving len -= 3 statement into middle of loop
+  */
+ 
+ #endif /* !ASMINF */
diff -Nrcpad gcc-3.4.3/zlib/inffast.h gcc-4.0.0/zlib/inffast.h
*** gcc-3.4.3/zlib/inffast.h	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/inffast.h	Mon Oct 11 18:45:37 2004
***************
*** 1,6 ****
  /* inffast.h -- header to use inffast.c
!  * Copyright (C) 1995-2002 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* WARNING: this file should *not* be used by applications. It is
--- 1,6 ----
  /* inffast.h -- header to use inffast.c
!  * Copyright (C) 1995-2003 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /* WARNING: this file should *not* be used by applications. It is
***************
*** 8,17 ****
     subject to change. Applications should only use zlib.h.
   */
  
! extern int inflate_fast OF((
!     uInt,
!     uInt,
!     inflate_huft *,
!     inflate_huft *,
!     inflate_blocks_statef *,
!     z_streamp ));
--- 8,11 ----
     subject to change. Applications should only use zlib.h.
   */
  
! void inflate_fast OF((z_streamp strm, unsigned start));
diff -Nrcpad gcc-3.4.3/zlib/inffixed.h gcc-4.0.0/zlib/inffixed.h
*** gcc-3.4.3/zlib/inffixed.h	Mon Mar 11 21:49:13 2002
--- gcc-4.0.0/zlib/inffixed.h	Mon Oct 11 18:45:37 2004
***************
*** 1,151 ****
! /* inffixed.h -- table for decoding fixed codes
!  * Generated automatically by the maketree.c program
!  */
  
! /* WARNING: this file should *not* be used by applications. It is
!    part of the implementation of the compression library and is
!    subject to change. Applications should only use zlib.h.
!  */
  
! local uInt fixed_bl = 9;
! local uInt fixed_bd = 5;
! local inflate_huft fixed_tl[] = {
!     {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
!     {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
!     {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
!     {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
!     {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
!     {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
!     {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
!     {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
!     {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
!     {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
!     {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
!     {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
!     {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
!     {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
!     {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
!     {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
!     {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
!     {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
!     {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
!     {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
!     {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
!     {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
!     {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
!     {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
!     {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
!     {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
!     {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
!     {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
!     {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
!     {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
!     {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
!     {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
!     {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
!     {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
!     {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
!     {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
!     {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
!     {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
!     {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
!     {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
!     {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
!     {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
!     {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
!     {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
!     {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
!     {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
!     {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
!     {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
!     {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
!     {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
!     {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
!     {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
!     {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
!     {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
!     {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
!     {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
!     {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
!     {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
!     {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
!     {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
!     {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
!     {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
!     {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
!     {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
!     {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
!     {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
!     {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
!     {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
!     {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
!     {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
!     {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
!     {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
!     {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
!     {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
!     {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
!     {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
!     {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
!     {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
!     {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
!     {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
!     {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
!     {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
!     {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
!     {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
!     {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
!     {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
!     {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
!     {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
!     {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
!     {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
!     {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
!     {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
!     {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
!     {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
!     {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
!     {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
!     {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
!     {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
!     {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
!     {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
!     {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
!     {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
!     {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
!     {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
!     {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
!     {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
!     {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
!     {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
!     {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
!     {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
!     {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
!     {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
!     {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
!     {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
!     {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
!     {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
!     {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
!     {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
!     {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
!     {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
!     {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
!     {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
!     {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
!     {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
!     {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
!     {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
!     {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
!     {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
!   };
! local inflate_huft fixed_td[] = {
!     {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
!     {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
!     {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
!     {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
!     {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
!     {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
!     {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
!     {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
!   };
--- 1,94 ----
!     /* inffixed.h -- table for decoding fixed codes
!      * Generated automatically by makefixed().
!      */
  
!     /* WARNING: this file should *not* be used by applications. It
!        is part of the implementation of the compression library and
!        is subject to change. Applications should only use zlib.h.
!      */
  
!     static const code lenfix[512] = {
!         {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
!         {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
!         {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
!         {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
!         {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
!         {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
!         {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
!         {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
!         {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
!         {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
!         {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
!         {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
!         {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
!         {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
!         {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
!         {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
!         {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
!         {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
!         {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
!         {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
!         {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
!         {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
!         {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
!         {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
!         {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
!         {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
!         {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
!         {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
!         {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
!         {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
!         {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
!         {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
!         {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
!         {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
!         {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
!         {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
!         {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
!         {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
!         {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
!         {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
!         {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
!         {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
!         {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
!         {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
!         {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
!         {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
!         {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
!         {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
!         {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
!         {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
!         {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
!         {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
!         {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
!         {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
!         {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
!         {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
!         {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
!         {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
!         {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
!         {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
!         {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
!         {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
!         {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
!         {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
!         {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
!         {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
!         {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
!         {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
!         {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
!         {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
!         {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
!         {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
!         {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
!         {0,9,255}
!     };
! 
!     static const code distfix[32] = {
!         {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
!         {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
!         {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
!         {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
!         {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
!         {22,5,193},{64,5,0}
!     };
diff -Nrcpad gcc-3.4.3/zlib/inflate.c gcc-4.0.0/zlib/inflate.c
*** gcc-3.4.3/zlib/inflate.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/inflate.c	Mon Oct 11 18:45:37 2004
***************
*** 1,366 ****
! /* inflate.c -- zlib interface to inflate modules
!  * Copyright (C) 1995-2002 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
! #include "zutil.h"
! #include "infblock.h"
! 
! struct inflate_blocks_state {int dummy;}; /* for buggy compilers */
  
! typedef enum {
!       METHOD,   /* waiting for method byte */
!       FLAG,     /* waiting for flag byte */
!       DICT4,    /* four dictionary check bytes to go */
!       DICT3,    /* three dictionary check bytes to go */
!       DICT2,    /* two dictionary check bytes to go */
!       DICT1,    /* one dictionary check byte to go */
!       DICT0,    /* waiting for inflateSetDictionary */
!       BLOCKS,   /* decompressing blocks */
!       CHECK4,   /* four check bytes to go */
!       CHECK3,   /* three check bytes to go */
!       CHECK2,   /* two check bytes to go */
!       CHECK1,   /* one check byte to go */
!       DONE,     /* finished check, done */
!       BAD}      /* got an error--stay here */
! inflate_mode;
  
! /* inflate private state */
! struct internal_state {
  
!   /* mode */
!   inflate_mode  mode;   /* current inflate mode */
  
!   /* mode dependent information */
!   union {
!     uInt method;        /* if FLAGS, method byte */
!     struct {
!       uLong was;                /* computed check value */
!       uLong need;               /* stream check value */
!     } check;            /* if CHECK, check values to compare */
!     uInt marker;        /* if BAD, inflateSync's marker bytes count */
!   } sub;        /* submode */
  
!   /* mode independent information */
!   int  nowrap;          /* flag for no wrapper */
!   uInt wbits;           /* log2(window size)  (8..15, defaults to 15) */
!   inflate_blocks_statef 
!     *blocks;            /* current inflate_blocks state */
  
! };
  
  
! int ZEXPORT inflateReset(z)
! z_streamp z;
  {
!   if (z == Z_NULL || z->state == Z_NULL)
!     return Z_STREAM_ERROR;
!   z->total_in = z->total_out = 0;
!   z->msg = Z_NULL;
!   z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
!   inflate_blocks_reset(z->state->blocks, z, Z_NULL);
!   Tracev((stderr, "inflate: reset\n"));
!   return Z_OK;
  }
  
! 
! int ZEXPORT inflateEnd(z)
! z_streamp z;
  {
!   if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
!     return Z_STREAM_ERROR;
!   if (z->state->blocks != Z_NULL)
!     inflate_blocks_free(z->state->blocks, z);
!   ZFREE(z, z->state);
!   z->state = Z_NULL;
!   Tracev((stderr, "inflate: end\n"));
!   return Z_OK;
  }
  
  
! int ZEXPORT inflateInit2_(z, w, version, stream_size)
! z_streamp z;
! int w;
! const char *version;
! int stream_size;
! {
!   if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
!       stream_size != sizeof(z_stream))
!       return Z_VERSION_ERROR;
  
!   /* initialize state */
!   if (z == Z_NULL)
!     return Z_STREAM_ERROR;
!   z->msg = Z_NULL;
!   if (z->zalloc == Z_NULL)
!   {
!     z->zalloc = zcalloc;
!     z->opaque = (voidpf)0;
!   }
!   if (z->zfree == Z_NULL) z->zfree = zcfree;
!   if ((z->state = (struct internal_state FAR *)
!        ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
!     return Z_MEM_ERROR;
!   z->state->blocks = Z_NULL;
  
!   /* handle undocumented nowrap option (no zlib header or check) */
!   z->state->nowrap = 0;
!   if (w < 0)
!   {
!     w = - w;
!     z->state->nowrap = 1;
!   }
  
!   /* set window size */
!   if (w < 8 || w > 15)
!   {
!     inflateEnd(z);
!     return Z_STREAM_ERROR;
!   }
!   z->state->wbits = (uInt)w;
  
!   /* create inflate_blocks state */
!   if ((z->state->blocks =
!       inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w))
!       == Z_NULL)
!   {
!     inflateEnd(z);
!     return Z_MEM_ERROR;
!   }
!   Tracev((stderr, "inflate: allocated\n"));
  
!   /* reset state */
!   inflateReset(z);
!   return Z_OK;
  }
  
  
! int ZEXPORT inflateInit_(z, version, stream_size)
! z_streamp z;
! const char *version;
! int stream_size;
  {
!   return inflateInit2_(z, DEF_WBITS, version, stream_size);
  }
  
  
! #define NEEDBYTE {if(z->avail_in==0)return r;r=f;}
! #define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
  
! int ZEXPORT inflate(z, f)
! z_streamp z;
! int f;
! {
!   int r;
!   uInt b;
  
!   if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL)
!     return Z_STREAM_ERROR;
!   f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
!   r = Z_BUF_ERROR;
!   while (1) switch (z->state->mode)
!   {
!     case METHOD:
!       NEEDBYTE
!       if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED)
!       {
!         z->state->mode = BAD;
!         z->msg = (char*)"unknown compression method";
!         z->state->sub.marker = 5;       /* can't try inflateSync */
!         break;
!       }
!       if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
!       {
!         z->state->mode = BAD;
!         z->msg = (char*)"invalid window size";
!         z->state->sub.marker = 5;       /* can't try inflateSync */
!         break;
!       }
!       z->state->mode = FLAG;
!     case FLAG:
!       NEEDBYTE
!       b = NEXTBYTE;
!       if (((z->state->sub.method << 8) + b) % 31)
!       {
!         z->state->mode = BAD;
!         z->msg = (char*)"incorrect header check";
!         z->state->sub.marker = 5;       /* can't try inflateSync */
!         break;
!       }
!       Tracev((stderr, "inflate: zlib header ok\n"));
!       if (!(b & PRESET_DICT))
!       {
!         z->state->mode = BLOCKS;
!         break;
!       }
!       z->state->mode = DICT4;
!     case DICT4:
!       NEEDBYTE
!       z->state->sub.check.need = (uLong)NEXTBYTE << 24;
!       z->state->mode = DICT3;
!     case DICT3:
!       NEEDBYTE
!       z->state->sub.check.need += (uLong)NEXTBYTE << 16;
!       z->state->mode = DICT2;
!     case DICT2:
!       NEEDBYTE
!       z->state->sub.check.need += (uLong)NEXTBYTE << 8;
!       z->state->mode = DICT1;
!     case DICT1:
!       NEEDBYTE
!       z->state->sub.check.need += (uLong)NEXTBYTE;
!       z->adler = z->state->sub.check.need;
!       z->state->mode = DICT0;
!       return Z_NEED_DICT;
!     case DICT0:
!       z->state->mode = BAD;
!       z->msg = (char*)"need dictionary";
!       z->state->sub.marker = 0;       /* can try inflateSync */
!       return Z_STREAM_ERROR;
!     case BLOCKS:
!       r = inflate_blocks(z->state->blocks, z, r);
!       if (r == Z_DATA_ERROR)
!       {
!         z->state->mode = BAD;
!         z->state->sub.marker = 0;       /* can try inflateSync */
!         break;
!       }
!       if (r == Z_OK)
!         r = f;
!       if (r != Z_STREAM_END)
!         return r;
!       r = f;
!       inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
!       if (z->state->nowrap)
!       {
!         z->state->mode = DONE;
!         break;
!       }
!       z->state->mode = CHECK4;
!     case CHECK4:
!       NEEDBYTE
!       z->state->sub.check.need = (uLong)NEXTBYTE << 24;
!       z->state->mode = CHECK3;
!     case CHECK3:
!       NEEDBYTE
!       z->state->sub.check.need += (uLong)NEXTBYTE << 16;
!       z->state->mode = CHECK2;
!     case CHECK2:
!       NEEDBYTE
!       z->state->sub.check.need += (uLong)NEXTBYTE << 8;
!       z->state->mode = CHECK1;
!     case CHECK1:
!       NEEDBYTE
!       z->state->sub.check.need += (uLong)NEXTBYTE;
  
!       if (z->state->sub.check.was != z->state->sub.check.need)
!       {
!         z->state->mode = BAD;
!         z->msg = (char*)"incorrect data check";
!         z->state->sub.marker = 5;       /* can't try inflateSync */
          break;
!       }
!       Tracev((stderr, "inflate: zlib check ok\n"));
!       z->state->mode = DONE;
!     case DONE:
!       return Z_STREAM_END;
!     case BAD:
!       return Z_DATA_ERROR;
!     default:
!       return Z_STREAM_ERROR;
!   }
! #ifdef NEED_DUMMY_RETURN
!   return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
  #endif
  }
  
  
! int ZEXPORT inflateSetDictionary(z, dictionary, dictLength)
! z_streamp z;
  const Bytef *dictionary;
! uInt  dictLength;
  {
!   uInt length = dictLength;
  
!   if (z == Z_NULL || z->state == Z_NULL || z->state->mode != DICT0)
!     return Z_STREAM_ERROR;
  
!   if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR;
!   z->adler = 1L;
  
!   if (length >= ((uInt)1<<z->state->wbits))
!   {
!     length = (1<<z->state->wbits)-1;
!     dictionary += dictLength - length;
!   }
!   inflate_set_dictionary(z->state->blocks, dictionary, length);
!   z->state->mode = BLOCKS;
!   return Z_OK;
  }
  
  
! int ZEXPORT inflateSync(z)
! z_streamp z;
  {
!   uInt n;       /* number of bytes to look at */
!   Bytef *p;     /* pointer to bytes */
!   uInt m;       /* number of marker bytes found in a row */
!   uLong r, w;   /* temporaries to save total_in and total_out */
  
!   /* set up */
!   if (z == Z_NULL || z->state == Z_NULL)
!     return Z_STREAM_ERROR;
!   if (z->state->mode != BAD)
!   {
!     z->state->mode = BAD;
!     z->state->sub.marker = 0;
!   }
!   if ((n = z->avail_in) == 0)
!     return Z_BUF_ERROR;
!   p = z->next_in;
!   m = z->state->sub.marker;
  
!   /* search */
!   while (n && m < 4)
!   {
!     static const Byte mark[4] = {0, 0, 0xff, 0xff};
!     if (*p == mark[m])
!       m++;
!     else if (*p)
!       m = 0;
!     else
!       m = 4 - m;
!     p++, n--;
!   }
  
!   /* restore */
!   z->total_in += p - z->next_in;
!   z->next_in = p;
!   z->avail_in = n;
!   z->state->sub.marker = m;
  
!   /* return no joy or set up to restart on a new block */
!   if (m != 4)
!     return Z_DATA_ERROR;
!   r = z->total_in;  w = z->total_out;
!   inflateReset(z);
!   z->total_in = r;  z->total_out = w;
!   z->state->mode = BLOCKS;
!   return Z_OK;
  }
  
! 
! /* Returns true if inflate is currently at the end of a block generated
!  * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
!  * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH
!  * but removes the length bytes of the resulting empty stored block. When
!  * decompressing, PPP checks that at the end of input packet, inflate is
!  * waiting for these length bytes.
   */
! int ZEXPORT inflateSyncPoint(z)
! z_streamp z;
  {
!   if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL)
!     return Z_STREAM_ERROR;
!   return inflate_blocks_sync_point(z->state->blocks);
  }
--- 1,1270 ----
! /* inflate.c -- zlib decompression
!  * Copyright (C) 1995-2003 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
! /*
!  * Change history:
!  *
!  * 1.2.beta0    24 Nov 2002
!  * - First version -- complete rewrite of inflate to simplify code, avoid
!  *   creation of window when not needed, minimize use of window when it is
!  *   needed, make inffast.c even faster, implement gzip decoding, and to
!  *   improve code readability and style over the previous zlib inflate code
!  *
!  * 1.2.beta1    25 Nov 2002
!  * - Use pointers for available input and output checking in inffast.c
!  * - Remove input and output counters in inffast.c
!  * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
!  * - Remove unnecessary second byte pull from length extra in inffast.c
!  * - Unroll direct copy to three copies per loop in inffast.c
!  *
!  * 1.2.beta2    4 Dec 2002
!  * - Change external routine names to reduce potential conflicts
!  * - Correct filename to inffixed.h for fixed tables in inflate.c
!  * - Make hbuf[] unsigned char to match parameter type in inflate.c
!  * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
!  *   to avoid negation problem on Alphas (64 bit) in inflate.c
!  *
!  * 1.2.beta3    22 Dec 2002
!  * - Add comments on state->bits assertion in inffast.c
!  * - Add comments on op field in inftrees.h
!  * - Fix bug in reuse of allocated window after inflateReset()
!  * - Remove bit fields--back to byte structure for speed
!  * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
!  * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
!  * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
!  * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
!  * - Use local copies of stream next and avail values, as well as local bit
!  *   buffer and bit count in inflate()--for speed when inflate_fast() not used
!  *
!  * 1.2.beta4    1 Jan 2003
!  * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
!  * - Move a comment on output buffer sizes from inffast.c to inflate.c
!  * - Add comments in inffast.c to introduce the inflate_fast() routine
!  * - Rearrange window copies in inflate_fast() for speed and simplification
!  * - Unroll last copy for window match in inflate_fast()
!  * - Use local copies of window variables in inflate_fast() for speed
!  * - Pull out common write == 0 case for speed in inflate_fast()
!  * - Make op and len in inflate_fast() unsigned for consistency
!  * - Add FAR to lcode and dcode declarations in inflate_fast()
!  * - Simplified bad distance check in inflate_fast()
!  * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
!  *   source file infback.c to provide a call-back interface to inflate for
!  *   programs like gzip and unzip -- uses window as output buffer to avoid
!  *   window copying
!  *
!  * 1.2.beta5    1 Jan 2003
!  * - Improved inflateBack() interface to allow the caller to provide initial
!  *   input in strm.
!  * - Fixed stored blocks bug in inflateBack()
!  *
!  * 1.2.beta6    4 Jan 2003
!  * - Added comments in inffast.c on effectiveness of POSTINC
!  * - Typecasting all around to reduce compiler warnings
!  * - Changed loops from while (1) or do {} while (1) to for (;;), again to
!  *   make compilers happy
!  * - Changed type of window in inflateBackInit() to unsigned char *
!  *
!  * 1.2.beta7    27 Jan 2003
!  * - Changed many types to unsigned or unsigned short to avoid warnings
!  * - Added inflateCopy() function
!  *
!  * 1.2.0        9 Mar 2003
!  * - Changed inflateBack() interface to provide separate opaque descriptors
!  *   for the in() and out() functions
!  * - Changed inflateBack() argument and in_func typedef to swap the length
!  *   and buffer address return values for the input function
!  * - Check next_in and next_out for Z_NULL on entry to inflate()
!  *
!  * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
!  */
  
! #include "zutil.h"
! #include "inftrees.h"
! #include "inflate.h"
! #include "inffast.h"
  
! #ifdef MAKEFIXED
! #  ifndef BUILDFIXED
! #    define BUILDFIXED
! #  endif
! #endif
  
! /* function prototypes */
! local void fixedtables OF((struct inflate_state FAR *state));
! local int updatewindow OF((z_streamp strm, unsigned out));
! #ifdef BUILDFIXED
!    void makefixed OF((void));
! #endif
! local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
!                               unsigned len));
  
! int ZEXPORT inflateReset(strm)
! z_streamp strm;
! {
!     struct inflate_state FAR *state;
  
!     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
!     state = (struct inflate_state FAR *)strm->state;
!     strm->total_in = strm->total_out = state->total = 0;
!     strm->msg = Z_NULL;
!     state->mode = HEAD;
!     state->last = 0;
!     state->havedict = 0;
!     state->wsize = 0;
!     state->whave = 0;
!     state->hold = 0;
!     state->bits = 0;
!     state->lencode = state->distcode = state->next = state->codes;
!     Tracev((stderr, "inflate: reset\n"));
!     return Z_OK;
! }
  
! int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
! z_streamp strm;
! int windowBits;
! const char *version;
! int stream_size;
! {
!     struct inflate_state FAR *state;
  
+     if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+         stream_size != (int)(sizeof(z_stream)))
+         return Z_VERSION_ERROR;
+     if (strm == Z_NULL) return Z_STREAM_ERROR;
+     strm->msg = Z_NULL;                 /* in case we return an error */
+     if (strm->zalloc == (alloc_func)0) {
+         strm->zalloc = zcalloc;
+         strm->opaque = (voidpf)0;
+     }
+     if (strm->zfree == (free_func)0) strm->zfree = zcfree;
+     state = (struct inflate_state FAR *)
+             ZALLOC(strm, 1, sizeof(struct inflate_state));
+     if (state == Z_NULL) return Z_MEM_ERROR;
+     Tracev((stderr, "inflate: allocated\n"));
+     strm->state = (voidpf)state;
+     if (windowBits < 0) {
+         state->wrap = 0;
+         windowBits = -windowBits;
+     }
+     else {
+         state->wrap = (windowBits >> 4) + 1;
+ #ifdef GUNZIP
+         if (windowBits < 48) windowBits &= 15;
+ #endif
+     }
+     if (windowBits < 8 || windowBits > 15) {
+         ZFREE(strm, state);
+         strm->state = Z_NULL;
+         return Z_STREAM_ERROR;
+     }
+     state->wbits = (unsigned)windowBits;
+     state->window = Z_NULL;
+     return inflateReset(strm);
+ }
  
! int ZEXPORT inflateInit_(strm, version, stream_size)
! z_streamp strm;
! const char *version;
! int stream_size;
  {
!     return inflateInit2_(strm, DEF_WBITS, version, stream_size);
  }
  
! /*
!    Return state with length and distance decoding tables and index sizes set to
!    fixed code decoding.  Normally this returns fixed tables from inffixed.h.
!    If BUILDFIXED is defined, then instead this routine builds the tables the
!    first time it's called, and returns those tables the first time and
!    thereafter.  This reduces the size of the code by about 2K bytes, in
!    exchange for a little execution time.  However, BUILDFIXED should not be
!    used for threaded applications, since the rewriting of the tables and virgin
!    may not be thread-safe.
!  */
! local void fixedtables(state)
! struct inflate_state FAR *state;
  {
! #ifdef BUILDFIXED
!     static int virgin = 1;
!     static code *lenfix, *distfix;
!     static code fixed[544];
! 
!     /* build fixed huffman tables if first call (may not be thread safe) */
!     if (virgin) {
!         unsigned sym, bits;
!         static code *next;
! 
!         /* literal/length table */
!         sym = 0;
!         while (sym < 144) state->lens[sym++] = 8;
!         while (sym < 256) state->lens[sym++] = 9;
!         while (sym < 280) state->lens[sym++] = 7;
!         while (sym < 288) state->lens[sym++] = 8;
!         next = fixed;
!         lenfix = next;
!         bits = 9;
!         inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
! 
!         /* distance table */
!         sym = 0;
!         while (sym < 32) state->lens[sym++] = 5;
!         distfix = next;
!         bits = 5;
!         inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
! 
!         /* do this just once */
!         virgin = 0;
!     }
! #else /* !BUILDFIXED */
! #   include "inffixed.h"
! #endif /* BUILDFIXED */
!     state->lencode = lenfix;
!     state->lenbits = 9;
!     state->distcode = distfix;
!     state->distbits = 5;
  }
  
+ #ifdef MAKEFIXED
+ #include <stdio.h>
  
! /*
!    Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also
!    defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes
!    those tables to stdout, which would be piped to inffixed.h.  A small program
!    can simply call makefixed to do this:
  
!     void makefixed(void);
  
!     int main(void)
!     {
!         makefixed();
!         return 0;
!     }
  
!    Then that can be linked with zlib built with MAKEFIXED defined and run:
  
!     a.out > inffixed.h
!  */
! void makefixed()
! {
!     unsigned low, size;
!     struct inflate_state state;
  
!     fixedtables(&state);
!     puts("    /* inffixed.h -- table for decoding fixed codes");
!     puts("     * Generated automatically by makefixed().");
!     puts("     */");
!     puts("");
!     puts("    /* WARNING: this file should *not* be used by applications.");
!     puts("       It is part of the implementation of this library and is");
!     puts("       subject to change. Applications should only use zlib.h.");
!     puts("     */");
!     puts("");
!     size = 1U << 9;
!     printf("    static const code lenfix[%u] = {", size);
!     low = 0;
!     for (;;) {
!         if ((low % 7) == 0) printf("\n        ");
!         printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits,
!                state.lencode[low].val);
!         if (++low == size) break;
!         putchar(',');
!     }
!     puts("\n    };");
!     size = 1U << 5;
!     printf("\n    static const code distfix[%u] = {", size);
!     low = 0;
!     for (;;) {
!         if ((low % 6) == 0) printf("\n        ");
!         printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
!                state.distcode[low].val);
!         if (++low == size) break;
!         putchar(',');
!     }
!     puts("\n    };");
  }
+ #endif /* MAKEFIXED */
  
+ /*
+    Update the window with the last wsize (normally 32K) bytes written before
+    returning.  If window does not exist yet, create it.  This is only called
+    when a window is already in use, or when output has been written during this
+    inflate call, but the end of the deflate stream has not been reached yet.
+    It is also called to create a window for dictionary data when a dictionary
+    is loaded.
  
!    Providing output buffers larger than 32K to inflate() should provide a speed
!    advantage, since only the last 32K of output is copied to the sliding window
!    upon return from inflate(), and since all distances after the first 32K of
!    output will fall in the output data, making match copies simpler and faster.
!    The advantage may be dependent on the size of the processor's data caches.
!  */
! local int updatewindow(strm, out)
! z_streamp strm;
! unsigned out;
  {
!     struct inflate_state FAR *state;
!     unsigned copy, dist;
! 
!     state = (struct inflate_state FAR *)strm->state;
! 
!     /* if it hasn't been done already, allocate space for the window */
!     if (state->window == Z_NULL) {
!         state->window = (unsigned char FAR *)
!                         ZALLOC(strm, 1U << state->wbits,
!                                sizeof(unsigned char));
!         if (state->window == Z_NULL) return 1;
!     }
! 
!     /* if window not in use yet, initialize */
!     if (state->wsize == 0) {
!         state->wsize = 1U << state->wbits;
!         state->write = 0;
!         state->whave = 0;
!     }
! 
!     /* copy state->wsize or less output bytes into the circular window */
!     copy = out - strm->avail_out;
!     if (copy >= state->wsize) {
!         zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
!         state->write = 0;
!         state->whave = state->wsize;
!     }
!     else {
!         dist = state->wsize - state->write;
!         if (dist > copy) dist = copy;
!         zmemcpy(state->window + state->write, strm->next_out - copy, dist);
!         copy -= dist;
!         if (copy) {
!             zmemcpy(state->window, strm->next_out - copy, copy);
!             state->write = copy;
!             state->whave = state->wsize;
!         }
!         else {
!             state->write += dist;
!             if (state->write == state->wsize) state->write = 0;
!             if (state->whave < state->wsize) state->whave += dist;
!         }
!     }
!     return 0;
  }
  
+ /* Macros for inflate(): */
  
! /* check function to use adler32() for zlib or crc32() for gzip */
! #ifdef GUNZIP
! #  define UPDATE(check, buf, len) \
!     (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
! #else
! #  define UPDATE(check, buf, len) adler32(check, buf, len)
! #endif
  
! /* check macros for header crc */
! #ifdef GUNZIP
! #  define CRC2(check, word) \
!     do { \
!         hbuf[0] = (unsigned char)(word); \
!         hbuf[1] = (unsigned char)((word) >> 8); \
!         check = crc32(check, hbuf, 2); \
!     } while (0)
  
! #  define CRC4(check, word) \
!     do { \
!         hbuf[0] = (unsigned char)(word); \
!         hbuf[1] = (unsigned char)((word) >> 8); \
!         hbuf[2] = (unsigned char)((word) >> 16); \
!         hbuf[3] = (unsigned char)((word) >> 24); \
!         check = crc32(check, hbuf, 4); \
!     } while (0)
! #endif
  
! /* Load registers with state in inflate() for speed */
! #define LOAD() \
!     do { \
!         put = strm->next_out; \
!         left = strm->avail_out; \
!         next = strm->next_in; \
!         have = strm->avail_in; \
!         hold = state->hold; \
!         bits = state->bits; \
!     } while (0)
! 
! /* Restore state from registers in inflate() */
! #define RESTORE() \
!     do { \
!         strm->next_out = put; \
!         strm->avail_out = left; \
!         strm->next_in = next; \
!         strm->avail_in = have; \
!         state->hold = hold; \
!         state->bits = bits; \
!     } while (0)
! 
! /* Clear the input bit accumulator */
! #define INITBITS() \
!     do { \
!         hold = 0; \
!         bits = 0; \
!     } while (0)
! 
! /* Get a byte of input into the bit accumulator, or return from inflate()
!    if there is no input available. */
! #define PULLBYTE() \
!     do { \
!         if (have == 0) goto inf_leave; \
!         have--; \
!         hold += (unsigned long)(*next++) << bits; \
!         bits += 8; \
!     } while (0)
! 
! /* Assure that there are at least n bits in the bit accumulator.  If there is
!    not enough available input to do that, then return from inflate(). */
! #define NEEDBITS(n) \
!     do { \
!         while (bits < (unsigned)(n)) \
!             PULLBYTE(); \
!     } while (0)
! 
! /* Return the low n bits of the bit accumulator (n < 16) */
! #define BITS(n) \
!     ((unsigned)hold & ((1U << (n)) - 1))
! 
! /* Remove n bits from the bit accumulator */
! #define DROPBITS(n) \
!     do { \
!         hold >>= (n); \
!         bits -= (unsigned)(n); \
!     } while (0)
! 
! /* Remove zero to seven bits as needed to go to a byte boundary */
! #define BYTEBITS() \
!     do { \
!         hold >>= bits & 7; \
!         bits -= bits & 7; \
!     } while (0)
! 
! /* Reverse the bytes in a 32-bit value */
! #define REVERSE(q) \
!     ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
!      (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
! 
! /*
!    inflate() uses a state machine to process as much input data and generate as
!    much output data as possible before returning.  The state machine is
!    structured roughly as follows:
! 
!     for (;;) switch (state) {
!     ...
!     case STATEn:
!         if (not enough input data or output space to make progress)
!             return;
!         ... make progress ...
!         state = STATEm;
          break;
!     ...
!     }
! 
!    so when inflate() is called again, the same case is attempted again, and
!    if the appropriate resources are provided, the machine proceeds to the
!    next state.  The NEEDBITS() macro is usually the way the state evaluates
!    whether it can proceed or should return.  NEEDBITS() does the return if
!    the requested bits are not available.  The typical use of the BITS macros
!    is:
! 
!         NEEDBITS(n);
!         ... do something with BITS(n) ...
!         DROPBITS(n);
! 
!    where NEEDBITS(n) either returns from inflate() if there isn't enough
!    input left to load n bits into the accumulator, or it continues.  BITS(n)
!    gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
!    the low n bits off the accumulator.  INITBITS() clears the accumulator
!    and sets the number of available bits to zero.  BYTEBITS() discards just
!    enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
!    and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
! 
!    NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
!    if there is no input available.  The decoding of variable length codes uses
!    PULLBYTE() directly in order to pull just enough bytes to decode the next
!    code, and no more.
! 
!    Some states loop until they get enough input, making sure that enough
!    state information is maintained to continue the loop where it left off
!    if NEEDBITS() returns in the loop.  For example, want, need, and keep
!    would all have to actually be part of the saved state in case NEEDBITS()
!    returns:
! 
!     case STATEw:
!         while (want < need) {
!             NEEDBITS(n);
!             keep[want++] = BITS(n);
!             DROPBITS(n);
!         }
!         state = STATEx;
!     case STATEx:
! 
!    As shown above, if the next state is also the next case, then the break
!    is omitted.
! 
!    A state may also return if there is not enough output space available to
!    complete that state.  Those states are copying stored data, writing a
!    literal byte, and copying a matching string.
! 
!    When returning, a "goto inf_leave" is used to update the total counters,
!    update the check value, and determine whether any progress has been made
!    during that inflate() call in order to return the proper return code.
!    Progress is defined as a change in either strm->avail_in or strm->avail_out.
!    When there is a window, goto inf_leave will update the window with the last
!    output written.  If a goto inf_leave occurs in the middle of decompression
!    and there is no window currently, goto inf_leave will create one and copy
!    output to the window for the next call of inflate().
! 
!    In this implementation, the flush parameter of inflate() only affects the
!    return code (per zlib.h).  inflate() always writes as much as possible to
!    strm->next_out, given the space available and the provided input--the effect
!    documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
!    the allocation of and copying into a sliding window until necessary, which
!    provides the effect documented in zlib.h for Z_FINISH when the entire input
!    stream available.  So the only thing the flush parameter actually does is:
!    when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
!    will return Z_BUF_ERROR if it has not reached the end of the stream.
!  */
! 
! int ZEXPORT inflate(strm, flush)
! z_streamp strm;
! int flush;
! {
!     struct inflate_state FAR *state;
!     unsigned char FAR *next;    /* next input */
!     unsigned char FAR *put;     /* next output */
!     unsigned have, left;        /* available input and output */
!     unsigned long hold;         /* bit buffer */
!     unsigned bits;              /* bits in bit buffer */
!     unsigned in, out;           /* save starting available input and output */
!     unsigned copy;              /* number of stored or match bytes to copy */
!     unsigned char FAR *from;    /* where to copy match bytes from */
!     code this;                  /* current decoding table entry */
!     code last;                  /* parent table entry */
!     unsigned len;               /* length to copy for repeats, bits to drop */
!     int ret;                    /* return code */
! #ifdef GUNZIP
!     unsigned char hbuf[4];      /* buffer for gzip header crc calculation */
! #endif
!     static const unsigned short order[19] = /* permutation of code lengths */
!         {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
! 
!     if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
!         (strm->next_in == Z_NULL && strm->avail_in != 0))
!         return Z_STREAM_ERROR;
! 
!     state = (struct inflate_state FAR *)strm->state;
!     if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
!     LOAD();
!     in = have;
!     out = left;
!     ret = Z_OK;
!     for (;;)
!         switch (state->mode) {
!         case HEAD:
!             if (state->wrap == 0) {
!                 state->mode = TYPEDO;
!                 break;
!             }
!             NEEDBITS(16);
! #ifdef GUNZIP
!             if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
!                 state->check = crc32(0L, Z_NULL, 0);
!                 CRC2(state->check, hold);
!                 INITBITS();
!                 state->mode = FLAGS;
!                 break;
!             }
!             state->flags = 0;           /* expect zlib header */
!             if (!(state->wrap & 1) ||   /* check if zlib header allowed */
! #else
!             if (
! #endif
!                 ((BITS(8) << 8) + (hold >> 8)) % 31) {
!                 strm->msg = (char *)"incorrect header check";
!                 state->mode = BAD;
!                 break;
!             }
!             if (BITS(4) != Z_DEFLATED) {
!                 strm->msg = (char *)"unknown compression method";
!                 state->mode = BAD;
!                 break;
!             }
!             DROPBITS(4);
!             if (BITS(4) + 8 > state->wbits) {
!                 strm->msg = (char *)"invalid window size";
!                 state->mode = BAD;
!                 break;
!             }
!             Tracev((stderr, "inflate:   zlib header ok\n"));
!             strm->adler = state->check = adler32(0L, Z_NULL, 0);
!             state->mode = hold & 0x200 ? DICTID : TYPE;
!             INITBITS();
!             break;
! #ifdef GUNZIP
!         case FLAGS:
!             NEEDBITS(16);
!             state->flags = (int)(hold);
!             if ((state->flags & 0xff) != Z_DEFLATED) {
!                 strm->msg = (char *)"unknown compression method";
!                 state->mode = BAD;
!                 break;
!             }
!             if (state->flags & 0xe000) {
!                 strm->msg = (char *)"unknown header flags set";
!                 state->mode = BAD;
!                 break;
!             }
!             if (state->flags & 0x0200) CRC2(state->check, hold);
!             INITBITS();
!             state->mode = TIME;
!         case TIME:
!             NEEDBITS(32);
!             if (state->flags & 0x0200) CRC4(state->check, hold);
!             INITBITS();
!             state->mode = OS;
!         case OS:
!             NEEDBITS(16);
!             if (state->flags & 0x0200) CRC2(state->check, hold);
!             INITBITS();
!             state->mode = EXLEN;
!         case EXLEN:
!             if (state->flags & 0x0400) {
!                 NEEDBITS(16);
!                 state->length = (unsigned)(hold);
!                 if (state->flags & 0x0200) CRC2(state->check, hold);
!                 INITBITS();
!             }
!             state->mode = EXTRA;
!         case EXTRA:
!             if (state->flags & 0x0400) {
!                 copy = state->length;
!                 if (copy > have) copy = have;
!                 if (copy) {
!                     if (state->flags & 0x0200)
!                         state->check = crc32(state->check, next, copy);
!                     have -= copy;
!                     next += copy;
!                     state->length -= copy;
!                 }
!                 if (state->length) goto inf_leave;
!             }
!             state->mode = NAME;
!         case NAME:
!             if (state->flags & 0x0800) {
!                 if (have == 0) goto inf_leave;
!                 copy = 0;
!                 do {
!                     len = (unsigned)(next[copy++]);
!                 } while (len && copy < have);
!                 if (state->flags & 0x02000)
!                     state->check = crc32(state->check, next, copy);
!                 have -= copy;
!                 next += copy;
!                 if (len) goto inf_leave;
!             }
!             state->mode = COMMENT;
!         case COMMENT:
!             if (state->flags & 0x1000) {
!                 if (have == 0) goto inf_leave;
!                 copy = 0;
!                 do {
!                     len = (unsigned)(next[copy++]);
!                 } while (len && copy < have);
!                 if (state->flags & 0x02000)
!                     state->check = crc32(state->check, next, copy);
!                 have -= copy;
!                 next += copy;
!                 if (len) goto inf_leave;
!             }
!             state->mode = HCRC;
!         case HCRC:
!             if (state->flags & 0x0200) {
!                 NEEDBITS(16);
!                 if (hold != (state->check & 0xffff)) {
!                     strm->msg = (char *)"header crc mismatch";
!                     state->mode = BAD;
!                     break;
!                 }
!                 INITBITS();
!             }
!             strm->adler = state->check = crc32(0L, Z_NULL, 0);
!             state->mode = TYPE;
!             break;
! #endif
!         case DICTID:
!             NEEDBITS(32);
!             strm->adler = state->check = REVERSE(hold);
!             INITBITS();
!             state->mode = DICT;
!         case DICT:
!             if (state->havedict == 0) {
!                 RESTORE();
!                 return Z_NEED_DICT;
!             }
!             strm->adler = state->check = adler32(0L, Z_NULL, 0);
!             state->mode = TYPE;
!         case TYPE:
!             if (flush == Z_BLOCK) goto inf_leave;
!         case TYPEDO:
!             if (state->last) {
!                 BYTEBITS();
!                 state->mode = CHECK;
!                 break;
!             }
!             NEEDBITS(3);
!             state->last = BITS(1);
!             DROPBITS(1);
!             switch (BITS(2)) {
!             case 0:                             /* stored block */
!                 Tracev((stderr, "inflate:     stored block%s\n",
!                         state->last ? " (last)" : ""));
!                 state->mode = STORED;
!                 break;
!             case 1:                             /* fixed block */
!                 fixedtables(state);
!                 Tracev((stderr, "inflate:     fixed codes block%s\n",
!                         state->last ? " (last)" : ""));
!                 state->mode = LEN;              /* decode codes */
!                 break;
!             case 2:                             /* dynamic block */
!                 Tracev((stderr, "inflate:     dynamic codes block%s\n",
!                         state->last ? " (last)" : ""));
!                 state->mode = TABLE;
!                 break;
!             case 3:
!                 strm->msg = (char *)"invalid block type";
!                 state->mode = BAD;
!             }
!             DROPBITS(2);
!             break;
!         case STORED:
!             BYTEBITS();                         /* go to byte boundary */
!             NEEDBITS(32);
!             if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
!                 strm->msg = (char *)"invalid stored block lengths";
!                 state->mode = BAD;
!                 break;
!             }
!             state->length = (unsigned)hold & 0xffff;
!             Tracev((stderr, "inflate:       stored length %u\n",
!                     state->length));
!             INITBITS();
!             state->mode = COPY;
!         case COPY:
!             copy = state->length;
!             if (copy) {
!                 if (copy > have) copy = have;
!                 if (copy > left) copy = left;
!                 if (copy == 0) goto inf_leave;
!                 zmemcpy(put, next, copy);
!                 have -= copy;
!                 next += copy;
!                 left -= copy;
!                 put += copy;
!                 state->length -= copy;
!                 break;
!             }
!             Tracev((stderr, "inflate:       stored end\n"));
!             state->mode = TYPE;
!             break;
!         case TABLE:
!             NEEDBITS(14);
!             state->nlen = BITS(5) + 257;
!             DROPBITS(5);
!             state->ndist = BITS(5) + 1;
!             DROPBITS(5);
!             state->ncode = BITS(4) + 4;
!             DROPBITS(4);
! #ifndef PKZIP_BUG_WORKAROUND
!             if (state->nlen > 286 || state->ndist > 30) {
!                 strm->msg = (char *)"too many length or distance symbols";
!                 state->mode = BAD;
!                 break;
!             }
  #endif
+             Tracev((stderr, "inflate:       table sizes ok\n"));
+             state->have = 0;
+             state->mode = LENLENS;
+         case LENLENS:
+             while (state->have < state->ncode) {
+                 NEEDBITS(3);
+                 state->lens[order[state->have++]] = (unsigned short)BITS(3);
+                 DROPBITS(3);
+             }
+             while (state->have < 19)
+                 state->lens[order[state->have++]] = 0;
+             state->next = state->codes;
+             state->lencode = (code const FAR *)(state->next);
+             state->lenbits = 7;
+             ret = inflate_table(CODES, state->lens, 19, &(state->next),
+                                 &(state->lenbits), state->work);
+             if (ret) {
+                 strm->msg = (char *)"invalid code lengths set";
+                 state->mode = BAD;
+                 break;
+             }
+             Tracev((stderr, "inflate:       code lengths ok\n"));
+             state->have = 0;
+             state->mode = CODELENS;
+         case CODELENS:
+             while (state->have < state->nlen + state->ndist) {
+                 for (;;) {
+                     this = state->lencode[BITS(state->lenbits)];
+                     if ((unsigned)(this.bits) <= bits) break;
+                     PULLBYTE();
+                 }
+                 if (this.val < 16) {
+                     NEEDBITS(this.bits);
+                     DROPBITS(this.bits);
+                     state->lens[state->have++] = this.val;
+                 }
+                 else {
+                     if (this.val == 16) {
+                         NEEDBITS(this.bits + 2);
+                         DROPBITS(this.bits);
+                         if (state->have == 0) {
+                             strm->msg = (char *)"invalid bit length repeat";
+                             state->mode = BAD;
+                             break;
+                         }
+                         len = state->lens[state->have - 1];
+                         copy = 3 + BITS(2);
+                         DROPBITS(2);
+                     }
+                     else if (this.val == 17) {
+                         NEEDBITS(this.bits + 3);
+                         DROPBITS(this.bits);
+                         len = 0;
+                         copy = 3 + BITS(3);
+                         DROPBITS(3);
+                     }
+                     else {
+                         NEEDBITS(this.bits + 7);
+                         DROPBITS(this.bits);
+                         len = 0;
+                         copy = 11 + BITS(7);
+                         DROPBITS(7);
+                     }
+                     if (state->have + copy > state->nlen + state->ndist) {
+                         strm->msg = (char *)"invalid bit length repeat";
+                         state->mode = BAD;
+                         break;
+                     }
+                     while (copy--)
+                         state->lens[state->have++] = (unsigned short)len;
+                 }
+             }
+ 
+             /* build code tables */
+             state->next = state->codes;
+             state->lencode = (code const FAR *)(state->next);
+             state->lenbits = 9;
+             ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+                                 &(state->lenbits), state->work);
+             if (ret) {
+                 strm->msg = (char *)"invalid literal/lengths set";
+                 state->mode = BAD;
+                 break;
+             }
+             state->distcode = (code const FAR *)(state->next);
+             state->distbits = 6;
+             ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+                             &(state->next), &(state->distbits), state->work);
+             if (ret) {
+                 strm->msg = (char *)"invalid distances set";
+                 state->mode = BAD;
+                 break;
+             }
+             Tracev((stderr, "inflate:       codes ok\n"));
+             state->mode = LEN;
+         case LEN:
+             if (have >= 6 && left >= 258) {
+                 RESTORE();
+                 inflate_fast(strm, out);
+                 LOAD();
+                 break;
+             }
+             for (;;) {
+                 this = state->lencode[BITS(state->lenbits)];
+                 if ((unsigned)(this.bits) <= bits) break;
+                 PULLBYTE();
+             }
+             if (this.op && (this.op & 0xf0) == 0) {
+                 last = this;
+                 for (;;) {
+                     this = state->lencode[last.val +
+                             (BITS(last.bits + last.op) >> last.bits)];
+                     if ((unsigned)(last.bits + this.bits) <= bits) break;
+                     PULLBYTE();
+                 }
+                 DROPBITS(last.bits);
+             }
+             DROPBITS(this.bits);
+             state->length = (unsigned)this.val;
+             if ((int)(this.op) == 0) {
+                 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
+                         "inflate:         literal '%c'\n" :
+                         "inflate:         literal 0x%02x\n", this.val));
+                 state->mode = LIT;
+                 break;
+             }
+             if (this.op & 32) {
+                 Tracevv((stderr, "inflate:         end of block\n"));
+                 state->mode = TYPE;
+                 break;
+             }
+             if (this.op & 64) {
+                 strm->msg = (char *)"invalid literal/length code";
+                 state->mode = BAD;
+                 break;
+             }
+             state->extra = (unsigned)(this.op) & 15;
+             state->mode = LENEXT;
+         case LENEXT:
+             if (state->extra) {
+                 NEEDBITS(state->extra);
+                 state->length += BITS(state->extra);
+                 DROPBITS(state->extra);
+             }
+             Tracevv((stderr, "inflate:         length %u\n", state->length));
+             state->mode = DIST;
+         case DIST:
+             for (;;) {
+                 this = state->distcode[BITS(state->distbits)];
+                 if ((unsigned)(this.bits) <= bits) break;
+                 PULLBYTE();
+             }
+             if ((this.op & 0xf0) == 0) {
+                 last = this;
+                 for (;;) {
+                     this = state->distcode[last.val +
+                             (BITS(last.bits + last.op) >> last.bits)];
+                     if ((unsigned)(last.bits + this.bits) <= bits) break;
+                     PULLBYTE();
+                 }
+                 DROPBITS(last.bits);
+             }
+             DROPBITS(this.bits);
+             if (this.op & 64) {
+                 strm->msg = (char *)"invalid distance code";
+                 state->mode = BAD;
+                 break;
+             }
+             state->offset = (unsigned)this.val;
+             state->extra = (unsigned)(this.op) & 15;
+             state->mode = DISTEXT;
+         case DISTEXT:
+             if (state->extra) {
+                 NEEDBITS(state->extra);
+                 state->offset += BITS(state->extra);
+                 DROPBITS(state->extra);
+             }
+             if (state->offset > state->whave + out - left) {
+                 strm->msg = (char *)"invalid distance too far back";
+                 state->mode = BAD;
+                 break;
+             }
+             Tracevv((stderr, "inflate:         distance %u\n", state->offset));
+             state->mode = MATCH;
+         case MATCH:
+             if (left == 0) goto inf_leave;
+             copy = out - left;
+             if (state->offset > copy) {         /* copy from window */
+                 copy = state->offset - copy;
+                 if (copy > state->write) {
+                     copy -= state->write;
+                     from = state->window + (state->wsize - copy);
+                 }
+                 else
+                     from = state->window + (state->write - copy);
+                 if (copy > state->length) copy = state->length;
+             }
+             else {                              /* copy from output */
+                 from = put - state->offset;
+                 copy = state->length;
+             }
+             if (copy > left) copy = left;
+             left -= copy;
+             state->length -= copy;
+             do {
+                 *put++ = *from++;
+             } while (--copy);
+             if (state->length == 0) state->mode = LEN;
+             break;
+         case LIT:
+             if (left == 0) goto inf_leave;
+             *put++ = (unsigned char)(state->length);
+             left--;
+             state->mode = LEN;
+             break;
+         case CHECK:
+             if (state->wrap) {
+                 NEEDBITS(32);
+                 out -= left;
+                 strm->total_out += out;
+                 state->total += out;
+                 if (out)
+                     strm->adler = state->check =
+                         UPDATE(state->check, put - out, out);
+                 out = left;
+                 if ((
+ #ifdef GUNZIP
+                      state->flags ? hold :
+ #endif
+                      REVERSE(hold)) != state->check) {
+                     strm->msg = (char *)"incorrect data check";
+                     state->mode = BAD;
+                     break;
+                 }
+                 INITBITS();
+                 Tracev((stderr, "inflate:   check matches trailer\n"));
+             }
+ #ifdef GUNZIP
+             state->mode = LENGTH;
+         case LENGTH:
+             if (state->wrap && state->flags) {
+                 NEEDBITS(32);
+                 if (hold != (state->total & 0xffffffffUL)) {
+                     strm->msg = (char *)"incorrect length check";
+                     state->mode = BAD;
+                     break;
+                 }
+                 INITBITS();
+                 Tracev((stderr, "inflate:   length matches trailer\n"));
+             }
+ #endif
+             state->mode = DONE;
+         case DONE:
+             ret = Z_STREAM_END;
+             goto inf_leave;
+         case BAD:
+             ret = Z_DATA_ERROR;
+             goto inf_leave;
+         case MEM:
+             return Z_MEM_ERROR;
+         case SYNC:
+         default:
+             return Z_STREAM_ERROR;
+         }
+ 
+     /*
+        Return from inflate(), updating the total counts and the check value.
+        If there was no progress during the inflate() call, return a buffer
+        error.  Call updatewindow() to create and/or update the window state.
+        Note: a memory error from inflate() is non-recoverable.
+      */
+   inf_leave:
+     RESTORE();
+     if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
+         if (updatewindow(strm, out)) {
+             state->mode = MEM;
+             return Z_MEM_ERROR;
+         }
+     in -= strm->avail_in;
+     out -= strm->avail_out;
+     strm->total_in += in;
+     strm->total_out += out;
+     state->total += out;
+     if (state->wrap && out)
+         strm->adler = state->check =
+             UPDATE(state->check, strm->next_out - out, out);
+     strm->data_type = state->bits + (state->last ? 64 : 0) +
+                       (state->mode == TYPE ? 128 : 0);
+     if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
+         ret = Z_BUF_ERROR;
+     return ret;
  }
  
+ int ZEXPORT inflateEnd(strm)
+ z_streamp strm;
+ {
+     struct inflate_state FAR *state;
+     if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+         return Z_STREAM_ERROR;
+     state = (struct inflate_state FAR *)strm->state;
+     if (state->window != Z_NULL) ZFREE(strm, state->window);
+     ZFREE(strm, strm->state);
+     strm->state = Z_NULL;
+     Tracev((stderr, "inflate: end\n"));
+     return Z_OK;
+ }
  
! int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
! z_streamp strm;
  const Bytef *dictionary;
! uInt dictLength;
  {
!     struct inflate_state FAR *state;
!     unsigned long id;
  
!     /* check state */
!     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
!     state = (struct inflate_state FAR *)strm->state;
!     if (state->mode != DICT) return Z_STREAM_ERROR;
  
!     /* check for correct dictionary id */
!     id = adler32(0L, Z_NULL, 0);
!     id = adler32(id, dictionary, dictLength);
!     if (id != state->check) return Z_DATA_ERROR;
  
!     /* copy dictionary to window */
!     if (updatewindow(strm, strm->avail_out)) {
!         state->mode = MEM;
!         return Z_MEM_ERROR;
!     }
!     if (dictLength > state->wsize) {
!         zmemcpy(state->window, dictionary + dictLength - state->wsize,
!                 state->wsize);
!         state->whave = state->wsize;
!     }
!     else {
!         zmemcpy(state->window + state->wsize - dictLength, dictionary,
!                 dictLength);
!         state->whave = dictLength;
!     }
!     state->havedict = 1;
!     Tracev((stderr, "inflate:   dictionary set\n"));
!     return Z_OK;
  }
  
+ /*
+    Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff.  Return when found
+    or when out of input.  When called, *have is the number of pattern bytes
+    found in order so far, in 0..3.  On return *have is updated to the new
+    state.  If on return *have equals four, then the pattern was found and the
+    return value is how many bytes were read including the last byte of the
+    pattern.  If *have is less than four, then the pattern has not been found
+    yet and the return value is len.  In the latter case, syncsearch() can be
+    called again with more data and the *have state.  *have is initialized to
+    zero for the first call.
+  */
+ local unsigned syncsearch(have, buf, len)
+ unsigned FAR *have;
+ unsigned char FAR *buf;
+ unsigned len;
+ {
+     unsigned got;
+     unsigned next;
+ 
+     got = *have;
+     next = 0;
+     while (next < len && got < 4) {
+         if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
+             got++;
+         else if (buf[next])
+             got = 0;
+         else
+             got = 4 - got;
+         next++;
+     }
+     *have = got;
+     return next;
+ }
  
! int ZEXPORT inflateSync(strm)
! z_streamp strm;
  {
!     unsigned len;               /* number of bytes to look at or looked at */
!     unsigned long in, out;      /* temporary to save total_in and total_out */
!     unsigned char buf[4];       /* to restore bit buffer to byte string */
!     struct inflate_state FAR *state;
  
!     /* check parameters */
!     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
!     state = (struct inflate_state FAR *)strm->state;
!     if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
  
!     /* if first time, start search in bit buffer */
!     if (state->mode != SYNC) {
!         state->mode = SYNC;
!         state->hold <<= state->bits & 7;
!         state->bits -= state->bits & 7;
!         len = 0;
!         while (state->bits >= 8) {
!             buf[len++] = (unsigned char)(state->hold);
!             state->hold >>= 8;
!             state->bits -= 8;
!         }
!         state->have = 0;
!         syncsearch(&(state->have), buf, len);
!     }
  
!     /* search available input */
!     len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
!     strm->avail_in -= len;
!     strm->next_in += len;
!     strm->total_in += len;
  
!     /* return no joy or set up to restart inflate() on a new block */
!     if (state->have != 4) return Z_DATA_ERROR;
!     in = strm->total_in;  out = strm->total_out;
!     inflateReset(strm);
!     strm->total_in = in;  strm->total_out = out;
!     state->mode = TYPE;
!     return Z_OK;
  }
  
! /*
!    Returns true if inflate is currently at the end of a block generated by
!    Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
!    implementation to provide an additional safety check. PPP uses
!    Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
!    block. When decompressing, PPP checks that at the end of input packet,
!    inflate is waiting for these length bytes.
   */
! int ZEXPORT inflateSyncPoint(strm)
! z_streamp strm;
  {
!     struct inflate_state FAR *state;
! 
!     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
!     state = (struct inflate_state FAR *)strm->state;
!     return state->mode == STORED && state->bits == 0;
! }
! 
! int ZEXPORT inflateCopy(dest, source)
! z_streamp dest;
! z_streamp source;
! {
!     struct inflate_state FAR *state;
!     struct inflate_state FAR *copy;
!     unsigned char FAR *window;
! 
!     /* check input */
!     if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
!         source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
!         return Z_STREAM_ERROR;
!     state = (struct inflate_state FAR *)source->state;
! 
!     /* allocate space */
!     copy = (struct inflate_state FAR *)
!            ZALLOC(source, 1, sizeof(struct inflate_state));
!     if (copy == Z_NULL) return Z_MEM_ERROR;
!     window = Z_NULL;
!     if (state->window != Z_NULL) {
!         window = (unsigned char FAR *)
!                  ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
!         if (window == Z_NULL) {
!             ZFREE(source, copy);
!             return Z_MEM_ERROR;
!         }
!     }
! 
!     /* copy state */
!     *dest = *source;
!     *copy = *state;
!     copy->lencode = copy->codes + (state->lencode - state->codes);
!     copy->distcode = copy->codes + (state->distcode - state->codes);
!     copy->next = copy->codes + (state->next - state->codes);
!     if (window != Z_NULL)
!         zmemcpy(window, state->window, 1U << state->wbits);
!     copy->window = window;
!     dest->state = (voidpf)copy;
!     return Z_OK;
  }
diff -Nrcpad gcc-3.4.3/zlib/inflate.h gcc-4.0.0/zlib/inflate.h
*** gcc-3.4.3/zlib/inflate.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/inflate.h	Mon Oct 11 17:44:14 2004
***************
*** 0 ****
--- 1,117 ----
+ /* inflate.h -- internal inflate state definition
+  * Copyright (C) 1995-2003 Mark Adler
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
+ /* WARNING: this file should *not* be used by applications. It is
+    part of the implementation of the compression library and is
+    subject to change. Applications should only use zlib.h.
+  */
+ 
+ /* define NO_GZIP when compiling if you want to disable gzip header and
+    trailer decoding by inflate().  NO_GZIP would be used to avoid linking in
+    the crc code when it is not needed.  For shared libraries, gzip decoding
+    should be left enabled. */
+ #ifndef NO_GZIP
+ #  define GUNZIP
+ #endif
+ 
+ /* Possible inflate modes between inflate() calls */
+ typedef enum {
+     HEAD,       /* i: waiting for magic header */
+ #ifdef GUNZIP
+     FLAGS,      /* i: waiting for method and flags (gzip) */
+     TIME,       /* i: waiting for modification time (gzip) */
+     OS,         /* i: waiting for extra flags and operating system (gzip) */
+     EXLEN,      /* i: waiting for extra length (gzip) */
+     EXTRA,      /* i: waiting for extra bytes (gzip) */
+     NAME,       /* i: waiting for end of file name (gzip) */
+     COMMENT,    /* i: waiting for end of comment (gzip) */
+     HCRC,       /* i: waiting for header crc (gzip) */
+ #endif
+     DICTID,     /* i: waiting for dictionary check value */
+     DICT,       /* waiting for inflateSetDictionary() call */
+         TYPE,       /* i: waiting for type bits, including last-flag bit */
+         TYPEDO,     /* i: same, but skip check to exit inflate on new block */
+         STORED,     /* i: waiting for stored size (length and complement) */
+         COPY,       /* i/o: waiting for input or output to copy stored block */
+         TABLE,      /* i: waiting for dynamic block table lengths */
+         LENLENS,    /* i: waiting for code length code lengths */
+         CODELENS,   /* i: waiting for length/lit and distance code lengths */
+             LEN,        /* i: waiting for length/lit code */
+             LENEXT,     /* i: waiting for length extra bits */
+             DIST,       /* i: waiting for distance code */
+             DISTEXT,    /* i: waiting for distance extra bits */
+             MATCH,      /* o: waiting for output space to copy string */
+             LIT,        /* o: waiting for output space to write literal */
+     CHECK,      /* i: waiting for 32-bit check value */
+ #ifdef GUNZIP
+     LENGTH,     /* i: waiting for 32-bit length (gzip) */
+ #endif
+     DONE,       /* finished check, done -- remain here until reset */
+     BAD,        /* got a data error -- remain here until reset */
+     MEM,        /* got an inflate() memory error -- remain here until reset */
+     SYNC        /* looking for synchronization bytes to restart inflate() */
+ } inflate_mode;
+ 
+ /*
+     State transitions between above modes -
+ 
+     (most modes can go to the BAD or MEM mode -- not shown for clarity)
+ 
+     Process header:
+         HEAD -> (gzip) or (zlib)
+         (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME
+         NAME -> COMMENT -> HCRC -> TYPE
+         (zlib) -> DICTID or TYPE
+         DICTID -> DICT -> TYPE
+     Read deflate blocks:
+             TYPE -> STORED or TABLE or LEN or CHECK
+             STORED -> COPY -> TYPE
+             TABLE -> LENLENS -> CODELENS -> LEN
+     Read deflate codes:
+                 LEN -> LENEXT or LIT or TYPE
+                 LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
+                 LIT -> LEN
+     Process trailer:
+         CHECK -> LENGTH -> DONE
+  */
+ 
+ /* state maintained between inflate() calls.  Approximately 7K bytes. */
+ struct inflate_state {
+     inflate_mode mode;          /* current inflate mode */
+     int last;                   /* true if processing last block */
+     int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip */
+     int havedict;               /* true if dictionary provided */
+     int flags;                  /* gzip header method and flags (0 if zlib) */
+     unsigned long check;        /* protected copy of check value */
+     unsigned long total;        /* protected copy of output count */
+         /* sliding window */
+     unsigned wbits;             /* log base 2 of requested window size */
+     unsigned wsize;             /* window size or zero if not using window */
+     unsigned whave;             /* valid bytes in the window */
+     unsigned write;             /* window write index */
+     unsigned char FAR *window;  /* allocated sliding window, if needed */
+         /* bit accumulator */
+     unsigned long hold;         /* input bit accumulator */
+     unsigned bits;              /* number of bits in "in" */
+         /* for string and stored block copying */
+     unsigned length;            /* literal or length of data to copy */
+     unsigned offset;            /* distance back to copy string from */
+         /* for table and code decoding */
+     unsigned extra;             /* extra bits needed */
+         /* fixed and dynamic code tables */
+     code const FAR *lencode;    /* starting table for length/literal codes */
+     code const FAR *distcode;   /* starting table for distance codes */
+     unsigned lenbits;           /* index bits for lencode */
+     unsigned distbits;          /* index bits for distcode */
+         /* dynamic table building */
+     unsigned ncode;             /* number of code length code lengths */
+     unsigned nlen;              /* number of length code lengths */
+     unsigned ndist;             /* number of distance code lengths */
+     unsigned have;              /* number of code lengths in lens[] */
+     code FAR *next;             /* next available space in codes[] */
+     unsigned short lens[320];   /* temporary storage for code lengths */
+     unsigned short work[288];   /* work area for code table building */
+     code codes[ENOUGH];         /* space for code tables */
+ };
diff -Nrcpad gcc-3.4.3/zlib/inftrees.c gcc-4.0.0/zlib/inftrees.c
*** gcc-3.4.3/zlib/inftrees.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/inftrees.c	Mon Oct 11 18:45:37 2004
***************
*** 1,454 ****
  /* inftrees.c -- generate Huffman trees for efficient decoding
!  * Copyright (C) 1995-2002 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  #include "zutil.h"
  #include "inftrees.h"
  
! #if !defined(BUILDFIXED) && !defined(STDC)
! #  define BUILDFIXED   /* non ANSI compilers may not accept inffixed.h */
! #endif
  
  const char inflate_copyright[] =
!    " inflate 1.1.4 Copyright 1995-2002 Mark Adler ";
  /*
    If you use the zlib library in a product, an acknowledgment is welcome
    in the documentation of your product. If for some reason you cannot
    include such an acknowledgment, I would appreciate that you keep this
    copyright string in the executable of your product.
   */
- struct internal_state  {int dummy;}; /* for buggy compilers */
- 
- /* simplify the use of the inflate_huft type with some defines */
- #define exop word.what.Exop
- #define bits word.what.Bits
- 
- 
- local int huft_build OF((
-     uIntf *,            /* code lengths in bits */
-     uInt,               /* number of codes */
-     uInt,               /* number of "simple" codes */
-     const uIntf *,      /* list of base values for non-simple codes */
-     const uIntf *,      /* list of extra bits for non-simple codes */
-     inflate_huft * FAR*,/* result: starting table */
-     uIntf *,            /* maximum lookup bits (returns actual) */
-     inflate_huft *,     /* space for trees */
-     uInt *,             /* hufts used in space */
-     uIntf * ));         /* space for values */
  
! /* Tables for deflate from PKZIP's appnote.txt. */
! local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
          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, 0, 0};
!         /* see note #13 above about 258 */
! local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
!         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, 112, 112}; /* 112==invalid */
! local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
          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};
! local const uInt cpdext[30] = { /* Extra bits for distance codes */
!         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};
! 
! /*
!    Huffman code decoding is performed using a multi-level table lookup.
!    The fastest way to decode is to simply build a lookup table whose
!    size is determined by the longest code.  However, the time it takes
!    to build this table can also be a factor if the data being decoded
!    is not very long.  The most common codes are necessarily the
!    shortest codes, so those codes dominate the decoding time, and hence
!    the speed.  The idea is you can have a shorter table that decodes the
!    shorter, more probable codes, and then point to subsidiary tables for
!    the longer codes.  The time it costs to decode the longer codes is
!    then traded against the time it takes to make longer tables.
! 
!    This results of this trade are in the variables lbits and dbits
!    below.  lbits is the number of bits the first level table for literal/
!    length codes can decode in one step, and dbits is the same thing for
!    the distance codes.  Subsequent tables are also less than or equal to
!    those sizes.  These values may be adjusted either when all of the
!    codes are shorter than that, in which case the longest code length in
!    bits is used, or when the shortest code is *longer* than the requested
!    table size, in which case the length of the shortest code in bits is
!    used.
! 
!    There are two different values for the two tables, since they code a
!    different number of possibilities each.  The literal/length table
!    codes 286 possible values, or in a flat code, a little over eight
!    bits.  The distance table codes 30 possible values, or a little less
!    than five bits, flat.  The optimum values for speed end up being
!    about one bit more than those, so lbits is 8+1 and dbits is 5+1.
!    The optimum values may differ though from machine to machine, and
!    possibly even between compilers.  Your mileage may vary.
!  */
  
  
! /* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
! #define BMAX 15         /* maximum bit length of any code */
  
! local int huft_build(b, n, s, d, e, t, m, hp, hn, v)
! uIntf *b;               /* code lengths in bits (all assumed <= BMAX) */
! uInt n;                 /* number of codes (assumed <= 288) */
! uInt s;                 /* number of simple-valued codes (0..s-1) */
! const uIntf *d;         /* list of base values for non-simple codes */
! const uIntf *e;         /* list of extra bits for non-simple codes */
! inflate_huft * FAR *t;  /* result: starting table */
! uIntf *m;               /* maximum lookup bits, returns actual */
! inflate_huft *hp;       /* space for trees */
! uInt *hn;               /* hufts used in space */
! uIntf *v;               /* working area: values in order of bit length */
! /* Given a list of code lengths and a maximum table size, make a set of
!    tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
!    if the given code set is incomplete (the tables are still built in this
!    case), or Z_DATA_ERROR if the input is invalid. */
! {
  
!   uInt a;                       /* counter for codes of length k */
!   uInt c[BMAX+1];               /* bit length count table */
!   uInt f;                       /* i repeats in table every f entries */
!   int g;                        /* maximum code length */
!   int h;                        /* table level */
!   register uInt i;              /* counter, current code */
!   register uInt j;              /* counter */
!   register int k;               /* number of bits in current code */
!   int l;                        /* bits per table (returned in m) */
!   uInt mask;                    /* (1 << w) - 1, to avoid cc -O bug on HP */
!   register uIntf *p;            /* pointer into c[], b[], or v[] */
!   inflate_huft *q;              /* points to current table */
!   struct inflate_huft_s r;      /* table entry for structure assignment */
!   inflate_huft *u[BMAX];        /* table stack */
!   register int w;               /* bits before this table == (l * h) */
!   uInt x[BMAX+1];               /* bit offsets, then code stack */
!   uIntf *xp;                    /* pointer into x */
!   int y;                        /* number of dummy codes added */
!   uInt z;                       /* number of entries in current table */
  
  
!   /* Generate counts for each bit length */
!   p = c;
! #define C0 *p++ = 0;
! #define C2 C0 C0 C0 C0
! #define C4 C2 C2 C2 C2
!   C4                            /* clear c[]--assume BMAX+1 is 16 */
!   p = b;  i = n;
!   do {
!     c[*p++]++;                  /* assume all entries <= BMAX */
!   } while (--i);
!   if (c[0] == n)                /* null input--all zero length codes */
!   {
!     *t = (inflate_huft *)Z_NULL;
!     *m = 0;
!     return Z_OK;
!   }
  
  
!   /* Find minimum and maximum length, bound *m by those */
!   l = *m;
!   for (j = 1; j <= BMAX; j++)
!     if (c[j])
!       break;
!   k = j;                        /* minimum code length */
!   if ((uInt)l < j)
!     l = j;
!   for (i = BMAX; i; i--)
!     if (c[i])
!       break;
!   g = i;                        /* maximum code length */
!   if ((uInt)l > i)
!     l = i;
!   *m = l;
  
  
!   /* Adjust last length count to fill out codes, if needed */
!   for (y = 1 << j; j < i; j++, y <<= 1)
!     if ((y -= c[j]) < 0)
!       return Z_DATA_ERROR;
!   if ((y -= c[i]) < 0)
!     return Z_DATA_ERROR;
!   c[i] += y;
  
  
!   /* Generate starting offsets into the value table for each length */
!   x[1] = j = 0;
!   p = c + 1;  xp = x + 2;
!   while (--i) {                 /* note that i == g from above */
!     *xp++ = (j += *p++);
!   }
  
  
!   /* Make a table of values in order of bit lengths */
!   p = b;  i = 0;
!   do {
!     if ((j = *p++) != 0)
!       v[x[j]++] = i;
!   } while (++i < n);
!   n = x[g];                     /* set n to length of v */
  
  
!   /* Generate the Huffman codes and for each, make the table entries */
!   x[0] = i = 0;                 /* first Huffman code is zero */
!   p = v;                        /* grab values in bit order */
!   h = -1;                       /* no tables yet--level -1 */
!   w = -l;                       /* bits decoded == (l * h) */
!   u[0] = (inflate_huft *)Z_NULL;        /* just to keep compilers happy */
!   q = (inflate_huft *)Z_NULL;   /* ditto */
!   z = 0;                        /* ditto */
  
!   /* go through the bit lengths (k already is bits in shortest code) */
!   for (; k <= g; k++)
!   {
!     a = c[k];
!     while (a--)
!     {
!       /* here i is the Huffman code of length k bits for value *p */
!       /* make tables up to required level */
!       while (k > w + l)
!       {
!         h++;
!         w += l;                 /* previous table always l bits */
  
!         /* compute minimum size table less than or equal to l bits */
!         z = g - w;
!         z = z > (uInt)l ? l : z;        /* table size upper limit */
!         if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
!         {                       /* too few codes for k-w bit table */
!           f -= a + 1;           /* deduct codes from patterns left */
!           xp = c + k;
!           if (j < z)
!             while (++j < z)     /* try smaller tables up to z bits */
!             {
!               if ((f <<= 1) <= *++xp)
!                 break;          /* enough codes to use up j bits */
!               f -= *xp;         /* else deduct codes from patterns */
!             }
          }
-         z = 1 << j;             /* table entries for j-bit table */
  
!         /* allocate new table */
!         if (*hn + z > MANY)     /* (note: doesn't matter for fixed) */
!           return Z_DATA_ERROR;  /* overflow of MANY */
!         u[h] = q = hp + *hn;
!         *hn += z;
  
!         /* connect to last table, if there is one */
!         if (h)
!         {
!           x[h] = i;             /* save pattern for backing up */
!           r.bits = (Byte)l;     /* bits to dump before this table */
!           r.exop = (Byte)j;     /* bits in this table */
!           j = i >> (w - l);
!           r.base = (uInt)(q - u[h-1] - j);   /* offset to this table */
!           u[h-1][j] = r;        /* connect to last table */
          }
          else
!           *t = q;               /* first table is returned result */
!       }
! 
!       /* set up table entry in r */
!       r.bits = (Byte)(k - w);
!       if (p >= v + n)
!         r.exop = 128 + 64;      /* out of values--invalid code */
!       else if (*p < s)
!       {
!         r.exop = (Byte)(*p < 256 ? 0 : 32 + 64);     /* 256 is end-of-block */
!         r.base = *p++;          /* simple code is just the value */
!       }
!       else
!       {
!         r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
!         r.base = d[*p++ - s];
!       }
! 
!       /* fill code-like entries with r */
!       f = 1 << (k - w);
!       for (j = i >> w; j < z; j += f)
!         q[j] = r;
! 
!       /* backwards increment the k-bit code i */
!       for (j = 1 << (k - 1); i & j; j >>= 1)
!         i ^= j;
!       i ^= j;
! 
!       /* backup over finished tables */
!       mask = (1 << w) - 1;      /* needed on HP, cc -O bug */
!       while ((i & mask) != x[h])
!       {
!         h--;                    /* don't need to update q */
!         w -= l;
!         mask = (1 << w) - 1;
!       }
!     }
!   }
! 
! 
!   /* Return Z_BUF_ERROR if we were given an incomplete table */
!   return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
! }
! 
! 
! int inflate_trees_bits(c, bb, tb, hp, z)
! uIntf *c;               /* 19 code lengths */
! uIntf *bb;              /* bits tree desired/actual depth */
! inflate_huft * FAR *tb; /* bits tree result */
! inflate_huft *hp;       /* space for trees */
! z_streamp z;            /* for messages */
! {
!   int r;
!   uInt hn = 0;          /* hufts used in space */
!   uIntf *v;             /* work area for huft_build */
  
!   if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL)
!     return Z_MEM_ERROR;
!   r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL,
!                  tb, bb, hp, &hn, v);
!   if (r == Z_DATA_ERROR)
!     z->msg = (char*)"oversubscribed dynamic bit lengths tree";
!   else if (r == Z_BUF_ERROR || *bb == 0)
!   {
!     z->msg = (char*)"incomplete dynamic bit lengths tree";
!     r = Z_DATA_ERROR;
!   }
!   ZFREE(z, v);
!   return r;
! }
  
  
! int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp, z)
! uInt nl;                /* number of literal/length codes */
! uInt nd;                /* number of distance codes */
! uIntf *c;               /* that many (total) code lengths */
! uIntf *bl;              /* literal desired/actual bit depth */
! uIntf *bd;              /* distance desired/actual bit depth */
! inflate_huft * FAR *tl; /* literal/length tree result */
! inflate_huft * FAR *td; /* distance tree result */
! inflate_huft *hp;       /* space for trees */
! z_streamp z;            /* for messages */
! {
!   int r;
!   uInt hn = 0;          /* hufts used in space */
!   uIntf *v;             /* work area for huft_build */
  
!   /* allocate work area */
!   if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
!     return Z_MEM_ERROR;
  
!   /* build literal/length tree */
!   r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
!   if (r != Z_OK || *bl == 0)
!   {
!     if (r == Z_DATA_ERROR)
!       z->msg = (char*)"oversubscribed literal/length tree";
!     else if (r != Z_MEM_ERROR)
!     {
!       z->msg = (char*)"incomplete literal/length tree";
!       r = Z_DATA_ERROR;
!     }
!     ZFREE(z, v);
!     return r;
!   }
  
!   /* build distance tree */
!   r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
!   if (r != Z_OK || (*bd == 0 && nl > 257))
!   {
!     if (r == Z_DATA_ERROR)
!       z->msg = (char*)"oversubscribed distance tree";
!     else if (r == Z_BUF_ERROR) {
! #ifdef PKZIP_BUG_WORKAROUND
!       r = Z_OK;
!     }
! #else
!       z->msg = (char*)"incomplete distance tree";
!       r = Z_DATA_ERROR;
!     }
!     else if (r != Z_MEM_ERROR)
!     {
!       z->msg = (char*)"empty distance tree with lengths";
!       r = Z_DATA_ERROR;
      }
-     ZFREE(z, v);
-     return r;
- #endif
-   }
- 
-   /* done */
-   ZFREE(z, v);
-   return Z_OK;
- }
- 
- 
- /* build fixed tables only once--keep them here */
- #ifdef BUILDFIXED
- local int fixed_built = 0;
- #define FIXEDH 544      /* number of hufts used by fixed tables */
- local inflate_huft fixed_mem[FIXEDH];
- local uInt fixed_bl;
- local uInt fixed_bd;
- local inflate_huft *fixed_tl;
- local inflate_huft *fixed_td;
- #else
- #include "inffixed.h"
- #endif
  
  
! int inflate_trees_fixed(bl, bd, tl, td, z)
! uIntf *bl;               /* literal desired/actual bit depth */
! uIntf *bd;               /* distance desired/actual bit depth */
! inflate_huft * FAR *tl;  /* literal/length tree result */
! inflate_huft * FAR *td;  /* distance tree result */
! z_streamp z;             /* for memory allocation */
! {
! #ifdef BUILDFIXED
!   /* build fixed tables if not already */
!   if (!fixed_built)
!   {
!     int k;              /* temporary variable */
!     uInt f = 0;         /* number of hufts used in fixed_mem */
!     uIntf *c;           /* length list for huft_build */
!     uIntf *v;           /* work area for huft_build */
  
!     /* allocate memory */
!     if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
!       return Z_MEM_ERROR;
!     if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
!     {
!       ZFREE(z, c);
!       return Z_MEM_ERROR;
      }
  
!     /* literal table */
!     for (k = 0; k < 144; k++)
!       c[k] = 8;
!     for (; k < 256; k++)
!       c[k] = 9;
!     for (; k < 280; k++)
!       c[k] = 7;
!     for (; k < 288; k++)
!       c[k] = 8;
!     fixed_bl = 9;
!     huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl,
!                fixed_mem, &f, v);
! 
!     /* distance table */
!     for (k = 0; k < 30; k++)
!       c[k] = 5;
!     fixed_bd = 5;
!     huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd,
!                fixed_mem, &f, v);
! 
!     /* done */
!     ZFREE(z, v);
!     ZFREE(z, c);
!     fixed_built = 1;
!   }
! #endif
!   *bl = fixed_bl;
!   *bd = fixed_bd;
!   *tl = fixed_tl;
!   *td = fixed_td;
!   return Z_OK;
  }
--- 1,321 ----
  /* inftrees.c -- generate Huffman trees for efficient decoding
!  * Copyright (C) 1995-2003 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  #include "zutil.h"
  #include "inftrees.h"
  
! #define MAXBITS 15
  
  const char inflate_copyright[] =
!    " inflate 1.2.1 Copyright 1995-2003 Mark Adler ";
  /*
    If you use the zlib library in a product, an acknowledgment is welcome
    in the documentation of your product. If for some reason you cannot
    include such an acknowledgment, I would appreciate that you keep this
    copyright string in the executable of your product.
   */
  
! /*
!    Build a set of tables to decode the provided canonical Huffman code.
!    The code lengths are lens[0..codes-1].  The result starts at *table,
!    whose indices are 0..2^bits-1.  work is a writable array of at least
!    lens shorts, which is used as a work area.  type is the type of code
!    to be generated, CODES, LENS, or DISTS.  On return, zero is success,
!    -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
!    on return points to the next available entry's address.  bits is the
!    requested root table index bits, and on return it is the actual root
!    table index bits.  It will differ if the request is greater than the
!    longest code or if it is less than the shortest code.
!  */
! int inflate_table(type, lens, codes, table, bits, work)
! codetype type;
! unsigned short FAR *lens;
! unsigned codes;
! code FAR * FAR *table;
! unsigned FAR *bits;
! unsigned short FAR *work;
! {
!     unsigned len;               /* a code's length in bits */
!     unsigned sym;               /* index of code symbols */
!     unsigned min, max;          /* minimum and maximum code lengths */
!     unsigned root;              /* number of index bits for root table */
!     unsigned curr;              /* number of index bits for current table */
!     unsigned drop;              /* code bits to drop for sub-table */
!     int left;                   /* number of prefix codes available */
!     unsigned used;              /* code entries in table used */
!     unsigned huff;              /* Huffman code */
!     unsigned incr;              /* for incrementing code, index */
!     unsigned fill;              /* index for replicating entries */
!     unsigned low;               /* low bits for current root entry */
!     unsigned mask;              /* mask for low root bits */
!     code this;                  /* table entry for duplication */
!     code FAR *next;             /* next available space in table */
!     const unsigned short FAR *base;     /* base value table to use */
!     const unsigned short FAR *extra;    /* extra bits table to use */
!     int end;                    /* use base and extra for symbol > end */
!     unsigned short count[MAXBITS+1];    /* number of codes of each length */
!     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
!     static const unsigned short lbase[31] = { /* Length codes 257..285 base */
          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, 0, 0};
!     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
!         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
!         19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 76, 66};
!     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
          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, 0, 0};
!     static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
!         16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
!         23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
!         28, 28, 29, 29, 64, 64};
  
+     /*
+        Process a set of code lengths to create a canonical Huffman code.  The
+        code lengths are lens[0..codes-1].  Each length corresponds to the
+        symbols 0..codes-1.  The Huffman code is generated by first sorting the
+        symbols by length from short to long, and retaining the symbol order
+        for codes with equal lengths.  Then the code starts with all zero bits
+        for the first code of the shortest length, and the codes are integer
+        increments for the same length, and zeros are appended as the length
+        increases.  For the deflate format, these bits are stored backwards
+        from their more natural integer increment ordering, and so when the
+        decoding tables are built in the large loop below, the integer codes
+        are incremented backwards.
  
!        This routine assumes, but does not check, that all of the entries in
!        lens[] are in the range 0..MAXBITS.  The caller must assure this.
!        1..MAXBITS is interpreted as that code length.  zero means that that
!        symbol does not occur in this code.
  
!        The codes are sorted by computing a count of codes for each length,
!        creating from that a table of starting indices for each length in the
!        sorted table, and then entering the symbols in order in the sorted
!        table.  The sorted table is work[], with that space being provided by
!        the caller.
  
!        The length counts are used for other purposes as well, i.e. finding
!        the minimum and maximum length codes, determining if there are any
!        codes at all, checking for a valid set of lengths, and looking ahead
!        at length counts to determine sub-table sizes when building the
!        decoding tables.
!      */
  
+     /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+     for (len = 0; len <= MAXBITS; len++)
+         count[len] = 0;
+     for (sym = 0; sym < codes; sym++)
+         count[lens[sym]]++;
  
!     /* bound code lengths, force root to be within code lengths */
!     root = *bits;
!     for (max = MAXBITS; max >= 1; max--)
!         if (count[max] != 0) break;
!     if (root > max) root = max;
!     if (max == 0) return -1;            /* no codes! */
!     for (min = 1; min <= MAXBITS; min++)
!         if (count[min] != 0) break;
!     if (root < min) root = min;
  
+     /* check for an over-subscribed or incomplete set of lengths */
+     left = 1;
+     for (len = 1; len <= MAXBITS; len++) {
+         left <<= 1;
+         left -= count[len];
+         if (left < 0) return -1;        /* over-subscribed */
+     }
+     if (left > 0 && (type == CODES || (codes - count[0] != 1)))
+         return -1;                      /* incomplete set */
  
!     /* generate offsets into symbol table for each length for sorting */
!     offs[1] = 0;
!     for (len = 1; len < MAXBITS; len++)
!         offs[len + 1] = offs[len] + count[len];
  
+     /* sort symbols by length, by symbol order within each length */
+     for (sym = 0; sym < codes; sym++)
+         if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
  
!     /*
!        Create and fill in decoding tables.  In this loop, the table being
!        filled is at next and has curr index bits.  The code being used is huff
!        with length len.  That code is converted to an index by dropping drop
!        bits off of the bottom.  For codes where len is less than drop + curr,
!        those top drop + curr - len bits are incremented through all values to
!        fill the table with replicated entries.
  
+        root is the number of index bits for the root table.  When len exceeds
+        root, sub-tables are created pointed to by the root entry with an index
+        of the low root bits of huff.  This is saved in low to check for when a
+        new sub-table should be started.  drop is zero when the root table is
+        being filled, and drop is root when sub-tables are being filled.
  
!        When a new sub-table is needed, it is necessary to look ahead in the
!        code lengths to determine what size sub-table is needed.  The length
!        counts are used for this, and so count[] is decremented as codes are
!        entered in the tables.
  
+        used keeps track of how many table entries have been allocated from the
+        provided *table space.  It is checked when a LENS table is being made
+        against the space in *table, ENOUGH, minus the maximum space needed by
+        the worst case distance code, MAXD.  This should never happen, but the
+        sufficiency of ENOUGH has not been proven exhaustively, hence the check.
+        This assumes that when type == LENS, bits == 9.
  
!        sym increments through all symbols, and the loop terminates when
!        all codes of length max, i.e. all codes, have been processed.  This
!        routine permits incomplete codes, so another loop after this one fills
!        in the rest of the decoding tables with invalid code markers.
!      */
  
+     /* set up for code type */
+     switch (type) {
+     case CODES:
+         base = extra = work;    /* dummy value--not used */
+         end = 19;
+         break;
+     case LENS:
+         base = lbase;
+         base -= 257;
+         extra = lext;
+         extra -= 257;
+         end = 256;
+         break;
+     default:            /* DISTS */
+         base = dbase;
+         extra = dext;
+         end = -1;
+     }
  
!     /* initialize state for loop */
!     huff = 0;                   /* starting code */
!     sym = 0;                    /* starting code symbol */
!     len = min;                  /* starting code length */
!     next = *table;              /* current table to fill in */
!     curr = root;                /* current table index bits */
!     drop = 0;                   /* current bits to drop from code for index */
!     low = (unsigned)(-1);       /* trigger new sub-table when len > root */
!     used = 1U << root;          /* use root table entries */
!     mask = used - 1;            /* mask for comparing low */
  
!     /* check available table space */
!     if (type == LENS && used >= ENOUGH - MAXD)
!         return 1;
  
!     /* process all codes and make table entries */
!     for (;;) {
!         /* create table entry */
!         this.bits = (unsigned char)(len - drop);
!         if ((int)(work[sym]) < end) {
!             this.op = (unsigned char)0;
!             this.val = work[sym];
!         }
!         else if ((int)(work[sym]) > end) {
!             this.op = (unsigned char)(extra[work[sym]]);
!             this.val = base[work[sym]];
!         }
!         else {
!             this.op = (unsigned char)(32 + 64);         /* end of block */
!             this.val = 0;
          }
  
!         /* replicate for those indices with low len bits equal to huff */
!         incr = 1U << (len - drop);
!         fill = 1U << curr;
!         do {
!             fill -= incr;
!             next[(huff >> drop) + fill] = this;
!         } while (fill != 0);
  
!         /* backwards increment the len-bit code huff */
!         incr = 1U << (len - 1);
!         while (huff & incr)
!             incr >>= 1;
!         if (incr != 0) {
!             huff &= incr - 1;
!             huff += incr;
          }
          else
!             huff = 0;
  
!         /* go to next symbol, update count, len */
!         sym++;
!         if (--(count[len]) == 0) {
!             if (len == max) break;
!             len = lens[work[sym]];
!         }
  
+         /* create new sub-table if needed */
+         if (len > root && (huff & mask) != low) {
+             /* if first time, transition to sub-tables */
+             if (drop == 0)
+                 drop = root;
  
!             /* increment past last table */
!             next += 1U << curr;
  
!             /* determine length of next table */
!             curr = len - drop;
!             left = (int)(1 << curr);
!             while (curr + drop < max) {
!                 left -= count[curr + drop];
!                 if (left <= 0) break;
!                 curr++;
!                 left <<= 1;
!             }
  
!             /* check for enough space */
!             used += 1U << curr;
!             if (type == LENS && used >= ENOUGH - MAXD)
!                 return 1;
  
!             /* point entry in root table to sub-table */
!             low = huff & mask;
!             (*table)[low].op = (unsigned char)curr;
!             (*table)[low].bits = (unsigned char)root;
!             (*table)[low].val = (unsigned short)(next - *table);
!         }
      }
  
+     /*
+        Fill in rest of table for incomplete codes.  This loop is similar to the
+        loop above in incrementing huff for table indices.  It is assumed that
+        len is equal to curr + drop, so there is no loop needed to increment
+        through high index bits.  When the current sub-table is filled, the loop
+        drops back to the root table to fill in any remaining entries there.
+      */
+     this.op = (unsigned char)64;                /* invalid code marker */
+     this.bits = (unsigned char)(len - drop);
+     this.val = (unsigned short)0;
+     while (huff != 0) {
+         /* when done with sub-table, drop back to root table */
+         if (drop != 0 && (huff & mask) != low) {
+             drop = 0;
+             len = root;
+             next = *table;
+             curr = root;
+             this.bits = (unsigned char)len;
+         }
  
!         /* put invalid code marker in table */
!         next[huff >> drop] = this;
  
!         /* backwards increment the len-bit code huff */
!         incr = 1U << (len - 1);
!         while (huff & incr)
!             incr >>= 1;
!         if (incr != 0) {
!             huff &= incr - 1;
!             huff += incr;
!         }
!         else
!             huff = 0;
      }
  
!     /* set return parameters */
!     *table += used;
!     *bits = root;
!     return 0;
  }
diff -Nrcpad gcc-3.4.3/zlib/inftrees.h gcc-4.0.0/zlib/inftrees.h
*** gcc-3.4.3/zlib/inftrees.h	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/inftrees.h	Mon Oct 11 18:45:37 2004
***************
*** 1,6 ****
  /* inftrees.h -- header to use inftrees.c
!  * Copyright (C) 1995-2002 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* WARNING: this file should *not* be used by applications. It is
--- 1,6 ----
  /* inftrees.h -- header to use inftrees.c
!  * Copyright (C) 1995-2003 Mark Adler
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /* WARNING: this file should *not* be used by applications. It is
***************
*** 8,58 ****
     subject to change. Applications should only use zlib.h.
   */
  
! /* Huffman code lookup table entry--this entry is four bytes for machines
!    that have 16-bit pointers (e.g. PC's in the small or medium model). */
! 
! typedef struct inflate_huft_s FAR inflate_huft;
  
! struct inflate_huft_s {
!   union {
!     struct {
!       Byte Exop;        /* number of extra bits or operation */
!       Byte Bits;        /* number of bits in this code or subcode */
!     } what;
!     uInt pad;           /* pad structure to a power of 2 (4 bytes for */
!   } word;               /*  16-bit, 8 bytes for 32-bit int's) */
!   uInt base;            /* literal, length base, distance base,
!                            or table offset */
! };
  
  /* Maximum size of dynamic tree.  The maximum found in a long but non-
!    exhaustive search was 1004 huft structures (850 for length/literals
     and 154 for distances, the latter actually the result of an
!    exhaustive search).  The actual maximum is not known, but the
!    value below is more than safe. */
! #define MANY 1440
! 
! extern int inflate_trees_bits OF((
!     uIntf *,                    /* 19 code lengths */
!     uIntf *,                    /* bits tree desired/actual depth */
!     inflate_huft * FAR *,       /* bits tree result */
!     inflate_huft *,             /* space for trees */
!     z_streamp));                /* for messages */
  
! extern int inflate_trees_dynamic OF((
!     uInt,                       /* number of literal/length codes */
!     uInt,                       /* number of distance codes */
!     uIntf *,                    /* that many (total) code lengths */
!     uIntf *,                    /* literal desired/actual bit depth */
!     uIntf *,                    /* distance desired/actual bit depth */
!     inflate_huft * FAR *,       /* literal/length tree result */
!     inflate_huft * FAR *,       /* distance tree result */
!     inflate_huft *,             /* space for trees */
!     z_streamp));                /* for messages */
  
! extern int inflate_trees_fixed OF((
!     uIntf *,                    /* literal desired/actual bit depth */
!     uIntf *,                    /* distance desired/actual bit depth */
!     inflate_huft * FAR *,       /* literal/length tree result */
!     inflate_huft * FAR *,       /* distance tree result */
!     z_streamp));                /* for memory allocation */
--- 8,55 ----
     subject to change. Applications should only use zlib.h.
   */
  
! /* Structure for decoding tables.  Each entry provides either the
!    information needed to do the operation requested by the code that
!    indexed that table entry, or it provides a pointer to another
!    table that indexes more bits of the code.  op indicates whether
!    the entry is a pointer to another table, a literal, a length or
!    distance, an end-of-block, or an invalid code.  For a table
!    pointer, the low four bits of op is the number of index bits of
!    that table.  For a length or distance, the low four bits of op
!    is the number of extra bits to get after the code.  bits is
!    the number of bits in this code or part of the code to drop off
!    of the bit buffer.  val is the actual byte to output in the case
!    of a literal, the base length or distance, or the offset from
!    the current table to the next table.  Each entry is four bytes. */
! typedef struct {
!     unsigned char op;           /* operation, extra bits, table bits */
!     unsigned char bits;         /* bits in this part of the code */
!     unsigned short val;         /* offset in table or code value */
! } code;
  
! /* op values as set by inflate_table():
!     00000000 - literal
!     0000tttt - table link, tttt != 0 is the number of table index bits
!     0001eeee - length or distance, eeee is the number of extra bits
!     01100000 - end of block
!     01000000 - invalid code
!  */
  
  /* Maximum size of dynamic tree.  The maximum found in a long but non-
!    exhaustive search was 1004 code structures (850 for length/literals
     and 154 for distances, the latter actually the result of an
!    exhaustive search).  The true maximum is not known, but the value
!    below is more than safe. */
! #define ENOUGH 1440
! #define MAXD 154
  
! /* Type of code to build for inftable() */
! typedef enum {
!     CODES,
!     LENS,
!     DISTS
! } codetype;
  
! extern int inflate_table OF((codetype type, unsigned short FAR *lens,
!                              unsigned codes, code FAR * FAR *table,
!                              unsigned FAR *bits, unsigned short FAR *work));
diff -Nrcpad gcc-3.4.3/zlib/infutil.c gcc-4.0.0/zlib/infutil.c
*** gcc-3.4.3/zlib/infutil.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/infutil.c	Thu Jan  1 00:00:00 1970
***************
*** 1,87 ****
- /* inflate_util.c -- data and routines common to blocks and codes
-  * Copyright (C) 1995-2002 Mark Adler
-  * For conditions of distribution and use, see copyright notice in zlib.h 
-  */
- 
- #include "zutil.h"
- #include "infblock.h"
- #include "inftrees.h"
- #include "infcodes.h"
- #include "infutil.h"
- 
- struct inflate_codes_state {int dummy;}; /* for buggy compilers */
- 
- /* And'ing with mask[n] masks the lower n bits */
- uInt inflate_mask[17] = {
-     0x0000,
-     0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
-     0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
- };
- 
- 
- /* copy as much as possible from the sliding window to the output area */
- int inflate_flush(s, z, r)
- inflate_blocks_statef *s;
- z_streamp z;
- int r;
- {
-   uInt n;
-   Bytef *p;
-   Bytef *q;
- 
-   /* local copies of source and destination pointers */
-   p = z->next_out;
-   q = s->read;
- 
-   /* compute number of bytes to copy as far as end of window */
-   n = (uInt)((q <= s->write ? s->write : s->end) - q);
-   if (n > z->avail_out) n = z->avail_out;
-   if (n && r == Z_BUF_ERROR) r = Z_OK;
- 
-   /* update counters */
-   z->avail_out -= n;
-   z->total_out += n;
- 
-   /* update check information */
-   if (s->checkfn != Z_NULL)
-     z->adler = s->check = (*s->checkfn)(s->check, q, n);
- 
-   /* copy as far as end of window */
-   zmemcpy(p, q, n);
-   p += n;
-   q += n;
- 
-   /* see if more to copy at beginning of window */
-   if (q == s->end)
-   {
-     /* wrap pointers */
-     q = s->window;
-     if (s->write == s->end)
-       s->write = s->window;
- 
-     /* compute bytes to copy */
-     n = (uInt)(s->write - q);
-     if (n > z->avail_out) n = z->avail_out;
-     if (n && r == Z_BUF_ERROR) r = Z_OK;
- 
-     /* update counters */
-     z->avail_out -= n;
-     z->total_out += n;
- 
-     /* update check information */
-     if (s->checkfn != Z_NULL)
-       z->adler = s->check = (*s->checkfn)(s->check, q, n);
- 
-     /* copy */
-     zmemcpy(p, q, n);
-     p += n;
-     q += n;
-   }
- 
-   /* update pointers */
-   z->next_out = p;
-   s->read = q;
- 
-   /* done */
-   return r;
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/infutil.h gcc-4.0.0/zlib/infutil.h
*** gcc-3.4.3/zlib/infutil.h	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/infutil.h	Thu Jan  1 00:00:00 1970
***************
*** 1,98 ****
- /* infutil.h -- types and macros common to blocks and codes
-  * Copyright (C) 1995-2002 Mark Adler
-  * For conditions of distribution and use, see copyright notice in zlib.h 
-  */
- 
- /* WARNING: this file should *not* be used by applications. It is
-    part of the implementation of the compression library and is
-    subject to change. Applications should only use zlib.h.
-  */
- 
- #ifndef _INFUTIL_H
- #define _INFUTIL_H
- 
- typedef enum {
-       TYPE,     /* get type bits (3, including end bit) */
-       LENS,     /* get lengths for stored */
-       STORED,   /* processing stored block */
-       TABLE,    /* get table lengths */
-       BTREE,    /* get bit lengths tree for a dynamic block */
-       DTREE,    /* get length, distance trees for a dynamic block */
-       CODES,    /* processing fixed or dynamic block */
-       DRY,      /* output remaining window bytes */
-       DONE,     /* finished last block, done */
-       BAD}      /* got a data error--stuck here */
- inflate_block_mode;
- 
- /* inflate blocks semi-private state */
- struct inflate_blocks_state {
- 
-   /* mode */
-   inflate_block_mode  mode;     /* current inflate_block mode */
- 
-   /* mode dependent information */
-   union {
-     uInt left;          /* if STORED, bytes left to copy */
-     struct {
-       uInt table;               /* table lengths (14 bits) */
-       uInt index;               /* index into blens (or border) */
-       uIntf *blens;             /* bit lengths of codes */
-       uInt bb;                  /* bit length tree depth */
-       inflate_huft *tb;         /* bit length decoding tree */
-     } trees;            /* if DTREE, decoding info for trees */
-     struct {
-       inflate_codes_statef 
-          *codes;
-     } decode;           /* if CODES, current state */
-   } sub;                /* submode */
-   uInt last;            /* true if this block is the last block */
- 
-   /* mode independent information */
-   uInt bitk;            /* bits in bit buffer */
-   uLong bitb;           /* bit buffer */
-   inflate_huft *hufts;  /* single malloc for tree space */
-   Bytef *window;        /* sliding window */
-   Bytef *end;           /* one byte after sliding window */
-   Bytef *read;          /* window read pointer */
-   Bytef *write;         /* window write pointer */
-   check_func checkfn;   /* check function */
-   uLong check;          /* check on output */
- 
- };
- 
- 
- /* defines for inflate input/output */
- /*   update pointers and return */
- #define UPDBITS {s->bitb=b;s->bitk=k;}
- #define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
- #define UPDOUT {s->write=q;}
- #define UPDATE {UPDBITS UPDIN UPDOUT}
- #define LEAVE {UPDATE return inflate_flush(s,z,r);}
- /*   get bytes and bits */
- #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
- #define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
- #define NEXTBYTE (n--,*p++)
- #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
- #define DUMPBITS(j) {b>>=(j);k-=(j);}
- /*   output bytes */
- #define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
- #define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
- #define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
- #define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
- #define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
- #define OUTBYTE(a) {*q++=(Byte)(a);m--;}
- /*   load local pointers */
- #define LOAD {LOADIN LOADOUT}
- 
- /* masks for lower bits (size given to avoid silly warnings with Visual C++) */
- extern uInt inflate_mask[17];
- 
- /* copy as much as possible from the sliding window to the output area */
- extern int inflate_flush OF((
-     inflate_blocks_statef *,
-     z_streamp ,
-     int));
- 
- struct internal_state      {int dummy;}; /* for buggy compilers */
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/maketree.c gcc-4.0.0/zlib/maketree.c
*** gcc-3.4.3/zlib/maketree.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/maketree.c	Thu Jan  1 00:00:00 1970
***************
*** 1,85 ****
- /* maketree.c -- make inffixed.h table for decoding fixed codes
-  * Copyright (C) 1995-2002 Mark Adler
-  * For conditions of distribution and use, see copyright notice in zlib.h 
-  */
- 
- /* WARNING: this file should *not* be used by applications. It is
-    part of the implementation of the compression library and is
-    subject to change. Applications should only use zlib.h.
-  */
- 
- /* This program is included in the distribution for completeness.
-    You do not need to compile or run this program since inffixed.h
-    is already included in the distribution.  To use this program
-    you need to compile zlib with BUILDFIXED defined and then compile
-    and link this program with the zlib library.  Then the output of
-    this program can be piped to inffixed.h. */
- 
- #include <stdio.h>
- #include <stdlib.h>
- #include "zutil.h"
- #include "inftrees.h"
- 
- /* simplify the use of the inflate_huft type with some defines */
- #define exop word.what.Exop
- #define bits word.what.Bits
- 
- /* generate initialization table for an inflate_huft structure array */
- void maketree(uInt b, inflate_huft *t)
- {
-   int i, e;
- 
-   i = 0;
-   while (1)
-   {
-     e = t[i].exop;
-     if (e && (e & (16+64)) == 0)        /* table pointer */
-     {
-       fprintf(stderr, "maketree: cannot initialize sub-tables!\n");
-       exit(1);
-     }
-     if (i % 4 == 0)
-       printf("\n   ");
-     printf(" {{{%u,%u}},%u}", t[i].exop, t[i].bits, t[i].base);
-     if (++i == (1<<b))
-       break;
-     putchar(',');
-   }
-   puts("");
- }
- 
- /* create the fixed tables in C initialization syntax */
- void main(void)
- {
-   int r;
-   uInt bl, bd;
-   inflate_huft *tl, *td;
-   z_stream z;
- 
-   z.zalloc = zcalloc;
-   z.opaque = (voidpf)0;
-   z.zfree = zcfree;
-   r = inflate_trees_fixed(&bl, &bd, &tl, &td, &z);
-   if (r)
-   {
-     fprintf(stderr, "inflate_trees_fixed error %d\n", r);
-     return;
-   }
-   puts("/* inffixed.h -- table for decoding fixed codes");
-   puts(" * Generated automatically by the maketree.c program");
-   puts(" */");
-   puts("");
-   puts("/* WARNING: this file should *not* be used by applications. It is");
-   puts("   part of the implementation of the compression library and is");
-   puts("   subject to change. Applications should only use zlib.h.");
-   puts(" */");
-   puts("");
-   printf("local uInt fixed_bl = %d;\n", bl);
-   printf("local uInt fixed_bd = %d;\n", bd);
-   printf("local inflate_huft fixed_tl[] = {");
-   maketree(bl, tl);
-   puts("  };");
-   printf("local inflate_huft fixed_td[] = {");
-   maketree(bd, td);
-   puts("  };");
- }
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/minigzip.c gcc-4.0.0/zlib/minigzip.c
*** gcc-3.4.3/zlib/minigzip.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/minigzip.c	Mon Oct 11 18:45:38 2004
***************
*** 1,6 ****
  /* minigzip.c -- simulate gzip using the zlib compression library
   * Copyright (C) 1995-2002 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /*
--- 1,6 ----
  /* minigzip.c -- simulate gzip using the zlib compression library
   * Copyright (C) 1995-2002 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /*
***************
*** 31,37 ****
  #  include <sys/stat.h>
  #endif
  
! #if defined(MSDOS) || defined(OS2) || defined(WIN32)
  #  include <fcntl.h>
  #  include <io.h>
  #  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
--- 31,37 ----
  #  include <sys/stat.h>
  #endif
  
! #if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
  #  include <fcntl.h>
  #  include <io.h>
  #  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
*************** void gz_compress(in, out)
*** 112,118 ****
      if (gz_compress_mmap(in, out) == Z_OK) return;
  #endif
      for (;;) {
!         len = fread(buf, 1, sizeof(buf), in);
          if (ferror(in)) {
              perror("fread");
              exit(1);
--- 112,118 ----
      if (gz_compress_mmap(in, out) == Z_OK) return;
  #endif
      for (;;) {
!         len = (int)fread(buf, 1, sizeof(buf), in);
          if (ferror(in)) {
              perror("fread");
              exit(1);
*************** int gz_compress_mmap(in, out)
*** 147,153 ****
      if (buf_len <= 0) return Z_ERRNO;
  
      /* Now do the actual mmap: */
!     buf = mmap((caddr_t) 0, buf_len, PROT_READ, MAP_SHARED, ifd, (off_t)0); 
      if (buf == (caddr_t)(-1)) return Z_ERRNO;
  
      /* Compress the whole file at once: */
--- 147,153 ----
      if (buf_len <= 0) return Z_ERRNO;
  
      /* Now do the actual mmap: */
!     buf = mmap((caddr_t) 0, buf_len, PROT_READ, MAP_SHARED, ifd, (off_t)0);
      if (buf == (caddr_t)(-1)) return Z_ERRNO;
  
      /* Compress the whole file at once: */
*************** void gz_uncompress(in, out)
*** 179,186 ****
          if (len == 0) break;
  
          if ((int)fwrite(buf, 1, (unsigned)len, out) != len) {
! 	    error("failed fwrite");
! 	}
      }
      if (fclose(out)) error("failed fclose");
  
--- 179,186 ----
          if (len == 0) break;
  
          if ((int)fwrite(buf, 1, (unsigned)len, out) != len) {
!             error("failed fwrite");
!         }
      }
      if (fclose(out)) error("failed fclose");
  
*************** void file_uncompress(file)
*** 229,235 ****
      char *infile, *outfile;
      FILE  *out;
      gzFile in;
!     int len = strlen(file);
  
      strcpy(buf, file);
  
--- 229,235 ----
      char *infile, *outfile;
      FILE  *out;
      gzFile in;
!     uInt len = (uInt)strlen(file);
  
      strcpy(buf, file);
  
*************** void file_uncompress(file)
*** 260,269 ****
  
  
  /* ===========================================================================
!  * Usage:  minigzip [-d] [-f] [-h] [-1 to -9] [files...]
   *   -d : decompress
   *   -f : compress with Z_FILTERED
   *   -h : compress with Z_HUFFMAN_ONLY
   *   -1 to -9 : compression level
   */
  
--- 260,270 ----
  
  
  /* ===========================================================================
!  * Usage:  minigzip [-d] [-f] [-h] [-r] [-1 to -9] [files...]
   *   -d : decompress
   *   -f : compress with Z_FILTERED
   *   -h : compress with Z_HUFFMAN_ONLY
+  *   -r : compress with Z_RLE
   *   -1 to -9 : compression level
   */
  
*************** int main(argc, argv)
*** 282,297 ****
  
      while (argc > 0) {
        if (strcmp(*argv, "-d") == 0)
! 	uncompr = 1;
        else if (strcmp(*argv, "-f") == 0)
! 	outmode[3] = 'f';
        else if (strcmp(*argv, "-h") == 0)
! 	outmode[3] = 'h';
        else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' &&
! 	       (*argv)[2] == 0)
! 	outmode[2] = (*argv)[1];
        else
! 	break;
        argc--, argv++;
      }
      if (argc == 0) {
--- 283,300 ----
  
      while (argc > 0) {
        if (strcmp(*argv, "-d") == 0)
!         uncompr = 1;
        else if (strcmp(*argv, "-f") == 0)
!         outmode[3] = 'f';
        else if (strcmp(*argv, "-h") == 0)
!         outmode[3] = 'h';
!       else if (strcmp(*argv, "-r") == 0)
!         outmode[3] = 'R';
        else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' &&
!                (*argv)[2] == 0)
!         outmode[2] = (*argv)[1];
        else
!         break;
        argc--, argv++;
      }
      if (argc == 0) {
*************** int main(argc, argv)
*** 315,320 ****
              }
          } while (argv++, --argc);
      }
!     exit(0);
!     return 0; /* to avoid warning */
  }
--- 318,322 ----
              }
          } while (argv++, --argc);
      }
!     return 0;
  }
diff -Nrcpad gcc-3.4.3/zlib/msdos/Makefile.b32 gcc-4.0.0/zlib/msdos/Makefile.b32
*** gcc-3.4.3/zlib/msdos/Makefile.b32	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/Makefile.b32	Thu Jan  1 00:00:00 1970
***************
*** 1,104 ****
- # Makefile for zlib
- # Borland C++   
- 
- # This version of the zlib makefile was adapted by Chris Young for use
- # with Borland C 4.5x with the Dos Power Pack for a 32-bit protected mode
- # flat memory model.  It was created for use with POV-Ray ray tracer and
- # you may choose to edit the CFLAGS to suit your needs but the
- # switches -WX and -DMSDOS are required.
- # -- Chris Young 76702.1655@compuserve.com
- 
- # To use, do "make -fmakefile.b32"
- 
- # See zconf.h for details about the memory requirements.
- 
- # ------------- Borland C++ -------------
- MODEL=-WX 
- CFLAGS= $(MODEL) -P-C -K -N- -k- -d -3 -r- -v- -f -DMSDOS
- CC=bcc32
- LD=bcc32
- LIB=tlib
- LDFLAGS= $(MODEL)
- O=.obj
- 
- # variables
- OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
-   trees$(O)
- OBJP1 = adler32$(O)+compress$(O)+crc32$(O)+gzio$(O)+uncompr$(O)+deflate$(O)+\
-   trees$(O)
- OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
-   infutil$(O) inffast$(O)
- OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
-   infutil$(O)+inffast$(O)
- 
- all: test
- 
- adler32.obj: adler32.c zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- compress.obj: compress.c zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- crc32.obj: crc32.c zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- gzio.obj: gzio.c zutil.h zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\
-    infcodes.h infutil.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\
-    infcodes.h inffast.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- uncompr.obj: uncompr.c zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- zutil.obj: zutil.c zutil.h zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- example.obj: example.c zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- minigzip.obj: minigzip.c zlib.h zconf.h
- 	$(CC) -c $(CFLAGS) $*.c
- 
- # we must cut the command line to fit in the MS/DOS 128 byte limit:
- zlib.lib: $(OBJ1) $(OBJ2)
- 	del zlib.lib
- 	$(LIB) zlib +$(OBJP1)
- 	$(LIB) zlib +$(OBJP2)
- 
- example.exe: example.obj zlib.lib
- 	$(LD) $(LDFLAGS) example.obj zlib.lib
- 
- minigzip.exe: minigzip.obj zlib.lib
- 	$(LD) $(LDFLAGS) minigzip.obj zlib.lib
- 
- test: example.exe minigzip.exe
- 	example
- 	echo hello world | minigzip | minigzip -d 
- 
- #clean:
- #	del *.obj
- #	del *.exe
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/msdos/Makefile.bor gcc-4.0.0/zlib/msdos/Makefile.bor
*** gcc-3.4.3/zlib/msdos/Makefile.bor	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/Makefile.bor	Mon Oct 11 18:45:42 2004
***************
*** 1,5 ****
  # Makefile for zlib
! # Borland C++   ************ UNTESTED ***********
  
  # To use, do "make -fmakefile.bor"
  # To compile in small model, set below: MODEL=s
--- 1,6 ----
  # Makefile for zlib
! # Borland C++
! # Last updated: 15-Mar-2003
  
  # To use, do "make -fmakefile.bor"
  # To compile in small model, set below: MODEL=s
***************
*** 12,114 ****
  #   -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
  # See zconf.h for details about the memory requirements.
  
! # ------------- Turbo C++, Borland C++ -------------
  
  #    Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
  #    should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added
  #    to the declaration of LOC here:
  LOC = $(LOCAL_ZLIB)
  
! # Type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc.
  CPU_TYP = 0
  
! # Memory model: one of s, m, c, l (small, medium, compact, large)
  MODEL=l
  
  CC=bcc
! #   replace bcc with tcc for Turbo C++ 1.0, with bcc32 for the 32 bit version
! LD=$(CC)
  AR=tlib
  
  # compiler flags
  CFLAGS=-O2 -Z -m$(MODEL) $(LOC)
- #   replace "-O2" by "-O -G -a -d" for Turbo C++ 1.0
  
! LDFLAGS=-m$(MODEL)
  
- O=.obj
  
  # variables
! OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
!   trees$(O)
! OBJP1 = adler32$(O)+compress$(O)+crc32$(O)+gzio$(O)+uncompr$(O)+deflate$(O)+\
!   trees$(O)
! OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
!   infutil$(O) inffast$(O)
! OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
!   infutil$(O)+inffast$(O)
  
! ZLIB_H = zlib.h zconf.h
! ZUTIL_H = zutil.h $(ZLIB_H)
  
- ZLIB_LIB = zlib_$(MODEL).lib
  
! all: test
  
! # individual dependencies and action rules:
! adler32.obj: adler32.c $(ZLIB_H)
  	$(CC) -c $(CFLAGS) $*.c
  
! compress.obj: compress.c $(ZLIB_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! crc32.obj: crc32.c $(ZLIB_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! deflate.obj: deflate.c deflate.h $(ZUTIL_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! gzio.obj: gzio.c $(ZUTIL_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! infblock.obj: infblock.c $(ZUTIL_H) infblock.h inftrees.h infcodes.h infutil.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! infcodes.obj: infcodes.c $(ZUTIL_H) inftrees.h infutil.h infcodes.h inffast.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! inflate.obj: inflate.c $(ZUTIL_H) infblock.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! inftrees.obj: inftrees.c $(ZUTIL_H) inftrees.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! infutil.obj: infutil.c $(ZUTIL_H) inftrees.h infutil.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! inffast.obj: inffast.c $(ZUTIL_H) inftrees.h infutil.h inffast.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! trees.obj: trees.c deflate.h $(ZUTIL_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! uncompr.obj: uncompr.c $(ZLIB_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! zutil.obj: zutil.c $(ZUTIL_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! example.obj: example.c $(ZLIB_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
- minigzip.obj: minigzip.c $(ZLIB_H)
- 	$(CC) -c $(CFLAGS) $*.c
  
! # we must cut the command line to fit in the MS/DOS 128 byte limit:
  $(ZLIB_LIB): $(OBJ1) $(OBJ2)
! 	del $(ZLIB_LIB)
! 	$(AR) $(ZLIB_LIB) +$(OBJP1)
! 	$(AR) $(ZLIB_LIB) +$(OBJP2)
  
  example.exe: example.obj $(ZLIB_LIB)
  	$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
--- 13,95 ----
  #   -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
  # See zconf.h for details about the memory requirements.
  
! # ------------ Turbo C++, Borland C++ ------------
  
  #    Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
  #    should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added
  #    to the declaration of LOC here:
  LOC = $(LOCAL_ZLIB)
  
! # type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc.
  CPU_TYP = 0
  
! # memory model: one of s, m, c, l (small, medium, compact, large)
  MODEL=l
  
+ # replace bcc with tcc for Turbo C++ 1.0, with bcc32 for the 32 bit version
  CC=bcc
! LD=bcc
  AR=tlib
  
  # compiler flags
+ # replace "-O2" by "-O -G -a -d" for Turbo C++ 1.0
  CFLAGS=-O2 -Z -m$(MODEL) $(LOC)
  
! LDFLAGS=-m$(MODEL) -f-
  
  
  # variables
! ZLIB_LIB = zlib_$(MODEL).lib
  
! OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj
! OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj
! OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj
! OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj
  
  
! # targets
! all: $(ZLIB_LIB) example.exe minigzip.exe
  
! .c.obj:
  	$(CC) -c $(CFLAGS) $*.c
  
! adler32.obj: adler32.c zlib.h zconf.h
  
! compress.obj: compress.c zlib.h zconf.h
  
! crc32.obj: crc32.c zlib.h zconf.h crc32.h
  
! deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
  
! gzio.obj: gzio.c zutil.h zlib.h zconf.h
  
! infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
!  inffast.h inffixed.h
  
! inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
!  inffast.h
  
! inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
!  inffast.h inffixed.h
  
! inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
  
! trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h
  
! uncompr.obj: uncompr.c zlib.h zconf.h
  
! zutil.obj: zutil.c zutil.h zlib.h zconf.h
  
! example.obj: example.c zlib.h zconf.h
  
! minigzip.obj: minigzip.c zlib.h zconf.h
  
  
! # the command line is cut to fit in the MS-DOS 128 byte limit:
  $(ZLIB_LIB): $(OBJ1) $(OBJ2)
! 	-del $(ZLIB_LIB)
! 	$(AR) $(ZLIB_LIB) $(OBJP1)
! 	$(AR) $(ZLIB_LIB) $(OBJP2)
  
  example.exe: example.obj $(ZLIB_LIB)
  	$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
*************** minigzip.exe: minigzip.obj $(ZLIB_LIB)
*** 118,125 ****
  
  test: example.exe minigzip.exe
  	example
! 	echo hello world | minigzip | minigzip -d 
  
! #clean:
! #	del *.obj
! #	del *.exe
--- 99,109 ----
  
  test: example.exe minigzip.exe
  	example
! 	echo hello world | minigzip | minigzip -d
  
! clean:
! 	-del *.obj
! 	-del *.lib
! 	-del *.exe
! 	-del zlib_*.bak
! 	-del foo.gz
diff -Nrcpad gcc-3.4.3/zlib/msdos/Makefile.dj2 gcc-4.0.0/zlib/msdos/Makefile.dj2
*** gcc-3.4.3/zlib/msdos/Makefile.dj2	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/Makefile.dj2	Mon Oct 11 18:45:42 2004
***************
*** 1,15 ****
  # Makefile for zlib.  Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96.
  # Copyright (C) 1995-1998 Jean-loup Gailly.
! # For conditions of distribution and use, see copyright notice in zlib.h 
  
  # To compile, or to compile and test, type:
! # 
  #   make -fmakefile.dj2;  make test -fmakefile.dj2
! # 
  # To install libz.a, zconf.h and zlib.h in the djgpp directories, type:
! # 
  #    make install -fmakefile.dj2
! # 
  # after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env as
  # in the sample below if the pattern of the DJGPP distribution is to
  # be followed.  Remember that, while <sp>'es around <=> are ignored in
--- 1,15 ----
  # Makefile for zlib.  Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96.
  # Copyright (C) 1995-1998 Jean-loup Gailly.
! # For conditions of distribution and use, see copyright notice in zlib.h
  
  # To compile, or to compile and test, type:
! #
  #   make -fmakefile.dj2;  make test -fmakefile.dj2
! #
  # To install libz.a, zconf.h and zlib.h in the djgpp directories, type:
! #
  #    make install -fmakefile.dj2
! #
  # after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env as
  # in the sample below if the pattern of the DJGPP distribution is to
  # be followed.  Remember that, while <sp>'es around <=> are ignored in
*************** prefix=/usr/local
*** 52,72 ****
  exec_prefix = $(prefix)
  
  OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
!        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
  
  TEST_OBJS = example.o minigzip.o
  
  all: example.exe minigzip.exe
  
  test: all
  	./example
! 	echo hello world | .\minigzip | .\minigzip -d 
  
  %.o : %.c
  	$(CC) $(CFLAGS) -c $< -o $@
  
! libz.a: $(OBJS)
! 	$(AR) $@ $(OBJS)
  
  %.exe : %.o $(LIBS)
  	$(LD) $@ $< $(LDLIBS)
--- 52,76 ----
  exec_prefix = $(prefix)
  
  OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
!        zutil.o inflate.o infback.o inftrees.o inffast.o
! 
! OBJA =
! # to use the asm code: make OBJA=match.o
  
  TEST_OBJS = example.o minigzip.o
  
  all: example.exe minigzip.exe
  
+ check: test
  test: all
  	./example
! 	echo hello world | .\minigzip | .\minigzip -d
  
  %.o : %.c
  	$(CC) $(CFLAGS) -c $< -o $@
  
! libz.a: $(OBJS) $(OBJA)
! 	$(AR) $@ $(OBJS) $(OBJA)
  
  %.exe : %.o $(LIBS)
  	$(LD) $@ $< $(LDLIBS)
diff -Nrcpad gcc-3.4.3/zlib/msdos/Makefile.emx gcc-4.0.0/zlib/msdos/Makefile.emx
*** gcc-3.4.3/zlib/msdos/Makefile.emx	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/Makefile.emx	Mon Oct 11 18:45:42 2004
***************
*** 1,11 ****
  # Makefile for zlib.  Modified for emx 0.9c by Chr. Spieler, 6/17/98.
  # Copyright (C) 1995-1998 Jean-loup Gailly.
! # For conditions of distribution and use, see copyright notice in zlib.h 
  
  # To compile, or to compile and test, type:
! # 
  #   make -fmakefile.emx;  make test -fmakefile.emx
! # 
  
  CC=gcc
  
--- 1,11 ----
  # Makefile for zlib.  Modified for emx 0.9c by Chr. Spieler, 6/17/98.
  # Copyright (C) 1995-1998 Jean-loup Gailly.
! # For conditions of distribution and use, see copyright notice in zlib.h
  
  # To compile, or to compile and test, type:
! #
  #   make -fmakefile.emx;  make test -fmakefile.emx
! #
  
  CC=gcc
  
*************** prefix=/usr/local
*** 34,40 ****
  exec_prefix = $(prefix)
  
  OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
!        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
  
  TEST_OBJS = example.o minigzip.o
  
--- 34,40 ----
  exec_prefix = $(prefix)
  
  OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
!        zutil.o inflate.o infback.o inftrees.o inffast.o
  
  TEST_OBJS = example.o minigzip.o
  
*************** all: example.exe minigzip.exe
*** 42,48 ****
  
  test: all
  	./example
! 	echo hello world | .\minigzip | .\minigzip -d 
  
  %.o : %.c
  	$(CC) $(CFLAGS) -c $< -o $@
--- 42,48 ----
  
  test: all
  	./example
! 	echo hello world | .\minigzip | .\minigzip -d
  
  %.o : %.c
  	$(CC) $(CFLAGS) -c $< -o $@
diff -Nrcpad gcc-3.4.3/zlib/msdos/Makefile.msc gcc-4.0.0/zlib/msdos/Makefile.msc
*** gcc-3.4.3/zlib/msdos/Makefile.msc	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/Makefile.msc	Mon Oct 11 18:45:42 2004
***************
*** 1,5 ****
--- 1,6 ----
  # Makefile for zlib
  # Microsoft C 5.1 or later
+ # Last updated: 19-Mar-2003
  
  # To use, do "make makefile.msc"
  # To compile in small model, set below: MODEL=S
*************** LDFLAGS=/noi/e/st:0x1500/noe/farcall/pac
*** 32,106 ****
  # "/farcall/packcode" are only useful for `large code' memory models
  # but should be a "no-op" for small code models.
  
- O=.obj
  
  # variables
! OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
!   trees$(O)
! OBJP1 = adler32$(O)+compress$(O)+crc32$(O)+gzio$(O)+uncompr$(O)+deflate$(O)+\
!   trees$(O)
! OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
!   infutil$(O) inffast$(O)
! OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
!   infutil$(O)+inffast$(O)
  
! ZLIB_H = zlib.h zconf.h
! ZUTIL_H = zutil.h $(ZLIB_H)
  
- ZLIB_LIB = zlib_$(MODEL).lib
  
  all:  $(ZLIB_LIB) example.exe minigzip.exe
  
! # individual dependencies and action rules:
! adler32.obj: adler32.c $(ZLIB_H)
! 	$(CC) -c $(LIB_CFLAGS) $*.c
! 
! compress.obj: compress.c $(ZLIB_H)
  	$(CC) -c $(LIB_CFLAGS) $*.c
  
! crc32.obj: crc32.c $(ZLIB_H)
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! deflate.obj: deflate.c deflate.h $(ZUTIL_H)
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! gzio.obj: gzio.c $(ZUTIL_H)
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! infblock.obj: infblock.c $(ZUTIL_H) infblock.h inftrees.h infcodes.h infutil.h
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! infcodes.obj: infcodes.c $(ZUTIL_H) inftrees.h infutil.h infcodes.h inffast.h
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! inflate.obj: inflate.c $(ZUTIL_H) infblock.h
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! inftrees.obj: inftrees.c $(ZUTIL_H) inftrees.h
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! infutil.obj: infutil.c $(ZUTIL_H) inftrees.h infutil.h
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! inffast.obj: inffast.c $(ZUTIL_H) inftrees.h infutil.h inffast.h
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! trees.obj: trees.c deflate.h $(ZUTIL_H)
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! uncompr.obj: uncompr.c $(ZLIB_H)
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! zutil.obj: zutil.c $(ZUTIL_H)
! 	$(CC) -c $(LIB_CFLAGS) $*.c
  
! example.obj: example.c $(ZLIB_H)
  	$(CC) -c $(CFLAGS) $*.c
  
! minigzip.obj: minigzip.c $(ZLIB_H)
  	$(CC) -c $(CFLAGS) $*.c
  
! # we must cut the command line to fit in the MS/DOS 128 byte limit:
  $(ZLIB_LIB): $(OBJ1) $(OBJ2)
  	if exist $(ZLIB_LIB) del $(ZLIB_LIB)
  	lib $(ZLIB_LIB) $(OBJ1);
--- 33,87 ----
  # "/farcall/packcode" are only useful for `large code' memory models
  # but should be a "no-op" for small code models.
  
  
  # variables
! ZLIB_LIB = zlib_$(MODEL).lib
  
! OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj
! OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj
  
  
+ # targets
  all:  $(ZLIB_LIB) example.exe minigzip.exe
  
! .c.obj:
  	$(CC) -c $(LIB_CFLAGS) $*.c
  
! adler32.obj: adler32.c zlib.h zconf.h
  
! compress.obj: compress.c zlib.h zconf.h
  
! crc32.obj: crc32.c zlib.h zconf.h crc32.h
  
! deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
  
! gzio.obj: gzio.c zutil.h zlib.h zconf.h
  
! infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
!  inffast.h inffixed.h
  
! inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
!  inffast.h
  
! inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
!  inffast.h inffixed.h
  
! inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
  
! trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h
  
! uncompr.obj: uncompr.c zlib.h zconf.h
  
! zutil.obj: zutil.c zutil.h zlib.h zconf.h
  
! example.obj: example.c zlib.h zconf.h
  	$(CC) -c $(CFLAGS) $*.c
  
! minigzip.obj: minigzip.c zlib.h zconf.h
  	$(CC) -c $(CFLAGS) $*.c
  
! 
! # the command line is cut to fit in the MS-DOS 128 byte limit:
  $(ZLIB_LIB): $(OBJ1) $(OBJ2)
  	if exist $(ZLIB_LIB) del $(ZLIB_LIB)
  	lib $(ZLIB_LIB) $(OBJ1);
*************** minigzip.exe: minigzip.obj $(ZLIB_LIB)
*** 114,121 ****
  
  test: example.exe minigzip.exe
  	example
! 	echo hello world | minigzip | minigzip -d 
  
! #clean:
! #	del *.obj
! #	del *.exe
--- 95,106 ----
  
  test: example.exe minigzip.exe
  	example
! 	echo hello world | minigzip | minigzip -d
  
! clean:
! 	-del *.obj
! 	-del *.lib
! 	-del *.exe
! 	-del *.map
! 	-del zlib_*.bak
! 	-del foo.gz
diff -Nrcpad gcc-3.4.3/zlib/msdos/Makefile.tc gcc-4.0.0/zlib/msdos/Makefile.tc
*** gcc-3.4.3/zlib/msdos/Makefile.tc	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/Makefile.tc	Mon Oct 11 18:45:42 2004
***************
*** 1,8 ****
  # Makefile for zlib
! # TurboC 2.0
  
  # To use, do "make -fmakefile.tc"
! # To compile in small model, set below: MODEL=-ms
  
  # WARNING: the small model is supported but only for small values of
  # MAX_WBITS and MAX_MEM_LEVEL. For example:
--- 1,9 ----
  # Makefile for zlib
! # Turbo C 2.01, Turbo C++ 1.01
! # Last updated: 15-Mar-2003
  
  # To use, do "make -fmakefile.tc"
! # To compile in small model, set below: MODEL=s
  
  # WARNING: the small model is supported but only for small values of
  # MAX_WBITS and MAX_MEM_LEVEL. For example:
***************
*** 12,108 ****
  #   -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
  # See zconf.h for details about the memory requirements.
  
! # ------------- Turbo C 2.0 -------------
  MODEL=l
  # CFLAGS=-O2 -G -Z -m$(MODEL) -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
  CFLAGS=-O2 -G -Z -m$(MODEL)
- CC=tcc -I\tc\include
- LD=tcc -L\tc\lib
- AR=tlib
  LDFLAGS=-m$(MODEL) -f-
! O=.obj
  
  # variables
! OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
!   trees$(O)
! OBJP1 = adler32$(O)+compress$(O)+crc32$(O)+gzio$(O)+uncompr$(O)+deflate$(O)+\
!   trees$(O)
! OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
!   infutil$(O) inffast$(O)
! OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
!   infutil$(O)+inffast$(O)
  
! ZLIB_H = zlib.h zconf.h
! ZUTIL_H = zutil.h $(ZLIB_H)
  
- ZLIB_LIB = zlib_$(MODEL).lib
  
! all: test
  
! adler32.obj: adler32.c $(ZLIB_H)
  	$(CC) -c $(CFLAGS) $*.c
  
! compress.obj: compress.c $(ZLIB_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! crc32.obj: crc32.c $(ZLIB_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! deflate.obj: deflate.c deflate.h $(ZUTIL_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! gzio.obj: gzio.c $(ZUTIL_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! infblock.obj: infblock.c $(ZUTIL_H) infblock.h inftrees.h infcodes.h infutil.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! infcodes.obj: infcodes.c $(ZUTIL_H) inftrees.h infutil.h infcodes.h inffast.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! inflate.obj: inflate.c $(ZUTIL_H) infblock.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! inftrees.obj: inftrees.c $(ZUTIL_H) inftrees.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! infutil.obj: infutil.c $(ZUTIL_H) inftrees.h infutil.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! inffast.obj: inffast.c $(ZUTIL_H) inftrees.h infutil.h inffast.h
! 	$(CC) -c $(CFLAGS) $*.c
  
! trees.obj: trees.c deflate.h $(ZUTIL_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! uncompr.obj: uncompr.c $(ZLIB_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! zutil.obj: zutil.c $(ZUTIL_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
! example.obj: example.c $(ZLIB_H)
! 	$(CC) -c $(CFLAGS) $*.c
  
- minigzip.obj: minigzip.c $(ZLIB_H)
- 	$(CC) -c $(CFLAGS) $*.c
  
! # we must cut the command line to fit in the MS/DOS 128 byte limit:
  $(ZLIB_LIB): $(OBJ1) $(OBJ2)
! 	del $(ZLIB_LIB)
! 	$(AR) $(ZLIB_LIB) +$(OBJP1)
! 	$(AR) $(ZLIB_LIB) +$(OBJP2)
  
  example.exe: example.obj $(ZLIB_LIB)
! 	$(LD) $(LDFLAGS) -eexample.exe example.obj $(ZLIB_LIB)
  
  minigzip.exe: minigzip.obj $(ZLIB_LIB)
! 	$(LD) $(LDFLAGS) -eminigzip.exe minigzip.obj $(ZLIB_LIB)
  
  test: example.exe minigzip.exe
  	example
! 	echo hello world | minigzip | minigzip -d 
  
! #clean:
! #	del *.obj
! #	del *.exe
--- 13,94 ----
  #   -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
  # See zconf.h for details about the memory requirements.
  
! # ------------ Turbo C 2.01, Turbo C++ 1.01 ------------
  MODEL=l
+ CC=tcc
+ LD=tcc
+ AR=tlib
  # CFLAGS=-O2 -G -Z -m$(MODEL) -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
  CFLAGS=-O2 -G -Z -m$(MODEL)
  LDFLAGS=-m$(MODEL) -f-
! 
  
  # variables
! ZLIB_LIB = zlib_$(MODEL).lib
  
! OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj
! OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj
! OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj
! OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj
  
  
! # targets
! all: $(ZLIB_LIB) example.exe minigzip.exe
  
! .c.obj:
  	$(CC) -c $(CFLAGS) $*.c
  
! adler32.obj: adler32.c zlib.h zconf.h
  
! compress.obj: compress.c zlib.h zconf.h
  
! crc32.obj: crc32.c zlib.h zconf.h crc32.h
  
! deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
  
! gzio.obj: gzio.c zutil.h zlib.h zconf.h
  
! infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
!  inffast.h inffixed.h
  
! inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
!  inffast.h
  
! inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
!  inffast.h inffixed.h
  
! inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
  
! trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h
  
! uncompr.obj: uncompr.c zlib.h zconf.h
  
! zutil.obj: zutil.c zutil.h zlib.h zconf.h
  
! example.obj: example.c zlib.h zconf.h
  
! minigzip.obj: minigzip.c zlib.h zconf.h
  
  
! # the command line is cut to fit in the MS-DOS 128 byte limit:
  $(ZLIB_LIB): $(OBJ1) $(OBJ2)
! 	-del $(ZLIB_LIB)
! 	$(AR) $(ZLIB_LIB) $(OBJP1)
! 	$(AR) $(ZLIB_LIB) $(OBJP2)
  
  example.exe: example.obj $(ZLIB_LIB)
! 	$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
  
  minigzip.exe: minigzip.obj $(ZLIB_LIB)
! 	$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)
  
  test: example.exe minigzip.exe
  	example
! 	echo hello world | minigzip | minigzip -d
  
! clean:
! 	-del *.obj
! 	-del *.lib
! 	-del *.exe
! 	-del zlib_*.bak
! 	-del foo.gz
diff -Nrcpad gcc-3.4.3/zlib/msdos/Makefile.w32 gcc-4.0.0/zlib/msdos/Makefile.w32
*** gcc-3.4.3/zlib/msdos/Makefile.w32	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/Makefile.w32	Thu Jan  1 00:00:00 1970
***************
*** 1,97 ****
- # Makefile for zlib
- # Microsoft 32-bit Visual C++ 4.0 or later (may work on earlier versions)
- 
- # To use, do "nmake /f makefile.w32"
- 
- # If you wish to reduce the memory requirements (default 256K for big
- # objects plus a few K), you can add to CFLAGS below: 
- #   -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
- # See zconf.h for details about the memory requirements.
- 
- # ------------- Microsoft Visual C++ 4.0 and later -------------
- MODEL=
- CFLAGS=-Ox -GA3s -nologo -W3
- CC=cl
- LD=link
- LDFLAGS=
- O=.obj
- 
- # variables
- OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
-   trees$(O)
- OBJP1 = adler32$(O)+compress$(O)+crc32$(O)+gzio$(O)+uncompr$(O)+deflate$(O)+\
-   trees$(O)
- OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
-   infutil$(O) inffast$(O)
- OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
-   infutil$(O)+inffast$(O)
- 
- all:  zlib.lib example.exe minigzip.exe
- 
- adler32.obj: adler32.c zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- compress.obj: compress.c zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- crc32.obj: crc32.c zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- gzio.obj: gzio.c zutil.h zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\
-    infcodes.h infutil.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\
-    infcodes.h inffast.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- uncompr.obj: uncompr.c zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- zutil.obj: zutil.c zutil.h zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- example.obj: example.c zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- minigzip.obj: minigzip.c zlib.h zconf.h
-   $(CC) -c $(CFLAGS) $*.c
- 
- zlib.lib: $(OBJ1) $(OBJ2)
-   if exist zlib.lib del zlib.lib
-   lib /OUT:zlib.lib $(OBJ1) $(OBJ2)
- 
- example.exe: example.obj zlib.lib
-   $(LD) $(LDFLAGS) example.obj zlib.lib /OUT:example.exe /SUBSYSTEM:CONSOLE
- 
- minigzip.exe: minigzip.obj zlib.lib
-   $(LD) $(LDFLAGS) minigzip.obj zlib.lib /OUT:minigzip.exe /SUBSYSTEM:CONSOLE
- 
- test: example.exe minigzip.exe
-   example
-   echo hello world | minigzip | minigzip -d 
- 
- #clean:
- #  del *.obj
- #  del *.exe
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/msdos/Makefile.wat gcc-4.0.0/zlib/msdos/Makefile.wat
*** gcc-3.4.3/zlib/msdos/Makefile.wat	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/Makefile.wat	Thu Jan  1 00:00:00 1970
***************
*** 1,103 ****
- # Makefile for zlib
- # Watcom 10a
- 
- # This version of the zlib makefile was adapted by Chris Young for use
- # with Watcom 10a 32-bit protected mode flat memory model.  It was created 
- # for use with POV-Ray ray tracer and you may choose to edit the CFLAGS to 
- # suit your needs but the -DMSDOS is required.
- # -- Chris Young 76702.1655@compuserve.com
- 
- # To use, do "wmake -f makefile.wat"
- 
- # See zconf.h for details about the memory requirements.
- 
- # ------------- Watcom 10a -------------
- MODEL=-mf 
- CFLAGS= $(MODEL) -fpi87 -fp5 -zp4 -5r -w5 -oneatx -DMSDOS
- CC=wcc386
- LD=wcl386
- LIB=wlib -b -c 
- LDFLAGS= 
- O=.obj
- 
- # variables
- OBJ1=adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) 
- OBJ2=trees$(O) zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) 
- OBJ3=infutil$(O) inffast$(O)
- OBJP1=adler32$(O)+compress$(O)+crc32$(O)+gzio$(O)+uncompr$(O)+deflate$(O)
- OBJP2=trees$(O)+zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)
- OBJP3=infutil$(O)+inffast$(O)
- 
- all: test
- 
- adler32.obj: adler32.c zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- compress.obj: compress.c zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- crc32.obj: crc32.c zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- gzio.obj: gzio.c zutil.h zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h &
-   infcodes.h infutil.h
- 	$(CC) $(CFLAGS) $*.c
- 
- infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h &
-   infcodes.h inffast.h
- 	$(CC) $(CFLAGS) $*.c
- 
- inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h
- 	$(CC) $(CFLAGS) $*.c
- 
- inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
- 	$(CC) $(CFLAGS) $*.c
- 
- infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
- 	$(CC) $(CFLAGS) $*.c
- 
- inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
- 	$(CC) $(CFLAGS) $*.c
- 
- trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- uncompr.obj: uncompr.c zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- zutil.obj: zutil.c zutil.h zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- example.obj: example.c zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- minigzip.obj: minigzip.c zlib.h zconf.h
- 	$(CC) $(CFLAGS) $*.c
- 
- # we must cut the command line to fit in the MS/DOS 128 byte limit:
- zlib.lib: $(OBJ1) $(OBJ2) $(OBJ3) 
- 	del zlib.lib
- 	$(LIB) zlib.lib +$(OBJP1)
- 	$(LIB) zlib.lib +$(OBJP2)
- 	$(LIB) zlib.lib +$(OBJP3)
- 
- example.exe: example.obj zlib.lib
- 	$(LD) $(LDFLAGS) example.obj zlib.lib
- 
- minigzip.exe: minigzip.obj zlib.lib
- 	$(LD) $(LDFLAGS) minigzip.obj zlib.lib
- 
- test: minigzip.exe example.exe
- 	example
- 	echo hello world | minigzip | minigzip -d >test
- 	type test
- 
- #clean:
- #	del *.obj
- #	del *.exe
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/msdos/zlib.def gcc-4.0.0/zlib/msdos/zlib.def
*** gcc-3.4.3/zlib/msdos/zlib.def	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/zlib.def	Thu Jan  1 00:00:00 1970
***************
*** 1,60 ****
- LIBRARY		"zlib"
- 
- DESCRIPTION	'"""zlib data compression library"""'
- 
- EXETYPE		NT
- 
- SUBSYSTEM	WINDOWS
- 
- STUB		'WINSTUB.EXE'
- 
- VERSION		1.13
- 
- CODE		 EXECUTE READ
- 
- DATA		 READ WRITE
- 
- HEAPSIZE	1048576,4096
- 
- EXPORTS
-     adler32                        @1
-     compress                       @2
-     crc32                          @3
-     deflate                        @4
-     deflateCopy                    @5
-     deflateEnd                     @6
-     deflateInit2_                  @7
-     deflateInit_                   @8
-     deflateParams                  @9
-     deflateReset                   @10
-     deflateSetDictionary           @11
-     gzclose                        @12
-     gzdopen                        @13
-     gzerror                        @14
-     gzflush                        @15
-     gzopen                         @16
-     gzread                         @17
-     gzwrite                        @18
-     inflate                        @19
-     inflateEnd                     @20
-     inflateInit2_                  @21
-     inflateInit_                   @22
-     inflateReset                   @23
-     inflateSetDictionary           @24
-     inflateSync                    @25
-     uncompress                     @26
-     zlibVersion                    @27
-     gzprintf                       @28
-     gzputc                         @29
-     gzgetc                         @30
-     gzseek                         @31
-     gzrewind                       @32
-     gztell                         @33
-     gzeof                          @34
-     gzsetparams                    @35
-     zError                         @36
-     inflateSyncPoint               @37
-     get_crc_table                  @38
-     compress2                      @39
-     gzputs                         @40
-     gzgets                         @41
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/msdos/zlib.rc gcc-4.0.0/zlib/msdos/zlib.rc
*** gcc-3.4.3/zlib/msdos/zlib.rc	Mon Mar 11 21:49:57 2002
--- gcc-4.0.0/zlib/msdos/zlib.rc	Thu Jan  1 00:00:00 1970
***************
*** 1,32 ****
- #include <windows.h>
- 
- #define IDR_VERSION1  1
- IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE
-   FILEVERSION	 1,1,3,0
-   PRODUCTVERSION 1,1,3,0
-   FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
-   FILEFLAGS	0
-   FILEOS	VOS_DOS_WINDOWS32
-   FILETYPE	VFT_DLL
-   FILESUBTYPE	0	// not used
- BEGIN
-   BLOCK "StringFileInfo"
-   BEGIN
-     BLOCK "040904E4"
-     //language ID = U.S. English, char set = Windows, Multilingual
- 
-     BEGIN
-       VALUE "FileDescription", "zlib data compression library\0"
-       VALUE "FileVersion",	"1.1.3\0"
-       VALUE "InternalName",	"zlib\0"
-       VALUE "OriginalFilename",	"zlib.dll\0"
-       VALUE "ProductName",	"ZLib.DLL\0"
-       VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
-       VALUE "LegalCopyright", "(C) 1995-1998 Jean-loup Gailly & Mark Adler\0"
-     END
-   END
-   BLOCK "VarFileInfo"
-   BEGIN
-     VALUE "Translation", 0x0409, 1252
-   END
- END
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/nt/Makefile.emx gcc-4.0.0/zlib/nt/Makefile.emx
*** gcc-3.4.3/zlib/nt/Makefile.emx	Mon Mar 11 21:50:04 2002
--- gcc-4.0.0/zlib/nt/Makefile.emx	Thu Jan  1 00:00:00 1970
***************
*** 1,138 ****
- # Makefile for zlib.  Modified for emx/rsxnt by Chr. Spieler, 6/16/98.
- # Copyright (C) 1995-1998 Jean-loup Gailly.
- # For conditions of distribution and use, see copyright notice in zlib.h 
- 
- # To compile, or to compile and test, type:
- # 
- #   make -fmakefile.emx;  make test -fmakefile.emx
- # 
- 
- CC=gcc -Zwin32
- 
- #CFLAGS=-MMD -O
- #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
- #CFLAGS=-MMD -g -DDEBUG
- CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
-              -Wstrict-prototypes -Wmissing-prototypes
- 
- # If cp.exe is available, replace "copy /Y" with "cp -fp" .
- CP=copy /Y
- # If gnu install.exe is available, replace $(CP) with ginstall.
- INSTALL=$(CP)
- # The default value of RM is "rm -f."  If "rm.exe" is found, comment out:
- RM=del
- LDLIBS=-L. -lzlib
- LD=$(CC) -s -o
- LDSHARED=$(CC)
- 
- INCL=zlib.h zconf.h
- LIBS=zlib.a
- 
- AR=ar rcs
- 
- prefix=/usr/local
- exec_prefix = $(prefix)
- 
- OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
-        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
- 
- TEST_OBJS = example.o minigzip.o
- 
- all: example.exe minigzip.exe
- 
- test: all
- 	./example
- 	echo hello world | .\minigzip | .\minigzip -d 
- 
- %.o : %.c
- 	$(CC) $(CFLAGS) -c $< -o $@
- 
- zlib.a: $(OBJS)
- 	$(AR) $@ $(OBJS)
- 
- %.exe : %.o $(LIBS)
- 	$(LD) $@ $< $(LDLIBS)
- 
- 
- .PHONY : clean
- 
- clean:
- 	$(RM) *.d
- 	$(RM) *.o
- 	$(RM) *.exe
- 	$(RM) zlib.a
- 	$(RM) foo.gz
- 
- DEPS := $(wildcard *.d)
- ifneq ($(DEPS),)
- include $(DEPS)
- endif
- # Makefile for zlib.  Modified for emx 0.9c by Chr. Spieler, 6/17/98.
- # Copyright (C) 1995-1998 Jean-loup Gailly.
- # For conditions of distribution and use, see copyright notice in zlib.h 
- 
- # To compile, or to compile and test, type:
- # 
- #   make -fmakefile.emx;  make test -fmakefile.emx
- # 
- 
- CC=gcc
- 
- #CFLAGS=-MMD -O
- #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
- #CFLAGS=-MMD -g -DDEBUG
- CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
-              -Wstrict-prototypes -Wmissing-prototypes
- 
- # If cp.exe is available, replace "copy /Y" with "cp -fp" .
- CP=copy /Y
- # If gnu install.exe is available, replace $(CP) with ginstall.
- INSTALL=$(CP)
- # The default value of RM is "rm -f."  If "rm.exe" is found, comment out:
- RM=del
- LDLIBS=-L. -lzlib
- LD=$(CC) -s -o
- LDSHARED=$(CC)
- 
- INCL=zlib.h zconf.h
- LIBS=zlib.a
- 
- AR=ar rcs
- 
- prefix=/usr/local
- exec_prefix = $(prefix)
- 
- OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
-        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
- 
- TEST_OBJS = example.o minigzip.o
- 
- all: example.exe minigzip.exe
- 
- test: all
- 	./example
- 	echo hello world | .\minigzip | .\minigzip -d 
- 
- %.o : %.c
- 	$(CC) $(CFLAGS) -c $< -o $@
- 
- zlib.a: $(OBJS)
- 	$(AR) $@ $(OBJS)
- 
- %.exe : %.o $(LIBS)
- 	$(LD) $@ $< $(LDLIBS)
- 
- 
- .PHONY : clean
- 
- clean:
- 	$(RM) *.d
- 	$(RM) *.o
- 	$(RM) *.exe
- 	$(RM) zlib.a
- 	$(RM) foo.gz
- 
- DEPS := $(wildcard *.d)
- ifneq ($(DEPS),)
- include $(DEPS)
- endif
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/nt/Makefile.gcc gcc-4.0.0/zlib/nt/Makefile.gcc
*** gcc-3.4.3/zlib/nt/Makefile.gcc	Mon Mar 11 21:50:05 2002
--- gcc-4.0.0/zlib/nt/Makefile.gcc	Thu Jan  1 00:00:00 1970
***************
*** 1,87 ****
- # Makefile for zlib.  Modified for mingw32 by C. Spieler, 6/16/98.
- # (This Makefile is directly derived from Makefile.dj2)
- # Copyright (C) 1995-1998 Jean-loup Gailly.
- # For conditions of distribution and use, see copyright notice in zlib.h 
- 
- # To compile, or to compile and test, type:
- # 
- #   make -fmakefile.gcc;  make test -fmakefile.gcc
- # 
- # To install libz.a, zconf.h and zlib.h in the mingw32 directories, type:
- # 
- #    make install -fmakefile.gcc
- # 
- 
- CC=gcc
- 
- #CFLAGS=-MMD -O
- #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
- #CFLAGS=-MMD -g -DDEBUG
- CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
-              -Wstrict-prototypes -Wmissing-prototypes
- 
- # If cp.exe is available, replace "copy /Y" with "cp -fp" .
- CP=copy /Y
- # If gnu install.exe is available, replace $(CP) with ginstall.
- INSTALL=$(CP)
- # The default value of RM is "rm -f."  If "rm.exe" is found, comment out:
- RM=del
- LDLIBS=-L. -lz
- LD=$(CC) -s -o
- LDSHARED=$(CC)
- 
- INCL=zlib.h zconf.h
- LIBS=libz.a
- 
- AR=ar rcs
- 
- prefix=/usr/local
- exec_prefix = $(prefix)
- 
- OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
-        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
- 
- TEST_OBJS = example.o minigzip.o
- 
- all: example.exe minigzip.exe
- 
- test: all
- 	./example
- 	echo hello world | .\minigzip | .\minigzip -d 
- 
- %.o : %.c
- 	$(CC) $(CFLAGS) -c $< -o $@
- 
- libz.a: $(OBJS)
- 	$(AR) $@ $(OBJS)
- 
- %.exe : %.o $(LIBS)
- 	$(LD) $@ $< $(LDLIBS)
- 
- # INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env .
- 
- .PHONY : uninstall clean
- 
- install: $(INCL) $(LIBS)
- 	-@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH)
- 	-@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH)
- 	$(INSTALL) zlib.h $(INCLUDE_PATH)
- 	$(INSTALL) zconf.h $(INCLUDE_PATH)
- 	$(INSTALL) libz.a $(LIBRARY_PATH)
- 
- uninstall:
- 	$(RM) $(INCLUDE_PATH)\zlib.h
- 	$(RM) $(INCLUDE_PATH)\zconf.h
- 	$(RM) $(LIBRARY_PATH)\libz.a
- 
- clean:
- 	$(RM) *.d
- 	$(RM) *.o
- 	$(RM) *.exe
- 	$(RM) libz.a
- 	$(RM) foo.gz
- 
- DEPS := $(wildcard *.d)
- ifneq ($(DEPS),)
- include $(DEPS)
- endif
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/nt/Makefile.nt gcc-4.0.0/zlib/nt/Makefile.nt
*** gcc-3.4.3/zlib/nt/Makefile.nt	Mon Mar 11 21:50:05 2002
--- gcc-4.0.0/zlib/nt/Makefile.nt	Thu Jan  1 00:00:00 1970
***************
*** 1,88 ****
- # Makefile for zlib
- 
- !include <ntwin32.mak>
- 
- CC=cl
- LD=link
- CFLAGS=-O -nologo
- LDFLAGS=
- O=.obj
- 
- # variables
- OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
-   trees$(O)
- OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
-   infutil$(O) inffast$(O)
- 
- all:  zlib.dll example.exe minigzip.exe
- 
- adler32.obj: adler32.c zutil.h zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- compress.obj: compress.c zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- crc32.obj: crc32.c zutil.h zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- gzio.obj: gzio.c zutil.h zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\
-    infcodes.h infutil.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\
-    infcodes.h inffast.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- uncompr.obj: uncompr.c zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- zutil.obj: zutil.c zutil.h zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- example.obj: example.c zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- minigzip.obj: minigzip.c zlib.h zconf.h
- 	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
- 
- zlib.dll: $(OBJ1) $(OBJ2) zlib.dnt
- 	link $(dlllflags) -out:$@ -def:zlib.dnt $(OBJ1) $(OBJ2) $(guilibsdll)
- 
- zlib.lib: zlib.dll
- 
- example.exe: example.obj zlib.lib
- 	$(LD) $(LDFLAGS) example.obj zlib.lib
- 
- minigzip.exe: minigzip.obj zlib.lib
- 	$(LD) $(LDFLAGS) minigzip.obj zlib.lib
- 
- test: example.exe minigzip.exe
- 	example
- 	echo hello world | minigzip | minigzip -d 
- 
- clean:
- 	del *.obj
- 	del *.exe
- 	del *.dll
- 	del *.lib
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/nt/zlib.dnt gcc-4.0.0/zlib/nt/zlib.dnt
*** gcc-3.4.3/zlib/nt/zlib.dnt	Mon Mar 11 21:50:05 2002
--- gcc-4.0.0/zlib/nt/zlib.dnt	Thu Jan  1 00:00:00 1970
***************
*** 1,47 ****
- LIBRARY		zlib.dll
- EXETYPE WINDOWS
- CODE		 PRELOAD MOVEABLE DISCARDABLE
- DATA		 PRELOAD MOVEABLE MULTIPLE
- 
- EXPORTS
-     adler32                        @1
-     compress                       @2
-     crc32                          @3
-     deflate                        @4
-     deflateCopy                    @5
-     deflateEnd                     @6
-     deflateInit2_                  @7
-     deflateInit_                   @8
-     deflateParams                  @9
-     deflateReset                   @10
-     deflateSetDictionary           @11
-     gzclose                        @12
-     gzdopen                        @13
-     gzerror                        @14
-     gzflush                        @15
-     gzopen                         @16
-     gzread                         @17
-     gzwrite                        @18
-     inflate                        @19
-     inflateEnd                     @20
-     inflateInit2_                  @21
-     inflateInit_                   @22
-     inflateReset                   @23
-     inflateSetDictionary           @24
-     inflateSync                    @25
-     uncompress                     @26
-     zlibVersion                    @27
-     gzprintf                       @28
-     gzputc                         @29
-     gzgetc                         @30
-     gzseek                         @31
-     gzrewind                       @32
-     gztell                         @33
-     gzeof                          @34
-     gzsetparams                    @35
-     zError                         @36
-     inflateSyncPoint               @37
-     get_crc_table                  @38
-     compress2                      @39
-     gzputs                         @40
-     gzgets                         @41
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/old/Make_vms.com gcc-4.0.0/zlib/old/Make_vms.com
*** gcc-3.4.3/zlib/old/Make_vms.com	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/old/Make_vms.com	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,115 ----
+ $! make libz under VMS
+ $! written by Martin P.J. Zinser <m.zinser@gsi.de>
+ $!
+ $! Look for the compiler used
+ $!
+ $ ccopt = ""
+ $ if f$getsyi("HW_MODEL").ge.1024
+ $ then
+ $  ccopt = "/prefix=all"+ccopt
+ $  comp  = "__decc__=1"
+ $  if f$trnlnm("SYS").eqs."" then define sys sys$library:
+ $ else
+ $  if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").eqs.""
+ $   then
+ $    comp  = "__vaxc__=1"
+ $    if f$trnlnm("SYS").eqs."" then define sys sys$library:
+ $   else
+ $    if f$trnlnm("SYS").eqs."" then define sys decc$library_include:
+ $    ccopt = "/decc/prefix=all"+ccopt
+ $    comp  = "__decc__=1"
+ $  endif
+ $ endif
+ $!
+ $! Build the thing plain or with mms
+ $!
+ $ write sys$output "Compiling Zlib sources ..."
+ $ if f$search("SYS$SYSTEM:MMS.EXE").eqs.""
+ $  then
+ $   dele example.obj;*,minigzip.obj;*
+ $   CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" -
+                 adler32.c zlib.h zconf.h
+ $   CALL MAKE compress.OBJ "CC ''CCOPT' compress" -
+                 compress.c zlib.h zconf.h
+ $   CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" -
+                 crc32.c zlib.h zconf.h
+ $   CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" -
+                 deflate.c deflate.h zutil.h zlib.h zconf.h
+ $   CALL MAKE gzio.OBJ "CC ''CCOPT' gzio" -
+                 gzio.c zutil.h zlib.h zconf.h
+ $   CALL MAKE infblock.OBJ "CC ''CCOPT' infblock" -
+                 infblock.c zutil.h zlib.h zconf.h infblock.h
+ $   CALL MAKE infcodes.OBJ "CC ''CCOPT' infcodes" -
+                 infcodes.c zutil.h zlib.h zconf.h inftrees.h
+ $   CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" -
+                 inffast.c zutil.h zlib.h zconf.h inffast.h
+ $   CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" -
+                 inflate.c zutil.h zlib.h zconf.h infblock.h
+ $   CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" -
+                 inftrees.c zutil.h zlib.h zconf.h inftrees.h
+ $   CALL MAKE infutil.OBJ "CC ''CCOPT' infutil" -
+                 infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
+ $   CALL MAKE trees.OBJ "CC ''CCOPT' trees" -
+                 trees.c deflate.h zutil.h zlib.h zconf.h
+ $   CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" -
+                 uncompr.c zlib.h zconf.h
+ $   CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" -
+                 zutil.c zutil.h zlib.h zconf.h
+ $   write sys$output "Building Zlib ..."
+ $   CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ
+ $   write sys$output "Building example..."
+ $   CALL MAKE example.OBJ "CC ''CCOPT' example" -
+                 example.c zlib.h zconf.h
+ $   call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb
+ $   write sys$output "Building minigzip..."
+ $   CALL MAKE minigzip.OBJ "CC ''CCOPT' minigzip" -
+                 minigzip.c zlib.h zconf.h
+ $   call make minigzip.exe -
+                 "LINK minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib" -
+                 minigzip.obj libz.olb
+ $  else
+ $   mms/macro=('comp')
+ $  endif
+ $ write sys$output "Zlib build completed"
+ $ exit
+ $!
+ $!
+ $MAKE: SUBROUTINE   !SUBROUTINE TO CHECK DEPENDENCIES
+ $ V = 'F$Verify(0)
+ $! P1 = What we are trying to make
+ $! P2 = Command to make it
+ $! P3 - P8  What it depends on
+ $
+ $ If F$Search(P1) .Eqs. "" Then Goto Makeit
+ $ Time = F$CvTime(F$File(P1,"RDT"))
+ $arg=3
+ $Loop:
+ $       Argument = P'arg
+ $       If Argument .Eqs. "" Then Goto Exit
+ $       El=0
+ $Loop2:
+ $       File = F$Element(El," ",Argument)
+ $       If File .Eqs. " " Then Goto Endl
+ $       AFile = ""
+ $Loop3:
+ $       OFile = AFile
+ $       AFile = F$Search(File)
+ $       If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
+ $       If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
+ $       Goto Loop3
+ $NextEL:
+ $       El = El + 1
+ $       Goto Loop2
+ $EndL:
+ $ arg=arg+1
+ $ If arg .Le. 8 Then Goto Loop
+ $ Goto Exit
+ $
+ $Makeit:
+ $ VV=F$VERIFY(0)
+ $ write sys$output P2
+ $ 'P2
+ $ VV='F$Verify(VV)
+ $Exit:
+ $ If V Then Set Verify
+ $ENDSUBROUTINE
diff -Nrcpad gcc-3.4.3/zlib/old/Makefile.riscos gcc-4.0.0/zlib/old/Makefile.riscos
*** gcc-3.4.3/zlib/old/Makefile.riscos	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/old/Makefile.riscos	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,151 ----
+ # Project:   zlib_1_03
+ # Patched for zlib 1.1.2 rw@shadow.org.uk 19980430
+ # test works out-of-the-box, installs `somewhere' on demand
+ 
+ # Toolflags:
+ CCflags = -c -depend !Depend -IC: -g -throwback  -DRISCOS  -fah 
+ C++flags = -c -depend !Depend -IC: -throwback
+ Linkflags = -aif -c++ -o $@ 
+ ObjAsmflags = -throwback -NoCache -depend !Depend
+ CMHGflags = 
+ LibFileflags = -c -l -o $@ 
+ Squeezeflags = -o $@
+ 
+ # change the line below to where _you_ want the library installed.
+ libdest = lib:zlib
+ 
+ # Final targets:
+ @.lib:   @.o.adler32 @.o.compress @.o.crc32 @.o.deflate @.o.gzio \
+         @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil @.o.trees \
+         @.o.uncompr @.o.zutil 
+         LibFile $(LibFileflags) @.o.adler32 @.o.compress @.o.crc32 @.o.deflate \
+         @.o.gzio @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil \
+         @.o.trees @.o.uncompr @.o.zutil 
+ test:   @.minigzip @.example @.lib
+ 	@copy @.lib @.libc  A~C~DF~L~N~P~Q~RS~TV
+ 	@echo running tests: hang on.
+ 	@/@.minigzip -f -9 libc
+ 	@/@.minigzip -d libc-gz
+ 	@/@.minigzip -f -1 libc
+ 	@/@.minigzip -d libc-gz
+ 	@/@.minigzip -h -9 libc
+ 	@/@.minigzip -d libc-gz
+ 	@/@.minigzip -h -1 libc
+ 	@/@.minigzip -d libc-gz
+ 	@/@.minigzip -9 libc
+ 	@/@.minigzip -d libc-gz
+ 	@/@.minigzip -1 libc
+ 	@/@.minigzip -d libc-gz
+ 	@diff @.lib @.libc
+ 	@echo that should have reported '@.lib and @.libc identical' if you have diff.
+ 	@/@.example @.fred @.fred
+ 	@echo that will have given lots of hello!'s.
+ 
+ @.minigzip:   @.o.minigzip @.lib C:o.Stubs 
+         Link $(Linkflags) @.o.minigzip @.lib C:o.Stubs 
+ @.example:   @.o.example @.lib C:o.Stubs 
+         Link $(Linkflags) @.o.example @.lib C:o.Stubs
+ 
+ install: @.lib
+ 	cdir $(libdest)
+ 	cdir $(libdest).h
+ 	@copy @.h.zlib $(libdest).h.zlib A~C~DF~L~N~P~Q~RS~TV
+ 	@copy @.h.zconf $(libdest).h.zconf A~C~DF~L~N~P~Q~RS~TV
+ 	@copy @.lib $(libdest).lib  A~C~DF~L~N~P~Q~RS~TV
+ 	@echo okay, installed zlib in $(libdest)
+ 
+ clean:; remove @.minigzip
+ 	remove @.example
+ 	remove @.libc
+ 	-wipe @.o.* F~r~cV
+ 	remove @.fred
+ 
+ # User-editable dependencies:
+ .c.o:
+         cc $(ccflags) -o $@ $<
+ 
+ # Static dependencies:
+ 
+ # Dynamic dependencies:
+ o.example:	c.example
+ o.example:	h.zlib
+ o.example:	h.zconf
+ o.minigzip:	c.minigzip
+ o.minigzip:	h.zlib
+ o.minigzip:	h.zconf
+ o.adler32:	c.adler32
+ o.adler32:	h.zlib
+ o.adler32:	h.zconf
+ o.compress:	c.compress
+ o.compress:	h.zlib
+ o.compress:	h.zconf
+ o.crc32:	c.crc32
+ o.crc32:	h.zlib
+ o.crc32:	h.zconf
+ o.deflate:	c.deflate
+ o.deflate:	h.deflate
+ o.deflate:	h.zutil
+ o.deflate:	h.zlib
+ o.deflate:	h.zconf
+ o.gzio:	c.gzio
+ o.gzio:	h.zutil
+ o.gzio:	h.zlib
+ o.gzio:	h.zconf
+ o.infblock:	c.infblock
+ o.infblock:	h.zutil
+ o.infblock:	h.zlib
+ o.infblock:	h.zconf
+ o.infblock:	h.infblock
+ o.infblock:	h.inftrees
+ o.infblock:	h.infcodes
+ o.infblock:	h.infutil
+ o.infcodes:	c.infcodes
+ o.infcodes:	h.zutil
+ o.infcodes:	h.zlib
+ o.infcodes:	h.zconf
+ o.infcodes:	h.inftrees
+ o.infcodes:	h.infblock
+ o.infcodes:	h.infcodes
+ o.infcodes:	h.infutil
+ o.infcodes:	h.inffast
+ o.inffast:	c.inffast
+ o.inffast:	h.zutil
+ o.inffast:	h.zlib
+ o.inffast:	h.zconf
+ o.inffast:	h.inftrees
+ o.inffast:	h.infblock
+ o.inffast:	h.infcodes
+ o.inffast:	h.infutil
+ o.inffast:	h.inffast
+ o.inflate:	c.inflate
+ o.inflate:	h.zutil
+ o.inflate:	h.zlib
+ o.inflate:	h.zconf
+ o.inflate:	h.infblock
+ o.inftrees:	c.inftrees
+ o.inftrees:	h.zutil
+ o.inftrees:	h.zlib
+ o.inftrees:	h.zconf
+ o.inftrees:	h.inftrees
+ o.inftrees:	h.inffixed
+ o.infutil:	c.infutil
+ o.infutil:	h.zutil
+ o.infutil:	h.zlib
+ o.infutil:	h.zconf
+ o.infutil:	h.infblock
+ o.infutil:	h.inftrees
+ o.infutil:	h.infcodes
+ o.infutil:	h.infutil
+ o.trees:	c.trees
+ o.trees:	h.deflate
+ o.trees:	h.zutil
+ o.trees:	h.zlib
+ o.trees:	h.zconf
+ o.trees:	h.trees
+ o.uncompr:	c.uncompr
+ o.uncompr:	h.zlib
+ o.uncompr:	h.zconf
+ o.zutil:	c.zutil
+ o.zutil:	h.zutil
+ o.zutil:	h.zlib
+ o.zutil:	h.zconf
diff -Nrcpad gcc-3.4.3/zlib/old/README gcc-4.0.0/zlib/old/README
*** gcc-3.4.3/zlib/old/README	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/old/README	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,3 ----
+ This directory contains files that have not been updated for zlib 1.2.1
+ 
+ (Volunteers are encouraged to help clean this up.  Thanks.)
diff -Nrcpad gcc-3.4.3/zlib/old/descrip.mms gcc-4.0.0/zlib/old/descrip.mms
*** gcc-3.4.3/zlib/old/descrip.mms	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/old/descrip.mms	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,48 ----
+ # descrip.mms: MMS description file for building zlib on VMS
+ # written by Martin P.J. Zinser <m.zinser@gsi.de>
+ 
+ cc_defs =
+ c_deb =
+ 
+ .ifdef __DECC__
+ pref = /prefix=all
+ .endif
+ 
+ OBJS = adler32.obj, compress.obj, crc32.obj, gzio.obj, uncompr.obj,\
+        deflate.obj, trees.obj, zutil.obj, inflate.obj, infblock.obj,\
+        inftrees.obj, infcodes.obj, infutil.obj, inffast.obj
+ 
+ CFLAGS= $(C_DEB) $(CC_DEFS) $(PREF)
+ 
+ all : example.exe minigzip.exe
+         @ write sys$output " Example applications available"
+ libz.olb : libz.olb($(OBJS))
+ 	@ write sys$output " libz available"
+ 
+ example.exe : example.obj libz.olb
+               link example,libz.olb/lib
+ 
+ minigzip.exe : minigzip.obj libz.olb
+               link minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib
+ 
+ clean :
+ 	delete *.obj;*,libz.olb;*
+ 
+ 
+ # Other dependencies.
+ adler32.obj : zutil.h zlib.h zconf.h
+ compress.obj : zlib.h zconf.h
+ crc32.obj : zutil.h zlib.h zconf.h
+ deflate.obj : deflate.h zutil.h zlib.h zconf.h
+ example.obj : zlib.h zconf.h
+ gzio.obj : zutil.h zlib.h zconf.h
+ infblock.obj : zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h
+ infcodes.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h infcodes.h inffast.h
+ inffast.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
+ inflate.obj : zutil.h zlib.h zconf.h infblock.h
+ inftrees.obj : zutil.h zlib.h zconf.h inftrees.h
+ infutil.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h
+ minigzip.obj : zlib.h zconf.h
+ trees.obj : deflate.h zutil.h zlib.h zconf.h
+ uncompr.obj : zlib.h zconf.h
+ zutil.obj : zutil.h zlib.h zconf.h
diff -Nrcpad gcc-3.4.3/zlib/old/os2/Makefile.os2 gcc-4.0.0/zlib/old/os2/Makefile.os2
*** gcc-3.4.3/zlib/old/os2/Makefile.os2	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/old/os2/Makefile.os2	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,136 ----
+ # Makefile for zlib under OS/2 using GCC (PGCC)
+ # For conditions of distribution and use, see copyright notice in zlib.h
+ 
+ # To compile and test, type:
+ #   cp Makefile.os2 ..
+ #   cd ..
+ #   make -f Makefile.os2 test
+ 
+ # This makefile will build a static library z.lib, a shared library
+ # z.dll and a import library zdll.lib. You can use either z.lib or
+ # zdll.lib by specifying either -lz or -lzdll on gcc's command line
+ 
+ CC=gcc -Zomf -s
+ 
+ CFLAGS=-O6 -Wall
+ #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
+ #CFLAGS=-g -DDEBUG
+ #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
+ #           -Wstrict-prototypes -Wmissing-prototypes
+ 
+ #################### BUG WARNING: #####################
+ ## infcodes.c hits a bug in pgcc-1.0, so you have to use either
+ ## -O# where # <= 4 or one of (-fno-ommit-frame-pointer or -fno-force-mem)
+ ## This bug is reportedly fixed in pgcc >1.0, but this was not tested
+ CFLAGS+=-fno-force-mem
+ 
+ LDFLAGS=-s -L. -lzdll -Zcrtdll
+ LDSHARED=$(CC) -s -Zomf -Zdll -Zcrtdll
+ 
+ VER=1.1.0
+ ZLIB=z.lib
+ SHAREDLIB=z.dll
+ SHAREDLIBIMP=zdll.lib
+ LIBS=$(ZLIB) $(SHAREDLIB) $(SHAREDLIBIMP)
+ 
+ AR=emxomfar cr
+ IMPLIB=emximp
+ RANLIB=echo
+ TAR=tar
+ SHELL=bash
+ 
+ prefix=/usr/local
+ exec_prefix = $(prefix)
+ 
+ OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
+        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
+ 
+ TEST_OBJS = example.o minigzip.o
+ 
+ DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \
+   algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \
+   nt/Makefile.nt nt/zlib.dnt  contrib/README.contrib contrib/*.txt \
+   contrib/asm386/*.asm contrib/asm386/*.c \
+   contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \
+   contrib/iostream/*.h  contrib/iostream2/*.h contrib/iostream2/*.cpp \
+   contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32
+ 
+ all: example.exe minigzip.exe
+ 
+ test: all
+ 	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
+ 	echo hello world | ./minigzip | ./minigzip -d || \
+ 	  echo '		*** minigzip test FAILED ***' ; \
+ 	if ./example; then \
+ 	  echo '		*** zlib test OK ***'; \
+ 	else \
+ 	  echo '		*** zlib test FAILED ***'; \
+ 	fi
+ 
+ $(ZLIB): $(OBJS)
+ 	$(AR) $@ $(OBJS)
+ 	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1
+ 
+ $(SHAREDLIB): $(OBJS) os2/z.def
+ 	$(LDSHARED) -o $@ $^
+ 
+ $(SHAREDLIBIMP): os2/z.def
+ 	$(IMPLIB) -o $@ $^
+ 
+ example.exe: example.o $(LIBS)
+ 	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
+ 
+ minigzip.exe: minigzip.o $(LIBS)
+ 	$(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)
+ 
+ clean:
+ 	rm -f *.o *~ example minigzip libz.a libz.so* foo.gz
+ 
+ distclean:	clean
+ 
+ zip:
+ 	mv Makefile Makefile~; cp -p Makefile.in Makefile
+ 	rm -f test.c ztest*.c
+ 	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
+ 	zip -ul9 zlib$$v $(DISTFILES)
+ 	mv Makefile~ Makefile
+ 
+ dist:
+ 	mv Makefile Makefile~; cp -p Makefile.in Makefile
+ 	rm -f test.c ztest*.c
+ 	d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
+ 	rm -f $$d.tar.gz; \
+ 	if test ! -d ../$$d; then rm -f ../$$d; ln -s `pwd` ../$$d; fi; \
+ 	files=""; \
+ 	for f in $(DISTFILES); do files="$$files $$d/$$f"; done; \
+ 	cd ..; \
+ 	GZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \
+ 	if test ! -d $$d; then rm -f $$d; fi
+ 	mv Makefile~ Makefile
+ 
+ tags:
+ 	etags *.[ch]
+ 
+ depend:
+ 	makedepend -- $(CFLAGS) -- *.[ch]
+ 
+ # DO NOT DELETE THIS LINE -- make depend depends on it.
+ 
+ adler32.o: zlib.h zconf.h
+ compress.o: zlib.h zconf.h
+ crc32.o: zlib.h zconf.h
+ deflate.o: deflate.h zutil.h zlib.h zconf.h
+ example.o: zlib.h zconf.h
+ gzio.o: zutil.h zlib.h zconf.h
+ infblock.o: infblock.h inftrees.h infcodes.h infutil.h zutil.h zlib.h zconf.h
+ infcodes.o: zutil.h zlib.h zconf.h
+ infcodes.o: inftrees.h infblock.h infcodes.h infutil.h inffast.h
+ inffast.o: zutil.h zlib.h zconf.h inftrees.h
+ inffast.o: infblock.h infcodes.h infutil.h inffast.h
+ inflate.o: zutil.h zlib.h zconf.h infblock.h
+ inftrees.o: zutil.h zlib.h zconf.h inftrees.h
+ infutil.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h
+ minigzip.o: zlib.h zconf.h
+ trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
+ uncompr.o: zlib.h zconf.h
+ zutil.o: zutil.h zlib.h zconf.h
diff -Nrcpad gcc-3.4.3/zlib/old/os2/zlib.def gcc-4.0.0/zlib/old/os2/zlib.def
*** gcc-3.4.3/zlib/old/os2/zlib.def	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/old/os2/zlib.def	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,51 ----
+ ;
+ ; Slightly modified version of ../nt/zlib.dnt :-)
+ ;
+ 
+ LIBRARY		Z
+ DESCRIPTION	"Zlib compression library for OS/2"
+ CODE		PRELOAD MOVEABLE DISCARDABLE
+ DATA		PRELOAD MOVEABLE MULTIPLE
+ 
+ EXPORTS
+     adler32
+     compress
+     crc32
+     deflate
+     deflateCopy
+     deflateEnd
+     deflateInit2_
+     deflateInit_
+     deflateParams
+     deflateReset
+     deflateSetDictionary
+     gzclose
+     gzdopen
+     gzerror
+     gzflush
+     gzopen
+     gzread
+     gzwrite
+     inflate
+     inflateEnd
+     inflateInit2_
+     inflateInit_
+     inflateReset
+     inflateSetDictionary
+     inflateSync
+     uncompress
+     zlibVersion
+     gzprintf
+     gzputc
+     gzgetc
+     gzseek
+     gzrewind
+     gztell
+     gzeof
+     gzsetparams
+     zError
+     inflateSyncPoint
+     get_crc_table
+     compress2
+     gzputs
+     gzgets
diff -Nrcpad gcc-3.4.3/zlib/old/zlib.html gcc-4.0.0/zlib/old/zlib.html
*** gcc-3.4.3/zlib/old/zlib.html	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/old/zlib.html	Mon Oct 11 17:44:19 2004
***************
*** 0 ****
--- 1,971 ----
+ <html>
+ <head>
+  <title>
+  zlib general purpose compression library version 1.1.4
+  </title>
+ </head>
+ <body bgcolor="White" text="Black" vlink="Red" alink="Navy" link="Red">
+ <!-- background="zlibbg.gif" -->
+ 
+ <h1> zlib 1.1.4 Manual </h1>
+ <hr>
+ <a name="Contents"><h2>Contents</h2>
+ <ol type="I">
+ <li> <a href="#Prologue">Prologue</a>
+ <li> <a href="#Introduction">Introduction</a>
+ <li> <a href="#Utility functions">Utility functions</a>
+ <li> <a href="#Basic functions">Basic functions</a>
+ <li> <a href="#Advanced functions">Advanced functions</a>
+ <li> <a href="#Constants">Constants</a>
+ <li> <a href="#struct z_stream_s">struct z_stream_s</a>
+ <li> <a href="#Checksum functions">Checksum functions</a>
+ <li> <a href="#Misc">Misc</a>
+ </ol>
+ <hr>
+ <a name="Prologue"><h2> Prologue </h2>
+   'zlib' general purpose compression library version 1.1.4, March 11th, 2002
+   <p>
+   Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
+   <p>
+   This software is provided 'as-is', without any express or implied
+   warranty.  In no event will the authors be held liable for any damages
+   arising from the use of this software.
+   <p>
+   Permission is granted to anyone to use this software for any purpose,
+   including commercial applications, and to alter it and redistribute it
+   freely, subject to the following restrictions:
+   <ol>
+    <li> The origin of this software must not be misrepresented ; you must not
+      claim that you wrote the original software. If you use this software
+      in a product, an acknowledgment in the product documentation would be
+      appreciated but is not required.
+    <li> Altered source versions must be plainly marked as such, and must not be
+      misrepresented as being the original software.
+    <li> This notice may not be removed or altered from any source distribution.
+   </ol>
+ 
+   <dl>
+   <dt>Jean-loup Gailly
+   <dd><a href="mailto:jloup@gzip.org">jloup@gzip.org</a>
+   <dt>Mark Adler
+   <dd><a href="mailto:madler@alumni.caltech.edu">madler@alumni.caltech.edu</a>
+   </dl>
+ 
+   The data format used by the zlib library is described by RFCs (Request for
+   Comments) 1950 to 1952 in the files
+   <a href="ftp://ds.internic.net/rfc/rfc1950.txt">
+   ftp://ds.internic.net/rfc/rfc1950.txt </a>
+   (zlib format),
+   <a href="ftp://ds.internic.net/rfc/rfc1951.txt">
+   rfc1951.txt </a>
+   (<a href="#deflate">deflate</a> format) and
+   <a href="ftp://ds.internic.net/rfc/rfc1952.txt">
+   rfc1952.txt </a>
+   (gzip format).
+   <p>
+   This manual is converted from zlib.h by
+   <a href="mailto:piaip@csie.ntu.edu.tw"> piaip </a>
+   <p>
+   Visit <a href="http://ftp.cdrom.com/pub/infozip/zlib/">
+   http://ftp.cdrom.com/pub/infozip/zlib/</a>
+   for the official zlib web page.
+   <p>
+ 
+ <hr>
+ <a name="Introduction"><h2> Introduction </h2>
+      The 'zlib' compression library provides in-memory compression and
+   decompression functions, including integrity checks of the uncompressed
+   data.  This version of the library supports only one compression method
+   (deflation) but other algorithms will be added later and will have the same
+   stream interface.
+   <p>
+ 
+      Compression can be done in a single step if the buffers are large
+   enough (for example if an input file is mmap'ed), or can be done by
+   repeated calls of the compression function.  In the latter case, the
+   application must provide more input and/or consume the output
+   (providing more output space) before each call.
+   <p>
+ 
+      The library also supports reading and writing files in gzip (.gz) format
+   with an interface similar to that of stdio.
+   <p>
+ 
+      The library does not install any signal handler. The decoder checks
+   the consistency of the compressed data, so the library should never
+   crash even in case of corrupted input.
+   <p>
+ 
+ <hr>
+ <a name="Utility functions"><h2> Utility functions </h2>
+      The following utility functions are implemented on top of the
+    <a href="#Basic functions">basic stream-oriented functions</a>.
+    To simplify the interface, some
+    default options are assumed (compression level and memory usage,
+    standard memory allocation functions). The source code of these
+    utility functions can easily be modified if you need special options.
+ <h3> Function list </h3>
+ <ul>
+ <li> int  <a href="#compress">compress</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen);
+ <li> int  <a href="#compress2">compress2</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen, int level);
+ <li> int  <a href="#uncompress">uncompress</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen);
+ <li> typedef voidp gzFile;
+ <li>  gzFile  <a href="#gzopen">gzopen</a>  (const char *path, const char *mode);
+ <li> gzFile  <a href="#gzdopen">gzdopen</a>  (int fd, const char *mode);
+ <li> int  <a href="#gzsetparams">gzsetparams</a> (gzFile file, int level, int strategy);
+ <li> int     <a href="#gzread">gzread</a>  (gzFile file, voidp buf, unsigned len);
+ <li> int     <a href="#gzwrite">gzwrite</a> (gzFile file, const voidp buf, unsigned len);
+ <li> int VA   <a href="#gzprintf">gzprintf</a> (gzFile file, const char *format, ...);
+ <li> int  <a href="#gzputs">gzputs</a> (gzFile file, const char *s);
+ <li> char *  <a href="#gzgets">gzgets</a> (gzFile file, char *buf, int len);
+ <li> int     <a href="#gzputc">gzputc</a> (gzFile file, int c);
+ <li> int     <a href="#gzgetc">gzgetc</a> (gzFile file);
+ <li> int     <a href="#gzflush">gzflush</a> (gzFile file, int flush);
+ <li> z_off_t     <a href="#gzseek">gzseek</a> (gzFile file, z_off_t offset, int whence);
+ <li> z_off_t     <a href="#gztell">gztell</a> (gzFile file);
+ <li> int     <a href="#gzrewind">gzrewind</a> (gzFile file);
+ <li> int  <a href="#gzeof">gzeof</a> (gzFile file);
+ <li> int     <a href="#gzclose">gzclose</a> (gzFile file);
+ <li> const char *  <a href="#gzerror">gzerror</a> (gzFile file, int *errnum);
+ </ul>
+ <h3> Function description </h3>
+ <dl>
+ <font color="Blue"><dt> int  <a name="compress">compress</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen);</font>
+ <dd>
+      Compresses the source buffer into the destination buffer.  sourceLen is
+    the byte length of the source buffer. Upon entry, destLen is the total
+    size of the destination buffer, which must be at least 0.1% larger than
+    sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
+    compressed buffer.<p>
+      This function can be used to <a href="#compress">compress</a> a whole file at once if the
+    input file is mmap'ed.<p>
+      <a href="#compress">compress</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
+    enough memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if there was not enough room in the output
+    buffer.<p>
+ 
+ <font color="Blue"><dt> int  <a name="compress2">compress2</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen, int level);</font>
+ <dd>
+      Compresses the source buffer into the destination buffer. The level
+    parameter has the same meaning as in <a href="#deflateInit">deflateInit</a>.  sourceLen is the byte
+    length of the source buffer. Upon entry, destLen is the total size of the
+    destination buffer, which must be at least 0.1% larger than sourceLen plus
+    12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
+    <p>
+ 
+      <a href="#compress2">compress2</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough
+    memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if there was not enough room in the output buffer,
+    <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the level parameter is invalid.
+    <p>
+ 
+ <font color="Blue"><dt> int  <a name="uncompress">uncompress</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen);</font>
+ <dd>
+      Decompresses the source buffer into the destination buffer.  sourceLen is
+    the byte length of the source buffer. Upon entry, destLen is the total
+    size of the destination buffer, which must be large enough to hold the
+    entire uncompressed data. (The size of the uncompressed data must have
+    been saved previously by the compressor and transmitted to the decompressor
+    by some mechanism outside the scope of this compression library.)
+    Upon exit, destLen is the actual size of the compressed buffer. <p>
+      This function can be used to decompress a whole file at once if the
+    input file is mmap'ed.
+    <p>
+ 
+      <a href="#uncompress">uncompress</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
+    enough memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if there was not enough room in the output
+    buffer, or <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the input data was corrupted.
+    <p>
+ 
+ <dt> typedef voidp gzFile;
+ <dd> <p>
+ 
+ <font color="Blue"><dt>  gzFile  <a name="gzopen">gzopen</a>  (const char *path, const char *mode);</font>
+ <dd>
+      Opens a gzip (.gz) file for reading or writing. The mode parameter
+    is as in fopen ("rb" or "wb") but can also include a compression level
+    ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
+    Huffman only compression as in "wb1h". (See the description
+    of <a href="#deflateInit2">deflateInit2</a> for more information about the strategy parameter.)
+    <p>
+ 
+      <a href="#gzopen">gzopen</a> can be used to read a file which is not in gzip format ; in this
+    case <a href="#gzread">gzread</a> will directly read from the file without decompression.
+    <p>
+ 
+      <a href="#gzopen">gzopen</a> returns NULL if the file could not be opened or if there was
+    insufficient memory to allocate the (de)compression <a href="#state">state</a> ; errno
+    can be checked to distinguish the two cases (if errno is zero, the
+    zlib error is <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a>).
+    <p>
+ 
+ <font color="Blue"><dt> gzFile  <a name="gzdopen">gzdopen</a>  (int fd, const char *mode);</font>
+ <dd>
+      <a href="#gzdopen">gzdopen</a>() associates a gzFile with the file descriptor fd.  File
+    descriptors are obtained from calls like open, dup, creat, pipe or
+    fileno (in the file has been previously opened with fopen).
+    The mode parameter is as in <a href="#gzopen">gzopen</a>.
+    <p>
+      The next call of <a href="#gzclose">gzclose</a> on the returned gzFile will also close the
+    file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
+    descriptor fd. If you want to keep fd open, use <a href="#gzdopen">gzdopen</a>(dup(fd), mode).
+    <p>
+      <a href="#gzdopen">gzdopen</a> returns NULL if there was insufficient memory to allocate
+    the (de)compression <a href="#state">state</a>.
+    <p>
+ 
+ <font color="Blue"><dt> int  <a name="gzsetparams">gzsetparams</a> (gzFile file, int level, int strategy);</font>
+ <dd>
+      Dynamically update the compression level or strategy. See the description
+    of <a href="#deflateInit2">deflateInit2</a> for the meaning of these parameters.
+    <p>
+      <a href="#gzsetparams">gzsetparams</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the file was not
+    opened for writing.
+    <p>
+ 
+ <font color="Blue"><dt> int     <a name="gzread">gzread</a>  (gzFile file, voidp buf, unsigned len);</font>
+ <dd>
+      Reads the given number of uncompressed bytes from the compressed file.
+    If the input file was not in gzip format, <a href="#gzread">gzread</a> copies the given number
+    of bytes into the buffer.
+    <p>
+      <a href="#gzread">gzread</a> returns the number of uncompressed bytes actually read (0 for
+    end of file, -1 for error).
+    <p>
+ 
+ <font color="Blue"><dt> int     <a name="gzwrite">gzwrite</a> (gzFile file, const voidp buf, unsigned len);</font>
+ <dd>
+      Writes the given number of uncompressed bytes into the compressed file.
+    <a href="#gzwrite">gzwrite</a> returns the number of uncompressed bytes actually written
+    (0 in case of error).
+    <p>
+ 
+ <font color="Blue"><dt> int VA   <a name="gzprintf">gzprintf</a> (gzFile file, const char *format, ...);</font>
+ <dd>
+      Converts, formats, and writes the args to the compressed file under
+    control of the format string, as in fprintf. <a href="#gzprintf">gzprintf</a> returns the number of
+    uncompressed bytes actually written (0 in case of error).
+    <p>
+ 
+ <font color="Blue"><dt> int  <a name="gzputs">gzputs</a> (gzFile file, const char *s);</font>
+ <dd>
+       Writes the given null-terminated string to the compressed file, excluding
+    the terminating null character.
+    <p>
+       <a href="#gzputs">gzputs</a> returns the number of characters written, or -1 in case of error.
+       <p>
+ 
+ <font color="Blue"><dt> char *  <a name="gzgets">gzgets</a> (gzFile file, char *buf, int len);</font>
+ <dd>
+       Reads bytes from the compressed file until len-1 characters are read, or
+    a newline character is read and transferred to buf, or an end-of-file
+    condition is encountered.  The string is then terminated with a null
+    character.
+    <p>
+       <a href="#gzgets">gzgets</a> returns buf, or <a href="#Z_NULL">Z_NULL</a> in case of error.
+       <p>
+ 
+ <font color="Blue"><dt> int     <a name="gzputc">gzputc</a> (gzFile file, int c);</font>
+ <dd>
+       Writes c, converted to an unsigned char, into the compressed file.
+    <a href="#gzputc">gzputc</a> returns the value that was written, or -1 in case of error.
+    <p>
+ 
+ <font color="Blue"><dt> int     <a name="gzgetc">gzgetc</a> (gzFile file);</font>
+ <dd>
+       Reads one byte from the compressed file. <a href="#gzgetc">gzgetc</a> returns this byte
+    or -1 in case of end of file or error.
+    <p>
+ 
+ <font color="Blue"><dt> int     <a name="gzflush">gzflush</a> (gzFile file, int flush);</font>
+ <dd>
+      Flushes all pending output into the compressed file. The parameter
+    flush is as in the <a href="#deflate">deflate</a>() function. The return value is the zlib
+    error number (see function <a href="#gzerror">gzerror</a> below). <a href="#gzflush">gzflush</a> returns <a href="#Z_OK">Z_OK</a> if
+    the flush parameter is <a href="#Z_FINISH">Z_FINISH</a> and all output could be flushed.
+    <p>
+      <a href="#gzflush">gzflush</a> should be called only when strictly necessary because it can
+    degrade compression.
+    <p>
+ 
+ <font color="Blue"><dt> z_off_t     <a name="gzseek">gzseek</a> (gzFile file, z_off_t offset, int whence);</font>
+ <dd>
+       Sets the starting position for the next <a href="#gzread">gzread</a> or <a href="#gzwrite">gzwrite</a> on the
+    given compressed file. The offset represents a number of bytes in the
+    uncompressed data stream. The whence parameter is defined as in lseek(2);
+    the value SEEK_END is not supported.
+    <p>
+      If the file is opened for reading, this function is emulated but can be
+    extremely slow. If the file is opened for writing, only forward seeks are
+    supported ; <a href="#gzseek">gzseek</a> then compresses a sequence of zeroes up to the new
+    starting position.
+    <p>
+       <a href="#gzseek">gzseek</a> returns the resulting offset location as measured in bytes from
+    the beginning of the uncompressed stream, or -1 in case of error, in
+    particular if the file is opened for writing and the new starting position
+    would be before the current position.
+    <p>
+ 
+ <font color="Blue"><dt> int     <a name="gzrewind">gzrewind</a> (gzFile file);</font>
+ <dd>
+      Rewinds the given file. This function is supported only for reading.
+      <p>
+    <a href="#gzrewind">gzrewind</a>(file) is equivalent to (int)<a href="#gzseek">gzseek</a>(file, 0L, SEEK_SET)
+    <p>
+ 
+ <font color="Blue"><dt> z_off_t     <a name="gztell">gztell</a> (gzFile file);</font>
+ <dd>
+      Returns the starting position for the next <a href="#gzread">gzread</a> or <a href="#gzwrite">gzwrite</a> on the
+    given compressed file. This position represents a number of bytes in the
+    uncompressed data stream.
+    <p>
+ 
+    <a href="#gztell">gztell</a>(file) is equivalent to <a href="#gzseek">gzseek</a>(file, 0L, SEEK_CUR)
+    <p>
+ 
+ <font color="Blue"><dt> int  <a name="gzeof">gzeof</a> (gzFile file);</font>
+ <dd>
+      Returns 1 when EOF has previously been detected reading the given
+    input stream, otherwise zero.
+    <p>
+ 
+ <font color="Blue"><dt> int     <a name="gzclose">gzclose</a> (gzFile file);</font>
+ <dd>
+      Flushes all pending output if necessary, closes the compressed file
+    and deallocates all the (de)compression <a href="#state">state</a>. The return value is the zlib
+    error number (see function <a href="#gzerror">gzerror</a> below).
+    <p>
+ 
+ <font color="Blue"><dt> const char *  <a name="gzerror">gzerror</a> (gzFile file, int *errnum);</font>
+ <dd>
+      Returns the error message for the last error which occurred on the
+    given compressed file. errnum is set to zlib error number. If an
+    error occurred in the file system and not in the compression library,
+    errnum is set to <a href="#Z_ERRNO">Z_ERRNO</a> and the application may consult errno
+    to get the exact error code.
+    <p>
+ </dl>
+ <hr>
+ <a name="Basic functions"><h2> Basic functions </h2>
+ <h3> Function list </h3>
+ <ul>
+ <li>  const char *  <a href="#zlibVersion">zlibVersion</a> (void);
+ <li>  int  <a href="#deflateInit">deflateInit</a> (<a href="#z_streamp">z_streamp</a> strm, int level);
+ <li>  int  <a href="#deflate">deflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);
+ <li>  int  <a href="#deflateEnd">deflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);
+ <li>  int  <a href="#inflateInit">inflateInit</a> (<a href="#z_streamp">z_streamp</a> strm);
+ <li>  int  <a href="#inflate">inflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);
+ <li>  int  <a href="#inflateEnd">inflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);
+ </ul>
+ 
+ <h3> Function description </h3>
+ <dl>
+ <font color="Blue"><dt>  const char *  <a name="zlibVersion">zlibVersion</a> (void);</font>
+ <dd> The application can compare <a href="#zlibVersion">zlibVersion</a> and ZLIB_VERSION for consistency.
+    If the first character differs, the library code actually used is
+    not compatible with the zlib.h header file used by the application.
+    This check is automatically made by <a href="#deflateInit">deflateInit</a> and <a href="#inflateInit">inflateInit</a>.
+    <p>
+ 
+ <font color="Blue"><dt> int  <a name="deflateInit">deflateInit</a> (<a href="#z_streamp">z_streamp</a> strm, int level);</font>
+ <dd>
+      Initializes the internal stream <a href="#state">state</a> for compression. The fields
+    <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized before by the caller.
+    If <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> are set to <a href="#Z_NULL">Z_NULL</a>, <a href="#deflateInit">deflateInit</a> updates them to
+    use default allocation functions.
+    <p>
+ 
+      The compression level must be <a href="#Z_DEFAULT_COMPRESSION">Z_DEFAULT_COMPRESSION</a>, or between 0 and 9:
+    1 gives best speed, 9 gives best compression, 0 gives no compression at
+    all (the input data is simply copied a block at a time).
+    <p>
+ 
+    <a href="#Z_DEFAULT_COMPRESSION">Z_DEFAULT_COMPRESSION</a> requests a default compromise between speed and
+    compression (currently equivalent to level 6).
+    <p>
+ 
+      <a href="#deflateInit">deflateInit</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
+    enough memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if level is not a valid compression level,
+    <a href="#Z_VERSION_ERROR">Z_VERSION_ERROR</a> if the zlib library version (<a href="#zlib_version">zlib_version</a>) is incompatible
+    with the version assumed by the caller (ZLIB_VERSION).
+    <a href="#msg">msg</a> is set to null if there is no error message.  <a href="#deflateInit">deflateInit</a> does not
+    perform any compression: this will be done by <a href="#deflate">deflate</a>().
+    <p>
+ 
+ <font color="Blue"><dt>  int  <a name="deflate">deflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);</font>
+ <dd>
+     <a href="#deflate">deflate</a> compresses as much data as possible, and stops when the input
+   buffer becomes empty or the output buffer becomes full. It may introduce some
+   output latency (reading input without producing any output) except when
+   forced to flush.<p>
+ 
+     The detailed semantics are as follows. <a href="#deflate">deflate</a> performs one or both of the
+   following actions:
+ 
+   <ul>
+   <li> Compress more input starting at <a href="#next_in">next_in</a> and update <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a>
+     accordingly. If not all input can be processed (because there is not
+     enough room in the output buffer), <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> are updated and
+     processing will resume at this point for the next call of <a href="#deflate">deflate</a>().
+ 
+   <li>
+     Provide more output starting at <a href="#next_out">next_out</a> and update <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a>
+     accordingly. This action is forced if the parameter flush is non zero.
+     Forcing flush frequently degrades the compression ratio, so this parameter
+     should be set only when necessary (in interactive applications).
+     Some output may be provided even if flush is not set.
+   </ul> <p>
+ 
+   Before the call of <a href="#deflate">deflate</a>(), the application should ensure that at least
+   one of the actions is possible, by providing more input and/or consuming
+   more output, and updating <a href="#avail_in">avail_in</a> or <a href="#avail_out">avail_out</a> accordingly ; <a href="#avail_out">avail_out</a>
+   should never be zero before the call. The application can consume the
+   compressed output when it wants, for example when the output buffer is full
+   (<a href="#avail_out">avail_out</a> == 0), or after each call of <a href="#deflate">deflate</a>(). If <a href="#deflate">deflate</a> returns <a href="#Z_OK">Z_OK</a>
+   and with zero <a href="#avail_out">avail_out</a>, it must be called again after making room in the
+   output buffer because there might be more output pending.
+   <p>
+ 
+     If the parameter flush is set to <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>, all pending output is
+   flushed to the output buffer and the output is aligned on a byte boundary, so
+   that the decompressor can get all input data available so far. (In particular
+   <a href="#avail_in">avail_in</a> is zero after the call if enough output space has been provided
+   before the call.)  Flushing may degrade compression for some compression
+   algorithms and so it should be used only when necessary.
+   <p>
+ 
+     If flush is set to <a href="#Z_FULL_FLUSH">Z_FULL_FLUSH</a>, all output is flushed as with
+   <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>, and the compression <a href="#state">state</a> is reset so that decompression can
+   restart from this point if previous compressed data has been damaged or if
+   random access is desired. Using <a href="#Z_FULL_FLUSH">Z_FULL_FLUSH</a> too often can seriously degrade
+   the compression.
+   <p>
+ 
+     If <a href="#deflate">deflate</a> returns with <a href="#avail_out">avail_out</a> == 0, this function must be called again
+   with the same value of the flush parameter and more output space (updated
+   <a href="#avail_out">avail_out</a>), until the flush is complete (<a href="#deflate">deflate</a> returns with non-zero
+   <a href="#avail_out">avail_out</a>).
+   <p>
+ 
+     If the parameter flush is set to <a href="#Z_FINISH">Z_FINISH</a>, pending input is processed,
+   pending output is flushed and <a href="#deflate">deflate</a> returns with <a href="#Z_STREAM_END">Z_STREAM_END</a> if there
+   was enough output space ; if <a href="#deflate">deflate</a> returns with <a href="#Z_OK">Z_OK</a>, this function must be
+   called again with <a href="#Z_FINISH">Z_FINISH</a> and more output space (updated <a href="#avail_out">avail_out</a>) but no
+   more input data, until it returns with <a href="#Z_STREAM_END">Z_STREAM_END</a> or an error. After
+   <a href="#deflate">deflate</a> has returned <a href="#Z_STREAM_END">Z_STREAM_END</a>, the only possible operations on the
+   stream are <a href="#deflateReset">deflateReset</a> or <a href="#deflateEnd">deflateEnd</a>.
+   <p>
+ 
+     <a href="#Z_FINISH">Z_FINISH</a> can be used immediately after <a href="#deflateInit">deflateInit</a> if all the compression
+   is to be done in a single step. In this case, <a href="#avail_out">avail_out</a> must be at least
+   0.1% larger than <a href="#avail_in">avail_in</a> plus 12 bytes.  If <a href="#deflate">deflate</a> does not return
+   <a href="#Z_STREAM_END">Z_STREAM_END</a>, then it must be called again as described above.
+   <p>
+ 
+     <a href="#deflate">deflate</a>() sets strm-&gt <a href="#adler">adler</a> to the <a href="#adler32">adler32</a> checksum of all input read
+   so far (that is, <a href="#total_in">total_in</a> bytes).
+   <p>
+ 
+     <a href="#deflate">deflate</a>() may update <a href="#data_type">data_type</a> if it can make a good guess about
+   the input data type (<a href="#Z_ASCII">Z_ASCII</a> or <a href="#Z_BINARY">Z_BINARY</a>). In doubt, the data is considered
+   binary. This field is only for information purposes and does not affect
+   the compression algorithm in any manner.
+   <p>
+ 
+     <a href="#deflate">deflate</a>() returns <a href="#Z_OK">Z_OK</a> if some progress has been made (more input
+   processed or more output produced), <a href="#Z_STREAM_END">Z_STREAM_END</a> if all input has been
+   consumed and all output has been produced (only when flush is set to
+   <a href="#Z_FINISH">Z_FINISH</a>), <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream <a href="#state">state</a> was inconsistent (for example
+   if <a href="#next_in">next_in</a> or <a href="#next_out">next_out</a> was NULL), <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if no progress is possible
+   (for example <a href="#avail_in">avail_in</a> or <a href="#avail_out">avail_out</a> was zero).
+   <p>
+ 
+ <font color="Blue"><dt>  int  <a name="deflateEnd">deflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
+ <dd>
+      All dynamically allocated data structures for this stream are freed.
+    This function discards any unprocessed input and does not flush any
+    pending output.
+    <p>
+ 
+      <a href="#deflateEnd">deflateEnd</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the
+    stream <a href="#state">state</a> was inconsistent, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the stream was freed
+    prematurely (some input or output was discarded). In the error case,
+    <a href="#msg">msg</a> may be set but then points to a static string (which must not be
+    deallocated).
+    <p>
+ 
+ <font color="Blue"><dt>  int  <a name="inflateInit">inflateInit</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
+ <dd>
+ 	Initializes the internal stream <a href="#state">state</a> for decompression. The fields
+    <a href="#next_in">next_in</a>, <a href="#avail_in">avail_in</a>, <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized before by
+    the caller. If <a href="#next_in">next_in</a> is not <a href="#Z_NULL">Z_NULL</a> and <a href="#avail_in">avail_in</a> is large enough (the exact
+    value depends on the compression method), <a href="#inflateInit">inflateInit</a> determines the
+    compression method from the zlib header and allocates all data structures
+    accordingly ; otherwise the allocation will be deferred to the first call of
+    <a href="#inflate">inflate</a>.  If <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> are set to <a href="#Z_NULL">Z_NULL</a>, <a href="#inflateInit">inflateInit</a> updates them to
+    use default allocation functions.
+    <p>
+ 
+      <a href="#inflateInit">inflateInit</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough
+    memory, <a href="#Z_VERSION_ERROR">Z_VERSION_ERROR</a> if the zlib library version is incompatible with the
+    version assumed by the caller.  <a href="#msg">msg</a> is set to null if there is no error
+    message. <a href="#inflateInit">inflateInit</a> does not perform any decompression apart from reading
+    the zlib header if present: this will be done by <a href="#inflate">inflate</a>().  (So <a href="#next_in">next_in</a> and
+    <a href="#avail_in">avail_in</a> may be modified, but <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> are unchanged.)
+    <p>
+ 
+ <font color="Blue"><dt>  int  <a name="inflate">inflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);</font>
+ <dd>
+     <a href="#inflate">inflate</a> decompresses as much data as possible, and stops when the input
+   buffer becomes empty or the output buffer becomes full. It may some
+   introduce some output latency (reading input without producing any output)
+   except when forced to flush.
+   <p>
+ 
+   The detailed semantics are as follows. <a href="#inflate">inflate</a> performs one or both of the
+   following actions:
+ 
+   <ul>
+   <li> Decompress more input starting at <a href="#next_in">next_in</a> and update <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a>
+     accordingly. If not all input can be processed (because there is not
+     enough room in the output buffer), <a href="#next_in">next_in</a> is updated and processing
+     will resume at this point for the next call of <a href="#inflate">inflate</a>().
+ 
+   <li> Provide more output starting at <a href="#next_out">next_out</a> and update <a href="#next_out">next_out</a> and
+     <a href="#avail_out">avail_out</a> accordingly.  <a href="#inflate">inflate</a>() provides as much output as possible,
+     until there is no more input data or no more space in the output buffer
+     (see below about the flush parameter).
+   </ul> <p>
+ 
+   Before the call of <a href="#inflate">inflate</a>(), the application should ensure that at least
+   one of the actions is possible, by providing more input and/or consuming
+   more output, and updating the next_* and avail_* values accordingly.
+   The application can consume the uncompressed output when it wants, for
+   example when the output buffer is full (<a href="#avail_out">avail_out</a> == 0), or after each
+   call of <a href="#inflate">inflate</a>(). If <a href="#inflate">inflate</a> returns <a href="#Z_OK">Z_OK</a> and with zero <a href="#avail_out">avail_out</a>, it
+   must be called again after making room in the output buffer because there
+   might be more output pending.
+   <p>
+ 
+     If the parameter flush is set to <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>, <a href="#inflate">inflate</a> flushes as much
+   output as possible to the output buffer. The flushing behavior of <a href="#inflate">inflate</a> is
+   not specified for values of the flush parameter other than <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>
+   and <a href="#Z_FINISH">Z_FINISH</a>, but the current implementation actually flushes as much output
+   as possible anyway.
+   <p>
+ 
+     <a href="#inflate">inflate</a>() should normally be called until it returns <a href="#Z_STREAM_END">Z_STREAM_END</a> or an
+   error. However if all decompression is to be performed in a single step
+   (a single call of <a href="#inflate">inflate</a>), the parameter flush should be set to
+   <a href="#Z_FINISH">Z_FINISH</a>. In this case all pending input is processed and all pending
+   output is flushed ; <a href="#avail_out">avail_out</a> must be large enough to hold all the
+   uncompressed data. (The size of the uncompressed data may have been saved
+   by the compressor for this purpose.) The next operation on this stream must
+   be <a href="#inflateEnd">inflateEnd</a> to deallocate the decompression <a href="#state">state</a>. The use of <a href="#Z_FINISH">Z_FINISH</a>
+   is never required, but can be used to inform <a href="#inflate">inflate</a> that a faster routine
+   may be used for the single <a href="#inflate">inflate</a>() call.
+   <p>
+ 
+      If a preset dictionary is needed at this point (see <a href="#inflateSetDictionary">inflateSetDictionary</a>
+   below), <a href="#inflate">inflate</a> sets strm-<a href="#adler">adler</a> to the <a href="#adler32">adler32</a> checksum of the
+   dictionary chosen by the compressor and returns <a href="#Z_NEED_DICT">Z_NEED_DICT</a> ; otherwise
+   it sets strm-&gt <a href="#adler">adler</a> to the <a href="#adler32">adler32</a> checksum of all output produced
+   so far (that is, <a href="#total_out">total_out</a> bytes) and returns <a href="#Z_OK">Z_OK</a>, <a href="#Z_STREAM_END">Z_STREAM_END</a> or
+   an error code as described below. At the end of the stream, <a href="#inflate">inflate</a>()
+   checks that its computed <a href="#adler32">adler32</a> checksum is equal to that saved by the
+   compressor and returns <a href="#Z_STREAM_END">Z_STREAM_END</a> only if the checksum is correct.
+   <p>
+ 
+     <a href="#inflate">inflate</a>() returns <a href="#Z_OK">Z_OK</a> if some progress has been made (more input processed
+   or more output produced), <a href="#Z_STREAM_END">Z_STREAM_END</a> if the end of the compressed data has
+   been reached and all uncompressed output has been produced, <a href="#Z_NEED_DICT">Z_NEED_DICT</a> if a
+   preset dictionary is needed at this point, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the input data was
+   corrupted (input stream not conforming to the zlib format or incorrect
+   <a href="#adler32">adler32</a> checksum), <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream structure was inconsistent
+   (for example if <a href="#next_in">next_in</a> or <a href="#next_out">next_out</a> was NULL), <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
+   enough memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if no progress is possible or if there was not
+   enough room in the output buffer when <a href="#Z_FINISH">Z_FINISH</a> is used. In the <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a>
+   case, the application may then call <a href="#inflateSync">inflateSync</a> to look for a good
+   compression block.
+   <p>
+ 
+ <font color="Blue"><dt>  int  <a name="inflateEnd">inflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
+ <dd>
+      All dynamically allocated data structures for this stream are freed.
+    This function discards any unprocessed input and does not flush any
+    pending output.
+    <p>
+ 
+      <a href="#inflateEnd">inflateEnd</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream <a href="#state">state</a>
+    was inconsistent. In the error case, <a href="#msg">msg</a> may be set but then points to a
+    static string (which must not be deallocated).
+ </dl>
+ <hr>
+ <a name="Advanced functions"><h2> Advanced functions </h2>
+     The following functions are needed only in some special applications.
+ <h3> Function list </h3>
+ <ul>
+ <li>  int  <a href="#deflateInit2">deflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm,
+ <li> int  <a href="#deflateSetDictionary">deflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt  dictLength);
+ <li> int  <a href="#deflateCopy">deflateCopy</a> (<a href="#z_streamp">z_streamp</a> dest, <a href="#z_streamp">z_streamp</a> source);
+ <li> int  <a href="#deflateReset">deflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);
+ <li> int  <a href="#deflateParams">deflateParams</a> (<a href="#z_streamp">z_streamp</a> strm, int level, int strategy);
+ <li> int  <a href="#inflateInit2">inflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, int  windowBits);
+ <li>  int  <a href="#inflateSetDictionary">inflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt  dictLength);
+ <li> int  <a href="#inflateSync">inflateSync</a> (<a href="#z_streamp">z_streamp</a> strm);
+ <li> int  <a href="#inflateReset">inflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);
+ 
+ </ul>
+ <h3> Function description </h3>
+ <dl>
+ <font color="Blue"><dt>  int  <a name="deflateInit2">deflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, int  level, int  method, int  windowBits, int  memLevel, int  strategy);</font>
+ 
+ <dd> This is another version of <a href="#deflateInit">deflateInit</a> with more compression options. The
+    fields <a href="#next_in">next_in</a>, <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized before by
+    the caller.<p>
+ 
+      The method parameter is the compression method. It must be <a href="#Z_DEFLATED">Z_DEFLATED</a> in
+    this version of the library.<p>
+ 
+      The windowBits parameter is the base two logarithm of the window size
+    (the size of the history buffer).  It should be in the range 8..15 for this
+    version of the library. Larger values of this parameter result in better
+    compression at the expense of memory usage. The default value is 15 if
+    <a href="#deflateInit">deflateInit</a> is used instead.<p>
+ 
+      The memLevel parameter specifies how much memory should be allocated
+    for the internal compression <a href="#state">state</a>. memLevel=1 uses minimum memory but
+    is slow and reduces compression ratio ; memLevel=9 uses maximum memory
+    for optimal speed. The default value is 8. See zconf.h for total memory
+    usage as a function of windowBits and memLevel.<p>
+ 
+      The strategy parameter is used to tune the compression algorithm. Use the
+    value <a href="#Z_DEFAULT_STRATEGY">Z_DEFAULT_STRATEGY</a> for normal data, <a href="#Z_FILTERED">Z_FILTERED</a> for data produced by a
+    filter (or predictor), or <a href="#Z_HUFFMAN_ONLY">Z_HUFFMAN_ONLY</a> to force Huffman encoding only (no
+    string match).  Filtered data consists mostly of small values with a
+    somewhat random distribution. In this case, the compression algorithm is
+    tuned to <a href="#compress">compress</a> them better. The effect of <a href="#Z_FILTERED">Z_FILTERED</a> is to force more
+    Huffman coding and less string matching ; it is somewhat intermediate
+    between Z_DEFAULT and <a href="#Z_HUFFMAN_ONLY">Z_HUFFMAN_ONLY</a>. The strategy parameter only affects
+    the compression ratio but not the correctness of the compressed output even
+    if it is not set appropriately.<p>
+ 
+       <a href="#deflateInit2">deflateInit2</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough
+    memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a parameter is invalid (such as an invalid
+    method). <a href="#msg">msg</a> is set to null if there is no error message.  <a href="#deflateInit2">deflateInit2</a> does
+    not perform any compression: this will be done by <a href="#deflate">deflate</a>().<p>
+ 
+ <font color="Blue"><dt> int  <a name="deflateSetDictionary">deflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt  dictLength);</font>
+ <dd>
+      Initializes the compression dictionary from the given byte sequence
+    without producing any compressed output. This function must be called
+    immediately after <a href="#deflateInit">deflateInit</a>, <a href="#deflateInit2">deflateInit2</a> or <a href="#deflateReset">deflateReset</a>, before any
+    call of <a href="#deflate">deflate</a>. The compressor and decompressor must use exactly the same
+    dictionary (see <a href="#inflateSetDictionary">inflateSetDictionary</a>).<p>
+ 
+      The dictionary should consist of strings (byte sequences) that are likely
+    to be encountered later in the data to be compressed, with the most commonly
+    used strings preferably put towards the end of the dictionary. Using a
+    dictionary is most useful when the data to be compressed is short and can be
+    predicted with good accuracy ; the data can then be compressed better than
+    with the default empty dictionary.<p>
+ 
+      Depending on the size of the compression data structures selected by
+    <a href="#deflateInit">deflateInit</a> or <a href="#deflateInit2">deflateInit2</a>, a part of the dictionary may in effect be
+    discarded, for example if the dictionary is larger than the window size in
+    <a href="#deflate">deflate</a> or deflate2. Thus the strings most likely to be useful should be
+    put at the end of the dictionary, not at the front.<p>
+ 
+      Upon return of this function, strm-&gt <a href="#adler">adler</a> is set to the Adler32 value
+    of the dictionary ; the decompressor may later use this value to determine
+    which dictionary has been used by the compressor. (The Adler32 value
+    applies to the whole dictionary even if only a subset of the dictionary is
+    actually used by the compressor.)<p>
+ 
+      <a href="#deflateSetDictionary">deflateSetDictionary</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a
+    parameter is invalid (such as NULL dictionary) or the stream <a href="#state">state</a> is
+    inconsistent (for example if <a href="#deflate">deflate</a> has already been called for this stream
+    or if the compression method is bsort). <a href="#deflateSetDictionary">deflateSetDictionary</a> does not
+    perform any compression: this will be done by <a href="#deflate">deflate</a>().<p>
+ 
+ <font color="Blue"><dt> int  <a name="deflateCopy">deflateCopy</a> (<a href="#z_streamp">z_streamp</a> dest, <a href="#z_streamp">z_streamp</a> source);</font>
+ <dd>
+      Sets the destination stream as a complete copy of the source stream.<p>
+ 
+      This function can be useful when several compression strategies will be
+    tried, for example when there are several ways of pre-processing the input
+    data with a filter. The streams that will be discarded should then be freed
+    by calling <a href="#deflateEnd">deflateEnd</a>.  Note that <a href="#deflateCopy">deflateCopy</a> duplicates the internal
+    compression <a href="#state">state</a> which can be quite large, so this strategy is slow and
+    can consume lots of memory.<p>
+ 
+      <a href="#deflateCopy">deflateCopy</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
+    enough memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source stream <a href="#state">state</a> was inconsistent
+    (such as <a href="#zalloc">zalloc</a> being NULL). <a href="#msg">msg</a> is left unchanged in both source and
+    destination.<p>
+ 
+ <font color="Blue"><dt> int  <a name="deflateReset">deflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
+ <dd>     This function is equivalent to <a href="#deflateEnd">deflateEnd</a> followed by <a href="#deflateInit">deflateInit</a>,
+    but does not free and reallocate all the internal compression <a href="#state">state</a>.
+    The stream will keep the same compression level and any other attributes
+    that may have been set by <a href="#deflateInit2">deflateInit2</a>.<p>
+ 
+       <a href="#deflateReset">deflateReset</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source
+    stream <a href="#state">state</a> was inconsistent (such as <a href="#zalloc">zalloc</a> or <a href="#state">state</a> being NULL).<p>
+ 
+ <font color="Blue"><dt> int  <a name="deflateParams">deflateParams</a> (<a href="#z_streamp">z_streamp</a> strm, int level, int strategy);</font>
+ <dd>
+      Dynamically update the compression level and compression strategy.  The
+    interpretation of level and strategy is as in <a href="#deflateInit2">deflateInit2</a>.  This can be
+    used to switch between compression and straight copy of the input data, or
+    to switch to a different kind of input data requiring a different
+    strategy. If the compression level is changed, the input available so far
+    is compressed with the old level (and may be flushed); the new level will
+    take effect only at the next call of <a href="#deflate">deflate</a>().<p>
+ 
+      Before the call of <a href="#deflateParams">deflateParams</a>, the stream <a href="#state">state</a> must be set as for
+    a call of <a href="#deflate">deflate</a>(), since the currently available input may have to
+    be compressed and flushed. In particular, strm-&gt <a href="#avail_out">avail_out</a> must be
+    non-zero.<p>
+ 
+      <a href="#deflateParams">deflateParams</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source
+    stream <a href="#state">state</a> was inconsistent or if a parameter was invalid, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a>
+    if strm-&gtavail_out was zero.<p>
+ 
+ <font color="Blue"><dt> int  <a name="inflateInit2">inflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, int  windowBits);</font>
+ 
+ <dd>     This is another version of <a href="#inflateInit">inflateInit</a> with an extra parameter. The
+    fields <a href="#next_in">next_in</a>, <a href="#avail_in">avail_in</a>, <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized
+    before by the caller.<p>
+ 
+      The windowBits parameter is the base two logarithm of the maximum window
+    size (the size of the history buffer).  It should be in the range 8..15 for
+    this version of the library. The default value is 15 if <a href="#inflateInit">inflateInit</a> is used
+    instead. If a compressed stream with a larger window size is given as
+    input, <a href="#inflate">inflate</a>() will return with the error code <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> instead of
+    trying to allocate a larger window.<p>
+ 
+       <a href="#inflateInit2">inflateInit2</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough
+    memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a parameter is invalid (such as a negative
+    memLevel). <a href="#msg">msg</a> is set to null if there is no error message.  <a href="#inflateInit2">inflateInit2</a>
+    does not perform any decompression apart from reading the zlib header if
+    present: this will be done by <a href="#inflate">inflate</a>(). (So <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> may be
+    modified, but <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> are unchanged.)<p>
+ 
+ <font color="Blue"><dt>  int  <a name="inflateSetDictionary">inflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt  dictLength);</font>
+ <dd>
+      Initializes the decompression dictionary from the given uncompressed byte
+    sequence. This function must be called immediately after a call of <a href="#inflate">inflate</a>
+    if this call returned <a href="#Z_NEED_DICT">Z_NEED_DICT</a>. The dictionary chosen by the compressor
+    can be determined from the Adler32 value returned by this call of
+    <a href="#inflate">inflate</a>. The compressor and decompressor must use exactly the same
+    dictionary (see <a href="#deflateSetDictionary">deflateSetDictionary</a>).<p>
+ 
+      <a href="#inflateSetDictionary">inflateSetDictionary</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a
+    parameter is invalid (such as NULL dictionary) or the stream <a href="#state">state</a> is
+    inconsistent, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the given dictionary doesn't match the
+    expected one (incorrect Adler32 value). <a href="#inflateSetDictionary">inflateSetDictionary</a> does not
+    perform any decompression: this will be done by subsequent calls of
+    <a href="#inflate">inflate</a>().<p>
+ 
+ <font color="Blue"><dt> int  <a name="inflateSync">inflateSync</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
+ 
+ <dd>    Skips invalid compressed data until a full flush point (see above the
+   description of <a href="#deflate">deflate</a> with <a href="#Z_FULL_FLUSH">Z_FULL_FLUSH</a>) can be found, or until all
+   available input is skipped. No output is provided.<p>
+ 
+     <a href="#inflateSync">inflateSync</a> returns <a href="#Z_OK">Z_OK</a> if a full flush point has been found, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a>
+   if no more input was provided, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if no flush point has been found,
+   or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream structure was inconsistent. In the success
+   case, the application may save the current current value of <a href="#total_in">total_in</a> which
+   indicates where valid compressed data was found. In the error case, the
+   application may repeatedly call <a href="#inflateSync">inflateSync</a>, providing more input each time,
+   until success or end of the input data.<p>
+ 
+ <font color="Blue"><dt> int  <a name="inflateReset">inflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
+ <dd>
+      This function is equivalent to <a href="#inflateEnd">inflateEnd</a> followed by <a href="#inflateInit">inflateInit</a>,
+    but does not free and reallocate all the internal decompression <a href="#state">state</a>.
+    The stream will keep attributes that may have been set by <a href="#inflateInit2">inflateInit2</a>.
+    <p>
+ 
+       <a href="#inflateReset">inflateReset</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source
+    stream <a href="#state">state</a> was inconsistent (such as <a href="#zalloc">zalloc</a> or <a href="#state">state</a> being NULL).
+    <p>
+ </dl>
+ 
+ <hr>
+ <a name="Checksum functions"><h2> Checksum functions </h2>
+      These functions are not related to compression but are exported
+    anyway because they might be useful in applications using the
+    compression library.
+ <h3> Function list </h3>
+ <ul>
+ <li> uLong  <a href="#adler32">adler32</a> (uLong <a href="#adler">adler</a>, const Bytef *buf, uInt len);
+ <li> uLong  <a href="#crc32">crc32</a>   (uLong crc, const Bytef *buf, uInt len);
+ </ul>
+ <h3> Function description </h3>
+ <dl>
+ <font color="Blue"><dt> uLong  <a name="adler32">adler32</a> (uLong <a href="#adler">adler</a>, const Bytef *buf, uInt len);</font>
+ <dd>
+      Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+    return the updated checksum. If buf is NULL, this function returns
+    the required initial value for the checksum.
+    <p>
+    An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+    much faster. Usage example:
+    <pre>
+ 
+      uLong <a href="#adler">adler</a> = <a href="#adler32">adler32</a>(0L, <a href="#Z_NULL">Z_NULL</a>, 0);
+ 
+      while (read_buffer(buffer, length) != EOF) {
+        <a href="#adler">adler</a> = <a href="#adler32">adler32</a>(<a href="#adler">adler</a>, buffer, length);
+      }
+      if (<a href="#adler">adler</a> != original_adler) error();
+    </pre>
+ 
+ <font color="Blue"><dt> uLong  <a name="crc32">crc32</a>   (uLong crc, const Bytef *buf, uInt len);</font>
+ <dd>
+      Update a running crc with the bytes buf[0..len-1] and return the updated
+    crc. If buf is NULL, this function returns the required initial value
+    for the crc. Pre- and post-conditioning (one's complement) is performed
+    within this function so it shouldn't be done by the application.
+    Usage example:
+    <pre>
+ 
+      uLong crc = <a href="#crc32">crc32</a>(0L, <a href="#Z_NULL">Z_NULL</a>, 0);
+ 
+      while (read_buffer(buffer, length) != EOF) {
+        crc = <a href="#crc32">crc32</a>(crc, buffer, length);
+      }
+      if (crc != original_crc) error();
+    </pre>
+ </dl>
+ <hr>
+ <a name="struct z_stream_s"><h2> struct z_stream_s </h2>
+ <font color="Blue">
+ <a name="z_stream_s">
+ <pre>
+ typedef struct z_stream_s {
+     Bytef    *<a name="next_in">next_in</a>;  /* next input byte */
+     uInt     <a name="avail_in">avail_in</a>;  /* number of bytes available at <a href="#next_in">next_in</a> */
+     uLong    <a name="total_in">total_in</a>;  /* total nb of input bytes read so far */
+ 
+     Bytef    *<a name="next_out">next_out</a>; /* next output byte should be put there */
+     uInt     <a name="avail_out">avail_out</a>; /* remaining free space at <a href="#next_out">next_out</a> */
+     uLong    <a name="total_out">total_out</a>; /* total nb of bytes output so far */
+ 
+     char     *<a name="msg">msg</a>;      /* last error message, NULL if no error */
+     struct internal_state FAR *<a name="state">state</a>; /* not visible by applications */
+ 
+     alloc_func <a name="zalloc">zalloc</a>;  /* used to allocate the internal <a href="#state">state</a> */
+     free_func  <a name="zfree">zfree</a>;   /* used to free the internal <a href="#state">state</a> */
+     voidpf     <a name="opaque">opaque</a>;  /* private data object passed to <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> */
+ 
+     int     <a name="data_type">data_type</a>;  /* best guess about the data type: ascii or binary */
+     uLong   <a name="adler">adler</a>;      /* <a href="#adler32">adler32</a> value of the uncompressed data */
+     uLong   <a name="reserved">reserved</a>;   /* <a href="#reserved">reserved</a> for future use */
+ } <a href="#z_stream_s">z_stream</a> ;
+ 
+ typedef <a href="#z_stream_s">z_stream</a> FAR * <a name="z_streamp">z_streamp</a>;  ÿ
+ </pre>
+ </font>
+    The application must update <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> when <a href="#avail_in">avail_in</a> has
+    dropped to zero. It must update <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> when <a href="#avail_out">avail_out</a>
+    has dropped to zero. The application must initialize <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and
+    <a href="#opaque">opaque</a> before calling the init function. All other fields are set by the
+    compression library and must not be updated by the application. <p>
+ 
+    The <a href="#opaque">opaque</a> value provided by the application will be passed as the first
+    parameter for calls of <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a>. This can be useful for custom
+    memory management. The compression library attaches no meaning to the
+    <a href="#opaque">opaque</a> value. <p>
+ 
+    <a href="#zalloc">zalloc</a> must return <a href="#Z_NULL">Z_NULL</a> if there is not enough memory for the object.
+    If zlib is used in a multi-threaded application, <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> must be
+    thread safe. <p>
+ 
+    On 16-bit systems, the functions <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> must be able to allocate
+    exactly 65536 bytes, but will not be required to allocate more than this
+    if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
+    pointers returned by <a href="#zalloc">zalloc</a> for objects of exactly 65536 bytes *must*
+    have their offset normalized to zero. The default allocation function
+    provided by this library ensures this (see zutil.c). To reduce memory
+    requirements and avoid any allocation of 64K objects, at the expense of
+    compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
+    <p>
+ 
+    The fields <a href="#total_in">total_in</a> and <a href="#total_out">total_out</a> can be used for statistics or
+    progress reports. After compression, <a href="#total_in">total_in</a> holds the total size of
+    the uncompressed data and may be saved for use in the decompressor
+    (particularly if the decompressor wants to decompress everything in
+    a single step). <p>
+ 
+ <hr>
+ <a name="Constants"><h2> Constants </h2>
+ <font color="Blue">
+ <pre>
+ #define <a name="Z_NO_FLUSH">Z_NO_FLUSH</a>      0
+ #define <a name="Z_PARTIAL_FLUSH">Z_PARTIAL_FLUSH</a> 1
+ 	/* will be removed, use <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a> instead */
+ #define <a name="Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>    2
+ #define <a name="Z_FULL_FLUSH">Z_FULL_FLUSH</a>    3
+ #define <a name="Z_FINISH">Z_FINISH</a>        4
+ /* Allowed flush values ; see <a href="#deflate">deflate</a>() below for details */
+ 
+ #define <a name="Z_OK">Z_OK</a>            0
+ #define <a name="Z_STREAM_END">Z_STREAM_END</a>    1
+ #define <a name="Z_NEED_DICT">Z_NEED_DICT</a>     2
+ #define <a name="Z_ERRNO">Z_ERRNO</a>        (-1)
+ #define <a name="Z_STREAM_ERROR">Z_STREAM_ERROR</a> (-2)
+ #define <a name="Z_DATA_ERROR">Z_DATA_ERROR</a>   (-3)
+ #define <a name="Z_MEM_ERROR">Z_MEM_ERROR</a>    (-4)
+ #define <a name="Z_BUF_ERROR">Z_BUF_ERROR</a>    (-5)
+ #define <a name="Z_VERSION_ERROR">Z_VERSION_ERROR</a> (-6)
+ /* Return codes for the compression/decompression functions. Negative
+  * values are errors, positive values are used for special but normal events.
+  */
+ 
+ #define <a name="Z_NO_COMPRESSION">Z_NO_COMPRESSION</a>         0
+ #define <a name="Z_BEST_SPEED">Z_BEST_SPEED</a>             1
+ #define <a name="Z_BEST_COMPRESSION">Z_BEST_COMPRESSION</a>       9
+ #define <a name="Z_DEFAULT_COMPRESSION">Z_DEFAULT_COMPRESSION</a>  (-1)
+ /* compression levels */
+ 
+ #define <a name="Z_FILTERED">Z_FILTERED</a>            1
+ #define <a name="Z_HUFFMAN_ONLY">Z_HUFFMAN_ONLY</a>        2
+ #define <a name="Z_DEFAULT_STRATEGY">Z_DEFAULT_STRATEGY</a>    0
+ /* compression strategy ; see <a href="#deflateInit2">deflateInit2</a>() below for details */
+ 
+ #define <a name="Z_BINARY">Z_BINARY</a>   0
+ #define <a name="Z_ASCII">Z_ASCII</a>    1
+ #define <a name="Z_UNKNOWN">Z_UNKNOWN</a>  2
+ /* Possible values of the <a href="#data_type">data_type</a> field */
+ 
+ #define <a name="Z_DEFLATED">Z_DEFLATED</a>   8
+ /* The <a href="#deflate">deflate</a> compression method (the only one supported in this version) */
+ 
+ #define <a name="Z_NULL">Z_NULL</a>  0  /* for initializing <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a>, <a href="#opaque">opaque</a> */
+ 
+ #define <a name="zlib_version">zlib_version</a> <a href="#zlibVersion">zlibVersion</a>()
+ /* for compatibility with versions less than 1.0.2 */
+ </pre>
+ </font>
+ 
+ <hr>
+ <a name="Misc"><h2> Misc </h2>
+  <a href="#deflateInit">deflateInit</a> and <a href="#inflateInit">inflateInit</a> are macros to allow checking the zlib version
+  and the compiler's view of <a href="#z_stream_s">z_stream</a>.
+  <p>
+  Other functions:
+  <dl>
+  <font color="Blue"><dt> const char   *  <a name="zError">zError</a>           (int err);</font>
+  <font color="Blue"><dt> int             <a name="inflateSyncPoint">inflateSyncPoint</a> (<a href="#z_streamp">z_streamp</a> z);</font>
+  <font color="Blue"><dt> const uLongf *  <a name="get_crc_table">get_crc_table</a>    (void);</font>
+  </dl>
+  <hr>
+  <font size="-1">
+  Last update: Wed Oct 13 20:42:34 1999<br>
+  piapi@csie.ntu.edu.tw
+  </font>
+ 
+ </body>
+ </html>
diff -Nrcpad gcc-3.4.3/zlib/os2/Makefile.os2 gcc-4.0.0/zlib/os2/Makefile.os2
*** gcc-3.4.3/zlib/os2/Makefile.os2	Mon Mar 11 21:50:08 2002
--- gcc-4.0.0/zlib/os2/Makefile.os2	Thu Jan  1 00:00:00 1970
***************
*** 1,136 ****
- # Makefile for zlib under OS/2 using GCC (PGCC)
- # For conditions of distribution and use, see copyright notice in zlib.h 
- 
- # To compile and test, type:
- #   cp Makefile.os2 ..
- #   cd ..
- #   make -f Makefile.os2 test
- 
- # This makefile will build a static library z.lib, a shared library
- # z.dll and a import library zdll.lib. You can use either z.lib or
- # zdll.lib by specifying either -lz or -lzdll on gcc's command line
- 
- CC=gcc -Zomf -s
- 
- CFLAGS=-O6 -Wall
- #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
- #CFLAGS=-g -DDEBUG
- #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
- #           -Wstrict-prototypes -Wmissing-prototypes
- 
- #################### BUG WARNING: #####################
- ## infcodes.c hits a bug in pgcc-1.0, so you have to use either
- ## -O# where # <= 4 or one of (-fno-ommit-frame-pointer or -fno-force-mem)
- ## This bug is reportedly fixed in pgcc >1.0, but this was not tested
- CFLAGS+=-fno-force-mem
- 
- LDFLAGS=-s -L. -lzdll -Zcrtdll
- LDSHARED=$(CC) -s -Zomf -Zdll -Zcrtdll
- 
- VER=1.1.0
- ZLIB=z.lib
- SHAREDLIB=z.dll
- SHAREDLIBIMP=zdll.lib
- LIBS=$(ZLIB) $(SHAREDLIB) $(SHAREDLIBIMP)
- 
- AR=emxomfar cr
- IMPLIB=emximp
- RANLIB=echo
- TAR=tar
- SHELL=bash
- 
- prefix=/usr/local
- exec_prefix = $(prefix)
- 
- OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
-        zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o
- 
- TEST_OBJS = example.o minigzip.o
- 
- DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \
-   algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \
-   nt/Makefile.nt nt/zlib.dnt  contrib/README.contrib contrib/*.txt \
-   contrib/asm386/*.asm contrib/asm386/*.c \
-   contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \
-   contrib/iostream/*.h  contrib/iostream2/*.h contrib/iostream2/*.cpp \
-   contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32
- 
- all: example.exe minigzip.exe
- 
- test: all
- 	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
- 	echo hello world | ./minigzip | ./minigzip -d || \
- 	  echo '		*** minigzip test FAILED ***' ; \
- 	if ./example; then \
- 	  echo '		*** zlib test OK ***'; \
- 	else \
- 	  echo '		*** zlib test FAILED ***'; \
- 	fi
- 
- $(ZLIB): $(OBJS)
- 	$(AR) $@ $(OBJS)
- 	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1
- 
- $(SHAREDLIB): $(OBJS) os2/z.def
- 	$(LDSHARED) -o $@ $^
- 
- $(SHAREDLIBIMP): os2/z.def
- 	$(IMPLIB) -o $@ $^
- 
- example.exe: example.o $(LIBS)
- 	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
- 
- minigzip.exe: minigzip.o $(LIBS)
- 	$(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)
- 
- clean:
- 	rm -f *.o *~ example minigzip libz.a libz.so* foo.gz
- 
- distclean:	clean
- 
- zip:
- 	mv Makefile Makefile~; cp -p Makefile.in Makefile
- 	rm -f test.c ztest*.c
- 	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
- 	zip -ul9 zlib$$v $(DISTFILES)
- 	mv Makefile~ Makefile
- 
- dist:
- 	mv Makefile Makefile~; cp -p Makefile.in Makefile
- 	rm -f test.c ztest*.c
- 	d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
- 	rm -f $$d.tar.gz; \
- 	if test ! -d ../$$d; then rm -f ../$$d; ln -s `pwd` ../$$d; fi; \
- 	files=""; \
- 	for f in $(DISTFILES); do files="$$files $$d/$$f"; done; \
- 	cd ..; \
- 	GZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \
- 	if test ! -d $$d; then rm -f $$d; fi
- 	mv Makefile~ Makefile
- 
- tags:	
- 	etags *.[ch]
- 
- depend:
- 	makedepend -- $(CFLAGS) -- *.[ch]
- 
- # DO NOT DELETE THIS LINE -- make depend depends on it.
- 
- adler32.o: zlib.h zconf.h
- compress.o: zlib.h zconf.h
- crc32.o: zlib.h zconf.h
- deflate.o: deflate.h zutil.h zlib.h zconf.h
- example.o: zlib.h zconf.h
- gzio.o: zutil.h zlib.h zconf.h
- infblock.o: infblock.h inftrees.h infcodes.h infutil.h zutil.h zlib.h zconf.h
- infcodes.o: zutil.h zlib.h zconf.h
- infcodes.o: inftrees.h infblock.h infcodes.h infutil.h inffast.h
- inffast.o: zutil.h zlib.h zconf.h inftrees.h
- inffast.o: infblock.h infcodes.h infutil.h inffast.h
- inflate.o: zutil.h zlib.h zconf.h infblock.h
- inftrees.o: zutil.h zlib.h zconf.h inftrees.h
- infutil.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h
- minigzip.o:  zlib.h zconf.h 
- trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
- uncompr.o: zlib.h zconf.h
- zutil.o: zutil.h zlib.h zconf.h  
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/os2/zlib.def gcc-4.0.0/zlib/os2/zlib.def
*** gcc-3.4.3/zlib/os2/zlib.def	Mon Mar 11 21:50:08 2002
--- gcc-4.0.0/zlib/os2/zlib.def	Thu Jan  1 00:00:00 1970
***************
*** 1,51 ****
- ;
- ; Slightly modified version of ../nt/zlib.dnt :-)
- ;
- 
- LIBRARY		Z
- DESCRIPTION	"Zlib compression library for OS/2"
- CODE		PRELOAD MOVEABLE DISCARDABLE
- DATA		PRELOAD MOVEABLE MULTIPLE
- 
- EXPORTS
-     adler32
-     compress
-     crc32
-     deflate
-     deflateCopy
-     deflateEnd
-     deflateInit2_
-     deflateInit_
-     deflateParams
-     deflateReset
-     deflateSetDictionary
-     gzclose
-     gzdopen
-     gzerror
-     gzflush
-     gzopen
-     gzread
-     gzwrite
-     inflate
-     inflateEnd
-     inflateInit2_
-     inflateInit_
-     inflateReset
-     inflateSetDictionary
-     inflateSync
-     uncompress
-     zlibVersion
-     gzprintf
-     gzputc
-     gzgetc
-     gzseek
-     gzrewind
-     gztell
-     gzeof
-     gzsetparams
-     zError
-     inflateSyncPoint
-     get_crc_table
-     compress2
-     gzputs
-     gzgets
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/qnx/package.qpg gcc-4.0.0/zlib/qnx/package.qpg
*** gcc-3.4.3/zlib/qnx/package.qpg	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/qnx/package.qpg	Mon Oct 11 17:44:17 2004
***************
*** 0 ****
--- 1,141 ----
+ <QPG:Generation>
+    <QPG:Options>
+       <QPG:User unattended="no" verbosity="2" listfiles="yes"/>
+       <QPG:Defaults type="qnx_package"/>
+       <QPG:Source></QPG:Source>
+       <QPG:Release number="+"/>
+       <QPG:Build></QPG:Build>
+       <QPG:FileSorting strip="yes"/>
+       <QPG:Package targets="combine"/>
+       <QPG:Repository generate="yes"/>
+       <QPG:FinalDir></QPG:FinalDir>
+       <QPG:Cleanup></QPG:Cleanup>
+    </QPG:Options>
+ 
+    <QPG:Responsible>
+       <QPG:Company></QPG:Company>
+       <QPG:Department></QPG:Department>
+       <QPG:Group></QPG:Group>
+       <QPG:Team></QPG:Team>
+       <QPG:Employee></QPG:Employee>
+       <QPG:EmailAddress></QPG:EmailAddress>
+    </QPG:Responsible>
+ 
+    <QPG:Values>
+       <QPG:Files>
+          <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/>
+          <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/>
+          <QPG:Add file="../libz.so.1.2.1" install="/opt/lib/" user="root:bin" permission="644"/>
+          <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.1"/>
+          <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.1"/>
+          <QPG:Add file="../libz.so.1.2.1" install="/opt/lib/" component="slib"/>
+       </QPG:Files>
+ 
+       <QPG:PackageFilter>
+          <QPM:PackageManifest>
+             <QPM:PackageDescription>
+                <QPM:PackageType>Library</QPM:PackageType>
+                <QPM:PackageReleaseNotes></QPM:PackageReleaseNotes>
+                <QPM:PackageReleaseUrgency>Medium</QPM:PackageReleaseUrgency>
+                <QPM:PackageRepository></QPM:PackageRepository>
+                <QPM:FileVersion>2.0</QPM:FileVersion>
+             </QPM:PackageDescription>
+ 
+             <QPM:ProductDescription>
+                <QPM:ProductName>zlib</QPM:ProductName>
+                <QPM:ProductIdentifier>zlib</QPM:ProductIdentifier>
+                <QPM:ProductEmail>alain.bonnefoy@icbt.com</QPM:ProductEmail>
+                <QPM:VendorName>Public</QPM:VendorName>
+                <QPM:VendorInstallName>public</QPM:VendorInstallName>
+                <QPM:VendorURL>www.gzip.org/zlib</QPM:VendorURL>
+                <QPM:VendorEmbedURL></QPM:VendorEmbedURL>
+                <QPM:VendorEmail></QPM:VendorEmail>
+                <QPM:AuthorName>Jean-Loup Gailly,Mark Adler</QPM:AuthorName>
+                <QPM:AuthorURL>www.gzip.org/zlib</QPM:AuthorURL>
+                <QPM:AuthorEmbedURL></QPM:AuthorEmbedURL>
+                <QPM:AuthorEmail>zlib@gzip.org</QPM:AuthorEmail>
+                <QPM:ProductIconSmall></QPM:ProductIconSmall>
+                <QPM:ProductIconLarge></QPM:ProductIconLarge>
+                <QPM:ProductDescriptionShort>A massively spiffy yet delicately unobtrusive compression library.</QPM:ProductDescriptionShort>
+                <QPM:ProductDescriptionLong>zlib is designed to be a free, general-purpose, legally unencumbered, lossless data compression library for use on virtually any computer hardware and operating system.</QPM:ProductDescriptionLong>
+                <QPM:ProductDescriptionURL>http://www.gzip.org/zlib</QPM:ProductDescriptionURL>
+                <QPM:ProductDescriptionEmbedURL></QPM:ProductDescriptionEmbedURL>
+             </QPM:ProductDescription>
+ 
+             <QPM:ReleaseDescription>
+                <QPM:ReleaseVersion>1.2.1</QPM:ReleaseVersion>
+                <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency>
+                <QPM:ReleaseStability>Stable</QPM:ReleaseStability>
+                <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor>
+                <QPM:ReleaseNoteMajor></QPM:ReleaseNoteMajor>
+                <QPM:ExcludeCountries>
+                   <QPM:Country></QPM:Country>
+                </QPM:ExcludeCountries>
+ 
+                <QPM:ReleaseCopyright>No License</QPM:ReleaseCopyright>
+             </QPM:ReleaseDescription>
+ 
+             <QPM:ContentDescription>
+                <QPM:ContentTopic xmlmultiple="true">Software Development/Libraries and Extensions/C Libraries</QPM:ContentTopic>
+                <QPM:ContentKeyword>zlib,compression</QPM:ContentKeyword>
+                <QPM:TargetOS>qnx6</QPM:TargetOS>
+                <QPM:HostOS>qnx6</QPM:HostOS>
+                <QPM:DisplayEnvironment xmlmultiple="true">None</QPM:DisplayEnvironment>
+                <QPM:TargetAudience xmlmultiple="true">Developer</QPM:TargetAudience>
+             </QPM:ContentDescription>
+          </QPM:PackageManifest>
+       </QPG:PackageFilter>
+ 
+       <QPG:PackageFilter proc="none" target="none">
+          <QPM:PackageManifest>
+             <QPM:ProductInstallationDependencies>
+                <QPM:ProductRequirements></QPM:ProductRequirements>
+             </QPM:ProductInstallationDependencies>
+ 
+             <QPM:ProductInstallationProcedure>
+                <QPM:Script xmlmultiple="true">
+                   <QPM:ScriptName></QPM:ScriptName>
+                   <QPM:ScriptType>Install</QPM:ScriptType>
+                   <QPM:ScriptTiming>Post</QPM:ScriptTiming>
+                   <QPM:ScriptBlocking>No</QPM:ScriptBlocking>
+                   <QPM:ScriptResult>Ignore</QPM:ScriptResult>
+                   <QPM:ShortDescription></QPM:ShortDescription>
+                   <QPM:UseBinaries>No</QPM:UseBinaries>
+                   <QPM:Priority>Optional</QPM:Priority>
+                </QPM:Script>
+             </QPM:ProductInstallationProcedure>
+          </QPM:PackageManifest>
+          
+          <QPM:Launch>
+          </QPM:Launch>
+       </QPG:PackageFilter>
+ 
+       <QPG:PackageFilter type="core" component="none">
+          <QPM:PackageManifest>
+             <QPM:ProductInstallationProcedure>
+ 	       <QPM:OrderDependency xmlmultiple="true">
+ 	          <QPM:Order>InstallOver</QPM:Order>
+ 	          <QPM:Product>zlib</QPM:Product>
+ 	       </QPM:OrderDependency>
+             </QPM:ProductInstallationProcedure>
+          </QPM:PackageManifest>
+          
+          <QPM:Launch>
+          </QPM:Launch>
+       </QPG:PackageFilter>
+ 
+       <QPG:PackageFilter type="core" component="dev">
+          <QPM:PackageManifest>
+             <QPM:ProductInstallationProcedure>
+ 	       <QPM:OrderDependency xmlmultiple="true">
+ 	          <QPM:Order>InstallOver</QPM:Order>
+ 	          <QPM:Product>zlib-dev</QPM:Product>
+ 	       </QPM:OrderDependency>
+             </QPM:ProductInstallationProcedure>
+          </QPM:PackageManifest>
+          
+          <QPM:Launch>
+          </QPM:Launch>
+       </QPG:PackageFilter>
+    </QPG:Values>
+ </QPG:Generation>
diff -Nrcpad gcc-3.4.3/zlib/trees.c gcc-4.0.0/zlib/trees.c
*** gcc-3.4.3/zlib/trees.c	Mon Mar 11 22:11:17 2002
--- gcc-4.0.0/zlib/trees.c	Mon Oct 11 18:45:38 2004
***************
*** 1,6 ****
  /* trees.c -- output deflated data using Huffman coding
!  * Copyright (C) 1995-2002 Jean-loup Gailly
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /*
--- 1,6 ----
  /* trees.c -- output deflated data using Huffman coding
!  * Copyright (C) 1995-2003 Jean-loup Gailly
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /*
*************** local void send_bits(s, value, length)
*** 230,236 ****
  #endif /* DEBUG */
  
  
- #define MAX(a,b) (a >= b ? a : b)
  /* the arguments must not have side effects */
  
  /* ===========================================================================
--- 230,235 ----
*************** void gen_trees_header()
*** 335,376 ****
  
      Assert (header != NULL, "Can't open trees.h");
      fprintf(header,
! 	    "/* header created automatically with -DGEN_TREES_H */\n\n");
  
      fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
      for (i = 0; i < L_CODES+2; i++) {
! 	fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
! 		static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
      }
  
      fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
      for (i = 0; i < D_CODES; i++) {
! 	fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
! 		static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
      }
  
      fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n");
      for (i = 0; i < DIST_CODE_LEN; i++) {
! 	fprintf(header, "%2u%s", _dist_code[i],
! 		SEPARATOR(i, DIST_CODE_LEN-1, 20));
      }
  
      fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
      for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
! 	fprintf(header, "%2u%s", _length_code[i],
! 		SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
      }
  
      fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
      for (i = 0; i < LENGTH_CODES; i++) {
! 	fprintf(header, "%1u%s", base_length[i],
! 		SEPARATOR(i, LENGTH_CODES-1, 20));
      }
  
      fprintf(header, "local const int base_dist[D_CODES] = {\n");
      for (i = 0; i < D_CODES; i++) {
! 	fprintf(header, "%5u%s", base_dist[i],
! 		SEPARATOR(i, D_CODES-1, 10));
      }
  
      fclose(header);
--- 334,375 ----
  
      Assert (header != NULL, "Can't open trees.h");
      fprintf(header,
!             "/* header created automatically with -DGEN_TREES_H */\n\n");
  
      fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
      for (i = 0; i < L_CODES+2; i++) {
!         fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
!                 static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
      }
  
      fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
      for (i = 0; i < D_CODES; i++) {
!         fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
!                 static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
      }
  
      fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n");
      for (i = 0; i < DIST_CODE_LEN; i++) {
!         fprintf(header, "%2u%s", _dist_code[i],
!                 SEPARATOR(i, DIST_CODE_LEN-1, 20));
      }
  
      fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
      for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
!         fprintf(header, "%2u%s", _length_code[i],
!                 SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
      }
  
      fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
      for (i = 0; i < LENGTH_CODES; i++) {
!         fprintf(header, "%1u%s", base_length[i],
!                 SEPARATOR(i, LENGTH_CODES-1, 20));
      }
  
      fprintf(header, "local const int base_dist[D_CODES] = {\n");
      for (i = 0; i < D_CODES; i++) {
!         fprintf(header, "%5u%s", base_dist[i],
!                 SEPARATOR(i, D_CODES-1, 10));
      }
  
      fclose(header);
*************** local void build_tree(s, desc)
*** 675,681 ****
  
          /* Create a new node father of n and m */
          tree[node].Freq = tree[n].Freq + tree[m].Freq;
!         s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1);
          tree[n].Dad = tree[m].Dad = (ush)node;
  #ifdef DUMP_BL_TREE
          if (tree == s->bl_tree) {
--- 674,681 ----
  
          /* Create a new node father of n and m */
          tree[node].Freq = tree[n].Freq + tree[m].Freq;
!         s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?
!                                 s->depth[n] : s->depth[m]) + 1);
          tree[n].Dad = tree[m].Dad = (ush)node;
  #ifdef DUMP_BL_TREE
          if (tree == s->bl_tree) {
*************** void _tr_flush_block(s, buf, stored_len,
*** 930,968 ****
      /* Build the Huffman trees unless a stored block is forced */
      if (s->level > 0) {
  
! 	 /* Check if the file is ascii or binary */
! 	if (s->data_type == Z_UNKNOWN) set_data_type(s);
  
! 	/* Construct the literal and distance trees */
! 	build_tree(s, (tree_desc *)(&(s->l_desc)));
! 	Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
! 		s->static_len));
  
! 	build_tree(s, (tree_desc *)(&(s->d_desc)));
! 	Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
! 		s->static_len));
! 	/* At this point, opt_len and static_len are the total bit lengths of
! 	 * the compressed block data, excluding the tree representations.
! 	 */
  
! 	/* Build the bit length tree for the above two trees, and get the index
! 	 * in bl_order of the last bit length code to send.
! 	 */
! 	max_blindex = build_bl_tree(s);
  
! 	/* Determine the best encoding. Compute first the block length in bytes*/
! 	opt_lenb = (s->opt_len+3+7)>>3;
! 	static_lenb = (s->static_len+3+7)>>3;
  
! 	Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
! 		opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
! 		s->last_lit));
  
! 	if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
  
      } else {
          Assert(buf != (char*)0, "lost buf");
! 	opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
      }
  
  #ifdef FORCE_STORED
--- 930,968 ----
      /* Build the Huffman trees unless a stored block is forced */
      if (s->level > 0) {
  
!          /* Check if the file is ascii or binary */
!         if (s->data_type == Z_UNKNOWN) set_data_type(s);
  
!         /* Construct the literal and distance trees */
!         build_tree(s, (tree_desc *)(&(s->l_desc)));
!         Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
!                 s->static_len));
  
!         build_tree(s, (tree_desc *)(&(s->d_desc)));
!         Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
!                 s->static_len));
!         /* At this point, opt_len and static_len are the total bit lengths of
!          * the compressed block data, excluding the tree representations.
!          */
  
!         /* Build the bit length tree for the above two trees, and get the index
!          * in bl_order of the last bit length code to send.
!          */
!         max_blindex = build_bl_tree(s);
  
!         /* Determine the best encoding. Compute the block lengths in bytes. */
!         opt_lenb = (s->opt_len+3+7)>>3;
!         static_lenb = (s->static_len+3+7)>>3;
  
!         Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
!                 opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
!                 s->last_lit));
  
!         if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
  
      } else {
          Assert(buf != (char*)0, "lost buf");
!         opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
      }
  
  #ifdef FORCE_STORED
*************** local void compress_block(s, ltree, dtre
*** 1107,1113 ****
          } /* literal or match pair ? */
  
          /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
!         Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow");
  
      } while (lx < s->last_lit);
  
--- 1107,1114 ----
          } /* literal or match pair ? */
  
          /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
!         Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
!                "pendingBuf overflow");
  
      } while (lx < s->last_lit);
  
*************** local void copy_block(s, buf, len, heade
*** 1199,1205 ****
      s->last_eob_len = 8; /* enough lookahead for inflate */
  
      if (header) {
!         put_short(s, (ush)len);   
          put_short(s, (ush)~len);
  #ifdef DEBUG
          s->bits_sent += 2*16;
--- 1200,1206 ----
      s->last_eob_len = 8; /* enough lookahead for inflate */
  
      if (header) {
!         put_short(s, (ush)len);
          put_short(s, (ush)~len);
  #ifdef DEBUG
          s->bits_sent += 2*16;
diff -Nrcpad gcc-3.4.3/zlib/uncompr.c gcc-4.0.0/zlib/uncompr.c
*** gcc-3.4.3/zlib/uncompr.c	Mon Mar 11 22:11:18 2002
--- gcc-4.0.0/zlib/uncompr.c	Mon Oct 11 18:45:38 2004
***************
*** 1,10 ****
  /* uncompr.c -- decompress a memory buffer
!  * Copyright (C) 1995-2002 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* @(#) $Id: uncompr.c,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
  
  #include "zlib.h"
  
  /* ===========================================================================
--- 1,11 ----
  /* uncompr.c -- decompress a memory buffer
!  * Copyright (C) 1995-2003 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /* @(#) $Id: uncompr.c,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
  
+ #define ZLIB_INTERNAL
  #include "zlib.h"
  
  /* ===========================================================================
*************** int ZEXPORT uncompress (dest, destLen, s
*** 49,55 ****
      err = inflate(&stream, Z_FINISH);
      if (err != Z_STREAM_END) {
          inflateEnd(&stream);
!         return err == Z_OK ? Z_BUF_ERROR : err;
      }
      *destLen = stream.total_out;
  
--- 50,58 ----
      err = inflate(&stream, Z_FINISH);
      if (err != Z_STREAM_END) {
          inflateEnd(&stream);
!         if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
!             return Z_DATA_ERROR;
!         return err;
      }
      *destLen = stream.total_out;
  
diff -Nrcpad gcc-3.4.3/zlib/win32/DLL_FAQ.txt gcc-4.0.0/zlib/win32/DLL_FAQ.txt
*** gcc-3.4.3/zlib/win32/DLL_FAQ.txt	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/win32/DLL_FAQ.txt	Mon Oct 11 17:44:24 2004
***************
*** 0 ****
--- 1,371 ----
+ 
+             Frequently Asked Questions about ZLIB1.DLL
+ 
+ 
+ This document describes the design, the rationale, and the usage
+ of the official DLL build of zlib, named ZLIB1.DLL.  If you have
+ general questions about zlib, you should see the file "FAQ" found
+ in the zlib distribution, or at the following location:
+   http://www.gzip.org/zlib/zlib_faq.html
+ 
+ 
+  1. What is ZLIB1.DLL, and how can I get it?
+ 
+   - ZLIB1.DLL is the official build of zlib as a DLL.
+     (Please remark the symbol '1' in the name.)
+ 
+     Pointers to a precompiled ZLIB1.DLL can be found in the zlib
+     web site at:
+       http://www.zlib.org/
+ 
+     Applications that link to ZLIB1.DLL can rely on the following
+     specification:
+ 
+     * The exported symbols are exclusively defined in the source
+       files "zlib.h" and "zlib.def", found in an official zlib
+       source distribution.
+     * The symbols are exported by name, not by ordinal.
+     * The exported names are undecorated.
+     * The calling convention of functions is "C" (CDECL).
+     * The ZLIB1.DLL binary is linked to MSVCRT.DLL.
+ 
+     The archive in which ZLIB1.DLL is bundled contains compiled
+     test programs that must run with a valid build of ZLIB1.DLL.
+     It is recommended to download the prebuilt DLL from the zlib
+     web site, instead of building it yourself, to avoid potential
+     incompatibilities that could be introduced by your compiler
+     and build settings.  If you do build the DLL yourself, please
+     make sure that it complies with all the above requirements,
+     and it runs with the precompiled test programs, bundled with
+     the original ZLIB1.DLL distribution and available at the zlib
+     web site.
+ 
+     If, for any reason, you need to build an incompatible DLL,
+     please use a different name.
+ 
+ 
+  2. Why did you change the name of the DLL to ZLIB1.DLL?
+     What happened to the old ZLIB.DLL?
+ 
+   - The old ZLIB.DLL, built from zlib-1.1.x and earlier, required
+     compilation settings that were incompatible to those used by a
+     static build.  The DLL settings were supposed to be enabled by
+     defining the macro ZLIB_DLL, before including "zlib.h".
+     Incorrect handling of this macro was silently accepted at
+     build time, resulting in two major problems:
+ 
+     * ZLIB_DLL was missing from the old makefile.  When building
+       the DLL, not all people added it to the build options.  In
+       consequence, incompatible incarnations of ZLIB.DLL started
+       to circulate around the net.
+ 
+     * When switching from using the static library to using the
+       DLL, applications had to define the ZLIB_DLL macro and
+       to recompile all the sources that contained calls to zlib
+       functions.  Failure to do so resulted in creating binaries
+       that were unable to run with the official ZLIB.DLL build.
+ 
+     The only possible solution that we could foresee was to make a
+     binary-incompatible change in the DLL interfacing, in order to
+     remove the dependency on the ZLIB_DLL macro, and to release
+     the new DLL under a different name.
+ 
+     We chose the name ZLIB1.DLL, where '1' indicates the major
+     zlib version number.  We hope that we will not have to break
+     the binary compatibility again, at least not as long as the
+     zlib-1.x series will last.
+ 
+     There is still a ZLIB_DLL macro, that can trigger a more
+     efficient build and use of the DLL, but compatibility no
+     longer dependents on it.
+ 
+ 
+  3. Can I build ZLIB.DLL from the new zlib sources, and replace
+     an old ZLIB.DLL, that was built from zlib-1.1.4 or earlier?
+ 
+   - In principle, you can do it by assigning calling convention
+     keywords to the macros ZEXPORT and ZEXPORTVA.  In practice,
+     it depends on what you mean by "an old ZLIB.DLL", because
+     the old DLL exists in several mutually-incompatible versions.
+ 
+     If you have a compiled application that works with a certain
+     ZLIB.DLL without any known security issues, there is hardly
+     a need to rebuild the DLL from new sources only to link it to
+     the old app binary.  But if you really want to do it, you have
+     to find out first what kind of calling convention uses your
+     particular ZLIB.DLL build, and to use the same one in the new
+     build.  If you don't know what this is all about, you might be
+     better off if you would just forget it.
+ 
+ 
+  4. Can I compile my application using the new zlib interface, and
+     link it to an old ZLIB.DLL, that was built from zlib-1.1.4 or
+     earlier?
+ 
+   - The official answer is "no"; the real answer depends again on
+     what kind of ZLIB.DLL you have.  Even if you are lucky, this
+     course of action is unreliable.
+ 
+     If you rebuild your application and you intend to use a newer
+     version of zlib (post- 1.1.4), it is strongly recommended to
+     link it to the new ZLIB1.DLL.
+ 
+ 
+  5. Why are the zlib symbols exported by name, and not by ordinal?
+ 
+   - Although exporting symbols by ordinal is a little faster, it
+     is risky.  Any single glitch in the maintenance or use of the
+     DEF file that contains the ordinals can result in incompatible
+     builds and frustrating crashes.  Simply put, the benefits of
+     exporting symbols by ordinal do not justify the risks.
+ 
+     Technically, it should be possible to maintain ordinals in
+     the DEF file, and still export the symbols by name.  Ordinals
+     exist in every DLL, and even if the dynamic linking performed
+     at the DLL startup is searching for names, ordinals serve as
+     hints, for a faster name lookup.  However, if the DEF file
+     contains ordinals, the Microsoft linker automatically builds
+     an implib that will cause the executables linked to it to use
+     those ordinals, and not the names.  It is interesting to
+     notice that the GNU linker for Win32 does not suffer from this
+     problem.
+ 
+     It is possible to avoid the DEF file if the exported symbols
+     are accompanied by a "__declspec(dllexport)" attribute in the
+     source files.  You can do this in zlib by predefining the
+     ZLIB_DLL macro.
+ 
+ 
+  6. I see that the ZLIB1.DLL functions use the "C" (CDECL) calling
+     convention.  Why not use the STDCALL convention?
+     STDCALL is the standard convention in Win32, and I need it in
+     my Visual Basic project!
+ 
+     (For readability, we use CDECL to refer to the convention
+      triggered by the "__cdecl" keyword, STDCALL to refer to
+      the convention triggered by "__stdcall", and FASTCALL to
+      refer to the convention triggered by "__fastcall".)
+ 
+   - Most of the native Windows API functions (without varargs) use
+     indeed the WINAPI convention (which translates to STDCALL in
+     Win32), but the standard C functions use CDECL.  If a user
+     application is intrinsically tied to the Windows API (e.g.
+     it calls native Windows API functions such as CreateFile()),
+     sometimes it makes sense to decorate its own functions with
+     WINAPI.  But if ANSI C or POSIX portability is a goal (e.g.
+     it calls standard C functions such as fopen()), it is not a
+     sound decision to request the inclusion of <windows.h>, or to
+     use non-ANSI constructs, for the sole purpose to make the user
+     functions STDCALL-able.
+ 
+     The functionality offered by zlib is not in the category of
+     "Windows functionality", but is more like "C functionality".
+ 
+     Technically, STDCALL is not bad; in fact, it is slightly
+     faster than CDECL, and it works with variable-argument
+     functions, just like CDECL.  It is unfortunate that, in spite
+     of using STDCALL in the Windows API, it is not the default
+     convention used by the C compilers that run under Windows.
+     The roots of the problem reside deep inside the unsafety of
+     the K&R-style function prototypes, where the argument types
+     are not specified; but that is another story for another day.
+ 
+     The fact that remains is that CDECL is the default convention.
+     Even if an explicit convention (such as STDCALL or FASTCALL)
+     is hard-coded into the function prototypes inside C headers,
+     problems may appear.  One problem, for example, deals with the
+     necessity to expose the convention in users' callbacks.
+ 
+     The calling convention issues are also important when using
+     zlib in other programming languages.  Some of them, like Ada
+     (GNAT) and Fortran (GNU G77), have C bindings implemented
+     initially on Unix, and relying on the C calling convention.
+     On the other hand, the pre- .NET versions of Microsoft Visual
+     Basic require STDCALL, while Borland Delphi prefers (although
+     it does not require) FASTCALL.
+ 
+     In fairness to all possible uses of zlib outside the C
+     programming language, we choose the default "C" convention.
+     Anyone interested in different bindings or conventions is
+     encouraged to maintain specialized projects.  The "contrib/"
+     directory from the zlib distribution already holds a couple
+     of foreign bindings, such as Ada, C++, and Delphi.
+ 
+ 
+  7. I need a DLL for my Visual Basic project.  What can I do?
+ 
+   - Define the ZLIB_WINAPI macro before including "zlib.h", when
+     building both the DLL and the user application (except that
+     you don't need to define anything when using the DLL in Visual
+     Basic).  The ZLIB_WINAPI macro will switch on the WINAPI
+     (STDCALL) convention.  The name of this DLL must be different
+     than the official ZLIB1.DLL.
+ 
+     Gilles Vollant has contributed a build named ZLIBWAPI.DLL,
+     with the ZLIB_WINAPI macro turned on, and with the minizip
+     functionality built in.  For more information, please read
+     the notes inside "contrib/vstudio/readme.txt", found in the
+     zlib distribution.
+ 
+ 
+  8. If my application uses ZLIB1.DLL, should I link it to
+     MSVCRT.DLL?  Why?
+ 
+   - It is not required, but it is recommended to link your
+     application to MSVCRT.DLL, if it uses ZLIB1.DLL.
+ 
+     The executables (.EXE, .DLL, etc.) that are involved in the
+     same process and are using the C run-time library (i.e. they
+     are calling standard C functions), must link to the same
+     library.  There are several libraries in the Win32 system:
+     CRTDLL.DLL, MSVCRT.DLL, the static C libraries, etc.
+     Since ZLIB1.DLL is linked to MSVCRT.DLL, the executables that
+     depend on it should also be linked to MSVCRT.DLL.
+ 
+ 
+  9. Why are you saying that ZLIB1.DLL and my application must be
+     linked to the same C run-time (CRT) library?  I linked my
+     application and my DLLs to different C libraries (e.g. my
+     application to a static library, and my DLLs to MSVCRT.DLL),
+     and everything works fine.
+ 
+   - If a user library invokes only pure Win32 API (accessible via
+     <windows.h> and the related headers), its DLL build will work
+     in any context.  But if this library invokes standard C API,
+     things get more complicated.
+ 
+     There is a single Win32 library in a Win32 system.  Every
+     function in this library resides in a single DLL module, that
+     is safe to call from anywhere.  On the other hand, there are
+     multiple versions of the C library, and each of them has its
+     own separate internal state.  Standalone executables and user
+     DLLs that call standard C functions must link to a C run-time
+     (CRT) library, be it static or shared (DLL).  Intermixing
+     occurs when an executable (not necessarily standalone) and a
+     DLL are linked to different CRTs, and both are running in the
+     same process.
+ 
+     Intermixing multiple CRTs is possible, as long as their
+     internal states are kept intact.  The Microsoft Knowledge Base
+     articles KB94248 "HOWTO: Use the C Run-Time" and KB140584
+     "HOWTO: Link with the Correct C Run-Time (CRT) Library"
+     mention the potential problems raised by intermixing.
+ 
+     If intermixing works for you, it's because your application
+     and DLLs are avoiding the corruption of each of the CRTs'
+     internal states, maybe by careful design, or maybe by fortune.
+ 
+     Also note that linking ZLIB1.DLL to non-Microsoft CRTs (such
+     as those provided by Borland) raises similar problems.
+ 
+ 
+ 10. Why are you linking ZLIB1.DLL to MSVCRT.DLL?
+ 
+   - MSVCRT.DLL exists on every Windows 95 with a new service pack
+     installed, or with Microsoft Internet Explorer 4 or later, and
+     on all other Windows 4.x or later (Windows 98, Windows NT 4,
+     or later).  It is freely distributable; if not present in the
+     system, it can be downloaded from Microsoft or from other
+     software provider for free.
+ 
+     The fact that MSVCRT.DLL does not exist on a virgin Windows 95
+     is not so problematic.  The number of Windows 95 installations
+     is rapidly decreasing, Microsoft stopped supporting it a long
+     time ago, and many recent applications from various vendors,
+     including Microsoft, do not even run on it.  Furthermore, no
+     serious user should run Windows 95 without a proper update
+     installed.
+ 
+     There is also the fact that the mainstream C compilers for
+     Windows are Microsoft Visual C++ 6.0, and gcc/MinGW.  Both
+     are producing executables that link to MSVCRT.DLL by default,
+     without offering other dynamic CRTs as alternatives easy to
+     select by users.
+ 
+ 
+ 11. Why are you not linking ZLIB1.DLL to
+     <<my favorite C run-time library>> ?
+ 
+   - We considered and abandoned the following alternatives:
+ 
+     * Linking ZLIB1.DLL to a static C library (LIBC.LIB, or
+       LIBCMT.LIB) is not a good option.  People are using the DLL
+       mainly to save disk space.  If you are linking your program
+       to a static C library, you may as well consider linking zlib
+       in statically, too.
+ 
+     * Linking ZLIB1.DLL to CRTDLL.DLL looks very appealing,
+       because CRTDLL.DLL is present on every Win32 installation.
+       Unfortunately, it has a series of problems: it raises
+       difficulties when using it with C++ code, it does not work
+       with 64-bit file offsets, (and so on...), and Microsoft
+       discontinued its support a long time ago.
+ 
+     * Linking ZLIB1.DLL to MSVCR70.DLL, supplied with the
+       Microsoft .NET platform and Visual C++ 7.0 or newer, is not
+       a good option.  Although it is available for free download
+       and distribution, its presence is scarce on today's Win32
+       installations.  If it will ever become more popular than
+       MSVCRT.DLL and will be pre-installed on the future Win32
+       systems, we will probably think again about it.
+ 
+     * Linking ZLIB1.DLL to NTDLL.DLL is not possible.
+       NTDLL.DLL exports only a part of the C library, and only on
+       Windows NT systems.
+ 
+ 
+ 12. I need to link my own DLL build to a CRT different than
+     MSVCRT.DLL.  What can I do?
+ 
+   - Feel free to rebuild the DLL from the zlib sources, and link
+     it the way you want.  You should, however, clearly state that
+     your build is unofficial.  You should give it a different file
+     name, and/or install it in a private directory that can be
+     accessed by your application only, and is not visible to the
+     others (e.g. it's not in the SYSTEM or the SYSTEM32 directory,
+     and it's not in the PATH).  Otherwise, your build may clash
+     with applications that link to the official build.
+ 
+     For example, in Cygwin, zlib is linked to the Cygwin runtime
+     CYGWIN1.DLL, and it is distributed under the name CYGZ.DLL.
+ 
+ 
+ 13. May I include additional pieces of code that I find useful,
+     link them in ZLIB1.DLL, and export them?
+ 
+   - No.  A legitimate build of ZLIB1.DLL must not include code
+     that does not originate from the official zlib source code.
+     But you can make your own private DLL build, under a different
+     file name, as suggested in the previous answer.
+ 
+     For example, in Borland Delphi and C++ Builder, zlib is a part
+     of the standard VCL library.  If an application links to VCL
+     dynamically, the name of the distributable binary (VCLxx.DLL)
+     does not posess any danger of clashing with a legitimate but
+     incompatible ZLIB1.DLL.
+ 
+ 
+ 14. May I remove some functionality out of ZLIB1.DLL, by enabling
+     macros like NO_GZCOMPRESS or NO_GZIP at compile time?
+ 
+   - No.  A legitimate build of ZLIB1.DLL must provide the complete
+     zlib functionality, as implemented in the official zlib source
+     code.  But you can make your own private DLL build, under a
+     different file name, as suggested in the previous answer.
+ 
+ 
+ 15. I made my own ZLIB1.DLL build.  Can I test it for compliance?
+ 
+   - We prefer that you download the official DLL from the zlib
+     web site.  If you need something peculiar from this DLL, you
+     can send your suggestion to the zlib mailing list.
+ 
+     However, in case you do rebuild the DLL yourself, you can run
+     it with the test programs found in the DLL distribution.
+     Running these test programs is not a guarantee of compliance,
+     but a failure can imply a detected problem.
+ 
+ **
+ 
+ This document is written and maintained by
+ Cosmin Truta <cosmint@cs.ubbcluj.ro>
diff -Nrcpad gcc-3.4.3/zlib/win32/Makefile.bor gcc-4.0.0/zlib/win32/Makefile.bor
*** gcc-3.4.3/zlib/win32/Makefile.bor	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/win32/Makefile.bor	Mon Oct 11 17:44:24 2004
***************
*** 0 ****
--- 1,107 ----
+ # Makefile for zlib
+ # Borland C++ for Win32
+ #
+ # Updated for zlib 1.2.x by Cosmin Truta, 11-Mar-2003
+ # Last updated: 28-Aug-2003
+ #
+ # Usage:
+ #  make -f win32/Makefile.bor
+ #  make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj
+ 
+ # ------------ Borland C++ ------------
+ 
+ # Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
+ # should be added to the environment via "set LOCAL_ZLIB=-DFOO" or
+ # added to the declaration of LOC here:
+ LOC = $(LOCAL_ZLIB)
+ 
+ CC = bcc32
+ AS = bcc32
+ LD = bcc32
+ AR = tlib
+ CFLAGS  = -a -d -k- -O2 $(LOC)
+ ASFLAGS = $(LOC)
+ LDFLAGS = $(LOC)
+ 
+ 
+ # variables
+ ZLIB_LIB = zlib.lib
+ 
+ OBJ1  = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj
+ OBJ2  = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj
+ #OBJA =
+ OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj
+ OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj
+ #OBJPA=
+ 
+ 
+ # targets
+ all: $(ZLIB_LIB) example.exe minigzip.exe
+ 
+ .c.obj:
+ 	$(CC) -c $(CFLAGS) $<
+ 
+ .asm.obj:
+ 	$(AS) -c $(ASFLAGS) $<
+ 
+ adler32.obj: adler32.c zlib.h zconf.h
+ 
+ compress.obj: compress.c zlib.h zconf.h
+ 
+ crc32.obj: crc32.c zlib.h zconf.h crc32.h
+ 
+ deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
+ 
+ gzio.obj: gzio.c zutil.h zlib.h zconf.h
+ 
+ infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+  inffast.h inffixed.h
+ 
+ inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+  inffast.h
+ 
+ inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+  inffast.h inffixed.h
+ 
+ inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
+ 
+ trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h
+ 
+ uncompr.obj: uncompr.c zlib.h zconf.h
+ 
+ zutil.obj: zutil.c zutil.h zlib.h zconf.h
+ 
+ example.obj: example.c zlib.h zconf.h
+ 
+ minigzip.obj: minigzip.c zlib.h zconf.h
+ 
+ 
+ # For the sake of the old Borland make,
+ # the command line is cut to fit in the MS-DOS 128 byte limit:
+ $(ZLIB_LIB): $(OBJ1) $(OBJ2) $(OBJA)
+ 	-del $(ZLIB_LIB)
+ 	$(AR) $(ZLIB_LIB) $(OBJP1)
+ 	$(AR) $(ZLIB_LIB) $(OBJP2)
+ 	$(AR) $(ZLIB_LIB) $(OBJPA)
+ 
+ 
+ # testing
+ test: example.exe minigzip.exe
+ 	example
+ 	echo hello world | minigzip | minigzip -d
+ 
+ example.exe: example.obj $(ZLIB_LIB)
+ 	$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
+ 
+ minigzip.exe: minigzip.obj $(ZLIB_LIB)
+ 	$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)
+ 
+ 
+ # cleanup
+ clean:
+ 	-del *.obj
+ 	-del *.lib
+ 	-del *.exe
+ 	-del *.tds
+ 	-del zlib.bak
+ 	-del foo.gz
diff -Nrcpad gcc-3.4.3/zlib/win32/Makefile.emx gcc-4.0.0/zlib/win32/Makefile.emx
*** gcc-3.4.3/zlib/win32/Makefile.emx	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/win32/Makefile.emx	Mon Oct 11 17:44:23 2004
***************
*** 0 ****
--- 1,69 ----
+ # Makefile for zlib.  Modified for emx/rsxnt by Chr. Spieler, 6/16/98.
+ # Copyright (C) 1995-1998 Jean-loup Gailly.
+ # For conditions of distribution and use, see copyright notice in zlib.h
+ 
+ # To compile, or to compile and test, type:
+ #
+ #   make -fmakefile.emx;  make test -fmakefile.emx
+ #
+ 
+ CC=gcc -Zwin32
+ 
+ #CFLAGS=-MMD -O
+ #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
+ #CFLAGS=-MMD -g -DDEBUG
+ CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
+              -Wstrict-prototypes -Wmissing-prototypes
+ 
+ # If cp.exe is available, replace "copy /Y" with "cp -fp" .
+ CP=copy /Y
+ # If gnu install.exe is available, replace $(CP) with ginstall.
+ INSTALL=$(CP)
+ # The default value of RM is "rm -f."  If "rm.exe" is found, comment out:
+ RM=del
+ LDLIBS=-L. -lzlib
+ LD=$(CC) -s -o
+ LDSHARED=$(CC)
+ 
+ INCL=zlib.h zconf.h
+ LIBS=zlib.a
+ 
+ AR=ar rcs
+ 
+ prefix=/usr/local
+ exec_prefix = $(prefix)
+ 
+ OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
+        zutil.o inflate.o infback.o inftrees.o inffast.o
+ 
+ TEST_OBJS = example.o minigzip.o
+ 
+ all: example.exe minigzip.exe
+ 
+ test: all
+ 	./example
+ 	echo hello world | .\minigzip | .\minigzip -d
+ 
+ %.o : %.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+ 
+ zlib.a: $(OBJS)
+ 	$(AR) $@ $(OBJS)
+ 
+ %.exe : %.o $(LIBS)
+ 	$(LD) $@ $< $(LDLIBS)
+ 
+ 
+ .PHONY : clean
+ 
+ clean:
+ 	$(RM) *.d
+ 	$(RM) *.o
+ 	$(RM) *.exe
+ 	$(RM) zlib.a
+ 	$(RM) foo.gz
+ 
+ DEPS := $(wildcard *.d)
+ ifneq ($(DEPS),)
+ include $(DEPS)
+ endif
diff -Nrcpad gcc-3.4.3/zlib/win32/Makefile.gcc gcc-4.0.0/zlib/win32/Makefile.gcc
*** gcc-3.4.3/zlib/win32/Makefile.gcc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/win32/Makefile.gcc	Mon Oct 11 17:44:27 2004
***************
*** 0 ****
--- 1,141 ----
+ # Makefile for zlib, derived from Makefile.dj2.
+ # Modified for mingw32 by C. Spieler, 6/16/98.
+ # Updated for zlib 1.2.x by Christian Spieler and Cosmin Truta, Mar-2003.
+ # Last updated: 1-Aug-2003.
+ # Tested under Cygwin and MinGW.
+ 
+ # Copyright (C) 1995-2003 Jean-loup Gailly.
+ # For conditions of distribution and use, see copyright notice in zlib.h
+ 
+ # To compile, or to compile and test, type:
+ #
+ #   make -fmakefile.gcc;  make test testdll -fmakefile.gcc
+ #
+ # To use the asm code, type:
+ #   cp contrib/asm?86/match.S ./match.S
+ #   make LOC=-DASMV OBJA=match.o -fmakefile.gcc
+ #
+ # To install libz.a, zconf.h and zlib.h in the system directories, type:
+ #
+ #   make install -fmakefile.gcc
+ 
+ # Note:
+ # If the platform is *not* MinGW (e.g. it is Cygwin or UWIN),
+ # the DLL name should be changed from "zlib1.dll".
+ 
+ STATICLIB = libz.a
+ SHAREDLIB = zlib1.dll
+ IMPLIB    = libzdll.a
+ 
+ #LOC = -DASMV
+ #LOC = -DDEBUG -g
+ 
+ CC = gcc
+ CFLAGS = $(LOC) -O3 -Wall
+ 
+ AS = $(CC)
+ ASFLAGS = $(LOC) -Wall
+ 
+ LD = $(CC)
+ LDFLAGS = $(LOC) -s
+ 
+ AR = ar
+ ARFLAGS = rcs
+ 
+ RC = windres
+ RCFLAGS = --define GCC_WINDRES
+ 
+ CP = cp -fp
+ # If GNU install is available, replace $(CP) with install.
+ INSTALL = $(CP)
+ RM = rm -f
+ 
+ prefix = /usr/local
+ exec_prefix = $(prefix)
+ 
+ OBJS = adler32.o compress.o crc32.o deflate.o gzio.o infback.o \
+        inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o
+ OBJA =
+ 
+ all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) example minigzip example_d minigzip_d
+ 
+ test: example minigzip
+ 	./example
+ 	echo hello world | ./minigzip | ./minigzip -d
+ 
+ testdll: example_d minigzip_d
+ 	./example_d
+ 	echo hello world | ./minigzip_d | ./minigzip_d -d
+ 
+ .c.o:
+ 	$(CC) $(CFLAGS) -c -o $@ $<
+ 
+ .S.o:
+ 	$(AS) $(ASFLAGS) -c -o $@ $<
+ 
+ $(STATICLIB): $(OBJS) $(OBJA)
+ 	$(AR) $(ARFLAGS) $@ $(OBJS) $(OBJA)
+ 
+ $(IMPLIB): $(SHAREDLIB)
+ 
+ $(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlibrc.o
+ 	dllwrap --driver-name $(CC) --def win32/zlib.def \
+ 	  --implib $(IMPLIB) -o $@ $(OBJS) $(OBJA) zlibrc.o
+ 	strip $@
+ 
+ example: example.o $(STATICLIB)
+ 	$(LD) $(LDFLAGS) -o $@ example.o $(STATICLIB)
+ 
+ minigzip: minigzip.o $(STATICLIB)
+ 	$(LD) $(LDFLAGS) -o $@ minigzip.o $(STATICLIB)
+ 
+ example_d: example.o $(IMPLIB)
+ 	$(LD) $(LDFLAGS) -o $@ example.o $(IMPLIB)
+ 
+ minigzip_d: minigzip.o $(IMPLIB)
+ 	$(LD) $(LDFLAGS) -o $@ minigzip.o $(IMPLIB)
+ 
+ zlibrc.o: win32/zlib1.rc
+ 	$(RC) $(RCFLAGS) -o $@ win32/zlib1.rc
+ 
+ 
+ # INCLUDE_PATH and LIBRARY_PATH must be set.
+ 
+ .PHONY: install uninstall clean
+ 
+ install: zlib.h zconf.h $(LIB)
+ 	-@if not exist $(INCLUDE_PATH)/nul mkdir $(INCLUDE_PATH)
+ 	-@if not exist $(LIBRARY_PATH)/nul mkdir $(LIBRARY_PATH)
+ 	-$(INSTALL) zlib.h $(INCLUDE_PATH)
+ 	-$(INSTALL) zconf.h $(INCLUDE_PATH)
+ 	-$(INSTALL) $(STATICLIB) $(LIBRARY_PATH)
+ 	-$(INSTALL) $(IMPLIB) $(LIBRARY_PATH)
+ 
+ uninstall:
+ 	-$(RM) $(INCLUDE_PATH)/zlib.h
+ 	-$(RM) $(INCLUDE_PATH)/zconf.h
+ 	-$(RM) $(LIBRARY_PATH)/$(STATICLIB)
+ 	-$(RM) $(LIBRARY_PATH)/$(IMPLIB)
+ 
+ clean:
+ 	-$(RM) $(STATICLIB)
+ 	-$(RM) $(SHAREDLIB)
+ 	-$(RM) $(IMPLIB)
+ 	-$(RM) *.o
+ 	-$(RM) *.exe
+ 	-$(RM) foo.gz
+ 
+ adler32.o: zlib.h zconf.h
+ compress.o: zlib.h zconf.h
+ crc32.o: crc32.h zlib.h zconf.h
+ deflate.o: deflate.h zutil.h zlib.h zconf.h
+ example.o: zlib.h zconf.h
+ gzio.o: zutil.h zlib.h zconf.h
+ inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
+ inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
+ infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
+ inftrees.o: zutil.h zlib.h zconf.h inftrees.h
+ minigzip.o: zlib.h zconf.h
+ trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
+ uncompr.o: zlib.h zconf.h
+ zutil.o: zutil.h zlib.h zconf.h
diff -Nrcpad gcc-3.4.3/zlib/win32/Makefile.msc gcc-4.0.0/zlib/win32/Makefile.msc
*** gcc-3.4.3/zlib/win32/Makefile.msc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/win32/Makefile.msc	Mon Oct 11 17:44:24 2004
***************
*** 0 ****
--- 1,126 ----
+ # Makefile for zlib -- Microsoft (Visual) C
+ #
+ # Authors:
+ #   Cosmin Truta, 11-Mar-2003
+ #   Christian Spieler, 19-Mar-2003
+ #
+ # Last updated:
+ #   Cosmin Truta, 27-Aug-2003
+ #
+ # Usage:
+ #   nmake -f win32/Makefile.msc            (standard build)
+ #   nmake -f win32/Makefile.msc LOC=-DFOO  (nonstandard build)
+ #   nmake -f win32/Makefile.msc LOC=-DASMV OBJA=match.obj  (use ASM code)
+ 
+ 
+ # optional build flags
+ LOC =
+ 
+ 
+ # variables
+ STATICLIB = zlib.lib
+ SHAREDLIB = zlib1.dll
+ IMPLIB    = zdll.lib
+ 
+ CC = cl
+ AS = ml
+ LD = link
+ AR = lib
+ RC = rc
+ CFLAGS  = -nologo -MD -O2 $(LOC)
+ ASFLAGS = -coff
+ LDFLAGS = -nologo -release
+ ARFLAGS = -nologo
+ RCFLAGS = /dWIN32 /r
+ 
+ OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj \
+        inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj
+ OBJA =
+ 
+ 
+ # targets
+ all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \
+      example.exe minigzip.exe example_d.exe minigzip_d.exe
+ 
+ $(STATICLIB): $(OBJS) $(OBJA)
+ 	$(AR) $(ARFLAGS) -out:$@ $(OBJS) $(OBJA)
+ 
+ $(IMPLIB): $(SHAREDLIB)
+ 
+ $(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlib1.res
+ 	$(LD) $(LDFLAGS) -def:win32/zlib.def -dll -implib:$(IMPLIB) \
+ 	  -out:$@ $(OBJS) $(OBJA) zlib1.res
+ 
+ example.exe: example.obj $(STATICLIB)
+ 	$(LD) $(LDFLAGS) example.obj $(STATICLIB)
+ 
+ minigzip.exe: minigzip.obj $(STATICLIB)
+ 	$(LD) $(LDFLAGS) minigzip.obj $(STATICLIB)
+ 
+ example_d.exe: example.obj $(IMPLIB)
+ 	$(LD) $(LDFLAGS) -out:$@ example.obj $(IMPLIB)
+ 
+ minigzip_d.exe: minigzip.obj $(IMPLIB)
+ 	$(LD) $(LDFLAGS) -out:$@ minigzip.obj $(IMPLIB)
+ 
+ .c.obj:
+ 	$(CC) -c $(CFLAGS) $<
+ 
+ .asm.obj:
+ 	$(AS) -c $(ASFLAGS) $<
+ 
+ adler32.obj: adler32.c zlib.h zconf.h
+ 
+ compress.obj: compress.c zlib.h zconf.h
+ 
+ crc32.obj: crc32.c zlib.h zconf.h crc32.h
+ 
+ deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
+ 
+ gzio.obj: gzio.c zutil.h zlib.h zconf.h
+ 
+ infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+              inffast.h inffixed.h
+ 
+ inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+              inffast.h
+ 
+ inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
+              inffast.h inffixed.h
+ 
+ inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
+ 
+ trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h
+ 
+ uncompr.obj: uncompr.c zlib.h zconf.h
+ 
+ zutil.obj: zutil.c zutil.h zlib.h zconf.h
+ 
+ example.obj: example.c zlib.h zconf.h
+ 
+ minigzip.obj: minigzip.c zlib.h zconf.h
+ 
+ zlib1.res: win32/zlib1.rc
+ 	$(RC) $(RCFLAGS) /fo$@ win32/zlib1.rc
+ 
+ 
+ # testing
+ test: example.exe minigzip.exe
+ 	example
+ 	echo hello world | minigzip | minigzip -d
+ 
+ testdll: example_d.exe minigzip_d.exe
+ 	example_d
+ 	echo hello world | minigzip_d | minigzip_d -d
+ 
+ 
+ # cleanup
+ clean:
+ 	-del $(STATICLIB)
+ 	-del $(SHAREDLIB)
+ 	-del $(IMPLIB)
+ 	-del *.obj
+ 	-del *.res
+ 	-del *.exp
+ 	-del *.exe
+ 	-del foo.gz
diff -Nrcpad gcc-3.4.3/zlib/win32/zlib.def gcc-4.0.0/zlib/win32/zlib.def
*** gcc-3.4.3/zlib/win32/zlib.def	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/win32/zlib.def	Mon Oct 11 17:44:24 2004
***************
*** 0 ****
--- 1,60 ----
+ LIBRARY
+ ; zlib data compression library
+ 
+ EXPORTS
+ ; basic functions
+     zlibVersion
+     deflate
+     deflateEnd
+     inflate
+     inflateEnd
+ ; advanced functions
+     deflateSetDictionary
+     deflateCopy
+     deflateReset
+     deflateParams
+     deflateBound
+     deflatePrime
+     inflateSetDictionary
+     inflateSync
+     inflateCopy
+     inflateReset
+     inflateBack
+     inflateBackEnd
+     zlibCompileFlags
+ ; utility functions
+     compress
+     compress2
+     compressBound
+     uncompress
+     gzopen
+     gzdopen
+     gzsetparams
+     gzread
+     gzwrite
+     gzprintf
+     gzputs
+     gzgets
+     gzputc
+     gzgetc
+     gzungetc
+     gzflush
+     gzseek
+     gzrewind
+     gztell
+     gzeof
+     gzclose
+     gzerror
+     gzclearerr
+ ; checksum functions
+     adler32
+     crc32
+ ; various hacks, don't look :)
+     deflateInit_
+     deflateInit2_
+     inflateInit_
+     inflateInit2_
+     inflateBackInit_
+     inflateSyncPoint
+     get_crc_table
+     zError
diff -Nrcpad gcc-3.4.3/zlib/win32/zlib1.rc gcc-4.0.0/zlib/win32/zlib1.rc
*** gcc-3.4.3/zlib/win32/zlib1.rc	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/win32/zlib1.rc	Mon Oct 11 17:44:24 2004
***************
*** 0 ****
--- 1,39 ----
+ #include <windows.h>
+ 
+ #ifdef GCC_WINDRES
+ VS_VERSION_INFO		VERSIONINFO
+ #else
+ VS_VERSION_INFO		VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE
+ #endif
+   FILEVERSION		1,2,1,0
+   PRODUCTVERSION	1,2,1,0
+   FILEFLAGSMASK		VS_FFI_FILEFLAGSMASK
+ #ifdef _DEBUG
+   FILEFLAGS		1
+ #else
+   FILEFLAGS		0
+ #endif
+   FILEOS		VOS_DOS_WINDOWS32
+   FILETYPE		VFT_DLL
+   FILESUBTYPE		0	// not used
+ BEGIN
+   BLOCK "StringFileInfo"
+   BEGIN
+     BLOCK "040904E4"
+     //language ID = U.S. English, char set = Windows, Multilingual
+     BEGIN
+       VALUE "FileDescription",	"zlib data compression library\0"
+       VALUE "FileVersion",	"1.2.1\0"
+       VALUE "InternalName",	"zlib1.dll\0"
+       VALUE "LegalCopyright",	"(C) 1995-2003 Jean-loup Gailly & Mark Adler\0"
+       VALUE "OriginalFilename",	"zlib1.dll\0"
+       VALUE "ProductName",	"zlib\0"
+       VALUE "ProductVersion",	"1.2.1\0"
+       VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
+     END
+   END
+   BLOCK "VarFileInfo"
+   BEGIN
+     VALUE "Translation", 0x0409, 1252
+   END
+ END
diff -Nrcpad gcc-3.4.3/zlib/zconf.h gcc-4.0.0/zlib/zconf.h
*** gcc-3.4.3/zlib/zconf.h	Mon Mar 11 22:11:18 2002
--- gcc-4.0.0/zlib/zconf.h	Tue Nov 23 00:22:36 2004
***************
*** 1,102 ****
  /* zconf.h -- configuration of the zlib compression library
!  * Copyright (C) 1995-2002 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* @(#) $Id: zconf.h,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
  
! #ifndef _ZCONF_H
! #define _ZCONF_H
  
  /*
   * If you *really* need a unique prefix for all types and library functions,
   * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
   */
  #ifdef Z_PREFIX
! #  define deflateInit_	z_deflateInit_
! #  define deflate	z_deflate
! #  define deflateEnd	z_deflateEnd
! #  define inflateInit_ 	z_inflateInit_
! #  define inflate	z_inflate
! #  define inflateEnd	z_inflateEnd
! #  define deflateInit2_	z_deflateInit2_
  #  define deflateSetDictionary z_deflateSetDictionary
! #  define deflateCopy	z_deflateCopy
! #  define deflateReset	z_deflateReset
! #  define deflateParams	z_deflateParams
! #  define inflateInit2_	z_inflateInit2_
  #  define inflateSetDictionary z_inflateSetDictionary
! #  define inflateSync	z_inflateSync
  #  define inflateSyncPoint z_inflateSyncPoint
! #  define inflateReset	z_inflateReset
! #  define compress	z_compress
! #  define compress2	z_compress2
! #  define uncompress	z_uncompress
! #  define adler32	z_adler32
! #  define crc32		z_crc32
  #  define get_crc_table z_get_crc_table
  
! #  define Byte		z_Byte
! #  define uInt		z_uInt
! #  define uLong		z_uLong
! #  define Bytef	        z_Bytef
! #  define charf		z_charf
! #  define intf		z_intf
! #  define uIntf		z_uIntf
! #  define uLongf	z_uLongf
! #  define voidpf	z_voidpf
! #  define voidp		z_voidp
  #endif
  
  #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
  #  define WIN32
  #endif
! #if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386)
! #  ifndef __32BIT__
! #    define __32BIT__
  #  endif
  #endif
- #if defined(__MSDOS__) && !defined(MSDOS)
- #  define MSDOS
- #endif
  
  /*
   * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
   * than 64k bytes at a time (needed on systems with 16-bit int).
   */
! #if defined(MSDOS) && !defined(__32BIT__)
  #  define MAXSEG_64K
  #endif
  #ifdef MSDOS
  #  define UNALIGNED_OK
  #endif
  
! #if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32))  && !defined(STDC)
! #  define STDC
! #endif
! #if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)
  #  ifndef STDC
  #    define STDC
  #  endif
  #endif
  
  #ifndef STDC
  #  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
! #    define const
  #  endif
  #endif
  
  /* Some Mac compilers merge all .h files incorrectly: */
! #if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__)
  #  define NO_DUMMY_DECL
  #endif
  
- /* Old Borland C incorrectly complains about missing returns: */
- #if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
- #  define NEED_DUMMY_RETURN
- #endif
- 
- 
  /* Maximum value for memLevel in deflateInit2 */
  #ifndef MAX_MEM_LEVEL
  #  ifdef MAXSEG_64K
--- 1,126 ----
  /* zconf.h -- configuration of the zlib compression library
!  * Copyright (C) 1995-2003 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /* @(#) $Id: zconf.h,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
  
! #ifndef ZCONF_H
! #define ZCONF_H
  
  /*
   * If you *really* need a unique prefix for all types and library functions,
   * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
   */
  #ifdef Z_PREFIX
! #  define deflateInit_  z_deflateInit_
! #  define deflate       z_deflate
! #  define deflateEnd    z_deflateEnd
! #  define inflateInit_  z_inflateInit_
! #  define inflate       z_inflate
! #  define inflateEnd    z_inflateEnd
! #  define deflateInit2_ z_deflateInit2_
  #  define deflateSetDictionary z_deflateSetDictionary
! #  define deflateCopy   z_deflateCopy
! #  define deflateReset  z_deflateReset
! #  define deflatePrime  z_deflatePrime
! #  define deflateParams z_deflateParams
! #  define deflateBound  z_deflateBound
! #  define inflateInit2_ z_inflateInit2_
  #  define inflateSetDictionary z_inflateSetDictionary
! #  define inflateSync   z_inflateSync
  #  define inflateSyncPoint z_inflateSyncPoint
! #  define inflateCopy   z_inflateCopy
! #  define inflateReset  z_inflateReset
! #  define compress      z_compress
! #  define compress2     z_compress2
! #  define compressBound z_compressBound
! #  define uncompress    z_uncompress
! #  define adler32       z_adler32
! #  define crc32         z_crc32
  #  define get_crc_table z_get_crc_table
  
! #  define Byte          z_Byte
! #  define uInt          z_uInt
! #  define uLong         z_uLong
! #  define Bytef         z_Bytef
! #  define charf         z_charf
! #  define intf          z_intf
! #  define uIntf         z_uIntf
! #  define uLongf        z_uLongf
! #  define voidpf        z_voidpf
! #  define voidp         z_voidp
  #endif
  
+ #if defined(__MSDOS__) && !defined(MSDOS)
+ #  define MSDOS
+ #endif
+ #if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+ #  define OS2
+ #endif
+ #if defined(_WINDOWS) && !defined(WINDOWS)
+ #  define WINDOWS
+ #endif
  #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
  #  define WIN32
  #endif
! #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
! #  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
! #    ifndef SYS16BIT
! #      define SYS16BIT
! #    endif
  #  endif
  #endif
  
  /*
   * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
   * than 64k bytes at a time (needed on systems with 16-bit int).
   */
! #ifdef SYS16BIT
  #  define MAXSEG_64K
  #endif
  #ifdef MSDOS
  #  define UNALIGNED_OK
  #endif
  
! #ifdef __STDC_VERSION__
  #  ifndef STDC
  #    define STDC
  #  endif
+ #  if __STDC_VERSION__ >= 199901L
+ #    ifndef STDC99
+ #      define STDC99
+ #    endif
+ #  endif
+ #endif
+ #if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+ #  define STDC
+ #endif
+ #if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+ #  define STDC
+ #endif
+ #if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+ #  define STDC
+ #endif
+ #if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+ #  define STDC
+ #endif
+ 
+ #if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
+ #  define STDC
  #endif
  
  #ifndef STDC
  #  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
! #    define const       /* note: need a more gentle solution here */
  #  endif
  #endif
  
  /* Some Mac compilers merge all .h files incorrectly: */
! #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
  #  define NO_DUMMY_DECL
  #endif
  
  /* Maximum value for memLevel in deflateInit2 */
  #ifndef MAX_MEM_LEVEL
  #  ifdef MAXSEG_64K
***************
*** 144,216 ****
   * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
   * just define FAR to be empty.
   */
! #if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__)
!    /* MSC small or medium model */
! #  define SMALL_MEDIUM
! #  ifdef _MSC_VER
! #    define FAR _far
! #  else
! #    define FAR far
  #  endif
! #endif
! #if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
! #  ifndef __32BIT__
  #    define SMALL_MEDIUM
! #    define FAR _far
  #  endif
  #endif
  
! /* Compile with -DZLIB_DLL for Windows DLL support */
! #if defined(ZLIB_DLL)
! #  if defined(_WINDOWS) || defined(WINDOWS)
  #    ifdef FAR
  #      undef FAR
  #    endif
  #    include <windows.h>
! #    define ZEXPORT  WINAPI
  #    ifdef WIN32
! #      define ZEXPORTVA  WINAPIV
! #    else
! #      define ZEXPORTVA  FAR _cdecl _export
! #    endif
! #  endif
! #  if defined (__BORLANDC__)
! #    if (__BORLANDC__ >= 0x0500) && defined (WIN32)
! #      include <windows.h>
! #      define ZEXPORT __declspec(dllexport) WINAPI
! #      define ZEXPORTRVA __declspec(dllexport) WINAPIV
  #    else
! #      if defined (_Windows) && defined (__DLL__)
! #        define ZEXPORT _export
! #        define ZEXPORTVA _export
! #      endif
  #    endif
  #  endif
  #endif
  
  #if defined (__BEOS__)
! #  if defined (ZLIB_DLL)
! #    define ZEXTERN extern __declspec(dllexport)
! #  else
! #    define ZEXTERN extern __declspec(dllimport)
  #  endif
  #endif
  
  #ifndef ZEXPORT
  #  define ZEXPORT
  #endif
  #ifndef ZEXPORTVA
  #  define ZEXPORTVA
  #endif
- #ifndef ZEXTERN
- #  define ZEXTERN extern
- #endif
  
  #ifndef FAR
! #   define FAR
  #endif
  
! #if !defined(MACOS) && !defined(TARGET_OS_MAC)
  typedef unsigned char  Byte;  /* 8 bits */
  #endif
  typedef unsigned int   uInt;  /* 16 bits or more */
--- 168,254 ----
   * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
   * just define FAR to be empty.
   */
! #ifdef SYS16BIT
! #  if defined(M_I86SM) || defined(M_I86MM)
!      /* MSC small or medium model */
! #    define SMALL_MEDIUM
! #    ifdef _MSC_VER
! #      define FAR _far
! #    else
! #      define FAR far
! #    endif
  #  endif
! #  if (defined(__SMALL__) || defined(__MEDIUM__))
!      /* Turbo C small or medium model */
  #    define SMALL_MEDIUM
! #    ifdef __BORLANDC__
! #      define FAR _far
! #    else
! #      define FAR far
! #    endif
  #  endif
  #endif
  
! #if defined(WINDOWS) || defined(WIN32)
!    /* If building or using zlib as a DLL, define ZLIB_DLL.
!     * This is not mandatory, but it offers a little performance increase.
!     */
! #  ifdef ZLIB_DLL
! #    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
! #      ifdef ZLIB_INTERNAL
! #        define ZEXTERN extern __declspec(dllexport)
! #      else
! #        define ZEXTERN extern __declspec(dllimport)
! #      endif
! #    endif
! #  endif  /* ZLIB_DLL */
!    /* If building or using zlib with the WINAPI/WINAPIV calling convention,
!     * define ZLIB_WINAPI.
!     * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
!     */
! #  ifdef ZLIB_WINAPI
  #    ifdef FAR
  #      undef FAR
  #    endif
  #    include <windows.h>
!      /* No need for _export, use ZLIB.DEF instead. */
!      /* For complete Windows compatibility, use WINAPI, not __stdcall. */
! #    define ZEXPORT WINAPI
  #    ifdef WIN32
! #      define ZEXPORTVA WINAPIV
  #    else
! #      define ZEXPORTVA FAR CDECL
  #    endif
  #  endif
  #endif
  
  #if defined (__BEOS__)
! #  ifdef ZLIB_DLL
! #    ifdef ZLIB_INTERNAL
! #      define ZEXPORT   __declspec(dllexport)
! #      define ZEXPORTVA __declspec(dllexport)
! #    else
! #      define ZEXPORT   __declspec(dllimport)
! #      define ZEXPORTVA __declspec(dllimport)
! #    endif
  #  endif
  #endif
  
+ #ifndef ZEXTERN
+ #  define ZEXTERN extern
+ #endif
  #ifndef ZEXPORT
  #  define ZEXPORT
  #endif
  #ifndef ZEXPORTVA
  #  define ZEXPORTVA
  #endif
  
  #ifndef FAR
! #  define FAR
  #endif
  
! #if !defined(__MACTYPES__)
  typedef unsigned char  Byte;  /* 8 bits */
  #endif
  typedef unsigned int   uInt;  /* 16 bits or more */
*************** typedef uInt  FAR uIntf;
*** 228,243 ****
  typedef uLong FAR uLongf;
  
  #ifdef STDC
!    typedef void FAR *voidpf;
!    typedef void     *voidp;
  #else
!    typedef Byte FAR *voidpf;
!    typedef Byte     *voidp;
  #endif
  
! #ifdef HAVE_UNISTD_H
  #  include <sys/types.h> /* for off_t */
  #  include <unistd.h>    /* for SEEK_* and off_t */
  #  define z_off_t  off_t
  #endif
  #ifndef SEEK_SET
--- 266,286 ----
  typedef uLong FAR uLongf;
  
  #ifdef STDC
!    typedef void const *voidpc;
!    typedef void FAR   *voidpf;
!    typedef void       *voidp;
  #else
!    typedef Byte const *voidpc;
!    typedef Byte FAR   *voidpf;
!    typedef Byte       *voidp;
  #endif
  
! #if 0           /* HAVE_UNISTD_H -- this line is updated by ./configure */
  #  include <sys/types.h> /* for off_t */
  #  include <unistd.h>    /* for SEEK_* and off_t */
+ #  ifdef VMS
+ #    include <unixio.h>   /* for off_t */
+ #  endif
  #  define z_off_t  off_t
  #endif
  #ifndef SEEK_SET
*************** typedef uLong FAR uLongf;
*** 249,279 ****
  #  define  z_off_t long
  #endif
  
  /* MVS linker does not support external names larger than 8 bytes */
  #if defined(__MVS__)
  #   pragma map(deflateInit_,"DEIN")
  #   pragma map(deflateInit2_,"DEIN2")
  #   pragma map(deflateEnd,"DEEND")
  #   pragma map(inflateInit_,"ININ")
  #   pragma map(inflateInit2_,"ININ2")
  #   pragma map(inflateEnd,"INEND")
  #   pragma map(inflateSync,"INSY")
  #   pragma map(inflateSetDictionary,"INSEDI")
! #   pragma map(inflate_blocks,"INBL")
! #   pragma map(inflate_blocks_new,"INBLNE")
! #   pragma map(inflate_blocks_free,"INBLFR")
! #   pragma map(inflate_blocks_reset,"INBLRE")
! #   pragma map(inflate_codes_free,"INCOFR")
! #   pragma map(inflate_codes,"INCO")
  #   pragma map(inflate_fast,"INFA")
- #   pragma map(inflate_flush,"INFLU")
- #   pragma map(inflate_mask,"INMA")
- #   pragma map(inflate_set_dictionary,"INSEDI2")
  #   pragma map(inflate_copyright,"INCOPY")
- #   pragma map(inflate_trees_bits,"INTRBI")
- #   pragma map(inflate_trees_dynamic,"INTRDY")
- #   pragma map(inflate_trees_fixed,"INTRFI")
- #   pragma map(inflate_trees_free,"INTRFR")
  #endif
  
! #endif /* _ZCONF_H */
--- 292,331 ----
  #  define  z_off_t long
  #endif
  
+ #if defined(__OS400__)
+ #define NO_vsnprintf
+ #endif
+ 
+ #if defined(__MVS__)
+ #  define NO_vsnprintf
+ #  ifdef FAR
+ #    undef FAR
+ #  endif
+ #endif
+ 
  /* MVS linker does not support external names larger than 8 bytes */
  #if defined(__MVS__)
  #   pragma map(deflateInit_,"DEIN")
  #   pragma map(deflateInit2_,"DEIN2")
  #   pragma map(deflateEnd,"DEEND")
+ #   pragma map(deflateBound,"DEBND")
  #   pragma map(inflateInit_,"ININ")
  #   pragma map(inflateInit2_,"ININ2")
  #   pragma map(inflateEnd,"INEND")
  #   pragma map(inflateSync,"INSY")
  #   pragma map(inflateSetDictionary,"INSEDI")
! #   pragma map(compressBound,"CMBND")
! #   pragma map(inflate_table,"INTABL")
  #   pragma map(inflate_fast,"INFA")
  #   pragma map(inflate_copyright,"INCOPY")
  #endif
  
! /* Solaris 2.5.1 doesn't have vsnprintf */
! #if defined(__sun) && defined(__svr4__)
! #include <sys/feature_tests.h>
! #if _XOPEN_VERSION < 3
! #define NO_vsnprintf
! #endif
! #endif
! 
! #endif /* ZCONF_H */
diff -Nrcpad gcc-3.4.3/zlib/zconf.in.h gcc-4.0.0/zlib/zconf.in.h
*** gcc-3.4.3/zlib/zconf.in.h	Thu Jan  1 00:00:00 1970
--- gcc-4.0.0/zlib/zconf.in.h	Mon Oct 11 17:44:14 2004
***************
*** 0 ****
--- 1,323 ----
+ /* zconf.h -- configuration of the zlib compression library
+  * Copyright (C) 1995-2003 Jean-loup Gailly.
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
+ /* @(#) $Id: zconf.in.h,v 1.1.1.1 2004/10/11 17:44:14 tromey Exp $ */
+ 
+ #ifndef ZCONF_H
+ #define ZCONF_H
+ 
+ /*
+  * If you *really* need a unique prefix for all types and library functions,
+  * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+  */
+ #ifdef Z_PREFIX
+ #  define deflateInit_  z_deflateInit_
+ #  define deflate       z_deflate
+ #  define deflateEnd    z_deflateEnd
+ #  define inflateInit_  z_inflateInit_
+ #  define inflate       z_inflate
+ #  define inflateEnd    z_inflateEnd
+ #  define deflateInit2_ z_deflateInit2_
+ #  define deflateSetDictionary z_deflateSetDictionary
+ #  define deflateCopy   z_deflateCopy
+ #  define deflateReset  z_deflateReset
+ #  define deflatePrime  z_deflatePrime
+ #  define deflateParams z_deflateParams
+ #  define deflateBound  z_deflateBound
+ #  define inflateInit2_ z_inflateInit2_
+ #  define inflateSetDictionary z_inflateSetDictionary
+ #  define inflateSync   z_inflateSync
+ #  define inflateSyncPoint z_inflateSyncPoint
+ #  define inflateCopy   z_inflateCopy
+ #  define inflateReset  z_inflateReset
+ #  define compress      z_compress
+ #  define compress2     z_compress2
+ #  define compressBound z_compressBound
+ #  define uncompress    z_uncompress
+ #  define adler32       z_adler32
+ #  define crc32         z_crc32
+ #  define get_crc_table z_get_crc_table
+ 
+ #  define Byte          z_Byte
+ #  define uInt          z_uInt
+ #  define uLong         z_uLong
+ #  define Bytef         z_Bytef
+ #  define charf         z_charf
+ #  define intf          z_intf
+ #  define uIntf         z_uIntf
+ #  define uLongf        z_uLongf
+ #  define voidpf        z_voidpf
+ #  define voidp         z_voidp
+ #endif
+ 
+ #if defined(__MSDOS__) && !defined(MSDOS)
+ #  define MSDOS
+ #endif
+ #if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+ #  define OS2
+ #endif
+ #if defined(_WINDOWS) && !defined(WINDOWS)
+ #  define WINDOWS
+ #endif
+ #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
+ #  define WIN32
+ #endif
+ #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+ #  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+ #    ifndef SYS16BIT
+ #      define SYS16BIT
+ #    endif
+ #  endif
+ #endif
+ 
+ /*
+  * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+  * than 64k bytes at a time (needed on systems with 16-bit int).
+  */
+ #ifdef SYS16BIT
+ #  define MAXSEG_64K
+ #endif
+ #ifdef MSDOS
+ #  define UNALIGNED_OK
+ #endif
+ 
+ #ifdef __STDC_VERSION__
+ #  ifndef STDC
+ #    define STDC
+ #  endif
+ #  if __STDC_VERSION__ >= 199901L
+ #    ifndef STDC99
+ #      define STDC99
+ #    endif
+ #  endif
+ #endif
+ #if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+ #  define STDC
+ #endif
+ #if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+ #  define STDC
+ #endif
+ #if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+ #  define STDC
+ #endif
+ #if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+ #  define STDC
+ #endif
+ 
+ #if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
+ #  define STDC
+ #endif
+ 
+ #ifndef STDC
+ #  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+ #    define const       /* note: need a more gentle solution here */
+ #  endif
+ #endif
+ 
+ /* Some Mac compilers merge all .h files incorrectly: */
+ #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+ #  define NO_DUMMY_DECL
+ #endif
+ 
+ /* Maximum value for memLevel in deflateInit2 */
+ #ifndef MAX_MEM_LEVEL
+ #  ifdef MAXSEG_64K
+ #    define MAX_MEM_LEVEL 8
+ #  else
+ #    define MAX_MEM_LEVEL 9
+ #  endif
+ #endif
+ 
+ /* Maximum value for windowBits in deflateInit2 and inflateInit2.
+  * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+  * created by gzip. (Files created by minigzip can still be extracted by
+  * gzip.)
+  */
+ #ifndef MAX_WBITS
+ #  define MAX_WBITS   15 /* 32K LZ77 window */
+ #endif
+ 
+ /* The memory requirements for deflate are (in bytes):
+             (1 << (windowBits+2)) +  (1 << (memLevel+9))
+  that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+  plus a few kilobytes for small objects. For example, if you want to reduce
+  the default memory requirements from 256K to 128K, compile with
+      make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+  Of course this will generally degrade compression (there's no free lunch).
+ 
+    The memory requirements for inflate are (in bytes) 1 << windowBits
+  that is, 32K for windowBits=15 (default value) plus a few kilobytes
+  for small objects.
+ */
+ 
+                         /* Type declarations */
+ 
+ #ifndef OF /* function prototypes */
+ #  ifdef STDC
+ #    define OF(args)  args
+ #  else
+ #    define OF(args)  ()
+ #  endif
+ #endif
+ 
+ /* The following definitions for FAR are needed only for MSDOS mixed
+  * model programming (small or medium model with some far allocations).
+  * This was tested only with MSC; for other MSDOS compilers you may have
+  * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
+  * just define FAR to be empty.
+  */
+ #ifdef SYS16BIT
+ #  if defined(M_I86SM) || defined(M_I86MM)
+      /* MSC small or medium model */
+ #    define SMALL_MEDIUM
+ #    ifdef _MSC_VER
+ #      define FAR _far
+ #    else
+ #      define FAR far
+ #    endif
+ #  endif
+ #  if (defined(__SMALL__) || defined(__MEDIUM__))
+      /* Turbo C small or medium model */
+ #    define SMALL_MEDIUM
+ #    ifdef __BORLANDC__
+ #      define FAR _far
+ #    else
+ #      define FAR far
+ #    endif
+ #  endif
+ #endif
+ 
+ #if defined(WINDOWS) || defined(WIN32)
+    /* If building or using zlib as a DLL, define ZLIB_DLL.
+     * This is not mandatory, but it offers a little performance increase.
+     */
+ #  ifdef ZLIB_DLL
+ #    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+ #      ifdef ZLIB_INTERNAL
+ #        define ZEXTERN extern __declspec(dllexport)
+ #      else
+ #        define ZEXTERN extern __declspec(dllimport)
+ #      endif
+ #    endif
+ #  endif  /* ZLIB_DLL */
+    /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+     * define ZLIB_WINAPI.
+     * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+     */
+ #  ifdef ZLIB_WINAPI
+ #    ifdef FAR
+ #      undef FAR
+ #    endif
+ #    include <windows.h>
+      /* No need for _export, use ZLIB.DEF instead. */
+      /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+ #    define ZEXPORT WINAPI
+ #    ifdef WIN32
+ #      define ZEXPORTVA WINAPIV
+ #    else
+ #      define ZEXPORTVA FAR CDECL
+ #    endif
+ #  endif
+ #endif
+ 
+ #if defined (__BEOS__)
+ #  ifdef ZLIB_DLL
+ #    ifdef ZLIB_INTERNAL
+ #      define ZEXPORT   __declspec(dllexport)
+ #      define ZEXPORTVA __declspec(dllexport)
+ #    else
+ #      define ZEXPORT   __declspec(dllimport)
+ #      define ZEXPORTVA __declspec(dllimport)
+ #    endif
+ #  endif
+ #endif
+ 
+ #ifndef ZEXTERN
+ #  define ZEXTERN extern
+ #endif
+ #ifndef ZEXPORT
+ #  define ZEXPORT
+ #endif
+ #ifndef ZEXPORTVA
+ #  define ZEXPORTVA
+ #endif
+ 
+ #ifndef FAR
+ #  define FAR
+ #endif
+ 
+ #if !defined(__MACTYPES__)
+ typedef unsigned char  Byte;  /* 8 bits */
+ #endif
+ typedef unsigned int   uInt;  /* 16 bits or more */
+ typedef unsigned long  uLong; /* 32 bits or more */
+ 
+ #ifdef SMALL_MEDIUM
+    /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+ #  define Bytef Byte FAR
+ #else
+    typedef Byte  FAR Bytef;
+ #endif
+ typedef char  FAR charf;
+ typedef int   FAR intf;
+ typedef uInt  FAR uIntf;
+ typedef uLong FAR uLongf;
+ 
+ #ifdef STDC
+    typedef void const *voidpc;
+    typedef void FAR   *voidpf;
+    typedef void       *voidp;
+ #else
+    typedef Byte const *voidpc;
+    typedef Byte FAR   *voidpf;
+    typedef Byte       *voidp;
+ #endif
+ 
+ #if 0           /* HAVE_UNISTD_H -- this line is updated by ./configure */
+ #  include <sys/types.h> /* for off_t */
+ #  include <unistd.h>    /* for SEEK_* and off_t */
+ #  ifdef VMS
+ #    include <unixio.h>   /* for off_t */
+ #  endif
+ #  define z_off_t  off_t
+ #endif
+ #ifndef SEEK_SET
+ #  define SEEK_SET        0       /* Seek from beginning of file.  */
+ #  define SEEK_CUR        1       /* Seek from current position.  */
+ #  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
+ #endif
+ #ifndef z_off_t
+ #  define  z_off_t long
+ #endif
+ 
+ #if defined(__OS400__)
+ #define NO_vsnprintf
+ #endif
+ 
+ #if defined(__MVS__)
+ #  define NO_vsnprintf
+ #  ifdef FAR
+ #    undef FAR
+ #  endif
+ #endif
+ 
+ /* MVS linker does not support external names larger than 8 bytes */
+ #if defined(__MVS__)
+ #   pragma map(deflateInit_,"DEIN")
+ #   pragma map(deflateInit2_,"DEIN2")
+ #   pragma map(deflateEnd,"DEEND")
+ #   pragma map(deflateBound,"DEBND")
+ #   pragma map(inflateInit_,"ININ")
+ #   pragma map(inflateInit2_,"ININ2")
+ #   pragma map(inflateEnd,"INEND")
+ #   pragma map(inflateSync,"INSY")
+ #   pragma map(inflateSetDictionary,"INSEDI")
+ #   pragma map(compressBound,"CMBND")
+ #   pragma map(inflate_table,"INTABL")
+ #   pragma map(inflate_fast,"INFA")
+ #   pragma map(inflate_copyright,"INCOPY")
+ #endif
+ 
+ #endif /* ZCONF_H */
diff -Nrcpad gcc-3.4.3/zlib/zlib.3 gcc-4.0.0/zlib/zlib.3
*** gcc-3.4.3/zlib/zlib.3	Mon Mar 11 22:11:18 2002
--- gcc-4.0.0/zlib/zlib.3	Mon Oct 11 18:45:38 2004
***************
*** 1,4 ****
! .TH ZLIB 3 "11 March 2002"
  .SH NAME
  zlib \- compression/decompression library
  .SH SYNOPSIS
--- 1,4 ----
! .TH ZLIB 3 "17 November 2003"
  .SH NAME
  zlib \- compression/decompression library
  .SH SYNOPSIS
*************** The code is thread safe.
*** 13,19 ****
  It provides in-memory compression and decompression functions,
  including integrity checks of the uncompressed data.
  This version of the library supports only one compression method (deflation)
! but other algorithms will be added later and will have the same stream interface.
  .LP
  Compression can be done in a single step if the buffers are large enough
  (for example if an input file is mmap'ed),
--- 13,20 ----
  It provides in-memory compression and decompression functions,
  including integrity checks of the uncompressed data.
  This version of the library supports only one compression method (deflation)
! but other algorithms will be added later
! and will have the same stream interface.
  .LP
  Compression can be done in a single step if the buffers are large enough
  (for example if an input file is mmap'ed),
*************** the application must provide more input 
*** 23,88 ****
  (providing more output space) before each call.
  .LP
  The library also supports reading and writing files in
! .I gzip
  (.gz) format
  with an interface similar to that of stdio.
  .LP
! The library does not install any signal handler. The decoder checks
! the consistency of the compressed data, so the library should never
! crash even in case of corrupted input.
  .LP
  All functions of the compression library are documented in the file
! .IR zlib.h.
  The distribution source includes examples of use of the library
! the files
  .I example.c
  and
  .IR minigzip.c .
  .LP
  A Java implementation of
! .IR zlib
! is available in the Java Development Kit 1.1
  .IP
  http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html
  .LP
  A Perl interface to
  .IR zlib ,
! written by Paul Marquess (pmarquess@bfsec.bt.co.uk)
  is available at CPAN (Comprehensive Perl Archive Network) sites,
! such as:
  .IP
! ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
  .LP
  A Python interface to
! .IR zlib
! written by A.M. Kuchling <amk@magnet.com>
! is available from the Python Software Association sites, such as:
  .IP
! ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz
! .SH "SEE ALSO"
! Questions about zlib should be sent to:
  .IP
! zlib@quest.jpl.nasa.gov
! or, if this fails, to the author addresses given below.
! The zlib home page is:
  .IP
! http://www.cdrom.com/pub/infozip/zlib/
  .LP
  The data format used by the zlib library is described by RFC
! (Request for Comments) 1950 to 1952 in the files: 
  .IP
! ftp://ds.internic.net/rfc/rfc1950.txt (zlib format)
  .br
! rfc1951.txt (deflate format)
  .br
! rfc1952.txt (gzip format)
  .LP
  These documents are also available in other formats from:
  .IP
  ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
  .SH AUTHORS
! Version 1.1.4
! Copyright (C) 1995-2002 Jean-loup Gailly (jloup@gzip.org)
  and Mark Adler (madler@alumni.caltech.edu).
  .LP
  This software is provided "as-is,"
--- 24,140 ----
  (providing more output space) before each call.
  .LP
  The library also supports reading and writing files in
! .IR gzip (1)
  (.gz) format
  with an interface similar to that of stdio.
  .LP
! The library does not install any signal handler.
! The decoder checks the consistency of the compressed data,
! so the library should never crash even in case of corrupted input.
  .LP
  All functions of the compression library are documented in the file
! .IR zlib.h .
  The distribution source includes examples of use of the library
! in the files
  .I example.c
  and
  .IR minigzip.c .
  .LP
+ Changes to this version are documented in the file
+ .I ChangeLog
+ that accompanies the source,
+ and are concerned primarily with bug fixes and portability enhancements.
+ .LP
  A Java implementation of
! .I zlib
! is available in the Java Development Kit 1.1:
  .IP
  http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html
  .LP
  A Perl interface to
  .IR zlib ,
! written by Paul Marquess (pmqs@cpan.org),
  is available at CPAN (Comprehensive Perl Archive Network) sites,
! including:
  .IP
! http://www.cpan.org/modules/by-module/Compress/
  .LP
  A Python interface to
! .IR zlib ,
! written by A.M. Kuchling (amk@magnet.com),
! is available in Python 1.5 and later versions:
  .IP
! http://www.python.org/doc/lib/module-zlib.html
! .LP
! A
! .I zlib
! binding for
! .IR tcl (1),
! written by Andreas Kupries (a.kupries@westend.com),
! is availlable at:
  .IP
! http://www.westend.com/~kupries/doc/trf/man/man.html
! .LP
! An experimental package to read and write files in .zip format,
! written on top of
! .I zlib
! by Gilles Vollant (info@winimage.com),
! is available at:
  .IP
! http://www.winimage.com/zLibDll/unzip.html
! and also in the
! .I contrib/minizip
! directory of the main
! .I zlib
! web site.
! .SH "SEE ALSO"
! The
! .I zlib
! web site can be found at either of these locations:
! .IP
! http://www.zlib.org
! .br
! http://www.gzip.org/zlib/
  .LP
  The data format used by the zlib library is described by RFC
! (Request for Comments) 1950 to 1952 in the files:
  .IP
! http://www.ietf.org/rfc/rfc1950.txt (concerning zlib format)
  .br
! http://www.ietf.org/rfc/rfc1951.txt (concerning deflate format)
  .br
! http://www.ietf.org/rfc/rfc1952.txt (concerning gzip format)
  .LP
  These documents are also available in other formats from:
  .IP
  ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
+ .LP
+ Mark Nelson (markn@ieee.org) wrote an article about
+ .I zlib
+ for the Jan. 1997 issue of  Dr. Dobb's Journal;
+ a copy of the article is available at:
+ .IP
+ http://dogma.net/markn/articles/zlibtool/zlibtool.htm
+ .SH "REPORTING PROBLEMS"
+ Before reporting a problem,
+ please check the
+ .I zlib
+ web site to verify that you have the latest version of
+ .IR zlib ;
+ otherwise,
+ obtain the latest version and see if the problem still exists.
+ Please read the
+ .I zlib
+ FAQ at:
+ .IP
+ http://www.gzip.org/zlib/zlib_faq.html
+ .LP
+ before asking for help.
+ Send questions and/or comments to zlib@gzip.org,
+ or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).
  .SH AUTHORS
! Version 1.2.1
! Copyright (C) 1995-2003 Jean-loup Gailly (jloup@gzip.org)
  and Mark Adler (madler@alumni.caltech.edu).
  .LP
  This software is provided "as-is,"
diff -Nrcpad gcc-3.4.3/zlib/zlib.h gcc-4.0.0/zlib/zlib.h
*** gcc-3.4.3/zlib/zlib.h	Mon Mar 11 22:11:18 2002
--- gcc-4.0.0/zlib/zlib.h	Mon Oct 11 18:45:38 2004
***************
*** 1,7 ****
  /* zlib.h -- interface of the 'zlib' general purpose compression library
!   version 1.1.4, March 11th, 2002
  
!   Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
  
    This software is provided 'as-is', without any express or implied
    warranty.  In no event will the authors be held liable for any damages
--- 1,7 ----
  /* zlib.h -- interface of the 'zlib' general purpose compression library
!   version 1.2.1, November 17th, 2003
  
!   Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler
  
    This software is provided 'as-is', without any express or implied
    warranty.  In no event will the authors be held liable for any damages
***************
*** 24,35 ****
  
  
    The data format used by the zlib library is described by RFCs (Request for
!   Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
    (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
  */
  
! #ifndef _ZLIB_H
! #define _ZLIB_H
  
  #include "zconf.h"
  
--- 24,35 ----
  
  
    The data format used by the zlib library is described by RFCs (Request for
!   Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt
    (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
  */
  
! #ifndef ZLIB_H
! #define ZLIB_H
  
  #include "zconf.h"
  
***************
*** 37,45 ****
  extern "C" {
  #endif
  
! #define ZLIB_VERSION "1.1.4"
  
! /* 
       The 'zlib' compression library provides in-memory compression and
    decompression functions, including integrity checks of the uncompressed
    data.  This version of the library supports only one compression method
--- 37,46 ----
  extern "C" {
  #endif
  
! #define ZLIB_VERSION "1.2.1"
! #define ZLIB_VERNUM 0x1210
  
! /*
       The 'zlib' compression library provides in-memory compression and
    decompression functions, including integrity checks of the uncompressed
    data.  This version of the library supports only one compression method
*************** extern "C" {
*** 52,59 ****
    application must provide more input and/or consume the output
    (providing more output space) before each call.
  
       The library also supports reading and writing files in gzip (.gz) format
!   with an interface similar to that of stdio.
  
       The library does not install any signal handler. The decoder checks
    the consistency of the compressed data, so the library should never
--- 53,75 ----
    application must provide more input and/or consume the output
    (providing more output space) before each call.
  
+      The compressed data format used by the in-memory functions is the zlib
+   format, which is a zlib wrapper documented in RFC 1950, wrapped around a
+   deflate stream, which is itself documented in RFC 1951.
+ 
       The library also supports reading and writing files in gzip (.gz) format
!   with an interface similar to that of stdio using the functions that start
!   with "gz".  The gzip format is different from the zlib format.  gzip is a
!   gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
! 
!      The zlib format was designed to be compact and fast for use in memory
!   and on communications channels.  The gzip format was designed for single-
!   file compression on file systems, has a larger header than zlib to maintain
!   directory information, and uses a different, slower check method than zlib.
! 
!      This library does not provide any functions to write gzip files in memory.
!   However such functions could be easily written using zlib's deflate function,
!   the documentation in the gzip RFC, and the examples in gzio.c.
  
       The library does not install any signal handler. The decoder checks
    the consistency of the compressed data, so the library should never
*************** typedef z_stream FAR *z_streamp;
*** 127,133 ****
  #define Z_SYNC_FLUSH    2
  #define Z_FULL_FLUSH    3
  #define Z_FINISH        4
! /* Allowed flush values; see deflate() below for details */
  
  #define Z_OK            0
  #define Z_STREAM_END    1
--- 143,150 ----
  #define Z_SYNC_FLUSH    2
  #define Z_FULL_FLUSH    3
  #define Z_FINISH        4
! #define Z_BLOCK         5
! /* Allowed flush values; see deflate() and inflate() below for details */
  
  #define Z_OK            0
  #define Z_STREAM_END    1
*************** typedef z_stream FAR *z_streamp;
*** 150,162 ****
  
  #define Z_FILTERED            1
  #define Z_HUFFMAN_ONLY        2
  #define Z_DEFAULT_STRATEGY    0
  /* compression strategy; see deflateInit2() below for details */
  
  #define Z_BINARY   0
  #define Z_ASCII    1
  #define Z_UNKNOWN  2
! /* Possible values of the data_type field */
  
  #define Z_DEFLATED   8
  /* The deflate compression method (the only one supported in this version) */
--- 167,180 ----
  
  #define Z_FILTERED            1
  #define Z_HUFFMAN_ONLY        2
+ #define Z_RLE                 3
  #define Z_DEFAULT_STRATEGY    0
  /* compression strategy; see deflateInit2() below for details */
  
  #define Z_BINARY   0
  #define Z_ASCII    1
  #define Z_UNKNOWN  2
! /* Possible values of the data_type field (though see inflate()) */
  
  #define Z_DEFLATED   8
  /* The deflate compression method (the only one supported in this version) */
*************** ZEXTERN const char * ZEXPORT zlibVersion
*** 175,181 ****
     This check is automatically made by deflateInit and inflateInit.
   */
  
! /* 
  ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
  
       Initializes the internal stream state for compression. The fields
--- 193,199 ----
     This check is automatically made by deflateInit and inflateInit.
   */
  
! /*
  ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
  
       Initializes the internal stream state for compression. The fields
*************** ZEXTERN int ZEXPORT deflate OF((z_stream
*** 244,250 ****
      If deflate returns with avail_out == 0, this function must be called again
    with the same value of the flush parameter and more output space (updated
    avail_out), until the flush is complete (deflate returns with non-zero
!   avail_out).
  
      If the parameter flush is set to Z_FINISH, pending input is processed,
    pending output is flushed and deflate returns with Z_STREAM_END if there
--- 262,270 ----
      If deflate returns with avail_out == 0, this function must be called again
    with the same value of the flush parameter and more output space (updated
    avail_out), until the flush is complete (deflate returns with non-zero
!   avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
!   avail_out is greater than six to avoid repeated flush markers due to
!   avail_out == 0 on return.
  
      If the parameter flush is set to Z_FINISH, pending input is processed,
    pending output is flushed and deflate returns with Z_STREAM_END if there
*************** ZEXTERN int ZEXPORT deflate OF((z_stream
*** 253,262 ****
    more input data, until it returns with Z_STREAM_END or an error. After
    deflate has returned Z_STREAM_END, the only possible operations on the
    stream are deflateReset or deflateEnd.
!   
      Z_FINISH can be used immediately after deflateInit if all the compression
    is to be done in a single step. In this case, avail_out must be at least
!   0.1% larger than avail_in plus 12 bytes.  If deflate does not return
    Z_STREAM_END, then it must be called again as described above.
  
      deflate() sets strm->adler to the adler32 checksum of all input read
--- 273,282 ----
    more input data, until it returns with Z_STREAM_END or an error. After
    deflate has returned Z_STREAM_END, the only possible operations on the
    stream are deflateReset or deflateEnd.
! 
      Z_FINISH can be used immediately after deflateInit if all the compression
    is to be done in a single step. In this case, avail_out must be at least
!   the value returned by deflateBound (see below). If deflate does not return
    Z_STREAM_END, then it must be called again as described above.
  
      deflate() sets strm->adler to the adler32 checksum of all input read
*************** ZEXTERN int ZEXPORT deflate OF((z_stream
*** 272,278 ****
    consumed and all output has been produced (only when flush is set to
    Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
    if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
!   (for example avail_in or avail_out was zero).
  */
  
  
--- 292,300 ----
    consumed and all output has been produced (only when flush is set to
    Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
    if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
!   (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not
!   fatal, and deflate() can be called again with more input and more output
!   space to continue compressing.
  */
  
  
*************** ZEXTERN int ZEXPORT deflateEnd OF((z_str
*** 290,296 ****
  */
  
  
! /* 
  ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
  
       Initializes the internal stream state for decompression. The fields
--- 312,318 ----
  */
  
  
! /*
  ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
  
       Initializes the internal stream state for decompression. The fields
*************** ZEXTERN int ZEXPORT inflateInit OF((z_st
*** 314,322 ****
  ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
  /*
      inflate decompresses as much data as possible, and stops when the input
!   buffer becomes empty or the output buffer becomes full. It may some
!   introduce some output latency (reading input without producing any output)
!   except when forced to flush.
  
    The detailed semantics are as follows. inflate performs one or both of the
    following actions:
--- 336,344 ----
  ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
  /*
      inflate decompresses as much data as possible, and stops when the input
!   buffer becomes empty or the output buffer becomes full. It may introduce
!   some output latency (reading input without producing any output) except when
!   forced to flush.
  
    The detailed semantics are as follows. inflate performs one or both of the
    following actions:
*************** ZEXTERN int ZEXPORT inflate OF((z_stream
*** 340,350 ****
    must be called again after making room in the output buffer because there
    might be more output pending.
  
!     If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
!   output as possible to the output buffer. The flushing behavior of inflate is
!   not specified for values of the flush parameter other than Z_SYNC_FLUSH
!   and Z_FINISH, but the current implementation actually flushes as much output
!   as possible anyway.
  
      inflate() should normally be called until it returns Z_STREAM_END or an
    error. However if all decompression is to be performed in a single step
--- 362,387 ----
    must be called again after making room in the output buffer because there
    might be more output pending.
  
!     The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH,
!   Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much
!   output as possible to the output buffer. Z_BLOCK requests that inflate() stop
!   if and when it get to the next deflate block boundary. When decoding the zlib
!   or gzip format, this will cause inflate() to return immediately after the
!   header and before the first block. When doing a raw inflate, inflate() will
!   go ahead and process the first block, and will return when it gets to the end
!   of that block, or when it runs out of data.
! 
!     The Z_BLOCK option assists in appending to or combining deflate streams.
!   Also to assist in this, on return inflate() will set strm->data_type to the
!   number of unused bits in the last byte taken from strm->next_in, plus 64
!   if inflate() is currently decoding the last block in the deflate stream,
!   plus 128 if inflate() returned immediately after decoding an end-of-block
!   code or decoding the complete header up to just before the first byte of the
!   deflate stream. The end-of-block will not be indicated until all of the
!   uncompressed data from that block has been written to strm->next_out.  The
!   number of unused bits may in general be greater than seven, except when
!   bit 7 of data_type is set, in which case the number of unused bits will be
!   less than eight.
  
      inflate() should normally be called until it returns Z_STREAM_END or an
    error. However if all decompression is to be performed in a single step
*************** ZEXTERN int ZEXPORT inflate OF((z_stream
*** 354,382 ****
    uncompressed data. (The size of the uncompressed data may have been saved
    by the compressor for this purpose.) The next operation on this stream must
    be inflateEnd to deallocate the decompression state. The use of Z_FINISH
!   is never required, but can be used to inform inflate that a faster routine
    may be used for the single inflate() call.
  
!      If a preset dictionary is needed at this point (see inflateSetDictionary
!   below), inflate sets strm-adler to the adler32 checksum of the
!   dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise 
!   it sets strm->adler to the adler32 checksum of all output produced
!   so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
!   an error code as described below. At the end of the stream, inflate()
!   checks that its computed adler32 checksum is equal to that saved by the
!   compressor and returns Z_STREAM_END only if the checksum is correct.
  
      inflate() returns Z_OK if some progress has been made (more input processed
    or more output produced), Z_STREAM_END if the end of the compressed data has
    been reached and all uncompressed output has been produced, Z_NEED_DICT if a
    preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
!   corrupted (input stream not conforming to the zlib format or incorrect
!   adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
!   (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
!   enough memory, Z_BUF_ERROR if no progress is possible or if there was not
!   enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
!   case, the application may then call inflateSync to look for a good
!   compression block.
  */
  
  
--- 391,434 ----
    uncompressed data. (The size of the uncompressed data may have been saved
    by the compressor for this purpose.) The next operation on this stream must
    be inflateEnd to deallocate the decompression state. The use of Z_FINISH
!   is never required, but can be used to inform inflate that a faster approach
    may be used for the single inflate() call.
  
!      In this implementation, inflate() always flushes as much output as
!   possible to the output buffer, and always uses the faster approach on the
!   first call. So the only effect of the flush parameter in this implementation
!   is on the return value of inflate(), as noted below, or when it returns early
!   because Z_BLOCK is used.
! 
!      If a preset dictionary is needed after this call (see inflateSetDictionary
!   below), inflate sets strm-adler to the adler32 checksum of the dictionary
!   chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
!   strm->adler to the adler32 checksum of all output produced so far (that is,
!   total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
!   below. At the end of the stream, inflate() checks that its computed adler32
!   checksum is equal to that saved by the compressor and returns Z_STREAM_END
!   only if the checksum is correct.
! 
!     inflate() will decompress and check either zlib-wrapped or gzip-wrapped
!   deflate data.  The header type is detected automatically.  Any information
!   contained in the gzip header is not retained, so applications that need that
!   information should instead use raw inflate, see inflateInit2() below, or
!   inflateBack() and perform their own processing of the gzip header and
!   trailer.
  
      inflate() returns Z_OK if some progress has been made (more input processed
    or more output produced), Z_STREAM_END if the end of the compressed data has
    been reached and all uncompressed output has been produced, Z_NEED_DICT if a
    preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
!   corrupted (input stream not conforming to the zlib format or incorrect check
!   value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
!   if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory,
!   Z_BUF_ERROR if no progress is possible or if there was not enough room in the
!   output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
!   inflate() can be called again with more input and more output space to
!   continue decompressing. If Z_DATA_ERROR is returned, the application may then
!   call inflateSync() to look for a good compression block if a partial recovery
!   of the data is desired.
  */
  
  
*************** ZEXTERN int ZEXPORT inflateEnd OF((z_str
*** 397,403 ****
      The following functions are needed only in some special applications.
  */
  
! /*   
  ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
                                       int  level,
                                       int  method,
--- 449,455 ----
      The following functions are needed only in some special applications.
  */
  
! /*
  ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
                                       int  level,
                                       int  method,
*************** ZEXTERN int ZEXPORT deflateInit2 OF((z_s
*** 413,423 ****
     this version of the library.
  
       The windowBits parameter is the base two logarithm of the window size
!    (the size of the history buffer).  It should be in the range 8..15 for this
     version of the library. Larger values of this parameter result in better
     compression at the expense of memory usage. The default value is 15 if
     deflateInit is used instead.
  
       The memLevel parameter specifies how much memory should be allocated
     for the internal compression state. memLevel=1 uses minimum memory but
     is slow and reduces compression ratio; memLevel=9 uses maximum memory
--- 465,485 ----
     this version of the library.
  
       The windowBits parameter is the base two logarithm of the window size
!    (the size of the history buffer). It should be in the range 8..15 for this
     version of the library. Larger values of this parameter result in better
     compression at the expense of memory usage. The default value is 15 if
     deflateInit is used instead.
  
+      windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
+    determines the window size. deflate() will then generate raw deflate data
+    with no zlib header or trailer, and will not compute an adler32 check value.
+ 
+      windowBits can also be greater than 15 for optional gzip encoding. Add
+    16 to windowBits to write a simple gzip header and trailer around the
+    compressed data instead of a zlib wrapper. The gzip header will have no
+    file name, no extra data, no comment, no modification time (set to zero),
+    no header crc, and the operating system will be set to 255 (unknown).
+ 
       The memLevel parameter specifies how much memory should be allocated
     for the internal compression state. memLevel=1 uses minimum memory but
     is slow and reduces compression ratio; memLevel=9 uses maximum memory
*************** ZEXTERN int ZEXPORT deflateInit2 OF((z_s
*** 426,446 ****
  
       The strategy parameter is used to tune the compression algorithm. Use the
     value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
!    filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
!    string match).  Filtered data consists mostly of small values with a
!    somewhat random distribution. In this case, the compression algorithm is
!    tuned to compress them better. The effect of Z_FILTERED is to force more
!    Huffman coding and less string matching; it is somewhat intermediate
!    between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
!    the compression ratio but not the correctness of the compressed output even
!    if it is not set appropriately.
  
        deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
     memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
     method). msg is set to null if there is no error message.  deflateInit2 does
     not perform any compression: this will be done by deflate().
  */
!                             
  ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
                                               const Bytef *dictionary,
                                               uInt  dictLength));
--- 488,510 ----
  
       The strategy parameter is used to tune the compression algorithm. Use the
     value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
!    filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
!    string match), or Z_RLE to limit match distances to one (run-length
!    encoding). Filtered data consists mostly of small values with a somewhat
!    random distribution. In this case, the compression algorithm is tuned to
!    compress them better. The effect of Z_FILTERED is to force more Huffman
!    coding and less string matching; it is somewhat intermediate between
!    Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as
!    Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy
!    parameter only affects the compression ratio but not the correctness of the
!    compressed output even if it is not set appropriately.
  
        deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
     memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
     method). msg is set to null if there is no error message.  deflateInit2 does
     not perform any compression: this will be done by deflate().
  */
! 
  ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
                                               const Bytef *dictionary,
                                               uInt  dictLength));
*************** ZEXTERN int ZEXPORT deflateSetDictionary
*** 464,474 ****
     deflate or deflate2. Thus the strings most likely to be useful should be
     put at the end of the dictionary, not at the front.
  
!      Upon return of this function, strm->adler is set to the Adler32 value
     of the dictionary; the decompressor may later use this value to determine
!    which dictionary has been used by the compressor. (The Adler32 value
     applies to the whole dictionary even if only a subset of the dictionary is
!    actually used by the compressor.)
  
       deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
     parameter is invalid (such as NULL dictionary) or the stream state is
--- 528,539 ----
     deflate or deflate2. Thus the strings most likely to be useful should be
     put at the end of the dictionary, not at the front.
  
!      Upon return of this function, strm->adler is set to the adler32 value
     of the dictionary; the decompressor may later use this value to determine
!    which dictionary has been used by the compressor. (The adler32 value
     applies to the whole dictionary even if only a subset of the dictionary is
!    actually used by the compressor.) If a raw deflate was requested, then the
!    adler32 value is not computed and strm->adler is not set.
  
       deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
     parameter is invalid (such as NULL dictionary) or the stream state is
*************** ZEXTERN int ZEXPORT deflateReset OF((z_s
*** 507,514 ****
  */
  
  ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
! 				      int level,
! 				      int strategy));
  /*
       Dynamically update the compression level and compression strategy.  The
     interpretation of level and strategy is as in deflateInit2.  This can be
--- 572,579 ----
  */
  
  ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
!                                       int level,
!                                       int strategy));
  /*
       Dynamically update the compression level and compression strategy.  The
     interpretation of level and strategy is as in deflateInit2.  This can be
*************** ZEXTERN int ZEXPORT deflateParams OF((z_
*** 527,533 ****
     if strm->avail_out was zero.
  */
  
! /*   
  ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
                                       int  windowBits));
  
--- 592,623 ----
     if strm->avail_out was zero.
  */
  
! ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
!                                        uLong sourceLen));
! /*
!      deflateBound() returns an upper bound on the compressed size after
!    deflation of sourceLen bytes.  It must be called after deflateInit()
!    or deflateInit2().  This would be used to allocate an output buffer
!    for deflation in a single pass, and so would be called before deflate().
! */
! 
! ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
!                                      int bits,
!                                      int value));
! /*
!      deflatePrime() inserts bits in the deflate output stream.  The intent
!   is that this function is used to start off the deflate output with the
!   bits leftover from a previous deflate stream when appending to it.  As such,
!   this function can only be used for raw deflate, and must be used before the
!   first deflate() call after a deflateInit2() or deflateReset().  bits must be
!   less than or equal to 16, and that many of the least significant bits of
!   value will be inserted in the output.
! 
!       deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
!    stream state was inconsistent.
! */
! 
! /*
  ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
                                       int  windowBits));
  
*************** ZEXTERN int ZEXPORT inflateInit2 OF((z_s
*** 538,548 ****
       The windowBits parameter is the base two logarithm of the maximum window
     size (the size of the history buffer).  It should be in the range 8..15 for
     this version of the library. The default value is 15 if inflateInit is used
!    instead. If a compressed stream with a larger window size is given as
!    input, inflate() will return with the error code Z_DATA_ERROR instead of
!    trying to allocate a larger window.
  
!       inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
     memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
     memLevel). msg is set to null if there is no error message.  inflateInit2
     does not perform any decompression apart from reading the zlib header if
--- 628,657 ----
       The windowBits parameter is the base two logarithm of the maximum window
     size (the size of the history buffer).  It should be in the range 8..15 for
     this version of the library. The default value is 15 if inflateInit is used
!    instead. windowBits must be greater than or equal to the windowBits value
!    provided to deflateInit2() while compressing, or it must be equal to 15 if
!    deflateInit2() was not used. If a compressed stream with a larger window
!    size is given as input, inflate() will return with the error code
!    Z_DATA_ERROR instead of trying to allocate a larger window.
  
!      windowBits can also be -8..-15 for raw inflate. In this case, -windowBits
!    determines the window size. inflate() will then process raw deflate data,
!    not looking for a zlib or gzip header, not generating a check value, and not
!    looking for any check values for comparison at the end of the stream. This
!    is for use with other formats that use the deflate compressed data format
!    such as zip.  Those formats provide their own check values. If a custom
!    format is developed using the raw deflate format for compressed data, it is
!    recommended that a check value such as an adler32 or a crc32 be applied to
!    the uncompressed data as is done in the zlib, gzip, and zip formats.  For
!    most applications, the zlib format should be used as is. Note that comments
!    above on the use in deflateInit2() applies to the magnitude of windowBits.
! 
!      windowBits can also be greater than 15 for optional gzip decoding. Add
!    32 to windowBits to enable zlib and gzip decoding with automatic header
!    detection, or add 16 to decode only the gzip format (the zlib format will
!    return a Z_DATA_ERROR).
! 
!      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
     memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
     memLevel). msg is set to null if there is no error message.  inflateInit2
     does not perform any decompression apart from reading the zlib header if
*************** ZEXTERN int ZEXPORT inflateSetDictionary
*** 557,576 ****
       Initializes the decompression dictionary from the given uncompressed byte
     sequence. This function must be called immediately after a call of inflate
     if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
!    can be determined from the Adler32 value returned by this call of
     inflate. The compressor and decompressor must use exactly the same
     dictionary (see deflateSetDictionary).
  
       inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
     parameter is invalid (such as NULL dictionary) or the stream state is
     inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
!    expected one (incorrect Adler32 value). inflateSetDictionary does not
     perform any decompression: this will be done by subsequent calls of
     inflate().
  */
  
  ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
! /* 
      Skips invalid compressed data until a full flush point (see above the
    description of deflate with Z_FULL_FLUSH) can be found, or until all
    available input is skipped. No output is provided.
--- 666,685 ----
       Initializes the decompression dictionary from the given uncompressed byte
     sequence. This function must be called immediately after a call of inflate
     if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
!    can be determined from the adler32 value returned by this call of
     inflate. The compressor and decompressor must use exactly the same
     dictionary (see deflateSetDictionary).
  
       inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
     parameter is invalid (such as NULL dictionary) or the stream state is
     inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
!    expected one (incorrect adler32 value). inflateSetDictionary does not
     perform any decompression: this will be done by subsequent calls of
     inflate().
  */
  
  ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
! /*
      Skips invalid compressed data until a full flush point (see above the
    description of deflate with Z_FULL_FLUSH) can be found, or until all
    available input is skipped. No output is provided.
*************** ZEXTERN int ZEXPORT inflateSync OF((z_st
*** 584,589 ****
--- 693,714 ----
    until success or end of the input data.
  */
  
+ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+                                     z_streamp source));
+ /*
+      Sets the destination stream as a complete copy of the source stream.
+ 
+      This function can be useful when randomly accessing a large stream.  The
+    first pass through the stream can periodically record the inflate state,
+    allowing restarting inflate at those points when randomly accessing the
+    stream.
+ 
+      inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+    enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+    (such as zalloc being NULL). msg is left unchanged in both source and
+    destination.
+ */
+ 
  ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
  /*
       This function is equivalent to inflateEnd followed by inflateInit,
*************** ZEXTERN int ZEXPORT inflateReset OF((z_s
*** 594,599 ****
--- 719,867 ----
     stream state was inconsistent (such as zalloc or state being NULL).
  */
  
+ /*
+ ZEXTERN int ZEXPORT inflateBackInit OF((z_stream FAR *strm, int windowBits,
+                                         unsigned char FAR *window));
+ 
+      Initialize the internal stream state for decompression using inflateBack()
+    calls.  The fields zalloc, zfree and opaque in strm must be initialized
+    before the call.  If zalloc and zfree are Z_NULL, then the default library-
+    derived memory allocation routines are used.  windowBits is the base two
+    logarithm of the window size, in the range 8..15.  window is a caller
+    supplied buffer of that size.  Except for special applications where it is
+    assured that deflate was used with small window sizes, windowBits must be 15
+    and a 32K byte window must be supplied to be able to decompress general
+    deflate streams.
+ 
+      See inflateBack() for the usage of these routines.
+ 
+      inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
+    the paramaters are invalid, Z_MEM_ERROR if the internal state could not
+    be allocated, or Z_VERSION_ERROR if the version of the library does not
+    match the version of the header file.
+ */
+ 
+ typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *));
+ typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
+ 
+ ZEXTERN int ZEXPORT inflateBack OF((z_stream FAR *strm,
+                                     in_func in, void FAR *in_desc,
+                                     out_func out, void FAR *out_desc));
+ /*
+      inflateBack() does a raw inflate with a single call using a call-back
+    interface for input and output.  This is more efficient than inflate() for
+    file i/o applications in that it avoids copying between the output and the
+    sliding window by simply making the window itself the output buffer.  This
+    function trusts the application to not change the output buffer passed by
+    the output function, at least until inflateBack() returns.
+ 
+      inflateBackInit() must be called first to allocate the internal state
+    and to initialize the state with the user-provided window buffer.
+    inflateBack() may then be used multiple times to inflate a complete, raw
+    deflate stream with each call.  inflateBackEnd() is then called to free
+    the allocated state.
+ 
+      A raw deflate stream is one with no zlib or gzip header or trailer.
+    This routine would normally be used in a utility that reads zip or gzip
+    files and writes out uncompressed files.  The utility would decode the
+    header and process the trailer on its own, hence this routine expects
+    only the raw deflate stream to decompress.  This is different from the
+    normal behavior of inflate(), which expects either a zlib or gzip header and
+    trailer around the deflate stream.
+ 
+      inflateBack() uses two subroutines supplied by the caller that are then
+    called by inflateBack() for input and output.  inflateBack() calls those
+    routines until it reads a complete deflate stream and writes out all of the
+    uncompressed data, or until it encounters an error.  The function's
+    parameters and return types are defined above in the in_func and out_func
+    typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
+    number of bytes of provided input, and a pointer to that input in buf.  If
+    there is no input available, in() must return zero--buf is ignored in that
+    case--and inflateBack() will return a buffer error.  inflateBack() will call
+    out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()
+    should return zero on success, or non-zero on failure.  If out() returns
+    non-zero, inflateBack() will return with an error.  Neither in() nor out()
+    are permitted to change the contents of the window provided to
+    inflateBackInit(), which is also the buffer that out() uses to write from.
+    The length written by out() will be at most the window size.  Any non-zero
+    amount of input may be provided by in().
+ 
+      For convenience, inflateBack() can be provided input on the first call by
+    setting strm->next_in and strm->avail_in.  If that input is exhausted, then
+    in() will be called.  Therefore strm->next_in must be initialized before
+    calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called
+    immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in
+    must also be initialized, and then if strm->avail_in is not zero, input will
+    initially be taken from strm->next_in[0 .. strm->avail_in - 1].
+ 
+      The in_desc and out_desc parameters of inflateBack() is passed as the
+    first parameter of in() and out() respectively when they are called.  These
+    descriptors can be optionally used to pass any information that the caller-
+    supplied in() and out() functions need to do their job.
+ 
+      On return, inflateBack() will set strm->next_in and strm->avail_in to
+    pass back any unused input that was provided by the last in() call.  The
+    return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
+    if in() or out() returned an error, Z_DATA_ERROR if there was a format
+    error in the deflate stream (in which case strm->msg is set to indicate the
+    nature of the error), or Z_STREAM_ERROR if the stream was not properly
+    initialized.  In the case of Z_BUF_ERROR, an input or output error can be
+    distinguished using strm->next_in which will be Z_NULL only if in() returned
+    an error.  If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to
+    out() returning non-zero.  (in() will always be called before out(), so
+    strm->next_in is assured to be defined if out() returns non-zero.)  Note
+    that inflateBack() cannot return Z_OK.
+ */
+ 
+ ZEXTERN int ZEXPORT inflateBackEnd OF((z_stream FAR *strm));
+ /*
+      All memory allocated by inflateBackInit() is freed.
+ 
+      inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
+    state was inconsistent.
+ */
+ 
+ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+ /* Return flags indicating compile-time options.
+ 
+     Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
+      1.0: size of uInt
+      3.2: size of uLong
+      5.4: size of voidpf (pointer)
+      7.6: size of z_off_t
+ 
+     Compiler, assembler, and debug options:
+      8: DEBUG
+      9: ASMV or ASMINF -- use ASM code
+      10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
+      11: 0 (reserved)
+ 
+     One-time table building (smaller code, but not thread-safe if true):
+      12: BUILDFIXED -- build static block decoding tables when needed
+      13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
+      14,15: 0 (reserved)
+ 
+     Library content (indicates missing functionality):
+      16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
+                           deflate code when not needed)
+      17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
+                     and decode gzip streams (to avoid linking crc code)
+      18-19: 0 (reserved)
+ 
+     Operation variations (changes in library functionality):
+      20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
+      21: FASTEST -- deflate algorithm with only one, lowest compression level
+      22,23: 0 (reserved)
+ 
+     The sprintf variant used by gzprintf (zero is best):
+      24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
+      25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+      26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+ 
+     Remainder:
+      27-31: 0 (reserved)
+  */
+ 
  
                          /* utility functions */
  
*************** ZEXTERN int ZEXPORT compress OF((Bytef *
*** 610,617 ****
  /*
       Compresses the source buffer into the destination buffer.  sourceLen is
     the byte length of the source buffer. Upon entry, destLen is the total
!    size of the destination buffer, which must be at least 0.1% larger than
!    sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
     compressed buffer.
       This function can be used to compress a whole file at once if the
     input file is mmap'ed.
--- 878,885 ----
  /*
       Compresses the source buffer into the destination buffer.  sourceLen is
     the byte length of the source buffer. Upon entry, destLen is the total
!    size of the destination buffer, which must be at least the value returned
!    by compressBound(sourceLen). Upon exit, destLen is the actual size of the
     compressed buffer.
       This function can be used to compress a whole file at once if the
     input file is mmap'ed.
*************** ZEXTERN int ZEXPORT compress2 OF((Bytef 
*** 627,640 ****
       Compresses the source buffer into the destination buffer. The level
     parameter has the same meaning as in deflateInit.  sourceLen is the byte
     length of the source buffer. Upon entry, destLen is the total size of the
!    destination buffer, which must be at least 0.1% larger than sourceLen plus
!    12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
  
       compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
     memory, Z_BUF_ERROR if there was not enough room in the output buffer,
     Z_STREAM_ERROR if the level parameter is invalid.
  */
  
  ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
                                     const Bytef *source, uLong sourceLen));
  /*
--- 895,916 ----
       Compresses the source buffer into the destination buffer. The level
     parameter has the same meaning as in deflateInit.  sourceLen is the byte
     length of the source buffer. Upon entry, destLen is the total size of the
!    destination buffer, which must be at least the value returned by
!    compressBound(sourceLen). Upon exit, destLen is the actual size of the
!    compressed buffer.
  
       compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
     memory, Z_BUF_ERROR if there was not enough room in the output buffer,
     Z_STREAM_ERROR if the level parameter is invalid.
  */
  
+ ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
+ /*
+      compressBound() returns an upper bound on the compressed size after
+    compress() or compress2() on sourceLen bytes.  It would be used before
+    a compress() or compress2() call to allocate the destination buffer.
+ */
+ 
  ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
                                     const Bytef *source, uLong sourceLen));
  /*
*************** ZEXTERN int ZEXPORT uncompress OF((Bytef
*** 650,656 ****
  
       uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
     enough memory, Z_BUF_ERROR if there was not enough room in the output
!    buffer, or Z_DATA_ERROR if the input data was corrupted.
  */
  
  
--- 926,932 ----
  
       uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
     enough memory, Z_BUF_ERROR if there was not enough room in the output
!    buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.
  */
  
  
*************** ZEXTERN gzFile ZEXPORT gzopen  OF((const
*** 661,668 ****
       Opens a gzip (.gz) file for reading or writing. The mode parameter
     is as in fopen ("rb" or "wb") but can also include a compression level
     ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
!    Huffman only compression as in "wb1h". (See the description
!    of deflateInit2 for more information about the strategy parameter.)
  
       gzopen can be used to read a file which is not in gzip format; in this
     case gzread will directly read from the file without decompression.
--- 937,945 ----
       Opens a gzip (.gz) file for reading or writing. The mode parameter
     is as in fopen ("rb" or "wb") but can also include a compression level
     ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
!    Huffman only compression as in "wb1h", or 'R' for run-length encoding
!    as in "wb1R". (See the description of deflateInit2 for more information
!    about the strategy parameter.)
  
       gzopen can be used to read a file which is not in gzip format; in this
     case gzread will directly read from the file without decompression.
*************** ZEXTERN int ZEXPORT    gzread  OF((gzFil
*** 701,708 ****
       gzread returns the number of uncompressed bytes actually read (0 for
     end of file, -1 for error). */
  
! ZEXTERN int ZEXPORT    gzwrite OF((gzFile file, 
! 				   const voidp buf, unsigned len));
  /*
       Writes the given number of uncompressed bytes into the compressed file.
     gzwrite returns the number of uncompressed bytes actually written
--- 978,985 ----
       gzread returns the number of uncompressed bytes actually read (0 for
     end of file, -1 for error). */
  
! ZEXTERN int ZEXPORT    gzwrite OF((gzFile file,
!                                    voidpc buf, unsigned len));
  /*
       Writes the given number of uncompressed bytes into the compressed file.
     gzwrite returns the number of uncompressed bytes actually written
*************** ZEXTERN int ZEXPORTVA   gzprintf OF((gzF
*** 713,719 ****
  /*
       Converts, formats, and writes the args to the compressed file under
     control of the format string, as in fprintf. gzprintf returns the number of
!    uncompressed bytes actually written (0 in case of error).
  */
  
  ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
--- 990,1002 ----
  /*
       Converts, formats, and writes the args to the compressed file under
     control of the format string, as in fprintf. gzprintf returns the number of
!    uncompressed bytes actually written (0 in case of error).  The number of
!    uncompressed bytes written is limited to 4095. The caller should assure that
!    this limit is not exceeded. If it is exceeded, then gzprintf() will return
!    return an error (0) with nothing written. In this case, there may also be a
!    buffer overflow with unpredictable consequences, which is possible only if
!    zlib was compiled with the insecure functions sprintf() or vsprintf()
!    because the secure snprintf() or vsnprintf() functions were not available.
  */
  
  ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
*************** ZEXTERN int ZEXPORT    gzgetc OF((gzFile
*** 744,749 ****
--- 1027,1042 ----
     or -1 in case of end of file or error.
  */
  
+ ZEXTERN int ZEXPORT    gzungetc OF((int c, gzFile file));
+ /*
+       Push one character back onto the stream to be read again later.
+    Only one character of push-back is allowed.  gzungetc() returns the
+    character pushed, or -1 on failure.  gzungetc() will fail if a
+    character has been pushed but not read yet, or if c is -1. The pushed
+    character will be discarded if the stream is repositioned with gzseek()
+    or gzrewind().
+ */
+ 
  ZEXTERN int ZEXPORT    gzflush OF((gzFile file, int flush));
  /*
       Flushes all pending output into the compressed file. The parameter
*************** ZEXTERN int ZEXPORT    gzflush OF((gzFil
*** 755,762 ****
  */
  
  ZEXTERN z_off_t ZEXPORT    gzseek OF((gzFile file,
! 				      z_off_t offset, int whence));
! /* 
        Sets the starting position for the next gzread or gzwrite on the
     given compressed file. The offset represents a number of bytes in the
     uncompressed data stream. The whence parameter is defined as in lseek(2);
--- 1048,1055 ----
  */
  
  ZEXTERN z_off_t ZEXPORT    gzseek OF((gzFile file,
!                                       z_off_t offset, int whence));
! /*
        Sets the starting position for the next gzread or gzwrite on the
     given compressed file. The offset represents a number of bytes in the
     uncompressed data stream. The whence parameter is defined as in lseek(2);
*************** ZEXTERN const char * ZEXPORT gzerror OF(
*** 810,815 ****
--- 1103,1115 ----
     to get the exact error code.
  */
  
+ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
+ /*
+      Clears the error and end-of-file flags for file. This is analogous to the
+    clearerr() function in stdio. This is useful for continuing to read a gzip
+    file that is being written concurrently.
+ */
+ 
                          /* checksum functions */
  
  /*
*************** ZEXTERN int ZEXPORT deflateInit2_ OF((z_
*** 867,872 ****
--- 1167,1176 ----
                                        int stream_size));
  ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
                                        const char *version, int stream_size));
+ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_stream FAR *strm, int windowBits,
+                                          unsigned char FAR *window,
+                                          const char *version,
+                                          int stream_size));
  #define deflateInit(strm, level) \
          deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))
  #define inflateInit(strm) \
*************** ZEXTERN int ZEXPORT inflateInit2_ OF((z_
*** 876,884 ****
                        (strategy),           ZLIB_VERSION, sizeof(z_stream))
  #define inflateInit2(strm, windowBits) \
          inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
  
  
! #if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
      struct internal_state {int dummy;}; /* hack for buggy compilers */
  #endif
  
--- 1180,1191 ----
                        (strategy),           ZLIB_VERSION, sizeof(z_stream))
  #define inflateInit2(strm, windowBits) \
          inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
+ #define inflateBackInit(strm, windowBits, window) \
+         inflateBackInit_((strm), (windowBits), (window), \
+         ZLIB_VERSION, sizeof(z_stream))
  
  
! #if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
      struct internal_state {int dummy;}; /* hack for buggy compilers */
  #endif
  
*************** ZEXTERN const uLongf * ZEXPORT get_crc_t
*** 890,893 ****
  }
  #endif
  
! #endif /* _ZLIB_H */
--- 1197,1200 ----
  }
  #endif
  
! #endif /* ZLIB_H */
diff -Nrcpad gcc-3.4.3/zlib/zlib.html gcc-4.0.0/zlib/zlib.html
*** gcc-3.4.3/zlib/zlib.html	Mon Mar 11 21:53:28 2002
--- gcc-4.0.0/zlib/zlib.html	Thu Jan  1 00:00:00 1970
***************
*** 1,971 ****
- <html>
- <head>
-  <title>
-  zlib general purpose compression library version 1.1.4
-  </title>
- </head>
- <body bgcolor="White" text="Black" vlink="Red" alink="Navy" link="Red">
- <!-- background="zlibbg.gif" -->
- 
- <h1> zlib 1.1.4 Manual </h1>
- <hr>
- <a name="Contents"><h2>Contents</h2>
- <ol type="I">
- <li> <a href="#Prologue">Prologue</a>
- <li> <a href="#Introduction">Introduction</a>
- <li> <a href="#Utility functions">Utility functions</a>
- <li> <a href="#Basic functions">Basic functions</a>
- <li> <a href="#Advanced functions">Advanced functions</a>
- <li> <a href="#Constants">Constants</a>
- <li> <a href="#struct z_stream_s">struct z_stream_s</a>
- <li> <a href="#Checksum functions">Checksum functions</a>
- <li> <a href="#Misc">Misc</a>
- </ol>
- <hr>
- <a name="Prologue"><h2> Prologue </h2>
-   'zlib' general purpose compression library version 1.1.4, March 11th, 2002
-   <p>
-   Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
-   <p>
-   This software is provided 'as-is', without any express or implied
-   warranty.  In no event will the authors be held liable for any damages
-   arising from the use of this software.
-   <p>
-   Permission is granted to anyone to use this software for any purpose,
-   including commercial applications, and to alter it and redistribute it
-   freely, subject to the following restrictions:
-   <ol>
-    <li> The origin of this software must not be misrepresented ; you must not
-      claim that you wrote the original software. If you use this software
-      in a product, an acknowledgment in the product documentation would be
-      appreciated but is not required.
-    <li> Altered source versions must be plainly marked as such, and must not be
-      misrepresented as being the original software.
-    <li> This notice may not be removed or altered from any source distribution.
-   </ol>
- 
-   <dl>
-   <dt>Jean-loup Gailly        
-   <dd><a href="mailto:jloup@gzip.org">jloup@gzip.org</a>
-   <dt>Mark Adler
-   <dd><a href="mailto:madler@alumni.caltech.edu">madler@alumni.caltech.edu</a>
-   </dl>
- 
-   The data format used by the zlib library is described by RFCs (Request for
-   Comments) 1950 to 1952 in the files
-   <a href="ftp://ds.internic.net/rfc/rfc1950.txt">
-   ftp://ds.internic.net/rfc/rfc1950.txt </a>
-   (zlib format), 
-   <a href="ftp://ds.internic.net/rfc/rfc1951.txt">
-   rfc1951.txt </a>
-   (<a href="#deflate">deflate</a> format) and 
-   <a href="ftp://ds.internic.net/rfc/rfc1952.txt">
-   rfc1952.txt </a>
-   (gzip format).
-   <p>
-   This manual is converted from zlib.h by 
-   <a href="mailto:piaip@csie.ntu.edu.tw"> piaip </a>
-   <p>
-   Visit <a href="http://ftp.cdrom.com/pub/infozip/zlib/">
-   http://ftp.cdrom.com/pub/infozip/zlib/</a> 
-   for the official zlib web page.
-   <p>
- 
- <hr>
- <a name="Introduction"><h2> Introduction </h2>
-      The 'zlib' compression library provides in-memory compression and
-   decompression functions, including integrity checks of the uncompressed
-   data.  This version of the library supports only one compression method
-   (deflation) but other algorithms will be added later and will have the same
-   stream interface.
-   <p>
- 
-      Compression can be done in a single step if the buffers are large
-   enough (for example if an input file is mmap'ed), or can be done by
-   repeated calls of the compression function.  In the latter case, the
-   application must provide more input and/or consume the output
-   (providing more output space) before each call.
-   <p>
- 
-      The library also supports reading and writing files in gzip (.gz) format
-   with an interface similar to that of stdio.
-   <p>
- 
-      The library does not install any signal handler. The decoder checks
-   the consistency of the compressed data, so the library should never
-   crash even in case of corrupted input.
-   <p>
- 
- <hr>
- <a name="Utility functions"><h2> Utility functions </h2>
-      The following utility functions are implemented on top of the
-    <a href="#Basic functions">basic stream-oriented functions</a>. 
-    To simplify the interface, some
-    default options are assumed (compression level and memory usage,
-    standard memory allocation functions). The source code of these
-    utility functions can easily be modified if you need special options.
- <h3> Function list </h3>
- <ul>
- <li> int  <a href="#compress">compress</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen);
- <li> int  <a href="#compress2">compress2</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen, int level);
- <li> int  <a href="#uncompress">uncompress</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen);
- <li> typedef voidp gzFile;
- <li>  gzFile  <a href="#gzopen">gzopen</a>  (const char *path, const char *mode);
- <li> gzFile  <a href="#gzdopen">gzdopen</a>  (int fd, const char *mode);
- <li> int  <a href="#gzsetparams">gzsetparams</a> (gzFile file, int level, int strategy);
- <li> int     <a href="#gzread">gzread</a>  (gzFile file, voidp buf, unsigned len);
- <li> int     <a href="#gzwrite">gzwrite</a> (gzFile file, const voidp buf, unsigned len);
- <li> int VA   <a href="#gzprintf">gzprintf</a> (gzFile file, const char *format, ...);
- <li> int  <a href="#gzputs">gzputs</a> (gzFile file, const char *s);
- <li> char *  <a href="#gzgets">gzgets</a> (gzFile file, char *buf, int len);
- <li> int     <a href="#gzputc">gzputc</a> (gzFile file, int c);
- <li> int     <a href="#gzgetc">gzgetc</a> (gzFile file);
- <li> int     <a href="#gzflush">gzflush</a> (gzFile file, int flush);
- <li> z_off_t     <a href="#gzseek">gzseek</a> (gzFile file, z_off_t offset, int whence);
- <li> z_off_t     <a href="#gztell">gztell</a> (gzFile file);
- <li> int     <a href="#gzrewind">gzrewind</a> (gzFile file);
- <li> int  <a href="#gzeof">gzeof</a> (gzFile file);
- <li> int     <a href="#gzclose">gzclose</a> (gzFile file);
- <li> const char *  <a href="#gzerror">gzerror</a> (gzFile file, int *errnum);
- </ul>
- <h3> Function description </h3>
- <dl>
- <font color="Blue"><dt> int  <a name="compress">compress</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen);</font>
- <dd>
-      Compresses the source buffer into the destination buffer.  sourceLen is
-    the byte length of the source buffer. Upon entry, destLen is the total
-    size of the destination buffer, which must be at least 0.1% larger than
-    sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
-    compressed buffer.<p>
-      This function can be used to <a href="#compress">compress</a> a whole file at once if the
-    input file is mmap'ed.<p>
-      <a href="#compress">compress</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
-    enough memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if there was not enough room in the output
-    buffer.<p>
- 
- <font color="Blue"><dt> int  <a name="compress2">compress2</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen, int level);</font>
- <dd>
-      Compresses the source buffer into the destination buffer. The level
-    parameter has the same meaning as in <a href="#deflateInit">deflateInit</a>.  sourceLen is the byte
-    length of the source buffer. Upon entry, destLen is the total size of the
-    destination buffer, which must be at least 0.1% larger than sourceLen plus
-    12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
-    <p>
- 
-      <a href="#compress2">compress2</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough
-    memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if there was not enough room in the output buffer,
-    <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the level parameter is invalid.
-    <p>
- 
- <font color="Blue"><dt> int  <a name="uncompress">uncompress</a> (Bytef *dest,   uLongf *destLen, const Bytef *source, uLong sourceLen);</font>
- <dd>
-      Decompresses the source buffer into the destination buffer.  sourceLen is
-    the byte length of the source buffer. Upon entry, destLen is the total
-    size of the destination buffer, which must be large enough to hold the
-    entire uncompressed data. (The size of the uncompressed data must have
-    been saved previously by the compressor and transmitted to the decompressor
-    by some mechanism outside the scope of this compression library.)
-    Upon exit, destLen is the actual size of the compressed buffer. <p>
-      This function can be used to decompress a whole file at once if the
-    input file is mmap'ed.
-    <p>
- 
-      <a href="#uncompress">uncompress</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
-    enough memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if there was not enough room in the output
-    buffer, or <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the input data was corrupted.
-    <p>
- 
- <dt> typedef voidp gzFile;
- <dd> <p>
- 
- <font color="Blue"><dt>  gzFile  <a name="gzopen">gzopen</a>  (const char *path, const char *mode);</font>
- <dd>
-      Opens a gzip (.gz) file for reading or writing. The mode parameter
-    is as in fopen ("rb" or "wb") but can also include a compression level
-    ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
-    Huffman only compression as in "wb1h". (See the description
-    of <a href="#deflateInit2">deflateInit2</a> for more information about the strategy parameter.)
-    <p>
- 
-      <a href="#gzopen">gzopen</a> can be used to read a file which is not in gzip format ; in this
-    case <a href="#gzread">gzread</a> will directly read from the file without decompression.
-    <p>
- 
-      <a href="#gzopen">gzopen</a> returns NULL if the file could not be opened or if there was
-    insufficient memory to allocate the (de)compression <a href="#state">state</a> ; errno
-    can be checked to distinguish the two cases (if errno is zero, the
-    zlib error is <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a>).
-    <p>
- 
- <font color="Blue"><dt> gzFile  <a name="gzdopen">gzdopen</a>  (int fd, const char *mode);</font>
- <dd>
-      <a href="#gzdopen">gzdopen</a>() associates a gzFile with the file descriptor fd.  File
-    descriptors are obtained from calls like open, dup, creat, pipe or
-    fileno (in the file has been previously opened with fopen).
-    The mode parameter is as in <a href="#gzopen">gzopen</a>.
-    <p>
-      The next call of <a href="#gzclose">gzclose</a> on the returned gzFile will also close the
-    file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
-    descriptor fd. If you want to keep fd open, use <a href="#gzdopen">gzdopen</a>(dup(fd), mode).
-    <p>
-      <a href="#gzdopen">gzdopen</a> returns NULL if there was insufficient memory to allocate
-    the (de)compression <a href="#state">state</a>.
-    <p>
- 
- <font color="Blue"><dt> int  <a name="gzsetparams">gzsetparams</a> (gzFile file, int level, int strategy);</font>
- <dd>
-      Dynamically update the compression level or strategy. See the description
-    of <a href="#deflateInit2">deflateInit2</a> for the meaning of these parameters.
-    <p>
-      <a href="#gzsetparams">gzsetparams</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the file was not
-    opened for writing.
-    <p>
- 
- <font color="Blue"><dt> int     <a name="gzread">gzread</a>  (gzFile file, voidp buf, unsigned len);</font>
- <dd>
-      Reads the given number of uncompressed bytes from the compressed file.
-    If the input file was not in gzip format, <a href="#gzread">gzread</a> copies the given number
-    of bytes into the buffer.
-    <p>
-      <a href="#gzread">gzread</a> returns the number of uncompressed bytes actually read (0 for
-    end of file, -1 for error).
-    <p>
- 
- <font color="Blue"><dt> int     <a name="gzwrite">gzwrite</a> (gzFile file, const voidp buf, unsigned len);</font>
- <dd>
-      Writes the given number of uncompressed bytes into the compressed file.
-    <a href="#gzwrite">gzwrite</a> returns the number of uncompressed bytes actually written
-    (0 in case of error).
-    <p>
- 
- <font color="Blue"><dt> int VA   <a name="gzprintf">gzprintf</a> (gzFile file, const char *format, ...);</font>
- <dd>
-      Converts, formats, and writes the args to the compressed file under
-    control of the format string, as in fprintf. <a href="#gzprintf">gzprintf</a> returns the number of
-    uncompressed bytes actually written (0 in case of error).
-    <p>
- 
- <font color="Blue"><dt> int  <a name="gzputs">gzputs</a> (gzFile file, const char *s);</font>
- <dd>
-       Writes the given null-terminated string to the compressed file, excluding
-    the terminating null character.
-    <p>
-       <a href="#gzputs">gzputs</a> returns the number of characters written, or -1 in case of error.
-       <p>
- 
- <font color="Blue"><dt> char *  <a name="gzgets">gzgets</a> (gzFile file, char *buf, int len);</font>
- <dd>
-       Reads bytes from the compressed file until len-1 characters are read, or
-    a newline character is read and transferred to buf, or an end-of-file
-    condition is encountered.  The string is then terminated with a null
-    character.
-    <p>
-       <a href="#gzgets">gzgets</a> returns buf, or <a href="#Z_NULL">Z_NULL</a> in case of error.
-       <p>
- 
- <font color="Blue"><dt> int     <a name="gzputc">gzputc</a> (gzFile file, int c);</font>
- <dd>
-       Writes c, converted to an unsigned char, into the compressed file.
-    <a href="#gzputc">gzputc</a> returns the value that was written, or -1 in case of error.
-    <p>
- 
- <font color="Blue"><dt> int     <a name="gzgetc">gzgetc</a> (gzFile file);</font>
- <dd>
-       Reads one byte from the compressed file. <a href="#gzgetc">gzgetc</a> returns this byte
-    or -1 in case of end of file or error.
-    <p>
- 
- <font color="Blue"><dt> int     <a name="gzflush">gzflush</a> (gzFile file, int flush);</font>
- <dd>
-      Flushes all pending output into the compressed file. The parameter
-    flush is as in the <a href="#deflate">deflate</a>() function. The return value is the zlib
-    error number (see function <a href="#gzerror">gzerror</a> below). <a href="#gzflush">gzflush</a> returns <a href="#Z_OK">Z_OK</a> if
-    the flush parameter is <a href="#Z_FINISH">Z_FINISH</a> and all output could be flushed.
-    <p>
-      <a href="#gzflush">gzflush</a> should be called only when strictly necessary because it can
-    degrade compression.
-    <p>
- 
- <font color="Blue"><dt> z_off_t     <a name="gzseek">gzseek</a> (gzFile file, z_off_t offset, int whence);</font>
- <dd>
-       Sets the starting position for the next <a href="#gzread">gzread</a> or <a href="#gzwrite">gzwrite</a> on the
-    given compressed file. The offset represents a number of bytes in the
-    uncompressed data stream. The whence parameter is defined as in lseek(2);
-    the value SEEK_END is not supported.
-    <p>
-      If the file is opened for reading, this function is emulated but can be
-    extremely slow. If the file is opened for writing, only forward seeks are
-    supported ; <a href="#gzseek">gzseek</a> then compresses a sequence of zeroes up to the new
-    starting position.
-    <p>
-       <a href="#gzseek">gzseek</a> returns the resulting offset location as measured in bytes from
-    the beginning of the uncompressed stream, or -1 in case of error, in
-    particular if the file is opened for writing and the new starting position
-    would be before the current position.
-    <p>
- 
- <font color="Blue"><dt> int     <a name="gzrewind">gzrewind</a> (gzFile file);</font>
- <dd>
-      Rewinds the given file. This function is supported only for reading.
-      <p>
-    <a href="#gzrewind">gzrewind</a>(file) is equivalent to (int)<a href="#gzseek">gzseek</a>(file, 0L, SEEK_SET)
-    <p>
- 
- <font color="Blue"><dt> z_off_t     <a name="gztell">gztell</a> (gzFile file);</font>
- <dd>
-      Returns the starting position for the next <a href="#gzread">gzread</a> or <a href="#gzwrite">gzwrite</a> on the
-    given compressed file. This position represents a number of bytes in the
-    uncompressed data stream.
-    <p>
- 
-    <a href="#gztell">gztell</a>(file) is equivalent to <a href="#gzseek">gzseek</a>(file, 0L, SEEK_CUR)
-    <p>
- 
- <font color="Blue"><dt> int  <a name="gzeof">gzeof</a> (gzFile file);</font>
- <dd>
-      Returns 1 when EOF has previously been detected reading the given
-    input stream, otherwise zero.
-    <p>
- 
- <font color="Blue"><dt> int     <a name="gzclose">gzclose</a> (gzFile file);</font>
- <dd>
-      Flushes all pending output if necessary, closes the compressed file
-    and deallocates all the (de)compression <a href="#state">state</a>. The return value is the zlib
-    error number (see function <a href="#gzerror">gzerror</a> below).
-    <p>
- 
- <font color="Blue"><dt> const char *  <a name="gzerror">gzerror</a> (gzFile file, int *errnum);</font>
- <dd>
-      Returns the error message for the last error which occurred on the
-    given compressed file. errnum is set to zlib error number. If an
-    error occurred in the file system and not in the compression library,
-    errnum is set to <a href="#Z_ERRNO">Z_ERRNO</a> and the application may consult errno
-    to get the exact error code.
-    <p>
- </dl>
- <hr>
- <a name="Basic functions"><h2> Basic functions </h2>
- <h3> Function list </h3>
- <ul>
- <li>  const char *  <a href="#zlibVersion">zlibVersion</a> (void);
- <li>  int  <a href="#deflateInit">deflateInit</a> (<a href="#z_streamp">z_streamp</a> strm, int level);
- <li>  int  <a href="#deflate">deflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);
- <li>  int  <a href="#deflateEnd">deflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);
- <li>  int  <a href="#inflateInit">inflateInit</a> (<a href="#z_streamp">z_streamp</a> strm);
- <li>  int  <a href="#inflate">inflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);
- <li>  int  <a href="#inflateEnd">inflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);
- </ul>
- 
- <h3> Function description </h3>
- <dl>
- <font color="Blue"><dt>  const char *  <a name="zlibVersion">zlibVersion</a> (void);</font>
- <dd> The application can compare <a href="#zlibVersion">zlibVersion</a> and ZLIB_VERSION for consistency.
-    If the first character differs, the library code actually used is
-    not compatible with the zlib.h header file used by the application.
-    This check is automatically made by <a href="#deflateInit">deflateInit</a> and <a href="#inflateInit">inflateInit</a>.
-    <p>
- 
- <font color="Blue"><dt> int  <a name="deflateInit">deflateInit</a> (<a href="#z_streamp">z_streamp</a> strm, int level);</font>
- <dd>
-      Initializes the internal stream <a href="#state">state</a> for compression. The fields
-    <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized before by the caller.
-    If <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> are set to <a href="#Z_NULL">Z_NULL</a>, <a href="#deflateInit">deflateInit</a> updates them to
-    use default allocation functions.
-    <p>
- 
-      The compression level must be <a href="#Z_DEFAULT_COMPRESSION">Z_DEFAULT_COMPRESSION</a>, or between 0 and 9:
-    1 gives best speed, 9 gives best compression, 0 gives no compression at
-    all (the input data is simply copied a block at a time).
-    <p>
- 
-    <a href="#Z_DEFAULT_COMPRESSION">Z_DEFAULT_COMPRESSION</a> requests a default compromise between speed and
-    compression (currently equivalent to level 6).
-    <p>
- 
-      <a href="#deflateInit">deflateInit</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
-    enough memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if level is not a valid compression level,
-    <a href="#Z_VERSION_ERROR">Z_VERSION_ERROR</a> if the zlib library version (<a href="#zlib_version">zlib_version</a>) is incompatible
-    with the version assumed by the caller (ZLIB_VERSION).
-    <a href="#msg">msg</a> is set to null if there is no error message.  <a href="#deflateInit">deflateInit</a> does not
-    perform any compression: this will be done by <a href="#deflate">deflate</a>().
-    <p>
- 
- <font color="Blue"><dt>  int  <a name="deflate">deflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);</font>
- <dd>
-     <a href="#deflate">deflate</a> compresses as much data as possible, and stops when the input
-   buffer becomes empty or the output buffer becomes full. It may introduce some
-   output latency (reading input without producing any output) except when
-   forced to flush.<p>
- 
-     The detailed semantics are as follows. <a href="#deflate">deflate</a> performs one or both of the
-   following actions:
- 
-   <ul>
-   <li> Compress more input starting at <a href="#next_in">next_in</a> and update <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a>
-     accordingly. If not all input can be processed (because there is not
-     enough room in the output buffer), <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> are updated and
-     processing will resume at this point for the next call of <a href="#deflate">deflate</a>().
- 
-   <li> 
-     Provide more output starting at <a href="#next_out">next_out</a> and update <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a>
-     accordingly. This action is forced if the parameter flush is non zero.
-     Forcing flush frequently degrades the compression ratio, so this parameter
-     should be set only when necessary (in interactive applications).
-     Some output may be provided even if flush is not set.
-   </ul> <p>
- 
-   Before the call of <a href="#deflate">deflate</a>(), the application should ensure that at least
-   one of the actions is possible, by providing more input and/or consuming
-   more output, and updating <a href="#avail_in">avail_in</a> or <a href="#avail_out">avail_out</a> accordingly ; <a href="#avail_out">avail_out</a>
-   should never be zero before the call. The application can consume the
-   compressed output when it wants, for example when the output buffer is full
-   (<a href="#avail_out">avail_out</a> == 0), or after each call of <a href="#deflate">deflate</a>(). If <a href="#deflate">deflate</a> returns <a href="#Z_OK">Z_OK</a>
-   and with zero <a href="#avail_out">avail_out</a>, it must be called again after making room in the
-   output buffer because there might be more output pending.
-   <p>
- 
-     If the parameter flush is set to <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>, all pending output is
-   flushed to the output buffer and the output is aligned on a byte boundary, so
-   that the decompressor can get all input data available so far. (In particular
-   <a href="#avail_in">avail_in</a> is zero after the call if enough output space has been provided
-   before the call.)  Flushing may degrade compression for some compression
-   algorithms and so it should be used only when necessary.
-   <p>
- 
-     If flush is set to <a href="#Z_FULL_FLUSH">Z_FULL_FLUSH</a>, all output is flushed as with
-   <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>, and the compression <a href="#state">state</a> is reset so that decompression can
-   restart from this point if previous compressed data has been damaged or if
-   random access is desired. Using <a href="#Z_FULL_FLUSH">Z_FULL_FLUSH</a> too often can seriously degrade
-   the compression.
-   <p>
- 
-     If <a href="#deflate">deflate</a> returns with <a href="#avail_out">avail_out</a> == 0, this function must be called again
-   with the same value of the flush parameter and more output space (updated
-   <a href="#avail_out">avail_out</a>), until the flush is complete (<a href="#deflate">deflate</a> returns with non-zero
-   <a href="#avail_out">avail_out</a>).
-   <p>
- 
-     If the parameter flush is set to <a href="#Z_FINISH">Z_FINISH</a>, pending input is processed,
-   pending output is flushed and <a href="#deflate">deflate</a> returns with <a href="#Z_STREAM_END">Z_STREAM_END</a> if there
-   was enough output space ; if <a href="#deflate">deflate</a> returns with <a href="#Z_OK">Z_OK</a>, this function must be
-   called again with <a href="#Z_FINISH">Z_FINISH</a> and more output space (updated <a href="#avail_out">avail_out</a>) but no
-   more input data, until it returns with <a href="#Z_STREAM_END">Z_STREAM_END</a> or an error. After
-   <a href="#deflate">deflate</a> has returned <a href="#Z_STREAM_END">Z_STREAM_END</a>, the only possible operations on the
-   stream are <a href="#deflateReset">deflateReset</a> or <a href="#deflateEnd">deflateEnd</a>.
-   <p>
-   
-     <a href="#Z_FINISH">Z_FINISH</a> can be used immediately after <a href="#deflateInit">deflateInit</a> if all the compression
-   is to be done in a single step. In this case, <a href="#avail_out">avail_out</a> must be at least
-   0.1% larger than <a href="#avail_in">avail_in</a> plus 12 bytes.  If <a href="#deflate">deflate</a> does not return
-   <a href="#Z_STREAM_END">Z_STREAM_END</a>, then it must be called again as described above.
-   <p>
- 
-     <a href="#deflate">deflate</a>() sets strm-&gt <a href="#adler">adler</a> to the <a href="#adler32">adler32</a> checksum of all input read
-   so far (that is, <a href="#total_in">total_in</a> bytes).
-   <p>
- 
-     <a href="#deflate">deflate</a>() may update <a href="#data_type">data_type</a> if it can make a good guess about
-   the input data type (<a href="#Z_ASCII">Z_ASCII</a> or <a href="#Z_BINARY">Z_BINARY</a>). In doubt, the data is considered
-   binary. This field is only for information purposes and does not affect
-   the compression algorithm in any manner.
-   <p>
- 
-     <a href="#deflate">deflate</a>() returns <a href="#Z_OK">Z_OK</a> if some progress has been made (more input
-   processed or more output produced), <a href="#Z_STREAM_END">Z_STREAM_END</a> if all input has been
-   consumed and all output has been produced (only when flush is set to
-   <a href="#Z_FINISH">Z_FINISH</a>), <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream <a href="#state">state</a> was inconsistent (for example
-   if <a href="#next_in">next_in</a> or <a href="#next_out">next_out</a> was NULL), <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if no progress is possible
-   (for example <a href="#avail_in">avail_in</a> or <a href="#avail_out">avail_out</a> was zero).
-   <p>
- 
- <font color="Blue"><dt>  int  <a name="deflateEnd">deflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
- <dd>
-      All dynamically allocated data structures for this stream are freed.
-    This function discards any unprocessed input and does not flush any
-    pending output.
-    <p>
- 
-      <a href="#deflateEnd">deflateEnd</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the
-    stream <a href="#state">state</a> was inconsistent, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the stream was freed
-    prematurely (some input or output was discarded). In the error case,
-    <a href="#msg">msg</a> may be set but then points to a static string (which must not be
-    deallocated).
-    <p>
- 
- <font color="Blue"><dt>  int  <a name="inflateInit">inflateInit</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
- <dd>     
- 	Initializes the internal stream <a href="#state">state</a> for decompression. The fields
-    <a href="#next_in">next_in</a>, <a href="#avail_in">avail_in</a>, <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized before by
-    the caller. If <a href="#next_in">next_in</a> is not <a href="#Z_NULL">Z_NULL</a> and <a href="#avail_in">avail_in</a> is large enough (the exact
-    value depends on the compression method), <a href="#inflateInit">inflateInit</a> determines the
-    compression method from the zlib header and allocates all data structures
-    accordingly ; otherwise the allocation will be deferred to the first call of
-    <a href="#inflate">inflate</a>.  If <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> are set to <a href="#Z_NULL">Z_NULL</a>, <a href="#inflateInit">inflateInit</a> updates them to
-    use default allocation functions.
-    <p>
- 
-      <a href="#inflateInit">inflateInit</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough
-    memory, <a href="#Z_VERSION_ERROR">Z_VERSION_ERROR</a> if the zlib library version is incompatible with the
-    version assumed by the caller.  <a href="#msg">msg</a> is set to null if there is no error
-    message. <a href="#inflateInit">inflateInit</a> does not perform any decompression apart from reading
-    the zlib header if present: this will be done by <a href="#inflate">inflate</a>().  (So <a href="#next_in">next_in</a> and
-    <a href="#avail_in">avail_in</a> may be modified, but <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> are unchanged.)
-    <p>
- 
- <font color="Blue"><dt>  int  <a name="inflate">inflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);</font>
- <dd>
-     <a href="#inflate">inflate</a> decompresses as much data as possible, and stops when the input
-   buffer becomes empty or the output buffer becomes full. It may some
-   introduce some output latency (reading input without producing any output)
-   except when forced to flush.
-   <p>
- 
-   The detailed semantics are as follows. <a href="#inflate">inflate</a> performs one or both of the
-   following actions:
- 
-   <ul>
-   <li> Decompress more input starting at <a href="#next_in">next_in</a> and update <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a>
-     accordingly. If not all input can be processed (because there is not
-     enough room in the output buffer), <a href="#next_in">next_in</a> is updated and processing
-     will resume at this point for the next call of <a href="#inflate">inflate</a>().
- 
-   <li> Provide more output starting at <a href="#next_out">next_out</a> and update <a href="#next_out">next_out</a> and 
-     <a href="#avail_out">avail_out</a> accordingly.  <a href="#inflate">inflate</a>() provides as much output as possible, 
-     until there is no more input data or no more space in the output buffer 
-     (see below about the flush parameter).
-   </ul> <p>
- 
-   Before the call of <a href="#inflate">inflate</a>(), the application should ensure that at least
-   one of the actions is possible, by providing more input and/or consuming
-   more output, and updating the next_* and avail_* values accordingly.
-   The application can consume the uncompressed output when it wants, for
-   example when the output buffer is full (<a href="#avail_out">avail_out</a> == 0), or after each
-   call of <a href="#inflate">inflate</a>(). If <a href="#inflate">inflate</a> returns <a href="#Z_OK">Z_OK</a> and with zero <a href="#avail_out">avail_out</a>, it
-   must be called again after making room in the output buffer because there
-   might be more output pending.
-   <p>
- 
-     If the parameter flush is set to <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>, <a href="#inflate">inflate</a> flushes as much
-   output as possible to the output buffer. The flushing behavior of <a href="#inflate">inflate</a> is
-   not specified for values of the flush parameter other than <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>
-   and <a href="#Z_FINISH">Z_FINISH</a>, but the current implementation actually flushes as much output
-   as possible anyway.
-   <p>
- 
-     <a href="#inflate">inflate</a>() should normally be called until it returns <a href="#Z_STREAM_END">Z_STREAM_END</a> or an
-   error. However if all decompression is to be performed in a single step
-   (a single call of <a href="#inflate">inflate</a>), the parameter flush should be set to
-   <a href="#Z_FINISH">Z_FINISH</a>. In this case all pending input is processed and all pending
-   output is flushed ; <a href="#avail_out">avail_out</a> must be large enough to hold all the
-   uncompressed data. (The size of the uncompressed data may have been saved
-   by the compressor for this purpose.) The next operation on this stream must
-   be <a href="#inflateEnd">inflateEnd</a> to deallocate the decompression <a href="#state">state</a>. The use of <a href="#Z_FINISH">Z_FINISH</a>
-   is never required, but can be used to inform <a href="#inflate">inflate</a> that a faster routine
-   may be used for the single <a href="#inflate">inflate</a>() call.
-   <p>
- 
-      If a preset dictionary is needed at this point (see <a href="#inflateSetDictionary">inflateSetDictionary</a>
-   below), <a href="#inflate">inflate</a> sets strm-<a href="#adler">adler</a> to the <a href="#adler32">adler32</a> checksum of the
-   dictionary chosen by the compressor and returns <a href="#Z_NEED_DICT">Z_NEED_DICT</a> ; otherwise 
-   it sets strm-&gt <a href="#adler">adler</a> to the <a href="#adler32">adler32</a> checksum of all output produced
-   so far (that is, <a href="#total_out">total_out</a> bytes) and returns <a href="#Z_OK">Z_OK</a>, <a href="#Z_STREAM_END">Z_STREAM_END</a> or
-   an error code as described below. At the end of the stream, <a href="#inflate">inflate</a>()
-   checks that its computed <a href="#adler32">adler32</a> checksum is equal to that saved by the
-   compressor and returns <a href="#Z_STREAM_END">Z_STREAM_END</a> only if the checksum is correct.
-   <p>
- 
-     <a href="#inflate">inflate</a>() returns <a href="#Z_OK">Z_OK</a> if some progress has been made (more input processed
-   or more output produced), <a href="#Z_STREAM_END">Z_STREAM_END</a> if the end of the compressed data has
-   been reached and all uncompressed output has been produced, <a href="#Z_NEED_DICT">Z_NEED_DICT</a> if a
-   preset dictionary is needed at this point, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the input data was
-   corrupted (input stream not conforming to the zlib format or incorrect
-   <a href="#adler32">adler32</a> checksum), <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream structure was inconsistent
-   (for example if <a href="#next_in">next_in</a> or <a href="#next_out">next_out</a> was NULL), <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
-   enough memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if no progress is possible or if there was not
-   enough room in the output buffer when <a href="#Z_FINISH">Z_FINISH</a> is used. In the <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a>
-   case, the application may then call <a href="#inflateSync">inflateSync</a> to look for a good
-   compression block.
-   <p>
- 
- <font color="Blue"><dt>  int  <a name="inflateEnd">inflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
- <dd>
-      All dynamically allocated data structures for this stream are freed.
-    This function discards any unprocessed input and does not flush any
-    pending output.
-    <p>
- 
-      <a href="#inflateEnd">inflateEnd</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream <a href="#state">state</a>
-    was inconsistent. In the error case, <a href="#msg">msg</a> may be set but then points to a
-    static string (which must not be deallocated).
- </dl>
- <hr>
- <a name="Advanced functions"><h2> Advanced functions </h2>
-     The following functions are needed only in some special applications.
- <h3> Function list </h3>
- <ul>
- <li>  int  <a href="#deflateInit2">deflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm,
- <li> int  <a href="#deflateSetDictionary">deflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt  dictLength);
- <li> int  <a href="#deflateCopy">deflateCopy</a> (<a href="#z_streamp">z_streamp</a> dest, <a href="#z_streamp">z_streamp</a> source);
- <li> int  <a href="#deflateReset">deflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);
- <li> int  <a href="#deflateParams">deflateParams</a> (<a href="#z_streamp">z_streamp</a> strm, int level, int strategy);
- <li> int  <a href="#inflateInit2">inflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, int  windowBits);
- <li>  int  <a href="#inflateSetDictionary">inflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt  dictLength);
- <li> int  <a href="#inflateSync">inflateSync</a> (<a href="#z_streamp">z_streamp</a> strm);
- <li> int  <a href="#inflateReset">inflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);
- 
- </ul>
- <h3> Function description </h3>
- <dl>
- <font color="Blue"><dt>  int  <a name="deflateInit2">deflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, int  level, int  method, int  windowBits, int  memLevel, int  strategy);</font>
- 
- <dd> This is another version of <a href="#deflateInit">deflateInit</a> with more compression options. The
-    fields <a href="#next_in">next_in</a>, <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized before by
-    the caller.<p>
- 
-      The method parameter is the compression method. It must be <a href="#Z_DEFLATED">Z_DEFLATED</a> in
-    this version of the library.<p>
- 
-      The windowBits parameter is the base two logarithm of the window size
-    (the size of the history buffer).  It should be in the range 8..15 for this
-    version of the library. Larger values of this parameter result in better
-    compression at the expense of memory usage. The default value is 15 if
-    <a href="#deflateInit">deflateInit</a> is used instead.<p>
- 
-      The memLevel parameter specifies how much memory should be allocated
-    for the internal compression <a href="#state">state</a>. memLevel=1 uses minimum memory but
-    is slow and reduces compression ratio ; memLevel=9 uses maximum memory
-    for optimal speed. The default value is 8. See zconf.h for total memory
-    usage as a function of windowBits and memLevel.<p>
- 
-      The strategy parameter is used to tune the compression algorithm. Use the
-    value <a href="#Z_DEFAULT_STRATEGY">Z_DEFAULT_STRATEGY</a> for normal data, <a href="#Z_FILTERED">Z_FILTERED</a> for data produced by a
-    filter (or predictor), or <a href="#Z_HUFFMAN_ONLY">Z_HUFFMAN_ONLY</a> to force Huffman encoding only (no
-    string match).  Filtered data consists mostly of small values with a
-    somewhat random distribution. In this case, the compression algorithm is
-    tuned to <a href="#compress">compress</a> them better. The effect of <a href="#Z_FILTERED">Z_FILTERED</a> is to force more
-    Huffman coding and less string matching ; it is somewhat intermediate
-    between Z_DEFAULT and <a href="#Z_HUFFMAN_ONLY">Z_HUFFMAN_ONLY</a>. The strategy parameter only affects
-    the compression ratio but not the correctness of the compressed output even
-    if it is not set appropriately.<p>
- 
-       <a href="#deflateInit2">deflateInit2</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough
-    memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a parameter is invalid (such as an invalid
-    method). <a href="#msg">msg</a> is set to null if there is no error message.  <a href="#deflateInit2">deflateInit2</a> does
-    not perform any compression: this will be done by <a href="#deflate">deflate</a>().<p>
-                             
- <font color="Blue"><dt> int  <a name="deflateSetDictionary">deflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt  dictLength);</font>
- <dd>
-      Initializes the compression dictionary from the given byte sequence
-    without producing any compressed output. This function must be called
-    immediately after <a href="#deflateInit">deflateInit</a>, <a href="#deflateInit2">deflateInit2</a> or <a href="#deflateReset">deflateReset</a>, before any
-    call of <a href="#deflate">deflate</a>. The compressor and decompressor must use exactly the same
-    dictionary (see <a href="#inflateSetDictionary">inflateSetDictionary</a>).<p>
- 
-      The dictionary should consist of strings (byte sequences) that are likely
-    to be encountered later in the data to be compressed, with the most commonly
-    used strings preferably put towards the end of the dictionary. Using a
-    dictionary is most useful when the data to be compressed is short and can be
-    predicted with good accuracy ; the data can then be compressed better than
-    with the default empty dictionary.<p>
- 
-      Depending on the size of the compression data structures selected by
-    <a href="#deflateInit">deflateInit</a> or <a href="#deflateInit2">deflateInit2</a>, a part of the dictionary may in effect be
-    discarded, for example if the dictionary is larger than the window size in
-    <a href="#deflate">deflate</a> or deflate2. Thus the strings most likely to be useful should be
-    put at the end of the dictionary, not at the front.<p>
- 
-      Upon return of this function, strm-&gt <a href="#adler">adler</a> is set to the Adler32 value
-    of the dictionary ; the decompressor may later use this value to determine
-    which dictionary has been used by the compressor. (The Adler32 value
-    applies to the whole dictionary even if only a subset of the dictionary is
-    actually used by the compressor.)<p>
- 
-      <a href="#deflateSetDictionary">deflateSetDictionary</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a
-    parameter is invalid (such as NULL dictionary) or the stream <a href="#state">state</a> is
-    inconsistent (for example if <a href="#deflate">deflate</a> has already been called for this stream
-    or if the compression method is bsort). <a href="#deflateSetDictionary">deflateSetDictionary</a> does not
-    perform any compression: this will be done by <a href="#deflate">deflate</a>().<p>
- 
- <font color="Blue"><dt> int  <a name="deflateCopy">deflateCopy</a> (<a href="#z_streamp">z_streamp</a> dest, <a href="#z_streamp">z_streamp</a> source);</font>
- <dd>
-      Sets the destination stream as a complete copy of the source stream.<p>
- 
-      This function can be useful when several compression strategies will be
-    tried, for example when there are several ways of pre-processing the input
-    data with a filter. The streams that will be discarded should then be freed
-    by calling <a href="#deflateEnd">deflateEnd</a>.  Note that <a href="#deflateCopy">deflateCopy</a> duplicates the internal
-    compression <a href="#state">state</a> which can be quite large, so this strategy is slow and
-    can consume lots of memory.<p>
- 
-      <a href="#deflateCopy">deflateCopy</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not
-    enough memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source stream <a href="#state">state</a> was inconsistent
-    (such as <a href="#zalloc">zalloc</a> being NULL). <a href="#msg">msg</a> is left unchanged in both source and
-    destination.<p>
- 
- <font color="Blue"><dt> int  <a name="deflateReset">deflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
- <dd>     This function is equivalent to <a href="#deflateEnd">deflateEnd</a> followed by <a href="#deflateInit">deflateInit</a>,
-    but does not free and reallocate all the internal compression <a href="#state">state</a>.
-    The stream will keep the same compression level and any other attributes
-    that may have been set by <a href="#deflateInit2">deflateInit2</a>.<p>
- 
-       <a href="#deflateReset">deflateReset</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source
-    stream <a href="#state">state</a> was inconsistent (such as <a href="#zalloc">zalloc</a> or <a href="#state">state</a> being NULL).<p>
- 
- <font color="Blue"><dt> int  <a name="deflateParams">deflateParams</a> (<a href="#z_streamp">z_streamp</a> strm, int level, int strategy);</font>
- <dd>
-      Dynamically update the compression level and compression strategy.  The
-    interpretation of level and strategy is as in <a href="#deflateInit2">deflateInit2</a>.  This can be
-    used to switch between compression and straight copy of the input data, or
-    to switch to a different kind of input data requiring a different
-    strategy. If the compression level is changed, the input available so far
-    is compressed with the old level (and may be flushed); the new level will
-    take effect only at the next call of <a href="#deflate">deflate</a>().<p>
- 
-      Before the call of <a href="#deflateParams">deflateParams</a>, the stream <a href="#state">state</a> must be set as for
-    a call of <a href="#deflate">deflate</a>(), since the currently available input may have to
-    be compressed and flushed. In particular, strm-&gt <a href="#avail_out">avail_out</a> must be 
-    non-zero.<p>
- 
-      <a href="#deflateParams">deflateParams</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source
-    stream <a href="#state">state</a> was inconsistent or if a parameter was invalid, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a>
-    if strm-&gtavail_out was zero.<p>
- 
- <font color="Blue"><dt> int  <a name="inflateInit2">inflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, int  windowBits);</font>
- 
- <dd>     This is another version of <a href="#inflateInit">inflateInit</a> with an extra parameter. The
-    fields <a href="#next_in">next_in</a>, <a href="#avail_in">avail_in</a>, <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized
-    before by the caller.<p>
- 
-      The windowBits parameter is the base two logarithm of the maximum window
-    size (the size of the history buffer).  It should be in the range 8..15 for
-    this version of the library. The default value is 15 if <a href="#inflateInit">inflateInit</a> is used
-    instead. If a compressed stream with a larger window size is given as
-    input, <a href="#inflate">inflate</a>() will return with the error code <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> instead of
-    trying to allocate a larger window.<p>
- 
-       <a href="#inflateInit2">inflateInit2</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough
-    memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a parameter is invalid (such as a negative
-    memLevel). <a href="#msg">msg</a> is set to null if there is no error message.  <a href="#inflateInit2">inflateInit2</a>
-    does not perform any decompression apart from reading the zlib header if
-    present: this will be done by <a href="#inflate">inflate</a>(). (So <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> may be
-    modified, but <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> are unchanged.)<p>
- 
- <font color="Blue"><dt>  int  <a name="inflateSetDictionary">inflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt  dictLength);</font>
- <dd>
-      Initializes the decompression dictionary from the given uncompressed byte
-    sequence. This function must be called immediately after a call of <a href="#inflate">inflate</a>
-    if this call returned <a href="#Z_NEED_DICT">Z_NEED_DICT</a>. The dictionary chosen by the compressor
-    can be determined from the Adler32 value returned by this call of
-    <a href="#inflate">inflate</a>. The compressor and decompressor must use exactly the same
-    dictionary (see <a href="#deflateSetDictionary">deflateSetDictionary</a>).<p>
- 
-      <a href="#inflateSetDictionary">inflateSetDictionary</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a
-    parameter is invalid (such as NULL dictionary) or the stream <a href="#state">state</a> is
-    inconsistent, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the given dictionary doesn't match the
-    expected one (incorrect Adler32 value). <a href="#inflateSetDictionary">inflateSetDictionary</a> does not
-    perform any decompression: this will be done by subsequent calls of
-    <a href="#inflate">inflate</a>().<p>
- 
- <font color="Blue"><dt> int  <a name="inflateSync">inflateSync</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
- 
- <dd>    Skips invalid compressed data until a full flush point (see above the
-   description of <a href="#deflate">deflate</a> with <a href="#Z_FULL_FLUSH">Z_FULL_FLUSH</a>) can be found, or until all
-   available input is skipped. No output is provided.<p>
- 
-     <a href="#inflateSync">inflateSync</a> returns <a href="#Z_OK">Z_OK</a> if a full flush point has been found, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a>
-   if no more input was provided, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if no flush point has been found,
-   or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream structure was inconsistent. In the success
-   case, the application may save the current current value of <a href="#total_in">total_in</a> which
-   indicates where valid compressed data was found. In the error case, the
-   application may repeatedly call <a href="#inflateSync">inflateSync</a>, providing more input each time,
-   until success or end of the input data.<p>
- 
- <font color="Blue"><dt> int  <a name="inflateReset">inflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);</font>
- <dd>
-      This function is equivalent to <a href="#inflateEnd">inflateEnd</a> followed by <a href="#inflateInit">inflateInit</a>,
-    but does not free and reallocate all the internal decompression <a href="#state">state</a>.
-    The stream will keep attributes that may have been set by <a href="#inflateInit2">inflateInit2</a>.
-    <p>
- 
-       <a href="#inflateReset">inflateReset</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source
-    stream <a href="#state">state</a> was inconsistent (such as <a href="#zalloc">zalloc</a> or <a href="#state">state</a> being NULL).
-    <p>
- </dl>
- 
- <hr>
- <a name="Checksum functions"><h2> Checksum functions </h2>
-      These functions are not related to compression but are exported
-    anyway because they might be useful in applications using the
-    compression library.
- <h3> Function list </h3>
- <ul>
- <li> uLong  <a href="#adler32">adler32</a> (uLong <a href="#adler">adler</a>, const Bytef *buf, uInt len);
- <li> uLong  <a href="#crc32">crc32</a>   (uLong crc, const Bytef *buf, uInt len);
- </ul>
- <h3> Function description </h3>
- <dl>
- <font color="Blue"><dt> uLong  <a name="adler32">adler32</a> (uLong <a href="#adler">adler</a>, const Bytef *buf, uInt len);</font>
- <dd>
-      Update a running Adler-32 checksum with the bytes buf[0..len-1] and
-    return the updated checksum. If buf is NULL, this function returns
-    the required initial value for the checksum.
-    <p>
-    An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
-    much faster. Usage example:
-    <pre>
- 
-      uLong <a href="#adler">adler</a> = <a href="#adler32">adler32</a>(0L, <a href="#Z_NULL">Z_NULL</a>, 0);
- 
-      while (read_buffer(buffer, length) != EOF) {
-        <a href="#adler">adler</a> = <a href="#adler32">adler32</a>(<a href="#adler">adler</a>, buffer, length);
-      }
-      if (<a href="#adler">adler</a> != original_adler) error();
-    </pre>
- 
- <font color="Blue"><dt> uLong  <a name="crc32">crc32</a>   (uLong crc, const Bytef *buf, uInt len);</font>
- <dd>
-      Update a running crc with the bytes buf[0..len-1] and return the updated
-    crc. If buf is NULL, this function returns the required initial value
-    for the crc. Pre- and post-conditioning (one's complement) is performed
-    within this function so it shouldn't be done by the application.
-    Usage example:
-    <pre>
- 
-      uLong crc = <a href="#crc32">crc32</a>(0L, <a href="#Z_NULL">Z_NULL</a>, 0);
- 
-      while (read_buffer(buffer, length) != EOF) {
-        crc = <a href="#crc32">crc32</a>(crc, buffer, length);
-      }
-      if (crc != original_crc) error();
-    </pre>
- </dl>
- <hr>
- <a name="struct z_stream_s"><h2> struct z_stream_s </h2>
- <font color="Blue">
- <a name="z_stream_s">
- <pre>
- typedef struct z_stream_s {
-     Bytef    *<a name="next_in">next_in</a>;  /* next input byte */
-     uInt     <a name="avail_in">avail_in</a>;  /* number of bytes available at <a href="#next_in">next_in</a> */
-     uLong    <a name="total_in">total_in</a>;  /* total nb of input bytes read so far */
- 
-     Bytef    *<a name="next_out">next_out</a>; /* next output byte should be put there */
-     uInt     <a name="avail_out">avail_out</a>; /* remaining free space at <a href="#next_out">next_out</a> */
-     uLong    <a name="total_out">total_out</a>; /* total nb of bytes output so far */
- 
-     char     *<a name="msg">msg</a>;      /* last error message, NULL if no error */
-     struct internal_state FAR *<a name="state">state</a>; /* not visible by applications */
- 
-     alloc_func <a name="zalloc">zalloc</a>;  /* used to allocate the internal <a href="#state">state</a> */
-     free_func  <a name="zfree">zfree</a>;   /* used to free the internal <a href="#state">state</a> */
-     voidpf     <a name="opaque">opaque</a>;  /* private data object passed to <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> */
- 
-     int     <a name="data_type">data_type</a>;  /* best guess about the data type: ascii or binary */
-     uLong   <a name="adler">adler</a>;      /* <a href="#adler32">adler32</a> value of the uncompressed data */
-     uLong   <a name="reserved">reserved</a>;   /* <a href="#reserved">reserved</a> for future use */
- } <a href="#z_stream_s">z_stream</a> ;
- 
- typedef <a href="#z_stream_s">z_stream</a> FAR * <a name="z_streamp">z_streamp</a>;  ÿ 
- </pre>
- </font>
-    The application must update <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> when <a href="#avail_in">avail_in</a> has
-    dropped to zero. It must update <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> when <a href="#avail_out">avail_out</a>
-    has dropped to zero. The application must initialize <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and
-    <a href="#opaque">opaque</a> before calling the init function. All other fields are set by the
-    compression library and must not be updated by the application. <p>
- 
-    The <a href="#opaque">opaque</a> value provided by the application will be passed as the first
-    parameter for calls of <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a>. This can be useful for custom
-    memory management. The compression library attaches no meaning to the
-    <a href="#opaque">opaque</a> value. <p>
- 
-    <a href="#zalloc">zalloc</a> must return <a href="#Z_NULL">Z_NULL</a> if there is not enough memory for the object.
-    If zlib is used in a multi-threaded application, <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> must be
-    thread safe. <p>
- 
-    On 16-bit systems, the functions <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> must be able to allocate
-    exactly 65536 bytes, but will not be required to allocate more than this
-    if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
-    pointers returned by <a href="#zalloc">zalloc</a> for objects of exactly 65536 bytes *must*
-    have their offset normalized to zero. The default allocation function
-    provided by this library ensures this (see zutil.c). To reduce memory
-    requirements and avoid any allocation of 64K objects, at the expense of
-    compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
-    <p>
- 
-    The fields <a href="#total_in">total_in</a> and <a href="#total_out">total_out</a> can be used for statistics or
-    progress reports. After compression, <a href="#total_in">total_in</a> holds the total size of
-    the uncompressed data and may be saved for use in the decompressor
-    (particularly if the decompressor wants to decompress everything in
-    a single step). <p>
- 
- <hr>
- <a name="Constants"><h2> Constants </h2>
- <font color="Blue">
- <pre>
- #define <a name="Z_NO_FLUSH">Z_NO_FLUSH</a>      0
- #define <a name="Z_PARTIAL_FLUSH">Z_PARTIAL_FLUSH</a> 1 
- 	/* will be removed, use <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a> instead */
- #define <a name="Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>    2
- #define <a name="Z_FULL_FLUSH">Z_FULL_FLUSH</a>    3
- #define <a name="Z_FINISH">Z_FINISH</a>        4
- /* Allowed flush values ; see <a href="#deflate">deflate</a>() below for details */
- 
- #define <a name="Z_OK">Z_OK</a>            0
- #define <a name="Z_STREAM_END">Z_STREAM_END</a>    1
- #define <a name="Z_NEED_DICT">Z_NEED_DICT</a>     2
- #define <a name="Z_ERRNO">Z_ERRNO</a>        (-1)
- #define <a name="Z_STREAM_ERROR">Z_STREAM_ERROR</a> (-2)
- #define <a name="Z_DATA_ERROR">Z_DATA_ERROR</a>   (-3)
- #define <a name="Z_MEM_ERROR">Z_MEM_ERROR</a>    (-4)
- #define <a name="Z_BUF_ERROR">Z_BUF_ERROR</a>    (-5)
- #define <a name="Z_VERSION_ERROR">Z_VERSION_ERROR</a> (-6)
- /* Return codes for the compression/decompression functions. Negative
-  * values are errors, positive values are used for special but normal events.
-  */
- 
- #define <a name="Z_NO_COMPRESSION">Z_NO_COMPRESSION</a>         0
- #define <a name="Z_BEST_SPEED">Z_BEST_SPEED</a>             1
- #define <a name="Z_BEST_COMPRESSION">Z_BEST_COMPRESSION</a>       9
- #define <a name="Z_DEFAULT_COMPRESSION">Z_DEFAULT_COMPRESSION</a>  (-1)
- /* compression levels */
- 
- #define <a name="Z_FILTERED">Z_FILTERED</a>            1
- #define <a name="Z_HUFFMAN_ONLY">Z_HUFFMAN_ONLY</a>        2
- #define <a name="Z_DEFAULT_STRATEGY">Z_DEFAULT_STRATEGY</a>    0
- /* compression strategy ; see <a href="#deflateInit2">deflateInit2</a>() below for details */
- 
- #define <a name="Z_BINARY">Z_BINARY</a>   0
- #define <a name="Z_ASCII">Z_ASCII</a>    1
- #define <a name="Z_UNKNOWN">Z_UNKNOWN</a>  2
- /* Possible values of the <a href="#data_type">data_type</a> field */
- 
- #define <a name="Z_DEFLATED">Z_DEFLATED</a>   8
- /* The <a href="#deflate">deflate</a> compression method (the only one supported in this version) */
- 
- #define <a name="Z_NULL">Z_NULL</a>  0  /* for initializing <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a>, <a href="#opaque">opaque</a> */
- 
- #define <a name="zlib_version">zlib_version</a> <a href="#zlibVersion">zlibVersion</a>()
- /* for compatibility with versions less than 1.0.2 */
- </pre>
- </font>
- 
- <hr>
- <a name="Misc"><h2> Misc </h2>
-  <a href="#deflateInit">deflateInit</a> and <a href="#inflateInit">inflateInit</a> are macros to allow checking the zlib version
-  and the compiler's view of <a href="#z_stream_s">z_stream</a>.
-  <p>
-  Other functions:
-  <dl>
-  <font color="Blue"><dt> const char   *  <a name="zError">zError</a>           (int err);</font>
-  <font color="Blue"><dt> int             <a name="inflateSyncPoint">inflateSyncPoint</a> (<a href="#z_streamp">z_streamp</a> z);</font>
-  <font color="Blue"><dt> const uLongf *  <a name="get_crc_table">get_crc_table</a>    (void);</font>
-  </dl>
-  <hr>
-  <font size="-1">
-  Last update: Wed Oct 13 20:42:34 1999<br>
-  piapi@csie.ntu.edu.tw
-  </font>
- 
- </body>
- </html>
--- 0 ----
diff -Nrcpad gcc-3.4.3/zlib/zutil.c gcc-4.0.0/zlib/zutil.c
*** gcc-3.4.3/zlib/zutil.c	Mon Mar 11 22:11:18 2002
--- gcc-4.0.0/zlib/zutil.c	Mon Oct 11 18:45:38 2004
***************
*** 1,19 ****
  /* zutil.c -- target dependent utility functions for the compression library
!  * Copyright (C) 1995-2002 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h 
   */
  
  /* @(#) $Id: zutil.c,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
  
  #include "zutil.h"
  
  struct internal_state      {int dummy;}; /* for buggy compilers */
  
  #ifndef STDC
  extern void exit OF((int));
  #endif
  
! const char *z_errmsg[10] = {
  "need dictionary",     /* Z_NEED_DICT       2  */
  "stream end",          /* Z_STREAM_END      1  */
  "",                    /* Z_OK              0  */
--- 1,21 ----
  /* zutil.c -- target dependent utility functions for the compression library
!  * Copyright (C) 1995-2003 Jean-loup Gailly.
!  * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
  /* @(#) $Id: zutil.c,v 1.1.1.2 2002/03/11 21:53:27 tromey Exp $ */
  
  #include "zutil.h"
  
+ #ifndef NO_DUMMY_DECL
  struct internal_state      {int dummy;}; /* for buggy compilers */
+ #endif
  
  #ifndef STDC
  extern void exit OF((int));
  #endif
  
! const char * const z_errmsg[10] = {
  "need dictionary",     /* Z_NEED_DICT       2  */
  "stream end",          /* Z_STREAM_END      1  */
  "",                    /* Z_OK              0  */
*************** const char * ZEXPORT zlibVersion()
*** 31,36 ****
--- 33,121 ----
      return ZLIB_VERSION;
  }
  
+ uLong ZEXPORT zlibCompileFlags()
+ {
+     uLong flags;
+ 
+     flags = 0;
+     switch (sizeof(uInt)) {
+     case 2:     break;
+     case 4:     flags += 1;     break;
+     case 8:     flags += 2;     break;
+     default:    flags += 3;
+     }
+     switch (sizeof(uLong)) {
+     case 2:     break;
+     case 4:     flags += 1 << 2;        break;
+     case 8:     flags += 2 << 2;        break;
+     default:    flags += 3 << 2;
+     }
+     switch (sizeof(voidpf)) {
+     case 2:     break;
+     case 4:     flags += 1 << 4;        break;
+     case 8:     flags += 2 << 4;        break;
+     default:    flags += 3 << 4;
+     }
+     switch (sizeof(z_off_t)) {
+     case 2:     break;
+     case 4:     flags += 1 << 6;        break;
+     case 8:     flags += 2 << 6;        break;
+     default:    flags += 3 << 6;
+     }
+ #ifdef DEBUG
+     flags += 1 << 8;
+ #endif
+ #if defined(ASMV) || defined(ASMINF)
+     flags += 1 << 9;
+ #endif
+ #ifdef ZLIB_WINAPI
+     flags += 1 << 10;
+ #endif
+ #ifdef BUILDFIXED
+     flags += 1 << 12;
+ #endif
+ #ifdef DYNAMIC_CRC_TABLE
+     flags += 1 << 13;
+ #endif
+ #ifdef NO_GZCOMPRESS
+     flags += 1 << 16;
+ #endif
+ #ifdef NO_GZIP
+     flags += 1 << 17;
+ #endif
+ #ifdef PKZIP_BUG_WORKAROUND
+     flags += 1 << 20;
+ #endif
+ #ifdef FASTEST
+     flags += 1 << 21;
+ #endif
+ #ifdef STDC
+ #  ifdef NO_vsnprintf
+         flags += 1 << 25;
+ #    ifdef HAS_vsprintf_void
+         flags += 1 << 26;
+ #    endif
+ #  else
+ #    ifdef HAS_vsnprintf_void
+         flags += 1 << 26;
+ #    endif
+ #  endif
+ #else
+         flags += 1 << 24;
+ #  ifdef NO_snprintf
+         flags += 1 << 25;
+ #    ifdef HAS_sprintf_void
+         flags += 1 << 26;
+ #    endif
+ #  else
+ #    ifdef HAS_snprintf_void
+         flags += 1 << 26;
+ #    endif
+ #  endif
+ #endif
+     return flags;
+ }
+ 
  #ifdef DEBUG
  
  #  ifndef verbose
*************** const char * ZEXPORT zError(err)
*** 55,60 ****
--- 140,149 ----
      return ERR_MSG(err);
  }
  
+ #if defined(_WIN32_WCE)
+     /* does not exist on WCE */
+     int errno = 0;
+ #endif
  
  #ifndef HAVE_MEMCPY
  
*************** void zmemzero(dest, len)
*** 93,103 ****
  }
  #endif
  
  #ifdef __TURBOC__
! #if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__)
! /* Small and medium model in Turbo C are for now limited to near allocation
!  * with reduced MAX_WBITS and MAX_MEM_LEVEL
!  */
  #  define MY_ZCALLOC
  
  /* Turbo C malloc() does not allow dynamic allocation of 64K bytes
--- 182,193 ----
  }
  #endif
  
+ 
+ #ifdef SYS16BIT
+ 
  #ifdef __TURBOC__
! /* Turbo C in 16-bit mode */
! 
  #  define MY_ZCALLOC
  
  /* Turbo C malloc() does not allow dynamic allocation of 64K bytes
*************** void  zcfree (voidpf opaque, voidpf ptr)
*** 169,179 ****
      ptr = opaque; /* just to make some compilers happy */
      Assert(0, "zcfree: ptr not found");
  }
! #endif
  #endif /* __TURBOC__ */
  
  
! #if defined(M_I86) && !defined(__32BIT__)
  /* Microsoft C in 16-bit mode */
  
  #  define MY_ZCALLOC
--- 259,269 ----
      ptr = opaque; /* just to make some compilers happy */
      Assert(0, "zcfree: ptr not found");
  }
! 
  #endif /* __TURBOC__ */
  
  
! #ifdef M_I86
  /* Microsoft C in 16-bit mode */
  
  #  define MY_ZCALLOC
*************** void  zcfree (voidpf opaque, voidpf ptr)
*** 195,206 ****
      _hfree(ptr);
  }
  
! #endif /* MSC */
  
  
  #ifndef MY_ZCALLOC /* Any system without a special alloc function */
  
  #ifndef STDC
  extern voidp  calloc OF((uInt items, uInt size));
  extern void   free   OF((voidpf ptr));
  #endif
--- 285,299 ----
      _hfree(ptr);
  }
  
! #endif /* M_I86 */
! 
! #endif /* SYS16BIT */
  
  
  #ifndef MY_ZCALLOC /* Any system without a special alloc function */
  
  #ifndef STDC
+ extern voidp  malloc OF((uInt size));
  extern voidp  calloc OF((uInt items, uInt size));
  extern void   free   OF((voidpf ptr));
  #endif
*************** voidpf zcalloc (opaque, items, size)
*** 211,217 ****
      unsigned size;
  {
      if (opaque) items += size - size; /* make compiler happy */
!     return (voidpf)calloc(items, size);
  }
  
  void  zcfree (opaque, ptr)
--- 304,311 ----
      unsigned size;
  {
      if (opaque) items += size - size; /* make compiler happy */
!     return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
!                               (voidpf)calloc(items, size);
  }
  
  void  zcfree (opaque, ptr)
diff -Nrcpad gcc-3.4.3/zlib/zutil.h gcc-4.0.0/zlib/zutil.h
*** gcc-3.4.3/zlib/zutil.h	Mon Mar 11 22:11:18 2002
--- gcc-4.0.0/zlib/zutil.h	Mon Oct 11 18:45:38 2004
***************
*** 1,5 ****
  /* zutil.h -- internal interface and configuration of the compression library
!  * Copyright (C) 1995-2002 Jean-loup Gailly.
   * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
--- 1,5 ----
  /* zutil.h -- internal interface and configuration of the compression library
!  * Copyright (C) 1995-2003 Jean-loup Gailly.
   * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
***************
*** 10,18 ****
  
  /* @(#) $Id: zutil.h,v 1.1.1.2 2002/03/11 21:53:28 tromey Exp $ */
  
! #ifndef _Z_UTIL_H
! #define _Z_UTIL_H
  
  #include "zlib.h"
  
  #ifdef STDC
--- 10,19 ----
  
  /* @(#) $Id: zutil.h,v 1.1.1.2 2002/03/11 21:53:28 tromey Exp $ */
  
! #ifndef ZUTIL_H
! #define ZUTIL_H
  
+ #define ZLIB_INTERNAL
  #include "zlib.h"
  
  #ifdef STDC
*************** typedef unsigned short ush;
*** 37,43 ****
  typedef ush FAR ushf;
  typedef unsigned long  ulg;
  
! extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
  /* (size given to avoid silly warnings with Visual C++) */
  
  #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
--- 38,44 ----
  typedef ush FAR ushf;
  typedef unsigned long  ulg;
  
! extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
  /* (size given to avoid silly warnings with Visual C++) */
  
  #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
*************** extern const char *z_errmsg[10]; /* inde
*** 73,79 ****
  
          /* target dependencies */
  
! #ifdef MSDOS
  #  define OS_CODE  0x00
  #  if defined(__TURBOC__) || defined(__BORLANDC__)
  #    if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
--- 74,80 ----
  
          /* target dependencies */
  
! #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
  #  define OS_CODE  0x00
  #  if defined(__TURBOC__) || defined(__BORLANDC__)
  #    if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
*************** extern const char *z_errmsg[10]; /* inde
*** 81,99 ****
         void _Cdecl farfree( void *block );
         void *_Cdecl farmalloc( unsigned long nbytes );
  #    else
! #     include <alloc.h>
  #    endif
  #  else /* MSC or DJGPP */
  #    include <malloc.h>
  #  endif
  #endif
  
! #ifdef OS2
! #  define OS_CODE  0x06
! #endif
! 
! #ifdef WIN32 /* Window 95 & Windows NT */
! #  define OS_CODE  0x0b
  #endif
  
  #if defined(VAXC) || defined(VMS)
--- 82,96 ----
         void _Cdecl farfree( void *block );
         void *_Cdecl farmalloc( unsigned long nbytes );
  #    else
! #      include <alloc.h>
  #    endif
  #  else /* MSC or DJGPP */
  #    include <malloc.h>
  #  endif
  #endif
  
! #ifdef AMIGA
! #  define OS_CODE  0x01
  #endif
  
  #if defined(VAXC) || defined(VMS)
*************** extern const char *z_errmsg[10]; /* inde
*** 102,115 ****
       fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
  #endif
  
- #ifdef AMIGA
- #  define OS_CODE  0x01
- #endif
- 
  #if defined(ATARI) || defined(atarist)
  #  define OS_CODE  0x05
  #endif
  
  #if defined(MACOS) || defined(TARGET_OS_MAC)
  #  define OS_CODE  0x07
  #  if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
--- 99,112 ----
       fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
  #endif
  
  #if defined(ATARI) || defined(atarist)
  #  define OS_CODE  0x05
  #endif
  
+ #ifdef OS2
+ #  define OS_CODE  0x06
+ #endif
+ 
  #if defined(MACOS) || defined(TARGET_OS_MAC)
  #  define OS_CODE  0x07
  #  if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
*************** extern const char *z_errmsg[10]; /* inde
*** 121,144 ****
  #  endif
  #endif
  
- #ifdef __50SERIES /* Prime/PRIMOS */
- #  define OS_CODE  0x0F
- #endif
- 
  #ifdef TOPS20
  #  define OS_CODE  0x0a
  #endif
  
  #if defined(_BEOS_) || defined(RISCOS)
  #  define fdopen(fd,mode) NULL /* No fdopen() */
  #endif
  
  #if (defined(_MSC_VER) && (_MSC_VER > 600))
! #  define fdopen(fd,type)  _fdopen(fd,type)
  #endif
  
! 
!         /* Common defaults */
  
  #ifndef OS_CODE
  #  define OS_CODE  0x03  /* assume Unix */
--- 118,154 ----
  #  endif
  #endif
  
  #ifdef TOPS20
  #  define OS_CODE  0x0a
  #endif
  
+ #ifdef WIN32
+ #  ifndef __CYGWIN__  /* Cygwin is Unix, not Win32 */
+ #    define OS_CODE  0x0b
+ #  endif
+ #endif
+ 
+ #ifdef __50SERIES /* Prime/PRIMOS */
+ #  define OS_CODE  0x0f
+ #endif
+ 
  #if defined(_BEOS_) || defined(RISCOS)
  #  define fdopen(fd,mode) NULL /* No fdopen() */
  #endif
  
  #if (defined(_MSC_VER) && (_MSC_VER > 600))
! #  if defined(_WIN32_WCE)
! #    define fdopen(fd,mode) NULL /* No fdopen() */
! #    ifndef _PTRDIFF_T_DEFINED
!        typedef int ptrdiff_t;
! #      define _PTRDIFF_T_DEFINED
! #    endif
! #  else
! #    define fdopen(fd,type)  _fdopen(fd,type)
! #  endif
  #endif
  
!         /* common defaults */
  
  #ifndef OS_CODE
  #  define OS_CODE  0x03  /* assume Unix */
*************** extern const char *z_errmsg[10]; /* inde
*** 150,155 ****
--- 160,195 ----
  
           /* functions */
  
+ #if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
+ #  ifndef HAVE_VSNPRINTF
+ #    define HAVE_VSNPRINTF
+ #  endif
+ #endif
+ #if defined(__CYGWIN__)
+ #  ifndef HAVE_VSNPRINTF
+ #    define HAVE_VSNPRINTF
+ #  endif
+ #endif
+ #ifndef HAVE_VSNPRINTF
+ #  ifdef MSDOS
+      /* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
+         but for now we just assume it doesn't. */
+ #    define NO_vsnprintf
+ #  endif
+ #  ifdef __TURBOC__
+ #    define NO_vsnprintf
+ #  endif
+ #  ifdef WIN32
+      /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
+ #    if !defined(vsnprintf) && !defined(NO_vsnprintf)
+ #      define vsnprintf _vsnprintf
+ #    endif
+ #  endif
+ #  ifdef __SASC
+ #    define NO_vsnprintf
+ #  endif
+ #endif
+ 
  #ifdef HAVE_STRERROR
     extern char *strerror OF((int));
  #  define zstrerror(errnum) strerror(errnum)
*************** extern const char *z_errmsg[10]; /* inde
*** 207,214 ****
  #endif
  
  
- typedef uLong (ZEXPORT *check_func) OF((uLong check, const Bytef *buf,
- 				       uInt len));
  voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
  void   zcfree  OF((voidpf opaque, voidpf ptr));
  
--- 247,252 ----
*************** void   zcfree  OF((voidpf opaque, voidpf
*** 217,220 ****
  #define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
  #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
  
! #endif /* _Z_UTIL_H */
--- 255,258 ----
  #define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
  #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
  
! #endif /* ZUTIL_H */
